diff --git a/enter/.obsidian/hotkeys.json b/enter/.obsidian/hotkeys.json index c639ae8..1c84d77 100644 --- a/enter/.obsidian/hotkeys.json +++ b/enter/.obsidian/hotkeys.json @@ -7,12 +7,28 @@ "key": "P" } ], - "obsidian-extract-pdf-annotations:extract-annotations-single": [ + "app:toggle-left-sidebar": [ + { + "modifiers": [ + "Ctrl" + ], + "key": "L" + } + ], + "theme:use-dark": [ { "modifiers": [ "Alt" ], - "key": "E" + "key": "D" + } + ], + "theme:use-light": [ + { + "modifiers": [ + "Alt" + ], + "key": "L" } ] } \ No newline at end of file diff --git a/enter/.obsidian/plugins/better-pdf-plugin/main.js b/enter/.obsidian/plugins/better-pdf-plugin/main.js deleted file mode 100644 index 20233e7..0000000 --- a/enter/.obsidian/plugins/better-pdf-plugin/main.js +++ /dev/null @@ -1,89834 +0,0 @@ -'use strict'; - -var obsidian = require('obsidian'); - -function _mergeNamespaces(n, m) { - m.forEach(function (e) { - e && typeof e !== 'string' && !Array.isArray(e) && Object.keys(e).forEach(function (k) { - if (k !== 'default' && !(k in n)) { - var d = Object.getOwnPropertyDescriptor(e, k); - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: function () { return e[k]; } - }); - } - }); - }); - return Object.freeze(n); -} - -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ -/* global Reflect, Promise */ - -var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); -}; - -function __extends(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); -} - -function __awaiter(thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -} - -function __generator(thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -} - -var BetterPdfSettings = /** @class */ (function () { - function BetterPdfSettings() { - this.fit_by_default = true; - this.link_by_default = true; - } - return BetterPdfSettings; -}()); -var BetterPdfSettingsTab = /** @class */ (function (_super) { - __extends(BetterPdfSettingsTab, _super); - function BetterPdfSettingsTab(app, plugin) { - var _this = _super.call(this, app, plugin) || this; - _this.plugin = plugin; - return _this; - } - BetterPdfSettingsTab.prototype.display = function () { - var _this = this; - var containerEl = this.containerEl; - containerEl.empty(); - new obsidian.Setting(containerEl) - .setName("Fit pages by default") - .setDesc("When turned on, pages will be scaled to the view by default. Can be overridden using the 'fit' parameter") - .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.fit_by_default) - .onChange(function (value) { - _this.plugin.settings.fit_by_default = value; - _this.plugin.saveData(_this.plugin.settings); - }); }); - new obsidian.Setting(containerEl) - .setName("Link pages by default") - .setDesc("When turned on, pages will be linked to their document by default. Can be overridden using the 'link' parameter") - .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.link_by_default) - .onChange(function (value) { - _this.plugin.settings.link_by_default = value; - _this.plugin.saveData(_this.plugin.settings); - }); }); - }; - return BetterPdfSettingsTab; -}(obsidian.PluginSettingTab)); - -var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - -function createCommonjsModule(fn, basedir, module) { - return module = { - path: basedir, - exports: {}, - require: function (path, base) { - return commonjsRequire(path, (base === undefined || base === null) ? module.path : base); - } - }, fn(module, module.exports), module.exports; -} - -function getAugmentedNamespace(n) { - if (n.__esModule) return n; - var a = Object.defineProperty({}, '__esModule', {value: true}); - Object.keys(n).forEach(function (k) { - var d = Object.getOwnPropertyDescriptor(n, k); - Object.defineProperty(a, k, d.get ? d : { - enumerable: true, - get: function () { - return n[k]; - } - }); - }); - return a; -} - -function commonjsRequire () { - throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); -} - -var _nodeResolve_empty = {}; - -var _nodeResolve_empty$1 = /*#__PURE__*/Object.freeze({ - __proto__: null, - 'default': _nodeResolve_empty -}); - -var require$$5 = /*@__PURE__*/getAugmentedNamespace(_nodeResolve_empty$1); - -var pdf = createCommonjsModule(function (module, exports) { -/** - * @licstart The following is the entire license notice for the - * Javascript code in this page - * - * Copyright 2021 Mozilla Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @licend The above is the entire license notice for the - * Javascript code in this page - */ - -(function webpackUniversalModuleDefinition(root, factory) { - module.exports = factory(); -})(commonjsGlobal, function() { -return /******/ (() => { // webpackBootstrap -/******/ var __webpack_modules__ = ([ -/* 0 */, -/* 1 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.StatTimer = exports.RenderingCancelledException = exports.PixelsPerInch = exports.PageViewport = exports.PDFDateString = exports.LinkTarget = exports.DOMStandardFontDataFactory = exports.DOMSVGFactory = exports.DOMCanvasFactory = exports.DOMCMapReaderFactory = void 0; -exports.addLinkAttributes = addLinkAttributes; -exports.deprecated = deprecated; -exports.getFilenameFromUrl = getFilenameFromUrl; -exports.getPdfFilenameFromUrl = getPdfFilenameFromUrl; -exports.getXfaPageViewport = getXfaPageViewport; -exports.isDataScheme = isDataScheme; -exports.isPdfFile = isPdfFile; -exports.isValidFetchUrl = isValidFetchUrl; -exports.loadScript = loadScript; - -var _util = __w_pdfjs_require__(2); - -var _base_factory = __w_pdfjs_require__(5); - -const DEFAULT_LINK_REL = "noopener noreferrer nofollow"; -const SVG_NS = "http://www.w3.org/2000/svg"; -const PixelsPerInch = { - CSS: 96.0, - PDF: 72.0, - - get PDF_TO_CSS_UNITS() { - return (0, _util.shadow)(this, "PDF_TO_CSS_UNITS", this.CSS / this.PDF); - } - -}; -exports.PixelsPerInch = PixelsPerInch; - -class DOMCanvasFactory extends _base_factory.BaseCanvasFactory { - constructor({ - ownerDocument = globalThis.document - } = {}) { - super(); - this._document = ownerDocument; - } - - _createCanvas(width, height) { - const canvas = this._document.createElement("canvas"); - - canvas.width = width; - canvas.height = height; - return canvas; - } - -} - -exports.DOMCanvasFactory = DOMCanvasFactory; - -async function fetchData(url, asTypedArray = false) { - if (isValidFetchUrl(url, document.baseURI)) { - const response = await fetch(url); - - if (!response.ok) { - throw new Error(response.statusText); - } - - return asTypedArray ? new Uint8Array(await response.arrayBuffer()) : (0, _util.stringToBytes)(await response.text()); - } - - return new Promise((resolve, reject) => { - const request = new XMLHttpRequest(); - request.open("GET", url, true); - - if (asTypedArray) { - request.responseType = "arraybuffer"; - } - - request.onreadystatechange = () => { - if (request.readyState !== XMLHttpRequest.DONE) { - return; - } - - if (request.status === 200 || request.status === 0) { - let data; - - if (asTypedArray && request.response) { - data = new Uint8Array(request.response); - } else if (!asTypedArray && request.responseText) { - data = (0, _util.stringToBytes)(request.responseText); - } - - if (data) { - resolve(data); - return; - } - } - - reject(new Error(request.statusText)); - }; - - request.send(null); - }); -} - -class DOMCMapReaderFactory extends _base_factory.BaseCMapReaderFactory { - _fetchData(url, compressionType) { - return fetchData(url, this.isCompressed).then(data => { - return { - cMapData: data, - compressionType - }; - }); - } - -} - -exports.DOMCMapReaderFactory = DOMCMapReaderFactory; - -class DOMStandardFontDataFactory extends _base_factory.BaseStandardFontDataFactory { - _fetchData(url) { - return fetchData(url, true); - } - -} - -exports.DOMStandardFontDataFactory = DOMStandardFontDataFactory; - -class DOMSVGFactory extends _base_factory.BaseSVGFactory { - _createSVG(type) { - return document.createElementNS(SVG_NS, type); - } - -} - -exports.DOMSVGFactory = DOMSVGFactory; - -class PageViewport { - constructor({ - viewBox, - scale, - rotation, - offsetX = 0, - offsetY = 0, - dontFlip = false - }) { - this.viewBox = viewBox; - this.scale = scale; - this.rotation = rotation; - this.offsetX = offsetX; - this.offsetY = offsetY; - const centerX = (viewBox[2] + viewBox[0]) / 2; - const centerY = (viewBox[3] + viewBox[1]) / 2; - let rotateA, rotateB, rotateC, rotateD; - rotation %= 360; - - if (rotation < 0) { - rotation += 360; - } - - switch (rotation) { - case 180: - rotateA = -1; - rotateB = 0; - rotateC = 0; - rotateD = 1; - break; - - case 90: - rotateA = 0; - rotateB = 1; - rotateC = 1; - rotateD = 0; - break; - - case 270: - rotateA = 0; - rotateB = -1; - rotateC = -1; - rotateD = 0; - break; - - case 0: - rotateA = 1; - rotateB = 0; - rotateC = 0; - rotateD = -1; - break; - - default: - throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees."); - } - - if (dontFlip) { - rotateC = -rotateC; - rotateD = -rotateD; - } - - let offsetCanvasX, offsetCanvasY; - let width, height; - - if (rotateA === 0) { - offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; - offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; - width = Math.abs(viewBox[3] - viewBox[1]) * scale; - height = Math.abs(viewBox[2] - viewBox[0]) * scale; - } else { - offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; - offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; - width = Math.abs(viewBox[2] - viewBox[0]) * scale; - height = Math.abs(viewBox[3] - viewBox[1]) * scale; - } - - this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY]; - this.width = width; - this.height = height; - } - - clone({ - scale = this.scale, - rotation = this.rotation, - offsetX = this.offsetX, - offsetY = this.offsetY, - dontFlip = false - } = {}) { - return new PageViewport({ - viewBox: this.viewBox.slice(), - scale, - rotation, - offsetX, - offsetY, - dontFlip - }); - } - - convertToViewportPoint(x, y) { - return _util.Util.applyTransform([x, y], this.transform); - } - - convertToViewportRectangle(rect) { - const topLeft = _util.Util.applyTransform([rect[0], rect[1]], this.transform); - - const bottomRight = _util.Util.applyTransform([rect[2], rect[3]], this.transform); - - return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]]; - } - - convertToPdfPoint(x, y) { - return _util.Util.applyInverseTransform([x, y], this.transform); - } - -} - -exports.PageViewport = PageViewport; - -class RenderingCancelledException extends _util.BaseException { - constructor(msg, type) { - super(msg, "RenderingCancelledException"); - this.type = type; - } - -} - -exports.RenderingCancelledException = RenderingCancelledException; -const LinkTarget = { - NONE: 0, - SELF: 1, - BLANK: 2, - PARENT: 3, - TOP: 4 -}; -exports.LinkTarget = LinkTarget; - -function addLinkAttributes(link, { - url, - target, - rel, - enabled = true -} = {}) { - (0, _util.assert)(url && typeof url === "string", 'addLinkAttributes: A valid "url" parameter must provided.'); - const urlNullRemoved = (0, _util.removeNullCharacters)(url); - - if (enabled) { - link.href = link.title = urlNullRemoved; - } else { - link.href = ""; - link.title = `Disabled: ${urlNullRemoved}`; - - link.onclick = () => { - return false; - }; - } - - let targetStr = ""; - - switch (target) { - case LinkTarget.NONE: - break; - - case LinkTarget.SELF: - targetStr = "_self"; - break; - - case LinkTarget.BLANK: - targetStr = "_blank"; - break; - - case LinkTarget.PARENT: - targetStr = "_parent"; - break; - - case LinkTarget.TOP: - targetStr = "_top"; - break; - } - - link.target = targetStr; - link.rel = typeof rel === "string" ? rel : DEFAULT_LINK_REL; -} - -function isDataScheme(url) { - const ii = url.length; - let i = 0; - - while (i < ii && url[i].trim() === "") { - i++; - } - - return url.substring(i, i + 5).toLowerCase() === "data:"; -} - -function isPdfFile(filename) { - return typeof filename === "string" && /\.pdf$/i.test(filename); -} - -function getFilenameFromUrl(url) { - const anchor = url.indexOf("#"); - const query = url.indexOf("?"); - const end = Math.min(anchor > 0 ? anchor : url.length, query > 0 ? query : url.length); - return url.substring(url.lastIndexOf("/", end) + 1, end); -} - -function getPdfFilenameFromUrl(url, defaultFilename = "document.pdf") { - if (typeof url !== "string") { - return defaultFilename; - } - - if (isDataScheme(url)) { - (0, _util.warn)('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'); - return defaultFilename; - } - - const reURI = /^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/; - const reFilename = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i; - const splitURI = reURI.exec(url); - let suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]); - - if (suggestedFilename) { - suggestedFilename = suggestedFilename[0]; - - if (suggestedFilename.includes("%")) { - try { - suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0]; - } catch (ex) {} - } - } - - return suggestedFilename || defaultFilename; -} - -class StatTimer { - constructor() { - this.started = Object.create(null); - this.times = []; - } - - time(name) { - if (name in this.started) { - (0, _util.warn)(`Timer is already running for ${name}`); - } - - this.started[name] = Date.now(); - } - - timeEnd(name) { - if (!(name in this.started)) { - (0, _util.warn)(`Timer has not been started for ${name}`); - } - - this.times.push({ - name, - start: this.started[name], - end: Date.now() - }); - delete this.started[name]; - } - - toString() { - const outBuf = []; - let longest = 0; - - for (const time of this.times) { - const name = time.name; - - if (name.length > longest) { - longest = name.length; - } - } - - for (const time of this.times) { - const duration = time.end - time.start; - outBuf.push(`${time.name.padEnd(longest)} ${duration}ms\n`); - } - - return outBuf.join(""); - } - -} - -exports.StatTimer = StatTimer; - -function isValidFetchUrl(url, baseUrl) { - try { - const { - protocol - } = baseUrl ? new URL(url, baseUrl) : new URL(url); - return protocol === "http:" || protocol === "https:"; - } catch (ex) { - return false; - } -} - -function loadScript(src, removeScriptElement = false) { - return new Promise((resolve, reject) => { - const script = document.createElement("script"); - script.src = src; - - script.onload = function (evt) { - if (removeScriptElement) { - script.remove(); - } - - resolve(evt); - }; - - script.onerror = function () { - reject(new Error(`Cannot load script at: ${script.src}`)); - }; - - (document.head || document.documentElement).appendChild(script); - }); -} - -function deprecated(details) { - console.log("Deprecated API usage: " + details); -} - -let pdfDateStringRegex; - -class PDFDateString { - static toDateObject(input) { - if (!input || !(0, _util.isString)(input)) { - return null; - } - - if (!pdfDateStringRegex) { - pdfDateStringRegex = new RegExp("^D:" + "(\\d{4})" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "([Z|+|-])?" + "(\\d{2})?" + "'?" + "(\\d{2})?" + "'?"); - } - - const matches = pdfDateStringRegex.exec(input); - - if (!matches) { - return null; - } - - const year = parseInt(matches[1], 10); - let month = parseInt(matches[2], 10); - month = month >= 1 && month <= 12 ? month - 1 : 0; - let day = parseInt(matches[3], 10); - day = day >= 1 && day <= 31 ? day : 1; - let hour = parseInt(matches[4], 10); - hour = hour >= 0 && hour <= 23 ? hour : 0; - let minute = parseInt(matches[5], 10); - minute = minute >= 0 && minute <= 59 ? minute : 0; - let second = parseInt(matches[6], 10); - second = second >= 0 && second <= 59 ? second : 0; - const universalTimeRelation = matches[7] || "Z"; - let offsetHour = parseInt(matches[8], 10); - offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0; - let offsetMinute = parseInt(matches[9], 10) || 0; - offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0; - - if (universalTimeRelation === "-") { - hour += offsetHour; - minute += offsetMinute; - } else if (universalTimeRelation === "+") { - hour -= offsetHour; - minute -= offsetMinute; - } - - return new Date(Date.UTC(year, month, day, hour, minute, second)); - } - -} - -exports.PDFDateString = PDFDateString; - -function getXfaPageViewport(xfaPage, { - scale = 1, - rotation = 0 -}) { - const { - width, - height - } = xfaPage.attributes.style; - const viewBox = [0, 0, parseInt(width), parseInt(height)]; - return new PageViewport({ - viewBox, - scale, - rotation - }); -} - -/***/ }), -/* 2 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.VerbosityLevel = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.UNSUPPORTED_FEATURES = exports.TextRenderingMode = exports.StreamType = exports.RenderingIntentFlag = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.IsLittleEndianCached = exports.IsEvalSupportedCached = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FontType = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = exports.CMapCompressionType = exports.BaseException = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMode = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0; -exports.arrayByteLength = arrayByteLength; -exports.arraysToBytes = arraysToBytes; -exports.assert = assert; -exports.bytesToString = bytesToString; -exports.createObjectURL = createObjectURL; -exports.createPromiseCapability = createPromiseCapability; -exports.createValidAbsoluteUrl = createValidAbsoluteUrl; -exports.escapeString = escapeString; -exports.getModificationDate = getModificationDate; -exports.getVerbosityLevel = getVerbosityLevel; -exports.info = info; -exports.isArrayBuffer = isArrayBuffer; -exports.isArrayEqual = isArrayEqual; -exports.isAscii = isAscii; -exports.isBool = isBool; -exports.isNum = isNum; -exports.isSameOrigin = isSameOrigin; -exports.isString = isString; -exports.objectFromMap = objectFromMap; -exports.objectSize = objectSize; -exports.removeNullCharacters = removeNullCharacters; -exports.setVerbosityLevel = setVerbosityLevel; -exports.shadow = shadow; -exports.string32 = string32; -exports.stringToBytes = stringToBytes; -exports.stringToPDFString = stringToPDFString; -exports.stringToUTF16BEString = stringToUTF16BEString; -exports.stringToUTF8String = stringToUTF8String; -exports.unreachable = unreachable; -exports.utf8StringToString = utf8StringToString; -exports.warn = warn; - -__w_pdfjs_require__(3); - -const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; -exports.IDENTITY_MATRIX = IDENTITY_MATRIX; -const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; -exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX; -const RenderingIntentFlag = { - ANY: 0x01, - DISPLAY: 0x02, - PRINT: 0x04, - ANNOTATIONS_FORMS: 0x10, - ANNOTATIONS_STORAGE: 0x20, - ANNOTATIONS_DISABLE: 0x40, - OPLIST: 0x100 -}; -exports.RenderingIntentFlag = RenderingIntentFlag; -const AnnotationMode = { - DISABLE: 0, - ENABLE: 1, - ENABLE_FORMS: 2, - ENABLE_STORAGE: 3 -}; -exports.AnnotationMode = AnnotationMode; -const PermissionFlag = { - PRINT: 0x04, - MODIFY_CONTENTS: 0x08, - COPY: 0x10, - MODIFY_ANNOTATIONS: 0x20, - FILL_INTERACTIVE_FORMS: 0x100, - COPY_FOR_ACCESSIBILITY: 0x200, - ASSEMBLE: 0x400, - PRINT_HIGH_QUALITY: 0x800 -}; -exports.PermissionFlag = PermissionFlag; -const TextRenderingMode = { - FILL: 0, - STROKE: 1, - FILL_STROKE: 2, - INVISIBLE: 3, - FILL_ADD_TO_PATH: 4, - STROKE_ADD_TO_PATH: 5, - FILL_STROKE_ADD_TO_PATH: 6, - ADD_TO_PATH: 7, - FILL_STROKE_MASK: 3, - ADD_TO_PATH_FLAG: 4 -}; -exports.TextRenderingMode = TextRenderingMode; -const ImageKind = { - GRAYSCALE_1BPP: 1, - RGB_24BPP: 2, - RGBA_32BPP: 3 -}; -exports.ImageKind = ImageKind; -const AnnotationType = { - TEXT: 1, - LINK: 2, - FREETEXT: 3, - LINE: 4, - SQUARE: 5, - CIRCLE: 6, - POLYGON: 7, - POLYLINE: 8, - HIGHLIGHT: 9, - UNDERLINE: 10, - SQUIGGLY: 11, - STRIKEOUT: 12, - STAMP: 13, - CARET: 14, - INK: 15, - POPUP: 16, - FILEATTACHMENT: 17, - SOUND: 18, - MOVIE: 19, - WIDGET: 20, - SCREEN: 21, - PRINTERMARK: 22, - TRAPNET: 23, - WATERMARK: 24, - THREED: 25, - REDACT: 26 -}; -exports.AnnotationType = AnnotationType; -const AnnotationStateModelType = { - MARKED: "Marked", - REVIEW: "Review" -}; -exports.AnnotationStateModelType = AnnotationStateModelType; -const AnnotationMarkedState = { - MARKED: "Marked", - UNMARKED: "Unmarked" -}; -exports.AnnotationMarkedState = AnnotationMarkedState; -const AnnotationReviewState = { - ACCEPTED: "Accepted", - REJECTED: "Rejected", - CANCELLED: "Cancelled", - COMPLETED: "Completed", - NONE: "None" -}; -exports.AnnotationReviewState = AnnotationReviewState; -const AnnotationReplyType = { - GROUP: "Group", - REPLY: "R" -}; -exports.AnnotationReplyType = AnnotationReplyType; -const AnnotationFlag = { - INVISIBLE: 0x01, - HIDDEN: 0x02, - PRINT: 0x04, - NOZOOM: 0x08, - NOROTATE: 0x10, - NOVIEW: 0x20, - READONLY: 0x40, - LOCKED: 0x80, - TOGGLENOVIEW: 0x100, - LOCKEDCONTENTS: 0x200 -}; -exports.AnnotationFlag = AnnotationFlag; -const AnnotationFieldFlag = { - READONLY: 0x0000001, - REQUIRED: 0x0000002, - NOEXPORT: 0x0000004, - MULTILINE: 0x0001000, - PASSWORD: 0x0002000, - NOTOGGLETOOFF: 0x0004000, - RADIO: 0x0008000, - PUSHBUTTON: 0x0010000, - COMBO: 0x0020000, - EDIT: 0x0040000, - SORT: 0x0080000, - FILESELECT: 0x0100000, - MULTISELECT: 0x0200000, - DONOTSPELLCHECK: 0x0400000, - DONOTSCROLL: 0x0800000, - COMB: 0x1000000, - RICHTEXT: 0x2000000, - RADIOSINUNISON: 0x2000000, - COMMITONSELCHANGE: 0x4000000 -}; -exports.AnnotationFieldFlag = AnnotationFieldFlag; -const AnnotationBorderStyleType = { - SOLID: 1, - DASHED: 2, - BEVELED: 3, - INSET: 4, - UNDERLINE: 5 -}; -exports.AnnotationBorderStyleType = AnnotationBorderStyleType; -const AnnotationActionEventType = { - E: "Mouse Enter", - X: "Mouse Exit", - D: "Mouse Down", - U: "Mouse Up", - Fo: "Focus", - Bl: "Blur", - PO: "PageOpen", - PC: "PageClose", - PV: "PageVisible", - PI: "PageInvisible", - K: "Keystroke", - F: "Format", - V: "Validate", - C: "Calculate" -}; -exports.AnnotationActionEventType = AnnotationActionEventType; -const DocumentActionEventType = { - WC: "WillClose", - WS: "WillSave", - DS: "DidSave", - WP: "WillPrint", - DP: "DidPrint" -}; -exports.DocumentActionEventType = DocumentActionEventType; -const PageActionEventType = { - O: "PageOpen", - C: "PageClose" -}; -exports.PageActionEventType = PageActionEventType; -const StreamType = { - UNKNOWN: "UNKNOWN", - FLATE: "FLATE", - LZW: "LZW", - DCT: "DCT", - JPX: "JPX", - JBIG: "JBIG", - A85: "A85", - AHX: "AHX", - CCF: "CCF", - RLX: "RLX" -}; -exports.StreamType = StreamType; -const FontType = { - UNKNOWN: "UNKNOWN", - TYPE1: "TYPE1", - TYPE1STANDARD: "TYPE1STANDARD", - TYPE1C: "TYPE1C", - CIDFONTTYPE0: "CIDFONTTYPE0", - CIDFONTTYPE0C: "CIDFONTTYPE0C", - TRUETYPE: "TRUETYPE", - CIDFONTTYPE2: "CIDFONTTYPE2", - TYPE3: "TYPE3", - OPENTYPE: "OPENTYPE", - TYPE0: "TYPE0", - MMTYPE1: "MMTYPE1" -}; -exports.FontType = FontType; -const VerbosityLevel = { - ERRORS: 0, - WARNINGS: 1, - INFOS: 5 -}; -exports.VerbosityLevel = VerbosityLevel; -const CMapCompressionType = { - NONE: 0, - BINARY: 1, - STREAM: 2 -}; -exports.CMapCompressionType = CMapCompressionType; -const OPS = { - dependency: 1, - setLineWidth: 2, - setLineCap: 3, - setLineJoin: 4, - setMiterLimit: 5, - setDash: 6, - setRenderingIntent: 7, - setFlatness: 8, - setGState: 9, - save: 10, - restore: 11, - transform: 12, - moveTo: 13, - lineTo: 14, - curveTo: 15, - curveTo2: 16, - curveTo3: 17, - closePath: 18, - rectangle: 19, - stroke: 20, - closeStroke: 21, - fill: 22, - eoFill: 23, - fillStroke: 24, - eoFillStroke: 25, - closeFillStroke: 26, - closeEOFillStroke: 27, - endPath: 28, - clip: 29, - eoClip: 30, - beginText: 31, - endText: 32, - setCharSpacing: 33, - setWordSpacing: 34, - setHScale: 35, - setLeading: 36, - setFont: 37, - setTextRenderingMode: 38, - setTextRise: 39, - moveText: 40, - setLeadingMoveText: 41, - setTextMatrix: 42, - nextLine: 43, - showText: 44, - showSpacedText: 45, - nextLineShowText: 46, - nextLineSetSpacingShowText: 47, - setCharWidth: 48, - setCharWidthAndBounds: 49, - setStrokeColorSpace: 50, - setFillColorSpace: 51, - setStrokeColor: 52, - setStrokeColorN: 53, - setFillColor: 54, - setFillColorN: 55, - setStrokeGray: 56, - setFillGray: 57, - setStrokeRGBColor: 58, - setFillRGBColor: 59, - setStrokeCMYKColor: 60, - setFillCMYKColor: 61, - shadingFill: 62, - beginInlineImage: 63, - beginImageData: 64, - endInlineImage: 65, - paintXObject: 66, - markPoint: 67, - markPointProps: 68, - beginMarkedContent: 69, - beginMarkedContentProps: 70, - endMarkedContent: 71, - beginCompat: 72, - endCompat: 73, - paintFormXObjectBegin: 74, - paintFormXObjectEnd: 75, - beginGroup: 76, - endGroup: 77, - beginAnnotations: 78, - endAnnotations: 79, - beginAnnotation: 80, - endAnnotation: 81, - paintJpegXObject: 82, - paintImageMaskXObject: 83, - paintImageMaskXObjectGroup: 84, - paintImageXObject: 85, - paintInlineImageXObject: 86, - paintInlineImageXObjectGroup: 87, - paintImageXObjectRepeat: 88, - paintImageMaskXObjectRepeat: 89, - paintSolidColorImageMask: 90, - constructPath: 91 -}; -exports.OPS = OPS; -const UNSUPPORTED_FEATURES = { - unknown: "unknown", - forms: "forms", - javaScript: "javaScript", - signatures: "signatures", - smask: "smask", - shadingPattern: "shadingPattern", - font: "font", - errorTilingPattern: "errorTilingPattern", - errorExtGState: "errorExtGState", - errorXObject: "errorXObject", - errorFontLoadType3: "errorFontLoadType3", - errorFontState: "errorFontState", - errorFontMissing: "errorFontMissing", - errorFontTranslate: "errorFontTranslate", - errorColorSpace: "errorColorSpace", - errorOperatorList: "errorOperatorList", - errorFontToUnicode: "errorFontToUnicode", - errorFontLoadNative: "errorFontLoadNative", - errorFontBuildPath: "errorFontBuildPath", - errorFontGetPath: "errorFontGetPath", - errorMarkedContent: "errorMarkedContent", - errorContentSubStream: "errorContentSubStream" -}; -exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES; -const PasswordResponses = { - NEED_PASSWORD: 1, - INCORRECT_PASSWORD: 2 -}; -exports.PasswordResponses = PasswordResponses; -let verbosity = VerbosityLevel.WARNINGS; - -function setVerbosityLevel(level) { - if (Number.isInteger(level)) { - verbosity = level; - } -} - -function getVerbosityLevel() { - return verbosity; -} - -function info(msg) { - if (verbosity >= VerbosityLevel.INFOS) { - console.log(`Info: ${msg}`); - } -} - -function warn(msg) { - if (verbosity >= VerbosityLevel.WARNINGS) { - console.log(`Warning: ${msg}`); - } -} - -function unreachable(msg) { - throw new Error(msg); -} - -function assert(cond, msg) { - if (!cond) { - unreachable(msg); - } -} - -function isSameOrigin(baseUrl, otherUrl) { - let base; - - try { - base = new URL(baseUrl); - - if (!base.origin || base.origin === "null") { - return false; - } - } catch (e) { - return false; - } - - const other = new URL(otherUrl, base); - return base.origin === other.origin; -} - -function _isValidProtocol(url) { - if (!url) { - return false; - } - - switch (url.protocol) { - case "http:": - case "https:": - case "ftp:": - case "mailto:": - case "tel:": - return true; - - default: - return false; - } -} - -function createValidAbsoluteUrl(url, baseUrl = null, options = null) { - if (!url) { - return null; - } - - try { - if (options && typeof url === "string") { - if (options.addDefaultProtocol && url.startsWith("www.")) { - const dots = url.match(/\./g); - - if (dots && dots.length >= 2) { - url = `http://${url}`; - } - } - - if (options.tryConvertEncoding) { - try { - url = stringToUTF8String(url); - } catch (ex) {} - } - } - - const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url); - - if (_isValidProtocol(absoluteUrl)) { - return absoluteUrl; - } - } catch (ex) {} - - return null; -} - -function shadow(obj, prop, value) { - Object.defineProperty(obj, prop, { - value, - enumerable: true, - configurable: true, - writable: false - }); - return value; -} - -const BaseException = function BaseExceptionClosure() { - function BaseException(message, name) { - if (this.constructor === BaseException) { - unreachable("Cannot initialize BaseException."); - } - - this.message = message; - this.name = name; - } - - BaseException.prototype = new Error(); - BaseException.constructor = BaseException; - return BaseException; -}(); - -exports.BaseException = BaseException; - -class PasswordException extends BaseException { - constructor(msg, code) { - super(msg, "PasswordException"); - this.code = code; - } - -} - -exports.PasswordException = PasswordException; - -class UnknownErrorException extends BaseException { - constructor(msg, details) { - super(msg, "UnknownErrorException"); - this.details = details; - } - -} - -exports.UnknownErrorException = UnknownErrorException; - -class InvalidPDFException extends BaseException { - constructor(msg) { - super(msg, "InvalidPDFException"); - } - -} - -exports.InvalidPDFException = InvalidPDFException; - -class MissingPDFException extends BaseException { - constructor(msg) { - super(msg, "MissingPDFException"); - } - -} - -exports.MissingPDFException = MissingPDFException; - -class UnexpectedResponseException extends BaseException { - constructor(msg, status) { - super(msg, "UnexpectedResponseException"); - this.status = status; - } - -} - -exports.UnexpectedResponseException = UnexpectedResponseException; - -class FormatError extends BaseException { - constructor(msg) { - super(msg, "FormatError"); - } - -} - -exports.FormatError = FormatError; - -class AbortException extends BaseException { - constructor(msg) { - super(msg, "AbortException"); - } - -} - -exports.AbortException = AbortException; -const NullCharactersRegExp = /\x00+/g; -const InvisibleCharactersRegExp = /[\x01-\x1F]/g; - -function removeNullCharacters(str, replaceInvisible = false) { - if (typeof str !== "string") { - warn("The argument for removeNullCharacters must be a string."); - return str; - } - - if (replaceInvisible) { - str = str.replace(InvisibleCharactersRegExp, " "); - } - - return str.replace(NullCharactersRegExp, ""); -} - -function bytesToString(bytes) { - assert(bytes !== null && typeof bytes === "object" && bytes.length !== undefined, "Invalid argument for bytesToString"); - const length = bytes.length; - const MAX_ARGUMENT_COUNT = 8192; - - if (length < MAX_ARGUMENT_COUNT) { - return String.fromCharCode.apply(null, bytes); - } - - const strBuf = []; - - for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) { - const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); - const chunk = bytes.subarray(i, chunkEnd); - strBuf.push(String.fromCharCode.apply(null, chunk)); - } - - return strBuf.join(""); -} - -function stringToBytes(str) { - assert(typeof str === "string", "Invalid argument for stringToBytes"); - const length = str.length; - const bytes = new Uint8Array(length); - - for (let i = 0; i < length; ++i) { - bytes[i] = str.charCodeAt(i) & 0xff; - } - - return bytes; -} - -function arrayByteLength(arr) { - if (arr.length !== undefined) { - return arr.length; - } - - assert(arr.byteLength !== undefined, "arrayByteLength - invalid argument."); - return arr.byteLength; -} - -function arraysToBytes(arr) { - const length = arr.length; - - if (length === 1 && arr[0] instanceof Uint8Array) { - return arr[0]; - } - - let resultLength = 0; - - for (let i = 0; i < length; i++) { - resultLength += arrayByteLength(arr[i]); - } - - let pos = 0; - const data = new Uint8Array(resultLength); - - for (let i = 0; i < length; i++) { - let item = arr[i]; - - if (!(item instanceof Uint8Array)) { - if (typeof item === "string") { - item = stringToBytes(item); - } else { - item = new Uint8Array(item); - } - } - - const itemLength = item.byteLength; - data.set(item, pos); - pos += itemLength; - } - - return data; -} - -function string32(value) { - return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); -} - -function objectSize(obj) { - return Object.keys(obj).length; -} - -function objectFromMap(map) { - const obj = Object.create(null); - - for (const [key, value] of map) { - obj[key] = value; - } - - return obj; -} - -function isLittleEndian() { - const buffer8 = new Uint8Array(4); - buffer8[0] = 1; - const view32 = new Uint32Array(buffer8.buffer, 0, 1); - return view32[0] === 1; -} - -const IsLittleEndianCached = { - get value() { - return shadow(this, "value", isLittleEndian()); - } - -}; -exports.IsLittleEndianCached = IsLittleEndianCached; - -function isEvalSupported() { - try { - new Function(""); - return true; - } catch (e) { - return false; - } -} - -const IsEvalSupportedCached = { - get value() { - return shadow(this, "value", isEvalSupported()); - } - -}; -exports.IsEvalSupportedCached = IsEvalSupportedCached; -const hexNumbers = [...Array(256).keys()].map(n => n.toString(16).padStart(2, "0")); - -class Util { - static makeHexColor(r, g, b) { - return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`; - } - - static transform(m1, m2) { - return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]]; - } - - static applyTransform(p, m) { - const xt = p[0] * m[0] + p[1] * m[2] + m[4]; - const yt = p[0] * m[1] + p[1] * m[3] + m[5]; - return [xt, yt]; - } - - static applyInverseTransform(p, m) { - const d = m[0] * m[3] - m[1] * m[2]; - const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; - const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; - return [xt, yt]; - } - - static getAxialAlignedBoundingBox(r, m) { - const p1 = Util.applyTransform(r, m); - const p2 = Util.applyTransform(r.slice(2, 4), m); - const p3 = Util.applyTransform([r[0], r[3]], m); - const p4 = Util.applyTransform([r[2], r[1]], m); - return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])]; - } - - static inverseTransform(m) { - const d = m[0] * m[3] - m[1] * m[2]; - return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d]; - } - - static apply3dTransform(m, v) { - return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]]; - } - - static singularValueDecompose2dScale(m) { - const transpose = [m[0], m[2], m[1], m[3]]; - const a = m[0] * transpose[0] + m[1] * transpose[2]; - const b = m[0] * transpose[1] + m[1] * transpose[3]; - const c = m[2] * transpose[0] + m[3] * transpose[2]; - const d = m[2] * transpose[1] + m[3] * transpose[3]; - const first = (a + d) / 2; - const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2; - const sx = first + second || 1; - const sy = first - second || 1; - return [Math.sqrt(sx), Math.sqrt(sy)]; - } - - static normalizeRect(rect) { - const r = rect.slice(0); - - if (rect[0] > rect[2]) { - r[0] = rect[2]; - r[2] = rect[0]; - } - - if (rect[1] > rect[3]) { - r[1] = rect[3]; - r[3] = rect[1]; - } - - return r; - } - - static intersect(rect1, rect2) { - function compare(a, b) { - return a - b; - } - - const orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare); - const orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare); - const result = []; - rect1 = Util.normalizeRect(rect1); - rect2 = Util.normalizeRect(rect2); - - if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) { - result[0] = orderedX[1]; - result[2] = orderedX[2]; - } else { - return null; - } - - if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) { - result[1] = orderedY[1]; - result[3] = orderedY[2]; - } else { - return null; - } - - return result; - } - - static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3) { - const tvalues = [], - bounds = [[], []]; - let a, b, c, t, t1, t2, b2ac, sqrtb2ac; - - for (let i = 0; i < 2; ++i) { - if (i === 0) { - b = 6 * x0 - 12 * x1 + 6 * x2; - a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3; - c = 3 * x1 - 3 * x0; - } else { - b = 6 * y0 - 12 * y1 + 6 * y2; - a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3; - c = 3 * y1 - 3 * y0; - } - - if (Math.abs(a) < 1e-12) { - if (Math.abs(b) < 1e-12) { - continue; - } - - t = -c / b; - - if (0 < t && t < 1) { - tvalues.push(t); - } - - continue; - } - - b2ac = b * b - 4 * c * a; - sqrtb2ac = Math.sqrt(b2ac); - - if (b2ac < 0) { - continue; - } - - t1 = (-b + sqrtb2ac) / (2 * a); - - if (0 < t1 && t1 < 1) { - tvalues.push(t1); - } - - t2 = (-b - sqrtb2ac) / (2 * a); - - if (0 < t2 && t2 < 1) { - tvalues.push(t2); - } - } - - let j = tvalues.length, - mt; - const jlen = j; - - while (j--) { - t = tvalues[j]; - mt = 1 - t; - bounds[0][j] = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3; - bounds[1][j] = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3; - } - - bounds[0][jlen] = x0; - bounds[1][jlen] = y0; - bounds[0][jlen + 1] = x3; - bounds[1][jlen + 1] = y3; - bounds[0].length = bounds[1].length = jlen + 2; - return [Math.min(...bounds[0]), Math.min(...bounds[1]), Math.max(...bounds[0]), Math.max(...bounds[1])]; - } - -} - -exports.Util = Util; -const PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8, 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d, 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac]; - -function stringToPDFString(str) { - const length = str.length, - strBuf = []; - - if (str[0] === "\xFE" && str[1] === "\xFF") { - for (let i = 2; i < length; i += 2) { - strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1))); - } - } else if (str[0] === "\xFF" && str[1] === "\xFE") { - for (let i = 2; i < length; i += 2) { - strBuf.push(String.fromCharCode(str.charCodeAt(i + 1) << 8 | str.charCodeAt(i))); - } - } else { - for (let i = 0; i < length; ++i) { - const code = PDFStringTranslateTable[str.charCodeAt(i)]; - strBuf.push(code ? String.fromCharCode(code) : str.charAt(i)); - } - } - - return strBuf.join(""); -} - -function escapeString(str) { - return str.replace(/([()\\\n\r])/g, match => { - if (match === "\n") { - return "\\n"; - } else if (match === "\r") { - return "\\r"; - } - - return `\\${match}`; - }); -} - -function isAscii(str) { - return /^[\x00-\x7F]*$/.test(str); -} - -function stringToUTF16BEString(str) { - const buf = ["\xFE\xFF"]; - - for (let i = 0, ii = str.length; i < ii; i++) { - const char = str.charCodeAt(i); - buf.push(String.fromCharCode(char >> 8 & 0xff), String.fromCharCode(char & 0xff)); - } - - return buf.join(""); -} - -function stringToUTF8String(str) { - return decodeURIComponent(escape(str)); -} - -function utf8StringToString(str) { - return unescape(encodeURIComponent(str)); -} - -function isBool(v) { - return typeof v === "boolean"; -} - -function isNum(v) { - return typeof v === "number"; -} - -function isString(v) { - return typeof v === "string"; -} - -function isArrayBuffer(v) { - return typeof v === "object" && v !== null && v.byteLength !== undefined; -} - -function isArrayEqual(arr1, arr2) { - if (arr1.length !== arr2.length) { - return false; - } - - for (let i = 0, ii = arr1.length; i < ii; i++) { - if (arr1[i] !== arr2[i]) { - return false; - } - } - - return true; -} - -function getModificationDate(date = new Date()) { - const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), date.getUTCDate().toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")]; - return buffer.join(""); -} - -function createPromiseCapability() { - const capability = Object.create(null); - let isSettled = false; - Object.defineProperty(capability, "settled", { - get() { - return isSettled; - } - - }); - capability.promise = new Promise(function (resolve, reject) { - capability.resolve = function (data) { - isSettled = true; - resolve(data); - }; - - capability.reject = function (reason) { - isSettled = true; - reject(reason); - }; - }); - return capability; -} - -function createObjectURL(data, contentType = "", forceDataSchema = false) { - if (URL.createObjectURL && typeof Blob !== "undefined" && !forceDataSchema) { - return URL.createObjectURL(new Blob([data], { - type: contentType - })); - } - - const digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - let buffer = `data:${contentType};base64,`; - - for (let i = 0, ii = data.length; i < ii; i += 3) { - const b1 = data[i] & 0xff; - const b2 = data[i + 1] & 0xff; - const b3 = data[i + 2] & 0xff; - const d1 = b1 >> 2, - d2 = (b1 & 3) << 4 | b2 >> 4; - const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64; - const d4 = i + 2 < ii ? b3 & 0x3f : 64; - buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4]; - } - - return buffer; -} - -/***/ }), -/* 3 */ -/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { - - - -__w_pdfjs_require__(4); - -/***/ }), -/* 4 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.isNodeJS = void 0; -const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser"); -exports.isNodeJS = isNodeJS; - -/***/ }), -/* 5 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.BaseStandardFontDataFactory = exports.BaseSVGFactory = exports.BaseCanvasFactory = exports.BaseCMapReaderFactory = void 0; - -var _util = __w_pdfjs_require__(2); - -class BaseCanvasFactory { - constructor() { - if (this.constructor === BaseCanvasFactory) { - (0, _util.unreachable)("Cannot initialize BaseCanvasFactory."); - } - } - - create(width, height) { - if (width <= 0 || height <= 0) { - throw new Error("Invalid canvas size"); - } - - const canvas = this._createCanvas(width, height); - - return { - canvas, - context: canvas.getContext("2d") - }; - } - - reset(canvasAndContext, width, height) { - if (!canvasAndContext.canvas) { - throw new Error("Canvas is not specified"); - } - - if (width <= 0 || height <= 0) { - throw new Error("Invalid canvas size"); - } - - canvasAndContext.canvas.width = width; - canvasAndContext.canvas.height = height; - } - - destroy(canvasAndContext) { - if (!canvasAndContext.canvas) { - throw new Error("Canvas is not specified"); - } - - canvasAndContext.canvas.width = 0; - canvasAndContext.canvas.height = 0; - canvasAndContext.canvas = null; - canvasAndContext.context = null; - } - - _createCanvas(width, height) { - (0, _util.unreachable)("Abstract method `_createCanvas` called."); - } - -} - -exports.BaseCanvasFactory = BaseCanvasFactory; - -class BaseCMapReaderFactory { - constructor({ - baseUrl = null, - isCompressed = false - }) { - if (this.constructor === BaseCMapReaderFactory) { - (0, _util.unreachable)("Cannot initialize BaseCMapReaderFactory."); - } - - this.baseUrl = baseUrl; - this.isCompressed = isCompressed; - } - - async fetch({ - name - }) { - if (!this.baseUrl) { - throw new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.'); - } - - if (!name) { - throw new Error("CMap name must be specified."); - } - - const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : ""); - const compressionType = this.isCompressed ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE; - return this._fetchData(url, compressionType).catch(reason => { - throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${url}`); - }); - } - - _fetchData(url, compressionType) { - (0, _util.unreachable)("Abstract method `_fetchData` called."); - } - -} - -exports.BaseCMapReaderFactory = BaseCMapReaderFactory; - -class BaseStandardFontDataFactory { - constructor({ - baseUrl = null - }) { - if (this.constructor === BaseStandardFontDataFactory) { - (0, _util.unreachable)("Cannot initialize BaseStandardFontDataFactory."); - } - - this.baseUrl = baseUrl; - } - - async fetch({ - filename - }) { - if (!this.baseUrl) { - throw new Error('The standard font "baseUrl" parameter must be specified, ensure that ' + 'the "standardFontDataUrl" API parameter is provided.'); - } - - if (!filename) { - throw new Error("Font filename must be specified."); - } - - const url = `${this.baseUrl}${filename}`; - return this._fetchData(url).catch(reason => { - throw new Error(`Unable to load font data at: ${url}`); - }); - } - - _fetchData(url) { - (0, _util.unreachable)("Abstract method `_fetchData` called."); - } - -} - -exports.BaseStandardFontDataFactory = BaseStandardFontDataFactory; - -class BaseSVGFactory { - constructor() { - if (this.constructor === BaseSVGFactory) { - (0, _util.unreachable)("Cannot initialize BaseSVGFactory."); - } - } - - create(width, height) { - if (width <= 0 || height <= 0) { - throw new Error("Invalid SVG dimensions"); - } - - const svg = this._createSVG("svg:svg"); - - svg.setAttribute("version", "1.1"); - svg.setAttribute("width", `${width}px`); - svg.setAttribute("height", `${height}px`); - svg.setAttribute("preserveAspectRatio", "none"); - svg.setAttribute("viewBox", `0 0 ${width} ${height}`); - return svg; - } - - createElement(type) { - if (typeof type !== "string") { - throw new Error("Invalid SVG element type"); - } - - return this._createSVG(type); - } - - _createSVG(type) { - (0, _util.unreachable)("Abstract method `_createSVG` called."); - } - -} - -exports.BaseSVGFactory = BaseSVGFactory; - -/***/ }), -/* 6 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.build = exports.RenderTask = exports.PDFWorker = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFDocumentLoadingTask = exports.PDFDataRangeTransport = exports.LoopbackPort = exports.DefaultStandardFontDataFactory = exports.DefaultCanvasFactory = exports.DefaultCMapReaderFactory = void 0; -exports.getDocument = getDocument; -exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory; -exports.version = void 0; - -var _util = __w_pdfjs_require__(2); - -var _display_utils = __w_pdfjs_require__(1); - -var _font_loader = __w_pdfjs_require__(7); - -var _node_utils = __w_pdfjs_require__(8); - -var _annotation_storage = __w_pdfjs_require__(9); - -var _canvas = __w_pdfjs_require__(10); - -var _worker_options = __w_pdfjs_require__(12); - -var _is_node = __w_pdfjs_require__(4); - -var _message_handler = __w_pdfjs_require__(13); - -var _metadata = __w_pdfjs_require__(14); - -var _optional_content_config = __w_pdfjs_require__(15); - -var _transport_stream = __w_pdfjs_require__(16); - -var _xfa_text = __w_pdfjs_require__(17); - -const DEFAULT_RANGE_CHUNK_SIZE = 65536; -const RENDERING_CANCELLED_TIMEOUT = 100; -const DefaultCanvasFactory = _is_node.isNodeJS ? _node_utils.NodeCanvasFactory : _display_utils.DOMCanvasFactory; -exports.DefaultCanvasFactory = DefaultCanvasFactory; -const DefaultCMapReaderFactory = _is_node.isNodeJS ? _node_utils.NodeCMapReaderFactory : _display_utils.DOMCMapReaderFactory; -exports.DefaultCMapReaderFactory = DefaultCMapReaderFactory; -const DefaultStandardFontDataFactory = _is_node.isNodeJS ? _node_utils.NodeStandardFontDataFactory : _display_utils.DOMStandardFontDataFactory; -exports.DefaultStandardFontDataFactory = DefaultStandardFontDataFactory; -let createPDFNetworkStream; - -function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) { - createPDFNetworkStream = pdfNetworkStreamFactory; -} - -function getDocument(src) { - const task = new PDFDocumentLoadingTask(); - let source; - - if (typeof src === "string" || src instanceof URL) { - source = { - url: src - }; - } else if ((0, _util.isArrayBuffer)(src)) { - source = { - data: src - }; - } else if (src instanceof PDFDataRangeTransport) { - source = { - range: src - }; - } else { - if (typeof src !== "object") { - throw new Error("Invalid parameter in getDocument, " + "need either string, URL, Uint8Array, or parameter object."); - } - - if (!src.url && !src.data && !src.range) { - throw new Error("Invalid parameter object: need either .data, .range or .url"); - } - - source = src; - } - - const params = Object.create(null); - let rangeTransport = null, - worker = null; - - for (const key in source) { - const value = source[key]; - - switch (key) { - case "url": - if (typeof window !== "undefined") { - try { - params[key] = new URL(value, window.location).href; - continue; - } catch (ex) { - (0, _util.warn)(`Cannot create valid URL: "${ex}".`); - } - } else if (typeof value === "string" || value instanceof URL) { - params[key] = value.toString(); - continue; - } - - throw new Error("Invalid PDF url data: " + "either string or URL-object is expected in the url property."); - - case "range": - rangeTransport = value; - continue; - - case "worker": - worker = value; - continue; - - case "data": - if (_is_node.isNodeJS && typeof Buffer !== "undefined" && value instanceof Buffer) { - params[key] = new Uint8Array(value); - } else if (value instanceof Uint8Array) { - break; - } else if (typeof value === "string") { - params[key] = (0, _util.stringToBytes)(value); - } else if (typeof value === "object" && value !== null && !isNaN(value.length)) { - params[key] = new Uint8Array(value); - } else if ((0, _util.isArrayBuffer)(value)) { - params[key] = new Uint8Array(value); - } else { - throw new Error("Invalid PDF binary data: either typed array, " + "string, or array-like object is expected in the data property."); - } - - continue; - } - - params[key] = value; - } - - params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE; - params.CMapReaderFactory = params.CMapReaderFactory || DefaultCMapReaderFactory; - params.StandardFontDataFactory = params.StandardFontDataFactory || DefaultStandardFontDataFactory; - params.ignoreErrors = params.stopAtErrors !== true; - params.fontExtraProperties = params.fontExtraProperties === true; - params.pdfBug = params.pdfBug === true; - params.enableXfa = params.enableXfa === true; - - if (typeof params.docBaseUrl !== "string" || (0, _display_utils.isDataScheme)(params.docBaseUrl)) { - params.docBaseUrl = null; - } - - if (!Number.isInteger(params.maxImageSize)) { - params.maxImageSize = -1; - } - - if (typeof params.useWorkerFetch !== "boolean") { - params.useWorkerFetch = params.CMapReaderFactory === _display_utils.DOMCMapReaderFactory && params.StandardFontDataFactory === _display_utils.DOMStandardFontDataFactory; - } - - if (typeof params.isEvalSupported !== "boolean") { - params.isEvalSupported = true; - } - - if (typeof params.disableFontFace !== "boolean") { - params.disableFontFace = _is_node.isNodeJS; - } - - if (typeof params.useSystemFonts !== "boolean") { - params.useSystemFonts = !_is_node.isNodeJS && !params.disableFontFace; - } - - if (typeof params.ownerDocument === "undefined") { - params.ownerDocument = globalThis.document; - } - - if (typeof params.disableRange !== "boolean") { - params.disableRange = false; - } - - if (typeof params.disableStream !== "boolean") { - params.disableStream = false; - } - - if (typeof params.disableAutoFetch !== "boolean") { - params.disableAutoFetch = false; - } - - (0, _util.setVerbosityLevel)(params.verbosity); - - if (!worker) { - const workerParams = { - verbosity: params.verbosity, - port: _worker_options.GlobalWorkerOptions.workerPort - }; - worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams); - task._worker = worker; - } - - const docId = task.docId; - worker.promise.then(function () { - if (task.destroyed) { - throw new Error("Loading aborted"); - } - - const workerIdPromise = _fetchDocument(worker, params, rangeTransport, docId); - - const networkStreamPromise = new Promise(function (resolve) { - let networkStream; - - if (rangeTransport) { - networkStream = new _transport_stream.PDFDataTransportStream({ - length: params.length, - initialData: params.initialData, - progressiveDone: params.progressiveDone, - contentDispositionFilename: params.contentDispositionFilename, - disableRange: params.disableRange, - disableStream: params.disableStream - }, rangeTransport); - } else if (!params.data) { - networkStream = createPDFNetworkStream({ - url: params.url, - length: params.length, - httpHeaders: params.httpHeaders, - withCredentials: params.withCredentials, - rangeChunkSize: params.rangeChunkSize, - disableRange: params.disableRange, - disableStream: params.disableStream - }); - } - - resolve(networkStream); - }); - return Promise.all([workerIdPromise, networkStreamPromise]).then(function ([workerId, networkStream]) { - if (task.destroyed) { - throw new Error("Loading aborted"); - } - - const messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port); - const transport = new WorkerTransport(messageHandler, task, networkStream, params); - task._transport = transport; - messageHandler.send("Ready", null); - }); - }).catch(task._capability.reject); - return task; -} - -async function _fetchDocument(worker, source, pdfDataRangeTransport, docId) { - if (worker.destroyed) { - throw new Error("Worker was destroyed"); - } - - if (pdfDataRangeTransport) { - source.length = pdfDataRangeTransport.length; - source.initialData = pdfDataRangeTransport.initialData; - source.progressiveDone = pdfDataRangeTransport.progressiveDone; - source.contentDispositionFilename = pdfDataRangeTransport.contentDispositionFilename; - } - - const workerId = await worker.messageHandler.sendWithPromise("GetDocRequest", { - docId, - apiVersion: '2.12.313', - source: { - data: source.data, - url: source.url, - password: source.password, - disableAutoFetch: source.disableAutoFetch, - rangeChunkSize: source.rangeChunkSize, - length: source.length - }, - maxImageSize: source.maxImageSize, - disableFontFace: source.disableFontFace, - docBaseUrl: source.docBaseUrl, - ignoreErrors: source.ignoreErrors, - isEvalSupported: source.isEvalSupported, - fontExtraProperties: source.fontExtraProperties, - enableXfa: source.enableXfa, - useSystemFonts: source.useSystemFonts, - cMapUrl: source.useWorkerFetch ? source.cMapUrl : null, - standardFontDataUrl: source.useWorkerFetch ? source.standardFontDataUrl : null - }); - - if (worker.destroyed) { - throw new Error("Worker was destroyed"); - } - - return workerId; -} - -class PDFDocumentLoadingTask { - static get idCounters() { - return (0, _util.shadow)(this, "idCounters", { - doc: 0 - }); - } - - constructor() { - this._capability = (0, _util.createPromiseCapability)(); - this._transport = null; - this._worker = null; - this.docId = `d${PDFDocumentLoadingTask.idCounters.doc++}`; - this.destroyed = false; - this.onPassword = null; - this.onProgress = null; - this.onUnsupportedFeature = null; - } - - get promise() { - return this._capability.promise; - } - - async destroy() { - this.destroyed = true; - await this._transport?.destroy(); - this._transport = null; - - if (this._worker) { - this._worker.destroy(); - - this._worker = null; - } - } - -} - -exports.PDFDocumentLoadingTask = PDFDocumentLoadingTask; - -class PDFDataRangeTransport { - constructor(length, initialData, progressiveDone = false, contentDispositionFilename = null) { - this.length = length; - this.initialData = initialData; - this.progressiveDone = progressiveDone; - this.contentDispositionFilename = contentDispositionFilename; - this._rangeListeners = []; - this._progressListeners = []; - this._progressiveReadListeners = []; - this._progressiveDoneListeners = []; - this._readyCapability = (0, _util.createPromiseCapability)(); - } - - addRangeListener(listener) { - this._rangeListeners.push(listener); - } - - addProgressListener(listener) { - this._progressListeners.push(listener); - } - - addProgressiveReadListener(listener) { - this._progressiveReadListeners.push(listener); - } - - addProgressiveDoneListener(listener) { - this._progressiveDoneListeners.push(listener); - } - - onDataRange(begin, chunk) { - for (const listener of this._rangeListeners) { - listener(begin, chunk); - } - } - - onDataProgress(loaded, total) { - this._readyCapability.promise.then(() => { - for (const listener of this._progressListeners) { - listener(loaded, total); - } - }); - } - - onDataProgressiveRead(chunk) { - this._readyCapability.promise.then(() => { - for (const listener of this._progressiveReadListeners) { - listener(chunk); - } - }); - } - - onDataProgressiveDone() { - this._readyCapability.promise.then(() => { - for (const listener of this._progressiveDoneListeners) { - listener(); - } - }); - } - - transportReady() { - this._readyCapability.resolve(); - } - - requestDataRange(begin, end) { - (0, _util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange"); - } - - abort() {} - -} - -exports.PDFDataRangeTransport = PDFDataRangeTransport; - -class PDFDocumentProxy { - constructor(pdfInfo, transport) { - this._pdfInfo = pdfInfo; - this._transport = transport; - Object.defineProperty(this, "fingerprint", { - get() { - (0, _display_utils.deprecated)("`PDFDocumentProxy.fingerprint`, " + "please use `PDFDocumentProxy.fingerprints` instead."); - return this.fingerprints[0]; - } - - }); - Object.defineProperty(this, "getStats", { - value: async () => { - (0, _display_utils.deprecated)("`PDFDocumentProxy.getStats`, " + "please use the `PDFDocumentProxy.stats`-getter instead."); - return this.stats || { - streamTypes: {}, - fontTypes: {} - }; - } - }); - } - - get annotationStorage() { - return this._transport.annotationStorage; - } - - get numPages() { - return this._pdfInfo.numPages; - } - - get fingerprints() { - return this._pdfInfo.fingerprints; - } - - get stats() { - return this._transport.stats; - } - - get isPureXfa() { - return !!this._transport._htmlForXfa; - } - - get allXfaHtml() { - return this._transport._htmlForXfa; - } - - getPage(pageNumber) { - return this._transport.getPage(pageNumber); - } - - getPageIndex(ref) { - return this._transport.getPageIndex(ref); - } - - getDestinations() { - return this._transport.getDestinations(); - } - - getDestination(id) { - return this._transport.getDestination(id); - } - - getPageLabels() { - return this._transport.getPageLabels(); - } - - getPageLayout() { - return this._transport.getPageLayout(); - } - - getPageMode() { - return this._transport.getPageMode(); - } - - getViewerPreferences() { - return this._transport.getViewerPreferences(); - } - - getOpenAction() { - return this._transport.getOpenAction(); - } - - getAttachments() { - return this._transport.getAttachments(); - } - - getJavaScript() { - return this._transport.getJavaScript(); - } - - getJSActions() { - return this._transport.getDocJSActions(); - } - - getOutline() { - return this._transport.getOutline(); - } - - getOptionalContentConfig() { - return this._transport.getOptionalContentConfig(); - } - - getPermissions() { - return this._transport.getPermissions(); - } - - getMetadata() { - return this._transport.getMetadata(); - } - - getMarkInfo() { - return this._transport.getMarkInfo(); - } - - getData() { - return this._transport.getData(); - } - - getDownloadInfo() { - return this._transport.downloadInfoCapability.promise; - } - - cleanup(keepLoadedFonts = false) { - return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa); - } - - destroy() { - return this.loadingTask.destroy(); - } - - get loadingParams() { - return this._transport.loadingParams; - } - - get loadingTask() { - return this._transport.loadingTask; - } - - saveDocument() { - if (this._transport.annotationStorage.size <= 0) { - (0, _display_utils.deprecated)("saveDocument called while `annotationStorage` is empty, " + "please use the getData-method instead."); - } - - return this._transport.saveDocument(); - } - - getFieldObjects() { - return this._transport.getFieldObjects(); - } - - hasJSActions() { - return this._transport.hasJSActions(); - } - - getCalculationOrderIds() { - return this._transport.getCalculationOrderIds(); - } - -} - -exports.PDFDocumentProxy = PDFDocumentProxy; - -class PDFPageProxy { - constructor(pageIndex, pageInfo, transport, ownerDocument, pdfBug = false) { - this._pageIndex = pageIndex; - this._pageInfo = pageInfo; - this._ownerDocument = ownerDocument; - this._transport = transport; - this._stats = pdfBug ? new _display_utils.StatTimer() : null; - this._pdfBug = pdfBug; - this.commonObjs = transport.commonObjs; - this.objs = new PDFObjects(); - this.cleanupAfterRender = false; - this.pendingCleanup = false; - this._intentStates = new Map(); - this._annotationPromises = new Map(); - this.destroyed = false; - } - - get pageNumber() { - return this._pageIndex + 1; - } - - get rotate() { - return this._pageInfo.rotate; - } - - get ref() { - return this._pageInfo.ref; - } - - get userUnit() { - return this._pageInfo.userUnit; - } - - get view() { - return this._pageInfo.view; - } - - getViewport({ - scale, - rotation = this.rotate, - offsetX = 0, - offsetY = 0, - dontFlip = false - } = {}) { - return new _display_utils.PageViewport({ - viewBox: this.view, - scale, - rotation, - offsetX, - offsetY, - dontFlip - }); - } - - getAnnotations({ - intent = "display" - } = {}) { - const intentArgs = this._transport.getRenderingIntent(intent); - - let promise = this._annotationPromises.get(intentArgs.cacheKey); - - if (!promise) { - promise = this._transport.getAnnotations(this._pageIndex, intentArgs.renderingIntent); - - this._annotationPromises.set(intentArgs.cacheKey, promise); - - promise = promise.then(annotations => { - for (const annotation of annotations) { - if (annotation.titleObj !== undefined) { - Object.defineProperty(annotation, "title", { - get() { - (0, _display_utils.deprecated)("`title`-property on annotation, please use `titleObj` instead."); - return annotation.titleObj.str; - } - - }); - } - - if (annotation.contentsObj !== undefined) { - Object.defineProperty(annotation, "contents", { - get() { - (0, _display_utils.deprecated)("`contents`-property on annotation, please use `contentsObj` instead."); - return annotation.contentsObj.str; - } - - }); - } - } - - return annotations; - }); - } - - return promise; - } - - getJSActions() { - return this._jsActionsPromise ||= this._transport.getPageJSActions(this._pageIndex); - } - - async getXfa() { - return this._transport._htmlForXfa?.children[this._pageIndex] || null; - } - - render({ - canvasContext, - viewport, - intent = "display", - annotationMode = _util.AnnotationMode.ENABLE, - transform = null, - imageLayer = null, - canvasFactory = null, - background = null, - optionalContentConfigPromise = null, - annotationCanvasMap = null - }) { - if (arguments[0]?.renderInteractiveForms !== undefined) { - (0, _display_utils.deprecated)("render no longer accepts the `renderInteractiveForms`-option, " + "please use the `annotationMode`-option instead."); - - if (arguments[0].renderInteractiveForms === true && annotationMode === _util.AnnotationMode.ENABLE) { - annotationMode = _util.AnnotationMode.ENABLE_FORMS; - } - } - - if (arguments[0]?.includeAnnotationStorage !== undefined) { - (0, _display_utils.deprecated)("render no longer accepts the `includeAnnotationStorage`-option, " + "please use the `annotationMode`-option instead."); - - if (arguments[0].includeAnnotationStorage === true && annotationMode === _util.AnnotationMode.ENABLE) { - annotationMode = _util.AnnotationMode.ENABLE_STORAGE; - } - } - - if (this._stats) { - this._stats.time("Overall"); - } - - const intentArgs = this._transport.getRenderingIntent(intent, annotationMode); - - this.pendingCleanup = false; - - if (!optionalContentConfigPromise) { - optionalContentConfigPromise = this._transport.getOptionalContentConfig(); - } - - let intentState = this._intentStates.get(intentArgs.cacheKey); - - if (!intentState) { - intentState = Object.create(null); - - this._intentStates.set(intentArgs.cacheKey, intentState); - } - - if (intentState.streamReaderCancelTimeout) { - clearTimeout(intentState.streamReaderCancelTimeout); - intentState.streamReaderCancelTimeout = null; - } - - const canvasFactoryInstance = canvasFactory || new DefaultCanvasFactory({ - ownerDocument: this._ownerDocument - }); - const intentPrint = !!(intentArgs.renderingIntent & _util.RenderingIntentFlag.PRINT); - - if (!intentState.displayReadyCapability) { - intentState.displayReadyCapability = (0, _util.createPromiseCapability)(); - intentState.operatorList = { - fnArray: [], - argsArray: [], - lastChunk: false - }; - - if (this._stats) { - this._stats.time("Page Request"); - } - - this._pumpOperatorList(intentArgs); - } - - const complete = error => { - intentState.renderTasks.delete(internalRenderTask); - - if (this.cleanupAfterRender || intentPrint) { - this.pendingCleanup = true; - } - - this._tryCleanup(); - - if (error) { - internalRenderTask.capability.reject(error); - - this._abortOperatorList({ - intentState, - reason: error instanceof Error ? error : new Error(error) - }); - } else { - internalRenderTask.capability.resolve(); - } - - if (this._stats) { - this._stats.timeEnd("Rendering"); - - this._stats.timeEnd("Overall"); - } - }; - - const internalRenderTask = new InternalRenderTask({ - callback: complete, - params: { - canvasContext, - viewport, - transform, - imageLayer, - background - }, - objs: this.objs, - commonObjs: this.commonObjs, - annotationCanvasMap, - operatorList: intentState.operatorList, - pageIndex: this._pageIndex, - canvasFactory: canvasFactoryInstance, - useRequestAnimationFrame: !intentPrint, - pdfBug: this._pdfBug - }); - (intentState.renderTasks ||= new Set()).add(internalRenderTask); - const renderTask = internalRenderTask.task; - Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(([transparency, optionalContentConfig]) => { - if (this.pendingCleanup) { - complete(); - return; - } - - if (this._stats) { - this._stats.time("Rendering"); - } - - internalRenderTask.initializeGraphics({ - transparency, - optionalContentConfig - }); - internalRenderTask.operatorListChanged(); - }).catch(complete); - return renderTask; - } - - getOperatorList({ - intent = "display", - annotationMode = _util.AnnotationMode.ENABLE - } = {}) { - function operatorListChanged() { - if (intentState.operatorList.lastChunk) { - intentState.opListReadCapability.resolve(intentState.operatorList); - intentState.renderTasks.delete(opListTask); - } - } - - const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, true); - - let intentState = this._intentStates.get(intentArgs.cacheKey); - - if (!intentState) { - intentState = Object.create(null); - - this._intentStates.set(intentArgs.cacheKey, intentState); - } - - let opListTask; - - if (!intentState.opListReadCapability) { - opListTask = Object.create(null); - opListTask.operatorListChanged = operatorListChanged; - intentState.opListReadCapability = (0, _util.createPromiseCapability)(); - (intentState.renderTasks ||= new Set()).add(opListTask); - intentState.operatorList = { - fnArray: [], - argsArray: [], - lastChunk: false - }; - - if (this._stats) { - this._stats.time("Page Request"); - } - - this._pumpOperatorList(intentArgs); - } - - return intentState.opListReadCapability.promise; - } - - streamTextContent({ - normalizeWhitespace = false, - disableCombineTextItems = false, - includeMarkedContent = false - } = {}) { - const TEXT_CONTENT_CHUNK_SIZE = 100; - return this._transport.messageHandler.sendWithStream("GetTextContent", { - pageIndex: this._pageIndex, - normalizeWhitespace: normalizeWhitespace === true, - combineTextItems: disableCombineTextItems !== true, - includeMarkedContent: includeMarkedContent === true - }, { - highWaterMark: TEXT_CONTENT_CHUNK_SIZE, - - size(textContent) { - return textContent.items.length; - } - - }); - } - - getTextContent(params = {}) { - if (this._transport._htmlForXfa) { - return this.getXfa().then(xfa => { - return _xfa_text.XfaText.textContent(xfa); - }); - } - - const readableStream = this.streamTextContent(params); - return new Promise(function (resolve, reject) { - function pump() { - reader.read().then(function ({ - value, - done - }) { - if (done) { - resolve(textContent); - return; - } - - Object.assign(textContent.styles, value.styles); - textContent.items.push(...value.items); - pump(); - }, reject); - } - - const reader = readableStream.getReader(); - const textContent = { - items: [], - styles: Object.create(null) - }; - pump(); - }); - } - - getStructTree() { - return this._structTreePromise ||= this._transport.getStructTree(this._pageIndex); - } - - _destroy() { - this.destroyed = true; - const waitOn = []; - - for (const intentState of this._intentStates.values()) { - this._abortOperatorList({ - intentState, - reason: new Error("Page was destroyed."), - force: true - }); - - if (intentState.opListReadCapability) { - continue; - } - - for (const internalRenderTask of intentState.renderTasks) { - waitOn.push(internalRenderTask.completed); - internalRenderTask.cancel(); - } - } - - this.objs.clear(); - - this._annotationPromises.clear(); - - this._jsActionsPromise = null; - this._structTreePromise = null; - this.pendingCleanup = false; - return Promise.all(waitOn); - } - - cleanup(resetStats = false) { - this.pendingCleanup = true; - return this._tryCleanup(resetStats); - } - - _tryCleanup(resetStats = false) { - if (!this.pendingCleanup) { - return false; - } - - for (const { - renderTasks, - operatorList - } of this._intentStates.values()) { - if (renderTasks.size > 0 || !operatorList.lastChunk) { - return false; - } - } - - this._intentStates.clear(); - - this.objs.clear(); - - this._annotationPromises.clear(); - - this._jsActionsPromise = null; - this._structTreePromise = null; - - if (resetStats && this._stats) { - this._stats = new _display_utils.StatTimer(); - } - - this.pendingCleanup = false; - return true; - } - - _startRenderPage(transparency, cacheKey) { - const intentState = this._intentStates.get(cacheKey); - - if (!intentState) { - return; - } - - if (this._stats) { - this._stats.timeEnd("Page Request"); - } - - if (intentState.displayReadyCapability) { - intentState.displayReadyCapability.resolve(transparency); - } - } - - _renderPageChunk(operatorListChunk, intentState) { - for (let i = 0, ii = operatorListChunk.length; i < ii; i++) { - intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]); - intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]); - } - - intentState.operatorList.lastChunk = operatorListChunk.lastChunk; - - for (const internalRenderTask of intentState.renderTasks) { - internalRenderTask.operatorListChanged(); - } - - if (operatorListChunk.lastChunk) { - this._tryCleanup(); - } - } - - _pumpOperatorList({ - renderingIntent, - cacheKey - }) { - const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", { - pageIndex: this._pageIndex, - intent: renderingIntent, - cacheKey, - annotationStorage: renderingIntent & _util.RenderingIntentFlag.ANNOTATIONS_STORAGE ? this._transport.annotationStorage.serializable : null - }); - - const reader = readableStream.getReader(); - - const intentState = this._intentStates.get(cacheKey); - - intentState.streamReader = reader; - - const pump = () => { - reader.read().then(({ - value, - done - }) => { - if (done) { - intentState.streamReader = null; - return; - } - - if (this._transport.destroyed) { - return; - } - - this._renderPageChunk(value, intentState); - - pump(); - }, reason => { - intentState.streamReader = null; - - if (this._transport.destroyed) { - return; - } - - if (intentState.operatorList) { - intentState.operatorList.lastChunk = true; - - for (const internalRenderTask of intentState.renderTasks) { - internalRenderTask.operatorListChanged(); - } - - this._tryCleanup(); - } - - if (intentState.displayReadyCapability) { - intentState.displayReadyCapability.reject(reason); - } else if (intentState.opListReadCapability) { - intentState.opListReadCapability.reject(reason); - } else { - throw reason; - } - }); - }; - - pump(); - } - - _abortOperatorList({ - intentState, - reason, - force = false - }) { - if (!intentState.streamReader) { - return; - } - - if (!force) { - if (intentState.renderTasks.size > 0) { - return; - } - - if (reason instanceof _display_utils.RenderingCancelledException) { - intentState.streamReaderCancelTimeout = setTimeout(() => { - this._abortOperatorList({ - intentState, - reason, - force: true - }); - - intentState.streamReaderCancelTimeout = null; - }, RENDERING_CANCELLED_TIMEOUT); - return; - } - } - - intentState.streamReader.cancel(new _util.AbortException(reason.message)).catch(() => {}); - intentState.streamReader = null; - - if (this._transport.destroyed) { - return; - } - - for (const [curCacheKey, curIntentState] of this._intentStates) { - if (curIntentState === intentState) { - this._intentStates.delete(curCacheKey); - - break; - } - } - - this.cleanup(); - } - - get stats() { - return this._stats; - } - -} - -exports.PDFPageProxy = PDFPageProxy; - -class LoopbackPort { - constructor() { - this._listeners = []; - this._deferred = Promise.resolve(); - } - - postMessage(obj, transfers) { - function cloneValue(object) { - if (globalThis.structuredClone) { - return globalThis.structuredClone(object, transfers); - } - - function fallbackCloneValue(value) { - if (typeof value === "function" || typeof value === "symbol" || value instanceof URL) { - throw new Error(`LoopbackPort.postMessage - cannot clone: ${value?.toString()}`); - } - - if (typeof value !== "object" || value === null) { - return value; - } - - if (cloned.has(value)) { - return cloned.get(value); - } - - let buffer, result; - - if ((buffer = value.buffer) && (0, _util.isArrayBuffer)(buffer)) { - if (transfers?.includes(buffer)) { - result = new value.constructor(buffer, value.byteOffset, value.byteLength); - } else { - result = new value.constructor(value); - } - - cloned.set(value, result); - return result; - } - - if (value instanceof Map) { - result = new Map(); - cloned.set(value, result); - - for (const [key, val] of value) { - result.set(key, fallbackCloneValue(val)); - } - - return result; - } - - if (value instanceof Set) { - result = new Set(); - cloned.set(value, result); - - for (const val of value) { - result.add(fallbackCloneValue(val)); - } - - return result; - } - - result = Array.isArray(value) ? [] : Object.create(null); - cloned.set(value, result); - - for (const i in value) { - let desc, - p = value; - - while (!(desc = Object.getOwnPropertyDescriptor(p, i))) { - p = Object.getPrototypeOf(p); - } - - if (typeof desc.value === "undefined") { - continue; - } - - if (typeof desc.value === "function" && !value.hasOwnProperty?.(i)) { - continue; - } - - result[i] = fallbackCloneValue(desc.value); - } - - return result; - } - - const cloned = new WeakMap(); - return fallbackCloneValue(object); - } - - const event = { - data: cloneValue(obj) - }; - - this._deferred.then(() => { - for (const listener of this._listeners) { - listener.call(this, event); - } - }); - } - - addEventListener(name, listener) { - this._listeners.push(listener); - } - - removeEventListener(name, listener) { - const i = this._listeners.indexOf(listener); - - this._listeners.splice(i, 1); - } - - terminate() { - this._listeners.length = 0; - } - -} - -exports.LoopbackPort = LoopbackPort; -const PDFWorkerUtil = { - isWorkerDisabled: false, - fallbackWorkerSrc: null, - fakeWorkerId: 0 -}; -{ - if (_is_node.isNodeJS && typeof commonjsRequire === "function") { - PDFWorkerUtil.isWorkerDisabled = true; - PDFWorkerUtil.fallbackWorkerSrc = "./pdf.worker.js"; - } else if (typeof document === "object") { - const pdfjsFilePath = document?.currentScript?.src; - - if (pdfjsFilePath) { - PDFWorkerUtil.fallbackWorkerSrc = pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, ".worker$1$2"); - } - } - - PDFWorkerUtil.createCDNWrapper = function (url) { - const wrapper = `importScripts("${url}");`; - return URL.createObjectURL(new Blob([wrapper])); - }; -} - -class PDFWorker { - static get _workerPorts() { - return (0, _util.shadow)(this, "_workerPorts", new WeakMap()); - } - - constructor({ - name = null, - port = null, - verbosity = (0, _util.getVerbosityLevel)() - } = {}) { - if (port && PDFWorker._workerPorts.has(port)) { - throw new Error("Cannot use more than one PDFWorker per port."); - } - - this.name = name; - this.destroyed = false; - this.verbosity = verbosity; - this._readyCapability = (0, _util.createPromiseCapability)(); - this._port = null; - this._webWorker = null; - this._messageHandler = null; - - if (port) { - PDFWorker._workerPorts.set(port, this); - - this._initializeFromPort(port); - - return; - } - - this._initialize(); - } - - get promise() { - return this._readyCapability.promise; - } - - get port() { - return this._port; - } - - get messageHandler() { - return this._messageHandler; - } - - _initializeFromPort(port) { - this._port = port; - this._messageHandler = new _message_handler.MessageHandler("main", "worker", port); - - this._messageHandler.on("ready", function () {}); - - this._readyCapability.resolve(); - } - - _initialize() { - if (typeof Worker !== "undefined" && !PDFWorkerUtil.isWorkerDisabled && !PDFWorker._mainThreadWorkerMessageHandler) { - let workerSrc = PDFWorker.workerSrc; - - try { - if (!(0, _util.isSameOrigin)(window.location.href, workerSrc)) { - workerSrc = PDFWorkerUtil.createCDNWrapper(new URL(workerSrc, window.location).href); - } - - const worker = new Worker(workerSrc); - const messageHandler = new _message_handler.MessageHandler("main", "worker", worker); - - const terminateEarly = () => { - worker.removeEventListener("error", onWorkerError); - messageHandler.destroy(); - worker.terminate(); - - if (this.destroyed) { - this._readyCapability.reject(new Error("Worker was destroyed")); - } else { - this._setupFakeWorker(); - } - }; - - const onWorkerError = () => { - if (!this._webWorker) { - terminateEarly(); - } - }; - - worker.addEventListener("error", onWorkerError); - messageHandler.on("test", data => { - worker.removeEventListener("error", onWorkerError); - - if (this.destroyed) { - terminateEarly(); - return; - } - - if (data) { - this._messageHandler = messageHandler; - this._port = worker; - this._webWorker = worker; - - this._readyCapability.resolve(); - - messageHandler.send("configure", { - verbosity: this.verbosity - }); - } else { - this._setupFakeWorker(); - - messageHandler.destroy(); - worker.terminate(); - } - }); - messageHandler.on("ready", data => { - worker.removeEventListener("error", onWorkerError); - - if (this.destroyed) { - terminateEarly(); - return; - } - - try { - sendTest(); - } catch (e) { - this._setupFakeWorker(); - } - }); - - const sendTest = () => { - const testObj = new Uint8Array([255]); - - try { - messageHandler.send("test", testObj, [testObj.buffer]); - } catch (ex) { - (0, _util.warn)("Cannot use postMessage transfers."); - testObj[0] = 0; - messageHandler.send("test", testObj); - } - }; - - sendTest(); - return; - } catch (e) { - (0, _util.info)("The worker has been disabled."); - } - } - - this._setupFakeWorker(); - } - - _setupFakeWorker() { - if (!PDFWorkerUtil.isWorkerDisabled) { - (0, _util.warn)("Setting up fake worker."); - PDFWorkerUtil.isWorkerDisabled = true; - } - - PDFWorker._setupFakeWorkerGlobal.then(WorkerMessageHandler => { - if (this.destroyed) { - this._readyCapability.reject(new Error("Worker was destroyed")); - - return; - } - - const port = new LoopbackPort(); - this._port = port; - const id = `fake${PDFWorkerUtil.fakeWorkerId++}`; - const workerHandler = new _message_handler.MessageHandler(id + "_worker", id, port); - WorkerMessageHandler.setup(workerHandler, port); - const messageHandler = new _message_handler.MessageHandler(id, id + "_worker", port); - this._messageHandler = messageHandler; - - this._readyCapability.resolve(); - - messageHandler.send("configure", { - verbosity: this.verbosity - }); - }).catch(reason => { - this._readyCapability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`)); - }); - } - - destroy() { - this.destroyed = true; - - if (this._webWorker) { - this._webWorker.terminate(); - - this._webWorker = null; - } - - PDFWorker._workerPorts.delete(this._port); - - this._port = null; - - if (this._messageHandler) { - this._messageHandler.destroy(); - - this._messageHandler = null; - } - } - - static fromPort(params) { - if (!params?.port) { - throw new Error("PDFWorker.fromPort - invalid method signature."); - } - - if (this._workerPorts.has(params.port)) { - return this._workerPorts.get(params.port); - } - - return new PDFWorker(params); - } - - static get workerSrc() { - if (_worker_options.GlobalWorkerOptions.workerSrc) { - return _worker_options.GlobalWorkerOptions.workerSrc; - } - - if (PDFWorkerUtil.fallbackWorkerSrc !== null) { - if (!_is_node.isNodeJS) { - (0, _display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.'); - } - - return PDFWorkerUtil.fallbackWorkerSrc; - } - - throw new Error('No "GlobalWorkerOptions.workerSrc" specified.'); - } - - static get _mainThreadWorkerMessageHandler() { - try { - return globalThis.pdfjsWorker?.WorkerMessageHandler || null; - } catch (ex) { - return null; - } - } - - static get _setupFakeWorkerGlobal() { - const loader = async () => { - const mainWorkerMessageHandler = this._mainThreadWorkerMessageHandler; - - if (mainWorkerMessageHandler) { - return mainWorkerMessageHandler; - } - - if (_is_node.isNodeJS && typeof commonjsRequire === "function") { - const worker = eval("require")(this.workerSrc); - return worker.WorkerMessageHandler; - } - - await (0, _display_utils.loadScript)(this.workerSrc); - return window.pdfjsWorker.WorkerMessageHandler; - }; - - return (0, _util.shadow)(this, "_setupFakeWorkerGlobal", loader()); - } - -} - -exports.PDFWorker = PDFWorker; -{ - PDFWorker.getWorkerSrc = function () { - (0, _display_utils.deprecated)("`PDFWorker.getWorkerSrc()`, please use `PDFWorker.workerSrc` instead."); - return this.workerSrc; - }; -} - -class WorkerTransport { - #docStats = null; - #pageCache = new Map(); - #pagePromises = new Map(); - #metadataPromise = null; - - constructor(messageHandler, loadingTask, networkStream, params) { - this.messageHandler = messageHandler; - this.loadingTask = loadingTask; - this.commonObjs = new PDFObjects(); - this.fontLoader = new _font_loader.FontLoader({ - docId: loadingTask.docId, - onUnsupportedFeature: this._onUnsupportedFeature.bind(this), - ownerDocument: params.ownerDocument, - styleElement: params.styleElement - }); - this._params = params; - - if (!params.useWorkerFetch) { - this.CMapReaderFactory = new params.CMapReaderFactory({ - baseUrl: params.cMapUrl, - isCompressed: params.cMapPacked - }); - this.StandardFontDataFactory = new params.StandardFontDataFactory({ - baseUrl: params.standardFontDataUrl - }); - } - - this.destroyed = false; - this.destroyCapability = null; - this._passwordCapability = null; - this._networkStream = networkStream; - this._fullReader = null; - this._lastProgress = null; - this.downloadInfoCapability = (0, _util.createPromiseCapability)(); - this.setupMessageHandler(); - } - - get annotationStorage() { - return (0, _util.shadow)(this, "annotationStorage", new _annotation_storage.AnnotationStorage()); - } - - get stats() { - return this.#docStats; - } - - getRenderingIntent(intent, annotationMode = _util.AnnotationMode.ENABLE, isOpList = false) { - let renderingIntent = _util.RenderingIntentFlag.DISPLAY; - let lastModified = ""; - - switch (intent) { - case "any": - renderingIntent = _util.RenderingIntentFlag.ANY; - break; - - case "display": - break; - - case "print": - renderingIntent = _util.RenderingIntentFlag.PRINT; - break; - - default: - (0, _util.warn)(`getRenderingIntent - invalid intent: ${intent}`); - } - - switch (annotationMode) { - case _util.AnnotationMode.DISABLE: - renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_DISABLE; - break; - - case _util.AnnotationMode.ENABLE: - break; - - case _util.AnnotationMode.ENABLE_FORMS: - renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_FORMS; - break; - - case _util.AnnotationMode.ENABLE_STORAGE: - renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_STORAGE; - lastModified = this.annotationStorage.lastModified; - break; - - default: - (0, _util.warn)(`getRenderingIntent - invalid annotationMode: ${annotationMode}`); - } - - if (isOpList) { - renderingIntent += _util.RenderingIntentFlag.OPLIST; - } - - return { - renderingIntent, - cacheKey: `${renderingIntent}_${lastModified}` - }; - } - - destroy() { - if (this.destroyCapability) { - return this.destroyCapability.promise; - } - - this.destroyed = true; - this.destroyCapability = (0, _util.createPromiseCapability)(); - - if (this._passwordCapability) { - this._passwordCapability.reject(new Error("Worker was destroyed during onPassword callback")); - } - - const waitOn = []; - - for (const page of this.#pageCache.values()) { - waitOn.push(page._destroy()); - } - - this.#pageCache.clear(); - this.#pagePromises.clear(); - - if (this.hasOwnProperty("annotationStorage")) { - this.annotationStorage.resetModified(); - } - - const terminated = this.messageHandler.sendWithPromise("Terminate", null); - waitOn.push(terminated); - Promise.all(waitOn).then(() => { - this.commonObjs.clear(); - this.fontLoader.clear(); - this.#metadataPromise = null; - this._getFieldObjectsPromise = null; - this._hasJSActionsPromise = null; - - if (this._networkStream) { - this._networkStream.cancelAllRequests(new _util.AbortException("Worker was terminated.")); - } - - if (this.messageHandler) { - this.messageHandler.destroy(); - this.messageHandler = null; - } - - this.destroyCapability.resolve(); - }, this.destroyCapability.reject); - return this.destroyCapability.promise; - } - - setupMessageHandler() { - const { - messageHandler, - loadingTask - } = this; - messageHandler.on("GetReader", (data, sink) => { - (0, _util.assert)(this._networkStream, "GetReader - no `IPDFStream` instance available."); - this._fullReader = this._networkStream.getFullReader(); - - this._fullReader.onProgress = evt => { - this._lastProgress = { - loaded: evt.loaded, - total: evt.total - }; - }; - - sink.onPull = () => { - this._fullReader.read().then(function ({ - value, - done - }) { - if (done) { - sink.close(); - return; - } - - (0, _util.assert)((0, _util.isArrayBuffer)(value), "GetReader - expected an ArrayBuffer."); - sink.enqueue(new Uint8Array(value), 1, [value]); - }).catch(reason => { - sink.error(reason); - }); - }; - - sink.onCancel = reason => { - this._fullReader.cancel(reason); - - sink.ready.catch(readyReason => { - if (this.destroyed) { - return; - } - - throw readyReason; - }); - }; - }); - messageHandler.on("ReaderHeadersReady", data => { - const headersCapability = (0, _util.createPromiseCapability)(); - const fullReader = this._fullReader; - fullReader.headersReady.then(() => { - if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) { - if (this._lastProgress) { - loadingTask.onProgress?.(this._lastProgress); - } - - fullReader.onProgress = evt => { - loadingTask.onProgress?.({ - loaded: evt.loaded, - total: evt.total - }); - }; - } - - headersCapability.resolve({ - isStreamingSupported: fullReader.isStreamingSupported, - isRangeSupported: fullReader.isRangeSupported, - contentLength: fullReader.contentLength - }); - }, headersCapability.reject); - return headersCapability.promise; - }); - messageHandler.on("GetRangeReader", (data, sink) => { - (0, _util.assert)(this._networkStream, "GetRangeReader - no `IPDFStream` instance available."); - - const rangeReader = this._networkStream.getRangeReader(data.begin, data.end); - - if (!rangeReader) { - sink.close(); - return; - } - - sink.onPull = () => { - rangeReader.read().then(function ({ - value, - done - }) { - if (done) { - sink.close(); - return; - } - - (0, _util.assert)((0, _util.isArrayBuffer)(value), "GetRangeReader - expected an ArrayBuffer."); - sink.enqueue(new Uint8Array(value), 1, [value]); - }).catch(reason => { - sink.error(reason); - }); - }; - - sink.onCancel = reason => { - rangeReader.cancel(reason); - sink.ready.catch(readyReason => { - if (this.destroyed) { - return; - } - - throw readyReason; - }); - }; - }); - messageHandler.on("GetDoc", ({ - pdfInfo - }) => { - this._numPages = pdfInfo.numPages; - this._htmlForXfa = pdfInfo.htmlForXfa; - delete pdfInfo.htmlForXfa; - - loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this)); - }); - messageHandler.on("DocException", function (ex) { - let reason; - - switch (ex.name) { - case "PasswordException": - reason = new _util.PasswordException(ex.message, ex.code); - break; - - case "InvalidPDFException": - reason = new _util.InvalidPDFException(ex.message); - break; - - case "MissingPDFException": - reason = new _util.MissingPDFException(ex.message); - break; - - case "UnexpectedResponseException": - reason = new _util.UnexpectedResponseException(ex.message, ex.status); - break; - - case "UnknownErrorException": - reason = new _util.UnknownErrorException(ex.message, ex.details); - break; - - default: - (0, _util.unreachable)("DocException - expected a valid Error."); - } - - loadingTask._capability.reject(reason); - }); - messageHandler.on("PasswordRequest", exception => { - this._passwordCapability = (0, _util.createPromiseCapability)(); - - if (loadingTask.onPassword) { - const updatePassword = password => { - this._passwordCapability.resolve({ - password - }); - }; - - try { - loadingTask.onPassword(updatePassword, exception.code); - } catch (ex) { - this._passwordCapability.reject(ex); - } - } else { - this._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code)); - } - - return this._passwordCapability.promise; - }); - messageHandler.on("DataLoaded", data => { - loadingTask.onProgress?.({ - loaded: data.length, - total: data.length - }); - this.downloadInfoCapability.resolve(data); - }); - messageHandler.on("StartRenderPage", data => { - if (this.destroyed) { - return; - } - - const page = this.#pageCache.get(data.pageIndex); - - page._startRenderPage(data.transparency, data.cacheKey); - }); - messageHandler.on("commonobj", ([id, type, exportedData]) => { - if (this.destroyed) { - return; - } - - if (this.commonObjs.has(id)) { - return; - } - - switch (type) { - case "Font": - const params = this._params; - - if ("error" in exportedData) { - const exportedError = exportedData.error; - (0, _util.warn)(`Error during font loading: ${exportedError}`); - this.commonObjs.resolve(id, exportedError); - break; - } - - let fontRegistry = null; - - if (params.pdfBug && globalThis.FontInspector?.enabled) { - fontRegistry = { - registerFont(font, url) { - globalThis.FontInspector.fontAdded(font, url); - } - - }; - } - - const font = new _font_loader.FontFaceObject(exportedData, { - isEvalSupported: params.isEvalSupported, - disableFontFace: params.disableFontFace, - ignoreErrors: params.ignoreErrors, - onUnsupportedFeature: this._onUnsupportedFeature.bind(this), - fontRegistry - }); - this.fontLoader.bind(font).catch(reason => { - return messageHandler.sendWithPromise("FontFallback", { - id - }); - }).finally(() => { - if (!params.fontExtraProperties && font.data) { - font.data = null; - } - - this.commonObjs.resolve(id, font); - }); - break; - - case "FontPath": - case "Image": - this.commonObjs.resolve(id, exportedData); - break; - - default: - throw new Error(`Got unknown common object type ${type}`); - } - }); - messageHandler.on("obj", ([id, pageIndex, type, imageData]) => { - if (this.destroyed) { - return; - } - - const pageProxy = this.#pageCache.get(pageIndex); - - if (pageProxy.objs.has(id)) { - return; - } - - switch (type) { - case "Image": - pageProxy.objs.resolve(id, imageData); - const MAX_IMAGE_SIZE_TO_STORE = 8000000; - - if (imageData?.data?.length > MAX_IMAGE_SIZE_TO_STORE) { - pageProxy.cleanupAfterRender = true; - } - - break; - - case "Pattern": - pageProxy.objs.resolve(id, imageData); - break; - - default: - throw new Error(`Got unknown object type ${type}`); - } - }); - messageHandler.on("DocProgress", data => { - if (this.destroyed) { - return; - } - - loadingTask.onProgress?.({ - loaded: data.loaded, - total: data.total - }); - }); - messageHandler.on("DocStats", data => { - if (this.destroyed) { - return; - } - - this.#docStats = Object.freeze({ - streamTypes: Object.freeze(data.streamTypes), - fontTypes: Object.freeze(data.fontTypes) - }); - }); - messageHandler.on("UnsupportedFeature", this._onUnsupportedFeature.bind(this)); - messageHandler.on("FetchBuiltInCMap", data => { - if (this.destroyed) { - return Promise.reject(new Error("Worker was destroyed.")); - } - - if (!this.CMapReaderFactory) { - return Promise.reject(new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter.")); - } - - return this.CMapReaderFactory.fetch(data); - }); - messageHandler.on("FetchStandardFontData", data => { - if (this.destroyed) { - return Promise.reject(new Error("Worker was destroyed.")); - } - - if (!this.StandardFontDataFactory) { - return Promise.reject(new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter.")); - } - - return this.StandardFontDataFactory.fetch(data); - }); - } - - _onUnsupportedFeature({ - featureId - }) { - if (this.destroyed) { - return; - } - - this.loadingTask.onUnsupportedFeature?.(featureId); - } - - getData() { - return this.messageHandler.sendWithPromise("GetData", null); - } - - getPage(pageNumber) { - if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) { - return Promise.reject(new Error("Invalid page request")); - } - - const pageIndex = pageNumber - 1, - cachedPromise = this.#pagePromises.get(pageIndex); - - if (cachedPromise) { - return cachedPromise; - } - - const promise = this.messageHandler.sendWithPromise("GetPage", { - pageIndex - }).then(pageInfo => { - if (this.destroyed) { - throw new Error("Transport destroyed"); - } - - const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.ownerDocument, this._params.pdfBug); - this.#pageCache.set(pageIndex, page); - return page; - }); - this.#pagePromises.set(pageIndex, promise); - return promise; - } - - getPageIndex(ref) { - return this.messageHandler.sendWithPromise("GetPageIndex", { - ref - }); - } - - getAnnotations(pageIndex, intent) { - return this.messageHandler.sendWithPromise("GetAnnotations", { - pageIndex, - intent - }); - } - - saveDocument() { - return this.messageHandler.sendWithPromise("SaveDocument", { - isPureXfa: !!this._htmlForXfa, - numPages: this._numPages, - annotationStorage: this.annotationStorage.serializable, - filename: this._fullReader?.filename ?? null - }).finally(() => { - this.annotationStorage.resetModified(); - }); - } - - getFieldObjects() { - return this._getFieldObjectsPromise ||= this.messageHandler.sendWithPromise("GetFieldObjects", null); - } - - hasJSActions() { - return this._hasJSActionsPromise ||= this.messageHandler.sendWithPromise("HasJSActions", null); - } - - getCalculationOrderIds() { - return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null); - } - - getDestinations() { - return this.messageHandler.sendWithPromise("GetDestinations", null); - } - - getDestination(id) { - if (typeof id !== "string") { - return Promise.reject(new Error("Invalid destination request.")); - } - - return this.messageHandler.sendWithPromise("GetDestination", { - id - }); - } - - getPageLabels() { - return this.messageHandler.sendWithPromise("GetPageLabels", null); - } - - getPageLayout() { - return this.messageHandler.sendWithPromise("GetPageLayout", null); - } - - getPageMode() { - return this.messageHandler.sendWithPromise("GetPageMode", null); - } - - getViewerPreferences() { - return this.messageHandler.sendWithPromise("GetViewerPreferences", null); - } - - getOpenAction() { - return this.messageHandler.sendWithPromise("GetOpenAction", null); - } - - getAttachments() { - return this.messageHandler.sendWithPromise("GetAttachments", null); - } - - getJavaScript() { - return this.messageHandler.sendWithPromise("GetJavaScript", null); - } - - getDocJSActions() { - return this.messageHandler.sendWithPromise("GetDocJSActions", null); - } - - getPageJSActions(pageIndex) { - return this.messageHandler.sendWithPromise("GetPageJSActions", { - pageIndex - }); - } - - getStructTree(pageIndex) { - return this.messageHandler.sendWithPromise("GetStructTree", { - pageIndex - }); - } - - getOutline() { - return this.messageHandler.sendWithPromise("GetOutline", null); - } - - getOptionalContentConfig() { - return this.messageHandler.sendWithPromise("GetOptionalContentConfig", null).then(results => { - return new _optional_content_config.OptionalContentConfig(results); - }); - } - - getPermissions() { - return this.messageHandler.sendWithPromise("GetPermissions", null); - } - - getMetadata() { - return this.#metadataPromise ||= this.messageHandler.sendWithPromise("GetMetadata", null).then(results => { - return { - info: results[0], - metadata: results[1] ? new _metadata.Metadata(results[1]) : null, - contentDispositionFilename: this._fullReader?.filename ?? null, - contentLength: this._fullReader?.contentLength ?? null - }; - }); - } - - getMarkInfo() { - return this.messageHandler.sendWithPromise("GetMarkInfo", null); - } - - async startCleanup(keepLoadedFonts = false) { - await this.messageHandler.sendWithPromise("Cleanup", null); - - if (this.destroyed) { - return; - } - - for (const page of this.#pageCache.values()) { - const cleanupSuccessful = page.cleanup(); - - if (!cleanupSuccessful) { - throw new Error(`startCleanup: Page ${page.pageNumber} is currently rendering.`); - } - } - - this.commonObjs.clear(); - - if (!keepLoadedFonts) { - this.fontLoader.clear(); - } - - this.#metadataPromise = null; - this._getFieldObjectsPromise = null; - this._hasJSActionsPromise = null; - } - - get loadingParams() { - const params = this._params; - return (0, _util.shadow)(this, "loadingParams", { - disableAutoFetch: params.disableAutoFetch, - enableXfa: params.enableXfa - }); - } - -} - -class PDFObjects { - constructor() { - this._objs = Object.create(null); - } - - _ensureObj(objId) { - if (this._objs[objId]) { - return this._objs[objId]; - } - - return this._objs[objId] = { - capability: (0, _util.createPromiseCapability)(), - data: null, - resolved: false - }; - } - - get(objId, callback = null) { - if (callback) { - this._ensureObj(objId).capability.promise.then(callback); - - return null; - } - - const obj = this._objs[objId]; - - if (!obj || !obj.resolved) { - throw new Error(`Requesting object that isn't resolved yet ${objId}.`); - } - - return obj.data; - } - - has(objId) { - const obj = this._objs[objId]; - return obj?.resolved || false; - } - - resolve(objId, data) { - const obj = this._ensureObj(objId); - - obj.resolved = true; - obj.data = data; - obj.capability.resolve(data); - } - - clear() { - this._objs = Object.create(null); - } - -} - -class RenderTask { - constructor(internalRenderTask) { - this._internalRenderTask = internalRenderTask; - this.onContinue = null; - } - - get promise() { - return this._internalRenderTask.capability.promise; - } - - cancel() { - this._internalRenderTask.cancel(); - } - -} - -exports.RenderTask = RenderTask; - -class InternalRenderTask { - static get canvasInUse() { - return (0, _util.shadow)(this, "canvasInUse", new WeakSet()); - } - - constructor({ - callback, - params, - objs, - commonObjs, - annotationCanvasMap, - operatorList, - pageIndex, - canvasFactory, - useRequestAnimationFrame = false, - pdfBug = false - }) { - this.callback = callback; - this.params = params; - this.objs = objs; - this.commonObjs = commonObjs; - this.annotationCanvasMap = annotationCanvasMap; - this.operatorListIdx = null; - this.operatorList = operatorList; - this._pageIndex = pageIndex; - this.canvasFactory = canvasFactory; - this._pdfBug = pdfBug; - this.running = false; - this.graphicsReadyCallback = null; - this.graphicsReady = false; - this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined"; - this.cancelled = false; - this.capability = (0, _util.createPromiseCapability)(); - this.task = new RenderTask(this); - this._cancelBound = this.cancel.bind(this); - this._continueBound = this._continue.bind(this); - this._scheduleNextBound = this._scheduleNext.bind(this); - this._nextBound = this._next.bind(this); - this._canvas = params.canvasContext.canvas; - } - - get completed() { - return this.capability.promise.catch(function () {}); - } - - initializeGraphics({ - transparency = false, - optionalContentConfig - }) { - if (this.cancelled) { - return; - } - - if (this._canvas) { - if (InternalRenderTask.canvasInUse.has(this._canvas)) { - throw new Error("Cannot use the same canvas during multiple render() operations. " + "Use different canvas or ensure previous operations were " + "cancelled or completed."); - } - - InternalRenderTask.canvasInUse.add(this._canvas); - } - - if (this._pdfBug && globalThis.StepperManager?.enabled) { - this.stepper = globalThis.StepperManager.create(this._pageIndex); - this.stepper.init(this.operatorList); - this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint(); - } - - const { - canvasContext, - viewport, - transform, - imageLayer, - background - } = this.params; - this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, imageLayer, optionalContentConfig, this.annotationCanvasMap); - this.gfx.beginDrawing({ - transform, - viewport, - transparency, - background - }); - this.operatorListIdx = 0; - this.graphicsReady = true; - - if (this.graphicsReadyCallback) { - this.graphicsReadyCallback(); - } - } - - cancel(error = null) { - this.running = false; - this.cancelled = true; - - if (this.gfx) { - this.gfx.endDrawing(); - } - - if (this._canvas) { - InternalRenderTask.canvasInUse.delete(this._canvas); - } - - this.callback(error || new _display_utils.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, "canvas")); - } - - operatorListChanged() { - if (!this.graphicsReady) { - if (!this.graphicsReadyCallback) { - this.graphicsReadyCallback = this._continueBound; - } - - return; - } - - if (this.stepper) { - this.stepper.updateOperatorList(this.operatorList); - } - - if (this.running) { - return; - } - - this._continue(); - } - - _continue() { - this.running = true; - - if (this.cancelled) { - return; - } - - if (this.task.onContinue) { - this.task.onContinue(this._scheduleNextBound); - } else { - this._scheduleNext(); - } - } - - _scheduleNext() { - if (this._useRequestAnimationFrame) { - window.requestAnimationFrame(() => { - this._nextBound().catch(this._cancelBound); - }); - } else { - Promise.resolve().then(this._nextBound).catch(this._cancelBound); - } - } - - async _next() { - if (this.cancelled) { - return; - } - - this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper); - - if (this.operatorListIdx === this.operatorList.argsArray.length) { - this.running = false; - - if (this.operatorList.lastChunk) { - this.gfx.endDrawing(); - - if (this._canvas) { - InternalRenderTask.canvasInUse.delete(this._canvas); - } - - this.callback(); - } - } - } - -} - -const version = '2.12.313'; -exports.version = version; -const build = 'a2ae56f39'; -exports.build = build; - -/***/ }), -/* 7 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.FontLoader = exports.FontFaceObject = void 0; - -var _util = __w_pdfjs_require__(2); - -class BaseFontLoader { - constructor({ - docId, - onUnsupportedFeature, - ownerDocument = globalThis.document, - styleElement = null - }) { - if (this.constructor === BaseFontLoader) { - (0, _util.unreachable)("Cannot initialize BaseFontLoader."); - } - - this.docId = docId; - this._onUnsupportedFeature = onUnsupportedFeature; - this._document = ownerDocument; - this.nativeFontFaces = []; - this.styleElement = null; - } - - addNativeFontFace(nativeFontFace) { - this.nativeFontFaces.push(nativeFontFace); - - this._document.fonts.add(nativeFontFace); - } - - insertRule(rule) { - let styleElement = this.styleElement; - - if (!styleElement) { - styleElement = this.styleElement = this._document.createElement("style"); - styleElement.id = `PDFJS_FONT_STYLE_TAG_${this.docId}`; - - this._document.documentElement.getElementsByTagName("head")[0].appendChild(styleElement); - } - - const styleSheet = styleElement.sheet; - styleSheet.insertRule(rule, styleSheet.cssRules.length); - } - - clear() { - for (const nativeFontFace of this.nativeFontFaces) { - this._document.fonts.delete(nativeFontFace); - } - - this.nativeFontFaces.length = 0; - - if (this.styleElement) { - this.styleElement.remove(); - this.styleElement = null; - } - } - - async bind(font) { - if (font.attached || font.missingFile) { - return; - } - - font.attached = true; - - if (this.isFontLoadingAPISupported) { - const nativeFontFace = font.createNativeFontFace(); - - if (nativeFontFace) { - this.addNativeFontFace(nativeFontFace); - - try { - await nativeFontFace.loaded; - } catch (ex) { - this._onUnsupportedFeature({ - featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadNative - }); - - (0, _util.warn)(`Failed to load font '${nativeFontFace.family}': '${ex}'.`); - font.disableFontFace = true; - throw ex; - } - } - - return; - } - - const rule = font.createFontFaceRule(); - - if (rule) { - this.insertRule(rule); - - if (this.isSyncFontLoadingSupported) { - return; - } - - await new Promise(resolve => { - const request = this._queueLoadingCallback(resolve); - - this._prepareFontLoadEvent([rule], [font], request); - }); - } - } - - _queueLoadingCallback(callback) { - (0, _util.unreachable)("Abstract method `_queueLoadingCallback`."); - } - - get isFontLoadingAPISupported() { - const hasFonts = !!this._document?.fonts; - return (0, _util.shadow)(this, "isFontLoadingAPISupported", hasFonts); - } - - get isSyncFontLoadingSupported() { - (0, _util.unreachable)("Abstract method `isSyncFontLoadingSupported`."); - } - - get _loadTestFont() { - (0, _util.unreachable)("Abstract method `_loadTestFont`."); - } - - _prepareFontLoadEvent(rules, fontsToLoad, request) { - (0, _util.unreachable)("Abstract method `_prepareFontLoadEvent`."); - } - -} - -let FontLoader; -exports.FontLoader = FontLoader; -{ - exports.FontLoader = FontLoader = class GenericFontLoader extends BaseFontLoader { - constructor(params) { - super(params); - this.loadingContext = { - requests: [], - nextRequestId: 0 - }; - this.loadTestFontId = 0; - } - - get isSyncFontLoadingSupported() { - let supported = false; - - if (typeof navigator === "undefined") { - supported = true; - } else { - const m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent); - - if (m?.[1] >= 14) { - supported = true; - } - } - - return (0, _util.shadow)(this, "isSyncFontLoadingSupported", supported); - } - - _queueLoadingCallback(callback) { - function completeRequest() { - (0, _util.assert)(!request.done, "completeRequest() cannot be called twice."); - request.done = true; - - while (context.requests.length > 0 && context.requests[0].done) { - const otherRequest = context.requests.shift(); - setTimeout(otherRequest.callback, 0); - } - } - - const context = this.loadingContext; - const request = { - id: `pdfjs-font-loading-${context.nextRequestId++}`, - done: false, - complete: completeRequest, - callback - }; - context.requests.push(request); - return request; - } - - get _loadTestFont() { - const getLoadTestFont = function () { - return atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA" + "FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA" + "ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA" + "AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1" + "AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD" + "6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM" + "AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D" + "IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA" + "AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA" + "AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB" + "AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY" + "AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA" + "AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA" + "AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC" + "AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3" + "Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj" + "FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA=="); - }; - - return (0, _util.shadow)(this, "_loadTestFont", getLoadTestFont()); - } - - _prepareFontLoadEvent(rules, fonts, request) { - function int32(data, offset) { - return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff; - } - - function spliceString(s, offset, remove, insert) { - const chunk1 = s.substring(0, offset); - const chunk2 = s.substring(offset + remove); - return chunk1 + insert + chunk2; - } - - let i, ii; - - const canvas = this._document.createElement("canvas"); - - canvas.width = 1; - canvas.height = 1; - const ctx = canvas.getContext("2d"); - let called = 0; - - function isFontReady(name, callback) { - called++; - - if (called > 30) { - (0, _util.warn)("Load test font never loaded."); - callback(); - return; - } - - ctx.font = "30px " + name; - ctx.fillText(".", 0, 20); - const imageData = ctx.getImageData(0, 0, 1, 1); - - if (imageData.data[3] > 0) { - callback(); - return; - } - - setTimeout(isFontReady.bind(null, name, callback)); - } - - const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`; - let data = this._loadTestFont; - const COMMENT_OFFSET = 976; - data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId); - const CFF_CHECKSUM_OFFSET = 16; - const XXXX_VALUE = 0x58585858; - let checksum = int32(data, CFF_CHECKSUM_OFFSET); - - for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) { - checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0; - } - - if (i < loadTestFontId.length) { - checksum = checksum - XXXX_VALUE + int32(loadTestFontId + "XXX", i) | 0; - } - - data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, (0, _util.string32)(checksum)); - const url = `url(data:font/opentype;base64,${btoa(data)});`; - const rule = `@font-face {font-family:"${loadTestFontId}";src:${url}}`; - this.insertRule(rule); - const names = []; - - for (const font of fonts) { - names.push(font.loadedName); - } - - names.push(loadTestFontId); - - const div = this._document.createElement("div"); - - div.style.visibility = "hidden"; - div.style.width = div.style.height = "10px"; - div.style.position = "absolute"; - div.style.top = div.style.left = "0px"; - - for (const name of names) { - const span = this._document.createElement("span"); - - span.textContent = "Hi"; - span.style.fontFamily = name; - div.appendChild(span); - } - - this._document.body.appendChild(div); - - isFontReady(loadTestFontId, () => { - div.remove(); - request.complete(); - }); - } - - }; -} - -class FontFaceObject { - constructor(translatedData, { - isEvalSupported = true, - disableFontFace = false, - ignoreErrors = false, - onUnsupportedFeature, - fontRegistry = null - }) { - this.compiledGlyphs = Object.create(null); - - for (const i in translatedData) { - this[i] = translatedData[i]; - } - - this.isEvalSupported = isEvalSupported !== false; - this.disableFontFace = disableFontFace === true; - this.ignoreErrors = ignoreErrors === true; - this._onUnsupportedFeature = onUnsupportedFeature; - this.fontRegistry = fontRegistry; - } - - createNativeFontFace() { - if (!this.data || this.disableFontFace) { - return null; - } - - let nativeFontFace; - - if (!this.cssFontInfo) { - nativeFontFace = new FontFace(this.loadedName, this.data, {}); - } else { - const css = { - weight: this.cssFontInfo.fontWeight - }; - - if (this.cssFontInfo.italicAngle) { - css.style = `oblique ${this.cssFontInfo.italicAngle}deg`; - } - - nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css); - } - - if (this.fontRegistry) { - this.fontRegistry.registerFont(this); - } - - return nativeFontFace; - } - - createFontFaceRule() { - if (!this.data || this.disableFontFace) { - return null; - } - - const data = (0, _util.bytesToString)(this.data); - const url = `url(data:${this.mimetype};base64,${btoa(data)});`; - let rule; - - if (!this.cssFontInfo) { - rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`; - } else { - let css = `font-weight: ${this.cssFontInfo.fontWeight};`; - - if (this.cssFontInfo.italicAngle) { - css += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`; - } - - rule = `@font-face {font-family:"${this.cssFontInfo.fontFamily}";${css}src:${url}}`; - } - - if (this.fontRegistry) { - this.fontRegistry.registerFont(this, url); - } - - return rule; - } - - getPathGenerator(objs, character) { - if (this.compiledGlyphs[character] !== undefined) { - return this.compiledGlyphs[character]; - } - - let cmds; - - try { - cmds = objs.get(this.loadedName + "_path_" + character); - } catch (ex) { - if (!this.ignoreErrors) { - throw ex; - } - - this._onUnsupportedFeature({ - featureId: _util.UNSUPPORTED_FEATURES.errorFontGetPath - }); - - (0, _util.warn)(`getPathGenerator - ignoring character: "${ex}".`); - return this.compiledGlyphs[character] = function (c, size) {}; - } - - if (this.isEvalSupported && _util.IsEvalSupportedCached.value) { - const jsBuf = []; - - for (const current of cmds) { - const args = current.args !== undefined ? current.args.join(",") : ""; - jsBuf.push("c.", current.cmd, "(", args, ");\n"); - } - - return this.compiledGlyphs[character] = new Function("c", "size", jsBuf.join("")); - } - - return this.compiledGlyphs[character] = function (c, size) { - for (const current of cmds) { - if (current.cmd === "scale") { - current.args = [size, -size]; - } - - c[current.cmd].apply(c, current.args); - } - }; - } - -} - -exports.FontFaceObject = FontFaceObject; - -/***/ }), -/* 8 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.NodeStandardFontDataFactory = exports.NodeCanvasFactory = exports.NodeCMapReaderFactory = void 0; - -var _base_factory = __w_pdfjs_require__(5); - -var _is_node = __w_pdfjs_require__(4); - -var _util = __w_pdfjs_require__(2); - -let NodeCanvasFactory = class { - constructor() { - (0, _util.unreachable)("Not implemented: NodeCanvasFactory"); - } - -}; -exports.NodeCanvasFactory = NodeCanvasFactory; -let NodeCMapReaderFactory = class { - constructor() { - (0, _util.unreachable)("Not implemented: NodeCMapReaderFactory"); - } - -}; -exports.NodeCMapReaderFactory = NodeCMapReaderFactory; -let NodeStandardFontDataFactory = class { - constructor() { - (0, _util.unreachable)("Not implemented: NodeStandardFontDataFactory"); - } - -}; -exports.NodeStandardFontDataFactory = NodeStandardFontDataFactory; - -if (_is_node.isNodeJS) { - const fetchData = function (url) { - return new Promise((resolve, reject) => { - const fs = require$$5; - - fs.readFile(url, (error, data) => { - if (error || !data) { - reject(new Error(error)); - return; - } - - resolve(new Uint8Array(data)); - }); - }); - }; - - exports.NodeCanvasFactory = NodeCanvasFactory = class extends _base_factory.BaseCanvasFactory { - _createCanvas(width, height) { - const Canvas = require$$5; - - return Canvas.createCanvas(width, height); - } - - }; - exports.NodeCMapReaderFactory = NodeCMapReaderFactory = class extends _base_factory.BaseCMapReaderFactory { - _fetchData(url, compressionType) { - return fetchData(url).then(data => { - return { - cMapData: data, - compressionType - }; - }); - } - - }; - exports.NodeStandardFontDataFactory = NodeStandardFontDataFactory = class extends _base_factory.BaseStandardFontDataFactory { - _fetchData(url) { - return fetchData(url); - } - - }; -} - -/***/ }), -/* 9 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.AnnotationStorage = void 0; - -var _util = __w_pdfjs_require__(2); - -class AnnotationStorage { - constructor() { - this._storage = new Map(); - this._timeStamp = Date.now(); - this._modified = false; - this.onSetModified = null; - this.onResetModified = null; - } - - getValue(key, defaultValue) { - const value = this._storage.get(key); - - if (value === undefined) { - return defaultValue; - } - - return Object.assign(defaultValue, value); - } - - setValue(key, value) { - const obj = this._storage.get(key); - - let modified = false; - - if (obj !== undefined) { - for (const [entry, val] of Object.entries(value)) { - if (obj[entry] !== val) { - modified = true; - obj[entry] = val; - } - } - } else { - modified = true; - - this._storage.set(key, value); - } - - if (modified) { - this._timeStamp = Date.now(); - - this._setModified(); - } - } - - getAll() { - return this._storage.size > 0 ? (0, _util.objectFromMap)(this._storage) : null; - } - - get size() { - return this._storage.size; - } - - _setModified() { - if (!this._modified) { - this._modified = true; - - if (typeof this.onSetModified === "function") { - this.onSetModified(); - } - } - } - - resetModified() { - if (this._modified) { - this._modified = false; - - if (typeof this.onResetModified === "function") { - this.onResetModified(); - } - } - } - - get serializable() { - return this._storage.size > 0 ? this._storage : null; - } - - get lastModified() { - return this._timeStamp.toString(); - } - -} - -exports.AnnotationStorage = AnnotationStorage; - -/***/ }), -/* 10 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.CanvasGraphics = void 0; - -var _util = __w_pdfjs_require__(2); - -var _pattern_helper = __w_pdfjs_require__(11); - -var _display_utils = __w_pdfjs_require__(1); - -const MIN_FONT_SIZE = 16; -const MAX_FONT_SIZE = 100; -const MAX_GROUP_SIZE = 4096; -const EXECUTION_TIME = 15; -const EXECUTION_STEPS = 10; -const MAX_SIZE_TO_COMPILE = 1000; -const FULL_CHUNK_HEIGHT = 16; -const LINEWIDTH_SCALE_FACTOR = 1.000001; - -function mirrorContextOperations(ctx, destCtx) { - if (ctx._removeMirroring) { - throw new Error("Context is already forwarding operations."); - } - - ctx.__originalSave = ctx.save; - ctx.__originalRestore = ctx.restore; - ctx.__originalRotate = ctx.rotate; - ctx.__originalScale = ctx.scale; - ctx.__originalTranslate = ctx.translate; - ctx.__originalTransform = ctx.transform; - ctx.__originalSetTransform = ctx.setTransform; - ctx.__originalResetTransform = ctx.resetTransform; - ctx.__originalClip = ctx.clip; - ctx.__originalMoveTo = ctx.moveTo; - ctx.__originalLineTo = ctx.lineTo; - ctx.__originalBezierCurveTo = ctx.bezierCurveTo; - ctx.__originalRect = ctx.rect; - ctx.__originalClosePath = ctx.closePath; - ctx.__originalBeginPath = ctx.beginPath; - - ctx._removeMirroring = () => { - ctx.save = ctx.__originalSave; - ctx.restore = ctx.__originalRestore; - ctx.rotate = ctx.__originalRotate; - ctx.scale = ctx.__originalScale; - ctx.translate = ctx.__originalTranslate; - ctx.transform = ctx.__originalTransform; - ctx.setTransform = ctx.__originalSetTransform; - ctx.resetTransform = ctx.__originalResetTransform; - ctx.clip = ctx.__originalClip; - ctx.moveTo = ctx.__originalMoveTo; - ctx.lineTo = ctx.__originalLineTo; - ctx.bezierCurveTo = ctx.__originalBezierCurveTo; - ctx.rect = ctx.__originalRect; - ctx.closePath = ctx.__originalClosePath; - ctx.beginPath = ctx.__originalBeginPath; - delete ctx._removeMirroring; - }; - - ctx.save = function ctxSave() { - destCtx.save(); - - this.__originalSave(); - }; - - ctx.restore = function ctxRestore() { - destCtx.restore(); - - this.__originalRestore(); - }; - - ctx.translate = function ctxTranslate(x, y) { - destCtx.translate(x, y); - - this.__originalTranslate(x, y); - }; - - ctx.scale = function ctxScale(x, y) { - destCtx.scale(x, y); - - this.__originalScale(x, y); - }; - - ctx.transform = function ctxTransform(a, b, c, d, e, f) { - destCtx.transform(a, b, c, d, e, f); - - this.__originalTransform(a, b, c, d, e, f); - }; - - ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) { - destCtx.setTransform(a, b, c, d, e, f); - - this.__originalSetTransform(a, b, c, d, e, f); - }; - - ctx.resetTransform = function ctxResetTransform() { - destCtx.resetTransform(); - - this.__originalResetTransform(); - }; - - ctx.rotate = function ctxRotate(angle) { - destCtx.rotate(angle); - - this.__originalRotate(angle); - }; - - ctx.clip = function ctxRotate(rule) { - destCtx.clip(rule); - - this.__originalClip(rule); - }; - - ctx.moveTo = function (x, y) { - destCtx.moveTo(x, y); - - this.__originalMoveTo(x, y); - }; - - ctx.lineTo = function (x, y) { - destCtx.lineTo(x, y); - - this.__originalLineTo(x, y); - }; - - ctx.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) { - destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); - - this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); - }; - - ctx.rect = function (x, y, width, height) { - destCtx.rect(x, y, width, height); - - this.__originalRect(x, y, width, height); - }; - - ctx.closePath = function () { - destCtx.closePath(); - - this.__originalClosePath(); - }; - - ctx.beginPath = function () { - destCtx.beginPath(); - - this.__originalBeginPath(); - }; -} - -function addContextCurrentTransform(ctx) { - if (ctx.mozCurrentTransform) { - return; - } - - ctx._originalSave = ctx.save; - ctx._originalRestore = ctx.restore; - ctx._originalRotate = ctx.rotate; - ctx._originalScale = ctx.scale; - ctx._originalTranslate = ctx.translate; - ctx._originalTransform = ctx.transform; - ctx._originalSetTransform = ctx.setTransform; - ctx._originalResetTransform = ctx.resetTransform; - ctx._transformMatrix = ctx._transformMatrix || [1, 0, 0, 1, 0, 0]; - ctx._transformStack = []; - - try { - const desc = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(ctx), "lineWidth"); - ctx._setLineWidth = desc.set; - ctx._getLineWidth = desc.get; - Object.defineProperty(ctx, "lineWidth", { - set: function setLineWidth(width) { - this._setLineWidth(width * LINEWIDTH_SCALE_FACTOR); - }, - get: function getLineWidth() { - return this._getLineWidth(); - } - }); - } catch (_) {} - - Object.defineProperty(ctx, "mozCurrentTransform", { - get: function getCurrentTransform() { - return this._transformMatrix; - } - }); - Object.defineProperty(ctx, "mozCurrentTransformInverse", { - get: function getCurrentTransformInverse() { - const [a, b, c, d, e, f] = this._transformMatrix; - const ad_bc = a * d - b * c; - const bc_ad = b * c - a * d; - return [d / ad_bc, b / bc_ad, c / bc_ad, a / ad_bc, (d * e - c * f) / bc_ad, (b * e - a * f) / ad_bc]; - } - }); - - ctx.save = function ctxSave() { - const old = this._transformMatrix; - - this._transformStack.push(old); - - this._transformMatrix = old.slice(0, 6); - - this._originalSave(); - }; - - ctx.restore = function ctxRestore() { - const prev = this._transformStack.pop(); - - if (prev) { - this._transformMatrix = prev; - - this._originalRestore(); - } - }; - - ctx.translate = function ctxTranslate(x, y) { - const m = this._transformMatrix; - m[4] = m[0] * x + m[2] * y + m[4]; - m[5] = m[1] * x + m[3] * y + m[5]; - - this._originalTranslate(x, y); - }; - - ctx.scale = function ctxScale(x, y) { - const m = this._transformMatrix; - m[0] *= x; - m[1] *= x; - m[2] *= y; - m[3] *= y; - - this._originalScale(x, y); - }; - - ctx.transform = function ctxTransform(a, b, c, d, e, f) { - const m = this._transformMatrix; - this._transformMatrix = [m[0] * a + m[2] * b, m[1] * a + m[3] * b, m[0] * c + m[2] * d, m[1] * c + m[3] * d, m[0] * e + m[2] * f + m[4], m[1] * e + m[3] * f + m[5]]; - - ctx._originalTransform(a, b, c, d, e, f); - }; - - ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) { - this._transformMatrix = [a, b, c, d, e, f]; - - ctx._originalSetTransform(a, b, c, d, e, f); - }; - - ctx.resetTransform = function ctxResetTransform() { - this._transformMatrix = [1, 0, 0, 1, 0, 0]; - - ctx._originalResetTransform(); - }; - - ctx.rotate = function ctxRotate(angle) { - const cosValue = Math.cos(angle); - const sinValue = Math.sin(angle); - const m = this._transformMatrix; - this._transformMatrix = [m[0] * cosValue + m[2] * sinValue, m[1] * cosValue + m[3] * sinValue, m[0] * -sinValue + m[2] * cosValue, m[1] * -sinValue + m[3] * cosValue, m[4], m[5]]; - - this._originalRotate(angle); - }; -} - -class CachedCanvases { - constructor(canvasFactory) { - this.canvasFactory = canvasFactory; - this.cache = Object.create(null); - } - - getCanvas(id, width, height, trackTransform) { - let canvasEntry; - - if (this.cache[id] !== undefined) { - canvasEntry = this.cache[id]; - this.canvasFactory.reset(canvasEntry, width, height); - canvasEntry.context.setTransform(1, 0, 0, 1, 0, 0); - } else { - canvasEntry = this.canvasFactory.create(width, height); - this.cache[id] = canvasEntry; - } - - if (trackTransform) { - addContextCurrentTransform(canvasEntry.context); - } - - return canvasEntry; - } - - clear() { - for (const id in this.cache) { - const canvasEntry = this.cache[id]; - this.canvasFactory.destroy(canvasEntry); - delete this.cache[id]; - } - } - -} - -function compileType3Glyph(imgData) { - const POINT_TO_PROCESS_LIMIT = 1000; - const POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]); - const width = imgData.width, - height = imgData.height, - width1 = width + 1; - let i, ii, j, j0; - const points = new Uint8Array(width1 * (height + 1)); - const lineSize = width + 7 & ~7, - data0 = imgData.data; - const data = new Uint8Array(lineSize * height); - let pos = 0; - - for (i = 0, ii = data0.length; i < ii; i++) { - const elem = data0[i]; - let mask = 128; - - while (mask > 0) { - data[pos++] = elem & mask ? 0 : 255; - mask >>= 1; - } - } - - let count = 0; - pos = 0; - - if (data[pos] !== 0) { - points[0] = 1; - ++count; - } - - for (j = 1; j < width; j++) { - if (data[pos] !== data[pos + 1]) { - points[j] = data[pos] ? 2 : 1; - ++count; - } - - pos++; - } - - if (data[pos] !== 0) { - points[j] = 2; - ++count; - } - - for (i = 1; i < height; i++) { - pos = i * lineSize; - j0 = i * width1; - - if (data[pos - lineSize] !== data[pos]) { - points[j0] = data[pos] ? 1 : 8; - ++count; - } - - let sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0); - - for (j = 1; j < width; j++) { - sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0); - - if (POINT_TYPES[sum]) { - points[j0 + j] = POINT_TYPES[sum]; - ++count; - } - - pos++; - } - - if (data[pos - lineSize] !== data[pos]) { - points[j0 + j] = data[pos] ? 2 : 4; - ++count; - } - - if (count > POINT_TO_PROCESS_LIMIT) { - return null; - } - } - - pos = lineSize * (height - 1); - j0 = i * width1; - - if (data[pos] !== 0) { - points[j0] = 8; - ++count; - } - - for (j = 1; j < width; j++) { - if (data[pos] !== data[pos + 1]) { - points[j0 + j] = data[pos] ? 4 : 8; - ++count; - } - - pos++; - } - - if (data[pos] !== 0) { - points[j0 + j] = 4; - ++count; - } - - if (count > POINT_TO_PROCESS_LIMIT) { - return null; - } - - const steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]); - const outlines = []; - - for (i = 0; count && i <= height; i++) { - let p = i * width1; - const end = p + width; - - while (p < end && !points[p]) { - p++; - } - - if (p === end) { - continue; - } - - const coords = [p % width1, i]; - const p0 = p; - let type = points[p]; - - do { - const step = steps[type]; - - do { - p += step; - } while (!points[p]); - - const pp = points[p]; - - if (pp !== 5 && pp !== 10) { - type = pp; - points[p] = 0; - } else { - type = pp & 0x33 * type >> 4; - points[p] &= type >> 2 | type << 2; - } - - coords.push(p % width1, p / width1 | 0); - - if (!points[p]) { - --count; - } - } while (p0 !== p); - - outlines.push(coords); - --i; - } - - const drawOutline = function (c) { - c.save(); - c.scale(1 / width, -1 / height); - c.translate(0, -height); - c.beginPath(); - - for (let k = 0, kk = outlines.length; k < kk; k++) { - const o = outlines[k]; - c.moveTo(o[0], o[1]); - - for (let l = 2, ll = o.length; l < ll; l += 2) { - c.lineTo(o[l], o[l + 1]); - } - } - - c.fill(); - c.beginPath(); - c.restore(); - }; - - return drawOutline; -} - -class CanvasExtraState { - constructor(width, height) { - this.alphaIsShape = false; - this.fontSize = 0; - this.fontSizeScale = 1; - this.textMatrix = _util.IDENTITY_MATRIX; - this.textMatrixScale = 1; - this.fontMatrix = _util.FONT_IDENTITY_MATRIX; - this.leading = 0; - this.x = 0; - this.y = 0; - this.lineX = 0; - this.lineY = 0; - this.charSpacing = 0; - this.wordSpacing = 0; - this.textHScale = 1; - this.textRenderingMode = _util.TextRenderingMode.FILL; - this.textRise = 0; - this.fillColor = "#000000"; - this.strokeColor = "#000000"; - this.patternFill = false; - this.fillAlpha = 1; - this.strokeAlpha = 1; - this.lineWidth = 1; - this.activeSMask = null; - this.transferMaps = null; - this.startNewPathAndClipBox([0, 0, width, height]); - } - - clone() { - const clone = Object.create(this); - clone.clipBox = this.clipBox.slice(); - return clone; - } - - setCurrentPoint(x, y) { - this.x = x; - this.y = y; - } - - updatePathMinMax(transform, x, y) { - [x, y] = _util.Util.applyTransform([x, y], transform); - this.minX = Math.min(this.minX, x); - this.minY = Math.min(this.minY, y); - this.maxX = Math.max(this.maxX, x); - this.maxY = Math.max(this.maxY, y); - } - - updateCurvePathMinMax(transform, x0, y0, x1, y1, x2, y2, x3, y3) { - const box = _util.Util.bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3); - - this.updatePathMinMax(transform, box[0], box[1]); - this.updatePathMinMax(transform, box[2], box[3]); - } - - getPathBoundingBox(pathType = _pattern_helper.PathType.FILL, transform = null) { - const box = [this.minX, this.minY, this.maxX, this.maxY]; - - if (pathType === _pattern_helper.PathType.STROKE) { - if (!transform) { - (0, _util.unreachable)("Stroke bounding box must include transform."); - } - - const scale = _util.Util.singularValueDecompose2dScale(transform); - - const xStrokePad = scale[0] * this.lineWidth / 2; - const yStrokePad = scale[1] * this.lineWidth / 2; - box[0] -= xStrokePad; - box[1] -= yStrokePad; - box[2] += xStrokePad; - box[3] += yStrokePad; - } - - return box; - } - - updateClipFromPath() { - const intersect = _util.Util.intersect(this.clipBox, this.getPathBoundingBox()); - - this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]); - } - - startNewPathAndClipBox(box) { - this.clipBox = box; - this.minX = Infinity; - this.minY = Infinity; - this.maxX = 0; - this.maxY = 0; - } - - getClippedPathBoundingBox(pathType = _pattern_helper.PathType.FILL, transform = null) { - return _util.Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform)); - } - -} - -function putBinaryImageData(ctx, imgData, transferMaps = null) { - if (typeof ImageData !== "undefined" && imgData instanceof ImageData) { - ctx.putImageData(imgData, 0, 0); - return; - } - - const height = imgData.height, - width = imgData.width; - const partialChunkHeight = height % FULL_CHUNK_HEIGHT; - const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; - const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; - const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); - let srcPos = 0, - destPos; - const src = imgData.data; - const dest = chunkImgData.data; - let i, j, thisChunkHeight, elemsInThisChunk; - let transferMapRed, transferMapGreen, transferMapBlue, transferMapGray; - - if (transferMaps) { - switch (transferMaps.length) { - case 1: - transferMapRed = transferMaps[0]; - transferMapGreen = transferMaps[0]; - transferMapBlue = transferMaps[0]; - transferMapGray = transferMaps[0]; - break; - - case 4: - transferMapRed = transferMaps[0]; - transferMapGreen = transferMaps[1]; - transferMapBlue = transferMaps[2]; - transferMapGray = transferMaps[3]; - break; - } - } - - if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) { - const srcLength = src.byteLength; - const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2); - const dest32DataLength = dest32.length; - const fullSrcDiff = width + 7 >> 3; - let white = 0xffffffff; - let black = _util.IsLittleEndianCached.value ? 0xff000000 : 0x000000ff; - - if (transferMapGray) { - if (transferMapGray[0] === 0xff && transferMapGray[0xff] === 0) { - [white, black] = [black, white]; - } - } - - for (i = 0; i < totalChunks; i++) { - thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; - destPos = 0; - - for (j = 0; j < thisChunkHeight; j++) { - const srcDiff = srcLength - srcPos; - let k = 0; - const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7; - const kEndUnrolled = kEnd & ~7; - let mask = 0; - let srcByte = 0; - - for (; k < kEndUnrolled; k += 8) { - srcByte = src[srcPos++]; - dest32[destPos++] = srcByte & 128 ? white : black; - dest32[destPos++] = srcByte & 64 ? white : black; - dest32[destPos++] = srcByte & 32 ? white : black; - dest32[destPos++] = srcByte & 16 ? white : black; - dest32[destPos++] = srcByte & 8 ? white : black; - dest32[destPos++] = srcByte & 4 ? white : black; - dest32[destPos++] = srcByte & 2 ? white : black; - dest32[destPos++] = srcByte & 1 ? white : black; - } - - for (; k < kEnd; k++) { - if (mask === 0) { - srcByte = src[srcPos++]; - mask = 128; - } - - dest32[destPos++] = srcByte & mask ? white : black; - mask >>= 1; - } - } - - while (destPos < dest32DataLength) { - dest32[destPos++] = 0; - } - - ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); - } - } else if (imgData.kind === _util.ImageKind.RGBA_32BPP) { - const hasTransferMaps = !!(transferMapRed || transferMapGreen || transferMapBlue); - j = 0; - elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4; - - for (i = 0; i < fullChunks; i++) { - dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); - srcPos += elemsInThisChunk; - - if (hasTransferMaps) { - for (let k = 0; k < elemsInThisChunk; k += 4) { - if (transferMapRed) { - dest[k + 0] = transferMapRed[dest[k + 0]]; - } - - if (transferMapGreen) { - dest[k + 1] = transferMapGreen[dest[k + 1]]; - } - - if (transferMapBlue) { - dest[k + 2] = transferMapBlue[dest[k + 2]]; - } - } - } - - ctx.putImageData(chunkImgData, 0, j); - j += FULL_CHUNK_HEIGHT; - } - - if (i < totalChunks) { - elemsInThisChunk = width * partialChunkHeight * 4; - dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); - - if (hasTransferMaps) { - for (let k = 0; k < elemsInThisChunk; k += 4) { - if (transferMapRed) { - dest[k + 0] = transferMapRed[dest[k + 0]]; - } - - if (transferMapGreen) { - dest[k + 1] = transferMapGreen[dest[k + 1]]; - } - - if (transferMapBlue) { - dest[k + 2] = transferMapBlue[dest[k + 2]]; - } - } - } - - ctx.putImageData(chunkImgData, 0, j); - } - } else if (imgData.kind === _util.ImageKind.RGB_24BPP) { - const hasTransferMaps = !!(transferMapRed || transferMapGreen || transferMapBlue); - thisChunkHeight = FULL_CHUNK_HEIGHT; - elemsInThisChunk = width * thisChunkHeight; - - for (i = 0; i < totalChunks; i++) { - if (i >= fullChunks) { - thisChunkHeight = partialChunkHeight; - elemsInThisChunk = width * thisChunkHeight; - } - - destPos = 0; - - for (j = elemsInThisChunk; j--;) { - dest[destPos++] = src[srcPos++]; - dest[destPos++] = src[srcPos++]; - dest[destPos++] = src[srcPos++]; - dest[destPos++] = 255; - } - - if (hasTransferMaps) { - for (let k = 0; k < destPos; k += 4) { - if (transferMapRed) { - dest[k + 0] = transferMapRed[dest[k + 0]]; - } - - if (transferMapGreen) { - dest[k + 1] = transferMapGreen[dest[k + 1]]; - } - - if (transferMapBlue) { - dest[k + 2] = transferMapBlue[dest[k + 2]]; - } - } - } - - ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); - } - } else { - throw new Error(`bad image kind: ${imgData.kind}`); - } -} - -function putBinaryImageMask(ctx, imgData) { - const height = imgData.height, - width = imgData.width; - const partialChunkHeight = height % FULL_CHUNK_HEIGHT; - const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; - const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; - const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); - let srcPos = 0; - const src = imgData.data; - const dest = chunkImgData.data; - - for (let i = 0; i < totalChunks; i++) { - const thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; - let destPos = 3; - - for (let j = 0; j < thisChunkHeight; j++) { - let elem, - mask = 0; - - for (let k = 0; k < width; k++) { - if (!mask) { - elem = src[srcPos++]; - mask = 128; - } - - dest[destPos] = elem & mask ? 0 : 255; - destPos += 4; - mask >>= 1; - } - } - - ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); - } -} - -function copyCtxState(sourceCtx, destCtx) { - const properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font"]; - - for (let i = 0, ii = properties.length; i < ii; i++) { - const property = properties[i]; - - if (sourceCtx[property] !== undefined) { - destCtx[property] = sourceCtx[property]; - } - } - - if (sourceCtx.setLineDash !== undefined) { - destCtx.setLineDash(sourceCtx.getLineDash()); - destCtx.lineDashOffset = sourceCtx.lineDashOffset; - } -} - -function resetCtxToDefault(ctx) { - ctx.strokeStyle = "#000000"; - ctx.fillStyle = "#000000"; - ctx.fillRule = "nonzero"; - ctx.globalAlpha = 1; - ctx.lineWidth = 1; - ctx.lineCap = "butt"; - ctx.lineJoin = "miter"; - ctx.miterLimit = 10; - ctx.globalCompositeOperation = "source-over"; - ctx.font = "10px sans-serif"; - - if (ctx.setLineDash !== undefined) { - ctx.setLineDash([]); - ctx.lineDashOffset = 0; - } -} - -function composeSMaskBackdrop(bytes, r0, g0, b0) { - const length = bytes.length; - - for (let i = 3; i < length; i += 4) { - const alpha = bytes[i]; - - if (alpha === 0) { - bytes[i - 3] = r0; - bytes[i - 2] = g0; - bytes[i - 1] = b0; - } else if (alpha < 255) { - const alpha_ = 255 - alpha; - bytes[i - 3] = bytes[i - 3] * alpha + r0 * alpha_ >> 8; - bytes[i - 2] = bytes[i - 2] * alpha + g0 * alpha_ >> 8; - bytes[i - 1] = bytes[i - 1] * alpha + b0 * alpha_ >> 8; - } - } -} - -function composeSMaskAlpha(maskData, layerData, transferMap) { - const length = maskData.length; - const scale = 1 / 255; - - for (let i = 3; i < length; i += 4) { - const alpha = transferMap ? transferMap[maskData[i]] : maskData[i]; - layerData[i] = layerData[i] * alpha * scale | 0; - } -} - -function composeSMaskLuminosity(maskData, layerData, transferMap) { - const length = maskData.length; - - for (let i = 3; i < length; i += 4) { - const y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28; - layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16; - } -} - -function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap, layerOffsetX, layerOffsetY, maskOffsetX, maskOffsetY) { - const hasBackdrop = !!backdrop; - const r0 = hasBackdrop ? backdrop[0] : 0; - const g0 = hasBackdrop ? backdrop[1] : 0; - const b0 = hasBackdrop ? backdrop[2] : 0; - let composeFn; - - if (subtype === "Luminosity") { - composeFn = composeSMaskLuminosity; - } else { - composeFn = composeSMaskAlpha; - } - - const PIXELS_TO_PROCESS = 1048576; - const chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width)); - - for (let row = 0; row < height; row += chunkSize) { - const chunkHeight = Math.min(chunkSize, height - row); - const maskData = maskCtx.getImageData(layerOffsetX - maskOffsetX, row + (layerOffsetY - maskOffsetY), width, chunkHeight); - const layerData = layerCtx.getImageData(layerOffsetX, row + layerOffsetY, width, chunkHeight); - - if (hasBackdrop) { - composeSMaskBackdrop(maskData.data, r0, g0, b0); - } - - composeFn(maskData.data, layerData.data, transferMap); - layerCtx.putImageData(layerData, layerOffsetX, row + layerOffsetY); - } -} - -function composeSMask(ctx, smask, layerCtx, layerBox) { - const layerOffsetX = layerBox[0]; - const layerOffsetY = layerBox[1]; - const layerWidth = layerBox[2] - layerOffsetX; - const layerHeight = layerBox[3] - layerOffsetY; - - if (layerWidth === 0 || layerHeight === 0) { - return; - } - - genericComposeSMask(smask.context, layerCtx, layerWidth, layerHeight, smask.subtype, smask.backdrop, smask.transferMap, layerOffsetX, layerOffsetY, smask.offsetX, smask.offsetY); - ctx.save(); - ctx.globalAlpha = 1; - ctx.globalCompositeOperation = "source-over"; - ctx.setTransform(1, 0, 0, 1, 0, 0); - ctx.drawImage(layerCtx.canvas, 0, 0); - ctx.restore(); -} - -function getImageSmoothingEnabled(transform, interpolate) { - const scale = _util.Util.singularValueDecompose2dScale(transform); - - scale[0] = Math.fround(scale[0]); - scale[1] = Math.fround(scale[1]); - const actualScale = Math.fround((globalThis.devicePixelRatio || 1) * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS); - - if (interpolate !== undefined) { - return interpolate; - } else if (scale[0] <= actualScale || scale[1] <= actualScale) { - return true; - } - - return false; -} - -const LINE_CAP_STYLES = ["butt", "round", "square"]; -const LINE_JOIN_STYLES = ["miter", "round", "bevel"]; -const NORMAL_CLIP = {}; -const EO_CLIP = {}; - -class CanvasGraphics { - constructor(canvasCtx, commonObjs, objs, canvasFactory, imageLayer, optionalContentConfig, annotationCanvasMap) { - this.ctx = canvasCtx; - this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); - this.stateStack = []; - this.pendingClip = null; - this.pendingEOFill = false; - this.res = null; - this.xobjs = null; - this.commonObjs = commonObjs; - this.objs = objs; - this.canvasFactory = canvasFactory; - this.imageLayer = imageLayer; - this.groupStack = []; - this.processingType3 = null; - this.baseTransform = null; - this.baseTransformStack = []; - this.groupLevel = 0; - this.smaskStack = []; - this.smaskCounter = 0; - this.tempSMask = null; - this.suspendedCtx = null; - this.contentVisible = true; - this.markedContentStack = []; - this.optionalContentConfig = optionalContentConfig; - this.cachedCanvases = new CachedCanvases(this.canvasFactory); - this.cachedPatterns = new Map(); - this.annotationCanvasMap = annotationCanvasMap; - this.viewportScale = 1; - this.outputScaleX = 1; - this.outputScaleY = 1; - - if (canvasCtx) { - addContextCurrentTransform(canvasCtx); - } - - this._cachedGetSinglePixelWidth = null; - } - - beginDrawing({ - transform, - viewport, - transparency = false, - background = null - }) { - const width = this.ctx.canvas.width; - const height = this.ctx.canvas.height; - this.ctx.save(); - this.ctx.fillStyle = background || "rgb(255, 255, 255)"; - this.ctx.fillRect(0, 0, width, height); - this.ctx.restore(); - - if (transparency) { - const transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height, true); - this.compositeCtx = this.ctx; - this.transparentCanvas = transparentCanvas.canvas; - this.ctx = transparentCanvas.context; - this.ctx.save(); - this.ctx.transform.apply(this.ctx, this.compositeCtx.mozCurrentTransform); - } - - this.ctx.save(); - resetCtxToDefault(this.ctx); - - if (transform) { - this.ctx.transform.apply(this.ctx, transform); - this.outputScaleX = transform[0]; - this.outputScaleY = transform[0]; - } - - this.ctx.transform.apply(this.ctx, viewport.transform); - this.viewportScale = viewport.scale; - this.baseTransform = this.ctx.mozCurrentTransform.slice(); - this._combinedScaleFactor = Math.hypot(this.baseTransform[0], this.baseTransform[2]); - - if (this.imageLayer) { - this.imageLayer.beginLayout(); - } - } - - executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) { - const argsArray = operatorList.argsArray; - const fnArray = operatorList.fnArray; - let i = executionStartIdx || 0; - const argsArrayLen = argsArray.length; - - if (argsArrayLen === i) { - return i; - } - - const chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function"; - const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0; - let steps = 0; - const commonObjs = this.commonObjs; - const objs = this.objs; - let fnId; - - while (true) { - if (stepper !== undefined && i === stepper.nextBreakPoint) { - stepper.breakIt(i, continueCallback); - return i; - } - - fnId = fnArray[i]; - - if (fnId !== _util.OPS.dependency) { - this[fnId].apply(this, argsArray[i]); - } else { - for (const depObjId of argsArray[i]) { - const objsPool = depObjId.startsWith("g_") ? commonObjs : objs; - - if (!objsPool.has(depObjId)) { - objsPool.get(depObjId, continueCallback); - return i; - } - } - } - - i++; - - if (i === argsArrayLen) { - return i; - } - - if (chunkOperations && ++steps > EXECUTION_STEPS) { - if (Date.now() > endTime) { - continueCallback(); - return i; - } - - steps = 0; - } - } - } - - endDrawing() { - while (this.stateStack.length || this.current.activeSMask !== null) { - this.restore(); - } - - this.ctx.restore(); - - if (this.transparentCanvas) { - this.ctx = this.compositeCtx; - this.ctx.save(); - this.ctx.setTransform(1, 0, 0, 1, 0, 0); - this.ctx.drawImage(this.transparentCanvas, 0, 0); - this.ctx.restore(); - this.transparentCanvas = null; - } - - this.cachedCanvases.clear(); - this.cachedPatterns.clear(); - - if (this.imageLayer) { - this.imageLayer.endLayout(); - } - } - - _scaleImage(img, inverseTransform) { - const width = img.width; - const height = img.height; - let widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1); - let heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1); - let paintWidth = width, - paintHeight = height; - let tmpCanvasId = "prescale1"; - let tmpCanvas, tmpCtx; - - while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) { - let newWidth = paintWidth, - newHeight = paintHeight; - - if (widthScale > 2 && paintWidth > 1) { - newWidth = Math.ceil(paintWidth / 2); - widthScale /= paintWidth / newWidth; - } - - if (heightScale > 2 && paintHeight > 1) { - newHeight = Math.ceil(paintHeight / 2); - heightScale /= paintHeight / newHeight; - } - - tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight); - tmpCtx = tmpCanvas.context; - tmpCtx.clearRect(0, 0, newWidth, newHeight); - tmpCtx.drawImage(img, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight); - img = tmpCanvas.canvas; - paintWidth = newWidth; - paintHeight = newHeight; - tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1"; - } - - return { - img, - paintWidth, - paintHeight - }; - } - - _createMaskCanvas(img) { - const ctx = this.ctx; - const width = img.width, - height = img.height; - const fillColor = this.current.fillColor; - const isPatternFill = this.current.patternFill; - const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); - const maskCtx = maskCanvas.context; - putBinaryImageMask(maskCtx, img); - const objToCanvas = ctx.mozCurrentTransform; - - let maskToCanvas = _util.Util.transform(objToCanvas, [1 / width, 0, 0, -1 / height, 0, 0]); - - maskToCanvas = _util.Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]); - - const cord1 = _util.Util.applyTransform([0, 0], maskToCanvas); - - const cord2 = _util.Util.applyTransform([width, height], maskToCanvas); - - const rect = _util.Util.normalizeRect([cord1[0], cord1[1], cord2[0], cord2[1]]); - - const drawnWidth = Math.ceil(rect[2] - rect[0]); - const drawnHeight = Math.ceil(rect[3] - rect[1]); - const fillCanvas = this.cachedCanvases.getCanvas("fillCanvas", drawnWidth, drawnHeight, true); - const fillCtx = fillCanvas.context; - const offsetX = Math.min(cord1[0], cord2[0]); - const offsetY = Math.min(cord1[1], cord2[1]); - fillCtx.translate(-offsetX, -offsetY); - fillCtx.transform.apply(fillCtx, maskToCanvas); - - const scaled = this._scaleImage(maskCanvas.canvas, fillCtx.mozCurrentTransformInverse); - - fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled(fillCtx.mozCurrentTransform, img.interpolate); - fillCtx.drawImage(scaled.img, 0, 0, scaled.img.width, scaled.img.height, 0, 0, width, height); - fillCtx.globalCompositeOperation = "source-in"; - - const inverse = _util.Util.transform(fillCtx.mozCurrentTransformInverse, [1, 0, 0, 1, -offsetX, -offsetY]); - - fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, _pattern_helper.PathType.FILL) : fillColor; - fillCtx.fillRect(0, 0, width, height); - return { - canvas: fillCanvas.canvas, - offsetX: Math.round(offsetX), - offsetY: Math.round(offsetY) - }; - } - - setLineWidth(width) { - this.current.lineWidth = width; - this.ctx.lineWidth = width; - } - - setLineCap(style) { - this.ctx.lineCap = LINE_CAP_STYLES[style]; - } - - setLineJoin(style) { - this.ctx.lineJoin = LINE_JOIN_STYLES[style]; - } - - setMiterLimit(limit) { - this.ctx.miterLimit = limit; - } - - setDash(dashArray, dashPhase) { - const ctx = this.ctx; - - if (ctx.setLineDash !== undefined) { - ctx.setLineDash(dashArray); - ctx.lineDashOffset = dashPhase; - } - } - - setRenderingIntent(intent) {} - - setFlatness(flatness) {} - - setGState(states) { - for (let i = 0, ii = states.length; i < ii; i++) { - const state = states[i]; - const key = state[0]; - const value = state[1]; - - switch (key) { - case "LW": - this.setLineWidth(value); - break; - - case "LC": - this.setLineCap(value); - break; - - case "LJ": - this.setLineJoin(value); - break; - - case "ML": - this.setMiterLimit(value); - break; - - case "D": - this.setDash(value[0], value[1]); - break; - - case "RI": - this.setRenderingIntent(value); - break; - - case "FL": - this.setFlatness(value); - break; - - case "Font": - this.setFont(value[0], value[1]); - break; - - case "CA": - this.current.strokeAlpha = state[1]; - break; - - case "ca": - this.current.fillAlpha = state[1]; - this.ctx.globalAlpha = state[1]; - break; - - case "BM": - this.ctx.globalCompositeOperation = value; - break; - - case "SMask": - this.current.activeSMask = value ? this.tempSMask : null; - this.tempSMask = null; - this.checkSMaskState(); - break; - - case "TR": - this.current.transferMaps = value; - } - } - } - - checkSMaskState() { - const inSMaskMode = !!this.suspendedCtx; - - if (this.current.activeSMask && !inSMaskMode) { - this.beginSMaskMode(); - } else if (!this.current.activeSMask && inSMaskMode) { - this.endSMaskMode(); - } - } - - beginSMaskMode() { - if (this.suspendedCtx) { - throw new Error("beginSMaskMode called while already in smask mode"); - } - - const drawnWidth = this.ctx.canvas.width; - const drawnHeight = this.ctx.canvas.height; - const cacheId = "smaskGroupAt" + this.groupLevel; - const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true); - this.suspendedCtx = this.ctx; - this.ctx = scratchCanvas.context; - const ctx = this.ctx; - ctx.setTransform.apply(ctx, this.suspendedCtx.mozCurrentTransform); - copyCtxState(this.suspendedCtx, ctx); - mirrorContextOperations(ctx, this.suspendedCtx); - this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); - } - - endSMaskMode() { - if (!this.suspendedCtx) { - throw new Error("endSMaskMode called while not in smask mode"); - } - - this.ctx._removeMirroring(); - - copyCtxState(this.ctx, this.suspendedCtx); - this.ctx = this.suspendedCtx; - this.current.activeSMask = null; - this.suspendedCtx = null; - } - - compose(dirtyBox) { - if (!this.current.activeSMask) { - return; - } - - if (!dirtyBox) { - dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height]; - } else { - dirtyBox[0] = Math.floor(dirtyBox[0]); - dirtyBox[1] = Math.floor(dirtyBox[1]); - dirtyBox[2] = Math.ceil(dirtyBox[2]); - dirtyBox[3] = Math.ceil(dirtyBox[3]); - } - - const smask = this.current.activeSMask; - const suspendedCtx = this.suspendedCtx; - composeSMask(suspendedCtx, smask, this.ctx, dirtyBox); - this.ctx.save(); - this.ctx.setTransform(1, 0, 0, 1, 0, 0); - this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height); - this.ctx.restore(); - } - - save() { - this.ctx.save(); - const old = this.current; - this.stateStack.push(old); - this.current = old.clone(); - } - - restore() { - if (this.stateStack.length === 0 && this.current.activeSMask) { - this.endSMaskMode(); - } - - if (this.stateStack.length !== 0) { - this.current = this.stateStack.pop(); - this.ctx.restore(); - this.checkSMaskState(); - this.pendingClip = null; - this._cachedGetSinglePixelWidth = null; - } - } - - transform(a, b, c, d, e, f) { - this.ctx.transform(a, b, c, d, e, f); - this._cachedGetSinglePixelWidth = null; - } - - constructPath(ops, args) { - const ctx = this.ctx; - const current = this.current; - let x = current.x, - y = current.y; - let startX, startY; - - for (let i = 0, j = 0, ii = ops.length; i < ii; i++) { - switch (ops[i] | 0) { - case _util.OPS.rectangle: - x = args[j++]; - y = args[j++]; - const width = args[j++]; - const height = args[j++]; - const xw = x + width; - const yh = y + height; - ctx.moveTo(x, y); - - if (width === 0 || height === 0) { - ctx.lineTo(xw, yh); - } else { - ctx.lineTo(xw, y); - ctx.lineTo(xw, yh); - ctx.lineTo(x, yh); - } - - current.updatePathMinMax(ctx.mozCurrentTransform, x, y); - current.updatePathMinMax(ctx.mozCurrentTransform, xw, yh); - ctx.closePath(); - break; - - case _util.OPS.moveTo: - x = args[j++]; - y = args[j++]; - ctx.moveTo(x, y); - current.updatePathMinMax(ctx.mozCurrentTransform, x, y); - break; - - case _util.OPS.lineTo: - x = args[j++]; - y = args[j++]; - ctx.lineTo(x, y); - current.updatePathMinMax(ctx.mozCurrentTransform, x, y); - break; - - case _util.OPS.curveTo: - startX = x; - startY = y; - x = args[j + 4]; - y = args[j + 5]; - ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y); - current.updateCurvePathMinMax(ctx.mozCurrentTransform, startX, startY, args[j], args[j + 1], args[j + 2], args[j + 3], x, y); - j += 6; - break; - - case _util.OPS.curveTo2: - startX = x; - startY = y; - ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]); - current.updateCurvePathMinMax(ctx.mozCurrentTransform, startX, startY, x, y, args[j], args[j + 1], args[j + 2], args[j + 3]); - x = args[j + 2]; - y = args[j + 3]; - j += 4; - break; - - case _util.OPS.curveTo3: - startX = x; - startY = y; - x = args[j + 2]; - y = args[j + 3]; - ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y); - current.updateCurvePathMinMax(ctx.mozCurrentTransform, startX, startY, args[j], args[j + 1], x, y, x, y); - j += 4; - break; - - case _util.OPS.closePath: - ctx.closePath(); - break; - } - } - - current.setCurrentPoint(x, y); - } - - closePath() { - this.ctx.closePath(); - } - - stroke(consumePath) { - consumePath = typeof consumePath !== "undefined" ? consumePath : true; - const ctx = this.ctx; - const strokeColor = this.current.strokeColor; - ctx.globalAlpha = this.current.strokeAlpha; - - if (this.contentVisible) { - if (typeof strokeColor === "object" && strokeColor?.getPattern) { - const lineWidth = this.getSinglePixelWidth(); - ctx.save(); - ctx.strokeStyle = strokeColor.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.STROKE); - ctx.lineWidth = Math.max(lineWidth, this.current.lineWidth); - ctx.stroke(); - ctx.restore(); - } else { - const lineWidth = this.getSinglePixelWidth(); - - if (lineWidth < 0 && -lineWidth >= this.current.lineWidth) { - ctx.save(); - ctx.resetTransform(); - ctx.lineWidth = Math.round(this._combinedScaleFactor); - ctx.stroke(); - ctx.restore(); - } else { - ctx.lineWidth = Math.max(lineWidth, this.current.lineWidth); - ctx.stroke(); - } - } - } - - if (consumePath) { - this.consumePath(this.current.getClippedPathBoundingBox()); - } - - ctx.globalAlpha = this.current.fillAlpha; - } - - closeStroke() { - this.closePath(); - this.stroke(); - } - - fill(consumePath) { - consumePath = typeof consumePath !== "undefined" ? consumePath : true; - const ctx = this.ctx; - const fillColor = this.current.fillColor; - const isPatternFill = this.current.patternFill; - let needRestore = false; - - if (isPatternFill) { - ctx.save(); - ctx.fillStyle = fillColor.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.FILL); - needRestore = true; - } - - const intersect = this.current.getClippedPathBoundingBox(); - - if (this.contentVisible && intersect !== null) { - if (this.pendingEOFill) { - ctx.fill("evenodd"); - this.pendingEOFill = false; - } else { - ctx.fill(); - } - } - - if (needRestore) { - ctx.restore(); - } - - if (consumePath) { - this.consumePath(intersect); - } - } - - eoFill() { - this.pendingEOFill = true; - this.fill(); - } - - fillStroke() { - this.fill(false); - this.stroke(false); - this.consumePath(); - } - - eoFillStroke() { - this.pendingEOFill = true; - this.fillStroke(); - } - - closeFillStroke() { - this.closePath(); - this.fillStroke(); - } - - closeEOFillStroke() { - this.pendingEOFill = true; - this.closePath(); - this.fillStroke(); - } - - endPath() { - this.consumePath(); - } - - clip() { - this.pendingClip = NORMAL_CLIP; - } - - eoClip() { - this.pendingClip = EO_CLIP; - } - - beginText() { - this.current.textMatrix = _util.IDENTITY_MATRIX; - this.current.textMatrixScale = 1; - this.current.x = this.current.lineX = 0; - this.current.y = this.current.lineY = 0; - } - - endText() { - const paths = this.pendingTextPaths; - const ctx = this.ctx; - - if (paths === undefined) { - ctx.beginPath(); - return; - } - - ctx.save(); - ctx.beginPath(); - - for (let i = 0; i < paths.length; i++) { - const path = paths[i]; - ctx.setTransform.apply(ctx, path.transform); - ctx.translate(path.x, path.y); - path.addToPath(ctx, path.fontSize); - } - - ctx.restore(); - ctx.clip(); - ctx.beginPath(); - delete this.pendingTextPaths; - } - - setCharSpacing(spacing) { - this.current.charSpacing = spacing; - } - - setWordSpacing(spacing) { - this.current.wordSpacing = spacing; - } - - setHScale(scale) { - this.current.textHScale = scale / 100; - } - - setLeading(leading) { - this.current.leading = -leading; - } - - setFont(fontRefName, size) { - const fontObj = this.commonObjs.get(fontRefName); - const current = this.current; - - if (!fontObj) { - throw new Error(`Can't find font for ${fontRefName}`); - } - - current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX; - - if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) { - (0, _util.warn)("Invalid font matrix for font " + fontRefName); - } - - if (size < 0) { - size = -size; - current.fontDirection = -1; - } else { - current.fontDirection = 1; - } - - this.current.font = fontObj; - this.current.fontSize = size; - - if (fontObj.isType3Font) { - return; - } - - const name = fontObj.loadedName || "sans-serif"; - let bold = "normal"; - - if (fontObj.black) { - bold = "900"; - } else if (fontObj.bold) { - bold = "bold"; - } - - const italic = fontObj.italic ? "italic" : "normal"; - const typeface = `"${name}", ${fontObj.fallbackName}`; - let browserFontSize = size; - - if (size < MIN_FONT_SIZE) { - browserFontSize = MIN_FONT_SIZE; - } else if (size > MAX_FONT_SIZE) { - browserFontSize = MAX_FONT_SIZE; - } - - this.current.fontSizeScale = size / browserFontSize; - this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`; - } - - setTextRenderingMode(mode) { - this.current.textRenderingMode = mode; - } - - setTextRise(rise) { - this.current.textRise = rise; - } - - moveText(x, y) { - this.current.x = this.current.lineX += x; - this.current.y = this.current.lineY += y; - } - - setLeadingMoveText(x, y) { - this.setLeading(-y); - this.moveText(x, y); - } - - setTextMatrix(a, b, c, d, e, f) { - this.current.textMatrix = [a, b, c, d, e, f]; - this.current.textMatrixScale = Math.hypot(a, b); - this.current.x = this.current.lineX = 0; - this.current.y = this.current.lineY = 0; - } - - nextLine() { - this.moveText(0, this.current.leading); - } - - paintChar(character, x, y, patternTransform, resetLineWidthToOne) { - const ctx = this.ctx; - const current = this.current; - const font = current.font; - const textRenderingMode = current.textRenderingMode; - const fontSize = current.fontSize / current.fontSizeScale; - const fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; - const isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG); - const patternFill = current.patternFill && !font.missingFile; - let addToPath; - - if (font.disableFontFace || isAddToPathSet || patternFill) { - addToPath = font.getPathGenerator(this.commonObjs, character); - } - - if (font.disableFontFace || patternFill) { - ctx.save(); - ctx.translate(x, y); - ctx.beginPath(); - addToPath(ctx, fontSize); - - if (patternTransform) { - ctx.setTransform.apply(ctx, patternTransform); - } - - if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - ctx.fill(); - } - - if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - if (resetLineWidthToOne) { - ctx.resetTransform(); - ctx.lineWidth = Math.round(this._combinedScaleFactor); - } - - ctx.stroke(); - } - - ctx.restore(); - } else { - if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - ctx.fillText(character, x, y); - } - - if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - if (resetLineWidthToOne) { - ctx.save(); - ctx.moveTo(x, y); - ctx.resetTransform(); - ctx.lineWidth = Math.round(this._combinedScaleFactor); - ctx.strokeText(character, 0, 0); - ctx.restore(); - } else { - ctx.strokeText(character, x, y); - } - } - } - - if (isAddToPathSet) { - const paths = this.pendingTextPaths || (this.pendingTextPaths = []); - paths.push({ - transform: ctx.mozCurrentTransform, - x, - y, - fontSize, - addToPath - }); - } - } - - get isFontSubpixelAAEnabled() { - const { - context: ctx - } = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10); - ctx.scale(1.5, 1); - ctx.fillText("I", 0, 10); - const data = ctx.getImageData(0, 0, 10, 10).data; - let enabled = false; - - for (let i = 3; i < data.length; i += 4) { - if (data[i] > 0 && data[i] < 255) { - enabled = true; - break; - } - } - - return (0, _util.shadow)(this, "isFontSubpixelAAEnabled", enabled); - } - - showText(glyphs) { - const current = this.current; - const font = current.font; - - if (font.isType3Font) { - return this.showType3Text(glyphs); - } - - const fontSize = current.fontSize; - - if (fontSize === 0) { - return undefined; - } - - const ctx = this.ctx; - const fontSizeScale = current.fontSizeScale; - const charSpacing = current.charSpacing; - const wordSpacing = current.wordSpacing; - const fontDirection = current.fontDirection; - const textHScale = current.textHScale * fontDirection; - const glyphsLength = glyphs.length; - const vertical = font.vertical; - const spacingDir = vertical ? 1 : -1; - const defaultVMetrics = font.defaultVMetrics; - const widthAdvanceScale = fontSize * current.fontMatrix[0]; - const simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill; - ctx.save(); - ctx.transform.apply(ctx, current.textMatrix); - ctx.translate(current.x, current.y + current.textRise); - - if (fontDirection > 0) { - ctx.scale(textHScale, -1); - } else { - ctx.scale(textHScale, 1); - } - - let patternTransform; - - if (current.patternFill) { - ctx.save(); - const pattern = current.fillColor.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.FILL); - patternTransform = ctx.mozCurrentTransform; - ctx.restore(); - ctx.fillStyle = pattern; - } - - let lineWidth = current.lineWidth; - let resetLineWidthToOne = false; - const scale = current.textMatrixScale; - - if (scale === 0 || lineWidth === 0) { - const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; - - if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - this._cachedGetSinglePixelWidth = null; - lineWidth = this.getSinglePixelWidth(); - resetLineWidthToOne = lineWidth < 0; - } - } else { - lineWidth /= scale; - } - - if (fontSizeScale !== 1.0) { - ctx.scale(fontSizeScale, fontSizeScale); - lineWidth /= fontSizeScale; - } - - ctx.lineWidth = lineWidth; - let x = 0, - i; - - for (i = 0; i < glyphsLength; ++i) { - const glyph = glyphs[i]; - - if ((0, _util.isNum)(glyph)) { - x += spacingDir * glyph * fontSize / 1000; - continue; - } - - let restoreNeeded = false; - const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; - const character = glyph.fontChar; - const accent = glyph.accent; - let scaledX, scaledY; - let width = glyph.width; - - if (vertical) { - const vmetric = glyph.vmetric || defaultVMetrics; - const vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale; - const vy = vmetric[2] * widthAdvanceScale; - width = vmetric ? -vmetric[0] : width; - scaledX = vx / fontSizeScale; - scaledY = (x + vy) / fontSizeScale; - } else { - scaledX = x / fontSizeScale; - scaledY = 0; - } - - if (font.remeasure && width > 0) { - const measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale; - - if (width < measuredWidth && this.isFontSubpixelAAEnabled) { - const characterScaleX = width / measuredWidth; - restoreNeeded = true; - ctx.save(); - ctx.scale(characterScaleX, 1); - scaledX /= characterScaleX; - } else if (width !== measuredWidth) { - scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale; - } - } - - if (this.contentVisible && (glyph.isInFont || font.missingFile)) { - if (simpleFillText && !accent) { - ctx.fillText(character, scaledX, scaledY); - } else { - this.paintChar(character, scaledX, scaledY, patternTransform, resetLineWidthToOne); - - if (accent) { - const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale; - const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale; - this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform, resetLineWidthToOne); - } - } - } - - let charWidth; - - if (vertical) { - charWidth = width * widthAdvanceScale - spacing * fontDirection; - } else { - charWidth = width * widthAdvanceScale + spacing * fontDirection; - } - - x += charWidth; - - if (restoreNeeded) { - ctx.restore(); - } - } - - if (vertical) { - current.y -= x; - } else { - current.x += x * textHScale; - } - - ctx.restore(); - this.compose(); - return undefined; - } - - showType3Text(glyphs) { - const ctx = this.ctx; - const current = this.current; - const font = current.font; - const fontSize = current.fontSize; - const fontDirection = current.fontDirection; - const spacingDir = font.vertical ? 1 : -1; - const charSpacing = current.charSpacing; - const wordSpacing = current.wordSpacing; - const textHScale = current.textHScale * fontDirection; - const fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX; - const glyphsLength = glyphs.length; - const isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE; - let i, glyph, width, spacingLength; - - if (isTextInvisible || fontSize === 0) { - return; - } - - this._cachedGetSinglePixelWidth = null; - ctx.save(); - ctx.transform.apply(ctx, current.textMatrix); - ctx.translate(current.x, current.y); - ctx.scale(textHScale, fontDirection); - - for (i = 0; i < glyphsLength; ++i) { - glyph = glyphs[i]; - - if ((0, _util.isNum)(glyph)) { - spacingLength = spacingDir * glyph * fontSize / 1000; - this.ctx.translate(spacingLength, 0); - current.x += spacingLength * textHScale; - continue; - } - - const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; - const operatorList = font.charProcOperatorList[glyph.operatorListId]; - - if (!operatorList) { - (0, _util.warn)(`Type3 character "${glyph.operatorListId}" is not available.`); - continue; - } - - if (this.contentVisible) { - this.processingType3 = glyph; - this.save(); - ctx.scale(fontSize, fontSize); - ctx.transform.apply(ctx, fontMatrix); - this.executeOperatorList(operatorList); - this.restore(); - } - - const transformed = _util.Util.applyTransform([glyph.width, 0], fontMatrix); - - width = transformed[0] * fontSize + spacing; - ctx.translate(width, 0); - current.x += width * textHScale; - } - - ctx.restore(); - this.processingType3 = null; - } - - setCharWidth(xWidth, yWidth) {} - - setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) { - this.ctx.rect(llx, lly, urx - llx, ury - lly); - this.clip(); - this.endPath(); - } - - getColorN_Pattern(IR) { - let pattern; - - if (IR[0] === "TilingPattern") { - const color = IR[1]; - const baseTransform = this.baseTransform || this.ctx.mozCurrentTransform.slice(); - const canvasGraphicsFactory = { - createCanvasGraphics: ctx => { - return new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory); - } - }; - pattern = new _pattern_helper.TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform); - } else { - pattern = this._getPattern(IR[1], IR[2]); - } - - return pattern; - } - - setStrokeColorN() { - this.current.strokeColor = this.getColorN_Pattern(arguments); - } - - setFillColorN() { - this.current.fillColor = this.getColorN_Pattern(arguments); - this.current.patternFill = true; - } - - setStrokeRGBColor(r, g, b) { - const color = _util.Util.makeHexColor(r, g, b); - - this.ctx.strokeStyle = color; - this.current.strokeColor = color; - } - - setFillRGBColor(r, g, b) { - const color = _util.Util.makeHexColor(r, g, b); - - this.ctx.fillStyle = color; - this.current.fillColor = color; - this.current.patternFill = false; - } - - _getPattern(objId, matrix = null) { - let pattern; - - if (this.cachedPatterns.has(objId)) { - pattern = this.cachedPatterns.get(objId); - } else { - pattern = (0, _pattern_helper.getShadingPattern)(this.objs.get(objId)); - this.cachedPatterns.set(objId, pattern); - } - - if (matrix) { - pattern.matrix = matrix; - } - - return pattern; - } - - shadingFill(objId) { - if (!this.contentVisible) { - return; - } - - const ctx = this.ctx; - this.save(); - - const pattern = this._getPattern(objId); - - ctx.fillStyle = pattern.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.SHADING); - const inv = ctx.mozCurrentTransformInverse; - - if (inv) { - const canvas = ctx.canvas; - const width = canvas.width; - const height = canvas.height; - - const bl = _util.Util.applyTransform([0, 0], inv); - - const br = _util.Util.applyTransform([0, height], inv); - - const ul = _util.Util.applyTransform([width, 0], inv); - - const ur = _util.Util.applyTransform([width, height], inv); - - const x0 = Math.min(bl[0], br[0], ul[0], ur[0]); - const y0 = Math.min(bl[1], br[1], ul[1], ur[1]); - const x1 = Math.max(bl[0], br[0], ul[0], ur[0]); - const y1 = Math.max(bl[1], br[1], ul[1], ur[1]); - this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0); - } else { - this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10); - } - - this.compose(this.current.getClippedPathBoundingBox()); - this.restore(); - } - - beginInlineImage() { - (0, _util.unreachable)("Should not call beginInlineImage"); - } - - beginImageData() { - (0, _util.unreachable)("Should not call beginImageData"); - } - - paintFormXObjectBegin(matrix, bbox) { - if (!this.contentVisible) { - return; - } - - this.save(); - this.baseTransformStack.push(this.baseTransform); - - if (Array.isArray(matrix) && matrix.length === 6) { - this.transform.apply(this, matrix); - } - - this.baseTransform = this.ctx.mozCurrentTransform; - - if (bbox) { - const width = bbox[2] - bbox[0]; - const height = bbox[3] - bbox[1]; - this.ctx.rect(bbox[0], bbox[1], width, height); - this.current.updatePathMinMax(this.ctx.mozCurrentTransform, bbox[0], bbox[1]); - this.current.updatePathMinMax(this.ctx.mozCurrentTransform, bbox[2], bbox[3]); - this.clip(); - this.endPath(); - } - } - - paintFormXObjectEnd() { - if (!this.contentVisible) { - return; - } - - this.restore(); - this.baseTransform = this.baseTransformStack.pop(); - } - - beginGroup(group) { - if (!this.contentVisible) { - return; - } - - this.save(); - const suspendedCtx = this.suspendedCtx; - - if (this.current.activeSMask) { - this.suspendedCtx = null; - this.current.activeSMask = null; - } - - const currentCtx = this.ctx; - - if (!group.isolated) { - (0, _util.info)("TODO: Support non-isolated groups."); - } - - if (group.knockout) { - (0, _util.warn)("Knockout groups not supported."); - } - - const currentTransform = currentCtx.mozCurrentTransform; - - if (group.matrix) { - currentCtx.transform.apply(currentCtx, group.matrix); - } - - if (!group.bbox) { - throw new Error("Bounding box is required."); - } - - let bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, currentCtx.mozCurrentTransform); - - const canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height]; - bounds = _util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0]; - const offsetX = Math.floor(bounds[0]); - const offsetY = Math.floor(bounds[1]); - let drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1); - let drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1); - let scaleX = 1, - scaleY = 1; - - if (drawnWidth > MAX_GROUP_SIZE) { - scaleX = drawnWidth / MAX_GROUP_SIZE; - drawnWidth = MAX_GROUP_SIZE; - } - - if (drawnHeight > MAX_GROUP_SIZE) { - scaleY = drawnHeight / MAX_GROUP_SIZE; - drawnHeight = MAX_GROUP_SIZE; - } - - this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]); - let cacheId = "groupAt" + this.groupLevel; - - if (group.smask) { - cacheId += "_smask_" + this.smaskCounter++ % 2; - } - - const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true); - const groupCtx = scratchCanvas.context; - groupCtx.scale(1 / scaleX, 1 / scaleY); - groupCtx.translate(-offsetX, -offsetY); - groupCtx.transform.apply(groupCtx, currentTransform); - - if (group.smask) { - this.smaskStack.push({ - canvas: scratchCanvas.canvas, - context: groupCtx, - offsetX, - offsetY, - scaleX, - scaleY, - subtype: group.smask.subtype, - backdrop: group.smask.backdrop, - transferMap: group.smask.transferMap || null, - startTransformInverse: null - }); - } else { - currentCtx.setTransform(1, 0, 0, 1, 0, 0); - currentCtx.translate(offsetX, offsetY); - currentCtx.scale(scaleX, scaleY); - currentCtx.save(); - } - - copyCtxState(currentCtx, groupCtx); - this.ctx = groupCtx; - this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); - this.groupStack.push({ - ctx: currentCtx, - suspendedCtx - }); - this.groupLevel++; - } - - endGroup(group) { - if (!this.contentVisible) { - return; - } - - this.groupLevel--; - const groupCtx = this.ctx; - const { - ctx, - suspendedCtx - } = this.groupStack.pop(); - this.ctx = ctx; - this.ctx.imageSmoothingEnabled = false; - - if (suspendedCtx) { - this.suspendedCtx = suspendedCtx; - } - - if (group.smask) { - this.tempSMask = this.smaskStack.pop(); - this.restore(); - } else { - this.ctx.restore(); - const currentMtx = this.ctx.mozCurrentTransform; - this.restore(); - this.ctx.save(); - this.ctx.setTransform.apply(this.ctx, currentMtx); - - const dirtyBox = _util.Util.getAxialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx); - - this.ctx.drawImage(groupCtx.canvas, 0, 0); - this.ctx.restore(); - this.compose(dirtyBox); - } - } - - beginAnnotations() { - this.save(); - - if (this.baseTransform) { - this.ctx.setTransform.apply(this.ctx, this.baseTransform); - } - } - - endAnnotations() { - this.restore(); - } - - beginAnnotation(id, rect, transform, matrix, hasOwnCanvas) { - this.save(); - - if (Array.isArray(rect) && rect.length === 4) { - const width = rect[2] - rect[0]; - const height = rect[3] - rect[1]; - - if (hasOwnCanvas && this.annotationCanvasMap) { - transform = transform.slice(); - transform[4] -= rect[0]; - transform[5] -= rect[1]; - rect = rect.slice(); - rect[0] = rect[1] = 0; - rect[2] = width; - rect[3] = height; - - const [scaleX, scaleY] = _util.Util.singularValueDecompose2dScale(this.ctx.mozCurrentTransform); - - const { - viewportScale - } = this; - const canvasWidth = Math.ceil(width * this.outputScaleX * viewportScale); - const canvasHeight = Math.ceil(height * this.outputScaleY * viewportScale); - this.annotationCanvas = this.canvasFactory.create(canvasWidth, canvasHeight); - const { - canvas, - context - } = this.annotationCanvas; - canvas.style.width = `calc(${width}px * var(--viewport-scale-factor))`; - canvas.style.height = `calc(${height}px * var(--viewport-scale-factor))`; - this.annotationCanvasMap.set(id, canvas); - this.annotationCanvas.savedCtx = this.ctx; - this.ctx = context; - this.ctx.setTransform(scaleX, 0, 0, -scaleY, 0, height * scaleY); - addContextCurrentTransform(this.ctx); - resetCtxToDefault(this.ctx); - } else { - resetCtxToDefault(this.ctx); - this.ctx.rect(rect[0], rect[1], width, height); - this.clip(); - this.endPath(); - } - } - - this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); - this.transform.apply(this, transform); - this.transform.apply(this, matrix); - } - - endAnnotation() { - if (this.annotationCanvas) { - this.ctx = this.annotationCanvas.savedCtx; - delete this.annotationCanvas.savedCtx; - delete this.annotationCanvas; - } - - this.restore(); - } - - paintImageMaskXObject(img) { - if (!this.contentVisible) { - return; - } - - const ctx = this.ctx; - const width = img.width, - height = img.height; - const glyph = this.processingType3; - - if (glyph && glyph.compiled === undefined) { - if (width <= MAX_SIZE_TO_COMPILE && height <= MAX_SIZE_TO_COMPILE) { - glyph.compiled = compileType3Glyph({ - data: img.data, - width, - height - }); - } else { - glyph.compiled = null; - } - } - - if (glyph?.compiled) { - glyph.compiled(ctx); - return; - } - - const mask = this._createMaskCanvas(img); - - const maskCanvas = mask.canvas; - ctx.save(); - ctx.setTransform(1, 0, 0, 1, 0, 0); - ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY); - ctx.restore(); - this.compose(); - } - - paintImageMaskXObjectRepeat(imgData, scaleX, skewX = 0, skewY = 0, scaleY, positions) { - if (!this.contentVisible) { - return; - } - - const ctx = this.ctx; - ctx.save(); - const currentTransform = ctx.mozCurrentTransform; - ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0); - - const mask = this._createMaskCanvas(imgData); - - ctx.setTransform(1, 0, 0, 1, 0, 0); - - for (let i = 0, ii = positions.length; i < ii; i += 2) { - const trans = _util.Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]); - - const [x, y] = _util.Util.applyTransform([0, 0], trans); - - ctx.drawImage(mask.canvas, x, y); - } - - ctx.restore(); - this.compose(); - } - - paintImageMaskXObjectGroup(images) { - if (!this.contentVisible) { - return; - } - - const ctx = this.ctx; - const fillColor = this.current.fillColor; - const isPatternFill = this.current.patternFill; - - for (let i = 0, ii = images.length; i < ii; i++) { - const image = images[i]; - const width = image.width, - height = image.height; - const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); - const maskCtx = maskCanvas.context; - maskCtx.save(); - putBinaryImageMask(maskCtx, image); - maskCtx.globalCompositeOperation = "source-in"; - maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.FILL) : fillColor; - maskCtx.fillRect(0, 0, width, height); - maskCtx.restore(); - ctx.save(); - ctx.transform.apply(ctx, image.transform); - ctx.scale(1, -1); - ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); - ctx.restore(); - } - - this.compose(); - } - - paintImageXObject(objId) { - if (!this.contentVisible) { - return; - } - - const imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId); - - if (!imgData) { - (0, _util.warn)("Dependent image isn't ready yet"); - return; - } - - this.paintInlineImageXObject(imgData); - } - - paintImageXObjectRepeat(objId, scaleX, scaleY, positions) { - if (!this.contentVisible) { - return; - } - - const imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId); - - if (!imgData) { - (0, _util.warn)("Dependent image isn't ready yet"); - return; - } - - const width = imgData.width; - const height = imgData.height; - const map = []; - - for (let i = 0, ii = positions.length; i < ii; i += 2) { - map.push({ - transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]], - x: 0, - y: 0, - w: width, - h: height - }); - } - - this.paintInlineImageXObjectGroup(imgData, map); - } - - paintInlineImageXObject(imgData) { - if (!this.contentVisible) { - return; - } - - const width = imgData.width; - const height = imgData.height; - const ctx = this.ctx; - this.save(); - ctx.scale(1 / width, -1 / height); - let imgToPaint; - - if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) { - imgToPaint = imgData; - } else { - const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); - const tmpCtx = tmpCanvas.context; - putBinaryImageData(tmpCtx, imgData, this.current.transferMaps); - imgToPaint = tmpCanvas.canvas; - } - - const scaled = this._scaleImage(imgToPaint, ctx.mozCurrentTransformInverse); - - ctx.imageSmoothingEnabled = getImageSmoothingEnabled(ctx.mozCurrentTransform, imgData.interpolate); - ctx.drawImage(scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height); - - if (this.imageLayer) { - const position = this.getCanvasPosition(0, -height); - this.imageLayer.appendImage({ - imgData, - left: position[0], - top: position[1], - width: width / ctx.mozCurrentTransformInverse[0], - height: height / ctx.mozCurrentTransformInverse[3] - }); - } - - this.compose(); - this.restore(); - } - - paintInlineImageXObjectGroup(imgData, map) { - if (!this.contentVisible) { - return; - } - - const ctx = this.ctx; - const w = imgData.width; - const h = imgData.height; - const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h); - const tmpCtx = tmpCanvas.context; - putBinaryImageData(tmpCtx, imgData, this.current.transferMaps); - - for (let i = 0, ii = map.length; i < ii; i++) { - const entry = map[i]; - ctx.save(); - ctx.transform.apply(ctx, entry.transform); - ctx.scale(1, -1); - ctx.drawImage(tmpCanvas.canvas, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1); - - if (this.imageLayer) { - const position = this.getCanvasPosition(entry.x, entry.y); - this.imageLayer.appendImage({ - imgData, - left: position[0], - top: position[1], - width: w, - height: h - }); - } - - ctx.restore(); - } - - this.compose(); - } - - paintSolidColorImageMask() { - if (!this.contentVisible) { - return; - } - - this.ctx.fillRect(0, 0, 1, 1); - this.compose(); - } - - markPoint(tag) {} - - markPointProps(tag, properties) {} - - beginMarkedContent(tag) { - this.markedContentStack.push({ - visible: true - }); - } - - beginMarkedContentProps(tag, properties) { - if (tag === "OC") { - this.markedContentStack.push({ - visible: this.optionalContentConfig.isVisible(properties) - }); - } else { - this.markedContentStack.push({ - visible: true - }); - } - - this.contentVisible = this.isContentVisible(); - } - - endMarkedContent() { - this.markedContentStack.pop(); - this.contentVisible = this.isContentVisible(); - } - - beginCompat() {} - - endCompat() {} - - consumePath(clipBox) { - if (this.pendingClip) { - this.current.updateClipFromPath(); - } - - if (!this.pendingClip) { - this.compose(clipBox); - } - - const ctx = this.ctx; - - if (this.pendingClip) { - if (this.pendingClip === EO_CLIP) { - ctx.clip("evenodd"); - } else { - ctx.clip(); - } - - this.pendingClip = null; - } - - this.current.startNewPathAndClipBox(this.current.clipBox); - ctx.beginPath(); - } - - getSinglePixelWidth() { - if (this._cachedGetSinglePixelWidth === null) { - const m = this.ctx.mozCurrentTransform; - const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]); - const sqNorm1 = m[0] ** 2 + m[2] ** 2; - const sqNorm2 = m[1] ** 2 + m[3] ** 2; - const pixelHeight = Math.sqrt(Math.max(sqNorm1, sqNorm2)) / absDet; - - if (sqNorm1 !== sqNorm2 && this._combinedScaleFactor * pixelHeight > 1) { - this._cachedGetSinglePixelWidth = -(this._combinedScaleFactor * pixelHeight); - } else if (absDet > Number.EPSILON) { - this._cachedGetSinglePixelWidth = pixelHeight; - } else { - this._cachedGetSinglePixelWidth = 1; - } - } - - return this._cachedGetSinglePixelWidth; - } - - getCanvasPosition(x, y) { - const transform = this.ctx.mozCurrentTransform; - return [transform[0] * x + transform[2] * y + transform[4], transform[1] * x + transform[3] * y + transform[5]]; - } - - isContentVisible() { - for (let i = this.markedContentStack.length - 1; i >= 0; i--) { - if (!this.markedContentStack[i].visible) { - return false; - } - } - - return true; - } - -} - -exports.CanvasGraphics = CanvasGraphics; - -for (const op in _util.OPS) { - if (CanvasGraphics.prototype[op] !== undefined) { - CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op]; - } -} - -/***/ }), -/* 11 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.TilingPattern = exports.PathType = void 0; -exports.getShadingPattern = getShadingPattern; - -var _util = __w_pdfjs_require__(2); - -const PathType = { - FILL: "Fill", - STROKE: "Stroke", - SHADING: "Shading" -}; -exports.PathType = PathType; - -function applyBoundingBox(ctx, bbox) { - if (!bbox || typeof Path2D === "undefined") { - return; - } - - const width = bbox[2] - bbox[0]; - const height = bbox[3] - bbox[1]; - const region = new Path2D(); - region.rect(bbox[0], bbox[1], width, height); - ctx.clip(region); -} - -class BaseShadingPattern { - constructor() { - if (this.constructor === BaseShadingPattern) { - (0, _util.unreachable)("Cannot initialize BaseShadingPattern."); - } - } - - getPattern() { - (0, _util.unreachable)("Abstract method `getPattern` called."); - } - -} - -class RadialAxialShadingPattern extends BaseShadingPattern { - constructor(IR) { - super(); - this._type = IR[1]; - this._bbox = IR[2]; - this._colorStops = IR[3]; - this._p0 = IR[4]; - this._p1 = IR[5]; - this._r0 = IR[6]; - this._r1 = IR[7]; - this.matrix = null; - } - - _createGradient(ctx) { - let grad; - - if (this._type === "axial") { - grad = ctx.createLinearGradient(this._p0[0], this._p0[1], this._p1[0], this._p1[1]); - } else if (this._type === "radial") { - grad = ctx.createRadialGradient(this._p0[0], this._p0[1], this._r0, this._p1[0], this._p1[1], this._r1); - } - - for (const colorStop of this._colorStops) { - grad.addColorStop(colorStop[0], colorStop[1]); - } - - return grad; - } - - getPattern(ctx, owner, inverse, pathType) { - let pattern; - - if (pathType === PathType.STROKE || pathType === PathType.FILL) { - const ownerBBox = owner.current.getClippedPathBoundingBox(pathType, ctx.mozCurrentTransform) || [0, 0, 0, 0]; - const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1; - const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1; - const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", width, height, true); - const tmpCtx = tmpCanvas.context; - tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); - tmpCtx.beginPath(); - tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); - tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]); - inverse = _util.Util.transform(inverse, [1, 0, 0, 1, ownerBBox[0], ownerBBox[1]]); - tmpCtx.transform.apply(tmpCtx, owner.baseTransform); - - if (this.matrix) { - tmpCtx.transform.apply(tmpCtx, this.matrix); - } - - applyBoundingBox(tmpCtx, this._bbox); - tmpCtx.fillStyle = this._createGradient(tmpCtx); - tmpCtx.fill(); - pattern = ctx.createPattern(tmpCanvas.canvas, "no-repeat"); - const domMatrix = new DOMMatrix(inverse); - - try { - pattern.setTransform(domMatrix); - } catch (ex) { - (0, _util.warn)(`RadialAxialShadingPattern.getPattern: "${ex?.message}".`); - } - } else { - applyBoundingBox(ctx, this._bbox); - pattern = this._createGradient(ctx); - } - - return pattern; - } - -} - -function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { - const coords = context.coords, - colors = context.colors; - const bytes = data.data, - rowSize = data.width * 4; - let tmp; - - if (coords[p1 + 1] > coords[p2 + 1]) { - tmp = p1; - p1 = p2; - p2 = tmp; - tmp = c1; - c1 = c2; - c2 = tmp; - } - - if (coords[p2 + 1] > coords[p3 + 1]) { - tmp = p2; - p2 = p3; - p3 = tmp; - tmp = c2; - c2 = c3; - c3 = tmp; - } - - if (coords[p1 + 1] > coords[p2 + 1]) { - tmp = p1; - p1 = p2; - p2 = tmp; - tmp = c1; - c1 = c2; - c2 = tmp; - } - - const x1 = (coords[p1] + context.offsetX) * context.scaleX; - const y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY; - const x2 = (coords[p2] + context.offsetX) * context.scaleX; - const y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY; - const x3 = (coords[p3] + context.offsetX) * context.scaleX; - const y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY; - - if (y1 >= y3) { - return; - } - - const c1r = colors[c1], - c1g = colors[c1 + 1], - c1b = colors[c1 + 2]; - const c2r = colors[c2], - c2g = colors[c2 + 1], - c2b = colors[c2 + 2]; - const c3r = colors[c3], - c3g = colors[c3 + 1], - c3b = colors[c3 + 2]; - const minY = Math.round(y1), - maxY = Math.round(y3); - let xa, car, cag, cab; - let xb, cbr, cbg, cbb; - - for (let y = minY; y <= maxY; y++) { - if (y < y2) { - let k; - - if (y < y1) { - k = 0; - } else { - k = (y1 - y) / (y1 - y2); - } - - xa = x1 - (x1 - x2) * k; - car = c1r - (c1r - c2r) * k; - cag = c1g - (c1g - c2g) * k; - cab = c1b - (c1b - c2b) * k; - } else { - let k; - - if (y > y3) { - k = 1; - } else if (y2 === y3) { - k = 0; - } else { - k = (y2 - y) / (y2 - y3); - } - - xa = x2 - (x2 - x3) * k; - car = c2r - (c2r - c3r) * k; - cag = c2g - (c2g - c3g) * k; - cab = c2b - (c2b - c3b) * k; - } - - let k; - - if (y < y1) { - k = 0; - } else if (y > y3) { - k = 1; - } else { - k = (y1 - y) / (y1 - y3); - } - - xb = x1 - (x1 - x3) * k; - cbr = c1r - (c1r - c3r) * k; - cbg = c1g - (c1g - c3g) * k; - cbb = c1b - (c1b - c3b) * k; - const x1_ = Math.round(Math.min(xa, xb)); - const x2_ = Math.round(Math.max(xa, xb)); - let j = rowSize * y + x1_ * 4; - - for (let x = x1_; x <= x2_; x++) { - k = (xa - x) / (xa - xb); - - if (k < 0) { - k = 0; - } else if (k > 1) { - k = 1; - } - - bytes[j++] = car - (car - cbr) * k | 0; - bytes[j++] = cag - (cag - cbg) * k | 0; - bytes[j++] = cab - (cab - cbb) * k | 0; - bytes[j++] = 255; - } - } -} - -function drawFigure(data, figure, context) { - const ps = figure.coords; - const cs = figure.colors; - let i, ii; - - switch (figure.type) { - case "lattice": - const verticesPerRow = figure.verticesPerRow; - const rows = Math.floor(ps.length / verticesPerRow) - 1; - const cols = verticesPerRow - 1; - - for (i = 0; i < rows; i++) { - let q = i * verticesPerRow; - - for (let j = 0; j < cols; j++, q++) { - drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]); - drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]); - } - } - - break; - - case "triangles": - for (i = 0, ii = ps.length; i < ii; i += 3) { - drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]); - } - - break; - - default: - throw new Error("illegal figure"); - } -} - -class MeshShadingPattern extends BaseShadingPattern { - constructor(IR) { - super(); - this._coords = IR[2]; - this._colors = IR[3]; - this._figures = IR[4]; - this._bounds = IR[5]; - this._bbox = IR[7]; - this._background = IR[8]; - this.matrix = null; - } - - _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) { - const EXPECTED_SCALE = 1.1; - const MAX_PATTERN_SIZE = 3000; - const BORDER_SIZE = 2; - const offsetX = Math.floor(this._bounds[0]); - const offsetY = Math.floor(this._bounds[1]); - const boundsWidth = Math.ceil(this._bounds[2]) - offsetX; - const boundsHeight = Math.ceil(this._bounds[3]) - offsetY; - const width = Math.min(Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); - const height = Math.min(Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); - const scaleX = boundsWidth / width; - const scaleY = boundsHeight / height; - const context = { - coords: this._coords, - colors: this._colors, - offsetX: -offsetX, - offsetY: -offsetY, - scaleX: 1 / scaleX, - scaleY: 1 / scaleY - }; - const paddedWidth = width + BORDER_SIZE * 2; - const paddedHeight = height + BORDER_SIZE * 2; - const tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false); - const tmpCtx = tmpCanvas.context; - const data = tmpCtx.createImageData(width, height); - - if (backgroundColor) { - const bytes = data.data; - - for (let i = 0, ii = bytes.length; i < ii; i += 4) { - bytes[i] = backgroundColor[0]; - bytes[i + 1] = backgroundColor[1]; - bytes[i + 2] = backgroundColor[2]; - bytes[i + 3] = 255; - } - } - - for (const figure of this._figures) { - drawFigure(data, figure, context); - } - - tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE); - const canvas = tmpCanvas.canvas; - return { - canvas, - offsetX: offsetX - BORDER_SIZE * scaleX, - offsetY: offsetY - BORDER_SIZE * scaleY, - scaleX, - scaleY - }; - } - - getPattern(ctx, owner, inverse, pathType) { - applyBoundingBox(ctx, this._bbox); - let scale; - - if (pathType === PathType.SHADING) { - scale = _util.Util.singularValueDecompose2dScale(ctx.mozCurrentTransform); - } else { - scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform); - - if (this.matrix) { - const matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix); - - scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]]; - } - } - - const temporaryPatternCanvas = this._createMeshCanvas(scale, pathType === PathType.SHADING ? null : this._background, owner.cachedCanvases); - - if (pathType !== PathType.SHADING) { - ctx.setTransform.apply(ctx, owner.baseTransform); - - if (this.matrix) { - ctx.transform.apply(ctx, this.matrix); - } - } - - ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); - ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY); - return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat"); - } - -} - -class DummyShadingPattern extends BaseShadingPattern { - getPattern() { - return "hotpink"; - } - -} - -function getShadingPattern(IR) { - switch (IR[0]) { - case "RadialAxial": - return new RadialAxialShadingPattern(IR); - - case "Mesh": - return new MeshShadingPattern(IR); - - case "Dummy": - return new DummyShadingPattern(); - } - - throw new Error(`Unknown IR type: ${IR[0]}`); -} - -const PaintType = { - COLORED: 1, - UNCOLORED: 2 -}; - -class TilingPattern { - static get MAX_PATTERN_SIZE() { - return (0, _util.shadow)(this, "MAX_PATTERN_SIZE", 3000); - } - - constructor(IR, color, ctx, canvasGraphicsFactory, baseTransform) { - this.operatorList = IR[2]; - this.matrix = IR[3] || [1, 0, 0, 1, 0, 0]; - this.bbox = IR[4]; - this.xstep = IR[5]; - this.ystep = IR[6]; - this.paintType = IR[7]; - this.tilingType = IR[8]; - this.color = color; - this.ctx = ctx; - this.canvasGraphicsFactory = canvasGraphicsFactory; - this.baseTransform = baseTransform; - } - - createPatternCanvas(owner) { - const operatorList = this.operatorList; - const bbox = this.bbox; - const xstep = this.xstep; - const ystep = this.ystep; - const paintType = this.paintType; - const tilingType = this.tilingType; - const color = this.color; - const canvasGraphicsFactory = this.canvasGraphicsFactory; - (0, _util.info)("TilingType: " + tilingType); - const x0 = bbox[0], - y0 = bbox[1], - x1 = bbox[2], - y1 = bbox[3]; - - const matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix); - - const curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform); - - const combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]]; - const dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]); - const dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]); - const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size, true); - const tmpCtx = tmpCanvas.context; - const graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx); - graphics.groupLevel = owner.groupLevel; - this.setFillAndStrokeStyleToContext(graphics, paintType, color); - let adjustedX0 = x0; - let adjustedY0 = y0; - let adjustedX1 = x1; - let adjustedY1 = y1; - - if (x0 < 0) { - adjustedX0 = 0; - adjustedX1 += Math.abs(x0); - } - - if (y0 < 0) { - adjustedY0 = 0; - adjustedY1 += Math.abs(y0); - } - - tmpCtx.translate(-(dimx.scale * adjustedX0), -(dimy.scale * adjustedY0)); - graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0); - this.clipBbox(graphics, adjustedX0, adjustedY0, adjustedX1, adjustedY1); - graphics.baseTransform = graphics.ctx.mozCurrentTransform.slice(); - graphics.executeOperatorList(operatorList); - graphics.endDrawing(); - return { - canvas: tmpCanvas.canvas, - scaleX: dimx.scale, - scaleY: dimy.scale, - offsetX: adjustedX0, - offsetY: adjustedY0 - }; - } - - getSizeAndScale(step, realOutputSize, scale) { - step = Math.abs(step); - const maxSize = Math.max(TilingPattern.MAX_PATTERN_SIZE, realOutputSize); - let size = Math.ceil(step * scale); - - if (size >= maxSize) { - size = maxSize; - } else { - scale = size / step; - } - - return { - scale, - size - }; - } - - clipBbox(graphics, x0, y0, x1, y1) { - const bboxWidth = x1 - x0; - const bboxHeight = y1 - y0; - graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight); - graphics.clip(); - graphics.endPath(); - } - - setFillAndStrokeStyleToContext(graphics, paintType, color) { - const context = graphics.ctx, - current = graphics.current; - - switch (paintType) { - case PaintType.COLORED: - const ctx = this.ctx; - context.fillStyle = ctx.fillStyle; - context.strokeStyle = ctx.strokeStyle; - current.fillColor = ctx.fillStyle; - current.strokeColor = ctx.strokeStyle; - break; - - case PaintType.UNCOLORED: - const cssColor = _util.Util.makeHexColor(color[0], color[1], color[2]); - - context.fillStyle = cssColor; - context.strokeStyle = cssColor; - current.fillColor = cssColor; - current.strokeColor = cssColor; - break; - - default: - throw new _util.FormatError(`Unsupported paint type: ${paintType}`); - } - } - - getPattern(ctx, owner, inverse, pathType) { - let matrix = inverse; - - if (pathType !== PathType.SHADING) { - matrix = _util.Util.transform(matrix, owner.baseTransform); - - if (this.matrix) { - matrix = _util.Util.transform(matrix, this.matrix); - } - } - - const temporaryPatternCanvas = this.createPatternCanvas(owner); - let domMatrix = new DOMMatrix(matrix); - domMatrix = domMatrix.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); - domMatrix = domMatrix.scale(1 / temporaryPatternCanvas.scaleX, 1 / temporaryPatternCanvas.scaleY); - const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, "repeat"); - - try { - pattern.setTransform(domMatrix); - } catch (ex) { - (0, _util.warn)(`TilingPattern.getPattern: "${ex?.message}".`); - } - - return pattern; - } - -} - -exports.TilingPattern = TilingPattern; - -/***/ }), -/* 12 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.GlobalWorkerOptions = void 0; -const GlobalWorkerOptions = Object.create(null); -exports.GlobalWorkerOptions = GlobalWorkerOptions; -GlobalWorkerOptions.workerPort = GlobalWorkerOptions.workerPort === undefined ? null : GlobalWorkerOptions.workerPort; -GlobalWorkerOptions.workerSrc = GlobalWorkerOptions.workerSrc === undefined ? "" : GlobalWorkerOptions.workerSrc; - -/***/ }), -/* 13 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.MessageHandler = void 0; - -var _util = __w_pdfjs_require__(2); - -const CallbackKind = { - UNKNOWN: 0, - DATA: 1, - ERROR: 2 -}; -const StreamKind = { - UNKNOWN: 0, - CANCEL: 1, - CANCEL_COMPLETE: 2, - CLOSE: 3, - ENQUEUE: 4, - ERROR: 5, - PULL: 6, - PULL_COMPLETE: 7, - START_COMPLETE: 8 -}; - -function wrapReason(reason) { - if (!(reason instanceof Error || typeof reason === "object" && reason !== null)) { - (0, _util.warn)('wrapReason: Expected "reason" to be a (possibly cloned) Error.'); - return reason; - } - - switch (reason.name) { - case "AbortException": - return new _util.AbortException(reason.message); - - case "MissingPDFException": - return new _util.MissingPDFException(reason.message); - - case "PasswordException": - return new _util.PasswordException(reason.message, reason.code); - - case "UnexpectedResponseException": - return new _util.UnexpectedResponseException(reason.message, reason.status); - - case "UnknownErrorException": - return new _util.UnknownErrorException(reason.message, reason.details); - - default: - return new _util.UnknownErrorException(reason.message, reason.toString()); - } -} - -class MessageHandler { - constructor(sourceName, targetName, comObj) { - this.sourceName = sourceName; - this.targetName = targetName; - this.comObj = comObj; - this.callbackId = 1; - this.streamId = 1; - this.streamSinks = Object.create(null); - this.streamControllers = Object.create(null); - this.callbackCapabilities = Object.create(null); - this.actionHandler = Object.create(null); - - this._onComObjOnMessage = event => { - const data = event.data; - - if (data.targetName !== this.sourceName) { - return; - } - - if (data.stream) { - this._processStreamMessage(data); - - return; - } - - if (data.callback) { - const callbackId = data.callbackId; - const capability = this.callbackCapabilities[callbackId]; - - if (!capability) { - throw new Error(`Cannot resolve callback ${callbackId}`); - } - - delete this.callbackCapabilities[callbackId]; - - if (data.callback === CallbackKind.DATA) { - capability.resolve(data.data); - } else if (data.callback === CallbackKind.ERROR) { - capability.reject(wrapReason(data.reason)); - } else { - throw new Error("Unexpected callback case"); - } - - return; - } - - const action = this.actionHandler[data.action]; - - if (!action) { - throw new Error(`Unknown action from worker: ${data.action}`); - } - - if (data.callbackId) { - const cbSourceName = this.sourceName; - const cbTargetName = data.sourceName; - new Promise(function (resolve) { - resolve(action(data.data)); - }).then(function (result) { - comObj.postMessage({ - sourceName: cbSourceName, - targetName: cbTargetName, - callback: CallbackKind.DATA, - callbackId: data.callbackId, - data: result - }); - }, function (reason) { - comObj.postMessage({ - sourceName: cbSourceName, - targetName: cbTargetName, - callback: CallbackKind.ERROR, - callbackId: data.callbackId, - reason: wrapReason(reason) - }); - }); - return; - } - - if (data.streamId) { - this._createStreamSink(data); - - return; - } - - action(data.data); - }; - - comObj.addEventListener("message", this._onComObjOnMessage); - } - - on(actionName, handler) { - const ah = this.actionHandler; - - if (ah[actionName]) { - throw new Error(`There is already an actionName called "${actionName}"`); - } - - ah[actionName] = handler; - } - - send(actionName, data, transfers) { - this.comObj.postMessage({ - sourceName: this.sourceName, - targetName: this.targetName, - action: actionName, - data - }, transfers); - } - - sendWithPromise(actionName, data, transfers) { - const callbackId = this.callbackId++; - const capability = (0, _util.createPromiseCapability)(); - this.callbackCapabilities[callbackId] = capability; - - try { - this.comObj.postMessage({ - sourceName: this.sourceName, - targetName: this.targetName, - action: actionName, - callbackId, - data - }, transfers); - } catch (ex) { - capability.reject(ex); - } - - return capability.promise; - } - - sendWithStream(actionName, data, queueingStrategy, transfers) { - const streamId = this.streamId++, - sourceName = this.sourceName, - targetName = this.targetName, - comObj = this.comObj; - return new ReadableStream({ - start: controller => { - const startCapability = (0, _util.createPromiseCapability)(); - this.streamControllers[streamId] = { - controller, - startCall: startCapability, - pullCall: null, - cancelCall: null, - isClosed: false - }; - comObj.postMessage({ - sourceName, - targetName, - action: actionName, - streamId, - data, - desiredSize: controller.desiredSize - }, transfers); - return startCapability.promise; - }, - pull: controller => { - const pullCapability = (0, _util.createPromiseCapability)(); - this.streamControllers[streamId].pullCall = pullCapability; - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.PULL, - streamId, - desiredSize: controller.desiredSize - }); - return pullCapability.promise; - }, - cancel: reason => { - (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason"); - const cancelCapability = (0, _util.createPromiseCapability)(); - this.streamControllers[streamId].cancelCall = cancelCapability; - this.streamControllers[streamId].isClosed = true; - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.CANCEL, - streamId, - reason: wrapReason(reason) - }); - return cancelCapability.promise; - } - }, queueingStrategy); - } - - _createStreamSink(data) { - const streamId = data.streamId, - sourceName = this.sourceName, - targetName = data.sourceName, - comObj = this.comObj; - const self = this, - action = this.actionHandler[data.action]; - const streamSink = { - enqueue(chunk, size = 1, transfers) { - if (this.isCancelled) { - return; - } - - const lastDesiredSize = this.desiredSize; - this.desiredSize -= size; - - if (lastDesiredSize > 0 && this.desiredSize <= 0) { - this.sinkCapability = (0, _util.createPromiseCapability)(); - this.ready = this.sinkCapability.promise; - } - - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.ENQUEUE, - streamId, - chunk - }, transfers); - }, - - close() { - if (this.isCancelled) { - return; - } - - this.isCancelled = true; - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.CLOSE, - streamId - }); - delete self.streamSinks[streamId]; - }, - - error(reason) { - (0, _util.assert)(reason instanceof Error, "error must have a valid reason"); - - if (this.isCancelled) { - return; - } - - this.isCancelled = true; - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.ERROR, - streamId, - reason: wrapReason(reason) - }); - }, - - sinkCapability: (0, _util.createPromiseCapability)(), - onPull: null, - onCancel: null, - isCancelled: false, - desiredSize: data.desiredSize, - ready: null - }; - streamSink.sinkCapability.resolve(); - streamSink.ready = streamSink.sinkCapability.promise; - this.streamSinks[streamId] = streamSink; - new Promise(function (resolve) { - resolve(action(data.data, streamSink)); - }).then(function () { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.START_COMPLETE, - streamId, - success: true - }); - }, function (reason) { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.START_COMPLETE, - streamId, - reason: wrapReason(reason) - }); - }); - } - - _processStreamMessage(data) { - const streamId = data.streamId, - sourceName = this.sourceName, - targetName = data.sourceName, - comObj = this.comObj; - const streamController = this.streamControllers[streamId], - streamSink = this.streamSinks[streamId]; - - switch (data.stream) { - case StreamKind.START_COMPLETE: - if (data.success) { - streamController.startCall.resolve(); - } else { - streamController.startCall.reject(wrapReason(data.reason)); - } - - break; - - case StreamKind.PULL_COMPLETE: - if (data.success) { - streamController.pullCall.resolve(); - } else { - streamController.pullCall.reject(wrapReason(data.reason)); - } - - break; - - case StreamKind.PULL: - if (!streamSink) { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.PULL_COMPLETE, - streamId, - success: true - }); - break; - } - - if (streamSink.desiredSize <= 0 && data.desiredSize > 0) { - streamSink.sinkCapability.resolve(); - } - - streamSink.desiredSize = data.desiredSize; - new Promise(function (resolve) { - resolve(streamSink.onPull && streamSink.onPull()); - }).then(function () { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.PULL_COMPLETE, - streamId, - success: true - }); - }, function (reason) { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.PULL_COMPLETE, - streamId, - reason: wrapReason(reason) - }); - }); - break; - - case StreamKind.ENQUEUE: - (0, _util.assert)(streamController, "enqueue should have stream controller"); - - if (streamController.isClosed) { - break; - } - - streamController.controller.enqueue(data.chunk); - break; - - case StreamKind.CLOSE: - (0, _util.assert)(streamController, "close should have stream controller"); - - if (streamController.isClosed) { - break; - } - - streamController.isClosed = true; - streamController.controller.close(); - - this._deleteStreamController(streamController, streamId); - - break; - - case StreamKind.ERROR: - (0, _util.assert)(streamController, "error should have stream controller"); - streamController.controller.error(wrapReason(data.reason)); - - this._deleteStreamController(streamController, streamId); - - break; - - case StreamKind.CANCEL_COMPLETE: - if (data.success) { - streamController.cancelCall.resolve(); - } else { - streamController.cancelCall.reject(wrapReason(data.reason)); - } - - this._deleteStreamController(streamController, streamId); - - break; - - case StreamKind.CANCEL: - if (!streamSink) { - break; - } - - new Promise(function (resolve) { - resolve(streamSink.onCancel && streamSink.onCancel(wrapReason(data.reason))); - }).then(function () { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.CANCEL_COMPLETE, - streamId, - success: true - }); - }, function (reason) { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.CANCEL_COMPLETE, - streamId, - reason: wrapReason(reason) - }); - }); - streamSink.sinkCapability.reject(wrapReason(data.reason)); - streamSink.isCancelled = true; - delete this.streamSinks[streamId]; - break; - - default: - throw new Error("Unexpected stream case"); - } - } - - async _deleteStreamController(streamController, streamId) { - await Promise.allSettled([streamController.startCall && streamController.startCall.promise, streamController.pullCall && streamController.pullCall.promise, streamController.cancelCall && streamController.cancelCall.promise]); - delete this.streamControllers[streamId]; - } - - destroy() { - this.comObj.removeEventListener("message", this._onComObjOnMessage); - } - -} - -exports.MessageHandler = MessageHandler; - -/***/ }), -/* 14 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Metadata = void 0; - -var _util = __w_pdfjs_require__(2); - -class Metadata { - #metadataMap; - #data; - - constructor({ - parsedData, - rawData - }) { - this.#metadataMap = parsedData; - this.#data = rawData; - } - - getRaw() { - return this.#data; - } - - get(name) { - return this.#metadataMap.get(name) ?? null; - } - - getAll() { - return (0, _util.objectFromMap)(this.#metadataMap); - } - - has(name) { - return this.#metadataMap.has(name); - } - -} - -exports.Metadata = Metadata; - -/***/ }), -/* 15 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.OptionalContentConfig = void 0; - -var _util = __w_pdfjs_require__(2); - -class OptionalContentGroup { - constructor(name, intent) { - this.visible = true; - this.name = name; - this.intent = intent; - } - -} - -class OptionalContentConfig { - constructor(data) { - this.name = null; - this.creator = null; - this._order = null; - this._groups = new Map(); - - if (data === null) { - return; - } - - this.name = data.name; - this.creator = data.creator; - this._order = data.order; - - for (const group of data.groups) { - this._groups.set(group.id, new OptionalContentGroup(group.name, group.intent)); - } - - if (data.baseState === "OFF") { - for (const group of this._groups) { - group.visible = false; - } - } - - for (const on of data.on) { - this._groups.get(on).visible = true; - } - - for (const off of data.off) { - this._groups.get(off).visible = false; - } - } - - _evaluateVisibilityExpression(array) { - const length = array.length; - - if (length < 2) { - return true; - } - - const operator = array[0]; - - for (let i = 1; i < length; i++) { - const element = array[i]; - let state; - - if (Array.isArray(element)) { - state = this._evaluateVisibilityExpression(element); - } else if (this._groups.has(element)) { - state = this._groups.get(element).visible; - } else { - (0, _util.warn)(`Optional content group not found: ${element}`); - return true; - } - - switch (operator) { - case "And": - if (!state) { - return false; - } - - break; - - case "Or": - if (state) { - return true; - } - - break; - - case "Not": - return !state; - - default: - return true; - } - } - - return operator === "And"; - } - - isVisible(group) { - if (this._groups.size === 0) { - return true; - } - - if (!group) { - (0, _util.warn)("Optional content group not defined."); - return true; - } - - if (group.type === "OCG") { - if (!this._groups.has(group.id)) { - (0, _util.warn)(`Optional content group not found: ${group.id}`); - return true; - } - - return this._groups.get(group.id).visible; - } else if (group.type === "OCMD") { - if (group.expression) { - return this._evaluateVisibilityExpression(group.expression); - } - - if (!group.policy || group.policy === "AnyOn") { - for (const id of group.ids) { - if (!this._groups.has(id)) { - (0, _util.warn)(`Optional content group not found: ${id}`); - return true; - } - - if (this._groups.get(id).visible) { - return true; - } - } - - return false; - } else if (group.policy === "AllOn") { - for (const id of group.ids) { - if (!this._groups.has(id)) { - (0, _util.warn)(`Optional content group not found: ${id}`); - return true; - } - - if (!this._groups.get(id).visible) { - return false; - } - } - - return true; - } else if (group.policy === "AnyOff") { - for (const id of group.ids) { - if (!this._groups.has(id)) { - (0, _util.warn)(`Optional content group not found: ${id}`); - return true; - } - - if (!this._groups.get(id).visible) { - return true; - } - } - - return false; - } else if (group.policy === "AllOff") { - for (const id of group.ids) { - if (!this._groups.has(id)) { - (0, _util.warn)(`Optional content group not found: ${id}`); - return true; - } - - if (this._groups.get(id).visible) { - return false; - } - } - - return true; - } - - (0, _util.warn)(`Unknown optional content policy ${group.policy}.`); - return true; - } - - (0, _util.warn)(`Unknown group type ${group.type}.`); - return true; - } - - setVisibility(id, visible = true) { - if (!this._groups.has(id)) { - (0, _util.warn)(`Optional content group not found: ${id}`); - return; - } - - this._groups.get(id).visible = !!visible; - } - - getOrder() { - if (!this._groups.size) { - return null; - } - - if (this._order) { - return this._order.slice(); - } - - return Array.from(this._groups.keys()); - } - - getGroups() { - return this._groups.size > 0 ? (0, _util.objectFromMap)(this._groups) : null; - } - - getGroup(id) { - return this._groups.get(id) || null; - } - -} - -exports.OptionalContentConfig = OptionalContentConfig; - -/***/ }), -/* 16 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.PDFDataTransportStream = void 0; - -var _util = __w_pdfjs_require__(2); - -var _display_utils = __w_pdfjs_require__(1); - -class PDFDataTransportStream { - constructor(params, pdfDataRangeTransport) { - (0, _util.assert)(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.'); - this._queuedChunks = []; - this._progressiveDone = params.progressiveDone || false; - this._contentDispositionFilename = params.contentDispositionFilename || null; - const initialData = params.initialData; - - if (initialData?.length > 0) { - const buffer = new Uint8Array(initialData).buffer; - - this._queuedChunks.push(buffer); - } - - this._pdfDataRangeTransport = pdfDataRangeTransport; - this._isStreamingSupported = !params.disableStream; - this._isRangeSupported = !params.disableRange; - this._contentLength = params.length; - this._fullRequestReader = null; - this._rangeReaders = []; - - this._pdfDataRangeTransport.addRangeListener((begin, chunk) => { - this._onReceiveData({ - begin, - chunk - }); - }); - - this._pdfDataRangeTransport.addProgressListener((loaded, total) => { - this._onProgress({ - loaded, - total - }); - }); - - this._pdfDataRangeTransport.addProgressiveReadListener(chunk => { - this._onReceiveData({ - chunk - }); - }); - - this._pdfDataRangeTransport.addProgressiveDoneListener(() => { - this._onProgressiveDone(); - }); - - this._pdfDataRangeTransport.transportReady(); - } - - _onReceiveData(args) { - const buffer = new Uint8Array(args.chunk).buffer; - - if (args.begin === undefined) { - if (this._fullRequestReader) { - this._fullRequestReader._enqueue(buffer); - } else { - this._queuedChunks.push(buffer); - } - } else { - const found = this._rangeReaders.some(function (rangeReader) { - if (rangeReader._begin !== args.begin) { - return false; - } - - rangeReader._enqueue(buffer); - - return true; - }); - - (0, _util.assert)(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found."); - } - } - - get _progressiveDataLength() { - return this._fullRequestReader?._loaded ?? 0; - } - - _onProgress(evt) { - if (evt.total === undefined) { - const firstReader = this._rangeReaders[0]; - - if (firstReader?.onProgress) { - firstReader.onProgress({ - loaded: evt.loaded - }); - } - } else { - const fullReader = this._fullRequestReader; - - if (fullReader?.onProgress) { - fullReader.onProgress({ - loaded: evt.loaded, - total: evt.total - }); - } - } - } - - _onProgressiveDone() { - if (this._fullRequestReader) { - this._fullRequestReader.progressiveDone(); - } - - this._progressiveDone = true; - } - - _removeRangeReader(reader) { - const i = this._rangeReaders.indexOf(reader); - - if (i >= 0) { - this._rangeReaders.splice(i, 1); - } - } - - getFullReader() { - (0, _util.assert)(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once."); - const queuedChunks = this._queuedChunks; - this._queuedChunks = null; - return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone, this._contentDispositionFilename); - } - - getRangeReader(begin, end) { - if (end <= this._progressiveDataLength) { - return null; - } - - const reader = new PDFDataTransportStreamRangeReader(this, begin, end); - - this._pdfDataRangeTransport.requestDataRange(begin, end); - - this._rangeReaders.push(reader); - - return reader; - } - - cancelAllRequests(reason) { - if (this._fullRequestReader) { - this._fullRequestReader.cancel(reason); - } - - for (const reader of this._rangeReaders.slice(0)) { - reader.cancel(reason); - } - - this._pdfDataRangeTransport.abort(); - } - -} - -exports.PDFDataTransportStream = PDFDataTransportStream; - -class PDFDataTransportStreamReader { - constructor(stream, queuedChunks, progressiveDone = false, contentDispositionFilename = null) { - this._stream = stream; - this._done = progressiveDone || false; - this._filename = (0, _display_utils.isPdfFile)(contentDispositionFilename) ? contentDispositionFilename : null; - this._queuedChunks = queuedChunks || []; - this._loaded = 0; - - for (const chunk of this._queuedChunks) { - this._loaded += chunk.byteLength; - } - - this._requests = []; - this._headersReady = Promise.resolve(); - stream._fullRequestReader = this; - this.onProgress = null; - } - - _enqueue(chunk) { - if (this._done) { - return; - } - - if (this._requests.length > 0) { - const requestCapability = this._requests.shift(); - - requestCapability.resolve({ - value: chunk, - done: false - }); - } else { - this._queuedChunks.push(chunk); - } - - this._loaded += chunk.byteLength; - } - - get headersReady() { - return this._headersReady; - } - - get filename() { - return this._filename; - } - - get isRangeSupported() { - return this._stream._isRangeSupported; - } - - get isStreamingSupported() { - return this._stream._isStreamingSupported; - } - - get contentLength() { - return this._stream._contentLength; - } - - async read() { - if (this._queuedChunks.length > 0) { - const chunk = this._queuedChunks.shift(); - - return { - value: chunk, - done: false - }; - } - - if (this._done) { - return { - value: undefined, - done: true - }; - } - - const requestCapability = (0, _util.createPromiseCapability)(); - - this._requests.push(requestCapability); - - return requestCapability.promise; - } - - cancel(reason) { - this._done = true; - - for (const requestCapability of this._requests) { - requestCapability.resolve({ - value: undefined, - done: true - }); - } - - this._requests.length = 0; - } - - progressiveDone() { - if (this._done) { - return; - } - - this._done = true; - } - -} - -class PDFDataTransportStreamRangeReader { - constructor(stream, begin, end) { - this._stream = stream; - this._begin = begin; - this._end = end; - this._queuedChunk = null; - this._requests = []; - this._done = false; - this.onProgress = null; - } - - _enqueue(chunk) { - if (this._done) { - return; - } - - if (this._requests.length === 0) { - this._queuedChunk = chunk; - } else { - const requestsCapability = this._requests.shift(); - - requestsCapability.resolve({ - value: chunk, - done: false - }); - - for (const requestCapability of this._requests) { - requestCapability.resolve({ - value: undefined, - done: true - }); - } - - this._requests.length = 0; - } - - this._done = true; - - this._stream._removeRangeReader(this); - } - - get isStreamingSupported() { - return false; - } - - async read() { - if (this._queuedChunk) { - const chunk = this._queuedChunk; - this._queuedChunk = null; - return { - value: chunk, - done: false - }; - } - - if (this._done) { - return { - value: undefined, - done: true - }; - } - - const requestCapability = (0, _util.createPromiseCapability)(); - - this._requests.push(requestCapability); - - return requestCapability.promise; - } - - cancel(reason) { - this._done = true; - - for (const requestCapability of this._requests) { - requestCapability.resolve({ - value: undefined, - done: true - }); - } - - this._requests.length = 0; - - this._stream._removeRangeReader(this); - } - -} - -/***/ }), -/* 17 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.XfaText = void 0; - -class XfaText { - static textContent(xfa) { - const items = []; - const output = { - items, - styles: Object.create(null) - }; - - function walk(node) { - if (!node) { - return; - } - - let str = null; - const name = node.name; - - if (name === "#text") { - str = node.value; - } else if (!XfaText.shouldBuildText(name)) { - return; - } else if (node?.attributes?.textContent) { - str = node.attributes.textContent; - } else if (node.value) { - str = node.value; - } - - if (str !== null) { - items.push({ - str - }); - } - - if (!node.children) { - return; - } - - for (const child of node.children) { - walk(child); - } - } - - walk(xfa); - return output; - } - - static shouldBuildText(name) { - return !(name === "textarea" || name === "input" || name === "option" || name === "select"); - } - -} - -exports.XfaText = XfaText; - -/***/ }), -/* 18 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.AnnotationLayer = void 0; - -var _util = __w_pdfjs_require__(2); - -var _display_utils = __w_pdfjs_require__(1); - -var _annotation_storage = __w_pdfjs_require__(9); - -var _scripting_utils = __w_pdfjs_require__(19); - -var _xfa_layer = __w_pdfjs_require__(20); - -const DEFAULT_TAB_INDEX = 1000; -const GetElementsByNameSet = new WeakSet(); - -class AnnotationElementFactory { - static create(parameters) { - const subtype = parameters.data.annotationType; - - switch (subtype) { - case _util.AnnotationType.LINK: - return new LinkAnnotationElement(parameters); - - case _util.AnnotationType.TEXT: - return new TextAnnotationElement(parameters); - - case _util.AnnotationType.WIDGET: - const fieldType = parameters.data.fieldType; - - switch (fieldType) { - case "Tx": - return new TextWidgetAnnotationElement(parameters); - - case "Btn": - if (parameters.data.radioButton) { - return new RadioButtonWidgetAnnotationElement(parameters); - } else if (parameters.data.checkBox) { - return new CheckboxWidgetAnnotationElement(parameters); - } - - return new PushButtonWidgetAnnotationElement(parameters); - - case "Ch": - return new ChoiceWidgetAnnotationElement(parameters); - } - - return new WidgetAnnotationElement(parameters); - - case _util.AnnotationType.POPUP: - return new PopupAnnotationElement(parameters); - - case _util.AnnotationType.FREETEXT: - return new FreeTextAnnotationElement(parameters); - - case _util.AnnotationType.LINE: - return new LineAnnotationElement(parameters); - - case _util.AnnotationType.SQUARE: - return new SquareAnnotationElement(parameters); - - case _util.AnnotationType.CIRCLE: - return new CircleAnnotationElement(parameters); - - case _util.AnnotationType.POLYLINE: - return new PolylineAnnotationElement(parameters); - - case _util.AnnotationType.CARET: - return new CaretAnnotationElement(parameters); - - case _util.AnnotationType.INK: - return new InkAnnotationElement(parameters); - - case _util.AnnotationType.POLYGON: - return new PolygonAnnotationElement(parameters); - - case _util.AnnotationType.HIGHLIGHT: - return new HighlightAnnotationElement(parameters); - - case _util.AnnotationType.UNDERLINE: - return new UnderlineAnnotationElement(parameters); - - case _util.AnnotationType.SQUIGGLY: - return new SquigglyAnnotationElement(parameters); - - case _util.AnnotationType.STRIKEOUT: - return new StrikeOutAnnotationElement(parameters); - - case _util.AnnotationType.STAMP: - return new StampAnnotationElement(parameters); - - case _util.AnnotationType.FILEATTACHMENT: - return new FileAttachmentAnnotationElement(parameters); - - default: - return new AnnotationElement(parameters); - } - } - -} - -class AnnotationElement { - constructor(parameters, { - isRenderable = false, - ignoreBorder = false, - createQuadrilaterals = false - } = {}) { - this.isRenderable = isRenderable; - this.data = parameters.data; - this.layer = parameters.layer; - this.page = parameters.page; - this.viewport = parameters.viewport; - this.linkService = parameters.linkService; - this.downloadManager = parameters.downloadManager; - this.imageResourcesPath = parameters.imageResourcesPath; - this.renderForms = parameters.renderForms; - this.svgFactory = parameters.svgFactory; - this.annotationStorage = parameters.annotationStorage; - this.enableScripting = parameters.enableScripting; - this.hasJSActions = parameters.hasJSActions; - this._fieldObjects = parameters.fieldObjects; - this._mouseState = parameters.mouseState; - - if (isRenderable) { - this.container = this._createContainer(ignoreBorder); - } - - if (createQuadrilaterals) { - this.quadrilaterals = this._createQuadrilaterals(ignoreBorder); - } - } - - _createContainer(ignoreBorder = false) { - const data = this.data, - page = this.page, - viewport = this.viewport; - const container = document.createElement("section"); - let width = data.rect[2] - data.rect[0]; - let height = data.rect[3] - data.rect[1]; - container.setAttribute("data-annotation-id", data.id); - - const rect = _util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]); - - if (data.hasOwnCanvas) { - const transform = viewport.transform.slice(); - - const [scaleX, scaleY] = _util.Util.singularValueDecompose2dScale(transform); - - width = Math.ceil(width * scaleX); - height = Math.ceil(height * scaleY); - rect[0] *= scaleX; - rect[1] *= scaleY; - - for (let i = 0; i < 4; i++) { - transform[i] = Math.sign(transform[i]); - } - - container.style.transform = `matrix(${transform.join(",")})`; - } else { - container.style.transform = `matrix(${viewport.transform.join(",")})`; - } - - container.style.transformOrigin = `${-rect[0]}px ${-rect[1]}px`; - - if (!ignoreBorder && data.borderStyle.width > 0) { - container.style.borderWidth = `${data.borderStyle.width}px`; - - if (data.borderStyle.style !== _util.AnnotationBorderStyleType.UNDERLINE) { - width -= 2 * data.borderStyle.width; - height -= 2 * data.borderStyle.width; - } - - const horizontalRadius = data.borderStyle.horizontalCornerRadius; - const verticalRadius = data.borderStyle.verticalCornerRadius; - - if (horizontalRadius > 0 || verticalRadius > 0) { - const radius = `${horizontalRadius}px / ${verticalRadius}px`; - container.style.borderRadius = radius; - } - - switch (data.borderStyle.style) { - case _util.AnnotationBorderStyleType.SOLID: - container.style.borderStyle = "solid"; - break; - - case _util.AnnotationBorderStyleType.DASHED: - container.style.borderStyle = "dashed"; - break; - - case _util.AnnotationBorderStyleType.BEVELED: - (0, _util.warn)("Unimplemented border style: beveled"); - break; - - case _util.AnnotationBorderStyleType.INSET: - (0, _util.warn)("Unimplemented border style: inset"); - break; - - case _util.AnnotationBorderStyleType.UNDERLINE: - container.style.borderBottomStyle = "solid"; - break; - } - - const borderColor = data.borderColor || data.color || null; - - if (borderColor) { - container.style.borderColor = _util.Util.makeHexColor(data.color[0] | 0, data.color[1] | 0, data.color[2] | 0); - } else { - container.style.borderWidth = 0; - } - } - - container.style.left = `${rect[0]}px`; - container.style.top = `${rect[1]}px`; - - if (data.hasOwnCanvas) { - container.style.width = container.style.height = "auto"; - } else { - container.style.width = `${width}px`; - container.style.height = `${height}px`; - } - - return container; - } - - _createQuadrilaterals(ignoreBorder = false) { - if (!this.data.quadPoints) { - return null; - } - - const quadrilaterals = []; - const savedRect = this.data.rect; - - for (const quadPoint of this.data.quadPoints) { - this.data.rect = [quadPoint[2].x, quadPoint[2].y, quadPoint[1].x, quadPoint[1].y]; - quadrilaterals.push(this._createContainer(ignoreBorder)); - } - - this.data.rect = savedRect; - return quadrilaterals; - } - - _createPopup(trigger, data) { - let container = this.container; - - if (this.quadrilaterals) { - trigger = trigger || this.quadrilaterals; - container = this.quadrilaterals[0]; - } - - if (!trigger) { - trigger = document.createElement("div"); - trigger.style.height = container.style.height; - trigger.style.width = container.style.width; - container.appendChild(trigger); - } - - const popupElement = new PopupElement({ - container, - trigger, - color: data.color, - titleObj: data.titleObj, - modificationDate: data.modificationDate, - contentsObj: data.contentsObj, - richText: data.richText, - hideWrapper: true - }); - const popup = popupElement.render(); - popup.style.left = container.style.width; - container.appendChild(popup); - } - - _renderQuadrilaterals(className) { - for (const quadrilateral of this.quadrilaterals) { - quadrilateral.className = className; - } - - return this.quadrilaterals; - } - - render() { - (0, _util.unreachable)("Abstract method `AnnotationElement.render` called"); - } - - _getElementsByName(name, skipId = null) { - const fields = []; - - if (this._fieldObjects) { - const fieldObj = this._fieldObjects[name]; - - if (fieldObj) { - for (const { - page, - id, - exportValues - } of fieldObj) { - if (page === -1) { - continue; - } - - if (id === skipId) { - continue; - } - - const exportValue = typeof exportValues === "string" ? exportValues : null; - const domElement = document.getElementById(id); - - if (domElement && !GetElementsByNameSet.has(domElement)) { - (0, _util.warn)(`_getElementsByName - element not allowed: ${id}`); - continue; - } - - fields.push({ - id, - exportValue, - domElement - }); - } - } - - return fields; - } - - for (const domElement of document.getElementsByName(name)) { - const { - id, - exportValue - } = domElement; - - if (id === skipId) { - continue; - } - - if (!GetElementsByNameSet.has(domElement)) { - continue; - } - - fields.push({ - id, - exportValue, - domElement - }); - } - - return fields; - } - - static get platform() { - const platform = typeof navigator !== "undefined" ? navigator.platform : ""; - return (0, _util.shadow)(this, "platform", { - isWin: platform.includes("Win"), - isMac: platform.includes("Mac") - }); - } - -} - -class LinkAnnotationElement extends AnnotationElement { - constructor(parameters, options = null) { - const isRenderable = !!(parameters.data.url || parameters.data.dest || parameters.data.action || parameters.data.isTooltipOnly || parameters.data.resetForm || parameters.data.actions && (parameters.data.actions.Action || parameters.data.actions["Mouse Up"] || parameters.data.actions["Mouse Down"])); - super(parameters, { - isRenderable, - ignoreBorder: !!options?.ignoreBorder, - createQuadrilaterals: true - }); - } - - render() { - const { - data, - linkService - } = this; - const link = document.createElement("a"); - - if (data.url) { - if (!linkService.addLinkAttributes) { - (0, _util.warn)("LinkAnnotationElement.render - missing `addLinkAttributes`-method on the `linkService`-instance."); - } - - linkService.addLinkAttributes?.(link, data.url, data.newWindow); - } else if (data.action) { - this._bindNamedAction(link, data.action); - } else if (data.dest) { - this._bindLink(link, data.dest); - } else { - let hasClickAction = false; - - if (data.actions && (data.actions.Action || data.actions["Mouse Up"] || data.actions["Mouse Down"]) && this.enableScripting && this.hasJSActions) { - hasClickAction = true; - - this._bindJSAction(link, data); - } - - if (data.resetForm) { - this._bindResetFormAction(link, data.resetForm); - } else if (!hasClickAction) { - this._bindLink(link, ""); - } - } - - if (this.quadrilaterals) { - return this._renderQuadrilaterals("linkAnnotation").map((quadrilateral, index) => { - const linkElement = index === 0 ? link : link.cloneNode(); - quadrilateral.appendChild(linkElement); - return quadrilateral; - }); - } - - this.container.className = "linkAnnotation"; - this.container.appendChild(link); - return this.container; - } - - _bindLink(link, destination) { - link.href = this.linkService.getDestinationHash(destination); - - link.onclick = () => { - if (destination) { - this.linkService.goToDestination(destination); - } - - return false; - }; - - if (destination || destination === "") { - link.className = "internalLink"; - } - } - - _bindNamedAction(link, action) { - link.href = this.linkService.getAnchorUrl(""); - - link.onclick = () => { - this.linkService.executeNamedAction(action); - return false; - }; - - link.className = "internalLink"; - } - - _bindJSAction(link, data) { - link.href = this.linkService.getAnchorUrl(""); - const map = new Map([["Action", "onclick"], ["Mouse Up", "onmouseup"], ["Mouse Down", "onmousedown"]]); - - for (const name of Object.keys(data.actions)) { - const jsName = map.get(name); - - if (!jsName) { - continue; - } - - link[jsName] = () => { - this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { - source: this, - detail: { - id: data.id, - name - } - }); - return false; - }; - } - - if (!link.onclick) { - link.onclick = () => false; - } - - link.className = "internalLink"; - } - - _bindResetFormAction(link, resetForm) { - const otherClickAction = link.onclick; - - if (!otherClickAction) { - link.href = this.linkService.getAnchorUrl(""); - } - - link.className = "internalLink"; - - if (!this._fieldObjects) { - (0, _util.warn)(`_bindResetFormAction - "resetForm" action not supported, ` + "ensure that the `fieldObjects` parameter is provided."); - - if (!otherClickAction) { - link.onclick = () => false; - } - - return; - } - - link.onclick = () => { - if (otherClickAction) { - otherClickAction(); - } - - const { - fields: resetFormFields, - refs: resetFormRefs, - include - } = resetForm; - const allFields = []; - - if (resetFormFields.length !== 0 || resetFormRefs.length !== 0) { - const fieldIds = new Set(resetFormRefs); - - for (const fieldName of resetFormFields) { - const fields = this._fieldObjects[fieldName] || []; - - for (const { - id - } of fields) { - fieldIds.add(id); - } - } - - for (const fields of Object.values(this._fieldObjects)) { - for (const field of fields) { - if (fieldIds.has(field.id) === include) { - allFields.push(field); - } - } - } - } else { - for (const fields of Object.values(this._fieldObjects)) { - allFields.push(...fields); - } - } - - const storage = this.annotationStorage; - const allIds = []; - - for (const field of allFields) { - const { - id - } = field; - allIds.push(id); - - switch (field.type) { - case "text": - { - const value = field.defaultValue || ""; - storage.setValue(id, { - value, - valueAsString: value - }); - break; - } - - case "checkbox": - case "radiobutton": - { - const value = field.defaultValue === field.exportValues; - storage.setValue(id, { - value - }); - break; - } - - case "combobox": - case "listbox": - { - const value = field.defaultValue || ""; - storage.setValue(id, { - value - }); - break; - } - - default: - continue; - } - - const domElement = document.getElementById(id); - - if (!domElement || !GetElementsByNameSet.has(domElement)) { - continue; - } - - domElement.dispatchEvent(new Event("resetform")); - } - - if (this.enableScripting) { - this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { - source: this, - detail: { - id: "app", - ids: allIds, - name: "ResetForm" - } - }); - } - - return false; - }; - } - -} - -class TextAnnotationElement extends AnnotationElement { - constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); - super(parameters, { - isRenderable - }); - } - - render() { - this.container.className = "textAnnotation"; - const image = document.createElement("img"); - image.style.height = this.container.style.height; - image.style.width = this.container.style.width; - image.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg"; - image.alt = "[{{type}} Annotation]"; - image.dataset.l10nId = "text_annotation_type"; - image.dataset.l10nArgs = JSON.stringify({ - type: this.data.name - }); - - if (!this.data.hasPopup) { - this._createPopup(image, this.data); - } - - this.container.appendChild(image); - return this.container; - } - -} - -class WidgetAnnotationElement extends AnnotationElement { - render() { - if (this.data.alternativeText) { - this.container.title = this.data.alternativeText; - } - - return this.container; - } - - _getKeyModifier(event) { - const { - isWin, - isMac - } = AnnotationElement.platform; - return isWin && event.ctrlKey || isMac && event.metaKey; - } - - _setEventListener(element, baseName, eventName, valueGetter) { - if (baseName.includes("mouse")) { - element.addEventListener(baseName, event => { - this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { - source: this, - detail: { - id: this.data.id, - name: eventName, - value: valueGetter(event), - shift: event.shiftKey, - modifier: this._getKeyModifier(event) - } - }); - }); - } else { - element.addEventListener(baseName, event => { - this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { - source: this, - detail: { - id: this.data.id, - name: eventName, - value: event.target.checked - } - }); - }); - } - } - - _setEventListeners(element, names, getter) { - for (const [baseName, eventName] of names) { - if (eventName === "Action" || this.data.actions?.[eventName]) { - this._setEventListener(element, baseName, eventName, getter); - } - } - } - - _setBackgroundColor(element) { - const color = this.data.backgroundColor || null; - element.style.backgroundColor = color === null ? "transparent" : _util.Util.makeHexColor(color[0], color[1], color[2]); - } - - _dispatchEventFromSandbox(actions, jsEvent) { - const setColor = (jsName, styleName, event) => { - const color = event.detail[jsName]; - event.target.style[styleName] = _scripting_utils.ColorConverters[`${color[0]}_HTML`](color.slice(1)); - }; - - const commonActions = { - display: event => { - const hidden = event.detail.display % 2 === 1; - event.target.style.visibility = hidden ? "hidden" : "visible"; - this.annotationStorage.setValue(this.data.id, { - hidden, - print: event.detail.display === 0 || event.detail.display === 3 - }); - }, - print: event => { - this.annotationStorage.setValue(this.data.id, { - print: event.detail.print - }); - }, - hidden: event => { - event.target.style.visibility = event.detail.hidden ? "hidden" : "visible"; - this.annotationStorage.setValue(this.data.id, { - hidden: event.detail.hidden - }); - }, - focus: event => { - setTimeout(() => event.target.focus({ - preventScroll: false - }), 0); - }, - userName: event => { - event.target.title = event.detail.userName; - }, - readonly: event => { - if (event.detail.readonly) { - event.target.setAttribute("readonly", ""); - } else { - event.target.removeAttribute("readonly"); - } - }, - required: event => { - if (event.detail.required) { - event.target.setAttribute("required", ""); - } else { - event.target.removeAttribute("required"); - } - }, - bgColor: event => { - setColor("bgColor", "backgroundColor", event); - }, - fillColor: event => { - setColor("fillColor", "backgroundColor", event); - }, - fgColor: event => { - setColor("fgColor", "color", event); - }, - textColor: event => { - setColor("textColor", "color", event); - }, - borderColor: event => { - setColor("borderColor", "borderColor", event); - }, - strokeColor: event => { - setColor("strokeColor", "borderColor", event); - } - }; - - for (const name of Object.keys(jsEvent.detail)) { - const action = actions[name] || commonActions[name]; - - if (action) { - action(jsEvent); - } - } - } - -} - -class TextWidgetAnnotationElement extends WidgetAnnotationElement { - constructor(parameters) { - const isRenderable = parameters.renderForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue; - super(parameters, { - isRenderable - }); - } - - setPropertyOnSiblings(base, key, value, keyInStorage) { - const storage = this.annotationStorage; - - for (const element of this._getElementsByName(base.name, base.id)) { - if (element.domElement) { - element.domElement[key] = value; - } - - storage.setValue(element.id, { - [keyInStorage]: value - }); - } - } - - render() { - const storage = this.annotationStorage; - const id = this.data.id; - this.container.className = "textWidgetAnnotation"; - let element = null; - - if (this.renderForms) { - const storedData = storage.getValue(id, { - value: this.data.fieldValue, - valueAsString: this.data.fieldValue - }); - const textContent = storedData.valueAsString || storedData.value || ""; - const elementData = { - userValue: null, - formattedValue: null, - beforeInputSelectionRange: null, - beforeInputValue: null - }; - - if (this.data.multiLine) { - element = document.createElement("textarea"); - element.textContent = textContent; - } else { - element = document.createElement("input"); - element.type = "text"; - element.setAttribute("value", textContent); - } - - GetElementsByNameSet.add(element); - element.disabled = this.data.readOnly; - element.name = this.data.fieldName; - element.tabIndex = DEFAULT_TAB_INDEX; - elementData.userValue = textContent; - element.setAttribute("id", id); - element.addEventListener("input", event => { - storage.setValue(id, { - value: event.target.value - }); - this.setPropertyOnSiblings(element, "value", event.target.value, "value"); - }); - element.addEventListener("resetform", event => { - const defaultValue = this.data.defaultFieldValue || ""; - element.value = elementData.userValue = defaultValue; - delete elementData.formattedValue; - }); - - let blurListener = event => { - if (elementData.formattedValue) { - event.target.value = elementData.formattedValue; - } - - event.target.scrollLeft = 0; - elementData.beforeInputSelectionRange = null; - }; - - if (this.enableScripting && this.hasJSActions) { - element.addEventListener("focus", event => { - if (elementData.userValue) { - event.target.value = elementData.userValue; - } - }); - element.addEventListener("updatefromsandbox", jsEvent => { - const actions = { - value(event) { - elementData.userValue = event.detail.value || ""; - storage.setValue(id, { - value: elementData.userValue.toString() - }); - - if (!elementData.formattedValue) { - event.target.value = elementData.userValue; - } - }, - - valueAsString(event) { - elementData.formattedValue = event.detail.valueAsString || ""; - - if (event.target !== document.activeElement) { - event.target.value = elementData.formattedValue; - } - - storage.setValue(id, { - formattedValue: elementData.formattedValue - }); - }, - - selRange(event) { - const [selStart, selEnd] = event.detail.selRange; - - if (selStart >= 0 && selEnd < event.target.value.length) { - event.target.setSelectionRange(selStart, selEnd); - } - } - - }; - - this._dispatchEventFromSandbox(actions, jsEvent); - }); - element.addEventListener("keydown", event => { - elementData.beforeInputValue = event.target.value; - let commitKey = -1; - - if (event.key === "Escape") { - commitKey = 0; - } else if (event.key === "Enter") { - commitKey = 2; - } else if (event.key === "Tab") { - commitKey = 3; - } - - if (commitKey === -1) { - return; - } - - elementData.userValue = event.target.value; - this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { - source: this, - detail: { - id, - name: "Keystroke", - value: event.target.value, - willCommit: true, - commitKey, - selStart: event.target.selectionStart, - selEnd: event.target.selectionEnd - } - }); - }); - const _blurListener = blurListener; - blurListener = null; - element.addEventListener("blur", event => { - if (this._mouseState.isDown) { - elementData.userValue = event.target.value; - this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { - source: this, - detail: { - id, - name: "Keystroke", - value: event.target.value, - willCommit: true, - commitKey: 1, - selStart: event.target.selectionStart, - selEnd: event.target.selectionEnd - } - }); - } - - _blurListener(event); - }); - element.addEventListener("mousedown", event => { - elementData.beforeInputValue = event.target.value; - elementData.beforeInputSelectionRange = null; - }); - element.addEventListener("keyup", event => { - if (event.target.selectionStart === event.target.selectionEnd) { - elementData.beforeInputSelectionRange = null; - } - }); - element.addEventListener("select", event => { - elementData.beforeInputSelectionRange = [event.target.selectionStart, event.target.selectionEnd]; - }); - - if (this.data.actions?.Keystroke) { - element.addEventListener("input", event => { - let selStart = -1; - let selEnd = -1; - - if (elementData.beforeInputSelectionRange) { - [selStart, selEnd] = elementData.beforeInputSelectionRange; - } - - this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { - source: this, - detail: { - id, - name: "Keystroke", - value: elementData.beforeInputValue, - change: event.data, - willCommit: false, - selStart, - selEnd - } - }); - }); - } - - this._setEventListeners(element, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.value); - } - - if (blurListener) { - element.addEventListener("blur", blurListener); - } - - if (this.data.maxLen !== null) { - element.maxLength = this.data.maxLen; - } - - if (this.data.comb) { - const fieldWidth = this.data.rect[2] - this.data.rect[0]; - const combWidth = fieldWidth / this.data.maxLen; - element.classList.add("comb"); - element.style.letterSpacing = `calc(${combWidth}px - 1ch)`; - } - } else { - element = document.createElement("div"); - element.textContent = this.data.fieldValue; - element.style.verticalAlign = "middle"; - element.style.display = "table-cell"; - } - - this._setTextStyle(element); - - this._setBackgroundColor(element); - - this.container.appendChild(element); - return this.container; - } - - _setTextStyle(element) { - const TEXT_ALIGNMENT = ["left", "center", "right"]; - const { - fontSize, - fontColor - } = this.data.defaultAppearanceData; - const style = element.style; - - if (fontSize) { - style.fontSize = `${fontSize}px`; - } - - style.color = _util.Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]); - - if (this.data.textAlignment !== null) { - style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment]; - } - } - -} - -class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement { - constructor(parameters) { - super(parameters, { - isRenderable: parameters.renderForms - }); - } - - render() { - const storage = this.annotationStorage; - const data = this.data; - const id = data.id; - let value = storage.getValue(id, { - value: data.exportValue === data.fieldValue - }).value; - - if (typeof value === "string") { - value = value !== "Off"; - storage.setValue(id, { - value - }); - } - - this.container.className = "buttonWidgetAnnotation checkBox"; - const element = document.createElement("input"); - GetElementsByNameSet.add(element); - element.disabled = data.readOnly; - element.type = "checkbox"; - element.name = data.fieldName; - - if (value) { - element.setAttribute("checked", true); - } - - element.setAttribute("id", id); - element.setAttribute("exportValue", data.exportValue); - element.tabIndex = DEFAULT_TAB_INDEX; - element.addEventListener("change", event => { - const { - name, - checked - } = event.target; - - for (const checkbox of this._getElementsByName(name, id)) { - const curChecked = checked && checkbox.exportValue === data.exportValue; - - if (checkbox.domElement) { - checkbox.domElement.checked = curChecked; - } - - storage.setValue(checkbox.id, { - value: curChecked - }); - } - - storage.setValue(id, { - value: checked - }); - }); - element.addEventListener("resetform", event => { - const defaultValue = data.defaultFieldValue || "Off"; - event.target.checked = defaultValue === data.exportValue; - }); - - if (this.enableScripting && this.hasJSActions) { - element.addEventListener("updatefromsandbox", jsEvent => { - const actions = { - value(event) { - event.target.checked = event.detail.value !== "Off"; - storage.setValue(id, { - value: event.target.checked - }); - } - - }; - - this._dispatchEventFromSandbox(actions, jsEvent); - }); - - this._setEventListeners(element, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.checked); - } - - this._setBackgroundColor(element); - - this.container.appendChild(element); - return this.container; - } - -} - -class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement { - constructor(parameters) { - super(parameters, { - isRenderable: parameters.renderForms - }); - } - - render() { - this.container.className = "buttonWidgetAnnotation radioButton"; - const storage = this.annotationStorage; - const data = this.data; - const id = data.id; - let value = storage.getValue(id, { - value: data.fieldValue === data.buttonValue - }).value; - - if (typeof value === "string") { - value = value !== data.buttonValue; - storage.setValue(id, { - value - }); - } - - const element = document.createElement("input"); - GetElementsByNameSet.add(element); - element.disabled = data.readOnly; - element.type = "radio"; - element.name = data.fieldName; - - if (value) { - element.setAttribute("checked", true); - } - - element.setAttribute("id", id); - element.tabIndex = DEFAULT_TAB_INDEX; - element.addEventListener("change", event => { - const { - name, - checked - } = event.target; - - for (const radio of this._getElementsByName(name, id)) { - storage.setValue(radio.id, { - value: false - }); - } - - storage.setValue(id, { - value: checked - }); - }); - element.addEventListener("resetform", event => { - const defaultValue = data.defaultFieldValue; - event.target.checked = defaultValue !== null && defaultValue !== undefined && defaultValue === data.buttonValue; - }); - - if (this.enableScripting && this.hasJSActions) { - const pdfButtonValue = data.buttonValue; - element.addEventListener("updatefromsandbox", jsEvent => { - const actions = { - value: event => { - const checked = pdfButtonValue === event.detail.value; - - for (const radio of this._getElementsByName(event.target.name)) { - const curChecked = checked && radio.id === id; - - if (radio.domElement) { - radio.domElement.checked = curChecked; - } - - storage.setValue(radio.id, { - value: curChecked - }); - } - } - }; - - this._dispatchEventFromSandbox(actions, jsEvent); - }); - - this._setEventListeners(element, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.checked); - } - - this._setBackgroundColor(element); - - this.container.appendChild(element); - return this.container; - } - -} - -class PushButtonWidgetAnnotationElement extends LinkAnnotationElement { - constructor(parameters) { - super(parameters, { - ignoreBorder: parameters.data.hasAppearance - }); - } - - render() { - const container = super.render(); - container.className = "buttonWidgetAnnotation pushButton"; - - if (this.data.alternativeText) { - container.title = this.data.alternativeText; - } - - return container; - } - -} - -class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement { - constructor(parameters) { - super(parameters, { - isRenderable: parameters.renderForms - }); - } - - render() { - this.container.className = "choiceWidgetAnnotation"; - const storage = this.annotationStorage; - const id = this.data.id; - storage.getValue(id, { - value: this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : undefined - }); - let { - fontSize - } = this.data.defaultAppearanceData; - - if (!fontSize) { - fontSize = 9; - } - - const fontSizeStyle = `calc(${fontSize}px * var(--zoom-factor))`; - const selectElement = document.createElement("select"); - GetElementsByNameSet.add(selectElement); - selectElement.disabled = this.data.readOnly; - selectElement.name = this.data.fieldName; - selectElement.setAttribute("id", id); - selectElement.tabIndex = DEFAULT_TAB_INDEX; - selectElement.style.fontSize = `${fontSize}px`; - - if (!this.data.combo) { - selectElement.size = this.data.options.length; - - if (this.data.multiSelect) { - selectElement.multiple = true; - } - } - - selectElement.addEventListener("resetform", event => { - const defaultValue = this.data.defaultFieldValue; - - for (const option of selectElement.options) { - option.selected = option.value === defaultValue; - } - }); - - for (const option of this.data.options) { - const optionElement = document.createElement("option"); - optionElement.textContent = option.displayValue; - optionElement.value = option.exportValue; - - if (this.data.combo) { - optionElement.style.fontSize = fontSizeStyle; - } - - if (this.data.fieldValue.includes(option.exportValue)) { - optionElement.setAttribute("selected", true); - } - - selectElement.appendChild(optionElement); - } - - const getValue = (event, isExport) => { - const name = isExport ? "value" : "textContent"; - const options = event.target.options; - - if (!event.target.multiple) { - return options.selectedIndex === -1 ? null : options[options.selectedIndex][name]; - } - - return Array.prototype.filter.call(options, option => option.selected).map(option => option[name]); - }; - - const getItems = event => { - const options = event.target.options; - return Array.prototype.map.call(options, option => { - return { - displayValue: option.textContent, - exportValue: option.value - }; - }); - }; - - if (this.enableScripting && this.hasJSActions) { - selectElement.addEventListener("updatefromsandbox", jsEvent => { - const actions = { - value(event) { - const value = event.detail.value; - const values = new Set(Array.isArray(value) ? value : [value]); - - for (const option of selectElement.options) { - option.selected = values.has(option.value); - } - - storage.setValue(id, { - value: getValue(event, true) - }); - }, - - multipleSelection(event) { - selectElement.multiple = true; - }, - - remove(event) { - const options = selectElement.options; - const index = event.detail.remove; - options[index].selected = false; - selectElement.remove(index); - - if (options.length > 0) { - const i = Array.prototype.findIndex.call(options, option => option.selected); - - if (i === -1) { - options[0].selected = true; - } - } - - storage.setValue(id, { - value: getValue(event, true), - items: getItems(event) - }); - }, - - clear(event) { - while (selectElement.length !== 0) { - selectElement.remove(0); - } - - storage.setValue(id, { - value: null, - items: [] - }); - }, - - insert(event) { - const { - index, - displayValue, - exportValue - } = event.detail.insert; - const optionElement = document.createElement("option"); - optionElement.textContent = displayValue; - optionElement.value = exportValue; - selectElement.insertBefore(optionElement, selectElement.children[index]); - storage.setValue(id, { - value: getValue(event, true), - items: getItems(event) - }); - }, - - items(event) { - const { - items - } = event.detail; - - while (selectElement.length !== 0) { - selectElement.remove(0); - } - - for (const item of items) { - const { - displayValue, - exportValue - } = item; - const optionElement = document.createElement("option"); - optionElement.textContent = displayValue; - optionElement.value = exportValue; - selectElement.appendChild(optionElement); - } - - if (selectElement.options.length > 0) { - selectElement.options[0].selected = true; - } - - storage.setValue(id, { - value: getValue(event, true), - items: getItems(event) - }); - }, - - indices(event) { - const indices = new Set(event.detail.indices); - - for (const option of event.target.options) { - option.selected = indices.has(option.index); - } - - storage.setValue(id, { - value: getValue(event, true) - }); - }, - - editable(event) { - event.target.disabled = !event.detail.editable; - } - - }; - - this._dispatchEventFromSandbox(actions, jsEvent); - }); - selectElement.addEventListener("input", event => { - const exportValue = getValue(event, true); - const value = getValue(event, false); - storage.setValue(id, { - value: exportValue - }); - this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { - source: this, - detail: { - id, - name: "Keystroke", - value, - changeEx: exportValue, - willCommit: true, - commitKey: 1, - keyDown: false - } - }); - }); - - this._setEventListeners(selectElement, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"], ["input", "Action"]], event => event.target.checked); - } else { - selectElement.addEventListener("input", function (event) { - storage.setValue(id, { - value: getValue(event) - }); - }); - } - - this._setBackgroundColor(selectElement); - - this.container.appendChild(selectElement); - return this.container; - } - -} - -class PopupAnnotationElement extends AnnotationElement { - constructor(parameters) { - const isRenderable = !!(parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); - super(parameters, { - isRenderable - }); - } - - render() { - const IGNORE_TYPES = ["Line", "Square", "Circle", "PolyLine", "Polygon", "Ink"]; - this.container.className = "popupAnnotation"; - - if (IGNORE_TYPES.includes(this.data.parentType)) { - return this.container; - } - - const selector = `[data-annotation-id="${this.data.parentId}"]`; - const parentElements = this.layer.querySelectorAll(selector); - - if (parentElements.length === 0) { - return this.container; - } - - const popup = new PopupElement({ - container: this.container, - trigger: Array.from(parentElements), - color: this.data.color, - titleObj: this.data.titleObj, - modificationDate: this.data.modificationDate, - contentsObj: this.data.contentsObj, - richText: this.data.richText - }); - const page = this.page; - - const rect = _util.Util.normalizeRect([this.data.parentRect[0], page.view[3] - this.data.parentRect[1] + page.view[1], this.data.parentRect[2], page.view[3] - this.data.parentRect[3] + page.view[1]]); - - const popupLeft = rect[0] + this.data.parentRect[2] - this.data.parentRect[0]; - const popupTop = rect[1]; - this.container.style.transformOrigin = `${-popupLeft}px ${-popupTop}px`; - this.container.style.left = `${popupLeft}px`; - this.container.style.top = `${popupTop}px`; - this.container.appendChild(popup.render()); - return this.container; - } - -} - -class PopupElement { - constructor(parameters) { - this.container = parameters.container; - this.trigger = parameters.trigger; - this.color = parameters.color; - this.titleObj = parameters.titleObj; - this.modificationDate = parameters.modificationDate; - this.contentsObj = parameters.contentsObj; - this.richText = parameters.richText; - this.hideWrapper = parameters.hideWrapper || false; - this.pinned = false; - } - - render() { - const BACKGROUND_ENLIGHT = 0.7; - const wrapper = document.createElement("div"); - wrapper.className = "popupWrapper"; - this.hideElement = this.hideWrapper ? wrapper : this.container; - this.hideElement.hidden = true; - const popup = document.createElement("div"); - popup.className = "popup"; - const color = this.color; - - if (color) { - const r = BACKGROUND_ENLIGHT * (255 - color[0]) + color[0]; - const g = BACKGROUND_ENLIGHT * (255 - color[1]) + color[1]; - const b = BACKGROUND_ENLIGHT * (255 - color[2]) + color[2]; - popup.style.backgroundColor = _util.Util.makeHexColor(r | 0, g | 0, b | 0); - } - - const title = document.createElement("h1"); - title.dir = this.titleObj.dir; - title.textContent = this.titleObj.str; - popup.appendChild(title); - - const dateObject = _display_utils.PDFDateString.toDateObject(this.modificationDate); - - if (dateObject) { - const modificationDate = document.createElement("span"); - modificationDate.className = "popupDate"; - modificationDate.textContent = "{{date}}, {{time}}"; - modificationDate.dataset.l10nId = "annotation_date_string"; - modificationDate.dataset.l10nArgs = JSON.stringify({ - date: dateObject.toLocaleDateString(), - time: dateObject.toLocaleTimeString() - }); - popup.appendChild(modificationDate); - } - - if (this.richText?.str && (!this.contentsObj?.str || this.contentsObj.str === this.richText.str)) { - _xfa_layer.XfaLayer.render({ - xfaHtml: this.richText.html, - intent: "richText", - div: popup - }); - - popup.lastChild.className = "richText popupContent"; - } else { - const contents = this._formatContents(this.contentsObj); - - popup.appendChild(contents); - } - - if (!Array.isArray(this.trigger)) { - this.trigger = [this.trigger]; - } - - for (const element of this.trigger) { - element.addEventListener("click", this._toggle.bind(this)); - element.addEventListener("mouseover", this._show.bind(this, false)); - element.addEventListener("mouseout", this._hide.bind(this, false)); - } - - popup.addEventListener("click", this._hide.bind(this, true)); - wrapper.appendChild(popup); - return wrapper; - } - - _formatContents({ - str, - dir - }) { - const p = document.createElement("p"); - p.className = "popupContent"; - p.dir = dir; - const lines = str.split(/(?:\r\n?|\n)/); - - for (let i = 0, ii = lines.length; i < ii; ++i) { - const line = lines[i]; - p.appendChild(document.createTextNode(line)); - - if (i < ii - 1) { - p.appendChild(document.createElement("br")); - } - } - - return p; - } - - _toggle() { - if (this.pinned) { - this._hide(true); - } else { - this._show(true); - } - } - - _show(pin = false) { - if (pin) { - this.pinned = true; - } - - if (this.hideElement.hidden) { - this.hideElement.hidden = false; - this.container.style.zIndex += 1; - } - } - - _hide(unpin = true) { - if (unpin) { - this.pinned = false; - } - - if (!this.hideElement.hidden && !this.pinned) { - this.hideElement.hidden = true; - this.container.style.zIndex -= 1; - } - } - -} - -class FreeTextAnnotationElement extends AnnotationElement { - constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); - super(parameters, { - isRenderable, - ignoreBorder: true - }); - } - - render() { - this.container.className = "freeTextAnnotation"; - - if (!this.data.hasPopup) { - this._createPopup(null, this.data); - } - - return this.container; - } - -} - -class LineAnnotationElement extends AnnotationElement { - constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); - super(parameters, { - isRenderable, - ignoreBorder: true - }); - } - - render() { - this.container.className = "lineAnnotation"; - const data = this.data; - const width = data.rect[2] - data.rect[0]; - const height = data.rect[3] - data.rect[1]; - const svg = this.svgFactory.create(width, height); - const line = this.svgFactory.createElement("svg:line"); - line.setAttribute("x1", data.rect[2] - data.lineCoordinates[0]); - line.setAttribute("y1", data.rect[3] - data.lineCoordinates[1]); - line.setAttribute("x2", data.rect[2] - data.lineCoordinates[2]); - line.setAttribute("y2", data.rect[3] - data.lineCoordinates[3]); - line.setAttribute("stroke-width", data.borderStyle.width || 1); - line.setAttribute("stroke", "transparent"); - line.setAttribute("fill", "transparent"); - svg.appendChild(line); - this.container.append(svg); - - this._createPopup(line, data); - - return this.container; - } - -} - -class SquareAnnotationElement extends AnnotationElement { - constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); - super(parameters, { - isRenderable, - ignoreBorder: true - }); - } - - render() { - this.container.className = "squareAnnotation"; - const data = this.data; - const width = data.rect[2] - data.rect[0]; - const height = data.rect[3] - data.rect[1]; - const svg = this.svgFactory.create(width, height); - const borderWidth = data.borderStyle.width; - const square = this.svgFactory.createElement("svg:rect"); - square.setAttribute("x", borderWidth / 2); - square.setAttribute("y", borderWidth / 2); - square.setAttribute("width", width - borderWidth); - square.setAttribute("height", height - borderWidth); - square.setAttribute("stroke-width", borderWidth || 1); - square.setAttribute("stroke", "transparent"); - square.setAttribute("fill", "transparent"); - svg.appendChild(square); - this.container.append(svg); - - this._createPopup(square, data); - - return this.container; - } - -} - -class CircleAnnotationElement extends AnnotationElement { - constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); - super(parameters, { - isRenderable, - ignoreBorder: true - }); - } - - render() { - this.container.className = "circleAnnotation"; - const data = this.data; - const width = data.rect[2] - data.rect[0]; - const height = data.rect[3] - data.rect[1]; - const svg = this.svgFactory.create(width, height); - const borderWidth = data.borderStyle.width; - const circle = this.svgFactory.createElement("svg:ellipse"); - circle.setAttribute("cx", width / 2); - circle.setAttribute("cy", height / 2); - circle.setAttribute("rx", width / 2 - borderWidth / 2); - circle.setAttribute("ry", height / 2 - borderWidth / 2); - circle.setAttribute("stroke-width", borderWidth || 1); - circle.setAttribute("stroke", "transparent"); - circle.setAttribute("fill", "transparent"); - svg.appendChild(circle); - this.container.append(svg); - - this._createPopup(circle, data); - - return this.container; - } - -} - -class PolylineAnnotationElement extends AnnotationElement { - constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); - super(parameters, { - isRenderable, - ignoreBorder: true - }); - this.containerClassName = "polylineAnnotation"; - this.svgElementName = "svg:polyline"; - } - - render() { - this.container.className = this.containerClassName; - const data = this.data; - const width = data.rect[2] - data.rect[0]; - const height = data.rect[3] - data.rect[1]; - const svg = this.svgFactory.create(width, height); - let points = []; - - for (const coordinate of data.vertices) { - const x = coordinate.x - data.rect[0]; - const y = data.rect[3] - coordinate.y; - points.push(x + "," + y); - } - - points = points.join(" "); - const polyline = this.svgFactory.createElement(this.svgElementName); - polyline.setAttribute("points", points); - polyline.setAttribute("stroke-width", data.borderStyle.width || 1); - polyline.setAttribute("stroke", "transparent"); - polyline.setAttribute("fill", "transparent"); - svg.appendChild(polyline); - this.container.append(svg); - - this._createPopup(polyline, data); - - return this.container; - } - -} - -class PolygonAnnotationElement extends PolylineAnnotationElement { - constructor(parameters) { - super(parameters); - this.containerClassName = "polygonAnnotation"; - this.svgElementName = "svg:polygon"; - } - -} - -class CaretAnnotationElement extends AnnotationElement { - constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); - super(parameters, { - isRenderable, - ignoreBorder: true - }); - } - - render() { - this.container.className = "caretAnnotation"; - - if (!this.data.hasPopup) { - this._createPopup(null, this.data); - } - - return this.container; - } - -} - -class InkAnnotationElement extends AnnotationElement { - constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); - super(parameters, { - isRenderable, - ignoreBorder: true - }); - this.containerClassName = "inkAnnotation"; - this.svgElementName = "svg:polyline"; - } - - render() { - this.container.className = this.containerClassName; - const data = this.data; - const width = data.rect[2] - data.rect[0]; - const height = data.rect[3] - data.rect[1]; - const svg = this.svgFactory.create(width, height); - - for (const inkList of data.inkLists) { - let points = []; - - for (const coordinate of inkList) { - const x = coordinate.x - data.rect[0]; - const y = data.rect[3] - coordinate.y; - points.push(`${x},${y}`); - } - - points = points.join(" "); - const polyline = this.svgFactory.createElement(this.svgElementName); - polyline.setAttribute("points", points); - polyline.setAttribute("stroke-width", data.borderStyle.width || 1); - polyline.setAttribute("stroke", "transparent"); - polyline.setAttribute("fill", "transparent"); - - this._createPopup(polyline, data); - - svg.appendChild(polyline); - } - - this.container.append(svg); - return this.container; - } - -} - -class HighlightAnnotationElement extends AnnotationElement { - constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); - super(parameters, { - isRenderable, - ignoreBorder: true, - createQuadrilaterals: true - }); - } - - render() { - if (!this.data.hasPopup) { - this._createPopup(null, this.data); - } - - if (this.quadrilaterals) { - return this._renderQuadrilaterals("highlightAnnotation"); - } - - this.container.className = "highlightAnnotation"; - return this.container; - } - -} - -class UnderlineAnnotationElement extends AnnotationElement { - constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); - super(parameters, { - isRenderable, - ignoreBorder: true, - createQuadrilaterals: true - }); - } - - render() { - if (!this.data.hasPopup) { - this._createPopup(null, this.data); - } - - if (this.quadrilaterals) { - return this._renderQuadrilaterals("underlineAnnotation"); - } - - this.container.className = "underlineAnnotation"; - return this.container; - } - -} - -class SquigglyAnnotationElement extends AnnotationElement { - constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); - super(parameters, { - isRenderable, - ignoreBorder: true, - createQuadrilaterals: true - }); - } - - render() { - if (!this.data.hasPopup) { - this._createPopup(null, this.data); - } - - if (this.quadrilaterals) { - return this._renderQuadrilaterals("squigglyAnnotation"); - } - - this.container.className = "squigglyAnnotation"; - return this.container; - } - -} - -class StrikeOutAnnotationElement extends AnnotationElement { - constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); - super(parameters, { - isRenderable, - ignoreBorder: true, - createQuadrilaterals: true - }); - } - - render() { - if (!this.data.hasPopup) { - this._createPopup(null, this.data); - } - - if (this.quadrilaterals) { - return this._renderQuadrilaterals("strikeoutAnnotation"); - } - - this.container.className = "strikeoutAnnotation"; - return this.container; - } - -} - -class StampAnnotationElement extends AnnotationElement { - constructor(parameters) { - const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); - super(parameters, { - isRenderable, - ignoreBorder: true - }); - } - - render() { - this.container.className = "stampAnnotation"; - - if (!this.data.hasPopup) { - this._createPopup(null, this.data); - } - - return this.container; - } - -} - -class FileAttachmentAnnotationElement extends AnnotationElement { - constructor(parameters) { - super(parameters, { - isRenderable: true - }); - const { - filename, - content - } = this.data.file; - this.filename = (0, _display_utils.getFilenameFromUrl)(filename); - this.content = content; - this.linkService.eventBus?.dispatch("fileattachmentannotation", { - source: this, - id: (0, _util.stringToPDFString)(filename), - filename, - content - }); - } - - render() { - this.container.className = "fileAttachmentAnnotation"; - const trigger = document.createElement("div"); - trigger.style.height = this.container.style.height; - trigger.style.width = this.container.style.width; - trigger.addEventListener("dblclick", this._download.bind(this)); - - if (!this.data.hasPopup && (this.data.titleObj?.str || this.data.contentsObj?.str || this.data.richText)) { - this._createPopup(trigger, this.data); - } - - this.container.appendChild(trigger); - return this.container; - } - - _download() { - this.downloadManager?.openOrDownloadData(this.container, this.content, this.filename); - } - -} - -class AnnotationLayer { - static render(parameters) { - const sortedAnnotations = [], - popupAnnotations = []; - - for (const data of parameters.annotations) { - if (!data) { - continue; - } - - if (data.annotationType === _util.AnnotationType.POPUP) { - popupAnnotations.push(data); - continue; - } - - sortedAnnotations.push(data); - } - - if (popupAnnotations.length) { - sortedAnnotations.push(...popupAnnotations); - } - - const div = parameters.div; - - for (const data of sortedAnnotations) { - const element = AnnotationElementFactory.create({ - data, - layer: div, - page: parameters.page, - viewport: parameters.viewport, - linkService: parameters.linkService, - downloadManager: parameters.downloadManager, - imageResourcesPath: parameters.imageResourcesPath || "", - renderForms: parameters.renderForms !== false, - svgFactory: new _display_utils.DOMSVGFactory(), - annotationStorage: parameters.annotationStorage || new _annotation_storage.AnnotationStorage(), - enableScripting: parameters.enableScripting, - hasJSActions: parameters.hasJSActions, - fieldObjects: parameters.fieldObjects, - mouseState: parameters.mouseState || { - isDown: false - } - }); - - if (element.isRenderable) { - const rendered = element.render(); - - if (data.hidden) { - rendered.style.visibility = "hidden"; - } - - if (Array.isArray(rendered)) { - for (const renderedElement of rendered) { - div.appendChild(renderedElement); - } - } else { - if (element instanceof PopupAnnotationElement) { - div.prepend(rendered); - } else { - div.appendChild(rendered); - } - } - } - } - - this.#setAnnotationCanvasMap(div, parameters.annotationCanvasMap); - } - - static update(parameters) { - const { - page, - viewport, - annotations, - annotationCanvasMap, - div - } = parameters; - const transform = viewport.transform; - const matrix = `matrix(${transform.join(",")})`; - let scale, ownMatrix; - - for (const data of annotations) { - const elements = div.querySelectorAll(`[data-annotation-id="${data.id}"]`); - - if (elements) { - for (const element of elements) { - if (data.hasOwnCanvas) { - const rect = _util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]); - - if (!ownMatrix) { - scale = Math.abs(transform[0] || transform[1]); - const ownTransform = transform.slice(); - - for (let i = 0; i < 4; i++) { - ownTransform[i] = Math.sign(ownTransform[i]); - } - - ownMatrix = `matrix(${ownTransform.join(",")})`; - } - - const left = rect[0] * scale; - const top = rect[1] * scale; - element.style.left = `${left}px`; - element.style.top = `${top}px`; - element.style.transformOrigin = `${-left}px ${-top}px`; - element.style.transform = ownMatrix; - } else { - element.style.transform = matrix; - } - } - } - } - - this.#setAnnotationCanvasMap(div, annotationCanvasMap); - div.hidden = false; - } - - static #setAnnotationCanvasMap(div, annotationCanvasMap) { - if (!annotationCanvasMap) { - return; - } - - for (const [id, canvas] of annotationCanvasMap) { - const element = div.querySelector(`[data-annotation-id="${id}"]`); - - if (!element) { - continue; - } - - const { - firstChild - } = element; - - if (firstChild.nodeName === "CANVAS") { - element.replaceChild(canvas, firstChild); - } else { - element.insertBefore(canvas, firstChild); - } - } - - annotationCanvasMap.clear(); - } - -} - -exports.AnnotationLayer = AnnotationLayer; - -/***/ }), -/* 19 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.ColorConverters = void 0; - -function makeColorComp(n) { - return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, "0"); -} - -class ColorConverters { - static CMYK_G([c, y, m, k]) { - return ["G", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)]; - } - - static G_CMYK([g]) { - return ["CMYK", 0, 0, 0, 1 - g]; - } - - static G_RGB([g]) { - return ["RGB", g, g, g]; - } - - static G_HTML([g]) { - const G = makeColorComp(g); - return `#${G}${G}${G}`; - } - - static RGB_G([r, g, b]) { - return ["G", 0.3 * r + 0.59 * g + 0.11 * b]; - } - - static RGB_HTML([r, g, b]) { - const R = makeColorComp(r); - const G = makeColorComp(g); - const B = makeColorComp(b); - return `#${R}${G}${B}`; - } - - static T_HTML() { - return "#00000000"; - } - - static CMYK_RGB([c, y, m, k]) { - return ["RGB", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)]; - } - - static CMYK_HTML(components) { - return this.RGB_HTML(this.CMYK_RGB(components)); - } - - static RGB_CMYK([r, g, b]) { - const c = 1 - r; - const m = 1 - g; - const y = 1 - b; - const k = Math.min(c, m, y); - return ["CMYK", c, m, y, k]; - } - -} - -exports.ColorConverters = ColorConverters; - -/***/ }), -/* 20 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.XfaLayer = void 0; - -var _util = __w_pdfjs_require__(2); - -var _xfa_text = __w_pdfjs_require__(17); - -class XfaLayer { - static setupStorage(html, id, element, storage, intent) { - const storedData = storage.getValue(id, { - value: null - }); - - switch (element.name) { - case "textarea": - if (storedData.value !== null) { - html.textContent = storedData.value; - } - - if (intent === "print") { - break; - } - - html.addEventListener("input", event => { - storage.setValue(id, { - value: event.target.value - }); - }); - break; - - case "input": - if (element.attributes.type === "radio" || element.attributes.type === "checkbox") { - if (storedData.value === element.attributes.xfaOn) { - html.setAttribute("checked", true); - } else if (storedData.value === element.attributes.xfaOff) { - html.removeAttribute("checked"); - } - - if (intent === "print") { - break; - } - - html.addEventListener("change", event => { - storage.setValue(id, { - value: event.target.checked ? event.target.getAttribute("xfaOn") : event.target.getAttribute("xfaOff") - }); - }); - } else { - if (storedData.value !== null) { - html.setAttribute("value", storedData.value); - } - - if (intent === "print") { - break; - } - - html.addEventListener("input", event => { - storage.setValue(id, { - value: event.target.value - }); - }); - } - - break; - - case "select": - if (storedData.value !== null) { - for (const option of element.children) { - if (option.attributes.value === storedData.value) { - option.attributes.selected = true; - } - } - } - - html.addEventListener("input", event => { - const options = event.target.options; - const value = options.selectedIndex === -1 ? "" : options[options.selectedIndex].value; - storage.setValue(id, { - value - }); - }); - break; - } - } - - static setAttributes({ - html, - element, - storage = null, - intent, - linkService - }) { - const { - attributes - } = element; - const isHTMLAnchorElement = html instanceof HTMLAnchorElement; - - if (attributes.type === "radio") { - attributes.name = `${attributes.name}-${intent}`; - } - - for (const [key, value] of Object.entries(attributes)) { - if (value === null || value === undefined || key === "dataId") { - continue; - } - - if (key !== "style") { - if (key === "textContent") { - html.textContent = value; - } else if (key === "class") { - if (value.length) { - html.setAttribute(key, value.join(" ")); - } - } else { - if (isHTMLAnchorElement && (key === "href" || key === "newWindow")) { - continue; - } - - html.setAttribute(key, value); - } - } else { - Object.assign(html.style, value); - } - } - - if (isHTMLAnchorElement) { - if (!linkService.addLinkAttributes) { - (0, _util.warn)("XfaLayer.setAttribute - missing `addLinkAttributes`-method on the `linkService`-instance."); - } - - linkService.addLinkAttributes?.(html, attributes.href, attributes.newWindow); - } - - if (storage && attributes.dataId) { - this.setupStorage(html, attributes.dataId, element, storage); - } - } - - static render(parameters) { - const storage = parameters.annotationStorage; - const linkService = parameters.linkService; - const root = parameters.xfaHtml; - const intent = parameters.intent || "display"; - const rootHtml = document.createElement(root.name); - - if (root.attributes) { - this.setAttributes({ - html: rootHtml, - element: root, - intent, - linkService - }); - } - - const stack = [[root, -1, rootHtml]]; - const rootDiv = parameters.div; - rootDiv.appendChild(rootHtml); - - if (parameters.viewport) { - const transform = `matrix(${parameters.viewport.transform.join(",")})`; - rootDiv.style.transform = transform; - } - - if (intent !== "richText") { - rootDiv.setAttribute("class", "xfaLayer xfaFont"); - } - - const textDivs = []; - - while (stack.length > 0) { - const [parent, i, html] = stack[stack.length - 1]; - - if (i + 1 === parent.children.length) { - stack.pop(); - continue; - } - - const child = parent.children[++stack[stack.length - 1][1]]; - - if (child === null) { - continue; - } - - const { - name - } = child; - - if (name === "#text") { - const node = document.createTextNode(child.value); - textDivs.push(node); - html.appendChild(node); - continue; - } - - let childHtml; - - if (child?.attributes?.xmlns) { - childHtml = document.createElementNS(child.attributes.xmlns, name); - } else { - childHtml = document.createElement(name); - } - - html.appendChild(childHtml); - - if (child.attributes) { - this.setAttributes({ - html: childHtml, - element: child, - storage, - intent, - linkService - }); - } - - if (child.children && child.children.length > 0) { - stack.push([child, -1, childHtml]); - } else if (child.value) { - const node = document.createTextNode(child.value); - - if (_xfa_text.XfaText.shouldBuildText(name)) { - textDivs.push(node); - } - - childHtml.appendChild(node); - } - } - - for (const el of rootDiv.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea")) { - el.setAttribute("readOnly", true); - } - - return { - textDivs - }; - } - - static update(parameters) { - const transform = `matrix(${parameters.viewport.transform.join(",")})`; - parameters.div.style.transform = transform; - parameters.div.hidden = false; - } - -} - -exports.XfaLayer = XfaLayer; - -/***/ }), -/* 21 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.renderTextLayer = renderTextLayer; - -var _util = __w_pdfjs_require__(2); - -const MAX_TEXT_DIVS_TO_RENDER = 100000; -const DEFAULT_FONT_SIZE = 30; -const DEFAULT_FONT_ASCENT = 0.8; -const ascentCache = new Map(); -const AllWhitespaceRegexp = /^\s+$/g; - -function getAscent(fontFamily, ctx) { - const cachedAscent = ascentCache.get(fontFamily); - - if (cachedAscent) { - return cachedAscent; - } - - ctx.save(); - ctx.font = `${DEFAULT_FONT_SIZE}px ${fontFamily}`; - const metrics = ctx.measureText(""); - let ascent = metrics.fontBoundingBoxAscent; - let descent = Math.abs(metrics.fontBoundingBoxDescent); - - if (ascent) { - ctx.restore(); - const ratio = ascent / (ascent + descent); - ascentCache.set(fontFamily, ratio); - return ratio; - } - - ctx.strokeStyle = "red"; - ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); - ctx.strokeText("g", 0, 0); - let pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data; - descent = 0; - - for (let i = pixels.length - 1 - 3; i >= 0; i -= 4) { - if (pixels[i] > 0) { - descent = Math.ceil(i / 4 / DEFAULT_FONT_SIZE); - break; - } - } - - ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); - ctx.strokeText("A", 0, DEFAULT_FONT_SIZE); - pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data; - ascent = 0; - - for (let i = 0, ii = pixels.length; i < ii; i += 4) { - if (pixels[i] > 0) { - ascent = DEFAULT_FONT_SIZE - Math.floor(i / 4 / DEFAULT_FONT_SIZE); - break; - } - } - - ctx.restore(); - - if (ascent) { - const ratio = ascent / (ascent + descent); - ascentCache.set(fontFamily, ratio); - return ratio; - } - - ascentCache.set(fontFamily, DEFAULT_FONT_ASCENT); - return DEFAULT_FONT_ASCENT; -} - -function appendText(task, geom, styles, ctx) { - const textDiv = document.createElement("span"); - const textDivProperties = task._enhanceTextSelection ? { - angle: 0, - canvasWidth: 0, - hasText: geom.str !== "", - hasEOL: geom.hasEOL, - originalTransform: null, - paddingBottom: 0, - paddingLeft: 0, - paddingRight: 0, - paddingTop: 0, - scale: 1 - } : { - angle: 0, - canvasWidth: 0, - hasText: geom.str !== "", - hasEOL: geom.hasEOL - }; - - task._textDivs.push(textDiv); - - const tx = _util.Util.transform(task._viewport.transform, geom.transform); - - let angle = Math.atan2(tx[1], tx[0]); - const style = styles[geom.fontName]; - - if (style.vertical) { - angle += Math.PI / 2; - } - - const fontHeight = Math.hypot(tx[2], tx[3]); - const fontAscent = fontHeight * getAscent(style.fontFamily, ctx); - let left, top; - - if (angle === 0) { - left = tx[4]; - top = tx[5] - fontAscent; - } else { - left = tx[4] + fontAscent * Math.sin(angle); - top = tx[5] - fontAscent * Math.cos(angle); - } - - textDiv.style.left = `${left}px`; - textDiv.style.top = `${top}px`; - textDiv.style.fontSize = `${fontHeight}px`; - textDiv.style.fontFamily = style.fontFamily; - textDiv.setAttribute("role", "presentation"); - textDiv.textContent = geom.str; - textDiv.dir = geom.dir; - - if (task._fontInspectorEnabled) { - textDiv.dataset.fontName = geom.fontName; - } - - if (angle !== 0) { - textDivProperties.angle = angle * (180 / Math.PI); - } - - let shouldScaleText = false; - - if (geom.str.length > 1 || task._enhanceTextSelection && AllWhitespaceRegexp.test(geom.str)) { - shouldScaleText = true; - } else if (geom.str !== " " && geom.transform[0] !== geom.transform[3]) { - const absScaleX = Math.abs(geom.transform[0]), - absScaleY = Math.abs(geom.transform[3]); - - if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) { - shouldScaleText = true; - } - } - - if (shouldScaleText) { - if (style.vertical) { - textDivProperties.canvasWidth = geom.height * task._viewport.scale; - } else { - textDivProperties.canvasWidth = geom.width * task._viewport.scale; - } - } - - task._textDivProperties.set(textDiv, textDivProperties); - - if (task._textContentStream) { - task._layoutText(textDiv); - } - - if (task._enhanceTextSelection && textDivProperties.hasText) { - let angleCos = 1, - angleSin = 0; - - if (angle !== 0) { - angleCos = Math.cos(angle); - angleSin = Math.sin(angle); - } - - const divWidth = (style.vertical ? geom.height : geom.width) * task._viewport.scale; - const divHeight = fontHeight; - let m, b; - - if (angle !== 0) { - m = [angleCos, angleSin, -angleSin, angleCos, left, top]; - b = _util.Util.getAxialAlignedBoundingBox([0, 0, divWidth, divHeight], m); - } else { - b = [left, top, left + divWidth, top + divHeight]; - } - - task._bounds.push({ - left: b[0], - top: b[1], - right: b[2], - bottom: b[3], - div: textDiv, - size: [divWidth, divHeight], - m - }); - } -} - -function render(task) { - if (task._canceled) { - return; - } - - const textDivs = task._textDivs; - const capability = task._capability; - const textDivsLength = textDivs.length; - - if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) { - task._renderingDone = true; - capability.resolve(); - return; - } - - if (!task._textContentStream) { - for (let i = 0; i < textDivsLength; i++) { - task._layoutText(textDivs[i]); - } - } - - task._renderingDone = true; - capability.resolve(); -} - -function findPositiveMin(ts, offset, count) { - let result = 0; - - for (let i = 0; i < count; i++) { - const t = ts[offset++]; - - if (t > 0) { - result = result ? Math.min(t, result) : t; - } - } - - return result; -} - -function expand(task) { - const bounds = task._bounds; - const viewport = task._viewport; - const expanded = expandBounds(viewport.width, viewport.height, bounds); - - for (let i = 0; i < expanded.length; i++) { - const div = bounds[i].div; - - const divProperties = task._textDivProperties.get(div); - - if (divProperties.angle === 0) { - divProperties.paddingLeft = bounds[i].left - expanded[i].left; - divProperties.paddingTop = bounds[i].top - expanded[i].top; - divProperties.paddingRight = expanded[i].right - bounds[i].right; - divProperties.paddingBottom = expanded[i].bottom - bounds[i].bottom; - - task._textDivProperties.set(div, divProperties); - - continue; - } - - const e = expanded[i], - b = bounds[i]; - const m = b.m, - c = m[0], - s = m[1]; - const points = [[0, 0], [0, b.size[1]], [b.size[0], 0], b.size]; - const ts = new Float64Array(64); - - for (let j = 0, jj = points.length; j < jj; j++) { - const t = _util.Util.applyTransform(points[j], m); - - ts[j + 0] = c && (e.left - t[0]) / c; - ts[j + 4] = s && (e.top - t[1]) / s; - ts[j + 8] = c && (e.right - t[0]) / c; - ts[j + 12] = s && (e.bottom - t[1]) / s; - ts[j + 16] = s && (e.left - t[0]) / -s; - ts[j + 20] = c && (e.top - t[1]) / c; - ts[j + 24] = s && (e.right - t[0]) / -s; - ts[j + 28] = c && (e.bottom - t[1]) / c; - ts[j + 32] = c && (e.left - t[0]) / -c; - ts[j + 36] = s && (e.top - t[1]) / -s; - ts[j + 40] = c && (e.right - t[0]) / -c; - ts[j + 44] = s && (e.bottom - t[1]) / -s; - ts[j + 48] = s && (e.left - t[0]) / s; - ts[j + 52] = c && (e.top - t[1]) / -c; - ts[j + 56] = s && (e.right - t[0]) / s; - ts[j + 60] = c && (e.bottom - t[1]) / -c; - } - - const boxScale = 1 + Math.min(Math.abs(c), Math.abs(s)); - divProperties.paddingLeft = findPositiveMin(ts, 32, 16) / boxScale; - divProperties.paddingTop = findPositiveMin(ts, 48, 16) / boxScale; - divProperties.paddingRight = findPositiveMin(ts, 0, 16) / boxScale; - divProperties.paddingBottom = findPositiveMin(ts, 16, 16) / boxScale; - - task._textDivProperties.set(div, divProperties); - } -} - -function expandBounds(width, height, boxes) { - const bounds = boxes.map(function (box, i) { - return { - x1: box.left, - y1: box.top, - x2: box.right, - y2: box.bottom, - index: i, - x1New: undefined, - x2New: undefined - }; - }); - expandBoundsLTR(width, bounds); - const expanded = new Array(boxes.length); - - for (const b of bounds) { - const i = b.index; - expanded[i] = { - left: b.x1New, - top: 0, - right: b.x2New, - bottom: 0 - }; - } - - boxes.map(function (box, i) { - const e = expanded[i], - b = bounds[i]; - b.x1 = box.top; - b.y1 = width - e.right; - b.x2 = box.bottom; - b.y2 = width - e.left; - b.index = i; - b.x1New = undefined; - b.x2New = undefined; - }); - expandBoundsLTR(height, bounds); - - for (const b of bounds) { - const i = b.index; - expanded[i].top = b.x1New; - expanded[i].bottom = b.x2New; - } - - return expanded; -} - -function expandBoundsLTR(width, bounds) { - bounds.sort(function (a, b) { - return a.x1 - b.x1 || a.index - b.index; - }); - const fakeBoundary = { - x1: -Infinity, - y1: -Infinity, - x2: 0, - y2: Infinity, - index: -1, - x1New: 0, - x2New: 0 - }; - const horizon = [{ - start: -Infinity, - end: Infinity, - boundary: fakeBoundary - }]; - - for (const boundary of bounds) { - let i = 0; - - while (i < horizon.length && horizon[i].end <= boundary.y1) { - i++; - } - - let j = horizon.length - 1; - - while (j >= 0 && horizon[j].start >= boundary.y2) { - j--; - } - - let horizonPart, affectedBoundary; - let q, - k, - maxXNew = -Infinity; - - for (q = i; q <= j; q++) { - horizonPart = horizon[q]; - affectedBoundary = horizonPart.boundary; - let xNew; - - if (affectedBoundary.x2 > boundary.x1) { - xNew = affectedBoundary.index > boundary.index ? affectedBoundary.x1New : boundary.x1; - } else if (affectedBoundary.x2New === undefined) { - xNew = (affectedBoundary.x2 + boundary.x1) / 2; - } else { - xNew = affectedBoundary.x2New; - } - - if (xNew > maxXNew) { - maxXNew = xNew; - } - } - - boundary.x1New = maxXNew; - - for (q = i; q <= j; q++) { - horizonPart = horizon[q]; - affectedBoundary = horizonPart.boundary; - - if (affectedBoundary.x2New === undefined) { - if (affectedBoundary.x2 > boundary.x1) { - if (affectedBoundary.index > boundary.index) { - affectedBoundary.x2New = affectedBoundary.x2; - } - } else { - affectedBoundary.x2New = maxXNew; - } - } else if (affectedBoundary.x2New > maxXNew) { - affectedBoundary.x2New = Math.max(maxXNew, affectedBoundary.x2); - } - } - - const changedHorizon = []; - let lastBoundary = null; - - for (q = i; q <= j; q++) { - horizonPart = horizon[q]; - affectedBoundary = horizonPart.boundary; - const useBoundary = affectedBoundary.x2 > boundary.x2 ? affectedBoundary : boundary; - - if (lastBoundary === useBoundary) { - changedHorizon[changedHorizon.length - 1].end = horizonPart.end; - } else { - changedHorizon.push({ - start: horizonPart.start, - end: horizonPart.end, - boundary: useBoundary - }); - lastBoundary = useBoundary; - } - } - - if (horizon[i].start < boundary.y1) { - changedHorizon[0].start = boundary.y1; - changedHorizon.unshift({ - start: horizon[i].start, - end: boundary.y1, - boundary: horizon[i].boundary - }); - } - - if (boundary.y2 < horizon[j].end) { - changedHorizon[changedHorizon.length - 1].end = boundary.y2; - changedHorizon.push({ - start: boundary.y2, - end: horizon[j].end, - boundary: horizon[j].boundary - }); - } - - for (q = i; q <= j; q++) { - horizonPart = horizon[q]; - affectedBoundary = horizonPart.boundary; - - if (affectedBoundary.x2New !== undefined) { - continue; - } - - let used = false; - - for (k = i - 1; !used && k >= 0 && horizon[k].start >= affectedBoundary.y1; k--) { - used = horizon[k].boundary === affectedBoundary; - } - - for (k = j + 1; !used && k < horizon.length && horizon[k].end <= affectedBoundary.y2; k++) { - used = horizon[k].boundary === affectedBoundary; - } - - for (k = 0; !used && k < changedHorizon.length; k++) { - used = changedHorizon[k].boundary === affectedBoundary; - } - - if (!used) { - affectedBoundary.x2New = maxXNew; - } - } - - Array.prototype.splice.apply(horizon, [i, j - i + 1].concat(changedHorizon)); - } - - for (const horizonPart of horizon) { - const affectedBoundary = horizonPart.boundary; - - if (affectedBoundary.x2New === undefined) { - affectedBoundary.x2New = Math.max(width, affectedBoundary.x2); - } - } -} - -class TextLayerRenderTask { - constructor({ - textContent, - textContentStream, - container, - viewport, - textDivs, - textContentItemsStr, - enhanceTextSelection - }) { - this._textContent = textContent; - this._textContentStream = textContentStream; - this._container = container; - this._document = container.ownerDocument; - this._viewport = viewport; - this._textDivs = textDivs || []; - this._textContentItemsStr = textContentItemsStr || []; - this._enhanceTextSelection = !!enhanceTextSelection; - this._fontInspectorEnabled = !!globalThis.FontInspector?.enabled; - this._reader = null; - this._layoutTextLastFontSize = null; - this._layoutTextLastFontFamily = null; - this._layoutTextCtx = null; - this._textDivProperties = new WeakMap(); - this._renderingDone = false; - this._canceled = false; - this._capability = (0, _util.createPromiseCapability)(); - this._renderTimer = null; - this._bounds = []; - - this._capability.promise.finally(() => { - if (!this._enhanceTextSelection) { - this._textDivProperties = null; - } - - if (this._layoutTextCtx) { - this._layoutTextCtx.canvas.width = 0; - this._layoutTextCtx.canvas.height = 0; - this._layoutTextCtx = null; - } - }).catch(() => {}); - } - - get promise() { - return this._capability.promise; - } - - cancel() { - this._canceled = true; - - if (this._reader) { - this._reader.cancel(new _util.AbortException("TextLayer task cancelled.")).catch(() => {}); - - this._reader = null; - } - - if (this._renderTimer !== null) { - clearTimeout(this._renderTimer); - this._renderTimer = null; - } - - this._capability.reject(new Error("TextLayer task cancelled.")); - } - - _processItems(items, styleCache) { - for (let i = 0, len = items.length; i < len; i++) { - if (items[i].str === undefined) { - if (items[i].type === "beginMarkedContentProps" || items[i].type === "beginMarkedContent") { - const parent = this._container; - this._container = document.createElement("span"); - - this._container.classList.add("markedContent"); - - if (items[i].id !== null) { - this._container.setAttribute("id", `${items[i].id}`); - } - - parent.appendChild(this._container); - } else if (items[i].type === "endMarkedContent") { - this._container = this._container.parentNode; - } - - continue; - } - - this._textContentItemsStr.push(items[i].str); - - appendText(this, items[i], styleCache, this._layoutTextCtx); - } - } - - _layoutText(textDiv) { - const textDivProperties = this._textDivProperties.get(textDiv); - - let transform = ""; - - if (textDivProperties.canvasWidth !== 0 && textDivProperties.hasText) { - const { - fontSize, - fontFamily - } = textDiv.style; - - if (fontSize !== this._layoutTextLastFontSize || fontFamily !== this._layoutTextLastFontFamily) { - this._layoutTextCtx.font = `${fontSize} ${fontFamily}`; - this._layoutTextLastFontSize = fontSize; - this._layoutTextLastFontFamily = fontFamily; - } - - const { - width - } = this._layoutTextCtx.measureText(textDiv.textContent); - - if (width > 0) { - const scale = textDivProperties.canvasWidth / width; - - if (this._enhanceTextSelection) { - textDivProperties.scale = scale; - } - - transform = `scaleX(${scale})`; - } - } - - if (textDivProperties.angle !== 0) { - transform = `rotate(${textDivProperties.angle}deg) ${transform}`; - } - - if (transform.length > 0) { - if (this._enhanceTextSelection) { - textDivProperties.originalTransform = transform; - } - - textDiv.style.transform = transform; - } - - if (textDivProperties.hasText) { - this._container.appendChild(textDiv); - } - - if (textDivProperties.hasEOL) { - const br = document.createElement("br"); - br.setAttribute("role", "presentation"); - - this._container.appendChild(br); - } - } - - _render(timeout = 0) { - const capability = (0, _util.createPromiseCapability)(); - let styleCache = Object.create(null); - - const canvas = this._document.createElement("canvas"); - - canvas.height = canvas.width = DEFAULT_FONT_SIZE; - canvas.mozOpaque = true; - this._layoutTextCtx = canvas.getContext("2d", { - alpha: false - }); - - if (this._textContent) { - const textItems = this._textContent.items; - const textStyles = this._textContent.styles; - - this._processItems(textItems, textStyles); - - capability.resolve(); - } else if (this._textContentStream) { - const pump = () => { - this._reader.read().then(({ - value, - done - }) => { - if (done) { - capability.resolve(); - return; - } - - Object.assign(styleCache, value.styles); - - this._processItems(value.items, styleCache); - - pump(); - }, capability.reject); - }; - - this._reader = this._textContentStream.getReader(); - pump(); - } else { - throw new Error('Neither "textContent" nor "textContentStream" parameters specified.'); - } - - capability.promise.then(() => { - styleCache = null; - - if (!timeout) { - render(this); - } else { - this._renderTimer = setTimeout(() => { - render(this); - this._renderTimer = null; - }, timeout); - } - }, this._capability.reject); - } - - expandTextDivs(expandDivs = false) { - if (!this._enhanceTextSelection || !this._renderingDone) { - return; - } - - if (this._bounds !== null) { - expand(this); - this._bounds = null; - } - - const transformBuf = [], - paddingBuf = []; - - for (let i = 0, ii = this._textDivs.length; i < ii; i++) { - const div = this._textDivs[i]; - - const divProps = this._textDivProperties.get(div); - - if (!divProps.hasText) { - continue; - } - - if (expandDivs) { - transformBuf.length = 0; - paddingBuf.length = 0; - - if (divProps.originalTransform) { - transformBuf.push(divProps.originalTransform); - } - - if (divProps.paddingTop > 0) { - paddingBuf.push(`${divProps.paddingTop}px`); - transformBuf.push(`translateY(${-divProps.paddingTop}px)`); - } else { - paddingBuf.push(0); - } - - if (divProps.paddingRight > 0) { - paddingBuf.push(`${divProps.paddingRight / divProps.scale}px`); - } else { - paddingBuf.push(0); - } - - if (divProps.paddingBottom > 0) { - paddingBuf.push(`${divProps.paddingBottom}px`); - } else { - paddingBuf.push(0); - } - - if (divProps.paddingLeft > 0) { - paddingBuf.push(`${divProps.paddingLeft / divProps.scale}px`); - transformBuf.push(`translateX(${-divProps.paddingLeft / divProps.scale}px)`); - } else { - paddingBuf.push(0); - } - - div.style.padding = paddingBuf.join(" "); - - if (transformBuf.length) { - div.style.transform = transformBuf.join(" "); - } - } else { - div.style.padding = null; - div.style.transform = divProps.originalTransform; - } - } - } - -} - -function renderTextLayer(renderParameters) { - const task = new TextLayerRenderTask({ - textContent: renderParameters.textContent, - textContentStream: renderParameters.textContentStream, - container: renderParameters.container, - viewport: renderParameters.viewport, - textDivs: renderParameters.textDivs, - textContentItemsStr: renderParameters.textContentItemsStr, - enhanceTextSelection: renderParameters.enhanceTextSelection - }); - - task._render(renderParameters.timeout); - - return task; -} - -/***/ }), -/* 22 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.SVGGraphics = void 0; - -var _util = __w_pdfjs_require__(2); - -var _display_utils = __w_pdfjs_require__(1); - -var _is_node = __w_pdfjs_require__(4); - -let SVGGraphics = class { - constructor() { - (0, _util.unreachable)("Not implemented: SVGGraphics"); - } - -}; -exports.SVGGraphics = SVGGraphics; -{ - const SVG_DEFAULTS = { - fontStyle: "normal", - fontWeight: "normal", - fillColor: "#000000" - }; - const XML_NS = "http://www.w3.org/XML/1998/namespace"; - const XLINK_NS = "http://www.w3.org/1999/xlink"; - const LINE_CAP_STYLES = ["butt", "round", "square"]; - const LINE_JOIN_STYLES = ["miter", "round", "bevel"]; - - const convertImgDataToPng = function () { - const PNG_HEADER = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]); - const CHUNK_WRAPPER_SIZE = 12; - const crcTable = new Int32Array(256); - - for (let i = 0; i < 256; i++) { - let c = i; - - for (let h = 0; h < 8; h++) { - if (c & 1) { - c = 0xedb88320 ^ c >> 1 & 0x7fffffff; - } else { - c = c >> 1 & 0x7fffffff; - } - } - - crcTable[i] = c; - } - - function crc32(data, start, end) { - let crc = -1; - - for (let i = start; i < end; i++) { - const a = (crc ^ data[i]) & 0xff; - const b = crcTable[a]; - crc = crc >>> 8 ^ b; - } - - return crc ^ -1; - } - - function writePngChunk(type, body, data, offset) { - let p = offset; - const len = body.length; - data[p] = len >> 24 & 0xff; - data[p + 1] = len >> 16 & 0xff; - data[p + 2] = len >> 8 & 0xff; - data[p + 3] = len & 0xff; - p += 4; - data[p] = type.charCodeAt(0) & 0xff; - data[p + 1] = type.charCodeAt(1) & 0xff; - data[p + 2] = type.charCodeAt(2) & 0xff; - data[p + 3] = type.charCodeAt(3) & 0xff; - p += 4; - data.set(body, p); - p += body.length; - const crc = crc32(data, offset + 4, p); - data[p] = crc >> 24 & 0xff; - data[p + 1] = crc >> 16 & 0xff; - data[p + 2] = crc >> 8 & 0xff; - data[p + 3] = crc & 0xff; - } - - function adler32(data, start, end) { - let a = 1; - let b = 0; - - for (let i = start; i < end; ++i) { - a = (a + (data[i] & 0xff)) % 65521; - b = (b + a) % 65521; - } - - return b << 16 | a; - } - - function deflateSync(literals) { - if (!_is_node.isNodeJS) { - return deflateSyncUncompressed(literals); - } - - try { - let input; - - if (parseInt(process.versions.node) >= 8) { - input = literals; - } else { - input = Buffer.from(literals); - } - - const output = require$$5.deflateSync(input, { - level: 9 - }); - - return output instanceof Uint8Array ? output : new Uint8Array(output); - } catch (e) { - (0, _util.warn)("Not compressing PNG because zlib.deflateSync is unavailable: " + e); - } - - return deflateSyncUncompressed(literals); - } - - function deflateSyncUncompressed(literals) { - let len = literals.length; - const maxBlockLength = 0xffff; - const deflateBlocks = Math.ceil(len / maxBlockLength); - const idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4); - let pi = 0; - idat[pi++] = 0x78; - idat[pi++] = 0x9c; - let pos = 0; - - while (len > maxBlockLength) { - idat[pi++] = 0x00; - idat[pi++] = 0xff; - idat[pi++] = 0xff; - idat[pi++] = 0x00; - idat[pi++] = 0x00; - idat.set(literals.subarray(pos, pos + maxBlockLength), pi); - pi += maxBlockLength; - pos += maxBlockLength; - len -= maxBlockLength; - } - - idat[pi++] = 0x01; - idat[pi++] = len & 0xff; - idat[pi++] = len >> 8 & 0xff; - idat[pi++] = ~len & 0xffff & 0xff; - idat[pi++] = (~len & 0xffff) >> 8 & 0xff; - idat.set(literals.subarray(pos), pi); - pi += literals.length - pos; - const adler = adler32(literals, 0, literals.length); - idat[pi++] = adler >> 24 & 0xff; - idat[pi++] = adler >> 16 & 0xff; - idat[pi++] = adler >> 8 & 0xff; - idat[pi++] = adler & 0xff; - return idat; - } - - function encode(imgData, kind, forceDataSchema, isMask) { - const width = imgData.width; - const height = imgData.height; - let bitDepth, colorType, lineSize; - const bytes = imgData.data; - - switch (kind) { - case _util.ImageKind.GRAYSCALE_1BPP: - colorType = 0; - bitDepth = 1; - lineSize = width + 7 >> 3; - break; - - case _util.ImageKind.RGB_24BPP: - colorType = 2; - bitDepth = 8; - lineSize = width * 3; - break; - - case _util.ImageKind.RGBA_32BPP: - colorType = 6; - bitDepth = 8; - lineSize = width * 4; - break; - - default: - throw new Error("invalid format"); - } - - const literals = new Uint8Array((1 + lineSize) * height); - let offsetLiterals = 0, - offsetBytes = 0; - - for (let y = 0; y < height; ++y) { - literals[offsetLiterals++] = 0; - literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize), offsetLiterals); - offsetBytes += lineSize; - offsetLiterals += lineSize; - } - - if (kind === _util.ImageKind.GRAYSCALE_1BPP && isMask) { - offsetLiterals = 0; - - for (let y = 0; y < height; y++) { - offsetLiterals++; - - for (let i = 0; i < lineSize; i++) { - literals[offsetLiterals++] ^= 0xff; - } - } - } - - const ihdr = new Uint8Array([width >> 24 & 0xff, width >> 16 & 0xff, width >> 8 & 0xff, width & 0xff, height >> 24 & 0xff, height >> 16 & 0xff, height >> 8 & 0xff, height & 0xff, bitDepth, colorType, 0x00, 0x00, 0x00]); - const idat = deflateSync(literals); - const pngLength = PNG_HEADER.length + CHUNK_WRAPPER_SIZE * 3 + ihdr.length + idat.length; - const data = new Uint8Array(pngLength); - let offset = 0; - data.set(PNG_HEADER, offset); - offset += PNG_HEADER.length; - writePngChunk("IHDR", ihdr, data, offset); - offset += CHUNK_WRAPPER_SIZE + ihdr.length; - writePngChunk("IDATA", idat, data, offset); - offset += CHUNK_WRAPPER_SIZE + idat.length; - writePngChunk("IEND", new Uint8Array(0), data, offset); - return (0, _util.createObjectURL)(data, "image/png", forceDataSchema); - } - - return function convertImgDataToPng(imgData, forceDataSchema, isMask) { - const kind = imgData.kind === undefined ? _util.ImageKind.GRAYSCALE_1BPP : imgData.kind; - return encode(imgData, kind, forceDataSchema, isMask); - }; - }(); - - class SVGExtraState { - constructor() { - this.fontSizeScale = 1; - this.fontWeight = SVG_DEFAULTS.fontWeight; - this.fontSize = 0; - this.textMatrix = _util.IDENTITY_MATRIX; - this.fontMatrix = _util.FONT_IDENTITY_MATRIX; - this.leading = 0; - this.textRenderingMode = _util.TextRenderingMode.FILL; - this.textMatrixScale = 1; - this.x = 0; - this.y = 0; - this.lineX = 0; - this.lineY = 0; - this.charSpacing = 0; - this.wordSpacing = 0; - this.textHScale = 1; - this.textRise = 0; - this.fillColor = SVG_DEFAULTS.fillColor; - this.strokeColor = "#000000"; - this.fillAlpha = 1; - this.strokeAlpha = 1; - this.lineWidth = 1; - this.lineJoin = ""; - this.lineCap = ""; - this.miterLimit = 0; - this.dashArray = []; - this.dashPhase = 0; - this.dependencies = []; - this.activeClipUrl = null; - this.clipGroup = null; - this.maskId = ""; - } - - clone() { - return Object.create(this); - } - - setCurrentPoint(x, y) { - this.x = x; - this.y = y; - } - - } - - function opListToTree(opList) { - let opTree = []; - const tmp = []; - - for (const opListElement of opList) { - if (opListElement.fn === "save") { - opTree.push({ - fnId: 92, - fn: "group", - items: [] - }); - tmp.push(opTree); - opTree = opTree[opTree.length - 1].items; - continue; - } - - if (opListElement.fn === "restore") { - opTree = tmp.pop(); - } else { - opTree.push(opListElement); - } - } - - return opTree; - } - - function pf(value) { - if (Number.isInteger(value)) { - return value.toString(); - } - - const s = value.toFixed(10); - let i = s.length - 1; - - if (s[i] !== "0") { - return s; - } - - do { - i--; - } while (s[i] === "0"); - - return s.substring(0, s[i] === "." ? i : i + 1); - } - - function pm(m) { - if (m[4] === 0 && m[5] === 0) { - if (m[1] === 0 && m[2] === 0) { - if (m[0] === 1 && m[3] === 1) { - return ""; - } - - return `scale(${pf(m[0])} ${pf(m[3])})`; - } - - if (m[0] === m[3] && m[1] === -m[2]) { - const a = Math.acos(m[0]) * 180 / Math.PI; - return `rotate(${pf(a)})`; - } - } else { - if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1) { - return `translate(${pf(m[4])} ${pf(m[5])})`; - } - } - - return `matrix(${pf(m[0])} ${pf(m[1])} ${pf(m[2])} ${pf(m[3])} ${pf(m[4])} ` + `${pf(m[5])})`; - } - - let clipCount = 0; - let maskCount = 0; - let shadingCount = 0; - exports.SVGGraphics = SVGGraphics = class { - constructor(commonObjs, objs, forceDataSchema = false) { - this.svgFactory = new _display_utils.DOMSVGFactory(); - this.current = new SVGExtraState(); - this.transformMatrix = _util.IDENTITY_MATRIX; - this.transformStack = []; - this.extraStack = []; - this.commonObjs = commonObjs; - this.objs = objs; - this.pendingClip = null; - this.pendingEOFill = false; - this.embedFonts = false; - this.embeddedFonts = Object.create(null); - this.cssStyle = null; - this.forceDataSchema = !!forceDataSchema; - this._operatorIdMapping = []; - - for (const op in _util.OPS) { - this._operatorIdMapping[_util.OPS[op]] = op; - } - } - - save() { - this.transformStack.push(this.transformMatrix); - const old = this.current; - this.extraStack.push(old); - this.current = old.clone(); - } - - restore() { - this.transformMatrix = this.transformStack.pop(); - this.current = this.extraStack.pop(); - this.pendingClip = null; - this.tgrp = null; - } - - group(items) { - this.save(); - this.executeOpTree(items); - this.restore(); - } - - loadDependencies(operatorList) { - const fnArray = operatorList.fnArray; - const argsArray = operatorList.argsArray; - - for (let i = 0, ii = fnArray.length; i < ii; i++) { - if (fnArray[i] !== _util.OPS.dependency) { - continue; - } - - for (const obj of argsArray[i]) { - const objsPool = obj.startsWith("g_") ? this.commonObjs : this.objs; - const promise = new Promise(resolve => { - objsPool.get(obj, resolve); - }); - this.current.dependencies.push(promise); - } - } - - return Promise.all(this.current.dependencies); - } - - transform(a, b, c, d, e, f) { - const transformMatrix = [a, b, c, d, e, f]; - this.transformMatrix = _util.Util.transform(this.transformMatrix, transformMatrix); - this.tgrp = null; - } - - getSVG(operatorList, viewport) { - this.viewport = viewport; - - const svgElement = this._initialize(viewport); - - return this.loadDependencies(operatorList).then(() => { - this.transformMatrix = _util.IDENTITY_MATRIX; - this.executeOpTree(this.convertOpList(operatorList)); - return svgElement; - }); - } - - convertOpList(operatorList) { - const operatorIdMapping = this._operatorIdMapping; - const argsArray = operatorList.argsArray; - const fnArray = operatorList.fnArray; - const opList = []; - - for (let i = 0, ii = fnArray.length; i < ii; i++) { - const fnId = fnArray[i]; - opList.push({ - fnId, - fn: operatorIdMapping[fnId], - args: argsArray[i] - }); - } - - return opListToTree(opList); - } - - executeOpTree(opTree) { - for (const opTreeElement of opTree) { - const fn = opTreeElement.fn; - const fnId = opTreeElement.fnId; - const args = opTreeElement.args; - - switch (fnId | 0) { - case _util.OPS.beginText: - this.beginText(); - break; - - case _util.OPS.dependency: - break; - - case _util.OPS.setLeading: - this.setLeading(args); - break; - - case _util.OPS.setLeadingMoveText: - this.setLeadingMoveText(args[0], args[1]); - break; - - case _util.OPS.setFont: - this.setFont(args); - break; - - case _util.OPS.showText: - this.showText(args[0]); - break; - - case _util.OPS.showSpacedText: - this.showText(args[0]); - break; - - case _util.OPS.endText: - this.endText(); - break; - - case _util.OPS.moveText: - this.moveText(args[0], args[1]); - break; - - case _util.OPS.setCharSpacing: - this.setCharSpacing(args[0]); - break; - - case _util.OPS.setWordSpacing: - this.setWordSpacing(args[0]); - break; - - case _util.OPS.setHScale: - this.setHScale(args[0]); - break; - - case _util.OPS.setTextMatrix: - this.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); - break; - - case _util.OPS.setTextRise: - this.setTextRise(args[0]); - break; - - case _util.OPS.setTextRenderingMode: - this.setTextRenderingMode(args[0]); - break; - - case _util.OPS.setLineWidth: - this.setLineWidth(args[0]); - break; - - case _util.OPS.setLineJoin: - this.setLineJoin(args[0]); - break; - - case _util.OPS.setLineCap: - this.setLineCap(args[0]); - break; - - case _util.OPS.setMiterLimit: - this.setMiterLimit(args[0]); - break; - - case _util.OPS.setFillRGBColor: - this.setFillRGBColor(args[0], args[1], args[2]); - break; - - case _util.OPS.setStrokeRGBColor: - this.setStrokeRGBColor(args[0], args[1], args[2]); - break; - - case _util.OPS.setStrokeColorN: - this.setStrokeColorN(args); - break; - - case _util.OPS.setFillColorN: - this.setFillColorN(args); - break; - - case _util.OPS.shadingFill: - this.shadingFill(args[0]); - break; - - case _util.OPS.setDash: - this.setDash(args[0], args[1]); - break; - - case _util.OPS.setRenderingIntent: - this.setRenderingIntent(args[0]); - break; - - case _util.OPS.setFlatness: - this.setFlatness(args[0]); - break; - - case _util.OPS.setGState: - this.setGState(args[0]); - break; - - case _util.OPS.fill: - this.fill(); - break; - - case _util.OPS.eoFill: - this.eoFill(); - break; - - case _util.OPS.stroke: - this.stroke(); - break; - - case _util.OPS.fillStroke: - this.fillStroke(); - break; - - case _util.OPS.eoFillStroke: - this.eoFillStroke(); - break; - - case _util.OPS.clip: - this.clip("nonzero"); - break; - - case _util.OPS.eoClip: - this.clip("evenodd"); - break; - - case _util.OPS.paintSolidColorImageMask: - this.paintSolidColorImageMask(); - break; - - case _util.OPS.paintImageXObject: - this.paintImageXObject(args[0]); - break; - - case _util.OPS.paintInlineImageXObject: - this.paintInlineImageXObject(args[0]); - break; - - case _util.OPS.paintImageMaskXObject: - this.paintImageMaskXObject(args[0]); - break; - - case _util.OPS.paintFormXObjectBegin: - this.paintFormXObjectBegin(args[0], args[1]); - break; - - case _util.OPS.paintFormXObjectEnd: - this.paintFormXObjectEnd(); - break; - - case _util.OPS.closePath: - this.closePath(); - break; - - case _util.OPS.closeStroke: - this.closeStroke(); - break; - - case _util.OPS.closeFillStroke: - this.closeFillStroke(); - break; - - case _util.OPS.closeEOFillStroke: - this.closeEOFillStroke(); - break; - - case _util.OPS.nextLine: - this.nextLine(); - break; - - case _util.OPS.transform: - this.transform(args[0], args[1], args[2], args[3], args[4], args[5]); - break; - - case _util.OPS.constructPath: - this.constructPath(args[0], args[1]); - break; - - case _util.OPS.endPath: - this.endPath(); - break; - - case 92: - this.group(opTreeElement.items); - break; - - default: - (0, _util.warn)(`Unimplemented operator ${fn}`); - break; - } - } - } - - setWordSpacing(wordSpacing) { - this.current.wordSpacing = wordSpacing; - } - - setCharSpacing(charSpacing) { - this.current.charSpacing = charSpacing; - } - - nextLine() { - this.moveText(0, this.current.leading); - } - - setTextMatrix(a, b, c, d, e, f) { - const current = this.current; - current.textMatrix = current.lineMatrix = [a, b, c, d, e, f]; - current.textMatrixScale = Math.hypot(a, b); - current.x = current.lineX = 0; - current.y = current.lineY = 0; - current.xcoords = []; - current.ycoords = []; - current.tspan = this.svgFactory.createElement("svg:tspan"); - current.tspan.setAttributeNS(null, "font-family", current.fontFamily); - current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`); - current.tspan.setAttributeNS(null, "y", pf(-current.y)); - current.txtElement = this.svgFactory.createElement("svg:text"); - current.txtElement.appendChild(current.tspan); - } - - beginText() { - const current = this.current; - current.x = current.lineX = 0; - current.y = current.lineY = 0; - current.textMatrix = _util.IDENTITY_MATRIX; - current.lineMatrix = _util.IDENTITY_MATRIX; - current.textMatrixScale = 1; - current.tspan = this.svgFactory.createElement("svg:tspan"); - current.txtElement = this.svgFactory.createElement("svg:text"); - current.txtgrp = this.svgFactory.createElement("svg:g"); - current.xcoords = []; - current.ycoords = []; - } - - moveText(x, y) { - const current = this.current; - current.x = current.lineX += x; - current.y = current.lineY += y; - current.xcoords = []; - current.ycoords = []; - current.tspan = this.svgFactory.createElement("svg:tspan"); - current.tspan.setAttributeNS(null, "font-family", current.fontFamily); - current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`); - current.tspan.setAttributeNS(null, "y", pf(-current.y)); - } - - showText(glyphs) { - const current = this.current; - const font = current.font; - const fontSize = current.fontSize; - - if (fontSize === 0) { - return; - } - - const fontSizeScale = current.fontSizeScale; - const charSpacing = current.charSpacing; - const wordSpacing = current.wordSpacing; - const fontDirection = current.fontDirection; - const textHScale = current.textHScale * fontDirection; - const vertical = font.vertical; - const spacingDir = vertical ? 1 : -1; - const defaultVMetrics = font.defaultVMetrics; - const widthAdvanceScale = fontSize * current.fontMatrix[0]; - let x = 0; - - for (const glyph of glyphs) { - if (glyph === null) { - x += fontDirection * wordSpacing; - continue; - } else if ((0, _util.isNum)(glyph)) { - x += spacingDir * glyph * fontSize / 1000; - continue; - } - - const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; - const character = glyph.fontChar; - let scaledX, scaledY; - let width = glyph.width; - - if (vertical) { - let vx; - const vmetric = glyph.vmetric || defaultVMetrics; - vx = glyph.vmetric ? vmetric[1] : width * 0.5; - vx = -vx * widthAdvanceScale; - const vy = vmetric[2] * widthAdvanceScale; - width = vmetric ? -vmetric[0] : width; - scaledX = vx / fontSizeScale; - scaledY = (x + vy) / fontSizeScale; - } else { - scaledX = x / fontSizeScale; - scaledY = 0; - } - - if (glyph.isInFont || font.missingFile) { - current.xcoords.push(current.x + scaledX); - - if (vertical) { - current.ycoords.push(-current.y + scaledY); - } - - current.tspan.textContent += character; - } - - let charWidth; - - if (vertical) { - charWidth = width * widthAdvanceScale - spacing * fontDirection; - } else { - charWidth = width * widthAdvanceScale + spacing * fontDirection; - } - - x += charWidth; - } - - current.tspan.setAttributeNS(null, "x", current.xcoords.map(pf).join(" ")); - - if (vertical) { - current.tspan.setAttributeNS(null, "y", current.ycoords.map(pf).join(" ")); - } else { - current.tspan.setAttributeNS(null, "y", pf(-current.y)); - } - - if (vertical) { - current.y -= x; - } else { - current.x += x * textHScale; - } - - current.tspan.setAttributeNS(null, "font-family", current.fontFamily); - current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`); - - if (current.fontStyle !== SVG_DEFAULTS.fontStyle) { - current.tspan.setAttributeNS(null, "font-style", current.fontStyle); - } - - if (current.fontWeight !== SVG_DEFAULTS.fontWeight) { - current.tspan.setAttributeNS(null, "font-weight", current.fontWeight); - } - - const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; - - if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - if (current.fillColor !== SVG_DEFAULTS.fillColor) { - current.tspan.setAttributeNS(null, "fill", current.fillColor); - } - - if (current.fillAlpha < 1) { - current.tspan.setAttributeNS(null, "fill-opacity", current.fillAlpha); - } - } else if (current.textRenderingMode === _util.TextRenderingMode.ADD_TO_PATH) { - current.tspan.setAttributeNS(null, "fill", "transparent"); - } else { - current.tspan.setAttributeNS(null, "fill", "none"); - } - - if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - const lineWidthScale = 1 / (current.textMatrixScale || 1); - - this._setStrokeAttributes(current.tspan, lineWidthScale); - } - - let textMatrix = current.textMatrix; - - if (current.textRise !== 0) { - textMatrix = textMatrix.slice(); - textMatrix[5] += current.textRise; - } - - current.txtElement.setAttributeNS(null, "transform", `${pm(textMatrix)} scale(${pf(textHScale)}, -1)`); - current.txtElement.setAttributeNS(XML_NS, "xml:space", "preserve"); - current.txtElement.appendChild(current.tspan); - current.txtgrp.appendChild(current.txtElement); - - this._ensureTransformGroup().appendChild(current.txtElement); - } - - setLeadingMoveText(x, y) { - this.setLeading(-y); - this.moveText(x, y); - } - - addFontStyle(fontObj) { - if (!fontObj.data) { - throw new Error("addFontStyle: No font data available, " + 'ensure that the "fontExtraProperties" API parameter is set.'); - } - - if (!this.cssStyle) { - this.cssStyle = this.svgFactory.createElement("svg:style"); - this.cssStyle.setAttributeNS(null, "type", "text/css"); - this.defs.appendChild(this.cssStyle); - } - - const url = (0, _util.createObjectURL)(fontObj.data, fontObj.mimetype, this.forceDataSchema); - this.cssStyle.textContent += `@font-face { font-family: "${fontObj.loadedName}";` + ` src: url(${url}); }\n`; - } - - setFont(details) { - const current = this.current; - const fontObj = this.commonObjs.get(details[0]); - let size = details[1]; - current.font = fontObj; - - if (this.embedFonts && !fontObj.missingFile && !this.embeddedFonts[fontObj.loadedName]) { - this.addFontStyle(fontObj); - this.embeddedFonts[fontObj.loadedName] = fontObj; - } - - current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX; - let bold = "normal"; - - if (fontObj.black) { - bold = "900"; - } else if (fontObj.bold) { - bold = "bold"; - } - - const italic = fontObj.italic ? "italic" : "normal"; - - if (size < 0) { - size = -size; - current.fontDirection = -1; - } else { - current.fontDirection = 1; - } - - current.fontSize = size; - current.fontFamily = fontObj.loadedName; - current.fontWeight = bold; - current.fontStyle = italic; - current.tspan = this.svgFactory.createElement("svg:tspan"); - current.tspan.setAttributeNS(null, "y", pf(-current.y)); - current.xcoords = []; - current.ycoords = []; - } - - endText() { - const current = this.current; - - if (current.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG && current.txtElement?.hasChildNodes()) { - current.element = current.txtElement; - this.clip("nonzero"); - this.endPath(); - } - } - - setLineWidth(width) { - if (width > 0) { - this.current.lineWidth = width; - } - } - - setLineCap(style) { - this.current.lineCap = LINE_CAP_STYLES[style]; - } - - setLineJoin(style) { - this.current.lineJoin = LINE_JOIN_STYLES[style]; - } - - setMiterLimit(limit) { - this.current.miterLimit = limit; - } - - setStrokeAlpha(strokeAlpha) { - this.current.strokeAlpha = strokeAlpha; - } - - setStrokeRGBColor(r, g, b) { - this.current.strokeColor = _util.Util.makeHexColor(r, g, b); - } - - setFillAlpha(fillAlpha) { - this.current.fillAlpha = fillAlpha; - } - - setFillRGBColor(r, g, b) { - this.current.fillColor = _util.Util.makeHexColor(r, g, b); - this.current.tspan = this.svgFactory.createElement("svg:tspan"); - this.current.xcoords = []; - this.current.ycoords = []; - } - - setStrokeColorN(args) { - this.current.strokeColor = this._makeColorN_Pattern(args); - } - - setFillColorN(args) { - this.current.fillColor = this._makeColorN_Pattern(args); - } - - shadingFill(args) { - const width = this.viewport.width; - const height = this.viewport.height; - - const inv = _util.Util.inverseTransform(this.transformMatrix); - - const bl = _util.Util.applyTransform([0, 0], inv); - - const br = _util.Util.applyTransform([0, height], inv); - - const ul = _util.Util.applyTransform([width, 0], inv); - - const ur = _util.Util.applyTransform([width, height], inv); - - const x0 = Math.min(bl[0], br[0], ul[0], ur[0]); - const y0 = Math.min(bl[1], br[1], ul[1], ur[1]); - const x1 = Math.max(bl[0], br[0], ul[0], ur[0]); - const y1 = Math.max(bl[1], br[1], ul[1], ur[1]); - const rect = this.svgFactory.createElement("svg:rect"); - rect.setAttributeNS(null, "x", x0); - rect.setAttributeNS(null, "y", y0); - rect.setAttributeNS(null, "width", x1 - x0); - rect.setAttributeNS(null, "height", y1 - y0); - rect.setAttributeNS(null, "fill", this._makeShadingPattern(args)); - - if (this.current.fillAlpha < 1) { - rect.setAttributeNS(null, "fill-opacity", this.current.fillAlpha); - } - - this._ensureTransformGroup().appendChild(rect); - } - - _makeColorN_Pattern(args) { - if (args[0] === "TilingPattern") { - return this._makeTilingPattern(args); - } - - return this._makeShadingPattern(args); - } - - _makeTilingPattern(args) { - const color = args[1]; - const operatorList = args[2]; - const matrix = args[3] || _util.IDENTITY_MATRIX; - const [x0, y0, x1, y1] = args[4]; - const xstep = args[5]; - const ystep = args[6]; - const paintType = args[7]; - const tilingId = `shading${shadingCount++}`; - - const [tx0, ty0, tx1, ty1] = _util.Util.normalizeRect([..._util.Util.applyTransform([x0, y0], matrix), ..._util.Util.applyTransform([x1, y1], matrix)]); - - const [xscale, yscale] = _util.Util.singularValueDecompose2dScale(matrix); - - const txstep = xstep * xscale; - const tystep = ystep * yscale; - const tiling = this.svgFactory.createElement("svg:pattern"); - tiling.setAttributeNS(null, "id", tilingId); - tiling.setAttributeNS(null, "patternUnits", "userSpaceOnUse"); - tiling.setAttributeNS(null, "width", txstep); - tiling.setAttributeNS(null, "height", tystep); - tiling.setAttributeNS(null, "x", `${tx0}`); - tiling.setAttributeNS(null, "y", `${ty0}`); - const svg = this.svg; - const transformMatrix = this.transformMatrix; - const fillColor = this.current.fillColor; - const strokeColor = this.current.strokeColor; - const bbox = this.svgFactory.create(tx1 - tx0, ty1 - ty0); - this.svg = bbox; - this.transformMatrix = matrix; - - if (paintType === 2) { - const cssColor = _util.Util.makeHexColor(...color); - - this.current.fillColor = cssColor; - this.current.strokeColor = cssColor; - } - - this.executeOpTree(this.convertOpList(operatorList)); - this.svg = svg; - this.transformMatrix = transformMatrix; - this.current.fillColor = fillColor; - this.current.strokeColor = strokeColor; - tiling.appendChild(bbox.childNodes[0]); - this.defs.appendChild(tiling); - return `url(#${tilingId})`; - } - - _makeShadingPattern(args) { - if (typeof args === "string") { - args = this.objs.get(args); - } - - switch (args[0]) { - case "RadialAxial": - const shadingId = `shading${shadingCount++}`; - const colorStops = args[3]; - let gradient; - - switch (args[1]) { - case "axial": - const point0 = args[4]; - const point1 = args[5]; - gradient = this.svgFactory.createElement("svg:linearGradient"); - gradient.setAttributeNS(null, "id", shadingId); - gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse"); - gradient.setAttributeNS(null, "x1", point0[0]); - gradient.setAttributeNS(null, "y1", point0[1]); - gradient.setAttributeNS(null, "x2", point1[0]); - gradient.setAttributeNS(null, "y2", point1[1]); - break; - - case "radial": - const focalPoint = args[4]; - const circlePoint = args[5]; - const focalRadius = args[6]; - const circleRadius = args[7]; - gradient = this.svgFactory.createElement("svg:radialGradient"); - gradient.setAttributeNS(null, "id", shadingId); - gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse"); - gradient.setAttributeNS(null, "cx", circlePoint[0]); - gradient.setAttributeNS(null, "cy", circlePoint[1]); - gradient.setAttributeNS(null, "r", circleRadius); - gradient.setAttributeNS(null, "fx", focalPoint[0]); - gradient.setAttributeNS(null, "fy", focalPoint[1]); - gradient.setAttributeNS(null, "fr", focalRadius); - break; - - default: - throw new Error(`Unknown RadialAxial type: ${args[1]}`); - } - - for (const colorStop of colorStops) { - const stop = this.svgFactory.createElement("svg:stop"); - stop.setAttributeNS(null, "offset", colorStop[0]); - stop.setAttributeNS(null, "stop-color", colorStop[1]); - gradient.appendChild(stop); - } - - this.defs.appendChild(gradient); - return `url(#${shadingId})`; - - case "Mesh": - (0, _util.warn)("Unimplemented pattern Mesh"); - return null; - - case "Dummy": - return "hotpink"; - - default: - throw new Error(`Unknown IR type: ${args[0]}`); - } - } - - setDash(dashArray, dashPhase) { - this.current.dashArray = dashArray; - this.current.dashPhase = dashPhase; - } - - constructPath(ops, args) { - const current = this.current; - let x = current.x, - y = current.y; - let d = []; - let j = 0; - - for (const op of ops) { - switch (op | 0) { - case _util.OPS.rectangle: - x = args[j++]; - y = args[j++]; - const width = args[j++]; - const height = args[j++]; - const xw = x + width; - const yh = y + height; - d.push("M", pf(x), pf(y), "L", pf(xw), pf(y), "L", pf(xw), pf(yh), "L", pf(x), pf(yh), "Z"); - break; - - case _util.OPS.moveTo: - x = args[j++]; - y = args[j++]; - d.push("M", pf(x), pf(y)); - break; - - case _util.OPS.lineTo: - x = args[j++]; - y = args[j++]; - d.push("L", pf(x), pf(y)); - break; - - case _util.OPS.curveTo: - x = args[j + 4]; - y = args[j + 5]; - d.push("C", pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]), pf(x), pf(y)); - j += 6; - break; - - case _util.OPS.curveTo2: - d.push("C", pf(x), pf(y), pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3])); - x = args[j + 2]; - y = args[j + 3]; - j += 4; - break; - - case _util.OPS.curveTo3: - x = args[j + 2]; - y = args[j + 3]; - d.push("C", pf(args[j]), pf(args[j + 1]), pf(x), pf(y), pf(x), pf(y)); - j += 4; - break; - - case _util.OPS.closePath: - d.push("Z"); - break; - } - } - - d = d.join(" "); - - if (current.path && ops.length > 0 && ops[0] !== _util.OPS.rectangle && ops[0] !== _util.OPS.moveTo) { - d = current.path.getAttributeNS(null, "d") + d; - } else { - current.path = this.svgFactory.createElement("svg:path"); - - this._ensureTransformGroup().appendChild(current.path); - } - - current.path.setAttributeNS(null, "d", d); - current.path.setAttributeNS(null, "fill", "none"); - current.element = current.path; - current.setCurrentPoint(x, y); - } - - endPath() { - const current = this.current; - current.path = null; - - if (!this.pendingClip) { - return; - } - - if (!current.element) { - this.pendingClip = null; - return; - } - - const clipId = `clippath${clipCount++}`; - const clipPath = this.svgFactory.createElement("svg:clipPath"); - clipPath.setAttributeNS(null, "id", clipId); - clipPath.setAttributeNS(null, "transform", pm(this.transformMatrix)); - const clipElement = current.element.cloneNode(true); - - if (this.pendingClip === "evenodd") { - clipElement.setAttributeNS(null, "clip-rule", "evenodd"); - } else { - clipElement.setAttributeNS(null, "clip-rule", "nonzero"); - } - - this.pendingClip = null; - clipPath.appendChild(clipElement); - this.defs.appendChild(clipPath); - - if (current.activeClipUrl) { - current.clipGroup = null; - - for (const prev of this.extraStack) { - prev.clipGroup = null; - } - - clipPath.setAttributeNS(null, "clip-path", current.activeClipUrl); - } - - current.activeClipUrl = `url(#${clipId})`; - this.tgrp = null; - } - - clip(type) { - this.pendingClip = type; - } - - closePath() { - const current = this.current; - - if (current.path) { - const d = `${current.path.getAttributeNS(null, "d")}Z`; - current.path.setAttributeNS(null, "d", d); - } - } - - setLeading(leading) { - this.current.leading = -leading; - } - - setTextRise(textRise) { - this.current.textRise = textRise; - } - - setTextRenderingMode(textRenderingMode) { - this.current.textRenderingMode = textRenderingMode; - } - - setHScale(scale) { - this.current.textHScale = scale / 100; - } - - setRenderingIntent(intent) {} - - setFlatness(flatness) {} - - setGState(states) { - for (const [key, value] of states) { - switch (key) { - case "LW": - this.setLineWidth(value); - break; - - case "LC": - this.setLineCap(value); - break; - - case "LJ": - this.setLineJoin(value); - break; - - case "ML": - this.setMiterLimit(value); - break; - - case "D": - this.setDash(value[0], value[1]); - break; - - case "RI": - this.setRenderingIntent(value); - break; - - case "FL": - this.setFlatness(value); - break; - - case "Font": - this.setFont(value); - break; - - case "CA": - this.setStrokeAlpha(value); - break; - - case "ca": - this.setFillAlpha(value); - break; - - default: - (0, _util.warn)(`Unimplemented graphic state operator ${key}`); - break; - } - } - } - - fill() { - const current = this.current; - - if (current.element) { - current.element.setAttributeNS(null, "fill", current.fillColor); - current.element.setAttributeNS(null, "fill-opacity", current.fillAlpha); - this.endPath(); - } - } - - stroke() { - const current = this.current; - - if (current.element) { - this._setStrokeAttributes(current.element); - - current.element.setAttributeNS(null, "fill", "none"); - this.endPath(); - } - } - - _setStrokeAttributes(element, lineWidthScale = 1) { - const current = this.current; - let dashArray = current.dashArray; - - if (lineWidthScale !== 1 && dashArray.length > 0) { - dashArray = dashArray.map(function (value) { - return lineWidthScale * value; - }); - } - - element.setAttributeNS(null, "stroke", current.strokeColor); - element.setAttributeNS(null, "stroke-opacity", current.strokeAlpha); - element.setAttributeNS(null, "stroke-miterlimit", pf(current.miterLimit)); - element.setAttributeNS(null, "stroke-linecap", current.lineCap); - element.setAttributeNS(null, "stroke-linejoin", current.lineJoin); - element.setAttributeNS(null, "stroke-width", pf(lineWidthScale * current.lineWidth) + "px"); - element.setAttributeNS(null, "stroke-dasharray", dashArray.map(pf).join(" ")); - element.setAttributeNS(null, "stroke-dashoffset", pf(lineWidthScale * current.dashPhase) + "px"); - } - - eoFill() { - if (this.current.element) { - this.current.element.setAttributeNS(null, "fill-rule", "evenodd"); - } - - this.fill(); - } - - fillStroke() { - this.stroke(); - this.fill(); - } - - eoFillStroke() { - if (this.current.element) { - this.current.element.setAttributeNS(null, "fill-rule", "evenodd"); - } - - this.fillStroke(); - } - - closeStroke() { - this.closePath(); - this.stroke(); - } - - closeFillStroke() { - this.closePath(); - this.fillStroke(); - } - - closeEOFillStroke() { - this.closePath(); - this.eoFillStroke(); - } - - paintSolidColorImageMask() { - const rect = this.svgFactory.createElement("svg:rect"); - rect.setAttributeNS(null, "x", "0"); - rect.setAttributeNS(null, "y", "0"); - rect.setAttributeNS(null, "width", "1px"); - rect.setAttributeNS(null, "height", "1px"); - rect.setAttributeNS(null, "fill", this.current.fillColor); - - this._ensureTransformGroup().appendChild(rect); - } - - paintImageXObject(objId) { - const imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId); - - if (!imgData) { - (0, _util.warn)(`Dependent image with object ID ${objId} is not ready yet`); - return; - } - - this.paintInlineImageXObject(imgData); - } - - paintInlineImageXObject(imgData, mask) { - const width = imgData.width; - const height = imgData.height; - const imgSrc = convertImgDataToPng(imgData, this.forceDataSchema, !!mask); - const cliprect = this.svgFactory.createElement("svg:rect"); - cliprect.setAttributeNS(null, "x", "0"); - cliprect.setAttributeNS(null, "y", "0"); - cliprect.setAttributeNS(null, "width", pf(width)); - cliprect.setAttributeNS(null, "height", pf(height)); - this.current.element = cliprect; - this.clip("nonzero"); - const imgEl = this.svgFactory.createElement("svg:image"); - imgEl.setAttributeNS(XLINK_NS, "xlink:href", imgSrc); - imgEl.setAttributeNS(null, "x", "0"); - imgEl.setAttributeNS(null, "y", pf(-height)); - imgEl.setAttributeNS(null, "width", pf(width) + "px"); - imgEl.setAttributeNS(null, "height", pf(height) + "px"); - imgEl.setAttributeNS(null, "transform", `scale(${pf(1 / width)} ${pf(-1 / height)})`); - - if (mask) { - mask.appendChild(imgEl); - } else { - this._ensureTransformGroup().appendChild(imgEl); - } - } - - paintImageMaskXObject(imgData) { - const current = this.current; - const width = imgData.width; - const height = imgData.height; - const fillColor = current.fillColor; - current.maskId = `mask${maskCount++}`; - const mask = this.svgFactory.createElement("svg:mask"); - mask.setAttributeNS(null, "id", current.maskId); - const rect = this.svgFactory.createElement("svg:rect"); - rect.setAttributeNS(null, "x", "0"); - rect.setAttributeNS(null, "y", "0"); - rect.setAttributeNS(null, "width", pf(width)); - rect.setAttributeNS(null, "height", pf(height)); - rect.setAttributeNS(null, "fill", fillColor); - rect.setAttributeNS(null, "mask", `url(#${current.maskId})`); - this.defs.appendChild(mask); - - this._ensureTransformGroup().appendChild(rect); - - this.paintInlineImageXObject(imgData, mask); - } - - paintFormXObjectBegin(matrix, bbox) { - if (Array.isArray(matrix) && matrix.length === 6) { - this.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]); - } - - if (bbox) { - const width = bbox[2] - bbox[0]; - const height = bbox[3] - bbox[1]; - const cliprect = this.svgFactory.createElement("svg:rect"); - cliprect.setAttributeNS(null, "x", bbox[0]); - cliprect.setAttributeNS(null, "y", bbox[1]); - cliprect.setAttributeNS(null, "width", pf(width)); - cliprect.setAttributeNS(null, "height", pf(height)); - this.current.element = cliprect; - this.clip("nonzero"); - this.endPath(); - } - } - - paintFormXObjectEnd() {} - - _initialize(viewport) { - const svg = this.svgFactory.create(viewport.width, viewport.height); - const definitions = this.svgFactory.createElement("svg:defs"); - svg.appendChild(definitions); - this.defs = definitions; - const rootGroup = this.svgFactory.createElement("svg:g"); - rootGroup.setAttributeNS(null, "transform", pm(viewport.transform)); - svg.appendChild(rootGroup); - this.svg = rootGroup; - return svg; - } - - _ensureClipGroup() { - if (!this.current.clipGroup) { - const clipGroup = this.svgFactory.createElement("svg:g"); - clipGroup.setAttributeNS(null, "clip-path", this.current.activeClipUrl); - this.svg.appendChild(clipGroup); - this.current.clipGroup = clipGroup; - } - - return this.current.clipGroup; - } - - _ensureTransformGroup() { - if (!this.tgrp) { - this.tgrp = this.svgFactory.createElement("svg:g"); - this.tgrp.setAttributeNS(null, "transform", pm(this.transformMatrix)); - - if (this.current.activeClipUrl) { - this._ensureClipGroup().appendChild(this.tgrp); - } else { - this.svg.appendChild(this.tgrp); - } - } - - return this.tgrp; - } - - }; -} - -/***/ }), -/* 23 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.PDFNodeStream = void 0; - -var _util = __w_pdfjs_require__(2); - -var _network_utils = __w_pdfjs_require__(24); - -const fs = require$$5; - -const http = require$$5; - -const https = require$$5; - -const url = require$$5; - -const fileUriRegex = /^file:\/\/\/[a-zA-Z]:\//; - -function parseUrl(sourceUrl) { - const parsedUrl = url.parse(sourceUrl); - - if (parsedUrl.protocol === "file:" || parsedUrl.host) { - return parsedUrl; - } - - if (/^[a-z]:[/\\]/i.test(sourceUrl)) { - return url.parse(`file:///${sourceUrl}`); - } - - if (!parsedUrl.host) { - parsedUrl.protocol = "file:"; - } - - return parsedUrl; -} - -class PDFNodeStream { - constructor(source) { - this.source = source; - this.url = parseUrl(source.url); - this.isHttp = this.url.protocol === "http:" || this.url.protocol === "https:"; - this.isFsUrl = this.url.protocol === "file:"; - this.httpHeaders = this.isHttp && source.httpHeaders || {}; - this._fullRequestReader = null; - this._rangeRequestReaders = []; - } - - get _progressiveDataLength() { - return this._fullRequestReader?._loaded ?? 0; - } - - getFullReader() { - (0, _util.assert)(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once."); - this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this); - return this._fullRequestReader; - } - - getRangeReader(start, end) { - if (end <= this._progressiveDataLength) { - return null; - } - - const rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end); - - this._rangeRequestReaders.push(rangeReader); - - return rangeReader; - } - - cancelAllRequests(reason) { - if (this._fullRequestReader) { - this._fullRequestReader.cancel(reason); - } - - for (const reader of this._rangeRequestReaders.slice(0)) { - reader.cancel(reason); - } - } - -} - -exports.PDFNodeStream = PDFNodeStream; - -class BaseFullReader { - constructor(stream) { - this._url = stream.url; - this._done = false; - this._storedError = null; - this.onProgress = null; - const source = stream.source; - this._contentLength = source.length; - this._loaded = 0; - this._filename = null; - this._disableRange = source.disableRange || false; - this._rangeChunkSize = source.rangeChunkSize; - - if (!this._rangeChunkSize && !this._disableRange) { - this._disableRange = true; - } - - this._isStreamingSupported = !source.disableStream; - this._isRangeSupported = !source.disableRange; - this._readableStream = null; - this._readCapability = (0, _util.createPromiseCapability)(); - this._headersCapability = (0, _util.createPromiseCapability)(); - } - - get headersReady() { - return this._headersCapability.promise; - } - - get filename() { - return this._filename; - } - - get contentLength() { - return this._contentLength; - } - - get isRangeSupported() { - return this._isRangeSupported; - } - - get isStreamingSupported() { - return this._isStreamingSupported; - } - - async read() { - await this._readCapability.promise; - - if (this._done) { - return { - value: undefined, - done: true - }; - } - - if (this._storedError) { - throw this._storedError; - } - - const chunk = this._readableStream.read(); - - if (chunk === null) { - this._readCapability = (0, _util.createPromiseCapability)(); - return this.read(); - } - - this._loaded += chunk.length; - - if (this.onProgress) { - this.onProgress({ - loaded: this._loaded, - total: this._contentLength - }); - } - - const buffer = new Uint8Array(chunk).buffer; - return { - value: buffer, - done: false - }; - } - - cancel(reason) { - if (!this._readableStream) { - this._error(reason); - - return; - } - - this._readableStream.destroy(reason); - } - - _error(reason) { - this._storedError = reason; - - this._readCapability.resolve(); - } - - _setReadableStream(readableStream) { - this._readableStream = readableStream; - readableStream.on("readable", () => { - this._readCapability.resolve(); - }); - readableStream.on("end", () => { - readableStream.destroy(); - this._done = true; - - this._readCapability.resolve(); - }); - readableStream.on("error", reason => { - this._error(reason); - }); - - if (!this._isStreamingSupported && this._isRangeSupported) { - this._error(new _util.AbortException("streaming is disabled")); - } - - if (this._storedError) { - this._readableStream.destroy(this._storedError); - } - } - -} - -class BaseRangeReader { - constructor(stream) { - this._url = stream.url; - this._done = false; - this._storedError = null; - this.onProgress = null; - this._loaded = 0; - this._readableStream = null; - this._readCapability = (0, _util.createPromiseCapability)(); - const source = stream.source; - this._isStreamingSupported = !source.disableStream; - } - - get isStreamingSupported() { - return this._isStreamingSupported; - } - - async read() { - await this._readCapability.promise; - - if (this._done) { - return { - value: undefined, - done: true - }; - } - - if (this._storedError) { - throw this._storedError; - } - - const chunk = this._readableStream.read(); - - if (chunk === null) { - this._readCapability = (0, _util.createPromiseCapability)(); - return this.read(); - } - - this._loaded += chunk.length; - - if (this.onProgress) { - this.onProgress({ - loaded: this._loaded - }); - } - - const buffer = new Uint8Array(chunk).buffer; - return { - value: buffer, - done: false - }; - } - - cancel(reason) { - if (!this._readableStream) { - this._error(reason); - - return; - } - - this._readableStream.destroy(reason); - } - - _error(reason) { - this._storedError = reason; - - this._readCapability.resolve(); - } - - _setReadableStream(readableStream) { - this._readableStream = readableStream; - readableStream.on("readable", () => { - this._readCapability.resolve(); - }); - readableStream.on("end", () => { - readableStream.destroy(); - this._done = true; - - this._readCapability.resolve(); - }); - readableStream.on("error", reason => { - this._error(reason); - }); - - if (this._storedError) { - this._readableStream.destroy(this._storedError); - } - } - -} - -function createRequestOptions(parsedUrl, headers) { - return { - protocol: parsedUrl.protocol, - auth: parsedUrl.auth, - host: parsedUrl.hostname, - port: parsedUrl.port, - path: parsedUrl.path, - method: "GET", - headers - }; -} - -class PDFNodeStreamFullReader extends BaseFullReader { - constructor(stream) { - super(stream); - - const handleResponse = response => { - if (response.statusCode === 404) { - const error = new _util.MissingPDFException(`Missing PDF "${this._url}".`); - this._storedError = error; - - this._headersCapability.reject(error); - - return; - } - - this._headersCapability.resolve(); - - this._setReadableStream(response); - - const getResponseHeader = name => { - return this._readableStream.headers[name.toLowerCase()]; - }; - - const { - allowRangeRequests, - suggestedLength - } = (0, _network_utils.validateRangeRequestCapabilities)({ - getResponseHeader, - isHttp: stream.isHttp, - rangeChunkSize: this._rangeChunkSize, - disableRange: this._disableRange - }); - this._isRangeSupported = allowRangeRequests; - this._contentLength = suggestedLength || this._contentLength; - this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); - }; - - this._request = null; - - if (this._url.protocol === "http:") { - this._request = http.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse); - } else { - this._request = https.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse); - } - - this._request.on("error", reason => { - this._storedError = reason; - - this._headersCapability.reject(reason); - }); - - this._request.end(); - } - -} - -class PDFNodeStreamRangeReader extends BaseRangeReader { - constructor(stream, start, end) { - super(stream); - this._httpHeaders = {}; - - for (const property in stream.httpHeaders) { - const value = stream.httpHeaders[property]; - - if (typeof value === "undefined") { - continue; - } - - this._httpHeaders[property] = value; - } - - this._httpHeaders.Range = `bytes=${start}-${end - 1}`; - - const handleResponse = response => { - if (response.statusCode === 404) { - const error = new _util.MissingPDFException(`Missing PDF "${this._url}".`); - this._storedError = error; - return; - } - - this._setReadableStream(response); - }; - - this._request = null; - - if (this._url.protocol === "http:") { - this._request = http.request(createRequestOptions(this._url, this._httpHeaders), handleResponse); - } else { - this._request = https.request(createRequestOptions(this._url, this._httpHeaders), handleResponse); - } - - this._request.on("error", reason => { - this._storedError = reason; - }); - - this._request.end(); - } - -} - -class PDFNodeStreamFsFullReader extends BaseFullReader { - constructor(stream) { - super(stream); - let path = decodeURIComponent(this._url.path); - - if (fileUriRegex.test(this._url.href)) { - path = path.replace(/^\//, ""); - } - - fs.lstat(path, (error, stat) => { - if (error) { - if (error.code === "ENOENT") { - error = new _util.MissingPDFException(`Missing PDF "${path}".`); - } - - this._storedError = error; - - this._headersCapability.reject(error); - - return; - } - - this._contentLength = stat.size; - - this._setReadableStream(fs.createReadStream(path)); - - this._headersCapability.resolve(); - }); - } - -} - -class PDFNodeStreamFsRangeReader extends BaseRangeReader { - constructor(stream, start, end) { - super(stream); - let path = decodeURIComponent(this._url.path); - - if (fileUriRegex.test(this._url.href)) { - path = path.replace(/^\//, ""); - } - - this._setReadableStream(fs.createReadStream(path, { - start, - end: end - 1 - })); - } - -} - -/***/ }), -/* 24 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.createResponseStatusError = createResponseStatusError; -exports.extractFilenameFromHeader = extractFilenameFromHeader; -exports.validateRangeRequestCapabilities = validateRangeRequestCapabilities; -exports.validateResponseStatus = validateResponseStatus; - -var _util = __w_pdfjs_require__(2); - -var _content_disposition = __w_pdfjs_require__(25); - -var _display_utils = __w_pdfjs_require__(1); - -function validateRangeRequestCapabilities({ - getResponseHeader, - isHttp, - rangeChunkSize, - disableRange -}) { - (0, _util.assert)(rangeChunkSize > 0, "Range chunk size must be larger than zero"); - const returnValues = { - allowRangeRequests: false, - suggestedLength: undefined - }; - const length = parseInt(getResponseHeader("Content-Length"), 10); - - if (!Number.isInteger(length)) { - return returnValues; - } - - returnValues.suggestedLength = length; - - if (length <= 2 * rangeChunkSize) { - return returnValues; - } - - if (disableRange || !isHttp) { - return returnValues; - } - - if (getResponseHeader("Accept-Ranges") !== "bytes") { - return returnValues; - } - - const contentEncoding = getResponseHeader("Content-Encoding") || "identity"; - - if (contentEncoding !== "identity") { - return returnValues; - } - - returnValues.allowRangeRequests = true; - return returnValues; -} - -function extractFilenameFromHeader(getResponseHeader) { - const contentDisposition = getResponseHeader("Content-Disposition"); - - if (contentDisposition) { - let filename = (0, _content_disposition.getFilenameFromContentDispositionHeader)(contentDisposition); - - if (filename.includes("%")) { - try { - filename = decodeURIComponent(filename); - } catch (ex) {} - } - - if ((0, _display_utils.isPdfFile)(filename)) { - return filename; - } - } - - return null; -} - -function createResponseStatusError(status, url) { - if (status === 404 || status === 0 && url.startsWith("file:")) { - return new _util.MissingPDFException('Missing PDF "' + url + '".'); - } - - return new _util.UnexpectedResponseException(`Unexpected server response (${status}) while retrieving PDF "${url}".`, status); -} - -function validateResponseStatus(status) { - return status === 200 || status === 206; -} - -/***/ }), -/* 25 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.getFilenameFromContentDispositionHeader = getFilenameFromContentDispositionHeader; - -var _util = __w_pdfjs_require__(2); - -function getFilenameFromContentDispositionHeader(contentDisposition) { - let needsEncodingFixup = true; - let tmp = toParamRegExp("filename\\*", "i").exec(contentDisposition); - - if (tmp) { - tmp = tmp[1]; - let filename = rfc2616unquote(tmp); - filename = unescape(filename); - filename = rfc5987decode(filename); - filename = rfc2047decode(filename); - return fixupEncoding(filename); - } - - tmp = rfc2231getparam(contentDisposition); - - if (tmp) { - const filename = rfc2047decode(tmp); - return fixupEncoding(filename); - } - - tmp = toParamRegExp("filename", "i").exec(contentDisposition); - - if (tmp) { - tmp = tmp[1]; - let filename = rfc2616unquote(tmp); - filename = rfc2047decode(filename); - return fixupEncoding(filename); - } - - function toParamRegExp(attributePattern, flags) { - return new RegExp("(?:^|;)\\s*" + attributePattern + "\\s*=\\s*" + "(" + '[^";\\s][^;\\s]*' + "|" + '"(?:[^"\\\\]|\\\\"?)+"?' + ")", flags); - } - - function textdecode(encoding, value) { - if (encoding) { - if (!/^[\x00-\xFF]+$/.test(value)) { - return value; - } - - try { - const decoder = new TextDecoder(encoding, { - fatal: true - }); - const buffer = (0, _util.stringToBytes)(value); - value = decoder.decode(buffer); - needsEncodingFixup = false; - } catch (e) { - if (/^utf-?8$/i.test(encoding)) { - try { - value = decodeURIComponent(escape(value)); - needsEncodingFixup = false; - } catch (err) {} - } - } - } - - return value; - } - - function fixupEncoding(value) { - if (needsEncodingFixup && /[\x80-\xff]/.test(value)) { - value = textdecode("utf-8", value); - - if (needsEncodingFixup) { - value = textdecode("iso-8859-1", value); - } - } - - return value; - } - - function rfc2231getparam(contentDispositionStr) { - const matches = []; - let match; - const iter = toParamRegExp("filename\\*((?!0\\d)\\d+)(\\*?)", "ig"); - - while ((match = iter.exec(contentDispositionStr)) !== null) { - let [, n, quot, part] = match; - n = parseInt(n, 10); - - if (n in matches) { - if (n === 0) { - break; - } - - continue; - } - - matches[n] = [quot, part]; - } - - const parts = []; - - for (let n = 0; n < matches.length; ++n) { - if (!(n in matches)) { - break; - } - - let [quot, part] = matches[n]; - part = rfc2616unquote(part); - - if (quot) { - part = unescape(part); - - if (n === 0) { - part = rfc5987decode(part); - } - } - - parts.push(part); - } - - return parts.join(""); - } - - function rfc2616unquote(value) { - if (value.startsWith('"')) { - const parts = value.slice(1).split('\\"'); - - for (let i = 0; i < parts.length; ++i) { - const quotindex = parts[i].indexOf('"'); - - if (quotindex !== -1) { - parts[i] = parts[i].slice(0, quotindex); - parts.length = i + 1; - } - - parts[i] = parts[i].replace(/\\(.)/g, "$1"); - } - - value = parts.join('"'); - } - - return value; - } - - function rfc5987decode(extvalue) { - const encodingend = extvalue.indexOf("'"); - - if (encodingend === -1) { - return extvalue; - } - - const encoding = extvalue.slice(0, encodingend); - const langvalue = extvalue.slice(encodingend + 1); - const value = langvalue.replace(/^[^']*'/, ""); - return textdecode(encoding, value); - } - - function rfc2047decode(value) { - if (!value.startsWith("=?") || /[\x00-\x19\x80-\xff]/.test(value)) { - return value; - } - - return value.replace(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function (matches, charset, encoding, text) { - if (encoding === "q" || encoding === "Q") { - text = text.replace(/_/g, " "); - text = text.replace(/=([0-9a-fA-F]{2})/g, function (match, hex) { - return String.fromCharCode(parseInt(hex, 16)); - }); - return textdecode(charset, text); - } - - try { - text = atob(text); - } catch (e) {} - - return textdecode(charset, text); - }); - } - - return ""; -} - -/***/ }), -/* 26 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.PDFNetworkStream = void 0; - -var _util = __w_pdfjs_require__(2); - -var _network_utils = __w_pdfjs_require__(24); -const OK_RESPONSE = 200; -const PARTIAL_CONTENT_RESPONSE = 206; - -function getArrayBuffer(xhr) { - const data = xhr.response; - - if (typeof data !== "string") { - return data; - } - - const array = (0, _util.stringToBytes)(data); - return array.buffer; -} - -class NetworkManager { - constructor(url, args = {}) { - this.url = url; - this.isHttp = /^https?:/i.test(url); - this.httpHeaders = this.isHttp && args.httpHeaders || Object.create(null); - this.withCredentials = args.withCredentials || false; - - this.getXhr = args.getXhr || function NetworkManager_getXhr() { - return new XMLHttpRequest(); - }; - - this.currXhrId = 0; - this.pendingRequests = Object.create(null); - } - - requestRange(begin, end, listeners) { - const args = { - begin, - end - }; - - for (const prop in listeners) { - args[prop] = listeners[prop]; - } - - return this.request(args); - } - - requestFull(listeners) { - return this.request(listeners); - } - - request(args) { - const xhr = this.getXhr(); - const xhrId = this.currXhrId++; - const pendingRequest = this.pendingRequests[xhrId] = { - xhr - }; - xhr.open("GET", this.url); - xhr.withCredentials = this.withCredentials; - - for (const property in this.httpHeaders) { - const value = this.httpHeaders[property]; - - if (typeof value === "undefined") { - continue; - } - - xhr.setRequestHeader(property, value); - } - - if (this.isHttp && "begin" in args && "end" in args) { - xhr.setRequestHeader("Range", `bytes=${args.begin}-${args.end - 1}`); - pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE; - } else { - pendingRequest.expectedStatus = OK_RESPONSE; - } - - xhr.responseType = "arraybuffer"; - - if (args.onError) { - xhr.onerror = function (evt) { - args.onError(xhr.status); - }; - } - - xhr.onreadystatechange = this.onStateChange.bind(this, xhrId); - xhr.onprogress = this.onProgress.bind(this, xhrId); - pendingRequest.onHeadersReceived = args.onHeadersReceived; - pendingRequest.onDone = args.onDone; - pendingRequest.onError = args.onError; - pendingRequest.onProgress = args.onProgress; - xhr.send(null); - return xhrId; - } - - onProgress(xhrId, evt) { - const pendingRequest = this.pendingRequests[xhrId]; - - if (!pendingRequest) { - return; - } - - pendingRequest.onProgress?.(evt); - } - - onStateChange(xhrId, evt) { - const pendingRequest = this.pendingRequests[xhrId]; - - if (!pendingRequest) { - return; - } - - const xhr = pendingRequest.xhr; - - if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) { - pendingRequest.onHeadersReceived(); - delete pendingRequest.onHeadersReceived; - } - - if (xhr.readyState !== 4) { - return; - } - - if (!(xhrId in this.pendingRequests)) { - return; - } - - delete this.pendingRequests[xhrId]; - - if (xhr.status === 0 && this.isHttp) { - pendingRequest.onError?.(xhr.status); - return; - } - - const xhrStatus = xhr.status || OK_RESPONSE; - const ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE; - - if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) { - pendingRequest.onError?.(xhr.status); - return; - } - - const chunk = getArrayBuffer(xhr); - - if (xhrStatus === PARTIAL_CONTENT_RESPONSE) { - const rangeHeader = xhr.getResponseHeader("Content-Range"); - const matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader); - pendingRequest.onDone({ - begin: parseInt(matches[1], 10), - chunk - }); - } else if (chunk) { - pendingRequest.onDone({ - begin: 0, - chunk - }); - } else { - pendingRequest.onError?.(xhr.status); - } - } - - getRequestXhr(xhrId) { - return this.pendingRequests[xhrId].xhr; - } - - isPendingRequest(xhrId) { - return xhrId in this.pendingRequests; - } - - abortRequest(xhrId) { - const xhr = this.pendingRequests[xhrId].xhr; - delete this.pendingRequests[xhrId]; - xhr.abort(); - } - -} - -class PDFNetworkStream { - constructor(source) { - this._source = source; - this._manager = new NetworkManager(source.url, { - httpHeaders: source.httpHeaders, - withCredentials: source.withCredentials - }); - this._rangeChunkSize = source.rangeChunkSize; - this._fullRequestReader = null; - this._rangeRequestReaders = []; - } - - _onRangeRequestReaderClosed(reader) { - const i = this._rangeRequestReaders.indexOf(reader); - - if (i >= 0) { - this._rangeRequestReaders.splice(i, 1); - } - } - - getFullReader() { - (0, _util.assert)(!this._fullRequestReader, "PDFNetworkStream.getFullReader can only be called once."); - this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source); - return this._fullRequestReader; - } - - getRangeReader(begin, end) { - const reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end); - reader.onClosed = this._onRangeRequestReaderClosed.bind(this); - - this._rangeRequestReaders.push(reader); - - return reader; - } - - cancelAllRequests(reason) { - this._fullRequestReader?.cancel(reason); - - for (const reader of this._rangeRequestReaders.slice(0)) { - reader.cancel(reason); - } - } - -} - -exports.PDFNetworkStream = PDFNetworkStream; - -class PDFNetworkStreamFullRequestReader { - constructor(manager, source) { - this._manager = manager; - const args = { - onHeadersReceived: this._onHeadersReceived.bind(this), - onDone: this._onDone.bind(this), - onError: this._onError.bind(this), - onProgress: this._onProgress.bind(this) - }; - this._url = source.url; - this._fullRequestId = manager.requestFull(args); - this._headersReceivedCapability = (0, _util.createPromiseCapability)(); - this._disableRange = source.disableRange || false; - this._contentLength = source.length; - this._rangeChunkSize = source.rangeChunkSize; - - if (!this._rangeChunkSize && !this._disableRange) { - this._disableRange = true; - } - - this._isStreamingSupported = false; - this._isRangeSupported = false; - this._cachedChunks = []; - this._requests = []; - this._done = false; - this._storedError = undefined; - this._filename = null; - this.onProgress = null; - } - - _onHeadersReceived() { - const fullRequestXhrId = this._fullRequestId; - - const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId); - - const getResponseHeader = name => { - return fullRequestXhr.getResponseHeader(name); - }; - - const { - allowRangeRequests, - suggestedLength - } = (0, _network_utils.validateRangeRequestCapabilities)({ - getResponseHeader, - isHttp: this._manager.isHttp, - rangeChunkSize: this._rangeChunkSize, - disableRange: this._disableRange - }); - - if (allowRangeRequests) { - this._isRangeSupported = true; - } - - this._contentLength = suggestedLength || this._contentLength; - this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); - - if (this._isRangeSupported) { - this._manager.abortRequest(fullRequestXhrId); - } - - this._headersReceivedCapability.resolve(); - } - - _onDone(data) { - if (data) { - if (this._requests.length > 0) { - const requestCapability = this._requests.shift(); - - requestCapability.resolve({ - value: data.chunk, - done: false - }); - } else { - this._cachedChunks.push(data.chunk); - } - } - - this._done = true; - - if (this._cachedChunks.length > 0) { - return; - } - - for (const requestCapability of this._requests) { - requestCapability.resolve({ - value: undefined, - done: true - }); - } - - this._requests.length = 0; - } - - _onError(status) { - this._storedError = (0, _network_utils.createResponseStatusError)(status, this._url); - - this._headersReceivedCapability.reject(this._storedError); - - for (const requestCapability of this._requests) { - requestCapability.reject(this._storedError); - } - - this._requests.length = 0; - this._cachedChunks.length = 0; - } - - _onProgress(evt) { - this.onProgress?.({ - loaded: evt.loaded, - total: evt.lengthComputable ? evt.total : this._contentLength - }); - } - - get filename() { - return this._filename; - } - - get isRangeSupported() { - return this._isRangeSupported; - } - - get isStreamingSupported() { - return this._isStreamingSupported; - } - - get contentLength() { - return this._contentLength; - } - - get headersReady() { - return this._headersReceivedCapability.promise; - } - - async read() { - if (this._storedError) { - throw this._storedError; - } - - if (this._cachedChunks.length > 0) { - const chunk = this._cachedChunks.shift(); - - return { - value: chunk, - done: false - }; - } - - if (this._done) { - return { - value: undefined, - done: true - }; - } - - const requestCapability = (0, _util.createPromiseCapability)(); - - this._requests.push(requestCapability); - - return requestCapability.promise; - } - - cancel(reason) { - this._done = true; - - this._headersReceivedCapability.reject(reason); - - for (const requestCapability of this._requests) { - requestCapability.resolve({ - value: undefined, - done: true - }); - } - - this._requests.length = 0; - - if (this._manager.isPendingRequest(this._fullRequestId)) { - this._manager.abortRequest(this._fullRequestId); - } - - this._fullRequestReader = null; - } - -} - -class PDFNetworkStreamRangeRequestReader { - constructor(manager, begin, end) { - this._manager = manager; - const args = { - onDone: this._onDone.bind(this), - onError: this._onError.bind(this), - onProgress: this._onProgress.bind(this) - }; - this._url = manager.url; - this._requestId = manager.requestRange(begin, end, args); - this._requests = []; - this._queuedChunk = null; - this._done = false; - this._storedError = undefined; - this.onProgress = null; - this.onClosed = null; - } - - _close() { - this.onClosed?.(this); - } - - _onDone(data) { - const chunk = data.chunk; - - if (this._requests.length > 0) { - const requestCapability = this._requests.shift(); - - requestCapability.resolve({ - value: chunk, - done: false - }); - } else { - this._queuedChunk = chunk; - } - - this._done = true; - - for (const requestCapability of this._requests) { - requestCapability.resolve({ - value: undefined, - done: true - }); - } - - this._requests.length = 0; - - this._close(); - } - - _onError(status) { - this._storedError = (0, _network_utils.createResponseStatusError)(status, this._url); - - for (const requestCapability of this._requests) { - requestCapability.reject(this._storedError); - } - - this._requests.length = 0; - this._queuedChunk = null; - } - - _onProgress(evt) { - if (!this.isStreamingSupported) { - this.onProgress?.({ - loaded: evt.loaded - }); - } - } - - get isStreamingSupported() { - return false; - } - - async read() { - if (this._storedError) { - throw this._storedError; - } - - if (this._queuedChunk !== null) { - const chunk = this._queuedChunk; - this._queuedChunk = null; - return { - value: chunk, - done: false - }; - } - - if (this._done) { - return { - value: undefined, - done: true - }; - } - - const requestCapability = (0, _util.createPromiseCapability)(); - - this._requests.push(requestCapability); - - return requestCapability.promise; - } - - cancel(reason) { - this._done = true; - - for (const requestCapability of this._requests) { - requestCapability.resolve({ - value: undefined, - done: true - }); - } - - this._requests.length = 0; - - if (this._manager.isPendingRequest(this._requestId)) { - this._manager.abortRequest(this._requestId); - } - - this._close(); - } - -} - -/***/ }), -/* 27 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.PDFFetchStream = void 0; - -var _util = __w_pdfjs_require__(2); - -var _network_utils = __w_pdfjs_require__(24); - -function createFetchOptions(headers, withCredentials, abortController) { - return { - method: "GET", - headers, - signal: abortController?.signal, - mode: "cors", - credentials: withCredentials ? "include" : "same-origin", - redirect: "follow" - }; -} - -function createHeaders(httpHeaders) { - const headers = new Headers(); - - for (const property in httpHeaders) { - const value = httpHeaders[property]; - - if (typeof value === "undefined") { - continue; - } - - headers.append(property, value); - } - - return headers; -} - -class PDFFetchStream { - constructor(source) { - this.source = source; - this.isHttp = /^https?:/i.test(source.url); - this.httpHeaders = this.isHttp && source.httpHeaders || {}; - this._fullRequestReader = null; - this._rangeRequestReaders = []; - } - - get _progressiveDataLength() { - return this._fullRequestReader?._loaded ?? 0; - } - - getFullReader() { - (0, _util.assert)(!this._fullRequestReader, "PDFFetchStream.getFullReader can only be called once."); - this._fullRequestReader = new PDFFetchStreamReader(this); - return this._fullRequestReader; - } - - getRangeReader(begin, end) { - if (end <= this._progressiveDataLength) { - return null; - } - - const reader = new PDFFetchStreamRangeReader(this, begin, end); - - this._rangeRequestReaders.push(reader); - - return reader; - } - - cancelAllRequests(reason) { - if (this._fullRequestReader) { - this._fullRequestReader.cancel(reason); - } - - for (const reader of this._rangeRequestReaders.slice(0)) { - reader.cancel(reason); - } - } - -} - -exports.PDFFetchStream = PDFFetchStream; - -class PDFFetchStreamReader { - constructor(stream) { - this._stream = stream; - this._reader = null; - this._loaded = 0; - this._filename = null; - const source = stream.source; - this._withCredentials = source.withCredentials || false; - this._contentLength = source.length; - this._headersCapability = (0, _util.createPromiseCapability)(); - this._disableRange = source.disableRange || false; - this._rangeChunkSize = source.rangeChunkSize; - - if (!this._rangeChunkSize && !this._disableRange) { - this._disableRange = true; - } - - if (typeof AbortController !== "undefined") { - this._abortController = new AbortController(); - } - - this._isStreamingSupported = !source.disableStream; - this._isRangeSupported = !source.disableRange; - this._headers = createHeaders(this._stream.httpHeaders); - const url = source.url; - fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => { - if (!(0, _network_utils.validateResponseStatus)(response.status)) { - throw (0, _network_utils.createResponseStatusError)(response.status, url); - } - - this._reader = response.body.getReader(); - - this._headersCapability.resolve(); - - const getResponseHeader = name => { - return response.headers.get(name); - }; - - const { - allowRangeRequests, - suggestedLength - } = (0, _network_utils.validateRangeRequestCapabilities)({ - getResponseHeader, - isHttp: this._stream.isHttp, - rangeChunkSize: this._rangeChunkSize, - disableRange: this._disableRange - }); - this._isRangeSupported = allowRangeRequests; - this._contentLength = suggestedLength || this._contentLength; - this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); - - if (!this._isStreamingSupported && this._isRangeSupported) { - this.cancel(new _util.AbortException("Streaming is disabled.")); - } - }).catch(this._headersCapability.reject); - this.onProgress = null; - } - - get headersReady() { - return this._headersCapability.promise; - } - - get filename() { - return this._filename; - } - - get contentLength() { - return this._contentLength; - } - - get isRangeSupported() { - return this._isRangeSupported; - } - - get isStreamingSupported() { - return this._isStreamingSupported; - } - - async read() { - await this._headersCapability.promise; - const { - value, - done - } = await this._reader.read(); - - if (done) { - return { - value, - done - }; - } - - this._loaded += value.byteLength; - - if (this.onProgress) { - this.onProgress({ - loaded: this._loaded, - total: this._contentLength - }); - } - - const buffer = new Uint8Array(value).buffer; - return { - value: buffer, - done: false - }; - } - - cancel(reason) { - if (this._reader) { - this._reader.cancel(reason); - } - - if (this._abortController) { - this._abortController.abort(); - } - } - -} - -class PDFFetchStreamRangeReader { - constructor(stream, begin, end) { - this._stream = stream; - this._reader = null; - this._loaded = 0; - const source = stream.source; - this._withCredentials = source.withCredentials || false; - this._readCapability = (0, _util.createPromiseCapability)(); - this._isStreamingSupported = !source.disableStream; - - if (typeof AbortController !== "undefined") { - this._abortController = new AbortController(); - } - - this._headers = createHeaders(this._stream.httpHeaders); - - this._headers.append("Range", `bytes=${begin}-${end - 1}`); - - const url = source.url; - fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => { - if (!(0, _network_utils.validateResponseStatus)(response.status)) { - throw (0, _network_utils.createResponseStatusError)(response.status, url); - } - - this._readCapability.resolve(); - - this._reader = response.body.getReader(); - }).catch(this._readCapability.reject); - this.onProgress = null; - } - - get isStreamingSupported() { - return this._isStreamingSupported; - } - - async read() { - await this._readCapability.promise; - const { - value, - done - } = await this._reader.read(); - - if (done) { - return { - value, - done - }; - } - - this._loaded += value.byteLength; - - if (this.onProgress) { - this.onProgress({ - loaded: this._loaded - }); - } - - const buffer = new Uint8Array(value).buffer; - return { - value: buffer, - done: false - }; - } - - cancel(reason) { - if (this._reader) { - this._reader.cancel(reason); - } - - if (this._abortController) { - this._abortController.abort(); - } - } - -} - -/***/ }) -/******/ ]); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __w_pdfjs_require__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ // no module.id needed -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ __webpack_modules__[moduleId](module, module.exports, __w_pdfjs_require__); -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/************************************************************************/ -var __webpack_exports__ = {}; -// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. -(() => { -var exports = __webpack_exports__; - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -Object.defineProperty(exports, "AnnotationLayer", ({ - enumerable: true, - get: function () { - return _annotation_layer.AnnotationLayer; - } -})); -Object.defineProperty(exports, "AnnotationMode", ({ - enumerable: true, - get: function () { - return _util.AnnotationMode; - } -})); -Object.defineProperty(exports, "CMapCompressionType", ({ - enumerable: true, - get: function () { - return _util.CMapCompressionType; - } -})); -Object.defineProperty(exports, "GlobalWorkerOptions", ({ - enumerable: true, - get: function () { - return _worker_options.GlobalWorkerOptions; - } -})); -Object.defineProperty(exports, "InvalidPDFException", ({ - enumerable: true, - get: function () { - return _util.InvalidPDFException; - } -})); -Object.defineProperty(exports, "LinkTarget", ({ - enumerable: true, - get: function () { - return _display_utils.LinkTarget; - } -})); -Object.defineProperty(exports, "LoopbackPort", ({ - enumerable: true, - get: function () { - return _api.LoopbackPort; - } -})); -Object.defineProperty(exports, "MissingPDFException", ({ - enumerable: true, - get: function () { - return _util.MissingPDFException; - } -})); -Object.defineProperty(exports, "OPS", ({ - enumerable: true, - get: function () { - return _util.OPS; - } -})); -Object.defineProperty(exports, "PDFDataRangeTransport", ({ - enumerable: true, - get: function () { - return _api.PDFDataRangeTransport; - } -})); -Object.defineProperty(exports, "PDFDateString", ({ - enumerable: true, - get: function () { - return _display_utils.PDFDateString; - } -})); -Object.defineProperty(exports, "PDFWorker", ({ - enumerable: true, - get: function () { - return _api.PDFWorker; - } -})); -Object.defineProperty(exports, "PasswordResponses", ({ - enumerable: true, - get: function () { - return _util.PasswordResponses; - } -})); -Object.defineProperty(exports, "PermissionFlag", ({ - enumerable: true, - get: function () { - return _util.PermissionFlag; - } -})); -Object.defineProperty(exports, "PixelsPerInch", ({ - enumerable: true, - get: function () { - return _display_utils.PixelsPerInch; - } -})); -Object.defineProperty(exports, "RenderingCancelledException", ({ - enumerable: true, - get: function () { - return _display_utils.RenderingCancelledException; - } -})); -Object.defineProperty(exports, "SVGGraphics", ({ - enumerable: true, - get: function () { - return _svg.SVGGraphics; - } -})); -Object.defineProperty(exports, "UNSUPPORTED_FEATURES", ({ - enumerable: true, - get: function () { - return _util.UNSUPPORTED_FEATURES; - } -})); -Object.defineProperty(exports, "UnexpectedResponseException", ({ - enumerable: true, - get: function () { - return _util.UnexpectedResponseException; - } -})); -Object.defineProperty(exports, "Util", ({ - enumerable: true, - get: function () { - return _util.Util; - } -})); -Object.defineProperty(exports, "VerbosityLevel", ({ - enumerable: true, - get: function () { - return _util.VerbosityLevel; - } -})); -Object.defineProperty(exports, "XfaLayer", ({ - enumerable: true, - get: function () { - return _xfa_layer.XfaLayer; - } -})); -Object.defineProperty(exports, "addLinkAttributes", ({ - enumerable: true, - get: function () { - return _display_utils.addLinkAttributes; - } -})); -Object.defineProperty(exports, "build", ({ - enumerable: true, - get: function () { - return _api.build; - } -})); -Object.defineProperty(exports, "createObjectURL", ({ - enumerable: true, - get: function () { - return _util.createObjectURL; - } -})); -Object.defineProperty(exports, "createPromiseCapability", ({ - enumerable: true, - get: function () { - return _util.createPromiseCapability; - } -})); -Object.defineProperty(exports, "createValidAbsoluteUrl", ({ - enumerable: true, - get: function () { - return _util.createValidAbsoluteUrl; - } -})); -Object.defineProperty(exports, "getDocument", ({ - enumerable: true, - get: function () { - return _api.getDocument; - } -})); -Object.defineProperty(exports, "getFilenameFromUrl", ({ - enumerable: true, - get: function () { - return _display_utils.getFilenameFromUrl; - } -})); -Object.defineProperty(exports, "getPdfFilenameFromUrl", ({ - enumerable: true, - get: function () { - return _display_utils.getPdfFilenameFromUrl; - } -})); -Object.defineProperty(exports, "getXfaPageViewport", ({ - enumerable: true, - get: function () { - return _display_utils.getXfaPageViewport; - } -})); -Object.defineProperty(exports, "isPdfFile", ({ - enumerable: true, - get: function () { - return _display_utils.isPdfFile; - } -})); -Object.defineProperty(exports, "loadScript", ({ - enumerable: true, - get: function () { - return _display_utils.loadScript; - } -})); -Object.defineProperty(exports, "removeNullCharacters", ({ - enumerable: true, - get: function () { - return _util.removeNullCharacters; - } -})); -Object.defineProperty(exports, "renderTextLayer", ({ - enumerable: true, - get: function () { - return _text_layer.renderTextLayer; - } -})); -Object.defineProperty(exports, "shadow", ({ - enumerable: true, - get: function () { - return _util.shadow; - } -})); -Object.defineProperty(exports, "version", ({ - enumerable: true, - get: function () { - return _api.version; - } -})); - -var _display_utils = __w_pdfjs_require__(1); - -var _util = __w_pdfjs_require__(2); - -var _api = __w_pdfjs_require__(6); - -var _annotation_layer = __w_pdfjs_require__(18); - -var _worker_options = __w_pdfjs_require__(12); - -var _is_node = __w_pdfjs_require__(4); - -var _text_layer = __w_pdfjs_require__(21); - -var _svg = __w_pdfjs_require__(22); - -var _xfa_layer = __w_pdfjs_require__(20); -{ - if (_is_node.isNodeJS) { - const { - PDFNodeStream - } = __w_pdfjs_require__(23); - - (0, _api.setPDFNetworkStreamFactory)(params => { - return new PDFNodeStream(params); - }); - } else { - const { - PDFNetworkStream - } = __w_pdfjs_require__(26); - - const { - PDFFetchStream - } = __w_pdfjs_require__(27); - - (0, _api.setPDFNetworkStreamFactory)(params => { - if ((0, _display_utils.isValidFetchUrl)(params.url)) { - return new PDFFetchStream(params); - } - - return new PDFNetworkStream(params); - }); - } -} -})(); - -/******/ return __webpack_exports__; -/******/ })() -; -}); - -}); - -var pdf_worker = createCommonjsModule(function (module, exports) { -/** - * @licstart The following is the entire license notice for the - * Javascript code in this page - * - * Copyright 2021 Mozilla Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @licend The above is the entire license notice for the - * Javascript code in this page - */ - -(function webpackUniversalModuleDefinition(root, factory) { - module.exports = factory(); -})(commonjsGlobal, function() { -return /******/ (() => { // webpackBootstrap -/******/ var __webpack_modules__ = ([ -/* 0 */, -/* 1 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.WorkerTask = exports.WorkerMessageHandler = void 0; - -var _util = __w_pdfjs_require__(2); - -var _primitives = __w_pdfjs_require__(5); - -var _pdf_manager = __w_pdfjs_require__(7); - -var _writer = __w_pdfjs_require__(71); - -var _is_node = __w_pdfjs_require__(4); - -var _message_handler = __w_pdfjs_require__(99); - -var _worker_stream = __w_pdfjs_require__(100); - -var _core_utils = __w_pdfjs_require__(9); - -class WorkerTask { - constructor(name) { - this.name = name; - this.terminated = false; - this._capability = (0, _util.createPromiseCapability)(); - } - - get finished() { - return this._capability.promise; - } - - finish() { - this._capability.resolve(); - } - - terminate() { - this.terminated = true; - } - - ensureNotTerminated() { - if (this.terminated) { - throw new Error("Worker task was terminated"); - } - } - -} - -exports.WorkerTask = WorkerTask; - -class WorkerMessageHandler { - static setup(handler, port) { - let testMessageProcessed = false; - handler.on("test", function wphSetupTest(data) { - if (testMessageProcessed) { - return; - } - - testMessageProcessed = true; - handler.send("test", data instanceof Uint8Array && data[0] === 255); - }); - handler.on("configure", function wphConfigure(data) { - (0, _util.setVerbosityLevel)(data.verbosity); - }); - handler.on("GetDocRequest", function wphSetupDoc(data) { - return WorkerMessageHandler.createDocumentHandler(data, port); - }); - } - - static createDocumentHandler(docParams, port) { - let pdfManager; - let terminated = false; - let cancelXHRs = null; - const WorkerTasks = []; - const verbosity = (0, _util.getVerbosityLevel)(); - const apiVersion = docParams.apiVersion; - const workerVersion = '2.12.313'; - - if (apiVersion !== workerVersion) { - throw new Error(`The API version "${apiVersion}" does not match ` + `the Worker version "${workerVersion}".`); - } - - const enumerableProperties = []; - - for (const property in []) { - enumerableProperties.push(property); - } - - if (enumerableProperties.length) { - throw new Error("The `Array.prototype` contains unexpected enumerable properties: " + enumerableProperties.join(", ") + "; thus breaking e.g. `for...in` iteration of `Array`s."); - } - - if (typeof ReadableStream === "undefined") { - throw new Error("The browser/environment lacks native support for critical " + "functionality used by the PDF.js library (e.g. `ReadableStream`); " + "please use a `legacy`-build instead."); - } - - const docId = docParams.docId; - const docBaseUrl = docParams.docBaseUrl; - const workerHandlerName = docParams.docId + "_worker"; - let handler = new _message_handler.MessageHandler(workerHandlerName, docId, port); - - function ensureNotTerminated() { - if (terminated) { - throw new Error("Worker was terminated"); - } - } - - function startWorkerTask(task) { - WorkerTasks.push(task); - } - - function finishWorkerTask(task) { - task.finish(); - const i = WorkerTasks.indexOf(task); - WorkerTasks.splice(i, 1); - } - - async function loadDocument(recoveryMode) { - await pdfManager.ensureDoc("checkHeader"); - await pdfManager.ensureDoc("parseStartXRef"); - await pdfManager.ensureDoc("parse", [recoveryMode]); - await pdfManager.ensureDoc("checkFirstPage", [recoveryMode]); - await pdfManager.ensureDoc("checkLastPage", [recoveryMode]); - const isPureXfa = await pdfManager.ensureDoc("isPureXfa"); - - if (isPureXfa) { - const task = new WorkerTask("loadXfaFonts"); - startWorkerTask(task); - await Promise.all([pdfManager.loadXfaFonts(handler, task).catch(reason => {}).then(() => finishWorkerTask(task)), pdfManager.loadXfaImages()]); - } - - const [numPages, fingerprints] = await Promise.all([pdfManager.ensureDoc("numPages"), pdfManager.ensureDoc("fingerprints")]); - const htmlForXfa = isPureXfa ? await pdfManager.ensureDoc("htmlForXfa") : null; - return { - numPages, - fingerprints, - htmlForXfa - }; - } - - function getPdfManager(data, evaluatorOptions, enableXfa) { - const pdfManagerCapability = (0, _util.createPromiseCapability)(); - let newPdfManager; - const source = data.source; - - if (source.data) { - try { - newPdfManager = new _pdf_manager.LocalPdfManager(docId, source.data, source.password, handler, evaluatorOptions, enableXfa, docBaseUrl); - pdfManagerCapability.resolve(newPdfManager); - } catch (ex) { - pdfManagerCapability.reject(ex); - } - - return pdfManagerCapability.promise; - } - - let pdfStream, - cachedChunks = []; - - try { - pdfStream = new _worker_stream.PDFWorkerStream(handler); - } catch (ex) { - pdfManagerCapability.reject(ex); - return pdfManagerCapability.promise; - } - - const fullRequest = pdfStream.getFullReader(); - fullRequest.headersReady.then(function () { - if (!fullRequest.isRangeSupported) { - return; - } - - const disableAutoFetch = source.disableAutoFetch || fullRequest.isStreamingSupported; - newPdfManager = new _pdf_manager.NetworkPdfManager(docId, pdfStream, { - msgHandler: handler, - password: source.password, - length: fullRequest.contentLength, - disableAutoFetch, - rangeChunkSize: source.rangeChunkSize - }, evaluatorOptions, enableXfa, docBaseUrl); - - for (let i = 0; i < cachedChunks.length; i++) { - newPdfManager.sendProgressiveData(cachedChunks[i]); - } - - cachedChunks = []; - pdfManagerCapability.resolve(newPdfManager); - cancelXHRs = null; - }).catch(function (reason) { - pdfManagerCapability.reject(reason); - cancelXHRs = null; - }); - let loaded = 0; - - const flushChunks = function () { - const pdfFile = (0, _util.arraysToBytes)(cachedChunks); - - if (source.length && pdfFile.length !== source.length) { - (0, _util.warn)("reported HTTP length is different from actual"); - } - - try { - newPdfManager = new _pdf_manager.LocalPdfManager(docId, pdfFile, source.password, handler, evaluatorOptions, enableXfa, docBaseUrl); - pdfManagerCapability.resolve(newPdfManager); - } catch (ex) { - pdfManagerCapability.reject(ex); - } - - cachedChunks = []; - }; - - const readPromise = new Promise(function (resolve, reject) { - const readChunk = function ({ - value, - done - }) { - try { - ensureNotTerminated(); - - if (done) { - if (!newPdfManager) { - flushChunks(); - } - - cancelXHRs = null; - return; - } - - loaded += (0, _util.arrayByteLength)(value); - - if (!fullRequest.isStreamingSupported) { - handler.send("DocProgress", { - loaded, - total: Math.max(loaded, fullRequest.contentLength || 0) - }); - } - - if (newPdfManager) { - newPdfManager.sendProgressiveData(value); - } else { - cachedChunks.push(value); - } - - fullRequest.read().then(readChunk, reject); - } catch (e) { - reject(e); - } - }; - - fullRequest.read().then(readChunk, reject); - }); - readPromise.catch(function (e) { - pdfManagerCapability.reject(e); - cancelXHRs = null; - }); - - cancelXHRs = function (reason) { - pdfStream.cancelAllRequests(reason); - }; - - return pdfManagerCapability.promise; - } - - function setupDoc(data) { - function onSuccess(doc) { - ensureNotTerminated(); - handler.send("GetDoc", { - pdfInfo: doc - }); - } - - function onFailure(ex) { - ensureNotTerminated(); - - if (ex instanceof _util.PasswordException) { - const task = new WorkerTask(`PasswordException: response ${ex.code}`); - startWorkerTask(task); - handler.sendWithPromise("PasswordRequest", ex).then(function ({ - password - }) { - finishWorkerTask(task); - pdfManager.updatePassword(password); - pdfManagerReady(); - }).catch(function () { - finishWorkerTask(task); - handler.send("DocException", ex); - }); - } else if (ex instanceof _util.InvalidPDFException || ex instanceof _util.MissingPDFException || ex instanceof _util.UnexpectedResponseException || ex instanceof _util.UnknownErrorException) { - handler.send("DocException", ex); - } else { - handler.send("DocException", new _util.UnknownErrorException(ex.message, ex.toString())); - } - } - - function pdfManagerReady() { - ensureNotTerminated(); - loadDocument(false).then(onSuccess, function (reason) { - ensureNotTerminated(); - - if (!(reason instanceof _core_utils.XRefParseException)) { - onFailure(reason); - return; - } - - pdfManager.requestLoadedStream(); - pdfManager.onLoadedStream().then(function () { - ensureNotTerminated(); - loadDocument(true).then(onSuccess, onFailure); - }); - }); - } - - ensureNotTerminated(); - const evaluatorOptions = { - maxImageSize: data.maxImageSize, - disableFontFace: data.disableFontFace, - ignoreErrors: data.ignoreErrors, - isEvalSupported: data.isEvalSupported, - fontExtraProperties: data.fontExtraProperties, - useSystemFonts: data.useSystemFonts, - cMapUrl: data.cMapUrl, - standardFontDataUrl: data.standardFontDataUrl - }; - getPdfManager(data, evaluatorOptions, data.enableXfa).then(function (newPdfManager) { - if (terminated) { - newPdfManager.terminate(new _util.AbortException("Worker was terminated.")); - throw new Error("Worker was terminated"); - } - - pdfManager = newPdfManager; - pdfManager.onLoadedStream().then(function (stream) { - handler.send("DataLoaded", { - length: stream.bytes.byteLength - }); - }); - }).then(pdfManagerReady, onFailure); - } - - handler.on("GetPage", function wphSetupGetPage(data) { - return pdfManager.getPage(data.pageIndex).then(function (page) { - return Promise.all([pdfManager.ensure(page, "rotate"), pdfManager.ensure(page, "ref"), pdfManager.ensure(page, "userUnit"), pdfManager.ensure(page, "view")]).then(function ([rotate, ref, userUnit, view]) { - return { - rotate, - ref, - userUnit, - view - }; - }); - }); - }); - handler.on("GetPageIndex", function wphSetupGetPageIndex({ - ref - }) { - const pageRef = _primitives.Ref.get(ref.num, ref.gen); - - return pdfManager.ensureCatalog("getPageIndex", [pageRef]); - }); - handler.on("GetDestinations", function wphSetupGetDestinations(data) { - return pdfManager.ensureCatalog("destinations"); - }); - handler.on("GetDestination", function wphSetupGetDestination(data) { - return pdfManager.ensureCatalog("getDestination", [data.id]); - }); - handler.on("GetPageLabels", function wphSetupGetPageLabels(data) { - return pdfManager.ensureCatalog("pageLabels"); - }); - handler.on("GetPageLayout", function wphSetupGetPageLayout(data) { - return pdfManager.ensureCatalog("pageLayout"); - }); - handler.on("GetPageMode", function wphSetupGetPageMode(data) { - return pdfManager.ensureCatalog("pageMode"); - }); - handler.on("GetViewerPreferences", function (data) { - return pdfManager.ensureCatalog("viewerPreferences"); - }); - handler.on("GetOpenAction", function (data) { - return pdfManager.ensureCatalog("openAction"); - }); - handler.on("GetAttachments", function wphSetupGetAttachments(data) { - return pdfManager.ensureCatalog("attachments"); - }); - handler.on("GetJavaScript", function wphSetupGetJavaScript(data) { - return pdfManager.ensureCatalog("javaScript"); - }); - handler.on("GetDocJSActions", function wphSetupGetDocJSActions(data) { - return pdfManager.ensureCatalog("jsActions"); - }); - handler.on("GetPageJSActions", function ({ - pageIndex - }) { - return pdfManager.getPage(pageIndex).then(function (page) { - return pdfManager.ensure(page, "jsActions"); - }); - }); - handler.on("GetOutline", function wphSetupGetOutline(data) { - return pdfManager.ensureCatalog("documentOutline"); - }); - handler.on("GetOptionalContentConfig", function (data) { - return pdfManager.ensureCatalog("optionalContentConfig"); - }); - handler.on("GetPermissions", function (data) { - return pdfManager.ensureCatalog("permissions"); - }); - handler.on("GetMetadata", function wphSetupGetMetadata(data) { - return Promise.all([pdfManager.ensureDoc("documentInfo"), pdfManager.ensureCatalog("metadata")]); - }); - handler.on("GetMarkInfo", function wphSetupGetMarkInfo(data) { - return pdfManager.ensureCatalog("markInfo"); - }); - handler.on("GetData", function wphSetupGetData(data) { - pdfManager.requestLoadedStream(); - return pdfManager.onLoadedStream().then(function (stream) { - return stream.bytes; - }); - }); - handler.on("GetAnnotations", function ({ - pageIndex, - intent - }) { - return pdfManager.getPage(pageIndex).then(function (page) { - return page.getAnnotationsData(intent); - }); - }); - handler.on("GetFieldObjects", function (data) { - return pdfManager.ensureDoc("fieldObjects"); - }); - handler.on("HasJSActions", function (data) { - return pdfManager.ensureDoc("hasJSActions"); - }); - handler.on("GetCalculationOrderIds", function (data) { - return pdfManager.ensureDoc("calculationOrderIds"); - }); - handler.on("SaveDocument", function ({ - isPureXfa, - numPages, - annotationStorage, - filename - }) { - pdfManager.requestLoadedStream(); - const promises = [pdfManager.onLoadedStream(), pdfManager.ensureCatalog("acroForm"), pdfManager.ensureCatalog("acroFormRef"), pdfManager.ensureDoc("xref"), pdfManager.ensureDoc("startXRef")]; - - if (isPureXfa) { - promises.push(pdfManager.serializeXfaData(annotationStorage)); - } else { - for (let pageIndex = 0; pageIndex < numPages; pageIndex++) { - promises.push(pdfManager.getPage(pageIndex).then(function (page) { - const task = new WorkerTask(`Save: page ${pageIndex}`); - return page.save(handler, task, annotationStorage).finally(function () { - finishWorkerTask(task); - }); - })); - } - } - - return Promise.all(promises).then(function ([stream, acroForm, acroFormRef, xref, startXRef, ...refs]) { - let newRefs = []; - let xfaData = null; - - if (isPureXfa) { - xfaData = refs[0]; - - if (!xfaData) { - return stream.bytes; - } - } else { - for (const ref of refs) { - newRefs = ref.filter(x => x !== null).reduce((a, b) => a.concat(b), newRefs); - } - - if (newRefs.length === 0) { - return stream.bytes; - } - } - - const xfa = acroForm instanceof _primitives.Dict && acroForm.get("XFA") || null; - let xfaDatasetsRef = null; - let hasXfaDatasetsEntry = false; - - if (Array.isArray(xfa)) { - for (let i = 0, ii = xfa.length; i < ii; i += 2) { - if (xfa[i] === "datasets") { - xfaDatasetsRef = xfa[i + 1]; - acroFormRef = null; - hasXfaDatasetsEntry = true; - } - } - - if (xfaDatasetsRef === null) { - xfaDatasetsRef = xref.getNewRef(); - } - } else if (xfa) { - acroFormRef = null; - (0, _util.warn)("Unsupported XFA type."); - } - - let newXrefInfo = Object.create(null); - - if (xref.trailer) { - const infoObj = Object.create(null); - const xrefInfo = xref.trailer.get("Info") || null; - - if (xrefInfo instanceof _primitives.Dict) { - xrefInfo.forEach((key, value) => { - if ((0, _util.isString)(key) && (0, _util.isString)(value)) { - infoObj[key] = (0, _util.stringToPDFString)(value); - } - }); - } - - newXrefInfo = { - rootRef: xref.trailer.getRaw("Root") || null, - encryptRef: xref.trailer.getRaw("Encrypt") || null, - newRef: xref.getNewRef(), - infoRef: xref.trailer.getRaw("Info") || null, - info: infoObj, - fileIds: xref.trailer.get("ID") || null, - startXRef, - filename - }; - } - - xref.resetNewRef(); - return (0, _writer.incrementalUpdate)({ - originalData: stream.bytes, - xrefInfo: newXrefInfo, - newRefs, - xref, - hasXfa: !!xfa, - xfaDatasetsRef, - hasXfaDatasetsEntry, - acroFormRef, - acroForm, - xfaData - }); - }); - }); - handler.on("GetOperatorList", function wphSetupRenderPage(data, sink) { - const pageIndex = data.pageIndex; - pdfManager.getPage(pageIndex).then(function (page) { - const task = new WorkerTask(`GetOperatorList: page ${pageIndex}`); - startWorkerTask(task); - const start = verbosity >= _util.VerbosityLevel.INFOS ? Date.now() : 0; - page.getOperatorList({ - handler, - sink, - task, - intent: data.intent, - cacheKey: data.cacheKey, - annotationStorage: data.annotationStorage - }).then(function (operatorListInfo) { - finishWorkerTask(task); - - if (start) { - (0, _util.info)(`page=${pageIndex + 1} - getOperatorList: time=` + `${Date.now() - start}ms, len=${operatorListInfo.length}`); - } - - sink.close(); - }, function (reason) { - finishWorkerTask(task); - - if (task.terminated) { - return; - } - - handler.send("UnsupportedFeature", { - featureId: _util.UNSUPPORTED_FEATURES.errorOperatorList - }); - sink.error(reason); - }); - }); - }); - handler.on("GetTextContent", function wphExtractText(data, sink) { - const pageIndex = data.pageIndex; - pdfManager.getPage(pageIndex).then(function (page) { - const task = new WorkerTask("GetTextContent: page " + pageIndex); - startWorkerTask(task); - const start = verbosity >= _util.VerbosityLevel.INFOS ? Date.now() : 0; - page.extractTextContent({ - handler, - task, - sink, - normalizeWhitespace: data.normalizeWhitespace, - includeMarkedContent: data.includeMarkedContent, - combineTextItems: data.combineTextItems - }).then(function () { - finishWorkerTask(task); - - if (start) { - (0, _util.info)(`page=${pageIndex + 1} - getTextContent: time=` + `${Date.now() - start}ms`); - } - - sink.close(); - }, function (reason) { - finishWorkerTask(task); - - if (task.terminated) { - return; - } - - sink.error(reason); - }); - }); - }); - handler.on("GetStructTree", function wphGetStructTree(data) { - return pdfManager.getPage(data.pageIndex).then(function (page) { - return pdfManager.ensure(page, "getStructTree"); - }); - }); - handler.on("FontFallback", function (data) { - return pdfManager.fontFallback(data.id, handler); - }); - handler.on("Cleanup", function wphCleanup(data) { - return pdfManager.cleanup(true); - }); - handler.on("Terminate", function wphTerminate(data) { - terminated = true; - const waitOn = []; - - if (pdfManager) { - pdfManager.terminate(new _util.AbortException("Worker was terminated.")); - const cleanupPromise = pdfManager.cleanup(); - waitOn.push(cleanupPromise); - pdfManager = null; - } else { - (0, _primitives.clearPrimitiveCaches)(); - } - - if (cancelXHRs) { - cancelXHRs(new _util.AbortException("Worker was terminated.")); - } - - for (const task of WorkerTasks) { - waitOn.push(task.finished); - task.terminate(); - } - - return Promise.all(waitOn).then(function () { - handler.destroy(); - handler = null; - }); - }); - handler.on("Ready", function wphReady(data) { - setupDoc(docParams); - docParams = null; - }); - return workerHandlerName; - } - - static initializeFromPort(port) { - const handler = new _message_handler.MessageHandler("worker", "main", port); - WorkerMessageHandler.setup(handler, port); - handler.send("ready", null); - } - -} - -exports.WorkerMessageHandler = WorkerMessageHandler; - -function isMessagePort(maybePort) { - return typeof maybePort.postMessage === "function" && "onmessage" in maybePort; -} - -if (typeof window === "undefined" && !_is_node.isNodeJS && typeof self !== "undefined" && isMessagePort(self)) { - WorkerMessageHandler.initializeFromPort(self); -} - -/***/ }), -/* 2 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.VerbosityLevel = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.UNSUPPORTED_FEATURES = exports.TextRenderingMode = exports.StreamType = exports.RenderingIntentFlag = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.IsLittleEndianCached = exports.IsEvalSupportedCached = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FontType = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = exports.CMapCompressionType = exports.BaseException = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMode = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0; -exports.arrayByteLength = arrayByteLength; -exports.arraysToBytes = arraysToBytes; -exports.assert = assert; -exports.bytesToString = bytesToString; -exports.createObjectURL = createObjectURL; -exports.createPromiseCapability = createPromiseCapability; -exports.createValidAbsoluteUrl = createValidAbsoluteUrl; -exports.escapeString = escapeString; -exports.getModificationDate = getModificationDate; -exports.getVerbosityLevel = getVerbosityLevel; -exports.info = info; -exports.isArrayBuffer = isArrayBuffer; -exports.isArrayEqual = isArrayEqual; -exports.isAscii = isAscii; -exports.isBool = isBool; -exports.isNum = isNum; -exports.isSameOrigin = isSameOrigin; -exports.isString = isString; -exports.objectFromMap = objectFromMap; -exports.objectSize = objectSize; -exports.removeNullCharacters = removeNullCharacters; -exports.setVerbosityLevel = setVerbosityLevel; -exports.shadow = shadow; -exports.string32 = string32; -exports.stringToBytes = stringToBytes; -exports.stringToPDFString = stringToPDFString; -exports.stringToUTF16BEString = stringToUTF16BEString; -exports.stringToUTF8String = stringToUTF8String; -exports.unreachable = unreachable; -exports.utf8StringToString = utf8StringToString; -exports.warn = warn; - -__w_pdfjs_require__(3); - -const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; -exports.IDENTITY_MATRIX = IDENTITY_MATRIX; -const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; -exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX; -const RenderingIntentFlag = { - ANY: 0x01, - DISPLAY: 0x02, - PRINT: 0x04, - ANNOTATIONS_FORMS: 0x10, - ANNOTATIONS_STORAGE: 0x20, - ANNOTATIONS_DISABLE: 0x40, - OPLIST: 0x100 -}; -exports.RenderingIntentFlag = RenderingIntentFlag; -const AnnotationMode = { - DISABLE: 0, - ENABLE: 1, - ENABLE_FORMS: 2, - ENABLE_STORAGE: 3 -}; -exports.AnnotationMode = AnnotationMode; -const PermissionFlag = { - PRINT: 0x04, - MODIFY_CONTENTS: 0x08, - COPY: 0x10, - MODIFY_ANNOTATIONS: 0x20, - FILL_INTERACTIVE_FORMS: 0x100, - COPY_FOR_ACCESSIBILITY: 0x200, - ASSEMBLE: 0x400, - PRINT_HIGH_QUALITY: 0x800 -}; -exports.PermissionFlag = PermissionFlag; -const TextRenderingMode = { - FILL: 0, - STROKE: 1, - FILL_STROKE: 2, - INVISIBLE: 3, - FILL_ADD_TO_PATH: 4, - STROKE_ADD_TO_PATH: 5, - FILL_STROKE_ADD_TO_PATH: 6, - ADD_TO_PATH: 7, - FILL_STROKE_MASK: 3, - ADD_TO_PATH_FLAG: 4 -}; -exports.TextRenderingMode = TextRenderingMode; -const ImageKind = { - GRAYSCALE_1BPP: 1, - RGB_24BPP: 2, - RGBA_32BPP: 3 -}; -exports.ImageKind = ImageKind; -const AnnotationType = { - TEXT: 1, - LINK: 2, - FREETEXT: 3, - LINE: 4, - SQUARE: 5, - CIRCLE: 6, - POLYGON: 7, - POLYLINE: 8, - HIGHLIGHT: 9, - UNDERLINE: 10, - SQUIGGLY: 11, - STRIKEOUT: 12, - STAMP: 13, - CARET: 14, - INK: 15, - POPUP: 16, - FILEATTACHMENT: 17, - SOUND: 18, - MOVIE: 19, - WIDGET: 20, - SCREEN: 21, - PRINTERMARK: 22, - TRAPNET: 23, - WATERMARK: 24, - THREED: 25, - REDACT: 26 -}; -exports.AnnotationType = AnnotationType; -const AnnotationStateModelType = { - MARKED: "Marked", - REVIEW: "Review" -}; -exports.AnnotationStateModelType = AnnotationStateModelType; -const AnnotationMarkedState = { - MARKED: "Marked", - UNMARKED: "Unmarked" -}; -exports.AnnotationMarkedState = AnnotationMarkedState; -const AnnotationReviewState = { - ACCEPTED: "Accepted", - REJECTED: "Rejected", - CANCELLED: "Cancelled", - COMPLETED: "Completed", - NONE: "None" -}; -exports.AnnotationReviewState = AnnotationReviewState; -const AnnotationReplyType = { - GROUP: "Group", - REPLY: "R" -}; -exports.AnnotationReplyType = AnnotationReplyType; -const AnnotationFlag = { - INVISIBLE: 0x01, - HIDDEN: 0x02, - PRINT: 0x04, - NOZOOM: 0x08, - NOROTATE: 0x10, - NOVIEW: 0x20, - READONLY: 0x40, - LOCKED: 0x80, - TOGGLENOVIEW: 0x100, - LOCKEDCONTENTS: 0x200 -}; -exports.AnnotationFlag = AnnotationFlag; -const AnnotationFieldFlag = { - READONLY: 0x0000001, - REQUIRED: 0x0000002, - NOEXPORT: 0x0000004, - MULTILINE: 0x0001000, - PASSWORD: 0x0002000, - NOTOGGLETOOFF: 0x0004000, - RADIO: 0x0008000, - PUSHBUTTON: 0x0010000, - COMBO: 0x0020000, - EDIT: 0x0040000, - SORT: 0x0080000, - FILESELECT: 0x0100000, - MULTISELECT: 0x0200000, - DONOTSPELLCHECK: 0x0400000, - DONOTSCROLL: 0x0800000, - COMB: 0x1000000, - RICHTEXT: 0x2000000, - RADIOSINUNISON: 0x2000000, - COMMITONSELCHANGE: 0x4000000 -}; -exports.AnnotationFieldFlag = AnnotationFieldFlag; -const AnnotationBorderStyleType = { - SOLID: 1, - DASHED: 2, - BEVELED: 3, - INSET: 4, - UNDERLINE: 5 -}; -exports.AnnotationBorderStyleType = AnnotationBorderStyleType; -const AnnotationActionEventType = { - E: "Mouse Enter", - X: "Mouse Exit", - D: "Mouse Down", - U: "Mouse Up", - Fo: "Focus", - Bl: "Blur", - PO: "PageOpen", - PC: "PageClose", - PV: "PageVisible", - PI: "PageInvisible", - K: "Keystroke", - F: "Format", - V: "Validate", - C: "Calculate" -}; -exports.AnnotationActionEventType = AnnotationActionEventType; -const DocumentActionEventType = { - WC: "WillClose", - WS: "WillSave", - DS: "DidSave", - WP: "WillPrint", - DP: "DidPrint" -}; -exports.DocumentActionEventType = DocumentActionEventType; -const PageActionEventType = { - O: "PageOpen", - C: "PageClose" -}; -exports.PageActionEventType = PageActionEventType; -const StreamType = { - UNKNOWN: "UNKNOWN", - FLATE: "FLATE", - LZW: "LZW", - DCT: "DCT", - JPX: "JPX", - JBIG: "JBIG", - A85: "A85", - AHX: "AHX", - CCF: "CCF", - RLX: "RLX" -}; -exports.StreamType = StreamType; -const FontType = { - UNKNOWN: "UNKNOWN", - TYPE1: "TYPE1", - TYPE1STANDARD: "TYPE1STANDARD", - TYPE1C: "TYPE1C", - CIDFONTTYPE0: "CIDFONTTYPE0", - CIDFONTTYPE0C: "CIDFONTTYPE0C", - TRUETYPE: "TRUETYPE", - CIDFONTTYPE2: "CIDFONTTYPE2", - TYPE3: "TYPE3", - OPENTYPE: "OPENTYPE", - TYPE0: "TYPE0", - MMTYPE1: "MMTYPE1" -}; -exports.FontType = FontType; -const VerbosityLevel = { - ERRORS: 0, - WARNINGS: 1, - INFOS: 5 -}; -exports.VerbosityLevel = VerbosityLevel; -const CMapCompressionType = { - NONE: 0, - BINARY: 1, - STREAM: 2 -}; -exports.CMapCompressionType = CMapCompressionType; -const OPS = { - dependency: 1, - setLineWidth: 2, - setLineCap: 3, - setLineJoin: 4, - setMiterLimit: 5, - setDash: 6, - setRenderingIntent: 7, - setFlatness: 8, - setGState: 9, - save: 10, - restore: 11, - transform: 12, - moveTo: 13, - lineTo: 14, - curveTo: 15, - curveTo2: 16, - curveTo3: 17, - closePath: 18, - rectangle: 19, - stroke: 20, - closeStroke: 21, - fill: 22, - eoFill: 23, - fillStroke: 24, - eoFillStroke: 25, - closeFillStroke: 26, - closeEOFillStroke: 27, - endPath: 28, - clip: 29, - eoClip: 30, - beginText: 31, - endText: 32, - setCharSpacing: 33, - setWordSpacing: 34, - setHScale: 35, - setLeading: 36, - setFont: 37, - setTextRenderingMode: 38, - setTextRise: 39, - moveText: 40, - setLeadingMoveText: 41, - setTextMatrix: 42, - nextLine: 43, - showText: 44, - showSpacedText: 45, - nextLineShowText: 46, - nextLineSetSpacingShowText: 47, - setCharWidth: 48, - setCharWidthAndBounds: 49, - setStrokeColorSpace: 50, - setFillColorSpace: 51, - setStrokeColor: 52, - setStrokeColorN: 53, - setFillColor: 54, - setFillColorN: 55, - setStrokeGray: 56, - setFillGray: 57, - setStrokeRGBColor: 58, - setFillRGBColor: 59, - setStrokeCMYKColor: 60, - setFillCMYKColor: 61, - shadingFill: 62, - beginInlineImage: 63, - beginImageData: 64, - endInlineImage: 65, - paintXObject: 66, - markPoint: 67, - markPointProps: 68, - beginMarkedContent: 69, - beginMarkedContentProps: 70, - endMarkedContent: 71, - beginCompat: 72, - endCompat: 73, - paintFormXObjectBegin: 74, - paintFormXObjectEnd: 75, - beginGroup: 76, - endGroup: 77, - beginAnnotations: 78, - endAnnotations: 79, - beginAnnotation: 80, - endAnnotation: 81, - paintJpegXObject: 82, - paintImageMaskXObject: 83, - paintImageMaskXObjectGroup: 84, - paintImageXObject: 85, - paintInlineImageXObject: 86, - paintInlineImageXObjectGroup: 87, - paintImageXObjectRepeat: 88, - paintImageMaskXObjectRepeat: 89, - paintSolidColorImageMask: 90, - constructPath: 91 -}; -exports.OPS = OPS; -const UNSUPPORTED_FEATURES = { - unknown: "unknown", - forms: "forms", - javaScript: "javaScript", - signatures: "signatures", - smask: "smask", - shadingPattern: "shadingPattern", - font: "font", - errorTilingPattern: "errorTilingPattern", - errorExtGState: "errorExtGState", - errorXObject: "errorXObject", - errorFontLoadType3: "errorFontLoadType3", - errorFontState: "errorFontState", - errorFontMissing: "errorFontMissing", - errorFontTranslate: "errorFontTranslate", - errorColorSpace: "errorColorSpace", - errorOperatorList: "errorOperatorList", - errorFontToUnicode: "errorFontToUnicode", - errorFontLoadNative: "errorFontLoadNative", - errorFontBuildPath: "errorFontBuildPath", - errorFontGetPath: "errorFontGetPath", - errorMarkedContent: "errorMarkedContent", - errorContentSubStream: "errorContentSubStream" -}; -exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES; -const PasswordResponses = { - NEED_PASSWORD: 1, - INCORRECT_PASSWORD: 2 -}; -exports.PasswordResponses = PasswordResponses; -let verbosity = VerbosityLevel.WARNINGS; - -function setVerbosityLevel(level) { - if (Number.isInteger(level)) { - verbosity = level; - } -} - -function getVerbosityLevel() { - return verbosity; -} - -function info(msg) { - if (verbosity >= VerbosityLevel.INFOS) { - console.log(`Info: ${msg}`); - } -} - -function warn(msg) { - if (verbosity >= VerbosityLevel.WARNINGS) { - console.log(`Warning: ${msg}`); - } -} - -function unreachable(msg) { - throw new Error(msg); -} - -function assert(cond, msg) { - if (!cond) { - unreachable(msg); - } -} - -function isSameOrigin(baseUrl, otherUrl) { - let base; - - try { - base = new URL(baseUrl); - - if (!base.origin || base.origin === "null") { - return false; - } - } catch (e) { - return false; - } - - const other = new URL(otherUrl, base); - return base.origin === other.origin; -} - -function _isValidProtocol(url) { - if (!url) { - return false; - } - - switch (url.protocol) { - case "http:": - case "https:": - case "ftp:": - case "mailto:": - case "tel:": - return true; - - default: - return false; - } -} - -function createValidAbsoluteUrl(url, baseUrl = null, options = null) { - if (!url) { - return null; - } - - try { - if (options && typeof url === "string") { - if (options.addDefaultProtocol && url.startsWith("www.")) { - const dots = url.match(/\./g); - - if (dots && dots.length >= 2) { - url = `http://${url}`; - } - } - - if (options.tryConvertEncoding) { - try { - url = stringToUTF8String(url); - } catch (ex) {} - } - } - - const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url); - - if (_isValidProtocol(absoluteUrl)) { - return absoluteUrl; - } - } catch (ex) {} - - return null; -} - -function shadow(obj, prop, value) { - Object.defineProperty(obj, prop, { - value, - enumerable: true, - configurable: true, - writable: false - }); - return value; -} - -const BaseException = function BaseExceptionClosure() { - function BaseException(message, name) { - if (this.constructor === BaseException) { - unreachable("Cannot initialize BaseException."); - } - - this.message = message; - this.name = name; - } - - BaseException.prototype = new Error(); - BaseException.constructor = BaseException; - return BaseException; -}(); - -exports.BaseException = BaseException; - -class PasswordException extends BaseException { - constructor(msg, code) { - super(msg, "PasswordException"); - this.code = code; - } - -} - -exports.PasswordException = PasswordException; - -class UnknownErrorException extends BaseException { - constructor(msg, details) { - super(msg, "UnknownErrorException"); - this.details = details; - } - -} - -exports.UnknownErrorException = UnknownErrorException; - -class InvalidPDFException extends BaseException { - constructor(msg) { - super(msg, "InvalidPDFException"); - } - -} - -exports.InvalidPDFException = InvalidPDFException; - -class MissingPDFException extends BaseException { - constructor(msg) { - super(msg, "MissingPDFException"); - } - -} - -exports.MissingPDFException = MissingPDFException; - -class UnexpectedResponseException extends BaseException { - constructor(msg, status) { - super(msg, "UnexpectedResponseException"); - this.status = status; - } - -} - -exports.UnexpectedResponseException = UnexpectedResponseException; - -class FormatError extends BaseException { - constructor(msg) { - super(msg, "FormatError"); - } - -} - -exports.FormatError = FormatError; - -class AbortException extends BaseException { - constructor(msg) { - super(msg, "AbortException"); - } - -} - -exports.AbortException = AbortException; -const NullCharactersRegExp = /\x00+/g; -const InvisibleCharactersRegExp = /[\x01-\x1F]/g; - -function removeNullCharacters(str, replaceInvisible = false) { - if (typeof str !== "string") { - warn("The argument for removeNullCharacters must be a string."); - return str; - } - - if (replaceInvisible) { - str = str.replace(InvisibleCharactersRegExp, " "); - } - - return str.replace(NullCharactersRegExp, ""); -} - -function bytesToString(bytes) { - assert(bytes !== null && typeof bytes === "object" && bytes.length !== undefined, "Invalid argument for bytesToString"); - const length = bytes.length; - const MAX_ARGUMENT_COUNT = 8192; - - if (length < MAX_ARGUMENT_COUNT) { - return String.fromCharCode.apply(null, bytes); - } - - const strBuf = []; - - for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) { - const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); - const chunk = bytes.subarray(i, chunkEnd); - strBuf.push(String.fromCharCode.apply(null, chunk)); - } - - return strBuf.join(""); -} - -function stringToBytes(str) { - assert(typeof str === "string", "Invalid argument for stringToBytes"); - const length = str.length; - const bytes = new Uint8Array(length); - - for (let i = 0; i < length; ++i) { - bytes[i] = str.charCodeAt(i) & 0xff; - } - - return bytes; -} - -function arrayByteLength(arr) { - if (arr.length !== undefined) { - return arr.length; - } - - assert(arr.byteLength !== undefined, "arrayByteLength - invalid argument."); - return arr.byteLength; -} - -function arraysToBytes(arr) { - const length = arr.length; - - if (length === 1 && arr[0] instanceof Uint8Array) { - return arr[0]; - } - - let resultLength = 0; - - for (let i = 0; i < length; i++) { - resultLength += arrayByteLength(arr[i]); - } - - let pos = 0; - const data = new Uint8Array(resultLength); - - for (let i = 0; i < length; i++) { - let item = arr[i]; - - if (!(item instanceof Uint8Array)) { - if (typeof item === "string") { - item = stringToBytes(item); - } else { - item = new Uint8Array(item); - } - } - - const itemLength = item.byteLength; - data.set(item, pos); - pos += itemLength; - } - - return data; -} - -function string32(value) { - return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); -} - -function objectSize(obj) { - return Object.keys(obj).length; -} - -function objectFromMap(map) { - const obj = Object.create(null); - - for (const [key, value] of map) { - obj[key] = value; - } - - return obj; -} - -function isLittleEndian() { - const buffer8 = new Uint8Array(4); - buffer8[0] = 1; - const view32 = new Uint32Array(buffer8.buffer, 0, 1); - return view32[0] === 1; -} - -const IsLittleEndianCached = { - get value() { - return shadow(this, "value", isLittleEndian()); - } - -}; -exports.IsLittleEndianCached = IsLittleEndianCached; - -function isEvalSupported() { - try { - new Function(""); - return true; - } catch (e) { - return false; - } -} - -const IsEvalSupportedCached = { - get value() { - return shadow(this, "value", isEvalSupported()); - } - -}; -exports.IsEvalSupportedCached = IsEvalSupportedCached; -const hexNumbers = [...Array(256).keys()].map(n => n.toString(16).padStart(2, "0")); - -class Util { - static makeHexColor(r, g, b) { - return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`; - } - - static transform(m1, m2) { - return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]]; - } - - static applyTransform(p, m) { - const xt = p[0] * m[0] + p[1] * m[2] + m[4]; - const yt = p[0] * m[1] + p[1] * m[3] + m[5]; - return [xt, yt]; - } - - static applyInverseTransform(p, m) { - const d = m[0] * m[3] - m[1] * m[2]; - const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; - const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; - return [xt, yt]; - } - - static getAxialAlignedBoundingBox(r, m) { - const p1 = Util.applyTransform(r, m); - const p2 = Util.applyTransform(r.slice(2, 4), m); - const p3 = Util.applyTransform([r[0], r[3]], m); - const p4 = Util.applyTransform([r[2], r[1]], m); - return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])]; - } - - static inverseTransform(m) { - const d = m[0] * m[3] - m[1] * m[2]; - return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d]; - } - - static apply3dTransform(m, v) { - return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]]; - } - - static singularValueDecompose2dScale(m) { - const transpose = [m[0], m[2], m[1], m[3]]; - const a = m[0] * transpose[0] + m[1] * transpose[2]; - const b = m[0] * transpose[1] + m[1] * transpose[3]; - const c = m[2] * transpose[0] + m[3] * transpose[2]; - const d = m[2] * transpose[1] + m[3] * transpose[3]; - const first = (a + d) / 2; - const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2; - const sx = first + second || 1; - const sy = first - second || 1; - return [Math.sqrt(sx), Math.sqrt(sy)]; - } - - static normalizeRect(rect) { - const r = rect.slice(0); - - if (rect[0] > rect[2]) { - r[0] = rect[2]; - r[2] = rect[0]; - } - - if (rect[1] > rect[3]) { - r[1] = rect[3]; - r[3] = rect[1]; - } - - return r; - } - - static intersect(rect1, rect2) { - function compare(a, b) { - return a - b; - } - - const orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare); - const orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare); - const result = []; - rect1 = Util.normalizeRect(rect1); - rect2 = Util.normalizeRect(rect2); - - if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) { - result[0] = orderedX[1]; - result[2] = orderedX[2]; - } else { - return null; - } - - if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) { - result[1] = orderedY[1]; - result[3] = orderedY[2]; - } else { - return null; - } - - return result; - } - - static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3) { - const tvalues = [], - bounds = [[], []]; - let a, b, c, t, t1, t2, b2ac, sqrtb2ac; - - for (let i = 0; i < 2; ++i) { - if (i === 0) { - b = 6 * x0 - 12 * x1 + 6 * x2; - a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3; - c = 3 * x1 - 3 * x0; - } else { - b = 6 * y0 - 12 * y1 + 6 * y2; - a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3; - c = 3 * y1 - 3 * y0; - } - - if (Math.abs(a) < 1e-12) { - if (Math.abs(b) < 1e-12) { - continue; - } - - t = -c / b; - - if (0 < t && t < 1) { - tvalues.push(t); - } - - continue; - } - - b2ac = b * b - 4 * c * a; - sqrtb2ac = Math.sqrt(b2ac); - - if (b2ac < 0) { - continue; - } - - t1 = (-b + sqrtb2ac) / (2 * a); - - if (0 < t1 && t1 < 1) { - tvalues.push(t1); - } - - t2 = (-b - sqrtb2ac) / (2 * a); - - if (0 < t2 && t2 < 1) { - tvalues.push(t2); - } - } - - let j = tvalues.length, - mt; - const jlen = j; - - while (j--) { - t = tvalues[j]; - mt = 1 - t; - bounds[0][j] = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3; - bounds[1][j] = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3; - } - - bounds[0][jlen] = x0; - bounds[1][jlen] = y0; - bounds[0][jlen + 1] = x3; - bounds[1][jlen + 1] = y3; - bounds[0].length = bounds[1].length = jlen + 2; - return [Math.min(...bounds[0]), Math.min(...bounds[1]), Math.max(...bounds[0]), Math.max(...bounds[1])]; - } - -} - -exports.Util = Util; -const PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8, 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d, 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac]; - -function stringToPDFString(str) { - const length = str.length, - strBuf = []; - - if (str[0] === "\xFE" && str[1] === "\xFF") { - for (let i = 2; i < length; i += 2) { - strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1))); - } - } else if (str[0] === "\xFF" && str[1] === "\xFE") { - for (let i = 2; i < length; i += 2) { - strBuf.push(String.fromCharCode(str.charCodeAt(i + 1) << 8 | str.charCodeAt(i))); - } - } else { - for (let i = 0; i < length; ++i) { - const code = PDFStringTranslateTable[str.charCodeAt(i)]; - strBuf.push(code ? String.fromCharCode(code) : str.charAt(i)); - } - } - - return strBuf.join(""); -} - -function escapeString(str) { - return str.replace(/([()\\\n\r])/g, match => { - if (match === "\n") { - return "\\n"; - } else if (match === "\r") { - return "\\r"; - } - - return `\\${match}`; - }); -} - -function isAscii(str) { - return /^[\x00-\x7F]*$/.test(str); -} - -function stringToUTF16BEString(str) { - const buf = ["\xFE\xFF"]; - - for (let i = 0, ii = str.length; i < ii; i++) { - const char = str.charCodeAt(i); - buf.push(String.fromCharCode(char >> 8 & 0xff), String.fromCharCode(char & 0xff)); - } - - return buf.join(""); -} - -function stringToUTF8String(str) { - return decodeURIComponent(escape(str)); -} - -function utf8StringToString(str) { - return unescape(encodeURIComponent(str)); -} - -function isBool(v) { - return typeof v === "boolean"; -} - -function isNum(v) { - return typeof v === "number"; -} - -function isString(v) { - return typeof v === "string"; -} - -function isArrayBuffer(v) { - return typeof v === "object" && v !== null && v.byteLength !== undefined; -} - -function isArrayEqual(arr1, arr2) { - if (arr1.length !== arr2.length) { - return false; - } - - for (let i = 0, ii = arr1.length; i < ii; i++) { - if (arr1[i] !== arr2[i]) { - return false; - } - } - - return true; -} - -function getModificationDate(date = new Date()) { - const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), date.getUTCDate().toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")]; - return buffer.join(""); -} - -function createPromiseCapability() { - const capability = Object.create(null); - let isSettled = false; - Object.defineProperty(capability, "settled", { - get() { - return isSettled; - } - - }); - capability.promise = new Promise(function (resolve, reject) { - capability.resolve = function (data) { - isSettled = true; - resolve(data); - }; - - capability.reject = function (reason) { - isSettled = true; - reject(reason); - }; - }); - return capability; -} - -function createObjectURL(data, contentType = "", forceDataSchema = false) { - if (URL.createObjectURL && typeof Blob !== "undefined" && !forceDataSchema) { - return URL.createObjectURL(new Blob([data], { - type: contentType - })); - } - - const digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - let buffer = `data:${contentType};base64,`; - - for (let i = 0, ii = data.length; i < ii; i += 3) { - const b1 = data[i] & 0xff; - const b2 = data[i + 1] & 0xff; - const b3 = data[i + 2] & 0xff; - const d1 = b1 >> 2, - d2 = (b1 & 3) << 4 | b2 >> 4; - const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64; - const d4 = i + 2 < ii ? b3 & 0x3f : 64; - buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4]; - } - - return buffer; -} - -/***/ }), -/* 3 */ -/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { - - - -__w_pdfjs_require__(4); - -/***/ }), -/* 4 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.isNodeJS = void 0; -const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser"); -exports.isNodeJS = isNodeJS; - -/***/ }), -/* 5 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.RefSetCache = exports.RefSet = exports.Ref = exports.Name = exports.EOF = exports.Dict = exports.Cmd = exports.CIRCULAR_REF = void 0; -exports.clearPrimitiveCaches = clearPrimitiveCaches; -exports.isCmd = isCmd; -exports.isDict = isDict; -exports.isName = isName; -exports.isRef = isRef; -exports.isRefsEqual = isRefsEqual; -exports.isStream = isStream; - -var _util = __w_pdfjs_require__(2); - -var _base_stream = __w_pdfjs_require__(6); - -const CIRCULAR_REF = Symbol("CIRCULAR_REF"); -exports.CIRCULAR_REF = CIRCULAR_REF; -const EOF = Symbol("EOF"); -exports.EOF = EOF; - -const Name = function NameClosure() { - let nameCache = Object.create(null); - - class Name { - constructor(name) { - this.name = name; - } - - static get(name) { - const nameValue = nameCache[name]; - return nameValue ? nameValue : nameCache[name] = new Name(name); - } - - static _clearCache() { - nameCache = Object.create(null); - } - - } - - return Name; -}(); - -exports.Name = Name; - -const Cmd = function CmdClosure() { - let cmdCache = Object.create(null); - - class Cmd { - constructor(cmd) { - this.cmd = cmd; - } - - static get(cmd) { - const cmdValue = cmdCache[cmd]; - return cmdValue ? cmdValue : cmdCache[cmd] = new Cmd(cmd); - } - - static _clearCache() { - cmdCache = Object.create(null); - } - - } - - return Cmd; -}(); - -exports.Cmd = Cmd; - -const nonSerializable = function nonSerializableClosure() { - return nonSerializable; -}; - -class Dict { - constructor(xref = null) { - this._map = Object.create(null); - this.xref = xref; - this.objId = null; - this.suppressEncryption = false; - this.__nonSerializable__ = nonSerializable; - } - - assignXref(newXref) { - this.xref = newXref; - } - - get size() { - return Object.keys(this._map).length; - } - - get(key1, key2, key3) { - let value = this._map[key1]; - - if (value === undefined && key2 !== undefined) { - value = this._map[key2]; - - if (value === undefined && key3 !== undefined) { - value = this._map[key3]; - } - } - - if (value instanceof Ref && this.xref) { - return this.xref.fetch(value, this.suppressEncryption); - } - - return value; - } - - async getAsync(key1, key2, key3) { - let value = this._map[key1]; - - if (value === undefined && key2 !== undefined) { - value = this._map[key2]; - - if (value === undefined && key3 !== undefined) { - value = this._map[key3]; - } - } - - if (value instanceof Ref && this.xref) { - return this.xref.fetchAsync(value, this.suppressEncryption); - } - - return value; - } - - getArray(key1, key2, key3) { - let value = this._map[key1]; - - if (value === undefined && key2 !== undefined) { - value = this._map[key2]; - - if (value === undefined && key3 !== undefined) { - value = this._map[key3]; - } - } - - if (value instanceof Ref && this.xref) { - value = this.xref.fetch(value, this.suppressEncryption); - } - - if (Array.isArray(value)) { - value = value.slice(); - - for (let i = 0, ii = value.length; i < ii; i++) { - if (value[i] instanceof Ref && this.xref) { - value[i] = this.xref.fetch(value[i], this.suppressEncryption); - } - } - } - - return value; - } - - getRaw(key) { - return this._map[key]; - } - - getKeys() { - return Object.keys(this._map); - } - - getRawValues() { - return Object.values(this._map); - } - - set(key, value) { - this._map[key] = value; - } - - has(key) { - return this._map[key] !== undefined; - } - - forEach(callback) { - for (const key in this._map) { - callback(key, this.get(key)); - } - } - - static get empty() { - const emptyDict = new Dict(null); - - emptyDict.set = (key, value) => { - (0, _util.unreachable)("Should not call `set` on the empty dictionary."); - }; - - return (0, _util.shadow)(this, "empty", emptyDict); - } - - static merge({ - xref, - dictArray, - mergeSubDicts = false - }) { - const mergedDict = new Dict(xref), - properties = new Map(); - - for (const dict of dictArray) { - if (!(dict instanceof Dict)) { - continue; - } - - for (const [key, value] of Object.entries(dict._map)) { - let property = properties.get(key); - - if (property === undefined) { - property = []; - properties.set(key, property); - } else if (!mergeSubDicts || !(value instanceof Dict)) { - continue; - } - - property.push(value); - } - } - - for (const [name, values] of properties) { - if (values.length === 1 || !(values[0] instanceof Dict)) { - mergedDict._map[name] = values[0]; - continue; - } - - const subDict = new Dict(xref); - - for (const dict of values) { - for (const [key, value] of Object.entries(dict._map)) { - if (subDict._map[key] === undefined) { - subDict._map[key] = value; - } - } - } - - if (subDict.size > 0) { - mergedDict._map[name] = subDict; - } - } - - properties.clear(); - return mergedDict.size > 0 ? mergedDict : Dict.empty; - } - -} - -exports.Dict = Dict; - -const Ref = function RefClosure() { - let refCache = Object.create(null); - - class Ref { - constructor(num, gen) { - this.num = num; - this.gen = gen; - } - - toString() { - if (this.gen === 0) { - return `${this.num}R`; - } - - return `${this.num}R${this.gen}`; - } - - static get(num, gen) { - const key = gen === 0 ? `${num}R` : `${num}R${gen}`; - const refValue = refCache[key]; - return refValue ? refValue : refCache[key] = new Ref(num, gen); - } - - static _clearCache() { - refCache = Object.create(null); - } - - } - - return Ref; -}(); - -exports.Ref = Ref; - -class RefSet { - constructor(parent = null) { - this._set = new Set(parent && parent._set); - } - - has(ref) { - return this._set.has(ref.toString()); - } - - put(ref) { - this._set.add(ref.toString()); - } - - remove(ref) { - this._set.delete(ref.toString()); - } - - forEach(callback) { - for (const ref of this._set.values()) { - callback(ref); - } - } - - clear() { - this._set.clear(); - } - -} - -exports.RefSet = RefSet; - -class RefSetCache { - constructor() { - this._map = new Map(); - } - - get size() { - return this._map.size; - } - - get(ref) { - return this._map.get(ref.toString()); - } - - has(ref) { - return this._map.has(ref.toString()); - } - - put(ref, obj) { - this._map.set(ref.toString(), obj); - } - - putAlias(ref, aliasRef) { - this._map.set(ref.toString(), this.get(aliasRef)); - } - - forEach(callback) { - for (const value of this._map.values()) { - callback(value); - } - } - - clear() { - this._map.clear(); - } - -} - -exports.RefSetCache = RefSetCache; - -function isName(v, name) { - return v instanceof Name && (name === undefined || v.name === name); -} - -function isCmd(v, cmd) { - return v instanceof Cmd && (cmd === undefined || v.cmd === cmd); -} - -function isDict(v, type) { - return v instanceof Dict && (type === undefined || isName(v.get("Type"), type)); -} - -function isRef(v) { - return v instanceof Ref; -} - -function isRefsEqual(v1, v2) { - return v1.num === v2.num && v1.gen === v2.gen; -} - -function isStream(v) { - return v instanceof _base_stream.BaseStream; -} - -function clearPrimitiveCaches() { - Cmd._clearCache(); - - Name._clearCache(); - - Ref._clearCache(); -} - -/***/ }), -/* 6 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.BaseStream = void 0; - -var _util = __w_pdfjs_require__(2); - -class BaseStream { - constructor() { - if (this.constructor === BaseStream) { - (0, _util.unreachable)("Cannot initialize BaseStream."); - } - } - - get length() { - (0, _util.unreachable)("Abstract getter `length` accessed"); - } - - get isEmpty() { - (0, _util.unreachable)("Abstract getter `isEmpty` accessed"); - } - - get isDataLoaded() { - return (0, _util.shadow)(this, "isDataLoaded", true); - } - - getByte() { - (0, _util.unreachable)("Abstract method `getByte` called"); - } - - getBytes(length, forceClamped = false) { - (0, _util.unreachable)("Abstract method `getBytes` called"); - } - - peekByte() { - const peekedByte = this.getByte(); - - if (peekedByte !== -1) { - this.pos--; - } - - return peekedByte; - } - - peekBytes(length, forceClamped = false) { - const bytes = this.getBytes(length, forceClamped); - this.pos -= bytes.length; - return bytes; - } - - getUint16() { - const b0 = this.getByte(); - const b1 = this.getByte(); - - if (b0 === -1 || b1 === -1) { - return -1; - } - - return (b0 << 8) + b1; - } - - getInt32() { - const b0 = this.getByte(); - const b1 = this.getByte(); - const b2 = this.getByte(); - const b3 = this.getByte(); - return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; - } - - getByteRange(begin, end) { - (0, _util.unreachable)("Abstract method `getByteRange` called"); - } - - getString(length) { - return (0, _util.bytesToString)(this.getBytes(length, false)); - } - - skip(n) { - this.pos += n || 1; - } - - reset() { - (0, _util.unreachable)("Abstract method `reset` called"); - } - - moveStart() { - (0, _util.unreachable)("Abstract method `moveStart` called"); - } - - makeSubStream(start, length, dict = null) { - (0, _util.unreachable)("Abstract method `makeSubStream` called"); - } - - getBaseStreams() { - return null; - } - -} - -exports.BaseStream = BaseStream; - -/***/ }), -/* 7 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.NetworkPdfManager = exports.LocalPdfManager = void 0; - -var _util = __w_pdfjs_require__(2); - -var _chunked_stream = __w_pdfjs_require__(8); - -var _core_utils = __w_pdfjs_require__(9); - -var _document = __w_pdfjs_require__(11); - -var _stream = __w_pdfjs_require__(10); - -function parseDocBaseUrl(url) { - if (url) { - const absoluteUrl = (0, _util.createValidAbsoluteUrl)(url); - - if (absoluteUrl) { - return absoluteUrl.href; - } - - (0, _util.warn)(`Invalid absolute docBaseUrl: "${url}".`); - } - - return null; -} - -class BasePdfManager { - constructor() { - if (this.constructor === BasePdfManager) { - (0, _util.unreachable)("Cannot initialize BasePdfManager."); - } - } - - get docId() { - return this._docId; - } - - get password() { - return this._password; - } - - get docBaseUrl() { - return this._docBaseUrl; - } - - onLoadedStream() { - (0, _util.unreachable)("Abstract method `onLoadedStream` called"); - } - - ensureDoc(prop, args) { - return this.ensure(this.pdfDocument, prop, args); - } - - ensureXRef(prop, args) { - return this.ensure(this.pdfDocument.xref, prop, args); - } - - ensureCatalog(prop, args) { - return this.ensure(this.pdfDocument.catalog, prop, args); - } - - getPage(pageIndex) { - return this.pdfDocument.getPage(pageIndex); - } - - fontFallback(id, handler) { - return this.pdfDocument.fontFallback(id, handler); - } - - loadXfaFonts(handler, task) { - return this.pdfDocument.loadXfaFonts(handler, task); - } - - loadXfaImages() { - return this.pdfDocument.loadXfaImages(); - } - - serializeXfaData(annotationStorage) { - return this.pdfDocument.serializeXfaData(annotationStorage); - } - - cleanup(manuallyTriggered = false) { - return this.pdfDocument.cleanup(manuallyTriggered); - } - - async ensure(obj, prop, args) { - (0, _util.unreachable)("Abstract method `ensure` called"); - } - - requestRange(begin, end) { - (0, _util.unreachable)("Abstract method `requestRange` called"); - } - - requestLoadedStream() { - (0, _util.unreachable)("Abstract method `requestLoadedStream` called"); - } - - sendProgressiveData(chunk) { - (0, _util.unreachable)("Abstract method `sendProgressiveData` called"); - } - - updatePassword(password) { - this._password = password; - } - - terminate(reason) { - (0, _util.unreachable)("Abstract method `terminate` called"); - } - -} - -class LocalPdfManager extends BasePdfManager { - constructor(docId, data, password, msgHandler, evaluatorOptions, enableXfa, docBaseUrl) { - super(); - this._docId = docId; - this._password = password; - this._docBaseUrl = parseDocBaseUrl(docBaseUrl); - this.msgHandler = msgHandler; - this.evaluatorOptions = evaluatorOptions; - this.enableXfa = enableXfa; - const stream = new _stream.Stream(data); - this.pdfDocument = new _document.PDFDocument(this, stream); - this._loadedStreamPromise = Promise.resolve(stream); - } - - async ensure(obj, prop, args) { - const value = obj[prop]; - - if (typeof value === "function") { - return value.apply(obj, args); - } - - return value; - } - - requestRange(begin, end) { - return Promise.resolve(); - } - - requestLoadedStream() {} - - onLoadedStream() { - return this._loadedStreamPromise; - } - - terminate(reason) {} - -} - -exports.LocalPdfManager = LocalPdfManager; - -class NetworkPdfManager extends BasePdfManager { - constructor(docId, pdfNetworkStream, args, evaluatorOptions, enableXfa, docBaseUrl) { - super(); - this._docId = docId; - this._password = args.password; - this._docBaseUrl = parseDocBaseUrl(docBaseUrl); - this.msgHandler = args.msgHandler; - this.evaluatorOptions = evaluatorOptions; - this.enableXfa = enableXfa; - this.streamManager = new _chunked_stream.ChunkedStreamManager(pdfNetworkStream, { - msgHandler: args.msgHandler, - length: args.length, - disableAutoFetch: args.disableAutoFetch, - rangeChunkSize: args.rangeChunkSize - }); - this.pdfDocument = new _document.PDFDocument(this, this.streamManager.getStream()); - } - - async ensure(obj, prop, args) { - try { - const value = obj[prop]; - - if (typeof value === "function") { - return value.apply(obj, args); - } - - return value; - } catch (ex) { - if (!(ex instanceof _core_utils.MissingDataException)) { - throw ex; - } - - await this.requestRange(ex.begin, ex.end); - return this.ensure(obj, prop, args); - } - } - - requestRange(begin, end) { - return this.streamManager.requestRange(begin, end); - } - - requestLoadedStream() { - this.streamManager.requestAllChunks(); - } - - sendProgressiveData(chunk) { - this.streamManager.onReceiveData({ - chunk - }); - } - - onLoadedStream() { - return this.streamManager.onLoadedStream(); - } - - terminate(reason) { - this.streamManager.abort(reason); - } - -} - -exports.NetworkPdfManager = NetworkPdfManager; - -/***/ }), -/* 8 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.ChunkedStreamManager = exports.ChunkedStream = void 0; - -var _util = __w_pdfjs_require__(2); - -var _core_utils = __w_pdfjs_require__(9); - -var _stream = __w_pdfjs_require__(10); - -class ChunkedStream extends _stream.Stream { - constructor(length, chunkSize, manager) { - super(new Uint8Array(length), 0, length, null); - this.chunkSize = chunkSize; - this._loadedChunks = new Set(); - this.numChunks = Math.ceil(length / chunkSize); - this.manager = manager; - this.progressiveDataLength = 0; - this.lastSuccessfulEnsureByteChunk = -1; - } - - getMissingChunks() { - const chunks = []; - - for (let chunk = 0, n = this.numChunks; chunk < n; ++chunk) { - if (!this._loadedChunks.has(chunk)) { - chunks.push(chunk); - } - } - - return chunks; - } - - get numChunksLoaded() { - return this._loadedChunks.size; - } - - get isDataLoaded() { - return this.numChunksLoaded === this.numChunks; - } - - onReceiveData(begin, chunk) { - const chunkSize = this.chunkSize; - - if (begin % chunkSize !== 0) { - throw new Error(`Bad begin offset: ${begin}`); - } - - const end = begin + chunk.byteLength; - - if (end % chunkSize !== 0 && end !== this.bytes.length) { - throw new Error(`Bad end offset: ${end}`); - } - - this.bytes.set(new Uint8Array(chunk), begin); - const beginChunk = Math.floor(begin / chunkSize); - const endChunk = Math.floor((end - 1) / chunkSize) + 1; - - for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) { - this._loadedChunks.add(curChunk); - } - } - - onReceiveProgressiveData(data) { - let position = this.progressiveDataLength; - const beginChunk = Math.floor(position / this.chunkSize); - this.bytes.set(new Uint8Array(data), position); - position += data.byteLength; - this.progressiveDataLength = position; - const endChunk = position >= this.end ? this.numChunks : Math.floor(position / this.chunkSize); - - for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) { - this._loadedChunks.add(curChunk); - } - } - - ensureByte(pos) { - if (pos < this.progressiveDataLength) { - return; - } - - const chunk = Math.floor(pos / this.chunkSize); - - if (chunk > this.numChunks) { - return; - } - - if (chunk === this.lastSuccessfulEnsureByteChunk) { - return; - } - - if (!this._loadedChunks.has(chunk)) { - throw new _core_utils.MissingDataException(pos, pos + 1); - } - - this.lastSuccessfulEnsureByteChunk = chunk; - } - - ensureRange(begin, end) { - if (begin >= end) { - return; - } - - if (end <= this.progressiveDataLength) { - return; - } - - const beginChunk = Math.floor(begin / this.chunkSize); - - if (beginChunk > this.numChunks) { - return; - } - - const endChunk = Math.min(Math.floor((end - 1) / this.chunkSize) + 1, this.numChunks); - - for (let chunk = beginChunk; chunk < endChunk; ++chunk) { - if (!this._loadedChunks.has(chunk)) { - throw new _core_utils.MissingDataException(begin, end); - } - } - } - - nextEmptyChunk(beginChunk) { - const numChunks = this.numChunks; - - for (let i = 0; i < numChunks; ++i) { - const chunk = (beginChunk + i) % numChunks; - - if (!this._loadedChunks.has(chunk)) { - return chunk; - } - } - - return null; - } - - hasChunk(chunk) { - return this._loadedChunks.has(chunk); - } - - getByte() { - const pos = this.pos; - - if (pos >= this.end) { - return -1; - } - - if (pos >= this.progressiveDataLength) { - this.ensureByte(pos); - } - - return this.bytes[this.pos++]; - } - - getBytes(length, forceClamped = false) { - const bytes = this.bytes; - const pos = this.pos; - const strEnd = this.end; - - if (!length) { - if (strEnd > this.progressiveDataLength) { - this.ensureRange(pos, strEnd); - } - - const subarray = bytes.subarray(pos, strEnd); - return forceClamped ? new Uint8ClampedArray(subarray) : subarray; - } - - let end = pos + length; - - if (end > strEnd) { - end = strEnd; - } - - if (end > this.progressiveDataLength) { - this.ensureRange(pos, end); - } - - this.pos = end; - const subarray = bytes.subarray(pos, end); - return forceClamped ? new Uint8ClampedArray(subarray) : subarray; - } - - getByteRange(begin, end) { - if (begin < 0) { - begin = 0; - } - - if (end > this.end) { - end = this.end; - } - - if (end > this.progressiveDataLength) { - this.ensureRange(begin, end); - } - - return this.bytes.subarray(begin, end); - } - - makeSubStream(start, length, dict = null) { - if (length) { - if (start + length > this.progressiveDataLength) { - this.ensureRange(start, start + length); - } - } else { - if (start >= this.progressiveDataLength) { - this.ensureByte(start); - } - } - - function ChunkedStreamSubstream() {} - - ChunkedStreamSubstream.prototype = Object.create(this); - - ChunkedStreamSubstream.prototype.getMissingChunks = function () { - const chunkSize = this.chunkSize; - const beginChunk = Math.floor(this.start / chunkSize); - const endChunk = Math.floor((this.end - 1) / chunkSize) + 1; - const missingChunks = []; - - for (let chunk = beginChunk; chunk < endChunk; ++chunk) { - if (!this._loadedChunks.has(chunk)) { - missingChunks.push(chunk); - } - } - - return missingChunks; - }; - - Object.defineProperty(ChunkedStreamSubstream.prototype, "isDataLoaded", { - get() { - if (this.numChunksLoaded === this.numChunks) { - return true; - } - - return this.getMissingChunks().length === 0; - }, - - configurable: true - }); - const subStream = new ChunkedStreamSubstream(); - subStream.pos = subStream.start = start; - subStream.end = start + length || this.end; - subStream.dict = dict; - return subStream; - } - - getBaseStreams() { - return [this]; - } - -} - -exports.ChunkedStream = ChunkedStream; - -class ChunkedStreamManager { - constructor(pdfNetworkStream, args) { - this.length = args.length; - this.chunkSize = args.rangeChunkSize; - this.stream = new ChunkedStream(this.length, this.chunkSize, this); - this.pdfNetworkStream = pdfNetworkStream; - this.disableAutoFetch = args.disableAutoFetch; - this.msgHandler = args.msgHandler; - this.currRequestId = 0; - this._chunksNeededByRequest = new Map(); - this._requestsByChunk = new Map(); - this._promisesByRequest = new Map(); - this.progressiveDataLength = 0; - this.aborted = false; - this._loadedStreamCapability = (0, _util.createPromiseCapability)(); - } - - onLoadedStream() { - return this._loadedStreamCapability.promise; - } - - sendRequest(begin, end) { - const rangeReader = this.pdfNetworkStream.getRangeReader(begin, end); - - if (!rangeReader.isStreamingSupported) { - rangeReader.onProgress = this.onProgress.bind(this); - } - - let chunks = [], - loaded = 0; - return new Promise((resolve, reject) => { - const readChunk = chunk => { - try { - if (!chunk.done) { - const data = chunk.value; - chunks.push(data); - loaded += (0, _util.arrayByteLength)(data); - - if (rangeReader.isStreamingSupported) { - this.onProgress({ - loaded - }); - } - - rangeReader.read().then(readChunk, reject); - return; - } - - const chunkData = (0, _util.arraysToBytes)(chunks); - chunks = null; - resolve(chunkData); - } catch (e) { - reject(e); - } - }; - - rangeReader.read().then(readChunk, reject); - }).then(data => { - if (this.aborted) { - return; - } - - this.onReceiveData({ - chunk: data, - begin - }); - }); - } - - requestAllChunks() { - const missingChunks = this.stream.getMissingChunks(); - - this._requestChunks(missingChunks); - - return this._loadedStreamCapability.promise; - } - - _requestChunks(chunks) { - const requestId = this.currRequestId++; - const chunksNeeded = new Set(); - - this._chunksNeededByRequest.set(requestId, chunksNeeded); - - for (const chunk of chunks) { - if (!this.stream.hasChunk(chunk)) { - chunksNeeded.add(chunk); - } - } - - if (chunksNeeded.size === 0) { - return Promise.resolve(); - } - - const capability = (0, _util.createPromiseCapability)(); - - this._promisesByRequest.set(requestId, capability); - - const chunksToRequest = []; - - for (const chunk of chunksNeeded) { - let requestIds = this._requestsByChunk.get(chunk); - - if (!requestIds) { - requestIds = []; - - this._requestsByChunk.set(chunk, requestIds); - - chunksToRequest.push(chunk); - } - - requestIds.push(requestId); - } - - if (chunksToRequest.length > 0) { - const groupedChunksToRequest = this.groupChunks(chunksToRequest); - - for (const groupedChunk of groupedChunksToRequest) { - const begin = groupedChunk.beginChunk * this.chunkSize; - const end = Math.min(groupedChunk.endChunk * this.chunkSize, this.length); - this.sendRequest(begin, end).catch(capability.reject); - } - } - - return capability.promise.catch(reason => { - if (this.aborted) { - return; - } - - throw reason; - }); - } - - getStream() { - return this.stream; - } - - requestRange(begin, end) { - end = Math.min(end, this.length); - const beginChunk = this.getBeginChunk(begin); - const endChunk = this.getEndChunk(end); - const chunks = []; - - for (let chunk = beginChunk; chunk < endChunk; ++chunk) { - chunks.push(chunk); - } - - return this._requestChunks(chunks); - } - - requestRanges(ranges = []) { - const chunksToRequest = []; - - for (const range of ranges) { - const beginChunk = this.getBeginChunk(range.begin); - const endChunk = this.getEndChunk(range.end); - - for (let chunk = beginChunk; chunk < endChunk; ++chunk) { - if (!chunksToRequest.includes(chunk)) { - chunksToRequest.push(chunk); - } - } - } - - chunksToRequest.sort(function (a, b) { - return a - b; - }); - return this._requestChunks(chunksToRequest); - } - - groupChunks(chunks) { - const groupedChunks = []; - let beginChunk = -1; - let prevChunk = -1; - - for (let i = 0, ii = chunks.length; i < ii; ++i) { - const chunk = chunks[i]; - - if (beginChunk < 0) { - beginChunk = chunk; - } - - if (prevChunk >= 0 && prevChunk + 1 !== chunk) { - groupedChunks.push({ - beginChunk, - endChunk: prevChunk + 1 - }); - beginChunk = chunk; - } - - if (i + 1 === chunks.length) { - groupedChunks.push({ - beginChunk, - endChunk: chunk + 1 - }); - } - - prevChunk = chunk; - } - - return groupedChunks; - } - - onProgress(args) { - this.msgHandler.send("DocProgress", { - loaded: this.stream.numChunksLoaded * this.chunkSize + args.loaded, - total: this.length - }); - } - - onReceiveData(args) { - const chunk = args.chunk; - const isProgressive = args.begin === undefined; - const begin = isProgressive ? this.progressiveDataLength : args.begin; - const end = begin + chunk.byteLength; - const beginChunk = Math.floor(begin / this.chunkSize); - const endChunk = end < this.length ? Math.floor(end / this.chunkSize) : Math.ceil(end / this.chunkSize); - - if (isProgressive) { - this.stream.onReceiveProgressiveData(chunk); - this.progressiveDataLength = end; - } else { - this.stream.onReceiveData(begin, chunk); - } - - if (this.stream.isDataLoaded) { - this._loadedStreamCapability.resolve(this.stream); - } - - const loadedRequests = []; - - for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) { - const requestIds = this._requestsByChunk.get(curChunk); - - if (!requestIds) { - continue; - } - - this._requestsByChunk.delete(curChunk); - - for (const requestId of requestIds) { - const chunksNeeded = this._chunksNeededByRequest.get(requestId); - - if (chunksNeeded.has(curChunk)) { - chunksNeeded.delete(curChunk); - } - - if (chunksNeeded.size > 0) { - continue; - } - - loadedRequests.push(requestId); - } - } - - if (!this.disableAutoFetch && this._requestsByChunk.size === 0) { - let nextEmptyChunk; - - if (this.stream.numChunksLoaded === 1) { - const lastChunk = this.stream.numChunks - 1; - - if (!this.stream.hasChunk(lastChunk)) { - nextEmptyChunk = lastChunk; - } - } else { - nextEmptyChunk = this.stream.nextEmptyChunk(endChunk); - } - - if (Number.isInteger(nextEmptyChunk)) { - this._requestChunks([nextEmptyChunk]); - } - } - - for (const requestId of loadedRequests) { - const capability = this._promisesByRequest.get(requestId); - - this._promisesByRequest.delete(requestId); - - capability.resolve(); - } - - this.msgHandler.send("DocProgress", { - loaded: this.stream.numChunksLoaded * this.chunkSize, - total: this.length - }); - } - - onError(err) { - this._loadedStreamCapability.reject(err); - } - - getBeginChunk(begin) { - return Math.floor(begin / this.chunkSize); - } - - getEndChunk(end) { - return Math.floor((end - 1) / this.chunkSize) + 1; - } - - abort(reason) { - this.aborted = true; - - if (this.pdfNetworkStream) { - this.pdfNetworkStream.cancelAllRequests(reason); - } - - for (const capability of this._promisesByRequest.values()) { - capability.reject(reason); - } - } - -} - -exports.ChunkedStreamManager = ChunkedStreamManager; - -/***/ }), -/* 9 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.XRefParseException = exports.XRefEntryException = exports.ParserEOFException = exports.MissingDataException = exports.DocStats = void 0; -exports.collectActions = collectActions; -exports.encodeToXmlString = encodeToXmlString; -exports.escapePDFName = escapePDFName; -exports.getArrayLookupTableFactory = getArrayLookupTableFactory; -exports.getInheritableProperty = getInheritableProperty; -exports.getLookupTableFactory = getLookupTableFactory; -exports.isWhiteSpace = isWhiteSpace; -exports.log2 = log2; -exports.parseXFAPath = parseXFAPath; -exports.readInt8 = readInt8; -exports.readUint16 = readUint16; -exports.readUint32 = readUint32; -exports.recoverJsURL = recoverJsURL; -exports.toRomanNumerals = toRomanNumerals; -exports.validateCSSFont = validateCSSFont; - -var _util = __w_pdfjs_require__(2); - -var _primitives = __w_pdfjs_require__(5); - -function getLookupTableFactory(initializer) { - let lookup; - return function () { - if (initializer) { - lookup = Object.create(null); - initializer(lookup); - initializer = null; - } - - return lookup; - }; -} - -function getArrayLookupTableFactory(initializer) { - let lookup; - return function () { - if (initializer) { - let arr = initializer(); - initializer = null; - lookup = Object.create(null); - - for (let i = 0, ii = arr.length; i < ii; i += 2) { - lookup[arr[i]] = arr[i + 1]; - } - - arr = null; - } - - return lookup; - }; -} - -class MissingDataException extends _util.BaseException { - constructor(begin, end) { - super(`Missing data [${begin}, ${end})`, "MissingDataException"); - this.begin = begin; - this.end = end; - } - -} - -exports.MissingDataException = MissingDataException; - -class ParserEOFException extends _util.BaseException { - constructor(msg) { - super(msg, "ParserEOFException"); - } - -} - -exports.ParserEOFException = ParserEOFException; - -class XRefEntryException extends _util.BaseException { - constructor(msg) { - super(msg, "XRefEntryException"); - } - -} - -exports.XRefEntryException = XRefEntryException; - -class XRefParseException extends _util.BaseException { - constructor(msg) { - super(msg, "XRefParseException"); - } - -} - -exports.XRefParseException = XRefParseException; - -class DocStats { - constructor(handler) { - this._handler = handler; - this._streamTypes = new Set(); - this._fontTypes = new Set(); - } - - _send() { - const streamTypes = Object.create(null), - fontTypes = Object.create(null); - - for (const type of this._streamTypes) { - streamTypes[type] = true; - } - - for (const type of this._fontTypes) { - fontTypes[type] = true; - } - - this._handler.send("DocStats", { - streamTypes, - fontTypes - }); - } - - addStreamType(type) { - if (this._streamTypes.has(type)) { - return; - } - - this._streamTypes.add(type); - - this._send(); - } - - addFontType(type) { - if (this._fontTypes.has(type)) { - return; - } - - this._fontTypes.add(type); - - this._send(); - } - -} - -exports.DocStats = DocStats; - -function getInheritableProperty({ - dict, - key, - getArray = false, - stopWhenFound = true -}) { - let values; - const visited = new _primitives.RefSet(); - - while (dict instanceof _primitives.Dict && !(dict.objId && visited.has(dict.objId))) { - if (dict.objId) { - visited.put(dict.objId); - } - - const value = getArray ? dict.getArray(key) : dict.get(key); - - if (value !== undefined) { - if (stopWhenFound) { - return value; - } - - if (!values) { - values = []; - } - - values.push(value); - } - - dict = dict.get("Parent"); - } - - return values; -} - -const ROMAN_NUMBER_MAP = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM", "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC", "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"]; - -function toRomanNumerals(number, lowerCase = false) { - (0, _util.assert)(Number.isInteger(number) && number > 0, "The number should be a positive integer."); - const romanBuf = []; - let pos; - - while (number >= 1000) { - number -= 1000; - romanBuf.push("M"); - } - - pos = number / 100 | 0; - number %= 100; - romanBuf.push(ROMAN_NUMBER_MAP[pos]); - pos = number / 10 | 0; - number %= 10; - romanBuf.push(ROMAN_NUMBER_MAP[10 + pos]); - romanBuf.push(ROMAN_NUMBER_MAP[20 + number]); - const romanStr = romanBuf.join(""); - return lowerCase ? romanStr.toLowerCase() : romanStr; -} - -function log2(x) { - if (x <= 0) { - return 0; - } - - return Math.ceil(Math.log2(x)); -} - -function readInt8(data, offset) { - return data[offset] << 24 >> 24; -} - -function readUint16(data, offset) { - return data[offset] << 8 | data[offset + 1]; -} - -function readUint32(data, offset) { - return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0; -} - -function isWhiteSpace(ch) { - return ch === 0x20 || ch === 0x09 || ch === 0x0d || ch === 0x0a; -} - -function parseXFAPath(path) { - const positionPattern = /(.+)\[(\d+)\]$/; - return path.split(".").map(component => { - const m = component.match(positionPattern); - - if (m) { - return { - name: m[1], - pos: parseInt(m[2], 10) - }; - } - - return { - name: component, - pos: 0 - }; - }); -} - -function escapePDFName(str) { - const buffer = []; - let start = 0; - - for (let i = 0, ii = str.length; i < ii; i++) { - const char = str.charCodeAt(i); - - if (char < 0x21 || char > 0x7e || char === 0x23 || char === 0x28 || char === 0x29 || char === 0x3c || char === 0x3e || char === 0x5b || char === 0x5d || char === 0x7b || char === 0x7d || char === 0x2f || char === 0x25) { - if (start < i) { - buffer.push(str.substring(start, i)); - } - - buffer.push(`#${char.toString(16)}`); - start = i + 1; - } - } - - if (buffer.length === 0) { - return str; - } - - if (start < str.length) { - buffer.push(str.substring(start, str.length)); - } - - return buffer.join(""); -} - -function _collectJS(entry, xref, list, parents) { - if (!entry) { - return; - } - - let parent = null; - - if ((0, _primitives.isRef)(entry)) { - if (parents.has(entry)) { - return; - } - - parent = entry; - parents.put(parent); - entry = xref.fetch(entry); - } - - if (Array.isArray(entry)) { - for (const element of entry) { - _collectJS(element, xref, list, parents); - } - } else if (entry instanceof _primitives.Dict) { - if ((0, _primitives.isName)(entry.get("S"), "JavaScript") && entry.has("JS")) { - const js = entry.get("JS"); - let code; - - if ((0, _primitives.isStream)(js)) { - code = js.getString(); - } else { - code = js; - } - - code = (0, _util.stringToPDFString)(code); - - if (code) { - list.push(code); - } - } - - _collectJS(entry.getRaw("Next"), xref, list, parents); - } - - if (parent) { - parents.remove(parent); - } -} - -function collectActions(xref, dict, eventType) { - const actions = Object.create(null); - const additionalActionsDicts = getInheritableProperty({ - dict, - key: "AA", - stopWhenFound: false - }); - - if (additionalActionsDicts) { - for (let i = additionalActionsDicts.length - 1; i >= 0; i--) { - const additionalActions = additionalActionsDicts[i]; - - if (!(additionalActions instanceof _primitives.Dict)) { - continue; - } - - for (const key of additionalActions.getKeys()) { - const action = eventType[key]; - - if (!action) { - continue; - } - - const actionDict = additionalActions.getRaw(key); - const parents = new _primitives.RefSet(); - const list = []; - - _collectJS(actionDict, xref, list, parents); - - if (list.length > 0) { - actions[action] = list; - } - } - } - } - - if (dict.has("A")) { - const actionDict = dict.get("A"); - const parents = new _primitives.RefSet(); - const list = []; - - _collectJS(actionDict, xref, list, parents); - - if (list.length > 0) { - actions.Action = list; - } - } - - return (0, _util.objectSize)(actions) > 0 ? actions : null; -} - -const XMLEntities = { - 0x3c: "<", - 0x3e: ">", - 0x26: "&", - 0x22: """, - 0x27: "'" -}; - -function encodeToXmlString(str) { - const buffer = []; - let start = 0; - - for (let i = 0, ii = str.length; i < ii; i++) { - const char = str.codePointAt(i); - - if (0x20 <= char && char <= 0x7e) { - const entity = XMLEntities[char]; - - if (entity) { - if (start < i) { - buffer.push(str.substring(start, i)); - } - - buffer.push(entity); - start = i + 1; - } - } else { - if (start < i) { - buffer.push(str.substring(start, i)); - } - - buffer.push(`&#x${char.toString(16).toUpperCase()};`); - - if (char > 0xd7ff && (char < 0xe000 || char > 0xfffd)) { - i++; - } - - start = i + 1; - } - } - - if (buffer.length === 0) { - return str; - } - - if (start < str.length) { - buffer.push(str.substring(start, str.length)); - } - - return buffer.join(""); -} - -function validateCSSFont(cssFontInfo) { - const DEFAULT_CSS_FONT_OBLIQUE = "14"; - const DEFAULT_CSS_FONT_WEIGHT = "400"; - const CSS_FONT_WEIGHT_VALUES = new Set(["100", "200", "300", "400", "500", "600", "700", "800", "900", "1000", "normal", "bold", "bolder", "lighter"]); - const { - fontFamily, - fontWeight, - italicAngle - } = cssFontInfo; - - if (/^".*"$/.test(fontFamily)) { - if (/[^\\]"/.test(fontFamily.slice(1, fontFamily.length - 1))) { - (0, _util.warn)(`XFA - FontFamily contains some unescaped ": ${fontFamily}.`); - return false; - } - } else if (/^'.*'$/.test(fontFamily)) { - if (/[^\\]'/.test(fontFamily.slice(1, fontFamily.length - 1))) { - (0, _util.warn)(`XFA - FontFamily contains some unescaped ': ${fontFamily}.`); - return false; - } - } else { - for (const ident of fontFamily.split(/[ \t]+/)) { - if (/^(\d|(-(\d|-)))/.test(ident) || !/^[\w-\\]+$/.test(ident)) { - (0, _util.warn)(`XFA - FontFamily contains some invalid : ${fontFamily}.`); - return false; - } - } - } - - const weight = fontWeight ? fontWeight.toString() : ""; - cssFontInfo.fontWeight = CSS_FONT_WEIGHT_VALUES.has(weight) ? weight : DEFAULT_CSS_FONT_WEIGHT; - const angle = parseFloat(italicAngle); - cssFontInfo.italicAngle = isNaN(angle) || angle < -90 || angle > 90 ? DEFAULT_CSS_FONT_OBLIQUE : italicAngle.toString(); - return true; -} - -function recoverJsURL(str) { - const URL_OPEN_METHODS = ["app.launchURL", "window.open", "xfa.host.gotoURL"]; - const regex = new RegExp("^\\s*(" + URL_OPEN_METHODS.join("|").split(".").join("\\.") + ")\\((?:'|\")([^'\"]*)(?:'|\")(?:,\\s*(\\w+)\\)|\\))", "i"); - const jsUrl = regex.exec(str); - - if (jsUrl && jsUrl[2]) { - const url = jsUrl[2]; - let newWindow = false; - - if (jsUrl[3] === "true" && jsUrl[1] === "app.launchURL") { - newWindow = true; - } - - return { - url, - newWindow - }; - } - - return null; -} - -/***/ }), -/* 10 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.StringStream = exports.Stream = exports.NullStream = void 0; - -var _base_stream = __w_pdfjs_require__(6); - -var _util = __w_pdfjs_require__(2); - -class Stream extends _base_stream.BaseStream { - constructor(arrayBuffer, start, length, dict) { - super(); - this.bytes = arrayBuffer instanceof Uint8Array ? arrayBuffer : new Uint8Array(arrayBuffer); - this.start = start || 0; - this.pos = this.start; - this.end = start + length || this.bytes.length; - this.dict = dict; - } - - get length() { - return this.end - this.start; - } - - get isEmpty() { - return this.length === 0; - } - - getByte() { - if (this.pos >= this.end) { - return -1; - } - - return this.bytes[this.pos++]; - } - - getBytes(length, forceClamped = false) { - const bytes = this.bytes; - const pos = this.pos; - const strEnd = this.end; - - if (!length) { - const subarray = bytes.subarray(pos, strEnd); - return forceClamped ? new Uint8ClampedArray(subarray) : subarray; - } - - let end = pos + length; - - if (end > strEnd) { - end = strEnd; - } - - this.pos = end; - const subarray = bytes.subarray(pos, end); - return forceClamped ? new Uint8ClampedArray(subarray) : subarray; - } - - getByteRange(begin, end) { - if (begin < 0) { - begin = 0; - } - - if (end > this.end) { - end = this.end; - } - - return this.bytes.subarray(begin, end); - } - - reset() { - this.pos = this.start; - } - - moveStart() { - this.start = this.pos; - } - - makeSubStream(start, length, dict = null) { - return new Stream(this.bytes.buffer, start, length, dict); - } - -} - -exports.Stream = Stream; - -class StringStream extends Stream { - constructor(str) { - super((0, _util.stringToBytes)(str)); - } - -} - -exports.StringStream = StringStream; - -class NullStream extends Stream { - constructor() { - super(new Uint8Array(0)); - } - -} - -exports.NullStream = NullStream; - -/***/ }), -/* 11 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Page = exports.PDFDocument = void 0; - -var _util = __w_pdfjs_require__(2); - -var _primitives = __w_pdfjs_require__(5); - -var _core_utils = __w_pdfjs_require__(9); - -var _xfa_fonts = __w_pdfjs_require__(12); - -var _stream = __w_pdfjs_require__(10); - -var _annotation = __w_pdfjs_require__(22); - -var _base_stream = __w_pdfjs_require__(6); - -var _crypto = __w_pdfjs_require__(72); - -var _catalog = __w_pdfjs_require__(64); - -var _parser = __w_pdfjs_require__(27); - -var _object_loader = __w_pdfjs_require__(70); - -var _operator_list = __w_pdfjs_require__(62); - -var _evaluator = __w_pdfjs_require__(25); - -var _decode_stream = __w_pdfjs_require__(29); - -var _struct_tree = __w_pdfjs_require__(69); - -var _factory = __w_pdfjs_require__(74); - -var _xref = __w_pdfjs_require__(98); - -const DEFAULT_USER_UNIT = 1.0; -const LETTER_SIZE_MEDIABOX = [0, 0, 612, 792]; - -class Page { - constructor({ - pdfManager, - xref, - pageIndex, - pageDict, - ref, - globalIdFactory, - fontCache, - builtInCMapCache, - standardFontDataCache, - globalImageCache, - nonBlendModesSet, - xfaFactory - }) { - this.pdfManager = pdfManager; - this.pageIndex = pageIndex; - this.pageDict = pageDict; - this.xref = xref; - this.ref = ref; - this.fontCache = fontCache; - this.builtInCMapCache = builtInCMapCache; - this.standardFontDataCache = standardFontDataCache; - this.globalImageCache = globalImageCache; - this.nonBlendModesSet = nonBlendModesSet; - this.evaluatorOptions = pdfManager.evaluatorOptions; - this.resourcesPromise = null; - this.xfaFactory = xfaFactory; - const idCounters = { - obj: 0 - }; - this._localIdFactory = class extends globalIdFactory { - static createObjId() { - return `p${pageIndex}_${++idCounters.obj}`; - } - - static getPageObjId() { - return `page${ref.toString()}`; - } - - }; - } - - _getInheritableProperty(key, getArray = false) { - const value = (0, _core_utils.getInheritableProperty)({ - dict: this.pageDict, - key, - getArray, - stopWhenFound: false - }); - - if (!Array.isArray(value)) { - return value; - } - - if (value.length === 1 || !(0, _primitives.isDict)(value[0])) { - return value[0]; - } - - return _primitives.Dict.merge({ - xref: this.xref, - dictArray: value - }); - } - - get content() { - return this.pageDict.getArray("Contents"); - } - - get resources() { - return (0, _util.shadow)(this, "resources", this._getInheritableProperty("Resources") || _primitives.Dict.empty); - } - - _getBoundingBox(name) { - if (this.xfaData) { - return this.xfaData.bbox; - } - - const box = this._getInheritableProperty(name, true); - - if (Array.isArray(box) && box.length === 4) { - if (box[2] - box[0] !== 0 && box[3] - box[1] !== 0) { - return box; - } - - (0, _util.warn)(`Empty /${name} entry.`); - } - - return null; - } - - get mediaBox() { - return (0, _util.shadow)(this, "mediaBox", this._getBoundingBox("MediaBox") || LETTER_SIZE_MEDIABOX); - } - - get cropBox() { - return (0, _util.shadow)(this, "cropBox", this._getBoundingBox("CropBox") || this.mediaBox); - } - - get userUnit() { - let obj = this.pageDict.get("UserUnit"); - - if (!(0, _util.isNum)(obj) || obj <= 0) { - obj = DEFAULT_USER_UNIT; - } - - return (0, _util.shadow)(this, "userUnit", obj); - } - - get view() { - const { - cropBox, - mediaBox - } = this; - let view; - - if (cropBox === mediaBox || (0, _util.isArrayEqual)(cropBox, mediaBox)) { - view = mediaBox; - } else { - const box = _util.Util.intersect(cropBox, mediaBox); - - if (box && box[2] - box[0] !== 0 && box[3] - box[1] !== 0) { - view = box; - } else { - (0, _util.warn)("Empty /CropBox and /MediaBox intersection."); - } - } - - return (0, _util.shadow)(this, "view", view || mediaBox); - } - - get rotate() { - let rotate = this._getInheritableProperty("Rotate") || 0; - - if (rotate % 90 !== 0) { - rotate = 0; - } else if (rotate >= 360) { - rotate %= 360; - } else if (rotate < 0) { - rotate = (rotate % 360 + 360) % 360; - } - - return (0, _util.shadow)(this, "rotate", rotate); - } - - _onSubStreamError(handler, reason, objId) { - if (this.evaluatorOptions.ignoreErrors) { - handler.send("UnsupportedFeature", { - featureId: _util.UNSUPPORTED_FEATURES.errorContentSubStream - }); - (0, _util.warn)(`getContentStream - ignoring sub-stream (${objId}): "${reason}".`); - return; - } - - throw reason; - } - - getContentStream(handler) { - return this.pdfManager.ensure(this, "content").then(content => { - if (content instanceof _base_stream.BaseStream) { - return content; - } - - if (Array.isArray(content)) { - return new _decode_stream.StreamsSequenceStream(content, this._onSubStreamError.bind(this, handler)); - } - - return new _stream.NullStream(); - }); - } - - get xfaData() { - return (0, _util.shadow)(this, "xfaData", this.xfaFactory ? { - bbox: this.xfaFactory.getBoundingBox(this.pageIndex) - } : null); - } - - save(handler, task, annotationStorage) { - const partialEvaluator = new _evaluator.PartialEvaluator({ - xref: this.xref, - handler, - pageIndex: this.pageIndex, - idFactory: this._localIdFactory, - fontCache: this.fontCache, - builtInCMapCache: this.builtInCMapCache, - standardFontDataCache: this.standardFontDataCache, - globalImageCache: this.globalImageCache, - options: this.evaluatorOptions - }); - return this._parsedAnnotations.then(function (annotations) { - const newRefsPromises = []; - - for (const annotation of annotations) { - if (!annotation.mustBePrinted(annotationStorage)) { - continue; - } - - newRefsPromises.push(annotation.save(partialEvaluator, task, annotationStorage).catch(function (reason) { - (0, _util.warn)("save - ignoring annotation data during " + `"${task.name}" task: "${reason}".`); - return null; - })); - } - - return Promise.all(newRefsPromises); - }); - } - - loadResources(keys) { - if (!this.resourcesPromise) { - this.resourcesPromise = this.pdfManager.ensure(this, "resources"); - } - - return this.resourcesPromise.then(() => { - const objectLoader = new _object_loader.ObjectLoader(this.resources, keys, this.xref); - return objectLoader.load(); - }); - } - - getOperatorList({ - handler, - sink, - task, - intent, - cacheKey, - annotationStorage = null - }) { - const contentStreamPromise = this.getContentStream(handler); - const resourcesPromise = this.loadResources(["ColorSpace", "ExtGState", "Font", "Pattern", "Properties", "Shading", "XObject"]); - const partialEvaluator = new _evaluator.PartialEvaluator({ - xref: this.xref, - handler, - pageIndex: this.pageIndex, - idFactory: this._localIdFactory, - fontCache: this.fontCache, - builtInCMapCache: this.builtInCMapCache, - standardFontDataCache: this.standardFontDataCache, - globalImageCache: this.globalImageCache, - options: this.evaluatorOptions - }); - const dataPromises = Promise.all([contentStreamPromise, resourcesPromise]); - const pageListPromise = dataPromises.then(([contentStream]) => { - const opList = new _operator_list.OperatorList(intent, sink); - handler.send("StartRenderPage", { - transparency: partialEvaluator.hasBlendModes(this.resources, this.nonBlendModesSet), - pageIndex: this.pageIndex, - cacheKey - }); - return partialEvaluator.getOperatorList({ - stream: contentStream, - task, - resources: this.resources, - operatorList: opList - }).then(function () { - return opList; - }); - }); - return Promise.all([pageListPromise, this._parsedAnnotations]).then(function ([pageOpList, annotations]) { - if (annotations.length === 0 || intent & _util.RenderingIntentFlag.ANNOTATIONS_DISABLE) { - pageOpList.flush(true); - return { - length: pageOpList.totalLength - }; - } - - const renderForms = !!(intent & _util.RenderingIntentFlag.ANNOTATIONS_FORMS), - intentAny = !!(intent & _util.RenderingIntentFlag.ANY), - intentDisplay = !!(intent & _util.RenderingIntentFlag.DISPLAY), - intentPrint = !!(intent & _util.RenderingIntentFlag.PRINT); - const opListPromises = []; - - for (const annotation of annotations) { - if (intentAny || intentDisplay && annotation.mustBeViewed(annotationStorage) || intentPrint && annotation.mustBePrinted(annotationStorage)) { - opListPromises.push(annotation.getOperatorList(partialEvaluator, task, intent, renderForms, annotationStorage).catch(function (reason) { - (0, _util.warn)("getOperatorList - ignoring annotation data during " + `"${task.name}" task: "${reason}".`); - return null; - })); - } - } - - return Promise.all(opListPromises).then(function (opLists) { - pageOpList.addOp(_util.OPS.beginAnnotations, []); - - for (const opList of opLists) { - pageOpList.addOpList(opList); - } - - pageOpList.addOp(_util.OPS.endAnnotations, []); - pageOpList.flush(true); - return { - length: pageOpList.totalLength - }; - }); - }); - } - - extractTextContent({ - handler, - task, - normalizeWhitespace, - includeMarkedContent, - sink, - combineTextItems - }) { - const contentStreamPromise = this.getContentStream(handler); - const resourcesPromise = this.loadResources(["ExtGState", "Font", "Properties", "XObject"]); - const dataPromises = Promise.all([contentStreamPromise, resourcesPromise]); - return dataPromises.then(([contentStream]) => { - const partialEvaluator = new _evaluator.PartialEvaluator({ - xref: this.xref, - handler, - pageIndex: this.pageIndex, - idFactory: this._localIdFactory, - fontCache: this.fontCache, - builtInCMapCache: this.builtInCMapCache, - standardFontDataCache: this.standardFontDataCache, - globalImageCache: this.globalImageCache, - options: this.evaluatorOptions - }); - return partialEvaluator.getTextContent({ - stream: contentStream, - task, - resources: this.resources, - normalizeWhitespace, - includeMarkedContent, - combineTextItems, - sink - }); - }); - } - - async getStructTree() { - const structTreeRoot = await this.pdfManager.ensureCatalog("structTreeRoot"); - - if (!structTreeRoot) { - return null; - } - - const structTree = await this.pdfManager.ensure(this, "_parseStructTree", [structTreeRoot]); - return structTree.serializable; - } - - _parseStructTree(structTreeRoot) { - const tree = new _struct_tree.StructTreePage(structTreeRoot, this.pageDict); - tree.parse(); - return tree; - } - - getAnnotationsData(intent) { - return this._parsedAnnotations.then(function (annotations) { - const annotationsData = []; - - if (annotations.length === 0) { - return annotationsData; - } - - const intentAny = !!(intent & _util.RenderingIntentFlag.ANY), - intentDisplay = !!(intent & _util.RenderingIntentFlag.DISPLAY), - intentPrint = !!(intent & _util.RenderingIntentFlag.PRINT); - - for (const annotation of annotations) { - if (intentAny || intentDisplay && annotation.viewable || intentPrint && annotation.printable) { - annotationsData.push(annotation.data); - } - } - - return annotationsData; - }); - } - - get annotations() { - const annots = this._getInheritableProperty("Annots"); - - return (0, _util.shadow)(this, "annotations", Array.isArray(annots) ? annots : []); - } - - get _parsedAnnotations() { - const parsedAnnotations = this.pdfManager.ensure(this, "annotations").then(() => { - const annotationPromises = []; - - for (const annotationRef of this.annotations) { - annotationPromises.push(_annotation.AnnotationFactory.create(this.xref, annotationRef, this.pdfManager, this._localIdFactory, false).catch(function (reason) { - (0, _util.warn)(`_parsedAnnotations: "${reason}".`); - return null; - })); - } - - return Promise.all(annotationPromises).then(function (annotations) { - return annotations.filter(annotation => !!annotation); - }); - }); - return (0, _util.shadow)(this, "_parsedAnnotations", parsedAnnotations); - } - - get jsActions() { - const actions = (0, _core_utils.collectActions)(this.xref, this.pageDict, _util.PageActionEventType); - return (0, _util.shadow)(this, "jsActions", actions); - } - -} - -exports.Page = Page; -const PDF_HEADER_SIGNATURE = new Uint8Array([0x25, 0x50, 0x44, 0x46, 0x2d]); -const STARTXREF_SIGNATURE = new Uint8Array([0x73, 0x74, 0x61, 0x72, 0x74, 0x78, 0x72, 0x65, 0x66]); -const ENDOBJ_SIGNATURE = new Uint8Array([0x65, 0x6e, 0x64, 0x6f, 0x62, 0x6a]); -const FINGERPRINT_FIRST_BYTES = 1024; -const EMPTY_FINGERPRINT = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"; -const PDF_HEADER_VERSION_REGEXP = /^[1-9]\.\d$/; - -function find(stream, signature, limit = 1024, backwards = false) { - const signatureLength = signature.length; - const scanBytes = stream.peekBytes(limit); - const scanLength = scanBytes.length - signatureLength; - - if (scanLength <= 0) { - return false; - } - - if (backwards) { - const signatureEnd = signatureLength - 1; - let pos = scanBytes.length - 1; - - while (pos >= signatureEnd) { - let j = 0; - - while (j < signatureLength && scanBytes[pos - j] === signature[signatureEnd - j]) { - j++; - } - - if (j >= signatureLength) { - stream.pos += pos - signatureEnd; - return true; - } - - pos--; - } - } else { - let pos = 0; - - while (pos <= scanLength) { - let j = 0; - - while (j < signatureLength && scanBytes[pos + j] === signature[j]) { - j++; - } - - if (j >= signatureLength) { - stream.pos += pos; - return true; - } - - pos++; - } - } - - return false; -} - -class PDFDocument { - constructor(pdfManager, arg) { - let stream; - - if ((0, _primitives.isStream)(arg)) { - stream = arg; - } else if ((0, _util.isArrayBuffer)(arg)) { - stream = new _stream.Stream(arg); - } else { - throw new Error("PDFDocument: Unknown argument type"); - } - - if (stream.length <= 0) { - throw new _util.InvalidPDFException("The PDF file is empty, i.e. its size is zero bytes."); - } - - this.pdfManager = pdfManager; - this.stream = stream; - this.xref = new _xref.XRef(stream, pdfManager); - this._pagePromises = new Map(); - this._version = null; - const idCounters = { - font: 0 - }; - this._globalIdFactory = class { - static getDocId() { - return `g_${pdfManager.docId}`; - } - - static createFontId() { - return `f${++idCounters.font}`; - } - - static createObjId() { - (0, _util.unreachable)("Abstract method `createObjId` called."); - } - - static getPageObjId() { - (0, _util.unreachable)("Abstract method `getPageObjId` called."); - } - - }; - } - - parse(recoveryMode) { - this.xref.parse(recoveryMode); - this.catalog = new _catalog.Catalog(this.pdfManager, this.xref); - - if (this.catalog.version) { - this._version = this.catalog.version; - } - } - - get linearization() { - let linearization = null; - - try { - linearization = _parser.Linearization.create(this.stream); - } catch (err) { - if (err instanceof _core_utils.MissingDataException) { - throw err; - } - - (0, _util.info)(err); - } - - return (0, _util.shadow)(this, "linearization", linearization); - } - - get startXRef() { - const stream = this.stream; - let startXRef = 0; - - if (this.linearization) { - stream.reset(); - - if (find(stream, ENDOBJ_SIGNATURE)) { - startXRef = stream.pos + 6 - stream.start; - } - } else { - const step = 1024; - const startXRefLength = STARTXREF_SIGNATURE.length; - let found = false, - pos = stream.end; - - while (!found && pos > 0) { - pos -= step - startXRefLength; - - if (pos < 0) { - pos = 0; - } - - stream.pos = pos; - found = find(stream, STARTXREF_SIGNATURE, step, true); - } - - if (found) { - stream.skip(9); - let ch; - - do { - ch = stream.getByte(); - } while ((0, _core_utils.isWhiteSpace)(ch)); - - let str = ""; - - while (ch >= 0x20 && ch <= 0x39) { - str += String.fromCharCode(ch); - ch = stream.getByte(); - } - - startXRef = parseInt(str, 10); - - if (isNaN(startXRef)) { - startXRef = 0; - } - } - } - - return (0, _util.shadow)(this, "startXRef", startXRef); - } - - checkHeader() { - const stream = this.stream; - stream.reset(); - - if (!find(stream, PDF_HEADER_SIGNATURE)) { - return; - } - - stream.moveStart(); - const MAX_PDF_VERSION_LENGTH = 12; - let version = "", - ch; - - while ((ch = stream.getByte()) > 0x20) { - if (version.length >= MAX_PDF_VERSION_LENGTH) { - break; - } - - version += String.fromCharCode(ch); - } - - if (!this._version) { - this._version = version.substring(5); - } - } - - parseStartXRef() { - this.xref.setStartXRef(this.startXRef); - } - - get numPages() { - let num = 0; - - if (this.catalog.hasActualNumPages) { - num = this.catalog.numPages; - } else if (this.xfaFactory) { - num = this.xfaFactory.getNumPages(); - } else if (this.linearization) { - num = this.linearization.numPages; - } else { - num = this.catalog.numPages; - } - - return (0, _util.shadow)(this, "numPages", num); - } - - _hasOnlyDocumentSignatures(fields, recursionDepth = 0) { - const RECURSION_LIMIT = 10; - - if (!Array.isArray(fields)) { - return false; - } - - return fields.every(field => { - field = this.xref.fetchIfRef(field); - - if (!(field instanceof _primitives.Dict)) { - return false; - } - - if (field.has("Kids")) { - if (++recursionDepth > RECURSION_LIMIT) { - (0, _util.warn)("_hasOnlyDocumentSignatures: maximum recursion depth reached"); - return false; - } - - return this._hasOnlyDocumentSignatures(field.get("Kids"), recursionDepth); - } - - const isSignature = (0, _primitives.isName)(field.get("FT"), "Sig"); - const rectangle = field.get("Rect"); - const isInvisible = Array.isArray(rectangle) && rectangle.every(value => value === 0); - return isSignature && isInvisible; - }); - } - - get xfaData() { - const acroForm = this.catalog.acroForm; - - if (!acroForm) { - return null; - } - - const xfa = acroForm.get("XFA"); - const entries = { - "xdp:xdp": "", - template: "", - datasets: "", - config: "", - connectionSet: "", - localeSet: "", - stylesheet: "", - "/xdp:xdp": "" - }; - - if ((0, _primitives.isStream)(xfa) && !xfa.isEmpty) { - try { - entries["xdp:xdp"] = (0, _util.stringToUTF8String)(xfa.getString()); - return entries; - } catch (_) { - (0, _util.warn)("XFA - Invalid utf-8 string."); - return null; - } - } - - if (!Array.isArray(xfa) || xfa.length === 0) { - return null; - } - - for (let i = 0, ii = xfa.length; i < ii; i += 2) { - let name; - - if (i === 0) { - name = "xdp:xdp"; - } else if (i === ii - 2) { - name = "/xdp:xdp"; - } else { - name = xfa[i]; - } - - if (!entries.hasOwnProperty(name)) { - continue; - } - - const data = this.xref.fetchIfRef(xfa[i + 1]); - - if (!(0, _primitives.isStream)(data) || data.isEmpty) { - continue; - } - - try { - entries[name] = (0, _util.stringToUTF8String)(data.getString()); - } catch (_) { - (0, _util.warn)("XFA - Invalid utf-8 string."); - return null; - } - } - - return entries; - } - - get xfaFactory() { - let data; - - if (this.pdfManager.enableXfa && this.catalog.needsRendering && this.formInfo.hasXfa && !this.formInfo.hasAcroForm) { - data = this.xfaData; - } - - return (0, _util.shadow)(this, "xfaFactory", data ? new _factory.XFAFactory(data) : null); - } - - get isPureXfa() { - return this.xfaFactory ? this.xfaFactory.isValid() : false; - } - - get htmlForXfa() { - return this.xfaFactory ? this.xfaFactory.getPages() : null; - } - - async loadXfaImages() { - const xfaImagesDict = await this.pdfManager.ensureCatalog("xfaImages"); - - if (!xfaImagesDict) { - return; - } - - const keys = xfaImagesDict.getKeys(); - const objectLoader = new _object_loader.ObjectLoader(xfaImagesDict, keys, this.xref); - await objectLoader.load(); - const xfaImages = new Map(); - - for (const key of keys) { - const stream = xfaImagesDict.get(key); - - if (!(0, _primitives.isStream)(stream)) { - continue; - } - - xfaImages.set(key, stream.getBytes()); - } - - this.xfaFactory.setImages(xfaImages); - } - - async loadXfaFonts(handler, task) { - const acroForm = await this.pdfManager.ensureCatalog("acroForm"); - - if (!acroForm) { - return; - } - - const resources = await acroForm.getAsync("DR"); - - if (!(resources instanceof _primitives.Dict)) { - return; - } - - const objectLoader = new _object_loader.ObjectLoader(resources, ["Font"], this.xref); - await objectLoader.load(); - const fontRes = resources.get("Font"); - - if (!(fontRes instanceof _primitives.Dict)) { - return; - } - - const options = Object.assign(Object.create(null), this.pdfManager.evaluatorOptions); - options.useSystemFonts = false; - const partialEvaluator = new _evaluator.PartialEvaluator({ - xref: this.xref, - handler, - pageIndex: -1, - idFactory: this._globalIdFactory, - fontCache: this.catalog.fontCache, - builtInCMapCache: this.catalog.builtInCMapCache, - standardFontDataCache: this.catalog.standardFontDataCache, - options - }); - const operatorList = new _operator_list.OperatorList(); - const pdfFonts = []; - const initialState = { - get font() { - return pdfFonts[pdfFonts.length - 1]; - }, - - set font(font) { - pdfFonts.push(font); - }, - - clone() { - return this; - } - - }; - const fonts = new Map(); - fontRes.forEach((fontName, font) => { - fonts.set(fontName, font); - }); - const promises = []; - - for (const [fontName, font] of fonts) { - const descriptor = font.get("FontDescriptor"); - - if (!(descriptor instanceof _primitives.Dict)) { - continue; - } - - let fontFamily = descriptor.get("FontFamily"); - fontFamily = fontFamily.replace(/[ ]+(\d)/g, "$1"); - const fontWeight = descriptor.get("FontWeight"); - const italicAngle = -descriptor.get("ItalicAngle"); - const cssFontInfo = { - fontFamily, - fontWeight, - italicAngle - }; - - if (!(0, _core_utils.validateCSSFont)(cssFontInfo)) { - continue; - } - - promises.push(partialEvaluator.handleSetFont(resources, [_primitives.Name.get(fontName), 1], null, operatorList, task, initialState, null, cssFontInfo).catch(function (reason) { - (0, _util.warn)(`loadXfaFonts: "${reason}".`); - return null; - })); - } - - await Promise.all(promises); - const missingFonts = this.xfaFactory.setFonts(pdfFonts); - - if (!missingFonts) { - return; - } - - options.ignoreErrors = true; - promises.length = 0; - pdfFonts.length = 0; - const reallyMissingFonts = new Set(); - - for (const missing of missingFonts) { - if (!(0, _xfa_fonts.getXfaFontName)(`${missing}-Regular`)) { - reallyMissingFonts.add(missing); - } - } - - if (reallyMissingFonts.size) { - missingFonts.push("PdfJS-Fallback"); - } - - for (const missing of missingFonts) { - if (reallyMissingFonts.has(missing)) { - continue; - } - - for (const fontInfo of [{ - name: "Regular", - fontWeight: 400, - italicAngle: 0 - }, { - name: "Bold", - fontWeight: 700, - italicAngle: 0 - }, { - name: "Italic", - fontWeight: 400, - italicAngle: 12 - }, { - name: "BoldItalic", - fontWeight: 700, - italicAngle: 12 - }]) { - const name = `${missing}-${fontInfo.name}`; - const dict = (0, _xfa_fonts.getXfaFontDict)(name); - promises.push(partialEvaluator.handleSetFont(resources, [_primitives.Name.get(name), 1], null, operatorList, task, initialState, dict, { - fontFamily: missing, - fontWeight: fontInfo.fontWeight, - italicAngle: fontInfo.italicAngle - }).catch(function (reason) { - (0, _util.warn)(`loadXfaFonts: "${reason}".`); - return null; - })); - } - } - - await Promise.all(promises); - this.xfaFactory.appendFonts(pdfFonts, reallyMissingFonts); - } - - async serializeXfaData(annotationStorage) { - return this.xfaFactory ? this.xfaFactory.serializeData(annotationStorage) : null; - } - - get formInfo() { - const formInfo = { - hasFields: false, - hasAcroForm: false, - hasXfa: false, - hasSignatures: false - }; - const acroForm = this.catalog.acroForm; - - if (!acroForm) { - return (0, _util.shadow)(this, "formInfo", formInfo); - } - - try { - const fields = acroForm.get("Fields"); - const hasFields = Array.isArray(fields) && fields.length > 0; - formInfo.hasFields = hasFields; - const xfa = acroForm.get("XFA"); - formInfo.hasXfa = Array.isArray(xfa) && xfa.length > 0 || (0, _primitives.isStream)(xfa) && !xfa.isEmpty; - const sigFlags = acroForm.get("SigFlags"); - const hasSignatures = !!(sigFlags & 0x1); - - const hasOnlyDocumentSignatures = hasSignatures && this._hasOnlyDocumentSignatures(fields); - - formInfo.hasAcroForm = hasFields && !hasOnlyDocumentSignatures; - formInfo.hasSignatures = hasSignatures; - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - - (0, _util.warn)(`Cannot fetch form information: "${ex}".`); - } - - return (0, _util.shadow)(this, "formInfo", formInfo); - } - - get documentInfo() { - const DocumentInfoValidators = { - Title: _util.isString, - Author: _util.isString, - Subject: _util.isString, - Keywords: _util.isString, - Creator: _util.isString, - Producer: _util.isString, - CreationDate: _util.isString, - ModDate: _util.isString, - Trapped: _primitives.isName - }; - let version = this._version; - - if (typeof version !== "string" || !PDF_HEADER_VERSION_REGEXP.test(version)) { - (0, _util.warn)(`Invalid PDF header version number: ${version}`); - version = null; - } - - const docInfo = { - PDFFormatVersion: version, - Language: this.catalog.lang, - EncryptFilterName: this.xref.encrypt ? this.xref.encrypt.filterName : null, - IsLinearized: !!this.linearization, - IsAcroFormPresent: this.formInfo.hasAcroForm, - IsXFAPresent: this.formInfo.hasXfa, - IsCollectionPresent: !!this.catalog.collection, - IsSignaturesPresent: this.formInfo.hasSignatures - }; - let infoDict; - - try { - infoDict = this.xref.trailer.get("Info"); - } catch (err) { - if (err instanceof _core_utils.MissingDataException) { - throw err; - } - - (0, _util.info)("The document information dictionary is invalid."); - } - - if ((0, _primitives.isDict)(infoDict)) { - for (const key of infoDict.getKeys()) { - const value = infoDict.get(key); - - if (DocumentInfoValidators[key]) { - if (DocumentInfoValidators[key](value)) { - docInfo[key] = typeof value !== "string" ? value : (0, _util.stringToPDFString)(value); - } else { - (0, _util.info)(`Bad value in document info for "${key}".`); - } - } else if (typeof key === "string") { - let customValue; - - if ((0, _util.isString)(value)) { - customValue = (0, _util.stringToPDFString)(value); - } else if ((0, _primitives.isName)(value) || (0, _util.isNum)(value) || (0, _util.isBool)(value)) { - customValue = value; - } else { - (0, _util.info)(`Unsupported value in document info for (custom) "${key}".`); - continue; - } - - if (!docInfo.Custom) { - docInfo.Custom = Object.create(null); - } - - docInfo.Custom[key] = customValue; - } - } - } - - return (0, _util.shadow)(this, "documentInfo", docInfo); - } - - get fingerprints() { - function validate(data) { - return typeof data === "string" && data.length > 0 && data !== EMPTY_FINGERPRINT; - } - - function hexString(hash) { - const buf = []; - - for (let i = 0, ii = hash.length; i < ii; i++) { - const hex = hash[i].toString(16); - buf.push(hex.padStart(2, "0")); - } - - return buf.join(""); - } - - const idArray = this.xref.trailer.get("ID"); - let hashOriginal, hashModified; - - if (Array.isArray(idArray) && validate(idArray[0])) { - hashOriginal = (0, _util.stringToBytes)(idArray[0]); - - if (idArray[1] !== idArray[0] && validate(idArray[1])) { - hashModified = (0, _util.stringToBytes)(idArray[1]); - } - } else { - hashOriginal = (0, _crypto.calculateMD5)(this.stream.getByteRange(0, FINGERPRINT_FIRST_BYTES), 0, FINGERPRINT_FIRST_BYTES); - } - - return (0, _util.shadow)(this, "fingerprints", [hexString(hashOriginal), hashModified ? hexString(hashModified) : null]); - } - - async _getLinearizationPage(pageIndex) { - const { - catalog, - linearization - } = this; - - const ref = _primitives.Ref.get(linearization.objectNumberFirst, 0); - - try { - const obj = await this.xref.fetchAsync(ref); - - if ((0, _primitives.isDict)(obj, "Page") || (0, _primitives.isDict)(obj) && !obj.has("Type") && obj.has("Contents")) { - if (ref && !catalog.pageKidsCountCache.has(ref)) { - catalog.pageKidsCountCache.put(ref, 1); - } - - return [obj, ref]; - } - - throw new _util.FormatError("The Linearization dictionary doesn't point to a valid Page dictionary."); - } catch (reason) { - (0, _util.info)(reason); - return catalog.getPageDict(pageIndex); - } - } - - getPage(pageIndex) { - const cachedPromise = this._pagePromises.get(pageIndex); - - if (cachedPromise) { - return cachedPromise; - } - - const { - catalog, - linearization, - xfaFactory - } = this; - let promise; - - if (xfaFactory) { - promise = Promise.resolve([_primitives.Dict.empty, null]); - } else if (linearization && linearization.pageFirst === pageIndex) { - promise = this._getLinearizationPage(pageIndex); - } else { - promise = catalog.getPageDict(pageIndex); - } - - promise = promise.then(([pageDict, ref]) => { - return new Page({ - pdfManager: this.pdfManager, - xref: this.xref, - pageIndex, - pageDict, - ref, - globalIdFactory: this._globalIdFactory, - fontCache: catalog.fontCache, - builtInCMapCache: catalog.builtInCMapCache, - standardFontDataCache: catalog.standardFontDataCache, - globalImageCache: catalog.globalImageCache, - nonBlendModesSet: catalog.nonBlendModesSet, - xfaFactory - }); - }); - - this._pagePromises.set(pageIndex, promise); - - return promise; - } - - async checkFirstPage(recoveryMode = false) { - if (recoveryMode) { - return; - } - - try { - await this.getPage(0); - } catch (reason) { - if (reason instanceof _core_utils.XRefEntryException) { - this._pagePromises.delete(0); - - await this.cleanup(); - throw new _core_utils.XRefParseException(); - } - } - } - - async checkLastPage(recoveryMode = false) { - const { - catalog, - pdfManager - } = this; - catalog.setActualNumPages(); - let numPages; - - try { - await Promise.all([pdfManager.ensureDoc("xfaFactory"), pdfManager.ensureDoc("linearization"), pdfManager.ensureCatalog("numPages")]); - - if (this.xfaFactory) { - return; - } else if (this.linearization) { - numPages = this.linearization.numPages; - } else { - numPages = catalog.numPages; - } - - if (!Number.isInteger(numPages)) { - throw new _util.FormatError("Page count is not an integer."); - } else if (numPages <= 1) { - return; - } - - await this.getPage(numPages - 1); - } catch (reason) { - this._pagePromises.delete(numPages - 1); - - await this.cleanup(); - - if (reason instanceof _core_utils.XRefEntryException && !recoveryMode) { - throw new _core_utils.XRefParseException(); - } - - (0, _util.warn)(`checkLastPage - invalid /Pages tree /Count: ${numPages}.`); - let pagesTree; - - try { - pagesTree = await pdfManager.ensureCatalog("getAllPageDicts", [recoveryMode]); - } catch (reasonAll) { - if (reasonAll instanceof _core_utils.XRefEntryException && !recoveryMode) { - throw new _core_utils.XRefParseException(); - } - - catalog.setActualNumPages(1); - return; - } - - for (const [pageIndex, [pageDict, ref]] of pagesTree) { - let promise; - - if (pageDict instanceof Error) { - promise = Promise.reject(pageDict); - promise.catch(() => {}); - } else { - promise = Promise.resolve(new Page({ - pdfManager, - xref: this.xref, - pageIndex, - pageDict, - ref, - globalIdFactory: this._globalIdFactory, - fontCache: catalog.fontCache, - builtInCMapCache: catalog.builtInCMapCache, - standardFontDataCache: catalog.standardFontDataCache, - globalImageCache: catalog.globalImageCache, - nonBlendModesSet: catalog.nonBlendModesSet, - xfaFactory: null - })); - } - - this._pagePromises.set(pageIndex, promise); - } - - catalog.setActualNumPages(pagesTree.size); - } - } - - fontFallback(id, handler) { - return this.catalog.fontFallback(id, handler); - } - - async cleanup(manuallyTriggered = false) { - return this.catalog ? this.catalog.cleanup(manuallyTriggered) : (0, _primitives.clearPrimitiveCaches)(); - } - - _collectFieldObjects(name, fieldRef, promises) { - const field = this.xref.fetchIfRef(fieldRef); - - if (field.has("T")) { - const partName = (0, _util.stringToPDFString)(field.get("T")); - - if (name === "") { - name = partName; - } else { - name = `${name}.${partName}`; - } - } - - if (!promises.has(name)) { - promises.set(name, []); - } - - promises.get(name).push(_annotation.AnnotationFactory.create(this.xref, fieldRef, this.pdfManager, this._localIdFactory, true).then(annotation => annotation && annotation.getFieldObject()).catch(function (reason) { - (0, _util.warn)(`_collectFieldObjects: "${reason}".`); - return null; - })); - - if (field.has("Kids")) { - const kids = field.get("Kids"); - - for (const kid of kids) { - this._collectFieldObjects(name, kid, promises); - } - } - } - - get fieldObjects() { - if (!this.formInfo.hasFields) { - return (0, _util.shadow)(this, "fieldObjects", Promise.resolve(null)); - } - - const allFields = Object.create(null); - const fieldPromises = new Map(); - - for (const fieldRef of this.catalog.acroForm.get("Fields")) { - this._collectFieldObjects("", fieldRef, fieldPromises); - } - - const allPromises = []; - - for (const [name, promises] of fieldPromises) { - allPromises.push(Promise.all(promises).then(fields => { - fields = fields.filter(field => !!field); - - if (fields.length > 0) { - allFields[name] = fields; - } - })); - } - - return (0, _util.shadow)(this, "fieldObjects", Promise.all(allPromises).then(() => allFields)); - } - - get hasJSActions() { - const promise = this.pdfManager.ensureDoc("_parseHasJSActions"); - return (0, _util.shadow)(this, "hasJSActions", promise); - } - - async _parseHasJSActions() { - const [catalogJsActions, fieldObjects] = await Promise.all([this.pdfManager.ensureCatalog("jsActions"), this.pdfManager.ensureDoc("fieldObjects")]); - - if (catalogJsActions) { - return true; - } - - if (fieldObjects) { - return Object.values(fieldObjects).some(fieldObject => fieldObject.some(object => object.actions !== null)); - } - - return false; - } - - get calculationOrderIds() { - const acroForm = this.catalog.acroForm; - - if (!acroForm || !acroForm.has("CO")) { - return (0, _util.shadow)(this, "calculationOrderIds", null); - } - - const calculationOrder = acroForm.get("CO"); - - if (!Array.isArray(calculationOrder) || calculationOrder.length === 0) { - return (0, _util.shadow)(this, "calculationOrderIds", null); - } - - const ids = calculationOrder.filter(_primitives.isRef).map(ref => ref.toString()); - - if (ids.length === 0) { - return (0, _util.shadow)(this, "calculationOrderIds", null); - } - - return (0, _util.shadow)(this, "calculationOrderIds", ids); - } - -} - -exports.PDFDocument = PDFDocument; - -/***/ }), -/* 12 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.getXfaFontDict = getXfaFontDict; -exports.getXfaFontName = getXfaFontName; - -var _calibri_factors = __w_pdfjs_require__(13); - -var _primitives = __w_pdfjs_require__(5); - -var _helvetica_factors = __w_pdfjs_require__(14); - -var _liberationsans_widths = __w_pdfjs_require__(15); - -var _myriadpro_factors = __w_pdfjs_require__(16); - -var _segoeui_factors = __w_pdfjs_require__(17); - -var _core_utils = __w_pdfjs_require__(9); - -var _fonts_utils = __w_pdfjs_require__(18); - -const getXFAFontMap = (0, _core_utils.getLookupTableFactory)(function (t) { - t["MyriadPro-Regular"] = t["PdfJS-Fallback-Regular"] = { - name: "LiberationSans-Regular", - factors: _myriadpro_factors.MyriadProRegularFactors, - baseWidths: _liberationsans_widths.LiberationSansRegularWidths, - baseMapping: _liberationsans_widths.LiberationSansRegularMapping, - metrics: _myriadpro_factors.MyriadProRegularMetrics - }; - t["MyriadPro-Bold"] = t["PdfJS-Fallback-Bold"] = { - name: "LiberationSans-Bold", - factors: _myriadpro_factors.MyriadProBoldFactors, - baseWidths: _liberationsans_widths.LiberationSansBoldWidths, - baseMapping: _liberationsans_widths.LiberationSansBoldMapping, - metrics: _myriadpro_factors.MyriadProBoldMetrics - }; - t["MyriadPro-It"] = t["MyriadPro-Italic"] = t["PdfJS-Fallback-Italic"] = { - name: "LiberationSans-Italic", - factors: _myriadpro_factors.MyriadProItalicFactors, - baseWidths: _liberationsans_widths.LiberationSansItalicWidths, - baseMapping: _liberationsans_widths.LiberationSansItalicMapping, - metrics: _myriadpro_factors.MyriadProItalicMetrics - }; - t["MyriadPro-BoldIt"] = t["MyriadPro-BoldItalic"] = t["PdfJS-Fallback-BoldItalic"] = { - name: "LiberationSans-BoldItalic", - factors: _myriadpro_factors.MyriadProBoldItalicFactors, - baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths, - baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping, - metrics: _myriadpro_factors.MyriadProBoldItalicMetrics - }; - t.ArialMT = t.Arial = t["Arial-Regular"] = { - name: "LiberationSans-Regular", - baseWidths: _liberationsans_widths.LiberationSansRegularWidths, - baseMapping: _liberationsans_widths.LiberationSansRegularMapping - }; - t["Arial-BoldMT"] = t["Arial-Bold"] = { - name: "LiberationSans-Bold", - baseWidths: _liberationsans_widths.LiberationSansBoldWidths, - baseMapping: _liberationsans_widths.LiberationSansBoldMapping - }; - t["Arial-ItalicMT"] = t["Arial-Italic"] = { - name: "LiberationSans-Italic", - baseWidths: _liberationsans_widths.LiberationSansItalicWidths, - baseMapping: _liberationsans_widths.LiberationSansItalicMapping - }; - t["Arial-BoldItalicMT"] = t["Arial-BoldItalic"] = { - name: "LiberationSans-BoldItalic", - baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths, - baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping - }; - t["Calibri-Regular"] = { - name: "LiberationSans-Regular", - factors: _calibri_factors.CalibriRegularFactors, - baseWidths: _liberationsans_widths.LiberationSansRegularWidths, - baseMapping: _liberationsans_widths.LiberationSansRegularMapping, - metrics: _calibri_factors.CalibriRegularMetrics - }; - t["Calibri-Bold"] = { - name: "LiberationSans-Bold", - factors: _calibri_factors.CalibriBoldFactors, - baseWidths: _liberationsans_widths.LiberationSansBoldWidths, - baseMapping: _liberationsans_widths.LiberationSansBoldMapping, - metrics: _calibri_factors.CalibriBoldMetrics - }; - t["Calibri-Italic"] = { - name: "LiberationSans-Italic", - factors: _calibri_factors.CalibriItalicFactors, - baseWidths: _liberationsans_widths.LiberationSansItalicWidths, - baseMapping: _liberationsans_widths.LiberationSansItalicMapping, - metrics: _calibri_factors.CalibriItalicMetrics - }; - t["Calibri-BoldItalic"] = { - name: "LiberationSans-BoldItalic", - factors: _calibri_factors.CalibriBoldItalicFactors, - baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths, - baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping, - metrics: _calibri_factors.CalibriBoldItalicMetrics - }; - t["Segoeui-Regular"] = { - name: "LiberationSans-Regular", - factors: _segoeui_factors.SegoeuiRegularFactors, - baseWidths: _liberationsans_widths.LiberationSansRegularWidths, - baseMapping: _liberationsans_widths.LiberationSansRegularMapping, - metrics: _segoeui_factors.SegoeuiRegularMetrics - }; - t["Segoeui-Bold"] = { - name: "LiberationSans-Bold", - factors: _segoeui_factors.SegoeuiBoldFactors, - baseWidths: _liberationsans_widths.LiberationSansBoldWidths, - baseMapping: _liberationsans_widths.LiberationSansBoldMapping, - metrics: _segoeui_factors.SegoeuiBoldMetrics - }; - t["Segoeui-Italic"] = { - name: "LiberationSans-Italic", - factors: _segoeui_factors.SegoeuiItalicFactors, - baseWidths: _liberationsans_widths.LiberationSansItalicWidths, - baseMapping: _liberationsans_widths.LiberationSansItalicMapping, - metrics: _segoeui_factors.SegoeuiItalicMetrics - }; - t["Segoeui-BoldItalic"] = { - name: "LiberationSans-BoldItalic", - factors: _segoeui_factors.SegoeuiBoldItalicFactors, - baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths, - baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping, - metrics: _segoeui_factors.SegoeuiBoldItalicMetrics - }; - t["Helvetica-Regular"] = t.Helvetica = { - name: "LiberationSans-Regular", - factors: _helvetica_factors.HelveticaRegularFactors, - baseWidths: _liberationsans_widths.LiberationSansRegularWidths, - baseMapping: _liberationsans_widths.LiberationSansRegularMapping, - metrics: _helvetica_factors.HelveticaRegularMetrics - }; - t["Helvetica-Bold"] = { - name: "LiberationSans-Bold", - factors: _helvetica_factors.HelveticaBoldFactors, - baseWidths: _liberationsans_widths.LiberationSansBoldWidths, - baseMapping: _liberationsans_widths.LiberationSansBoldMapping, - metrics: _helvetica_factors.HelveticaBoldMetrics - }; - t["Helvetica-Italic"] = { - name: "LiberationSans-Italic", - factors: _helvetica_factors.HelveticaItalicFactors, - baseWidths: _liberationsans_widths.LiberationSansItalicWidths, - baseMapping: _liberationsans_widths.LiberationSansItalicMapping, - metrics: _helvetica_factors.HelveticaItalicMetrics - }; - t["Helvetica-BoldItalic"] = { - name: "LiberationSans-BoldItalic", - factors: _helvetica_factors.HelveticaBoldItalicFactors, - baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths, - baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping, - metrics: _helvetica_factors.HelveticaBoldItalicMetrics - }; -}); - -function getXfaFontName(name) { - const fontName = (0, _fonts_utils.normalizeFontName)(name); - const fontMap = getXFAFontMap(); - return fontMap[fontName]; -} - -function getXfaFontWidths(name) { - const info = getXfaFontName(name); - - if (!info) { - return null; - } - - const { - baseWidths, - baseMapping, - factors - } = info; - let rescaledBaseWidths; - - if (!factors) { - rescaledBaseWidths = baseWidths; - } else { - rescaledBaseWidths = baseWidths.map((w, i) => w * factors[i]); - } - - let currentCode = -2; - let currentArray; - const newWidths = []; - - for (const [unicode, glyphIndex] of baseMapping.map((charUnicode, index) => [charUnicode, index]).sort(([unicode1], [unicode2]) => unicode1 - unicode2)) { - if (unicode === -1) { - continue; - } - - if (unicode === currentCode + 1) { - currentArray.push(rescaledBaseWidths[glyphIndex]); - currentCode += 1; - } else { - currentCode = unicode; - currentArray = [rescaledBaseWidths[glyphIndex]]; - newWidths.push(unicode, currentArray); - } - } - - return newWidths; -} - -function getXfaFontDict(name) { - const widths = getXfaFontWidths(name); - const dict = new _primitives.Dict(null); - dict.set("BaseFont", _primitives.Name.get(name)); - dict.set("Type", _primitives.Name.get("Font")); - dict.set("Subtype", _primitives.Name.get("CIDFontType2")); - dict.set("Encoding", _primitives.Name.get("Identity-H")); - dict.set("CIDToGIDMap", _primitives.Name.get("Identity")); - dict.set("W", widths); - dict.set("FirstChar", widths[0]); - dict.set("LastChar", widths[widths.length - 2] + widths[widths.length - 1].length - 1); - const descriptor = new _primitives.Dict(null); - dict.set("FontDescriptor", descriptor); - const systemInfo = new _primitives.Dict(null); - systemInfo.set("Ordering", "Identity"); - systemInfo.set("Registry", "Adobe"); - systemInfo.set("Supplement", 0); - dict.set("CIDSystemInfo", systemInfo); - return dict; -} - -/***/ }), -/* 13 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.CalibriRegularMetrics = exports.CalibriRegularFactors = exports.CalibriItalicMetrics = exports.CalibriItalicFactors = exports.CalibriBoldMetrics = exports.CalibriBoldItalicMetrics = exports.CalibriBoldItalicFactors = exports.CalibriBoldFactors = void 0; -const CalibriBoldFactors = [1.3877, 1, 1, 1, 0.97801, 0.92482, 0.89552, 0.91133, 0.81988, 0.97566, 0.98152, 0.93548, 0.93548, 1.2798, 0.85284, 0.92794, 1, 0.96134, 1.54657, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.82845, 0.82845, 0.85284, 0.85284, 0.85284, 0.75859, 0.92138, 0.83908, 0.7762, 0.73293, 0.87289, 0.73133, 0.7514, 0.81921, 0.87356, 0.95958, 0.59526, 0.75727, 0.69225, 1.04924, 0.9121, 0.86943, 0.79795, 0.88198, 0.77958, 0.70864, 0.81055, 0.90399, 0.88653, 0.96017, 0.82577, 0.77892, 0.78257, 0.97507, 1.54657, 0.97507, 0.85284, 0.89552, 0.90176, 0.88762, 0.8785, 0.75241, 0.8785, 0.90518, 0.95015, 0.77618, 0.8785, 0.88401, 0.91916, 0.86304, 0.88401, 0.91488, 0.8785, 0.8801, 0.8785, 0.8785, 0.91343, 0.7173, 1.04106, 0.8785, 0.85075, 0.95794, 0.82616, 0.85162, 0.79492, 0.88331, 1.69808, 0.88331, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.7801, 0.89552, 1.24487, 1.13254, 1.12401, 0.96839, 0.85284, 0.68787, 0.70645, 0.85592, 0.90747, 1.01466, 1.0088, 0.90323, 1, 1.07463, 1, 0.91056, 0.75806, 1.19118, 0.96839, 0.78864, 0.82845, 0.84133, 0.75859, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.77539, 0.73293, 0.73133, 0.73133, 0.73133, 0.73133, 0.95958, 0.95958, 0.95958, 0.95958, 0.88506, 0.9121, 0.86943, 0.86943, 0.86943, 0.86943, 0.86943, 0.85284, 0.87508, 0.90399, 0.90399, 0.90399, 0.90399, 0.77892, 0.79795, 0.90807, 0.88762, 0.88762, 0.88762, 0.88762, 0.88762, 0.88762, 0.8715, 0.75241, 0.90518, 0.90518, 0.90518, 0.90518, 0.88401, 0.88401, 0.88401, 0.88401, 0.8785, 0.8785, 0.8801, 0.8801, 0.8801, 0.8801, 0.8801, 0.90747, 0.89049, 0.8785, 0.8785, 0.8785, 0.8785, 0.85162, 0.8785, 0.85162, 0.83908, 0.88762, 0.83908, 0.88762, 0.83908, 0.88762, 0.73293, 0.75241, 0.73293, 0.75241, 0.73293, 0.75241, 0.73293, 0.75241, 0.87289, 0.83016, 0.88506, 0.93125, 0.73133, 0.90518, 0.73133, 0.90518, 0.73133, 0.90518, 0.73133, 0.90518, 0.73133, 0.90518, 0.81921, 0.77618, 0.81921, 0.77618, 0.81921, 0.77618, 1, 1, 0.87356, 0.8785, 0.91075, 0.89608, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.76229, 0.90167, 0.59526, 0.91916, 1, 1, 0.86304, 0.69225, 0.88401, 1, 1, 0.70424, 0.79468, 0.91926, 0.88175, 0.70823, 0.94903, 0.9121, 0.8785, 1, 1, 0.9121, 0.8785, 0.87802, 0.88656, 0.8785, 0.86943, 0.8801, 0.86943, 0.8801, 0.86943, 0.8801, 0.87402, 0.89291, 0.77958, 0.91343, 1, 1, 0.77958, 0.91343, 0.70864, 0.7173, 0.70864, 0.7173, 0.70864, 0.7173, 0.70864, 0.7173, 1, 1, 0.81055, 0.75841, 0.81055, 1.06452, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.96017, 0.95794, 0.77892, 0.85162, 0.77892, 0.78257, 0.79492, 0.78257, 0.79492, 0.78257, 0.79492, 0.9297, 0.56892, 0.83908, 0.88762, 0.77539, 0.8715, 0.87508, 0.89049, 1, 1, 0.81055, 1.04106, 1.20528, 1.20528, 1, 1.15543, 0.70674, 0.98387, 0.94721, 1.33431, 1.45894, 0.95161, 1.06303, 0.83908, 0.80352, 0.57184, 0.6965, 0.56289, 0.82001, 0.56029, 0.81235, 1.02988, 0.83908, 0.7762, 0.68156, 0.80367, 0.73133, 0.78257, 0.87356, 0.86943, 0.95958, 0.75727, 0.89019, 1.04924, 0.9121, 0.7648, 0.86943, 0.87356, 0.79795, 0.78275, 0.81055, 0.77892, 0.9762, 0.82577, 0.99819, 0.84896, 0.95958, 0.77892, 0.96108, 1.01407, 0.89049, 1.02988, 0.94211, 0.96108, 0.8936, 0.84021, 0.87842, 0.96399, 0.79109, 0.89049, 1.00813, 1.02988, 0.86077, 0.87445, 0.92099, 0.84723, 0.86513, 0.8801, 0.75638, 0.85714, 0.78216, 0.79586, 0.87965, 0.94211, 0.97747, 0.78287, 0.97926, 0.84971, 1.02988, 0.94211, 0.8801, 0.94211, 0.84971, 0.73133, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90264, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90518, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90548, 1, 1, 1, 1, 1, 1, 0.96017, 0.95794, 0.96017, 0.95794, 0.96017, 0.95794, 0.77892, 0.85162, 1, 1, 0.89552, 0.90527, 1, 0.90363, 0.92794, 0.92794, 0.92794, 0.92794, 0.87012, 0.87012, 0.87012, 0.89552, 0.89552, 1.42259, 0.71143, 1.06152, 1, 1, 1.03372, 1.03372, 0.97171, 1.4956, 2.2807, 0.93835, 0.83406, 0.91133, 0.84107, 0.91133, 1, 1, 1, 0.72021, 1, 1.23108, 0.83489, 0.88525, 0.88525, 0.81499, 0.90527, 1.81055, 0.90527, 1.81055, 1.31006, 1.53711, 0.94434, 1.08696, 1, 0.95018, 0.77192, 0.85284, 0.90747, 1.17534, 0.69825, 0.9716, 1.37077, 0.90747, 0.90747, 0.85356, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.08004, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90727, 0.90727, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.CalibriBoldFactors = CalibriBoldFactors; -const CalibriBoldMetrics = { - lineHeight: 1.2207, - lineGap: 0.2207 -}; -exports.CalibriBoldMetrics = CalibriBoldMetrics; -const CalibriBoldItalicFactors = [1.3877, 1, 1, 1, 0.97801, 0.92482, 0.89552, 0.91133, 0.81988, 0.97566, 0.98152, 0.93548, 0.93548, 1.2798, 0.85284, 0.92794, 1, 0.96134, 1.56239, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.82845, 0.82845, 0.85284, 0.85284, 0.85284, 0.75859, 0.92138, 0.83908, 0.7762, 0.71805, 0.87289, 0.73133, 0.7514, 0.81921, 0.87356, 0.95958, 0.59526, 0.75727, 0.69225, 1.04924, 0.90872, 0.85938, 0.79795, 0.87068, 0.77958, 0.69766, 0.81055, 0.90399, 0.88653, 0.96068, 0.82577, 0.77892, 0.78257, 0.97507, 1.529, 0.97507, 0.85284, 0.89552, 0.90176, 0.94908, 0.86411, 0.74012, 0.86411, 0.88323, 0.95015, 0.86411, 0.86331, 0.88401, 0.91916, 0.86304, 0.88401, 0.9039, 0.86331, 0.86331, 0.86411, 0.86411, 0.90464, 0.70852, 1.04106, 0.86331, 0.84372, 0.95794, 0.82616, 0.84548, 0.79492, 0.88331, 1.69808, 0.88331, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.7801, 0.89552, 1.24487, 1.13254, 1.19129, 0.96839, 0.85284, 0.68787, 0.70645, 0.85592, 0.90747, 1.01466, 1.0088, 0.90323, 1, 1.07463, 1, 0.91056, 0.75806, 1.19118, 0.96839, 0.78864, 0.82845, 0.84133, 0.75859, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.77539, 0.71805, 0.73133, 0.73133, 0.73133, 0.73133, 0.95958, 0.95958, 0.95958, 0.95958, 0.88506, 0.90872, 0.85938, 0.85938, 0.85938, 0.85938, 0.85938, 0.85284, 0.87068, 0.90399, 0.90399, 0.90399, 0.90399, 0.77892, 0.79795, 0.90807, 0.94908, 0.94908, 0.94908, 0.94908, 0.94908, 0.94908, 0.85887, 0.74012, 0.88323, 0.88323, 0.88323, 0.88323, 0.88401, 0.88401, 0.88401, 0.88401, 0.8785, 0.86331, 0.86331, 0.86331, 0.86331, 0.86331, 0.86331, 0.90747, 0.89049, 0.86331, 0.86331, 0.86331, 0.86331, 0.84548, 0.86411, 0.84548, 0.83908, 0.94908, 0.83908, 0.94908, 0.83908, 0.94908, 0.71805, 0.74012, 0.71805, 0.74012, 0.71805, 0.74012, 0.71805, 0.74012, 0.87289, 0.79538, 0.88506, 0.92726, 0.73133, 0.88323, 0.73133, 0.88323, 0.73133, 0.88323, 0.73133, 0.88323, 0.73133, 0.88323, 0.81921, 0.86411, 0.81921, 0.86411, 0.81921, 0.86411, 1, 1, 0.87356, 0.86331, 0.91075, 0.8777, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.76467, 0.90167, 0.59526, 0.91916, 1, 1, 0.86304, 0.69225, 0.88401, 1, 1, 0.70424, 0.77312, 0.91926, 0.88175, 0.70823, 0.94903, 0.90872, 0.86331, 1, 1, 0.90872, 0.86331, 0.86906, 0.88116, 0.86331, 0.85938, 0.86331, 0.85938, 0.86331, 0.85938, 0.86331, 0.87402, 0.86549, 0.77958, 0.90464, 1, 1, 0.77958, 0.90464, 0.69766, 0.70852, 0.69766, 0.70852, 0.69766, 0.70852, 0.69766, 0.70852, 1, 1, 0.81055, 0.75841, 0.81055, 1.06452, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.96068, 0.95794, 0.77892, 0.84548, 0.77892, 0.78257, 0.79492, 0.78257, 0.79492, 0.78257, 0.79492, 0.9297, 0.56892, 0.83908, 0.94908, 0.77539, 0.85887, 0.87068, 0.89049, 1, 1, 0.81055, 1.04106, 1.20528, 1.20528, 1, 1.15543, 0.70088, 0.98387, 0.94721, 1.33431, 1.45894, 0.95161, 1.48387, 0.83908, 0.80352, 0.57118, 0.6965, 0.56347, 0.79179, 0.55853, 0.80346, 1.02988, 0.83908, 0.7762, 0.67174, 0.86036, 0.73133, 0.78257, 0.87356, 0.86441, 0.95958, 0.75727, 0.89019, 1.04924, 0.90872, 0.74889, 0.85938, 0.87891, 0.79795, 0.7957, 0.81055, 0.77892, 0.97447, 0.82577, 0.97466, 0.87179, 0.95958, 0.77892, 0.94252, 0.95612, 0.8753, 1.02988, 0.92733, 0.94252, 0.87411, 0.84021, 0.8728, 0.95612, 0.74081, 0.8753, 1.02189, 1.02988, 0.84814, 0.87445, 0.91822, 0.84723, 0.85668, 0.86331, 0.81344, 0.87581, 0.76422, 0.82046, 0.96057, 0.92733, 0.99375, 0.78022, 0.95452, 0.86015, 1.02988, 0.92733, 0.86331, 0.92733, 0.86015, 0.73133, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90631, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.88323, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.85174, 1, 1, 1, 1, 1, 1, 0.96068, 0.95794, 0.96068, 0.95794, 0.96068, 0.95794, 0.77892, 0.84548, 1, 1, 0.89552, 0.90527, 1, 0.90363, 0.92794, 0.92794, 0.92794, 0.89807, 0.87012, 0.87012, 0.87012, 0.89552, 0.89552, 1.42259, 0.71094, 1.06152, 1, 1, 1.03372, 1.03372, 0.97171, 1.4956, 2.2807, 0.92972, 0.83406, 0.91133, 0.83326, 0.91133, 1, 1, 1, 0.72021, 1, 1.23108, 0.83489, 0.88525, 0.88525, 0.81499, 0.90616, 1.81055, 0.90527, 1.81055, 1.3107, 1.53711, 0.94434, 1.08696, 1, 0.95018, 0.77192, 0.85284, 0.90747, 1.17534, 0.69825, 0.9716, 1.37077, 0.90747, 0.90747, 0.85356, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.08004, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90727, 0.90727, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.CalibriBoldItalicFactors = CalibriBoldItalicFactors; -const CalibriBoldItalicMetrics = { - lineHeight: 1.2207, - lineGap: 0.2207 -}; -exports.CalibriBoldItalicMetrics = CalibriBoldItalicMetrics; -const CalibriItalicFactors = [1.3877, 1, 1, 1, 1.17223, 1.1293, 0.89552, 0.91133, 0.80395, 1.02269, 1.15601, 0.91056, 0.91056, 1.2798, 0.85284, 0.89807, 1, 0.90861, 1.39543, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.96309, 0.96309, 0.85284, 0.85284, 0.85284, 0.83319, 0.88071, 0.8675, 0.81552, 0.72346, 0.85193, 0.73206, 0.7522, 0.81105, 0.86275, 0.90685, 0.6377, 0.77892, 0.75593, 1.02638, 0.89249, 0.84118, 0.77452, 0.85374, 0.75186, 0.67789, 0.79776, 0.88844, 0.85066, 0.94309, 0.77818, 0.7306, 0.76659, 1.10369, 1.38313, 1.10369, 1.06139, 0.89552, 0.8739, 0.9245, 0.9245, 0.83203, 0.9245, 0.85865, 1.09842, 0.9245, 0.9245, 1.03297, 1.07692, 0.90918, 1.03297, 0.94959, 0.9245, 0.92274, 0.9245, 0.9245, 1.02933, 0.77832, 1.20562, 0.9245, 0.8916, 0.98986, 0.86621, 0.89453, 0.79004, 0.94152, 1.77256, 0.94152, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.91729, 0.89552, 1.17889, 1.13254, 1.16359, 0.92098, 0.85284, 0.68787, 0.71353, 0.84737, 0.90747, 1.0088, 1.0044, 0.87683, 1, 1.09091, 1, 0.92229, 0.739, 1.15642, 0.92098, 0.76288, 0.80504, 0.80972, 0.75859, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.76318, 0.72346, 0.73206, 0.73206, 0.73206, 0.73206, 0.90685, 0.90685, 0.90685, 0.90685, 0.86477, 0.89249, 0.84118, 0.84118, 0.84118, 0.84118, 0.84118, 0.85284, 0.84557, 0.88844, 0.88844, 0.88844, 0.88844, 0.7306, 0.77452, 0.86331, 0.9245, 0.9245, 0.9245, 0.9245, 0.9245, 0.9245, 0.84843, 0.83203, 0.85865, 0.85865, 0.85865, 0.85865, 0.82601, 0.82601, 0.82601, 0.82601, 0.94469, 0.9245, 0.92274, 0.92274, 0.92274, 0.92274, 0.92274, 0.90747, 0.86651, 0.9245, 0.9245, 0.9245, 0.9245, 0.89453, 0.9245, 0.89453, 0.8675, 0.9245, 0.8675, 0.9245, 0.8675, 0.9245, 0.72346, 0.83203, 0.72346, 0.83203, 0.72346, 0.83203, 0.72346, 0.83203, 0.85193, 0.8875, 0.86477, 0.99034, 0.73206, 0.85865, 0.73206, 0.85865, 0.73206, 0.85865, 0.73206, 0.85865, 0.73206, 0.85865, 0.81105, 0.9245, 0.81105, 0.9245, 0.81105, 0.9245, 1, 1, 0.86275, 0.9245, 0.90872, 0.93591, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 1.03297, 0.90685, 0.82601, 0.77896, 1.05611, 0.6377, 1.07692, 1, 1, 0.90918, 0.75593, 1.03297, 1, 1, 0.76032, 0.9375, 0.98156, 0.93407, 0.77261, 1.11429, 0.89249, 0.9245, 1, 1, 0.89249, 0.9245, 0.92534, 0.86698, 0.9245, 0.84118, 0.92274, 0.84118, 0.92274, 0.84118, 0.92274, 0.8667, 0.86291, 0.75186, 1.02933, 1, 1, 0.75186, 1.02933, 0.67789, 0.77832, 0.67789, 0.77832, 0.67789, 0.77832, 0.67789, 0.77832, 1, 1, 0.79776, 0.97655, 0.79776, 1.23023, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.94309, 0.98986, 0.7306, 0.89453, 0.7306, 0.76659, 0.79004, 0.76659, 0.79004, 0.76659, 0.79004, 1.09231, 0.54873, 0.8675, 0.9245, 0.76318, 0.84843, 0.84557, 0.86651, 1, 1, 0.79776, 1.20562, 1.18622, 1.18622, 1, 1.1437, 0.67009, 0.96334, 0.93695, 1.35191, 1.40909, 0.95161, 1.48387, 0.8675, 0.90861, 0.6192, 0.7363, 0.64824, 0.82411, 0.56321, 0.85696, 1.23516, 0.8675, 0.81552, 0.7286, 0.84134, 0.73206, 0.76659, 0.86275, 0.84369, 0.90685, 0.77892, 0.85871, 1.02638, 0.89249, 0.75828, 0.84118, 0.85984, 0.77452, 0.76466, 0.79776, 0.7306, 0.90782, 0.77818, 0.903, 0.87291, 0.90685, 0.7306, 0.99058, 1.03667, 0.94635, 1.23516, 0.9849, 0.99058, 0.92393, 0.8916, 0.942, 1.03667, 0.75026, 0.94635, 1.0297, 1.23516, 0.90918, 0.94048, 0.98217, 0.89746, 0.84153, 0.92274, 0.82507, 0.88832, 0.84438, 0.88178, 1.03525, 0.9849, 1.00225, 0.78086, 0.97248, 0.89404, 1.23516, 0.9849, 0.92274, 0.9849, 0.89404, 0.73206, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.89693, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.85865, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90933, 1, 1, 1, 1, 1, 1, 0.94309, 0.98986, 0.94309, 0.98986, 0.94309, 0.98986, 0.7306, 0.89453, 1, 1, 0.89552, 0.90527, 1, 0.90186, 1.12308, 1.12308, 1.12308, 1.12308, 1.2566, 1.2566, 1.2566, 0.89552, 0.89552, 1.42259, 0.68994, 1.03809, 1, 1, 1.0176, 1.0176, 1.11523, 1.4956, 2.01462, 0.97858, 0.82616, 0.91133, 0.83437, 0.91133, 1, 1, 1, 0.70508, 1, 1.23108, 0.79801, 0.84426, 0.84426, 0.774, 0.90572, 1.81055, 0.90749, 1.81055, 1.28809, 1.55469, 0.94434, 1.07806, 1, 0.97094, 0.7589, 0.85284, 0.90747, 1.19658, 0.69825, 0.97622, 1.33512, 0.90747, 0.90747, 0.85284, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.0336, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05859, 1.05859, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.CalibriItalicFactors = CalibriItalicFactors; -const CalibriItalicMetrics = { - lineHeight: 1.2207, - lineGap: 0.2207 -}; -exports.CalibriItalicMetrics = CalibriItalicMetrics; -const CalibriRegularFactors = [1.3877, 1, 1, 1, 1.17223, 1.1293, 0.89552, 0.91133, 0.80395, 1.02269, 1.15601, 0.91056, 0.91056, 1.2798, 0.85284, 0.89807, 1, 0.90861, 1.39016, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.96309, 0.96309, 0.85284, 0.85284, 0.85284, 0.83319, 0.88071, 0.8675, 0.81552, 0.73834, 0.85193, 0.73206, 0.7522, 0.81105, 0.86275, 0.90685, 0.6377, 0.77892, 0.75593, 1.02638, 0.89385, 0.85122, 0.77452, 0.86503, 0.75186, 0.68887, 0.79776, 0.88844, 0.85066, 0.94258, 0.77818, 0.7306, 0.76659, 1.10369, 1.39016, 1.10369, 1.06139, 0.89552, 0.8739, 0.86128, 0.94469, 0.8457, 0.94469, 0.89464, 1.09842, 0.84636, 0.94469, 1.03297, 1.07692, 0.90918, 1.03297, 0.95897, 0.94469, 0.9482, 0.94469, 0.94469, 1.04692, 0.78223, 1.20562, 0.94469, 0.90332, 0.98986, 0.86621, 0.90527, 0.79004, 0.94152, 1.77256, 0.94152, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.91729, 0.89552, 1.17889, 1.13254, 1.08707, 0.92098, 0.85284, 0.68787, 0.71353, 0.84737, 0.90747, 1.0088, 1.0044, 0.87683, 1, 1.09091, 1, 0.92229, 0.739, 1.15642, 0.92098, 0.76288, 0.80504, 0.80972, 0.75859, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.76318, 0.73834, 0.73206, 0.73206, 0.73206, 0.73206, 0.90685, 0.90685, 0.90685, 0.90685, 0.86477, 0.89385, 0.85122, 0.85122, 0.85122, 0.85122, 0.85122, 0.85284, 0.85311, 0.88844, 0.88844, 0.88844, 0.88844, 0.7306, 0.77452, 0.86331, 0.86128, 0.86128, 0.86128, 0.86128, 0.86128, 0.86128, 0.8693, 0.8457, 0.89464, 0.89464, 0.89464, 0.89464, 0.82601, 0.82601, 0.82601, 0.82601, 0.94469, 0.94469, 0.9482, 0.9482, 0.9482, 0.9482, 0.9482, 0.90747, 0.86651, 0.94469, 0.94469, 0.94469, 0.94469, 0.90527, 0.94469, 0.90527, 0.8675, 0.86128, 0.8675, 0.86128, 0.8675, 0.86128, 0.73834, 0.8457, 0.73834, 0.8457, 0.73834, 0.8457, 0.73834, 0.8457, 0.85193, 0.92454, 0.86477, 0.9921, 0.73206, 0.89464, 0.73206, 0.89464, 0.73206, 0.89464, 0.73206, 0.89464, 0.73206, 0.89464, 0.81105, 0.84636, 0.81105, 0.84636, 0.81105, 0.84636, 1, 1, 0.86275, 0.94469, 0.90872, 0.95786, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 1.03297, 0.90685, 0.82601, 0.77741, 1.05611, 0.6377, 1.07692, 1, 1, 0.90918, 0.75593, 1.03297, 1, 1, 0.76032, 0.90452, 0.98156, 1.11842, 0.77261, 1.11429, 0.89385, 0.94469, 1, 1, 0.89385, 0.94469, 0.95877, 0.86901, 0.94469, 0.85122, 0.9482, 0.85122, 0.9482, 0.85122, 0.9482, 0.8667, 0.90016, 0.75186, 1.04692, 1, 1, 0.75186, 1.04692, 0.68887, 0.78223, 0.68887, 0.78223, 0.68887, 0.78223, 0.68887, 0.78223, 1, 1, 0.79776, 0.92188, 0.79776, 1.23023, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.94258, 0.98986, 0.7306, 0.90527, 0.7306, 0.76659, 0.79004, 0.76659, 0.79004, 0.76659, 0.79004, 1.09231, 0.54873, 0.8675, 0.86128, 0.76318, 0.8693, 0.85311, 0.86651, 1, 1, 0.79776, 1.20562, 1.18622, 1.18622, 1, 1.1437, 0.67742, 0.96334, 0.93695, 1.35191, 1.40909, 0.95161, 1.48387, 0.86686, 0.90861, 0.62267, 0.74359, 0.65649, 0.85498, 0.56963, 0.88254, 1.23516, 0.8675, 0.81552, 0.75443, 0.84503, 0.73206, 0.76659, 0.86275, 0.85122, 0.90685, 0.77892, 0.85746, 1.02638, 0.89385, 0.75657, 0.85122, 0.86275, 0.77452, 0.74171, 0.79776, 0.7306, 0.95165, 0.77818, 0.89772, 0.88831, 0.90685, 0.7306, 0.98142, 1.02191, 0.96576, 1.23516, 0.99018, 0.98142, 0.9236, 0.89258, 0.94035, 1.02191, 0.78848, 0.96576, 0.9561, 1.23516, 0.90918, 0.92578, 0.95424, 0.89746, 0.83969, 0.9482, 0.80113, 0.89442, 0.85208, 0.86155, 0.98022, 0.99018, 1.00452, 0.81209, 0.99247, 0.89181, 1.23516, 0.99018, 0.9482, 0.99018, 0.89181, 0.73206, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.88844, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.89464, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.96766, 1, 1, 1, 1, 1, 1, 0.94258, 0.98986, 0.94258, 0.98986, 0.94258, 0.98986, 0.7306, 0.90527, 1, 1, 0.89552, 0.90527, 1, 0.90186, 1.12308, 1.12308, 1.12308, 1.12308, 1.2566, 1.2566, 1.2566, 0.89552, 0.89552, 1.42259, 0.69043, 1.03809, 1, 1, 1.0176, 1.0176, 1.11523, 1.4956, 2.01462, 0.99331, 0.82616, 0.91133, 0.84286, 0.91133, 1, 1, 1, 0.70508, 1, 1.23108, 0.79801, 0.84426, 0.84426, 0.774, 0.90527, 1.81055, 0.90527, 1.81055, 1.28809, 1.55469, 0.94434, 1.07806, 1, 0.97094, 0.7589, 0.85284, 0.90747, 1.19658, 0.69825, 0.97622, 1.33512, 0.90747, 0.90747, 0.85356, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.0336, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05859, 1.05859, 1, 1, 1, 1.07185, 0.99413, 0.96334, 1.08065, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.CalibriRegularFactors = CalibriRegularFactors; -const CalibriRegularMetrics = { - lineHeight: 1.2207, - lineGap: 0.2207 -}; -exports.CalibriRegularMetrics = CalibriRegularMetrics; - -/***/ }), -/* 14 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.HelveticaRegularMetrics = exports.HelveticaRegularFactors = exports.HelveticaItalicMetrics = exports.HelveticaItalicFactors = exports.HelveticaBoldMetrics = exports.HelveticaBoldItalicMetrics = exports.HelveticaBoldItalicFactors = exports.HelveticaBoldFactors = void 0; -const HelveticaBoldFactors = [0.76116, 1, 1, 1.0006, 0.99998, 0.99974, 0.99973, 0.99973, 0.99982, 0.99977, 1.00087, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.00003, 1.00003, 1.00003, 1.00026, 0.9999, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 0.99973, 0.99977, 1.00026, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 0.99998, 1.0006, 0.99998, 1.00003, 0.99973, 0.99998, 0.99973, 1.00026, 0.99973, 1.00026, 0.99973, 0.99998, 1.00026, 1.00026, 1.0006, 1.0006, 0.99973, 1.0006, 0.99982, 1.00026, 1.00026, 1.00026, 1.00026, 0.99959, 0.99973, 0.99998, 1.00026, 0.99973, 1.00022, 0.99973, 0.99973, 1, 0.99959, 1.00077, 0.99959, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.00077, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.99973, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.06409, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 1.00026, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 1.03374, 0.99977, 1.00026, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.00042, 0.99973, 0.99973, 1.0006, 0.99977, 0.99973, 0.99973, 1.00026, 1.0006, 1.00026, 1.0006, 1.00026, 1.03828, 1.00026, 0.99999, 1.00026, 1.0006, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.9993, 0.9998, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1, 1.00016, 0.99977, 0.99959, 0.99977, 0.99959, 0.99977, 0.99959, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00026, 0.99998, 1.00026, 0.8121, 1.00026, 0.99998, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.00016, 1.00022, 1.00001, 0.99973, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 1.0006, 0.99973, 0.99977, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 0.99973, 1.00026, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 1.00034, 0.99977, 1, 0.99997, 1.00026, 1.00078, 1.00036, 0.99973, 1.00013, 1.0006, 0.99977, 0.99977, 0.99988, 0.85148, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 0.99977, 1.00001, 0.99999, 0.99977, 1.00069, 1.00022, 0.99977, 1.00001, 0.99984, 1.00026, 1.00001, 1.00024, 1.00001, 0.9999, 1, 1.0006, 1.00001, 1.00041, 0.99962, 1.00026, 1.0006, 0.99995, 1.00041, 0.99942, 0.99973, 0.99927, 1.00082, 0.99902, 1.00026, 1.00087, 1.0006, 1.00069, 0.99973, 0.99867, 0.99973, 0.9993, 1.00026, 1.00049, 1.00056, 1, 0.99988, 0.99935, 0.99995, 0.99954, 1.00055, 0.99945, 1.00032, 1.0006, 0.99995, 1.00026, 0.99995, 1.00032, 1.00001, 1.00008, 0.99971, 1.00019, 0.9994, 1.00001, 1.0006, 1.00044, 0.99973, 1.00023, 1.00047, 1, 0.99942, 0.99561, 0.99989, 1.00035, 0.99977, 1.00035, 0.99977, 1.00019, 0.99944, 1.00001, 1.00021, 0.99926, 1.00035, 1.00035, 0.99942, 1.00048, 0.99999, 0.99977, 1.00022, 1.00035, 1.00001, 0.99977, 1.00026, 0.99989, 1.00057, 1.00001, 0.99936, 1.00052, 1.00012, 0.99996, 1.00043, 1, 1.00035, 0.9994, 0.99976, 1.00035, 0.99973, 1.00052, 1.00041, 1.00119, 1.00037, 0.99973, 1.00002, 0.99986, 1.00041, 1.00041, 0.99902, 0.9996, 1.00034, 0.99999, 1.00026, 0.99999, 1.00026, 0.99973, 1.00052, 0.99973, 1, 0.99973, 1.00041, 1.00075, 0.9994, 1.0003, 0.99999, 1, 1.00041, 0.99955, 1, 0.99915, 0.99973, 0.99973, 1.00026, 1.00119, 0.99955, 0.99973, 1.0006, 0.99911, 1.0006, 1.00026, 0.99972, 1.00026, 0.99902, 1.00041, 0.99973, 0.99999, 1, 1, 1.00038, 1.0005, 1.00016, 1.00022, 1.00016, 1.00022, 1.00016, 1.00022, 1.00001, 0.99973, 1, 1, 0.99973, 1, 1, 0.99955, 1.0006, 1.0006, 1.0006, 1.0006, 1, 1, 1, 0.99973, 0.99973, 0.99972, 1, 1, 1.00106, 0.99999, 0.99998, 0.99998, 0.99999, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973, 0.99971, 1.00047, 1.00023, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1, 1, 1, 1, 1, 1, 1, 0.99972, 1, 1.20985, 1.39713, 1.00003, 1.00031, 1.00015, 1, 0.99561, 1.00027, 1.00031, 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.99972, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998, 0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.HelveticaBoldFactors = HelveticaBoldFactors; -const HelveticaBoldMetrics = { - lineHeight: 1.2, - lineGap: 0.2 -}; -exports.HelveticaBoldMetrics = HelveticaBoldMetrics; -const HelveticaBoldItalicFactors = [0.76116, 1, 1, 1.0006, 0.99998, 0.99974, 0.99973, 0.99973, 0.99982, 0.99977, 1.00087, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.00003, 1.00003, 1.00003, 1.00026, 0.9999, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 0.99973, 0.99977, 1.00026, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 0.99998, 1.0006, 0.99998, 1.00003, 0.99973, 0.99998, 0.99973, 1.00026, 0.99973, 1.00026, 0.99973, 0.99998, 1.00026, 1.00026, 1.0006, 1.0006, 0.99973, 1.0006, 0.99982, 1.00026, 1.00026, 1.00026, 1.00026, 0.99959, 0.99973, 0.99998, 1.00026, 0.99973, 1.00022, 0.99973, 0.99973, 1, 0.99959, 1.00077, 0.99959, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.00077, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.99973, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.06409, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 1.00026, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 1.0044, 0.99977, 1.00026, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99971, 0.99973, 0.99973, 1.0006, 0.99977, 0.99973, 0.99973, 1.00026, 1.0006, 1.00026, 1.0006, 1.00026, 1.01011, 1.00026, 0.99999, 1.00026, 1.0006, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.9993, 0.9998, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1, 1.00016, 0.99977, 0.99959, 0.99977, 0.99959, 0.99977, 0.99959, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00026, 0.99998, 1.00026, 0.8121, 1.00026, 0.99998, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.00016, 1.00022, 1.00001, 0.99973, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 1.0006, 0.99973, 0.99977, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 0.99973, 1.00026, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99977, 1, 1, 1.00026, 0.99969, 0.99972, 0.99981, 0.9998, 1.0006, 0.99977, 0.99977, 1.00022, 0.91155, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 0.99977, 1.00001, 0.99999, 0.99977, 0.99966, 1.00022, 1.00032, 1.00001, 0.99944, 1.00026, 1.00001, 0.99968, 1.00001, 1.00047, 1, 1.0006, 1.00001, 0.99981, 1.00101, 1.00026, 1.0006, 0.99948, 0.99981, 1.00064, 0.99973, 0.99942, 1.00101, 1.00061, 1.00026, 1.00069, 1.0006, 1.00014, 0.99973, 1.01322, 0.99973, 1.00065, 1.00026, 1.00012, 0.99923, 1, 1.00064, 1.00076, 0.99948, 1.00055, 1.00063, 1.00007, 0.99943, 1.0006, 0.99948, 1.00026, 0.99948, 0.99943, 1.00001, 1.00001, 1.00029, 1.00038, 1.00035, 1.00001, 1.0006, 1.0006, 0.99973, 0.99978, 1.00001, 1.00057, 0.99989, 0.99967, 0.99964, 0.99967, 0.99977, 0.99999, 0.99977, 1.00038, 0.99977, 1.00001, 0.99973, 1.00066, 0.99967, 0.99967, 1.00041, 0.99998, 0.99999, 0.99977, 1.00022, 0.99967, 1.00001, 0.99977, 1.00026, 0.99964, 1.00031, 1.00001, 0.99999, 0.99999, 1, 1.00023, 1, 1, 0.99999, 1.00035, 1.00001, 0.99999, 0.99973, 0.99977, 0.99999, 1.00058, 0.99973, 0.99973, 0.99955, 0.9995, 1.00026, 1.00026, 1.00032, 0.99989, 1.00034, 0.99999, 1.00026, 1.00026, 1.00026, 0.99973, 0.45998, 0.99973, 1.00026, 0.99973, 1.00001, 0.99999, 0.99982, 0.99994, 0.99996, 1, 1.00042, 1.00044, 1.00029, 1.00023, 0.99973, 0.99973, 1.00026, 0.99949, 1.00002, 0.99973, 1.0006, 1.0006, 1.0006, 0.99975, 1.00026, 1.00026, 1.00032, 0.98685, 0.99973, 1.00026, 1, 1, 0.99966, 1.00044, 1.00016, 1.00022, 1.00016, 1.00022, 1.00016, 1.00022, 1.00001, 0.99973, 1, 1, 0.99973, 1, 1, 0.99955, 1.0006, 1.0006, 1.0006, 1.0006, 1, 1, 1, 0.99973, 0.99973, 0.99972, 1, 1, 1.00106, 0.99999, 0.99998, 0.99998, 0.99999, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1, 0.99973, 0.99971, 0.99978, 1, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1.00098, 1, 1, 1, 1.00049, 1, 1, 0.99972, 1, 1.20985, 1.39713, 1.00003, 1.00031, 1.00015, 1, 0.99561, 1.00027, 1.00031, 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.99972, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998, 0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.HelveticaBoldItalicFactors = HelveticaBoldItalicFactors; -const HelveticaBoldItalicMetrics = { - lineHeight: 1.35, - lineGap: 0.2 -}; -exports.HelveticaBoldItalicMetrics = HelveticaBoldItalicMetrics; -const HelveticaItalicFactors = [0.76116, 1, 1, 1.0006, 1.0006, 1.00006, 0.99973, 0.99973, 0.99982, 1.00001, 1.00043, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1, 1.00003, 1.00003, 1.00003, 0.99973, 0.99987, 1.00001, 1.00001, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 1, 1.00001, 0.99973, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 1.0006, 1.0006, 1.0006, 0.99949, 0.99973, 0.99998, 0.99973, 0.99973, 1, 0.99973, 0.99973, 1.0006, 0.99973, 0.99973, 0.99924, 0.99924, 1, 0.99924, 0.99999, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.0006, 0.99973, 1, 0.99977, 1, 1, 1, 1.00005, 1.0009, 1.00005, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.0009, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.9998, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 1, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.06409, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 1, 0.99973, 1, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1.0288, 0.99977, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99924, 1.0006, 1.0006, 0.99946, 1.00034, 1, 0.99924, 1.00001, 1, 1, 0.99973, 0.99924, 0.99973, 0.99924, 0.99973, 1.06311, 0.99973, 1.00024, 0.99973, 0.99924, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.00041, 0.9998, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1, 1.00016, 0.99977, 0.99998, 0.99977, 0.99998, 0.99977, 0.99998, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00026, 1.0006, 1.00026, 0.89547, 1.00026, 1.0006, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.00016, 0.99977, 1.00001, 1, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 0.99924, 0.99973, 1.00001, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 1, 1.00026, 1.0006, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 1.00001, 1, 1.00054, 0.99977, 1.00084, 1.00007, 0.99973, 1.00013, 0.99924, 1.00001, 1.00001, 0.99945, 0.91221, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 1.00001, 1.00001, 0.99999, 0.99977, 0.99933, 1.00022, 1.00054, 1.00001, 1.00065, 1.00026, 1.00001, 1.0001, 1.00001, 1.00052, 1, 1.0006, 1.00001, 0.99945, 0.99897, 0.99968, 0.99924, 1.00036, 0.99945, 0.99949, 1, 1.0006, 0.99897, 0.99918, 0.99968, 0.99911, 0.99924, 1, 0.99962, 1.01487, 1, 1.0005, 0.99973, 1.00012, 1.00043, 1, 0.99995, 0.99994, 1.00036, 0.99947, 1.00019, 1.00063, 1.00025, 0.99924, 1.00036, 0.99973, 1.00036, 1.00025, 1.00001, 1.00001, 1.00027, 1.0001, 1.00068, 1.00001, 1.0006, 1.0006, 1, 1.00008, 0.99957, 0.99972, 0.9994, 0.99954, 0.99975, 1.00051, 1.00001, 1.00019, 1.00001, 1.0001, 0.99986, 1.00001, 1.00001, 1.00038, 0.99954, 0.99954, 0.9994, 1.00066, 0.99999, 0.99977, 1.00022, 1.00054, 1.00001, 0.99977, 1.00026, 0.99975, 1.0001, 1.00001, 0.99993, 0.9995, 0.99955, 1.00016, 0.99978, 0.99974, 1.00019, 1.00022, 0.99955, 1.00053, 0.99973, 1.00089, 1.00005, 0.99967, 1.00048, 0.99973, 1.00002, 1.00034, 0.99973, 0.99973, 0.99964, 1.00006, 1.00066, 0.99947, 0.99973, 0.98894, 0.99973, 1, 0.44898, 1, 0.99946, 1, 1.00039, 1.00082, 0.99991, 0.99991, 0.99985, 1.00022, 1.00023, 1.00061, 1.00006, 0.99966, 0.99973, 0.99973, 0.99973, 1.00019, 1.0008, 1, 0.99924, 0.99924, 0.99924, 0.99983, 1.00044, 0.99973, 0.99964, 0.98332, 1, 0.99973, 1, 1, 0.99962, 0.99895, 1.00016, 0.99977, 1.00016, 0.99977, 1.00016, 0.99977, 1.00001, 1, 1, 1, 0.99973, 1, 1, 0.99955, 0.99924, 0.99924, 0.99924, 0.99924, 0.99998, 0.99998, 0.99998, 0.99973, 0.99973, 0.99972, 1, 1, 1.00267, 0.99999, 0.99998, 0.99998, 1, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973, 1.00423, 0.99925, 0.99999, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1.00049, 1, 1.00245, 1, 1, 1, 1, 0.96329, 1, 1.20985, 1.39713, 1.00003, 0.8254, 1.00015, 1, 1.00035, 1.00027, 1.00031, 1.00031, 1.00003, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.95317, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998, 0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.HelveticaItalicFactors = HelveticaItalicFactors; -const HelveticaItalicMetrics = { - lineHeight: 1.35, - lineGap: 0.2 -}; -exports.HelveticaItalicMetrics = HelveticaItalicMetrics; -const HelveticaRegularFactors = [0.76116, 1, 1, 1.0006, 1.0006, 1.00006, 0.99973, 0.99973, 0.99982, 1.00001, 1.00043, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1, 1.00003, 1.00003, 1.00003, 0.99973, 0.99987, 1.00001, 1.00001, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 1, 1.00001, 0.99973, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 1.0006, 1.0006, 1.0006, 0.99949, 0.99973, 0.99998, 0.99973, 0.99973, 1, 0.99973, 0.99973, 1.0006, 0.99973, 0.99973, 0.99924, 0.99924, 1, 0.99924, 0.99999, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.0006, 0.99973, 1, 0.99977, 1, 1, 1, 1.00005, 1.0009, 1.00005, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.0009, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.9998, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 1, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.06409, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 1, 0.99973, 1, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1.04596, 0.99977, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99924, 1.0006, 1.0006, 1.00019, 1.00034, 1, 0.99924, 1.00001, 1, 1, 0.99973, 0.99924, 0.99973, 0.99924, 0.99973, 1.02572, 0.99973, 1.00005, 0.99973, 0.99924, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99999, 0.9998, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1, 1.00016, 0.99977, 0.99998, 0.99977, 0.99998, 0.99977, 0.99998, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00026, 1.0006, 1.00026, 0.84533, 1.00026, 1.0006, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.00016, 0.99977, 1.00001, 1, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 0.99924, 0.99973, 1.00001, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 1, 1.00026, 1.0006, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99928, 1, 0.99977, 1.00013, 1.00055, 0.99947, 0.99945, 0.99941, 0.99924, 1.00001, 1.00001, 1.0004, 0.91621, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 1.00001, 1.00005, 0.99999, 0.99977, 1.00015, 1.00022, 0.99977, 1.00001, 0.99973, 1.00026, 1.00001, 1.00019, 1.00001, 0.99946, 1, 1.0006, 1.00001, 0.99978, 1.00045, 0.99973, 0.99924, 1.00023, 0.99978, 0.99966, 1, 1.00065, 1.00045, 1.00019, 0.99973, 0.99973, 0.99924, 1, 1, 0.96499, 1, 1.00055, 0.99973, 1.00008, 1.00027, 1, 0.9997, 0.99995, 1.00023, 0.99933, 1.00019, 1.00015, 1.00031, 0.99924, 1.00023, 0.99973, 1.00023, 1.00031, 1.00001, 0.99928, 1.00029, 1.00092, 1.00035, 1.00001, 1.0006, 1.0006, 1, 0.99988, 0.99975, 1, 1.00082, 0.99561, 0.9996, 1.00035, 1.00001, 0.99962, 1.00001, 1.00092, 0.99964, 1.00001, 0.99963, 0.99999, 1.00035, 1.00035, 1.00082, 0.99962, 0.99999, 0.99977, 1.00022, 1.00035, 1.00001, 0.99977, 1.00026, 0.9996, 0.99967, 1.00001, 1.00034, 1.00074, 1.00054, 1.00053, 1.00063, 0.99971, 0.99962, 1.00035, 0.99975, 0.99977, 0.99973, 1.00043, 0.99953, 1.0007, 0.99915, 0.99973, 1.00008, 0.99892, 1.00073, 1.00073, 1.00114, 0.99915, 1.00073, 0.99955, 0.99973, 1.00092, 0.99973, 1, 0.99998, 1, 1.0003, 1, 1.00043, 1.00001, 0.99969, 1.0003, 1, 1.00035, 1.00001, 0.9995, 1, 1.00092, 0.99973, 0.99973, 0.99973, 1.0007, 0.9995, 1, 0.99924, 1.0006, 0.99924, 0.99972, 1.00062, 0.99973, 1.00114, 1.00073, 1, 0.99955, 1, 1, 1.00047, 0.99968, 1.00016, 0.99977, 1.00016, 0.99977, 1.00016, 0.99977, 1.00001, 1, 1, 1, 0.99973, 1, 1, 0.99955, 0.99924, 0.99924, 0.99924, 0.99924, 0.99998, 0.99998, 0.99998, 0.99973, 0.99973, 0.99972, 1, 1, 1.00267, 0.99999, 0.99998, 0.99998, 1, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973, 0.99971, 0.99925, 1.00023, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1, 1, 1, 1, 1, 1, 1, 0.96329, 1, 1.20985, 1.39713, 1.00003, 0.8254, 1.00015, 1, 1.00035, 1.00027, 1.00031, 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.95317, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.HelveticaRegularFactors = HelveticaRegularFactors; -const HelveticaRegularMetrics = { - lineHeight: 1.2, - lineGap: 0.2 -}; -exports.HelveticaRegularMetrics = HelveticaRegularMetrics; - -/***/ }), -/* 15 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.LiberationSansRegularWidths = exports.LiberationSansRegularMapping = exports.LiberationSansItalicWidths = exports.LiberationSansItalicMapping = exports.LiberationSansBoldWidths = exports.LiberationSansBoldMapping = exports.LiberationSansBoldItalicWidths = exports.LiberationSansBoldItalicMapping = void 0; -const LiberationSansBoldWidths = [365, 0, 333, 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333, 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389, 584, 333, 556, 556, 556, 556, 280, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 556, 278, 333, 333, 365, 556, 834, 834, 834, 611, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 556, 556, 556, 556, 556, 278, 278, 278, 278, 611, 611, 611, 611, 611, 611, 611, 549, 611, 611, 611, 611, 611, 556, 611, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 719, 722, 611, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 611, 778, 611, 778, 611, 778, 611, 722, 611, 722, 611, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 785, 556, 556, 278, 722, 556, 556, 611, 278, 611, 278, 611, 385, 611, 479, 611, 278, 722, 611, 722, 611, 722, 611, 708, 723, 611, 778, 611, 778, 611, 778, 611, 1000, 944, 722, 389, 722, 389, 722, 389, 667, 556, 667, 556, 667, 556, 667, 556, 611, 333, 611, 479, 611, 333, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 944, 778, 667, 556, 667, 611, 500, 611, 500, 611, 500, 278, 556, 722, 556, 1000, 889, 778, 611, 667, 556, 611, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 465, 722, 333, 853, 906, 474, 825, 927, 838, 278, 722, 722, 601, 719, 667, 611, 722, 778, 278, 722, 667, 833, 722, 644, 778, 722, 667, 600, 611, 667, 821, 667, 809, 802, 278, 667, 615, 451, 611, 278, 582, 615, 610, 556, 606, 475, 460, 611, 541, 278, 558, 556, 612, 556, 445, 611, 766, 619, 520, 684, 446, 582, 715, 576, 753, 845, 278, 582, 611, 582, 845, 667, 669, 885, 567, 711, 667, 278, 276, 556, 1094, 1062, 875, 610, 722, 622, 719, 722, 719, 722, 567, 712, 667, 904, 626, 719, 719, 610, 702, 833, 722, 778, 719, 667, 722, 611, 622, 854, 667, 730, 703, 1005, 1019, 870, 979, 719, 711, 1031, 719, 556, 618, 615, 417, 635, 556, 709, 497, 615, 615, 500, 635, 740, 604, 611, 604, 611, 556, 490, 556, 875, 556, 615, 581, 833, 844, 729, 854, 615, 552, 854, 583, 556, 556, 611, 417, 552, 556, 278, 281, 278, 969, 906, 611, 500, 615, 556, 604, 778, 611, 487, 447, 944, 778, 944, 778, 944, 778, 667, 556, 333, 333, 556, 1000, 1000, 552, 278, 278, 278, 278, 500, 500, 500, 556, 556, 350, 1000, 1000, 240, 479, 333, 333, 604, 333, 167, 396, 556, 556, 1094, 556, 885, 489, 1115, 1000, 768, 600, 834, 834, 834, 834, 1000, 500, 1000, 500, 1000, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 722, 274, 549, 549, 583, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 611, 611, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 333, 333, 333, 333, 333, 333, 333, 333]; -exports.LiberationSansBoldWidths = LiberationSansBoldWidths; -const LiberationSansBoldMapping = [-1, -1, -1, 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, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]; -exports.LiberationSansBoldMapping = LiberationSansBoldMapping; -const LiberationSansBoldItalicWidths = [365, 0, 333, 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333, 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389, 584, 333, 556, 556, 556, 556, 280, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 556, 278, 333, 333, 365, 556, 834, 834, 834, 611, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 556, 556, 556, 556, 556, 278, 278, 278, 278, 611, 611, 611, 611, 611, 611, 611, 549, 611, 611, 611, 611, 611, 556, 611, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 740, 722, 611, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 611, 778, 611, 778, 611, 778, 611, 722, 611, 722, 611, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 782, 556, 556, 278, 722, 556, 556, 611, 278, 611, 278, 611, 396, 611, 479, 611, 278, 722, 611, 722, 611, 722, 611, 708, 723, 611, 778, 611, 778, 611, 778, 611, 1000, 944, 722, 389, 722, 389, 722, 389, 667, 556, 667, 556, 667, 556, 667, 556, 611, 333, 611, 479, 611, 333, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 944, 778, 667, 556, 667, 611, 500, 611, 500, 611, 500, 278, 556, 722, 556, 1000, 889, 778, 611, 667, 556, 611, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 722, 333, 854, 906, 473, 844, 930, 847, 278, 722, 722, 610, 671, 667, 611, 722, 778, 278, 722, 667, 833, 722, 657, 778, 718, 667, 590, 611, 667, 822, 667, 829, 781, 278, 667, 620, 479, 611, 278, 591, 620, 621, 556, 610, 479, 492, 611, 558, 278, 566, 556, 603, 556, 450, 611, 712, 605, 532, 664, 409, 591, 704, 578, 773, 834, 278, 591, 611, 591, 834, 667, 667, 886, 614, 719, 667, 278, 278, 556, 1094, 1042, 854, 622, 719, 677, 719, 722, 708, 722, 614, 722, 667, 927, 643, 719, 719, 615, 687, 833, 722, 778, 719, 667, 722, 611, 677, 781, 667, 729, 708, 979, 989, 854, 1000, 708, 719, 1042, 729, 556, 619, 604, 534, 618, 556, 736, 510, 611, 611, 507, 622, 740, 604, 611, 611, 611, 556, 889, 556, 885, 556, 646, 583, 889, 935, 707, 854, 594, 552, 865, 589, 556, 556, 611, 469, 563, 556, 278, 278, 278, 969, 906, 611, 507, 619, 556, 611, 778, 611, 575, 467, 944, 778, 944, 778, 944, 778, 667, 556, 333, 333, 556, 1000, 1000, 552, 278, 278, 278, 278, 500, 500, 500, 556, 556, 350, 1000, 1000, 240, 479, 333, 333, 604, 333, 167, 396, 556, 556, 1104, 556, 885, 516, 1146, 1000, 768, 600, 834, 834, 834, 834, 999, 500, 1000, 500, 1000, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 722, 274, 549, 549, 583, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 611, 611, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 333, 333, 333, 333, 333, 333, 333, 333]; -exports.LiberationSansBoldItalicWidths = LiberationSansBoldItalicWidths; -const LiberationSansBoldItalicMapping = [-1, -1, -1, 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, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]; -exports.LiberationSansBoldItalicMapping = LiberationSansBoldItalicMapping; -const LiberationSansItalicWidths = [365, 0, 333, 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278, 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334, 584, 333, 556, 556, 556, 556, 260, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 537, 278, 333, 333, 365, 556, 834, 834, 834, 611, 667, 667, 667, 667, 667, 667, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278, 278, 278, 556, 556, 556, 556, 556, 556, 556, 549, 611, 556, 556, 556, 556, 500, 556, 500, 667, 556, 667, 556, 667, 556, 722, 500, 722, 500, 722, 500, 722, 500, 722, 625, 722, 556, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 556, 778, 556, 778, 556, 778, 556, 722, 556, 722, 556, 278, 278, 278, 278, 278, 278, 278, 222, 278, 278, 733, 444, 500, 222, 667, 500, 500, 556, 222, 556, 222, 556, 281, 556, 400, 556, 222, 722, 556, 722, 556, 722, 556, 615, 723, 556, 778, 556, 778, 556, 778, 556, 1000, 944, 722, 333, 722, 333, 722, 333, 667, 500, 667, 500, 667, 500, 667, 500, 611, 278, 611, 354, 611, 278, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 944, 722, 667, 500, 667, 611, 500, 611, 500, 611, 500, 222, 556, 667, 556, 1000, 889, 778, 611, 667, 500, 611, 278, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 667, 278, 789, 846, 389, 794, 865, 775, 222, 667, 667, 570, 671, 667, 611, 722, 778, 278, 667, 667, 833, 722, 648, 778, 725, 667, 600, 611, 667, 837, 667, 831, 761, 278, 667, 570, 439, 555, 222, 550, 570, 571, 500, 556, 439, 463, 555, 542, 222, 500, 492, 548, 500, 447, 556, 670, 573, 486, 603, 374, 550, 652, 546, 728, 779, 222, 550, 556, 550, 779, 667, 667, 843, 544, 708, 667, 278, 278, 500, 1066, 982, 844, 589, 715, 639, 724, 667, 651, 667, 544, 704, 667, 917, 614, 715, 715, 589, 686, 833, 722, 778, 725, 667, 722, 611, 639, 795, 667, 727, 673, 920, 923, 805, 886, 651, 694, 1022, 682, 556, 562, 522, 493, 553, 556, 688, 465, 556, 556, 472, 564, 686, 550, 556, 556, 556, 500, 833, 500, 835, 500, 572, 518, 830, 851, 621, 736, 526, 492, 752, 534, 556, 556, 556, 378, 496, 500, 222, 222, 222, 910, 828, 556, 472, 565, 500, 556, 778, 556, 492, 339, 944, 722, 944, 722, 944, 722, 667, 500, 333, 333, 556, 1000, 1000, 552, 222, 222, 222, 222, 333, 333, 333, 556, 556, 350, 1000, 1000, 188, 354, 333, 333, 500, 333, 167, 365, 556, 556, 1094, 556, 885, 323, 1083, 1000, 768, 600, 834, 834, 834, 834, 1000, 500, 998, 500, 1000, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 719, 274, 549, 549, 584, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 500, 500, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 294, 294, 324, 324, 316, 328, 398, 285]; -exports.LiberationSansItalicWidths = LiberationSansItalicWidths; -const LiberationSansItalicMapping = [-1, -1, -1, 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, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]; -exports.LiberationSansItalicMapping = LiberationSansItalicMapping; -const LiberationSansRegularWidths = [365, 0, 333, 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278, 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334, 584, 333, 556, 556, 556, 556, 260, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 537, 278, 333, 333, 365, 556, 834, 834, 834, 611, 667, 667, 667, 667, 667, 667, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278, 278, 278, 556, 556, 556, 556, 556, 556, 556, 549, 611, 556, 556, 556, 556, 500, 556, 500, 667, 556, 667, 556, 667, 556, 722, 500, 722, 500, 722, 500, 722, 500, 722, 615, 722, 556, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 556, 778, 556, 778, 556, 778, 556, 722, 556, 722, 556, 278, 278, 278, 278, 278, 278, 278, 222, 278, 278, 735, 444, 500, 222, 667, 500, 500, 556, 222, 556, 222, 556, 292, 556, 334, 556, 222, 722, 556, 722, 556, 722, 556, 604, 723, 556, 778, 556, 778, 556, 778, 556, 1000, 944, 722, 333, 722, 333, 722, 333, 667, 500, 667, 500, 667, 500, 667, 500, 611, 278, 611, 375, 611, 278, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 944, 722, 667, 500, 667, 611, 500, 611, 500, 611, 500, 222, 556, 667, 556, 1000, 889, 778, 611, 667, 500, 611, 278, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 667, 278, 784, 838, 384, 774, 855, 752, 222, 667, 667, 551, 668, 667, 611, 722, 778, 278, 667, 668, 833, 722, 650, 778, 722, 667, 618, 611, 667, 798, 667, 835, 748, 278, 667, 578, 446, 556, 222, 547, 578, 575, 500, 557, 446, 441, 556, 556, 222, 500, 500, 576, 500, 448, 556, 690, 569, 482, 617, 395, 547, 648, 525, 713, 781, 222, 547, 556, 547, 781, 667, 667, 865, 542, 719, 667, 278, 278, 500, 1057, 1010, 854, 583, 722, 635, 719, 667, 656, 667, 542, 677, 667, 923, 604, 719, 719, 583, 656, 833, 722, 778, 719, 667, 722, 611, 635, 760, 667, 740, 667, 917, 938, 792, 885, 656, 719, 1010, 722, 556, 573, 531, 365, 583, 556, 669, 458, 559, 559, 438, 583, 688, 552, 556, 542, 556, 500, 458, 500, 823, 500, 573, 521, 802, 823, 625, 719, 521, 510, 750, 542, 556, 556, 556, 365, 510, 500, 222, 278, 222, 906, 812, 556, 438, 559, 500, 552, 778, 556, 489, 411, 944, 722, 944, 722, 944, 722, 667, 500, 333, 333, 556, 1000, 1000, 552, 222, 222, 222, 222, 333, 333, 333, 556, 556, 350, 1000, 1000, 188, 354, 333, 333, 500, 333, 167, 365, 556, 556, 1094, 556, 885, 323, 1073, 1000, 768, 600, 834, 834, 834, 834, 1000, 500, 1000, 500, 1000, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 719, 274, 549, 549, 583, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 500, 500, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 294, 294, 324, 324, 316, 328, 398, 285]; -exports.LiberationSansRegularWidths = LiberationSansRegularWidths; -const LiberationSansRegularMapping = [-1, -1, -1, 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, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]; -exports.LiberationSansRegularMapping = LiberationSansRegularMapping; - -/***/ }), -/* 16 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.MyriadProRegularMetrics = exports.MyriadProRegularFactors = exports.MyriadProItalicMetrics = exports.MyriadProItalicFactors = exports.MyriadProBoldMetrics = exports.MyriadProBoldItalicMetrics = exports.MyriadProBoldItalicFactors = exports.MyriadProBoldFactors = void 0; -const MyriadProBoldFactors = [1.36898, 1, 1, 0.72706, 0.80479, 0.83734, 0.98894, 0.99793, 0.9897, 0.93884, 0.86209, 0.94292, 0.94292, 1.16661, 1.02058, 0.93582, 0.96694, 0.93582, 1.19137, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.78076, 0.78076, 1.02058, 1.02058, 1.02058, 0.72851, 0.78966, 0.90838, 0.83637, 0.82391, 0.96376, 0.80061, 0.86275, 0.8768, 0.95407, 1.0258, 0.73901, 0.85022, 0.83655, 1.0156, 0.95546, 0.92179, 0.87107, 0.92179, 0.82114, 0.8096, 0.89713, 0.94438, 0.95353, 0.94083, 0.91905, 0.90406, 0.9446, 0.94292, 1.18777, 0.94292, 1.02058, 0.89903, 0.90088, 0.94938, 0.97898, 0.81093, 0.97571, 0.94938, 1.024, 0.9577, 0.95933, 0.98621, 1.0474, 0.97455, 0.98981, 0.9672, 0.95933, 0.9446, 0.97898, 0.97407, 0.97646, 0.78036, 1.10208, 0.95442, 0.95298, 0.97579, 0.9332, 0.94039, 0.938, 0.80687, 1.01149, 0.80687, 1.02058, 0.80479, 0.99793, 0.99793, 0.99793, 0.99793, 1.01149, 1.00872, 0.90088, 0.91882, 1.0213, 0.8361, 1.02058, 0.62295, 0.54324, 0.89022, 1.08595, 1, 1, 0.90088, 1, 0.97455, 0.93582, 0.90088, 1, 1.05686, 0.8361, 0.99642, 0.99642, 0.99642, 0.72851, 0.90838, 0.90838, 0.90838, 0.90838, 0.90838, 0.90838, 0.868, 0.82391, 0.80061, 0.80061, 0.80061, 0.80061, 1.0258, 1.0258, 1.0258, 1.0258, 0.97484, 0.95546, 0.92179, 0.92179, 0.92179, 0.92179, 0.92179, 1.02058, 0.92179, 0.94438, 0.94438, 0.94438, 0.94438, 0.90406, 0.86958, 0.98225, 0.94938, 0.94938, 0.94938, 0.94938, 0.94938, 0.94938, 0.9031, 0.81093, 0.94938, 0.94938, 0.94938, 0.94938, 0.98621, 0.98621, 0.98621, 0.98621, 0.93969, 0.95933, 0.9446, 0.9446, 0.9446, 0.9446, 0.9446, 1.08595, 0.9446, 0.95442, 0.95442, 0.95442, 0.95442, 0.94039, 0.97898, 0.94039, 0.90838, 0.94938, 0.90838, 0.94938, 0.90838, 0.94938, 0.82391, 0.81093, 0.82391, 0.81093, 0.82391, 0.81093, 0.82391, 0.81093, 0.96376, 0.84313, 0.97484, 0.97571, 0.80061, 0.94938, 0.80061, 0.94938, 0.80061, 0.94938, 0.80061, 0.94938, 0.80061, 0.94938, 0.8768, 0.9577, 0.8768, 0.9577, 0.8768, 0.9577, 1, 1, 0.95407, 0.95933, 0.97069, 0.95933, 1.0258, 0.98621, 1.0258, 0.98621, 1.0258, 0.98621, 1.0258, 0.98621, 1.0258, 0.98621, 0.887, 1.01591, 0.73901, 1.0474, 1, 1, 0.97455, 0.83655, 0.98981, 1, 1, 0.83655, 0.73977, 0.83655, 0.73903, 0.84638, 1.033, 0.95546, 0.95933, 1, 1, 0.95546, 0.95933, 0.8271, 0.95417, 0.95933, 0.92179, 0.9446, 0.92179, 0.9446, 0.92179, 0.9446, 0.936, 0.91964, 0.82114, 0.97646, 1, 1, 0.82114, 0.97646, 0.8096, 0.78036, 0.8096, 0.78036, 1, 1, 0.8096, 0.78036, 1, 1, 0.89713, 0.77452, 0.89713, 1.10208, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94083, 0.97579, 0.90406, 0.94039, 0.90406, 0.9446, 0.938, 0.9446, 0.938, 0.9446, 0.938, 1, 0.99793, 0.90838, 0.94938, 0.868, 0.9031, 0.92179, 0.9446, 1, 1, 0.89713, 1.10208, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90989, 0.9358, 0.91945, 0.83181, 0.75261, 0.87992, 0.82976, 0.96034, 0.83689, 0.97268, 1.0078, 0.90838, 0.83637, 0.8019, 0.90157, 0.80061, 0.9446, 0.95407, 0.92436, 1.0258, 0.85022, 0.97153, 1.0156, 0.95546, 0.89192, 0.92179, 0.92361, 0.87107, 0.96318, 0.89713, 0.93704, 0.95638, 0.91905, 0.91709, 0.92796, 1.0258, 0.93704, 0.94836, 1.0373, 0.95933, 1.0078, 0.95871, 0.94836, 0.96174, 0.92601, 0.9498, 0.98607, 0.95776, 0.95933, 1.05453, 1.0078, 0.98275, 0.9314, 0.95617, 0.91701, 1.05993, 0.9446, 0.78367, 0.9553, 1, 0.86832, 1.0128, 0.95871, 0.99394, 0.87548, 0.96361, 0.86774, 1.0078, 0.95871, 0.9446, 0.95871, 0.86774, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.94083, 0.97579, 0.94083, 0.97579, 0.94083, 0.97579, 0.90406, 0.94039, 0.96694, 1, 0.89903, 1, 1, 1, 0.93582, 0.93582, 0.93582, 1, 0.908, 0.908, 0.918, 0.94219, 0.94219, 0.96544, 1, 1.285, 1, 1, 0.81079, 0.81079, 1, 1, 0.74854, 1, 1, 1, 1, 0.99793, 1, 1, 1, 0.65, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.17173, 1, 0.80535, 0.76169, 1.02058, 1.0732, 1.05486, 1, 1, 1.30692, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.16161, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.MyriadProBoldFactors = MyriadProBoldFactors; -const MyriadProBoldMetrics = { - lineHeight: 1.2, - lineGap: 0.2 -}; -exports.MyriadProBoldMetrics = MyriadProBoldMetrics; -const MyriadProBoldItalicFactors = [1.36898, 1, 1, 0.66227, 0.80779, 0.81625, 0.97276, 0.97276, 0.97733, 0.92222, 0.83266, 0.94292, 0.94292, 1.16148, 1.02058, 0.93582, 0.96694, 0.93582, 1.17337, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.78076, 0.78076, 1.02058, 1.02058, 1.02058, 0.71541, 0.76813, 0.85576, 0.80591, 0.80729, 0.94299, 0.77512, 0.83655, 0.86523, 0.92222, 0.98621, 0.71743, 0.81698, 0.79726, 0.98558, 0.92222, 0.90637, 0.83809, 0.90637, 0.80729, 0.76463, 0.86275, 0.90699, 0.91605, 0.9154, 0.85308, 0.85458, 0.90531, 0.94292, 1.21296, 0.94292, 1.02058, 0.89903, 1.18616, 0.99613, 0.91677, 0.78216, 0.91677, 0.90083, 0.98796, 0.9135, 0.92168, 0.95381, 0.98981, 0.95298, 0.95381, 0.93459, 0.92168, 0.91513, 0.92004, 0.91677, 0.95077, 0.748, 1.04502, 0.91677, 0.92061, 0.94236, 0.89544, 0.89364, 0.9, 0.80687, 0.8578, 0.80687, 1.02058, 0.80779, 0.97276, 0.97276, 0.97276, 0.97276, 0.8578, 0.99973, 1.18616, 0.91339, 1.08074, 0.82891, 1.02058, 0.55509, 0.71526, 0.89022, 1.08595, 1, 1, 1.18616, 1, 0.96736, 0.93582, 1.18616, 1, 1.04864, 0.82711, 0.99043, 0.99043, 0.99043, 0.71541, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, 0.845, 0.80729, 0.77512, 0.77512, 0.77512, 0.77512, 0.98621, 0.98621, 0.98621, 0.98621, 0.95961, 0.92222, 0.90637, 0.90637, 0.90637, 0.90637, 0.90637, 1.02058, 0.90251, 0.90699, 0.90699, 0.90699, 0.90699, 0.85458, 0.83659, 0.94951, 0.99613, 0.99613, 0.99613, 0.99613, 0.99613, 0.99613, 0.85811, 0.78216, 0.90083, 0.90083, 0.90083, 0.90083, 0.95381, 0.95381, 0.95381, 0.95381, 0.9135, 0.92168, 0.91513, 0.91513, 0.91513, 0.91513, 0.91513, 1.08595, 0.91677, 0.91677, 0.91677, 0.91677, 0.91677, 0.89364, 0.92332, 0.89364, 0.85576, 0.99613, 0.85576, 0.99613, 0.85576, 0.99613, 0.80729, 0.78216, 0.80729, 0.78216, 0.80729, 0.78216, 0.80729, 0.78216, 0.94299, 0.76783, 0.95961, 0.91677, 0.77512, 0.90083, 0.77512, 0.90083, 0.77512, 0.90083, 0.77512, 0.90083, 0.77512, 0.90083, 0.86523, 0.9135, 0.86523, 0.9135, 0.86523, 0.9135, 1, 1, 0.92222, 0.92168, 0.92222, 0.92168, 0.98621, 0.95381, 0.98621, 0.95381, 0.98621, 0.95381, 0.98621, 0.95381, 0.98621, 0.95381, 0.86036, 0.97096, 0.71743, 0.98981, 1, 1, 0.95298, 0.79726, 0.95381, 1, 1, 0.79726, 0.6894, 0.79726, 0.74321, 0.81691, 1.0006, 0.92222, 0.92168, 1, 1, 0.92222, 0.92168, 0.79464, 0.92098, 0.92168, 0.90637, 0.91513, 0.90637, 0.91513, 0.90637, 0.91513, 0.909, 0.87514, 0.80729, 0.95077, 1, 1, 0.80729, 0.95077, 0.76463, 0.748, 0.76463, 0.748, 1, 1, 0.76463, 0.748, 1, 1, 0.86275, 0.72651, 0.86275, 1.04502, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.9154, 0.94236, 0.85458, 0.89364, 0.85458, 0.90531, 0.9, 0.90531, 0.9, 0.90531, 0.9, 1, 0.97276, 0.85576, 0.99613, 0.845, 0.85811, 0.90251, 0.91677, 1, 1, 0.86275, 1.04502, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.00899, 1.30628, 0.85576, 0.80178, 0.66862, 0.7927, 0.69323, 0.88127, 0.72459, 0.89711, 0.95381, 0.85576, 0.80591, 0.7805, 0.94729, 0.77512, 0.90531, 0.92222, 0.90637, 0.98621, 0.81698, 0.92655, 0.98558, 0.92222, 0.85359, 0.90637, 0.90976, 0.83809, 0.94523, 0.86275, 0.83509, 0.93157, 0.85308, 0.83392, 0.92346, 0.98621, 0.83509, 0.92886, 0.91324, 0.92168, 0.95381, 0.90646, 0.92886, 0.90557, 0.86847, 0.90276, 0.91324, 0.86842, 0.92168, 0.99531, 0.95381, 0.9224, 0.85408, 0.92699, 0.86847, 1.0051, 0.91513, 0.80487, 0.93481, 1, 0.88159, 1.05214, 0.90646, 0.97355, 0.81539, 0.89398, 0.85923, 0.95381, 0.90646, 0.91513, 0.90646, 0.85923, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.9154, 0.94236, 0.9154, 0.94236, 0.9154, 0.94236, 0.85458, 0.89364, 0.96694, 1, 0.89903, 1, 1, 1, 0.91782, 0.91782, 0.91782, 1, 0.896, 0.896, 0.896, 0.9332, 0.9332, 0.95973, 1, 1.26, 1, 1, 0.80479, 0.80178, 1, 1, 0.85633, 1, 1, 1, 1, 0.97276, 1, 1, 1, 0.698, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.14542, 1, 0.79199, 0.78694, 1.02058, 1.03493, 1.05486, 1, 1, 1.23026, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.20006, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.MyriadProBoldItalicFactors = MyriadProBoldItalicFactors; -const MyriadProBoldItalicMetrics = { - lineHeight: 1.2, - lineGap: 0.2 -}; -exports.MyriadProBoldItalicMetrics = MyriadProBoldItalicMetrics; -const MyriadProItalicFactors = [1.36898, 1, 1, 0.65507, 0.84943, 0.85639, 0.88465, 0.88465, 0.86936, 0.88307, 0.86948, 0.85283, 0.85283, 1.06383, 1.02058, 0.75945, 0.9219, 0.75945, 1.17337, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.75945, 0.75945, 1.02058, 1.02058, 1.02058, 0.69046, 0.70926, 0.85158, 0.77812, 0.76852, 0.89591, 0.70466, 0.76125, 0.80094, 0.86822, 0.83864, 0.728, 0.77212, 0.79475, 0.93637, 0.87514, 0.8588, 0.76013, 0.8588, 0.72421, 0.69866, 0.77598, 0.85991, 0.80811, 0.87832, 0.78112, 0.77512, 0.8562, 1.0222, 1.18417, 1.0222, 1.27014, 0.89903, 1.15012, 0.93859, 0.94399, 0.846, 0.94399, 0.81453, 1.0186, 0.94219, 0.96017, 1.03075, 1.02175, 0.912, 1.03075, 0.96998, 0.96017, 0.93859, 0.94399, 0.94399, 0.95493, 0.746, 1.12658, 0.94578, 0.91, 0.979, 0.882, 0.882, 0.83, 0.85034, 0.83537, 0.85034, 1.02058, 0.70869, 0.88465, 0.88465, 0.88465, 0.88465, 0.83537, 0.90083, 1.15012, 0.9161, 0.94565, 0.73541, 1.02058, 0.53609, 0.69353, 0.79519, 1.08595, 1, 1, 1.15012, 1, 0.91974, 0.75945, 1.15012, 1, 0.9446, 0.73361, 0.9005, 0.9005, 0.9005, 0.62864, 0.85158, 0.85158, 0.85158, 0.85158, 0.85158, 0.85158, 0.773, 0.76852, 0.70466, 0.70466, 0.70466, 0.70466, 0.83864, 0.83864, 0.83864, 0.83864, 0.90561, 0.87514, 0.8588, 0.8588, 0.8588, 0.8588, 0.8588, 1.02058, 0.85751, 0.85991, 0.85991, 0.85991, 0.85991, 0.77512, 0.76013, 0.88075, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 0.8075, 0.846, 0.81453, 0.81453, 0.81453, 0.81453, 0.82424, 0.82424, 0.82424, 0.82424, 0.9278, 0.96017, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 1.08595, 0.8562, 0.94578, 0.94578, 0.94578, 0.94578, 0.882, 0.94578, 0.882, 0.85158, 0.93859, 0.85158, 0.93859, 0.85158, 0.93859, 0.76852, 0.846, 0.76852, 0.846, 0.76852, 0.846, 0.76852, 0.846, 0.89591, 0.8544, 0.90561, 0.94399, 0.70466, 0.81453, 0.70466, 0.81453, 0.70466, 0.81453, 0.70466, 0.81453, 0.70466, 0.81453, 0.80094, 0.94219, 0.80094, 0.94219, 0.80094, 0.94219, 1, 1, 0.86822, 0.96017, 0.86822, 0.96017, 0.83864, 0.82424, 0.83864, 0.82424, 0.83864, 0.82424, 0.83864, 1.03075, 0.83864, 0.82424, 0.81402, 1.02738, 0.728, 1.02175, 1, 1, 0.912, 0.79475, 1.03075, 1, 1, 0.79475, 0.83911, 0.79475, 0.66266, 0.80553, 1.06676, 0.87514, 0.96017, 1, 1, 0.87514, 0.96017, 0.86865, 0.87396, 0.96017, 0.8588, 0.93859, 0.8588, 0.93859, 0.8588, 0.93859, 0.867, 0.84759, 0.72421, 0.95493, 1, 1, 0.72421, 0.95493, 0.69866, 0.746, 0.69866, 0.746, 1, 1, 0.69866, 0.746, 1, 1, 0.77598, 0.88417, 0.77598, 1.12658, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.87832, 0.979, 0.77512, 0.882, 0.77512, 0.8562, 0.83, 0.8562, 0.83, 0.8562, 0.83, 1, 0.88465, 0.85158, 0.93859, 0.773, 0.8075, 0.85751, 0.8562, 1, 1, 0.77598, 1.12658, 1.15012, 1.15012, 1.15012, 1.15012, 1.15012, 1.15313, 1.15012, 1.15012, 1.15012, 1.08106, 1.03901, 0.85158, 0.77025, 0.62264, 0.7646, 0.65351, 0.86026, 0.69461, 0.89947, 1.03075, 0.85158, 0.77812, 0.76449, 0.88836, 0.70466, 0.8562, 0.86822, 0.8588, 0.83864, 0.77212, 0.85308, 0.93637, 0.87514, 0.82352, 0.8588, 0.85701, 0.76013, 0.89058, 0.77598, 0.8156, 0.82565, 0.78112, 0.77899, 0.89386, 0.83864, 0.8156, 0.9486, 0.92388, 0.96186, 1.03075, 0.91123, 0.9486, 0.93298, 0.878, 0.93942, 0.92388, 0.84596, 0.96186, 0.95119, 1.03075, 0.922, 0.88787, 0.95829, 0.88, 0.93559, 0.93859, 0.78815, 0.93758, 1, 0.89217, 1.03737, 0.91123, 0.93969, 0.77487, 0.85769, 0.86799, 1.03075, 0.91123, 0.93859, 0.91123, 0.86799, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.87832, 0.979, 0.87832, 0.979, 0.87832, 0.979, 0.77512, 0.882, 0.9219, 1, 0.89903, 1, 1, 1, 0.87321, 0.87321, 0.87321, 1, 1.027, 1.027, 1.027, 0.86847, 0.86847, 0.79121, 1, 1.124, 1, 1, 0.73572, 0.73572, 1, 1, 0.85034, 1, 1, 1, 1, 0.88465, 1, 1, 1, 0.669, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.04828, 1, 0.74948, 0.75187, 1.02058, 0.98391, 1.02119, 1, 1, 1.06233, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05233, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.MyriadProItalicFactors = MyriadProItalicFactors; -const MyriadProItalicMetrics = { - lineHeight: 1.2, - lineGap: 0.2 -}; -exports.MyriadProItalicMetrics = MyriadProItalicMetrics; -const MyriadProRegularFactors = [1.36898, 1, 1, 0.76305, 0.82784, 0.94935, 0.89364, 0.92241, 0.89073, 0.90706, 0.98472, 0.85283, 0.85283, 1.0664, 1.02058, 0.74505, 0.9219, 0.74505, 1.23456, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.74505, 0.74505, 1.02058, 1.02058, 1.02058, 0.73002, 0.72601, 0.91755, 0.8126, 0.80314, 0.92222, 0.73764, 0.79726, 0.83051, 0.90284, 0.86023, 0.74, 0.8126, 0.84869, 0.96518, 0.91115, 0.8858, 0.79761, 0.8858, 0.74498, 0.73914, 0.81363, 0.89591, 0.83659, 0.89633, 0.85608, 0.8111, 0.90531, 1.0222, 1.22736, 1.0222, 1.27014, 0.89903, 0.90088, 0.86667, 1.0231, 0.896, 1.01411, 0.90083, 1.05099, 1.00512, 0.99793, 1.05326, 1.09377, 0.938, 1.06226, 1.00119, 0.99793, 0.98714, 1.0231, 1.01231, 0.98196, 0.792, 1.19137, 0.99074, 0.962, 1.01915, 0.926, 0.942, 0.856, 0.85034, 0.92006, 0.85034, 1.02058, 0.69067, 0.92241, 0.92241, 0.92241, 0.92241, 0.92006, 0.9332, 0.90088, 0.91882, 0.93484, 0.75339, 1.02058, 0.56866, 0.54324, 0.79519, 1.08595, 1, 1, 0.90088, 1, 0.95325, 0.74505, 0.90088, 1, 0.97198, 0.75339, 0.91009, 0.91009, 0.91009, 0.66466, 0.91755, 0.91755, 0.91755, 0.91755, 0.91755, 0.91755, 0.788, 0.80314, 0.73764, 0.73764, 0.73764, 0.73764, 0.86023, 0.86023, 0.86023, 0.86023, 0.92915, 0.91115, 0.8858, 0.8858, 0.8858, 0.8858, 0.8858, 1.02058, 0.8858, 0.89591, 0.89591, 0.89591, 0.89591, 0.8111, 0.79611, 0.89713, 0.86667, 0.86667, 0.86667, 0.86667, 0.86667, 0.86667, 0.86936, 0.896, 0.90083, 0.90083, 0.90083, 0.90083, 0.84224, 0.84224, 0.84224, 0.84224, 0.97276, 0.99793, 0.98714, 0.98714, 0.98714, 0.98714, 0.98714, 1.08595, 0.89876, 0.99074, 0.99074, 0.99074, 0.99074, 0.942, 1.0231, 0.942, 0.91755, 0.86667, 0.91755, 0.86667, 0.91755, 0.86667, 0.80314, 0.896, 0.80314, 0.896, 0.80314, 0.896, 0.80314, 0.896, 0.92222, 0.93372, 0.92915, 1.01411, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.83051, 1.00512, 0.83051, 1.00512, 0.83051, 1.00512, 1, 1, 0.90284, 0.99793, 0.90976, 0.99793, 0.86023, 0.84224, 0.86023, 0.84224, 0.86023, 0.84224, 0.86023, 1.05326, 0.86023, 0.84224, 0.82873, 1.07469, 0.74, 1.09377, 1, 1, 0.938, 0.84869, 1.06226, 1, 1, 0.84869, 0.83704, 0.84869, 0.81441, 0.85588, 1.08927, 0.91115, 0.99793, 1, 1, 0.91115, 0.99793, 0.91887, 0.90991, 0.99793, 0.8858, 0.98714, 0.8858, 0.98714, 0.8858, 0.98714, 0.894, 0.91434, 0.74498, 0.98196, 1, 1, 0.74498, 0.98196, 0.73914, 0.792, 0.73914, 0.792, 1, 1, 0.73914, 0.792, 1, 1, 0.81363, 0.904, 0.81363, 1.19137, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89633, 1.01915, 0.8111, 0.942, 0.8111, 0.90531, 0.856, 0.90531, 0.856, 0.90531, 0.856, 1, 0.92241, 0.91755, 0.86667, 0.788, 0.86936, 0.8858, 0.89876, 1, 1, 0.81363, 1.19137, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90388, 1.03901, 0.92138, 0.78105, 0.7154, 0.86169, 0.80513, 0.94007, 0.82528, 0.98612, 1.06226, 0.91755, 0.8126, 0.81884, 0.92819, 0.73764, 0.90531, 0.90284, 0.8858, 0.86023, 0.8126, 0.91172, 0.96518, 0.91115, 0.83089, 0.8858, 0.87791, 0.79761, 0.89297, 0.81363, 0.88157, 0.89992, 0.85608, 0.81992, 0.94307, 0.86023, 0.88157, 0.95308, 0.98699, 0.99793, 1.06226, 0.95817, 0.95308, 0.97358, 0.928, 0.98088, 0.98699, 0.92761, 0.99793, 0.96017, 1.06226, 0.986, 0.944, 0.95978, 0.938, 0.96705, 0.98714, 0.80442, 0.98972, 1, 0.89762, 1.04552, 0.95817, 0.99007, 0.87064, 0.91879, 0.88888, 1.06226, 0.95817, 0.98714, 0.95817, 0.88888, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.89633, 1.01915, 0.89633, 1.01915, 0.89633, 1.01915, 0.8111, 0.942, 0.9219, 1, 0.89903, 1, 1, 1, 0.93173, 0.93173, 0.93173, 1, 1.06304, 1.06304, 1.06904, 0.89903, 0.89903, 0.80549, 1, 1.156, 1, 1, 0.76575, 0.76575, 1, 1, 0.72458, 1, 1, 1, 1, 0.92241, 1, 1, 1, 0.619, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.07257, 1, 0.74705, 0.71119, 1.02058, 1.024, 1.02119, 1, 1, 1.1536, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05638, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.MyriadProRegularFactors = MyriadProRegularFactors; -const MyriadProRegularMetrics = { - lineHeight: 1.2, - lineGap: 0.2 -}; -exports.MyriadProRegularMetrics = MyriadProRegularMetrics; - -/***/ }), -/* 17 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.SegoeuiRegularMetrics = exports.SegoeuiRegularFactors = exports.SegoeuiItalicMetrics = exports.SegoeuiItalicFactors = exports.SegoeuiBoldMetrics = exports.SegoeuiBoldItalicMetrics = exports.SegoeuiBoldItalicFactors = exports.SegoeuiBoldFactors = void 0; -const SegoeuiBoldFactors = [1.76738, 1, 1, 0.99297, 0.9824, 1.04016, 1.06497, 1.03424, 0.97529, 1.17647, 1.23203, 1.1085, 1.1085, 1.16939, 1.2107, 0.9754, 1.21408, 0.9754, 1.59578, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 0.81378, 0.81378, 1.2107, 1.2107, 1.2107, 0.71703, 0.97847, 0.97363, 0.88776, 0.8641, 1.02096, 0.79795, 0.85132, 0.914, 1.06085, 1.1406, 0.8007, 0.89858, 0.83693, 1.14889, 1.09398, 0.97489, 0.92094, 0.97489, 0.90399, 0.84041, 0.95923, 1.00135, 1, 1.06467, 0.98243, 0.90996, 0.99361, 1.1085, 1.56942, 1.1085, 1.2107, 0.74627, 0.94282, 0.96752, 1.01519, 0.86304, 1.01359, 0.97278, 1.15103, 1.01359, 0.98561, 1.02285, 1.02285, 1.00527, 1.02285, 1.0302, 0.99041, 1.0008, 1.01519, 1.01359, 1.02258, 0.79104, 1.16862, 0.99041, 0.97454, 1.02511, 0.99298, 0.96752, 0.95801, 0.94856, 1.16579, 0.94856, 1.2107, 0.9824, 1.03424, 1.03424, 1, 1.03424, 1.16579, 0.8727, 1.3871, 1.18622, 1.10818, 1.04478, 1.2107, 1.18622, 0.75155, 0.94994, 1.28826, 1.21408, 1.21408, 0.91056, 1, 0.91572, 0.9754, 0.64663, 1.18328, 1.24866, 1.04478, 1.14169, 1.15749, 1.17389, 0.71703, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.93506, 0.8641, 0.79795, 0.79795, 0.79795, 0.79795, 1.1406, 1.1406, 1.1406, 1.1406, 1.02096, 1.09398, 0.97426, 0.97426, 0.97426, 0.97426, 0.97426, 1.2107, 0.97489, 1.00135, 1.00135, 1.00135, 1.00135, 0.90996, 0.92094, 1.02798, 0.96752, 0.96752, 0.96752, 0.96752, 0.96752, 0.96752, 0.93136, 0.86304, 0.97278, 0.97278, 0.97278, 0.97278, 1.02285, 1.02285, 1.02285, 1.02285, 0.97122, 0.99041, 1, 1, 1, 1, 1, 1.28826, 1.0008, 0.99041, 0.99041, 0.99041, 0.99041, 0.96752, 1.01519, 0.96752, 0.97363, 0.96752, 0.97363, 0.96752, 0.97363, 0.96752, 0.8641, 0.86304, 0.8641, 0.86304, 0.8641, 0.86304, 0.8641, 0.86304, 1.02096, 1.03057, 1.02096, 1.03517, 0.79795, 0.97278, 0.79795, 0.97278, 0.79795, 0.97278, 0.79795, 0.97278, 0.79795, 0.97278, 0.914, 1.01359, 0.914, 1.01359, 0.914, 1.01359, 1, 1, 1.06085, 0.98561, 1.06085, 1.00879, 1.1406, 1.02285, 1.1406, 1.02285, 1.1406, 1.02285, 1.1406, 1.02285, 1.1406, 1.02285, 0.97138, 1.08692, 0.8007, 1.02285, 1, 1, 1.00527, 0.83693, 1.02285, 1, 1, 0.83693, 0.9455, 0.83693, 0.90418, 0.83693, 1.13005, 1.09398, 0.99041, 1, 1, 1.09398, 0.99041, 0.96692, 1.09251, 0.99041, 0.97489, 1.0008, 0.97489, 1.0008, 0.97489, 1.0008, 0.93994, 0.97931, 0.90399, 1.02258, 1, 1, 0.90399, 1.02258, 0.84041, 0.79104, 0.84041, 0.79104, 0.84041, 0.79104, 0.84041, 0.79104, 1, 1, 0.95923, 1.07034, 0.95923, 1.16862, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.06467, 1.02511, 0.90996, 0.96752, 0.90996, 0.99361, 0.95801, 0.99361, 0.95801, 0.99361, 0.95801, 1.07733, 1.03424, 0.97363, 0.96752, 0.93506, 0.93136, 0.97489, 1.0008, 1, 1, 0.95923, 1.16862, 1.15103, 1.15103, 1.01173, 1.03959, 0.75953, 0.81378, 0.79912, 1.15103, 1.21994, 0.95161, 0.87815, 1.01149, 0.81525, 0.7676, 0.98167, 1.01134, 1.02546, 0.84097, 1.03089, 1.18102, 0.97363, 0.88776, 0.85134, 0.97826, 0.79795, 0.99361, 1.06085, 0.97489, 1.1406, 0.89858, 1.0388, 1.14889, 1.09398, 0.86039, 0.97489, 1.0595, 0.92094, 0.94793, 0.95923, 0.90996, 0.99346, 0.98243, 1.02112, 0.95493, 1.1406, 0.90996, 1.03574, 1.02597, 1.0008, 1.18102, 1.06628, 1.03574, 1.0192, 1.01932, 1.00886, 0.97531, 1.0106, 1.0008, 1.13189, 1.18102, 1.02277, 0.98683, 1.0016, 0.99561, 1.07237, 1.0008, 0.90434, 0.99921, 0.93803, 0.8965, 1.23085, 1.06628, 1.04983, 0.96268, 1.0499, 0.98439, 1.18102, 1.06628, 1.0008, 1.06628, 0.98439, 0.79795, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.09466, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.97278, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.02065, 1, 1, 1, 1, 1, 1, 1.06467, 1.02511, 1.06467, 1.02511, 1.06467, 1.02511, 0.90996, 0.96752, 1, 1.21408, 0.89903, 1, 1, 0.75155, 1.04394, 1.04394, 1.04394, 1.04394, 0.98633, 0.98633, 0.98633, 0.73047, 0.73047, 1.20642, 0.91211, 1.25635, 1.222, 1.02956, 1.03372, 1.03372, 0.96039, 1.24633, 1, 1.12454, 0.93503, 1.03424, 1.19687, 1.03424, 1, 1, 1, 0.771, 1, 1, 1.15749, 1.15749, 1.15749, 1.10948, 0.86279, 0.94434, 0.86279, 0.94434, 0.86182, 1, 1, 1.16897, 1, 0.96085, 0.90137, 1.2107, 1.18416, 1.13973, 0.69825, 0.9716, 2.10339, 1.29004, 1.29004, 1.21172, 1.29004, 1.29004, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.18874, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.09193, 1.09193, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.SegoeuiBoldFactors = SegoeuiBoldFactors; -const SegoeuiBoldMetrics = { - lineHeight: 1.33008, - lineGap: 0 -}; -exports.SegoeuiBoldMetrics = SegoeuiBoldMetrics; -const SegoeuiBoldItalicFactors = [1.76738, 1, 1, 0.98946, 1.03959, 1.04016, 1.02809, 1.036, 0.97639, 1.10953, 1.23203, 1.11144, 1.11144, 1.16939, 1.21237, 0.9754, 1.21261, 0.9754, 1.59754, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 0.81378, 0.81378, 1.21237, 1.21237, 1.21237, 0.73541, 0.97847, 0.97363, 0.89723, 0.87897, 1.0426, 0.79429, 0.85292, 0.91149, 1.05815, 1.1406, 0.79631, 0.90128, 0.83853, 1.04396, 1.10615, 0.97552, 0.94436, 0.97552, 0.88641, 0.80527, 0.96083, 1.00135, 1, 1.06777, 0.9817, 0.91142, 0.99361, 1.11144, 1.57293, 1.11144, 1.21237, 0.74627, 1.31818, 1.06585, 0.97042, 0.83055, 0.97042, 0.93503, 1.1261, 0.97042, 0.97922, 1.14236, 0.94552, 1.01054, 1.14236, 1.02471, 0.97922, 0.94165, 0.97042, 0.97042, 1.0276, 0.78929, 1.1261, 0.97922, 0.95874, 1.02197, 0.98507, 0.96752, 0.97168, 0.95107, 1.16579, 0.95107, 1.21237, 1.03959, 1.036, 1.036, 1, 1.036, 1.16579, 0.87357, 1.31818, 1.18754, 1.26781, 1.05356, 1.21237, 1.18622, 0.79487, 0.94994, 1.29004, 1.24047, 1.24047, 1.31818, 1, 0.91484, 0.9754, 1.31818, 1.1349, 1.24866, 1.05356, 1.13934, 1.15574, 1.17389, 0.73541, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.94385, 0.87897, 0.79429, 0.79429, 0.79429, 0.79429, 1.1406, 1.1406, 1.1406, 1.1406, 1.0426, 1.10615, 0.97552, 0.97552, 0.97552, 0.97552, 0.97552, 1.21237, 0.97552, 1.00135, 1.00135, 1.00135, 1.00135, 0.91142, 0.94436, 0.98721, 1.06585, 1.06585, 1.06585, 1.06585, 1.06585, 1.06585, 0.96705, 0.83055, 0.93503, 0.93503, 0.93503, 0.93503, 1.14236, 1.14236, 1.14236, 1.14236, 0.93125, 0.97922, 0.94165, 0.94165, 0.94165, 0.94165, 0.94165, 1.29004, 0.94165, 0.97922, 0.97922, 0.97922, 0.97922, 0.96752, 0.97042, 0.96752, 0.97363, 1.06585, 0.97363, 1.06585, 0.97363, 1.06585, 0.87897, 0.83055, 0.87897, 0.83055, 0.87897, 0.83055, 0.87897, 0.83055, 1.0426, 1.0033, 1.0426, 0.97042, 0.79429, 0.93503, 0.79429, 0.93503, 0.79429, 0.93503, 0.79429, 0.93503, 0.79429, 0.93503, 0.91149, 0.97042, 0.91149, 0.97042, 0.91149, 0.97042, 1, 1, 1.05815, 0.97922, 1.05815, 0.97922, 1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 0.97441, 1.04302, 0.79631, 1.01582, 1, 1, 1.01054, 0.83853, 1.14236, 1, 1, 0.83853, 1.09125, 0.83853, 0.90418, 0.83853, 1.19508, 1.10615, 0.97922, 1, 1, 1.10615, 0.97922, 1.01034, 1.10466, 0.97922, 0.97552, 0.94165, 0.97552, 0.94165, 0.97552, 0.94165, 0.91602, 0.91981, 0.88641, 1.0276, 1, 1, 0.88641, 1.0276, 0.80527, 0.78929, 0.80527, 0.78929, 0.80527, 0.78929, 0.80527, 0.78929, 1, 1, 0.96083, 1.05403, 0.95923, 1.16862, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.06777, 1.02197, 0.91142, 0.96752, 0.91142, 0.99361, 0.97168, 0.99361, 0.97168, 0.99361, 0.97168, 1.23199, 1.036, 0.97363, 1.06585, 0.94385, 0.96705, 0.97552, 0.94165, 1, 1, 0.96083, 1.1261, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 0.95161, 1.27126, 1.00811, 0.83284, 0.77702, 0.99137, 0.95253, 1.0347, 0.86142, 1.07205, 1.14236, 0.97363, 0.89723, 0.86869, 1.09818, 0.79429, 0.99361, 1.05815, 0.97552, 1.1406, 0.90128, 1.06662, 1.04396, 1.10615, 0.84918, 0.97552, 1.04694, 0.94436, 0.98015, 0.96083, 0.91142, 1.00356, 0.9817, 1.01945, 0.98999, 1.1406, 0.91142, 1.04961, 0.9898, 1.00639, 1.14236, 1.07514, 1.04961, 0.99607, 1.02897, 1.008, 0.9898, 0.95134, 1.00639, 1.11121, 1.14236, 1.00518, 0.97981, 1.02186, 1, 1.08578, 0.94165, 0.99314, 0.98387, 0.93028, 0.93377, 1.35125, 1.07514, 1.10687, 0.93491, 1.04232, 1.00351, 1.14236, 1.07514, 0.94165, 1.07514, 1.00351, 0.79429, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.09097, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.93503, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.96609, 1, 1, 1, 1, 1, 1, 1.06777, 1.02197, 1.06777, 1.02197, 1.06777, 1.02197, 0.91142, 0.96752, 1, 1.21261, 0.89903, 1, 1, 0.75155, 1.04745, 1.04745, 1.04745, 1.04394, 0.98633, 0.98633, 0.98633, 0.72959, 0.72959, 1.20502, 0.91406, 1.26514, 1.222, 1.02956, 1.03372, 1.03372, 0.96039, 1.24633, 1, 1.09125, 0.93327, 1.03336, 1.16541, 1.036, 1, 1, 1, 0.771, 1, 1, 1.15574, 1.15574, 1.15574, 1.15574, 0.86364, 0.94434, 0.86279, 0.94434, 0.86224, 1, 1, 1.16798, 1, 0.96085, 0.90068, 1.21237, 1.18416, 1.13904, 0.69825, 0.9716, 2.10339, 1.29004, 1.29004, 1.21339, 1.29004, 1.29004, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.18775, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.13269, 1.13269, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.SegoeuiBoldItalicFactors = SegoeuiBoldItalicFactors; -const SegoeuiBoldItalicMetrics = { - lineHeight: 1.33008, - lineGap: 0 -}; -exports.SegoeuiBoldItalicMetrics = SegoeuiBoldItalicMetrics; -const SegoeuiItalicFactors = [1.76738, 1, 1, 0.98946, 1.14763, 1.05365, 1.06234, 0.96927, 0.92586, 1.15373, 1.18414, 0.91349, 0.91349, 1.07403, 1.17308, 0.78383, 1.20088, 0.78383, 1.42531, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.78383, 0.78383, 1.17308, 1.17308, 1.17308, 0.77349, 0.94565, 0.94729, 0.85944, 0.88506, 0.9858, 0.74817, 0.80016, 0.88449, 0.98039, 0.95782, 0.69238, 0.89898, 0.83231, 0.98183, 1.03989, 0.96924, 0.86237, 0.96924, 0.80595, 0.74524, 0.86091, 0.95402, 0.94143, 0.98448, 0.8858, 0.83089, 0.93285, 1.0949, 1.39016, 1.0949, 1.45994, 0.74627, 1.04839, 0.97454, 0.97454, 0.87207, 0.97454, 0.87533, 1.06151, 0.97454, 1.00176, 1.16484, 1.08132, 0.98047, 1.16484, 1.02989, 1.01054, 0.96225, 0.97454, 0.97454, 1.06598, 0.79004, 1.16344, 1.00351, 0.94629, 0.9973, 0.91016, 0.96777, 0.9043, 0.91082, 0.92481, 0.91082, 1.17308, 0.95748, 0.96927, 0.96927, 1, 0.96927, 0.92481, 0.80597, 1.04839, 1.23393, 1.1781, 0.9245, 1.17308, 1.20808, 0.63218, 0.94261, 1.24822, 1.09971, 1.09971, 1.04839, 1, 0.85273, 0.78032, 1.04839, 1.09971, 1.22326, 0.9245, 1.09836, 1.13525, 1.15222, 0.70424, 0.94729, 0.94729, 0.94729, 0.94729, 0.94729, 0.94729, 0.85498, 0.88506, 0.74817, 0.74817, 0.74817, 0.74817, 0.95782, 0.95782, 0.95782, 0.95782, 0.9858, 1.03989, 0.96924, 0.96924, 0.96924, 0.96924, 0.96924, 1.17308, 0.96924, 0.95402, 0.95402, 0.95402, 0.95402, 0.83089, 0.86237, 0.88409, 0.97454, 0.97454, 0.97454, 0.97454, 0.97454, 0.97454, 0.92916, 0.87207, 0.87533, 0.87533, 0.87533, 0.87533, 0.93146, 0.93146, 0.93146, 0.93146, 0.93854, 1.01054, 0.96225, 0.96225, 0.96225, 0.96225, 0.96225, 1.24822, 0.8761, 1.00351, 1.00351, 1.00351, 1.00351, 0.96777, 0.97454, 0.96777, 0.94729, 0.97454, 0.94729, 0.97454, 0.94729, 0.97454, 0.88506, 0.87207, 0.88506, 0.87207, 0.88506, 0.87207, 0.88506, 0.87207, 0.9858, 0.95391, 0.9858, 0.97454, 0.74817, 0.87533, 0.74817, 0.87533, 0.74817, 0.87533, 0.74817, 0.87533, 0.74817, 0.87533, 0.88449, 0.97454, 0.88449, 0.97454, 0.88449, 0.97454, 1, 1, 0.98039, 1.00176, 0.98039, 1.00176, 0.95782, 0.93146, 0.95782, 0.93146, 0.95782, 0.93146, 0.95782, 1.16484, 0.95782, 0.93146, 0.84421, 1.12761, 0.69238, 1.08132, 1, 1, 0.98047, 0.83231, 1.16484, 1, 1, 0.84723, 1.04861, 0.84723, 0.78755, 0.83231, 1.23736, 1.03989, 1.01054, 1, 1, 1.03989, 1.01054, 0.9857, 1.03849, 1.01054, 0.96924, 0.96225, 0.96924, 0.96225, 0.96924, 0.96225, 0.92383, 0.90171, 0.80595, 1.06598, 1, 1, 0.80595, 1.06598, 0.74524, 0.79004, 0.74524, 0.79004, 0.74524, 0.79004, 0.74524, 0.79004, 1, 1, 0.86091, 1.02759, 0.85771, 1.16344, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.98448, 0.9973, 0.83089, 0.96777, 0.83089, 0.93285, 0.9043, 0.93285, 0.9043, 0.93285, 0.9043, 1.31868, 0.96927, 0.94729, 0.97454, 0.85498, 0.92916, 0.96924, 0.8761, 1, 1, 0.86091, 1.16344, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 0.81965, 0.81965, 0.94729, 0.78032, 0.71022, 0.90883, 0.84171, 0.99877, 0.77596, 1.05734, 1.2, 0.94729, 0.85944, 0.82791, 0.9607, 0.74817, 0.93285, 0.98039, 0.96924, 0.95782, 0.89898, 0.98316, 0.98183, 1.03989, 0.78614, 0.96924, 0.97642, 0.86237, 0.86075, 0.86091, 0.83089, 0.90082, 0.8858, 0.97296, 1.01284, 0.95782, 0.83089, 1.0976, 1.04, 1.03342, 1.2, 1.0675, 1.0976, 0.98205, 1.03809, 1.05097, 1.04, 0.95364, 1.03342, 1.05401, 1.2, 1.02148, 1.0119, 1.04724, 1.0127, 1.02732, 0.96225, 0.8965, 0.97783, 0.93574, 0.94818, 1.30679, 1.0675, 1.11826, 0.99821, 1.0557, 1.0326, 1.2, 1.0675, 0.96225, 1.0675, 1.0326, 0.74817, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.03754, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.87533, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.98705, 1, 1, 1, 1, 1, 1, 0.98448, 0.9973, 0.98448, 0.9973, 0.98448, 0.9973, 0.83089, 0.96777, 1, 1.20088, 0.89903, 1, 1, 0.75155, 0.94945, 0.94945, 0.94945, 0.94945, 1.12317, 1.12317, 1.12317, 0.67603, 0.67603, 1.15621, 0.73584, 1.21191, 1.22135, 1.06483, 0.94868, 0.94868, 0.95996, 1.24633, 1, 1.07497, 0.87709, 0.96927, 1.01473, 0.96927, 1, 1, 1, 0.77295, 1, 1, 1.09836, 1.09836, 1.09836, 1.01522, 0.86321, 0.94434, 0.8649, 0.94434, 0.86182, 1, 1, 1.083, 1, 0.91578, 0.86438, 1.17308, 1.18416, 1.14589, 0.69825, 0.97622, 1.96791, 1.24822, 1.24822, 1.17308, 1.24822, 1.24822, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.17984, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.10742, 1.10742, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.SegoeuiItalicFactors = SegoeuiItalicFactors; -const SegoeuiItalicMetrics = { - lineHeight: 1.33008, - lineGap: 0 -}; -exports.SegoeuiItalicMetrics = SegoeuiItalicMetrics; -const SegoeuiRegularFactors = [1.76738, 1, 1, 0.98594, 1.02285, 1.10454, 1.06234, 0.96927, 0.92037, 1.19985, 1.2046, 0.90616, 0.90616, 1.07152, 1.1714, 0.78032, 1.20088, 0.78032, 1.40246, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.78032, 0.78032, 1.1714, 1.1714, 1.1714, 0.80597, 0.94084, 0.96706, 0.85944, 0.85734, 0.97093, 0.75842, 0.79936, 0.88198, 0.9831, 0.95782, 0.71387, 0.86969, 0.84636, 1.07796, 1.03584, 0.96924, 0.83968, 0.96924, 0.82826, 0.79649, 0.85771, 0.95132, 0.93119, 0.98965, 0.88433, 0.8287, 0.93365, 1.08612, 1.3638, 1.08612, 1.45786, 0.74627, 0.80499, 0.91484, 1.05707, 0.92383, 1.05882, 0.9403, 1.12654, 1.05882, 1.01756, 1.09011, 1.09011, 0.99414, 1.09011, 1.034, 1.01756, 1.05356, 1.05707, 1.05882, 1.04399, 0.84863, 1.21968, 1.01756, 0.95801, 1.00068, 0.91797, 0.96777, 0.9043, 0.90351, 0.92105, 0.90351, 1.1714, 0.85337, 0.96927, 0.96927, 0.99912, 0.96927, 0.92105, 0.80597, 1.2434, 1.20808, 1.05937, 0.90957, 1.1714, 1.20808, 0.75155, 0.94261, 1.24644, 1.09971, 1.09971, 0.84751, 1, 0.85273, 0.78032, 0.61584, 1.05425, 1.17914, 0.90957, 1.08665, 1.11593, 1.14169, 0.73381, 0.96706, 0.96706, 0.96706, 0.96706, 0.96706, 0.96706, 0.86035, 0.85734, 0.75842, 0.75842, 0.75842, 0.75842, 0.95782, 0.95782, 0.95782, 0.95782, 0.97093, 1.03584, 0.96924, 0.96924, 0.96924, 0.96924, 0.96924, 1.1714, 0.96924, 0.95132, 0.95132, 0.95132, 0.95132, 0.8287, 0.83968, 0.89049, 0.91484, 0.91484, 0.91484, 0.91484, 0.91484, 0.91484, 0.93575, 0.92383, 0.9403, 0.9403, 0.9403, 0.9403, 0.8717, 0.8717, 0.8717, 0.8717, 1.00527, 1.01756, 1.05356, 1.05356, 1.05356, 1.05356, 1.05356, 1.24644, 0.95923, 1.01756, 1.01756, 1.01756, 1.01756, 0.96777, 1.05707, 0.96777, 0.96706, 0.91484, 0.96706, 0.91484, 0.96706, 0.91484, 0.85734, 0.92383, 0.85734, 0.92383, 0.85734, 0.92383, 0.85734, 0.92383, 0.97093, 1.0969, 0.97093, 1.05882, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, 0.88198, 1.05882, 0.88198, 1.05882, 0.88198, 1.05882, 1, 1, 0.9831, 1.01756, 0.9831, 1.01756, 0.95782, 0.8717, 0.95782, 0.8717, 0.95782, 0.8717, 0.95782, 1.09011, 0.95782, 0.8717, 0.84784, 1.11551, 0.71387, 1.09011, 1, 1, 0.99414, 0.84636, 1.09011, 1, 1, 0.84636, 1.0536, 0.84636, 0.94298, 0.84636, 1.23297, 1.03584, 1.01756, 1, 1, 1.03584, 1.01756, 1.00323, 1.03444, 1.01756, 0.96924, 1.05356, 0.96924, 1.05356, 0.96924, 1.05356, 0.93066, 0.98293, 0.82826, 1.04399, 1, 1, 0.82826, 1.04399, 0.79649, 0.84863, 0.79649, 0.84863, 0.79649, 0.84863, 0.79649, 0.84863, 1, 1, 0.85771, 1.17318, 0.85771, 1.21968, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.98965, 1.00068, 0.8287, 0.96777, 0.8287, 0.93365, 0.9043, 0.93365, 0.9043, 0.93365, 0.9043, 1.08571, 0.96927, 0.96706, 0.91484, 0.86035, 0.93575, 0.96924, 0.95923, 1, 1, 0.85771, 1.21968, 1.11437, 1.11437, 0.93109, 0.91202, 0.60411, 0.84164, 0.55572, 1.01173, 0.97361, 0.81818, 0.81818, 0.96635, 0.78032, 0.72727, 0.92366, 0.98601, 1.03405, 0.77968, 1.09799, 1.2, 0.96706, 0.85944, 0.85638, 0.96491, 0.75842, 0.93365, 0.9831, 0.96924, 0.95782, 0.86969, 0.94152, 1.07796, 1.03584, 0.78437, 0.96924, 0.98715, 0.83968, 0.83491, 0.85771, 0.8287, 0.94492, 0.88433, 0.9287, 1.0098, 0.95782, 0.8287, 1.0625, 0.98248, 1.03424, 1.2, 1.01071, 1.0625, 0.95246, 1.03809, 1.04912, 0.98248, 1.00221, 1.03424, 1.05443, 1.2, 1.04785, 0.99609, 1.00169, 1.05176, 0.99346, 1.05356, 0.9087, 1.03004, 0.95542, 0.93117, 1.23362, 1.01071, 1.07831, 1.02512, 1.05205, 1.03502, 1.2, 1.01071, 1.05356, 1.01071, 1.03502, 0.75842, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.03719, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.9403, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.04021, 1, 1, 1, 1, 1, 1, 0.98965, 1.00068, 0.98965, 1.00068, 0.98965, 1.00068, 0.8287, 0.96777, 1, 1.20088, 0.89903, 1, 1, 0.75155, 1.03077, 1.03077, 1.03077, 1.03077, 1.13196, 1.13196, 1.13196, 0.67428, 0.67428, 1.16039, 0.73291, 1.20996, 1.22135, 1.06483, 0.94868, 0.94868, 0.95996, 1.24633, 1, 1.07497, 0.87796, 0.96927, 1.01518, 0.96927, 1, 1, 1, 0.77295, 1, 1, 1.10539, 1.10539, 1.11358, 1.06967, 0.86279, 0.94434, 0.86279, 0.94434, 0.86182, 1, 1, 1.083, 1, 0.91578, 0.86507, 1.1714, 1.18416, 1.14589, 0.69825, 0.97622, 1.9697, 1.24822, 1.24822, 1.17238, 1.24822, 1.24822, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.18083, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.10938, 1.10938, 1, 1, 1, 1.05425, 1.09971, 1.09971, 1.09971, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; -exports.SegoeuiRegularFactors = SegoeuiRegularFactors; -const SegoeuiRegularMetrics = { - lineHeight: 1.33008, - lineGap: 0 -}; -exports.SegoeuiRegularMetrics = SegoeuiRegularMetrics; - -/***/ }), -/* 18 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.SEAC_ANALYSIS_ENABLED = exports.MacStandardGlyphOrdering = exports.FontFlags = void 0; -exports.getFontType = getFontType; -exports.normalizeFontName = normalizeFontName; -exports.recoverGlyphName = recoverGlyphName; -exports.type1FontGlyphMapping = type1FontGlyphMapping; - -var _util = __w_pdfjs_require__(2); - -var _encodings = __w_pdfjs_require__(19); - -var _glyphlist = __w_pdfjs_require__(20); - -var _unicode = __w_pdfjs_require__(21); - -const SEAC_ANALYSIS_ENABLED = true; -exports.SEAC_ANALYSIS_ENABLED = SEAC_ANALYSIS_ENABLED; -const FontFlags = { - FixedPitch: 1, - Serif: 2, - Symbolic: 4, - Script: 8, - Nonsymbolic: 32, - Italic: 64, - AllCap: 65536, - SmallCap: 131072, - ForceBold: 262144 -}; -exports.FontFlags = FontFlags; -const MacStandardGlyphOrdering = [".notdef", ".null", "nonmarkingreturn", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute", "agrave", "acircumflex", "adieresis", "atilde", "aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis", "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute", "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave", "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling", "section", "bullet", "paragraph", "germandbls", "registered", "copyright", "trademark", "acute", "dieresis", "notequal", "AE", "Oslash", "infinity", "plusminus", "lessequal", "greaterequal", "yen", "mu", "partialdiff", "summation", "product", "pi", "integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash", "questiondown", "exclamdown", "logicalnot", "radical", "florin", "approxequal", "Delta", "guillemotleft", "guillemotright", "ellipsis", "nonbreakingspace", "Agrave", "Atilde", "Otilde", "OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide", "lozenge", "ydieresis", "Ydieresis", "fraction", "currency", "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex", "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde", "macron", "breve", "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "Lslash", "lslash", "Scaron", "scaron", "Zcaron", "zcaron", "brokenbar", "Eth", "eth", "Yacute", "yacute", "Thorn", "thorn", "minus", "multiply", "onesuperior", "twosuperior", "threesuperior", "onehalf", "onequarter", "threequarters", "franc", "Gbreve", "gbreve", "Idotaccent", "Scedilla", "scedilla", "Cacute", "cacute", "Ccaron", "ccaron", "dcroat"]; -exports.MacStandardGlyphOrdering = MacStandardGlyphOrdering; - -function getFontType(type, subtype, isStandardFont = false) { - switch (type) { - case "Type1": - if (isStandardFont) { - return _util.FontType.TYPE1STANDARD; - } - - return subtype === "Type1C" ? _util.FontType.TYPE1C : _util.FontType.TYPE1; - - case "CIDFontType0": - return subtype === "CIDFontType0C" ? _util.FontType.CIDFONTTYPE0C : _util.FontType.CIDFONTTYPE0; - - case "OpenType": - return _util.FontType.OPENTYPE; - - case "TrueType": - return _util.FontType.TRUETYPE; - - case "CIDFontType2": - return _util.FontType.CIDFONTTYPE2; - - case "MMType1": - return _util.FontType.MMTYPE1; - - case "Type0": - return _util.FontType.TYPE0; - - default: - return _util.FontType.UNKNOWN; - } -} - -function recoverGlyphName(name, glyphsUnicodeMap) { - if (glyphsUnicodeMap[name] !== undefined) { - return name; - } - - const unicode = (0, _unicode.getUnicodeForGlyph)(name, glyphsUnicodeMap); - - if (unicode !== -1) { - for (const key in glyphsUnicodeMap) { - if (glyphsUnicodeMap[key] === unicode) { - return key; - } - } - } - - (0, _util.info)("Unable to recover a standard glyph name for: " + name); - return name; -} - -function type1FontGlyphMapping(properties, builtInEncoding, glyphNames) { - const charCodeToGlyphId = Object.create(null); - let glyphId, charCode, baseEncoding; - const isSymbolicFont = !!(properties.flags & FontFlags.Symbolic); - - if (properties.isInternalFont) { - baseEncoding = builtInEncoding; - - for (charCode = 0; charCode < baseEncoding.length; charCode++) { - glyphId = glyphNames.indexOf(baseEncoding[charCode]); - - if (glyphId >= 0) { - charCodeToGlyphId[charCode] = glyphId; - } else { - charCodeToGlyphId[charCode] = 0; - } - } - } else if (properties.baseEncodingName) { - baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName); - - for (charCode = 0; charCode < baseEncoding.length; charCode++) { - glyphId = glyphNames.indexOf(baseEncoding[charCode]); - - if (glyphId >= 0) { - charCodeToGlyphId[charCode] = glyphId; - } else { - charCodeToGlyphId[charCode] = 0; - } - } - } else if (isSymbolicFont) { - for (charCode in builtInEncoding) { - charCodeToGlyphId[charCode] = builtInEncoding[charCode]; - } - } else { - baseEncoding = _encodings.StandardEncoding; - - for (charCode = 0; charCode < baseEncoding.length; charCode++) { - glyphId = glyphNames.indexOf(baseEncoding[charCode]); - - if (glyphId >= 0) { - charCodeToGlyphId[charCode] = glyphId; - } else { - charCodeToGlyphId[charCode] = 0; - } - } - } - - const differences = properties.differences; - let glyphsUnicodeMap; - - if (differences) { - for (charCode in differences) { - const glyphName = differences[charCode]; - glyphId = glyphNames.indexOf(glyphName); - - if (glyphId === -1) { - if (!glyphsUnicodeMap) { - glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); - } - - const standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap); - - if (standardGlyphName !== glyphName) { - glyphId = glyphNames.indexOf(standardGlyphName); - } - } - - if (glyphId >= 0) { - charCodeToGlyphId[charCode] = glyphId; - } else { - charCodeToGlyphId[charCode] = 0; - } - } - } - - return charCodeToGlyphId; -} - -function normalizeFontName(name) { - return name.replace(/[,_]/g, "-").replace(/\s/g, ""); -} - -/***/ }), -/* 19 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.ZapfDingbatsEncoding = exports.WinAnsiEncoding = exports.SymbolSetEncoding = exports.StandardEncoding = exports.MacRomanEncoding = exports.ExpertEncoding = void 0; -exports.getEncoding = getEncoding; -const ExpertEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclamsmall", "Hungarumlautsmall", "", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "", "", "", "isuperior", "", "", "lsuperior", "msuperior", "nsuperior", "osuperior", "", "", "rsuperior", "ssuperior", "tsuperior", "", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "exclamdownsmall", "centoldstyle", "Lslashsmall", "", "", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "", "Dotaccentsmall", "", "", "Macronsmall", "", "", "figuredash", "hypheninferior", "", "", "Ogoneksmall", "Ringsmall", "Cedillasmall", "", "", "", "onequarter", "onehalf", "threequarters", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "", "", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall"]; -exports.ExpertEncoding = ExpertEncoding; -const MacExpertEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclamsmall", "Hungarumlautsmall", "centoldstyle", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "", "threequartersemdash", "", "questionsmall", "", "", "", "", "Ethsmall", "", "", "onequarter", "onehalf", "threequarters", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "", "", "", "", "", "", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "", "parenrightinferior", "Circumflexsmall", "hypheninferior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "", "", "asuperior", "centsuperior", "", "", "", "", "Aacutesmall", "Agravesmall", "Acircumflexsmall", "Adieresissmall", "Atildesmall", "Aringsmall", "Ccedillasmall", "Eacutesmall", "Egravesmall", "Ecircumflexsmall", "Edieresissmall", "Iacutesmall", "Igravesmall", "Icircumflexsmall", "Idieresissmall", "Ntildesmall", "Oacutesmall", "Ogravesmall", "Ocircumflexsmall", "Odieresissmall", "Otildesmall", "Uacutesmall", "Ugravesmall", "Ucircumflexsmall", "Udieresissmall", "", "eightsuperior", "fourinferior", "threeinferior", "sixinferior", "eightinferior", "seveninferior", "Scaronsmall", "", "centinferior", "twoinferior", "", "Dieresissmall", "", "Caronsmall", "osuperior", "fiveinferior", "", "commainferior", "periodinferior", "Yacutesmall", "", "dollarinferior", "", "", "Thornsmall", "", "nineinferior", "zeroinferior", "Zcaronsmall", "AEsmall", "Oslashsmall", "questiondownsmall", "oneinferior", "Lslashsmall", "", "", "", "", "", "", "Cedillasmall", "", "", "", "", "", "OEsmall", "figuredash", "hyphensuperior", "", "", "", "", "exclamdownsmall", "", "Ydieresissmall", "", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "ninesuperior", "zerosuperior", "", "esuperior", "rsuperior", "tsuperior", "", "", "isuperior", "ssuperior", "dsuperior", "", "", "", "", "", "lsuperior", "Ogoneksmall", "Brevesmall", "Macronsmall", "bsuperior", "nsuperior", "msuperior", "commasuperior", "periodsuperior", "Dotaccentsmall", "Ringsmall", "", "", "", ""]; -const MacRomanEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "", "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute", "agrave", "acircumflex", "adieresis", "atilde", "aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis", "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute", "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave", "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling", "section", "bullet", "paragraph", "germandbls", "registered", "copyright", "trademark", "acute", "dieresis", "notequal", "AE", "Oslash", "infinity", "plusminus", "lessequal", "greaterequal", "yen", "mu", "partialdiff", "summation", "product", "pi", "integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash", "questiondown", "exclamdown", "logicalnot", "radical", "florin", "approxequal", "Delta", "guillemotleft", "guillemotright", "ellipsis", "space", "Agrave", "Atilde", "Otilde", "OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide", "lozenge", "ydieresis", "Ydieresis", "fraction", "currency", "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex", "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde", "macron", "breve", "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron"]; -exports.MacRomanEncoding = MacRomanEncoding; -const StandardEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "", "endash", "dagger", "daggerdbl", "periodcentered", "", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "", "questiondown", "", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "", "ring", "cedilla", "", "hungarumlaut", "ogonek", "caron", "emdash", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "AE", "", "ordfeminine", "", "", "", "", "Lslash", "Oslash", "OE", "ordmasculine", "", "", "", "", "", "ae", "", "", "", "dotlessi", "", "", "lslash", "oslash", "oe", "germandbls", "", "", "", ""]; -exports.StandardEncoding = StandardEncoding; -const WinAnsiEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "bullet", "Euro", "bullet", "quotesinglbase", "florin", "quotedblbase", "ellipsis", "dagger", "daggerdbl", "circumflex", "perthousand", "Scaron", "guilsinglleft", "OE", "bullet", "Zcaron", "bullet", "bullet", "quoteleft", "quoteright", "quotedblleft", "quotedblright", "bullet", "endash", "emdash", "tilde", "trademark", "scaron", "guilsinglright", "oe", "bullet", "zcaron", "Ydieresis", "space", "exclamdown", "cent", "sterling", "currency", "yen", "brokenbar", "section", "dieresis", "copyright", "ordfeminine", "guillemotleft", "logicalnot", "hyphen", "registered", "macron", "degree", "plusminus", "twosuperior", "threesuperior", "acute", "mu", "paragraph", "periodcentered", "cedilla", "onesuperior", "ordmasculine", "guillemotright", "onequarter", "onehalf", "threequarters", "questiondown", "Agrave", "Aacute", "Acircumflex", "Atilde", "Adieresis", "Aring", "AE", "Ccedilla", "Egrave", "Eacute", "Ecircumflex", "Edieresis", "Igrave", "Iacute", "Icircumflex", "Idieresis", "Eth", "Ntilde", "Ograve", "Oacute", "Ocircumflex", "Otilde", "Odieresis", "multiply", "Oslash", "Ugrave", "Uacute", "Ucircumflex", "Udieresis", "Yacute", "Thorn", "germandbls", "agrave", "aacute", "acircumflex", "atilde", "adieresis", "aring", "ae", "ccedilla", "egrave", "eacute", "ecircumflex", "edieresis", "igrave", "iacute", "icircumflex", "idieresis", "eth", "ntilde", "ograve", "oacute", "ocircumflex", "otilde", "odieresis", "divide", "oslash", "ugrave", "uacute", "ucircumflex", "udieresis", "yacute", "thorn", "ydieresis"]; -exports.WinAnsiEncoding = WinAnsiEncoding; -const SymbolSetEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "universal", "numbersign", "existential", "percent", "ampersand", "suchthat", "parenleft", "parenright", "asteriskmath", "plus", "comma", "minus", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "congruent", "Alpha", "Beta", "Chi", "Delta", "Epsilon", "Phi", "Gamma", "Eta", "Iota", "theta1", "Kappa", "Lambda", "Mu", "Nu", "Omicron", "Pi", "Theta", "Rho", "Sigma", "Tau", "Upsilon", "sigma1", "Omega", "Xi", "Psi", "Zeta", "bracketleft", "therefore", "bracketright", "perpendicular", "underscore", "radicalex", "alpha", "beta", "chi", "delta", "epsilon", "phi", "gamma", "eta", "iota", "phi1", "kappa", "lambda", "mu", "nu", "omicron", "pi", "theta", "rho", "sigma", "tau", "upsilon", "omega1", "omega", "xi", "psi", "zeta", "braceleft", "bar", "braceright", "similar", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Euro", "Upsilon1", "minute", "lessequal", "fraction", "infinity", "florin", "club", "diamond", "heart", "spade", "arrowboth", "arrowleft", "arrowup", "arrowright", "arrowdown", "degree", "plusminus", "second", "greaterequal", "multiply", "proportional", "partialdiff", "bullet", "divide", "notequal", "equivalence", "approxequal", "ellipsis", "arrowvertex", "arrowhorizex", "carriagereturn", "aleph", "Ifraktur", "Rfraktur", "weierstrass", "circlemultiply", "circleplus", "emptyset", "intersection", "union", "propersuperset", "reflexsuperset", "notsubset", "propersubset", "reflexsubset", "element", "notelement", "angle", "gradient", "registerserif", "copyrightserif", "trademarkserif", "product", "radical", "dotmath", "logicalnot", "logicaland", "logicalor", "arrowdblboth", "arrowdblleft", "arrowdblup", "arrowdblright", "arrowdbldown", "lozenge", "angleleft", "registersans", "copyrightsans", "trademarksans", "summation", "parenlefttp", "parenleftex", "parenleftbt", "bracketlefttp", "bracketleftex", "bracketleftbt", "bracelefttp", "braceleftmid", "braceleftbt", "braceex", "", "angleright", "integral", "integraltp", "integralex", "integralbt", "parenrighttp", "parenrightex", "parenrightbt", "bracketrighttp", "bracketrightex", "bracketrightbt", "bracerighttp", "bracerightmid", "bracerightbt", ""]; -exports.SymbolSetEncoding = SymbolSetEncoding; -const ZapfDingbatsEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "a1", "a2", "a202", "a3", "a4", "a5", "a119", "a118", "a117", "a11", "a12", "a13", "a14", "a15", "a16", "a105", "a17", "a18", "a19", "a20", "a21", "a22", "a23", "a24", "a25", "a26", "a27", "a28", "a6", "a7", "a8", "a9", "a10", "a29", "a30", "a31", "a32", "a33", "a34", "a35", "a36", "a37", "a38", "a39", "a40", "a41", "a42", "a43", "a44", "a45", "a46", "a47", "a48", "a49", "a50", "a51", "a52", "a53", "a54", "a55", "a56", "a57", "a58", "a59", "a60", "a61", "a62", "a63", "a64", "a65", "a66", "a67", "a68", "a69", "a70", "a71", "a72", "a73", "a74", "a203", "a75", "a204", "a76", "a77", "a78", "a79", "a81", "a82", "a83", "a84", "a97", "a98", "a99", "a100", "", "a89", "a90", "a93", "a94", "a91", "a92", "a205", "a85", "a206", "a86", "a87", "a88", "a95", "a96", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "a101", "a102", "a103", "a104", "a106", "a107", "a108", "a112", "a111", "a110", "a109", "a120", "a121", "a122", "a123", "a124", "a125", "a126", "a127", "a128", "a129", "a130", "a131", "a132", "a133", "a134", "a135", "a136", "a137", "a138", "a139", "a140", "a141", "a142", "a143", "a144", "a145", "a146", "a147", "a148", "a149", "a150", "a151", "a152", "a153", "a154", "a155", "a156", "a157", "a158", "a159", "a160", "a161", "a163", "a164", "a196", "a165", "a192", "a166", "a167", "a168", "a169", "a170", "a171", "a172", "a173", "a162", "a174", "a175", "a176", "a177", "a178", "a179", "a193", "a180", "a199", "a181", "a200", "a182", "", "a201", "a183", "a184", "a197", "a185", "a194", "a198", "a186", "a195", "a187", "a188", "a189", "a190", "a191", ""]; -exports.ZapfDingbatsEncoding = ZapfDingbatsEncoding; - -function getEncoding(encodingName) { - switch (encodingName) { - case "WinAnsiEncoding": - return WinAnsiEncoding; - - case "StandardEncoding": - return StandardEncoding; - - case "MacRomanEncoding": - return MacRomanEncoding; - - case "SymbolSetEncoding": - return SymbolSetEncoding; - - case "ZapfDingbatsEncoding": - return ZapfDingbatsEncoding; - - case "ExpertEncoding": - return ExpertEncoding; - - case "MacExpertEncoding": - return MacExpertEncoding; - - default: - return null; - } -} - -/***/ }), -/* 20 */ -/***/ ((__unused_webpack_module, __webpack_exports__, __w_pdfjs_require__) => { - -__w_pdfjs_require__.r(__webpack_exports__); -/* harmony export */ __w_pdfjs_require__.d(__webpack_exports__, { -/* harmony export */ "getDingbatsGlyphsUnicode": () => (/* binding */ getDingbatsGlyphsUnicode), -/* harmony export */ "getGlyphsUnicode": () => (/* binding */ getGlyphsUnicode) -/* harmony export */ }); -/* harmony import */ var _core_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __w_pdfjs_require__(9); - -const getGlyphsUnicode = (0, _core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getArrayLookupTableFactory)(function () { - return [ - "A", - 0x0041, - "AE", - 0x00c6, - "AEacute", - 0x01fc, - "AEmacron", - 0x01e2, - "AEsmall", - 0xf7e6, - "Aacute", - 0x00c1, - "Aacutesmall", - 0xf7e1, - "Abreve", - 0x0102, - "Abreveacute", - 0x1eae, - "Abrevecyrillic", - 0x04d0, - "Abrevedotbelow", - 0x1eb6, - "Abrevegrave", - 0x1eb0, - "Abrevehookabove", - 0x1eb2, - "Abrevetilde", - 0x1eb4, - "Acaron", - 0x01cd, - "Acircle", - 0x24b6, - "Acircumflex", - 0x00c2, - "Acircumflexacute", - 0x1ea4, - "Acircumflexdotbelow", - 0x1eac, - "Acircumflexgrave", - 0x1ea6, - "Acircumflexhookabove", - 0x1ea8, - "Acircumflexsmall", - 0xf7e2, - "Acircumflextilde", - 0x1eaa, - "Acute", - 0xf6c9, - "Acutesmall", - 0xf7b4, - "Acyrillic", - 0x0410, - "Adblgrave", - 0x0200, - "Adieresis", - 0x00c4, - "Adieresiscyrillic", - 0x04d2, - "Adieresismacron", - 0x01de, - "Adieresissmall", - 0xf7e4, - "Adotbelow", - 0x1ea0, - "Adotmacron", - 0x01e0, - "Agrave", - 0x00c0, - "Agravesmall", - 0xf7e0, - "Ahookabove", - 0x1ea2, - "Aiecyrillic", - 0x04d4, - "Ainvertedbreve", - 0x0202, - "Alpha", - 0x0391, - "Alphatonos", - 0x0386, - "Amacron", - 0x0100, - "Amonospace", - 0xff21, - "Aogonek", - 0x0104, - "Aring", - 0x00c5, - "Aringacute", - 0x01fa, - "Aringbelow", - 0x1e00, - "Aringsmall", - 0xf7e5, - "Asmall", - 0xf761, - "Atilde", - 0x00c3, - "Atildesmall", - 0xf7e3, - "Aybarmenian", - 0x0531, - "B", - 0x0042, - "Bcircle", - 0x24b7, - "Bdotaccent", - 0x1e02, - "Bdotbelow", - 0x1e04, - "Becyrillic", - 0x0411, - "Benarmenian", - 0x0532, - "Beta", - 0x0392, - "Bhook", - 0x0181, - "Blinebelow", - 0x1e06, - "Bmonospace", - 0xff22, - "Brevesmall", - 0xf6f4, - "Bsmall", - 0xf762, - "Btopbar", - 0x0182, - "C", - 0x0043, - "Caarmenian", - 0x053e, - "Cacute", - 0x0106, - "Caron", - 0xf6ca, - "Caronsmall", - 0xf6f5, - "Ccaron", - 0x010c, - "Ccedilla", - 0x00c7, - "Ccedillaacute", - 0x1e08, - "Ccedillasmall", - 0xf7e7, - "Ccircle", - 0x24b8, - "Ccircumflex", - 0x0108, - "Cdot", - 0x010a, - "Cdotaccent", - 0x010a, - "Cedillasmall", - 0xf7b8, - "Chaarmenian", - 0x0549, - "Cheabkhasiancyrillic", - 0x04bc, - "Checyrillic", - 0x0427, - "Chedescenderabkhasiancyrillic", - 0x04be, - "Chedescendercyrillic", - 0x04b6, - "Chedieresiscyrillic", - 0x04f4, - "Cheharmenian", - 0x0543, - "Chekhakassiancyrillic", - 0x04cb, - "Cheverticalstrokecyrillic", - 0x04b8, - "Chi", - 0x03a7, - "Chook", - 0x0187, - "Circumflexsmall", - 0xf6f6, - "Cmonospace", - 0xff23, - "Coarmenian", - 0x0551, - "Csmall", - 0xf763, - "D", - 0x0044, - "DZ", - 0x01f1, - "DZcaron", - 0x01c4, - "Daarmenian", - 0x0534, - "Dafrican", - 0x0189, - "Dcaron", - 0x010e, - "Dcedilla", - 0x1e10, - "Dcircle", - 0x24b9, - "Dcircumflexbelow", - 0x1e12, - "Dcroat", - 0x0110, - "Ddotaccent", - 0x1e0a, - "Ddotbelow", - 0x1e0c, - "Decyrillic", - 0x0414, - "Deicoptic", - 0x03ee, - "Delta", - 0x2206, - "Deltagreek", - 0x0394, - "Dhook", - 0x018a, - "Dieresis", - 0xf6cb, - "DieresisAcute", - 0xf6cc, - "DieresisGrave", - 0xf6cd, - "Dieresissmall", - 0xf7a8, - "Digammagreek", - 0x03dc, - "Djecyrillic", - 0x0402, - "Dlinebelow", - 0x1e0e, - "Dmonospace", - 0xff24, - "Dotaccentsmall", - 0xf6f7, - "Dslash", - 0x0110, - "Dsmall", - 0xf764, - "Dtopbar", - 0x018b, - "Dz", - 0x01f2, - "Dzcaron", - 0x01c5, - "Dzeabkhasiancyrillic", - 0x04e0, - "Dzecyrillic", - 0x0405, - "Dzhecyrillic", - 0x040f, - "E", - 0x0045, - "Eacute", - 0x00c9, - "Eacutesmall", - 0xf7e9, - "Ebreve", - 0x0114, - "Ecaron", - 0x011a, - "Ecedillabreve", - 0x1e1c, - "Echarmenian", - 0x0535, - "Ecircle", - 0x24ba, - "Ecircumflex", - 0x00ca, - "Ecircumflexacute", - 0x1ebe, - "Ecircumflexbelow", - 0x1e18, - "Ecircumflexdotbelow", - 0x1ec6, - "Ecircumflexgrave", - 0x1ec0, - "Ecircumflexhookabove", - 0x1ec2, - "Ecircumflexsmall", - 0xf7ea, - "Ecircumflextilde", - 0x1ec4, - "Ecyrillic", - 0x0404, - "Edblgrave", - 0x0204, - "Edieresis", - 0x00cb, - "Edieresissmall", - 0xf7eb, - "Edot", - 0x0116, - "Edotaccent", - 0x0116, - "Edotbelow", - 0x1eb8, - "Efcyrillic", - 0x0424, - "Egrave", - 0x00c8, - "Egravesmall", - 0xf7e8, - "Eharmenian", - 0x0537, - "Ehookabove", - 0x1eba, - "Eightroman", - 0x2167, - "Einvertedbreve", - 0x0206, - "Eiotifiedcyrillic", - 0x0464, - "Elcyrillic", - 0x041b, - "Elevenroman", - 0x216a, - "Emacron", - 0x0112, - "Emacronacute", - 0x1e16, - "Emacrongrave", - 0x1e14, - "Emcyrillic", - 0x041c, - "Emonospace", - 0xff25, - "Encyrillic", - 0x041d, - "Endescendercyrillic", - 0x04a2, - "Eng", - 0x014a, - "Enghecyrillic", - 0x04a4, - "Enhookcyrillic", - 0x04c7, - "Eogonek", - 0x0118, - "Eopen", - 0x0190, - "Epsilon", - 0x0395, - "Epsilontonos", - 0x0388, - "Ercyrillic", - 0x0420, - "Ereversed", - 0x018e, - "Ereversedcyrillic", - 0x042d, - "Escyrillic", - 0x0421, - "Esdescendercyrillic", - 0x04aa, - "Esh", - 0x01a9, - "Esmall", - 0xf765, - "Eta", - 0x0397, - "Etarmenian", - 0x0538, - "Etatonos", - 0x0389, - "Eth", - 0x00d0, - "Ethsmall", - 0xf7f0, - "Etilde", - 0x1ebc, - "Etildebelow", - 0x1e1a, - "Euro", - 0x20ac, - "Ezh", - 0x01b7, - "Ezhcaron", - 0x01ee, - "Ezhreversed", - 0x01b8, - "F", - 0x0046, - "Fcircle", - 0x24bb, - "Fdotaccent", - 0x1e1e, - "Feharmenian", - 0x0556, - "Feicoptic", - 0x03e4, - "Fhook", - 0x0191, - "Fitacyrillic", - 0x0472, - "Fiveroman", - 0x2164, - "Fmonospace", - 0xff26, - "Fourroman", - 0x2163, - "Fsmall", - 0xf766, - "G", - 0x0047, - "GBsquare", - 0x3387, - "Gacute", - 0x01f4, - "Gamma", - 0x0393, - "Gammaafrican", - 0x0194, - "Gangiacoptic", - 0x03ea, - "Gbreve", - 0x011e, - "Gcaron", - 0x01e6, - "Gcedilla", - 0x0122, - "Gcircle", - 0x24bc, - "Gcircumflex", - 0x011c, - "Gcommaaccent", - 0x0122, - "Gdot", - 0x0120, - "Gdotaccent", - 0x0120, - "Gecyrillic", - 0x0413, - "Ghadarmenian", - 0x0542, - "Ghemiddlehookcyrillic", - 0x0494, - "Ghestrokecyrillic", - 0x0492, - "Gheupturncyrillic", - 0x0490, - "Ghook", - 0x0193, - "Gimarmenian", - 0x0533, - "Gjecyrillic", - 0x0403, - "Gmacron", - 0x1e20, - "Gmonospace", - 0xff27, - "Grave", - 0xf6ce, - "Gravesmall", - 0xf760, - "Gsmall", - 0xf767, - "Gsmallhook", - 0x029b, - "Gstroke", - 0x01e4, - "H", - 0x0048, - "H18533", - 0x25cf, - "H18543", - 0x25aa, - "H18551", - 0x25ab, - "H22073", - 0x25a1, - "HPsquare", - 0x33cb, - "Haabkhasiancyrillic", - 0x04a8, - "Hadescendercyrillic", - 0x04b2, - "Hardsigncyrillic", - 0x042a, - "Hbar", - 0x0126, - "Hbrevebelow", - 0x1e2a, - "Hcedilla", - 0x1e28, - "Hcircle", - 0x24bd, - "Hcircumflex", - 0x0124, - "Hdieresis", - 0x1e26, - "Hdotaccent", - 0x1e22, - "Hdotbelow", - 0x1e24, - "Hmonospace", - 0xff28, - "Hoarmenian", - 0x0540, - "Horicoptic", - 0x03e8, - "Hsmall", - 0xf768, - "Hungarumlaut", - 0xf6cf, - "Hungarumlautsmall", - 0xf6f8, - "Hzsquare", - 0x3390, - "I", - 0x0049, - "IAcyrillic", - 0x042f, - "IJ", - 0x0132, - "IUcyrillic", - 0x042e, - "Iacute", - 0x00cd, - "Iacutesmall", - 0xf7ed, - "Ibreve", - 0x012c, - "Icaron", - 0x01cf, - "Icircle", - 0x24be, - "Icircumflex", - 0x00ce, - "Icircumflexsmall", - 0xf7ee, - "Icyrillic", - 0x0406, - "Idblgrave", - 0x0208, - "Idieresis", - 0x00cf, - "Idieresisacute", - 0x1e2e, - "Idieresiscyrillic", - 0x04e4, - "Idieresissmall", - 0xf7ef, - "Idot", - 0x0130, - "Idotaccent", - 0x0130, - "Idotbelow", - 0x1eca, - "Iebrevecyrillic", - 0x04d6, - "Iecyrillic", - 0x0415, - "Ifraktur", - 0x2111, - "Igrave", - 0x00cc, - "Igravesmall", - 0xf7ec, - "Ihookabove", - 0x1ec8, - "Iicyrillic", - 0x0418, - "Iinvertedbreve", - 0x020a, - "Iishortcyrillic", - 0x0419, - "Imacron", - 0x012a, - "Imacroncyrillic", - 0x04e2, - "Imonospace", - 0xff29, - "Iniarmenian", - 0x053b, - "Iocyrillic", - 0x0401, - "Iogonek", - 0x012e, - "Iota", - 0x0399, - "Iotaafrican", - 0x0196, - "Iotadieresis", - 0x03aa, - "Iotatonos", - 0x038a, - "Ismall", - 0xf769, - "Istroke", - 0x0197, - "Itilde", - 0x0128, - "Itildebelow", - 0x1e2c, - "Izhitsacyrillic", - 0x0474, - "Izhitsadblgravecyrillic", - 0x0476, - "J", - 0x004a, - "Jaarmenian", - 0x0541, - "Jcircle", - 0x24bf, - "Jcircumflex", - 0x0134, - "Jecyrillic", - 0x0408, - "Jheharmenian", - 0x054b, - "Jmonospace", - 0xff2a, - "Jsmall", - 0xf76a, - "K", - 0x004b, - "KBsquare", - 0x3385, - "KKsquare", - 0x33cd, - "Kabashkircyrillic", - 0x04a0, - "Kacute", - 0x1e30, - "Kacyrillic", - 0x041a, - "Kadescendercyrillic", - 0x049a, - "Kahookcyrillic", - 0x04c3, - "Kappa", - 0x039a, - "Kastrokecyrillic", - 0x049e, - "Kaverticalstrokecyrillic", - 0x049c, - "Kcaron", - 0x01e8, - "Kcedilla", - 0x0136, - "Kcircle", - 0x24c0, - "Kcommaaccent", - 0x0136, - "Kdotbelow", - 0x1e32, - "Keharmenian", - 0x0554, - "Kenarmenian", - 0x053f, - "Khacyrillic", - 0x0425, - "Kheicoptic", - 0x03e6, - "Khook", - 0x0198, - "Kjecyrillic", - 0x040c, - "Klinebelow", - 0x1e34, - "Kmonospace", - 0xff2b, - "Koppacyrillic", - 0x0480, - "Koppagreek", - 0x03de, - "Ksicyrillic", - 0x046e, - "Ksmall", - 0xf76b, - "L", - 0x004c, - "LJ", - 0x01c7, - "LL", - 0xf6bf, - "Lacute", - 0x0139, - "Lambda", - 0x039b, - "Lcaron", - 0x013d, - "Lcedilla", - 0x013b, - "Lcircle", - 0x24c1, - "Lcircumflexbelow", - 0x1e3c, - "Lcommaaccent", - 0x013b, - "Ldot", - 0x013f, - "Ldotaccent", - 0x013f, - "Ldotbelow", - 0x1e36, - "Ldotbelowmacron", - 0x1e38, - "Liwnarmenian", - 0x053c, - "Lj", - 0x01c8, - "Ljecyrillic", - 0x0409, - "Llinebelow", - 0x1e3a, - "Lmonospace", - 0xff2c, - "Lslash", - 0x0141, - "Lslashsmall", - 0xf6f9, - "Lsmall", - 0xf76c, - "M", - 0x004d, - "MBsquare", - 0x3386, - "Macron", - 0xf6d0, - "Macronsmall", - 0xf7af, - "Macute", - 0x1e3e, - "Mcircle", - 0x24c2, - "Mdotaccent", - 0x1e40, - "Mdotbelow", - 0x1e42, - "Menarmenian", - 0x0544, - "Mmonospace", - 0xff2d, - "Msmall", - 0xf76d, - "Mturned", - 0x019c, - "Mu", - 0x039c, - "N", - 0x004e, - "NJ", - 0x01ca, - "Nacute", - 0x0143, - "Ncaron", - 0x0147, - "Ncedilla", - 0x0145, - "Ncircle", - 0x24c3, - "Ncircumflexbelow", - 0x1e4a, - "Ncommaaccent", - 0x0145, - "Ndotaccent", - 0x1e44, - "Ndotbelow", - 0x1e46, - "Nhookleft", - 0x019d, - "Nineroman", - 0x2168, - "Nj", - 0x01cb, - "Njecyrillic", - 0x040a, - "Nlinebelow", - 0x1e48, - "Nmonospace", - 0xff2e, - "Nowarmenian", - 0x0546, - "Nsmall", - 0xf76e, - "Ntilde", - 0x00d1, - "Ntildesmall", - 0xf7f1, - "Nu", - 0x039d, - "O", - 0x004f, - "OE", - 0x0152, - "OEsmall", - 0xf6fa, - "Oacute", - 0x00d3, - "Oacutesmall", - 0xf7f3, - "Obarredcyrillic", - 0x04e8, - "Obarreddieresiscyrillic", - 0x04ea, - "Obreve", - 0x014e, - "Ocaron", - 0x01d1, - "Ocenteredtilde", - 0x019f, - "Ocircle", - 0x24c4, - "Ocircumflex", - 0x00d4, - "Ocircumflexacute", - 0x1ed0, - "Ocircumflexdotbelow", - 0x1ed8, - "Ocircumflexgrave", - 0x1ed2, - "Ocircumflexhookabove", - 0x1ed4, - "Ocircumflexsmall", - 0xf7f4, - "Ocircumflextilde", - 0x1ed6, - "Ocyrillic", - 0x041e, - "Odblacute", - 0x0150, - "Odblgrave", - 0x020c, - "Odieresis", - 0x00d6, - "Odieresiscyrillic", - 0x04e6, - "Odieresissmall", - 0xf7f6, - "Odotbelow", - 0x1ecc, - "Ogoneksmall", - 0xf6fb, - "Ograve", - 0x00d2, - "Ogravesmall", - 0xf7f2, - "Oharmenian", - 0x0555, - "Ohm", - 0x2126, - "Ohookabove", - 0x1ece, - "Ohorn", - 0x01a0, - "Ohornacute", - 0x1eda, - "Ohorndotbelow", - 0x1ee2, - "Ohorngrave", - 0x1edc, - "Ohornhookabove", - 0x1ede, - "Ohorntilde", - 0x1ee0, - "Ohungarumlaut", - 0x0150, - "Oi", - 0x01a2, - "Oinvertedbreve", - 0x020e, - "Omacron", - 0x014c, - "Omacronacute", - 0x1e52, - "Omacrongrave", - 0x1e50, - "Omega", - 0x2126, - "Omegacyrillic", - 0x0460, - "Omegagreek", - 0x03a9, - "Omegaroundcyrillic", - 0x047a, - "Omegatitlocyrillic", - 0x047c, - "Omegatonos", - 0x038f, - "Omicron", - 0x039f, - "Omicrontonos", - 0x038c, - "Omonospace", - 0xff2f, - "Oneroman", - 0x2160, - "Oogonek", - 0x01ea, - "Oogonekmacron", - 0x01ec, - "Oopen", - 0x0186, - "Oslash", - 0x00d8, - "Oslashacute", - 0x01fe, - "Oslashsmall", - 0xf7f8, - "Osmall", - 0xf76f, - "Ostrokeacute", - 0x01fe, - "Otcyrillic", - 0x047e, - "Otilde", - 0x00d5, - "Otildeacute", - 0x1e4c, - "Otildedieresis", - 0x1e4e, - "Otildesmall", - 0xf7f5, - "P", - 0x0050, - "Pacute", - 0x1e54, - "Pcircle", - 0x24c5, - "Pdotaccent", - 0x1e56, - "Pecyrillic", - 0x041f, - "Peharmenian", - 0x054a, - "Pemiddlehookcyrillic", - 0x04a6, - "Phi", - 0x03a6, - "Phook", - 0x01a4, - "Pi", - 0x03a0, - "Piwrarmenian", - 0x0553, - "Pmonospace", - 0xff30, - "Psi", - 0x03a8, - "Psicyrillic", - 0x0470, - "Psmall", - 0xf770, - "Q", - 0x0051, - "Qcircle", - 0x24c6, - "Qmonospace", - 0xff31, - "Qsmall", - 0xf771, - "R", - 0x0052, - "Raarmenian", - 0x054c, - "Racute", - 0x0154, - "Rcaron", - 0x0158, - "Rcedilla", - 0x0156, - "Rcircle", - 0x24c7, - "Rcommaaccent", - 0x0156, - "Rdblgrave", - 0x0210, - "Rdotaccent", - 0x1e58, - "Rdotbelow", - 0x1e5a, - "Rdotbelowmacron", - 0x1e5c, - "Reharmenian", - 0x0550, - "Rfraktur", - 0x211c, - "Rho", - 0x03a1, - "Ringsmall", - 0xf6fc, - "Rinvertedbreve", - 0x0212, - "Rlinebelow", - 0x1e5e, - "Rmonospace", - 0xff32, - "Rsmall", - 0xf772, - "Rsmallinverted", - 0x0281, - "Rsmallinvertedsuperior", - 0x02b6, - "S", - 0x0053, - "SF010000", - 0x250c, - "SF020000", - 0x2514, - "SF030000", - 0x2510, - "SF040000", - 0x2518, - "SF050000", - 0x253c, - "SF060000", - 0x252c, - "SF070000", - 0x2534, - "SF080000", - 0x251c, - "SF090000", - 0x2524, - "SF100000", - 0x2500, - "SF110000", - 0x2502, - "SF190000", - 0x2561, - "SF200000", - 0x2562, - "SF210000", - 0x2556, - "SF220000", - 0x2555, - "SF230000", - 0x2563, - "SF240000", - 0x2551, - "SF250000", - 0x2557, - "SF260000", - 0x255d, - "SF270000", - 0x255c, - "SF280000", - 0x255b, - "SF360000", - 0x255e, - "SF370000", - 0x255f, - "SF380000", - 0x255a, - "SF390000", - 0x2554, - "SF400000", - 0x2569, - "SF410000", - 0x2566, - "SF420000", - 0x2560, - "SF430000", - 0x2550, - "SF440000", - 0x256c, - "SF450000", - 0x2567, - "SF460000", - 0x2568, - "SF470000", - 0x2564, - "SF480000", - 0x2565, - "SF490000", - 0x2559, - "SF500000", - 0x2558, - "SF510000", - 0x2552, - "SF520000", - 0x2553, - "SF530000", - 0x256b, - "SF540000", - 0x256a, - "Sacute", - 0x015a, - "Sacutedotaccent", - 0x1e64, - "Sampigreek", - 0x03e0, - "Scaron", - 0x0160, - "Scarondotaccent", - 0x1e66, - "Scaronsmall", - 0xf6fd, - "Scedilla", - 0x015e, - "Schwa", - 0x018f, - "Schwacyrillic", - 0x04d8, - "Schwadieresiscyrillic", - 0x04da, - "Scircle", - 0x24c8, - "Scircumflex", - 0x015c, - "Scommaaccent", - 0x0218, - "Sdotaccent", - 0x1e60, - "Sdotbelow", - 0x1e62, - "Sdotbelowdotaccent", - 0x1e68, - "Seharmenian", - 0x054d, - "Sevenroman", - 0x2166, - "Shaarmenian", - 0x0547, - "Shacyrillic", - 0x0428, - "Shchacyrillic", - 0x0429, - "Sheicoptic", - 0x03e2, - "Shhacyrillic", - 0x04ba, - "Shimacoptic", - 0x03ec, - "Sigma", - 0x03a3, - "Sixroman", - 0x2165, - "Smonospace", - 0xff33, - "Softsigncyrillic", - 0x042c, - "Ssmall", - 0xf773, - "Stigmagreek", - 0x03da, - "T", - 0x0054, - "Tau", - 0x03a4, - "Tbar", - 0x0166, - "Tcaron", - 0x0164, - "Tcedilla", - 0x0162, - "Tcircle", - 0x24c9, - "Tcircumflexbelow", - 0x1e70, - "Tcommaaccent", - 0x0162, - "Tdotaccent", - 0x1e6a, - "Tdotbelow", - 0x1e6c, - "Tecyrillic", - 0x0422, - "Tedescendercyrillic", - 0x04ac, - "Tenroman", - 0x2169, - "Tetsecyrillic", - 0x04b4, - "Theta", - 0x0398, - "Thook", - 0x01ac, - "Thorn", - 0x00de, - "Thornsmall", - 0xf7fe, - "Threeroman", - 0x2162, - "Tildesmall", - 0xf6fe, - "Tiwnarmenian", - 0x054f, - "Tlinebelow", - 0x1e6e, - "Tmonospace", - 0xff34, - "Toarmenian", - 0x0539, - "Tonefive", - 0x01bc, - "Tonesix", - 0x0184, - "Tonetwo", - 0x01a7, - "Tretroflexhook", - 0x01ae, - "Tsecyrillic", - 0x0426, - "Tshecyrillic", - 0x040b, - "Tsmall", - 0xf774, - "Twelveroman", - 0x216b, - "Tworoman", - 0x2161, - "U", - 0x0055, - "Uacute", - 0x00da, - "Uacutesmall", - 0xf7fa, - "Ubreve", - 0x016c, - "Ucaron", - 0x01d3, - "Ucircle", - 0x24ca, - "Ucircumflex", - 0x00db, - "Ucircumflexbelow", - 0x1e76, - "Ucircumflexsmall", - 0xf7fb, - "Ucyrillic", - 0x0423, - "Udblacute", - 0x0170, - "Udblgrave", - 0x0214, - "Udieresis", - 0x00dc, - "Udieresisacute", - 0x01d7, - "Udieresisbelow", - 0x1e72, - "Udieresiscaron", - 0x01d9, - "Udieresiscyrillic", - 0x04f0, - "Udieresisgrave", - 0x01db, - "Udieresismacron", - 0x01d5, - "Udieresissmall", - 0xf7fc, - "Udotbelow", - 0x1ee4, - "Ugrave", - 0x00d9, - "Ugravesmall", - 0xf7f9, - "Uhookabove", - 0x1ee6, - "Uhorn", - 0x01af, - "Uhornacute", - 0x1ee8, - "Uhorndotbelow", - 0x1ef0, - "Uhorngrave", - 0x1eea, - "Uhornhookabove", - 0x1eec, - "Uhorntilde", - 0x1eee, - "Uhungarumlaut", - 0x0170, - "Uhungarumlautcyrillic", - 0x04f2, - "Uinvertedbreve", - 0x0216, - "Ukcyrillic", - 0x0478, - "Umacron", - 0x016a, - "Umacroncyrillic", - 0x04ee, - "Umacrondieresis", - 0x1e7a, - "Umonospace", - 0xff35, - "Uogonek", - 0x0172, - "Upsilon", - 0x03a5, - "Upsilon1", - 0x03d2, - "Upsilonacutehooksymbolgreek", - 0x03d3, - "Upsilonafrican", - 0x01b1, - "Upsilondieresis", - 0x03ab, - "Upsilondieresishooksymbolgreek", - 0x03d4, - "Upsilonhooksymbol", - 0x03d2, - "Upsilontonos", - 0x038e, - "Uring", - 0x016e, - "Ushortcyrillic", - 0x040e, - "Usmall", - 0xf775, - "Ustraightcyrillic", - 0x04ae, - "Ustraightstrokecyrillic", - 0x04b0, - "Utilde", - 0x0168, - "Utildeacute", - 0x1e78, - "Utildebelow", - 0x1e74, - "V", - 0x0056, - "Vcircle", - 0x24cb, - "Vdotbelow", - 0x1e7e, - "Vecyrillic", - 0x0412, - "Vewarmenian", - 0x054e, - "Vhook", - 0x01b2, - "Vmonospace", - 0xff36, - "Voarmenian", - 0x0548, - "Vsmall", - 0xf776, - "Vtilde", - 0x1e7c, - "W", - 0x0057, - "Wacute", - 0x1e82, - "Wcircle", - 0x24cc, - "Wcircumflex", - 0x0174, - "Wdieresis", - 0x1e84, - "Wdotaccent", - 0x1e86, - "Wdotbelow", - 0x1e88, - "Wgrave", - 0x1e80, - "Wmonospace", - 0xff37, - "Wsmall", - 0xf777, - "X", - 0x0058, - "Xcircle", - 0x24cd, - "Xdieresis", - 0x1e8c, - "Xdotaccent", - 0x1e8a, - "Xeharmenian", - 0x053d, - "Xi", - 0x039e, - "Xmonospace", - 0xff38, - "Xsmall", - 0xf778, - "Y", - 0x0059, - "Yacute", - 0x00dd, - "Yacutesmall", - 0xf7fd, - "Yatcyrillic", - 0x0462, - "Ycircle", - 0x24ce, - "Ycircumflex", - 0x0176, - "Ydieresis", - 0x0178, - "Ydieresissmall", - 0xf7ff, - "Ydotaccent", - 0x1e8e, - "Ydotbelow", - 0x1ef4, - "Yericyrillic", - 0x042b, - "Yerudieresiscyrillic", - 0x04f8, - "Ygrave", - 0x1ef2, - "Yhook", - 0x01b3, - "Yhookabove", - 0x1ef6, - "Yiarmenian", - 0x0545, - "Yicyrillic", - 0x0407, - "Yiwnarmenian", - 0x0552, - "Ymonospace", - 0xff39, - "Ysmall", - 0xf779, - "Ytilde", - 0x1ef8, - "Yusbigcyrillic", - 0x046a, - "Yusbigiotifiedcyrillic", - 0x046c, - "Yuslittlecyrillic", - 0x0466, - "Yuslittleiotifiedcyrillic", - 0x0468, - "Z", - 0x005a, - "Zaarmenian", - 0x0536, - "Zacute", - 0x0179, - "Zcaron", - 0x017d, - "Zcaronsmall", - 0xf6ff, - "Zcircle", - 0x24cf, - "Zcircumflex", - 0x1e90, - "Zdot", - 0x017b, - "Zdotaccent", - 0x017b, - "Zdotbelow", - 0x1e92, - "Zecyrillic", - 0x0417, - "Zedescendercyrillic", - 0x0498, - "Zedieresiscyrillic", - 0x04de, - "Zeta", - 0x0396, - "Zhearmenian", - 0x053a, - "Zhebrevecyrillic", - 0x04c1, - "Zhecyrillic", - 0x0416, - "Zhedescendercyrillic", - 0x0496, - "Zhedieresiscyrillic", - 0x04dc, - "Zlinebelow", - 0x1e94, - "Zmonospace", - 0xff3a, - "Zsmall", - 0xf77a, - "Zstroke", - 0x01b5, - "a", - 0x0061, - "aabengali", - 0x0986, - "aacute", - 0x00e1, - "aadeva", - 0x0906, - "aagujarati", - 0x0a86, - "aagurmukhi", - 0x0a06, - "aamatragurmukhi", - 0x0a3e, - "aarusquare", - 0x3303, - "aavowelsignbengali", - 0x09be, - "aavowelsigndeva", - 0x093e, - "aavowelsigngujarati", - 0x0abe, - "abbreviationmarkarmenian", - 0x055f, - "abbreviationsigndeva", - 0x0970, - "abengali", - 0x0985, - "abopomofo", - 0x311a, - "abreve", - 0x0103, - "abreveacute", - 0x1eaf, - "abrevecyrillic", - 0x04d1, - "abrevedotbelow", - 0x1eb7, - "abrevegrave", - 0x1eb1, - "abrevehookabove", - 0x1eb3, - "abrevetilde", - 0x1eb5, - "acaron", - 0x01ce, - "acircle", - 0x24d0, - "acircumflex", - 0x00e2, - "acircumflexacute", - 0x1ea5, - "acircumflexdotbelow", - 0x1ead, - "acircumflexgrave", - 0x1ea7, - "acircumflexhookabove", - 0x1ea9, - "acircumflextilde", - 0x1eab, - "acute", - 0x00b4, - "acutebelowcmb", - 0x0317, - "acutecmb", - 0x0301, - "acutecomb", - 0x0301, - "acutedeva", - 0x0954, - "acutelowmod", - 0x02cf, - "acutetonecmb", - 0x0341, - "acyrillic", - 0x0430, - "adblgrave", - 0x0201, - "addakgurmukhi", - 0x0a71, - "adeva", - 0x0905, - "adieresis", - 0x00e4, - "adieresiscyrillic", - 0x04d3, - "adieresismacron", - 0x01df, - "adotbelow", - 0x1ea1, - "adotmacron", - 0x01e1, - "ae", - 0x00e6, - "aeacute", - 0x01fd, - "aekorean", - 0x3150, - "aemacron", - 0x01e3, - "afii00208", - 0x2015, - "afii08941", - 0x20a4, - "afii10017", - 0x0410, - "afii10018", - 0x0411, - "afii10019", - 0x0412, - "afii10020", - 0x0413, - "afii10021", - 0x0414, - "afii10022", - 0x0415, - "afii10023", - 0x0401, - "afii10024", - 0x0416, - "afii10025", - 0x0417, - "afii10026", - 0x0418, - "afii10027", - 0x0419, - "afii10028", - 0x041a, - "afii10029", - 0x041b, - "afii10030", - 0x041c, - "afii10031", - 0x041d, - "afii10032", - 0x041e, - "afii10033", - 0x041f, - "afii10034", - 0x0420, - "afii10035", - 0x0421, - "afii10036", - 0x0422, - "afii10037", - 0x0423, - "afii10038", - 0x0424, - "afii10039", - 0x0425, - "afii10040", - 0x0426, - "afii10041", - 0x0427, - "afii10042", - 0x0428, - "afii10043", - 0x0429, - "afii10044", - 0x042a, - "afii10045", - 0x042b, - "afii10046", - 0x042c, - "afii10047", - 0x042d, - "afii10048", - 0x042e, - "afii10049", - 0x042f, - "afii10050", - 0x0490, - "afii10051", - 0x0402, - "afii10052", - 0x0403, - "afii10053", - 0x0404, - "afii10054", - 0x0405, - "afii10055", - 0x0406, - "afii10056", - 0x0407, - "afii10057", - 0x0408, - "afii10058", - 0x0409, - "afii10059", - 0x040a, - "afii10060", - 0x040b, - "afii10061", - 0x040c, - "afii10062", - 0x040e, - "afii10063", - 0xf6c4, - "afii10064", - 0xf6c5, - "afii10065", - 0x0430, - "afii10066", - 0x0431, - "afii10067", - 0x0432, - "afii10068", - 0x0433, - "afii10069", - 0x0434, - "afii10070", - 0x0435, - "afii10071", - 0x0451, - "afii10072", - 0x0436, - "afii10073", - 0x0437, - "afii10074", - 0x0438, - "afii10075", - 0x0439, - "afii10076", - 0x043a, - "afii10077", - 0x043b, - "afii10078", - 0x043c, - "afii10079", - 0x043d, - "afii10080", - 0x043e, - "afii10081", - 0x043f, - "afii10082", - 0x0440, - "afii10083", - 0x0441, - "afii10084", - 0x0442, - "afii10085", - 0x0443, - "afii10086", - 0x0444, - "afii10087", - 0x0445, - "afii10088", - 0x0446, - "afii10089", - 0x0447, - "afii10090", - 0x0448, - "afii10091", - 0x0449, - "afii10092", - 0x044a, - "afii10093", - 0x044b, - "afii10094", - 0x044c, - "afii10095", - 0x044d, - "afii10096", - 0x044e, - "afii10097", - 0x044f, - "afii10098", - 0x0491, - "afii10099", - 0x0452, - "afii10100", - 0x0453, - "afii10101", - 0x0454, - "afii10102", - 0x0455, - "afii10103", - 0x0456, - "afii10104", - 0x0457, - "afii10105", - 0x0458, - "afii10106", - 0x0459, - "afii10107", - 0x045a, - "afii10108", - 0x045b, - "afii10109", - 0x045c, - "afii10110", - 0x045e, - "afii10145", - 0x040f, - "afii10146", - 0x0462, - "afii10147", - 0x0472, - "afii10148", - 0x0474, - "afii10192", - 0xf6c6, - "afii10193", - 0x045f, - "afii10194", - 0x0463, - "afii10195", - 0x0473, - "afii10196", - 0x0475, - "afii10831", - 0xf6c7, - "afii10832", - 0xf6c8, - "afii10846", - 0x04d9, - "afii299", - 0x200e, - "afii300", - 0x200f, - "afii301", - 0x200d, - "afii57381", - 0x066a, - "afii57388", - 0x060c, - "afii57392", - 0x0660, - "afii57393", - 0x0661, - "afii57394", - 0x0662, - "afii57395", - 0x0663, - "afii57396", - 0x0664, - "afii57397", - 0x0665, - "afii57398", - 0x0666, - "afii57399", - 0x0667, - "afii57400", - 0x0668, - "afii57401", - 0x0669, - "afii57403", - 0x061b, - "afii57407", - 0x061f, - "afii57409", - 0x0621, - "afii57410", - 0x0622, - "afii57411", - 0x0623, - "afii57412", - 0x0624, - "afii57413", - 0x0625, - "afii57414", - 0x0626, - "afii57415", - 0x0627, - "afii57416", - 0x0628, - "afii57417", - 0x0629, - "afii57418", - 0x062a, - "afii57419", - 0x062b, - "afii57420", - 0x062c, - "afii57421", - 0x062d, - "afii57422", - 0x062e, - "afii57423", - 0x062f, - "afii57424", - 0x0630, - "afii57425", - 0x0631, - "afii57426", - 0x0632, - "afii57427", - 0x0633, - "afii57428", - 0x0634, - "afii57429", - 0x0635, - "afii57430", - 0x0636, - "afii57431", - 0x0637, - "afii57432", - 0x0638, - "afii57433", - 0x0639, - "afii57434", - 0x063a, - "afii57440", - 0x0640, - "afii57441", - 0x0641, - "afii57442", - 0x0642, - "afii57443", - 0x0643, - "afii57444", - 0x0644, - "afii57445", - 0x0645, - "afii57446", - 0x0646, - "afii57448", - 0x0648, - "afii57449", - 0x0649, - "afii57450", - 0x064a, - "afii57451", - 0x064b, - "afii57452", - 0x064c, - "afii57453", - 0x064d, - "afii57454", - 0x064e, - "afii57455", - 0x064f, - "afii57456", - 0x0650, - "afii57457", - 0x0651, - "afii57458", - 0x0652, - "afii57470", - 0x0647, - "afii57505", - 0x06a4, - "afii57506", - 0x067e, - "afii57507", - 0x0686, - "afii57508", - 0x0698, - "afii57509", - 0x06af, - "afii57511", - 0x0679, - "afii57512", - 0x0688, - "afii57513", - 0x0691, - "afii57514", - 0x06ba, - "afii57519", - 0x06d2, - "afii57534", - 0x06d5, - "afii57636", - 0x20aa, - "afii57645", - 0x05be, - "afii57658", - 0x05c3, - "afii57664", - 0x05d0, - "afii57665", - 0x05d1, - "afii57666", - 0x05d2, - "afii57667", - 0x05d3, - "afii57668", - 0x05d4, - "afii57669", - 0x05d5, - "afii57670", - 0x05d6, - "afii57671", - 0x05d7, - "afii57672", - 0x05d8, - "afii57673", - 0x05d9, - "afii57674", - 0x05da, - "afii57675", - 0x05db, - "afii57676", - 0x05dc, - "afii57677", - 0x05dd, - "afii57678", - 0x05de, - "afii57679", - 0x05df, - "afii57680", - 0x05e0, - "afii57681", - 0x05e1, - "afii57682", - 0x05e2, - "afii57683", - 0x05e3, - "afii57684", - 0x05e4, - "afii57685", - 0x05e5, - "afii57686", - 0x05e6, - "afii57687", - 0x05e7, - "afii57688", - 0x05e8, - "afii57689", - 0x05e9, - "afii57690", - 0x05ea, - "afii57694", - 0xfb2a, - "afii57695", - 0xfb2b, - "afii57700", - 0xfb4b, - "afii57705", - 0xfb1f, - "afii57716", - 0x05f0, - "afii57717", - 0x05f1, - "afii57718", - 0x05f2, - "afii57723", - 0xfb35, - "afii57793", - 0x05b4, - "afii57794", - 0x05b5, - "afii57795", - 0x05b6, - "afii57796", - 0x05bb, - "afii57797", - 0x05b8, - "afii57798", - 0x05b7, - "afii57799", - 0x05b0, - "afii57800", - 0x05b2, - "afii57801", - 0x05b1, - "afii57802", - 0x05b3, - "afii57803", - 0x05c2, - "afii57804", - 0x05c1, - "afii57806", - 0x05b9, - "afii57807", - 0x05bc, - "afii57839", - 0x05bd, - "afii57841", - 0x05bf, - "afii57842", - 0x05c0, - "afii57929", - 0x02bc, - "afii61248", - 0x2105, - "afii61289", - 0x2113, - "afii61352", - 0x2116, - "afii61573", - 0x202c, - "afii61574", - 0x202d, - "afii61575", - 0x202e, - "afii61664", - 0x200c, - "afii63167", - 0x066d, - "afii64937", - 0x02bd, - "agrave", - 0x00e0, - "agujarati", - 0x0a85, - "agurmukhi", - 0x0a05, - "ahiragana", - 0x3042, - "ahookabove", - 0x1ea3, - "aibengali", - 0x0990, - "aibopomofo", - 0x311e, - "aideva", - 0x0910, - "aiecyrillic", - 0x04d5, - "aigujarati", - 0x0a90, - "aigurmukhi", - 0x0a10, - "aimatragurmukhi", - 0x0a48, - "ainarabic", - 0x0639, - "ainfinalarabic", - 0xfeca, - "aininitialarabic", - 0xfecb, - "ainmedialarabic", - 0xfecc, - "ainvertedbreve", - 0x0203, - "aivowelsignbengali", - 0x09c8, - "aivowelsigndeva", - 0x0948, - "aivowelsigngujarati", - 0x0ac8, - "akatakana", - 0x30a2, - "akatakanahalfwidth", - 0xff71, - "akorean", - 0x314f, - "alef", - 0x05d0, - "alefarabic", - 0x0627, - "alefdageshhebrew", - 0xfb30, - "aleffinalarabic", - 0xfe8e, - "alefhamzaabovearabic", - 0x0623, - "alefhamzaabovefinalarabic", - 0xfe84, - "alefhamzabelowarabic", - 0x0625, - "alefhamzabelowfinalarabic", - 0xfe88, - "alefhebrew", - 0x05d0, - "aleflamedhebrew", - 0xfb4f, - "alefmaddaabovearabic", - 0x0622, - "alefmaddaabovefinalarabic", - 0xfe82, - "alefmaksuraarabic", - 0x0649, - "alefmaksurafinalarabic", - 0xfef0, - "alefmaksurainitialarabic", - 0xfef3, - "alefmaksuramedialarabic", - 0xfef4, - "alefpatahhebrew", - 0xfb2e, - "alefqamatshebrew", - 0xfb2f, - "aleph", - 0x2135, - "allequal", - 0x224c, - "alpha", - 0x03b1, - "alphatonos", - 0x03ac, - "amacron", - 0x0101, - "amonospace", - 0xff41, - "ampersand", - 0x0026, - "ampersandmonospace", - 0xff06, - "ampersandsmall", - 0xf726, - "amsquare", - 0x33c2, - "anbopomofo", - 0x3122, - "angbopomofo", - 0x3124, - "angbracketleft", - 0x3008, - "angbracketright", - 0x3009, - "angkhankhuthai", - 0x0e5a, - "angle", - 0x2220, - "anglebracketleft", - 0x3008, - "anglebracketleftvertical", - 0xfe3f, - "anglebracketright", - 0x3009, - "anglebracketrightvertical", - 0xfe40, - "angleleft", - 0x2329, - "angleright", - 0x232a, - "angstrom", - 0x212b, - "anoteleia", - 0x0387, - "anudattadeva", - 0x0952, - "anusvarabengali", - 0x0982, - "anusvaradeva", - 0x0902, - "anusvaragujarati", - 0x0a82, - "aogonek", - 0x0105, - "apaatosquare", - 0x3300, - "aparen", - 0x249c, - "apostrophearmenian", - 0x055a, - "apostrophemod", - 0x02bc, - "apple", - 0xf8ff, - "approaches", - 0x2250, - "approxequal", - 0x2248, - "approxequalorimage", - 0x2252, - "approximatelyequal", - 0x2245, - "araeaekorean", - 0x318e, - "araeakorean", - 0x318d, - "arc", - 0x2312, - "arighthalfring", - 0x1e9a, - "aring", - 0x00e5, - "aringacute", - 0x01fb, - "aringbelow", - 0x1e01, - "arrowboth", - 0x2194, - "arrowdashdown", - 0x21e3, - "arrowdashleft", - 0x21e0, - "arrowdashright", - 0x21e2, - "arrowdashup", - 0x21e1, - "arrowdblboth", - 0x21d4, - "arrowdbldown", - 0x21d3, - "arrowdblleft", - 0x21d0, - "arrowdblright", - 0x21d2, - "arrowdblup", - 0x21d1, - "arrowdown", - 0x2193, - "arrowdownleft", - 0x2199, - "arrowdownright", - 0x2198, - "arrowdownwhite", - 0x21e9, - "arrowheaddownmod", - 0x02c5, - "arrowheadleftmod", - 0x02c2, - "arrowheadrightmod", - 0x02c3, - "arrowheadupmod", - 0x02c4, - "arrowhorizex", - 0xf8e7, - "arrowleft", - 0x2190, - "arrowleftdbl", - 0x21d0, - "arrowleftdblstroke", - 0x21cd, - "arrowleftoverright", - 0x21c6, - "arrowleftwhite", - 0x21e6, - "arrowright", - 0x2192, - "arrowrightdblstroke", - 0x21cf, - "arrowrightheavy", - 0x279e, - "arrowrightoverleft", - 0x21c4, - "arrowrightwhite", - 0x21e8, - "arrowtableft", - 0x21e4, - "arrowtabright", - 0x21e5, - "arrowup", - 0x2191, - "arrowupdn", - 0x2195, - "arrowupdnbse", - 0x21a8, - "arrowupdownbase", - 0x21a8, - "arrowupleft", - 0x2196, - "arrowupleftofdown", - 0x21c5, - "arrowupright", - 0x2197, - "arrowupwhite", - 0x21e7, - "arrowvertex", - 0xf8e6, - "asciicircum", - 0x005e, - "asciicircummonospace", - 0xff3e, - "asciitilde", - 0x007e, - "asciitildemonospace", - 0xff5e, - "ascript", - 0x0251, - "ascriptturned", - 0x0252, - "asmallhiragana", - 0x3041, - "asmallkatakana", - 0x30a1, - "asmallkatakanahalfwidth", - 0xff67, - "asterisk", - 0x002a, - "asteriskaltonearabic", - 0x066d, - "asteriskarabic", - 0x066d, - "asteriskmath", - 0x2217, - "asteriskmonospace", - 0xff0a, - "asterisksmall", - 0xfe61, - "asterism", - 0x2042, - "asuperior", - 0xf6e9, - "asymptoticallyequal", - 0x2243, - "at", - 0x0040, - "atilde", - 0x00e3, - "atmonospace", - 0xff20, - "atsmall", - 0xfe6b, - "aturned", - 0x0250, - "aubengali", - 0x0994, - "aubopomofo", - 0x3120, - "audeva", - 0x0914, - "augujarati", - 0x0a94, - "augurmukhi", - 0x0a14, - "aulengthmarkbengali", - 0x09d7, - "aumatragurmukhi", - 0x0a4c, - "auvowelsignbengali", - 0x09cc, - "auvowelsigndeva", - 0x094c, - "auvowelsigngujarati", - 0x0acc, - "avagrahadeva", - 0x093d, - "aybarmenian", - 0x0561, - "ayin", - 0x05e2, - "ayinaltonehebrew", - 0xfb20, - "ayinhebrew", - 0x05e2, - "b", - 0x0062, - "babengali", - 0x09ac, - "backslash", - 0x005c, - "backslashmonospace", - 0xff3c, - "badeva", - 0x092c, - "bagujarati", - 0x0aac, - "bagurmukhi", - 0x0a2c, - "bahiragana", - 0x3070, - "bahtthai", - 0x0e3f, - "bakatakana", - 0x30d0, - "bar", - 0x007c, - "barmonospace", - 0xff5c, - "bbopomofo", - 0x3105, - "bcircle", - 0x24d1, - "bdotaccent", - 0x1e03, - "bdotbelow", - 0x1e05, - "beamedsixteenthnotes", - 0x266c, - "because", - 0x2235, - "becyrillic", - 0x0431, - "beharabic", - 0x0628, - "behfinalarabic", - 0xfe90, - "behinitialarabic", - 0xfe91, - "behiragana", - 0x3079, - "behmedialarabic", - 0xfe92, - "behmeeminitialarabic", - 0xfc9f, - "behmeemisolatedarabic", - 0xfc08, - "behnoonfinalarabic", - 0xfc6d, - "bekatakana", - 0x30d9, - "benarmenian", - 0x0562, - "bet", - 0x05d1, - "beta", - 0x03b2, - "betasymbolgreek", - 0x03d0, - "betdagesh", - 0xfb31, - "betdageshhebrew", - 0xfb31, - "bethebrew", - 0x05d1, - "betrafehebrew", - 0xfb4c, - "bhabengali", - 0x09ad, - "bhadeva", - 0x092d, - "bhagujarati", - 0x0aad, - "bhagurmukhi", - 0x0a2d, - "bhook", - 0x0253, - "bihiragana", - 0x3073, - "bikatakana", - 0x30d3, - "bilabialclick", - 0x0298, - "bindigurmukhi", - 0x0a02, - "birusquare", - 0x3331, - "blackcircle", - 0x25cf, - "blackdiamond", - 0x25c6, - "blackdownpointingtriangle", - 0x25bc, - "blackleftpointingpointer", - 0x25c4, - "blackleftpointingtriangle", - 0x25c0, - "blacklenticularbracketleft", - 0x3010, - "blacklenticularbracketleftvertical", - 0xfe3b, - "blacklenticularbracketright", - 0x3011, - "blacklenticularbracketrightvertical", - 0xfe3c, - "blacklowerlefttriangle", - 0x25e3, - "blacklowerrighttriangle", - 0x25e2, - "blackrectangle", - 0x25ac, - "blackrightpointingpointer", - 0x25ba, - "blackrightpointingtriangle", - 0x25b6, - "blacksmallsquare", - 0x25aa, - "blacksmilingface", - 0x263b, - "blacksquare", - 0x25a0, - "blackstar", - 0x2605, - "blackupperlefttriangle", - 0x25e4, - "blackupperrighttriangle", - 0x25e5, - "blackuppointingsmalltriangle", - 0x25b4, - "blackuppointingtriangle", - 0x25b2, - "blank", - 0x2423, - "blinebelow", - 0x1e07, - "block", - 0x2588, - "bmonospace", - 0xff42, - "bobaimaithai", - 0x0e1a, - "bohiragana", - 0x307c, - "bokatakana", - 0x30dc, - "bparen", - 0x249d, - "bqsquare", - 0x33c3, - "braceex", - 0xf8f4, - "braceleft", - 0x007b, - "braceleftbt", - 0xf8f3, - "braceleftmid", - 0xf8f2, - "braceleftmonospace", - 0xff5b, - "braceleftsmall", - 0xfe5b, - "bracelefttp", - 0xf8f1, - "braceleftvertical", - 0xfe37, - "braceright", - 0x007d, - "bracerightbt", - 0xf8fe, - "bracerightmid", - 0xf8fd, - "bracerightmonospace", - 0xff5d, - "bracerightsmall", - 0xfe5c, - "bracerighttp", - 0xf8fc, - "bracerightvertical", - 0xfe38, - "bracketleft", - 0x005b, - "bracketleftbt", - 0xf8f0, - "bracketleftex", - 0xf8ef, - "bracketleftmonospace", - 0xff3b, - "bracketlefttp", - 0xf8ee, - "bracketright", - 0x005d, - "bracketrightbt", - 0xf8fb, - "bracketrightex", - 0xf8fa, - "bracketrightmonospace", - 0xff3d, - "bracketrighttp", - 0xf8f9, - "breve", - 0x02d8, - "brevebelowcmb", - 0x032e, - "brevecmb", - 0x0306, - "breveinvertedbelowcmb", - 0x032f, - "breveinvertedcmb", - 0x0311, - "breveinverteddoublecmb", - 0x0361, - "bridgebelowcmb", - 0x032a, - "bridgeinvertedbelowcmb", - 0x033a, - "brokenbar", - 0x00a6, - "bstroke", - 0x0180, - "bsuperior", - 0xf6ea, - "btopbar", - 0x0183, - "buhiragana", - 0x3076, - "bukatakana", - 0x30d6, - "bullet", - 0x2022, - "bulletinverse", - 0x25d8, - "bulletoperator", - 0x2219, - "bullseye", - 0x25ce, - "c", - 0x0063, - "caarmenian", - 0x056e, - "cabengali", - 0x099a, - "cacute", - 0x0107, - "cadeva", - 0x091a, - "cagujarati", - 0x0a9a, - "cagurmukhi", - 0x0a1a, - "calsquare", - 0x3388, - "candrabindubengali", - 0x0981, - "candrabinducmb", - 0x0310, - "candrabindudeva", - 0x0901, - "candrabindugujarati", - 0x0a81, - "capslock", - 0x21ea, - "careof", - 0x2105, - "caron", - 0x02c7, - "caronbelowcmb", - 0x032c, - "caroncmb", - 0x030c, - "carriagereturn", - 0x21b5, - "cbopomofo", - 0x3118, - "ccaron", - 0x010d, - "ccedilla", - 0x00e7, - "ccedillaacute", - 0x1e09, - "ccircle", - 0x24d2, - "ccircumflex", - 0x0109, - "ccurl", - 0x0255, - "cdot", - 0x010b, - "cdotaccent", - 0x010b, - "cdsquare", - 0x33c5, - "cedilla", - 0x00b8, - "cedillacmb", - 0x0327, - "cent", - 0x00a2, - "centigrade", - 0x2103, - "centinferior", - 0xf6df, - "centmonospace", - 0xffe0, - "centoldstyle", - 0xf7a2, - "centsuperior", - 0xf6e0, - "chaarmenian", - 0x0579, - "chabengali", - 0x099b, - "chadeva", - 0x091b, - "chagujarati", - 0x0a9b, - "chagurmukhi", - 0x0a1b, - "chbopomofo", - 0x3114, - "cheabkhasiancyrillic", - 0x04bd, - "checkmark", - 0x2713, - "checyrillic", - 0x0447, - "chedescenderabkhasiancyrillic", - 0x04bf, - "chedescendercyrillic", - 0x04b7, - "chedieresiscyrillic", - 0x04f5, - "cheharmenian", - 0x0573, - "chekhakassiancyrillic", - 0x04cc, - "cheverticalstrokecyrillic", - 0x04b9, - "chi", - 0x03c7, - "chieuchacirclekorean", - 0x3277, - "chieuchaparenkorean", - 0x3217, - "chieuchcirclekorean", - 0x3269, - "chieuchkorean", - 0x314a, - "chieuchparenkorean", - 0x3209, - "chochangthai", - 0x0e0a, - "chochanthai", - 0x0e08, - "chochingthai", - 0x0e09, - "chochoethai", - 0x0e0c, - "chook", - 0x0188, - "cieucacirclekorean", - 0x3276, - "cieucaparenkorean", - 0x3216, - "cieuccirclekorean", - 0x3268, - "cieuckorean", - 0x3148, - "cieucparenkorean", - 0x3208, - "cieucuparenkorean", - 0x321c, - "circle", - 0x25cb, - "circlecopyrt", - 0x00a9, - "circlemultiply", - 0x2297, - "circleot", - 0x2299, - "circleplus", - 0x2295, - "circlepostalmark", - 0x3036, - "circlewithlefthalfblack", - 0x25d0, - "circlewithrighthalfblack", - 0x25d1, - "circumflex", - 0x02c6, - "circumflexbelowcmb", - 0x032d, - "circumflexcmb", - 0x0302, - "clear", - 0x2327, - "clickalveolar", - 0x01c2, - "clickdental", - 0x01c0, - "clicklateral", - 0x01c1, - "clickretroflex", - 0x01c3, - "club", - 0x2663, - "clubsuitblack", - 0x2663, - "clubsuitwhite", - 0x2667, - "cmcubedsquare", - 0x33a4, - "cmonospace", - 0xff43, - "cmsquaredsquare", - 0x33a0, - "coarmenian", - 0x0581, - "colon", - 0x003a, - "colonmonetary", - 0x20a1, - "colonmonospace", - 0xff1a, - "colonsign", - 0x20a1, - "colonsmall", - 0xfe55, - "colontriangularhalfmod", - 0x02d1, - "colontriangularmod", - 0x02d0, - "comma", - 0x002c, - "commaabovecmb", - 0x0313, - "commaaboverightcmb", - 0x0315, - "commaaccent", - 0xf6c3, - "commaarabic", - 0x060c, - "commaarmenian", - 0x055d, - "commainferior", - 0xf6e1, - "commamonospace", - 0xff0c, - "commareversedabovecmb", - 0x0314, - "commareversedmod", - 0x02bd, - "commasmall", - 0xfe50, - "commasuperior", - 0xf6e2, - "commaturnedabovecmb", - 0x0312, - "commaturnedmod", - 0x02bb, - "compass", - 0x263c, - "congruent", - 0x2245, - "contourintegral", - 0x222e, - "control", - 0x2303, - "controlACK", - 0x0006, - "controlBEL", - 0x0007, - "controlBS", - 0x0008, - "controlCAN", - 0x0018, - "controlCR", - 0x000d, - "controlDC1", - 0x0011, - "controlDC2", - 0x0012, - "controlDC3", - 0x0013, - "controlDC4", - 0x0014, - "controlDEL", - 0x007f, - "controlDLE", - 0x0010, - "controlEM", - 0x0019, - "controlENQ", - 0x0005, - "controlEOT", - 0x0004, - "controlESC", - 0x001b, - "controlETB", - 0x0017, - "controlETX", - 0x0003, - "controlFF", - 0x000c, - "controlFS", - 0x001c, - "controlGS", - 0x001d, - "controlHT", - 0x0009, - "controlLF", - 0x000a, - "controlNAK", - 0x0015, - "controlNULL", - 0x0000, - "controlRS", - 0x001e, - "controlSI", - 0x000f, - "controlSO", - 0x000e, - "controlSOT", - 0x0002, - "controlSTX", - 0x0001, - "controlSUB", - 0x001a, - "controlSYN", - 0x0016, - "controlUS", - 0x001f, - "controlVT", - 0x000b, - "copyright", - 0x00a9, - "copyrightsans", - 0xf8e9, - "copyrightserif", - 0xf6d9, - "cornerbracketleft", - 0x300c, - "cornerbracketlefthalfwidth", - 0xff62, - "cornerbracketleftvertical", - 0xfe41, - "cornerbracketright", - 0x300d, - "cornerbracketrighthalfwidth", - 0xff63, - "cornerbracketrightvertical", - 0xfe42, - "corporationsquare", - 0x337f, - "cosquare", - 0x33c7, - "coverkgsquare", - 0x33c6, - "cparen", - 0x249e, - "cruzeiro", - 0x20a2, - "cstretched", - 0x0297, - "curlyand", - 0x22cf, - "curlyor", - 0x22ce, - "currency", - 0x00a4, - "cyrBreve", - 0xf6d1, - "cyrFlex", - 0xf6d2, - "cyrbreve", - 0xf6d4, - "cyrflex", - 0xf6d5, - "d", - 0x0064, - "daarmenian", - 0x0564, - "dabengali", - 0x09a6, - "dadarabic", - 0x0636, - "dadeva", - 0x0926, - "dadfinalarabic", - 0xfebe, - "dadinitialarabic", - 0xfebf, - "dadmedialarabic", - 0xfec0, - "dagesh", - 0x05bc, - "dageshhebrew", - 0x05bc, - "dagger", - 0x2020, - "daggerdbl", - 0x2021, - "dagujarati", - 0x0aa6, - "dagurmukhi", - 0x0a26, - "dahiragana", - 0x3060, - "dakatakana", - 0x30c0, - "dalarabic", - 0x062f, - "dalet", - 0x05d3, - "daletdagesh", - 0xfb33, - "daletdageshhebrew", - 0xfb33, - "dalethebrew", - 0x05d3, - "dalfinalarabic", - 0xfeaa, - "dammaarabic", - 0x064f, - "dammalowarabic", - 0x064f, - "dammatanaltonearabic", - 0x064c, - "dammatanarabic", - 0x064c, - "danda", - 0x0964, - "dargahebrew", - 0x05a7, - "dargalefthebrew", - 0x05a7, - "dasiapneumatacyrilliccmb", - 0x0485, - "dblGrave", - 0xf6d3, - "dblanglebracketleft", - 0x300a, - "dblanglebracketleftvertical", - 0xfe3d, - "dblanglebracketright", - 0x300b, - "dblanglebracketrightvertical", - 0xfe3e, - "dblarchinvertedbelowcmb", - 0x032b, - "dblarrowleft", - 0x21d4, - "dblarrowright", - 0x21d2, - "dbldanda", - 0x0965, - "dblgrave", - 0xf6d6, - "dblgravecmb", - 0x030f, - "dblintegral", - 0x222c, - "dbllowline", - 0x2017, - "dbllowlinecmb", - 0x0333, - "dbloverlinecmb", - 0x033f, - "dblprimemod", - 0x02ba, - "dblverticalbar", - 0x2016, - "dblverticallineabovecmb", - 0x030e, - "dbopomofo", - 0x3109, - "dbsquare", - 0x33c8, - "dcaron", - 0x010f, - "dcedilla", - 0x1e11, - "dcircle", - 0x24d3, - "dcircumflexbelow", - 0x1e13, - "dcroat", - 0x0111, - "ddabengali", - 0x09a1, - "ddadeva", - 0x0921, - "ddagujarati", - 0x0aa1, - "ddagurmukhi", - 0x0a21, - "ddalarabic", - 0x0688, - "ddalfinalarabic", - 0xfb89, - "dddhadeva", - 0x095c, - "ddhabengali", - 0x09a2, - "ddhadeva", - 0x0922, - "ddhagujarati", - 0x0aa2, - "ddhagurmukhi", - 0x0a22, - "ddotaccent", - 0x1e0b, - "ddotbelow", - 0x1e0d, - "decimalseparatorarabic", - 0x066b, - "decimalseparatorpersian", - 0x066b, - "decyrillic", - 0x0434, - "degree", - 0x00b0, - "dehihebrew", - 0x05ad, - "dehiragana", - 0x3067, - "deicoptic", - 0x03ef, - "dekatakana", - 0x30c7, - "deleteleft", - 0x232b, - "deleteright", - 0x2326, - "delta", - 0x03b4, - "deltaturned", - 0x018d, - "denominatorminusonenumeratorbengali", - 0x09f8, - "dezh", - 0x02a4, - "dhabengali", - 0x09a7, - "dhadeva", - 0x0927, - "dhagujarati", - 0x0aa7, - "dhagurmukhi", - 0x0a27, - "dhook", - 0x0257, - "dialytikatonos", - 0x0385, - "dialytikatonoscmb", - 0x0344, - "diamond", - 0x2666, - "diamondsuitwhite", - 0x2662, - "dieresis", - 0x00a8, - "dieresisacute", - 0xf6d7, - "dieresisbelowcmb", - 0x0324, - "dieresiscmb", - 0x0308, - "dieresisgrave", - 0xf6d8, - "dieresistonos", - 0x0385, - "dihiragana", - 0x3062, - "dikatakana", - 0x30c2, - "dittomark", - 0x3003, - "divide", - 0x00f7, - "divides", - 0x2223, - "divisionslash", - 0x2215, - "djecyrillic", - 0x0452, - "dkshade", - 0x2593, - "dlinebelow", - 0x1e0f, - "dlsquare", - 0x3397, - "dmacron", - 0x0111, - "dmonospace", - 0xff44, - "dnblock", - 0x2584, - "dochadathai", - 0x0e0e, - "dodekthai", - 0x0e14, - "dohiragana", - 0x3069, - "dokatakana", - 0x30c9, - "dollar", - 0x0024, - "dollarinferior", - 0xf6e3, - "dollarmonospace", - 0xff04, - "dollaroldstyle", - 0xf724, - "dollarsmall", - 0xfe69, - "dollarsuperior", - 0xf6e4, - "dong", - 0x20ab, - "dorusquare", - 0x3326, - "dotaccent", - 0x02d9, - "dotaccentcmb", - 0x0307, - "dotbelowcmb", - 0x0323, - "dotbelowcomb", - 0x0323, - "dotkatakana", - 0x30fb, - "dotlessi", - 0x0131, - "dotlessj", - 0xf6be, - "dotlessjstrokehook", - 0x0284, - "dotmath", - 0x22c5, - "dottedcircle", - 0x25cc, - "doubleyodpatah", - 0xfb1f, - "doubleyodpatahhebrew", - 0xfb1f, - "downtackbelowcmb", - 0x031e, - "downtackmod", - 0x02d5, - "dparen", - 0x249f, - "dsuperior", - 0xf6eb, - "dtail", - 0x0256, - "dtopbar", - 0x018c, - "duhiragana", - 0x3065, - "dukatakana", - 0x30c5, - "dz", - 0x01f3, - "dzaltone", - 0x02a3, - "dzcaron", - 0x01c6, - "dzcurl", - 0x02a5, - "dzeabkhasiancyrillic", - 0x04e1, - "dzecyrillic", - 0x0455, - "dzhecyrillic", - 0x045f, - "e", - 0x0065, - "eacute", - 0x00e9, - "earth", - 0x2641, - "ebengali", - 0x098f, - "ebopomofo", - 0x311c, - "ebreve", - 0x0115, - "ecandradeva", - 0x090d, - "ecandragujarati", - 0x0a8d, - "ecandravowelsigndeva", - 0x0945, - "ecandravowelsigngujarati", - 0x0ac5, - "ecaron", - 0x011b, - "ecedillabreve", - 0x1e1d, - "echarmenian", - 0x0565, - "echyiwnarmenian", - 0x0587, - "ecircle", - 0x24d4, - "ecircumflex", - 0x00ea, - "ecircumflexacute", - 0x1ebf, - "ecircumflexbelow", - 0x1e19, - "ecircumflexdotbelow", - 0x1ec7, - "ecircumflexgrave", - 0x1ec1, - "ecircumflexhookabove", - 0x1ec3, - "ecircumflextilde", - 0x1ec5, - "ecyrillic", - 0x0454, - "edblgrave", - 0x0205, - "edeva", - 0x090f, - "edieresis", - 0x00eb, - "edot", - 0x0117, - "edotaccent", - 0x0117, - "edotbelow", - 0x1eb9, - "eegurmukhi", - 0x0a0f, - "eematragurmukhi", - 0x0a47, - "efcyrillic", - 0x0444, - "egrave", - 0x00e8, - "egujarati", - 0x0a8f, - "eharmenian", - 0x0567, - "ehbopomofo", - 0x311d, - "ehiragana", - 0x3048, - "ehookabove", - 0x1ebb, - "eibopomofo", - 0x311f, - "eight", - 0x0038, - "eightarabic", - 0x0668, - "eightbengali", - 0x09ee, - "eightcircle", - 0x2467, - "eightcircleinversesansserif", - 0x2791, - "eightdeva", - 0x096e, - "eighteencircle", - 0x2471, - "eighteenparen", - 0x2485, - "eighteenperiod", - 0x2499, - "eightgujarati", - 0x0aee, - "eightgurmukhi", - 0x0a6e, - "eighthackarabic", - 0x0668, - "eighthangzhou", - 0x3028, - "eighthnotebeamed", - 0x266b, - "eightideographicparen", - 0x3227, - "eightinferior", - 0x2088, - "eightmonospace", - 0xff18, - "eightoldstyle", - 0xf738, - "eightparen", - 0x247b, - "eightperiod", - 0x248f, - "eightpersian", - 0x06f8, - "eightroman", - 0x2177, - "eightsuperior", - 0x2078, - "eightthai", - 0x0e58, - "einvertedbreve", - 0x0207, - "eiotifiedcyrillic", - 0x0465, - "ekatakana", - 0x30a8, - "ekatakanahalfwidth", - 0xff74, - "ekonkargurmukhi", - 0x0a74, - "ekorean", - 0x3154, - "elcyrillic", - 0x043b, - "element", - 0x2208, - "elevencircle", - 0x246a, - "elevenparen", - 0x247e, - "elevenperiod", - 0x2492, - "elevenroman", - 0x217a, - "ellipsis", - 0x2026, - "ellipsisvertical", - 0x22ee, - "emacron", - 0x0113, - "emacronacute", - 0x1e17, - "emacrongrave", - 0x1e15, - "emcyrillic", - 0x043c, - "emdash", - 0x2014, - "emdashvertical", - 0xfe31, - "emonospace", - 0xff45, - "emphasismarkarmenian", - 0x055b, - "emptyset", - 0x2205, - "enbopomofo", - 0x3123, - "encyrillic", - 0x043d, - "endash", - 0x2013, - "endashvertical", - 0xfe32, - "endescendercyrillic", - 0x04a3, - "eng", - 0x014b, - "engbopomofo", - 0x3125, - "enghecyrillic", - 0x04a5, - "enhookcyrillic", - 0x04c8, - "enspace", - 0x2002, - "eogonek", - 0x0119, - "eokorean", - 0x3153, - "eopen", - 0x025b, - "eopenclosed", - 0x029a, - "eopenreversed", - 0x025c, - "eopenreversedclosed", - 0x025e, - "eopenreversedhook", - 0x025d, - "eparen", - 0x24a0, - "epsilon", - 0x03b5, - "epsilontonos", - 0x03ad, - "equal", - 0x003d, - "equalmonospace", - 0xff1d, - "equalsmall", - 0xfe66, - "equalsuperior", - 0x207c, - "equivalence", - 0x2261, - "erbopomofo", - 0x3126, - "ercyrillic", - 0x0440, - "ereversed", - 0x0258, - "ereversedcyrillic", - 0x044d, - "escyrillic", - 0x0441, - "esdescendercyrillic", - 0x04ab, - "esh", - 0x0283, - "eshcurl", - 0x0286, - "eshortdeva", - 0x090e, - "eshortvowelsigndeva", - 0x0946, - "eshreversedloop", - 0x01aa, - "eshsquatreversed", - 0x0285, - "esmallhiragana", - 0x3047, - "esmallkatakana", - 0x30a7, - "esmallkatakanahalfwidth", - 0xff6a, - "estimated", - 0x212e, - "esuperior", - 0xf6ec, - "eta", - 0x03b7, - "etarmenian", - 0x0568, - "etatonos", - 0x03ae, - "eth", - 0x00f0, - "etilde", - 0x1ebd, - "etildebelow", - 0x1e1b, - "etnahtafoukhhebrew", - 0x0591, - "etnahtafoukhlefthebrew", - 0x0591, - "etnahtahebrew", - 0x0591, - "etnahtalefthebrew", - 0x0591, - "eturned", - 0x01dd, - "eukorean", - 0x3161, - "euro", - 0x20ac, - "evowelsignbengali", - 0x09c7, - "evowelsigndeva", - 0x0947, - "evowelsigngujarati", - 0x0ac7, - "exclam", - 0x0021, - "exclamarmenian", - 0x055c, - "exclamdbl", - 0x203c, - "exclamdown", - 0x00a1, - "exclamdownsmall", - 0xf7a1, - "exclammonospace", - 0xff01, - "exclamsmall", - 0xf721, - "existential", - 0x2203, - "ezh", - 0x0292, - "ezhcaron", - 0x01ef, - "ezhcurl", - 0x0293, - "ezhreversed", - 0x01b9, - "ezhtail", - 0x01ba, - "f", - 0x0066, - "fadeva", - 0x095e, - "fagurmukhi", - 0x0a5e, - "fahrenheit", - 0x2109, - "fathaarabic", - 0x064e, - "fathalowarabic", - 0x064e, - "fathatanarabic", - 0x064b, - "fbopomofo", - 0x3108, - "fcircle", - 0x24d5, - "fdotaccent", - 0x1e1f, - "feharabic", - 0x0641, - "feharmenian", - 0x0586, - "fehfinalarabic", - 0xfed2, - "fehinitialarabic", - 0xfed3, - "fehmedialarabic", - 0xfed4, - "feicoptic", - 0x03e5, - "female", - 0x2640, - "ff", - 0xfb00, - "f_f", - 0xfb00, - "ffi", - 0xfb03, - "ffl", - 0xfb04, - "fi", - 0xfb01, - "fifteencircle", - 0x246e, - "fifteenparen", - 0x2482, - "fifteenperiod", - 0x2496, - "figuredash", - 0x2012, - "filledbox", - 0x25a0, - "filledrect", - 0x25ac, - "finalkaf", - 0x05da, - "finalkafdagesh", - 0xfb3a, - "finalkafdageshhebrew", - 0xfb3a, - "finalkafhebrew", - 0x05da, - "finalmem", - 0x05dd, - "finalmemhebrew", - 0x05dd, - "finalnun", - 0x05df, - "finalnunhebrew", - 0x05df, - "finalpe", - 0x05e3, - "finalpehebrew", - 0x05e3, - "finaltsadi", - 0x05e5, - "finaltsadihebrew", - 0x05e5, - "firsttonechinese", - 0x02c9, - "fisheye", - 0x25c9, - "fitacyrillic", - 0x0473, - "five", - 0x0035, - "fivearabic", - 0x0665, - "fivebengali", - 0x09eb, - "fivecircle", - 0x2464, - "fivecircleinversesansserif", - 0x278e, - "fivedeva", - 0x096b, - "fiveeighths", - 0x215d, - "fivegujarati", - 0x0aeb, - "fivegurmukhi", - 0x0a6b, - "fivehackarabic", - 0x0665, - "fivehangzhou", - 0x3025, - "fiveideographicparen", - 0x3224, - "fiveinferior", - 0x2085, - "fivemonospace", - 0xff15, - "fiveoldstyle", - 0xf735, - "fiveparen", - 0x2478, - "fiveperiod", - 0x248c, - "fivepersian", - 0x06f5, - "fiveroman", - 0x2174, - "fivesuperior", - 0x2075, - "fivethai", - 0x0e55, - "fl", - 0xfb02, - "florin", - 0x0192, - "fmonospace", - 0xff46, - "fmsquare", - 0x3399, - "fofanthai", - 0x0e1f, - "fofathai", - 0x0e1d, - "fongmanthai", - 0x0e4f, - "forall", - 0x2200, - "four", - 0x0034, - "fourarabic", - 0x0664, - "fourbengali", - 0x09ea, - "fourcircle", - 0x2463, - "fourcircleinversesansserif", - 0x278d, - "fourdeva", - 0x096a, - "fourgujarati", - 0x0aea, - "fourgurmukhi", - 0x0a6a, - "fourhackarabic", - 0x0664, - "fourhangzhou", - 0x3024, - "fourideographicparen", - 0x3223, - "fourinferior", - 0x2084, - "fourmonospace", - 0xff14, - "fournumeratorbengali", - 0x09f7, - "fouroldstyle", - 0xf734, - "fourparen", - 0x2477, - "fourperiod", - 0x248b, - "fourpersian", - 0x06f4, - "fourroman", - 0x2173, - "foursuperior", - 0x2074, - "fourteencircle", - 0x246d, - "fourteenparen", - 0x2481, - "fourteenperiod", - 0x2495, - "fourthai", - 0x0e54, - "fourthtonechinese", - 0x02cb, - "fparen", - 0x24a1, - "fraction", - 0x2044, - "franc", - 0x20a3, - "g", - 0x0067, - "gabengali", - 0x0997, - "gacute", - 0x01f5, - "gadeva", - 0x0917, - "gafarabic", - 0x06af, - "gaffinalarabic", - 0xfb93, - "gafinitialarabic", - 0xfb94, - "gafmedialarabic", - 0xfb95, - "gagujarati", - 0x0a97, - "gagurmukhi", - 0x0a17, - "gahiragana", - 0x304c, - "gakatakana", - 0x30ac, - "gamma", - 0x03b3, - "gammalatinsmall", - 0x0263, - "gammasuperior", - 0x02e0, - "gangiacoptic", - 0x03eb, - "gbopomofo", - 0x310d, - "gbreve", - 0x011f, - "gcaron", - 0x01e7, - "gcedilla", - 0x0123, - "gcircle", - 0x24d6, - "gcircumflex", - 0x011d, - "gcommaaccent", - 0x0123, - "gdot", - 0x0121, - "gdotaccent", - 0x0121, - "gecyrillic", - 0x0433, - "gehiragana", - 0x3052, - "gekatakana", - 0x30b2, - "geometricallyequal", - 0x2251, - "gereshaccenthebrew", - 0x059c, - "gereshhebrew", - 0x05f3, - "gereshmuqdamhebrew", - 0x059d, - "germandbls", - 0x00df, - "gershayimaccenthebrew", - 0x059e, - "gershayimhebrew", - 0x05f4, - "getamark", - 0x3013, - "ghabengali", - 0x0998, - "ghadarmenian", - 0x0572, - "ghadeva", - 0x0918, - "ghagujarati", - 0x0a98, - "ghagurmukhi", - 0x0a18, - "ghainarabic", - 0x063a, - "ghainfinalarabic", - 0xfece, - "ghaininitialarabic", - 0xfecf, - "ghainmedialarabic", - 0xfed0, - "ghemiddlehookcyrillic", - 0x0495, - "ghestrokecyrillic", - 0x0493, - "gheupturncyrillic", - 0x0491, - "ghhadeva", - 0x095a, - "ghhagurmukhi", - 0x0a5a, - "ghook", - 0x0260, - "ghzsquare", - 0x3393, - "gihiragana", - 0x304e, - "gikatakana", - 0x30ae, - "gimarmenian", - 0x0563, - "gimel", - 0x05d2, - "gimeldagesh", - 0xfb32, - "gimeldageshhebrew", - 0xfb32, - "gimelhebrew", - 0x05d2, - "gjecyrillic", - 0x0453, - "glottalinvertedstroke", - 0x01be, - "glottalstop", - 0x0294, - "glottalstopinverted", - 0x0296, - "glottalstopmod", - 0x02c0, - "glottalstopreversed", - 0x0295, - "glottalstopreversedmod", - 0x02c1, - "glottalstopreversedsuperior", - 0x02e4, - "glottalstopstroke", - 0x02a1, - "glottalstopstrokereversed", - 0x02a2, - "gmacron", - 0x1e21, - "gmonospace", - 0xff47, - "gohiragana", - 0x3054, - "gokatakana", - 0x30b4, - "gparen", - 0x24a2, - "gpasquare", - 0x33ac, - "gradient", - 0x2207, - "grave", - 0x0060, - "gravebelowcmb", - 0x0316, - "gravecmb", - 0x0300, - "gravecomb", - 0x0300, - "gravedeva", - 0x0953, - "gravelowmod", - 0x02ce, - "gravemonospace", - 0xff40, - "gravetonecmb", - 0x0340, - "greater", - 0x003e, - "greaterequal", - 0x2265, - "greaterequalorless", - 0x22db, - "greatermonospace", - 0xff1e, - "greaterorequivalent", - 0x2273, - "greaterorless", - 0x2277, - "greateroverequal", - 0x2267, - "greatersmall", - 0xfe65, - "gscript", - 0x0261, - "gstroke", - 0x01e5, - "guhiragana", - 0x3050, - "guillemotleft", - 0x00ab, - "guillemotright", - 0x00bb, - "guilsinglleft", - 0x2039, - "guilsinglright", - 0x203a, - "gukatakana", - 0x30b0, - "guramusquare", - 0x3318, - "gysquare", - 0x33c9, - "h", - 0x0068, - "haabkhasiancyrillic", - 0x04a9, - "haaltonearabic", - 0x06c1, - "habengali", - 0x09b9, - "hadescendercyrillic", - 0x04b3, - "hadeva", - 0x0939, - "hagujarati", - 0x0ab9, - "hagurmukhi", - 0x0a39, - "haharabic", - 0x062d, - "hahfinalarabic", - 0xfea2, - "hahinitialarabic", - 0xfea3, - "hahiragana", - 0x306f, - "hahmedialarabic", - 0xfea4, - "haitusquare", - 0x332a, - "hakatakana", - 0x30cf, - "hakatakanahalfwidth", - 0xff8a, - "halantgurmukhi", - 0x0a4d, - "hamzaarabic", - 0x0621, - "hamzalowarabic", - 0x0621, - "hangulfiller", - 0x3164, - "hardsigncyrillic", - 0x044a, - "harpoonleftbarbup", - 0x21bc, - "harpoonrightbarbup", - 0x21c0, - "hasquare", - 0x33ca, - "hatafpatah", - 0x05b2, - "hatafpatah16", - 0x05b2, - "hatafpatah23", - 0x05b2, - "hatafpatah2f", - 0x05b2, - "hatafpatahhebrew", - 0x05b2, - "hatafpatahnarrowhebrew", - 0x05b2, - "hatafpatahquarterhebrew", - 0x05b2, - "hatafpatahwidehebrew", - 0x05b2, - "hatafqamats", - 0x05b3, - "hatafqamats1b", - 0x05b3, - "hatafqamats28", - 0x05b3, - "hatafqamats34", - 0x05b3, - "hatafqamatshebrew", - 0x05b3, - "hatafqamatsnarrowhebrew", - 0x05b3, - "hatafqamatsquarterhebrew", - 0x05b3, - "hatafqamatswidehebrew", - 0x05b3, - "hatafsegol", - 0x05b1, - "hatafsegol17", - 0x05b1, - "hatafsegol24", - 0x05b1, - "hatafsegol30", - 0x05b1, - "hatafsegolhebrew", - 0x05b1, - "hatafsegolnarrowhebrew", - 0x05b1, - "hatafsegolquarterhebrew", - 0x05b1, - "hatafsegolwidehebrew", - 0x05b1, - "hbar", - 0x0127, - "hbopomofo", - 0x310f, - "hbrevebelow", - 0x1e2b, - "hcedilla", - 0x1e29, - "hcircle", - 0x24d7, - "hcircumflex", - 0x0125, - "hdieresis", - 0x1e27, - "hdotaccent", - 0x1e23, - "hdotbelow", - 0x1e25, - "he", - 0x05d4, - "heart", - 0x2665, - "heartsuitblack", - 0x2665, - "heartsuitwhite", - 0x2661, - "hedagesh", - 0xfb34, - "hedageshhebrew", - 0xfb34, - "hehaltonearabic", - 0x06c1, - "heharabic", - 0x0647, - "hehebrew", - 0x05d4, - "hehfinalaltonearabic", - 0xfba7, - "hehfinalalttwoarabic", - 0xfeea, - "hehfinalarabic", - 0xfeea, - "hehhamzaabovefinalarabic", - 0xfba5, - "hehhamzaaboveisolatedarabic", - 0xfba4, - "hehinitialaltonearabic", - 0xfba8, - "hehinitialarabic", - 0xfeeb, - "hehiragana", - 0x3078, - "hehmedialaltonearabic", - 0xfba9, - "hehmedialarabic", - 0xfeec, - "heiseierasquare", - 0x337b, - "hekatakana", - 0x30d8, - "hekatakanahalfwidth", - 0xff8d, - "hekutaarusquare", - 0x3336, - "henghook", - 0x0267, - "herutusquare", - 0x3339, - "het", - 0x05d7, - "hethebrew", - 0x05d7, - "hhook", - 0x0266, - "hhooksuperior", - 0x02b1, - "hieuhacirclekorean", - 0x327b, - "hieuhaparenkorean", - 0x321b, - "hieuhcirclekorean", - 0x326d, - "hieuhkorean", - 0x314e, - "hieuhparenkorean", - 0x320d, - "hihiragana", - 0x3072, - "hikatakana", - 0x30d2, - "hikatakanahalfwidth", - 0xff8b, - "hiriq", - 0x05b4, - "hiriq14", - 0x05b4, - "hiriq21", - 0x05b4, - "hiriq2d", - 0x05b4, - "hiriqhebrew", - 0x05b4, - "hiriqnarrowhebrew", - 0x05b4, - "hiriqquarterhebrew", - 0x05b4, - "hiriqwidehebrew", - 0x05b4, - "hlinebelow", - 0x1e96, - "hmonospace", - 0xff48, - "hoarmenian", - 0x0570, - "hohipthai", - 0x0e2b, - "hohiragana", - 0x307b, - "hokatakana", - 0x30db, - "hokatakanahalfwidth", - 0xff8e, - "holam", - 0x05b9, - "holam19", - 0x05b9, - "holam26", - 0x05b9, - "holam32", - 0x05b9, - "holamhebrew", - 0x05b9, - "holamnarrowhebrew", - 0x05b9, - "holamquarterhebrew", - 0x05b9, - "holamwidehebrew", - 0x05b9, - "honokhukthai", - 0x0e2e, - "hookabovecomb", - 0x0309, - "hookcmb", - 0x0309, - "hookpalatalizedbelowcmb", - 0x0321, - "hookretroflexbelowcmb", - 0x0322, - "hoonsquare", - 0x3342, - "horicoptic", - 0x03e9, - "horizontalbar", - 0x2015, - "horncmb", - 0x031b, - "hotsprings", - 0x2668, - "house", - 0x2302, - "hparen", - 0x24a3, - "hsuperior", - 0x02b0, - "hturned", - 0x0265, - "huhiragana", - 0x3075, - "huiitosquare", - 0x3333, - "hukatakana", - 0x30d5, - "hukatakanahalfwidth", - 0xff8c, - "hungarumlaut", - 0x02dd, - "hungarumlautcmb", - 0x030b, - "hv", - 0x0195, - "hyphen", - 0x002d, - "hypheninferior", - 0xf6e5, - "hyphenmonospace", - 0xff0d, - "hyphensmall", - 0xfe63, - "hyphensuperior", - 0xf6e6, - "hyphentwo", - 0x2010, - "i", - 0x0069, - "iacute", - 0x00ed, - "iacyrillic", - 0x044f, - "ibengali", - 0x0987, - "ibopomofo", - 0x3127, - "ibreve", - 0x012d, - "icaron", - 0x01d0, - "icircle", - 0x24d8, - "icircumflex", - 0x00ee, - "icyrillic", - 0x0456, - "idblgrave", - 0x0209, - "ideographearthcircle", - 0x328f, - "ideographfirecircle", - 0x328b, - "ideographicallianceparen", - 0x323f, - "ideographiccallparen", - 0x323a, - "ideographiccentrecircle", - 0x32a5, - "ideographicclose", - 0x3006, - "ideographiccomma", - 0x3001, - "ideographiccommaleft", - 0xff64, - "ideographiccongratulationparen", - 0x3237, - "ideographiccorrectcircle", - 0x32a3, - "ideographicearthparen", - 0x322f, - "ideographicenterpriseparen", - 0x323d, - "ideographicexcellentcircle", - 0x329d, - "ideographicfestivalparen", - 0x3240, - "ideographicfinancialcircle", - 0x3296, - "ideographicfinancialparen", - 0x3236, - "ideographicfireparen", - 0x322b, - "ideographichaveparen", - 0x3232, - "ideographichighcircle", - 0x32a4, - "ideographiciterationmark", - 0x3005, - "ideographiclaborcircle", - 0x3298, - "ideographiclaborparen", - 0x3238, - "ideographicleftcircle", - 0x32a7, - "ideographiclowcircle", - 0x32a6, - "ideographicmedicinecircle", - 0x32a9, - "ideographicmetalparen", - 0x322e, - "ideographicmoonparen", - 0x322a, - "ideographicnameparen", - 0x3234, - "ideographicperiod", - 0x3002, - "ideographicprintcircle", - 0x329e, - "ideographicreachparen", - 0x3243, - "ideographicrepresentparen", - 0x3239, - "ideographicresourceparen", - 0x323e, - "ideographicrightcircle", - 0x32a8, - "ideographicsecretcircle", - 0x3299, - "ideographicselfparen", - 0x3242, - "ideographicsocietyparen", - 0x3233, - "ideographicspace", - 0x3000, - "ideographicspecialparen", - 0x3235, - "ideographicstockparen", - 0x3231, - "ideographicstudyparen", - 0x323b, - "ideographicsunparen", - 0x3230, - "ideographicsuperviseparen", - 0x323c, - "ideographicwaterparen", - 0x322c, - "ideographicwoodparen", - 0x322d, - "ideographiczero", - 0x3007, - "ideographmetalcircle", - 0x328e, - "ideographmooncircle", - 0x328a, - "ideographnamecircle", - 0x3294, - "ideographsuncircle", - 0x3290, - "ideographwatercircle", - 0x328c, - "ideographwoodcircle", - 0x328d, - "ideva", - 0x0907, - "idieresis", - 0x00ef, - "idieresisacute", - 0x1e2f, - "idieresiscyrillic", - 0x04e5, - "idotbelow", - 0x1ecb, - "iebrevecyrillic", - 0x04d7, - "iecyrillic", - 0x0435, - "ieungacirclekorean", - 0x3275, - "ieungaparenkorean", - 0x3215, - "ieungcirclekorean", - 0x3267, - "ieungkorean", - 0x3147, - "ieungparenkorean", - 0x3207, - "igrave", - 0x00ec, - "igujarati", - 0x0a87, - "igurmukhi", - 0x0a07, - "ihiragana", - 0x3044, - "ihookabove", - 0x1ec9, - "iibengali", - 0x0988, - "iicyrillic", - 0x0438, - "iideva", - 0x0908, - "iigujarati", - 0x0a88, - "iigurmukhi", - 0x0a08, - "iimatragurmukhi", - 0x0a40, - "iinvertedbreve", - 0x020b, - "iishortcyrillic", - 0x0439, - "iivowelsignbengali", - 0x09c0, - "iivowelsigndeva", - 0x0940, - "iivowelsigngujarati", - 0x0ac0, - "ij", - 0x0133, - "ikatakana", - 0x30a4, - "ikatakanahalfwidth", - 0xff72, - "ikorean", - 0x3163, - "ilde", - 0x02dc, - "iluyhebrew", - 0x05ac, - "imacron", - 0x012b, - "imacroncyrillic", - 0x04e3, - "imageorapproximatelyequal", - 0x2253, - "imatragurmukhi", - 0x0a3f, - "imonospace", - 0xff49, - "increment", - 0x2206, - "infinity", - 0x221e, - "iniarmenian", - 0x056b, - "integral", - 0x222b, - "integralbottom", - 0x2321, - "integralbt", - 0x2321, - "integralex", - 0xf8f5, - "integraltop", - 0x2320, - "integraltp", - 0x2320, - "intersection", - 0x2229, - "intisquare", - 0x3305, - "invbullet", - 0x25d8, - "invcircle", - 0x25d9, - "invsmileface", - 0x263b, - "iocyrillic", - 0x0451, - "iogonek", - 0x012f, - "iota", - 0x03b9, - "iotadieresis", - 0x03ca, - "iotadieresistonos", - 0x0390, - "iotalatin", - 0x0269, - "iotatonos", - 0x03af, - "iparen", - 0x24a4, - "irigurmukhi", - 0x0a72, - "ismallhiragana", - 0x3043, - "ismallkatakana", - 0x30a3, - "ismallkatakanahalfwidth", - 0xff68, - "issharbengali", - 0x09fa, - "istroke", - 0x0268, - "isuperior", - 0xf6ed, - "iterationhiragana", - 0x309d, - "iterationkatakana", - 0x30fd, - "itilde", - 0x0129, - "itildebelow", - 0x1e2d, - "iubopomofo", - 0x3129, - "iucyrillic", - 0x044e, - "ivowelsignbengali", - 0x09bf, - "ivowelsigndeva", - 0x093f, - "ivowelsigngujarati", - 0x0abf, - "izhitsacyrillic", - 0x0475, - "izhitsadblgravecyrillic", - 0x0477, - "j", - 0x006a, - "jaarmenian", - 0x0571, - "jabengali", - 0x099c, - "jadeva", - 0x091c, - "jagujarati", - 0x0a9c, - "jagurmukhi", - 0x0a1c, - "jbopomofo", - 0x3110, - "jcaron", - 0x01f0, - "jcircle", - 0x24d9, - "jcircumflex", - 0x0135, - "jcrossedtail", - 0x029d, - "jdotlessstroke", - 0x025f, - "jecyrillic", - 0x0458, - "jeemarabic", - 0x062c, - "jeemfinalarabic", - 0xfe9e, - "jeeminitialarabic", - 0xfe9f, - "jeemmedialarabic", - 0xfea0, - "jeharabic", - 0x0698, - "jehfinalarabic", - 0xfb8b, - "jhabengali", - 0x099d, - "jhadeva", - 0x091d, - "jhagujarati", - 0x0a9d, - "jhagurmukhi", - 0x0a1d, - "jheharmenian", - 0x057b, - "jis", - 0x3004, - "jmonospace", - 0xff4a, - "jparen", - 0x24a5, - "jsuperior", - 0x02b2, - "k", - 0x006b, - "kabashkircyrillic", - 0x04a1, - "kabengali", - 0x0995, - "kacute", - 0x1e31, - "kacyrillic", - 0x043a, - "kadescendercyrillic", - 0x049b, - "kadeva", - 0x0915, - "kaf", - 0x05db, - "kafarabic", - 0x0643, - "kafdagesh", - 0xfb3b, - "kafdageshhebrew", - 0xfb3b, - "kaffinalarabic", - 0xfeda, - "kafhebrew", - 0x05db, - "kafinitialarabic", - 0xfedb, - "kafmedialarabic", - 0xfedc, - "kafrafehebrew", - 0xfb4d, - "kagujarati", - 0x0a95, - "kagurmukhi", - 0x0a15, - "kahiragana", - 0x304b, - "kahookcyrillic", - 0x04c4, - "kakatakana", - 0x30ab, - "kakatakanahalfwidth", - 0xff76, - "kappa", - 0x03ba, - "kappasymbolgreek", - 0x03f0, - "kapyeounmieumkorean", - 0x3171, - "kapyeounphieuphkorean", - 0x3184, - "kapyeounpieupkorean", - 0x3178, - "kapyeounssangpieupkorean", - 0x3179, - "karoriisquare", - 0x330d, - "kashidaautoarabic", - 0x0640, - "kashidaautonosidebearingarabic", - 0x0640, - "kasmallkatakana", - 0x30f5, - "kasquare", - 0x3384, - "kasraarabic", - 0x0650, - "kasratanarabic", - 0x064d, - "kastrokecyrillic", - 0x049f, - "katahiraprolongmarkhalfwidth", - 0xff70, - "kaverticalstrokecyrillic", - 0x049d, - "kbopomofo", - 0x310e, - "kcalsquare", - 0x3389, - "kcaron", - 0x01e9, - "kcedilla", - 0x0137, - "kcircle", - 0x24da, - "kcommaaccent", - 0x0137, - "kdotbelow", - 0x1e33, - "keharmenian", - 0x0584, - "kehiragana", - 0x3051, - "kekatakana", - 0x30b1, - "kekatakanahalfwidth", - 0xff79, - "kenarmenian", - 0x056f, - "kesmallkatakana", - 0x30f6, - "kgreenlandic", - 0x0138, - "khabengali", - 0x0996, - "khacyrillic", - 0x0445, - "khadeva", - 0x0916, - "khagujarati", - 0x0a96, - "khagurmukhi", - 0x0a16, - "khaharabic", - 0x062e, - "khahfinalarabic", - 0xfea6, - "khahinitialarabic", - 0xfea7, - "khahmedialarabic", - 0xfea8, - "kheicoptic", - 0x03e7, - "khhadeva", - 0x0959, - "khhagurmukhi", - 0x0a59, - "khieukhacirclekorean", - 0x3278, - "khieukhaparenkorean", - 0x3218, - "khieukhcirclekorean", - 0x326a, - "khieukhkorean", - 0x314b, - "khieukhparenkorean", - 0x320a, - "khokhaithai", - 0x0e02, - "khokhonthai", - 0x0e05, - "khokhuatthai", - 0x0e03, - "khokhwaithai", - 0x0e04, - "khomutthai", - 0x0e5b, - "khook", - 0x0199, - "khorakhangthai", - 0x0e06, - "khzsquare", - 0x3391, - "kihiragana", - 0x304d, - "kikatakana", - 0x30ad, - "kikatakanahalfwidth", - 0xff77, - "kiroguramusquare", - 0x3315, - "kiromeetorusquare", - 0x3316, - "kirosquare", - 0x3314, - "kiyeokacirclekorean", - 0x326e, - "kiyeokaparenkorean", - 0x320e, - "kiyeokcirclekorean", - 0x3260, - "kiyeokkorean", - 0x3131, - "kiyeokparenkorean", - 0x3200, - "kiyeoksioskorean", - 0x3133, - "kjecyrillic", - 0x045c, - "klinebelow", - 0x1e35, - "klsquare", - 0x3398, - "kmcubedsquare", - 0x33a6, - "kmonospace", - 0xff4b, - "kmsquaredsquare", - 0x33a2, - "kohiragana", - 0x3053, - "kohmsquare", - 0x33c0, - "kokaithai", - 0x0e01, - "kokatakana", - 0x30b3, - "kokatakanahalfwidth", - 0xff7a, - "kooposquare", - 0x331e, - "koppacyrillic", - 0x0481, - "koreanstandardsymbol", - 0x327f, - "koroniscmb", - 0x0343, - "kparen", - 0x24a6, - "kpasquare", - 0x33aa, - "ksicyrillic", - 0x046f, - "ktsquare", - 0x33cf, - "kturned", - 0x029e, - "kuhiragana", - 0x304f, - "kukatakana", - 0x30af, - "kukatakanahalfwidth", - 0xff78, - "kvsquare", - 0x33b8, - "kwsquare", - 0x33be, - "l", - 0x006c, - "labengali", - 0x09b2, - "lacute", - 0x013a, - "ladeva", - 0x0932, - "lagujarati", - 0x0ab2, - "lagurmukhi", - 0x0a32, - "lakkhangyaothai", - 0x0e45, - "lamaleffinalarabic", - 0xfefc, - "lamalefhamzaabovefinalarabic", - 0xfef8, - "lamalefhamzaaboveisolatedarabic", - 0xfef7, - "lamalefhamzabelowfinalarabic", - 0xfefa, - "lamalefhamzabelowisolatedarabic", - 0xfef9, - "lamalefisolatedarabic", - 0xfefb, - "lamalefmaddaabovefinalarabic", - 0xfef6, - "lamalefmaddaaboveisolatedarabic", - 0xfef5, - "lamarabic", - 0x0644, - "lambda", - 0x03bb, - "lambdastroke", - 0x019b, - "lamed", - 0x05dc, - "lameddagesh", - 0xfb3c, - "lameddageshhebrew", - 0xfb3c, - "lamedhebrew", - 0x05dc, - "lamfinalarabic", - 0xfede, - "lamhahinitialarabic", - 0xfcca, - "laminitialarabic", - 0xfedf, - "lamjeeminitialarabic", - 0xfcc9, - "lamkhahinitialarabic", - 0xfccb, - "lamlamhehisolatedarabic", - 0xfdf2, - "lammedialarabic", - 0xfee0, - "lammeemhahinitialarabic", - 0xfd88, - "lammeeminitialarabic", - 0xfccc, - "largecircle", - 0x25ef, - "lbar", - 0x019a, - "lbelt", - 0x026c, - "lbopomofo", - 0x310c, - "lcaron", - 0x013e, - "lcedilla", - 0x013c, - "lcircle", - 0x24db, - "lcircumflexbelow", - 0x1e3d, - "lcommaaccent", - 0x013c, - "ldot", - 0x0140, - "ldotaccent", - 0x0140, - "ldotbelow", - 0x1e37, - "ldotbelowmacron", - 0x1e39, - "leftangleabovecmb", - 0x031a, - "lefttackbelowcmb", - 0x0318, - "less", - 0x003c, - "lessequal", - 0x2264, - "lessequalorgreater", - 0x22da, - "lessmonospace", - 0xff1c, - "lessorequivalent", - 0x2272, - "lessorgreater", - 0x2276, - "lessoverequal", - 0x2266, - "lesssmall", - 0xfe64, - "lezh", - 0x026e, - "lfblock", - 0x258c, - "lhookretroflex", - 0x026d, - "lira", - 0x20a4, - "liwnarmenian", - 0x056c, - "lj", - 0x01c9, - "ljecyrillic", - 0x0459, - "ll", - 0xf6c0, - "lladeva", - 0x0933, - "llagujarati", - 0x0ab3, - "llinebelow", - 0x1e3b, - "llladeva", - 0x0934, - "llvocalicbengali", - 0x09e1, - "llvocalicdeva", - 0x0961, - "llvocalicvowelsignbengali", - 0x09e3, - "llvocalicvowelsigndeva", - 0x0963, - "lmiddletilde", - 0x026b, - "lmonospace", - 0xff4c, - "lmsquare", - 0x33d0, - "lochulathai", - 0x0e2c, - "logicaland", - 0x2227, - "logicalnot", - 0x00ac, - "logicalnotreversed", - 0x2310, - "logicalor", - 0x2228, - "lolingthai", - 0x0e25, - "longs", - 0x017f, - "lowlinecenterline", - 0xfe4e, - "lowlinecmb", - 0x0332, - "lowlinedashed", - 0xfe4d, - "lozenge", - 0x25ca, - "lparen", - 0x24a7, - "lslash", - 0x0142, - "lsquare", - 0x2113, - "lsuperior", - 0xf6ee, - "ltshade", - 0x2591, - "luthai", - 0x0e26, - "lvocalicbengali", - 0x098c, - "lvocalicdeva", - 0x090c, - "lvocalicvowelsignbengali", - 0x09e2, - "lvocalicvowelsigndeva", - 0x0962, - "lxsquare", - 0x33d3, - "m", - 0x006d, - "mabengali", - 0x09ae, - "macron", - 0x00af, - "macronbelowcmb", - 0x0331, - "macroncmb", - 0x0304, - "macronlowmod", - 0x02cd, - "macronmonospace", - 0xffe3, - "macute", - 0x1e3f, - "madeva", - 0x092e, - "magujarati", - 0x0aae, - "magurmukhi", - 0x0a2e, - "mahapakhhebrew", - 0x05a4, - "mahapakhlefthebrew", - 0x05a4, - "mahiragana", - 0x307e, - "maichattawalowleftthai", - 0xf895, - "maichattawalowrightthai", - 0xf894, - "maichattawathai", - 0x0e4b, - "maichattawaupperleftthai", - 0xf893, - "maieklowleftthai", - 0xf88c, - "maieklowrightthai", - 0xf88b, - "maiekthai", - 0x0e48, - "maiekupperleftthai", - 0xf88a, - "maihanakatleftthai", - 0xf884, - "maihanakatthai", - 0x0e31, - "maitaikhuleftthai", - 0xf889, - "maitaikhuthai", - 0x0e47, - "maitholowleftthai", - 0xf88f, - "maitholowrightthai", - 0xf88e, - "maithothai", - 0x0e49, - "maithoupperleftthai", - 0xf88d, - "maitrilowleftthai", - 0xf892, - "maitrilowrightthai", - 0xf891, - "maitrithai", - 0x0e4a, - "maitriupperleftthai", - 0xf890, - "maiyamokthai", - 0x0e46, - "makatakana", - 0x30de, - "makatakanahalfwidth", - 0xff8f, - "male", - 0x2642, - "mansyonsquare", - 0x3347, - "maqafhebrew", - 0x05be, - "mars", - 0x2642, - "masoracirclehebrew", - 0x05af, - "masquare", - 0x3383, - "mbopomofo", - 0x3107, - "mbsquare", - 0x33d4, - "mcircle", - 0x24dc, - "mcubedsquare", - 0x33a5, - "mdotaccent", - 0x1e41, - "mdotbelow", - 0x1e43, - "meemarabic", - 0x0645, - "meemfinalarabic", - 0xfee2, - "meeminitialarabic", - 0xfee3, - "meemmedialarabic", - 0xfee4, - "meemmeeminitialarabic", - 0xfcd1, - "meemmeemisolatedarabic", - 0xfc48, - "meetorusquare", - 0x334d, - "mehiragana", - 0x3081, - "meizierasquare", - 0x337e, - "mekatakana", - 0x30e1, - "mekatakanahalfwidth", - 0xff92, - "mem", - 0x05de, - "memdagesh", - 0xfb3e, - "memdageshhebrew", - 0xfb3e, - "memhebrew", - 0x05de, - "menarmenian", - 0x0574, - "merkhahebrew", - 0x05a5, - "merkhakefulahebrew", - 0x05a6, - "merkhakefulalefthebrew", - 0x05a6, - "merkhalefthebrew", - 0x05a5, - "mhook", - 0x0271, - "mhzsquare", - 0x3392, - "middledotkatakanahalfwidth", - 0xff65, - "middot", - 0x00b7, - "mieumacirclekorean", - 0x3272, - "mieumaparenkorean", - 0x3212, - "mieumcirclekorean", - 0x3264, - "mieumkorean", - 0x3141, - "mieumpansioskorean", - 0x3170, - "mieumparenkorean", - 0x3204, - "mieumpieupkorean", - 0x316e, - "mieumsioskorean", - 0x316f, - "mihiragana", - 0x307f, - "mikatakana", - 0x30df, - "mikatakanahalfwidth", - 0xff90, - "minus", - 0x2212, - "minusbelowcmb", - 0x0320, - "minuscircle", - 0x2296, - "minusmod", - 0x02d7, - "minusplus", - 0x2213, - "minute", - 0x2032, - "miribaarusquare", - 0x334a, - "mirisquare", - 0x3349, - "mlonglegturned", - 0x0270, - "mlsquare", - 0x3396, - "mmcubedsquare", - 0x33a3, - "mmonospace", - 0xff4d, - "mmsquaredsquare", - 0x339f, - "mohiragana", - 0x3082, - "mohmsquare", - 0x33c1, - "mokatakana", - 0x30e2, - "mokatakanahalfwidth", - 0xff93, - "molsquare", - 0x33d6, - "momathai", - 0x0e21, - "moverssquare", - 0x33a7, - "moverssquaredsquare", - 0x33a8, - "mparen", - 0x24a8, - "mpasquare", - 0x33ab, - "mssquare", - 0x33b3, - "msuperior", - 0xf6ef, - "mturned", - 0x026f, - "mu", - 0x00b5, - "mu1", - 0x00b5, - "muasquare", - 0x3382, - "muchgreater", - 0x226b, - "muchless", - 0x226a, - "mufsquare", - 0x338c, - "mugreek", - 0x03bc, - "mugsquare", - 0x338d, - "muhiragana", - 0x3080, - "mukatakana", - 0x30e0, - "mukatakanahalfwidth", - 0xff91, - "mulsquare", - 0x3395, - "multiply", - 0x00d7, - "mumsquare", - 0x339b, - "munahhebrew", - 0x05a3, - "munahlefthebrew", - 0x05a3, - "musicalnote", - 0x266a, - "musicalnotedbl", - 0x266b, - "musicflatsign", - 0x266d, - "musicsharpsign", - 0x266f, - "mussquare", - 0x33b2, - "muvsquare", - 0x33b6, - "muwsquare", - 0x33bc, - "mvmegasquare", - 0x33b9, - "mvsquare", - 0x33b7, - "mwmegasquare", - 0x33bf, - "mwsquare", - 0x33bd, - "n", - 0x006e, - "nabengali", - 0x09a8, - "nabla", - 0x2207, - "nacute", - 0x0144, - "nadeva", - 0x0928, - "nagujarati", - 0x0aa8, - "nagurmukhi", - 0x0a28, - "nahiragana", - 0x306a, - "nakatakana", - 0x30ca, - "nakatakanahalfwidth", - 0xff85, - "napostrophe", - 0x0149, - "nasquare", - 0x3381, - "nbopomofo", - 0x310b, - "nbspace", - 0x00a0, - "ncaron", - 0x0148, - "ncedilla", - 0x0146, - "ncircle", - 0x24dd, - "ncircumflexbelow", - 0x1e4b, - "ncommaaccent", - 0x0146, - "ndotaccent", - 0x1e45, - "ndotbelow", - 0x1e47, - "nehiragana", - 0x306d, - "nekatakana", - 0x30cd, - "nekatakanahalfwidth", - 0xff88, - "newsheqelsign", - 0x20aa, - "nfsquare", - 0x338b, - "ngabengali", - 0x0999, - "ngadeva", - 0x0919, - "ngagujarati", - 0x0a99, - "ngagurmukhi", - 0x0a19, - "ngonguthai", - 0x0e07, - "nhiragana", - 0x3093, - "nhookleft", - 0x0272, - "nhookretroflex", - 0x0273, - "nieunacirclekorean", - 0x326f, - "nieunaparenkorean", - 0x320f, - "nieuncieuckorean", - 0x3135, - "nieuncirclekorean", - 0x3261, - "nieunhieuhkorean", - 0x3136, - "nieunkorean", - 0x3134, - "nieunpansioskorean", - 0x3168, - "nieunparenkorean", - 0x3201, - "nieunsioskorean", - 0x3167, - "nieuntikeutkorean", - 0x3166, - "nihiragana", - 0x306b, - "nikatakana", - 0x30cb, - "nikatakanahalfwidth", - 0xff86, - "nikhahitleftthai", - 0xf899, - "nikhahitthai", - 0x0e4d, - "nine", - 0x0039, - "ninearabic", - 0x0669, - "ninebengali", - 0x09ef, - "ninecircle", - 0x2468, - "ninecircleinversesansserif", - 0x2792, - "ninedeva", - 0x096f, - "ninegujarati", - 0x0aef, - "ninegurmukhi", - 0x0a6f, - "ninehackarabic", - 0x0669, - "ninehangzhou", - 0x3029, - "nineideographicparen", - 0x3228, - "nineinferior", - 0x2089, - "ninemonospace", - 0xff19, - "nineoldstyle", - 0xf739, - "nineparen", - 0x247c, - "nineperiod", - 0x2490, - "ninepersian", - 0x06f9, - "nineroman", - 0x2178, - "ninesuperior", - 0x2079, - "nineteencircle", - 0x2472, - "nineteenparen", - 0x2486, - "nineteenperiod", - 0x249a, - "ninethai", - 0x0e59, - "nj", - 0x01cc, - "njecyrillic", - 0x045a, - "nkatakana", - 0x30f3, - "nkatakanahalfwidth", - 0xff9d, - "nlegrightlong", - 0x019e, - "nlinebelow", - 0x1e49, - "nmonospace", - 0xff4e, - "nmsquare", - 0x339a, - "nnabengali", - 0x09a3, - "nnadeva", - 0x0923, - "nnagujarati", - 0x0aa3, - "nnagurmukhi", - 0x0a23, - "nnnadeva", - 0x0929, - "nohiragana", - 0x306e, - "nokatakana", - 0x30ce, - "nokatakanahalfwidth", - 0xff89, - "nonbreakingspace", - 0x00a0, - "nonenthai", - 0x0e13, - "nonuthai", - 0x0e19, - "noonarabic", - 0x0646, - "noonfinalarabic", - 0xfee6, - "noonghunnaarabic", - 0x06ba, - "noonghunnafinalarabic", - 0xfb9f, - "nooninitialarabic", - 0xfee7, - "noonjeeminitialarabic", - 0xfcd2, - "noonjeemisolatedarabic", - 0xfc4b, - "noonmedialarabic", - 0xfee8, - "noonmeeminitialarabic", - 0xfcd5, - "noonmeemisolatedarabic", - 0xfc4e, - "noonnoonfinalarabic", - 0xfc8d, - "notcontains", - 0x220c, - "notelement", - 0x2209, - "notelementof", - 0x2209, - "notequal", - 0x2260, - "notgreater", - 0x226f, - "notgreaternorequal", - 0x2271, - "notgreaternorless", - 0x2279, - "notidentical", - 0x2262, - "notless", - 0x226e, - "notlessnorequal", - 0x2270, - "notparallel", - 0x2226, - "notprecedes", - 0x2280, - "notsubset", - 0x2284, - "notsucceeds", - 0x2281, - "notsuperset", - 0x2285, - "nowarmenian", - 0x0576, - "nparen", - 0x24a9, - "nssquare", - 0x33b1, - "nsuperior", - 0x207f, - "ntilde", - 0x00f1, - "nu", - 0x03bd, - "nuhiragana", - 0x306c, - "nukatakana", - 0x30cc, - "nukatakanahalfwidth", - 0xff87, - "nuktabengali", - 0x09bc, - "nuktadeva", - 0x093c, - "nuktagujarati", - 0x0abc, - "nuktagurmukhi", - 0x0a3c, - "numbersign", - 0x0023, - "numbersignmonospace", - 0xff03, - "numbersignsmall", - 0xfe5f, - "numeralsigngreek", - 0x0374, - "numeralsignlowergreek", - 0x0375, - "numero", - 0x2116, - "nun", - 0x05e0, - "nundagesh", - 0xfb40, - "nundageshhebrew", - 0xfb40, - "nunhebrew", - 0x05e0, - "nvsquare", - 0x33b5, - "nwsquare", - 0x33bb, - "nyabengali", - 0x099e, - "nyadeva", - 0x091e, - "nyagujarati", - 0x0a9e, - "nyagurmukhi", - 0x0a1e, - "o", - 0x006f, - "oacute", - 0x00f3, - "oangthai", - 0x0e2d, - "obarred", - 0x0275, - "obarredcyrillic", - 0x04e9, - "obarreddieresiscyrillic", - 0x04eb, - "obengali", - 0x0993, - "obopomofo", - 0x311b, - "obreve", - 0x014f, - "ocandradeva", - 0x0911, - "ocandragujarati", - 0x0a91, - "ocandravowelsigndeva", - 0x0949, - "ocandravowelsigngujarati", - 0x0ac9, - "ocaron", - 0x01d2, - "ocircle", - 0x24de, - "ocircumflex", - 0x00f4, - "ocircumflexacute", - 0x1ed1, - "ocircumflexdotbelow", - 0x1ed9, - "ocircumflexgrave", - 0x1ed3, - "ocircumflexhookabove", - 0x1ed5, - "ocircumflextilde", - 0x1ed7, - "ocyrillic", - 0x043e, - "odblacute", - 0x0151, - "odblgrave", - 0x020d, - "odeva", - 0x0913, - "odieresis", - 0x00f6, - "odieresiscyrillic", - 0x04e7, - "odotbelow", - 0x1ecd, - "oe", - 0x0153, - "oekorean", - 0x315a, - "ogonek", - 0x02db, - "ogonekcmb", - 0x0328, - "ograve", - 0x00f2, - "ogujarati", - 0x0a93, - "oharmenian", - 0x0585, - "ohiragana", - 0x304a, - "ohookabove", - 0x1ecf, - "ohorn", - 0x01a1, - "ohornacute", - 0x1edb, - "ohorndotbelow", - 0x1ee3, - "ohorngrave", - 0x1edd, - "ohornhookabove", - 0x1edf, - "ohorntilde", - 0x1ee1, - "ohungarumlaut", - 0x0151, - "oi", - 0x01a3, - "oinvertedbreve", - 0x020f, - "okatakana", - 0x30aa, - "okatakanahalfwidth", - 0xff75, - "okorean", - 0x3157, - "olehebrew", - 0x05ab, - "omacron", - 0x014d, - "omacronacute", - 0x1e53, - "omacrongrave", - 0x1e51, - "omdeva", - 0x0950, - "omega", - 0x03c9, - "omega1", - 0x03d6, - "omegacyrillic", - 0x0461, - "omegalatinclosed", - 0x0277, - "omegaroundcyrillic", - 0x047b, - "omegatitlocyrillic", - 0x047d, - "omegatonos", - 0x03ce, - "omgujarati", - 0x0ad0, - "omicron", - 0x03bf, - "omicrontonos", - 0x03cc, - "omonospace", - 0xff4f, - "one", - 0x0031, - "onearabic", - 0x0661, - "onebengali", - 0x09e7, - "onecircle", - 0x2460, - "onecircleinversesansserif", - 0x278a, - "onedeva", - 0x0967, - "onedotenleader", - 0x2024, - "oneeighth", - 0x215b, - "onefitted", - 0xf6dc, - "onegujarati", - 0x0ae7, - "onegurmukhi", - 0x0a67, - "onehackarabic", - 0x0661, - "onehalf", - 0x00bd, - "onehangzhou", - 0x3021, - "oneideographicparen", - 0x3220, - "oneinferior", - 0x2081, - "onemonospace", - 0xff11, - "onenumeratorbengali", - 0x09f4, - "oneoldstyle", - 0xf731, - "oneparen", - 0x2474, - "oneperiod", - 0x2488, - "onepersian", - 0x06f1, - "onequarter", - 0x00bc, - "oneroman", - 0x2170, - "onesuperior", - 0x00b9, - "onethai", - 0x0e51, - "onethird", - 0x2153, - "oogonek", - 0x01eb, - "oogonekmacron", - 0x01ed, - "oogurmukhi", - 0x0a13, - "oomatragurmukhi", - 0x0a4b, - "oopen", - 0x0254, - "oparen", - 0x24aa, - "openbullet", - 0x25e6, - "option", - 0x2325, - "ordfeminine", - 0x00aa, - "ordmasculine", - 0x00ba, - "orthogonal", - 0x221f, - "oshortdeva", - 0x0912, - "oshortvowelsigndeva", - 0x094a, - "oslash", - 0x00f8, - "oslashacute", - 0x01ff, - "osmallhiragana", - 0x3049, - "osmallkatakana", - 0x30a9, - "osmallkatakanahalfwidth", - 0xff6b, - "ostrokeacute", - 0x01ff, - "osuperior", - 0xf6f0, - "otcyrillic", - 0x047f, - "otilde", - 0x00f5, - "otildeacute", - 0x1e4d, - "otildedieresis", - 0x1e4f, - "oubopomofo", - 0x3121, - "overline", - 0x203e, - "overlinecenterline", - 0xfe4a, - "overlinecmb", - 0x0305, - "overlinedashed", - 0xfe49, - "overlinedblwavy", - 0xfe4c, - "overlinewavy", - 0xfe4b, - "overscore", - 0x00af, - "ovowelsignbengali", - 0x09cb, - "ovowelsigndeva", - 0x094b, - "ovowelsigngujarati", - 0x0acb, - "p", - 0x0070, - "paampssquare", - 0x3380, - "paasentosquare", - 0x332b, - "pabengali", - 0x09aa, - "pacute", - 0x1e55, - "padeva", - 0x092a, - "pagedown", - 0x21df, - "pageup", - 0x21de, - "pagujarati", - 0x0aaa, - "pagurmukhi", - 0x0a2a, - "pahiragana", - 0x3071, - "paiyannoithai", - 0x0e2f, - "pakatakana", - 0x30d1, - "palatalizationcyrilliccmb", - 0x0484, - "palochkacyrillic", - 0x04c0, - "pansioskorean", - 0x317f, - "paragraph", - 0x00b6, - "parallel", - 0x2225, - "parenleft", - 0x0028, - "parenleftaltonearabic", - 0xfd3e, - "parenleftbt", - 0xf8ed, - "parenleftex", - 0xf8ec, - "parenleftinferior", - 0x208d, - "parenleftmonospace", - 0xff08, - "parenleftsmall", - 0xfe59, - "parenleftsuperior", - 0x207d, - "parenlefttp", - 0xf8eb, - "parenleftvertical", - 0xfe35, - "parenright", - 0x0029, - "parenrightaltonearabic", - 0xfd3f, - "parenrightbt", - 0xf8f8, - "parenrightex", - 0xf8f7, - "parenrightinferior", - 0x208e, - "parenrightmonospace", - 0xff09, - "parenrightsmall", - 0xfe5a, - "parenrightsuperior", - 0x207e, - "parenrighttp", - 0xf8f6, - "parenrightvertical", - 0xfe36, - "partialdiff", - 0x2202, - "paseqhebrew", - 0x05c0, - "pashtahebrew", - 0x0599, - "pasquare", - 0x33a9, - "patah", - 0x05b7, - "patah11", - 0x05b7, - "patah1d", - 0x05b7, - "patah2a", - 0x05b7, - "patahhebrew", - 0x05b7, - "patahnarrowhebrew", - 0x05b7, - "patahquarterhebrew", - 0x05b7, - "patahwidehebrew", - 0x05b7, - "pazerhebrew", - 0x05a1, - "pbopomofo", - 0x3106, - "pcircle", - 0x24df, - "pdotaccent", - 0x1e57, - "pe", - 0x05e4, - "pecyrillic", - 0x043f, - "pedagesh", - 0xfb44, - "pedageshhebrew", - 0xfb44, - "peezisquare", - 0x333b, - "pefinaldageshhebrew", - 0xfb43, - "peharabic", - 0x067e, - "peharmenian", - 0x057a, - "pehebrew", - 0x05e4, - "pehfinalarabic", - 0xfb57, - "pehinitialarabic", - 0xfb58, - "pehiragana", - 0x307a, - "pehmedialarabic", - 0xfb59, - "pekatakana", - 0x30da, - "pemiddlehookcyrillic", - 0x04a7, - "perafehebrew", - 0xfb4e, - "percent", - 0x0025, - "percentarabic", - 0x066a, - "percentmonospace", - 0xff05, - "percentsmall", - 0xfe6a, - "period", - 0x002e, - "periodarmenian", - 0x0589, - "periodcentered", - 0x00b7, - "periodhalfwidth", - 0xff61, - "periodinferior", - 0xf6e7, - "periodmonospace", - 0xff0e, - "periodsmall", - 0xfe52, - "periodsuperior", - 0xf6e8, - "perispomenigreekcmb", - 0x0342, - "perpendicular", - 0x22a5, - "perthousand", - 0x2030, - "peseta", - 0x20a7, - "pfsquare", - 0x338a, - "phabengali", - 0x09ab, - "phadeva", - 0x092b, - "phagujarati", - 0x0aab, - "phagurmukhi", - 0x0a2b, - "phi", - 0x03c6, - "phi1", - 0x03d5, - "phieuphacirclekorean", - 0x327a, - "phieuphaparenkorean", - 0x321a, - "phieuphcirclekorean", - 0x326c, - "phieuphkorean", - 0x314d, - "phieuphparenkorean", - 0x320c, - "philatin", - 0x0278, - "phinthuthai", - 0x0e3a, - "phisymbolgreek", - 0x03d5, - "phook", - 0x01a5, - "phophanthai", - 0x0e1e, - "phophungthai", - 0x0e1c, - "phosamphaothai", - 0x0e20, - "pi", - 0x03c0, - "pieupacirclekorean", - 0x3273, - "pieupaparenkorean", - 0x3213, - "pieupcieuckorean", - 0x3176, - "pieupcirclekorean", - 0x3265, - "pieupkiyeokkorean", - 0x3172, - "pieupkorean", - 0x3142, - "pieupparenkorean", - 0x3205, - "pieupsioskiyeokkorean", - 0x3174, - "pieupsioskorean", - 0x3144, - "pieupsiostikeutkorean", - 0x3175, - "pieupthieuthkorean", - 0x3177, - "pieuptikeutkorean", - 0x3173, - "pihiragana", - 0x3074, - "pikatakana", - 0x30d4, - "pisymbolgreek", - 0x03d6, - "piwrarmenian", - 0x0583, - "plus", - 0x002b, - "plusbelowcmb", - 0x031f, - "pluscircle", - 0x2295, - "plusminus", - 0x00b1, - "plusmod", - 0x02d6, - "plusmonospace", - 0xff0b, - "plussmall", - 0xfe62, - "plussuperior", - 0x207a, - "pmonospace", - 0xff50, - "pmsquare", - 0x33d8, - "pohiragana", - 0x307d, - "pointingindexdownwhite", - 0x261f, - "pointingindexleftwhite", - 0x261c, - "pointingindexrightwhite", - 0x261e, - "pointingindexupwhite", - 0x261d, - "pokatakana", - 0x30dd, - "poplathai", - 0x0e1b, - "postalmark", - 0x3012, - "postalmarkface", - 0x3020, - "pparen", - 0x24ab, - "precedes", - 0x227a, - "prescription", - 0x211e, - "primemod", - 0x02b9, - "primereversed", - 0x2035, - "product", - 0x220f, - "projective", - 0x2305, - "prolongedkana", - 0x30fc, - "propellor", - 0x2318, - "propersubset", - 0x2282, - "propersuperset", - 0x2283, - "proportion", - 0x2237, - "proportional", - 0x221d, - "psi", - 0x03c8, - "psicyrillic", - 0x0471, - "psilipneumatacyrilliccmb", - 0x0486, - "pssquare", - 0x33b0, - "puhiragana", - 0x3077, - "pukatakana", - 0x30d7, - "pvsquare", - 0x33b4, - "pwsquare", - 0x33ba, - "q", - 0x0071, - "qadeva", - 0x0958, - "qadmahebrew", - 0x05a8, - "qafarabic", - 0x0642, - "qaffinalarabic", - 0xfed6, - "qafinitialarabic", - 0xfed7, - "qafmedialarabic", - 0xfed8, - "qamats", - 0x05b8, - "qamats10", - 0x05b8, - "qamats1a", - 0x05b8, - "qamats1c", - 0x05b8, - "qamats27", - 0x05b8, - "qamats29", - 0x05b8, - "qamats33", - 0x05b8, - "qamatsde", - 0x05b8, - "qamatshebrew", - 0x05b8, - "qamatsnarrowhebrew", - 0x05b8, - "qamatsqatanhebrew", - 0x05b8, - "qamatsqatannarrowhebrew", - 0x05b8, - "qamatsqatanquarterhebrew", - 0x05b8, - "qamatsqatanwidehebrew", - 0x05b8, - "qamatsquarterhebrew", - 0x05b8, - "qamatswidehebrew", - 0x05b8, - "qarneyparahebrew", - 0x059f, - "qbopomofo", - 0x3111, - "qcircle", - 0x24e0, - "qhook", - 0x02a0, - "qmonospace", - 0xff51, - "qof", - 0x05e7, - "qofdagesh", - 0xfb47, - "qofdageshhebrew", - 0xfb47, - "qofhebrew", - 0x05e7, - "qparen", - 0x24ac, - "quarternote", - 0x2669, - "qubuts", - 0x05bb, - "qubuts18", - 0x05bb, - "qubuts25", - 0x05bb, - "qubuts31", - 0x05bb, - "qubutshebrew", - 0x05bb, - "qubutsnarrowhebrew", - 0x05bb, - "qubutsquarterhebrew", - 0x05bb, - "qubutswidehebrew", - 0x05bb, - "question", - 0x003f, - "questionarabic", - 0x061f, - "questionarmenian", - 0x055e, - "questiondown", - 0x00bf, - "questiondownsmall", - 0xf7bf, - "questiongreek", - 0x037e, - "questionmonospace", - 0xff1f, - "questionsmall", - 0xf73f, - "quotedbl", - 0x0022, - "quotedblbase", - 0x201e, - "quotedblleft", - 0x201c, - "quotedblmonospace", - 0xff02, - "quotedblprime", - 0x301e, - "quotedblprimereversed", - 0x301d, - "quotedblright", - 0x201d, - "quoteleft", - 0x2018, - "quoteleftreversed", - 0x201b, - "quotereversed", - 0x201b, - "quoteright", - 0x2019, - "quoterightn", - 0x0149, - "quotesinglbase", - 0x201a, - "quotesingle", - 0x0027, - "quotesinglemonospace", - 0xff07, - "r", - 0x0072, - "raarmenian", - 0x057c, - "rabengali", - 0x09b0, - "racute", - 0x0155, - "radeva", - 0x0930, - "radical", - 0x221a, - "radicalex", - 0xf8e5, - "radoverssquare", - 0x33ae, - "radoverssquaredsquare", - 0x33af, - "radsquare", - 0x33ad, - "rafe", - 0x05bf, - "rafehebrew", - 0x05bf, - "ragujarati", - 0x0ab0, - "ragurmukhi", - 0x0a30, - "rahiragana", - 0x3089, - "rakatakana", - 0x30e9, - "rakatakanahalfwidth", - 0xff97, - "ralowerdiagonalbengali", - 0x09f1, - "ramiddlediagonalbengali", - 0x09f0, - "ramshorn", - 0x0264, - "ratio", - 0x2236, - "rbopomofo", - 0x3116, - "rcaron", - 0x0159, - "rcedilla", - 0x0157, - "rcircle", - 0x24e1, - "rcommaaccent", - 0x0157, - "rdblgrave", - 0x0211, - "rdotaccent", - 0x1e59, - "rdotbelow", - 0x1e5b, - "rdotbelowmacron", - 0x1e5d, - "referencemark", - 0x203b, - "reflexsubset", - 0x2286, - "reflexsuperset", - 0x2287, - "registered", - 0x00ae, - "registersans", - 0xf8e8, - "registerserif", - 0xf6da, - "reharabic", - 0x0631, - "reharmenian", - 0x0580, - "rehfinalarabic", - 0xfeae, - "rehiragana", - 0x308c, - "rekatakana", - 0x30ec, - "rekatakanahalfwidth", - 0xff9a, - "resh", - 0x05e8, - "reshdageshhebrew", - 0xfb48, - "reshhebrew", - 0x05e8, - "reversedtilde", - 0x223d, - "reviahebrew", - 0x0597, - "reviamugrashhebrew", - 0x0597, - "revlogicalnot", - 0x2310, - "rfishhook", - 0x027e, - "rfishhookreversed", - 0x027f, - "rhabengali", - 0x09dd, - "rhadeva", - 0x095d, - "rho", - 0x03c1, - "rhook", - 0x027d, - "rhookturned", - 0x027b, - "rhookturnedsuperior", - 0x02b5, - "rhosymbolgreek", - 0x03f1, - "rhotichookmod", - 0x02de, - "rieulacirclekorean", - 0x3271, - "rieulaparenkorean", - 0x3211, - "rieulcirclekorean", - 0x3263, - "rieulhieuhkorean", - 0x3140, - "rieulkiyeokkorean", - 0x313a, - "rieulkiyeoksioskorean", - 0x3169, - "rieulkorean", - 0x3139, - "rieulmieumkorean", - 0x313b, - "rieulpansioskorean", - 0x316c, - "rieulparenkorean", - 0x3203, - "rieulphieuphkorean", - 0x313f, - "rieulpieupkorean", - 0x313c, - "rieulpieupsioskorean", - 0x316b, - "rieulsioskorean", - 0x313d, - "rieulthieuthkorean", - 0x313e, - "rieultikeutkorean", - 0x316a, - "rieulyeorinhieuhkorean", - 0x316d, - "rightangle", - 0x221f, - "righttackbelowcmb", - 0x0319, - "righttriangle", - 0x22bf, - "rihiragana", - 0x308a, - "rikatakana", - 0x30ea, - "rikatakanahalfwidth", - 0xff98, - "ring", - 0x02da, - "ringbelowcmb", - 0x0325, - "ringcmb", - 0x030a, - "ringhalfleft", - 0x02bf, - "ringhalfleftarmenian", - 0x0559, - "ringhalfleftbelowcmb", - 0x031c, - "ringhalfleftcentered", - 0x02d3, - "ringhalfright", - 0x02be, - "ringhalfrightbelowcmb", - 0x0339, - "ringhalfrightcentered", - 0x02d2, - "rinvertedbreve", - 0x0213, - "rittorusquare", - 0x3351, - "rlinebelow", - 0x1e5f, - "rlongleg", - 0x027c, - "rlonglegturned", - 0x027a, - "rmonospace", - 0xff52, - "rohiragana", - 0x308d, - "rokatakana", - 0x30ed, - "rokatakanahalfwidth", - 0xff9b, - "roruathai", - 0x0e23, - "rparen", - 0x24ad, - "rrabengali", - 0x09dc, - "rradeva", - 0x0931, - "rragurmukhi", - 0x0a5c, - "rreharabic", - 0x0691, - "rrehfinalarabic", - 0xfb8d, - "rrvocalicbengali", - 0x09e0, - "rrvocalicdeva", - 0x0960, - "rrvocalicgujarati", - 0x0ae0, - "rrvocalicvowelsignbengali", - 0x09c4, - "rrvocalicvowelsigndeva", - 0x0944, - "rrvocalicvowelsigngujarati", - 0x0ac4, - "rsuperior", - 0xf6f1, - "rtblock", - 0x2590, - "rturned", - 0x0279, - "rturnedsuperior", - 0x02b4, - "ruhiragana", - 0x308b, - "rukatakana", - 0x30eb, - "rukatakanahalfwidth", - 0xff99, - "rupeemarkbengali", - 0x09f2, - "rupeesignbengali", - 0x09f3, - "rupiah", - 0xf6dd, - "ruthai", - 0x0e24, - "rvocalicbengali", - 0x098b, - "rvocalicdeva", - 0x090b, - "rvocalicgujarati", - 0x0a8b, - "rvocalicvowelsignbengali", - 0x09c3, - "rvocalicvowelsigndeva", - 0x0943, - "rvocalicvowelsigngujarati", - 0x0ac3, - "s", - 0x0073, - "sabengali", - 0x09b8, - "sacute", - 0x015b, - "sacutedotaccent", - 0x1e65, - "sadarabic", - 0x0635, - "sadeva", - 0x0938, - "sadfinalarabic", - 0xfeba, - "sadinitialarabic", - 0xfebb, - "sadmedialarabic", - 0xfebc, - "sagujarati", - 0x0ab8, - "sagurmukhi", - 0x0a38, - "sahiragana", - 0x3055, - "sakatakana", - 0x30b5, - "sakatakanahalfwidth", - 0xff7b, - "sallallahoualayhewasallamarabic", - 0xfdfa, - "samekh", - 0x05e1, - "samekhdagesh", - 0xfb41, - "samekhdageshhebrew", - 0xfb41, - "samekhhebrew", - 0x05e1, - "saraaathai", - 0x0e32, - "saraaethai", - 0x0e41, - "saraaimaimalaithai", - 0x0e44, - "saraaimaimuanthai", - 0x0e43, - "saraamthai", - 0x0e33, - "saraathai", - 0x0e30, - "saraethai", - 0x0e40, - "saraiileftthai", - 0xf886, - "saraiithai", - 0x0e35, - "saraileftthai", - 0xf885, - "saraithai", - 0x0e34, - "saraothai", - 0x0e42, - "saraueeleftthai", - 0xf888, - "saraueethai", - 0x0e37, - "saraueleftthai", - 0xf887, - "sarauethai", - 0x0e36, - "sarauthai", - 0x0e38, - "sarauuthai", - 0x0e39, - "sbopomofo", - 0x3119, - "scaron", - 0x0161, - "scarondotaccent", - 0x1e67, - "scedilla", - 0x015f, - "schwa", - 0x0259, - "schwacyrillic", - 0x04d9, - "schwadieresiscyrillic", - 0x04db, - "schwahook", - 0x025a, - "scircle", - 0x24e2, - "scircumflex", - 0x015d, - "scommaaccent", - 0x0219, - "sdotaccent", - 0x1e61, - "sdotbelow", - 0x1e63, - "sdotbelowdotaccent", - 0x1e69, - "seagullbelowcmb", - 0x033c, - "second", - 0x2033, - "secondtonechinese", - 0x02ca, - "section", - 0x00a7, - "seenarabic", - 0x0633, - "seenfinalarabic", - 0xfeb2, - "seeninitialarabic", - 0xfeb3, - "seenmedialarabic", - 0xfeb4, - "segol", - 0x05b6, - "segol13", - 0x05b6, - "segol1f", - 0x05b6, - "segol2c", - 0x05b6, - "segolhebrew", - 0x05b6, - "segolnarrowhebrew", - 0x05b6, - "segolquarterhebrew", - 0x05b6, - "segoltahebrew", - 0x0592, - "segolwidehebrew", - 0x05b6, - "seharmenian", - 0x057d, - "sehiragana", - 0x305b, - "sekatakana", - 0x30bb, - "sekatakanahalfwidth", - 0xff7e, - "semicolon", - 0x003b, - "semicolonarabic", - 0x061b, - "semicolonmonospace", - 0xff1b, - "semicolonsmall", - 0xfe54, - "semivoicedmarkkana", - 0x309c, - "semivoicedmarkkanahalfwidth", - 0xff9f, - "sentisquare", - 0x3322, - "sentosquare", - 0x3323, - "seven", - 0x0037, - "sevenarabic", - 0x0667, - "sevenbengali", - 0x09ed, - "sevencircle", - 0x2466, - "sevencircleinversesansserif", - 0x2790, - "sevendeva", - 0x096d, - "seveneighths", - 0x215e, - "sevengujarati", - 0x0aed, - "sevengurmukhi", - 0x0a6d, - "sevenhackarabic", - 0x0667, - "sevenhangzhou", - 0x3027, - "sevenideographicparen", - 0x3226, - "seveninferior", - 0x2087, - "sevenmonospace", - 0xff17, - "sevenoldstyle", - 0xf737, - "sevenparen", - 0x247a, - "sevenperiod", - 0x248e, - "sevenpersian", - 0x06f7, - "sevenroman", - 0x2176, - "sevensuperior", - 0x2077, - "seventeencircle", - 0x2470, - "seventeenparen", - 0x2484, - "seventeenperiod", - 0x2498, - "seventhai", - 0x0e57, - "sfthyphen", - 0x00ad, - "shaarmenian", - 0x0577, - "shabengali", - 0x09b6, - "shacyrillic", - 0x0448, - "shaddaarabic", - 0x0651, - "shaddadammaarabic", - 0xfc61, - "shaddadammatanarabic", - 0xfc5e, - "shaddafathaarabic", - 0xfc60, - "shaddakasraarabic", - 0xfc62, - "shaddakasratanarabic", - 0xfc5f, - "shade", - 0x2592, - "shadedark", - 0x2593, - "shadelight", - 0x2591, - "shademedium", - 0x2592, - "shadeva", - 0x0936, - "shagujarati", - 0x0ab6, - "shagurmukhi", - 0x0a36, - "shalshelethebrew", - 0x0593, - "shbopomofo", - 0x3115, - "shchacyrillic", - 0x0449, - "sheenarabic", - 0x0634, - "sheenfinalarabic", - 0xfeb6, - "sheeninitialarabic", - 0xfeb7, - "sheenmedialarabic", - 0xfeb8, - "sheicoptic", - 0x03e3, - "sheqel", - 0x20aa, - "sheqelhebrew", - 0x20aa, - "sheva", - 0x05b0, - "sheva115", - 0x05b0, - "sheva15", - 0x05b0, - "sheva22", - 0x05b0, - "sheva2e", - 0x05b0, - "shevahebrew", - 0x05b0, - "shevanarrowhebrew", - 0x05b0, - "shevaquarterhebrew", - 0x05b0, - "shevawidehebrew", - 0x05b0, - "shhacyrillic", - 0x04bb, - "shimacoptic", - 0x03ed, - "shin", - 0x05e9, - "shindagesh", - 0xfb49, - "shindageshhebrew", - 0xfb49, - "shindageshshindot", - 0xfb2c, - "shindageshshindothebrew", - 0xfb2c, - "shindageshsindot", - 0xfb2d, - "shindageshsindothebrew", - 0xfb2d, - "shindothebrew", - 0x05c1, - "shinhebrew", - 0x05e9, - "shinshindot", - 0xfb2a, - "shinshindothebrew", - 0xfb2a, - "shinsindot", - 0xfb2b, - "shinsindothebrew", - 0xfb2b, - "shook", - 0x0282, - "sigma", - 0x03c3, - "sigma1", - 0x03c2, - "sigmafinal", - 0x03c2, - "sigmalunatesymbolgreek", - 0x03f2, - "sihiragana", - 0x3057, - "sikatakana", - 0x30b7, - "sikatakanahalfwidth", - 0xff7c, - "siluqhebrew", - 0x05bd, - "siluqlefthebrew", - 0x05bd, - "similar", - 0x223c, - "sindothebrew", - 0x05c2, - "siosacirclekorean", - 0x3274, - "siosaparenkorean", - 0x3214, - "sioscieuckorean", - 0x317e, - "sioscirclekorean", - 0x3266, - "sioskiyeokkorean", - 0x317a, - "sioskorean", - 0x3145, - "siosnieunkorean", - 0x317b, - "siosparenkorean", - 0x3206, - "siospieupkorean", - 0x317d, - "siostikeutkorean", - 0x317c, - "six", - 0x0036, - "sixarabic", - 0x0666, - "sixbengali", - 0x09ec, - "sixcircle", - 0x2465, - "sixcircleinversesansserif", - 0x278f, - "sixdeva", - 0x096c, - "sixgujarati", - 0x0aec, - "sixgurmukhi", - 0x0a6c, - "sixhackarabic", - 0x0666, - "sixhangzhou", - 0x3026, - "sixideographicparen", - 0x3225, - "sixinferior", - 0x2086, - "sixmonospace", - 0xff16, - "sixoldstyle", - 0xf736, - "sixparen", - 0x2479, - "sixperiod", - 0x248d, - "sixpersian", - 0x06f6, - "sixroman", - 0x2175, - "sixsuperior", - 0x2076, - "sixteencircle", - 0x246f, - "sixteencurrencydenominatorbengali", - 0x09f9, - "sixteenparen", - 0x2483, - "sixteenperiod", - 0x2497, - "sixthai", - 0x0e56, - "slash", - 0x002f, - "slashmonospace", - 0xff0f, - "slong", - 0x017f, - "slongdotaccent", - 0x1e9b, - "smileface", - 0x263a, - "smonospace", - 0xff53, - "sofpasuqhebrew", - 0x05c3, - "softhyphen", - 0x00ad, - "softsigncyrillic", - 0x044c, - "sohiragana", - 0x305d, - "sokatakana", - 0x30bd, - "sokatakanahalfwidth", - 0xff7f, - "soliduslongoverlaycmb", - 0x0338, - "solidusshortoverlaycmb", - 0x0337, - "sorusithai", - 0x0e29, - "sosalathai", - 0x0e28, - "sosothai", - 0x0e0b, - "sosuathai", - 0x0e2a, - "space", - 0x0020, - "spacehackarabic", - 0x0020, - "spade", - 0x2660, - "spadesuitblack", - 0x2660, - "spadesuitwhite", - 0x2664, - "sparen", - 0x24ae, - "squarebelowcmb", - 0x033b, - "squarecc", - 0x33c4, - "squarecm", - 0x339d, - "squarediagonalcrosshatchfill", - 0x25a9, - "squarehorizontalfill", - 0x25a4, - "squarekg", - 0x338f, - "squarekm", - 0x339e, - "squarekmcapital", - 0x33ce, - "squareln", - 0x33d1, - "squarelog", - 0x33d2, - "squaremg", - 0x338e, - "squaremil", - 0x33d5, - "squaremm", - 0x339c, - "squaremsquared", - 0x33a1, - "squareorthogonalcrosshatchfill", - 0x25a6, - "squareupperlefttolowerrightfill", - 0x25a7, - "squareupperrighttolowerleftfill", - 0x25a8, - "squareverticalfill", - 0x25a5, - "squarewhitewithsmallblack", - 0x25a3, - "srsquare", - 0x33db, - "ssabengali", - 0x09b7, - "ssadeva", - 0x0937, - "ssagujarati", - 0x0ab7, - "ssangcieuckorean", - 0x3149, - "ssanghieuhkorean", - 0x3185, - "ssangieungkorean", - 0x3180, - "ssangkiyeokkorean", - 0x3132, - "ssangnieunkorean", - 0x3165, - "ssangpieupkorean", - 0x3143, - "ssangsioskorean", - 0x3146, - "ssangtikeutkorean", - 0x3138, - "ssuperior", - 0xf6f2, - "sterling", - 0x00a3, - "sterlingmonospace", - 0xffe1, - "strokelongoverlaycmb", - 0x0336, - "strokeshortoverlaycmb", - 0x0335, - "subset", - 0x2282, - "subsetnotequal", - 0x228a, - "subsetorequal", - 0x2286, - "succeeds", - 0x227b, - "suchthat", - 0x220b, - "suhiragana", - 0x3059, - "sukatakana", - 0x30b9, - "sukatakanahalfwidth", - 0xff7d, - "sukunarabic", - 0x0652, - "summation", - 0x2211, - "sun", - 0x263c, - "superset", - 0x2283, - "supersetnotequal", - 0x228b, - "supersetorequal", - 0x2287, - "svsquare", - 0x33dc, - "syouwaerasquare", - 0x337c, - "t", - 0x0074, - "tabengali", - 0x09a4, - "tackdown", - 0x22a4, - "tackleft", - 0x22a3, - "tadeva", - 0x0924, - "tagujarati", - 0x0aa4, - "tagurmukhi", - 0x0a24, - "taharabic", - 0x0637, - "tahfinalarabic", - 0xfec2, - "tahinitialarabic", - 0xfec3, - "tahiragana", - 0x305f, - "tahmedialarabic", - 0xfec4, - "taisyouerasquare", - 0x337d, - "takatakana", - 0x30bf, - "takatakanahalfwidth", - 0xff80, - "tatweelarabic", - 0x0640, - "tau", - 0x03c4, - "tav", - 0x05ea, - "tavdages", - 0xfb4a, - "tavdagesh", - 0xfb4a, - "tavdageshhebrew", - 0xfb4a, - "tavhebrew", - 0x05ea, - "tbar", - 0x0167, - "tbopomofo", - 0x310a, - "tcaron", - 0x0165, - "tccurl", - 0x02a8, - "tcedilla", - 0x0163, - "tcheharabic", - 0x0686, - "tchehfinalarabic", - 0xfb7b, - "tchehinitialarabic", - 0xfb7c, - "tchehmedialarabic", - 0xfb7d, - "tcircle", - 0x24e3, - "tcircumflexbelow", - 0x1e71, - "tcommaaccent", - 0x0163, - "tdieresis", - 0x1e97, - "tdotaccent", - 0x1e6b, - "tdotbelow", - 0x1e6d, - "tecyrillic", - 0x0442, - "tedescendercyrillic", - 0x04ad, - "teharabic", - 0x062a, - "tehfinalarabic", - 0xfe96, - "tehhahinitialarabic", - 0xfca2, - "tehhahisolatedarabic", - 0xfc0c, - "tehinitialarabic", - 0xfe97, - "tehiragana", - 0x3066, - "tehjeeminitialarabic", - 0xfca1, - "tehjeemisolatedarabic", - 0xfc0b, - "tehmarbutaarabic", - 0x0629, - "tehmarbutafinalarabic", - 0xfe94, - "tehmedialarabic", - 0xfe98, - "tehmeeminitialarabic", - 0xfca4, - "tehmeemisolatedarabic", - 0xfc0e, - "tehnoonfinalarabic", - 0xfc73, - "tekatakana", - 0x30c6, - "tekatakanahalfwidth", - 0xff83, - "telephone", - 0x2121, - "telephoneblack", - 0x260e, - "telishagedolahebrew", - 0x05a0, - "telishaqetanahebrew", - 0x05a9, - "tencircle", - 0x2469, - "tenideographicparen", - 0x3229, - "tenparen", - 0x247d, - "tenperiod", - 0x2491, - "tenroman", - 0x2179, - "tesh", - 0x02a7, - "tet", - 0x05d8, - "tetdagesh", - 0xfb38, - "tetdageshhebrew", - 0xfb38, - "tethebrew", - 0x05d8, - "tetsecyrillic", - 0x04b5, - "tevirhebrew", - 0x059b, - "tevirlefthebrew", - 0x059b, - "thabengali", - 0x09a5, - "thadeva", - 0x0925, - "thagujarati", - 0x0aa5, - "thagurmukhi", - 0x0a25, - "thalarabic", - 0x0630, - "thalfinalarabic", - 0xfeac, - "thanthakhatlowleftthai", - 0xf898, - "thanthakhatlowrightthai", - 0xf897, - "thanthakhatthai", - 0x0e4c, - "thanthakhatupperleftthai", - 0xf896, - "theharabic", - 0x062b, - "thehfinalarabic", - 0xfe9a, - "thehinitialarabic", - 0xfe9b, - "thehmedialarabic", - 0xfe9c, - "thereexists", - 0x2203, - "therefore", - 0x2234, - "theta", - 0x03b8, - "theta1", - 0x03d1, - "thetasymbolgreek", - 0x03d1, - "thieuthacirclekorean", - 0x3279, - "thieuthaparenkorean", - 0x3219, - "thieuthcirclekorean", - 0x326b, - "thieuthkorean", - 0x314c, - "thieuthparenkorean", - 0x320b, - "thirteencircle", - 0x246c, - "thirteenparen", - 0x2480, - "thirteenperiod", - 0x2494, - "thonangmonthothai", - 0x0e11, - "thook", - 0x01ad, - "thophuthaothai", - 0x0e12, - "thorn", - 0x00fe, - "thothahanthai", - 0x0e17, - "thothanthai", - 0x0e10, - "thothongthai", - 0x0e18, - "thothungthai", - 0x0e16, - "thousandcyrillic", - 0x0482, - "thousandsseparatorarabic", - 0x066c, - "thousandsseparatorpersian", - 0x066c, - "three", - 0x0033, - "threearabic", - 0x0663, - "threebengali", - 0x09e9, - "threecircle", - 0x2462, - "threecircleinversesansserif", - 0x278c, - "threedeva", - 0x0969, - "threeeighths", - 0x215c, - "threegujarati", - 0x0ae9, - "threegurmukhi", - 0x0a69, - "threehackarabic", - 0x0663, - "threehangzhou", - 0x3023, - "threeideographicparen", - 0x3222, - "threeinferior", - 0x2083, - "threemonospace", - 0xff13, - "threenumeratorbengali", - 0x09f6, - "threeoldstyle", - 0xf733, - "threeparen", - 0x2476, - "threeperiod", - 0x248a, - "threepersian", - 0x06f3, - "threequarters", - 0x00be, - "threequartersemdash", - 0xf6de, - "threeroman", - 0x2172, - "threesuperior", - 0x00b3, - "threethai", - 0x0e53, - "thzsquare", - 0x3394, - "tihiragana", - 0x3061, - "tikatakana", - 0x30c1, - "tikatakanahalfwidth", - 0xff81, - "tikeutacirclekorean", - 0x3270, - "tikeutaparenkorean", - 0x3210, - "tikeutcirclekorean", - 0x3262, - "tikeutkorean", - 0x3137, - "tikeutparenkorean", - 0x3202, - "tilde", - 0x02dc, - "tildebelowcmb", - 0x0330, - "tildecmb", - 0x0303, - "tildecomb", - 0x0303, - "tildedoublecmb", - 0x0360, - "tildeoperator", - 0x223c, - "tildeoverlaycmb", - 0x0334, - "tildeverticalcmb", - 0x033e, - "timescircle", - 0x2297, - "tipehahebrew", - 0x0596, - "tipehalefthebrew", - 0x0596, - "tippigurmukhi", - 0x0a70, - "titlocyrilliccmb", - 0x0483, - "tiwnarmenian", - 0x057f, - "tlinebelow", - 0x1e6f, - "tmonospace", - 0xff54, - "toarmenian", - 0x0569, - "tohiragana", - 0x3068, - "tokatakana", - 0x30c8, - "tokatakanahalfwidth", - 0xff84, - "tonebarextrahighmod", - 0x02e5, - "tonebarextralowmod", - 0x02e9, - "tonebarhighmod", - 0x02e6, - "tonebarlowmod", - 0x02e8, - "tonebarmidmod", - 0x02e7, - "tonefive", - 0x01bd, - "tonesix", - 0x0185, - "tonetwo", - 0x01a8, - "tonos", - 0x0384, - "tonsquare", - 0x3327, - "topatakthai", - 0x0e0f, - "tortoiseshellbracketleft", - 0x3014, - "tortoiseshellbracketleftsmall", - 0xfe5d, - "tortoiseshellbracketleftvertical", - 0xfe39, - "tortoiseshellbracketright", - 0x3015, - "tortoiseshellbracketrightsmall", - 0xfe5e, - "tortoiseshellbracketrightvertical", - 0xfe3a, - "totaothai", - 0x0e15, - "tpalatalhook", - 0x01ab, - "tparen", - 0x24af, - "trademark", - 0x2122, - "trademarksans", - 0xf8ea, - "trademarkserif", - 0xf6db, - "tretroflexhook", - 0x0288, - "triagdn", - 0x25bc, - "triaglf", - 0x25c4, - "triagrt", - 0x25ba, - "triagup", - 0x25b2, - "ts", - 0x02a6, - "tsadi", - 0x05e6, - "tsadidagesh", - 0xfb46, - "tsadidageshhebrew", - 0xfb46, - "tsadihebrew", - 0x05e6, - "tsecyrillic", - 0x0446, - "tsere", - 0x05b5, - "tsere12", - 0x05b5, - "tsere1e", - 0x05b5, - "tsere2b", - 0x05b5, - "tserehebrew", - 0x05b5, - "tserenarrowhebrew", - 0x05b5, - "tserequarterhebrew", - 0x05b5, - "tserewidehebrew", - 0x05b5, - "tshecyrillic", - 0x045b, - "tsuperior", - 0xf6f3, - "ttabengali", - 0x099f, - "ttadeva", - 0x091f, - "ttagujarati", - 0x0a9f, - "ttagurmukhi", - 0x0a1f, - "tteharabic", - 0x0679, - "ttehfinalarabic", - 0xfb67, - "ttehinitialarabic", - 0xfb68, - "ttehmedialarabic", - 0xfb69, - "tthabengali", - 0x09a0, - "tthadeva", - 0x0920, - "tthagujarati", - 0x0aa0, - "tthagurmukhi", - 0x0a20, - "tturned", - 0x0287, - "tuhiragana", - 0x3064, - "tukatakana", - 0x30c4, - "tukatakanahalfwidth", - 0xff82, - "tusmallhiragana", - 0x3063, - "tusmallkatakana", - 0x30c3, - "tusmallkatakanahalfwidth", - 0xff6f, - "twelvecircle", - 0x246b, - "twelveparen", - 0x247f, - "twelveperiod", - 0x2493, - "twelveroman", - 0x217b, - "twentycircle", - 0x2473, - "twentyhangzhou", - 0x5344, - "twentyparen", - 0x2487, - "twentyperiod", - 0x249b, - "two", - 0x0032, - "twoarabic", - 0x0662, - "twobengali", - 0x09e8, - "twocircle", - 0x2461, - "twocircleinversesansserif", - 0x278b, - "twodeva", - 0x0968, - "twodotenleader", - 0x2025, - "twodotleader", - 0x2025, - "twodotleadervertical", - 0xfe30, - "twogujarati", - 0x0ae8, - "twogurmukhi", - 0x0a68, - "twohackarabic", - 0x0662, - "twohangzhou", - 0x3022, - "twoideographicparen", - 0x3221, - "twoinferior", - 0x2082, - "twomonospace", - 0xff12, - "twonumeratorbengali", - 0x09f5, - "twooldstyle", - 0xf732, - "twoparen", - 0x2475, - "twoperiod", - 0x2489, - "twopersian", - 0x06f2, - "tworoman", - 0x2171, - "twostroke", - 0x01bb, - "twosuperior", - 0x00b2, - "twothai", - 0x0e52, - "twothirds", - 0x2154, - "u", - 0x0075, - "uacute", - 0x00fa, - "ubar", - 0x0289, - "ubengali", - 0x0989, - "ubopomofo", - 0x3128, - "ubreve", - 0x016d, - "ucaron", - 0x01d4, - "ucircle", - 0x24e4, - "ucircumflex", - 0x00fb, - "ucircumflexbelow", - 0x1e77, - "ucyrillic", - 0x0443, - "udattadeva", - 0x0951, - "udblacute", - 0x0171, - "udblgrave", - 0x0215, - "udeva", - 0x0909, - "udieresis", - 0x00fc, - "udieresisacute", - 0x01d8, - "udieresisbelow", - 0x1e73, - "udieresiscaron", - 0x01da, - "udieresiscyrillic", - 0x04f1, - "udieresisgrave", - 0x01dc, - "udieresismacron", - 0x01d6, - "udotbelow", - 0x1ee5, - "ugrave", - 0x00f9, - "ugujarati", - 0x0a89, - "ugurmukhi", - 0x0a09, - "uhiragana", - 0x3046, - "uhookabove", - 0x1ee7, - "uhorn", - 0x01b0, - "uhornacute", - 0x1ee9, - "uhorndotbelow", - 0x1ef1, - "uhorngrave", - 0x1eeb, - "uhornhookabove", - 0x1eed, - "uhorntilde", - 0x1eef, - "uhungarumlaut", - 0x0171, - "uhungarumlautcyrillic", - 0x04f3, - "uinvertedbreve", - 0x0217, - "ukatakana", - 0x30a6, - "ukatakanahalfwidth", - 0xff73, - "ukcyrillic", - 0x0479, - "ukorean", - 0x315c, - "umacron", - 0x016b, - "umacroncyrillic", - 0x04ef, - "umacrondieresis", - 0x1e7b, - "umatragurmukhi", - 0x0a41, - "umonospace", - 0xff55, - "underscore", - 0x005f, - "underscoredbl", - 0x2017, - "underscoremonospace", - 0xff3f, - "underscorevertical", - 0xfe33, - "underscorewavy", - 0xfe4f, - "union", - 0x222a, - "universal", - 0x2200, - "uogonek", - 0x0173, - "uparen", - 0x24b0, - "upblock", - 0x2580, - "upperdothebrew", - 0x05c4, - "upsilon", - 0x03c5, - "upsilondieresis", - 0x03cb, - "upsilondieresistonos", - 0x03b0, - "upsilonlatin", - 0x028a, - "upsilontonos", - 0x03cd, - "uptackbelowcmb", - 0x031d, - "uptackmod", - 0x02d4, - "uragurmukhi", - 0x0a73, - "uring", - 0x016f, - "ushortcyrillic", - 0x045e, - "usmallhiragana", - 0x3045, - "usmallkatakana", - 0x30a5, - "usmallkatakanahalfwidth", - 0xff69, - "ustraightcyrillic", - 0x04af, - "ustraightstrokecyrillic", - 0x04b1, - "utilde", - 0x0169, - "utildeacute", - 0x1e79, - "utildebelow", - 0x1e75, - "uubengali", - 0x098a, - "uudeva", - 0x090a, - "uugujarati", - 0x0a8a, - "uugurmukhi", - 0x0a0a, - "uumatragurmukhi", - 0x0a42, - "uuvowelsignbengali", - 0x09c2, - "uuvowelsigndeva", - 0x0942, - "uuvowelsigngujarati", - 0x0ac2, - "uvowelsignbengali", - 0x09c1, - "uvowelsigndeva", - 0x0941, - "uvowelsigngujarati", - 0x0ac1, - "v", - 0x0076, - "vadeva", - 0x0935, - "vagujarati", - 0x0ab5, - "vagurmukhi", - 0x0a35, - "vakatakana", - 0x30f7, - "vav", - 0x05d5, - "vavdagesh", - 0xfb35, - "vavdagesh65", - 0xfb35, - "vavdageshhebrew", - 0xfb35, - "vavhebrew", - 0x05d5, - "vavholam", - 0xfb4b, - "vavholamhebrew", - 0xfb4b, - "vavvavhebrew", - 0x05f0, - "vavyodhebrew", - 0x05f1, - "vcircle", - 0x24e5, - "vdotbelow", - 0x1e7f, - "vecyrillic", - 0x0432, - "veharabic", - 0x06a4, - "vehfinalarabic", - 0xfb6b, - "vehinitialarabic", - 0xfb6c, - "vehmedialarabic", - 0xfb6d, - "vekatakana", - 0x30f9, - "venus", - 0x2640, - "verticalbar", - 0x007c, - "verticallineabovecmb", - 0x030d, - "verticallinebelowcmb", - 0x0329, - "verticallinelowmod", - 0x02cc, - "verticallinemod", - 0x02c8, - "vewarmenian", - 0x057e, - "vhook", - 0x028b, - "vikatakana", - 0x30f8, - "viramabengali", - 0x09cd, - "viramadeva", - 0x094d, - "viramagujarati", - 0x0acd, - "visargabengali", - 0x0983, - "visargadeva", - 0x0903, - "visargagujarati", - 0x0a83, - "vmonospace", - 0xff56, - "voarmenian", - 0x0578, - "voicediterationhiragana", - 0x309e, - "voicediterationkatakana", - 0x30fe, - "voicedmarkkana", - 0x309b, - "voicedmarkkanahalfwidth", - 0xff9e, - "vokatakana", - 0x30fa, - "vparen", - 0x24b1, - "vtilde", - 0x1e7d, - "vturned", - 0x028c, - "vuhiragana", - 0x3094, - "vukatakana", - 0x30f4, - "w", - 0x0077, - "wacute", - 0x1e83, - "waekorean", - 0x3159, - "wahiragana", - 0x308f, - "wakatakana", - 0x30ef, - "wakatakanahalfwidth", - 0xff9c, - "wakorean", - 0x3158, - "wasmallhiragana", - 0x308e, - "wasmallkatakana", - 0x30ee, - "wattosquare", - 0x3357, - "wavedash", - 0x301c, - "wavyunderscorevertical", - 0xfe34, - "wawarabic", - 0x0648, - "wawfinalarabic", - 0xfeee, - "wawhamzaabovearabic", - 0x0624, - "wawhamzaabovefinalarabic", - 0xfe86, - "wbsquare", - 0x33dd, - "wcircle", - 0x24e6, - "wcircumflex", - 0x0175, - "wdieresis", - 0x1e85, - "wdotaccent", - 0x1e87, - "wdotbelow", - 0x1e89, - "wehiragana", - 0x3091, - "weierstrass", - 0x2118, - "wekatakana", - 0x30f1, - "wekorean", - 0x315e, - "weokorean", - 0x315d, - "wgrave", - 0x1e81, - "whitebullet", - 0x25e6, - "whitecircle", - 0x25cb, - "whitecircleinverse", - 0x25d9, - "whitecornerbracketleft", - 0x300e, - "whitecornerbracketleftvertical", - 0xfe43, - "whitecornerbracketright", - 0x300f, - "whitecornerbracketrightvertical", - 0xfe44, - "whitediamond", - 0x25c7, - "whitediamondcontainingblacksmalldiamond", - 0x25c8, - "whitedownpointingsmalltriangle", - 0x25bf, - "whitedownpointingtriangle", - 0x25bd, - "whiteleftpointingsmalltriangle", - 0x25c3, - "whiteleftpointingtriangle", - 0x25c1, - "whitelenticularbracketleft", - 0x3016, - "whitelenticularbracketright", - 0x3017, - "whiterightpointingsmalltriangle", - 0x25b9, - "whiterightpointingtriangle", - 0x25b7, - "whitesmallsquare", - 0x25ab, - "whitesmilingface", - 0x263a, - "whitesquare", - 0x25a1, - "whitestar", - 0x2606, - "whitetelephone", - 0x260f, - "whitetortoiseshellbracketleft", - 0x3018, - "whitetortoiseshellbracketright", - 0x3019, - "whiteuppointingsmalltriangle", - 0x25b5, - "whiteuppointingtriangle", - 0x25b3, - "wihiragana", - 0x3090, - "wikatakana", - 0x30f0, - "wikorean", - 0x315f, - "wmonospace", - 0xff57, - "wohiragana", - 0x3092, - "wokatakana", - 0x30f2, - "wokatakanahalfwidth", - 0xff66, - "won", - 0x20a9, - "wonmonospace", - 0xffe6, - "wowaenthai", - 0x0e27, - "wparen", - 0x24b2, - "wring", - 0x1e98, - "wsuperior", - 0x02b7, - "wturned", - 0x028d, - "wynn", - 0x01bf, - "x", - 0x0078, - "xabovecmb", - 0x033d, - "xbopomofo", - 0x3112, - "xcircle", - 0x24e7, - "xdieresis", - 0x1e8d, - "xdotaccent", - 0x1e8b, - "xeharmenian", - 0x056d, - "xi", - 0x03be, - "xmonospace", - 0xff58, - "xparen", - 0x24b3, - "xsuperior", - 0x02e3, - "y", - 0x0079, - "yaadosquare", - 0x334e, - "yabengali", - 0x09af, - "yacute", - 0x00fd, - "yadeva", - 0x092f, - "yaekorean", - 0x3152, - "yagujarati", - 0x0aaf, - "yagurmukhi", - 0x0a2f, - "yahiragana", - 0x3084, - "yakatakana", - 0x30e4, - "yakatakanahalfwidth", - 0xff94, - "yakorean", - 0x3151, - "yamakkanthai", - 0x0e4e, - "yasmallhiragana", - 0x3083, - "yasmallkatakana", - 0x30e3, - "yasmallkatakanahalfwidth", - 0xff6c, - "yatcyrillic", - 0x0463, - "ycircle", - 0x24e8, - "ycircumflex", - 0x0177, - "ydieresis", - 0x00ff, - "ydotaccent", - 0x1e8f, - "ydotbelow", - 0x1ef5, - "yeharabic", - 0x064a, - "yehbarreearabic", - 0x06d2, - "yehbarreefinalarabic", - 0xfbaf, - "yehfinalarabic", - 0xfef2, - "yehhamzaabovearabic", - 0x0626, - "yehhamzaabovefinalarabic", - 0xfe8a, - "yehhamzaaboveinitialarabic", - 0xfe8b, - "yehhamzaabovemedialarabic", - 0xfe8c, - "yehinitialarabic", - 0xfef3, - "yehmedialarabic", - 0xfef4, - "yehmeeminitialarabic", - 0xfcdd, - "yehmeemisolatedarabic", - 0xfc58, - "yehnoonfinalarabic", - 0xfc94, - "yehthreedotsbelowarabic", - 0x06d1, - "yekorean", - 0x3156, - "yen", - 0x00a5, - "yenmonospace", - 0xffe5, - "yeokorean", - 0x3155, - "yeorinhieuhkorean", - 0x3186, - "yerahbenyomohebrew", - 0x05aa, - "yerahbenyomolefthebrew", - 0x05aa, - "yericyrillic", - 0x044b, - "yerudieresiscyrillic", - 0x04f9, - "yesieungkorean", - 0x3181, - "yesieungpansioskorean", - 0x3183, - "yesieungsioskorean", - 0x3182, - "yetivhebrew", - 0x059a, - "ygrave", - 0x1ef3, - "yhook", - 0x01b4, - "yhookabove", - 0x1ef7, - "yiarmenian", - 0x0575, - "yicyrillic", - 0x0457, - "yikorean", - 0x3162, - "yinyang", - 0x262f, - "yiwnarmenian", - 0x0582, - "ymonospace", - 0xff59, - "yod", - 0x05d9, - "yoddagesh", - 0xfb39, - "yoddageshhebrew", - 0xfb39, - "yodhebrew", - 0x05d9, - "yodyodhebrew", - 0x05f2, - "yodyodpatahhebrew", - 0xfb1f, - "yohiragana", - 0x3088, - "yoikorean", - 0x3189, - "yokatakana", - 0x30e8, - "yokatakanahalfwidth", - 0xff96, - "yokorean", - 0x315b, - "yosmallhiragana", - 0x3087, - "yosmallkatakana", - 0x30e7, - "yosmallkatakanahalfwidth", - 0xff6e, - "yotgreek", - 0x03f3, - "yoyaekorean", - 0x3188, - "yoyakorean", - 0x3187, - "yoyakthai", - 0x0e22, - "yoyingthai", - 0x0e0d, - "yparen", - 0x24b4, - "ypogegrammeni", - 0x037a, - "ypogegrammenigreekcmb", - 0x0345, - "yr", - 0x01a6, - "yring", - 0x1e99, - "ysuperior", - 0x02b8, - "ytilde", - 0x1ef9, - "yturned", - 0x028e, - "yuhiragana", - 0x3086, - "yuikorean", - 0x318c, - "yukatakana", - 0x30e6, - "yukatakanahalfwidth", - 0xff95, - "yukorean", - 0x3160, - "yusbigcyrillic", - 0x046b, - "yusbigiotifiedcyrillic", - 0x046d, - "yuslittlecyrillic", - 0x0467, - "yuslittleiotifiedcyrillic", - 0x0469, - "yusmallhiragana", - 0x3085, - "yusmallkatakana", - 0x30e5, - "yusmallkatakanahalfwidth", - 0xff6d, - "yuyekorean", - 0x318b, - "yuyeokorean", - 0x318a, - "yyabengali", - 0x09df, - "yyadeva", - 0x095f, - "z", - 0x007a, - "zaarmenian", - 0x0566, - "zacute", - 0x017a, - "zadeva", - 0x095b, - "zagurmukhi", - 0x0a5b, - "zaharabic", - 0x0638, - "zahfinalarabic", - 0xfec6, - "zahinitialarabic", - 0xfec7, - "zahiragana", - 0x3056, - "zahmedialarabic", - 0xfec8, - "zainarabic", - 0x0632, - "zainfinalarabic", - 0xfeb0, - "zakatakana", - 0x30b6, - "zaqefgadolhebrew", - 0x0595, - "zaqefqatanhebrew", - 0x0594, - "zarqahebrew", - 0x0598, - "zayin", - 0x05d6, - "zayindagesh", - 0xfb36, - "zayindageshhebrew", - 0xfb36, - "zayinhebrew", - 0x05d6, - "zbopomofo", - 0x3117, - "zcaron", - 0x017e, - "zcircle", - 0x24e9, - "zcircumflex", - 0x1e91, - "zcurl", - 0x0291, - "zdot", - 0x017c, - "zdotaccent", - 0x017c, - "zdotbelow", - 0x1e93, - "zecyrillic", - 0x0437, - "zedescendercyrillic", - 0x0499, - "zedieresiscyrillic", - 0x04df, - "zehiragana", - 0x305c, - "zekatakana", - 0x30bc, - "zero", - 0x0030, - "zeroarabic", - 0x0660, - "zerobengali", - 0x09e6, - "zerodeva", - 0x0966, - "zerogujarati", - 0x0ae6, - "zerogurmukhi", - 0x0a66, - "zerohackarabic", - 0x0660, - "zeroinferior", - 0x2080, - "zeromonospace", - 0xff10, - "zerooldstyle", - 0xf730, - "zeropersian", - 0x06f0, - "zerosuperior", - 0x2070, - "zerothai", - 0x0e50, - "zerowidthjoiner", - 0xfeff, - "zerowidthnonjoiner", - 0x200c, - "zerowidthspace", - 0x200b, - "zeta", - 0x03b6, - "zhbopomofo", - 0x3113, - "zhearmenian", - 0x056a, - "zhebrevecyrillic", - 0x04c2, - "zhecyrillic", - 0x0436, - "zhedescendercyrillic", - 0x0497, - "zhedieresiscyrillic", - 0x04dd, - "zihiragana", - 0x3058, - "zikatakana", - 0x30b8, - "zinorhebrew", - 0x05ae, - "zlinebelow", - 0x1e95, - "zmonospace", - 0xff5a, - "zohiragana", - 0x305e, - "zokatakana", - 0x30be, - "zparen", - 0x24b5, - "zretroflexhook", - 0x0290, - "zstroke", - 0x01b6, - "zuhiragana", - 0x305a, - "zukatakana", - 0x30ba, - ".notdef", - 0x0000, - "angbracketleftbig", - 0x2329, - "angbracketleftBig", - 0x2329, - "angbracketleftbigg", - 0x2329, - "angbracketleftBigg", - 0x2329, - "angbracketrightBig", - 0x232a, - "angbracketrightbig", - 0x232a, - "angbracketrightBigg", - 0x232a, - "angbracketrightbigg", - 0x232a, - "arrowhookleft", - 0x21aa, - "arrowhookright", - 0x21a9, - "arrowlefttophalf", - 0x21bc, - "arrowleftbothalf", - 0x21bd, - "arrownortheast", - 0x2197, - "arrownorthwest", - 0x2196, - "arrowrighttophalf", - 0x21c0, - "arrowrightbothalf", - 0x21c1, - "arrowsoutheast", - 0x2198, - "arrowsouthwest", - 0x2199, - "backslashbig", - 0x2216, - "backslashBig", - 0x2216, - "backslashBigg", - 0x2216, - "backslashbigg", - 0x2216, - "bardbl", - 0x2016, - "bracehtipdownleft", - 0xfe37, - "bracehtipdownright", - 0xfe37, - "bracehtipupleft", - 0xfe38, - "bracehtipupright", - 0xfe38, - "braceleftBig", - 0x007b, - "braceleftbig", - 0x007b, - "braceleftbigg", - 0x007b, - "braceleftBigg", - 0x007b, - "bracerightBig", - 0x007d, - "bracerightbig", - 0x007d, - "bracerightbigg", - 0x007d, - "bracerightBigg", - 0x007d, - "bracketleftbig", - 0x005b, - "bracketleftBig", - 0x005b, - "bracketleftbigg", - 0x005b, - "bracketleftBigg", - 0x005b, - "bracketrightBig", - 0x005d, - "bracketrightbig", - 0x005d, - "bracketrightbigg", - 0x005d, - "bracketrightBigg", - 0x005d, - "ceilingleftbig", - 0x2308, - "ceilingleftBig", - 0x2308, - "ceilingleftBigg", - 0x2308, - "ceilingleftbigg", - 0x2308, - "ceilingrightbig", - 0x2309, - "ceilingrightBig", - 0x2309, - "ceilingrightbigg", - 0x2309, - "ceilingrightBigg", - 0x2309, - "circledotdisplay", - 0x2299, - "circledottext", - 0x2299, - "circlemultiplydisplay", - 0x2297, - "circlemultiplytext", - 0x2297, - "circleplusdisplay", - 0x2295, - "circleplustext", - 0x2295, - "contintegraldisplay", - 0x222e, - "contintegraltext", - 0x222e, - "coproductdisplay", - 0x2210, - "coproducttext", - 0x2210, - "floorleftBig", - 0x230a, - "floorleftbig", - 0x230a, - "floorleftbigg", - 0x230a, - "floorleftBigg", - 0x230a, - "floorrightbig", - 0x230b, - "floorrightBig", - 0x230b, - "floorrightBigg", - 0x230b, - "floorrightbigg", - 0x230b, - "hatwide", - 0x0302, - "hatwider", - 0x0302, - "hatwidest", - 0x0302, - "intercal", - 0x1d40, - "integraldisplay", - 0x222b, - "integraltext", - 0x222b, - "intersectiondisplay", - 0x22c2, - "intersectiontext", - 0x22c2, - "logicalanddisplay", - 0x2227, - "logicalandtext", - 0x2227, - "logicalordisplay", - 0x2228, - "logicalortext", - 0x2228, - "parenleftBig", - 0x0028, - "parenleftbig", - 0x0028, - "parenleftBigg", - 0x0028, - "parenleftbigg", - 0x0028, - "parenrightBig", - 0x0029, - "parenrightbig", - 0x0029, - "parenrightBigg", - 0x0029, - "parenrightbigg", - 0x0029, - "prime", - 0x2032, - "productdisplay", - 0x220f, - "producttext", - 0x220f, - "radicalbig", - 0x221a, - "radicalBig", - 0x221a, - "radicalBigg", - 0x221a, - "radicalbigg", - 0x221a, - "radicalbt", - 0x221a, - "radicaltp", - 0x221a, - "radicalvertex", - 0x221a, - "slashbig", - 0x002f, - "slashBig", - 0x002f, - "slashBigg", - 0x002f, - "slashbigg", - 0x002f, - "summationdisplay", - 0x2211, - "summationtext", - 0x2211, - "tildewide", - 0x02dc, - "tildewider", - 0x02dc, - "tildewidest", - 0x02dc, - "uniondisplay", - 0x22c3, - "unionmultidisplay", - 0x228e, - "unionmultitext", - 0x228e, - "unionsqdisplay", - 0x2294, - "unionsqtext", - 0x2294, - "uniontext", - 0x22c3, - "vextenddouble", - 0x2225, - "vextendsingle", - 0x2223 - ]; -}); -const getDingbatsGlyphsUnicode = (0, _core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getArrayLookupTableFactory)(function () { - return [ - "space", - 0x0020, - "a1", - 0x2701, - "a2", - 0x2702, - "a202", - 0x2703, - "a3", - 0x2704, - "a4", - 0x260e, - "a5", - 0x2706, - "a119", - 0x2707, - "a118", - 0x2708, - "a117", - 0x2709, - "a11", - 0x261b, - "a12", - 0x261e, - "a13", - 0x270c, - "a14", - 0x270d, - "a15", - 0x270e, - "a16", - 0x270f, - "a105", - 0x2710, - "a17", - 0x2711, - "a18", - 0x2712, - "a19", - 0x2713, - "a20", - 0x2714, - "a21", - 0x2715, - "a22", - 0x2716, - "a23", - 0x2717, - "a24", - 0x2718, - "a25", - 0x2719, - "a26", - 0x271a, - "a27", - 0x271b, - "a28", - 0x271c, - "a6", - 0x271d, - "a7", - 0x271e, - "a8", - 0x271f, - "a9", - 0x2720, - "a10", - 0x2721, - "a29", - 0x2722, - "a30", - 0x2723, - "a31", - 0x2724, - "a32", - 0x2725, - "a33", - 0x2726, - "a34", - 0x2727, - "a35", - 0x2605, - "a36", - 0x2729, - "a37", - 0x272a, - "a38", - 0x272b, - "a39", - 0x272c, - "a40", - 0x272d, - "a41", - 0x272e, - "a42", - 0x272f, - "a43", - 0x2730, - "a44", - 0x2731, - "a45", - 0x2732, - "a46", - 0x2733, - "a47", - 0x2734, - "a48", - 0x2735, - "a49", - 0x2736, - "a50", - 0x2737, - "a51", - 0x2738, - "a52", - 0x2739, - "a53", - 0x273a, - "a54", - 0x273b, - "a55", - 0x273c, - "a56", - 0x273d, - "a57", - 0x273e, - "a58", - 0x273f, - "a59", - 0x2740, - "a60", - 0x2741, - "a61", - 0x2742, - "a62", - 0x2743, - "a63", - 0x2744, - "a64", - 0x2745, - "a65", - 0x2746, - "a66", - 0x2747, - "a67", - 0x2748, - "a68", - 0x2749, - "a69", - 0x274a, - "a70", - 0x274b, - "a71", - 0x25cf, - "a72", - 0x274d, - "a73", - 0x25a0, - "a74", - 0x274f, - "a203", - 0x2750, - "a75", - 0x2751, - "a204", - 0x2752, - "a76", - 0x25b2, - "a77", - 0x25bc, - "a78", - 0x25c6, - "a79", - 0x2756, - "a81", - 0x25d7, - "a82", - 0x2758, - "a83", - 0x2759, - "a84", - 0x275a, - "a97", - 0x275b, - "a98", - 0x275c, - "a99", - 0x275d, - "a100", - 0x275e, - "a101", - 0x2761, - "a102", - 0x2762, - "a103", - 0x2763, - "a104", - 0x2764, - "a106", - 0x2765, - "a107", - 0x2766, - "a108", - 0x2767, - "a112", - 0x2663, - "a111", - 0x2666, - "a110", - 0x2665, - "a109", - 0x2660, - "a120", - 0x2460, - "a121", - 0x2461, - "a122", - 0x2462, - "a123", - 0x2463, - "a124", - 0x2464, - "a125", - 0x2465, - "a126", - 0x2466, - "a127", - 0x2467, - "a128", - 0x2468, - "a129", - 0x2469, - "a130", - 0x2776, - "a131", - 0x2777, - "a132", - 0x2778, - "a133", - 0x2779, - "a134", - 0x277a, - "a135", - 0x277b, - "a136", - 0x277c, - "a137", - 0x277d, - "a138", - 0x277e, - "a139", - 0x277f, - "a140", - 0x2780, - "a141", - 0x2781, - "a142", - 0x2782, - "a143", - 0x2783, - "a144", - 0x2784, - "a145", - 0x2785, - "a146", - 0x2786, - "a147", - 0x2787, - "a148", - 0x2788, - "a149", - 0x2789, - "a150", - 0x278a, - "a151", - 0x278b, - "a152", - 0x278c, - "a153", - 0x278d, - "a154", - 0x278e, - "a155", - 0x278f, - "a156", - 0x2790, - "a157", - 0x2791, - "a158", - 0x2792, - "a159", - 0x2793, - "a160", - 0x2794, - "a161", - 0x2192, - "a163", - 0x2194, - "a164", - 0x2195, - "a196", - 0x2798, - "a165", - 0x2799, - "a192", - 0x279a, - "a166", - 0x279b, - "a167", - 0x279c, - "a168", - 0x279d, - "a169", - 0x279e, - "a170", - 0x279f, - "a171", - 0x27a0, - "a172", - 0x27a1, - "a173", - 0x27a2, - "a162", - 0x27a3, - "a174", - 0x27a4, - "a175", - 0x27a5, - "a176", - 0x27a6, - "a177", - 0x27a7, - "a178", - 0x27a8, - "a179", - 0x27a9, - "a193", - 0x27aa, - "a180", - 0x27ab, - "a199", - 0x27ac, - "a181", - 0x27ad, - "a200", - 0x27ae, - "a182", - 0x27af, - "a201", - 0x27b1, - "a183", - 0x27b2, - "a184", - 0x27b3, - "a197", - 0x27b4, - "a185", - 0x27b5, - "a194", - 0x27b6, - "a198", - 0x27b7, - "a186", - 0x27b8, - "a195", - 0x27b9, - "a187", - 0x27ba, - "a188", - 0x27bb, - "a189", - 0x27bc, - "a190", - 0x27bd, - "a191", - 0x27be, - "a89", - 0x2768, - "a90", - 0x2769, - "a93", - 0x276a, - "a94", - 0x276b, - "a91", - 0x276c, - "a92", - 0x276d, - "a205", - 0x276e, - "a85", - 0x276f, - "a206", - 0x2770, - "a86", - 0x2771, - "a87", - 0x2772, - "a88", - 0x2773, - "a95", - 0x2774, - "a96", - 0x2775, - ".notdef", - 0x0000 - ]; -}); - - -/***/ }), -/* 21 */ -/***/ ((__unused_webpack_module, __webpack_exports__, __w_pdfjs_require__) => { - -__w_pdfjs_require__.r(__webpack_exports__); -/* harmony export */ __w_pdfjs_require__.d(__webpack_exports__, { -/* harmony export */ "getNormalizedUnicodes": () => (/* binding */ getNormalizedUnicodes), -/* harmony export */ "getUnicodeForGlyph": () => (/* binding */ getUnicodeForGlyph), -/* harmony export */ "getUnicodeRangeFor": () => (/* binding */ getUnicodeRangeFor), -/* harmony export */ "mapSpecialUnicodeValues": () => (/* binding */ mapSpecialUnicodeValues), -/* harmony export */ "reverseIfRtl": () => (/* binding */ reverseIfRtl) -/* harmony export */ }); -/* harmony import */ var _core_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __w_pdfjs_require__(9); - -const getSpecialPUASymbols = (0, _core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getLookupTableFactory)(function (t) { - t[63721] = 0x00a9; - t[63193] = 0x00a9; - t[63720] = 0x00ae; - t[63194] = 0x00ae; - t[63722] = 0x2122; - t[63195] = 0x2122; - t[63729] = 0x23a7; - t[63730] = 0x23a8; - t[63731] = 0x23a9; - t[63740] = 0x23ab; - t[63741] = 0x23ac; - t[63742] = 0x23ad; - t[63726] = 0x23a1; - t[63727] = 0x23a2; - t[63728] = 0x23a3; - t[63737] = 0x23a4; - t[63738] = 0x23a5; - t[63739] = 0x23a6; - t[63723] = 0x239b; - t[63724] = 0x239c; - t[63725] = 0x239d; - t[63734] = 0x239e; - t[63735] = 0x239f; - t[63736] = 0x23a0; -}); -function mapSpecialUnicodeValues(code) { - if (code >= 0xfff0 && code <= 0xffff) { - return 0; - } else if (code >= 0xf600 && code <= 0xf8ff) { - return getSpecialPUASymbols()[code] || code; - } else if (code === 0x00ad) { - return 0x002d; - } - return code; -} -function getUnicodeForGlyph(name, glyphsUnicodeMap) { - let unicode = glyphsUnicodeMap[name]; - if (unicode !== undefined) { - return unicode; - } - if (!name) { - return -1; - } - if (name[0] === "u") { - const nameLen = name.length; - let hexStr; - if (nameLen === 7 && name[1] === "n" && name[2] === "i") { - hexStr = name.substring(3); - } else if (nameLen >= 5 && nameLen <= 7) { - hexStr = name.substring(1); - } else { - return -1; - } - if (hexStr === hexStr.toUpperCase()) { - unicode = parseInt(hexStr, 16); - if (unicode >= 0) { - return unicode; - } - } - } - return -1; -} -const UnicodeRanges = [ - { - begin: 0x0000, - end: 0x007f - }, - { - begin: 0x0080, - end: 0x00ff - }, - { - begin: 0x0100, - end: 0x017f - }, - { - begin: 0x0180, - end: 0x024f - }, - { - begin: 0x0250, - end: 0x02af - }, - { - begin: 0x02b0, - end: 0x02ff - }, - { - begin: 0x0300, - end: 0x036f - }, - { - begin: 0x0370, - end: 0x03ff - }, - { - begin: 0x2c80, - end: 0x2cff - }, - { - begin: 0x0400, - end: 0x04ff - }, - { - begin: 0x0530, - end: 0x058f - }, - { - begin: 0x0590, - end: 0x05ff - }, - { - begin: 0xa500, - end: 0xa63f - }, - { - begin: 0x0600, - end: 0x06ff - }, - { - begin: 0x07c0, - end: 0x07ff - }, - { - begin: 0x0900, - end: 0x097f - }, - { - begin: 0x0980, - end: 0x09ff - }, - { - begin: 0x0a00, - end: 0x0a7f - }, - { - begin: 0x0a80, - end: 0x0aff - }, - { - begin: 0x0b00, - end: 0x0b7f - }, - { - begin: 0x0b80, - end: 0x0bff - }, - { - begin: 0x0c00, - end: 0x0c7f - }, - { - begin: 0x0c80, - end: 0x0cff - }, - { - begin: 0x0d00, - end: 0x0d7f - }, - { - begin: 0x0e00, - end: 0x0e7f - }, - { - begin: 0x0e80, - end: 0x0eff - }, - { - begin: 0x10a0, - end: 0x10ff - }, - { - begin: 0x1b00, - end: 0x1b7f - }, - { - begin: 0x1100, - end: 0x11ff - }, - { - begin: 0x1e00, - end: 0x1eff - }, - { - begin: 0x1f00, - end: 0x1fff - }, - { - begin: 0x2000, - end: 0x206f - }, - { - begin: 0x2070, - end: 0x209f - }, - { - begin: 0x20a0, - end: 0x20cf - }, - { - begin: 0x20d0, - end: 0x20ff - }, - { - begin: 0x2100, - end: 0x214f - }, - { - begin: 0x2150, - end: 0x218f - }, - { - begin: 0x2190, - end: 0x21ff - }, - { - begin: 0x2200, - end: 0x22ff - }, - { - begin: 0x2300, - end: 0x23ff - }, - { - begin: 0x2400, - end: 0x243f - }, - { - begin: 0x2440, - end: 0x245f - }, - { - begin: 0x2460, - end: 0x24ff - }, - { - begin: 0x2500, - end: 0x257f - }, - { - begin: 0x2580, - end: 0x259f - }, - { - begin: 0x25a0, - end: 0x25ff - }, - { - begin: 0x2600, - end: 0x26ff - }, - { - begin: 0x2700, - end: 0x27bf - }, - { - begin: 0x3000, - end: 0x303f - }, - { - begin: 0x3040, - end: 0x309f - }, - { - begin: 0x30a0, - end: 0x30ff - }, - { - begin: 0x3100, - end: 0x312f - }, - { - begin: 0x3130, - end: 0x318f - }, - { - begin: 0xa840, - end: 0xa87f - }, - { - begin: 0x3200, - end: 0x32ff - }, - { - begin: 0x3300, - end: 0x33ff - }, - { - begin: 0xac00, - end: 0xd7af - }, - { - begin: 0xd800, - end: 0xdfff - }, - { - begin: 0x10900, - end: 0x1091f - }, - { - begin: 0x4e00, - end: 0x9fff - }, - { - begin: 0xe000, - end: 0xf8ff - }, - { - begin: 0x31c0, - end: 0x31ef - }, - { - begin: 0xfb00, - end: 0xfb4f - }, - { - begin: 0xfb50, - end: 0xfdff - }, - { - begin: 0xfe20, - end: 0xfe2f - }, - { - begin: 0xfe10, - end: 0xfe1f - }, - { - begin: 0xfe50, - end: 0xfe6f - }, - { - begin: 0xfe70, - end: 0xfeff - }, - { - begin: 0xff00, - end: 0xffef - }, - { - begin: 0xfff0, - end: 0xffff - }, - { - begin: 0x0f00, - end: 0x0fff - }, - { - begin: 0x0700, - end: 0x074f - }, - { - begin: 0x0780, - end: 0x07bf - }, - { - begin: 0x0d80, - end: 0x0dff - }, - { - begin: 0x1000, - end: 0x109f - }, - { - begin: 0x1200, - end: 0x137f - }, - { - begin: 0x13a0, - end: 0x13ff - }, - { - begin: 0x1400, - end: 0x167f - }, - { - begin: 0x1680, - end: 0x169f - }, - { - begin: 0x16a0, - end: 0x16ff - }, - { - begin: 0x1780, - end: 0x17ff - }, - { - begin: 0x1800, - end: 0x18af - }, - { - begin: 0x2800, - end: 0x28ff - }, - { - begin: 0xa000, - end: 0xa48f - }, - { - begin: 0x1700, - end: 0x171f - }, - { - begin: 0x10300, - end: 0x1032f - }, - { - begin: 0x10330, - end: 0x1034f - }, - { - begin: 0x10400, - end: 0x1044f - }, - { - begin: 0x1d000, - end: 0x1d0ff - }, - { - begin: 0x1d400, - end: 0x1d7ff - }, - { - begin: 0xff000, - end: 0xffffd - }, - { - begin: 0xfe00, - end: 0xfe0f - }, - { - begin: 0xe0000, - end: 0xe007f - }, - { - begin: 0x1900, - end: 0x194f - }, - { - begin: 0x1950, - end: 0x197f - }, - { - begin: 0x1980, - end: 0x19df - }, - { - begin: 0x1a00, - end: 0x1a1f - }, - { - begin: 0x2c00, - end: 0x2c5f - }, - { - begin: 0x2d30, - end: 0x2d7f - }, - { - begin: 0x4dc0, - end: 0x4dff - }, - { - begin: 0xa800, - end: 0xa82f - }, - { - begin: 0x10000, - end: 0x1007f - }, - { - begin: 0x10140, - end: 0x1018f - }, - { - begin: 0x10380, - end: 0x1039f - }, - { - begin: 0x103a0, - end: 0x103df - }, - { - begin: 0x10450, - end: 0x1047f - }, - { - begin: 0x10480, - end: 0x104af - }, - { - begin: 0x10800, - end: 0x1083f - }, - { - begin: 0x10a00, - end: 0x10a5f - }, - { - begin: 0x1d300, - end: 0x1d35f - }, - { - begin: 0x12000, - end: 0x123ff - }, - { - begin: 0x1d360, - end: 0x1d37f - }, - { - begin: 0x1b80, - end: 0x1bbf - }, - { - begin: 0x1c00, - end: 0x1c4f - }, - { - begin: 0x1c50, - end: 0x1c7f - }, - { - begin: 0xa880, - end: 0xa8df - }, - { - begin: 0xa900, - end: 0xa92f - }, - { - begin: 0xa930, - end: 0xa95f - }, - { - begin: 0xaa00, - end: 0xaa5f - }, - { - begin: 0x10190, - end: 0x101cf - }, - { - begin: 0x101d0, - end: 0x101ff - }, - { - begin: 0x102a0, - end: 0x102df - }, - { - begin: 0x1f030, - end: 0x1f09f - } -]; -function getUnicodeRangeFor(value) { - for (let i = 0, ii = UnicodeRanges.length; i < ii; i++) { - const range = UnicodeRanges[i]; - if (value >= range.begin && value < range.end) { - return i; - } - } - return -1; -} -function isRTLRangeFor(value) { - let range = UnicodeRanges[13]; - if (value >= range.begin && value < range.end) { - return true; - } - range = UnicodeRanges[11]; - if (value >= range.begin && value < range.end) { - return true; - } - return false; -} -const getNormalizedUnicodes = (0, _core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getArrayLookupTableFactory)(function () { - return [ - "\u00A8", - "\u0020\u0308", - "\u00AF", - "\u0020\u0304", - "\u00B4", - "\u0020\u0301", - "\u00B5", - "\u03BC", - "\u00B8", - "\u0020\u0327", - "\u0132", - "\u0049\u004A", - "\u0133", - "\u0069\u006A", - "\u013F", - "\u004C\u00B7", - "\u0140", - "\u006C\u00B7", - "\u0149", - "\u02BC\u006E", - "\u017F", - "\u0073", - "\u01C4", - "\u0044\u017D", - "\u01C5", - "\u0044\u017E", - "\u01C6", - "\u0064\u017E", - "\u01C7", - "\u004C\u004A", - "\u01C8", - "\u004C\u006A", - "\u01C9", - "\u006C\u006A", - "\u01CA", - "\u004E\u004A", - "\u01CB", - "\u004E\u006A", - "\u01CC", - "\u006E\u006A", - "\u01F1", - "\u0044\u005A", - "\u01F2", - "\u0044\u007A", - "\u01F3", - "\u0064\u007A", - "\u02D8", - "\u0020\u0306", - "\u02D9", - "\u0020\u0307", - "\u02DA", - "\u0020\u030A", - "\u02DB", - "\u0020\u0328", - "\u02DC", - "\u0020\u0303", - "\u02DD", - "\u0020\u030B", - "\u037A", - "\u0020\u0345", - "\u0384", - "\u0020\u0301", - "\u03D0", - "\u03B2", - "\u03D1", - "\u03B8", - "\u03D2", - "\u03A5", - "\u03D5", - "\u03C6", - "\u03D6", - "\u03C0", - "\u03F0", - "\u03BA", - "\u03F1", - "\u03C1", - "\u03F2", - "\u03C2", - "\u03F4", - "\u0398", - "\u03F5", - "\u03B5", - "\u03F9", - "\u03A3", - "\u0587", - "\u0565\u0582", - "\u0675", - "\u0627\u0674", - "\u0676", - "\u0648\u0674", - "\u0677", - "\u06C7\u0674", - "\u0678", - "\u064A\u0674", - "\u0E33", - "\u0E4D\u0E32", - "\u0EB3", - "\u0ECD\u0EB2", - "\u0EDC", - "\u0EAB\u0E99", - "\u0EDD", - "\u0EAB\u0EA1", - "\u0F77", - "\u0FB2\u0F81", - "\u0F79", - "\u0FB3\u0F81", - "\u1E9A", - "\u0061\u02BE", - "\u1FBD", - "\u0020\u0313", - "\u1FBF", - "\u0020\u0313", - "\u1FC0", - "\u0020\u0342", - "\u1FFE", - "\u0020\u0314", - "\u2002", - "\u0020", - "\u2003", - "\u0020", - "\u2004", - "\u0020", - "\u2005", - "\u0020", - "\u2006", - "\u0020", - "\u2008", - "\u0020", - "\u2009", - "\u0020", - "\u200A", - "\u0020", - "\u2017", - "\u0020\u0333", - "\u2024", - "\u002E", - "\u2025", - "\u002E\u002E", - "\u2026", - "\u002E\u002E\u002E", - "\u2033", - "\u2032\u2032", - "\u2034", - "\u2032\u2032\u2032", - "\u2036", - "\u2035\u2035", - "\u2037", - "\u2035\u2035\u2035", - "\u203C", - "\u0021\u0021", - "\u203E", - "\u0020\u0305", - "\u2047", - "\u003F\u003F", - "\u2048", - "\u003F\u0021", - "\u2049", - "\u0021\u003F", - "\u2057", - "\u2032\u2032\u2032\u2032", - "\u205F", - "\u0020", - "\u20A8", - "\u0052\u0073", - "\u2100", - "\u0061\u002F\u0063", - "\u2101", - "\u0061\u002F\u0073", - "\u2103", - "\u00B0\u0043", - "\u2105", - "\u0063\u002F\u006F", - "\u2106", - "\u0063\u002F\u0075", - "\u2107", - "\u0190", - "\u2109", - "\u00B0\u0046", - "\u2116", - "\u004E\u006F", - "\u2121", - "\u0054\u0045\u004C", - "\u2135", - "\u05D0", - "\u2136", - "\u05D1", - "\u2137", - "\u05D2", - "\u2138", - "\u05D3", - "\u213B", - "\u0046\u0041\u0058", - "\u2160", - "\u0049", - "\u2161", - "\u0049\u0049", - "\u2162", - "\u0049\u0049\u0049", - "\u2163", - "\u0049\u0056", - "\u2164", - "\u0056", - "\u2165", - "\u0056\u0049", - "\u2166", - "\u0056\u0049\u0049", - "\u2167", - "\u0056\u0049\u0049\u0049", - "\u2168", - "\u0049\u0058", - "\u2169", - "\u0058", - "\u216A", - "\u0058\u0049", - "\u216B", - "\u0058\u0049\u0049", - "\u216C", - "\u004C", - "\u216D", - "\u0043", - "\u216E", - "\u0044", - "\u216F", - "\u004D", - "\u2170", - "\u0069", - "\u2171", - "\u0069\u0069", - "\u2172", - "\u0069\u0069\u0069", - "\u2173", - "\u0069\u0076", - "\u2174", - "\u0076", - "\u2175", - "\u0076\u0069", - "\u2176", - "\u0076\u0069\u0069", - "\u2177", - "\u0076\u0069\u0069\u0069", - "\u2178", - "\u0069\u0078", - "\u2179", - "\u0078", - "\u217A", - "\u0078\u0069", - "\u217B", - "\u0078\u0069\u0069", - "\u217C", - "\u006C", - "\u217D", - "\u0063", - "\u217E", - "\u0064", - "\u217F", - "\u006D", - "\u222C", - "\u222B\u222B", - "\u222D", - "\u222B\u222B\u222B", - "\u222F", - "\u222E\u222E", - "\u2230", - "\u222E\u222E\u222E", - "\u2474", - "\u0028\u0031\u0029", - "\u2475", - "\u0028\u0032\u0029", - "\u2476", - "\u0028\u0033\u0029", - "\u2477", - "\u0028\u0034\u0029", - "\u2478", - "\u0028\u0035\u0029", - "\u2479", - "\u0028\u0036\u0029", - "\u247A", - "\u0028\u0037\u0029", - "\u247B", - "\u0028\u0038\u0029", - "\u247C", - "\u0028\u0039\u0029", - "\u247D", - "\u0028\u0031\u0030\u0029", - "\u247E", - "\u0028\u0031\u0031\u0029", - "\u247F", - "\u0028\u0031\u0032\u0029", - "\u2480", - "\u0028\u0031\u0033\u0029", - "\u2481", - "\u0028\u0031\u0034\u0029", - "\u2482", - "\u0028\u0031\u0035\u0029", - "\u2483", - "\u0028\u0031\u0036\u0029", - "\u2484", - "\u0028\u0031\u0037\u0029", - "\u2485", - "\u0028\u0031\u0038\u0029", - "\u2486", - "\u0028\u0031\u0039\u0029", - "\u2487", - "\u0028\u0032\u0030\u0029", - "\u2488", - "\u0031\u002E", - "\u2489", - "\u0032\u002E", - "\u248A", - "\u0033\u002E", - "\u248B", - "\u0034\u002E", - "\u248C", - "\u0035\u002E", - "\u248D", - "\u0036\u002E", - "\u248E", - "\u0037\u002E", - "\u248F", - "\u0038\u002E", - "\u2490", - "\u0039\u002E", - "\u2491", - "\u0031\u0030\u002E", - "\u2492", - "\u0031\u0031\u002E", - "\u2493", - "\u0031\u0032\u002E", - "\u2494", - "\u0031\u0033\u002E", - "\u2495", - "\u0031\u0034\u002E", - "\u2496", - "\u0031\u0035\u002E", - "\u2497", - "\u0031\u0036\u002E", - "\u2498", - "\u0031\u0037\u002E", - "\u2499", - "\u0031\u0038\u002E", - "\u249A", - "\u0031\u0039\u002E", - "\u249B", - "\u0032\u0030\u002E", - "\u249C", - "\u0028\u0061\u0029", - "\u249D", - "\u0028\u0062\u0029", - "\u249E", - "\u0028\u0063\u0029", - "\u249F", - "\u0028\u0064\u0029", - "\u24A0", - "\u0028\u0065\u0029", - "\u24A1", - "\u0028\u0066\u0029", - "\u24A2", - "\u0028\u0067\u0029", - "\u24A3", - "\u0028\u0068\u0029", - "\u24A4", - "\u0028\u0069\u0029", - "\u24A5", - "\u0028\u006A\u0029", - "\u24A6", - "\u0028\u006B\u0029", - "\u24A7", - "\u0028\u006C\u0029", - "\u24A8", - "\u0028\u006D\u0029", - "\u24A9", - "\u0028\u006E\u0029", - "\u24AA", - "\u0028\u006F\u0029", - "\u24AB", - "\u0028\u0070\u0029", - "\u24AC", - "\u0028\u0071\u0029", - "\u24AD", - "\u0028\u0072\u0029", - "\u24AE", - "\u0028\u0073\u0029", - "\u24AF", - "\u0028\u0074\u0029", - "\u24B0", - "\u0028\u0075\u0029", - "\u24B1", - "\u0028\u0076\u0029", - "\u24B2", - "\u0028\u0077\u0029", - "\u24B3", - "\u0028\u0078\u0029", - "\u24B4", - "\u0028\u0079\u0029", - "\u24B5", - "\u0028\u007A\u0029", - "\u2A0C", - "\u222B\u222B\u222B\u222B", - "\u2A74", - "\u003A\u003A\u003D", - "\u2A75", - "\u003D\u003D", - "\u2A76", - "\u003D\u003D\u003D", - "\u2E9F", - "\u6BCD", - "\u2EF3", - "\u9F9F", - "\u2F00", - "\u4E00", - "\u2F01", - "\u4E28", - "\u2F02", - "\u4E36", - "\u2F03", - "\u4E3F", - "\u2F04", - "\u4E59", - "\u2F05", - "\u4E85", - "\u2F06", - "\u4E8C", - "\u2F07", - "\u4EA0", - "\u2F08", - "\u4EBA", - "\u2F09", - "\u513F", - "\u2F0A", - "\u5165", - "\u2F0B", - "\u516B", - "\u2F0C", - "\u5182", - "\u2F0D", - "\u5196", - "\u2F0E", - "\u51AB", - "\u2F0F", - "\u51E0", - "\u2F10", - "\u51F5", - "\u2F11", - "\u5200", - "\u2F12", - "\u529B", - "\u2F13", - "\u52F9", - "\u2F14", - "\u5315", - "\u2F15", - "\u531A", - "\u2F16", - "\u5338", - "\u2F17", - "\u5341", - "\u2F18", - "\u535C", - "\u2F19", - "\u5369", - "\u2F1A", - "\u5382", - "\u2F1B", - "\u53B6", - "\u2F1C", - "\u53C8", - "\u2F1D", - "\u53E3", - "\u2F1E", - "\u56D7", - "\u2F1F", - "\u571F", - "\u2F20", - "\u58EB", - "\u2F21", - "\u5902", - "\u2F22", - "\u590A", - "\u2F23", - "\u5915", - "\u2F24", - "\u5927", - "\u2F25", - "\u5973", - "\u2F26", - "\u5B50", - "\u2F27", - "\u5B80", - "\u2F28", - "\u5BF8", - "\u2F29", - "\u5C0F", - "\u2F2A", - "\u5C22", - "\u2F2B", - "\u5C38", - "\u2F2C", - "\u5C6E", - "\u2F2D", - "\u5C71", - "\u2F2E", - "\u5DDB", - "\u2F2F", - "\u5DE5", - "\u2F30", - "\u5DF1", - "\u2F31", - "\u5DFE", - "\u2F32", - "\u5E72", - "\u2F33", - "\u5E7A", - "\u2F34", - "\u5E7F", - "\u2F35", - "\u5EF4", - "\u2F36", - "\u5EFE", - "\u2F37", - "\u5F0B", - "\u2F38", - "\u5F13", - "\u2F39", - "\u5F50", - "\u2F3A", - "\u5F61", - "\u2F3B", - "\u5F73", - "\u2F3C", - "\u5FC3", - "\u2F3D", - "\u6208", - "\u2F3E", - "\u6236", - "\u2F3F", - "\u624B", - "\u2F40", - "\u652F", - "\u2F41", - "\u6534", - "\u2F42", - "\u6587", - "\u2F43", - "\u6597", - "\u2F44", - "\u65A4", - "\u2F45", - "\u65B9", - "\u2F46", - "\u65E0", - "\u2F47", - "\u65E5", - "\u2F48", - "\u66F0", - "\u2F49", - "\u6708", - "\u2F4A", - "\u6728", - "\u2F4B", - "\u6B20", - "\u2F4C", - "\u6B62", - "\u2F4D", - "\u6B79", - "\u2F4E", - "\u6BB3", - "\u2F4F", - "\u6BCB", - "\u2F50", - "\u6BD4", - "\u2F51", - "\u6BDB", - "\u2F52", - "\u6C0F", - "\u2F53", - "\u6C14", - "\u2F54", - "\u6C34", - "\u2F55", - "\u706B", - "\u2F56", - "\u722A", - "\u2F57", - "\u7236", - "\u2F58", - "\u723B", - "\u2F59", - "\u723F", - "\u2F5A", - "\u7247", - "\u2F5B", - "\u7259", - "\u2F5C", - "\u725B", - "\u2F5D", - "\u72AC", - "\u2F5E", - "\u7384", - "\u2F5F", - "\u7389", - "\u2F60", - "\u74DC", - "\u2F61", - "\u74E6", - "\u2F62", - "\u7518", - "\u2F63", - "\u751F", - "\u2F64", - "\u7528", - "\u2F65", - "\u7530", - "\u2F66", - "\u758B", - "\u2F67", - "\u7592", - "\u2F68", - "\u7676", - "\u2F69", - "\u767D", - "\u2F6A", - "\u76AE", - "\u2F6B", - "\u76BF", - "\u2F6C", - "\u76EE", - "\u2F6D", - "\u77DB", - "\u2F6E", - "\u77E2", - "\u2F6F", - "\u77F3", - "\u2F70", - "\u793A", - "\u2F71", - "\u79B8", - "\u2F72", - "\u79BE", - "\u2F73", - "\u7A74", - "\u2F74", - "\u7ACB", - "\u2F75", - "\u7AF9", - "\u2F76", - "\u7C73", - "\u2F77", - "\u7CF8", - "\u2F78", - "\u7F36", - "\u2F79", - "\u7F51", - "\u2F7A", - "\u7F8A", - "\u2F7B", - "\u7FBD", - "\u2F7C", - "\u8001", - "\u2F7D", - "\u800C", - "\u2F7E", - "\u8012", - "\u2F7F", - "\u8033", - "\u2F80", - "\u807F", - "\u2F81", - "\u8089", - "\u2F82", - "\u81E3", - "\u2F83", - "\u81EA", - "\u2F84", - "\u81F3", - "\u2F85", - "\u81FC", - "\u2F86", - "\u820C", - "\u2F87", - "\u821B", - "\u2F88", - "\u821F", - "\u2F89", - "\u826E", - "\u2F8A", - "\u8272", - "\u2F8B", - "\u8278", - "\u2F8C", - "\u864D", - "\u2F8D", - "\u866B", - "\u2F8E", - "\u8840", - "\u2F8F", - "\u884C", - "\u2F90", - "\u8863", - "\u2F91", - "\u897E", - "\u2F92", - "\u898B", - "\u2F93", - "\u89D2", - "\u2F94", - "\u8A00", - "\u2F95", - "\u8C37", - "\u2F96", - "\u8C46", - "\u2F97", - "\u8C55", - "\u2F98", - "\u8C78", - "\u2F99", - "\u8C9D", - "\u2F9A", - "\u8D64", - "\u2F9B", - "\u8D70", - "\u2F9C", - "\u8DB3", - "\u2F9D", - "\u8EAB", - "\u2F9E", - "\u8ECA", - "\u2F9F", - "\u8F9B", - "\u2FA0", - "\u8FB0", - "\u2FA1", - "\u8FB5", - "\u2FA2", - "\u9091", - "\u2FA3", - "\u9149", - "\u2FA4", - "\u91C6", - "\u2FA5", - "\u91CC", - "\u2FA6", - "\u91D1", - "\u2FA7", - "\u9577", - "\u2FA8", - "\u9580", - "\u2FA9", - "\u961C", - "\u2FAA", - "\u96B6", - "\u2FAB", - "\u96B9", - "\u2FAC", - "\u96E8", - "\u2FAD", - "\u9751", - "\u2FAE", - "\u975E", - "\u2FAF", - "\u9762", - "\u2FB0", - "\u9769", - "\u2FB1", - "\u97CB", - "\u2FB2", - "\u97ED", - "\u2FB3", - "\u97F3", - "\u2FB4", - "\u9801", - "\u2FB5", - "\u98A8", - "\u2FB6", - "\u98DB", - "\u2FB7", - "\u98DF", - "\u2FB8", - "\u9996", - "\u2FB9", - "\u9999", - "\u2FBA", - "\u99AC", - "\u2FBB", - "\u9AA8", - "\u2FBC", - "\u9AD8", - "\u2FBD", - "\u9ADF", - "\u2FBE", - "\u9B25", - "\u2FBF", - "\u9B2F", - "\u2FC0", - "\u9B32", - "\u2FC1", - "\u9B3C", - "\u2FC2", - "\u9B5A", - "\u2FC3", - "\u9CE5", - "\u2FC4", - "\u9E75", - "\u2FC5", - "\u9E7F", - "\u2FC6", - "\u9EA5", - "\u2FC7", - "\u9EBB", - "\u2FC8", - "\u9EC3", - "\u2FC9", - "\u9ECD", - "\u2FCA", - "\u9ED1", - "\u2FCB", - "\u9EF9", - "\u2FCC", - "\u9EFD", - "\u2FCD", - "\u9F0E", - "\u2FCE", - "\u9F13", - "\u2FCF", - "\u9F20", - "\u2FD0", - "\u9F3B", - "\u2FD1", - "\u9F4A", - "\u2FD2", - "\u9F52", - "\u2FD3", - "\u9F8D", - "\u2FD4", - "\u9F9C", - "\u2FD5", - "\u9FA0", - "\u3036", - "\u3012", - "\u3038", - "\u5341", - "\u3039", - "\u5344", - "\u303A", - "\u5345", - "\u309B", - "\u0020\u3099", - "\u309C", - "\u0020\u309A", - "\u3131", - "\u1100", - "\u3132", - "\u1101", - "\u3133", - "\u11AA", - "\u3134", - "\u1102", - "\u3135", - "\u11AC", - "\u3136", - "\u11AD", - "\u3137", - "\u1103", - "\u3138", - "\u1104", - "\u3139", - "\u1105", - "\u313A", - "\u11B0", - "\u313B", - "\u11B1", - "\u313C", - "\u11B2", - "\u313D", - "\u11B3", - "\u313E", - "\u11B4", - "\u313F", - "\u11B5", - "\u3140", - "\u111A", - "\u3141", - "\u1106", - "\u3142", - "\u1107", - "\u3143", - "\u1108", - "\u3144", - "\u1121", - "\u3145", - "\u1109", - "\u3146", - "\u110A", - "\u3147", - "\u110B", - "\u3148", - "\u110C", - "\u3149", - "\u110D", - "\u314A", - "\u110E", - "\u314B", - "\u110F", - "\u314C", - "\u1110", - "\u314D", - "\u1111", - "\u314E", - "\u1112", - "\u314F", - "\u1161", - "\u3150", - "\u1162", - "\u3151", - "\u1163", - "\u3152", - "\u1164", - "\u3153", - "\u1165", - "\u3154", - "\u1166", - "\u3155", - "\u1167", - "\u3156", - "\u1168", - "\u3157", - "\u1169", - "\u3158", - "\u116A", - "\u3159", - "\u116B", - "\u315A", - "\u116C", - "\u315B", - "\u116D", - "\u315C", - "\u116E", - "\u315D", - "\u116F", - "\u315E", - "\u1170", - "\u315F", - "\u1171", - "\u3160", - "\u1172", - "\u3161", - "\u1173", - "\u3162", - "\u1174", - "\u3163", - "\u1175", - "\u3164", - "\u1160", - "\u3165", - "\u1114", - "\u3166", - "\u1115", - "\u3167", - "\u11C7", - "\u3168", - "\u11C8", - "\u3169", - "\u11CC", - "\u316A", - "\u11CE", - "\u316B", - "\u11D3", - "\u316C", - "\u11D7", - "\u316D", - "\u11D9", - "\u316E", - "\u111C", - "\u316F", - "\u11DD", - "\u3170", - "\u11DF", - "\u3171", - "\u111D", - "\u3172", - "\u111E", - "\u3173", - "\u1120", - "\u3174", - "\u1122", - "\u3175", - "\u1123", - "\u3176", - "\u1127", - "\u3177", - "\u1129", - "\u3178", - "\u112B", - "\u3179", - "\u112C", - "\u317A", - "\u112D", - "\u317B", - "\u112E", - "\u317C", - "\u112F", - "\u317D", - "\u1132", - "\u317E", - "\u1136", - "\u317F", - "\u1140", - "\u3180", - "\u1147", - "\u3181", - "\u114C", - "\u3182", - "\u11F1", - "\u3183", - "\u11F2", - "\u3184", - "\u1157", - "\u3185", - "\u1158", - "\u3186", - "\u1159", - "\u3187", - "\u1184", - "\u3188", - "\u1185", - "\u3189", - "\u1188", - "\u318A", - "\u1191", - "\u318B", - "\u1192", - "\u318C", - "\u1194", - "\u318D", - "\u119E", - "\u318E", - "\u11A1", - "\u3200", - "\u0028\u1100\u0029", - "\u3201", - "\u0028\u1102\u0029", - "\u3202", - "\u0028\u1103\u0029", - "\u3203", - "\u0028\u1105\u0029", - "\u3204", - "\u0028\u1106\u0029", - "\u3205", - "\u0028\u1107\u0029", - "\u3206", - "\u0028\u1109\u0029", - "\u3207", - "\u0028\u110B\u0029", - "\u3208", - "\u0028\u110C\u0029", - "\u3209", - "\u0028\u110E\u0029", - "\u320A", - "\u0028\u110F\u0029", - "\u320B", - "\u0028\u1110\u0029", - "\u320C", - "\u0028\u1111\u0029", - "\u320D", - "\u0028\u1112\u0029", - "\u320E", - "\u0028\u1100\u1161\u0029", - "\u320F", - "\u0028\u1102\u1161\u0029", - "\u3210", - "\u0028\u1103\u1161\u0029", - "\u3211", - "\u0028\u1105\u1161\u0029", - "\u3212", - "\u0028\u1106\u1161\u0029", - "\u3213", - "\u0028\u1107\u1161\u0029", - "\u3214", - "\u0028\u1109\u1161\u0029", - "\u3215", - "\u0028\u110B\u1161\u0029", - "\u3216", - "\u0028\u110C\u1161\u0029", - "\u3217", - "\u0028\u110E\u1161\u0029", - "\u3218", - "\u0028\u110F\u1161\u0029", - "\u3219", - "\u0028\u1110\u1161\u0029", - "\u321A", - "\u0028\u1111\u1161\u0029", - "\u321B", - "\u0028\u1112\u1161\u0029", - "\u321C", - "\u0028\u110C\u116E\u0029", - "\u321D", - "\u0028\u110B\u1169\u110C\u1165\u11AB\u0029", - "\u321E", - "\u0028\u110B\u1169\u1112\u116E\u0029", - "\u3220", - "\u0028\u4E00\u0029", - "\u3221", - "\u0028\u4E8C\u0029", - "\u3222", - "\u0028\u4E09\u0029", - "\u3223", - "\u0028\u56DB\u0029", - "\u3224", - "\u0028\u4E94\u0029", - "\u3225", - "\u0028\u516D\u0029", - "\u3226", - "\u0028\u4E03\u0029", - "\u3227", - "\u0028\u516B\u0029", - "\u3228", - "\u0028\u4E5D\u0029", - "\u3229", - "\u0028\u5341\u0029", - "\u322A", - "\u0028\u6708\u0029", - "\u322B", - "\u0028\u706B\u0029", - "\u322C", - "\u0028\u6C34\u0029", - "\u322D", - "\u0028\u6728\u0029", - "\u322E", - "\u0028\u91D1\u0029", - "\u322F", - "\u0028\u571F\u0029", - "\u3230", - "\u0028\u65E5\u0029", - "\u3231", - "\u0028\u682A\u0029", - "\u3232", - "\u0028\u6709\u0029", - "\u3233", - "\u0028\u793E\u0029", - "\u3234", - "\u0028\u540D\u0029", - "\u3235", - "\u0028\u7279\u0029", - "\u3236", - "\u0028\u8CA1\u0029", - "\u3237", - "\u0028\u795D\u0029", - "\u3238", - "\u0028\u52B4\u0029", - "\u3239", - "\u0028\u4EE3\u0029", - "\u323A", - "\u0028\u547C\u0029", - "\u323B", - "\u0028\u5B66\u0029", - "\u323C", - "\u0028\u76E3\u0029", - "\u323D", - "\u0028\u4F01\u0029", - "\u323E", - "\u0028\u8CC7\u0029", - "\u323F", - "\u0028\u5354\u0029", - "\u3240", - "\u0028\u796D\u0029", - "\u3241", - "\u0028\u4F11\u0029", - "\u3242", - "\u0028\u81EA\u0029", - "\u3243", - "\u0028\u81F3\u0029", - "\u32C0", - "\u0031\u6708", - "\u32C1", - "\u0032\u6708", - "\u32C2", - "\u0033\u6708", - "\u32C3", - "\u0034\u6708", - "\u32C4", - "\u0035\u6708", - "\u32C5", - "\u0036\u6708", - "\u32C6", - "\u0037\u6708", - "\u32C7", - "\u0038\u6708", - "\u32C8", - "\u0039\u6708", - "\u32C9", - "\u0031\u0030\u6708", - "\u32CA", - "\u0031\u0031\u6708", - "\u32CB", - "\u0031\u0032\u6708", - "\u3358", - "\u0030\u70B9", - "\u3359", - "\u0031\u70B9", - "\u335A", - "\u0032\u70B9", - "\u335B", - "\u0033\u70B9", - "\u335C", - "\u0034\u70B9", - "\u335D", - "\u0035\u70B9", - "\u335E", - "\u0036\u70B9", - "\u335F", - "\u0037\u70B9", - "\u3360", - "\u0038\u70B9", - "\u3361", - "\u0039\u70B9", - "\u3362", - "\u0031\u0030\u70B9", - "\u3363", - "\u0031\u0031\u70B9", - "\u3364", - "\u0031\u0032\u70B9", - "\u3365", - "\u0031\u0033\u70B9", - "\u3366", - "\u0031\u0034\u70B9", - "\u3367", - "\u0031\u0035\u70B9", - "\u3368", - "\u0031\u0036\u70B9", - "\u3369", - "\u0031\u0037\u70B9", - "\u336A", - "\u0031\u0038\u70B9", - "\u336B", - "\u0031\u0039\u70B9", - "\u336C", - "\u0032\u0030\u70B9", - "\u336D", - "\u0032\u0031\u70B9", - "\u336E", - "\u0032\u0032\u70B9", - "\u336F", - "\u0032\u0033\u70B9", - "\u3370", - "\u0032\u0034\u70B9", - "\u33E0", - "\u0031\u65E5", - "\u33E1", - "\u0032\u65E5", - "\u33E2", - "\u0033\u65E5", - "\u33E3", - "\u0034\u65E5", - "\u33E4", - "\u0035\u65E5", - "\u33E5", - "\u0036\u65E5", - "\u33E6", - "\u0037\u65E5", - "\u33E7", - "\u0038\u65E5", - "\u33E8", - "\u0039\u65E5", - "\u33E9", - "\u0031\u0030\u65E5", - "\u33EA", - "\u0031\u0031\u65E5", - "\u33EB", - "\u0031\u0032\u65E5", - "\u33EC", - "\u0031\u0033\u65E5", - "\u33ED", - "\u0031\u0034\u65E5", - "\u33EE", - "\u0031\u0035\u65E5", - "\u33EF", - "\u0031\u0036\u65E5", - "\u33F0", - "\u0031\u0037\u65E5", - "\u33F1", - "\u0031\u0038\u65E5", - "\u33F2", - "\u0031\u0039\u65E5", - "\u33F3", - "\u0032\u0030\u65E5", - "\u33F4", - "\u0032\u0031\u65E5", - "\u33F5", - "\u0032\u0032\u65E5", - "\u33F6", - "\u0032\u0033\u65E5", - "\u33F7", - "\u0032\u0034\u65E5", - "\u33F8", - "\u0032\u0035\u65E5", - "\u33F9", - "\u0032\u0036\u65E5", - "\u33FA", - "\u0032\u0037\u65E5", - "\u33FB", - "\u0032\u0038\u65E5", - "\u33FC", - "\u0032\u0039\u65E5", - "\u33FD", - "\u0033\u0030\u65E5", - "\u33FE", - "\u0033\u0031\u65E5", - "\uFB00", - "\u0066\u0066", - "\uFB01", - "\u0066\u0069", - "\uFB02", - "\u0066\u006C", - "\uFB03", - "\u0066\u0066\u0069", - "\uFB04", - "\u0066\u0066\u006C", - "\uFB05", - "\u017F\u0074", - "\uFB06", - "\u0073\u0074", - "\uFB13", - "\u0574\u0576", - "\uFB14", - "\u0574\u0565", - "\uFB15", - "\u0574\u056B", - "\uFB16", - "\u057E\u0576", - "\uFB17", - "\u0574\u056D", - "\uFB4F", - "\u05D0\u05DC", - "\uFB50", - "\u0671", - "\uFB51", - "\u0671", - "\uFB52", - "\u067B", - "\uFB53", - "\u067B", - "\uFB54", - "\u067B", - "\uFB55", - "\u067B", - "\uFB56", - "\u067E", - "\uFB57", - "\u067E", - "\uFB58", - "\u067E", - "\uFB59", - "\u067E", - "\uFB5A", - "\u0680", - "\uFB5B", - "\u0680", - "\uFB5C", - "\u0680", - "\uFB5D", - "\u0680", - "\uFB5E", - "\u067A", - "\uFB5F", - "\u067A", - "\uFB60", - "\u067A", - "\uFB61", - "\u067A", - "\uFB62", - "\u067F", - "\uFB63", - "\u067F", - "\uFB64", - "\u067F", - "\uFB65", - "\u067F", - "\uFB66", - "\u0679", - "\uFB67", - "\u0679", - "\uFB68", - "\u0679", - "\uFB69", - "\u0679", - "\uFB6A", - "\u06A4", - "\uFB6B", - "\u06A4", - "\uFB6C", - "\u06A4", - "\uFB6D", - "\u06A4", - "\uFB6E", - "\u06A6", - "\uFB6F", - "\u06A6", - "\uFB70", - "\u06A6", - "\uFB71", - "\u06A6", - "\uFB72", - "\u0684", - "\uFB73", - "\u0684", - "\uFB74", - "\u0684", - "\uFB75", - "\u0684", - "\uFB76", - "\u0683", - "\uFB77", - "\u0683", - "\uFB78", - "\u0683", - "\uFB79", - "\u0683", - "\uFB7A", - "\u0686", - "\uFB7B", - "\u0686", - "\uFB7C", - "\u0686", - "\uFB7D", - "\u0686", - "\uFB7E", - "\u0687", - "\uFB7F", - "\u0687", - "\uFB80", - "\u0687", - "\uFB81", - "\u0687", - "\uFB82", - "\u068D", - "\uFB83", - "\u068D", - "\uFB84", - "\u068C", - "\uFB85", - "\u068C", - "\uFB86", - "\u068E", - "\uFB87", - "\u068E", - "\uFB88", - "\u0688", - "\uFB89", - "\u0688", - "\uFB8A", - "\u0698", - "\uFB8B", - "\u0698", - "\uFB8C", - "\u0691", - "\uFB8D", - "\u0691", - "\uFB8E", - "\u06A9", - "\uFB8F", - "\u06A9", - "\uFB90", - "\u06A9", - "\uFB91", - "\u06A9", - "\uFB92", - "\u06AF", - "\uFB93", - "\u06AF", - "\uFB94", - "\u06AF", - "\uFB95", - "\u06AF", - "\uFB96", - "\u06B3", - "\uFB97", - "\u06B3", - "\uFB98", - "\u06B3", - "\uFB99", - "\u06B3", - "\uFB9A", - "\u06B1", - "\uFB9B", - "\u06B1", - "\uFB9C", - "\u06B1", - "\uFB9D", - "\u06B1", - "\uFB9E", - "\u06BA", - "\uFB9F", - "\u06BA", - "\uFBA0", - "\u06BB", - "\uFBA1", - "\u06BB", - "\uFBA2", - "\u06BB", - "\uFBA3", - "\u06BB", - "\uFBA4", - "\u06C0", - "\uFBA5", - "\u06C0", - "\uFBA6", - "\u06C1", - "\uFBA7", - "\u06C1", - "\uFBA8", - "\u06C1", - "\uFBA9", - "\u06C1", - "\uFBAA", - "\u06BE", - "\uFBAB", - "\u06BE", - "\uFBAC", - "\u06BE", - "\uFBAD", - "\u06BE", - "\uFBAE", - "\u06D2", - "\uFBAF", - "\u06D2", - "\uFBB0", - "\u06D3", - "\uFBB1", - "\u06D3", - "\uFBD3", - "\u06AD", - "\uFBD4", - "\u06AD", - "\uFBD5", - "\u06AD", - "\uFBD6", - "\u06AD", - "\uFBD7", - "\u06C7", - "\uFBD8", - "\u06C7", - "\uFBD9", - "\u06C6", - "\uFBDA", - "\u06C6", - "\uFBDB", - "\u06C8", - "\uFBDC", - "\u06C8", - "\uFBDD", - "\u0677", - "\uFBDE", - "\u06CB", - "\uFBDF", - "\u06CB", - "\uFBE0", - "\u06C5", - "\uFBE1", - "\u06C5", - "\uFBE2", - "\u06C9", - "\uFBE3", - "\u06C9", - "\uFBE4", - "\u06D0", - "\uFBE5", - "\u06D0", - "\uFBE6", - "\u06D0", - "\uFBE7", - "\u06D0", - "\uFBE8", - "\u0649", - "\uFBE9", - "\u0649", - "\uFBEA", - "\u0626\u0627", - "\uFBEB", - "\u0626\u0627", - "\uFBEC", - "\u0626\u06D5", - "\uFBED", - "\u0626\u06D5", - "\uFBEE", - "\u0626\u0648", - "\uFBEF", - "\u0626\u0648", - "\uFBF0", - "\u0626\u06C7", - "\uFBF1", - "\u0626\u06C7", - "\uFBF2", - "\u0626\u06C6", - "\uFBF3", - "\u0626\u06C6", - "\uFBF4", - "\u0626\u06C8", - "\uFBF5", - "\u0626\u06C8", - "\uFBF6", - "\u0626\u06D0", - "\uFBF7", - "\u0626\u06D0", - "\uFBF8", - "\u0626\u06D0", - "\uFBF9", - "\u0626\u0649", - "\uFBFA", - "\u0626\u0649", - "\uFBFB", - "\u0626\u0649", - "\uFBFC", - "\u06CC", - "\uFBFD", - "\u06CC", - "\uFBFE", - "\u06CC", - "\uFBFF", - "\u06CC", - "\uFC00", - "\u0626\u062C", - "\uFC01", - "\u0626\u062D", - "\uFC02", - "\u0626\u0645", - "\uFC03", - "\u0626\u0649", - "\uFC04", - "\u0626\u064A", - "\uFC05", - "\u0628\u062C", - "\uFC06", - "\u0628\u062D", - "\uFC07", - "\u0628\u062E", - "\uFC08", - "\u0628\u0645", - "\uFC09", - "\u0628\u0649", - "\uFC0A", - "\u0628\u064A", - "\uFC0B", - "\u062A\u062C", - "\uFC0C", - "\u062A\u062D", - "\uFC0D", - "\u062A\u062E", - "\uFC0E", - "\u062A\u0645", - "\uFC0F", - "\u062A\u0649", - "\uFC10", - "\u062A\u064A", - "\uFC11", - "\u062B\u062C", - "\uFC12", - "\u062B\u0645", - "\uFC13", - "\u062B\u0649", - "\uFC14", - "\u062B\u064A", - "\uFC15", - "\u062C\u062D", - "\uFC16", - "\u062C\u0645", - "\uFC17", - "\u062D\u062C", - "\uFC18", - "\u062D\u0645", - "\uFC19", - "\u062E\u062C", - "\uFC1A", - "\u062E\u062D", - "\uFC1B", - "\u062E\u0645", - "\uFC1C", - "\u0633\u062C", - "\uFC1D", - "\u0633\u062D", - "\uFC1E", - "\u0633\u062E", - "\uFC1F", - "\u0633\u0645", - "\uFC20", - "\u0635\u062D", - "\uFC21", - "\u0635\u0645", - "\uFC22", - "\u0636\u062C", - "\uFC23", - "\u0636\u062D", - "\uFC24", - "\u0636\u062E", - "\uFC25", - "\u0636\u0645", - "\uFC26", - "\u0637\u062D", - "\uFC27", - "\u0637\u0645", - "\uFC28", - "\u0638\u0645", - "\uFC29", - "\u0639\u062C", - "\uFC2A", - "\u0639\u0645", - "\uFC2B", - "\u063A\u062C", - "\uFC2C", - "\u063A\u0645", - "\uFC2D", - "\u0641\u062C", - "\uFC2E", - "\u0641\u062D", - "\uFC2F", - "\u0641\u062E", - "\uFC30", - "\u0641\u0645", - "\uFC31", - "\u0641\u0649", - "\uFC32", - "\u0641\u064A", - "\uFC33", - "\u0642\u062D", - "\uFC34", - "\u0642\u0645", - "\uFC35", - "\u0642\u0649", - "\uFC36", - "\u0642\u064A", - "\uFC37", - "\u0643\u0627", - "\uFC38", - "\u0643\u062C", - "\uFC39", - "\u0643\u062D", - "\uFC3A", - "\u0643\u062E", - "\uFC3B", - "\u0643\u0644", - "\uFC3C", - "\u0643\u0645", - "\uFC3D", - "\u0643\u0649", - "\uFC3E", - "\u0643\u064A", - "\uFC3F", - "\u0644\u062C", - "\uFC40", - "\u0644\u062D", - "\uFC41", - "\u0644\u062E", - "\uFC42", - "\u0644\u0645", - "\uFC43", - "\u0644\u0649", - "\uFC44", - "\u0644\u064A", - "\uFC45", - "\u0645\u062C", - "\uFC46", - "\u0645\u062D", - "\uFC47", - "\u0645\u062E", - "\uFC48", - "\u0645\u0645", - "\uFC49", - "\u0645\u0649", - "\uFC4A", - "\u0645\u064A", - "\uFC4B", - "\u0646\u062C", - "\uFC4C", - "\u0646\u062D", - "\uFC4D", - "\u0646\u062E", - "\uFC4E", - "\u0646\u0645", - "\uFC4F", - "\u0646\u0649", - "\uFC50", - "\u0646\u064A", - "\uFC51", - "\u0647\u062C", - "\uFC52", - "\u0647\u0645", - "\uFC53", - "\u0647\u0649", - "\uFC54", - "\u0647\u064A", - "\uFC55", - "\u064A\u062C", - "\uFC56", - "\u064A\u062D", - "\uFC57", - "\u064A\u062E", - "\uFC58", - "\u064A\u0645", - "\uFC59", - "\u064A\u0649", - "\uFC5A", - "\u064A\u064A", - "\uFC5B", - "\u0630\u0670", - "\uFC5C", - "\u0631\u0670", - "\uFC5D", - "\u0649\u0670", - "\uFC5E", - "\u0020\u064C\u0651", - "\uFC5F", - "\u0020\u064D\u0651", - "\uFC60", - "\u0020\u064E\u0651", - "\uFC61", - "\u0020\u064F\u0651", - "\uFC62", - "\u0020\u0650\u0651", - "\uFC63", - "\u0020\u0651\u0670", - "\uFC64", - "\u0626\u0631", - "\uFC65", - "\u0626\u0632", - "\uFC66", - "\u0626\u0645", - "\uFC67", - "\u0626\u0646", - "\uFC68", - "\u0626\u0649", - "\uFC69", - "\u0626\u064A", - "\uFC6A", - "\u0628\u0631", - "\uFC6B", - "\u0628\u0632", - "\uFC6C", - "\u0628\u0645", - "\uFC6D", - "\u0628\u0646", - "\uFC6E", - "\u0628\u0649", - "\uFC6F", - "\u0628\u064A", - "\uFC70", - "\u062A\u0631", - "\uFC71", - "\u062A\u0632", - "\uFC72", - "\u062A\u0645", - "\uFC73", - "\u062A\u0646", - "\uFC74", - "\u062A\u0649", - "\uFC75", - "\u062A\u064A", - "\uFC76", - "\u062B\u0631", - "\uFC77", - "\u062B\u0632", - "\uFC78", - "\u062B\u0645", - "\uFC79", - "\u062B\u0646", - "\uFC7A", - "\u062B\u0649", - "\uFC7B", - "\u062B\u064A", - "\uFC7C", - "\u0641\u0649", - "\uFC7D", - "\u0641\u064A", - "\uFC7E", - "\u0642\u0649", - "\uFC7F", - "\u0642\u064A", - "\uFC80", - "\u0643\u0627", - "\uFC81", - "\u0643\u0644", - "\uFC82", - "\u0643\u0645", - "\uFC83", - "\u0643\u0649", - "\uFC84", - "\u0643\u064A", - "\uFC85", - "\u0644\u0645", - "\uFC86", - "\u0644\u0649", - "\uFC87", - "\u0644\u064A", - "\uFC88", - "\u0645\u0627", - "\uFC89", - "\u0645\u0645", - "\uFC8A", - "\u0646\u0631", - "\uFC8B", - "\u0646\u0632", - "\uFC8C", - "\u0646\u0645", - "\uFC8D", - "\u0646\u0646", - "\uFC8E", - "\u0646\u0649", - "\uFC8F", - "\u0646\u064A", - "\uFC90", - "\u0649\u0670", - "\uFC91", - "\u064A\u0631", - "\uFC92", - "\u064A\u0632", - "\uFC93", - "\u064A\u0645", - "\uFC94", - "\u064A\u0646", - "\uFC95", - "\u064A\u0649", - "\uFC96", - "\u064A\u064A", - "\uFC97", - "\u0626\u062C", - "\uFC98", - "\u0626\u062D", - "\uFC99", - "\u0626\u062E", - "\uFC9A", - "\u0626\u0645", - "\uFC9B", - "\u0626\u0647", - "\uFC9C", - "\u0628\u062C", - "\uFC9D", - "\u0628\u062D", - "\uFC9E", - "\u0628\u062E", - "\uFC9F", - "\u0628\u0645", - "\uFCA0", - "\u0628\u0647", - "\uFCA1", - "\u062A\u062C", - "\uFCA2", - "\u062A\u062D", - "\uFCA3", - "\u062A\u062E", - "\uFCA4", - "\u062A\u0645", - "\uFCA5", - "\u062A\u0647", - "\uFCA6", - "\u062B\u0645", - "\uFCA7", - "\u062C\u062D", - "\uFCA8", - "\u062C\u0645", - "\uFCA9", - "\u062D\u062C", - "\uFCAA", - "\u062D\u0645", - "\uFCAB", - "\u062E\u062C", - "\uFCAC", - "\u062E\u0645", - "\uFCAD", - "\u0633\u062C", - "\uFCAE", - "\u0633\u062D", - "\uFCAF", - "\u0633\u062E", - "\uFCB0", - "\u0633\u0645", - "\uFCB1", - "\u0635\u062D", - "\uFCB2", - "\u0635\u062E", - "\uFCB3", - "\u0635\u0645", - "\uFCB4", - "\u0636\u062C", - "\uFCB5", - "\u0636\u062D", - "\uFCB6", - "\u0636\u062E", - "\uFCB7", - "\u0636\u0645", - "\uFCB8", - "\u0637\u062D", - "\uFCB9", - "\u0638\u0645", - "\uFCBA", - "\u0639\u062C", - "\uFCBB", - "\u0639\u0645", - "\uFCBC", - "\u063A\u062C", - "\uFCBD", - "\u063A\u0645", - "\uFCBE", - "\u0641\u062C", - "\uFCBF", - "\u0641\u062D", - "\uFCC0", - "\u0641\u062E", - "\uFCC1", - "\u0641\u0645", - "\uFCC2", - "\u0642\u062D", - "\uFCC3", - "\u0642\u0645", - "\uFCC4", - "\u0643\u062C", - "\uFCC5", - "\u0643\u062D", - "\uFCC6", - "\u0643\u062E", - "\uFCC7", - "\u0643\u0644", - "\uFCC8", - "\u0643\u0645", - "\uFCC9", - "\u0644\u062C", - "\uFCCA", - "\u0644\u062D", - "\uFCCB", - "\u0644\u062E", - "\uFCCC", - "\u0644\u0645", - "\uFCCD", - "\u0644\u0647", - "\uFCCE", - "\u0645\u062C", - "\uFCCF", - "\u0645\u062D", - "\uFCD0", - "\u0645\u062E", - "\uFCD1", - "\u0645\u0645", - "\uFCD2", - "\u0646\u062C", - "\uFCD3", - "\u0646\u062D", - "\uFCD4", - "\u0646\u062E", - "\uFCD5", - "\u0646\u0645", - "\uFCD6", - "\u0646\u0647", - "\uFCD7", - "\u0647\u062C", - "\uFCD8", - "\u0647\u0645", - "\uFCD9", - "\u0647\u0670", - "\uFCDA", - "\u064A\u062C", - "\uFCDB", - "\u064A\u062D", - "\uFCDC", - "\u064A\u062E", - "\uFCDD", - "\u064A\u0645", - "\uFCDE", - "\u064A\u0647", - "\uFCDF", - "\u0626\u0645", - "\uFCE0", - "\u0626\u0647", - "\uFCE1", - "\u0628\u0645", - "\uFCE2", - "\u0628\u0647", - "\uFCE3", - "\u062A\u0645", - "\uFCE4", - "\u062A\u0647", - "\uFCE5", - "\u062B\u0645", - "\uFCE6", - "\u062B\u0647", - "\uFCE7", - "\u0633\u0645", - "\uFCE8", - "\u0633\u0647", - "\uFCE9", - "\u0634\u0645", - "\uFCEA", - "\u0634\u0647", - "\uFCEB", - "\u0643\u0644", - "\uFCEC", - "\u0643\u0645", - "\uFCED", - "\u0644\u0645", - "\uFCEE", - "\u0646\u0645", - "\uFCEF", - "\u0646\u0647", - "\uFCF0", - "\u064A\u0645", - "\uFCF1", - "\u064A\u0647", - "\uFCF2", - "\u0640\u064E\u0651", - "\uFCF3", - "\u0640\u064F\u0651", - "\uFCF4", - "\u0640\u0650\u0651", - "\uFCF5", - "\u0637\u0649", - "\uFCF6", - "\u0637\u064A", - "\uFCF7", - "\u0639\u0649", - "\uFCF8", - "\u0639\u064A", - "\uFCF9", - "\u063A\u0649", - "\uFCFA", - "\u063A\u064A", - "\uFCFB", - "\u0633\u0649", - "\uFCFC", - "\u0633\u064A", - "\uFCFD", - "\u0634\u0649", - "\uFCFE", - "\u0634\u064A", - "\uFCFF", - "\u062D\u0649", - "\uFD00", - "\u062D\u064A", - "\uFD01", - "\u062C\u0649", - "\uFD02", - "\u062C\u064A", - "\uFD03", - "\u062E\u0649", - "\uFD04", - "\u062E\u064A", - "\uFD05", - "\u0635\u0649", - "\uFD06", - "\u0635\u064A", - "\uFD07", - "\u0636\u0649", - "\uFD08", - "\u0636\u064A", - "\uFD09", - "\u0634\u062C", - "\uFD0A", - "\u0634\u062D", - "\uFD0B", - "\u0634\u062E", - "\uFD0C", - "\u0634\u0645", - "\uFD0D", - "\u0634\u0631", - "\uFD0E", - "\u0633\u0631", - "\uFD0F", - "\u0635\u0631", - "\uFD10", - "\u0636\u0631", - "\uFD11", - "\u0637\u0649", - "\uFD12", - "\u0637\u064A", - "\uFD13", - "\u0639\u0649", - "\uFD14", - "\u0639\u064A", - "\uFD15", - "\u063A\u0649", - "\uFD16", - "\u063A\u064A", - "\uFD17", - "\u0633\u0649", - "\uFD18", - "\u0633\u064A", - "\uFD19", - "\u0634\u0649", - "\uFD1A", - "\u0634\u064A", - "\uFD1B", - "\u062D\u0649", - "\uFD1C", - "\u062D\u064A", - "\uFD1D", - "\u062C\u0649", - "\uFD1E", - "\u062C\u064A", - "\uFD1F", - "\u062E\u0649", - "\uFD20", - "\u062E\u064A", - "\uFD21", - "\u0635\u0649", - "\uFD22", - "\u0635\u064A", - "\uFD23", - "\u0636\u0649", - "\uFD24", - "\u0636\u064A", - "\uFD25", - "\u0634\u062C", - "\uFD26", - "\u0634\u062D", - "\uFD27", - "\u0634\u062E", - "\uFD28", - "\u0634\u0645", - "\uFD29", - "\u0634\u0631", - "\uFD2A", - "\u0633\u0631", - "\uFD2B", - "\u0635\u0631", - "\uFD2C", - "\u0636\u0631", - "\uFD2D", - "\u0634\u062C", - "\uFD2E", - "\u0634\u062D", - "\uFD2F", - "\u0634\u062E", - "\uFD30", - "\u0634\u0645", - "\uFD31", - "\u0633\u0647", - "\uFD32", - "\u0634\u0647", - "\uFD33", - "\u0637\u0645", - "\uFD34", - "\u0633\u062C", - "\uFD35", - "\u0633\u062D", - "\uFD36", - "\u0633\u062E", - "\uFD37", - "\u0634\u062C", - "\uFD38", - "\u0634\u062D", - "\uFD39", - "\u0634\u062E", - "\uFD3A", - "\u0637\u0645", - "\uFD3B", - "\u0638\u0645", - "\uFD3C", - "\u0627\u064B", - "\uFD3D", - "\u0627\u064B", - "\uFD50", - "\u062A\u062C\u0645", - "\uFD51", - "\u062A\u062D\u062C", - "\uFD52", - "\u062A\u062D\u062C", - "\uFD53", - "\u062A\u062D\u0645", - "\uFD54", - "\u062A\u062E\u0645", - "\uFD55", - "\u062A\u0645\u062C", - "\uFD56", - "\u062A\u0645\u062D", - "\uFD57", - "\u062A\u0645\u062E", - "\uFD58", - "\u062C\u0645\u062D", - "\uFD59", - "\u062C\u0645\u062D", - "\uFD5A", - "\u062D\u0645\u064A", - "\uFD5B", - "\u062D\u0645\u0649", - "\uFD5C", - "\u0633\u062D\u062C", - "\uFD5D", - "\u0633\u062C\u062D", - "\uFD5E", - "\u0633\u062C\u0649", - "\uFD5F", - "\u0633\u0645\u062D", - "\uFD60", - "\u0633\u0645\u062D", - "\uFD61", - "\u0633\u0645\u062C", - "\uFD62", - "\u0633\u0645\u0645", - "\uFD63", - "\u0633\u0645\u0645", - "\uFD64", - "\u0635\u062D\u062D", - "\uFD65", - "\u0635\u062D\u062D", - "\uFD66", - "\u0635\u0645\u0645", - "\uFD67", - "\u0634\u062D\u0645", - "\uFD68", - "\u0634\u062D\u0645", - "\uFD69", - "\u0634\u062C\u064A", - "\uFD6A", - "\u0634\u0645\u062E", - "\uFD6B", - "\u0634\u0645\u062E", - "\uFD6C", - "\u0634\u0645\u0645", - "\uFD6D", - "\u0634\u0645\u0645", - "\uFD6E", - "\u0636\u062D\u0649", - "\uFD6F", - "\u0636\u062E\u0645", - "\uFD70", - "\u0636\u062E\u0645", - "\uFD71", - "\u0637\u0645\u062D", - "\uFD72", - "\u0637\u0645\u062D", - "\uFD73", - "\u0637\u0645\u0645", - "\uFD74", - "\u0637\u0645\u064A", - "\uFD75", - "\u0639\u062C\u0645", - "\uFD76", - "\u0639\u0645\u0645", - "\uFD77", - "\u0639\u0645\u0645", - "\uFD78", - "\u0639\u0645\u0649", - "\uFD79", - "\u063A\u0645\u0645", - "\uFD7A", - "\u063A\u0645\u064A", - "\uFD7B", - "\u063A\u0645\u0649", - "\uFD7C", - "\u0641\u062E\u0645", - "\uFD7D", - "\u0641\u062E\u0645", - "\uFD7E", - "\u0642\u0645\u062D", - "\uFD7F", - "\u0642\u0645\u0645", - "\uFD80", - "\u0644\u062D\u0645", - "\uFD81", - "\u0644\u062D\u064A", - "\uFD82", - "\u0644\u062D\u0649", - "\uFD83", - "\u0644\u062C\u062C", - "\uFD84", - "\u0644\u062C\u062C", - "\uFD85", - "\u0644\u062E\u0645", - "\uFD86", - "\u0644\u062E\u0645", - "\uFD87", - "\u0644\u0645\u062D", - "\uFD88", - "\u0644\u0645\u062D", - "\uFD89", - "\u0645\u062D\u062C", - "\uFD8A", - "\u0645\u062D\u0645", - "\uFD8B", - "\u0645\u062D\u064A", - "\uFD8C", - "\u0645\u062C\u062D", - "\uFD8D", - "\u0645\u062C\u0645", - "\uFD8E", - "\u0645\u062E\u062C", - "\uFD8F", - "\u0645\u062E\u0645", - "\uFD92", - "\u0645\u062C\u062E", - "\uFD93", - "\u0647\u0645\u062C", - "\uFD94", - "\u0647\u0645\u0645", - "\uFD95", - "\u0646\u062D\u0645", - "\uFD96", - "\u0646\u062D\u0649", - "\uFD97", - "\u0646\u062C\u0645", - "\uFD98", - "\u0646\u062C\u0645", - "\uFD99", - "\u0646\u062C\u0649", - "\uFD9A", - "\u0646\u0645\u064A", - "\uFD9B", - "\u0646\u0645\u0649", - "\uFD9C", - "\u064A\u0645\u0645", - "\uFD9D", - "\u064A\u0645\u0645", - "\uFD9E", - "\u0628\u062E\u064A", - "\uFD9F", - "\u062A\u062C\u064A", - "\uFDA0", - "\u062A\u062C\u0649", - "\uFDA1", - "\u062A\u062E\u064A", - "\uFDA2", - "\u062A\u062E\u0649", - "\uFDA3", - "\u062A\u0645\u064A", - "\uFDA4", - "\u062A\u0645\u0649", - "\uFDA5", - "\u062C\u0645\u064A", - "\uFDA6", - "\u062C\u062D\u0649", - "\uFDA7", - "\u062C\u0645\u0649", - "\uFDA8", - "\u0633\u062E\u0649", - "\uFDA9", - "\u0635\u062D\u064A", - "\uFDAA", - "\u0634\u062D\u064A", - "\uFDAB", - "\u0636\u062D\u064A", - "\uFDAC", - "\u0644\u062C\u064A", - "\uFDAD", - "\u0644\u0645\u064A", - "\uFDAE", - "\u064A\u062D\u064A", - "\uFDAF", - "\u064A\u062C\u064A", - "\uFDB0", - "\u064A\u0645\u064A", - "\uFDB1", - "\u0645\u0645\u064A", - "\uFDB2", - "\u0642\u0645\u064A", - "\uFDB3", - "\u0646\u062D\u064A", - "\uFDB4", - "\u0642\u0645\u062D", - "\uFDB5", - "\u0644\u062D\u0645", - "\uFDB6", - "\u0639\u0645\u064A", - "\uFDB7", - "\u0643\u0645\u064A", - "\uFDB8", - "\u0646\u062C\u062D", - "\uFDB9", - "\u0645\u062E\u064A", - "\uFDBA", - "\u0644\u062C\u0645", - "\uFDBB", - "\u0643\u0645\u0645", - "\uFDBC", - "\u0644\u062C\u0645", - "\uFDBD", - "\u0646\u062C\u062D", - "\uFDBE", - "\u062C\u062D\u064A", - "\uFDBF", - "\u062D\u062C\u064A", - "\uFDC0", - "\u0645\u062C\u064A", - "\uFDC1", - "\u0641\u0645\u064A", - "\uFDC2", - "\u0628\u062D\u064A", - "\uFDC3", - "\u0643\u0645\u0645", - "\uFDC4", - "\u0639\u062C\u0645", - "\uFDC5", - "\u0635\u0645\u0645", - "\uFDC6", - "\u0633\u062E\u064A", - "\uFDC7", - "\u0646\u062C\u064A", - "\uFE49", - "\u203E", - "\uFE4A", - "\u203E", - "\uFE4B", - "\u203E", - "\uFE4C", - "\u203E", - "\uFE4D", - "\u005F", - "\uFE4E", - "\u005F", - "\uFE4F", - "\u005F", - "\uFE80", - "\u0621", - "\uFE81", - "\u0622", - "\uFE82", - "\u0622", - "\uFE83", - "\u0623", - "\uFE84", - "\u0623", - "\uFE85", - "\u0624", - "\uFE86", - "\u0624", - "\uFE87", - "\u0625", - "\uFE88", - "\u0625", - "\uFE89", - "\u0626", - "\uFE8A", - "\u0626", - "\uFE8B", - "\u0626", - "\uFE8C", - "\u0626", - "\uFE8D", - "\u0627", - "\uFE8E", - "\u0627", - "\uFE8F", - "\u0628", - "\uFE90", - "\u0628", - "\uFE91", - "\u0628", - "\uFE92", - "\u0628", - "\uFE93", - "\u0629", - "\uFE94", - "\u0629", - "\uFE95", - "\u062A", - "\uFE96", - "\u062A", - "\uFE97", - "\u062A", - "\uFE98", - "\u062A", - "\uFE99", - "\u062B", - "\uFE9A", - "\u062B", - "\uFE9B", - "\u062B", - "\uFE9C", - "\u062B", - "\uFE9D", - "\u062C", - "\uFE9E", - "\u062C", - "\uFE9F", - "\u062C", - "\uFEA0", - "\u062C", - "\uFEA1", - "\u062D", - "\uFEA2", - "\u062D", - "\uFEA3", - "\u062D", - "\uFEA4", - "\u062D", - "\uFEA5", - "\u062E", - "\uFEA6", - "\u062E", - "\uFEA7", - "\u062E", - "\uFEA8", - "\u062E", - "\uFEA9", - "\u062F", - "\uFEAA", - "\u062F", - "\uFEAB", - "\u0630", - "\uFEAC", - "\u0630", - "\uFEAD", - "\u0631", - "\uFEAE", - "\u0631", - "\uFEAF", - "\u0632", - "\uFEB0", - "\u0632", - "\uFEB1", - "\u0633", - "\uFEB2", - "\u0633", - "\uFEB3", - "\u0633", - "\uFEB4", - "\u0633", - "\uFEB5", - "\u0634", - "\uFEB6", - "\u0634", - "\uFEB7", - "\u0634", - "\uFEB8", - "\u0634", - "\uFEB9", - "\u0635", - "\uFEBA", - "\u0635", - "\uFEBB", - "\u0635", - "\uFEBC", - "\u0635", - "\uFEBD", - "\u0636", - "\uFEBE", - "\u0636", - "\uFEBF", - "\u0636", - "\uFEC0", - "\u0636", - "\uFEC1", - "\u0637", - "\uFEC2", - "\u0637", - "\uFEC3", - "\u0637", - "\uFEC4", - "\u0637", - "\uFEC5", - "\u0638", - "\uFEC6", - "\u0638", - "\uFEC7", - "\u0638", - "\uFEC8", - "\u0638", - "\uFEC9", - "\u0639", - "\uFECA", - "\u0639", - "\uFECB", - "\u0639", - "\uFECC", - "\u0639", - "\uFECD", - "\u063A", - "\uFECE", - "\u063A", - "\uFECF", - "\u063A", - "\uFED0", - "\u063A", - "\uFED1", - "\u0641", - "\uFED2", - "\u0641", - "\uFED3", - "\u0641", - "\uFED4", - "\u0641", - "\uFED5", - "\u0642", - "\uFED6", - "\u0642", - "\uFED7", - "\u0642", - "\uFED8", - "\u0642", - "\uFED9", - "\u0643", - "\uFEDA", - "\u0643", - "\uFEDB", - "\u0643", - "\uFEDC", - "\u0643", - "\uFEDD", - "\u0644", - "\uFEDE", - "\u0644", - "\uFEDF", - "\u0644", - "\uFEE0", - "\u0644", - "\uFEE1", - "\u0645", - "\uFEE2", - "\u0645", - "\uFEE3", - "\u0645", - "\uFEE4", - "\u0645", - "\uFEE5", - "\u0646", - "\uFEE6", - "\u0646", - "\uFEE7", - "\u0646", - "\uFEE8", - "\u0646", - "\uFEE9", - "\u0647", - "\uFEEA", - "\u0647", - "\uFEEB", - "\u0647", - "\uFEEC", - "\u0647", - "\uFEED", - "\u0648", - "\uFEEE", - "\u0648", - "\uFEEF", - "\u0649", - "\uFEF0", - "\u0649", - "\uFEF1", - "\u064A", - "\uFEF2", - "\u064A", - "\uFEF3", - "\u064A", - "\uFEF4", - "\u064A", - "\uFEF5", - "\u0644\u0622", - "\uFEF6", - "\u0644\u0622", - "\uFEF7", - "\u0644\u0623", - "\uFEF8", - "\u0644\u0623", - "\uFEF9", - "\u0644\u0625", - "\uFEFA", - "\u0644\u0625", - "\uFEFB", - "\u0644\u0627", - "\uFEFC", - "\u0644\u0627" - ]; -}); -function reverseIfRtl(chars) { - const charsLength = chars.length; - if (charsLength <= 1 || !isRTLRangeFor(chars.charCodeAt(0))) { - return chars; - } - const buf = []; - for (let ii = charsLength - 1; ii >= 0; ii--) { - buf.push(chars[ii]); - } - return buf.join(""); -} - - -/***/ }), -/* 22 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.MarkupAnnotation = exports.AnnotationFactory = exports.AnnotationBorderStyle = exports.Annotation = void 0; -exports.getQuadPoints = getQuadPoints; - -var _util = __w_pdfjs_require__(2); - -var _core_utils = __w_pdfjs_require__(9); - -var _default_appearance = __w_pdfjs_require__(23); - -var _primitives = __w_pdfjs_require__(5); - -var _bidi = __w_pdfjs_require__(59); - -var _catalog = __w_pdfjs_require__(64); - -var _colorspace = __w_pdfjs_require__(24); - -var _file_spec = __w_pdfjs_require__(66); - -var _object_loader = __w_pdfjs_require__(70); - -var _operator_list = __w_pdfjs_require__(62); - -var _stream = __w_pdfjs_require__(10); - -var _writer = __w_pdfjs_require__(71); - -var _factory = __w_pdfjs_require__(74); - -class AnnotationFactory { - static create(xref, ref, pdfManager, idFactory, collectFields) { - return Promise.all([pdfManager.ensureCatalog("acroForm"), collectFields ? this._getPageIndex(xref, ref, pdfManager) : -1]).then(([acroForm, pageIndex]) => pdfManager.ensure(this, "_create", [xref, ref, pdfManager, idFactory, acroForm, collectFields, pageIndex])); - } - - static _create(xref, ref, pdfManager, idFactory, acroForm, collectFields, pageIndex = -1) { - const dict = xref.fetchIfRef(ref); - - if (!(0, _primitives.isDict)(dict)) { - return undefined; - } - - const id = (0, _primitives.isRef)(ref) ? ref.toString() : `annot_${idFactory.createObjId()}`; - let subtype = dict.get("Subtype"); - subtype = (0, _primitives.isName)(subtype) ? subtype.name : null; - const parameters = { - xref, - ref, - dict, - subtype, - id, - pdfManager, - acroForm: acroForm instanceof _primitives.Dict ? acroForm : _primitives.Dict.empty, - collectFields, - pageIndex - }; - - switch (subtype) { - case "Link": - return new LinkAnnotation(parameters); - - case "Text": - return new TextAnnotation(parameters); - - case "Widget": - let fieldType = (0, _core_utils.getInheritableProperty)({ - dict, - key: "FT" - }); - fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null; - - switch (fieldType) { - case "Tx": - return new TextWidgetAnnotation(parameters); - - case "Btn": - return new ButtonWidgetAnnotation(parameters); - - case "Ch": - return new ChoiceWidgetAnnotation(parameters); - - case "Sig": - return new SignatureWidgetAnnotation(parameters); - } - - (0, _util.warn)(`Unimplemented widget field type "${fieldType}", ` + "falling back to base field type."); - return new WidgetAnnotation(parameters); - - case "Popup": - return new PopupAnnotation(parameters); - - case "FreeText": - return new FreeTextAnnotation(parameters); - - case "Line": - return new LineAnnotation(parameters); - - case "Square": - return new SquareAnnotation(parameters); - - case "Circle": - return new CircleAnnotation(parameters); - - case "PolyLine": - return new PolylineAnnotation(parameters); - - case "Polygon": - return new PolygonAnnotation(parameters); - - case "Caret": - return new CaretAnnotation(parameters); - - case "Ink": - return new InkAnnotation(parameters); - - case "Highlight": - return new HighlightAnnotation(parameters); - - case "Underline": - return new UnderlineAnnotation(parameters); - - case "Squiggly": - return new SquigglyAnnotation(parameters); - - case "StrikeOut": - return new StrikeOutAnnotation(parameters); - - case "Stamp": - return new StampAnnotation(parameters); - - case "FileAttachment": - return new FileAttachmentAnnotation(parameters); - - default: - if (!collectFields) { - if (!subtype) { - (0, _util.warn)("Annotation is missing the required /Subtype."); - } else { - (0, _util.warn)(`Unimplemented annotation type "${subtype}", ` + "falling back to base annotation."); - } - } - - return new Annotation(parameters); - } - } - - static async _getPageIndex(xref, ref, pdfManager) { - try { - const annotDict = await xref.fetchIfRefAsync(ref); - - if (!(0, _primitives.isDict)(annotDict)) { - return -1; - } - - const pageRef = annotDict.getRaw("P"); - - if (!(0, _primitives.isRef)(pageRef)) { - return -1; - } - - const pageIndex = await pdfManager.ensureCatalog("getPageIndex", [pageRef]); - return pageIndex; - } catch (ex) { - (0, _util.warn)(`_getPageIndex: "${ex}".`); - return -1; - } - } - -} - -exports.AnnotationFactory = AnnotationFactory; - -function getRgbColor(color, defaultColor = new Uint8ClampedArray(3)) { - if (!Array.isArray(color)) { - return defaultColor; - } - - const rgbColor = defaultColor || new Uint8ClampedArray(3); - - switch (color.length) { - case 0: - return null; - - case 1: - _colorspace.ColorSpace.singletons.gray.getRgbItem(color, 0, rgbColor, 0); - - return rgbColor; - - case 3: - _colorspace.ColorSpace.singletons.rgb.getRgbItem(color, 0, rgbColor, 0); - - return rgbColor; - - case 4: - _colorspace.ColorSpace.singletons.cmyk.getRgbItem(color, 0, rgbColor, 0); - - return rgbColor; - - default: - return defaultColor; - } -} - -function getQuadPoints(dict, rect) { - if (!dict.has("QuadPoints")) { - return null; - } - - const quadPoints = dict.getArray("QuadPoints"); - - if (!Array.isArray(quadPoints) || quadPoints.length === 0 || quadPoints.length % 8 > 0) { - return null; - } - - const quadPointsLists = []; - - for (let i = 0, ii = quadPoints.length / 8; i < ii; i++) { - quadPointsLists.push([]); - - for (let j = i * 8, jj = i * 8 + 8; j < jj; j += 2) { - const x = quadPoints[j]; - const y = quadPoints[j + 1]; - - if (rect !== null && (x < rect[0] || x > rect[2] || y < rect[1] || y > rect[3])) { - return null; - } - - quadPointsLists[i].push({ - x, - y - }); - } - } - - return quadPointsLists.map(quadPointsList => { - const [minX, maxX, minY, maxY] = quadPointsList.reduce(([mX, MX, mY, MY], quadPoint) => [Math.min(mX, quadPoint.x), Math.max(MX, quadPoint.x), Math.min(mY, quadPoint.y), Math.max(MY, quadPoint.y)], [Number.MAX_VALUE, Number.MIN_VALUE, Number.MAX_VALUE, Number.MIN_VALUE]); - return [{ - x: minX, - y: maxY - }, { - x: maxX, - y: maxY - }, { - x: minX, - y: minY - }, { - x: maxX, - y: minY - }]; - }); -} - -function getTransformMatrix(rect, bbox, matrix) { - const [minX, minY, maxX, maxY] = _util.Util.getAxialAlignedBoundingBox(bbox, matrix); - - if (minX === maxX || minY === maxY) { - return [1, 0, 0, 1, rect[0], rect[1]]; - } - - const xRatio = (rect[2] - rect[0]) / (maxX - minX); - const yRatio = (rect[3] - rect[1]) / (maxY - minY); - return [xRatio, 0, 0, yRatio, rect[0] - minX * xRatio, rect[1] - minY * yRatio]; -} - -class Annotation { - constructor(params) { - const dict = params.dict; - this.setTitle(dict.get("T")); - this.setContents(dict.get("Contents")); - this.setModificationDate(dict.get("M")); - this.setFlags(dict.get("F")); - this.setRectangle(dict.getArray("Rect")); - this.setColor(dict.getArray("C")); - this.setBorderStyle(dict); - this.setAppearance(dict); - this.setBorderAndBackgroundColors(dict.get("MK")); - this._streams = []; - - if (this.appearance) { - this._streams.push(this.appearance); - } - - this.data = { - annotationFlags: this.flags, - borderStyle: this.borderStyle, - color: this.color, - backgroundColor: this.backgroundColor, - borderColor: this.borderColor, - contentsObj: this._contents, - hasAppearance: !!this.appearance, - id: params.id, - modificationDate: this.modificationDate, - rect: this.rectangle, - subtype: params.subtype, - hasOwnCanvas: false - }; - - if (params.collectFields) { - const kids = dict.get("Kids"); - - if (Array.isArray(kids)) { - const kidIds = []; - - for (const kid of kids) { - if ((0, _primitives.isRef)(kid)) { - kidIds.push(kid.toString()); - } - } - - if (kidIds.length !== 0) { - this.data.kidIds = kidIds; - } - } - - this.data.actions = (0, _core_utils.collectActions)(params.xref, dict, _util.AnnotationActionEventType); - this.data.fieldName = this._constructFieldName(dict); - this.data.pageIndex = params.pageIndex; - } - - this._fallbackFontDict = null; - } - - _hasFlag(flags, flag) { - return !!(flags & flag); - } - - _isViewable(flags) { - return !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.NOVIEW); - } - - _isPrintable(flags) { - return this._hasFlag(flags, _util.AnnotationFlag.PRINT) && !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE); - } - - mustBeViewed(annotationStorage) { - const storageEntry = annotationStorage && annotationStorage.get(this.data.id); - - if (storageEntry && storageEntry.hidden !== undefined) { - return !storageEntry.hidden; - } - - return this.viewable && !this._hasFlag(this.flags, _util.AnnotationFlag.HIDDEN); - } - - mustBePrinted(annotationStorage) { - const storageEntry = annotationStorage && annotationStorage.get(this.data.id); - - if (storageEntry && storageEntry.print !== undefined) { - return storageEntry.print; - } - - return this.printable; - } - - get viewable() { - if (this.data.quadPoints === null) { - return false; - } - - if (this.flags === 0) { - return true; - } - - return this._isViewable(this.flags); - } - - get printable() { - if (this.data.quadPoints === null) { - return false; - } - - if (this.flags === 0) { - return false; - } - - return this._isPrintable(this.flags); - } - - _parseStringHelper(data) { - const str = typeof data === "string" ? (0, _util.stringToPDFString)(data) : ""; - const dir = str && (0, _bidi.bidi)(str).dir === "rtl" ? "rtl" : "ltr"; - return { - str, - dir - }; - } - - setTitle(title) { - this._title = this._parseStringHelper(title); - } - - setContents(contents) { - this._contents = this._parseStringHelper(contents); - } - - setModificationDate(modificationDate) { - this.modificationDate = (0, _util.isString)(modificationDate) ? modificationDate : null; - } - - setFlags(flags) { - this.flags = Number.isInteger(flags) && flags > 0 ? flags : 0; - } - - hasFlag(flag) { - return this._hasFlag(this.flags, flag); - } - - setRectangle(rectangle) { - if (Array.isArray(rectangle) && rectangle.length === 4) { - this.rectangle = _util.Util.normalizeRect(rectangle); - } else { - this.rectangle = [0, 0, 0, 0]; - } - } - - setColor(color) { - this.color = getRgbColor(color); - } - - setBorderAndBackgroundColors(mk) { - if (mk instanceof _primitives.Dict) { - this.borderColor = getRgbColor(mk.getArray("BC"), null); - this.backgroundColor = getRgbColor(mk.getArray("BG"), null); - } else { - this.borderColor = this.backgroundColor = null; - } - } - - setBorderStyle(borderStyle) { - this.borderStyle = new AnnotationBorderStyle(); - - if (!(0, _primitives.isDict)(borderStyle)) { - return; - } - - if (borderStyle.has("BS")) { - const dict = borderStyle.get("BS"); - const dictType = dict.get("Type"); - - if (!dictType || (0, _primitives.isName)(dictType, "Border")) { - this.borderStyle.setWidth(dict.get("W"), this.rectangle); - this.borderStyle.setStyle(dict.get("S")); - this.borderStyle.setDashArray(dict.getArray("D")); - } - } else if (borderStyle.has("Border")) { - const array = borderStyle.getArray("Border"); - - if (Array.isArray(array) && array.length >= 3) { - this.borderStyle.setHorizontalCornerRadius(array[0]); - this.borderStyle.setVerticalCornerRadius(array[1]); - this.borderStyle.setWidth(array[2], this.rectangle); - - if (array.length === 4) { - this.borderStyle.setDashArray(array[3], true); - } - } - } else { - this.borderStyle.setWidth(0); - } - } - - setAppearance(dict) { - this.appearance = null; - const appearanceStates = dict.get("AP"); - - if (!(0, _primitives.isDict)(appearanceStates)) { - return; - } - - const normalAppearanceState = appearanceStates.get("N"); - - if ((0, _primitives.isStream)(normalAppearanceState)) { - this.appearance = normalAppearanceState; - return; - } - - if (!(0, _primitives.isDict)(normalAppearanceState)) { - return; - } - - const as = dict.get("AS"); - - if (!(0, _primitives.isName)(as) || !normalAppearanceState.has(as.name)) { - return; - } - - this.appearance = normalAppearanceState.get(as.name); - } - - loadResources(keys, appearance) { - return appearance.dict.getAsync("Resources").then(resources => { - if (!resources) { - return undefined; - } - - const objectLoader = new _object_loader.ObjectLoader(resources, keys, resources.xref); - return objectLoader.load().then(function () { - return resources; - }); - }); - } - - getOperatorList(evaluator, task, intent, renderForms, annotationStorage) { - const data = this.data; - let appearance = this.appearance; - const isUsingOwnCanvas = data.hasOwnCanvas && intent & _util.RenderingIntentFlag.DISPLAY; - - if (!appearance) { - if (!isUsingOwnCanvas) { - return Promise.resolve(new _operator_list.OperatorList()); - } - - appearance = new _stream.StringStream(""); - appearance.dict = new _primitives.Dict(); - } - - const appearanceDict = appearance.dict; - const resourcesPromise = this.loadResources(["ExtGState", "ColorSpace", "Pattern", "Shading", "XObject", "Font"], appearance); - const bbox = appearanceDict.getArray("BBox") || [0, 0, 1, 1]; - const matrix = appearanceDict.getArray("Matrix") || [1, 0, 0, 1, 0, 0]; - const transform = getTransformMatrix(data.rect, bbox, matrix); - return resourcesPromise.then(resources => { - const opList = new _operator_list.OperatorList(); - opList.addOp(_util.OPS.beginAnnotation, [data.id, data.rect, transform, matrix, isUsingOwnCanvas]); - return evaluator.getOperatorList({ - stream: appearance, - task, - resources, - operatorList: opList, - fallbackFontDict: this._fallbackFontDict - }).then(() => { - opList.addOp(_util.OPS.endAnnotation, []); - this.reset(); - return opList; - }); - }); - } - - async save(evaluator, task, annotationStorage) { - return null; - } - - getFieldObject() { - if (this.data.kidIds) { - return { - id: this.data.id, - actions: this.data.actions, - name: this.data.fieldName, - strokeColor: this.data.borderColor, - fillColor: this.data.backgroundColor, - type: "", - kidIds: this.data.kidIds, - page: this.data.pageIndex - }; - } - - return null; - } - - reset() { - for (const stream of this._streams) { - stream.reset(); - } - } - - _constructFieldName(dict) { - if (!dict.has("T") && !dict.has("Parent")) { - (0, _util.warn)("Unknown field name, falling back to empty field name."); - return ""; - } - - if (!dict.has("Parent")) { - return (0, _util.stringToPDFString)(dict.get("T")); - } - - const fieldName = []; - - if (dict.has("T")) { - fieldName.unshift((0, _util.stringToPDFString)(dict.get("T"))); - } - - let loopDict = dict; - const visited = new _primitives.RefSet(); - - if (dict.objId) { - visited.put(dict.objId); - } - - while (loopDict.has("Parent")) { - loopDict = loopDict.get("Parent"); - - if (!(loopDict instanceof _primitives.Dict) || loopDict.objId && visited.has(loopDict.objId)) { - break; - } - - if (loopDict.objId) { - visited.put(loopDict.objId); - } - - if (loopDict.has("T")) { - fieldName.unshift((0, _util.stringToPDFString)(loopDict.get("T"))); - } - } - - return fieldName.join("."); - } - -} - -exports.Annotation = Annotation; - -class AnnotationBorderStyle { - constructor() { - this.width = 1; - this.style = _util.AnnotationBorderStyleType.SOLID; - this.dashArray = [3]; - this.horizontalCornerRadius = 0; - this.verticalCornerRadius = 0; - } - - setWidth(width, rect = [0, 0, 0, 0]) { - if ((0, _primitives.isName)(width)) { - this.width = 0; - return; - } - - if (Number.isInteger(width)) { - if (width > 0) { - const maxWidth = (rect[2] - rect[0]) / 2; - const maxHeight = (rect[3] - rect[1]) / 2; - - if (maxWidth > 0 && maxHeight > 0 && (width > maxWidth || width > maxHeight)) { - (0, _util.warn)(`AnnotationBorderStyle.setWidth - ignoring width: ${width}`); - width = 1; - } - } - - this.width = width; - } - } - - setStyle(style) { - if (!(0, _primitives.isName)(style)) { - return; - } - - switch (style.name) { - case "S": - this.style = _util.AnnotationBorderStyleType.SOLID; - break; - - case "D": - this.style = _util.AnnotationBorderStyleType.DASHED; - break; - - case "B": - this.style = _util.AnnotationBorderStyleType.BEVELED; - break; - - case "I": - this.style = _util.AnnotationBorderStyleType.INSET; - break; - - case "U": - this.style = _util.AnnotationBorderStyleType.UNDERLINE; - break; - } - } - - setDashArray(dashArray, forceStyle = false) { - if (Array.isArray(dashArray) && dashArray.length > 0) { - let isValid = true; - let allZeros = true; - - for (const element of dashArray) { - const validNumber = +element >= 0; - - if (!validNumber) { - isValid = false; - break; - } else if (element > 0) { - allZeros = false; - } - } - - if (isValid && !allZeros) { - this.dashArray = dashArray; - - if (forceStyle) { - this.setStyle(_primitives.Name.get("D")); - } - } else { - this.width = 0; - } - } else if (dashArray) { - this.width = 0; - } - } - - setHorizontalCornerRadius(radius) { - if (Number.isInteger(radius)) { - this.horizontalCornerRadius = radius; - } - } - - setVerticalCornerRadius(radius) { - if (Number.isInteger(radius)) { - this.verticalCornerRadius = radius; - } - } - -} - -exports.AnnotationBorderStyle = AnnotationBorderStyle; - -class MarkupAnnotation extends Annotation { - constructor(parameters) { - super(parameters); - const dict = parameters.dict; - - if (dict.has("IRT")) { - const rawIRT = dict.getRaw("IRT"); - this.data.inReplyTo = (0, _primitives.isRef)(rawIRT) ? rawIRT.toString() : null; - const rt = dict.get("RT"); - this.data.replyType = (0, _primitives.isName)(rt) ? rt.name : _util.AnnotationReplyType.REPLY; - } - - if (this.data.replyType === _util.AnnotationReplyType.GROUP) { - const parent = dict.get("IRT"); - this.setTitle(parent.get("T")); - this.data.titleObj = this._title; - this.setContents(parent.get("Contents")); - this.data.contentsObj = this._contents; - - if (!parent.has("CreationDate")) { - this.data.creationDate = null; - } else { - this.setCreationDate(parent.get("CreationDate")); - this.data.creationDate = this.creationDate; - } - - if (!parent.has("M")) { - this.data.modificationDate = null; - } else { - this.setModificationDate(parent.get("M")); - this.data.modificationDate = this.modificationDate; - } - - this.data.hasPopup = parent.has("Popup"); - - if (!parent.has("C")) { - this.data.color = null; - } else { - this.setColor(parent.getArray("C")); - this.data.color = this.color; - } - } else { - this.data.titleObj = this._title; - this.setCreationDate(dict.get("CreationDate")); - this.data.creationDate = this.creationDate; - this.data.hasPopup = dict.has("Popup"); - - if (!dict.has("C")) { - this.data.color = null; - } - } - - if (dict.has("RC")) { - this.data.richText = _factory.XFAFactory.getRichTextAsHtml(dict.get("RC")); - } - } - - setCreationDate(creationDate) { - this.creationDate = (0, _util.isString)(creationDate) ? creationDate : null; - } - - _setDefaultAppearance({ - xref, - extra, - strokeColor, - fillColor, - blendMode, - strokeAlpha, - fillAlpha, - pointsCallback - }) { - let minX = Number.MAX_VALUE; - let minY = Number.MAX_VALUE; - let maxX = Number.MIN_VALUE; - let maxY = Number.MIN_VALUE; - const buffer = ["q"]; - - if (extra) { - buffer.push(extra); - } - - if (strokeColor) { - buffer.push(`${strokeColor[0]} ${strokeColor[1]} ${strokeColor[2]} RG`); - } - - if (fillColor) { - buffer.push(`${fillColor[0]} ${fillColor[1]} ${fillColor[2]} rg`); - } - - let pointsArray = this.data.quadPoints; - - if (!pointsArray) { - pointsArray = [[{ - x: this.rectangle[0], - y: this.rectangle[3] - }, { - x: this.rectangle[2], - y: this.rectangle[3] - }, { - x: this.rectangle[0], - y: this.rectangle[1] - }, { - x: this.rectangle[2], - y: this.rectangle[1] - }]]; - } - - for (const points of pointsArray) { - const [mX, MX, mY, MY] = pointsCallback(buffer, points); - minX = Math.min(minX, mX); - maxX = Math.max(maxX, MX); - minY = Math.min(minY, mY); - maxY = Math.max(maxY, MY); - } - - buffer.push("Q"); - const formDict = new _primitives.Dict(xref); - const appearanceStreamDict = new _primitives.Dict(xref); - appearanceStreamDict.set("Subtype", _primitives.Name.get("Form")); - const appearanceStream = new _stream.StringStream(buffer.join(" ")); - appearanceStream.dict = appearanceStreamDict; - formDict.set("Fm0", appearanceStream); - const gsDict = new _primitives.Dict(xref); - - if (blendMode) { - gsDict.set("BM", _primitives.Name.get(blendMode)); - } - - if (typeof strokeAlpha === "number") { - gsDict.set("CA", strokeAlpha); - } - - if (typeof fillAlpha === "number") { - gsDict.set("ca", fillAlpha); - } - - const stateDict = new _primitives.Dict(xref); - stateDict.set("GS0", gsDict); - const resources = new _primitives.Dict(xref); - resources.set("ExtGState", stateDict); - resources.set("XObject", formDict); - const appearanceDict = new _primitives.Dict(xref); - appearanceDict.set("Resources", resources); - const bbox = this.data.rect = [minX, minY, maxX, maxY]; - appearanceDict.set("BBox", bbox); - this.appearance = new _stream.StringStream("/GS0 gs /Fm0 Do"); - this.appearance.dict = appearanceDict; - - this._streams.push(this.appearance, appearanceStream); - } - -} - -exports.MarkupAnnotation = MarkupAnnotation; - -class WidgetAnnotation extends Annotation { - constructor(params) { - super(params); - const dict = params.dict; - const data = this.data; - this.ref = params.ref; - data.annotationType = _util.AnnotationType.WIDGET; - - if (data.fieldName === undefined) { - data.fieldName = this._constructFieldName(dict); - } - - if (data.actions === undefined) { - data.actions = (0, _core_utils.collectActions)(params.xref, dict, _util.AnnotationActionEventType); - } - - const fieldValue = (0, _core_utils.getInheritableProperty)({ - dict, - key: "V", - getArray: true - }); - data.fieldValue = this._decodeFormValue(fieldValue); - const defaultFieldValue = (0, _core_utils.getInheritableProperty)({ - dict, - key: "DV", - getArray: true - }); - data.defaultFieldValue = this._decodeFormValue(defaultFieldValue); - - if (fieldValue === undefined && data.defaultFieldValue !== null) { - data.fieldValue = data.defaultFieldValue; - } - - data.alternativeText = (0, _util.stringToPDFString)(dict.get("TU") || ""); - const defaultAppearance = (0, _core_utils.getInheritableProperty)({ - dict, - key: "DA" - }) || params.acroForm.get("DA"); - this._defaultAppearance = (0, _util.isString)(defaultAppearance) ? defaultAppearance : ""; - data.defaultAppearanceData = (0, _default_appearance.parseDefaultAppearance)(this._defaultAppearance); - const fieldType = (0, _core_utils.getInheritableProperty)({ - dict, - key: "FT" - }); - data.fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null; - const localResources = (0, _core_utils.getInheritableProperty)({ - dict, - key: "DR" - }); - const acroFormResources = params.acroForm.get("DR"); - const appearanceResources = this.appearance && this.appearance.dict.get("Resources"); - this._fieldResources = { - localResources, - acroFormResources, - appearanceResources, - mergedResources: _primitives.Dict.merge({ - xref: params.xref, - dictArray: [localResources, appearanceResources, acroFormResources], - mergeSubDicts: true - }) - }; - data.fieldFlags = (0, _core_utils.getInheritableProperty)({ - dict, - key: "Ff" - }); - - if (!Number.isInteger(data.fieldFlags) || data.fieldFlags < 0) { - data.fieldFlags = 0; - } - - data.readOnly = this.hasFieldFlag(_util.AnnotationFieldFlag.READONLY); - data.hidden = this._hasFlag(data.annotationFlags, _util.AnnotationFlag.HIDDEN); - } - - _decodeFormValue(formValue) { - if (Array.isArray(formValue)) { - return formValue.filter(item => (0, _util.isString)(item)).map(item => (0, _util.stringToPDFString)(item)); - } else if ((0, _primitives.isName)(formValue)) { - return (0, _util.stringToPDFString)(formValue.name); - } else if ((0, _util.isString)(formValue)) { - return (0, _util.stringToPDFString)(formValue); - } - - return null; - } - - hasFieldFlag(flag) { - return !!(this.data.fieldFlags & flag); - } - - getOperatorList(evaluator, task, intent, renderForms, annotationStorage) { - if (renderForms && !(this instanceof SignatureWidgetAnnotation)) { - return Promise.resolve(new _operator_list.OperatorList()); - } - - if (!this._hasText) { - return super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage); - } - - return this._getAppearance(evaluator, task, annotationStorage).then(content => { - if (this.appearance && content === null) { - return super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage); - } - - const operatorList = new _operator_list.OperatorList(); - - if (!this._defaultAppearance || content === null) { - return operatorList; - } - - const matrix = [1, 0, 0, 1, 0, 0]; - const bbox = [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]]; - const transform = getTransformMatrix(this.data.rect, bbox, matrix); - operatorList.addOp(_util.OPS.beginAnnotation, [this.data.id, this.data.rect, transform, matrix]); - const stream = new _stream.StringStream(content); - return evaluator.getOperatorList({ - stream, - task, - resources: this._fieldResources.mergedResources, - operatorList - }).then(function () { - operatorList.addOp(_util.OPS.endAnnotation, []); - return operatorList; - }); - }); - } - - async save(evaluator, task, annotationStorage) { - if (!annotationStorage) { - return null; - } - - const storageEntry = annotationStorage.get(this.data.id); - const value = storageEntry && storageEntry.value; - - if (value === this.data.fieldValue || value === undefined) { - return null; - } - - let appearance = await this._getAppearance(evaluator, task, annotationStorage); - - if (appearance === null) { - return null; - } - - const { - xref - } = evaluator; - const dict = xref.fetchIfRef(this.ref); - - if (!(0, _primitives.isDict)(dict)) { - return null; - } - - const bbox = [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]]; - const xfa = { - path: (0, _util.stringToPDFString)(dict.get("T") || ""), - value - }; - const newRef = xref.getNewRef(); - const AP = new _primitives.Dict(xref); - AP.set("N", newRef); - const encrypt = xref.encrypt; - let originalTransform = null; - let newTransform = null; - - if (encrypt) { - originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen); - newTransform = encrypt.createCipherTransform(newRef.num, newRef.gen); - appearance = newTransform.encryptString(appearance); - } - - dict.set("V", (0, _util.isAscii)(value) ? value : (0, _util.stringToUTF16BEString)(value)); - dict.set("AP", AP); - dict.set("M", `D:${(0, _util.getModificationDate)()}`); - const appearanceDict = new _primitives.Dict(xref); - appearanceDict.set("Length", appearance.length); - appearanceDict.set("Subtype", _primitives.Name.get("Form")); - appearanceDict.set("Resources", this._getSaveFieldResources(xref)); - appearanceDict.set("BBox", bbox); - const bufferOriginal = [`${this.ref.num} ${this.ref.gen} obj\n`]; - (0, _writer.writeDict)(dict, bufferOriginal, originalTransform); - bufferOriginal.push("\nendobj\n"); - const bufferNew = [`${newRef.num} ${newRef.gen} obj\n`]; - (0, _writer.writeDict)(appearanceDict, bufferNew, newTransform); - bufferNew.push(" stream\n", appearance, "\nendstream\nendobj\n"); - return [{ - ref: this.ref, - data: bufferOriginal.join(""), - xfa - }, { - ref: newRef, - data: bufferNew.join(""), - xfa: null - }]; - } - - async _getAppearance(evaluator, task, annotationStorage) { - const isPassword = this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD); - - if (!annotationStorage || isPassword) { - return null; - } - - const storageEntry = annotationStorage.get(this.data.id); - let value = storageEntry && storageEntry.value; - - if (value === undefined) { - return null; - } - - value = value.trim(); - - if (value === "") { - return ""; - } - - let lineCount = -1; - - if (this.data.multiLine) { - lineCount = value.split(/\r\n|\r|\n/).length; - } - - const defaultPadding = 2; - const hPadding = defaultPadding; - const totalHeight = this.data.rect[3] - this.data.rect[1]; - const totalWidth = this.data.rect[2] - this.data.rect[0]; - - if (!this._defaultAppearance) { - this.data.defaultAppearanceData = (0, _default_appearance.parseDefaultAppearance)(this._defaultAppearance = "/Helvetica 0 Tf 0 g"); - } - - const [defaultAppearance, fontSize] = this._computeFontSize(totalHeight, lineCount); - - const font = await this._getFontData(evaluator, task); - let descent = font.descent; - - if (isNaN(descent)) { - descent = 0; - } - - const vPadding = defaultPadding + Math.abs(descent) * fontSize; - const alignment = this.data.textAlignment; - - if (this.data.multiLine) { - return this._getMultilineAppearance(defaultAppearance, value, font, fontSize, totalWidth, totalHeight, alignment, hPadding, vPadding); - } - - const encodedString = font.encodeString(value).join(""); - - if (this.data.comb) { - return this._getCombAppearance(defaultAppearance, font, encodedString, totalWidth, hPadding, vPadding); - } - - if (alignment === 0 || alignment > 2) { - return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 ${hPadding} ${vPadding} Tm (${(0, _util.escapeString)(encodedString)}) Tj` + " ET Q EMC"; - } - - const renderedText = this._renderText(encodedString, font, fontSize, totalWidth, alignment, hPadding, vPadding); - - return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 0 0 Tm ${renderedText}` + " ET Q EMC"; - } - - async _getFontData(evaluator, task) { - const operatorList = new _operator_list.OperatorList(); - const initialState = { - font: null, - - clone() { - return this; - } - - }; - const { - fontName, - fontSize - } = this.data.defaultAppearanceData; - await evaluator.handleSetFont(this._fieldResources.mergedResources, [fontName && _primitives.Name.get(fontName), fontSize], null, operatorList, task, initialState, null); - return initialState.font; - } - - _computeFontSize(height, lineCount) { - let { - fontSize - } = this.data.defaultAppearanceData; - - if (!fontSize) { - const roundWithOneDigit = x => Math.round(x * 10) / 10; - - const FONT_FACTOR = 0.8; - - if (lineCount === -1) { - fontSize = roundWithOneDigit(FONT_FACTOR * height); - } else { - fontSize = 10; - let lineHeight = fontSize / FONT_FACTOR; - let numberOfLines = Math.round(height / lineHeight); - numberOfLines = Math.max(numberOfLines, lineCount); - lineHeight = height / numberOfLines; - fontSize = roundWithOneDigit(FONT_FACTOR * lineHeight); - } - - const { - fontName, - fontColor - } = this.data.defaultAppearanceData; - this._defaultAppearance = (0, _default_appearance.createDefaultAppearance)({ - fontSize, - fontName, - fontColor - }); - } - - return [this._defaultAppearance, fontSize]; - } - - _renderText(text, font, fontSize, totalWidth, alignment, hPadding, vPadding) { - const glyphs = font.charsToGlyphs(text); - const scale = fontSize / 1000; - let width = 0; - - for (const glyph of glyphs) { - width += glyph.width * scale; - } - - let shift; - - if (alignment === 1) { - shift = (totalWidth - width) / 2; - } else if (alignment === 2) { - shift = totalWidth - width - hPadding; - } else { - shift = hPadding; - } - - shift = shift.toFixed(2); - vPadding = vPadding.toFixed(2); - return `${shift} ${vPadding} Td (${(0, _util.escapeString)(text)}) Tj`; - } - - _getSaveFieldResources(xref) { - const { - localResources, - appearanceResources, - acroFormResources - } = this._fieldResources; - const fontName = this.data.defaultAppearanceData && this.data.defaultAppearanceData.fontName; - - if (!fontName) { - return localResources || _primitives.Dict.empty; - } - - for (const resources of [localResources, appearanceResources]) { - if (resources instanceof _primitives.Dict) { - const localFont = resources.get("Font"); - - if (localFont instanceof _primitives.Dict && localFont.has(fontName)) { - return resources; - } - } - } - - if (acroFormResources instanceof _primitives.Dict) { - const acroFormFont = acroFormResources.get("Font"); - - if (acroFormFont instanceof _primitives.Dict && acroFormFont.has(fontName)) { - const subFontDict = new _primitives.Dict(xref); - subFontDict.set(fontName, acroFormFont.getRaw(fontName)); - const subResourcesDict = new _primitives.Dict(xref); - subResourcesDict.set("Font", subFontDict); - return _primitives.Dict.merge({ - xref, - dictArray: [subResourcesDict, localResources], - mergeSubDicts: true - }); - } - } - - return localResources || _primitives.Dict.empty; - } - - getFieldObject() { - return null; - } - -} - -class TextWidgetAnnotation extends WidgetAnnotation { - constructor(params) { - super(params); - this._hasText = true; - const dict = params.dict; - - if (!(0, _util.isString)(this.data.fieldValue)) { - this.data.fieldValue = ""; - } - - let alignment = (0, _core_utils.getInheritableProperty)({ - dict, - key: "Q" - }); - - if (!Number.isInteger(alignment) || alignment < 0 || alignment > 2) { - alignment = null; - } - - this.data.textAlignment = alignment; - let maximumLength = (0, _core_utils.getInheritableProperty)({ - dict, - key: "MaxLen" - }); - - if (!Number.isInteger(maximumLength) || maximumLength < 0) { - maximumLength = null; - } - - this.data.maxLen = maximumLength; - this.data.multiLine = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE); - this.data.comb = this.hasFieldFlag(_util.AnnotationFieldFlag.COMB) && !this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD) && !this.hasFieldFlag(_util.AnnotationFieldFlag.FILESELECT) && this.data.maxLen !== null; - } - - _getCombAppearance(defaultAppearance, font, text, width, hPadding, vPadding) { - const combWidth = (width / this.data.maxLen).toFixed(2); - const buf = []; - const positions = font.getCharPositions(text); - - for (const [start, end] of positions) { - buf.push(`(${(0, _util.escapeString)(text.substring(start, end))}) Tj`); - } - - const renderedComb = buf.join(` ${combWidth} 0 Td `); - return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 ${hPadding} ${vPadding} Tm ${renderedComb}` + " ET Q EMC"; - } - - _getMultilineAppearance(defaultAppearance, text, font, fontSize, width, height, alignment, hPadding, vPadding) { - const lines = text.split(/\r\n|\r|\n/); - const buf = []; - const totalWidth = width - 2 * hPadding; - - for (const line of lines) { - const chunks = this._splitLine(line, font, fontSize, totalWidth); - - for (const chunk of chunks) { - const padding = buf.length === 0 ? hPadding : 0; - buf.push(this._renderText(chunk, font, fontSize, width, alignment, padding, -fontSize)); - } - } - - const renderedText = buf.join("\n"); - return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 0 ${height} Tm ${renderedText}` + " ET Q EMC"; - } - - _splitLine(line, font, fontSize, width) { - line = font.encodeString(line).join(""); - const glyphs = font.charsToGlyphs(line); - - if (glyphs.length <= 1) { - return [line]; - } - - const positions = font.getCharPositions(line); - const scale = fontSize / 1000; - const chunks = []; - let lastSpacePosInStringStart = -1, - lastSpacePosInStringEnd = -1, - lastSpacePos = -1, - startChunk = 0, - currentWidth = 0; - - for (let i = 0, ii = glyphs.length; i < ii; i++) { - const [start, end] = positions[i]; - const glyph = glyphs[i]; - const glyphWidth = glyph.width * scale; - - if (glyph.unicode === " ") { - if (currentWidth + glyphWidth > width) { - chunks.push(line.substring(startChunk, start)); - startChunk = start; - currentWidth = glyphWidth; - lastSpacePosInStringStart = -1; - lastSpacePos = -1; - } else { - currentWidth += glyphWidth; - lastSpacePosInStringStart = start; - lastSpacePosInStringEnd = end; - lastSpacePos = i; - } - } else { - if (currentWidth + glyphWidth > width) { - if (lastSpacePosInStringStart !== -1) { - chunks.push(line.substring(startChunk, lastSpacePosInStringEnd)); - startChunk = lastSpacePosInStringEnd; - i = lastSpacePos + 1; - lastSpacePosInStringStart = -1; - currentWidth = 0; - } else { - chunks.push(line.substring(startChunk, start)); - startChunk = start; - currentWidth = glyphWidth; - } - } else { - currentWidth += glyphWidth; - } - } - } - - if (startChunk < line.length) { - chunks.push(line.substring(startChunk, line.length)); - } - - return chunks; - } - - getFieldObject() { - return { - id: this.data.id, - value: this.data.fieldValue, - defaultValue: this.data.defaultFieldValue, - multiline: this.data.multiLine, - password: this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD), - charLimit: this.data.maxLen, - comb: this.data.comb, - editable: !this.data.readOnly, - hidden: this.data.hidden, - name: this.data.fieldName, - rect: this.data.rect, - actions: this.data.actions, - page: this.data.pageIndex, - strokeColor: this.data.borderColor, - fillColor: this.data.backgroundColor, - type: "text" - }; - } - -} - -class ButtonWidgetAnnotation extends WidgetAnnotation { - constructor(params) { - super(params); - this.checkedAppearance = null; - this.uncheckedAppearance = null; - this.data.checkBox = !this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON); - this.data.radioButton = this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON); - this.data.pushButton = this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON); - this.data.isTooltipOnly = false; - - if (this.data.checkBox) { - this._processCheckBox(params); - } else if (this.data.radioButton) { - this._processRadioButton(params); - } else if (this.data.pushButton) { - this.data.hasOwnCanvas = true; - - this._processPushButton(params); - } else { - (0, _util.warn)("Invalid field flags for button widget annotation"); - } - } - - async getOperatorList(evaluator, task, intent, renderForms, annotationStorage) { - if (this.data.pushButton) { - return super.getOperatorList(evaluator, task, intent, false, annotationStorage); - } - - let value = null; - - if (annotationStorage) { - const storageEntry = annotationStorage.get(this.data.id); - value = storageEntry ? storageEntry.value : null; - } - - if (value === null) { - if (this.appearance) { - return super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage); - } - - if (this.data.checkBox) { - value = this.data.fieldValue === this.data.exportValue; - } else { - value = this.data.fieldValue === this.data.buttonValue; - } - } - - const appearance = value ? this.checkedAppearance : this.uncheckedAppearance; - - if (appearance) { - const savedAppearance = this.appearance; - this.appearance = appearance; - const operatorList = super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage); - this.appearance = savedAppearance; - return operatorList; - } - - return new _operator_list.OperatorList(); - } - - async save(evaluator, task, annotationStorage) { - if (this.data.checkBox) { - return this._saveCheckbox(evaluator, task, annotationStorage); - } - - if (this.data.radioButton) { - return this._saveRadioButton(evaluator, task, annotationStorage); - } - - return null; - } - - async _saveCheckbox(evaluator, task, annotationStorage) { - if (!annotationStorage) { - return null; - } - - const storageEntry = annotationStorage.get(this.data.id); - const value = storageEntry && storageEntry.value; - - if (value === undefined) { - return null; - } - - const defaultValue = this.data.fieldValue === this.data.exportValue; - - if (defaultValue === value) { - return null; - } - - const dict = evaluator.xref.fetchIfRef(this.ref); - - if (!(0, _primitives.isDict)(dict)) { - return null; - } - - const xfa = { - path: (0, _util.stringToPDFString)(dict.get("T") || ""), - value: value ? this.data.exportValue : "" - }; - - const name = _primitives.Name.get(value ? this.data.exportValue : "Off"); - - dict.set("V", name); - dict.set("AS", name); - dict.set("M", `D:${(0, _util.getModificationDate)()}`); - const encrypt = evaluator.xref.encrypt; - let originalTransform = null; - - if (encrypt) { - originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen); - } - - const buffer = [`${this.ref.num} ${this.ref.gen} obj\n`]; - (0, _writer.writeDict)(dict, buffer, originalTransform); - buffer.push("\nendobj\n"); - return [{ - ref: this.ref, - data: buffer.join(""), - xfa - }]; - } - - async _saveRadioButton(evaluator, task, annotationStorage) { - if (!annotationStorage) { - return null; - } - - const storageEntry = annotationStorage.get(this.data.id); - const value = storageEntry && storageEntry.value; - - if (value === undefined) { - return null; - } - - const defaultValue = this.data.fieldValue === this.data.buttonValue; - - if (defaultValue === value) { - return null; - } - - const dict = evaluator.xref.fetchIfRef(this.ref); - - if (!(0, _primitives.isDict)(dict)) { - return null; - } - - const xfa = { - path: (0, _util.stringToPDFString)(dict.get("T") || ""), - value: value ? this.data.buttonValue : "" - }; - - const name = _primitives.Name.get(value ? this.data.buttonValue : "Off"); - - let parentBuffer = null; - const encrypt = evaluator.xref.encrypt; - - if (value) { - if ((0, _primitives.isRef)(this.parent)) { - const parent = evaluator.xref.fetch(this.parent); - let parentTransform = null; - - if (encrypt) { - parentTransform = encrypt.createCipherTransform(this.parent.num, this.parent.gen); - } - - parent.set("V", name); - parentBuffer = [`${this.parent.num} ${this.parent.gen} obj\n`]; - (0, _writer.writeDict)(parent, parentBuffer, parentTransform); - parentBuffer.push("\nendobj\n"); - } else if ((0, _primitives.isDict)(this.parent)) { - this.parent.set("V", name); - } - } - - dict.set("AS", name); - dict.set("M", `D:${(0, _util.getModificationDate)()}`); - let originalTransform = null; - - if (encrypt) { - originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen); - } - - const buffer = [`${this.ref.num} ${this.ref.gen} obj\n`]; - (0, _writer.writeDict)(dict, buffer, originalTransform); - buffer.push("\nendobj\n"); - const newRefs = [{ - ref: this.ref, - data: buffer.join(""), - xfa - }]; - - if (parentBuffer !== null) { - newRefs.push({ - ref: this.parent, - data: parentBuffer.join(""), - xfa: null - }); - } - - return newRefs; - } - - _getDefaultCheckedAppearance(params, type) { - const width = this.data.rect[2] - this.data.rect[0]; - const height = this.data.rect[3] - this.data.rect[1]; - const bbox = [0, 0, width, height]; - const FONT_RATIO = 0.8; - const fontSize = Math.min(width, height) * FONT_RATIO; - let metrics, char; - - if (type === "check") { - metrics = { - width: 0.755 * fontSize, - height: 0.705 * fontSize - }; - char = "\x33"; - } else if (type === "disc") { - metrics = { - width: 0.791 * fontSize, - height: 0.705 * fontSize - }; - char = "\x6C"; - } else { - (0, _util.unreachable)(`_getDefaultCheckedAppearance - unsupported type: ${type}`); - } - - const xShift = (width - metrics.width) / 2; - const yShift = (height - metrics.height) / 2; - const appearance = `q BT /PdfJsZaDb ${fontSize} Tf 0 g ${xShift} ${yShift} Td (${char}) Tj ET Q`; - const appearanceStreamDict = new _primitives.Dict(params.xref); - appearanceStreamDict.set("FormType", 1); - appearanceStreamDict.set("Subtype", _primitives.Name.get("Form")); - appearanceStreamDict.set("Type", _primitives.Name.get("XObject")); - appearanceStreamDict.set("BBox", bbox); - appearanceStreamDict.set("Matrix", [1, 0, 0, 1, 0, 0]); - appearanceStreamDict.set("Length", appearance.length); - const resources = new _primitives.Dict(params.xref); - const font = new _primitives.Dict(params.xref); - font.set("PdfJsZaDb", this.fallbackFontDict); - resources.set("Font", font); - appearanceStreamDict.set("Resources", resources); - this.checkedAppearance = new _stream.StringStream(appearance); - this.checkedAppearance.dict = appearanceStreamDict; - - this._streams.push(this.checkedAppearance); - } - - _processCheckBox(params) { - const customAppearance = params.dict.get("AP"); - - if (!(0, _primitives.isDict)(customAppearance)) { - return; - } - - const normalAppearance = customAppearance.get("N"); - - if (!(0, _primitives.isDict)(normalAppearance)) { - return; - } - - const asValue = this._decodeFormValue(params.dict.get("AS")); - - if (typeof asValue === "string") { - this.data.fieldValue = asValue; - } - - const yes = this.data.fieldValue !== null && this.data.fieldValue !== "Off" ? this.data.fieldValue : "Yes"; - const exportValues = normalAppearance.getKeys(); - - if (exportValues.length === 0) { - exportValues.push("Off", yes); - } else if (exportValues.length === 1) { - if (exportValues[0] === "Off") { - exportValues.push(yes); - } else { - exportValues.unshift("Off"); - } - } else if (exportValues.includes(yes)) { - exportValues.length = 0; - exportValues.push("Off", yes); - } else { - const otherYes = exportValues.find(v => v !== "Off"); - exportValues.length = 0; - exportValues.push("Off", otherYes); - } - - if (!exportValues.includes(this.data.fieldValue)) { - this.data.fieldValue = "Off"; - } - - this.data.exportValue = exportValues[1]; - this.checkedAppearance = normalAppearance.get(this.data.exportValue) || null; - this.uncheckedAppearance = normalAppearance.get("Off") || null; - - if (this.checkedAppearance) { - this._streams.push(this.checkedAppearance); - } else { - this._getDefaultCheckedAppearance(params, "check"); - } - - if (this.uncheckedAppearance) { - this._streams.push(this.uncheckedAppearance); - } - - this._fallbackFontDict = this.fallbackFontDict; - } - - _processRadioButton(params) { - this.data.fieldValue = this.data.buttonValue = null; - const fieldParent = params.dict.get("Parent"); - - if ((0, _primitives.isDict)(fieldParent)) { - this.parent = params.dict.getRaw("Parent"); - const fieldParentValue = fieldParent.get("V"); - - if ((0, _primitives.isName)(fieldParentValue)) { - this.data.fieldValue = this._decodeFormValue(fieldParentValue); - } - } - - const appearanceStates = params.dict.get("AP"); - - if (!(0, _primitives.isDict)(appearanceStates)) { - return; - } - - const normalAppearance = appearanceStates.get("N"); - - if (!(0, _primitives.isDict)(normalAppearance)) { - return; - } - - for (const key of normalAppearance.getKeys()) { - if (key !== "Off") { - this.data.buttonValue = this._decodeFormValue(key); - break; - } - } - - this.checkedAppearance = normalAppearance.get(this.data.buttonValue) || null; - this.uncheckedAppearance = normalAppearance.get("Off") || null; - - if (this.checkedAppearance) { - this._streams.push(this.checkedAppearance); - } else { - this._getDefaultCheckedAppearance(params, "disc"); - } - - if (this.uncheckedAppearance) { - this._streams.push(this.uncheckedAppearance); - } - - this._fallbackFontDict = this.fallbackFontDict; - } - - _processPushButton(params) { - if (!params.dict.has("A") && !params.dict.has("AA") && !this.data.alternativeText) { - (0, _util.warn)("Push buttons without action dictionaries are not supported"); - return; - } - - this.data.isTooltipOnly = !params.dict.has("A") && !params.dict.has("AA"); - - _catalog.Catalog.parseDestDictionary({ - destDict: params.dict, - resultObj: this.data, - docBaseUrl: params.pdfManager.docBaseUrl - }); - } - - getFieldObject() { - let type = "button"; - let exportValues; - - if (this.data.checkBox) { - type = "checkbox"; - exportValues = this.data.exportValue; - } else if (this.data.radioButton) { - type = "radiobutton"; - exportValues = this.data.buttonValue; - } - - return { - id: this.data.id, - value: this.data.fieldValue || "Off", - defaultValue: this.data.defaultFieldValue, - exportValues, - editable: !this.data.readOnly, - name: this.data.fieldName, - rect: this.data.rect, - hidden: this.data.hidden, - actions: this.data.actions, - page: this.data.pageIndex, - strokeColor: this.data.borderColor, - fillColor: this.data.backgroundColor, - type - }; - } - - get fallbackFontDict() { - const dict = new _primitives.Dict(); - dict.set("BaseFont", _primitives.Name.get("ZapfDingbats")); - dict.set("Type", _primitives.Name.get("FallbackType")); - dict.set("Subtype", _primitives.Name.get("FallbackType")); - dict.set("Encoding", _primitives.Name.get("ZapfDingbatsEncoding")); - return (0, _util.shadow)(this, "fallbackFontDict", dict); - } - -} - -class ChoiceWidgetAnnotation extends WidgetAnnotation { - constructor(params) { - super(params); - this.data.options = []; - const options = (0, _core_utils.getInheritableProperty)({ - dict: params.dict, - key: "Opt" - }); - - if (Array.isArray(options)) { - const xref = params.xref; - - for (let i = 0, ii = options.length; i < ii; i++) { - const option = xref.fetchIfRef(options[i]); - const isOptionArray = Array.isArray(option); - this.data.options[i] = { - exportValue: this._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[0]) : option), - displayValue: this._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[1]) : option) - }; - } - } - - if ((0, _util.isString)(this.data.fieldValue)) { - this.data.fieldValue = [this.data.fieldValue]; - } else if (!this.data.fieldValue) { - this.data.fieldValue = []; - } - - this.data.combo = this.hasFieldFlag(_util.AnnotationFieldFlag.COMBO); - this.data.multiSelect = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTISELECT); - this._hasText = true; - } - - getFieldObject() { - const type = this.data.combo ? "combobox" : "listbox"; - const value = this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : null; - return { - id: this.data.id, - value, - defaultValue: this.data.defaultFieldValue, - editable: !this.data.readOnly, - name: this.data.fieldName, - rect: this.data.rect, - numItems: this.data.fieldValue.length, - multipleSelection: this.data.multiSelect, - hidden: this.data.hidden, - actions: this.data.actions, - items: this.data.options, - page: this.data.pageIndex, - strokeColor: this.data.borderColor, - fillColor: this.data.backgroundColor, - type - }; - } - -} - -class SignatureWidgetAnnotation extends WidgetAnnotation { - constructor(params) { - super(params); - this.data.fieldValue = null; - } - - getFieldObject() { - return { - id: this.data.id, - value: null, - page: this.data.pageIndex, - type: "signature" - }; - } - -} - -class TextAnnotation extends MarkupAnnotation { - constructor(parameters) { - const DEFAULT_ICON_SIZE = 22; - super(parameters); - const dict = parameters.dict; - this.data.annotationType = _util.AnnotationType.TEXT; - - if (this.data.hasAppearance) { - this.data.name = "NoIcon"; - } else { - this.data.rect[1] = this.data.rect[3] - DEFAULT_ICON_SIZE; - this.data.rect[2] = this.data.rect[0] + DEFAULT_ICON_SIZE; - this.data.name = dict.has("Name") ? dict.get("Name").name : "Note"; - } - - if (dict.has("State")) { - this.data.state = dict.get("State") || null; - this.data.stateModel = dict.get("StateModel") || null; - } else { - this.data.state = null; - this.data.stateModel = null; - } - } - -} - -class LinkAnnotation extends Annotation { - constructor(params) { - super(params); - this.data.annotationType = _util.AnnotationType.LINK; - const quadPoints = getQuadPoints(params.dict, this.rectangle); - - if (quadPoints) { - this.data.quadPoints = quadPoints; - } - - _catalog.Catalog.parseDestDictionary({ - destDict: params.dict, - resultObj: this.data, - docBaseUrl: params.pdfManager.docBaseUrl - }); - } - -} - -class PopupAnnotation extends Annotation { - constructor(parameters) { - super(parameters); - this.data.annotationType = _util.AnnotationType.POPUP; - let parentItem = parameters.dict.get("Parent"); - - if (!parentItem) { - (0, _util.warn)("Popup annotation has a missing or invalid parent annotation."); - return; - } - - const parentSubtype = parentItem.get("Subtype"); - this.data.parentType = (0, _primitives.isName)(parentSubtype) ? parentSubtype.name : null; - const rawParent = parameters.dict.getRaw("Parent"); - this.data.parentId = (0, _primitives.isRef)(rawParent) ? rawParent.toString() : null; - const parentRect = parentItem.getArray("Rect"); - - if (Array.isArray(parentRect) && parentRect.length === 4) { - this.data.parentRect = _util.Util.normalizeRect(parentRect); - } else { - this.data.parentRect = [0, 0, 0, 0]; - } - - const rt = parentItem.get("RT"); - - if ((0, _primitives.isName)(rt, _util.AnnotationReplyType.GROUP)) { - parentItem = parentItem.get("IRT"); - } - - if (!parentItem.has("M")) { - this.data.modificationDate = null; - } else { - this.setModificationDate(parentItem.get("M")); - this.data.modificationDate = this.modificationDate; - } - - if (!parentItem.has("C")) { - this.data.color = null; - } else { - this.setColor(parentItem.getArray("C")); - this.data.color = this.color; - } - - if (!this.viewable) { - const parentFlags = parentItem.get("F"); - - if (this._isViewable(parentFlags)) { - this.setFlags(parentFlags); - } - } - - this.setTitle(parentItem.get("T")); - this.data.titleObj = this._title; - this.setContents(parentItem.get("Contents")); - this.data.contentsObj = this._contents; - - if (parentItem.has("RC")) { - this.data.richText = _factory.XFAFactory.getRichTextAsHtml(parentItem.get("RC")); - } - } - -} - -class FreeTextAnnotation extends MarkupAnnotation { - constructor(parameters) { - super(parameters); - this.data.annotationType = _util.AnnotationType.FREETEXT; - } - -} - -class LineAnnotation extends MarkupAnnotation { - constructor(parameters) { - super(parameters); - this.data.annotationType = _util.AnnotationType.LINE; - const lineCoordinates = parameters.dict.getArray("L"); - this.data.lineCoordinates = _util.Util.normalizeRect(lineCoordinates); - - if (!this.appearance) { - const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; - const strokeAlpha = parameters.dict.get("CA"); - let fillColor = null, - interiorColor = parameters.dict.getArray("IC"); - - if (interiorColor) { - interiorColor = getRgbColor(interiorColor, null); - fillColor = interiorColor ? Array.from(interiorColor).map(c => c / 255) : null; - } - - const fillAlpha = fillColor ? strokeAlpha : null; - const borderWidth = this.borderStyle.width || 1, - borderAdjust = 2 * borderWidth; - const bbox = [this.data.lineCoordinates[0] - borderAdjust, this.data.lineCoordinates[1] - borderAdjust, this.data.lineCoordinates[2] + borderAdjust, this.data.lineCoordinates[3] + borderAdjust]; - - if (!_util.Util.intersect(this.rectangle, bbox)) { - this.rectangle = bbox; - } - - this._setDefaultAppearance({ - xref: parameters.xref, - extra: `${borderWidth} w`, - strokeColor, - fillColor, - strokeAlpha, - fillAlpha, - pointsCallback: (buffer, points) => { - buffer.push(`${lineCoordinates[0]} ${lineCoordinates[1]} m`, `${lineCoordinates[2]} ${lineCoordinates[3]} l`, "S"); - return [points[0].x - borderWidth, points[1].x + borderWidth, points[3].y - borderWidth, points[1].y + borderWidth]; - } - }); - } - } - -} - -class SquareAnnotation extends MarkupAnnotation { - constructor(parameters) { - super(parameters); - this.data.annotationType = _util.AnnotationType.SQUARE; - - if (!this.appearance) { - const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; - const strokeAlpha = parameters.dict.get("CA"); - let fillColor = null, - interiorColor = parameters.dict.getArray("IC"); - - if (interiorColor) { - interiorColor = getRgbColor(interiorColor, null); - fillColor = interiorColor ? Array.from(interiorColor).map(c => c / 255) : null; - } - - const fillAlpha = fillColor ? strokeAlpha : null; - - if (this.borderStyle.width === 0 && !fillColor) { - return; - } - - this._setDefaultAppearance({ - xref: parameters.xref, - extra: `${this.borderStyle.width} w`, - strokeColor, - fillColor, - strokeAlpha, - fillAlpha, - pointsCallback: (buffer, points) => { - const x = points[2].x + this.borderStyle.width / 2; - const y = points[2].y + this.borderStyle.width / 2; - const width = points[3].x - points[2].x - this.borderStyle.width; - const height = points[1].y - points[3].y - this.borderStyle.width; - buffer.push(`${x} ${y} ${width} ${height} re`); - - if (fillColor) { - buffer.push("B"); - } else { - buffer.push("S"); - } - - return [points[0].x, points[1].x, points[3].y, points[1].y]; - } - }); - } - } - -} - -class CircleAnnotation extends MarkupAnnotation { - constructor(parameters) { - super(parameters); - this.data.annotationType = _util.AnnotationType.CIRCLE; - - if (!this.appearance) { - const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; - const strokeAlpha = parameters.dict.get("CA"); - let fillColor = null; - let interiorColor = parameters.dict.getArray("IC"); - - if (interiorColor) { - interiorColor = getRgbColor(interiorColor, null); - fillColor = interiorColor ? Array.from(interiorColor).map(c => c / 255) : null; - } - - const fillAlpha = fillColor ? strokeAlpha : null; - - if (this.borderStyle.width === 0 && !fillColor) { - return; - } - - const controlPointsDistance = 4 / 3 * Math.tan(Math.PI / (2 * 4)); - - this._setDefaultAppearance({ - xref: parameters.xref, - extra: `${this.borderStyle.width} w`, - strokeColor, - fillColor, - strokeAlpha, - fillAlpha, - pointsCallback: (buffer, points) => { - const x0 = points[0].x + this.borderStyle.width / 2; - const y0 = points[0].y - this.borderStyle.width / 2; - const x1 = points[3].x - this.borderStyle.width / 2; - const y1 = points[3].y + this.borderStyle.width / 2; - const xMid = x0 + (x1 - x0) / 2; - const yMid = y0 + (y1 - y0) / 2; - const xOffset = (x1 - x0) / 2 * controlPointsDistance; - const yOffset = (y1 - y0) / 2 * controlPointsDistance; - buffer.push(`${xMid} ${y1} m`, `${xMid + xOffset} ${y1} ${x1} ${yMid + yOffset} ${x1} ${yMid} c`, `${x1} ${yMid - yOffset} ${xMid + xOffset} ${y0} ${xMid} ${y0} c`, `${xMid - xOffset} ${y0} ${x0} ${yMid - yOffset} ${x0} ${yMid} c`, `${x0} ${yMid + yOffset} ${xMid - xOffset} ${y1} ${xMid} ${y1} c`, "h"); - - if (fillColor) { - buffer.push("B"); - } else { - buffer.push("S"); - } - - return [points[0].x, points[1].x, points[3].y, points[1].y]; - } - }); - } - } - -} - -class PolylineAnnotation extends MarkupAnnotation { - constructor(parameters) { - super(parameters); - this.data.annotationType = _util.AnnotationType.POLYLINE; - this.data.vertices = []; - const rawVertices = parameters.dict.getArray("Vertices"); - - if (!Array.isArray(rawVertices)) { - return; - } - - for (let i = 0, ii = rawVertices.length; i < ii; i += 2) { - this.data.vertices.push({ - x: rawVertices[i], - y: rawVertices[i + 1] - }); - } - - if (!this.appearance) { - const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; - const strokeAlpha = parameters.dict.get("CA"); - const borderWidth = this.borderStyle.width || 1, - borderAdjust = 2 * borderWidth; - const bbox = [Infinity, Infinity, -Infinity, -Infinity]; - - for (const vertex of this.data.vertices) { - bbox[0] = Math.min(bbox[0], vertex.x - borderAdjust); - bbox[1] = Math.min(bbox[1], vertex.y - borderAdjust); - bbox[2] = Math.max(bbox[2], vertex.x + borderAdjust); - bbox[3] = Math.max(bbox[3], vertex.y + borderAdjust); - } - - if (!_util.Util.intersect(this.rectangle, bbox)) { - this.rectangle = bbox; - } - - this._setDefaultAppearance({ - xref: parameters.xref, - extra: `${borderWidth} w`, - strokeColor, - strokeAlpha, - pointsCallback: (buffer, points) => { - const vertices = this.data.vertices; - - for (let i = 0, ii = vertices.length; i < ii; i++) { - buffer.push(`${vertices[i].x} ${vertices[i].y} ${i === 0 ? "m" : "l"}`); - } - - buffer.push("S"); - return [points[0].x, points[1].x, points[3].y, points[1].y]; - } - }); - } - } - -} - -class PolygonAnnotation extends PolylineAnnotation { - constructor(parameters) { - super(parameters); - this.data.annotationType = _util.AnnotationType.POLYGON; - } - -} - -class CaretAnnotation extends MarkupAnnotation { - constructor(parameters) { - super(parameters); - this.data.annotationType = _util.AnnotationType.CARET; - } - -} - -class InkAnnotation extends MarkupAnnotation { - constructor(parameters) { - super(parameters); - this.data.annotationType = _util.AnnotationType.INK; - this.data.inkLists = []; - const rawInkLists = parameters.dict.getArray("InkList"); - - if (!Array.isArray(rawInkLists)) { - return; - } - - const xref = parameters.xref; - - for (let i = 0, ii = rawInkLists.length; i < ii; ++i) { - this.data.inkLists.push([]); - - for (let j = 0, jj = rawInkLists[i].length; j < jj; j += 2) { - this.data.inkLists[i].push({ - x: xref.fetchIfRef(rawInkLists[i][j]), - y: xref.fetchIfRef(rawInkLists[i][j + 1]) - }); - } - } - - if (!this.appearance) { - const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; - const strokeAlpha = parameters.dict.get("CA"); - const borderWidth = this.borderStyle.width || 1, - borderAdjust = 2 * borderWidth; - const bbox = [Infinity, Infinity, -Infinity, -Infinity]; - - for (const inkLists of this.data.inkLists) { - for (const vertex of inkLists) { - bbox[0] = Math.min(bbox[0], vertex.x - borderAdjust); - bbox[1] = Math.min(bbox[1], vertex.y - borderAdjust); - bbox[2] = Math.max(bbox[2], vertex.x + borderAdjust); - bbox[3] = Math.max(bbox[3], vertex.y + borderAdjust); - } - } - - if (!_util.Util.intersect(this.rectangle, bbox)) { - this.rectangle = bbox; - } - - this._setDefaultAppearance({ - xref: parameters.xref, - extra: `${borderWidth} w`, - strokeColor, - strokeAlpha, - pointsCallback: (buffer, points) => { - for (const inkList of this.data.inkLists) { - for (let i = 0, ii = inkList.length; i < ii; i++) { - buffer.push(`${inkList[i].x} ${inkList[i].y} ${i === 0 ? "m" : "l"}`); - } - - buffer.push("S"); - } - - return [points[0].x, points[1].x, points[3].y, points[1].y]; - } - }); - } - } - -} - -class HighlightAnnotation extends MarkupAnnotation { - constructor(parameters) { - super(parameters); - this.data.annotationType = _util.AnnotationType.HIGHLIGHT; - const quadPoints = this.data.quadPoints = getQuadPoints(parameters.dict, null); - - if (quadPoints) { - const resources = this.appearance && this.appearance.dict.get("Resources"); - - if (!this.appearance || !(resources && resources.has("ExtGState"))) { - if (this.appearance) { - (0, _util.warn)("HighlightAnnotation - ignoring built-in appearance stream."); - } - - const fillColor = this.color ? Array.from(this.color).map(c => c / 255) : [1, 1, 0]; - const fillAlpha = parameters.dict.get("CA"); - - this._setDefaultAppearance({ - xref: parameters.xref, - fillColor, - blendMode: "Multiply", - fillAlpha, - pointsCallback: (buffer, points) => { - buffer.push(`${points[0].x} ${points[0].y} m`, `${points[1].x} ${points[1].y} l`, `${points[3].x} ${points[3].y} l`, `${points[2].x} ${points[2].y} l`, "f"); - return [points[0].x, points[1].x, points[3].y, points[1].y]; - } - }); - } - } else { - this.data.hasPopup = false; - } - } - -} - -class UnderlineAnnotation extends MarkupAnnotation { - constructor(parameters) { - super(parameters); - this.data.annotationType = _util.AnnotationType.UNDERLINE; - const quadPoints = this.data.quadPoints = getQuadPoints(parameters.dict, null); - - if (quadPoints) { - if (!this.appearance) { - const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; - const strokeAlpha = parameters.dict.get("CA"); - - this._setDefaultAppearance({ - xref: parameters.xref, - extra: "[] 0 d 1 w", - strokeColor, - strokeAlpha, - pointsCallback: (buffer, points) => { - buffer.push(`${points[2].x} ${points[2].y} m`, `${points[3].x} ${points[3].y} l`, "S"); - return [points[0].x, points[1].x, points[3].y, points[1].y]; - } - }); - } - } else { - this.data.hasPopup = false; - } - } - -} - -class SquigglyAnnotation extends MarkupAnnotation { - constructor(parameters) { - super(parameters); - this.data.annotationType = _util.AnnotationType.SQUIGGLY; - const quadPoints = this.data.quadPoints = getQuadPoints(parameters.dict, null); - - if (quadPoints) { - if (!this.appearance) { - const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; - const strokeAlpha = parameters.dict.get("CA"); - - this._setDefaultAppearance({ - xref: parameters.xref, - extra: "[] 0 d 1 w", - strokeColor, - strokeAlpha, - pointsCallback: (buffer, points) => { - const dy = (points[0].y - points[2].y) / 6; - let shift = dy; - let x = points[2].x; - const y = points[2].y; - const xEnd = points[3].x; - buffer.push(`${x} ${y + shift} m`); - - do { - x += 2; - shift = shift === 0 ? dy : 0; - buffer.push(`${x} ${y + shift} l`); - } while (x < xEnd); - - buffer.push("S"); - return [points[2].x, xEnd, y - 2 * dy, y + 2 * dy]; - } - }); - } - } else { - this.data.hasPopup = false; - } - } - -} - -class StrikeOutAnnotation extends MarkupAnnotation { - constructor(parameters) { - super(parameters); - this.data.annotationType = _util.AnnotationType.STRIKEOUT; - const quadPoints = this.data.quadPoints = getQuadPoints(parameters.dict, null); - - if (quadPoints) { - if (!this.appearance) { - const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; - const strokeAlpha = parameters.dict.get("CA"); - - this._setDefaultAppearance({ - xref: parameters.xref, - extra: "[] 0 d 1 w", - strokeColor, - strokeAlpha, - pointsCallback: (buffer, points) => { - buffer.push(`${(points[0].x + points[2].x) / 2} ` + `${(points[0].y + points[2].y) / 2} m`, `${(points[1].x + points[3].x) / 2} ` + `${(points[1].y + points[3].y) / 2} l`, "S"); - return [points[0].x, points[1].x, points[3].y, points[1].y]; - } - }); - } - } else { - this.data.hasPopup = false; - } - } - -} - -class StampAnnotation extends MarkupAnnotation { - constructor(parameters) { - super(parameters); - this.data.annotationType = _util.AnnotationType.STAMP; - } - -} - -class FileAttachmentAnnotation extends MarkupAnnotation { - constructor(parameters) { - super(parameters); - const file = new _file_spec.FileSpec(parameters.dict.get("FS"), parameters.xref); - this.data.annotationType = _util.AnnotationType.FILEATTACHMENT; - this.data.file = file.serializable; - } - -} - -/***/ }), -/* 23 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.createDefaultAppearance = createDefaultAppearance; -exports.parseDefaultAppearance = parseDefaultAppearance; - -var _util = __w_pdfjs_require__(2); - -var _colorspace = __w_pdfjs_require__(24); - -var _core_utils = __w_pdfjs_require__(9); - -var _evaluator = __w_pdfjs_require__(25); - -var _primitives = __w_pdfjs_require__(5); - -var _stream = __w_pdfjs_require__(10); - -class DefaultAppearanceEvaluator extends _evaluator.EvaluatorPreprocessor { - constructor(str) { - super(new _stream.StringStream(str)); - } - - parse() { - const operation = { - fn: 0, - args: [] - }; - const result = { - fontSize: 0, - fontName: "", - fontColor: new Uint8ClampedArray(3) - }; - - try { - while (true) { - operation.args.length = 0; - - if (!this.read(operation)) { - break; - } - - if (this.savedStatesDepth !== 0) { - continue; - } - - const { - fn, - args - } = operation; - - switch (fn | 0) { - case _util.OPS.setFont: - const [fontName, fontSize] = args; - - if (fontName instanceof _primitives.Name) { - result.fontName = fontName.name; - } - - if (typeof fontSize === "number" && fontSize > 0) { - result.fontSize = fontSize; - } - - break; - - case _util.OPS.setFillRGBColor: - _colorspace.ColorSpace.singletons.rgb.getRgbItem(args, 0, result.fontColor, 0); - - break; - - case _util.OPS.setFillGray: - _colorspace.ColorSpace.singletons.gray.getRgbItem(args, 0, result.fontColor, 0); - - break; - - case _util.OPS.setFillColorSpace: - _colorspace.ColorSpace.singletons.cmyk.getRgbItem(args, 0, result.fontColor, 0); - - break; - } - } - } catch (reason) { - (0, _util.warn)(`parseDefaultAppearance - ignoring errors: "${reason}".`); - } - - return result; - } - -} - -function parseDefaultAppearance(str) { - return new DefaultAppearanceEvaluator(str).parse(); -} - -function createDefaultAppearance({ - fontSize, - fontName, - fontColor -}) { - let colorCmd; - - if (fontColor.every(c => c === 0)) { - colorCmd = "0 g"; - } else { - colorCmd = Array.from(fontColor).map(c => (c / 255).toFixed(2)).join(" ") + " rg"; - } - - return `/${(0, _core_utils.escapePDFName)(fontName)} ${fontSize} Tf ${colorCmd}`; -} - -/***/ }), -/* 24 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.ColorSpace = void 0; - -var _util = __w_pdfjs_require__(2); - -var _primitives = __w_pdfjs_require__(5); - -var _core_utils = __w_pdfjs_require__(9); - -function resizeRgbImage(src, dest, w1, h1, w2, h2, alpha01) { - const COMPONENTS = 3; - alpha01 = alpha01 !== 1 ? 0 : alpha01; - const xRatio = w1 / w2; - const yRatio = h1 / h2; - let newIndex = 0, - oldIndex; - const xScaled = new Uint16Array(w2); - const w1Scanline = w1 * COMPONENTS; - - for (let i = 0; i < w2; i++) { - xScaled[i] = Math.floor(i * xRatio) * COMPONENTS; - } - - for (let i = 0; i < h2; i++) { - const py = Math.floor(i * yRatio) * w1Scanline; - - for (let j = 0; j < w2; j++) { - oldIndex = py + xScaled[j]; - dest[newIndex++] = src[oldIndex++]; - dest[newIndex++] = src[oldIndex++]; - dest[newIndex++] = src[oldIndex++]; - newIndex += alpha01; - } - } -} - -class ColorSpace { - constructor(name, numComps) { - if (this.constructor === ColorSpace) { - (0, _util.unreachable)("Cannot initialize ColorSpace."); - } - - this.name = name; - this.numComps = numComps; - } - - getRgb(src, srcOffset) { - const rgb = new Uint8ClampedArray(3); - this.getRgbItem(src, srcOffset, rgb, 0); - return rgb; - } - - getRgbItem(src, srcOffset, dest, destOffset) { - (0, _util.unreachable)("Should not call ColorSpace.getRgbItem"); - } - - getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - (0, _util.unreachable)("Should not call ColorSpace.getRgbBuffer"); - } - - getOutputLength(inputLength, alpha01) { - (0, _util.unreachable)("Should not call ColorSpace.getOutputLength"); - } - - isPassthrough(bits) { - return false; - } - - isDefaultDecode(decodeMap, bpc) { - return ColorSpace.isDefaultDecode(decodeMap, this.numComps); - } - - fillRgb(dest, originalWidth, originalHeight, width, height, actualHeight, bpc, comps, alpha01) { - const count = originalWidth * originalHeight; - let rgbBuf = null; - const numComponentColors = 1 << bpc; - const needsResizing = originalHeight !== height || originalWidth !== width; - - if (this.isPassthrough(bpc)) { - rgbBuf = comps; - } else if (this.numComps === 1 && count > numComponentColors && this.name !== "DeviceGray" && this.name !== "DeviceRGB") { - const allColors = bpc <= 8 ? new Uint8Array(numComponentColors) : new Uint16Array(numComponentColors); - - for (let i = 0; i < numComponentColors; i++) { - allColors[i] = i; - } - - const colorMap = new Uint8ClampedArray(numComponentColors * 3); - this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bpc, 0); - - if (!needsResizing) { - let destPos = 0; - - for (let i = 0; i < count; ++i) { - const key = comps[i] * 3; - dest[destPos++] = colorMap[key]; - dest[destPos++] = colorMap[key + 1]; - dest[destPos++] = colorMap[key + 2]; - destPos += alpha01; - } - } else { - rgbBuf = new Uint8Array(count * 3); - let rgbPos = 0; - - for (let i = 0; i < count; ++i) { - const key = comps[i] * 3; - rgbBuf[rgbPos++] = colorMap[key]; - rgbBuf[rgbPos++] = colorMap[key + 1]; - rgbBuf[rgbPos++] = colorMap[key + 2]; - } - } - } else { - if (!needsResizing) { - this.getRgbBuffer(comps, 0, width * actualHeight, dest, 0, bpc, alpha01); - } else { - rgbBuf = new Uint8ClampedArray(count * 3); - this.getRgbBuffer(comps, 0, count, rgbBuf, 0, bpc, 0); - } - } - - if (rgbBuf) { - if (needsResizing) { - resizeRgbImage(rgbBuf, dest, originalWidth, originalHeight, width, height, alpha01); - } else { - let destPos = 0, - rgbPos = 0; - - for (let i = 0, ii = width * actualHeight; i < ii; i++) { - dest[destPos++] = rgbBuf[rgbPos++]; - dest[destPos++] = rgbBuf[rgbPos++]; - dest[destPos++] = rgbBuf[rgbPos++]; - destPos += alpha01; - } - } - } - } - - get usesZeroToOneRange() { - return (0, _util.shadow)(this, "usesZeroToOneRange", true); - } - - static _cache(cacheKey, xref, localColorSpaceCache, parsedColorSpace) { - if (!localColorSpaceCache) { - throw new Error('ColorSpace._cache - expected "localColorSpaceCache" argument.'); - } - - if (!parsedColorSpace) { - throw new Error('ColorSpace._cache - expected "parsedColorSpace" argument.'); - } - - let csName, csRef; - - if (cacheKey instanceof _primitives.Ref) { - csRef = cacheKey; - cacheKey = xref.fetch(cacheKey); - } - - if (cacheKey instanceof _primitives.Name) { - csName = cacheKey.name; - } - - if (csName || csRef) { - localColorSpaceCache.set(csName, csRef, parsedColorSpace); - } - } - - static getCached(cacheKey, xref, localColorSpaceCache) { - if (!localColorSpaceCache) { - throw new Error('ColorSpace.getCached - expected "localColorSpaceCache" argument.'); - } - - if (cacheKey instanceof _primitives.Ref) { - const localColorSpace = localColorSpaceCache.getByRef(cacheKey); - - if (localColorSpace) { - return localColorSpace; - } - - try { - cacheKey = xref.fetch(cacheKey); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - } - } - - if (cacheKey instanceof _primitives.Name) { - const localColorSpace = localColorSpaceCache.getByName(cacheKey.name); - - if (localColorSpace) { - return localColorSpace; - } - } - - return null; - } - - static async parseAsync({ - cs, - xref, - resources = null, - pdfFunctionFactory, - localColorSpaceCache - }) { - const parsedColorSpace = this._parse(cs, xref, resources, pdfFunctionFactory); - - this._cache(cs, xref, localColorSpaceCache, parsedColorSpace); - - return parsedColorSpace; - } - - static parse({ - cs, - xref, - resources = null, - pdfFunctionFactory, - localColorSpaceCache - }) { - const cachedColorSpace = this.getCached(cs, xref, localColorSpaceCache); - - if (cachedColorSpace) { - return cachedColorSpace; - } - - const parsedColorSpace = this._parse(cs, xref, resources, pdfFunctionFactory); - - this._cache(cs, xref, localColorSpaceCache, parsedColorSpace); - - return parsedColorSpace; - } - - static _parse(cs, xref, resources = null, pdfFunctionFactory) { - cs = xref.fetchIfRef(cs); - - if ((0, _primitives.isName)(cs)) { - switch (cs.name) { - case "G": - case "DeviceGray": - return this.singletons.gray; - - case "RGB": - case "DeviceRGB": - return this.singletons.rgb; - - case "CMYK": - case "DeviceCMYK": - return this.singletons.cmyk; - - case "Pattern": - return new PatternCS(null); - - default: - if ((0, _primitives.isDict)(resources)) { - const colorSpaces = resources.get("ColorSpace"); - - if ((0, _primitives.isDict)(colorSpaces)) { - const resourcesCS = colorSpaces.get(cs.name); - - if (resourcesCS) { - if ((0, _primitives.isName)(resourcesCS)) { - return this._parse(resourcesCS, xref, resources, pdfFunctionFactory); - } - - cs = resourcesCS; - break; - } - } - } - - throw new _util.FormatError(`Unrecognized ColorSpace: ${cs.name}`); - } - } - - if (Array.isArray(cs)) { - const mode = xref.fetchIfRef(cs[0]).name; - let params, numComps, baseCS, whitePoint, blackPoint, gamma; - - switch (mode) { - case "G": - case "DeviceGray": - return this.singletons.gray; - - case "RGB": - case "DeviceRGB": - return this.singletons.rgb; - - case "CMYK": - case "DeviceCMYK": - return this.singletons.cmyk; - - case "CalGray": - params = xref.fetchIfRef(cs[1]); - whitePoint = params.getArray("WhitePoint"); - blackPoint = params.getArray("BlackPoint"); - gamma = params.get("Gamma"); - return new CalGrayCS(whitePoint, blackPoint, gamma); - - case "CalRGB": - params = xref.fetchIfRef(cs[1]); - whitePoint = params.getArray("WhitePoint"); - blackPoint = params.getArray("BlackPoint"); - gamma = params.getArray("Gamma"); - const matrix = params.getArray("Matrix"); - return new CalRGBCS(whitePoint, blackPoint, gamma, matrix); - - case "ICCBased": - const stream = xref.fetchIfRef(cs[1]); - const dict = stream.dict; - numComps = dict.get("N"); - const alt = dict.get("Alternate"); - - if (alt) { - const altCS = this._parse(alt, xref, resources, pdfFunctionFactory); - - if (altCS.numComps === numComps) { - return altCS; - } - - (0, _util.warn)("ICCBased color space: Ignoring incorrect /Alternate entry."); - } - - if (numComps === 1) { - return this.singletons.gray; - } else if (numComps === 3) { - return this.singletons.rgb; - } else if (numComps === 4) { - return this.singletons.cmyk; - } - - break; - - case "Pattern": - baseCS = cs[1] || null; - - if (baseCS) { - baseCS = this._parse(baseCS, xref, resources, pdfFunctionFactory); - } - - return new PatternCS(baseCS); - - case "I": - case "Indexed": - baseCS = this._parse(cs[1], xref, resources, pdfFunctionFactory); - const hiVal = xref.fetchIfRef(cs[2]) + 1; - const lookup = xref.fetchIfRef(cs[3]); - return new IndexedCS(baseCS, hiVal, lookup); - - case "Separation": - case "DeviceN": - const name = xref.fetchIfRef(cs[1]); - numComps = Array.isArray(name) ? name.length : 1; - baseCS = this._parse(cs[2], xref, resources, pdfFunctionFactory); - const tintFn = pdfFunctionFactory.create(cs[3]); - return new AlternateCS(numComps, baseCS, tintFn); - - case "Lab": - params = xref.fetchIfRef(cs[1]); - whitePoint = params.getArray("WhitePoint"); - blackPoint = params.getArray("BlackPoint"); - const range = params.getArray("Range"); - return new LabCS(whitePoint, blackPoint, range); - - default: - throw new _util.FormatError(`Unimplemented ColorSpace object: ${mode}`); - } - } - - throw new _util.FormatError(`Unrecognized ColorSpace object: ${cs}`); - } - - static isDefaultDecode(decode, numComps) { - if (!Array.isArray(decode)) { - return true; - } - - if (numComps * 2 !== decode.length) { - (0, _util.warn)("The decode map is not the correct length"); - return true; - } - - for (let i = 0, ii = decode.length; i < ii; i += 2) { - if (decode[i] !== 0 || decode[i + 1] !== 1) { - return false; - } - } - - return true; - } - - static get singletons() { - return (0, _util.shadow)(this, "singletons", { - get gray() { - return (0, _util.shadow)(this, "gray", new DeviceGrayCS()); - }, - - get rgb() { - return (0, _util.shadow)(this, "rgb", new DeviceRgbCS()); - }, - - get cmyk() { - return (0, _util.shadow)(this, "cmyk", new DeviceCmykCS()); - } - - }); - } - -} - -exports.ColorSpace = ColorSpace; - -class AlternateCS extends ColorSpace { - constructor(numComps, base, tintFn) { - super("Alternate", numComps); - this.base = base; - this.tintFn = tintFn; - this.tmpBuf = new Float32Array(base.numComps); - } - - getRgbItem(src, srcOffset, dest, destOffset) { - const tmpBuf = this.tmpBuf; - this.tintFn(src, srcOffset, tmpBuf, 0); - this.base.getRgbItem(tmpBuf, 0, dest, destOffset); - } - - getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - const tintFn = this.tintFn; - const base = this.base; - const scale = 1 / ((1 << bits) - 1); - const baseNumComps = base.numComps; - const usesZeroToOneRange = base.usesZeroToOneRange; - const isPassthrough = (base.isPassthrough(8) || !usesZeroToOneRange) && alpha01 === 0; - let pos = isPassthrough ? destOffset : 0; - const baseBuf = isPassthrough ? dest : new Uint8ClampedArray(baseNumComps * count); - const numComps = this.numComps; - const scaled = new Float32Array(numComps); - const tinted = new Float32Array(baseNumComps); - let i, j; - - for (i = 0; i < count; i++) { - for (j = 0; j < numComps; j++) { - scaled[j] = src[srcOffset++] * scale; - } - - tintFn(scaled, 0, tinted, 0); - - if (usesZeroToOneRange) { - for (j = 0; j < baseNumComps; j++) { - baseBuf[pos++] = tinted[j] * 255; - } - } else { - base.getRgbItem(tinted, 0, baseBuf, pos); - pos += baseNumComps; - } - } - - if (!isPassthrough) { - base.getRgbBuffer(baseBuf, 0, count, dest, destOffset, 8, alpha01); - } - } - - getOutputLength(inputLength, alpha01) { - return this.base.getOutputLength(inputLength * this.base.numComps / this.numComps, alpha01); - } - -} - -class PatternCS extends ColorSpace { - constructor(baseCS) { - super("Pattern", null); - this.base = baseCS; - } - - isDefaultDecode(decodeMap, bpc) { - (0, _util.unreachable)("Should not call PatternCS.isDefaultDecode"); - } - -} - -class IndexedCS extends ColorSpace { - constructor(base, highVal, lookup) { - super("Indexed", 1); - this.base = base; - this.highVal = highVal; - const length = base.numComps * highVal; - this.lookup = new Uint8Array(length); - - if ((0, _primitives.isStream)(lookup)) { - const bytes = lookup.getBytes(length); - this.lookup.set(bytes); - } else if (typeof lookup === "string") { - for (let i = 0; i < length; ++i) { - this.lookup[i] = lookup.charCodeAt(i) & 0xff; - } - } else { - throw new _util.FormatError(`IndexedCS - unrecognized lookup table: ${lookup}`); - } - } - - getRgbItem(src, srcOffset, dest, destOffset) { - const numComps = this.base.numComps; - const start = src[srcOffset] * numComps; - this.base.getRgbBuffer(this.lookup, start, 1, dest, destOffset, 8, 0); - } - - getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - const base = this.base; - const numComps = base.numComps; - const outputDelta = base.getOutputLength(numComps, alpha01); - const lookup = this.lookup; - - for (let i = 0; i < count; ++i) { - const lookupPos = src[srcOffset++] * numComps; - base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01); - destOffset += outputDelta; - } - } - - getOutputLength(inputLength, alpha01) { - return this.base.getOutputLength(inputLength * this.base.numComps, alpha01); - } - - isDefaultDecode(decodeMap, bpc) { - if (!Array.isArray(decodeMap)) { - return true; - } - - if (decodeMap.length !== 2) { - (0, _util.warn)("Decode map length is not correct"); - return true; - } - - if (!Number.isInteger(bpc) || bpc < 1) { - (0, _util.warn)("Bits per component is not correct"); - return true; - } - - return decodeMap[0] === 0 && decodeMap[1] === (1 << bpc) - 1; - } - -} - -class DeviceGrayCS extends ColorSpace { - constructor() { - super("DeviceGray", 1); - } - - getRgbItem(src, srcOffset, dest, destOffset) { - const c = src[srcOffset] * 255; - dest[destOffset] = dest[destOffset + 1] = dest[destOffset + 2] = c; - } - - getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - const scale = 255 / ((1 << bits) - 1); - let j = srcOffset, - q = destOffset; - - for (let i = 0; i < count; ++i) { - const c = scale * src[j++]; - dest[q++] = c; - dest[q++] = c; - dest[q++] = c; - q += alpha01; - } - } - - getOutputLength(inputLength, alpha01) { - return inputLength * (3 + alpha01); - } - -} - -class DeviceRgbCS extends ColorSpace { - constructor() { - super("DeviceRGB", 3); - } - - getRgbItem(src, srcOffset, dest, destOffset) { - dest[destOffset] = src[srcOffset] * 255; - dest[destOffset + 1] = src[srcOffset + 1] * 255; - dest[destOffset + 2] = src[srcOffset + 2] * 255; - } - - getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - if (bits === 8 && alpha01 === 0) { - dest.set(src.subarray(srcOffset, srcOffset + count * 3), destOffset); - return; - } - - const scale = 255 / ((1 << bits) - 1); - let j = srcOffset, - q = destOffset; - - for (let i = 0; i < count; ++i) { - dest[q++] = scale * src[j++]; - dest[q++] = scale * src[j++]; - dest[q++] = scale * src[j++]; - q += alpha01; - } - } - - getOutputLength(inputLength, alpha01) { - return inputLength * (3 + alpha01) / 3 | 0; - } - - isPassthrough(bits) { - return bits === 8; - } - -} - -const DeviceCmykCS = function DeviceCmykCSClosure() { - function convertToRgb(src, srcOffset, srcScale, dest, destOffset) { - const c = src[srcOffset] * srcScale; - const m = src[srcOffset + 1] * srcScale; - const y = src[srcOffset + 2] * srcScale; - const k = src[srcOffset + 3] * srcScale; - dest[destOffset] = 255 + c * (-4.387332384609988 * c + 54.48615194189176 * m + 18.82290502165302 * y + 212.25662451639585 * k + -285.2331026137004) + m * (1.7149763477362134 * m - 5.6096736904047315 * y + -17.873870861415444 * k - 5.497006427196366) + y * (-2.5217340131683033 * y - 21.248923337353073 * k + 17.5119270841813) + k * (-21.86122147463605 * k - 189.48180835922747); - dest[destOffset + 1] = 255 + c * (8.841041422036149 * c + 60.118027045597366 * m + 6.871425592049007 * y + 31.159100130055922 * k + -79.2970844816548) + m * (-15.310361306967817 * m + 17.575251261109482 * y + 131.35250912493976 * k - 190.9453302588951) + y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) + k * (-20.737325471181034 * k - 187.80453709719578); - dest[destOffset + 2] = 255 + c * (0.8842522430003296 * c + 8.078677503112928 * m + 30.89978309703729 * y - 0.23883238689178934 * k + -14.183576799673286) + m * (10.49593273432072 * m + 63.02378494754052 * y + 50.606957656360734 * k - 112.23884253719248) + y * (0.03296041114873217 * y + 115.60384449646641 * k + -193.58209356861505) + k * (-22.33816807309886 * k - 180.12613974708367); - } - - class DeviceCmykCS extends ColorSpace { - constructor() { - super("DeviceCMYK", 4); - } - - getRgbItem(src, srcOffset, dest, destOffset) { - convertToRgb(src, srcOffset, 1, dest, destOffset); - } - - getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - const scale = 1 / ((1 << bits) - 1); - - for (let i = 0; i < count; i++) { - convertToRgb(src, srcOffset, scale, dest, destOffset); - srcOffset += 4; - destOffset += 3 + alpha01; - } - } - - getOutputLength(inputLength, alpha01) { - return inputLength / 4 * (3 + alpha01) | 0; - } - - } - - return DeviceCmykCS; -}(); - -const CalGrayCS = function CalGrayCSClosure() { - function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) { - const A = src[srcOffset] * scale; - const AG = A ** cs.G; - const L = cs.YW * AG; - const val = Math.max(295.8 * L ** 0.3333333333333333 - 40.8, 0); - dest[destOffset] = val; - dest[destOffset + 1] = val; - dest[destOffset + 2] = val; - } - - class CalGrayCS extends ColorSpace { - constructor(whitePoint, blackPoint, gamma) { - super("CalGray", 1); - - if (!whitePoint) { - throw new _util.FormatError("WhitePoint missing - required for color space CalGray"); - } - - blackPoint = blackPoint || [0, 0, 0]; - gamma = gamma || 1; - this.XW = whitePoint[0]; - this.YW = whitePoint[1]; - this.ZW = whitePoint[2]; - this.XB = blackPoint[0]; - this.YB = blackPoint[1]; - this.ZB = blackPoint[2]; - this.G = gamma; - - if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) { - throw new _util.FormatError(`Invalid WhitePoint components for ${this.name}` + ", no fallback available"); - } - - if (this.XB < 0 || this.YB < 0 || this.ZB < 0) { - (0, _util.info)(`Invalid BlackPoint for ${this.name}, falling back to default.`); - this.XB = this.YB = this.ZB = 0; - } - - if (this.XB !== 0 || this.YB !== 0 || this.ZB !== 0) { - (0, _util.warn)(`${this.name}, BlackPoint: XB: ${this.XB}, YB: ${this.YB}, ` + `ZB: ${this.ZB}, only default values are supported.`); - } - - if (this.G < 1) { - (0, _util.info)(`Invalid Gamma: ${this.G} for ${this.name}, ` + "falling back to default."); - this.G = 1; - } - } - - getRgbItem(src, srcOffset, dest, destOffset) { - convertToRgb(this, src, srcOffset, dest, destOffset, 1); - } - - getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - const scale = 1 / ((1 << bits) - 1); - - for (let i = 0; i < count; ++i) { - convertToRgb(this, src, srcOffset, dest, destOffset, scale); - srcOffset += 1; - destOffset += 3 + alpha01; - } - } - - getOutputLength(inputLength, alpha01) { - return inputLength * (3 + alpha01); - } - - } - - return CalGrayCS; -}(); - -const CalRGBCS = function CalRGBCSClosure() { - const BRADFORD_SCALE_MATRIX = new Float32Array([0.8951, 0.2664, -0.1614, -0.7502, 1.7135, 0.0367, 0.0389, -0.0685, 1.0296]); - const BRADFORD_SCALE_INVERSE_MATRIX = new Float32Array([0.9869929, -0.1470543, 0.1599627, 0.4323053, 0.5183603, 0.0492912, -0.0085287, 0.0400428, 0.9684867]); - const SRGB_D65_XYZ_TO_RGB_MATRIX = new Float32Array([3.2404542, -1.5371385, -0.4985314, -0.9692660, 1.8760108, 0.0415560, 0.0556434, -0.2040259, 1.0572252]); - const FLAT_WHITEPOINT_MATRIX = new Float32Array([1, 1, 1]); - const tempNormalizeMatrix = new Float32Array(3); - const tempConvertMatrix1 = new Float32Array(3); - const tempConvertMatrix2 = new Float32Array(3); - const DECODE_L_CONSTANT = ((8 + 16) / 116) ** 3 / 8.0; - - function matrixProduct(a, b, result) { - result[0] = a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; - result[1] = a[3] * b[0] + a[4] * b[1] + a[5] * b[2]; - result[2] = a[6] * b[0] + a[7] * b[1] + a[8] * b[2]; - } - - function convertToFlat(sourceWhitePoint, LMS, result) { - result[0] = LMS[0] * 1 / sourceWhitePoint[0]; - result[1] = LMS[1] * 1 / sourceWhitePoint[1]; - result[2] = LMS[2] * 1 / sourceWhitePoint[2]; - } - - function convertToD65(sourceWhitePoint, LMS, result) { - const D65X = 0.95047; - const D65Y = 1; - const D65Z = 1.08883; - result[0] = LMS[0] * D65X / sourceWhitePoint[0]; - result[1] = LMS[1] * D65Y / sourceWhitePoint[1]; - result[2] = LMS[2] * D65Z / sourceWhitePoint[2]; - } - - function sRGBTransferFunction(color) { - if (color <= 0.0031308) { - return adjustToRange(0, 1, 12.92 * color); - } - - if (color >= 0.99554525) { - return 1; - } - - return adjustToRange(0, 1, (1 + 0.055) * color ** (1 / 2.4) - 0.055); - } - - function adjustToRange(min, max, value) { - return Math.max(min, Math.min(max, value)); - } - - function decodeL(L) { - if (L < 0) { - return -decodeL(-L); - } - - if (L > 8.0) { - return ((L + 16) / 116) ** 3; - } - - return L * DECODE_L_CONSTANT; - } - - function compensateBlackPoint(sourceBlackPoint, XYZ_Flat, result) { - if (sourceBlackPoint[0] === 0 && sourceBlackPoint[1] === 0 && sourceBlackPoint[2] === 0) { - result[0] = XYZ_Flat[0]; - result[1] = XYZ_Flat[1]; - result[2] = XYZ_Flat[2]; - return; - } - - const zeroDecodeL = decodeL(0); - const X_DST = zeroDecodeL; - const X_SRC = decodeL(sourceBlackPoint[0]); - const Y_DST = zeroDecodeL; - const Y_SRC = decodeL(sourceBlackPoint[1]); - const Z_DST = zeroDecodeL; - const Z_SRC = decodeL(sourceBlackPoint[2]); - const X_Scale = (1 - X_DST) / (1 - X_SRC); - const X_Offset = 1 - X_Scale; - const Y_Scale = (1 - Y_DST) / (1 - Y_SRC); - const Y_Offset = 1 - Y_Scale; - const Z_Scale = (1 - Z_DST) / (1 - Z_SRC); - const Z_Offset = 1 - Z_Scale; - result[0] = XYZ_Flat[0] * X_Scale + X_Offset; - result[1] = XYZ_Flat[1] * Y_Scale + Y_Offset; - result[2] = XYZ_Flat[2] * Z_Scale + Z_Offset; - } - - function normalizeWhitePointToFlat(sourceWhitePoint, XYZ_In, result) { - if (sourceWhitePoint[0] === 1 && sourceWhitePoint[2] === 1) { - result[0] = XYZ_In[0]; - result[1] = XYZ_In[1]; - result[2] = XYZ_In[2]; - return; - } - - const LMS = result; - matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS); - const LMS_Flat = tempNormalizeMatrix; - convertToFlat(sourceWhitePoint, LMS, LMS_Flat); - matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_Flat, result); - } - - function normalizeWhitePointToD65(sourceWhitePoint, XYZ_In, result) { - const LMS = result; - matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS); - const LMS_D65 = tempNormalizeMatrix; - convertToD65(sourceWhitePoint, LMS, LMS_D65); - matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_D65, result); - } - - function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) { - const A = adjustToRange(0, 1, src[srcOffset] * scale); - const B = adjustToRange(0, 1, src[srcOffset + 1] * scale); - const C = adjustToRange(0, 1, src[srcOffset + 2] * scale); - const AGR = A === 1 ? 1 : A ** cs.GR; - const BGG = B === 1 ? 1 : B ** cs.GG; - const CGB = C === 1 ? 1 : C ** cs.GB; - const X = cs.MXA * AGR + cs.MXB * BGG + cs.MXC * CGB; - const Y = cs.MYA * AGR + cs.MYB * BGG + cs.MYC * CGB; - const Z = cs.MZA * AGR + cs.MZB * BGG + cs.MZC * CGB; - const XYZ = tempConvertMatrix1; - XYZ[0] = X; - XYZ[1] = Y; - XYZ[2] = Z; - const XYZ_Flat = tempConvertMatrix2; - normalizeWhitePointToFlat(cs.whitePoint, XYZ, XYZ_Flat); - const XYZ_Black = tempConvertMatrix1; - compensateBlackPoint(cs.blackPoint, XYZ_Flat, XYZ_Black); - const XYZ_D65 = tempConvertMatrix2; - normalizeWhitePointToD65(FLAT_WHITEPOINT_MATRIX, XYZ_Black, XYZ_D65); - const SRGB = tempConvertMatrix1; - matrixProduct(SRGB_D65_XYZ_TO_RGB_MATRIX, XYZ_D65, SRGB); - dest[destOffset] = sRGBTransferFunction(SRGB[0]) * 255; - dest[destOffset + 1] = sRGBTransferFunction(SRGB[1]) * 255; - dest[destOffset + 2] = sRGBTransferFunction(SRGB[2]) * 255; - } - - class CalRGBCS extends ColorSpace { - constructor(whitePoint, blackPoint, gamma, matrix) { - super("CalRGB", 3); - - if (!whitePoint) { - throw new _util.FormatError("WhitePoint missing - required for color space CalRGB"); - } - - blackPoint = blackPoint || new Float32Array(3); - gamma = gamma || new Float32Array([1, 1, 1]); - matrix = matrix || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]); - const XW = whitePoint[0]; - const YW = whitePoint[1]; - const ZW = whitePoint[2]; - this.whitePoint = whitePoint; - const XB = blackPoint[0]; - const YB = blackPoint[1]; - const ZB = blackPoint[2]; - this.blackPoint = blackPoint; - this.GR = gamma[0]; - this.GG = gamma[1]; - this.GB = gamma[2]; - this.MXA = matrix[0]; - this.MYA = matrix[1]; - this.MZA = matrix[2]; - this.MXB = matrix[3]; - this.MYB = matrix[4]; - this.MZB = matrix[5]; - this.MXC = matrix[6]; - this.MYC = matrix[7]; - this.MZC = matrix[8]; - - if (XW < 0 || ZW < 0 || YW !== 1) { - throw new _util.FormatError(`Invalid WhitePoint components for ${this.name}` + ", no fallback available"); - } - - if (XB < 0 || YB < 0 || ZB < 0) { - (0, _util.info)(`Invalid BlackPoint for ${this.name} [${XB}, ${YB}, ${ZB}], ` + "falling back to default."); - this.blackPoint = new Float32Array(3); - } - - if (this.GR < 0 || this.GG < 0 || this.GB < 0) { - (0, _util.info)(`Invalid Gamma [${this.GR}, ${this.GG}, ${this.GB}] for ` + `${this.name}, falling back to default.`); - this.GR = this.GG = this.GB = 1; - } - } - - getRgbItem(src, srcOffset, dest, destOffset) { - convertToRgb(this, src, srcOffset, dest, destOffset, 1); - } - - getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - const scale = 1 / ((1 << bits) - 1); - - for (let i = 0; i < count; ++i) { - convertToRgb(this, src, srcOffset, dest, destOffset, scale); - srcOffset += 3; - destOffset += 3 + alpha01; - } - } - - getOutputLength(inputLength, alpha01) { - return inputLength * (3 + alpha01) / 3 | 0; - } - - } - - return CalRGBCS; -}(); - -const LabCS = function LabCSClosure() { - function fn_g(x) { - let result; - - if (x >= 6 / 29) { - result = x ** 3; - } else { - result = 108 / 841 * (x - 4 / 29); - } - - return result; - } - - function decode(value, high1, low2, high2) { - return low2 + value * (high2 - low2) / high1; - } - - function convertToRgb(cs, src, srcOffset, maxVal, dest, destOffset) { - let Ls = src[srcOffset]; - let as = src[srcOffset + 1]; - let bs = src[srcOffset + 2]; - - if (maxVal !== false) { - Ls = decode(Ls, maxVal, 0, 100); - as = decode(as, maxVal, cs.amin, cs.amax); - bs = decode(bs, maxVal, cs.bmin, cs.bmax); - } - - if (as > cs.amax) { - as = cs.amax; - } else if (as < cs.amin) { - as = cs.amin; - } - - if (bs > cs.bmax) { - bs = cs.bmax; - } else if (bs < cs.bmin) { - bs = cs.bmin; - } - - const M = (Ls + 16) / 116; - const L = M + as / 500; - const N = M - bs / 200; - const X = cs.XW * fn_g(L); - const Y = cs.YW * fn_g(M); - const Z = cs.ZW * fn_g(N); - let r, g, b; - - if (cs.ZW < 1) { - r = X * 3.1339 + Y * -1.617 + Z * -0.4906; - g = X * -0.9785 + Y * 1.916 + Z * 0.0333; - b = X * 0.072 + Y * -0.229 + Z * 1.4057; - } else { - r = X * 3.2406 + Y * -1.5372 + Z * -0.4986; - g = X * -0.9689 + Y * 1.8758 + Z * 0.0415; - b = X * 0.0557 + Y * -0.204 + Z * 1.057; - } - - dest[destOffset] = Math.sqrt(r) * 255; - dest[destOffset + 1] = Math.sqrt(g) * 255; - dest[destOffset + 2] = Math.sqrt(b) * 255; - } - - class LabCS extends ColorSpace { - constructor(whitePoint, blackPoint, range) { - super("Lab", 3); - - if (!whitePoint) { - throw new _util.FormatError("WhitePoint missing - required for color space Lab"); - } - - blackPoint = blackPoint || [0, 0, 0]; - range = range || [-100, 100, -100, 100]; - this.XW = whitePoint[0]; - this.YW = whitePoint[1]; - this.ZW = whitePoint[2]; - this.amin = range[0]; - this.amax = range[1]; - this.bmin = range[2]; - this.bmax = range[3]; - this.XB = blackPoint[0]; - this.YB = blackPoint[1]; - this.ZB = blackPoint[2]; - - if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) { - throw new _util.FormatError("Invalid WhitePoint components, no fallback available"); - } - - if (this.XB < 0 || this.YB < 0 || this.ZB < 0) { - (0, _util.info)("Invalid BlackPoint, falling back to default"); - this.XB = this.YB = this.ZB = 0; - } - - if (this.amin > this.amax || this.bmin > this.bmax) { - (0, _util.info)("Invalid Range, falling back to defaults"); - this.amin = -100; - this.amax = 100; - this.bmin = -100; - this.bmax = 100; - } - } - - getRgbItem(src, srcOffset, dest, destOffset) { - convertToRgb(this, src, srcOffset, false, dest, destOffset); - } - - getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - const maxVal = (1 << bits) - 1; - - for (let i = 0; i < count; i++) { - convertToRgb(this, src, srcOffset, maxVal, dest, destOffset); - srcOffset += 3; - destOffset += 3 + alpha01; - } - } - - getOutputLength(inputLength, alpha01) { - return inputLength * (3 + alpha01) / 3 | 0; - } - - isDefaultDecode(decodeMap, bpc) { - return true; - } - - get usesZeroToOneRange() { - return (0, _util.shadow)(this, "usesZeroToOneRange", false); - } - - } - - return LabCS; -}(); - -/***/ }), -/* 25 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.PartialEvaluator = exports.EvaluatorPreprocessor = void 0; - -var _util = __w_pdfjs_require__(2); - -var _cmap = __w_pdfjs_require__(26); - -var _primitives = __w_pdfjs_require__(5); - -var _fonts = __w_pdfjs_require__(44); - -var _fonts_utils = __w_pdfjs_require__(18); - -var _encodings = __w_pdfjs_require__(19); - -var _standard_fonts = __w_pdfjs_require__(47); - -var _unicode = __w_pdfjs_require__(21); - -var _pattern = __w_pdfjs_require__(55); - -var _xfa_fonts = __w_pdfjs_require__(12); - -var _to_unicode_map = __w_pdfjs_require__(48); - -var _function = __w_pdfjs_require__(56); - -var _parser = __w_pdfjs_require__(27); - -var _image_utils = __w_pdfjs_require__(58); - -var _stream = __w_pdfjs_require__(10); - -var _base_stream = __w_pdfjs_require__(6); - -var _bidi = __w_pdfjs_require__(59); - -var _colorspace = __w_pdfjs_require__(24); - -var _decode_stream = __w_pdfjs_require__(29); - -var _glyphlist = __w_pdfjs_require__(20); - -var _core_utils = __w_pdfjs_require__(9); - -var _metrics = __w_pdfjs_require__(60); - -var _murmurhash = __w_pdfjs_require__(61); - -var _operator_list = __w_pdfjs_require__(62); - -var _image = __w_pdfjs_require__(63); - -const DefaultPartialEvaluatorOptions = Object.freeze({ - maxImageSize: -1, - disableFontFace: false, - ignoreErrors: false, - isEvalSupported: true, - fontExtraProperties: false, - useSystemFonts: true, - cMapUrl: null, - standardFontDataUrl: null -}); -const PatternType = { - TILING: 1, - SHADING: 2 -}; -const TEXT_CHUNK_BATCH_SIZE = 10; -const deferred = Promise.resolve(); - -function normalizeBlendMode(value, parsingArray = false) { - if (Array.isArray(value)) { - for (let i = 0, ii = value.length; i < ii; i++) { - const maybeBM = normalizeBlendMode(value[i], true); - - if (maybeBM) { - return maybeBM; - } - } - - (0, _util.warn)(`Unsupported blend mode Array: ${value}`); - return "source-over"; - } - - if (!(0, _primitives.isName)(value)) { - if (parsingArray) { - return null; - } - - return "source-over"; - } - - switch (value.name) { - case "Normal": - case "Compatible": - return "source-over"; - - case "Multiply": - return "multiply"; - - case "Screen": - return "screen"; - - case "Overlay": - return "overlay"; - - case "Darken": - return "darken"; - - case "Lighten": - return "lighten"; - - case "ColorDodge": - return "color-dodge"; - - case "ColorBurn": - return "color-burn"; - - case "HardLight": - return "hard-light"; - - case "SoftLight": - return "soft-light"; - - case "Difference": - return "difference"; - - case "Exclusion": - return "exclusion"; - - case "Hue": - return "hue"; - - case "Saturation": - return "saturation"; - - case "Color": - return "color"; - - case "Luminosity": - return "luminosity"; - } - - if (parsingArray) { - return null; - } - - (0, _util.warn)(`Unsupported blend mode: ${value.name}`); - return "source-over"; -} - -class TimeSlotManager { - static get TIME_SLOT_DURATION_MS() { - return (0, _util.shadow)(this, "TIME_SLOT_DURATION_MS", 20); - } - - static get CHECK_TIME_EVERY() { - return (0, _util.shadow)(this, "CHECK_TIME_EVERY", 100); - } - - constructor() { - this.reset(); - } - - check() { - if (++this.checked < TimeSlotManager.CHECK_TIME_EVERY) { - return false; - } - - this.checked = 0; - return this.endTime <= Date.now(); - } - - reset() { - this.endTime = Date.now() + TimeSlotManager.TIME_SLOT_DURATION_MS; - this.checked = 0; - } - -} - -class PartialEvaluator { - constructor({ - xref, - handler, - pageIndex, - idFactory, - fontCache, - builtInCMapCache, - standardFontDataCache, - globalImageCache, - options = null - }) { - this.xref = xref; - this.handler = handler; - this.pageIndex = pageIndex; - this.idFactory = idFactory; - this.fontCache = fontCache; - this.builtInCMapCache = builtInCMapCache; - this.standardFontDataCache = standardFontDataCache; - this.globalImageCache = globalImageCache; - this.options = options || DefaultPartialEvaluatorOptions; - this.parsingType3Font = false; - this._fetchBuiltInCMapBound = this.fetchBuiltInCMap.bind(this); - } - - get _pdfFunctionFactory() { - const pdfFunctionFactory = new _function.PDFFunctionFactory({ - xref: this.xref, - isEvalSupported: this.options.isEvalSupported - }); - return (0, _util.shadow)(this, "_pdfFunctionFactory", pdfFunctionFactory); - } - - clone(newOptions = null) { - const newEvaluator = Object.create(this); - newEvaluator.options = Object.assign(Object.create(null), this.options, newOptions); - return newEvaluator; - } - - hasBlendModes(resources, nonBlendModesSet) { - if (!(resources instanceof _primitives.Dict)) { - return false; - } - - if (resources.objId && nonBlendModesSet.has(resources.objId)) { - return false; - } - - const processed = new _primitives.RefSet(nonBlendModesSet); - - if (resources.objId) { - processed.put(resources.objId); - } - - const nodes = [resources], - xref = this.xref; - - while (nodes.length) { - const node = nodes.shift(); - const graphicStates = node.get("ExtGState"); - - if (graphicStates instanceof _primitives.Dict) { - for (let graphicState of graphicStates.getRawValues()) { - if (graphicState instanceof _primitives.Ref) { - if (processed.has(graphicState)) { - continue; - } - - try { - graphicState = xref.fetch(graphicState); - } catch (ex) { - processed.put(graphicState); - (0, _util.info)(`hasBlendModes - ignoring ExtGState: "${ex}".`); - continue; - } - } - - if (!(graphicState instanceof _primitives.Dict)) { - continue; - } - - if (graphicState.objId) { - processed.put(graphicState.objId); - } - - const bm = graphicState.get("BM"); - - if (bm instanceof _primitives.Name) { - if (bm.name !== "Normal") { - return true; - } - - continue; - } - - if (bm !== undefined && Array.isArray(bm)) { - for (const element of bm) { - if (element instanceof _primitives.Name && element.name !== "Normal") { - return true; - } - } - } - } - } - - const xObjects = node.get("XObject"); - - if (!(xObjects instanceof _primitives.Dict)) { - continue; - } - - for (let xObject of xObjects.getRawValues()) { - if (xObject instanceof _primitives.Ref) { - if (processed.has(xObject)) { - continue; - } - - try { - xObject = xref.fetch(xObject); - } catch (ex) { - processed.put(xObject); - (0, _util.info)(`hasBlendModes - ignoring XObject: "${ex}".`); - continue; - } - } - - if (!(0, _primitives.isStream)(xObject)) { - continue; - } - - if (xObject.dict.objId) { - processed.put(xObject.dict.objId); - } - - const xResources = xObject.dict.get("Resources"); - - if (!(xResources instanceof _primitives.Dict)) { - continue; - } - - if (xResources.objId && processed.has(xResources.objId)) { - continue; - } - - nodes.push(xResources); - - if (xResources.objId) { - processed.put(xResources.objId); - } - } - } - - processed.forEach(ref => { - nonBlendModesSet.put(ref); - }); - return false; - } - - async fetchBuiltInCMap(name) { - const cachedData = this.builtInCMapCache.get(name); - - if (cachedData) { - return cachedData; - } - - let data; - - if (this.options.cMapUrl !== null) { - const url = `${this.options.cMapUrl}${name}.bcmap`; - const response = await fetch(url); - - if (!response.ok) { - throw new Error(`fetchBuiltInCMap: failed to fetch file "${url}" with "${response.statusText}".`); - } - - data = { - cMapData: new Uint8Array(await response.arrayBuffer()), - compressionType: _util.CMapCompressionType.BINARY - }; - } else { - data = await this.handler.sendWithPromise("FetchBuiltInCMap", { - name - }); - } - - if (data.compressionType !== _util.CMapCompressionType.NONE) { - this.builtInCMapCache.set(name, data); - } - - return data; - } - - async fetchStandardFontData(name) { - const cachedData = this.standardFontDataCache.get(name); - - if (cachedData) { - return new _stream.Stream(cachedData); - } - - if (this.options.useSystemFonts && name !== "Symbol" && name !== "ZapfDingbats") { - return null; - } - - const standardFontNameToFileName = (0, _standard_fonts.getFontNameToFileMap)(), - filename = standardFontNameToFileName[name]; - let data; - - if (this.options.standardFontDataUrl !== null) { - const url = `${this.options.standardFontDataUrl}${filename}`; - const response = await fetch(url); - - if (!response.ok) { - (0, _util.warn)(`fetchStandardFontData: failed to fetch file "${url}" with "${response.statusText}".`); - } else { - data = await response.arrayBuffer(); - } - } else { - try { - data = await this.handler.sendWithPromise("FetchStandardFontData", { - filename - }); - } catch (e) { - (0, _util.warn)(`fetchStandardFontData: failed to fetch file "${filename}" with "${e}".`); - } - } - - if (!data) { - return null; - } - - this.standardFontDataCache.set(name, data); - return new _stream.Stream(data); - } - - async buildFormXObject(resources, xobj, smask, operatorList, task, initialState, localColorSpaceCache) { - const dict = xobj.dict; - const matrix = dict.getArray("Matrix"); - let bbox = dict.getArray("BBox"); - - if (Array.isArray(bbox) && bbox.length === 4) { - bbox = _util.Util.normalizeRect(bbox); - } else { - bbox = null; - } - - let optionalContent, groupOptions; - - if (dict.has("OC")) { - optionalContent = await this.parseMarkedContentProps(dict.get("OC"), resources); - } - - if (optionalContent !== undefined) { - operatorList.addOp(_util.OPS.beginMarkedContentProps, ["OC", optionalContent]); - } - - const group = dict.get("Group"); - - if (group) { - groupOptions = { - matrix, - bbox, - smask, - isolated: false, - knockout: false - }; - const groupSubtype = group.get("S"); - let colorSpace = null; - - if ((0, _primitives.isName)(groupSubtype, "Transparency")) { - groupOptions.isolated = group.get("I") || false; - groupOptions.knockout = group.get("K") || false; - - if (group.has("CS")) { - const cs = group.getRaw("CS"); - - const cachedColorSpace = _colorspace.ColorSpace.getCached(cs, this.xref, localColorSpaceCache); - - if (cachedColorSpace) { - colorSpace = cachedColorSpace; - } else { - colorSpace = await this.parseColorSpace({ - cs, - resources, - localColorSpaceCache - }); - } - } - } - - if (smask && smask.backdrop) { - colorSpace = colorSpace || _colorspace.ColorSpace.singletons.rgb; - smask.backdrop = colorSpace.getRgb(smask.backdrop, 0); - } - - operatorList.addOp(_util.OPS.beginGroup, [groupOptions]); - } - - const args = group ? [matrix, null] : [matrix, bbox]; - operatorList.addOp(_util.OPS.paintFormXObjectBegin, args); - return this.getOperatorList({ - stream: xobj, - task, - resources: dict.get("Resources") || resources, - operatorList, - initialState - }).then(function () { - operatorList.addOp(_util.OPS.paintFormXObjectEnd, []); - - if (group) { - operatorList.addOp(_util.OPS.endGroup, [groupOptions]); - } - - if (optionalContent !== undefined) { - operatorList.addOp(_util.OPS.endMarkedContent, []); - } - }); - } - - _sendImgData(objId, imgData, cacheGlobally = false) { - const transfers = imgData ? [imgData.data.buffer] : null; - - if (this.parsingType3Font || cacheGlobally) { - return this.handler.send("commonobj", [objId, "Image", imgData], transfers); - } - - return this.handler.send("obj", [objId, this.pageIndex, "Image", imgData], transfers); - } - - async buildPaintImageXObject({ - resources, - image, - isInline = false, - operatorList, - cacheKey, - localImageCache, - localColorSpaceCache - }) { - const dict = image.dict; - const imageRef = dict.objId; - const w = dict.get("W", "Width"); - const h = dict.get("H", "Height"); - - if (!(w && (0, _util.isNum)(w)) || !(h && (0, _util.isNum)(h))) { - (0, _util.warn)("Image dimensions are missing, or not numbers."); - return; - } - - const maxImageSize = this.options.maxImageSize; - - if (maxImageSize !== -1 && w * h > maxImageSize) { - (0, _util.warn)("Image exceeded maximum allowed size and was removed."); - return; - } - - let optionalContent; - - if (dict.has("OC")) { - optionalContent = await this.parseMarkedContentProps(dict.get("OC"), resources); - } - - if (optionalContent !== undefined) { - operatorList.addOp(_util.OPS.beginMarkedContentProps, ["OC", optionalContent]); - } - - const imageMask = dict.get("IM", "ImageMask") || false; - const interpolate = dict.get("I", "Interpolate"); - let imgData, args; - - if (imageMask) { - const bitStrideLength = w + 7 >> 3; - const imgArray = image.getBytes(bitStrideLength * h, true); - const decode = dict.getArray("D", "Decode"); - imgData = _image.PDFImage.createMask({ - imgArray, - width: w, - height: h, - imageIsFromDecodeStream: image instanceof _decode_stream.DecodeStream, - inverseDecode: !!decode && decode[0] > 0, - interpolate - }); - imgData.cached = !!cacheKey; - args = [imgData]; - operatorList.addOp(_util.OPS.paintImageMaskXObject, args); - - if (cacheKey) { - localImageCache.set(cacheKey, imageRef, { - fn: _util.OPS.paintImageMaskXObject, - args - }); - } - - if (optionalContent !== undefined) { - operatorList.addOp(_util.OPS.endMarkedContent, []); - } - - return; - } - - const softMask = dict.get("SM", "SMask") || false; - const mask = dict.get("Mask") || false; - const SMALL_IMAGE_DIMENSIONS = 200; - - if (isInline && !softMask && !mask && w + h < SMALL_IMAGE_DIMENSIONS) { - const imageObj = new _image.PDFImage({ - xref: this.xref, - res: resources, - image, - isInline, - pdfFunctionFactory: this._pdfFunctionFactory, - localColorSpaceCache - }); - imgData = imageObj.createImageData(true); - operatorList.addOp(_util.OPS.paintInlineImageXObject, [imgData]); - - if (optionalContent !== undefined) { - operatorList.addOp(_util.OPS.endMarkedContent, []); - } - - return; - } - - let objId = `img_${this.idFactory.createObjId()}`, - cacheGlobally = false; - - if (this.parsingType3Font) { - objId = `${this.idFactory.getDocId()}_type3_${objId}`; - } else if (imageRef) { - cacheGlobally = this.globalImageCache.shouldCache(imageRef, this.pageIndex); - - if (cacheGlobally) { - objId = `${this.idFactory.getDocId()}_${objId}`; - } - } - - operatorList.addDependency(objId); - args = [objId, w, h]; - - _image.PDFImage.buildImage({ - xref: this.xref, - res: resources, - image, - isInline, - pdfFunctionFactory: this._pdfFunctionFactory, - localColorSpaceCache - }).then(imageObj => { - imgData = imageObj.createImageData(false); - - if (cacheKey && imageRef && cacheGlobally) { - this.globalImageCache.addByteSize(imageRef, imgData.data.length); - } - - return this._sendImgData(objId, imgData, cacheGlobally); - }).catch(reason => { - (0, _util.warn)(`Unable to decode image "${objId}": "${reason}".`); - return this._sendImgData(objId, null, cacheGlobally); - }); - - operatorList.addOp(_util.OPS.paintImageXObject, args); - - if (cacheKey) { - localImageCache.set(cacheKey, imageRef, { - fn: _util.OPS.paintImageXObject, - args - }); - - if (imageRef) { - (0, _util.assert)(!isInline, "Cannot cache an inline image globally."); - this.globalImageCache.addPageIndex(imageRef, this.pageIndex); - - if (cacheGlobally) { - this.globalImageCache.setData(imageRef, { - objId, - fn: _util.OPS.paintImageXObject, - args, - byteSize: 0 - }); - } - } - } - - if (optionalContent !== undefined) { - operatorList.addOp(_util.OPS.endMarkedContent, []); - } - } - - handleSMask(smask, resources, operatorList, task, stateManager, localColorSpaceCache) { - const smaskContent = smask.get("G"); - const smaskOptions = { - subtype: smask.get("S").name, - backdrop: smask.get("BC") - }; - const transferObj = smask.get("TR"); - - if ((0, _function.isPDFFunction)(transferObj)) { - const transferFn = this._pdfFunctionFactory.create(transferObj); - - const transferMap = new Uint8Array(256); - const tmp = new Float32Array(1); - - for (let i = 0; i < 256; i++) { - tmp[0] = i / 255; - transferFn(tmp, 0, tmp, 0); - transferMap[i] = tmp[0] * 255 | 0; - } - - smaskOptions.transferMap = transferMap; - } - - return this.buildFormXObject(resources, smaskContent, smaskOptions, operatorList, task, stateManager.state.clone(), localColorSpaceCache); - } - - handleTransferFunction(tr) { - let transferArray; - - if (Array.isArray(tr)) { - transferArray = tr; - } else if ((0, _function.isPDFFunction)(tr)) { - transferArray = [tr]; - } else { - return null; - } - - const transferMaps = []; - let numFns = 0, - numEffectfulFns = 0; - - for (const entry of transferArray) { - const transferObj = this.xref.fetchIfRef(entry); - numFns++; - - if ((0, _primitives.isName)(transferObj, "Identity")) { - transferMaps.push(null); - continue; - } else if (!(0, _function.isPDFFunction)(transferObj)) { - return null; - } - - const transferFn = this._pdfFunctionFactory.create(transferObj); - - const transferMap = new Uint8Array(256), - tmp = new Float32Array(1); - - for (let j = 0; j < 256; j++) { - tmp[0] = j / 255; - transferFn(tmp, 0, tmp, 0); - transferMap[j] = tmp[0] * 255 | 0; - } - - transferMaps.push(transferMap); - numEffectfulFns++; - } - - if (!(numFns === 1 || numFns === 4)) { - return null; - } - - if (numEffectfulFns === 0) { - return null; - } - - return transferMaps; - } - - handleTilingType(fn, color, resources, pattern, patternDict, operatorList, task, localTilingPatternCache) { - const tilingOpList = new _operator_list.OperatorList(); - - const patternResources = _primitives.Dict.merge({ - xref: this.xref, - dictArray: [patternDict.get("Resources"), resources] - }); - - return this.getOperatorList({ - stream: pattern, - task, - resources: patternResources, - operatorList: tilingOpList - }).then(function () { - const operatorListIR = tilingOpList.getIR(); - const tilingPatternIR = (0, _pattern.getTilingPatternIR)(operatorListIR, patternDict, color); - operatorList.addDependencies(tilingOpList.dependencies); - operatorList.addOp(fn, tilingPatternIR); - - if (patternDict.objId) { - localTilingPatternCache.set(null, patternDict.objId, { - operatorListIR, - dict: patternDict - }); - } - }).catch(reason => { - if (reason instanceof _util.AbortException) { - return; - } - - if (this.options.ignoreErrors) { - this.handler.send("UnsupportedFeature", { - featureId: _util.UNSUPPORTED_FEATURES.errorTilingPattern - }); - (0, _util.warn)(`handleTilingType - ignoring pattern: "${reason}".`); - return; - } - - throw reason; - }); - } - - handleSetFont(resources, fontArgs, fontRef, operatorList, task, state, fallbackFontDict = null, cssFontInfo = null) { - const fontName = fontArgs && fontArgs[0] instanceof _primitives.Name ? fontArgs[0].name : null; - return this.loadFont(fontName, fontRef, resources, fallbackFontDict, cssFontInfo).then(translated => { - if (!translated.font.isType3Font) { - return translated; - } - - return translated.loadType3Data(this, resources, task).then(function () { - operatorList.addDependencies(translated.type3Dependencies); - return translated; - }).catch(reason => { - this.handler.send("UnsupportedFeature", { - featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadType3 - }); - return new TranslatedFont({ - loadedName: "g_font_error", - font: new _fonts.ErrorFont(`Type3 font load error: ${reason}`), - dict: translated.font, - evaluatorOptions: this.options - }); - }); - }).then(translated => { - state.font = translated.font; - translated.send(this.handler); - return translated.loadedName; - }); - } - - handleText(chars, state) { - const font = state.font; - const glyphs = font.charsToGlyphs(chars); - - if (font.data) { - const isAddToPathSet = !!(state.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG); - - if (isAddToPathSet || state.fillColorSpace.name === "Pattern" || font.disableFontFace || this.options.disableFontFace) { - PartialEvaluator.buildFontPaths(font, glyphs, this.handler, this.options); - } - } - - return glyphs; - } - - ensureStateFont(state) { - if (state.font) { - return; - } - - const reason = new _util.FormatError("Missing setFont (Tf) operator before text rendering operator."); - - if (this.options.ignoreErrors) { - this.handler.send("UnsupportedFeature", { - featureId: _util.UNSUPPORTED_FEATURES.errorFontState - }); - (0, _util.warn)(`ensureStateFont: "${reason}".`); - return; - } - - throw reason; - } - - async setGState({ - resources, - gState, - operatorList, - cacheKey, - task, - stateManager, - localGStateCache, - localColorSpaceCache - }) { - const gStateRef = gState.objId; - let isSimpleGState = true; - const gStateObj = []; - const gStateKeys = gState.getKeys(); - let promise = Promise.resolve(); - - for (let i = 0, ii = gStateKeys.length; i < ii; i++) { - const key = gStateKeys[i]; - const value = gState.get(key); - - switch (key) { - case "Type": - break; - - case "LW": - case "LC": - case "LJ": - case "ML": - case "D": - case "RI": - case "FL": - case "CA": - case "ca": - gStateObj.push([key, value]); - break; - - case "Font": - isSimpleGState = false; - promise = promise.then(() => { - return this.handleSetFont(resources, null, value[0], operatorList, task, stateManager.state).then(function (loadedName) { - operatorList.addDependency(loadedName); - gStateObj.push([key, [loadedName, value[1]]]); - }); - }); - break; - - case "BM": - gStateObj.push([key, normalizeBlendMode(value)]); - break; - - case "SMask": - if ((0, _primitives.isName)(value, "None")) { - gStateObj.push([key, false]); - break; - } - - if ((0, _primitives.isDict)(value)) { - isSimpleGState = false; - promise = promise.then(() => { - return this.handleSMask(value, resources, operatorList, task, stateManager, localColorSpaceCache); - }); - gStateObj.push([key, true]); - } else { - (0, _util.warn)("Unsupported SMask type"); - } - - break; - - case "TR": - const transferMaps = this.handleTransferFunction(value); - gStateObj.push([key, transferMaps]); - break; - - case "OP": - case "op": - case "OPM": - case "BG": - case "BG2": - case "UCR": - case "UCR2": - case "TR2": - case "HT": - case "SM": - case "SA": - case "AIS": - case "TK": - (0, _util.info)("graphic state operator " + key); - break; - - default: - (0, _util.info)("Unknown graphic state operator " + key); - break; - } - } - - return promise.then(function () { - if (gStateObj.length > 0) { - operatorList.addOp(_util.OPS.setGState, [gStateObj]); - } - - if (isSimpleGState) { - localGStateCache.set(cacheKey, gStateRef, gStateObj); - } - }); - } - - loadFont(fontName, font, resources, fallbackFontDict = null, cssFontInfo = null) { - const errorFont = async () => { - return new TranslatedFont({ - loadedName: "g_font_error", - font: new _fonts.ErrorFont(`Font "${fontName}" is not available.`), - dict: font, - evaluatorOptions: this.options - }); - }; - - const xref = this.xref; - let fontRef; - - if (font) { - if (!(0, _primitives.isRef)(font)) { - throw new _util.FormatError('The "font" object should be a reference.'); - } - - fontRef = font; - } else { - const fontRes = resources.get("Font"); - - if (fontRes) { - fontRef = fontRes.getRaw(fontName); - } - } - - if (!fontRef) { - const partialMsg = `Font "${fontName || font && font.toString()}" is not available`; - - if (!this.options.ignoreErrors && !this.parsingType3Font) { - (0, _util.warn)(`${partialMsg}.`); - return errorFont(); - } - - this.handler.send("UnsupportedFeature", { - featureId: _util.UNSUPPORTED_FEATURES.errorFontMissing - }); - (0, _util.warn)(`${partialMsg} -- attempting to fallback to a default font.`); - - if (fallbackFontDict) { - fontRef = fallbackFontDict; - } else { - fontRef = PartialEvaluator.fallbackFontDict; - } - } - - if (this.fontCache.has(fontRef)) { - return this.fontCache.get(fontRef); - } - - font = xref.fetchIfRef(fontRef); - - if (!(0, _primitives.isDict)(font)) { - return errorFont(); - } - - if (font.cacheKey && this.fontCache.has(font.cacheKey)) { - return this.fontCache.get(font.cacheKey); - } - - const fontCapability = (0, _util.createPromiseCapability)(); - let preEvaluatedFont; - - try { - preEvaluatedFont = this.preEvaluateFont(font); - preEvaluatedFont.cssFontInfo = cssFontInfo; - } catch (reason) { - (0, _util.warn)(`loadFont - preEvaluateFont failed: "${reason}".`); - return errorFont(); - } - - const { - descriptor, - hash - } = preEvaluatedFont; - const fontRefIsRef = (0, _primitives.isRef)(fontRef); - let fontID; - - if (fontRefIsRef) { - fontID = `f${fontRef.toString()}`; - } - - if (hash && (0, _primitives.isDict)(descriptor)) { - if (!descriptor.fontAliases) { - descriptor.fontAliases = Object.create(null); - } - - const fontAliases = descriptor.fontAliases; - - if (fontAliases[hash]) { - const aliasFontRef = fontAliases[hash].aliasRef; - - if (fontRefIsRef && aliasFontRef && this.fontCache.has(aliasFontRef)) { - this.fontCache.putAlias(fontRef, aliasFontRef); - return this.fontCache.get(fontRef); - } - } else { - fontAliases[hash] = { - fontID: this.idFactory.createFontId() - }; - } - - if (fontRefIsRef) { - fontAliases[hash].aliasRef = fontRef; - } - - fontID = fontAliases[hash].fontID; - } - - if (fontRefIsRef) { - this.fontCache.put(fontRef, fontCapability.promise); - } else { - if (!fontID) { - fontID = this.idFactory.createFontId(); - } - - font.cacheKey = `cacheKey_${fontID}`; - this.fontCache.put(font.cacheKey, fontCapability.promise); - } - - (0, _util.assert)(fontID && fontID.startsWith("f"), 'The "fontID" must be (correctly) defined.'); - font.loadedName = `${this.idFactory.getDocId()}_${fontID}`; - this.translateFont(preEvaluatedFont).then(translatedFont => { - if (translatedFont.fontType !== undefined) { - xref.stats.addFontType(translatedFont.fontType); - } - - fontCapability.resolve(new TranslatedFont({ - loadedName: font.loadedName, - font: translatedFont, - dict: font, - evaluatorOptions: this.options - })); - }).catch(reason => { - this.handler.send("UnsupportedFeature", { - featureId: _util.UNSUPPORTED_FEATURES.errorFontTranslate - }); - (0, _util.warn)(`loadFont - translateFont failed: "${reason}".`); - - try { - const fontFile3 = descriptor && descriptor.get("FontFile3"); - const subtype = fontFile3 && fontFile3.get("Subtype"); - const fontType = (0, _fonts_utils.getFontType)(preEvaluatedFont.type, subtype && subtype.name); - - if (fontType !== undefined) { - xref.stats.addFontType(fontType); - } - } catch (ex) {} - - fontCapability.resolve(new TranslatedFont({ - loadedName: font.loadedName, - font: new _fonts.ErrorFont(reason instanceof Error ? reason.message : reason), - dict: font, - evaluatorOptions: this.options - })); - }); - return fontCapability.promise; - } - - buildPath(operatorList, fn, args, parsingText = false) { - const lastIndex = operatorList.length - 1; - - if (!args) { - args = []; - } - - if (lastIndex < 0 || operatorList.fnArray[lastIndex] !== _util.OPS.constructPath) { - if (parsingText) { - (0, _util.warn)(`Encountered path operator "${fn}" inside of a text object.`); - operatorList.addOp(_util.OPS.save, null); - } - - operatorList.addOp(_util.OPS.constructPath, [[fn], args]); - - if (parsingText) { - operatorList.addOp(_util.OPS.restore, null); - } - } else { - const opArgs = operatorList.argsArray[lastIndex]; - opArgs[0].push(fn); - Array.prototype.push.apply(opArgs[1], args); - } - } - - parseColorSpace({ - cs, - resources, - localColorSpaceCache - }) { - return _colorspace.ColorSpace.parseAsync({ - cs, - xref: this.xref, - resources, - pdfFunctionFactory: this._pdfFunctionFactory, - localColorSpaceCache - }).catch(reason => { - if (reason instanceof _util.AbortException) { - return null; - } - - if (this.options.ignoreErrors) { - this.handler.send("UnsupportedFeature", { - featureId: _util.UNSUPPORTED_FEATURES.errorColorSpace - }); - (0, _util.warn)(`parseColorSpace - ignoring ColorSpace: "${reason}".`); - return null; - } - - throw reason; - }); - } - - parseShading({ - shading, - resources, - localColorSpaceCache, - localShadingPatternCache - }) { - let id = localShadingPatternCache.get(shading); - - if (!id) { - var shadingFill = _pattern.Pattern.parseShading(shading, this.xref, resources, this.handler, this._pdfFunctionFactory, localColorSpaceCache); - - const patternIR = shadingFill.getIR(); - id = `pattern_${this.idFactory.createObjId()}`; - localShadingPatternCache.set(shading, id); - this.handler.send("obj", [id, this.pageIndex, "Pattern", patternIR]); - } - - return id; - } - - handleColorN(operatorList, fn, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache, localShadingPatternCache) { - const patternName = args.pop(); - - if (patternName instanceof _primitives.Name) { - const rawPattern = patterns.getRaw(patternName.name); - const localTilingPattern = rawPattern instanceof _primitives.Ref && localTilingPatternCache.getByRef(rawPattern); - - if (localTilingPattern) { - try { - const color = cs.base ? cs.base.getRgb(args, 0) : null; - const tilingPatternIR = (0, _pattern.getTilingPatternIR)(localTilingPattern.operatorListIR, localTilingPattern.dict, color); - operatorList.addOp(fn, tilingPatternIR); - return undefined; - } catch (ex) {} - } - - const pattern = this.xref.fetchIfRef(rawPattern); - - if (pattern) { - const dict = (0, _primitives.isStream)(pattern) ? pattern.dict : pattern; - const typeNum = dict.get("PatternType"); - - if (typeNum === PatternType.TILING) { - const color = cs.base ? cs.base.getRgb(args, 0) : null; - return this.handleTilingType(fn, color, resources, pattern, dict, operatorList, task, localTilingPatternCache); - } else if (typeNum === PatternType.SHADING) { - const shading = dict.get("Shading"); - const matrix = dict.getArray("Matrix"); - const objId = this.parseShading({ - shading, - resources, - localColorSpaceCache, - localShadingPatternCache - }); - operatorList.addOp(fn, ["Shading", objId, matrix]); - return undefined; - } - - throw new _util.FormatError(`Unknown PatternType: ${typeNum}`); - } - } - - throw new _util.FormatError(`Unknown PatternName: ${patternName}`); - } - - _parseVisibilityExpression(array, nestingCounter, currentResult) { - const MAX_NESTING = 10; - - if (++nestingCounter > MAX_NESTING) { - (0, _util.warn)("Visibility expression is too deeply nested"); - return; - } - - const length = array.length; - const operator = this.xref.fetchIfRef(array[0]); - - if (length < 2 || !(0, _primitives.isName)(operator)) { - (0, _util.warn)("Invalid visibility expression"); - return; - } - - switch (operator.name) { - case "And": - case "Or": - case "Not": - currentResult.push(operator.name); - break; - - default: - (0, _util.warn)(`Invalid operator ${operator.name} in visibility expression`); - return; - } - - for (let i = 1; i < length; i++) { - const raw = array[i]; - const object = this.xref.fetchIfRef(raw); - - if (Array.isArray(object)) { - const nestedResult = []; - currentResult.push(nestedResult); - - this._parseVisibilityExpression(object, nestingCounter, nestedResult); - } else if ((0, _primitives.isRef)(raw)) { - currentResult.push(raw.toString()); - } - } - } - - async parseMarkedContentProps(contentProperties, resources) { - let optionalContent; - - if ((0, _primitives.isName)(contentProperties)) { - const properties = resources.get("Properties"); - optionalContent = properties.get(contentProperties.name); - } else if ((0, _primitives.isDict)(contentProperties)) { - optionalContent = contentProperties; - } else { - throw new _util.FormatError("Optional content properties malformed."); - } - - const optionalContentType = optionalContent.get("Type").name; - - if (optionalContentType === "OCG") { - return { - type: optionalContentType, - id: optionalContent.objId - }; - } else if (optionalContentType === "OCMD") { - const expression = optionalContent.get("VE"); - - if (Array.isArray(expression)) { - const result = []; - - this._parseVisibilityExpression(expression, 0, result); - - if (result.length > 0) { - return { - type: "OCMD", - expression: result - }; - } - } - - const optionalContentGroups = optionalContent.get("OCGs"); - - if (Array.isArray(optionalContentGroups) || (0, _primitives.isDict)(optionalContentGroups)) { - const groupIds = []; - - if (Array.isArray(optionalContentGroups)) { - for (const ocg of optionalContentGroups) { - groupIds.push(ocg.toString()); - } - } else { - groupIds.push(optionalContentGroups.objId); - } - - return { - type: optionalContentType, - ids: groupIds, - policy: (0, _primitives.isName)(optionalContent.get("P")) ? optionalContent.get("P").name : null, - expression: null - }; - } else if ((0, _primitives.isRef)(optionalContentGroups)) { - return { - type: optionalContentType, - id: optionalContentGroups.toString() - }; - } - } - - return null; - } - - getOperatorList({ - stream, - task, - resources, - operatorList, - initialState = null, - fallbackFontDict = null - }) { - resources = resources || _primitives.Dict.empty; - initialState = initialState || new EvalState(); - - if (!operatorList) { - throw new Error('getOperatorList: missing "operatorList" parameter'); - } - - const self = this; - const xref = this.xref; - let parsingText = false; - const localImageCache = new _image_utils.LocalImageCache(); - const localColorSpaceCache = new _image_utils.LocalColorSpaceCache(); - const localGStateCache = new _image_utils.LocalGStateCache(); - const localTilingPatternCache = new _image_utils.LocalTilingPatternCache(); - const localShadingPatternCache = new Map(); - - const xobjs = resources.get("XObject") || _primitives.Dict.empty; - - const patterns = resources.get("Pattern") || _primitives.Dict.empty; - - const stateManager = new StateManager(initialState); - const preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager); - const timeSlotManager = new TimeSlotManager(); - - function closePendingRestoreOPS(argument) { - for (let i = 0, ii = preprocessor.savedStatesDepth; i < ii; i++) { - operatorList.addOp(_util.OPS.restore, []); - } - } - - return new Promise(function promiseBody(resolve, reject) { - const next = function (promise) { - Promise.all([promise, operatorList.ready]).then(function () { - try { - promiseBody(resolve, reject); - } catch (ex) { - reject(ex); - } - }, reject); - }; - - task.ensureNotTerminated(); - timeSlotManager.reset(); - const operation = {}; - let stop, i, ii, cs, name, isValidName; - - while (!(stop = timeSlotManager.check())) { - operation.args = null; - - if (!preprocessor.read(operation)) { - break; - } - - let args = operation.args; - let fn = operation.fn; - - switch (fn | 0) { - case _util.OPS.paintXObject: - isValidName = args[0] instanceof _primitives.Name; - name = args[0].name; - - if (isValidName) { - const localImage = localImageCache.getByName(name); - - if (localImage) { - operatorList.addOp(localImage.fn, localImage.args); - args = null; - continue; - } - } - - next(new Promise(function (resolveXObject, rejectXObject) { - if (!isValidName) { - throw new _util.FormatError("XObject must be referred to by name."); - } - - let xobj = xobjs.getRaw(name); - - if (xobj instanceof _primitives.Ref) { - const localImage = localImageCache.getByRef(xobj); - - if (localImage) { - operatorList.addOp(localImage.fn, localImage.args); - resolveXObject(); - return; - } - - const globalImage = self.globalImageCache.getData(xobj, self.pageIndex); - - if (globalImage) { - operatorList.addDependency(globalImage.objId); - operatorList.addOp(globalImage.fn, globalImage.args); - resolveXObject(); - return; - } - - xobj = xref.fetch(xobj); - } - - if (!(0, _primitives.isStream)(xobj)) { - throw new _util.FormatError("XObject should be a stream"); - } - - const type = xobj.dict.get("Subtype"); - - if (!(0, _primitives.isName)(type)) { - throw new _util.FormatError("XObject should have a Name subtype"); - } - - if (type.name === "Form") { - stateManager.save(); - self.buildFormXObject(resources, xobj, null, operatorList, task, stateManager.state.clone(), localColorSpaceCache).then(function () { - stateManager.restore(); - resolveXObject(); - }, rejectXObject); - return; - } else if (type.name === "Image") { - self.buildPaintImageXObject({ - resources, - image: xobj, - operatorList, - cacheKey: name, - localImageCache, - localColorSpaceCache - }).then(resolveXObject, rejectXObject); - return; - } else if (type.name === "PS") { - (0, _util.info)("Ignored XObject subtype PS"); - } else { - throw new _util.FormatError(`Unhandled XObject subtype ${type.name}`); - } - - resolveXObject(); - }).catch(function (reason) { - if (reason instanceof _util.AbortException) { - return; - } - - if (self.options.ignoreErrors) { - self.handler.send("UnsupportedFeature", { - featureId: _util.UNSUPPORTED_FEATURES.errorXObject - }); - (0, _util.warn)(`getOperatorList - ignoring XObject: "${reason}".`); - return; - } - - throw reason; - })); - return; - - case _util.OPS.setFont: - var fontSize = args[1]; - next(self.handleSetFont(resources, args, null, operatorList, task, stateManager.state, fallbackFontDict).then(function (loadedName) { - operatorList.addDependency(loadedName); - operatorList.addOp(_util.OPS.setFont, [loadedName, fontSize]); - })); - return; - - case _util.OPS.beginText: - parsingText = true; - break; - - case _util.OPS.endText: - parsingText = false; - break; - - case _util.OPS.endInlineImage: - var cacheKey = args[0].cacheKey; - - if (cacheKey) { - const localImage = localImageCache.getByName(cacheKey); - - if (localImage) { - operatorList.addOp(localImage.fn, localImage.args); - args = null; - continue; - } - } - - next(self.buildPaintImageXObject({ - resources, - image: args[0], - isInline: true, - operatorList, - cacheKey, - localImageCache, - localColorSpaceCache - })); - return; - - case _util.OPS.showText: - if (!stateManager.state.font) { - self.ensureStateFont(stateManager.state); - continue; - } - - args[0] = self.handleText(args[0], stateManager.state); - break; - - case _util.OPS.showSpacedText: - if (!stateManager.state.font) { - self.ensureStateFont(stateManager.state); - continue; - } - - var arr = args[0]; - var combinedGlyphs = []; - var arrLength = arr.length; - var state = stateManager.state; - - for (i = 0; i < arrLength; ++i) { - const arrItem = arr[i]; - - if ((0, _util.isString)(arrItem)) { - Array.prototype.push.apply(combinedGlyphs, self.handleText(arrItem, state)); - } else if ((0, _util.isNum)(arrItem)) { - combinedGlyphs.push(arrItem); - } - } - - args[0] = combinedGlyphs; - fn = _util.OPS.showText; - break; - - case _util.OPS.nextLineShowText: - if (!stateManager.state.font) { - self.ensureStateFont(stateManager.state); - continue; - } - - operatorList.addOp(_util.OPS.nextLine); - args[0] = self.handleText(args[0], stateManager.state); - fn = _util.OPS.showText; - break; - - case _util.OPS.nextLineSetSpacingShowText: - if (!stateManager.state.font) { - self.ensureStateFont(stateManager.state); - continue; - } - - operatorList.addOp(_util.OPS.nextLine); - operatorList.addOp(_util.OPS.setWordSpacing, [args.shift()]); - operatorList.addOp(_util.OPS.setCharSpacing, [args.shift()]); - args[0] = self.handleText(args[0], stateManager.state); - fn = _util.OPS.showText; - break; - - case _util.OPS.setTextRenderingMode: - stateManager.state.textRenderingMode = args[0]; - break; - - case _util.OPS.setFillColorSpace: - { - const cachedColorSpace = _colorspace.ColorSpace.getCached(args[0], xref, localColorSpaceCache); - - if (cachedColorSpace) { - stateManager.state.fillColorSpace = cachedColorSpace; - continue; - } - - next(self.parseColorSpace({ - cs: args[0], - resources, - localColorSpaceCache - }).then(function (colorSpace) { - if (colorSpace) { - stateManager.state.fillColorSpace = colorSpace; - } - })); - return; - } - - case _util.OPS.setStrokeColorSpace: - { - const cachedColorSpace = _colorspace.ColorSpace.getCached(args[0], xref, localColorSpaceCache); - - if (cachedColorSpace) { - stateManager.state.strokeColorSpace = cachedColorSpace; - continue; - } - - next(self.parseColorSpace({ - cs: args[0], - resources, - localColorSpaceCache - }).then(function (colorSpace) { - if (colorSpace) { - stateManager.state.strokeColorSpace = colorSpace; - } - })); - return; - } - - case _util.OPS.setFillColor: - cs = stateManager.state.fillColorSpace; - args = cs.getRgb(args, 0); - fn = _util.OPS.setFillRGBColor; - break; - - case _util.OPS.setStrokeColor: - cs = stateManager.state.strokeColorSpace; - args = cs.getRgb(args, 0); - fn = _util.OPS.setStrokeRGBColor; - break; - - case _util.OPS.setFillGray: - stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.gray; - args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0); - fn = _util.OPS.setFillRGBColor; - break; - - case _util.OPS.setStrokeGray: - stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.gray; - args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0); - fn = _util.OPS.setStrokeRGBColor; - break; - - case _util.OPS.setFillCMYKColor: - stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.cmyk; - args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0); - fn = _util.OPS.setFillRGBColor; - break; - - case _util.OPS.setStrokeCMYKColor: - stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.cmyk; - args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0); - fn = _util.OPS.setStrokeRGBColor; - break; - - case _util.OPS.setFillRGBColor: - stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.rgb; - args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0); - break; - - case _util.OPS.setStrokeRGBColor: - stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.rgb; - args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0); - break; - - case _util.OPS.setFillColorN: - cs = stateManager.state.fillColorSpace; - - if (cs.name === "Pattern") { - next(self.handleColorN(operatorList, _util.OPS.setFillColorN, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache, localShadingPatternCache)); - return; - } - - args = cs.getRgb(args, 0); - fn = _util.OPS.setFillRGBColor; - break; - - case _util.OPS.setStrokeColorN: - cs = stateManager.state.strokeColorSpace; - - if (cs.name === "Pattern") { - next(self.handleColorN(operatorList, _util.OPS.setStrokeColorN, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache, localShadingPatternCache)); - return; - } - - args = cs.getRgb(args, 0); - fn = _util.OPS.setStrokeRGBColor; - break; - - case _util.OPS.shadingFill: - var shadingRes = resources.get("Shading"); - - if (!shadingRes) { - throw new _util.FormatError("No shading resource found"); - } - - var shading = shadingRes.get(args[0].name); - - if (!shading) { - throw new _util.FormatError("No shading object found"); - } - - const patternId = self.parseShading({ - shading, - resources, - localColorSpaceCache, - localShadingPatternCache - }); - args = [patternId]; - fn = _util.OPS.shadingFill; - break; - - case _util.OPS.setGState: - isValidName = args[0] instanceof _primitives.Name; - name = args[0].name; - - if (isValidName) { - const localGStateObj = localGStateCache.getByName(name); - - if (localGStateObj) { - if (localGStateObj.length > 0) { - operatorList.addOp(_util.OPS.setGState, [localGStateObj]); - } - - args = null; - continue; - } - } - - next(new Promise(function (resolveGState, rejectGState) { - if (!isValidName) { - throw new _util.FormatError("GState must be referred to by name."); - } - - const extGState = resources.get("ExtGState"); - - if (!(extGState instanceof _primitives.Dict)) { - throw new _util.FormatError("ExtGState should be a dictionary."); - } - - const gState = extGState.get(name); - - if (!(gState instanceof _primitives.Dict)) { - throw new _util.FormatError("GState should be a dictionary."); - } - - self.setGState({ - resources, - gState, - operatorList, - cacheKey: name, - task, - stateManager, - localGStateCache, - localColorSpaceCache - }).then(resolveGState, rejectGState); - }).catch(function (reason) { - if (reason instanceof _util.AbortException) { - return; - } - - if (self.options.ignoreErrors) { - self.handler.send("UnsupportedFeature", { - featureId: _util.UNSUPPORTED_FEATURES.errorExtGState - }); - (0, _util.warn)(`getOperatorList - ignoring ExtGState: "${reason}".`); - return; - } - - throw reason; - })); - return; - - case _util.OPS.moveTo: - case _util.OPS.lineTo: - case _util.OPS.curveTo: - case _util.OPS.curveTo2: - case _util.OPS.curveTo3: - case _util.OPS.closePath: - case _util.OPS.rectangle: - self.buildPath(operatorList, fn, args, parsingText); - continue; - - case _util.OPS.markPoint: - case _util.OPS.markPointProps: - case _util.OPS.beginCompat: - case _util.OPS.endCompat: - continue; - - case _util.OPS.beginMarkedContentProps: - if (!(0, _primitives.isName)(args[0])) { - (0, _util.warn)(`Expected name for beginMarkedContentProps arg0=${args[0]}`); - continue; - } - - if (args[0].name === "OC") { - next(self.parseMarkedContentProps(args[1], resources).then(data => { - operatorList.addOp(_util.OPS.beginMarkedContentProps, ["OC", data]); - }).catch(reason => { - if (reason instanceof _util.AbortException) { - return; - } - - if (self.options.ignoreErrors) { - self.handler.send("UnsupportedFeature", { - featureId: _util.UNSUPPORTED_FEATURES.errorMarkedContent - }); - (0, _util.warn)(`getOperatorList - ignoring beginMarkedContentProps: "${reason}".`); - return; - } - - throw reason; - })); - return; - } - - args = [args[0].name, args[1] instanceof _primitives.Dict ? args[1].get("MCID") : null]; - break; - - case _util.OPS.beginMarkedContent: - case _util.OPS.endMarkedContent: - default: - if (args !== null) { - for (i = 0, ii = args.length; i < ii; i++) { - if (args[i] instanceof _primitives.Dict) { - break; - } - } - - if (i < ii) { - (0, _util.warn)("getOperatorList - ignoring operator: " + fn); - continue; - } - } - - } - - operatorList.addOp(fn, args); - } - - if (stop) { - next(deferred); - return; - } - - closePendingRestoreOPS(); - resolve(); - }).catch(reason => { - if (reason instanceof _util.AbortException) { - return; - } - - if (this.options.ignoreErrors) { - this.handler.send("UnsupportedFeature", { - featureId: _util.UNSUPPORTED_FEATURES.errorOperatorList - }); - (0, _util.warn)(`getOperatorList - ignoring errors during "${task.name}" ` + `task: "${reason}".`); - closePendingRestoreOPS(); - return; - } - - throw reason; - }); - } - - getTextContent({ - stream, - task, - resources, - stateManager = null, - normalizeWhitespace = false, - combineTextItems = false, - includeMarkedContent = false, - sink, - seenStyles = new Set() - }) { - resources = resources || _primitives.Dict.empty; - stateManager = stateManager || new StateManager(new TextState()); - const WhitespaceRegexp = /\s/g; - const DiacriticRegExp = new RegExp("^\\p{Mn}$", "u"); - const NormalizedUnicodes = (0, _unicode.getNormalizedUnicodes)(); - const textContent = { - items: [], - styles: Object.create(null) - }; - const textContentItem = { - initialized: false, - str: [], - totalWidth: 0, - totalHeight: 0, - width: 0, - height: 0, - vertical: false, - prevTransform: null, - textAdvanceScale: 0, - spaceInFlowMin: 0, - spaceInFlowMax: 0, - trackingSpaceMin: Infinity, - negativeSpaceMax: -Infinity, - transform: null, - fontName: null, - hasEOL: false - }; - const TRACKING_SPACE_FACTOR = 0.1; - const NEGATIVE_SPACE_FACTOR = -0.2; - const SPACE_IN_FLOW_MIN_FACTOR = 0.1; - const SPACE_IN_FLOW_MAX_FACTOR = 0.6; - const self = this; - const xref = this.xref; - const showSpacedTextBuffer = []; - let xobjs = null; - const emptyXObjectCache = new _image_utils.LocalImageCache(); - const emptyGStateCache = new _image_utils.LocalGStateCache(); - const preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager); - let textState; - - function getCurrentTextTransform() { - const font = textState.font; - const tsm = [textState.fontSize * textState.textHScale, 0, 0, textState.fontSize, 0, textState.textRise]; - - if (font.isType3Font && (textState.fontSize <= 1 || font.isCharBBox) && !(0, _util.isArrayEqual)(textState.fontMatrix, _util.FONT_IDENTITY_MATRIX)) { - const glyphHeight = font.bbox[3] - font.bbox[1]; - - if (glyphHeight > 0) { - tsm[3] *= glyphHeight * textState.fontMatrix[3]; - } - } - - return _util.Util.transform(textState.ctm, _util.Util.transform(textState.textMatrix, tsm)); - } - - function ensureTextContentItem() { - if (textContentItem.initialized) { - return textContentItem; - } - - const font = textState.font, - loadedName = font.loadedName; - - if (!seenStyles.has(loadedName)) { - seenStyles.add(loadedName); - textContent.styles[loadedName] = { - fontFamily: font.fallbackName, - ascent: font.ascent, - descent: font.descent, - vertical: font.vertical - }; - } - - textContentItem.fontName = loadedName; - const trm = textContentItem.transform = getCurrentTextTransform(); - - if (!font.vertical) { - textContentItem.width = textContentItem.totalWidth = 0; - textContentItem.height = textContentItem.totalHeight = Math.hypot(trm[2], trm[3]); - textContentItem.vertical = false; - } else { - textContentItem.width = textContentItem.totalWidth = Math.hypot(trm[0], trm[1]); - textContentItem.height = textContentItem.totalHeight = 0; - textContentItem.vertical = true; - } - - const scaleLineX = Math.hypot(textState.textLineMatrix[0], textState.textLineMatrix[1]); - const scaleCtmX = Math.hypot(textState.ctm[0], textState.ctm[1]); - textContentItem.textAdvanceScale = scaleCtmX * scaleLineX; - textContentItem.trackingSpaceMin = textState.fontSize * TRACKING_SPACE_FACTOR; - textContentItem.negativeSpaceMax = textState.fontSize * NEGATIVE_SPACE_FACTOR; - textContentItem.spaceInFlowMin = textState.fontSize * SPACE_IN_FLOW_MIN_FACTOR; - textContentItem.spaceInFlowMax = textState.fontSize * SPACE_IN_FLOW_MAX_FACTOR; - textContentItem.hasEOL = false; - textContentItem.initialized = true; - return textContentItem; - } - - function updateAdvanceScale() { - if (!textContentItem.initialized) { - return; - } - - const scaleLineX = Math.hypot(textState.textLineMatrix[0], textState.textLineMatrix[1]); - const scaleCtmX = Math.hypot(textState.ctm[0], textState.ctm[1]); - const scaleFactor = scaleCtmX * scaleLineX; - - if (scaleFactor === textContentItem.textAdvanceScale) { - return; - } - - if (!textContentItem.vertical) { - textContentItem.totalWidth += textContentItem.width * textContentItem.textAdvanceScale; - textContentItem.width = 0; - } else { - textContentItem.totalHeight += textContentItem.height * textContentItem.textAdvanceScale; - textContentItem.height = 0; - } - - textContentItem.textAdvanceScale = scaleFactor; - } - - function replaceWhitespace(str) { - const ii = str.length; - let i = 0, - code; - - while (i < ii && (code = str.charCodeAt(i)) >= 0x20 && code <= 0x7f) { - i++; - } - - return i < ii ? str.replace(WhitespaceRegexp, " ") : str; - } - - function runBidiTransform(textChunk) { - const text = textChunk.str.join(""); - const bidiResult = (0, _bidi.bidi)(text, -1, textChunk.vertical); - const str = normalizeWhitespace ? replaceWhitespace(bidiResult.str) : bidiResult.str; - return { - str, - dir: bidiResult.dir, - width: textChunk.totalWidth, - height: textChunk.totalHeight, - transform: textChunk.transform, - fontName: textChunk.fontName, - hasEOL: textChunk.hasEOL - }; - } - - function handleSetFont(fontName, fontRef) { - return self.loadFont(fontName, fontRef, resources).then(function (translated) { - if (!translated.font.isType3Font) { - return translated; - } - - return translated.loadType3Data(self, resources, task).catch(function () {}).then(function () { - return translated; - }); - }).then(function (translated) { - textState.font = translated.font; - textState.fontMatrix = translated.font.fontMatrix || _util.FONT_IDENTITY_MATRIX; - }); - } - - function compareWithLastPosition() { - if (!combineTextItems || !textState.font || !textContentItem.prevTransform) { - return; - } - - const currentTransform = getCurrentTextTransform(); - let posX = currentTransform[4]; - let posY = currentTransform[5]; - let lastPosX = textContentItem.prevTransform[4]; - let lastPosY = textContentItem.prevTransform[5]; - - if (lastPosX === posX && lastPosY === posY) { - return; - } - - let rotate = 0; - - if (currentTransform[0] && currentTransform[1] === 0 && currentTransform[2] === 0) { - rotate = currentTransform[0] > 0 ? 0 : 180; - } else if (currentTransform[1] && currentTransform[0] === 0 && currentTransform[3] === 0) { - rotate += currentTransform[1] > 0 ? 90 : 270; - } - - if (rotate !== 0) { - switch (rotate) { - case 90: - [posX, posY] = [posY, posX]; - [lastPosX, lastPosY] = [lastPosY, lastPosX]; - break; - - case 180: - [posX, posY, lastPosX, lastPosY] = [-posX, -posY, -lastPosX, -lastPosY]; - break; - - case 270: - [posX, posY] = [-posY, -posX]; - [lastPosX, lastPosY] = [-lastPosY, -lastPosX]; - break; - } - } - - if (textState.font.vertical) { - const advanceY = (lastPosY - posY) / textContentItem.textAdvanceScale; - const advanceX = posX - lastPosX; - - if (advanceY < textContentItem.negativeSpaceMax) { - if (Math.abs(advanceX) > 0.5 * textContentItem.width) { - appendEOL(); - return; - } - - flushTextContentItem(); - return; - } - - if (Math.abs(advanceX) > textContentItem.height) { - appendEOL(); - return; - } - - if (advanceY <= textContentItem.trackingSpaceMin) { - textContentItem.height += advanceY; - } else if (!addFakeSpaces(advanceY, textContentItem.prevTransform)) { - if (textContentItem.str.length === 0) { - textContent.items.push({ - str: " ", - dir: "ltr", - width: 0, - height: advanceY, - transform: textContentItem.prevTransform, - fontName: textContentItem.fontName, - hasEOL: false - }); - } else { - textContentItem.height += advanceY; - } - } - - return; - } - - const advanceX = (posX - lastPosX) / textContentItem.textAdvanceScale; - const advanceY = posY - lastPosY; - - if (advanceX < textContentItem.negativeSpaceMax) { - if (Math.abs(advanceY) > 0.5 * textContentItem.height) { - appendEOL(); - return; - } - - flushTextContentItem(); - return; - } - - if (Math.abs(advanceY) > textContentItem.height) { - appendEOL(); - return; - } - - if (advanceX <= textContentItem.trackingSpaceMin) { - textContentItem.width += advanceX; - } else if (!addFakeSpaces(advanceX, textContentItem.prevTransform)) { - if (textContentItem.str.length === 0) { - textContent.items.push({ - str: " ", - dir: "ltr", - width: advanceX, - height: 0, - transform: textContentItem.prevTransform, - fontName: textContentItem.fontName, - hasEOL: false - }); - } else { - textContentItem.width += advanceX; - } - } - } - - function buildTextContentItem({ - chars, - extraSpacing - }) { - const font = textState.font; - - if (!chars) { - const charSpacing = textState.charSpacing + extraSpacing; - - if (charSpacing) { - if (!font.vertical) { - textState.translateTextMatrix(charSpacing * textState.textHScale, 0); - } else { - textState.translateTextMatrix(0, -charSpacing); - } - } - - return; - } - - const glyphs = font.charsToGlyphs(chars); - const scale = textState.fontMatrix[0] * textState.fontSize; - - for (let i = 0, ii = glyphs.length; i < ii; i++) { - const glyph = glyphs[i]; - let charSpacing = textState.charSpacing + (i + 1 === ii ? extraSpacing : 0); - let glyphWidth = glyph.width; - - if (font.vertical) { - glyphWidth = glyph.vmetric ? glyph.vmetric[0] : -glyphWidth; - } - - let scaledDim = glyphWidth * scale; - let glyphUnicode = glyph.unicode; - - if (glyphUnicode === " " && (i === 0 || i + 1 === ii || glyphs[i - 1].unicode === " " || glyphs[i + 1].unicode === " " || extraSpacing)) { - if (!font.vertical) { - charSpacing += scaledDim + textState.wordSpacing; - textState.translateTextMatrix(charSpacing * textState.textHScale, 0); - } else { - charSpacing += -scaledDim + textState.wordSpacing; - textState.translateTextMatrix(0, -charSpacing); - } - - continue; - } - - compareWithLastPosition(); - const textChunk = ensureTextContentItem(); - - if (DiacriticRegExp.test(glyph.unicode)) { - scaledDim = 0; - } - - if (!font.vertical) { - scaledDim *= textState.textHScale; - textState.translateTextMatrix(scaledDim, 0); - textChunk.width += scaledDim; - } else { - textState.translateTextMatrix(0, scaledDim); - scaledDim = Math.abs(scaledDim); - textChunk.height += scaledDim; - } - - if (scaledDim) { - textChunk.prevTransform = getCurrentTextTransform(); - } - - glyphUnicode = NormalizedUnicodes[glyphUnicode] || glyphUnicode; - glyphUnicode = (0, _unicode.reverseIfRtl)(glyphUnicode); - textChunk.str.push(glyphUnicode); - - if (charSpacing) { - if (!font.vertical) { - textState.translateTextMatrix(charSpacing * textState.textHScale, 0); - } else { - textState.translateTextMatrix(0, -charSpacing); - } - } - } - } - - function appendEOL() { - if (textContentItem.initialized) { - textContentItem.hasEOL = true; - flushTextContentItem(); - } else { - textContent.items.push({ - str: "", - dir: "ltr", - width: 0, - height: 0, - transform: getCurrentTextTransform(), - fontName: textState.font.loadedName, - hasEOL: true - }); - } - } - - function addFakeSpaces(width, transf) { - if (textContentItem.spaceInFlowMin <= width && width <= textContentItem.spaceInFlowMax) { - if (textContentItem.initialized) { - textContentItem.str.push(" "); - } - - return false; - } - - const fontName = textContentItem.fontName; - let height = 0; - - if (textContentItem.vertical) { - height = width; - width = 0; - } - - flushTextContentItem(); - textContent.items.push({ - str: " ", - dir: "ltr", - width, - height, - transform: transf || getCurrentTextTransform(), - fontName, - hasEOL: false - }); - return true; - } - - function flushTextContentItem() { - if (!textContentItem.initialized || !textContentItem.str) { - return; - } - - if (!textContentItem.vertical) { - textContentItem.totalWidth += textContentItem.width * textContentItem.textAdvanceScale; - } else { - textContentItem.totalHeight += textContentItem.height * textContentItem.textAdvanceScale; - } - - textContent.items.push(runBidiTransform(textContentItem)); - textContentItem.initialized = false; - textContentItem.str.length = 0; - } - - function enqueueChunk(batch = false) { - const length = textContent.items.length; - - if (length === 0) { - return; - } - - if (batch && length < TEXT_CHUNK_BATCH_SIZE) { - return; - } - - sink.enqueue(textContent, length); - textContent.items = []; - textContent.styles = Object.create(null); - } - - const timeSlotManager = new TimeSlotManager(); - return new Promise(function promiseBody(resolve, reject) { - const next = function (promise) { - enqueueChunk(true); - Promise.all([promise, sink.ready]).then(function () { - try { - promiseBody(resolve, reject); - } catch (ex) { - reject(ex); - } - }, reject); - }; - - task.ensureNotTerminated(); - timeSlotManager.reset(); - const operation = {}; - let stop, - args = []; - - while (!(stop = timeSlotManager.check())) { - args.length = 0; - operation.args = args; - - if (!preprocessor.read(operation)) { - break; - } - - textState = stateManager.state; - const fn = operation.fn; - args = operation.args; - - switch (fn | 0) { - case _util.OPS.setFont: - var fontNameArg = args[0].name, - fontSizeArg = args[1]; - - if (textState.font && fontNameArg === textState.fontName && fontSizeArg === textState.fontSize) { - break; - } - - flushTextContentItem(); - textState.fontName = fontNameArg; - textState.fontSize = fontSizeArg; - next(handleSetFont(fontNameArg, null)); - return; - - case _util.OPS.setTextRise: - textState.textRise = args[0]; - break; - - case _util.OPS.setHScale: - textState.textHScale = args[0] / 100; - break; - - case _util.OPS.setLeading: - textState.leading = args[0]; - break; - - case _util.OPS.moveText: - textState.translateTextLineMatrix(args[0], args[1]); - textState.textMatrix = textState.textLineMatrix.slice(); - break; - - case _util.OPS.setLeadingMoveText: - textState.leading = -args[1]; - textState.translateTextLineMatrix(args[0], args[1]); - textState.textMatrix = textState.textLineMatrix.slice(); - break; - - case _util.OPS.nextLine: - textState.carriageReturn(); - break; - - case _util.OPS.setTextMatrix: - textState.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); - textState.setTextLineMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); - updateAdvanceScale(); - break; - - case _util.OPS.setCharSpacing: - textState.charSpacing = args[0]; - break; - - case _util.OPS.setWordSpacing: - textState.wordSpacing = args[0]; - break; - - case _util.OPS.beginText: - textState.textMatrix = _util.IDENTITY_MATRIX.slice(); - textState.textLineMatrix = _util.IDENTITY_MATRIX.slice(); - break; - - case _util.OPS.showSpacedText: - if (!stateManager.state.font) { - self.ensureStateFont(stateManager.state); - continue; - } - - const spaceFactor = (textState.font.vertical ? 1 : -1) * textState.fontSize / 1000; - const elements = args[0]; - - for (let i = 0, ii = elements.length; i < ii - 1; i++) { - const item = elements[i]; - - if (typeof item === "string") { - showSpacedTextBuffer.push(item); - } else if (typeof item === "number" && item !== 0) { - const str = showSpacedTextBuffer.join(""); - showSpacedTextBuffer.length = 0; - buildTextContentItem({ - chars: str, - extraSpacing: item * spaceFactor - }); - } - } - - const item = elements[elements.length - 1]; - - if (typeof item === "string") { - showSpacedTextBuffer.push(item); - } - - if (showSpacedTextBuffer.length > 0) { - const str = showSpacedTextBuffer.join(""); - showSpacedTextBuffer.length = 0; - buildTextContentItem({ - chars: str, - extraSpacing: 0 - }); - } - - break; - - case _util.OPS.showText: - if (!stateManager.state.font) { - self.ensureStateFont(stateManager.state); - continue; - } - - buildTextContentItem({ - chars: args[0], - extraSpacing: 0 - }); - break; - - case _util.OPS.nextLineShowText: - if (!stateManager.state.font) { - self.ensureStateFont(stateManager.state); - continue; - } - - textState.carriageReturn(); - buildTextContentItem({ - chars: args[0], - extraSpacing: 0 - }); - break; - - case _util.OPS.nextLineSetSpacingShowText: - if (!stateManager.state.font) { - self.ensureStateFont(stateManager.state); - continue; - } - - textState.wordSpacing = args[0]; - textState.charSpacing = args[1]; - textState.carriageReturn(); - buildTextContentItem({ - chars: args[2], - extraSpacing: 0 - }); - break; - - case _util.OPS.paintXObject: - flushTextContentItem(); - - if (!xobjs) { - xobjs = resources.get("XObject") || _primitives.Dict.empty; - } - - var isValidName = args[0] instanceof _primitives.Name; - var name = args[0].name; - - if (isValidName && emptyXObjectCache.getByName(name)) { - break; - } - - next(new Promise(function (resolveXObject, rejectXObject) { - if (!isValidName) { - throw new _util.FormatError("XObject must be referred to by name."); - } - - let xobj = xobjs.getRaw(name); - - if (xobj instanceof _primitives.Ref) { - if (emptyXObjectCache.getByRef(xobj)) { - resolveXObject(); - return; - } - - const globalImage = self.globalImageCache.getData(xobj, self.pageIndex); - - if (globalImage) { - resolveXObject(); - return; - } - - xobj = xref.fetch(xobj); - } - - if (!(0, _primitives.isStream)(xobj)) { - throw new _util.FormatError("XObject should be a stream"); - } - - const type = xobj.dict.get("Subtype"); - - if (!(0, _primitives.isName)(type)) { - throw new _util.FormatError("XObject should have a Name subtype"); - } - - if (type.name !== "Form") { - emptyXObjectCache.set(name, xobj.dict.objId, true); - resolveXObject(); - return; - } - - const currentState = stateManager.state.clone(); - const xObjStateManager = new StateManager(currentState); - const matrix = xobj.dict.getArray("Matrix"); - - if (Array.isArray(matrix) && matrix.length === 6) { - xObjStateManager.transform(matrix); - } - - enqueueChunk(); - const sinkWrapper = { - enqueueInvoked: false, - - enqueue(chunk, size) { - this.enqueueInvoked = true; - sink.enqueue(chunk, size); - }, - - get desiredSize() { - return sink.desiredSize; - }, - - get ready() { - return sink.ready; - } - - }; - self.getTextContent({ - stream: xobj, - task, - resources: xobj.dict.get("Resources") || resources, - stateManager: xObjStateManager, - normalizeWhitespace, - combineTextItems, - includeMarkedContent, - sink: sinkWrapper, - seenStyles - }).then(function () { - if (!sinkWrapper.enqueueInvoked) { - emptyXObjectCache.set(name, xobj.dict.objId, true); - } - - resolveXObject(); - }, rejectXObject); - }).catch(function (reason) { - if (reason instanceof _util.AbortException) { - return; - } - - if (self.options.ignoreErrors) { - (0, _util.warn)(`getTextContent - ignoring XObject: "${reason}".`); - return; - } - - throw reason; - })); - return; - - case _util.OPS.setGState: - isValidName = args[0] instanceof _primitives.Name; - name = args[0].name; - - if (isValidName && emptyGStateCache.getByName(name)) { - break; - } - - next(new Promise(function (resolveGState, rejectGState) { - if (!isValidName) { - throw new _util.FormatError("GState must be referred to by name."); - } - - const extGState = resources.get("ExtGState"); - - if (!(extGState instanceof _primitives.Dict)) { - throw new _util.FormatError("ExtGState should be a dictionary."); - } - - const gState = extGState.get(name); - - if (!(gState instanceof _primitives.Dict)) { - throw new _util.FormatError("GState should be a dictionary."); - } - - const gStateFont = gState.get("Font"); - - if (!gStateFont) { - emptyGStateCache.set(name, gState.objId, true); - resolveGState(); - return; - } - - flushTextContentItem(); - textState.fontName = null; - textState.fontSize = gStateFont[1]; - handleSetFont(null, gStateFont[0]).then(resolveGState, rejectGState); - }).catch(function (reason) { - if (reason instanceof _util.AbortException) { - return; - } - - if (self.options.ignoreErrors) { - (0, _util.warn)(`getTextContent - ignoring ExtGState: "${reason}".`); - return; - } - - throw reason; - })); - return; - - case _util.OPS.beginMarkedContent: - if (includeMarkedContent) { - textContent.items.push({ - type: "beginMarkedContent", - tag: (0, _primitives.isName)(args[0]) ? args[0].name : null - }); - } - - break; - - case _util.OPS.beginMarkedContentProps: - if (includeMarkedContent) { - flushTextContentItem(); - let mcid = null; - - if ((0, _primitives.isDict)(args[1])) { - mcid = args[1].get("MCID"); - } - - textContent.items.push({ - type: "beginMarkedContentProps", - id: Number.isInteger(mcid) ? `${self.idFactory.getPageObjId()}_mcid${mcid}` : null, - tag: (0, _primitives.isName)(args[0]) ? args[0].name : null - }); - } - - break; - - case _util.OPS.endMarkedContent: - if (includeMarkedContent) { - flushTextContentItem(); - textContent.items.push({ - type: "endMarkedContent" - }); - } - - break; - } - - if (textContent.items.length >= sink.desiredSize) { - stop = true; - break; - } - } - - if (stop) { - next(deferred); - return; - } - - flushTextContentItem(); - enqueueChunk(); - resolve(); - }).catch(reason => { - if (reason instanceof _util.AbortException) { - return; - } - - if (this.options.ignoreErrors) { - (0, _util.warn)(`getTextContent - ignoring errors during "${task.name}" ` + `task: "${reason}".`); - flushTextContentItem(); - enqueueChunk(); - return; - } - - throw reason; - }); - } - - extractDataStructures(dict, baseDict, properties) { - const xref = this.xref; - let cidToGidBytes; - const toUnicodePromise = this.readToUnicode(properties.toUnicode || dict.get("ToUnicode") || baseDict.get("ToUnicode")); - - if (properties.composite) { - const cidSystemInfo = dict.get("CIDSystemInfo"); - - if ((0, _primitives.isDict)(cidSystemInfo)) { - properties.cidSystemInfo = { - registry: (0, _util.stringToPDFString)(cidSystemInfo.get("Registry")), - ordering: (0, _util.stringToPDFString)(cidSystemInfo.get("Ordering")), - supplement: cidSystemInfo.get("Supplement") - }; - } - - const cidToGidMap = dict.get("CIDToGIDMap"); - - if (cidToGidMap instanceof _base_stream.BaseStream) { - cidToGidBytes = cidToGidMap.getBytes(); - } - } - - const differences = []; - let baseEncodingName = null; - let encoding; - - if (dict.has("Encoding")) { - encoding = dict.get("Encoding"); - - if ((0, _primitives.isDict)(encoding)) { - baseEncodingName = encoding.get("BaseEncoding"); - baseEncodingName = (0, _primitives.isName)(baseEncodingName) ? baseEncodingName.name : null; - - if (encoding.has("Differences")) { - const diffEncoding = encoding.get("Differences"); - let index = 0; - - for (let j = 0, jj = diffEncoding.length; j < jj; j++) { - const data = xref.fetchIfRef(diffEncoding[j]); - - if ((0, _util.isNum)(data)) { - index = data; - } else if ((0, _primitives.isName)(data)) { - differences[index++] = data.name; - } else { - throw new _util.FormatError(`Invalid entry in 'Differences' array: ${data}`); - } - } - } - } else if ((0, _primitives.isName)(encoding)) { - baseEncodingName = encoding.name; - } else { - throw new _util.FormatError("Encoding is not a Name nor a Dict"); - } - - if (baseEncodingName !== "MacRomanEncoding" && baseEncodingName !== "MacExpertEncoding" && baseEncodingName !== "WinAnsiEncoding") { - baseEncodingName = null; - } - } - - if (baseEncodingName) { - properties.defaultEncoding = (0, _encodings.getEncoding)(baseEncodingName); - } else { - const isSymbolicFont = !!(properties.flags & _fonts_utils.FontFlags.Symbolic); - const isNonsymbolicFont = !!(properties.flags & _fonts_utils.FontFlags.Nonsymbolic); - encoding = _encodings.StandardEncoding; - - if (properties.type === "TrueType" && !isNonsymbolicFont) { - encoding = _encodings.WinAnsiEncoding; - } - - if (isSymbolicFont) { - encoding = _encodings.MacRomanEncoding; - - if (!properties.file || properties.isInternalFont) { - if (/Symbol/i.test(properties.name)) { - encoding = _encodings.SymbolSetEncoding; - } else if (/Dingbats|Wingdings/i.test(properties.name)) { - encoding = _encodings.ZapfDingbatsEncoding; - } - } - } - - properties.defaultEncoding = encoding; - } - - properties.differences = differences; - properties.baseEncodingName = baseEncodingName; - properties.hasEncoding = !!baseEncodingName || differences.length > 0; - properties.dict = dict; - return toUnicodePromise.then(readToUnicode => { - properties.toUnicode = readToUnicode; - return this.buildToUnicode(properties); - }).then(builtToUnicode => { - properties.toUnicode = builtToUnicode; - - if (cidToGidBytes) { - properties.cidToGidMap = this.readCidToGidMap(cidToGidBytes, builtToUnicode); - } - - return properties; - }); - } - - _simpleFontToUnicode(properties, forceGlyphs = false) { - (0, _util.assert)(!properties.composite, "Must be a simple font."); - const toUnicode = []; - const encoding = properties.defaultEncoding.slice(); - const baseEncodingName = properties.baseEncodingName; - const differences = properties.differences; - - for (const charcode in differences) { - const glyphName = differences[charcode]; - - if (glyphName === ".notdef") { - continue; - } - - encoding[charcode] = glyphName; - } - - const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); - - for (const charcode in encoding) { - let glyphName = encoding[charcode]; - - if (glyphName === "") { - continue; - } else if (glyphsUnicodeMap[glyphName] === undefined) { - let code = 0; - - switch (glyphName[0]) { - case "G": - if (glyphName.length === 3) { - code = parseInt(glyphName.substring(1), 16); - } - - break; - - case "g": - if (glyphName.length === 5) { - code = parseInt(glyphName.substring(1), 16); - } - - break; - - case "C": - case "c": - if (glyphName.length >= 3 && glyphName.length <= 4) { - const codeStr = glyphName.substring(1); - - if (forceGlyphs) { - code = parseInt(codeStr, 16); - break; - } - - code = +codeStr; - - if (Number.isNaN(code) && Number.isInteger(parseInt(codeStr, 16))) { - return this._simpleFontToUnicode(properties, true); - } - } - - break; - - default: - const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap); - - if (unicode !== -1) { - code = unicode; - } - - } - - if (code > 0 && code <= 0x10ffff && Number.isInteger(code)) { - if (baseEncodingName && code === +charcode) { - const baseEncoding = (0, _encodings.getEncoding)(baseEncodingName); - - if (baseEncoding && (glyphName = baseEncoding[charcode])) { - toUnicode[charcode] = String.fromCharCode(glyphsUnicodeMap[glyphName]); - continue; - } - } - - toUnicode[charcode] = String.fromCodePoint(code); - } - - continue; - } - - toUnicode[charcode] = String.fromCharCode(glyphsUnicodeMap[glyphName]); - } - - return toUnicode; - } - - async buildToUnicode(properties) { - properties.hasIncludedToUnicodeMap = !!properties.toUnicode && properties.toUnicode.length > 0; - - if (properties.hasIncludedToUnicodeMap) { - if (!properties.composite && properties.hasEncoding) { - properties.fallbackToUnicode = this._simpleFontToUnicode(properties); - } - - return properties.toUnicode; - } - - if (!properties.composite) { - return new _to_unicode_map.ToUnicodeMap(this._simpleFontToUnicode(properties)); - } - - if (properties.composite && (properties.cMap.builtInCMap && !(properties.cMap instanceof _cmap.IdentityCMap) || properties.cidSystemInfo.registry === "Adobe" && (properties.cidSystemInfo.ordering === "GB1" || properties.cidSystemInfo.ordering === "CNS1" || properties.cidSystemInfo.ordering === "Japan1" || properties.cidSystemInfo.ordering === "Korea1"))) { - const { - registry, - ordering - } = properties.cidSystemInfo; - - const ucs2CMapName = _primitives.Name.get(`${registry}-${ordering}-UCS2`); - - const ucs2CMap = await _cmap.CMapFactory.create({ - encoding: ucs2CMapName, - fetchBuiltInCMap: this._fetchBuiltInCMapBound, - useCMap: null - }); - const toUnicode = []; - properties.cMap.forEach(function (charcode, cid) { - if (cid > 0xffff) { - throw new _util.FormatError("Max size of CID is 65,535"); - } - - const ucs2 = ucs2CMap.lookup(cid); - - if (ucs2) { - toUnicode[charcode] = String.fromCharCode((ucs2.charCodeAt(0) << 8) + ucs2.charCodeAt(1)); - } - }); - return new _to_unicode_map.ToUnicodeMap(toUnicode); - } - - return new _to_unicode_map.IdentityToUnicodeMap(properties.firstChar, properties.lastChar); - } - - readToUnicode(cmapObj) { - if (!cmapObj) { - return Promise.resolve(null); - } - - if ((0, _primitives.isName)(cmapObj)) { - return _cmap.CMapFactory.create({ - encoding: cmapObj, - fetchBuiltInCMap: this._fetchBuiltInCMapBound, - useCMap: null - }).then(function (cmap) { - if (cmap instanceof _cmap.IdentityCMap) { - return new _to_unicode_map.IdentityToUnicodeMap(0, 0xffff); - } - - return new _to_unicode_map.ToUnicodeMap(cmap.getMap()); - }); - } else if ((0, _primitives.isStream)(cmapObj)) { - return _cmap.CMapFactory.create({ - encoding: cmapObj, - fetchBuiltInCMap: this._fetchBuiltInCMapBound, - useCMap: null - }).then(function (cmap) { - if (cmap instanceof _cmap.IdentityCMap) { - return new _to_unicode_map.IdentityToUnicodeMap(0, 0xffff); - } - - const map = new Array(cmap.length); - cmap.forEach(function (charCode, token) { - if (typeof token === "number") { - map[charCode] = String.fromCodePoint(token); - return; - } - - const str = []; - - for (let k = 0; k < token.length; k += 2) { - const w1 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1); - - if ((w1 & 0xf800) !== 0xd800) { - str.push(w1); - continue; - } - - k += 2; - const w2 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1); - str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000); - } - - map[charCode] = String.fromCodePoint.apply(String, str); - }); - return new _to_unicode_map.ToUnicodeMap(map); - }, reason => { - if (reason instanceof _util.AbortException) { - return null; - } - - if (this.options.ignoreErrors) { - this.handler.send("UnsupportedFeature", { - featureId: _util.UNSUPPORTED_FEATURES.errorFontToUnicode - }); - (0, _util.warn)(`readToUnicode - ignoring ToUnicode data: "${reason}".`); - return null; - } - - throw reason; - }); - } - - return Promise.resolve(null); - } - - readCidToGidMap(glyphsData, toUnicode) { - const result = []; - - for (let j = 0, jj = glyphsData.length; j < jj; j++) { - const glyphID = glyphsData[j++] << 8 | glyphsData[j]; - const code = j >> 1; - - if (glyphID === 0 && !toUnicode.has(code)) { - continue; - } - - result[code] = glyphID; - } - - return result; - } - - extractWidths(dict, descriptor, properties) { - const xref = this.xref; - let glyphsWidths = []; - let defaultWidth = 0; - const glyphsVMetrics = []; - let defaultVMetrics; - let i, ii, j, jj, start, code, widths; - - if (properties.composite) { - defaultWidth = dict.has("DW") ? dict.get("DW") : 1000; - widths = dict.get("W"); - - if (widths) { - for (i = 0, ii = widths.length; i < ii; i++) { - start = xref.fetchIfRef(widths[i++]); - code = xref.fetchIfRef(widths[i]); - - if (Array.isArray(code)) { - for (j = 0, jj = code.length; j < jj; j++) { - glyphsWidths[start++] = xref.fetchIfRef(code[j]); - } - } else { - const width = xref.fetchIfRef(widths[++i]); - - for (j = start; j <= code; j++) { - glyphsWidths[j] = width; - } - } - } - } - - if (properties.vertical) { - let vmetrics = dict.getArray("DW2") || [880, -1000]; - defaultVMetrics = [vmetrics[1], defaultWidth * 0.5, vmetrics[0]]; - vmetrics = dict.get("W2"); - - if (vmetrics) { - for (i = 0, ii = vmetrics.length; i < ii; i++) { - start = xref.fetchIfRef(vmetrics[i++]); - code = xref.fetchIfRef(vmetrics[i]); - - if (Array.isArray(code)) { - for (j = 0, jj = code.length; j < jj; j++) { - glyphsVMetrics[start++] = [xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j])]; - } - } else { - const vmetric = [xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i])]; - - for (j = start; j <= code; j++) { - glyphsVMetrics[j] = vmetric; - } - } - } - } - } - } else { - const firstChar = properties.firstChar; - widths = dict.get("Widths"); - - if (widths) { - j = firstChar; - - for (i = 0, ii = widths.length; i < ii; i++) { - glyphsWidths[j++] = xref.fetchIfRef(widths[i]); - } - - defaultWidth = parseFloat(descriptor.get("MissingWidth")) || 0; - } else { - const baseFontName = dict.get("BaseFont"); - - if ((0, _primitives.isName)(baseFontName)) { - const metrics = this.getBaseFontMetrics(baseFontName.name); - glyphsWidths = this.buildCharCodeToWidth(metrics.widths, properties); - defaultWidth = metrics.defaultWidth; - } - } - } - - let isMonospace = true; - let firstWidth = defaultWidth; - - for (const glyph in glyphsWidths) { - const glyphWidth = glyphsWidths[glyph]; - - if (!glyphWidth) { - continue; - } - - if (!firstWidth) { - firstWidth = glyphWidth; - continue; - } - - if (firstWidth !== glyphWidth) { - isMonospace = false; - break; - } - } - - if (isMonospace) { - properties.flags |= _fonts_utils.FontFlags.FixedPitch; - } - - properties.defaultWidth = defaultWidth; - properties.widths = glyphsWidths; - properties.defaultVMetrics = defaultVMetrics; - properties.vmetrics = glyphsVMetrics; - } - - isSerifFont(baseFontName) { - const fontNameWoStyle = baseFontName.split("-")[0]; - return fontNameWoStyle in (0, _standard_fonts.getSerifFonts)() || fontNameWoStyle.search(/serif/gi) !== -1; - } - - getBaseFontMetrics(name) { - let defaultWidth = 0; - let widths = Object.create(null); - let monospace = false; - const stdFontMap = (0, _standard_fonts.getStdFontMap)(); - let lookupName = stdFontMap[name] || name; - const Metrics = (0, _metrics.getMetrics)(); - - if (!(lookupName in Metrics)) { - if (this.isSerifFont(name)) { - lookupName = "Times-Roman"; - } else { - lookupName = "Helvetica"; - } - } - - const glyphWidths = Metrics[lookupName]; - - if ((0, _util.isNum)(glyphWidths)) { - defaultWidth = glyphWidths; - monospace = true; - } else { - widths = glyphWidths(); - } - - return { - defaultWidth, - monospace, - widths - }; - } - - buildCharCodeToWidth(widthsByGlyphName, properties) { - const widths = Object.create(null); - const differences = properties.differences; - const encoding = properties.defaultEncoding; - - for (let charCode = 0; charCode < 256; charCode++) { - if (charCode in differences && widthsByGlyphName[differences[charCode]]) { - widths[charCode] = widthsByGlyphName[differences[charCode]]; - continue; - } - - if (charCode in encoding && widthsByGlyphName[encoding[charCode]]) { - widths[charCode] = widthsByGlyphName[encoding[charCode]]; - continue; - } - } - - return widths; - } - - preEvaluateFont(dict) { - const baseDict = dict; - let type = dict.get("Subtype"); - - if (!(0, _primitives.isName)(type)) { - throw new _util.FormatError("invalid font Subtype"); - } - - let composite = false; - let hash, toUnicode; - - if (type.name === "Type0") { - const df = dict.get("DescendantFonts"); - - if (!df) { - throw new _util.FormatError("Descendant fonts are not specified"); - } - - dict = Array.isArray(df) ? this.xref.fetchIfRef(df[0]) : df; - - if (!(dict instanceof _primitives.Dict)) { - throw new _util.FormatError("Descendant font is not a dictionary."); - } - - type = dict.get("Subtype"); - - if (!(0, _primitives.isName)(type)) { - throw new _util.FormatError("invalid font Subtype"); - } - - composite = true; - } - - const firstChar = dict.get("FirstChar") || 0, - lastChar = dict.get("LastChar") || (composite ? 0xffff : 0xff); - const descriptor = dict.get("FontDescriptor"); - - if (descriptor) { - hash = new _murmurhash.MurmurHash3_64(); - const encoding = baseDict.getRaw("Encoding"); - - if ((0, _primitives.isName)(encoding)) { - hash.update(encoding.name); - } else if ((0, _primitives.isRef)(encoding)) { - hash.update(encoding.toString()); - } else if ((0, _primitives.isDict)(encoding)) { - for (const entry of encoding.getRawValues()) { - if ((0, _primitives.isName)(entry)) { - hash.update(entry.name); - } else if ((0, _primitives.isRef)(entry)) { - hash.update(entry.toString()); - } else if (Array.isArray(entry)) { - const diffLength = entry.length, - diffBuf = new Array(diffLength); - - for (let j = 0; j < diffLength; j++) { - const diffEntry = entry[j]; - - if ((0, _primitives.isName)(diffEntry)) { - diffBuf[j] = diffEntry.name; - } else if ((0, _util.isNum)(diffEntry) || (0, _primitives.isRef)(diffEntry)) { - diffBuf[j] = diffEntry.toString(); - } - } - - hash.update(diffBuf.join()); - } - } - } - - hash.update(`${firstChar}-${lastChar}`); - toUnicode = dict.get("ToUnicode") || baseDict.get("ToUnicode"); - - if ((0, _primitives.isStream)(toUnicode)) { - const stream = toUnicode.str || toUnicode; - const uint8array = stream.buffer ? new Uint8Array(stream.buffer.buffer, 0, stream.bufferLength) : new Uint8Array(stream.bytes.buffer, stream.start, stream.end - stream.start); - hash.update(uint8array); - } else if ((0, _primitives.isName)(toUnicode)) { - hash.update(toUnicode.name); - } - - const widths = dict.get("Widths") || baseDict.get("Widths"); - - if (Array.isArray(widths)) { - const widthsBuf = []; - - for (const entry of widths) { - if ((0, _util.isNum)(entry) || (0, _primitives.isRef)(entry)) { - widthsBuf.push(entry.toString()); - } - } - - hash.update(widthsBuf.join()); - } - - if (composite) { - hash.update("compositeFont"); - const compositeWidths = dict.get("W") || baseDict.get("W"); - - if (Array.isArray(compositeWidths)) { - const widthsBuf = []; - - for (const entry of compositeWidths) { - if ((0, _util.isNum)(entry) || (0, _primitives.isRef)(entry)) { - widthsBuf.push(entry.toString()); - } else if (Array.isArray(entry)) { - const subWidthsBuf = []; - - for (const element of entry) { - if ((0, _util.isNum)(element) || (0, _primitives.isRef)(element)) { - subWidthsBuf.push(element.toString()); - } - } - - widthsBuf.push(`[${subWidthsBuf.join()}]`); - } - } - - hash.update(widthsBuf.join()); - } - - const cidToGidMap = dict.getRaw("CIDToGIDMap") || baseDict.getRaw("CIDToGIDMap"); - - if (cidToGidMap instanceof _primitives.Name) { - hash.update(cidToGidMap.name); - } else if (cidToGidMap instanceof _primitives.Ref) { - hash.update(cidToGidMap.toString()); - } else if (cidToGidMap instanceof _base_stream.BaseStream) { - hash.update(cidToGidMap.peekBytes()); - } - } - } - - return { - descriptor, - dict, - baseDict, - composite, - type: type.name, - firstChar, - lastChar, - toUnicode, - hash: hash ? hash.hexdigest() : "" - }; - } - - async translateFont({ - descriptor, - dict, - baseDict, - composite, - type, - firstChar, - lastChar, - toUnicode, - cssFontInfo - }) { - const isType3Font = type === "Type3"; - let properties; - - if (!descriptor) { - if (isType3Font) { - descriptor = new _primitives.Dict(null); - descriptor.set("FontName", _primitives.Name.get(type)); - descriptor.set("FontBBox", dict.getArray("FontBBox") || [0, 0, 0, 0]); - } else { - let baseFontName = dict.get("BaseFont"); - - if (!(0, _primitives.isName)(baseFontName)) { - throw new _util.FormatError("Base font is not specified"); - } - - baseFontName = baseFontName.name.replace(/[,_]/g, "-"); - const metrics = this.getBaseFontMetrics(baseFontName); - const fontNameWoStyle = baseFontName.split("-")[0]; - const flags = (this.isSerifFont(fontNameWoStyle) ? _fonts_utils.FontFlags.Serif : 0) | (metrics.monospace ? _fonts_utils.FontFlags.FixedPitch : 0) | ((0, _standard_fonts.getSymbolsFonts)()[fontNameWoStyle] ? _fonts_utils.FontFlags.Symbolic : _fonts_utils.FontFlags.Nonsymbolic); - properties = { - type, - name: baseFontName, - loadedName: baseDict.loadedName, - widths: metrics.widths, - defaultWidth: metrics.defaultWidth, - isSimulatedFlags: true, - flags, - firstChar, - lastChar, - toUnicode, - xHeight: 0, - capHeight: 0, - italicAngle: 0, - isType3Font - }; - const widths = dict.get("Widths"); - const standardFontName = (0, _standard_fonts.getStandardFontName)(baseFontName); - let file = null; - - if (standardFontName) { - properties.isStandardFont = true; - file = await this.fetchStandardFontData(standardFontName); - properties.isInternalFont = !!file; - } - - return this.extractDataStructures(dict, dict, properties).then(newProperties => { - if (widths) { - const glyphWidths = []; - let j = firstChar; - - for (let i = 0, ii = widths.length; i < ii; i++) { - glyphWidths[j++] = this.xref.fetchIfRef(widths[i]); - } - - newProperties.widths = glyphWidths; - } else { - newProperties.widths = this.buildCharCodeToWidth(metrics.widths, newProperties); - } - - return new _fonts.Font(baseFontName, file, newProperties); - }); - } - } - - let fontName = descriptor.get("FontName"); - let baseFont = dict.get("BaseFont"); - - if ((0, _util.isString)(fontName)) { - fontName = _primitives.Name.get(fontName); - } - - if ((0, _util.isString)(baseFont)) { - baseFont = _primitives.Name.get(baseFont); - } - - if (!isType3Font) { - const fontNameStr = fontName && fontName.name; - const baseFontStr = baseFont && baseFont.name; - - if (fontNameStr !== baseFontStr) { - (0, _util.info)(`The FontDescriptor's FontName is "${fontNameStr}" but ` + `should be the same as the Font's BaseFont "${baseFontStr}".`); - - if (fontNameStr && baseFontStr && baseFontStr.startsWith(fontNameStr)) { - fontName = baseFont; - } - } - } - - fontName = fontName || baseFont; - - if (!(0, _primitives.isName)(fontName)) { - throw new _util.FormatError("invalid font name"); - } - - let fontFile, subtype, length1, length2, length3; - - try { - fontFile = descriptor.get("FontFile", "FontFile2", "FontFile3"); - } catch (ex) { - if (!this.options.ignoreErrors) { - throw ex; - } - - (0, _util.warn)(`translateFont - fetching "${fontName.name}" font file: "${ex}".`); - fontFile = new _stream.NullStream(); - } - - let isStandardFont = false; - let isInternalFont = false; - let glyphScaleFactors = null; - - if (fontFile) { - if (fontFile.dict) { - const subtypeEntry = fontFile.dict.get("Subtype"); - - if (subtypeEntry instanceof _primitives.Name) { - subtype = subtypeEntry.name; - } - - length1 = fontFile.dict.get("Length1"); - length2 = fontFile.dict.get("Length2"); - length3 = fontFile.dict.get("Length3"); - } - } else if (cssFontInfo) { - const standardFontName = (0, _xfa_fonts.getXfaFontName)(fontName.name); - - if (standardFontName) { - cssFontInfo.fontFamily = `${cssFontInfo.fontFamily}-PdfJS-XFA`; - cssFontInfo.metrics = standardFontName.metrics || null; - glyphScaleFactors = standardFontName.factors || null; - fontFile = await this.fetchStandardFontData(standardFontName.name); - isInternalFont = !!fontFile; - baseDict = dict = (0, _xfa_fonts.getXfaFontDict)(fontName.name); - composite = true; - } - } else if (!isType3Font) { - const standardFontName = (0, _standard_fonts.getStandardFontName)(fontName.name); - - if (standardFontName) { - isStandardFont = true; - fontFile = await this.fetchStandardFontData(standardFontName); - isInternalFont = !!fontFile; - } - } - - properties = { - type, - name: fontName.name, - subtype, - file: fontFile, - length1, - length2, - length3, - isStandardFont, - isInternalFont, - loadedName: baseDict.loadedName, - composite, - fixedPitch: false, - fontMatrix: dict.getArray("FontMatrix") || _util.FONT_IDENTITY_MATRIX, - firstChar, - lastChar, - toUnicode, - bbox: descriptor.getArray("FontBBox") || dict.getArray("FontBBox"), - ascent: descriptor.get("Ascent"), - descent: descriptor.get("Descent"), - xHeight: descriptor.get("XHeight") || 0, - capHeight: descriptor.get("CapHeight") || 0, - flags: descriptor.get("Flags"), - italicAngle: descriptor.get("ItalicAngle") || 0, - isType3Font, - cssFontInfo, - scaleFactors: glyphScaleFactors - }; - - if (composite) { - const cidEncoding = baseDict.get("Encoding"); - - if ((0, _primitives.isName)(cidEncoding)) { - properties.cidEncoding = cidEncoding.name; - } - - const cMap = await _cmap.CMapFactory.create({ - encoding: cidEncoding, - fetchBuiltInCMap: this._fetchBuiltInCMapBound, - useCMap: null - }); - properties.cMap = cMap; - properties.vertical = properties.cMap.vertical; - } - - return this.extractDataStructures(dict, baseDict, properties).then(newProperties => { - this.extractWidths(dict, descriptor, newProperties); - return new _fonts.Font(fontName.name, fontFile, newProperties); - }); - } - - static buildFontPaths(font, glyphs, handler, evaluatorOptions) { - function buildPath(fontChar) { - const glyphName = `${font.loadedName}_path_${fontChar}`; - - try { - if (font.renderer.hasBuiltPath(fontChar)) { - return; - } - - handler.send("commonobj", [glyphName, "FontPath", font.renderer.getPathJs(fontChar)]); - } catch (reason) { - if (evaluatorOptions.ignoreErrors) { - handler.send("UnsupportedFeature", { - featureId: _util.UNSUPPORTED_FEATURES.errorFontBuildPath - }); - (0, _util.warn)(`buildFontPaths - ignoring ${glyphName} glyph: "${reason}".`); - return; - } - - throw reason; - } - } - - for (const glyph of glyphs) { - buildPath(glyph.fontChar); - const accent = glyph.accent; - - if (accent && accent.fontChar) { - buildPath(accent.fontChar); - } - } - } - - static get fallbackFontDict() { - const dict = new _primitives.Dict(); - dict.set("BaseFont", _primitives.Name.get("PDFJS-FallbackFont")); - dict.set("Type", _primitives.Name.get("FallbackType")); - dict.set("Subtype", _primitives.Name.get("FallbackType")); - dict.set("Encoding", _primitives.Name.get("WinAnsiEncoding")); - return (0, _util.shadow)(this, "fallbackFontDict", dict); - } - -} - -exports.PartialEvaluator = PartialEvaluator; - -class TranslatedFont { - constructor({ - loadedName, - font, - dict, - evaluatorOptions - }) { - this.loadedName = loadedName; - this.font = font; - this.dict = dict; - this._evaluatorOptions = evaluatorOptions || DefaultPartialEvaluatorOptions; - this.type3Loaded = null; - this.type3Dependencies = font.isType3Font ? new Set() : null; - this.sent = false; - } - - send(handler) { - if (this.sent) { - return; - } - - this.sent = true; - handler.send("commonobj", [this.loadedName, "Font", this.font.exportData(this._evaluatorOptions.fontExtraProperties)]); - } - - fallback(handler) { - if (!this.font.data) { - return; - } - - this.font.disableFontFace = true; - PartialEvaluator.buildFontPaths(this.font, this.font.glyphCacheValues, handler, this._evaluatorOptions); - } - - loadType3Data(evaluator, resources, task) { - if (this.type3Loaded) { - return this.type3Loaded; - } - - if (!this.font.isType3Font) { - throw new Error("Must be a Type3 font."); - } - - const type3Evaluator = evaluator.clone({ - ignoreErrors: false - }); - type3Evaluator.parsingType3Font = true; - const translatedFont = this.font, - type3Dependencies = this.type3Dependencies; - let loadCharProcsPromise = Promise.resolve(); - const charProcs = this.dict.get("CharProcs"); - const fontResources = this.dict.get("Resources") || resources; - const charProcOperatorList = Object.create(null); - const isEmptyBBox = !translatedFont.bbox || (0, _util.isArrayEqual)(translatedFont.bbox, [0, 0, 0, 0]); - - for (const key of charProcs.getKeys()) { - loadCharProcsPromise = loadCharProcsPromise.then(() => { - const glyphStream = charProcs.get(key); - const operatorList = new _operator_list.OperatorList(); - return type3Evaluator.getOperatorList({ - stream: glyphStream, - task, - resources: fontResources, - operatorList - }).then(() => { - if (operatorList.fnArray[0] === _util.OPS.setCharWidthAndBounds) { - this._removeType3ColorOperators(operatorList, isEmptyBBox); - } - - charProcOperatorList[key] = operatorList.getIR(); - - for (const dependency of operatorList.dependencies) { - type3Dependencies.add(dependency); - } - }).catch(function (reason) { - (0, _util.warn)(`Type3 font resource "${key}" is not available.`); - const dummyOperatorList = new _operator_list.OperatorList(); - charProcOperatorList[key] = dummyOperatorList.getIR(); - }); - }); - } - - this.type3Loaded = loadCharProcsPromise.then(() => { - translatedFont.charProcOperatorList = charProcOperatorList; - - if (this._bbox) { - translatedFont.isCharBBox = true; - translatedFont.bbox = this._bbox; - } - }); - return this.type3Loaded; - } - - _removeType3ColorOperators(operatorList, isEmptyBBox = false) { - if (isEmptyBBox) { - if (!this._bbox) { - this._bbox = [Infinity, Infinity, -Infinity, -Infinity]; - } - - const charBBox = _util.Util.normalizeRect(operatorList.argsArray[0].slice(2)); - - this._bbox[0] = Math.min(this._bbox[0], charBBox[0]); - this._bbox[1] = Math.min(this._bbox[1], charBBox[1]); - this._bbox[2] = Math.max(this._bbox[2], charBBox[2]); - this._bbox[3] = Math.max(this._bbox[3], charBBox[3]); - } - - let i = 1, - ii = operatorList.length; - - while (i < ii) { - switch (operatorList.fnArray[i]) { - case _util.OPS.setStrokeColorSpace: - case _util.OPS.setFillColorSpace: - case _util.OPS.setStrokeColor: - case _util.OPS.setStrokeColorN: - case _util.OPS.setFillColor: - case _util.OPS.setFillColorN: - case _util.OPS.setStrokeGray: - case _util.OPS.setFillGray: - case _util.OPS.setStrokeRGBColor: - case _util.OPS.setFillRGBColor: - case _util.OPS.setStrokeCMYKColor: - case _util.OPS.setFillCMYKColor: - case _util.OPS.shadingFill: - case _util.OPS.setRenderingIntent: - operatorList.fnArray.splice(i, 1); - operatorList.argsArray.splice(i, 1); - ii--; - continue; - - case _util.OPS.setGState: - const [gStateObj] = operatorList.argsArray[i]; - let j = 0, - jj = gStateObj.length; - - while (j < jj) { - const [gStateKey] = gStateObj[j]; - - switch (gStateKey) { - case "TR": - case "TR2": - case "HT": - case "BG": - case "BG2": - case "UCR": - case "UCR2": - gStateObj.splice(j, 1); - jj--; - continue; - } - - j++; - } - - break; - } - - i++; - } - } - -} - -class StateManager { - constructor(initialState = new EvalState()) { - this.state = initialState; - this.stateStack = []; - } - - save() { - const old = this.state; - this.stateStack.push(this.state); - this.state = old.clone(); - } - - restore() { - const prev = this.stateStack.pop(); - - if (prev) { - this.state = prev; - } - } - - transform(args) { - this.state.ctm = _util.Util.transform(this.state.ctm, args); - } - -} - -class TextState { - constructor() { - this.ctm = new Float32Array(_util.IDENTITY_MATRIX); - this.fontName = null; - this.fontSize = 0; - this.font = null; - this.fontMatrix = _util.FONT_IDENTITY_MATRIX; - this.textMatrix = _util.IDENTITY_MATRIX.slice(); - this.textLineMatrix = _util.IDENTITY_MATRIX.slice(); - this.charSpacing = 0; - this.wordSpacing = 0; - this.leading = 0; - this.textHScale = 1; - this.textRise = 0; - } - - setTextMatrix(a, b, c, d, e, f) { - const m = this.textMatrix; - m[0] = a; - m[1] = b; - m[2] = c; - m[3] = d; - m[4] = e; - m[5] = f; - } - - setTextLineMatrix(a, b, c, d, e, f) { - const m = this.textLineMatrix; - m[0] = a; - m[1] = b; - m[2] = c; - m[3] = d; - m[4] = e; - m[5] = f; - } - - translateTextMatrix(x, y) { - const m = this.textMatrix; - m[4] = m[0] * x + m[2] * y + m[4]; - m[5] = m[1] * x + m[3] * y + m[5]; - } - - translateTextLineMatrix(x, y) { - const m = this.textLineMatrix; - m[4] = m[0] * x + m[2] * y + m[4]; - m[5] = m[1] * x + m[3] * y + m[5]; - } - - carriageReturn() { - this.translateTextLineMatrix(0, -this.leading); - this.textMatrix = this.textLineMatrix.slice(); - } - - clone() { - const clone = Object.create(this); - clone.textMatrix = this.textMatrix.slice(); - clone.textLineMatrix = this.textLineMatrix.slice(); - clone.fontMatrix = this.fontMatrix.slice(); - return clone; - } - -} - -class EvalState { - constructor() { - this.ctm = new Float32Array(_util.IDENTITY_MATRIX); - this.font = null; - this.textRenderingMode = _util.TextRenderingMode.FILL; - this.fillColorSpace = _colorspace.ColorSpace.singletons.gray; - this.strokeColorSpace = _colorspace.ColorSpace.singletons.gray; - } - - clone() { - return Object.create(this); - } - -} - -class EvaluatorPreprocessor { - static get opMap() { - const getOPMap = (0, _core_utils.getLookupTableFactory)(function (t) { - t.w = { - id: _util.OPS.setLineWidth, - numArgs: 1, - variableArgs: false - }; - t.J = { - id: _util.OPS.setLineCap, - numArgs: 1, - variableArgs: false - }; - t.j = { - id: _util.OPS.setLineJoin, - numArgs: 1, - variableArgs: false - }; - t.M = { - id: _util.OPS.setMiterLimit, - numArgs: 1, - variableArgs: false - }; - t.d = { - id: _util.OPS.setDash, - numArgs: 2, - variableArgs: false - }; - t.ri = { - id: _util.OPS.setRenderingIntent, - numArgs: 1, - variableArgs: false - }; - t.i = { - id: _util.OPS.setFlatness, - numArgs: 1, - variableArgs: false - }; - t.gs = { - id: _util.OPS.setGState, - numArgs: 1, - variableArgs: false - }; - t.q = { - id: _util.OPS.save, - numArgs: 0, - variableArgs: false - }; - t.Q = { - id: _util.OPS.restore, - numArgs: 0, - variableArgs: false - }; - t.cm = { - id: _util.OPS.transform, - numArgs: 6, - variableArgs: false - }; - t.m = { - id: _util.OPS.moveTo, - numArgs: 2, - variableArgs: false - }; - t.l = { - id: _util.OPS.lineTo, - numArgs: 2, - variableArgs: false - }; - t.c = { - id: _util.OPS.curveTo, - numArgs: 6, - variableArgs: false - }; - t.v = { - id: _util.OPS.curveTo2, - numArgs: 4, - variableArgs: false - }; - t.y = { - id: _util.OPS.curveTo3, - numArgs: 4, - variableArgs: false - }; - t.h = { - id: _util.OPS.closePath, - numArgs: 0, - variableArgs: false - }; - t.re = { - id: _util.OPS.rectangle, - numArgs: 4, - variableArgs: false - }; - t.S = { - id: _util.OPS.stroke, - numArgs: 0, - variableArgs: false - }; - t.s = { - id: _util.OPS.closeStroke, - numArgs: 0, - variableArgs: false - }; - t.f = { - id: _util.OPS.fill, - numArgs: 0, - variableArgs: false - }; - t.F = { - id: _util.OPS.fill, - numArgs: 0, - variableArgs: false - }; - t["f*"] = { - id: _util.OPS.eoFill, - numArgs: 0, - variableArgs: false - }; - t.B = { - id: _util.OPS.fillStroke, - numArgs: 0, - variableArgs: false - }; - t["B*"] = { - id: _util.OPS.eoFillStroke, - numArgs: 0, - variableArgs: false - }; - t.b = { - id: _util.OPS.closeFillStroke, - numArgs: 0, - variableArgs: false - }; - t["b*"] = { - id: _util.OPS.closeEOFillStroke, - numArgs: 0, - variableArgs: false - }; - t.n = { - id: _util.OPS.endPath, - numArgs: 0, - variableArgs: false - }; - t.W = { - id: _util.OPS.clip, - numArgs: 0, - variableArgs: false - }; - t["W*"] = { - id: _util.OPS.eoClip, - numArgs: 0, - variableArgs: false - }; - t.BT = { - id: _util.OPS.beginText, - numArgs: 0, - variableArgs: false - }; - t.ET = { - id: _util.OPS.endText, - numArgs: 0, - variableArgs: false - }; - t.Tc = { - id: _util.OPS.setCharSpacing, - numArgs: 1, - variableArgs: false - }; - t.Tw = { - id: _util.OPS.setWordSpacing, - numArgs: 1, - variableArgs: false - }; - t.Tz = { - id: _util.OPS.setHScale, - numArgs: 1, - variableArgs: false - }; - t.TL = { - id: _util.OPS.setLeading, - numArgs: 1, - variableArgs: false - }; - t.Tf = { - id: _util.OPS.setFont, - numArgs: 2, - variableArgs: false - }; - t.Tr = { - id: _util.OPS.setTextRenderingMode, - numArgs: 1, - variableArgs: false - }; - t.Ts = { - id: _util.OPS.setTextRise, - numArgs: 1, - variableArgs: false - }; - t.Td = { - id: _util.OPS.moveText, - numArgs: 2, - variableArgs: false - }; - t.TD = { - id: _util.OPS.setLeadingMoveText, - numArgs: 2, - variableArgs: false - }; - t.Tm = { - id: _util.OPS.setTextMatrix, - numArgs: 6, - variableArgs: false - }; - t["T*"] = { - id: _util.OPS.nextLine, - numArgs: 0, - variableArgs: false - }; - t.Tj = { - id: _util.OPS.showText, - numArgs: 1, - variableArgs: false - }; - t.TJ = { - id: _util.OPS.showSpacedText, - numArgs: 1, - variableArgs: false - }; - t["'"] = { - id: _util.OPS.nextLineShowText, - numArgs: 1, - variableArgs: false - }; - t['"'] = { - id: _util.OPS.nextLineSetSpacingShowText, - numArgs: 3, - variableArgs: false - }; - t.d0 = { - id: _util.OPS.setCharWidth, - numArgs: 2, - variableArgs: false - }; - t.d1 = { - id: _util.OPS.setCharWidthAndBounds, - numArgs: 6, - variableArgs: false - }; - t.CS = { - id: _util.OPS.setStrokeColorSpace, - numArgs: 1, - variableArgs: false - }; - t.cs = { - id: _util.OPS.setFillColorSpace, - numArgs: 1, - variableArgs: false - }; - t.SC = { - id: _util.OPS.setStrokeColor, - numArgs: 4, - variableArgs: true - }; - t.SCN = { - id: _util.OPS.setStrokeColorN, - numArgs: 33, - variableArgs: true - }; - t.sc = { - id: _util.OPS.setFillColor, - numArgs: 4, - variableArgs: true - }; - t.scn = { - id: _util.OPS.setFillColorN, - numArgs: 33, - variableArgs: true - }; - t.G = { - id: _util.OPS.setStrokeGray, - numArgs: 1, - variableArgs: false - }; - t.g = { - id: _util.OPS.setFillGray, - numArgs: 1, - variableArgs: false - }; - t.RG = { - id: _util.OPS.setStrokeRGBColor, - numArgs: 3, - variableArgs: false - }; - t.rg = { - id: _util.OPS.setFillRGBColor, - numArgs: 3, - variableArgs: false - }; - t.K = { - id: _util.OPS.setStrokeCMYKColor, - numArgs: 4, - variableArgs: false - }; - t.k = { - id: _util.OPS.setFillCMYKColor, - numArgs: 4, - variableArgs: false - }; - t.sh = { - id: _util.OPS.shadingFill, - numArgs: 1, - variableArgs: false - }; - t.BI = { - id: _util.OPS.beginInlineImage, - numArgs: 0, - variableArgs: false - }; - t.ID = { - id: _util.OPS.beginImageData, - numArgs: 0, - variableArgs: false - }; - t.EI = { - id: _util.OPS.endInlineImage, - numArgs: 1, - variableArgs: false - }; - t.Do = { - id: _util.OPS.paintXObject, - numArgs: 1, - variableArgs: false - }; - t.MP = { - id: _util.OPS.markPoint, - numArgs: 1, - variableArgs: false - }; - t.DP = { - id: _util.OPS.markPointProps, - numArgs: 2, - variableArgs: false - }; - t.BMC = { - id: _util.OPS.beginMarkedContent, - numArgs: 1, - variableArgs: false - }; - t.BDC = { - id: _util.OPS.beginMarkedContentProps, - numArgs: 2, - variableArgs: false - }; - t.EMC = { - id: _util.OPS.endMarkedContent, - numArgs: 0, - variableArgs: false - }; - t.BX = { - id: _util.OPS.beginCompat, - numArgs: 0, - variableArgs: false - }; - t.EX = { - id: _util.OPS.endCompat, - numArgs: 0, - variableArgs: false - }; - t.BM = null; - t.BD = null; - t.true = null; - t.fa = null; - t.fal = null; - t.fals = null; - t.false = null; - t.nu = null; - t.nul = null; - t.null = null; - }); - return (0, _util.shadow)(this, "opMap", getOPMap()); - } - - static get MAX_INVALID_PATH_OPS() { - return (0, _util.shadow)(this, "MAX_INVALID_PATH_OPS", 20); - } - - constructor(stream, xref, stateManager = new StateManager()) { - this.parser = new _parser.Parser({ - lexer: new _parser.Lexer(stream, EvaluatorPreprocessor.opMap), - xref - }); - this.stateManager = stateManager; - this.nonProcessedArgs = []; - this._numInvalidPathOPS = 0; - } - - get savedStatesDepth() { - return this.stateManager.stateStack.length; - } - - read(operation) { - let args = operation.args; - - while (true) { - const obj = this.parser.getObj(); - - if (obj instanceof _primitives.Cmd) { - const cmd = obj.cmd; - const opSpec = EvaluatorPreprocessor.opMap[cmd]; - - if (!opSpec) { - (0, _util.warn)(`Unknown command "${cmd}".`); - continue; - } - - const fn = opSpec.id; - const numArgs = opSpec.numArgs; - let argsLength = args !== null ? args.length : 0; - - if (!opSpec.variableArgs) { - if (argsLength !== numArgs) { - const nonProcessedArgs = this.nonProcessedArgs; - - while (argsLength > numArgs) { - nonProcessedArgs.push(args.shift()); - argsLength--; - } - - while (argsLength < numArgs && nonProcessedArgs.length !== 0) { - if (args === null) { - args = []; - } - - args.unshift(nonProcessedArgs.pop()); - argsLength++; - } - } - - if (argsLength < numArgs) { - const partialMsg = `command ${cmd}: expected ${numArgs} args, ` + `but received ${argsLength} args.`; - - if (fn >= _util.OPS.moveTo && fn <= _util.OPS.endPath && ++this._numInvalidPathOPS > EvaluatorPreprocessor.MAX_INVALID_PATH_OPS) { - throw new _util.FormatError(`Invalid ${partialMsg}`); - } - - (0, _util.warn)(`Skipping ${partialMsg}`); - - if (args !== null) { - args.length = 0; - } - - continue; - } - } else if (argsLength > numArgs) { - (0, _util.info)(`Command ${cmd}: expected [0, ${numArgs}] args, ` + `but received ${argsLength} args.`); - } - - this.preprocessCommand(fn, args); - operation.fn = fn; - operation.args = args; - return true; - } - - if (obj === _primitives.EOF) { - return false; - } - - if (obj !== null) { - if (args === null) { - args = []; - } - - args.push(obj); - - if (args.length > 33) { - throw new _util.FormatError("Too many arguments"); - } - } - } - } - - preprocessCommand(fn, args) { - switch (fn | 0) { - case _util.OPS.save: - this.stateManager.save(); - break; - - case _util.OPS.restore: - this.stateManager.restore(); - break; - - case _util.OPS.transform: - this.stateManager.transform(args); - break; - } - } - -} - -exports.EvaluatorPreprocessor = EvaluatorPreprocessor; - -/***/ }), -/* 26 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.IdentityCMap = exports.CMapFactory = exports.CMap = void 0; - -var _util = __w_pdfjs_require__(2); - -var _primitives = __w_pdfjs_require__(5); - -var _parser = __w_pdfjs_require__(27); - -var _core_utils = __w_pdfjs_require__(9); - -var _stream = __w_pdfjs_require__(10); - -const BUILT_IN_CMAPS = ["Adobe-GB1-UCS2", "Adobe-CNS1-UCS2", "Adobe-Japan1-UCS2", "Adobe-Korea1-UCS2", "78-EUC-H", "78-EUC-V", "78-H", "78-RKSJ-H", "78-RKSJ-V", "78-V", "78ms-RKSJ-H", "78ms-RKSJ-V", "83pv-RKSJ-H", "90ms-RKSJ-H", "90ms-RKSJ-V", "90msp-RKSJ-H", "90msp-RKSJ-V", "90pv-RKSJ-H", "90pv-RKSJ-V", "Add-H", "Add-RKSJ-H", "Add-RKSJ-V", "Add-V", "Adobe-CNS1-0", "Adobe-CNS1-1", "Adobe-CNS1-2", "Adobe-CNS1-3", "Adobe-CNS1-4", "Adobe-CNS1-5", "Adobe-CNS1-6", "Adobe-GB1-0", "Adobe-GB1-1", "Adobe-GB1-2", "Adobe-GB1-3", "Adobe-GB1-4", "Adobe-GB1-5", "Adobe-Japan1-0", "Adobe-Japan1-1", "Adobe-Japan1-2", "Adobe-Japan1-3", "Adobe-Japan1-4", "Adobe-Japan1-5", "Adobe-Japan1-6", "Adobe-Korea1-0", "Adobe-Korea1-1", "Adobe-Korea1-2", "B5-H", "B5-V", "B5pc-H", "B5pc-V", "CNS-EUC-H", "CNS-EUC-V", "CNS1-H", "CNS1-V", "CNS2-H", "CNS2-V", "ETHK-B5-H", "ETHK-B5-V", "ETen-B5-H", "ETen-B5-V", "ETenms-B5-H", "ETenms-B5-V", "EUC-H", "EUC-V", "Ext-H", "Ext-RKSJ-H", "Ext-RKSJ-V", "Ext-V", "GB-EUC-H", "GB-EUC-V", "GB-H", "GB-V", "GBK-EUC-H", "GBK-EUC-V", "GBK2K-H", "GBK2K-V", "GBKp-EUC-H", "GBKp-EUC-V", "GBT-EUC-H", "GBT-EUC-V", "GBT-H", "GBT-V", "GBTpc-EUC-H", "GBTpc-EUC-V", "GBpc-EUC-H", "GBpc-EUC-V", "H", "HKdla-B5-H", "HKdla-B5-V", "HKdlb-B5-H", "HKdlb-B5-V", "HKgccs-B5-H", "HKgccs-B5-V", "HKm314-B5-H", "HKm314-B5-V", "HKm471-B5-H", "HKm471-B5-V", "HKscs-B5-H", "HKscs-B5-V", "Hankaku", "Hiragana", "KSC-EUC-H", "KSC-EUC-V", "KSC-H", "KSC-Johab-H", "KSC-Johab-V", "KSC-V", "KSCms-UHC-H", "KSCms-UHC-HW-H", "KSCms-UHC-HW-V", "KSCms-UHC-V", "KSCpc-EUC-H", "KSCpc-EUC-V", "Katakana", "NWP-H", "NWP-V", "RKSJ-H", "RKSJ-V", "Roman", "UniCNS-UCS2-H", "UniCNS-UCS2-V", "UniCNS-UTF16-H", "UniCNS-UTF16-V", "UniCNS-UTF32-H", "UniCNS-UTF32-V", "UniCNS-UTF8-H", "UniCNS-UTF8-V", "UniGB-UCS2-H", "UniGB-UCS2-V", "UniGB-UTF16-H", "UniGB-UTF16-V", "UniGB-UTF32-H", "UniGB-UTF32-V", "UniGB-UTF8-H", "UniGB-UTF8-V", "UniJIS-UCS2-H", "UniJIS-UCS2-HW-H", "UniJIS-UCS2-HW-V", "UniJIS-UCS2-V", "UniJIS-UTF16-H", "UniJIS-UTF16-V", "UniJIS-UTF32-H", "UniJIS-UTF32-V", "UniJIS-UTF8-H", "UniJIS-UTF8-V", "UniJIS2004-UTF16-H", "UniJIS2004-UTF16-V", "UniJIS2004-UTF32-H", "UniJIS2004-UTF32-V", "UniJIS2004-UTF8-H", "UniJIS2004-UTF8-V", "UniJISPro-UCS2-HW-V", "UniJISPro-UCS2-V", "UniJISPro-UTF8-V", "UniJISX0213-UTF32-H", "UniJISX0213-UTF32-V", "UniJISX02132004-UTF32-H", "UniJISX02132004-UTF32-V", "UniKS-UCS2-H", "UniKS-UCS2-V", "UniKS-UTF16-H", "UniKS-UTF16-V", "UniKS-UTF32-H", "UniKS-UTF32-V", "UniKS-UTF8-H", "UniKS-UTF8-V", "V", "WP-Symbol"]; -const MAX_MAP_RANGE = 2 ** 24 - 1; - -class CMap { - constructor(builtInCMap = false) { - this.codespaceRanges = [[], [], [], []]; - this.numCodespaceRanges = 0; - this._map = []; - this.name = ""; - this.vertical = false; - this.useCMap = null; - this.builtInCMap = builtInCMap; - } - - addCodespaceRange(n, low, high) { - this.codespaceRanges[n - 1].push(low, high); - this.numCodespaceRanges++; - } - - mapCidRange(low, high, dstLow) { - if (high - low > MAX_MAP_RANGE) { - throw new Error("mapCidRange - ignoring data above MAX_MAP_RANGE."); - } - - while (low <= high) { - this._map[low++] = dstLow++; - } - } - - mapBfRange(low, high, dstLow) { - if (high - low > MAX_MAP_RANGE) { - throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE."); - } - - const lastByte = dstLow.length - 1; - - while (low <= high) { - this._map[low++] = dstLow; - const nextCharCode = dstLow.charCodeAt(lastByte) + 1; - - if (nextCharCode > 0xff) { - dstLow = dstLow.substring(0, lastByte - 1) + String.fromCharCode(dstLow.charCodeAt(lastByte - 1) + 1) + "\x00"; - continue; - } - - dstLow = dstLow.substring(0, lastByte) + String.fromCharCode(nextCharCode); - } - } - - mapBfRangeToArray(low, high, array) { - if (high - low > MAX_MAP_RANGE) { - throw new Error("mapBfRangeToArray - ignoring data above MAX_MAP_RANGE."); - } - - const ii = array.length; - let i = 0; - - while (low <= high && i < ii) { - this._map[low] = array[i++]; - ++low; - } - } - - mapOne(src, dst) { - this._map[src] = dst; - } - - lookup(code) { - return this._map[code]; - } - - contains(code) { - return this._map[code] !== undefined; - } - - forEach(callback) { - const map = this._map; - const length = map.length; - - if (length <= 0x10000) { - for (let i = 0; i < length; i++) { - if (map[i] !== undefined) { - callback(i, map[i]); - } - } - } else { - for (const i in map) { - callback(i, map[i]); - } - } - } - - charCodeOf(value) { - const map = this._map; - - if (map.length <= 0x10000) { - return map.indexOf(value); - } - - for (const charCode in map) { - if (map[charCode] === value) { - return charCode | 0; - } - } - - return -1; - } - - getMap() { - return this._map; - } - - readCharCode(str, offset, out) { - let c = 0; - const codespaceRanges = this.codespaceRanges; - - for (let n = 0, nn = codespaceRanges.length; n < nn; n++) { - c = (c << 8 | str.charCodeAt(offset + n)) >>> 0; - const codespaceRange = codespaceRanges[n]; - - for (let k = 0, kk = codespaceRange.length; k < kk;) { - const low = codespaceRange[k++]; - const high = codespaceRange[k++]; - - if (c >= low && c <= high) { - out.charcode = c; - out.length = n + 1; - return; - } - } - } - - out.charcode = 0; - out.length = 1; - } - - getCharCodeLength(charCode) { - const codespaceRanges = this.codespaceRanges; - - for (let n = 0, nn = codespaceRanges.length; n < nn; n++) { - const codespaceRange = codespaceRanges[n]; - - for (let k = 0, kk = codespaceRange.length; k < kk;) { - const low = codespaceRange[k++]; - const high = codespaceRange[k++]; - - if (charCode >= low && charCode <= high) { - return n + 1; - } - } - } - - return 1; - } - - get length() { - return this._map.length; - } - - get isIdentityCMap() { - if (!(this.name === "Identity-H" || this.name === "Identity-V")) { - return false; - } - - if (this._map.length !== 0x10000) { - return false; - } - - for (let i = 0; i < 0x10000; i++) { - if (this._map[i] !== i) { - return false; - } - } - - return true; - } - -} - -exports.CMap = CMap; - -class IdentityCMap extends CMap { - constructor(vertical, n) { - super(); - this.vertical = vertical; - this.addCodespaceRange(n, 0, 0xffff); - } - - mapCidRange(low, high, dstLow) { - (0, _util.unreachable)("should not call mapCidRange"); - } - - mapBfRange(low, high, dstLow) { - (0, _util.unreachable)("should not call mapBfRange"); - } - - mapBfRangeToArray(low, high, array) { - (0, _util.unreachable)("should not call mapBfRangeToArray"); - } - - mapOne(src, dst) { - (0, _util.unreachable)("should not call mapCidOne"); - } - - lookup(code) { - return Number.isInteger(code) && code <= 0xffff ? code : undefined; - } - - contains(code) { - return Number.isInteger(code) && code <= 0xffff; - } - - forEach(callback) { - for (let i = 0; i <= 0xffff; i++) { - callback(i, i); - } - } - - charCodeOf(value) { - return Number.isInteger(value) && value <= 0xffff ? value : -1; - } - - getMap() { - const map = new Array(0x10000); - - for (let i = 0; i <= 0xffff; i++) { - map[i] = i; - } - - return map; - } - - get length() { - return 0x10000; - } - - get isIdentityCMap() { - (0, _util.unreachable)("should not access .isIdentityCMap"); - } - -} - -exports.IdentityCMap = IdentityCMap; - -const BinaryCMapReader = function BinaryCMapReaderClosure() { - function hexToInt(a, size) { - let n = 0; - - for (let i = 0; i <= size; i++) { - n = n << 8 | a[i]; - } - - return n >>> 0; - } - - function hexToStr(a, size) { - if (size === 1) { - return String.fromCharCode(a[0], a[1]); - } - - if (size === 3) { - return String.fromCharCode(a[0], a[1], a[2], a[3]); - } - - return String.fromCharCode.apply(null, a.subarray(0, size + 1)); - } - - function addHex(a, b, size) { - let c = 0; - - for (let i = size; i >= 0; i--) { - c += a[i] + b[i]; - a[i] = c & 255; - c >>= 8; - } - } - - function incHex(a, size) { - let c = 1; - - for (let i = size; i >= 0 && c > 0; i--) { - c += a[i]; - a[i] = c & 255; - c >>= 8; - } - } - - const MAX_NUM_SIZE = 16; - const MAX_ENCODED_NUM_SIZE = 19; - - class BinaryCMapStream { - constructor(data) { - this.buffer = data; - this.pos = 0; - this.end = data.length; - this.tmpBuf = new Uint8Array(MAX_ENCODED_NUM_SIZE); - } - - readByte() { - if (this.pos >= this.end) { - return -1; - } - - return this.buffer[this.pos++]; - } - - readNumber() { - let n = 0; - let last; - - do { - const b = this.readByte(); - - if (b < 0) { - throw new _util.FormatError("unexpected EOF in bcmap"); - } - - last = !(b & 0x80); - n = n << 7 | b & 0x7f; - } while (!last); - - return n; - } - - readSigned() { - const n = this.readNumber(); - return n & 1 ? ~(n >>> 1) : n >>> 1; - } - - readHex(num, size) { - num.set(this.buffer.subarray(this.pos, this.pos + size + 1)); - this.pos += size + 1; - } - - readHexNumber(num, size) { - let last; - const stack = this.tmpBuf; - let sp = 0; - - do { - const b = this.readByte(); - - if (b < 0) { - throw new _util.FormatError("unexpected EOF in bcmap"); - } - - last = !(b & 0x80); - stack[sp++] = b & 0x7f; - } while (!last); - - let i = size, - buffer = 0, - bufferSize = 0; - - while (i >= 0) { - while (bufferSize < 8 && stack.length > 0) { - buffer |= stack[--sp] << bufferSize; - bufferSize += 7; - } - - num[i] = buffer & 255; - i--; - buffer >>= 8; - bufferSize -= 8; - } - } - - readHexSigned(num, size) { - this.readHexNumber(num, size); - const sign = num[size] & 1 ? 255 : 0; - let c = 0; - - for (let i = 0; i <= size; i++) { - c = (c & 1) << 8 | num[i]; - num[i] = c >> 1 ^ sign; - } - } - - readString() { - const len = this.readNumber(); - let s = ""; - - for (let i = 0; i < len; i++) { - s += String.fromCharCode(this.readNumber()); - } - - return s; - } - - } - - class BinaryCMapReader { - async process(data, cMap, extend) { - const stream = new BinaryCMapStream(data); - const header = stream.readByte(); - cMap.vertical = !!(header & 1); - let useCMap = null; - const start = new Uint8Array(MAX_NUM_SIZE); - const end = new Uint8Array(MAX_NUM_SIZE); - const char = new Uint8Array(MAX_NUM_SIZE); - const charCode = new Uint8Array(MAX_NUM_SIZE); - const tmp = new Uint8Array(MAX_NUM_SIZE); - let code; - let b; - - while ((b = stream.readByte()) >= 0) { - const type = b >> 5; - - if (type === 7) { - switch (b & 0x1f) { - case 0: - stream.readString(); - break; - - case 1: - useCMap = stream.readString(); - break; - } - - continue; - } - - const sequence = !!(b & 0x10); - const dataSize = b & 15; - - if (dataSize + 1 > MAX_NUM_SIZE) { - throw new Error("BinaryCMapReader.process: Invalid dataSize."); - } - - const ucs2DataSize = 1; - const subitemsCount = stream.readNumber(); - - switch (type) { - case 0: - stream.readHex(start, dataSize); - stream.readHexNumber(end, dataSize); - addHex(end, start, dataSize); - cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize)); - - for (let i = 1; i < subitemsCount; i++) { - incHex(end, dataSize); - stream.readHexNumber(start, dataSize); - addHex(start, end, dataSize); - stream.readHexNumber(end, dataSize); - addHex(end, start, dataSize); - cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize)); - } - - break; - - case 1: - stream.readHex(start, dataSize); - stream.readHexNumber(end, dataSize); - addHex(end, start, dataSize); - stream.readNumber(); - - for (let i = 1; i < subitemsCount; i++) { - incHex(end, dataSize); - stream.readHexNumber(start, dataSize); - addHex(start, end, dataSize); - stream.readHexNumber(end, dataSize); - addHex(end, start, dataSize); - stream.readNumber(); - } - - break; - - case 2: - stream.readHex(char, dataSize); - code = stream.readNumber(); - cMap.mapOne(hexToInt(char, dataSize), code); - - for (let i = 1; i < subitemsCount; i++) { - incHex(char, dataSize); - - if (!sequence) { - stream.readHexNumber(tmp, dataSize); - addHex(char, tmp, dataSize); - } - - code = stream.readSigned() + (code + 1); - cMap.mapOne(hexToInt(char, dataSize), code); - } - - break; - - case 3: - stream.readHex(start, dataSize); - stream.readHexNumber(end, dataSize); - addHex(end, start, dataSize); - code = stream.readNumber(); - cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code); - - for (let i = 1; i < subitemsCount; i++) { - incHex(end, dataSize); - - if (!sequence) { - stream.readHexNumber(start, dataSize); - addHex(start, end, dataSize); - } else { - start.set(end); - } - - stream.readHexNumber(end, dataSize); - addHex(end, start, dataSize); - code = stream.readNumber(); - cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code); - } - - break; - - case 4: - stream.readHex(char, ucs2DataSize); - stream.readHex(charCode, dataSize); - cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize)); - - for (let i = 1; i < subitemsCount; i++) { - incHex(char, ucs2DataSize); - - if (!sequence) { - stream.readHexNumber(tmp, ucs2DataSize); - addHex(char, tmp, ucs2DataSize); - } - - incHex(charCode, dataSize); - stream.readHexSigned(tmp, dataSize); - addHex(charCode, tmp, dataSize); - cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize)); - } - - break; - - case 5: - stream.readHex(start, ucs2DataSize); - stream.readHexNumber(end, ucs2DataSize); - addHex(end, start, ucs2DataSize); - stream.readHex(charCode, dataSize); - cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize)); - - for (let i = 1; i < subitemsCount; i++) { - incHex(end, ucs2DataSize); - - if (!sequence) { - stream.readHexNumber(start, ucs2DataSize); - addHex(start, end, ucs2DataSize); - } else { - start.set(end); - } - - stream.readHexNumber(end, ucs2DataSize); - addHex(end, start, ucs2DataSize); - stream.readHex(charCode, dataSize); - cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize)); - } - - break; - - default: - throw new Error(`BinaryCMapReader.process - unknown type: ${type}`); - } - } - - if (useCMap) { - return extend(useCMap); - } - - return cMap; - } - - } - - return BinaryCMapReader; -}(); - -const CMapFactory = function CMapFactoryClosure() { - function strToInt(str) { - let a = 0; - - for (let i = 0; i < str.length; i++) { - a = a << 8 | str.charCodeAt(i); - } - - return a >>> 0; - } - - function expectString(obj) { - if (!(0, _util.isString)(obj)) { - throw new _util.FormatError("Malformed CMap: expected string."); - } - } - - function expectInt(obj) { - if (!Number.isInteger(obj)) { - throw new _util.FormatError("Malformed CMap: expected int."); - } - } - - function parseBfChar(cMap, lexer) { - while (true) { - let obj = lexer.getObj(); - - if (obj === _primitives.EOF) { - break; - } - - if ((0, _primitives.isCmd)(obj, "endbfchar")) { - return; - } - - expectString(obj); - const src = strToInt(obj); - obj = lexer.getObj(); - expectString(obj); - const dst = obj; - cMap.mapOne(src, dst); - } - } - - function parseBfRange(cMap, lexer) { - while (true) { - let obj = lexer.getObj(); - - if (obj === _primitives.EOF) { - break; - } - - if ((0, _primitives.isCmd)(obj, "endbfrange")) { - return; - } - - expectString(obj); - const low = strToInt(obj); - obj = lexer.getObj(); - expectString(obj); - const high = strToInt(obj); - obj = lexer.getObj(); - - if (Number.isInteger(obj) || (0, _util.isString)(obj)) { - const dstLow = Number.isInteger(obj) ? String.fromCharCode(obj) : obj; - cMap.mapBfRange(low, high, dstLow); - } else if ((0, _primitives.isCmd)(obj, "[")) { - obj = lexer.getObj(); - const array = []; - - while (!(0, _primitives.isCmd)(obj, "]") && obj !== _primitives.EOF) { - array.push(obj); - obj = lexer.getObj(); - } - - cMap.mapBfRangeToArray(low, high, array); - } else { - break; - } - } - - throw new _util.FormatError("Invalid bf range."); - } - - function parseCidChar(cMap, lexer) { - while (true) { - let obj = lexer.getObj(); - - if (obj === _primitives.EOF) { - break; - } - - if ((0, _primitives.isCmd)(obj, "endcidchar")) { - return; - } - - expectString(obj); - const src = strToInt(obj); - obj = lexer.getObj(); - expectInt(obj); - const dst = obj; - cMap.mapOne(src, dst); - } - } - - function parseCidRange(cMap, lexer) { - while (true) { - let obj = lexer.getObj(); - - if (obj === _primitives.EOF) { - break; - } - - if ((0, _primitives.isCmd)(obj, "endcidrange")) { - return; - } - - expectString(obj); - const low = strToInt(obj); - obj = lexer.getObj(); - expectString(obj); - const high = strToInt(obj); - obj = lexer.getObj(); - expectInt(obj); - const dstLow = obj; - cMap.mapCidRange(low, high, dstLow); - } - } - - function parseCodespaceRange(cMap, lexer) { - while (true) { - let obj = lexer.getObj(); - - if (obj === _primitives.EOF) { - break; - } - - if ((0, _primitives.isCmd)(obj, "endcodespacerange")) { - return; - } - - if (!(0, _util.isString)(obj)) { - break; - } - - const low = strToInt(obj); - obj = lexer.getObj(); - - if (!(0, _util.isString)(obj)) { - break; - } - - const high = strToInt(obj); - cMap.addCodespaceRange(obj.length, low, high); - } - - throw new _util.FormatError("Invalid codespace range."); - } - - function parseWMode(cMap, lexer) { - const obj = lexer.getObj(); - - if (Number.isInteger(obj)) { - cMap.vertical = !!obj; - } - } - - function parseCMapName(cMap, lexer) { - const obj = lexer.getObj(); - - if ((0, _primitives.isName)(obj) && (0, _util.isString)(obj.name)) { - cMap.name = obj.name; - } - } - - async function parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap) { - let previous, embeddedUseCMap; - - objLoop: while (true) { - try { - const obj = lexer.getObj(); - - if (obj === _primitives.EOF) { - break; - } else if ((0, _primitives.isName)(obj)) { - if (obj.name === "WMode") { - parseWMode(cMap, lexer); - } else if (obj.name === "CMapName") { - parseCMapName(cMap, lexer); - } - - previous = obj; - } else if ((0, _primitives.isCmd)(obj)) { - switch (obj.cmd) { - case "endcmap": - break objLoop; - - case "usecmap": - if ((0, _primitives.isName)(previous)) { - embeddedUseCMap = previous.name; - } - - break; - - case "begincodespacerange": - parseCodespaceRange(cMap, lexer); - break; - - case "beginbfchar": - parseBfChar(cMap, lexer); - break; - - case "begincidchar": - parseCidChar(cMap, lexer); - break; - - case "beginbfrange": - parseBfRange(cMap, lexer); - break; - - case "begincidrange": - parseCidRange(cMap, lexer); - break; - } - } - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - - (0, _util.warn)("Invalid cMap data: " + ex); - continue; - } - } - - if (!useCMap && embeddedUseCMap) { - useCMap = embeddedUseCMap; - } - - if (useCMap) { - return extendCMap(cMap, fetchBuiltInCMap, useCMap); - } - - return cMap; - } - - async function extendCMap(cMap, fetchBuiltInCMap, useCMap) { - cMap.useCMap = await createBuiltInCMap(useCMap, fetchBuiltInCMap); - - if (cMap.numCodespaceRanges === 0) { - const useCodespaceRanges = cMap.useCMap.codespaceRanges; - - for (let i = 0; i < useCodespaceRanges.length; i++) { - cMap.codespaceRanges[i] = useCodespaceRanges[i].slice(); - } - - cMap.numCodespaceRanges = cMap.useCMap.numCodespaceRanges; - } - - cMap.useCMap.forEach(function (key, value) { - if (!cMap.contains(key)) { - cMap.mapOne(key, cMap.useCMap.lookup(key)); - } - }); - return cMap; - } - - async function createBuiltInCMap(name, fetchBuiltInCMap) { - if (name === "Identity-H") { - return new IdentityCMap(false, 2); - } else if (name === "Identity-V") { - return new IdentityCMap(true, 2); - } - - if (!BUILT_IN_CMAPS.includes(name)) { - throw new Error("Unknown CMap name: " + name); - } - - if (!fetchBuiltInCMap) { - throw new Error("Built-in CMap parameters are not provided."); - } - - const { - cMapData, - compressionType - } = await fetchBuiltInCMap(name); - const cMap = new CMap(true); - - if (compressionType === _util.CMapCompressionType.BINARY) { - return new BinaryCMapReader().process(cMapData, cMap, useCMap => { - return extendCMap(cMap, fetchBuiltInCMap, useCMap); - }); - } - - if (compressionType === _util.CMapCompressionType.NONE) { - const lexer = new _parser.Lexer(new _stream.Stream(cMapData)); - return parseCMap(cMap, lexer, fetchBuiltInCMap, null); - } - - throw new Error("TODO: Only BINARY/NONE CMap compression is currently supported."); - } - - return { - async create(params) { - const encoding = params.encoding; - const fetchBuiltInCMap = params.fetchBuiltInCMap; - const useCMap = params.useCMap; - - if ((0, _primitives.isName)(encoding)) { - return createBuiltInCMap(encoding.name, fetchBuiltInCMap); - } else if ((0, _primitives.isStream)(encoding)) { - const parsedCMap = await parseCMap(new CMap(), new _parser.Lexer(encoding), fetchBuiltInCMap, useCMap); - - if (parsedCMap.isIdentityCMap) { - return createBuiltInCMap(parsedCMap.name, fetchBuiltInCMap); - } - - return parsedCMap; - } - - throw new Error("Encoding required."); - } - - }; -}(); - -exports.CMapFactory = CMapFactory; - -/***/ }), -/* 27 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Parser = exports.Linearization = exports.Lexer = void 0; - -var _util = __w_pdfjs_require__(2); - -var _primitives = __w_pdfjs_require__(5); - -var _core_utils = __w_pdfjs_require__(9); - -var _ascii_85_stream = __w_pdfjs_require__(28); - -var _ascii_hex_stream = __w_pdfjs_require__(30); - -var _ccitt_stream = __w_pdfjs_require__(31); - -var _flate_stream = __w_pdfjs_require__(33); - -var _jbig2_stream = __w_pdfjs_require__(34); - -var _jpeg_stream = __w_pdfjs_require__(37); - -var _jpx_stream = __w_pdfjs_require__(39); - -var _lzw_stream = __w_pdfjs_require__(41); - -var _stream = __w_pdfjs_require__(10); - -var _predictor_stream = __w_pdfjs_require__(42); - -var _run_length_stream = __w_pdfjs_require__(43); - -const MAX_LENGTH_TO_CACHE = 1000; -const MAX_ADLER32_LENGTH = 5552; - -function computeAdler32(bytes) { - const bytesLength = bytes.length; - let a = 1, - b = 0; - - for (let i = 0; i < bytesLength; ++i) { - a += bytes[i] & 0xff; - b += a; - } - - return b % 65521 << 16 | a % 65521; -} - -class Parser { - constructor({ - lexer, - xref, - allowStreams = false, - recoveryMode = false - }) { - this.lexer = lexer; - this.xref = xref; - this.allowStreams = allowStreams; - this.recoveryMode = recoveryMode; - this.imageCache = Object.create(null); - this.refill(); - } - - refill() { - this.buf1 = this.lexer.getObj(); - this.buf2 = this.lexer.getObj(); - } - - shift() { - if (this.buf2 instanceof _primitives.Cmd && this.buf2.cmd === "ID") { - this.buf1 = this.buf2; - this.buf2 = null; - } else { - this.buf1 = this.buf2; - this.buf2 = this.lexer.getObj(); - } - } - - tryShift() { - try { - this.shift(); - return true; - } catch (e) { - if (e instanceof _core_utils.MissingDataException) { - throw e; - } - - return false; - } - } - - getObj(cipherTransform = null) { - const buf1 = this.buf1; - this.shift(); - - if (buf1 instanceof _primitives.Cmd) { - switch (buf1.cmd) { - case "BI": - return this.makeInlineImage(cipherTransform); - - case "[": - const array = []; - - while (!(0, _primitives.isCmd)(this.buf1, "]") && this.buf1 !== _primitives.EOF) { - array.push(this.getObj(cipherTransform)); - } - - if (this.buf1 === _primitives.EOF) { - if (this.recoveryMode) { - return array; - } - - throw new _core_utils.ParserEOFException("End of file inside array."); - } - - this.shift(); - return array; - - case "<<": - const dict = new _primitives.Dict(this.xref); - - while (!(0, _primitives.isCmd)(this.buf1, ">>") && this.buf1 !== _primitives.EOF) { - if (!(0, _primitives.isName)(this.buf1)) { - (0, _util.info)("Malformed dictionary: key must be a name object"); - this.shift(); - continue; - } - - const key = this.buf1.name; - this.shift(); - - if (this.buf1 === _primitives.EOF) { - break; - } - - dict.set(key, this.getObj(cipherTransform)); - } - - if (this.buf1 === _primitives.EOF) { - if (this.recoveryMode) { - return dict; - } - - throw new _core_utils.ParserEOFException("End of file inside dictionary."); - } - - if ((0, _primitives.isCmd)(this.buf2, "stream")) { - return this.allowStreams ? this.makeStream(dict, cipherTransform) : dict; - } - - this.shift(); - return dict; - - default: - return buf1; - } - } - - if (Number.isInteger(buf1)) { - if (Number.isInteger(this.buf1) && (0, _primitives.isCmd)(this.buf2, "R")) { - const ref = _primitives.Ref.get(buf1, this.buf1); - - this.shift(); - this.shift(); - return ref; - } - - return buf1; - } - - if (typeof buf1 === "string") { - if (cipherTransform) { - return cipherTransform.decryptString(buf1); - } - - return buf1; - } - - return buf1; - } - - findDefaultInlineStreamEnd(stream) { - const E = 0x45, - I = 0x49, - SPACE = 0x20, - LF = 0xa, - CR = 0xd, - NUL = 0x0; - const lexer = this.lexer, - startPos = stream.pos, - n = 10; - let state = 0, - ch, - maybeEIPos; - - while ((ch = stream.getByte()) !== -1) { - if (state === 0) { - state = ch === E ? 1 : 0; - } else if (state === 1) { - state = ch === I ? 2 : 0; - } else { - (0, _util.assert)(state === 2, "findDefaultInlineStreamEnd - invalid state."); - - if (ch === SPACE || ch === LF || ch === CR) { - maybeEIPos = stream.pos; - const followingBytes = stream.peekBytes(n); - - for (let i = 0, ii = followingBytes.length; i < ii; i++) { - ch = followingBytes[i]; - - if (ch === NUL && followingBytes[i + 1] !== NUL) { - continue; - } - - if (ch !== LF && ch !== CR && (ch < SPACE || ch > 0x7f)) { - state = 0; - break; - } - } - - if (state !== 2) { - continue; - } - - if (lexer.knownCommands) { - const nextObj = lexer.peekObj(); - - if (nextObj instanceof _primitives.Cmd && !lexer.knownCommands[nextObj.cmd]) { - state = 0; - } - } else { - (0, _util.warn)("findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined."); - } - - if (state === 2) { - break; - } - } else { - state = 0; - } - } - } - - if (ch === -1) { - (0, _util.warn)("findDefaultInlineStreamEnd: " + "Reached the end of the stream without finding a valid EI marker"); - - if (maybeEIPos) { - (0, _util.warn)('... trying to recover by using the last "EI" occurrence.'); - stream.skip(-(stream.pos - maybeEIPos)); - } - } - - let endOffset = 4; - stream.skip(-endOffset); - ch = stream.peekByte(); - stream.skip(endOffset); - - if (!(0, _core_utils.isWhiteSpace)(ch)) { - endOffset--; - } - - return stream.pos - endOffset - startPos; - } - - findDCTDecodeInlineStreamEnd(stream) { - const startPos = stream.pos; - let foundEOI = false, - b, - markerLength; - - while ((b = stream.getByte()) !== -1) { - if (b !== 0xff) { - continue; - } - - switch (stream.getByte()) { - case 0x00: - break; - - case 0xff: - stream.skip(-1); - break; - - case 0xd9: - foundEOI = true; - break; - - case 0xc0: - case 0xc1: - case 0xc2: - case 0xc3: - case 0xc5: - case 0xc6: - case 0xc7: - case 0xc9: - case 0xca: - case 0xcb: - case 0xcd: - case 0xce: - case 0xcf: - case 0xc4: - case 0xcc: - case 0xda: - case 0xdb: - case 0xdc: - case 0xdd: - case 0xde: - case 0xdf: - case 0xe0: - case 0xe1: - case 0xe2: - case 0xe3: - case 0xe4: - case 0xe5: - case 0xe6: - case 0xe7: - case 0xe8: - case 0xe9: - case 0xea: - case 0xeb: - case 0xec: - case 0xed: - case 0xee: - case 0xef: - case 0xfe: - markerLength = stream.getUint16(); - - if (markerLength > 2) { - stream.skip(markerLength - 2); - } else { - stream.skip(-2); - } - - break; - } - - if (foundEOI) { - break; - } - } - - const length = stream.pos - startPos; - - if (b === -1) { - (0, _util.warn)("Inline DCTDecode image stream: " + "EOI marker not found, searching for /EI/ instead."); - stream.skip(-length); - return this.findDefaultInlineStreamEnd(stream); - } - - this.inlineStreamSkipEI(stream); - return length; - } - - findASCII85DecodeInlineStreamEnd(stream) { - const TILDE = 0x7e, - GT = 0x3e; - const startPos = stream.pos; - let ch; - - while ((ch = stream.getByte()) !== -1) { - if (ch === TILDE) { - const tildePos = stream.pos; - ch = stream.peekByte(); - - while ((0, _core_utils.isWhiteSpace)(ch)) { - stream.skip(); - ch = stream.peekByte(); - } - - if (ch === GT) { - stream.skip(); - break; - } - - if (stream.pos > tildePos) { - const maybeEI = stream.peekBytes(2); - - if (maybeEI[0] === 0x45 && maybeEI[1] === 0x49) { - break; - } - } - } - } - - const length = stream.pos - startPos; - - if (ch === -1) { - (0, _util.warn)("Inline ASCII85Decode image stream: " + "EOD marker not found, searching for /EI/ instead."); - stream.skip(-length); - return this.findDefaultInlineStreamEnd(stream); - } - - this.inlineStreamSkipEI(stream); - return length; - } - - findASCIIHexDecodeInlineStreamEnd(stream) { - const GT = 0x3e; - const startPos = stream.pos; - let ch; - - while ((ch = stream.getByte()) !== -1) { - if (ch === GT) { - break; - } - } - - const length = stream.pos - startPos; - - if (ch === -1) { - (0, _util.warn)("Inline ASCIIHexDecode image stream: " + "EOD marker not found, searching for /EI/ instead."); - stream.skip(-length); - return this.findDefaultInlineStreamEnd(stream); - } - - this.inlineStreamSkipEI(stream); - return length; - } - - inlineStreamSkipEI(stream) { - const E = 0x45, - I = 0x49; - let state = 0, - ch; - - while ((ch = stream.getByte()) !== -1) { - if (state === 0) { - state = ch === E ? 1 : 0; - } else if (state === 1) { - state = ch === I ? 2 : 0; - } else if (state === 2) { - break; - } - } - } - - makeInlineImage(cipherTransform) { - const lexer = this.lexer; - const stream = lexer.stream; - const dict = new _primitives.Dict(this.xref); - let dictLength; - - while (!(0, _primitives.isCmd)(this.buf1, "ID") && this.buf1 !== _primitives.EOF) { - if (!(0, _primitives.isName)(this.buf1)) { - throw new _util.FormatError("Dictionary key must be a name object"); - } - - const key = this.buf1.name; - this.shift(); - - if (this.buf1 === _primitives.EOF) { - break; - } - - dict.set(key, this.getObj(cipherTransform)); - } - - if (lexer.beginInlineImagePos !== -1) { - dictLength = stream.pos - lexer.beginInlineImagePos; - } - - const filter = dict.get("F", "Filter"); - let filterName; - - if ((0, _primitives.isName)(filter)) { - filterName = filter.name; - } else if (Array.isArray(filter)) { - const filterZero = this.xref.fetchIfRef(filter[0]); - - if ((0, _primitives.isName)(filterZero)) { - filterName = filterZero.name; - } - } - - const startPos = stream.pos; - let length; - - switch (filterName) { - case "DCT": - case "DCTDecode": - length = this.findDCTDecodeInlineStreamEnd(stream); - break; - - case "A85": - case "ASCII85Decode": - length = this.findASCII85DecodeInlineStreamEnd(stream); - break; - - case "AHx": - case "ASCIIHexDecode": - length = this.findASCIIHexDecodeInlineStreamEnd(stream); - break; - - default: - length = this.findDefaultInlineStreamEnd(stream); - } - - let imageStream = stream.makeSubStream(startPos, length, dict); - let cacheKey; - - if (length < MAX_LENGTH_TO_CACHE && dictLength < MAX_ADLER32_LENGTH) { - const imageBytes = imageStream.getBytes(); - imageStream.reset(); - const initialStreamPos = stream.pos; - stream.pos = lexer.beginInlineImagePos; - const dictBytes = stream.getBytes(dictLength); - stream.pos = initialStreamPos; - cacheKey = computeAdler32(imageBytes) + "_" + computeAdler32(dictBytes); - const cacheEntry = this.imageCache[cacheKey]; - - if (cacheEntry !== undefined) { - this.buf2 = _primitives.Cmd.get("EI"); - this.shift(); - cacheEntry.reset(); - return cacheEntry; - } - } - - if (cipherTransform) { - imageStream = cipherTransform.createStream(imageStream, length); - } - - imageStream = this.filter(imageStream, dict, length); - imageStream.dict = dict; - - if (cacheKey !== undefined) { - imageStream.cacheKey = `inline_${length}_${cacheKey}`; - this.imageCache[cacheKey] = imageStream; - } - - this.buf2 = _primitives.Cmd.get("EI"); - this.shift(); - return imageStream; - } - - _findStreamLength(startPos, signature) { - const { - stream - } = this.lexer; - stream.pos = startPos; - const SCAN_BLOCK_LENGTH = 2048; - const signatureLength = signature.length; - - while (stream.pos < stream.end) { - const scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH); - const scanLength = scanBytes.length - signatureLength; - - if (scanLength <= 0) { - break; - } - - let pos = 0; - - while (pos < scanLength) { - let j = 0; - - while (j < signatureLength && scanBytes[pos + j] === signature[j]) { - j++; - } - - if (j >= signatureLength) { - stream.pos += pos; - return stream.pos - startPos; - } - - pos++; - } - - stream.pos += scanLength; - } - - return -1; - } - - makeStream(dict, cipherTransform) { - const lexer = this.lexer; - let stream = lexer.stream; - lexer.skipToNextLine(); - const startPos = stream.pos - 1; - let length = dict.get("Length"); - - if (!Number.isInteger(length)) { - (0, _util.info)(`Bad length "${length && length.toString()}" in stream.`); - length = 0; - } - - stream.pos = startPos + length; - lexer.nextChar(); - - if (this.tryShift() && (0, _primitives.isCmd)(this.buf2, "endstream")) { - this.shift(); - } else { - const ENDSTREAM_SIGNATURE = new Uint8Array([0x65, 0x6e, 0x64, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d]); - - let actualLength = this._findStreamLength(startPos, ENDSTREAM_SIGNATURE); - - if (actualLength < 0) { - const MAX_TRUNCATION = 1; - - for (let i = 1; i <= MAX_TRUNCATION; i++) { - const end = ENDSTREAM_SIGNATURE.length - i; - const TRUNCATED_SIGNATURE = ENDSTREAM_SIGNATURE.slice(0, end); - - const maybeLength = this._findStreamLength(startPos, TRUNCATED_SIGNATURE); - - if (maybeLength >= 0) { - const lastByte = stream.peekBytes(end + 1)[end]; - - if (!(0, _core_utils.isWhiteSpace)(lastByte)) { - break; - } - - (0, _util.info)(`Found "${(0, _util.bytesToString)(TRUNCATED_SIGNATURE)}" when ` + "searching for endstream command."); - actualLength = maybeLength; - break; - } - } - - if (actualLength < 0) { - throw new _util.FormatError("Missing endstream command."); - } - } - - length = actualLength; - lexer.nextChar(); - this.shift(); - this.shift(); - } - - this.shift(); - stream = stream.makeSubStream(startPos, length, dict); - - if (cipherTransform) { - stream = cipherTransform.createStream(stream, length); - } - - stream = this.filter(stream, dict, length); - stream.dict = dict; - return stream; - } - - filter(stream, dict, length) { - let filter = dict.get("F", "Filter"); - let params = dict.get("DP", "DecodeParms"); - - if ((0, _primitives.isName)(filter)) { - if (Array.isArray(params)) { - (0, _util.warn)("/DecodeParms should not be an Array, when /Filter is a Name."); - } - - return this.makeFilter(stream, filter.name, length, params); - } - - let maybeLength = length; - - if (Array.isArray(filter)) { - const filterArray = filter; - const paramsArray = params; - - for (let i = 0, ii = filterArray.length; i < ii; ++i) { - filter = this.xref.fetchIfRef(filterArray[i]); - - if (!(0, _primitives.isName)(filter)) { - throw new _util.FormatError(`Bad filter name "${filter}"`); - } - - params = null; - - if (Array.isArray(paramsArray) && i in paramsArray) { - params = this.xref.fetchIfRef(paramsArray[i]); - } - - stream = this.makeFilter(stream, filter.name, maybeLength, params); - maybeLength = null; - } - } - - return stream; - } - - makeFilter(stream, name, maybeLength, params) { - if (maybeLength === 0) { - (0, _util.warn)(`Empty "${name}" stream.`); - return new _stream.NullStream(); - } - - const xrefStats = this.xref.stats; - - try { - switch (name) { - case "Fl": - case "FlateDecode": - xrefStats.addStreamType(_util.StreamType.FLATE); - - if (params) { - return new _predictor_stream.PredictorStream(new _flate_stream.FlateStream(stream, maybeLength), maybeLength, params); - } - - return new _flate_stream.FlateStream(stream, maybeLength); - - case "LZW": - case "LZWDecode": - xrefStats.addStreamType(_util.StreamType.LZW); - let earlyChange = 1; - - if (params) { - if (params.has("EarlyChange")) { - earlyChange = params.get("EarlyChange"); - } - - return new _predictor_stream.PredictorStream(new _lzw_stream.LZWStream(stream, maybeLength, earlyChange), maybeLength, params); - } - - return new _lzw_stream.LZWStream(stream, maybeLength, earlyChange); - - case "DCT": - case "DCTDecode": - xrefStats.addStreamType(_util.StreamType.DCT); - return new _jpeg_stream.JpegStream(stream, maybeLength, params); - - case "JPX": - case "JPXDecode": - xrefStats.addStreamType(_util.StreamType.JPX); - return new _jpx_stream.JpxStream(stream, maybeLength, params); - - case "A85": - case "ASCII85Decode": - xrefStats.addStreamType(_util.StreamType.A85); - return new _ascii_85_stream.Ascii85Stream(stream, maybeLength); - - case "AHx": - case "ASCIIHexDecode": - xrefStats.addStreamType(_util.StreamType.AHX); - return new _ascii_hex_stream.AsciiHexStream(stream, maybeLength); - - case "CCF": - case "CCITTFaxDecode": - xrefStats.addStreamType(_util.StreamType.CCF); - return new _ccitt_stream.CCITTFaxStream(stream, maybeLength, params); - - case "RL": - case "RunLengthDecode": - xrefStats.addStreamType(_util.StreamType.RLX); - return new _run_length_stream.RunLengthStream(stream, maybeLength); - - case "JBIG2Decode": - xrefStats.addStreamType(_util.StreamType.JBIG); - return new _jbig2_stream.Jbig2Stream(stream, maybeLength, params); - } - - (0, _util.warn)(`Filter "${name}" is not supported.`); - return stream; - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - - (0, _util.warn)(`Invalid stream: "${ex}"`); - return new _stream.NullStream(); - } - } - -} - -exports.Parser = Parser; -const specialChars = [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; - -function toHexDigit(ch) { - if (ch >= 0x30 && ch <= 0x39) { - return ch & 0x0f; - } - - if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) { - return (ch & 0x0f) + 9; - } - - return -1; -} - -class Lexer { - constructor(stream, knownCommands = null) { - this.stream = stream; - this.nextChar(); - this.strBuf = []; - this.knownCommands = knownCommands; - this._hexStringNumWarn = 0; - this.beginInlineImagePos = -1; - } - - nextChar() { - return this.currentChar = this.stream.getByte(); - } - - peekChar() { - return this.stream.peekByte(); - } - - getNumber() { - let ch = this.currentChar; - let eNotation = false; - let divideBy = 0; - let sign = 0; - - if (ch === 0x2d) { - sign = -1; - ch = this.nextChar(); - - if (ch === 0x2d) { - ch = this.nextChar(); - } - } else if (ch === 0x2b) { - sign = 1; - ch = this.nextChar(); - } - - if (ch === 0x0a || ch === 0x0d) { - do { - ch = this.nextChar(); - } while (ch === 0x0a || ch === 0x0d); - } - - if (ch === 0x2e) { - divideBy = 10; - ch = this.nextChar(); - } - - if (ch < 0x30 || ch > 0x39) { - if (divideBy === 10 && sign === 0 && ((0, _core_utils.isWhiteSpace)(ch) || ch === -1)) { - (0, _util.warn)("Lexer.getNumber - treating a single decimal point as zero."); - return 0; - } - - throw new _util.FormatError(`Invalid number: ${String.fromCharCode(ch)} (charCode ${ch})`); - } - - sign = sign || 1; - let baseValue = ch - 0x30; - let powerValue = 0; - let powerValueSign = 1; - - while ((ch = this.nextChar()) >= 0) { - if (ch >= 0x30 && ch <= 0x39) { - const currentDigit = ch - 0x30; - - if (eNotation) { - powerValue = powerValue * 10 + currentDigit; - } else { - if (divideBy !== 0) { - divideBy *= 10; - } - - baseValue = baseValue * 10 + currentDigit; - } - } else if (ch === 0x2e) { - if (divideBy === 0) { - divideBy = 1; - } else { - break; - } - } else if (ch === 0x2d) { - (0, _util.warn)("Badly formatted number: minus sign in the middle"); - } else if (ch === 0x45 || ch === 0x65) { - ch = this.peekChar(); - - if (ch === 0x2b || ch === 0x2d) { - powerValueSign = ch === 0x2d ? -1 : 1; - this.nextChar(); - } else if (ch < 0x30 || ch > 0x39) { - break; - } - - eNotation = true; - } else { - break; - } - } - - if (divideBy !== 0) { - baseValue /= divideBy; - } - - if (eNotation) { - baseValue *= 10 ** (powerValueSign * powerValue); - } - - return sign * baseValue; - } - - getString() { - let numParen = 1; - let done = false; - const strBuf = this.strBuf; - strBuf.length = 0; - let ch = this.nextChar(); - - while (true) { - let charBuffered = false; - - switch (ch | 0) { - case -1: - (0, _util.warn)("Unterminated string"); - done = true; - break; - - case 0x28: - ++numParen; - strBuf.push("("); - break; - - case 0x29: - if (--numParen === 0) { - this.nextChar(); - done = true; - } else { - strBuf.push(")"); - } - - break; - - case 0x5c: - ch = this.nextChar(); - - switch (ch) { - case -1: - (0, _util.warn)("Unterminated string"); - done = true; - break; - - case 0x6e: - strBuf.push("\n"); - break; - - case 0x72: - strBuf.push("\r"); - break; - - case 0x74: - strBuf.push("\t"); - break; - - case 0x62: - strBuf.push("\b"); - break; - - case 0x66: - strBuf.push("\f"); - break; - - case 0x5c: - case 0x28: - case 0x29: - strBuf.push(String.fromCharCode(ch)); - break; - - case 0x30: - case 0x31: - case 0x32: - case 0x33: - case 0x34: - case 0x35: - case 0x36: - case 0x37: - let x = ch & 0x0f; - ch = this.nextChar(); - charBuffered = true; - - if (ch >= 0x30 && ch <= 0x37) { - x = (x << 3) + (ch & 0x0f); - ch = this.nextChar(); - - if (ch >= 0x30 && ch <= 0x37) { - charBuffered = false; - x = (x << 3) + (ch & 0x0f); - } - } - - strBuf.push(String.fromCharCode(x)); - break; - - case 0x0d: - if (this.peekChar() === 0x0a) { - this.nextChar(); - } - - break; - - case 0x0a: - break; - - default: - strBuf.push(String.fromCharCode(ch)); - break; - } - - break; - - default: - strBuf.push(String.fromCharCode(ch)); - break; - } - - if (done) { - break; - } - - if (!charBuffered) { - ch = this.nextChar(); - } - } - - return strBuf.join(""); - } - - getName() { - let ch, previousCh; - const strBuf = this.strBuf; - strBuf.length = 0; - - while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) { - if (ch === 0x23) { - ch = this.nextChar(); - - if (specialChars[ch]) { - (0, _util.warn)("Lexer_getName: " + "NUMBER SIGN (#) should be followed by a hexadecimal number."); - strBuf.push("#"); - break; - } - - const x = toHexDigit(ch); - - if (x !== -1) { - previousCh = ch; - ch = this.nextChar(); - const x2 = toHexDigit(ch); - - if (x2 === -1) { - (0, _util.warn)(`Lexer_getName: Illegal digit (${String.fromCharCode(ch)}) ` + "in hexadecimal number."); - strBuf.push("#", String.fromCharCode(previousCh)); - - if (specialChars[ch]) { - break; - } - - strBuf.push(String.fromCharCode(ch)); - continue; - } - - strBuf.push(String.fromCharCode(x << 4 | x2)); - } else { - strBuf.push("#", String.fromCharCode(ch)); - } - } else { - strBuf.push(String.fromCharCode(ch)); - } - } - - if (strBuf.length > 127) { - (0, _util.warn)(`Name token is longer than allowed by the spec: ${strBuf.length}`); - } - - return _primitives.Name.get(strBuf.join("")); - } - - _hexStringWarn(ch) { - const MAX_HEX_STRING_NUM_WARN = 5; - - if (this._hexStringNumWarn++ === MAX_HEX_STRING_NUM_WARN) { - (0, _util.warn)("getHexString - ignoring additional invalid characters."); - return; - } - - if (this._hexStringNumWarn > MAX_HEX_STRING_NUM_WARN) { - return; - } - - (0, _util.warn)(`getHexString - ignoring invalid character: ${ch}`); - } - - getHexString() { - const strBuf = this.strBuf; - strBuf.length = 0; - let ch = this.currentChar; - let isFirstHex = true; - let firstDigit, secondDigit; - this._hexStringNumWarn = 0; - - while (true) { - if (ch < 0) { - (0, _util.warn)("Unterminated hex string"); - break; - } else if (ch === 0x3e) { - this.nextChar(); - break; - } else if (specialChars[ch] === 1) { - ch = this.nextChar(); - continue; - } else { - if (isFirstHex) { - firstDigit = toHexDigit(ch); - - if (firstDigit === -1) { - this._hexStringWarn(ch); - - ch = this.nextChar(); - continue; - } - } else { - secondDigit = toHexDigit(ch); - - if (secondDigit === -1) { - this._hexStringWarn(ch); - - ch = this.nextChar(); - continue; - } - - strBuf.push(String.fromCharCode(firstDigit << 4 | secondDigit)); - } - - isFirstHex = !isFirstHex; - ch = this.nextChar(); - } - } - - return strBuf.join(""); - } - - getObj() { - let comment = false; - let ch = this.currentChar; - - while (true) { - if (ch < 0) { - return _primitives.EOF; - } - - if (comment) { - if (ch === 0x0a || ch === 0x0d) { - comment = false; - } - } else if (ch === 0x25) { - comment = true; - } else if (specialChars[ch] !== 1) { - break; - } - - ch = this.nextChar(); - } - - switch (ch | 0) { - case 0x30: - case 0x31: - case 0x32: - case 0x33: - case 0x34: - case 0x35: - case 0x36: - case 0x37: - case 0x38: - case 0x39: - case 0x2b: - case 0x2d: - case 0x2e: - return this.getNumber(); - - case 0x28: - return this.getString(); - - case 0x2f: - return this.getName(); - - case 0x5b: - this.nextChar(); - return _primitives.Cmd.get("["); - - case 0x5d: - this.nextChar(); - return _primitives.Cmd.get("]"); - - case 0x3c: - ch = this.nextChar(); - - if (ch === 0x3c) { - this.nextChar(); - return _primitives.Cmd.get("<<"); - } - - return this.getHexString(); - - case 0x3e: - ch = this.nextChar(); - - if (ch === 0x3e) { - this.nextChar(); - return _primitives.Cmd.get(">>"); - } - - return _primitives.Cmd.get(">"); - - case 0x7b: - this.nextChar(); - return _primitives.Cmd.get("{"); - - case 0x7d: - this.nextChar(); - return _primitives.Cmd.get("}"); - - case 0x29: - this.nextChar(); - throw new _util.FormatError(`Illegal character: ${ch}`); - } - - let str = String.fromCharCode(ch); - - if (ch < 0x20 || ch > 0x7f) { - const nextCh = this.peekChar(); - - if (nextCh >= 0x20 && nextCh <= 0x7f) { - this.nextChar(); - return _primitives.Cmd.get(str); - } - } - - const knownCommands = this.knownCommands; - let knownCommandFound = knownCommands && knownCommands[str] !== undefined; - - while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) { - const possibleCommand = str + String.fromCharCode(ch); - - if (knownCommandFound && knownCommands[possibleCommand] === undefined) { - break; - } - - if (str.length === 128) { - throw new _util.FormatError(`Command token too long: ${str.length}`); - } - - str = possibleCommand; - knownCommandFound = knownCommands && knownCommands[str] !== undefined; - } - - if (str === "true") { - return true; - } - - if (str === "false") { - return false; - } - - if (str === "null") { - return null; - } - - if (str === "BI") { - this.beginInlineImagePos = this.stream.pos; - } - - return _primitives.Cmd.get(str); - } - - peekObj() { - const streamPos = this.stream.pos, - currentChar = this.currentChar, - beginInlineImagePos = this.beginInlineImagePos; - let nextObj; - - try { - nextObj = this.getObj(); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - - (0, _util.warn)(`peekObj: ${ex}`); - } - - this.stream.pos = streamPos; - this.currentChar = currentChar; - this.beginInlineImagePos = beginInlineImagePos; - return nextObj; - } - - skipToNextLine() { - let ch = this.currentChar; - - while (ch >= 0) { - if (ch === 0x0d) { - ch = this.nextChar(); - - if (ch === 0x0a) { - this.nextChar(); - } - - break; - } else if (ch === 0x0a) { - this.nextChar(); - break; - } - - ch = this.nextChar(); - } - } - -} - -exports.Lexer = Lexer; - -class Linearization { - static create(stream) { - function getInt(linDict, name, allowZeroValue = false) { - const obj = linDict.get(name); - - if (Number.isInteger(obj) && (allowZeroValue ? obj >= 0 : obj > 0)) { - return obj; - } - - throw new Error(`The "${name}" parameter in the linearization ` + "dictionary is invalid."); - } - - function getHints(linDict) { - const hints = linDict.get("H"); - let hintsLength; - - if (Array.isArray(hints) && ((hintsLength = hints.length) === 2 || hintsLength === 4)) { - for (let index = 0; index < hintsLength; index++) { - const hint = hints[index]; - - if (!(Number.isInteger(hint) && hint > 0)) { - throw new Error(`Hint (${index}) in the linearization dictionary is invalid.`); - } - } - - return hints; - } - - throw new Error("Hint array in the linearization dictionary is invalid."); - } - - const parser = new Parser({ - lexer: new Lexer(stream), - xref: null - }); - const obj1 = parser.getObj(); - const obj2 = parser.getObj(); - const obj3 = parser.getObj(); - const linDict = parser.getObj(); - let obj, length; - - if (!(Number.isInteger(obj1) && Number.isInteger(obj2) && (0, _primitives.isCmd)(obj3, "obj") && (0, _primitives.isDict)(linDict) && (0, _util.isNum)(obj = linDict.get("Linearized")) && obj > 0)) { - return null; - } else if ((length = getInt(linDict, "L")) !== stream.length) { - throw new Error('The "L" parameter in the linearization dictionary ' + "does not equal the stream length."); - } - - return { - length, - hints: getHints(linDict), - objectNumberFirst: getInt(linDict, "O"), - endFirst: getInt(linDict, "E"), - numPages: getInt(linDict, "N"), - mainXRefEntriesOffset: getInt(linDict, "T"), - pageFirst: linDict.has("P") ? getInt(linDict, "P", true) : 0 - }; - } - -} - -exports.Linearization = Linearization; - -/***/ }), -/* 28 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Ascii85Stream = void 0; - -var _decode_stream = __w_pdfjs_require__(29); - -var _core_utils = __w_pdfjs_require__(9); - -class Ascii85Stream extends _decode_stream.DecodeStream { - constructor(str, maybeLength) { - if (maybeLength) { - maybeLength *= 0.8; - } - - super(maybeLength); - this.str = str; - this.dict = str.dict; - this.input = new Uint8Array(5); - } - - readBlock() { - const TILDA_CHAR = 0x7e; - const Z_LOWER_CHAR = 0x7a; - const EOF = -1; - const str = this.str; - let c = str.getByte(); - - while ((0, _core_utils.isWhiteSpace)(c)) { - c = str.getByte(); - } - - if (c === EOF || c === TILDA_CHAR) { - this.eof = true; - return; - } - - const bufferLength = this.bufferLength; - let buffer, i; - - if (c === Z_LOWER_CHAR) { - buffer = this.ensureBuffer(bufferLength + 4); - - for (i = 0; i < 4; ++i) { - buffer[bufferLength + i] = 0; - } - - this.bufferLength += 4; - } else { - const input = this.input; - input[0] = c; - - for (i = 1; i < 5; ++i) { - c = str.getByte(); - - while ((0, _core_utils.isWhiteSpace)(c)) { - c = str.getByte(); - } - - input[i] = c; - - if (c === EOF || c === TILDA_CHAR) { - break; - } - } - - buffer = this.ensureBuffer(bufferLength + i - 1); - this.bufferLength += i - 1; - - if (i < 5) { - for (; i < 5; ++i) { - input[i] = 0x21 + 84; - } - - this.eof = true; - } - - let t = 0; - - for (i = 0; i < 5; ++i) { - t = t * 85 + (input[i] - 0x21); - } - - for (i = 3; i >= 0; --i) { - buffer[bufferLength + i] = t & 0xff; - t >>= 8; - } - } - } - -} - -exports.Ascii85Stream = Ascii85Stream; - -/***/ }), -/* 29 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.StreamsSequenceStream = exports.DecodeStream = void 0; - -var _base_stream = __w_pdfjs_require__(6); - -var _stream = __w_pdfjs_require__(10); - -const emptyBuffer = new Uint8Array(0); - -class DecodeStream extends _base_stream.BaseStream { - constructor(maybeMinBufferLength) { - super(); - this._rawMinBufferLength = maybeMinBufferLength || 0; - this.pos = 0; - this.bufferLength = 0; - this.eof = false; - this.buffer = emptyBuffer; - this.minBufferLength = 512; - - if (maybeMinBufferLength) { - while (this.minBufferLength < maybeMinBufferLength) { - this.minBufferLength *= 2; - } - } - } - - get isEmpty() { - while (!this.eof && this.bufferLength === 0) { - this.readBlock(); - } - - return this.bufferLength === 0; - } - - ensureBuffer(requested) { - const buffer = this.buffer; - - if (requested <= buffer.byteLength) { - return buffer; - } - - let size = this.minBufferLength; - - while (size < requested) { - size *= 2; - } - - const buffer2 = new Uint8Array(size); - buffer2.set(buffer); - return this.buffer = buffer2; - } - - getByte() { - const pos = this.pos; - - while (this.bufferLength <= pos) { - if (this.eof) { - return -1; - } - - this.readBlock(); - } - - return this.buffer[this.pos++]; - } - - getBytes(length, forceClamped = false) { - const pos = this.pos; - let end; - - if (length) { - this.ensureBuffer(pos + length); - end = pos + length; - - while (!this.eof && this.bufferLength < end) { - this.readBlock(); - } - - const bufEnd = this.bufferLength; - - if (end > bufEnd) { - end = bufEnd; - } - } else { - while (!this.eof) { - this.readBlock(); - } - - end = this.bufferLength; - } - - this.pos = end; - const subarray = this.buffer.subarray(pos, end); - return forceClamped && !(subarray instanceof Uint8ClampedArray) ? new Uint8ClampedArray(subarray) : subarray; - } - - reset() { - this.pos = 0; - } - - makeSubStream(start, length, dict = null) { - if (length === undefined) { - while (!this.eof) { - this.readBlock(); - } - } else { - const end = start + length; - - while (this.bufferLength <= end && !this.eof) { - this.readBlock(); - } - } - - return new _stream.Stream(this.buffer, start, length, dict); - } - - getBaseStreams() { - return this.str ? this.str.getBaseStreams() : null; - } - -} - -exports.DecodeStream = DecodeStream; - -class StreamsSequenceStream extends DecodeStream { - constructor(streams, onError = null) { - let maybeLength = 0; - - for (const stream of streams) { - maybeLength += stream instanceof DecodeStream ? stream._rawMinBufferLength : stream.length; - } - - super(maybeLength); - this.streams = streams; - this._onError = onError; - } - - readBlock() { - const streams = this.streams; - - if (streams.length === 0) { - this.eof = true; - return; - } - - const stream = streams.shift(); - let chunk; - - try { - chunk = stream.getBytes(); - } catch (reason) { - if (this._onError) { - this._onError(reason, stream.dict && stream.dict.objId); - - return; - } - - throw reason; - } - - const bufferLength = this.bufferLength; - const newLength = bufferLength + chunk.length; - const buffer = this.ensureBuffer(newLength); - buffer.set(chunk, bufferLength); - this.bufferLength = newLength; - } - - getBaseStreams() { - const baseStreamsBuf = []; - - for (const stream of this.streams) { - const baseStreams = stream.getBaseStreams(); - - if (baseStreams) { - baseStreamsBuf.push(...baseStreams); - } - } - - return baseStreamsBuf.length > 0 ? baseStreamsBuf : null; - } - -} - -exports.StreamsSequenceStream = StreamsSequenceStream; - -/***/ }), -/* 30 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.AsciiHexStream = void 0; - -var _decode_stream = __w_pdfjs_require__(29); - -class AsciiHexStream extends _decode_stream.DecodeStream { - constructor(str, maybeLength) { - if (maybeLength) { - maybeLength *= 0.5; - } - - super(maybeLength); - this.str = str; - this.dict = str.dict; - this.firstDigit = -1; - } - - readBlock() { - const UPSTREAM_BLOCK_SIZE = 8000; - const bytes = this.str.getBytes(UPSTREAM_BLOCK_SIZE); - - if (!bytes.length) { - this.eof = true; - return; - } - - const maxDecodeLength = bytes.length + 1 >> 1; - const buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength); - let bufferLength = this.bufferLength; - let firstDigit = this.firstDigit; - - for (const ch of bytes) { - let digit; - - if (ch >= 0x30 && ch <= 0x39) { - digit = ch & 0x0f; - } else if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) { - digit = (ch & 0x0f) + 9; - } else if (ch === 0x3e) { - this.eof = true; - break; - } else { - continue; - } - - if (firstDigit < 0) { - firstDigit = digit; - } else { - buffer[bufferLength++] = firstDigit << 4 | digit; - firstDigit = -1; - } - } - - if (firstDigit >= 0 && this.eof) { - buffer[bufferLength++] = firstDigit << 4; - firstDigit = -1; - } - - this.firstDigit = firstDigit; - this.bufferLength = bufferLength; - } - -} - -exports.AsciiHexStream = AsciiHexStream; - -/***/ }), -/* 31 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.CCITTFaxStream = void 0; - -var _primitives = __w_pdfjs_require__(5); - -var _ccitt = __w_pdfjs_require__(32); - -var _decode_stream = __w_pdfjs_require__(29); - -class CCITTFaxStream extends _decode_stream.DecodeStream { - constructor(str, maybeLength, params) { - super(maybeLength); - this.str = str; - this.dict = str.dict; - - if (!(0, _primitives.isDict)(params)) { - params = _primitives.Dict.empty; - } - - const source = { - next() { - return str.getByte(); - } - - }; - this.ccittFaxDecoder = new _ccitt.CCITTFaxDecoder(source, { - K: params.get("K"), - EndOfLine: params.get("EndOfLine"), - EncodedByteAlign: params.get("EncodedByteAlign"), - Columns: params.get("Columns"), - Rows: params.get("Rows"), - EndOfBlock: params.get("EndOfBlock"), - BlackIs1: params.get("BlackIs1") - }); - } - - readBlock() { - while (!this.eof) { - const c = this.ccittFaxDecoder.readNextChar(); - - if (c === -1) { - this.eof = true; - return; - } - - this.ensureBuffer(this.bufferLength + 1); - this.buffer[this.bufferLength++] = c; - } - } - -} - -exports.CCITTFaxStream = CCITTFaxStream; - -/***/ }), -/* 32 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.CCITTFaxDecoder = void 0; - -var _util = __w_pdfjs_require__(2); - -const ccittEOL = -2; -const ccittEOF = -1; -const twoDimPass = 0; -const twoDimHoriz = 1; -const twoDimVert0 = 2; -const twoDimVertR1 = 3; -const twoDimVertL1 = 4; -const twoDimVertR2 = 5; -const twoDimVertL2 = 6; -const twoDimVertR3 = 7; -const twoDimVertL3 = 8; -const twoDimTable = [[-1, -1], [-1, -1], [7, twoDimVertL3], [7, twoDimVertR3], [6, twoDimVertL2], [6, twoDimVertL2], [6, twoDimVertR2], [6, twoDimVertR2], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0]]; -const whiteTable1 = [[-1, -1], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [12, 1984], [12, 2048], [12, 2112], [12, 2176], [12, 2240], [12, 2304], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [12, 2368], [12, 2432], [12, 2496], [12, 2560]]; -const whiteTable2 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [8, 29], [8, 29], [8, 30], [8, 30], [8, 45], [8, 45], [8, 46], [8, 46], [7, 22], [7, 22], [7, 22], [7, 22], [7, 23], [7, 23], [7, 23], [7, 23], [8, 47], [8, 47], [8, 48], [8, 48], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [7, 20], [7, 20], [7, 20], [7, 20], [8, 33], [8, 33], [8, 34], [8, 34], [8, 35], [8, 35], [8, 36], [8, 36], [8, 37], [8, 37], [8, 38], [8, 38], [7, 19], [7, 19], [7, 19], [7, 19], [8, 31], [8, 31], [8, 32], [8, 32], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [8, 53], [8, 53], [8, 54], [8, 54], [7, 26], [7, 26], [7, 26], [7, 26], [8, 39], [8, 39], [8, 40], [8, 40], [8, 41], [8, 41], [8, 42], [8, 42], [8, 43], [8, 43], [8, 44], [8, 44], [7, 21], [7, 21], [7, 21], [7, 21], [7, 28], [7, 28], [7, 28], [7, 28], [8, 61], [8, 61], [8, 62], [8, 62], [8, 63], [8, 63], [8, 0], [8, 0], [8, 320], [8, 320], [8, 384], [8, 384], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [7, 27], [7, 27], [7, 27], [7, 27], [8, 59], [8, 59], [8, 60], [8, 60], [9, 1472], [9, 1536], [9, 1600], [9, 1728], [7, 18], [7, 18], [7, 18], [7, 18], [7, 24], [7, 24], [7, 24], [7, 24], [8, 49], [8, 49], [8, 50], [8, 50], [8, 51], [8, 51], [8, 52], [8, 52], [7, 25], [7, 25], [7, 25], [7, 25], [8, 55], [8, 55], [8, 56], [8, 56], [8, 57], [8, 57], [8, 58], [8, 58], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [8, 448], [8, 448], [8, 512], [8, 512], [9, 704], [9, 768], [8, 640], [8, 640], [8, 576], [8, 576], [9, 832], [9, 896], [9, 960], [9, 1024], [9, 1088], [9, 1152], [9, 1216], [9, 1280], [9, 1344], [9, 1408], [7, 256], [7, 256], [7, 256], [7, 256], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7]]; -const blackTable1 = [[-1, -1], [-1, -1], [12, ccittEOL], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [11, 1792], [11, 1792], [12, 1984], [12, 1984], [12, 2048], [12, 2048], [12, 2112], [12, 2112], [12, 2176], [12, 2176], [12, 2240], [12, 2240], [12, 2304], [12, 2304], [11, 1856], [11, 1856], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [11, 1920], [11, 1920], [12, 2368], [12, 2368], [12, 2432], [12, 2432], [12, 2496], [12, 2496], [12, 2560], [12, 2560], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [12, 52], [12, 52], [13, 640], [13, 704], [13, 768], [13, 832], [12, 55], [12, 55], [12, 56], [12, 56], [13, 1280], [13, 1344], [13, 1408], [13, 1472], [12, 59], [12, 59], [12, 60], [12, 60], [13, 1536], [13, 1600], [11, 24], [11, 24], [11, 24], [11, 24], [11, 25], [11, 25], [11, 25], [11, 25], [13, 1664], [13, 1728], [12, 320], [12, 320], [12, 384], [12, 384], [12, 448], [12, 448], [13, 512], [13, 576], [12, 53], [12, 53], [12, 54], [12, 54], [13, 896], [13, 960], [13, 1024], [13, 1088], [13, 1152], [13, 1216], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64]]; -const blackTable2 = [[8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [11, 23], [11, 23], [12, 50], [12, 51], [12, 44], [12, 45], [12, 46], [12, 47], [12, 57], [12, 58], [12, 61], [12, 256], [10, 16], [10, 16], [10, 16], [10, 16], [10, 17], [10, 17], [10, 17], [10, 17], [12, 48], [12, 49], [12, 62], [12, 63], [12, 30], [12, 31], [12, 32], [12, 33], [12, 40], [12, 41], [11, 22], [11, 22], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [12, 128], [12, 192], [12, 26], [12, 27], [12, 28], [12, 29], [11, 19], [11, 19], [11, 20], [11, 20], [12, 34], [12, 35], [12, 36], [12, 37], [12, 38], [12, 39], [11, 21], [11, 21], [12, 42], [12, 43], [10, 0], [10, 0], [10, 0], [10, 0], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12]]; -const blackTable3 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [6, 9], [6, 8], [5, 7], [5, 7], [4, 6], [4, 6], [4, 6], [4, 6], [4, 5], [4, 5], [4, 5], [4, 5], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2]]; - -class CCITTFaxDecoder { - constructor(source, options = {}) { - if (!source || typeof source.next !== "function") { - throw new Error('CCITTFaxDecoder - invalid "source" parameter.'); - } - - this.source = source; - this.eof = false; - this.encoding = options.K || 0; - this.eoline = options.EndOfLine || false; - this.byteAlign = options.EncodedByteAlign || false; - this.columns = options.Columns || 1728; - this.rows = options.Rows || 0; - let eoblock = options.EndOfBlock; - - if (eoblock === null || eoblock === undefined) { - eoblock = true; - } - - this.eoblock = eoblock; - this.black = options.BlackIs1 || false; - this.codingLine = new Uint32Array(this.columns + 1); - this.refLine = new Uint32Array(this.columns + 2); - this.codingLine[0] = this.columns; - this.codingPos = 0; - this.row = 0; - this.nextLine2D = this.encoding < 0; - this.inputBits = 0; - this.inputBuf = 0; - this.outputBits = 0; - this.rowsDone = false; - let code1; - - while ((code1 = this._lookBits(12)) === 0) { - this._eatBits(1); - } - - if (code1 === 1) { - this._eatBits(12); - } - - if (this.encoding > 0) { - this.nextLine2D = !this._lookBits(1); - - this._eatBits(1); - } - } - - readNextChar() { - if (this.eof) { - return -1; - } - - const refLine = this.refLine; - const codingLine = this.codingLine; - const columns = this.columns; - let refPos, blackPixels, bits, i; - - if (this.outputBits === 0) { - if (this.rowsDone) { - this.eof = true; - } - - if (this.eof) { - return -1; - } - - this.err = false; - let code1, code2, code3; - - if (this.nextLine2D) { - for (i = 0; codingLine[i] < columns; ++i) { - refLine[i] = codingLine[i]; - } - - refLine[i++] = columns; - refLine[i] = columns; - codingLine[0] = 0; - this.codingPos = 0; - refPos = 0; - blackPixels = 0; - - while (codingLine[this.codingPos] < columns) { - code1 = this._getTwoDimCode(); - - switch (code1) { - case twoDimPass: - this._addPixels(refLine[refPos + 1], blackPixels); - - if (refLine[refPos + 1] < columns) { - refPos += 2; - } - - break; - - case twoDimHoriz: - code1 = code2 = 0; - - if (blackPixels) { - do { - code1 += code3 = this._getBlackCode(); - } while (code3 >= 64); - - do { - code2 += code3 = this._getWhiteCode(); - } while (code3 >= 64); - } else { - do { - code1 += code3 = this._getWhiteCode(); - } while (code3 >= 64); - - do { - code2 += code3 = this._getBlackCode(); - } while (code3 >= 64); - } - - this._addPixels(codingLine[this.codingPos] + code1, blackPixels); - - if (codingLine[this.codingPos] < columns) { - this._addPixels(codingLine[this.codingPos] + code2, blackPixels ^ 1); - } - - while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { - refPos += 2; - } - - break; - - case twoDimVertR3: - this._addPixels(refLine[refPos] + 3, blackPixels); - - blackPixels ^= 1; - - if (codingLine[this.codingPos] < columns) { - ++refPos; - - while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { - refPos += 2; - } - } - - break; - - case twoDimVertR2: - this._addPixels(refLine[refPos] + 2, blackPixels); - - blackPixels ^= 1; - - if (codingLine[this.codingPos] < columns) { - ++refPos; - - while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { - refPos += 2; - } - } - - break; - - case twoDimVertR1: - this._addPixels(refLine[refPos] + 1, blackPixels); - - blackPixels ^= 1; - - if (codingLine[this.codingPos] < columns) { - ++refPos; - - while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { - refPos += 2; - } - } - - break; - - case twoDimVert0: - this._addPixels(refLine[refPos], blackPixels); - - blackPixels ^= 1; - - if (codingLine[this.codingPos] < columns) { - ++refPos; - - while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { - refPos += 2; - } - } - - break; - - case twoDimVertL3: - this._addPixelsNeg(refLine[refPos] - 3, blackPixels); - - blackPixels ^= 1; - - if (codingLine[this.codingPos] < columns) { - if (refPos > 0) { - --refPos; - } else { - ++refPos; - } - - while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { - refPos += 2; - } - } - - break; - - case twoDimVertL2: - this._addPixelsNeg(refLine[refPos] - 2, blackPixels); - - blackPixels ^= 1; - - if (codingLine[this.codingPos] < columns) { - if (refPos > 0) { - --refPos; - } else { - ++refPos; - } - - while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { - refPos += 2; - } - } - - break; - - case twoDimVertL1: - this._addPixelsNeg(refLine[refPos] - 1, blackPixels); - - blackPixels ^= 1; - - if (codingLine[this.codingPos] < columns) { - if (refPos > 0) { - --refPos; - } else { - ++refPos; - } - - while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { - refPos += 2; - } - } - - break; - - case ccittEOF: - this._addPixels(columns, 0); - - this.eof = true; - break; - - default: - (0, _util.info)("bad 2d code"); - - this._addPixels(columns, 0); - - this.err = true; - } - } - } else { - codingLine[0] = 0; - this.codingPos = 0; - blackPixels = 0; - - while (codingLine[this.codingPos] < columns) { - code1 = 0; - - if (blackPixels) { - do { - code1 += code3 = this._getBlackCode(); - } while (code3 >= 64); - } else { - do { - code1 += code3 = this._getWhiteCode(); - } while (code3 >= 64); - } - - this._addPixels(codingLine[this.codingPos] + code1, blackPixels); - - blackPixels ^= 1; - } - } - - let gotEOL = false; - - if (this.byteAlign) { - this.inputBits &= ~7; - } - - if (!this.eoblock && this.row === this.rows - 1) { - this.rowsDone = true; - } else { - code1 = this._lookBits(12); - - if (this.eoline) { - while (code1 !== ccittEOF && code1 !== 1) { - this._eatBits(1); - - code1 = this._lookBits(12); - } - } else { - while (code1 === 0) { - this._eatBits(1); - - code1 = this._lookBits(12); - } - } - - if (code1 === 1) { - this._eatBits(12); - - gotEOL = true; - } else if (code1 === ccittEOF) { - this.eof = true; - } - } - - if (!this.eof && this.encoding > 0 && !this.rowsDone) { - this.nextLine2D = !this._lookBits(1); - - this._eatBits(1); - } - - if (this.eoblock && gotEOL && this.byteAlign) { - code1 = this._lookBits(12); - - if (code1 === 1) { - this._eatBits(12); - - if (this.encoding > 0) { - this._lookBits(1); - - this._eatBits(1); - } - - if (this.encoding >= 0) { - for (i = 0; i < 4; ++i) { - code1 = this._lookBits(12); - - if (code1 !== 1) { - (0, _util.info)("bad rtc code: " + code1); - } - - this._eatBits(12); - - if (this.encoding > 0) { - this._lookBits(1); - - this._eatBits(1); - } - } - } - - this.eof = true; - } - } else if (this.err && this.eoline) { - while (true) { - code1 = this._lookBits(13); - - if (code1 === ccittEOF) { - this.eof = true; - return -1; - } - - if (code1 >> 1 === 1) { - break; - } - - this._eatBits(1); - } - - this._eatBits(12); - - if (this.encoding > 0) { - this._eatBits(1); - - this.nextLine2D = !(code1 & 1); - } - } - - if (codingLine[0] > 0) { - this.outputBits = codingLine[this.codingPos = 0]; - } else { - this.outputBits = codingLine[this.codingPos = 1]; - } - - this.row++; - } - - let c; - - if (this.outputBits >= 8) { - c = this.codingPos & 1 ? 0 : 0xff; - this.outputBits -= 8; - - if (this.outputBits === 0 && codingLine[this.codingPos] < columns) { - this.codingPos++; - this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1]; - } - } else { - bits = 8; - c = 0; - - do { - if (typeof this.outputBits !== "number") { - throw new _util.FormatError('Invalid /CCITTFaxDecode data, "outputBits" must be a number.'); - } - - if (this.outputBits > bits) { - c <<= bits; - - if (!(this.codingPos & 1)) { - c |= 0xff >> 8 - bits; - } - - this.outputBits -= bits; - bits = 0; - } else { - c <<= this.outputBits; - - if (!(this.codingPos & 1)) { - c |= 0xff >> 8 - this.outputBits; - } - - bits -= this.outputBits; - this.outputBits = 0; - - if (codingLine[this.codingPos] < columns) { - this.codingPos++; - this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1]; - } else if (bits > 0) { - c <<= bits; - bits = 0; - } - } - } while (bits); - } - - if (this.black) { - c ^= 0xff; - } - - return c; - } - - _addPixels(a1, blackPixels) { - const codingLine = this.codingLine; - let codingPos = this.codingPos; - - if (a1 > codingLine[codingPos]) { - if (a1 > this.columns) { - (0, _util.info)("row is wrong length"); - this.err = true; - a1 = this.columns; - } - - if (codingPos & 1 ^ blackPixels) { - ++codingPos; - } - - codingLine[codingPos] = a1; - } - - this.codingPos = codingPos; - } - - _addPixelsNeg(a1, blackPixels) { - const codingLine = this.codingLine; - let codingPos = this.codingPos; - - if (a1 > codingLine[codingPos]) { - if (a1 > this.columns) { - (0, _util.info)("row is wrong length"); - this.err = true; - a1 = this.columns; - } - - if (codingPos & 1 ^ blackPixels) { - ++codingPos; - } - - codingLine[codingPos] = a1; - } else if (a1 < codingLine[codingPos]) { - if (a1 < 0) { - (0, _util.info)("invalid code"); - this.err = true; - a1 = 0; - } - - while (codingPos > 0 && a1 < codingLine[codingPos - 1]) { - --codingPos; - } - - codingLine[codingPos] = a1; - } - - this.codingPos = codingPos; - } - - _findTableCode(start, end, table, limit) { - const limitValue = limit || 0; - - for (let i = start; i <= end; ++i) { - let code = this._lookBits(i); - - if (code === ccittEOF) { - return [true, 1, false]; - } - - if (i < end) { - code <<= end - i; - } - - if (!limitValue || code >= limitValue) { - const p = table[code - limitValue]; - - if (p[0] === i) { - this._eatBits(i); - - return [true, p[1], true]; - } - } - } - - return [false, 0, false]; - } - - _getTwoDimCode() { - let code = 0; - let p; - - if (this.eoblock) { - code = this._lookBits(7); - p = twoDimTable[code]; - - if (p && p[0] > 0) { - this._eatBits(p[0]); - - return p[1]; - } - } else { - const result = this._findTableCode(1, 7, twoDimTable); - - if (result[0] && result[2]) { - return result[1]; - } - } - - (0, _util.info)("Bad two dim code"); - return ccittEOF; - } - - _getWhiteCode() { - let code = 0; - let p; - - if (this.eoblock) { - code = this._lookBits(12); - - if (code === ccittEOF) { - return 1; - } - - if (code >> 5 === 0) { - p = whiteTable1[code]; - } else { - p = whiteTable2[code >> 3]; - } - - if (p[0] > 0) { - this._eatBits(p[0]); - - return p[1]; - } - } else { - let result = this._findTableCode(1, 9, whiteTable2); - - if (result[0]) { - return result[1]; - } - - result = this._findTableCode(11, 12, whiteTable1); - - if (result[0]) { - return result[1]; - } - } - - (0, _util.info)("bad white code"); - - this._eatBits(1); - - return 1; - } - - _getBlackCode() { - let code, p; - - if (this.eoblock) { - code = this._lookBits(13); - - if (code === ccittEOF) { - return 1; - } - - if (code >> 7 === 0) { - p = blackTable1[code]; - } else if (code >> 9 === 0 && code >> 7 !== 0) { - p = blackTable2[(code >> 1) - 64]; - } else { - p = blackTable3[code >> 7]; - } - - if (p[0] > 0) { - this._eatBits(p[0]); - - return p[1]; - } - } else { - let result = this._findTableCode(2, 6, blackTable3); - - if (result[0]) { - return result[1]; - } - - result = this._findTableCode(7, 12, blackTable2, 64); - - if (result[0]) { - return result[1]; - } - - result = this._findTableCode(10, 13, blackTable1); - - if (result[0]) { - return result[1]; - } - } - - (0, _util.info)("bad black code"); - - this._eatBits(1); - - return 1; - } - - _lookBits(n) { - let c; - - while (this.inputBits < n) { - if ((c = this.source.next()) === -1) { - if (this.inputBits === 0) { - return ccittEOF; - } - - return this.inputBuf << n - this.inputBits & 0xffff >> 16 - n; - } - - this.inputBuf = this.inputBuf << 8 | c; - this.inputBits += 8; - } - - return this.inputBuf >> this.inputBits - n & 0xffff >> 16 - n; - } - - _eatBits(n) { - if ((this.inputBits -= n) < 0) { - this.inputBits = 0; - } - } - -} - -exports.CCITTFaxDecoder = CCITTFaxDecoder; - -/***/ }), -/* 33 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.FlateStream = void 0; - -var _decode_stream = __w_pdfjs_require__(29); - -var _util = __w_pdfjs_require__(2); - -const codeLenCodeMap = new Int32Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]); -const lengthDecode = new Int32Array([0x00003, 0x00004, 0x00005, 0x00006, 0x00007, 0x00008, 0x00009, 0x0000a, 0x1000b, 0x1000d, 0x1000f, 0x10011, 0x20013, 0x20017, 0x2001b, 0x2001f, 0x30023, 0x3002b, 0x30033, 0x3003b, 0x40043, 0x40053, 0x40063, 0x40073, 0x50083, 0x500a3, 0x500c3, 0x500e3, 0x00102, 0x00102, 0x00102]); -const distDecode = new Int32Array([0x00001, 0x00002, 0x00003, 0x00004, 0x10005, 0x10007, 0x20009, 0x2000d, 0x30011, 0x30019, 0x40021, 0x40031, 0x50041, 0x50061, 0x60081, 0x600c1, 0x70101, 0x70181, 0x80201, 0x80301, 0x90401, 0x90601, 0xa0801, 0xa0c01, 0xb1001, 0xb1801, 0xc2001, 0xc3001, 0xd4001, 0xd6001]); -const fixedLitCodeTab = [new Int32Array([0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c0, 0x70108, 0x80060, 0x80020, 0x900a0, 0x80000, 0x80080, 0x80040, 0x900e0, 0x70104, 0x80058, 0x80018, 0x90090, 0x70114, 0x80078, 0x80038, 0x900d0, 0x7010c, 0x80068, 0x80028, 0x900b0, 0x80008, 0x80088, 0x80048, 0x900f0, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c8, 0x7010a, 0x80064, 0x80024, 0x900a8, 0x80004, 0x80084, 0x80044, 0x900e8, 0x70106, 0x8005c, 0x8001c, 0x90098, 0x70116, 0x8007c, 0x8003c, 0x900d8, 0x7010e, 0x8006c, 0x8002c, 0x900b8, 0x8000c, 0x8008c, 0x8004c, 0x900f8, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c4, 0x70109, 0x80062, 0x80022, 0x900a4, 0x80002, 0x80082, 0x80042, 0x900e4, 0x70105, 0x8005a, 0x8001a, 0x90094, 0x70115, 0x8007a, 0x8003a, 0x900d4, 0x7010d, 0x8006a, 0x8002a, 0x900b4, 0x8000a, 0x8008a, 0x8004a, 0x900f4, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cc, 0x7010b, 0x80066, 0x80026, 0x900ac, 0x80006, 0x80086, 0x80046, 0x900ec, 0x70107, 0x8005e, 0x8001e, 0x9009c, 0x70117, 0x8007e, 0x8003e, 0x900dc, 0x7010f, 0x8006e, 0x8002e, 0x900bc, 0x8000e, 0x8008e, 0x8004e, 0x900fc, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c2, 0x70108, 0x80061, 0x80021, 0x900a2, 0x80001, 0x80081, 0x80041, 0x900e2, 0x70104, 0x80059, 0x80019, 0x90092, 0x70114, 0x80079, 0x80039, 0x900d2, 0x7010c, 0x80069, 0x80029, 0x900b2, 0x80009, 0x80089, 0x80049, 0x900f2, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900ca, 0x7010a, 0x80065, 0x80025, 0x900aa, 0x80005, 0x80085, 0x80045, 0x900ea, 0x70106, 0x8005d, 0x8001d, 0x9009a, 0x70116, 0x8007d, 0x8003d, 0x900da, 0x7010e, 0x8006d, 0x8002d, 0x900ba, 0x8000d, 0x8008d, 0x8004d, 0x900fa, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c6, 0x70109, 0x80063, 0x80023, 0x900a6, 0x80003, 0x80083, 0x80043, 0x900e6, 0x70105, 0x8005b, 0x8001b, 0x90096, 0x70115, 0x8007b, 0x8003b, 0x900d6, 0x7010d, 0x8006b, 0x8002b, 0x900b6, 0x8000b, 0x8008b, 0x8004b, 0x900f6, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900ce, 0x7010b, 0x80067, 0x80027, 0x900ae, 0x80007, 0x80087, 0x80047, 0x900ee, 0x70107, 0x8005f, 0x8001f, 0x9009e, 0x70117, 0x8007f, 0x8003f, 0x900de, 0x7010f, 0x8006f, 0x8002f, 0x900be, 0x8000f, 0x8008f, 0x8004f, 0x900fe, 0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c1, 0x70108, 0x80060, 0x80020, 0x900a1, 0x80000, 0x80080, 0x80040, 0x900e1, 0x70104, 0x80058, 0x80018, 0x90091, 0x70114, 0x80078, 0x80038, 0x900d1, 0x7010c, 0x80068, 0x80028, 0x900b1, 0x80008, 0x80088, 0x80048, 0x900f1, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c9, 0x7010a, 0x80064, 0x80024, 0x900a9, 0x80004, 0x80084, 0x80044, 0x900e9, 0x70106, 0x8005c, 0x8001c, 0x90099, 0x70116, 0x8007c, 0x8003c, 0x900d9, 0x7010e, 0x8006c, 0x8002c, 0x900b9, 0x8000c, 0x8008c, 0x8004c, 0x900f9, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c5, 0x70109, 0x80062, 0x80022, 0x900a5, 0x80002, 0x80082, 0x80042, 0x900e5, 0x70105, 0x8005a, 0x8001a, 0x90095, 0x70115, 0x8007a, 0x8003a, 0x900d5, 0x7010d, 0x8006a, 0x8002a, 0x900b5, 0x8000a, 0x8008a, 0x8004a, 0x900f5, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cd, 0x7010b, 0x80066, 0x80026, 0x900ad, 0x80006, 0x80086, 0x80046, 0x900ed, 0x70107, 0x8005e, 0x8001e, 0x9009d, 0x70117, 0x8007e, 0x8003e, 0x900dd, 0x7010f, 0x8006e, 0x8002e, 0x900bd, 0x8000e, 0x8008e, 0x8004e, 0x900fd, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c3, 0x70108, 0x80061, 0x80021, 0x900a3, 0x80001, 0x80081, 0x80041, 0x900e3, 0x70104, 0x80059, 0x80019, 0x90093, 0x70114, 0x80079, 0x80039, 0x900d3, 0x7010c, 0x80069, 0x80029, 0x900b3, 0x80009, 0x80089, 0x80049, 0x900f3, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900cb, 0x7010a, 0x80065, 0x80025, 0x900ab, 0x80005, 0x80085, 0x80045, 0x900eb, 0x70106, 0x8005d, 0x8001d, 0x9009b, 0x70116, 0x8007d, 0x8003d, 0x900db, 0x7010e, 0x8006d, 0x8002d, 0x900bb, 0x8000d, 0x8008d, 0x8004d, 0x900fb, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c7, 0x70109, 0x80063, 0x80023, 0x900a7, 0x80003, 0x80083, 0x80043, 0x900e7, 0x70105, 0x8005b, 0x8001b, 0x90097, 0x70115, 0x8007b, 0x8003b, 0x900d7, 0x7010d, 0x8006b, 0x8002b, 0x900b7, 0x8000b, 0x8008b, 0x8004b, 0x900f7, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900cf, 0x7010b, 0x80067, 0x80027, 0x900af, 0x80007, 0x80087, 0x80047, 0x900ef, 0x70107, 0x8005f, 0x8001f, 0x9009f, 0x70117, 0x8007f, 0x8003f, 0x900df, 0x7010f, 0x8006f, 0x8002f, 0x900bf, 0x8000f, 0x8008f, 0x8004f, 0x900ff]), 9]; -const fixedDistCodeTab = [new Int32Array([0x50000, 0x50010, 0x50008, 0x50018, 0x50004, 0x50014, 0x5000c, 0x5001c, 0x50002, 0x50012, 0x5000a, 0x5001a, 0x50006, 0x50016, 0x5000e, 0x00000, 0x50001, 0x50011, 0x50009, 0x50019, 0x50005, 0x50015, 0x5000d, 0x5001d, 0x50003, 0x50013, 0x5000b, 0x5001b, 0x50007, 0x50017, 0x5000f, 0x00000]), 5]; - -class FlateStream extends _decode_stream.DecodeStream { - constructor(str, maybeLength) { - super(maybeLength); - this.str = str; - this.dict = str.dict; - const cmf = str.getByte(); - const flg = str.getByte(); - - if (cmf === -1 || flg === -1) { - throw new _util.FormatError(`Invalid header in flate stream: ${cmf}, ${flg}`); - } - - if ((cmf & 0x0f) !== 0x08) { - throw new _util.FormatError(`Unknown compression method in flate stream: ${cmf}, ${flg}`); - } - - if (((cmf << 8) + flg) % 31 !== 0) { - throw new _util.FormatError(`Bad FCHECK in flate stream: ${cmf}, ${flg}`); - } - - if (flg & 0x20) { - throw new _util.FormatError(`FDICT bit set in flate stream: ${cmf}, ${flg}`); - } - - this.codeSize = 0; - this.codeBuf = 0; - } - - getBits(bits) { - const str = this.str; - let codeSize = this.codeSize; - let codeBuf = this.codeBuf; - let b; - - while (codeSize < bits) { - if ((b = str.getByte()) === -1) { - throw new _util.FormatError("Bad encoding in flate stream"); - } - - codeBuf |= b << codeSize; - codeSize += 8; - } - - b = codeBuf & (1 << bits) - 1; - this.codeBuf = codeBuf >> bits; - this.codeSize = codeSize -= bits; - return b; - } - - getCode(table) { - const str = this.str; - const codes = table[0]; - const maxLen = table[1]; - let codeSize = this.codeSize; - let codeBuf = this.codeBuf; - let b; - - while (codeSize < maxLen) { - if ((b = str.getByte()) === -1) { - break; - } - - codeBuf |= b << codeSize; - codeSize += 8; - } - - const code = codes[codeBuf & (1 << maxLen) - 1]; - const codeLen = code >> 16; - const codeVal = code & 0xffff; - - if (codeLen < 1 || codeSize < codeLen) { - throw new _util.FormatError("Bad encoding in flate stream"); - } - - this.codeBuf = codeBuf >> codeLen; - this.codeSize = codeSize - codeLen; - return codeVal; - } - - generateHuffmanTable(lengths) { - const n = lengths.length; - let maxLen = 0; - let i; - - for (i = 0; i < n; ++i) { - if (lengths[i] > maxLen) { - maxLen = lengths[i]; - } - } - - const size = 1 << maxLen; - const codes = new Int32Array(size); - - for (let len = 1, code = 0, skip = 2; len <= maxLen; ++len, code <<= 1, skip <<= 1) { - for (let val = 0; val < n; ++val) { - if (lengths[val] === len) { - let code2 = 0; - let t = code; - - for (i = 0; i < len; ++i) { - code2 = code2 << 1 | t & 1; - t >>= 1; - } - - for (i = code2; i < size; i += skip) { - codes[i] = len << 16 | val; - } - - ++code; - } - } - } - - return [codes, maxLen]; - } - - readBlock() { - let buffer, len; - const str = this.str; - let hdr = this.getBits(3); - - if (hdr & 1) { - this.eof = true; - } - - hdr >>= 1; - - if (hdr === 0) { - let b; - - if ((b = str.getByte()) === -1) { - throw new _util.FormatError("Bad block header in flate stream"); - } - - let blockLen = b; - - if ((b = str.getByte()) === -1) { - throw new _util.FormatError("Bad block header in flate stream"); - } - - blockLen |= b << 8; - - if ((b = str.getByte()) === -1) { - throw new _util.FormatError("Bad block header in flate stream"); - } - - let check = b; - - if ((b = str.getByte()) === -1) { - throw new _util.FormatError("Bad block header in flate stream"); - } - - check |= b << 8; - - if (check !== (~blockLen & 0xffff) && (blockLen !== 0 || check !== 0)) { - throw new _util.FormatError("Bad uncompressed block length in flate stream"); - } - - this.codeBuf = 0; - this.codeSize = 0; - const bufferLength = this.bufferLength, - end = bufferLength + blockLen; - buffer = this.ensureBuffer(end); - this.bufferLength = end; - - if (blockLen === 0) { - if (str.peekByte() === -1) { - this.eof = true; - } - } else { - const block = str.getBytes(blockLen); - buffer.set(block, bufferLength); - - if (block.length < blockLen) { - this.eof = true; - } - } - - return; - } - - let litCodeTable; - let distCodeTable; - - if (hdr === 1) { - litCodeTable = fixedLitCodeTab; - distCodeTable = fixedDistCodeTab; - } else if (hdr === 2) { - const numLitCodes = this.getBits(5) + 257; - const numDistCodes = this.getBits(5) + 1; - const numCodeLenCodes = this.getBits(4) + 4; - const codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length); - let i; - - for (i = 0; i < numCodeLenCodes; ++i) { - codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3); - } - - const codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths); - len = 0; - i = 0; - const codes = numLitCodes + numDistCodes; - const codeLengths = new Uint8Array(codes); - let bitsLength, bitsOffset, what; - - while (i < codes) { - const code = this.getCode(codeLenCodeTab); - - if (code === 16) { - bitsLength = 2; - bitsOffset = 3; - what = len; - } else if (code === 17) { - bitsLength = 3; - bitsOffset = 3; - what = len = 0; - } else if (code === 18) { - bitsLength = 7; - bitsOffset = 11; - what = len = 0; - } else { - codeLengths[i++] = len = code; - continue; - } - - let repeatLength = this.getBits(bitsLength) + bitsOffset; - - while (repeatLength-- > 0) { - codeLengths[i++] = what; - } - } - - litCodeTable = this.generateHuffmanTable(codeLengths.subarray(0, numLitCodes)); - distCodeTable = this.generateHuffmanTable(codeLengths.subarray(numLitCodes, codes)); - } else { - throw new _util.FormatError("Unknown block type in flate stream"); - } - - buffer = this.buffer; - let limit = buffer ? buffer.length : 0; - let pos = this.bufferLength; - - while (true) { - let code1 = this.getCode(litCodeTable); - - if (code1 < 256) { - if (pos + 1 >= limit) { - buffer = this.ensureBuffer(pos + 1); - limit = buffer.length; - } - - buffer[pos++] = code1; - continue; - } - - if (code1 === 256) { - this.bufferLength = pos; - return; - } - - code1 -= 257; - code1 = lengthDecode[code1]; - let code2 = code1 >> 16; - - if (code2 > 0) { - code2 = this.getBits(code2); - } - - len = (code1 & 0xffff) + code2; - code1 = this.getCode(distCodeTable); - code1 = distDecode[code1]; - code2 = code1 >> 16; - - if (code2 > 0) { - code2 = this.getBits(code2); - } - - const dist = (code1 & 0xffff) + code2; - - if (pos + len >= limit) { - buffer = this.ensureBuffer(pos + len); - limit = buffer.length; - } - - for (let k = 0; k < len; ++k, ++pos) { - buffer[pos] = buffer[pos - dist]; - } - } - } - -} - -exports.FlateStream = FlateStream; - -/***/ }), -/* 34 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Jbig2Stream = void 0; - -var _primitives = __w_pdfjs_require__(5); - -var _decode_stream = __w_pdfjs_require__(29); - -var _jbig = __w_pdfjs_require__(35); - -var _util = __w_pdfjs_require__(2); - -class Jbig2Stream extends _decode_stream.DecodeStream { - constructor(stream, maybeLength, params) { - super(maybeLength); - this.stream = stream; - this.dict = stream.dict; - this.maybeLength = maybeLength; - this.params = params; - } - - get bytes() { - return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength)); - } - - ensureBuffer(requested) {} - - readBlock() { - if (this.eof) { - return; - } - - const jbig2Image = new _jbig.Jbig2Image(); - const chunks = []; - - if ((0, _primitives.isDict)(this.params)) { - const globalsStream = this.params.get("JBIG2Globals"); - - if ((0, _primitives.isStream)(globalsStream)) { - const globals = globalsStream.getBytes(); - chunks.push({ - data: globals, - start: 0, - end: globals.length - }); - } - } - - chunks.push({ - data: this.bytes, - start: 0, - end: this.bytes.length - }); - const data = jbig2Image.parseChunks(chunks); - const dataLength = data.length; - - for (let i = 0; i < dataLength; i++) { - data[i] ^= 0xff; - } - - this.buffer = data; - this.bufferLength = dataLength; - this.eof = true; - } - -} - -exports.Jbig2Stream = Jbig2Stream; - -/***/ }), -/* 35 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Jbig2Image = void 0; - -var _util = __w_pdfjs_require__(2); - -var _core_utils = __w_pdfjs_require__(9); - -var _arithmetic_decoder = __w_pdfjs_require__(36); - -var _ccitt = __w_pdfjs_require__(32); - -class Jbig2Error extends _util.BaseException { - constructor(msg) { - super(`JBIG2 error: ${msg}`, "Jbig2Error"); - } - -} - -class ContextCache { - getContexts(id) { - if (id in this) { - return this[id]; - } - - return this[id] = new Int8Array(1 << 16); - } - -} - -class DecodingContext { - constructor(data, start, end) { - this.data = data; - this.start = start; - this.end = end; - } - - get decoder() { - const decoder = new _arithmetic_decoder.ArithmeticDecoder(this.data, this.start, this.end); - return (0, _util.shadow)(this, "decoder", decoder); - } - - get contextCache() { - const cache = new ContextCache(); - return (0, _util.shadow)(this, "contextCache", cache); - } - -} - -function decodeInteger(contextCache, procedure, decoder) { - const contexts = contextCache.getContexts(procedure); - let prev = 1; - - function readBits(length) { - let v = 0; - - for (let i = 0; i < length; i++) { - const bit = decoder.readBit(contexts, prev); - prev = prev < 256 ? prev << 1 | bit : (prev << 1 | bit) & 511 | 256; - v = v << 1 | bit; - } - - return v >>> 0; - } - - const sign = readBits(1); - const value = readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(32) + 4436 : readBits(12) + 340 : readBits(8) + 84 : readBits(6) + 20 : readBits(4) + 4 : readBits(2); - - if (sign === 0) { - return value; - } else if (value > 0) { - return -value; - } - - return null; -} - -function decodeIAID(contextCache, decoder, codeLength) { - const contexts = contextCache.getContexts("IAID"); - let prev = 1; - - for (let i = 0; i < codeLength; i++) { - const bit = decoder.readBit(contexts, prev); - prev = prev << 1 | bit; - } - - if (codeLength < 31) { - return prev & (1 << codeLength) - 1; - } - - return prev & 0x7fffffff; -} - -const SegmentTypes = ["SymbolDictionary", null, null, null, "IntermediateTextRegion", null, "ImmediateTextRegion", "ImmediateLosslessTextRegion", null, null, null, null, null, null, null, null, "PatternDictionary", null, null, null, "IntermediateHalftoneRegion", null, "ImmediateHalftoneRegion", "ImmediateLosslessHalftoneRegion", null, null, null, null, null, null, null, null, null, null, null, null, "IntermediateGenericRegion", null, "ImmediateGenericRegion", "ImmediateLosslessGenericRegion", "IntermediateGenericRefinementRegion", null, "ImmediateGenericRefinementRegion", "ImmediateLosslessGenericRefinementRegion", null, null, null, null, "PageInformation", "EndOfPage", "EndOfStripe", "EndOfFile", "Profiles", "Tables", null, null, null, null, null, null, null, null, "Extension"]; -const CodingTemplates = [[{ - x: -1, - y: -2 -}, { - x: 0, - y: -2 -}, { - x: 1, - y: -2 -}, { - x: -2, - y: -1 -}, { - x: -1, - y: -1 -}, { - x: 0, - y: -1 -}, { - x: 1, - y: -1 -}, { - x: 2, - y: -1 -}, { - x: -4, - y: 0 -}, { - x: -3, - y: 0 -}, { - x: -2, - y: 0 -}, { - x: -1, - y: 0 -}], [{ - x: -1, - y: -2 -}, { - x: 0, - y: -2 -}, { - x: 1, - y: -2 -}, { - x: 2, - y: -2 -}, { - x: -2, - y: -1 -}, { - x: -1, - y: -1 -}, { - x: 0, - y: -1 -}, { - x: 1, - y: -1 -}, { - x: 2, - y: -1 -}, { - x: -3, - y: 0 -}, { - x: -2, - y: 0 -}, { - x: -1, - y: 0 -}], [{ - x: -1, - y: -2 -}, { - x: 0, - y: -2 -}, { - x: 1, - y: -2 -}, { - x: -2, - y: -1 -}, { - x: -1, - y: -1 -}, { - x: 0, - y: -1 -}, { - x: 1, - y: -1 -}, { - x: -2, - y: 0 -}, { - x: -1, - y: 0 -}], [{ - x: -3, - y: -1 -}, { - x: -2, - y: -1 -}, { - x: -1, - y: -1 -}, { - x: 0, - y: -1 -}, { - x: 1, - y: -1 -}, { - x: -4, - y: 0 -}, { - x: -3, - y: 0 -}, { - x: -2, - y: 0 -}, { - x: -1, - y: 0 -}]]; -const RefinementTemplates = [{ - coding: [{ - x: 0, - y: -1 - }, { - x: 1, - y: -1 - }, { - x: -1, - y: 0 - }], - reference: [{ - x: 0, - y: -1 - }, { - x: 1, - y: -1 - }, { - x: -1, - y: 0 - }, { - x: 0, - y: 0 - }, { - x: 1, - y: 0 - }, { - x: -1, - y: 1 - }, { - x: 0, - y: 1 - }, { - x: 1, - y: 1 - }] -}, { - coding: [{ - x: -1, - y: -1 - }, { - x: 0, - y: -1 - }, { - x: 1, - y: -1 - }, { - x: -1, - y: 0 - }], - reference: [{ - x: 0, - y: -1 - }, { - x: -1, - y: 0 - }, { - x: 0, - y: 0 - }, { - x: 1, - y: 0 - }, { - x: 0, - y: 1 - }, { - x: 1, - y: 1 - }] -}]; -const ReusedContexts = [0x9b25, 0x0795, 0x00e5, 0x0195]; -const RefinementReusedContexts = [0x0020, 0x0008]; - -function decodeBitmapTemplate0(width, height, decodingContext) { - const decoder = decodingContext.decoder; - const contexts = decodingContext.contextCache.getContexts("GB"); - const bitmap = []; - let contextLabel, i, j, pixel, row, row1, row2; - const OLD_PIXEL_MASK = 0x7bf7; - - for (i = 0; i < height; i++) { - row = bitmap[i] = new Uint8Array(width); - row1 = i < 1 ? row : bitmap[i - 1]; - row2 = i < 2 ? row : bitmap[i - 2]; - contextLabel = row2[0] << 13 | row2[1] << 12 | row2[2] << 11 | row1[0] << 7 | row1[1] << 6 | row1[2] << 5 | row1[3] << 4; - - for (j = 0; j < width; j++) { - row[j] = pixel = decoder.readBit(contexts, contextLabel); - contextLabel = (contextLabel & OLD_PIXEL_MASK) << 1 | (j + 3 < width ? row2[j + 3] << 11 : 0) | (j + 4 < width ? row1[j + 4] << 4 : 0) | pixel; - } - } - - return bitmap; -} - -function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at, decodingContext) { - if (mmr) { - const input = new Reader(decodingContext.data, decodingContext.start, decodingContext.end); - return decodeMMRBitmap(input, width, height, false); - } - - if (templateIndex === 0 && !skip && !prediction && at.length === 4 && at[0].x === 3 && at[0].y === -1 && at[1].x === -3 && at[1].y === -1 && at[2].x === 2 && at[2].y === -2 && at[3].x === -2 && at[3].y === -2) { - return decodeBitmapTemplate0(width, height, decodingContext); - } - - const useskip = !!skip; - const template = CodingTemplates[templateIndex].concat(at); - template.sort(function (a, b) { - return a.y - b.y || a.x - b.x; - }); - const templateLength = template.length; - const templateX = new Int8Array(templateLength); - const templateY = new Int8Array(templateLength); - const changingTemplateEntries = []; - let reuseMask = 0, - minX = 0, - maxX = 0, - minY = 0; - let c, k; - - for (k = 0; k < templateLength; k++) { - templateX[k] = template[k].x; - templateY[k] = template[k].y; - minX = Math.min(minX, template[k].x); - maxX = Math.max(maxX, template[k].x); - minY = Math.min(minY, template[k].y); - - if (k < templateLength - 1 && template[k].y === template[k + 1].y && template[k].x === template[k + 1].x - 1) { - reuseMask |= 1 << templateLength - 1 - k; - } else { - changingTemplateEntries.push(k); - } - } - - const changingEntriesLength = changingTemplateEntries.length; - const changingTemplateX = new Int8Array(changingEntriesLength); - const changingTemplateY = new Int8Array(changingEntriesLength); - const changingTemplateBit = new Uint16Array(changingEntriesLength); - - for (c = 0; c < changingEntriesLength; c++) { - k = changingTemplateEntries[c]; - changingTemplateX[c] = template[k].x; - changingTemplateY[c] = template[k].y; - changingTemplateBit[c] = 1 << templateLength - 1 - k; - } - - const sbb_left = -minX; - const sbb_top = -minY; - const sbb_right = width - maxX; - const pseudoPixelContext = ReusedContexts[templateIndex]; - let row = new Uint8Array(width); - const bitmap = []; - const decoder = decodingContext.decoder; - const contexts = decodingContext.contextCache.getContexts("GB"); - let ltp = 0, - j, - i0, - j0, - contextLabel = 0, - bit, - shift; - - for (let i = 0; i < height; i++) { - if (prediction) { - const sltp = decoder.readBit(contexts, pseudoPixelContext); - ltp ^= sltp; - - if (ltp) { - bitmap.push(row); - continue; - } - } - - row = new Uint8Array(row); - bitmap.push(row); - - for (j = 0; j < width; j++) { - if (useskip && skip[i][j]) { - row[j] = 0; - continue; - } - - if (j >= sbb_left && j < sbb_right && i >= sbb_top) { - contextLabel = contextLabel << 1 & reuseMask; - - for (k = 0; k < changingEntriesLength; k++) { - i0 = i + changingTemplateY[k]; - j0 = j + changingTemplateX[k]; - bit = bitmap[i0][j0]; - - if (bit) { - bit = changingTemplateBit[k]; - contextLabel |= bit; - } - } - } else { - contextLabel = 0; - shift = templateLength - 1; - - for (k = 0; k < templateLength; k++, shift--) { - j0 = j + templateX[k]; - - if (j0 >= 0 && j0 < width) { - i0 = i + templateY[k]; - - if (i0 >= 0) { - bit = bitmap[i0][j0]; - - if (bit) { - contextLabel |= bit << shift; - } - } - } - } - } - - const pixel = decoder.readBit(contexts, contextLabel); - row[j] = pixel; - } - } - - return bitmap; -} - -function decodeRefinement(width, height, templateIndex, referenceBitmap, offsetX, offsetY, prediction, at, decodingContext) { - let codingTemplate = RefinementTemplates[templateIndex].coding; - - if (templateIndex === 0) { - codingTemplate = codingTemplate.concat([at[0]]); - } - - const codingTemplateLength = codingTemplate.length; - const codingTemplateX = new Int32Array(codingTemplateLength); - const codingTemplateY = new Int32Array(codingTemplateLength); - let k; - - for (k = 0; k < codingTemplateLength; k++) { - codingTemplateX[k] = codingTemplate[k].x; - codingTemplateY[k] = codingTemplate[k].y; - } - - let referenceTemplate = RefinementTemplates[templateIndex].reference; - - if (templateIndex === 0) { - referenceTemplate = referenceTemplate.concat([at[1]]); - } - - const referenceTemplateLength = referenceTemplate.length; - const referenceTemplateX = new Int32Array(referenceTemplateLength); - const referenceTemplateY = new Int32Array(referenceTemplateLength); - - for (k = 0; k < referenceTemplateLength; k++) { - referenceTemplateX[k] = referenceTemplate[k].x; - referenceTemplateY[k] = referenceTemplate[k].y; - } - - const referenceWidth = referenceBitmap[0].length; - const referenceHeight = referenceBitmap.length; - const pseudoPixelContext = RefinementReusedContexts[templateIndex]; - const bitmap = []; - const decoder = decodingContext.decoder; - const contexts = decodingContext.contextCache.getContexts("GR"); - let ltp = 0; - - for (let i = 0; i < height; i++) { - if (prediction) { - const sltp = decoder.readBit(contexts, pseudoPixelContext); - ltp ^= sltp; - - if (ltp) { - throw new Jbig2Error("prediction is not supported"); - } - } - - const row = new Uint8Array(width); - bitmap.push(row); - - for (let j = 0; j < width; j++) { - let i0, j0; - let contextLabel = 0; - - for (k = 0; k < codingTemplateLength; k++) { - i0 = i + codingTemplateY[k]; - j0 = j + codingTemplateX[k]; - - if (i0 < 0 || j0 < 0 || j0 >= width) { - contextLabel <<= 1; - } else { - contextLabel = contextLabel << 1 | bitmap[i0][j0]; - } - } - - for (k = 0; k < referenceTemplateLength; k++) { - i0 = i + referenceTemplateY[k] - offsetY; - j0 = j + referenceTemplateX[k] - offsetX; - - if (i0 < 0 || i0 >= referenceHeight || j0 < 0 || j0 >= referenceWidth) { - contextLabel <<= 1; - } else { - contextLabel = contextLabel << 1 | referenceBitmap[i0][j0]; - } - } - - const pixel = decoder.readBit(contexts, contextLabel); - row[j] = pixel; - } - } - - return bitmap; -} - -function decodeSymbolDictionary(huffman, refinement, symbols, numberOfNewSymbols, numberOfExportedSymbols, huffmanTables, templateIndex, at, refinementTemplateIndex, refinementAt, decodingContext, huffmanInput) { - if (huffman && refinement) { - throw new Jbig2Error("symbol refinement with Huffman is not supported"); - } - - const newSymbols = []; - let currentHeight = 0; - let symbolCodeLength = (0, _core_utils.log2)(symbols.length + numberOfNewSymbols); - const decoder = decodingContext.decoder; - const contextCache = decodingContext.contextCache; - let tableB1, symbolWidths; - - if (huffman) { - tableB1 = getStandardTable(1); - symbolWidths = []; - symbolCodeLength = Math.max(symbolCodeLength, 1); - } - - while (newSymbols.length < numberOfNewSymbols) { - const deltaHeight = huffman ? huffmanTables.tableDeltaHeight.decode(huffmanInput) : decodeInteger(contextCache, "IADH", decoder); - currentHeight += deltaHeight; - let currentWidth = 0, - totalWidth = 0; - const firstSymbol = huffman ? symbolWidths.length : 0; - - while (true) { - const deltaWidth = huffman ? huffmanTables.tableDeltaWidth.decode(huffmanInput) : decodeInteger(contextCache, "IADW", decoder); - - if (deltaWidth === null) { - break; - } - - currentWidth += deltaWidth; - totalWidth += currentWidth; - let bitmap; - - if (refinement) { - const numberOfInstances = decodeInteger(contextCache, "IAAI", decoder); - - if (numberOfInstances > 1) { - bitmap = decodeTextRegion(huffman, refinement, currentWidth, currentHeight, 0, numberOfInstances, 1, symbols.concat(newSymbols), symbolCodeLength, 0, 0, 1, 0, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, 0, huffmanInput); - } else { - const symbolId = decodeIAID(contextCache, decoder, symbolCodeLength); - const rdx = decodeInteger(contextCache, "IARDX", decoder); - const rdy = decodeInteger(contextCache, "IARDY", decoder); - const symbol = symbolId < symbols.length ? symbols[symbolId] : newSymbols[symbolId - symbols.length]; - bitmap = decodeRefinement(currentWidth, currentHeight, refinementTemplateIndex, symbol, rdx, rdy, false, refinementAt, decodingContext); - } - - newSymbols.push(bitmap); - } else if (huffman) { - symbolWidths.push(currentWidth); - } else { - bitmap = decodeBitmap(false, currentWidth, currentHeight, templateIndex, false, null, at, decodingContext); - newSymbols.push(bitmap); - } - } - - if (huffman && !refinement) { - const bitmapSize = huffmanTables.tableBitmapSize.decode(huffmanInput); - huffmanInput.byteAlign(); - let collectiveBitmap; - - if (bitmapSize === 0) { - collectiveBitmap = readUncompressedBitmap(huffmanInput, totalWidth, currentHeight); - } else { - const originalEnd = huffmanInput.end; - const bitmapEnd = huffmanInput.position + bitmapSize; - huffmanInput.end = bitmapEnd; - collectiveBitmap = decodeMMRBitmap(huffmanInput, totalWidth, currentHeight, false); - huffmanInput.end = originalEnd; - huffmanInput.position = bitmapEnd; - } - - const numberOfSymbolsDecoded = symbolWidths.length; - - if (firstSymbol === numberOfSymbolsDecoded - 1) { - newSymbols.push(collectiveBitmap); - } else { - let i, - y, - xMin = 0, - xMax, - bitmapWidth, - symbolBitmap; - - for (i = firstSymbol; i < numberOfSymbolsDecoded; i++) { - bitmapWidth = symbolWidths[i]; - xMax = xMin + bitmapWidth; - symbolBitmap = []; - - for (y = 0; y < currentHeight; y++) { - symbolBitmap.push(collectiveBitmap[y].subarray(xMin, xMax)); - } - - newSymbols.push(symbolBitmap); - xMin = xMax; - } - } - } - } - - const exportedSymbols = [], - flags = []; - let currentFlag = false, - i, - ii; - const totalSymbolsLength = symbols.length + numberOfNewSymbols; - - while (flags.length < totalSymbolsLength) { - let runLength = huffman ? tableB1.decode(huffmanInput) : decodeInteger(contextCache, "IAEX", decoder); - - while (runLength--) { - flags.push(currentFlag); - } - - currentFlag = !currentFlag; - } - - for (i = 0, ii = symbols.length; i < ii; i++) { - if (flags[i]) { - exportedSymbols.push(symbols[i]); - } - } - - for (let j = 0; j < numberOfNewSymbols; i++, j++) { - if (flags[i]) { - exportedSymbols.push(newSymbols[j]); - } - } - - return exportedSymbols; -} - -function decodeTextRegion(huffman, refinement, width, height, defaultPixelValue, numberOfSymbolInstances, stripSize, inputSymbols, symbolCodeLength, transposed, dsOffset, referenceCorner, combinationOperator, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, logStripSize, huffmanInput) { - if (huffman && refinement) { - throw new Jbig2Error("refinement with Huffman is not supported"); - } - - const bitmap = []; - let i, row; - - for (i = 0; i < height; i++) { - row = new Uint8Array(width); - - if (defaultPixelValue) { - for (let j = 0; j < width; j++) { - row[j] = defaultPixelValue; - } - } - - bitmap.push(row); - } - - const decoder = decodingContext.decoder; - const contextCache = decodingContext.contextCache; - let stripT = huffman ? -huffmanTables.tableDeltaT.decode(huffmanInput) : -decodeInteger(contextCache, "IADT", decoder); - let firstS = 0; - i = 0; - - while (i < numberOfSymbolInstances) { - const deltaT = huffman ? huffmanTables.tableDeltaT.decode(huffmanInput) : decodeInteger(contextCache, "IADT", decoder); - stripT += deltaT; - const deltaFirstS = huffman ? huffmanTables.tableFirstS.decode(huffmanInput) : decodeInteger(contextCache, "IAFS", decoder); - firstS += deltaFirstS; - let currentS = firstS; - - do { - let currentT = 0; - - if (stripSize > 1) { - currentT = huffman ? huffmanInput.readBits(logStripSize) : decodeInteger(contextCache, "IAIT", decoder); - } - - const t = stripSize * stripT + currentT; - const symbolId = huffman ? huffmanTables.symbolIDTable.decode(huffmanInput) : decodeIAID(contextCache, decoder, symbolCodeLength); - const applyRefinement = refinement && (huffman ? huffmanInput.readBit() : decodeInteger(contextCache, "IARI", decoder)); - let symbolBitmap = inputSymbols[symbolId]; - let symbolWidth = symbolBitmap[0].length; - let symbolHeight = symbolBitmap.length; - - if (applyRefinement) { - const rdw = decodeInteger(contextCache, "IARDW", decoder); - const rdh = decodeInteger(contextCache, "IARDH", decoder); - const rdx = decodeInteger(contextCache, "IARDX", decoder); - const rdy = decodeInteger(contextCache, "IARDY", decoder); - symbolWidth += rdw; - symbolHeight += rdh; - symbolBitmap = decodeRefinement(symbolWidth, symbolHeight, refinementTemplateIndex, symbolBitmap, (rdw >> 1) + rdx, (rdh >> 1) + rdy, false, refinementAt, decodingContext); - } - - const offsetT = t - (referenceCorner & 1 ? 0 : symbolHeight - 1); - const offsetS = currentS - (referenceCorner & 2 ? symbolWidth - 1 : 0); - let s2, t2, symbolRow; - - if (transposed) { - for (s2 = 0; s2 < symbolHeight; s2++) { - row = bitmap[offsetS + s2]; - - if (!row) { - continue; - } - - symbolRow = symbolBitmap[s2]; - const maxWidth = Math.min(width - offsetT, symbolWidth); - - switch (combinationOperator) { - case 0: - for (t2 = 0; t2 < maxWidth; t2++) { - row[offsetT + t2] |= symbolRow[t2]; - } - - break; - - case 2: - for (t2 = 0; t2 < maxWidth; t2++) { - row[offsetT + t2] ^= symbolRow[t2]; - } - - break; - - default: - throw new Jbig2Error(`operator ${combinationOperator} is not supported`); - } - } - - currentS += symbolHeight - 1; - } else { - for (t2 = 0; t2 < symbolHeight; t2++) { - row = bitmap[offsetT + t2]; - - if (!row) { - continue; - } - - symbolRow = symbolBitmap[t2]; - - switch (combinationOperator) { - case 0: - for (s2 = 0; s2 < symbolWidth; s2++) { - row[offsetS + s2] |= symbolRow[s2]; - } - - break; - - case 2: - for (s2 = 0; s2 < symbolWidth; s2++) { - row[offsetS + s2] ^= symbolRow[s2]; - } - - break; - - default: - throw new Jbig2Error(`operator ${combinationOperator} is not supported`); - } - } - - currentS += symbolWidth - 1; - } - - i++; - const deltaS = huffman ? huffmanTables.tableDeltaS.decode(huffmanInput) : decodeInteger(contextCache, "IADS", decoder); - - if (deltaS === null) { - break; - } - - currentS += deltaS + dsOffset; - } while (true); - } - - return bitmap; -} - -function decodePatternDictionary(mmr, patternWidth, patternHeight, maxPatternIndex, template, decodingContext) { - const at = []; - - if (!mmr) { - at.push({ - x: -patternWidth, - y: 0 - }); - - if (template === 0) { - at.push({ - x: -3, - y: -1 - }, { - x: 2, - y: -2 - }, { - x: -2, - y: -2 - }); - } - } - - const collectiveWidth = (maxPatternIndex + 1) * patternWidth; - const collectiveBitmap = decodeBitmap(mmr, collectiveWidth, patternHeight, template, false, null, at, decodingContext); - const patterns = []; - - for (let i = 0; i <= maxPatternIndex; i++) { - const patternBitmap = []; - const xMin = patternWidth * i; - const xMax = xMin + patternWidth; - - for (let y = 0; y < patternHeight; y++) { - patternBitmap.push(collectiveBitmap[y].subarray(xMin, xMax)); - } - - patterns.push(patternBitmap); - } - - return patterns; -} - -function decodeHalftoneRegion(mmr, patterns, template, regionWidth, regionHeight, defaultPixelValue, enableSkip, combinationOperator, gridWidth, gridHeight, gridOffsetX, gridOffsetY, gridVectorX, gridVectorY, decodingContext) { - const skip = null; - - if (enableSkip) { - throw new Jbig2Error("skip is not supported"); - } - - if (combinationOperator !== 0) { - throw new Jbig2Error(`operator "${combinationOperator}" is not supported in halftone region`); - } - - const regionBitmap = []; - let i, j, row; - - for (i = 0; i < regionHeight; i++) { - row = new Uint8Array(regionWidth); - - if (defaultPixelValue) { - for (j = 0; j < regionWidth; j++) { - row[j] = defaultPixelValue; - } - } - - regionBitmap.push(row); - } - - const numberOfPatterns = patterns.length; - const pattern0 = patterns[0]; - const patternWidth = pattern0[0].length, - patternHeight = pattern0.length; - const bitsPerValue = (0, _core_utils.log2)(numberOfPatterns); - const at = []; - - if (!mmr) { - at.push({ - x: template <= 1 ? 3 : 2, - y: -1 - }); - - if (template === 0) { - at.push({ - x: -3, - y: -1 - }, { - x: 2, - y: -2 - }, { - x: -2, - y: -2 - }); - } - } - - const grayScaleBitPlanes = []; - let mmrInput, bitmap; - - if (mmr) { - mmrInput = new Reader(decodingContext.data, decodingContext.start, decodingContext.end); - } - - for (i = bitsPerValue - 1; i >= 0; i--) { - if (mmr) { - bitmap = decodeMMRBitmap(mmrInput, gridWidth, gridHeight, true); - } else { - bitmap = decodeBitmap(false, gridWidth, gridHeight, template, false, skip, at, decodingContext); - } - - grayScaleBitPlanes[i] = bitmap; - } - - let mg, ng, bit, patternIndex, patternBitmap, x, y, patternRow, regionRow; - - for (mg = 0; mg < gridHeight; mg++) { - for (ng = 0; ng < gridWidth; ng++) { - bit = 0; - patternIndex = 0; - - for (j = bitsPerValue - 1; j >= 0; j--) { - bit ^= grayScaleBitPlanes[j][mg][ng]; - patternIndex |= bit << j; - } - - patternBitmap = patterns[patternIndex]; - x = gridOffsetX + mg * gridVectorY + ng * gridVectorX >> 8; - y = gridOffsetY + mg * gridVectorX - ng * gridVectorY >> 8; - - if (x >= 0 && x + patternWidth <= regionWidth && y >= 0 && y + patternHeight <= regionHeight) { - for (i = 0; i < patternHeight; i++) { - regionRow = regionBitmap[y + i]; - patternRow = patternBitmap[i]; - - for (j = 0; j < patternWidth; j++) { - regionRow[x + j] |= patternRow[j]; - } - } - } else { - let regionX, regionY; - - for (i = 0; i < patternHeight; i++) { - regionY = y + i; - - if (regionY < 0 || regionY >= regionHeight) { - continue; - } - - regionRow = regionBitmap[regionY]; - patternRow = patternBitmap[i]; - - for (j = 0; j < patternWidth; j++) { - regionX = x + j; - - if (regionX >= 0 && regionX < regionWidth) { - regionRow[regionX] |= patternRow[j]; - } - } - } - } - } - } - - return regionBitmap; -} - -function readSegmentHeader(data, start) { - const segmentHeader = {}; - segmentHeader.number = (0, _core_utils.readUint32)(data, start); - const flags = data[start + 4]; - const segmentType = flags & 0x3f; - - if (!SegmentTypes[segmentType]) { - throw new Jbig2Error("invalid segment type: " + segmentType); - } - - segmentHeader.type = segmentType; - segmentHeader.typeName = SegmentTypes[segmentType]; - segmentHeader.deferredNonRetain = !!(flags & 0x80); - const pageAssociationFieldSize = !!(flags & 0x40); - const referredFlags = data[start + 5]; - let referredToCount = referredFlags >> 5 & 7; - const retainBits = [referredFlags & 31]; - let position = start + 6; - - if (referredFlags === 7) { - referredToCount = (0, _core_utils.readUint32)(data, position - 1) & 0x1fffffff; - position += 3; - let bytes = referredToCount + 7 >> 3; - retainBits[0] = data[position++]; - - while (--bytes > 0) { - retainBits.push(data[position++]); - } - } else if (referredFlags === 5 || referredFlags === 6) { - throw new Jbig2Error("invalid referred-to flags"); - } - - segmentHeader.retainBits = retainBits; - let referredToSegmentNumberSize = 4; - - if (segmentHeader.number <= 256) { - referredToSegmentNumberSize = 1; - } else if (segmentHeader.number <= 65536) { - referredToSegmentNumberSize = 2; - } - - const referredTo = []; - let i, ii; - - for (i = 0; i < referredToCount; i++) { - let number; - - if (referredToSegmentNumberSize === 1) { - number = data[position]; - } else if (referredToSegmentNumberSize === 2) { - number = (0, _core_utils.readUint16)(data, position); - } else { - number = (0, _core_utils.readUint32)(data, position); - } - - referredTo.push(number); - position += referredToSegmentNumberSize; - } - - segmentHeader.referredTo = referredTo; - - if (!pageAssociationFieldSize) { - segmentHeader.pageAssociation = data[position++]; - } else { - segmentHeader.pageAssociation = (0, _core_utils.readUint32)(data, position); - position += 4; - } - - segmentHeader.length = (0, _core_utils.readUint32)(data, position); - position += 4; - - if (segmentHeader.length === 0xffffffff) { - if (segmentType === 38) { - const genericRegionInfo = readRegionSegmentInformation(data, position); - const genericRegionSegmentFlags = data[position + RegionSegmentInformationFieldLength]; - const genericRegionMmr = !!(genericRegionSegmentFlags & 1); - const searchPatternLength = 6; - const searchPattern = new Uint8Array(searchPatternLength); - - if (!genericRegionMmr) { - searchPattern[0] = 0xff; - searchPattern[1] = 0xac; - } - - searchPattern[2] = genericRegionInfo.height >>> 24 & 0xff; - searchPattern[3] = genericRegionInfo.height >> 16 & 0xff; - searchPattern[4] = genericRegionInfo.height >> 8 & 0xff; - searchPattern[5] = genericRegionInfo.height & 0xff; - - for (i = position, ii = data.length; i < ii; i++) { - let j = 0; - - while (j < searchPatternLength && searchPattern[j] === data[i + j]) { - j++; - } - - if (j === searchPatternLength) { - segmentHeader.length = i + searchPatternLength; - break; - } - } - - if (segmentHeader.length === 0xffffffff) { - throw new Jbig2Error("segment end was not found"); - } - } else { - throw new Jbig2Error("invalid unknown segment length"); - } - } - - segmentHeader.headerEnd = position; - return segmentHeader; -} - -function readSegments(header, data, start, end) { - const segments = []; - let position = start; - - while (position < end) { - const segmentHeader = readSegmentHeader(data, position); - position = segmentHeader.headerEnd; - const segment = { - header: segmentHeader, - data - }; - - if (!header.randomAccess) { - segment.start = position; - position += segmentHeader.length; - segment.end = position; - } - - segments.push(segment); - - if (segmentHeader.type === 51) { - break; - } - } - - if (header.randomAccess) { - for (let i = 0, ii = segments.length; i < ii; i++) { - segments[i].start = position; - position += segments[i].header.length; - segments[i].end = position; - } - } - - return segments; -} - -function readRegionSegmentInformation(data, start) { - return { - width: (0, _core_utils.readUint32)(data, start), - height: (0, _core_utils.readUint32)(data, start + 4), - x: (0, _core_utils.readUint32)(data, start + 8), - y: (0, _core_utils.readUint32)(data, start + 12), - combinationOperator: data[start + 16] & 7 - }; -} - -const RegionSegmentInformationFieldLength = 17; - -function processSegment(segment, visitor) { - const header = segment.header; - const data = segment.data, - end = segment.end; - let position = segment.start; - let args, at, i, atLength; - - switch (header.type) { - case 0: - const dictionary = {}; - const dictionaryFlags = (0, _core_utils.readUint16)(data, position); - dictionary.huffman = !!(dictionaryFlags & 1); - dictionary.refinement = !!(dictionaryFlags & 2); - dictionary.huffmanDHSelector = dictionaryFlags >> 2 & 3; - dictionary.huffmanDWSelector = dictionaryFlags >> 4 & 3; - dictionary.bitmapSizeSelector = dictionaryFlags >> 6 & 1; - dictionary.aggregationInstancesSelector = dictionaryFlags >> 7 & 1; - dictionary.bitmapCodingContextUsed = !!(dictionaryFlags & 256); - dictionary.bitmapCodingContextRetained = !!(dictionaryFlags & 512); - dictionary.template = dictionaryFlags >> 10 & 3; - dictionary.refinementTemplate = dictionaryFlags >> 12 & 1; - position += 2; - - if (!dictionary.huffman) { - atLength = dictionary.template === 0 ? 4 : 1; - at = []; - - for (i = 0; i < atLength; i++) { - at.push({ - x: (0, _core_utils.readInt8)(data, position), - y: (0, _core_utils.readInt8)(data, position + 1) - }); - position += 2; - } - - dictionary.at = at; - } - - if (dictionary.refinement && !dictionary.refinementTemplate) { - at = []; - - for (i = 0; i < 2; i++) { - at.push({ - x: (0, _core_utils.readInt8)(data, position), - y: (0, _core_utils.readInt8)(data, position + 1) - }); - position += 2; - } - - dictionary.refinementAt = at; - } - - dictionary.numberOfExportedSymbols = (0, _core_utils.readUint32)(data, position); - position += 4; - dictionary.numberOfNewSymbols = (0, _core_utils.readUint32)(data, position); - position += 4; - args = [dictionary, header.number, header.referredTo, data, position, end]; - break; - - case 6: - case 7: - const textRegion = {}; - textRegion.info = readRegionSegmentInformation(data, position); - position += RegionSegmentInformationFieldLength; - const textRegionSegmentFlags = (0, _core_utils.readUint16)(data, position); - position += 2; - textRegion.huffman = !!(textRegionSegmentFlags & 1); - textRegion.refinement = !!(textRegionSegmentFlags & 2); - textRegion.logStripSize = textRegionSegmentFlags >> 2 & 3; - textRegion.stripSize = 1 << textRegion.logStripSize; - textRegion.referenceCorner = textRegionSegmentFlags >> 4 & 3; - textRegion.transposed = !!(textRegionSegmentFlags & 64); - textRegion.combinationOperator = textRegionSegmentFlags >> 7 & 3; - textRegion.defaultPixelValue = textRegionSegmentFlags >> 9 & 1; - textRegion.dsOffset = textRegionSegmentFlags << 17 >> 27; - textRegion.refinementTemplate = textRegionSegmentFlags >> 15 & 1; - - if (textRegion.huffman) { - const textRegionHuffmanFlags = (0, _core_utils.readUint16)(data, position); - position += 2; - textRegion.huffmanFS = textRegionHuffmanFlags & 3; - textRegion.huffmanDS = textRegionHuffmanFlags >> 2 & 3; - textRegion.huffmanDT = textRegionHuffmanFlags >> 4 & 3; - textRegion.huffmanRefinementDW = textRegionHuffmanFlags >> 6 & 3; - textRegion.huffmanRefinementDH = textRegionHuffmanFlags >> 8 & 3; - textRegion.huffmanRefinementDX = textRegionHuffmanFlags >> 10 & 3; - textRegion.huffmanRefinementDY = textRegionHuffmanFlags >> 12 & 3; - textRegion.huffmanRefinementSizeSelector = !!(textRegionHuffmanFlags & 0x4000); - } - - if (textRegion.refinement && !textRegion.refinementTemplate) { - at = []; - - for (i = 0; i < 2; i++) { - at.push({ - x: (0, _core_utils.readInt8)(data, position), - y: (0, _core_utils.readInt8)(data, position + 1) - }); - position += 2; - } - - textRegion.refinementAt = at; - } - - textRegion.numberOfSymbolInstances = (0, _core_utils.readUint32)(data, position); - position += 4; - args = [textRegion, header.referredTo, data, position, end]; - break; - - case 16: - const patternDictionary = {}; - const patternDictionaryFlags = data[position++]; - patternDictionary.mmr = !!(patternDictionaryFlags & 1); - patternDictionary.template = patternDictionaryFlags >> 1 & 3; - patternDictionary.patternWidth = data[position++]; - patternDictionary.patternHeight = data[position++]; - patternDictionary.maxPatternIndex = (0, _core_utils.readUint32)(data, position); - position += 4; - args = [patternDictionary, header.number, data, position, end]; - break; - - case 22: - case 23: - const halftoneRegion = {}; - halftoneRegion.info = readRegionSegmentInformation(data, position); - position += RegionSegmentInformationFieldLength; - const halftoneRegionFlags = data[position++]; - halftoneRegion.mmr = !!(halftoneRegionFlags & 1); - halftoneRegion.template = halftoneRegionFlags >> 1 & 3; - halftoneRegion.enableSkip = !!(halftoneRegionFlags & 8); - halftoneRegion.combinationOperator = halftoneRegionFlags >> 4 & 7; - halftoneRegion.defaultPixelValue = halftoneRegionFlags >> 7 & 1; - halftoneRegion.gridWidth = (0, _core_utils.readUint32)(data, position); - position += 4; - halftoneRegion.gridHeight = (0, _core_utils.readUint32)(data, position); - position += 4; - halftoneRegion.gridOffsetX = (0, _core_utils.readUint32)(data, position) & 0xffffffff; - position += 4; - halftoneRegion.gridOffsetY = (0, _core_utils.readUint32)(data, position) & 0xffffffff; - position += 4; - halftoneRegion.gridVectorX = (0, _core_utils.readUint16)(data, position); - position += 2; - halftoneRegion.gridVectorY = (0, _core_utils.readUint16)(data, position); - position += 2; - args = [halftoneRegion, header.referredTo, data, position, end]; - break; - - case 38: - case 39: - const genericRegion = {}; - genericRegion.info = readRegionSegmentInformation(data, position); - position += RegionSegmentInformationFieldLength; - const genericRegionSegmentFlags = data[position++]; - genericRegion.mmr = !!(genericRegionSegmentFlags & 1); - genericRegion.template = genericRegionSegmentFlags >> 1 & 3; - genericRegion.prediction = !!(genericRegionSegmentFlags & 8); - - if (!genericRegion.mmr) { - atLength = genericRegion.template === 0 ? 4 : 1; - at = []; - - for (i = 0; i < atLength; i++) { - at.push({ - x: (0, _core_utils.readInt8)(data, position), - y: (0, _core_utils.readInt8)(data, position + 1) - }); - position += 2; - } - - genericRegion.at = at; - } - - args = [genericRegion, data, position, end]; - break; - - case 48: - const pageInfo = { - width: (0, _core_utils.readUint32)(data, position), - height: (0, _core_utils.readUint32)(data, position + 4), - resolutionX: (0, _core_utils.readUint32)(data, position + 8), - resolutionY: (0, _core_utils.readUint32)(data, position + 12) - }; - - if (pageInfo.height === 0xffffffff) { - delete pageInfo.height; - } - - const pageSegmentFlags = data[position + 16]; - (0, _core_utils.readUint16)(data, position + 17); - pageInfo.lossless = !!(pageSegmentFlags & 1); - pageInfo.refinement = !!(pageSegmentFlags & 2); - pageInfo.defaultPixelValue = pageSegmentFlags >> 2 & 1; - pageInfo.combinationOperator = pageSegmentFlags >> 3 & 3; - pageInfo.requiresBuffer = !!(pageSegmentFlags & 32); - pageInfo.combinationOperatorOverride = !!(pageSegmentFlags & 64); - args = [pageInfo]; - break; - - case 49: - break; - - case 50: - break; - - case 51: - break; - - case 53: - args = [header.number, data, position, end]; - break; - - case 62: - break; - - default: - throw new Jbig2Error(`segment type ${header.typeName}(${header.type})` + " is not implemented"); - } - - const callbackName = "on" + header.typeName; - - if (callbackName in visitor) { - visitor[callbackName].apply(visitor, args); - } -} - -function processSegments(segments, visitor) { - for (let i = 0, ii = segments.length; i < ii; i++) { - processSegment(segments[i], visitor); - } -} - -function parseJbig2Chunks(chunks) { - const visitor = new SimpleSegmentVisitor(); - - for (let i = 0, ii = chunks.length; i < ii; i++) { - const chunk = chunks[i]; - const segments = readSegments({}, chunk.data, chunk.start, chunk.end); - processSegments(segments, visitor); - } - - return visitor.buffer; -} - -function parseJbig2(data) { - const end = data.length; - let position = 0; - - if (data[position] !== 0x97 || data[position + 1] !== 0x4a || data[position + 2] !== 0x42 || data[position + 3] !== 0x32 || data[position + 4] !== 0x0d || data[position + 5] !== 0x0a || data[position + 6] !== 0x1a || data[position + 7] !== 0x0a) { - throw new Jbig2Error("parseJbig2 - invalid header."); - } - - const header = Object.create(null); - position += 8; - const flags = data[position++]; - header.randomAccess = !(flags & 1); - - if (!(flags & 2)) { - header.numberOfPages = (0, _core_utils.readUint32)(data, position); - position += 4; - } - - const segments = readSegments(header, data, position, end); - const visitor = new SimpleSegmentVisitor(); - processSegments(segments, visitor); - const { - width, - height - } = visitor.currentPageInfo; - const bitPacked = visitor.buffer; - const imgData = new Uint8ClampedArray(width * height); - let q = 0, - k = 0; - - for (let i = 0; i < height; i++) { - let mask = 0, - buffer; - - for (let j = 0; j < width; j++) { - if (!mask) { - mask = 128; - buffer = bitPacked[k++]; - } - - imgData[q++] = buffer & mask ? 0 : 255; - mask >>= 1; - } - } - - return { - imgData, - width, - height - }; -} - -class SimpleSegmentVisitor { - onPageInformation(info) { - this.currentPageInfo = info; - const rowSize = info.width + 7 >> 3; - const buffer = new Uint8ClampedArray(rowSize * info.height); - - if (info.defaultPixelValue) { - for (let i = 0, ii = buffer.length; i < ii; i++) { - buffer[i] = 0xff; - } - } - - this.buffer = buffer; - } - - drawBitmap(regionInfo, bitmap) { - const pageInfo = this.currentPageInfo; - const width = regionInfo.width, - height = regionInfo.height; - const rowSize = pageInfo.width + 7 >> 3; - const combinationOperator = pageInfo.combinationOperatorOverride ? regionInfo.combinationOperator : pageInfo.combinationOperator; - const buffer = this.buffer; - const mask0 = 128 >> (regionInfo.x & 7); - let offset0 = regionInfo.y * rowSize + (regionInfo.x >> 3); - let i, j, mask, offset; - - switch (combinationOperator) { - case 0: - for (i = 0; i < height; i++) { - mask = mask0; - offset = offset0; - - for (j = 0; j < width; j++) { - if (bitmap[i][j]) { - buffer[offset] |= mask; - } - - mask >>= 1; - - if (!mask) { - mask = 128; - offset++; - } - } - - offset0 += rowSize; - } - - break; - - case 2: - for (i = 0; i < height; i++) { - mask = mask0; - offset = offset0; - - for (j = 0; j < width; j++) { - if (bitmap[i][j]) { - buffer[offset] ^= mask; - } - - mask >>= 1; - - if (!mask) { - mask = 128; - offset++; - } - } - - offset0 += rowSize; - } - - break; - - default: - throw new Jbig2Error(`operator ${combinationOperator} is not supported`); - } - } - - onImmediateGenericRegion(region, data, start, end) { - const regionInfo = region.info; - const decodingContext = new DecodingContext(data, start, end); - const bitmap = decodeBitmap(region.mmr, regionInfo.width, regionInfo.height, region.template, region.prediction, null, region.at, decodingContext); - this.drawBitmap(regionInfo, bitmap); - } - - onImmediateLosslessGenericRegion() { - this.onImmediateGenericRegion.apply(this, arguments); - } - - onSymbolDictionary(dictionary, currentSegment, referredSegments, data, start, end) { - let huffmanTables, huffmanInput; - - if (dictionary.huffman) { - huffmanTables = getSymbolDictionaryHuffmanTables(dictionary, referredSegments, this.customTables); - huffmanInput = new Reader(data, start, end); - } - - let symbols = this.symbols; - - if (!symbols) { - this.symbols = symbols = {}; - } - - let inputSymbols = []; - - for (let i = 0, ii = referredSegments.length; i < ii; i++) { - const referredSymbols = symbols[referredSegments[i]]; - - if (referredSymbols) { - inputSymbols = inputSymbols.concat(referredSymbols); - } - } - - const decodingContext = new DecodingContext(data, start, end); - symbols[currentSegment] = decodeSymbolDictionary(dictionary.huffman, dictionary.refinement, inputSymbols, dictionary.numberOfNewSymbols, dictionary.numberOfExportedSymbols, huffmanTables, dictionary.template, dictionary.at, dictionary.refinementTemplate, dictionary.refinementAt, decodingContext, huffmanInput); - } - - onImmediateTextRegion(region, referredSegments, data, start, end) { - const regionInfo = region.info; - let huffmanTables, huffmanInput; - const symbols = this.symbols; - let inputSymbols = []; - - for (let i = 0, ii = referredSegments.length; i < ii; i++) { - const referredSymbols = symbols[referredSegments[i]]; - - if (referredSymbols) { - inputSymbols = inputSymbols.concat(referredSymbols); - } - } - - const symbolCodeLength = (0, _core_utils.log2)(inputSymbols.length); - - if (region.huffman) { - huffmanInput = new Reader(data, start, end); - huffmanTables = getTextRegionHuffmanTables(region, referredSegments, this.customTables, inputSymbols.length, huffmanInput); - } - - const decodingContext = new DecodingContext(data, start, end); - const bitmap = decodeTextRegion(region.huffman, region.refinement, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.numberOfSymbolInstances, region.stripSize, inputSymbols, symbolCodeLength, region.transposed, region.dsOffset, region.referenceCorner, region.combinationOperator, huffmanTables, region.refinementTemplate, region.refinementAt, decodingContext, region.logStripSize, huffmanInput); - this.drawBitmap(regionInfo, bitmap); - } - - onImmediateLosslessTextRegion() { - this.onImmediateTextRegion.apply(this, arguments); - } - - onPatternDictionary(dictionary, currentSegment, data, start, end) { - let patterns = this.patterns; - - if (!patterns) { - this.patterns = patterns = {}; - } - - const decodingContext = new DecodingContext(data, start, end); - patterns[currentSegment] = decodePatternDictionary(dictionary.mmr, dictionary.patternWidth, dictionary.patternHeight, dictionary.maxPatternIndex, dictionary.template, decodingContext); - } - - onImmediateHalftoneRegion(region, referredSegments, data, start, end) { - const patterns = this.patterns[referredSegments[0]]; - const regionInfo = region.info; - const decodingContext = new DecodingContext(data, start, end); - const bitmap = decodeHalftoneRegion(region.mmr, patterns, region.template, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.enableSkip, region.combinationOperator, region.gridWidth, region.gridHeight, region.gridOffsetX, region.gridOffsetY, region.gridVectorX, region.gridVectorY, decodingContext); - this.drawBitmap(regionInfo, bitmap); - } - - onImmediateLosslessHalftoneRegion() { - this.onImmediateHalftoneRegion.apply(this, arguments); - } - - onTables(currentSegment, data, start, end) { - let customTables = this.customTables; - - if (!customTables) { - this.customTables = customTables = {}; - } - - customTables[currentSegment] = decodeTablesSegment(data, start, end); - } - -} - -class HuffmanLine { - constructor(lineData) { - if (lineData.length === 2) { - this.isOOB = true; - this.rangeLow = 0; - this.prefixLength = lineData[0]; - this.rangeLength = 0; - this.prefixCode = lineData[1]; - this.isLowerRange = false; - } else { - this.isOOB = false; - this.rangeLow = lineData[0]; - this.prefixLength = lineData[1]; - this.rangeLength = lineData[2]; - this.prefixCode = lineData[3]; - this.isLowerRange = lineData[4] === "lower"; - } - } - -} - -class HuffmanTreeNode { - constructor(line) { - this.children = []; - - if (line) { - this.isLeaf = true; - this.rangeLength = line.rangeLength; - this.rangeLow = line.rangeLow; - this.isLowerRange = line.isLowerRange; - this.isOOB = line.isOOB; - } else { - this.isLeaf = false; - } - } - - buildTree(line, shift) { - const bit = line.prefixCode >> shift & 1; - - if (shift <= 0) { - this.children[bit] = new HuffmanTreeNode(line); - } else { - let node = this.children[bit]; - - if (!node) { - this.children[bit] = node = new HuffmanTreeNode(null); - } - - node.buildTree(line, shift - 1); - } - } - - decodeNode(reader) { - if (this.isLeaf) { - if (this.isOOB) { - return null; - } - - const htOffset = reader.readBits(this.rangeLength); - return this.rangeLow + (this.isLowerRange ? -htOffset : htOffset); - } - - const node = this.children[reader.readBit()]; - - if (!node) { - throw new Jbig2Error("invalid Huffman data"); - } - - return node.decodeNode(reader); - } - -} - -class HuffmanTable { - constructor(lines, prefixCodesDone) { - if (!prefixCodesDone) { - this.assignPrefixCodes(lines); - } - - this.rootNode = new HuffmanTreeNode(null); - - for (let i = 0, ii = lines.length; i < ii; i++) { - const line = lines[i]; - - if (line.prefixLength > 0) { - this.rootNode.buildTree(line, line.prefixLength - 1); - } - } - } - - decode(reader) { - return this.rootNode.decodeNode(reader); - } - - assignPrefixCodes(lines) { - const linesLength = lines.length; - let prefixLengthMax = 0; - - for (let i = 0; i < linesLength; i++) { - prefixLengthMax = Math.max(prefixLengthMax, lines[i].prefixLength); - } - - const histogram = new Uint32Array(prefixLengthMax + 1); - - for (let i = 0; i < linesLength; i++) { - histogram[lines[i].prefixLength]++; - } - - let currentLength = 1, - firstCode = 0, - currentCode, - currentTemp, - line; - histogram[0] = 0; - - while (currentLength <= prefixLengthMax) { - firstCode = firstCode + histogram[currentLength - 1] << 1; - currentCode = firstCode; - currentTemp = 0; - - while (currentTemp < linesLength) { - line = lines[currentTemp]; - - if (line.prefixLength === currentLength) { - line.prefixCode = currentCode; - currentCode++; - } - - currentTemp++; - } - - currentLength++; - } - } - -} - -function decodeTablesSegment(data, start, end) { - const flags = data[start]; - const lowestValue = (0, _core_utils.readUint32)(data, start + 1) & 0xffffffff; - const highestValue = (0, _core_utils.readUint32)(data, start + 5) & 0xffffffff; - const reader = new Reader(data, start + 9, end); - const prefixSizeBits = (flags >> 1 & 7) + 1; - const rangeSizeBits = (flags >> 4 & 7) + 1; - const lines = []; - let prefixLength, - rangeLength, - currentRangeLow = lowestValue; - - do { - prefixLength = reader.readBits(prefixSizeBits); - rangeLength = reader.readBits(rangeSizeBits); - lines.push(new HuffmanLine([currentRangeLow, prefixLength, rangeLength, 0])); - currentRangeLow += 1 << rangeLength; - } while (currentRangeLow < highestValue); - - prefixLength = reader.readBits(prefixSizeBits); - lines.push(new HuffmanLine([lowestValue - 1, prefixLength, 32, 0, "lower"])); - prefixLength = reader.readBits(prefixSizeBits); - lines.push(new HuffmanLine([highestValue, prefixLength, 32, 0])); - - if (flags & 1) { - prefixLength = reader.readBits(prefixSizeBits); - lines.push(new HuffmanLine([prefixLength, 0])); - } - - return new HuffmanTable(lines, false); -} - -const standardTablesCache = {}; - -function getStandardTable(number) { - let table = standardTablesCache[number]; - - if (table) { - return table; - } - - let lines; - - switch (number) { - case 1: - lines = [[0, 1, 4, 0x0], [16, 2, 8, 0x2], [272, 3, 16, 0x6], [65808, 3, 32, 0x7]]; - break; - - case 2: - lines = [[0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [75, 6, 32, 0x3e], [6, 0x3f]]; - break; - - case 3: - lines = [[-256, 8, 8, 0xfe], [0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [-257, 8, 32, 0xff, "lower"], [75, 7, 32, 0x7e], [6, 0x3e]]; - break; - - case 4: - lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [76, 5, 32, 0x1f]]; - break; - - case 5: - lines = [[-255, 7, 8, 0x7e], [1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [-256, 7, 32, 0x7f, "lower"], [76, 6, 32, 0x3e]]; - break; - - case 6: - lines = [[-2048, 5, 10, 0x1c], [-1024, 4, 9, 0x8], [-512, 4, 8, 0x9], [-256, 4, 7, 0xa], [-128, 5, 6, 0x1d], [-64, 5, 5, 0x1e], [-32, 4, 5, 0xb], [0, 2, 7, 0x0], [128, 3, 7, 0x2], [256, 3, 8, 0x3], [512, 4, 9, 0xc], [1024, 4, 10, 0xd], [-2049, 6, 32, 0x3e, "lower"], [2048, 6, 32, 0x3f]]; - break; - - case 7: - lines = [[-1024, 4, 9, 0x8], [-512, 3, 8, 0x0], [-256, 4, 7, 0x9], [-128, 5, 6, 0x1a], [-64, 5, 5, 0x1b], [-32, 4, 5, 0xa], [0, 4, 5, 0xb], [32, 5, 5, 0x1c], [64, 5, 6, 0x1d], [128, 4, 7, 0xc], [256, 3, 8, 0x1], [512, 3, 9, 0x2], [1024, 3, 10, 0x3], [-1025, 5, 32, 0x1e, "lower"], [2048, 5, 32, 0x1f]]; - break; - - case 8: - lines = [[-15, 8, 3, 0xfc], [-7, 9, 1, 0x1fc], [-5, 8, 1, 0xfd], [-3, 9, 0, 0x1fd], [-2, 7, 0, 0x7c], [-1, 4, 0, 0xa], [0, 2, 1, 0x0], [2, 5, 0, 0x1a], [3, 6, 0, 0x3a], [4, 3, 4, 0x4], [20, 6, 1, 0x3b], [22, 4, 4, 0xb], [38, 4, 5, 0xc], [70, 5, 6, 0x1b], [134, 5, 7, 0x1c], [262, 6, 7, 0x3c], [390, 7, 8, 0x7d], [646, 6, 10, 0x3d], [-16, 9, 32, 0x1fe, "lower"], [1670, 9, 32, 0x1ff], [2, 0x1]]; - break; - - case 9: - lines = [[-31, 8, 4, 0xfc], [-15, 9, 2, 0x1fc], [-11, 8, 2, 0xfd], [-7, 9, 1, 0x1fd], [-5, 7, 1, 0x7c], [-3, 4, 1, 0xa], [-1, 3, 1, 0x2], [1, 3, 1, 0x3], [3, 5, 1, 0x1a], [5, 6, 1, 0x3a], [7, 3, 5, 0x4], [39, 6, 2, 0x3b], [43, 4, 5, 0xb], [75, 4, 6, 0xc], [139, 5, 7, 0x1b], [267, 5, 8, 0x1c], [523, 6, 8, 0x3c], [779, 7, 9, 0x7d], [1291, 6, 11, 0x3d], [-32, 9, 32, 0x1fe, "lower"], [3339, 9, 32, 0x1ff], [2, 0x0]]; - break; - - case 10: - lines = [[-21, 7, 4, 0x7a], [-5, 8, 0, 0xfc], [-4, 7, 0, 0x7b], [-3, 5, 0, 0x18], [-2, 2, 2, 0x0], [2, 5, 0, 0x19], [3, 6, 0, 0x36], [4, 7, 0, 0x7c], [5, 8, 0, 0xfd], [6, 2, 6, 0x1], [70, 5, 5, 0x1a], [102, 6, 5, 0x37], [134, 6, 6, 0x38], [198, 6, 7, 0x39], [326, 6, 8, 0x3a], [582, 6, 9, 0x3b], [1094, 6, 10, 0x3c], [2118, 7, 11, 0x7d], [-22, 8, 32, 0xfe, "lower"], [4166, 8, 32, 0xff], [2, 0x2]]; - break; - - case 11: - lines = [[1, 1, 0, 0x0], [2, 2, 1, 0x2], [4, 4, 0, 0xc], [5, 4, 1, 0xd], [7, 5, 1, 0x1c], [9, 5, 2, 0x1d], [13, 6, 2, 0x3c], [17, 7, 2, 0x7a], [21, 7, 3, 0x7b], [29, 7, 4, 0x7c], [45, 7, 5, 0x7d], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]]; - break; - - case 12: - lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 1, 0x6], [5, 5, 0, 0x1c], [6, 5, 1, 0x1d], [8, 6, 1, 0x3c], [10, 7, 0, 0x7a], [11, 7, 1, 0x7b], [13, 7, 2, 0x7c], [17, 7, 3, 0x7d], [25, 7, 4, 0x7e], [41, 8, 5, 0xfe], [73, 8, 32, 0xff]]; - break; - - case 13: - lines = [[1, 1, 0, 0x0], [2, 3, 0, 0x4], [3, 4, 0, 0xc], [4, 5, 0, 0x1c], [5, 4, 1, 0xd], [7, 3, 3, 0x5], [15, 6, 1, 0x3a], [17, 6, 2, 0x3b], [21, 6, 3, 0x3c], [29, 6, 4, 0x3d], [45, 6, 5, 0x3e], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]]; - break; - - case 14: - lines = [[-2, 3, 0, 0x4], [-1, 3, 0, 0x5], [0, 1, 0, 0x0], [1, 3, 0, 0x6], [2, 3, 0, 0x7]]; - break; - - case 15: - lines = [[-24, 7, 4, 0x7c], [-8, 6, 2, 0x3c], [-4, 5, 1, 0x1c], [-2, 4, 0, 0xc], [-1, 3, 0, 0x4], [0, 1, 0, 0x0], [1, 3, 0, 0x5], [2, 4, 0, 0xd], [3, 5, 1, 0x1d], [5, 6, 2, 0x3d], [9, 7, 4, 0x7d], [-25, 7, 32, 0x7e, "lower"], [25, 7, 32, 0x7f]]; - break; - - default: - throw new Jbig2Error(`standard table B.${number} does not exist`); - } - - for (let i = 0, ii = lines.length; i < ii; i++) { - lines[i] = new HuffmanLine(lines[i]); - } - - table = new HuffmanTable(lines, true); - standardTablesCache[number] = table; - return table; -} - -class Reader { - constructor(data, start, end) { - this.data = data; - this.start = start; - this.end = end; - this.position = start; - this.shift = -1; - this.currentByte = 0; - } - - readBit() { - if (this.shift < 0) { - if (this.position >= this.end) { - throw new Jbig2Error("end of data while reading bit"); - } - - this.currentByte = this.data[this.position++]; - this.shift = 7; - } - - const bit = this.currentByte >> this.shift & 1; - this.shift--; - return bit; - } - - readBits(numBits) { - let result = 0, - i; - - for (i = numBits - 1; i >= 0; i--) { - result |= this.readBit() << i; - } - - return result; - } - - byteAlign() { - this.shift = -1; - } - - next() { - if (this.position >= this.end) { - return -1; - } - - return this.data[this.position++]; - } - -} - -function getCustomHuffmanTable(index, referredTo, customTables) { - let currentIndex = 0; - - for (let i = 0, ii = referredTo.length; i < ii; i++) { - const table = customTables[referredTo[i]]; - - if (table) { - if (index === currentIndex) { - return table; - } - - currentIndex++; - } - } - - throw new Jbig2Error("can't find custom Huffman table"); -} - -function getTextRegionHuffmanTables(textRegion, referredTo, customTables, numberOfSymbols, reader) { - const codes = []; - - for (let i = 0; i <= 34; i++) { - const codeLength = reader.readBits(4); - codes.push(new HuffmanLine([i, codeLength, 0, 0])); - } - - const runCodesTable = new HuffmanTable(codes, false); - codes.length = 0; - - for (let i = 0; i < numberOfSymbols;) { - const codeLength = runCodesTable.decode(reader); - - if (codeLength >= 32) { - let repeatedLength, numberOfRepeats, j; - - switch (codeLength) { - case 32: - if (i === 0) { - throw new Jbig2Error("no previous value in symbol ID table"); - } - - numberOfRepeats = reader.readBits(2) + 3; - repeatedLength = codes[i - 1].prefixLength; - break; - - case 33: - numberOfRepeats = reader.readBits(3) + 3; - repeatedLength = 0; - break; - - case 34: - numberOfRepeats = reader.readBits(7) + 11; - repeatedLength = 0; - break; - - default: - throw new Jbig2Error("invalid code length in symbol ID table"); - } - - for (j = 0; j < numberOfRepeats; j++) { - codes.push(new HuffmanLine([i, repeatedLength, 0, 0])); - i++; - } - } else { - codes.push(new HuffmanLine([i, codeLength, 0, 0])); - i++; - } - } - - reader.byteAlign(); - const symbolIDTable = new HuffmanTable(codes, false); - let customIndex = 0, - tableFirstS, - tableDeltaS, - tableDeltaT; - - switch (textRegion.huffmanFS) { - case 0: - case 1: - tableFirstS = getStandardTable(textRegion.huffmanFS + 6); - break; - - case 3: - tableFirstS = getCustomHuffmanTable(customIndex, referredTo, customTables); - customIndex++; - break; - - default: - throw new Jbig2Error("invalid Huffman FS selector"); - } - - switch (textRegion.huffmanDS) { - case 0: - case 1: - case 2: - tableDeltaS = getStandardTable(textRegion.huffmanDS + 8); - break; - - case 3: - tableDeltaS = getCustomHuffmanTable(customIndex, referredTo, customTables); - customIndex++; - break; - - default: - throw new Jbig2Error("invalid Huffman DS selector"); - } - - switch (textRegion.huffmanDT) { - case 0: - case 1: - case 2: - tableDeltaT = getStandardTable(textRegion.huffmanDT + 11); - break; - - case 3: - tableDeltaT = getCustomHuffmanTable(customIndex, referredTo, customTables); - customIndex++; - break; - - default: - throw new Jbig2Error("invalid Huffman DT selector"); - } - - if (textRegion.refinement) { - throw new Jbig2Error("refinement with Huffman is not supported"); - } - - return { - symbolIDTable, - tableFirstS, - tableDeltaS, - tableDeltaT - }; -} - -function getSymbolDictionaryHuffmanTables(dictionary, referredTo, customTables) { - let customIndex = 0, - tableDeltaHeight, - tableDeltaWidth; - - switch (dictionary.huffmanDHSelector) { - case 0: - case 1: - tableDeltaHeight = getStandardTable(dictionary.huffmanDHSelector + 4); - break; - - case 3: - tableDeltaHeight = getCustomHuffmanTable(customIndex, referredTo, customTables); - customIndex++; - break; - - default: - throw new Jbig2Error("invalid Huffman DH selector"); - } - - switch (dictionary.huffmanDWSelector) { - case 0: - case 1: - tableDeltaWidth = getStandardTable(dictionary.huffmanDWSelector + 2); - break; - - case 3: - tableDeltaWidth = getCustomHuffmanTable(customIndex, referredTo, customTables); - customIndex++; - break; - - default: - throw new Jbig2Error("invalid Huffman DW selector"); - } - - let tableBitmapSize, tableAggregateInstances; - - if (dictionary.bitmapSizeSelector) { - tableBitmapSize = getCustomHuffmanTable(customIndex, referredTo, customTables); - customIndex++; - } else { - tableBitmapSize = getStandardTable(1); - } - - if (dictionary.aggregationInstancesSelector) { - tableAggregateInstances = getCustomHuffmanTable(customIndex, referredTo, customTables); - } else { - tableAggregateInstances = getStandardTable(1); - } - - return { - tableDeltaHeight, - tableDeltaWidth, - tableBitmapSize, - tableAggregateInstances - }; -} - -function readUncompressedBitmap(reader, width, height) { - const bitmap = []; - - for (let y = 0; y < height; y++) { - const row = new Uint8Array(width); - bitmap.push(row); - - for (let x = 0; x < width; x++) { - row[x] = reader.readBit(); - } - - reader.byteAlign(); - } - - return bitmap; -} - -function decodeMMRBitmap(input, width, height, endOfBlock) { - const params = { - K: -1, - Columns: width, - Rows: height, - BlackIs1: true, - EndOfBlock: endOfBlock - }; - const decoder = new _ccitt.CCITTFaxDecoder(input, params); - const bitmap = []; - let currentByte, - eof = false; - - for (let y = 0; y < height; y++) { - const row = new Uint8Array(width); - bitmap.push(row); - let shift = -1; - - for (let x = 0; x < width; x++) { - if (shift < 0) { - currentByte = decoder.readNextChar(); - - if (currentByte === -1) { - currentByte = 0; - eof = true; - } - - shift = 7; - } - - row[x] = currentByte >> shift & 1; - shift--; - } - } - - if (endOfBlock && !eof) { - const lookForEOFLimit = 5; - - for (let i = 0; i < lookForEOFLimit; i++) { - if (decoder.readNextChar() === -1) { - break; - } - } - } - - return bitmap; -} - -class Jbig2Image { - parseChunks(chunks) { - return parseJbig2Chunks(chunks); - } - - parse(data) { - const { - imgData, - width, - height - } = parseJbig2(data); - this.width = width; - this.height = height; - return imgData; - } - -} - -exports.Jbig2Image = Jbig2Image; - -/***/ }), -/* 36 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.ArithmeticDecoder = void 0; -const QeTable = [{ - qe: 0x5601, - nmps: 1, - nlps: 1, - switchFlag: 1 -}, { - qe: 0x3401, - nmps: 2, - nlps: 6, - switchFlag: 0 -}, { - qe: 0x1801, - nmps: 3, - nlps: 9, - switchFlag: 0 -}, { - qe: 0x0ac1, - nmps: 4, - nlps: 12, - switchFlag: 0 -}, { - qe: 0x0521, - nmps: 5, - nlps: 29, - switchFlag: 0 -}, { - qe: 0x0221, - nmps: 38, - nlps: 33, - switchFlag: 0 -}, { - qe: 0x5601, - nmps: 7, - nlps: 6, - switchFlag: 1 -}, { - qe: 0x5401, - nmps: 8, - nlps: 14, - switchFlag: 0 -}, { - qe: 0x4801, - nmps: 9, - nlps: 14, - switchFlag: 0 -}, { - qe: 0x3801, - nmps: 10, - nlps: 14, - switchFlag: 0 -}, { - qe: 0x3001, - nmps: 11, - nlps: 17, - switchFlag: 0 -}, { - qe: 0x2401, - nmps: 12, - nlps: 18, - switchFlag: 0 -}, { - qe: 0x1c01, - nmps: 13, - nlps: 20, - switchFlag: 0 -}, { - qe: 0x1601, - nmps: 29, - nlps: 21, - switchFlag: 0 -}, { - qe: 0x5601, - nmps: 15, - nlps: 14, - switchFlag: 1 -}, { - qe: 0x5401, - nmps: 16, - nlps: 14, - switchFlag: 0 -}, { - qe: 0x5101, - nmps: 17, - nlps: 15, - switchFlag: 0 -}, { - qe: 0x4801, - nmps: 18, - nlps: 16, - switchFlag: 0 -}, { - qe: 0x3801, - nmps: 19, - nlps: 17, - switchFlag: 0 -}, { - qe: 0x3401, - nmps: 20, - nlps: 18, - switchFlag: 0 -}, { - qe: 0x3001, - nmps: 21, - nlps: 19, - switchFlag: 0 -}, { - qe: 0x2801, - nmps: 22, - nlps: 19, - switchFlag: 0 -}, { - qe: 0x2401, - nmps: 23, - nlps: 20, - switchFlag: 0 -}, { - qe: 0x2201, - nmps: 24, - nlps: 21, - switchFlag: 0 -}, { - qe: 0x1c01, - nmps: 25, - nlps: 22, - switchFlag: 0 -}, { - qe: 0x1801, - nmps: 26, - nlps: 23, - switchFlag: 0 -}, { - qe: 0x1601, - nmps: 27, - nlps: 24, - switchFlag: 0 -}, { - qe: 0x1401, - nmps: 28, - nlps: 25, - switchFlag: 0 -}, { - qe: 0x1201, - nmps: 29, - nlps: 26, - switchFlag: 0 -}, { - qe: 0x1101, - nmps: 30, - nlps: 27, - switchFlag: 0 -}, { - qe: 0x0ac1, - nmps: 31, - nlps: 28, - switchFlag: 0 -}, { - qe: 0x09c1, - nmps: 32, - nlps: 29, - switchFlag: 0 -}, { - qe: 0x08a1, - nmps: 33, - nlps: 30, - switchFlag: 0 -}, { - qe: 0x0521, - nmps: 34, - nlps: 31, - switchFlag: 0 -}, { - qe: 0x0441, - nmps: 35, - nlps: 32, - switchFlag: 0 -}, { - qe: 0x02a1, - nmps: 36, - nlps: 33, - switchFlag: 0 -}, { - qe: 0x0221, - nmps: 37, - nlps: 34, - switchFlag: 0 -}, { - qe: 0x0141, - nmps: 38, - nlps: 35, - switchFlag: 0 -}, { - qe: 0x0111, - nmps: 39, - nlps: 36, - switchFlag: 0 -}, { - qe: 0x0085, - nmps: 40, - nlps: 37, - switchFlag: 0 -}, { - qe: 0x0049, - nmps: 41, - nlps: 38, - switchFlag: 0 -}, { - qe: 0x0025, - nmps: 42, - nlps: 39, - switchFlag: 0 -}, { - qe: 0x0015, - nmps: 43, - nlps: 40, - switchFlag: 0 -}, { - qe: 0x0009, - nmps: 44, - nlps: 41, - switchFlag: 0 -}, { - qe: 0x0005, - nmps: 45, - nlps: 42, - switchFlag: 0 -}, { - qe: 0x0001, - nmps: 45, - nlps: 43, - switchFlag: 0 -}, { - qe: 0x5601, - nmps: 46, - nlps: 46, - switchFlag: 0 -}]; - -class ArithmeticDecoder { - constructor(data, start, end) { - this.data = data; - this.bp = start; - this.dataEnd = end; - this.chigh = data[start]; - this.clow = 0; - this.byteIn(); - this.chigh = this.chigh << 7 & 0xffff | this.clow >> 9 & 0x7f; - this.clow = this.clow << 7 & 0xffff; - this.ct -= 7; - this.a = 0x8000; - } - - byteIn() { - const data = this.data; - let bp = this.bp; - - if (data[bp] === 0xff) { - if (data[bp + 1] > 0x8f) { - this.clow += 0xff00; - this.ct = 8; - } else { - bp++; - this.clow += data[bp] << 9; - this.ct = 7; - this.bp = bp; - } - } else { - bp++; - this.clow += bp < this.dataEnd ? data[bp] << 8 : 0xff00; - this.ct = 8; - this.bp = bp; - } - - if (this.clow > 0xffff) { - this.chigh += this.clow >> 16; - this.clow &= 0xffff; - } - } - - readBit(contexts, pos) { - let cx_index = contexts[pos] >> 1, - cx_mps = contexts[pos] & 1; - const qeTableIcx = QeTable[cx_index]; - const qeIcx = qeTableIcx.qe; - let d; - let a = this.a - qeIcx; - - if (this.chigh < qeIcx) { - if (a < qeIcx) { - a = qeIcx; - d = cx_mps; - cx_index = qeTableIcx.nmps; - } else { - a = qeIcx; - d = 1 ^ cx_mps; - - if (qeTableIcx.switchFlag === 1) { - cx_mps = d; - } - - cx_index = qeTableIcx.nlps; - } - } else { - this.chigh -= qeIcx; - - if ((a & 0x8000) !== 0) { - this.a = a; - return cx_mps; - } - - if (a < qeIcx) { - d = 1 ^ cx_mps; - - if (qeTableIcx.switchFlag === 1) { - cx_mps = d; - } - - cx_index = qeTableIcx.nlps; - } else { - d = cx_mps; - cx_index = qeTableIcx.nmps; - } - } - - do { - if (this.ct === 0) { - this.byteIn(); - } - - a <<= 1; - this.chigh = this.chigh << 1 & 0xffff | this.clow >> 15 & 1; - this.clow = this.clow << 1 & 0xffff; - this.ct--; - } while ((a & 0x8000) === 0); - - this.a = a; - contexts[pos] = cx_index << 1 | cx_mps; - return d; - } - -} - -exports.ArithmeticDecoder = ArithmeticDecoder; - -/***/ }), -/* 37 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.JpegStream = void 0; - -var _decode_stream = __w_pdfjs_require__(29); - -var _primitives = __w_pdfjs_require__(5); - -var _jpg = __w_pdfjs_require__(38); - -var _util = __w_pdfjs_require__(2); - -class JpegStream extends _decode_stream.DecodeStream { - constructor(stream, maybeLength, params) { - let ch; - - while ((ch = stream.getByte()) !== -1) { - if (ch === 0xff) { - stream.skip(-1); - break; - } - } - - super(maybeLength); - this.stream = stream; - this.dict = stream.dict; - this.maybeLength = maybeLength; - this.params = params; - } - - get bytes() { - return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength)); - } - - ensureBuffer(requested) {} - - readBlock() { - if (this.eof) { - return; - } - - const jpegOptions = { - decodeTransform: undefined, - colorTransform: undefined - }; - const decodeArr = this.dict.getArray("D", "Decode"); - - if (this.forceRGB && Array.isArray(decodeArr)) { - const bitsPerComponent = this.dict.get("BPC", "BitsPerComponent") || 8; - const decodeArrLength = decodeArr.length; - const transform = new Int32Array(decodeArrLength); - let transformNeeded = false; - const maxValue = (1 << bitsPerComponent) - 1; - - for (let i = 0; i < decodeArrLength; i += 2) { - transform[i] = (decodeArr[i + 1] - decodeArr[i]) * 256 | 0; - transform[i + 1] = decodeArr[i] * maxValue | 0; - - if (transform[i] !== 256 || transform[i + 1] !== 0) { - transformNeeded = true; - } - } - - if (transformNeeded) { - jpegOptions.decodeTransform = transform; - } - } - - if ((0, _primitives.isDict)(this.params)) { - const colorTransform = this.params.get("ColorTransform"); - - if (Number.isInteger(colorTransform)) { - jpegOptions.colorTransform = colorTransform; - } - } - - const jpegImage = new _jpg.JpegImage(jpegOptions); - jpegImage.parse(this.bytes); - const data = jpegImage.getData({ - width: this.drawWidth, - height: this.drawHeight, - forceRGB: this.forceRGB, - isSourcePDF: true - }); - this.buffer = data; - this.bufferLength = data.length; - this.eof = true; - } - -} - -exports.JpegStream = JpegStream; - -/***/ }), -/* 38 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.JpegImage = void 0; - -var _util = __w_pdfjs_require__(2); - -var _core_utils = __w_pdfjs_require__(9); - -class JpegError extends _util.BaseException { - constructor(msg) { - super(`JPEG error: ${msg}`, "JpegError"); - } - -} - -class DNLMarkerError extends _util.BaseException { - constructor(message, scanLines) { - super(message, "DNLMarkerError"); - this.scanLines = scanLines; - } - -} - -class EOIMarkerError extends _util.BaseException { - constructor(msg) { - super(msg, "EOIMarkerError"); - } - -} - -const dctZigZag = new Uint8Array([0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63]); -const dctCos1 = 4017; -const dctSin1 = 799; -const dctCos3 = 3406; -const dctSin3 = 2276; -const dctCos6 = 1567; -const dctSin6 = 3784; -const dctSqrt2 = 5793; -const dctSqrt1d2 = 2896; - -function buildHuffmanTable(codeLengths, values) { - let k = 0, - i, - j, - length = 16; - - while (length > 0 && !codeLengths[length - 1]) { - length--; - } - - const code = [{ - children: [], - index: 0 - }]; - let p = code[0], - q; - - for (i = 0; i < length; i++) { - for (j = 0; j < codeLengths[i]; j++) { - p = code.pop(); - p.children[p.index] = values[k]; - - while (p.index > 0) { - p = code.pop(); - } - - p.index++; - code.push(p); - - while (code.length <= i) { - code.push(q = { - children: [], - index: 0 - }); - p.children[p.index] = q.children; - p = q; - } - - k++; - } - - if (i + 1 < length) { - code.push(q = { - children: [], - index: 0 - }); - p.children[p.index] = q.children; - p = q; - } - } - - return code[0].children; -} - -function getBlockBufferOffset(component, row, col) { - return 64 * ((component.blocksPerLine + 1) * row + col); -} - -function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive, parseDNLMarker = false) { - const mcusPerLine = frame.mcusPerLine; - const progressive = frame.progressive; - const startOffset = offset; - let bitsData = 0, - bitsCount = 0; - - function readBit() { - if (bitsCount > 0) { - bitsCount--; - return bitsData >> bitsCount & 1; - } - - bitsData = data[offset++]; - - if (bitsData === 0xff) { - const nextByte = data[offset++]; - - if (nextByte) { - if (nextByte === 0xdc && parseDNLMarker) { - offset += 2; - const scanLines = (0, _core_utils.readUint16)(data, offset); - offset += 2; - - if (scanLines > 0 && scanLines !== frame.scanLines) { - throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data", scanLines); - } - } else if (nextByte === 0xd9) { - if (parseDNLMarker) { - const maybeScanLines = blockRow * (frame.precision === 8 ? 8 : 0); - - if (maybeScanLines > 0 && Math.round(frame.scanLines / maybeScanLines) >= 10) { - throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, " + "possibly caused by incorrect `scanLines` parameter", maybeScanLines); - } - } - - throw new EOIMarkerError("Found EOI marker (0xFFD9) while parsing scan data"); - } - - throw new JpegError(`unexpected marker ${(bitsData << 8 | nextByte).toString(16)}`); - } - } - - bitsCount = 7; - return bitsData >>> 7; - } - - function decodeHuffman(tree) { - let node = tree; - - while (true) { - node = node[readBit()]; - - switch (typeof node) { - case "number": - return node; - - case "object": - continue; - } - - throw new JpegError("invalid huffman sequence"); - } - } - - function receive(length) { - let n = 0; - - while (length > 0) { - n = n << 1 | readBit(); - length--; - } - - return n; - } - - function receiveAndExtend(length) { - if (length === 1) { - return readBit() === 1 ? 1 : -1; - } - - const n = receive(length); - - if (n >= 1 << length - 1) { - return n; - } - - return n + (-1 << length) + 1; - } - - function decodeBaseline(component, blockOffset) { - const t = decodeHuffman(component.huffmanTableDC); - const diff = t === 0 ? 0 : receiveAndExtend(t); - component.blockData[blockOffset] = component.pred += diff; - let k = 1; - - while (k < 64) { - const rs = decodeHuffman(component.huffmanTableAC); - const s = rs & 15, - r = rs >> 4; - - if (s === 0) { - if (r < 15) { - break; - } - - k += 16; - continue; - } - - k += r; - const z = dctZigZag[k]; - component.blockData[blockOffset + z] = receiveAndExtend(s); - k++; - } - } - - function decodeDCFirst(component, blockOffset) { - const t = decodeHuffman(component.huffmanTableDC); - const diff = t === 0 ? 0 : receiveAndExtend(t) << successive; - component.blockData[blockOffset] = component.pred += diff; - } - - function decodeDCSuccessive(component, blockOffset) { - component.blockData[blockOffset] |= readBit() << successive; - } - - let eobrun = 0; - - function decodeACFirst(component, blockOffset) { - if (eobrun > 0) { - eobrun--; - return; - } - - let k = spectralStart; - const e = spectralEnd; - - while (k <= e) { - const rs = decodeHuffman(component.huffmanTableAC); - const s = rs & 15, - r = rs >> 4; - - if (s === 0) { - if (r < 15) { - eobrun = receive(r) + (1 << r) - 1; - break; - } - - k += 16; - continue; - } - - k += r; - const z = dctZigZag[k]; - component.blockData[blockOffset + z] = receiveAndExtend(s) * (1 << successive); - k++; - } - } - - let successiveACState = 0, - successiveACNextValue; - - function decodeACSuccessive(component, blockOffset) { - let k = spectralStart; - const e = spectralEnd; - let r = 0; - let s; - let rs; - - while (k <= e) { - const offsetZ = blockOffset + dctZigZag[k]; - const sign = component.blockData[offsetZ] < 0 ? -1 : 1; - - switch (successiveACState) { - case 0: - rs = decodeHuffman(component.huffmanTableAC); - s = rs & 15; - r = rs >> 4; - - if (s === 0) { - if (r < 15) { - eobrun = receive(r) + (1 << r); - successiveACState = 4; - } else { - r = 16; - successiveACState = 1; - } - } else { - if (s !== 1) { - throw new JpegError("invalid ACn encoding"); - } - - successiveACNextValue = receiveAndExtend(s); - successiveACState = r ? 2 : 3; - } - - continue; - - case 1: - case 2: - if (component.blockData[offsetZ]) { - component.blockData[offsetZ] += sign * (readBit() << successive); - } else { - r--; - - if (r === 0) { - successiveACState = successiveACState === 2 ? 3 : 0; - } - } - - break; - - case 3: - if (component.blockData[offsetZ]) { - component.blockData[offsetZ] += sign * (readBit() << successive); - } else { - component.blockData[offsetZ] = successiveACNextValue << successive; - successiveACState = 0; - } - - break; - - case 4: - if (component.blockData[offsetZ]) { - component.blockData[offsetZ] += sign * (readBit() << successive); - } - - break; - } - - k++; - } - - if (successiveACState === 4) { - eobrun--; - - if (eobrun === 0) { - successiveACState = 0; - } - } - } - - let blockRow = 0; - - function decodeMcu(component, decode, mcu, row, col) { - const mcuRow = mcu / mcusPerLine | 0; - const mcuCol = mcu % mcusPerLine; - blockRow = mcuRow * component.v + row; - const blockCol = mcuCol * component.h + col; - const blockOffset = getBlockBufferOffset(component, blockRow, blockCol); - decode(component, blockOffset); - } - - function decodeBlock(component, decode, mcu) { - blockRow = mcu / component.blocksPerLine | 0; - const blockCol = mcu % component.blocksPerLine; - const blockOffset = getBlockBufferOffset(component, blockRow, blockCol); - decode(component, blockOffset); - } - - const componentsLength = components.length; - let component, i, j, k, n; - let decodeFn; - - if (progressive) { - if (spectralStart === 0) { - decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive; - } else { - decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive; - } - } else { - decodeFn = decodeBaseline; - } - - let mcu = 0, - fileMarker; - let mcuExpected; - - if (componentsLength === 1) { - mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn; - } else { - mcuExpected = mcusPerLine * frame.mcusPerColumn; - } - - let h, v; - - while (mcu <= mcuExpected) { - const mcuToRead = resetInterval ? Math.min(mcuExpected - mcu, resetInterval) : mcuExpected; - - if (mcuToRead > 0) { - for (i = 0; i < componentsLength; i++) { - components[i].pred = 0; - } - - eobrun = 0; - - if (componentsLength === 1) { - component = components[0]; - - for (n = 0; n < mcuToRead; n++) { - decodeBlock(component, decodeFn, mcu); - mcu++; - } - } else { - for (n = 0; n < mcuToRead; n++) { - for (i = 0; i < componentsLength; i++) { - component = components[i]; - h = component.h; - v = component.v; - - for (j = 0; j < v; j++) { - for (k = 0; k < h; k++) { - decodeMcu(component, decodeFn, mcu, j, k); - } - } - } - - mcu++; - } - } - } - - bitsCount = 0; - fileMarker = findNextFileMarker(data, offset); - - if (!fileMarker) { - break; - } - - if (fileMarker.invalid) { - const partialMsg = mcuToRead > 0 ? "unexpected" : "excessive"; - (0, _util.warn)(`decodeScan - ${partialMsg} MCU data, current marker is: ${fileMarker.invalid}`); - offset = fileMarker.offset; - } - - if (fileMarker.marker >= 0xffd0 && fileMarker.marker <= 0xffd7) { - offset += 2; - } else { - break; - } - } - - return offset - startOffset; -} - -function quantizeAndInverse(component, blockBufferOffset, p) { - const qt = component.quantizationTable, - blockData = component.blockData; - let v0, v1, v2, v3, v4, v5, v6, v7; - let p0, p1, p2, p3, p4, p5, p6, p7; - let t; - - if (!qt) { - throw new JpegError("missing required Quantization Table."); - } - - for (let row = 0; row < 64; row += 8) { - p0 = blockData[blockBufferOffset + row]; - p1 = blockData[blockBufferOffset + row + 1]; - p2 = blockData[blockBufferOffset + row + 2]; - p3 = blockData[blockBufferOffset + row + 3]; - p4 = blockData[blockBufferOffset + row + 4]; - p5 = blockData[blockBufferOffset + row + 5]; - p6 = blockData[blockBufferOffset + row + 6]; - p7 = blockData[blockBufferOffset + row + 7]; - p0 *= qt[row]; - - if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) { - t = dctSqrt2 * p0 + 512 >> 10; - p[row] = t; - p[row + 1] = t; - p[row + 2] = t; - p[row + 3] = t; - p[row + 4] = t; - p[row + 5] = t; - p[row + 6] = t; - p[row + 7] = t; - continue; - } - - p1 *= qt[row + 1]; - p2 *= qt[row + 2]; - p3 *= qt[row + 3]; - p4 *= qt[row + 4]; - p5 *= qt[row + 5]; - p6 *= qt[row + 6]; - p7 *= qt[row + 7]; - v0 = dctSqrt2 * p0 + 128 >> 8; - v1 = dctSqrt2 * p4 + 128 >> 8; - v2 = p2; - v3 = p6; - v4 = dctSqrt1d2 * (p1 - p7) + 128 >> 8; - v7 = dctSqrt1d2 * (p1 + p7) + 128 >> 8; - v5 = p3 << 4; - v6 = p5 << 4; - v0 = v0 + v1 + 1 >> 1; - v1 = v0 - v1; - t = v2 * dctSin6 + v3 * dctCos6 + 128 >> 8; - v2 = v2 * dctCos6 - v3 * dctSin6 + 128 >> 8; - v3 = t; - v4 = v4 + v6 + 1 >> 1; - v6 = v4 - v6; - v7 = v7 + v5 + 1 >> 1; - v5 = v7 - v5; - v0 = v0 + v3 + 1 >> 1; - v3 = v0 - v3; - v1 = v1 + v2 + 1 >> 1; - v2 = v1 - v2; - t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12; - v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12; - v7 = t; - t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12; - v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12; - v6 = t; - p[row] = v0 + v7; - p[row + 7] = v0 - v7; - p[row + 1] = v1 + v6; - p[row + 6] = v1 - v6; - p[row + 2] = v2 + v5; - p[row + 5] = v2 - v5; - p[row + 3] = v3 + v4; - p[row + 4] = v3 - v4; - } - - for (let col = 0; col < 8; ++col) { - p0 = p[col]; - p1 = p[col + 8]; - p2 = p[col + 16]; - p3 = p[col + 24]; - p4 = p[col + 32]; - p5 = p[col + 40]; - p6 = p[col + 48]; - p7 = p[col + 56]; - - if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) { - t = dctSqrt2 * p0 + 8192 >> 14; - - if (t < -2040) { - t = 0; - } else if (t >= 2024) { - t = 255; - } else { - t = t + 2056 >> 4; - } - - blockData[blockBufferOffset + col] = t; - blockData[blockBufferOffset + col + 8] = t; - blockData[blockBufferOffset + col + 16] = t; - blockData[blockBufferOffset + col + 24] = t; - blockData[blockBufferOffset + col + 32] = t; - blockData[blockBufferOffset + col + 40] = t; - blockData[blockBufferOffset + col + 48] = t; - blockData[blockBufferOffset + col + 56] = t; - continue; - } - - v0 = dctSqrt2 * p0 + 2048 >> 12; - v1 = dctSqrt2 * p4 + 2048 >> 12; - v2 = p2; - v3 = p6; - v4 = dctSqrt1d2 * (p1 - p7) + 2048 >> 12; - v7 = dctSqrt1d2 * (p1 + p7) + 2048 >> 12; - v5 = p3; - v6 = p5; - v0 = (v0 + v1 + 1 >> 1) + 4112; - v1 = v0 - v1; - t = v2 * dctSin6 + v3 * dctCos6 + 2048 >> 12; - v2 = v2 * dctCos6 - v3 * dctSin6 + 2048 >> 12; - v3 = t; - v4 = v4 + v6 + 1 >> 1; - v6 = v4 - v6; - v7 = v7 + v5 + 1 >> 1; - v5 = v7 - v5; - v0 = v0 + v3 + 1 >> 1; - v3 = v0 - v3; - v1 = v1 + v2 + 1 >> 1; - v2 = v1 - v2; - t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12; - v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12; - v7 = t; - t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12; - v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12; - v6 = t; - p0 = v0 + v7; - p7 = v0 - v7; - p1 = v1 + v6; - p6 = v1 - v6; - p2 = v2 + v5; - p5 = v2 - v5; - p3 = v3 + v4; - p4 = v3 - v4; - - if (p0 < 16) { - p0 = 0; - } else if (p0 >= 4080) { - p0 = 255; - } else { - p0 >>= 4; - } - - if (p1 < 16) { - p1 = 0; - } else if (p1 >= 4080) { - p1 = 255; - } else { - p1 >>= 4; - } - - if (p2 < 16) { - p2 = 0; - } else if (p2 >= 4080) { - p2 = 255; - } else { - p2 >>= 4; - } - - if (p3 < 16) { - p3 = 0; - } else if (p3 >= 4080) { - p3 = 255; - } else { - p3 >>= 4; - } - - if (p4 < 16) { - p4 = 0; - } else if (p4 >= 4080) { - p4 = 255; - } else { - p4 >>= 4; - } - - if (p5 < 16) { - p5 = 0; - } else if (p5 >= 4080) { - p5 = 255; - } else { - p5 >>= 4; - } - - if (p6 < 16) { - p6 = 0; - } else if (p6 >= 4080) { - p6 = 255; - } else { - p6 >>= 4; - } - - if (p7 < 16) { - p7 = 0; - } else if (p7 >= 4080) { - p7 = 255; - } else { - p7 >>= 4; - } - - blockData[blockBufferOffset + col] = p0; - blockData[blockBufferOffset + col + 8] = p1; - blockData[blockBufferOffset + col + 16] = p2; - blockData[blockBufferOffset + col + 24] = p3; - blockData[blockBufferOffset + col + 32] = p4; - blockData[blockBufferOffset + col + 40] = p5; - blockData[blockBufferOffset + col + 48] = p6; - blockData[blockBufferOffset + col + 56] = p7; - } -} - -function buildComponentData(frame, component) { - const blocksPerLine = component.blocksPerLine; - const blocksPerColumn = component.blocksPerColumn; - const computationBuffer = new Int16Array(64); - - for (let blockRow = 0; blockRow < blocksPerColumn; blockRow++) { - for (let blockCol = 0; blockCol < blocksPerLine; blockCol++) { - const offset = getBlockBufferOffset(component, blockRow, blockCol); - quantizeAndInverse(component, offset, computationBuffer); - } - } - - return component.blockData; -} - -function findNextFileMarker(data, currentPos, startPos = currentPos) { - const maxPos = data.length - 1; - let newPos = startPos < currentPos ? startPos : currentPos; - - if (currentPos >= maxPos) { - return null; - } - - const currentMarker = (0, _core_utils.readUint16)(data, currentPos); - - if (currentMarker >= 0xffc0 && currentMarker <= 0xfffe) { - return { - invalid: null, - marker: currentMarker, - offset: currentPos - }; - } - - let newMarker = (0, _core_utils.readUint16)(data, newPos); - - while (!(newMarker >= 0xffc0 && newMarker <= 0xfffe)) { - if (++newPos >= maxPos) { - return null; - } - - newMarker = (0, _core_utils.readUint16)(data, newPos); - } - - return { - invalid: currentMarker.toString(16), - marker: newMarker, - offset: newPos - }; -} - -class JpegImage { - constructor({ - decodeTransform = null, - colorTransform = -1 - } = {}) { - this._decodeTransform = decodeTransform; - this._colorTransform = colorTransform; - } - - parse(data, { - dnlScanLines = null - } = {}) { - function readDataBlock() { - const length = (0, _core_utils.readUint16)(data, offset); - offset += 2; - let endOffset = offset + length - 2; - const fileMarker = findNextFileMarker(data, endOffset, offset); - - if (fileMarker && fileMarker.invalid) { - (0, _util.warn)("readDataBlock - incorrect length, current marker is: " + fileMarker.invalid); - endOffset = fileMarker.offset; - } - - const array = data.subarray(offset, endOffset); - offset += array.length; - return array; - } - - function prepareComponents(frame) { - const mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH); - const mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV); - - for (let i = 0, ii = frame.components.length; i < ii; i++) { - const component = frame.components[i]; - const blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / frame.maxH); - const blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / frame.maxV); - const blocksPerLineForMcu = mcusPerLine * component.h; - const blocksPerColumnForMcu = mcusPerColumn * component.v; - const blocksBufferSize = 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1); - component.blockData = new Int16Array(blocksBufferSize); - component.blocksPerLine = blocksPerLine; - component.blocksPerColumn = blocksPerColumn; - } - - frame.mcusPerLine = mcusPerLine; - frame.mcusPerColumn = mcusPerColumn; - } - - let offset = 0; - let jfif = null; - let adobe = null; - let frame, resetInterval; - let numSOSMarkers = 0; - const quantizationTables = []; - const huffmanTablesAC = [], - huffmanTablesDC = []; - let fileMarker = (0, _core_utils.readUint16)(data, offset); - offset += 2; - - if (fileMarker !== 0xffd8) { - throw new JpegError("SOI not found"); - } - - fileMarker = (0, _core_utils.readUint16)(data, offset); - offset += 2; - - markerLoop: while (fileMarker !== 0xffd9) { - let i, j, l; - - switch (fileMarker) { - case 0xffe0: - case 0xffe1: - case 0xffe2: - case 0xffe3: - case 0xffe4: - case 0xffe5: - case 0xffe6: - case 0xffe7: - case 0xffe8: - case 0xffe9: - case 0xffea: - case 0xffeb: - case 0xffec: - case 0xffed: - case 0xffee: - case 0xffef: - case 0xfffe: - const appData = readDataBlock(); - - if (fileMarker === 0xffe0) { - if (appData[0] === 0x4a && appData[1] === 0x46 && appData[2] === 0x49 && appData[3] === 0x46 && appData[4] === 0) { - jfif = { - version: { - major: appData[5], - minor: appData[6] - }, - densityUnits: appData[7], - xDensity: appData[8] << 8 | appData[9], - yDensity: appData[10] << 8 | appData[11], - thumbWidth: appData[12], - thumbHeight: appData[13], - thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13]) - }; - } - } - - if (fileMarker === 0xffee) { - if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6f && appData[3] === 0x62 && appData[4] === 0x65) { - adobe = { - version: appData[5] << 8 | appData[6], - flags0: appData[7] << 8 | appData[8], - flags1: appData[9] << 8 | appData[10], - transformCode: appData[11] - }; - } - } - - break; - - case 0xffdb: - const quantizationTablesLength = (0, _core_utils.readUint16)(data, offset); - offset += 2; - const quantizationTablesEnd = quantizationTablesLength + offset - 2; - let z; - - while (offset < quantizationTablesEnd) { - const quantizationTableSpec = data[offset++]; - const tableData = new Uint16Array(64); - - if (quantizationTableSpec >> 4 === 0) { - for (j = 0; j < 64; j++) { - z = dctZigZag[j]; - tableData[z] = data[offset++]; - } - } else if (quantizationTableSpec >> 4 === 1) { - for (j = 0; j < 64; j++) { - z = dctZigZag[j]; - tableData[z] = (0, _core_utils.readUint16)(data, offset); - offset += 2; - } - } else { - throw new JpegError("DQT - invalid table spec"); - } - - quantizationTables[quantizationTableSpec & 15] = tableData; - } - - break; - - case 0xffc0: - case 0xffc1: - case 0xffc2: - if (frame) { - throw new JpegError("Only single frame JPEGs supported"); - } - - offset += 2; - frame = {}; - frame.extended = fileMarker === 0xffc1; - frame.progressive = fileMarker === 0xffc2; - frame.precision = data[offset++]; - const sofScanLines = (0, _core_utils.readUint16)(data, offset); - offset += 2; - frame.scanLines = dnlScanLines || sofScanLines; - frame.samplesPerLine = (0, _core_utils.readUint16)(data, offset); - offset += 2; - frame.components = []; - frame.componentIds = {}; - const componentsCount = data[offset++]; - let maxH = 0, - maxV = 0; - - for (i = 0; i < componentsCount; i++) { - const componentId = data[offset]; - const h = data[offset + 1] >> 4; - const v = data[offset + 1] & 15; - - if (maxH < h) { - maxH = h; - } - - if (maxV < v) { - maxV = v; - } - - const qId = data[offset + 2]; - l = frame.components.push({ - h, - v, - quantizationId: qId, - quantizationTable: null - }); - frame.componentIds[componentId] = l - 1; - offset += 3; - } - - frame.maxH = maxH; - frame.maxV = maxV; - prepareComponents(frame); - break; - - case 0xffc4: - const huffmanLength = (0, _core_utils.readUint16)(data, offset); - offset += 2; - - for (i = 2; i < huffmanLength;) { - const huffmanTableSpec = data[offset++]; - const codeLengths = new Uint8Array(16); - let codeLengthSum = 0; - - for (j = 0; j < 16; j++, offset++) { - codeLengthSum += codeLengths[j] = data[offset]; - } - - const huffmanValues = new Uint8Array(codeLengthSum); - - for (j = 0; j < codeLengthSum; j++, offset++) { - huffmanValues[j] = data[offset]; - } - - i += 17 + codeLengthSum; - (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] = buildHuffmanTable(codeLengths, huffmanValues); - } - - break; - - case 0xffdd: - offset += 2; - resetInterval = (0, _core_utils.readUint16)(data, offset); - offset += 2; - break; - - case 0xffda: - const parseDNLMarker = ++numSOSMarkers === 1 && !dnlScanLines; - offset += 2; - const selectorsCount = data[offset++], - components = []; - - for (i = 0; i < selectorsCount; i++) { - const index = data[offset++]; - const componentIndex = frame.componentIds[index]; - const component = frame.components[componentIndex]; - component.index = index; - const tableSpec = data[offset++]; - component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4]; - component.huffmanTableAC = huffmanTablesAC[tableSpec & 15]; - components.push(component); - } - - const spectralStart = data[offset++], - spectralEnd = data[offset++], - successiveApproximation = data[offset++]; - - try { - const processed = decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successiveApproximation >> 4, successiveApproximation & 15, parseDNLMarker); - offset += processed; - } catch (ex) { - if (ex instanceof DNLMarkerError) { - (0, _util.warn)(`${ex.message} -- attempting to re-parse the JPEG image.`); - return this.parse(data, { - dnlScanLines: ex.scanLines - }); - } else if (ex instanceof EOIMarkerError) { - (0, _util.warn)(`${ex.message} -- ignoring the rest of the image data.`); - break markerLoop; - } - - throw ex; - } - - break; - - case 0xffdc: - offset += 4; - break; - - case 0xffff: - if (data[offset] !== 0xff) { - offset--; - } - - break; - - default: - const nextFileMarker = findNextFileMarker(data, offset - 2, offset - 3); - - if (nextFileMarker && nextFileMarker.invalid) { - (0, _util.warn)("JpegImage.parse - unexpected data, current marker is: " + nextFileMarker.invalid); - offset = nextFileMarker.offset; - break; - } - - if (!nextFileMarker || offset >= data.length - 1) { - (0, _util.warn)("JpegImage.parse - reached the end of the image data " + "without finding an EOI marker (0xFFD9)."); - break markerLoop; - } - - throw new JpegError("JpegImage.parse - unknown marker: " + fileMarker.toString(16)); - } - - fileMarker = (0, _core_utils.readUint16)(data, offset); - offset += 2; - } - - this.width = frame.samplesPerLine; - this.height = frame.scanLines; - this.jfif = jfif; - this.adobe = adobe; - this.components = []; - - for (let i = 0, ii = frame.components.length; i < ii; i++) { - const component = frame.components[i]; - const quantizationTable = quantizationTables[component.quantizationId]; - - if (quantizationTable) { - component.quantizationTable = quantizationTable; - } - - this.components.push({ - index: component.index, - output: buildComponentData(frame, component), - scaleX: component.h / frame.maxH, - scaleY: component.v / frame.maxV, - blocksPerLine: component.blocksPerLine, - blocksPerColumn: component.blocksPerColumn - }); - } - - this.numComponents = this.components.length; - return undefined; - } - - _getLinearizedBlockData(width, height, isSourcePDF = false) { - const scaleX = this.width / width, - scaleY = this.height / height; - let component, componentScaleX, componentScaleY, blocksPerScanline; - let x, y, i, j, k; - let index; - let offset = 0; - let output; - const numComponents = this.components.length; - const dataLength = width * height * numComponents; - const data = new Uint8ClampedArray(dataLength); - const xScaleBlockOffset = new Uint32Array(width); - const mask3LSB = 0xfffffff8; - let lastComponentScaleX; - - for (i = 0; i < numComponents; i++) { - component = this.components[i]; - componentScaleX = component.scaleX * scaleX; - componentScaleY = component.scaleY * scaleY; - offset = i; - output = component.output; - blocksPerScanline = component.blocksPerLine + 1 << 3; - - if (componentScaleX !== lastComponentScaleX) { - for (x = 0; x < width; x++) { - j = 0 | x * componentScaleX; - xScaleBlockOffset[x] = (j & mask3LSB) << 3 | j & 7; - } - - lastComponentScaleX = componentScaleX; - } - - for (y = 0; y < height; y++) { - j = 0 | y * componentScaleY; - index = blocksPerScanline * (j & mask3LSB) | (j & 7) << 3; - - for (x = 0; x < width; x++) { - data[offset] = output[index + xScaleBlockOffset[x]]; - offset += numComponents; - } - } - } - - let transform = this._decodeTransform; - - if (!isSourcePDF && numComponents === 4 && !transform) { - transform = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255]); - } - - if (transform) { - for (i = 0; i < dataLength;) { - for (j = 0, k = 0; j < numComponents; j++, i++, k += 2) { - data[i] = (data[i] * transform[k] >> 8) + transform[k + 1]; - } - } - } - - return data; - } - - get _isColorConversionNeeded() { - if (this.adobe) { - return !!this.adobe.transformCode; - } - - if (this.numComponents === 3) { - if (this._colorTransform === 0) { - return false; - } else if (this.components[0].index === 0x52 && this.components[1].index === 0x47 && this.components[2].index === 0x42) { - return false; - } - - return true; - } - - if (this._colorTransform === 1) { - return true; - } - - return false; - } - - _convertYccToRgb(data) { - let Y, Cb, Cr; - - for (let i = 0, length = data.length; i < length; i += 3) { - Y = data[i]; - Cb = data[i + 1]; - Cr = data[i + 2]; - data[i] = Y - 179.456 + 1.402 * Cr; - data[i + 1] = Y + 135.459 - 0.344 * Cb - 0.714 * Cr; - data[i + 2] = Y - 226.816 + 1.772 * Cb; - } - - return data; - } - - _convertYcckToRgb(data) { - let Y, Cb, Cr, k; - let offset = 0; - - for (let i = 0, length = data.length; i < length; i += 4) { - Y = data[i]; - Cb = data[i + 1]; - Cr = data[i + 2]; - k = data[i + 3]; - data[offset++] = -122.67195406894 + Cb * (-6.60635669420364e-5 * Cb + 0.000437130475926232 * Cr - 5.4080610064599e-5 * Y + 0.00048449797120281 * k - 0.154362151871126) + Cr * (-0.000957964378445773 * Cr + 0.000817076911346625 * Y - 0.00477271405408747 * k + 1.53380253221734) + Y * (0.000961250184130688 * Y - 0.00266257332283933 * k + 0.48357088451265) + k * (-0.000336197177618394 * k + 0.484791561490776); - data[offset++] = 107.268039397724 + Cb * (2.19927104525741e-5 * Cb - 0.000640992018297945 * Cr + 0.000659397001245577 * Y + 0.000426105652938837 * k - 0.176491792462875) + Cr * (-0.000778269941513683 * Cr + 0.00130872261408275 * Y + 0.000770482631801132 * k - 0.151051492775562) + Y * (0.00126935368114843 * Y - 0.00265090189010898 * k + 0.25802910206845) + k * (-0.000318913117588328 * k - 0.213742400323665); - data[offset++] = -20.810012546947 + Cb * (-0.000570115196973677 * Cb - 2.63409051004589e-5 * Cr + 0.0020741088115012 * Y - 0.00288260236853442 * k + 0.814272968359295) + Cr * (-1.53496057440975e-5 * Cr - 0.000132689043961446 * Y + 0.000560833691242812 * k - 0.195152027534049) + Y * (0.00174418132927582 * Y - 0.00255243321439347 * k + 0.116935020465145) + k * (-0.000343531996510555 * k + 0.24165260232407); - } - - return data.subarray(0, offset); - } - - _convertYcckToCmyk(data) { - let Y, Cb, Cr; - - for (let i = 0, length = data.length; i < length; i += 4) { - Y = data[i]; - Cb = data[i + 1]; - Cr = data[i + 2]; - data[i] = 434.456 - Y - 1.402 * Cr; - data[i + 1] = 119.541 - Y + 0.344 * Cb + 0.714 * Cr; - data[i + 2] = 481.816 - Y - 1.772 * Cb; - } - - return data; - } - - _convertCmykToRgb(data) { - let c, m, y, k; - let offset = 0; - - for (let i = 0, length = data.length; i < length; i += 4) { - c = data[i]; - m = data[i + 1]; - y = data[i + 2]; - k = data[i + 3]; - data[offset++] = 255 + c * (-0.00006747147073602441 * c + 0.0008379262121013727 * m + 0.0002894718188643294 * y + 0.003264231057537806 * k - 1.1185611867203937) + m * (0.000026374107616089405 * m - 0.00008626949158638572 * y - 0.0002748769067499491 * k - 0.02155688794978967) + y * (-0.00003878099212869363 * y - 0.0003267808279485286 * k + 0.0686742238595345) - k * (0.0003361971776183937 * k + 0.7430659151342254); - data[offset++] = 255 + c * (0.00013596372813588848 * c + 0.000924537132573585 * m + 0.00010567359618683593 * y + 0.0004791864687436512 * k - 0.3109689587515875) + m * (-0.00023545346108370344 * m + 0.0002702845253534714 * y + 0.0020200308977307156 * k - 0.7488052167015494) + y * (0.00006834815998235662 * y + 0.00015168452363460973 * k - 0.09751927774728933) - k * (0.0003189131175883281 * k + 0.7364883807733168); - data[offset++] = 255 + c * (0.000013598650411385307 * c + 0.00012423956175490851 * m + 0.0004751985097583589 * y - 0.0000036729317476630422 * k - 0.05562186980264034) + m * (0.00016141380598724676 * m + 0.0009692239130725186 * y + 0.0007782692450036253 * k - 0.44015232367526463) + y * (5.068882914068769e-7 * y + 0.0017778369011375071 * k - 0.7591454649749609) - k * (0.0003435319965105553 * k + 0.7063770186160144); - } - - return data.subarray(0, offset); - } - - getData({ - width, - height, - forceRGB = false, - isSourcePDF = false - }) { - if (this.numComponents > 4) { - throw new JpegError("Unsupported color mode"); - } - - const data = this._getLinearizedBlockData(width, height, isSourcePDF); - - if (this.numComponents === 1 && forceRGB) { - const dataLength = data.length; - const rgbData = new Uint8ClampedArray(dataLength * 3); - let offset = 0; - - for (let i = 0; i < dataLength; i++) { - const grayColor = data[i]; - rgbData[offset++] = grayColor; - rgbData[offset++] = grayColor; - rgbData[offset++] = grayColor; - } - - return rgbData; - } else if (this.numComponents === 3 && this._isColorConversionNeeded) { - return this._convertYccToRgb(data); - } else if (this.numComponents === 4) { - if (this._isColorConversionNeeded) { - if (forceRGB) { - return this._convertYcckToRgb(data); - } - - return this._convertYcckToCmyk(data); - } else if (forceRGB) { - return this._convertCmykToRgb(data); - } - } - - return data; - } - -} - -exports.JpegImage = JpegImage; - -/***/ }), -/* 39 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.JpxStream = void 0; - -var _decode_stream = __w_pdfjs_require__(29); - -var _jpx = __w_pdfjs_require__(40); - -var _util = __w_pdfjs_require__(2); - -class JpxStream extends _decode_stream.DecodeStream { - constructor(stream, maybeLength, params) { - super(maybeLength); - this.stream = stream; - this.dict = stream.dict; - this.maybeLength = maybeLength; - this.params = params; - } - - get bytes() { - return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength)); - } - - ensureBuffer(requested) {} - - readBlock() { - if (this.eof) { - return; - } - - const jpxImage = new _jpx.JpxImage(); - jpxImage.parse(this.bytes); - const width = jpxImage.width; - const height = jpxImage.height; - const componentsCount = jpxImage.componentsCount; - const tileCount = jpxImage.tiles.length; - - if (tileCount === 1) { - this.buffer = jpxImage.tiles[0].items; - } else { - const data = new Uint8ClampedArray(width * height * componentsCount); - - for (let k = 0; k < tileCount; k++) { - const tileComponents = jpxImage.tiles[k]; - const tileWidth = tileComponents.width; - const tileHeight = tileComponents.height; - const tileLeft = tileComponents.left; - const tileTop = tileComponents.top; - const src = tileComponents.items; - let srcPosition = 0; - let dataPosition = (width * tileTop + tileLeft) * componentsCount; - const imgRowSize = width * componentsCount; - const tileRowSize = tileWidth * componentsCount; - - for (let j = 0; j < tileHeight; j++) { - const rowBytes = src.subarray(srcPosition, srcPosition + tileRowSize); - data.set(rowBytes, dataPosition); - srcPosition += tileRowSize; - dataPosition += imgRowSize; - } - } - - this.buffer = data; - } - - this.bufferLength = this.buffer.length; - this.eof = true; - } - -} - -exports.JpxStream = JpxStream; - -/***/ }), -/* 40 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.JpxImage = void 0; - -var _util = __w_pdfjs_require__(2); - -var _core_utils = __w_pdfjs_require__(9); - -var _arithmetic_decoder = __w_pdfjs_require__(36); - -class JpxError extends _util.BaseException { - constructor(msg) { - super(`JPX error: ${msg}`, "JpxError"); - } - -} - -const SubbandsGainLog2 = { - LL: 0, - LH: 1, - HL: 1, - HH: 2 -}; - -class JpxImage { - constructor() { - this.failOnCorruptedImage = false; - } - - parse(data) { - const head = (0, _core_utils.readUint16)(data, 0); - - if (head === 0xff4f) { - this.parseCodestream(data, 0, data.length); - return; - } - - const length = data.length; - let position = 0; - - while (position < length) { - let headerSize = 8; - let lbox = (0, _core_utils.readUint32)(data, position); - const tbox = (0, _core_utils.readUint32)(data, position + 4); - position += headerSize; - - if (lbox === 1) { - lbox = (0, _core_utils.readUint32)(data, position) * 4294967296 + (0, _core_utils.readUint32)(data, position + 4); - position += 8; - headerSize += 8; - } - - if (lbox === 0) { - lbox = length - position + headerSize; - } - - if (lbox < headerSize) { - throw new JpxError("Invalid box field size"); - } - - const dataLength = lbox - headerSize; - let jumpDataLength = true; - - switch (tbox) { - case 0x6a703268: - jumpDataLength = false; - break; - - case 0x636f6c72: - const method = data[position]; - - if (method === 1) { - const colorspace = (0, _core_utils.readUint32)(data, position + 3); - - switch (colorspace) { - case 16: - case 17: - case 18: - break; - - default: - (0, _util.warn)("Unknown colorspace " + colorspace); - break; - } - } else if (method === 2) { - (0, _util.info)("ICC profile not supported"); - } - - break; - - case 0x6a703263: - this.parseCodestream(data, position, position + dataLength); - break; - - case 0x6a502020: - if ((0, _core_utils.readUint32)(data, position) !== 0x0d0a870a) { - (0, _util.warn)("Invalid JP2 signature"); - } - - break; - - case 0x6a501a1a: - case 0x66747970: - case 0x72726571: - case 0x72657320: - case 0x69686472: - break; - - default: - const headerType = String.fromCharCode(tbox >> 24 & 0xff, tbox >> 16 & 0xff, tbox >> 8 & 0xff, tbox & 0xff); - (0, _util.warn)(`Unsupported header type ${tbox} (${headerType}).`); - break; - } - - if (jumpDataLength) { - position += dataLength; - } - } - } - - parseImageProperties(stream) { - let newByte = stream.getByte(); - - while (newByte >= 0) { - const oldByte = newByte; - newByte = stream.getByte(); - const code = oldByte << 8 | newByte; - - if (code === 0xff51) { - stream.skip(4); - const Xsiz = stream.getInt32() >>> 0; - const Ysiz = stream.getInt32() >>> 0; - const XOsiz = stream.getInt32() >>> 0; - const YOsiz = stream.getInt32() >>> 0; - stream.skip(16); - const Csiz = stream.getUint16(); - this.width = Xsiz - XOsiz; - this.height = Ysiz - YOsiz; - this.componentsCount = Csiz; - this.bitsPerComponent = 8; - return; - } - } - - throw new JpxError("No size marker found in JPX stream"); - } - - parseCodestream(data, start, end) { - const context = {}; - let doNotRecover = false; - - try { - let position = start; - - while (position + 1 < end) { - const code = (0, _core_utils.readUint16)(data, position); - position += 2; - let length = 0, - j, - sqcd, - spqcds, - spqcdSize, - scalarExpounded, - tile; - - switch (code) { - case 0xff4f: - context.mainHeader = true; - break; - - case 0xffd9: - break; - - case 0xff51: - length = (0, _core_utils.readUint16)(data, position); - const siz = {}; - siz.Xsiz = (0, _core_utils.readUint32)(data, position + 4); - siz.Ysiz = (0, _core_utils.readUint32)(data, position + 8); - siz.XOsiz = (0, _core_utils.readUint32)(data, position + 12); - siz.YOsiz = (0, _core_utils.readUint32)(data, position + 16); - siz.XTsiz = (0, _core_utils.readUint32)(data, position + 20); - siz.YTsiz = (0, _core_utils.readUint32)(data, position + 24); - siz.XTOsiz = (0, _core_utils.readUint32)(data, position + 28); - siz.YTOsiz = (0, _core_utils.readUint32)(data, position + 32); - const componentsCount = (0, _core_utils.readUint16)(data, position + 36); - siz.Csiz = componentsCount; - const components = []; - j = position + 38; - - for (let i = 0; i < componentsCount; i++) { - const component = { - precision: (data[j] & 0x7f) + 1, - isSigned: !!(data[j] & 0x80), - XRsiz: data[j + 1], - YRsiz: data[j + 2] - }; - j += 3; - calculateComponentDimensions(component, siz); - components.push(component); - } - - context.SIZ = siz; - context.components = components; - calculateTileGrids(context, components); - context.QCC = []; - context.COC = []; - break; - - case 0xff5c: - length = (0, _core_utils.readUint16)(data, position); - const qcd = {}; - j = position + 2; - sqcd = data[j++]; - - switch (sqcd & 0x1f) { - case 0: - spqcdSize = 8; - scalarExpounded = true; - break; - - case 1: - spqcdSize = 16; - scalarExpounded = false; - break; - - case 2: - spqcdSize = 16; - scalarExpounded = true; - break; - - default: - throw new Error("Invalid SQcd value " + sqcd); - } - - qcd.noQuantization = spqcdSize === 8; - qcd.scalarExpounded = scalarExpounded; - qcd.guardBits = sqcd >> 5; - spqcds = []; - - while (j < length + position) { - const spqcd = {}; - - if (spqcdSize === 8) { - spqcd.epsilon = data[j++] >> 3; - spqcd.mu = 0; - } else { - spqcd.epsilon = data[j] >> 3; - spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1]; - j += 2; - } - - spqcds.push(spqcd); - } - - qcd.SPqcds = spqcds; - - if (context.mainHeader) { - context.QCD = qcd; - } else { - context.currentTile.QCD = qcd; - context.currentTile.QCC = []; - } - - break; - - case 0xff5d: - length = (0, _core_utils.readUint16)(data, position); - const qcc = {}; - j = position + 2; - let cqcc; - - if (context.SIZ.Csiz < 257) { - cqcc = data[j++]; - } else { - cqcc = (0, _core_utils.readUint16)(data, j); - j += 2; - } - - sqcd = data[j++]; - - switch (sqcd & 0x1f) { - case 0: - spqcdSize = 8; - scalarExpounded = true; - break; - - case 1: - spqcdSize = 16; - scalarExpounded = false; - break; - - case 2: - spqcdSize = 16; - scalarExpounded = true; - break; - - default: - throw new Error("Invalid SQcd value " + sqcd); - } - - qcc.noQuantization = spqcdSize === 8; - qcc.scalarExpounded = scalarExpounded; - qcc.guardBits = sqcd >> 5; - spqcds = []; - - while (j < length + position) { - const spqcd = {}; - - if (spqcdSize === 8) { - spqcd.epsilon = data[j++] >> 3; - spqcd.mu = 0; - } else { - spqcd.epsilon = data[j] >> 3; - spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1]; - j += 2; - } - - spqcds.push(spqcd); - } - - qcc.SPqcds = spqcds; - - if (context.mainHeader) { - context.QCC[cqcc] = qcc; - } else { - context.currentTile.QCC[cqcc] = qcc; - } - - break; - - case 0xff52: - length = (0, _core_utils.readUint16)(data, position); - const cod = {}; - j = position + 2; - const scod = data[j++]; - cod.entropyCoderWithCustomPrecincts = !!(scod & 1); - cod.sopMarkerUsed = !!(scod & 2); - cod.ephMarkerUsed = !!(scod & 4); - cod.progressionOrder = data[j++]; - cod.layersCount = (0, _core_utils.readUint16)(data, j); - j += 2; - cod.multipleComponentTransform = data[j++]; - cod.decompositionLevelsCount = data[j++]; - cod.xcb = (data[j++] & 0xf) + 2; - cod.ycb = (data[j++] & 0xf) + 2; - const blockStyle = data[j++]; - cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1); - cod.resetContextProbabilities = !!(blockStyle & 2); - cod.terminationOnEachCodingPass = !!(blockStyle & 4); - cod.verticallyStripe = !!(blockStyle & 8); - cod.predictableTermination = !!(blockStyle & 16); - cod.segmentationSymbolUsed = !!(blockStyle & 32); - cod.reversibleTransformation = data[j++]; - - if (cod.entropyCoderWithCustomPrecincts) { - const precinctsSizes = []; - - while (j < length + position) { - const precinctsSize = data[j++]; - precinctsSizes.push({ - PPx: precinctsSize & 0xf, - PPy: precinctsSize >> 4 - }); - } - - cod.precinctsSizes = precinctsSizes; - } - - const unsupported = []; - - if (cod.selectiveArithmeticCodingBypass) { - unsupported.push("selectiveArithmeticCodingBypass"); - } - - if (cod.resetContextProbabilities) { - unsupported.push("resetContextProbabilities"); - } - - if (cod.terminationOnEachCodingPass) { - unsupported.push("terminationOnEachCodingPass"); - } - - if (cod.verticallyStripe) { - unsupported.push("verticallyStripe"); - } - - if (cod.predictableTermination) { - unsupported.push("predictableTermination"); - } - - if (unsupported.length > 0) { - doNotRecover = true; - (0, _util.warn)(`JPX: Unsupported COD options (${unsupported.join(", ")}).`); - } - - if (context.mainHeader) { - context.COD = cod; - } else { - context.currentTile.COD = cod; - context.currentTile.COC = []; - } - - break; - - case 0xff90: - length = (0, _core_utils.readUint16)(data, position); - tile = {}; - tile.index = (0, _core_utils.readUint16)(data, position + 2); - tile.length = (0, _core_utils.readUint32)(data, position + 4); - tile.dataEnd = tile.length + position - 2; - tile.partIndex = data[position + 8]; - tile.partsCount = data[position + 9]; - context.mainHeader = false; - - if (tile.partIndex === 0) { - tile.COD = context.COD; - tile.COC = context.COC.slice(0); - tile.QCD = context.QCD; - tile.QCC = context.QCC.slice(0); - } - - context.currentTile = tile; - break; - - case 0xff93: - tile = context.currentTile; - - if (tile.partIndex === 0) { - initializeTile(context, tile.index); - buildPackets(context); - } - - length = tile.dataEnd - position; - parseTilePackets(context, data, position, length); - break; - - case 0xff53: - (0, _util.warn)("JPX: Codestream code 0xFF53 (COC) is not implemented."); - - case 0xff55: - case 0xff57: - case 0xff58: - case 0xff64: - length = (0, _core_utils.readUint16)(data, position); - break; - - default: - throw new Error("Unknown codestream code: " + code.toString(16)); - } - - position += length; - } - } catch (e) { - if (doNotRecover || this.failOnCorruptedImage) { - throw new JpxError(e.message); - } else { - (0, _util.warn)(`JPX: Trying to recover from: "${e.message}".`); - } - } - - this.tiles = transformComponents(context); - this.width = context.SIZ.Xsiz - context.SIZ.XOsiz; - this.height = context.SIZ.Ysiz - context.SIZ.YOsiz; - this.componentsCount = context.SIZ.Csiz; - } - -} - -exports.JpxImage = JpxImage; - -function calculateComponentDimensions(component, siz) { - component.x0 = Math.ceil(siz.XOsiz / component.XRsiz); - component.x1 = Math.ceil(siz.Xsiz / component.XRsiz); - component.y0 = Math.ceil(siz.YOsiz / component.YRsiz); - component.y1 = Math.ceil(siz.Ysiz / component.YRsiz); - component.width = component.x1 - component.x0; - component.height = component.y1 - component.y0; -} - -function calculateTileGrids(context, components) { - const siz = context.SIZ; - const tiles = []; - let tile; - const numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz); - const numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz); - - for (let q = 0; q < numYtiles; q++) { - for (let p = 0; p < numXtiles; p++) { - tile = {}; - tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz); - tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz); - tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz); - tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz); - tile.width = tile.tx1 - tile.tx0; - tile.height = tile.ty1 - tile.ty0; - tile.components = []; - tiles.push(tile); - } - } - - context.tiles = tiles; - const componentsCount = siz.Csiz; - - for (let i = 0, ii = componentsCount; i < ii; i++) { - const component = components[i]; - - for (let j = 0, jj = tiles.length; j < jj; j++) { - const tileComponent = {}; - tile = tiles[j]; - tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz); - tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz); - tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz); - tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz); - tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0; - tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0; - tile.components[i] = tileComponent; - } - } -} - -function getBlocksDimensions(context, component, r) { - const codOrCoc = component.codingStyleParameters; - const result = {}; - - if (!codOrCoc.entropyCoderWithCustomPrecincts) { - result.PPx = 15; - result.PPy = 15; - } else { - result.PPx = codOrCoc.precinctsSizes[r].PPx; - result.PPy = codOrCoc.precinctsSizes[r].PPy; - } - - result.xcb_ = r > 0 ? Math.min(codOrCoc.xcb, result.PPx - 1) : Math.min(codOrCoc.xcb, result.PPx); - result.ycb_ = r > 0 ? Math.min(codOrCoc.ycb, result.PPy - 1) : Math.min(codOrCoc.ycb, result.PPy); - return result; -} - -function buildPrecincts(context, resolution, dimensions) { - const precinctWidth = 1 << dimensions.PPx; - const precinctHeight = 1 << dimensions.PPy; - const isZeroRes = resolution.resLevel === 0; - const precinctWidthInSubband = 1 << dimensions.PPx + (isZeroRes ? 0 : -1); - const precinctHeightInSubband = 1 << dimensions.PPy + (isZeroRes ? 0 : -1); - const numprecinctswide = resolution.trx1 > resolution.trx0 ? Math.ceil(resolution.trx1 / precinctWidth) - Math.floor(resolution.trx0 / precinctWidth) : 0; - const numprecinctshigh = resolution.try1 > resolution.try0 ? Math.ceil(resolution.try1 / precinctHeight) - Math.floor(resolution.try0 / precinctHeight) : 0; - const numprecincts = numprecinctswide * numprecinctshigh; - resolution.precinctParameters = { - precinctWidth, - precinctHeight, - numprecinctswide, - numprecinctshigh, - numprecincts, - precinctWidthInSubband, - precinctHeightInSubband - }; -} - -function buildCodeblocks(context, subband, dimensions) { - const xcb_ = dimensions.xcb_; - const ycb_ = dimensions.ycb_; - const codeblockWidth = 1 << xcb_; - const codeblockHeight = 1 << ycb_; - const cbx0 = subband.tbx0 >> xcb_; - const cby0 = subband.tby0 >> ycb_; - const cbx1 = subband.tbx1 + codeblockWidth - 1 >> xcb_; - const cby1 = subband.tby1 + codeblockHeight - 1 >> ycb_; - const precinctParameters = subband.resolution.precinctParameters; - const codeblocks = []; - const precincts = []; - let i, j, codeblock, precinctNumber; - - for (j = cby0; j < cby1; j++) { - for (i = cbx0; i < cbx1; i++) { - codeblock = { - cbx: i, - cby: j, - tbx0: codeblockWidth * i, - tby0: codeblockHeight * j, - tbx1: codeblockWidth * (i + 1), - tby1: codeblockHeight * (j + 1) - }; - codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0); - codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0); - codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1); - codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1); - const pi = Math.floor((codeblock.tbx0_ - subband.tbx0) / precinctParameters.precinctWidthInSubband); - const pj = Math.floor((codeblock.tby0_ - subband.tby0) / precinctParameters.precinctHeightInSubband); - precinctNumber = pi + pj * precinctParameters.numprecinctswide; - codeblock.precinctNumber = precinctNumber; - codeblock.subbandType = subband.type; - codeblock.Lblock = 3; - - if (codeblock.tbx1_ <= codeblock.tbx0_ || codeblock.tby1_ <= codeblock.tby0_) { - continue; - } - - codeblocks.push(codeblock); - let precinct = precincts[precinctNumber]; - - if (precinct !== undefined) { - if (i < precinct.cbxMin) { - precinct.cbxMin = i; - } else if (i > precinct.cbxMax) { - precinct.cbxMax = i; - } - - if (j < precinct.cbyMin) { - precinct.cbxMin = j; - } else if (j > precinct.cbyMax) { - precinct.cbyMax = j; - } - } else { - precincts[precinctNumber] = precinct = { - cbxMin: i, - cbyMin: j, - cbxMax: i, - cbyMax: j - }; - } - - codeblock.precinct = precinct; - } - } - - subband.codeblockParameters = { - codeblockWidth: xcb_, - codeblockHeight: ycb_, - numcodeblockwide: cbx1 - cbx0 + 1, - numcodeblockhigh: cby1 - cby0 + 1 - }; - subband.codeblocks = codeblocks; - subband.precincts = precincts; -} - -function createPacket(resolution, precinctNumber, layerNumber) { - const precinctCodeblocks = []; - const subbands = resolution.subbands; - - for (let i = 0, ii = subbands.length; i < ii; i++) { - const subband = subbands[i]; - const codeblocks = subband.codeblocks; - - for (let j = 0, jj = codeblocks.length; j < jj; j++) { - const codeblock = codeblocks[j]; - - if (codeblock.precinctNumber !== precinctNumber) { - continue; - } - - precinctCodeblocks.push(codeblock); - } - } - - return { - layerNumber, - codeblocks: precinctCodeblocks - }; -} - -function LayerResolutionComponentPositionIterator(context) { - const siz = context.SIZ; - const tileIndex = context.currentTile.index; - const tile = context.tiles[tileIndex]; - const layersCount = tile.codingStyleDefaultParameters.layersCount; - const componentsCount = siz.Csiz; - let maxDecompositionLevelsCount = 0; - - for (let q = 0; q < componentsCount; q++) { - maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount); - } - - let l = 0, - r = 0, - i = 0, - k = 0; - - this.nextPacket = function JpxImage_nextPacket() { - for (; l < layersCount; l++) { - for (; r <= maxDecompositionLevelsCount; r++) { - for (; i < componentsCount; i++) { - const component = tile.components[i]; - - if (r > component.codingStyleParameters.decompositionLevelsCount) { - continue; - } - - const resolution = component.resolutions[r]; - const numprecincts = resolution.precinctParameters.numprecincts; - - for (; k < numprecincts;) { - const packet = createPacket(resolution, k, l); - k++; - return packet; - } - - k = 0; - } - - i = 0; - } - - r = 0; - } - - throw new JpxError("Out of packets"); - }; -} - -function ResolutionLayerComponentPositionIterator(context) { - const siz = context.SIZ; - const tileIndex = context.currentTile.index; - const tile = context.tiles[tileIndex]; - const layersCount = tile.codingStyleDefaultParameters.layersCount; - const componentsCount = siz.Csiz; - let maxDecompositionLevelsCount = 0; - - for (let q = 0; q < componentsCount; q++) { - maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount); - } - - let r = 0, - l = 0, - i = 0, - k = 0; - - this.nextPacket = function JpxImage_nextPacket() { - for (; r <= maxDecompositionLevelsCount; r++) { - for (; l < layersCount; l++) { - for (; i < componentsCount; i++) { - const component = tile.components[i]; - - if (r > component.codingStyleParameters.decompositionLevelsCount) { - continue; - } - - const resolution = component.resolutions[r]; - const numprecincts = resolution.precinctParameters.numprecincts; - - for (; k < numprecincts;) { - const packet = createPacket(resolution, k, l); - k++; - return packet; - } - - k = 0; - } - - i = 0; - } - - l = 0; - } - - throw new JpxError("Out of packets"); - }; -} - -function ResolutionPositionComponentLayerIterator(context) { - const siz = context.SIZ; - const tileIndex = context.currentTile.index; - const tile = context.tiles[tileIndex]; - const layersCount = tile.codingStyleDefaultParameters.layersCount; - const componentsCount = siz.Csiz; - let l, r, c, p; - let maxDecompositionLevelsCount = 0; - - for (c = 0; c < componentsCount; c++) { - const component = tile.components[c]; - maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, component.codingStyleParameters.decompositionLevelsCount); - } - - const maxNumPrecinctsInLevel = new Int32Array(maxDecompositionLevelsCount + 1); - - for (r = 0; r <= maxDecompositionLevelsCount; ++r) { - let maxNumPrecincts = 0; - - for (c = 0; c < componentsCount; ++c) { - const resolutions = tile.components[c].resolutions; - - if (r < resolutions.length) { - maxNumPrecincts = Math.max(maxNumPrecincts, resolutions[r].precinctParameters.numprecincts); - } - } - - maxNumPrecinctsInLevel[r] = maxNumPrecincts; - } - - l = 0; - r = 0; - c = 0; - p = 0; - - this.nextPacket = function JpxImage_nextPacket() { - for (; r <= maxDecompositionLevelsCount; r++) { - for (; p < maxNumPrecinctsInLevel[r]; p++) { - for (; c < componentsCount; c++) { - const component = tile.components[c]; - - if (r > component.codingStyleParameters.decompositionLevelsCount) { - continue; - } - - const resolution = component.resolutions[r]; - const numprecincts = resolution.precinctParameters.numprecincts; - - if (p >= numprecincts) { - continue; - } - - for (; l < layersCount;) { - const packet = createPacket(resolution, p, l); - l++; - return packet; - } - - l = 0; - } - - c = 0; - } - - p = 0; - } - - throw new JpxError("Out of packets"); - }; -} - -function PositionComponentResolutionLayerIterator(context) { - const siz = context.SIZ; - const tileIndex = context.currentTile.index; - const tile = context.tiles[tileIndex]; - const layersCount = tile.codingStyleDefaultParameters.layersCount; - const componentsCount = siz.Csiz; - const precinctsSizes = getPrecinctSizesInImageScale(tile); - const precinctsIterationSizes = precinctsSizes; - let l = 0, - r = 0, - c = 0, - px = 0, - py = 0; - - this.nextPacket = function JpxImage_nextPacket() { - for (; py < precinctsIterationSizes.maxNumHigh; py++) { - for (; px < precinctsIterationSizes.maxNumWide; px++) { - for (; c < componentsCount; c++) { - const component = tile.components[c]; - const decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; - - for (; r <= decompositionLevelsCount; r++) { - const resolution = component.resolutions[r]; - const sizeInImageScale = precinctsSizes.components[c].resolutions[r]; - const k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution); - - if (k === null) { - continue; - } - - for (; l < layersCount;) { - const packet = createPacket(resolution, k, l); - l++; - return packet; - } - - l = 0; - } - - r = 0; - } - - c = 0; - } - - px = 0; - } - - throw new JpxError("Out of packets"); - }; -} - -function ComponentPositionResolutionLayerIterator(context) { - const siz = context.SIZ; - const tileIndex = context.currentTile.index; - const tile = context.tiles[tileIndex]; - const layersCount = tile.codingStyleDefaultParameters.layersCount; - const componentsCount = siz.Csiz; - const precinctsSizes = getPrecinctSizesInImageScale(tile); - let l = 0, - r = 0, - c = 0, - px = 0, - py = 0; - - this.nextPacket = function JpxImage_nextPacket() { - for (; c < componentsCount; ++c) { - const component = tile.components[c]; - const precinctsIterationSizes = precinctsSizes.components[c]; - const decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; - - for (; py < precinctsIterationSizes.maxNumHigh; py++) { - for (; px < precinctsIterationSizes.maxNumWide; px++) { - for (; r <= decompositionLevelsCount; r++) { - const resolution = component.resolutions[r]; - const sizeInImageScale = precinctsIterationSizes.resolutions[r]; - const k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution); - - if (k === null) { - continue; - } - - for (; l < layersCount;) { - const packet = createPacket(resolution, k, l); - l++; - return packet; - } - - l = 0; - } - - r = 0; - } - - px = 0; - } - - py = 0; - } - - throw new JpxError("Out of packets"); - }; -} - -function getPrecinctIndexIfExist(pxIndex, pyIndex, sizeInImageScale, precinctIterationSizes, resolution) { - const posX = pxIndex * precinctIterationSizes.minWidth; - const posY = pyIndex * precinctIterationSizes.minHeight; - - if (posX % sizeInImageScale.width !== 0 || posY % sizeInImageScale.height !== 0) { - return null; - } - - const startPrecinctRowIndex = posY / sizeInImageScale.width * resolution.precinctParameters.numprecinctswide; - return posX / sizeInImageScale.height + startPrecinctRowIndex; -} - -function getPrecinctSizesInImageScale(tile) { - const componentsCount = tile.components.length; - let minWidth = Number.MAX_VALUE; - let minHeight = Number.MAX_VALUE; - let maxNumWide = 0; - let maxNumHigh = 0; - const sizePerComponent = new Array(componentsCount); - - for (let c = 0; c < componentsCount; c++) { - const component = tile.components[c]; - const decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; - const sizePerResolution = new Array(decompositionLevelsCount + 1); - let minWidthCurrentComponent = Number.MAX_VALUE; - let minHeightCurrentComponent = Number.MAX_VALUE; - let maxNumWideCurrentComponent = 0; - let maxNumHighCurrentComponent = 0; - let scale = 1; - - for (let r = decompositionLevelsCount; r >= 0; --r) { - const resolution = component.resolutions[r]; - const widthCurrentResolution = scale * resolution.precinctParameters.precinctWidth; - const heightCurrentResolution = scale * resolution.precinctParameters.precinctHeight; - minWidthCurrentComponent = Math.min(minWidthCurrentComponent, widthCurrentResolution); - minHeightCurrentComponent = Math.min(minHeightCurrentComponent, heightCurrentResolution); - maxNumWideCurrentComponent = Math.max(maxNumWideCurrentComponent, resolution.precinctParameters.numprecinctswide); - maxNumHighCurrentComponent = Math.max(maxNumHighCurrentComponent, resolution.precinctParameters.numprecinctshigh); - sizePerResolution[r] = { - width: widthCurrentResolution, - height: heightCurrentResolution - }; - scale <<= 1; - } - - minWidth = Math.min(minWidth, minWidthCurrentComponent); - minHeight = Math.min(minHeight, minHeightCurrentComponent); - maxNumWide = Math.max(maxNumWide, maxNumWideCurrentComponent); - maxNumHigh = Math.max(maxNumHigh, maxNumHighCurrentComponent); - sizePerComponent[c] = { - resolutions: sizePerResolution, - minWidth: minWidthCurrentComponent, - minHeight: minHeightCurrentComponent, - maxNumWide: maxNumWideCurrentComponent, - maxNumHigh: maxNumHighCurrentComponent - }; - } - - return { - components: sizePerComponent, - minWidth, - minHeight, - maxNumWide, - maxNumHigh - }; -} - -function buildPackets(context) { - const siz = context.SIZ; - const tileIndex = context.currentTile.index; - const tile = context.tiles[tileIndex]; - const componentsCount = siz.Csiz; - - for (let c = 0; c < componentsCount; c++) { - const component = tile.components[c]; - const decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; - const resolutions = []; - const subbands = []; - - for (let r = 0; r <= decompositionLevelsCount; r++) { - const blocksDimensions = getBlocksDimensions(context, component, r); - const resolution = {}; - const scale = 1 << decompositionLevelsCount - r; - resolution.trx0 = Math.ceil(component.tcx0 / scale); - resolution.try0 = Math.ceil(component.tcy0 / scale); - resolution.trx1 = Math.ceil(component.tcx1 / scale); - resolution.try1 = Math.ceil(component.tcy1 / scale); - resolution.resLevel = r; - buildPrecincts(context, resolution, blocksDimensions); - resolutions.push(resolution); - let subband; - - if (r === 0) { - subband = {}; - subband.type = "LL"; - subband.tbx0 = Math.ceil(component.tcx0 / scale); - subband.tby0 = Math.ceil(component.tcy0 / scale); - subband.tbx1 = Math.ceil(component.tcx1 / scale); - subband.tby1 = Math.ceil(component.tcy1 / scale); - subband.resolution = resolution; - buildCodeblocks(context, subband, blocksDimensions); - subbands.push(subband); - resolution.subbands = [subband]; - } else { - const bscale = 1 << decompositionLevelsCount - r + 1; - const resolutionSubbands = []; - subband = {}; - subband.type = "HL"; - subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5); - subband.tby0 = Math.ceil(component.tcy0 / bscale); - subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5); - subband.tby1 = Math.ceil(component.tcy1 / bscale); - subband.resolution = resolution; - buildCodeblocks(context, subband, blocksDimensions); - subbands.push(subband); - resolutionSubbands.push(subband); - subband = {}; - subband.type = "LH"; - subband.tbx0 = Math.ceil(component.tcx0 / bscale); - subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5); - subband.tbx1 = Math.ceil(component.tcx1 / bscale); - subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5); - subband.resolution = resolution; - buildCodeblocks(context, subband, blocksDimensions); - subbands.push(subband); - resolutionSubbands.push(subband); - subband = {}; - subband.type = "HH"; - subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5); - subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5); - subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5); - subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5); - subband.resolution = resolution; - buildCodeblocks(context, subband, blocksDimensions); - subbands.push(subband); - resolutionSubbands.push(subband); - resolution.subbands = resolutionSubbands; - } - } - - component.resolutions = resolutions; - component.subbands = subbands; - } - - const progressionOrder = tile.codingStyleDefaultParameters.progressionOrder; - - switch (progressionOrder) { - case 0: - tile.packetsIterator = new LayerResolutionComponentPositionIterator(context); - break; - - case 1: - tile.packetsIterator = new ResolutionLayerComponentPositionIterator(context); - break; - - case 2: - tile.packetsIterator = new ResolutionPositionComponentLayerIterator(context); - break; - - case 3: - tile.packetsIterator = new PositionComponentResolutionLayerIterator(context); - break; - - case 4: - tile.packetsIterator = new ComponentPositionResolutionLayerIterator(context); - break; - - default: - throw new JpxError(`Unsupported progression order ${progressionOrder}`); - } -} - -function parseTilePackets(context, data, offset, dataLength) { - let position = 0; - let buffer, - bufferSize = 0, - skipNextBit = false; - - function readBits(count) { - while (bufferSize < count) { - const b = data[offset + position]; - position++; - - if (skipNextBit) { - buffer = buffer << 7 | b; - bufferSize += 7; - skipNextBit = false; - } else { - buffer = buffer << 8 | b; - bufferSize += 8; - } - - if (b === 0xff) { - skipNextBit = true; - } - } - - bufferSize -= count; - return buffer >>> bufferSize & (1 << count) - 1; - } - - function skipMarkerIfEqual(value) { - if (data[offset + position - 1] === 0xff && data[offset + position] === value) { - skipBytes(1); - return true; - } else if (data[offset + position] === 0xff && data[offset + position + 1] === value) { - skipBytes(2); - return true; - } - - return false; - } - - function skipBytes(count) { - position += count; - } - - function alignToByte() { - bufferSize = 0; - - if (skipNextBit) { - position++; - skipNextBit = false; - } - } - - function readCodingpasses() { - if (readBits(1) === 0) { - return 1; - } - - if (readBits(1) === 0) { - return 2; - } - - let value = readBits(2); - - if (value < 3) { - return value + 3; - } - - value = readBits(5); - - if (value < 31) { - return value + 6; - } - - value = readBits(7); - return value + 37; - } - - const tileIndex = context.currentTile.index; - const tile = context.tiles[tileIndex]; - const sopMarkerUsed = context.COD.sopMarkerUsed; - const ephMarkerUsed = context.COD.ephMarkerUsed; - const packetsIterator = tile.packetsIterator; - - while (position < dataLength) { - alignToByte(); - - if (sopMarkerUsed && skipMarkerIfEqual(0x91)) { - skipBytes(4); - } - - const packet = packetsIterator.nextPacket(); - - if (!readBits(1)) { - continue; - } - - const layerNumber = packet.layerNumber, - queue = []; - let codeblock; - - for (let i = 0, ii = packet.codeblocks.length; i < ii; i++) { - codeblock = packet.codeblocks[i]; - let precinct = codeblock.precinct; - const codeblockColumn = codeblock.cbx - precinct.cbxMin; - const codeblockRow = codeblock.cby - precinct.cbyMin; - let codeblockIncluded = false; - let firstTimeInclusion = false; - let valueReady, zeroBitPlanesTree; - - if (codeblock.included !== undefined) { - codeblockIncluded = !!readBits(1); - } else { - precinct = codeblock.precinct; - let inclusionTree; - - if (precinct.inclusionTree !== undefined) { - inclusionTree = precinct.inclusionTree; - } else { - const width = precinct.cbxMax - precinct.cbxMin + 1; - const height = precinct.cbyMax - precinct.cbyMin + 1; - inclusionTree = new InclusionTree(width, height, layerNumber); - zeroBitPlanesTree = new TagTree(width, height); - precinct.inclusionTree = inclusionTree; - precinct.zeroBitPlanesTree = zeroBitPlanesTree; - - for (let l = 0; l < layerNumber; l++) { - if (readBits(1) !== 0) { - throw new JpxError("Invalid tag tree"); - } - } - } - - if (inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber)) { - while (true) { - if (readBits(1)) { - valueReady = !inclusionTree.nextLevel(); - - if (valueReady) { - codeblock.included = true; - codeblockIncluded = firstTimeInclusion = true; - break; - } - } else { - inclusionTree.incrementValue(layerNumber); - break; - } - } - } - } - - if (!codeblockIncluded) { - continue; - } - - if (firstTimeInclusion) { - zeroBitPlanesTree = precinct.zeroBitPlanesTree; - zeroBitPlanesTree.reset(codeblockColumn, codeblockRow); - - while (true) { - if (readBits(1)) { - valueReady = !zeroBitPlanesTree.nextLevel(); - - if (valueReady) { - break; - } - } else { - zeroBitPlanesTree.incrementValue(); - } - } - - codeblock.zeroBitPlanes = zeroBitPlanesTree.value; - } - - const codingpasses = readCodingpasses(); - - while (readBits(1)) { - codeblock.Lblock++; - } - - const codingpassesLog2 = (0, _core_utils.log2)(codingpasses); - const bits = (codingpasses < 1 << codingpassesLog2 ? codingpassesLog2 - 1 : codingpassesLog2) + codeblock.Lblock; - const codedDataLength = readBits(bits); - queue.push({ - codeblock, - codingpasses, - dataLength: codedDataLength - }); - } - - alignToByte(); - - if (ephMarkerUsed) { - skipMarkerIfEqual(0x92); - } - - while (queue.length > 0) { - const packetItem = queue.shift(); - codeblock = packetItem.codeblock; - - if (codeblock.data === undefined) { - codeblock.data = []; - } - - codeblock.data.push({ - data, - start: offset + position, - end: offset + position + packetItem.dataLength, - codingpasses: packetItem.codingpasses - }); - position += packetItem.dataLength; - } - } - - return position; -} - -function copyCoefficients(coefficients, levelWidth, levelHeight, subband, delta, mb, reversible, segmentationSymbolUsed) { - const x0 = subband.tbx0; - const y0 = subband.tby0; - const width = subband.tbx1 - subband.tbx0; - const codeblocks = subband.codeblocks; - const right = subband.type.charAt(0) === "H" ? 1 : 0; - const bottom = subband.type.charAt(1) === "H" ? levelWidth : 0; - - for (let i = 0, ii = codeblocks.length; i < ii; ++i) { - const codeblock = codeblocks[i]; - const blockWidth = codeblock.tbx1_ - codeblock.tbx0_; - const blockHeight = codeblock.tby1_ - codeblock.tby0_; - - if (blockWidth === 0 || blockHeight === 0) { - continue; - } - - if (codeblock.data === undefined) { - continue; - } - - const bitModel = new BitModel(blockWidth, blockHeight, codeblock.subbandType, codeblock.zeroBitPlanes, mb); - let currentCodingpassType = 2; - const data = codeblock.data; - let totalLength = 0, - codingpasses = 0; - let j, jj, dataItem; - - for (j = 0, jj = data.length; j < jj; j++) { - dataItem = data[j]; - totalLength += dataItem.end - dataItem.start; - codingpasses += dataItem.codingpasses; - } - - const encodedData = new Uint8Array(totalLength); - let position = 0; - - for (j = 0, jj = data.length; j < jj; j++) { - dataItem = data[j]; - const chunk = dataItem.data.subarray(dataItem.start, dataItem.end); - encodedData.set(chunk, position); - position += chunk.length; - } - - const decoder = new _arithmetic_decoder.ArithmeticDecoder(encodedData, 0, totalLength); - bitModel.setDecoder(decoder); - - for (j = 0; j < codingpasses; j++) { - switch (currentCodingpassType) { - case 0: - bitModel.runSignificancePropagationPass(); - break; - - case 1: - bitModel.runMagnitudeRefinementPass(); - break; - - case 2: - bitModel.runCleanupPass(); - - if (segmentationSymbolUsed) { - bitModel.checkSegmentationSymbol(); - } - - break; - } - - currentCodingpassType = (currentCodingpassType + 1) % 3; - } - - let offset = codeblock.tbx0_ - x0 + (codeblock.tby0_ - y0) * width; - const sign = bitModel.coefficentsSign; - const magnitude = bitModel.coefficentsMagnitude; - const bitsDecoded = bitModel.bitsDecoded; - const magnitudeCorrection = reversible ? 0 : 0.5; - let k, n, nb; - position = 0; - const interleave = subband.type !== "LL"; - - for (j = 0; j < blockHeight; j++) { - const row = offset / width | 0; - const levelOffset = 2 * row * (levelWidth - width) + right + bottom; - - for (k = 0; k < blockWidth; k++) { - n = magnitude[position]; - - if (n !== 0) { - n = (n + magnitudeCorrection) * delta; - - if (sign[position] !== 0) { - n = -n; - } - - nb = bitsDecoded[position]; - const pos = interleave ? levelOffset + (offset << 1) : offset; - - if (reversible && nb >= mb) { - coefficients[pos] = n; - } else { - coefficients[pos] = n * (1 << mb - nb); - } - } - - offset++; - position++; - } - - offset += width - blockWidth; - } - } -} - -function transformTile(context, tile, c) { - const component = tile.components[c]; - const codingStyleParameters = component.codingStyleParameters; - const quantizationParameters = component.quantizationParameters; - const decompositionLevelsCount = codingStyleParameters.decompositionLevelsCount; - const spqcds = quantizationParameters.SPqcds; - const scalarExpounded = quantizationParameters.scalarExpounded; - const guardBits = quantizationParameters.guardBits; - const segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed; - const precision = context.components[c].precision; - const reversible = codingStyleParameters.reversibleTransformation; - const transform = reversible ? new ReversibleTransform() : new IrreversibleTransform(); - const subbandCoefficients = []; - let b = 0; - - for (let i = 0; i <= decompositionLevelsCount; i++) { - const resolution = component.resolutions[i]; - const width = resolution.trx1 - resolution.trx0; - const height = resolution.try1 - resolution.try0; - const coefficients = new Float32Array(width * height); - - for (let j = 0, jj = resolution.subbands.length; j < jj; j++) { - let mu, epsilon; - - if (!scalarExpounded) { - mu = spqcds[0].mu; - epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0); - } else { - mu = spqcds[b].mu; - epsilon = spqcds[b].epsilon; - b++; - } - - const subband = resolution.subbands[j]; - const gainLog2 = SubbandsGainLog2[subband.type]; - const delta = reversible ? 1 : 2 ** (precision + gainLog2 - epsilon) * (1 + mu / 2048); - const mb = guardBits + epsilon - 1; - copyCoefficients(coefficients, width, height, subband, delta, mb, reversible, segmentationSymbolUsed); - } - - subbandCoefficients.push({ - width, - height, - items: coefficients - }); - } - - const result = transform.calculate(subbandCoefficients, component.tcx0, component.tcy0); - return { - left: component.tcx0, - top: component.tcy0, - width: result.width, - height: result.height, - items: result.items - }; -} - -function transformComponents(context) { - const siz = context.SIZ; - const components = context.components; - const componentsCount = siz.Csiz; - const resultImages = []; - - for (let i = 0, ii = context.tiles.length; i < ii; i++) { - const tile = context.tiles[i]; - const transformedTiles = []; - - for (let c = 0; c < componentsCount; c++) { - transformedTiles[c] = transformTile(context, tile, c); - } - - const tile0 = transformedTiles[0]; - const out = new Uint8ClampedArray(tile0.items.length * componentsCount); - const result = { - left: tile0.left, - top: tile0.top, - width: tile0.width, - height: tile0.height, - items: out - }; - let shift, offset; - let pos = 0, - j, - jj, - y0, - y1, - y2; - - if (tile.codingStyleDefaultParameters.multipleComponentTransform) { - const fourComponents = componentsCount === 4; - const y0items = transformedTiles[0].items; - const y1items = transformedTiles[1].items; - const y2items = transformedTiles[2].items; - const y3items = fourComponents ? transformedTiles[3].items : null; - shift = components[0].precision - 8; - offset = (128 << shift) + 0.5; - const component0 = tile.components[0]; - const alpha01 = componentsCount - 3; - jj = y0items.length; - - if (!component0.codingStyleParameters.reversibleTransformation) { - for (j = 0; j < jj; j++, pos += alpha01) { - y0 = y0items[j] + offset; - y1 = y1items[j]; - y2 = y2items[j]; - out[pos++] = y0 + 1.402 * y2 >> shift; - out[pos++] = y0 - 0.34413 * y1 - 0.71414 * y2 >> shift; - out[pos++] = y0 + 1.772 * y1 >> shift; - } - } else { - for (j = 0; j < jj; j++, pos += alpha01) { - y0 = y0items[j] + offset; - y1 = y1items[j]; - y2 = y2items[j]; - const g = y0 - (y2 + y1 >> 2); - out[pos++] = g + y2 >> shift; - out[pos++] = g >> shift; - out[pos++] = g + y1 >> shift; - } - } - - if (fourComponents) { - for (j = 0, pos = 3; j < jj; j++, pos += 4) { - out[pos] = y3items[j] + offset >> shift; - } - } - } else { - for (let c = 0; c < componentsCount; c++) { - const items = transformedTiles[c].items; - shift = components[c].precision - 8; - offset = (128 << shift) + 0.5; - - for (pos = c, j = 0, jj = items.length; j < jj; j++) { - out[pos] = items[j] + offset >> shift; - pos += componentsCount; - } - } - } - - resultImages.push(result); - } - - return resultImages; -} - -function initializeTile(context, tileIndex) { - const siz = context.SIZ; - const componentsCount = siz.Csiz; - const tile = context.tiles[tileIndex]; - - for (let c = 0; c < componentsCount; c++) { - const component = tile.components[c]; - const qcdOrQcc = context.currentTile.QCC[c] !== undefined ? context.currentTile.QCC[c] : context.currentTile.QCD; - component.quantizationParameters = qcdOrQcc; - const codOrCoc = context.currentTile.COC[c] !== undefined ? context.currentTile.COC[c] : context.currentTile.COD; - component.codingStyleParameters = codOrCoc; - } - - tile.codingStyleDefaultParameters = context.currentTile.COD; -} - -class TagTree { - constructor(width, height) { - const levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1; - this.levels = []; - - for (let i = 0; i < levelsLength; i++) { - const level = { - width, - height, - items: [] - }; - this.levels.push(level); - width = Math.ceil(width / 2); - height = Math.ceil(height / 2); - } - } - - reset(i, j) { - let currentLevel = 0, - value = 0, - level; - - while (currentLevel < this.levels.length) { - level = this.levels[currentLevel]; - const index = i + j * level.width; - - if (level.items[index] !== undefined) { - value = level.items[index]; - break; - } - - level.index = index; - i >>= 1; - j >>= 1; - currentLevel++; - } - - currentLevel--; - level = this.levels[currentLevel]; - level.items[level.index] = value; - this.currentLevel = currentLevel; - delete this.value; - } - - incrementValue() { - const level = this.levels[this.currentLevel]; - level.items[level.index]++; - } - - nextLevel() { - let currentLevel = this.currentLevel; - let level = this.levels[currentLevel]; - const value = level.items[level.index]; - currentLevel--; - - if (currentLevel < 0) { - this.value = value; - return false; - } - - this.currentLevel = currentLevel; - level = this.levels[currentLevel]; - level.items[level.index] = value; - return true; - } - -} - -class InclusionTree { - constructor(width, height, defaultValue) { - const levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1; - this.levels = []; - - for (let i = 0; i < levelsLength; i++) { - const items = new Uint8Array(width * height); - - for (let j = 0, jj = items.length; j < jj; j++) { - items[j] = defaultValue; - } - - const level = { - width, - height, - items - }; - this.levels.push(level); - width = Math.ceil(width / 2); - height = Math.ceil(height / 2); - } - } - - reset(i, j, stopValue) { - let currentLevel = 0; - - while (currentLevel < this.levels.length) { - const level = this.levels[currentLevel]; - const index = i + j * level.width; - level.index = index; - const value = level.items[index]; - - if (value === 0xff) { - break; - } - - if (value > stopValue) { - this.currentLevel = currentLevel; - this.propagateValues(); - return false; - } - - i >>= 1; - j >>= 1; - currentLevel++; - } - - this.currentLevel = currentLevel - 1; - return true; - } - - incrementValue(stopValue) { - const level = this.levels[this.currentLevel]; - level.items[level.index] = stopValue + 1; - this.propagateValues(); - } - - propagateValues() { - let levelIndex = this.currentLevel; - let level = this.levels[levelIndex]; - const currentValue = level.items[level.index]; - - while (--levelIndex >= 0) { - level = this.levels[levelIndex]; - level.items[level.index] = currentValue; - } - } - - nextLevel() { - let currentLevel = this.currentLevel; - let level = this.levels[currentLevel]; - const value = level.items[level.index]; - level.items[level.index] = 0xff; - currentLevel--; - - if (currentLevel < 0) { - return false; - } - - this.currentLevel = currentLevel; - level = this.levels[currentLevel]; - level.items[level.index] = value; - return true; - } - -} - -const BitModel = function BitModelClosure() { - const UNIFORM_CONTEXT = 17; - const RUNLENGTH_CONTEXT = 18; - const LLAndLHContextsLabel = new Uint8Array([0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8]); - const HLContextLabel = new Uint8Array([0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8]); - const HHContextLabel = new Uint8Array([0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5, 5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8]); - - class BitModel { - constructor(width, height, subband, zeroBitPlanes, mb) { - this.width = width; - this.height = height; - let contextLabelTable; - - if (subband === "HH") { - contextLabelTable = HHContextLabel; - } else if (subband === "HL") { - contextLabelTable = HLContextLabel; - } else { - contextLabelTable = LLAndLHContextsLabel; - } - - this.contextLabelTable = contextLabelTable; - const coefficientCount = width * height; - this.neighborsSignificance = new Uint8Array(coefficientCount); - this.coefficentsSign = new Uint8Array(coefficientCount); - let coefficentsMagnitude; - - if (mb > 14) { - coefficentsMagnitude = new Uint32Array(coefficientCount); - } else if (mb > 6) { - coefficentsMagnitude = new Uint16Array(coefficientCount); - } else { - coefficentsMagnitude = new Uint8Array(coefficientCount); - } - - this.coefficentsMagnitude = coefficentsMagnitude; - this.processingFlags = new Uint8Array(coefficientCount); - const bitsDecoded = new Uint8Array(coefficientCount); - - if (zeroBitPlanes !== 0) { - for (let i = 0; i < coefficientCount; i++) { - bitsDecoded[i] = zeroBitPlanes; - } - } - - this.bitsDecoded = bitsDecoded; - this.reset(); - } - - setDecoder(decoder) { - this.decoder = decoder; - } - - reset() { - this.contexts = new Int8Array(19); - this.contexts[0] = 4 << 1 | 0; - this.contexts[UNIFORM_CONTEXT] = 46 << 1 | 0; - this.contexts[RUNLENGTH_CONTEXT] = 3 << 1 | 0; - } - - setNeighborsSignificance(row, column, index) { - const neighborsSignificance = this.neighborsSignificance; - const width = this.width, - height = this.height; - const left = column > 0; - const right = column + 1 < width; - let i; - - if (row > 0) { - i = index - width; - - if (left) { - neighborsSignificance[i - 1] += 0x10; - } - - if (right) { - neighborsSignificance[i + 1] += 0x10; - } - - neighborsSignificance[i] += 0x04; - } - - if (row + 1 < height) { - i = index + width; - - if (left) { - neighborsSignificance[i - 1] += 0x10; - } - - if (right) { - neighborsSignificance[i + 1] += 0x10; - } - - neighborsSignificance[i] += 0x04; - } - - if (left) { - neighborsSignificance[index - 1] += 0x01; - } - - if (right) { - neighborsSignificance[index + 1] += 0x01; - } - - neighborsSignificance[index] |= 0x80; - } - - runSignificancePropagationPass() { - const decoder = this.decoder; - const width = this.width, - height = this.height; - const coefficentsMagnitude = this.coefficentsMagnitude; - const coefficentsSign = this.coefficentsSign; - const neighborsSignificance = this.neighborsSignificance; - const processingFlags = this.processingFlags; - const contexts = this.contexts; - const labels = this.contextLabelTable; - const bitsDecoded = this.bitsDecoded; - const processedInverseMask = ~1; - const processedMask = 1; - const firstMagnitudeBitMask = 2; - - for (let i0 = 0; i0 < height; i0 += 4) { - for (let j = 0; j < width; j++) { - let index = i0 * width + j; - - for (let i1 = 0; i1 < 4; i1++, index += width) { - const i = i0 + i1; - - if (i >= height) { - break; - } - - processingFlags[index] &= processedInverseMask; - - if (coefficentsMagnitude[index] || !neighborsSignificance[index]) { - continue; - } - - const contextLabel = labels[neighborsSignificance[index]]; - const decision = decoder.readBit(contexts, contextLabel); - - if (decision) { - const sign = this.decodeSignBit(i, j, index); - coefficentsSign[index] = sign; - coefficentsMagnitude[index] = 1; - this.setNeighborsSignificance(i, j, index); - processingFlags[index] |= firstMagnitudeBitMask; - } - - bitsDecoded[index]++; - processingFlags[index] |= processedMask; - } - } - } - } - - decodeSignBit(row, column, index) { - const width = this.width, - height = this.height; - const coefficentsMagnitude = this.coefficentsMagnitude; - const coefficentsSign = this.coefficentsSign; - let contribution, sign0, sign1, significance1; - let contextLabel, decoded; - significance1 = column > 0 && coefficentsMagnitude[index - 1] !== 0; - - if (column + 1 < width && coefficentsMagnitude[index + 1] !== 0) { - sign1 = coefficentsSign[index + 1]; - - if (significance1) { - sign0 = coefficentsSign[index - 1]; - contribution = 1 - sign1 - sign0; - } else { - contribution = 1 - sign1 - sign1; - } - } else if (significance1) { - sign0 = coefficentsSign[index - 1]; - contribution = 1 - sign0 - sign0; - } else { - contribution = 0; - } - - const horizontalContribution = 3 * contribution; - significance1 = row > 0 && coefficentsMagnitude[index - width] !== 0; - - if (row + 1 < height && coefficentsMagnitude[index + width] !== 0) { - sign1 = coefficentsSign[index + width]; - - if (significance1) { - sign0 = coefficentsSign[index - width]; - contribution = 1 - sign1 - sign0 + horizontalContribution; - } else { - contribution = 1 - sign1 - sign1 + horizontalContribution; - } - } else if (significance1) { - sign0 = coefficentsSign[index - width]; - contribution = 1 - sign0 - sign0 + horizontalContribution; - } else { - contribution = horizontalContribution; - } - - if (contribution >= 0) { - contextLabel = 9 + contribution; - decoded = this.decoder.readBit(this.contexts, contextLabel); - } else { - contextLabel = 9 - contribution; - decoded = this.decoder.readBit(this.contexts, contextLabel) ^ 1; - } - - return decoded; - } - - runMagnitudeRefinementPass() { - const decoder = this.decoder; - const width = this.width, - height = this.height; - const coefficentsMagnitude = this.coefficentsMagnitude; - const neighborsSignificance = this.neighborsSignificance; - const contexts = this.contexts; - const bitsDecoded = this.bitsDecoded; - const processingFlags = this.processingFlags; - const processedMask = 1; - const firstMagnitudeBitMask = 2; - const length = width * height; - const width4 = width * 4; - - for (let index0 = 0, indexNext; index0 < length; index0 = indexNext) { - indexNext = Math.min(length, index0 + width4); - - for (let j = 0; j < width; j++) { - for (let index = index0 + j; index < indexNext; index += width) { - if (!coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) { - continue; - } - - let contextLabel = 16; - - if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) { - processingFlags[index] ^= firstMagnitudeBitMask; - const significance = neighborsSignificance[index] & 127; - contextLabel = significance === 0 ? 15 : 14; - } - - const bit = decoder.readBit(contexts, contextLabel); - coefficentsMagnitude[index] = coefficentsMagnitude[index] << 1 | bit; - bitsDecoded[index]++; - processingFlags[index] |= processedMask; - } - } - } - } - - runCleanupPass() { - const decoder = this.decoder; - const width = this.width, - height = this.height; - const neighborsSignificance = this.neighborsSignificance; - const coefficentsMagnitude = this.coefficentsMagnitude; - const coefficentsSign = this.coefficentsSign; - const contexts = this.contexts; - const labels = this.contextLabelTable; - const bitsDecoded = this.bitsDecoded; - const processingFlags = this.processingFlags; - const processedMask = 1; - const firstMagnitudeBitMask = 2; - const oneRowDown = width; - const twoRowsDown = width * 2; - const threeRowsDown = width * 3; - let iNext; - - for (let i0 = 0; i0 < height; i0 = iNext) { - iNext = Math.min(i0 + 4, height); - const indexBase = i0 * width; - const checkAllEmpty = i0 + 3 < height; - - for (let j = 0; j < width; j++) { - const index0 = indexBase + j; - const allEmpty = checkAllEmpty && processingFlags[index0] === 0 && processingFlags[index0 + oneRowDown] === 0 && processingFlags[index0 + twoRowsDown] === 0 && processingFlags[index0 + threeRowsDown] === 0 && neighborsSignificance[index0] === 0 && neighborsSignificance[index0 + oneRowDown] === 0 && neighborsSignificance[index0 + twoRowsDown] === 0 && neighborsSignificance[index0 + threeRowsDown] === 0; - let i1 = 0, - index = index0; - let i = i0, - sign; - - if (allEmpty) { - const hasSignificantCoefficent = decoder.readBit(contexts, RUNLENGTH_CONTEXT); - - if (!hasSignificantCoefficent) { - bitsDecoded[index0]++; - bitsDecoded[index0 + oneRowDown]++; - bitsDecoded[index0 + twoRowsDown]++; - bitsDecoded[index0 + threeRowsDown]++; - continue; - } - - i1 = decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT); - - if (i1 !== 0) { - i = i0 + i1; - index += i1 * width; - } - - sign = this.decodeSignBit(i, j, index); - coefficentsSign[index] = sign; - coefficentsMagnitude[index] = 1; - this.setNeighborsSignificance(i, j, index); - processingFlags[index] |= firstMagnitudeBitMask; - index = index0; - - for (let i2 = i0; i2 <= i; i2++, index += width) { - bitsDecoded[index]++; - } - - i1++; - } - - for (i = i0 + i1; i < iNext; i++, index += width) { - if (coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) { - continue; - } - - const contextLabel = labels[neighborsSignificance[index]]; - const decision = decoder.readBit(contexts, contextLabel); - - if (decision === 1) { - sign = this.decodeSignBit(i, j, index); - coefficentsSign[index] = sign; - coefficentsMagnitude[index] = 1; - this.setNeighborsSignificance(i, j, index); - processingFlags[index] |= firstMagnitudeBitMask; - } - - bitsDecoded[index]++; - } - } - } - } - - checkSegmentationSymbol() { - const decoder = this.decoder; - const contexts = this.contexts; - const symbol = decoder.readBit(contexts, UNIFORM_CONTEXT) << 3 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 2 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT); - - if (symbol !== 0xa) { - throw new JpxError("Invalid segmentation symbol"); - } - } - - } - - return BitModel; -}(); - -class Transform { - constructor() { - if (this.constructor === Transform) { - (0, _util.unreachable)("Cannot initialize Transform."); - } - } - - calculate(subbands, u0, v0) { - let ll = subbands[0]; - - for (let i = 1, ii = subbands.length; i < ii; i++) { - ll = this.iterate(ll, subbands[i], u0, v0); - } - - return ll; - } - - extend(buffer, offset, size) { - let i1 = offset - 1, - j1 = offset + 1; - let i2 = offset + size - 2, - j2 = offset + size; - buffer[i1--] = buffer[j1++]; - buffer[j2++] = buffer[i2--]; - buffer[i1--] = buffer[j1++]; - buffer[j2++] = buffer[i2--]; - buffer[i1--] = buffer[j1++]; - buffer[j2++] = buffer[i2--]; - buffer[i1] = buffer[j1]; - buffer[j2] = buffer[i2]; - } - - filter(x, offset, length) { - (0, _util.unreachable)("Abstract method `filter` called"); - } - - iterate(ll, hl_lh_hh, u0, v0) { - const llWidth = ll.width, - llHeight = ll.height; - let llItems = ll.items; - const width = hl_lh_hh.width; - const height = hl_lh_hh.height; - const items = hl_lh_hh.items; - let i, j, k, l, u, v; - - for (k = 0, i = 0; i < llHeight; i++) { - l = i * 2 * width; - - for (j = 0; j < llWidth; j++, k++, l += 2) { - items[l] = llItems[k]; - } - } - - llItems = ll.items = null; - const bufferPadding = 4; - const rowBuffer = new Float32Array(width + 2 * bufferPadding); - - if (width === 1) { - if ((u0 & 1) !== 0) { - for (v = 0, k = 0; v < height; v++, k += width) { - items[k] *= 0.5; - } - } - } else { - for (v = 0, k = 0; v < height; v++, k += width) { - rowBuffer.set(items.subarray(k, k + width), bufferPadding); - this.extend(rowBuffer, bufferPadding, width); - this.filter(rowBuffer, bufferPadding, width); - items.set(rowBuffer.subarray(bufferPadding, bufferPadding + width), k); - } - } - - let numBuffers = 16; - const colBuffers = []; - - for (i = 0; i < numBuffers; i++) { - colBuffers.push(new Float32Array(height + 2 * bufferPadding)); - } - - let b, - currentBuffer = 0; - ll = bufferPadding + height; - - if (height === 1) { - if ((v0 & 1) !== 0) { - for (u = 0; u < width; u++) { - items[u] *= 0.5; - } - } - } else { - for (u = 0; u < width; u++) { - if (currentBuffer === 0) { - numBuffers = Math.min(width - u, numBuffers); - - for (k = u, l = bufferPadding; l < ll; k += width, l++) { - for (b = 0; b < numBuffers; b++) { - colBuffers[b][l] = items[k + b]; - } - } - - currentBuffer = numBuffers; - } - - currentBuffer--; - const buffer = colBuffers[currentBuffer]; - this.extend(buffer, bufferPadding, height); - this.filter(buffer, bufferPadding, height); - - if (currentBuffer === 0) { - k = u - numBuffers + 1; - - for (l = bufferPadding; l < ll; k += width, l++) { - for (b = 0; b < numBuffers; b++) { - items[k + b] = colBuffers[b][l]; - } - } - } - } - } - - return { - width, - height, - items - }; - } - -} - -class IrreversibleTransform extends Transform { - filter(x, offset, length) { - const len = length >> 1; - offset |= 0; - let j, n, current, next; - const alpha = -1.586134342059924; - const beta = -0.052980118572961; - const gamma = 0.882911075530934; - const delta = 0.443506852043971; - const K = 1.230174104914001; - const K_ = 1 / K; - j = offset - 3; - - for (n = len + 4; n--; j += 2) { - x[j] *= K_; - } - - j = offset - 2; - current = delta * x[j - 1]; - - for (n = len + 3; n--; j += 2) { - next = delta * x[j + 1]; - x[j] = K * x[j] - current - next; - - if (n--) { - j += 2; - current = delta * x[j + 1]; - x[j] = K * x[j] - current - next; - } else { - break; - } - } - - j = offset - 1; - current = gamma * x[j - 1]; - - for (n = len + 2; n--; j += 2) { - next = gamma * x[j + 1]; - x[j] -= current + next; - - if (n--) { - j += 2; - current = gamma * x[j + 1]; - x[j] -= current + next; - } else { - break; - } - } - - j = offset; - current = beta * x[j - 1]; - - for (n = len + 1; n--; j += 2) { - next = beta * x[j + 1]; - x[j] -= current + next; - - if (n--) { - j += 2; - current = beta * x[j + 1]; - x[j] -= current + next; - } else { - break; - } - } - - if (len !== 0) { - j = offset + 1; - current = alpha * x[j - 1]; - - for (n = len; n--; j += 2) { - next = alpha * x[j + 1]; - x[j] -= current + next; - - if (n--) { - j += 2; - current = alpha * x[j + 1]; - x[j] -= current + next; - } else { - break; - } - } - } - } - -} - -class ReversibleTransform extends Transform { - filter(x, offset, length) { - const len = length >> 1; - offset |= 0; - let j, n; - - for (j = offset, n = len + 1; n--; j += 2) { - x[j] -= x[j - 1] + x[j + 1] + 2 >> 2; - } - - for (j = offset + 1, n = len; n--; j += 2) { - x[j] += x[j - 1] + x[j + 1] >> 1; - } - } - -} - -/***/ }), -/* 41 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.LZWStream = void 0; - -var _decode_stream = __w_pdfjs_require__(29); - -class LZWStream extends _decode_stream.DecodeStream { - constructor(str, maybeLength, earlyChange) { - super(maybeLength); - this.str = str; - this.dict = str.dict; - this.cachedData = 0; - this.bitsCached = 0; - const maxLzwDictionarySize = 4096; - const lzwState = { - earlyChange, - codeLength: 9, - nextCode: 258, - dictionaryValues: new Uint8Array(maxLzwDictionarySize), - dictionaryLengths: new Uint16Array(maxLzwDictionarySize), - dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize), - currentSequence: new Uint8Array(maxLzwDictionarySize), - currentSequenceLength: 0 - }; - - for (let i = 0; i < 256; ++i) { - lzwState.dictionaryValues[i] = i; - lzwState.dictionaryLengths[i] = 1; - } - - this.lzwState = lzwState; - } - - readBits(n) { - let bitsCached = this.bitsCached; - let cachedData = this.cachedData; - - while (bitsCached < n) { - const c = this.str.getByte(); - - if (c === -1) { - this.eof = true; - return null; - } - - cachedData = cachedData << 8 | c; - bitsCached += 8; - } - - this.bitsCached = bitsCached -= n; - this.cachedData = cachedData; - this.lastCode = null; - return cachedData >>> bitsCached & (1 << n) - 1; - } - - readBlock() { - const blockSize = 512, - decodedSizeDelta = blockSize; - let estimatedDecodedSize = blockSize * 2; - let i, j, q; - const lzwState = this.lzwState; - - if (!lzwState) { - return; - } - - const earlyChange = lzwState.earlyChange; - let nextCode = lzwState.nextCode; - const dictionaryValues = lzwState.dictionaryValues; - const dictionaryLengths = lzwState.dictionaryLengths; - const dictionaryPrevCodes = lzwState.dictionaryPrevCodes; - let codeLength = lzwState.codeLength; - let prevCode = lzwState.prevCode; - const currentSequence = lzwState.currentSequence; - let currentSequenceLength = lzwState.currentSequenceLength; - let decodedLength = 0; - let currentBufferLength = this.bufferLength; - let buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize); - - for (i = 0; i < blockSize; i++) { - const code = this.readBits(codeLength); - const hasPrev = currentSequenceLength > 0; - - if (code < 256) { - currentSequence[0] = code; - currentSequenceLength = 1; - } else if (code >= 258) { - if (code < nextCode) { - currentSequenceLength = dictionaryLengths[code]; - - for (j = currentSequenceLength - 1, q = code; j >= 0; j--) { - currentSequence[j] = dictionaryValues[q]; - q = dictionaryPrevCodes[q]; - } - } else { - currentSequence[currentSequenceLength++] = currentSequence[0]; - } - } else if (code === 256) { - codeLength = 9; - nextCode = 258; - currentSequenceLength = 0; - continue; - } else { - this.eof = true; - delete this.lzwState; - break; - } - - if (hasPrev) { - dictionaryPrevCodes[nextCode] = prevCode; - dictionaryLengths[nextCode] = dictionaryLengths[prevCode] + 1; - dictionaryValues[nextCode] = currentSequence[0]; - nextCode++; - codeLength = nextCode + earlyChange & nextCode + earlyChange - 1 ? codeLength : Math.min(Math.log(nextCode + earlyChange) / 0.6931471805599453 + 1, 12) | 0; - } - - prevCode = code; - decodedLength += currentSequenceLength; - - if (estimatedDecodedSize < decodedLength) { - do { - estimatedDecodedSize += decodedSizeDelta; - } while (estimatedDecodedSize < decodedLength); - - buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize); - } - - for (j = 0; j < currentSequenceLength; j++) { - buffer[currentBufferLength++] = currentSequence[j]; - } - } - - lzwState.nextCode = nextCode; - lzwState.codeLength = codeLength; - lzwState.prevCode = prevCode; - lzwState.currentSequenceLength = currentSequenceLength; - this.bufferLength = currentBufferLength; - } - -} - -exports.LZWStream = LZWStream; - -/***/ }), -/* 42 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.PredictorStream = void 0; - -var _decode_stream = __w_pdfjs_require__(29); - -var _util = __w_pdfjs_require__(2); - -var _primitives = __w_pdfjs_require__(5); - -class PredictorStream extends _decode_stream.DecodeStream { - constructor(str, maybeLength, params) { - super(maybeLength); - - if (!(0, _primitives.isDict)(params)) { - return str; - } - - const predictor = this.predictor = params.get("Predictor") || 1; - - if (predictor <= 1) { - return str; - } - - if (predictor !== 2 && (predictor < 10 || predictor > 15)) { - throw new _util.FormatError(`Unsupported predictor: ${predictor}`); - } - - if (predictor === 2) { - this.readBlock = this.readBlockTiff; - } else { - this.readBlock = this.readBlockPng; - } - - this.str = str; - this.dict = str.dict; - const colors = this.colors = params.get("Colors") || 1; - const bits = this.bits = params.get("BPC", "BitsPerComponent") || 8; - const columns = this.columns = params.get("Columns") || 1; - this.pixBytes = colors * bits + 7 >> 3; - this.rowBytes = columns * colors * bits + 7 >> 3; - return this; - } - - readBlockTiff() { - const rowBytes = this.rowBytes; - const bufferLength = this.bufferLength; - const buffer = this.ensureBuffer(bufferLength + rowBytes); - const bits = this.bits; - const colors = this.colors; - const rawBytes = this.str.getBytes(rowBytes); - this.eof = !rawBytes.length; - - if (this.eof) { - return; - } - - let inbuf = 0, - outbuf = 0; - let inbits = 0, - outbits = 0; - let pos = bufferLength; - let i; - - if (bits === 1 && colors === 1) { - for (i = 0; i < rowBytes; ++i) { - let c = rawBytes[i] ^ inbuf; - c ^= c >> 1; - c ^= c >> 2; - c ^= c >> 4; - inbuf = (c & 1) << 7; - buffer[pos++] = c; - } - } else if (bits === 8) { - for (i = 0; i < colors; ++i) { - buffer[pos++] = rawBytes[i]; - } - - for (; i < rowBytes; ++i) { - buffer[pos] = buffer[pos - colors] + rawBytes[i]; - pos++; - } - } else if (bits === 16) { - const bytesPerPixel = colors * 2; - - for (i = 0; i < bytesPerPixel; ++i) { - buffer[pos++] = rawBytes[i]; - } - - for (; i < rowBytes; i += 2) { - const sum = ((rawBytes[i] & 0xff) << 8) + (rawBytes[i + 1] & 0xff) + ((buffer[pos - bytesPerPixel] & 0xff) << 8) + (buffer[pos - bytesPerPixel + 1] & 0xff); - buffer[pos++] = sum >> 8 & 0xff; - buffer[pos++] = sum & 0xff; - } - } else { - const compArray = new Uint8Array(colors + 1); - const bitMask = (1 << bits) - 1; - let j = 0, - k = bufferLength; - const columns = this.columns; - - for (i = 0; i < columns; ++i) { - for (let kk = 0; kk < colors; ++kk) { - if (inbits < bits) { - inbuf = inbuf << 8 | rawBytes[j++] & 0xff; - inbits += 8; - } - - compArray[kk] = compArray[kk] + (inbuf >> inbits - bits) & bitMask; - inbits -= bits; - outbuf = outbuf << bits | compArray[kk]; - outbits += bits; - - if (outbits >= 8) { - buffer[k++] = outbuf >> outbits - 8 & 0xff; - outbits -= 8; - } - } - } - - if (outbits > 0) { - buffer[k++] = (outbuf << 8 - outbits) + (inbuf & (1 << 8 - outbits) - 1); - } - } - - this.bufferLength += rowBytes; - } - - readBlockPng() { - const rowBytes = this.rowBytes; - const pixBytes = this.pixBytes; - const predictor = this.str.getByte(); - const rawBytes = this.str.getBytes(rowBytes); - this.eof = !rawBytes.length; - - if (this.eof) { - return; - } - - const bufferLength = this.bufferLength; - const buffer = this.ensureBuffer(bufferLength + rowBytes); - let prevRow = buffer.subarray(bufferLength - rowBytes, bufferLength); - - if (prevRow.length === 0) { - prevRow = new Uint8Array(rowBytes); - } - - let i, - j = bufferLength, - up, - c; - - switch (predictor) { - case 0: - for (i = 0; i < rowBytes; ++i) { - buffer[j++] = rawBytes[i]; - } - - break; - - case 1: - for (i = 0; i < pixBytes; ++i) { - buffer[j++] = rawBytes[i]; - } - - for (; i < rowBytes; ++i) { - buffer[j] = buffer[j - pixBytes] + rawBytes[i] & 0xff; - j++; - } - - break; - - case 2: - for (i = 0; i < rowBytes; ++i) { - buffer[j++] = prevRow[i] + rawBytes[i] & 0xff; - } - - break; - - case 3: - for (i = 0; i < pixBytes; ++i) { - buffer[j++] = (prevRow[i] >> 1) + rawBytes[i]; - } - - for (; i < rowBytes; ++i) { - buffer[j] = (prevRow[i] + buffer[j - pixBytes] >> 1) + rawBytes[i] & 0xff; - j++; - } - - break; - - case 4: - for (i = 0; i < pixBytes; ++i) { - up = prevRow[i]; - c = rawBytes[i]; - buffer[j++] = up + c; - } - - for (; i < rowBytes; ++i) { - up = prevRow[i]; - const upLeft = prevRow[i - pixBytes]; - const left = buffer[j - pixBytes]; - const p = left + up - upLeft; - let pa = p - left; - - if (pa < 0) { - pa = -pa; - } - - let pb = p - up; - - if (pb < 0) { - pb = -pb; - } - - let pc = p - upLeft; - - if (pc < 0) { - pc = -pc; - } - - c = rawBytes[i]; - - if (pa <= pb && pa <= pc) { - buffer[j++] = left + c; - } else if (pb <= pc) { - buffer[j++] = up + c; - } else { - buffer[j++] = upLeft + c; - } - } - - break; - - default: - throw new _util.FormatError(`Unsupported predictor: ${predictor}`); - } - - this.bufferLength += rowBytes; - } - -} - -exports.PredictorStream = PredictorStream; - -/***/ }), -/* 43 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.RunLengthStream = void 0; - -var _decode_stream = __w_pdfjs_require__(29); - -class RunLengthStream extends _decode_stream.DecodeStream { - constructor(str, maybeLength) { - super(maybeLength); - this.str = str; - this.dict = str.dict; - } - - readBlock() { - const repeatHeader = this.str.getBytes(2); - - if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) { - this.eof = true; - return; - } - - let buffer; - let bufferLength = this.bufferLength; - let n = repeatHeader[0]; - - if (n < 128) { - buffer = this.ensureBuffer(bufferLength + n + 1); - buffer[bufferLength++] = repeatHeader[1]; - - if (n > 0) { - const source = this.str.getBytes(n); - buffer.set(source, bufferLength); - bufferLength += n; - } - } else { - n = 257 - n; - const b = repeatHeader[1]; - buffer = this.ensureBuffer(bufferLength + n + 1); - - for (let i = 0; i < n; i++) { - buffer[bufferLength++] = b; - } - } - - this.bufferLength = bufferLength; - } - -} - -exports.RunLengthStream = RunLengthStream; - -/***/ }), -/* 44 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Font = exports.ErrorFont = void 0; - -var _util = __w_pdfjs_require__(2); - -var _cff_parser = __w_pdfjs_require__(45); - -var _fonts_utils = __w_pdfjs_require__(18); - -var _glyphlist = __w_pdfjs_require__(20); - -var _encodings = __w_pdfjs_require__(19); - -var _standard_fonts = __w_pdfjs_require__(47); - -var _unicode = __w_pdfjs_require__(21); - -var _to_unicode_map = __w_pdfjs_require__(48); - -var _cff_font = __w_pdfjs_require__(49); - -var _font_renderer = __w_pdfjs_require__(50); - -var _glyf = __w_pdfjs_require__(51); - -var _cmap = __w_pdfjs_require__(26); - -var _opentype_file_builder = __w_pdfjs_require__(52); - -var _core_utils = __w_pdfjs_require__(9); - -var _stream = __w_pdfjs_require__(10); - -var _type1_font = __w_pdfjs_require__(53); - -const PRIVATE_USE_AREAS = [[0xe000, 0xf8ff], [0x100000, 0x10fffd]]; -const PDF_GLYPH_SPACE_UNITS = 1000; -const EXPORT_DATA_PROPERTIES = ["ascent", "bbox", "black", "bold", "charProcOperatorList", "composite", "cssFontInfo", "data", "defaultVMetrics", "defaultWidth", "descent", "fallbackName", "fontMatrix", "fontType", "isType3Font", "italic", "loadedName", "mimetype", "missingFile", "name", "remeasure", "subtype", "type", "vertical"]; -const EXPORT_DATA_EXTRA_PROPERTIES = ["cMap", "defaultEncoding", "differences", "isMonospace", "isSerifFont", "isSymbolicFont", "seacMap", "toFontChar", "toUnicode", "vmetrics", "widths"]; - -function adjustWidths(properties) { - if (!properties.fontMatrix) { - return; - } - - if (properties.fontMatrix[0] === _util.FONT_IDENTITY_MATRIX[0]) { - return; - } - - const scale = 0.001 / properties.fontMatrix[0]; - const glyphsWidths = properties.widths; - - for (const glyph in glyphsWidths) { - glyphsWidths[glyph] *= scale; - } - - properties.defaultWidth *= scale; -} - -function adjustToUnicode(properties, builtInEncoding) { - if (properties.isInternalFont) { - return; - } - - if (builtInEncoding === properties.defaultEncoding) { - return; - } - - if (properties.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) { - return; - } - - const toUnicode = [], - glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); - - for (const charCode in builtInEncoding) { - if (properties.hasIncludedToUnicodeMap) { - if (properties.toUnicode.has(charCode)) { - continue; - } - } else if (properties.hasEncoding) { - if (properties.differences.length === 0 || properties.differences[charCode] !== undefined) { - continue; - } - } - - const glyphName = builtInEncoding[charCode]; - const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap); - - if (unicode !== -1) { - toUnicode[charCode] = String.fromCharCode(unicode); - } - } - - if (toUnicode.length > 0) { - properties.toUnicode.amend(toUnicode); - } -} - -function amendFallbackToUnicode(properties) { - if (!properties.fallbackToUnicode) { - return; - } - - if (properties.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) { - return; - } - - const toUnicode = []; - - for (const charCode in properties.fallbackToUnicode) { - if (properties.toUnicode.has(charCode)) { - continue; - } - - toUnicode[charCode] = properties.fallbackToUnicode[charCode]; - } - - if (toUnicode.length > 0) { - properties.toUnicode.amend(toUnicode); - } -} - -class Glyph { - constructor(originalCharCode, fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) { - this.originalCharCode = originalCharCode; - this.fontChar = fontChar; - this.unicode = unicode; - this.accent = accent; - this.width = width; - this.vmetric = vmetric; - this.operatorListId = operatorListId; - this.isSpace = isSpace; - this.isInFont = isInFont; - } - - matchesForCache(originalCharCode, fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) { - return this.originalCharCode === originalCharCode && this.fontChar === fontChar && this.unicode === unicode && this.accent === accent && this.width === width && this.vmetric === vmetric && this.operatorListId === operatorListId && this.isSpace === isSpace && this.isInFont === isInFont; - } - -} - -function int16(b0, b1) { - return (b0 << 8) + b1; -} - -function writeSignedInt16(bytes, index, value) { - bytes[index + 1] = value; - bytes[index] = value >>> 8; -} - -function signedInt16(b0, b1) { - const value = (b0 << 8) + b1; - return value & 1 << 15 ? value - 0x10000 : value; -} - -function int32(b0, b1, b2, b3) { - return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; -} - -function string16(value) { - return String.fromCharCode(value >> 8 & 0xff, value & 0xff); -} - -function safeString16(value) { - if (value > 0x7fff) { - value = 0x7fff; - } else if (value < -0x8000) { - value = -0x8000; - } - - return String.fromCharCode(value >> 8 & 0xff, value & 0xff); -} - -function isTrueTypeFile(file) { - const header = file.peekBytes(4); - return (0, _core_utils.readUint32)(header, 0) === 0x00010000 || (0, _util.bytesToString)(header) === "true"; -} - -function isTrueTypeCollectionFile(file) { - const header = file.peekBytes(4); - return (0, _util.bytesToString)(header) === "ttcf"; -} - -function isOpenTypeFile(file) { - const header = file.peekBytes(4); - return (0, _util.bytesToString)(header) === "OTTO"; -} - -function isType1File(file) { - const header = file.peekBytes(2); - - if (header[0] === 0x25 && header[1] === 0x21) { - return true; - } - - if (header[0] === 0x80 && header[1] === 0x01) { - return true; - } - - return false; -} - -function isCFFFile(file) { - const header = file.peekBytes(4); - - if (header[0] >= 1 && header[3] >= 1 && header[3] <= 4) { - return true; - } - - return false; -} - -function getFontFileType(file, { - type, - subtype, - composite -}) { - let fileType, fileSubtype; - - if (isTrueTypeFile(file) || isTrueTypeCollectionFile(file)) { - if (composite) { - fileType = "CIDFontType2"; - } else { - fileType = "TrueType"; - } - } else if (isOpenTypeFile(file)) { - if (composite) { - fileType = "CIDFontType2"; - } else { - fileType = "OpenType"; - } - } else if (isType1File(file)) { - if (composite) { - fileType = "CIDFontType0"; - } else { - fileType = type === "MMType1" ? "MMType1" : "Type1"; - } - } else if (isCFFFile(file)) { - if (composite) { - fileType = "CIDFontType0"; - fileSubtype = "CIDFontType0C"; - } else { - fileType = type === "MMType1" ? "MMType1" : "Type1"; - fileSubtype = "Type1C"; - } - } else { - (0, _util.warn)("getFontFileType: Unable to detect correct font file Type/Subtype."); - fileType = type; - fileSubtype = subtype; - } - - return [fileType, fileSubtype]; -} - -function applyStandardFontGlyphMap(map, glyphMap) { - for (const charCode in glyphMap) { - map[+charCode] = glyphMap[charCode]; - } -} - -function buildToFontChar(encoding, glyphsUnicodeMap, differences) { - const toFontChar = []; - let unicode; - - for (let i = 0, ii = encoding.length; i < ii; i++) { - unicode = (0, _unicode.getUnicodeForGlyph)(encoding[i], glyphsUnicodeMap); - - if (unicode !== -1) { - toFontChar[i] = unicode; - } - } - - for (const charCode in differences) { - unicode = (0, _unicode.getUnicodeForGlyph)(differences[charCode], glyphsUnicodeMap); - - if (unicode !== -1) { - toFontChar[+charCode] = unicode; - } - } - - return toFontChar; -} - -function convertCidString(charCode, cid, shouldThrow = false) { - switch (cid.length) { - case 1: - return cid.charCodeAt(0); - - case 2: - return cid.charCodeAt(0) << 8 | cid.charCodeAt(1); - } - - const msg = `Unsupported CID string (charCode ${charCode}): "${cid}".`; - - if (shouldThrow) { - throw new _util.FormatError(msg); - } - - (0, _util.warn)(msg); - return cid; -} - -function adjustMapping(charCodeToGlyphId, hasGlyph, newGlyphZeroId) { - const newMap = Object.create(null); - const toFontChar = []; - let privateUseAreaIndex = 0; - let nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0]; - let privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1]; - - for (let originalCharCode in charCodeToGlyphId) { - originalCharCode |= 0; - let glyphId = charCodeToGlyphId[originalCharCode]; - - if (!hasGlyph(glyphId)) { - continue; - } - - if (nextAvailableFontCharCode > privateUseOffetEnd) { - privateUseAreaIndex++; - - if (privateUseAreaIndex >= PRIVATE_USE_AREAS.length) { - (0, _util.warn)("Ran out of space in font private use area."); - break; - } - - nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0]; - privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1]; - } - - const fontCharCode = nextAvailableFontCharCode++; - - if (glyphId === 0) { - glyphId = newGlyphZeroId; - } - - newMap[fontCharCode] = glyphId; - toFontChar[originalCharCode] = fontCharCode; - } - - return { - toFontChar, - charCodeToGlyphId: newMap, - nextAvailableFontCharCode - }; -} - -function getRanges(glyphs, numGlyphs) { - const codes = []; - - for (const charCode in glyphs) { - if (glyphs[charCode] >= numGlyphs) { - continue; - } - - codes.push({ - fontCharCode: charCode | 0, - glyphId: glyphs[charCode] - }); - } - - if (codes.length === 0) { - codes.push({ - fontCharCode: 0, - glyphId: 0 - }); - } - - codes.sort(function fontGetRangesSort(a, b) { - return a.fontCharCode - b.fontCharCode; - }); - const ranges = []; - const length = codes.length; - - for (let n = 0; n < length;) { - const start = codes[n].fontCharCode; - const codeIndices = [codes[n].glyphId]; - ++n; - let end = start; - - while (n < length && end + 1 === codes[n].fontCharCode) { - codeIndices.push(codes[n].glyphId); - ++end; - ++n; - - if (end === 0xffff) { - break; - } - } - - ranges.push([start, end, codeIndices]); - } - - return ranges; -} - -function createCmapTable(glyphs, numGlyphs) { - const ranges = getRanges(glyphs, numGlyphs); - const numTables = ranges[ranges.length - 1][1] > 0xffff ? 2 : 1; - let cmap = "\x00\x00" + string16(numTables) + "\x00\x03" + "\x00\x01" + (0, _util.string32)(4 + numTables * 8); - let i, ii, j, jj; - - for (i = ranges.length - 1; i >= 0; --i) { - if (ranges[i][0] <= 0xffff) { - break; - } - } - - const bmpLength = i + 1; - - if (ranges[i][0] < 0xffff && ranges[i][1] === 0xffff) { - ranges[i][1] = 0xfffe; - } - - const trailingRangesCount = ranges[i][1] < 0xffff ? 1 : 0; - const segCount = bmpLength + trailingRangesCount; - - const searchParams = _opentype_file_builder.OpenTypeFileBuilder.getSearchParams(segCount, 2); - - let startCount = ""; - let endCount = ""; - let idDeltas = ""; - let idRangeOffsets = ""; - let glyphsIds = ""; - let bias = 0; - let range, start, end, codes; - - for (i = 0, ii = bmpLength; i < ii; i++) { - range = ranges[i]; - start = range[0]; - end = range[1]; - startCount += string16(start); - endCount += string16(end); - codes = range[2]; - let contiguous = true; - - for (j = 1, jj = codes.length; j < jj; ++j) { - if (codes[j] !== codes[j - 1] + 1) { - contiguous = false; - break; - } - } - - if (!contiguous) { - const offset = (segCount - i) * 2 + bias * 2; - bias += end - start + 1; - idDeltas += string16(0); - idRangeOffsets += string16(offset); - - for (j = 0, jj = codes.length; j < jj; ++j) { - glyphsIds += string16(codes[j]); - } - } else { - const startCode = codes[0]; - idDeltas += string16(startCode - start & 0xffff); - idRangeOffsets += string16(0); - } - } - - if (trailingRangesCount > 0) { - endCount += "\xFF\xFF"; - startCount += "\xFF\xFF"; - idDeltas += "\x00\x01"; - idRangeOffsets += "\x00\x00"; - } - - const format314 = "\x00\x00" + string16(2 * segCount) + string16(searchParams.range) + string16(searchParams.entry) + string16(searchParams.rangeShift) + endCount + "\x00\x00" + startCount + idDeltas + idRangeOffsets + glyphsIds; - let format31012 = ""; - let header31012 = ""; - - if (numTables > 1) { - cmap += "\x00\x03" + "\x00\x0A" + (0, _util.string32)(4 + numTables * 8 + 4 + format314.length); - format31012 = ""; - - for (i = 0, ii = ranges.length; i < ii; i++) { - range = ranges[i]; - start = range[0]; - codes = range[2]; - let code = codes[0]; - - for (j = 1, jj = codes.length; j < jj; ++j) { - if (codes[j] !== codes[j - 1] + 1) { - end = range[0] + j - 1; - format31012 += (0, _util.string32)(start) + (0, _util.string32)(end) + (0, _util.string32)(code); - start = end + 1; - code = codes[j]; - } - } - - format31012 += (0, _util.string32)(start) + (0, _util.string32)(range[1]) + (0, _util.string32)(code); - } - - header31012 = "\x00\x0C" + "\x00\x00" + (0, _util.string32)(format31012.length + 16) + "\x00\x00\x00\x00" + (0, _util.string32)(format31012.length / 12); - } - - return cmap + "\x00\x04" + string16(format314.length + 4) + format314 + header31012 + format31012; -} - -function validateOS2Table(os2, file) { - file.pos = (file.start || 0) + os2.offset; - const version = file.getUint16(); - file.skip(60); - const selection = file.getUint16(); - - if (version < 4 && selection & 0x0300) { - return false; - } - - const firstChar = file.getUint16(); - const lastChar = file.getUint16(); - - if (firstChar > lastChar) { - return false; - } - - file.skip(6); - const usWinAscent = file.getUint16(); - - if (usWinAscent === 0) { - return false; - } - - os2.data[8] = os2.data[9] = 0; - return true; -} - -function createOS2Table(properties, charstrings, override) { - override = override || { - unitsPerEm: 0, - yMax: 0, - yMin: 0, - ascent: 0, - descent: 0 - }; - let ulUnicodeRange1 = 0; - let ulUnicodeRange2 = 0; - let ulUnicodeRange3 = 0; - let ulUnicodeRange4 = 0; - let firstCharIndex = null; - let lastCharIndex = 0; - - if (charstrings) { - for (let code in charstrings) { - code |= 0; - - if (firstCharIndex > code || !firstCharIndex) { - firstCharIndex = code; - } - - if (lastCharIndex < code) { - lastCharIndex = code; - } - - const position = (0, _unicode.getUnicodeRangeFor)(code); - - if (position < 32) { - ulUnicodeRange1 |= 1 << position; - } else if (position < 64) { - ulUnicodeRange2 |= 1 << position - 32; - } else if (position < 96) { - ulUnicodeRange3 |= 1 << position - 64; - } else if (position < 123) { - ulUnicodeRange4 |= 1 << position - 96; - } else { - throw new _util.FormatError("Unicode ranges Bits > 123 are reserved for internal usage"); - } - } - - if (lastCharIndex > 0xffff) { - lastCharIndex = 0xffff; - } - } else { - firstCharIndex = 0; - lastCharIndex = 255; - } - - const bbox = properties.bbox || [0, 0, 0, 0]; - const unitsPerEm = override.unitsPerEm || 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0]; - const scale = properties.ascentScaled ? 1.0 : unitsPerEm / PDF_GLYPH_SPACE_UNITS; - const typoAscent = override.ascent || Math.round(scale * (properties.ascent || bbox[3])); - let typoDescent = override.descent || Math.round(scale * (properties.descent || bbox[1])); - - if (typoDescent > 0 && properties.descent > 0 && bbox[1] < 0) { - typoDescent = -typoDescent; - } - - const winAscent = override.yMax || typoAscent; - const winDescent = -override.yMin || -typoDescent; - return "\x00\x03" + "\x02\x24" + "\x01\xF4" + "\x00\x05" + "\x00\x00" + "\x02\x8A" + "\x02\xBB" + "\x00\x00" + "\x00\x8C" + "\x02\x8A" + "\x02\xBB" + "\x00\x00" + "\x01\xDF" + "\x00\x31" + "\x01\x02" + "\x00\x00" + "\x00\x00\x06" + String.fromCharCode(properties.fixedPitch ? 0x09 : 0x00) + "\x00\x00\x00\x00\x00\x00" + (0, _util.string32)(ulUnicodeRange1) + (0, _util.string32)(ulUnicodeRange2) + (0, _util.string32)(ulUnicodeRange3) + (0, _util.string32)(ulUnicodeRange4) + "\x2A\x32\x31\x2A" + string16(properties.italicAngle ? 1 : 0) + string16(firstCharIndex || properties.firstChar) + string16(lastCharIndex || properties.lastChar) + string16(typoAscent) + string16(typoDescent) + "\x00\x64" + string16(winAscent) + string16(winDescent) + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + string16(properties.xHeight) + string16(properties.capHeight) + string16(0) + string16(firstCharIndex || properties.firstChar) + "\x00\x03"; -} - -function createPostTable(properties) { - const angle = Math.floor(properties.italicAngle * 2 ** 16); - return "\x00\x03\x00\x00" + (0, _util.string32)(angle) + "\x00\x00" + "\x00\x00" + (0, _util.string32)(properties.fixedPitch ? 1 : 0) + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + "\x00\x00\x00\x00"; -} - -function createPostscriptName(name) { - return name.replace(/[^\x21-\x7E]|[[\](){}<>/%]/g, "").slice(0, 63); -} - -function createNameTable(name, proto) { - if (!proto) { - proto = [[], []]; - } - - const strings = [proto[0][0] || "Original licence", proto[0][1] || name, proto[0][2] || "Unknown", proto[0][3] || "uniqueID", proto[0][4] || name, proto[0][5] || "Version 0.11", proto[0][6] || createPostscriptName(name), proto[0][7] || "Unknown", proto[0][8] || "Unknown", proto[0][9] || "Unknown"]; - const stringsUnicode = []; - let i, ii, j, jj, str; - - for (i = 0, ii = strings.length; i < ii; i++) { - str = proto[1][i] || strings[i]; - const strBufUnicode = []; - - for (j = 0, jj = str.length; j < jj; j++) { - strBufUnicode.push(string16(str.charCodeAt(j))); - } - - stringsUnicode.push(strBufUnicode.join("")); - } - - const names = [strings, stringsUnicode]; - const platforms = ["\x00\x01", "\x00\x03"]; - const encodings = ["\x00\x00", "\x00\x01"]; - const languages = ["\x00\x00", "\x04\x09"]; - const namesRecordCount = strings.length * platforms.length; - let nameTable = "\x00\x00" + string16(namesRecordCount) + string16(namesRecordCount * 12 + 6); - let strOffset = 0; - - for (i = 0, ii = platforms.length; i < ii; i++) { - const strs = names[i]; - - for (j = 0, jj = strs.length; j < jj; j++) { - str = strs[j]; - const nameRecord = platforms[i] + encodings[i] + languages[i] + string16(j) + string16(str.length) + string16(strOffset); - nameTable += nameRecord; - strOffset += str.length; - } - } - - nameTable += strings.join("") + stringsUnicode.join(""); - return nameTable; -} - -class Font { - constructor(name, file, properties) { - this.name = name; - this.psName = null; - this.mimetype = null; - this.disableFontFace = false; - this.loadedName = properties.loadedName; - this.isType3Font = properties.isType3Font; - this.missingFile = false; - this.cssFontInfo = properties.cssFontInfo; - this._charsCache = Object.create(null); - this._glyphCache = Object.create(null); - let isSerifFont = !!(properties.flags & _fonts_utils.FontFlags.Serif); - - if (!isSerifFont && !properties.isSimulatedFlags) { - const baseName = name.replace(/[,_]/g, "-").split("-")[0], - serifFonts = (0, _standard_fonts.getSerifFonts)(); - - for (const namePart of baseName.split("+")) { - if (serifFonts[namePart]) { - isSerifFont = true; - break; - } - } - } - - this.isSerifFont = isSerifFont; - this.isSymbolicFont = !!(properties.flags & _fonts_utils.FontFlags.Symbolic); - this.isMonospace = !!(properties.flags & _fonts_utils.FontFlags.FixedPitch); - let type = properties.type; - let subtype = properties.subtype; - this.type = type; - this.subtype = subtype; - let fallbackName = "sans-serif"; - - if (this.isMonospace) { - fallbackName = "monospace"; - } else if (this.isSerifFont) { - fallbackName = "serif"; - } - - this.fallbackName = fallbackName; - this.differences = properties.differences; - this.widths = properties.widths; - this.defaultWidth = properties.defaultWidth; - this.composite = properties.composite; - this.cMap = properties.cMap; - this.capHeight = properties.capHeight / PDF_GLYPH_SPACE_UNITS; - this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS; - this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS; - this.lineHeight = this.ascent - this.descent; - this.fontMatrix = properties.fontMatrix; - this.bbox = properties.bbox; - this.defaultEncoding = properties.defaultEncoding; - this.toUnicode = properties.toUnicode; - this.toFontChar = []; - - if (properties.type === "Type3") { - for (let charCode = 0; charCode < 256; charCode++) { - this.toFontChar[charCode] = this.differences[charCode] || properties.defaultEncoding[charCode]; - } - - this.fontType = _util.FontType.TYPE3; - return; - } - - this.cidEncoding = properties.cidEncoding || ""; - this.vertical = !!properties.vertical; - - if (this.vertical) { - this.vmetrics = properties.vmetrics; - this.defaultVMetrics = properties.defaultVMetrics; - } - - if (!file || file.isEmpty) { - if (file) { - (0, _util.warn)('Font file is empty in "' + name + '" (' + this.loadedName + ")"); - } - - this.fallbackToSystemFont(properties); - return; - } - - [type, subtype] = getFontFileType(file, properties); - - if (type !== this.type || subtype !== this.subtype) { - (0, _util.info)("Inconsistent font file Type/SubType, expected: " + `${this.type}/${this.subtype} but found: ${type}/${subtype}.`); - } - - let data; - - try { - switch (type) { - case "MMType1": - (0, _util.info)("MMType1 font (" + name + "), falling back to Type1."); - - case "Type1": - case "CIDFontType0": - this.mimetype = "font/opentype"; - const cff = subtype === "Type1C" || subtype === "CIDFontType0C" ? new _cff_font.CFFFont(file, properties) : new _type1_font.Type1Font(name, file, properties); - adjustWidths(properties); - data = this.convert(name, cff, properties); - break; - - case "OpenType": - case "TrueType": - case "CIDFontType2": - this.mimetype = "font/opentype"; - data = this.checkAndRepair(name, file, properties); - - if (this.isOpenType) { - adjustWidths(properties); - type = "OpenType"; - } - - break; - - default: - throw new _util.FormatError(`Font ${type} is not supported`); - } - } catch (e) { - (0, _util.warn)(e); - this.fallbackToSystemFont(properties); - return; - } - - amendFallbackToUnicode(properties); - this.data = data; - this.fontType = (0, _fonts_utils.getFontType)(type, subtype, properties.isStandardFont); - this.fontMatrix = properties.fontMatrix; - this.widths = properties.widths; - this.defaultWidth = properties.defaultWidth; - this.toUnicode = properties.toUnicode; - this.seacMap = properties.seacMap; - } - - get renderer() { - const renderer = _font_renderer.FontRendererFactory.create(this, _fonts_utils.SEAC_ANALYSIS_ENABLED); - - return (0, _util.shadow)(this, "renderer", renderer); - } - - exportData(extraProperties = false) { - const exportDataProperties = extraProperties ? [...EXPORT_DATA_PROPERTIES, ...EXPORT_DATA_EXTRA_PROPERTIES] : EXPORT_DATA_PROPERTIES; - const data = Object.create(null); - let property, value; - - for (property of exportDataProperties) { - value = this[property]; - - if (value !== undefined) { - data[property] = value; - } - } - - return data; - } - - fallbackToSystemFont(properties) { - this.missingFile = true; - const name = this.name; - const type = this.type; - const subtype = this.subtype; - let fontName = (0, _fonts_utils.normalizeFontName)(name); - const stdFontMap = (0, _standard_fonts.getStdFontMap)(), - nonStdFontMap = (0, _standard_fonts.getNonStdFontMap)(); - const isStandardFont = !!stdFontMap[fontName]; - const isMappedToStandardFont = !!(nonStdFontMap[fontName] && stdFontMap[nonStdFontMap[fontName]]); - fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName; - this.bold = fontName.search(/bold/gi) !== -1; - this.italic = fontName.search(/oblique/gi) !== -1 || fontName.search(/italic/gi) !== -1; - this.black = name.search(/Black/g) !== -1; - const isNarrow = name.search(/Narrow/g) !== -1; - this.remeasure = (!isStandardFont || isNarrow) && Object.keys(this.widths).length > 0; - - if ((isStandardFont || isMappedToStandardFont) && type === "CIDFontType2" && this.cidEncoding.startsWith("Identity-")) { - const cidToGidMap = properties.cidToGidMap; - const map = []; - applyStandardFontGlyphMap(map, (0, _standard_fonts.getGlyphMapForStandardFonts)()); - - if (/Arial-?Black/i.test(name)) { - applyStandardFontGlyphMap(map, (0, _standard_fonts.getSupplementalGlyphMapForArialBlack)()); - } else if (/Calibri/i.test(name)) { - applyStandardFontGlyphMap(map, (0, _standard_fonts.getSupplementalGlyphMapForCalibri)()); - } - - if (cidToGidMap) { - for (const charCode in map) { - const cid = map[charCode]; - - if (cidToGidMap[cid] !== undefined) { - map[+charCode] = cidToGidMap[cid]; - } - } - - if (cidToGidMap.length !== this.toUnicode.length && properties.hasIncludedToUnicodeMap && this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) { - this.toUnicode.forEach(function (charCode, unicodeCharCode) { - const cid = map[charCode]; - - if (cidToGidMap[cid] === undefined) { - map[+charCode] = unicodeCharCode; - } - }); - } - } - - if (!(this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap)) { - this.toUnicode.forEach(function (charCode, unicodeCharCode) { - map[+charCode] = unicodeCharCode; - }); - } - - this.toFontChar = map; - this.toUnicode = new _to_unicode_map.ToUnicodeMap(map); - } else if (/Symbol/i.test(fontName)) { - this.toFontChar = buildToFontChar(_encodings.SymbolSetEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences); - } else if (/Dingbats/i.test(fontName)) { - if (/Wingdings/i.test(name)) { - (0, _util.warn)("Non-embedded Wingdings font, falling back to ZapfDingbats."); - } - - this.toFontChar = buildToFontChar(_encodings.ZapfDingbatsEncoding, (0, _glyphlist.getDingbatsGlyphsUnicode)(), this.differences); - } else if (isStandardFont) { - const map = buildToFontChar(this.defaultEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences); - - if (type === "CIDFontType2" && !this.cidEncoding.startsWith("Identity-") && !(this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap)) { - this.toUnicode.forEach(function (charCode, unicodeCharCode) { - map[+charCode] = unicodeCharCode; - }); - } - - this.toFontChar = map; - } else { - const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); - const map = []; - this.toUnicode.forEach((charCode, unicodeCharCode) => { - if (!this.composite) { - const glyphName = this.differences[charCode] || this.defaultEncoding[charCode]; - const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap); - - if (unicode !== -1) { - unicodeCharCode = unicode; - } - } - - map[+charCode] = unicodeCharCode; - }); - - if (this.composite && this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) { - if (/Verdana/i.test(name)) { - applyStandardFontGlyphMap(map, (0, _standard_fonts.getGlyphMapForStandardFonts)()); - } - } - - this.toFontChar = map; - } - - amendFallbackToUnicode(properties); - this.loadedName = fontName.split("-")[0]; - this.fontType = (0, _fonts_utils.getFontType)(type, subtype, properties.isStandardFont); - } - - checkAndRepair(name, font, properties) { - const VALID_TABLES = ["OS/2", "cmap", "head", "hhea", "hmtx", "maxp", "name", "post", "loca", "glyf", "fpgm", "prep", "cvt ", "CFF "]; - - function readTables(file, numTables) { - const tables = Object.create(null); - tables["OS/2"] = null; - tables.cmap = null; - tables.head = null; - tables.hhea = null; - tables.hmtx = null; - tables.maxp = null; - tables.name = null; - tables.post = null; - - for (let i = 0; i < numTables; i++) { - const table = readTableEntry(file); - - if (!VALID_TABLES.includes(table.tag)) { - continue; - } - - if (table.length === 0) { - continue; - } - - tables[table.tag] = table; - } - - return tables; - } - - function readTableEntry(file) { - const tag = file.getString(4); - const checksum = file.getInt32() >>> 0; - const offset = file.getInt32() >>> 0; - const length = file.getInt32() >>> 0; - const previousPosition = file.pos; - file.pos = file.start ? file.start : 0; - file.skip(offset); - const data = file.getBytes(length); - file.pos = previousPosition; - - if (tag === "head") { - data[8] = data[9] = data[10] = data[11] = 0; - data[17] |= 0x20; - } - - return { - tag, - checksum, - length, - offset, - data - }; - } - - function readOpenTypeHeader(ttf) { - return { - version: ttf.getString(4), - numTables: ttf.getUint16(), - searchRange: ttf.getUint16(), - entrySelector: ttf.getUint16(), - rangeShift: ttf.getUint16() - }; - } - - function readTrueTypeCollectionHeader(ttc) { - const ttcTag = ttc.getString(4); - (0, _util.assert)(ttcTag === "ttcf", "Must be a TrueType Collection font."); - const majorVersion = ttc.getUint16(); - const minorVersion = ttc.getUint16(); - const numFonts = ttc.getInt32() >>> 0; - const offsetTable = []; - - for (let i = 0; i < numFonts; i++) { - offsetTable.push(ttc.getInt32() >>> 0); - } - - const header = { - ttcTag, - majorVersion, - minorVersion, - numFonts, - offsetTable - }; - - switch (majorVersion) { - case 1: - return header; - - case 2: - header.dsigTag = ttc.getInt32() >>> 0; - header.dsigLength = ttc.getInt32() >>> 0; - header.dsigOffset = ttc.getInt32() >>> 0; - return header; - } - - throw new _util.FormatError(`Invalid TrueType Collection majorVersion: ${majorVersion}.`); - } - - function readTrueTypeCollectionData(ttc, fontName) { - const { - numFonts, - offsetTable - } = readTrueTypeCollectionHeader(ttc); - const fontNameParts = fontName.split("+"); - let fallbackData; - - for (let i = 0; i < numFonts; i++) { - ttc.pos = (ttc.start || 0) + offsetTable[i]; - const potentialHeader = readOpenTypeHeader(ttc); - const potentialTables = readTables(ttc, potentialHeader.numTables); - - if (!potentialTables.name) { - throw new _util.FormatError('TrueType Collection font must contain a "name" table.'); - } - - const nameTable = readNameTable(potentialTables.name); - - for (let j = 0, jj = nameTable.length; j < jj; j++) { - for (let k = 0, kk = nameTable[j].length; k < kk; k++) { - const nameEntry = nameTable[j][k] && nameTable[j][k].replace(/\s/g, ""); - - if (!nameEntry) { - continue; - } - - if (nameEntry === fontName) { - return { - header: potentialHeader, - tables: potentialTables - }; - } - - if (fontNameParts.length < 2) { - continue; - } - - for (const part of fontNameParts) { - if (nameEntry === part) { - fallbackData = { - name: part, - header: potentialHeader, - tables: potentialTables - }; - } - } - } - } - } - - if (fallbackData) { - (0, _util.warn)(`TrueType Collection does not contain "${fontName}" font, ` + `falling back to "${fallbackData.name}" font instead.`); - return { - header: fallbackData.header, - tables: fallbackData.tables - }; - } - - throw new _util.FormatError(`TrueType Collection does not contain "${fontName}" font.`); - } - - function readCmapTable(cmap, file, isSymbolicFont, hasEncoding) { - if (!cmap) { - (0, _util.warn)("No cmap table available."); - return { - platformId: -1, - encodingId: -1, - mappings: [], - hasShortCmap: false - }; - } - - let segment; - let start = (file.start ? file.start : 0) + cmap.offset; - file.pos = start; - file.skip(2); - const numTables = file.getUint16(); - let potentialTable; - let canBreak = false; - - for (let i = 0; i < numTables; i++) { - const platformId = file.getUint16(); - const encodingId = file.getUint16(); - const offset = file.getInt32() >>> 0; - let useTable = false; - - if (potentialTable && potentialTable.platformId === platformId && potentialTable.encodingId === encodingId) { - continue; - } - - if (platformId === 0 && (encodingId === 0 || encodingId === 1 || encodingId === 3)) { - useTable = true; - } else if (platformId === 1 && encodingId === 0) { - useTable = true; - } else if (platformId === 3 && encodingId === 1 && (hasEncoding || !potentialTable)) { - useTable = true; - - if (!isSymbolicFont) { - canBreak = true; - } - } else if (isSymbolicFont && platformId === 3 && encodingId === 0) { - useTable = true; - let correctlySorted = true; - - if (i < numTables - 1) { - const nextBytes = file.peekBytes(2), - nextPlatformId = int16(nextBytes[0], nextBytes[1]); - - if (nextPlatformId < platformId) { - correctlySorted = false; - } - } - - if (correctlySorted) { - canBreak = true; - } - } - - if (useTable) { - potentialTable = { - platformId, - encodingId, - offset - }; - } - - if (canBreak) { - break; - } - } - - if (potentialTable) { - file.pos = start + potentialTable.offset; - } - - if (!potentialTable || file.peekByte() === -1) { - (0, _util.warn)("Could not find a preferred cmap table."); - return { - platformId: -1, - encodingId: -1, - mappings: [], - hasShortCmap: false - }; - } - - const format = file.getUint16(); - file.skip(2 + 2); - let hasShortCmap = false; - const mappings = []; - let j, glyphId; - - if (format === 0) { - for (j = 0; j < 256; j++) { - const index = file.getByte(); - - if (!index) { - continue; - } - - mappings.push({ - charCode: j, - glyphId: index - }); - } - - hasShortCmap = true; - } else if (format === 2) { - const subHeaderKeys = []; - let maxSubHeaderKey = 0; - - for (let i = 0; i < 256; i++) { - const subHeaderKey = file.getUint16() >> 3; - subHeaderKeys.push(subHeaderKey); - maxSubHeaderKey = Math.max(subHeaderKey, maxSubHeaderKey); - } - - const subHeaders = []; - - for (let i = 0; i <= maxSubHeaderKey; i++) { - subHeaders.push({ - firstCode: file.getUint16(), - entryCount: file.getUint16(), - idDelta: signedInt16(file.getByte(), file.getByte()), - idRangePos: file.pos + file.getUint16() - }); - } - - for (let i = 0; i < 256; i++) { - if (subHeaderKeys[i] === 0) { - file.pos = subHeaders[0].idRangePos + 2 * i; - glyphId = file.getUint16(); - mappings.push({ - charCode: i, - glyphId - }); - } else { - const s = subHeaders[subHeaderKeys[i]]; - - for (j = 0; j < s.entryCount; j++) { - const charCode = (i << 8) + j + s.firstCode; - file.pos = s.idRangePos + 2 * j; - glyphId = file.getUint16(); - - if (glyphId !== 0) { - glyphId = (glyphId + s.idDelta) % 65536; - } - - mappings.push({ - charCode, - glyphId - }); - } - } - } - } else if (format === 4) { - const segCount = file.getUint16() >> 1; - file.skip(6); - const segments = []; - let segIndex; - - for (segIndex = 0; segIndex < segCount; segIndex++) { - segments.push({ - end: file.getUint16() - }); - } - - file.skip(2); - - for (segIndex = 0; segIndex < segCount; segIndex++) { - segments[segIndex].start = file.getUint16(); - } - - for (segIndex = 0; segIndex < segCount; segIndex++) { - segments[segIndex].delta = file.getUint16(); - } - - let offsetsCount = 0, - offsetIndex; - - for (segIndex = 0; segIndex < segCount; segIndex++) { - segment = segments[segIndex]; - const rangeOffset = file.getUint16(); - - if (!rangeOffset) { - segment.offsetIndex = -1; - continue; - } - - offsetIndex = (rangeOffset >> 1) - (segCount - segIndex); - segment.offsetIndex = offsetIndex; - offsetsCount = Math.max(offsetsCount, offsetIndex + segment.end - segment.start + 1); - } - - const offsets = []; - - for (j = 0; j < offsetsCount; j++) { - offsets.push(file.getUint16()); - } - - for (segIndex = 0; segIndex < segCount; segIndex++) { - segment = segments[segIndex]; - start = segment.start; - const end = segment.end; - const delta = segment.delta; - offsetIndex = segment.offsetIndex; - - for (j = start; j <= end; j++) { - if (j === 0xffff) { - continue; - } - - glyphId = offsetIndex < 0 ? j : offsets[offsetIndex + j - start]; - glyphId = glyphId + delta & 0xffff; - mappings.push({ - charCode: j, - glyphId - }); - } - } - } else if (format === 6) { - const firstCode = file.getUint16(); - const entryCount = file.getUint16(); - - for (j = 0; j < entryCount; j++) { - glyphId = file.getUint16(); - const charCode = firstCode + j; - mappings.push({ - charCode, - glyphId - }); - } - } else { - (0, _util.warn)("cmap table has unsupported format: " + format); - return { - platformId: -1, - encodingId: -1, - mappings: [], - hasShortCmap: false - }; - } - - mappings.sort(function (a, b) { - return a.charCode - b.charCode; - }); - - for (let i = 1; i < mappings.length; i++) { - if (mappings[i - 1].charCode === mappings[i].charCode) { - mappings.splice(i, 1); - i--; - } - } - - return { - platformId: potentialTable.platformId, - encodingId: potentialTable.encodingId, - mappings, - hasShortCmap - }; - } - - function sanitizeMetrics(file, header, metrics, headTable, numGlyphs, dupFirstEntry) { - if (!header) { - if (metrics) { - metrics.data = null; - } - - return; - } - - file.pos = (file.start ? file.start : 0) + header.offset; - file.pos += 4; - file.pos += 2; - file.pos += 2; - file.pos += 2; - file.pos += 2; - file.pos += 2; - file.pos += 2; - file.pos += 2; - file.pos += 2; - file.pos += 2; - const caretOffset = file.getUint16(); - file.pos += 8; - file.pos += 2; - let numOfMetrics = file.getUint16(); - - if (caretOffset !== 0) { - const macStyle = int16(headTable.data[44], headTable.data[45]); - - if (!(macStyle & 2)) { - header.data[22] = 0; - header.data[23] = 0; - } - } - - if (numOfMetrics > numGlyphs) { - (0, _util.info)(`The numOfMetrics (${numOfMetrics}) should not be ` + `greater than the numGlyphs (${numGlyphs}).`); - numOfMetrics = numGlyphs; - header.data[34] = (numOfMetrics & 0xff00) >> 8; - header.data[35] = numOfMetrics & 0x00ff; - } - - const numOfSidebearings = numGlyphs - numOfMetrics; - const numMissing = numOfSidebearings - (metrics.length - numOfMetrics * 4 >> 1); - - if (numMissing > 0) { - const entries = new Uint8Array(metrics.length + numMissing * 2); - entries.set(metrics.data); - - if (dupFirstEntry) { - entries[metrics.length] = metrics.data[2]; - entries[metrics.length + 1] = metrics.data[3]; - } - - metrics.data = entries; - } - } - - function sanitizeGlyph(source, sourceStart, sourceEnd, dest, destStart, hintsValid) { - const glyphProfile = { - length: 0, - sizeOfInstructions: 0 - }; - - if (sourceEnd - sourceStart <= 12) { - return glyphProfile; - } - - const glyf = source.subarray(sourceStart, sourceEnd); - let contoursCount = signedInt16(glyf[0], glyf[1]); - - if (contoursCount < 0) { - contoursCount = -1; - writeSignedInt16(glyf, 0, contoursCount); - dest.set(glyf, destStart); - glyphProfile.length = glyf.length; - return glyphProfile; - } - - let i, - j = 10, - flagsCount = 0; - - for (i = 0; i < contoursCount; i++) { - const endPoint = glyf[j] << 8 | glyf[j + 1]; - flagsCount = endPoint + 1; - j += 2; - } - - const instructionsStart = j; - const instructionsLength = glyf[j] << 8 | glyf[j + 1]; - glyphProfile.sizeOfInstructions = instructionsLength; - j += 2 + instructionsLength; - const instructionsEnd = j; - let coordinatesLength = 0; - - for (i = 0; i < flagsCount; i++) { - const flag = glyf[j++]; - - if (flag & 0xc0) { - glyf[j - 1] = flag & 0x3f; - } - - let xLength = 2; - - if (flag & 2) { - xLength = 1; - } else if (flag & 16) { - xLength = 0; - } - - let yLength = 2; - - if (flag & 4) { - yLength = 1; - } else if (flag & 32) { - yLength = 0; - } - - const xyLength = xLength + yLength; - coordinatesLength += xyLength; - - if (flag & 8) { - const repeat = glyf[j++]; - i += repeat; - coordinatesLength += repeat * xyLength; - } - } - - if (coordinatesLength === 0) { - return glyphProfile; - } - - let glyphDataLength = j + coordinatesLength; - - if (glyphDataLength > glyf.length) { - return glyphProfile; - } - - if (!hintsValid && instructionsLength > 0) { - dest.set(glyf.subarray(0, instructionsStart), destStart); - dest.set([0, 0], destStart + instructionsStart); - dest.set(glyf.subarray(instructionsEnd, glyphDataLength), destStart + instructionsStart + 2); - glyphDataLength -= instructionsLength; - - if (glyf.length - glyphDataLength > 3) { - glyphDataLength = glyphDataLength + 3 & ~3; - } - - glyphProfile.length = glyphDataLength; - return glyphProfile; - } - - if (glyf.length - glyphDataLength > 3) { - glyphDataLength = glyphDataLength + 3 & ~3; - dest.set(glyf.subarray(0, glyphDataLength), destStart); - glyphProfile.length = glyphDataLength; - return glyphProfile; - } - - dest.set(glyf, destStart); - glyphProfile.length = glyf.length; - return glyphProfile; - } - - function sanitizeHead(head, numGlyphs, locaLength) { - const data = head.data; - const version = int32(data[0], data[1], data[2], data[3]); - - if (version >> 16 !== 1) { - (0, _util.info)("Attempting to fix invalid version in head table: " + version); - data[0] = 0; - data[1] = 1; - data[2] = 0; - data[3] = 0; - } - - const indexToLocFormat = int16(data[50], data[51]); - - if (indexToLocFormat < 0 || indexToLocFormat > 1) { - (0, _util.info)("Attempting to fix invalid indexToLocFormat in head table: " + indexToLocFormat); - const numGlyphsPlusOne = numGlyphs + 1; - - if (locaLength === numGlyphsPlusOne << 1) { - data[50] = 0; - data[51] = 0; - } else if (locaLength === numGlyphsPlusOne << 2) { - data[50] = 0; - data[51] = 1; - } else { - throw new _util.FormatError("Could not fix indexToLocFormat: " + indexToLocFormat); - } - } - } - - function sanitizeGlyphLocations(loca, glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions) { - let itemSize, itemDecode, itemEncode; - - if (isGlyphLocationsLong) { - itemSize = 4; - - itemDecode = function fontItemDecodeLong(data, offset) { - return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]; - }; - - itemEncode = function fontItemEncodeLong(data, offset, value) { - data[offset] = value >>> 24 & 0xff; - data[offset + 1] = value >> 16 & 0xff; - data[offset + 2] = value >> 8 & 0xff; - data[offset + 3] = value & 0xff; - }; - } else { - itemSize = 2; - - itemDecode = function fontItemDecode(data, offset) { - return data[offset] << 9 | data[offset + 1] << 1; - }; - - itemEncode = function fontItemEncode(data, offset, value) { - data[offset] = value >> 9 & 0xff; - data[offset + 1] = value >> 1 & 0xff; - }; - } - - const numGlyphsOut = dupFirstEntry ? numGlyphs + 1 : numGlyphs; - const locaDataSize = itemSize * (1 + numGlyphsOut); - const locaData = new Uint8Array(locaDataSize); - locaData.set(loca.data.subarray(0, locaDataSize)); - loca.data = locaData; - const oldGlyfData = glyf.data; - const oldGlyfDataLength = oldGlyfData.length; - const newGlyfData = new Uint8Array(oldGlyfDataLength); - let i, j; - const locaEntries = []; - - for (i = 0, j = 0; i < numGlyphs + 1; i++, j += itemSize) { - let offset = itemDecode(locaData, j); - - if (offset > oldGlyfDataLength) { - offset = oldGlyfDataLength; - } - - locaEntries.push({ - index: i, - offset, - endOffset: 0 - }); - } - - locaEntries.sort((a, b) => { - return a.offset - b.offset; - }); - - for (i = 0; i < numGlyphs; i++) { - locaEntries[i].endOffset = locaEntries[i + 1].offset; - } - - locaEntries.sort((a, b) => { - return a.index - b.index; - }); - const missingGlyphs = Object.create(null); - let writeOffset = 0; - itemEncode(locaData, 0, writeOffset); - - for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) { - const glyphProfile = sanitizeGlyph(oldGlyfData, locaEntries[i].offset, locaEntries[i].endOffset, newGlyfData, writeOffset, hintsValid); - const newLength = glyphProfile.length; - - if (newLength === 0) { - missingGlyphs[i] = true; - } - - if (glyphProfile.sizeOfInstructions > maxSizeOfInstructions) { - maxSizeOfInstructions = glyphProfile.sizeOfInstructions; - } - - writeOffset += newLength; - itemEncode(locaData, j, writeOffset); - } - - if (writeOffset === 0) { - const simpleGlyph = new Uint8Array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0]); - - for (i = 0, j = itemSize; i < numGlyphsOut; i++, j += itemSize) { - itemEncode(locaData, j, simpleGlyph.length); - } - - glyf.data = simpleGlyph; - } else if (dupFirstEntry) { - const firstEntryLength = itemDecode(locaData, itemSize); - - if (newGlyfData.length > firstEntryLength + writeOffset) { - glyf.data = newGlyfData.subarray(0, firstEntryLength + writeOffset); - } else { - glyf.data = new Uint8Array(firstEntryLength + writeOffset); - glyf.data.set(newGlyfData.subarray(0, writeOffset)); - } - - glyf.data.set(newGlyfData.subarray(0, firstEntryLength), writeOffset); - itemEncode(loca.data, locaData.length - itemSize, writeOffset + firstEntryLength); - } else { - glyf.data = newGlyfData.subarray(0, writeOffset); - } - - return { - missingGlyphs, - maxSizeOfInstructions - }; - } - - function readPostScriptTable(post, propertiesObj, maxpNumGlyphs) { - const start = (font.start ? font.start : 0) + post.offset; - font.pos = start; - const length = post.length, - end = start + length; - const version = font.getInt32(); - font.skip(28); - let glyphNames; - let valid = true; - let i; - - switch (version) { - case 0x00010000: - glyphNames = _fonts_utils.MacStandardGlyphOrdering; - break; - - case 0x00020000: - const numGlyphs = font.getUint16(); - - if (numGlyphs !== maxpNumGlyphs) { - valid = false; - break; - } - - const glyphNameIndexes = []; - - for (i = 0; i < numGlyphs; ++i) { - const index = font.getUint16(); - - if (index >= 32768) { - valid = false; - break; - } - - glyphNameIndexes.push(index); - } - - if (!valid) { - break; - } - - const customNames = [], - strBuf = []; - - while (font.pos < end) { - const stringLength = font.getByte(); - strBuf.length = stringLength; - - for (i = 0; i < stringLength; ++i) { - strBuf[i] = String.fromCharCode(font.getByte()); - } - - customNames.push(strBuf.join("")); - } - - glyphNames = []; - - for (i = 0; i < numGlyphs; ++i) { - const j = glyphNameIndexes[i]; - - if (j < 258) { - glyphNames.push(_fonts_utils.MacStandardGlyphOrdering[j]); - continue; - } - - glyphNames.push(customNames[j - 258]); - } - - break; - - case 0x00030000: - break; - - default: - (0, _util.warn)("Unknown/unsupported post table version " + version); - valid = false; - - if (propertiesObj.defaultEncoding) { - glyphNames = propertiesObj.defaultEncoding; - } - - break; - } - - propertiesObj.glyphNames = glyphNames; - return valid; - } - - function readNameTable(nameTable) { - const start = (font.start ? font.start : 0) + nameTable.offset; - font.pos = start; - const names = [[], []]; - const length = nameTable.length, - end = start + length; - const format = font.getUint16(); - const FORMAT_0_HEADER_LENGTH = 6; - - if (format !== 0 || length < FORMAT_0_HEADER_LENGTH) { - return names; - } - - const numRecords = font.getUint16(); - const stringsStart = font.getUint16(); - const records = []; - const NAME_RECORD_LENGTH = 12; - let i, ii; - - for (i = 0; i < numRecords && font.pos + NAME_RECORD_LENGTH <= end; i++) { - const r = { - platform: font.getUint16(), - encoding: font.getUint16(), - language: font.getUint16(), - name: font.getUint16(), - length: font.getUint16(), - offset: font.getUint16() - }; - - if (r.platform === 1 && r.encoding === 0 && r.language === 0 || r.platform === 3 && r.encoding === 1 && r.language === 0x409) { - records.push(r); - } - } - - for (i = 0, ii = records.length; i < ii; i++) { - const record = records[i]; - - if (record.length <= 0) { - continue; - } - - const pos = start + stringsStart + record.offset; - - if (pos + record.length > end) { - continue; - } - - font.pos = pos; - const nameIndex = record.name; - - if (record.encoding) { - let str = ""; - - for (let j = 0, jj = record.length; j < jj; j += 2) { - str += String.fromCharCode(font.getUint16()); - } - - names[1][nameIndex] = str; - } else { - names[0][nameIndex] = font.getString(record.length); - } - } - - return names; - } - - const TTOpsStackDeltas = [0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, -2, 0, 0, -2, -5, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, -1, -1, 1, -1, -999, 0, 1, 0, -1, -2, 0, -1, -2, -1, -1, 0, -1, -1, 0, 0, -999, -999, -1, -1, -1, -1, -2, -999, -2, -2, -999, 0, -2, -2, 0, 0, -2, 0, -2, 0, 0, 0, -2, -1, -1, 1, 1, 0, 0, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, 0, -999, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -999, -999, -999, -999, -999, -1, -1, -2, -2, 0, 0, 0, 0, -1, -1, -999, -2, -2, 0, 0, -1, -2, -2, 0, 0, 0, -1, -1, -1, -2]; - - function sanitizeTTProgram(table, ttContext) { - let data = table.data; - let i = 0, - j, - n, - b, - funcId, - pc, - lastEndf = 0, - lastDeff = 0; - const stack = []; - const callstack = []; - const functionsCalled = []; - let tooComplexToFollowFunctions = ttContext.tooComplexToFollowFunctions; - let inFDEF = false, - ifLevel = 0, - inELSE = 0; - - for (let ii = data.length; i < ii;) { - const op = data[i++]; - - if (op === 0x40) { - n = data[i++]; - - if (inFDEF || inELSE) { - i += n; - } else { - for (j = 0; j < n; j++) { - stack.push(data[i++]); - } - } - } else if (op === 0x41) { - n = data[i++]; - - if (inFDEF || inELSE) { - i += n * 2; - } else { - for (j = 0; j < n; j++) { - b = data[i++]; - stack.push(b << 8 | data[i++]); - } - } - } else if ((op & 0xf8) === 0xb0) { - n = op - 0xb0 + 1; - - if (inFDEF || inELSE) { - i += n; - } else { - for (j = 0; j < n; j++) { - stack.push(data[i++]); - } - } - } else if ((op & 0xf8) === 0xb8) { - n = op - 0xb8 + 1; - - if (inFDEF || inELSE) { - i += n * 2; - } else { - for (j = 0; j < n; j++) { - b = data[i++]; - stack.push(b << 8 | data[i++]); - } - } - } else if (op === 0x2b && !tooComplexToFollowFunctions) { - if (!inFDEF && !inELSE) { - funcId = stack[stack.length - 1]; - - if (isNaN(funcId)) { - (0, _util.info)("TT: CALL empty stack (or invalid entry)."); - } else { - ttContext.functionsUsed[funcId] = true; - - if (funcId in ttContext.functionsStackDeltas) { - const newStackLength = stack.length + ttContext.functionsStackDeltas[funcId]; - - if (newStackLength < 0) { - (0, _util.warn)("TT: CALL invalid functions stack delta."); - ttContext.hintsValid = false; - return; - } - - stack.length = newStackLength; - } else if (funcId in ttContext.functionsDefined && !functionsCalled.includes(funcId)) { - callstack.push({ - data, - i, - stackTop: stack.length - 1 - }); - functionsCalled.push(funcId); - pc = ttContext.functionsDefined[funcId]; - - if (!pc) { - (0, _util.warn)("TT: CALL non-existent function"); - ttContext.hintsValid = false; - return; - } - - data = pc.data; - i = pc.i; - } - } - } - } else if (op === 0x2c && !tooComplexToFollowFunctions) { - if (inFDEF || inELSE) { - (0, _util.warn)("TT: nested FDEFs not allowed"); - tooComplexToFollowFunctions = true; - } - - inFDEF = true; - lastDeff = i; - funcId = stack.pop(); - ttContext.functionsDefined[funcId] = { - data, - i - }; - } else if (op === 0x2d) { - if (inFDEF) { - inFDEF = false; - lastEndf = i; - } else { - pc = callstack.pop(); - - if (!pc) { - (0, _util.warn)("TT: ENDF bad stack"); - ttContext.hintsValid = false; - return; - } - - funcId = functionsCalled.pop(); - data = pc.data; - i = pc.i; - ttContext.functionsStackDeltas[funcId] = stack.length - pc.stackTop; - } - } else if (op === 0x89) { - if (inFDEF || inELSE) { - (0, _util.warn)("TT: nested IDEFs not allowed"); - tooComplexToFollowFunctions = true; - } - - inFDEF = true; - lastDeff = i; - } else if (op === 0x58) { - ++ifLevel; - } else if (op === 0x1b) { - inELSE = ifLevel; - } else if (op === 0x59) { - if (inELSE === ifLevel) { - inELSE = 0; - } - - --ifLevel; - } else if (op === 0x1c) { - if (!inFDEF && !inELSE) { - const offset = stack[stack.length - 1]; - - if (offset > 0) { - i += offset - 1; - } - } - } - - if (!inFDEF && !inELSE) { - let stackDelta = 0; - - if (op <= 0x8e) { - stackDelta = TTOpsStackDeltas[op]; - } else if (op >= 0xc0 && op <= 0xdf) { - stackDelta = -1; - } else if (op >= 0xe0) { - stackDelta = -2; - } - - if (op >= 0x71 && op <= 0x75) { - n = stack.pop(); - - if (!isNaN(n)) { - stackDelta = -n * 2; - } - } - - while (stackDelta < 0 && stack.length > 0) { - stack.pop(); - stackDelta++; - } - - while (stackDelta > 0) { - stack.push(NaN); - stackDelta--; - } - } - } - - ttContext.tooComplexToFollowFunctions = tooComplexToFollowFunctions; - const content = [data]; - - if (i > data.length) { - content.push(new Uint8Array(i - data.length)); - } - - if (lastDeff > lastEndf) { - (0, _util.warn)("TT: complementing a missing function tail"); - content.push(new Uint8Array([0x22, 0x2d])); - } - - foldTTTable(table, content); - } - - function checkInvalidFunctions(ttContext, maxFunctionDefs) { - if (ttContext.tooComplexToFollowFunctions) { - return; - } - - if (ttContext.functionsDefined.length > maxFunctionDefs) { - (0, _util.warn)("TT: more functions defined than expected"); - ttContext.hintsValid = false; - return; - } - - for (let j = 0, jj = ttContext.functionsUsed.length; j < jj; j++) { - if (j > maxFunctionDefs) { - (0, _util.warn)("TT: invalid function id: " + j); - ttContext.hintsValid = false; - return; - } - - if (ttContext.functionsUsed[j] && !ttContext.functionsDefined[j]) { - (0, _util.warn)("TT: undefined function: " + j); - ttContext.hintsValid = false; - return; - } - } - } - - function foldTTTable(table, content) { - if (content.length > 1) { - let newLength = 0; - let j, jj; - - for (j = 0, jj = content.length; j < jj; j++) { - newLength += content[j].length; - } - - newLength = newLength + 3 & ~3; - const result = new Uint8Array(newLength); - let pos = 0; - - for (j = 0, jj = content.length; j < jj; j++) { - result.set(content[j], pos); - pos += content[j].length; - } - - table.data = result; - table.length = newLength; - } - } - - function sanitizeTTPrograms(fpgm, prep, cvt, maxFunctionDefs) { - const ttContext = { - functionsDefined: [], - functionsUsed: [], - functionsStackDeltas: [], - tooComplexToFollowFunctions: false, - hintsValid: true - }; - - if (fpgm) { - sanitizeTTProgram(fpgm, ttContext); - } - - if (prep) { - sanitizeTTProgram(prep, ttContext); - } - - if (fpgm) { - checkInvalidFunctions(ttContext, maxFunctionDefs); - } - - if (cvt && cvt.length & 1) { - const cvtData = new Uint8Array(cvt.length + 1); - cvtData.set(cvt.data); - cvt.data = cvtData; - } - - return ttContext.hintsValid; - } - - font = new _stream.Stream(new Uint8Array(font.getBytes())); - let header, tables; - - if (isTrueTypeCollectionFile(font)) { - const ttcData = readTrueTypeCollectionData(font, this.name); - header = ttcData.header; - tables = ttcData.tables; - } else { - header = readOpenTypeHeader(font); - tables = readTables(font, header.numTables); - } - - let cff, cffFile; - const isTrueType = !tables["CFF "]; - - if (!isTrueType) { - const isComposite = properties.composite && ((properties.cidToGidMap || []).length > 0 || !(properties.cMap instanceof _cmap.IdentityCMap)); - - if (header.version === "OTTO" && !isComposite || !tables.head || !tables.hhea || !tables.maxp || !tables.post) { - cffFile = new _stream.Stream(tables["CFF "].data); - cff = new _cff_font.CFFFont(cffFile, properties); - adjustWidths(properties); - return this.convert(name, cff, properties); - } - - delete tables.glyf; - delete tables.loca; - delete tables.fpgm; - delete tables.prep; - delete tables["cvt "]; - this.isOpenType = true; - } else { - if (!tables.loca) { - throw new _util.FormatError('Required "loca" table is not found'); - } - - if (!tables.glyf) { - (0, _util.warn)('Required "glyf" table is not found -- trying to recover.'); - tables.glyf = { - tag: "glyf", - data: new Uint8Array(0) - }; - } - - this.isOpenType = false; - } - - if (!tables.maxp) { - throw new _util.FormatError('Required "maxp" table is not found'); - } - - font.pos = (font.start || 0) + tables.maxp.offset; - const version = font.getInt32(); - const numGlyphs = font.getUint16(); - - if (properties.scaleFactors && properties.scaleFactors.length === numGlyphs && isTrueType) { - const { - scaleFactors - } = properties; - const isGlyphLocationsLong = int16(tables.head.data[50], tables.head.data[51]); - const glyphs = new _glyf.GlyfTable({ - glyfTable: tables.glyf.data, - isGlyphLocationsLong, - locaTable: tables.loca.data, - numGlyphs - }); - glyphs.scale(scaleFactors); - const { - glyf, - loca, - isLocationLong - } = glyphs.write(); - tables.glyf.data = glyf; - tables.loca.data = loca; - - if (isLocationLong !== !!isGlyphLocationsLong) { - tables.head.data[50] = 0; - tables.head.data[51] = isLocationLong ? 1 : 0; - } - - const metrics = tables.hmtx.data; - - for (let i = 0; i < numGlyphs; i++) { - const j = 4 * i; - const advanceWidth = Math.round(scaleFactors[i] * int16(metrics[j], metrics[j + 1])); - metrics[j] = advanceWidth >> 8 & 0xff; - metrics[j + 1] = advanceWidth & 0xff; - const lsb = Math.round(scaleFactors[i] * signedInt16(metrics[j + 2], metrics[j + 3])); - writeSignedInt16(metrics, j + 2, lsb); - } - } - - let numGlyphsOut = numGlyphs + 1; - let dupFirstEntry = true; - - if (numGlyphsOut > 0xffff) { - dupFirstEntry = false; - numGlyphsOut = numGlyphs; - (0, _util.warn)("Not enough space in glyfs to duplicate first glyph."); - } - - let maxFunctionDefs = 0; - let maxSizeOfInstructions = 0; - - if (version >= 0x00010000 && tables.maxp.length >= 22) { - font.pos += 8; - const maxZones = font.getUint16(); - - if (maxZones > 2) { - tables.maxp.data[14] = 0; - tables.maxp.data[15] = 2; - } - - font.pos += 4; - maxFunctionDefs = font.getUint16(); - font.pos += 4; - maxSizeOfInstructions = font.getUint16(); - } - - tables.maxp.data[4] = numGlyphsOut >> 8; - tables.maxp.data[5] = numGlyphsOut & 255; - const hintsValid = sanitizeTTPrograms(tables.fpgm, tables.prep, tables["cvt "], maxFunctionDefs); - - if (!hintsValid) { - delete tables.fpgm; - delete tables.prep; - delete tables["cvt "]; - } - - sanitizeMetrics(font, tables.hhea, tables.hmtx, tables.head, numGlyphsOut, dupFirstEntry); - - if (!tables.head) { - throw new _util.FormatError('Required "head" table is not found'); - } - - sanitizeHead(tables.head, numGlyphs, isTrueType ? tables.loca.length : 0); - let missingGlyphs = Object.create(null); - - if (isTrueType) { - const isGlyphLocationsLong = int16(tables.head.data[50], tables.head.data[51]); - const glyphsInfo = sanitizeGlyphLocations(tables.loca, tables.glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions); - missingGlyphs = glyphsInfo.missingGlyphs; - - if (version >= 0x00010000 && tables.maxp.length >= 22) { - tables.maxp.data[26] = glyphsInfo.maxSizeOfInstructions >> 8; - tables.maxp.data[27] = glyphsInfo.maxSizeOfInstructions & 255; - } - } - - if (!tables.hhea) { - throw new _util.FormatError('Required "hhea" table is not found'); - } - - if (tables.hhea.data[10] === 0 && tables.hhea.data[11] === 0) { - tables.hhea.data[10] = 0xff; - tables.hhea.data[11] = 0xff; - } - - const metricsOverride = { - unitsPerEm: int16(tables.head.data[18], tables.head.data[19]), - yMax: int16(tables.head.data[42], tables.head.data[43]), - yMin: signedInt16(tables.head.data[38], tables.head.data[39]), - ascent: signedInt16(tables.hhea.data[4], tables.hhea.data[5]), - descent: signedInt16(tables.hhea.data[6], tables.hhea.data[7]), - lineGap: signedInt16(tables.hhea.data[8], tables.hhea.data[9]) - }; - this.ascent = metricsOverride.ascent / metricsOverride.unitsPerEm; - this.descent = metricsOverride.descent / metricsOverride.unitsPerEm; - this.lineGap = metricsOverride.lineGap / metricsOverride.unitsPerEm; - - if (this.cssFontInfo && this.cssFontInfo.lineHeight) { - this.lineHeight = this.cssFontInfo.metrics.lineHeight; - this.lineGap = this.cssFontInfo.metrics.lineGap; - } else { - this.lineHeight = this.ascent - this.descent + this.lineGap; - } - - if (tables.post) { - readPostScriptTable(tables.post, properties, numGlyphs); - } - - tables.post = { - tag: "post", - data: createPostTable(properties) - }; - const charCodeToGlyphId = []; - - function hasGlyph(glyphId) { - return !missingGlyphs[glyphId]; - } - - if (properties.composite) { - const cidToGidMap = properties.cidToGidMap || []; - const isCidToGidMapEmpty = cidToGidMap.length === 0; - properties.cMap.forEach(function (charCode, cid) { - if (typeof cid === "string") { - cid = convertCidString(charCode, cid, true); - } - - if (cid > 0xffff) { - throw new _util.FormatError("Max size of CID is 65,535"); - } - - let glyphId = -1; - - if (isCidToGidMapEmpty) { - glyphId = cid; - } else if (cidToGidMap[cid] !== undefined) { - glyphId = cidToGidMap[cid]; - } - - if (glyphId >= 0 && glyphId < numGlyphs && hasGlyph(glyphId)) { - charCodeToGlyphId[charCode] = glyphId; - } - }); - } else { - const cmapTable = readCmapTable(tables.cmap, font, this.isSymbolicFont, properties.hasEncoding); - const cmapPlatformId = cmapTable.platformId; - const cmapEncodingId = cmapTable.encodingId; - const cmapMappings = cmapTable.mappings; - const cmapMappingsLength = cmapMappings.length; - let baseEncoding = [], - forcePostTable = false; - - if (properties.hasEncoding && (properties.baseEncodingName === "MacRomanEncoding" || properties.baseEncodingName === "WinAnsiEncoding")) { - baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName); - } - - if (properties.hasEncoding && !this.isSymbolicFont && (cmapPlatformId === 3 && cmapEncodingId === 1 || cmapPlatformId === 1 && cmapEncodingId === 0)) { - const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); - - for (let charCode = 0; charCode < 256; charCode++) { - let glyphName; - - if (this.differences[charCode] !== undefined) { - glyphName = this.differences[charCode]; - } else if (baseEncoding.length && baseEncoding[charCode] !== "") { - glyphName = baseEncoding[charCode]; - } else { - glyphName = _encodings.StandardEncoding[charCode]; - } - - if (!glyphName) { - continue; - } - - const standardGlyphName = (0, _fonts_utils.recoverGlyphName)(glyphName, glyphsUnicodeMap); - let unicodeOrCharCode; - - if (cmapPlatformId === 3 && cmapEncodingId === 1) { - unicodeOrCharCode = glyphsUnicodeMap[standardGlyphName]; - } else if (cmapPlatformId === 1 && cmapEncodingId === 0) { - unicodeOrCharCode = _encodings.MacRomanEncoding.indexOf(standardGlyphName); - } - - if (unicodeOrCharCode === undefined) { - if (!properties.glyphNames && properties.hasIncludedToUnicodeMap && !(this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap)) { - const unicode = this.toUnicode.get(charCode); - - if (unicode) { - unicodeOrCharCode = unicode.codePointAt(0); - } - } - - if (unicodeOrCharCode === undefined) { - continue; - } - } - - for (let i = 0; i < cmapMappingsLength; ++i) { - if (cmapMappings[i].charCode !== unicodeOrCharCode) { - continue; - } - - charCodeToGlyphId[charCode] = cmapMappings[i].glyphId; - break; - } - } - } else if (cmapPlatformId === 0) { - for (let i = 0; i < cmapMappingsLength; ++i) { - charCodeToGlyphId[cmapMappings[i].charCode] = cmapMappings[i].glyphId; - } - - forcePostTable = true; - } else { - for (let i = 0; i < cmapMappingsLength; ++i) { - let charCode = cmapMappings[i].charCode; - - if (cmapPlatformId === 3 && charCode >= 0xf000 && charCode <= 0xf0ff) { - charCode &= 0xff; - } - - charCodeToGlyphId[charCode] = cmapMappings[i].glyphId; - } - } - - if (properties.glyphNames && (baseEncoding.length || this.differences.length)) { - for (let i = 0; i < 256; ++i) { - if (!forcePostTable && charCodeToGlyphId[i] !== undefined) { - continue; - } - - const glyphName = this.differences[i] || baseEncoding[i]; - - if (!glyphName) { - continue; - } - - const glyphId = properties.glyphNames.indexOf(glyphName); - - if (glyphId > 0 && hasGlyph(glyphId)) { - charCodeToGlyphId[i] = glyphId; - } - } - } - } - - if (charCodeToGlyphId.length === 0) { - charCodeToGlyphId[0] = 0; - } - - let glyphZeroId = numGlyphsOut - 1; - - if (!dupFirstEntry) { - glyphZeroId = 0; - } - - if (!properties.cssFontInfo) { - const newMapping = adjustMapping(charCodeToGlyphId, hasGlyph, glyphZeroId); - this.toFontChar = newMapping.toFontChar; - tables.cmap = { - tag: "cmap", - data: createCmapTable(newMapping.charCodeToGlyphId, numGlyphsOut) - }; - - if (!tables["OS/2"] || !validateOS2Table(tables["OS/2"], font)) { - tables["OS/2"] = { - tag: "OS/2", - data: createOS2Table(properties, newMapping.charCodeToGlyphId, metricsOverride) - }; - } - } - - if (!isTrueType) { - try { - cffFile = new _stream.Stream(tables["CFF "].data); - const parser = new _cff_parser.CFFParser(cffFile, properties, _fonts_utils.SEAC_ANALYSIS_ENABLED); - cff = parser.parse(); - cff.duplicateFirstGlyph(); - const compiler = new _cff_parser.CFFCompiler(cff); - tables["CFF "].data = compiler.compile(); - } catch (e) { - (0, _util.warn)("Failed to compile font " + properties.loadedName); - } - } - - if (!tables.name) { - tables.name = { - tag: "name", - data: createNameTable(this.name) - }; - } else { - const namePrototype = readNameTable(tables.name); - tables.name.data = createNameTable(name, namePrototype); - this.psName = namePrototype[0][6] || null; - } - - const builder = new _opentype_file_builder.OpenTypeFileBuilder(header.version); - - for (const tableTag in tables) { - builder.addTable(tableTag, tables[tableTag].data); - } - - return builder.toArray(); - } - - convert(fontName, font, properties) { - properties.fixedPitch = false; - - if (properties.builtInEncoding) { - adjustToUnicode(properties, properties.builtInEncoding); - } - - let glyphZeroId = 1; - - if (font instanceof _cff_font.CFFFont) { - glyphZeroId = font.numGlyphs - 1; - } - - const mapping = font.getGlyphMapping(properties); - let newMapping = null; - let newCharCodeToGlyphId = mapping; - - if (!properties.cssFontInfo) { - newMapping = adjustMapping(mapping, font.hasGlyphId.bind(font), glyphZeroId); - this.toFontChar = newMapping.toFontChar; - newCharCodeToGlyphId = newMapping.charCodeToGlyphId; - } - - const numGlyphs = font.numGlyphs; - - function getCharCodes(charCodeToGlyphId, glyphId) { - let charCodes = null; - - for (const charCode in charCodeToGlyphId) { - if (glyphId === charCodeToGlyphId[charCode]) { - if (!charCodes) { - charCodes = []; - } - - charCodes.push(charCode | 0); - } - } - - return charCodes; - } - - function createCharCode(charCodeToGlyphId, glyphId) { - for (const charCode in charCodeToGlyphId) { - if (glyphId === charCodeToGlyphId[charCode]) { - return charCode | 0; - } - } - - newMapping.charCodeToGlyphId[newMapping.nextAvailableFontCharCode] = glyphId; - return newMapping.nextAvailableFontCharCode++; - } - - const seacs = font.seacs; - - if (newMapping && _fonts_utils.SEAC_ANALYSIS_ENABLED && seacs && seacs.length) { - const matrix = properties.fontMatrix || _util.FONT_IDENTITY_MATRIX; - const charset = font.getCharset(); - const seacMap = Object.create(null); - - for (let glyphId in seacs) { - glyphId |= 0; - const seac = seacs[glyphId]; - const baseGlyphName = _encodings.StandardEncoding[seac[2]]; - const accentGlyphName = _encodings.StandardEncoding[seac[3]]; - const baseGlyphId = charset.indexOf(baseGlyphName); - const accentGlyphId = charset.indexOf(accentGlyphName); - - if (baseGlyphId < 0 || accentGlyphId < 0) { - continue; - } - - const accentOffset = { - x: seac[0] * matrix[0] + seac[1] * matrix[2] + matrix[4], - y: seac[0] * matrix[1] + seac[1] * matrix[3] + matrix[5] - }; - const charCodes = getCharCodes(mapping, glyphId); - - if (!charCodes) { - continue; - } - - for (let i = 0, ii = charCodes.length; i < ii; i++) { - const charCode = charCodes[i]; - const charCodeToGlyphId = newMapping.charCodeToGlyphId; - const baseFontCharCode = createCharCode(charCodeToGlyphId, baseGlyphId); - const accentFontCharCode = createCharCode(charCodeToGlyphId, accentGlyphId); - seacMap[charCode] = { - baseFontCharCode, - accentFontCharCode, - accentOffset - }; - } - } - - properties.seacMap = seacMap; - } - - const unitsPerEm = 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0]; - const builder = new _opentype_file_builder.OpenTypeFileBuilder("\x4F\x54\x54\x4F"); - builder.addTable("CFF ", font.data); - builder.addTable("OS/2", createOS2Table(properties, newCharCodeToGlyphId)); - builder.addTable("cmap", createCmapTable(newCharCodeToGlyphId, numGlyphs)); - builder.addTable("head", "\x00\x01\x00\x00" + "\x00\x00\x10\x00" + "\x00\x00\x00\x00" + "\x5F\x0F\x3C\xF5" + "\x00\x00" + safeString16(unitsPerEm) + "\x00\x00\x00\x00\x9e\x0b\x7e\x27" + "\x00\x00\x00\x00\x9e\x0b\x7e\x27" + "\x00\x00" + safeString16(properties.descent) + "\x0F\xFF" + safeString16(properties.ascent) + string16(properties.italicAngle ? 2 : 0) + "\x00\x11" + "\x00\x00" + "\x00\x00" + "\x00\x00"); - builder.addTable("hhea", "\x00\x01\x00\x00" + safeString16(properties.ascent) + safeString16(properties.descent) + "\x00\x00" + "\xFF\xFF" + "\x00\x00" + "\x00\x00" + "\x00\x00" + safeString16(properties.capHeight) + safeString16(Math.tan(properties.italicAngle) * properties.xHeight) + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + string16(numGlyphs)); - builder.addTable("hmtx", function fontFieldsHmtx() { - const charstrings = font.charstrings; - const cffWidths = font.cff ? font.cff.widths : null; - let hmtx = "\x00\x00\x00\x00"; - - for (let i = 1, ii = numGlyphs; i < ii; i++) { - let width = 0; - - if (charstrings) { - const charstring = charstrings[i - 1]; - width = "width" in charstring ? charstring.width : 0; - } else if (cffWidths) { - width = Math.ceil(cffWidths[i] || 0); - } - - hmtx += string16(width) + string16(0); - } - - return hmtx; - }()); - builder.addTable("maxp", "\x00\x00\x50\x00" + string16(numGlyphs)); - builder.addTable("name", createNameTable(fontName)); - builder.addTable("post", createPostTable(properties)); - return builder.toArray(); - } - - get spaceWidth() { - const possibleSpaceReplacements = ["space", "minus", "one", "i", "I"]; - let width; - - for (let i = 0, ii = possibleSpaceReplacements.length; i < ii; i++) { - const glyphName = possibleSpaceReplacements[i]; - - if (glyphName in this.widths) { - width = this.widths[glyphName]; - break; - } - - const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); - const glyphUnicode = glyphsUnicodeMap[glyphName]; - let charcode = 0; - - if (this.composite && this.cMap.contains(glyphUnicode)) { - charcode = this.cMap.lookup(glyphUnicode); - - if (typeof charcode === "string") { - charcode = convertCidString(glyphUnicode, charcode); - } - } - - if (!charcode && this.toUnicode) { - charcode = this.toUnicode.charCodeOf(glyphUnicode); - } - - if (charcode <= 0) { - charcode = glyphUnicode; - } - - width = this.widths[charcode]; - - if (width) { - break; - } - } - - width = width || this.defaultWidth; - return (0, _util.shadow)(this, "spaceWidth", width); - } - - _charToGlyph(charcode, isSpace = false) { - let fontCharCode, width, operatorListId; - let widthCode = charcode; - - if (this.cMap && this.cMap.contains(charcode)) { - widthCode = this.cMap.lookup(charcode); - - if (typeof widthCode === "string") { - widthCode = convertCidString(charcode, widthCode); - } - } - - width = this.widths[widthCode]; - width = (0, _util.isNum)(width) ? width : this.defaultWidth; - const vmetric = this.vmetrics && this.vmetrics[widthCode]; - let unicode = this.toUnicode.get(charcode) || charcode; - - if (typeof unicode === "number") { - unicode = String.fromCharCode(unicode); - } - - let isInFont = this.toFontChar[charcode] !== undefined; - fontCharCode = this.toFontChar[charcode] || charcode; - - if (this.missingFile) { - const glyphName = this.differences[charcode] || this.defaultEncoding[charcode]; - - if ((glyphName === ".notdef" || glyphName === "") && this.type === "Type1") { - fontCharCode = 0x20; - } - - fontCharCode = (0, _unicode.mapSpecialUnicodeValues)(fontCharCode); - } - - if (this.isType3Font) { - operatorListId = fontCharCode; - } - - let accent = null; - - if (this.seacMap && this.seacMap[charcode]) { - isInFont = true; - const seac = this.seacMap[charcode]; - fontCharCode = seac.baseFontCharCode; - accent = { - fontChar: String.fromCodePoint(seac.accentFontCharCode), - offset: seac.accentOffset - }; - } - - let fontChar = ""; - - if (typeof fontCharCode === "number") { - if (fontCharCode <= 0x10ffff) { - fontChar = String.fromCodePoint(fontCharCode); - } else { - (0, _util.warn)(`charToGlyph - invalid fontCharCode: ${fontCharCode}`); - } - } - - let glyph = this._glyphCache[charcode]; - - if (!glyph || !glyph.matchesForCache(charcode, fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont)) { - glyph = new Glyph(charcode, fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont); - this._glyphCache[charcode] = glyph; - } - - return glyph; - } - - charsToGlyphs(chars) { - let glyphs = this._charsCache[chars]; - - if (glyphs) { - return glyphs; - } - - glyphs = []; - - if (this.cMap) { - const c = Object.create(null), - ii = chars.length; - let i = 0; - - while (i < ii) { - this.cMap.readCharCode(chars, i, c); - const { - charcode, - length - } = c; - i += length; - - const glyph = this._charToGlyph(charcode, length === 1 && chars.charCodeAt(i - 1) === 0x20); - - glyphs.push(glyph); - } - } else { - for (let i = 0, ii = chars.length; i < ii; ++i) { - const charcode = chars.charCodeAt(i); - - const glyph = this._charToGlyph(charcode, charcode === 0x20); - - glyphs.push(glyph); - } - } - - return this._charsCache[chars] = glyphs; - } - - getCharPositions(chars) { - const positions = []; - - if (this.cMap) { - const c = Object.create(null); - let i = 0; - - while (i < chars.length) { - this.cMap.readCharCode(chars, i, c); - const length = c.length; - positions.push([i, i + length]); - i += length; - } - } else { - for (let i = 0, ii = chars.length; i < ii; ++i) { - positions.push([i, i + 1]); - } - } - - return positions; - } - - get glyphCacheValues() { - return Object.values(this._glyphCache); - } - - encodeString(str) { - const buffers = []; - const currentBuf = []; - - const hasCurrentBufErrors = () => buffers.length % 2 === 1; - - const getCharCode = this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap ? unicode => this.toUnicode.charCodeOf(unicode) : unicode => this.toUnicode.charCodeOf(String.fromCodePoint(unicode)); - - for (let i = 0, ii = str.length; i < ii; i++) { - const unicode = str.codePointAt(i); - - if (unicode > 0xd7ff && (unicode < 0xe000 || unicode > 0xfffd)) { - i++; - } - - if (this.toUnicode) { - const charCode = getCharCode(unicode); - - if (charCode !== -1) { - if (hasCurrentBufErrors()) { - buffers.push(currentBuf.join("")); - currentBuf.length = 0; - } - - const charCodeLength = this.cMap ? this.cMap.getCharCodeLength(charCode) : 1; - - for (let j = charCodeLength - 1; j >= 0; j--) { - currentBuf.push(String.fromCharCode(charCode >> 8 * j & 0xff)); - } - - continue; - } - } - - if (!hasCurrentBufErrors()) { - buffers.push(currentBuf.join("")); - currentBuf.length = 0; - } - - currentBuf.push(String.fromCodePoint(unicode)); - } - - buffers.push(currentBuf.join("")); - return buffers; - } - -} - -exports.Font = Font; - -class ErrorFont { - constructor(error) { - this.error = error; - this.loadedName = "g_font_error"; - this.missingFile = true; - } - - charsToGlyphs() { - return []; - } - - encodeString(chars) { - return [chars]; - } - - exportData(extraProperties = false) { - return { - error: this.error - }; - } - -} - -exports.ErrorFont = ErrorFont; - -/***/ }), -/* 45 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.CFFTopDict = exports.CFFStrings = exports.CFFStandardStrings = exports.CFFPrivateDict = exports.CFFParser = exports.CFFIndex = exports.CFFHeader = exports.CFFFDSelect = exports.CFFCompiler = exports.CFFCharset = exports.CFF = void 0; - -var _util = __w_pdfjs_require__(2); - -var _charsets = __w_pdfjs_require__(46); - -var _encodings = __w_pdfjs_require__(19); - -const MAX_SUBR_NESTING = 10; -const CFFStandardStrings = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall", "001.000", "001.001", "001.002", "001.003", "Black", "Bold", "Book", "Light", "Medium", "Regular", "Roman", "Semibold"]; -exports.CFFStandardStrings = CFFStandardStrings; -const NUM_STANDARD_CFF_STRINGS = 391; - -const CFFParser = function CFFParserClosure() { - const CharstringValidationData = [null, { - id: "hstem", - min: 2, - stackClearing: true, - stem: true - }, null, { - id: "vstem", - min: 2, - stackClearing: true, - stem: true - }, { - id: "vmoveto", - min: 1, - stackClearing: true - }, { - id: "rlineto", - min: 2, - resetStack: true - }, { - id: "hlineto", - min: 1, - resetStack: true - }, { - id: "vlineto", - min: 1, - resetStack: true - }, { - id: "rrcurveto", - min: 6, - resetStack: true - }, null, { - id: "callsubr", - min: 1, - undefStack: true - }, { - id: "return", - min: 0, - undefStack: true - }, null, null, { - id: "endchar", - min: 0, - stackClearing: true - }, null, null, null, { - id: "hstemhm", - min: 2, - stackClearing: true, - stem: true - }, { - id: "hintmask", - min: 0, - stackClearing: true - }, { - id: "cntrmask", - min: 0, - stackClearing: true - }, { - id: "rmoveto", - min: 2, - stackClearing: true - }, { - id: "hmoveto", - min: 1, - stackClearing: true - }, { - id: "vstemhm", - min: 2, - stackClearing: true, - stem: true - }, { - id: "rcurveline", - min: 8, - resetStack: true - }, { - id: "rlinecurve", - min: 8, - resetStack: true - }, { - id: "vvcurveto", - min: 4, - resetStack: true - }, { - id: "hhcurveto", - min: 4, - resetStack: true - }, null, { - id: "callgsubr", - min: 1, - undefStack: true - }, { - id: "vhcurveto", - min: 4, - resetStack: true - }, { - id: "hvcurveto", - min: 4, - resetStack: true - }]; - const CharstringValidationData12 = [null, null, null, { - id: "and", - min: 2, - stackDelta: -1 - }, { - id: "or", - min: 2, - stackDelta: -1 - }, { - id: "not", - min: 1, - stackDelta: 0 - }, null, null, null, { - id: "abs", - min: 1, - stackDelta: 0 - }, { - id: "add", - min: 2, - stackDelta: -1, - stackFn: function stack_div(stack, index) { - stack[index - 2] = stack[index - 2] + stack[index - 1]; - } - }, { - id: "sub", - min: 2, - stackDelta: -1, - stackFn: function stack_div(stack, index) { - stack[index - 2] = stack[index - 2] - stack[index - 1]; - } - }, { - id: "div", - min: 2, - stackDelta: -1, - stackFn: function stack_div(stack, index) { - stack[index - 2] = stack[index - 2] / stack[index - 1]; - } - }, null, { - id: "neg", - min: 1, - stackDelta: 0, - stackFn: function stack_div(stack, index) { - stack[index - 1] = -stack[index - 1]; - } - }, { - id: "eq", - min: 2, - stackDelta: -1 - }, null, null, { - id: "drop", - min: 1, - stackDelta: -1 - }, null, { - id: "put", - min: 2, - stackDelta: -2 - }, { - id: "get", - min: 1, - stackDelta: 0 - }, { - id: "ifelse", - min: 4, - stackDelta: -3 - }, { - id: "random", - min: 0, - stackDelta: 1 - }, { - id: "mul", - min: 2, - stackDelta: -1, - stackFn: function stack_div(stack, index) { - stack[index - 2] = stack[index - 2] * stack[index - 1]; - } - }, null, { - id: "sqrt", - min: 1, - stackDelta: 0 - }, { - id: "dup", - min: 1, - stackDelta: 1 - }, { - id: "exch", - min: 2, - stackDelta: 0 - }, { - id: "index", - min: 2, - stackDelta: 0 - }, { - id: "roll", - min: 3, - stackDelta: -2 - }, null, null, null, { - id: "hflex", - min: 7, - resetStack: true - }, { - id: "flex", - min: 13, - resetStack: true - }, { - id: "hflex1", - min: 9, - resetStack: true - }, { - id: "flex1", - min: 11, - resetStack: true - }]; - - class CFFParser { - constructor(file, properties, seacAnalysisEnabled) { - this.bytes = file.getBytes(); - this.properties = properties; - this.seacAnalysisEnabled = !!seacAnalysisEnabled; - } - - parse() { - const properties = this.properties; - const cff = new CFF(); - this.cff = cff; - const header = this.parseHeader(); - const nameIndex = this.parseIndex(header.endPos); - const topDictIndex = this.parseIndex(nameIndex.endPos); - const stringIndex = this.parseIndex(topDictIndex.endPos); - const globalSubrIndex = this.parseIndex(stringIndex.endPos); - const topDictParsed = this.parseDict(topDictIndex.obj.get(0)); - const topDict = this.createDict(CFFTopDict, topDictParsed, cff.strings); - cff.header = header.obj; - cff.names = this.parseNameIndex(nameIndex.obj); - cff.strings = this.parseStringIndex(stringIndex.obj); - cff.topDict = topDict; - cff.globalSubrIndex = globalSubrIndex.obj; - this.parsePrivateDict(cff.topDict); - cff.isCIDFont = topDict.hasName("ROS"); - const charStringOffset = topDict.getByName("CharStrings"); - const charStringIndex = this.parseIndex(charStringOffset).obj; - const fontMatrix = topDict.getByName("FontMatrix"); - - if (fontMatrix) { - properties.fontMatrix = fontMatrix; - } - - const fontBBox = topDict.getByName("FontBBox"); - - if (fontBBox) { - properties.ascent = Math.max(fontBBox[3], fontBBox[1]); - properties.descent = Math.min(fontBBox[1], fontBBox[3]); - properties.ascentScaled = true; - } - - let charset, encoding; - - if (cff.isCIDFont) { - const fdArrayIndex = this.parseIndex(topDict.getByName("FDArray")).obj; - - for (let i = 0, ii = fdArrayIndex.count; i < ii; ++i) { - const dictRaw = fdArrayIndex.get(i); - const fontDict = this.createDict(CFFTopDict, this.parseDict(dictRaw), cff.strings); - this.parsePrivateDict(fontDict); - cff.fdArray.push(fontDict); - } - - encoding = null; - charset = this.parseCharsets(topDict.getByName("charset"), charStringIndex.count, cff.strings, true); - cff.fdSelect = this.parseFDSelect(topDict.getByName("FDSelect"), charStringIndex.count); - } else { - charset = this.parseCharsets(topDict.getByName("charset"), charStringIndex.count, cff.strings, false); - encoding = this.parseEncoding(topDict.getByName("Encoding"), properties, cff.strings, charset.charset); - } - - cff.charset = charset; - cff.encoding = encoding; - const charStringsAndSeacs = this.parseCharStrings({ - charStrings: charStringIndex, - localSubrIndex: topDict.privateDict.subrsIndex, - globalSubrIndex: globalSubrIndex.obj, - fdSelect: cff.fdSelect, - fdArray: cff.fdArray, - privateDict: topDict.privateDict - }); - cff.charStrings = charStringsAndSeacs.charStrings; - cff.seacs = charStringsAndSeacs.seacs; - cff.widths = charStringsAndSeacs.widths; - return cff; - } - - parseHeader() { - let bytes = this.bytes; - const bytesLength = bytes.length; - let offset = 0; - - while (offset < bytesLength && bytes[offset] !== 1) { - ++offset; - } - - if (offset >= bytesLength) { - throw new _util.FormatError("Invalid CFF header"); - } - - if (offset !== 0) { - (0, _util.info)("cff data is shifted"); - bytes = bytes.subarray(offset); - this.bytes = bytes; - } - - const major = bytes[0]; - const minor = bytes[1]; - const hdrSize = bytes[2]; - const offSize = bytes[3]; - const header = new CFFHeader(major, minor, hdrSize, offSize); - return { - obj: header, - endPos: hdrSize - }; - } - - parseDict(dict) { - let pos = 0; - - function parseOperand() { - let value = dict[pos++]; - - if (value === 30) { - return parseFloatOperand(); - } else if (value === 28) { - value = dict[pos++]; - value = (value << 24 | dict[pos++] << 16) >> 16; - return value; - } else if (value === 29) { - value = dict[pos++]; - value = value << 8 | dict[pos++]; - value = value << 8 | dict[pos++]; - value = value << 8 | dict[pos++]; - return value; - } else if (value >= 32 && value <= 246) { - return value - 139; - } else if (value >= 247 && value <= 250) { - return (value - 247) * 256 + dict[pos++] + 108; - } else if (value >= 251 && value <= 254) { - return -((value - 251) * 256) - dict[pos++] - 108; - } - - (0, _util.warn)('CFFParser_parseDict: "' + value + '" is a reserved command.'); - return NaN; - } - - function parseFloatOperand() { - let str = ""; - const eof = 15; - const lookup = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", "E", "E-", null, "-"]; - const length = dict.length; - - while (pos < length) { - const b = dict[pos++]; - const b1 = b >> 4; - const b2 = b & 15; - - if (b1 === eof) { - break; - } - - str += lookup[b1]; - - if (b2 === eof) { - break; - } - - str += lookup[b2]; - } - - return parseFloat(str); - } - - let operands = []; - const entries = []; - pos = 0; - const end = dict.length; - - while (pos < end) { - let b = dict[pos]; - - if (b <= 21) { - if (b === 12) { - b = b << 8 | dict[++pos]; - } - - entries.push([b, operands]); - operands = []; - ++pos; - } else { - operands.push(parseOperand()); - } - } - - return entries; - } - - parseIndex(pos) { - const cffIndex = new CFFIndex(); - const bytes = this.bytes; - const count = bytes[pos++] << 8 | bytes[pos++]; - const offsets = []; - let end = pos; - let i, ii; - - if (count !== 0) { - const offsetSize = bytes[pos++]; - const startPos = pos + (count + 1) * offsetSize - 1; - - for (i = 0, ii = count + 1; i < ii; ++i) { - let offset = 0; - - for (let j = 0; j < offsetSize; ++j) { - offset <<= 8; - offset += bytes[pos++]; - } - - offsets.push(startPos + offset); - } - - end = offsets[count]; - } - - for (i = 0, ii = offsets.length - 1; i < ii; ++i) { - const offsetStart = offsets[i]; - const offsetEnd = offsets[i + 1]; - cffIndex.add(bytes.subarray(offsetStart, offsetEnd)); - } - - return { - obj: cffIndex, - endPos: end - }; - } - - parseNameIndex(index) { - const names = []; - - for (let i = 0, ii = index.count; i < ii; ++i) { - const name = index.get(i); - names.push((0, _util.bytesToString)(name)); - } - - return names; - } - - parseStringIndex(index) { - const strings = new CFFStrings(); - - for (let i = 0, ii = index.count; i < ii; ++i) { - const data = index.get(i); - strings.add((0, _util.bytesToString)(data)); - } - - return strings; - } - - createDict(Type, dict, strings) { - const cffDict = new Type(strings); - - for (let i = 0, ii = dict.length; i < ii; ++i) { - const pair = dict[i]; - const key = pair[0]; - const value = pair[1]; - cffDict.setByKey(key, value); - } - - return cffDict; - } - - parseCharString(state, data, localSubrIndex, globalSubrIndex) { - if (!data || state.callDepth > MAX_SUBR_NESTING) { - return false; - } - - let stackSize = state.stackSize; - const stack = state.stack; - const length = data.length; - - for (let j = 0; j < length;) { - const value = data[j++]; - let validationCommand = null; - - if (value === 12) { - const q = data[j++]; - - if (q === 0) { - data[j - 2] = 139; - data[j - 1] = 22; - stackSize = 0; - } else { - validationCommand = CharstringValidationData12[q]; - } - } else if (value === 28) { - stack[stackSize] = (data[j] << 24 | data[j + 1] << 16) >> 16; - j += 2; - stackSize++; - } else if (value === 14) { - if (stackSize >= 4) { - stackSize -= 4; - - if (this.seacAnalysisEnabled) { - state.seac = stack.slice(stackSize, stackSize + 4); - return false; - } - } - - validationCommand = CharstringValidationData[value]; - } else if (value >= 32 && value <= 246) { - stack[stackSize] = value - 139; - stackSize++; - } else if (value >= 247 && value <= 254) { - stack[stackSize] = value < 251 ? (value - 247 << 8) + data[j] + 108 : -(value - 251 << 8) - data[j] - 108; - j++; - stackSize++; - } else if (value === 255) { - stack[stackSize] = (data[j] << 24 | data[j + 1] << 16 | data[j + 2] << 8 | data[j + 3]) / 65536; - j += 4; - stackSize++; - } else if (value === 19 || value === 20) { - state.hints += stackSize >> 1; - j += state.hints + 7 >> 3; - stackSize %= 2; - validationCommand = CharstringValidationData[value]; - } else if (value === 10 || value === 29) { - let subrsIndex; - - if (value === 10) { - subrsIndex = localSubrIndex; - } else { - subrsIndex = globalSubrIndex; - } - - if (!subrsIndex) { - validationCommand = CharstringValidationData[value]; - (0, _util.warn)("Missing subrsIndex for " + validationCommand.id); - return false; - } - - let bias = 32768; - - if (subrsIndex.count < 1240) { - bias = 107; - } else if (subrsIndex.count < 33900) { - bias = 1131; - } - - const subrNumber = stack[--stackSize] + bias; - - if (subrNumber < 0 || subrNumber >= subrsIndex.count || isNaN(subrNumber)) { - validationCommand = CharstringValidationData[value]; - (0, _util.warn)("Out of bounds subrIndex for " + validationCommand.id); - return false; - } - - state.stackSize = stackSize; - state.callDepth++; - const valid = this.parseCharString(state, subrsIndex.get(subrNumber), localSubrIndex, globalSubrIndex); - - if (!valid) { - return false; - } - - state.callDepth--; - stackSize = state.stackSize; - continue; - } else if (value === 11) { - state.stackSize = stackSize; - return true; - } else if (value === 0 && j === data.length) { - data[j - 1] = 14; - validationCommand = CharstringValidationData[14]; - } else { - validationCommand = CharstringValidationData[value]; - } - - if (validationCommand) { - if (validationCommand.stem) { - state.hints += stackSize >> 1; - - if (value === 3 || value === 23) { - state.hasVStems = true; - } else if (state.hasVStems && (value === 1 || value === 18)) { - (0, _util.warn)("CFF stem hints are in wrong order"); - data[j - 1] = value === 1 ? 3 : 23; - } - } - - if ("min" in validationCommand) { - if (!state.undefStack && stackSize < validationCommand.min) { - (0, _util.warn)("Not enough parameters for " + validationCommand.id + "; actual: " + stackSize + ", expected: " + validationCommand.min); - - if (stackSize === 0) { - data[j - 1] = 14; - return true; - } - - return false; - } - } - - if (state.firstStackClearing && validationCommand.stackClearing) { - state.firstStackClearing = false; - stackSize -= validationCommand.min; - - if (stackSize >= 2 && validationCommand.stem) { - stackSize %= 2; - } else if (stackSize > 1) { - (0, _util.warn)("Found too many parameters for stack-clearing command"); - } - - if (stackSize > 0) { - state.width = stack[stackSize - 1]; - } - } - - if ("stackDelta" in validationCommand) { - if ("stackFn" in validationCommand) { - validationCommand.stackFn(stack, stackSize); - } - - stackSize += validationCommand.stackDelta; - } else if (validationCommand.stackClearing) { - stackSize = 0; - } else if (validationCommand.resetStack) { - stackSize = 0; - state.undefStack = false; - } else if (validationCommand.undefStack) { - stackSize = 0; - state.undefStack = true; - state.firstStackClearing = false; - } - } - } - - state.stackSize = stackSize; - return true; - } - - parseCharStrings({ - charStrings, - localSubrIndex, - globalSubrIndex, - fdSelect, - fdArray, - privateDict - }) { - const seacs = []; - const widths = []; - const count = charStrings.count; - - for (let i = 0; i < count; i++) { - const charstring = charStrings.get(i); - const state = { - callDepth: 0, - stackSize: 0, - stack: [], - undefStack: true, - hints: 0, - firstStackClearing: true, - seac: null, - width: null, - hasVStems: false - }; - let valid = true; - let localSubrToUse = null; - let privateDictToUse = privateDict; - - if (fdSelect && fdArray.length) { - const fdIndex = fdSelect.getFDIndex(i); - - if (fdIndex === -1) { - (0, _util.warn)("Glyph index is not in fd select."); - valid = false; - } - - if (fdIndex >= fdArray.length) { - (0, _util.warn)("Invalid fd index for glyph index."); - valid = false; - } - - if (valid) { - privateDictToUse = fdArray[fdIndex].privateDict; - localSubrToUse = privateDictToUse.subrsIndex; - } - } else if (localSubrIndex) { - localSubrToUse = localSubrIndex; - } - - if (valid) { - valid = this.parseCharString(state, charstring, localSubrToUse, globalSubrIndex); - } - - if (state.width !== null) { - const nominalWidth = privateDictToUse.getByName("nominalWidthX"); - widths[i] = nominalWidth + state.width; - } else { - const defaultWidth = privateDictToUse.getByName("defaultWidthX"); - widths[i] = defaultWidth; - } - - if (state.seac !== null) { - seacs[i] = state.seac; - } - - if (!valid) { - charStrings.set(i, new Uint8Array([14])); - } - } - - return { - charStrings, - seacs, - widths - }; - } - - emptyPrivateDictionary(parentDict) { - const privateDict = this.createDict(CFFPrivateDict, [], parentDict.strings); - parentDict.setByKey(18, [0, 0]); - parentDict.privateDict = privateDict; - } - - parsePrivateDict(parentDict) { - if (!parentDict.hasName("Private")) { - this.emptyPrivateDictionary(parentDict); - return; - } - - const privateOffset = parentDict.getByName("Private"); - - if (!Array.isArray(privateOffset) || privateOffset.length !== 2) { - parentDict.removeByName("Private"); - return; - } - - const size = privateOffset[0]; - const offset = privateOffset[1]; - - if (size === 0 || offset >= this.bytes.length) { - this.emptyPrivateDictionary(parentDict); - return; - } - - const privateDictEnd = offset + size; - const dictData = this.bytes.subarray(offset, privateDictEnd); - const dict = this.parseDict(dictData); - const privateDict = this.createDict(CFFPrivateDict, dict, parentDict.strings); - parentDict.privateDict = privateDict; - - if (!privateDict.getByName("Subrs")) { - return; - } - - const subrsOffset = privateDict.getByName("Subrs"); - const relativeOffset = offset + subrsOffset; - - if (subrsOffset === 0 || relativeOffset >= this.bytes.length) { - this.emptyPrivateDictionary(parentDict); - return; - } - - const subrsIndex = this.parseIndex(relativeOffset); - privateDict.subrsIndex = subrsIndex.obj; - } - - parseCharsets(pos, length, strings, cid) { - if (pos === 0) { - return new CFFCharset(true, CFFCharsetPredefinedTypes.ISO_ADOBE, _charsets.ISOAdobeCharset); - } else if (pos === 1) { - return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT, _charsets.ExpertCharset); - } else if (pos === 2) { - return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT_SUBSET, _charsets.ExpertSubsetCharset); - } - - const bytes = this.bytes; - const start = pos; - const format = bytes[pos++]; - const charset = [cid ? 0 : ".notdef"]; - let id, count, i; - length -= 1; - - switch (format) { - case 0: - for (i = 0; i < length; i++) { - id = bytes[pos++] << 8 | bytes[pos++]; - charset.push(cid ? id : strings.get(id)); - } - - break; - - case 1: - while (charset.length <= length) { - id = bytes[pos++] << 8 | bytes[pos++]; - count = bytes[pos++]; - - for (i = 0; i <= count; i++) { - charset.push(cid ? id++ : strings.get(id++)); - } - } - - break; - - case 2: - while (charset.length <= length) { - id = bytes[pos++] << 8 | bytes[pos++]; - count = bytes[pos++] << 8 | bytes[pos++]; - - for (i = 0; i <= count; i++) { - charset.push(cid ? id++ : strings.get(id++)); - } - } - - break; - - default: - throw new _util.FormatError("Unknown charset format"); - } - - const end = pos; - const raw = bytes.subarray(start, end); - return new CFFCharset(false, format, charset, raw); - } - - parseEncoding(pos, properties, strings, charset) { - const encoding = Object.create(null); - const bytes = this.bytes; - let predefined = false; - let format, i, ii; - let raw = null; - - function readSupplement() { - const supplementsCount = bytes[pos++]; - - for (i = 0; i < supplementsCount; i++) { - const code = bytes[pos++]; - const sid = (bytes[pos++] << 8) + (bytes[pos++] & 0xff); - encoding[code] = charset.indexOf(strings.get(sid)); - } - } - - if (pos === 0 || pos === 1) { - predefined = true; - format = pos; - const baseEncoding = pos ? _encodings.ExpertEncoding : _encodings.StandardEncoding; - - for (i = 0, ii = charset.length; i < ii; i++) { - const index = baseEncoding.indexOf(charset[i]); - - if (index !== -1) { - encoding[index] = i; - } - } - } else { - const dataStart = pos; - format = bytes[pos++]; - - switch (format & 0x7f) { - case 0: - const glyphsCount = bytes[pos++]; - - for (i = 1; i <= glyphsCount; i++) { - encoding[bytes[pos++]] = i; - } - - break; - - case 1: - const rangesCount = bytes[pos++]; - let gid = 1; - - for (i = 0; i < rangesCount; i++) { - const start = bytes[pos++]; - const left = bytes[pos++]; - - for (let j = start; j <= start + left; j++) { - encoding[j] = gid++; - } - } - - break; - - default: - throw new _util.FormatError(`Unknown encoding format: ${format} in CFF`); - } - - const dataEnd = pos; - - if (format & 0x80) { - bytes[dataStart] &= 0x7f; - readSupplement(); - } - - raw = bytes.subarray(dataStart, dataEnd); - } - - format &= 0x7f; - return new CFFEncoding(predefined, format, encoding, raw); - } - - parseFDSelect(pos, length) { - const bytes = this.bytes; - const format = bytes[pos++]; - const fdSelect = []; - let i; - - switch (format) { - case 0: - for (i = 0; i < length; ++i) { - const id = bytes[pos++]; - fdSelect.push(id); - } - - break; - - case 3: - const rangesCount = bytes[pos++] << 8 | bytes[pos++]; - - for (i = 0; i < rangesCount; ++i) { - let first = bytes[pos++] << 8 | bytes[pos++]; - - if (i === 0 && first !== 0) { - (0, _util.warn)("parseFDSelect: The first range must have a first GID of 0" + " -- trying to recover."); - first = 0; - } - - const fdIndex = bytes[pos++]; - const next = bytes[pos] << 8 | bytes[pos + 1]; - - for (let j = first; j < next; ++j) { - fdSelect.push(fdIndex); - } - } - - pos += 2; - break; - - default: - throw new _util.FormatError(`parseFDSelect: Unknown format "${format}".`); - } - - if (fdSelect.length !== length) { - throw new _util.FormatError("parseFDSelect: Invalid font data."); - } - - return new CFFFDSelect(format, fdSelect); - } - - } - - return CFFParser; -}(); - -exports.CFFParser = CFFParser; - -class CFF { - constructor() { - this.header = null; - this.names = []; - this.topDict = null; - this.strings = new CFFStrings(); - this.globalSubrIndex = null; - this.encoding = null; - this.charset = null; - this.charStrings = null; - this.fdArray = []; - this.fdSelect = null; - this.isCIDFont = false; - } - - duplicateFirstGlyph() { - if (this.charStrings.count >= 65535) { - (0, _util.warn)("Not enough space in charstrings to duplicate first glyph."); - return; - } - - const glyphZero = this.charStrings.get(0); - this.charStrings.add(glyphZero); - - if (this.isCIDFont) { - this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0]); - } - } - - hasGlyphId(id) { - if (id < 0 || id >= this.charStrings.count) { - return false; - } - - const glyph = this.charStrings.get(id); - return glyph.length > 0; - } - -} - -exports.CFF = CFF; - -class CFFHeader { - constructor(major, minor, hdrSize, offSize) { - this.major = major; - this.minor = minor; - this.hdrSize = hdrSize; - this.offSize = offSize; - } - -} - -exports.CFFHeader = CFFHeader; - -class CFFStrings { - constructor() { - this.strings = []; - } - - get(index) { - if (index >= 0 && index <= NUM_STANDARD_CFF_STRINGS - 1) { - return CFFStandardStrings[index]; - } - - if (index - NUM_STANDARD_CFF_STRINGS <= this.strings.length) { - return this.strings[index - NUM_STANDARD_CFF_STRINGS]; - } - - return CFFStandardStrings[0]; - } - - getSID(str) { - let index = CFFStandardStrings.indexOf(str); - - if (index !== -1) { - return index; - } - - index = this.strings.indexOf(str); - - if (index !== -1) { - return index + NUM_STANDARD_CFF_STRINGS; - } - - return -1; - } - - add(value) { - this.strings.push(value); - } - - get count() { - return this.strings.length; - } - -} - -exports.CFFStrings = CFFStrings; - -class CFFIndex { - constructor() { - this.objects = []; - this.length = 0; - } - - add(data) { - this.length += data.length; - this.objects.push(data); - } - - set(index, data) { - this.length += data.length - this.objects[index].length; - this.objects[index] = data; - } - - get(index) { - return this.objects[index]; - } - - get count() { - return this.objects.length; - } - -} - -exports.CFFIndex = CFFIndex; - -class CFFDict { - constructor(tables, strings) { - this.keyToNameMap = tables.keyToNameMap; - this.nameToKeyMap = tables.nameToKeyMap; - this.defaults = tables.defaults; - this.types = tables.types; - this.opcodes = tables.opcodes; - this.order = tables.order; - this.strings = strings; - this.values = Object.create(null); - } - - setByKey(key, value) { - if (!(key in this.keyToNameMap)) { - return false; - } - - const valueLength = value.length; - - if (valueLength === 0) { - return true; - } - - for (let i = 0; i < valueLength; i++) { - if (isNaN(value[i])) { - (0, _util.warn)('Invalid CFFDict value: "' + value + '" for key "' + key + '".'); - return true; - } - } - - const type = this.types[key]; - - if (type === "num" || type === "sid" || type === "offset") { - value = value[0]; - } - - this.values[key] = value; - return true; - } - - setByName(name, value) { - if (!(name in this.nameToKeyMap)) { - throw new _util.FormatError(`Invalid dictionary name "${name}"`); - } - - this.values[this.nameToKeyMap[name]] = value; - } - - hasName(name) { - return this.nameToKeyMap[name] in this.values; - } - - getByName(name) { - if (!(name in this.nameToKeyMap)) { - throw new _util.FormatError(`Invalid dictionary name ${name}"`); - } - - const key = this.nameToKeyMap[name]; - - if (!(key in this.values)) { - return this.defaults[key]; - } - - return this.values[key]; - } - - removeByName(name) { - delete this.values[this.nameToKeyMap[name]]; - } - - static createTables(layout) { - const tables = { - keyToNameMap: {}, - nameToKeyMap: {}, - defaults: {}, - types: {}, - opcodes: {}, - order: [] - }; - - for (let i = 0, ii = layout.length; i < ii; ++i) { - const entry = layout[i]; - const key = Array.isArray(entry[0]) ? (entry[0][0] << 8) + entry[0][1] : entry[0]; - tables.keyToNameMap[key] = entry[1]; - tables.nameToKeyMap[entry[1]] = key; - tables.types[key] = entry[2]; - tables.defaults[key] = entry[3]; - tables.opcodes[key] = Array.isArray(entry[0]) ? entry[0] : [entry[0]]; - tables.order.push(key); - } - - return tables; - } - -} - -const CFFTopDict = function CFFTopDictClosure() { - const layout = [[[12, 30], "ROS", ["sid", "sid", "num"], null], [[12, 20], "SyntheticBase", "num", null], [0, "version", "sid", null], [1, "Notice", "sid", null], [[12, 0], "Copyright", "sid", null], [2, "FullName", "sid", null], [3, "FamilyName", "sid", null], [4, "Weight", "sid", null], [[12, 1], "isFixedPitch", "num", 0], [[12, 2], "ItalicAngle", "num", 0], [[12, 3], "UnderlinePosition", "num", -100], [[12, 4], "UnderlineThickness", "num", 50], [[12, 5], "PaintType", "num", 0], [[12, 6], "CharstringType", "num", 2], [[12, 7], "FontMatrix", ["num", "num", "num", "num", "num", "num"], [0.001, 0, 0, 0.001, 0, 0]], [13, "UniqueID", "num", null], [5, "FontBBox", ["num", "num", "num", "num"], [0, 0, 0, 0]], [[12, 8], "StrokeWidth", "num", 0], [14, "XUID", "array", null], [15, "charset", "offset", 0], [16, "Encoding", "offset", 0], [17, "CharStrings", "offset", 0], [18, "Private", ["offset", "offset"], null], [[12, 21], "PostScript", "sid", null], [[12, 22], "BaseFontName", "sid", null], [[12, 23], "BaseFontBlend", "delta", null], [[12, 31], "CIDFontVersion", "num", 0], [[12, 32], "CIDFontRevision", "num", 0], [[12, 33], "CIDFontType", "num", 0], [[12, 34], "CIDCount", "num", 8720], [[12, 35], "UIDBase", "num", null], [[12, 37], "FDSelect", "offset", null], [[12, 36], "FDArray", "offset", null], [[12, 38], "FontName", "sid", null]]; - let tables = null; - - class CFFTopDict extends CFFDict { - constructor(strings) { - if (tables === null) { - tables = CFFDict.createTables(layout); - } - - super(tables, strings); - this.privateDict = null; - } - - } - - return CFFTopDict; -}(); - -exports.CFFTopDict = CFFTopDict; - -const CFFPrivateDict = function CFFPrivateDictClosure() { - const layout = [[6, "BlueValues", "delta", null], [7, "OtherBlues", "delta", null], [8, "FamilyBlues", "delta", null], [9, "FamilyOtherBlues", "delta", null], [[12, 9], "BlueScale", "num", 0.039625], [[12, 10], "BlueShift", "num", 7], [[12, 11], "BlueFuzz", "num", 1], [10, "StdHW", "num", null], [11, "StdVW", "num", null], [[12, 12], "StemSnapH", "delta", null], [[12, 13], "StemSnapV", "delta", null], [[12, 14], "ForceBold", "num", 0], [[12, 17], "LanguageGroup", "num", 0], [[12, 18], "ExpansionFactor", "num", 0.06], [[12, 19], "initialRandomSeed", "num", 0], [20, "defaultWidthX", "num", 0], [21, "nominalWidthX", "num", 0], [19, "Subrs", "offset", null]]; - let tables = null; - - class CFFPrivateDict extends CFFDict { - constructor(strings) { - if (tables === null) { - tables = CFFDict.createTables(layout); - } - - super(tables, strings); - this.subrsIndex = null; - } - - } - - return CFFPrivateDict; -}(); - -exports.CFFPrivateDict = CFFPrivateDict; -const CFFCharsetPredefinedTypes = { - ISO_ADOBE: 0, - EXPERT: 1, - EXPERT_SUBSET: 2 -}; - -class CFFCharset { - constructor(predefined, format, charset, raw) { - this.predefined = predefined; - this.format = format; - this.charset = charset; - this.raw = raw; - } - -} - -exports.CFFCharset = CFFCharset; - -class CFFEncoding { - constructor(predefined, format, encoding, raw) { - this.predefined = predefined; - this.format = format; - this.encoding = encoding; - this.raw = raw; - } - -} - -class CFFFDSelect { - constructor(format, fdSelect) { - this.format = format; - this.fdSelect = fdSelect; - } - - getFDIndex(glyphIndex) { - if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) { - return -1; - } - - return this.fdSelect[glyphIndex]; - } - -} - -exports.CFFFDSelect = CFFFDSelect; - -class CFFOffsetTracker { - constructor() { - this.offsets = Object.create(null); - } - - isTracking(key) { - return key in this.offsets; - } - - track(key, location) { - if (key in this.offsets) { - throw new _util.FormatError(`Already tracking location of ${key}`); - } - - this.offsets[key] = location; - } - - offset(value) { - for (const key in this.offsets) { - this.offsets[key] += value; - } - } - - setEntryLocation(key, values, output) { - if (!(key in this.offsets)) { - throw new _util.FormatError(`Not tracking location of ${key}`); - } - - const data = output.data; - const dataOffset = this.offsets[key]; - const size = 5; - - for (let i = 0, ii = values.length; i < ii; ++i) { - const offset0 = i * size + dataOffset; - const offset1 = offset0 + 1; - const offset2 = offset0 + 2; - const offset3 = offset0 + 3; - const offset4 = offset0 + 4; - - if (data[offset0] !== 0x1d || data[offset1] !== 0 || data[offset2] !== 0 || data[offset3] !== 0 || data[offset4] !== 0) { - throw new _util.FormatError("writing to an offset that is not empty"); - } - - const value = values[i]; - data[offset0] = 0x1d; - data[offset1] = value >> 24 & 0xff; - data[offset2] = value >> 16 & 0xff; - data[offset3] = value >> 8 & 0xff; - data[offset4] = value & 0xff; - } - } - -} - -class CFFCompiler { - constructor(cff) { - this.cff = cff; - } - - compile() { - const cff = this.cff; - const output = { - data: [], - length: 0, - add: function CFFCompiler_add(data) { - this.data = this.data.concat(data); - this.length = this.data.length; - } - }; - const header = this.compileHeader(cff.header); - output.add(header); - const nameIndex = this.compileNameIndex(cff.names); - output.add(nameIndex); - - if (cff.isCIDFont) { - if (cff.topDict.hasName("FontMatrix")) { - const base = cff.topDict.getByName("FontMatrix"); - cff.topDict.removeByName("FontMatrix"); - - for (let i = 0, ii = cff.fdArray.length; i < ii; i++) { - const subDict = cff.fdArray[i]; - let matrix = base.slice(0); - - if (subDict.hasName("FontMatrix")) { - matrix = _util.Util.transform(matrix, subDict.getByName("FontMatrix")); - } - - subDict.setByName("FontMatrix", matrix); - } - } - } - - const xuid = cff.topDict.getByName("XUID"); - - if (xuid && xuid.length > 16) { - cff.topDict.removeByName("XUID"); - } - - cff.topDict.setByName("charset", 0); - let compiled = this.compileTopDicts([cff.topDict], output.length, cff.isCIDFont); - output.add(compiled.output); - const topDictTracker = compiled.trackers[0]; - const stringIndex = this.compileStringIndex(cff.strings.strings); - output.add(stringIndex); - const globalSubrIndex = this.compileIndex(cff.globalSubrIndex); - output.add(globalSubrIndex); - - if (cff.encoding && cff.topDict.hasName("Encoding")) { - if (cff.encoding.predefined) { - topDictTracker.setEntryLocation("Encoding", [cff.encoding.format], output); - } else { - const encoding = this.compileEncoding(cff.encoding); - topDictTracker.setEntryLocation("Encoding", [output.length], output); - output.add(encoding); - } - } - - const charset = this.compileCharset(cff.charset, cff.charStrings.count, cff.strings, cff.isCIDFont); - topDictTracker.setEntryLocation("charset", [output.length], output); - output.add(charset); - const charStrings = this.compileCharStrings(cff.charStrings); - topDictTracker.setEntryLocation("CharStrings", [output.length], output); - output.add(charStrings); - - if (cff.isCIDFont) { - topDictTracker.setEntryLocation("FDSelect", [output.length], output); - const fdSelect = this.compileFDSelect(cff.fdSelect); - output.add(fdSelect); - compiled = this.compileTopDicts(cff.fdArray, output.length, true); - topDictTracker.setEntryLocation("FDArray", [output.length], output); - output.add(compiled.output); - const fontDictTrackers = compiled.trackers; - this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output); - } - - this.compilePrivateDicts([cff.topDict], [topDictTracker], output); - output.add([0]); - return output.data; - } - - encodeNumber(value) { - if (Number.isInteger(value)) { - return this.encodeInteger(value); - } - - return this.encodeFloat(value); - } - - static get EncodeFloatRegExp() { - return (0, _util.shadow)(this, "EncodeFloatRegExp", /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/); - } - - encodeFloat(num) { - let value = num.toString(); - const m = CFFCompiler.EncodeFloatRegExp.exec(value); - - if (m) { - const epsilon = parseFloat("1e" + ((m[2] ? +m[2] : 0) + m[1].length)); - value = (Math.round(num * epsilon) / epsilon).toString(); - } - - let nibbles = ""; - let i, ii; - - for (i = 0, ii = value.length; i < ii; ++i) { - const a = value[i]; - - if (a === "e") { - nibbles += value[++i] === "-" ? "c" : "b"; - } else if (a === ".") { - nibbles += "a"; - } else if (a === "-") { - nibbles += "e"; - } else { - nibbles += a; - } - } - - nibbles += nibbles.length & 1 ? "f" : "ff"; - const out = [30]; - - for (i = 0, ii = nibbles.length; i < ii; i += 2) { - out.push(parseInt(nibbles.substring(i, i + 2), 16)); - } - - return out; - } - - encodeInteger(value) { - let code; - - if (value >= -107 && value <= 107) { - code = [value + 139]; - } else if (value >= 108 && value <= 1131) { - value -= 108; - code = [(value >> 8) + 247, value & 0xff]; - } else if (value >= -1131 && value <= -108) { - value = -value - 108; - code = [(value >> 8) + 251, value & 0xff]; - } else if (value >= -32768 && value <= 32767) { - code = [0x1c, value >> 8 & 0xff, value & 0xff]; - } else { - code = [0x1d, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff]; - } - - return code; - } - - compileHeader(header) { - return [header.major, header.minor, 4, header.offSize]; - } - - compileNameIndex(names) { - const nameIndex = new CFFIndex(); - - for (let i = 0, ii = names.length; i < ii; ++i) { - const name = names[i]; - const length = Math.min(name.length, 127); - let sanitizedName = new Array(length); - - for (let j = 0; j < length; j++) { - let char = name[j]; - - if (char < "!" || char > "~" || char === "[" || char === "]" || char === "(" || char === ")" || char === "{" || char === "}" || char === "<" || char === ">" || char === "/" || char === "%") { - char = "_"; - } - - sanitizedName[j] = char; - } - - sanitizedName = sanitizedName.join(""); - - if (sanitizedName === "") { - sanitizedName = "Bad_Font_Name"; - } - - nameIndex.add((0, _util.stringToBytes)(sanitizedName)); - } - - return this.compileIndex(nameIndex); - } - - compileTopDicts(dicts, length, removeCidKeys) { - const fontDictTrackers = []; - let fdArrayIndex = new CFFIndex(); - - for (let i = 0, ii = dicts.length; i < ii; ++i) { - const fontDict = dicts[i]; - - if (removeCidKeys) { - fontDict.removeByName("CIDFontVersion"); - fontDict.removeByName("CIDFontRevision"); - fontDict.removeByName("CIDFontType"); - fontDict.removeByName("CIDCount"); - fontDict.removeByName("UIDBase"); - } - - const fontDictTracker = new CFFOffsetTracker(); - const fontDictData = this.compileDict(fontDict, fontDictTracker); - fontDictTrackers.push(fontDictTracker); - fdArrayIndex.add(fontDictData); - fontDictTracker.offset(length); - } - - fdArrayIndex = this.compileIndex(fdArrayIndex, fontDictTrackers); - return { - trackers: fontDictTrackers, - output: fdArrayIndex - }; - } - - compilePrivateDicts(dicts, trackers, output) { - for (let i = 0, ii = dicts.length; i < ii; ++i) { - const fontDict = dicts[i]; - const privateDict = fontDict.privateDict; - - if (!privateDict || !fontDict.hasName("Private")) { - throw new _util.FormatError("There must be a private dictionary."); - } - - const privateDictTracker = new CFFOffsetTracker(); - const privateDictData = this.compileDict(privateDict, privateDictTracker); - let outputLength = output.length; - privateDictTracker.offset(outputLength); - - if (!privateDictData.length) { - outputLength = 0; - } - - trackers[i].setEntryLocation("Private", [privateDictData.length, outputLength], output); - output.add(privateDictData); - - if (privateDict.subrsIndex && privateDict.hasName("Subrs")) { - const subrs = this.compileIndex(privateDict.subrsIndex); - privateDictTracker.setEntryLocation("Subrs", [privateDictData.length], output); - output.add(subrs); - } - } - } - - compileDict(dict, offsetTracker) { - let out = []; - const order = dict.order; - - for (let i = 0; i < order.length; ++i) { - const key = order[i]; - - if (!(key in dict.values)) { - continue; - } - - let values = dict.values[key]; - let types = dict.types[key]; - - if (!Array.isArray(types)) { - types = [types]; - } - - if (!Array.isArray(values)) { - values = [values]; - } - - if (values.length === 0) { - continue; - } - - for (let j = 0, jj = types.length; j < jj; ++j) { - const type = types[j]; - const value = values[j]; - - switch (type) { - case "num": - case "sid": - out = out.concat(this.encodeNumber(value)); - break; - - case "offset": - const name = dict.keyToNameMap[key]; - - if (!offsetTracker.isTracking(name)) { - offsetTracker.track(name, out.length); - } - - out = out.concat([0x1d, 0, 0, 0, 0]); - break; - - case "array": - case "delta": - out = out.concat(this.encodeNumber(value)); - - for (let k = 1, kk = values.length; k < kk; ++k) { - out = out.concat(this.encodeNumber(values[k])); - } - - break; - - default: - throw new _util.FormatError(`Unknown data type of ${type}`); - } - } - - out = out.concat(dict.opcodes[key]); - } - - return out; - } - - compileStringIndex(strings) { - const stringIndex = new CFFIndex(); - - for (let i = 0, ii = strings.length; i < ii; ++i) { - stringIndex.add((0, _util.stringToBytes)(strings[i])); - } - - return this.compileIndex(stringIndex); - } - - compileGlobalSubrIndex() { - const globalSubrIndex = this.cff.globalSubrIndex; - this.out.writeByteArray(this.compileIndex(globalSubrIndex)); - } - - compileCharStrings(charStrings) { - const charStringsIndex = new CFFIndex(); - - for (let i = 0; i < charStrings.count; i++) { - const glyph = charStrings.get(i); - - if (glyph.length === 0) { - charStringsIndex.add(new Uint8Array([0x8b, 0x0e])); - continue; - } - - charStringsIndex.add(glyph); - } - - return this.compileIndex(charStringsIndex); - } - - compileCharset(charset, numGlyphs, strings, isCIDFont) { - let out; - const numGlyphsLessNotDef = numGlyphs - 1; - - if (isCIDFont) { - out = new Uint8Array([2, 0, 0, numGlyphsLessNotDef >> 8 & 0xff, numGlyphsLessNotDef & 0xff]); - } else { - const length = 1 + numGlyphsLessNotDef * 2; - out = new Uint8Array(length); - out[0] = 0; - let charsetIndex = 0; - const numCharsets = charset.charset.length; - let warned = false; - - for (let i = 1; i < out.length; i += 2) { - let sid = 0; - - if (charsetIndex < numCharsets) { - const name = charset.charset[charsetIndex++]; - sid = strings.getSID(name); - - if (sid === -1) { - sid = 0; - - if (!warned) { - warned = true; - (0, _util.warn)(`Couldn't find ${name} in CFF strings`); - } - } - } - - out[i] = sid >> 8 & 0xff; - out[i + 1] = sid & 0xff; - } - } - - return this.compileTypedArray(out); - } - - compileEncoding(encoding) { - return this.compileTypedArray(encoding.raw); - } - - compileFDSelect(fdSelect) { - const format = fdSelect.format; - let out, i; - - switch (format) { - case 0: - out = new Uint8Array(1 + fdSelect.fdSelect.length); - out[0] = format; - - for (i = 0; i < fdSelect.fdSelect.length; i++) { - out[i + 1] = fdSelect.fdSelect[i]; - } - - break; - - case 3: - const start = 0; - let lastFD = fdSelect.fdSelect[0]; - const ranges = [format, 0, 0, start >> 8 & 0xff, start & 0xff, lastFD]; - - for (i = 1; i < fdSelect.fdSelect.length; i++) { - const currentFD = fdSelect.fdSelect[i]; - - if (currentFD !== lastFD) { - ranges.push(i >> 8 & 0xff, i & 0xff, currentFD); - lastFD = currentFD; - } - } - - const numRanges = (ranges.length - 3) / 3; - ranges[1] = numRanges >> 8 & 0xff; - ranges[2] = numRanges & 0xff; - ranges.push(i >> 8 & 0xff, i & 0xff); - out = new Uint8Array(ranges); - break; - } - - return this.compileTypedArray(out); - } - - compileTypedArray(data) { - const out = []; - - for (let i = 0, ii = data.length; i < ii; ++i) { - out[i] = data[i]; - } - - return out; - } - - compileIndex(index, trackers = []) { - const objects = index.objects; - const count = objects.length; - - if (count === 0) { - return [0, 0, 0]; - } - - const data = [count >> 8 & 0xff, count & 0xff]; - let lastOffset = 1, - i; - - for (i = 0; i < count; ++i) { - lastOffset += objects[i].length; - } - - let offsetSize; - - if (lastOffset < 0x100) { - offsetSize = 1; - } else if (lastOffset < 0x10000) { - offsetSize = 2; - } else if (lastOffset < 0x1000000) { - offsetSize = 3; - } else { - offsetSize = 4; - } - - data.push(offsetSize); - let relativeOffset = 1; - - for (i = 0; i < count + 1; i++) { - if (offsetSize === 1) { - data.push(relativeOffset & 0xff); - } else if (offsetSize === 2) { - data.push(relativeOffset >> 8 & 0xff, relativeOffset & 0xff); - } else if (offsetSize === 3) { - data.push(relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff); - } else { - data.push(relativeOffset >>> 24 & 0xff, relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff); - } - - if (objects[i]) { - relativeOffset += objects[i].length; - } - } - - for (i = 0; i < count; i++) { - if (trackers[i]) { - trackers[i].offset(data.length); - } - - for (let j = 0, jj = objects[i].length; j < jj; j++) { - data.push(objects[i][j]); - } - } - - return data; - } - -} - -exports.CFFCompiler = CFFCompiler; - -/***/ }), -/* 46 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.ISOAdobeCharset = exports.ExpertSubsetCharset = exports.ExpertCharset = void 0; -const ISOAdobeCharset = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron"]; -exports.ISOAdobeCharset = ISOAdobeCharset; -const ExpertCharset = [".notdef", "space", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "onequarter", "onehalf", "threequarters", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall"]; -exports.ExpertCharset = ExpertCharset; -const ExpertSubsetCharset = [".notdef", "space", "dollaroldstyle", "dollarsuperior", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "hyphensuperior", "colonmonetary", "onefitted", "rupiah", "centoldstyle", "figuredash", "hypheninferior", "onequarter", "onehalf", "threequarters", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior"]; -exports.ExpertSubsetCharset = ExpertSubsetCharset; - -/***/ }), -/* 47 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.getSerifFonts = exports.getNonStdFontMap = exports.getGlyphMapForStandardFonts = exports.getFontNameToFileMap = void 0; -exports.getStandardFontName = getStandardFontName; -exports.getSymbolsFonts = exports.getSupplementalGlyphMapForCalibri = exports.getSupplementalGlyphMapForArialBlack = exports.getStdFontMap = void 0; - -var _core_utils = __w_pdfjs_require__(9); - -var _fonts_utils = __w_pdfjs_require__(18); - -const getStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) { - t["Times-Roman"] = "Times-Roman"; - t.Helvetica = "Helvetica"; - t.Courier = "Courier"; - t.Symbol = "Symbol"; - t["Times-Bold"] = "Times-Bold"; - t["Helvetica-Bold"] = "Helvetica-Bold"; - t["Courier-Bold"] = "Courier-Bold"; - t.ZapfDingbats = "ZapfDingbats"; - t["Times-Italic"] = "Times-Italic"; - t["Helvetica-Oblique"] = "Helvetica-Oblique"; - t["Courier-Oblique"] = "Courier-Oblique"; - t["Times-BoldItalic"] = "Times-BoldItalic"; - t["Helvetica-BoldOblique"] = "Helvetica-BoldOblique"; - t["Courier-BoldOblique"] = "Courier-BoldOblique"; - t.ArialNarrow = "Helvetica"; - t["ArialNarrow-Bold"] = "Helvetica-Bold"; - t["ArialNarrow-BoldItalic"] = "Helvetica-BoldOblique"; - t["ArialNarrow-Italic"] = "Helvetica-Oblique"; - t.ArialBlack = "Helvetica"; - t["ArialBlack-Bold"] = "Helvetica-Bold"; - t["ArialBlack-BoldItalic"] = "Helvetica-BoldOblique"; - t["ArialBlack-Italic"] = "Helvetica-Oblique"; - t["Arial-Black"] = "Helvetica"; - t["Arial-Black-Bold"] = "Helvetica-Bold"; - t["Arial-Black-BoldItalic"] = "Helvetica-BoldOblique"; - t["Arial-Black-Italic"] = "Helvetica-Oblique"; - t.Arial = "Helvetica"; - t["Arial-Bold"] = "Helvetica-Bold"; - t["Arial-BoldItalic"] = "Helvetica-BoldOblique"; - t["Arial-Italic"] = "Helvetica-Oblique"; - t["Arial-BoldItalicMT"] = "Helvetica-BoldOblique"; - t["Arial-BoldMT"] = "Helvetica-Bold"; - t["Arial-ItalicMT"] = "Helvetica-Oblique"; - t.ArialMT = "Helvetica"; - t["Courier-BoldItalic"] = "Courier-BoldOblique"; - t["Courier-Italic"] = "Courier-Oblique"; - t.CourierNew = "Courier"; - t["CourierNew-Bold"] = "Courier-Bold"; - t["CourierNew-BoldItalic"] = "Courier-BoldOblique"; - t["CourierNew-Italic"] = "Courier-Oblique"; - t["CourierNewPS-BoldItalicMT"] = "Courier-BoldOblique"; - t["CourierNewPS-BoldMT"] = "Courier-Bold"; - t["CourierNewPS-ItalicMT"] = "Courier-Oblique"; - t.CourierNewPSMT = "Courier"; - t["Helvetica-BoldItalic"] = "Helvetica-BoldOblique"; - t["Helvetica-Italic"] = "Helvetica-Oblique"; - t["Symbol-Bold"] = "Symbol"; - t["Symbol-BoldItalic"] = "Symbol"; - t["Symbol-Italic"] = "Symbol"; - t.TimesNewRoman = "Times-Roman"; - t["TimesNewRoman-Bold"] = "Times-Bold"; - t["TimesNewRoman-BoldItalic"] = "Times-BoldItalic"; - t["TimesNewRoman-Italic"] = "Times-Italic"; - t.TimesNewRomanPS = "Times-Roman"; - t["TimesNewRomanPS-Bold"] = "Times-Bold"; - t["TimesNewRomanPS-BoldItalic"] = "Times-BoldItalic"; - t["TimesNewRomanPS-BoldItalicMT"] = "Times-BoldItalic"; - t["TimesNewRomanPS-BoldMT"] = "Times-Bold"; - t["TimesNewRomanPS-Italic"] = "Times-Italic"; - t["TimesNewRomanPS-ItalicMT"] = "Times-Italic"; - t.TimesNewRomanPSMT = "Times-Roman"; - t["TimesNewRomanPSMT-Bold"] = "Times-Bold"; - t["TimesNewRomanPSMT-BoldItalic"] = "Times-BoldItalic"; - t["TimesNewRomanPSMT-Italic"] = "Times-Italic"; -}); -exports.getStdFontMap = getStdFontMap; -const getFontNameToFileMap = (0, _core_utils.getLookupTableFactory)(function (t) { - t.Courier = "FoxitFixed.pfb"; - t["Courier-Bold"] = "FoxitFixedBold.pfb"; - t["Courier-BoldOblique"] = "FoxitFixedBoldItalic.pfb"; - t["Courier-Oblique"] = "FoxitFixedItalic.pfb"; - t.Helvetica = "FoxitSans.pfb"; - t["Helvetica-Bold"] = "FoxitSansBold.pfb"; - t["Helvetica-BoldOblique"] = "FoxitSansBoldItalic.pfb"; - t["Helvetica-Oblique"] = "FoxitSansItalic.pfb"; - t["Times-Roman"] = "FoxitSerif.pfb"; - t["Times-Bold"] = "FoxitSerifBold.pfb"; - t["Times-BoldItalic"] = "FoxitSerifBoldItalic.pfb"; - t["Times-Italic"] = "FoxitSerifItalic.pfb"; - t.Symbol = "FoxitSymbol.pfb"; - t.ZapfDingbats = "FoxitDingbats.pfb"; - t["LiberationSans-Regular"] = "LiberationSans-Regular.ttf"; - t["LiberationSans-Bold"] = "LiberationSans-Bold.ttf"; - t["LiberationSans-Italic"] = "LiberationSans-Italic.ttf"; - t["LiberationSans-BoldItalic"] = "LiberationSans-BoldItalic.ttf"; -}); -exports.getFontNameToFileMap = getFontNameToFileMap; -const getNonStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) { - t.Calibri = "Helvetica"; - t["Calibri-Bold"] = "Helvetica-Bold"; - t["Calibri-BoldItalic"] = "Helvetica-BoldOblique"; - t["Calibri-Italic"] = "Helvetica-Oblique"; - t.CenturyGothic = "Helvetica"; - t["CenturyGothic-Bold"] = "Helvetica-Bold"; - t["CenturyGothic-BoldItalic"] = "Helvetica-BoldOblique"; - t["CenturyGothic-Italic"] = "Helvetica-Oblique"; - t.ComicSansMS = "Comic Sans MS"; - t["ComicSansMS-Bold"] = "Comic Sans MS-Bold"; - t["ComicSansMS-BoldItalic"] = "Comic Sans MS-BoldItalic"; - t["ComicSansMS-Italic"] = "Comic Sans MS-Italic"; - t["ItcSymbol-Bold"] = "Helvetica-Bold"; - t["ItcSymbol-BoldItalic"] = "Helvetica-BoldOblique"; - t["ItcSymbol-Book"] = "Helvetica"; - t["ItcSymbol-BookItalic"] = "Helvetica-Oblique"; - t["ItcSymbol-Medium"] = "Helvetica"; - t["ItcSymbol-MediumItalic"] = "Helvetica-Oblique"; - t.LucidaConsole = "Courier"; - t["LucidaConsole-Bold"] = "Courier-Bold"; - t["LucidaConsole-BoldItalic"] = "Courier-BoldOblique"; - t["LucidaConsole-Italic"] = "Courier-Oblique"; - t["LucidaSans-Demi"] = "Helvetica-Bold"; - t["MS-Gothic"] = "MS Gothic"; - t["MS-Gothic-Bold"] = "MS Gothic-Bold"; - t["MS-Gothic-BoldItalic"] = "MS Gothic-BoldItalic"; - t["MS-Gothic-Italic"] = "MS Gothic-Italic"; - t["MS-Mincho"] = "MS Mincho"; - t["MS-Mincho-Bold"] = "MS Mincho-Bold"; - t["MS-Mincho-BoldItalic"] = "MS Mincho-BoldItalic"; - t["MS-Mincho-Italic"] = "MS Mincho-Italic"; - t["MS-PGothic"] = "MS PGothic"; - t["MS-PGothic-Bold"] = "MS PGothic-Bold"; - t["MS-PGothic-BoldItalic"] = "MS PGothic-BoldItalic"; - t["MS-PGothic-Italic"] = "MS PGothic-Italic"; - t["MS-PMincho"] = "MS PMincho"; - t["MS-PMincho-Bold"] = "MS PMincho-Bold"; - t["MS-PMincho-BoldItalic"] = "MS PMincho-BoldItalic"; - t["MS-PMincho-Italic"] = "MS PMincho-Italic"; - t.NuptialScript = "Times-Italic"; - t.SegoeUISymbol = "Helvetica"; - t.Wingdings = "ZapfDingbats"; - t["Wingdings-Regular"] = "ZapfDingbats"; -}); -exports.getNonStdFontMap = getNonStdFontMap; -const getSerifFonts = (0, _core_utils.getLookupTableFactory)(function (t) { - t["Adobe Jenson"] = true; - t["Adobe Text"] = true; - t.Albertus = true; - t.Aldus = true; - t.Alexandria = true; - t.Algerian = true; - t["American Typewriter"] = true; - t.Antiqua = true; - t.Apex = true; - t.Arno = true; - t.Aster = true; - t.Aurora = true; - t.Baskerville = true; - t.Bell = true; - t.Bembo = true; - t["Bembo Schoolbook"] = true; - t.Benguiat = true; - t["Berkeley Old Style"] = true; - t["Bernhard Modern"] = true; - t["Berthold City"] = true; - t.Bodoni = true; - t["Bauer Bodoni"] = true; - t["Book Antiqua"] = true; - t.Bookman = true; - t["Bordeaux Roman"] = true; - t["Californian FB"] = true; - t.Calisto = true; - t.Calvert = true; - t.Capitals = true; - t.Cambria = true; - t.Cartier = true; - t.Caslon = true; - t.Catull = true; - t.Centaur = true; - t["Century Old Style"] = true; - t["Century Schoolbook"] = true; - t.Chaparral = true; - t["Charis SIL"] = true; - t.Cheltenham = true; - t["Cholla Slab"] = true; - t.Clarendon = true; - t.Clearface = true; - t.Cochin = true; - t.Colonna = true; - t["Computer Modern"] = true; - t["Concrete Roman"] = true; - t.Constantia = true; - t["Cooper Black"] = true; - t.Corona = true; - t.Ecotype = true; - t.Egyptienne = true; - t.Elephant = true; - t.Excelsior = true; - t.Fairfield = true; - t["FF Scala"] = true; - t.Folkard = true; - t.Footlight = true; - t.FreeSerif = true; - t["Friz Quadrata"] = true; - t.Garamond = true; - t.Gentium = true; - t.Georgia = true; - t.Gloucester = true; - t["Goudy Old Style"] = true; - t["Goudy Schoolbook"] = true; - t["Goudy Pro Font"] = true; - t.Granjon = true; - t["Guardian Egyptian"] = true; - t.Heather = true; - t.Hercules = true; - t["High Tower Text"] = true; - t.Hiroshige = true; - t["Hoefler Text"] = true; - t["Humana Serif"] = true; - t.Imprint = true; - t["Ionic No. 5"] = true; - t.Janson = true; - t.Joanna = true; - t.Korinna = true; - t.Lexicon = true; - t.LiberationSerif = true; - t["Liberation Serif"] = true; - t["Linux Libertine"] = true; - t.Literaturnaya = true; - t.Lucida = true; - t["Lucida Bright"] = true; - t.Melior = true; - t.Memphis = true; - t.Miller = true; - t.Minion = true; - t.Modern = true; - t["Mona Lisa"] = true; - t["Mrs Eaves"] = true; - t["MS Serif"] = true; - t["Museo Slab"] = true; - t["New York"] = true; - t["Nimbus Roman"] = true; - t["NPS Rawlinson Roadway"] = true; - t.NuptialScript = true; - t.Palatino = true; - t.Perpetua = true; - t.Plantin = true; - t["Plantin Schoolbook"] = true; - t.Playbill = true; - t["Poor Richard"] = true; - t["Rawlinson Roadway"] = true; - t.Renault = true; - t.Requiem = true; - t.Rockwell = true; - t.Roman = true; - t["Rotis Serif"] = true; - t.Sabon = true; - t.Scala = true; - t.Seagull = true; - t.Sistina = true; - t.Souvenir = true; - t.STIX = true; - t["Stone Informal"] = true; - t["Stone Serif"] = true; - t.Sylfaen = true; - t.Times = true; - t.Trajan = true; - t["Trinité"] = true; - t["Trump Mediaeval"] = true; - t.Utopia = true; - t["Vale Type"] = true; - t["Bitstream Vera"] = true; - t["Vera Serif"] = true; - t.Versailles = true; - t.Wanted = true; - t.Weiss = true; - t["Wide Latin"] = true; - t.Windsor = true; - t.XITS = true; -}); -exports.getSerifFonts = getSerifFonts; -const getSymbolsFonts = (0, _core_utils.getLookupTableFactory)(function (t) { - t.Dingbats = true; - t.Symbol = true; - t.ZapfDingbats = true; -}); -exports.getSymbolsFonts = getSymbolsFonts; -const getGlyphMapForStandardFonts = (0, _core_utils.getLookupTableFactory)(function (t) { - t[2] = 10; - t[3] = 32; - t[4] = 33; - t[5] = 34; - t[6] = 35; - t[7] = 36; - t[8] = 37; - t[9] = 38; - t[10] = 39; - t[11] = 40; - t[12] = 41; - t[13] = 42; - t[14] = 43; - t[15] = 44; - t[16] = 45; - t[17] = 46; - t[18] = 47; - t[19] = 48; - t[20] = 49; - t[21] = 50; - t[22] = 51; - t[23] = 52; - t[24] = 53; - t[25] = 54; - t[26] = 55; - t[27] = 56; - t[28] = 57; - t[29] = 58; - t[30] = 894; - t[31] = 60; - t[32] = 61; - t[33] = 62; - t[34] = 63; - t[35] = 64; - t[36] = 65; - t[37] = 66; - t[38] = 67; - t[39] = 68; - t[40] = 69; - t[41] = 70; - t[42] = 71; - t[43] = 72; - t[44] = 73; - t[45] = 74; - t[46] = 75; - t[47] = 76; - t[48] = 77; - t[49] = 78; - t[50] = 79; - t[51] = 80; - t[52] = 81; - t[53] = 82; - t[54] = 83; - t[55] = 84; - t[56] = 85; - t[57] = 86; - t[58] = 87; - t[59] = 88; - t[60] = 89; - t[61] = 90; - t[62] = 91; - t[63] = 92; - t[64] = 93; - t[65] = 94; - t[66] = 95; - t[67] = 96; - t[68] = 97; - t[69] = 98; - t[70] = 99; - t[71] = 100; - t[72] = 101; - t[73] = 102; - t[74] = 103; - t[75] = 104; - t[76] = 105; - t[77] = 106; - t[78] = 107; - t[79] = 108; - t[80] = 109; - t[81] = 110; - t[82] = 111; - t[83] = 112; - t[84] = 113; - t[85] = 114; - t[86] = 115; - t[87] = 116; - t[88] = 117; - t[89] = 118; - t[90] = 119; - t[91] = 120; - t[92] = 121; - t[93] = 122; - t[94] = 123; - t[95] = 124; - t[96] = 125; - t[97] = 126; - t[98] = 196; - t[99] = 197; - t[100] = 199; - t[101] = 201; - t[102] = 209; - t[103] = 214; - t[104] = 220; - t[105] = 225; - t[106] = 224; - t[107] = 226; - t[108] = 228; - t[109] = 227; - t[110] = 229; - t[111] = 231; - t[112] = 233; - t[113] = 232; - t[114] = 234; - t[115] = 235; - t[116] = 237; - t[117] = 236; - t[118] = 238; - t[119] = 239; - t[120] = 241; - t[121] = 243; - t[122] = 242; - t[123] = 244; - t[124] = 246; - t[125] = 245; - t[126] = 250; - t[127] = 249; - t[128] = 251; - t[129] = 252; - t[130] = 8224; - t[131] = 176; - t[132] = 162; - t[133] = 163; - t[134] = 167; - t[135] = 8226; - t[136] = 182; - t[137] = 223; - t[138] = 174; - t[139] = 169; - t[140] = 8482; - t[141] = 180; - t[142] = 168; - t[143] = 8800; - t[144] = 198; - t[145] = 216; - t[146] = 8734; - t[147] = 177; - t[148] = 8804; - t[149] = 8805; - t[150] = 165; - t[151] = 181; - t[152] = 8706; - t[153] = 8721; - t[154] = 8719; - t[156] = 8747; - t[157] = 170; - t[158] = 186; - t[159] = 8486; - t[160] = 230; - t[161] = 248; - t[162] = 191; - t[163] = 161; - t[164] = 172; - t[165] = 8730; - t[166] = 402; - t[167] = 8776; - t[168] = 8710; - t[169] = 171; - t[170] = 187; - t[171] = 8230; - t[200] = 193; - t[203] = 205; - t[210] = 218; - t[223] = 711; - t[224] = 321; - t[225] = 322; - t[226] = 352; - t[227] = 353; - t[228] = 381; - t[229] = 382; - t[233] = 221; - t[234] = 253; - t[252] = 263; - t[253] = 268; - t[254] = 269; - t[258] = 258; - t[260] = 260; - t[261] = 261; - t[265] = 280; - t[266] = 281; - t[267] = 282; - t[268] = 283; - t[269] = 313; - t[275] = 323; - t[276] = 324; - t[278] = 328; - t[283] = 344; - t[284] = 345; - t[285] = 346; - t[286] = 347; - t[292] = 367; - t[295] = 377; - t[296] = 378; - t[298] = 380; - t[305] = 963; - t[306] = 964; - t[307] = 966; - t[308] = 8215; - t[309] = 8252; - t[310] = 8319; - t[311] = 8359; - t[312] = 8592; - t[313] = 8593; - t[337] = 9552; - t[493] = 1039; - t[494] = 1040; - t[705] = 1524; - t[706] = 8362; - t[710] = 64288; - t[711] = 64298; - t[759] = 1617; - t[761] = 1776; - t[763] = 1778; - t[775] = 1652; - t[777] = 1764; - t[778] = 1780; - t[779] = 1781; - t[780] = 1782; - t[782] = 771; - t[783] = 64726; - t[786] = 8363; - t[788] = 8532; - t[790] = 768; - t[791] = 769; - t[792] = 768; - t[795] = 803; - t[797] = 64336; - t[798] = 64337; - t[799] = 64342; - t[800] = 64343; - t[801] = 64344; - t[802] = 64345; - t[803] = 64362; - t[804] = 64363; - t[805] = 64364; - t[2424] = 7821; - t[2425] = 7822; - t[2426] = 7823; - t[2427] = 7824; - t[2428] = 7825; - t[2429] = 7826; - t[2430] = 7827; - t[2433] = 7682; - t[2678] = 8045; - t[2679] = 8046; - t[2830] = 1552; - t[2838] = 686; - t[2840] = 751; - t[2842] = 753; - t[2843] = 754; - t[2844] = 755; - t[2846] = 757; - t[2856] = 767; - t[2857] = 848; - t[2858] = 849; - t[2862] = 853; - t[2863] = 854; - t[2864] = 855; - t[2865] = 861; - t[2866] = 862; - t[2906] = 7460; - t[2908] = 7462; - t[2909] = 7463; - t[2910] = 7464; - t[2912] = 7466; - t[2913] = 7467; - t[2914] = 7468; - t[2916] = 7470; - t[2917] = 7471; - t[2918] = 7472; - t[2920] = 7474; - t[2921] = 7475; - t[2922] = 7476; - t[2924] = 7478; - t[2925] = 7479; - t[2926] = 7480; - t[2928] = 7482; - t[2929] = 7483; - t[2930] = 7484; - t[2932] = 7486; - t[2933] = 7487; - t[2934] = 7488; - t[2936] = 7490; - t[2937] = 7491; - t[2938] = 7492; - t[2940] = 7494; - t[2941] = 7495; - t[2942] = 7496; - t[2944] = 7498; - t[2946] = 7500; - t[2948] = 7502; - t[2950] = 7504; - t[2951] = 7505; - t[2952] = 7506; - t[2954] = 7508; - t[2955] = 7509; - t[2956] = 7510; - t[2958] = 7512; - t[2959] = 7513; - t[2960] = 7514; - t[2962] = 7516; - t[2963] = 7517; - t[2964] = 7518; - t[2966] = 7520; - t[2967] = 7521; - t[2968] = 7522; - t[2970] = 7524; - t[2971] = 7525; - t[2972] = 7526; - t[2974] = 7528; - t[2975] = 7529; - t[2976] = 7530; - t[2978] = 1537; - t[2979] = 1538; - t[2980] = 1539; - t[2982] = 1549; - t[2983] = 1551; - t[2984] = 1552; - t[2986] = 1554; - t[2987] = 1555; - t[2988] = 1556; - t[2990] = 1623; - t[2991] = 1624; - t[2995] = 1775; - t[2999] = 1791; - t[3002] = 64290; - t[3003] = 64291; - t[3004] = 64292; - t[3006] = 64294; - t[3007] = 64295; - t[3008] = 64296; - t[3011] = 1900; - t[3014] = 8223; - t[3015] = 8244; - t[3017] = 7532; - t[3018] = 7533; - t[3019] = 7534; - t[3075] = 7590; - t[3076] = 7591; - t[3079] = 7594; - t[3080] = 7595; - t[3083] = 7598; - t[3084] = 7599; - t[3087] = 7602; - t[3088] = 7603; - t[3091] = 7606; - t[3092] = 7607; - t[3095] = 7610; - t[3096] = 7611; - t[3099] = 7614; - t[3100] = 7615; - t[3103] = 7618; - t[3104] = 7619; - t[3107] = 8337; - t[3108] = 8338; - t[3116] = 1884; - t[3119] = 1885; - t[3120] = 1885; - t[3123] = 1886; - t[3124] = 1886; - t[3127] = 1887; - t[3128] = 1887; - t[3131] = 1888; - t[3132] = 1888; - t[3135] = 1889; - t[3136] = 1889; - t[3139] = 1890; - t[3140] = 1890; - t[3143] = 1891; - t[3144] = 1891; - t[3147] = 1892; - t[3148] = 1892; - t[3153] = 580; - t[3154] = 581; - t[3157] = 584; - t[3158] = 585; - t[3161] = 588; - t[3162] = 589; - t[3165] = 891; - t[3166] = 892; - t[3169] = 1274; - t[3170] = 1275; - t[3173] = 1278; - t[3174] = 1279; - t[3181] = 7622; - t[3182] = 7623; - t[3282] = 11799; - t[3316] = 578; - t[3379] = 42785; - t[3393] = 1159; - t[3416] = 8377; -}); -exports.getGlyphMapForStandardFonts = getGlyphMapForStandardFonts; -const getSupplementalGlyphMapForArialBlack = (0, _core_utils.getLookupTableFactory)(function (t) { - t[227] = 322; - t[264] = 261; - t[291] = 346; -}); -exports.getSupplementalGlyphMapForArialBlack = getSupplementalGlyphMapForArialBlack; -const getSupplementalGlyphMapForCalibri = (0, _core_utils.getLookupTableFactory)(function (t) { - t[1] = 32; - t[4] = 65; - t[6] = 193; - t[17] = 66; - t[18] = 67; - t[21] = 268; - t[24] = 68; - t[28] = 69; - t[30] = 201; - t[32] = 282; - t[38] = 70; - t[39] = 71; - t[44] = 72; - t[47] = 73; - t[49] = 205; - t[58] = 74; - t[60] = 75; - t[62] = 76; - t[68] = 77; - t[69] = 78; - t[75] = 79; - t[87] = 80; - t[89] = 81; - t[90] = 82; - t[92] = 344; - t[94] = 83; - t[97] = 352; - t[100] = 84; - t[104] = 85; - t[115] = 86; - t[116] = 87; - t[121] = 88; - t[122] = 89; - t[124] = 221; - t[127] = 90; - t[129] = 381; - t[258] = 97; - t[260] = 225; - t[268] = 261; - t[271] = 98; - t[272] = 99; - t[273] = 263; - t[275] = 269; - t[282] = 100; - t[286] = 101; - t[288] = 233; - t[290] = 283; - t[295] = 281; - t[296] = 102; - t[336] = 103; - t[346] = 104; - t[349] = 105; - t[351] = 237; - t[361] = 106; - t[364] = 107; - t[367] = 108; - t[371] = 322; - t[373] = 109; - t[374] = 110; - t[381] = 111; - t[383] = 243; - t[393] = 112; - t[395] = 113; - t[396] = 114; - t[398] = 345; - t[400] = 115; - t[401] = 347; - t[403] = 353; - t[410] = 116; - t[437] = 117; - t[448] = 118; - t[449] = 119; - t[454] = 120; - t[455] = 121; - t[457] = 253; - t[460] = 122; - t[462] = 382; - t[463] = 380; - t[853] = 44; - t[855] = 58; - t[856] = 46; - t[876] = 47; - t[878] = 45; - t[882] = 45; - t[894] = 40; - t[895] = 41; - t[896] = 91; - t[897] = 93; - t[923] = 64; - t[1004] = 48; - t[1005] = 49; - t[1006] = 50; - t[1007] = 51; - t[1008] = 52; - t[1009] = 53; - t[1010] = 54; - t[1011] = 55; - t[1012] = 56; - t[1013] = 57; - t[1081] = 37; - t[1085] = 43; - t[1086] = 45; -}); -exports.getSupplementalGlyphMapForCalibri = getSupplementalGlyphMapForCalibri; - -function getStandardFontName(name) { - const fontName = (0, _fonts_utils.normalizeFontName)(name); - const stdFontMap = getStdFontMap(); - return stdFontMap[fontName]; -} - -/***/ }), -/* 48 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.ToUnicodeMap = exports.IdentityToUnicodeMap = void 0; - -var _util = __w_pdfjs_require__(2); - -class ToUnicodeMap { - constructor(cmap = []) { - this._map = cmap; - } - - get length() { - return this._map.length; - } - - forEach(callback) { - for (const charCode in this._map) { - callback(charCode, this._map[charCode].charCodeAt(0)); - } - } - - has(i) { - return this._map[i] !== undefined; - } - - get(i) { - return this._map[i]; - } - - charCodeOf(value) { - const map = this._map; - - if (map.length <= 0x10000) { - return map.indexOf(value); - } - - for (const charCode in map) { - if (map[charCode] === value) { - return charCode | 0; - } - } - - return -1; - } - - amend(map) { - for (const charCode in map) { - this._map[charCode] = map[charCode]; - } - } - -} - -exports.ToUnicodeMap = ToUnicodeMap; - -class IdentityToUnicodeMap { - constructor(firstChar, lastChar) { - this.firstChar = firstChar; - this.lastChar = lastChar; - } - - get length() { - return this.lastChar + 1 - this.firstChar; - } - - forEach(callback) { - for (let i = this.firstChar, ii = this.lastChar; i <= ii; i++) { - callback(i, i); - } - } - - has(i) { - return this.firstChar <= i && i <= this.lastChar; - } - - get(i) { - if (this.firstChar <= i && i <= this.lastChar) { - return String.fromCharCode(i); - } - - return undefined; - } - - charCodeOf(v) { - return Number.isInteger(v) && v >= this.firstChar && v <= this.lastChar ? v : -1; - } - - amend(map) { - (0, _util.unreachable)("Should not call amend()"); - } - -} - -exports.IdentityToUnicodeMap = IdentityToUnicodeMap; - -/***/ }), -/* 49 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.CFFFont = void 0; - -var _cff_parser = __w_pdfjs_require__(45); - -var _fonts_utils = __w_pdfjs_require__(18); - -var _util = __w_pdfjs_require__(2); - -class CFFFont { - constructor(file, properties) { - this.properties = properties; - const parser = new _cff_parser.CFFParser(file, properties, _fonts_utils.SEAC_ANALYSIS_ENABLED); - this.cff = parser.parse(); - this.cff.duplicateFirstGlyph(); - const compiler = new _cff_parser.CFFCompiler(this.cff); - this.seacs = this.cff.seacs; - - try { - this.data = compiler.compile(); - } catch (e) { - (0, _util.warn)("Failed to compile font " + properties.loadedName); - this.data = file; - } - - this._createBuiltInEncoding(); - } - - get numGlyphs() { - return this.cff.charStrings.count; - } - - getCharset() { - return this.cff.charset.charset; - } - - getGlyphMapping() { - const cff = this.cff; - const properties = this.properties; - const charsets = cff.charset.charset; - let charCodeToGlyphId; - let glyphId; - - if (properties.composite) { - charCodeToGlyphId = Object.create(null); - let charCode; - - if (cff.isCIDFont) { - for (glyphId = 0; glyphId < charsets.length; glyphId++) { - const cid = charsets[glyphId]; - charCode = properties.cMap.charCodeOf(cid); - charCodeToGlyphId[charCode] = glyphId; - } - } else { - for (glyphId = 0; glyphId < cff.charStrings.count; glyphId++) { - charCode = properties.cMap.charCodeOf(glyphId); - charCodeToGlyphId[charCode] = glyphId; - } - } - - return charCodeToGlyphId; - } - - let encoding = cff.encoding ? cff.encoding.encoding : null; - - if (properties.isInternalFont) { - encoding = properties.defaultEncoding; - } - - charCodeToGlyphId = (0, _fonts_utils.type1FontGlyphMapping)(properties, encoding, charsets); - return charCodeToGlyphId; - } - - hasGlyphId(id) { - return this.cff.hasGlyphId(id); - } - - _createBuiltInEncoding() { - const { - charset, - encoding - } = this.cff; - - if (!charset || !encoding) { - return; - } - - const charsets = charset.charset, - encodings = encoding.encoding; - const map = []; - - for (const charCode in encodings) { - const glyphId = encodings[charCode]; - - if (glyphId >= 0) { - const glyphName = charsets[glyphId]; - - if (glyphName) { - map[charCode] = glyphName; - } - } - } - - if (map.length > 0) { - this.properties.builtInEncoding = map; - } - } - -} - -exports.CFFFont = CFFFont; - -/***/ }), -/* 50 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.FontRendererFactory = void 0; - -var _util = __w_pdfjs_require__(2); - -var _cff_parser = __w_pdfjs_require__(45); - -var _glyphlist = __w_pdfjs_require__(20); - -var _encodings = __w_pdfjs_require__(19); - -var _stream = __w_pdfjs_require__(10); - -function getLong(data, offset) { - return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]; -} - -function getUshort(data, offset) { - return data[offset] << 8 | data[offset + 1]; -} - -function getSubroutineBias(subrs) { - const numSubrs = subrs.length; - let bias = 32768; - - if (numSubrs < 1240) { - bias = 107; - } else if (numSubrs < 33900) { - bias = 1131; - } - - return bias; -} - -function parseCmap(data, start, end) { - const offset = getUshort(data, start + 2) === 1 ? getLong(data, start + 8) : getLong(data, start + 16); - const format = getUshort(data, start + offset); - let ranges, p, i; - - if (format === 4) { - getUshort(data, start + offset + 2); - const segCount = getUshort(data, start + offset + 6) >> 1; - p = start + offset + 14; - ranges = []; - - for (i = 0; i < segCount; i++, p += 2) { - ranges[i] = { - end: getUshort(data, p) - }; - } - - p += 2; - - for (i = 0; i < segCount; i++, p += 2) { - ranges[i].start = getUshort(data, p); - } - - for (i = 0; i < segCount; i++, p += 2) { - ranges[i].idDelta = getUshort(data, p); - } - - for (i = 0; i < segCount; i++, p += 2) { - let idOffset = getUshort(data, p); - - if (idOffset === 0) { - continue; - } - - ranges[i].ids = []; - - for (let j = 0, jj = ranges[i].end - ranges[i].start + 1; j < jj; j++) { - ranges[i].ids[j] = getUshort(data, p + idOffset); - idOffset += 2; - } - } - - return ranges; - } else if (format === 12) { - getLong(data, start + offset + 4); - const groups = getLong(data, start + offset + 12); - p = start + offset + 16; - ranges = []; - - for (i = 0; i < groups; i++) { - ranges.push({ - start: getLong(data, p), - end: getLong(data, p + 4), - idDelta: getLong(data, p + 8) - getLong(data, p) - }); - p += 12; - } - - return ranges; - } - - throw new _util.FormatError(`unsupported cmap: ${format}`); -} - -function parseCff(data, start, end, seacAnalysisEnabled) { - const properties = {}; - const parser = new _cff_parser.CFFParser(new _stream.Stream(data, start, end - start), properties, seacAnalysisEnabled); - const cff = parser.parse(); - return { - glyphs: cff.charStrings.objects, - subrs: cff.topDict.privateDict && cff.topDict.privateDict.subrsIndex && cff.topDict.privateDict.subrsIndex.objects, - gsubrs: cff.globalSubrIndex && cff.globalSubrIndex.objects, - isCFFCIDFont: cff.isCIDFont, - fdSelect: cff.fdSelect, - fdArray: cff.fdArray - }; -} - -function parseGlyfTable(glyf, loca, isGlyphLocationsLong) { - let itemSize, itemDecode; - - if (isGlyphLocationsLong) { - itemSize = 4; - - itemDecode = function fontItemDecodeLong(data, offset) { - return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]; - }; - } else { - itemSize = 2; - - itemDecode = function fontItemDecode(data, offset) { - return data[offset] << 9 | data[offset + 1] << 1; - }; - } - - const glyphs = []; - let startOffset = itemDecode(loca, 0); - - for (let j = itemSize; j < loca.length; j += itemSize) { - const endOffset = itemDecode(loca, j); - glyphs.push(glyf.subarray(startOffset, endOffset)); - startOffset = endOffset; - } - - return glyphs; -} - -function lookupCmap(ranges, unicode) { - const code = unicode.codePointAt(0); - let gid = 0, - l = 0, - r = ranges.length - 1; - - while (l < r) { - const c = l + r + 1 >> 1; - - if (code < ranges[c].start) { - r = c - 1; - } else { - l = c; - } - } - - if (ranges[l].start <= code && code <= ranges[l].end) { - gid = ranges[l].idDelta + (ranges[l].ids ? ranges[l].ids[code - ranges[l].start] : code) & 0xffff; - } - - return { - charCode: code, - glyphId: gid - }; -} - -function compileGlyf(code, cmds, font) { - function moveTo(x, y) { - cmds.push({ - cmd: "moveTo", - args: [x, y] - }); - } - - function lineTo(x, y) { - cmds.push({ - cmd: "lineTo", - args: [x, y] - }); - } - - function quadraticCurveTo(xa, ya, x, y) { - cmds.push({ - cmd: "quadraticCurveTo", - args: [xa, ya, x, y] - }); - } - - let i = 0; - const numberOfContours = (code[i] << 24 | code[i + 1] << 16) >> 16; - let flags; - let x = 0, - y = 0; - i += 10; - - if (numberOfContours < 0) { - do { - flags = code[i] << 8 | code[i + 1]; - const glyphIndex = code[i + 2] << 8 | code[i + 3]; - i += 4; - let arg1, arg2; - - if (flags & 0x01) { - arg1 = (code[i] << 24 | code[i + 1] << 16) >> 16; - arg2 = (code[i + 2] << 24 | code[i + 3] << 16) >> 16; - i += 4; - } else { - arg1 = code[i++]; - arg2 = code[i++]; - } - - if (flags & 0x02) { - x = arg1; - y = arg2; - } else { - x = 0; - y = 0; - } - - let scaleX = 1, - scaleY = 1, - scale01 = 0, - scale10 = 0; - - if (flags & 0x08) { - scaleX = scaleY = (code[i] << 24 | code[i + 1] << 16) / 1073741824; - i += 2; - } else if (flags & 0x40) { - scaleX = (code[i] << 24 | code[i + 1] << 16) / 1073741824; - scaleY = (code[i + 2] << 24 | code[i + 3] << 16) / 1073741824; - i += 4; - } else if (flags & 0x80) { - scaleX = (code[i] << 24 | code[i + 1] << 16) / 1073741824; - scale01 = (code[i + 2] << 24 | code[i + 3] << 16) / 1073741824; - scale10 = (code[i + 4] << 24 | code[i + 5] << 16) / 1073741824; - scaleY = (code[i + 6] << 24 | code[i + 7] << 16) / 1073741824; - i += 8; - } - - const subglyph = font.glyphs[glyphIndex]; - - if (subglyph) { - cmds.push({ - cmd: "save" - }, { - cmd: "transform", - args: [scaleX, scale01, scale10, scaleY, x, y] - }); - compileGlyf(subglyph, cmds, font); - cmds.push({ - cmd: "restore" - }); - } - } while (flags & 0x20); - } else { - const endPtsOfContours = []; - let j, jj; - - for (j = 0; j < numberOfContours; j++) { - endPtsOfContours.push(code[i] << 8 | code[i + 1]); - i += 2; - } - - const instructionLength = code[i] << 8 | code[i + 1]; - i += 2 + instructionLength; - const numberOfPoints = endPtsOfContours[endPtsOfContours.length - 1] + 1; - const points = []; - - while (points.length < numberOfPoints) { - flags = code[i++]; - let repeat = 1; - - if (flags & 0x08) { - repeat += code[i++]; - } - - while (repeat-- > 0) { - points.push({ - flags - }); - } - } - - for (j = 0; j < numberOfPoints; j++) { - switch (points[j].flags & 0x12) { - case 0x00: - x += (code[i] << 24 | code[i + 1] << 16) >> 16; - i += 2; - break; - - case 0x02: - x -= code[i++]; - break; - - case 0x12: - x += code[i++]; - break; - } - - points[j].x = x; - } - - for (j = 0; j < numberOfPoints; j++) { - switch (points[j].flags & 0x24) { - case 0x00: - y += (code[i] << 24 | code[i + 1] << 16) >> 16; - i += 2; - break; - - case 0x04: - y -= code[i++]; - break; - - case 0x24: - y += code[i++]; - break; - } - - points[j].y = y; - } - - let startPoint = 0; - - for (i = 0; i < numberOfContours; i++) { - const endPoint = endPtsOfContours[i]; - const contour = points.slice(startPoint, endPoint + 1); - - if (contour[0].flags & 1) { - contour.push(contour[0]); - } else if (contour[contour.length - 1].flags & 1) { - contour.unshift(contour[contour.length - 1]); - } else { - const p = { - flags: 1, - x: (contour[0].x + contour[contour.length - 1].x) / 2, - y: (contour[0].y + contour[contour.length - 1].y) / 2 - }; - contour.unshift(p); - contour.push(p); - } - - moveTo(contour[0].x, contour[0].y); - - for (j = 1, jj = contour.length; j < jj; j++) { - if (contour[j].flags & 1) { - lineTo(contour[j].x, contour[j].y); - } else if (contour[j + 1].flags & 1) { - quadraticCurveTo(contour[j].x, contour[j].y, contour[j + 1].x, contour[j + 1].y); - j++; - } else { - quadraticCurveTo(contour[j].x, contour[j].y, (contour[j].x + contour[j + 1].x) / 2, (contour[j].y + contour[j + 1].y) / 2); - } - } - - startPoint = endPoint + 1; - } - } -} - -function compileCharString(charStringCode, cmds, font, glyphId) { - function moveTo(x, y) { - cmds.push({ - cmd: "moveTo", - args: [x, y] - }); - } - - function lineTo(x, y) { - cmds.push({ - cmd: "lineTo", - args: [x, y] - }); - } - - function bezierCurveTo(x1, y1, x2, y2, x, y) { - cmds.push({ - cmd: "bezierCurveTo", - args: [x1, y1, x2, y2, x, y] - }); - } - - const stack = []; - let x = 0, - y = 0; - let stems = 0; - - function parse(code) { - let i = 0; - - while (i < code.length) { - let stackClean = false; - let v = code[i++]; - let xa, xb, ya, yb, y1, y2, y3, n, subrCode; - - switch (v) { - case 1: - stems += stack.length >> 1; - stackClean = true; - break; - - case 3: - stems += stack.length >> 1; - stackClean = true; - break; - - case 4: - y += stack.pop(); - moveTo(x, y); - stackClean = true; - break; - - case 5: - while (stack.length > 0) { - x += stack.shift(); - y += stack.shift(); - lineTo(x, y); - } - - break; - - case 6: - while (stack.length > 0) { - x += stack.shift(); - lineTo(x, y); - - if (stack.length === 0) { - break; - } - - y += stack.shift(); - lineTo(x, y); - } - - break; - - case 7: - while (stack.length > 0) { - y += stack.shift(); - lineTo(x, y); - - if (stack.length === 0) { - break; - } - - x += stack.shift(); - lineTo(x, y); - } - - break; - - case 8: - while (stack.length > 0) { - xa = x + stack.shift(); - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb + stack.shift(); - bezierCurveTo(xa, ya, xb, yb, x, y); - } - - break; - - case 10: - n = stack.pop(); - subrCode = null; - - if (font.isCFFCIDFont) { - const fdIndex = font.fdSelect.getFDIndex(glyphId); - - if (fdIndex >= 0 && fdIndex < font.fdArray.length) { - const fontDict = font.fdArray[fdIndex]; - let subrs; - - if (fontDict.privateDict && fontDict.privateDict.subrsIndex) { - subrs = fontDict.privateDict.subrsIndex.objects; - } - - if (subrs) { - n += getSubroutineBias(subrs); - subrCode = subrs[n]; - } - } else { - (0, _util.warn)("Invalid fd index for glyph index."); - } - } else { - subrCode = font.subrs[n + font.subrsBias]; - } - - if (subrCode) { - parse(subrCode); - } - - break; - - case 11: - return; - - case 12: - v = code[i++]; - - switch (v) { - case 34: - xa = x + stack.shift(); - xb = xa + stack.shift(); - y1 = y + stack.shift(); - x = xb + stack.shift(); - bezierCurveTo(xa, y, xb, y1, x, y1); - xa = x + stack.shift(); - xb = xa + stack.shift(); - x = xb + stack.shift(); - bezierCurveTo(xa, y1, xb, y, x, y); - break; - - case 35: - xa = x + stack.shift(); - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb + stack.shift(); - bezierCurveTo(xa, ya, xb, yb, x, y); - xa = x + stack.shift(); - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb + stack.shift(); - bezierCurveTo(xa, ya, xb, yb, x, y); - stack.pop(); - break; - - case 36: - xa = x + stack.shift(); - y1 = y + stack.shift(); - xb = xa + stack.shift(); - y2 = y1 + stack.shift(); - x = xb + stack.shift(); - bezierCurveTo(xa, y1, xb, y2, x, y2); - xa = x + stack.shift(); - xb = xa + stack.shift(); - y3 = y2 + stack.shift(); - x = xb + stack.shift(); - bezierCurveTo(xa, y2, xb, y3, x, y); - break; - - case 37: - const x0 = x, - y0 = y; - xa = x + stack.shift(); - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb + stack.shift(); - bezierCurveTo(xa, ya, xb, yb, x, y); - xa = x + stack.shift(); - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb; - y = yb; - - if (Math.abs(x - x0) > Math.abs(y - y0)) { - x += stack.shift(); - } else { - y += stack.shift(); - } - - bezierCurveTo(xa, ya, xb, yb, x, y); - break; - - default: - throw new _util.FormatError(`unknown operator: 12 ${v}`); - } - - break; - - case 14: - if (stack.length >= 4) { - const achar = stack.pop(); - const bchar = stack.pop(); - y = stack.pop(); - x = stack.pop(); - cmds.push({ - cmd: "save" - }, { - cmd: "translate", - args: [x, y] - }); - let cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[achar]])); - compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId); - cmds.push({ - cmd: "restore" - }); - cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[bchar]])); - compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId); - } - - return; - - case 18: - stems += stack.length >> 1; - stackClean = true; - break; - - case 19: - stems += stack.length >> 1; - i += stems + 7 >> 3; - stackClean = true; - break; - - case 20: - stems += stack.length >> 1; - i += stems + 7 >> 3; - stackClean = true; - break; - - case 21: - y += stack.pop(); - x += stack.pop(); - moveTo(x, y); - stackClean = true; - break; - - case 22: - x += stack.pop(); - moveTo(x, y); - stackClean = true; - break; - - case 23: - stems += stack.length >> 1; - stackClean = true; - break; - - case 24: - while (stack.length > 2) { - xa = x + stack.shift(); - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb + stack.shift(); - bezierCurveTo(xa, ya, xb, yb, x, y); - } - - x += stack.shift(); - y += stack.shift(); - lineTo(x, y); - break; - - case 25: - while (stack.length > 6) { - x += stack.shift(); - y += stack.shift(); - lineTo(x, y); - } - - xa = x + stack.shift(); - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb + stack.shift(); - bezierCurveTo(xa, ya, xb, yb, x, y); - break; - - case 26: - if (stack.length % 2) { - x += stack.shift(); - } - - while (stack.length > 0) { - xa = x; - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb; - y = yb + stack.shift(); - bezierCurveTo(xa, ya, xb, yb, x, y); - } - - break; - - case 27: - if (stack.length % 2) { - y += stack.shift(); - } - - while (stack.length > 0) { - xa = x + stack.shift(); - ya = y; - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb; - bezierCurveTo(xa, ya, xb, yb, x, y); - } - - break; - - case 28: - stack.push((code[i] << 24 | code[i + 1] << 16) >> 16); - i += 2; - break; - - case 29: - n = stack.pop() + font.gsubrsBias; - subrCode = font.gsubrs[n]; - - if (subrCode) { - parse(subrCode); - } - - break; - - case 30: - while (stack.length > 0) { - xa = x; - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb + (stack.length === 1 ? stack.shift() : 0); - bezierCurveTo(xa, ya, xb, yb, x, y); - - if (stack.length === 0) { - break; - } - - xa = x + stack.shift(); - ya = y; - xb = xa + stack.shift(); - yb = ya + stack.shift(); - y = yb + stack.shift(); - x = xb + (stack.length === 1 ? stack.shift() : 0); - bezierCurveTo(xa, ya, xb, yb, x, y); - } - - break; - - case 31: - while (stack.length > 0) { - xa = x + stack.shift(); - ya = y; - xb = xa + stack.shift(); - yb = ya + stack.shift(); - y = yb + stack.shift(); - x = xb + (stack.length === 1 ? stack.shift() : 0); - bezierCurveTo(xa, ya, xb, yb, x, y); - - if (stack.length === 0) { - break; - } - - xa = x; - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb + (stack.length === 1 ? stack.shift() : 0); - bezierCurveTo(xa, ya, xb, yb, x, y); - } - - break; - - default: - if (v < 32) { - throw new _util.FormatError(`unknown operator: ${v}`); - } - - if (v < 247) { - stack.push(v - 139); - } else if (v < 251) { - stack.push((v - 247) * 256 + code[i++] + 108); - } else if (v < 255) { - stack.push(-(v - 251) * 256 - code[i++] - 108); - } else { - stack.push((code[i] << 24 | code[i + 1] << 16 | code[i + 2] << 8 | code[i + 3]) / 65536); - i += 4; - } - - break; - } - - if (stackClean) { - stack.length = 0; - } - } - } - - parse(charStringCode); -} - -const NOOP = []; - -class CompiledFont { - constructor(fontMatrix) { - if (this.constructor === CompiledFont) { - (0, _util.unreachable)("Cannot initialize CompiledFont."); - } - - this.fontMatrix = fontMatrix; - this.compiledGlyphs = Object.create(null); - this.compiledCharCodeToGlyphId = Object.create(null); - } - - getPathJs(unicode) { - const { - charCode, - glyphId - } = lookupCmap(this.cmap, unicode); - let fn = this.compiledGlyphs[glyphId]; - - if (!fn) { - try { - fn = this.compileGlyph(this.glyphs[glyphId], glyphId); - this.compiledGlyphs[glyphId] = fn; - } catch (ex) { - this.compiledGlyphs[glyphId] = NOOP; - - if (this.compiledCharCodeToGlyphId[charCode] === undefined) { - this.compiledCharCodeToGlyphId[charCode] = glyphId; - } - - throw ex; - } - } - - if (this.compiledCharCodeToGlyphId[charCode] === undefined) { - this.compiledCharCodeToGlyphId[charCode] = glyphId; - } - - return fn; - } - - compileGlyph(code, glyphId) { - if (!code || code.length === 0 || code[0] === 14) { - return NOOP; - } - - let fontMatrix = this.fontMatrix; - - if (this.isCFFCIDFont) { - const fdIndex = this.fdSelect.getFDIndex(glyphId); - - if (fdIndex >= 0 && fdIndex < this.fdArray.length) { - const fontDict = this.fdArray[fdIndex]; - fontMatrix = fontDict.getByName("FontMatrix") || _util.FONT_IDENTITY_MATRIX; - } else { - (0, _util.warn)("Invalid fd index for glyph index."); - } - } - - const cmds = [{ - cmd: "save" - }, { - cmd: "transform", - args: fontMatrix.slice() - }, { - cmd: "scale", - args: ["size", "-size"] - }]; - this.compileGlyphImpl(code, cmds, glyphId); - cmds.push({ - cmd: "restore" - }); - return cmds; - } - - compileGlyphImpl() { - (0, _util.unreachable)("Children classes should implement this."); - } - - hasBuiltPath(unicode) { - const { - charCode, - glyphId - } = lookupCmap(this.cmap, unicode); - return this.compiledGlyphs[glyphId] !== undefined && this.compiledCharCodeToGlyphId[charCode] !== undefined; - } - -} - -class TrueTypeCompiled extends CompiledFont { - constructor(glyphs, cmap, fontMatrix) { - super(fontMatrix || [0.000488, 0, 0, 0.000488, 0, 0]); - this.glyphs = glyphs; - this.cmap = cmap; - } - - compileGlyphImpl(code, cmds) { - compileGlyf(code, cmds, this); - } - -} - -class Type2Compiled extends CompiledFont { - constructor(cffInfo, cmap, fontMatrix, glyphNameMap) { - super(fontMatrix || [0.001, 0, 0, 0.001, 0, 0]); - this.glyphs = cffInfo.glyphs; - this.gsubrs = cffInfo.gsubrs || []; - this.subrs = cffInfo.subrs || []; - this.cmap = cmap; - this.glyphNameMap = glyphNameMap || (0, _glyphlist.getGlyphsUnicode)(); - this.gsubrsBias = getSubroutineBias(this.gsubrs); - this.subrsBias = getSubroutineBias(this.subrs); - this.isCFFCIDFont = cffInfo.isCFFCIDFont; - this.fdSelect = cffInfo.fdSelect; - this.fdArray = cffInfo.fdArray; - } - - compileGlyphImpl(code, cmds, glyphId) { - compileCharString(code, cmds, this, glyphId); - } - -} - -class FontRendererFactory { - static create(font, seacAnalysisEnabled) { - const data = new Uint8Array(font.data); - let cmap, glyf, loca, cff, indexToLocFormat, unitsPerEm; - const numTables = getUshort(data, 4); - - for (let i = 0, p = 12; i < numTables; i++, p += 16) { - const tag = (0, _util.bytesToString)(data.subarray(p, p + 4)); - const offset = getLong(data, p + 8); - const length = getLong(data, p + 12); - - switch (tag) { - case "cmap": - cmap = parseCmap(data, offset); - break; - - case "glyf": - glyf = data.subarray(offset, offset + length); - break; - - case "loca": - loca = data.subarray(offset, offset + length); - break; - - case "head": - unitsPerEm = getUshort(data, offset + 18); - indexToLocFormat = getUshort(data, offset + 50); - break; - - case "CFF ": - cff = parseCff(data, offset, offset + length, seacAnalysisEnabled); - break; - } - } - - if (glyf) { - const fontMatrix = !unitsPerEm ? font.fontMatrix : [1 / unitsPerEm, 0, 0, 1 / unitsPerEm, 0, 0]; - return new TrueTypeCompiled(parseGlyfTable(glyf, loca, indexToLocFormat), cmap, fontMatrix); - } - - return new Type2Compiled(cff, cmap, font.fontMatrix, font.glyphNameMap); - } - -} - -exports.FontRendererFactory = FontRendererFactory; - -/***/ }), -/* 51 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.GlyfTable = void 0; -const ON_CURVE_POINT = 1 << 0; -const X_SHORT_VECTOR = 1 << 1; -const Y_SHORT_VECTOR = 1 << 2; -const REPEAT_FLAG = 1 << 3; -const X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR = 1 << 4; -const Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR = 1 << 5; -const OVERLAP_SIMPLE = 1 << 6; -const ARG_1_AND_2_ARE_WORDS = 1 << 0; -const ARGS_ARE_XY_VALUES = 1 << 1; -const WE_HAVE_A_SCALE = 1 << 3; -const MORE_COMPONENTS = 1 << 5; -const WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6; -const WE_HAVE_A_TWO_BY_TWO = 1 << 7; -const WE_HAVE_INSTRUCTIONS = 1 << 8; - -class GlyfTable { - constructor({ - glyfTable, - isGlyphLocationsLong, - locaTable, - numGlyphs - }) { - this.glyphs = []; - const loca = new DataView(locaTable.buffer, locaTable.byteOffset, locaTable.byteLength); - const glyf = new DataView(glyfTable.buffer, glyfTable.byteOffset, glyfTable.byteLength); - const offsetSize = isGlyphLocationsLong ? 4 : 2; - let prev = isGlyphLocationsLong ? loca.getUint32(0) : 2 * loca.getUint16(0); - let pos = 0; - - for (let i = 0; i < numGlyphs; i++) { - pos += offsetSize; - const next = isGlyphLocationsLong ? loca.getUint32(pos) : 2 * loca.getUint16(pos); - - if (next === prev) { - this.glyphs.push(new Glyph({})); - continue; - } - - const glyph = Glyph.parse(prev, glyf); - this.glyphs.push(glyph); - prev = next; - } - } - - getSize() { - return this.glyphs.reduce((a, g) => { - const size = g.getSize(); - return a + (size + 3 & ~3); - }, 0); - } - - write() { - const totalSize = this.getSize(); - const glyfTable = new DataView(new ArrayBuffer(totalSize)); - const isLocationLong = totalSize > 0x1fffe; - const offsetSize = isLocationLong ? 4 : 2; - const locaTable = new DataView(new ArrayBuffer((this.glyphs.length + 1) * offsetSize)); - - if (isLocationLong) { - locaTable.setUint32(0, 0); - } else { - locaTable.setUint16(0, 0); - } - - let pos = 0; - let locaIndex = 0; - - for (const glyph of this.glyphs) { - pos += glyph.write(pos, glyfTable); - pos = pos + 3 & ~3; - locaIndex += offsetSize; - - if (isLocationLong) { - locaTable.setUint32(locaIndex, pos); - } else { - locaTable.setUint16(locaIndex, pos >> 1); - } - } - - return { - isLocationLong, - loca: new Uint8Array(locaTable.buffer), - glyf: new Uint8Array(glyfTable.buffer) - }; - } - - scale(factors) { - for (let i = 0, ii = this.glyphs.length; i < ii; i++) { - this.glyphs[i].scale(factors[i]); - } - } - -} - -exports.GlyfTable = GlyfTable; - -class Glyph { - constructor({ - header = null, - simple = null, - composites = null - }) { - this.header = header; - this.simple = simple; - this.composites = composites; - } - - static parse(pos, glyf) { - const [read, header] = GlyphHeader.parse(pos, glyf); - pos += read; - - if (header.numberOfContours < 0) { - const composites = []; - - while (true) { - const [n, composite] = CompositeGlyph.parse(pos, glyf); - pos += n; - composites.push(composite); - - if (!(composite.flags & MORE_COMPONENTS)) { - break; - } - } - - return new Glyph({ - header, - composites - }); - } - - const simple = SimpleGlyph.parse(pos, glyf, header.numberOfContours); - return new Glyph({ - header, - simple - }); - } - - getSize() { - if (!this.header) { - return 0; - } - - const size = this.simple ? this.simple.getSize() : this.composites.reduce((a, c) => a + c.getSize(), 0); - return this.header.getSize() + size; - } - - write(pos, buf) { - if (!this.header) { - return 0; - } - - const spos = pos; - pos += this.header.write(pos, buf); - - if (this.simple) { - pos += this.simple.write(pos, buf); - } else { - for (const composite of this.composites) { - pos += composite.write(pos, buf); - } - } - - return pos - spos; - } - - scale(factor) { - if (!this.header) { - return; - } - - const xMiddle = (this.header.xMin + this.header.xMax) / 2; - this.header.scale(xMiddle, factor); - - if (this.simple) { - this.simple.scale(xMiddle, factor); - } else { - for (const composite of this.composites) { - composite.scale(xMiddle, factor); - } - } - } - -} - -class GlyphHeader { - constructor({ - numberOfContours, - xMin, - yMin, - xMax, - yMax - }) { - this.numberOfContours = numberOfContours; - this.xMin = xMin; - this.yMin = yMin; - this.xMax = xMax; - this.yMax = yMax; - } - - static parse(pos, glyf) { - return [10, new GlyphHeader({ - numberOfContours: glyf.getInt16(pos), - xMin: glyf.getInt16(pos + 2), - yMin: glyf.getInt16(pos + 4), - xMax: glyf.getInt16(pos + 6), - yMax: glyf.getInt16(pos + 8) - })]; - } - - getSize() { - return 10; - } - - write(pos, buf) { - buf.setInt16(pos, this.numberOfContours); - buf.setInt16(pos + 2, this.xMin); - buf.setInt16(pos + 4, this.yMin); - buf.setInt16(pos + 6, this.xMax); - buf.setInt16(pos + 8, this.yMax); - return 10; - } - - scale(x, factor) { - this.xMin = Math.round(x + (this.xMin - x) * factor); - this.xMax = Math.round(x + (this.xMax - x) * factor); - } - -} - -class Contour { - constructor({ - flags, - xCoordinates, - yCoordinates - }) { - this.xCoordinates = xCoordinates; - this.yCoordinates = yCoordinates; - this.flags = flags; - } - -} - -class SimpleGlyph { - constructor({ - contours, - instructions - }) { - this.contours = contours; - this.instructions = instructions; - } - - static parse(pos, glyf, numberOfContours) { - const endPtsOfContours = []; - - for (let i = 0; i < numberOfContours; i++) { - const endPt = glyf.getUint16(pos); - pos += 2; - endPtsOfContours.push(endPt); - } - - const numberOfPt = endPtsOfContours[numberOfContours - 1] + 1; - const instructionLength = glyf.getUint16(pos); - pos += 2; - const instructions = new Uint8Array(glyf).slice(pos, pos + instructionLength); - pos += instructionLength; - const flags = []; - - for (let i = 0; i < numberOfPt; pos++, i++) { - let flag = glyf.getUint8(pos); - flags.push(flag); - - if (flag & REPEAT_FLAG) { - const count = glyf.getUint8(++pos); - flag ^= REPEAT_FLAG; - - for (let m = 0; m < count; m++) { - flags.push(flag); - } - - i += count; - } - } - - const allXCoordinates = []; - let xCoordinates = []; - let yCoordinates = []; - let pointFlags = []; - const contours = []; - let endPtsOfContoursIndex = 0; - let lastCoordinate = 0; - - for (let i = 0; i < numberOfPt; i++) { - const flag = flags[i]; - - if (flag & X_SHORT_VECTOR) { - const x = glyf.getUint8(pos++); - lastCoordinate += flag & X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR ? x : -x; - xCoordinates.push(lastCoordinate); - } else if (flag & X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR) { - xCoordinates.push(lastCoordinate); - } else { - lastCoordinate += glyf.getInt16(pos); - pos += 2; - xCoordinates.push(lastCoordinate); - } - - if (endPtsOfContours[endPtsOfContoursIndex] === i) { - endPtsOfContoursIndex++; - allXCoordinates.push(xCoordinates); - xCoordinates = []; - } - } - - lastCoordinate = 0; - endPtsOfContoursIndex = 0; - - for (let i = 0; i < numberOfPt; i++) { - const flag = flags[i]; - - if (flag & Y_SHORT_VECTOR) { - const y = glyf.getUint8(pos++); - lastCoordinate += flag & Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR ? y : -y; - yCoordinates.push(lastCoordinate); - } else if (flag & Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR) { - yCoordinates.push(lastCoordinate); - } else { - lastCoordinate += glyf.getInt16(pos); - pos += 2; - yCoordinates.push(lastCoordinate); - } - - pointFlags.push(flag & ON_CURVE_POINT | flag & OVERLAP_SIMPLE); - - if (endPtsOfContours[endPtsOfContoursIndex] === i) { - xCoordinates = allXCoordinates[endPtsOfContoursIndex]; - endPtsOfContoursIndex++; - contours.push(new Contour({ - flags: pointFlags, - xCoordinates, - yCoordinates - })); - yCoordinates = []; - pointFlags = []; - } - } - - return new SimpleGlyph({ - contours, - instructions - }); - } - - getSize() { - let size = this.contours.length * 2 + 2 + this.instructions.length; - let lastX = 0; - let lastY = 0; - - for (const contour of this.contours) { - size += contour.flags.length; - - for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) { - const x = contour.xCoordinates[i]; - const y = contour.yCoordinates[i]; - let abs = Math.abs(x - lastX); - - if (abs > 255) { - size += 2; - } else if (abs > 0) { - size += 1; - } - - lastX = x; - abs = Math.abs(y - lastY); - - if (abs > 255) { - size += 2; - } else if (abs > 0) { - size += 1; - } - - lastY = y; - } - } - - return size; - } - - write(pos, buf) { - const spos = pos; - const xCoordinates = []; - const yCoordinates = []; - const flags = []; - let lastX = 0; - let lastY = 0; - - for (const contour of this.contours) { - for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) { - let flag = contour.flags[i]; - const x = contour.xCoordinates[i]; - let delta = x - lastX; - - if (delta === 0) { - flag |= X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR; - xCoordinates.push(0); - } else { - const abs = Math.abs(delta); - - if (abs <= 255) { - flag |= delta >= 0 ? X_SHORT_VECTOR | X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR : X_SHORT_VECTOR; - xCoordinates.push(abs); - } else { - xCoordinates.push(delta); - } - } - - lastX = x; - const y = contour.yCoordinates[i]; - delta = y - lastY; - - if (delta === 0) { - flag |= Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR; - yCoordinates.push(0); - } else { - const abs = Math.abs(delta); - - if (abs <= 255) { - flag |= delta >= 0 ? Y_SHORT_VECTOR | Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR : Y_SHORT_VECTOR; - yCoordinates.push(abs); - } else { - yCoordinates.push(delta); - } - } - - lastY = y; - flags.push(flag); - } - - buf.setUint16(pos, xCoordinates.length - 1); - pos += 2; - } - - buf.setUint16(pos, this.instructions.length); - pos += 2; - - if (this.instructions.length) { - new Uint8Array(buf.buffer, 0, buf.buffer.byteLength).set(this.instructions, pos); - pos += this.instructions.length; - } - - for (const flag of flags) { - buf.setUint8(pos++, flag); - } - - for (let i = 0, ii = xCoordinates.length; i < ii; i++) { - const x = xCoordinates[i]; - const flag = flags[i]; - - if (flag & X_SHORT_VECTOR) { - buf.setUint8(pos++, x); - } else if (!(flag & X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR)) { - buf.setInt16(pos, x); - pos += 2; - } - } - - for (let i = 0, ii = yCoordinates.length; i < ii; i++) { - const y = yCoordinates[i]; - const flag = flags[i]; - - if (flag & Y_SHORT_VECTOR) { - buf.setUint8(pos++, y); - } else if (!(flag & Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR)) { - buf.setInt16(pos, y); - pos += 2; - } - } - - return pos - spos; - } - - scale(x, factor) { - for (const contour of this.contours) { - if (contour.xCoordinates.length === 0) { - continue; - } - - for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) { - contour.xCoordinates[i] = Math.round(x + (contour.xCoordinates[i] - x) * factor); - } - } - } - -} - -class CompositeGlyph { - constructor({ - flags, - glyphIndex, - argument1, - argument2, - transf, - instructions - }) { - this.flags = flags; - this.glyphIndex = glyphIndex; - this.argument1 = argument1; - this.argument2 = argument2; - this.transf = transf; - this.instructions = instructions; - } - - static parse(pos, glyf) { - const spos = pos; - const transf = []; - let flags = glyf.getUint16(pos); - const glyphIndex = glyf.getUint16(pos + 2); - pos += 4; - let argument1, argument2; - - if (flags & ARG_1_AND_2_ARE_WORDS) { - if (flags & ARGS_ARE_XY_VALUES) { - argument1 = glyf.getInt16(pos); - argument2 = glyf.getInt16(pos + 2); - } else { - argument1 = glyf.getUint16(pos); - argument2 = glyf.getUint16(pos + 2); - } - - pos += 4; - flags ^= ARG_1_AND_2_ARE_WORDS; - } else { - argument1 = glyf.getUint8(pos); - argument2 = glyf.getUint8(pos + 1); - - if (flags & ARGS_ARE_XY_VALUES) { - const abs1 = argument1 & 0x7f; - argument1 = argument1 & 0x80 ? -abs1 : abs1; - const abs2 = argument2 & 0x7f; - argument2 = argument2 & 0x80 ? -abs2 : abs2; - } - - pos += 2; - } - - if (flags & WE_HAVE_A_SCALE) { - transf.push(glyf.getUint16(pos)); - pos += 2; - } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) { - transf.push(glyf.getUint16(pos), glyf.getUint16(pos + 2)); - pos += 4; - } else if (flags & WE_HAVE_A_TWO_BY_TWO) { - transf.push(glyf.getUint16(pos), glyf.getUint16(pos + 2), glyf.getUint16(pos + 4), glyf.getUint16(pos + 6)); - pos += 8; - } - - let instructions = null; - - if (flags & WE_HAVE_INSTRUCTIONS) { - const instructionLength = glyf.getUint16(pos); - pos += 2; - instructions = new Uint8Array(glyf).slice(pos, pos + instructionLength); - pos += instructionLength; - } - - return [pos - spos, new CompositeGlyph({ - flags, - glyphIndex, - argument1, - argument2, - transf, - instructions - })]; - } - - getSize() { - let size = 2 + 2 + this.transf.length * 2; - - if (this.flags & WE_HAVE_INSTRUCTIONS) { - size += 2 + this.instructions.length; - } - - size += 2; - - if (this.flags & 2) { - if (!(this.argument1 >= -128 && this.argument1 <= 127 && this.argument2 >= -128 && this.argument2 <= 127)) { - size += 2; - } - } else { - if (!(this.argument1 >= 0 && this.argument1 <= 255 && this.argument2 >= 0 && this.argument2 <= 255)) { - size += 2; - } - } - - return size; - } - - write(pos, buf) { - const spos = pos; - - if (this.flags & ARGS_ARE_XY_VALUES) { - if (!(this.argument1 >= -128 && this.argument1 <= 127 && this.argument2 >= -128 && this.argument2 <= 127)) { - this.flags |= ARG_1_AND_2_ARE_WORDS; - } - } else { - if (!(this.argument1 >= 0 && this.argument1 <= 255 && this.argument2 >= 0 && this.argument2 <= 255)) { - this.flags |= ARG_1_AND_2_ARE_WORDS; - } - } - - buf.setUint16(pos, this.flags); - buf.setUint16(pos + 2, this.glyphIndex); - pos += 4; - - if (this.flags & ARG_1_AND_2_ARE_WORDS) { - if (this.flags & ARGS_ARE_XY_VALUES) { - buf.setInt16(pos, this.argument1); - buf.setInt16(pos + 2, this.argument2); - } else { - buf.setUint16(pos, this.argument1); - buf.setUint16(pos + 2, this.argument2); - } - - pos += 4; - } else { - buf.setUint8(pos, this.argument1); - buf.setUint8(pos + 1, this.argument2); - pos += 2; - } - - if (this.flags & WE_HAVE_INSTRUCTIONS) { - buf.setUint16(pos, this.instructions.length); - pos += 2; - - if (this.instructions.length) { - new Uint8Array(buf.buffer, 0, buf.buffer.byteLength).set(this.instructions, pos); - pos += this.instructions.length; - } - } - - return pos - spos; - } - - scale(x, factor) {} - -} - -/***/ }), -/* 52 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.OpenTypeFileBuilder = void 0; - -var _core_utils = __w_pdfjs_require__(9); - -var _util = __w_pdfjs_require__(2); - -function writeInt16(dest, offset, num) { - dest[offset] = num >> 8 & 0xff; - dest[offset + 1] = num & 0xff; -} - -function writeInt32(dest, offset, num) { - dest[offset] = num >> 24 & 0xff; - dest[offset + 1] = num >> 16 & 0xff; - dest[offset + 2] = num >> 8 & 0xff; - dest[offset + 3] = num & 0xff; -} - -function writeData(dest, offset, data) { - if (data instanceof Uint8Array) { - dest.set(data, offset); - } else if (typeof data === "string") { - for (let i = 0, ii = data.length; i < ii; i++) { - dest[offset++] = data.charCodeAt(i) & 0xff; - } - } else { - for (let i = 0, ii = data.length; i < ii; i++) { - dest[offset++] = data[i] & 0xff; - } - } -} - -const OTF_HEADER_SIZE = 12; -const OTF_TABLE_ENTRY_SIZE = 16; - -class OpenTypeFileBuilder { - constructor(sfnt) { - this.sfnt = sfnt; - this.tables = Object.create(null); - } - - static getSearchParams(entriesCount, entrySize) { - let maxPower2 = 1, - log2 = 0; - - while ((maxPower2 ^ entriesCount) > maxPower2) { - maxPower2 <<= 1; - log2++; - } - - const searchRange = maxPower2 * entrySize; - return { - range: searchRange, - entry: log2, - rangeShift: entrySize * entriesCount - searchRange - }; - } - - toArray() { - let sfnt = this.sfnt; - const tables = this.tables; - const tablesNames = Object.keys(tables); - tablesNames.sort(); - const numTables = tablesNames.length; - let i, j, jj, table, tableName; - let offset = OTF_HEADER_SIZE + numTables * OTF_TABLE_ENTRY_SIZE; - const tableOffsets = [offset]; - - for (i = 0; i < numTables; i++) { - table = tables[tablesNames[i]]; - const paddedLength = (table.length + 3 & ~3) >>> 0; - offset += paddedLength; - tableOffsets.push(offset); - } - - const file = new Uint8Array(offset); - - for (i = 0; i < numTables; i++) { - table = tables[tablesNames[i]]; - writeData(file, tableOffsets[i], table); - } - - if (sfnt === "true") { - sfnt = (0, _util.string32)(0x00010000); - } - - file[0] = sfnt.charCodeAt(0) & 0xff; - file[1] = sfnt.charCodeAt(1) & 0xff; - file[2] = sfnt.charCodeAt(2) & 0xff; - file[3] = sfnt.charCodeAt(3) & 0xff; - writeInt16(file, 4, numTables); - const searchParams = OpenTypeFileBuilder.getSearchParams(numTables, 16); - writeInt16(file, 6, searchParams.range); - writeInt16(file, 8, searchParams.entry); - writeInt16(file, 10, searchParams.rangeShift); - offset = OTF_HEADER_SIZE; - - for (i = 0; i < numTables; i++) { - tableName = tablesNames[i]; - file[offset] = tableName.charCodeAt(0) & 0xff; - file[offset + 1] = tableName.charCodeAt(1) & 0xff; - file[offset + 2] = tableName.charCodeAt(2) & 0xff; - file[offset + 3] = tableName.charCodeAt(3) & 0xff; - let checksum = 0; - - for (j = tableOffsets[i], jj = tableOffsets[i + 1]; j < jj; j += 4) { - const quad = (0, _core_utils.readUint32)(file, j); - checksum = checksum + quad >>> 0; - } - - writeInt32(file, offset + 4, checksum); - writeInt32(file, offset + 8, tableOffsets[i]); - writeInt32(file, offset + 12, tables[tableName].length); - offset += OTF_TABLE_ENTRY_SIZE; - } - - return file; - } - - addTable(tag, data) { - if (tag in this.tables) { - throw new Error("Table " + tag + " already exists"); - } - - this.tables[tag] = data; - } - -} - -exports.OpenTypeFileBuilder = OpenTypeFileBuilder; - -/***/ }), -/* 53 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Type1Font = void 0; - -var _cff_parser = __w_pdfjs_require__(45); - -var _fonts_utils = __w_pdfjs_require__(18); - -var _core_utils = __w_pdfjs_require__(9); - -var _stream = __w_pdfjs_require__(10); - -var _type1_parser = __w_pdfjs_require__(54); - -var _util = __w_pdfjs_require__(2); - -function findBlock(streamBytes, signature, startIndex) { - const streamBytesLength = streamBytes.length; - const signatureLength = signature.length; - const scanLength = streamBytesLength - signatureLength; - let i = startIndex, - found = false; - - while (i < scanLength) { - let j = 0; - - while (j < signatureLength && streamBytes[i + j] === signature[j]) { - j++; - } - - if (j >= signatureLength) { - i += j; - - while (i < streamBytesLength && (0, _core_utils.isWhiteSpace)(streamBytes[i])) { - i++; - } - - found = true; - break; - } - - i++; - } - - return { - found, - length: i - }; -} - -function getHeaderBlock(stream, suggestedLength) { - const EEXEC_SIGNATURE = [0x65, 0x65, 0x78, 0x65, 0x63]; - const streamStartPos = stream.pos; - let headerBytes, headerBytesLength, block; - - try { - headerBytes = stream.getBytes(suggestedLength); - headerBytesLength = headerBytes.length; - } catch (ex) {} - - if (headerBytesLength === suggestedLength) { - block = findBlock(headerBytes, EEXEC_SIGNATURE, suggestedLength - 2 * EEXEC_SIGNATURE.length); - - if (block.found && block.length === suggestedLength) { - return { - stream: new _stream.Stream(headerBytes), - length: suggestedLength - }; - } - } - - (0, _util.warn)('Invalid "Length1" property in Type1 font -- trying to recover.'); - stream.pos = streamStartPos; - const SCAN_BLOCK_LENGTH = 2048; - let actualLength; - - while (true) { - const scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH); - block = findBlock(scanBytes, EEXEC_SIGNATURE, 0); - - if (block.length === 0) { - break; - } - - stream.pos += block.length; - - if (block.found) { - actualLength = stream.pos - streamStartPos; - break; - } - } - - stream.pos = streamStartPos; - - if (actualLength) { - return { - stream: new _stream.Stream(stream.getBytes(actualLength)), - length: actualLength - }; - } - - (0, _util.warn)('Unable to recover "Length1" property in Type1 font -- using as is.'); - return { - stream: new _stream.Stream(stream.getBytes(suggestedLength)), - length: suggestedLength - }; -} - -function getEexecBlock(stream, suggestedLength) { - const eexecBytes = stream.getBytes(); - return { - stream: new _stream.Stream(eexecBytes), - length: eexecBytes.length - }; -} - -class Type1Font { - constructor(name, file, properties) { - const PFB_HEADER_SIZE = 6; - let headerBlockLength = properties.length1; - properties.length2; - let pfbHeader = file.peekBytes(PFB_HEADER_SIZE); - const pfbHeaderPresent = pfbHeader[0] === 0x80 && pfbHeader[1] === 0x01; - - if (pfbHeaderPresent) { - file.skip(PFB_HEADER_SIZE); - headerBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2]; - } - - const headerBlock = getHeaderBlock(file, headerBlockLength); - const headerBlockParser = new _type1_parser.Type1Parser(headerBlock.stream, false, _fonts_utils.SEAC_ANALYSIS_ENABLED); - headerBlockParser.extractFontHeader(properties); - - if (pfbHeaderPresent) { - pfbHeader = file.getBytes(PFB_HEADER_SIZE); - pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2]; - } - - const eexecBlock = getEexecBlock(file); - const eexecBlockParser = new _type1_parser.Type1Parser(eexecBlock.stream, true, _fonts_utils.SEAC_ANALYSIS_ENABLED); - const data = eexecBlockParser.extractFontProgram(properties); - - for (const key in data.properties) { - properties[key] = data.properties[key]; - } - - const charstrings = data.charstrings; - const type2Charstrings = this.getType2Charstrings(charstrings); - const subrs = this.getType2Subrs(data.subrs); - this.charstrings = charstrings; - this.data = this.wrap(name, type2Charstrings, this.charstrings, subrs, properties); - this.seacs = this.getSeacs(data.charstrings); - } - - get numGlyphs() { - return this.charstrings.length + 1; - } - - getCharset() { - const charset = [".notdef"]; - const charstrings = this.charstrings; - - for (let glyphId = 0; glyphId < charstrings.length; glyphId++) { - charset.push(charstrings[glyphId].glyphName); - } - - return charset; - } - - getGlyphMapping(properties) { - const charstrings = this.charstrings; - - if (properties.composite) { - const charCodeToGlyphId = Object.create(null); - - for (let glyphId = 0, charstringsLen = charstrings.length; glyphId < charstringsLen; glyphId++) { - const charCode = properties.cMap.charCodeOf(glyphId); - charCodeToGlyphId[charCode] = glyphId + 1; - } - - return charCodeToGlyphId; - } - - const glyphNames = [".notdef"]; - let builtInEncoding, glyphId; - - for (glyphId = 0; glyphId < charstrings.length; glyphId++) { - glyphNames.push(charstrings[glyphId].glyphName); - } - - const encoding = properties.builtInEncoding; - - if (encoding) { - builtInEncoding = Object.create(null); - - for (const charCode in encoding) { - glyphId = glyphNames.indexOf(encoding[charCode]); - - if (glyphId >= 0) { - builtInEncoding[charCode] = glyphId; - } - } - } - - return (0, _fonts_utils.type1FontGlyphMapping)(properties, builtInEncoding, glyphNames); - } - - hasGlyphId(id) { - if (id < 0 || id >= this.numGlyphs) { - return false; - } - - if (id === 0) { - return true; - } - - const glyph = this.charstrings[id - 1]; - return glyph.charstring.length > 0; - } - - getSeacs(charstrings) { - const seacMap = []; - - for (let i = 0, ii = charstrings.length; i < ii; i++) { - const charstring = charstrings[i]; - - if (charstring.seac) { - seacMap[i + 1] = charstring.seac; - } - } - - return seacMap; - } - - getType2Charstrings(type1Charstrings) { - const type2Charstrings = []; - - for (let i = 0, ii = type1Charstrings.length; i < ii; i++) { - type2Charstrings.push(type1Charstrings[i].charstring); - } - - return type2Charstrings; - } - - getType2Subrs(type1Subrs) { - let bias = 0; - const count = type1Subrs.length; - - if (count < 1133) { - bias = 107; - } else if (count < 33769) { - bias = 1131; - } else { - bias = 32768; - } - - const type2Subrs = []; - let i; - - for (i = 0; i < bias; i++) { - type2Subrs.push([0x0b]); - } - - for (i = 0; i < count; i++) { - type2Subrs.push(type1Subrs[i]); - } - - return type2Subrs; - } - - wrap(name, glyphs, charstrings, subrs, properties) { - const cff = new _cff_parser.CFF(); - cff.header = new _cff_parser.CFFHeader(1, 0, 4, 4); - cff.names = [name]; - const topDict = new _cff_parser.CFFTopDict(); - topDict.setByName("version", 391); - topDict.setByName("Notice", 392); - topDict.setByName("FullName", 393); - topDict.setByName("FamilyName", 394); - topDict.setByName("Weight", 395); - topDict.setByName("Encoding", null); - topDict.setByName("FontMatrix", properties.fontMatrix); - topDict.setByName("FontBBox", properties.bbox); - topDict.setByName("charset", null); - topDict.setByName("CharStrings", null); - topDict.setByName("Private", null); - cff.topDict = topDict; - const strings = new _cff_parser.CFFStrings(); - strings.add("Version 0.11"); - strings.add("See original notice"); - strings.add(name); - strings.add(name); - strings.add("Medium"); - cff.strings = strings; - cff.globalSubrIndex = new _cff_parser.CFFIndex(); - const count = glyphs.length; - const charsetArray = [".notdef"]; - let i, ii; - - for (i = 0; i < count; i++) { - const glyphName = charstrings[i].glyphName; - - const index = _cff_parser.CFFStandardStrings.indexOf(glyphName); - - if (index === -1) { - strings.add(glyphName); - } - - charsetArray.push(glyphName); - } - - cff.charset = new _cff_parser.CFFCharset(false, 0, charsetArray); - const charStringsIndex = new _cff_parser.CFFIndex(); - charStringsIndex.add([0x8b, 0x0e]); - - for (i = 0; i < count; i++) { - charStringsIndex.add(glyphs[i]); - } - - cff.charStrings = charStringsIndex; - const privateDict = new _cff_parser.CFFPrivateDict(); - privateDict.setByName("Subrs", null); - const fields = ["BlueValues", "OtherBlues", "FamilyBlues", "FamilyOtherBlues", "StemSnapH", "StemSnapV", "BlueShift", "BlueFuzz", "BlueScale", "LanguageGroup", "ExpansionFactor", "ForceBold", "StdHW", "StdVW"]; - - for (i = 0, ii = fields.length; i < ii; i++) { - const field = fields[i]; - - if (!(field in properties.privateData)) { - continue; - } - - const value = properties.privateData[field]; - - if (Array.isArray(value)) { - for (let j = value.length - 1; j > 0; j--) { - value[j] -= value[j - 1]; - } - } - - privateDict.setByName(field, value); - } - - cff.topDict.privateDict = privateDict; - const subrIndex = new _cff_parser.CFFIndex(); - - for (i = 0, ii = subrs.length; i < ii; i++) { - subrIndex.add(subrs[i]); - } - - privateDict.subrsIndex = subrIndex; - const compiler = new _cff_parser.CFFCompiler(cff); - return compiler.compile(); - } - -} - -exports.Type1Font = Type1Font; - -/***/ }), -/* 54 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Type1Parser = void 0; - -var _encodings = __w_pdfjs_require__(19); - -var _core_utils = __w_pdfjs_require__(9); - -var _stream = __w_pdfjs_require__(10); - -var _util = __w_pdfjs_require__(2); - -const HINTING_ENABLED = false; - -const Type1CharString = function Type1CharStringClosure() { - const COMMAND_MAP = { - hstem: [1], - vstem: [3], - vmoveto: [4], - rlineto: [5], - hlineto: [6], - vlineto: [7], - rrcurveto: [8], - callsubr: [10], - flex: [12, 35], - drop: [12, 18], - endchar: [14], - rmoveto: [21], - hmoveto: [22], - vhcurveto: [30], - hvcurveto: [31] - }; - - class Type1CharString { - constructor() { - this.width = 0; - this.lsb = 0; - this.flexing = false; - this.output = []; - this.stack = []; - } - - convert(encoded, subrs, seacAnalysisEnabled) { - const count = encoded.length; - let error = false; - let wx, sbx, subrNumber; - - for (let i = 0; i < count; i++) { - let value = encoded[i]; - - if (value < 32) { - if (value === 12) { - value = (value << 8) + encoded[++i]; - } - - switch (value) { - case 1: - { - this.stack = []; - break; - } - - case 3: - { - this.stack = []; - break; - } - - case 4: - if (this.flexing) { - if (this.stack.length < 1) { - error = true; - break; - } - - const dy = this.stack.pop(); - this.stack.push(0, dy); - break; - } - - error = this.executeCommand(1, COMMAND_MAP.vmoveto); - break; - - case 5: - error = this.executeCommand(2, COMMAND_MAP.rlineto); - break; - - case 6: - error = this.executeCommand(1, COMMAND_MAP.hlineto); - break; - - case 7: - error = this.executeCommand(1, COMMAND_MAP.vlineto); - break; - - case 8: - error = this.executeCommand(6, COMMAND_MAP.rrcurveto); - break; - - case 9: - this.stack = []; - break; - - case 10: - if (this.stack.length < 1) { - error = true; - break; - } - - subrNumber = this.stack.pop(); - - if (!subrs[subrNumber]) { - error = true; - break; - } - - error = this.convert(subrs[subrNumber], subrs, seacAnalysisEnabled); - break; - - case 11: - return error; - - case 13: - if (this.stack.length < 2) { - error = true; - break; - } - - wx = this.stack.pop(); - sbx = this.stack.pop(); - this.lsb = sbx; - this.width = wx; - this.stack.push(wx, sbx); - error = this.executeCommand(2, COMMAND_MAP.hmoveto); - break; - - case 14: - this.output.push(COMMAND_MAP.endchar[0]); - break; - - case 21: - if (this.flexing) { - break; - } - - error = this.executeCommand(2, COMMAND_MAP.rmoveto); - break; - - case 22: - if (this.flexing) { - this.stack.push(0); - break; - } - - error = this.executeCommand(1, COMMAND_MAP.hmoveto); - break; - - case 30: - error = this.executeCommand(4, COMMAND_MAP.vhcurveto); - break; - - case 31: - error = this.executeCommand(4, COMMAND_MAP.hvcurveto); - break; - - case (12 << 8) + 0: - this.stack = []; - break; - - case (12 << 8) + 1: - { - this.stack = []; - break; - } - - case (12 << 8) + 2: - { - this.stack = []; - break; - } - - case (12 << 8) + 6: - if (seacAnalysisEnabled) { - const asb = this.stack[this.stack.length - 5]; - this.seac = this.stack.splice(-4, 4); - this.seac[0] += this.lsb - asb; - error = this.executeCommand(0, COMMAND_MAP.endchar); - } else { - error = this.executeCommand(4, COMMAND_MAP.endchar); - } - - break; - - case (12 << 8) + 7: - if (this.stack.length < 4) { - error = true; - break; - } - - this.stack.pop(); - wx = this.stack.pop(); - const sby = this.stack.pop(); - sbx = this.stack.pop(); - this.lsb = sbx; - this.width = wx; - this.stack.push(wx, sbx, sby); - error = this.executeCommand(3, COMMAND_MAP.rmoveto); - break; - - case (12 << 8) + 12: - if (this.stack.length < 2) { - error = true; - break; - } - - const num2 = this.stack.pop(); - const num1 = this.stack.pop(); - this.stack.push(num1 / num2); - break; - - case (12 << 8) + 16: - if (this.stack.length < 2) { - error = true; - break; - } - - subrNumber = this.stack.pop(); - const numArgs = this.stack.pop(); - - if (subrNumber === 0 && numArgs === 3) { - const flexArgs = this.stack.splice(this.stack.length - 17, 17); - this.stack.push(flexArgs[2] + flexArgs[0], flexArgs[3] + flexArgs[1], flexArgs[4], flexArgs[5], flexArgs[6], flexArgs[7], flexArgs[8], flexArgs[9], flexArgs[10], flexArgs[11], flexArgs[12], flexArgs[13], flexArgs[14]); - error = this.executeCommand(13, COMMAND_MAP.flex, true); - this.flexing = false; - this.stack.push(flexArgs[15], flexArgs[16]); - } else if (subrNumber === 1 && numArgs === 0) { - this.flexing = true; - } - - break; - - case (12 << 8) + 17: - break; - - case (12 << 8) + 33: - this.stack = []; - break; - - default: - (0, _util.warn)('Unknown type 1 charstring command of "' + value + '"'); - break; - } - - if (error) { - break; - } - - continue; - } else if (value <= 246) { - value -= 139; - } else if (value <= 250) { - value = (value - 247) * 256 + encoded[++i] + 108; - } else if (value <= 254) { - value = -((value - 251) * 256) - encoded[++i] - 108; - } else { - value = (encoded[++i] & 0xff) << 24 | (encoded[++i] & 0xff) << 16 | (encoded[++i] & 0xff) << 8 | (encoded[++i] & 0xff) << 0; - } - - this.stack.push(value); - } - - return error; - } - - executeCommand(howManyArgs, command, keepStack) { - const stackLength = this.stack.length; - - if (howManyArgs > stackLength) { - return true; - } - - const start = stackLength - howManyArgs; - - for (let i = start; i < stackLength; i++) { - let value = this.stack[i]; - - if (Number.isInteger(value)) { - this.output.push(28, value >> 8 & 0xff, value & 0xff); - } else { - value = 65536 * value | 0; - this.output.push(255, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); - } - } - - this.output.push.apply(this.output, command); - - if (keepStack) { - this.stack.splice(start, howManyArgs); - } else { - this.stack.length = 0; - } - - return false; - } - - } - - return Type1CharString; -}(); - -const Type1Parser = function Type1ParserClosure() { - const EEXEC_ENCRYPT_KEY = 55665; - const CHAR_STRS_ENCRYPT_KEY = 4330; - - function isHexDigit(code) { - return code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102; - } - - function decrypt(data, key, discardNumber) { - if (discardNumber >= data.length) { - return new Uint8Array(0); - } - - const c1 = 52845, - c2 = 22719; - let r = key | 0, - i, - j; - - for (i = 0; i < discardNumber; i++) { - r = (data[i] + r) * c1 + c2 & (1 << 16) - 1; - } - - const count = data.length - discardNumber; - const decrypted = new Uint8Array(count); - - for (i = discardNumber, j = 0; j < count; i++, j++) { - const value = data[i]; - decrypted[j] = value ^ r >> 8; - r = (value + r) * c1 + c2 & (1 << 16) - 1; - } - - return decrypted; - } - - function decryptAscii(data, key, discardNumber) { - const c1 = 52845, - c2 = 22719; - let r = key | 0; - const count = data.length, - maybeLength = count >>> 1; - const decrypted = new Uint8Array(maybeLength); - let i, j; - - for (i = 0, j = 0; i < count; i++) { - const digit1 = data[i]; - - if (!isHexDigit(digit1)) { - continue; - } - - i++; - let digit2; - - while (i < count && !isHexDigit(digit2 = data[i])) { - i++; - } - - if (i < count) { - const value = parseInt(String.fromCharCode(digit1, digit2), 16); - decrypted[j++] = value ^ r >> 8; - r = (value + r) * c1 + c2 & (1 << 16) - 1; - } - } - - return decrypted.slice(discardNumber, j); - } - - function isSpecial(c) { - return c === 0x2f || c === 0x5b || c === 0x5d || c === 0x7b || c === 0x7d || c === 0x28 || c === 0x29; - } - - class Type1Parser { - constructor(stream, encrypted, seacAnalysisEnabled) { - if (encrypted) { - const data = stream.getBytes(); - const isBinary = !((isHexDigit(data[0]) || (0, _core_utils.isWhiteSpace)(data[0])) && isHexDigit(data[1]) && isHexDigit(data[2]) && isHexDigit(data[3]) && isHexDigit(data[4]) && isHexDigit(data[5]) && isHexDigit(data[6]) && isHexDigit(data[7])); - stream = new _stream.Stream(isBinary ? decrypt(data, EEXEC_ENCRYPT_KEY, 4) : decryptAscii(data, EEXEC_ENCRYPT_KEY, 4)); - } - - this.seacAnalysisEnabled = !!seacAnalysisEnabled; - this.stream = stream; - this.nextChar(); - } - - readNumberArray() { - this.getToken(); - const array = []; - - while (true) { - const token = this.getToken(); - - if (token === null || token === "]" || token === "}") { - break; - } - - array.push(parseFloat(token || 0)); - } - - return array; - } - - readNumber() { - const token = this.getToken(); - return parseFloat(token || 0); - } - - readInt() { - const token = this.getToken(); - return parseInt(token || 0, 10) | 0; - } - - readBoolean() { - const token = this.getToken(); - return token === "true" ? 1 : 0; - } - - nextChar() { - return this.currentChar = this.stream.getByte(); - } - - getToken() { - let comment = false; - let ch = this.currentChar; - - while (true) { - if (ch === -1) { - return null; - } - - if (comment) { - if (ch === 0x0a || ch === 0x0d) { - comment = false; - } - } else if (ch === 0x25) { - comment = true; - } else if (!(0, _core_utils.isWhiteSpace)(ch)) { - break; - } - - ch = this.nextChar(); - } - - if (isSpecial(ch)) { - this.nextChar(); - return String.fromCharCode(ch); - } - - let token = ""; - - do { - token += String.fromCharCode(ch); - ch = this.nextChar(); - } while (ch >= 0 && !(0, _core_utils.isWhiteSpace)(ch) && !isSpecial(ch)); - - return token; - } - - readCharStrings(bytes, lenIV) { - if (lenIV === -1) { - return bytes; - } - - return decrypt(bytes, CHAR_STRS_ENCRYPT_KEY, lenIV); - } - - extractFontProgram(properties) { - const stream = this.stream; - const subrs = [], - charstrings = []; - const privateData = Object.create(null); - privateData.lenIV = 4; - const program = { - subrs: [], - charstrings: [], - properties: { - privateData - } - }; - let token, length, data, lenIV, encoded; - - while ((token = this.getToken()) !== null) { - if (token !== "/") { - continue; - } - - token = this.getToken(); - - switch (token) { - case "CharStrings": - this.getToken(); - this.getToken(); - this.getToken(); - this.getToken(); - - while (true) { - token = this.getToken(); - - if (token === null || token === "end") { - break; - } - - if (token !== "/") { - continue; - } - - const glyph = this.getToken(); - length = this.readInt(); - this.getToken(); - data = length > 0 ? stream.getBytes(length) : new Uint8Array(0); - lenIV = program.properties.privateData.lenIV; - encoded = this.readCharStrings(data, lenIV); - this.nextChar(); - token = this.getToken(); - - if (token === "noaccess") { - this.getToken(); - } - - charstrings.push({ - glyph, - encoded - }); - } - - break; - - case "Subrs": - this.readInt(); - this.getToken(); - - while (this.getToken() === "dup") { - const index = this.readInt(); - length = this.readInt(); - this.getToken(); - data = length > 0 ? stream.getBytes(length) : new Uint8Array(0); - lenIV = program.properties.privateData.lenIV; - encoded = this.readCharStrings(data, lenIV); - this.nextChar(); - token = this.getToken(); - - if (token === "noaccess") { - this.getToken(); - } - - subrs[index] = encoded; - } - - break; - - case "BlueValues": - case "OtherBlues": - case "FamilyBlues": - case "FamilyOtherBlues": - const blueArray = this.readNumberArray(); - - if (blueArray.length > 0 && blueArray.length % 2 === 0 && HINTING_ENABLED) { - program.properties.privateData[token] = blueArray; - } - - break; - - case "StemSnapH": - case "StemSnapV": - program.properties.privateData[token] = this.readNumberArray(); - break; - - case "StdHW": - case "StdVW": - program.properties.privateData[token] = this.readNumberArray()[0]; - break; - - case "BlueShift": - case "lenIV": - case "BlueFuzz": - case "BlueScale": - case "LanguageGroup": - case "ExpansionFactor": - program.properties.privateData[token] = this.readNumber(); - break; - - case "ForceBold": - program.properties.privateData[token] = this.readBoolean(); - break; - } - } - - for (let i = 0; i < charstrings.length; i++) { - const glyph = charstrings[i].glyph; - encoded = charstrings[i].encoded; - const charString = new Type1CharString(); - const error = charString.convert(encoded, subrs, this.seacAnalysisEnabled); - let output = charString.output; - - if (error) { - output = [14]; - } - - const charStringObject = { - glyphName: glyph, - charstring: output, - width: charString.width, - lsb: charString.lsb, - seac: charString.seac - }; - - if (glyph === ".notdef") { - program.charstrings.unshift(charStringObject); - } else { - program.charstrings.push(charStringObject); - } - - if (properties.builtInEncoding) { - const index = properties.builtInEncoding.indexOf(glyph); - - if (index > -1 && properties.widths[index] === undefined && index >= properties.firstChar && index <= properties.lastChar) { - properties.widths[index] = charString.width; - } - } - } - - return program; - } - - extractFontHeader(properties) { - let token; - - while ((token = this.getToken()) !== null) { - if (token !== "/") { - continue; - } - - token = this.getToken(); - - switch (token) { - case "FontMatrix": - const matrix = this.readNumberArray(); - properties.fontMatrix = matrix; - break; - - case "Encoding": - const encodingArg = this.getToken(); - let encoding; - - if (!/^\d+$/.test(encodingArg)) { - encoding = (0, _encodings.getEncoding)(encodingArg); - } else { - encoding = []; - const size = parseInt(encodingArg, 10) | 0; - this.getToken(); - - for (let j = 0; j < size; j++) { - token = this.getToken(); - - while (token !== "dup" && token !== "def") { - token = this.getToken(); - - if (token === null) { - return; - } - } - - if (token === "def") { - break; - } - - const index = this.readInt(); - this.getToken(); - const glyph = this.getToken(); - encoding[index] = glyph; - this.getToken(); - } - } - - properties.builtInEncoding = encoding; - break; - - case "FontBBox": - const fontBBox = this.readNumberArray(); - properties.ascent = Math.max(fontBBox[3], fontBBox[1]); - properties.descent = Math.min(fontBBox[1], fontBBox[3]); - properties.ascentScaled = true; - break; - } - } - } - - } - - return Type1Parser; -}(); - -exports.Type1Parser = Type1Parser; - -/***/ }), -/* 55 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Pattern = void 0; -exports.getTilingPatternIR = getTilingPatternIR; - -var _util = __w_pdfjs_require__(2); - -var _colorspace = __w_pdfjs_require__(24); - -var _primitives = __w_pdfjs_require__(5); - -var _core_utils = __w_pdfjs_require__(9); - -const ShadingType = { - FUNCTION_BASED: 1, - AXIAL: 2, - RADIAL: 3, - FREE_FORM_MESH: 4, - LATTICE_FORM_MESH: 5, - COONS_PATCH_MESH: 6, - TENSOR_PATCH_MESH: 7 -}; - -class Pattern { - constructor() { - (0, _util.unreachable)("Cannot initialize Pattern."); - } - - static parseShading(shading, xref, res, handler, pdfFunctionFactory, localColorSpaceCache) { - const dict = (0, _primitives.isStream)(shading) ? shading.dict : shading; - const type = dict.get("ShadingType"); - - try { - switch (type) { - case ShadingType.AXIAL: - case ShadingType.RADIAL: - return new RadialAxialShading(dict, xref, res, pdfFunctionFactory, localColorSpaceCache); - - case ShadingType.FREE_FORM_MESH: - case ShadingType.LATTICE_FORM_MESH: - case ShadingType.COONS_PATCH_MESH: - case ShadingType.TENSOR_PATCH_MESH: - return new MeshShading(shading, xref, res, pdfFunctionFactory, localColorSpaceCache); - - default: - throw new _util.FormatError("Unsupported ShadingType: " + type); - } - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - - handler.send("UnsupportedFeature", { - featureId: _util.UNSUPPORTED_FEATURES.shadingPattern - }); - (0, _util.warn)(ex); - return new DummyShading(); - } - } - -} - -exports.Pattern = Pattern; - -class BaseShading { - static get SMALL_NUMBER() { - return (0, _util.shadow)(this, "SMALL_NUMBER", 1e-6); - } - - constructor() { - if (this.constructor === BaseShading) { - (0, _util.unreachable)("Cannot initialize BaseShading."); - } - } - - getIR() { - (0, _util.unreachable)("Abstract method `getIR` called."); - } - -} - -class RadialAxialShading extends BaseShading { - constructor(dict, xref, resources, pdfFunctionFactory, localColorSpaceCache) { - super(); - this.coordsArr = dict.getArray("Coords"); - this.shadingType = dict.get("ShadingType"); - - const cs = _colorspace.ColorSpace.parse({ - cs: dict.getRaw("CS") || dict.getRaw("ColorSpace"), - xref, - resources, - pdfFunctionFactory, - localColorSpaceCache - }); - - const bbox = dict.getArray("BBox"); - - if (Array.isArray(bbox) && bbox.length === 4) { - this.bbox = _util.Util.normalizeRect(bbox); - } else { - this.bbox = null; - } - - let t0 = 0.0, - t1 = 1.0; - - if (dict.has("Domain")) { - const domainArr = dict.getArray("Domain"); - t0 = domainArr[0]; - t1 = domainArr[1]; - } - - let extendStart = false, - extendEnd = false; - - if (dict.has("Extend")) { - const extendArr = dict.getArray("Extend"); - extendStart = extendArr[0]; - extendEnd = extendArr[1]; - } - - if (this.shadingType === ShadingType.RADIAL && (!extendStart || !extendEnd)) { - const [x1, y1, r1, x2, y2, r2] = this.coordsArr; - const distance = Math.hypot(x1 - x2, y1 - y2); - - if (r1 <= r2 + distance && r2 <= r1 + distance) { - (0, _util.warn)("Unsupported radial gradient."); - } - } - - this.extendStart = extendStart; - this.extendEnd = extendEnd; - const fnObj = dict.getRaw("Function"); - const fn = pdfFunctionFactory.createFromArray(fnObj); - const NUMBER_OF_SAMPLES = 10; - const step = (t1 - t0) / NUMBER_OF_SAMPLES; - const colorStops = this.colorStops = []; - - if (t0 >= t1 || step <= 0) { - (0, _util.info)("Bad shading domain."); - return; - } - - const color = new Float32Array(cs.numComps), - ratio = new Float32Array(1); - let rgbColor; - - for (let i = 0; i <= NUMBER_OF_SAMPLES; i++) { - ratio[0] = t0 + i * step; - fn(ratio, 0, color, 0); - rgbColor = cs.getRgb(color, 0); - - const cssColor = _util.Util.makeHexColor(rgbColor[0], rgbColor[1], rgbColor[2]); - - colorStops.push([i / NUMBER_OF_SAMPLES, cssColor]); - } - - let background = "transparent"; - - if (dict.has("Background")) { - rgbColor = cs.getRgb(dict.get("Background"), 0); - background = _util.Util.makeHexColor(rgbColor[0], rgbColor[1], rgbColor[2]); - } - - if (!extendStart) { - colorStops.unshift([0, background]); - colorStops[1][0] += BaseShading.SMALL_NUMBER; - } - - if (!extendEnd) { - colorStops[colorStops.length - 1][0] -= BaseShading.SMALL_NUMBER; - colorStops.push([1, background]); - } - - this.colorStops = colorStops; - } - - getIR() { - const coordsArr = this.coordsArr; - const shadingType = this.shadingType; - let type, p0, p1, r0, r1; - - if (shadingType === ShadingType.AXIAL) { - p0 = [coordsArr[0], coordsArr[1]]; - p1 = [coordsArr[2], coordsArr[3]]; - r0 = null; - r1 = null; - type = "axial"; - } else if (shadingType === ShadingType.RADIAL) { - p0 = [coordsArr[0], coordsArr[1]]; - p1 = [coordsArr[3], coordsArr[4]]; - r0 = coordsArr[2]; - r1 = coordsArr[5]; - type = "radial"; - } else { - (0, _util.unreachable)(`getPattern type unknown: ${shadingType}`); - } - - return ["RadialAxial", type, this.bbox, this.colorStops, p0, p1, r0, r1]; - } - -} - -class MeshStreamReader { - constructor(stream, context) { - this.stream = stream; - this.context = context; - this.buffer = 0; - this.bufferLength = 0; - const numComps = context.numComps; - this.tmpCompsBuf = new Float32Array(numComps); - const csNumComps = context.colorSpace.numComps; - this.tmpCsCompsBuf = context.colorFn ? new Float32Array(csNumComps) : this.tmpCompsBuf; - } - - get hasData() { - if (this.stream.end) { - return this.stream.pos < this.stream.end; - } - - if (this.bufferLength > 0) { - return true; - } - - const nextByte = this.stream.getByte(); - - if (nextByte < 0) { - return false; - } - - this.buffer = nextByte; - this.bufferLength = 8; - return true; - } - - readBits(n) { - let buffer = this.buffer; - let bufferLength = this.bufferLength; - - if (n === 32) { - if (bufferLength === 0) { - return (this.stream.getByte() << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte()) >>> 0; - } - - buffer = buffer << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte(); - const nextByte = this.stream.getByte(); - this.buffer = nextByte & (1 << bufferLength) - 1; - return (buffer << 8 - bufferLength | (nextByte & 0xff) >> bufferLength) >>> 0; - } - - if (n === 8 && bufferLength === 0) { - return this.stream.getByte(); - } - - while (bufferLength < n) { - buffer = buffer << 8 | this.stream.getByte(); - bufferLength += 8; - } - - bufferLength -= n; - this.bufferLength = bufferLength; - this.buffer = buffer & (1 << bufferLength) - 1; - return buffer >> bufferLength; - } - - align() { - this.buffer = 0; - this.bufferLength = 0; - } - - readFlag() { - return this.readBits(this.context.bitsPerFlag); - } - - readCoordinate() { - const bitsPerCoordinate = this.context.bitsPerCoordinate; - const xi = this.readBits(bitsPerCoordinate); - const yi = this.readBits(bitsPerCoordinate); - const decode = this.context.decode; - const scale = bitsPerCoordinate < 32 ? 1 / ((1 << bitsPerCoordinate) - 1) : 2.3283064365386963e-10; - return [xi * scale * (decode[1] - decode[0]) + decode[0], yi * scale * (decode[3] - decode[2]) + decode[2]]; - } - - readComponents() { - const numComps = this.context.numComps; - const bitsPerComponent = this.context.bitsPerComponent; - const scale = bitsPerComponent < 32 ? 1 / ((1 << bitsPerComponent) - 1) : 2.3283064365386963e-10; - const decode = this.context.decode; - const components = this.tmpCompsBuf; - - for (let i = 0, j = 4; i < numComps; i++, j += 2) { - const ci = this.readBits(bitsPerComponent); - components[i] = ci * scale * (decode[j + 1] - decode[j]) + decode[j]; - } - - const color = this.tmpCsCompsBuf; - - if (this.context.colorFn) { - this.context.colorFn(components, 0, color, 0); - } - - return this.context.colorSpace.getRgb(color, 0); - } - -} - -const getB = function getBClosure() { - function buildB(count) { - const lut = []; - - for (let i = 0; i <= count; i++) { - const t = i / count, - t_ = 1 - t; - lut.push(new Float32Array([t_ * t_ * t_, 3 * t * t_ * t_, 3 * t * t * t_, t * t * t])); - } - - return lut; - } - - const cache = []; - return function (count) { - if (!cache[count]) { - cache[count] = buildB(count); - } - - return cache[count]; - }; -}(); - -class MeshShading extends BaseShading { - static get MIN_SPLIT_PATCH_CHUNKS_AMOUNT() { - return (0, _util.shadow)(this, "MIN_SPLIT_PATCH_CHUNKS_AMOUNT", 3); - } - - static get MAX_SPLIT_PATCH_CHUNKS_AMOUNT() { - return (0, _util.shadow)(this, "MAX_SPLIT_PATCH_CHUNKS_AMOUNT", 20); - } - - static get TRIANGLE_DENSITY() { - return (0, _util.shadow)(this, "TRIANGLE_DENSITY", 20); - } - - constructor(stream, xref, resources, pdfFunctionFactory, localColorSpaceCache) { - super(); - - if (!(0, _primitives.isStream)(stream)) { - throw new _util.FormatError("Mesh data is not a stream"); - } - - const dict = stream.dict; - this.shadingType = dict.get("ShadingType"); - const bbox = dict.getArray("BBox"); - - if (Array.isArray(bbox) && bbox.length === 4) { - this.bbox = _util.Util.normalizeRect(bbox); - } else { - this.bbox = null; - } - - const cs = _colorspace.ColorSpace.parse({ - cs: dict.getRaw("CS") || dict.getRaw("ColorSpace"), - xref, - resources, - pdfFunctionFactory, - localColorSpaceCache - }); - - this.background = dict.has("Background") ? cs.getRgb(dict.get("Background"), 0) : null; - const fnObj = dict.getRaw("Function"); - const fn = fnObj ? pdfFunctionFactory.createFromArray(fnObj) : null; - this.coords = []; - this.colors = []; - this.figures = []; - const decodeContext = { - bitsPerCoordinate: dict.get("BitsPerCoordinate"), - bitsPerComponent: dict.get("BitsPerComponent"), - bitsPerFlag: dict.get("BitsPerFlag"), - decode: dict.getArray("Decode"), - colorFn: fn, - colorSpace: cs, - numComps: fn ? 1 : cs.numComps - }; - const reader = new MeshStreamReader(stream, decodeContext); - let patchMesh = false; - - switch (this.shadingType) { - case ShadingType.FREE_FORM_MESH: - this._decodeType4Shading(reader); - - break; - - case ShadingType.LATTICE_FORM_MESH: - const verticesPerRow = dict.get("VerticesPerRow") | 0; - - if (verticesPerRow < 2) { - throw new _util.FormatError("Invalid VerticesPerRow"); - } - - this._decodeType5Shading(reader, verticesPerRow); - - break; - - case ShadingType.COONS_PATCH_MESH: - this._decodeType6Shading(reader); - - patchMesh = true; - break; - - case ShadingType.TENSOR_PATCH_MESH: - this._decodeType7Shading(reader); - - patchMesh = true; - break; - - default: - (0, _util.unreachable)("Unsupported mesh type."); - break; - } - - if (patchMesh) { - this._updateBounds(); - - for (let i = 0, ii = this.figures.length; i < ii; i++) { - this._buildFigureFromPatch(i); - } - } - - this._updateBounds(); - - this._packData(); - } - - _decodeType4Shading(reader) { - const coords = this.coords; - const colors = this.colors; - const ps = []; - let verticesLeft = 0; - - while (reader.hasData) { - const f = reader.readFlag(); - const coord = reader.readCoordinate(); - const color = reader.readComponents(); - - if (verticesLeft === 0) { - if (!(0 <= f && f <= 2)) { - throw new _util.FormatError("Unknown type4 flag"); - } - - switch (f) { - case 0: - verticesLeft = 3; - break; - - case 1: - ps.push(ps[ps.length - 2], ps[ps.length - 1]); - verticesLeft = 1; - break; - - case 2: - ps.push(ps[ps.length - 3], ps[ps.length - 1]); - verticesLeft = 1; - break; - } - } - - ps.push(coords.length); - coords.push(coord); - colors.push(color); - verticesLeft--; - reader.align(); - } - - this.figures.push({ - type: "triangles", - coords: new Int32Array(ps), - colors: new Int32Array(ps) - }); - } - - _decodeType5Shading(reader, verticesPerRow) { - const coords = this.coords; - const colors = this.colors; - const ps = []; - - while (reader.hasData) { - const coord = reader.readCoordinate(); - const color = reader.readComponents(); - ps.push(coords.length); - coords.push(coord); - colors.push(color); - } - - this.figures.push({ - type: "lattice", - coords: new Int32Array(ps), - colors: new Int32Array(ps), - verticesPerRow - }); - } - - _decodeType6Shading(reader) { - const coords = this.coords; - const colors = this.colors; - const ps = new Int32Array(16); - const cs = new Int32Array(4); - - while (reader.hasData) { - const f = reader.readFlag(); - - if (!(0 <= f && f <= 3)) { - throw new _util.FormatError("Unknown type6 flag"); - } - - const pi = coords.length; - - for (let i = 0, ii = f !== 0 ? 8 : 12; i < ii; i++) { - coords.push(reader.readCoordinate()); - } - - const ci = colors.length; - - for (let i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) { - colors.push(reader.readComponents()); - } - - let tmp1, tmp2, tmp3, tmp4; - - switch (f) { - case 0: - ps[12] = pi + 3; - ps[13] = pi + 4; - ps[14] = pi + 5; - ps[15] = pi + 6; - ps[8] = pi + 2; - ps[11] = pi + 7; - ps[4] = pi + 1; - ps[7] = pi + 8; - ps[0] = pi; - ps[1] = pi + 11; - ps[2] = pi + 10; - ps[3] = pi + 9; - cs[2] = ci + 1; - cs[3] = ci + 2; - cs[0] = ci; - cs[1] = ci + 3; - break; - - case 1: - tmp1 = ps[12]; - tmp2 = ps[13]; - tmp3 = ps[14]; - tmp4 = ps[15]; - ps[12] = tmp4; - ps[13] = pi + 0; - ps[14] = pi + 1; - ps[15] = pi + 2; - ps[8] = tmp3; - ps[11] = pi + 3; - ps[4] = tmp2; - ps[7] = pi + 4; - ps[0] = tmp1; - ps[1] = pi + 7; - ps[2] = pi + 6; - ps[3] = pi + 5; - tmp1 = cs[2]; - tmp2 = cs[3]; - cs[2] = tmp2; - cs[3] = ci; - cs[0] = tmp1; - cs[1] = ci + 1; - break; - - case 2: - tmp1 = ps[15]; - tmp2 = ps[11]; - ps[12] = ps[3]; - ps[13] = pi + 0; - ps[14] = pi + 1; - ps[15] = pi + 2; - ps[8] = ps[7]; - ps[11] = pi + 3; - ps[4] = tmp2; - ps[7] = pi + 4; - ps[0] = tmp1; - ps[1] = pi + 7; - ps[2] = pi + 6; - ps[3] = pi + 5; - tmp1 = cs[3]; - cs[2] = cs[1]; - cs[3] = ci; - cs[0] = tmp1; - cs[1] = ci + 1; - break; - - case 3: - ps[12] = ps[0]; - ps[13] = pi + 0; - ps[14] = pi + 1; - ps[15] = pi + 2; - ps[8] = ps[1]; - ps[11] = pi + 3; - ps[4] = ps[2]; - ps[7] = pi + 4; - ps[0] = ps[3]; - ps[1] = pi + 7; - ps[2] = pi + 6; - ps[3] = pi + 5; - cs[2] = cs[0]; - cs[3] = ci; - cs[0] = cs[1]; - cs[1] = ci + 1; - break; - } - - ps[5] = coords.length; - coords.push([(-4 * coords[ps[0]][0] - coords[ps[15]][0] + 6 * (coords[ps[4]][0] + coords[ps[1]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[13]][0] + coords[ps[7]][0])) / 9, (-4 * coords[ps[0]][1] - coords[ps[15]][1] + 6 * (coords[ps[4]][1] + coords[ps[1]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[13]][1] + coords[ps[7]][1])) / 9]); - ps[6] = coords.length; - coords.push([(-4 * coords[ps[3]][0] - coords[ps[12]][0] + 6 * (coords[ps[2]][0] + coords[ps[7]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[4]][0] + coords[ps[14]][0])) / 9, (-4 * coords[ps[3]][1] - coords[ps[12]][1] + 6 * (coords[ps[2]][1] + coords[ps[7]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[4]][1] + coords[ps[14]][1])) / 9]); - ps[9] = coords.length; - coords.push([(-4 * coords[ps[12]][0] - coords[ps[3]][0] + 6 * (coords[ps[8]][0] + coords[ps[13]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[11]][0] + coords[ps[1]][0])) / 9, (-4 * coords[ps[12]][1] - coords[ps[3]][1] + 6 * (coords[ps[8]][1] + coords[ps[13]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[11]][1] + coords[ps[1]][1])) / 9]); - ps[10] = coords.length; - coords.push([(-4 * coords[ps[15]][0] - coords[ps[0]][0] + 6 * (coords[ps[11]][0] + coords[ps[14]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[2]][0] + coords[ps[8]][0])) / 9, (-4 * coords[ps[15]][1] - coords[ps[0]][1] + 6 * (coords[ps[11]][1] + coords[ps[14]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[2]][1] + coords[ps[8]][1])) / 9]); - this.figures.push({ - type: "patch", - coords: new Int32Array(ps), - colors: new Int32Array(cs) - }); - } - } - - _decodeType7Shading(reader) { - const coords = this.coords; - const colors = this.colors; - const ps = new Int32Array(16); - const cs = new Int32Array(4); - - while (reader.hasData) { - const f = reader.readFlag(); - - if (!(0 <= f && f <= 3)) { - throw new _util.FormatError("Unknown type7 flag"); - } - - const pi = coords.length; - - for (let i = 0, ii = f !== 0 ? 12 : 16; i < ii; i++) { - coords.push(reader.readCoordinate()); - } - - const ci = colors.length; - - for (let i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) { - colors.push(reader.readComponents()); - } - - let tmp1, tmp2, tmp3, tmp4; - - switch (f) { - case 0: - ps[12] = pi + 3; - ps[13] = pi + 4; - ps[14] = pi + 5; - ps[15] = pi + 6; - ps[8] = pi + 2; - ps[9] = pi + 13; - ps[10] = pi + 14; - ps[11] = pi + 7; - ps[4] = pi + 1; - ps[5] = pi + 12; - ps[6] = pi + 15; - ps[7] = pi + 8; - ps[0] = pi; - ps[1] = pi + 11; - ps[2] = pi + 10; - ps[3] = pi + 9; - cs[2] = ci + 1; - cs[3] = ci + 2; - cs[0] = ci; - cs[1] = ci + 3; - break; - - case 1: - tmp1 = ps[12]; - tmp2 = ps[13]; - tmp3 = ps[14]; - tmp4 = ps[15]; - ps[12] = tmp4; - ps[13] = pi + 0; - ps[14] = pi + 1; - ps[15] = pi + 2; - ps[8] = tmp3; - ps[9] = pi + 9; - ps[10] = pi + 10; - ps[11] = pi + 3; - ps[4] = tmp2; - ps[5] = pi + 8; - ps[6] = pi + 11; - ps[7] = pi + 4; - ps[0] = tmp1; - ps[1] = pi + 7; - ps[2] = pi + 6; - ps[3] = pi + 5; - tmp1 = cs[2]; - tmp2 = cs[3]; - cs[2] = tmp2; - cs[3] = ci; - cs[0] = tmp1; - cs[1] = ci + 1; - break; - - case 2: - tmp1 = ps[15]; - tmp2 = ps[11]; - ps[12] = ps[3]; - ps[13] = pi + 0; - ps[14] = pi + 1; - ps[15] = pi + 2; - ps[8] = ps[7]; - ps[9] = pi + 9; - ps[10] = pi + 10; - ps[11] = pi + 3; - ps[4] = tmp2; - ps[5] = pi + 8; - ps[6] = pi + 11; - ps[7] = pi + 4; - ps[0] = tmp1; - ps[1] = pi + 7; - ps[2] = pi + 6; - ps[3] = pi + 5; - tmp1 = cs[3]; - cs[2] = cs[1]; - cs[3] = ci; - cs[0] = tmp1; - cs[1] = ci + 1; - break; - - case 3: - ps[12] = ps[0]; - ps[13] = pi + 0; - ps[14] = pi + 1; - ps[15] = pi + 2; - ps[8] = ps[1]; - ps[9] = pi + 9; - ps[10] = pi + 10; - ps[11] = pi + 3; - ps[4] = ps[2]; - ps[5] = pi + 8; - ps[6] = pi + 11; - ps[7] = pi + 4; - ps[0] = ps[3]; - ps[1] = pi + 7; - ps[2] = pi + 6; - ps[3] = pi + 5; - cs[2] = cs[0]; - cs[3] = ci; - cs[0] = cs[1]; - cs[1] = ci + 1; - break; - } - - this.figures.push({ - type: "patch", - coords: new Int32Array(ps), - colors: new Int32Array(cs) - }); - } - } - - _buildFigureFromPatch(index) { - const figure = this.figures[index]; - (0, _util.assert)(figure.type === "patch", "Unexpected patch mesh figure"); - const coords = this.coords, - colors = this.colors; - const pi = figure.coords; - const ci = figure.colors; - const figureMinX = Math.min(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]); - const figureMinY = Math.min(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]); - const figureMaxX = Math.max(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]); - const figureMaxY = Math.max(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]); - let splitXBy = Math.ceil((figureMaxX - figureMinX) * MeshShading.TRIANGLE_DENSITY / (this.bounds[2] - this.bounds[0])); - splitXBy = Math.max(MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitXBy)); - let splitYBy = Math.ceil((figureMaxY - figureMinY) * MeshShading.TRIANGLE_DENSITY / (this.bounds[3] - this.bounds[1])); - splitYBy = Math.max(MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitYBy)); - const verticesPerRow = splitXBy + 1; - const figureCoords = new Int32Array((splitYBy + 1) * verticesPerRow); - const figureColors = new Int32Array((splitYBy + 1) * verticesPerRow); - let k = 0; - const cl = new Uint8Array(3), - cr = new Uint8Array(3); - const c0 = colors[ci[0]], - c1 = colors[ci[1]], - c2 = colors[ci[2]], - c3 = colors[ci[3]]; - const bRow = getB(splitYBy), - bCol = getB(splitXBy); - - for (let row = 0; row <= splitYBy; row++) { - cl[0] = (c0[0] * (splitYBy - row) + c2[0] * row) / splitYBy | 0; - cl[1] = (c0[1] * (splitYBy - row) + c2[1] * row) / splitYBy | 0; - cl[2] = (c0[2] * (splitYBy - row) + c2[2] * row) / splitYBy | 0; - cr[0] = (c1[0] * (splitYBy - row) + c3[0] * row) / splitYBy | 0; - cr[1] = (c1[1] * (splitYBy - row) + c3[1] * row) / splitYBy | 0; - cr[2] = (c1[2] * (splitYBy - row) + c3[2] * row) / splitYBy | 0; - - for (let col = 0; col <= splitXBy; col++, k++) { - if ((row === 0 || row === splitYBy) && (col === 0 || col === splitXBy)) { - continue; - } - - let x = 0, - y = 0; - let q = 0; - - for (let i = 0; i <= 3; i++) { - for (let j = 0; j <= 3; j++, q++) { - const m = bRow[row][i] * bCol[col][j]; - x += coords[pi[q]][0] * m; - y += coords[pi[q]][1] * m; - } - } - - figureCoords[k] = coords.length; - coords.push([x, y]); - figureColors[k] = colors.length; - const newColor = new Uint8Array(3); - newColor[0] = (cl[0] * (splitXBy - col) + cr[0] * col) / splitXBy | 0; - newColor[1] = (cl[1] * (splitXBy - col) + cr[1] * col) / splitXBy | 0; - newColor[2] = (cl[2] * (splitXBy - col) + cr[2] * col) / splitXBy | 0; - colors.push(newColor); - } - } - - figureCoords[0] = pi[0]; - figureColors[0] = ci[0]; - figureCoords[splitXBy] = pi[3]; - figureColors[splitXBy] = ci[1]; - figureCoords[verticesPerRow * splitYBy] = pi[12]; - figureColors[verticesPerRow * splitYBy] = ci[2]; - figureCoords[verticesPerRow * splitYBy + splitXBy] = pi[15]; - figureColors[verticesPerRow * splitYBy + splitXBy] = ci[3]; - this.figures[index] = { - type: "lattice", - coords: figureCoords, - colors: figureColors, - verticesPerRow - }; - } - - _updateBounds() { - let minX = this.coords[0][0], - minY = this.coords[0][1], - maxX = minX, - maxY = minY; - - for (let i = 1, ii = this.coords.length; i < ii; i++) { - const x = this.coords[i][0], - y = this.coords[i][1]; - minX = minX > x ? x : minX; - minY = minY > y ? y : minY; - maxX = maxX < x ? x : maxX; - maxY = maxY < y ? y : maxY; - } - - this.bounds = [minX, minY, maxX, maxY]; - } - - _packData() { - let i, ii, j, jj; - const coords = this.coords; - const coordsPacked = new Float32Array(coords.length * 2); - - for (i = 0, j = 0, ii = coords.length; i < ii; i++) { - const xy = coords[i]; - coordsPacked[j++] = xy[0]; - coordsPacked[j++] = xy[1]; - } - - this.coords = coordsPacked; - const colors = this.colors; - const colorsPacked = new Uint8Array(colors.length * 3); - - for (i = 0, j = 0, ii = colors.length; i < ii; i++) { - const c = colors[i]; - colorsPacked[j++] = c[0]; - colorsPacked[j++] = c[1]; - colorsPacked[j++] = c[2]; - } - - this.colors = colorsPacked; - const figures = this.figures; - - for (i = 0, ii = figures.length; i < ii; i++) { - const figure = figures[i], - ps = figure.coords, - cs = figure.colors; - - for (j = 0, jj = ps.length; j < jj; j++) { - ps[j] *= 2; - cs[j] *= 3; - } - } - } - - getIR() { - return ["Mesh", this.shadingType, this.coords, this.colors, this.figures, this.bounds, this.bbox, this.background]; - } - -} - -class DummyShading extends BaseShading { - getIR() { - return ["Dummy"]; - } - -} - -function getTilingPatternIR(operatorList, dict, color) { - const matrix = dict.getArray("Matrix"); - - const bbox = _util.Util.normalizeRect(dict.getArray("BBox")); - - const xstep = dict.get("XStep"); - const ystep = dict.get("YStep"); - const paintType = dict.get("PaintType"); - const tilingType = dict.get("TilingType"); - - if (bbox[2] - bbox[0] === 0 || bbox[3] - bbox[1] === 0) { - throw new _util.FormatError(`Invalid getTilingPatternIR /BBox array: [${bbox}].`); - } - - return ["TilingPattern", color, operatorList, matrix, bbox, xstep, ystep, paintType, tilingType]; -} - -/***/ }), -/* 56 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.PostScriptEvaluator = exports.PostScriptCompiler = exports.PDFFunctionFactory = void 0; -exports.isPDFFunction = isPDFFunction; - -var _primitives = __w_pdfjs_require__(5); - -var _util = __w_pdfjs_require__(2); - -var _ps_parser = __w_pdfjs_require__(57); - -var _image_utils = __w_pdfjs_require__(58); - -class PDFFunctionFactory { - constructor({ - xref, - isEvalSupported = true - }) { - this.xref = xref; - this.isEvalSupported = isEvalSupported !== false; - } - - create(fn) { - const cachedFunction = this.getCached(fn); - - if (cachedFunction) { - return cachedFunction; - } - - const parsedFunction = PDFFunction.parse({ - xref: this.xref, - isEvalSupported: this.isEvalSupported, - fn: fn instanceof _primitives.Ref ? this.xref.fetch(fn) : fn - }); - - this._cache(fn, parsedFunction); - - return parsedFunction; - } - - createFromArray(fnObj) { - const cachedFunction = this.getCached(fnObj); - - if (cachedFunction) { - return cachedFunction; - } - - const parsedFunction = PDFFunction.parseArray({ - xref: this.xref, - isEvalSupported: this.isEvalSupported, - fnObj: fnObj instanceof _primitives.Ref ? this.xref.fetch(fnObj) : fnObj - }); - - this._cache(fnObj, parsedFunction); - - return parsedFunction; - } - - getCached(cacheKey) { - let fnRef; - - if (cacheKey instanceof _primitives.Ref) { - fnRef = cacheKey; - } else if (cacheKey instanceof _primitives.Dict) { - fnRef = cacheKey.objId; - } else if ((0, _primitives.isStream)(cacheKey)) { - fnRef = cacheKey.dict && cacheKey.dict.objId; - } - - if (fnRef) { - const localFunction = this._localFunctionCache.getByRef(fnRef); - - if (localFunction) { - return localFunction; - } - } - - return null; - } - - _cache(cacheKey, parsedFunction) { - if (!parsedFunction) { - throw new Error('PDFFunctionFactory._cache - expected "parsedFunction" argument.'); - } - - let fnRef; - - if (cacheKey instanceof _primitives.Ref) { - fnRef = cacheKey; - } else if (cacheKey instanceof _primitives.Dict) { - fnRef = cacheKey.objId; - } else if ((0, _primitives.isStream)(cacheKey)) { - fnRef = cacheKey.dict && cacheKey.dict.objId; - } - - if (fnRef) { - this._localFunctionCache.set(null, fnRef, parsedFunction); - } - } - - get _localFunctionCache() { - return (0, _util.shadow)(this, "_localFunctionCache", new _image_utils.LocalFunctionCache()); - } - -} - -exports.PDFFunctionFactory = PDFFunctionFactory; - -function toNumberArray(arr) { - if (!Array.isArray(arr)) { - return null; - } - - const length = arr.length; - - for (let i = 0; i < length; i++) { - if (typeof arr[i] !== "number") { - const result = new Array(length); - - for (let j = 0; j < length; j++) { - result[j] = +arr[j]; - } - - return result; - } - } - - return arr; -} - -class PDFFunction { - static getSampleArray(size, outputSize, bps, stream) { - let i, ii; - let length = 1; - - for (i = 0, ii = size.length; i < ii; i++) { - length *= size[i]; - } - - length *= outputSize; - const array = new Array(length); - let codeSize = 0; - let codeBuf = 0; - const sampleMul = 1.0 / (2.0 ** bps - 1); - const strBytes = stream.getBytes((length * bps + 7) / 8); - let strIdx = 0; - - for (i = 0; i < length; i++) { - while (codeSize < bps) { - codeBuf <<= 8; - codeBuf |= strBytes[strIdx++]; - codeSize += 8; - } - - codeSize -= bps; - array[i] = (codeBuf >> codeSize) * sampleMul; - codeBuf &= (1 << codeSize) - 1; - } - - return array; - } - - static parse({ - xref, - isEvalSupported, - fn - }) { - const dict = fn.dict || fn; - const typeNum = dict.get("FunctionType"); - - switch (typeNum) { - case 0: - return this.constructSampled({ - xref, - isEvalSupported, - fn, - dict - }); - - case 1: - break; - - case 2: - return this.constructInterpolated({ - xref, - isEvalSupported, - dict - }); - - case 3: - return this.constructStiched({ - xref, - isEvalSupported, - dict - }); - - case 4: - return this.constructPostScript({ - xref, - isEvalSupported, - fn, - dict - }); - } - - throw new _util.FormatError("Unknown type of function"); - } - - static parseArray({ - xref, - isEvalSupported, - fnObj - }) { - if (!Array.isArray(fnObj)) { - return this.parse({ - xref, - isEvalSupported, - fn: fnObj - }); - } - - const fnArray = []; - - for (let j = 0, jj = fnObj.length; j < jj; j++) { - fnArray.push(this.parse({ - xref, - isEvalSupported, - fn: xref.fetchIfRef(fnObj[j]) - })); - } - - return function (src, srcOffset, dest, destOffset) { - for (let i = 0, ii = fnArray.length; i < ii; i++) { - fnArray[i](src, srcOffset, dest, destOffset + i); - } - }; - } - - static constructSampled({ - xref, - isEvalSupported, - fn, - dict - }) { - function toMultiArray(arr) { - const inputLength = arr.length; - const out = []; - let index = 0; - - for (let i = 0; i < inputLength; i += 2) { - out[index++] = [arr[i], arr[i + 1]]; - } - - return out; - } - - function interpolate(x, xmin, xmax, ymin, ymax) { - return ymin + (x - xmin) * ((ymax - ymin) / (xmax - xmin)); - } - - let domain = toNumberArray(dict.getArray("Domain")); - let range = toNumberArray(dict.getArray("Range")); - - if (!domain || !range) { - throw new _util.FormatError("No domain or range"); - } - - const inputSize = domain.length / 2; - const outputSize = range.length / 2; - domain = toMultiArray(domain); - range = toMultiArray(range); - const size = toNumberArray(dict.getArray("Size")); - const bps = dict.get("BitsPerSample"); - const order = dict.get("Order") || 1; - - if (order !== 1) { - (0, _util.info)("No support for cubic spline interpolation: " + order); - } - - let encode = toNumberArray(dict.getArray("Encode")); - - if (!encode) { - encode = []; - - for (let i = 0; i < inputSize; ++i) { - encode.push([0, size[i] - 1]); - } - } else { - encode = toMultiArray(encode); - } - - let decode = toNumberArray(dict.getArray("Decode")); - - if (!decode) { - decode = range; - } else { - decode = toMultiArray(decode); - } - - const samples = this.getSampleArray(size, outputSize, bps, fn); - return function constructSampledFn(src, srcOffset, dest, destOffset) { - const cubeVertices = 1 << inputSize; - const cubeN = new Float64Array(cubeVertices); - const cubeVertex = new Uint32Array(cubeVertices); - let i, j; - - for (j = 0; j < cubeVertices; j++) { - cubeN[j] = 1; - } - - let k = outputSize, - pos = 1; - - for (i = 0; i < inputSize; ++i) { - const domain_2i = domain[i][0]; - const domain_2i_1 = domain[i][1]; - const xi = Math.min(Math.max(src[srcOffset + i], domain_2i), domain_2i_1); - let e = interpolate(xi, domain_2i, domain_2i_1, encode[i][0], encode[i][1]); - const size_i = size[i]; - e = Math.min(Math.max(e, 0), size_i - 1); - const e0 = e < size_i - 1 ? Math.floor(e) : e - 1; - const n0 = e0 + 1 - e; - const n1 = e - e0; - const offset0 = e0 * k; - const offset1 = offset0 + k; - - for (j = 0; j < cubeVertices; j++) { - if (j & pos) { - cubeN[j] *= n1; - cubeVertex[j] += offset1; - } else { - cubeN[j] *= n0; - cubeVertex[j] += offset0; - } - } - - k *= size_i; - pos <<= 1; - } - - for (j = 0; j < outputSize; ++j) { - let rj = 0; - - for (i = 0; i < cubeVertices; i++) { - rj += samples[cubeVertex[i] + j] * cubeN[i]; - } - - rj = interpolate(rj, 0, 1, decode[j][0], decode[j][1]); - dest[destOffset + j] = Math.min(Math.max(rj, range[j][0]), range[j][1]); - } - }; - } - - static constructInterpolated({ - xref, - isEvalSupported, - dict - }) { - const c0 = toNumberArray(dict.getArray("C0")) || [0]; - const c1 = toNumberArray(dict.getArray("C1")) || [1]; - const n = dict.get("N"); - const diff = []; - - for (let i = 0, ii = c0.length; i < ii; ++i) { - diff.push(c1[i] - c0[i]); - } - - const length = diff.length; - return function constructInterpolatedFn(src, srcOffset, dest, destOffset) { - const x = n === 1 ? src[srcOffset] : src[srcOffset] ** n; - - for (let j = 0; j < length; ++j) { - dest[destOffset + j] = c0[j] + x * diff[j]; - } - }; - } - - static constructStiched({ - xref, - isEvalSupported, - dict - }) { - const domain = toNumberArray(dict.getArray("Domain")); - - if (!domain) { - throw new _util.FormatError("No domain"); - } - - const inputSize = domain.length / 2; - - if (inputSize !== 1) { - throw new _util.FormatError("Bad domain for stiched function"); - } - - const fnRefs = dict.get("Functions"); - const fns = []; - - for (let i = 0, ii = fnRefs.length; i < ii; ++i) { - fns.push(this.parse({ - xref, - isEvalSupported, - fn: xref.fetchIfRef(fnRefs[i]) - })); - } - - const bounds = toNumberArray(dict.getArray("Bounds")); - const encode = toNumberArray(dict.getArray("Encode")); - const tmpBuf = new Float32Array(1); - return function constructStichedFn(src, srcOffset, dest, destOffset) { - const clip = function constructStichedFromIRClip(v, min, max) { - if (v > max) { - v = max; - } else if (v < min) { - v = min; - } - - return v; - }; - - const v = clip(src[srcOffset], domain[0], domain[1]); - const length = bounds.length; - let i; - - for (i = 0; i < length; ++i) { - if (v < bounds[i]) { - break; - } - } - - let dmin = domain[0]; - - if (i > 0) { - dmin = bounds[i - 1]; - } - - let dmax = domain[1]; - - if (i < bounds.length) { - dmax = bounds[i]; - } - - const rmin = encode[2 * i]; - const rmax = encode[2 * i + 1]; - tmpBuf[0] = dmin === dmax ? rmin : rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin); - fns[i](tmpBuf, 0, dest, destOffset); - }; - } - - static constructPostScript({ - xref, - isEvalSupported, - fn, - dict - }) { - const domain = toNumberArray(dict.getArray("Domain")); - const range = toNumberArray(dict.getArray("Range")); - - if (!domain) { - throw new _util.FormatError("No domain."); - } - - if (!range) { - throw new _util.FormatError("No range."); - } - - const lexer = new _ps_parser.PostScriptLexer(fn); - const parser = new _ps_parser.PostScriptParser(lexer); - const code = parser.parse(); - - if (isEvalSupported && _util.IsEvalSupportedCached.value) { - const compiled = new PostScriptCompiler().compile(code, domain, range); - - if (compiled) { - return new Function("src", "srcOffset", "dest", "destOffset", compiled); - } - } - - (0, _util.info)("Unable to compile PS function"); - const numOutputs = range.length >> 1; - const numInputs = domain.length >> 1; - const evaluator = new PostScriptEvaluator(code); - const cache = Object.create(null); - const MAX_CACHE_SIZE = 2048 * 4; - let cache_available = MAX_CACHE_SIZE; - const tmpBuf = new Float32Array(numInputs); - return function constructPostScriptFn(src, srcOffset, dest, destOffset) { - let i, value; - let key = ""; - const input = tmpBuf; - - for (i = 0; i < numInputs; i++) { - value = src[srcOffset + i]; - input[i] = value; - key += value + "_"; - } - - const cachedValue = cache[key]; - - if (cachedValue !== undefined) { - dest.set(cachedValue, destOffset); - return; - } - - const output = new Float32Array(numOutputs); - const stack = evaluator.execute(input); - const stackIndex = stack.length - numOutputs; - - for (i = 0; i < numOutputs; i++) { - value = stack[stackIndex + i]; - let bound = range[i * 2]; - - if (value < bound) { - value = bound; - } else { - bound = range[i * 2 + 1]; - - if (value > bound) { - value = bound; - } - } - - output[i] = value; - } - - if (cache_available > 0) { - cache_available--; - cache[key] = output; - } - - dest.set(output, destOffset); - }; - } - -} - -function isPDFFunction(v) { - let fnDict; - - if (typeof v !== "object") { - return false; - } else if ((0, _primitives.isDict)(v)) { - fnDict = v; - } else if ((0, _primitives.isStream)(v)) { - fnDict = v.dict; - } else { - return false; - } - - return fnDict.has("FunctionType"); -} - -class PostScriptStack { - static get MAX_STACK_SIZE() { - return (0, _util.shadow)(this, "MAX_STACK_SIZE", 100); - } - - constructor(initialStack) { - this.stack = !initialStack ? [] : Array.prototype.slice.call(initialStack, 0); - } - - push(value) { - if (this.stack.length >= PostScriptStack.MAX_STACK_SIZE) { - throw new Error("PostScript function stack overflow."); - } - - this.stack.push(value); - } - - pop() { - if (this.stack.length <= 0) { - throw new Error("PostScript function stack underflow."); - } - - return this.stack.pop(); - } - - copy(n) { - if (this.stack.length + n >= PostScriptStack.MAX_STACK_SIZE) { - throw new Error("PostScript function stack overflow."); - } - - const stack = this.stack; - - for (let i = stack.length - n, j = n - 1; j >= 0; j--, i++) { - stack.push(stack[i]); - } - } - - index(n) { - this.push(this.stack[this.stack.length - n - 1]); - } - - roll(n, p) { - const stack = this.stack; - const l = stack.length - n; - const r = stack.length - 1; - const c = l + (p - Math.floor(p / n) * n); - - for (let i = l, j = r; i < j; i++, j--) { - const t = stack[i]; - stack[i] = stack[j]; - stack[j] = t; - } - - for (let i = l, j = c - 1; i < j; i++, j--) { - const t = stack[i]; - stack[i] = stack[j]; - stack[j] = t; - } - - for (let i = c, j = r; i < j; i++, j--) { - const t = stack[i]; - stack[i] = stack[j]; - stack[j] = t; - } - } - -} - -class PostScriptEvaluator { - constructor(operators) { - this.operators = operators; - } - - execute(initialStack) { - const stack = new PostScriptStack(initialStack); - let counter = 0; - const operators = this.operators; - const length = operators.length; - let operator, a, b; - - while (counter < length) { - operator = operators[counter++]; - - if (typeof operator === "number") { - stack.push(operator); - continue; - } - - switch (operator) { - case "jz": - b = stack.pop(); - a = stack.pop(); - - if (!a) { - counter = b; - } - - break; - - case "j": - a = stack.pop(); - counter = a; - break; - - case "abs": - a = stack.pop(); - stack.push(Math.abs(a)); - break; - - case "add": - b = stack.pop(); - a = stack.pop(); - stack.push(a + b); - break; - - case "and": - b = stack.pop(); - a = stack.pop(); - - if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) { - stack.push(a && b); - } else { - stack.push(a & b); - } - - break; - - case "atan": - a = stack.pop(); - stack.push(Math.atan(a)); - break; - - case "bitshift": - b = stack.pop(); - a = stack.pop(); - - if (a > 0) { - stack.push(a << b); - } else { - stack.push(a >> b); - } - - break; - - case "ceiling": - a = stack.pop(); - stack.push(Math.ceil(a)); - break; - - case "copy": - a = stack.pop(); - stack.copy(a); - break; - - case "cos": - a = stack.pop(); - stack.push(Math.cos(a)); - break; - - case "cvi": - a = stack.pop() | 0; - stack.push(a); - break; - - case "cvr": - break; - - case "div": - b = stack.pop(); - a = stack.pop(); - stack.push(a / b); - break; - - case "dup": - stack.copy(1); - break; - - case "eq": - b = stack.pop(); - a = stack.pop(); - stack.push(a === b); - break; - - case "exch": - stack.roll(2, 1); - break; - - case "exp": - b = stack.pop(); - a = stack.pop(); - stack.push(a ** b); - break; - - case "false": - stack.push(false); - break; - - case "floor": - a = stack.pop(); - stack.push(Math.floor(a)); - break; - - case "ge": - b = stack.pop(); - a = stack.pop(); - stack.push(a >= b); - break; - - case "gt": - b = stack.pop(); - a = stack.pop(); - stack.push(a > b); - break; - - case "idiv": - b = stack.pop(); - a = stack.pop(); - stack.push(a / b | 0); - break; - - case "index": - a = stack.pop(); - stack.index(a); - break; - - case "le": - b = stack.pop(); - a = stack.pop(); - stack.push(a <= b); - break; - - case "ln": - a = stack.pop(); - stack.push(Math.log(a)); - break; - - case "log": - a = stack.pop(); - stack.push(Math.log(a) / Math.LN10); - break; - - case "lt": - b = stack.pop(); - a = stack.pop(); - stack.push(a < b); - break; - - case "mod": - b = stack.pop(); - a = stack.pop(); - stack.push(a % b); - break; - - case "mul": - b = stack.pop(); - a = stack.pop(); - stack.push(a * b); - break; - - case "ne": - b = stack.pop(); - a = stack.pop(); - stack.push(a !== b); - break; - - case "neg": - a = stack.pop(); - stack.push(-a); - break; - - case "not": - a = stack.pop(); - - if ((0, _util.isBool)(a)) { - stack.push(!a); - } else { - stack.push(~a); - } - - break; - - case "or": - b = stack.pop(); - a = stack.pop(); - - if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) { - stack.push(a || b); - } else { - stack.push(a | b); - } - - break; - - case "pop": - stack.pop(); - break; - - case "roll": - b = stack.pop(); - a = stack.pop(); - stack.roll(a, b); - break; - - case "round": - a = stack.pop(); - stack.push(Math.round(a)); - break; - - case "sin": - a = stack.pop(); - stack.push(Math.sin(a)); - break; - - case "sqrt": - a = stack.pop(); - stack.push(Math.sqrt(a)); - break; - - case "sub": - b = stack.pop(); - a = stack.pop(); - stack.push(a - b); - break; - - case "true": - stack.push(true); - break; - - case "truncate": - a = stack.pop(); - a = a < 0 ? Math.ceil(a) : Math.floor(a); - stack.push(a); - break; - - case "xor": - b = stack.pop(); - a = stack.pop(); - - if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) { - stack.push(a !== b); - } else { - stack.push(a ^ b); - } - - break; - - default: - throw new _util.FormatError(`Unknown operator ${operator}`); - } - } - - return stack.stack; - } - -} - -exports.PostScriptEvaluator = PostScriptEvaluator; - -const PostScriptCompiler = function PostScriptCompilerClosure() { - class AstNode { - constructor(type) { - this.type = type; - } - - visit(visitor) { - (0, _util.unreachable)("abstract method"); - } - - } - - class AstArgument extends AstNode { - constructor(index, min, max) { - super("args"); - this.index = index; - this.min = min; - this.max = max; - } - - visit(visitor) { - visitor.visitArgument(this); - } - - } - - class AstLiteral extends AstNode { - constructor(number) { - super("literal"); - this.number = number; - this.min = number; - this.max = number; - } - - visit(visitor) { - visitor.visitLiteral(this); - } - - } - - class AstBinaryOperation extends AstNode { - constructor(op, arg1, arg2, min, max) { - super("binary"); - this.op = op; - this.arg1 = arg1; - this.arg2 = arg2; - this.min = min; - this.max = max; - } - - visit(visitor) { - visitor.visitBinaryOperation(this); - } - - } - - class AstMin extends AstNode { - constructor(arg, max) { - super("max"); - this.arg = arg; - this.min = arg.min; - this.max = max; - } - - visit(visitor) { - visitor.visitMin(this); - } - - } - - class AstVariable extends AstNode { - constructor(index, min, max) { - super("var"); - this.index = index; - this.min = min; - this.max = max; - } - - visit(visitor) { - visitor.visitVariable(this); - } - - } - - class AstVariableDefinition extends AstNode { - constructor(variable, arg) { - super("definition"); - this.variable = variable; - this.arg = arg; - } - - visit(visitor) { - visitor.visitVariableDefinition(this); - } - - } - - class ExpressionBuilderVisitor { - constructor() { - this.parts = []; - } - - visitArgument(arg) { - this.parts.push("Math.max(", arg.min, ", Math.min(", arg.max, ", src[srcOffset + ", arg.index, "]))"); - } - - visitVariable(variable) { - this.parts.push("v", variable.index); - } - - visitLiteral(literal) { - this.parts.push(literal.number); - } - - visitBinaryOperation(operation) { - this.parts.push("("); - operation.arg1.visit(this); - this.parts.push(" ", operation.op, " "); - operation.arg2.visit(this); - this.parts.push(")"); - } - - visitVariableDefinition(definition) { - this.parts.push("var "); - definition.variable.visit(this); - this.parts.push(" = "); - definition.arg.visit(this); - this.parts.push(";"); - } - - visitMin(max) { - this.parts.push("Math.min("); - max.arg.visit(this); - this.parts.push(", ", max.max, ")"); - } - - toString() { - return this.parts.join(""); - } - - } - - function buildAddOperation(num1, num2) { - if (num2.type === "literal" && num2.number === 0) { - return num1; - } - - if (num1.type === "literal" && num1.number === 0) { - return num2; - } - - if (num2.type === "literal" && num1.type === "literal") { - return new AstLiteral(num1.number + num2.number); - } - - return new AstBinaryOperation("+", num1, num2, num1.min + num2.min, num1.max + num2.max); - } - - function buildMulOperation(num1, num2) { - if (num2.type === "literal") { - if (num2.number === 0) { - return new AstLiteral(0); - } else if (num2.number === 1) { - return num1; - } else if (num1.type === "literal") { - return new AstLiteral(num1.number * num2.number); - } - } - - if (num1.type === "literal") { - if (num1.number === 0) { - return new AstLiteral(0); - } else if (num1.number === 1) { - return num2; - } - } - - const min = Math.min(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max); - const max = Math.max(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max); - return new AstBinaryOperation("*", num1, num2, min, max); - } - - function buildSubOperation(num1, num2) { - if (num2.type === "literal") { - if (num2.number === 0) { - return num1; - } else if (num1.type === "literal") { - return new AstLiteral(num1.number - num2.number); - } - } - - if (num2.type === "binary" && num2.op === "-" && num1.type === "literal" && num1.number === 1 && num2.arg1.type === "literal" && num2.arg1.number === 1) { - return num2.arg2; - } - - return new AstBinaryOperation("-", num1, num2, num1.min - num2.max, num1.max - num2.min); - } - - function buildMinOperation(num1, max) { - if (num1.min >= max) { - return new AstLiteral(max); - } else if (num1.max <= max) { - return num1; - } - - return new AstMin(num1, max); - } - - class PostScriptCompiler { - compile(code, domain, range) { - const stack = []; - const instructions = []; - const inputSize = domain.length >> 1, - outputSize = range.length >> 1; - let lastRegister = 0; - let n, j; - let num1, num2, ast1, ast2, tmpVar, item; - - for (let i = 0; i < inputSize; i++) { - stack.push(new AstArgument(i, domain[i * 2], domain[i * 2 + 1])); - } - - for (let i = 0, ii = code.length; i < ii; i++) { - item = code[i]; - - if (typeof item === "number") { - stack.push(new AstLiteral(item)); - continue; - } - - switch (item) { - case "add": - if (stack.length < 2) { - return null; - } - - num2 = stack.pop(); - num1 = stack.pop(); - stack.push(buildAddOperation(num1, num2)); - break; - - case "cvr": - if (stack.length < 1) { - return null; - } - - break; - - case "mul": - if (stack.length < 2) { - return null; - } - - num2 = stack.pop(); - num1 = stack.pop(); - stack.push(buildMulOperation(num1, num2)); - break; - - case "sub": - if (stack.length < 2) { - return null; - } - - num2 = stack.pop(); - num1 = stack.pop(); - stack.push(buildSubOperation(num1, num2)); - break; - - case "exch": - if (stack.length < 2) { - return null; - } - - ast1 = stack.pop(); - ast2 = stack.pop(); - stack.push(ast1, ast2); - break; - - case "pop": - if (stack.length < 1) { - return null; - } - - stack.pop(); - break; - - case "index": - if (stack.length < 1) { - return null; - } - - num1 = stack.pop(); - - if (num1.type !== "literal") { - return null; - } - - n = num1.number; - - if (n < 0 || !Number.isInteger(n) || stack.length < n) { - return null; - } - - ast1 = stack[stack.length - n - 1]; - - if (ast1.type === "literal" || ast1.type === "var") { - stack.push(ast1); - break; - } - - tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max); - stack[stack.length - n - 1] = tmpVar; - stack.push(tmpVar); - instructions.push(new AstVariableDefinition(tmpVar, ast1)); - break; - - case "dup": - if (stack.length < 1) { - return null; - } - - if (typeof code[i + 1] === "number" && code[i + 2] === "gt" && code[i + 3] === i + 7 && code[i + 4] === "jz" && code[i + 5] === "pop" && code[i + 6] === code[i + 1]) { - num1 = stack.pop(); - stack.push(buildMinOperation(num1, code[i + 1])); - i += 6; - break; - } - - ast1 = stack[stack.length - 1]; - - if (ast1.type === "literal" || ast1.type === "var") { - stack.push(ast1); - break; - } - - tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max); - stack[stack.length - 1] = tmpVar; - stack.push(tmpVar); - instructions.push(new AstVariableDefinition(tmpVar, ast1)); - break; - - case "roll": - if (stack.length < 2) { - return null; - } - - num2 = stack.pop(); - num1 = stack.pop(); - - if (num2.type !== "literal" || num1.type !== "literal") { - return null; - } - - j = num2.number; - n = num1.number; - - if (n <= 0 || !Number.isInteger(n) || !Number.isInteger(j) || stack.length < n) { - return null; - } - - j = (j % n + n) % n; - - if (j === 0) { - break; - } - - Array.prototype.push.apply(stack, stack.splice(stack.length - n, n - j)); - break; - - default: - return null; - } - } - - if (stack.length !== outputSize) { - return null; - } - - const result = []; - - for (const instruction of instructions) { - const statementBuilder = new ExpressionBuilderVisitor(); - instruction.visit(statementBuilder); - result.push(statementBuilder.toString()); - } - - for (let i = 0, ii = stack.length; i < ii; i++) { - const expr = stack[i], - statementBuilder = new ExpressionBuilderVisitor(); - expr.visit(statementBuilder); - const min = range[i * 2], - max = range[i * 2 + 1]; - const out = [statementBuilder.toString()]; - - if (min > expr.min) { - out.unshift("Math.max(", min, ", "); - out.push(")"); - } - - if (max < expr.max) { - out.unshift("Math.min(", max, ", "); - out.push(")"); - } - - out.unshift("dest[destOffset + ", i, "] = "); - out.push(";"); - result.push(out.join("")); - } - - return result.join("\n"); - } - - } - - return PostScriptCompiler; -}(); - -exports.PostScriptCompiler = PostScriptCompiler; - -/***/ }), -/* 57 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.PostScriptParser = exports.PostScriptLexer = void 0; - -var _util = __w_pdfjs_require__(2); - -var _primitives = __w_pdfjs_require__(5); - -var _core_utils = __w_pdfjs_require__(9); - -class PostScriptParser { - constructor(lexer) { - this.lexer = lexer; - this.operators = []; - this.token = null; - this.prev = null; - } - - nextToken() { - this.prev = this.token; - this.token = this.lexer.getToken(); - } - - accept(type) { - if (this.token.type === type) { - this.nextToken(); - return true; - } - - return false; - } - - expect(type) { - if (this.accept(type)) { - return true; - } - - throw new _util.FormatError(`Unexpected symbol: found ${this.token.type} expected ${type}.`); - } - - parse() { - this.nextToken(); - this.expect(PostScriptTokenTypes.LBRACE); - this.parseBlock(); - this.expect(PostScriptTokenTypes.RBRACE); - return this.operators; - } - - parseBlock() { - while (true) { - if (this.accept(PostScriptTokenTypes.NUMBER)) { - this.operators.push(this.prev.value); - } else if (this.accept(PostScriptTokenTypes.OPERATOR)) { - this.operators.push(this.prev.value); - } else if (this.accept(PostScriptTokenTypes.LBRACE)) { - this.parseCondition(); - } else { - return; - } - } - } - - parseCondition() { - const conditionLocation = this.operators.length; - this.operators.push(null, null); - this.parseBlock(); - this.expect(PostScriptTokenTypes.RBRACE); - - if (this.accept(PostScriptTokenTypes.IF)) { - this.operators[conditionLocation] = this.operators.length; - this.operators[conditionLocation + 1] = "jz"; - } else if (this.accept(PostScriptTokenTypes.LBRACE)) { - const jumpLocation = this.operators.length; - this.operators.push(null, null); - const endOfTrue = this.operators.length; - this.parseBlock(); - this.expect(PostScriptTokenTypes.RBRACE); - this.expect(PostScriptTokenTypes.IFELSE); - this.operators[jumpLocation] = this.operators.length; - this.operators[jumpLocation + 1] = "j"; - this.operators[conditionLocation] = endOfTrue; - this.operators[conditionLocation + 1] = "jz"; - } else { - throw new _util.FormatError("PS Function: error parsing conditional."); - } - } - -} - -exports.PostScriptParser = PostScriptParser; -const PostScriptTokenTypes = { - LBRACE: 0, - RBRACE: 1, - NUMBER: 2, - OPERATOR: 3, - IF: 4, - IFELSE: 5 -}; - -class PostScriptToken { - static get opCache() { - return (0, _util.shadow)(this, "opCache", Object.create(null)); - } - - constructor(type, value) { - this.type = type; - this.value = value; - } - - static getOperator(op) { - const opValue = PostScriptToken.opCache[op]; - - if (opValue) { - return opValue; - } - - return PostScriptToken.opCache[op] = new PostScriptToken(PostScriptTokenTypes.OPERATOR, op); - } - - static get LBRACE() { - return (0, _util.shadow)(this, "LBRACE", new PostScriptToken(PostScriptTokenTypes.LBRACE, "{")); - } - - static get RBRACE() { - return (0, _util.shadow)(this, "RBRACE", new PostScriptToken(PostScriptTokenTypes.RBRACE, "}")); - } - - static get IF() { - return (0, _util.shadow)(this, "IF", new PostScriptToken(PostScriptTokenTypes.IF, "IF")); - } - - static get IFELSE() { - return (0, _util.shadow)(this, "IFELSE", new PostScriptToken(PostScriptTokenTypes.IFELSE, "IFELSE")); - } - -} - -class PostScriptLexer { - constructor(stream) { - this.stream = stream; - this.nextChar(); - this.strBuf = []; - } - - nextChar() { - return this.currentChar = this.stream.getByte(); - } - - getToken() { - let comment = false; - let ch = this.currentChar; - - while (true) { - if (ch < 0) { - return _primitives.EOF; - } - - if (comment) { - if (ch === 0x0a || ch === 0x0d) { - comment = false; - } - } else if (ch === 0x25) { - comment = true; - } else if (!(0, _core_utils.isWhiteSpace)(ch)) { - break; - } - - ch = this.nextChar(); - } - - switch (ch | 0) { - case 0x30: - case 0x31: - case 0x32: - case 0x33: - case 0x34: - case 0x35: - case 0x36: - case 0x37: - case 0x38: - case 0x39: - case 0x2b: - case 0x2d: - case 0x2e: - return new PostScriptToken(PostScriptTokenTypes.NUMBER, this.getNumber()); - - case 0x7b: - this.nextChar(); - return PostScriptToken.LBRACE; - - case 0x7d: - this.nextChar(); - return PostScriptToken.RBRACE; - } - - const strBuf = this.strBuf; - strBuf.length = 0; - strBuf[0] = String.fromCharCode(ch); - - while ((ch = this.nextChar()) >= 0 && (ch >= 0x41 && ch <= 0x5a || ch >= 0x61 && ch <= 0x7a)) { - strBuf.push(String.fromCharCode(ch)); - } - - const str = strBuf.join(""); - - switch (str.toLowerCase()) { - case "if": - return PostScriptToken.IF; - - case "ifelse": - return PostScriptToken.IFELSE; - - default: - return PostScriptToken.getOperator(str); - } - } - - getNumber() { - let ch = this.currentChar; - const strBuf = this.strBuf; - strBuf.length = 0; - strBuf[0] = String.fromCharCode(ch); - - while ((ch = this.nextChar()) >= 0) { - if (ch >= 0x30 && ch <= 0x39 || ch === 0x2d || ch === 0x2e) { - strBuf.push(String.fromCharCode(ch)); - } else { - break; - } - } - - const value = parseFloat(strBuf.join("")); - - if (isNaN(value)) { - throw new _util.FormatError(`Invalid floating point number: ${value}`); - } - - return value; - } - -} - -exports.PostScriptLexer = PostScriptLexer; - -/***/ }), -/* 58 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.LocalTilingPatternCache = exports.LocalImageCache = exports.LocalGStateCache = exports.LocalFunctionCache = exports.LocalColorSpaceCache = exports.GlobalImageCache = void 0; - -var _util = __w_pdfjs_require__(2); - -var _primitives = __w_pdfjs_require__(5); - -class BaseLocalCache { - constructor(options) { - if (this.constructor === BaseLocalCache) { - (0, _util.unreachable)("Cannot initialize BaseLocalCache."); - } - - this._onlyRefs = (options && options.onlyRefs) === true; - - if (!this._onlyRefs) { - this._nameRefMap = new Map(); - this._imageMap = new Map(); - } - - this._imageCache = new _primitives.RefSetCache(); - } - - getByName(name) { - if (this._onlyRefs) { - (0, _util.unreachable)("Should not call `getByName` method."); - } - - const ref = this._nameRefMap.get(name); - - if (ref) { - return this.getByRef(ref); - } - - return this._imageMap.get(name) || null; - } - - getByRef(ref) { - return this._imageCache.get(ref) || null; - } - - set(name, ref, data) { - (0, _util.unreachable)("Abstract method `set` called."); - } - -} - -class LocalImageCache extends BaseLocalCache { - set(name, ref = null, data) { - if (typeof name !== "string") { - throw new Error('LocalImageCache.set - expected "name" argument.'); - } - - if (ref) { - if (this._imageCache.has(ref)) { - return; - } - - this._nameRefMap.set(name, ref); - - this._imageCache.put(ref, data); - - return; - } - - if (this._imageMap.has(name)) { - return; - } - - this._imageMap.set(name, data); - } - -} - -exports.LocalImageCache = LocalImageCache; - -class LocalColorSpaceCache extends BaseLocalCache { - set(name = null, ref = null, data) { - if (typeof name !== "string" && !ref) { - throw new Error('LocalColorSpaceCache.set - expected "name" and/or "ref" argument.'); - } - - if (ref) { - if (this._imageCache.has(ref)) { - return; - } - - if (name !== null) { - this._nameRefMap.set(name, ref); - } - - this._imageCache.put(ref, data); - - return; - } - - if (this._imageMap.has(name)) { - return; - } - - this._imageMap.set(name, data); - } - -} - -exports.LocalColorSpaceCache = LocalColorSpaceCache; - -class LocalFunctionCache extends BaseLocalCache { - constructor(options) { - super({ - onlyRefs: true - }); - } - - set(name = null, ref, data) { - if (!ref) { - throw new Error('LocalFunctionCache.set - expected "ref" argument.'); - } - - if (this._imageCache.has(ref)) { - return; - } - - this._imageCache.put(ref, data); - } - -} - -exports.LocalFunctionCache = LocalFunctionCache; - -class LocalGStateCache extends BaseLocalCache { - set(name, ref = null, data) { - if (typeof name !== "string") { - throw new Error('LocalGStateCache.set - expected "name" argument.'); - } - - if (ref) { - if (this._imageCache.has(ref)) { - return; - } - - this._nameRefMap.set(name, ref); - - this._imageCache.put(ref, data); - - return; - } - - if (this._imageMap.has(name)) { - return; - } - - this._imageMap.set(name, data); - } - -} - -exports.LocalGStateCache = LocalGStateCache; - -class LocalTilingPatternCache extends BaseLocalCache { - constructor(options) { - super({ - onlyRefs: true - }); - } - - set(name = null, ref, data) { - if (!ref) { - throw new Error('LocalTilingPatternCache.set - expected "ref" argument.'); - } - - if (this._imageCache.has(ref)) { - return; - } - - this._imageCache.put(ref, data); - } - -} - -exports.LocalTilingPatternCache = LocalTilingPatternCache; - -class GlobalImageCache { - static get NUM_PAGES_THRESHOLD() { - return (0, _util.shadow)(this, "NUM_PAGES_THRESHOLD", 2); - } - - static get MIN_IMAGES_TO_CACHE() { - return (0, _util.shadow)(this, "MIN_IMAGES_TO_CACHE", 10); - } - - static get MAX_BYTE_SIZE() { - return (0, _util.shadow)(this, "MAX_BYTE_SIZE", 40e6); - } - - constructor() { - this._refCache = new _primitives.RefSetCache(); - this._imageCache = new _primitives.RefSetCache(); - } - - get _byteSize() { - let byteSize = 0; - - this._imageCache.forEach(imageData => { - byteSize += imageData.byteSize; - }); - - return byteSize; - } - - get _cacheLimitReached() { - if (this._imageCache.size < GlobalImageCache.MIN_IMAGES_TO_CACHE) { - return false; - } - - if (this._byteSize < GlobalImageCache.MAX_BYTE_SIZE) { - return false; - } - - return true; - } - - shouldCache(ref, pageIndex) { - const pageIndexSet = this._refCache.get(ref); - - const numPages = pageIndexSet ? pageIndexSet.size + (pageIndexSet.has(pageIndex) ? 0 : 1) : 1; - - if (numPages < GlobalImageCache.NUM_PAGES_THRESHOLD) { - return false; - } - - if (!this._imageCache.has(ref) && this._cacheLimitReached) { - return false; - } - - return true; - } - - addPageIndex(ref, pageIndex) { - let pageIndexSet = this._refCache.get(ref); - - if (!pageIndexSet) { - pageIndexSet = new Set(); - - this._refCache.put(ref, pageIndexSet); - } - - pageIndexSet.add(pageIndex); - } - - addByteSize(ref, byteSize) { - const imageData = this._imageCache.get(ref); - - if (!imageData) { - return; - } - - if (imageData.byteSize) { - return; - } - - imageData.byteSize = byteSize; - } - - getData(ref, pageIndex) { - const pageIndexSet = this._refCache.get(ref); - - if (!pageIndexSet) { - return null; - } - - if (pageIndexSet.size < GlobalImageCache.NUM_PAGES_THRESHOLD) { - return null; - } - - const imageData = this._imageCache.get(ref); - - if (!imageData) { - return null; - } - - pageIndexSet.add(pageIndex); - return imageData; - } - - setData(ref, data) { - if (!this._refCache.has(ref)) { - throw new Error('GlobalImageCache.setData - expected "addPageIndex" to have been called.'); - } - - if (this._imageCache.has(ref)) { - return; - } - - if (this._cacheLimitReached) { - (0, _util.warn)("GlobalImageCache.setData - cache limit reached."); - return; - } - - this._imageCache.put(ref, data); - } - - clear(onlyData = false) { - if (!onlyData) { - this._refCache.clear(); - } - - this._imageCache.clear(); - } - -} - -exports.GlobalImageCache = GlobalImageCache; - -/***/ }), -/* 59 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.bidi = bidi; - -var _util = __w_pdfjs_require__(2); - -const baseTypes = ["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", "ON", "ON", "ET", "ET", "ET", "ON", "ON", "ON", "ON", "ON", "ES", "CS", "ES", "CS", "CS", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "CS", "ON", "ON", "ON", "ON", "ON", "ON", "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", "ON", "ON", "ON", "ON", "ON", "ON", "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", "ON", "ON", "ON", "ON", "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", "ON", "ET", "ET", "ET", "ET", "ON", "ON", "ON", "ON", "L", "ON", "ON", "BN", "ON", "ON", "ET", "ET", "EN", "EN", "ON", "L", "ON", "ON", "ON", "EN", "L", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "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", "ON", "L", "L", "L", "L", "L", "L", "L", "L"]; -const arabicTypes = ["AN", "AN", "AN", "AN", "AN", "AN", "ON", "ON", "AL", "ET", "ET", "AL", "CS", "AL", "ON", "ON", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "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", "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", "ON", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "NSM", "NSM", "ON", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "AL", "AL", "AL", "AL", "AL", "AL"]; - -function isOdd(i) { - return (i & 1) !== 0; -} - -function isEven(i) { - return (i & 1) === 0; -} - -function findUnequal(arr, start, value) { - let j, jj; - - for (j = start, jj = arr.length; j < jj; ++j) { - if (arr[j] !== value) { - return j; - } - } - - return j; -} - -function setValues(arr, start, end, value) { - for (let j = start; j < end; ++j) { - arr[j] = value; - } -} - -function reverseValues(arr, start, end) { - for (let i = start, j = end - 1; i < j; ++i, --j) { - const temp = arr[i]; - arr[i] = arr[j]; - arr[j] = temp; - } -} - -function createBidiText(str, isLTR, vertical = false) { - let dir = "ltr"; - - if (vertical) { - dir = "ttb"; - } else if (!isLTR) { - dir = "rtl"; - } - - return { - str, - dir - }; -} - -const chars = []; -const types = []; - -function bidi(str, startLevel = -1, vertical = false) { - let isLTR = true; - const strLength = str.length; - - if (strLength === 0 || vertical) { - return createBidiText(str, isLTR, vertical); - } - - chars.length = strLength; - types.length = strLength; - let numBidi = 0; - let i, ii; - - for (i = 0; i < strLength; ++i) { - chars[i] = str.charAt(i); - const charCode = str.charCodeAt(i); - let charType = "L"; - - if (charCode <= 0x00ff) { - charType = baseTypes[charCode]; - } else if (0x0590 <= charCode && charCode <= 0x05f4) { - charType = "R"; - } else if (0x0600 <= charCode && charCode <= 0x06ff) { - charType = arabicTypes[charCode & 0xff]; - - if (!charType) { - (0, _util.warn)("Bidi: invalid Unicode character " + charCode.toString(16)); - } - } else if (0x0700 <= charCode && charCode <= 0x08ac) { - charType = "AL"; - } - - if (charType === "R" || charType === "AL" || charType === "AN") { - numBidi++; - } - - types[i] = charType; - } - - if (numBidi === 0) { - isLTR = true; - return createBidiText(str, isLTR); - } - - if (startLevel === -1) { - if (numBidi / strLength < 0.3 && strLength > 4) { - isLTR = true; - startLevel = 0; - } else { - isLTR = false; - startLevel = 1; - } - } - - const levels = []; - - for (i = 0; i < strLength; ++i) { - levels[i] = startLevel; - } - - const e = isOdd(startLevel) ? "R" : "L"; - const sor = e; - const eor = sor; - let lastType = sor; - - for (i = 0; i < strLength; ++i) { - if (types[i] === "NSM") { - types[i] = lastType; - } else { - lastType = types[i]; - } - } - - lastType = sor; - let t; - - for (i = 0; i < strLength; ++i) { - t = types[i]; - - if (t === "EN") { - types[i] = lastType === "AL" ? "AN" : "EN"; - } else if (t === "R" || t === "L" || t === "AL") { - lastType = t; - } - } - - for (i = 0; i < strLength; ++i) { - t = types[i]; - - if (t === "AL") { - types[i] = "R"; - } - } - - for (i = 1; i < strLength - 1; ++i) { - if (types[i] === "ES" && types[i - 1] === "EN" && types[i + 1] === "EN") { - types[i] = "EN"; - } - - if (types[i] === "CS" && (types[i - 1] === "EN" || types[i - 1] === "AN") && types[i + 1] === types[i - 1]) { - types[i] = types[i - 1]; - } - } - - for (i = 0; i < strLength; ++i) { - if (types[i] === "EN") { - for (let j = i - 1; j >= 0; --j) { - if (types[j] !== "ET") { - break; - } - - types[j] = "EN"; - } - - for (let j = i + 1; j < strLength; ++j) { - if (types[j] !== "ET") { - break; - } - - types[j] = "EN"; - } - } - } - - for (i = 0; i < strLength; ++i) { - t = types[i]; - - if (t === "WS" || t === "ES" || t === "ET" || t === "CS") { - types[i] = "ON"; - } - } - - lastType = sor; - - for (i = 0; i < strLength; ++i) { - t = types[i]; - - if (t === "EN") { - types[i] = lastType === "L" ? "L" : "EN"; - } else if (t === "R" || t === "L") { - lastType = t; - } - } - - for (i = 0; i < strLength; ++i) { - if (types[i] === "ON") { - const end = findUnequal(types, i + 1, "ON"); - let before = sor; - - if (i > 0) { - before = types[i - 1]; - } - - let after = eor; - - if (end + 1 < strLength) { - after = types[end + 1]; - } - - if (before !== "L") { - before = "R"; - } - - if (after !== "L") { - after = "R"; - } - - if (before === after) { - setValues(types, i, end, before); - } - - i = end - 1; - } - } - - for (i = 0; i < strLength; ++i) { - if (types[i] === "ON") { - types[i] = e; - } - } - - for (i = 0; i < strLength; ++i) { - t = types[i]; - - if (isEven(levels[i])) { - if (t === "R") { - levels[i] += 1; - } else if (t === "AN" || t === "EN") { - levels[i] += 2; - } - } else { - if (t === "L" || t === "AN" || t === "EN") { - levels[i] += 1; - } - } - } - - let highestLevel = -1; - let lowestOddLevel = 99; - let level; - - for (i = 0, ii = levels.length; i < ii; ++i) { - level = levels[i]; - - if (highestLevel < level) { - highestLevel = level; - } - - if (lowestOddLevel > level && isOdd(level)) { - lowestOddLevel = level; - } - } - - for (level = highestLevel; level >= lowestOddLevel; --level) { - let start = -1; - - for (i = 0, ii = levels.length; i < ii; ++i) { - if (levels[i] < level) { - if (start >= 0) { - reverseValues(chars, start, i); - start = -1; - } - } else if (start < 0) { - start = i; - } - } - - if (start >= 0) { - reverseValues(chars, start, levels.length); - } - } - - for (i = 0, ii = chars.length; i < ii; ++i) { - const ch = chars[i]; - - if (ch === "<" || ch === ">") { - chars[i] = ""; - } - } - - return createBidiText(chars.join(""), isLTR); -} - -/***/ }), -/* 60 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.getMetrics = void 0; - -var _core_utils = __w_pdfjs_require__(9); - -const getMetrics = (0, _core_utils.getLookupTableFactory)(function (t) { - t.Courier = 600; - t["Courier-Bold"] = 600; - t["Courier-BoldOblique"] = 600; - t["Courier-Oblique"] = 600; - t.Helvetica = (0, _core_utils.getLookupTableFactory)(function (t) { - t.space = 278; - t.exclam = 278; - t.quotedbl = 355; - t.numbersign = 556; - t.dollar = 556; - t.percent = 889; - t.ampersand = 667; - t.quoteright = 222; - t.parenleft = 333; - t.parenright = 333; - t.asterisk = 389; - t.plus = 584; - t.comma = 278; - t.hyphen = 333; - t.period = 278; - t.slash = 278; - t.zero = 556; - t.one = 556; - t.two = 556; - t.three = 556; - t.four = 556; - t.five = 556; - t.six = 556; - t.seven = 556; - t.eight = 556; - t.nine = 556; - t.colon = 278; - t.semicolon = 278; - t.less = 584; - t.equal = 584; - t.greater = 584; - t.question = 556; - t.at = 1015; - t.A = 667; - t.B = 667; - t.C = 722; - t.D = 722; - t.E = 667; - t.F = 611; - t.G = 778; - t.H = 722; - t.I = 278; - t.J = 500; - t.K = 667; - t.L = 556; - t.M = 833; - t.N = 722; - t.O = 778; - t.P = 667; - t.Q = 778; - t.R = 722; - t.S = 667; - t.T = 611; - t.U = 722; - t.V = 667; - t.W = 944; - t.X = 667; - t.Y = 667; - t.Z = 611; - t.bracketleft = 278; - t.backslash = 278; - t.bracketright = 278; - t.asciicircum = 469; - t.underscore = 556; - t.quoteleft = 222; - t.a = 556; - t.b = 556; - t.c = 500; - t.d = 556; - t.e = 556; - t.f = 278; - t.g = 556; - t.h = 556; - t.i = 222; - t.j = 222; - t.k = 500; - t.l = 222; - t.m = 833; - t.n = 556; - t.o = 556; - t.p = 556; - t.q = 556; - t.r = 333; - t.s = 500; - t.t = 278; - t.u = 556; - t.v = 500; - t.w = 722; - t.x = 500; - t.y = 500; - t.z = 500; - t.braceleft = 334; - t.bar = 260; - t.braceright = 334; - t.asciitilde = 584; - t.exclamdown = 333; - t.cent = 556; - t.sterling = 556; - t.fraction = 167; - t.yen = 556; - t.florin = 556; - t.section = 556; - t.currency = 556; - t.quotesingle = 191; - t.quotedblleft = 333; - t.guillemotleft = 556; - t.guilsinglleft = 333; - t.guilsinglright = 333; - t.fi = 500; - t.fl = 500; - t.endash = 556; - t.dagger = 556; - t.daggerdbl = 556; - t.periodcentered = 278; - t.paragraph = 537; - t.bullet = 350; - t.quotesinglbase = 222; - t.quotedblbase = 333; - t.quotedblright = 333; - t.guillemotright = 556; - t.ellipsis = 1000; - t.perthousand = 1000; - t.questiondown = 611; - t.grave = 333; - t.acute = 333; - t.circumflex = 333; - t.tilde = 333; - t.macron = 333; - t.breve = 333; - t.dotaccent = 333; - t.dieresis = 333; - t.ring = 333; - t.cedilla = 333; - t.hungarumlaut = 333; - t.ogonek = 333; - t.caron = 333; - t.emdash = 1000; - t.AE = 1000; - t.ordfeminine = 370; - t.Lslash = 556; - t.Oslash = 778; - t.OE = 1000; - t.ordmasculine = 365; - t.ae = 889; - t.dotlessi = 278; - t.lslash = 222; - t.oslash = 611; - t.oe = 944; - t.germandbls = 611; - t.Idieresis = 278; - t.eacute = 556; - t.abreve = 556; - t.uhungarumlaut = 556; - t.ecaron = 556; - t.Ydieresis = 667; - t.divide = 584; - t.Yacute = 667; - t.Acircumflex = 667; - t.aacute = 556; - t.Ucircumflex = 722; - t.yacute = 500; - t.scommaaccent = 500; - t.ecircumflex = 556; - t.Uring = 722; - t.Udieresis = 722; - t.aogonek = 556; - t.Uacute = 722; - t.uogonek = 556; - t.Edieresis = 667; - t.Dcroat = 722; - t.commaaccent = 250; - t.copyright = 737; - t.Emacron = 667; - t.ccaron = 500; - t.aring = 556; - t.Ncommaaccent = 722; - t.lacute = 222; - t.agrave = 556; - t.Tcommaaccent = 611; - t.Cacute = 722; - t.atilde = 556; - t.Edotaccent = 667; - t.scaron = 500; - t.scedilla = 500; - t.iacute = 278; - t.lozenge = 471; - t.Rcaron = 722; - t.Gcommaaccent = 778; - t.ucircumflex = 556; - t.acircumflex = 556; - t.Amacron = 667; - t.rcaron = 333; - t.ccedilla = 500; - t.Zdotaccent = 611; - t.Thorn = 667; - t.Omacron = 778; - t.Racute = 722; - t.Sacute = 667; - t.dcaron = 643; - t.Umacron = 722; - t.uring = 556; - t.threesuperior = 333; - t.Ograve = 778; - t.Agrave = 667; - t.Abreve = 667; - t.multiply = 584; - t.uacute = 556; - t.Tcaron = 611; - t.partialdiff = 476; - t.ydieresis = 500; - t.Nacute = 722; - t.icircumflex = 278; - t.Ecircumflex = 667; - t.adieresis = 556; - t.edieresis = 556; - t.cacute = 500; - t.nacute = 556; - t.umacron = 556; - t.Ncaron = 722; - t.Iacute = 278; - t.plusminus = 584; - t.brokenbar = 260; - t.registered = 737; - t.Gbreve = 778; - t.Idotaccent = 278; - t.summation = 600; - t.Egrave = 667; - t.racute = 333; - t.omacron = 556; - t.Zacute = 611; - t.Zcaron = 611; - t.greaterequal = 549; - t.Eth = 722; - t.Ccedilla = 722; - t.lcommaaccent = 222; - t.tcaron = 317; - t.eogonek = 556; - t.Uogonek = 722; - t.Aacute = 667; - t.Adieresis = 667; - t.egrave = 556; - t.zacute = 500; - t.iogonek = 222; - t.Oacute = 778; - t.oacute = 556; - t.amacron = 556; - t.sacute = 500; - t.idieresis = 278; - t.Ocircumflex = 778; - t.Ugrave = 722; - t.Delta = 612; - t.thorn = 556; - t.twosuperior = 333; - t.Odieresis = 778; - t.mu = 556; - t.igrave = 278; - t.ohungarumlaut = 556; - t.Eogonek = 667; - t.dcroat = 556; - t.threequarters = 834; - t.Scedilla = 667; - t.lcaron = 299; - t.Kcommaaccent = 667; - t.Lacute = 556; - t.trademark = 1000; - t.edotaccent = 556; - t.Igrave = 278; - t.Imacron = 278; - t.Lcaron = 556; - t.onehalf = 834; - t.lessequal = 549; - t.ocircumflex = 556; - t.ntilde = 556; - t.Uhungarumlaut = 722; - t.Eacute = 667; - t.emacron = 556; - t.gbreve = 556; - t.onequarter = 834; - t.Scaron = 667; - t.Scommaaccent = 667; - t.Ohungarumlaut = 778; - t.degree = 400; - t.ograve = 556; - t.Ccaron = 722; - t.ugrave = 556; - t.radical = 453; - t.Dcaron = 722; - t.rcommaaccent = 333; - t.Ntilde = 722; - t.otilde = 556; - t.Rcommaaccent = 722; - t.Lcommaaccent = 556; - t.Atilde = 667; - t.Aogonek = 667; - t.Aring = 667; - t.Otilde = 778; - t.zdotaccent = 500; - t.Ecaron = 667; - t.Iogonek = 278; - t.kcommaaccent = 500; - t.minus = 584; - t.Icircumflex = 278; - t.ncaron = 556; - t.tcommaaccent = 278; - t.logicalnot = 584; - t.odieresis = 556; - t.udieresis = 556; - t.notequal = 549; - t.gcommaaccent = 556; - t.eth = 556; - t.zcaron = 500; - t.ncommaaccent = 556; - t.onesuperior = 333; - t.imacron = 278; - t.Euro = 556; - }); - t["Helvetica-Bold"] = (0, _core_utils.getLookupTableFactory)(function (t) { - t.space = 278; - t.exclam = 333; - t.quotedbl = 474; - t.numbersign = 556; - t.dollar = 556; - t.percent = 889; - t.ampersand = 722; - t.quoteright = 278; - t.parenleft = 333; - t.parenright = 333; - t.asterisk = 389; - t.plus = 584; - t.comma = 278; - t.hyphen = 333; - t.period = 278; - t.slash = 278; - t.zero = 556; - t.one = 556; - t.two = 556; - t.three = 556; - t.four = 556; - t.five = 556; - t.six = 556; - t.seven = 556; - t.eight = 556; - t.nine = 556; - t.colon = 333; - t.semicolon = 333; - t.less = 584; - t.equal = 584; - t.greater = 584; - t.question = 611; - t.at = 975; - t.A = 722; - t.B = 722; - t.C = 722; - t.D = 722; - t.E = 667; - t.F = 611; - t.G = 778; - t.H = 722; - t.I = 278; - t.J = 556; - t.K = 722; - t.L = 611; - t.M = 833; - t.N = 722; - t.O = 778; - t.P = 667; - t.Q = 778; - t.R = 722; - t.S = 667; - t.T = 611; - t.U = 722; - t.V = 667; - t.W = 944; - t.X = 667; - t.Y = 667; - t.Z = 611; - t.bracketleft = 333; - t.backslash = 278; - t.bracketright = 333; - t.asciicircum = 584; - t.underscore = 556; - t.quoteleft = 278; - t.a = 556; - t.b = 611; - t.c = 556; - t.d = 611; - t.e = 556; - t.f = 333; - t.g = 611; - t.h = 611; - t.i = 278; - t.j = 278; - t.k = 556; - t.l = 278; - t.m = 889; - t.n = 611; - t.o = 611; - t.p = 611; - t.q = 611; - t.r = 389; - t.s = 556; - t.t = 333; - t.u = 611; - t.v = 556; - t.w = 778; - t.x = 556; - t.y = 556; - t.z = 500; - t.braceleft = 389; - t.bar = 280; - t.braceright = 389; - t.asciitilde = 584; - t.exclamdown = 333; - t.cent = 556; - t.sterling = 556; - t.fraction = 167; - t.yen = 556; - t.florin = 556; - t.section = 556; - t.currency = 556; - t.quotesingle = 238; - t.quotedblleft = 500; - t.guillemotleft = 556; - t.guilsinglleft = 333; - t.guilsinglright = 333; - t.fi = 611; - t.fl = 611; - t.endash = 556; - t.dagger = 556; - t.daggerdbl = 556; - t.periodcentered = 278; - t.paragraph = 556; - t.bullet = 350; - t.quotesinglbase = 278; - t.quotedblbase = 500; - t.quotedblright = 500; - t.guillemotright = 556; - t.ellipsis = 1000; - t.perthousand = 1000; - t.questiondown = 611; - t.grave = 333; - t.acute = 333; - t.circumflex = 333; - t.tilde = 333; - t.macron = 333; - t.breve = 333; - t.dotaccent = 333; - t.dieresis = 333; - t.ring = 333; - t.cedilla = 333; - t.hungarumlaut = 333; - t.ogonek = 333; - t.caron = 333; - t.emdash = 1000; - t.AE = 1000; - t.ordfeminine = 370; - t.Lslash = 611; - t.Oslash = 778; - t.OE = 1000; - t.ordmasculine = 365; - t.ae = 889; - t.dotlessi = 278; - t.lslash = 278; - t.oslash = 611; - t.oe = 944; - t.germandbls = 611; - t.Idieresis = 278; - t.eacute = 556; - t.abreve = 556; - t.uhungarumlaut = 611; - t.ecaron = 556; - t.Ydieresis = 667; - t.divide = 584; - t.Yacute = 667; - t.Acircumflex = 722; - t.aacute = 556; - t.Ucircumflex = 722; - t.yacute = 556; - t.scommaaccent = 556; - t.ecircumflex = 556; - t.Uring = 722; - t.Udieresis = 722; - t.aogonek = 556; - t.Uacute = 722; - t.uogonek = 611; - t.Edieresis = 667; - t.Dcroat = 722; - t.commaaccent = 250; - t.copyright = 737; - t.Emacron = 667; - t.ccaron = 556; - t.aring = 556; - t.Ncommaaccent = 722; - t.lacute = 278; - t.agrave = 556; - t.Tcommaaccent = 611; - t.Cacute = 722; - t.atilde = 556; - t.Edotaccent = 667; - t.scaron = 556; - t.scedilla = 556; - t.iacute = 278; - t.lozenge = 494; - t.Rcaron = 722; - t.Gcommaaccent = 778; - t.ucircumflex = 611; - t.acircumflex = 556; - t.Amacron = 722; - t.rcaron = 389; - t.ccedilla = 556; - t.Zdotaccent = 611; - t.Thorn = 667; - t.Omacron = 778; - t.Racute = 722; - t.Sacute = 667; - t.dcaron = 743; - t.Umacron = 722; - t.uring = 611; - t.threesuperior = 333; - t.Ograve = 778; - t.Agrave = 722; - t.Abreve = 722; - t.multiply = 584; - t.uacute = 611; - t.Tcaron = 611; - t.partialdiff = 494; - t.ydieresis = 556; - t.Nacute = 722; - t.icircumflex = 278; - t.Ecircumflex = 667; - t.adieresis = 556; - t.edieresis = 556; - t.cacute = 556; - t.nacute = 611; - t.umacron = 611; - t.Ncaron = 722; - t.Iacute = 278; - t.plusminus = 584; - t.brokenbar = 280; - t.registered = 737; - t.Gbreve = 778; - t.Idotaccent = 278; - t.summation = 600; - t.Egrave = 667; - t.racute = 389; - t.omacron = 611; - t.Zacute = 611; - t.Zcaron = 611; - t.greaterequal = 549; - t.Eth = 722; - t.Ccedilla = 722; - t.lcommaaccent = 278; - t.tcaron = 389; - t.eogonek = 556; - t.Uogonek = 722; - t.Aacute = 722; - t.Adieresis = 722; - t.egrave = 556; - t.zacute = 500; - t.iogonek = 278; - t.Oacute = 778; - t.oacute = 611; - t.amacron = 556; - t.sacute = 556; - t.idieresis = 278; - t.Ocircumflex = 778; - t.Ugrave = 722; - t.Delta = 612; - t.thorn = 611; - t.twosuperior = 333; - t.Odieresis = 778; - t.mu = 611; - t.igrave = 278; - t.ohungarumlaut = 611; - t.Eogonek = 667; - t.dcroat = 611; - t.threequarters = 834; - t.Scedilla = 667; - t.lcaron = 400; - t.Kcommaaccent = 722; - t.Lacute = 611; - t.trademark = 1000; - t.edotaccent = 556; - t.Igrave = 278; - t.Imacron = 278; - t.Lcaron = 611; - t.onehalf = 834; - t.lessequal = 549; - t.ocircumflex = 611; - t.ntilde = 611; - t.Uhungarumlaut = 722; - t.Eacute = 667; - t.emacron = 556; - t.gbreve = 611; - t.onequarter = 834; - t.Scaron = 667; - t.Scommaaccent = 667; - t.Ohungarumlaut = 778; - t.degree = 400; - t.ograve = 611; - t.Ccaron = 722; - t.ugrave = 611; - t.radical = 549; - t.Dcaron = 722; - t.rcommaaccent = 389; - t.Ntilde = 722; - t.otilde = 611; - t.Rcommaaccent = 722; - t.Lcommaaccent = 611; - t.Atilde = 722; - t.Aogonek = 722; - t.Aring = 722; - t.Otilde = 778; - t.zdotaccent = 500; - t.Ecaron = 667; - t.Iogonek = 278; - t.kcommaaccent = 556; - t.minus = 584; - t.Icircumflex = 278; - t.ncaron = 611; - t.tcommaaccent = 333; - t.logicalnot = 584; - t.odieresis = 611; - t.udieresis = 611; - t.notequal = 549; - t.gcommaaccent = 611; - t.eth = 611; - t.zcaron = 500; - t.ncommaaccent = 611; - t.onesuperior = 333; - t.imacron = 278; - t.Euro = 556; - }); - t["Helvetica-BoldOblique"] = (0, _core_utils.getLookupTableFactory)(function (t) { - t.space = 278; - t.exclam = 333; - t.quotedbl = 474; - t.numbersign = 556; - t.dollar = 556; - t.percent = 889; - t.ampersand = 722; - t.quoteright = 278; - t.parenleft = 333; - t.parenright = 333; - t.asterisk = 389; - t.plus = 584; - t.comma = 278; - t.hyphen = 333; - t.period = 278; - t.slash = 278; - t.zero = 556; - t.one = 556; - t.two = 556; - t.three = 556; - t.four = 556; - t.five = 556; - t.six = 556; - t.seven = 556; - t.eight = 556; - t.nine = 556; - t.colon = 333; - t.semicolon = 333; - t.less = 584; - t.equal = 584; - t.greater = 584; - t.question = 611; - t.at = 975; - t.A = 722; - t.B = 722; - t.C = 722; - t.D = 722; - t.E = 667; - t.F = 611; - t.G = 778; - t.H = 722; - t.I = 278; - t.J = 556; - t.K = 722; - t.L = 611; - t.M = 833; - t.N = 722; - t.O = 778; - t.P = 667; - t.Q = 778; - t.R = 722; - t.S = 667; - t.T = 611; - t.U = 722; - t.V = 667; - t.W = 944; - t.X = 667; - t.Y = 667; - t.Z = 611; - t.bracketleft = 333; - t.backslash = 278; - t.bracketright = 333; - t.asciicircum = 584; - t.underscore = 556; - t.quoteleft = 278; - t.a = 556; - t.b = 611; - t.c = 556; - t.d = 611; - t.e = 556; - t.f = 333; - t.g = 611; - t.h = 611; - t.i = 278; - t.j = 278; - t.k = 556; - t.l = 278; - t.m = 889; - t.n = 611; - t.o = 611; - t.p = 611; - t.q = 611; - t.r = 389; - t.s = 556; - t.t = 333; - t.u = 611; - t.v = 556; - t.w = 778; - t.x = 556; - t.y = 556; - t.z = 500; - t.braceleft = 389; - t.bar = 280; - t.braceright = 389; - t.asciitilde = 584; - t.exclamdown = 333; - t.cent = 556; - t.sterling = 556; - t.fraction = 167; - t.yen = 556; - t.florin = 556; - t.section = 556; - t.currency = 556; - t.quotesingle = 238; - t.quotedblleft = 500; - t.guillemotleft = 556; - t.guilsinglleft = 333; - t.guilsinglright = 333; - t.fi = 611; - t.fl = 611; - t.endash = 556; - t.dagger = 556; - t.daggerdbl = 556; - t.periodcentered = 278; - t.paragraph = 556; - t.bullet = 350; - t.quotesinglbase = 278; - t.quotedblbase = 500; - t.quotedblright = 500; - t.guillemotright = 556; - t.ellipsis = 1000; - t.perthousand = 1000; - t.questiondown = 611; - t.grave = 333; - t.acute = 333; - t.circumflex = 333; - t.tilde = 333; - t.macron = 333; - t.breve = 333; - t.dotaccent = 333; - t.dieresis = 333; - t.ring = 333; - t.cedilla = 333; - t.hungarumlaut = 333; - t.ogonek = 333; - t.caron = 333; - t.emdash = 1000; - t.AE = 1000; - t.ordfeminine = 370; - t.Lslash = 611; - t.Oslash = 778; - t.OE = 1000; - t.ordmasculine = 365; - t.ae = 889; - t.dotlessi = 278; - t.lslash = 278; - t.oslash = 611; - t.oe = 944; - t.germandbls = 611; - t.Idieresis = 278; - t.eacute = 556; - t.abreve = 556; - t.uhungarumlaut = 611; - t.ecaron = 556; - t.Ydieresis = 667; - t.divide = 584; - t.Yacute = 667; - t.Acircumflex = 722; - t.aacute = 556; - t.Ucircumflex = 722; - t.yacute = 556; - t.scommaaccent = 556; - t.ecircumflex = 556; - t.Uring = 722; - t.Udieresis = 722; - t.aogonek = 556; - t.Uacute = 722; - t.uogonek = 611; - t.Edieresis = 667; - t.Dcroat = 722; - t.commaaccent = 250; - t.copyright = 737; - t.Emacron = 667; - t.ccaron = 556; - t.aring = 556; - t.Ncommaaccent = 722; - t.lacute = 278; - t.agrave = 556; - t.Tcommaaccent = 611; - t.Cacute = 722; - t.atilde = 556; - t.Edotaccent = 667; - t.scaron = 556; - t.scedilla = 556; - t.iacute = 278; - t.lozenge = 494; - t.Rcaron = 722; - t.Gcommaaccent = 778; - t.ucircumflex = 611; - t.acircumflex = 556; - t.Amacron = 722; - t.rcaron = 389; - t.ccedilla = 556; - t.Zdotaccent = 611; - t.Thorn = 667; - t.Omacron = 778; - t.Racute = 722; - t.Sacute = 667; - t.dcaron = 743; - t.Umacron = 722; - t.uring = 611; - t.threesuperior = 333; - t.Ograve = 778; - t.Agrave = 722; - t.Abreve = 722; - t.multiply = 584; - t.uacute = 611; - t.Tcaron = 611; - t.partialdiff = 494; - t.ydieresis = 556; - t.Nacute = 722; - t.icircumflex = 278; - t.Ecircumflex = 667; - t.adieresis = 556; - t.edieresis = 556; - t.cacute = 556; - t.nacute = 611; - t.umacron = 611; - t.Ncaron = 722; - t.Iacute = 278; - t.plusminus = 584; - t.brokenbar = 280; - t.registered = 737; - t.Gbreve = 778; - t.Idotaccent = 278; - t.summation = 600; - t.Egrave = 667; - t.racute = 389; - t.omacron = 611; - t.Zacute = 611; - t.Zcaron = 611; - t.greaterequal = 549; - t.Eth = 722; - t.Ccedilla = 722; - t.lcommaaccent = 278; - t.tcaron = 389; - t.eogonek = 556; - t.Uogonek = 722; - t.Aacute = 722; - t.Adieresis = 722; - t.egrave = 556; - t.zacute = 500; - t.iogonek = 278; - t.Oacute = 778; - t.oacute = 611; - t.amacron = 556; - t.sacute = 556; - t.idieresis = 278; - t.Ocircumflex = 778; - t.Ugrave = 722; - t.Delta = 612; - t.thorn = 611; - t.twosuperior = 333; - t.Odieresis = 778; - t.mu = 611; - t.igrave = 278; - t.ohungarumlaut = 611; - t.Eogonek = 667; - t.dcroat = 611; - t.threequarters = 834; - t.Scedilla = 667; - t.lcaron = 400; - t.Kcommaaccent = 722; - t.Lacute = 611; - t.trademark = 1000; - t.edotaccent = 556; - t.Igrave = 278; - t.Imacron = 278; - t.Lcaron = 611; - t.onehalf = 834; - t.lessequal = 549; - t.ocircumflex = 611; - t.ntilde = 611; - t.Uhungarumlaut = 722; - t.Eacute = 667; - t.emacron = 556; - t.gbreve = 611; - t.onequarter = 834; - t.Scaron = 667; - t.Scommaaccent = 667; - t.Ohungarumlaut = 778; - t.degree = 400; - t.ograve = 611; - t.Ccaron = 722; - t.ugrave = 611; - t.radical = 549; - t.Dcaron = 722; - t.rcommaaccent = 389; - t.Ntilde = 722; - t.otilde = 611; - t.Rcommaaccent = 722; - t.Lcommaaccent = 611; - t.Atilde = 722; - t.Aogonek = 722; - t.Aring = 722; - t.Otilde = 778; - t.zdotaccent = 500; - t.Ecaron = 667; - t.Iogonek = 278; - t.kcommaaccent = 556; - t.minus = 584; - t.Icircumflex = 278; - t.ncaron = 611; - t.tcommaaccent = 333; - t.logicalnot = 584; - t.odieresis = 611; - t.udieresis = 611; - t.notequal = 549; - t.gcommaaccent = 611; - t.eth = 611; - t.zcaron = 500; - t.ncommaaccent = 611; - t.onesuperior = 333; - t.imacron = 278; - t.Euro = 556; - }); - t["Helvetica-Oblique"] = (0, _core_utils.getLookupTableFactory)(function (t) { - t.space = 278; - t.exclam = 278; - t.quotedbl = 355; - t.numbersign = 556; - t.dollar = 556; - t.percent = 889; - t.ampersand = 667; - t.quoteright = 222; - t.parenleft = 333; - t.parenright = 333; - t.asterisk = 389; - t.plus = 584; - t.comma = 278; - t.hyphen = 333; - t.period = 278; - t.slash = 278; - t.zero = 556; - t.one = 556; - t.two = 556; - t.three = 556; - t.four = 556; - t.five = 556; - t.six = 556; - t.seven = 556; - t.eight = 556; - t.nine = 556; - t.colon = 278; - t.semicolon = 278; - t.less = 584; - t.equal = 584; - t.greater = 584; - t.question = 556; - t.at = 1015; - t.A = 667; - t.B = 667; - t.C = 722; - t.D = 722; - t.E = 667; - t.F = 611; - t.G = 778; - t.H = 722; - t.I = 278; - t.J = 500; - t.K = 667; - t.L = 556; - t.M = 833; - t.N = 722; - t.O = 778; - t.P = 667; - t.Q = 778; - t.R = 722; - t.S = 667; - t.T = 611; - t.U = 722; - t.V = 667; - t.W = 944; - t.X = 667; - t.Y = 667; - t.Z = 611; - t.bracketleft = 278; - t.backslash = 278; - t.bracketright = 278; - t.asciicircum = 469; - t.underscore = 556; - t.quoteleft = 222; - t.a = 556; - t.b = 556; - t.c = 500; - t.d = 556; - t.e = 556; - t.f = 278; - t.g = 556; - t.h = 556; - t.i = 222; - t.j = 222; - t.k = 500; - t.l = 222; - t.m = 833; - t.n = 556; - t.o = 556; - t.p = 556; - t.q = 556; - t.r = 333; - t.s = 500; - t.t = 278; - t.u = 556; - t.v = 500; - t.w = 722; - t.x = 500; - t.y = 500; - t.z = 500; - t.braceleft = 334; - t.bar = 260; - t.braceright = 334; - t.asciitilde = 584; - t.exclamdown = 333; - t.cent = 556; - t.sterling = 556; - t.fraction = 167; - t.yen = 556; - t.florin = 556; - t.section = 556; - t.currency = 556; - t.quotesingle = 191; - t.quotedblleft = 333; - t.guillemotleft = 556; - t.guilsinglleft = 333; - t.guilsinglright = 333; - t.fi = 500; - t.fl = 500; - t.endash = 556; - t.dagger = 556; - t.daggerdbl = 556; - t.periodcentered = 278; - t.paragraph = 537; - t.bullet = 350; - t.quotesinglbase = 222; - t.quotedblbase = 333; - t.quotedblright = 333; - t.guillemotright = 556; - t.ellipsis = 1000; - t.perthousand = 1000; - t.questiondown = 611; - t.grave = 333; - t.acute = 333; - t.circumflex = 333; - t.tilde = 333; - t.macron = 333; - t.breve = 333; - t.dotaccent = 333; - t.dieresis = 333; - t.ring = 333; - t.cedilla = 333; - t.hungarumlaut = 333; - t.ogonek = 333; - t.caron = 333; - t.emdash = 1000; - t.AE = 1000; - t.ordfeminine = 370; - t.Lslash = 556; - t.Oslash = 778; - t.OE = 1000; - t.ordmasculine = 365; - t.ae = 889; - t.dotlessi = 278; - t.lslash = 222; - t.oslash = 611; - t.oe = 944; - t.germandbls = 611; - t.Idieresis = 278; - t.eacute = 556; - t.abreve = 556; - t.uhungarumlaut = 556; - t.ecaron = 556; - t.Ydieresis = 667; - t.divide = 584; - t.Yacute = 667; - t.Acircumflex = 667; - t.aacute = 556; - t.Ucircumflex = 722; - t.yacute = 500; - t.scommaaccent = 500; - t.ecircumflex = 556; - t.Uring = 722; - t.Udieresis = 722; - t.aogonek = 556; - t.Uacute = 722; - t.uogonek = 556; - t.Edieresis = 667; - t.Dcroat = 722; - t.commaaccent = 250; - t.copyright = 737; - t.Emacron = 667; - t.ccaron = 500; - t.aring = 556; - t.Ncommaaccent = 722; - t.lacute = 222; - t.agrave = 556; - t.Tcommaaccent = 611; - t.Cacute = 722; - t.atilde = 556; - t.Edotaccent = 667; - t.scaron = 500; - t.scedilla = 500; - t.iacute = 278; - t.lozenge = 471; - t.Rcaron = 722; - t.Gcommaaccent = 778; - t.ucircumflex = 556; - t.acircumflex = 556; - t.Amacron = 667; - t.rcaron = 333; - t.ccedilla = 500; - t.Zdotaccent = 611; - t.Thorn = 667; - t.Omacron = 778; - t.Racute = 722; - t.Sacute = 667; - t.dcaron = 643; - t.Umacron = 722; - t.uring = 556; - t.threesuperior = 333; - t.Ograve = 778; - t.Agrave = 667; - t.Abreve = 667; - t.multiply = 584; - t.uacute = 556; - t.Tcaron = 611; - t.partialdiff = 476; - t.ydieresis = 500; - t.Nacute = 722; - t.icircumflex = 278; - t.Ecircumflex = 667; - t.adieresis = 556; - t.edieresis = 556; - t.cacute = 500; - t.nacute = 556; - t.umacron = 556; - t.Ncaron = 722; - t.Iacute = 278; - t.plusminus = 584; - t.brokenbar = 260; - t.registered = 737; - t.Gbreve = 778; - t.Idotaccent = 278; - t.summation = 600; - t.Egrave = 667; - t.racute = 333; - t.omacron = 556; - t.Zacute = 611; - t.Zcaron = 611; - t.greaterequal = 549; - t.Eth = 722; - t.Ccedilla = 722; - t.lcommaaccent = 222; - t.tcaron = 317; - t.eogonek = 556; - t.Uogonek = 722; - t.Aacute = 667; - t.Adieresis = 667; - t.egrave = 556; - t.zacute = 500; - t.iogonek = 222; - t.Oacute = 778; - t.oacute = 556; - t.amacron = 556; - t.sacute = 500; - t.idieresis = 278; - t.Ocircumflex = 778; - t.Ugrave = 722; - t.Delta = 612; - t.thorn = 556; - t.twosuperior = 333; - t.Odieresis = 778; - t.mu = 556; - t.igrave = 278; - t.ohungarumlaut = 556; - t.Eogonek = 667; - t.dcroat = 556; - t.threequarters = 834; - t.Scedilla = 667; - t.lcaron = 299; - t.Kcommaaccent = 667; - t.Lacute = 556; - t.trademark = 1000; - t.edotaccent = 556; - t.Igrave = 278; - t.Imacron = 278; - t.Lcaron = 556; - t.onehalf = 834; - t.lessequal = 549; - t.ocircumflex = 556; - t.ntilde = 556; - t.Uhungarumlaut = 722; - t.Eacute = 667; - t.emacron = 556; - t.gbreve = 556; - t.onequarter = 834; - t.Scaron = 667; - t.Scommaaccent = 667; - t.Ohungarumlaut = 778; - t.degree = 400; - t.ograve = 556; - t.Ccaron = 722; - t.ugrave = 556; - t.radical = 453; - t.Dcaron = 722; - t.rcommaaccent = 333; - t.Ntilde = 722; - t.otilde = 556; - t.Rcommaaccent = 722; - t.Lcommaaccent = 556; - t.Atilde = 667; - t.Aogonek = 667; - t.Aring = 667; - t.Otilde = 778; - t.zdotaccent = 500; - t.Ecaron = 667; - t.Iogonek = 278; - t.kcommaaccent = 500; - t.minus = 584; - t.Icircumflex = 278; - t.ncaron = 556; - t.tcommaaccent = 278; - t.logicalnot = 584; - t.odieresis = 556; - t.udieresis = 556; - t.notequal = 549; - t.gcommaaccent = 556; - t.eth = 556; - t.zcaron = 500; - t.ncommaaccent = 556; - t.onesuperior = 333; - t.imacron = 278; - t.Euro = 556; - }); - t.Symbol = (0, _core_utils.getLookupTableFactory)(function (t) { - t.space = 250; - t.exclam = 333; - t.universal = 713; - t.numbersign = 500; - t.existential = 549; - t.percent = 833; - t.ampersand = 778; - t.suchthat = 439; - t.parenleft = 333; - t.parenright = 333; - t.asteriskmath = 500; - t.plus = 549; - t.comma = 250; - t.minus = 549; - t.period = 250; - t.slash = 278; - t.zero = 500; - t.one = 500; - t.two = 500; - t.three = 500; - t.four = 500; - t.five = 500; - t.six = 500; - t.seven = 500; - t.eight = 500; - t.nine = 500; - t.colon = 278; - t.semicolon = 278; - t.less = 549; - t.equal = 549; - t.greater = 549; - t.question = 444; - t.congruent = 549; - t.Alpha = 722; - t.Beta = 667; - t.Chi = 722; - t.Delta = 612; - t.Epsilon = 611; - t.Phi = 763; - t.Gamma = 603; - t.Eta = 722; - t.Iota = 333; - t.theta1 = 631; - t.Kappa = 722; - t.Lambda = 686; - t.Mu = 889; - t.Nu = 722; - t.Omicron = 722; - t.Pi = 768; - t.Theta = 741; - t.Rho = 556; - t.Sigma = 592; - t.Tau = 611; - t.Upsilon = 690; - t.sigma1 = 439; - t.Omega = 768; - t.Xi = 645; - t.Psi = 795; - t.Zeta = 611; - t.bracketleft = 333; - t.therefore = 863; - t.bracketright = 333; - t.perpendicular = 658; - t.underscore = 500; - t.radicalex = 500; - t.alpha = 631; - t.beta = 549; - t.chi = 549; - t.delta = 494; - t.epsilon = 439; - t.phi = 521; - t.gamma = 411; - t.eta = 603; - t.iota = 329; - t.phi1 = 603; - t.kappa = 549; - t.lambda = 549; - t.mu = 576; - t.nu = 521; - t.omicron = 549; - t.pi = 549; - t.theta = 521; - t.rho = 549; - t.sigma = 603; - t.tau = 439; - t.upsilon = 576; - t.omega1 = 713; - t.omega = 686; - t.xi = 493; - t.psi = 686; - t.zeta = 494; - t.braceleft = 480; - t.bar = 200; - t.braceright = 480; - t.similar = 549; - t.Euro = 750; - t.Upsilon1 = 620; - t.minute = 247; - t.lessequal = 549; - t.fraction = 167; - t.infinity = 713; - t.florin = 500; - t.club = 753; - t.diamond = 753; - t.heart = 753; - t.spade = 753; - t.arrowboth = 1042; - t.arrowleft = 987; - t.arrowup = 603; - t.arrowright = 987; - t.arrowdown = 603; - t.degree = 400; - t.plusminus = 549; - t.second = 411; - t.greaterequal = 549; - t.multiply = 549; - t.proportional = 713; - t.partialdiff = 494; - t.bullet = 460; - t.divide = 549; - t.notequal = 549; - t.equivalence = 549; - t.approxequal = 549; - t.ellipsis = 1000; - t.arrowvertex = 603; - t.arrowhorizex = 1000; - t.carriagereturn = 658; - t.aleph = 823; - t.Ifraktur = 686; - t.Rfraktur = 795; - t.weierstrass = 987; - t.circlemultiply = 768; - t.circleplus = 768; - t.emptyset = 823; - t.intersection = 768; - t.union = 768; - t.propersuperset = 713; - t.reflexsuperset = 713; - t.notsubset = 713; - t.propersubset = 713; - t.reflexsubset = 713; - t.element = 713; - t.notelement = 713; - t.angle = 768; - t.gradient = 713; - t.registerserif = 790; - t.copyrightserif = 790; - t.trademarkserif = 890; - t.product = 823; - t.radical = 549; - t.dotmath = 250; - t.logicalnot = 713; - t.logicaland = 603; - t.logicalor = 603; - t.arrowdblboth = 1042; - t.arrowdblleft = 987; - t.arrowdblup = 603; - t.arrowdblright = 987; - t.arrowdbldown = 603; - t.lozenge = 494; - t.angleleft = 329; - t.registersans = 790; - t.copyrightsans = 790; - t.trademarksans = 786; - t.summation = 713; - t.parenlefttp = 384; - t.parenleftex = 384; - t.parenleftbt = 384; - t.bracketlefttp = 384; - t.bracketleftex = 384; - t.bracketleftbt = 384; - t.bracelefttp = 494; - t.braceleftmid = 494; - t.braceleftbt = 494; - t.braceex = 494; - t.angleright = 329; - t.integral = 274; - t.integraltp = 686; - t.integralex = 686; - t.integralbt = 686; - t.parenrighttp = 384; - t.parenrightex = 384; - t.parenrightbt = 384; - t.bracketrighttp = 384; - t.bracketrightex = 384; - t.bracketrightbt = 384; - t.bracerighttp = 494; - t.bracerightmid = 494; - t.bracerightbt = 494; - t.apple = 790; - }); - t["Times-Roman"] = (0, _core_utils.getLookupTableFactory)(function (t) { - t.space = 250; - t.exclam = 333; - t.quotedbl = 408; - t.numbersign = 500; - t.dollar = 500; - t.percent = 833; - t.ampersand = 778; - t.quoteright = 333; - t.parenleft = 333; - t.parenright = 333; - t.asterisk = 500; - t.plus = 564; - t.comma = 250; - t.hyphen = 333; - t.period = 250; - t.slash = 278; - t.zero = 500; - t.one = 500; - t.two = 500; - t.three = 500; - t.four = 500; - t.five = 500; - t.six = 500; - t.seven = 500; - t.eight = 500; - t.nine = 500; - t.colon = 278; - t.semicolon = 278; - t.less = 564; - t.equal = 564; - t.greater = 564; - t.question = 444; - t.at = 921; - t.A = 722; - t.B = 667; - t.C = 667; - t.D = 722; - t.E = 611; - t.F = 556; - t.G = 722; - t.H = 722; - t.I = 333; - t.J = 389; - t.K = 722; - t.L = 611; - t.M = 889; - t.N = 722; - t.O = 722; - t.P = 556; - t.Q = 722; - t.R = 667; - t.S = 556; - t.T = 611; - t.U = 722; - t.V = 722; - t.W = 944; - t.X = 722; - t.Y = 722; - t.Z = 611; - t.bracketleft = 333; - t.backslash = 278; - t.bracketright = 333; - t.asciicircum = 469; - t.underscore = 500; - t.quoteleft = 333; - t.a = 444; - t.b = 500; - t.c = 444; - t.d = 500; - t.e = 444; - t.f = 333; - t.g = 500; - t.h = 500; - t.i = 278; - t.j = 278; - t.k = 500; - t.l = 278; - t.m = 778; - t.n = 500; - t.o = 500; - t.p = 500; - t.q = 500; - t.r = 333; - t.s = 389; - t.t = 278; - t.u = 500; - t.v = 500; - t.w = 722; - t.x = 500; - t.y = 500; - t.z = 444; - t.braceleft = 480; - t.bar = 200; - t.braceright = 480; - t.asciitilde = 541; - t.exclamdown = 333; - t.cent = 500; - t.sterling = 500; - t.fraction = 167; - t.yen = 500; - t.florin = 500; - t.section = 500; - t.currency = 500; - t.quotesingle = 180; - t.quotedblleft = 444; - t.guillemotleft = 500; - t.guilsinglleft = 333; - t.guilsinglright = 333; - t.fi = 556; - t.fl = 556; - t.endash = 500; - t.dagger = 500; - t.daggerdbl = 500; - t.periodcentered = 250; - t.paragraph = 453; - t.bullet = 350; - t.quotesinglbase = 333; - t.quotedblbase = 444; - t.quotedblright = 444; - t.guillemotright = 500; - t.ellipsis = 1000; - t.perthousand = 1000; - t.questiondown = 444; - t.grave = 333; - t.acute = 333; - t.circumflex = 333; - t.tilde = 333; - t.macron = 333; - t.breve = 333; - t.dotaccent = 333; - t.dieresis = 333; - t.ring = 333; - t.cedilla = 333; - t.hungarumlaut = 333; - t.ogonek = 333; - t.caron = 333; - t.emdash = 1000; - t.AE = 889; - t.ordfeminine = 276; - t.Lslash = 611; - t.Oslash = 722; - t.OE = 889; - t.ordmasculine = 310; - t.ae = 667; - t.dotlessi = 278; - t.lslash = 278; - t.oslash = 500; - t.oe = 722; - t.germandbls = 500; - t.Idieresis = 333; - t.eacute = 444; - t.abreve = 444; - t.uhungarumlaut = 500; - t.ecaron = 444; - t.Ydieresis = 722; - t.divide = 564; - t.Yacute = 722; - t.Acircumflex = 722; - t.aacute = 444; - t.Ucircumflex = 722; - t.yacute = 500; - t.scommaaccent = 389; - t.ecircumflex = 444; - t.Uring = 722; - t.Udieresis = 722; - t.aogonek = 444; - t.Uacute = 722; - t.uogonek = 500; - t.Edieresis = 611; - t.Dcroat = 722; - t.commaaccent = 250; - t.copyright = 760; - t.Emacron = 611; - t.ccaron = 444; - t.aring = 444; - t.Ncommaaccent = 722; - t.lacute = 278; - t.agrave = 444; - t.Tcommaaccent = 611; - t.Cacute = 667; - t.atilde = 444; - t.Edotaccent = 611; - t.scaron = 389; - t.scedilla = 389; - t.iacute = 278; - t.lozenge = 471; - t.Rcaron = 667; - t.Gcommaaccent = 722; - t.ucircumflex = 500; - t.acircumflex = 444; - t.Amacron = 722; - t.rcaron = 333; - t.ccedilla = 444; - t.Zdotaccent = 611; - t.Thorn = 556; - t.Omacron = 722; - t.Racute = 667; - t.Sacute = 556; - t.dcaron = 588; - t.Umacron = 722; - t.uring = 500; - t.threesuperior = 300; - t.Ograve = 722; - t.Agrave = 722; - t.Abreve = 722; - t.multiply = 564; - t.uacute = 500; - t.Tcaron = 611; - t.partialdiff = 476; - t.ydieresis = 500; - t.Nacute = 722; - t.icircumflex = 278; - t.Ecircumflex = 611; - t.adieresis = 444; - t.edieresis = 444; - t.cacute = 444; - t.nacute = 500; - t.umacron = 500; - t.Ncaron = 722; - t.Iacute = 333; - t.plusminus = 564; - t.brokenbar = 200; - t.registered = 760; - t.Gbreve = 722; - t.Idotaccent = 333; - t.summation = 600; - t.Egrave = 611; - t.racute = 333; - t.omacron = 500; - t.Zacute = 611; - t.Zcaron = 611; - t.greaterequal = 549; - t.Eth = 722; - t.Ccedilla = 667; - t.lcommaaccent = 278; - t.tcaron = 326; - t.eogonek = 444; - t.Uogonek = 722; - t.Aacute = 722; - t.Adieresis = 722; - t.egrave = 444; - t.zacute = 444; - t.iogonek = 278; - t.Oacute = 722; - t.oacute = 500; - t.amacron = 444; - t.sacute = 389; - t.idieresis = 278; - t.Ocircumflex = 722; - t.Ugrave = 722; - t.Delta = 612; - t.thorn = 500; - t.twosuperior = 300; - t.Odieresis = 722; - t.mu = 500; - t.igrave = 278; - t.ohungarumlaut = 500; - t.Eogonek = 611; - t.dcroat = 500; - t.threequarters = 750; - t.Scedilla = 556; - t.lcaron = 344; - t.Kcommaaccent = 722; - t.Lacute = 611; - t.trademark = 980; - t.edotaccent = 444; - t.Igrave = 333; - t.Imacron = 333; - t.Lcaron = 611; - t.onehalf = 750; - t.lessequal = 549; - t.ocircumflex = 500; - t.ntilde = 500; - t.Uhungarumlaut = 722; - t.Eacute = 611; - t.emacron = 444; - t.gbreve = 500; - t.onequarter = 750; - t.Scaron = 556; - t.Scommaaccent = 556; - t.Ohungarumlaut = 722; - t.degree = 400; - t.ograve = 500; - t.Ccaron = 667; - t.ugrave = 500; - t.radical = 453; - t.Dcaron = 722; - t.rcommaaccent = 333; - t.Ntilde = 722; - t.otilde = 500; - t.Rcommaaccent = 667; - t.Lcommaaccent = 611; - t.Atilde = 722; - t.Aogonek = 722; - t.Aring = 722; - t.Otilde = 722; - t.zdotaccent = 444; - t.Ecaron = 611; - t.Iogonek = 333; - t.kcommaaccent = 500; - t.minus = 564; - t.Icircumflex = 333; - t.ncaron = 500; - t.tcommaaccent = 278; - t.logicalnot = 564; - t.odieresis = 500; - t.udieresis = 500; - t.notequal = 549; - t.gcommaaccent = 500; - t.eth = 500; - t.zcaron = 444; - t.ncommaaccent = 500; - t.onesuperior = 300; - t.imacron = 278; - t.Euro = 500; - }); - t["Times-Bold"] = (0, _core_utils.getLookupTableFactory)(function (t) { - t.space = 250; - t.exclam = 333; - t.quotedbl = 555; - t.numbersign = 500; - t.dollar = 500; - t.percent = 1000; - t.ampersand = 833; - t.quoteright = 333; - t.parenleft = 333; - t.parenright = 333; - t.asterisk = 500; - t.plus = 570; - t.comma = 250; - t.hyphen = 333; - t.period = 250; - t.slash = 278; - t.zero = 500; - t.one = 500; - t.two = 500; - t.three = 500; - t.four = 500; - t.five = 500; - t.six = 500; - t.seven = 500; - t.eight = 500; - t.nine = 500; - t.colon = 333; - t.semicolon = 333; - t.less = 570; - t.equal = 570; - t.greater = 570; - t.question = 500; - t.at = 930; - t.A = 722; - t.B = 667; - t.C = 722; - t.D = 722; - t.E = 667; - t.F = 611; - t.G = 778; - t.H = 778; - t.I = 389; - t.J = 500; - t.K = 778; - t.L = 667; - t.M = 944; - t.N = 722; - t.O = 778; - t.P = 611; - t.Q = 778; - t.R = 722; - t.S = 556; - t.T = 667; - t.U = 722; - t.V = 722; - t.W = 1000; - t.X = 722; - t.Y = 722; - t.Z = 667; - t.bracketleft = 333; - t.backslash = 278; - t.bracketright = 333; - t.asciicircum = 581; - t.underscore = 500; - t.quoteleft = 333; - t.a = 500; - t.b = 556; - t.c = 444; - t.d = 556; - t.e = 444; - t.f = 333; - t.g = 500; - t.h = 556; - t.i = 278; - t.j = 333; - t.k = 556; - t.l = 278; - t.m = 833; - t.n = 556; - t.o = 500; - t.p = 556; - t.q = 556; - t.r = 444; - t.s = 389; - t.t = 333; - t.u = 556; - t.v = 500; - t.w = 722; - t.x = 500; - t.y = 500; - t.z = 444; - t.braceleft = 394; - t.bar = 220; - t.braceright = 394; - t.asciitilde = 520; - t.exclamdown = 333; - t.cent = 500; - t.sterling = 500; - t.fraction = 167; - t.yen = 500; - t.florin = 500; - t.section = 500; - t.currency = 500; - t.quotesingle = 278; - t.quotedblleft = 500; - t.guillemotleft = 500; - t.guilsinglleft = 333; - t.guilsinglright = 333; - t.fi = 556; - t.fl = 556; - t.endash = 500; - t.dagger = 500; - t.daggerdbl = 500; - t.periodcentered = 250; - t.paragraph = 540; - t.bullet = 350; - t.quotesinglbase = 333; - t.quotedblbase = 500; - t.quotedblright = 500; - t.guillemotright = 500; - t.ellipsis = 1000; - t.perthousand = 1000; - t.questiondown = 500; - t.grave = 333; - t.acute = 333; - t.circumflex = 333; - t.tilde = 333; - t.macron = 333; - t.breve = 333; - t.dotaccent = 333; - t.dieresis = 333; - t.ring = 333; - t.cedilla = 333; - t.hungarumlaut = 333; - t.ogonek = 333; - t.caron = 333; - t.emdash = 1000; - t.AE = 1000; - t.ordfeminine = 300; - t.Lslash = 667; - t.Oslash = 778; - t.OE = 1000; - t.ordmasculine = 330; - t.ae = 722; - t.dotlessi = 278; - t.lslash = 278; - t.oslash = 500; - t.oe = 722; - t.germandbls = 556; - t.Idieresis = 389; - t.eacute = 444; - t.abreve = 500; - t.uhungarumlaut = 556; - t.ecaron = 444; - t.Ydieresis = 722; - t.divide = 570; - t.Yacute = 722; - t.Acircumflex = 722; - t.aacute = 500; - t.Ucircumflex = 722; - t.yacute = 500; - t.scommaaccent = 389; - t.ecircumflex = 444; - t.Uring = 722; - t.Udieresis = 722; - t.aogonek = 500; - t.Uacute = 722; - t.uogonek = 556; - t.Edieresis = 667; - t.Dcroat = 722; - t.commaaccent = 250; - t.copyright = 747; - t.Emacron = 667; - t.ccaron = 444; - t.aring = 500; - t.Ncommaaccent = 722; - t.lacute = 278; - t.agrave = 500; - t.Tcommaaccent = 667; - t.Cacute = 722; - t.atilde = 500; - t.Edotaccent = 667; - t.scaron = 389; - t.scedilla = 389; - t.iacute = 278; - t.lozenge = 494; - t.Rcaron = 722; - t.Gcommaaccent = 778; - t.ucircumflex = 556; - t.acircumflex = 500; - t.Amacron = 722; - t.rcaron = 444; - t.ccedilla = 444; - t.Zdotaccent = 667; - t.Thorn = 611; - t.Omacron = 778; - t.Racute = 722; - t.Sacute = 556; - t.dcaron = 672; - t.Umacron = 722; - t.uring = 556; - t.threesuperior = 300; - t.Ograve = 778; - t.Agrave = 722; - t.Abreve = 722; - t.multiply = 570; - t.uacute = 556; - t.Tcaron = 667; - t.partialdiff = 494; - t.ydieresis = 500; - t.Nacute = 722; - t.icircumflex = 278; - t.Ecircumflex = 667; - t.adieresis = 500; - t.edieresis = 444; - t.cacute = 444; - t.nacute = 556; - t.umacron = 556; - t.Ncaron = 722; - t.Iacute = 389; - t.plusminus = 570; - t.brokenbar = 220; - t.registered = 747; - t.Gbreve = 778; - t.Idotaccent = 389; - t.summation = 600; - t.Egrave = 667; - t.racute = 444; - t.omacron = 500; - t.Zacute = 667; - t.Zcaron = 667; - t.greaterequal = 549; - t.Eth = 722; - t.Ccedilla = 722; - t.lcommaaccent = 278; - t.tcaron = 416; - t.eogonek = 444; - t.Uogonek = 722; - t.Aacute = 722; - t.Adieresis = 722; - t.egrave = 444; - t.zacute = 444; - t.iogonek = 278; - t.Oacute = 778; - t.oacute = 500; - t.amacron = 500; - t.sacute = 389; - t.idieresis = 278; - t.Ocircumflex = 778; - t.Ugrave = 722; - t.Delta = 612; - t.thorn = 556; - t.twosuperior = 300; - t.Odieresis = 778; - t.mu = 556; - t.igrave = 278; - t.ohungarumlaut = 500; - t.Eogonek = 667; - t.dcroat = 556; - t.threequarters = 750; - t.Scedilla = 556; - t.lcaron = 394; - t.Kcommaaccent = 778; - t.Lacute = 667; - t.trademark = 1000; - t.edotaccent = 444; - t.Igrave = 389; - t.Imacron = 389; - t.Lcaron = 667; - t.onehalf = 750; - t.lessequal = 549; - t.ocircumflex = 500; - t.ntilde = 556; - t.Uhungarumlaut = 722; - t.Eacute = 667; - t.emacron = 444; - t.gbreve = 500; - t.onequarter = 750; - t.Scaron = 556; - t.Scommaaccent = 556; - t.Ohungarumlaut = 778; - t.degree = 400; - t.ograve = 500; - t.Ccaron = 722; - t.ugrave = 556; - t.radical = 549; - t.Dcaron = 722; - t.rcommaaccent = 444; - t.Ntilde = 722; - t.otilde = 500; - t.Rcommaaccent = 722; - t.Lcommaaccent = 667; - t.Atilde = 722; - t.Aogonek = 722; - t.Aring = 722; - t.Otilde = 778; - t.zdotaccent = 444; - t.Ecaron = 667; - t.Iogonek = 389; - t.kcommaaccent = 556; - t.minus = 570; - t.Icircumflex = 389; - t.ncaron = 556; - t.tcommaaccent = 333; - t.logicalnot = 570; - t.odieresis = 500; - t.udieresis = 556; - t.notequal = 549; - t.gcommaaccent = 500; - t.eth = 500; - t.zcaron = 444; - t.ncommaaccent = 556; - t.onesuperior = 300; - t.imacron = 278; - t.Euro = 500; - }); - t["Times-BoldItalic"] = (0, _core_utils.getLookupTableFactory)(function (t) { - t.space = 250; - t.exclam = 389; - t.quotedbl = 555; - t.numbersign = 500; - t.dollar = 500; - t.percent = 833; - t.ampersand = 778; - t.quoteright = 333; - t.parenleft = 333; - t.parenright = 333; - t.asterisk = 500; - t.plus = 570; - t.comma = 250; - t.hyphen = 333; - t.period = 250; - t.slash = 278; - t.zero = 500; - t.one = 500; - t.two = 500; - t.three = 500; - t.four = 500; - t.five = 500; - t.six = 500; - t.seven = 500; - t.eight = 500; - t.nine = 500; - t.colon = 333; - t.semicolon = 333; - t.less = 570; - t.equal = 570; - t.greater = 570; - t.question = 500; - t.at = 832; - t.A = 667; - t.B = 667; - t.C = 667; - t.D = 722; - t.E = 667; - t.F = 667; - t.G = 722; - t.H = 778; - t.I = 389; - t.J = 500; - t.K = 667; - t.L = 611; - t.M = 889; - t.N = 722; - t.O = 722; - t.P = 611; - t.Q = 722; - t.R = 667; - t.S = 556; - t.T = 611; - t.U = 722; - t.V = 667; - t.W = 889; - t.X = 667; - t.Y = 611; - t.Z = 611; - t.bracketleft = 333; - t.backslash = 278; - t.bracketright = 333; - t.asciicircum = 570; - t.underscore = 500; - t.quoteleft = 333; - t.a = 500; - t.b = 500; - t.c = 444; - t.d = 500; - t.e = 444; - t.f = 333; - t.g = 500; - t.h = 556; - t.i = 278; - t.j = 278; - t.k = 500; - t.l = 278; - t.m = 778; - t.n = 556; - t.o = 500; - t.p = 500; - t.q = 500; - t.r = 389; - t.s = 389; - t.t = 278; - t.u = 556; - t.v = 444; - t.w = 667; - t.x = 500; - t.y = 444; - t.z = 389; - t.braceleft = 348; - t.bar = 220; - t.braceright = 348; - t.asciitilde = 570; - t.exclamdown = 389; - t.cent = 500; - t.sterling = 500; - t.fraction = 167; - t.yen = 500; - t.florin = 500; - t.section = 500; - t.currency = 500; - t.quotesingle = 278; - t.quotedblleft = 500; - t.guillemotleft = 500; - t.guilsinglleft = 333; - t.guilsinglright = 333; - t.fi = 556; - t.fl = 556; - t.endash = 500; - t.dagger = 500; - t.daggerdbl = 500; - t.periodcentered = 250; - t.paragraph = 500; - t.bullet = 350; - t.quotesinglbase = 333; - t.quotedblbase = 500; - t.quotedblright = 500; - t.guillemotright = 500; - t.ellipsis = 1000; - t.perthousand = 1000; - t.questiondown = 500; - t.grave = 333; - t.acute = 333; - t.circumflex = 333; - t.tilde = 333; - t.macron = 333; - t.breve = 333; - t.dotaccent = 333; - t.dieresis = 333; - t.ring = 333; - t.cedilla = 333; - t.hungarumlaut = 333; - t.ogonek = 333; - t.caron = 333; - t.emdash = 1000; - t.AE = 944; - t.ordfeminine = 266; - t.Lslash = 611; - t.Oslash = 722; - t.OE = 944; - t.ordmasculine = 300; - t.ae = 722; - t.dotlessi = 278; - t.lslash = 278; - t.oslash = 500; - t.oe = 722; - t.germandbls = 500; - t.Idieresis = 389; - t.eacute = 444; - t.abreve = 500; - t.uhungarumlaut = 556; - t.ecaron = 444; - t.Ydieresis = 611; - t.divide = 570; - t.Yacute = 611; - t.Acircumflex = 667; - t.aacute = 500; - t.Ucircumflex = 722; - t.yacute = 444; - t.scommaaccent = 389; - t.ecircumflex = 444; - t.Uring = 722; - t.Udieresis = 722; - t.aogonek = 500; - t.Uacute = 722; - t.uogonek = 556; - t.Edieresis = 667; - t.Dcroat = 722; - t.commaaccent = 250; - t.copyright = 747; - t.Emacron = 667; - t.ccaron = 444; - t.aring = 500; - t.Ncommaaccent = 722; - t.lacute = 278; - t.agrave = 500; - t.Tcommaaccent = 611; - t.Cacute = 667; - t.atilde = 500; - t.Edotaccent = 667; - t.scaron = 389; - t.scedilla = 389; - t.iacute = 278; - t.lozenge = 494; - t.Rcaron = 667; - t.Gcommaaccent = 722; - t.ucircumflex = 556; - t.acircumflex = 500; - t.Amacron = 667; - t.rcaron = 389; - t.ccedilla = 444; - t.Zdotaccent = 611; - t.Thorn = 611; - t.Omacron = 722; - t.Racute = 667; - t.Sacute = 556; - t.dcaron = 608; - t.Umacron = 722; - t.uring = 556; - t.threesuperior = 300; - t.Ograve = 722; - t.Agrave = 667; - t.Abreve = 667; - t.multiply = 570; - t.uacute = 556; - t.Tcaron = 611; - t.partialdiff = 494; - t.ydieresis = 444; - t.Nacute = 722; - t.icircumflex = 278; - t.Ecircumflex = 667; - t.adieresis = 500; - t.edieresis = 444; - t.cacute = 444; - t.nacute = 556; - t.umacron = 556; - t.Ncaron = 722; - t.Iacute = 389; - t.plusminus = 570; - t.brokenbar = 220; - t.registered = 747; - t.Gbreve = 722; - t.Idotaccent = 389; - t.summation = 600; - t.Egrave = 667; - t.racute = 389; - t.omacron = 500; - t.Zacute = 611; - t.Zcaron = 611; - t.greaterequal = 549; - t.Eth = 722; - t.Ccedilla = 667; - t.lcommaaccent = 278; - t.tcaron = 366; - t.eogonek = 444; - t.Uogonek = 722; - t.Aacute = 667; - t.Adieresis = 667; - t.egrave = 444; - t.zacute = 389; - t.iogonek = 278; - t.Oacute = 722; - t.oacute = 500; - t.amacron = 500; - t.sacute = 389; - t.idieresis = 278; - t.Ocircumflex = 722; - t.Ugrave = 722; - t.Delta = 612; - t.thorn = 500; - t.twosuperior = 300; - t.Odieresis = 722; - t.mu = 576; - t.igrave = 278; - t.ohungarumlaut = 500; - t.Eogonek = 667; - t.dcroat = 500; - t.threequarters = 750; - t.Scedilla = 556; - t.lcaron = 382; - t.Kcommaaccent = 667; - t.Lacute = 611; - t.trademark = 1000; - t.edotaccent = 444; - t.Igrave = 389; - t.Imacron = 389; - t.Lcaron = 611; - t.onehalf = 750; - t.lessequal = 549; - t.ocircumflex = 500; - t.ntilde = 556; - t.Uhungarumlaut = 722; - t.Eacute = 667; - t.emacron = 444; - t.gbreve = 500; - t.onequarter = 750; - t.Scaron = 556; - t.Scommaaccent = 556; - t.Ohungarumlaut = 722; - t.degree = 400; - t.ograve = 500; - t.Ccaron = 667; - t.ugrave = 556; - t.radical = 549; - t.Dcaron = 722; - t.rcommaaccent = 389; - t.Ntilde = 722; - t.otilde = 500; - t.Rcommaaccent = 667; - t.Lcommaaccent = 611; - t.Atilde = 667; - t.Aogonek = 667; - t.Aring = 667; - t.Otilde = 722; - t.zdotaccent = 389; - t.Ecaron = 667; - t.Iogonek = 389; - t.kcommaaccent = 500; - t.minus = 606; - t.Icircumflex = 389; - t.ncaron = 556; - t.tcommaaccent = 278; - t.logicalnot = 606; - t.odieresis = 500; - t.udieresis = 556; - t.notequal = 549; - t.gcommaaccent = 500; - t.eth = 500; - t.zcaron = 389; - t.ncommaaccent = 556; - t.onesuperior = 300; - t.imacron = 278; - t.Euro = 500; - }); - t["Times-Italic"] = (0, _core_utils.getLookupTableFactory)(function (t) { - t.space = 250; - t.exclam = 333; - t.quotedbl = 420; - t.numbersign = 500; - t.dollar = 500; - t.percent = 833; - t.ampersand = 778; - t.quoteright = 333; - t.parenleft = 333; - t.parenright = 333; - t.asterisk = 500; - t.plus = 675; - t.comma = 250; - t.hyphen = 333; - t.period = 250; - t.slash = 278; - t.zero = 500; - t.one = 500; - t.two = 500; - t.three = 500; - t.four = 500; - t.five = 500; - t.six = 500; - t.seven = 500; - t.eight = 500; - t.nine = 500; - t.colon = 333; - t.semicolon = 333; - t.less = 675; - t.equal = 675; - t.greater = 675; - t.question = 500; - t.at = 920; - t.A = 611; - t.B = 611; - t.C = 667; - t.D = 722; - t.E = 611; - t.F = 611; - t.G = 722; - t.H = 722; - t.I = 333; - t.J = 444; - t.K = 667; - t.L = 556; - t.M = 833; - t.N = 667; - t.O = 722; - t.P = 611; - t.Q = 722; - t.R = 611; - t.S = 500; - t.T = 556; - t.U = 722; - t.V = 611; - t.W = 833; - t.X = 611; - t.Y = 556; - t.Z = 556; - t.bracketleft = 389; - t.backslash = 278; - t.bracketright = 389; - t.asciicircum = 422; - t.underscore = 500; - t.quoteleft = 333; - t.a = 500; - t.b = 500; - t.c = 444; - t.d = 500; - t.e = 444; - t.f = 278; - t.g = 500; - t.h = 500; - t.i = 278; - t.j = 278; - t.k = 444; - t.l = 278; - t.m = 722; - t.n = 500; - t.o = 500; - t.p = 500; - t.q = 500; - t.r = 389; - t.s = 389; - t.t = 278; - t.u = 500; - t.v = 444; - t.w = 667; - t.x = 444; - t.y = 444; - t.z = 389; - t.braceleft = 400; - t.bar = 275; - t.braceright = 400; - t.asciitilde = 541; - t.exclamdown = 389; - t.cent = 500; - t.sterling = 500; - t.fraction = 167; - t.yen = 500; - t.florin = 500; - t.section = 500; - t.currency = 500; - t.quotesingle = 214; - t.quotedblleft = 556; - t.guillemotleft = 500; - t.guilsinglleft = 333; - t.guilsinglright = 333; - t.fi = 500; - t.fl = 500; - t.endash = 500; - t.dagger = 500; - t.daggerdbl = 500; - t.periodcentered = 250; - t.paragraph = 523; - t.bullet = 350; - t.quotesinglbase = 333; - t.quotedblbase = 556; - t.quotedblright = 556; - t.guillemotright = 500; - t.ellipsis = 889; - t.perthousand = 1000; - t.questiondown = 500; - t.grave = 333; - t.acute = 333; - t.circumflex = 333; - t.tilde = 333; - t.macron = 333; - t.breve = 333; - t.dotaccent = 333; - t.dieresis = 333; - t.ring = 333; - t.cedilla = 333; - t.hungarumlaut = 333; - t.ogonek = 333; - t.caron = 333; - t.emdash = 889; - t.AE = 889; - t.ordfeminine = 276; - t.Lslash = 556; - t.Oslash = 722; - t.OE = 944; - t.ordmasculine = 310; - t.ae = 667; - t.dotlessi = 278; - t.lslash = 278; - t.oslash = 500; - t.oe = 667; - t.germandbls = 500; - t.Idieresis = 333; - t.eacute = 444; - t.abreve = 500; - t.uhungarumlaut = 500; - t.ecaron = 444; - t.Ydieresis = 556; - t.divide = 675; - t.Yacute = 556; - t.Acircumflex = 611; - t.aacute = 500; - t.Ucircumflex = 722; - t.yacute = 444; - t.scommaaccent = 389; - t.ecircumflex = 444; - t.Uring = 722; - t.Udieresis = 722; - t.aogonek = 500; - t.Uacute = 722; - t.uogonek = 500; - t.Edieresis = 611; - t.Dcroat = 722; - t.commaaccent = 250; - t.copyright = 760; - t.Emacron = 611; - t.ccaron = 444; - t.aring = 500; - t.Ncommaaccent = 667; - t.lacute = 278; - t.agrave = 500; - t.Tcommaaccent = 556; - t.Cacute = 667; - t.atilde = 500; - t.Edotaccent = 611; - t.scaron = 389; - t.scedilla = 389; - t.iacute = 278; - t.lozenge = 471; - t.Rcaron = 611; - t.Gcommaaccent = 722; - t.ucircumflex = 500; - t.acircumflex = 500; - t.Amacron = 611; - t.rcaron = 389; - t.ccedilla = 444; - t.Zdotaccent = 556; - t.Thorn = 611; - t.Omacron = 722; - t.Racute = 611; - t.Sacute = 500; - t.dcaron = 544; - t.Umacron = 722; - t.uring = 500; - t.threesuperior = 300; - t.Ograve = 722; - t.Agrave = 611; - t.Abreve = 611; - t.multiply = 675; - t.uacute = 500; - t.Tcaron = 556; - t.partialdiff = 476; - t.ydieresis = 444; - t.Nacute = 667; - t.icircumflex = 278; - t.Ecircumflex = 611; - t.adieresis = 500; - t.edieresis = 444; - t.cacute = 444; - t.nacute = 500; - t.umacron = 500; - t.Ncaron = 667; - t.Iacute = 333; - t.plusminus = 675; - t.brokenbar = 275; - t.registered = 760; - t.Gbreve = 722; - t.Idotaccent = 333; - t.summation = 600; - t.Egrave = 611; - t.racute = 389; - t.omacron = 500; - t.Zacute = 556; - t.Zcaron = 556; - t.greaterequal = 549; - t.Eth = 722; - t.Ccedilla = 667; - t.lcommaaccent = 278; - t.tcaron = 300; - t.eogonek = 444; - t.Uogonek = 722; - t.Aacute = 611; - t.Adieresis = 611; - t.egrave = 444; - t.zacute = 389; - t.iogonek = 278; - t.Oacute = 722; - t.oacute = 500; - t.amacron = 500; - t.sacute = 389; - t.idieresis = 278; - t.Ocircumflex = 722; - t.Ugrave = 722; - t.Delta = 612; - t.thorn = 500; - t.twosuperior = 300; - t.Odieresis = 722; - t.mu = 500; - t.igrave = 278; - t.ohungarumlaut = 500; - t.Eogonek = 611; - t.dcroat = 500; - t.threequarters = 750; - t.Scedilla = 500; - t.lcaron = 300; - t.Kcommaaccent = 667; - t.Lacute = 556; - t.trademark = 980; - t.edotaccent = 444; - t.Igrave = 333; - t.Imacron = 333; - t.Lcaron = 611; - t.onehalf = 750; - t.lessequal = 549; - t.ocircumflex = 500; - t.ntilde = 500; - t.Uhungarumlaut = 722; - t.Eacute = 611; - t.emacron = 444; - t.gbreve = 500; - t.onequarter = 750; - t.Scaron = 500; - t.Scommaaccent = 500; - t.Ohungarumlaut = 722; - t.degree = 400; - t.ograve = 500; - t.Ccaron = 667; - t.ugrave = 500; - t.radical = 453; - t.Dcaron = 722; - t.rcommaaccent = 389; - t.Ntilde = 667; - t.otilde = 500; - t.Rcommaaccent = 611; - t.Lcommaaccent = 556; - t.Atilde = 611; - t.Aogonek = 611; - t.Aring = 611; - t.Otilde = 722; - t.zdotaccent = 389; - t.Ecaron = 611; - t.Iogonek = 333; - t.kcommaaccent = 444; - t.minus = 675; - t.Icircumflex = 333; - t.ncaron = 500; - t.tcommaaccent = 278; - t.logicalnot = 675; - t.odieresis = 500; - t.udieresis = 500; - t.notequal = 549; - t.gcommaaccent = 500; - t.eth = 500; - t.zcaron = 389; - t.ncommaaccent = 500; - t.onesuperior = 300; - t.imacron = 278; - t.Euro = 500; - }); - t.ZapfDingbats = (0, _core_utils.getLookupTableFactory)(function (t) { - t.space = 278; - t.a1 = 974; - t.a2 = 961; - t.a202 = 974; - t.a3 = 980; - t.a4 = 719; - t.a5 = 789; - t.a119 = 790; - t.a118 = 791; - t.a117 = 690; - t.a11 = 960; - t.a12 = 939; - t.a13 = 549; - t.a14 = 855; - t.a15 = 911; - t.a16 = 933; - t.a105 = 911; - t.a17 = 945; - t.a18 = 974; - t.a19 = 755; - t.a20 = 846; - t.a21 = 762; - t.a22 = 761; - t.a23 = 571; - t.a24 = 677; - t.a25 = 763; - t.a26 = 760; - t.a27 = 759; - t.a28 = 754; - t.a6 = 494; - t.a7 = 552; - t.a8 = 537; - t.a9 = 577; - t.a10 = 692; - t.a29 = 786; - t.a30 = 788; - t.a31 = 788; - t.a32 = 790; - t.a33 = 793; - t.a34 = 794; - t.a35 = 816; - t.a36 = 823; - t.a37 = 789; - t.a38 = 841; - t.a39 = 823; - t.a40 = 833; - t.a41 = 816; - t.a42 = 831; - t.a43 = 923; - t.a44 = 744; - t.a45 = 723; - t.a46 = 749; - t.a47 = 790; - t.a48 = 792; - t.a49 = 695; - t.a50 = 776; - t.a51 = 768; - t.a52 = 792; - t.a53 = 759; - t.a54 = 707; - t.a55 = 708; - t.a56 = 682; - t.a57 = 701; - t.a58 = 826; - t.a59 = 815; - t.a60 = 789; - t.a61 = 789; - t.a62 = 707; - t.a63 = 687; - t.a64 = 696; - t.a65 = 689; - t.a66 = 786; - t.a67 = 787; - t.a68 = 713; - t.a69 = 791; - t.a70 = 785; - t.a71 = 791; - t.a72 = 873; - t.a73 = 761; - t.a74 = 762; - t.a203 = 762; - t.a75 = 759; - t.a204 = 759; - t.a76 = 892; - t.a77 = 892; - t.a78 = 788; - t.a79 = 784; - t.a81 = 438; - t.a82 = 138; - t.a83 = 277; - t.a84 = 415; - t.a97 = 392; - t.a98 = 392; - t.a99 = 668; - t.a100 = 668; - t.a89 = 390; - t.a90 = 390; - t.a93 = 317; - t.a94 = 317; - t.a91 = 276; - t.a92 = 276; - t.a205 = 509; - t.a85 = 509; - t.a206 = 410; - t.a86 = 410; - t.a87 = 234; - t.a88 = 234; - t.a95 = 334; - t.a96 = 334; - t.a101 = 732; - t.a102 = 544; - t.a103 = 544; - t.a104 = 910; - t.a106 = 667; - t.a107 = 760; - t.a108 = 760; - t.a112 = 776; - t.a111 = 595; - t.a110 = 694; - t.a109 = 626; - t.a120 = 788; - t.a121 = 788; - t.a122 = 788; - t.a123 = 788; - t.a124 = 788; - t.a125 = 788; - t.a126 = 788; - t.a127 = 788; - t.a128 = 788; - t.a129 = 788; - t.a130 = 788; - t.a131 = 788; - t.a132 = 788; - t.a133 = 788; - t.a134 = 788; - t.a135 = 788; - t.a136 = 788; - t.a137 = 788; - t.a138 = 788; - t.a139 = 788; - t.a140 = 788; - t.a141 = 788; - t.a142 = 788; - t.a143 = 788; - t.a144 = 788; - t.a145 = 788; - t.a146 = 788; - t.a147 = 788; - t.a148 = 788; - t.a149 = 788; - t.a150 = 788; - t.a151 = 788; - t.a152 = 788; - t.a153 = 788; - t.a154 = 788; - t.a155 = 788; - t.a156 = 788; - t.a157 = 788; - t.a158 = 788; - t.a159 = 788; - t.a160 = 894; - t.a161 = 838; - t.a163 = 1016; - t.a164 = 458; - t.a196 = 748; - t.a165 = 924; - t.a192 = 748; - t.a166 = 918; - t.a167 = 927; - t.a168 = 928; - t.a169 = 928; - t.a170 = 834; - t.a171 = 873; - t.a172 = 828; - t.a173 = 924; - t.a162 = 924; - t.a174 = 917; - t.a175 = 930; - t.a176 = 931; - t.a177 = 463; - t.a178 = 883; - t.a179 = 836; - t.a193 = 836; - t.a180 = 867; - t.a199 = 867; - t.a181 = 696; - t.a200 = 696; - t.a182 = 874; - t.a201 = 874; - t.a183 = 760; - t.a184 = 946; - t.a197 = 771; - t.a185 = 865; - t.a194 = 771; - t.a198 = 888; - t.a186 = 967; - t.a195 = 888; - t.a187 = 831; - t.a188 = 873; - t.a189 = 927; - t.a190 = 970; - t.a191 = 918; - }); -}); -exports.getMetrics = getMetrics; - -/***/ }), -/* 61 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.MurmurHash3_64 = void 0; - -var _util = __w_pdfjs_require__(2); - -const SEED = 0xc3d2e1f0; -const MASK_HIGH = 0xffff0000; -const MASK_LOW = 0xffff; - -class MurmurHash3_64 { - constructor(seed) { - this.h1 = seed ? seed & 0xffffffff : SEED; - this.h2 = seed ? seed & 0xffffffff : SEED; - } - - update(input) { - let data, length; - - if ((0, _util.isString)(input)) { - data = new Uint8Array(input.length * 2); - length = 0; - - for (let i = 0, ii = input.length; i < ii; i++) { - const code = input.charCodeAt(i); - - if (code <= 0xff) { - data[length++] = code; - } else { - data[length++] = code >>> 8; - data[length++] = code & 0xff; - } - } - } else if ((0, _util.isArrayBuffer)(input)) { - data = input.slice(); - length = data.byteLength; - } else { - throw new Error("Wrong data format in MurmurHash3_64_update. " + "Input must be a string or array."); - } - - const blockCounts = length >> 2; - const tailLength = length - blockCounts * 4; - const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts); - let k1 = 0, - k2 = 0; - let h1 = this.h1, - h2 = this.h2; - const C1 = 0xcc9e2d51, - C2 = 0x1b873593; - const C1_LOW = C1 & MASK_LOW, - C2_LOW = C2 & MASK_LOW; - - for (let i = 0; i < blockCounts; i++) { - if (i & 1) { - k1 = dataUint32[i]; - k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; - k1 = k1 << 15 | k1 >>> 17; - k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; - h1 ^= k1; - h1 = h1 << 13 | h1 >>> 19; - h1 = h1 * 5 + 0xe6546b64; - } else { - k2 = dataUint32[i]; - k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW; - k2 = k2 << 15 | k2 >>> 17; - k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW; - h2 ^= k2; - h2 = h2 << 13 | h2 >>> 19; - h2 = h2 * 5 + 0xe6546b64; - } - } - - k1 = 0; - - switch (tailLength) { - case 3: - k1 ^= data[blockCounts * 4 + 2] << 16; - - case 2: - k1 ^= data[blockCounts * 4 + 1] << 8; - - case 1: - k1 ^= data[blockCounts * 4]; - k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; - k1 = k1 << 15 | k1 >>> 17; - k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; - - if (blockCounts & 1) { - h1 ^= k1; - } else { - h2 ^= k1; - } - - } - - this.h1 = h1; - this.h2 = h2; - } - - hexdigest() { - let h1 = this.h1, - h2 = this.h2; - h1 ^= h2 >>> 1; - h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW; - h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16; - h1 ^= h2 >>> 1; - h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW; - h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16; - h1 ^= h2 >>> 1; - const hex1 = (h1 >>> 0).toString(16), - hex2 = (h2 >>> 0).toString(16); - return hex1.padStart(8, "0") + hex2.padStart(8, "0"); - } - -} - -exports.MurmurHash3_64 = MurmurHash3_64; - -/***/ }), -/* 62 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.OperatorList = void 0; - -var _util = __w_pdfjs_require__(2); - -function addState(parentState, pattern, checkFn, iterateFn, processFn) { - let state = parentState; - - for (let i = 0, ii = pattern.length - 1; i < ii; i++) { - const item = pattern[i]; - state = state[item] || (state[item] = []); - } - - state[pattern[pattern.length - 1]] = { - checkFn, - iterateFn, - processFn - }; -} - -function handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray) { - const iFirstPIMXO = iFirstSave + 2; - let i; - - for (i = 0; i < count; i++) { - const arg = argsArray[iFirstPIMXO + 4 * i]; - const imageMask = arg.length === 1 && arg[0]; - - if (imageMask && imageMask.width === 1 && imageMask.height === 1 && (!imageMask.data.length || imageMask.data.length === 1 && imageMask.data[0] === 0)) { - fnArray[iFirstPIMXO + 4 * i] = _util.OPS.paintSolidColorImageMask; - continue; - } - - break; - } - - return count - i; -} - -const InitialState = []; -addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintInlineImageXObject, _util.OPS.restore], null, function iterateInlineImageGroup(context, i) { - const fnArray = context.fnArray; - const iFirstSave = context.iCurr - 3; - const pos = (i - iFirstSave) % 4; - - switch (pos) { - case 0: - return fnArray[i] === _util.OPS.save; - - case 1: - return fnArray[i] === _util.OPS.transform; - - case 2: - return fnArray[i] === _util.OPS.paintInlineImageXObject; - - case 3: - return fnArray[i] === _util.OPS.restore; - } - - throw new Error(`iterateInlineImageGroup - invalid pos: ${pos}`); -}, function foundInlineImageGroup(context, i) { - const MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10; - const MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200; - const MAX_WIDTH = 1000; - const IMAGE_PADDING = 1; - const fnArray = context.fnArray, - argsArray = context.argsArray; - const curr = context.iCurr; - const iFirstSave = curr - 3; - const iFirstTransform = curr - 2; - const iFirstPIIXO = curr - 1; - const count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_INLINE_IMAGES_BLOCK); - - if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) { - return i - (i - iFirstSave) % 4; - } - - let maxX = 0; - const map = []; - let maxLineHeight = 0; - let currentX = IMAGE_PADDING, - currentY = IMAGE_PADDING; - - for (let q = 0; q < count; q++) { - const transform = argsArray[iFirstTransform + (q << 2)]; - const img = argsArray[iFirstPIIXO + (q << 2)][0]; - - if (currentX + img.width > MAX_WIDTH) { - maxX = Math.max(maxX, currentX); - currentY += maxLineHeight + 2 * IMAGE_PADDING; - currentX = 0; - maxLineHeight = 0; - } - - map.push({ - transform, - x: currentX, - y: currentY, - w: img.width, - h: img.height - }); - currentX += img.width + 2 * IMAGE_PADDING; - maxLineHeight = Math.max(maxLineHeight, img.height); - } - - const imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING; - const imgHeight = currentY + maxLineHeight + IMAGE_PADDING; - const imgData = new Uint8ClampedArray(imgWidth * imgHeight * 4); - const imgRowSize = imgWidth << 2; - - for (let q = 0; q < count; q++) { - const data = argsArray[iFirstPIIXO + (q << 2)][0].data; - const rowSize = map[q].w << 2; - let dataOffset = 0; - let offset = map[q].x + map[q].y * imgWidth << 2; - imgData.set(data.subarray(0, rowSize), offset - imgRowSize); - - for (let k = 0, kk = map[q].h; k < kk; k++) { - imgData.set(data.subarray(dataOffset, dataOffset + rowSize), offset); - dataOffset += rowSize; - offset += imgRowSize; - } - - imgData.set(data.subarray(dataOffset - rowSize, dataOffset), offset); - - while (offset >= 0) { - data[offset - 4] = data[offset]; - data[offset - 3] = data[offset + 1]; - data[offset - 2] = data[offset + 2]; - data[offset - 1] = data[offset + 3]; - data[offset + rowSize] = data[offset + rowSize - 4]; - data[offset + rowSize + 1] = data[offset + rowSize - 3]; - data[offset + rowSize + 2] = data[offset + rowSize - 2]; - data[offset + rowSize + 3] = data[offset + rowSize - 1]; - offset -= imgRowSize; - } - } - - fnArray.splice(iFirstSave, count * 4, _util.OPS.paintInlineImageXObjectGroup); - argsArray.splice(iFirstSave, count * 4, [{ - width: imgWidth, - height: imgHeight, - kind: _util.ImageKind.RGBA_32BPP, - data: imgData - }, map]); - return iFirstSave + 1; -}); -addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageMaskXObject, _util.OPS.restore], null, function iterateImageMaskGroup(context, i) { - const fnArray = context.fnArray; - const iFirstSave = context.iCurr - 3; - const pos = (i - iFirstSave) % 4; - - switch (pos) { - case 0: - return fnArray[i] === _util.OPS.save; - - case 1: - return fnArray[i] === _util.OPS.transform; - - case 2: - return fnArray[i] === _util.OPS.paintImageMaskXObject; - - case 3: - return fnArray[i] === _util.OPS.restore; - } - - throw new Error(`iterateImageMaskGroup - invalid pos: ${pos}`); -}, function foundImageMaskGroup(context, i) { - const MIN_IMAGES_IN_MASKS_BLOCK = 10; - const MAX_IMAGES_IN_MASKS_BLOCK = 100; - const MAX_SAME_IMAGES_IN_MASKS_BLOCK = 1000; - const fnArray = context.fnArray, - argsArray = context.argsArray; - const curr = context.iCurr; - const iFirstSave = curr - 3; - const iFirstTransform = curr - 2; - const iFirstPIMXO = curr - 1; - let count = Math.floor((i - iFirstSave) / 4); - count = handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray); - - if (count < MIN_IMAGES_IN_MASKS_BLOCK) { - return i - (i - iFirstSave) % 4; - } - - let isSameImage = false; - let iTransform, transformArgs; - const firstPIMXOArg0 = argsArray[iFirstPIMXO][0]; - const firstTransformArg0 = argsArray[iFirstTransform][0], - firstTransformArg1 = argsArray[iFirstTransform][1], - firstTransformArg2 = argsArray[iFirstTransform][2], - firstTransformArg3 = argsArray[iFirstTransform][3]; - - if (firstTransformArg1 === firstTransformArg2) { - isSameImage = true; - iTransform = iFirstTransform + 4; - let iPIMXO = iFirstPIMXO + 4; - - for (let q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) { - transformArgs = argsArray[iTransform]; - - if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || transformArgs[1] !== firstTransformArg1 || transformArgs[2] !== firstTransformArg2 || transformArgs[3] !== firstTransformArg3) { - if (q < MIN_IMAGES_IN_MASKS_BLOCK) { - isSameImage = false; - } else { - count = q; - } - - break; - } - } - } - - if (isSameImage) { - count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK); - const positions = new Float32Array(count * 2); - iTransform = iFirstTransform; - - for (let q = 0; q < count; q++, iTransform += 4) { - transformArgs = argsArray[iTransform]; - positions[q << 1] = transformArgs[4]; - positions[(q << 1) + 1] = transformArgs[5]; - } - - fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectRepeat); - argsArray.splice(iFirstSave, count * 4, [firstPIMXOArg0, firstTransformArg0, firstTransformArg1, firstTransformArg2, firstTransformArg3, positions]); - } else { - count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK); - const images = []; - - for (let q = 0; q < count; q++) { - transformArgs = argsArray[iFirstTransform + (q << 2)]; - const maskParams = argsArray[iFirstPIMXO + (q << 2)][0]; - images.push({ - data: maskParams.data, - width: maskParams.width, - height: maskParams.height, - transform: transformArgs - }); - } - - fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectGroup); - argsArray.splice(iFirstSave, count * 4, [images]); - } - - return iFirstSave + 1; -}); -addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageXObject, _util.OPS.restore], function (context) { - const argsArray = context.argsArray; - const iFirstTransform = context.iCurr - 2; - return argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0; -}, function iterateImageGroup(context, i) { - const fnArray = context.fnArray, - argsArray = context.argsArray; - const iFirstSave = context.iCurr - 3; - const pos = (i - iFirstSave) % 4; - - switch (pos) { - case 0: - return fnArray[i] === _util.OPS.save; - - case 1: - if (fnArray[i] !== _util.OPS.transform) { - return false; - } - - const iFirstTransform = context.iCurr - 2; - const firstTransformArg0 = argsArray[iFirstTransform][0]; - const firstTransformArg3 = argsArray[iFirstTransform][3]; - - if (argsArray[i][0] !== firstTransformArg0 || argsArray[i][1] !== 0 || argsArray[i][2] !== 0 || argsArray[i][3] !== firstTransformArg3) { - return false; - } - - return true; - - case 2: - if (fnArray[i] !== _util.OPS.paintImageXObject) { - return false; - } - - const iFirstPIXO = context.iCurr - 1; - const firstPIXOArg0 = argsArray[iFirstPIXO][0]; - - if (argsArray[i][0] !== firstPIXOArg0) { - return false; - } - - return true; - - case 3: - return fnArray[i] === _util.OPS.restore; - } - - throw new Error(`iterateImageGroup - invalid pos: ${pos}`); -}, function (context, i) { - const MIN_IMAGES_IN_BLOCK = 3; - const MAX_IMAGES_IN_BLOCK = 1000; - const fnArray = context.fnArray, - argsArray = context.argsArray; - const curr = context.iCurr; - const iFirstSave = curr - 3; - const iFirstTransform = curr - 2; - const iFirstPIXO = curr - 1; - const firstPIXOArg0 = argsArray[iFirstPIXO][0]; - const firstTransformArg0 = argsArray[iFirstTransform][0]; - const firstTransformArg3 = argsArray[iFirstTransform][3]; - const count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_BLOCK); - - if (count < MIN_IMAGES_IN_BLOCK) { - return i - (i - iFirstSave) % 4; - } - - const positions = new Float32Array(count * 2); - let iTransform = iFirstTransform; - - for (let q = 0; q < count; q++, iTransform += 4) { - const transformArgs = argsArray[iTransform]; - positions[q << 1] = transformArgs[4]; - positions[(q << 1) + 1] = transformArgs[5]; - } - - const args = [firstPIXOArg0, firstTransformArg0, firstTransformArg3, positions]; - fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageXObjectRepeat); - argsArray.splice(iFirstSave, count * 4, args); - return iFirstSave + 1; -}); -addState(InitialState, [_util.OPS.beginText, _util.OPS.setFont, _util.OPS.setTextMatrix, _util.OPS.showText, _util.OPS.endText], null, function iterateShowTextGroup(context, i) { - const fnArray = context.fnArray, - argsArray = context.argsArray; - const iFirstSave = context.iCurr - 4; - const pos = (i - iFirstSave) % 5; - - switch (pos) { - case 0: - return fnArray[i] === _util.OPS.beginText; - - case 1: - return fnArray[i] === _util.OPS.setFont; - - case 2: - return fnArray[i] === _util.OPS.setTextMatrix; - - case 3: - if (fnArray[i] !== _util.OPS.showText) { - return false; - } - - const iFirstSetFont = context.iCurr - 3; - const firstSetFontArg0 = argsArray[iFirstSetFont][0]; - const firstSetFontArg1 = argsArray[iFirstSetFont][1]; - - if (argsArray[i][0] !== firstSetFontArg0 || argsArray[i][1] !== firstSetFontArg1) { - return false; - } - - return true; - - case 4: - return fnArray[i] === _util.OPS.endText; - } - - throw new Error(`iterateShowTextGroup - invalid pos: ${pos}`); -}, function (context, i) { - const MIN_CHARS_IN_BLOCK = 3; - const MAX_CHARS_IN_BLOCK = 1000; - const fnArray = context.fnArray, - argsArray = context.argsArray; - const curr = context.iCurr; - const iFirstBeginText = curr - 4; - const iFirstSetFont = curr - 3; - const iFirstSetTextMatrix = curr - 2; - const iFirstShowText = curr - 1; - const iFirstEndText = curr; - const firstSetFontArg0 = argsArray[iFirstSetFont][0]; - const firstSetFontArg1 = argsArray[iFirstSetFont][1]; - let count = Math.min(Math.floor((i - iFirstBeginText) / 5), MAX_CHARS_IN_BLOCK); - - if (count < MIN_CHARS_IN_BLOCK) { - return i - (i - iFirstBeginText) % 5; - } - - let iFirst = iFirstBeginText; - - if (iFirstBeginText >= 4 && fnArray[iFirstBeginText - 4] === fnArray[iFirstSetFont] && fnArray[iFirstBeginText - 3] === fnArray[iFirstSetTextMatrix] && fnArray[iFirstBeginText - 2] === fnArray[iFirstShowText] && fnArray[iFirstBeginText - 1] === fnArray[iFirstEndText] && argsArray[iFirstBeginText - 4][0] === firstSetFontArg0 && argsArray[iFirstBeginText - 4][1] === firstSetFontArg1) { - count++; - iFirst -= 5; - } - - let iEndText = iFirst + 4; - - for (let q = 1; q < count; q++) { - fnArray.splice(iEndText, 3); - argsArray.splice(iEndText, 3); - iEndText += 2; - } - - return iEndText + 1; -}); - -class NullOptimizer { - constructor(queue) { - this.queue = queue; - } - - _optimize() {} - - push(fn, args) { - this.queue.fnArray.push(fn); - this.queue.argsArray.push(args); - - this._optimize(); - } - - flush() {} - - reset() {} - -} - -class QueueOptimizer extends NullOptimizer { - constructor(queue) { - super(queue); - this.state = null; - this.context = { - iCurr: 0, - fnArray: queue.fnArray, - argsArray: queue.argsArray - }; - this.match = null; - this.lastProcessed = 0; - } - - _optimize() { - const fnArray = this.queue.fnArray; - let i = this.lastProcessed, - ii = fnArray.length; - let state = this.state; - let match = this.match; - - if (!state && !match && i + 1 === ii && !InitialState[fnArray[i]]) { - this.lastProcessed = ii; - return; - } - - const context = this.context; - - while (i < ii) { - if (match) { - const iterate = (0, match.iterateFn)(context, i); - - if (iterate) { - i++; - continue; - } - - i = (0, match.processFn)(context, i + 1); - ii = fnArray.length; - match = null; - state = null; - - if (i >= ii) { - break; - } - } - - state = (state || InitialState)[fnArray[i]]; - - if (!state || Array.isArray(state)) { - i++; - continue; - } - - context.iCurr = i; - i++; - - if (state.checkFn && !(0, state.checkFn)(context)) { - state = null; - continue; - } - - match = state; - state = null; - } - - this.state = state; - this.match = match; - this.lastProcessed = i; - } - - flush() { - while (this.match) { - const length = this.queue.fnArray.length; - this.lastProcessed = (0, this.match.processFn)(this.context, length); - this.match = null; - this.state = null; - - this._optimize(); - } - } - - reset() { - this.state = null; - this.match = null; - this.lastProcessed = 0; - } - -} - -class OperatorList { - static get CHUNK_SIZE() { - return (0, _util.shadow)(this, "CHUNK_SIZE", 1000); - } - - static get CHUNK_SIZE_ABOUT() { - return (0, _util.shadow)(this, "CHUNK_SIZE_ABOUT", this.CHUNK_SIZE - 5); - } - - constructor(intent = 0, streamSink) { - this._streamSink = streamSink; - this.fnArray = []; - this.argsArray = []; - - if (streamSink && !(intent & _util.RenderingIntentFlag.OPLIST)) { - this.optimizer = new QueueOptimizer(this); - } else { - this.optimizer = new NullOptimizer(this); - } - - this.dependencies = new Set(); - this._totalLength = 0; - this.weight = 0; - this._resolved = streamSink ? null : Promise.resolve(); - } - - get length() { - return this.argsArray.length; - } - - get ready() { - return this._resolved || this._streamSink.ready; - } - - get totalLength() { - return this._totalLength + this.length; - } - - addOp(fn, args) { - this.optimizer.push(fn, args); - this.weight++; - - if (this._streamSink) { - if (this.weight >= OperatorList.CHUNK_SIZE) { - this.flush(); - } else if (this.weight >= OperatorList.CHUNK_SIZE_ABOUT && (fn === _util.OPS.restore || fn === _util.OPS.endText)) { - this.flush(); - } - } - } - - addDependency(dependency) { - if (this.dependencies.has(dependency)) { - return; - } - - this.dependencies.add(dependency); - this.addOp(_util.OPS.dependency, [dependency]); - } - - addDependencies(dependencies) { - for (const dependency of dependencies) { - this.addDependency(dependency); - } - } - - addOpList(opList) { - if (!(opList instanceof OperatorList)) { - (0, _util.warn)('addOpList - ignoring invalid "opList" parameter.'); - return; - } - - for (const dependency of opList.dependencies) { - this.dependencies.add(dependency); - } - - for (let i = 0, ii = opList.length; i < ii; i++) { - this.addOp(opList.fnArray[i], opList.argsArray[i]); - } - } - - getIR() { - return { - fnArray: this.fnArray, - argsArray: this.argsArray, - length: this.length - }; - } - - get _transfers() { - const transfers = []; - const { - fnArray, - argsArray, - length - } = this; - - for (let i = 0; i < length; i++) { - switch (fnArray[i]) { - case _util.OPS.paintInlineImageXObject: - case _util.OPS.paintInlineImageXObjectGroup: - case _util.OPS.paintImageMaskXObject: - const arg = argsArray[i][0]; - - if (!arg.cached) { - transfers.push(arg.data.buffer); - } - - break; - } - } - - return transfers; - } - - flush(lastChunk = false) { - this.optimizer.flush(); - const length = this.length; - this._totalLength += length; - - this._streamSink.enqueue({ - fnArray: this.fnArray, - argsArray: this.argsArray, - lastChunk, - length - }, 1, this._transfers); - - this.dependencies.clear(); - this.fnArray.length = 0; - this.argsArray.length = 0; - this.weight = 0; - this.optimizer.reset(); - } - -} - -exports.OperatorList = OperatorList; - -/***/ }), -/* 63 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.PDFImage = void 0; - -var _util = __w_pdfjs_require__(2); - -var _primitives = __w_pdfjs_require__(5); - -var _colorspace = __w_pdfjs_require__(24); - -var _decode_stream = __w_pdfjs_require__(29); - -var _jpeg_stream = __w_pdfjs_require__(37); - -var _jpx = __w_pdfjs_require__(40); - -function decodeAndClamp(value, addend, coefficient, max) { - value = addend + value * coefficient; - - if (value < 0) { - value = 0; - } else if (value > max) { - value = max; - } - - return value; -} - -function resizeImageMask(src, bpc, w1, h1, w2, h2) { - const length = w2 * h2; - let dest; - - if (bpc <= 8) { - dest = new Uint8Array(length); - } else if (bpc <= 16) { - dest = new Uint16Array(length); - } else { - dest = new Uint32Array(length); - } - - const xRatio = w1 / w2; - const yRatio = h1 / h2; - let i, - j, - py, - newIndex = 0, - oldIndex; - const xScaled = new Uint16Array(w2); - const w1Scanline = w1; - - for (i = 0; i < w2; i++) { - xScaled[i] = Math.floor(i * xRatio); - } - - for (i = 0; i < h2; i++) { - py = Math.floor(i * yRatio) * w1Scanline; - - for (j = 0; j < w2; j++) { - oldIndex = py + xScaled[j]; - dest[newIndex++] = src[oldIndex]; - } - } - - return dest; -} - -class PDFImage { - constructor({ - xref, - res, - image, - isInline = false, - smask = null, - mask = null, - isMask = false, - pdfFunctionFactory, - localColorSpaceCache - }) { - this.image = image; - const dict = image.dict; - const filter = dict.get("F", "Filter"); - - if ((0, _primitives.isName)(filter)) { - switch (filter.name) { - case "JPXDecode": - const jpxImage = new _jpx.JpxImage(); - jpxImage.parseImageProperties(image.stream); - image.stream.reset(); - image.width = jpxImage.width; - image.height = jpxImage.height; - image.bitsPerComponent = jpxImage.bitsPerComponent; - image.numComps = jpxImage.componentsCount; - break; - - case "JBIG2Decode": - image.bitsPerComponent = 1; - image.numComps = 1; - break; - } - } - - let width = dict.get("W", "Width"); - let height = dict.get("H", "Height"); - - if (Number.isInteger(image.width) && image.width > 0 && Number.isInteger(image.height) && image.height > 0 && (image.width !== width || image.height !== height)) { - (0, _util.warn)("PDFImage - using the Width/Height of the image data, " + "rather than the image dictionary."); - width = image.width; - height = image.height; - } - - if (width < 1 || height < 1) { - throw new _util.FormatError(`Invalid image width: ${width} or height: ${height}`); - } - - this.width = width; - this.height = height; - this.interpolate = dict.get("I", "Interpolate"); - this.imageMask = dict.get("IM", "ImageMask") || false; - this.matte = dict.get("Matte") || false; - let bitsPerComponent = image.bitsPerComponent; - - if (!bitsPerComponent) { - bitsPerComponent = dict.get("BPC", "BitsPerComponent"); - - if (!bitsPerComponent) { - if (this.imageMask) { - bitsPerComponent = 1; - } else { - throw new _util.FormatError(`Bits per component missing in image: ${this.imageMask}`); - } - } - } - - this.bpc = bitsPerComponent; - - if (!this.imageMask) { - let colorSpace = dict.getRaw("CS") || dict.getRaw("ColorSpace"); - - if (!colorSpace) { - (0, _util.info)("JPX images (which do not require color spaces)"); - - switch (image.numComps) { - case 1: - colorSpace = _primitives.Name.get("DeviceGray"); - break; - - case 3: - colorSpace = _primitives.Name.get("DeviceRGB"); - break; - - case 4: - colorSpace = _primitives.Name.get("DeviceCMYK"); - break; - - default: - throw new Error(`JPX images with ${image.numComps} color components not supported.`); - } - } - - this.colorSpace = _colorspace.ColorSpace.parse({ - cs: colorSpace, - xref, - resources: isInline ? res : null, - pdfFunctionFactory, - localColorSpaceCache - }); - this.numComps = this.colorSpace.numComps; - } - - this.decode = dict.getArray("D", "Decode"); - this.needsDecode = false; - - if (this.decode && (this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode, bitsPerComponent) || isMask && !_colorspace.ColorSpace.isDefaultDecode(this.decode, 1))) { - this.needsDecode = true; - const max = (1 << bitsPerComponent) - 1; - this.decodeCoefficients = []; - this.decodeAddends = []; - const isIndexed = this.colorSpace && this.colorSpace.name === "Indexed"; - - for (let i = 0, j = 0; i < this.decode.length; i += 2, ++j) { - const dmin = this.decode[i]; - const dmax = this.decode[i + 1]; - this.decodeCoefficients[j] = isIndexed ? (dmax - dmin) / max : dmax - dmin; - this.decodeAddends[j] = isIndexed ? dmin : max * dmin; - } - } - - if (smask) { - this.smask = new PDFImage({ - xref, - res, - image: smask, - isInline, - pdfFunctionFactory, - localColorSpaceCache - }); - } else if (mask) { - if ((0, _primitives.isStream)(mask)) { - const maskDict = mask.dict, - imageMask = maskDict.get("IM", "ImageMask"); - - if (!imageMask) { - (0, _util.warn)("Ignoring /Mask in image without /ImageMask."); - } else { - this.mask = new PDFImage({ - xref, - res, - image: mask, - isInline, - isMask: true, - pdfFunctionFactory, - localColorSpaceCache - }); - } - } else { - this.mask = mask; - } - } - } - - static async buildImage({ - xref, - res, - image, - isInline = false, - pdfFunctionFactory, - localColorSpaceCache - }) { - const imageData = image; - let smaskData = null; - let maskData = null; - const smask = image.dict.get("SMask"); - const mask = image.dict.get("Mask"); - - if (smask) { - smaskData = smask; - } else if (mask) { - if ((0, _primitives.isStream)(mask) || Array.isArray(mask)) { - maskData = mask; - } else { - (0, _util.warn)("Unsupported mask format."); - } - } - - return new PDFImage({ - xref, - res, - image: imageData, - isInline, - smask: smaskData, - mask: maskData, - pdfFunctionFactory, - localColorSpaceCache - }); - } - - static createMask({ - imgArray, - width, - height, - imageIsFromDecodeStream, - inverseDecode, - interpolate - }) { - const computedLength = (width + 7 >> 3) * height; - const actualLength = imgArray.byteLength; - const haveFullData = computedLength === actualLength; - let data, i; - - if (imageIsFromDecodeStream && (!inverseDecode || haveFullData)) { - data = imgArray; - } else if (!inverseDecode) { - data = new Uint8ClampedArray(actualLength); - data.set(imgArray); - } else { - data = new Uint8ClampedArray(computedLength); - data.set(imgArray); - - for (i = actualLength; i < computedLength; i++) { - data[i] = 0xff; - } - } - - if (inverseDecode) { - for (i = 0; i < actualLength; i++) { - data[i] ^= 0xff; - } - } - - return { - data, - width, - height, - interpolate - }; - } - - get drawWidth() { - return Math.max(this.width, this.smask && this.smask.width || 0, this.mask && this.mask.width || 0); - } - - get drawHeight() { - return Math.max(this.height, this.smask && this.smask.height || 0, this.mask && this.mask.height || 0); - } - - decodeBuffer(buffer) { - const bpc = this.bpc; - const numComps = this.numComps; - const decodeAddends = this.decodeAddends; - const decodeCoefficients = this.decodeCoefficients; - const max = (1 << bpc) - 1; - let i, ii; - - if (bpc === 1) { - for (i = 0, ii = buffer.length; i < ii; i++) { - buffer[i] = +!buffer[i]; - } - - return; - } - - let index = 0; - - for (i = 0, ii = this.width * this.height; i < ii; i++) { - for (let j = 0; j < numComps; j++) { - buffer[index] = decodeAndClamp(buffer[index], decodeAddends[j], decodeCoefficients[j], max); - index++; - } - } - } - - getComponents(buffer) { - const bpc = this.bpc; - - if (bpc === 8) { - return buffer; - } - - const width = this.width; - const height = this.height; - const numComps = this.numComps; - const length = width * height * numComps; - let bufferPos = 0; - let output; - - if (bpc <= 8) { - output = new Uint8Array(length); - } else if (bpc <= 16) { - output = new Uint16Array(length); - } else { - output = new Uint32Array(length); - } - - const rowComps = width * numComps; - const max = (1 << bpc) - 1; - let i = 0, - ii, - buf; - - if (bpc === 1) { - let mask, loop1End, loop2End; - - for (let j = 0; j < height; j++) { - loop1End = i + (rowComps & ~7); - loop2End = i + rowComps; - - while (i < loop1End) { - buf = buffer[bufferPos++]; - output[i] = buf >> 7 & 1; - output[i + 1] = buf >> 6 & 1; - output[i + 2] = buf >> 5 & 1; - output[i + 3] = buf >> 4 & 1; - output[i + 4] = buf >> 3 & 1; - output[i + 5] = buf >> 2 & 1; - output[i + 6] = buf >> 1 & 1; - output[i + 7] = buf & 1; - i += 8; - } - - if (i < loop2End) { - buf = buffer[bufferPos++]; - mask = 128; - - while (i < loop2End) { - output[i++] = +!!(buf & mask); - mask >>= 1; - } - } - } - } else { - let bits = 0; - buf = 0; - - for (i = 0, ii = length; i < ii; ++i) { - if (i % rowComps === 0) { - buf = 0; - bits = 0; - } - - while (bits < bpc) { - buf = buf << 8 | buffer[bufferPos++]; - bits += 8; - } - - const remainingBits = bits - bpc; - let value = buf >> remainingBits; - - if (value < 0) { - value = 0; - } else if (value > max) { - value = max; - } - - output[i] = value; - buf &= (1 << remainingBits) - 1; - bits = remainingBits; - } - } - - return output; - } - - fillOpacity(rgbaBuf, width, height, actualHeight, image) { - const smask = this.smask; - const mask = this.mask; - let alphaBuf, sw, sh, i, ii, j; - - if (smask) { - sw = smask.width; - sh = smask.height; - alphaBuf = new Uint8ClampedArray(sw * sh); - smask.fillGrayBuffer(alphaBuf); - - if (sw !== width || sh !== height) { - alphaBuf = resizeImageMask(alphaBuf, smask.bpc, sw, sh, width, height); - } - } else if (mask) { - if (mask instanceof PDFImage) { - sw = mask.width; - sh = mask.height; - alphaBuf = new Uint8ClampedArray(sw * sh); - mask.numComps = 1; - mask.fillGrayBuffer(alphaBuf); - - for (i = 0, ii = sw * sh; i < ii; ++i) { - alphaBuf[i] = 255 - alphaBuf[i]; - } - - if (sw !== width || sh !== height) { - alphaBuf = resizeImageMask(alphaBuf, mask.bpc, sw, sh, width, height); - } - } else if (Array.isArray(mask)) { - alphaBuf = new Uint8ClampedArray(width * height); - const numComps = this.numComps; - - for (i = 0, ii = width * height; i < ii; ++i) { - let opacity = 0; - const imageOffset = i * numComps; - - for (j = 0; j < numComps; ++j) { - const color = image[imageOffset + j]; - const maskOffset = j * 2; - - if (color < mask[maskOffset] || color > mask[maskOffset + 1]) { - opacity = 255; - break; - } - } - - alphaBuf[i] = opacity; - } - } else { - throw new _util.FormatError("Unknown mask format."); - } - } - - if (alphaBuf) { - for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) { - rgbaBuf[j] = alphaBuf[i]; - } - } else { - for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) { - rgbaBuf[j] = 255; - } - } - } - - undoPreblend(buffer, width, height) { - const matte = this.smask && this.smask.matte; - - if (!matte) { - return; - } - - const matteRgb = this.colorSpace.getRgb(matte, 0); - const matteR = matteRgb[0]; - const matteG = matteRgb[1]; - const matteB = matteRgb[2]; - const length = width * height * 4; - - for (let i = 0; i < length; i += 4) { - const alpha = buffer[i + 3]; - - if (alpha === 0) { - buffer[i] = 255; - buffer[i + 1] = 255; - buffer[i + 2] = 255; - continue; - } - - const k = 255 / alpha; - buffer[i] = (buffer[i] - matteR) * k + matteR; - buffer[i + 1] = (buffer[i + 1] - matteG) * k + matteG; - buffer[i + 2] = (buffer[i + 2] - matteB) * k + matteB; - } - } - - createImageData(forceRGBA = false) { - const drawWidth = this.drawWidth; - const drawHeight = this.drawHeight; - const imgData = { - width: drawWidth, - height: drawHeight, - interpolate: this.interpolate, - kind: 0, - data: null - }; - const numComps = this.numComps; - const originalWidth = this.width; - const originalHeight = this.height; - const bpc = this.bpc; - const rowBytes = originalWidth * numComps * bpc + 7 >> 3; - let imgArray; - - if (!forceRGBA) { - let kind; - - if (this.colorSpace.name === "DeviceGray" && bpc === 1) { - kind = _util.ImageKind.GRAYSCALE_1BPP; - } else if (this.colorSpace.name === "DeviceRGB" && bpc === 8 && !this.needsDecode) { - kind = _util.ImageKind.RGB_24BPP; - } - - if (kind && !this.smask && !this.mask && drawWidth === originalWidth && drawHeight === originalHeight) { - imgData.kind = kind; - imgArray = this.getImageBytes(originalHeight * rowBytes); - - if (this.image instanceof _decode_stream.DecodeStream) { - imgData.data = imgArray; - } else { - const newArray = new Uint8ClampedArray(imgArray.length); - newArray.set(imgArray); - imgData.data = newArray; - } - - if (this.needsDecode) { - (0, _util.assert)(kind === _util.ImageKind.GRAYSCALE_1BPP, "PDFImage.createImageData: The image must be grayscale."); - const buffer = imgData.data; - - for (let i = 0, ii = buffer.length; i < ii; i++) { - buffer[i] ^= 0xff; - } - } - - return imgData; - } - - if (this.image instanceof _jpeg_stream.JpegStream && !this.smask && !this.mask) { - let imageLength = originalHeight * rowBytes; - - switch (this.colorSpace.name) { - case "DeviceGray": - imageLength *= 3; - - case "DeviceRGB": - case "DeviceCMYK": - imgData.kind = _util.ImageKind.RGB_24BPP; - imgData.data = this.getImageBytes(imageLength, drawWidth, drawHeight, true); - return imgData; - } - } - } - - imgArray = this.getImageBytes(originalHeight * rowBytes); - const actualHeight = 0 | imgArray.length / rowBytes * drawHeight / originalHeight; - const comps = this.getComponents(imgArray); - let alpha01, maybeUndoPreblend; - - if (!forceRGBA && !this.smask && !this.mask) { - imgData.kind = _util.ImageKind.RGB_24BPP; - imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 3); - alpha01 = 0; - maybeUndoPreblend = false; - } else { - imgData.kind = _util.ImageKind.RGBA_32BPP; - imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 4); - alpha01 = 1; - maybeUndoPreblend = true; - this.fillOpacity(imgData.data, drawWidth, drawHeight, actualHeight, comps); - } - - if (this.needsDecode) { - this.decodeBuffer(comps); - } - - this.colorSpace.fillRgb(imgData.data, originalWidth, originalHeight, drawWidth, drawHeight, actualHeight, bpc, comps, alpha01); - - if (maybeUndoPreblend) { - this.undoPreblend(imgData.data, drawWidth, actualHeight); - } - - return imgData; - } - - fillGrayBuffer(buffer) { - const numComps = this.numComps; - - if (numComps !== 1) { - throw new _util.FormatError(`Reading gray scale from a color image: ${numComps}`); - } - - const width = this.width; - const height = this.height; - const bpc = this.bpc; - const rowBytes = width * numComps * bpc + 7 >> 3; - const imgArray = this.getImageBytes(height * rowBytes); - const comps = this.getComponents(imgArray); - let i, length; - - if (bpc === 1) { - length = width * height; - - if (this.needsDecode) { - for (i = 0; i < length; ++i) { - buffer[i] = comps[i] - 1 & 255; - } - } else { - for (i = 0; i < length; ++i) { - buffer[i] = -comps[i] & 255; - } - } - - return; - } - - if (this.needsDecode) { - this.decodeBuffer(comps); - } - - length = width * height; - const scale = 255 / ((1 << bpc) - 1); - - for (i = 0; i < length; ++i) { - buffer[i] = scale * comps[i]; - } - } - - getImageBytes(length, drawWidth, drawHeight, forceRGB = false) { - this.image.reset(); - this.image.drawWidth = drawWidth || this.width; - this.image.drawHeight = drawHeight || this.height; - this.image.forceRGB = !!forceRGB; - return this.image.getBytes(length, true); - } - -} - -exports.PDFImage = PDFImage; - -/***/ }), -/* 64 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Catalog = void 0; - -var _primitives = __w_pdfjs_require__(5); - -var _core_utils = __w_pdfjs_require__(9); - -var _util = __w_pdfjs_require__(2); - -var _name_number_tree = __w_pdfjs_require__(65); - -var _base_stream = __w_pdfjs_require__(6); - -var _colorspace = __w_pdfjs_require__(24); - -var _file_spec = __w_pdfjs_require__(66); - -var _image_utils = __w_pdfjs_require__(58); - -var _metadata_parser = __w_pdfjs_require__(67); - -var _struct_tree = __w_pdfjs_require__(69); - -function fetchDestination(dest) { - if (dest instanceof _primitives.Dict) { - dest = dest.get("D"); - } - - return Array.isArray(dest) ? dest : null; -} - -class Catalog { - constructor(pdfManager, xref) { - this.pdfManager = pdfManager; - this.xref = xref; - this._catDict = xref.getCatalogObj(); - - if (!(this._catDict instanceof _primitives.Dict)) { - throw new _util.FormatError("Catalog object is not a dictionary."); - } - - this.toplevelPagesDict; - this._actualNumPages = null; - this.fontCache = new _primitives.RefSetCache(); - this.builtInCMapCache = new Map(); - this.standardFontDataCache = new Map(); - this.globalImageCache = new _image_utils.GlobalImageCache(); - this.pageKidsCountCache = new _primitives.RefSetCache(); - this.pageIndexCache = new _primitives.RefSetCache(); - this.nonBlendModesSet = new _primitives.RefSet(); - } - - get version() { - const version = this._catDict.get("Version"); - - return (0, _util.shadow)(this, "version", version instanceof _primitives.Name ? version.name : null); - } - - get lang() { - const lang = this._catDict.get("Lang"); - - return (0, _util.shadow)(this, "lang", typeof lang === "string" ? (0, _util.stringToPDFString)(lang) : null); - } - - get needsRendering() { - const needsRendering = this._catDict.get("NeedsRendering"); - - return (0, _util.shadow)(this, "needsRendering", typeof needsRendering === "boolean" ? needsRendering : false); - } - - get collection() { - let collection = null; - - try { - const obj = this._catDict.get("Collection"); - - if ((0, _primitives.isDict)(obj) && obj.size > 0) { - collection = obj; - } - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - - (0, _util.info)("Cannot fetch Collection entry; assuming no collection is present."); - } - - return (0, _util.shadow)(this, "collection", collection); - } - - get acroForm() { - let acroForm = null; - - try { - const obj = this._catDict.get("AcroForm"); - - if ((0, _primitives.isDict)(obj) && obj.size > 0) { - acroForm = obj; - } - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - - (0, _util.info)("Cannot fetch AcroForm entry; assuming no forms are present."); - } - - return (0, _util.shadow)(this, "acroForm", acroForm); - } - - get acroFormRef() { - const value = this._catDict.getRaw("AcroForm"); - - return (0, _util.shadow)(this, "acroFormRef", (0, _primitives.isRef)(value) ? value : null); - } - - get metadata() { - const streamRef = this._catDict.getRaw("Metadata"); - - if (!(streamRef instanceof _primitives.Ref)) { - return (0, _util.shadow)(this, "metadata", null); - } - - let metadata = null; - - try { - const suppressEncryption = !(this.xref.encrypt && this.xref.encrypt.encryptMetadata); - const stream = this.xref.fetch(streamRef, suppressEncryption); - - if (stream instanceof _base_stream.BaseStream && stream.dict instanceof _primitives.Dict) { - const type = stream.dict.get("Type"); - const subtype = stream.dict.get("Subtype"); - - if ((0, _primitives.isName)(type, "Metadata") && (0, _primitives.isName)(subtype, "XML")) { - const data = (0, _util.stringToUTF8String)(stream.getString()); - - if (data) { - metadata = new _metadata_parser.MetadataParser(data).serializable; - } - } - } - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - - (0, _util.info)(`Skipping invalid Metadata: "${ex}".`); - } - - return (0, _util.shadow)(this, "metadata", metadata); - } - - get markInfo() { - let markInfo = null; - - try { - markInfo = this._readMarkInfo(); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - - (0, _util.warn)("Unable to read mark info."); - } - - return (0, _util.shadow)(this, "markInfo", markInfo); - } - - _readMarkInfo() { - const obj = this._catDict.get("MarkInfo"); - - if (!(0, _primitives.isDict)(obj)) { - return null; - } - - const markInfo = Object.assign(Object.create(null), { - Marked: false, - UserProperties: false, - Suspects: false - }); - - for (const key in markInfo) { - if (!obj.has(key)) { - continue; - } - - const value = obj.get(key); - - if (!(0, _util.isBool)(value)) { - continue; - } - - markInfo[key] = value; - } - - return markInfo; - } - - get structTreeRoot() { - let structTree = null; - - try { - structTree = this._readStructTreeRoot(); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - - (0, _util.warn)("Unable read to structTreeRoot info."); - } - - return (0, _util.shadow)(this, "structTreeRoot", structTree); - } - - _readStructTreeRoot() { - const obj = this._catDict.get("StructTreeRoot"); - - if (!(0, _primitives.isDict)(obj)) { - return null; - } - - const root = new _struct_tree.StructTreeRoot(obj); - root.init(); - return root; - } - - get toplevelPagesDict() { - const pagesObj = this._catDict.get("Pages"); - - if (!(0, _primitives.isDict)(pagesObj)) { - throw new _util.FormatError("Invalid top-level pages dictionary."); - } - - return (0, _util.shadow)(this, "toplevelPagesDict", pagesObj); - } - - get documentOutline() { - let obj = null; - - try { - obj = this._readDocumentOutline(); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - - (0, _util.warn)("Unable to read document outline."); - } - - return (0, _util.shadow)(this, "documentOutline", obj); - } - - _readDocumentOutline() { - let obj = this._catDict.get("Outlines"); - - if (!(0, _primitives.isDict)(obj)) { - return null; - } - - obj = obj.getRaw("First"); - - if (!(0, _primitives.isRef)(obj)) { - return null; - } - - const root = { - items: [] - }; - const queue = [{ - obj, - parent: root - }]; - const processed = new _primitives.RefSet(); - processed.put(obj); - const xref = this.xref, - blackColor = new Uint8ClampedArray(3); - - while (queue.length > 0) { - const i = queue.shift(); - const outlineDict = xref.fetchIfRef(i.obj); - - if (outlineDict === null) { - continue; - } - - if (!outlineDict.has("Title")) { - throw new _util.FormatError("Invalid outline item encountered."); - } - - const data = { - url: null, - dest: null - }; - Catalog.parseDestDictionary({ - destDict: outlineDict, - resultObj: data, - docBaseUrl: this.pdfManager.docBaseUrl - }); - const title = outlineDict.get("Title"); - const flags = outlineDict.get("F") || 0; - const color = outlineDict.getArray("C"); - const count = outlineDict.get("Count"); - let rgbColor = blackColor; - - if (Array.isArray(color) && color.length === 3 && (color[0] !== 0 || color[1] !== 0 || color[2] !== 0)) { - rgbColor = _colorspace.ColorSpace.singletons.rgb.getRgb(color, 0); - } - - const outlineItem = { - dest: data.dest, - url: data.url, - unsafeUrl: data.unsafeUrl, - newWindow: data.newWindow, - title: (0, _util.stringToPDFString)(title), - color: rgbColor, - count: Number.isInteger(count) ? count : undefined, - bold: !!(flags & 2), - italic: !!(flags & 1), - items: [] - }; - i.parent.items.push(outlineItem); - obj = outlineDict.getRaw("First"); - - if ((0, _primitives.isRef)(obj) && !processed.has(obj)) { - queue.push({ - obj, - parent: outlineItem - }); - processed.put(obj); - } - - obj = outlineDict.getRaw("Next"); - - if ((0, _primitives.isRef)(obj) && !processed.has(obj)) { - queue.push({ - obj, - parent: i.parent - }); - processed.put(obj); - } - } - - return root.items.length > 0 ? root.items : null; - } - - get permissions() { - let permissions = null; - - try { - permissions = this._readPermissions(); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - - (0, _util.warn)("Unable to read permissions."); - } - - return (0, _util.shadow)(this, "permissions", permissions); - } - - _readPermissions() { - const encrypt = this.xref.trailer.get("Encrypt"); - - if (!(0, _primitives.isDict)(encrypt)) { - return null; - } - - let flags = encrypt.get("P"); - - if (!(0, _util.isNum)(flags)) { - return null; - } - - flags += 2 ** 32; - const permissions = []; - - for (const key in _util.PermissionFlag) { - const value = _util.PermissionFlag[key]; - - if (flags & value) { - permissions.push(value); - } - } - - return permissions; - } - - get optionalContentConfig() { - let config = null; - - try { - const properties = this._catDict.get("OCProperties"); - - if (!properties) { - return (0, _util.shadow)(this, "optionalContentConfig", null); - } - - const defaultConfig = properties.get("D"); - - if (!defaultConfig) { - return (0, _util.shadow)(this, "optionalContentConfig", null); - } - - const groupsData = properties.get("OCGs"); - - if (!Array.isArray(groupsData)) { - return (0, _util.shadow)(this, "optionalContentConfig", null); - } - - const groups = []; - const groupRefs = []; - - for (const groupRef of groupsData) { - if (!(0, _primitives.isRef)(groupRef)) { - continue; - } - - groupRefs.push(groupRef); - const group = this.xref.fetchIfRef(groupRef); - groups.push({ - id: groupRef.toString(), - name: (0, _util.isString)(group.get("Name")) ? (0, _util.stringToPDFString)(group.get("Name")) : null, - intent: (0, _util.isString)(group.get("Intent")) ? (0, _util.stringToPDFString)(group.get("Intent")) : null - }); - } - - config = this._readOptionalContentConfig(defaultConfig, groupRefs); - config.groups = groups; - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - - (0, _util.warn)(`Unable to read optional content config: ${ex}`); - } - - return (0, _util.shadow)(this, "optionalContentConfig", config); - } - - _readOptionalContentConfig(config, contentGroupRefs) { - function parseOnOff(refs) { - const onParsed = []; - - if (Array.isArray(refs)) { - for (const value of refs) { - if (!(0, _primitives.isRef)(value)) { - continue; - } - - if (contentGroupRefs.includes(value)) { - onParsed.push(value.toString()); - } - } - } - - return onParsed; - } - - function parseOrder(refs, nestedLevels = 0) { - if (!Array.isArray(refs)) { - return null; - } - - const order = []; - - for (const value of refs) { - if ((0, _primitives.isRef)(value) && contentGroupRefs.includes(value)) { - parsedOrderRefs.put(value); - order.push(value.toString()); - continue; - } - - const nestedOrder = parseNestedOrder(value, nestedLevels); - - if (nestedOrder) { - order.push(nestedOrder); - } - } - - if (nestedLevels > 0) { - return order; - } - - const hiddenGroups = []; - - for (const groupRef of contentGroupRefs) { - if (parsedOrderRefs.has(groupRef)) { - continue; - } - - hiddenGroups.push(groupRef.toString()); - } - - if (hiddenGroups.length) { - order.push({ - name: null, - order: hiddenGroups - }); - } - - return order; - } - - function parseNestedOrder(ref, nestedLevels) { - if (++nestedLevels > MAX_NESTED_LEVELS) { - (0, _util.warn)("parseNestedOrder - reached MAX_NESTED_LEVELS."); - return null; - } - - const value = xref.fetchIfRef(ref); - - if (!Array.isArray(value)) { - return null; - } - - const nestedName = xref.fetchIfRef(value[0]); - - if (typeof nestedName !== "string") { - return null; - } - - const nestedOrder = parseOrder(value.slice(1), nestedLevels); - - if (!nestedOrder || !nestedOrder.length) { - return null; - } - - return { - name: (0, _util.stringToPDFString)(nestedName), - order: nestedOrder - }; - } - - const xref = this.xref, - parsedOrderRefs = new _primitives.RefSet(), - MAX_NESTED_LEVELS = 10; - return { - name: (0, _util.isString)(config.get("Name")) ? (0, _util.stringToPDFString)(config.get("Name")) : null, - creator: (0, _util.isString)(config.get("Creator")) ? (0, _util.stringToPDFString)(config.get("Creator")) : null, - baseState: (0, _primitives.isName)(config.get("BaseState")) ? config.get("BaseState").name : null, - on: parseOnOff(config.get("ON")), - off: parseOnOff(config.get("OFF")), - order: parseOrder(config.get("Order")), - groups: null - }; - } - - setActualNumPages(num = null) { - this._actualNumPages = num; - } - - get hasActualNumPages() { - return this._actualNumPages !== null; - } - - get _pagesCount() { - const obj = this.toplevelPagesDict.get("Count"); - - if (!Number.isInteger(obj)) { - throw new _util.FormatError("Page count in top-level pages dictionary is not an integer."); - } - - return (0, _util.shadow)(this, "_pagesCount", obj); - } - - get numPages() { - return this.hasActualNumPages ? this._actualNumPages : this._pagesCount; - } - - get destinations() { - const obj = this._readDests(), - dests = Object.create(null); - - if (obj instanceof _name_number_tree.NameTree) { - for (const [key, value] of obj.getAll()) { - const dest = fetchDestination(value); - - if (dest) { - dests[key] = dest; - } - } - } else if (obj instanceof _primitives.Dict) { - obj.forEach(function (key, value) { - const dest = fetchDestination(value); - - if (dest) { - dests[key] = dest; - } - }); - } - - return (0, _util.shadow)(this, "destinations", dests); - } - - getDestination(id) { - const obj = this._readDests(); - - if (obj instanceof _name_number_tree.NameTree) { - const dest = fetchDestination(obj.get(id)); - - if (dest) { - return dest; - } - - const allDest = this.destinations[id]; - - if (allDest) { - (0, _util.warn)(`Found "${id}" at an incorrect position in the NameTree.`); - return allDest; - } - } else if (obj instanceof _primitives.Dict) { - const dest = fetchDestination(obj.get(id)); - - if (dest) { - return dest; - } - } - - return null; - } - - _readDests() { - const obj = this._catDict.get("Names"); - - if (obj && obj.has("Dests")) { - return new _name_number_tree.NameTree(obj.getRaw("Dests"), this.xref); - } else if (this._catDict.has("Dests")) { - return this._catDict.get("Dests"); - } - - return undefined; - } - - get pageLabels() { - let obj = null; - - try { - obj = this._readPageLabels(); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - - (0, _util.warn)("Unable to read page labels."); - } - - return (0, _util.shadow)(this, "pageLabels", obj); - } - - _readPageLabels() { - const obj = this._catDict.getRaw("PageLabels"); - - if (!obj) { - return null; - } - - const pageLabels = new Array(this.numPages); - let style = null, - prefix = ""; - const numberTree = new _name_number_tree.NumberTree(obj, this.xref); - const nums = numberTree.getAll(); - let currentLabel = "", - currentIndex = 1; - - for (let i = 0, ii = this.numPages; i < ii; i++) { - const labelDict = nums.get(i); - - if (labelDict !== undefined) { - if (!(0, _primitives.isDict)(labelDict)) { - throw new _util.FormatError("PageLabel is not a dictionary."); - } - - if (labelDict.has("Type") && !(0, _primitives.isName)(labelDict.get("Type"), "PageLabel")) { - throw new _util.FormatError("Invalid type in PageLabel dictionary."); - } - - if (labelDict.has("S")) { - const s = labelDict.get("S"); - - if (!(0, _primitives.isName)(s)) { - throw new _util.FormatError("Invalid style in PageLabel dictionary."); - } - - style = s.name; - } else { - style = null; - } - - if (labelDict.has("P")) { - const p = labelDict.get("P"); - - if (!(0, _util.isString)(p)) { - throw new _util.FormatError("Invalid prefix in PageLabel dictionary."); - } - - prefix = (0, _util.stringToPDFString)(p); - } else { - prefix = ""; - } - - if (labelDict.has("St")) { - const st = labelDict.get("St"); - - if (!(Number.isInteger(st) && st >= 1)) { - throw new _util.FormatError("Invalid start in PageLabel dictionary."); - } - - currentIndex = st; - } else { - currentIndex = 1; - } - } - - switch (style) { - case "D": - currentLabel = currentIndex; - break; - - case "R": - case "r": - currentLabel = (0, _core_utils.toRomanNumerals)(currentIndex, style === "r"); - break; - - case "A": - case "a": - const LIMIT = 26; - const A_UPPER_CASE = 0x41, - A_LOWER_CASE = 0x61; - const baseCharCode = style === "a" ? A_LOWER_CASE : A_UPPER_CASE; - const letterIndex = currentIndex - 1; - const character = String.fromCharCode(baseCharCode + letterIndex % LIMIT); - const charBuf = []; - - for (let j = 0, jj = letterIndex / LIMIT | 0; j <= jj; j++) { - charBuf.push(character); - } - - currentLabel = charBuf.join(""); - break; - - default: - if (style) { - throw new _util.FormatError(`Invalid style "${style}" in PageLabel dictionary.`); - } - - currentLabel = ""; - } - - pageLabels[i] = prefix + currentLabel; - currentIndex++; - } - - return pageLabels; - } - - get pageLayout() { - const obj = this._catDict.get("PageLayout"); - - let pageLayout = ""; - - if ((0, _primitives.isName)(obj)) { - switch (obj.name) { - case "SinglePage": - case "OneColumn": - case "TwoColumnLeft": - case "TwoColumnRight": - case "TwoPageLeft": - case "TwoPageRight": - pageLayout = obj.name; - } - } - - return (0, _util.shadow)(this, "pageLayout", pageLayout); - } - - get pageMode() { - const obj = this._catDict.get("PageMode"); - - let pageMode = "UseNone"; - - if ((0, _primitives.isName)(obj)) { - switch (obj.name) { - case "UseNone": - case "UseOutlines": - case "UseThumbs": - case "FullScreen": - case "UseOC": - case "UseAttachments": - pageMode = obj.name; - } - } - - return (0, _util.shadow)(this, "pageMode", pageMode); - } - - get viewerPreferences() { - const ViewerPreferencesValidators = { - HideToolbar: _util.isBool, - HideMenubar: _util.isBool, - HideWindowUI: _util.isBool, - FitWindow: _util.isBool, - CenterWindow: _util.isBool, - DisplayDocTitle: _util.isBool, - NonFullScreenPageMode: _primitives.isName, - Direction: _primitives.isName, - ViewArea: _primitives.isName, - ViewClip: _primitives.isName, - PrintArea: _primitives.isName, - PrintClip: _primitives.isName, - PrintScaling: _primitives.isName, - Duplex: _primitives.isName, - PickTrayByPDFSize: _util.isBool, - PrintPageRange: Array.isArray, - NumCopies: Number.isInteger - }; - - const obj = this._catDict.get("ViewerPreferences"); - - let prefs = null; - - if ((0, _primitives.isDict)(obj)) { - for (const key in ViewerPreferencesValidators) { - if (!obj.has(key)) { - continue; - } - - const value = obj.get(key); - - if (!ViewerPreferencesValidators[key](value)) { - (0, _util.info)(`Bad value in ViewerPreferences for "${key}".`); - continue; - } - - let prefValue; - - switch (key) { - case "NonFullScreenPageMode": - switch (value.name) { - case "UseNone": - case "UseOutlines": - case "UseThumbs": - case "UseOC": - prefValue = value.name; - break; - - default: - prefValue = "UseNone"; - } - - break; - - case "Direction": - switch (value.name) { - case "L2R": - case "R2L": - prefValue = value.name; - break; - - default: - prefValue = "L2R"; - } - - break; - - case "ViewArea": - case "ViewClip": - case "PrintArea": - case "PrintClip": - switch (value.name) { - case "MediaBox": - case "CropBox": - case "BleedBox": - case "TrimBox": - case "ArtBox": - prefValue = value.name; - break; - - default: - prefValue = "CropBox"; - } - - break; - - case "PrintScaling": - switch (value.name) { - case "None": - case "AppDefault": - prefValue = value.name; - break; - - default: - prefValue = "AppDefault"; - } - - break; - - case "Duplex": - switch (value.name) { - case "Simplex": - case "DuplexFlipShortEdge": - case "DuplexFlipLongEdge": - prefValue = value.name; - break; - - default: - prefValue = "None"; - } - - break; - - case "PrintPageRange": - const length = value.length; - - if (length % 2 !== 0) { - break; - } - - const isValid = value.every((page, i, arr) => { - return Number.isInteger(page) && page > 0 && (i === 0 || page >= arr[i - 1]) && page <= this.numPages; - }); - - if (isValid) { - prefValue = value; - } - - break; - - case "NumCopies": - if (value > 0) { - prefValue = value; - } - - break; - - default: - if (typeof value !== "boolean") { - throw new _util.FormatError(`viewerPreferences - expected a boolean value for: ${key}`); - } - - prefValue = value; - } - - if (prefValue !== undefined) { - if (!prefs) { - prefs = Object.create(null); - } - - prefs[key] = prefValue; - } else { - (0, _util.info)(`Bad value in ViewerPreferences for "${key}".`); - } - } - } - - return (0, _util.shadow)(this, "viewerPreferences", prefs); - } - - get openAction() { - const obj = this._catDict.get("OpenAction"); - - const openAction = Object.create(null); - - if ((0, _primitives.isDict)(obj)) { - const destDict = new _primitives.Dict(this.xref); - destDict.set("A", obj); - const resultObj = { - url: null, - dest: null, - action: null - }; - Catalog.parseDestDictionary({ - destDict, - resultObj - }); - - if (Array.isArray(resultObj.dest)) { - openAction.dest = resultObj.dest; - } else if (resultObj.action) { - openAction.action = resultObj.action; - } - } else if (Array.isArray(obj)) { - openAction.dest = obj; - } - - return (0, _util.shadow)(this, "openAction", (0, _util.objectSize)(openAction) > 0 ? openAction : null); - } - - get attachments() { - const obj = this._catDict.get("Names"); - - let attachments = null; - - if (obj instanceof _primitives.Dict && obj.has("EmbeddedFiles")) { - const nameTree = new _name_number_tree.NameTree(obj.getRaw("EmbeddedFiles"), this.xref); - - for (const [key, value] of nameTree.getAll()) { - const fs = new _file_spec.FileSpec(value, this.xref); - - if (!attachments) { - attachments = Object.create(null); - } - - attachments[(0, _util.stringToPDFString)(key)] = fs.serializable; - } - } - - return (0, _util.shadow)(this, "attachments", attachments); - } - - get xfaImages() { - const obj = this._catDict.get("Names"); - - let xfaImages = null; - - if (obj instanceof _primitives.Dict && obj.has("XFAImages")) { - const nameTree = new _name_number_tree.NameTree(obj.getRaw("XFAImages"), this.xref); - - for (const [key, value] of nameTree.getAll()) { - if (!xfaImages) { - xfaImages = new _primitives.Dict(this.xref); - } - - xfaImages.set(key, value); - } - } - - return (0, _util.shadow)(this, "xfaImages", xfaImages); - } - - _collectJavaScript() { - const obj = this._catDict.get("Names"); - - let javaScript = null; - - function appendIfJavaScriptDict(name, jsDict) { - if (!(jsDict instanceof _primitives.Dict)) { - return; - } - - if (!(0, _primitives.isName)(jsDict.get("S"), "JavaScript")) { - return; - } - - let js = jsDict.get("JS"); - - if ((0, _primitives.isStream)(js)) { - js = js.getString(); - } else if (typeof js !== "string") { - return; - } - - if (javaScript === null) { - javaScript = new Map(); - } - - javaScript.set(name, (0, _util.stringToPDFString)(js)); - } - - if (obj instanceof _primitives.Dict && obj.has("JavaScript")) { - const nameTree = new _name_number_tree.NameTree(obj.getRaw("JavaScript"), this.xref); - - for (const [key, value] of nameTree.getAll()) { - appendIfJavaScriptDict(key, value); - } - } - - const openAction = this._catDict.get("OpenAction"); - - if (openAction) { - appendIfJavaScriptDict("OpenAction", openAction); - } - - return javaScript; - } - - get javaScript() { - const javaScript = this._collectJavaScript(); - - return (0, _util.shadow)(this, "javaScript", javaScript ? [...javaScript.values()] : null); - } - - get jsActions() { - const javaScript = this._collectJavaScript(); - - let actions = (0, _core_utils.collectActions)(this.xref, this._catDict, _util.DocumentActionEventType); - - if (javaScript) { - if (!actions) { - actions = Object.create(null); - } - - for (const [key, val] of javaScript) { - if (key in actions) { - actions[key].push(val); - } else { - actions[key] = [val]; - } - } - } - - return (0, _util.shadow)(this, "jsActions", actions); - } - - fontFallback(id, handler) { - const promises = []; - this.fontCache.forEach(function (promise) { - promises.push(promise); - }); - return Promise.all(promises).then(translatedFonts => { - for (const translatedFont of translatedFonts) { - if (translatedFont.loadedName === id) { - translatedFont.fallback(handler); - return; - } - } - }); - } - - cleanup(manuallyTriggered = false) { - (0, _primitives.clearPrimitiveCaches)(); - this.globalImageCache.clear(manuallyTriggered); - this.pageKidsCountCache.clear(); - this.pageIndexCache.clear(); - this.nonBlendModesSet.clear(); - const promises = []; - this.fontCache.forEach(function (promise) { - promises.push(promise); - }); - return Promise.all(promises).then(translatedFonts => { - for (const { - dict - } of translatedFonts) { - delete dict.cacheKey; - } - - this.fontCache.clear(); - this.builtInCMapCache.clear(); - this.standardFontDataCache.clear(); - }); - } - - getPageDict(pageIndex) { - const capability = (0, _util.createPromiseCapability)(); - const nodesToVisit = [this.toplevelPagesDict]; - const visitedNodes = new _primitives.RefSet(); - - const pagesRef = this._catDict.getRaw("Pages"); - - if (pagesRef instanceof _primitives.Ref) { - visitedNodes.put(pagesRef); - } - - const xref = this.xref, - pageKidsCountCache = this.pageKidsCountCache; - let currentPageIndex = 0; - - function next() { - while (nodesToVisit.length) { - const currentNode = nodesToVisit.pop(); - - if (currentNode instanceof _primitives.Ref) { - const count = pageKidsCountCache.get(currentNode); - - if (count >= 0 && currentPageIndex + count <= pageIndex) { - currentPageIndex += count; - continue; - } - - if (visitedNodes.has(currentNode)) { - capability.reject(new _util.FormatError("Pages tree contains circular reference.")); - return; - } - - visitedNodes.put(currentNode); - xref.fetchAsync(currentNode).then(function (obj) { - if ((0, _primitives.isDict)(obj, "Page") || (0, _primitives.isDict)(obj) && !obj.has("Kids")) { - if (currentNode && !pageKidsCountCache.has(currentNode)) { - pageKidsCountCache.put(currentNode, 1); - } - - if (pageIndex === currentPageIndex) { - capability.resolve([obj, currentNode]); - } else { - currentPageIndex++; - next(); - } - - return; - } - - nodesToVisit.push(obj); - next(); - }, capability.reject); - return; - } - - if (!(currentNode instanceof _primitives.Dict)) { - capability.reject(new _util.FormatError("Page dictionary kid reference points to wrong type of object.")); - return; - } - - let count; - - try { - count = currentNode.get("Count"); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - } - - if (Number.isInteger(count) && count >= 0) { - const objId = currentNode.objId; - - if (objId && !pageKidsCountCache.has(objId)) { - pageKidsCountCache.put(objId, count); - } - - if (currentPageIndex + count <= pageIndex) { - currentPageIndex += count; - continue; - } - } - - let kids; - - try { - kids = currentNode.get("Kids"); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - } - - if (!Array.isArray(kids)) { - let type; - - try { - type = currentNode.get("Type"); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - } - - if ((0, _primitives.isName)(type, "Page") || !currentNode.has("Type") && currentNode.has("Contents")) { - if (currentPageIndex === pageIndex) { - capability.resolve([currentNode, null]); - return; - } - - currentPageIndex++; - continue; - } - - capability.reject(new _util.FormatError("Page dictionary kids object is not an array.")); - return; - } - - for (let last = kids.length - 1; last >= 0; last--) { - nodesToVisit.push(kids[last]); - } - } - - capability.reject(new Error(`Page index ${pageIndex} not found.`)); - } - - next(); - return capability.promise; - } - - getAllPageDicts(recoveryMode = false) { - const queue = [{ - currentNode: this.toplevelPagesDict, - posInKids: 0 - }]; - const visitedNodes = new _primitives.RefSet(); - - const pagesRef = this._catDict.getRaw("Pages"); - - if (pagesRef instanceof _primitives.Ref) { - visitedNodes.put(pagesRef); - } - - const map = new Map(); - let pageIndex = 0; - - function addPageDict(pageDict, pageRef) { - map.set(pageIndex++, [pageDict, pageRef]); - } - - function addPageError(error) { - map.set(pageIndex++, [error, null]); - } - - while (queue.length > 0) { - const queueItem = queue[queue.length - 1]; - const { - currentNode, - posInKids - } = queueItem; - let kids; - - try { - kids = currentNode.get("Kids"); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - - if (ex instanceof _core_utils.XRefEntryException && !recoveryMode) { - throw ex; - } - - addPageError(ex); - break; - } - - if (!Array.isArray(kids)) { - addPageError(new _util.FormatError("Page dictionary kids object is not an array.")); - break; - } - - if (posInKids >= kids.length) { - queue.pop(); - continue; - } - - const kidObj = kids[posInKids]; - let obj; - - if (kidObj instanceof _primitives.Ref) { - try { - obj = this.xref.fetch(kidObj); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - - if (ex instanceof _core_utils.XRefEntryException && !recoveryMode) { - throw ex; - } - - addPageError(ex); - break; - } - - if (visitedNodes.has(kidObj)) { - addPageError(new _util.FormatError("Pages tree contains circular reference.")); - break; - } - - visitedNodes.put(kidObj); - } else { - obj = kidObj; - } - - if (!(obj instanceof _primitives.Dict)) { - addPageError(new _util.FormatError("Page dictionary kid reference points to wrong type of object.")); - break; - } - - if ((0, _primitives.isDict)(obj, "Page") || !obj.has("Kids")) { - addPageDict(obj, kidObj instanceof _primitives.Ref ? kidObj : null); - } else { - queue.push({ - currentNode: obj, - posInKids: 0 - }); - } - - queueItem.posInKids++; - } - - return map; - } - - getPageIndex(pageRef) { - const cachedPageIndex = this.pageIndexCache.get(pageRef); - - if (cachedPageIndex !== undefined) { - return Promise.resolve(cachedPageIndex); - } - - const xref = this.xref; - - function pagesBeforeRef(kidRef) { - let total = 0, - parentRef; - return xref.fetchAsync(kidRef).then(function (node) { - if ((0, _primitives.isRefsEqual)(kidRef, pageRef) && !(0, _primitives.isDict)(node, "Page") && !((0, _primitives.isDict)(node) && !node.has("Type") && node.has("Contents"))) { - throw new _util.FormatError("The reference does not point to a /Page dictionary."); - } - - if (!node) { - return null; - } - - if (!(0, _primitives.isDict)(node)) { - throw new _util.FormatError("Node must be a dictionary."); - } - - parentRef = node.getRaw("Parent"); - return node.getAsync("Parent"); - }).then(function (parent) { - if (!parent) { - return null; - } - - if (!(0, _primitives.isDict)(parent)) { - throw new _util.FormatError("Parent must be a dictionary."); - } - - return parent.getAsync("Kids"); - }).then(function (kids) { - if (!kids) { - return null; - } - - const kidPromises = []; - let found = false; - - for (let i = 0, ii = kids.length; i < ii; i++) { - const kid = kids[i]; - - if (!(0, _primitives.isRef)(kid)) { - throw new _util.FormatError("Kid must be a reference."); - } - - if ((0, _primitives.isRefsEqual)(kid, kidRef)) { - found = true; - break; - } - - kidPromises.push(xref.fetchAsync(kid).then(function (obj) { - if (!(0, _primitives.isDict)(obj)) { - throw new _util.FormatError("Kid node must be a dictionary."); - } - - if (obj.has("Count")) { - total += obj.get("Count"); - } else { - total++; - } - })); - } - - if (!found) { - throw new _util.FormatError("Kid reference not found in parent's kids."); - } - - return Promise.all(kidPromises).then(function () { - return [total, parentRef]; - }); - }); - } - - let total = 0; - - const next = ref => pagesBeforeRef(ref).then(args => { - if (!args) { - this.pageIndexCache.put(pageRef, total); - return total; - } - - const [count, parentRef] = args; - total += count; - return next(parentRef); - }); - - return next(pageRef); - } - - static parseDestDictionary(params) { - const destDict = params.destDict; - - if (!(0, _primitives.isDict)(destDict)) { - (0, _util.warn)("parseDestDictionary: `destDict` must be a dictionary."); - return; - } - - const resultObj = params.resultObj; - - if (typeof resultObj !== "object") { - (0, _util.warn)("parseDestDictionary: `resultObj` must be an object."); - return; - } - - const docBaseUrl = params.docBaseUrl || null; - let action = destDict.get("A"), - url, - dest; - - if (!(0, _primitives.isDict)(action)) { - if (destDict.has("Dest")) { - action = destDict.get("Dest"); - } else { - action = destDict.get("AA"); - - if ((0, _primitives.isDict)(action)) { - if (action.has("D")) { - action = action.get("D"); - } else if (action.has("U")) { - action = action.get("U"); - } - } - } - } - - if ((0, _primitives.isDict)(action)) { - const actionType = action.get("S"); - - if (!(0, _primitives.isName)(actionType)) { - (0, _util.warn)("parseDestDictionary: Invalid type in Action dictionary."); - return; - } - - const actionName = actionType.name; - - switch (actionName) { - case "ResetForm": - const flags = action.get("Flags"); - const include = (((0, _util.isNum)(flags) ? flags : 0) & 1) === 0; - const fields = []; - const refs = []; - - for (const obj of action.get("Fields") || []) { - if ((0, _primitives.isRef)(obj)) { - refs.push(obj.toString()); - } else if ((0, _util.isString)(obj)) { - fields.push((0, _util.stringToPDFString)(obj)); - } - } - - resultObj.resetForm = { - fields, - refs, - include - }; - break; - - case "URI": - url = action.get("URI"); - - if (url instanceof _primitives.Name) { - url = "/" + url.name; - } - - break; - - case "GoTo": - dest = action.get("D"); - break; - - case "Launch": - case "GoToR": - const urlDict = action.get("F"); - - if ((0, _primitives.isDict)(urlDict)) { - url = urlDict.get("F") || null; - } else if ((0, _util.isString)(urlDict)) { - url = urlDict; - } - - let remoteDest = action.get("D"); - - if (remoteDest) { - if ((0, _primitives.isName)(remoteDest)) { - remoteDest = remoteDest.name; - } - - if ((0, _util.isString)(url)) { - const baseUrl = url.split("#")[0]; - - if ((0, _util.isString)(remoteDest)) { - url = baseUrl + "#" + remoteDest; - } else if (Array.isArray(remoteDest)) { - url = baseUrl + "#" + JSON.stringify(remoteDest); - } - } - } - - const newWindow = action.get("NewWindow"); - - if ((0, _util.isBool)(newWindow)) { - resultObj.newWindow = newWindow; - } - - break; - - case "Named": - const namedAction = action.get("N"); - - if ((0, _primitives.isName)(namedAction)) { - resultObj.action = namedAction.name; - } - - break; - - case "JavaScript": - const jsAction = action.get("JS"); - let js; - - if ((0, _primitives.isStream)(jsAction)) { - js = jsAction.getString(); - } else if ((0, _util.isString)(jsAction)) { - js = jsAction; - } - - const jsURL = js && (0, _core_utils.recoverJsURL)((0, _util.stringToPDFString)(js)); - - if (jsURL) { - url = jsURL.url; - resultObj.newWindow = jsURL.newWindow; - break; - } - - default: - if (actionName === "JavaScript" || actionName === "SubmitForm") { - break; - } - - (0, _util.warn)(`parseDestDictionary - unsupported action: "${actionName}".`); - break; - } - } else if (destDict.has("Dest")) { - dest = destDict.get("Dest"); - } - - if ((0, _util.isString)(url)) { - const absoluteUrl = (0, _util.createValidAbsoluteUrl)(url, docBaseUrl, { - addDefaultProtocol: true, - tryConvertEncoding: true - }); - - if (absoluteUrl) { - resultObj.url = absoluteUrl.href; - } - - resultObj.unsafeUrl = url; - } - - if (dest) { - if ((0, _primitives.isName)(dest)) { - dest = dest.name; - } - - if ((0, _util.isString)(dest) || Array.isArray(dest)) { - resultObj.dest = dest; - } - } - } - -} - -exports.Catalog = Catalog; - -/***/ }), -/* 65 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.NumberTree = exports.NameTree = void 0; - -var _util = __w_pdfjs_require__(2); - -var _primitives = __w_pdfjs_require__(5); - -class NameOrNumberTree { - constructor(root, xref, type) { - if (this.constructor === NameOrNumberTree) { - (0, _util.unreachable)("Cannot initialize NameOrNumberTree."); - } - - this.root = root; - this.xref = xref; - this._type = type; - } - - getAll() { - const map = new Map(); - - if (!this.root) { - return map; - } - - const xref = this.xref; - const processed = new _primitives.RefSet(); - processed.put(this.root); - const queue = [this.root]; - - while (queue.length > 0) { - const obj = xref.fetchIfRef(queue.shift()); - - if (!(0, _primitives.isDict)(obj)) { - continue; - } - - if (obj.has("Kids")) { - const kids = obj.get("Kids"); - - for (let i = 0, ii = kids.length; i < ii; i++) { - const kid = kids[i]; - - if (processed.has(kid)) { - throw new _util.FormatError(`Duplicate entry in "${this._type}" tree.`); - } - - queue.push(kid); - processed.put(kid); - } - - continue; - } - - const entries = obj.get(this._type); - - if (!Array.isArray(entries)) { - continue; - } - - for (let i = 0, ii = entries.length; i < ii; i += 2) { - map.set(xref.fetchIfRef(entries[i]), xref.fetchIfRef(entries[i + 1])); - } - } - - return map; - } - - get(key) { - if (!this.root) { - return null; - } - - const xref = this.xref; - let kidsOrEntries = xref.fetchIfRef(this.root); - let loopCount = 0; - const MAX_LEVELS = 10; - - while (kidsOrEntries.has("Kids")) { - if (++loopCount > MAX_LEVELS) { - (0, _util.warn)(`Search depth limit reached for "${this._type}" tree.`); - return null; - } - - const kids = kidsOrEntries.get("Kids"); - - if (!Array.isArray(kids)) { - return null; - } - - let l = 0, - r = kids.length - 1; - - while (l <= r) { - const m = l + r >> 1; - const kid = xref.fetchIfRef(kids[m]); - const limits = kid.get("Limits"); - - if (key < xref.fetchIfRef(limits[0])) { - r = m - 1; - } else if (key > xref.fetchIfRef(limits[1])) { - l = m + 1; - } else { - kidsOrEntries = xref.fetchIfRef(kids[m]); - break; - } - } - - if (l > r) { - return null; - } - } - - const entries = kidsOrEntries.get(this._type); - - if (Array.isArray(entries)) { - let l = 0, - r = entries.length - 2; - - while (l <= r) { - const tmp = l + r >> 1, - m = tmp + (tmp & 1); - const currentKey = xref.fetchIfRef(entries[m]); - - if (key < currentKey) { - r = m - 2; - } else if (key > currentKey) { - l = m + 2; - } else { - return xref.fetchIfRef(entries[m + 1]); - } - } - } - - return null; - } - -} - -class NameTree extends NameOrNumberTree { - constructor(root, xref) { - super(root, xref, "Names"); - } - -} - -exports.NameTree = NameTree; - -class NumberTree extends NameOrNumberTree { - constructor(root, xref) { - super(root, xref, "Nums"); - } - -} - -exports.NumberTree = NumberTree; - -/***/ }), -/* 66 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.FileSpec = void 0; - -var _primitives = __w_pdfjs_require__(5); - -var _util = __w_pdfjs_require__(2); - -function pickPlatformItem(dict) { - if (dict.has("UF")) { - return dict.get("UF"); - } else if (dict.has("F")) { - return dict.get("F"); - } else if (dict.has("Unix")) { - return dict.get("Unix"); - } else if (dict.has("Mac")) { - return dict.get("Mac"); - } else if (dict.has("DOS")) { - return dict.get("DOS"); - } - - return null; -} - -class FileSpec { - constructor(root, xref) { - if (!root || !(0, _primitives.isDict)(root)) { - return; - } - - this.xref = xref; - this.root = root; - - if (root.has("FS")) { - this.fs = root.get("FS"); - } - - this.description = root.has("Desc") ? (0, _util.stringToPDFString)(root.get("Desc")) : ""; - - if (root.has("RF")) { - (0, _util.warn)("Related file specifications are not supported"); - } - - this.contentAvailable = true; - - if (!root.has("EF")) { - this.contentAvailable = false; - (0, _util.warn)("Non-embedded file specifications are not supported"); - } - } - - get filename() { - if (!this._filename && this.root) { - const filename = pickPlatformItem(this.root) || "unnamed"; - this._filename = (0, _util.stringToPDFString)(filename).replace(/\\\\/g, "\\").replace(/\\\//g, "/").replace(/\\/g, "/"); - } - - return this._filename; - } - - get content() { - if (!this.contentAvailable) { - return null; - } - - if (!this.contentRef && this.root) { - this.contentRef = pickPlatformItem(this.root.get("EF")); - } - - let content = null; - - if (this.contentRef) { - const fileObj = this.xref.fetchIfRef(this.contentRef); - - if (fileObj && (0, _primitives.isStream)(fileObj)) { - content = fileObj.getBytes(); - } else { - (0, _util.warn)("Embedded file specification points to non-existing/invalid content"); - } - } else { - (0, _util.warn)("Embedded file specification does not have a content"); - } - - return content; - } - - get serializable() { - return { - filename: this.filename, - content: this.content - }; - } - -} - -exports.FileSpec = FileSpec; - -/***/ }), -/* 67 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.MetadataParser = void 0; - -var _xml_parser = __w_pdfjs_require__(68); - -class MetadataParser { - constructor(data) { - data = this._repair(data); - const parser = new _xml_parser.SimpleXMLParser({ - lowerCaseName: true - }); - const xmlDocument = parser.parseFromString(data); - this._metadataMap = new Map(); - this._data = data; - - if (xmlDocument) { - this._parse(xmlDocument); - } - } - - _repair(data) { - return data.replace(/^[^<]+/, "").replace(/>\\376\\377([^<]+)/g, function (all, codes) { - const bytes = codes.replace(/\\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) { - return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1); - }).replace(/&(amp|apos|gt|lt|quot);/g, function (str, name) { - switch (name) { - case "amp": - return "&"; - - case "apos": - return "'"; - - case "gt": - return ">"; - - case "lt": - return "<"; - - case "quot": - return '"'; - } - - throw new Error(`_repair: ${name} isn't defined.`); - }); - const charBuf = []; - - for (let i = 0, ii = bytes.length; i < ii; i += 2) { - const code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1); - - if (code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38) { - charBuf.push(String.fromCharCode(code)); - } else { - charBuf.push("&#x" + (0x10000 + code).toString(16).substring(1) + ";"); - } - } - - return ">" + charBuf.join(""); - }); - } - - _getSequence(entry) { - const name = entry.nodeName; - - if (name !== "rdf:bag" && name !== "rdf:seq" && name !== "rdf:alt") { - return null; - } - - return entry.childNodes.filter(node => node.nodeName === "rdf:li"); - } - - _parseArray(entry) { - if (!entry.hasChildNodes()) { - return; - } - - const [seqNode] = entry.childNodes; - const sequence = this._getSequence(seqNode) || []; - - this._metadataMap.set(entry.nodeName, sequence.map(node => node.textContent.trim())); - } - - _parse(xmlDocument) { - let rdf = xmlDocument.documentElement; - - if (rdf.nodeName !== "rdf:rdf") { - rdf = rdf.firstChild; - - while (rdf && rdf.nodeName !== "rdf:rdf") { - rdf = rdf.nextSibling; - } - } - - if (!rdf || rdf.nodeName !== "rdf:rdf" || !rdf.hasChildNodes()) { - return; - } - - for (const desc of rdf.childNodes) { - if (desc.nodeName !== "rdf:description") { - continue; - } - - for (const entry of desc.childNodes) { - const name = entry.nodeName; - - switch (name) { - case "#text": - continue; - - case "dc:creator": - case "dc:subject": - this._parseArray(entry); - - continue; - } - - this._metadataMap.set(name, entry.textContent.trim()); - } - } - } - - get serializable() { - return { - parsedData: this._metadataMap, - rawData: this._data - }; - } - -} - -exports.MetadataParser = MetadataParser; - -/***/ }), -/* 68 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.XMLParserErrorCode = exports.XMLParserBase = exports.SimpleXMLParser = exports.SimpleDOMNode = void 0; - -var _core_utils = __w_pdfjs_require__(9); - -const XMLParserErrorCode = { - NoError: 0, - EndOfDocument: -1, - UnterminatedCdat: -2, - UnterminatedXmlDeclaration: -3, - UnterminatedDoctypeDeclaration: -4, - UnterminatedComment: -5, - MalformedElement: -6, - OutOfMemory: -7, - UnterminatedAttributeValue: -8, - UnterminatedElement: -9, - ElementNeverBegun: -10 -}; -exports.XMLParserErrorCode = XMLParserErrorCode; - -function isWhitespace(s, index) { - const ch = s[index]; - return ch === " " || ch === "\n" || ch === "\r" || ch === "\t"; -} - -function isWhitespaceString(s) { - for (let i = 0, ii = s.length; i < ii; i++) { - if (!isWhitespace(s, i)) { - return false; - } - } - - return true; -} - -class XMLParserBase { - _resolveEntities(s) { - return s.replace(/&([^;]+);/g, (all, entity) => { - if (entity.substring(0, 2) === "#x") { - return String.fromCodePoint(parseInt(entity.substring(2), 16)); - } else if (entity.substring(0, 1) === "#") { - return String.fromCodePoint(parseInt(entity.substring(1), 10)); - } - - switch (entity) { - case "lt": - return "<"; - - case "gt": - return ">"; - - case "amp": - return "&"; - - case "quot": - return '"'; - - case "apos": - return "'"; - } - - return this.onResolveEntity(entity); - }); - } - - _parseContent(s, start) { - const attributes = []; - let pos = start; - - function skipWs() { - while (pos < s.length && isWhitespace(s, pos)) { - ++pos; - } - } - - while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "/") { - ++pos; - } - - const name = s.substring(start, pos); - skipWs(); - - while (pos < s.length && s[pos] !== ">" && s[pos] !== "/" && s[pos] !== "?") { - skipWs(); - let attrName = "", - attrValue = ""; - - while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== "=") { - attrName += s[pos]; - ++pos; - } - - skipWs(); - - if (s[pos] !== "=") { - return null; - } - - ++pos; - skipWs(); - const attrEndChar = s[pos]; - - if (attrEndChar !== '"' && attrEndChar !== "'") { - return null; - } - - const attrEndIndex = s.indexOf(attrEndChar, ++pos); - - if (attrEndIndex < 0) { - return null; - } - - attrValue = s.substring(pos, attrEndIndex); - attributes.push({ - name: attrName, - value: this._resolveEntities(attrValue) - }); - pos = attrEndIndex + 1; - skipWs(); - } - - return { - name, - attributes, - parsed: pos - start - }; - } - - _parseProcessingInstruction(s, start) { - let pos = start; - - function skipWs() { - while (pos < s.length && isWhitespace(s, pos)) { - ++pos; - } - } - - while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "?" && s[pos] !== "/") { - ++pos; - } - - const name = s.substring(start, pos); - skipWs(); - const attrStart = pos; - - while (pos < s.length && (s[pos] !== "?" || s[pos + 1] !== ">")) { - ++pos; - } - - const value = s.substring(attrStart, pos); - return { - name, - value, - parsed: pos - start - }; - } - - parseXml(s) { - let i = 0; - - while (i < s.length) { - const ch = s[i]; - let j = i; - - if (ch === "<") { - ++j; - const ch2 = s[j]; - let q; - - switch (ch2) { - case "/": - ++j; - q = s.indexOf(">", j); - - if (q < 0) { - this.onError(XMLParserErrorCode.UnterminatedElement); - return; - } - - this.onEndElement(s.substring(j, q)); - j = q + 1; - break; - - case "?": - ++j; - - const pi = this._parseProcessingInstruction(s, j); - - if (s.substring(j + pi.parsed, j + pi.parsed + 2) !== "?>") { - this.onError(XMLParserErrorCode.UnterminatedXmlDeclaration); - return; - } - - this.onPi(pi.name, pi.value); - j += pi.parsed + 2; - break; - - case "!": - if (s.substring(j + 1, j + 3) === "--") { - q = s.indexOf("-->", j + 3); - - if (q < 0) { - this.onError(XMLParserErrorCode.UnterminatedComment); - return; - } - - this.onComment(s.substring(j + 3, q)); - j = q + 3; - } else if (s.substring(j + 1, j + 8) === "[CDATA[") { - q = s.indexOf("]]>", j + 8); - - if (q < 0) { - this.onError(XMLParserErrorCode.UnterminatedCdat); - return; - } - - this.onCdata(s.substring(j + 8, q)); - j = q + 3; - } else if (s.substring(j + 1, j + 8) === "DOCTYPE") { - const q2 = s.indexOf("[", j + 8); - let complexDoctype = false; - q = s.indexOf(">", j + 8); - - if (q < 0) { - this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration); - return; - } - - if (q2 > 0 && q > q2) { - q = s.indexOf("]>", j + 8); - - if (q < 0) { - this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration); - return; - } - - complexDoctype = true; - } - - const doctypeContent = s.substring(j + 8, q + (complexDoctype ? 1 : 0)); - this.onDoctype(doctypeContent); - j = q + (complexDoctype ? 2 : 1); - } else { - this.onError(XMLParserErrorCode.MalformedElement); - return; - } - - break; - - default: - const content = this._parseContent(s, j); - - if (content === null) { - this.onError(XMLParserErrorCode.MalformedElement); - return; - } - - let isClosed = false; - - if (s.substring(j + content.parsed, j + content.parsed + 2) === "/>") { - isClosed = true; - } else if (s.substring(j + content.parsed, j + content.parsed + 1) !== ">") { - this.onError(XMLParserErrorCode.UnterminatedElement); - return; - } - - this.onBeginElement(content.name, content.attributes, isClosed); - j += content.parsed + (isClosed ? 2 : 1); - break; - } - } else { - while (j < s.length && s[j] !== "<") { - j++; - } - - const text = s.substring(i, j); - this.onText(this._resolveEntities(text)); - } - - i = j; - } - } - - onResolveEntity(name) { - return `&${name};`; - } - - onPi(name, value) {} - - onComment(text) {} - - onCdata(text) {} - - onDoctype(doctypeContent) {} - - onText(text) {} - - onBeginElement(name, attributes, isEmpty) {} - - onEndElement(name) {} - - onError(code) {} - -} - -exports.XMLParserBase = XMLParserBase; - -class SimpleDOMNode { - constructor(nodeName, nodeValue) { - this.nodeName = nodeName; - this.nodeValue = nodeValue; - Object.defineProperty(this, "parentNode", { - value: null, - writable: true - }); - } - - get firstChild() { - return this.childNodes && this.childNodes[0]; - } - - get nextSibling() { - const childNodes = this.parentNode.childNodes; - - if (!childNodes) { - return undefined; - } - - const index = childNodes.indexOf(this); - - if (index === -1) { - return undefined; - } - - return childNodes[index + 1]; - } - - get textContent() { - if (!this.childNodes) { - return this.nodeValue || ""; - } - - return this.childNodes.map(function (child) { - return child.textContent; - }).join(""); - } - - hasChildNodes() { - return this.childNodes && this.childNodes.length > 0; - } - - searchNode(paths, pos) { - if (pos >= paths.length) { - return this; - } - - const component = paths[pos]; - const stack = []; - let node = this; - - while (true) { - if (component.name === node.nodeName) { - if (component.pos === 0) { - const res = node.searchNode(paths, pos + 1); - - if (res !== null) { - return res; - } - } else if (stack.length === 0) { - return null; - } else { - const [parent] = stack.pop(); - let siblingPos = 0; - - for (const child of parent.childNodes) { - if (component.name === child.nodeName) { - if (siblingPos === component.pos) { - return child.searchNode(paths, pos + 1); - } - - siblingPos++; - } - } - - return node.searchNode(paths, pos + 1); - } - } - - if (node.childNodes && node.childNodes.length !== 0) { - stack.push([node, 0]); - node = node.childNodes[0]; - } else if (stack.length === 0) { - return null; - } else { - while (stack.length !== 0) { - const [parent, currentPos] = stack.pop(); - const newPos = currentPos + 1; - - if (newPos < parent.childNodes.length) { - stack.push([parent, newPos]); - node = parent.childNodes[newPos]; - break; - } - } - - if (stack.length === 0) { - return null; - } - } - } - } - - dump(buffer) { - if (this.nodeName === "#text") { - buffer.push((0, _core_utils.encodeToXmlString)(this.nodeValue)); - return; - } - - buffer.push(`<${this.nodeName}`); - - if (this.attributes) { - for (const attribute of this.attributes) { - buffer.push(` ${attribute.name}="${(0, _core_utils.encodeToXmlString)(attribute.value)}"`); - } - } - - if (this.hasChildNodes()) { - buffer.push(">"); - - for (const child of this.childNodes) { - child.dump(buffer); - } - - buffer.push(``); - } else if (this.nodeValue) { - buffer.push(`>${(0, _core_utils.encodeToXmlString)(this.nodeValue)}`); - } else { - buffer.push("/>"); - } - } - -} - -exports.SimpleDOMNode = SimpleDOMNode; - -class SimpleXMLParser extends XMLParserBase { - constructor({ - hasAttributes = false, - lowerCaseName = false - }) { - super(); - this._currentFragment = null; - this._stack = null; - this._errorCode = XMLParserErrorCode.NoError; - this._hasAttributes = hasAttributes; - this._lowerCaseName = lowerCaseName; - } - - parseFromString(data) { - this._currentFragment = []; - this._stack = []; - this._errorCode = XMLParserErrorCode.NoError; - this.parseXml(data); - - if (this._errorCode !== XMLParserErrorCode.NoError) { - return undefined; - } - - const [documentElement] = this._currentFragment; - - if (!documentElement) { - return undefined; - } - - return { - documentElement - }; - } - - onText(text) { - if (isWhitespaceString(text)) { - return; - } - - const node = new SimpleDOMNode("#text", text); - - this._currentFragment.push(node); - } - - onCdata(text) { - const node = new SimpleDOMNode("#text", text); - - this._currentFragment.push(node); - } - - onBeginElement(name, attributes, isEmpty) { - if (this._lowerCaseName) { - name = name.toLowerCase(); - } - - const node = new SimpleDOMNode(name); - node.childNodes = []; - - if (this._hasAttributes) { - node.attributes = attributes; - } - - this._currentFragment.push(node); - - if (isEmpty) { - return; - } - - this._stack.push(this._currentFragment); - - this._currentFragment = node.childNodes; - } - - onEndElement(name) { - this._currentFragment = this._stack.pop() || []; - const lastElement = this._currentFragment[this._currentFragment.length - 1]; - - if (!lastElement) { - return; - } - - for (let i = 0, ii = lastElement.childNodes.length; i < ii; i++) { - lastElement.childNodes[i].parentNode = lastElement; - } - } - - onError(code) { - this._errorCode = code; - } - -} - -exports.SimpleXMLParser = SimpleXMLParser; - -/***/ }), -/* 69 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.StructTreeRoot = exports.StructTreePage = void 0; - -var _primitives = __w_pdfjs_require__(5); - -var _util = __w_pdfjs_require__(2); - -var _name_number_tree = __w_pdfjs_require__(65); - -const MAX_DEPTH = 40; -const StructElementType = { - PAGE_CONTENT: "PAGE_CONTENT", - STREAM_CONTENT: "STREAM_CONTENT", - OBJECT: "OBJECT", - ELEMENT: "ELEMENT" -}; - -class StructTreeRoot { - constructor(rootDict) { - this.dict = rootDict; - this.roleMap = new Map(); - } - - init() { - this.readRoleMap(); - } - - readRoleMap() { - const roleMapDict = this.dict.get("RoleMap"); - - if (!(0, _primitives.isDict)(roleMapDict)) { - return; - } - - roleMapDict.forEach((key, value) => { - if (!(0, _primitives.isName)(value)) { - return; - } - - this.roleMap.set(key, value.name); - }); - } - -} - -exports.StructTreeRoot = StructTreeRoot; - -class StructElementNode { - constructor(tree, dict) { - this.tree = tree; - this.dict = dict; - this.kids = []; - this.parseKids(); - } - - get role() { - const nameObj = this.dict.get("S"); - const name = (0, _primitives.isName)(nameObj) ? nameObj.name : ""; - const { - root - } = this.tree; - - if (root.roleMap.has(name)) { - return root.roleMap.get(name); - } - - return name; - } - - parseKids() { - let pageObjId = null; - const objRef = this.dict.getRaw("Pg"); - - if ((0, _primitives.isRef)(objRef)) { - pageObjId = objRef.toString(); - } - - const kids = this.dict.get("K"); - - if (Array.isArray(kids)) { - for (const kid of kids) { - const element = this.parseKid(pageObjId, kid); - - if (element) { - this.kids.push(element); - } - } - } else { - const element = this.parseKid(pageObjId, kids); - - if (element) { - this.kids.push(element); - } - } - } - - parseKid(pageObjId, kid) { - if (Number.isInteger(kid)) { - if (this.tree.pageDict.objId !== pageObjId) { - return null; - } - - return new StructElement({ - type: StructElementType.PAGE_CONTENT, - mcid: kid, - pageObjId - }); - } - - let kidDict = null; - - if ((0, _primitives.isRef)(kid)) { - kidDict = this.dict.xref.fetch(kid); - } else if ((0, _primitives.isDict)(kid)) { - kidDict = kid; - } - - if (!kidDict) { - return null; - } - - const pageRef = kidDict.getRaw("Pg"); - - if ((0, _primitives.isRef)(pageRef)) { - pageObjId = pageRef.toString(); - } - - const type = (0, _primitives.isName)(kidDict.get("Type")) ? kidDict.get("Type").name : null; - - if (type === "MCR") { - if (this.tree.pageDict.objId !== pageObjId) { - return null; - } - - return new StructElement({ - type: StructElementType.STREAM_CONTENT, - refObjId: (0, _primitives.isRef)(kidDict.getRaw("Stm")) ? kidDict.getRaw("Stm").toString() : null, - pageObjId, - mcid: kidDict.get("MCID") - }); - } - - if (type === "OBJR") { - if (this.tree.pageDict.objId !== pageObjId) { - return null; - } - - return new StructElement({ - type: StructElementType.OBJECT, - refObjId: (0, _primitives.isRef)(kidDict.getRaw("Obj")) ? kidDict.getRaw("Obj").toString() : null, - pageObjId - }); - } - - return new StructElement({ - type: StructElementType.ELEMENT, - dict: kidDict - }); - } - -} - -class StructElement { - constructor({ - type, - dict = null, - mcid = null, - pageObjId = null, - refObjId = null - }) { - this.type = type; - this.dict = dict; - this.mcid = mcid; - this.pageObjId = pageObjId; - this.refObjId = refObjId; - this.parentNode = null; - } - -} - -class StructTreePage { - constructor(structTreeRoot, pageDict) { - this.root = structTreeRoot; - this.rootDict = structTreeRoot ? structTreeRoot.dict : null; - this.pageDict = pageDict; - this.nodes = []; - } - - parse() { - if (!this.root || !this.rootDict) { - return; - } - - const parentTree = this.rootDict.get("ParentTree"); - - if (!parentTree) { - return; - } - - const id = this.pageDict.get("StructParents"); - - if (!Number.isInteger(id)) { - return; - } - - const numberTree = new _name_number_tree.NumberTree(parentTree, this.rootDict.xref); - const parentArray = numberTree.get(id); - - if (!Array.isArray(parentArray)) { - return; - } - - const map = new Map(); - - for (const ref of parentArray) { - if ((0, _primitives.isRef)(ref)) { - this.addNode(this.rootDict.xref.fetch(ref), map); - } - } - } - - addNode(dict, map, level = 0) { - if (level > MAX_DEPTH) { - (0, _util.warn)("StructTree MAX_DEPTH reached."); - return null; - } - - if (map.has(dict)) { - return map.get(dict); - } - - const element = new StructElementNode(this, dict); - map.set(dict, element); - const parent = dict.get("P"); - - if (!parent || (0, _primitives.isName)(parent.get("Type"), "StructTreeRoot")) { - if (!this.addTopLevelNode(dict, element)) { - map.delete(dict); - } - - return element; - } - - const parentNode = this.addNode(parent, map, level + 1); - - if (!parentNode) { - return element; - } - - let save = false; - - for (const kid of parentNode.kids) { - if (kid.type === StructElementType.ELEMENT && kid.dict === dict) { - kid.parentNode = element; - save = true; - } - } - - if (!save) { - map.delete(dict); - } - - return element; - } - - addTopLevelNode(dict, element) { - const obj = this.rootDict.get("K"); - - if (!obj) { - return false; - } - - if ((0, _primitives.isDict)(obj)) { - if (obj.objId !== dict.objId) { - return false; - } - - this.nodes[0] = element; - return true; - } - - if (!Array.isArray(obj)) { - return true; - } - - let save = false; - - for (let i = 0; i < obj.length; i++) { - const kidRef = obj[i]; - - if (kidRef && kidRef.toString() === dict.objId) { - this.nodes[i] = element; - save = true; - } - } - - return save; - } - - get serializable() { - function nodeToSerializable(node, parent, level = 0) { - if (level > MAX_DEPTH) { - (0, _util.warn)("StructTree too deep to be fully serialized."); - return; - } - - const obj = Object.create(null); - obj.role = node.role; - obj.children = []; - parent.children.push(obj); - const alt = node.dict.get("Alt"); - - if ((0, _util.isString)(alt)) { - obj.alt = (0, _util.stringToPDFString)(alt); - } - - const lang = node.dict.get("Lang"); - - if ((0, _util.isString)(lang)) { - obj.lang = (0, _util.stringToPDFString)(lang); - } - - for (const kid of node.kids) { - const kidElement = kid.type === StructElementType.ELEMENT ? kid.parentNode : null; - - if (kidElement) { - nodeToSerializable(kidElement, obj, level + 1); - continue; - } else if (kid.type === StructElementType.PAGE_CONTENT || kid.type === StructElementType.STREAM_CONTENT) { - obj.children.push({ - type: "content", - id: `page${kid.pageObjId}_mcid${kid.mcid}` - }); - } else if (kid.type === StructElementType.OBJECT) { - obj.children.push({ - type: "object", - id: kid.refObjId - }); - } - } - } - - const root = Object.create(null); - root.children = []; - root.role = "Root"; - - for (const child of this.nodes) { - if (!child) { - continue; - } - - nodeToSerializable(child, root); - } - - return root; - } - -} - -exports.StructTreePage = StructTreePage; - -/***/ }), -/* 70 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.ObjectLoader = void 0; - -var _primitives = __w_pdfjs_require__(5); - -var _core_utils = __w_pdfjs_require__(9); - -var _util = __w_pdfjs_require__(2); - -function mayHaveChildren(value) { - return value instanceof _primitives.Ref || value instanceof _primitives.Dict || Array.isArray(value) || (0, _primitives.isStream)(value); -} - -function addChildren(node, nodesToVisit) { - if (node instanceof _primitives.Dict) { - node = node.getRawValues(); - } else if ((0, _primitives.isStream)(node)) { - node = node.dict.getRawValues(); - } else if (!Array.isArray(node)) { - return; - } - - for (const rawValue of node) { - if (mayHaveChildren(rawValue)) { - nodesToVisit.push(rawValue); - } - } -} - -class ObjectLoader { - constructor(dict, keys, xref) { - this.dict = dict; - this.keys = keys; - this.xref = xref; - this.refSet = null; - } - - async load() { - if (this.xref.stream.isDataLoaded) { - return undefined; - } - - const { - keys, - dict - } = this; - this.refSet = new _primitives.RefSet(); - const nodesToVisit = []; - - for (let i = 0, ii = keys.length; i < ii; i++) { - const rawValue = dict.getRaw(keys[i]); - - if (rawValue !== undefined) { - nodesToVisit.push(rawValue); - } - } - - return this._walk(nodesToVisit); - } - - async _walk(nodesToVisit) { - const nodesToRevisit = []; - const pendingRequests = []; - - while (nodesToVisit.length) { - let currentNode = nodesToVisit.pop(); - - if (currentNode instanceof _primitives.Ref) { - if (this.refSet.has(currentNode)) { - continue; - } - - try { - this.refSet.put(currentNode); - currentNode = this.xref.fetch(currentNode); - } catch (ex) { - if (!(ex instanceof _core_utils.MissingDataException)) { - (0, _util.warn)(`ObjectLoader._walk - requesting all data: "${ex}".`); - this.refSet = null; - const { - manager - } = this.xref.stream; - return manager.requestAllChunks(); - } - - nodesToRevisit.push(currentNode); - pendingRequests.push({ - begin: ex.begin, - end: ex.end - }); - } - } - - if ((0, _primitives.isStream)(currentNode)) { - const baseStreams = currentNode.getBaseStreams(); - - if (baseStreams) { - let foundMissingData = false; - - for (const stream of baseStreams) { - if (stream.isDataLoaded) { - continue; - } - - foundMissingData = true; - pendingRequests.push({ - begin: stream.start, - end: stream.end - }); - } - - if (foundMissingData) { - nodesToRevisit.push(currentNode); - } - } - } - - addChildren(currentNode, nodesToVisit); - } - - if (pendingRequests.length) { - await this.xref.stream.manager.requestRanges(pendingRequests); - - for (const node of nodesToRevisit) { - if (node instanceof _primitives.Ref) { - this.refSet.remove(node); - } - } - - return this._walk(nodesToRevisit); - } - - this.refSet = null; - return undefined; - } - -} - -exports.ObjectLoader = ObjectLoader; - -/***/ }), -/* 71 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.incrementalUpdate = incrementalUpdate; -exports.writeDict = writeDict; - -var _util = __w_pdfjs_require__(2); - -var _primitives = __w_pdfjs_require__(5); - -var _core_utils = __w_pdfjs_require__(9); - -var _xml_parser = __w_pdfjs_require__(68); - -var _crypto = __w_pdfjs_require__(72); - -function writeDict(dict, buffer, transform) { - buffer.push("<<"); - - for (const key of dict.getKeys()) { - buffer.push(` /${(0, _core_utils.escapePDFName)(key)} `); - writeValue(dict.getRaw(key), buffer, transform); - } - - buffer.push(">>"); -} - -function writeStream(stream, buffer, transform) { - writeDict(stream.dict, buffer, transform); - buffer.push(" stream\n"); - let string = stream.getString(); - - if (transform !== null) { - string = transform.encryptString(string); - } - - buffer.push(string, "\nendstream\n"); -} - -function writeArray(array, buffer, transform) { - buffer.push("["); - let first = true; - - for (const val of array) { - if (!first) { - buffer.push(" "); - } else { - first = false; - } - - writeValue(val, buffer, transform); - } - - buffer.push("]"); -} - -function numberToString(value) { - if (Number.isInteger(value)) { - return value.toString(); - } - - const roundedValue = Math.round(value * 100); - - if (roundedValue % 100 === 0) { - return (roundedValue / 100).toString(); - } - - if (roundedValue % 10 === 0) { - return value.toFixed(1); - } - - return value.toFixed(2); -} - -function writeValue(value, buffer, transform) { - if ((0, _primitives.isName)(value)) { - buffer.push(`/${(0, _core_utils.escapePDFName)(value.name)}`); - } else if ((0, _primitives.isRef)(value)) { - buffer.push(`${value.num} ${value.gen} R`); - } else if (Array.isArray(value)) { - writeArray(value, buffer, transform); - } else if (typeof value === "string") { - if (transform !== null) { - value = transform.encryptString(value); - } - - buffer.push(`(${(0, _util.escapeString)(value)})`); - } else if (typeof value === "number") { - buffer.push(numberToString(value)); - } else if (typeof value === "boolean") { - buffer.push(value.toString()); - } else if ((0, _primitives.isDict)(value)) { - writeDict(value, buffer, transform); - } else if ((0, _primitives.isStream)(value)) { - writeStream(value, buffer, transform); - } else if (value === null) { - buffer.push("null"); - } else { - (0, _util.warn)(`Unhandled value in writer: ${typeof value}, please file a bug.`); - } -} - -function writeInt(number, size, offset, buffer) { - for (let i = size + offset - 1; i > offset - 1; i--) { - buffer[i] = number & 0xff; - number >>= 8; - } - - return offset + size; -} - -function writeString(string, offset, buffer) { - for (let i = 0, len = string.length; i < len; i++) { - buffer[offset + i] = string.charCodeAt(i) & 0xff; - } -} - -function computeMD5(filesize, xrefInfo) { - const time = Math.floor(Date.now() / 1000); - const filename = xrefInfo.filename || ""; - const md5Buffer = [time.toString(), filename, filesize.toString()]; - let md5BufferLen = md5Buffer.reduce((a, str) => a + str.length, 0); - - for (const value of Object.values(xrefInfo.info)) { - md5Buffer.push(value); - md5BufferLen += value.length; - } - - const array = new Uint8Array(md5BufferLen); - let offset = 0; - - for (const str of md5Buffer) { - writeString(str, offset, array); - offset += str.length; - } - - return (0, _util.bytesToString)((0, _crypto.calculateMD5)(array)); -} - -function writeXFADataForAcroform(str, newRefs) { - const xml = new _xml_parser.SimpleXMLParser({ - hasAttributes: true - }).parseFromString(str); - - for (const { - xfa - } of newRefs) { - if (!xfa) { - continue; - } - - const { - path, - value - } = xfa; - - if (!path) { - continue; - } - - const node = xml.documentElement.searchNode((0, _core_utils.parseXFAPath)(path), 0); - - if (node) { - node.childNodes = [new _xml_parser.SimpleDOMNode("#text", value)]; - } else { - (0, _util.warn)(`Node not found for path: ${path}`); - } - } - - const buffer = []; - xml.documentElement.dump(buffer); - return buffer.join(""); -} - -function updateXFA({ - xfaData, - xfaDatasetsRef, - hasXfaDatasetsEntry, - acroFormRef, - acroForm, - newRefs, - xref, - xrefInfo -}) { - if (xref === null) { - return; - } - - if (!hasXfaDatasetsEntry) { - if (!acroFormRef) { - (0, _util.warn)("XFA - Cannot save it"); - return; - } - - const oldXfa = acroForm.get("XFA"); - const newXfa = oldXfa.slice(); - newXfa.splice(2, 0, "datasets"); - newXfa.splice(3, 0, xfaDatasetsRef); - acroForm.set("XFA", newXfa); - const encrypt = xref.encrypt; - let transform = null; - - if (encrypt) { - transform = encrypt.createCipherTransform(acroFormRef.num, acroFormRef.gen); - } - - const buffer = [`${acroFormRef.num} ${acroFormRef.gen} obj\n`]; - writeDict(acroForm, buffer, transform); - buffer.push("\n"); - acroForm.set("XFA", oldXfa); - newRefs.push({ - ref: acroFormRef, - data: buffer.join("") - }); - } - - if (xfaData === null) { - const datasets = xref.fetchIfRef(xfaDatasetsRef); - xfaData = writeXFADataForAcroform(datasets.getString(), newRefs); - } - - const encrypt = xref.encrypt; - - if (encrypt) { - const transform = encrypt.createCipherTransform(xfaDatasetsRef.num, xfaDatasetsRef.gen); - xfaData = transform.encryptString(xfaData); - } - - const data = `${xfaDatasetsRef.num} ${xfaDatasetsRef.gen} obj\n` + `<< /Type /EmbeddedFile /Length ${xfaData.length}>>\nstream\n` + xfaData + "\nendstream\nendobj\n"; - newRefs.push({ - ref: xfaDatasetsRef, - data - }); -} - -function incrementalUpdate({ - originalData, - xrefInfo, - newRefs, - xref = null, - hasXfa = false, - xfaDatasetsRef = null, - hasXfaDatasetsEntry = false, - acroFormRef = null, - acroForm = null, - xfaData = null -}) { - if (hasXfa) { - updateXFA({ - xfaData, - xfaDatasetsRef, - hasXfaDatasetsEntry, - acroFormRef, - acroForm, - newRefs, - xref, - xrefInfo - }); - } - - const newXref = new _primitives.Dict(null); - const refForXrefTable = xrefInfo.newRef; - let buffer, baseOffset; - const lastByte = originalData[originalData.length - 1]; - - if (lastByte === 0x0a || lastByte === 0x0d) { - buffer = []; - baseOffset = originalData.length; - } else { - buffer = ["\n"]; - baseOffset = originalData.length + 1; - } - - newXref.set("Size", refForXrefTable.num + 1); - newXref.set("Prev", xrefInfo.startXRef); - newXref.set("Type", _primitives.Name.get("XRef")); - - if (xrefInfo.rootRef !== null) { - newXref.set("Root", xrefInfo.rootRef); - } - - if (xrefInfo.infoRef !== null) { - newXref.set("Info", xrefInfo.infoRef); - } - - if (xrefInfo.encryptRef !== null) { - newXref.set("Encrypt", xrefInfo.encryptRef); - } - - newRefs.push({ - ref: refForXrefTable, - data: "" - }); - newRefs = newRefs.sort((a, b) => { - return a.ref.num - b.ref.num; - }); - const xrefTableData = [[0, 1, 0xffff]]; - const indexes = [0, 1]; - let maxOffset = 0; - - for (const { - ref, - data - } of newRefs) { - maxOffset = Math.max(maxOffset, baseOffset); - xrefTableData.push([1, baseOffset, Math.min(ref.gen, 0xffff)]); - baseOffset += data.length; - indexes.push(ref.num, 1); - buffer.push(data); - } - - newXref.set("Index", indexes); - - if (Array.isArray(xrefInfo.fileIds) && xrefInfo.fileIds.length > 0) { - const md5 = computeMD5(baseOffset, xrefInfo); - newXref.set("ID", [xrefInfo.fileIds[0], md5]); - } - - const offsetSize = Math.ceil(Math.log2(maxOffset) / 8); - const sizes = [1, offsetSize, 2]; - const structSize = sizes[0] + sizes[1] + sizes[2]; - const tableLength = structSize * xrefTableData.length; - newXref.set("W", sizes); - newXref.set("Length", tableLength); - buffer.push(`${refForXrefTable.num} ${refForXrefTable.gen} obj\n`); - writeDict(newXref, buffer, null); - buffer.push(" stream\n"); - const bufferLen = buffer.reduce((a, str) => a + str.length, 0); - const footer = `\nendstream\nendobj\nstartxref\n${baseOffset}\n%%EOF\n`; - const array = new Uint8Array(originalData.length + bufferLen + tableLength + footer.length); - array.set(originalData); - let offset = originalData.length; - - for (const str of buffer) { - writeString(str, offset, array); - offset += str.length; - } - - for (const [type, objOffset, gen] of xrefTableData) { - offset = writeInt(type, sizes[0], offset, array); - offset = writeInt(objOffset, sizes[1], offset, array); - offset = writeInt(gen, sizes[2], offset, array); - } - - writeString(footer, offset, array); - return array; -} - -/***/ }), -/* 72 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.calculateSHA256 = exports.calculateMD5 = exports.PDF20 = exports.PDF17 = exports.CipherTransformFactory = exports.ARCFourCipher = exports.AES256Cipher = exports.AES128Cipher = void 0; -exports.calculateSHA384 = calculateSHA384; -exports.calculateSHA512 = void 0; - -var _util = __w_pdfjs_require__(2); - -var _primitives = __w_pdfjs_require__(5); - -var _decrypt_stream = __w_pdfjs_require__(73); - -class ARCFourCipher { - constructor(key) { - this.a = 0; - this.b = 0; - const s = new Uint8Array(256); - const keyLength = key.length; - - for (let i = 0; i < 256; ++i) { - s[i] = i; - } - - for (let i = 0, j = 0; i < 256; ++i) { - const tmp = s[i]; - j = j + tmp + key[i % keyLength] & 0xff; - s[i] = s[j]; - s[j] = tmp; - } - - this.s = s; - } - - encryptBlock(data) { - let a = this.a, - b = this.b; - const s = this.s; - const n = data.length; - const output = new Uint8Array(n); - - for (let i = 0; i < n; ++i) { - a = a + 1 & 0xff; - const tmp = s[a]; - b = b + tmp & 0xff; - const tmp2 = s[b]; - s[a] = tmp2; - s[b] = tmp; - output[i] = data[i] ^ s[tmp + tmp2 & 0xff]; - } - - this.a = a; - this.b = b; - return output; - } - - decryptBlock(data) { - return this.encryptBlock(data); - } - - encrypt(data) { - return this.encryptBlock(data); - } - -} - -exports.ARCFourCipher = ARCFourCipher; - -const calculateMD5 = function calculateMD5Closure() { - const r = new Uint8Array([7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]); - const k = new Int32Array([-680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426, -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162, 1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632, 643717713, -373897302, -701558691, 38016083, -660478335, -405537848, 568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784, 1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556, -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222, -722521979, 76029189, -640364487, -421815835, 530742520, -995338651, -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606, -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649, -145523070, -1120210379, 718787259, -343485551]); - - function hash(data, offset, length) { - let h0 = 1732584193, - h1 = -271733879, - h2 = -1732584194, - h3 = 271733878; - const paddedLength = length + 72 & ~63; - const padded = new Uint8Array(paddedLength); - let i, j; - - for (i = 0; i < length; ++i) { - padded[i] = data[offset++]; - } - - padded[i++] = 0x80; - const n = paddedLength - 8; - - while (i < n) { - padded[i++] = 0; - } - - padded[i++] = length << 3 & 0xff; - padded[i++] = length >> 5 & 0xff; - padded[i++] = length >> 13 & 0xff; - padded[i++] = length >> 21 & 0xff; - padded[i++] = length >>> 29 & 0xff; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - const w = new Int32Array(16); - - for (i = 0; i < paddedLength;) { - for (j = 0; j < 16; ++j, i += 4) { - w[j] = padded[i] | padded[i + 1] << 8 | padded[i + 2] << 16 | padded[i + 3] << 24; - } - - let a = h0, - b = h1, - c = h2, - d = h3, - f, - g; - - for (j = 0; j < 64; ++j) { - if (j < 16) { - f = b & c | ~b & d; - g = j; - } else if (j < 32) { - f = d & b | ~d & c; - g = 5 * j + 1 & 15; - } else if (j < 48) { - f = b ^ c ^ d; - g = 3 * j + 5 & 15; - } else { - f = c ^ (b | ~d); - g = 7 * j & 15; - } - - const tmp = d, - rotateArg = a + f + k[j] + w[g] | 0, - rotate = r[j]; - d = c; - c = b; - b = b + (rotateArg << rotate | rotateArg >>> 32 - rotate) | 0; - a = tmp; - } - - h0 = h0 + a | 0; - h1 = h1 + b | 0; - h2 = h2 + c | 0; - h3 = h3 + d | 0; - } - - return new Uint8Array([h0 & 0xFF, h0 >> 8 & 0xFF, h0 >> 16 & 0xFF, h0 >>> 24 & 0xFF, h1 & 0xFF, h1 >> 8 & 0xFF, h1 >> 16 & 0xFF, h1 >>> 24 & 0xFF, h2 & 0xFF, h2 >> 8 & 0xFF, h2 >> 16 & 0xFF, h2 >>> 24 & 0xFF, h3 & 0xFF, h3 >> 8 & 0xFF, h3 >> 16 & 0xFF, h3 >>> 24 & 0xFF]); - } - - return hash; -}(); - -exports.calculateMD5 = calculateMD5; - -class Word64 { - constructor(highInteger, lowInteger) { - this.high = highInteger | 0; - this.low = lowInteger | 0; - } - - and(word) { - this.high &= word.high; - this.low &= word.low; - } - - xor(word) { - this.high ^= word.high; - this.low ^= word.low; - } - - or(word) { - this.high |= word.high; - this.low |= word.low; - } - - shiftRight(places) { - if (places >= 32) { - this.low = this.high >>> places - 32 | 0; - this.high = 0; - } else { - this.low = this.low >>> places | this.high << 32 - places; - this.high = this.high >>> places | 0; - } - } - - shiftLeft(places) { - if (places >= 32) { - this.high = this.low << places - 32; - this.low = 0; - } else { - this.high = this.high << places | this.low >>> 32 - places; - this.low <<= places; - } - } - - rotateRight(places) { - let low, high; - - if (places & 32) { - high = this.low; - low = this.high; - } else { - low = this.low; - high = this.high; - } - - places &= 31; - this.low = low >>> places | high << 32 - places; - this.high = high >>> places | low << 32 - places; - } - - not() { - this.high = ~this.high; - this.low = ~this.low; - } - - add(word) { - const lowAdd = (this.low >>> 0) + (word.low >>> 0); - let highAdd = (this.high >>> 0) + (word.high >>> 0); - - if (lowAdd > 0xffffffff) { - highAdd += 1; - } - - this.low = lowAdd | 0; - this.high = highAdd | 0; - } - - copyTo(bytes, offset) { - bytes[offset] = this.high >>> 24 & 0xff; - bytes[offset + 1] = this.high >> 16 & 0xff; - bytes[offset + 2] = this.high >> 8 & 0xff; - bytes[offset + 3] = this.high & 0xff; - bytes[offset + 4] = this.low >>> 24 & 0xff; - bytes[offset + 5] = this.low >> 16 & 0xff; - bytes[offset + 6] = this.low >> 8 & 0xff; - bytes[offset + 7] = this.low & 0xff; - } - - assign(word) { - this.high = word.high; - this.low = word.low; - } - -} - -const calculateSHA256 = function calculateSHA256Closure() { - function rotr(x, n) { - return x >>> n | x << 32 - n; - } - - function ch(x, y, z) { - return x & y ^ ~x & z; - } - - function maj(x, y, z) { - return x & y ^ x & z ^ y & z; - } - - function sigma(x) { - return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22); - } - - function sigmaPrime(x) { - return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25); - } - - function littleSigma(x) { - return rotr(x, 7) ^ rotr(x, 18) ^ x >>> 3; - } - - function littleSigmaPrime(x) { - return rotr(x, 17) ^ rotr(x, 19) ^ x >>> 10; - } - - const k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2]; - - function hash(data, offset, length) { - let h0 = 0x6a09e667, - h1 = 0xbb67ae85, - h2 = 0x3c6ef372, - h3 = 0xa54ff53a, - h4 = 0x510e527f, - h5 = 0x9b05688c, - h6 = 0x1f83d9ab, - h7 = 0x5be0cd19; - const paddedLength = Math.ceil((length + 9) / 64) * 64; - const padded = new Uint8Array(paddedLength); - let i, j; - - for (i = 0; i < length; ++i) { - padded[i] = data[offset++]; - } - - padded[i++] = 0x80; - const n = paddedLength - 8; - - while (i < n) { - padded[i++] = 0; - } - - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = length >>> 29 & 0xff; - padded[i++] = length >> 21 & 0xff; - padded[i++] = length >> 13 & 0xff; - padded[i++] = length >> 5 & 0xff; - padded[i++] = length << 3 & 0xff; - const w = new Uint32Array(64); - - for (i = 0; i < paddedLength;) { - for (j = 0; j < 16; ++j) { - w[j] = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3]; - i += 4; - } - - for (j = 16; j < 64; ++j) { - w[j] = littleSigmaPrime(w[j - 2]) + w[j - 7] + littleSigma(w[j - 15]) + w[j - 16] | 0; - } - - let a = h0, - b = h1, - c = h2, - d = h3, - e = h4, - f = h5, - g = h6, - h = h7, - t1, - t2; - - for (j = 0; j < 64; ++j) { - t1 = h + sigmaPrime(e) + ch(e, f, g) + k[j] + w[j]; - t2 = sigma(a) + maj(a, b, c); - h = g; - g = f; - f = e; - e = d + t1 | 0; - d = c; - c = b; - b = a; - a = t1 + t2 | 0; - } - - h0 = h0 + a | 0; - h1 = h1 + b | 0; - h2 = h2 + c | 0; - h3 = h3 + d | 0; - h4 = h4 + e | 0; - h5 = h5 + f | 0; - h6 = h6 + g | 0; - h7 = h7 + h | 0; - } - - return new Uint8Array([h0 >> 24 & 0xFF, h0 >> 16 & 0xFF, h0 >> 8 & 0xFF, h0 & 0xFF, h1 >> 24 & 0xFF, h1 >> 16 & 0xFF, h1 >> 8 & 0xFF, h1 & 0xFF, h2 >> 24 & 0xFF, h2 >> 16 & 0xFF, h2 >> 8 & 0xFF, h2 & 0xFF, h3 >> 24 & 0xFF, h3 >> 16 & 0xFF, h3 >> 8 & 0xFF, h3 & 0xFF, h4 >> 24 & 0xFF, h4 >> 16 & 0xFF, h4 >> 8 & 0xFF, h4 & 0xFF, h5 >> 24 & 0xFF, h5 >> 16 & 0xFF, h5 >> 8 & 0xFF, h5 & 0xFF, h6 >> 24 & 0xFF, h6 >> 16 & 0xFF, h6 >> 8 & 0xFF, h6 & 0xFF, h7 >> 24 & 0xFF, h7 >> 16 & 0xFF, h7 >> 8 & 0xFF, h7 & 0xFF]); - } - - return hash; -}(); - -exports.calculateSHA256 = calculateSHA256; - -const calculateSHA512 = function calculateSHA512Closure() { - function ch(result, x, y, z, tmp) { - result.assign(x); - result.and(y); - tmp.assign(x); - tmp.not(); - tmp.and(z); - result.xor(tmp); - } - - function maj(result, x, y, z, tmp) { - result.assign(x); - result.and(y); - tmp.assign(x); - tmp.and(z); - result.xor(tmp); - tmp.assign(y); - tmp.and(z); - result.xor(tmp); - } - - function sigma(result, x, tmp) { - result.assign(x); - result.rotateRight(28); - tmp.assign(x); - tmp.rotateRight(34); - result.xor(tmp); - tmp.assign(x); - tmp.rotateRight(39); - result.xor(tmp); - } - - function sigmaPrime(result, x, tmp) { - result.assign(x); - result.rotateRight(14); - tmp.assign(x); - tmp.rotateRight(18); - result.xor(tmp); - tmp.assign(x); - tmp.rotateRight(41); - result.xor(tmp); - } - - function littleSigma(result, x, tmp) { - result.assign(x); - result.rotateRight(1); - tmp.assign(x); - tmp.rotateRight(8); - result.xor(tmp); - tmp.assign(x); - tmp.shiftRight(7); - result.xor(tmp); - } - - function littleSigmaPrime(result, x, tmp) { - result.assign(x); - result.rotateRight(19); - tmp.assign(x); - tmp.rotateRight(61); - result.xor(tmp); - tmp.assign(x); - tmp.shiftRight(6); - result.xor(tmp); - } - - const k = [new Word64(0x428a2f98, 0xd728ae22), new Word64(0x71374491, 0x23ef65cd), new Word64(0xb5c0fbcf, 0xec4d3b2f), new Word64(0xe9b5dba5, 0x8189dbbc), new Word64(0x3956c25b, 0xf348b538), new Word64(0x59f111f1, 0xb605d019), new Word64(0x923f82a4, 0xaf194f9b), new Word64(0xab1c5ed5, 0xda6d8118), new Word64(0xd807aa98, 0xa3030242), new Word64(0x12835b01, 0x45706fbe), new Word64(0x243185be, 0x4ee4b28c), new Word64(0x550c7dc3, 0xd5ffb4e2), new Word64(0x72be5d74, 0xf27b896f), new Word64(0x80deb1fe, 0x3b1696b1), new Word64(0x9bdc06a7, 0x25c71235), new Word64(0xc19bf174, 0xcf692694), new Word64(0xe49b69c1, 0x9ef14ad2), new Word64(0xefbe4786, 0x384f25e3), new Word64(0x0fc19dc6, 0x8b8cd5b5), new Word64(0x240ca1cc, 0x77ac9c65), new Word64(0x2de92c6f, 0x592b0275), new Word64(0x4a7484aa, 0x6ea6e483), new Word64(0x5cb0a9dc, 0xbd41fbd4), new Word64(0x76f988da, 0x831153b5), new Word64(0x983e5152, 0xee66dfab), new Word64(0xa831c66d, 0x2db43210), new Word64(0xb00327c8, 0x98fb213f), new Word64(0xbf597fc7, 0xbeef0ee4), new Word64(0xc6e00bf3, 0x3da88fc2), new Word64(0xd5a79147, 0x930aa725), new Word64(0x06ca6351, 0xe003826f), new Word64(0x14292967, 0x0a0e6e70), new Word64(0x27b70a85, 0x46d22ffc), new Word64(0x2e1b2138, 0x5c26c926), new Word64(0x4d2c6dfc, 0x5ac42aed), new Word64(0x53380d13, 0x9d95b3df), new Word64(0x650a7354, 0x8baf63de), new Word64(0x766a0abb, 0x3c77b2a8), new Word64(0x81c2c92e, 0x47edaee6), new Word64(0x92722c85, 0x1482353b), new Word64(0xa2bfe8a1, 0x4cf10364), new Word64(0xa81a664b, 0xbc423001), new Word64(0xc24b8b70, 0xd0f89791), new Word64(0xc76c51a3, 0x0654be30), new Word64(0xd192e819, 0xd6ef5218), new Word64(0xd6990624, 0x5565a910), new Word64(0xf40e3585, 0x5771202a), new Word64(0x106aa070, 0x32bbd1b8), new Word64(0x19a4c116, 0xb8d2d0c8), new Word64(0x1e376c08, 0x5141ab53), new Word64(0x2748774c, 0xdf8eeb99), new Word64(0x34b0bcb5, 0xe19b48a8), new Word64(0x391c0cb3, 0xc5c95a63), new Word64(0x4ed8aa4a, 0xe3418acb), new Word64(0x5b9cca4f, 0x7763e373), new Word64(0x682e6ff3, 0xd6b2b8a3), new Word64(0x748f82ee, 0x5defb2fc), new Word64(0x78a5636f, 0x43172f60), new Word64(0x84c87814, 0xa1f0ab72), new Word64(0x8cc70208, 0x1a6439ec), new Word64(0x90befffa, 0x23631e28), new Word64(0xa4506ceb, 0xde82bde9), new Word64(0xbef9a3f7, 0xb2c67915), new Word64(0xc67178f2, 0xe372532b), new Word64(0xca273ece, 0xea26619c), new Word64(0xd186b8c7, 0x21c0c207), new Word64(0xeada7dd6, 0xcde0eb1e), new Word64(0xf57d4f7f, 0xee6ed178), new Word64(0x06f067aa, 0x72176fba), new Word64(0x0a637dc5, 0xa2c898a6), new Word64(0x113f9804, 0xbef90dae), new Word64(0x1b710b35, 0x131c471b), new Word64(0x28db77f5, 0x23047d84), new Word64(0x32caab7b, 0x40c72493), new Word64(0x3c9ebe0a, 0x15c9bebc), new Word64(0x431d67c4, 0x9c100d4c), new Word64(0x4cc5d4be, 0xcb3e42b6), new Word64(0x597f299c, 0xfc657e2a), new Word64(0x5fcb6fab, 0x3ad6faec), new Word64(0x6c44198c, 0x4a475817)]; - - function hash(data, offset, length, mode384 = false) { - let h0, h1, h2, h3, h4, h5, h6, h7; - - if (!mode384) { - h0 = new Word64(0x6a09e667, 0xf3bcc908); - h1 = new Word64(0xbb67ae85, 0x84caa73b); - h2 = new Word64(0x3c6ef372, 0xfe94f82b); - h3 = new Word64(0xa54ff53a, 0x5f1d36f1); - h4 = new Word64(0x510e527f, 0xade682d1); - h5 = new Word64(0x9b05688c, 0x2b3e6c1f); - h6 = new Word64(0x1f83d9ab, 0xfb41bd6b); - h7 = new Word64(0x5be0cd19, 0x137e2179); - } else { - h0 = new Word64(0xcbbb9d5d, 0xc1059ed8); - h1 = new Word64(0x629a292a, 0x367cd507); - h2 = new Word64(0x9159015a, 0x3070dd17); - h3 = new Word64(0x152fecd8, 0xf70e5939); - h4 = new Word64(0x67332667, 0xffc00b31); - h5 = new Word64(0x8eb44a87, 0x68581511); - h6 = new Word64(0xdb0c2e0d, 0x64f98fa7); - h7 = new Word64(0x47b5481d, 0xbefa4fa4); - } - - const paddedLength = Math.ceil((length + 17) / 128) * 128; - const padded = new Uint8Array(paddedLength); - let i, j; - - for (i = 0; i < length; ++i) { - padded[i] = data[offset++]; - } - - padded[i++] = 0x80; - const n = paddedLength - 16; - - while (i < n) { - padded[i++] = 0; - } - - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = length >>> 29 & 0xff; - padded[i++] = length >> 21 & 0xff; - padded[i++] = length >> 13 & 0xff; - padded[i++] = length >> 5 & 0xff; - padded[i++] = length << 3 & 0xff; - const w = new Array(80); - - for (i = 0; i < 80; i++) { - w[i] = new Word64(0, 0); - } - - let a = new Word64(0, 0), - b = new Word64(0, 0), - c = new Word64(0, 0); - let d = new Word64(0, 0), - e = new Word64(0, 0), - f = new Word64(0, 0); - let g = new Word64(0, 0), - h = new Word64(0, 0); - const t1 = new Word64(0, 0), - t2 = new Word64(0, 0); - const tmp1 = new Word64(0, 0), - tmp2 = new Word64(0, 0); - let tmp3; - - for (i = 0; i < paddedLength;) { - for (j = 0; j < 16; ++j) { - w[j].high = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3]; - w[j].low = padded[i + 4] << 24 | padded[i + 5] << 16 | padded[i + 6] << 8 | padded[i + 7]; - i += 8; - } - - for (j = 16; j < 80; ++j) { - tmp3 = w[j]; - littleSigmaPrime(tmp3, w[j - 2], tmp2); - tmp3.add(w[j - 7]); - littleSigma(tmp1, w[j - 15], tmp2); - tmp3.add(tmp1); - tmp3.add(w[j - 16]); - } - - a.assign(h0); - b.assign(h1); - c.assign(h2); - d.assign(h3); - e.assign(h4); - f.assign(h5); - g.assign(h6); - h.assign(h7); - - for (j = 0; j < 80; ++j) { - t1.assign(h); - sigmaPrime(tmp1, e, tmp2); - t1.add(tmp1); - ch(tmp1, e, f, g, tmp2); - t1.add(tmp1); - t1.add(k[j]); - t1.add(w[j]); - sigma(t2, a, tmp2); - maj(tmp1, a, b, c, tmp2); - t2.add(tmp1); - tmp3 = h; - h = g; - g = f; - f = e; - d.add(t1); - e = d; - d = c; - c = b; - b = a; - tmp3.assign(t1); - tmp3.add(t2); - a = tmp3; - } - - h0.add(a); - h1.add(b); - h2.add(c); - h3.add(d); - h4.add(e); - h5.add(f); - h6.add(g); - h7.add(h); - } - - let result; - - if (!mode384) { - result = new Uint8Array(64); - h0.copyTo(result, 0); - h1.copyTo(result, 8); - h2.copyTo(result, 16); - h3.copyTo(result, 24); - h4.copyTo(result, 32); - h5.copyTo(result, 40); - h6.copyTo(result, 48); - h7.copyTo(result, 56); - } else { - result = new Uint8Array(48); - h0.copyTo(result, 0); - h1.copyTo(result, 8); - h2.copyTo(result, 16); - h3.copyTo(result, 24); - h4.copyTo(result, 32); - h5.copyTo(result, 40); - } - - return result; - } - - return hash; -}(); - -exports.calculateSHA512 = calculateSHA512; - -function calculateSHA384(data, offset, length) { - return calculateSHA512(data, offset, length, true); -} - -class NullCipher { - decryptBlock(data) { - return data; - } - - encrypt(data) { - return data; - } - -} - -class AESBaseCipher { - constructor() { - if (this.constructor === AESBaseCipher) { - (0, _util.unreachable)("Cannot initialize AESBaseCipher."); - } - - this._s = new Uint8Array([0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]); - this._inv_s = new Uint8Array([0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]); - this._mix = new Uint32Array([0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]); - this._mixCol = new Uint8Array(256); - - for (let i = 0; i < 256; i++) { - if (i < 128) { - this._mixCol[i] = i << 1; - } else { - this._mixCol[i] = i << 1 ^ 0x1b; - } - } - - this.buffer = new Uint8Array(16); - this.bufferPosition = 0; - } - - _expandKey(cipherKey) { - (0, _util.unreachable)("Cannot call `_expandKey` on the base class"); - } - - _decrypt(input, key) { - let t, u, v; - const state = new Uint8Array(16); - state.set(input); - - for (let j = 0, k = this._keySize; j < 16; ++j, ++k) { - state[j] ^= key[k]; - } - - for (let i = this._cyclesOfRepetition - 1; i >= 1; --i) { - t = state[13]; - state[13] = state[9]; - state[9] = state[5]; - state[5] = state[1]; - state[1] = t; - t = state[14]; - u = state[10]; - state[14] = state[6]; - state[10] = state[2]; - state[6] = t; - state[2] = u; - t = state[15]; - u = state[11]; - v = state[7]; - state[15] = state[3]; - state[11] = t; - state[7] = u; - state[3] = v; - - for (let j = 0; j < 16; ++j) { - state[j] = this._inv_s[state[j]]; - } - - for (let j = 0, k = i * 16; j < 16; ++j, ++k) { - state[j] ^= key[k]; - } - - for (let j = 0; j < 16; j += 4) { - const s0 = this._mix[state[j]]; - const s1 = this._mix[state[j + 1]]; - const s2 = this._mix[state[j + 2]]; - const s3 = this._mix[state[j + 3]]; - t = s0 ^ s1 >>> 8 ^ s1 << 24 ^ s2 >>> 16 ^ s2 << 16 ^ s3 >>> 24 ^ s3 << 8; - state[j] = t >>> 24 & 0xff; - state[j + 1] = t >> 16 & 0xff; - state[j + 2] = t >> 8 & 0xff; - state[j + 3] = t & 0xff; - } - } - - t = state[13]; - state[13] = state[9]; - state[9] = state[5]; - state[5] = state[1]; - state[1] = t; - t = state[14]; - u = state[10]; - state[14] = state[6]; - state[10] = state[2]; - state[6] = t; - state[2] = u; - t = state[15]; - u = state[11]; - v = state[7]; - state[15] = state[3]; - state[11] = t; - state[7] = u; - state[3] = v; - - for (let j = 0; j < 16; ++j) { - state[j] = this._inv_s[state[j]]; - state[j] ^= key[j]; - } - - return state; - } - - _encrypt(input, key) { - const s = this._s; - let t, u, v; - const state = new Uint8Array(16); - state.set(input); - - for (let j = 0; j < 16; ++j) { - state[j] ^= key[j]; - } - - for (let i = 1; i < this._cyclesOfRepetition; i++) { - for (let j = 0; j < 16; ++j) { - state[j] = s[state[j]]; - } - - v = state[1]; - state[1] = state[5]; - state[5] = state[9]; - state[9] = state[13]; - state[13] = v; - v = state[2]; - u = state[6]; - state[2] = state[10]; - state[6] = state[14]; - state[10] = v; - state[14] = u; - v = state[3]; - u = state[7]; - t = state[11]; - state[3] = state[15]; - state[7] = v; - state[11] = u; - state[15] = t; - - for (let j = 0; j < 16; j += 4) { - const s0 = state[j + 0]; - const s1 = state[j + 1]; - const s2 = state[j + 2]; - const s3 = state[j + 3]; - t = s0 ^ s1 ^ s2 ^ s3; - state[j + 0] ^= t ^ this._mixCol[s0 ^ s1]; - state[j + 1] ^= t ^ this._mixCol[s1 ^ s2]; - state[j + 2] ^= t ^ this._mixCol[s2 ^ s3]; - state[j + 3] ^= t ^ this._mixCol[s3 ^ s0]; - } - - for (let j = 0, k = i * 16; j < 16; ++j, ++k) { - state[j] ^= key[k]; - } - } - - for (let j = 0; j < 16; ++j) { - state[j] = s[state[j]]; - } - - v = state[1]; - state[1] = state[5]; - state[5] = state[9]; - state[9] = state[13]; - state[13] = v; - v = state[2]; - u = state[6]; - state[2] = state[10]; - state[6] = state[14]; - state[10] = v; - state[14] = u; - v = state[3]; - u = state[7]; - t = state[11]; - state[3] = state[15]; - state[7] = v; - state[11] = u; - state[15] = t; - - for (let j = 0, k = this._keySize; j < 16; ++j, ++k) { - state[j] ^= key[k]; - } - - return state; - } - - _decryptBlock2(data, finalize) { - const sourceLength = data.length; - let buffer = this.buffer, - bufferLength = this.bufferPosition; - const result = []; - let iv = this.iv; - - for (let i = 0; i < sourceLength; ++i) { - buffer[bufferLength] = data[i]; - ++bufferLength; - - if (bufferLength < 16) { - continue; - } - - const plain = this._decrypt(buffer, this._key); - - for (let j = 0; j < 16; ++j) { - plain[j] ^= iv[j]; - } - - iv = buffer; - result.push(plain); - buffer = new Uint8Array(16); - bufferLength = 0; - } - - this.buffer = buffer; - this.bufferLength = bufferLength; - this.iv = iv; - - if (result.length === 0) { - return new Uint8Array(0); - } - - let outputLength = 16 * result.length; - - if (finalize) { - const lastBlock = result[result.length - 1]; - let psLen = lastBlock[15]; - - if (psLen <= 16) { - for (let i = 15, ii = 16 - psLen; i >= ii; --i) { - if (lastBlock[i] !== psLen) { - psLen = 0; - break; - } - } - - outputLength -= psLen; - result[result.length - 1] = lastBlock.subarray(0, 16 - psLen); - } - } - - const output = new Uint8Array(outputLength); - - for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) { - output.set(result[i], j); - } - - return output; - } - - decryptBlock(data, finalize, iv = null) { - const sourceLength = data.length; - const buffer = this.buffer; - let bufferLength = this.bufferPosition; - - if (iv) { - this.iv = iv; - } else { - for (let i = 0; bufferLength < 16 && i < sourceLength; ++i, ++bufferLength) { - buffer[bufferLength] = data[i]; - } - - if (bufferLength < 16) { - this.bufferLength = bufferLength; - return new Uint8Array(0); - } - - this.iv = buffer; - data = data.subarray(16); - } - - this.buffer = new Uint8Array(16); - this.bufferLength = 0; - this.decryptBlock = this._decryptBlock2; - return this.decryptBlock(data, finalize); - } - - encrypt(data, iv) { - const sourceLength = data.length; - let buffer = this.buffer, - bufferLength = this.bufferPosition; - const result = []; - - if (!iv) { - iv = new Uint8Array(16); - } - - for (let i = 0; i < sourceLength; ++i) { - buffer[bufferLength] = data[i]; - ++bufferLength; - - if (bufferLength < 16) { - continue; - } - - for (let j = 0; j < 16; ++j) { - buffer[j] ^= iv[j]; - } - - const cipher = this._encrypt(buffer, this._key); - - iv = cipher; - result.push(cipher); - buffer = new Uint8Array(16); - bufferLength = 0; - } - - this.buffer = buffer; - this.bufferLength = bufferLength; - this.iv = iv; - - if (result.length === 0) { - return new Uint8Array(0); - } - - const outputLength = 16 * result.length; - const output = new Uint8Array(outputLength); - - for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) { - output.set(result[i], j); - } - - return output; - } - -} - -class AES128Cipher extends AESBaseCipher { - constructor(key) { - super(); - this._cyclesOfRepetition = 10; - this._keySize = 160; - this._rcon = new Uint8Array([0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d]); - this._key = this._expandKey(key); - } - - _expandKey(cipherKey) { - const b = 176; - const s = this._s; - const rcon = this._rcon; - const result = new Uint8Array(b); - result.set(cipherKey); - - for (let j = 16, i = 1; j < b; ++i) { - let t1 = result[j - 3]; - let t2 = result[j - 2]; - let t3 = result[j - 1]; - let t4 = result[j - 4]; - t1 = s[t1]; - t2 = s[t2]; - t3 = s[t3]; - t4 = s[t4]; - t1 ^= rcon[i]; - - for (let n = 0; n < 4; ++n) { - result[j] = t1 ^= result[j - 16]; - j++; - result[j] = t2 ^= result[j - 16]; - j++; - result[j] = t3 ^= result[j - 16]; - j++; - result[j] = t4 ^= result[j - 16]; - j++; - } - } - - return result; - } - -} - -exports.AES128Cipher = AES128Cipher; - -class AES256Cipher extends AESBaseCipher { - constructor(key) { - super(); - this._cyclesOfRepetition = 14; - this._keySize = 224; - this._key = this._expandKey(key); - } - - _expandKey(cipherKey) { - const b = 240; - const s = this._s; - const result = new Uint8Array(b); - result.set(cipherKey); - let r = 1; - let t1, t2, t3, t4; - - for (let j = 32, i = 1; j < b; ++i) { - if (j % 32 === 16) { - t1 = s[t1]; - t2 = s[t2]; - t3 = s[t3]; - t4 = s[t4]; - } else if (j % 32 === 0) { - t1 = result[j - 3]; - t2 = result[j - 2]; - t3 = result[j - 1]; - t4 = result[j - 4]; - t1 = s[t1]; - t2 = s[t2]; - t3 = s[t3]; - t4 = s[t4]; - t1 ^= r; - - if ((r <<= 1) >= 256) { - r = (r ^ 0x1b) & 0xff; - } - } - - for (let n = 0; n < 4; ++n) { - result[j] = t1 ^= result[j - 32]; - j++; - result[j] = t2 ^= result[j - 32]; - j++; - result[j] = t3 ^= result[j - 32]; - j++; - result[j] = t4 ^= result[j - 32]; - j++; - } - } - - return result; - } - -} - -exports.AES256Cipher = AES256Cipher; - -class PDF17 { - checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) { - const hashData = new Uint8Array(password.length + 56); - hashData.set(password, 0); - hashData.set(ownerValidationSalt, password.length); - hashData.set(userBytes, password.length + ownerValidationSalt.length); - const result = calculateSHA256(hashData, 0, hashData.length); - return (0, _util.isArrayEqual)(result, ownerPassword); - } - - checkUserPassword(password, userValidationSalt, userPassword) { - const hashData = new Uint8Array(password.length + 8); - hashData.set(password, 0); - hashData.set(userValidationSalt, password.length); - const result = calculateSHA256(hashData, 0, hashData.length); - return (0, _util.isArrayEqual)(result, userPassword); - } - - getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) { - const hashData = new Uint8Array(password.length + 56); - hashData.set(password, 0); - hashData.set(ownerKeySalt, password.length); - hashData.set(userBytes, password.length + ownerKeySalt.length); - const key = calculateSHA256(hashData, 0, hashData.length); - const cipher = new AES256Cipher(key); - return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16)); - } - - getUserKey(password, userKeySalt, userEncryption) { - const hashData = new Uint8Array(password.length + 8); - hashData.set(password, 0); - hashData.set(userKeySalt, password.length); - const key = calculateSHA256(hashData, 0, hashData.length); - const cipher = new AES256Cipher(key); - return cipher.decryptBlock(userEncryption, false, new Uint8Array(16)); - } - -} - -exports.PDF17 = PDF17; - -const PDF20 = function PDF20Closure() { - function calculatePDF20Hash(password, input, userBytes) { - let k = calculateSHA256(input, 0, input.length).subarray(0, 32); - let e = [0]; - let i = 0; - - while (i < 64 || e[e.length - 1] > i - 32) { - const combinedLength = password.length + k.length + userBytes.length, - combinedArray = new Uint8Array(combinedLength); - let writeOffset = 0; - combinedArray.set(password, writeOffset); - writeOffset += password.length; - combinedArray.set(k, writeOffset); - writeOffset += k.length; - combinedArray.set(userBytes, writeOffset); - const k1 = new Uint8Array(combinedLength * 64); - - for (let j = 0, pos = 0; j < 64; j++, pos += combinedLength) { - k1.set(combinedArray, pos); - } - - const cipher = new AES128Cipher(k.subarray(0, 16)); - e = cipher.encrypt(k1, k.subarray(16, 32)); - let remainder = 0; - - for (let z = 0; z < 16; z++) { - remainder *= 256 % 3; - remainder %= 3; - remainder += (e[z] >>> 0) % 3; - remainder %= 3; - } - - if (remainder === 0) { - k = calculateSHA256(e, 0, e.length); - } else if (remainder === 1) { - k = calculateSHA384(e, 0, e.length); - } else if (remainder === 2) { - k = calculateSHA512(e, 0, e.length); - } - - i++; - } - - return k.subarray(0, 32); - } - - class PDF20 { - hash(password, concatBytes, userBytes) { - return calculatePDF20Hash(password, concatBytes, userBytes); - } - - checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) { - const hashData = new Uint8Array(password.length + 56); - hashData.set(password, 0); - hashData.set(ownerValidationSalt, password.length); - hashData.set(userBytes, password.length + ownerValidationSalt.length); - const result = calculatePDF20Hash(password, hashData, userBytes); - return (0, _util.isArrayEqual)(result, ownerPassword); - } - - checkUserPassword(password, userValidationSalt, userPassword) { - const hashData = new Uint8Array(password.length + 8); - hashData.set(password, 0); - hashData.set(userValidationSalt, password.length); - const result = calculatePDF20Hash(password, hashData, []); - return (0, _util.isArrayEqual)(result, userPassword); - } - - getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) { - const hashData = new Uint8Array(password.length + 56); - hashData.set(password, 0); - hashData.set(ownerKeySalt, password.length); - hashData.set(userBytes, password.length + ownerKeySalt.length); - const key = calculatePDF20Hash(password, hashData, userBytes); - const cipher = new AES256Cipher(key); - return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16)); - } - - getUserKey(password, userKeySalt, userEncryption) { - const hashData = new Uint8Array(password.length + 8); - hashData.set(password, 0); - hashData.set(userKeySalt, password.length); - const key = calculatePDF20Hash(password, hashData, []); - const cipher = new AES256Cipher(key); - return cipher.decryptBlock(userEncryption, false, new Uint8Array(16)); - } - - } - - return PDF20; -}(); - -exports.PDF20 = PDF20; - -class CipherTransform { - constructor(stringCipherConstructor, streamCipherConstructor) { - this.StringCipherConstructor = stringCipherConstructor; - this.StreamCipherConstructor = streamCipherConstructor; - } - - createStream(stream, length) { - const cipher = new this.StreamCipherConstructor(); - return new _decrypt_stream.DecryptStream(stream, length, function cipherTransformDecryptStream(data, finalize) { - return cipher.decryptBlock(data, finalize); - }); - } - - decryptString(s) { - const cipher = new this.StringCipherConstructor(); - let data = (0, _util.stringToBytes)(s); - data = cipher.decryptBlock(data, true); - return (0, _util.bytesToString)(data); - } - - encryptString(s) { - const cipher = new this.StringCipherConstructor(); - - if (cipher instanceof AESBaseCipher) { - const strLen = s.length; - const pad = 16 - strLen % 16; - s += String.fromCharCode(pad).repeat(pad); - const iv = new Uint8Array(16); - - if (typeof crypto !== "undefined") { - crypto.getRandomValues(iv); - } else { - for (let i = 0; i < 16; i++) { - iv[i] = Math.floor(256 * Math.random()); - } - } - - let data = (0, _util.stringToBytes)(s); - data = cipher.encrypt(data, iv); - const buf = new Uint8Array(16 + data.length); - buf.set(iv); - buf.set(data, 16); - return (0, _util.bytesToString)(buf); - } - - let data = (0, _util.stringToBytes)(s); - data = cipher.encrypt(data); - return (0, _util.bytesToString)(data); - } - -} - -const CipherTransformFactory = function CipherTransformFactoryClosure() { - const defaultPasswordBytes = new Uint8Array([0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, 0x64, 0x00, 0x4e, 0x56, 0xff, 0xfa, 0x01, 0x08, 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80, 0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a]); - - function createEncryptionKey20(revision, password, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms) { - if (password) { - const passwordLength = Math.min(127, password.length); - password = password.subarray(0, passwordLength); - } else { - password = []; - } - - let pdfAlgorithm; - - if (revision === 6) { - pdfAlgorithm = new PDF20(); - } else { - pdfAlgorithm = new PDF17(); - } - - if (pdfAlgorithm.checkUserPassword(password, userValidationSalt, userPassword)) { - return pdfAlgorithm.getUserKey(password, userKeySalt, userEncryption); - } else if (password.length && pdfAlgorithm.checkOwnerPassword(password, ownerValidationSalt, uBytes, ownerPassword)) { - return pdfAlgorithm.getOwnerKey(password, ownerKeySalt, uBytes, ownerEncryption); - } - - return null; - } - - function prepareKeyData(fileId, password, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata) { - const hashDataSize = 40 + ownerPassword.length + fileId.length; - const hashData = new Uint8Array(hashDataSize); - let i = 0, - j, - n; - - if (password) { - n = Math.min(32, password.length); - - for (; i < n; ++i) { - hashData[i] = password[i]; - } - } - - j = 0; - - while (i < 32) { - hashData[i++] = defaultPasswordBytes[j++]; - } - - for (j = 0, n = ownerPassword.length; j < n; ++j) { - hashData[i++] = ownerPassword[j]; - } - - hashData[i++] = flags & 0xff; - hashData[i++] = flags >> 8 & 0xff; - hashData[i++] = flags >> 16 & 0xff; - hashData[i++] = flags >>> 24 & 0xff; - - for (j = 0, n = fileId.length; j < n; ++j) { - hashData[i++] = fileId[j]; - } - - if (revision >= 4 && !encryptMetadata) { - hashData[i++] = 0xff; - hashData[i++] = 0xff; - hashData[i++] = 0xff; - hashData[i++] = 0xff; - } - - let hash = calculateMD5(hashData, 0, i); - const keyLengthInBytes = keyLength >> 3; - - if (revision >= 3) { - for (j = 0; j < 50; ++j) { - hash = calculateMD5(hash, 0, keyLengthInBytes); - } - } - - const encryptionKey = hash.subarray(0, keyLengthInBytes); - let cipher, checkData; - - if (revision >= 3) { - for (i = 0; i < 32; ++i) { - hashData[i] = defaultPasswordBytes[i]; - } - - for (j = 0, n = fileId.length; j < n; ++j) { - hashData[i++] = fileId[j]; - } - - cipher = new ARCFourCipher(encryptionKey); - checkData = cipher.encryptBlock(calculateMD5(hashData, 0, i)); - n = encryptionKey.length; - const derivedKey = new Uint8Array(n); - - for (j = 1; j <= 19; ++j) { - for (let k = 0; k < n; ++k) { - derivedKey[k] = encryptionKey[k] ^ j; - } - - cipher = new ARCFourCipher(derivedKey); - checkData = cipher.encryptBlock(checkData); - } - - for (j = 0, n = checkData.length; j < n; ++j) { - if (userPassword[j] !== checkData[j]) { - return null; - } - } - } else { - cipher = new ARCFourCipher(encryptionKey); - checkData = cipher.encryptBlock(defaultPasswordBytes); - - for (j = 0, n = checkData.length; j < n; ++j) { - if (userPassword[j] !== checkData[j]) { - return null; - } - } - } - - return encryptionKey; - } - - function decodeUserPassword(password, ownerPassword, revision, keyLength) { - const hashData = new Uint8Array(32); - let i = 0; - const n = Math.min(32, password.length); - - for (; i < n; ++i) { - hashData[i] = password[i]; - } - - let j = 0; - - while (i < 32) { - hashData[i++] = defaultPasswordBytes[j++]; - } - - let hash = calculateMD5(hashData, 0, i); - const keyLengthInBytes = keyLength >> 3; - - if (revision >= 3) { - for (j = 0; j < 50; ++j) { - hash = calculateMD5(hash, 0, hash.length); - } - } - - let cipher, userPassword; - - if (revision >= 3) { - userPassword = ownerPassword; - const derivedKey = new Uint8Array(keyLengthInBytes); - - for (j = 19; j >= 0; j--) { - for (let k = 0; k < keyLengthInBytes; ++k) { - derivedKey[k] = hash[k] ^ j; - } - - cipher = new ARCFourCipher(derivedKey); - userPassword = cipher.encryptBlock(userPassword); - } - } else { - cipher = new ARCFourCipher(hash.subarray(0, keyLengthInBytes)); - userPassword = cipher.encryptBlock(ownerPassword); - } - - return userPassword; - } - - const identityName = _primitives.Name.get("Identity"); - - function buildObjectKey(num, gen, encryptionKey, isAes = false) { - const key = new Uint8Array(encryptionKey.length + 9); - const n = encryptionKey.length; - let i; - - for (i = 0; i < n; ++i) { - key[i] = encryptionKey[i]; - } - - key[i++] = num & 0xff; - key[i++] = num >> 8 & 0xff; - key[i++] = num >> 16 & 0xff; - key[i++] = gen & 0xff; - key[i++] = gen >> 8 & 0xff; - - if (isAes) { - key[i++] = 0x73; - key[i++] = 0x41; - key[i++] = 0x6c; - key[i++] = 0x54; - } - - const hash = calculateMD5(key, 0, i); - return hash.subarray(0, Math.min(encryptionKey.length + 5, 16)); - } - - function buildCipherConstructor(cf, name, num, gen, key) { - if (!(0, _primitives.isName)(name)) { - throw new _util.FormatError("Invalid crypt filter name."); - } - - const cryptFilter = cf.get(name.name); - let cfm; - - if (cryptFilter !== null && cryptFilter !== undefined) { - cfm = cryptFilter.get("CFM"); - } - - if (!cfm || cfm.name === "None") { - return function cipherTransformFactoryBuildCipherConstructorNone() { - return new NullCipher(); - }; - } - - if (cfm.name === "V2") { - return function cipherTransformFactoryBuildCipherConstructorV2() { - return new ARCFourCipher(buildObjectKey(num, gen, key, false)); - }; - } - - if (cfm.name === "AESV2") { - return function cipherTransformFactoryBuildCipherConstructorAESV2() { - return new AES128Cipher(buildObjectKey(num, gen, key, true)); - }; - } - - if (cfm.name === "AESV3") { - return function cipherTransformFactoryBuildCipherConstructorAESV3() { - return new AES256Cipher(key); - }; - } - - throw new _util.FormatError("Unknown crypto method"); - } - - class CipherTransformFactory { - constructor(dict, fileId, password) { - const filter = dict.get("Filter"); - - if (!(0, _primitives.isName)(filter, "Standard")) { - throw new _util.FormatError("unknown encryption method"); - } - - this.filterName = filter.name; - this.dict = dict; - const algorithm = dict.get("V"); - - if (!Number.isInteger(algorithm) || algorithm !== 1 && algorithm !== 2 && algorithm !== 4 && algorithm !== 5) { - throw new _util.FormatError("unsupported encryption algorithm"); - } - - this.algorithm = algorithm; - let keyLength = dict.get("Length"); - - if (!keyLength) { - if (algorithm <= 3) { - keyLength = 40; - } else { - const cfDict = dict.get("CF"); - const streamCryptoName = dict.get("StmF"); - - if ((0, _primitives.isDict)(cfDict) && (0, _primitives.isName)(streamCryptoName)) { - cfDict.suppressEncryption = true; - const handlerDict = cfDict.get(streamCryptoName.name); - keyLength = handlerDict && handlerDict.get("Length") || 128; - - if (keyLength < 40) { - keyLength <<= 3; - } - } - } - } - - if (!Number.isInteger(keyLength) || keyLength < 40 || keyLength % 8 !== 0) { - throw new _util.FormatError("invalid key length"); - } - - const ownerPassword = (0, _util.stringToBytes)(dict.get("O")).subarray(0, 32); - const userPassword = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 32); - const flags = dict.get("P"); - const revision = dict.get("R"); - const encryptMetadata = (algorithm === 4 || algorithm === 5) && dict.get("EncryptMetadata") !== false; - this.encryptMetadata = encryptMetadata; - const fileIdBytes = (0, _util.stringToBytes)(fileId); - let passwordBytes; - - if (password) { - if (revision === 6) { - try { - password = (0, _util.utf8StringToString)(password); - } catch (ex) { - (0, _util.warn)("CipherTransformFactory: " + "Unable to convert UTF8 encoded password."); - } - } - - passwordBytes = (0, _util.stringToBytes)(password); - } - - let encryptionKey; - - if (algorithm !== 5) { - encryptionKey = prepareKeyData(fileIdBytes, passwordBytes, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata); - } else { - const ownerValidationSalt = (0, _util.stringToBytes)(dict.get("O")).subarray(32, 40); - const ownerKeySalt = (0, _util.stringToBytes)(dict.get("O")).subarray(40, 48); - const uBytes = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 48); - const userValidationSalt = (0, _util.stringToBytes)(dict.get("U")).subarray(32, 40); - const userKeySalt = (0, _util.stringToBytes)(dict.get("U")).subarray(40, 48); - const ownerEncryption = (0, _util.stringToBytes)(dict.get("OE")); - const userEncryption = (0, _util.stringToBytes)(dict.get("UE")); - (0, _util.stringToBytes)(dict.get("Perms")); - encryptionKey = createEncryptionKey20(revision, passwordBytes, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption); - } - - if (!encryptionKey && !password) { - throw new _util.PasswordException("No password given", _util.PasswordResponses.NEED_PASSWORD); - } else if (!encryptionKey && password) { - const decodedPassword = decodeUserPassword(passwordBytes, ownerPassword, revision, keyLength); - encryptionKey = prepareKeyData(fileIdBytes, decodedPassword, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata); - } - - if (!encryptionKey) { - throw new _util.PasswordException("Incorrect Password", _util.PasswordResponses.INCORRECT_PASSWORD); - } - - this.encryptionKey = encryptionKey; - - if (algorithm >= 4) { - const cf = dict.get("CF"); - - if ((0, _primitives.isDict)(cf)) { - cf.suppressEncryption = true; - } - - this.cf = cf; - this.stmf = dict.get("StmF") || identityName; - this.strf = dict.get("StrF") || identityName; - this.eff = dict.get("EFF") || this.stmf; - } - } - - createCipherTransform(num, gen) { - if (this.algorithm === 4 || this.algorithm === 5) { - return new CipherTransform(buildCipherConstructor(this.cf, this.stmf, num, gen, this.encryptionKey), buildCipherConstructor(this.cf, this.strf, num, gen, this.encryptionKey)); - } - - const key = buildObjectKey(num, gen, this.encryptionKey, false); - - const cipherConstructor = function buildCipherCipherConstructor() { - return new ARCFourCipher(key); - }; - - return new CipherTransform(cipherConstructor, cipherConstructor); - } - - } - - return CipherTransformFactory; -}(); - -exports.CipherTransformFactory = CipherTransformFactory; - -/***/ }), -/* 73 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.DecryptStream = void 0; - -var _decode_stream = __w_pdfjs_require__(29); - -const chunkSize = 512; - -class DecryptStream extends _decode_stream.DecodeStream { - constructor(str, maybeLength, decrypt) { - super(maybeLength); - this.str = str; - this.dict = str.dict; - this.decrypt = decrypt; - this.nextChunk = null; - this.initialized = false; - } - - readBlock() { - let chunk; - - if (this.initialized) { - chunk = this.nextChunk; - } else { - chunk = this.str.getBytes(chunkSize); - this.initialized = true; - } - - if (!chunk || chunk.length === 0) { - this.eof = true; - return; - } - - this.nextChunk = this.str.getBytes(chunkSize); - const hasMoreData = this.nextChunk && this.nextChunk.length > 0; - const decrypt = this.decrypt; - chunk = decrypt(chunk, !hasMoreData); - let bufferLength = this.bufferLength; - const n = chunk.length, - buffer = this.ensureBuffer(bufferLength + n); - - for (let i = 0; i < n; i++) { - buffer[bufferLength++] = chunk[i]; - } - - this.bufferLength = bufferLength; - } - -} - -exports.DecryptStream = DecryptStream; - -/***/ }), -/* 74 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.XFAFactory = void 0; - -var _xfa_object = __w_pdfjs_require__(75); - -var _bind = __w_pdfjs_require__(79); - -var _data = __w_pdfjs_require__(85); - -var _fonts = __w_pdfjs_require__(83); - -var _utils = __w_pdfjs_require__(76); - -var _util = __w_pdfjs_require__(2); - -var _parser = __w_pdfjs_require__(86); - -var _xhtml = __w_pdfjs_require__(96); - -class XFAFactory { - constructor(data) { - try { - this.root = new _parser.XFAParser().parse(XFAFactory._createDocument(data)); - const binder = new _bind.Binder(this.root); - this.form = binder.bind(); - this.dataHandler = new _data.DataHandler(this.root, binder.getData()); - this.form[_xfa_object.$globalData].template = this.form; - } catch (e) { - (0, _util.warn)(`XFA - an error occurred during parsing and binding: ${e}`); - } - } - - isValid() { - return this.root && this.form; - } - - _createPagesHelper() { - const iterator = this.form[_xfa_object.$toPages](); - - return new Promise((resolve, reject) => { - const nextIteration = () => { - try { - const value = iterator.next(); - - if (value.done) { - resolve(value.value); - } else { - setTimeout(nextIteration, 0); - } - } catch (e) { - reject(e); - } - }; - - setTimeout(nextIteration, 0); - }); - } - - async _createPages() { - try { - this.pages = await this._createPagesHelper(); - this.dims = this.pages.children.map(c => { - const { - width, - height - } = c.attributes.style; - return [0, 0, parseInt(width), parseInt(height)]; - }); - } catch (e) { - (0, _util.warn)(`XFA - an error occurred during layout: ${e}`); - } - } - - getBoundingBox(pageIndex) { - return this.dims[pageIndex]; - } - - async getNumPages() { - if (!this.pages) { - await this._createPages(); - } - - return this.dims.length; - } - - setImages(images) { - this.form[_xfa_object.$globalData].images = images; - } - - setFonts(fonts) { - this.form[_xfa_object.$globalData].fontFinder = new _fonts.FontFinder(fonts); - const missingFonts = []; - - for (let typeface of this.form[_xfa_object.$globalData].usedTypefaces) { - typeface = (0, _utils.stripQuotes)(typeface); - - const font = this.form[_xfa_object.$globalData].fontFinder.find(typeface); - - if (!font) { - missingFonts.push(typeface); - } - } - - if (missingFonts.length > 0) { - return missingFonts; - } - - return null; - } - - appendFonts(fonts, reallyMissingFonts) { - this.form[_xfa_object.$globalData].fontFinder.add(fonts, reallyMissingFonts); - } - - async getPages() { - if (!this.pages) { - await this._createPages(); - } - - const pages = this.pages; - this.pages = null; - return pages; - } - - serializeData(storage) { - return this.dataHandler.serialize(storage); - } - - static _createDocument(data) { - if (!data["/xdp:xdp"]) { - return data["xdp:xdp"]; - } - - return Object.values(data).join(""); - } - - static getRichTextAsHtml(rc) { - if (!rc || typeof rc !== "string") { - return null; - } - - try { - let root = new _parser.XFAParser(_xhtml.XhtmlNamespace, true).parse(rc); - - if (!["body", "xhtml"].includes(root[_xfa_object.$nodeName])) { - const newRoot = _xhtml.XhtmlNamespace.body({}); - - newRoot[_xfa_object.$appendChild](root); - - root = newRoot; - } - - const result = root[_xfa_object.$toHTML](); - - if (!result.success) { - return null; - } - - const { - html - } = result; - const { - attributes - } = html; - - if (attributes) { - if (attributes.class) { - attributes.class = attributes.class.filter(attr => !attr.startsWith("xfa")); - } - - attributes.dir = "auto"; - } - - return { - html, - str: root[_xfa_object.$text]() - }; - } catch (e) { - (0, _util.warn)(`XFA - an error occurred during parsing of rich text: ${e}`); - } - - return null; - } - -} - -exports.XFAFactory = XFAFactory; - -/***/ }), -/* 75 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.XmlObject = exports.XFAObjectArray = exports.XFAObject = exports.XFAAttribute = exports.StringObject = exports.OptionObject = exports.Option10 = exports.Option01 = exports.IntegerObject = exports.ContentObject = exports.$uid = exports.$toStyle = exports.$toString = exports.$toPages = exports.$toHTML = exports.$text = exports.$tabIndex = exports.$setValue = exports.$setSetAttributes = exports.$setId = exports.$searchNode = exports.$root = exports.$resolvePrototypes = exports.$removeChild = exports.$pushPara = exports.$pushGlyphs = exports.$popPara = exports.$onText = exports.$onChildCheck = exports.$onChild = exports.$nsAttributes = exports.$nodeName = exports.$namespaceId = exports.$isUsable = exports.$isTransparent = exports.$isThereMoreWidth = exports.$isSplittable = exports.$isNsAgnostic = exports.$isDescendent = exports.$isDataValue = exports.$isCDATAXml = exports.$isBindable = exports.$insertAt = exports.$indexOf = exports.$ids = exports.$hasSettableValue = exports.$globalData = exports.$getTemplateRoot = exports.$getSubformParent = exports.$getRealChildrenByNameIt = exports.$getParent = exports.$getNextPage = exports.$getExtra = exports.$getDataValue = exports.$getContainedChildren = exports.$getChildrenByNameIt = exports.$getChildrenByName = exports.$getChildrenByClass = exports.$getChildren = exports.$getAvailableSpace = exports.$getAttributes = exports.$getAttributeIt = exports.$flushHTML = exports.$finalize = exports.$extra = exports.$dump = exports.$data = exports.$content = exports.$consumed = exports.$clone = exports.$cleanup = exports.$cleanPage = exports.$clean = exports.$childrenToHTML = exports.$appendChild = exports.$addHTML = exports.$acceptWhitespace = void 0; - -var _utils = __w_pdfjs_require__(76); - -var _util = __w_pdfjs_require__(2); - -var _core_utils = __w_pdfjs_require__(9); - -var _namespaces = __w_pdfjs_require__(77); - -var _som = __w_pdfjs_require__(78); - -const $acceptWhitespace = Symbol(); -exports.$acceptWhitespace = $acceptWhitespace; -const $addHTML = Symbol(); -exports.$addHTML = $addHTML; -const $appendChild = Symbol(); -exports.$appendChild = $appendChild; -const $childrenToHTML = Symbol(); -exports.$childrenToHTML = $childrenToHTML; -const $clean = Symbol(); -exports.$clean = $clean; -const $cleanPage = Symbol(); -exports.$cleanPage = $cleanPage; -const $cleanup = Symbol(); -exports.$cleanup = $cleanup; -const $clone = Symbol(); -exports.$clone = $clone; -const $consumed = Symbol(); -exports.$consumed = $consumed; -const $content = Symbol("content"); -exports.$content = $content; -const $data = Symbol("data"); -exports.$data = $data; -const $dump = Symbol(); -exports.$dump = $dump; -const $extra = Symbol("extra"); -exports.$extra = $extra; -const $finalize = Symbol(); -exports.$finalize = $finalize; -const $flushHTML = Symbol(); -exports.$flushHTML = $flushHTML; -const $getAttributeIt = Symbol(); -exports.$getAttributeIt = $getAttributeIt; -const $getAttributes = Symbol(); -exports.$getAttributes = $getAttributes; -const $getAvailableSpace = Symbol(); -exports.$getAvailableSpace = $getAvailableSpace; -const $getChildrenByClass = Symbol(); -exports.$getChildrenByClass = $getChildrenByClass; -const $getChildrenByName = Symbol(); -exports.$getChildrenByName = $getChildrenByName; -const $getChildrenByNameIt = Symbol(); -exports.$getChildrenByNameIt = $getChildrenByNameIt; -const $getDataValue = Symbol(); -exports.$getDataValue = $getDataValue; -const $getExtra = Symbol(); -exports.$getExtra = $getExtra; -const $getRealChildrenByNameIt = Symbol(); -exports.$getRealChildrenByNameIt = $getRealChildrenByNameIt; -const $getChildren = Symbol(); -exports.$getChildren = $getChildren; -const $getContainedChildren = Symbol(); -exports.$getContainedChildren = $getContainedChildren; -const $getNextPage = Symbol(); -exports.$getNextPage = $getNextPage; -const $getSubformParent = Symbol(); -exports.$getSubformParent = $getSubformParent; -const $getParent = Symbol(); -exports.$getParent = $getParent; -const $getTemplateRoot = Symbol(); -exports.$getTemplateRoot = $getTemplateRoot; -const $globalData = Symbol(); -exports.$globalData = $globalData; -const $hasSettableValue = Symbol(); -exports.$hasSettableValue = $hasSettableValue; -const $ids = Symbol(); -exports.$ids = $ids; -const $indexOf = Symbol(); -exports.$indexOf = $indexOf; -const $insertAt = Symbol(); -exports.$insertAt = $insertAt; -const $isCDATAXml = Symbol(); -exports.$isCDATAXml = $isCDATAXml; -const $isBindable = Symbol(); -exports.$isBindable = $isBindable; -const $isDataValue = Symbol(); -exports.$isDataValue = $isDataValue; -const $isDescendent = Symbol(); -exports.$isDescendent = $isDescendent; -const $isNsAgnostic = Symbol(); -exports.$isNsAgnostic = $isNsAgnostic; -const $isSplittable = Symbol(); -exports.$isSplittable = $isSplittable; -const $isThereMoreWidth = Symbol(); -exports.$isThereMoreWidth = $isThereMoreWidth; -const $isTransparent = Symbol(); -exports.$isTransparent = $isTransparent; -const $isUsable = Symbol(); -exports.$isUsable = $isUsable; -const $lastAttribute = Symbol(); -const $namespaceId = Symbol("namespaceId"); -exports.$namespaceId = $namespaceId; -const $nodeName = Symbol("nodeName"); -exports.$nodeName = $nodeName; -const $nsAttributes = Symbol(); -exports.$nsAttributes = $nsAttributes; -const $onChild = Symbol(); -exports.$onChild = $onChild; -const $onChildCheck = Symbol(); -exports.$onChildCheck = $onChildCheck; -const $onText = Symbol(); -exports.$onText = $onText; -const $pushGlyphs = Symbol(); -exports.$pushGlyphs = $pushGlyphs; -const $popPara = Symbol(); -exports.$popPara = $popPara; -const $pushPara = Symbol(); -exports.$pushPara = $pushPara; -const $removeChild = Symbol(); -exports.$removeChild = $removeChild; -const $root = Symbol("root"); -exports.$root = $root; -const $resolvePrototypes = Symbol(); -exports.$resolvePrototypes = $resolvePrototypes; -const $searchNode = Symbol(); -exports.$searchNode = $searchNode; -const $setId = Symbol(); -exports.$setId = $setId; -const $setSetAttributes = Symbol(); -exports.$setSetAttributes = $setSetAttributes; -const $setValue = Symbol(); -exports.$setValue = $setValue; -const $tabIndex = Symbol(); -exports.$tabIndex = $tabIndex; -const $text = Symbol(); -exports.$text = $text; -const $toPages = Symbol(); -exports.$toPages = $toPages; -const $toHTML = Symbol(); -exports.$toHTML = $toHTML; -const $toString = Symbol(); -exports.$toString = $toString; -const $toStyle = Symbol(); -exports.$toStyle = $toStyle; -const $uid = Symbol("uid"); -exports.$uid = $uid; - -const _applyPrototype = Symbol(); - -const _attributes = Symbol(); - -const _attributeNames = Symbol(); - -const _children = Symbol("_children"); - -const _cloneAttribute = Symbol(); - -const _dataValue = Symbol(); - -const _defaultValue = Symbol(); - -const _filteredChildrenGenerator = Symbol(); - -const _getPrototype = Symbol(); - -const _getUnsetAttributes = Symbol(); - -const _hasChildren = Symbol(); - -const _max = Symbol(); - -const _options = Symbol(); - -const _parent = Symbol("parent"); - -const _resolvePrototypesHelper = Symbol(); - -const _setAttributes = Symbol(); - -const _validator = Symbol(); - -let uid = 0; -const NS_DATASETS = _namespaces.NamespaceIds.datasets.id; - -class XFAObject { - constructor(nsId, name, hasChildren = false) { - this[$namespaceId] = nsId; - this[$nodeName] = name; - this[_hasChildren] = hasChildren; - this[_parent] = null; - this[_children] = []; - this[$uid] = `${name}${uid++}`; - this[$globalData] = null; - } - - [$onChild](child) { - if (!this[_hasChildren] || !this[$onChildCheck](child)) { - return false; - } - - const name = child[$nodeName]; - const node = this[name]; - - if (node instanceof XFAObjectArray) { - if (node.push(child)) { - this[$appendChild](child); - return true; - } - } else { - if (node !== null) { - this[$removeChild](node); - } - - this[name] = child; - this[$appendChild](child); - return true; - } - - let id = ""; - - if (this.id) { - id = ` (id: ${this.id})`; - } else if (this.name) { - id = ` (name: ${this.name} ${this.h.value})`; - } - - (0, _util.warn)(`XFA - node "${this[$nodeName]}"${id} has already enough "${name}"!`); - return false; - } - - [$onChildCheck](child) { - return this.hasOwnProperty(child[$nodeName]) && child[$namespaceId] === this[$namespaceId]; - } - - [$isNsAgnostic]() { - return false; - } - - [$acceptWhitespace]() { - return false; - } - - [$isCDATAXml]() { - return false; - } - - [$isBindable]() { - return false; - } - - [$popPara]() { - if (this.para) { - this[$getTemplateRoot]()[$extra].paraStack.pop(); - } - } - - [$pushPara]() { - this[$getTemplateRoot]()[$extra].paraStack.push(this.para); - } - - [$setId](ids) { - if (this.id && this[$namespaceId] === _namespaces.NamespaceIds.template.id) { - ids.set(this.id, this); - } - } - - [$getTemplateRoot]() { - return this[$globalData].template; - } - - [$isSplittable]() { - return false; - } - - [$isThereMoreWidth]() { - return false; - } - - [$appendChild](child) { - child[_parent] = this; - - this[_children].push(child); - - if (!child[$globalData] && this[$globalData]) { - child[$globalData] = this[$globalData]; - } - } - - [$removeChild](child) { - const i = this[_children].indexOf(child); - - this[_children].splice(i, 1); - } - - [$hasSettableValue]() { - return this.hasOwnProperty("value"); - } - - [$setValue](_) {} - - [$onText](_) {} - - [$finalize]() {} - - [$clean](builder) { - delete this[_hasChildren]; - - if (this[$cleanup]) { - builder.clean(this[$cleanup]); - delete this[$cleanup]; - } - } - - [$indexOf](child) { - return this[_children].indexOf(child); - } - - [$insertAt](i, child) { - child[_parent] = this; - - this[_children].splice(i, 0, child); - - if (!child[$globalData] && this[$globalData]) { - child[$globalData] = this[$globalData]; - } - } - - [$isTransparent]() { - return !this.name; - } - - [$lastAttribute]() { - return ""; - } - - [$text]() { - if (this[_children].length === 0) { - return this[$content]; - } - - return this[_children].map(c => c[$text]()).join(""); - } - - get [_attributeNames]() { - const proto = Object.getPrototypeOf(this); - - if (!proto._attributes) { - const attributes = proto._attributes = new Set(); - - for (const name of Object.getOwnPropertyNames(this)) { - if (this[name] === null || this[name] instanceof XFAObject || this[name] instanceof XFAObjectArray) { - break; - } - - attributes.add(name); - } - } - - return (0, _util.shadow)(this, _attributeNames, proto._attributes); - } - - [$isDescendent](parent) { - let node = this; - - while (node) { - if (node === parent) { - return true; - } - - node = node[$getParent](); - } - - return false; - } - - [$getParent]() { - return this[_parent]; - } - - [$getSubformParent]() { - return this[$getParent](); - } - - [$getChildren](name = null) { - if (!name) { - return this[_children]; - } - - return this[name]; - } - - [$dump]() { - const dumped = Object.create(null); - - if (this[$content]) { - dumped.$content = this[$content]; - } - - for (const name of Object.getOwnPropertyNames(this)) { - const value = this[name]; - - if (value === null) { - continue; - } - - if (value instanceof XFAObject) { - dumped[name] = value[$dump](); - } else if (value instanceof XFAObjectArray) { - if (!value.isEmpty()) { - dumped[name] = value.dump(); - } - } else { - dumped[name] = value; - } - } - - return dumped; - } - - [$toStyle]() { - return null; - } - - [$toHTML]() { - return _utils.HTMLResult.EMPTY; - } - - *[$getContainedChildren]() { - for (const node of this[$getChildren]()) { - yield node; - } - } - - *[_filteredChildrenGenerator](filter, include) { - for (const node of this[$getContainedChildren]()) { - if (!filter || include === filter.has(node[$nodeName])) { - const availableSpace = this[$getAvailableSpace](); - const res = node[$toHTML](availableSpace); - - if (!res.success) { - this[$extra].failingNode = node; - } - - yield res; - } - } - } - - [$flushHTML]() { - return null; - } - - [$addHTML](html, bbox) { - this[$extra].children.push(html); - } - - [$getAvailableSpace]() {} - - [$childrenToHTML]({ - filter = null, - include = true - }) { - if (!this[$extra].generator) { - this[$extra].generator = this[_filteredChildrenGenerator](filter, include); - } else { - const availableSpace = this[$getAvailableSpace](); - const res = this[$extra].failingNode[$toHTML](availableSpace); - - if (!res.success) { - return res; - } - - if (res.html) { - this[$addHTML](res.html, res.bbox); - } - - delete this[$extra].failingNode; - } - - while (true) { - const gen = this[$extra].generator.next(); - - if (gen.done) { - break; - } - - const res = gen.value; - - if (!res.success) { - return res; - } - - if (res.html) { - this[$addHTML](res.html, res.bbox); - } - } - - this[$extra].generator = null; - return _utils.HTMLResult.EMPTY; - } - - [$setSetAttributes](attributes) { - this[_setAttributes] = new Set(Object.keys(attributes)); - } - - [_getUnsetAttributes](protoAttributes) { - const allAttr = this[_attributeNames]; - const setAttr = this[_setAttributes]; - return [...protoAttributes].filter(x => allAttr.has(x) && !setAttr.has(x)); - } - - [$resolvePrototypes](ids, ancestors = new Set()) { - for (const child of this[_children]) { - child[_resolvePrototypesHelper](ids, ancestors); - } - } - - [_resolvePrototypesHelper](ids, ancestors) { - const proto = this[_getPrototype](ids, ancestors); - - if (proto) { - this[_applyPrototype](proto, ids, ancestors); - } else { - this[$resolvePrototypes](ids, ancestors); - } - } - - [_getPrototype](ids, ancestors) { - const { - use, - usehref - } = this; - - if (!use && !usehref) { - return null; - } - - let proto = null; - let somExpression = null; - let id = null; - let ref = use; - - if (usehref) { - ref = usehref; - - if (usehref.startsWith("#som(") && usehref.endsWith(")")) { - somExpression = usehref.slice("#som(".length, usehref.length - 1); - } else if (usehref.startsWith(".#som(") && usehref.endsWith(")")) { - somExpression = usehref.slice(".#som(".length, usehref.length - 1); - } else if (usehref.startsWith("#")) { - id = usehref.slice(1); - } else if (usehref.startsWith(".#")) { - id = usehref.slice(2); - } - } else if (use.startsWith("#")) { - id = use.slice(1); - } else { - somExpression = use; - } - - this.use = this.usehref = ""; - - if (id) { - proto = ids.get(id); - } else { - proto = (0, _som.searchNode)(ids.get($root), this, somExpression, true, false); - - if (proto) { - proto = proto[0]; - } - } - - if (!proto) { - (0, _util.warn)(`XFA - Invalid prototype reference: ${ref}.`); - return null; - } - - if (proto[$nodeName] !== this[$nodeName]) { - (0, _util.warn)(`XFA - Incompatible prototype: ${proto[$nodeName]} !== ${this[$nodeName]}.`); - return null; - } - - if (ancestors.has(proto)) { - (0, _util.warn)(`XFA - Cycle detected in prototypes use.`); - return null; - } - - ancestors.add(proto); - - const protoProto = proto[_getPrototype](ids, ancestors); - - if (protoProto) { - proto[_applyPrototype](protoProto, ids, ancestors); - } - - proto[$resolvePrototypes](ids, ancestors); - ancestors.delete(proto); - return proto; - } - - [_applyPrototype](proto, ids, ancestors) { - if (ancestors.has(proto)) { - (0, _util.warn)(`XFA - Cycle detected in prototypes use.`); - return; - } - - if (!this[$content] && proto[$content]) { - this[$content] = proto[$content]; - } - - const newAncestors = new Set(ancestors); - newAncestors.add(proto); - - for (const unsetAttrName of this[_getUnsetAttributes](proto[_setAttributes])) { - this[unsetAttrName] = proto[unsetAttrName]; - - if (this[_setAttributes]) { - this[_setAttributes].add(unsetAttrName); - } - } - - for (const name of Object.getOwnPropertyNames(this)) { - if (this[_attributeNames].has(name)) { - continue; - } - - const value = this[name]; - const protoValue = proto[name]; - - if (value instanceof XFAObjectArray) { - for (const child of value[_children]) { - child[_resolvePrototypesHelper](ids, ancestors); - } - - for (let i = value[_children].length, ii = protoValue[_children].length; i < ii; i++) { - const child = proto[_children][i][$clone](); - - if (value.push(child)) { - child[_parent] = this; - - this[_children].push(child); - - child[_resolvePrototypesHelper](ids, ancestors); - } else { - break; - } - } - - continue; - } - - if (value !== null) { - value[$resolvePrototypes](ids, ancestors); - - if (protoValue) { - value[_applyPrototype](protoValue, ids, ancestors); - } - - continue; - } - - if (protoValue !== null) { - const child = protoValue[$clone](); - child[_parent] = this; - this[name] = child; - - this[_children].push(child); - - child[_resolvePrototypesHelper](ids, ancestors); - } - } - } - - static [_cloneAttribute](obj) { - if (Array.isArray(obj)) { - return obj.map(x => XFAObject[_cloneAttribute](x)); - } - - if (typeof obj === "object" && obj !== null) { - return Object.assign({}, obj); - } - - return obj; - } - - [$clone]() { - const clone = Object.create(Object.getPrototypeOf(this)); - - for (const $symbol of Object.getOwnPropertySymbols(this)) { - try { - clone[$symbol] = this[$symbol]; - } catch (_) { - (0, _util.shadow)(clone, $symbol, this[$symbol]); - } - } - - clone[$uid] = `${clone[$nodeName]}${uid++}`; - clone[_children] = []; - - for (const name of Object.getOwnPropertyNames(this)) { - if (this[_attributeNames].has(name)) { - clone[name] = XFAObject[_cloneAttribute](this[name]); - continue; - } - - const value = this[name]; - - if (value instanceof XFAObjectArray) { - clone[name] = new XFAObjectArray(value[_max]); - } else { - clone[name] = null; - } - } - - for (const child of this[_children]) { - const name = child[$nodeName]; - const clonedChild = child[$clone](); - - clone[_children].push(clonedChild); - - clonedChild[_parent] = clone; - - if (clone[name] === null) { - clone[name] = clonedChild; - } else { - clone[name][_children].push(clonedChild); - } - } - - return clone; - } - - [$getChildren](name = null) { - if (!name) { - return this[_children]; - } - - return this[_children].filter(c => c[$nodeName] === name); - } - - [$getChildrenByClass](name) { - return this[name]; - } - - [$getChildrenByName](name, allTransparent, first = true) { - return Array.from(this[$getChildrenByNameIt](name, allTransparent, first)); - } - - *[$getChildrenByNameIt](name, allTransparent, first = true) { - if (name === "parent") { - yield this[_parent]; - return; - } - - for (const child of this[_children]) { - if (child[$nodeName] === name) { - yield child; - } - - if (child.name === name) { - yield child; - } - - if (allTransparent || child[$isTransparent]()) { - yield* child[$getChildrenByNameIt](name, allTransparent, false); - } - } - - if (first && this[_attributeNames].has(name)) { - yield new XFAAttribute(this, name, this[name]); - } - } - -} - -exports.XFAObject = XFAObject; - -class XFAObjectArray { - constructor(max = Infinity) { - this[_max] = max; - this[_children] = []; - } - - push(child) { - const len = this[_children].length; - - if (len <= this[_max]) { - this[_children].push(child); - - return true; - } - - (0, _util.warn)(`XFA - node "${child[$nodeName]}" accepts no more than ${this[_max]} children`); - return false; - } - - isEmpty() { - return this[_children].length === 0; - } - - dump() { - return this[_children].length === 1 ? this[_children][0][$dump]() : this[_children].map(x => x[$dump]()); - } - - [$clone]() { - const clone = new XFAObjectArray(this[_max]); - clone[_children] = this[_children].map(c => c[$clone]()); - return clone; - } - - get children() { - return this[_children]; - } - - clear() { - this[_children].length = 0; - } - -} - -exports.XFAObjectArray = XFAObjectArray; - -class XFAAttribute { - constructor(node, name, value) { - this[_parent] = node; - this[$nodeName] = name; - this[$content] = value; - this[$consumed] = false; - this[$uid] = `attribute${uid++}`; - } - - [$getParent]() { - return this[_parent]; - } - - [$isDataValue]() { - return true; - } - - [$getDataValue]() { - return this[$content].trim(); - } - - [$setValue](value) { - value = value.value || ""; - this[$content] = value.toString(); - } - - [$text]() { - return this[$content]; - } - - [$isDescendent](parent) { - return this[_parent] === parent || this[_parent][$isDescendent](parent); - } - -} - -exports.XFAAttribute = XFAAttribute; - -class XmlObject extends XFAObject { - constructor(nsId, name, attributes = {}) { - super(nsId, name); - this[$content] = ""; - this[_dataValue] = null; - - if (name !== "#text") { - const map = new Map(); - this[_attributes] = map; - - for (const [attrName, value] of Object.entries(attributes)) { - map.set(attrName, new XFAAttribute(this, attrName, value)); - } - - if (attributes.hasOwnProperty($nsAttributes)) { - const dataNode = attributes[$nsAttributes].xfa.dataNode; - - if (dataNode !== undefined) { - if (dataNode === "dataGroup") { - this[_dataValue] = false; - } else if (dataNode === "dataValue") { - this[_dataValue] = true; - } - } - } - } - - this[$consumed] = false; - } - - [$toString](buf) { - const tagName = this[$nodeName]; - - if (tagName === "#text") { - buf.push((0, _core_utils.encodeToXmlString)(this[$content])); - return; - } - - const utf8TagName = (0, _util.utf8StringToString)(tagName); - const prefix = this[$namespaceId] === NS_DATASETS ? "xfa:" : ""; - buf.push(`<${prefix}${utf8TagName}`); - - for (const [name, value] of this[_attributes].entries()) { - const utf8Name = (0, _util.utf8StringToString)(name); - buf.push(` ${utf8Name}="${(0, _core_utils.encodeToXmlString)(value[$content])}"`); - } - - if (this[_dataValue] !== null) { - if (this[_dataValue]) { - buf.push(` xfa:dataNode="dataValue"`); - } else { - buf.push(` xfa:dataNode="dataGroup"`); - } - } - - if (!this[$content] && this[_children].length === 0) { - buf.push("/>"); - return; - } - - buf.push(">"); - - if (this[$content]) { - if (typeof this[$content] === "string") { - buf.push((0, _core_utils.encodeToXmlString)(this[$content])); - } else { - this[$content][$toString](buf); - } - } else { - for (const child of this[_children]) { - child[$toString](buf); - } - } - - buf.push(``); - } - - [$onChild](child) { - if (this[$content]) { - const node = new XmlObject(this[$namespaceId], "#text"); - this[$appendChild](node); - node[$content] = this[$content]; - this[$content] = ""; - } - - this[$appendChild](child); - return true; - } - - [$onText](str) { - this[$content] += str; - } - - [$finalize]() { - if (this[$content] && this[_children].length > 0) { - const node = new XmlObject(this[$namespaceId], "#text"); - this[$appendChild](node); - node[$content] = this[$content]; - delete this[$content]; - } - } - - [$toHTML]() { - if (this[$nodeName] === "#text") { - return _utils.HTMLResult.success({ - name: "#text", - value: this[$content] - }); - } - - return _utils.HTMLResult.EMPTY; - } - - [$getChildren](name = null) { - if (!name) { - return this[_children]; - } - - return this[_children].filter(c => c[$nodeName] === name); - } - - [$getAttributes]() { - return this[_attributes]; - } - - [$getChildrenByClass](name) { - const value = this[_attributes].get(name); - - if (value !== undefined) { - return value; - } - - return this[$getChildren](name); - } - - *[$getChildrenByNameIt](name, allTransparent) { - const value = this[_attributes].get(name); - - if (value) { - yield value; - } - - for (const child of this[_children]) { - if (child[$nodeName] === name) { - yield child; - } - - if (allTransparent) { - yield* child[$getChildrenByNameIt](name, allTransparent); - } - } - } - - *[$getAttributeIt](name, skipConsumed) { - const value = this[_attributes].get(name); - - if (value && (!skipConsumed || !value[$consumed])) { - yield value; - } - - for (const child of this[_children]) { - yield* child[$getAttributeIt](name, skipConsumed); - } - } - - *[$getRealChildrenByNameIt](name, allTransparent, skipConsumed) { - for (const child of this[_children]) { - if (child[$nodeName] === name && (!skipConsumed || !child[$consumed])) { - yield child; - } - - if (allTransparent) { - yield* child[$getRealChildrenByNameIt](name, allTransparent, skipConsumed); - } - } - } - - [$isDataValue]() { - if (this[_dataValue] === null) { - return this[_children].length === 0 || this[_children][0][$namespaceId] === _namespaces.NamespaceIds.xhtml.id; - } - - return this[_dataValue]; - } - - [$getDataValue]() { - if (this[_dataValue] === null) { - if (this[_children].length === 0) { - return this[$content].trim(); - } - - if (this[_children][0][$namespaceId] === _namespaces.NamespaceIds.xhtml.id) { - return this[_children][0][$text]().trim(); - } - - return null; - } - - return this[$content].trim(); - } - - [$setValue](value) { - value = value.value || ""; - this[$content] = value.toString(); - } - - [$dump](hasNS = false) { - const dumped = Object.create(null); - - if (hasNS) { - dumped.$ns = this[$namespaceId]; - } - - if (this[$content]) { - dumped.$content = this[$content]; - } - - dumped.$name = this[$nodeName]; - dumped.children = []; - - for (const child of this[_children]) { - dumped.children.push(child[$dump](hasNS)); - } - - dumped.attributes = Object.create(null); - - for (const [name, value] of this[_attributes]) { - dumped.attributes[name] = value[$content]; - } - - return dumped; - } - -} - -exports.XmlObject = XmlObject; - -class ContentObject extends XFAObject { - constructor(nsId, name) { - super(nsId, name); - this[$content] = ""; - } - - [$onText](text) { - this[$content] += text; - } - - [$finalize]() {} - -} - -exports.ContentObject = ContentObject; - -class OptionObject extends ContentObject { - constructor(nsId, name, options) { - super(nsId, name); - this[_options] = options; - } - - [$finalize]() { - this[$content] = (0, _utils.getKeyword)({ - data: this[$content], - defaultValue: this[_options][0], - validate: k => this[_options].includes(k) - }); - } - - [$clean](builder) { - super[$clean](builder); - delete this[_options]; - } - -} - -exports.OptionObject = OptionObject; - -class StringObject extends ContentObject { - [$finalize]() { - this[$content] = this[$content].trim(); - } - -} - -exports.StringObject = StringObject; - -class IntegerObject extends ContentObject { - constructor(nsId, name, defaultValue, validator) { - super(nsId, name); - this[_defaultValue] = defaultValue; - this[_validator] = validator; - } - - [$finalize]() { - this[$content] = (0, _utils.getInteger)({ - data: this[$content], - defaultValue: this[_defaultValue], - validate: this[_validator] - }); - } - - [$clean](builder) { - super[$clean](builder); - delete this[_defaultValue]; - delete this[_validator]; - } - -} - -exports.IntegerObject = IntegerObject; - -class Option01 extends IntegerObject { - constructor(nsId, name) { - super(nsId, name, 0, n => n === 1); - } - -} - -exports.Option01 = Option01; - -class Option10 extends IntegerObject { - constructor(nsId, name) { - super(nsId, name, 1, n => n === 0); - } - -} - -exports.Option10 = Option10; - -/***/ }), -/* 76 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.HTMLResult = void 0; -exports.getBBox = getBBox; -exports.getColor = getColor; -exports.getFloat = getFloat; -exports.getInteger = getInteger; -exports.getKeyword = getKeyword; -exports.getMeasurement = getMeasurement; -exports.getRatio = getRatio; -exports.getRelevant = getRelevant; -exports.getStringOption = getStringOption; -exports.stripQuotes = stripQuotes; - -var _util = __w_pdfjs_require__(2); - -const dimConverters = { - pt: x => x, - cm: x => x / 2.54 * 72, - mm: x => x / (10 * 2.54) * 72, - in: x => x * 72, - px: x => x -}; -const measurementPattern = /([+-]?\d+\.?\d*)(.*)/; - -function stripQuotes(str) { - if (str.startsWith("'") || str.startsWith('"')) { - return str.slice(1, str.length - 1); - } - - return str; -} - -function getInteger({ - data, - defaultValue, - validate -}) { - if (!data) { - return defaultValue; - } - - data = data.trim(); - const n = parseInt(data, 10); - - if (!isNaN(n) && validate(n)) { - return n; - } - - return defaultValue; -} - -function getFloat({ - data, - defaultValue, - validate -}) { - if (!data) { - return defaultValue; - } - - data = data.trim(); - const n = parseFloat(data); - - if (!isNaN(n) && validate(n)) { - return n; - } - - return defaultValue; -} - -function getKeyword({ - data, - defaultValue, - validate -}) { - if (!data) { - return defaultValue; - } - - data = data.trim(); - - if (validate(data)) { - return data; - } - - return defaultValue; -} - -function getStringOption(data, options) { - return getKeyword({ - data, - defaultValue: options[0], - validate: k => options.includes(k) - }); -} - -function getMeasurement(str, def = "0") { - def = def || "0"; - - if (!str) { - return getMeasurement(def); - } - - const match = str.trim().match(measurementPattern); - - if (!match) { - return getMeasurement(def); - } - - const [, valueStr, unit] = match; - const value = parseFloat(valueStr); - - if (isNaN(value)) { - return getMeasurement(def); - } - - if (value === 0) { - return 0; - } - - const conv = dimConverters[unit]; - - if (conv) { - return conv(value); - } - - return value; -} - -function getRatio(data) { - if (!data) { - return { - num: 1, - den: 1 - }; - } - - const ratio = data.trim().split(/\s*:\s*/).map(x => parseFloat(x)).filter(x => !isNaN(x)); - - if (ratio.length === 1) { - ratio.push(1); - } - - if (ratio.length === 0) { - return { - num: 1, - den: 1 - }; - } - - const [num, den] = ratio; - return { - num, - den - }; -} - -function getRelevant(data) { - if (!data) { - return []; - } - - return data.trim().split(/\s+/).map(e => { - return { - excluded: e[0] === "-", - viewname: e.substring(1) - }; - }); -} - -function getColor(data, def = [0, 0, 0]) { - let [r, g, b] = def; - - if (!data) { - return { - r, - g, - b - }; - } - - const color = data.trim().split(/\s*,\s*/).map(c => Math.min(Math.max(0, parseInt(c.trim(), 10)), 255)).map(c => isNaN(c) ? 0 : c); - - if (color.length < 3) { - return { - r, - g, - b - }; - } - - [r, g, b] = color; - return { - r, - g, - b - }; -} - -function getBBox(data) { - const def = -1; - - if (!data) { - return { - x: def, - y: def, - width: def, - height: def - }; - } - - const bbox = data.trim().split(/\s*,\s*/).map(m => getMeasurement(m, "-1")); - - if (bbox.length < 4 || bbox[2] < 0 || bbox[3] < 0) { - return { - x: def, - y: def, - width: def, - height: def - }; - } - - const [x, y, width, height] = bbox; - return { - x, - y, - width, - height - }; -} - -class HTMLResult { - static get FAILURE() { - return (0, _util.shadow)(this, "FAILURE", new HTMLResult(false, null, null, null)); - } - - static get EMPTY() { - return (0, _util.shadow)(this, "EMPTY", new HTMLResult(true, null, null, null)); - } - - constructor(success, html, bbox, breakNode) { - this.success = success; - this.html = html; - this.bbox = bbox; - this.breakNode = breakNode; - } - - isBreak() { - return !!this.breakNode; - } - - static breakNode(node) { - return new HTMLResult(false, null, null, node); - } - - static success(html, bbox = null) { - return new HTMLResult(true, html, bbox, null); - } - -} - -exports.HTMLResult = HTMLResult; - -/***/ }), -/* 77 */ -/***/ ((__unused_webpack_module, exports) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.NamespaceIds = exports.$buildXFAObject = void 0; -const $buildXFAObject = Symbol(); -exports.$buildXFAObject = $buildXFAObject; -const NamespaceIds = { - config: { - id: 0, - check: ns => ns.startsWith("http://www.xfa.org/schema/xci/") - }, - connectionSet: { - id: 1, - check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-connection-set/") - }, - datasets: { - id: 2, - check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-data/") - }, - form: { - id: 3, - check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-form/") - }, - localeSet: { - id: 4, - check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-locale-set/") - }, - pdf: { - id: 5, - check: ns => ns === "http://ns.adobe.com/xdp/pdf/" - }, - signature: { - id: 6, - check: ns => ns === "http://www.w3.org/2000/09/xmldsig#" - }, - sourceSet: { - id: 7, - check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-source-set/") - }, - stylesheet: { - id: 8, - check: ns => ns === "http://www.w3.org/1999/XSL/Transform" - }, - template: { - id: 9, - check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-template/") - }, - xdc: { - id: 10, - check: ns => ns.startsWith("http://www.xfa.org/schema/xdc/") - }, - xdp: { - id: 11, - check: ns => ns === "http://ns.adobe.com/xdp/" - }, - xfdf: { - id: 12, - check: ns => ns === "http://ns.adobe.com/xfdf/" - }, - xhtml: { - id: 13, - check: ns => ns === "http://www.w3.org/1999/xhtml" - }, - xmpmeta: { - id: 14, - check: ns => ns === "http://ns.adobe.com/xmpmeta/" - } -}; -exports.NamespaceIds = NamespaceIds; - -/***/ }), -/* 78 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.createDataNode = createDataNode; -exports.searchNode = searchNode; - -var _xfa_object = __w_pdfjs_require__(75); - -var _namespaces = __w_pdfjs_require__(77); - -var _util = __w_pdfjs_require__(2); - -const namePattern = /^[^.[]+/; -const indexPattern = /^[^\]]+/; -const operators = { - dot: 0, - dotDot: 1, - dotHash: 2, - dotBracket: 3, - dotParen: 4 -}; -const shortcuts = new Map([["$data", (root, current) => root.datasets ? root.datasets.data : root], ["$record", (root, current) => (root.datasets ? root.datasets.data : root)[_xfa_object.$getChildren]()[0]], ["$template", (root, current) => root.template], ["$connectionSet", (root, current) => root.connectionSet], ["$form", (root, current) => root.form], ["$layout", (root, current) => root.layout], ["$host", (root, current) => root.host], ["$dataWindow", (root, current) => root.dataWindow], ["$event", (root, current) => root.event], ["!", (root, current) => root.datasets], ["$xfa", (root, current) => root], ["xfa", (root, current) => root], ["$", (root, current) => current]]); -const somCache = new WeakMap(); -const NS_DATASETS = _namespaces.NamespaceIds.datasets.id; - -function parseIndex(index) { - index = index.trim(); - - if (index === "*") { - return Infinity; - } - - return parseInt(index, 10) || 0; -} - -function parseExpression(expr, dotDotAllowed, noExpr = true) { - let match = expr.match(namePattern); - - if (!match) { - return null; - } - - let [name] = match; - const parsed = [{ - name, - cacheName: "." + name, - index: 0, - js: null, - formCalc: null, - operator: operators.dot - }]; - let pos = name.length; - - while (pos < expr.length) { - const spos = pos; - const char = expr.charAt(pos++); - - if (char === "[") { - match = expr.slice(pos).match(indexPattern); - - if (!match) { - (0, _util.warn)("XFA - Invalid index in SOM expression"); - return null; - } - - parsed[parsed.length - 1].index = parseIndex(match[0]); - pos += match[0].length + 1; - continue; - } - - let operator; - - switch (expr.charAt(pos)) { - case ".": - if (!dotDotAllowed) { - return null; - } - - pos++; - operator = operators.dotDot; - break; - - case "#": - pos++; - operator = operators.dotHash; - break; - - case "[": - if (noExpr) { - (0, _util.warn)("XFA - SOM expression contains a FormCalc subexpression which is not supported for now."); - return null; - } - - operator = operators.dotBracket; - break; - - case "(": - if (noExpr) { - (0, _util.warn)("XFA - SOM expression contains a JavaScript subexpression which is not supported for now."); - return null; - } - - operator = operators.dotParen; - break; - - default: - operator = operators.dot; - break; - } - - match = expr.slice(pos).match(namePattern); - - if (!match) { - break; - } - - [name] = match; - pos += name.length; - parsed.push({ - name, - cacheName: expr.slice(spos, pos), - operator, - index: 0, - js: null, - formCalc: null - }); - } - - return parsed; -} - -function searchNode(root, container, expr, dotDotAllowed = true, useCache = true) { - const parsed = parseExpression(expr, dotDotAllowed); - - if (!parsed) { - return null; - } - - const fn = shortcuts.get(parsed[0].name); - let i = 0; - let isQualified; - - if (fn) { - isQualified = true; - root = [fn(root, container)]; - i = 1; - } else { - isQualified = container === null; - root = [container || root]; - } - - for (let ii = parsed.length; i < ii; i++) { - const { - name, - cacheName, - operator, - index - } = parsed[i]; - const nodes = []; - - for (const node of root) { - if (!(node instanceof _xfa_object.XFAObject)) { - continue; - } - - let children, cached; - - if (useCache) { - cached = somCache.get(node); - - if (!cached) { - cached = new Map(); - somCache.set(node, cached); - } - - children = cached.get(cacheName); - } - - if (!children) { - switch (operator) { - case operators.dot: - children = node[_xfa_object.$getChildrenByName](name, false); - break; - - case operators.dotDot: - children = node[_xfa_object.$getChildrenByName](name, true); - break; - - case operators.dotHash: - children = node[_xfa_object.$getChildrenByClass](name); - - if (children instanceof _xfa_object.XFAObjectArray) { - children = children.children; - } else { - children = [children]; - } - - break; - } - - if (useCache) { - cached.set(cacheName, children); - } - } - - if (children.length > 0) { - nodes.push(children); - } - } - - if (nodes.length === 0 && !isQualified && i === 0) { - const parent = container[_xfa_object.$getParent](); - - container = parent; - - if (!container) { - return null; - } - - i = -1; - root = [container]; - continue; - } - - if (isFinite(index)) { - root = nodes.filter(node => index < node.length).map(node => node[index]); - } else { - root = nodes.reduce((acc, node) => acc.concat(node), []); - } - } - - if (root.length === 0) { - return null; - } - - return root; -} - -function createNodes(root, path) { - let node = null; - - for (const { - name, - index - } of path) { - for (let i = 0, ii = !isFinite(index) ? 0 : index; i <= ii; i++) { - const nsId = root[_xfa_object.$namespaceId] === NS_DATASETS ? -1 : root[_xfa_object.$namespaceId]; - node = new _xfa_object.XmlObject(nsId, name); - - root[_xfa_object.$appendChild](node); - } - - root = node; - } - - return node; -} - -function createDataNode(root, container, expr) { - const parsed = parseExpression(expr); - - if (!parsed) { - return null; - } - - if (parsed.some(x => x.operator === operators.dotDot)) { - return null; - } - - const fn = shortcuts.get(parsed[0].name); - let i = 0; - - if (fn) { - root = fn(root, container); - i = 1; - } else { - root = container || root; - } - - for (let ii = parsed.length; i < ii; i++) { - const { - name, - operator, - index - } = parsed[i]; - - if (!isFinite(index)) { - parsed[i].index = 0; - return createNodes(root, parsed.slice(i)); - } - - let children; - - switch (operator) { - case operators.dot: - children = root[_xfa_object.$getChildrenByName](name, false); - break; - - case operators.dotDot: - children = root[_xfa_object.$getChildrenByName](name, true); - break; - - case operators.dotHash: - children = root[_xfa_object.$getChildrenByClass](name); - - if (children instanceof _xfa_object.XFAObjectArray) { - children = children.children; - } else { - children = [children]; - } - - break; - } - - if (children.length === 0) { - return createNodes(root, parsed.slice(i)); - } - - if (index < children.length) { - const child = children[index]; - - if (!(child instanceof _xfa_object.XFAObject)) { - (0, _util.warn)(`XFA - Cannot create a node.`); - return null; - } - - root = child; - } else { - parsed[i].index = index - children.length; - return createNodes(root, parsed.slice(i)); - } - } - - return null; -} - -/***/ }), -/* 79 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Binder = void 0; - -var _xfa_object = __w_pdfjs_require__(75); - -var _template = __w_pdfjs_require__(80); - -var _som = __w_pdfjs_require__(78); - -var _namespaces = __w_pdfjs_require__(77); - -var _util = __w_pdfjs_require__(2); - -const NS_DATASETS = _namespaces.NamespaceIds.datasets.id; - -function createText(content) { - const node = new _template.Text({}); - node[_xfa_object.$content] = content; - return node; -} - -class Binder { - constructor(root) { - this.root = root; - this.datasets = root.datasets; - - if (root.datasets && root.datasets.data) { - this.data = root.datasets.data; - } else { - this.data = new _xfa_object.XmlObject(_namespaces.NamespaceIds.datasets.id, "data"); - } - - this.emptyMerge = this.data[_xfa_object.$getChildren]().length === 0; - this.root.form = this.form = root.template[_xfa_object.$clone](); - } - - _isConsumeData() { - return !this.emptyMerge && this._mergeMode; - } - - _isMatchTemplate() { - return !this._isConsumeData(); - } - - bind() { - this._bindElement(this.form, this.data); - - return this.form; - } - - getData() { - return this.data; - } - - _bindValue(formNode, data, picture) { - formNode[_xfa_object.$data] = data; - - if (formNode[_xfa_object.$hasSettableValue]()) { - if (data[_xfa_object.$isDataValue]()) { - const value = data[_xfa_object.$getDataValue](); - - formNode[_xfa_object.$setValue](createText(value)); - } else if (formNode instanceof _template.Field && formNode.ui && formNode.ui.choiceList && formNode.ui.choiceList.open === "multiSelect") { - const value = data[_xfa_object.$getChildren]().map(child => child[_xfa_object.$content].trim()).join("\n"); - - formNode[_xfa_object.$setValue](createText(value)); - } else if (this._isConsumeData()) { - (0, _util.warn)(`XFA - Nodes haven't the same type.`); - } - } else if (!data[_xfa_object.$isDataValue]() || this._isMatchTemplate()) { - this._bindElement(formNode, data); - } else { - (0, _util.warn)(`XFA - Nodes haven't the same type.`); - } - } - - _findDataByNameToConsume(name, isValue, dataNode, global) { - if (!name) { - return null; - } - - let generator, match; - - for (let i = 0; i < 3; i++) { - generator = dataNode[_xfa_object.$getRealChildrenByNameIt](name, false, true); - - while (true) { - match = generator.next().value; - - if (!match) { - break; - } - - if (isValue === match[_xfa_object.$isDataValue]()) { - return match; - } - } - - if (dataNode[_xfa_object.$namespaceId] === _namespaces.NamespaceIds.datasets.id && dataNode[_xfa_object.$nodeName] === "data") { - break; - } - - dataNode = dataNode[_xfa_object.$getParent](); - } - - if (!global) { - return null; - } - - generator = this.data[_xfa_object.$getRealChildrenByNameIt](name, true, false); - match = generator.next().value; - - if (match) { - return match; - } - - generator = this.data[_xfa_object.$getAttributeIt](name, true); - match = generator.next().value; - - if (match && match[_xfa_object.$isDataValue]()) { - return match; - } - - return null; - } - - _setProperties(formNode, dataNode) { - if (!formNode.hasOwnProperty("setProperty")) { - return; - } - - for (const { - ref, - target, - connection - } of formNode.setProperty.children) { - if (connection) { - continue; - } - - if (!ref) { - continue; - } - - const nodes = (0, _som.searchNode)(this.root, dataNode, ref, false, false); - - if (!nodes) { - (0, _util.warn)(`XFA - Invalid reference: ${ref}.`); - continue; - } - - const [node] = nodes; - - if (!node[_xfa_object.$isDescendent](this.data)) { - (0, _util.warn)(`XFA - Invalid node: must be a data node.`); - continue; - } - - const targetNodes = (0, _som.searchNode)(this.root, formNode, target, false, false); - - if (!targetNodes) { - (0, _util.warn)(`XFA - Invalid target: ${target}.`); - continue; - } - - const [targetNode] = targetNodes; - - if (!targetNode[_xfa_object.$isDescendent](formNode)) { - (0, _util.warn)(`XFA - Invalid target: must be a property or subproperty.`); - continue; - } - - const targetParent = targetNode[_xfa_object.$getParent](); - - if (targetNode instanceof _template.SetProperty || targetParent instanceof _template.SetProperty) { - (0, _util.warn)(`XFA - Invalid target: cannot be a setProperty or one of its properties.`); - continue; - } - - if (targetNode instanceof _template.BindItems || targetParent instanceof _template.BindItems) { - (0, _util.warn)(`XFA - Invalid target: cannot be a bindItems or one of its properties.`); - continue; - } - - const content = node[_xfa_object.$text](); - - const name = targetNode[_xfa_object.$nodeName]; - - if (targetNode instanceof _xfa_object.XFAAttribute) { - const attrs = Object.create(null); - attrs[name] = content; - const obj = Reflect.construct(Object.getPrototypeOf(targetParent).constructor, [attrs]); - targetParent[name] = obj[name]; - continue; - } - - if (!targetNode.hasOwnProperty(_xfa_object.$content)) { - (0, _util.warn)(`XFA - Invalid node to use in setProperty`); - continue; - } - - targetNode[_xfa_object.$data] = node; - targetNode[_xfa_object.$content] = content; - - targetNode[_xfa_object.$finalize](); - } - } - - _bindItems(formNode, dataNode) { - if (!formNode.hasOwnProperty("items") || !formNode.hasOwnProperty("bindItems") || formNode.bindItems.isEmpty()) { - return; - } - - for (const item of formNode.items.children) { - formNode[_xfa_object.$removeChild](item); - } - - formNode.items.clear(); - const labels = new _template.Items({}); - const values = new _template.Items({}); - - formNode[_xfa_object.$appendChild](labels); - - formNode.items.push(labels); - - formNode[_xfa_object.$appendChild](values); - - formNode.items.push(values); - - for (const { - ref, - labelRef, - valueRef, - connection - } of formNode.bindItems.children) { - if (connection) { - continue; - } - - if (!ref) { - continue; - } - - const nodes = (0, _som.searchNode)(this.root, dataNode, ref, false, false); - - if (!nodes) { - (0, _util.warn)(`XFA - Invalid reference: ${ref}.`); - continue; - } - - for (const node of nodes) { - if (!node[_xfa_object.$isDescendent](this.datasets)) { - (0, _util.warn)(`XFA - Invalid ref (${ref}): must be a datasets child.`); - continue; - } - - const labelNodes = (0, _som.searchNode)(this.root, node, labelRef, true, false); - - if (!labelNodes) { - (0, _util.warn)(`XFA - Invalid label: ${labelRef}.`); - continue; - } - - const [labelNode] = labelNodes; - - if (!labelNode[_xfa_object.$isDescendent](this.datasets)) { - (0, _util.warn)(`XFA - Invalid label: must be a datasets child.`); - continue; - } - - const valueNodes = (0, _som.searchNode)(this.root, node, valueRef, true, false); - - if (!valueNodes) { - (0, _util.warn)(`XFA - Invalid value: ${valueRef}.`); - continue; - } - - const [valueNode] = valueNodes; - - if (!valueNode[_xfa_object.$isDescendent](this.datasets)) { - (0, _util.warn)(`XFA - Invalid value: must be a datasets child.`); - continue; - } - - const label = createText(labelNode[_xfa_object.$text]()); - const value = createText(valueNode[_xfa_object.$text]()); - - labels[_xfa_object.$appendChild](label); - - labels.text.push(label); - - values[_xfa_object.$appendChild](value); - - values.text.push(value); - } - } - } - - _bindOccurrences(formNode, matches, picture) { - let baseClone; - - if (matches.length > 1) { - baseClone = formNode[_xfa_object.$clone](); - - baseClone[_xfa_object.$removeChild](baseClone.occur); - - baseClone.occur = null; - } - - this._bindValue(formNode, matches[0], picture); - - this._setProperties(formNode, matches[0]); - - this._bindItems(formNode, matches[0]); - - if (matches.length === 1) { - return; - } - - const parent = formNode[_xfa_object.$getParent](); - - const name = formNode[_xfa_object.$nodeName]; - - const pos = parent[_xfa_object.$indexOf](formNode); - - for (let i = 1, ii = matches.length; i < ii; i++) { - const match = matches[i]; - - const clone = baseClone[_xfa_object.$clone](); - - parent[name].push(clone); - - parent[_xfa_object.$insertAt](pos + i, clone); - - this._bindValue(clone, match, picture); - - this._setProperties(clone, match); - - this._bindItems(clone, match); - } - } - - _createOccurrences(formNode) { - if (!this.emptyMerge) { - return; - } - - const { - occur - } = formNode; - - if (!occur || occur.initial <= 1) { - return; - } - - const parent = formNode[_xfa_object.$getParent](); - - const name = formNode[_xfa_object.$nodeName]; - - if (!(parent[name] instanceof _xfa_object.XFAObjectArray)) { - return; - } - - let currentNumber; - - if (formNode.name) { - currentNumber = parent[name].children.filter(e => e.name === formNode.name).length; - } else { - currentNumber = parent[name].children.length; - } - - const pos = parent[_xfa_object.$indexOf](formNode) + 1; - const ii = occur.initial - currentNumber; - - if (ii) { - const nodeClone = formNode[_xfa_object.$clone](); - - nodeClone[_xfa_object.$removeChild](nodeClone.occur); - - nodeClone.occur = null; - parent[name].push(nodeClone); - - parent[_xfa_object.$insertAt](pos, nodeClone); - - for (let i = 1; i < ii; i++) { - const clone = nodeClone[_xfa_object.$clone](); - - parent[name].push(clone); - - parent[_xfa_object.$insertAt](pos + i, clone); - } - } - } - - _getOccurInfo(formNode) { - const { - name, - occur - } = formNode; - - if (!occur || !name) { - return [1, 1]; - } - - const max = occur.max === -1 ? Infinity : occur.max; - return [occur.min, max]; - } - - _setAndBind(formNode, dataNode) { - this._setProperties(formNode, dataNode); - - this._bindItems(formNode, dataNode); - - this._bindElement(formNode, dataNode); - } - - _bindElement(formNode, dataNode) { - const uselessNodes = []; - - this._createOccurrences(formNode); - - for (const child of formNode[_xfa_object.$getChildren]()) { - if (child[_xfa_object.$data]) { - continue; - } - - if (this._mergeMode === undefined && child[_xfa_object.$nodeName] === "subform") { - this._mergeMode = child.mergeMode === "consumeData"; - - const dataChildren = dataNode[_xfa_object.$getChildren](); - - if (dataChildren.length > 0) { - this._bindOccurrences(child, [dataChildren[0]], null); - } else if (this.emptyMerge) { - const nsId = dataNode[_xfa_object.$namespaceId] === NS_DATASETS ? -1 : dataNode[_xfa_object.$namespaceId]; - const dataChild = child[_xfa_object.$data] = new _xfa_object.XmlObject(nsId, child.name || "root"); - - dataNode[_xfa_object.$appendChild](dataChild); - - this._bindElement(child, dataChild); - } - - continue; - } - - if (!child[_xfa_object.$isBindable]()) { - continue; - } - - let global = false; - let picture = null; - let ref = null; - let match = null; - - if (child.bind) { - switch (child.bind.match) { - case "none": - this._setAndBind(child, dataNode); - - continue; - - case "global": - global = true; - break; - - case "dataRef": - if (!child.bind.ref) { - (0, _util.warn)(`XFA - ref is empty in node ${child[_xfa_object.$nodeName]}.`); - - this._setAndBind(child, dataNode); - - continue; - } - - ref = child.bind.ref; - break; - } - - if (child.bind.picture) { - picture = child.bind.picture[_xfa_object.$content]; - } - } - - const [min, max] = this._getOccurInfo(child); - - if (ref) { - match = (0, _som.searchNode)(this.root, dataNode, ref, true, false); - - if (match === null) { - match = (0, _som.createDataNode)(this.data, dataNode, ref); - - if (!match) { - continue; - } - - if (this._isConsumeData()) { - match[_xfa_object.$consumed] = true; - } - - this._setAndBind(child, match); - - continue; - } else { - if (this._isConsumeData()) { - match = match.filter(node => !node[_xfa_object.$consumed]); - } - - if (match.length > max) { - match = match.slice(0, max); - } else if (match.length === 0) { - match = null; - } - - if (match && this._isConsumeData()) { - match.forEach(node => { - node[_xfa_object.$consumed] = true; - }); - } - } - } else { - if (!child.name) { - this._setAndBind(child, dataNode); - - continue; - } - - if (this._isConsumeData()) { - const matches = []; - - while (matches.length < max) { - const found = this._findDataByNameToConsume(child.name, child[_xfa_object.$hasSettableValue](), dataNode, global); - - if (!found) { - break; - } - - found[_xfa_object.$consumed] = true; - matches.push(found); - } - - match = matches.length > 0 ? matches : null; - } else { - match = dataNode[_xfa_object.$getRealChildrenByNameIt](child.name, false, this.emptyMerge).next().value; - - if (!match) { - if (min === 0) { - uselessNodes.push(child); - continue; - } - - const nsId = dataNode[_xfa_object.$namespaceId] === NS_DATASETS ? -1 : dataNode[_xfa_object.$namespaceId]; - match = child[_xfa_object.$data] = new _xfa_object.XmlObject(nsId, child.name); - - if (this.emptyMerge) { - match[_xfa_object.$consumed] = true; - } - - dataNode[_xfa_object.$appendChild](match); - - this._setAndBind(child, match); - - continue; - } - - if (this.emptyMerge) { - match[_xfa_object.$consumed] = true; - } - - match = [match]; - } - } - - if (match) { - this._bindOccurrences(child, match, picture); - } else if (min > 0) { - this._setAndBind(child, dataNode); - } else { - uselessNodes.push(child); - } - } - - uselessNodes.forEach(node => node[_xfa_object.$getParent]()[_xfa_object.$removeChild](node)); - } - -} - -exports.Binder = Binder; - -/***/ }), -/* 80 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Value = exports.Text = exports.TemplateNamespace = exports.Template = exports.SetProperty = exports.Items = exports.Field = exports.BindItems = void 0; - -var _xfa_object = __w_pdfjs_require__(75); - -var _namespaces = __w_pdfjs_require__(77); - -var _layout = __w_pdfjs_require__(81); - -var _html_utils = __w_pdfjs_require__(82); - -var _utils = __w_pdfjs_require__(76); - -var _util = __w_pdfjs_require__(2); - -var _fonts = __w_pdfjs_require__(83); - -var _core_utils = __w_pdfjs_require__(9); - -var _som = __w_pdfjs_require__(78); - -const TEMPLATE_NS_ID = _namespaces.NamespaceIds.template.id; -const SVG_NS = "http://www.w3.org/2000/svg"; -const MAX_ATTEMPTS_FOR_LRTB_LAYOUT = 2; -const MAX_EMPTY_PAGES = 3; -const DEFAULT_TAB_INDEX = 5000; -const HEADING_PATTERN = /^H(\d+)$/; -const MIMES = new Set(["image/gif", "image/jpeg", "image/jpg", "image/pjpeg", "image/png", "image/apng", "image/x-png", "image/bmp", "image/x-ms-bmp", "image/tiff", "image/tif", "application/octet-stream"]); -const IMAGES_HEADERS = [[[0x42, 0x4d], "image/bmp"], [[0xff, 0xd8, 0xff], "image/jpeg"], [[0x49, 0x49, 0x2a, 0x00], "image/tiff"], [[0x4d, 0x4d, 0x00, 0x2a], "image/tiff"], [[0x47, 0x49, 0x46, 0x38, 0x39, 0x61], "image/gif"], [[0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a], "image/png"]]; - -function getBorderDims(node) { - if (!node || !node.border) { - return { - w: 0, - h: 0 - }; - } - - const borderExtra = node.border[_xfa_object.$getExtra](); - - if (!borderExtra) { - return { - w: 0, - h: 0 - }; - } - - return { - w: borderExtra.widths[0] + borderExtra.widths[2] + borderExtra.insets[0] + borderExtra.insets[2], - h: borderExtra.widths[1] + borderExtra.widths[3] + borderExtra.insets[1] + borderExtra.insets[3] - }; -} - -function hasMargin(node) { - return node.margin && (node.margin.topInset || node.margin.rightInset || node.margin.bottomInset || node.margin.leftInset); -} - -function _setValue(templateNode, value) { - if (!templateNode.value) { - const nodeValue = new Value({}); - - templateNode[_xfa_object.$appendChild](nodeValue); - - templateNode.value = nodeValue; - } - - templateNode.value[_xfa_object.$setValue](value); -} - -function* getContainedChildren(node) { - for (const child of node[_xfa_object.$getChildren]()) { - if (child instanceof SubformSet) { - yield* child[_xfa_object.$getContainedChildren](); - continue; - } - - yield child; - } -} - -function setTabIndex(node) { - while (node) { - if (!node.traversal) { - node[_xfa_object.$tabIndex] = node[_xfa_object.$getParent]()[_xfa_object.$tabIndex]; - return; - } - - if (node[_xfa_object.$tabIndex]) { - return; - } - - let next = null; - - for (const child of node.traversal[_xfa_object.$getChildren]()) { - if (child.operation === "next") { - next = child; - break; - } - } - - if (!next || !next.ref) { - node[_xfa_object.$tabIndex] = node[_xfa_object.$getParent]()[_xfa_object.$tabIndex]; - return; - } - - const root = node[_xfa_object.$getTemplateRoot](); - - node[_xfa_object.$tabIndex] = ++root[_xfa_object.$tabIndex]; - - const ref = root[_xfa_object.$searchNode](next.ref, node); - - if (!ref) { - return; - } - - node = ref[0]; - } -} - -function applyAssist(obj, attributes) { - const assist = obj.assist; - - if (assist) { - const assistTitle = assist[_xfa_object.$toHTML](); - - if (assistTitle) { - attributes.title = assistTitle; - } - - const role = assist.role; - const match = role.match(HEADING_PATTERN); - - if (match) { - const ariaRole = "heading"; - const ariaLevel = match[1]; - attributes.role = ariaRole; - attributes["aria-level"] = ariaLevel; - } - } - - if (obj.layout === "table") { - attributes.role = "table"; - } else if (obj.layout === "row") { - attributes.role = "row"; - } else { - const parent = obj[_xfa_object.$getParent](); - - if (parent.layout === "row") { - if (parent.assist && parent.assist.role === "TH") { - attributes.role = "columnheader"; - } else { - attributes.role = "cell"; - } - } - } -} - -function ariaLabel(obj) { - if (!obj.assist) { - return null; - } - - const assist = obj.assist; - - if (assist.speak && assist.speak[_xfa_object.$content] !== "") { - return assist.speak[_xfa_object.$content]; - } - - if (assist.toolTip) { - return assist.toolTip[_xfa_object.$content]; - } - - return null; -} - -function valueToHtml(value) { - return _utils.HTMLResult.success({ - name: "div", - attributes: { - class: ["xfaRich"], - style: Object.create(null) - }, - children: [{ - name: "span", - attributes: { - style: Object.create(null) - }, - value - }] - }); -} - -function setFirstUnsplittable(node) { - const root = node[_xfa_object.$getTemplateRoot](); - - if (root[_xfa_object.$extra].firstUnsplittable === null) { - root[_xfa_object.$extra].firstUnsplittable = node; - root[_xfa_object.$extra].noLayoutFailure = true; - } -} - -function unsetFirstUnsplittable(node) { - const root = node[_xfa_object.$getTemplateRoot](); - - if (root[_xfa_object.$extra].firstUnsplittable === node) { - root[_xfa_object.$extra].noLayoutFailure = false; - } -} - -function handleBreak(node) { - if (node[_xfa_object.$extra]) { - return false; - } - - node[_xfa_object.$extra] = Object.create(null); - - if (node.targetType === "auto") { - return false; - } - - const root = node[_xfa_object.$getTemplateRoot](); - - let target = null; - - if (node.target) { - target = root[_xfa_object.$searchNode](node.target, node[_xfa_object.$getParent]()); - - if (!target) { - return false; - } - - target = target[0]; - } - - const { - currentPageArea, - currentContentArea - } = root[_xfa_object.$extra]; - - if (node.targetType === "pageArea") { - if (!(target instanceof PageArea)) { - target = null; - } - - if (node.startNew) { - node[_xfa_object.$extra].target = target || currentPageArea; - return true; - } else if (target && target !== currentPageArea) { - node[_xfa_object.$extra].target = target; - return true; - } - - return false; - } - - if (!(target instanceof ContentArea)) { - target = null; - } - - const pageArea = target && target[_xfa_object.$getParent](); - - let index; - let nextPageArea = pageArea; - - if (node.startNew) { - if (target) { - const contentAreas = pageArea.contentArea.children; - const indexForCurrent = contentAreas.indexOf(currentContentArea); - const indexForTarget = contentAreas.indexOf(target); - - if (indexForCurrent !== -1 && indexForCurrent < indexForTarget) { - nextPageArea = null; - } - - index = indexForTarget - 1; - } else { - index = currentPageArea.contentArea.children.indexOf(currentContentArea); - } - } else if (target && target !== currentContentArea) { - const contentAreas = pageArea.contentArea.children; - index = contentAreas.indexOf(target) - 1; - nextPageArea = pageArea === currentPageArea ? null : pageArea; - } else { - return false; - } - - node[_xfa_object.$extra].target = nextPageArea; - node[_xfa_object.$extra].index = index; - return true; -} - -function handleOverflow(node, extraNode, space) { - const root = node[_xfa_object.$getTemplateRoot](); - - const saved = root[_xfa_object.$extra].noLayoutFailure; - const savedMethod = extraNode[_xfa_object.$getSubformParent]; - - extraNode[_xfa_object.$getSubformParent] = () => node; - - root[_xfa_object.$extra].noLayoutFailure = true; - - const res = extraNode[_xfa_object.$toHTML](space); - - node[_xfa_object.$addHTML](res.html, res.bbox); - - root[_xfa_object.$extra].noLayoutFailure = saved; - extraNode[_xfa_object.$getSubformParent] = savedMethod; -} - -class AppearanceFilter extends _xfa_object.StringObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "appearanceFilter"); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class Arc extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "arc", true); - this.circular = (0, _utils.getInteger)({ - data: attributes.circular, - defaultValue: 0, - validate: x => x === 1 - }); - this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]); - this.id = attributes.id || ""; - this.startAngle = (0, _utils.getFloat)({ - data: attributes.startAngle, - defaultValue: 0, - validate: x => true - }); - this.sweepAngle = (0, _utils.getFloat)({ - data: attributes.sweepAngle, - defaultValue: 360, - validate: x => true - }); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.edge = null; - this.fill = null; - } - - [_xfa_object.$toHTML]() { - const edge = this.edge ? this.edge : new Edge({}); - - const edgeStyle = edge[_xfa_object.$toStyle](); - - const style = Object.create(null); - - if (this.fill && this.fill.presence === "visible") { - Object.assign(style, this.fill[_xfa_object.$toStyle]()); - } else { - style.fill = "transparent"; - } - - style.strokeWidth = (0, _html_utils.measureToString)(edge.presence === "visible" ? edge.thickness : 0); - style.stroke = edgeStyle.color; - let arc; - const attributes = { - xmlns: SVG_NS, - style: { - width: "100%", - height: "100%", - overflow: "visible" - } - }; - - if (this.sweepAngle === 360) { - arc = { - name: "ellipse", - attributes: { - xmlns: SVG_NS, - cx: "50%", - cy: "50%", - rx: "50%", - ry: "50%", - style - } - }; - } else { - const startAngle = this.startAngle * Math.PI / 180; - const sweepAngle = this.sweepAngle * Math.PI / 180; - const largeArc = this.sweepAngle > 180 ? 1 : 0; - const [x1, y1, x2, y2] = [50 * (1 + Math.cos(startAngle)), 50 * (1 - Math.sin(startAngle)), 50 * (1 + Math.cos(startAngle + sweepAngle)), 50 * (1 - Math.sin(startAngle + sweepAngle))]; - arc = { - name: "path", - attributes: { - xmlns: SVG_NS, - d: `M ${x1} ${y1} A 50 50 0 ${largeArc} 0 ${x2} ${y2}`, - vectorEffect: "non-scaling-stroke", - style - } - }; - Object.assign(attributes, { - viewBox: "0 0 100 100", - preserveAspectRatio: "none" - }); - } - - const svg = { - name: "svg", - children: [arc], - attributes - }; - - const parent = this[_xfa_object.$getParent]()[_xfa_object.$getParent](); - - if (hasMargin(parent)) { - return _utils.HTMLResult.success({ - name: "div", - attributes: { - style: { - display: "inline", - width: "100%", - height: "100%" - } - }, - children: [svg] - }); - } - - svg.attributes.style.position = "absolute"; - return _utils.HTMLResult.success(svg); - } - -} - -class Area extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "area", true); - this.colSpan = (0, _utils.getInteger)({ - data: attributes.colSpan, - defaultValue: 1, - validate: n => n >= 1 || n === -1 - }); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.relevant = (0, _utils.getRelevant)(attributes.relevant); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.x = (0, _utils.getMeasurement)(attributes.x, "0pt"); - this.y = (0, _utils.getMeasurement)(attributes.y, "0pt"); - this.desc = null; - this.extras = null; - this.area = new _xfa_object.XFAObjectArray(); - this.draw = new _xfa_object.XFAObjectArray(); - this.exObject = new _xfa_object.XFAObjectArray(); - this.exclGroup = new _xfa_object.XFAObjectArray(); - this.field = new _xfa_object.XFAObjectArray(); - this.subform = new _xfa_object.XFAObjectArray(); - this.subformSet = new _xfa_object.XFAObjectArray(); - } - - *[_xfa_object.$getContainedChildren]() { - yield* getContainedChildren(this); - } - - [_xfa_object.$isTransparent]() { - return true; - } - - [_xfa_object.$isBindable]() { - return true; - } - - [_xfa_object.$addHTML](html, bbox) { - const [x, y, w, h] = bbox; - this[_xfa_object.$extra].width = Math.max(this[_xfa_object.$extra].width, x + w); - this[_xfa_object.$extra].height = Math.max(this[_xfa_object.$extra].height, y + h); - - this[_xfa_object.$extra].children.push(html); - } - - [_xfa_object.$getAvailableSpace]() { - return this[_xfa_object.$extra].availableSpace; - } - - [_xfa_object.$toHTML](availableSpace) { - const style = (0, _html_utils.toStyle)(this, "position"); - const attributes = { - style, - id: this[_xfa_object.$uid], - class: ["xfaArea"] - }; - - if ((0, _html_utils.isPrintOnly)(this)) { - attributes.class.push("xfaPrintOnly"); - } - - if (this.name) { - attributes.xfaName = this.name; - } - - const children = []; - this[_xfa_object.$extra] = { - children, - width: 0, - height: 0, - availableSpace - }; - - const result = this[_xfa_object.$childrenToHTML]({ - filter: new Set(["area", "draw", "field", "exclGroup", "subform", "subformSet"]), - include: true - }); - - if (!result.success) { - if (result.isBreak()) { - return result; - } - - delete this[_xfa_object.$extra]; - return _utils.HTMLResult.FAILURE; - } - - style.width = (0, _html_utils.measureToString)(this[_xfa_object.$extra].width); - style.height = (0, _html_utils.measureToString)(this[_xfa_object.$extra].height); - const html = { - name: "div", - attributes, - children - }; - const bbox = [this.x, this.y, this[_xfa_object.$extra].width, this[_xfa_object.$extra].height]; - delete this[_xfa_object.$extra]; - return _utils.HTMLResult.success(html, bbox); - } - -} - -class Assist extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "assist", true); - this.id = attributes.id || ""; - this.role = attributes.role || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.speak = null; - this.toolTip = null; - } - - [_xfa_object.$toHTML]() { - return this.toolTip && this.toolTip[_xfa_object.$content] ? this.toolTip[_xfa_object.$content] : null; - } - -} - -class Barcode extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "barcode", true); - this.charEncoding = (0, _utils.getKeyword)({ - data: attributes.charEncoding ? attributes.charEncoding.toLowerCase() : "", - defaultValue: "", - validate: k => ["utf-8", "big-five", "fontspecific", "gbk", "gb-18030", "gb-2312", "ksc-5601", "none", "shift-jis", "ucs-2", "utf-16"].includes(k) || k.match(/iso-8859-\d{2}/) - }); - this.checksum = (0, _utils.getStringOption)(attributes.checksum, ["none", "1mod10", "1mod10_1mod11", "2mod10", "auto"]); - this.dataColumnCount = (0, _utils.getInteger)({ - data: attributes.dataColumnCount, - defaultValue: -1, - validate: x => x >= 0 - }); - this.dataLength = (0, _utils.getInteger)({ - data: attributes.dataLength, - defaultValue: -1, - validate: x => x >= 0 - }); - this.dataPrep = (0, _utils.getStringOption)(attributes.dataPrep, ["none", "flateCompress"]); - this.dataRowCount = (0, _utils.getInteger)({ - data: attributes.dataRowCount, - defaultValue: -1, - validate: x => x >= 0 - }); - this.endChar = attributes.endChar || ""; - this.errorCorrectionLevel = (0, _utils.getInteger)({ - data: attributes.errorCorrectionLevel, - defaultValue: -1, - validate: x => x >= 0 && x <= 8 - }); - this.id = attributes.id || ""; - this.moduleHeight = (0, _utils.getMeasurement)(attributes.moduleHeight, "5mm"); - this.moduleWidth = (0, _utils.getMeasurement)(attributes.moduleWidth, "0.25mm"); - this.printCheckDigit = (0, _utils.getInteger)({ - data: attributes.printCheckDigit, - defaultValue: 0, - validate: x => x === 1 - }); - this.rowColumnRatio = (0, _utils.getRatio)(attributes.rowColumnRatio); - this.startChar = attributes.startChar || ""; - this.textLocation = (0, _utils.getStringOption)(attributes.textLocation, ["below", "above", "aboveEmbedded", "belowEmbedded", "none"]); - this.truncate = (0, _utils.getInteger)({ - data: attributes.truncate, - defaultValue: 0, - validate: x => x === 1 - }); - this.type = (0, _utils.getStringOption)(attributes.type ? attributes.type.toLowerCase() : "", ["aztec", "codabar", "code2of5industrial", "code2of5interleaved", "code2of5matrix", "code2of5standard", "code3of9", "code3of9extended", "code11", "code49", "code93", "code128", "code128a", "code128b", "code128c", "code128sscc", "datamatrix", "ean8", "ean8add2", "ean8add5", "ean13", "ean13add2", "ean13add5", "ean13pwcd", "fim", "logmars", "maxicode", "msi", "pdf417", "pdf417macro", "plessey", "postauscust2", "postauscust3", "postausreplypaid", "postausstandard", "postukrm4scc", "postusdpbc", "postusimb", "postusstandard", "postus5zip", "qrcode", "rfid", "rss14", "rss14expanded", "rss14limited", "rss14stacked", "rss14stackedomni", "rss14truncated", "telepen", "ucc128", "ucc128random", "ucc128sscc", "upca", "upcaadd2", "upcaadd5", "upcapwcd", "upce", "upceadd2", "upceadd5", "upcean2", "upcean5", "upsmaxicode"]); - this.upsMode = (0, _utils.getStringOption)(attributes.upsMode, ["usCarrier", "internationalCarrier", "secureSymbol", "standardSymbol"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.wideNarrowRatio = (0, _utils.getRatio)(attributes.wideNarrowRatio); - this.encrypt = null; - this.extras = null; - } - -} - -class Bind extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "bind", true); - this.match = (0, _utils.getStringOption)(attributes.match, ["once", "dataRef", "global", "none"]); - this.ref = attributes.ref || ""; - this.picture = null; - } - -} - -class BindItems extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "bindItems"); - this.connection = attributes.connection || ""; - this.labelRef = attributes.labelRef || ""; - this.ref = attributes.ref || ""; - this.valueRef = attributes.valueRef || ""; - } - -} - -exports.BindItems = BindItems; - -class Bookend extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "bookend"); - this.id = attributes.id || ""; - this.leader = attributes.leader || ""; - this.trailer = attributes.trailer || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class BooleanElement extends _xfa_object.Option01 { - constructor(attributes) { - super(TEMPLATE_NS_ID, "boolean"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - - [_xfa_object.$toHTML](availableSpace) { - return valueToHtml(this[_xfa_object.$content] === 1 ? "1" : "0"); - } - -} - -class Border extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "border", true); - this.break = (0, _utils.getStringOption)(attributes.break, ["close", "open"]); - this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]); - this.id = attributes.id || ""; - this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); - this.relevant = (0, _utils.getRelevant)(attributes.relevant); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.corner = new _xfa_object.XFAObjectArray(4); - this.edge = new _xfa_object.XFAObjectArray(4); - this.extras = null; - this.fill = null; - this.margin = null; - } - - [_xfa_object.$getExtra]() { - if (!this[_xfa_object.$extra]) { - const edges = this.edge.children.slice(); - - if (edges.length < 4) { - const defaultEdge = edges[edges.length - 1] || new Edge({}); - - for (let i = edges.length; i < 4; i++) { - edges.push(defaultEdge); - } - } - - const widths = edges.map(edge => edge.thickness); - const insets = [0, 0, 0, 0]; - - if (this.margin) { - insets[0] = this.margin.topInset; - insets[1] = this.margin.rightInset; - insets[2] = this.margin.bottomInset; - insets[3] = this.margin.leftInset; - } - - this[_xfa_object.$extra] = { - widths, - insets, - edges - }; - } - - return this[_xfa_object.$extra]; - } - - [_xfa_object.$toStyle]() { - const { - edges - } = this[_xfa_object.$getExtra](); - - const edgeStyles = edges.map(node => { - const style = node[_xfa_object.$toStyle](); - - style.color = style.color || "#000000"; - return style; - }); - const style = Object.create(null); - - if (this.margin) { - Object.assign(style, this.margin[_xfa_object.$toStyle]()); - } - - if (this.fill && this.fill.presence === "visible") { - Object.assign(style, this.fill[_xfa_object.$toStyle]()); - } - - if (this.corner.children.some(node => node.radius !== 0)) { - const cornerStyles = this.corner.children.map(node => node[_xfa_object.$toStyle]()); - - if (cornerStyles.length === 2 || cornerStyles.length === 3) { - const last = cornerStyles[cornerStyles.length - 1]; - - for (let i = cornerStyles.length; i < 4; i++) { - cornerStyles.push(last); - } - } - - style.borderRadius = cornerStyles.map(s => s.radius).join(" "); - } - - switch (this.presence) { - case "invisible": - case "hidden": - style.borderStyle = ""; - break; - - case "inactive": - style.borderStyle = "none"; - break; - - default: - style.borderStyle = edgeStyles.map(s => s.style).join(" "); - break; - } - - style.borderWidth = edgeStyles.map(s => s.width).join(" "); - style.borderColor = edgeStyles.map(s => s.color).join(" "); - return style; - } - -} - -class Break extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "break", true); - this.after = (0, _utils.getStringOption)(attributes.after, ["auto", "contentArea", "pageArea", "pageEven", "pageOdd"]); - this.afterTarget = attributes.afterTarget || ""; - this.before = (0, _utils.getStringOption)(attributes.before, ["auto", "contentArea", "pageArea", "pageEven", "pageOdd"]); - this.beforeTarget = attributes.beforeTarget || ""; - this.bookendLeader = attributes.bookendLeader || ""; - this.bookendTrailer = attributes.bookendTrailer || ""; - this.id = attributes.id || ""; - this.overflowLeader = attributes.overflowLeader || ""; - this.overflowTarget = attributes.overflowTarget || ""; - this.overflowTrailer = attributes.overflowTrailer || ""; - this.startNew = (0, _utils.getInteger)({ - data: attributes.startNew, - defaultValue: 0, - validate: x => x === 1 - }); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - } - -} - -class BreakAfter extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "breakAfter", true); - this.id = attributes.id || ""; - this.leader = attributes.leader || ""; - this.startNew = (0, _utils.getInteger)({ - data: attributes.startNew, - defaultValue: 0, - validate: x => x === 1 - }); - this.target = attributes.target || ""; - this.targetType = (0, _utils.getStringOption)(attributes.targetType, ["auto", "contentArea", "pageArea"]); - this.trailer = attributes.trailer || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.script = null; - } - -} - -class BreakBefore extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "breakBefore", true); - this.id = attributes.id || ""; - this.leader = attributes.leader || ""; - this.startNew = (0, _utils.getInteger)({ - data: attributes.startNew, - defaultValue: 0, - validate: x => x === 1 - }); - this.target = attributes.target || ""; - this.targetType = (0, _utils.getStringOption)(attributes.targetType, ["auto", "contentArea", "pageArea"]); - this.trailer = attributes.trailer || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.script = null; - } - - [_xfa_object.$toHTML](availableSpace) { - this[_xfa_object.$extra] = {}; - return _utils.HTMLResult.FAILURE; - } - -} - -class Button extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "button", true); - this.highlight = (0, _utils.getStringOption)(attributes.highlight, ["inverted", "none", "outline", "push"]); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - } - - [_xfa_object.$toHTML](availableSpace) { - const parent = this[_xfa_object.$getParent](); - - const grandpa = parent[_xfa_object.$getParent](); - - const htmlButton = { - name: "button", - attributes: { - id: this[_xfa_object.$uid], - class: ["xfaButton"], - style: {} - }, - children: [] - }; - - for (const event of grandpa.event.children) { - if (event.activity !== "click" || !event.script) { - continue; - } - - const jsURL = (0, _core_utils.recoverJsURL)(event.script[_xfa_object.$content]); - - if (!jsURL) { - continue; - } - - const href = (0, _html_utils.fixURL)(jsURL.url); - - if (!href) { - continue; - } - - htmlButton.children.push({ - name: "a", - attributes: { - id: "link" + this[_xfa_object.$uid], - href, - newWindow: jsURL.newWindow, - class: ["xfaLink"], - style: {} - }, - children: [] - }); - } - - return _utils.HTMLResult.success(htmlButton); - } - -} - -class Calculate extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "calculate", true); - this.id = attributes.id || ""; - this.override = (0, _utils.getStringOption)(attributes.override, ["disabled", "error", "ignore", "warning"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - this.message = null; - this.script = null; - } - -} - -class Caption extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "caption", true); - this.id = attributes.id || ""; - this.placement = (0, _utils.getStringOption)(attributes.placement, ["left", "bottom", "inline", "right", "top"]); - this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); - this.reserve = Math.ceil((0, _utils.getMeasurement)(attributes.reserve)); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - this.font = null; - this.margin = null; - this.para = null; - this.value = null; - } - - [_xfa_object.$setValue](value) { - _setValue(this, value); - } - - [_xfa_object.$getExtra](availableSpace) { - if (!this[_xfa_object.$extra]) { - let { - width, - height - } = availableSpace; - - switch (this.placement) { - case "left": - case "right": - case "inline": - width = this.reserve <= 0 ? width : this.reserve; - break; - - case "top": - case "bottom": - height = this.reserve <= 0 ? height : this.reserve; - break; - } - - this[_xfa_object.$extra] = (0, _html_utils.layoutNode)(this, { - width, - height - }); - } - - return this[_xfa_object.$extra]; - } - - [_xfa_object.$toHTML](availableSpace) { - if (!this.value) { - return _utils.HTMLResult.EMPTY; - } - - this[_xfa_object.$pushPara](); - - const value = this.value[_xfa_object.$toHTML](availableSpace).html; - - if (!value) { - this[_xfa_object.$popPara](); - - return _utils.HTMLResult.EMPTY; - } - - const savedReserve = this.reserve; - - if (this.reserve <= 0) { - const { - w, - h - } = this[_xfa_object.$getExtra](availableSpace); - - switch (this.placement) { - case "left": - case "right": - case "inline": - this.reserve = w; - break; - - case "top": - case "bottom": - this.reserve = h; - break; - } - } - - const children = []; - - if (typeof value === "string") { - children.push({ - name: "#text", - value - }); - } else { - children.push(value); - } - - const style = (0, _html_utils.toStyle)(this, "font", "margin", "visibility"); - - switch (this.placement) { - case "left": - case "right": - if (this.reserve > 0) { - style.width = (0, _html_utils.measureToString)(this.reserve); - } - - break; - - case "top": - case "bottom": - if (this.reserve > 0) { - style.height = (0, _html_utils.measureToString)(this.reserve); - } - - break; - } - - (0, _html_utils.setPara)(this, null, value); - - this[_xfa_object.$popPara](); - - this.reserve = savedReserve; - return _utils.HTMLResult.success({ - name: "div", - attributes: { - style, - class: ["xfaCaption"] - }, - children - }); - } - -} - -class Certificate extends _xfa_object.StringObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "certificate"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class Certificates extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "certificates", true); - this.credentialServerPolicy = (0, _utils.getStringOption)(attributes.credentialServerPolicy, ["optional", "required"]); - this.id = attributes.id || ""; - this.url = attributes.url || ""; - this.urlPolicy = attributes.urlPolicy || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.encryption = null; - this.issuers = null; - this.keyUsage = null; - this.oids = null; - this.signing = null; - this.subjectDNs = null; - } - -} - -class CheckButton extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "checkButton", true); - this.id = attributes.id || ""; - this.mark = (0, _utils.getStringOption)(attributes.mark, ["default", "check", "circle", "cross", "diamond", "square", "star"]); - this.shape = (0, _utils.getStringOption)(attributes.shape, ["square", "round"]); - this.size = (0, _utils.getMeasurement)(attributes.size, "10pt"); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.border = null; - this.extras = null; - this.margin = null; - } - - [_xfa_object.$toHTML](availableSpace) { - const style = (0, _html_utils.toStyle)("margin"); - const size = (0, _html_utils.measureToString)(this.size); - style.width = style.height = size; - let type; - let className; - let groupId; - - const field = this[_xfa_object.$getParent]()[_xfa_object.$getParent](); - - const items = field.items.children.length && field.items.children[0][_xfa_object.$toHTML]().html || []; - const exportedValue = { - on: (items[0] !== undefined ? items[0] : "on").toString(), - off: (items[1] !== undefined ? items[1] : "off").toString() - }; - const value = field.value && field.value[_xfa_object.$text]() || "off"; - const checked = value === exportedValue.on || undefined; - - const container = field[_xfa_object.$getSubformParent](); - - const fieldId = field[_xfa_object.$uid]; - let dataId; - - if (container instanceof ExclGroup) { - groupId = container[_xfa_object.$uid]; - type = "radio"; - className = "xfaRadio"; - dataId = container[_xfa_object.$data] && container[_xfa_object.$data][_xfa_object.$uid] || container[_xfa_object.$uid]; - } else { - type = "checkbox"; - className = "xfaCheckbox"; - dataId = field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid]; - } - - const input = { - name: "input", - attributes: { - class: [className], - style, - fieldId, - dataId, - type, - checked, - xfaOn: exportedValue.on, - xfaOff: exportedValue.off, - "aria-label": ariaLabel(field) - } - }; - - if (groupId) { - input.attributes.name = groupId; - } - - return _utils.HTMLResult.success({ - name: "label", - attributes: { - class: ["xfaLabel"] - }, - children: [input] - }); - } - -} - -class ChoiceList extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "choiceList", true); - this.commitOn = (0, _utils.getStringOption)(attributes.commitOn, ["select", "exit"]); - this.id = attributes.id || ""; - this.open = (0, _utils.getStringOption)(attributes.open, ["userControl", "always", "multiSelect", "onEntry"]); - this.textEntry = (0, _utils.getInteger)({ - data: attributes.textEntry, - defaultValue: 0, - validate: x => x === 1 - }); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.border = null; - this.extras = null; - this.margin = null; - } - - [_xfa_object.$toHTML](availableSpace) { - const style = (0, _html_utils.toStyle)(this, "border", "margin"); - - const ui = this[_xfa_object.$getParent](); - - const field = ui[_xfa_object.$getParent](); - - const fontSize = field.font && field.font.size || 10; - const optionStyle = { - fontSize: `calc(${fontSize}px * var(--zoom-factor))` - }; - const children = []; - - if (field.items.children.length > 0) { - const items = field.items; - let displayedIndex = 0; - let saveIndex = 0; - - if (items.children.length === 2) { - displayedIndex = items.children[0].save; - saveIndex = 1 - displayedIndex; - } - - const displayed = items.children[displayedIndex][_xfa_object.$toHTML]().html; - - const values = items.children[saveIndex][_xfa_object.$toHTML]().html; - - let selected = false; - const value = field.value && field.value[_xfa_object.$text]() || ""; - - for (let i = 0, ii = displayed.length; i < ii; i++) { - const option = { - name: "option", - attributes: { - value: values[i] || displayed[i], - style: optionStyle - }, - value: displayed[i] - }; - - if (values[i] === value) { - option.attributes.selected = selected = true; - } - - children.push(option); - } - - if (!selected) { - children.splice(0, 0, { - name: "option", - attributes: { - hidden: true, - selected: true - }, - value: " " - }); - } - } - - const selectAttributes = { - class: ["xfaSelect"], - fieldId: field[_xfa_object.$uid], - dataId: field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid], - style, - "aria-label": ariaLabel(field) - }; - - if (this.open === "multiSelect") { - selectAttributes.multiple = true; - } - - return _utils.HTMLResult.success({ - name: "label", - attributes: { - class: ["xfaLabel"] - }, - children: [{ - name: "select", - children, - attributes: selectAttributes - }] - }); - } - -} - -class Color extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "color", true); - this.cSpace = (0, _utils.getStringOption)(attributes.cSpace, ["SRGB"]); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.value = attributes.value ? (0, _utils.getColor)(attributes.value) : ""; - this.extras = null; - } - - [_xfa_object.$hasSettableValue]() { - return false; - } - - [_xfa_object.$toStyle]() { - return this.value ? _util.Util.makeHexColor(this.value.r, this.value.g, this.value.b) : null; - } - -} - -class Comb extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "comb"); - this.id = attributes.id || ""; - this.numberOfCells = (0, _utils.getInteger)({ - data: attributes.numberOfCells, - defaultValue: 0, - validate: x => x >= 0 - }); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class Connect extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "connect", true); - this.connection = attributes.connection || ""; - this.id = attributes.id || ""; - this.ref = attributes.ref || ""; - this.usage = (0, _utils.getStringOption)(attributes.usage, ["exportAndImport", "exportOnly", "importOnly"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.picture = null; - } - -} - -class ContentArea extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "contentArea", true); - this.h = (0, _utils.getMeasurement)(attributes.h); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.relevant = (0, _utils.getRelevant)(attributes.relevant); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.w = (0, _utils.getMeasurement)(attributes.w); - this.x = (0, _utils.getMeasurement)(attributes.x, "0pt"); - this.y = (0, _utils.getMeasurement)(attributes.y, "0pt"); - this.desc = null; - this.extras = null; - } - - [_xfa_object.$toHTML](availableSpace) { - const left = (0, _html_utils.measureToString)(this.x); - const top = (0, _html_utils.measureToString)(this.y); - const style = { - left, - top, - width: (0, _html_utils.measureToString)(this.w), - height: (0, _html_utils.measureToString)(this.h) - }; - const classNames = ["xfaContentarea"]; - - if ((0, _html_utils.isPrintOnly)(this)) { - classNames.push("xfaPrintOnly"); - } - - return _utils.HTMLResult.success({ - name: "div", - children: [], - attributes: { - style, - class: classNames, - id: this[_xfa_object.$uid] - } - }); - } - -} - -class Corner extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "corner", true); - this.id = attributes.id || ""; - this.inverted = (0, _utils.getInteger)({ - data: attributes.inverted, - defaultValue: 0, - validate: x => x === 1 - }); - this.join = (0, _utils.getStringOption)(attributes.join, ["square", "round"]); - this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); - this.radius = (0, _utils.getMeasurement)(attributes.radius); - this.stroke = (0, _utils.getStringOption)(attributes.stroke, ["solid", "dashDot", "dashDotDot", "dashed", "dotted", "embossed", "etched", "lowered", "raised"]); - this.thickness = (0, _utils.getMeasurement)(attributes.thickness, "0.5pt"); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.color = null; - this.extras = null; - } - - [_xfa_object.$toStyle]() { - const style = (0, _html_utils.toStyle)(this, "visibility"); - style.radius = (0, _html_utils.measureToString)(this.join === "square" ? 0 : this.radius); - return style; - } - -} - -class DateElement extends _xfa_object.ContentObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "date"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - - [_xfa_object.$finalize]() { - const date = this[_xfa_object.$content].trim(); - - this[_xfa_object.$content] = date ? new Date(date) : null; - } - - [_xfa_object.$toHTML](availableSpace) { - return valueToHtml(this[_xfa_object.$content] ? this[_xfa_object.$content].toString() : ""); - } - -} - -class DateTime extends _xfa_object.ContentObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "dateTime"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - - [_xfa_object.$finalize]() { - const date = this[_xfa_object.$content].trim(); - - this[_xfa_object.$content] = date ? new Date(date) : null; - } - - [_xfa_object.$toHTML](availableSpace) { - return valueToHtml(this[_xfa_object.$content] ? this[_xfa_object.$content].toString() : ""); - } - -} - -class DateTimeEdit extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "dateTimeEdit", true); - this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]); - this.id = attributes.id || ""; - this.picker = (0, _utils.getStringOption)(attributes.picker, ["host", "none"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.border = null; - this.comb = null; - this.extras = null; - this.margin = null; - } - - [_xfa_object.$toHTML](availableSpace) { - const style = (0, _html_utils.toStyle)(this, "border", "font", "margin"); - - const field = this[_xfa_object.$getParent]()[_xfa_object.$getParent](); - - const html = { - name: "input", - attributes: { - type: "text", - fieldId: field[_xfa_object.$uid], - dataId: field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid], - class: ["xfaTextfield"], - style, - "aria-label": ariaLabel(field) - } - }; - return _utils.HTMLResult.success({ - name: "label", - attributes: { - class: ["xfaLabel"] - }, - children: [html] - }); - } - -} - -class Decimal extends _xfa_object.ContentObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "decimal"); - this.fracDigits = (0, _utils.getInteger)({ - data: attributes.fracDigits, - defaultValue: 2, - validate: x => true - }); - this.id = attributes.id || ""; - this.leadDigits = (0, _utils.getInteger)({ - data: attributes.leadDigits, - defaultValue: -1, - validate: x => true - }); - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - - [_xfa_object.$finalize]() { - const number = parseFloat(this[_xfa_object.$content].trim()); - this[_xfa_object.$content] = isNaN(number) ? null : number; - } - - [_xfa_object.$toHTML](availableSpace) { - return valueToHtml(this[_xfa_object.$content] !== null ? this[_xfa_object.$content].toString() : ""); - } - -} - -class DefaultUi extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "defaultUi", true); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - } - -} - -class Desc extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "desc", true); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.boolean = new _xfa_object.XFAObjectArray(); - this.date = new _xfa_object.XFAObjectArray(); - this.dateTime = new _xfa_object.XFAObjectArray(); - this.decimal = new _xfa_object.XFAObjectArray(); - this.exData = new _xfa_object.XFAObjectArray(); - this.float = new _xfa_object.XFAObjectArray(); - this.image = new _xfa_object.XFAObjectArray(); - this.integer = new _xfa_object.XFAObjectArray(); - this.text = new _xfa_object.XFAObjectArray(); - this.time = new _xfa_object.XFAObjectArray(); - } - -} - -class DigestMethod extends _xfa_object.OptionObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "digestMethod", ["", "SHA1", "SHA256", "SHA512", "RIPEMD160"]); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class DigestMethods extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "digestMethods", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.digestMethod = new _xfa_object.XFAObjectArray(); - } - -} - -class Draw extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "draw", true); - this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", "bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]); - this.colSpan = (0, _utils.getInteger)({ - data: attributes.colSpan, - defaultValue: 1, - validate: n => n >= 1 || n === -1 - }); - this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : ""; - this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]); - this.id = attributes.id || ""; - this.locale = attributes.locale || ""; - this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt"); - this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt"); - this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt"); - this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt"); - this.name = attributes.name || ""; - this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); - this.relevant = (0, _utils.getRelevant)(attributes.relevant); - this.rotate = (0, _utils.getInteger)({ - data: attributes.rotate, - defaultValue: 0, - validate: x => x % 90 === 0 - }); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : ""; - this.x = (0, _utils.getMeasurement)(attributes.x, "0pt"); - this.y = (0, _utils.getMeasurement)(attributes.y, "0pt"); - this.assist = null; - this.border = null; - this.caption = null; - this.desc = null; - this.extras = null; - this.font = null; - this.keep = null; - this.margin = null; - this.para = null; - this.traversal = null; - this.ui = null; - this.value = null; - this.setProperty = new _xfa_object.XFAObjectArray(); - } - - [_xfa_object.$setValue](value) { - _setValue(this, value); - } - - [_xfa_object.$toHTML](availableSpace) { - setTabIndex(this); - - if (this.presence === "hidden" || this.presence === "inactive") { - return _utils.HTMLResult.EMPTY; - } - - (0, _html_utils.fixDimensions)(this); - - this[_xfa_object.$pushPara](); - - const savedW = this.w; - const savedH = this.h; - const { - w, - h, - isBroken - } = (0, _html_utils.layoutNode)(this, availableSpace); - - if (w && this.w === "") { - if (isBroken && this[_xfa_object.$getSubformParent]()[_xfa_object.$isThereMoreWidth]()) { - this[_xfa_object.$popPara](); - - return _utils.HTMLResult.FAILURE; - } - - this.w = w; - } - - if (h && this.h === "") { - this.h = h; - } - - setFirstUnsplittable(this); - - if (!(0, _layout.checkDimensions)(this, availableSpace)) { - this.w = savedW; - this.h = savedH; - - this[_xfa_object.$popPara](); - - return _utils.HTMLResult.FAILURE; - } - - unsetFirstUnsplittable(this); - const style = (0, _html_utils.toStyle)(this, "font", "hAlign", "dimensions", "position", "presence", "rotate", "anchorType", "border", "margin"); - (0, _html_utils.setMinMaxDimensions)(this, style); - - if (style.margin) { - style.padding = style.margin; - delete style.margin; - } - - const classNames = ["xfaDraw"]; - - if (this.font) { - classNames.push("xfaFont"); - } - - if ((0, _html_utils.isPrintOnly)(this)) { - classNames.push("xfaPrintOnly"); - } - - const attributes = { - style, - id: this[_xfa_object.$uid], - class: classNames - }; - - if (this.name) { - attributes.xfaName = this.name; - } - - const html = { - name: "div", - attributes, - children: [] - }; - applyAssist(this, attributes); - const bbox = (0, _html_utils.computeBbox)(this, html, availableSpace); - const value = this.value ? this.value[_xfa_object.$toHTML](availableSpace).html : null; - - if (value === null) { - this.w = savedW; - this.h = savedH; - - this[_xfa_object.$popPara](); - - return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); - } - - html.children.push(value); - (0, _html_utils.setPara)(this, style, value); - this.w = savedW; - this.h = savedH; - - this[_xfa_object.$popPara](); - - return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); - } - -} - -class Edge extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "edge", true); - this.cap = (0, _utils.getStringOption)(attributes.cap, ["square", "butt", "round"]); - this.id = attributes.id || ""; - this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); - this.stroke = (0, _utils.getStringOption)(attributes.stroke, ["solid", "dashDot", "dashDotDot", "dashed", "dotted", "embossed", "etched", "lowered", "raised"]); - this.thickness = (0, _utils.getMeasurement)(attributes.thickness, "0.5pt"); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.color = null; - this.extras = null; - } - - [_xfa_object.$toStyle]() { - const style = (0, _html_utils.toStyle)(this, "visibility"); - Object.assign(style, { - linecap: this.cap, - width: (0, _html_utils.measureToString)(this.thickness), - color: this.color ? this.color[_xfa_object.$toStyle]() : "#000000", - style: "" - }); - - if (this.presence !== "visible") { - style.style = "none"; - } else { - switch (this.stroke) { - case "solid": - style.style = "solid"; - break; - - case "dashDot": - style.style = "dashed"; - break; - - case "dashDotDot": - style.style = "dashed"; - break; - - case "dashed": - style.style = "dashed"; - break; - - case "dotted": - style.style = "dotted"; - break; - - case "embossed": - style.style = "ridge"; - break; - - case "etched": - style.style = "groove"; - break; - - case "lowered": - style.style = "inset"; - break; - - case "raised": - style.style = "outset"; - break; - } - } - - return style; - } - -} - -class Encoding extends _xfa_object.OptionObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "encoding", ["adbe.x509.rsa_sha1", "adbe.pkcs7.detached", "adbe.pkcs7.sha1"]); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class Encodings extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "encodings", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.encoding = new _xfa_object.XFAObjectArray(); - } - -} - -class Encrypt extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "encrypt", true); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.certificate = null; - } - -} - -class EncryptData extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "encryptData", true); - this.id = attributes.id || ""; - this.operation = (0, _utils.getStringOption)(attributes.operation, ["encrypt", "decrypt"]); - this.target = attributes.target || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.filter = null; - this.manifest = null; - } - -} - -class Encryption extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "encryption", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.certificate = new _xfa_object.XFAObjectArray(); - } - -} - -class EncryptionMethod extends _xfa_object.OptionObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "encryptionMethod", ["", "AES256-CBC", "TRIPLEDES-CBC", "AES128-CBC", "AES192-CBC"]); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class EncryptionMethods extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "encryptionMethods", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.encryptionMethod = new _xfa_object.XFAObjectArray(); - } - -} - -class Event extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "event", true); - this.activity = (0, _utils.getStringOption)(attributes.activity, ["click", "change", "docClose", "docReady", "enter", "exit", "full", "indexChange", "initialize", "mouseDown", "mouseEnter", "mouseExit", "mouseUp", "postExecute", "postOpen", "postPrint", "postSave", "postSign", "postSubmit", "preExecute", "preOpen", "prePrint", "preSave", "preSign", "preSubmit", "ready", "validationState"]); - this.id = attributes.id || ""; - this.listen = (0, _utils.getStringOption)(attributes.listen, ["refOnly", "refAndDescendents"]); - this.name = attributes.name || ""; - this.ref = attributes.ref || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - this.encryptData = null; - this.execute = null; - this.script = null; - this.signData = null; - this.submit = null; - } - -} - -class ExData extends _xfa_object.ContentObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "exData"); - this.contentType = attributes.contentType || ""; - this.href = attributes.href || ""; - this.id = attributes.id || ""; - this.maxLength = (0, _utils.getInteger)({ - data: attributes.maxLength, - defaultValue: -1, - validate: x => x >= -1 - }); - this.name = attributes.name || ""; - this.rid = attributes.rid || ""; - this.transferEncoding = (0, _utils.getStringOption)(attributes.transferEncoding, ["none", "base64", "package"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - - [_xfa_object.$isCDATAXml]() { - return this.contentType === "text/html"; - } - - [_xfa_object.$onChild](child) { - if (this.contentType === "text/html" && child[_xfa_object.$namespaceId] === _namespaces.NamespaceIds.xhtml.id) { - this[_xfa_object.$content] = child; - return true; - } - - if (this.contentType === "text/xml") { - this[_xfa_object.$content] = child; - return true; - } - - return false; - } - - [_xfa_object.$toHTML](availableSpace) { - if (this.contentType !== "text/html" || !this[_xfa_object.$content]) { - return _utils.HTMLResult.EMPTY; - } - - return this[_xfa_object.$content][_xfa_object.$toHTML](availableSpace); - } - -} - -class ExObject extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "exObject", true); - this.archive = attributes.archive || ""; - this.classId = attributes.classId || ""; - this.codeBase = attributes.codeBase || ""; - this.codeType = attributes.codeType || ""; - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - this.boolean = new _xfa_object.XFAObjectArray(); - this.date = new _xfa_object.XFAObjectArray(); - this.dateTime = new _xfa_object.XFAObjectArray(); - this.decimal = new _xfa_object.XFAObjectArray(); - this.exData = new _xfa_object.XFAObjectArray(); - this.exObject = new _xfa_object.XFAObjectArray(); - this.float = new _xfa_object.XFAObjectArray(); - this.image = new _xfa_object.XFAObjectArray(); - this.integer = new _xfa_object.XFAObjectArray(); - this.text = new _xfa_object.XFAObjectArray(); - this.time = new _xfa_object.XFAObjectArray(); - } - -} - -class ExclGroup extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "exclGroup", true); - this.access = (0, _utils.getStringOption)(attributes.access, ["open", "nonInteractive", "protected", "readOnly"]); - this.accessKey = attributes.accessKey || ""; - this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", "bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]); - this.colSpan = (0, _utils.getInteger)({ - data: attributes.colSpan, - defaultValue: 1, - validate: n => n >= 1 || n === -1 - }); - this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : ""; - this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]); - this.id = attributes.id || ""; - this.layout = (0, _utils.getStringOption)(attributes.layout, ["position", "lr-tb", "rl-row", "rl-tb", "row", "table", "tb"]); - this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt"); - this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt"); - this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt"); - this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt"); - this.name = attributes.name || ""; - this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); - this.relevant = (0, _utils.getRelevant)(attributes.relevant); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : ""; - this.x = (0, _utils.getMeasurement)(attributes.x, "0pt"); - this.y = (0, _utils.getMeasurement)(attributes.y, "0pt"); - this.assist = null; - this.bind = null; - this.border = null; - this.calculate = null; - this.caption = null; - this.desc = null; - this.extras = null; - this.margin = null; - this.para = null; - this.traversal = null; - this.validate = null; - this.connect = new _xfa_object.XFAObjectArray(); - this.event = new _xfa_object.XFAObjectArray(); - this.field = new _xfa_object.XFAObjectArray(); - this.setProperty = new _xfa_object.XFAObjectArray(); - } - - [_xfa_object.$isBindable]() { - return true; - } - - [_xfa_object.$hasSettableValue]() { - return true; - } - - [_xfa_object.$setValue](value) { - for (const field of this.field.children) { - if (!field.value) { - const nodeValue = new Value({}); - - field[_xfa_object.$appendChild](nodeValue); - - field.value = nodeValue; - } - - field.value[_xfa_object.$setValue](value); - } - } - - [_xfa_object.$isThereMoreWidth]() { - return this.layout.endsWith("-tb") && this[_xfa_object.$extra].attempt === 0 && this[_xfa_object.$extra].numberInLine > 0 || this[_xfa_object.$getParent]()[_xfa_object.$isThereMoreWidth](); - } - - [_xfa_object.$isSplittable]() { - const parent = this[_xfa_object.$getSubformParent](); - - if (!parent[_xfa_object.$isSplittable]()) { - return false; - } - - if (this[_xfa_object.$extra]._isSplittable !== undefined) { - return this[_xfa_object.$extra]._isSplittable; - } - - if (this.layout === "position" || this.layout.includes("row")) { - this[_xfa_object.$extra]._isSplittable = false; - return false; - } - - if (parent.layout && parent.layout.endsWith("-tb") && parent[_xfa_object.$extra].numberInLine !== 0) { - return false; - } - - this[_xfa_object.$extra]._isSplittable = true; - return true; - } - - [_xfa_object.$flushHTML]() { - return (0, _layout.flushHTML)(this); - } - - [_xfa_object.$addHTML](html, bbox) { - (0, _layout.addHTML)(this, html, bbox); - } - - [_xfa_object.$getAvailableSpace]() { - return (0, _layout.getAvailableSpace)(this); - } - - [_xfa_object.$toHTML](availableSpace) { - setTabIndex(this); - - if (this.presence === "hidden" || this.presence === "inactive" || this.h === 0 || this.w === 0) { - return _utils.HTMLResult.EMPTY; - } - - (0, _html_utils.fixDimensions)(this); - const children = []; - const attributes = { - id: this[_xfa_object.$uid], - class: [] - }; - (0, _html_utils.setAccess)(this, attributes.class); - - if (!this[_xfa_object.$extra]) { - this[_xfa_object.$extra] = Object.create(null); - } - - Object.assign(this[_xfa_object.$extra], { - children, - attributes, - attempt: 0, - line: null, - numberInLine: 0, - availableSpace: { - width: Math.min(this.w || Infinity, availableSpace.width), - height: Math.min(this.h || Infinity, availableSpace.height) - }, - width: 0, - height: 0, - prevHeight: 0, - currentWidth: 0 - }); - - const isSplittable = this[_xfa_object.$isSplittable](); - - if (!isSplittable) { - setFirstUnsplittable(this); - } - - if (!(0, _layout.checkDimensions)(this, availableSpace)) { - return _utils.HTMLResult.FAILURE; - } - - const filter = new Set(["field"]); - - if (this.layout.includes("row")) { - const columnWidths = this[_xfa_object.$getSubformParent]().columnWidths; - - if (Array.isArray(columnWidths) && columnWidths.length > 0) { - this[_xfa_object.$extra].columnWidths = columnWidths; - this[_xfa_object.$extra].currentColumn = 0; - } - } - - const style = (0, _html_utils.toStyle)(this, "anchorType", "dimensions", "position", "presence", "border", "margin", "hAlign"); - const classNames = ["xfaExclgroup"]; - const cl = (0, _html_utils.layoutClass)(this); - - if (cl) { - classNames.push(cl); - } - - if ((0, _html_utils.isPrintOnly)(this)) { - classNames.push("xfaPrintOnly"); - } - - attributes.style = style; - attributes.class = classNames; - - if (this.name) { - attributes.xfaName = this.name; - } - - this[_xfa_object.$pushPara](); - - const isLrTb = this.layout === "lr-tb" || this.layout === "rl-tb"; - const maxRun = isLrTb ? MAX_ATTEMPTS_FOR_LRTB_LAYOUT : 1; - - for (; this[_xfa_object.$extra].attempt < maxRun; this[_xfa_object.$extra].attempt++) { - if (isLrTb && this[_xfa_object.$extra].attempt === MAX_ATTEMPTS_FOR_LRTB_LAYOUT - 1) { - this[_xfa_object.$extra].numberInLine = 0; - } - - const result = this[_xfa_object.$childrenToHTML]({ - filter, - include: true - }); - - if (result.success) { - break; - } - - if (result.isBreak()) { - this[_xfa_object.$popPara](); - - return result; - } - - if (isLrTb && this[_xfa_object.$extra].attempt === 0 && this[_xfa_object.$extra].numberInLine === 0 && !this[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].noLayoutFailure) { - this[_xfa_object.$extra].attempt = maxRun; - break; - } - } - - this[_xfa_object.$popPara](); - - if (!isSplittable) { - unsetFirstUnsplittable(this); - } - - if (this[_xfa_object.$extra].attempt === maxRun) { - if (!isSplittable) { - delete this[_xfa_object.$extra]; - } - - return _utils.HTMLResult.FAILURE; - } - - let marginH = 0; - let marginV = 0; - - if (this.margin) { - marginH = this.margin.leftInset + this.margin.rightInset; - marginV = this.margin.topInset + this.margin.bottomInset; - } - - const width = Math.max(this[_xfa_object.$extra].width + marginH, this.w || 0); - const height = Math.max(this[_xfa_object.$extra].height + marginV, this.h || 0); - const bbox = [this.x, this.y, width, height]; - - if (this.w === "") { - style.width = (0, _html_utils.measureToString)(width); - } - - if (this.h === "") { - style.height = (0, _html_utils.measureToString)(height); - } - - const html = { - name: "div", - attributes, - children - }; - applyAssist(this, attributes); - delete this[_xfa_object.$extra]; - return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); - } - -} - -class Execute extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "execute"); - this.connection = attributes.connection || ""; - this.executeType = (0, _utils.getStringOption)(attributes.executeType, ["import", "remerge"]); - this.id = attributes.id || ""; - this.runAt = (0, _utils.getStringOption)(attributes.runAt, ["client", "both", "server"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class Extras extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "extras", true); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.boolean = new _xfa_object.XFAObjectArray(); - this.date = new _xfa_object.XFAObjectArray(); - this.dateTime = new _xfa_object.XFAObjectArray(); - this.decimal = new _xfa_object.XFAObjectArray(); - this.exData = new _xfa_object.XFAObjectArray(); - this.extras = new _xfa_object.XFAObjectArray(); - this.float = new _xfa_object.XFAObjectArray(); - this.image = new _xfa_object.XFAObjectArray(); - this.integer = new _xfa_object.XFAObjectArray(); - this.text = new _xfa_object.XFAObjectArray(); - this.time = new _xfa_object.XFAObjectArray(); - } - -} - -class Field extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "field", true); - this.access = (0, _utils.getStringOption)(attributes.access, ["open", "nonInteractive", "protected", "readOnly"]); - this.accessKey = attributes.accessKey || ""; - this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", "bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]); - this.colSpan = (0, _utils.getInteger)({ - data: attributes.colSpan, - defaultValue: 1, - validate: n => n >= 1 || n === -1 - }); - this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : ""; - this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]); - this.id = attributes.id || ""; - this.locale = attributes.locale || ""; - this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt"); - this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt"); - this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt"); - this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt"); - this.name = attributes.name || ""; - this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); - this.relevant = (0, _utils.getRelevant)(attributes.relevant); - this.rotate = (0, _utils.getInteger)({ - data: attributes.rotate, - defaultValue: 0, - validate: x => x % 90 === 0 - }); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : ""; - this.x = (0, _utils.getMeasurement)(attributes.x, "0pt"); - this.y = (0, _utils.getMeasurement)(attributes.y, "0pt"); - this.assist = null; - this.bind = null; - this.border = null; - this.calculate = null; - this.caption = null; - this.desc = null; - this.extras = null; - this.font = null; - this.format = null; - this.items = new _xfa_object.XFAObjectArray(2); - this.keep = null; - this.margin = null; - this.para = null; - this.traversal = null; - this.ui = null; - this.validate = null; - this.value = null; - this.bindItems = new _xfa_object.XFAObjectArray(); - this.connect = new _xfa_object.XFAObjectArray(); - this.event = new _xfa_object.XFAObjectArray(); - this.setProperty = new _xfa_object.XFAObjectArray(); - } - - [_xfa_object.$isBindable]() { - return true; - } - - [_xfa_object.$setValue](value) { - _setValue(this, value); - } - - [_xfa_object.$toHTML](availableSpace) { - setTabIndex(this); - - if (!this.ui) { - this.ui = new Ui({}); - this.ui[_xfa_object.$globalData] = this[_xfa_object.$globalData]; - - this[_xfa_object.$appendChild](this.ui); - - let node; - - switch (this.items.children.length) { - case 0: - node = new TextEdit({}); - this.ui.textEdit = node; - break; - - case 1: - node = new CheckButton({}); - this.ui.checkButton = node; - break; - - case 2: - node = new ChoiceList({}); - this.ui.choiceList = node; - break; - } - - this.ui[_xfa_object.$appendChild](node); - } - - if (!this.ui || this.presence === "hidden" || this.presence === "inactive" || this.h === 0 || this.w === 0) { - return _utils.HTMLResult.EMPTY; - } - - if (this.caption) { - delete this.caption[_xfa_object.$extra]; - } - - this[_xfa_object.$pushPara](); - - const caption = this.caption ? this.caption[_xfa_object.$toHTML](availableSpace).html : null; - const savedW = this.w; - const savedH = this.h; - let marginH = 0; - let marginV = 0; - - if (this.margin) { - marginH = this.margin.leftInset + this.margin.rightInset; - marginV = this.margin.topInset + this.margin.bottomInset; - } - - let borderDims = null; - - if (this.w === "" || this.h === "") { - let width = null; - let height = null; - let uiW = 0; - let uiH = 0; - - if (this.ui.checkButton) { - uiW = uiH = this.ui.checkButton.size; - } else { - const { - w, - h - } = (0, _html_utils.layoutNode)(this, availableSpace); - - if (w !== null) { - uiW = w; - uiH = h; - } else { - uiH = (0, _fonts.getMetrics)(this.font, true).lineNoGap; - } - } - - borderDims = getBorderDims(this.ui[_xfa_object.$getExtra]()); - uiW += borderDims.w; - uiH += borderDims.h; - - if (this.caption) { - const { - w, - h, - isBroken - } = this.caption[_xfa_object.$getExtra](availableSpace); - - if (isBroken && this[_xfa_object.$getSubformParent]()[_xfa_object.$isThereMoreWidth]()) { - this[_xfa_object.$popPara](); - - return _utils.HTMLResult.FAILURE; - } - - width = w; - height = h; - - switch (this.caption.placement) { - case "left": - case "right": - case "inline": - width += uiW; - break; - - case "top": - case "bottom": - height += uiH; - break; - } - } else { - width = uiW; - height = uiH; - } - - if (width && this.w === "") { - width += marginH; - this.w = Math.min(this.maxW <= 0 ? Infinity : this.maxW, this.minW + 1 < width ? width : this.minW); - } - - if (height && this.h === "") { - height += marginV; - this.h = Math.min(this.maxH <= 0 ? Infinity : this.maxH, this.minH + 1 < height ? height : this.minH); - } - } - - this[_xfa_object.$popPara](); - - (0, _html_utils.fixDimensions)(this); - setFirstUnsplittable(this); - - if (!(0, _layout.checkDimensions)(this, availableSpace)) { - this.w = savedW; - this.h = savedH; - - this[_xfa_object.$popPara](); - - return _utils.HTMLResult.FAILURE; - } - - unsetFirstUnsplittable(this); - const style = (0, _html_utils.toStyle)(this, "font", "dimensions", "position", "rotate", "anchorType", "presence", "margin", "hAlign"); - (0, _html_utils.setMinMaxDimensions)(this, style); - const classNames = ["xfaField"]; - - if (this.font) { - classNames.push("xfaFont"); - } - - if ((0, _html_utils.isPrintOnly)(this)) { - classNames.push("xfaPrintOnly"); - } - - const attributes = { - style, - id: this[_xfa_object.$uid], - class: classNames - }; - - if (style.margin) { - style.padding = style.margin; - delete style.margin; - } - - (0, _html_utils.setAccess)(this, classNames); - - if (this.name) { - attributes.xfaName = this.name; - } - - const children = []; - const html = { - name: "div", - attributes, - children - }; - applyAssist(this, attributes); - const borderStyle = this.border ? this.border[_xfa_object.$toStyle]() : null; - const bbox = (0, _html_utils.computeBbox)(this, html, availableSpace); - - const ui = this.ui[_xfa_object.$toHTML]().html; - - if (!ui) { - Object.assign(style, borderStyle); - return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); - } - - if (this[_xfa_object.$tabIndex]) { - if (ui.children && ui.children[0]) { - ui.children[0].attributes.tabindex = this[_xfa_object.$tabIndex]; - } else { - ui.attributes.tabindex = this[_xfa_object.$tabIndex]; - } - } - - if (!ui.attributes.style) { - ui.attributes.style = Object.create(null); - } - - let aElement = null; - - if (this.ui.button) { - if (ui.children.length === 1) { - [aElement] = ui.children.splice(0, 1); - } - - Object.assign(ui.attributes.style, borderStyle); - } else { - Object.assign(style, borderStyle); - } - - children.push(ui); - - if (this.value) { - if (this.ui.imageEdit) { - ui.children.push(this.value[_xfa_object.$toHTML]().html); - } else if (!this.ui.button) { - let value = ""; - - if (this.value.exData) { - value = this.value.exData[_xfa_object.$text](); - } else if (this.value.text) { - value = this.value.text[_xfa_object.$getExtra](); - } else { - const htmlValue = this.value[_xfa_object.$toHTML]().html; - - if (htmlValue !== null) { - value = htmlValue.children[0].value; - } - } - - if (this.ui.textEdit && this.value.text && this.value.text.maxChars) { - ui.children[0].attributes.maxLength = this.value.text.maxChars; - } - - if (value) { - if (this.ui.numericEdit) { - value = parseFloat(value); - value = isNaN(value) ? "" : value.toString(); - } - - if (ui.children[0].name === "textarea") { - ui.children[0].attributes.textContent = value; - } else { - ui.children[0].attributes.value = value; - } - } - } - } - - if (!this.ui.imageEdit && ui.children && ui.children[0] && this.h) { - borderDims = borderDims || getBorderDims(this.ui[_xfa_object.$getExtra]()); - let captionHeight = 0; - - if (this.caption && ["top", "bottom"].includes(this.caption.placement)) { - captionHeight = this.caption.reserve; - - if (captionHeight <= 0) { - captionHeight = this.caption[_xfa_object.$getExtra](availableSpace).h; - } - - const inputHeight = this.h - captionHeight - marginV - borderDims.h; - ui.children[0].attributes.style.height = (0, _html_utils.measureToString)(inputHeight); - } else { - ui.children[0].attributes.style.height = "100%"; - } - } - - if (aElement) { - ui.children.push(aElement); - } - - if (!caption) { - if (ui.attributes.class) { - ui.attributes.class.push("xfaLeft"); - } - - this.w = savedW; - this.h = savedH; - return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); - } - - if (this.ui.button) { - if (style.padding) { - delete style.padding; - } - - if (caption.name === "div") { - caption.name = "span"; - } - - ui.children.push(caption); - return _utils.HTMLResult.success(html, bbox); - } else if (this.ui.checkButton) { - caption.attributes.class[0] = "xfaCaptionForCheckButton"; - } - - if (!ui.attributes.class) { - ui.attributes.class = []; - } - - ui.children.splice(0, 0, caption); - - switch (this.caption.placement) { - case "left": - ui.attributes.class.push("xfaLeft"); - break; - - case "right": - ui.attributes.class.push("xfaRight"); - break; - - case "top": - ui.attributes.class.push("xfaTop"); - break; - - case "bottom": - ui.attributes.class.push("xfaBottom"); - break; - - case "inline": - ui.attributes.class.push("xfaLeft"); - break; - } - - this.w = savedW; - this.h = savedH; - return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); - } - -} - -exports.Field = Field; - -class Fill extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "fill", true); - this.id = attributes.id || ""; - this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.color = null; - this.extras = null; - this.linear = null; - this.pattern = null; - this.radial = null; - this.solid = null; - this.stipple = null; - } - - [_xfa_object.$toStyle]() { - const parent = this[_xfa_object.$getParent](); - - const grandpa = parent[_xfa_object.$getParent](); - - const ggrandpa = grandpa[_xfa_object.$getParent](); - - const style = Object.create(null); - let propName = "color"; - let altPropName = propName; - - if (parent instanceof Border) { - propName = "background-color"; - altPropName = "background"; - - if (ggrandpa instanceof Ui) { - style.backgroundColor = "white"; - } - } - - if (parent instanceof Rectangle || parent instanceof Arc) { - propName = altPropName = "fill"; - style.fill = "white"; - } - - for (const name of Object.getOwnPropertyNames(this)) { - if (name === "extras" || name === "color") { - continue; - } - - const obj = this[name]; - - if (!(obj instanceof _xfa_object.XFAObject)) { - continue; - } - - const color = obj[_xfa_object.$toStyle](this.color); - - if (color) { - style[color.startsWith("#") ? propName : altPropName] = color; - } - - return style; - } - - if (this.color && this.color.value) { - const color = this.color[_xfa_object.$toStyle](); - - style[color.startsWith("#") ? propName : altPropName] = color; - } - - return style; - } - -} - -class Filter extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "filter", true); - this.addRevocationInfo = (0, _utils.getStringOption)(attributes.addRevocationInfo, ["", "required", "optional", "none"]); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.version = (0, _utils.getInteger)({ - data: this.version, - defaultValue: 5, - validate: x => x >= 1 && x <= 5 - }); - this.appearanceFilter = null; - this.certificates = null; - this.digestMethods = null; - this.encodings = null; - this.encryptionMethods = null; - this.handler = null; - this.lockDocument = null; - this.mdp = null; - this.reasons = null; - this.timeStamp = null; - } - -} - -class Float extends _xfa_object.ContentObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "float"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - - [_xfa_object.$finalize]() { - const number = parseFloat(this[_xfa_object.$content].trim()); - this[_xfa_object.$content] = isNaN(number) ? null : number; - } - - [_xfa_object.$toHTML](availableSpace) { - return valueToHtml(this[_xfa_object.$content] !== null ? this[_xfa_object.$content].toString() : ""); - } - -} - -class Font extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "font", true); - this.baselineShift = (0, _utils.getMeasurement)(attributes.baselineShift); - this.fontHorizontalScale = (0, _utils.getFloat)({ - data: attributes.fontHorizontalScale, - defaultValue: 100, - validate: x => x >= 0 - }); - this.fontVerticalScale = (0, _utils.getFloat)({ - data: attributes.fontVerticalScale, - defaultValue: 100, - validate: x => x >= 0 - }); - this.id = attributes.id || ""; - this.kerningMode = (0, _utils.getStringOption)(attributes.kerningMode, ["none", "pair"]); - this.letterSpacing = (0, _utils.getMeasurement)(attributes.letterSpacing, "0"); - this.lineThrough = (0, _utils.getInteger)({ - data: attributes.lineThrough, - defaultValue: 0, - validate: x => x === 1 || x === 2 - }); - this.lineThroughPeriod = (0, _utils.getStringOption)(attributes.lineThroughPeriod, ["all", "word"]); - this.overline = (0, _utils.getInteger)({ - data: attributes.overline, - defaultValue: 0, - validate: x => x === 1 || x === 2 - }); - this.overlinePeriod = (0, _utils.getStringOption)(attributes.overlinePeriod, ["all", "word"]); - this.posture = (0, _utils.getStringOption)(attributes.posture, ["normal", "italic"]); - this.size = (0, _utils.getMeasurement)(attributes.size, "10pt"); - this.typeface = attributes.typeface || "Courier"; - this.underline = (0, _utils.getInteger)({ - data: attributes.underline, - defaultValue: 0, - validate: x => x === 1 || x === 2 - }); - this.underlinePeriod = (0, _utils.getStringOption)(attributes.underlinePeriod, ["all", "word"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.weight = (0, _utils.getStringOption)(attributes.weight, ["normal", "bold"]); - this.extras = null; - this.fill = null; - } - - [_xfa_object.$clean](builder) { - super[_xfa_object.$clean](builder); - - this[_xfa_object.$globalData].usedTypefaces.add(this.typeface); - } - - [_xfa_object.$toStyle]() { - const style = (0, _html_utils.toStyle)(this, "fill"); - const color = style.color; - - if (color) { - if (color === "#000000") { - delete style.color; - } else if (!color.startsWith("#")) { - style.background = color; - style.backgroundClip = "text"; - style.color = "transparent"; - } - } - - if (this.baselineShift) { - style.verticalAlign = (0, _html_utils.measureToString)(this.baselineShift); - } - - style.fontKerning = this.kerningMode === "none" ? "none" : "normal"; - style.letterSpacing = (0, _html_utils.measureToString)(this.letterSpacing); - - if (this.lineThrough !== 0) { - style.textDecoration = "line-through"; - - if (this.lineThrough === 2) { - style.textDecorationStyle = "double"; - } - } - - if (this.overline !== 0) { - style.textDecoration = "overline"; - - if (this.overline === 2) { - style.textDecorationStyle = "double"; - } - } - - style.fontStyle = this.posture; - style.fontSize = (0, _html_utils.measureToString)(0.99 * this.size); - (0, _html_utils.setFontFamily)(this, this, this[_xfa_object.$globalData].fontFinder, style); - - if (this.underline !== 0) { - style.textDecoration = "underline"; - - if (this.underline === 2) { - style.textDecorationStyle = "double"; - } - } - - style.fontWeight = this.weight; - return style; - } - -} - -class Format extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "format", true); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - this.picture = null; - } - -} - -class Handler extends _xfa_object.StringObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "handler"); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class Hyphenation extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "hyphenation"); - this.excludeAllCaps = (0, _utils.getInteger)({ - data: attributes.excludeAllCaps, - defaultValue: 0, - validate: x => x === 1 - }); - this.excludeInitialCap = (0, _utils.getInteger)({ - data: attributes.excludeInitialCap, - defaultValue: 0, - validate: x => x === 1 - }); - this.hyphenate = (0, _utils.getInteger)({ - data: attributes.hyphenate, - defaultValue: 0, - validate: x => x === 1 - }); - this.id = attributes.id || ""; - this.pushCharacterCount = (0, _utils.getInteger)({ - data: attributes.pushCharacterCount, - defaultValue: 3, - validate: x => x >= 0 - }); - this.remainCharacterCount = (0, _utils.getInteger)({ - data: attributes.remainCharacterCount, - defaultValue: 3, - validate: x => x >= 0 - }); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.wordCharacterCount = (0, _utils.getInteger)({ - data: attributes.wordCharacterCount, - defaultValue: 7, - validate: x => x >= 0 - }); - } - -} - -class Image extends _xfa_object.StringObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "image"); - this.aspect = (0, _utils.getStringOption)(attributes.aspect, ["fit", "actual", "height", "none", "width"]); - this.contentType = attributes.contentType || ""; - this.href = attributes.href || ""; - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.transferEncoding = (0, _utils.getStringOption)(attributes.transferEncoding, ["base64", "none", "package"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - - [_xfa_object.$toHTML]() { - if (this.contentType && !MIMES.has(this.contentType.toLowerCase())) { - return _utils.HTMLResult.EMPTY; - } - - let buffer = this[_xfa_object.$globalData].images && this[_xfa_object.$globalData].images.get(this.href); - - if (!buffer && (this.href || !this[_xfa_object.$content])) { - return _utils.HTMLResult.EMPTY; - } - - if (!buffer && this.transferEncoding === "base64") { - buffer = (0, _util.stringToBytes)(atob(this[_xfa_object.$content])); - } - - if (!buffer) { - return _utils.HTMLResult.EMPTY; - } - - if (!this.contentType) { - for (const [header, type] of IMAGES_HEADERS) { - if (buffer.length > header.length && header.every((x, i) => x === buffer[i])) { - this.contentType = type; - break; - } - } - - if (!this.contentType) { - return _utils.HTMLResult.EMPTY; - } - } - - const blob = new Blob([buffer], { - type: this.contentType - }); - let style; - - switch (this.aspect) { - case "fit": - case "actual": - break; - - case "height": - style = { - height: "100%", - objectFit: "fill" - }; - break; - - case "none": - style = { - width: "100%", - height: "100%", - objectFit: "fill" - }; - break; - - case "width": - style = { - width: "100%", - objectFit: "fill" - }; - break; - } - - const parent = this[_xfa_object.$getParent](); - - return _utils.HTMLResult.success({ - name: "img", - attributes: { - class: ["xfaImage"], - style, - src: URL.createObjectURL(blob), - alt: parent ? ariaLabel(parent[_xfa_object.$getParent]()) : null - } - }); - } - -} - -class ImageEdit extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "imageEdit", true); - this.data = (0, _utils.getStringOption)(attributes.data, ["link", "embed"]); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.border = null; - this.extras = null; - this.margin = null; - } - - [_xfa_object.$toHTML](availableSpace) { - if (this.data === "embed") { - return _utils.HTMLResult.success({ - name: "div", - children: [], - attributes: {} - }); - } - - return _utils.HTMLResult.EMPTY; - } - -} - -class Integer extends _xfa_object.ContentObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "integer"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - - [_xfa_object.$finalize]() { - const number = parseInt(this[_xfa_object.$content].trim(), 10); - this[_xfa_object.$content] = isNaN(number) ? null : number; - } - - [_xfa_object.$toHTML](availableSpace) { - return valueToHtml(this[_xfa_object.$content] !== null ? this[_xfa_object.$content].toString() : ""); - } - -} - -class Issuers extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "issuers", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.certificate = new _xfa_object.XFAObjectArray(); - } - -} - -class Items extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "items", true); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); - this.ref = attributes.ref || ""; - this.save = (0, _utils.getInteger)({ - data: attributes.save, - defaultValue: 0, - validate: x => x === 1 - }); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.boolean = new _xfa_object.XFAObjectArray(); - this.date = new _xfa_object.XFAObjectArray(); - this.dateTime = new _xfa_object.XFAObjectArray(); - this.decimal = new _xfa_object.XFAObjectArray(); - this.exData = new _xfa_object.XFAObjectArray(); - this.float = new _xfa_object.XFAObjectArray(); - this.image = new _xfa_object.XFAObjectArray(); - this.integer = new _xfa_object.XFAObjectArray(); - this.text = new _xfa_object.XFAObjectArray(); - this.time = new _xfa_object.XFAObjectArray(); - } - - [_xfa_object.$toHTML]() { - const output = []; - - for (const child of this[_xfa_object.$getChildren]()) { - output.push(child[_xfa_object.$text]()); - } - - return _utils.HTMLResult.success(output); - } - -} - -exports.Items = Items; - -class Keep extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "keep", true); - this.id = attributes.id || ""; - const options = ["none", "contentArea", "pageArea"]; - this.intact = (0, _utils.getStringOption)(attributes.intact, options); - this.next = (0, _utils.getStringOption)(attributes.next, options); - this.previous = (0, _utils.getStringOption)(attributes.previous, options); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - } - -} - -class KeyUsage extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "keyUsage"); - const options = ["", "yes", "no"]; - this.crlSign = (0, _utils.getStringOption)(attributes.crlSign, options); - this.dataEncipherment = (0, _utils.getStringOption)(attributes.dataEncipherment, options); - this.decipherOnly = (0, _utils.getStringOption)(attributes.decipherOnly, options); - this.digitalSignature = (0, _utils.getStringOption)(attributes.digitalSignature, options); - this.encipherOnly = (0, _utils.getStringOption)(attributes.encipherOnly, options); - this.id = attributes.id || ""; - this.keyAgreement = (0, _utils.getStringOption)(attributes.keyAgreement, options); - this.keyCertSign = (0, _utils.getStringOption)(attributes.keyCertSign, options); - this.keyEncipherment = (0, _utils.getStringOption)(attributes.keyEncipherment, options); - this.nonRepudiation = (0, _utils.getStringOption)(attributes.nonRepudiation, options); - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class Line extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "line", true); - this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]); - this.id = attributes.id || ""; - this.slope = (0, _utils.getStringOption)(attributes.slope, ["\\", "/"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.edge = null; - } - - [_xfa_object.$toHTML]() { - const parent = this[_xfa_object.$getParent]()[_xfa_object.$getParent](); - - const edge = this.edge ? this.edge : new Edge({}); - - const edgeStyle = edge[_xfa_object.$toStyle](); - - const style = Object.create(null); - const thickness = edge.presence === "visible" ? edge.thickness : 0; - style.strokeWidth = (0, _html_utils.measureToString)(thickness); - style.stroke = edgeStyle.color; - let x1, y1, x2, y2; - let width = "100%"; - let height = "100%"; - - if (parent.w <= thickness) { - [x1, y1, x2, y2] = ["50%", 0, "50%", "100%"]; - width = style.strokeWidth; - } else if (parent.h <= thickness) { - [x1, y1, x2, y2] = [0, "50%", "100%", "50%"]; - height = style.strokeWidth; - } else { - if (this.slope === "\\") { - [x1, y1, x2, y2] = [0, 0, "100%", "100%"]; - } else { - [x1, y1, x2, y2] = [0, "100%", "100%", 0]; - } - } - - const line = { - name: "line", - attributes: { - xmlns: SVG_NS, - x1, - y1, - x2, - y2, - style - } - }; - const svg = { - name: "svg", - children: [line], - attributes: { - xmlns: SVG_NS, - width, - height, - style: { - overflow: "visible" - } - } - }; - - if (hasMargin(parent)) { - return _utils.HTMLResult.success({ - name: "div", - attributes: { - style: { - display: "inline", - width: "100%", - height: "100%" - } - }, - children: [svg] - }); - } - - svg.attributes.style.position = "absolute"; - return _utils.HTMLResult.success(svg); - } - -} - -class Linear extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "linear", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["toRight", "toBottom", "toLeft", "toTop"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.color = null; - this.extras = null; - } - - [_xfa_object.$toStyle](startColor) { - startColor = startColor ? startColor[_xfa_object.$toStyle]() : "#FFFFFF"; - const transf = this.type.replace(/([RBLT])/, " $1").toLowerCase(); - const endColor = this.color ? this.color[_xfa_object.$toStyle]() : "#000000"; - return `linear-gradient(${transf}, ${startColor}, ${endColor})`; - } - -} - -class LockDocument extends _xfa_object.ContentObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "lockDocument"); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - - [_xfa_object.$finalize]() { - this[_xfa_object.$content] = (0, _utils.getStringOption)(this[_xfa_object.$content], ["auto", "0", "1"]); - } - -} - -class Manifest extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "manifest", true); - this.action = (0, _utils.getStringOption)(attributes.action, ["include", "all", "exclude"]); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - this.ref = new _xfa_object.XFAObjectArray(); - } - -} - -class Margin extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "margin", true); - this.bottomInset = (0, _utils.getMeasurement)(attributes.bottomInset, "0"); - this.id = attributes.id || ""; - this.leftInset = (0, _utils.getMeasurement)(attributes.leftInset, "0"); - this.rightInset = (0, _utils.getMeasurement)(attributes.rightInset, "0"); - this.topInset = (0, _utils.getMeasurement)(attributes.topInset, "0"); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - } - - [_xfa_object.$toStyle]() { - return { - margin: (0, _html_utils.measureToString)(this.topInset) + " " + (0, _html_utils.measureToString)(this.rightInset) + " " + (0, _html_utils.measureToString)(this.bottomInset) + " " + (0, _html_utils.measureToString)(this.leftInset) - }; - } - -} - -class Mdp extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "mdp"); - this.id = attributes.id || ""; - this.permissions = (0, _utils.getInteger)({ - data: attributes.permissions, - defaultValue: 2, - validate: x => x === 1 || x === 3 - }); - this.signatureType = (0, _utils.getStringOption)(attributes.signatureType, ["filler", "author"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class Medium extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "medium"); - this.id = attributes.id || ""; - this.imagingBBox = (0, _utils.getBBox)(attributes.imagingBBox); - this.long = (0, _utils.getMeasurement)(attributes.long); - this.orientation = (0, _utils.getStringOption)(attributes.orientation, ["portrait", "landscape"]); - this.short = (0, _utils.getMeasurement)(attributes.short); - this.stock = attributes.stock || ""; - this.trayIn = (0, _utils.getStringOption)(attributes.trayIn, ["auto", "delegate", "pageFront"]); - this.trayOut = (0, _utils.getStringOption)(attributes.trayOut, ["auto", "delegate"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class Message extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "message", true); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.text = new _xfa_object.XFAObjectArray(); - } - -} - -class NumericEdit extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "numericEdit", true); - this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.border = null; - this.comb = null; - this.extras = null; - this.margin = null; - } - - [_xfa_object.$toHTML](availableSpace) { - const style = (0, _html_utils.toStyle)(this, "border", "font", "margin"); - - const field = this[_xfa_object.$getParent]()[_xfa_object.$getParent](); - - const html = { - name: "input", - attributes: { - type: "text", - fieldId: field[_xfa_object.$uid], - dataId: field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid], - class: ["xfaTextfield"], - style, - "aria-label": ariaLabel(field) - } - }; - return _utils.HTMLResult.success({ - name: "label", - attributes: { - class: ["xfaLabel"] - }, - children: [html] - }); - } - -} - -class Occur extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "occur", true); - this.id = attributes.id || ""; - this.initial = attributes.initial !== "" ? (0, _utils.getInteger)({ - data: attributes.initial, - defaultValue: "", - validate: x => true - }) : ""; - this.max = attributes.max !== "" ? (0, _utils.getInteger)({ - data: attributes.max, - defaultValue: 1, - validate: x => true - }) : ""; - this.min = attributes.min !== "" ? (0, _utils.getInteger)({ - data: attributes.min, - defaultValue: 1, - validate: x => true - }) : ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - } - - [_xfa_object.$clean]() { - const parent = this[_xfa_object.$getParent](); - - const originalMin = this.min; - - if (this.min === "") { - this.min = parent instanceof PageArea || parent instanceof PageSet ? 0 : 1; - } - - if (this.max === "") { - if (originalMin === "") { - this.max = parent instanceof PageArea || parent instanceof PageSet ? -1 : 1; - } else { - this.max = this.min; - } - } - - if (this.max !== -1 && this.max < this.min) { - this.max = this.min; - } - - if (this.initial === "") { - this.initial = parent instanceof Template ? 1 : this.min; - } - } - -} - -class Oid extends _xfa_object.StringObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "oid"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class Oids extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "oids", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.oid = new _xfa_object.XFAObjectArray(); - } - -} - -class Overflow extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "overflow"); - this.id = attributes.id || ""; - this.leader = attributes.leader || ""; - this.target = attributes.target || ""; - this.trailer = attributes.trailer || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - - [_xfa_object.$getExtra]() { - if (!this[_xfa_object.$extra]) { - const parent = this[_xfa_object.$getParent](); - - const root = this[_xfa_object.$getTemplateRoot](); - - const target = root[_xfa_object.$searchNode](this.target, parent); - - const leader = root[_xfa_object.$searchNode](this.leader, parent); - - const trailer = root[_xfa_object.$searchNode](this.trailer, parent); - - this[_xfa_object.$extra] = { - target: target && target[0] || null, - leader: leader && leader[0] || null, - trailer: trailer && trailer[0] || null, - addLeader: false, - addTrailer: false - }; - } - - return this[_xfa_object.$extra]; - } - -} - -class PageArea extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "pageArea", true); - this.blankOrNotBlank = (0, _utils.getStringOption)(attributes.blankOrNotBlank, ["any", "blank", "notBlank"]); - this.id = attributes.id || ""; - this.initialNumber = (0, _utils.getInteger)({ - data: attributes.initialNumber, - defaultValue: 1, - validate: x => true - }); - this.name = attributes.name || ""; - this.numbered = (0, _utils.getInteger)({ - data: attributes.numbered, - defaultValue: 1, - validate: x => true - }); - this.oddOrEven = (0, _utils.getStringOption)(attributes.oddOrEven, ["any", "even", "odd"]); - this.pagePosition = (0, _utils.getStringOption)(attributes.pagePosition, ["any", "first", "last", "only", "rest"]); - this.relevant = (0, _utils.getRelevant)(attributes.relevant); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.desc = null; - this.extras = null; - this.medium = null; - this.occur = null; - this.area = new _xfa_object.XFAObjectArray(); - this.contentArea = new _xfa_object.XFAObjectArray(); - this.draw = new _xfa_object.XFAObjectArray(); - this.exclGroup = new _xfa_object.XFAObjectArray(); - this.field = new _xfa_object.XFAObjectArray(); - this.subform = new _xfa_object.XFAObjectArray(); - } - - [_xfa_object.$isUsable]() { - if (!this[_xfa_object.$extra]) { - this[_xfa_object.$extra] = { - numberOfUse: 0 - }; - return true; - } - - return !this.occur || this.occur.max === -1 || this[_xfa_object.$extra].numberOfUse < this.occur.max; - } - - [_xfa_object.$cleanPage]() { - delete this[_xfa_object.$extra]; - } - - [_xfa_object.$getNextPage]() { - if (!this[_xfa_object.$extra]) { - this[_xfa_object.$extra] = { - numberOfUse: 0 - }; - } - - const parent = this[_xfa_object.$getParent](); - - if (parent.relation === "orderedOccurrence") { - if (this[_xfa_object.$isUsable]()) { - this[_xfa_object.$extra].numberOfUse += 1; - return this; - } - } - - return parent[_xfa_object.$getNextPage](); - } - - [_xfa_object.$getAvailableSpace]() { - return this[_xfa_object.$extra].space || { - width: 0, - height: 0 - }; - } - - [_xfa_object.$toHTML]() { - if (!this[_xfa_object.$extra]) { - this[_xfa_object.$extra] = { - numberOfUse: 1 - }; - } - - const children = []; - this[_xfa_object.$extra].children = children; - const style = Object.create(null); - - if (this.medium && this.medium.short && this.medium.long) { - style.width = (0, _html_utils.measureToString)(this.medium.short); - style.height = (0, _html_utils.measureToString)(this.medium.long); - this[_xfa_object.$extra].space = { - width: this.medium.short, - height: this.medium.long - }; - - if (this.medium.orientation === "landscape") { - const x = style.width; - style.width = style.height; - style.height = x; - this[_xfa_object.$extra].space = { - width: this.medium.long, - height: this.medium.short - }; - } - } else { - (0, _util.warn)("XFA - No medium specified in pageArea: please file a bug."); - } - - this[_xfa_object.$childrenToHTML]({ - filter: new Set(["area", "draw", "field", "subform"]), - include: true - }); - - this[_xfa_object.$childrenToHTML]({ - filter: new Set(["contentArea"]), - include: true - }); - - return _utils.HTMLResult.success({ - name: "div", - children, - attributes: { - class: ["xfaPage"], - id: this[_xfa_object.$uid], - style, - xfaName: this.name - } - }); - } - -} - -class PageSet extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "pageSet", true); - this.duplexImposition = (0, _utils.getStringOption)(attributes.duplexImposition, ["longEdge", "shortEdge"]); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.relation = (0, _utils.getStringOption)(attributes.relation, ["orderedOccurrence", "duplexPaginated", "simplexPaginated"]); - this.relevant = (0, _utils.getRelevant)(attributes.relevant); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - this.occur = null; - this.pageArea = new _xfa_object.XFAObjectArray(); - this.pageSet = new _xfa_object.XFAObjectArray(); - } - - [_xfa_object.$cleanPage]() { - for (const page of this.pageArea.children) { - page[_xfa_object.$cleanPage](); - } - - for (const page of this.pageSet.children) { - page[_xfa_object.$cleanPage](); - } - } - - [_xfa_object.$isUsable]() { - return !this.occur || this.occur.max === -1 || this[_xfa_object.$extra].numberOfUse < this.occur.max; - } - - [_xfa_object.$getNextPage]() { - if (!this[_xfa_object.$extra]) { - this[_xfa_object.$extra] = { - numberOfUse: 1, - pageIndex: -1, - pageSetIndex: -1 - }; - } - - if (this.relation === "orderedOccurrence") { - if (this[_xfa_object.$extra].pageIndex + 1 < this.pageArea.children.length) { - this[_xfa_object.$extra].pageIndex += 1; - const pageArea = this.pageArea.children[this[_xfa_object.$extra].pageIndex]; - return pageArea[_xfa_object.$getNextPage](); - } - - if (this[_xfa_object.$extra].pageSetIndex + 1 < this.pageSet.children.length) { - this[_xfa_object.$extra].pageSetIndex += 1; - return this.pageSet.children[this[_xfa_object.$extra].pageSetIndex][_xfa_object.$getNextPage](); - } - - if (this[_xfa_object.$isUsable]()) { - this[_xfa_object.$extra].numberOfUse += 1; - this[_xfa_object.$extra].pageIndex = -1; - this[_xfa_object.$extra].pageSetIndex = -1; - return this[_xfa_object.$getNextPage](); - } - - const parent = this[_xfa_object.$getParent](); - - if (parent instanceof PageSet) { - return parent[_xfa_object.$getNextPage](); - } - - this[_xfa_object.$cleanPage](); - - return this[_xfa_object.$getNextPage](); - } - - const pageNumber = this[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].pageNumber; - - const parity = pageNumber % 2 === 0 ? "even" : "odd"; - const position = pageNumber === 0 ? "first" : "rest"; - let page = this.pageArea.children.find(p => p.oddOrEven === parity && p.pagePosition === position); - - if (page) { - return page; - } - - page = this.pageArea.children.find(p => p.oddOrEven === "any" && p.pagePosition === position); - - if (page) { - return page; - } - - page = this.pageArea.children.find(p => p.oddOrEven === "any" && p.pagePosition === "any"); - - if (page) { - return page; - } - - return this.pageArea.children[0]; - } - -} - -class Para extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "para", true); - this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]); - this.id = attributes.id || ""; - this.lineHeight = attributes.lineHeight ? (0, _utils.getMeasurement)(attributes.lineHeight, "0pt") : ""; - this.marginLeft = attributes.marginLeft ? (0, _utils.getMeasurement)(attributes.marginLeft, "0pt") : ""; - this.marginRight = attributes.marginRight ? (0, _utils.getMeasurement)(attributes.marginRight, "0pt") : ""; - this.orphans = (0, _utils.getInteger)({ - data: attributes.orphans, - defaultValue: 0, - validate: x => x >= 0 - }); - this.preserve = attributes.preserve || ""; - this.radixOffset = attributes.radixOffset ? (0, _utils.getMeasurement)(attributes.radixOffset, "0pt") : ""; - this.spaceAbove = attributes.spaceAbove ? (0, _utils.getMeasurement)(attributes.spaceAbove, "0pt") : ""; - this.spaceBelow = attributes.spaceBelow ? (0, _utils.getMeasurement)(attributes.spaceBelow, "0pt") : ""; - this.tabDefault = attributes.tabDefault ? (0, _utils.getMeasurement)(this.tabDefault) : ""; - this.tabStops = (attributes.tabStops || "").trim().split(/\s+/).map((x, i) => i % 2 === 1 ? (0, _utils.getMeasurement)(x) : x); - this.textIndent = attributes.textIndent ? (0, _utils.getMeasurement)(attributes.textIndent, "0pt") : ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.vAlign = (0, _utils.getStringOption)(attributes.vAlign, ["top", "bottom", "middle"]); - this.widows = (0, _utils.getInteger)({ - data: attributes.widows, - defaultValue: 0, - validate: x => x >= 0 - }); - this.hyphenation = null; - } - - [_xfa_object.$toStyle]() { - const style = (0, _html_utils.toStyle)(this, "hAlign"); - - if (this.marginLeft !== "") { - style.paddingLeft = (0, _html_utils.measureToString)(this.marginLeft); - } - - if (this.marginRight !== "") { - style.paddingight = (0, _html_utils.measureToString)(this.marginRight); - } - - if (this.spaceAbove !== "") { - style.paddingTop = (0, _html_utils.measureToString)(this.spaceAbove); - } - - if (this.spaceBelow !== "") { - style.paddingBottom = (0, _html_utils.measureToString)(this.spaceBelow); - } - - if (this.textIndent !== "") { - style.textIndent = (0, _html_utils.measureToString)(this.textIndent); - (0, _html_utils.fixTextIndent)(style); - } - - if (this.lineHeight > 0) { - style.lineHeight = (0, _html_utils.measureToString)(this.lineHeight); - } - - if (this.tabDefault !== "") { - style.tabSize = (0, _html_utils.measureToString)(this.tabDefault); - } - - if (this.tabStops.length > 0) ; - - if (this.hyphenatation) { - Object.assign(style, this.hyphenatation[_xfa_object.$toStyle]()); - } - - return style; - } - -} - -class PasswordEdit extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "passwordEdit", true); - this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]); - this.id = attributes.id || ""; - this.passwordChar = attributes.passwordChar || "*"; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.border = null; - this.extras = null; - this.margin = null; - } - -} - -class Pattern extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "pattern", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["crossHatch", "crossDiagonal", "diagonalLeft", "diagonalRight", "horizontal", "vertical"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.color = null; - this.extras = null; - } - - [_xfa_object.$toStyle](startColor) { - startColor = startColor ? startColor[_xfa_object.$toStyle]() : "#FFFFFF"; - const endColor = this.color ? this.color[_xfa_object.$toStyle]() : "#000000"; - const width = 5; - const cmd = "repeating-linear-gradient"; - const colors = `${startColor},${startColor} ${width}px,${endColor} ${width}px,${endColor} ${2 * width}px`; - - switch (this.type) { - case "crossHatch": - return `${cmd}(to top,${colors}) ${cmd}(to right,${colors})`; - - case "crossDiagonal": - return `${cmd}(45deg,${colors}) ${cmd}(-45deg,${colors})`; - - case "diagonalLeft": - return `${cmd}(45deg,${colors})`; - - case "diagonalRight": - return `${cmd}(-45deg,${colors})`; - - case "horizontal": - return `${cmd}(to top,${colors})`; - - case "vertical": - return `${cmd}(to right,${colors})`; - } - - return ""; - } - -} - -class Picture extends _xfa_object.StringObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "picture"); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class Proto extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "proto", true); - this.appearanceFilter = new _xfa_object.XFAObjectArray(); - this.arc = new _xfa_object.XFAObjectArray(); - this.area = new _xfa_object.XFAObjectArray(); - this.assist = new _xfa_object.XFAObjectArray(); - this.barcode = new _xfa_object.XFAObjectArray(); - this.bindItems = new _xfa_object.XFAObjectArray(); - this.bookend = new _xfa_object.XFAObjectArray(); - this.boolean = new _xfa_object.XFAObjectArray(); - this.border = new _xfa_object.XFAObjectArray(); - this.break = new _xfa_object.XFAObjectArray(); - this.breakAfter = new _xfa_object.XFAObjectArray(); - this.breakBefore = new _xfa_object.XFAObjectArray(); - this.button = new _xfa_object.XFAObjectArray(); - this.calculate = new _xfa_object.XFAObjectArray(); - this.caption = new _xfa_object.XFAObjectArray(); - this.certificate = new _xfa_object.XFAObjectArray(); - this.certificates = new _xfa_object.XFAObjectArray(); - this.checkButton = new _xfa_object.XFAObjectArray(); - this.choiceList = new _xfa_object.XFAObjectArray(); - this.color = new _xfa_object.XFAObjectArray(); - this.comb = new _xfa_object.XFAObjectArray(); - this.connect = new _xfa_object.XFAObjectArray(); - this.contentArea = new _xfa_object.XFAObjectArray(); - this.corner = new _xfa_object.XFAObjectArray(); - this.date = new _xfa_object.XFAObjectArray(); - this.dateTime = new _xfa_object.XFAObjectArray(); - this.dateTimeEdit = new _xfa_object.XFAObjectArray(); - this.decimal = new _xfa_object.XFAObjectArray(); - this.defaultUi = new _xfa_object.XFAObjectArray(); - this.desc = new _xfa_object.XFAObjectArray(); - this.digestMethod = new _xfa_object.XFAObjectArray(); - this.digestMethods = new _xfa_object.XFAObjectArray(); - this.draw = new _xfa_object.XFAObjectArray(); - this.edge = new _xfa_object.XFAObjectArray(); - this.encoding = new _xfa_object.XFAObjectArray(); - this.encodings = new _xfa_object.XFAObjectArray(); - this.encrypt = new _xfa_object.XFAObjectArray(); - this.encryptData = new _xfa_object.XFAObjectArray(); - this.encryption = new _xfa_object.XFAObjectArray(); - this.encryptionMethod = new _xfa_object.XFAObjectArray(); - this.encryptionMethods = new _xfa_object.XFAObjectArray(); - this.event = new _xfa_object.XFAObjectArray(); - this.exData = new _xfa_object.XFAObjectArray(); - this.exObject = new _xfa_object.XFAObjectArray(); - this.exclGroup = new _xfa_object.XFAObjectArray(); - this.execute = new _xfa_object.XFAObjectArray(); - this.extras = new _xfa_object.XFAObjectArray(); - this.field = new _xfa_object.XFAObjectArray(); - this.fill = new _xfa_object.XFAObjectArray(); - this.filter = new _xfa_object.XFAObjectArray(); - this.float = new _xfa_object.XFAObjectArray(); - this.font = new _xfa_object.XFAObjectArray(); - this.format = new _xfa_object.XFAObjectArray(); - this.handler = new _xfa_object.XFAObjectArray(); - this.hyphenation = new _xfa_object.XFAObjectArray(); - this.image = new _xfa_object.XFAObjectArray(); - this.imageEdit = new _xfa_object.XFAObjectArray(); - this.integer = new _xfa_object.XFAObjectArray(); - this.issuers = new _xfa_object.XFAObjectArray(); - this.items = new _xfa_object.XFAObjectArray(); - this.keep = new _xfa_object.XFAObjectArray(); - this.keyUsage = new _xfa_object.XFAObjectArray(); - this.line = new _xfa_object.XFAObjectArray(); - this.linear = new _xfa_object.XFAObjectArray(); - this.lockDocument = new _xfa_object.XFAObjectArray(); - this.manifest = new _xfa_object.XFAObjectArray(); - this.margin = new _xfa_object.XFAObjectArray(); - this.mdp = new _xfa_object.XFAObjectArray(); - this.medium = new _xfa_object.XFAObjectArray(); - this.message = new _xfa_object.XFAObjectArray(); - this.numericEdit = new _xfa_object.XFAObjectArray(); - this.occur = new _xfa_object.XFAObjectArray(); - this.oid = new _xfa_object.XFAObjectArray(); - this.oids = new _xfa_object.XFAObjectArray(); - this.overflow = new _xfa_object.XFAObjectArray(); - this.pageArea = new _xfa_object.XFAObjectArray(); - this.pageSet = new _xfa_object.XFAObjectArray(); - this.para = new _xfa_object.XFAObjectArray(); - this.passwordEdit = new _xfa_object.XFAObjectArray(); - this.pattern = new _xfa_object.XFAObjectArray(); - this.picture = new _xfa_object.XFAObjectArray(); - this.radial = new _xfa_object.XFAObjectArray(); - this.reason = new _xfa_object.XFAObjectArray(); - this.reasons = new _xfa_object.XFAObjectArray(); - this.rectangle = new _xfa_object.XFAObjectArray(); - this.ref = new _xfa_object.XFAObjectArray(); - this.script = new _xfa_object.XFAObjectArray(); - this.setProperty = new _xfa_object.XFAObjectArray(); - this.signData = new _xfa_object.XFAObjectArray(); - this.signature = new _xfa_object.XFAObjectArray(); - this.signing = new _xfa_object.XFAObjectArray(); - this.solid = new _xfa_object.XFAObjectArray(); - this.speak = new _xfa_object.XFAObjectArray(); - this.stipple = new _xfa_object.XFAObjectArray(); - this.subform = new _xfa_object.XFAObjectArray(); - this.subformSet = new _xfa_object.XFAObjectArray(); - this.subjectDN = new _xfa_object.XFAObjectArray(); - this.subjectDNs = new _xfa_object.XFAObjectArray(); - this.submit = new _xfa_object.XFAObjectArray(); - this.text = new _xfa_object.XFAObjectArray(); - this.textEdit = new _xfa_object.XFAObjectArray(); - this.time = new _xfa_object.XFAObjectArray(); - this.timeStamp = new _xfa_object.XFAObjectArray(); - this.toolTip = new _xfa_object.XFAObjectArray(); - this.traversal = new _xfa_object.XFAObjectArray(); - this.traverse = new _xfa_object.XFAObjectArray(); - this.ui = new _xfa_object.XFAObjectArray(); - this.validate = new _xfa_object.XFAObjectArray(); - this.value = new _xfa_object.XFAObjectArray(); - this.variables = new _xfa_object.XFAObjectArray(); - } - -} - -class Radial extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "radial", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["toEdge", "toCenter"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.color = null; - this.extras = null; - } - - [_xfa_object.$toStyle](startColor) { - startColor = startColor ? startColor[_xfa_object.$toStyle]() : "#FFFFFF"; - const endColor = this.color ? this.color[_xfa_object.$toStyle]() : "#000000"; - const colors = this.type === "toEdge" ? `${startColor},${endColor}` : `${endColor},${startColor}`; - return `radial-gradient(circle at center, ${colors})`; - } - -} - -class Reason extends _xfa_object.StringObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "reason"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class Reasons extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "reasons", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.reason = new _xfa_object.XFAObjectArray(); - } - -} - -class Rectangle extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "rectangle", true); - this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.corner = new _xfa_object.XFAObjectArray(4); - this.edge = new _xfa_object.XFAObjectArray(4); - this.fill = null; - } - - [_xfa_object.$toHTML]() { - const edge = this.edge.children.length ? this.edge.children[0] : new Edge({}); - - const edgeStyle = edge[_xfa_object.$toStyle](); - - const style = Object.create(null); - - if (this.fill && this.fill.presence === "visible") { - Object.assign(style, this.fill[_xfa_object.$toStyle]()); - } else { - style.fill = "transparent"; - } - - style.strokeWidth = (0, _html_utils.measureToString)(edge.presence === "visible" ? edge.thickness : 0); - style.stroke = edgeStyle.color; - const corner = this.corner.children.length ? this.corner.children[0] : new Corner({}); - - const cornerStyle = corner[_xfa_object.$toStyle](); - - const rect = { - name: "rect", - attributes: { - xmlns: SVG_NS, - width: "100%", - height: "100%", - x: 0, - y: 0, - rx: cornerStyle.radius, - ry: cornerStyle.radius, - style - } - }; - const svg = { - name: "svg", - children: [rect], - attributes: { - xmlns: SVG_NS, - style: { - overflow: "visible" - }, - width: "100%", - height: "100%" - } - }; - - const parent = this[_xfa_object.$getParent]()[_xfa_object.$getParent](); - - if (hasMargin(parent)) { - return _utils.HTMLResult.success({ - name: "div", - attributes: { - style: { - display: "inline", - width: "100%", - height: "100%" - } - }, - children: [svg] - }); - } - - svg.attributes.style.position = "absolute"; - return _utils.HTMLResult.success(svg); - } - -} - -class RefElement extends _xfa_object.StringObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "ref"); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class Script extends _xfa_object.StringObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "script"); - this.binding = attributes.binding || ""; - this.contentType = attributes.contentType || ""; - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.runAt = (0, _utils.getStringOption)(attributes.runAt, ["client", "both", "server"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class SetProperty extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "setProperty"); - this.connection = attributes.connection || ""; - this.ref = attributes.ref || ""; - this.target = attributes.target || ""; - } - -} - -exports.SetProperty = SetProperty; - -class SignData extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "signData", true); - this.id = attributes.id || ""; - this.operation = (0, _utils.getStringOption)(attributes.operation, ["sign", "clear", "verify"]); - this.ref = attributes.ref || ""; - this.target = attributes.target || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.filter = null; - this.manifest = null; - } - -} - -class Signature extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "signature", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["PDF1.3", "PDF1.6"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.border = null; - this.extras = null; - this.filter = null; - this.manifest = null; - this.margin = null; - } - -} - -class Signing extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "signing", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.certificate = new _xfa_object.XFAObjectArray(); - } - -} - -class Solid extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "solid", true); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - } - - [_xfa_object.$toStyle](startColor) { - return startColor ? startColor[_xfa_object.$toStyle]() : "#FFFFFF"; - } - -} - -class Speak extends _xfa_object.StringObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "speak"); - this.disable = (0, _utils.getInteger)({ - data: attributes.disable, - defaultValue: 0, - validate: x => x === 1 - }); - this.id = attributes.id || ""; - this.priority = (0, _utils.getStringOption)(attributes.priority, ["custom", "caption", "name", "toolTip"]); - this.rid = attributes.rid || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class Stipple extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "stipple", true); - this.id = attributes.id || ""; - this.rate = (0, _utils.getInteger)({ - data: attributes.rate, - defaultValue: 50, - validate: x => x >= 0 && x <= 100 - }); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.color = null; - this.extras = null; - } - - [_xfa_object.$toStyle](bgColor) { - const alpha = this.rate / 100; - return _util.Util.makeHexColor(Math.round(bgColor.value.r * (1 - alpha) + this.value.r * alpha), Math.round(bgColor.value.g * (1 - alpha) + this.value.g * alpha), Math.round(bgColor.value.b * (1 - alpha) + this.value.b * alpha)); - } - -} - -class Subform extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "subform", true); - this.access = (0, _utils.getStringOption)(attributes.access, ["open", "nonInteractive", "protected", "readOnly"]); - this.allowMacro = (0, _utils.getInteger)({ - data: attributes.allowMacro, - defaultValue: 0, - validate: x => x === 1 - }); - this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", "bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]); - this.colSpan = (0, _utils.getInteger)({ - data: attributes.colSpan, - defaultValue: 1, - validate: n => n >= 1 || n === -1 - }); - this.columnWidths = (attributes.columnWidths || "").trim().split(/\s+/).map(x => x === "-1" ? -1 : (0, _utils.getMeasurement)(x)); - this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : ""; - this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]); - this.id = attributes.id || ""; - this.layout = (0, _utils.getStringOption)(attributes.layout, ["position", "lr-tb", "rl-row", "rl-tb", "row", "table", "tb"]); - this.locale = attributes.locale || ""; - this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt"); - this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt"); - this.mergeMode = (0, _utils.getStringOption)(attributes.mergeMode, ["consumeData", "matchTemplate"]); - this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt"); - this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt"); - this.name = attributes.name || ""; - this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); - this.relevant = (0, _utils.getRelevant)(attributes.relevant); - this.restoreState = (0, _utils.getStringOption)(attributes.restoreState, ["manual", "auto"]); - this.scope = (0, _utils.getStringOption)(attributes.scope, ["name", "none"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : ""; - this.x = (0, _utils.getMeasurement)(attributes.x, "0pt"); - this.y = (0, _utils.getMeasurement)(attributes.y, "0pt"); - this.assist = null; - this.bind = null; - this.bookend = null; - this.border = null; - this.break = null; - this.calculate = null; - this.desc = null; - this.extras = null; - this.keep = null; - this.margin = null; - this.occur = null; - this.overflow = null; - this.pageSet = null; - this.para = null; - this.traversal = null; - this.validate = null; - this.variables = null; - this.area = new _xfa_object.XFAObjectArray(); - this.breakAfter = new _xfa_object.XFAObjectArray(); - this.breakBefore = new _xfa_object.XFAObjectArray(); - this.connect = new _xfa_object.XFAObjectArray(); - this.draw = new _xfa_object.XFAObjectArray(); - this.event = new _xfa_object.XFAObjectArray(); - this.exObject = new _xfa_object.XFAObjectArray(); - this.exclGroup = new _xfa_object.XFAObjectArray(); - this.field = new _xfa_object.XFAObjectArray(); - this.proto = new _xfa_object.XFAObjectArray(); - this.setProperty = new _xfa_object.XFAObjectArray(); - this.subform = new _xfa_object.XFAObjectArray(); - this.subformSet = new _xfa_object.XFAObjectArray(); - } - - [_xfa_object.$getSubformParent]() { - const parent = this[_xfa_object.$getParent](); - - if (parent instanceof SubformSet) { - return parent[_xfa_object.$getSubformParent](); - } - - return parent; - } - - [_xfa_object.$isBindable]() { - return true; - } - - [_xfa_object.$isThereMoreWidth]() { - return this.layout.endsWith("-tb") && this[_xfa_object.$extra].attempt === 0 && this[_xfa_object.$extra].numberInLine > 0 || this[_xfa_object.$getParent]()[_xfa_object.$isThereMoreWidth](); - } - - *[_xfa_object.$getContainedChildren]() { - yield* getContainedChildren(this); - } - - [_xfa_object.$flushHTML]() { - return (0, _layout.flushHTML)(this); - } - - [_xfa_object.$addHTML](html, bbox) { - (0, _layout.addHTML)(this, html, bbox); - } - - [_xfa_object.$getAvailableSpace]() { - return (0, _layout.getAvailableSpace)(this); - } - - [_xfa_object.$isSplittable]() { - const parent = this[_xfa_object.$getSubformParent](); - - if (!parent[_xfa_object.$isSplittable]()) { - return false; - } - - if (this[_xfa_object.$extra]._isSplittable !== undefined) { - return this[_xfa_object.$extra]._isSplittable; - } - - if (this.layout === "position" || this.layout.includes("row")) { - this[_xfa_object.$extra]._isSplittable = false; - return false; - } - - if (this.keep && this.keep.intact !== "none") { - this[_xfa_object.$extra]._isSplittable = false; - return false; - } - - if (parent.layout && parent.layout.endsWith("-tb") && parent[_xfa_object.$extra].numberInLine !== 0) { - return false; - } - - this[_xfa_object.$extra]._isSplittable = true; - return true; - } - - [_xfa_object.$toHTML](availableSpace) { - setTabIndex(this); - - if (this.break) { - if (this.break.after !== "auto" || this.break.afterTarget !== "") { - const node = new BreakAfter({ - targetType: this.break.after, - target: this.break.afterTarget, - startNew: this.break.startNew.toString() - }); - node[_xfa_object.$globalData] = this[_xfa_object.$globalData]; - - this[_xfa_object.$appendChild](node); - - this.breakAfter.push(node); - } - - if (this.break.before !== "auto" || this.break.beforeTarget !== "") { - const node = new BreakBefore({ - targetType: this.break.before, - target: this.break.beforeTarget, - startNew: this.break.startNew.toString() - }); - node[_xfa_object.$globalData] = this[_xfa_object.$globalData]; - - this[_xfa_object.$appendChild](node); - - this.breakBefore.push(node); - } - - if (this.break.overflowTarget !== "") { - const node = new Overflow({ - target: this.break.overflowTarget, - leader: this.break.overflowLeader, - trailer: this.break.overflowTrailer - }); - node[_xfa_object.$globalData] = this[_xfa_object.$globalData]; - - this[_xfa_object.$appendChild](node); - - this.overflow.push(node); - } - - this[_xfa_object.$removeChild](this.break); - - this.break = null; - } - - if (this.presence === "hidden" || this.presence === "inactive") { - return _utils.HTMLResult.EMPTY; - } - - if (this.breakBefore.children.length > 1 || this.breakAfter.children.length > 1) { - (0, _util.warn)("XFA - Several breakBefore or breakAfter in subforms: please file a bug."); - } - - if (this.breakBefore.children.length >= 1) { - const breakBefore = this.breakBefore.children[0]; - - if (handleBreak(breakBefore)) { - return _utils.HTMLResult.breakNode(breakBefore); - } - } - - if (this[_xfa_object.$extra] && this[_xfa_object.$extra].afterBreakAfter) { - return _utils.HTMLResult.EMPTY; - } - - (0, _html_utils.fixDimensions)(this); - const children = []; - const attributes = { - id: this[_xfa_object.$uid], - class: [] - }; - (0, _html_utils.setAccess)(this, attributes.class); - - if (!this[_xfa_object.$extra]) { - this[_xfa_object.$extra] = Object.create(null); - } - - Object.assign(this[_xfa_object.$extra], { - children, - line: null, - attributes, - attempt: 0, - numberInLine: 0, - availableSpace: { - width: Math.min(this.w || Infinity, availableSpace.width), - height: Math.min(this.h || Infinity, availableSpace.height) - }, - width: 0, - height: 0, - prevHeight: 0, - currentWidth: 0 - }); - - const root = this[_xfa_object.$getTemplateRoot](); - - const savedNoLayoutFailure = root[_xfa_object.$extra].noLayoutFailure; - - const isSplittable = this[_xfa_object.$isSplittable](); - - if (!isSplittable) { - setFirstUnsplittable(this); - } - - if (!(0, _layout.checkDimensions)(this, availableSpace)) { - return _utils.HTMLResult.FAILURE; - } - - const filter = new Set(["area", "draw", "exclGroup", "field", "subform", "subformSet"]); - - if (this.layout.includes("row")) { - const columnWidths = this[_xfa_object.$getSubformParent]().columnWidths; - - if (Array.isArray(columnWidths) && columnWidths.length > 0) { - this[_xfa_object.$extra].columnWidths = columnWidths; - this[_xfa_object.$extra].currentColumn = 0; - } - } - - const style = (0, _html_utils.toStyle)(this, "anchorType", "dimensions", "position", "presence", "border", "margin", "hAlign"); - const classNames = ["xfaSubform"]; - const cl = (0, _html_utils.layoutClass)(this); - - if (cl) { - classNames.push(cl); - } - - attributes.style = style; - attributes.class = classNames; - - if (this.name) { - attributes.xfaName = this.name; - } - - if (this.overflow) { - const overflowExtra = this.overflow[_xfa_object.$getExtra](); - - if (overflowExtra.addLeader) { - overflowExtra.addLeader = false; - handleOverflow(this, overflowExtra.leader, availableSpace); - } - } - - this[_xfa_object.$pushPara](); - - const isLrTb = this.layout === "lr-tb" || this.layout === "rl-tb"; - const maxRun = isLrTb ? MAX_ATTEMPTS_FOR_LRTB_LAYOUT : 1; - - for (; this[_xfa_object.$extra].attempt < maxRun; this[_xfa_object.$extra].attempt++) { - if (isLrTb && this[_xfa_object.$extra].attempt === MAX_ATTEMPTS_FOR_LRTB_LAYOUT - 1) { - this[_xfa_object.$extra].numberInLine = 0; - } - - const result = this[_xfa_object.$childrenToHTML]({ - filter, - include: true - }); - - if (result.success) { - break; - } - - if (result.isBreak()) { - this[_xfa_object.$popPara](); - - return result; - } - - if (isLrTb && this[_xfa_object.$extra].attempt === 0 && this[_xfa_object.$extra].numberInLine === 0 && !root[_xfa_object.$extra].noLayoutFailure) { - this[_xfa_object.$extra].attempt = maxRun; - break; - } - } - - this[_xfa_object.$popPara](); - - if (!isSplittable) { - unsetFirstUnsplittable(this); - } - - root[_xfa_object.$extra].noLayoutFailure = savedNoLayoutFailure; - - if (this[_xfa_object.$extra].attempt === maxRun) { - if (this.overflow) { - this[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].overflowNode = this.overflow; - } - - if (!isSplittable) { - delete this[_xfa_object.$extra]; - } - - return _utils.HTMLResult.FAILURE; - } - - if (this.overflow) { - const overflowExtra = this.overflow[_xfa_object.$getExtra](); - - if (overflowExtra.addTrailer) { - overflowExtra.addTrailer = false; - handleOverflow(this, overflowExtra.trailer, availableSpace); - } - } - - let marginH = 0; - let marginV = 0; - - if (this.margin) { - marginH = this.margin.leftInset + this.margin.rightInset; - marginV = this.margin.topInset + this.margin.bottomInset; - } - - const width = Math.max(this[_xfa_object.$extra].width + marginH, this.w || 0); - const height = Math.max(this[_xfa_object.$extra].height + marginV, this.h || 0); - const bbox = [this.x, this.y, width, height]; - - if (this.w === "") { - style.width = (0, _html_utils.measureToString)(width); - } - - if (this.h === "") { - style.height = (0, _html_utils.measureToString)(height); - } - - if ((style.width === "0px" || style.height === "0px") && children.length === 0) { - return _utils.HTMLResult.EMPTY; - } - - const html = { - name: "div", - attributes, - children - }; - applyAssist(this, attributes); - - const result = _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); - - if (this.breakAfter.children.length >= 1) { - const breakAfter = this.breakAfter.children[0]; - - if (handleBreak(breakAfter)) { - this[_xfa_object.$extra].afterBreakAfter = result; - return _utils.HTMLResult.breakNode(breakAfter); - } - } - - delete this[_xfa_object.$extra]; - return result; - } - -} - -class SubformSet extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "subformSet", true); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.relation = (0, _utils.getStringOption)(attributes.relation, ["ordered", "choice", "unordered"]); - this.relevant = (0, _utils.getRelevant)(attributes.relevant); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.bookend = null; - this.break = null; - this.desc = null; - this.extras = null; - this.occur = null; - this.overflow = null; - this.breakAfter = new _xfa_object.XFAObjectArray(); - this.breakBefore = new _xfa_object.XFAObjectArray(); - this.subform = new _xfa_object.XFAObjectArray(); - this.subformSet = new _xfa_object.XFAObjectArray(); - } - - *[_xfa_object.$getContainedChildren]() { - yield* getContainedChildren(this); - } - - [_xfa_object.$getSubformParent]() { - let parent = this[_xfa_object.$getParent](); - - while (!(parent instanceof Subform)) { - parent = parent[_xfa_object.$getParent](); - } - - return parent; - } - - [_xfa_object.$isBindable]() { - return true; - } - -} - -class SubjectDN extends _xfa_object.ContentObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "subjectDN"); - this.delimiter = attributes.delimiter || ","; - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - - [_xfa_object.$finalize]() { - this[_xfa_object.$content] = new Map(this[_xfa_object.$content].split(this.delimiter).map(kv => { - kv = kv.split("=", 2); - kv[0] = kv[0].trim(); - return kv; - })); - } - -} - -class SubjectDNs extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "subjectDNs", true); - this.id = attributes.id || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.subjectDN = new _xfa_object.XFAObjectArray(); - } - -} - -class Submit extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "submit", true); - this.embedPDF = (0, _utils.getInteger)({ - data: attributes.embedPDF, - defaultValue: 0, - validate: x => x === 1 - }); - this.format = (0, _utils.getStringOption)(attributes.format, ["xdp", "formdata", "pdf", "urlencoded", "xfd", "xml"]); - this.id = attributes.id || ""; - this.target = attributes.target || ""; - this.textEncoding = (0, _utils.getKeyword)({ - data: attributes.textEncoding ? attributes.textEncoding.toLowerCase() : "", - defaultValue: "", - validate: k => ["utf-8", "big-five", "fontspecific", "gbk", "gb-18030", "gb-2312", "ksc-5601", "none", "shift-jis", "ucs-2", "utf-16"].includes(k) || k.match(/iso-8859-\d{2}/) - }); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.xdpContent = attributes.xdpContent || ""; - this.encrypt = null; - this.encryptData = new _xfa_object.XFAObjectArray(); - this.signData = new _xfa_object.XFAObjectArray(); - } - -} - -class Template extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "template", true); - this.baseProfile = (0, _utils.getStringOption)(attributes.baseProfile, ["full", "interactiveForms"]); - this.extras = null; - this.subform = new _xfa_object.XFAObjectArray(); - } - - [_xfa_object.$finalize]() { - if (this.subform.children.length === 0) { - (0, _util.warn)("XFA - No subforms in template node."); - } - - if (this.subform.children.length >= 2) { - (0, _util.warn)("XFA - Several subforms in template node: please file a bug."); - } - - this[_xfa_object.$tabIndex] = DEFAULT_TAB_INDEX; - } - - [_xfa_object.$isSplittable]() { - return true; - } - - [_xfa_object.$searchNode](expr, container) { - if (expr.startsWith("#")) { - return [this[_xfa_object.$ids].get(expr.slice(1))]; - } - - return (0, _som.searchNode)(this, container, expr, true, true); - } - - *[_xfa_object.$toPages]() { - if (!this.subform.children.length) { - return _utils.HTMLResult.success({ - name: "div", - children: [] - }); - } - - this[_xfa_object.$extra] = { - overflowNode: null, - firstUnsplittable: null, - currentContentArea: null, - currentPageArea: null, - noLayoutFailure: false, - pageNumber: 1, - pagePosition: "first", - oddOrEven: "odd", - blankOrNotBlank: "nonBlank", - paraStack: [] - }; - const root = this.subform.children[0]; - - root.pageSet[_xfa_object.$cleanPage](); - - const pageAreas = root.pageSet.pageArea.children; - const mainHtml = { - name: "div", - children: [] - }; - let pageArea = null; - let breakBefore = null; - let breakBeforeTarget = null; - - if (root.breakBefore.children.length >= 1) { - breakBefore = root.breakBefore.children[0]; - breakBeforeTarget = breakBefore.target; - } else if (root.subform.children.length >= 1 && root.subform.children[0].breakBefore.children.length >= 1) { - breakBefore = root.subform.children[0].breakBefore.children[0]; - breakBeforeTarget = breakBefore.target; - } else if (root.break && root.break.beforeTarget) { - breakBefore = root.break; - breakBeforeTarget = breakBefore.beforeTarget; - } else if (root.subform.children.length >= 1 && root.subform.children[0].break && root.subform.children[0].break.beforeTarget) { - breakBefore = root.subform.children[0].break; - breakBeforeTarget = breakBefore.beforeTarget; - } - - if (breakBefore) { - const target = this[_xfa_object.$searchNode](breakBeforeTarget, breakBefore[_xfa_object.$getParent]()); - - if (target instanceof PageArea) { - pageArea = target; - breakBefore[_xfa_object.$extra] = {}; - } - } - - if (!pageArea) { - pageArea = pageAreas[0]; - } - - pageArea[_xfa_object.$extra] = { - numberOfUse: 1 - }; - - const pageAreaParent = pageArea[_xfa_object.$getParent](); - - pageAreaParent[_xfa_object.$extra] = { - numberOfUse: 1, - pageIndex: pageAreaParent.pageArea.children.indexOf(pageArea), - pageSetIndex: 0 - }; - let targetPageArea; - let leader = null; - let trailer = null; - let hasSomething = true; - let hasSomethingCounter = 0; - let startIndex = 0; - - while (true) { - if (!hasSomething) { - mainHtml.children.pop(); - - if (++hasSomethingCounter === MAX_EMPTY_PAGES) { - (0, _util.warn)("XFA - Something goes wrong: please file a bug."); - return mainHtml; - } - } else { - hasSomethingCounter = 0; - } - - targetPageArea = null; - this[_xfa_object.$extra].currentPageArea = pageArea; - - const page = pageArea[_xfa_object.$toHTML]().html; - - mainHtml.children.push(page); - - if (leader) { - this[_xfa_object.$extra].noLayoutFailure = true; - page.children.push(leader[_xfa_object.$toHTML](pageArea[_xfa_object.$extra].space).html); - leader = null; - } - - if (trailer) { - this[_xfa_object.$extra].noLayoutFailure = true; - page.children.push(trailer[_xfa_object.$toHTML](pageArea[_xfa_object.$extra].space).html); - trailer = null; - } - - const contentAreas = pageArea.contentArea.children; - const htmlContentAreas = page.children.filter(node => node.attributes.class.includes("xfaContentarea")); - hasSomething = false; - this[_xfa_object.$extra].firstUnsplittable = null; - this[_xfa_object.$extra].noLayoutFailure = false; - - const flush = index => { - const html = root[_xfa_object.$flushHTML](); - - if (html) { - hasSomething = hasSomething || html.children && html.children.length !== 0; - htmlContentAreas[index].children.push(html); - } - }; - - for (let i = startIndex, ii = contentAreas.length; i < ii; i++) { - const contentArea = this[_xfa_object.$extra].currentContentArea = contentAreas[i]; - const space = { - width: contentArea.w, - height: contentArea.h - }; - startIndex = 0; - - if (leader) { - htmlContentAreas[i].children.push(leader[_xfa_object.$toHTML](space).html); - leader = null; - } - - if (trailer) { - htmlContentAreas[i].children.push(trailer[_xfa_object.$toHTML](space).html); - trailer = null; - } - - const html = root[_xfa_object.$toHTML](space); - - if (html.success) { - if (html.html) { - hasSomething = hasSomething || html.html.children && html.html.children.length !== 0; - htmlContentAreas[i].children.push(html.html); - } else if (!hasSomething && mainHtml.children.length > 1) { - mainHtml.children.pop(); - } - - return mainHtml; - } - - if (html.isBreak()) { - const node = html.breakNode; - flush(i); - - if (node.targetType === "auto") { - continue; - } - - if (node.leader) { - leader = this[_xfa_object.$searchNode](node.leader, node[_xfa_object.$getParent]()); - leader = leader ? leader[0] : null; - } - - if (node.trailer) { - trailer = this[_xfa_object.$searchNode](node.trailer, node[_xfa_object.$getParent]()); - trailer = trailer ? trailer[0] : null; - } - - if (node.targetType === "pageArea") { - targetPageArea = node[_xfa_object.$extra].target; - i = Infinity; - } else if (!node[_xfa_object.$extra].target) { - i = node[_xfa_object.$extra].index; - } else { - targetPageArea = node[_xfa_object.$extra].target; - startIndex = node[_xfa_object.$extra].index + 1; - i = Infinity; - } - - continue; - } - - if (this[_xfa_object.$extra].overflowNode) { - const node = this[_xfa_object.$extra].overflowNode; - this[_xfa_object.$extra].overflowNode = null; - - const overflowExtra = node[_xfa_object.$getExtra](); - - const target = overflowExtra.target; - overflowExtra.addLeader = overflowExtra.leader !== null; - overflowExtra.addTrailer = overflowExtra.trailer !== null; - flush(i); - const currentIndex = i; - i = Infinity; - - if (target instanceof PageArea) { - targetPageArea = target; - } else if (target instanceof ContentArea) { - const index = contentAreas.findIndex(e => e === target); - - if (index !== -1) { - if (index > currentIndex) { - i = index - 1; - } else { - startIndex = index; - } - } else { - targetPageArea = target[_xfa_object.$getParent](); - startIndex = targetPageArea.contentArea.children.findIndex(e => e === target); - } - } - - continue; - } - - flush(i); - } - - this[_xfa_object.$extra].pageNumber += 1; - - if (targetPageArea) { - if (targetPageArea[_xfa_object.$isUsable]()) { - targetPageArea[_xfa_object.$extra].numberOfUse += 1; - } else { - targetPageArea = null; - } - } - - pageArea = targetPageArea || pageArea[_xfa_object.$getNextPage](); - yield null; - } - } - -} - -exports.Template = Template; - -class Text extends _xfa_object.ContentObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "text"); - this.id = attributes.id || ""; - this.maxChars = (0, _utils.getInteger)({ - data: attributes.maxChars, - defaultValue: 0, - validate: x => x >= 0 - }); - this.name = attributes.name || ""; - this.rid = attributes.rid || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - - [_xfa_object.$acceptWhitespace]() { - return true; - } - - [_xfa_object.$onChild](child) { - if (child[_xfa_object.$namespaceId] === _namespaces.NamespaceIds.xhtml.id) { - this[_xfa_object.$content] = child; - return true; - } - - (0, _util.warn)(`XFA - Invalid content in Text: ${child[_xfa_object.$nodeName]}.`); - return false; - } - - [_xfa_object.$onText](str) { - if (this[_xfa_object.$content] instanceof _xfa_object.XFAObject) { - return; - } - - super[_xfa_object.$onText](str); - } - - [_xfa_object.$finalize]() { - if (typeof this[_xfa_object.$content] === "string") { - this[_xfa_object.$content] = this[_xfa_object.$content].replace(/\r\n/g, "\n"); - } - } - - [_xfa_object.$getExtra]() { - if (typeof this[_xfa_object.$content] === "string") { - return this[_xfa_object.$content].split(/[\u2029\u2028\n]/).reduce((acc, line) => { - if (line) { - acc.push(line); - } - - return acc; - }, []).join("\n"); - } - - return this[_xfa_object.$content][_xfa_object.$text](); - } - - [_xfa_object.$toHTML](availableSpace) { - if (typeof this[_xfa_object.$content] === "string") { - const html = valueToHtml(this[_xfa_object.$content]).html; - - if (this[_xfa_object.$content].includes("\u2029")) { - html.name = "div"; - html.children = []; - - this[_xfa_object.$content].split("\u2029").map(para => para.split(/[\u2028\n]/).reduce((acc, line) => { - acc.push({ - name: "span", - value: line - }, { - name: "br" - }); - return acc; - }, [])).forEach(lines => { - html.children.push({ - name: "p", - children: lines - }); - }); - } else if (/[\u2028\n]/.test(this[_xfa_object.$content])) { - html.name = "div"; - html.children = []; - - this[_xfa_object.$content].split(/[\u2028\n]/).forEach(line => { - html.children.push({ - name: "span", - value: line - }, { - name: "br" - }); - }); - } - - return _utils.HTMLResult.success(html); - } - - return this[_xfa_object.$content][_xfa_object.$toHTML](availableSpace); - } - -} - -exports.Text = Text; - -class TextEdit extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "textEdit", true); - this.allowRichText = (0, _utils.getInteger)({ - data: attributes.allowRichText, - defaultValue: 0, - validate: x => x === 1 - }); - this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]); - this.id = attributes.id || ""; - this.multiLine = (0, _utils.getInteger)({ - data: attributes.multiLine, - defaultValue: "", - validate: x => x === 0 || x === 1 - }); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.vScrollPolicy = (0, _utils.getStringOption)(attributes.vScrollPolicy, ["auto", "off", "on"]); - this.border = null; - this.comb = null; - this.extras = null; - this.margin = null; - } - - [_xfa_object.$toHTML](availableSpace) { - const style = (0, _html_utils.toStyle)(this, "border", "font", "margin"); - let html; - - const field = this[_xfa_object.$getParent]()[_xfa_object.$getParent](); - - if (this.multiLine === "") { - this.multiLine = field instanceof Draw ? 1 : 0; - } - - if (this.multiLine === 1) { - html = { - name: "textarea", - attributes: { - dataId: field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid], - fieldId: field[_xfa_object.$uid], - class: ["xfaTextfield"], - style, - "aria-label": ariaLabel(field) - } - }; - } else { - html = { - name: "input", - attributes: { - type: "text", - dataId: field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid], - fieldId: field[_xfa_object.$uid], - class: ["xfaTextfield"], - style, - "aria-label": ariaLabel(field) - } - }; - } - - return _utils.HTMLResult.success({ - name: "label", - attributes: { - class: ["xfaLabel"] - }, - children: [html] - }); - } - -} - -class Time extends _xfa_object.StringObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "time"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - - [_xfa_object.$finalize]() { - const date = this[_xfa_object.$content].trim(); - - this[_xfa_object.$content] = date ? new Date(date) : null; - } - - [_xfa_object.$toHTML](availableSpace) { - return valueToHtml(this[_xfa_object.$content] ? this[_xfa_object.$content].toString() : ""); - } - -} - -class TimeStamp extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "timeStamp"); - this.id = attributes.id || ""; - this.server = attributes.server || ""; - this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class ToolTip extends _xfa_object.StringObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "toolTip"); - this.id = attributes.id || ""; - this.rid = attributes.rid || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class Traversal extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "traversal", true); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - this.traverse = new _xfa_object.XFAObjectArray(); - } - -} - -class Traverse extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "traverse", true); - this.id = attributes.id || ""; - this.operation = (0, _utils.getStringOption)(attributes.operation, ["next", "back", "down", "first", "left", "right", "up"]); - this.ref = attributes.ref || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - this.script = null; - } - - get name() { - return this.operation; - } - - [_xfa_object.$isTransparent]() { - return false; - } - -} - -class Ui extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "ui", true); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - this.picture = null; - this.barcode = null; - this.button = null; - this.checkButton = null; - this.choiceList = null; - this.dateTimeEdit = null; - this.defaultUi = null; - this.imageEdit = null; - this.numericEdit = null; - this.passwordEdit = null; - this.signature = null; - this.textEdit = null; - } - - [_xfa_object.$getExtra]() { - if (this[_xfa_object.$extra] === undefined) { - for (const name of Object.getOwnPropertyNames(this)) { - if (name === "extras" || name === "picture") { - continue; - } - - const obj = this[name]; - - if (!(obj instanceof _xfa_object.XFAObject)) { - continue; - } - - this[_xfa_object.$extra] = obj; - return obj; - } - - this[_xfa_object.$extra] = null; - } - - return this[_xfa_object.$extra]; - } - - [_xfa_object.$toHTML](availableSpace) { - const obj = this[_xfa_object.$getExtra](); - - if (obj) { - return obj[_xfa_object.$toHTML](availableSpace); - } - - return _utils.HTMLResult.EMPTY; - } - -} - -class Validate extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "validate", true); - this.formatTest = (0, _utils.getStringOption)(attributes.formatTest, ["warning", "disabled", "error"]); - this.id = attributes.id || ""; - this.nullTest = (0, _utils.getStringOption)(attributes.nullTest, ["disabled", "error", "warning"]); - this.scriptTest = (0, _utils.getStringOption)(attributes.scriptTest, ["error", "disabled", "warning"]); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.extras = null; - this.message = null; - this.picture = null; - this.script = null; - } - -} - -class Value extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "value", true); - this.id = attributes.id || ""; - this.override = (0, _utils.getInteger)({ - data: attributes.override, - defaultValue: 0, - validate: x => x === 1 - }); - this.relevant = (0, _utils.getRelevant)(attributes.relevant); - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.arc = null; - this.boolean = null; - this.date = null; - this.dateTime = null; - this.decimal = null; - this.exData = null; - this.float = null; - this.image = null; - this.integer = null; - this.line = null; - this.rectangle = null; - this.text = null; - this.time = null; - } - - [_xfa_object.$setValue](value) { - const parent = this[_xfa_object.$getParent](); - - if (parent instanceof Field) { - if (parent.ui && parent.ui.imageEdit) { - if (!this.image) { - this.image = new Image({}); - - this[_xfa_object.$appendChild](this.image); - } - - this.image[_xfa_object.$content] = value[_xfa_object.$content]; - return; - } - } - - const valueName = value[_xfa_object.$nodeName]; - - if (this[valueName] !== null) { - this[valueName][_xfa_object.$content] = value[_xfa_object.$content]; - return; - } - - for (const name of Object.getOwnPropertyNames(this)) { - const obj = this[name]; - - if (obj instanceof _xfa_object.XFAObject) { - this[name] = null; - - this[_xfa_object.$removeChild](obj); - } - } - - this[value[_xfa_object.$nodeName]] = value; - - this[_xfa_object.$appendChild](value); - } - - [_xfa_object.$text]() { - if (this.exData) { - if (typeof this.exData[_xfa_object.$content] === "string") { - return this.exData[_xfa_object.$content].trim(); - } - - return this.exData[_xfa_object.$content][_xfa_object.$text]().trim(); - } - - for (const name of Object.getOwnPropertyNames(this)) { - if (name === "image") { - continue; - } - - const obj = this[name]; - - if (obj instanceof _xfa_object.XFAObject) { - return (obj[_xfa_object.$content] || "").toString().trim(); - } - } - - return null; - } - - [_xfa_object.$toHTML](availableSpace) { - for (const name of Object.getOwnPropertyNames(this)) { - const obj = this[name]; - - if (!(obj instanceof _xfa_object.XFAObject)) { - continue; - } - - return obj[_xfa_object.$toHTML](availableSpace); - } - - return _utils.HTMLResult.EMPTY; - } - -} - -exports.Value = Value; - -class Variables extends _xfa_object.XFAObject { - constructor(attributes) { - super(TEMPLATE_NS_ID, "variables", true); - this.id = attributes.id || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - this.boolean = new _xfa_object.XFAObjectArray(); - this.date = new _xfa_object.XFAObjectArray(); - this.dateTime = new _xfa_object.XFAObjectArray(); - this.decimal = new _xfa_object.XFAObjectArray(); - this.exData = new _xfa_object.XFAObjectArray(); - this.float = new _xfa_object.XFAObjectArray(); - this.image = new _xfa_object.XFAObjectArray(); - this.integer = new _xfa_object.XFAObjectArray(); - this.manifest = new _xfa_object.XFAObjectArray(); - this.script = new _xfa_object.XFAObjectArray(); - this.text = new _xfa_object.XFAObjectArray(); - this.time = new _xfa_object.XFAObjectArray(); - } - - [_xfa_object.$isTransparent]() { - return true; - } - -} - -class TemplateNamespace { - static [_namespaces.$buildXFAObject](name, attributes) { - if (TemplateNamespace.hasOwnProperty(name)) { - const node = TemplateNamespace[name](attributes); - - node[_xfa_object.$setSetAttributes](attributes); - - return node; - } - - return undefined; - } - - static appearanceFilter(attrs) { - return new AppearanceFilter(attrs); - } - - static arc(attrs) { - return new Arc(attrs); - } - - static area(attrs) { - return new Area(attrs); - } - - static assist(attrs) { - return new Assist(attrs); - } - - static barcode(attrs) { - return new Barcode(attrs); - } - - static bind(attrs) { - return new Bind(attrs); - } - - static bindItems(attrs) { - return new BindItems(attrs); - } - - static bookend(attrs) { - return new Bookend(attrs); - } - - static boolean(attrs) { - return new BooleanElement(attrs); - } - - static border(attrs) { - return new Border(attrs); - } - - static break(attrs) { - return new Break(attrs); - } - - static breakAfter(attrs) { - return new BreakAfter(attrs); - } - - static breakBefore(attrs) { - return new BreakBefore(attrs); - } - - static button(attrs) { - return new Button(attrs); - } - - static calculate(attrs) { - return new Calculate(attrs); - } - - static caption(attrs) { - return new Caption(attrs); - } - - static certificate(attrs) { - return new Certificate(attrs); - } - - static certificates(attrs) { - return new Certificates(attrs); - } - - static checkButton(attrs) { - return new CheckButton(attrs); - } - - static choiceList(attrs) { - return new ChoiceList(attrs); - } - - static color(attrs) { - return new Color(attrs); - } - - static comb(attrs) { - return new Comb(attrs); - } - - static connect(attrs) { - return new Connect(attrs); - } - - static contentArea(attrs) { - return new ContentArea(attrs); - } - - static corner(attrs) { - return new Corner(attrs); - } - - static date(attrs) { - return new DateElement(attrs); - } - - static dateTime(attrs) { - return new DateTime(attrs); - } - - static dateTimeEdit(attrs) { - return new DateTimeEdit(attrs); - } - - static decimal(attrs) { - return new Decimal(attrs); - } - - static defaultUi(attrs) { - return new DefaultUi(attrs); - } - - static desc(attrs) { - return new Desc(attrs); - } - - static digestMethod(attrs) { - return new DigestMethod(attrs); - } - - static digestMethods(attrs) { - return new DigestMethods(attrs); - } - - static draw(attrs) { - return new Draw(attrs); - } - - static edge(attrs) { - return new Edge(attrs); - } - - static encoding(attrs) { - return new Encoding(attrs); - } - - static encodings(attrs) { - return new Encodings(attrs); - } - - static encrypt(attrs) { - return new Encrypt(attrs); - } - - static encryptData(attrs) { - return new EncryptData(attrs); - } - - static encryption(attrs) { - return new Encryption(attrs); - } - - static encryptionMethod(attrs) { - return new EncryptionMethod(attrs); - } - - static encryptionMethods(attrs) { - return new EncryptionMethods(attrs); - } - - static event(attrs) { - return new Event(attrs); - } - - static exData(attrs) { - return new ExData(attrs); - } - - static exObject(attrs) { - return new ExObject(attrs); - } - - static exclGroup(attrs) { - return new ExclGroup(attrs); - } - - static execute(attrs) { - return new Execute(attrs); - } - - static extras(attrs) { - return new Extras(attrs); - } - - static field(attrs) { - return new Field(attrs); - } - - static fill(attrs) { - return new Fill(attrs); - } - - static filter(attrs) { - return new Filter(attrs); - } - - static float(attrs) { - return new Float(attrs); - } - - static font(attrs) { - return new Font(attrs); - } - - static format(attrs) { - return new Format(attrs); - } - - static handler(attrs) { - return new Handler(attrs); - } - - static hyphenation(attrs) { - return new Hyphenation(attrs); - } - - static image(attrs) { - return new Image(attrs); - } - - static imageEdit(attrs) { - return new ImageEdit(attrs); - } - - static integer(attrs) { - return new Integer(attrs); - } - - static issuers(attrs) { - return new Issuers(attrs); - } - - static items(attrs) { - return new Items(attrs); - } - - static keep(attrs) { - return new Keep(attrs); - } - - static keyUsage(attrs) { - return new KeyUsage(attrs); - } - - static line(attrs) { - return new Line(attrs); - } - - static linear(attrs) { - return new Linear(attrs); - } - - static lockDocument(attrs) { - return new LockDocument(attrs); - } - - static manifest(attrs) { - return new Manifest(attrs); - } - - static margin(attrs) { - return new Margin(attrs); - } - - static mdp(attrs) { - return new Mdp(attrs); - } - - static medium(attrs) { - return new Medium(attrs); - } - - static message(attrs) { - return new Message(attrs); - } - - static numericEdit(attrs) { - return new NumericEdit(attrs); - } - - static occur(attrs) { - return new Occur(attrs); - } - - static oid(attrs) { - return new Oid(attrs); - } - - static oids(attrs) { - return new Oids(attrs); - } - - static overflow(attrs) { - return new Overflow(attrs); - } - - static pageArea(attrs) { - return new PageArea(attrs); - } - - static pageSet(attrs) { - return new PageSet(attrs); - } - - static para(attrs) { - return new Para(attrs); - } - - static passwordEdit(attrs) { - return new PasswordEdit(attrs); - } - - static pattern(attrs) { - return new Pattern(attrs); - } - - static picture(attrs) { - return new Picture(attrs); - } - - static proto(attrs) { - return new Proto(attrs); - } - - static radial(attrs) { - return new Radial(attrs); - } - - static reason(attrs) { - return new Reason(attrs); - } - - static reasons(attrs) { - return new Reasons(attrs); - } - - static rectangle(attrs) { - return new Rectangle(attrs); - } - - static ref(attrs) { - return new RefElement(attrs); - } - - static script(attrs) { - return new Script(attrs); - } - - static setProperty(attrs) { - return new SetProperty(attrs); - } - - static signData(attrs) { - return new SignData(attrs); - } - - static signature(attrs) { - return new Signature(attrs); - } - - static signing(attrs) { - return new Signing(attrs); - } - - static solid(attrs) { - return new Solid(attrs); - } - - static speak(attrs) { - return new Speak(attrs); - } - - static stipple(attrs) { - return new Stipple(attrs); - } - - static subform(attrs) { - return new Subform(attrs); - } - - static subformSet(attrs) { - return new SubformSet(attrs); - } - - static subjectDN(attrs) { - return new SubjectDN(attrs); - } - - static subjectDNs(attrs) { - return new SubjectDNs(attrs); - } - - static submit(attrs) { - return new Submit(attrs); - } - - static template(attrs) { - return new Template(attrs); - } - - static text(attrs) { - return new Text(attrs); - } - - static textEdit(attrs) { - return new TextEdit(attrs); - } - - static time(attrs) { - return new Time(attrs); - } - - static timeStamp(attrs) { - return new TimeStamp(attrs); - } - - static toolTip(attrs) { - return new ToolTip(attrs); - } - - static traversal(attrs) { - return new Traversal(attrs); - } - - static traverse(attrs) { - return new Traverse(attrs); - } - - static ui(attrs) { - return new Ui(attrs); - } - - static validate(attrs) { - return new Validate(attrs); - } - - static value(attrs) { - return new Value(attrs); - } - - static variables(attrs) { - return new Variables(attrs); - } - -} - -exports.TemplateNamespace = TemplateNamespace; - -/***/ }), -/* 81 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.addHTML = addHTML; -exports.checkDimensions = checkDimensions; -exports.flushHTML = flushHTML; -exports.getAvailableSpace = getAvailableSpace; - -var _xfa_object = __w_pdfjs_require__(75); - -var _html_utils = __w_pdfjs_require__(82); - -function createLine(node, children) { - return { - name: "div", - attributes: { - class: [node.layout === "lr-tb" ? "xfaLr" : "xfaRl"] - }, - children - }; -} - -function flushHTML(node) { - if (!node[_xfa_object.$extra]) { - return null; - } - - const attributes = node[_xfa_object.$extra].attributes; - const html = { - name: "div", - attributes, - children: node[_xfa_object.$extra].children - }; - - if (node[_xfa_object.$extra].failingNode) { - const htmlFromFailing = node[_xfa_object.$extra].failingNode[_xfa_object.$flushHTML](); - - if (htmlFromFailing) { - if (node.layout.endsWith("-tb")) { - html.children.push(createLine(node, [htmlFromFailing])); - } else { - html.children.push(htmlFromFailing); - } - } - } - - if (html.children.length === 0) { - return null; - } - - return html; -} - -function addHTML(node, html, bbox) { - const extra = node[_xfa_object.$extra]; - const availableSpace = extra.availableSpace; - const [x, y, w, h] = bbox; - - switch (node.layout) { - case "position": - { - extra.width = Math.max(extra.width, x + w); - extra.height = Math.max(extra.height, y + h); - extra.children.push(html); - break; - } - - case "lr-tb": - case "rl-tb": - if (!extra.line || extra.attempt === 1) { - extra.line = createLine(node, []); - extra.children.push(extra.line); - extra.numberInLine = 0; - } - - extra.numberInLine += 1; - extra.line.children.push(html); - - if (extra.attempt === 0) { - extra.currentWidth += w; - extra.height = Math.max(extra.height, extra.prevHeight + h); - } else { - extra.currentWidth = w; - extra.prevHeight = extra.height; - extra.height += h; - extra.attempt = 0; - } - - extra.width = Math.max(extra.width, extra.currentWidth); - break; - - case "rl-row": - case "row": - { - extra.children.push(html); - extra.width += w; - extra.height = Math.max(extra.height, h); - const height = (0, _html_utils.measureToString)(extra.height); - - for (const child of extra.children) { - child.attributes.style.height = height; - } - - break; - } - - case "table": - { - extra.width = Math.min(availableSpace.width, Math.max(extra.width, w)); - extra.height += h; - extra.children.push(html); - break; - } - - case "tb": - { - extra.width = Math.min(availableSpace.width, Math.max(extra.width, w)); - extra.height += h; - extra.children.push(html); - break; - } - } -} - -function getAvailableSpace(node) { - const availableSpace = node[_xfa_object.$extra].availableSpace; - const marginV = node.margin ? node.margin.topInset + node.margin.bottomInset : 0; - const marginH = node.margin ? node.margin.leftInset + node.margin.rightInset : 0; - - switch (node.layout) { - case "lr-tb": - case "rl-tb": - if (node[_xfa_object.$extra].attempt === 0) { - return { - width: availableSpace.width - marginH - node[_xfa_object.$extra].currentWidth, - height: availableSpace.height - marginV - node[_xfa_object.$extra].prevHeight - }; - } - - return { - width: availableSpace.width - marginH, - height: availableSpace.height - marginV - node[_xfa_object.$extra].height - }; - - case "rl-row": - case "row": - const width = node[_xfa_object.$extra].columnWidths.slice(node[_xfa_object.$extra].currentColumn).reduce((a, x) => a + x); - - return { - width, - height: availableSpace.height - marginH - }; - - case "table": - case "tb": - return { - width: availableSpace.width - marginH, - height: availableSpace.height - marginV - node[_xfa_object.$extra].height - }; - - case "position": - default: - return availableSpace; - } -} - -function getTransformedBBox(node) { - let w = node.w === "" ? NaN : node.w; - let h = node.h === "" ? NaN : node.h; - let [centerX, centerY] = [0, 0]; - - switch (node.anchorType || "") { - case "bottomCenter": - [centerX, centerY] = [w / 2, h]; - break; - - case "bottomLeft": - [centerX, centerY] = [0, h]; - break; - - case "bottomRight": - [centerX, centerY] = [w, h]; - break; - - case "middleCenter": - [centerX, centerY] = [w / 2, h / 2]; - break; - - case "middleLeft": - [centerX, centerY] = [0, h / 2]; - break; - - case "middleRight": - [centerX, centerY] = [w, h / 2]; - break; - - case "topCenter": - [centerX, centerY] = [w / 2, 0]; - break; - - case "topRight": - [centerX, centerY] = [w, 0]; - break; - } - - let x, y; - - switch (node.rotate || 0) { - case 0: - [x, y] = [-centerX, -centerY]; - break; - - case 90: - [x, y] = [-centerY, centerX]; - [w, h] = [h, -w]; - break; - - case 180: - [x, y] = [centerX, centerY]; - [w, h] = [-w, -h]; - break; - - case 270: - [x, y] = [centerY, -centerX]; - [w, h] = [-h, w]; - break; - } - - return [node.x + x + Math.min(0, w), node.y + y + Math.min(0, h), Math.abs(w), Math.abs(h)]; -} - -function checkDimensions(node, space) { - if (node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].firstUnsplittable === null) { - return true; - } - - if (node.w === 0 || node.h === 0) { - return true; - } - - const ERROR = 2; - - const parent = node[_xfa_object.$getSubformParent](); - - const attempt = parent[_xfa_object.$extra] && parent[_xfa_object.$extra].attempt || 0; - const [, y, w, h] = getTransformedBBox(node); - - switch (parent.layout) { - case "lr-tb": - case "rl-tb": - if (attempt === 0) { - if (!node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].noLayoutFailure) { - if (node.h !== "" && Math.round(h - space.height) > ERROR) { - return false; - } - - if (node.w !== "") { - if (Math.round(w - space.width) <= ERROR) { - return true; - } - - if (parent[_xfa_object.$extra].numberInLine === 0) { - return space.height > ERROR; - } - - return false; - } - - return space.width > ERROR; - } - - if (node.w !== "") { - return Math.round(w - space.width) <= ERROR; - } - - return space.width > ERROR; - } - - if (node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].noLayoutFailure) { - return true; - } - - if (node.h !== "" && Math.round(h - space.height) > ERROR) { - return false; - } - - if (node.w === "" || Math.round(w - space.width) <= ERROR) { - return space.height > ERROR; - } - - if (parent[_xfa_object.$isThereMoreWidth]()) { - return false; - } - - return space.height > ERROR; - - case "table": - case "tb": - if (node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].noLayoutFailure) { - return true; - } - - if (node.h !== "" && !node[_xfa_object.$isSplittable]()) { - return Math.round(h - space.height) <= ERROR; - } - - if (node.w === "" || Math.round(w - space.width) <= ERROR) { - return space.height > ERROR; - } - - if (parent[_xfa_object.$isThereMoreWidth]()) { - return false; - } - - return space.height > ERROR; - - case "position": - if (node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].noLayoutFailure) { - return true; - } - - if (node.h === "" || Math.round(h + y - space.height) <= ERROR) { - return true; - } - - const area = node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].currentContentArea; - - return h + y > area.h; - - case "rl-row": - case "row": - if (node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].noLayoutFailure) { - return true; - } - - if (node.h !== "") { - return Math.round(h - space.height) <= ERROR; - } - - return true; - - default: - return true; - } -} - -/***/ }), -/* 82 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.computeBbox = computeBbox; -exports.createWrapper = createWrapper; -exports.fixDimensions = fixDimensions; -exports.fixTextIndent = fixTextIndent; -exports.fixURL = fixURL; -exports.isPrintOnly = isPrintOnly; -exports.layoutClass = layoutClass; -exports.layoutNode = layoutNode; -exports.measureToString = measureToString; -exports.setAccess = setAccess; -exports.setFontFamily = setFontFamily; -exports.setMinMaxDimensions = setMinMaxDimensions; -exports.setPara = setPara; -exports.toStyle = toStyle; - -var _xfa_object = __w_pdfjs_require__(75); - -var _util = __w_pdfjs_require__(2); - -var _utils = __w_pdfjs_require__(76); - -var _fonts = __w_pdfjs_require__(83); - -var _text = __w_pdfjs_require__(84); - -function measureToString(m) { - if (typeof m === "string") { - return "0px"; - } - - return Number.isInteger(m) ? `${m}px` : `${m.toFixed(2)}px`; -} - -const converters = { - anchorType(node, style) { - const parent = node[_xfa_object.$getSubformParent](); - - if (!parent || parent.layout && parent.layout !== "position") { - return; - } - - if (!("transform" in style)) { - style.transform = ""; - } - - switch (node.anchorType) { - case "bottomCenter": - style.transform += "translate(-50%, -100%)"; - break; - - case "bottomLeft": - style.transform += "translate(0,-100%)"; - break; - - case "bottomRight": - style.transform += "translate(-100%,-100%)"; - break; - - case "middleCenter": - style.transform += "translate(-50%,-50%)"; - break; - - case "middleLeft": - style.transform += "translate(0,-50%)"; - break; - - case "middleRight": - style.transform += "translate(-100%,-50%)"; - break; - - case "topCenter": - style.transform += "translate(-50%,0)"; - break; - - case "topRight": - style.transform += "translate(-100%,0)"; - break; - } - }, - - dimensions(node, style) { - const parent = node[_xfa_object.$getSubformParent](); - - let width = node.w; - const height = node.h; - - if (parent.layout && parent.layout.includes("row")) { - const extra = parent[_xfa_object.$extra]; - const colSpan = node.colSpan; - let w; - - if (colSpan === -1) { - w = extra.columnWidths.slice(extra.currentColumn).reduce((a, x) => a + x, 0); - extra.currentColumn = 0; - } else { - w = extra.columnWidths.slice(extra.currentColumn, extra.currentColumn + colSpan).reduce((a, x) => a + x, 0); - extra.currentColumn = (extra.currentColumn + node.colSpan) % extra.columnWidths.length; - } - - if (!isNaN(w)) { - width = node.w = w; - } - } - - if (width !== "") { - style.width = measureToString(width); - } else { - style.width = "auto"; - } - - if (height !== "") { - style.height = measureToString(height); - } else { - style.height = "auto"; - } - }, - - position(node, style) { - const parent = node[_xfa_object.$getSubformParent](); - - if (parent && parent.layout && parent.layout !== "position") { - return; - } - - style.position = "absolute"; - style.left = measureToString(node.x); - style.top = measureToString(node.y); - }, - - rotate(node, style) { - if (node.rotate) { - if (!("transform" in style)) { - style.transform = ""; - } - - style.transform += `rotate(-${node.rotate}deg)`; - style.transformOrigin = "top left"; - } - }, - - presence(node, style) { - switch (node.presence) { - case "invisible": - style.visibility = "hidden"; - break; - - case "hidden": - case "inactive": - style.display = "none"; - break; - } - }, - - hAlign(node, style) { - if (node[_xfa_object.$nodeName] === "para") { - switch (node.hAlign) { - case "justifyAll": - style.textAlign = "justify-all"; - break; - - case "radix": - style.textAlign = "left"; - break; - - default: - style.textAlign = node.hAlign; - } - } else { - switch (node.hAlign) { - case "left": - style.alignSelf = "start"; - break; - - case "center": - style.alignSelf = "center"; - break; - - case "right": - style.alignSelf = "end"; - break; - } - } - }, - - margin(node, style) { - if (node.margin) { - style.margin = node.margin[_xfa_object.$toStyle]().margin; - } - } - -}; - -function setMinMaxDimensions(node, style) { - const parent = node[_xfa_object.$getSubformParent](); - - if (parent.layout === "position") { - if (node.minW > 0) { - style.minWidth = measureToString(node.minW); - } - - if (node.maxW > 0) { - style.maxWidth = measureToString(node.maxW); - } - - if (node.minH > 0) { - style.minHeight = measureToString(node.minH); - } - - if (node.maxH > 0) { - style.maxHeight = measureToString(node.maxH); - } - } -} - -function layoutText(text, xfaFont, margin, lineHeight, fontFinder, width) { - const measure = new _text.TextMeasure(xfaFont, margin, lineHeight, fontFinder); - - if (typeof text === "string") { - measure.addString(text); - } else { - text[_xfa_object.$pushGlyphs](measure); - } - - return measure.compute(width); -} - -function layoutNode(node, availableSpace) { - let height = null; - let width = null; - let isBroken = false; - - if ((!node.w || !node.h) && node.value) { - let marginH = 0; - let marginV = 0; - - if (node.margin) { - marginH = node.margin.leftInset + node.margin.rightInset; - marginV = node.margin.topInset + node.margin.bottomInset; - } - - let lineHeight = null; - let margin = null; - - if (node.para) { - margin = Object.create(null); - lineHeight = node.para.lineHeight === "" ? null : node.para.lineHeight; - margin.top = node.para.spaceAbove === "" ? 0 : node.para.spaceAbove; - margin.bottom = node.para.spaceBelow === "" ? 0 : node.para.spaceBelow; - margin.left = node.para.marginLeft === "" ? 0 : node.para.marginLeft; - margin.right = node.para.marginRight === "" ? 0 : node.para.marginRight; - } - - let font = node.font; - - if (!font) { - const root = node[_xfa_object.$getTemplateRoot](); - - let parent = node[_xfa_object.$getParent](); - - while (parent && parent !== root) { - if (parent.font) { - font = parent.font; - break; - } - - parent = parent[_xfa_object.$getParent](); - } - } - - const maxWidth = (!node.w ? availableSpace.width : node.w) - marginH; - const fontFinder = node[_xfa_object.$globalData].fontFinder; - - if (node.value.exData && node.value.exData[_xfa_object.$content] && node.value.exData.contentType === "text/html") { - const res = layoutText(node.value.exData[_xfa_object.$content], font, margin, lineHeight, fontFinder, maxWidth); - width = res.width; - height = res.height; - isBroken = res.isBroken; - } else { - const text = node.value[_xfa_object.$text](); - - if (text) { - const res = layoutText(text, font, margin, lineHeight, fontFinder, maxWidth); - width = res.width; - height = res.height; - isBroken = res.isBroken; - } - } - - if (width !== null && !node.w) { - width += marginH; - } - - if (height !== null && !node.h) { - height += marginV; - } - } - - return { - w: width, - h: height, - isBroken - }; -} - -function computeBbox(node, html, availableSpace) { - let bbox; - - if (node.w !== "" && node.h !== "") { - bbox = [node.x, node.y, node.w, node.h]; - } else { - if (!availableSpace) { - return null; - } - - let width = node.w; - - if (width === "") { - if (node.maxW === 0) { - const parent = node[_xfa_object.$getSubformParent](); - - if (parent.layout === "position" && parent.w !== "") { - width = 0; - } else { - width = node.minW; - } - } else { - width = Math.min(node.maxW, availableSpace.width); - } - - html.attributes.style.width = measureToString(width); - } - - let height = node.h; - - if (height === "") { - if (node.maxH === 0) { - const parent = node[_xfa_object.$getSubformParent](); - - if (parent.layout === "position" && parent.h !== "") { - height = 0; - } else { - height = node.minH; - } - } else { - height = Math.min(node.maxH, availableSpace.height); - } - - html.attributes.style.height = measureToString(height); - } - - bbox = [node.x, node.y, width, height]; - } - - return bbox; -} - -function fixDimensions(node) { - const parent = node[_xfa_object.$getSubformParent](); - - if (parent.layout && parent.layout.includes("row")) { - const extra = parent[_xfa_object.$extra]; - const colSpan = node.colSpan; - let width; - - if (colSpan === -1) { - width = extra.columnWidths.slice(extra.currentColumn).reduce((a, w) => a + w, 0); - } else { - width = extra.columnWidths.slice(extra.currentColumn, extra.currentColumn + colSpan).reduce((a, w) => a + w, 0); - } - - if (!isNaN(width)) { - node.w = width; - } - } - - if (parent.layout && parent.layout !== "position") { - node.x = node.y = 0; - } - - if (node.layout === "table") { - if (node.w === "" && Array.isArray(node.columnWidths)) { - node.w = node.columnWidths.reduce((a, x) => a + x, 0); - } - } -} - -function layoutClass(node) { - switch (node.layout) { - case "position": - return "xfaPosition"; - - case "lr-tb": - return "xfaLrTb"; - - case "rl-row": - return "xfaRlRow"; - - case "rl-tb": - return "xfaRlTb"; - - case "row": - return "xfaRow"; - - case "table": - return "xfaTable"; - - case "tb": - return "xfaTb"; - - default: - return "xfaPosition"; - } -} - -function toStyle(node, ...names) { - const style = Object.create(null); - - for (const name of names) { - const value = node[name]; - - if (value === null) { - continue; - } - - if (converters.hasOwnProperty(name)) { - converters[name](node, style); - continue; - } - - if (value instanceof _xfa_object.XFAObject) { - const newStyle = value[_xfa_object.$toStyle](); - - if (newStyle) { - Object.assign(style, newStyle); - } else { - (0, _util.warn)(`(DEBUG) - XFA - style for ${name} not implemented yet`); - } - } - } - - return style; -} - -function createWrapper(node, html) { - const { - attributes - } = html; - const { - style - } = attributes; - const wrapper = { - name: "div", - attributes: { - class: ["xfaWrapper"], - style: Object.create(null) - }, - children: [] - }; - attributes.class.push("xfaWrapped"); - - if (node.border) { - const { - widths, - insets - } = node.border[_xfa_object.$extra]; - let width, height; - let top = insets[0]; - let left = insets[3]; - const insetsH = insets[0] + insets[2]; - const insetsW = insets[1] + insets[3]; - - switch (node.border.hand) { - case "even": - top -= widths[0] / 2; - left -= widths[3] / 2; - width = `calc(100% + ${(widths[1] + widths[3]) / 2 - insetsW}px)`; - height = `calc(100% + ${(widths[0] + widths[2]) / 2 - insetsH}px)`; - break; - - case "left": - top -= widths[0]; - left -= widths[3]; - width = `calc(100% + ${widths[1] + widths[3] - insetsW}px)`; - height = `calc(100% + ${widths[0] + widths[2] - insetsH}px)`; - break; - - case "right": - width = insetsW ? `calc(100% - ${insetsW}px)` : "100%"; - height = insetsH ? `calc(100% - ${insetsH}px)` : "100%"; - break; - } - - const classNames = ["xfaBorder"]; - - if (isPrintOnly(node.border)) { - classNames.push("xfaPrintOnly"); - } - - const border = { - name: "div", - attributes: { - class: classNames, - style: { - top: `${top}px`, - left: `${left}px`, - width, - height - } - }, - children: [] - }; - - for (const key of ["border", "borderWidth", "borderColor", "borderRadius", "borderStyle"]) { - if (style[key] !== undefined) { - border.attributes.style[key] = style[key]; - delete style[key]; - } - } - - wrapper.children.push(border, html); - } else { - wrapper.children.push(html); - } - - for (const key of ["background", "backgroundClip", "top", "left", "width", "height", "minWidth", "minHeight", "maxWidth", "maxHeight", "transform", "transformOrigin", "visibility"]) { - if (style[key] !== undefined) { - wrapper.attributes.style[key] = style[key]; - delete style[key]; - } - } - - if (style.position === "absolute") { - wrapper.attributes.style.position = "absolute"; - } else { - wrapper.attributes.style.position = "relative"; - } - - delete style.position; - - if (style.alignSelf) { - wrapper.attributes.style.alignSelf = style.alignSelf; - delete style.alignSelf; - } - - return wrapper; -} - -function fixTextIndent(styles) { - const indent = (0, _utils.getMeasurement)(styles.textIndent, "0px"); - - if (indent >= 0) { - return; - } - - const align = styles.textAlign === "right" ? "right" : "left"; - const name = "padding" + (align === "left" ? "Left" : "Right"); - const padding = (0, _utils.getMeasurement)(styles[name], "0px"); - styles[name] = `${padding - indent}px`; -} - -function setAccess(node, classNames) { - switch (node.access) { - case "nonInteractive": - classNames.push("xfaNonInteractive"); - break; - - case "readOnly": - classNames.push("xfaReadOnly"); - break; - - case "protected": - classNames.push("xfaDisabled"); - break; - } -} - -function isPrintOnly(node) { - return node.relevant.length > 0 && !node.relevant[0].excluded && node.relevant[0].viewname === "print"; -} - -function getCurrentPara(node) { - const stack = node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].paraStack; - - return stack.length ? stack[stack.length - 1] : null; -} - -function setPara(node, nodeStyle, value) { - if (value.attributes.class && value.attributes.class.includes("xfaRich")) { - if (nodeStyle) { - if (node.h === "") { - nodeStyle.height = "auto"; - } - - if (node.w === "") { - nodeStyle.width = "auto"; - } - } - - const para = getCurrentPara(node); - - if (para) { - const valueStyle = value.attributes.style; - valueStyle.display = "flex"; - valueStyle.flexDirection = "column"; - - switch (para.vAlign) { - case "top": - valueStyle.justifyContent = "start"; - break; - - case "bottom": - valueStyle.justifyContent = "end"; - break; - - case "middle": - valueStyle.justifyContent = "center"; - break; - } - - const paraStyle = para[_xfa_object.$toStyle](); - - for (const [key, val] of Object.entries(paraStyle)) { - if (!(key in valueStyle)) { - valueStyle[key] = val; - } - } - } - } -} - -function setFontFamily(xfaFont, node, fontFinder, style) { - if (!fontFinder) { - delete style.fontFamily; - return; - } - - const name = (0, _utils.stripQuotes)(xfaFont.typeface); - style.fontFamily = `"${name}"`; - const typeface = fontFinder.find(name); - - if (typeface) { - const { - fontFamily - } = typeface.regular.cssFontInfo; - - if (fontFamily !== name) { - style.fontFamily = `"${fontFamily}"`; - } - - const para = getCurrentPara(node); - - if (para && para.lineHeight !== "") { - return; - } - - if (style.lineHeight) { - return; - } - - const pdfFont = (0, _fonts.selectFont)(xfaFont, typeface); - - if (pdfFont) { - style.lineHeight = Math.max(1.2, pdfFont.lineHeight); - } - } -} - -function fixURL(str) { - const absoluteUrl = (0, _util.createValidAbsoluteUrl)(str, null, { - addDefaultProtocol: true, - tryConvertEncoding: true - }); - return absoluteUrl ? absoluteUrl.href : null; -} - -/***/ }), -/* 83 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.FontFinder = void 0; -exports.getMetrics = getMetrics; -exports.selectFont = selectFont; - -var _xfa_object = __w_pdfjs_require__(75); - -var _utils = __w_pdfjs_require__(76); - -var _util = __w_pdfjs_require__(2); - -class FontFinder { - constructor(pdfFonts) { - this.fonts = new Map(); - this.cache = new Map(); - this.warned = new Set(); - this.defaultFont = null; - this.add(pdfFonts); - } - - add(pdfFonts, reallyMissingFonts = null) { - for (const pdfFont of pdfFonts) { - this.addPdfFont(pdfFont); - } - - for (const pdfFont of this.fonts.values()) { - if (!pdfFont.regular) { - pdfFont.regular = pdfFont.italic || pdfFont.bold || pdfFont.bolditalic; - } - } - - if (!reallyMissingFonts || reallyMissingFonts.size === 0) { - return; - } - - const myriad = this.fonts.get("PdfJS-Fallback-PdfJS-XFA"); - - for (const missing of reallyMissingFonts) { - this.fonts.set(missing, myriad); - } - } - - addPdfFont(pdfFont) { - const cssFontInfo = pdfFont.cssFontInfo; - const name = cssFontInfo.fontFamily; - let font = this.fonts.get(name); - - if (!font) { - font = Object.create(null); - this.fonts.set(name, font); - - if (!this.defaultFont) { - this.defaultFont = font; - } - } - - let property = ""; - const fontWeight = parseFloat(cssFontInfo.fontWeight); - - if (parseFloat(cssFontInfo.italicAngle) !== 0) { - property = fontWeight >= 700 ? "bolditalic" : "italic"; - } else if (fontWeight >= 700) { - property = "bold"; - } - - if (!property) { - if (pdfFont.name.includes("Bold") || pdfFont.psName && pdfFont.psName.includes("Bold")) { - property = "bold"; - } - - if (pdfFont.name.includes("Italic") || pdfFont.name.endsWith("It") || pdfFont.psName && (pdfFont.psName.includes("Italic") || pdfFont.psName.endsWith("It"))) { - property += "italic"; - } - } - - if (!property) { - property = "regular"; - } - - font[property] = pdfFont; - } - - getDefault() { - return this.defaultFont; - } - - find(fontName, mustWarn = true) { - let font = this.fonts.get(fontName) || this.cache.get(fontName); - - if (font) { - return font; - } - - const pattern = /,|-|_| |bolditalic|bold|italic|regular|it/gi; - let name = fontName.replace(pattern, ""); - font = this.fonts.get(name); - - if (font) { - this.cache.set(fontName, font); - return font; - } - - name = name.toLowerCase(); - const maybe = []; - - for (const [family, pdfFont] of this.fonts.entries()) { - if (family.replace(pattern, "").toLowerCase().startsWith(name)) { - maybe.push(pdfFont); - } - } - - if (maybe.length === 0) { - for (const [, pdfFont] of this.fonts.entries()) { - if (pdfFont.regular.name && pdfFont.regular.name.replace(pattern, "").toLowerCase().startsWith(name)) { - maybe.push(pdfFont); - } - } - } - - if (maybe.length === 0) { - name = name.replace(/psmt|mt/gi, ""); - - for (const [family, pdfFont] of this.fonts.entries()) { - if (family.replace(pattern, "").toLowerCase().startsWith(name)) { - maybe.push(pdfFont); - } - } - } - - if (maybe.length === 0) { - for (const pdfFont of this.fonts.values()) { - if (pdfFont.regular.name && pdfFont.regular.name.replace(pattern, "").toLowerCase().startsWith(name)) { - maybe.push(pdfFont); - } - } - } - - if (maybe.length >= 1) { - if (maybe.length !== 1 && mustWarn) { - (0, _util.warn)(`XFA - Too many choices to guess the correct font: ${fontName}`); - } - - this.cache.set(fontName, maybe[0]); - return maybe[0]; - } - - if (mustWarn && !this.warned.has(fontName)) { - this.warned.add(fontName); - (0, _util.warn)(`XFA - Cannot find the font: ${fontName}`); - } - - return null; - } - -} - -exports.FontFinder = FontFinder; - -function selectFont(xfaFont, typeface) { - if (xfaFont.posture === "italic") { - if (xfaFont.weight === "bold") { - return typeface.bolditalic; - } - - return typeface.italic; - } else if (xfaFont.weight === "bold") { - return typeface.bold; - } - - return typeface.regular; -} - -function getMetrics(xfaFont, real = false) { - let pdfFont = null; - - if (xfaFont) { - const name = (0, _utils.stripQuotes)(xfaFont.typeface); - - const typeface = xfaFont[_xfa_object.$globalData].fontFinder.find(name); - - pdfFont = selectFont(xfaFont, typeface); - } - - if (!pdfFont) { - return { - lineHeight: 12, - lineGap: 2, - lineNoGap: 10 - }; - } - - const size = xfaFont.size || 10; - const lineHeight = pdfFont.lineHeight ? Math.max(real ? 0 : 1.2, pdfFont.lineHeight) : 1.2; - const lineGap = pdfFont.lineGap === undefined ? 0.2 : pdfFont.lineGap; - return { - lineHeight: lineHeight * size, - lineGap: lineGap * size, - lineNoGap: Math.max(1, lineHeight - lineGap) * size - }; -} - -/***/ }), -/* 84 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.TextMeasure = void 0; - -var _fonts = __w_pdfjs_require__(83); - -const WIDTH_FACTOR = 1.02; - -class FontInfo { - constructor(xfaFont, margin, lineHeight, fontFinder) { - this.lineHeight = lineHeight; - this.paraMargin = margin || { - top: 0, - bottom: 0, - left: 0, - right: 0 - }; - - if (!xfaFont) { - [this.pdfFont, this.xfaFont] = this.defaultFont(fontFinder); - return; - } - - this.xfaFont = { - typeface: xfaFont.typeface, - posture: xfaFont.posture, - weight: xfaFont.weight, - size: xfaFont.size, - letterSpacing: xfaFont.letterSpacing - }; - const typeface = fontFinder.find(xfaFont.typeface); - - if (!typeface) { - [this.pdfFont, this.xfaFont] = this.defaultFont(fontFinder); - return; - } - - this.pdfFont = (0, _fonts.selectFont)(xfaFont, typeface); - - if (!this.pdfFont) { - [this.pdfFont, this.xfaFont] = this.defaultFont(fontFinder); - } - } - - defaultFont(fontFinder) { - const font = fontFinder.find("Helvetica", false) || fontFinder.find("Myriad Pro", false) || fontFinder.find("Arial", false) || fontFinder.getDefault(); - - if (font && font.regular) { - const pdfFont = font.regular; - const info = pdfFont.cssFontInfo; - const xfaFont = { - typeface: info.fontFamily, - posture: "normal", - weight: "normal", - size: 10, - letterSpacing: 0 - }; - return [pdfFont, xfaFont]; - } - - const xfaFont = { - typeface: "Courier", - posture: "normal", - weight: "normal", - size: 10, - letterSpacing: 0 - }; - return [null, xfaFont]; - } - -} - -class FontSelector { - constructor(defaultXfaFont, defaultParaMargin, defaultLineHeight, fontFinder) { - this.fontFinder = fontFinder; - this.stack = [new FontInfo(defaultXfaFont, defaultParaMargin, defaultLineHeight, fontFinder)]; - } - - pushData(xfaFont, margin, lineHeight) { - const lastFont = this.stack[this.stack.length - 1]; - - for (const name of ["typeface", "posture", "weight", "size", "letterSpacing"]) { - if (!xfaFont[name]) { - xfaFont[name] = lastFont.xfaFont[name]; - } - } - - for (const name of ["top", "bottom", "left", "right"]) { - if (isNaN(margin[name])) { - margin[name] = lastFont.paraMargin[name]; - } - } - - const fontInfo = new FontInfo(xfaFont, margin, lineHeight || lastFont.lineHeight, this.fontFinder); - - if (!fontInfo.pdfFont) { - fontInfo.pdfFont = lastFont.pdfFont; - } - - this.stack.push(fontInfo); - } - - popFont() { - this.stack.pop(); - } - - topFont() { - return this.stack[this.stack.length - 1]; - } - -} - -class TextMeasure { - constructor(defaultXfaFont, defaultParaMargin, defaultLineHeight, fonts) { - this.glyphs = []; - this.fontSelector = new FontSelector(defaultXfaFont, defaultParaMargin, defaultLineHeight, fonts); - this.extraHeight = 0; - } - - pushData(xfaFont, margin, lineHeight) { - this.fontSelector.pushData(xfaFont, margin, lineHeight); - } - - popFont(xfaFont) { - return this.fontSelector.popFont(); - } - - addPara() { - const lastFont = this.fontSelector.topFont(); - this.extraHeight += lastFont.paraMargin.top + lastFont.paraMargin.bottom; - } - - addString(str) { - if (!str) { - return; - } - - const lastFont = this.fontSelector.topFont(); - const fontSize = lastFont.xfaFont.size; - - if (lastFont.pdfFont) { - const letterSpacing = lastFont.xfaFont.letterSpacing; - const pdfFont = lastFont.pdfFont; - const fontLineHeight = pdfFont.lineHeight || 1.2; - const lineHeight = lastFont.lineHeight || Math.max(1.2, fontLineHeight) * fontSize; - const lineGap = pdfFont.lineGap === undefined ? 0.2 : pdfFont.lineGap; - const noGap = fontLineHeight - lineGap; - const firstLineHeight = Math.max(1, noGap) * fontSize; - const scale = fontSize / 1000; - const fallbackWidth = pdfFont.defaultWidth || pdfFont.charsToGlyphs(" ")[0].width; - - for (const line of str.split(/[\u2029\n]/)) { - const encodedLine = pdfFont.encodeString(line).join(""); - const glyphs = pdfFont.charsToGlyphs(encodedLine); - - for (const glyph of glyphs) { - const width = glyph.width || fallbackWidth; - this.glyphs.push([width * scale + letterSpacing, lineHeight, firstLineHeight, glyph.unicode, false]); - } - - this.glyphs.push([0, 0, 0, "\n", true]); - } - - this.glyphs.pop(); - return; - } - - for (const line of str.split(/[\u2029\n]/)) { - for (const char of line.split("")) { - this.glyphs.push([fontSize, 1.2 * fontSize, fontSize, char, false]); - } - - this.glyphs.push([0, 0, 0, "\n", true]); - } - - this.glyphs.pop(); - } - - compute(maxWidth) { - let lastSpacePos = -1, - lastSpaceWidth = 0, - width = 0, - height = 0, - currentLineWidth = 0, - currentLineHeight = 0; - let isBroken = false; - let isFirstLine = true; - - for (let i = 0, ii = this.glyphs.length; i < ii; i++) { - const [glyphWidth, lineHeight, firstLineHeight, char, isEOL] = this.glyphs[i]; - const isSpace = char === " "; - const glyphHeight = isFirstLine ? firstLineHeight : lineHeight; - - if (isEOL) { - width = Math.max(width, currentLineWidth); - currentLineWidth = 0; - height += currentLineHeight; - currentLineHeight = glyphHeight; - lastSpacePos = -1; - lastSpaceWidth = 0; - isFirstLine = false; - continue; - } - - if (isSpace) { - if (currentLineWidth + glyphWidth > maxWidth) { - width = Math.max(width, currentLineWidth); - currentLineWidth = 0; - height += currentLineHeight; - currentLineHeight = glyphHeight; - lastSpacePos = -1; - lastSpaceWidth = 0; - isBroken = true; - isFirstLine = false; - } else { - currentLineHeight = Math.max(glyphHeight, currentLineHeight); - lastSpaceWidth = currentLineWidth; - currentLineWidth += glyphWidth; - lastSpacePos = i; - } - - continue; - } - - if (currentLineWidth + glyphWidth > maxWidth) { - height += currentLineHeight; - currentLineHeight = glyphHeight; - - if (lastSpacePos !== -1) { - i = lastSpacePos; - width = Math.max(width, lastSpaceWidth); - currentLineWidth = 0; - lastSpacePos = -1; - lastSpaceWidth = 0; - } else { - width = Math.max(width, currentLineWidth); - currentLineWidth = glyphWidth; - } - - isBroken = true; - isFirstLine = false; - continue; - } - - currentLineWidth += glyphWidth; - currentLineHeight = Math.max(glyphHeight, currentLineHeight); - } - - width = Math.max(width, currentLineWidth); - height += currentLineHeight + this.extraHeight; - return { - width: WIDTH_FACTOR * width, - height, - isBroken - }; - } - -} - -exports.TextMeasure = TextMeasure; - -/***/ }), -/* 85 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.DataHandler = void 0; - -var _xfa_object = __w_pdfjs_require__(75); - -class DataHandler { - constructor(root, data) { - this.data = data; - this.dataset = root.datasets || null; - } - - serialize(storage) { - const stack = [[-1, this.data[_xfa_object.$getChildren]()]]; - - while (stack.length > 0) { - const last = stack[stack.length - 1]; - const [i, children] = last; - - if (i + 1 === children.length) { - stack.pop(); - continue; - } - - const child = children[++last[0]]; - const storageEntry = storage.get(child[_xfa_object.$uid]); - - if (storageEntry) { - child[_xfa_object.$setValue](storageEntry); - } else { - const attributes = child[_xfa_object.$getAttributes](); - - for (const value of attributes.values()) { - const entry = storage.get(value[_xfa_object.$uid]); - - if (entry) { - value[_xfa_object.$setValue](entry); - - break; - } - } - } - - const nodes = child[_xfa_object.$getChildren](); - - if (nodes.length > 0) { - stack.push([-1, nodes]); - } - } - - const buf = [``]; - - if (this.dataset) { - for (const child of this.dataset[_xfa_object.$getChildren]()) { - if (child[_xfa_object.$nodeName] !== "data") { - child[_xfa_object.$toString](buf); - } - } - } - - this.data[_xfa_object.$toString](buf); - - buf.push(""); - return buf.join(""); - } - -} - -exports.DataHandler = DataHandler; - -/***/ }), -/* 86 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.XFAParser = void 0; - -var _xfa_object = __w_pdfjs_require__(75); - -var _xml_parser = __w_pdfjs_require__(68); - -var _builder = __w_pdfjs_require__(87); - -var _util = __w_pdfjs_require__(2); - -class XFAParser extends _xml_parser.XMLParserBase { - constructor(rootNameSpace = null, richText = false) { - super(); - this._builder = new _builder.Builder(rootNameSpace); - this._stack = []; - this._globalData = { - usedTypefaces: new Set() - }; - this._ids = new Map(); - this._current = this._builder.buildRoot(this._ids); - this._errorCode = _xml_parser.XMLParserErrorCode.NoError; - this._whiteRegex = /^\s+$/; - this._nbsps = /\xa0+/g; - this._richText = richText; - } - - parse(data) { - this.parseXml(data); - - if (this._errorCode !== _xml_parser.XMLParserErrorCode.NoError) { - return undefined; - } - - this._current[_xfa_object.$finalize](); - - return this._current.element; - } - - onText(text) { - text = text.replace(this._nbsps, match => match.slice(1) + " "); - - if (this._richText || this._current[_xfa_object.$acceptWhitespace]()) { - this._current[_xfa_object.$onText](text, this._richText); - - return; - } - - if (this._whiteRegex.test(text)) { - return; - } - - this._current[_xfa_object.$onText](text.trim()); - } - - onCdata(text) { - this._current[_xfa_object.$onText](text); - } - - _mkAttributes(attributes, tagName) { - let namespace = null; - let prefixes = null; - const attributeObj = Object.create({}); - - for (const { - name, - value - } of attributes) { - if (name === "xmlns") { - if (!namespace) { - namespace = value; - } else { - (0, _util.warn)(`XFA - multiple namespace definition in <${tagName}>`); - } - } else if (name.startsWith("xmlns:")) { - const prefix = name.substring("xmlns:".length); - - if (!prefixes) { - prefixes = []; - } - - prefixes.push({ - prefix, - value - }); - } else { - const i = name.indexOf(":"); - - if (i === -1) { - attributeObj[name] = value; - } else { - let nsAttrs = attributeObj[_xfa_object.$nsAttributes]; - - if (!nsAttrs) { - nsAttrs = attributeObj[_xfa_object.$nsAttributes] = Object.create(null); - } - - const [ns, attrName] = [name.slice(0, i), name.slice(i + 1)]; - let attrs = nsAttrs[ns]; - - if (!attrs) { - attrs = nsAttrs[ns] = Object.create(null); - } - - attrs[attrName] = value; - } - } - } - - return [namespace, prefixes, attributeObj]; - } - - _getNameAndPrefix(name, nsAgnostic) { - const i = name.indexOf(":"); - - if (i === -1) { - return [name, null]; - } - - return [name.substring(i + 1), nsAgnostic ? "" : name.substring(0, i)]; - } - - onBeginElement(tagName, attributes, isEmpty) { - const [namespace, prefixes, attributesObj] = this._mkAttributes(attributes, tagName); - - const [name, nsPrefix] = this._getNameAndPrefix(tagName, this._builder.isNsAgnostic()); - - const node = this._builder.build({ - nsPrefix, - name, - attributes: attributesObj, - namespace, - prefixes - }); - - node[_xfa_object.$globalData] = this._globalData; - - if (isEmpty) { - node[_xfa_object.$finalize](); - - if (this._current[_xfa_object.$onChild](node)) { - node[_xfa_object.$setId](this._ids); - } - - node[_xfa_object.$clean](this._builder); - - return; - } - - this._stack.push(this._current); - - this._current = node; - } - - onEndElement(name) { - const node = this._current; - - if (node[_xfa_object.$isCDATAXml]() && typeof node[_xfa_object.$content] === "string") { - const parser = new XFAParser(); - parser._globalData = this._globalData; - const root = parser.parse(node[_xfa_object.$content]); - node[_xfa_object.$content] = null; - - node[_xfa_object.$onChild](root); - } - - node[_xfa_object.$finalize](); - - this._current = this._stack.pop(); - - if (this._current[_xfa_object.$onChild](node)) { - node[_xfa_object.$setId](this._ids); - } - - node[_xfa_object.$clean](this._builder); - } - - onError(code) { - this._errorCode = code; - } - -} - -exports.XFAParser = XFAParser; - -/***/ }), -/* 87 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.Builder = void 0; - -var _namespaces = __w_pdfjs_require__(77); - -var _xfa_object = __w_pdfjs_require__(75); - -var _setup = __w_pdfjs_require__(88); - -var _template = __w_pdfjs_require__(80); - -var _unknown = __w_pdfjs_require__(97); - -var _util = __w_pdfjs_require__(2); - -class Root extends _xfa_object.XFAObject { - constructor(ids) { - super(-1, "root", Object.create(null)); - this.element = null; - this[_xfa_object.$ids] = ids; - } - - [_xfa_object.$onChild](child) { - this.element = child; - return true; - } - - [_xfa_object.$finalize]() { - super[_xfa_object.$finalize](); - - if (this.element.template instanceof _template.Template) { - this[_xfa_object.$ids].set(_xfa_object.$root, this.element); - - this.element.template[_xfa_object.$resolvePrototypes](this[_xfa_object.$ids]); - - this.element.template[_xfa_object.$ids] = this[_xfa_object.$ids]; - } - } - -} - -class Empty extends _xfa_object.XFAObject { - constructor() { - super(-1, "", Object.create(null)); - } - - [_xfa_object.$onChild](_) { - return false; - } - -} - -class Builder { - constructor(rootNameSpace = null) { - this._namespaceStack = []; - this._nsAgnosticLevel = 0; - this._namespacePrefixes = new Map(); - this._namespaces = new Map(); - this._nextNsId = Math.max(...Object.values(_namespaces.NamespaceIds).map(({ - id - }) => id)); - this._currentNamespace = rootNameSpace || new _unknown.UnknownNamespace(++this._nextNsId); - } - - buildRoot(ids) { - return new Root(ids); - } - - build({ - nsPrefix, - name, - attributes, - namespace, - prefixes - }) { - const hasNamespaceDef = namespace !== null; - - if (hasNamespaceDef) { - this._namespaceStack.push(this._currentNamespace); - - this._currentNamespace = this._searchNamespace(namespace); - } - - if (prefixes) { - this._addNamespacePrefix(prefixes); - } - - if (attributes.hasOwnProperty(_xfa_object.$nsAttributes)) { - const dataTemplate = _setup.NamespaceSetUp.datasets; - const nsAttrs = attributes[_xfa_object.$nsAttributes]; - let xfaAttrs = null; - - for (const [ns, attrs] of Object.entries(nsAttrs)) { - const nsToUse = this._getNamespaceToUse(ns); - - if (nsToUse === dataTemplate) { - xfaAttrs = { - xfa: attrs - }; - break; - } - } - - if (xfaAttrs) { - attributes[_xfa_object.$nsAttributes] = xfaAttrs; - } else { - delete attributes[_xfa_object.$nsAttributes]; - } - } - - const namespaceToUse = this._getNamespaceToUse(nsPrefix); - - const node = namespaceToUse && namespaceToUse[_namespaces.$buildXFAObject](name, attributes) || new Empty(); - - if (node[_xfa_object.$isNsAgnostic]()) { - this._nsAgnosticLevel++; - } - - if (hasNamespaceDef || prefixes || node[_xfa_object.$isNsAgnostic]()) { - node[_xfa_object.$cleanup] = { - hasNamespace: hasNamespaceDef, - prefixes, - nsAgnostic: node[_xfa_object.$isNsAgnostic]() - }; - } - - return node; - } - - isNsAgnostic() { - return this._nsAgnosticLevel > 0; - } - - _searchNamespace(nsName) { - let ns = this._namespaces.get(nsName); - - if (ns) { - return ns; - } - - for (const [name, { - check - }] of Object.entries(_namespaces.NamespaceIds)) { - if (check(nsName)) { - ns = _setup.NamespaceSetUp[name]; - - if (ns) { - this._namespaces.set(nsName, ns); - - return ns; - } - - break; - } - } - - ns = new _unknown.UnknownNamespace(++this._nextNsId); - - this._namespaces.set(nsName, ns); - - return ns; - } - - _addNamespacePrefix(prefixes) { - for (const { - prefix, - value - } of prefixes) { - const namespace = this._searchNamespace(value); - - let prefixStack = this._namespacePrefixes.get(prefix); - - if (!prefixStack) { - prefixStack = []; - - this._namespacePrefixes.set(prefix, prefixStack); - } - - prefixStack.push(namespace); - } - } - - _getNamespaceToUse(prefix) { - if (!prefix) { - return this._currentNamespace; - } - - const prefixStack = this._namespacePrefixes.get(prefix); - - if (prefixStack && prefixStack.length > 0) { - return prefixStack[prefixStack.length - 1]; - } - - (0, _util.warn)(`Unknown namespace prefix: ${prefix}.`); - return null; - } - - clean(data) { - const { - hasNamespace, - prefixes, - nsAgnostic - } = data; - - if (hasNamespace) { - this._currentNamespace = this._namespaceStack.pop(); - } - - if (prefixes) { - prefixes.forEach(({ - prefix - }) => { - this._namespacePrefixes.get(prefix).pop(); - }); - } - - if (nsAgnostic) { - this._nsAgnosticLevel--; - } - } - -} - -exports.Builder = Builder; - -/***/ }), -/* 88 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.NamespaceSetUp = void 0; - -var _config = __w_pdfjs_require__(89); - -var _connection_set = __w_pdfjs_require__(90); - -var _datasets = __w_pdfjs_require__(91); - -var _locale_set = __w_pdfjs_require__(92); - -var _signature = __w_pdfjs_require__(93); - -var _stylesheet = __w_pdfjs_require__(94); - -var _template = __w_pdfjs_require__(80); - -var _xdp = __w_pdfjs_require__(95); - -var _xhtml = __w_pdfjs_require__(96); - -const NamespaceSetUp = { - config: _config.ConfigNamespace, - connection: _connection_set.ConnectionSetNamespace, - datasets: _datasets.DatasetsNamespace, - localeSet: _locale_set.LocaleSetNamespace, - signature: _signature.SignatureNamespace, - stylesheet: _stylesheet.StylesheetNamespace, - template: _template.TemplateNamespace, - xdp: _xdp.XdpNamespace, - xhtml: _xhtml.XhtmlNamespace -}; -exports.NamespaceSetUp = NamespaceSetUp; - -/***/ }), -/* 89 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.ConfigNamespace = void 0; - -var _namespaces = __w_pdfjs_require__(77); - -var _xfa_object = __w_pdfjs_require__(75); - -var _utils = __w_pdfjs_require__(76); - -var _util = __w_pdfjs_require__(2); - -const CONFIG_NS_ID = _namespaces.NamespaceIds.config.id; - -class Acrobat extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "acrobat", true); - this.acrobat7 = null; - this.autoSave = null; - this.common = null; - this.validate = null; - this.validateApprovalSignatures = null; - this.submitUrl = new _xfa_object.XFAObjectArray(); - } - -} - -class Acrobat7 extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "acrobat7", true); - this.dynamicRender = null; - } - -} - -class ADBE_JSConsole extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "ADBE_JSConsole", ["delegate", "Enable", "Disable"]); - } - -} - -class ADBE_JSDebugger extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "ADBE_JSDebugger", ["delegate", "Enable", "Disable"]); - } - -} - -class AddSilentPrint extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "addSilentPrint"); - } - -} - -class AddViewerPreferences extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "addViewerPreferences"); - } - -} - -class AdjustData extends _xfa_object.Option10 { - constructor(attributes) { - super(CONFIG_NS_ID, "adjustData"); - } - -} - -class AdobeExtensionLevel extends _xfa_object.IntegerObject { - constructor(attributes) { - super(CONFIG_NS_ID, "adobeExtensionLevel", 0, n => n >= 1 && n <= 8); - } - -} - -class Agent extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "agent", true); - this.name = attributes.name ? attributes.name.trim() : ""; - this.common = new _xfa_object.XFAObjectArray(); - } - -} - -class AlwaysEmbed extends _xfa_object.ContentObject { - constructor(attributes) { - super(CONFIG_NS_ID, "alwaysEmbed"); - } - -} - -class Amd extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "amd"); - } - -} - -class Area extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "area"); - this.level = (0, _utils.getInteger)({ - data: attributes.level, - defaultValue: 0, - validate: n => n >= 1 && n <= 3 - }); - this.name = (0, _utils.getStringOption)(attributes.name, ["", "barcode", "coreinit", "deviceDriver", "font", "general", "layout", "merge", "script", "signature", "sourceSet", "templateCache"]); - } - -} - -class Attributes extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "attributes", ["preserve", "delegate", "ignore"]); - } - -} - -class AutoSave extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "autoSave", ["disabled", "enabled"]); - } - -} - -class Base extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "base"); - } - -} - -class BatchOutput extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "batchOutput"); - this.format = (0, _utils.getStringOption)(attributes.format, ["none", "concat", "zip", "zipCompress"]); - } - -} - -class BehaviorOverride extends _xfa_object.ContentObject { - constructor(attributes) { - super(CONFIG_NS_ID, "behaviorOverride"); - } - - [_xfa_object.$finalize]() { - this[_xfa_object.$content] = new Map(this[_xfa_object.$content].trim().split(/\s+/).filter(x => x.includes(":")).map(x => x.split(":", 2))); - } - -} - -class Cache extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "cache", true); - this.templateCache = null; - } - -} - -class Change extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "change"); - } - -} - -class Common extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "common", true); - this.data = null; - this.locale = null; - this.localeSet = null; - this.messaging = null; - this.suppressBanner = null; - this.template = null; - this.validationMessaging = null; - this.versionControl = null; - this.log = new _xfa_object.XFAObjectArray(); - } - -} - -class Compress extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "compress"); - this.scope = (0, _utils.getStringOption)(attributes.scope, ["imageOnly", "document"]); - } - -} - -class CompressLogicalStructure extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "compressLogicalStructure"); - } - -} - -class CompressObjectStream extends _xfa_object.Option10 { - constructor(attributes) { - super(CONFIG_NS_ID, "compressObjectStream"); - } - -} - -class Compression extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "compression", true); - this.compressLogicalStructure = null; - this.compressObjectStream = null; - this.level = null; - this.type = null; - } - -} - -class Config extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "config", true); - this.acrobat = null; - this.present = null; - this.trace = null; - this.agent = new _xfa_object.XFAObjectArray(); - } - -} - -class Conformance extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "conformance", ["A", "B"]); - } - -} - -class ContentCopy extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "contentCopy"); - } - -} - -class Copies extends _xfa_object.IntegerObject { - constructor(attributes) { - super(CONFIG_NS_ID, "copies", 1, n => n >= 1); - } - -} - -class Creator extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "creator"); - } - -} - -class CurrentPage extends _xfa_object.IntegerObject { - constructor(attributes) { - super(CONFIG_NS_ID, "currentPage", 0, n => n >= 0); - } - -} - -class Data extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "data", true); - this.adjustData = null; - this.attributes = null; - this.incrementalLoad = null; - this.outputXSL = null; - this.range = null; - this.record = null; - this.startNode = null; - this.uri = null; - this.window = null; - this.xsl = null; - this.excludeNS = new _xfa_object.XFAObjectArray(); - this.transform = new _xfa_object.XFAObjectArray(); - } - -} - -class Debug extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "debug", true); - this.uri = null; - } - -} - -class DefaultTypeface extends _xfa_object.ContentObject { - constructor(attributes) { - super(CONFIG_NS_ID, "defaultTypeface"); - this.writingScript = (0, _utils.getStringOption)(attributes.writingScript, ["*", "Arabic", "Cyrillic", "EastEuropeanRoman", "Greek", "Hebrew", "Japanese", "Korean", "Roman", "SimplifiedChinese", "Thai", "TraditionalChinese", "Vietnamese"]); - } - -} - -class Destination extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "destination", ["pdf", "pcl", "ps", "webClient", "zpl"]); - } - -} - -class DocumentAssembly extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "documentAssembly"); - } - -} - -class Driver extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "driver", true); - this.name = attributes.name ? attributes.name.trim() : ""; - this.fontInfo = null; - this.xdc = null; - } - -} - -class DuplexOption extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "duplexOption", ["simplex", "duplexFlipLongEdge", "duplexFlipShortEdge"]); - } - -} - -class DynamicRender extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "dynamicRender", ["forbidden", "required"]); - } - -} - -class Embed extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "embed"); - } - -} - -class Encrypt extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "encrypt"); - } - -} - -class Encryption extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "encryption", true); - this.encrypt = null; - this.encryptionLevel = null; - this.permissions = null; - } - -} - -class EncryptionLevel extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "encryptionLevel", ["40bit", "128bit"]); - } - -} - -class Enforce extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "enforce"); - } - -} - -class Equate extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "equate"); - this.force = (0, _utils.getInteger)({ - data: attributes.force, - defaultValue: 1, - validate: n => n === 0 - }); - this.from = attributes.from || ""; - this.to = attributes.to || ""; - } - -} - -class EquateRange extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "equateRange"); - this.from = attributes.from || ""; - this.to = attributes.to || ""; - this._unicodeRange = attributes.unicodeRange || ""; - } - - get unicodeRange() { - const ranges = []; - const unicodeRegex = /U\+([0-9a-fA-F]+)/; - const unicodeRange = this._unicodeRange; - - for (let range of unicodeRange.split(",").map(x => x.trim()).filter(x => !!x)) { - range = range.split("-", 2).map(x => { - const found = x.match(unicodeRegex); - - if (!found) { - return 0; - } - - return parseInt(found[1], 16); - }); - - if (range.length === 1) { - range.push(range[0]); - } - - ranges.push(range); - } - - return (0, _util.shadow)(this, "unicodeRange", ranges); - } - -} - -class Exclude extends _xfa_object.ContentObject { - constructor(attributes) { - super(CONFIG_NS_ID, "exclude"); - } - - [_xfa_object.$finalize]() { - this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s+/).filter(x => x && ["calculate", "close", "enter", "exit", "initialize", "ready", "validate"].includes(x)); - } - -} - -class ExcludeNS extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "excludeNS"); - } - -} - -class FlipLabel extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "flipLabel", ["usePrinterSetting", "on", "off"]); - } - -} - -class FontInfo extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "fontInfo", true); - this.embed = null; - this.map = null; - this.subsetBelow = null; - this.alwaysEmbed = new _xfa_object.XFAObjectArray(); - this.defaultTypeface = new _xfa_object.XFAObjectArray(); - this.neverEmbed = new _xfa_object.XFAObjectArray(); - } - -} - -class FormFieldFilling extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "formFieldFilling"); - } - -} - -class GroupParent extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "groupParent"); - } - -} - -class IfEmpty extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "ifEmpty", ["dataValue", "dataGroup", "ignore", "remove"]); - } - -} - -class IncludeXDPContent extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "includeXDPContent"); - } - -} - -class IncrementalLoad extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "incrementalLoad", ["none", "forwardOnly"]); - } - -} - -class IncrementalMerge extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "incrementalMerge"); - } - -} - -class Interactive extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "interactive"); - } - -} - -class Jog extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "jog", ["usePrinterSetting", "none", "pageSet"]); - } - -} - -class LabelPrinter extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "labelPrinter", true); - this.name = (0, _utils.getStringOption)(attributes.name, ["zpl", "dpl", "ipl", "tcpl"]); - this.batchOutput = null; - this.flipLabel = null; - this.fontInfo = null; - this.xdc = null; - } - -} - -class Layout extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "layout", ["paginate", "panel"]); - } - -} - -class Level extends _xfa_object.IntegerObject { - constructor(attributes) { - super(CONFIG_NS_ID, "level", 0, n => n > 0); - } - -} - -class Linearized extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "linearized"); - } - -} - -class Locale extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "locale"); - } - -} - -class LocaleSet extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "localeSet"); - } - -} - -class Log extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "log", true); - this.mode = null; - this.threshold = null; - this.to = null; - this.uri = null; - } - -} - -class MapElement extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "map", true); - this.equate = new _xfa_object.XFAObjectArray(); - this.equateRange = new _xfa_object.XFAObjectArray(); - } - -} - -class MediumInfo extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "mediumInfo", true); - this.map = null; - } - -} - -class Message extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "message", true); - this.msgId = null; - this.severity = null; - } - -} - -class Messaging extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "messaging", true); - this.message = new _xfa_object.XFAObjectArray(); - } - -} - -class Mode extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "mode", ["append", "overwrite"]); - } - -} - -class ModifyAnnots extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "modifyAnnots"); - } - -} - -class MsgId extends _xfa_object.IntegerObject { - constructor(attributes) { - super(CONFIG_NS_ID, "msgId", 1, n => n >= 1); - } - -} - -class NameAttr extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "nameAttr"); - } - -} - -class NeverEmbed extends _xfa_object.ContentObject { - constructor(attributes) { - super(CONFIG_NS_ID, "neverEmbed"); - } - -} - -class NumberOfCopies extends _xfa_object.IntegerObject { - constructor(attributes) { - super(CONFIG_NS_ID, "numberOfCopies", null, n => n >= 2 && n <= 5); - } - -} - -class OpenAction extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "openAction", true); - this.destination = null; - } - -} - -class Output extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "output", true); - this.to = null; - this.type = null; - this.uri = null; - } - -} - -class OutputBin extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "outputBin"); - } - -} - -class OutputXSL extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "outputXSL", true); - this.uri = null; - } - -} - -class Overprint extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "overprint", ["none", "both", "draw", "field"]); - } - -} - -class Packets extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "packets"); - } - - [_xfa_object.$finalize]() { - if (this[_xfa_object.$content] === "*") { - return; - } - - this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s+/).filter(x => ["config", "datasets", "template", "xfdf", "xslt"].includes(x)); - } - -} - -class PageOffset extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "pageOffset"); - this.x = (0, _utils.getInteger)({ - data: attributes.x, - defaultValue: "useXDCSetting", - validate: n => true - }); - this.y = (0, _utils.getInteger)({ - data: attributes.y, - defaultValue: "useXDCSetting", - validate: n => true - }); - } - -} - -class PageRange extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "pageRange"); - } - - [_xfa_object.$finalize]() { - const numbers = this[_xfa_object.$content].trim().split(/\s+/).map(x => parseInt(x, 10)); - - const ranges = []; - - for (let i = 0, ii = numbers.length; i < ii; i += 2) { - ranges.push(numbers.slice(i, i + 2)); - } - - this[_xfa_object.$content] = ranges; - } - -} - -class Pagination extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "pagination", ["simplex", "duplexShortEdge", "duplexLongEdge"]); - } - -} - -class PaginationOverride extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "paginationOverride", ["none", "forceDuplex", "forceDuplexLongEdge", "forceDuplexShortEdge", "forceSimplex"]); - } - -} - -class Part extends _xfa_object.IntegerObject { - constructor(attributes) { - super(CONFIG_NS_ID, "part", 1, n => false); - } - -} - -class Pcl extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "pcl", true); - this.name = attributes.name || ""; - this.batchOutput = null; - this.fontInfo = null; - this.jog = null; - this.mediumInfo = null; - this.outputBin = null; - this.pageOffset = null; - this.staple = null; - this.xdc = null; - } - -} - -class Pdf extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "pdf", true); - this.name = attributes.name || ""; - this.adobeExtensionLevel = null; - this.batchOutput = null; - this.compression = null; - this.creator = null; - this.encryption = null; - this.fontInfo = null; - this.interactive = null; - this.linearized = null; - this.openAction = null; - this.pdfa = null; - this.producer = null; - this.renderPolicy = null; - this.scriptModel = null; - this.silentPrint = null; - this.submitFormat = null; - this.tagged = null; - this.version = null; - this.viewerPreferences = null; - this.xdc = null; - } - -} - -class Pdfa extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "pdfa", true); - this.amd = null; - this.conformance = null; - this.includeXDPContent = null; - this.part = null; - } - -} - -class Permissions extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "permissions", true); - this.accessibleContent = null; - this.change = null; - this.contentCopy = null; - this.documentAssembly = null; - this.formFieldFilling = null; - this.modifyAnnots = null; - this.plaintextMetadata = null; - this.print = null; - this.printHighQuality = null; - } - -} - -class PickTrayByPDFSize extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "pickTrayByPDFSize"); - } - -} - -class Picture extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "picture"); - } - -} - -class PlaintextMetadata extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "plaintextMetadata"); - } - -} - -class Presence extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "presence", ["preserve", "dissolve", "dissolveStructure", "ignore", "remove"]); - } - -} - -class Present extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "present", true); - this.behaviorOverride = null; - this.cache = null; - this.common = null; - this.copies = null; - this.destination = null; - this.incrementalMerge = null; - this.layout = null; - this.output = null; - this.overprint = null; - this.pagination = null; - this.paginationOverride = null; - this.script = null; - this.validate = null; - this.xdp = null; - this.driver = new _xfa_object.XFAObjectArray(); - this.labelPrinter = new _xfa_object.XFAObjectArray(); - this.pcl = new _xfa_object.XFAObjectArray(); - this.pdf = new _xfa_object.XFAObjectArray(); - this.ps = new _xfa_object.XFAObjectArray(); - this.submitUrl = new _xfa_object.XFAObjectArray(); - this.webClient = new _xfa_object.XFAObjectArray(); - this.zpl = new _xfa_object.XFAObjectArray(); - } - -} - -class Print extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "print"); - } - -} - -class PrintHighQuality extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "printHighQuality"); - } - -} - -class PrintScaling extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "printScaling", ["appdefault", "noScaling"]); - } - -} - -class PrinterName extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "printerName"); - } - -} - -class Producer extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "producer"); - } - -} - -class Ps extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "ps", true); - this.name = attributes.name || ""; - this.batchOutput = null; - this.fontInfo = null; - this.jog = null; - this.mediumInfo = null; - this.outputBin = null; - this.staple = null; - this.xdc = null; - } - -} - -class Range extends _xfa_object.ContentObject { - constructor(attributes) { - super(CONFIG_NS_ID, "range"); - } - - [_xfa_object.$finalize]() { - this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s*,\s*/, 2).map(range => range.split("-").map(x => parseInt(x.trim(), 10))).filter(range => range.every(x => !isNaN(x))).map(range => { - if (range.length === 1) { - range.push(range[0]); - } - - return range; - }); - } - -} - -class Record extends _xfa_object.ContentObject { - constructor(attributes) { - super(CONFIG_NS_ID, "record"); - } - - [_xfa_object.$finalize]() { - this[_xfa_object.$content] = this[_xfa_object.$content].trim(); - const n = parseInt(this[_xfa_object.$content], 10); - - if (!isNaN(n) && n >= 0) { - this[_xfa_object.$content] = n; - } - } - -} - -class Relevant extends _xfa_object.ContentObject { - constructor(attributes) { - super(CONFIG_NS_ID, "relevant"); - } - - [_xfa_object.$finalize]() { - this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s+/); - } - -} - -class Rename extends _xfa_object.ContentObject { - constructor(attributes) { - super(CONFIG_NS_ID, "rename"); - } - - [_xfa_object.$finalize]() { - this[_xfa_object.$content] = this[_xfa_object.$content].trim(); - - if (this[_xfa_object.$content].toLowerCase().startsWith("xml") || this[_xfa_object.$content].match(new RegExp("[\\p{L}_][\\p{L}\\d._\\p{M}-]*", "u"))) { - (0, _util.warn)("XFA - Rename: invalid XFA name"); - } - } - -} - -class RenderPolicy extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "renderPolicy", ["server", "client"]); - } - -} - -class RunScripts extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "runScripts", ["both", "client", "none", "server"]); - } - -} - -class Script extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "script", true); - this.currentPage = null; - this.exclude = null; - this.runScripts = null; - } - -} - -class ScriptModel extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "scriptModel", ["XFA", "none"]); - } - -} - -class Severity extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "severity", ["ignore", "error", "information", "trace", "warning"]); - } - -} - -class SilentPrint extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "silentPrint", true); - this.addSilentPrint = null; - this.printerName = null; - } - -} - -class Staple extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "staple"); - this.mode = (0, _utils.getStringOption)(attributes.mode, ["usePrinterSetting", "on", "off"]); - } - -} - -class StartNode extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "startNode"); - } - -} - -class StartPage extends _xfa_object.IntegerObject { - constructor(attributes) { - super(CONFIG_NS_ID, "startPage", 0, n => true); - } - -} - -class SubmitFormat extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "submitFormat", ["html", "delegate", "fdf", "xml", "pdf"]); - } - -} - -class SubmitUrl extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "submitUrl"); - } - -} - -class SubsetBelow extends _xfa_object.IntegerObject { - constructor(attributes) { - super(CONFIG_NS_ID, "subsetBelow", 100, n => n >= 0 && n <= 100); - } - -} - -class SuppressBanner extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "suppressBanner"); - } - -} - -class Tagged extends _xfa_object.Option01 { - constructor(attributes) { - super(CONFIG_NS_ID, "tagged"); - } - -} - -class Template extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "template", true); - this.base = null; - this.relevant = null; - this.startPage = null; - this.uri = null; - this.xsl = null; - } - -} - -class Threshold extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "threshold", ["trace", "error", "information", "warning"]); - } - -} - -class To extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "to", ["null", "memory", "stderr", "stdout", "system", "uri"]); - } - -} - -class TemplateCache extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "templateCache"); - this.maxEntries = (0, _utils.getInteger)({ - data: attributes.maxEntries, - defaultValue: 5, - validate: n => n >= 0 - }); - } - -} - -class Trace extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "trace", true); - this.area = new _xfa_object.XFAObjectArray(); - } - -} - -class Transform extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "transform", true); - this.groupParent = null; - this.ifEmpty = null; - this.nameAttr = null; - this.picture = null; - this.presence = null; - this.rename = null; - this.whitespace = null; - } - -} - -class Type extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "type", ["none", "ascii85", "asciiHex", "ccittfax", "flate", "lzw", "runLength", "native", "xdp", "mergedXDP"]); - } - -} - -class Uri extends _xfa_object.StringObject { - constructor(attributes) { - super(CONFIG_NS_ID, "uri"); - } - -} - -class Validate extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "validate", ["preSubmit", "prePrint", "preExecute", "preSave"]); - } - -} - -class ValidateApprovalSignatures extends _xfa_object.ContentObject { - constructor(attributes) { - super(CONFIG_NS_ID, "validateApprovalSignatures"); - } - - [_xfa_object.$finalize]() { - this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s+/).filter(x => ["docReady", "postSign"].includes(x)); - } - -} - -class ValidationMessaging extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "validationMessaging", ["allMessagesIndividually", "allMessagesTogether", "firstMessageOnly", "noMessages"]); - } - -} - -class Version extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "version", ["1.7", "1.6", "1.5", "1.4", "1.3", "1.2"]); - } - -} - -class VersionControl extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "VersionControl"); - this.outputBelow = (0, _utils.getStringOption)(attributes.outputBelow, ["warn", "error", "update"]); - this.sourceAbove = (0, _utils.getStringOption)(attributes.sourceAbove, ["warn", "error"]); - this.sourceBelow = (0, _utils.getStringOption)(attributes.sourceBelow, ["update", "maintain"]); - } - -} - -class ViewerPreferences extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "viewerPreferences", true); - this.ADBE_JSConsole = null; - this.ADBE_JSDebugger = null; - this.addViewerPreferences = null; - this.duplexOption = null; - this.enforce = null; - this.numberOfCopies = null; - this.pageRange = null; - this.pickTrayByPDFSize = null; - this.printScaling = null; - } - -} - -class WebClient extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "webClient", true); - this.name = attributes.name ? attributes.name.trim() : ""; - this.fontInfo = null; - this.xdc = null; - } - -} - -class Whitespace extends _xfa_object.OptionObject { - constructor(attributes) { - super(CONFIG_NS_ID, "whitespace", ["preserve", "ltrim", "normalize", "rtrim", "trim"]); - } - -} - -class Window extends _xfa_object.ContentObject { - constructor(attributes) { - super(CONFIG_NS_ID, "window"); - } - - [_xfa_object.$finalize]() { - const pair = this[_xfa_object.$content].trim().split(/\s*,\s*/, 2).map(x => parseInt(x, 10)); - - if (pair.some(x => isNaN(x))) { - this[_xfa_object.$content] = [0, 0]; - return; - } - - if (pair.length === 1) { - pair.push(pair[0]); - } - - this[_xfa_object.$content] = pair; - } - -} - -class Xdc extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "xdc", true); - this.uri = new _xfa_object.XFAObjectArray(); - this.xsl = new _xfa_object.XFAObjectArray(); - } - -} - -class Xdp extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "xdp", true); - this.packets = null; - } - -} - -class Xsl extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "xsl", true); - this.debug = null; - this.uri = null; - } - -} - -class Zpl extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONFIG_NS_ID, "zpl", true); - this.name = attributes.name ? attributes.name.trim() : ""; - this.batchOutput = null; - this.flipLabel = null; - this.fontInfo = null; - this.xdc = null; - } - -} - -class ConfigNamespace { - static [_namespaces.$buildXFAObject](name, attributes) { - if (ConfigNamespace.hasOwnProperty(name)) { - return ConfigNamespace[name](attributes); - } - - return undefined; - } - - static acrobat(attrs) { - return new Acrobat(attrs); - } - - static acrobat7(attrs) { - return new Acrobat7(attrs); - } - - static ADBE_JSConsole(attrs) { - return new ADBE_JSConsole(attrs); - } - - static ADBE_JSDebugger(attrs) { - return new ADBE_JSDebugger(attrs); - } - - static addSilentPrint(attrs) { - return new AddSilentPrint(attrs); - } - - static addViewerPreferences(attrs) { - return new AddViewerPreferences(attrs); - } - - static adjustData(attrs) { - return new AdjustData(attrs); - } - - static adobeExtensionLevel(attrs) { - return new AdobeExtensionLevel(attrs); - } - - static agent(attrs) { - return new Agent(attrs); - } - - static alwaysEmbed(attrs) { - return new AlwaysEmbed(attrs); - } - - static amd(attrs) { - return new Amd(attrs); - } - - static area(attrs) { - return new Area(attrs); - } - - static attributes(attrs) { - return new Attributes(attrs); - } - - static autoSave(attrs) { - return new AutoSave(attrs); - } - - static base(attrs) { - return new Base(attrs); - } - - static batchOutput(attrs) { - return new BatchOutput(attrs); - } - - static behaviorOverride(attrs) { - return new BehaviorOverride(attrs); - } - - static cache(attrs) { - return new Cache(attrs); - } - - static change(attrs) { - return new Change(attrs); - } - - static common(attrs) { - return new Common(attrs); - } - - static compress(attrs) { - return new Compress(attrs); - } - - static compressLogicalStructure(attrs) { - return new CompressLogicalStructure(attrs); - } - - static compressObjectStream(attrs) { - return new CompressObjectStream(attrs); - } - - static compression(attrs) { - return new Compression(attrs); - } - - static config(attrs) { - return new Config(attrs); - } - - static conformance(attrs) { - return new Conformance(attrs); - } - - static contentCopy(attrs) { - return new ContentCopy(attrs); - } - - static copies(attrs) { - return new Copies(attrs); - } - - static creator(attrs) { - return new Creator(attrs); - } - - static currentPage(attrs) { - return new CurrentPage(attrs); - } - - static data(attrs) { - return new Data(attrs); - } - - static debug(attrs) { - return new Debug(attrs); - } - - static defaultTypeface(attrs) { - return new DefaultTypeface(attrs); - } - - static destination(attrs) { - return new Destination(attrs); - } - - static documentAssembly(attrs) { - return new DocumentAssembly(attrs); - } - - static driver(attrs) { - return new Driver(attrs); - } - - static duplexOption(attrs) { - return new DuplexOption(attrs); - } - - static dynamicRender(attrs) { - return new DynamicRender(attrs); - } - - static embed(attrs) { - return new Embed(attrs); - } - - static encrypt(attrs) { - return new Encrypt(attrs); - } - - static encryption(attrs) { - return new Encryption(attrs); - } - - static encryptionLevel(attrs) { - return new EncryptionLevel(attrs); - } - - static enforce(attrs) { - return new Enforce(attrs); - } - - static equate(attrs) { - return new Equate(attrs); - } - - static equateRange(attrs) { - return new EquateRange(attrs); - } - - static exclude(attrs) { - return new Exclude(attrs); - } - - static excludeNS(attrs) { - return new ExcludeNS(attrs); - } - - static flipLabel(attrs) { - return new FlipLabel(attrs); - } - - static fontInfo(attrs) { - return new FontInfo(attrs); - } - - static formFieldFilling(attrs) { - return new FormFieldFilling(attrs); - } - - static groupParent(attrs) { - return new GroupParent(attrs); - } - - static ifEmpty(attrs) { - return new IfEmpty(attrs); - } - - static includeXDPContent(attrs) { - return new IncludeXDPContent(attrs); - } - - static incrementalLoad(attrs) { - return new IncrementalLoad(attrs); - } - - static incrementalMerge(attrs) { - return new IncrementalMerge(attrs); - } - - static interactive(attrs) { - return new Interactive(attrs); - } - - static jog(attrs) { - return new Jog(attrs); - } - - static labelPrinter(attrs) { - return new LabelPrinter(attrs); - } - - static layout(attrs) { - return new Layout(attrs); - } - - static level(attrs) { - return new Level(attrs); - } - - static linearized(attrs) { - return new Linearized(attrs); - } - - static locale(attrs) { - return new Locale(attrs); - } - - static localeSet(attrs) { - return new LocaleSet(attrs); - } - - static log(attrs) { - return new Log(attrs); - } - - static map(attrs) { - return new MapElement(attrs); - } - - static mediumInfo(attrs) { - return new MediumInfo(attrs); - } - - static message(attrs) { - return new Message(attrs); - } - - static messaging(attrs) { - return new Messaging(attrs); - } - - static mode(attrs) { - return new Mode(attrs); - } - - static modifyAnnots(attrs) { - return new ModifyAnnots(attrs); - } - - static msgId(attrs) { - return new MsgId(attrs); - } - - static nameAttr(attrs) { - return new NameAttr(attrs); - } - - static neverEmbed(attrs) { - return new NeverEmbed(attrs); - } - - static numberOfCopies(attrs) { - return new NumberOfCopies(attrs); - } - - static openAction(attrs) { - return new OpenAction(attrs); - } - - static output(attrs) { - return new Output(attrs); - } - - static outputBin(attrs) { - return new OutputBin(attrs); - } - - static outputXSL(attrs) { - return new OutputXSL(attrs); - } - - static overprint(attrs) { - return new Overprint(attrs); - } - - static packets(attrs) { - return new Packets(attrs); - } - - static pageOffset(attrs) { - return new PageOffset(attrs); - } - - static pageRange(attrs) { - return new PageRange(attrs); - } - - static pagination(attrs) { - return new Pagination(attrs); - } - - static paginationOverride(attrs) { - return new PaginationOverride(attrs); - } - - static part(attrs) { - return new Part(attrs); - } - - static pcl(attrs) { - return new Pcl(attrs); - } - - static pdf(attrs) { - return new Pdf(attrs); - } - - static pdfa(attrs) { - return new Pdfa(attrs); - } - - static permissions(attrs) { - return new Permissions(attrs); - } - - static pickTrayByPDFSize(attrs) { - return new PickTrayByPDFSize(attrs); - } - - static picture(attrs) { - return new Picture(attrs); - } - - static plaintextMetadata(attrs) { - return new PlaintextMetadata(attrs); - } - - static presence(attrs) { - return new Presence(attrs); - } - - static present(attrs) { - return new Present(attrs); - } - - static print(attrs) { - return new Print(attrs); - } - - static printHighQuality(attrs) { - return new PrintHighQuality(attrs); - } - - static printScaling(attrs) { - return new PrintScaling(attrs); - } - - static printerName(attrs) { - return new PrinterName(attrs); - } - - static producer(attrs) { - return new Producer(attrs); - } - - static ps(attrs) { - return new Ps(attrs); - } - - static range(attrs) { - return new Range(attrs); - } - - static record(attrs) { - return new Record(attrs); - } - - static relevant(attrs) { - return new Relevant(attrs); - } - - static rename(attrs) { - return new Rename(attrs); - } - - static renderPolicy(attrs) { - return new RenderPolicy(attrs); - } - - static runScripts(attrs) { - return new RunScripts(attrs); - } - - static script(attrs) { - return new Script(attrs); - } - - static scriptModel(attrs) { - return new ScriptModel(attrs); - } - - static severity(attrs) { - return new Severity(attrs); - } - - static silentPrint(attrs) { - return new SilentPrint(attrs); - } - - static staple(attrs) { - return new Staple(attrs); - } - - static startNode(attrs) { - return new StartNode(attrs); - } - - static startPage(attrs) { - return new StartPage(attrs); - } - - static submitFormat(attrs) { - return new SubmitFormat(attrs); - } - - static submitUrl(attrs) { - return new SubmitUrl(attrs); - } - - static subsetBelow(attrs) { - return new SubsetBelow(attrs); - } - - static suppressBanner(attrs) { - return new SuppressBanner(attrs); - } - - static tagged(attrs) { - return new Tagged(attrs); - } - - static template(attrs) { - return new Template(attrs); - } - - static templateCache(attrs) { - return new TemplateCache(attrs); - } - - static threshold(attrs) { - return new Threshold(attrs); - } - - static to(attrs) { - return new To(attrs); - } - - static trace(attrs) { - return new Trace(attrs); - } - - static transform(attrs) { - return new Transform(attrs); - } - - static type(attrs) { - return new Type(attrs); - } - - static uri(attrs) { - return new Uri(attrs); - } - - static validate(attrs) { - return new Validate(attrs); - } - - static validateApprovalSignatures(attrs) { - return new ValidateApprovalSignatures(attrs); - } - - static validationMessaging(attrs) { - return new ValidationMessaging(attrs); - } - - static version(attrs) { - return new Version(attrs); - } - - static versionControl(attrs) { - return new VersionControl(attrs); - } - - static viewerPreferences(attrs) { - return new ViewerPreferences(attrs); - } - - static webClient(attrs) { - return new WebClient(attrs); - } - - static whitespace(attrs) { - return new Whitespace(attrs); - } - - static window(attrs) { - return new Window(attrs); - } - - static xdc(attrs) { - return new Xdc(attrs); - } - - static xdp(attrs) { - return new Xdp(attrs); - } - - static xsl(attrs) { - return new Xsl(attrs); - } - - static zpl(attrs) { - return new Zpl(attrs); - } - -} - -exports.ConfigNamespace = ConfigNamespace; - -/***/ }), -/* 90 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.ConnectionSetNamespace = void 0; - -var _namespaces = __w_pdfjs_require__(77); - -var _xfa_object = __w_pdfjs_require__(75); - -const CONNECTION_SET_NS_ID = _namespaces.NamespaceIds.connectionSet.id; - -class ConnectionSet extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONNECTION_SET_NS_ID, "connectionSet", true); - this.wsdlConnection = new _xfa_object.XFAObjectArray(); - this.xmlConnection = new _xfa_object.XFAObjectArray(); - this.xsdConnection = new _xfa_object.XFAObjectArray(); - } - -} - -class EffectiveInputPolicy extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONNECTION_SET_NS_ID, "effectiveInputPolicy"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class EffectiveOutputPolicy extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONNECTION_SET_NS_ID, "effectiveOutputPolicy"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class Operation extends _xfa_object.StringObject { - constructor(attributes) { - super(CONNECTION_SET_NS_ID, "operation"); - this.id = attributes.id || ""; - this.input = attributes.input || ""; - this.name = attributes.name || ""; - this.output = attributes.output || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class RootElement extends _xfa_object.StringObject { - constructor(attributes) { - super(CONNECTION_SET_NS_ID, "rootElement"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class SoapAction extends _xfa_object.StringObject { - constructor(attributes) { - super(CONNECTION_SET_NS_ID, "soapAction"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class SoapAddress extends _xfa_object.StringObject { - constructor(attributes) { - super(CONNECTION_SET_NS_ID, "soapAddress"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class Uri extends _xfa_object.StringObject { - constructor(attributes) { - super(CONNECTION_SET_NS_ID, "uri"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class WsdlAddress extends _xfa_object.StringObject { - constructor(attributes) { - super(CONNECTION_SET_NS_ID, "wsdlAddress"); - this.id = attributes.id || ""; - this.name = attributes.name || ""; - this.use = attributes.use || ""; - this.usehref = attributes.usehref || ""; - } - -} - -class WsdlConnection extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONNECTION_SET_NS_ID, "wsdlConnection", true); - this.dataDescription = attributes.dataDescription || ""; - this.name = attributes.name || ""; - this.effectiveInputPolicy = null; - this.effectiveOutputPolicy = null; - this.operation = null; - this.soapAction = null; - this.soapAddress = null; - this.wsdlAddress = null; - } - -} - -class XmlConnection extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONNECTION_SET_NS_ID, "xmlConnection", true); - this.dataDescription = attributes.dataDescription || ""; - this.name = attributes.name || ""; - this.uri = null; - } - -} - -class XsdConnection extends _xfa_object.XFAObject { - constructor(attributes) { - super(CONNECTION_SET_NS_ID, "xsdConnection", true); - this.dataDescription = attributes.dataDescription || ""; - this.name = attributes.name || ""; - this.rootElement = null; - this.uri = null; - } - -} - -class ConnectionSetNamespace { - static [_namespaces.$buildXFAObject](name, attributes) { - if (ConnectionSetNamespace.hasOwnProperty(name)) { - return ConnectionSetNamespace[name](attributes); - } - - return undefined; - } - - static connectionSet(attrs) { - return new ConnectionSet(attrs); - } - - static effectiveInputPolicy(attrs) { - return new EffectiveInputPolicy(attrs); - } - - static effectiveOutputPolicy(attrs) { - return new EffectiveOutputPolicy(attrs); - } - - static operation(attrs) { - return new Operation(attrs); - } - - static rootElement(attrs) { - return new RootElement(attrs); - } - - static soapAction(attrs) { - return new SoapAction(attrs); - } - - static soapAddress(attrs) { - return new SoapAddress(attrs); - } - - static uri(attrs) { - return new Uri(attrs); - } - - static wsdlAddress(attrs) { - return new WsdlAddress(attrs); - } - - static wsdlConnection(attrs) { - return new WsdlConnection(attrs); - } - - static xmlConnection(attrs) { - return new XmlConnection(attrs); - } - - static xsdConnection(attrs) { - return new XsdConnection(attrs); - } - -} - -exports.ConnectionSetNamespace = ConnectionSetNamespace; - -/***/ }), -/* 91 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.DatasetsNamespace = void 0; - -var _xfa_object = __w_pdfjs_require__(75); - -var _namespaces = __w_pdfjs_require__(77); - -const DATASETS_NS_ID = _namespaces.NamespaceIds.datasets.id; - -class Data extends _xfa_object.XmlObject { - constructor(attributes) { - super(DATASETS_NS_ID, "data", attributes); - } - - [_xfa_object.$isNsAgnostic]() { - return true; - } - -} - -class Datasets extends _xfa_object.XFAObject { - constructor(attributes) { - super(DATASETS_NS_ID, "datasets", true); - this.data = null; - this.Signature = null; - } - - [_xfa_object.$onChild](child) { - const name = child[_xfa_object.$nodeName]; - - if (name === "data" && child[_xfa_object.$namespaceId] === DATASETS_NS_ID || name === "Signature" && child[_xfa_object.$namespaceId] === _namespaces.NamespaceIds.signature.id) { - this[name] = child; - } - - this[_xfa_object.$appendChild](child); - } - -} - -class DatasetsNamespace { - static [_namespaces.$buildXFAObject](name, attributes) { - if (DatasetsNamespace.hasOwnProperty(name)) { - return DatasetsNamespace[name](attributes); - } - - return undefined; - } - - static datasets(attributes) { - return new Datasets(attributes); - } - - static data(attributes) { - return new Data(attributes); - } - -} - -exports.DatasetsNamespace = DatasetsNamespace; - -/***/ }), -/* 92 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.LocaleSetNamespace = void 0; - -var _namespaces = __w_pdfjs_require__(77); - -var _xfa_object = __w_pdfjs_require__(75); - -var _utils = __w_pdfjs_require__(76); - -const LOCALE_SET_NS_ID = _namespaces.NamespaceIds.localeSet.id; - -class CalendarSymbols extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "calendarSymbols", true); - this.name = "gregorian"; - this.dayNames = new _xfa_object.XFAObjectArray(2); - this.eraNames = null; - this.meridiemNames = null; - this.monthNames = new _xfa_object.XFAObjectArray(2); - } - -} - -class CurrencySymbol extends _xfa_object.StringObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "currencySymbol"); - this.name = (0, _utils.getStringOption)(attributes.name, ["symbol", "isoname", "decimal"]); - } - -} - -class CurrencySymbols extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "currencySymbols", true); - this.currencySymbol = new _xfa_object.XFAObjectArray(3); - } - -} - -class DatePattern extends _xfa_object.StringObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "datePattern"); - this.name = (0, _utils.getStringOption)(attributes.name, ["full", "long", "med", "short"]); - } - -} - -class DatePatterns extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "datePatterns", true); - this.datePattern = new _xfa_object.XFAObjectArray(4); - } - -} - -class DateTimeSymbols extends _xfa_object.ContentObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "dateTimeSymbols"); - } - -} - -class Day extends _xfa_object.StringObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "day"); - } - -} - -class DayNames extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "dayNames", true); - this.abbr = (0, _utils.getInteger)({ - data: attributes.abbr, - defaultValue: 0, - validate: x => x === 1 - }); - this.day = new _xfa_object.XFAObjectArray(7); - } - -} - -class Era extends _xfa_object.StringObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "era"); - } - -} - -class EraNames extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "eraNames", true); - this.era = new _xfa_object.XFAObjectArray(2); - } - -} - -class Locale extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "locale", true); - this.desc = attributes.desc || ""; - this.name = "isoname"; - this.calendarSymbols = null; - this.currencySymbols = null; - this.datePatterns = null; - this.dateTimeSymbols = null; - this.numberPatterns = null; - this.numberSymbols = null; - this.timePatterns = null; - this.typeFaces = null; - } - -} - -class LocaleSet extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "localeSet", true); - this.locale = new _xfa_object.XFAObjectArray(); - } - -} - -class Meridiem extends _xfa_object.StringObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "meridiem"); - } - -} - -class MeridiemNames extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "meridiemNames", true); - this.meridiem = new _xfa_object.XFAObjectArray(2); - } - -} - -class Month extends _xfa_object.StringObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "month"); - } - -} - -class MonthNames extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "monthNames", true); - this.abbr = (0, _utils.getInteger)({ - data: attributes.abbr, - defaultValue: 0, - validate: x => x === 1 - }); - this.month = new _xfa_object.XFAObjectArray(12); - } - -} - -class NumberPattern extends _xfa_object.StringObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "numberPattern"); - this.name = (0, _utils.getStringOption)(attributes.name, ["full", "long", "med", "short"]); - } - -} - -class NumberPatterns extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "numberPatterns", true); - this.numberPattern = new _xfa_object.XFAObjectArray(4); - } - -} - -class NumberSymbol extends _xfa_object.StringObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "numberSymbol"); - this.name = (0, _utils.getStringOption)(attributes.name, ["decimal", "grouping", "percent", "minus", "zero"]); - } - -} - -class NumberSymbols extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "numberSymbols", true); - this.numberSymbol = new _xfa_object.XFAObjectArray(5); - } - -} - -class TimePattern extends _xfa_object.StringObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "timePattern"); - this.name = (0, _utils.getStringOption)(attributes.name, ["full", "long", "med", "short"]); - } - -} - -class TimePatterns extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "timePatterns", true); - this.timePattern = new _xfa_object.XFAObjectArray(4); - } - -} - -class TypeFace extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "typeFace", true); - this.name = attributes.name | ""; - } - -} - -class TypeFaces extends _xfa_object.XFAObject { - constructor(attributes) { - super(LOCALE_SET_NS_ID, "typeFaces", true); - this.typeFace = new _xfa_object.XFAObjectArray(); - } - -} - -class LocaleSetNamespace { - static [_namespaces.$buildXFAObject](name, attributes) { - if (LocaleSetNamespace.hasOwnProperty(name)) { - return LocaleSetNamespace[name](attributes); - } - - return undefined; - } - - static calendarSymbols(attrs) { - return new CalendarSymbols(attrs); - } - - static currencySymbol(attrs) { - return new CurrencySymbol(attrs); - } - - static currencySymbols(attrs) { - return new CurrencySymbols(attrs); - } - - static datePattern(attrs) { - return new DatePattern(attrs); - } - - static datePatterns(attrs) { - return new DatePatterns(attrs); - } - - static dateTimeSymbols(attrs) { - return new DateTimeSymbols(attrs); - } - - static day(attrs) { - return new Day(attrs); - } - - static dayNames(attrs) { - return new DayNames(attrs); - } - - static era(attrs) { - return new Era(attrs); - } - - static eraNames(attrs) { - return new EraNames(attrs); - } - - static locale(attrs) { - return new Locale(attrs); - } - - static localeSet(attrs) { - return new LocaleSet(attrs); - } - - static meridiem(attrs) { - return new Meridiem(attrs); - } - - static meridiemNames(attrs) { - return new MeridiemNames(attrs); - } - - static month(attrs) { - return new Month(attrs); - } - - static monthNames(attrs) { - return new MonthNames(attrs); - } - - static numberPattern(attrs) { - return new NumberPattern(attrs); - } - - static numberPatterns(attrs) { - return new NumberPatterns(attrs); - } - - static numberSymbol(attrs) { - return new NumberSymbol(attrs); - } - - static numberSymbols(attrs) { - return new NumberSymbols(attrs); - } - - static timePattern(attrs) { - return new TimePattern(attrs); - } - - static timePatterns(attrs) { - return new TimePatterns(attrs); - } - - static typeFace(attrs) { - return new TypeFace(attrs); - } - - static typeFaces(attrs) { - return new TypeFaces(attrs); - } - -} - -exports.LocaleSetNamespace = LocaleSetNamespace; - -/***/ }), -/* 93 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.SignatureNamespace = void 0; - -var _namespaces = __w_pdfjs_require__(77); - -var _xfa_object = __w_pdfjs_require__(75); - -const SIGNATURE_NS_ID = _namespaces.NamespaceIds.signature.id; - -class Signature extends _xfa_object.XFAObject { - constructor(attributes) { - super(SIGNATURE_NS_ID, "signature", true); - } - -} - -class SignatureNamespace { - static [_namespaces.$buildXFAObject](name, attributes) { - if (SignatureNamespace.hasOwnProperty(name)) { - return SignatureNamespace[name](attributes); - } - - return undefined; - } - - static signature(attributes) { - return new Signature(attributes); - } - -} - -exports.SignatureNamespace = SignatureNamespace; - -/***/ }), -/* 94 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.StylesheetNamespace = void 0; - -var _namespaces = __w_pdfjs_require__(77); - -var _xfa_object = __w_pdfjs_require__(75); - -const STYLESHEET_NS_ID = _namespaces.NamespaceIds.stylesheet.id; - -class Stylesheet extends _xfa_object.XFAObject { - constructor(attributes) { - super(STYLESHEET_NS_ID, "stylesheet", true); - } - -} - -class StylesheetNamespace { - static [_namespaces.$buildXFAObject](name, attributes) { - if (StylesheetNamespace.hasOwnProperty(name)) { - return StylesheetNamespace[name](attributes); - } - - return undefined; - } - - static stylesheet(attributes) { - return new Stylesheet(attributes); - } - -} - -exports.StylesheetNamespace = StylesheetNamespace; - -/***/ }), -/* 95 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.XdpNamespace = void 0; - -var _namespaces = __w_pdfjs_require__(77); - -var _xfa_object = __w_pdfjs_require__(75); - -const XDP_NS_ID = _namespaces.NamespaceIds.xdp.id; - -class Xdp extends _xfa_object.XFAObject { - constructor(attributes) { - super(XDP_NS_ID, "xdp", true); - this.uuid = attributes.uuid || ""; - this.timeStamp = attributes.timeStamp || ""; - this.config = null; - this.connectionSet = null; - this.datasets = null; - this.localeSet = null; - this.stylesheet = new _xfa_object.XFAObjectArray(); - this.template = null; - } - - [_xfa_object.$onChildCheck](child) { - const ns = _namespaces.NamespaceIds[child[_xfa_object.$nodeName]]; - return ns && child[_xfa_object.$namespaceId] === ns.id; - } - -} - -class XdpNamespace { - static [_namespaces.$buildXFAObject](name, attributes) { - if (XdpNamespace.hasOwnProperty(name)) { - return XdpNamespace[name](attributes); - } - - return undefined; - } - - static xdp(attributes) { - return new Xdp(attributes); - } - -} - -exports.XdpNamespace = XdpNamespace; - -/***/ }), -/* 96 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.XhtmlNamespace = void 0; - -var _xfa_object = __w_pdfjs_require__(75); - -var _namespaces = __w_pdfjs_require__(77); - -var _html_utils = __w_pdfjs_require__(82); - -var _utils = __w_pdfjs_require__(76); - -const XHTML_NS_ID = _namespaces.NamespaceIds.xhtml.id; -const $richText = Symbol(); -const VALID_STYLES = new Set(["color", "font", "font-family", "font-size", "font-stretch", "font-style", "font-weight", "margin", "margin-bottom", "margin-left", "margin-right", "margin-top", "letter-spacing", "line-height", "orphans", "page-break-after", "page-break-before", "page-break-inside", "tab-interval", "tab-stop", "text-align", "text-decoration", "text-indent", "vertical-align", "widows", "kerning-mode", "xfa-font-horizontal-scale", "xfa-font-vertical-scale", "xfa-spacerun", "xfa-tab-stops"]); -const StyleMapping = new Map([["page-break-after", "breakAfter"], ["page-break-before", "breakBefore"], ["page-break-inside", "breakInside"], ["kerning-mode", value => value === "none" ? "none" : "normal"], ["xfa-font-horizontal-scale", value => `scaleX(${Math.max(0, Math.min(parseInt(value) / 100)).toFixed(2)})`], ["xfa-font-vertical-scale", value => `scaleY(${Math.max(0, Math.min(parseInt(value) / 100)).toFixed(2)})`], ["xfa-spacerun", ""], ["xfa-tab-stops", ""], ["font-size", (value, original) => { - value = original.fontSize = (0, _utils.getMeasurement)(value); - return (0, _html_utils.measureToString)(0.99 * value); -}], ["letter-spacing", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["line-height", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin-bottom", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin-left", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin-right", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin-top", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["text-indent", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["font-family", value => value], ["vertical-align", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))]]); -const spacesRegExp = /\s+/g; -const crlfRegExp = /[\r\n]+/g; -const crlfForRichTextRegExp = /\r\n?/g; - -function mapStyle(styleStr, node, richText) { - const style = Object.create(null); - - if (!styleStr) { - return style; - } - - const original = Object.create(null); - - for (const [key, value] of styleStr.split(";").map(s => s.split(":", 2))) { - const mapping = StyleMapping.get(key); - - if (mapping === "") { - continue; - } - - let newValue = value; - - if (mapping) { - if (typeof mapping === "string") { - newValue = mapping; - } else { - newValue = mapping(value, original); - } - } - - if (key.endsWith("scale")) { - if (style.transform) { - style.transform = `${style[key]} ${newValue}`; - } else { - style.transform = newValue; - } - } else { - style[key.replaceAll(/-([a-zA-Z])/g, (_, x) => x.toUpperCase())] = newValue; - } - } - - if (style.fontFamily) { - (0, _html_utils.setFontFamily)({ - typeface: style.fontFamily, - weight: style.fontWeight || "normal", - posture: style.fontStyle || "normal", - size: original.fontSize || 0 - }, node, node[_xfa_object.$globalData].fontFinder, style); - } - - if (richText && style.verticalAlign && style.verticalAlign !== "0px" && style.fontSize) { - const SUB_SUPER_SCRIPT_FACTOR = 0.583; - const VERTICAL_FACTOR = 0.333; - const fontSize = (0, _utils.getMeasurement)(style.fontSize); - style.fontSize = (0, _html_utils.measureToString)(fontSize * SUB_SUPER_SCRIPT_FACTOR); - style.verticalAlign = (0, _html_utils.measureToString)(Math.sign((0, _utils.getMeasurement)(style.verticalAlign)) * fontSize * VERTICAL_FACTOR); - } - - (0, _html_utils.fixTextIndent)(style); - return style; -} - -function checkStyle(node) { - if (!node.style) { - return ""; - } - - return node.style.trim().split(/\s*;\s*/).filter(s => !!s).map(s => s.split(/\s*:\s*/, 2)).filter(([key, value]) => { - if (key === "font-family") { - node[_xfa_object.$globalData].usedTypefaces.add(value); - } - - return VALID_STYLES.has(key); - }).map(kv => kv.join(":")).join(";"); -} - -const NoWhites = new Set(["body", "html"]); - -class XhtmlObject extends _xfa_object.XmlObject { - constructor(attributes, name) { - super(XHTML_NS_ID, name); - this[$richText] = false; - this.style = attributes.style || ""; - } - - [_xfa_object.$clean](builder) { - super[_xfa_object.$clean](builder); - - this.style = checkStyle(this); - } - - [_xfa_object.$acceptWhitespace]() { - return !NoWhites.has(this[_xfa_object.$nodeName]); - } - - [_xfa_object.$onText](str, richText = false) { - if (!richText) { - str = str.replace(crlfRegExp, ""); - - if (!this.style.includes("xfa-spacerun:yes")) { - str = str.replace(spacesRegExp, " "); - } - } else { - this[$richText] = true; - } - - if (str) { - this[_xfa_object.$content] += str; - } - } - - [_xfa_object.$pushGlyphs](measure, mustPop = true) { - const xfaFont = Object.create(null); - const margin = { - top: NaN, - bottom: NaN, - left: NaN, - right: NaN - }; - let lineHeight = null; - - for (const [key, value] of this.style.split(";").map(s => s.split(":", 2))) { - switch (key) { - case "font-family": - xfaFont.typeface = (0, _utils.stripQuotes)(value); - break; - - case "font-size": - xfaFont.size = (0, _utils.getMeasurement)(value); - break; - - case "font-weight": - xfaFont.weight = value; - break; - - case "font-style": - xfaFont.posture = value; - break; - - case "letter-spacing": - xfaFont.letterSpacing = (0, _utils.getMeasurement)(value); - break; - - case "margin": - const values = value.split(/ \t/).map(x => (0, _utils.getMeasurement)(x)); - - switch (values.length) { - case 1: - margin.top = margin.bottom = margin.left = margin.right = values[0]; - break; - - case 2: - margin.top = margin.bottom = values[0]; - margin.left = margin.right = values[1]; - break; - - case 3: - margin.top = values[0]; - margin.bottom = values[2]; - margin.left = margin.right = values[1]; - break; - - case 4: - margin.top = values[0]; - margin.left = values[1]; - margin.bottom = values[2]; - margin.right = values[3]; - break; - } - - break; - - case "margin-top": - margin.top = (0, _utils.getMeasurement)(value); - break; - - case "margin-bottom": - margin.bottom = (0, _utils.getMeasurement)(value); - break; - - case "margin-left": - margin.left = (0, _utils.getMeasurement)(value); - break; - - case "margin-right": - margin.right = (0, _utils.getMeasurement)(value); - break; - - case "line-height": - lineHeight = (0, _utils.getMeasurement)(value); - break; - } - } - - measure.pushData(xfaFont, margin, lineHeight); - - if (this[_xfa_object.$content]) { - measure.addString(this[_xfa_object.$content]); - } else { - for (const child of this[_xfa_object.$getChildren]()) { - if (child[_xfa_object.$nodeName] === "#text") { - measure.addString(child[_xfa_object.$content]); - continue; - } - - child[_xfa_object.$pushGlyphs](measure); - } - } - - if (mustPop) { - measure.popFont(); - } - } - - [_xfa_object.$toHTML](availableSpace) { - const children = []; - this[_xfa_object.$extra] = { - children - }; - - this[_xfa_object.$childrenToHTML]({}); - - if (children.length === 0 && !this[_xfa_object.$content]) { - return _utils.HTMLResult.EMPTY; - } - - let value; - - if (this[$richText]) { - value = this[_xfa_object.$content] ? this[_xfa_object.$content].replace(crlfForRichTextRegExp, "\n") : undefined; - } else { - value = this[_xfa_object.$content] || undefined; - } - - return _utils.HTMLResult.success({ - name: this[_xfa_object.$nodeName], - attributes: { - href: this.href, - style: mapStyle(this.style, this, this[$richText]) - }, - children, - value - }); - } - -} - -class A extends XhtmlObject { - constructor(attributes) { - super(attributes, "a"); - this.href = (0, _html_utils.fixURL)(attributes.href) || ""; - } - -} - -class B extends XhtmlObject { - constructor(attributes) { - super(attributes, "b"); - } - - [_xfa_object.$pushGlyphs](measure) { - measure.pushFont({ - weight: "bold" - }); - - super[_xfa_object.$pushGlyphs](measure); - - measure.popFont(); - } - -} - -class Body extends XhtmlObject { - constructor(attributes) { - super(attributes, "body"); - } - - [_xfa_object.$toHTML](availableSpace) { - const res = super[_xfa_object.$toHTML](availableSpace); - - const { - html - } = res; - - if (!html) { - return _utils.HTMLResult.EMPTY; - } - - html.name = "div"; - html.attributes.class = ["xfaRich"]; - return res; - } - -} - -class Br extends XhtmlObject { - constructor(attributes) { - super(attributes, "br"); - } - - [_xfa_object.$text]() { - return "\n"; - } - - [_xfa_object.$pushGlyphs](measure) { - measure.addString("\n"); - } - - [_xfa_object.$toHTML](availableSpace) { - return _utils.HTMLResult.success({ - name: "br" - }); - } - -} - -class Html extends XhtmlObject { - constructor(attributes) { - super(attributes, "html"); - } - - [_xfa_object.$toHTML](availableSpace) { - const children = []; - this[_xfa_object.$extra] = { - children - }; - - this[_xfa_object.$childrenToHTML]({}); - - if (children.length === 0) { - return _utils.HTMLResult.success({ - name: "div", - attributes: { - class: ["xfaRich"], - style: {} - }, - value: this[_xfa_object.$content] || "" - }); - } - - if (children.length === 1) { - const child = children[0]; - - if (child.attributes && child.attributes.class.includes("xfaRich")) { - return _utils.HTMLResult.success(child); - } - } - - return _utils.HTMLResult.success({ - name: "div", - attributes: { - class: ["xfaRich"], - style: {} - }, - children - }); - } - -} - -class I extends XhtmlObject { - constructor(attributes) { - super(attributes, "i"); - } - - [_xfa_object.$pushGlyphs](measure) { - measure.pushFont({ - posture: "italic" - }); - - super[_xfa_object.$pushGlyphs](measure); - - measure.popFont(); - } - -} - -class Li extends XhtmlObject { - constructor(attributes) { - super(attributes, "li"); - } - -} - -class Ol extends XhtmlObject { - constructor(attributes) { - super(attributes, "ol"); - } - -} - -class P extends XhtmlObject { - constructor(attributes) { - super(attributes, "p"); - } - - [_xfa_object.$pushGlyphs](measure) { - super[_xfa_object.$pushGlyphs](measure, false); - - measure.addString("\n"); - measure.addPara(); - measure.popFont(); - } - - [_xfa_object.$text]() { - const siblings = this[_xfa_object.$getParent]()[_xfa_object.$getChildren](); - - if (siblings[siblings.length - 1] === this) { - return super[_xfa_object.$text](); - } - - return super[_xfa_object.$text]() + "\n"; - } - -} - -class Span extends XhtmlObject { - constructor(attributes) { - super(attributes, "span"); - } - -} - -class Sub extends XhtmlObject { - constructor(attributes) { - super(attributes, "sub"); - } - -} - -class Sup extends XhtmlObject { - constructor(attributes) { - super(attributes, "sup"); - } - -} - -class Ul extends XhtmlObject { - constructor(attributes) { - super(attributes, "ul"); - } - -} - -class XhtmlNamespace { - static [_namespaces.$buildXFAObject](name, attributes) { - if (XhtmlNamespace.hasOwnProperty(name)) { - return XhtmlNamespace[name](attributes); - } - - return undefined; - } - - static a(attributes) { - return new A(attributes); - } - - static b(attributes) { - return new B(attributes); - } - - static body(attributes) { - return new Body(attributes); - } - - static br(attributes) { - return new Br(attributes); - } - - static html(attributes) { - return new Html(attributes); - } - - static i(attributes) { - return new I(attributes); - } - - static li(attributes) { - return new Li(attributes); - } - - static ol(attributes) { - return new Ol(attributes); - } - - static p(attributes) { - return new P(attributes); - } - - static span(attributes) { - return new Span(attributes); - } - - static sub(attributes) { - return new Sub(attributes); - } - - static sup(attributes) { - return new Sup(attributes); - } - - static ul(attributes) { - return new Ul(attributes); - } - -} - -exports.XhtmlNamespace = XhtmlNamespace; - -/***/ }), -/* 97 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.UnknownNamespace = void 0; - -var _namespaces = __w_pdfjs_require__(77); - -var _xfa_object = __w_pdfjs_require__(75); - -class UnknownNamespace { - constructor(nsId) { - this.namespaceId = nsId; - } - - [_namespaces.$buildXFAObject](name, attributes) { - return new _xfa_object.XmlObject(this.namespaceId, name, attributes); - } - -} - -exports.UnknownNamespace = UnknownNamespace; - -/***/ }), -/* 98 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.XRef = void 0; - -var _util = __w_pdfjs_require__(2); - -var _primitives = __w_pdfjs_require__(5); - -var _core_utils = __w_pdfjs_require__(9); - -var _parser = __w_pdfjs_require__(27); - -var _base_stream = __w_pdfjs_require__(6); - -var _crypto = __w_pdfjs_require__(72); - -class XRef { - constructor(stream, pdfManager) { - this.stream = stream; - this.pdfManager = pdfManager; - this.entries = []; - this.xrefstms = Object.create(null); - this._cacheMap = new Map(); - this._pendingRefs = new _primitives.RefSet(); - this.stats = new _core_utils.DocStats(pdfManager.msgHandler); - this._newRefNum = null; - } - - getNewRef() { - if (this._newRefNum === null) { - this._newRefNum = this.entries.length; - } - - return _primitives.Ref.get(this._newRefNum++, 0); - } - - resetNewRef() { - this._newRefNum = null; - } - - setStartXRef(startXRef) { - this.startXRefQueue = [startXRef]; - } - - parse(recoveryMode = false) { - let trailerDict; - - if (!recoveryMode) { - trailerDict = this.readXRef(); - } else { - (0, _util.warn)("Indexing all PDF objects"); - trailerDict = this.indexObjects(); - } - - trailerDict.assignXref(this); - this.trailer = trailerDict; - let encrypt; - - try { - encrypt = trailerDict.get("Encrypt"); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - - (0, _util.warn)(`XRef.parse - Invalid "Encrypt" reference: "${ex}".`); - } - - if (encrypt instanceof _primitives.Dict) { - const ids = trailerDict.get("ID"); - const fileId = ids && ids.length ? ids[0] : ""; - encrypt.suppressEncryption = true; - this.encrypt = new _crypto.CipherTransformFactory(encrypt, fileId, this.pdfManager.password); - } - - let root; - - try { - root = trailerDict.get("Root"); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - - (0, _util.warn)(`XRef.parse - Invalid "Root" reference: "${ex}".`); - } - - if (root instanceof _primitives.Dict) { - try { - const pages = root.get("Pages"); - - if (pages instanceof _primitives.Dict) { - this.root = root; - return; - } - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } - - (0, _util.warn)(`XRef.parse - Invalid "Pages" reference: "${ex}".`); - } - } - - if (!recoveryMode) { - throw new _core_utils.XRefParseException(); - } - - throw new _util.InvalidPDFException("Invalid Root reference."); - } - - processXRefTable(parser) { - if (!("tableState" in this)) { - this.tableState = { - entryNum: 0, - streamPos: parser.lexer.stream.pos, - parserBuf1: parser.buf1, - parserBuf2: parser.buf2 - }; - } - - const obj = this.readXRefTable(parser); - - if (!(0, _primitives.isCmd)(obj, "trailer")) { - throw new _util.FormatError("Invalid XRef table: could not find trailer dictionary"); - } - - let dict = parser.getObj(); - - if (!(dict instanceof _primitives.Dict) && dict.dict) { - dict = dict.dict; - } - - if (!(dict instanceof _primitives.Dict)) { - throw new _util.FormatError("Invalid XRef table: could not parse trailer dictionary"); - } - - delete this.tableState; - return dict; - } - - readXRefTable(parser) { - const stream = parser.lexer.stream; - const tableState = this.tableState; - stream.pos = tableState.streamPos; - parser.buf1 = tableState.parserBuf1; - parser.buf2 = tableState.parserBuf2; - let obj; - - while (true) { - if (!("firstEntryNum" in tableState) || !("entryCount" in tableState)) { - if ((0, _primitives.isCmd)(obj = parser.getObj(), "trailer")) { - break; - } - - tableState.firstEntryNum = obj; - tableState.entryCount = parser.getObj(); - } - - let first = tableState.firstEntryNum; - const count = tableState.entryCount; - - if (!Number.isInteger(first) || !Number.isInteger(count)) { - throw new _util.FormatError("Invalid XRef table: wrong types in subsection header"); - } - - for (let i = tableState.entryNum; i < count; i++) { - tableState.streamPos = stream.pos; - tableState.entryNum = i; - tableState.parserBuf1 = parser.buf1; - tableState.parserBuf2 = parser.buf2; - const entry = {}; - entry.offset = parser.getObj(); - entry.gen = parser.getObj(); - const type = parser.getObj(); - - if (type instanceof _primitives.Cmd) { - switch (type.cmd) { - case "f": - entry.free = true; - break; - - case "n": - entry.uncompressed = true; - break; - } - } - - if (!Number.isInteger(entry.offset) || !Number.isInteger(entry.gen) || !(entry.free || entry.uncompressed)) { - throw new _util.FormatError(`Invalid entry in XRef subsection: ${first}, ${count}`); - } - - if (i === 0 && entry.free && first === 1) { - first = 0; - } - - if (!this.entries[i + first]) { - this.entries[i + first] = entry; - } - } - - tableState.entryNum = 0; - tableState.streamPos = stream.pos; - tableState.parserBuf1 = parser.buf1; - tableState.parserBuf2 = parser.buf2; - delete tableState.firstEntryNum; - delete tableState.entryCount; - } - - if (this.entries[0] && !this.entries[0].free) { - throw new _util.FormatError("Invalid XRef table: unexpected first object"); - } - - return obj; - } - - processXRefStream(stream) { - if (!("streamState" in this)) { - const streamParameters = stream.dict; - const byteWidths = streamParameters.get("W"); - let range = streamParameters.get("Index"); - - if (!range) { - range = [0, streamParameters.get("Size")]; - } - - this.streamState = { - entryRanges: range, - byteWidths, - entryNum: 0, - streamPos: stream.pos - }; - } - - this.readXRefStream(stream); - delete this.streamState; - return stream.dict; - } - - readXRefStream(stream) { - const streamState = this.streamState; - stream.pos = streamState.streamPos; - const [typeFieldWidth, offsetFieldWidth, generationFieldWidth] = streamState.byteWidths; - const entryRanges = streamState.entryRanges; - - while (entryRanges.length > 0) { - const [first, n] = entryRanges; - - if (!Number.isInteger(first) || !Number.isInteger(n)) { - throw new _util.FormatError(`Invalid XRef range fields: ${first}, ${n}`); - } - - if (!Number.isInteger(typeFieldWidth) || !Number.isInteger(offsetFieldWidth) || !Number.isInteger(generationFieldWidth)) { - throw new _util.FormatError(`Invalid XRef entry fields length: ${first}, ${n}`); - } - - for (let i = streamState.entryNum; i < n; ++i) { - streamState.entryNum = i; - streamState.streamPos = stream.pos; - let type = 0, - offset = 0, - generation = 0; - - for (let j = 0; j < typeFieldWidth; ++j) { - const typeByte = stream.getByte(); - - if (typeByte === -1) { - throw new _util.FormatError("Invalid XRef byteWidths 'type'."); - } - - type = type << 8 | typeByte; - } - - if (typeFieldWidth === 0) { - type = 1; - } - - for (let j = 0; j < offsetFieldWidth; ++j) { - const offsetByte = stream.getByte(); - - if (offsetByte === -1) { - throw new _util.FormatError("Invalid XRef byteWidths 'offset'."); - } - - offset = offset << 8 | offsetByte; - } - - for (let j = 0; j < generationFieldWidth; ++j) { - const generationByte = stream.getByte(); - - if (generationByte === -1) { - throw new _util.FormatError("Invalid XRef byteWidths 'generation'."); - } - - generation = generation << 8 | generationByte; - } - - const entry = {}; - entry.offset = offset; - entry.gen = generation; - - switch (type) { - case 0: - entry.free = true; - break; - - case 1: - entry.uncompressed = true; - break; - - case 2: - break; - - default: - throw new _util.FormatError(`Invalid XRef entry type: ${type}`); - } - - if (!this.entries[first + i]) { - this.entries[first + i] = entry; - } - } - - streamState.entryNum = 0; - streamState.streamPos = stream.pos; - entryRanges.splice(0, 2); - } - } - - indexObjects() { - const TAB = 0x9, - LF = 0xa, - CR = 0xd, - SPACE = 0x20; - const PERCENT = 0x25, - LT = 0x3c; - - function readToken(data, offset) { - let token = "", - ch = data[offset]; - - while (ch !== LF && ch !== CR && ch !== LT) { - if (++offset >= data.length) { - break; - } - - token += String.fromCharCode(ch); - ch = data[offset]; - } - - return token; - } - - function skipUntil(data, offset, what) { - const length = what.length, - dataLength = data.length; - let skipped = 0; - - while (offset < dataLength) { - let i = 0; - - while (i < length && data[offset + i] === what[i]) { - ++i; - } - - if (i >= length) { - break; - } - - offset++; - skipped++; - } - - return skipped; - } - - const objRegExp = /^(\d+)\s+(\d+)\s+obj\b/; - const endobjRegExp = /\bendobj[\b\s]$/; - const nestedObjRegExp = /\s+(\d+\s+\d+\s+obj[\b\s<])$/; - const CHECK_CONTENT_LENGTH = 25; - const trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]); - const startxrefBytes = new Uint8Array([115, 116, 97, 114, 116, 120, 114, 101, 102]); - const objBytes = new Uint8Array([111, 98, 106]); - const xrefBytes = new Uint8Array([47, 88, 82, 101, 102]); - this.entries.length = 0; - - this._cacheMap.clear(); - - const stream = this.stream; - stream.pos = 0; - const buffer = stream.getBytes(), - length = buffer.length; - let position = stream.start; - const trailers = [], - xrefStms = []; - - while (position < length) { - let ch = buffer[position]; - - if (ch === TAB || ch === LF || ch === CR || ch === SPACE) { - ++position; - continue; - } - - if (ch === PERCENT) { - do { - ++position; - - if (position >= length) { - break; - } - - ch = buffer[position]; - } while (ch !== LF && ch !== CR); - - continue; - } - - const token = readToken(buffer, position); - let m; - - if (token.startsWith("xref") && (token.length === 4 || /\s/.test(token[4]))) { - position += skipUntil(buffer, position, trailerBytes); - trailers.push(position); - position += skipUntil(buffer, position, startxrefBytes); - } else if (m = objRegExp.exec(token)) { - const num = m[1] | 0, - gen = m[2] | 0; - let contentLength, - startPos = position + token.length, - updateEntries = false; - - if (!this.entries[num]) { - updateEntries = true; - } else if (this.entries[num].gen === gen) { - try { - const parser = new _parser.Parser({ - lexer: new _parser.Lexer(stream.makeSubStream(startPos)) - }); - parser.getObj(); - updateEntries = true; - } catch (ex) { - if (ex instanceof _core_utils.ParserEOFException) { - (0, _util.warn)(`indexObjects -- checking object (${token}): "${ex}".`); - } else { - updateEntries = true; - } - } - } - - if (updateEntries) { - this.entries[num] = { - offset: position - stream.start, - gen, - uncompressed: true - }; - } - - while (startPos < buffer.length) { - const endPos = startPos + skipUntil(buffer, startPos, objBytes) + 4; - contentLength = endPos - position; - const checkPos = Math.max(endPos - CHECK_CONTENT_LENGTH, startPos); - const tokenStr = (0, _util.bytesToString)(buffer.subarray(checkPos, endPos)); - - if (endobjRegExp.test(tokenStr)) { - break; - } else { - const objToken = nestedObjRegExp.exec(tokenStr); - - if (objToken && objToken[1]) { - (0, _util.warn)('indexObjects: Found new "obj" inside of another "obj", ' + 'caused by missing "endobj" -- trying to recover.'); - contentLength -= objToken[1].length; - break; - } - } - - startPos = endPos; - } - - const content = buffer.subarray(position, position + contentLength); - const xrefTagOffset = skipUntil(content, 0, xrefBytes); - - if (xrefTagOffset < contentLength && content[xrefTagOffset + 5] < 64) { - xrefStms.push(position - stream.start); - this.xrefstms[position - stream.start] = 1; - } - - position += contentLength; - } else if (token.startsWith("trailer") && (token.length === 7 || /\s/.test(token[7]))) { - trailers.push(position); - position += skipUntil(buffer, position, startxrefBytes); - } else { - position += token.length + 1; - } - } - - for (let i = 0, ii = xrefStms.length; i < ii; ++i) { - this.startXRefQueue.push(xrefStms[i]); - this.readXRef(true); - } - - let trailerDict; - - for (let i = 0, ii = trailers.length; i < ii; ++i) { - stream.pos = trailers[i]; - const parser = new _parser.Parser({ - lexer: new _parser.Lexer(stream), - xref: this, - allowStreams: true, - recoveryMode: true - }); - const obj = parser.getObj(); - - if (!(0, _primitives.isCmd)(obj, "trailer")) { - continue; - } - - const dict = parser.getObj(); - - if (!(dict instanceof _primitives.Dict)) { - continue; - } - - try { - const rootDict = dict.get("Root"); - - if (!(rootDict instanceof _primitives.Dict)) { - continue; - } - - const pagesDict = rootDict.get("Pages"); - - if (!(pagesDict instanceof _primitives.Dict)) { - continue; - } - - const pagesCount = pagesDict.get("Count"); - - if (!Number.isInteger(pagesCount)) { - continue; - } - } catch (ex) { - continue; - } - - if (dict.has("ID")) { - return dict; - } - - trailerDict = dict; - } - - if (trailerDict) { - return trailerDict; - } - - if (this.topDict) { - return this.topDict; - } - - throw new _util.InvalidPDFException("Invalid PDF structure."); - } - - readXRef(recoveryMode = false) { - const stream = this.stream; - const startXRefParsedCache = new Set(); - - try { - while (this.startXRefQueue.length) { - const startXRef = this.startXRefQueue[0]; - - if (startXRefParsedCache.has(startXRef)) { - (0, _util.warn)("readXRef - skipping XRef table since it was already parsed."); - this.startXRefQueue.shift(); - continue; - } - - startXRefParsedCache.add(startXRef); - stream.pos = startXRef + stream.start; - const parser = new _parser.Parser({ - lexer: new _parser.Lexer(stream), - xref: this, - allowStreams: true - }); - let obj = parser.getObj(); - let dict; - - if ((0, _primitives.isCmd)(obj, "xref")) { - dict = this.processXRefTable(parser); - - if (!this.topDict) { - this.topDict = dict; - } - - obj = dict.get("XRefStm"); - - if (Number.isInteger(obj)) { - const pos = obj; - - if (!(pos in this.xrefstms)) { - this.xrefstms[pos] = 1; - this.startXRefQueue.push(pos); - } - } - } else if (Number.isInteger(obj)) { - if (!Number.isInteger(parser.getObj()) || !(0, _primitives.isCmd)(parser.getObj(), "obj") || !((obj = parser.getObj()) instanceof _base_stream.BaseStream)) { - throw new _util.FormatError("Invalid XRef stream"); - } - - dict = this.processXRefStream(obj); - - if (!this.topDict) { - this.topDict = dict; - } - - if (!dict) { - throw new _util.FormatError("Failed to read XRef stream"); - } - } else { - throw new _util.FormatError("Invalid XRef stream header"); - } - - obj = dict.get("Prev"); - - if (Number.isInteger(obj)) { - this.startXRefQueue.push(obj); - } else if (obj instanceof _primitives.Ref) { - this.startXRefQueue.push(obj.num); - } - - this.startXRefQueue.shift(); - } - - return this.topDict; - } catch (e) { - if (e instanceof _core_utils.MissingDataException) { - throw e; - } - - (0, _util.info)("(while reading XRef): " + e); - this.startXRefQueue.shift(); - } - - if (recoveryMode) { - return undefined; - } - - throw new _core_utils.XRefParseException(); - } - - getEntry(i) { - const xrefEntry = this.entries[i]; - - if (xrefEntry && !xrefEntry.free && xrefEntry.offset) { - return xrefEntry; - } - - return null; - } - - fetchIfRef(obj, suppressEncryption = false) { - if (obj instanceof _primitives.Ref) { - return this.fetch(obj, suppressEncryption); - } - - return obj; - } - - fetch(ref, suppressEncryption = false) { - if (!(ref instanceof _primitives.Ref)) { - throw new Error("ref object is not a reference"); - } - - const num = ref.num; - - const cacheEntry = this._cacheMap.get(num); - - if (cacheEntry !== undefined) { - if (cacheEntry instanceof _primitives.Dict && !cacheEntry.objId) { - cacheEntry.objId = ref.toString(); - } - - return cacheEntry; - } - - let xrefEntry = this.getEntry(num); - - if (xrefEntry === null) { - this._cacheMap.set(num, xrefEntry); - - return xrefEntry; - } - - if (this._pendingRefs.has(ref)) { - this._pendingRefs.remove(ref); - - (0, _util.warn)(`Ignoring circular reference: ${ref}.`); - return _primitives.CIRCULAR_REF; - } - - this._pendingRefs.put(ref); - - try { - if (xrefEntry.uncompressed) { - xrefEntry = this.fetchUncompressed(ref, xrefEntry, suppressEncryption); - } else { - xrefEntry = this.fetchCompressed(ref, xrefEntry, suppressEncryption); - } - - this._pendingRefs.remove(ref); - } catch (ex) { - this._pendingRefs.remove(ref); - - throw ex; - } - - if (xrefEntry instanceof _primitives.Dict) { - xrefEntry.objId = ref.toString(); - } else if (xrefEntry instanceof _base_stream.BaseStream) { - xrefEntry.dict.objId = ref.toString(); - } - - return xrefEntry; - } - - fetchUncompressed(ref, xrefEntry, suppressEncryption = false) { - const gen = ref.gen; - let num = ref.num; - - if (xrefEntry.gen !== gen) { - throw new _core_utils.XRefEntryException(`Inconsistent generation in XRef: ${ref}`); - } - - const stream = this.stream.makeSubStream(xrefEntry.offset + this.stream.start); - const parser = new _parser.Parser({ - lexer: new _parser.Lexer(stream), - xref: this, - allowStreams: true - }); - const obj1 = parser.getObj(); - const obj2 = parser.getObj(); - const obj3 = parser.getObj(); - - if (obj1 !== num || obj2 !== gen || !(obj3 instanceof _primitives.Cmd)) { - throw new _core_utils.XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`); - } - - if (obj3.cmd !== "obj") { - if (obj3.cmd.startsWith("obj")) { - num = parseInt(obj3.cmd.substring(3), 10); - - if (!Number.isNaN(num)) { - return num; - } - } - - throw new _core_utils.XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`); - } - - if (this.encrypt && !suppressEncryption) { - xrefEntry = parser.getObj(this.encrypt.createCipherTransform(num, gen)); - } else { - xrefEntry = parser.getObj(); - } - - if (!(xrefEntry instanceof _base_stream.BaseStream)) { - this._cacheMap.set(num, xrefEntry); - } - - return xrefEntry; - } - - fetchCompressed(ref, xrefEntry, suppressEncryption = false) { - const tableOffset = xrefEntry.offset; - const stream = this.fetch(_primitives.Ref.get(tableOffset, 0)); - - if (!(stream instanceof _base_stream.BaseStream)) { - throw new _util.FormatError("bad ObjStm stream"); - } - - const first = stream.dict.get("First"); - const n = stream.dict.get("N"); - - if (!Number.isInteger(first) || !Number.isInteger(n)) { - throw new _util.FormatError("invalid first and n parameters for ObjStm stream"); - } - - let parser = new _parser.Parser({ - lexer: new _parser.Lexer(stream), - xref: this, - allowStreams: true - }); - const nums = new Array(n); - const offsets = new Array(n); - - for (let i = 0; i < n; ++i) { - const num = parser.getObj(); - - if (!Number.isInteger(num)) { - throw new _util.FormatError(`invalid object number in the ObjStm stream: ${num}`); - } - - const offset = parser.getObj(); - - if (!Number.isInteger(offset)) { - throw new _util.FormatError(`invalid object offset in the ObjStm stream: ${offset}`); - } - - nums[i] = num; - offsets[i] = offset; - } - - const start = (stream.start || 0) + first; - const entries = new Array(n); - - for (let i = 0; i < n; ++i) { - const length = i < n - 1 ? offsets[i + 1] - offsets[i] : undefined; - - if (length < 0) { - throw new _util.FormatError("Invalid offset in the ObjStm stream."); - } - - parser = new _parser.Parser({ - lexer: new _parser.Lexer(stream.makeSubStream(start + offsets[i], length, stream.dict)), - xref: this, - allowStreams: true - }); - const obj = parser.getObj(); - entries[i] = obj; - - if (obj instanceof _base_stream.BaseStream) { - continue; - } - - const num = nums[i], - entry = this.entries[num]; - - if (entry && entry.offset === tableOffset && entry.gen === i) { - this._cacheMap.set(num, obj); - } - } - - xrefEntry = entries[xrefEntry.gen]; - - if (xrefEntry === undefined) { - throw new _core_utils.XRefEntryException(`Bad (compressed) XRef entry: ${ref}`); - } - - return xrefEntry; - } - - async fetchIfRefAsync(obj, suppressEncryption) { - if (obj instanceof _primitives.Ref) { - return this.fetchAsync(obj, suppressEncryption); - } - - return obj; - } - - async fetchAsync(ref, suppressEncryption) { - try { - return this.fetch(ref, suppressEncryption); - } catch (ex) { - if (!(ex instanceof _core_utils.MissingDataException)) { - throw ex; - } - - await this.pdfManager.requestRange(ex.begin, ex.end); - return this.fetchAsync(ref, suppressEncryption); - } - } - - getCatalogObj() { - return this.root; - } - -} - -exports.XRef = XRef; - -/***/ }), -/* 99 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.MessageHandler = void 0; - -var _util = __w_pdfjs_require__(2); - -const CallbackKind = { - UNKNOWN: 0, - DATA: 1, - ERROR: 2 -}; -const StreamKind = { - UNKNOWN: 0, - CANCEL: 1, - CANCEL_COMPLETE: 2, - CLOSE: 3, - ENQUEUE: 4, - ERROR: 5, - PULL: 6, - PULL_COMPLETE: 7, - START_COMPLETE: 8 -}; - -function wrapReason(reason) { - if (!(reason instanceof Error || typeof reason === "object" && reason !== null)) { - (0, _util.warn)('wrapReason: Expected "reason" to be a (possibly cloned) Error.'); - return reason; - } - - switch (reason.name) { - case "AbortException": - return new _util.AbortException(reason.message); - - case "MissingPDFException": - return new _util.MissingPDFException(reason.message); - - case "PasswordException": - return new _util.PasswordException(reason.message, reason.code); - - case "UnexpectedResponseException": - return new _util.UnexpectedResponseException(reason.message, reason.status); - - case "UnknownErrorException": - return new _util.UnknownErrorException(reason.message, reason.details); - - default: - return new _util.UnknownErrorException(reason.message, reason.toString()); - } -} - -class MessageHandler { - constructor(sourceName, targetName, comObj) { - this.sourceName = sourceName; - this.targetName = targetName; - this.comObj = comObj; - this.callbackId = 1; - this.streamId = 1; - this.streamSinks = Object.create(null); - this.streamControllers = Object.create(null); - this.callbackCapabilities = Object.create(null); - this.actionHandler = Object.create(null); - - this._onComObjOnMessage = event => { - const data = event.data; - - if (data.targetName !== this.sourceName) { - return; - } - - if (data.stream) { - this._processStreamMessage(data); - - return; - } - - if (data.callback) { - const callbackId = data.callbackId; - const capability = this.callbackCapabilities[callbackId]; - - if (!capability) { - throw new Error(`Cannot resolve callback ${callbackId}`); - } - - delete this.callbackCapabilities[callbackId]; - - if (data.callback === CallbackKind.DATA) { - capability.resolve(data.data); - } else if (data.callback === CallbackKind.ERROR) { - capability.reject(wrapReason(data.reason)); - } else { - throw new Error("Unexpected callback case"); - } - - return; - } - - const action = this.actionHandler[data.action]; - - if (!action) { - throw new Error(`Unknown action from worker: ${data.action}`); - } - - if (data.callbackId) { - const cbSourceName = this.sourceName; - const cbTargetName = data.sourceName; - new Promise(function (resolve) { - resolve(action(data.data)); - }).then(function (result) { - comObj.postMessage({ - sourceName: cbSourceName, - targetName: cbTargetName, - callback: CallbackKind.DATA, - callbackId: data.callbackId, - data: result - }); - }, function (reason) { - comObj.postMessage({ - sourceName: cbSourceName, - targetName: cbTargetName, - callback: CallbackKind.ERROR, - callbackId: data.callbackId, - reason: wrapReason(reason) - }); - }); - return; - } - - if (data.streamId) { - this._createStreamSink(data); - - return; - } - - action(data.data); - }; - - comObj.addEventListener("message", this._onComObjOnMessage); - } - - on(actionName, handler) { - const ah = this.actionHandler; - - if (ah[actionName]) { - throw new Error(`There is already an actionName called "${actionName}"`); - } - - ah[actionName] = handler; - } - - send(actionName, data, transfers) { - this.comObj.postMessage({ - sourceName: this.sourceName, - targetName: this.targetName, - action: actionName, - data - }, transfers); - } - - sendWithPromise(actionName, data, transfers) { - const callbackId = this.callbackId++; - const capability = (0, _util.createPromiseCapability)(); - this.callbackCapabilities[callbackId] = capability; - - try { - this.comObj.postMessage({ - sourceName: this.sourceName, - targetName: this.targetName, - action: actionName, - callbackId, - data - }, transfers); - } catch (ex) { - capability.reject(ex); - } - - return capability.promise; - } - - sendWithStream(actionName, data, queueingStrategy, transfers) { - const streamId = this.streamId++, - sourceName = this.sourceName, - targetName = this.targetName, - comObj = this.comObj; - return new ReadableStream({ - start: controller => { - const startCapability = (0, _util.createPromiseCapability)(); - this.streamControllers[streamId] = { - controller, - startCall: startCapability, - pullCall: null, - cancelCall: null, - isClosed: false - }; - comObj.postMessage({ - sourceName, - targetName, - action: actionName, - streamId, - data, - desiredSize: controller.desiredSize - }, transfers); - return startCapability.promise; - }, - pull: controller => { - const pullCapability = (0, _util.createPromiseCapability)(); - this.streamControllers[streamId].pullCall = pullCapability; - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.PULL, - streamId, - desiredSize: controller.desiredSize - }); - return pullCapability.promise; - }, - cancel: reason => { - (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason"); - const cancelCapability = (0, _util.createPromiseCapability)(); - this.streamControllers[streamId].cancelCall = cancelCapability; - this.streamControllers[streamId].isClosed = true; - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.CANCEL, - streamId, - reason: wrapReason(reason) - }); - return cancelCapability.promise; - } - }, queueingStrategy); - } - - _createStreamSink(data) { - const streamId = data.streamId, - sourceName = this.sourceName, - targetName = data.sourceName, - comObj = this.comObj; - const self = this, - action = this.actionHandler[data.action]; - const streamSink = { - enqueue(chunk, size = 1, transfers) { - if (this.isCancelled) { - return; - } - - const lastDesiredSize = this.desiredSize; - this.desiredSize -= size; - - if (lastDesiredSize > 0 && this.desiredSize <= 0) { - this.sinkCapability = (0, _util.createPromiseCapability)(); - this.ready = this.sinkCapability.promise; - } - - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.ENQUEUE, - streamId, - chunk - }, transfers); - }, - - close() { - if (this.isCancelled) { - return; - } - - this.isCancelled = true; - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.CLOSE, - streamId - }); - delete self.streamSinks[streamId]; - }, - - error(reason) { - (0, _util.assert)(reason instanceof Error, "error must have a valid reason"); - - if (this.isCancelled) { - return; - } - - this.isCancelled = true; - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.ERROR, - streamId, - reason: wrapReason(reason) - }); - }, - - sinkCapability: (0, _util.createPromiseCapability)(), - onPull: null, - onCancel: null, - isCancelled: false, - desiredSize: data.desiredSize, - ready: null - }; - streamSink.sinkCapability.resolve(); - streamSink.ready = streamSink.sinkCapability.promise; - this.streamSinks[streamId] = streamSink; - new Promise(function (resolve) { - resolve(action(data.data, streamSink)); - }).then(function () { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.START_COMPLETE, - streamId, - success: true - }); - }, function (reason) { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.START_COMPLETE, - streamId, - reason: wrapReason(reason) - }); - }); - } - - _processStreamMessage(data) { - const streamId = data.streamId, - sourceName = this.sourceName, - targetName = data.sourceName, - comObj = this.comObj; - const streamController = this.streamControllers[streamId], - streamSink = this.streamSinks[streamId]; - - switch (data.stream) { - case StreamKind.START_COMPLETE: - if (data.success) { - streamController.startCall.resolve(); - } else { - streamController.startCall.reject(wrapReason(data.reason)); - } - - break; - - case StreamKind.PULL_COMPLETE: - if (data.success) { - streamController.pullCall.resolve(); - } else { - streamController.pullCall.reject(wrapReason(data.reason)); - } - - break; - - case StreamKind.PULL: - if (!streamSink) { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.PULL_COMPLETE, - streamId, - success: true - }); - break; - } - - if (streamSink.desiredSize <= 0 && data.desiredSize > 0) { - streamSink.sinkCapability.resolve(); - } - - streamSink.desiredSize = data.desiredSize; - new Promise(function (resolve) { - resolve(streamSink.onPull && streamSink.onPull()); - }).then(function () { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.PULL_COMPLETE, - streamId, - success: true - }); - }, function (reason) { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.PULL_COMPLETE, - streamId, - reason: wrapReason(reason) - }); - }); - break; - - case StreamKind.ENQUEUE: - (0, _util.assert)(streamController, "enqueue should have stream controller"); - - if (streamController.isClosed) { - break; - } - - streamController.controller.enqueue(data.chunk); - break; - - case StreamKind.CLOSE: - (0, _util.assert)(streamController, "close should have stream controller"); - - if (streamController.isClosed) { - break; - } - - streamController.isClosed = true; - streamController.controller.close(); - - this._deleteStreamController(streamController, streamId); - - break; - - case StreamKind.ERROR: - (0, _util.assert)(streamController, "error should have stream controller"); - streamController.controller.error(wrapReason(data.reason)); - - this._deleteStreamController(streamController, streamId); - - break; - - case StreamKind.CANCEL_COMPLETE: - if (data.success) { - streamController.cancelCall.resolve(); - } else { - streamController.cancelCall.reject(wrapReason(data.reason)); - } - - this._deleteStreamController(streamController, streamId); - - break; - - case StreamKind.CANCEL: - if (!streamSink) { - break; - } - - new Promise(function (resolve) { - resolve(streamSink.onCancel && streamSink.onCancel(wrapReason(data.reason))); - }).then(function () { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.CANCEL_COMPLETE, - streamId, - success: true - }); - }, function (reason) { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.CANCEL_COMPLETE, - streamId, - reason: wrapReason(reason) - }); - }); - streamSink.sinkCapability.reject(wrapReason(data.reason)); - streamSink.isCancelled = true; - delete this.streamSinks[streamId]; - break; - - default: - throw new Error("Unexpected stream case"); - } - } - - async _deleteStreamController(streamController, streamId) { - await Promise.allSettled([streamController.startCall && streamController.startCall.promise, streamController.pullCall && streamController.pullCall.promise, streamController.cancelCall && streamController.cancelCall.promise]); - delete this.streamControllers[streamId]; - } - - destroy() { - this.comObj.removeEventListener("message", this._onComObjOnMessage); - } - -} - -exports.MessageHandler = MessageHandler; - -/***/ }), -/* 100 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.PDFWorkerStream = void 0; - -var _util = __w_pdfjs_require__(2); - -class PDFWorkerStream { - constructor(msgHandler) { - this._msgHandler = msgHandler; - this._contentLength = null; - this._fullRequestReader = null; - this._rangeRequestReaders = []; - } - - getFullReader() { - (0, _util.assert)(!this._fullRequestReader, "PDFWorkerStream.getFullReader can only be called once."); - this._fullRequestReader = new PDFWorkerStreamReader(this._msgHandler); - return this._fullRequestReader; - } - - getRangeReader(begin, end) { - const reader = new PDFWorkerStreamRangeReader(begin, end, this._msgHandler); - - this._rangeRequestReaders.push(reader); - - return reader; - } - - cancelAllRequests(reason) { - if (this._fullRequestReader) { - this._fullRequestReader.cancel(reason); - } - - for (const reader of this._rangeRequestReaders.slice(0)) { - reader.cancel(reason); - } - } - -} - -exports.PDFWorkerStream = PDFWorkerStream; - -class PDFWorkerStreamReader { - constructor(msgHandler) { - this._msgHandler = msgHandler; - this.onProgress = null; - this._contentLength = null; - this._isRangeSupported = false; - this._isStreamingSupported = false; - - const readableStream = this._msgHandler.sendWithStream("GetReader"); - - this._reader = readableStream.getReader(); - this._headersReady = this._msgHandler.sendWithPromise("ReaderHeadersReady").then(data => { - this._isStreamingSupported = data.isStreamingSupported; - this._isRangeSupported = data.isRangeSupported; - this._contentLength = data.contentLength; - }); - } - - get headersReady() { - return this._headersReady; - } - - get contentLength() { - return this._contentLength; - } - - get isStreamingSupported() { - return this._isStreamingSupported; - } - - get isRangeSupported() { - return this._isRangeSupported; - } - - async read() { - const { - value, - done - } = await this._reader.read(); - - if (done) { - return { - value: undefined, - done: true - }; - } - - return { - value: value.buffer, - done: false - }; - } - - cancel(reason) { - this._reader.cancel(reason); - } - -} - -class PDFWorkerStreamRangeReader { - constructor(begin, end, msgHandler) { - this._msgHandler = msgHandler; - this.onProgress = null; - - const readableStream = this._msgHandler.sendWithStream("GetRangeReader", { - begin, - end - }); - - this._reader = readableStream.getReader(); - } - - get isStreamingSupported() { - return false; - } - - async read() { - const { - value, - done - } = await this._reader.read(); - - if (done) { - return { - value: undefined, - done: true - }; - } - - return { - value: value.buffer, - done: false - }; - } - - cancel(reason) { - this._reader.cancel(reason); - } - -} - -/***/ }) -/******/ ]); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __w_pdfjs_require__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ // no module.id needed -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ __webpack_modules__[moduleId](module, module.exports, __w_pdfjs_require__); -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/************************************************************************/ -/******/ /* webpack/runtime/define property getters */ -/******/ (() => { -/******/ // define getter functions for harmony exports -/******/ __w_pdfjs_require__.d = (exports, definition) => { -/******/ for(var key in definition) { -/******/ if(__w_pdfjs_require__.o(definition, key) && !__w_pdfjs_require__.o(exports, key)) { -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); -/******/ } -/******/ } -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/hasOwnProperty shorthand */ -/******/ (() => { -/******/ __w_pdfjs_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)); -/******/ })(); -/******/ -/******/ /* webpack/runtime/make namespace object */ -/******/ (() => { -/******/ // define __esModule on exports -/******/ __w_pdfjs_require__.r = (exports) => { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ })(); -/******/ -/************************************************************************/ -var __webpack_exports__ = {}; -// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. -(() => { -var exports = __webpack_exports__; - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -Object.defineProperty(exports, "WorkerMessageHandler", ({ - enumerable: true, - get: function () { - return _worker.WorkerMessageHandler; - } -})); - -var _worker = __w_pdfjs_require__(1); -})(); - -/******/ return __webpack_exports__; -/******/ })() -; -}); - -}); - -/* Copyright 2021 Mozilla Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -(typeof window !== "undefined" - ? window - : {} -).pdfjsWorker = pdf_worker; - -var pdf_worker_entry = { - -}; - -var worker = /*#__PURE__*/Object.freeze(/*#__PURE__*/_mergeNamespaces({ - __proto__: null, - 'default': pdf_worker_entry -}, [pdf_worker_entry])); - -var BetterPDFPlugin = /** @class */ (function (_super) { - __extends(BetterPDFPlugin, _super); - function BetterPDFPlugin() { - return _super !== null && _super.apply(this, arguments) || this; - } - BetterPDFPlugin.prototype.onload = function () { - return __awaiter(this, void 0, void 0, function () { - var _a, _b, _c, _d; - var _this = this; - return __generator(this, function (_e) { - switch (_e.label) { - case 0: - console.log("Better PDF loading..."); - _a = this; - _c = (_b = Object).assign; - _d = [new BetterPdfSettings()]; - return [4 /*yield*/, this.loadData()]; - case 1: - _a.settings = _c.apply(_b, _d.concat([_e.sent()])); - this.addSettingTab(new BetterPdfSettingsTab(this.app, this)); - pdf.GlobalWorkerOptions.workerSrc = worker; - this.registerMarkdownCodeBlockProcessor("pdf", function (src, el, ctx) { return __awaiter(_this, void 0, void 0, function () { - var parameters, filePath, folderPath, arrayBuffer, buffer, document_1, pagesArray, i, _i, _a, pageNumber, page, host, href, offsetX, offsetY, canvas, context, baseViewportWidth, baseScale, viewport, renderContext, error_1; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - parameters = null; - try { - parameters = this.readParameters(src); - } - catch (e) { - el.createEl("h2", { text: "PDF Parameters invalid: " + e.message }); - } - if (!(parameters !== null)) return [3 /*break*/, 10]; - _b.label = 1; - case 1: - _b.trys.push([1, 9, , 10]); - console.log(parameters.url); - if (parameters.url.startsWith("./")) { - filePath = ctx.sourcePath; - folderPath = filePath.substring(0, filePath.lastIndexOf("/")); - parameters.url = folderPath + "/" + parameters.url.substring(2, parameters.url.length); - } - return [4 /*yield*/, this.app.vault.adapter.readBinary(parameters.url)]; - case 2: - arrayBuffer = _b.sent(); - buffer = Buffer.from(arrayBuffer); - return [4 /*yield*/, pdf.getDocument(buffer).promise]; - case 3: - document_1 = _b.sent(); - // page parameter as trigger for whole pdf, 0 = all pages - if (parameters.page.includes(0)) { - pagesArray = []; - for (i = 1; i <= document_1.numPages; i++) { - pagesArray.push(i); - } - parameters.page = pagesArray; - } - _i = 0, _a = parameters.page; - _b.label = 4; - case 4: - if (!(_i < _a.length)) return [3 /*break*/, 8]; - pageNumber = _a[_i]; - return [4 /*yield*/, document_1.getPage(pageNumber)]; - case 5: - page = _b.sent(); - host = el; - // Create hyperlink for Page - if (parameters.link) { - href = el.createEl("a"); - href.href = parameters.url + "#page=" + pageNumber; - href.className = "internal-link"; - host = href; - } - offsetX = Math.floor(parameters.rect[0] * -1 * parameters.scale); - offsetY = Math.floor(parameters.rect[1] * -1 * parameters.scale); - canvas = host.createEl("canvas"); - if (parameters.fit) { - canvas.style.width = "100%"; - } - context = canvas.getContext("2d"); - baseViewportWidth = page.getViewport({ scale: 1.0 }).width; - baseScale = canvas.clientWidth / baseViewportWidth; - viewport = page.getViewport({ - scale: baseScale * parameters.scale, - rotation: parameters.rotation, - offsetX: offsetX, - offsetY: offsetY, - }); - if (parameters.rect[2] < 1) { - canvas.height = viewport.height; - canvas.width = viewport.width; - } - else { - canvas.height = Math.floor(parameters.rect[2] * parameters.scale); - canvas.width = Math.floor(parameters.rect[3] * parameters.scale); - } - renderContext = { - canvasContext: context, - viewport: viewport, - }; - return [4 /*yield*/, page.render(renderContext)]; - case 6: - _b.sent(); - _b.label = 7; - case 7: - _i++; - return [3 /*break*/, 4]; - case 8: return [3 /*break*/, 10]; - case 9: - error_1 = _b.sent(); - el.createEl("h2", { text: error_1 }); - return [3 /*break*/, 10]; - case 10: return [2 /*return*/]; - } - }); - }); }); - return [2 /*return*/]; - } - }); - }); - }; - BetterPDFPlugin.prototype.readParameters = function (jsonString) { - // "url" : [[file.pdf]] is an invalid json since it misses quotation marks in value - if (jsonString.contains("[[") && !jsonString.contains('"[[')) { - jsonString = jsonString.replace("[[", '"[['); - jsonString = jsonString.replace("]]", ']]"'); - } - var parameters = JSON.parse(jsonString); - //Transform internal Link to external - if (parameters.url.startsWith("[[")) { - parameters.url = parameters.url.substr(2, parameters.url.length - 4); - parameters.url = this.app.metadataCache.getFirstLinkpathDest(parameters.url, "").path; - } - if (parameters.link === undefined) { - parameters.link = this.settings.link_by_default; - } - //Convert Range (if present) and Page to Array - if (parameters.range !== undefined) { - parameters.page = Array.from({ length: parameters.range[1] - parameters.range[0] + 1 }, function (_, i) { return parameters.range[0] + i; }); - } - if (typeof parameters.page === "number") { - parameters.page = [parameters.page]; - } - if (parameters.page === undefined) { - parameters.page = [1]; - } - // Flatten ranges - for (var i = 0; i < parameters.page.length; i++) { - if (Array.isArray(parameters.page[i])) { - var range = parameters.page.splice(i, 1)[0]; - for (var j = range[0]; j <= range[1]; j++) { - parameters.page.splice(i, 0, j); - i += 1; - } - } - } - if (parameters.scale === undefined || - parameters.scale < 0.1 || - parameters.scale > 10.0) { - parameters.scale = 1.0; - } - if (parameters.fit === undefined) { - parameters.fit = this.settings.fit_by_default; - } - if (parameters.rotation === undefined) { - parameters.rotation = 0; - } - if (parameters.rect === undefined) { - parameters.rect = [0, 0, 0, 0]; - } - return parameters; - }; - BetterPDFPlugin.prototype.onunload = function () { - console.log("unloading Better PDF plugin..."); - }; - return BetterPDFPlugin; -}(obsidian.Plugin)); - -module.exports = BetterPDFPlugin; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsInNldHRpbmdzLnRzIiwibm9kZV9tb2R1bGVzL3BkZmpzLWRpc3QvYnVpbGQvcGRmLmpzIiwibm9kZV9tb2R1bGVzL3BkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlci5qcyIsIm5vZGVfbW9kdWxlcy9wZGZqcy1kaXN0L2J1aWxkL3BkZi53b3JrZXIuZW50cnkuanMiLCJtYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbn0pIDogZnVuY3Rpb24obywgdikge1xyXG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XHJcbn1cclxuIiwiaW1wb3J0IHsgQXBwLCBQbHVnaW4sIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XG5cbmRlY2xhcmUgY2xhc3MgQmV0dGVyUERGUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcbiAgICBzZXR0aW5nczogQmV0dGVyUGRmU2V0dGluZ3M7XG59XG5cbmV4cG9ydCBjbGFzcyBCZXR0ZXJQZGZTZXR0aW5ncyB7XG4gICAgZml0X2J5X2RlZmF1bHQ6IGJvb2xlYW4gPSB0cnVlO1xuICAgIGxpbmtfYnlfZGVmYXVsdDogYm9vbGVhbiA9IHRydWU7XG59XG5cbmV4cG9ydCBjbGFzcyBCZXR0ZXJQZGZTZXR0aW5nc1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuICAgIHBsdWdpbjogQmV0dGVyUERGUGx1Z2luO1xuXG4gICAgY29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogQmV0dGVyUERGUGx1Z2luKSB7XG4gICAgICAgIHN1cGVyKGFwcCwgcGx1Z2luKTtcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG4gICAgfVxuXG4gICAgZGlzcGxheSgpOiB2b2lkIHtcbiAgICAgICAgbGV0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cbiAgICAgICAgY29udGFpbmVyRWwuZW1wdHkoKTtcblxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiRml0IHBhZ2VzIGJ5IGRlZmF1bHRcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiV2hlbiB0dXJuZWQgb24sIHBhZ2VzIHdpbGwgYmUgc2NhbGVkIHRvIHRoZSB2aWV3IGJ5IGRlZmF1bHQuIENhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSAnZml0JyBwYXJhbWV0ZXJcIilcbiAgICAgICAgICAgIC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5maXRfYnlfZGVmYXVsdClcbiAgICAgICAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZpdF9ieV9kZWZhdWx0ID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIkxpbmsgcGFnZXMgYnkgZGVmYXVsdFwiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJXaGVuIHR1cm5lZCBvbiwgcGFnZXMgd2lsbCBiZSBsaW5rZWQgdG8gdGhlaXIgZG9jdW1lbnQgYnkgZGVmYXVsdC4gQ2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlICdsaW5rJyBwYXJhbWV0ZXJcIilcbiAgICAgICAgICAgIC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5saW5rX2J5X2RlZmF1bHQpXG4gICAgICAgICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5saW5rX2J5X2RlZmF1bHQgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICB9XG59IiwiLyoqXG4gKiBAbGljc3RhcnQgVGhlIGZvbGxvd2luZyBpcyB0aGUgZW50aXJlIGxpY2Vuc2Ugbm90aWNlIGZvciB0aGVcbiAqIEphdmFzY3JpcHQgY29kZSBpbiB0aGlzIHBhZ2VcbiAqXG4gKiBDb3B5cmlnaHQgMjAyMSBNb3ppbGxhIEZvdW5kYXRpb25cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICogQGxpY2VuZCBUaGUgYWJvdmUgaXMgdGhlIGVudGlyZSBsaWNlbnNlIG5vdGljZSBmb3IgdGhlXG4gKiBKYXZhc2NyaXB0IGNvZGUgaW4gdGhpcyBwYWdlXG4gKi9cblxuKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJwZGZqcy1kaXN0L2J1aWxkL3BkZlwiLCBbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJwZGZqcy1kaXN0L2J1aWxkL3BkZlwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJwZGZqcy1kaXN0L2J1aWxkL3BkZlwiXSA9IHJvb3QucGRmanNMaWIgPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAvKioqKioqLyAoKCkgPT4geyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdFwidXNlIHN0cmljdFwiO1xuLyoqKioqKi8gXHR2YXIgX193ZWJwYWNrX21vZHVsZXNfXyA9IChbXG4vKiAwICovLFxuLyogMSAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5TdGF0VGltZXIgPSBleHBvcnRzLlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbiA9IGV4cG9ydHMuUGl4ZWxzUGVySW5jaCA9IGV4cG9ydHMuUGFnZVZpZXdwb3J0ID0gZXhwb3J0cy5QREZEYXRlU3RyaW5nID0gZXhwb3J0cy5MaW5rVGFyZ2V0ID0gZXhwb3J0cy5ET01TdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IGV4cG9ydHMuRE9NU1ZHRmFjdG9yeSA9IGV4cG9ydHMuRE9NQ2FudmFzRmFjdG9yeSA9IGV4cG9ydHMuRE9NQ01hcFJlYWRlckZhY3RvcnkgPSB2b2lkIDA7XG5leHBvcnRzLmFkZExpbmtBdHRyaWJ1dGVzID0gYWRkTGlua0F0dHJpYnV0ZXM7XG5leHBvcnRzLmRlcHJlY2F0ZWQgPSBkZXByZWNhdGVkO1xuZXhwb3J0cy5nZXRGaWxlbmFtZUZyb21VcmwgPSBnZXRGaWxlbmFtZUZyb21Vcmw7XG5leHBvcnRzLmdldFBkZkZpbGVuYW1lRnJvbVVybCA9IGdldFBkZkZpbGVuYW1lRnJvbVVybDtcbmV4cG9ydHMuZ2V0WGZhUGFnZVZpZXdwb3J0ID0gZ2V0WGZhUGFnZVZpZXdwb3J0O1xuZXhwb3J0cy5pc0RhdGFTY2hlbWUgPSBpc0RhdGFTY2hlbWU7XG5leHBvcnRzLmlzUGRmRmlsZSA9IGlzUGRmRmlsZTtcbmV4cG9ydHMuaXNWYWxpZEZldGNoVXJsID0gaXNWYWxpZEZldGNoVXJsO1xuZXhwb3J0cy5sb2FkU2NyaXB0ID0gbG9hZFNjcmlwdDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9iYXNlX2ZhY3RvcnkgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG5jb25zdCBERUZBVUxUX0xJTktfUkVMID0gXCJub29wZW5lciBub3JlZmVycmVyIG5vZm9sbG93XCI7XG5jb25zdCBTVkdfTlMgPSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI7XG5jb25zdCBQaXhlbHNQZXJJbmNoID0ge1xuICBDU1M6IDk2LjAsXG4gIFBERjogNzIuMCxcblxuICBnZXQgUERGX1RPX0NTU19VTklUUygpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJQREZfVE9fQ1NTX1VOSVRTXCIsIHRoaXMuQ1NTIC8gdGhpcy5QREYpO1xuICB9XG5cbn07XG5leHBvcnRzLlBpeGVsc1BlckluY2ggPSBQaXhlbHNQZXJJbmNoO1xuXG5jbGFzcyBET01DYW52YXNGYWN0b3J5IGV4dGVuZHMgX2Jhc2VfZmFjdG9yeS5CYXNlQ2FudmFzRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBvd25lckRvY3VtZW50ID0gZ2xvYmFsVGhpcy5kb2N1bWVudFxuICB9ID0ge30pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2RvY3VtZW50ID0gb3duZXJEb2N1bWVudDtcbiAgfVxuXG4gIF9jcmVhdGVDYW52YXMod2lkdGgsIGhlaWdodCkge1xuICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG5cbiAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIHJldHVybiBjYW52YXM7XG4gIH1cblxufVxuXG5leHBvcnRzLkRPTUNhbnZhc0ZhY3RvcnkgPSBET01DYW52YXNGYWN0b3J5O1xuXG5hc3luYyBmdW5jdGlvbiBmZXRjaERhdGEodXJsLCBhc1R5cGVkQXJyYXkgPSBmYWxzZSkge1xuICBpZiAoaXNWYWxpZEZldGNoVXJsKHVybCwgZG9jdW1lbnQuYmFzZVVSSSkpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzVGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFzVHlwZWRBcnJheSA/IG5ldyBVaW50OEFycmF5KGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpIDogKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGF3YWl0IHJlc3BvbnNlLnRleHQoKSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICByZXF1ZXN0Lm9wZW4oXCJHRVRcIiwgdXJsLCB0cnVlKTtcblxuICAgIGlmIChhc1R5cGVkQXJyYXkpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gXCJhcnJheWJ1ZmZlclwiO1xuICAgIH1cblxuICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMjAwIHx8IHJlcXVlc3Quc3RhdHVzID09PSAwKSB7XG4gICAgICAgIGxldCBkYXRhO1xuXG4gICAgICAgIGlmIChhc1R5cGVkQXJyYXkgJiYgcmVxdWVzdC5yZXNwb25zZSkge1xuICAgICAgICAgIGRhdGEgPSBuZXcgVWludDhBcnJheShyZXF1ZXN0LnJlc3BvbnNlKTtcbiAgICAgICAgfSBlbHNlIGlmICghYXNUeXBlZEFycmF5ICYmIHJlcXVlc3QucmVzcG9uc2VUZXh0KSB7XG4gICAgICAgICAgZGF0YSA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShyZXF1ZXN0LnJlc3BvbnNlVGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChuZXcgRXJyb3IocmVxdWVzdC5zdGF0dXNUZXh0KSk7XG4gICAgfTtcblxuICAgIHJlcXVlc3Quc2VuZChudWxsKTtcbiAgfSk7XG59XG5cbmNsYXNzIERPTUNNYXBSZWFkZXJGYWN0b3J5IGV4dGVuZHMgX2Jhc2VfZmFjdG9yeS5CYXNlQ01hcFJlYWRlckZhY3Rvcnkge1xuICBfZmV0Y2hEYXRhKHVybCwgY29tcHJlc3Npb25UeXBlKSB7XG4gICAgcmV0dXJuIGZldGNoRGF0YSh1cmwsIHRoaXMuaXNDb21wcmVzc2VkKS50aGVuKGRhdGEgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY01hcERhdGE6IGRhdGEsXG4gICAgICAgIGNvbXByZXNzaW9uVHlwZVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuRE9NQ01hcFJlYWRlckZhY3RvcnkgPSBET01DTWFwUmVhZGVyRmFjdG9yeTtcblxuY2xhc3MgRE9NU3RhbmRhcmRGb250RGF0YUZhY3RvcnkgZXh0ZW5kcyBfYmFzZV9mYWN0b3J5LkJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSB7XG4gIF9mZXRjaERhdGEodXJsKSB7XG4gICAgcmV0dXJuIGZldGNoRGF0YSh1cmwsIHRydWUpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5ET01TdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IERPTVN0YW5kYXJkRm9udERhdGFGYWN0b3J5O1xuXG5jbGFzcyBET01TVkdGYWN0b3J5IGV4dGVuZHMgX2Jhc2VfZmFjdG9yeS5CYXNlU1ZHRmFjdG9yeSB7XG4gIF9jcmVhdGVTVkcodHlwZSkge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCB0eXBlKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuRE9NU1ZHRmFjdG9yeSA9IERPTVNWR0ZhY3Rvcnk7XG5cbmNsYXNzIFBhZ2VWaWV3cG9ydCB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICB2aWV3Qm94LFxuICAgIHNjYWxlLFxuICAgIHJvdGF0aW9uLFxuICAgIG9mZnNldFggPSAwLFxuICAgIG9mZnNldFkgPSAwLFxuICAgIGRvbnRGbGlwID0gZmFsc2VcbiAgfSkge1xuICAgIHRoaXMudmlld0JveCA9IHZpZXdCb3g7XG4gICAgdGhpcy5zY2FsZSA9IHNjYWxlO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbjtcbiAgICB0aGlzLm9mZnNldFggPSBvZmZzZXRYO1xuICAgIHRoaXMub2Zmc2V0WSA9IG9mZnNldFk7XG4gICAgY29uc3QgY2VudGVyWCA9ICh2aWV3Qm94WzJdICsgdmlld0JveFswXSkgLyAyO1xuICAgIGNvbnN0IGNlbnRlclkgPSAodmlld0JveFszXSArIHZpZXdCb3hbMV0pIC8gMjtcbiAgICBsZXQgcm90YXRlQSwgcm90YXRlQiwgcm90YXRlQywgcm90YXRlRDtcbiAgICByb3RhdGlvbiAlPSAzNjA7XG5cbiAgICBpZiAocm90YXRpb24gPCAwKSB7XG4gICAgICByb3RhdGlvbiArPSAzNjA7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyb3RhdGlvbikge1xuICAgICAgY2FzZSAxODA6XG4gICAgICAgIHJvdGF0ZUEgPSAtMTtcbiAgICAgICAgcm90YXRlQiA9IDA7XG4gICAgICAgIHJvdGF0ZUMgPSAwO1xuICAgICAgICByb3RhdGVEID0gMTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTA6XG4gICAgICAgIHJvdGF0ZUEgPSAwO1xuICAgICAgICByb3RhdGVCID0gMTtcbiAgICAgICAgcm90YXRlQyA9IDE7XG4gICAgICAgIHJvdGF0ZUQgPSAwO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAyNzA6XG4gICAgICAgIHJvdGF0ZUEgPSAwO1xuICAgICAgICByb3RhdGVCID0gLTE7XG4gICAgICAgIHJvdGF0ZUMgPSAtMTtcbiAgICAgICAgcm90YXRlRCA9IDA7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJvdGF0ZUEgPSAxO1xuICAgICAgICByb3RhdGVCID0gMDtcbiAgICAgICAgcm90YXRlQyA9IDA7XG4gICAgICAgIHJvdGF0ZUQgPSAtMTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhZ2VWaWV3cG9ydDogSW52YWxpZCByb3RhdGlvbiwgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDkwIGRlZ3JlZXMuXCIpO1xuICAgIH1cblxuICAgIGlmIChkb250RmxpcCkge1xuICAgICAgcm90YXRlQyA9IC1yb3RhdGVDO1xuICAgICAgcm90YXRlRCA9IC1yb3RhdGVEO1xuICAgIH1cblxuICAgIGxldCBvZmZzZXRDYW52YXNYLCBvZmZzZXRDYW52YXNZO1xuICAgIGxldCB3aWR0aCwgaGVpZ2h0O1xuXG4gICAgaWYgKHJvdGF0ZUEgPT09IDApIHtcbiAgICAgIG9mZnNldENhbnZhc1ggPSBNYXRoLmFicyhjZW50ZXJZIC0gdmlld0JveFsxXSkgKiBzY2FsZSArIG9mZnNldFg7XG4gICAgICBvZmZzZXRDYW52YXNZID0gTWF0aC5hYnMoY2VudGVyWCAtIHZpZXdCb3hbMF0pICogc2NhbGUgKyBvZmZzZXRZO1xuICAgICAgd2lkdGggPSBNYXRoLmFicyh2aWV3Qm94WzNdIC0gdmlld0JveFsxXSkgKiBzY2FsZTtcbiAgICAgIGhlaWdodCA9IE1hdGguYWJzKHZpZXdCb3hbMl0gLSB2aWV3Qm94WzBdKSAqIHNjYWxlO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXRDYW52YXNYID0gTWF0aC5hYnMoY2VudGVyWCAtIHZpZXdCb3hbMF0pICogc2NhbGUgKyBvZmZzZXRYO1xuICAgICAgb2Zmc2V0Q2FudmFzWSA9IE1hdGguYWJzKGNlbnRlclkgLSB2aWV3Qm94WzFdKSAqIHNjYWxlICsgb2Zmc2V0WTtcbiAgICAgIHdpZHRoID0gTWF0aC5hYnModmlld0JveFsyXSAtIHZpZXdCb3hbMF0pICogc2NhbGU7XG4gICAgICBoZWlnaHQgPSBNYXRoLmFicyh2aWV3Qm94WzNdIC0gdmlld0JveFsxXSkgKiBzY2FsZTtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybSA9IFtyb3RhdGVBICogc2NhbGUsIHJvdGF0ZUIgKiBzY2FsZSwgcm90YXRlQyAqIHNjYWxlLCByb3RhdGVEICogc2NhbGUsIG9mZnNldENhbnZhc1ggLSByb3RhdGVBICogc2NhbGUgKiBjZW50ZXJYIC0gcm90YXRlQyAqIHNjYWxlICogY2VudGVyWSwgb2Zmc2V0Q2FudmFzWSAtIHJvdGF0ZUIgKiBzY2FsZSAqIGNlbnRlclggLSByb3RhdGVEICogc2NhbGUgKiBjZW50ZXJZXTtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBjbG9uZSh7XG4gICAgc2NhbGUgPSB0aGlzLnNjYWxlLFxuICAgIHJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbixcbiAgICBvZmZzZXRYID0gdGhpcy5vZmZzZXRYLFxuICAgIG9mZnNldFkgPSB0aGlzLm9mZnNldFksXG4gICAgZG9udEZsaXAgPSBmYWxzZVxuICB9ID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFBhZ2VWaWV3cG9ydCh7XG4gICAgICB2aWV3Qm94OiB0aGlzLnZpZXdCb3guc2xpY2UoKSxcbiAgICAgIHNjYWxlLFxuICAgICAgcm90YXRpb24sXG4gICAgICBvZmZzZXRYLFxuICAgICAgb2Zmc2V0WSxcbiAgICAgIGRvbnRGbGlwXG4gICAgfSk7XG4gIH1cblxuICBjb252ZXJ0VG9WaWV3cG9ydFBvaW50KHgsIHkpIHtcbiAgICByZXR1cm4gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbeCwgeV0sIHRoaXMudHJhbnNmb3JtKTtcbiAgfVxuXG4gIGNvbnZlcnRUb1ZpZXdwb3J0UmVjdGFuZ2xlKHJlY3QpIHtcbiAgICBjb25zdCB0b3BMZWZ0ID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbcmVjdFswXSwgcmVjdFsxXV0sIHRoaXMudHJhbnNmb3JtKTtcblxuICAgIGNvbnN0IGJvdHRvbVJpZ2h0ID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbcmVjdFsyXSwgcmVjdFszXV0sIHRoaXMudHJhbnNmb3JtKTtcblxuICAgIHJldHVybiBbdG9wTGVmdFswXSwgdG9wTGVmdFsxXSwgYm90dG9tUmlnaHRbMF0sIGJvdHRvbVJpZ2h0WzFdXTtcbiAgfVxuXG4gIGNvbnZlcnRUb1BkZlBvaW50KHgsIHkpIHtcbiAgICByZXR1cm4gX3V0aWwuVXRpbC5hcHBseUludmVyc2VUcmFuc2Zvcm0oW3gsIHldLCB0aGlzLnRyYW5zZm9ybSk7XG4gIH1cblxufVxuXG5leHBvcnRzLlBhZ2VWaWV3cG9ydCA9IFBhZ2VWaWV3cG9ydDtcblxuY2xhc3MgUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uIGV4dGVuZHMgX3V0aWwuQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZywgdHlwZSkge1xuICAgIHN1cGVyKG1zZywgXCJSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb25cIik7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uID0gUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uO1xuY29uc3QgTGlua1RhcmdldCA9IHtcbiAgTk9ORTogMCxcbiAgU0VMRjogMSxcbiAgQkxBTks6IDIsXG4gIFBBUkVOVDogMyxcbiAgVE9QOiA0XG59O1xuZXhwb3J0cy5MaW5rVGFyZ2V0ID0gTGlua1RhcmdldDtcblxuZnVuY3Rpb24gYWRkTGlua0F0dHJpYnV0ZXMobGluaywge1xuICB1cmwsXG4gIHRhcmdldCxcbiAgcmVsLFxuICBlbmFibGVkID0gdHJ1ZVxufSA9IHt9KSB7XG4gICgwLCBfdXRpbC5hc3NlcnQpKHVybCAmJiB0eXBlb2YgdXJsID09PSBcInN0cmluZ1wiLCAnYWRkTGlua0F0dHJpYnV0ZXM6IEEgdmFsaWQgXCJ1cmxcIiBwYXJhbWV0ZXIgbXVzdCBwcm92aWRlZC4nKTtcbiAgY29uc3QgdXJsTnVsbFJlbW92ZWQgPSAoMCwgX3V0aWwucmVtb3ZlTnVsbENoYXJhY3RlcnMpKHVybCk7XG5cbiAgaWYgKGVuYWJsZWQpIHtcbiAgICBsaW5rLmhyZWYgPSBsaW5rLnRpdGxlID0gdXJsTnVsbFJlbW92ZWQ7XG4gIH0gZWxzZSB7XG4gICAgbGluay5ocmVmID0gXCJcIjtcbiAgICBsaW5rLnRpdGxlID0gYERpc2FibGVkOiAke3VybE51bGxSZW1vdmVkfWA7XG5cbiAgICBsaW5rLm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgfVxuXG4gIGxldCB0YXJnZXRTdHIgPSBcIlwiO1xuXG4gIHN3aXRjaCAodGFyZ2V0KSB7XG4gICAgY2FzZSBMaW5rVGFyZ2V0Lk5PTkU6XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgTGlua1RhcmdldC5TRUxGOlxuICAgICAgdGFyZ2V0U3RyID0gXCJfc2VsZlwiO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIExpbmtUYXJnZXQuQkxBTks6XG4gICAgICB0YXJnZXRTdHIgPSBcIl9ibGFua1wiO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIExpbmtUYXJnZXQuUEFSRU5UOlxuICAgICAgdGFyZ2V0U3RyID0gXCJfcGFyZW50XCI7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgTGlua1RhcmdldC5UT1A6XG4gICAgICB0YXJnZXRTdHIgPSBcIl90b3BcIjtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgbGluay50YXJnZXQgPSB0YXJnZXRTdHI7XG4gIGxpbmsucmVsID0gdHlwZW9mIHJlbCA9PT0gXCJzdHJpbmdcIiA/IHJlbCA6IERFRkFVTFRfTElOS19SRUw7XG59XG5cbmZ1bmN0aW9uIGlzRGF0YVNjaGVtZSh1cmwpIHtcbiAgY29uc3QgaWkgPSB1cmwubGVuZ3RoO1xuICBsZXQgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBpaSAmJiB1cmxbaV0udHJpbSgpID09PSBcIlwiKSB7XG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIHVybC5zdWJzdHJpbmcoaSwgaSArIDUpLnRvTG93ZXJDYXNlKCkgPT09IFwiZGF0YTpcIjtcbn1cblxuZnVuY3Rpb24gaXNQZGZGaWxlKGZpbGVuYW1lKSB7XG4gIHJldHVybiB0eXBlb2YgZmlsZW5hbWUgPT09IFwic3RyaW5nXCIgJiYgL1xcLnBkZiQvaS50ZXN0KGZpbGVuYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0RmlsZW5hbWVGcm9tVXJsKHVybCkge1xuICBjb25zdCBhbmNob3IgPSB1cmwuaW5kZXhPZihcIiNcIik7XG4gIGNvbnN0IHF1ZXJ5ID0gdXJsLmluZGV4T2YoXCI/XCIpO1xuICBjb25zdCBlbmQgPSBNYXRoLm1pbihhbmNob3IgPiAwID8gYW5jaG9yIDogdXJsLmxlbmd0aCwgcXVlcnkgPiAwID8gcXVlcnkgOiB1cmwubGVuZ3RoKTtcbiAgcmV0dXJuIHVybC5zdWJzdHJpbmcodXJsLmxhc3RJbmRleE9mKFwiL1wiLCBlbmQpICsgMSwgZW5kKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGRmRmlsZW5hbWVGcm9tVXJsKHVybCwgZGVmYXVsdEZpbGVuYW1lID0gXCJkb2N1bWVudC5wZGZcIikge1xuICBpZiAodHlwZW9mIHVybCAhPT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBkZWZhdWx0RmlsZW5hbWU7XG4gIH1cblxuICBpZiAoaXNEYXRhU2NoZW1lKHVybCkpIHtcbiAgICAoMCwgX3V0aWwud2FybikoJ2dldFBkZkZpbGVuYW1lRnJvbVVybDogaWdub3JlIFwiZGF0YTpcIi1VUkwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuJyk7XG4gICAgcmV0dXJuIGRlZmF1bHRGaWxlbmFtZTtcbiAgfVxuXG4gIGNvbnN0IHJlVVJJID0gL14oPzooPzpbXjpdKzopP1xcL1xcL1teL10rKT8oW14/I10qKShcXD9bXiNdKik/KCMuKik/JC87XG4gIGNvbnN0IHJlRmlsZW5hbWUgPSAvW14vPyM9XStcXC5wZGZcXGIoPyEuKlxcLnBkZlxcYikvaTtcbiAgY29uc3Qgc3BsaXRVUkkgPSByZVVSSS5leGVjKHVybCk7XG4gIGxldCBzdWdnZXN0ZWRGaWxlbmFtZSA9IHJlRmlsZW5hbWUuZXhlYyhzcGxpdFVSSVsxXSkgfHwgcmVGaWxlbmFtZS5leGVjKHNwbGl0VVJJWzJdKSB8fCByZUZpbGVuYW1lLmV4ZWMoc3BsaXRVUklbM10pO1xuXG4gIGlmIChzdWdnZXN0ZWRGaWxlbmFtZSkge1xuICAgIHN1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWVbMF07XG5cbiAgICBpZiAoc3VnZ2VzdGVkRmlsZW5hbWUuaW5jbHVkZXMoXCIlXCIpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzdWdnZXN0ZWRGaWxlbmFtZSA9IHJlRmlsZW5hbWUuZXhlYyhkZWNvZGVVUklDb21wb25lbnQoc3VnZ2VzdGVkRmlsZW5hbWUpKVswXTtcbiAgICAgIH0gY2F0Y2ggKGV4KSB7fVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdWdnZXN0ZWRGaWxlbmFtZSB8fCBkZWZhdWx0RmlsZW5hbWU7XG59XG5cbmNsYXNzIFN0YXRUaW1lciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc3RhcnRlZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy50aW1lcyA9IFtdO1xuICB9XG5cbiAgdGltZShuYW1lKSB7XG4gICAgaWYgKG5hbWUgaW4gdGhpcy5zdGFydGVkKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoYFRpbWVyIGlzIGFscmVhZHkgcnVubmluZyBmb3IgJHtuYW1lfWApO1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRlZFtuYW1lXSA9IERhdGUubm93KCk7XG4gIH1cblxuICB0aW1lRW5kKG5hbWUpIHtcbiAgICBpZiAoIShuYW1lIGluIHRoaXMuc3RhcnRlZCkpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShgVGltZXIgaGFzIG5vdCBiZWVuIHN0YXJ0ZWQgZm9yICR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICB0aGlzLnRpbWVzLnB1c2goe1xuICAgICAgbmFtZSxcbiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0ZWRbbmFtZV0sXG4gICAgICBlbmQ6IERhdGUubm93KClcbiAgICB9KTtcbiAgICBkZWxldGUgdGhpcy5zdGFydGVkW25hbWVdO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgY29uc3Qgb3V0QnVmID0gW107XG4gICAgbGV0IGxvbmdlc3QgPSAwO1xuXG4gICAgZm9yIChjb25zdCB0aW1lIG9mIHRoaXMudGltZXMpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSB0aW1lLm5hbWU7XG5cbiAgICAgIGlmIChuYW1lLmxlbmd0aCA+IGxvbmdlc3QpIHtcbiAgICAgICAgbG9uZ2VzdCA9IG5hbWUubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGltZSBvZiB0aGlzLnRpbWVzKSB7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IHRpbWUuZW5kIC0gdGltZS5zdGFydDtcbiAgICAgIG91dEJ1Zi5wdXNoKGAke3RpbWUubmFtZS5wYWRFbmQobG9uZ2VzdCl9ICR7ZHVyYXRpb259bXNcXG5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0QnVmLmpvaW4oXCJcIik7XG4gIH1cblxufVxuXG5leHBvcnRzLlN0YXRUaW1lciA9IFN0YXRUaW1lcjtcblxuZnVuY3Rpb24gaXNWYWxpZEZldGNoVXJsKHVybCwgYmFzZVVybCkge1xuICB0cnkge1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3RvY29sXG4gICAgfSA9IGJhc2VVcmwgPyBuZXcgVVJMKHVybCwgYmFzZVVybCkgOiBuZXcgVVJMKHVybCk7XG4gICAgcmV0dXJuIHByb3RvY29sID09PSBcImh0dHA6XCIgfHwgcHJvdG9jb2wgPT09IFwiaHR0cHM6XCI7XG4gIH0gY2F0Y2ggKGV4KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxvYWRTY3JpcHQoc3JjLCByZW1vdmVTY3JpcHRFbGVtZW50ID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgIHNjcmlwdC5zcmMgPSBzcmM7XG5cbiAgICBzY3JpcHQub25sb2FkID0gZnVuY3Rpb24gKGV2dCkge1xuICAgICAgaWYgKHJlbW92ZVNjcmlwdEVsZW1lbnQpIHtcbiAgICAgICAgc2NyaXB0LnJlbW92ZSgpO1xuICAgICAgfVxuXG4gICAgICByZXNvbHZlKGV2dCk7XG4gICAgfTtcblxuICAgIHNjcmlwdC5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihgQ2Fubm90IGxvYWQgc2NyaXB0IGF0OiAke3NjcmlwdC5zcmN9YCkpO1xuICAgIH07XG5cbiAgICAoZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkZXByZWNhdGVkKGRldGFpbHMpIHtcbiAgY29uc29sZS5sb2coXCJEZXByZWNhdGVkIEFQSSB1c2FnZTogXCIgKyBkZXRhaWxzKTtcbn1cblxubGV0IHBkZkRhdGVTdHJpbmdSZWdleDtcblxuY2xhc3MgUERGRGF0ZVN0cmluZyB7XG4gIHN0YXRpYyB0b0RhdGVPYmplY3QoaW5wdXQpIHtcbiAgICBpZiAoIWlucHV0IHx8ICEoMCwgX3V0aWwuaXNTdHJpbmcpKGlucHV0KSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCFwZGZEYXRlU3RyaW5nUmVnZXgpIHtcbiAgICAgIHBkZkRhdGVTdHJpbmdSZWdleCA9IG5ldyBSZWdFeHAoXCJeRDpcIiArIFwiKFxcXFxkezR9KVwiICsgXCIoXFxcXGR7Mn0pP1wiICsgXCIoXFxcXGR7Mn0pP1wiICsgXCIoXFxcXGR7Mn0pP1wiICsgXCIoXFxcXGR7Mn0pP1wiICsgXCIoXFxcXGR7Mn0pP1wiICsgXCIoW1p8K3wtXSk/XCIgKyBcIihcXFxcZHsyfSk/XCIgKyBcIic/XCIgKyBcIihcXFxcZHsyfSk/XCIgKyBcIic/XCIpO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoZXMgPSBwZGZEYXRlU3RyaW5nUmVnZXguZXhlYyhpbnB1dCk7XG5cbiAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHllYXIgPSBwYXJzZUludChtYXRjaGVzWzFdLCAxMCk7XG4gICAgbGV0IG1vbnRoID0gcGFyc2VJbnQobWF0Y2hlc1syXSwgMTApO1xuICAgIG1vbnRoID0gbW9udGggPj0gMSAmJiBtb250aCA8PSAxMiA/IG1vbnRoIC0gMSA6IDA7XG4gICAgbGV0IGRheSA9IHBhcnNlSW50KG1hdGNoZXNbM10sIDEwKTtcbiAgICBkYXkgPSBkYXkgPj0gMSAmJiBkYXkgPD0gMzEgPyBkYXkgOiAxO1xuICAgIGxldCBob3VyID0gcGFyc2VJbnQobWF0Y2hlc1s0XSwgMTApO1xuICAgIGhvdXIgPSBob3VyID49IDAgJiYgaG91ciA8PSAyMyA/IGhvdXIgOiAwO1xuICAgIGxldCBtaW51dGUgPSBwYXJzZUludChtYXRjaGVzWzVdLCAxMCk7XG4gICAgbWludXRlID0gbWludXRlID49IDAgJiYgbWludXRlIDw9IDU5ID8gbWludXRlIDogMDtcbiAgICBsZXQgc2Vjb25kID0gcGFyc2VJbnQobWF0Y2hlc1s2XSwgMTApO1xuICAgIHNlY29uZCA9IHNlY29uZCA+PSAwICYmIHNlY29uZCA8PSA1OSA/IHNlY29uZCA6IDA7XG4gICAgY29uc3QgdW5pdmVyc2FsVGltZVJlbGF0aW9uID0gbWF0Y2hlc1s3XSB8fCBcIlpcIjtcbiAgICBsZXQgb2Zmc2V0SG91ciA9IHBhcnNlSW50KG1hdGNoZXNbOF0sIDEwKTtcbiAgICBvZmZzZXRIb3VyID0gb2Zmc2V0SG91ciA+PSAwICYmIG9mZnNldEhvdXIgPD0gMjMgPyBvZmZzZXRIb3VyIDogMDtcbiAgICBsZXQgb2Zmc2V0TWludXRlID0gcGFyc2VJbnQobWF0Y2hlc1s5XSwgMTApIHx8IDA7XG4gICAgb2Zmc2V0TWludXRlID0gb2Zmc2V0TWludXRlID49IDAgJiYgb2Zmc2V0TWludXRlIDw9IDU5ID8gb2Zmc2V0TWludXRlIDogMDtcblxuICAgIGlmICh1bml2ZXJzYWxUaW1lUmVsYXRpb24gPT09IFwiLVwiKSB7XG4gICAgICBob3VyICs9IG9mZnNldEhvdXI7XG4gICAgICBtaW51dGUgKz0gb2Zmc2V0TWludXRlO1xuICAgIH0gZWxzZSBpZiAodW5pdmVyc2FsVGltZVJlbGF0aW9uID09PSBcIitcIikge1xuICAgICAgaG91ciAtPSBvZmZzZXRIb3VyO1xuICAgICAgbWludXRlIC09IG9mZnNldE1pbnV0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQpKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUERGRGF0ZVN0cmluZyA9IFBERkRhdGVTdHJpbmc7XG5cbmZ1bmN0aW9uIGdldFhmYVBhZ2VWaWV3cG9ydCh4ZmFQYWdlLCB7XG4gIHNjYWxlID0gMSxcbiAgcm90YXRpb24gPSAwXG59KSB7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IHhmYVBhZ2UuYXR0cmlidXRlcy5zdHlsZTtcbiAgY29uc3Qgdmlld0JveCA9IFswLCAwLCBwYXJzZUludCh3aWR0aCksIHBhcnNlSW50KGhlaWdodCldO1xuICByZXR1cm4gbmV3IFBhZ2VWaWV3cG9ydCh7XG4gICAgdmlld0JveCxcbiAgICBzY2FsZSxcbiAgICByb3RhdGlvblxuICB9KTtcbn1cblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlZlcmJvc2l0eUxldmVsID0gZXhwb3J0cy5VdGlsID0gZXhwb3J0cy5Vbmtub3duRXJyb3JFeGNlcHRpb24gPSBleHBvcnRzLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiA9IGV4cG9ydHMuVU5TVVBQT1JURURfRkVBVFVSRVMgPSBleHBvcnRzLlRleHRSZW5kZXJpbmdNb2RlID0gZXhwb3J0cy5TdHJlYW1UeXBlID0gZXhwb3J0cy5SZW5kZXJpbmdJbnRlbnRGbGFnID0gZXhwb3J0cy5QZXJtaXNzaW9uRmxhZyA9IGV4cG9ydHMuUGFzc3dvcmRSZXNwb25zZXMgPSBleHBvcnRzLlBhc3N3b3JkRXhjZXB0aW9uID0gZXhwb3J0cy5QYWdlQWN0aW9uRXZlbnRUeXBlID0gZXhwb3J0cy5PUFMgPSBleHBvcnRzLk1pc3NpbmdQREZFeGNlcHRpb24gPSBleHBvcnRzLklzTGl0dGxlRW5kaWFuQ2FjaGVkID0gZXhwb3J0cy5Jc0V2YWxTdXBwb3J0ZWRDYWNoZWQgPSBleHBvcnRzLkludmFsaWRQREZFeGNlcHRpb24gPSBleHBvcnRzLkltYWdlS2luZCA9IGV4cG9ydHMuSURFTlRJVFlfTUFUUklYID0gZXhwb3J0cy5Gb3JtYXRFcnJvciA9IGV4cG9ydHMuRm9udFR5cGUgPSBleHBvcnRzLkZPTlRfSURFTlRJVFlfTUFUUklYID0gZXhwb3J0cy5Eb2N1bWVudEFjdGlvbkV2ZW50VHlwZSA9IGV4cG9ydHMuQ01hcENvbXByZXNzaW9uVHlwZSA9IGV4cG9ydHMuQmFzZUV4Y2VwdGlvbiA9IGV4cG9ydHMuQW5ub3RhdGlvblR5cGUgPSBleHBvcnRzLkFubm90YXRpb25TdGF0ZU1vZGVsVHlwZSA9IGV4cG9ydHMuQW5ub3RhdGlvblJldmlld1N0YXRlID0gZXhwb3J0cy5Bbm5vdGF0aW9uUmVwbHlUeXBlID0gZXhwb3J0cy5Bbm5vdGF0aW9uTW9kZSA9IGV4cG9ydHMuQW5ub3RhdGlvbk1hcmtlZFN0YXRlID0gZXhwb3J0cy5Bbm5vdGF0aW9uRmxhZyA9IGV4cG9ydHMuQW5ub3RhdGlvbkZpZWxkRmxhZyA9IGV4cG9ydHMuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZSA9IGV4cG9ydHMuQW5ub3RhdGlvbkFjdGlvbkV2ZW50VHlwZSA9IGV4cG9ydHMuQWJvcnRFeGNlcHRpb24gPSB2b2lkIDA7XG5leHBvcnRzLmFycmF5Qnl0ZUxlbmd0aCA9IGFycmF5Qnl0ZUxlbmd0aDtcbmV4cG9ydHMuYXJyYXlzVG9CeXRlcyA9IGFycmF5c1RvQnl0ZXM7XG5leHBvcnRzLmFzc2VydCA9IGFzc2VydDtcbmV4cG9ydHMuYnl0ZXNUb1N0cmluZyA9IGJ5dGVzVG9TdHJpbmc7XG5leHBvcnRzLmNyZWF0ZU9iamVjdFVSTCA9IGNyZWF0ZU9iamVjdFVSTDtcbmV4cG9ydHMuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkgPSBjcmVhdGVQcm9taXNlQ2FwYWJpbGl0eTtcbmV4cG9ydHMuY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCA9IGNyZWF0ZVZhbGlkQWJzb2x1dGVVcmw7XG5leHBvcnRzLmVzY2FwZVN0cmluZyA9IGVzY2FwZVN0cmluZztcbmV4cG9ydHMuZ2V0TW9kaWZpY2F0aW9uRGF0ZSA9IGdldE1vZGlmaWNhdGlvbkRhdGU7XG5leHBvcnRzLmdldFZlcmJvc2l0eUxldmVsID0gZ2V0VmVyYm9zaXR5TGV2ZWw7XG5leHBvcnRzLmluZm8gPSBpbmZvO1xuZXhwb3J0cy5pc0FycmF5QnVmZmVyID0gaXNBcnJheUJ1ZmZlcjtcbmV4cG9ydHMuaXNBcnJheUVxdWFsID0gaXNBcnJheUVxdWFsO1xuZXhwb3J0cy5pc0FzY2lpID0gaXNBc2NpaTtcbmV4cG9ydHMuaXNCb29sID0gaXNCb29sO1xuZXhwb3J0cy5pc051bSA9IGlzTnVtO1xuZXhwb3J0cy5pc1NhbWVPcmlnaW4gPSBpc1NhbWVPcmlnaW47XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5leHBvcnRzLm9iamVjdEZyb21NYXAgPSBvYmplY3RGcm9tTWFwO1xuZXhwb3J0cy5vYmplY3RTaXplID0gb2JqZWN0U2l6ZTtcbmV4cG9ydHMucmVtb3ZlTnVsbENoYXJhY3RlcnMgPSByZW1vdmVOdWxsQ2hhcmFjdGVycztcbmV4cG9ydHMuc2V0VmVyYm9zaXR5TGV2ZWwgPSBzZXRWZXJib3NpdHlMZXZlbDtcbmV4cG9ydHMuc2hhZG93ID0gc2hhZG93O1xuZXhwb3J0cy5zdHJpbmczMiA9IHN0cmluZzMyO1xuZXhwb3J0cy5zdHJpbmdUb0J5dGVzID0gc3RyaW5nVG9CeXRlcztcbmV4cG9ydHMuc3RyaW5nVG9QREZTdHJpbmcgPSBzdHJpbmdUb1BERlN0cmluZztcbmV4cG9ydHMuc3RyaW5nVG9VVEYxNkJFU3RyaW5nID0gc3RyaW5nVG9VVEYxNkJFU3RyaW5nO1xuZXhwb3J0cy5zdHJpbmdUb1VURjhTdHJpbmcgPSBzdHJpbmdUb1VURjhTdHJpbmc7XG5leHBvcnRzLnVucmVhY2hhYmxlID0gdW5yZWFjaGFibGU7XG5leHBvcnRzLnV0ZjhTdHJpbmdUb1N0cmluZyA9IHV0ZjhTdHJpbmdUb1N0cmluZztcbmV4cG9ydHMud2FybiA9IHdhcm47XG5cbl9fd19wZGZqc19yZXF1aXJlX18oMyk7XG5cbmNvbnN0IElERU5USVRZX01BVFJJWCA9IFsxLCAwLCAwLCAxLCAwLCAwXTtcbmV4cG9ydHMuSURFTlRJVFlfTUFUUklYID0gSURFTlRJVFlfTUFUUklYO1xuY29uc3QgRk9OVF9JREVOVElUWV9NQVRSSVggPSBbMC4wMDEsIDAsIDAsIDAuMDAxLCAwLCAwXTtcbmV4cG9ydHMuRk9OVF9JREVOVElUWV9NQVRSSVggPSBGT05UX0lERU5USVRZX01BVFJJWDtcbmNvbnN0IFJlbmRlcmluZ0ludGVudEZsYWcgPSB7XG4gIEFOWTogMHgwMSxcbiAgRElTUExBWTogMHgwMixcbiAgUFJJTlQ6IDB4MDQsXG4gIEFOTk9UQVRJT05TX0ZPUk1TOiAweDEwLFxuICBBTk5PVEFUSU9OU19TVE9SQUdFOiAweDIwLFxuICBBTk5PVEFUSU9OU19ESVNBQkxFOiAweDQwLFxuICBPUExJU1Q6IDB4MTAwXG59O1xuZXhwb3J0cy5SZW5kZXJpbmdJbnRlbnRGbGFnID0gUmVuZGVyaW5nSW50ZW50RmxhZztcbmNvbnN0IEFubm90YXRpb25Nb2RlID0ge1xuICBESVNBQkxFOiAwLFxuICBFTkFCTEU6IDEsXG4gIEVOQUJMRV9GT1JNUzogMixcbiAgRU5BQkxFX1NUT1JBR0U6IDNcbn07XG5leHBvcnRzLkFubm90YXRpb25Nb2RlID0gQW5ub3RhdGlvbk1vZGU7XG5jb25zdCBQZXJtaXNzaW9uRmxhZyA9IHtcbiAgUFJJTlQ6IDB4MDQsXG4gIE1PRElGWV9DT05URU5UUzogMHgwOCxcbiAgQ09QWTogMHgxMCxcbiAgTU9ESUZZX0FOTk9UQVRJT05TOiAweDIwLFxuICBGSUxMX0lOVEVSQUNUSVZFX0ZPUk1TOiAweDEwMCxcbiAgQ09QWV9GT1JfQUNDRVNTSUJJTElUWTogMHgyMDAsXG4gIEFTU0VNQkxFOiAweDQwMCxcbiAgUFJJTlRfSElHSF9RVUFMSVRZOiAweDgwMFxufTtcbmV4cG9ydHMuUGVybWlzc2lvbkZsYWcgPSBQZXJtaXNzaW9uRmxhZztcbmNvbnN0IFRleHRSZW5kZXJpbmdNb2RlID0ge1xuICBGSUxMOiAwLFxuICBTVFJPS0U6IDEsXG4gIEZJTExfU1RST0tFOiAyLFxuICBJTlZJU0lCTEU6IDMsXG4gIEZJTExfQUREX1RPX1BBVEg6IDQsXG4gIFNUUk9LRV9BRERfVE9fUEFUSDogNSxcbiAgRklMTF9TVFJPS0VfQUREX1RPX1BBVEg6IDYsXG4gIEFERF9UT19QQVRIOiA3LFxuICBGSUxMX1NUUk9LRV9NQVNLOiAzLFxuICBBRERfVE9fUEFUSF9GTEFHOiA0XG59O1xuZXhwb3J0cy5UZXh0UmVuZGVyaW5nTW9kZSA9IFRleHRSZW5kZXJpbmdNb2RlO1xuY29uc3QgSW1hZ2VLaW5kID0ge1xuICBHUkFZU0NBTEVfMUJQUDogMSxcbiAgUkdCXzI0QlBQOiAyLFxuICBSR0JBXzMyQlBQOiAzXG59O1xuZXhwb3J0cy5JbWFnZUtpbmQgPSBJbWFnZUtpbmQ7XG5jb25zdCBBbm5vdGF0aW9uVHlwZSA9IHtcbiAgVEVYVDogMSxcbiAgTElOSzogMixcbiAgRlJFRVRFWFQ6IDMsXG4gIExJTkU6IDQsXG4gIFNRVUFSRTogNSxcbiAgQ0lSQ0xFOiA2LFxuICBQT0xZR09OOiA3LFxuICBQT0xZTElORTogOCxcbiAgSElHSExJR0hUOiA5LFxuICBVTkRFUkxJTkU6IDEwLFxuICBTUVVJR0dMWTogMTEsXG4gIFNUUklLRU9VVDogMTIsXG4gIFNUQU1QOiAxMyxcbiAgQ0FSRVQ6IDE0LFxuICBJTks6IDE1LFxuICBQT1BVUDogMTYsXG4gIEZJTEVBVFRBQ0hNRU5UOiAxNyxcbiAgU09VTkQ6IDE4LFxuICBNT1ZJRTogMTksXG4gIFdJREdFVDogMjAsXG4gIFNDUkVFTjogMjEsXG4gIFBSSU5URVJNQVJLOiAyMixcbiAgVFJBUE5FVDogMjMsXG4gIFdBVEVSTUFSSzogMjQsXG4gIFRIUkVFRDogMjUsXG4gIFJFREFDVDogMjZcbn07XG5leHBvcnRzLkFubm90YXRpb25UeXBlID0gQW5ub3RhdGlvblR5cGU7XG5jb25zdCBBbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGUgPSB7XG4gIE1BUktFRDogXCJNYXJrZWRcIixcbiAgUkVWSUVXOiBcIlJldmlld1wiXG59O1xuZXhwb3J0cy5Bbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGUgPSBBbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGU7XG5jb25zdCBBbm5vdGF0aW9uTWFya2VkU3RhdGUgPSB7XG4gIE1BUktFRDogXCJNYXJrZWRcIixcbiAgVU5NQVJLRUQ6IFwiVW5tYXJrZWRcIlxufTtcbmV4cG9ydHMuQW5ub3RhdGlvbk1hcmtlZFN0YXRlID0gQW5ub3RhdGlvbk1hcmtlZFN0YXRlO1xuY29uc3QgQW5ub3RhdGlvblJldmlld1N0YXRlID0ge1xuICBBQ0NFUFRFRDogXCJBY2NlcHRlZFwiLFxuICBSRUpFQ1RFRDogXCJSZWplY3RlZFwiLFxuICBDQU5DRUxMRUQ6IFwiQ2FuY2VsbGVkXCIsXG4gIENPTVBMRVRFRDogXCJDb21wbGV0ZWRcIixcbiAgTk9ORTogXCJOb25lXCJcbn07XG5leHBvcnRzLkFubm90YXRpb25SZXZpZXdTdGF0ZSA9IEFubm90YXRpb25SZXZpZXdTdGF0ZTtcbmNvbnN0IEFubm90YXRpb25SZXBseVR5cGUgPSB7XG4gIEdST1VQOiBcIkdyb3VwXCIsXG4gIFJFUExZOiBcIlJcIlxufTtcbmV4cG9ydHMuQW5ub3RhdGlvblJlcGx5VHlwZSA9IEFubm90YXRpb25SZXBseVR5cGU7XG5jb25zdCBBbm5vdGF0aW9uRmxhZyA9IHtcbiAgSU5WSVNJQkxFOiAweDAxLFxuICBISURERU46IDB4MDIsXG4gIFBSSU5UOiAweDA0LFxuICBOT1pPT006IDB4MDgsXG4gIE5PUk9UQVRFOiAweDEwLFxuICBOT1ZJRVc6IDB4MjAsXG4gIFJFQURPTkxZOiAweDQwLFxuICBMT0NLRUQ6IDB4ODAsXG4gIFRPR0dMRU5PVklFVzogMHgxMDAsXG4gIExPQ0tFRENPTlRFTlRTOiAweDIwMFxufTtcbmV4cG9ydHMuQW5ub3RhdGlvbkZsYWcgPSBBbm5vdGF0aW9uRmxhZztcbmNvbnN0IEFubm90YXRpb25GaWVsZEZsYWcgPSB7XG4gIFJFQURPTkxZOiAweDAwMDAwMDEsXG4gIFJFUVVJUkVEOiAweDAwMDAwMDIsXG4gIE5PRVhQT1JUOiAweDAwMDAwMDQsXG4gIE1VTFRJTElORTogMHgwMDAxMDAwLFxuICBQQVNTV09SRDogMHgwMDAyMDAwLFxuICBOT1RPR0dMRVRPT0ZGOiAweDAwMDQwMDAsXG4gIFJBRElPOiAweDAwMDgwMDAsXG4gIFBVU0hCVVRUT046IDB4MDAxMDAwMCxcbiAgQ09NQk86IDB4MDAyMDAwMCxcbiAgRURJVDogMHgwMDQwMDAwLFxuICBTT1JUOiAweDAwODAwMDAsXG4gIEZJTEVTRUxFQ1Q6IDB4MDEwMDAwMCxcbiAgTVVMVElTRUxFQ1Q6IDB4MDIwMDAwMCxcbiAgRE9OT1RTUEVMTENIRUNLOiAweDA0MDAwMDAsXG4gIERPTk9UU0NST0xMOiAweDA4MDAwMDAsXG4gIENPTUI6IDB4MTAwMDAwMCxcbiAgUklDSFRFWFQ6IDB4MjAwMDAwMCxcbiAgUkFESU9TSU5VTklTT046IDB4MjAwMDAwMCxcbiAgQ09NTUlUT05TRUxDSEFOR0U6IDB4NDAwMDAwMFxufTtcbmV4cG9ydHMuQW5ub3RhdGlvbkZpZWxkRmxhZyA9IEFubm90YXRpb25GaWVsZEZsYWc7XG5jb25zdCBBbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlID0ge1xuICBTT0xJRDogMSxcbiAgREFTSEVEOiAyLFxuICBCRVZFTEVEOiAzLFxuICBJTlNFVDogNCxcbiAgVU5ERVJMSU5FOiA1XG59O1xuZXhwb3J0cy5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlID0gQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZTtcbmNvbnN0IEFubm90YXRpb25BY3Rpb25FdmVudFR5cGUgPSB7XG4gIEU6IFwiTW91c2UgRW50ZXJcIixcbiAgWDogXCJNb3VzZSBFeGl0XCIsXG4gIEQ6IFwiTW91c2UgRG93blwiLFxuICBVOiBcIk1vdXNlIFVwXCIsXG4gIEZvOiBcIkZvY3VzXCIsXG4gIEJsOiBcIkJsdXJcIixcbiAgUE86IFwiUGFnZU9wZW5cIixcbiAgUEM6IFwiUGFnZUNsb3NlXCIsXG4gIFBWOiBcIlBhZ2VWaXNpYmxlXCIsXG4gIFBJOiBcIlBhZ2VJbnZpc2libGVcIixcbiAgSzogXCJLZXlzdHJva2VcIixcbiAgRjogXCJGb3JtYXRcIixcbiAgVjogXCJWYWxpZGF0ZVwiLFxuICBDOiBcIkNhbGN1bGF0ZVwiXG59O1xuZXhwb3J0cy5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlID0gQW5ub3RhdGlvbkFjdGlvbkV2ZW50VHlwZTtcbmNvbnN0IERvY3VtZW50QWN0aW9uRXZlbnRUeXBlID0ge1xuICBXQzogXCJXaWxsQ2xvc2VcIixcbiAgV1M6IFwiV2lsbFNhdmVcIixcbiAgRFM6IFwiRGlkU2F2ZVwiLFxuICBXUDogXCJXaWxsUHJpbnRcIixcbiAgRFA6IFwiRGlkUHJpbnRcIlxufTtcbmV4cG9ydHMuRG9jdW1lbnRBY3Rpb25FdmVudFR5cGUgPSBEb2N1bWVudEFjdGlvbkV2ZW50VHlwZTtcbmNvbnN0IFBhZ2VBY3Rpb25FdmVudFR5cGUgPSB7XG4gIE86IFwiUGFnZU9wZW5cIixcbiAgQzogXCJQYWdlQ2xvc2VcIlxufTtcbmV4cG9ydHMuUGFnZUFjdGlvbkV2ZW50VHlwZSA9IFBhZ2VBY3Rpb25FdmVudFR5cGU7XG5jb25zdCBTdHJlYW1UeXBlID0ge1xuICBVTktOT1dOOiBcIlVOS05PV05cIixcbiAgRkxBVEU6IFwiRkxBVEVcIixcbiAgTFpXOiBcIkxaV1wiLFxuICBEQ1Q6IFwiRENUXCIsXG4gIEpQWDogXCJKUFhcIixcbiAgSkJJRzogXCJKQklHXCIsXG4gIEE4NTogXCJBODVcIixcbiAgQUhYOiBcIkFIWFwiLFxuICBDQ0Y6IFwiQ0NGXCIsXG4gIFJMWDogXCJSTFhcIlxufTtcbmV4cG9ydHMuU3RyZWFtVHlwZSA9IFN0cmVhbVR5cGU7XG5jb25zdCBGb250VHlwZSA9IHtcbiAgVU5LTk9XTjogXCJVTktOT1dOXCIsXG4gIFRZUEUxOiBcIlRZUEUxXCIsXG4gIFRZUEUxU1RBTkRBUkQ6IFwiVFlQRTFTVEFOREFSRFwiLFxuICBUWVBFMUM6IFwiVFlQRTFDXCIsXG4gIENJREZPTlRUWVBFMDogXCJDSURGT05UVFlQRTBcIixcbiAgQ0lERk9OVFRZUEUwQzogXCJDSURGT05UVFlQRTBDXCIsXG4gIFRSVUVUWVBFOiBcIlRSVUVUWVBFXCIsXG4gIENJREZPTlRUWVBFMjogXCJDSURGT05UVFlQRTJcIixcbiAgVFlQRTM6IFwiVFlQRTNcIixcbiAgT1BFTlRZUEU6IFwiT1BFTlRZUEVcIixcbiAgVFlQRTA6IFwiVFlQRTBcIixcbiAgTU1UWVBFMTogXCJNTVRZUEUxXCJcbn07XG5leHBvcnRzLkZvbnRUeXBlID0gRm9udFR5cGU7XG5jb25zdCBWZXJib3NpdHlMZXZlbCA9IHtcbiAgRVJST1JTOiAwLFxuICBXQVJOSU5HUzogMSxcbiAgSU5GT1M6IDVcbn07XG5leHBvcnRzLlZlcmJvc2l0eUxldmVsID0gVmVyYm9zaXR5TGV2ZWw7XG5jb25zdCBDTWFwQ29tcHJlc3Npb25UeXBlID0ge1xuICBOT05FOiAwLFxuICBCSU5BUlk6IDEsXG4gIFNUUkVBTTogMlxufTtcbmV4cG9ydHMuQ01hcENvbXByZXNzaW9uVHlwZSA9IENNYXBDb21wcmVzc2lvblR5cGU7XG5jb25zdCBPUFMgPSB7XG4gIGRlcGVuZGVuY3k6IDEsXG4gIHNldExpbmVXaWR0aDogMixcbiAgc2V0TGluZUNhcDogMyxcbiAgc2V0TGluZUpvaW46IDQsXG4gIHNldE1pdGVyTGltaXQ6IDUsXG4gIHNldERhc2g6IDYsXG4gIHNldFJlbmRlcmluZ0ludGVudDogNyxcbiAgc2V0RmxhdG5lc3M6IDgsXG4gIHNldEdTdGF0ZTogOSxcbiAgc2F2ZTogMTAsXG4gIHJlc3RvcmU6IDExLFxuICB0cmFuc2Zvcm06IDEyLFxuICBtb3ZlVG86IDEzLFxuICBsaW5lVG86IDE0LFxuICBjdXJ2ZVRvOiAxNSxcbiAgY3VydmVUbzI6IDE2LFxuICBjdXJ2ZVRvMzogMTcsXG4gIGNsb3NlUGF0aDogMTgsXG4gIHJlY3RhbmdsZTogMTksXG4gIHN0cm9rZTogMjAsXG4gIGNsb3NlU3Ryb2tlOiAyMSxcbiAgZmlsbDogMjIsXG4gIGVvRmlsbDogMjMsXG4gIGZpbGxTdHJva2U6IDI0LFxuICBlb0ZpbGxTdHJva2U6IDI1LFxuICBjbG9zZUZpbGxTdHJva2U6IDI2LFxuICBjbG9zZUVPRmlsbFN0cm9rZTogMjcsXG4gIGVuZFBhdGg6IDI4LFxuICBjbGlwOiAyOSxcbiAgZW9DbGlwOiAzMCxcbiAgYmVnaW5UZXh0OiAzMSxcbiAgZW5kVGV4dDogMzIsXG4gIHNldENoYXJTcGFjaW5nOiAzMyxcbiAgc2V0V29yZFNwYWNpbmc6IDM0LFxuICBzZXRIU2NhbGU6IDM1LFxuICBzZXRMZWFkaW5nOiAzNixcbiAgc2V0Rm9udDogMzcsXG4gIHNldFRleHRSZW5kZXJpbmdNb2RlOiAzOCxcbiAgc2V0VGV4dFJpc2U6IDM5LFxuICBtb3ZlVGV4dDogNDAsXG4gIHNldExlYWRpbmdNb3ZlVGV4dDogNDEsXG4gIHNldFRleHRNYXRyaXg6IDQyLFxuICBuZXh0TGluZTogNDMsXG4gIHNob3dUZXh0OiA0NCxcbiAgc2hvd1NwYWNlZFRleHQ6IDQ1LFxuICBuZXh0TGluZVNob3dUZXh0OiA0NixcbiAgbmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6IDQ3LFxuICBzZXRDaGFyV2lkdGg6IDQ4LFxuICBzZXRDaGFyV2lkdGhBbmRCb3VuZHM6IDQ5LFxuICBzZXRTdHJva2VDb2xvclNwYWNlOiA1MCxcbiAgc2V0RmlsbENvbG9yU3BhY2U6IDUxLFxuICBzZXRTdHJva2VDb2xvcjogNTIsXG4gIHNldFN0cm9rZUNvbG9yTjogNTMsXG4gIHNldEZpbGxDb2xvcjogNTQsXG4gIHNldEZpbGxDb2xvck46IDU1LFxuICBzZXRTdHJva2VHcmF5OiA1NixcbiAgc2V0RmlsbEdyYXk6IDU3LFxuICBzZXRTdHJva2VSR0JDb2xvcjogNTgsXG4gIHNldEZpbGxSR0JDb2xvcjogNTksXG4gIHNldFN0cm9rZUNNWUtDb2xvcjogNjAsXG4gIHNldEZpbGxDTVlLQ29sb3I6IDYxLFxuICBzaGFkaW5nRmlsbDogNjIsXG4gIGJlZ2luSW5saW5lSW1hZ2U6IDYzLFxuICBiZWdpbkltYWdlRGF0YTogNjQsXG4gIGVuZElubGluZUltYWdlOiA2NSxcbiAgcGFpbnRYT2JqZWN0OiA2NixcbiAgbWFya1BvaW50OiA2NyxcbiAgbWFya1BvaW50UHJvcHM6IDY4LFxuICBiZWdpbk1hcmtlZENvbnRlbnQ6IDY5LFxuICBiZWdpbk1hcmtlZENvbnRlbnRQcm9wczogNzAsXG4gIGVuZE1hcmtlZENvbnRlbnQ6IDcxLFxuICBiZWdpbkNvbXBhdDogNzIsXG4gIGVuZENvbXBhdDogNzMsXG4gIHBhaW50Rm9ybVhPYmplY3RCZWdpbjogNzQsXG4gIHBhaW50Rm9ybVhPYmplY3RFbmQ6IDc1LFxuICBiZWdpbkdyb3VwOiA3NixcbiAgZW5kR3JvdXA6IDc3LFxuICBiZWdpbkFubm90YXRpb25zOiA3OCxcbiAgZW5kQW5ub3RhdGlvbnM6IDc5LFxuICBiZWdpbkFubm90YXRpb246IDgwLFxuICBlbmRBbm5vdGF0aW9uOiA4MSxcbiAgcGFpbnRKcGVnWE9iamVjdDogODIsXG4gIHBhaW50SW1hZ2VNYXNrWE9iamVjdDogODMsXG4gIHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwOiA4NCxcbiAgcGFpbnRJbWFnZVhPYmplY3Q6IDg1LFxuICBwYWludElubGluZUltYWdlWE9iamVjdDogODYsXG4gIHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6IDg3LFxuICBwYWludEltYWdlWE9iamVjdFJlcGVhdDogODgsXG4gIHBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdDogODksXG4gIHBhaW50U29saWRDb2xvckltYWdlTWFzazogOTAsXG4gIGNvbnN0cnVjdFBhdGg6IDkxXG59O1xuZXhwb3J0cy5PUFMgPSBPUFM7XG5jb25zdCBVTlNVUFBPUlRFRF9GRUFUVVJFUyA9IHtcbiAgdW5rbm93bjogXCJ1bmtub3duXCIsXG4gIGZvcm1zOiBcImZvcm1zXCIsXG4gIGphdmFTY3JpcHQ6IFwiamF2YVNjcmlwdFwiLFxuICBzaWduYXR1cmVzOiBcInNpZ25hdHVyZXNcIixcbiAgc21hc2s6IFwic21hc2tcIixcbiAgc2hhZGluZ1BhdHRlcm46IFwic2hhZGluZ1BhdHRlcm5cIixcbiAgZm9udDogXCJmb250XCIsXG4gIGVycm9yVGlsaW5nUGF0dGVybjogXCJlcnJvclRpbGluZ1BhdHRlcm5cIixcbiAgZXJyb3JFeHRHU3RhdGU6IFwiZXJyb3JFeHRHU3RhdGVcIixcbiAgZXJyb3JYT2JqZWN0OiBcImVycm9yWE9iamVjdFwiLFxuICBlcnJvckZvbnRMb2FkVHlwZTM6IFwiZXJyb3JGb250TG9hZFR5cGUzXCIsXG4gIGVycm9yRm9udFN0YXRlOiBcImVycm9yRm9udFN0YXRlXCIsXG4gIGVycm9yRm9udE1pc3Npbmc6IFwiZXJyb3JGb250TWlzc2luZ1wiLFxuICBlcnJvckZvbnRUcmFuc2xhdGU6IFwiZXJyb3JGb250VHJhbnNsYXRlXCIsXG4gIGVycm9yQ29sb3JTcGFjZTogXCJlcnJvckNvbG9yU3BhY2VcIixcbiAgZXJyb3JPcGVyYXRvckxpc3Q6IFwiZXJyb3JPcGVyYXRvckxpc3RcIixcbiAgZXJyb3JGb250VG9Vbmljb2RlOiBcImVycm9yRm9udFRvVW5pY29kZVwiLFxuICBlcnJvckZvbnRMb2FkTmF0aXZlOiBcImVycm9yRm9udExvYWROYXRpdmVcIixcbiAgZXJyb3JGb250QnVpbGRQYXRoOiBcImVycm9yRm9udEJ1aWxkUGF0aFwiLFxuICBlcnJvckZvbnRHZXRQYXRoOiBcImVycm9yRm9udEdldFBhdGhcIixcbiAgZXJyb3JNYXJrZWRDb250ZW50OiBcImVycm9yTWFya2VkQ29udGVudFwiLFxuICBlcnJvckNvbnRlbnRTdWJTdHJlYW06IFwiZXJyb3JDb250ZW50U3ViU3RyZWFtXCJcbn07XG5leHBvcnRzLlVOU1VQUE9SVEVEX0ZFQVRVUkVTID0gVU5TVVBQT1JURURfRkVBVFVSRVM7XG5jb25zdCBQYXNzd29yZFJlc3BvbnNlcyA9IHtcbiAgTkVFRF9QQVNTV09SRDogMSxcbiAgSU5DT1JSRUNUX1BBU1NXT1JEOiAyXG59O1xuZXhwb3J0cy5QYXNzd29yZFJlc3BvbnNlcyA9IFBhc3N3b3JkUmVzcG9uc2VzO1xubGV0IHZlcmJvc2l0eSA9IFZlcmJvc2l0eUxldmVsLldBUk5JTkdTO1xuXG5mdW5jdGlvbiBzZXRWZXJib3NpdHlMZXZlbChsZXZlbCkge1xuICBpZiAoTnVtYmVyLmlzSW50ZWdlcihsZXZlbCkpIHtcbiAgICB2ZXJib3NpdHkgPSBsZXZlbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRWZXJib3NpdHlMZXZlbCgpIHtcbiAgcmV0dXJuIHZlcmJvc2l0eTtcbn1cblxuZnVuY3Rpb24gaW5mbyhtc2cpIHtcbiAgaWYgKHZlcmJvc2l0eSA+PSBWZXJib3NpdHlMZXZlbC5JTkZPUykge1xuICAgIGNvbnNvbGUubG9nKGBJbmZvOiAke21zZ31gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuKG1zZykge1xuICBpZiAodmVyYm9zaXR5ID49IFZlcmJvc2l0eUxldmVsLldBUk5JTkdTKSB7XG4gICAgY29uc29sZS5sb2coYFdhcm5pbmc6ICR7bXNnfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVucmVhY2hhYmxlKG1zZykge1xuICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0KGNvbmQsIG1zZykge1xuICBpZiAoIWNvbmQpIHtcbiAgICB1bnJlYWNoYWJsZShtc2cpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzU2FtZU9yaWdpbihiYXNlVXJsLCBvdGhlclVybCkge1xuICBsZXQgYmFzZTtcblxuICB0cnkge1xuICAgIGJhc2UgPSBuZXcgVVJMKGJhc2VVcmwpO1xuXG4gICAgaWYgKCFiYXNlLm9yaWdpbiB8fCBiYXNlLm9yaWdpbiA9PT0gXCJudWxsXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBvdGhlciA9IG5ldyBVUkwob3RoZXJVcmwsIGJhc2UpO1xuICByZXR1cm4gYmFzZS5vcmlnaW4gPT09IG90aGVyLm9yaWdpbjtcbn1cblxuZnVuY3Rpb24gX2lzVmFsaWRQcm90b2NvbCh1cmwpIHtcbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2ggKHVybC5wcm90b2NvbCkge1xuICAgIGNhc2UgXCJodHRwOlwiOlxuICAgIGNhc2UgXCJodHRwczpcIjpcbiAgICBjYXNlIFwiZnRwOlwiOlxuICAgIGNhc2UgXCJtYWlsdG86XCI6XG4gICAgY2FzZSBcInRlbDpcIjpcbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVWYWxpZEFic29sdXRlVXJsKHVybCwgYmFzZVVybCA9IG51bGwsIG9wdGlvbnMgPSBudWxsKSB7XG4gIGlmICghdXJsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiB1cmwgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGlmIChvcHRpb25zLmFkZERlZmF1bHRQcm90b2NvbCAmJiB1cmwuc3RhcnRzV2l0aChcInd3dy5cIikpIHtcbiAgICAgICAgY29uc3QgZG90cyA9IHVybC5tYXRjaCgvXFwuL2cpO1xuXG4gICAgICAgIGlmIChkb3RzICYmIGRvdHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICB1cmwgPSBgaHR0cDovLyR7dXJsfWA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMudHJ5Q29udmVydEVuY29kaW5nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdXJsID0gc3RyaW5nVG9VVEY4U3RyaW5nKHVybCk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7fVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFic29sdXRlVXJsID0gYmFzZVVybCA/IG5ldyBVUkwodXJsLCBiYXNlVXJsKSA6IG5ldyBVUkwodXJsKTtcblxuICAgIGlmIChfaXNWYWxpZFByb3RvY29sKGFic29sdXRlVXJsKSkge1xuICAgICAgcmV0dXJuIGFic29sdXRlVXJsO1xuICAgIH1cbiAgfSBjYXRjaCAoZXgpIHt9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHNoYWRvdyhvYmosIHByb3AsIHZhbHVlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIHtcbiAgICB2YWx1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuY29uc3QgQmFzZUV4Y2VwdGlvbiA9IGZ1bmN0aW9uIEJhc2VFeGNlcHRpb25DbG9zdXJlKCkge1xuICBmdW5jdGlvbiBCYXNlRXhjZXB0aW9uKG1lc3NhZ2UsIG5hbWUpIHtcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gQmFzZUV4Y2VwdGlvbikge1xuICAgICAgdW5yZWFjaGFibGUoXCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlRXhjZXB0aW9uLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBCYXNlRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICBCYXNlRXhjZXB0aW9uLmNvbnN0cnVjdG9yID0gQmFzZUV4Y2VwdGlvbjtcbiAgcmV0dXJuIEJhc2VFeGNlcHRpb247XG59KCk7XG5cbmV4cG9ydHMuQmFzZUV4Y2VwdGlvbiA9IEJhc2VFeGNlcHRpb247XG5cbmNsYXNzIFBhc3N3b3JkRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZywgY29kZSkge1xuICAgIHN1cGVyKG1zZywgXCJQYXNzd29yZEV4Y2VwdGlvblwiKTtcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QYXNzd29yZEV4Y2VwdGlvbiA9IFBhc3N3b3JkRXhjZXB0aW9uO1xuXG5jbGFzcyBVbmtub3duRXJyb3JFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobXNnLCBkZXRhaWxzKSB7XG4gICAgc3VwZXIobXNnLCBcIlVua25vd25FcnJvckV4Y2VwdGlvblwiKTtcbiAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Vbmtub3duRXJyb3JFeGNlcHRpb24gPSBVbmtub3duRXJyb3JFeGNlcHRpb247XG5cbmNsYXNzIEludmFsaWRQREZFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgc3VwZXIobXNnLCBcIkludmFsaWRQREZFeGNlcHRpb25cIik7XG4gIH1cblxufVxuXG5leHBvcnRzLkludmFsaWRQREZFeGNlcHRpb24gPSBJbnZhbGlkUERGRXhjZXB0aW9uO1xuXG5jbGFzcyBNaXNzaW5nUERGRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZykge1xuICAgIHN1cGVyKG1zZywgXCJNaXNzaW5nUERGRXhjZXB0aW9uXCIpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5NaXNzaW5nUERGRXhjZXB0aW9uID0gTWlzc2luZ1BERkV4Y2VwdGlvbjtcblxuY2xhc3MgVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZywgc3RhdHVzKSB7XG4gICAgc3VwZXIobXNnLCBcIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvblwiKTtcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgfVxuXG59XG5cbmV4cG9ydHMuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uID0gVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uO1xuXG5jbGFzcyBGb3JtYXRFcnJvciBleHRlbmRzIEJhc2VFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3Rvcihtc2cpIHtcbiAgICBzdXBlcihtc2csIFwiRm9ybWF0RXJyb3JcIik7XG4gIH1cblxufVxuXG5leHBvcnRzLkZvcm1hdEVycm9yID0gRm9ybWF0RXJyb3I7XG5cbmNsYXNzIEFib3J0RXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZykge1xuICAgIHN1cGVyKG1zZywgXCJBYm9ydEV4Y2VwdGlvblwiKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQWJvcnRFeGNlcHRpb24gPSBBYm9ydEV4Y2VwdGlvbjtcbmNvbnN0IE51bGxDaGFyYWN0ZXJzUmVnRXhwID0gL1xceDAwKy9nO1xuY29uc3QgSW52aXNpYmxlQ2hhcmFjdGVyc1JlZ0V4cCA9IC9bXFx4MDEtXFx4MUZdL2c7XG5cbmZ1bmN0aW9uIHJlbW92ZU51bGxDaGFyYWN0ZXJzKHN0ciwgcmVwbGFjZUludmlzaWJsZSA9IGZhbHNlKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSBcInN0cmluZ1wiKSB7XG4gICAgd2FybihcIlRoZSBhcmd1bWVudCBmb3IgcmVtb3ZlTnVsbENoYXJhY3RlcnMgbXVzdCBiZSBhIHN0cmluZy5cIik7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIGlmIChyZXBsYWNlSW52aXNpYmxlKSB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoSW52aXNpYmxlQ2hhcmFjdGVyc1JlZ0V4cCwgXCIgXCIpO1xuICB9XG5cbiAgcmV0dXJuIHN0ci5yZXBsYWNlKE51bGxDaGFyYWN0ZXJzUmVnRXhwLCBcIlwiKTtcbn1cblxuZnVuY3Rpb24gYnl0ZXNUb1N0cmluZyhieXRlcykge1xuICBhc3NlcnQoYnl0ZXMgIT09IG51bGwgJiYgdHlwZW9mIGJ5dGVzID09PSBcIm9iamVjdFwiICYmIGJ5dGVzLmxlbmd0aCAhPT0gdW5kZWZpbmVkLCBcIkludmFsaWQgYXJndW1lbnQgZm9yIGJ5dGVzVG9TdHJpbmdcIik7XG4gIGNvbnN0IGxlbmd0aCA9IGJ5dGVzLmxlbmd0aDtcbiAgY29uc3QgTUFYX0FSR1VNRU5UX0NPVU5UID0gODE5MjtcblxuICBpZiAobGVuZ3RoIDwgTUFYX0FSR1VNRU5UX0NPVU5UKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgYnl0ZXMpO1xuICB9XG5cbiAgY29uc3Qgc3RyQnVmID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gTUFYX0FSR1VNRU5UX0NPVU5UKSB7XG4gICAgY29uc3QgY2h1bmtFbmQgPSBNYXRoLm1pbihpICsgTUFYX0FSR1VNRU5UX0NPVU5ULCBsZW5ndGgpO1xuICAgIGNvbnN0IGNodW5rID0gYnl0ZXMuc3ViYXJyYXkoaSwgY2h1bmtFbmQpO1xuICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgY2h1bmspKTtcbiAgfVxuXG4gIHJldHVybiBzdHJCdWYuam9pbihcIlwiKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5nVG9CeXRlcyhzdHIpIHtcbiAgYXNzZXJ0KHR5cGVvZiBzdHIgPT09IFwic3RyaW5nXCIsIFwiSW52YWxpZCBhcmd1bWVudCBmb3Igc3RyaW5nVG9CeXRlc1wiKTtcbiAgY29uc3QgbGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBieXRlc1tpXSA9IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZjtcbiAgfVxuXG4gIHJldHVybiBieXRlcztcbn1cblxuZnVuY3Rpb24gYXJyYXlCeXRlTGVuZ3RoKGFycikge1xuICBpZiAoYXJyLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGFyci5sZW5ndGg7XG4gIH1cblxuICBhc3NlcnQoYXJyLmJ5dGVMZW5ndGggIT09IHVuZGVmaW5lZCwgXCJhcnJheUJ5dGVMZW5ndGggLSBpbnZhbGlkIGFyZ3VtZW50LlwiKTtcbiAgcmV0dXJuIGFyci5ieXRlTGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBhcnJheXNUb0J5dGVzKGFycikge1xuICBjb25zdCBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gIGlmIChsZW5ndGggPT09IDEgJiYgYXJyWzBdIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgIHJldHVybiBhcnJbMF07XG4gIH1cblxuICBsZXQgcmVzdWx0TGVuZ3RoID0gMDtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgcmVzdWx0TGVuZ3RoICs9IGFycmF5Qnl0ZUxlbmd0aChhcnJbaV0pO1xuICB9XG5cbiAgbGV0IHBvcyA9IDA7XG4gIGNvbnN0IGRhdGEgPSBuZXcgVWludDhBcnJheShyZXN1bHRMZW5ndGgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgaXRlbSA9IGFycltpXTtcblxuICAgIGlmICghKGl0ZW0gaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGl0ZW0gPSBzdHJpbmdUb0J5dGVzKGl0ZW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbSA9IG5ldyBVaW50OEFycmF5KGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGl0ZW1MZW5ndGggPSBpdGVtLmJ5dGVMZW5ndGg7XG4gICAgZGF0YS5zZXQoaXRlbSwgcG9zKTtcbiAgICBwb3MgKz0gaXRlbUxlbmd0aDtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBzdHJpbmczMih2YWx1ZSkge1xuICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh2YWx1ZSA+PiAyNCAmIDB4ZmYsIHZhbHVlID4+IDE2ICYgMHhmZiwgdmFsdWUgPj4gOCAmIDB4ZmYsIHZhbHVlICYgMHhmZik7XG59XG5cbmZ1bmN0aW9uIG9iamVjdFNpemUob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gb2JqZWN0RnJvbU1hcChtYXApIHtcbiAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBtYXApIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gaXNMaXR0bGVFbmRpYW4oKSB7XG4gIGNvbnN0IGJ1ZmZlcjggPSBuZXcgVWludDhBcnJheSg0KTtcbiAgYnVmZmVyOFswXSA9IDE7XG4gIGNvbnN0IHZpZXczMiA9IG5ldyBVaW50MzJBcnJheShidWZmZXI4LmJ1ZmZlciwgMCwgMSk7XG4gIHJldHVybiB2aWV3MzJbMF0gPT09IDE7XG59XG5cbmNvbnN0IElzTGl0dGxlRW5kaWFuQ2FjaGVkID0ge1xuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHNoYWRvdyh0aGlzLCBcInZhbHVlXCIsIGlzTGl0dGxlRW5kaWFuKCkpO1xuICB9XG5cbn07XG5leHBvcnRzLklzTGl0dGxlRW5kaWFuQ2FjaGVkID0gSXNMaXR0bGVFbmRpYW5DYWNoZWQ7XG5cbmZ1bmN0aW9uIGlzRXZhbFN1cHBvcnRlZCgpIHtcbiAgdHJ5IHtcbiAgICBuZXcgRnVuY3Rpb24oXCJcIik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuY29uc3QgSXNFdmFsU3VwcG9ydGVkQ2FjaGVkID0ge1xuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHNoYWRvdyh0aGlzLCBcInZhbHVlXCIsIGlzRXZhbFN1cHBvcnRlZCgpKTtcbiAgfVxuXG59O1xuZXhwb3J0cy5Jc0V2YWxTdXBwb3J0ZWRDYWNoZWQgPSBJc0V2YWxTdXBwb3J0ZWRDYWNoZWQ7XG5jb25zdCBoZXhOdW1iZXJzID0gWy4uLkFycmF5KDI1Nikua2V5cygpXS5tYXAobiA9PiBuLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCBcIjBcIikpO1xuXG5jbGFzcyBVdGlsIHtcbiAgc3RhdGljIG1ha2VIZXhDb2xvcihyLCBnLCBiKSB7XG4gICAgcmV0dXJuIGAjJHtoZXhOdW1iZXJzW3JdfSR7aGV4TnVtYmVyc1tnXX0ke2hleE51bWJlcnNbYl19YDtcbiAgfVxuXG4gIHN0YXRpYyB0cmFuc2Zvcm0obTEsIG0yKSB7XG4gICAgcmV0dXJuIFttMVswXSAqIG0yWzBdICsgbTFbMl0gKiBtMlsxXSwgbTFbMV0gKiBtMlswXSArIG0xWzNdICogbTJbMV0sIG0xWzBdICogbTJbMl0gKyBtMVsyXSAqIG0yWzNdLCBtMVsxXSAqIG0yWzJdICsgbTFbM10gKiBtMlszXSwgbTFbMF0gKiBtMls0XSArIG0xWzJdICogbTJbNV0gKyBtMVs0XSwgbTFbMV0gKiBtMls0XSArIG0xWzNdICogbTJbNV0gKyBtMVs1XV07XG4gIH1cblxuICBzdGF0aWMgYXBwbHlUcmFuc2Zvcm0ocCwgbSkge1xuICAgIGNvbnN0IHh0ID0gcFswXSAqIG1bMF0gKyBwWzFdICogbVsyXSArIG1bNF07XG4gICAgY29uc3QgeXQgPSBwWzBdICogbVsxXSArIHBbMV0gKiBtWzNdICsgbVs1XTtcbiAgICByZXR1cm4gW3h0LCB5dF07XG4gIH1cblxuICBzdGF0aWMgYXBwbHlJbnZlcnNlVHJhbnNmb3JtKHAsIG0pIHtcbiAgICBjb25zdCBkID0gbVswXSAqIG1bM10gLSBtWzFdICogbVsyXTtcbiAgICBjb25zdCB4dCA9IChwWzBdICogbVszXSAtIHBbMV0gKiBtWzJdICsgbVsyXSAqIG1bNV0gLSBtWzRdICogbVszXSkgLyBkO1xuICAgIGNvbnN0IHl0ID0gKC1wWzBdICogbVsxXSArIHBbMV0gKiBtWzBdICsgbVs0XSAqIG1bMV0gLSBtWzVdICogbVswXSkgLyBkO1xuICAgIHJldHVybiBbeHQsIHl0XTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveChyLCBtKSB7XG4gICAgY29uc3QgcDEgPSBVdGlsLmFwcGx5VHJhbnNmb3JtKHIsIG0pO1xuICAgIGNvbnN0IHAyID0gVXRpbC5hcHBseVRyYW5zZm9ybShyLnNsaWNlKDIsIDQpLCBtKTtcbiAgICBjb25zdCBwMyA9IFV0aWwuYXBwbHlUcmFuc2Zvcm0oW3JbMF0sIHJbM11dLCBtKTtcbiAgICBjb25zdCBwNCA9IFV0aWwuYXBwbHlUcmFuc2Zvcm0oW3JbMl0sIHJbMV1dLCBtKTtcbiAgICByZXR1cm4gW01hdGgubWluKHAxWzBdLCBwMlswXSwgcDNbMF0sIHA0WzBdKSwgTWF0aC5taW4ocDFbMV0sIHAyWzFdLCBwM1sxXSwgcDRbMV0pLCBNYXRoLm1heChwMVswXSwgcDJbMF0sIHAzWzBdLCBwNFswXSksIE1hdGgubWF4KHAxWzFdLCBwMlsxXSwgcDNbMV0sIHA0WzFdKV07XG4gIH1cblxuICBzdGF0aWMgaW52ZXJzZVRyYW5zZm9ybShtKSB7XG4gICAgY29uc3QgZCA9IG1bMF0gKiBtWzNdIC0gbVsxXSAqIG1bMl07XG4gICAgcmV0dXJuIFttWzNdIC8gZCwgLW1bMV0gLyBkLCAtbVsyXSAvIGQsIG1bMF0gLyBkLCAobVsyXSAqIG1bNV0gLSBtWzRdICogbVszXSkgLyBkLCAobVs0XSAqIG1bMV0gLSBtWzVdICogbVswXSkgLyBkXTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseTNkVHJhbnNmb3JtKG0sIHYpIHtcbiAgICByZXR1cm4gW21bMF0gKiB2WzBdICsgbVsxXSAqIHZbMV0gKyBtWzJdICogdlsyXSwgbVszXSAqIHZbMF0gKyBtWzRdICogdlsxXSArIG1bNV0gKiB2WzJdLCBtWzZdICogdlswXSArIG1bN10gKiB2WzFdICsgbVs4XSAqIHZbMl1dO1xuICB9XG5cbiAgc3RhdGljIHNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKG0pIHtcbiAgICBjb25zdCB0cmFuc3Bvc2UgPSBbbVswXSwgbVsyXSwgbVsxXSwgbVszXV07XG4gICAgY29uc3QgYSA9IG1bMF0gKiB0cmFuc3Bvc2VbMF0gKyBtWzFdICogdHJhbnNwb3NlWzJdO1xuICAgIGNvbnN0IGIgPSBtWzBdICogdHJhbnNwb3NlWzFdICsgbVsxXSAqIHRyYW5zcG9zZVszXTtcbiAgICBjb25zdCBjID0gbVsyXSAqIHRyYW5zcG9zZVswXSArIG1bM10gKiB0cmFuc3Bvc2VbMl07XG4gICAgY29uc3QgZCA9IG1bMl0gKiB0cmFuc3Bvc2VbMV0gKyBtWzNdICogdHJhbnNwb3NlWzNdO1xuICAgIGNvbnN0IGZpcnN0ID0gKGEgKyBkKSAvIDI7XG4gICAgY29uc3Qgc2Vjb25kID0gTWF0aC5zcXJ0KChhICsgZCkgKiogMiAtIDQgKiAoYSAqIGQgLSBjICogYikpIC8gMjtcbiAgICBjb25zdCBzeCA9IGZpcnN0ICsgc2Vjb25kIHx8IDE7XG4gICAgY29uc3Qgc3kgPSBmaXJzdCAtIHNlY29uZCB8fCAxO1xuICAgIHJldHVybiBbTWF0aC5zcXJ0KHN4KSwgTWF0aC5zcXJ0KHN5KV07XG4gIH1cblxuICBzdGF0aWMgbm9ybWFsaXplUmVjdChyZWN0KSB7XG4gICAgY29uc3QgciA9IHJlY3Quc2xpY2UoMCk7XG5cbiAgICBpZiAocmVjdFswXSA+IHJlY3RbMl0pIHtcbiAgICAgIHJbMF0gPSByZWN0WzJdO1xuICAgICAgclsyXSA9IHJlY3RbMF07XG4gICAgfVxuXG4gICAgaWYgKHJlY3RbMV0gPiByZWN0WzNdKSB7XG4gICAgICByWzFdID0gcmVjdFszXTtcbiAgICAgIHJbM10gPSByZWN0WzFdO1xuICAgIH1cblxuICAgIHJldHVybiByO1xuICB9XG5cbiAgc3RhdGljIGludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgICBmdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgICAgIHJldHVybiBhIC0gYjtcbiAgICB9XG5cbiAgICBjb25zdCBvcmRlcmVkWCA9IFtyZWN0MVswXSwgcmVjdDFbMl0sIHJlY3QyWzBdLCByZWN0MlsyXV0uc29ydChjb21wYXJlKTtcbiAgICBjb25zdCBvcmRlcmVkWSA9IFtyZWN0MVsxXSwgcmVjdDFbM10sIHJlY3QyWzFdLCByZWN0MlszXV0uc29ydChjb21wYXJlKTtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICByZWN0MSA9IFV0aWwubm9ybWFsaXplUmVjdChyZWN0MSk7XG4gICAgcmVjdDIgPSBVdGlsLm5vcm1hbGl6ZVJlY3QocmVjdDIpO1xuXG4gICAgaWYgKG9yZGVyZWRYWzBdID09PSByZWN0MVswXSAmJiBvcmRlcmVkWFsxXSA9PT0gcmVjdDJbMF0gfHwgb3JkZXJlZFhbMF0gPT09IHJlY3QyWzBdICYmIG9yZGVyZWRYWzFdID09PSByZWN0MVswXSkge1xuICAgICAgcmVzdWx0WzBdID0gb3JkZXJlZFhbMV07XG4gICAgICByZXN1bHRbMl0gPSBvcmRlcmVkWFsyXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG9yZGVyZWRZWzBdID09PSByZWN0MVsxXSAmJiBvcmRlcmVkWVsxXSA9PT0gcmVjdDJbMV0gfHwgb3JkZXJlZFlbMF0gPT09IHJlY3QyWzFdICYmIG9yZGVyZWRZWzFdID09PSByZWN0MVsxXSkge1xuICAgICAgcmVzdWx0WzFdID0gb3JkZXJlZFlbMV07XG4gICAgICByZXN1bHRbM10gPSBvcmRlcmVkWVsyXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0YXRpYyBiZXppZXJCb3VuZGluZ0JveCh4MCwgeTAsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpIHtcbiAgICBjb25zdCB0dmFsdWVzID0gW10sXG4gICAgICAgICAgYm91bmRzID0gW1tdLCBbXV07XG4gICAgbGV0IGEsIGIsIGMsIHQsIHQxLCB0MiwgYjJhYywgc3FydGIyYWM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI7ICsraSkge1xuICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgYiA9IDYgKiB4MCAtIDEyICogeDEgKyA2ICogeDI7XG4gICAgICAgIGEgPSAtMyAqIHgwICsgOSAqIHgxIC0gOSAqIHgyICsgMyAqIHgzO1xuICAgICAgICBjID0gMyAqIHgxIC0gMyAqIHgwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYiA9IDYgKiB5MCAtIDEyICogeTEgKyA2ICogeTI7XG4gICAgICAgIGEgPSAtMyAqIHkwICsgOSAqIHkxIC0gOSAqIHkyICsgMyAqIHkzO1xuICAgICAgICBjID0gMyAqIHkxIC0gMyAqIHkwO1xuICAgICAgfVxuXG4gICAgICBpZiAoTWF0aC5hYnMoYSkgPCAxZS0xMikge1xuICAgICAgICBpZiAoTWF0aC5hYnMoYikgPCAxZS0xMikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdCA9IC1jIC8gYjtcblxuICAgICAgICBpZiAoMCA8IHQgJiYgdCA8IDEpIHtcbiAgICAgICAgICB0dmFsdWVzLnB1c2godCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYjJhYyA9IGIgKiBiIC0gNCAqIGMgKiBhO1xuICAgICAgc3FydGIyYWMgPSBNYXRoLnNxcnQoYjJhYyk7XG5cbiAgICAgIGlmIChiMmFjIDwgMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdDEgPSAoLWIgKyBzcXJ0YjJhYykgLyAoMiAqIGEpO1xuXG4gICAgICBpZiAoMCA8IHQxICYmIHQxIDwgMSkge1xuICAgICAgICB0dmFsdWVzLnB1c2godDEpO1xuICAgICAgfVxuXG4gICAgICB0MiA9ICgtYiAtIHNxcnRiMmFjKSAvICgyICogYSk7XG5cbiAgICAgIGlmICgwIDwgdDIgJiYgdDIgPCAxKSB7XG4gICAgICAgIHR2YWx1ZXMucHVzaCh0Mik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGogPSB0dmFsdWVzLmxlbmd0aCxcbiAgICAgICAgbXQ7XG4gICAgY29uc3QgamxlbiA9IGo7XG5cbiAgICB3aGlsZSAoai0tKSB7XG4gICAgICB0ID0gdHZhbHVlc1tqXTtcbiAgICAgIG10ID0gMSAtIHQ7XG4gICAgICBib3VuZHNbMF1bal0gPSBtdCAqIG10ICogbXQgKiB4MCArIDMgKiBtdCAqIG10ICogdCAqIHgxICsgMyAqIG10ICogdCAqIHQgKiB4MiArIHQgKiB0ICogdCAqIHgzO1xuICAgICAgYm91bmRzWzFdW2pdID0gbXQgKiBtdCAqIG10ICogeTAgKyAzICogbXQgKiBtdCAqIHQgKiB5MSArIDMgKiBtdCAqIHQgKiB0ICogeTIgKyB0ICogdCAqIHQgKiB5MztcbiAgICB9XG5cbiAgICBib3VuZHNbMF1bamxlbl0gPSB4MDtcbiAgICBib3VuZHNbMV1bamxlbl0gPSB5MDtcbiAgICBib3VuZHNbMF1bamxlbiArIDFdID0geDM7XG4gICAgYm91bmRzWzFdW2psZW4gKyAxXSA9IHkzO1xuICAgIGJvdW5kc1swXS5sZW5ndGggPSBib3VuZHNbMV0ubGVuZ3RoID0gamxlbiArIDI7XG4gICAgcmV0dXJuIFtNYXRoLm1pbiguLi5ib3VuZHNbMF0pLCBNYXRoLm1pbiguLi5ib3VuZHNbMV0pLCBNYXRoLm1heCguLi5ib3VuZHNbMF0pLCBNYXRoLm1heCguLi5ib3VuZHNbMV0pXTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuVXRpbCA9IFV0aWw7XG5jb25zdCBQREZTdHJpbmdUcmFuc2xhdGVUYWJsZSA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAweDJkOCwgMHgyYzcsIDB4MmM2LCAweDJkOSwgMHgyZGQsIDB4MmRiLCAweDJkYSwgMHgyZGMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4MjAyMiwgMHgyMDIwLCAweDIwMjEsIDB4MjAyNiwgMHgyMDE0LCAweDIwMTMsIDB4MTkyLCAweDIwNDQsIDB4MjAzOSwgMHgyMDNhLCAweDIyMTIsIDB4MjAzMCwgMHgyMDFlLCAweDIwMWMsIDB4MjAxZCwgMHgyMDE4LCAweDIwMTksIDB4MjAxYSwgMHgyMTIyLCAweGZiMDEsIDB4ZmIwMiwgMHgxNDEsIDB4MTUyLCAweDE2MCwgMHgxNzgsIDB4MTdkLCAweDEzMSwgMHgxNDIsIDB4MTUzLCAweDE2MSwgMHgxN2UsIDAsIDB4MjBhY107XG5cbmZ1bmN0aW9uIHN0cmluZ1RvUERGU3RyaW5nKHN0cikge1xuICBjb25zdCBsZW5ndGggPSBzdHIubGVuZ3RoLFxuICAgICAgICBzdHJCdWYgPSBbXTtcblxuICBpZiAoc3RyWzBdID09PSBcIlxceEZFXCIgJiYgc3RyWzFdID09PSBcIlxceEZGXCIpIHtcbiAgICBmb3IgKGxldCBpID0gMjsgaSA8IGxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHN0ci5jaGFyQ29kZUF0KGkpIDw8IDggfCBzdHIuY2hhckNvZGVBdChpICsgMSkpKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoc3RyWzBdID09PSBcIlxceEZGXCIgJiYgc3RyWzFdID09PSBcIlxceEZFXCIpIHtcbiAgICBmb3IgKGxldCBpID0gMjsgaSA8IGxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHN0ci5jaGFyQ29kZUF0KGkgKyAxKSA8PCA4IHwgc3RyLmNoYXJDb2RlQXQoaSkpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgY29kZSA9IFBERlN0cmluZ1RyYW5zbGF0ZVRhYmxlW3N0ci5jaGFyQ29kZUF0KGkpXTtcbiAgICAgIHN0ckJ1Zi5wdXNoKGNvZGUgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpIDogc3RyLmNoYXJBdChpKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ckJ1Zi5qb2luKFwiXCIpO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvKFsoKVxcXFxcXG5cXHJdKS9nLCBtYXRjaCA9PiB7XG4gICAgaWYgKG1hdGNoID09PSBcIlxcblwiKSB7XG4gICAgICByZXR1cm4gXCJcXFxcblwiO1xuICAgIH0gZWxzZSBpZiAobWF0Y2ggPT09IFwiXFxyXCIpIHtcbiAgICAgIHJldHVybiBcIlxcXFxyXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBcXFxcJHttYXRjaH1gO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaXNBc2NpaShzdHIpIHtcbiAgcmV0dXJuIC9eW1xceDAwLVxceDdGXSokLy50ZXN0KHN0cik7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ1RvVVRGMTZCRVN0cmluZyhzdHIpIHtcbiAgY29uc3QgYnVmID0gW1wiXFx4RkVcXHhGRlwiXTtcblxuICBmb3IgKGxldCBpID0gMCwgaWkgPSBzdHIubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgIGNvbnN0IGNoYXIgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICBidWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXIgPj4gOCAmIDB4ZmYpLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXIgJiAweGZmKSk7XG4gIH1cblxuICByZXR1cm4gYnVmLmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ1RvVVRGOFN0cmluZyhzdHIpIHtcbiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoc3RyKSk7XG59XG5cbmZ1bmN0aW9uIHV0ZjhTdHJpbmdUb1N0cmluZyhzdHIpIHtcbiAgcmV0dXJuIHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKTtcbn1cblxuZnVuY3Rpb24gaXNCb29sKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSBcImJvb2xlYW5cIjtcbn1cblxuZnVuY3Rpb24gaXNOdW0odikge1xuICByZXR1cm4gdHlwZW9mIHYgPT09IFwibnVtYmVyXCI7XG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSBcInN0cmluZ1wiO1xufVxuXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT09IG51bGwgJiYgdi5ieXRlTGVuZ3RoICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXlFcXVhbChhcnIxLCBhcnIyKSB7XG4gIGlmIChhcnIxLmxlbmd0aCAhPT0gYXJyMi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMCwgaWkgPSBhcnIxLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlKGRhdGUgPSBuZXcgRGF0ZSgpKSB7XG4gIGNvbnN0IGJ1ZmZlciA9IFtkYXRlLmdldFVUQ0Z1bGxZZWFyKCkudG9TdHJpbmcoKSwgKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpLCBkYXRlLmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKSwgZGF0ZS5nZXRVVENIb3VycygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpLCBkYXRlLmdldFVUQ01pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKSwgZGF0ZS5nZXRVVENTZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIildO1xuICByZXR1cm4gYnVmZmVyLmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KCkge1xuICBjb25zdCBjYXBhYmlsaXR5ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgbGV0IGlzU2V0dGxlZCA9IGZhbHNlO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2FwYWJpbGl0eSwgXCJzZXR0bGVkXCIsIHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gaXNTZXR0bGVkO1xuICAgIH1cblxuICB9KTtcbiAgY2FwYWJpbGl0eS5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGNhcGFiaWxpdHkucmVzb2x2ZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICBpc1NldHRsZWQgPSB0cnVlO1xuICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICB9O1xuXG4gICAgY2FwYWJpbGl0eS5yZWplY3QgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBpc1NldHRsZWQgPSB0cnVlO1xuICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiBjYXBhYmlsaXR5O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPYmplY3RVUkwoZGF0YSwgY29udGVudFR5cGUgPSBcIlwiLCBmb3JjZURhdGFTY2hlbWEgPSBmYWxzZSkge1xuICBpZiAoVVJMLmNyZWF0ZU9iamVjdFVSTCAmJiB0eXBlb2YgQmxvYiAhPT0gXCJ1bmRlZmluZWRcIiAmJiAhZm9yY2VEYXRhU2NoZW1hKSB7XG4gICAgcmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW2RhdGFdLCB7XG4gICAgICB0eXBlOiBjb250ZW50VHlwZVxuICAgIH0pKTtcbiAgfVxuXG4gIGNvbnN0IGRpZ2l0cyA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIjtcbiAgbGV0IGJ1ZmZlciA9IGBkYXRhOiR7Y29udGVudFR5cGV9O2Jhc2U2NCxgO1xuXG4gIGZvciAobGV0IGkgPSAwLCBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMykge1xuICAgIGNvbnN0IGIxID0gZGF0YVtpXSAmIDB4ZmY7XG4gICAgY29uc3QgYjIgPSBkYXRhW2kgKyAxXSAmIDB4ZmY7XG4gICAgY29uc3QgYjMgPSBkYXRhW2kgKyAyXSAmIDB4ZmY7XG4gICAgY29uc3QgZDEgPSBiMSA+PiAyLFxuICAgICAgICAgIGQyID0gKGIxICYgMykgPDwgNCB8IGIyID4+IDQ7XG4gICAgY29uc3QgZDMgPSBpICsgMSA8IGlpID8gKGIyICYgMHhmKSA8PCAyIHwgYjMgPj4gNiA6IDY0O1xuICAgIGNvbnN0IGQ0ID0gaSArIDIgPCBpaSA/IGIzICYgMHgzZiA6IDY0O1xuICAgIGJ1ZmZlciArPSBkaWdpdHNbZDFdICsgZGlnaXRzW2QyXSArIGRpZ2l0c1tkM10gKyBkaWdpdHNbZDRdO1xuICB9XG5cbiAgcmV0dXJuIGJ1ZmZlcjtcbn1cblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbnZhciBfaXNfbm9kZSA9IF9fd19wZGZqc19yZXF1aXJlX18oNCk7XG5cbjtcblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLmlzTm9kZUpTID0gdm9pZCAwO1xuY29uc3QgaXNOb2RlSlMgPSB0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzICsgXCJcIiA9PT0gXCJbb2JqZWN0IHByb2Nlc3NdXCIgJiYgIXByb2Nlc3MudmVyc2lvbnMubncgJiYgIShwcm9jZXNzLnZlcnNpb25zLmVsZWN0cm9uICYmIHByb2Nlc3MudHlwZSAmJiBwcm9jZXNzLnR5cGUgIT09IFwiYnJvd3NlclwiKTtcbmV4cG9ydHMuaXNOb2RlSlMgPSBpc05vZGVKUztcblxuLyoqKi8gfSksXG4vKiA1ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLkJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IGV4cG9ydHMuQmFzZVNWR0ZhY3RvcnkgPSBleHBvcnRzLkJhc2VDYW52YXNGYWN0b3J5ID0gZXhwb3J0cy5CYXNlQ01hcFJlYWRlckZhY3RvcnkgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbmNsYXNzIEJhc2VDYW52YXNGYWN0b3J5IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IEJhc2VDYW52YXNGYWN0b3J5KSB7XG4gICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQ2Fubm90IGluaXRpYWxpemUgQmFzZUNhbnZhc0ZhY3RvcnkuXCIpO1xuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY2FudmFzIHNpemVcIik7XG4gICAgfVxuXG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5fY3JlYXRlQ2FudmFzKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNhbnZhcyxcbiAgICAgIGNvbnRleHQ6IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIilcbiAgICB9O1xuICB9XG5cbiAgcmVzZXQoY2FudmFzQW5kQ29udGV4dCwgd2lkdGgsIGhlaWdodCkge1xuICAgIGlmICghY2FudmFzQW5kQ29udGV4dC5jYW52YXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbnZhcyBpcyBub3Qgc3BlY2lmaWVkXCIpO1xuICAgIH1cblxuICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNhbnZhcyBzaXplXCIpO1xuICAgIH1cblxuICAgIGNhbnZhc0FuZENvbnRleHQuY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgY2FudmFzQW5kQ29udGV4dC5jYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgZGVzdHJveShjYW52YXNBbmRDb250ZXh0KSB7XG4gICAgaWYgKCFjYW52YXNBbmRDb250ZXh0LmNhbnZhcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FudmFzIGlzIG5vdCBzcGVjaWZpZWRcIik7XG4gICAgfVxuXG4gICAgY2FudmFzQW5kQ29udGV4dC5jYW52YXMud2lkdGggPSAwO1xuICAgIGNhbnZhc0FuZENvbnRleHQuY2FudmFzLmhlaWdodCA9IDA7XG4gICAgY2FudmFzQW5kQ29udGV4dC5jYW52YXMgPSBudWxsO1xuICAgIGNhbnZhc0FuZENvbnRleHQuY29udGV4dCA9IG51bGw7XG4gIH1cblxuICBfY3JlYXRlQ2FudmFzKHdpZHRoLCBoZWlnaHQpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIGBfY3JlYXRlQ2FudmFzYCBjYWxsZWQuXCIpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5CYXNlQ2FudmFzRmFjdG9yeSA9IEJhc2VDYW52YXNGYWN0b3J5O1xuXG5jbGFzcyBCYXNlQ01hcFJlYWRlckZhY3Rvcnkge1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgYmFzZVVybCA9IG51bGwsXG4gICAgaXNDb21wcmVzc2VkID0gZmFsc2VcbiAgfSkge1xuICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBCYXNlQ01hcFJlYWRlckZhY3RvcnkpIHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlQ01hcFJlYWRlckZhY3RvcnkuXCIpO1xuICAgIH1cblxuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmw7XG4gICAgdGhpcy5pc0NvbXByZXNzZWQgPSBpc0NvbXByZXNzZWQ7XG4gIH1cblxuICBhc3luYyBmZXRjaCh7XG4gICAgbmFtZVxuICB9KSB7XG4gICAgaWYgKCF0aGlzLmJhc2VVcmwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIENNYXAgXCJiYXNlVXJsXCIgcGFyYW1ldGVyIG11c3QgYmUgc3BlY2lmaWVkLCBlbnN1cmUgdGhhdCAnICsgJ3RoZSBcImNNYXBVcmxcIiBhbmQgXCJjTWFwUGFja2VkXCIgQVBJIHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLicpO1xuICAgIH1cblxuICAgIGlmICghbmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ01hcCBuYW1lIG11c3QgYmUgc3BlY2lmaWVkLlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJhc2VVcmwgKyBuYW1lICsgKHRoaXMuaXNDb21wcmVzc2VkID8gXCIuYmNtYXBcIiA6IFwiXCIpO1xuICAgIGNvbnN0IGNvbXByZXNzaW9uVHlwZSA9IHRoaXMuaXNDb21wcmVzc2VkID8gX3V0aWwuQ01hcENvbXByZXNzaW9uVHlwZS5CSU5BUlkgOiBfdXRpbC5DTWFwQ29tcHJlc3Npb25UeXBlLk5PTkU7XG4gICAgcmV0dXJuIHRoaXMuX2ZldGNoRGF0YSh1cmwsIGNvbXByZXNzaW9uVHlwZSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxvYWQgJHt0aGlzLmlzQ29tcHJlc3NlZCA/IFwiYmluYXJ5IFwiIDogXCJcIn1DTWFwIGF0OiAke3VybH1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9mZXRjaERhdGEodXJsLCBjb21wcmVzc2lvblR5cGUpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIGBfZmV0Y2hEYXRhYCBjYWxsZWQuXCIpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5CYXNlQ01hcFJlYWRlckZhY3RvcnkgPSBCYXNlQ01hcFJlYWRlckZhY3Rvcnk7XG5cbmNsYXNzIEJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBiYXNlVXJsID0gbnVsbFxuICB9KSB7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IEJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSkge1xuICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkNhbm5vdCBpbml0aWFsaXplIEJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeS5cIik7XG4gICAgfVxuXG4gICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybDtcbiAgfVxuXG4gIGFzeW5jIGZldGNoKHtcbiAgICBmaWxlbmFtZVxuICB9KSB7XG4gICAgaWYgKCF0aGlzLmJhc2VVcmwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHN0YW5kYXJkIGZvbnQgXCJiYXNlVXJsXCIgcGFyYW1ldGVyIG11c3QgYmUgc3BlY2lmaWVkLCBlbnN1cmUgdGhhdCAnICsgJ3RoZSBcInN0YW5kYXJkRm9udERhdGFVcmxcIiBBUEkgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLicpO1xuICAgIH1cblxuICAgIGlmICghZmlsZW5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkZvbnQgZmlsZW5hbWUgbXVzdCBiZSBzcGVjaWZpZWQuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYmFzZVVybH0ke2ZpbGVuYW1lfWA7XG4gICAgcmV0dXJuIHRoaXMuX2ZldGNoRGF0YSh1cmwpLmNhdGNoKHJlYXNvbiA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2FkIGZvbnQgZGF0YSBhdDogJHt1cmx9YCk7XG4gICAgfSk7XG4gIH1cblxuICBfZmV0Y2hEYXRhKHVybCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYF9mZXRjaERhdGFgIGNhbGxlZC5cIik7XG4gIH1cblxufVxuXG5leHBvcnRzLkJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IEJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeTtcblxuY2xhc3MgQmFzZVNWR0ZhY3Rvcnkge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gQmFzZVNWR0ZhY3RvcnkpIHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlU1ZHRmFjdG9yeS5cIik7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlKHdpZHRoLCBoZWlnaHQpIHtcbiAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBTVkcgZGltZW5zaW9uc1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdmcgPSB0aGlzLl9jcmVhdGVTVkcoXCJzdmc6c3ZnXCIpO1xuXG4gICAgc3ZnLnNldEF0dHJpYnV0ZShcInZlcnNpb25cIiwgXCIxLjFcIik7XG4gICAgc3ZnLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIGAke3dpZHRofXB4YCk7XG4gICAgc3ZnLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBgJHtoZWlnaHR9cHhgKTtcbiAgICBzdmcuc2V0QXR0cmlidXRlKFwicHJlc2VydmVBc3BlY3RSYXRpb1wiLCBcIm5vbmVcIik7XG4gICAgc3ZnLnNldEF0dHJpYnV0ZShcInZpZXdCb3hcIiwgYDAgMCAke3dpZHRofSAke2hlaWdodH1gKTtcbiAgICByZXR1cm4gc3ZnO1xuICB9XG5cbiAgY3JlYXRlRWxlbWVudCh0eXBlKSB7XG4gICAgaWYgKHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIFNWRyBlbGVtZW50IHR5cGVcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZVNWRyh0eXBlKTtcbiAgfVxuXG4gIF9jcmVhdGVTVkcodHlwZSkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYF9jcmVhdGVTVkdgIGNhbGxlZC5cIik7XG4gIH1cblxufVxuXG5leHBvcnRzLkJhc2VTVkdGYWN0b3J5ID0gQmFzZVNWR0ZhY3Rvcnk7XG5cbi8qKiovIH0pLFxuLyogNiAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5idWlsZCA9IGV4cG9ydHMuUmVuZGVyVGFzayA9IGV4cG9ydHMuUERGV29ya2VyID0gZXhwb3J0cy5QREZQYWdlUHJveHkgPSBleHBvcnRzLlBERkRvY3VtZW50UHJveHkgPSBleHBvcnRzLlBERkRvY3VtZW50TG9hZGluZ1Rhc2sgPSBleHBvcnRzLlBERkRhdGFSYW5nZVRyYW5zcG9ydCA9IGV4cG9ydHMuTG9vcGJhY2tQb3J0ID0gZXhwb3J0cy5EZWZhdWx0U3RhbmRhcmRGb250RGF0YUZhY3RvcnkgPSBleHBvcnRzLkRlZmF1bHRDYW52YXNGYWN0b3J5ID0gZXhwb3J0cy5EZWZhdWx0Q01hcFJlYWRlckZhY3RvcnkgPSB2b2lkIDA7XG5leHBvcnRzLmdldERvY3VtZW50ID0gZ2V0RG9jdW1lbnQ7XG5leHBvcnRzLnNldFBERk5ldHdvcmtTdHJlYW1GYWN0b3J5ID0gc2V0UERGTmV0d29ya1N0cmVhbUZhY3Rvcnk7XG5leHBvcnRzLnZlcnNpb24gPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfZGlzcGxheV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oMSk7XG5cbnZhciBfZm9udF9sb2FkZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDcpO1xuXG52YXIgX25vZGVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDgpO1xuXG52YXIgX2Fubm90YXRpb25fc3RvcmFnZSA9IF9fd19wZGZqc19yZXF1aXJlX18oOSk7XG5cbnZhciBfY2FudmFzID0gX193X3BkZmpzX3JlcXVpcmVfXygxMCk7XG5cbnZhciBfd29ya2VyX29wdGlvbnMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEyKTtcblxudmFyIF9pc19ub2RlID0gX193X3BkZmpzX3JlcXVpcmVfXyg0KTtcblxudmFyIF9tZXNzYWdlX2hhbmRsZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEzKTtcblxudmFyIF9tZXRhZGF0YSA9IF9fd19wZGZqc19yZXF1aXJlX18oMTQpO1xuXG52YXIgX29wdGlvbmFsX2NvbnRlbnRfY29uZmlnID0gX193X3BkZmpzX3JlcXVpcmVfXygxNSk7XG5cbnZhciBfdHJhbnNwb3J0X3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMTYpO1xuXG52YXIgX3hmYV90ZXh0ID0gX193X3BkZmpzX3JlcXVpcmVfXygxNyk7XG5cbmNvbnN0IERFRkFVTFRfUkFOR0VfQ0hVTktfU0laRSA9IDY1NTM2O1xuY29uc3QgUkVOREVSSU5HX0NBTkNFTExFRF9USU1FT1VUID0gMTAwO1xuY29uc3QgRGVmYXVsdENhbnZhc0ZhY3RvcnkgPSBfaXNfbm9kZS5pc05vZGVKUyA/IF9ub2RlX3V0aWxzLk5vZGVDYW52YXNGYWN0b3J5IDogX2Rpc3BsYXlfdXRpbHMuRE9NQ2FudmFzRmFjdG9yeTtcbmV4cG9ydHMuRGVmYXVsdENhbnZhc0ZhY3RvcnkgPSBEZWZhdWx0Q2FudmFzRmFjdG9yeTtcbmNvbnN0IERlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeSA9IF9pc19ub2RlLmlzTm9kZUpTID8gX25vZGVfdXRpbHMuTm9kZUNNYXBSZWFkZXJGYWN0b3J5IDogX2Rpc3BsYXlfdXRpbHMuRE9NQ01hcFJlYWRlckZhY3Rvcnk7XG5leHBvcnRzLkRlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeSA9IERlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeTtcbmNvbnN0IERlZmF1bHRTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IF9pc19ub2RlLmlzTm9kZUpTID8gX25vZGVfdXRpbHMuTm9kZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5IDogX2Rpc3BsYXlfdXRpbHMuRE9NU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk7XG5leHBvcnRzLkRlZmF1bHRTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IERlZmF1bHRTdGFuZGFyZEZvbnREYXRhRmFjdG9yeTtcbmxldCBjcmVhdGVQREZOZXR3b3JrU3RyZWFtO1xuXG5mdW5jdGlvbiBzZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeShwZGZOZXR3b3JrU3RyZWFtRmFjdG9yeSkge1xuICBjcmVhdGVQREZOZXR3b3JrU3RyZWFtID0gcGRmTmV0d29ya1N0cmVhbUZhY3Rvcnk7XG59XG5cbmZ1bmN0aW9uIGdldERvY3VtZW50KHNyYykge1xuICBjb25zdCB0YXNrID0gbmV3IFBERkRvY3VtZW50TG9hZGluZ1Rhc2soKTtcbiAgbGV0IHNvdXJjZTtcblxuICBpZiAodHlwZW9mIHNyYyA9PT0gXCJzdHJpbmdcIiB8fCBzcmMgaW5zdGFuY2VvZiBVUkwpIHtcbiAgICBzb3VyY2UgPSB7XG4gICAgICB1cmw6IHNyY1xuICAgIH07XG4gIH0gZWxzZSBpZiAoKDAsIF91dGlsLmlzQXJyYXlCdWZmZXIpKHNyYykpIHtcbiAgICBzb3VyY2UgPSB7XG4gICAgICBkYXRhOiBzcmNcbiAgICB9O1xuICB9IGVsc2UgaWYgKHNyYyBpbnN0YW5jZW9mIFBERkRhdGFSYW5nZVRyYW5zcG9ydCkge1xuICAgIHNvdXJjZSA9IHtcbiAgICAgIHJhbmdlOiBzcmNcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2Ygc3JjICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHBhcmFtZXRlciBpbiBnZXREb2N1bWVudCwgXCIgKyBcIm5lZWQgZWl0aGVyIHN0cmluZywgVVJMLCBVaW50OEFycmF5LCBvciBwYXJhbWV0ZXIgb2JqZWN0LlwiKTtcbiAgICB9XG5cbiAgICBpZiAoIXNyYy51cmwgJiYgIXNyYy5kYXRhICYmICFzcmMucmFuZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcGFyYW1ldGVyIG9iamVjdDogbmVlZCBlaXRoZXIgLmRhdGEsIC5yYW5nZSBvciAudXJsXCIpO1xuICAgIH1cblxuICAgIHNvdXJjZSA9IHNyYztcbiAgfVxuXG4gIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGxldCByYW5nZVRyYW5zcG9ydCA9IG51bGwsXG4gICAgICB3b3JrZXIgPSBudWxsO1xuXG4gIGZvciAoY29uc3Qga2V5IGluIHNvdXJjZSkge1xuICAgIGNvbnN0IHZhbHVlID0gc291cmNlW2tleV07XG5cbiAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgY2FzZSBcInVybFwiOlxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwYXJhbXNba2V5XSA9IG5ldyBVUkwodmFsdWUsIHdpbmRvdy5sb2NhdGlvbikuaHJlZjtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYENhbm5vdCBjcmVhdGUgdmFsaWQgVVJMOiBcIiR7ZXh9XCIuYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB2YWx1ZSBpbnN0YW5jZW9mIFVSTCkge1xuICAgICAgICAgIHBhcmFtc1trZXldID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgUERGIHVybCBkYXRhOiBcIiArIFwiZWl0aGVyIHN0cmluZyBvciBVUkwtb2JqZWN0IGlzIGV4cGVjdGVkIGluIHRoZSB1cmwgcHJvcGVydHkuXCIpO1xuXG4gICAgICBjYXNlIFwicmFuZ2VcIjpcbiAgICAgICAgcmFuZ2VUcmFuc3BvcnQgPSB2YWx1ZTtcbiAgICAgICAgY29udGludWU7XG5cbiAgICAgIGNhc2UgXCJ3b3JrZXJcIjpcbiAgICAgICAgd29ya2VyID0gdmFsdWU7XG4gICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICBjYXNlIFwiZGF0YVwiOlxuICAgICAgICBpZiAoX2lzX25vZGUuaXNOb2RlSlMgJiYgdHlwZW9mIEJ1ZmZlciAhPT0gXCJ1bmRlZmluZWRcIiAmJiB2YWx1ZSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgICAgIHBhcmFtc1trZXldID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHBhcmFtc1trZXldID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwgJiYgIWlzTmFOKHZhbHVlLmxlbmd0aCkpIHtcbiAgICAgICAgICBwYXJhbXNba2V5XSA9IG5ldyBVaW50OEFycmF5KHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX3V0aWwuaXNBcnJheUJ1ZmZlcikodmFsdWUpKSB7XG4gICAgICAgICAgcGFyYW1zW2tleV0gPSBuZXcgVWludDhBcnJheSh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBQREYgYmluYXJ5IGRhdGE6IGVpdGhlciB0eXBlZCBhcnJheSwgXCIgKyBcInN0cmluZywgb3IgYXJyYXktbGlrZSBvYmplY3QgaXMgZXhwZWN0ZWQgaW4gdGhlIGRhdGEgcHJvcGVydHkuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcGFyYW1zW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHBhcmFtcy5yYW5nZUNodW5rU2l6ZSA9IHBhcmFtcy5yYW5nZUNodW5rU2l6ZSB8fCBERUZBVUxUX1JBTkdFX0NIVU5LX1NJWkU7XG4gIHBhcmFtcy5DTWFwUmVhZGVyRmFjdG9yeSA9IHBhcmFtcy5DTWFwUmVhZGVyRmFjdG9yeSB8fCBEZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnk7XG4gIHBhcmFtcy5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IHBhcmFtcy5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeSB8fCBEZWZhdWx0U3RhbmRhcmRGb250RGF0YUZhY3Rvcnk7XG4gIHBhcmFtcy5pZ25vcmVFcnJvcnMgPSBwYXJhbXMuc3RvcEF0RXJyb3JzICE9PSB0cnVlO1xuICBwYXJhbXMuZm9udEV4dHJhUHJvcGVydGllcyA9IHBhcmFtcy5mb250RXh0cmFQcm9wZXJ0aWVzID09PSB0cnVlO1xuICBwYXJhbXMucGRmQnVnID0gcGFyYW1zLnBkZkJ1ZyA9PT0gdHJ1ZTtcbiAgcGFyYW1zLmVuYWJsZVhmYSA9IHBhcmFtcy5lbmFibGVYZmEgPT09IHRydWU7XG5cbiAgaWYgKHR5cGVvZiBwYXJhbXMuZG9jQmFzZVVybCAhPT0gXCJzdHJpbmdcIiB8fCAoMCwgX2Rpc3BsYXlfdXRpbHMuaXNEYXRhU2NoZW1lKShwYXJhbXMuZG9jQmFzZVVybCkpIHtcbiAgICBwYXJhbXMuZG9jQmFzZVVybCA9IG51bGw7XG4gIH1cblxuICBpZiAoIU51bWJlci5pc0ludGVnZXIocGFyYW1zLm1heEltYWdlU2l6ZSkpIHtcbiAgICBwYXJhbXMubWF4SW1hZ2VTaXplID0gLTE7XG4gIH1cblxuICBpZiAodHlwZW9mIHBhcmFtcy51c2VXb3JrZXJGZXRjaCAhPT0gXCJib29sZWFuXCIpIHtcbiAgICBwYXJhbXMudXNlV29ya2VyRmV0Y2ggPSBwYXJhbXMuQ01hcFJlYWRlckZhY3RvcnkgPT09IF9kaXNwbGF5X3V0aWxzLkRPTUNNYXBSZWFkZXJGYWN0b3J5ICYmIHBhcmFtcy5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9PT0gX2Rpc3BsYXlfdXRpbHMuRE9NU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk7XG4gIH1cblxuICBpZiAodHlwZW9mIHBhcmFtcy5pc0V2YWxTdXBwb3J0ZWQgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgcGFyYW1zLmlzRXZhbFN1cHBvcnRlZCA9IHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIHBhcmFtcy5kaXNhYmxlRm9udEZhY2UgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgcGFyYW1zLmRpc2FibGVGb250RmFjZSA9IF9pc19ub2RlLmlzTm9kZUpTO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwYXJhbXMudXNlU3lzdGVtRm9udHMgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgcGFyYW1zLnVzZVN5c3RlbUZvbnRzID0gIV9pc19ub2RlLmlzTm9kZUpTICYmICFwYXJhbXMuZGlzYWJsZUZvbnRGYWNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwYXJhbXMub3duZXJEb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHBhcmFtcy5vd25lckRvY3VtZW50ID0gZ2xvYmFsVGhpcy5kb2N1bWVudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcGFyYW1zLmRpc2FibGVSYW5nZSAhPT0gXCJib29sZWFuXCIpIHtcbiAgICBwYXJhbXMuZGlzYWJsZVJhbmdlID0gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIHBhcmFtcy5kaXNhYmxlU3RyZWFtICE9PSBcImJvb2xlYW5cIikge1xuICAgIHBhcmFtcy5kaXNhYmxlU3RyZWFtID0gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIHBhcmFtcy5kaXNhYmxlQXV0b0ZldGNoICE9PSBcImJvb2xlYW5cIikge1xuICAgIHBhcmFtcy5kaXNhYmxlQXV0b0ZldGNoID0gZmFsc2U7XG4gIH1cblxuICAoMCwgX3V0aWwuc2V0VmVyYm9zaXR5TGV2ZWwpKHBhcmFtcy52ZXJib3NpdHkpO1xuXG4gIGlmICghd29ya2VyKSB7XG4gICAgY29uc3Qgd29ya2VyUGFyYW1zID0ge1xuICAgICAgdmVyYm9zaXR5OiBwYXJhbXMudmVyYm9zaXR5LFxuICAgICAgcG9ydDogX3dvcmtlcl9vcHRpb25zLkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyUG9ydFxuICAgIH07XG4gICAgd29ya2VyID0gd29ya2VyUGFyYW1zLnBvcnQgPyBQREZXb3JrZXIuZnJvbVBvcnQod29ya2VyUGFyYW1zKSA6IG5ldyBQREZXb3JrZXIod29ya2VyUGFyYW1zKTtcbiAgICB0YXNrLl93b3JrZXIgPSB3b3JrZXI7XG4gIH1cblxuICBjb25zdCBkb2NJZCA9IHRhc2suZG9jSWQ7XG4gIHdvcmtlci5wcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIGlmICh0YXNrLmRlc3Ryb3llZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGluZyBhYm9ydGVkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHdvcmtlcklkUHJvbWlzZSA9IF9mZXRjaERvY3VtZW50KHdvcmtlciwgcGFyYW1zLCByYW5nZVRyYW5zcG9ydCwgZG9jSWQpO1xuXG4gICAgY29uc3QgbmV0d29ya1N0cmVhbVByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgbGV0IG5ldHdvcmtTdHJlYW07XG5cbiAgICAgIGlmIChyYW5nZVRyYW5zcG9ydCkge1xuICAgICAgICBuZXR3b3JrU3RyZWFtID0gbmV3IF90cmFuc3BvcnRfc3RyZWFtLlBERkRhdGFUcmFuc3BvcnRTdHJlYW0oe1xuICAgICAgICAgIGxlbmd0aDogcGFyYW1zLmxlbmd0aCxcbiAgICAgICAgICBpbml0aWFsRGF0YTogcGFyYW1zLmluaXRpYWxEYXRhLFxuICAgICAgICAgIHByb2dyZXNzaXZlRG9uZTogcGFyYW1zLnByb2dyZXNzaXZlRG9uZSxcbiAgICAgICAgICBjb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZTogcGFyYW1zLmNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lLFxuICAgICAgICAgIGRpc2FibGVSYW5nZTogcGFyYW1zLmRpc2FibGVSYW5nZSxcbiAgICAgICAgICBkaXNhYmxlU3RyZWFtOiBwYXJhbXMuZGlzYWJsZVN0cmVhbVxuICAgICAgICB9LCByYW5nZVRyYW5zcG9ydCk7XG4gICAgICB9IGVsc2UgaWYgKCFwYXJhbXMuZGF0YSkge1xuICAgICAgICBuZXR3b3JrU3RyZWFtID0gY3JlYXRlUERGTmV0d29ya1N0cmVhbSh7XG4gICAgICAgICAgdXJsOiBwYXJhbXMudXJsLFxuICAgICAgICAgIGxlbmd0aDogcGFyYW1zLmxlbmd0aCxcbiAgICAgICAgICBodHRwSGVhZGVyczogcGFyYW1zLmh0dHBIZWFkZXJzLFxuICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogcGFyYW1zLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICByYW5nZUNodW5rU2l6ZTogcGFyYW1zLnJhbmdlQ2h1bmtTaXplLFxuICAgICAgICAgIGRpc2FibGVSYW5nZTogcGFyYW1zLmRpc2FibGVSYW5nZSxcbiAgICAgICAgICBkaXNhYmxlU3RyZWFtOiBwYXJhbXMuZGlzYWJsZVN0cmVhbVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZShuZXR3b3JrU3RyZWFtKTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW3dvcmtlcklkUHJvbWlzZSwgbmV0d29ya1N0cmVhbVByb21pc2VdKS50aGVuKGZ1bmN0aW9uIChbd29ya2VySWQsIG5ldHdvcmtTdHJlYW1dKSB7XG4gICAgICBpZiAodGFzay5kZXN0cm95ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGluZyBhYm9ydGVkXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXNzYWdlSGFuZGxlciA9IG5ldyBfbWVzc2FnZV9oYW5kbGVyLk1lc3NhZ2VIYW5kbGVyKGRvY0lkLCB3b3JrZXJJZCwgd29ya2VyLnBvcnQpO1xuICAgICAgY29uc3QgdHJhbnNwb3J0ID0gbmV3IFdvcmtlclRyYW5zcG9ydChtZXNzYWdlSGFuZGxlciwgdGFzaywgbmV0d29ya1N0cmVhbSwgcGFyYW1zKTtcbiAgICAgIHRhc2suX3RyYW5zcG9ydCA9IHRyYW5zcG9ydDtcbiAgICAgIG1lc3NhZ2VIYW5kbGVyLnNlbmQoXCJSZWFkeVwiLCBudWxsKTtcbiAgICB9KTtcbiAgfSkuY2F0Y2godGFzay5fY2FwYWJpbGl0eS5yZWplY3QpO1xuICByZXR1cm4gdGFzaztcbn1cblxuYXN5bmMgZnVuY3Rpb24gX2ZldGNoRG9jdW1lbnQod29ya2VyLCBzb3VyY2UsIHBkZkRhdGFSYW5nZVRyYW5zcG9ydCwgZG9jSWQpIHtcbiAgaWYgKHdvcmtlci5kZXN0cm95ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJXb3JrZXIgd2FzIGRlc3Ryb3llZFwiKTtcbiAgfVxuXG4gIGlmIChwZGZEYXRhUmFuZ2VUcmFuc3BvcnQpIHtcbiAgICBzb3VyY2UubGVuZ3RoID0gcGRmRGF0YVJhbmdlVHJhbnNwb3J0Lmxlbmd0aDtcbiAgICBzb3VyY2UuaW5pdGlhbERhdGEgPSBwZGZEYXRhUmFuZ2VUcmFuc3BvcnQuaW5pdGlhbERhdGE7XG4gICAgc291cmNlLnByb2dyZXNzaXZlRG9uZSA9IHBkZkRhdGFSYW5nZVRyYW5zcG9ydC5wcm9ncmVzc2l2ZURvbmU7XG4gICAgc291cmNlLmNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lID0gcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lO1xuICB9XG5cbiAgY29uc3Qgd29ya2VySWQgPSBhd2FpdCB3b3JrZXIubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0RG9jUmVxdWVzdFwiLCB7XG4gICAgZG9jSWQsXG4gICAgYXBpVmVyc2lvbjogJzIuMTIuMzEzJyxcbiAgICBzb3VyY2U6IHtcbiAgICAgIGRhdGE6IHNvdXJjZS5kYXRhLFxuICAgICAgdXJsOiBzb3VyY2UudXJsLFxuICAgICAgcGFzc3dvcmQ6IHNvdXJjZS5wYXNzd29yZCxcbiAgICAgIGRpc2FibGVBdXRvRmV0Y2g6IHNvdXJjZS5kaXNhYmxlQXV0b0ZldGNoLFxuICAgICAgcmFuZ2VDaHVua1NpemU6IHNvdXJjZS5yYW5nZUNodW5rU2l6ZSxcbiAgICAgIGxlbmd0aDogc291cmNlLmxlbmd0aFxuICAgIH0sXG4gICAgbWF4SW1hZ2VTaXplOiBzb3VyY2UubWF4SW1hZ2VTaXplLFxuICAgIGRpc2FibGVGb250RmFjZTogc291cmNlLmRpc2FibGVGb250RmFjZSxcbiAgICBkb2NCYXNlVXJsOiBzb3VyY2UuZG9jQmFzZVVybCxcbiAgICBpZ25vcmVFcnJvcnM6IHNvdXJjZS5pZ25vcmVFcnJvcnMsXG4gICAgaXNFdmFsU3VwcG9ydGVkOiBzb3VyY2UuaXNFdmFsU3VwcG9ydGVkLFxuICAgIGZvbnRFeHRyYVByb3BlcnRpZXM6IHNvdXJjZS5mb250RXh0cmFQcm9wZXJ0aWVzLFxuICAgIGVuYWJsZVhmYTogc291cmNlLmVuYWJsZVhmYSxcbiAgICB1c2VTeXN0ZW1Gb250czogc291cmNlLnVzZVN5c3RlbUZvbnRzLFxuICAgIGNNYXBVcmw6IHNvdXJjZS51c2VXb3JrZXJGZXRjaCA/IHNvdXJjZS5jTWFwVXJsIDogbnVsbCxcbiAgICBzdGFuZGFyZEZvbnREYXRhVXJsOiBzb3VyY2UudXNlV29ya2VyRmV0Y2ggPyBzb3VyY2Uuc3RhbmRhcmRGb250RGF0YVVybCA6IG51bGxcbiAgfSk7XG5cbiAgaWYgKHdvcmtlci5kZXN0cm95ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJXb3JrZXIgd2FzIGRlc3Ryb3llZFwiKTtcbiAgfVxuXG4gIHJldHVybiB3b3JrZXJJZDtcbn1cblxuY2xhc3MgUERGRG9jdW1lbnRMb2FkaW5nVGFzayB7XG4gIHN0YXRpYyBnZXQgaWRDb3VudGVycygpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJpZENvdW50ZXJzXCIsIHtcbiAgICAgIGRvYzogMFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fY2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICB0aGlzLl90cmFuc3BvcnQgPSBudWxsO1xuICAgIHRoaXMuX3dvcmtlciA9IG51bGw7XG4gICAgdGhpcy5kb2NJZCA9IGBkJHtQREZEb2N1bWVudExvYWRpbmdUYXNrLmlkQ291bnRlcnMuZG9jKyt9YDtcbiAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHRoaXMub25QYXNzd29yZCA9IG51bGw7XG4gICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgICB0aGlzLm9uVW5zdXBwb3J0ZWRGZWF0dXJlID0gbnVsbDtcbiAgfVxuXG4gIGdldCBwcm9taXNlKCkge1xuICAgIHJldHVybiB0aGlzLl9jYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cblxuICBhc3luYyBkZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICBhd2FpdCB0aGlzLl90cmFuc3BvcnQ/LmRlc3Ryb3koKTtcbiAgICB0aGlzLl90cmFuc3BvcnQgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuX3dvcmtlcikge1xuICAgICAgdGhpcy5fd29ya2VyLmRlc3Ryb3koKTtcblxuICAgICAgdGhpcy5fd29ya2VyID0gbnVsbDtcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnRzLlBERkRvY3VtZW50TG9hZGluZ1Rhc2sgPSBQREZEb2N1bWVudExvYWRpbmdUYXNrO1xuXG5jbGFzcyBQREZEYXRhUmFuZ2VUcmFuc3BvcnQge1xuICBjb25zdHJ1Y3RvcihsZW5ndGgsIGluaXRpYWxEYXRhLCBwcm9ncmVzc2l2ZURvbmUgPSBmYWxzZSwgY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWUgPSBudWxsKSB7XG4gICAgdGhpcy5sZW5ndGggPSBsZW5ndGg7XG4gICAgdGhpcy5pbml0aWFsRGF0YSA9IGluaXRpYWxEYXRhO1xuICAgIHRoaXMucHJvZ3Jlc3NpdmVEb25lID0gcHJvZ3Jlc3NpdmVEb25lO1xuICAgIHRoaXMuY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWUgPSBjb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZTtcbiAgICB0aGlzLl9yYW5nZUxpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuX3Byb2dyZXNzTGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fcHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fcHJvZ3Jlc3NpdmVEb25lTGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fcmVhZHlDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICB9XG5cbiAgYWRkUmFuZ2VMaXN0ZW5lcihsaXN0ZW5lcikge1xuICAgIHRoaXMuX3JhbmdlTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgYWRkUHJvZ3Jlc3NMaXN0ZW5lcihsaXN0ZW5lcikge1xuICAgIHRoaXMuX3Byb2dyZXNzTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgYWRkUHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgICB0aGlzLl9wcm9ncmVzc2l2ZVJlYWRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICBhZGRQcm9ncmVzc2l2ZURvbmVMaXN0ZW5lcihsaXN0ZW5lcikge1xuICAgIHRoaXMuX3Byb2dyZXNzaXZlRG9uZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIG9uRGF0YVJhbmdlKGJlZ2luLCBjaHVuaykge1xuICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy5fcmFuZ2VMaXN0ZW5lcnMpIHtcbiAgICAgIGxpc3RlbmVyKGJlZ2luLCBjaHVuayk7XG4gICAgfVxuICB9XG5cbiAgb25EYXRhUHJvZ3Jlc3MobG9hZGVkLCB0b3RhbCkge1xuICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLl9wcm9ncmVzc0xpc3RlbmVycykge1xuICAgICAgICBsaXN0ZW5lcihsb2FkZWQsIHRvdGFsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uRGF0YVByb2dyZXNzaXZlUmVhZChjaHVuaykge1xuICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLl9wcm9ncmVzc2l2ZVJlYWRMaXN0ZW5lcnMpIHtcbiAgICAgICAgbGlzdGVuZXIoY2h1bmspO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25EYXRhUHJvZ3Jlc3NpdmVEb25lKCkge1xuICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLl9wcm9ncmVzc2l2ZURvbmVMaXN0ZW5lcnMpIHtcbiAgICAgICAgbGlzdGVuZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHRyYW5zcG9ydFJlYWR5KCkge1xuICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gIH1cblxuICByZXF1ZXN0RGF0YVJhbmdlKGJlZ2luLCBlbmQpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIFBERkRhdGFSYW5nZVRyYW5zcG9ydC5yZXF1ZXN0RGF0YVJhbmdlXCIpO1xuICB9XG5cbiAgYWJvcnQoKSB7fVxuXG59XG5cbmV4cG9ydHMuUERGRGF0YVJhbmdlVHJhbnNwb3J0ID0gUERGRGF0YVJhbmdlVHJhbnNwb3J0O1xuXG5jbGFzcyBQREZEb2N1bWVudFByb3h5IHtcbiAgY29uc3RydWN0b3IocGRmSW5mbywgdHJhbnNwb3J0KSB7XG4gICAgdGhpcy5fcGRmSW5mbyA9IHBkZkluZm87XG4gICAgdGhpcy5fdHJhbnNwb3J0ID0gdHJhbnNwb3J0O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImZpbmdlcnByaW50XCIsIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgKDAsIF9kaXNwbGF5X3V0aWxzLmRlcHJlY2F0ZWQpKFwiYFBERkRvY3VtZW50UHJveHkuZmluZ2VycHJpbnRgLCBcIiArIFwicGxlYXNlIHVzZSBgUERGRG9jdW1lbnRQcm94eS5maW5nZXJwcmludHNgIGluc3RlYWQuXCIpO1xuICAgICAgICByZXR1cm4gdGhpcy5maW5nZXJwcmludHNbMF07XG4gICAgICB9XG5cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJnZXRTdGF0c1wiLCB7XG4gICAgICB2YWx1ZTogYXN5bmMgKCkgPT4ge1xuICAgICAgICAoMCwgX2Rpc3BsYXlfdXRpbHMuZGVwcmVjYXRlZCkoXCJgUERGRG9jdW1lbnRQcm94eS5nZXRTdGF0c2AsIFwiICsgXCJwbGVhc2UgdXNlIHRoZSBgUERGRG9jdW1lbnRQcm94eS5zdGF0c2AtZ2V0dGVyIGluc3RlYWQuXCIpO1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0cyB8fCB7XG4gICAgICAgICAgc3RyZWFtVHlwZXM6IHt9LFxuICAgICAgICAgIGZvbnRUeXBlczoge31cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldCBhbm5vdGF0aW9uU3RvcmFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmFubm90YXRpb25TdG9yYWdlO1xuICB9XG5cbiAgZ2V0IG51bVBhZ2VzKCkge1xuICAgIHJldHVybiB0aGlzLl9wZGZJbmZvLm51bVBhZ2VzO1xuICB9XG5cbiAgZ2V0IGZpbmdlcnByaW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5fcGRmSW5mby5maW5nZXJwcmludHM7XG4gIH1cblxuICBnZXQgc3RhdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5zdGF0cztcbiAgfVxuXG4gIGdldCBpc1B1cmVYZmEoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5fdHJhbnNwb3J0Ll9odG1sRm9yWGZhO1xuICB9XG5cbiAgZ2V0IGFsbFhmYUh0bWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5faHRtbEZvclhmYTtcbiAgfVxuXG4gIGdldFBhZ2UocGFnZU51bWJlcikge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0UGFnZShwYWdlTnVtYmVyKTtcbiAgfVxuXG4gIGdldFBhZ2VJbmRleChyZWYpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VJbmRleChyZWYpO1xuICB9XG5cbiAgZ2V0RGVzdGluYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0RGVzdGluYXRpb25zKCk7XG4gIH1cblxuICBnZXREZXN0aW5hdGlvbihpZCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0RGVzdGluYXRpb24oaWQpO1xuICB9XG5cbiAgZ2V0UGFnZUxhYmVscygpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VMYWJlbHMoKTtcbiAgfVxuXG4gIGdldFBhZ2VMYXlvdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlTGF5b3V0KCk7XG4gIH1cblxuICBnZXRQYWdlTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VNb2RlKCk7XG4gIH1cblxuICBnZXRWaWV3ZXJQcmVmZXJlbmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFZpZXdlclByZWZlcmVuY2VzKCk7XG4gIH1cblxuICBnZXRPcGVuQWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0T3BlbkFjdGlvbigpO1xuICB9XG5cbiAgZ2V0QXR0YWNobWVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRBdHRhY2htZW50cygpO1xuICB9XG5cbiAgZ2V0SmF2YVNjcmlwdCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldEphdmFTY3JpcHQoKTtcbiAgfVxuXG4gIGdldEpTQWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERvY0pTQWN0aW9ucygpO1xuICB9XG5cbiAgZ2V0T3V0bGluZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE91dGxpbmUoKTtcbiAgfVxuXG4gIGdldE9wdGlvbmFsQ29udGVudENvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE9wdGlvbmFsQ29udGVudENvbmZpZygpO1xuICB9XG5cbiAgZ2V0UGVybWlzc2lvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQZXJtaXNzaW9ucygpO1xuICB9XG5cbiAgZ2V0TWV0YWRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRNZXRhZGF0YSgpO1xuICB9XG5cbiAgZ2V0TWFya0luZm8oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRNYXJrSW5mbygpO1xuICB9XG5cbiAgZ2V0RGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERhdGEoKTtcbiAgfVxuXG4gIGdldERvd25sb2FkSW5mbygpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmRvd25sb2FkSW5mb0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIGNsZWFudXAoa2VlcExvYWRlZEZvbnRzID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LnN0YXJ0Q2xlYW51cChrZWVwTG9hZGVkRm9udHMgfHwgdGhpcy5pc1B1cmVYZmEpO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nVGFzay5kZXN0cm95KCk7XG4gIH1cblxuICBnZXQgbG9hZGluZ1BhcmFtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmxvYWRpbmdQYXJhbXM7XG4gIH1cblxuICBnZXQgbG9hZGluZ1Rhc2soKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5sb2FkaW5nVGFzaztcbiAgfVxuXG4gIHNhdmVEb2N1bWVudCgpIHtcbiAgICBpZiAodGhpcy5fdHJhbnNwb3J0LmFubm90YXRpb25TdG9yYWdlLnNpemUgPD0gMCkge1xuICAgICAgKDAsIF9kaXNwbGF5X3V0aWxzLmRlcHJlY2F0ZWQpKFwic2F2ZURvY3VtZW50IGNhbGxlZCB3aGlsZSBgYW5ub3RhdGlvblN0b3JhZ2VgIGlzIGVtcHR5LCBcIiArIFwicGxlYXNlIHVzZSB0aGUgZ2V0RGF0YS1tZXRob2QgaW5zdGVhZC5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5zYXZlRG9jdW1lbnQoKTtcbiAgfVxuXG4gIGdldEZpZWxkT2JqZWN0cygpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldEZpZWxkT2JqZWN0cygpO1xuICB9XG5cbiAgaGFzSlNBY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuaGFzSlNBY3Rpb25zKCk7XG4gIH1cblxuICBnZXRDYWxjdWxhdGlvbk9yZGVySWRzKCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0Q2FsY3VsYXRpb25PcmRlcklkcygpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QREZEb2N1bWVudFByb3h5ID0gUERGRG9jdW1lbnRQcm94eTtcblxuY2xhc3MgUERGUGFnZVByb3h5IHtcbiAgY29uc3RydWN0b3IocGFnZUluZGV4LCBwYWdlSW5mbywgdHJhbnNwb3J0LCBvd25lckRvY3VtZW50LCBwZGZCdWcgPSBmYWxzZSkge1xuICAgIHRoaXMuX3BhZ2VJbmRleCA9IHBhZ2VJbmRleDtcbiAgICB0aGlzLl9wYWdlSW5mbyA9IHBhZ2VJbmZvO1xuICAgIHRoaXMuX293bmVyRG9jdW1lbnQgPSBvd25lckRvY3VtZW50O1xuICAgIHRoaXMuX3RyYW5zcG9ydCA9IHRyYW5zcG9ydDtcbiAgICB0aGlzLl9zdGF0cyA9IHBkZkJ1ZyA/IG5ldyBfZGlzcGxheV91dGlscy5TdGF0VGltZXIoKSA6IG51bGw7XG4gICAgdGhpcy5fcGRmQnVnID0gcGRmQnVnO1xuICAgIHRoaXMuY29tbW9uT2JqcyA9IHRyYW5zcG9ydC5jb21tb25PYmpzO1xuICAgIHRoaXMub2JqcyA9IG5ldyBQREZPYmplY3RzKCk7XG4gICAgdGhpcy5jbGVhbnVwQWZ0ZXJSZW5kZXIgPSBmYWxzZTtcbiAgICB0aGlzLnBlbmRpbmdDbGVhbnVwID0gZmFsc2U7XG4gICAgdGhpcy5faW50ZW50U3RhdGVzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX2Fubm90YXRpb25Qcm9taXNlcyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0IHBhZ2VOdW1iZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VJbmRleCArIDE7XG4gIH1cblxuICBnZXQgcm90YXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9wYWdlSW5mby5yb3RhdGU7XG4gIH1cblxuICBnZXQgcmVmKCkge1xuICAgIHJldHVybiB0aGlzLl9wYWdlSW5mby5yZWY7XG4gIH1cblxuICBnZXQgdXNlclVuaXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VJbmZvLnVzZXJVbml0O1xuICB9XG5cbiAgZ2V0IHZpZXcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VJbmZvLnZpZXc7XG4gIH1cblxuICBnZXRWaWV3cG9ydCh7XG4gICAgc2NhbGUsXG4gICAgcm90YXRpb24gPSB0aGlzLnJvdGF0ZSxcbiAgICBvZmZzZXRYID0gMCxcbiAgICBvZmZzZXRZID0gMCxcbiAgICBkb250RmxpcCA9IGZhbHNlXG4gIH0gPSB7fSkge1xuICAgIHJldHVybiBuZXcgX2Rpc3BsYXlfdXRpbHMuUGFnZVZpZXdwb3J0KHtcbiAgICAgIHZpZXdCb3g6IHRoaXMudmlldyxcbiAgICAgIHNjYWxlLFxuICAgICAgcm90YXRpb24sXG4gICAgICBvZmZzZXRYLFxuICAgICAgb2Zmc2V0WSxcbiAgICAgIGRvbnRGbGlwXG4gICAgfSk7XG4gIH1cblxuICBnZXRBbm5vdGF0aW9ucyh7XG4gICAgaW50ZW50ID0gXCJkaXNwbGF5XCJcbiAgfSA9IHt9KSB7XG4gICAgY29uc3QgaW50ZW50QXJncyA9IHRoaXMuX3RyYW5zcG9ydC5nZXRSZW5kZXJpbmdJbnRlbnQoaW50ZW50KTtcblxuICAgIGxldCBwcm9taXNlID0gdGhpcy5fYW5ub3RhdGlvblByb21pc2VzLmdldChpbnRlbnRBcmdzLmNhY2hlS2V5KTtcblxuICAgIGlmICghcHJvbWlzZSkge1xuICAgICAgcHJvbWlzZSA9IHRoaXMuX3RyYW5zcG9ydC5nZXRBbm5vdGF0aW9ucyh0aGlzLl9wYWdlSW5kZXgsIGludGVudEFyZ3MucmVuZGVyaW5nSW50ZW50KTtcblxuICAgICAgdGhpcy5fYW5ub3RhdGlvblByb21pc2VzLnNldChpbnRlbnRBcmdzLmNhY2hlS2V5LCBwcm9taXNlKTtcblxuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihhbm5vdGF0aW9ucyA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgYW5ub3RhdGlvbiBvZiBhbm5vdGF0aW9ucykge1xuICAgICAgICAgIGlmIChhbm5vdGF0aW9uLnRpdGxlT2JqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhbm5vdGF0aW9uLCBcInRpdGxlXCIsIHtcbiAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICgwLCBfZGlzcGxheV91dGlscy5kZXByZWNhdGVkKShcImB0aXRsZWAtcHJvcGVydHkgb24gYW5ub3RhdGlvbiwgcGxlYXNlIHVzZSBgdGl0bGVPYmpgIGluc3RlYWQuXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhbm5vdGF0aW9uLnRpdGxlT2JqLnN0cjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYW5ub3RhdGlvbi5jb250ZW50c09iaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYW5ub3RhdGlvbiwgXCJjb250ZW50c1wiLCB7XG4gICAgICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgICAgICAoMCwgX2Rpc3BsYXlfdXRpbHMuZGVwcmVjYXRlZCkoXCJgY29udGVudHNgLXByb3BlcnR5IG9uIGFubm90YXRpb24sIHBsZWFzZSB1c2UgYGNvbnRlbnRzT2JqYCBpbnN0ZWFkLlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYW5ub3RhdGlvbi5jb250ZW50c09iai5zdHI7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFubm90YXRpb25zO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBnZXRKU0FjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2pzQWN0aW9uc1Byb21pc2UgfHw9IHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlSlNBY3Rpb25zKHRoaXMuX3BhZ2VJbmRleCk7XG4gIH1cblxuICBhc3luYyBnZXRYZmEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5faHRtbEZvclhmYT8uY2hpbGRyZW5bdGhpcy5fcGFnZUluZGV4XSB8fCBudWxsO1xuICB9XG5cbiAgcmVuZGVyKHtcbiAgICBjYW52YXNDb250ZXh0LFxuICAgIHZpZXdwb3J0LFxuICAgIGludGVudCA9IFwiZGlzcGxheVwiLFxuICAgIGFubm90YXRpb25Nb2RlID0gX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFLFxuICAgIHRyYW5zZm9ybSA9IG51bGwsXG4gICAgaW1hZ2VMYXllciA9IG51bGwsXG4gICAgY2FudmFzRmFjdG9yeSA9IG51bGwsXG4gICAgYmFja2dyb3VuZCA9IG51bGwsXG4gICAgb3B0aW9uYWxDb250ZW50Q29uZmlnUHJvbWlzZSA9IG51bGwsXG4gICAgYW5ub3RhdGlvbkNhbnZhc01hcCA9IG51bGxcbiAgfSkge1xuICAgIGlmIChhcmd1bWVudHNbMF0/LnJlbmRlckludGVyYWN0aXZlRm9ybXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgKDAsIF9kaXNwbGF5X3V0aWxzLmRlcHJlY2F0ZWQpKFwicmVuZGVyIG5vIGxvbmdlciBhY2NlcHRzIHRoZSBgcmVuZGVySW50ZXJhY3RpdmVGb3Jtc2Atb3B0aW9uLCBcIiArIFwicGxlYXNlIHVzZSB0aGUgYGFubm90YXRpb25Nb2RlYC1vcHRpb24gaW5zdGVhZC5cIik7XG5cbiAgICAgIGlmIChhcmd1bWVudHNbMF0ucmVuZGVySW50ZXJhY3RpdmVGb3JtcyA9PT0gdHJ1ZSAmJiBhbm5vdGF0aW9uTW9kZSA9PT0gX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFKSB7XG4gICAgICAgIGFubm90YXRpb25Nb2RlID0gX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFX0ZPUk1TO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhcmd1bWVudHNbMF0/LmluY2x1ZGVBbm5vdGF0aW9uU3RvcmFnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAoMCwgX2Rpc3BsYXlfdXRpbHMuZGVwcmVjYXRlZCkoXCJyZW5kZXIgbm8gbG9uZ2VyIGFjY2VwdHMgdGhlIGBpbmNsdWRlQW5ub3RhdGlvblN0b3JhZ2VgLW9wdGlvbiwgXCIgKyBcInBsZWFzZSB1c2UgdGhlIGBhbm5vdGF0aW9uTW9kZWAtb3B0aW9uIGluc3RlYWQuXCIpO1xuXG4gICAgICBpZiAoYXJndW1lbnRzWzBdLmluY2x1ZGVBbm5vdGF0aW9uU3RvcmFnZSA9PT0gdHJ1ZSAmJiBhbm5vdGF0aW9uTW9kZSA9PT0gX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFKSB7XG4gICAgICAgIGFubm90YXRpb25Nb2RlID0gX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFX1NUT1JBR0U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0YXRzKSB7XG4gICAgICB0aGlzLl9zdGF0cy50aW1lKFwiT3ZlcmFsbFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRlbnRBcmdzID0gdGhpcy5fdHJhbnNwb3J0LmdldFJlbmRlcmluZ0ludGVudChpbnRlbnQsIGFubm90YXRpb25Nb2RlKTtcblxuICAgIHRoaXMucGVuZGluZ0NsZWFudXAgPSBmYWxzZTtcblxuICAgIGlmICghb3B0aW9uYWxDb250ZW50Q29uZmlnUHJvbWlzZSkge1xuICAgICAgb3B0aW9uYWxDb250ZW50Q29uZmlnUHJvbWlzZSA9IHRoaXMuX3RyYW5zcG9ydC5nZXRPcHRpb25hbENvbnRlbnRDb25maWcoKTtcbiAgICB9XG5cbiAgICBsZXQgaW50ZW50U3RhdGUgPSB0aGlzLl9pbnRlbnRTdGF0ZXMuZ2V0KGludGVudEFyZ3MuY2FjaGVLZXkpO1xuXG4gICAgaWYgKCFpbnRlbnRTdGF0ZSkge1xuICAgICAgaW50ZW50U3RhdGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICB0aGlzLl9pbnRlbnRTdGF0ZXMuc2V0KGludGVudEFyZ3MuY2FjaGVLZXksIGludGVudFN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAoaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyQ2FuY2VsVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KGludGVudFN0YXRlLnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQpO1xuICAgICAgaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyQ2FuY2VsVGltZW91dCA9IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY2FudmFzRmFjdG9yeUluc3RhbmNlID0gY2FudmFzRmFjdG9yeSB8fCBuZXcgRGVmYXVsdENhbnZhc0ZhY3Rvcnkoe1xuICAgICAgb3duZXJEb2N1bWVudDogdGhpcy5fb3duZXJEb2N1bWVudFxuICAgIH0pO1xuICAgIGNvbnN0IGludGVudFByaW50ID0gISEoaW50ZW50QXJncy5yZW5kZXJpbmdJbnRlbnQgJiBfdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLlBSSU5UKTtcblxuICAgIGlmICghaW50ZW50U3RhdGUuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eSkge1xuICAgICAgaW50ZW50U3RhdGUuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgIGludGVudFN0YXRlLm9wZXJhdG9yTGlzdCA9IHtcbiAgICAgICAgZm5BcnJheTogW10sXG4gICAgICAgIGFyZ3NBcnJheTogW10sXG4gICAgICAgIGxhc3RDaHVuazogZmFsc2VcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLl9zdGF0cykge1xuICAgICAgICB0aGlzLl9zdGF0cy50aW1lKFwiUGFnZSBSZXF1ZXN0XCIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9wdW1wT3BlcmF0b3JMaXN0KGludGVudEFyZ3MpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBsZXRlID0gZXJyb3IgPT4ge1xuICAgICAgaW50ZW50U3RhdGUucmVuZGVyVGFza3MuZGVsZXRlKGludGVybmFsUmVuZGVyVGFzayk7XG5cbiAgICAgIGlmICh0aGlzLmNsZWFudXBBZnRlclJlbmRlciB8fCBpbnRlbnRQcmludCkge1xuICAgICAgICB0aGlzLnBlbmRpbmdDbGVhbnVwID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fdHJ5Q2xlYW51cCgpO1xuXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaW50ZXJuYWxSZW5kZXJUYXNrLmNhcGFiaWxpdHkucmVqZWN0KGVycm9yKTtcblxuICAgICAgICB0aGlzLl9hYm9ydE9wZXJhdG9yTGlzdCh7XG4gICAgICAgICAgaW50ZW50U3RhdGUsXG4gICAgICAgICAgcmVhc29uOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoZXJyb3IpXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW50ZXJuYWxSZW5kZXJUYXNrLmNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fc3RhdHMpIHtcbiAgICAgICAgdGhpcy5fc3RhdHMudGltZUVuZChcIlJlbmRlcmluZ1wiKTtcblxuICAgICAgICB0aGlzLl9zdGF0cy50aW1lRW5kKFwiT3ZlcmFsbFwiKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaW50ZXJuYWxSZW5kZXJUYXNrID0gbmV3IEludGVybmFsUmVuZGVyVGFzayh7XG4gICAgICBjYWxsYmFjazogY29tcGxldGUsXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgY2FudmFzQ29udGV4dCxcbiAgICAgICAgdmlld3BvcnQsXG4gICAgICAgIHRyYW5zZm9ybSxcbiAgICAgICAgaW1hZ2VMYXllcixcbiAgICAgICAgYmFja2dyb3VuZFxuICAgICAgfSxcbiAgICAgIG9ianM6IHRoaXMub2JqcyxcbiAgICAgIGNvbW1vbk9ianM6IHRoaXMuY29tbW9uT2JqcyxcbiAgICAgIGFubm90YXRpb25DYW52YXNNYXAsXG4gICAgICBvcGVyYXRvckxpc3Q6IGludGVudFN0YXRlLm9wZXJhdG9yTGlzdCxcbiAgICAgIHBhZ2VJbmRleDogdGhpcy5fcGFnZUluZGV4LFxuICAgICAgY2FudmFzRmFjdG9yeTogY2FudmFzRmFjdG9yeUluc3RhbmNlLFxuICAgICAgdXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lOiAhaW50ZW50UHJpbnQsXG4gICAgICBwZGZCdWc6IHRoaXMuX3BkZkJ1Z1xuICAgIH0pO1xuICAgIChpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcyB8fD0gbmV3IFNldCgpKS5hZGQoaW50ZXJuYWxSZW5kZXJUYXNrKTtcbiAgICBjb25zdCByZW5kZXJUYXNrID0gaW50ZXJuYWxSZW5kZXJUYXNrLnRhc2s7XG4gICAgUHJvbWlzZS5hbGwoW2ludGVudFN0YXRlLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkucHJvbWlzZSwgb3B0aW9uYWxDb250ZW50Q29uZmlnUHJvbWlzZV0pLnRoZW4oKFt0cmFuc3BhcmVuY3ksIG9wdGlvbmFsQ29udGVudENvbmZpZ10pID0+IHtcbiAgICAgIGlmICh0aGlzLnBlbmRpbmdDbGVhbnVwKSB7XG4gICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3N0YXRzKSB7XG4gICAgICAgIHRoaXMuX3N0YXRzLnRpbWUoXCJSZW5kZXJpbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGludGVybmFsUmVuZGVyVGFzay5pbml0aWFsaXplR3JhcGhpY3Moe1xuICAgICAgICB0cmFuc3BhcmVuY3ksXG4gICAgICAgIG9wdGlvbmFsQ29udGVudENvbmZpZ1xuICAgICAgfSk7XG4gICAgICBpbnRlcm5hbFJlbmRlclRhc2sub3BlcmF0b3JMaXN0Q2hhbmdlZCgpO1xuICAgIH0pLmNhdGNoKGNvbXBsZXRlKTtcbiAgICByZXR1cm4gcmVuZGVyVGFzaztcbiAgfVxuXG4gIGdldE9wZXJhdG9yTGlzdCh7XG4gICAgaW50ZW50ID0gXCJkaXNwbGF5XCIsXG4gICAgYW5ub3RhdGlvbk1vZGUgPSBfdXRpbC5Bbm5vdGF0aW9uTW9kZS5FTkFCTEVcbiAgfSA9IHt9KSB7XG4gICAgZnVuY3Rpb24gb3BlcmF0b3JMaXN0Q2hhbmdlZCgpIHtcbiAgICAgIGlmIChpbnRlbnRTdGF0ZS5vcGVyYXRvckxpc3QubGFzdENodW5rKSB7XG4gICAgICAgIGludGVudFN0YXRlLm9wTGlzdFJlYWRDYXBhYmlsaXR5LnJlc29sdmUoaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0KTtcbiAgICAgICAgaW50ZW50U3RhdGUucmVuZGVyVGFza3MuZGVsZXRlKG9wTGlzdFRhc2spO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGludGVudEFyZ3MgPSB0aGlzLl90cmFuc3BvcnQuZ2V0UmVuZGVyaW5nSW50ZW50KGludGVudCwgYW5ub3RhdGlvbk1vZGUsIHRydWUpO1xuXG4gICAgbGV0IGludGVudFN0YXRlID0gdGhpcy5faW50ZW50U3RhdGVzLmdldChpbnRlbnRBcmdzLmNhY2hlS2V5KTtcblxuICAgIGlmICghaW50ZW50U3RhdGUpIHtcbiAgICAgIGludGVudFN0YXRlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgdGhpcy5faW50ZW50U3RhdGVzLnNldChpbnRlbnRBcmdzLmNhY2hlS2V5LCBpbnRlbnRTdGF0ZSk7XG4gICAgfVxuXG4gICAgbGV0IG9wTGlzdFRhc2s7XG5cbiAgICBpZiAoIWludGVudFN0YXRlLm9wTGlzdFJlYWRDYXBhYmlsaXR5KSB7XG4gICAgICBvcExpc3RUYXNrID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIG9wTGlzdFRhc2sub3BlcmF0b3JMaXN0Q2hhbmdlZCA9IG9wZXJhdG9yTGlzdENoYW5nZWQ7XG4gICAgICBpbnRlbnRTdGF0ZS5vcExpc3RSZWFkQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgIChpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcyB8fD0gbmV3IFNldCgpKS5hZGQob3BMaXN0VGFzayk7XG4gICAgICBpbnRlbnRTdGF0ZS5vcGVyYXRvckxpc3QgPSB7XG4gICAgICAgIGZuQXJyYXk6IFtdLFxuICAgICAgICBhcmdzQXJyYXk6IFtdLFxuICAgICAgICBsYXN0Q2h1bms6IGZhbHNlXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5fc3RhdHMpIHtcbiAgICAgICAgdGhpcy5fc3RhdHMudGltZShcIlBhZ2UgUmVxdWVzdFwiKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcHVtcE9wZXJhdG9yTGlzdChpbnRlbnRBcmdzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZW50U3RhdGUub3BMaXN0UmVhZENhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIHN0cmVhbVRleHRDb250ZW50KHtcbiAgICBub3JtYWxpemVXaGl0ZXNwYWNlID0gZmFsc2UsXG4gICAgZGlzYWJsZUNvbWJpbmVUZXh0SXRlbXMgPSBmYWxzZSxcbiAgICBpbmNsdWRlTWFya2VkQ29udGVudCA9IGZhbHNlXG4gIH0gPSB7fSkge1xuICAgIGNvbnN0IFRFWFRfQ09OVEVOVF9DSFVOS19TSVpFID0gMTAwO1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhTdHJlYW0oXCJHZXRUZXh0Q29udGVudFwiLCB7XG4gICAgICBwYWdlSW5kZXg6IHRoaXMuX3BhZ2VJbmRleCxcbiAgICAgIG5vcm1hbGl6ZVdoaXRlc3BhY2U6IG5vcm1hbGl6ZVdoaXRlc3BhY2UgPT09IHRydWUsXG4gICAgICBjb21iaW5lVGV4dEl0ZW1zOiBkaXNhYmxlQ29tYmluZVRleHRJdGVtcyAhPT0gdHJ1ZSxcbiAgICAgIGluY2x1ZGVNYXJrZWRDb250ZW50OiBpbmNsdWRlTWFya2VkQ29udGVudCA9PT0gdHJ1ZVxuICAgIH0sIHtcbiAgICAgIGhpZ2hXYXRlck1hcms6IFRFWFRfQ09OVEVOVF9DSFVOS19TSVpFLFxuXG4gICAgICBzaXplKHRleHRDb250ZW50KSB7XG4gICAgICAgIHJldHVybiB0ZXh0Q29udGVudC5pdGVtcy5sZW5ndGg7XG4gICAgICB9XG5cbiAgICB9KTtcbiAgfVxuXG4gIGdldFRleHRDb250ZW50KHBhcmFtcyA9IHt9KSB7XG4gICAgaWYgKHRoaXMuX3RyYW5zcG9ydC5faHRtbEZvclhmYSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0WGZhKCkudGhlbih4ZmEgPT4ge1xuICAgICAgICByZXR1cm4gX3hmYV90ZXh0LlhmYVRleHQudGV4dENvbnRlbnQoeGZhKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJlYWRhYmxlU3RyZWFtID0gdGhpcy5zdHJlYW1UZXh0Q29udGVudChwYXJhbXMpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBwdW1wKCkge1xuICAgICAgICByZWFkZXIucmVhZCgpLnRoZW4oZnVuY3Rpb24gKHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBkb25lXG4gICAgICAgIH0pIHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmVzb2x2ZSh0ZXh0Q29udGVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0ZXh0Q29udGVudC5zdHlsZXMsIHZhbHVlLnN0eWxlcyk7XG4gICAgICAgICAgdGV4dENvbnRlbnQuaXRlbXMucHVzaCguLi52YWx1ZS5pdGVtcyk7XG4gICAgICAgICAgcHVtcCgpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgIGNvbnN0IHRleHRDb250ZW50ID0ge1xuICAgICAgICBpdGVtczogW10sXG4gICAgICAgIHN0eWxlczogT2JqZWN0LmNyZWF0ZShudWxsKVxuICAgICAgfTtcbiAgICAgIHB1bXAoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFN0cnVjdFRyZWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0cnVjdFRyZWVQcm9taXNlIHx8PSB0aGlzLl90cmFuc3BvcnQuZ2V0U3RydWN0VHJlZSh0aGlzLl9wYWdlSW5kZXgpO1xuICB9XG5cbiAgX2Rlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgIGNvbnN0IHdhaXRPbiA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBpbnRlbnRTdGF0ZSBvZiB0aGlzLl9pbnRlbnRTdGF0ZXMudmFsdWVzKCkpIHtcbiAgICAgIHRoaXMuX2Fib3J0T3BlcmF0b3JMaXN0KHtcbiAgICAgICAgaW50ZW50U3RhdGUsXG4gICAgICAgIHJlYXNvbjogbmV3IEVycm9yKFwiUGFnZSB3YXMgZGVzdHJveWVkLlwiKSxcbiAgICAgICAgZm9yY2U6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaW50ZW50U3RhdGUub3BMaXN0UmVhZENhcGFiaWxpdHkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgaW50ZXJuYWxSZW5kZXJUYXNrIG9mIGludGVudFN0YXRlLnJlbmRlclRhc2tzKSB7XG4gICAgICAgIHdhaXRPbi5wdXNoKGludGVybmFsUmVuZGVyVGFzay5jb21wbGV0ZWQpO1xuICAgICAgICBpbnRlcm5hbFJlbmRlclRhc2suY2FuY2VsKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vYmpzLmNsZWFyKCk7XG5cbiAgICB0aGlzLl9hbm5vdGF0aW9uUHJvbWlzZXMuY2xlYXIoKTtcblxuICAgIHRoaXMuX2pzQWN0aW9uc1Byb21pc2UgPSBudWxsO1xuICAgIHRoaXMuX3N0cnVjdFRyZWVQcm9taXNlID0gbnVsbDtcbiAgICB0aGlzLnBlbmRpbmdDbGVhbnVwID0gZmFsc2U7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHdhaXRPbik7XG4gIH1cblxuICBjbGVhbnVwKHJlc2V0U3RhdHMgPSBmYWxzZSkge1xuICAgIHRoaXMucGVuZGluZ0NsZWFudXAgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzLl90cnlDbGVhbnVwKHJlc2V0U3RhdHMpO1xuICB9XG5cbiAgX3RyeUNsZWFudXAocmVzZXRTdGF0cyA9IGZhbHNlKSB7XG4gICAgaWYgKCF0aGlzLnBlbmRpbmdDbGVhbnVwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB7XG4gICAgICByZW5kZXJUYXNrcyxcbiAgICAgIG9wZXJhdG9yTGlzdFxuICAgIH0gb2YgdGhpcy5faW50ZW50U3RhdGVzLnZhbHVlcygpKSB7XG4gICAgICBpZiAocmVuZGVyVGFza3Muc2l6ZSA+IDAgfHwgIW9wZXJhdG9yTGlzdC5sYXN0Q2h1bmspIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2ludGVudFN0YXRlcy5jbGVhcigpO1xuXG4gICAgdGhpcy5vYmpzLmNsZWFyKCk7XG5cbiAgICB0aGlzLl9hbm5vdGF0aW9uUHJvbWlzZXMuY2xlYXIoKTtcblxuICAgIHRoaXMuX2pzQWN0aW9uc1Byb21pc2UgPSBudWxsO1xuICAgIHRoaXMuX3N0cnVjdFRyZWVQcm9taXNlID0gbnVsbDtcblxuICAgIGlmIChyZXNldFN0YXRzICYmIHRoaXMuX3N0YXRzKSB7XG4gICAgICB0aGlzLl9zdGF0cyA9IG5ldyBfZGlzcGxheV91dGlscy5TdGF0VGltZXIoKTtcbiAgICB9XG5cbiAgICB0aGlzLnBlbmRpbmdDbGVhbnVwID0gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBfc3RhcnRSZW5kZXJQYWdlKHRyYW5zcGFyZW5jeSwgY2FjaGVLZXkpIHtcbiAgICBjb25zdCBpbnRlbnRTdGF0ZSA9IHRoaXMuX2ludGVudFN0YXRlcy5nZXQoY2FjaGVLZXkpO1xuXG4gICAgaWYgKCFpbnRlbnRTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdGF0cykge1xuICAgICAgdGhpcy5fc3RhdHMudGltZUVuZChcIlBhZ2UgUmVxdWVzdFwiKTtcbiAgICB9XG5cbiAgICBpZiAoaW50ZW50U3RhdGUuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eSkge1xuICAgICAgaW50ZW50U3RhdGUuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eS5yZXNvbHZlKHRyYW5zcGFyZW5jeSk7XG4gICAgfVxuICB9XG5cbiAgX3JlbmRlclBhZ2VDaHVuayhvcGVyYXRvckxpc3RDaHVuaywgaW50ZW50U3RhdGUpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBvcGVyYXRvckxpc3RDaHVuay5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBpbnRlbnRTdGF0ZS5vcGVyYXRvckxpc3QuZm5BcnJheS5wdXNoKG9wZXJhdG9yTGlzdENodW5rLmZuQXJyYXlbaV0pO1xuICAgICAgaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0LmFyZ3NBcnJheS5wdXNoKG9wZXJhdG9yTGlzdENodW5rLmFyZ3NBcnJheVtpXSk7XG4gICAgfVxuXG4gICAgaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0Lmxhc3RDaHVuayA9IG9wZXJhdG9yTGlzdENodW5rLmxhc3RDaHVuaztcblxuICAgIGZvciAoY29uc3QgaW50ZXJuYWxSZW5kZXJUYXNrIG9mIGludGVudFN0YXRlLnJlbmRlclRhc2tzKSB7XG4gICAgICBpbnRlcm5hbFJlbmRlclRhc2sub3BlcmF0b3JMaXN0Q2hhbmdlZCgpO1xuICAgIH1cblxuICAgIGlmIChvcGVyYXRvckxpc3RDaHVuay5sYXN0Q2h1bmspIHtcbiAgICAgIHRoaXMuX3RyeUNsZWFudXAoKTtcbiAgICB9XG4gIH1cblxuICBfcHVtcE9wZXJhdG9yTGlzdCh7XG4gICAgcmVuZGVyaW5nSW50ZW50LFxuICAgIGNhY2hlS2V5XG4gIH0pIHtcbiAgICBjb25zdCByZWFkYWJsZVN0cmVhbSA9IHRoaXMuX3RyYW5zcG9ydC5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFN0cmVhbShcIkdldE9wZXJhdG9yTGlzdFwiLCB7XG4gICAgICBwYWdlSW5kZXg6IHRoaXMuX3BhZ2VJbmRleCxcbiAgICAgIGludGVudDogcmVuZGVyaW5nSW50ZW50LFxuICAgICAgY2FjaGVLZXksXG4gICAgICBhbm5vdGF0aW9uU3RvcmFnZTogcmVuZGVyaW5nSW50ZW50ICYgX3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19TVE9SQUdFID8gdGhpcy5fdHJhbnNwb3J0LmFubm90YXRpb25TdG9yYWdlLnNlcmlhbGl6YWJsZSA6IG51bGxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlYWRlciA9IHJlYWRhYmxlU3RyZWFtLmdldFJlYWRlcigpO1xuXG4gICAgY29uc3QgaW50ZW50U3RhdGUgPSB0aGlzLl9pbnRlbnRTdGF0ZXMuZ2V0KGNhY2hlS2V5KTtcblxuICAgIGludGVudFN0YXRlLnN0cmVhbVJlYWRlciA9IHJlYWRlcjtcblxuICAgIGNvbnN0IHB1bXAgPSAoKSA9PiB7XG4gICAgICByZWFkZXIucmVhZCgpLnRoZW4oKHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGRvbmVcbiAgICAgIH0pID0+IHtcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICBpbnRlbnRTdGF0ZS5zdHJlYW1SZWFkZXIgPSBudWxsO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl90cmFuc3BvcnQuZGVzdHJveWVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmVuZGVyUGFnZUNodW5rKHZhbHVlLCBpbnRlbnRTdGF0ZSk7XG5cbiAgICAgICAgcHVtcCgpO1xuICAgICAgfSwgcmVhc29uID0+IHtcbiAgICAgICAgaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyID0gbnVsbDtcblxuICAgICAgICBpZiAodGhpcy5fdHJhbnNwb3J0LmRlc3Ryb3llZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnRlbnRTdGF0ZS5vcGVyYXRvckxpc3QpIHtcbiAgICAgICAgICBpbnRlbnRTdGF0ZS5vcGVyYXRvckxpc3QubGFzdENodW5rID0gdHJ1ZTtcblxuICAgICAgICAgIGZvciAoY29uc3QgaW50ZXJuYWxSZW5kZXJUYXNrIG9mIGludGVudFN0YXRlLnJlbmRlclRhc2tzKSB7XG4gICAgICAgICAgICBpbnRlcm5hbFJlbmRlclRhc2sub3BlcmF0b3JMaXN0Q2hhbmdlZCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX3RyeUNsZWFudXAoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnRlbnRTdGF0ZS5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5KSB7XG4gICAgICAgICAgaW50ZW50U3RhdGUuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eS5yZWplY3QocmVhc29uKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbnRlbnRTdGF0ZS5vcExpc3RSZWFkQ2FwYWJpbGl0eSkge1xuICAgICAgICAgIGludGVudFN0YXRlLm9wTGlzdFJlYWRDYXBhYmlsaXR5LnJlamVjdChyZWFzb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHB1bXAoKTtcbiAgfVxuXG4gIF9hYm9ydE9wZXJhdG9yTGlzdCh7XG4gICAgaW50ZW50U3RhdGUsXG4gICAgcmVhc29uLFxuICAgIGZvcmNlID0gZmFsc2VcbiAgfSkge1xuICAgIGlmICghaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFmb3JjZSkge1xuICAgICAgaWYgKGludGVudFN0YXRlLnJlbmRlclRhc2tzLnNpemUgPiAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIF9kaXNwbGF5X3V0aWxzLlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbikge1xuICAgICAgICBpbnRlbnRTdGF0ZS5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fYWJvcnRPcGVyYXRvckxpc3Qoe1xuICAgICAgICAgICAgaW50ZW50U3RhdGUsXG4gICAgICAgICAgICByZWFzb24sXG4gICAgICAgICAgICBmb3JjZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyQ2FuY2VsVGltZW91dCA9IG51bGw7XG4gICAgICAgIH0sIFJFTkRFUklOR19DQU5DRUxMRURfVElNRU9VVCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbnRlbnRTdGF0ZS5zdHJlYW1SZWFkZXIuY2FuY2VsKG5ldyBfdXRpbC5BYm9ydEV4Y2VwdGlvbihyZWFzb24ubWVzc2FnZSkpLmNhdGNoKCgpID0+IHt9KTtcbiAgICBpbnRlbnRTdGF0ZS5zdHJlYW1SZWFkZXIgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuX3RyYW5zcG9ydC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtjdXJDYWNoZUtleSwgY3VySW50ZW50U3RhdGVdIG9mIHRoaXMuX2ludGVudFN0YXRlcykge1xuICAgICAgaWYgKGN1ckludGVudFN0YXRlID09PSBpbnRlbnRTdGF0ZSkge1xuICAgICAgICB0aGlzLl9pbnRlbnRTdGF0ZXMuZGVsZXRlKGN1ckNhY2hlS2V5KTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNsZWFudXAoKTtcbiAgfVxuXG4gIGdldCBzdGF0cygpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdHM7XG4gIH1cblxufVxuXG5leHBvcnRzLlBERlBhZ2VQcm94eSA9IFBERlBhZ2VQcm94eTtcblxuY2xhc3MgTG9vcGJhY2tQb3J0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fZGVmZXJyZWQgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHBvc3RNZXNzYWdlKG9iaiwgdHJhbnNmZXJzKSB7XG4gICAgZnVuY3Rpb24gY2xvbmVWYWx1ZShvYmplY3QpIHtcbiAgICAgIGlmIChnbG9iYWxUaGlzLnN0cnVjdHVyZWRDbG9uZSkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsVGhpcy5zdHJ1Y3R1cmVkQ2xvbmUob2JqZWN0LCB0cmFuc2ZlcnMpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBmYWxsYmFja0Nsb25lVmFsdWUodmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJzeW1ib2xcIiB8fCB2YWx1ZSBpbnN0YW5jZW9mIFVSTCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTG9vcGJhY2tQb3J0LnBvc3RNZXNzYWdlIC0gY2Fubm90IGNsb25lOiAke3ZhbHVlPy50b1N0cmluZygpfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjbG9uZWQuaGFzKHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBjbG9uZWQuZ2V0KHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBidWZmZXIsIHJlc3VsdDtcblxuICAgICAgICBpZiAoKGJ1ZmZlciA9IHZhbHVlLmJ1ZmZlcikgJiYgKDAsIF91dGlsLmlzQXJyYXlCdWZmZXIpKGJ1ZmZlcikpIHtcbiAgICAgICAgICBpZiAodHJhbnNmZXJzPy5pbmNsdWRlcyhidWZmZXIpKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBuZXcgdmFsdWUuY29uc3RydWN0b3IoYnVmZmVyLCB2YWx1ZS5ieXRlT2Zmc2V0LCB2YWx1ZS5ieXRlTGVuZ3RoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gbmV3IHZhbHVlLmNvbnN0cnVjdG9yKHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjbG9uZWQuc2V0KHZhbHVlLCByZXN1bHQpO1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgICByZXN1bHQgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgY2xvbmVkLnNldCh2YWx1ZSwgcmVzdWx0KTtcblxuICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgcmVzdWx0LnNldChrZXksIGZhbGxiYWNrQ2xvbmVWYWx1ZSh2YWwpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgICAgcmVzdWx0ID0gbmV3IFNldCgpO1xuICAgICAgICAgIGNsb25lZC5zZXQodmFsdWUsIHJlc3VsdCk7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgcmVzdWx0LmFkZChmYWxsYmFja0Nsb25lVmFsdWUodmFsKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdCA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gW10gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBjbG9uZWQuc2V0KHZhbHVlLCByZXN1bHQpO1xuXG4gICAgICAgIGZvciAoY29uc3QgaSBpbiB2YWx1ZSkge1xuICAgICAgICAgIGxldCBkZXNjLFxuICAgICAgICAgICAgICBwID0gdmFsdWU7XG5cbiAgICAgICAgICB3aGlsZSAoIShkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwLCBpKSkpIHtcbiAgICAgICAgICAgIHAgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBkZXNjLnZhbHVlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGRlc2MudmFsdWUgPT09IFwiZnVuY3Rpb25cIiAmJiAhdmFsdWUuaGFzT3duUHJvcGVydHk/LihpKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzdWx0W2ldID0gZmFsbGJhY2tDbG9uZVZhbHVlKGRlc2MudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2xvbmVkID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgIHJldHVybiBmYWxsYmFja0Nsb25lVmFsdWUob2JqZWN0KTtcbiAgICB9XG5cbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGRhdGE6IGNsb25lVmFsdWUob2JqKVxuICAgIH07XG5cbiAgICB0aGlzLl9kZWZlcnJlZC50aGVuKCgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBsaXN0ZW5lcikge1xuICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgbGlzdGVuZXIpIHtcbiAgICBjb25zdCBpID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpLCAxKTtcbiAgfVxuXG4gIHRlcm1pbmF0ZSgpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMubGVuZ3RoID0gMDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuTG9vcGJhY2tQb3J0ID0gTG9vcGJhY2tQb3J0O1xuY29uc3QgUERGV29ya2VyVXRpbCA9IHtcbiAgaXNXb3JrZXJEaXNhYmxlZDogZmFsc2UsXG4gIGZhbGxiYWNrV29ya2VyU3JjOiBudWxsLFxuICBmYWtlV29ya2VySWQ6IDBcbn07XG57XG4gIGlmIChfaXNfbm9kZS5pc05vZGVKUyAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgUERGV29ya2VyVXRpbC5pc1dvcmtlckRpc2FibGVkID0gdHJ1ZTtcbiAgICBQREZXb3JrZXJVdGlsLmZhbGxiYWNrV29ya2VyU3JjID0gXCIuL3BkZi53b3JrZXIuanNcIjtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCBwZGZqc0ZpbGVQYXRoID0gZG9jdW1lbnQ/LmN1cnJlbnRTY3JpcHQ/LnNyYztcblxuICAgIGlmIChwZGZqc0ZpbGVQYXRoKSB7XG4gICAgICBQREZXb3JrZXJVdGlsLmZhbGxiYWNrV29ya2VyU3JjID0gcGRmanNGaWxlUGF0aC5yZXBsYWNlKC8oXFwuKD86bWluXFwuKT9qcykoXFw/LiopPyQvaSwgXCIud29ya2VyJDEkMlwiKTtcbiAgICB9XG4gIH1cblxuICBQREZXb3JrZXJVdGlsLmNyZWF0ZUNETldyYXBwZXIgPSBmdW5jdGlvbiAodXJsKSB7XG4gICAgY29uc3Qgd3JhcHBlciA9IGBpbXBvcnRTY3JpcHRzKFwiJHt1cmx9XCIpO2A7XG4gICAgcmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3dyYXBwZXJdKSk7XG4gIH07XG59XG5cbmNsYXNzIFBERldvcmtlciB7XG4gIHN0YXRpYyBnZXQgX3dvcmtlclBvcnRzKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIl93b3JrZXJQb3J0c1wiLCBuZXcgV2Vha01hcCgpKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBuYW1lID0gbnVsbCxcbiAgICBwb3J0ID0gbnVsbCxcbiAgICB2ZXJib3NpdHkgPSAoMCwgX3V0aWwuZ2V0VmVyYm9zaXR5TGV2ZWwpKClcbiAgfSA9IHt9KSB7XG4gICAgaWYgKHBvcnQgJiYgUERGV29ya2VyLl93b3JrZXJQb3J0cy5oYXMocG9ydCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCB1c2UgbW9yZSB0aGFuIG9uZSBQREZXb3JrZXIgcGVyIHBvcnQuXCIpO1xuICAgIH1cblxuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnZlcmJvc2l0eSA9IHZlcmJvc2l0eTtcbiAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgdGhpcy5fcG9ydCA9IG51bGw7XG4gICAgdGhpcy5fd2ViV29ya2VyID0gbnVsbDtcbiAgICB0aGlzLl9tZXNzYWdlSGFuZGxlciA9IG51bGw7XG5cbiAgICBpZiAocG9ydCkge1xuICAgICAgUERGV29ya2VyLl93b3JrZXJQb3J0cy5zZXQocG9ydCwgdGhpcyk7XG5cbiAgICAgIHRoaXMuX2luaXRpYWxpemVGcm9tUG9ydChwb3J0KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRpYWxpemUoKTtcbiAgfVxuXG4gIGdldCBwcm9taXNlKCkge1xuICAgIHJldHVybiB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIGdldCBwb3J0KCkge1xuICAgIHJldHVybiB0aGlzLl9wb3J0O1xuICB9XG5cbiAgZ2V0IG1lc3NhZ2VIYW5kbGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9tZXNzYWdlSGFuZGxlcjtcbiAgfVxuXG4gIF9pbml0aWFsaXplRnJvbVBvcnQocG9ydCkge1xuICAgIHRoaXMuX3BvcnQgPSBwb3J0O1xuICAgIHRoaXMuX21lc3NhZ2VIYW5kbGVyID0gbmV3IF9tZXNzYWdlX2hhbmRsZXIuTWVzc2FnZUhhbmRsZXIoXCJtYWluXCIsIFwid29ya2VyXCIsIHBvcnQpO1xuXG4gICAgdGhpcy5fbWVzc2FnZUhhbmRsZXIub24oXCJyZWFkeVwiLCBmdW5jdGlvbiAoKSB7fSk7XG5cbiAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICB9XG5cbiAgX2luaXRpYWxpemUoKSB7XG4gICAgaWYgKHR5cGVvZiBXb3JrZXIgIT09IFwidW5kZWZpbmVkXCIgJiYgIVBERldvcmtlclV0aWwuaXNXb3JrZXJEaXNhYmxlZCAmJiAhUERGV29ya2VyLl9tYWluVGhyZWFkV29ya2VyTWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgIGxldCB3b3JrZXJTcmMgPSBQREZXb3JrZXIud29ya2VyU3JjO1xuXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoISgwLCBfdXRpbC5pc1NhbWVPcmlnaW4pKHdpbmRvdy5sb2NhdGlvbi5ocmVmLCB3b3JrZXJTcmMpKSB7XG4gICAgICAgICAgd29ya2VyU3JjID0gUERGV29ya2VyVXRpbC5jcmVhdGVDRE5XcmFwcGVyKG5ldyBVUkwod29ya2VyU3JjLCB3aW5kb3cubG9jYXRpb24pLmhyZWYpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcih3b3JrZXJTcmMpO1xuICAgICAgICBjb25zdCBtZXNzYWdlSGFuZGxlciA9IG5ldyBfbWVzc2FnZV9oYW5kbGVyLk1lc3NhZ2VIYW5kbGVyKFwibWFpblwiLCBcIndvcmtlclwiLCB3b3JrZXIpO1xuXG4gICAgICAgIGNvbnN0IHRlcm1pbmF0ZUVhcmx5ID0gKCkgPT4ge1xuICAgICAgICAgIHdvcmtlci5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25Xb3JrZXJFcnJvcik7XG4gICAgICAgICAgbWVzc2FnZUhhbmRsZXIuZGVzdHJveSgpO1xuICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcblxuICAgICAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgdGhpcy5fcmVhZHlDYXBhYmlsaXR5LnJlamVjdChuZXcgRXJyb3IoXCJXb3JrZXIgd2FzIGRlc3Ryb3llZFwiKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3NldHVwRmFrZVdvcmtlcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBvbldvcmtlckVycm9yID0gKCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5fd2ViV29ya2VyKSB7XG4gICAgICAgICAgICB0ZXJtaW5hdGVFYXJseSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB3b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIG9uV29ya2VyRXJyb3IpO1xuICAgICAgICBtZXNzYWdlSGFuZGxlci5vbihcInRlc3RcIiwgZGF0YSA9PiB7XG4gICAgICAgICAgd29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvbldvcmtlckVycm9yKTtcblxuICAgICAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgdGVybWluYXRlRWFybHkoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUhhbmRsZXIgPSBtZXNzYWdlSGFuZGxlcjtcbiAgICAgICAgICAgIHRoaXMuX3BvcnQgPSB3b3JrZXI7XG4gICAgICAgICAgICB0aGlzLl93ZWJXb3JrZXIgPSB3b3JrZXI7XG5cbiAgICAgICAgICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5yZXNvbHZlKCk7XG5cbiAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLnNlbmQoXCJjb25maWd1cmVcIiwge1xuICAgICAgICAgICAgICB2ZXJib3NpdHk6IHRoaXMudmVyYm9zaXR5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc2V0dXBGYWtlV29ya2VyKCk7XG5cbiAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBtZXNzYWdlSGFuZGxlci5vbihcInJlYWR5XCIsIGRhdGEgPT4ge1xuICAgICAgICAgIHdvcmtlci5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25Xb3JrZXJFcnJvcik7XG5cbiAgICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHRlcm1pbmF0ZUVhcmx5KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHNlbmRUZXN0KCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0dXBGYWtlV29ya2VyKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzZW5kVGVzdCA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCB0ZXN0T2JqID0gbmV3IFVpbnQ4QXJyYXkoWzI1NV0pO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLnNlbmQoXCJ0ZXN0XCIsIHRlc3RPYmosIFt0ZXN0T2JqLmJ1ZmZlcl0pO1xuICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJDYW5ub3QgdXNlIHBvc3RNZXNzYWdlIHRyYW5zZmVycy5cIik7XG4gICAgICAgICAgICB0ZXN0T2JqWzBdID0gMDtcbiAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLnNlbmQoXCJ0ZXN0XCIsIHRlc3RPYmopO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBzZW5kVGVzdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICgwLCBfdXRpbC5pbmZvKShcIlRoZSB3b3JrZXIgaGFzIGJlZW4gZGlzYWJsZWQuXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3NldHVwRmFrZVdvcmtlcigpO1xuICB9XG5cbiAgX3NldHVwRmFrZVdvcmtlcigpIHtcbiAgICBpZiAoIVBERldvcmtlclV0aWwuaXNXb3JrZXJEaXNhYmxlZCkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiU2V0dGluZyB1cCBmYWtlIHdvcmtlci5cIik7XG4gICAgICBQREZXb3JrZXJVdGlsLmlzV29ya2VyRGlzYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIFBERldvcmtlci5fc2V0dXBGYWtlV29ya2VyR2xvYmFsLnRoZW4oV29ya2VyTWVzc2FnZUhhbmRsZXIgPT4ge1xuICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKFwiV29ya2VyIHdhcyBkZXN0cm95ZWRcIikpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcG9ydCA9IG5ldyBMb29wYmFja1BvcnQoKTtcbiAgICAgIHRoaXMuX3BvcnQgPSBwb3J0O1xuICAgICAgY29uc3QgaWQgPSBgZmFrZSR7UERGV29ya2VyVXRpbC5mYWtlV29ya2VySWQrK31gO1xuICAgICAgY29uc3Qgd29ya2VySGFuZGxlciA9IG5ldyBfbWVzc2FnZV9oYW5kbGVyLk1lc3NhZ2VIYW5kbGVyKGlkICsgXCJfd29ya2VyXCIsIGlkLCBwb3J0KTtcbiAgICAgIFdvcmtlck1lc3NhZ2VIYW5kbGVyLnNldHVwKHdvcmtlckhhbmRsZXIsIHBvcnQpO1xuICAgICAgY29uc3QgbWVzc2FnZUhhbmRsZXIgPSBuZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihpZCwgaWQgKyBcIl93b3JrZXJcIiwgcG9ydCk7XG4gICAgICB0aGlzLl9tZXNzYWdlSGFuZGxlciA9IG1lc3NhZ2VIYW5kbGVyO1xuXG4gICAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuXG4gICAgICBtZXNzYWdlSGFuZGxlci5zZW5kKFwiY29uZmlndXJlXCIsIHtcbiAgICAgICAgdmVyYm9zaXR5OiB0aGlzLnZlcmJvc2l0eVxuICAgICAgfSk7XG4gICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKGBTZXR0aW5nIHVwIGZha2Ugd29ya2VyIGZhaWxlZDogXCIke3JlYXNvbi5tZXNzYWdlfVwiLmApKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuX3dlYldvcmtlcikge1xuICAgICAgdGhpcy5fd2ViV29ya2VyLnRlcm1pbmF0ZSgpO1xuXG4gICAgICB0aGlzLl93ZWJXb3JrZXIgPSBudWxsO1xuICAgIH1cblxuICAgIFBERldvcmtlci5fd29ya2VyUG9ydHMuZGVsZXRlKHRoaXMuX3BvcnQpO1xuXG4gICAgdGhpcy5fcG9ydCA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fbWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgIHRoaXMuX21lc3NhZ2VIYW5kbGVyLmRlc3Ryb3koKTtcblxuICAgICAgdGhpcy5fbWVzc2FnZUhhbmRsZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBmcm9tUG9ydChwYXJhbXMpIHtcbiAgICBpZiAoIXBhcmFtcz8ucG9ydCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUERGV29ya2VyLmZyb21Qb3J0IC0gaW52YWxpZCBtZXRob2Qgc2lnbmF0dXJlLlwiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fd29ya2VyUG9ydHMuaGFzKHBhcmFtcy5wb3J0KSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dvcmtlclBvcnRzLmdldChwYXJhbXMucG9ydCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQREZXb3JrZXIocGFyYW1zKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd29ya2VyU3JjKCkge1xuICAgIGlmIChfd29ya2VyX29wdGlvbnMuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmMpIHtcbiAgICAgIHJldHVybiBfd29ya2VyX29wdGlvbnMuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmM7XG4gICAgfVxuXG4gICAgaWYgKFBERldvcmtlclV0aWwuZmFsbGJhY2tXb3JrZXJTcmMgIT09IG51bGwpIHtcbiAgICAgIGlmICghX2lzX25vZGUuaXNOb2RlSlMpIHtcbiAgICAgICAgKDAsIF9kaXNwbGF5X3V0aWxzLmRlcHJlY2F0ZWQpKCdObyBcIkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjXCIgc3BlY2lmaWVkLicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gUERGV29ya2VyVXRpbC5mYWxsYmFja1dvcmtlclNyYztcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFwiR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmNcIiBzcGVjaWZpZWQuJyk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IF9tYWluVGhyZWFkV29ya2VyTWVzc2FnZUhhbmRsZXIoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBnbG9iYWxUaGlzLnBkZmpzV29ya2VyPy5Xb3JrZXJNZXNzYWdlSGFuZGxlciB8fCBudWxsO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0IF9zZXR1cEZha2VXb3JrZXJHbG9iYWwoKSB7XG4gICAgY29uc3QgbG9hZGVyID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgbWFpbldvcmtlck1lc3NhZ2VIYW5kbGVyID0gdGhpcy5fbWFpblRocmVhZFdvcmtlck1lc3NhZ2VIYW5kbGVyO1xuXG4gICAgICBpZiAobWFpbldvcmtlck1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgIHJldHVybiBtYWluV29ya2VyTWVzc2FnZUhhbmRsZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChfaXNfbm9kZS5pc05vZGVKUyAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbnN0IHdvcmtlciA9IGV2YWwoXCJyZXF1aXJlXCIpKHRoaXMud29ya2VyU3JjKTtcbiAgICAgICAgcmV0dXJuIHdvcmtlci5Xb3JrZXJNZXNzYWdlSGFuZGxlcjtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgKDAsIF9kaXNwbGF5X3V0aWxzLmxvYWRTY3JpcHQpKHRoaXMud29ya2VyU3JjKTtcbiAgICAgIHJldHVybiB3aW5kb3cucGRmanNXb3JrZXIuV29ya2VyTWVzc2FnZUhhbmRsZXI7XG4gICAgfTtcblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIl9zZXR1cEZha2VXb3JrZXJHbG9iYWxcIiwgbG9hZGVyKCkpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QREZXb3JrZXIgPSBQREZXb3JrZXI7XG57XG4gIFBERldvcmtlci5nZXRXb3JrZXJTcmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgKDAsIF9kaXNwbGF5X3V0aWxzLmRlcHJlY2F0ZWQpKFwiYFBERldvcmtlci5nZXRXb3JrZXJTcmMoKWAsIHBsZWFzZSB1c2UgYFBERldvcmtlci53b3JrZXJTcmNgIGluc3RlYWQuXCIpO1xuICAgIHJldHVybiB0aGlzLndvcmtlclNyYztcbiAgfTtcbn1cblxuY2xhc3MgV29ya2VyVHJhbnNwb3J0IHtcbiAgI2RvY1N0YXRzID0gbnVsbDtcbiAgI3BhZ2VDYWNoZSA9IG5ldyBNYXAoKTtcbiAgI3BhZ2VQcm9taXNlcyA9IG5ldyBNYXAoKTtcbiAgI21ldGFkYXRhUHJvbWlzZSA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IobWVzc2FnZUhhbmRsZXIsIGxvYWRpbmdUYXNrLCBuZXR3b3JrU3RyZWFtLCBwYXJhbXMpIHtcbiAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyID0gbWVzc2FnZUhhbmRsZXI7XG4gICAgdGhpcy5sb2FkaW5nVGFzayA9IGxvYWRpbmdUYXNrO1xuICAgIHRoaXMuY29tbW9uT2JqcyA9IG5ldyBQREZPYmplY3RzKCk7XG4gICAgdGhpcy5mb250TG9hZGVyID0gbmV3IF9mb250X2xvYWRlci5Gb250TG9hZGVyKHtcbiAgICAgIGRvY0lkOiBsb2FkaW5nVGFzay5kb2NJZCxcbiAgICAgIG9uVW5zdXBwb3J0ZWRGZWF0dXJlOiB0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZS5iaW5kKHRoaXMpLFxuICAgICAgb3duZXJEb2N1bWVudDogcGFyYW1zLm93bmVyRG9jdW1lbnQsXG4gICAgICBzdHlsZUVsZW1lbnQ6IHBhcmFtcy5zdHlsZUVsZW1lbnRcbiAgICB9KTtcbiAgICB0aGlzLl9wYXJhbXMgPSBwYXJhbXM7XG5cbiAgICBpZiAoIXBhcmFtcy51c2VXb3JrZXJGZXRjaCkge1xuICAgICAgdGhpcy5DTWFwUmVhZGVyRmFjdG9yeSA9IG5ldyBwYXJhbXMuQ01hcFJlYWRlckZhY3Rvcnkoe1xuICAgICAgICBiYXNlVXJsOiBwYXJhbXMuY01hcFVybCxcbiAgICAgICAgaXNDb21wcmVzc2VkOiBwYXJhbXMuY01hcFBhY2tlZFxuICAgICAgfSk7XG4gICAgICB0aGlzLlN0YW5kYXJkRm9udERhdGFGYWN0b3J5ID0gbmV3IHBhcmFtcy5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeSh7XG4gICAgICAgIGJhc2VVcmw6IHBhcmFtcy5zdGFuZGFyZEZvbnREYXRhVXJsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHRoaXMuZGVzdHJveUNhcGFiaWxpdHkgPSBudWxsO1xuICAgIHRoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eSA9IG51bGw7XG4gICAgdGhpcy5fbmV0d29ya1N0cmVhbSA9IG5ldHdvcmtTdHJlYW07XG4gICAgdGhpcy5fZnVsbFJlYWRlciA9IG51bGw7XG4gICAgdGhpcy5fbGFzdFByb2dyZXNzID0gbnVsbDtcbiAgICB0aGlzLmRvd25sb2FkSW5mb0NhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgdGhpcy5zZXR1cE1lc3NhZ2VIYW5kbGVyKCk7XG4gIH1cblxuICBnZXQgYW5ub3RhdGlvblN0b3JhZ2UoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiYW5ub3RhdGlvblN0b3JhZ2VcIiwgbmV3IF9hbm5vdGF0aW9uX3N0b3JhZ2UuQW5ub3RhdGlvblN0b3JhZ2UoKSk7XG4gIH1cblxuICBnZXQgc3RhdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2RvY1N0YXRzO1xuICB9XG5cbiAgZ2V0UmVuZGVyaW5nSW50ZW50KGludGVudCwgYW5ub3RhdGlvbk1vZGUgPSBfdXRpbC5Bbm5vdGF0aW9uTW9kZS5FTkFCTEUsIGlzT3BMaXN0ID0gZmFsc2UpIHtcbiAgICBsZXQgcmVuZGVyaW5nSW50ZW50ID0gX3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5ESVNQTEFZO1xuICAgIGxldCBsYXN0TW9kaWZpZWQgPSBcIlwiO1xuXG4gICAgc3dpdGNoIChpbnRlbnQpIHtcbiAgICAgIGNhc2UgXCJhbnlcIjpcbiAgICAgICAgcmVuZGVyaW5nSW50ZW50ID0gX3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5BTlk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiZGlzcGxheVwiOlxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcInByaW50XCI6XG4gICAgICAgIHJlbmRlcmluZ0ludGVudCA9IF91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuUFJJTlQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICAoMCwgX3V0aWwud2FybikoYGdldFJlbmRlcmluZ0ludGVudCAtIGludmFsaWQgaW50ZW50OiAke2ludGVudH1gKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFubm90YXRpb25Nb2RlKSB7XG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25Nb2RlLkRJU0FCTEU6XG4gICAgICAgIHJlbmRlcmluZ0ludGVudCArPSBfdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLkFOTk9UQVRJT05TX0RJU0FCTEU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25Nb2RlLkVOQUJMRTpcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFX0ZPUk1TOlxuICAgICAgICByZW5kZXJpbmdJbnRlbnQgKz0gX3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19GT1JNUztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFX1NUT1JBR0U6XG4gICAgICAgIHJlbmRlcmluZ0ludGVudCArPSBfdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLkFOTk9UQVRJT05TX1NUT1JBR0U7XG4gICAgICAgIGxhc3RNb2RpZmllZCA9IHRoaXMuYW5ub3RhdGlvblN0b3JhZ2UubGFzdE1vZGlmaWVkO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGBnZXRSZW5kZXJpbmdJbnRlbnQgLSBpbnZhbGlkIGFubm90YXRpb25Nb2RlOiAke2Fubm90YXRpb25Nb2RlfWApO1xuICAgIH1cblxuICAgIGlmIChpc09wTGlzdCkge1xuICAgICAgcmVuZGVyaW5nSW50ZW50ICs9IF91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuT1BMSVNUO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByZW5kZXJpbmdJbnRlbnQsXG4gICAgICBjYWNoZUtleTogYCR7cmVuZGVyaW5nSW50ZW50fV8ke2xhc3RNb2RpZmllZH1gXG4gICAgfTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveUNhcGFiaWxpdHkpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgfVxuXG4gICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgIHRoaXMuZGVzdHJveUNhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG5cbiAgICBpZiAodGhpcy5fcGFzc3dvcmRDYXBhYmlsaXR5KSB7XG4gICAgICB0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkucmVqZWN0KG5ldyBFcnJvcihcIldvcmtlciB3YXMgZGVzdHJveWVkIGR1cmluZyBvblBhc3N3b3JkIGNhbGxiYWNrXCIpKTtcbiAgICB9XG5cbiAgICBjb25zdCB3YWl0T24gPSBbXTtcblxuICAgIGZvciAoY29uc3QgcGFnZSBvZiB0aGlzLiNwYWdlQ2FjaGUudmFsdWVzKCkpIHtcbiAgICAgIHdhaXRPbi5wdXNoKHBhZ2UuX2Rlc3Ryb3koKSk7XG4gICAgfVxuXG4gICAgdGhpcy4jcGFnZUNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy4jcGFnZVByb21pc2VzLmNsZWFyKCk7XG5cbiAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShcImFubm90YXRpb25TdG9yYWdlXCIpKSB7XG4gICAgICB0aGlzLmFubm90YXRpb25TdG9yYWdlLnJlc2V0TW9kaWZpZWQoKTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXJtaW5hdGVkID0gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJUZXJtaW5hdGVcIiwgbnVsbCk7XG4gICAgd2FpdE9uLnB1c2godGVybWluYXRlZCk7XG4gICAgUHJvbWlzZS5hbGwod2FpdE9uKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuY29tbW9uT2Jqcy5jbGVhcigpO1xuICAgICAgdGhpcy5mb250TG9hZGVyLmNsZWFyKCk7XG4gICAgICB0aGlzLiNtZXRhZGF0YVByb21pc2UgPSBudWxsO1xuICAgICAgdGhpcy5fZ2V0RmllbGRPYmplY3RzUHJvbWlzZSA9IG51bGw7XG4gICAgICB0aGlzLl9oYXNKU0FjdGlvbnNQcm9taXNlID0gbnVsbDtcblxuICAgICAgaWYgKHRoaXMuX25ldHdvcmtTdHJlYW0pIHtcbiAgICAgICAgdGhpcy5fbmV0d29ya1N0cmVhbS5jYW5jZWxBbGxSZXF1ZXN0cyhuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24oXCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuXCIpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICB9LCB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnJlamVjdCk7XG4gICAgcmV0dXJuIHRoaXMuZGVzdHJveUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIHNldHVwTWVzc2FnZUhhbmRsZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgbWVzc2FnZUhhbmRsZXIsXG4gICAgICBsb2FkaW5nVGFza1xuICAgIH0gPSB0aGlzO1xuICAgIG1lc3NhZ2VIYW5kbGVyLm9uKFwiR2V0UmVhZGVyXCIsIChkYXRhLCBzaW5rKSA9PiB7XG4gICAgICAoMCwgX3V0aWwuYXNzZXJ0KSh0aGlzLl9uZXR3b3JrU3RyZWFtLCBcIkdldFJlYWRlciAtIG5vIGBJUERGU3RyZWFtYCBpbnN0YW5jZSBhdmFpbGFibGUuXCIpO1xuICAgICAgdGhpcy5fZnVsbFJlYWRlciA9IHRoaXMuX25ldHdvcmtTdHJlYW0uZ2V0RnVsbFJlYWRlcigpO1xuXG4gICAgICB0aGlzLl9mdWxsUmVhZGVyLm9uUHJvZ3Jlc3MgPSBldnQgPT4ge1xuICAgICAgICB0aGlzLl9sYXN0UHJvZ3Jlc3MgPSB7XG4gICAgICAgICAgbG9hZGVkOiBldnQubG9hZGVkLFxuICAgICAgICAgIHRvdGFsOiBldnQudG90YWxcbiAgICAgICAgfTtcbiAgICAgIH07XG5cbiAgICAgIHNpbmsub25QdWxsID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9mdWxsUmVhZGVyLnJlYWQoKS50aGVuKGZ1bmN0aW9uICh7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgZG9uZVxuICAgICAgICB9KSB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHNpbmsuY2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSgoMCwgX3V0aWwuaXNBcnJheUJ1ZmZlcikodmFsdWUpLCBcIkdldFJlYWRlciAtIGV4cGVjdGVkIGFuIEFycmF5QnVmZmVyLlwiKTtcbiAgICAgICAgICBzaW5rLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpLCAxLCBbdmFsdWVdKTtcbiAgICAgICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgICAgICBzaW5rLmVycm9yKHJlYXNvbik7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgc2luay5vbkNhbmNlbCA9IHJlYXNvbiA9PiB7XG4gICAgICAgIHRoaXMuX2Z1bGxSZWFkZXIuY2FuY2VsKHJlYXNvbik7XG5cbiAgICAgICAgc2luay5yZWFkeS5jYXRjaChyZWFkeVJlYXNvbiA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgcmVhZHlSZWFzb247XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9KTtcbiAgICBtZXNzYWdlSGFuZGxlci5vbihcIlJlYWRlckhlYWRlcnNSZWFkeVwiLCBkYXRhID0+IHtcbiAgICAgIGNvbnN0IGhlYWRlcnNDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgY29uc3QgZnVsbFJlYWRlciA9IHRoaXMuX2Z1bGxSZWFkZXI7XG4gICAgICBmdWxsUmVhZGVyLmhlYWRlcnNSZWFkeS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKCFmdWxsUmVhZGVyLmlzU3RyZWFtaW5nU3VwcG9ydGVkIHx8ICFmdWxsUmVhZGVyLmlzUmFuZ2VTdXBwb3J0ZWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5fbGFzdFByb2dyZXNzKSB7XG4gICAgICAgICAgICBsb2FkaW5nVGFzay5vblByb2dyZXNzPy4odGhpcy5fbGFzdFByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmdWxsUmVhZGVyLm9uUHJvZ3Jlc3MgPSBldnQgPT4ge1xuICAgICAgICAgICAgbG9hZGluZ1Rhc2sub25Qcm9ncmVzcz8uKHtcbiAgICAgICAgICAgICAgbG9hZGVkOiBldnQubG9hZGVkLFxuICAgICAgICAgICAgICB0b3RhbDogZXZ0LnRvdGFsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGVhZGVyc0NhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgICAgaXNTdHJlYW1pbmdTdXBwb3J0ZWQ6IGZ1bGxSZWFkZXIuaXNTdHJlYW1pbmdTdXBwb3J0ZWQsXG4gICAgICAgICAgaXNSYW5nZVN1cHBvcnRlZDogZnVsbFJlYWRlci5pc1JhbmdlU3VwcG9ydGVkLFxuICAgICAgICAgIGNvbnRlbnRMZW5ndGg6IGZ1bGxSZWFkZXIuY29udGVudExlbmd0aFxuICAgICAgICB9KTtcbiAgICAgIH0sIGhlYWRlcnNDYXBhYmlsaXR5LnJlamVjdCk7XG4gICAgICByZXR1cm4gaGVhZGVyc0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB9KTtcbiAgICBtZXNzYWdlSGFuZGxlci5vbihcIkdldFJhbmdlUmVhZGVyXCIsIChkYXRhLCBzaW5rKSA9PiB7XG4gICAgICAoMCwgX3V0aWwuYXNzZXJ0KSh0aGlzLl9uZXR3b3JrU3RyZWFtLCBcIkdldFJhbmdlUmVhZGVyIC0gbm8gYElQREZTdHJlYW1gIGluc3RhbmNlIGF2YWlsYWJsZS5cIik7XG5cbiAgICAgIGNvbnN0IHJhbmdlUmVhZGVyID0gdGhpcy5fbmV0d29ya1N0cmVhbS5nZXRSYW5nZVJlYWRlcihkYXRhLmJlZ2luLCBkYXRhLmVuZCk7XG5cbiAgICAgIGlmICghcmFuZ2VSZWFkZXIpIHtcbiAgICAgICAgc2luay5jbG9zZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNpbmsub25QdWxsID0gKCkgPT4ge1xuICAgICAgICByYW5nZVJlYWRlci5yZWFkKCkudGhlbihmdW5jdGlvbiAoe1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIGRvbmVcbiAgICAgICAgfSkge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICBzaW5rLmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoKDAsIF91dGlsLmlzQXJyYXlCdWZmZXIpKHZhbHVlKSwgXCJHZXRSYW5nZVJlYWRlciAtIGV4cGVjdGVkIGFuIEFycmF5QnVmZmVyLlwiKTtcbiAgICAgICAgICBzaW5rLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpLCAxLCBbdmFsdWVdKTtcbiAgICAgICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgICAgICBzaW5rLmVycm9yKHJlYXNvbik7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgc2luay5vbkNhbmNlbCA9IHJlYXNvbiA9PiB7XG4gICAgICAgIHJhbmdlUmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgICAgICBzaW5rLnJlYWR5LmNhdGNoKHJlYWR5UmVhc29uID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aHJvdyByZWFkeVJlYXNvbjtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0pO1xuICAgIG1lc3NhZ2VIYW5kbGVyLm9uKFwiR2V0RG9jXCIsICh7XG4gICAgICBwZGZJbmZvXG4gICAgfSkgPT4ge1xuICAgICAgdGhpcy5fbnVtUGFnZXMgPSBwZGZJbmZvLm51bVBhZ2VzO1xuICAgICAgdGhpcy5faHRtbEZvclhmYSA9IHBkZkluZm8uaHRtbEZvclhmYTtcbiAgICAgIGRlbGV0ZSBwZGZJbmZvLmh0bWxGb3JYZmE7XG5cbiAgICAgIGxvYWRpbmdUYXNrLl9jYXBhYmlsaXR5LnJlc29sdmUobmV3IFBERkRvY3VtZW50UHJveHkocGRmSW5mbywgdGhpcykpO1xuICAgIH0pO1xuICAgIG1lc3NhZ2VIYW5kbGVyLm9uKFwiRG9jRXhjZXB0aW9uXCIsIGZ1bmN0aW9uIChleCkge1xuICAgICAgbGV0IHJlYXNvbjtcblxuICAgICAgc3dpdGNoIChleC5uYW1lKSB7XG4gICAgICAgIGNhc2UgXCJQYXNzd29yZEV4Y2VwdGlvblwiOlxuICAgICAgICAgIHJlYXNvbiA9IG5ldyBfdXRpbC5QYXNzd29yZEV4Y2VwdGlvbihleC5tZXNzYWdlLCBleC5jb2RlKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiSW52YWxpZFBERkV4Y2VwdGlvblwiOlxuICAgICAgICAgIHJlYXNvbiA9IG5ldyBfdXRpbC5JbnZhbGlkUERGRXhjZXB0aW9uKGV4Lm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJNaXNzaW5nUERGRXhjZXB0aW9uXCI6XG4gICAgICAgICAgcmVhc29uID0gbmV3IF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24oZXgubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvblwiOlxuICAgICAgICAgIHJlYXNvbiA9IG5ldyBfdXRpbC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24oZXgubWVzc2FnZSwgZXguc3RhdHVzKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiVW5rbm93bkVycm9yRXhjZXB0aW9uXCI6XG4gICAgICAgICAgcmVhc29uID0gbmV3IF91dGlsLlVua25vd25FcnJvckV4Y2VwdGlvbihleC5tZXNzYWdlLCBleC5kZXRhaWxzKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJEb2NFeGNlcHRpb24gLSBleHBlY3RlZCBhIHZhbGlkIEVycm9yLlwiKTtcbiAgICAgIH1cblxuICAgICAgbG9hZGluZ1Rhc2suX2NhcGFiaWxpdHkucmVqZWN0KHJlYXNvbik7XG4gICAgfSk7XG4gICAgbWVzc2FnZUhhbmRsZXIub24oXCJQYXNzd29yZFJlcXVlc3RcIiwgZXhjZXB0aW9uID0+IHtcbiAgICAgIHRoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcblxuICAgICAgaWYgKGxvYWRpbmdUYXNrLm9uUGFzc3dvcmQpIHtcbiAgICAgICAgY29uc3QgdXBkYXRlUGFzc3dvcmQgPSBwYXNzd29yZCA9PiB7XG4gICAgICAgICAgdGhpcy5fcGFzc3dvcmRDYXBhYmlsaXR5LnJlc29sdmUoe1xuICAgICAgICAgICAgcGFzc3dvcmRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGxvYWRpbmdUYXNrLm9uUGFzc3dvcmQodXBkYXRlUGFzc3dvcmQsIGV4Y2VwdGlvbi5jb2RlKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICB0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkucmVqZWN0KGV4KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fcGFzc3dvcmRDYXBhYmlsaXR5LnJlamVjdChuZXcgX3V0aWwuUGFzc3dvcmRFeGNlcHRpb24oZXhjZXB0aW9uLm1lc3NhZ2UsIGV4Y2VwdGlvbi5jb2RlKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB9KTtcbiAgICBtZXNzYWdlSGFuZGxlci5vbihcIkRhdGFMb2FkZWRcIiwgZGF0YSA9PiB7XG4gICAgICBsb2FkaW5nVGFzay5vblByb2dyZXNzPy4oe1xuICAgICAgICBsb2FkZWQ6IGRhdGEubGVuZ3RoLFxuICAgICAgICB0b3RhbDogZGF0YS5sZW5ndGhcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kb3dubG9hZEluZm9DYXBhYmlsaXR5LnJlc29sdmUoZGF0YSk7XG4gICAgfSk7XG4gICAgbWVzc2FnZUhhbmRsZXIub24oXCJTdGFydFJlbmRlclBhZ2VcIiwgZGF0YSA9PiB7XG4gICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWdlID0gdGhpcy4jcGFnZUNhY2hlLmdldChkYXRhLnBhZ2VJbmRleCk7XG5cbiAgICAgIHBhZ2UuX3N0YXJ0UmVuZGVyUGFnZShkYXRhLnRyYW5zcGFyZW5jeSwgZGF0YS5jYWNoZUtleSk7XG4gICAgfSk7XG4gICAgbWVzc2FnZUhhbmRsZXIub24oXCJjb21tb25vYmpcIiwgKFtpZCwgdHlwZSwgZXhwb3J0ZWREYXRhXSkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY29tbW9uT2Jqcy5oYXMoaWQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJGb250XCI6XG4gICAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5fcGFyYW1zO1xuXG4gICAgICAgICAgaWYgKFwiZXJyb3JcIiBpbiBleHBvcnRlZERhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cG9ydGVkRXJyb3IgPSBleHBvcnRlZERhdGEuZXJyb3I7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYEVycm9yIGR1cmluZyBmb250IGxvYWRpbmc6ICR7ZXhwb3J0ZWRFcnJvcn1gKTtcbiAgICAgICAgICAgIHRoaXMuY29tbW9uT2Jqcy5yZXNvbHZlKGlkLCBleHBvcnRlZEVycm9yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBmb250UmVnaXN0cnkgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKHBhcmFtcy5wZGZCdWcgJiYgZ2xvYmFsVGhpcy5Gb250SW5zcGVjdG9yPy5lbmFibGVkKSB7XG4gICAgICAgICAgICBmb250UmVnaXN0cnkgPSB7XG4gICAgICAgICAgICAgIHJlZ2lzdGVyRm9udChmb250LCB1cmwpIHtcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3IuZm9udEFkZGVkKGZvbnQsIHVybCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBmb250ID0gbmV3IF9mb250X2xvYWRlci5Gb250RmFjZU9iamVjdChleHBvcnRlZERhdGEsIHtcbiAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZDogcGFyYW1zLmlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgICAgIGRpc2FibGVGb250RmFjZTogcGFyYW1zLmRpc2FibGVGb250RmFjZSxcbiAgICAgICAgICAgIGlnbm9yZUVycm9yczogcGFyYW1zLmlnbm9yZUVycm9ycyxcbiAgICAgICAgICAgIG9uVW5zdXBwb3J0ZWRGZWF0dXJlOiB0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgZm9udFJlZ2lzdHJ5XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5mb250TG9hZGVyLmJpbmQoZm9udCkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJGb250RmFsbGJhY2tcIiwge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXBhcmFtcy5mb250RXh0cmFQcm9wZXJ0aWVzICYmIGZvbnQuZGF0YSkge1xuICAgICAgICAgICAgICBmb250LmRhdGEgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvbW1vbk9ianMucmVzb2x2ZShpZCwgZm9udCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIkZvbnRQYXRoXCI6XG4gICAgICAgIGNhc2UgXCJJbWFnZVwiOlxuICAgICAgICAgIHRoaXMuY29tbW9uT2Jqcy5yZXNvbHZlKGlkLCBleHBvcnRlZERhdGEpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHb3QgdW5rbm93biBjb21tb24gb2JqZWN0IHR5cGUgJHt0eXBlfWApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIG1lc3NhZ2VIYW5kbGVyLm9uKFwib2JqXCIsIChbaWQsIHBhZ2VJbmRleCwgdHlwZSwgaW1hZ2VEYXRhXSkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFnZVByb3h5ID0gdGhpcy4jcGFnZUNhY2hlLmdldChwYWdlSW5kZXgpO1xuXG4gICAgICBpZiAocGFnZVByb3h5Lm9ianMuaGFzKGlkKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwiSW1hZ2VcIjpcbiAgICAgICAgICBwYWdlUHJveHkub2Jqcy5yZXNvbHZlKGlkLCBpbWFnZURhdGEpO1xuICAgICAgICAgIGNvbnN0IE1BWF9JTUFHRV9TSVpFX1RPX1NUT1JFID0gODAwMDAwMDtcblxuICAgICAgICAgIGlmIChpbWFnZURhdGE/LmRhdGE/Lmxlbmd0aCA+IE1BWF9JTUFHRV9TSVpFX1RPX1NUT1JFKSB7XG4gICAgICAgICAgICBwYWdlUHJveHkuY2xlYW51cEFmdGVyUmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiUGF0dGVyblwiOlxuICAgICAgICAgIHBhZ2VQcm94eS5vYmpzLnJlc29sdmUoaWQsIGltYWdlRGF0YSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEdvdCB1bmtub3duIG9iamVjdCB0eXBlICR7dHlwZX1gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBtZXNzYWdlSGFuZGxlci5vbihcIkRvY1Byb2dyZXNzXCIsIGRhdGEgPT4ge1xuICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbG9hZGluZ1Rhc2sub25Qcm9ncmVzcz8uKHtcbiAgICAgICAgbG9hZGVkOiBkYXRhLmxvYWRlZCxcbiAgICAgICAgdG90YWw6IGRhdGEudG90YWxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIG1lc3NhZ2VIYW5kbGVyLm9uKFwiRG9jU3RhdHNcIiwgZGF0YSA9PiB7XG4gICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiNkb2NTdGF0cyA9IE9iamVjdC5mcmVlemUoe1xuICAgICAgICBzdHJlYW1UeXBlczogT2JqZWN0LmZyZWV6ZShkYXRhLnN0cmVhbVR5cGVzKSxcbiAgICAgICAgZm9udFR5cGVzOiBPYmplY3QuZnJlZXplKGRhdGEuZm9udFR5cGVzKVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgbWVzc2FnZUhhbmRsZXIub24oXCJVbnN1cHBvcnRlZEZlYXR1cmVcIiwgdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUuYmluZCh0aGlzKSk7XG4gICAgbWVzc2FnZUhhbmRsZXIub24oXCJGZXRjaEJ1aWx0SW5DTWFwXCIsIGRhdGEgPT4ge1xuICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJXb3JrZXIgd2FzIGRlc3Ryb3llZC5cIikpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuQ01hcFJlYWRlckZhY3RvcnkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkNNYXBSZWFkZXJGYWN0b3J5IG5vdCBpbml0aWFsaXplZCwgc2VlIHRoZSBgdXNlV29ya2VyRmV0Y2hgIHBhcmFtZXRlci5cIikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5DTWFwUmVhZGVyRmFjdG9yeS5mZXRjaChkYXRhKTtcbiAgICB9KTtcbiAgICBtZXNzYWdlSGFuZGxlci5vbihcIkZldGNoU3RhbmRhcmRGb250RGF0YVwiLCBkYXRhID0+IHtcbiAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiV29ya2VyIHdhcyBkZXN0cm95ZWQuXCIpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLlN0YW5kYXJkRm9udERhdGFGYWN0b3J5KSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSBub3QgaW5pdGlhbGl6ZWQsIHNlZSB0aGUgYHVzZVdvcmtlckZldGNoYCBwYXJhbWV0ZXIuXCIpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuU3RhbmRhcmRGb250RGF0YUZhY3RvcnkuZmV0Y2goZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICBfb25VbnN1cHBvcnRlZEZlYXR1cmUoe1xuICAgIGZlYXR1cmVJZFxuICB9KSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkaW5nVGFzay5vblVuc3VwcG9ydGVkRmVhdHVyZT8uKGZlYXR1cmVJZCk7XG4gIH1cblxuICBnZXREYXRhKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldERhdGFcIiwgbnVsbCk7XG4gIH1cblxuICBnZXRQYWdlKHBhZ2VOdW1iZXIpIHtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIocGFnZU51bWJlcikgfHwgcGFnZU51bWJlciA8PSAwIHx8IHBhZ2VOdW1iZXIgPiB0aGlzLl9udW1QYWdlcykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgcGFnZSByZXF1ZXN0XCIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYWdlSW5kZXggPSBwYWdlTnVtYmVyIC0gMSxcbiAgICAgICAgICBjYWNoZWRQcm9taXNlID0gdGhpcy4jcGFnZVByb21pc2VzLmdldChwYWdlSW5kZXgpO1xuXG4gICAgaWYgKGNhY2hlZFByb21pc2UpIHtcbiAgICAgIHJldHVybiBjYWNoZWRQcm9taXNlO1xuICAgIH1cblxuICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldFBhZ2VcIiwge1xuICAgICAgcGFnZUluZGV4XG4gICAgfSkudGhlbihwYWdlSW5mbyA9PiB7XG4gICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVHJhbnNwb3J0IGRlc3Ryb3llZFwiKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFnZSA9IG5ldyBQREZQYWdlUHJveHkocGFnZUluZGV4LCBwYWdlSW5mbywgdGhpcywgdGhpcy5fcGFyYW1zLm93bmVyRG9jdW1lbnQsIHRoaXMuX3BhcmFtcy5wZGZCdWcpO1xuICAgICAgdGhpcy4jcGFnZUNhY2hlLnNldChwYWdlSW5kZXgsIHBhZ2UpO1xuICAgICAgcmV0dXJuIHBhZ2U7XG4gICAgfSk7XG4gICAgdGhpcy4jcGFnZVByb21pc2VzLnNldChwYWdlSW5kZXgsIHByb21pc2UpO1xuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgZ2V0UGFnZUluZGV4KHJlZikge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldFBhZ2VJbmRleFwiLCB7XG4gICAgICByZWZcbiAgICB9KTtcbiAgfVxuXG4gIGdldEFubm90YXRpb25zKHBhZ2VJbmRleCwgaW50ZW50KSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0QW5ub3RhdGlvbnNcIiwge1xuICAgICAgcGFnZUluZGV4LFxuICAgICAgaW50ZW50XG4gICAgfSk7XG4gIH1cblxuICBzYXZlRG9jdW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiU2F2ZURvY3VtZW50XCIsIHtcbiAgICAgIGlzUHVyZVhmYTogISF0aGlzLl9odG1sRm9yWGZhLFxuICAgICAgbnVtUGFnZXM6IHRoaXMuX251bVBhZ2VzLFxuICAgICAgYW5ub3RhdGlvblN0b3JhZ2U6IHRoaXMuYW5ub3RhdGlvblN0b3JhZ2Uuc2VyaWFsaXphYmxlLFxuICAgICAgZmlsZW5hbWU6IHRoaXMuX2Z1bGxSZWFkZXI/LmZpbGVuYW1lID8/IG51bGxcbiAgICB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMuYW5ub3RhdGlvblN0b3JhZ2UucmVzZXRNb2RpZmllZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0RmllbGRPYmplY3RzKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRGaWVsZE9iamVjdHNQcm9taXNlIHx8PSB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldEZpZWxkT2JqZWN0c1wiLCBudWxsKTtcbiAgfVxuXG4gIGhhc0pTQWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5faGFzSlNBY3Rpb25zUHJvbWlzZSB8fD0gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJIYXNKU0FjdGlvbnNcIiwgbnVsbCk7XG4gIH1cblxuICBnZXRDYWxjdWxhdGlvbk9yZGVySWRzKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldENhbGN1bGF0aW9uT3JkZXJJZHNcIiwgbnVsbCk7XG4gIH1cblxuICBnZXREZXN0aW5hdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0RGVzdGluYXRpb25zXCIsIG51bGwpO1xuICB9XG5cbiAgZ2V0RGVzdGluYXRpb24oaWQpIHtcbiAgICBpZiAodHlwZW9mIGlkICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBkZXN0aW5hdGlvbiByZXF1ZXN0LlwiKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0RGVzdGluYXRpb25cIiwge1xuICAgICAgaWRcbiAgICB9KTtcbiAgfVxuXG4gIGdldFBhZ2VMYWJlbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0UGFnZUxhYmVsc1wiLCBudWxsKTtcbiAgfVxuXG4gIGdldFBhZ2VMYXlvdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0UGFnZUxheW91dFwiLCBudWxsKTtcbiAgfVxuXG4gIGdldFBhZ2VNb2RlKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldFBhZ2VNb2RlXCIsIG51bGwpO1xuICB9XG5cbiAgZ2V0Vmlld2VyUHJlZmVyZW5jZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0Vmlld2VyUHJlZmVyZW5jZXNcIiwgbnVsbCk7XG4gIH1cblxuICBnZXRPcGVuQWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldE9wZW5BY3Rpb25cIiwgbnVsbCk7XG4gIH1cblxuICBnZXRBdHRhY2htZW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXRBdHRhY2htZW50c1wiLCBudWxsKTtcbiAgfVxuXG4gIGdldEphdmFTY3JpcHQoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0SmF2YVNjcmlwdFwiLCBudWxsKTtcbiAgfVxuXG4gIGdldERvY0pTQWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXREb2NKU0FjdGlvbnNcIiwgbnVsbCk7XG4gIH1cblxuICBnZXRQYWdlSlNBY3Rpb25zKHBhZ2VJbmRleCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldFBhZ2VKU0FjdGlvbnNcIiwge1xuICAgICAgcGFnZUluZGV4XG4gICAgfSk7XG4gIH1cblxuICBnZXRTdHJ1Y3RUcmVlKHBhZ2VJbmRleCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldFN0cnVjdFRyZWVcIiwge1xuICAgICAgcGFnZUluZGV4XG4gICAgfSk7XG4gIH1cblxuICBnZXRPdXRsaW5lKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldE91dGxpbmVcIiwgbnVsbCk7XG4gIH1cblxuICBnZXRPcHRpb25hbENvbnRlbnRDb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0T3B0aW9uYWxDb250ZW50Q29uZmlnXCIsIG51bGwpLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICByZXR1cm4gbmV3IF9vcHRpb25hbF9jb250ZW50X2NvbmZpZy5PcHRpb25hbENvbnRlbnRDb25maWcocmVzdWx0cyk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRQZXJtaXNzaW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXRQZXJtaXNzaW9uc1wiLCBudWxsKTtcbiAgfVxuXG4gIGdldE1ldGFkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLiNtZXRhZGF0YVByb21pc2UgfHw9IHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0TWV0YWRhdGFcIiwgbnVsbCkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluZm86IHJlc3VsdHNbMF0sXG4gICAgICAgIG1ldGFkYXRhOiByZXN1bHRzWzFdID8gbmV3IF9tZXRhZGF0YS5NZXRhZGF0YShyZXN1bHRzWzFdKSA6IG51bGwsXG4gICAgICAgIGNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lOiB0aGlzLl9mdWxsUmVhZGVyPy5maWxlbmFtZSA/PyBudWxsLFxuICAgICAgICBjb250ZW50TGVuZ3RoOiB0aGlzLl9mdWxsUmVhZGVyPy5jb250ZW50TGVuZ3RoID8/IG51bGxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBnZXRNYXJrSW5mbygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXRNYXJrSW5mb1wiLCBudWxsKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0Q2xlYW51cChrZWVwTG9hZGVkRm9udHMgPSBmYWxzZSkge1xuICAgIGF3YWl0IHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiQ2xlYW51cFwiLCBudWxsKTtcblxuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcGFnZSBvZiB0aGlzLiNwYWdlQ2FjaGUudmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGNsZWFudXBTdWNjZXNzZnVsID0gcGFnZS5jbGVhbnVwKCk7XG5cbiAgICAgIGlmICghY2xlYW51cFN1Y2Nlc3NmdWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzdGFydENsZWFudXA6IFBhZ2UgJHtwYWdlLnBhZ2VOdW1iZXJ9IGlzIGN1cnJlbnRseSByZW5kZXJpbmcuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jb21tb25PYmpzLmNsZWFyKCk7XG5cbiAgICBpZiAoIWtlZXBMb2FkZWRGb250cykge1xuICAgICAgdGhpcy5mb250TG9hZGVyLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgdGhpcy4jbWV0YWRhdGFQcm9taXNlID0gbnVsbDtcbiAgICB0aGlzLl9nZXRGaWVsZE9iamVjdHNQcm9taXNlID0gbnVsbDtcbiAgICB0aGlzLl9oYXNKU0FjdGlvbnNQcm9taXNlID0gbnVsbDtcbiAgfVxuXG4gIGdldCBsb2FkaW5nUGFyYW1zKCkge1xuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuX3BhcmFtcztcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJsb2FkaW5nUGFyYW1zXCIsIHtcbiAgICAgIGRpc2FibGVBdXRvRmV0Y2g6IHBhcmFtcy5kaXNhYmxlQXV0b0ZldGNoLFxuICAgICAgZW5hYmxlWGZhOiBwYXJhbXMuZW5hYmxlWGZhXG4gICAgfSk7XG4gIH1cblxufVxuXG5jbGFzcyBQREZPYmplY3RzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fb2JqcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH1cblxuICBfZW5zdXJlT2JqKG9iaklkKSB7XG4gICAgaWYgKHRoaXMuX29ianNbb2JqSWRdKSB7XG4gICAgICByZXR1cm4gdGhpcy5fb2Jqc1tvYmpJZF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX29ianNbb2JqSWRdID0ge1xuICAgICAgY2FwYWJpbGl0eTogKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLFxuICAgICAgZGF0YTogbnVsbCxcbiAgICAgIHJlc29sdmVkOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBnZXQob2JqSWQsIGNhbGxiYWNrID0gbnVsbCkge1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgdGhpcy5fZW5zdXJlT2JqKG9iaklkKS5jYXBhYmlsaXR5LnByb21pc2UudGhlbihjYWxsYmFjayk7XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG9iaiA9IHRoaXMuX29ianNbb2JqSWRdO1xuXG4gICAgaWYgKCFvYmogfHwgIW9iai5yZXNvbHZlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1ZXN0aW5nIG9iamVjdCB0aGF0IGlzbid0IHJlc29sdmVkIHlldCAke29iaklkfS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqLmRhdGE7XG4gIH1cblxuICBoYXMob2JqSWQpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzLl9vYmpzW29iaklkXTtcbiAgICByZXR1cm4gb2JqPy5yZXNvbHZlZCB8fCBmYWxzZTtcbiAgfVxuXG4gIHJlc29sdmUob2JqSWQsIGRhdGEpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzLl9lbnN1cmVPYmoob2JqSWQpO1xuXG4gICAgb2JqLnJlc29sdmVkID0gdHJ1ZTtcbiAgICBvYmouZGF0YSA9IGRhdGE7XG4gICAgb2JqLmNhcGFiaWxpdHkucmVzb2x2ZShkYXRhKTtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuX29ianMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbn1cblxuY2xhc3MgUmVuZGVyVGFzayB7XG4gIGNvbnN0cnVjdG9yKGludGVybmFsUmVuZGVyVGFzaykge1xuICAgIHRoaXMuX2ludGVybmFsUmVuZGVyVGFzayA9IGludGVybmFsUmVuZGVyVGFzaztcbiAgICB0aGlzLm9uQ29udGludWUgPSBudWxsO1xuICB9XG5cbiAgZ2V0IHByb21pc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludGVybmFsUmVuZGVyVGFzay5jYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5faW50ZXJuYWxSZW5kZXJUYXNrLmNhbmNlbCgpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5SZW5kZXJUYXNrID0gUmVuZGVyVGFzaztcblxuY2xhc3MgSW50ZXJuYWxSZW5kZXJUYXNrIHtcbiAgc3RhdGljIGdldCBjYW52YXNJblVzZSgpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJjYW52YXNJblVzZVwiLCBuZXcgV2Vha1NldCgpKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBjYWxsYmFjayxcbiAgICBwYXJhbXMsXG4gICAgb2JqcyxcbiAgICBjb21tb25PYmpzLFxuICAgIGFubm90YXRpb25DYW52YXNNYXAsXG4gICAgb3BlcmF0b3JMaXN0LFxuICAgIHBhZ2VJbmRleCxcbiAgICBjYW52YXNGYWN0b3J5LFxuICAgIHVzZVJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZhbHNlLFxuICAgIHBkZkJ1ZyA9IGZhbHNlXG4gIH0pIHtcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XG4gICAgdGhpcy5vYmpzID0gb2JqcztcbiAgICB0aGlzLmNvbW1vbk9ianMgPSBjb21tb25PYmpzO1xuICAgIHRoaXMuYW5ub3RhdGlvbkNhbnZhc01hcCA9IGFubm90YXRpb25DYW52YXNNYXA7XG4gICAgdGhpcy5vcGVyYXRvckxpc3RJZHggPSBudWxsO1xuICAgIHRoaXMub3BlcmF0b3JMaXN0ID0gb3BlcmF0b3JMaXN0O1xuICAgIHRoaXMuX3BhZ2VJbmRleCA9IHBhZ2VJbmRleDtcbiAgICB0aGlzLmNhbnZhc0ZhY3RvcnkgPSBjYW52YXNGYWN0b3J5O1xuICAgIHRoaXMuX3BkZkJ1ZyA9IHBkZkJ1ZztcbiAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjayA9IG51bGw7XG4gICAgdGhpcy5ncmFwaGljc1JlYWR5ID0gZmFsc2U7XG4gICAgdGhpcy5fdXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gdXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSB0cnVlICYmIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCI7XG4gICAgdGhpcy5jYW5jZWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgdGhpcy50YXNrID0gbmV3IFJlbmRlclRhc2sodGhpcyk7XG4gICAgdGhpcy5fY2FuY2VsQm91bmQgPSB0aGlzLmNhbmNlbC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2NvbnRpbnVlQm91bmQgPSB0aGlzLl9jb250aW51ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX3NjaGVkdWxlTmV4dEJvdW5kID0gdGhpcy5fc2NoZWR1bGVOZXh0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5fbmV4dEJvdW5kID0gdGhpcy5fbmV4dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2NhbnZhcyA9IHBhcmFtcy5jYW52YXNDb250ZXh0LmNhbnZhcztcbiAgfVxuXG4gIGdldCBjb21wbGV0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FwYWJpbGl0eS5wcm9taXNlLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcbiAgfVxuXG4gIGluaXRpYWxpemVHcmFwaGljcyh7XG4gICAgdHJhbnNwYXJlbmN5ID0gZmFsc2UsXG4gICAgb3B0aW9uYWxDb250ZW50Q29uZmlnXG4gIH0pIHtcbiAgICBpZiAodGhpcy5jYW5jZWxsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY2FudmFzKSB7XG4gICAgICBpZiAoSW50ZXJuYWxSZW5kZXJUYXNrLmNhbnZhc0luVXNlLmhhcyh0aGlzLl9jYW52YXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCB1c2UgdGhlIHNhbWUgY2FudmFzIGR1cmluZyBtdWx0aXBsZSByZW5kZXIoKSBvcGVyYXRpb25zLiBcIiArIFwiVXNlIGRpZmZlcmVudCBjYW52YXMgb3IgZW5zdXJlIHByZXZpb3VzIG9wZXJhdGlvbnMgd2VyZSBcIiArIFwiY2FuY2VsbGVkIG9yIGNvbXBsZXRlZC5cIik7XG4gICAgICB9XG5cbiAgICAgIEludGVybmFsUmVuZGVyVGFzay5jYW52YXNJblVzZS5hZGQodGhpcy5fY2FudmFzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGRmQnVnICYmIGdsb2JhbFRoaXMuU3RlcHBlck1hbmFnZXI/LmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuc3RlcHBlciA9IGdsb2JhbFRoaXMuU3RlcHBlck1hbmFnZXIuY3JlYXRlKHRoaXMuX3BhZ2VJbmRleCk7XG4gICAgICB0aGlzLnN0ZXBwZXIuaW5pdCh0aGlzLm9wZXJhdG9yTGlzdCk7XG4gICAgICB0aGlzLnN0ZXBwZXIubmV4dEJyZWFrUG9pbnQgPSB0aGlzLnN0ZXBwZXIuZ2V0TmV4dEJyZWFrUG9pbnQoKTtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBjYW52YXNDb250ZXh0LFxuICAgICAgdmlld3BvcnQsXG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICBpbWFnZUxheWVyLFxuICAgICAgYmFja2dyb3VuZFxuICAgIH0gPSB0aGlzLnBhcmFtcztcbiAgICB0aGlzLmdmeCA9IG5ldyBfY2FudmFzLkNhbnZhc0dyYXBoaWNzKGNhbnZhc0NvbnRleHQsIHRoaXMuY29tbW9uT2JqcywgdGhpcy5vYmpzLCB0aGlzLmNhbnZhc0ZhY3RvcnksIGltYWdlTGF5ZXIsIG9wdGlvbmFsQ29udGVudENvbmZpZywgdGhpcy5hbm5vdGF0aW9uQ2FudmFzTWFwKTtcbiAgICB0aGlzLmdmeC5iZWdpbkRyYXdpbmcoe1xuICAgICAgdHJhbnNmb3JtLFxuICAgICAgdmlld3BvcnQsXG4gICAgICB0cmFuc3BhcmVuY3ksXG4gICAgICBiYWNrZ3JvdW5kXG4gICAgfSk7XG4gICAgdGhpcy5vcGVyYXRvckxpc3RJZHggPSAwO1xuICAgIHRoaXMuZ3JhcGhpY3NSZWFkeSA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5ncmFwaGljc1JlYWR5Q2FsbGJhY2spIHtcbiAgICAgIHRoaXMuZ3JhcGhpY3NSZWFkeUNhbGxiYWNrKCk7XG4gICAgfVxuICB9XG5cbiAgY2FuY2VsKGVycm9yID0gbnVsbCkge1xuICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xuICAgIHRoaXMuY2FuY2VsbGVkID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLmdmeCkge1xuICAgICAgdGhpcy5nZnguZW5kRHJhd2luZygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jYW52YXMpIHtcbiAgICAgIEludGVybmFsUmVuZGVyVGFzay5jYW52YXNJblVzZS5kZWxldGUodGhpcy5fY2FudmFzKTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrKGVycm9yIHx8IG5ldyBfZGlzcGxheV91dGlscy5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24oYFJlbmRlcmluZyBjYW5jZWxsZWQsIHBhZ2UgJHt0aGlzLl9wYWdlSW5kZXggKyAxfWAsIFwiY2FudmFzXCIpKTtcbiAgfVxuXG4gIG9wZXJhdG9yTGlzdENoYW5nZWQoKSB7XG4gICAgaWYgKCF0aGlzLmdyYXBoaWNzUmVhZHkpIHtcbiAgICAgIGlmICghdGhpcy5ncmFwaGljc1JlYWR5Q2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc1JlYWR5Q2FsbGJhY2sgPSB0aGlzLl9jb250aW51ZUJvdW5kO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RlcHBlcikge1xuICAgICAgdGhpcy5zdGVwcGVyLnVwZGF0ZU9wZXJhdG9yTGlzdCh0aGlzLm9wZXJhdG9yTGlzdCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucnVubmluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbnRpbnVlKCk7XG4gIH1cblxuICBfY29udGludWUoKSB7XG4gICAgdGhpcy5ydW5uaW5nID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLmNhbmNlbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRhc2sub25Db250aW51ZSkge1xuICAgICAgdGhpcy50YXNrLm9uQ29udGludWUodGhpcy5fc2NoZWR1bGVOZXh0Qm91bmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zY2hlZHVsZU5leHQoKTtcbiAgICB9XG4gIH1cblxuICBfc2NoZWR1bGVOZXh0KCkge1xuICAgIGlmICh0aGlzLl91c2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9uZXh0Qm91bmQoKS5jYXRjaCh0aGlzLl9jYW5jZWxCb3VuZCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbih0aGlzLl9uZXh0Qm91bmQpLmNhdGNoKHRoaXMuX2NhbmNlbEJvdW5kKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfbmV4dCgpIHtcbiAgICBpZiAodGhpcy5jYW5jZWxsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9wZXJhdG9yTGlzdElkeCA9IHRoaXMuZ2Z4LmV4ZWN1dGVPcGVyYXRvckxpc3QodGhpcy5vcGVyYXRvckxpc3QsIHRoaXMub3BlcmF0b3JMaXN0SWR4LCB0aGlzLl9jb250aW51ZUJvdW5kLCB0aGlzLnN0ZXBwZXIpO1xuXG4gICAgaWYgKHRoaXMub3BlcmF0b3JMaXN0SWR4ID09PSB0aGlzLm9wZXJhdG9yTGlzdC5hcmdzQXJyYXkubGVuZ3RoKSB7XG4gICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcblxuICAgICAgaWYgKHRoaXMub3BlcmF0b3JMaXN0Lmxhc3RDaHVuaykge1xuICAgICAgICB0aGlzLmdmeC5lbmREcmF3aW5nKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NhbnZhcykge1xuICAgICAgICAgIEludGVybmFsUmVuZGVyVGFzay5jYW52YXNJblVzZS5kZWxldGUodGhpcy5fY2FudmFzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuXG5jb25zdCB2ZXJzaW9uID0gJzIuMTIuMzEzJztcbmV4cG9ydHMudmVyc2lvbiA9IHZlcnNpb247XG5jb25zdCBidWlsZCA9ICdhMmFlNTZmMzknO1xuZXhwb3J0cy5idWlsZCA9IGJ1aWxkO1xuXG4vKioqLyB9KSxcbi8qIDcgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuRm9udExvYWRlciA9IGV4cG9ydHMuRm9udEZhY2VPYmplY3QgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbmNsYXNzIEJhc2VGb250TG9hZGVyIHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIGRvY0lkLFxuICAgIG9uVW5zdXBwb3J0ZWRGZWF0dXJlLFxuICAgIG93bmVyRG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50LFxuICAgIHN0eWxlRWxlbWVudCA9IG51bGxcbiAgfSkge1xuICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBCYXNlRm9udExvYWRlcikge1xuICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkNhbm5vdCBpbml0aWFsaXplIEJhc2VGb250TG9hZGVyLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmRvY0lkID0gZG9jSWQ7XG4gICAgdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUgPSBvblVuc3VwcG9ydGVkRmVhdHVyZTtcbiAgICB0aGlzLl9kb2N1bWVudCA9IG93bmVyRG9jdW1lbnQ7XG4gICAgdGhpcy5uYXRpdmVGb250RmFjZXMgPSBbXTtcbiAgICB0aGlzLnN0eWxlRWxlbWVudCA9IG51bGw7XG4gIH1cblxuICBhZGROYXRpdmVGb250RmFjZShuYXRpdmVGb250RmFjZSkge1xuICAgIHRoaXMubmF0aXZlRm9udEZhY2VzLnB1c2gobmF0aXZlRm9udEZhY2UpO1xuXG4gICAgdGhpcy5fZG9jdW1lbnQuZm9udHMuYWRkKG5hdGl2ZUZvbnRGYWNlKTtcbiAgfVxuXG4gIGluc2VydFJ1bGUocnVsZSkge1xuICAgIGxldCBzdHlsZUVsZW1lbnQgPSB0aGlzLnN0eWxlRWxlbWVudDtcblxuICAgIGlmICghc3R5bGVFbGVtZW50KSB7XG4gICAgICBzdHlsZUVsZW1lbnQgPSB0aGlzLnN0eWxlRWxlbWVudCA9IHRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICAgIHN0eWxlRWxlbWVudC5pZCA9IGBQREZKU19GT05UX1NUWUxFX1RBR18ke3RoaXMuZG9jSWR9YDtcblxuICAgICAgdGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0eWxlU2hlZXQgPSBzdHlsZUVsZW1lbnQuc2hlZXQ7XG4gICAgc3R5bGVTaGVldC5pbnNlcnRSdWxlKHJ1bGUsIHN0eWxlU2hlZXQuY3NzUnVsZXMubGVuZ3RoKTtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIGZvciAoY29uc3QgbmF0aXZlRm9udEZhY2Ugb2YgdGhpcy5uYXRpdmVGb250RmFjZXMpIHtcbiAgICAgIHRoaXMuX2RvY3VtZW50LmZvbnRzLmRlbGV0ZShuYXRpdmVGb250RmFjZSk7XG4gICAgfVxuXG4gICAgdGhpcy5uYXRpdmVGb250RmFjZXMubGVuZ3RoID0gMDtcblxuICAgIGlmICh0aGlzLnN0eWxlRWxlbWVudCkge1xuICAgICAgdGhpcy5zdHlsZUVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICB0aGlzLnN0eWxlRWxlbWVudCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYmluZChmb250KSB7XG4gICAgaWYgKGZvbnQuYXR0YWNoZWQgfHwgZm9udC5taXNzaW5nRmlsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvbnQuYXR0YWNoZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuaXNGb250TG9hZGluZ0FQSVN1cHBvcnRlZCkge1xuICAgICAgY29uc3QgbmF0aXZlRm9udEZhY2UgPSBmb250LmNyZWF0ZU5hdGl2ZUZvbnRGYWNlKCk7XG5cbiAgICAgIGlmIChuYXRpdmVGb250RmFjZSkge1xuICAgICAgICB0aGlzLmFkZE5hdGl2ZUZvbnRGYWNlKG5hdGl2ZUZvbnRGYWNlKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IG5hdGl2ZUZvbnRGYWNlLmxvYWRlZDtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICB0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZSh7XG4gICAgICAgICAgICBmZWF0dXJlSWQ6IF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udExvYWROYXRpdmVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgRmFpbGVkIHRvIGxvYWQgZm9udCAnJHtuYXRpdmVGb250RmFjZS5mYW1pbHl9JzogJyR7ZXh9Jy5gKTtcbiAgICAgICAgICBmb250LmRpc2FibGVGb250RmFjZSA9IHRydWU7XG4gICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bGUgPSBmb250LmNyZWF0ZUZvbnRGYWNlUnVsZSgpO1xuXG4gICAgaWYgKHJ1bGUpIHtcbiAgICAgIHRoaXMuaW5zZXJ0UnVsZShydWxlKTtcblxuICAgICAgaWYgKHRoaXMuaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuX3F1ZXVlTG9hZGluZ0NhbGxiYWNrKHJlc29sdmUpO1xuXG4gICAgICAgIHRoaXMuX3ByZXBhcmVGb250TG9hZEV2ZW50KFtydWxlXSwgW2ZvbnRdLCByZXF1ZXN0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9xdWV1ZUxvYWRpbmdDYWxsYmFjayhjYWxsYmFjaykge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYF9xdWV1ZUxvYWRpbmdDYWxsYmFja2AuXCIpO1xuICB9XG5cbiAgZ2V0IGlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQoKSB7XG4gICAgY29uc3QgaGFzRm9udHMgPSAhIXRoaXMuX2RvY3VtZW50Py5mb250cztcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJpc0ZvbnRMb2FkaW5nQVBJU3VwcG9ydGVkXCIsIGhhc0ZvbnRzKTtcbiAgfVxuXG4gIGdldCBpc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZCgpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIGBpc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZGAuXCIpO1xuICB9XG5cbiAgZ2V0IF9sb2FkVGVzdEZvbnQoKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgX2xvYWRUZXN0Rm9udGAuXCIpO1xuICB9XG5cbiAgX3ByZXBhcmVGb250TG9hZEV2ZW50KHJ1bGVzLCBmb250c1RvTG9hZCwgcmVxdWVzdCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYF9wcmVwYXJlRm9udExvYWRFdmVudGAuXCIpO1xuICB9XG5cbn1cblxubGV0IEZvbnRMb2FkZXI7XG5leHBvcnRzLkZvbnRMb2FkZXIgPSBGb250TG9hZGVyO1xue1xuICBleHBvcnRzLkZvbnRMb2FkZXIgPSBGb250TG9hZGVyID0gY2xhc3MgR2VuZXJpY0ZvbnRMb2FkZXIgZXh0ZW5kcyBCYXNlRm9udExvYWRlciB7XG4gICAgY29uc3RydWN0b3IocGFyYW1zKSB7XG4gICAgICBzdXBlcihwYXJhbXMpO1xuICAgICAgdGhpcy5sb2FkaW5nQ29udGV4dCA9IHtcbiAgICAgICAgcmVxdWVzdHM6IFtdLFxuICAgICAgICBuZXh0UmVxdWVzdElkOiAwXG4gICAgICB9O1xuICAgICAgdGhpcy5sb2FkVGVzdEZvbnRJZCA9IDA7XG4gICAgfVxuXG4gICAgZ2V0IGlzU3luY0ZvbnRMb2FkaW5nU3VwcG9ydGVkKCkge1xuICAgICAgbGV0IHN1cHBvcnRlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAodHlwZW9mIG5hdmlnYXRvciA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBzdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbSA9IC9Nb3ppbGxhXFwvNS4wLio/cnY6KFxcZCspLio/IEdlY2tvLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG4gICAgICAgIGlmIChtPy5bMV0gPj0gMTQpIHtcbiAgICAgICAgICBzdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImlzU3luY0ZvbnRMb2FkaW5nU3VwcG9ydGVkXCIsIHN1cHBvcnRlZCk7XG4gICAgfVxuXG4gICAgX3F1ZXVlTG9hZGluZ0NhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgICBmdW5jdGlvbiBjb21wbGV0ZVJlcXVlc3QoKSB7XG4gICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKCFyZXF1ZXN0LmRvbmUsIFwiY29tcGxldGVSZXF1ZXN0KCkgY2Fubm90IGJlIGNhbGxlZCB0d2ljZS5cIik7XG4gICAgICAgIHJlcXVlc3QuZG9uZSA9IHRydWU7XG5cbiAgICAgICAgd2hpbGUgKGNvbnRleHQucmVxdWVzdHMubGVuZ3RoID4gMCAmJiBjb250ZXh0LnJlcXVlc3RzWzBdLmRvbmUpIHtcbiAgICAgICAgICBjb25zdCBvdGhlclJlcXVlc3QgPSBjb250ZXh0LnJlcXVlc3RzLnNoaWZ0KCk7XG4gICAgICAgICAgc2V0VGltZW91dChvdGhlclJlcXVlc3QuY2FsbGJhY2ssIDApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmxvYWRpbmdDb250ZXh0O1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgaWQ6IGBwZGZqcy1mb250LWxvYWRpbmctJHtjb250ZXh0Lm5leHRSZXF1ZXN0SWQrK31gLFxuICAgICAgICBkb25lOiBmYWxzZSxcbiAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlUmVxdWVzdCxcbiAgICAgICAgY2FsbGJhY2tcbiAgICAgIH07XG4gICAgICBjb250ZXh0LnJlcXVlc3RzLnB1c2gocmVxdWVzdCk7XG4gICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICB9XG5cbiAgICBnZXQgX2xvYWRUZXN0Rm9udCgpIHtcbiAgICAgIGNvbnN0IGdldExvYWRUZXN0Rm9udCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGF0b2IoXCJUMVJVVHdBTEFJQUFBd0F3UTBaR0lESHRaZzRBQUFPWUFBQUFnVVpHVkUxbGt6WndBQUFFSEFBQUFCeEhSRVZHQUJRQVwiICsgXCJGUUFBQkRnQUFBQWVUMU12TWxZTll3a0FBQUVnQUFBQVlHTnRZWEFCRFFMVUFBQUNOQUFBQVVKb1pXRmsveFZGRFFBQVwiICsgXCJBTHdBQUFBMmFHaGxZUWRrQStvQUFBRDBBQUFBSkdodGRIZ0Q2QUFBQUFBRVdBQUFBQVp0WVhod0FBSlFBQUFBQVJnQVwiICsgXCJBQUFHYm1GdFpWam1kSDRBQUFHQUFBQUFzWEJ2YzNUL2hnQXpBQUFEZUFBQUFDQUFBUUFBQUFFQUFMWlJGc1JmRHp6MVwiICsgXCJBQXNENkFBQUFBRE9CT1RMQUFBQUFNNEtIRHdBQUFBQUErZ0RJUUFBQUFnQUFnQUFBQUFBQUFBQkFBQURJUUFBQUZvRFwiICsgXCI2QUFBQUFBRDZBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFVQUFBQWdBQUFBUUQ2QUgwQUFVQUFBS0tBcndBQUFDTVwiICsgXCJBb29DdkFBQUFlQUFNUUVDQUFBQ0FBWUpBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUZCbVJXUUF3QUF1QUM0RFwiICsgXCJJUDg0QUZvRElRQUFBQUFBQVFBQUFBQUFBQUFBQUNBQUlBQUJBQUFBRGdDdUFBRUFBQUFBQUFBQUFRQUFBQUVBQUFBQVwiICsgXCJBQUVBQVFBQUFBRUFBQUFBQUFJQUFRQUFBQUVBQUFBQUFBTUFBUUFBQUFFQUFBQUFBQVFBQVFBQUFBRUFBQUFBQUFVQVwiICsgXCJBUUFBQUFFQUFBQUFBQVlBQVFBQUFBTUFBUVFKQUFBQUFnQUJBQU1BQVFRSkFBRUFBZ0FCQUFNQUFRUUpBQUlBQWdBQlwiICsgXCJBQU1BQVFRSkFBTUFBZ0FCQUFNQUFRUUpBQVFBQWdBQkFBTUFBUVFKQUFVQUFnQUJBQU1BQVFRSkFBWUFBZ0FCV0FCWVwiICsgXCJBQUFBQUFBQUF3QUFBQU1BQUFBY0FBRUFBQUFBQUR3QUF3QUJBQUFBSEFBRUFDQUFBQUFFQUFRQUFRQUFBQzcvL3dBQVwiICsgXCJBQzcvLy8vVEFBRUFBQUFBQUFBQkJnQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVwiICsgXCJBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVwiICsgXCJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVwiICsgXCJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVwiICsgXCJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVwiICsgXCJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUFBQUFBQUQvZ3dBeUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQVwiICsgXCJBQUFCQUFRRUFBRUJBUUpZQUFFQkFTSDREd0Q0R3dIRUF2Z2NBL2dYQkl3TUFZdUwrbno1dFFYa0Q1ajNDQkxuRVFBQ1wiICsgXCJBUUVCSVZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlBQUFCQVFBQUR3QUNBUUVFRS90M1wiICsgXCJEb3Y2ZkFINmZBVCtmUHA4K253SERvc01Ddm0xQ3ZtMURBejZmQlFBQUFBQUFBQUJBQUFBQU1tSmJ6RUFBQUFBemdUalwiICsgXCJGUUFBQUFET0JPUXBBQUVBQUFBQUFBQUFEQUFVQUFRQUFBQUJBQUFBQWdBQkFBQUFBQUFBQUFBRDZBQUFBQUFBQUE9PVwiKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIl9sb2FkVGVzdEZvbnRcIiwgZ2V0TG9hZFRlc3RGb250KCkpO1xuICAgIH1cblxuICAgIF9wcmVwYXJlRm9udExvYWRFdmVudChydWxlcywgZm9udHMsIHJlcXVlc3QpIHtcbiAgICAgIGZ1bmN0aW9uIGludDMyKGRhdGEsIG9mZnNldCkge1xuICAgICAgICByZXR1cm4gZGF0YS5jaGFyQ29kZUF0KG9mZnNldCkgPDwgMjQgfCBkYXRhLmNoYXJDb2RlQXQob2Zmc2V0ICsgMSkgPDwgMTYgfCBkYXRhLmNoYXJDb2RlQXQob2Zmc2V0ICsgMikgPDwgOCB8IGRhdGEuY2hhckNvZGVBdChvZmZzZXQgKyAzKSAmIDB4ZmY7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHNwbGljZVN0cmluZyhzLCBvZmZzZXQsIHJlbW92ZSwgaW5zZXJ0KSB7XG4gICAgICAgIGNvbnN0IGNodW5rMSA9IHMuc3Vic3RyaW5nKDAsIG9mZnNldCk7XG4gICAgICAgIGNvbnN0IGNodW5rMiA9IHMuc3Vic3RyaW5nKG9mZnNldCArIHJlbW92ZSk7XG4gICAgICAgIHJldHVybiBjaHVuazEgKyBpbnNlcnQgKyBjaHVuazI7XG4gICAgICB9XG5cbiAgICAgIGxldCBpLCBpaTtcblxuICAgICAgY29uc3QgY2FudmFzID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcblxuICAgICAgY2FudmFzLndpZHRoID0gMTtcbiAgICAgIGNhbnZhcy5oZWlnaHQgPSAxO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgIGxldCBjYWxsZWQgPSAwO1xuXG4gICAgICBmdW5jdGlvbiBpc0ZvbnRSZWFkeShuYW1lLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsZWQrKztcblxuICAgICAgICBpZiAoY2FsbGVkID4gMzApIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJMb2FkIHRlc3QgZm9udCBuZXZlciBsb2FkZWQuXCIpO1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY3R4LmZvbnQgPSBcIjMwcHggXCIgKyBuYW1lO1xuICAgICAgICBjdHguZmlsbFRleHQoXCIuXCIsIDAsIDIwKTtcbiAgICAgICAgY29uc3QgaW1hZ2VEYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCAxLCAxKTtcblxuICAgICAgICBpZiAoaW1hZ2VEYXRhLmRhdGFbM10gPiAwKSB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzZXRUaW1lb3V0KGlzRm9udFJlYWR5LmJpbmQobnVsbCwgbmFtZSwgY2FsbGJhY2spKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbG9hZFRlc3RGb250SWQgPSBgbHQke0RhdGUubm93KCl9JHt0aGlzLmxvYWRUZXN0Rm9udElkKyt9YDtcbiAgICAgIGxldCBkYXRhID0gdGhpcy5fbG9hZFRlc3RGb250O1xuICAgICAgY29uc3QgQ09NTUVOVF9PRkZTRVQgPSA5NzY7XG4gICAgICBkYXRhID0gc3BsaWNlU3RyaW5nKGRhdGEsIENPTU1FTlRfT0ZGU0VULCBsb2FkVGVzdEZvbnRJZC5sZW5ndGgsIGxvYWRUZXN0Rm9udElkKTtcbiAgICAgIGNvbnN0IENGRl9DSEVDS1NVTV9PRkZTRVQgPSAxNjtcbiAgICAgIGNvbnN0IFhYWFhfVkFMVUUgPSAweDU4NTg1ODU4O1xuICAgICAgbGV0IGNoZWNrc3VtID0gaW50MzIoZGF0YSwgQ0ZGX0NIRUNLU1VNX09GRlNFVCk7XG5cbiAgICAgIGZvciAoaSA9IDAsIGlpID0gbG9hZFRlc3RGb250SWQubGVuZ3RoIC0gMzsgaSA8IGlpOyBpICs9IDQpIHtcbiAgICAgICAgY2hlY2tzdW0gPSBjaGVja3N1bSAtIFhYWFhfVkFMVUUgKyBpbnQzMihsb2FkVGVzdEZvbnRJZCwgaSkgfCAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoaSA8IGxvYWRUZXN0Rm9udElkLmxlbmd0aCkge1xuICAgICAgICBjaGVja3N1bSA9IGNoZWNrc3VtIC0gWFhYWF9WQUxVRSArIGludDMyKGxvYWRUZXN0Rm9udElkICsgXCJYWFhcIiwgaSkgfCAwO1xuICAgICAgfVxuXG4gICAgICBkYXRhID0gc3BsaWNlU3RyaW5nKGRhdGEsIENGRl9DSEVDS1NVTV9PRkZTRVQsIDQsICgwLCBfdXRpbC5zdHJpbmczMikoY2hlY2tzdW0pKTtcbiAgICAgIGNvbnN0IHVybCA9IGB1cmwoZGF0YTpmb250L29wZW50eXBlO2Jhc2U2NCwke2J0b2EoZGF0YSl9KTtgO1xuICAgICAgY29uc3QgcnVsZSA9IGBAZm9udC1mYWNlIHtmb250LWZhbWlseTpcIiR7bG9hZFRlc3RGb250SWR9XCI7c3JjOiR7dXJsfX1gO1xuICAgICAgdGhpcy5pbnNlcnRSdWxlKHJ1bGUpO1xuICAgICAgY29uc3QgbmFtZXMgPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBmb250IG9mIGZvbnRzKSB7XG4gICAgICAgIG5hbWVzLnB1c2goZm9udC5sb2FkZWROYW1lKTtcbiAgICAgIH1cblxuICAgICAgbmFtZXMucHVzaChsb2FkVGVzdEZvbnRJZCk7XG5cbiAgICAgIGNvbnN0IGRpdiA9IHRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICAgIGRpdi5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgICAgIGRpdi5zdHlsZS53aWR0aCA9IGRpdi5zdHlsZS5oZWlnaHQgPSBcIjEwcHhcIjtcbiAgICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgICAgIGRpdi5zdHlsZS50b3AgPSBkaXYuc3R5bGUubGVmdCA9IFwiMHB4XCI7XG5cbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuICAgICAgICBjb25zdCBzcGFuID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG5cbiAgICAgICAgc3Bhbi50ZXh0Q29udGVudCA9IFwiSGlcIjtcbiAgICAgICAgc3Bhbi5zdHlsZS5mb250RmFtaWx5ID0gbmFtZTtcbiAgICAgICAgZGl2LmFwcGVuZENoaWxkKHNwYW4pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7XG5cbiAgICAgIGlzRm9udFJlYWR5KGxvYWRUZXN0Rm9udElkLCAoKSA9PiB7XG4gICAgICAgIGRpdi5yZW1vdmUoKTtcbiAgICAgICAgcmVxdWVzdC5jb21wbGV0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gIH07XG59XG5cbmNsYXNzIEZvbnRGYWNlT2JqZWN0IHtcbiAgY29uc3RydWN0b3IodHJhbnNsYXRlZERhdGEsIHtcbiAgICBpc0V2YWxTdXBwb3J0ZWQgPSB0cnVlLFxuICAgIGRpc2FibGVGb250RmFjZSA9IGZhbHNlLFxuICAgIGlnbm9yZUVycm9ycyA9IGZhbHNlLFxuICAgIG9uVW5zdXBwb3J0ZWRGZWF0dXJlLFxuICAgIGZvbnRSZWdpc3RyeSA9IG51bGxcbiAgfSkge1xuICAgIHRoaXMuY29tcGlsZWRHbHlwaHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgZm9yIChjb25zdCBpIGluIHRyYW5zbGF0ZWREYXRhKSB7XG4gICAgICB0aGlzW2ldID0gdHJhbnNsYXRlZERhdGFbaV07XG4gICAgfVxuXG4gICAgdGhpcy5pc0V2YWxTdXBwb3J0ZWQgPSBpc0V2YWxTdXBwb3J0ZWQgIT09IGZhbHNlO1xuICAgIHRoaXMuZGlzYWJsZUZvbnRGYWNlID0gZGlzYWJsZUZvbnRGYWNlID09PSB0cnVlO1xuICAgIHRoaXMuaWdub3JlRXJyb3JzID0gaWdub3JlRXJyb3JzID09PSB0cnVlO1xuICAgIHRoaXMuX29uVW5zdXBwb3J0ZWRGZWF0dXJlID0gb25VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgdGhpcy5mb250UmVnaXN0cnkgPSBmb250UmVnaXN0cnk7XG4gIH1cblxuICBjcmVhdGVOYXRpdmVGb250RmFjZSgpIHtcbiAgICBpZiAoIXRoaXMuZGF0YSB8fCB0aGlzLmRpc2FibGVGb250RmFjZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IG5hdGl2ZUZvbnRGYWNlO1xuXG4gICAgaWYgKCF0aGlzLmNzc0ZvbnRJbmZvKSB7XG4gICAgICBuYXRpdmVGb250RmFjZSA9IG5ldyBGb250RmFjZSh0aGlzLmxvYWRlZE5hbWUsIHRoaXMuZGF0YSwge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjc3MgPSB7XG4gICAgICAgIHdlaWdodDogdGhpcy5jc3NGb250SW5mby5mb250V2VpZ2h0XG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZSkge1xuICAgICAgICBjc3Muc3R5bGUgPSBgb2JsaXF1ZSAke3RoaXMuY3NzRm9udEluZm8uaXRhbGljQW5nbGV9ZGVnYDtcbiAgICAgIH1cblxuICAgICAgbmF0aXZlRm9udEZhY2UgPSBuZXcgRm9udEZhY2UodGhpcy5jc3NGb250SW5mby5mb250RmFtaWx5LCB0aGlzLmRhdGEsIGNzcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9udFJlZ2lzdHJ5KSB7XG4gICAgICB0aGlzLmZvbnRSZWdpc3RyeS5yZWdpc3RlckZvbnQodGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdGl2ZUZvbnRGYWNlO1xuICB9XG5cbiAgY3JlYXRlRm9udEZhY2VSdWxlKCkge1xuICAgIGlmICghdGhpcy5kYXRhIHx8IHRoaXMuZGlzYWJsZUZvbnRGYWNlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKHRoaXMuZGF0YSk7XG4gICAgY29uc3QgdXJsID0gYHVybChkYXRhOiR7dGhpcy5taW1ldHlwZX07YmFzZTY0LCR7YnRvYShkYXRhKX0pO2A7XG4gICAgbGV0IHJ1bGU7XG5cbiAgICBpZiAoIXRoaXMuY3NzRm9udEluZm8pIHtcbiAgICAgIHJ1bGUgPSBgQGZvbnQtZmFjZSB7Zm9udC1mYW1pbHk6XCIke3RoaXMubG9hZGVkTmFtZX1cIjtzcmM6JHt1cmx9fWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBjc3MgPSBgZm9udC13ZWlnaHQ6ICR7dGhpcy5jc3NGb250SW5mby5mb250V2VpZ2h0fTtgO1xuXG4gICAgICBpZiAodGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZSkge1xuICAgICAgICBjc3MgKz0gYGZvbnQtc3R5bGU6IG9ibGlxdWUgJHt0aGlzLmNzc0ZvbnRJbmZvLml0YWxpY0FuZ2xlfWRlZztgO1xuICAgICAgfVxuXG4gICAgICBydWxlID0gYEBmb250LWZhY2Uge2ZvbnQtZmFtaWx5OlwiJHt0aGlzLmNzc0ZvbnRJbmZvLmZvbnRGYW1pbHl9XCI7JHtjc3N9c3JjOiR7dXJsfX1gO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZvbnRSZWdpc3RyeSkge1xuICAgICAgdGhpcy5mb250UmVnaXN0cnkucmVnaXN0ZXJGb250KHRoaXMsIHVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBnZXRQYXRoR2VuZXJhdG9yKG9ianMsIGNoYXJhY3Rlcikge1xuICAgIGlmICh0aGlzLmNvbXBpbGVkR2x5cGhzW2NoYXJhY3Rlcl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29tcGlsZWRHbHlwaHNbY2hhcmFjdGVyXTtcbiAgICB9XG5cbiAgICBsZXQgY21kcztcblxuICAgIHRyeSB7XG4gICAgICBjbWRzID0gb2Jqcy5nZXQodGhpcy5sb2FkZWROYW1lICsgXCJfcGF0aF9cIiArIGNoYXJhY3Rlcik7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmICghdGhpcy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgICAgdGhyb3cgZXg7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX29uVW5zdXBwb3J0ZWRGZWF0dXJlKHtcbiAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRHZXRQYXRoXG4gICAgICB9KTtcblxuICAgICAgKDAsIF91dGlsLndhcm4pKGBnZXRQYXRoR2VuZXJhdG9yIC0gaWdub3JpbmcgY2hhcmFjdGVyOiBcIiR7ZXh9XCIuYCk7XG4gICAgICByZXR1cm4gdGhpcy5jb21waWxlZEdseXBoc1tjaGFyYWN0ZXJdID0gZnVuY3Rpb24gKGMsIHNpemUpIHt9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzRXZhbFN1cHBvcnRlZCAmJiBfdXRpbC5Jc0V2YWxTdXBwb3J0ZWRDYWNoZWQudmFsdWUpIHtcbiAgICAgIGNvbnN0IGpzQnVmID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgY3VycmVudCBvZiBjbWRzKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBjdXJyZW50LmFyZ3MgIT09IHVuZGVmaW5lZCA/IGN1cnJlbnQuYXJncy5qb2luKFwiLFwiKSA6IFwiXCI7XG4gICAgICAgIGpzQnVmLnB1c2goXCJjLlwiLCBjdXJyZW50LmNtZCwgXCIoXCIsIGFyZ3MsIFwiKTtcXG5cIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2NoYXJhY3Rlcl0gPSBuZXcgRnVuY3Rpb24oXCJjXCIsIFwic2l6ZVwiLCBqc0J1Zi5qb2luKFwiXCIpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb21waWxlZEdseXBoc1tjaGFyYWN0ZXJdID0gZnVuY3Rpb24gKGMsIHNpemUpIHtcbiAgICAgIGZvciAoY29uc3QgY3VycmVudCBvZiBjbWRzKSB7XG4gICAgICAgIGlmIChjdXJyZW50LmNtZCA9PT0gXCJzY2FsZVwiKSB7XG4gICAgICAgICAgY3VycmVudC5hcmdzID0gW3NpemUsIC1zaXplXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNbY3VycmVudC5jbWRdLmFwcGx5KGMsIGN1cnJlbnQuYXJncyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuRm9udEZhY2VPYmplY3QgPSBGb250RmFjZU9iamVjdDtcblxuLyoqKi8gfSksXG4vKiA4ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLk5vZGVTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IGV4cG9ydHMuTm9kZUNhbnZhc0ZhY3RvcnkgPSBleHBvcnRzLk5vZGVDTWFwUmVhZGVyRmFjdG9yeSA9IHZvaWQgMDtcblxudmFyIF9iYXNlX2ZhY3RvcnkgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX2lzX25vZGUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDQpO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5sZXQgTm9kZUNhbnZhc0ZhY3RvcnkgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJOb3QgaW1wbGVtZW50ZWQ6IE5vZGVDYW52YXNGYWN0b3J5XCIpO1xuICB9XG5cbn07XG5leHBvcnRzLk5vZGVDYW52YXNGYWN0b3J5ID0gTm9kZUNhbnZhc0ZhY3Rvcnk7XG5sZXQgTm9kZUNNYXBSZWFkZXJGYWN0b3J5ID0gY2xhc3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiTm90IGltcGxlbWVudGVkOiBOb2RlQ01hcFJlYWRlckZhY3RvcnlcIik7XG4gIH1cblxufTtcbmV4cG9ydHMuTm9kZUNNYXBSZWFkZXJGYWN0b3J5ID0gTm9kZUNNYXBSZWFkZXJGYWN0b3J5O1xubGV0IE5vZGVTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IGNsYXNzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIk5vdCBpbXBsZW1lbnRlZDogTm9kZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5XCIpO1xuICB9XG5cbn07XG5leHBvcnRzLk5vZGVTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IE5vZGVTdGFuZGFyZEZvbnREYXRhRmFjdG9yeTtcblxuaWYgKF9pc19ub2RlLmlzTm9kZUpTKSB7XG4gIGNvbnN0IGZldGNoRGF0YSA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XG5cbiAgICAgIGZzLnJlYWRGaWxlKHVybCwgKGVycm9yLCBkYXRhKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciB8fCAhZGF0YSkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3IpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlKG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIGV4cG9ydHMuTm9kZUNhbnZhc0ZhY3RvcnkgPSBOb2RlQ2FudmFzRmFjdG9yeSA9IGNsYXNzIGV4dGVuZHMgX2Jhc2VfZmFjdG9yeS5CYXNlQ2FudmFzRmFjdG9yeSB7XG4gICAgX2NyZWF0ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICBjb25zdCBDYW52YXMgPSByZXF1aXJlKFwiY2FudmFzXCIpO1xuXG4gICAgICByZXR1cm4gQ2FudmFzLmNyZWF0ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG5cbiAgfTtcbiAgZXhwb3J0cy5Ob2RlQ01hcFJlYWRlckZhY3RvcnkgPSBOb2RlQ01hcFJlYWRlckZhY3RvcnkgPSBjbGFzcyBleHRlbmRzIF9iYXNlX2ZhY3RvcnkuQmFzZUNNYXBSZWFkZXJGYWN0b3J5IHtcbiAgICBfZmV0Y2hEYXRhKHVybCwgY29tcHJlc3Npb25UeXBlKSB7XG4gICAgICByZXR1cm4gZmV0Y2hEYXRhKHVybCkudGhlbihkYXRhID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjTWFwRGF0YTogZGF0YSxcbiAgICAgICAgICBjb21wcmVzc2lvblR5cGVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cblxuICB9O1xuICBleHBvcnRzLk5vZGVTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IE5vZGVTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IGNsYXNzIGV4dGVuZHMgX2Jhc2VfZmFjdG9yeS5CYXNlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnkge1xuICAgIF9mZXRjaERhdGEodXJsKSB7XG4gICAgICByZXR1cm4gZmV0Y2hEYXRhKHVybCk7XG4gICAgfVxuXG4gIH07XG59XG5cbi8qKiovIH0pLFxuLyogOSAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5Bbm5vdGF0aW9uU3RvcmFnZSA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuY2xhc3MgQW5ub3RhdGlvblN0b3JhZ2Uge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9zdG9yYWdlID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX3RpbWVTdGFtcCA9IERhdGUubm93KCk7XG4gICAgdGhpcy5fbW9kaWZpZWQgPSBmYWxzZTtcbiAgICB0aGlzLm9uU2V0TW9kaWZpZWQgPSBudWxsO1xuICAgIHRoaXMub25SZXNldE1vZGlmaWVkID0gbnVsbDtcbiAgfVxuXG4gIGdldFZhbHVlKGtleSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9zdG9yYWdlLmdldChrZXkpO1xuXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZGVmYXVsdFZhbHVlLCB2YWx1ZSk7XG4gIH1cblxuICBzZXRWYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgY29uc3Qgb2JqID0gdGhpcy5fc3RvcmFnZS5nZXQoa2V5KTtcblxuICAgIGxldCBtb2RpZmllZCA9IGZhbHNlO1xuXG4gICAgaWYgKG9iaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IFtlbnRyeSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKG9ialtlbnRyeV0gIT09IHZhbCkge1xuICAgICAgICAgIG1vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICBvYmpbZW50cnldID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1vZGlmaWVkID0gdHJ1ZTtcblxuICAgICAgdGhpcy5fc3RvcmFnZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKG1vZGlmaWVkKSB7XG4gICAgICB0aGlzLl90aW1lU3RhbXAgPSBEYXRlLm5vdygpO1xuXG4gICAgICB0aGlzLl9zZXRNb2RpZmllZCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldEFsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcmFnZS5zaXplID4gMCA/ICgwLCBfdXRpbC5vYmplY3RGcm9tTWFwKSh0aGlzLl9zdG9yYWdlKSA6IG51bGw7XG4gIH1cblxuICBnZXQgc2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcmFnZS5zaXplO1xuICB9XG5cbiAgX3NldE1vZGlmaWVkKCkge1xuICAgIGlmICghdGhpcy5fbW9kaWZpZWQpIHtcbiAgICAgIHRoaXMuX21vZGlmaWVkID0gdHJ1ZTtcblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9uU2V0TW9kaWZpZWQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLm9uU2V0TW9kaWZpZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXNldE1vZGlmaWVkKCkge1xuICAgIGlmICh0aGlzLl9tb2RpZmllZCkge1xuICAgICAgdGhpcy5fbW9kaWZpZWQgPSBmYWxzZTtcblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9uUmVzZXRNb2RpZmllZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMub25SZXNldE1vZGlmaWVkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNlcmlhbGl6YWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcmFnZS5zaXplID4gMCA/IHRoaXMuX3N0b3JhZ2UgOiBudWxsO1xuICB9XG5cbiAgZ2V0IGxhc3RNb2RpZmllZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGltZVN0YW1wLnRvU3RyaW5nKCk7XG4gIH1cblxufVxuXG5leHBvcnRzLkFubm90YXRpb25TdG9yYWdlID0gQW5ub3RhdGlvblN0b3JhZ2U7XG5cbi8qKiovIH0pLFxuLyogMTAgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuQ2FudmFzR3JhcGhpY3MgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfcGF0dGVybl9oZWxwZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDExKTtcblxudmFyIF9kaXNwbGF5X3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXygxKTtcblxuY29uc3QgTUlOX0ZPTlRfU0laRSA9IDE2O1xuY29uc3QgTUFYX0ZPTlRfU0laRSA9IDEwMDtcbmNvbnN0IE1BWF9HUk9VUF9TSVpFID0gNDA5NjtcbmNvbnN0IEVYRUNVVElPTl9USU1FID0gMTU7XG5jb25zdCBFWEVDVVRJT05fU1RFUFMgPSAxMDtcbmNvbnN0IENPTVBJTEVfVFlQRTNfR0xZUEhTID0gdHJ1ZTtcbmNvbnN0IE1BWF9TSVpFX1RPX0NPTVBJTEUgPSAxMDAwO1xuY29uc3QgRlVMTF9DSFVOS19IRUlHSFQgPSAxNjtcbmNvbnN0IExJTkVXSURUSF9TQ0FMRV9GQUNUT1IgPSAxLjAwMDAwMTtcblxuZnVuY3Rpb24gbWlycm9yQ29udGV4dE9wZXJhdGlvbnMoY3R4LCBkZXN0Q3R4KSB7XG4gIGlmIChjdHguX3JlbW92ZU1pcnJvcmluZykge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvbnRleHQgaXMgYWxyZWFkeSBmb3J3YXJkaW5nIG9wZXJhdGlvbnMuXCIpO1xuICB9XG5cbiAgY3R4Ll9fb3JpZ2luYWxTYXZlID0gY3R4LnNhdmU7XG4gIGN0eC5fX29yaWdpbmFsUmVzdG9yZSA9IGN0eC5yZXN0b3JlO1xuICBjdHguX19vcmlnaW5hbFJvdGF0ZSA9IGN0eC5yb3RhdGU7XG4gIGN0eC5fX29yaWdpbmFsU2NhbGUgPSBjdHguc2NhbGU7XG4gIGN0eC5fX29yaWdpbmFsVHJhbnNsYXRlID0gY3R4LnRyYW5zbGF0ZTtcbiAgY3R4Ll9fb3JpZ2luYWxUcmFuc2Zvcm0gPSBjdHgudHJhbnNmb3JtO1xuICBjdHguX19vcmlnaW5hbFNldFRyYW5zZm9ybSA9IGN0eC5zZXRUcmFuc2Zvcm07XG4gIGN0eC5fX29yaWdpbmFsUmVzZXRUcmFuc2Zvcm0gPSBjdHgucmVzZXRUcmFuc2Zvcm07XG4gIGN0eC5fX29yaWdpbmFsQ2xpcCA9IGN0eC5jbGlwO1xuICBjdHguX19vcmlnaW5hbE1vdmVUbyA9IGN0eC5tb3ZlVG87XG4gIGN0eC5fX29yaWdpbmFsTGluZVRvID0gY3R4LmxpbmVUbztcbiAgY3R4Ll9fb3JpZ2luYWxCZXppZXJDdXJ2ZVRvID0gY3R4LmJlemllckN1cnZlVG87XG4gIGN0eC5fX29yaWdpbmFsUmVjdCA9IGN0eC5yZWN0O1xuICBjdHguX19vcmlnaW5hbENsb3NlUGF0aCA9IGN0eC5jbG9zZVBhdGg7XG4gIGN0eC5fX29yaWdpbmFsQmVnaW5QYXRoID0gY3R4LmJlZ2luUGF0aDtcblxuICBjdHguX3JlbW92ZU1pcnJvcmluZyA9ICgpID0+IHtcbiAgICBjdHguc2F2ZSA9IGN0eC5fX29yaWdpbmFsU2F2ZTtcbiAgICBjdHgucmVzdG9yZSA9IGN0eC5fX29yaWdpbmFsUmVzdG9yZTtcbiAgICBjdHgucm90YXRlID0gY3R4Ll9fb3JpZ2luYWxSb3RhdGU7XG4gICAgY3R4LnNjYWxlID0gY3R4Ll9fb3JpZ2luYWxTY2FsZTtcbiAgICBjdHgudHJhbnNsYXRlID0gY3R4Ll9fb3JpZ2luYWxUcmFuc2xhdGU7XG4gICAgY3R4LnRyYW5zZm9ybSA9IGN0eC5fX29yaWdpbmFsVHJhbnNmb3JtO1xuICAgIGN0eC5zZXRUcmFuc2Zvcm0gPSBjdHguX19vcmlnaW5hbFNldFRyYW5zZm9ybTtcbiAgICBjdHgucmVzZXRUcmFuc2Zvcm0gPSBjdHguX19vcmlnaW5hbFJlc2V0VHJhbnNmb3JtO1xuICAgIGN0eC5jbGlwID0gY3R4Ll9fb3JpZ2luYWxDbGlwO1xuICAgIGN0eC5tb3ZlVG8gPSBjdHguX19vcmlnaW5hbE1vdmVUbztcbiAgICBjdHgubGluZVRvID0gY3R4Ll9fb3JpZ2luYWxMaW5lVG87XG4gICAgY3R4LmJlemllckN1cnZlVG8gPSBjdHguX19vcmlnaW5hbEJlemllckN1cnZlVG87XG4gICAgY3R4LnJlY3QgPSBjdHguX19vcmlnaW5hbFJlY3Q7XG4gICAgY3R4LmNsb3NlUGF0aCA9IGN0eC5fX29yaWdpbmFsQ2xvc2VQYXRoO1xuICAgIGN0eC5iZWdpblBhdGggPSBjdHguX19vcmlnaW5hbEJlZ2luUGF0aDtcbiAgICBkZWxldGUgY3R4Ll9yZW1vdmVNaXJyb3Jpbmc7XG4gIH07XG5cbiAgY3R4LnNhdmUgPSBmdW5jdGlvbiBjdHhTYXZlKCkge1xuICAgIGRlc3RDdHguc2F2ZSgpO1xuXG4gICAgdGhpcy5fX29yaWdpbmFsU2F2ZSgpO1xuICB9O1xuXG4gIGN0eC5yZXN0b3JlID0gZnVuY3Rpb24gY3R4UmVzdG9yZSgpIHtcbiAgICBkZXN0Q3R4LnJlc3RvcmUoKTtcblxuICAgIHRoaXMuX19vcmlnaW5hbFJlc3RvcmUoKTtcbiAgfTtcblxuICBjdHgudHJhbnNsYXRlID0gZnVuY3Rpb24gY3R4VHJhbnNsYXRlKHgsIHkpIHtcbiAgICBkZXN0Q3R4LnRyYW5zbGF0ZSh4LCB5KTtcblxuICAgIHRoaXMuX19vcmlnaW5hbFRyYW5zbGF0ZSh4LCB5KTtcbiAgfTtcblxuICBjdHguc2NhbGUgPSBmdW5jdGlvbiBjdHhTY2FsZSh4LCB5KSB7XG4gICAgZGVzdEN0eC5zY2FsZSh4LCB5KTtcblxuICAgIHRoaXMuX19vcmlnaW5hbFNjYWxlKHgsIHkpO1xuICB9O1xuXG4gIGN0eC50cmFuc2Zvcm0gPSBmdW5jdGlvbiBjdHhUcmFuc2Zvcm0oYSwgYiwgYywgZCwgZSwgZikge1xuICAgIGRlc3RDdHgudHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpO1xuXG4gICAgdGhpcy5fX29yaWdpbmFsVHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpO1xuICB9O1xuXG4gIGN0eC5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbiBjdHhTZXRUcmFuc2Zvcm0oYSwgYiwgYywgZCwgZSwgZikge1xuICAgIGRlc3RDdHguc2V0VHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpO1xuXG4gICAgdGhpcy5fX29yaWdpbmFsU2V0VHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpO1xuICB9O1xuXG4gIGN0eC5yZXNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uIGN0eFJlc2V0VHJhbnNmb3JtKCkge1xuICAgIGRlc3RDdHgucmVzZXRUcmFuc2Zvcm0oKTtcblxuICAgIHRoaXMuX19vcmlnaW5hbFJlc2V0VHJhbnNmb3JtKCk7XG4gIH07XG5cbiAgY3R4LnJvdGF0ZSA9IGZ1bmN0aW9uIGN0eFJvdGF0ZShhbmdsZSkge1xuICAgIGRlc3RDdHgucm90YXRlKGFuZ2xlKTtcblxuICAgIHRoaXMuX19vcmlnaW5hbFJvdGF0ZShhbmdsZSk7XG4gIH07XG5cbiAgY3R4LmNsaXAgPSBmdW5jdGlvbiBjdHhSb3RhdGUocnVsZSkge1xuICAgIGRlc3RDdHguY2xpcChydWxlKTtcblxuICAgIHRoaXMuX19vcmlnaW5hbENsaXAocnVsZSk7XG4gIH07XG5cbiAgY3R4Lm1vdmVUbyA9IGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgZGVzdEN0eC5tb3ZlVG8oeCwgeSk7XG5cbiAgICB0aGlzLl9fb3JpZ2luYWxNb3ZlVG8oeCwgeSk7XG4gIH07XG5cbiAgY3R4LmxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgZGVzdEN0eC5saW5lVG8oeCwgeSk7XG5cbiAgICB0aGlzLl9fb3JpZ2luYWxMaW5lVG8oeCwgeSk7XG4gIH07XG5cbiAgY3R4LmJlemllckN1cnZlVG8gPSBmdW5jdGlvbiAoY3AxeCwgY3AxeSwgY3AyeCwgY3AyeSwgeCwgeSkge1xuICAgIGRlc3RDdHguYmV6aWVyQ3VydmVUbyhjcDF4LCBjcDF5LCBjcDJ4LCBjcDJ5LCB4LCB5KTtcblxuICAgIHRoaXMuX19vcmlnaW5hbEJlemllckN1cnZlVG8oY3AxeCwgY3AxeSwgY3AyeCwgY3AyeSwgeCwgeSk7XG4gIH07XG5cbiAgY3R4LnJlY3QgPSBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCkge1xuICAgIGRlc3RDdHgucmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuX19vcmlnaW5hbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7XG4gIH07XG5cbiAgY3R4LmNsb3NlUGF0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICBkZXN0Q3R4LmNsb3NlUGF0aCgpO1xuXG4gICAgdGhpcy5fX29yaWdpbmFsQ2xvc2VQYXRoKCk7XG4gIH07XG5cbiAgY3R4LmJlZ2luUGF0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICBkZXN0Q3R4LmJlZ2luUGF0aCgpO1xuXG4gICAgdGhpcy5fX29yaWdpbmFsQmVnaW5QYXRoKCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGFkZENvbnRleHRDdXJyZW50VHJhbnNmb3JtKGN0eCkge1xuICBpZiAoY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjdHguX29yaWdpbmFsU2F2ZSA9IGN0eC5zYXZlO1xuICBjdHguX29yaWdpbmFsUmVzdG9yZSA9IGN0eC5yZXN0b3JlO1xuICBjdHguX29yaWdpbmFsUm90YXRlID0gY3R4LnJvdGF0ZTtcbiAgY3R4Ll9vcmlnaW5hbFNjYWxlID0gY3R4LnNjYWxlO1xuICBjdHguX29yaWdpbmFsVHJhbnNsYXRlID0gY3R4LnRyYW5zbGF0ZTtcbiAgY3R4Ll9vcmlnaW5hbFRyYW5zZm9ybSA9IGN0eC50cmFuc2Zvcm07XG4gIGN0eC5fb3JpZ2luYWxTZXRUcmFuc2Zvcm0gPSBjdHguc2V0VHJhbnNmb3JtO1xuICBjdHguX29yaWdpbmFsUmVzZXRUcmFuc2Zvcm0gPSBjdHgucmVzZXRUcmFuc2Zvcm07XG4gIGN0eC5fdHJhbnNmb3JtTWF0cml4ID0gY3R4Ll90cmFuc2Zvcm1NYXRyaXggfHwgWzEsIDAsIDAsIDEsIDAsIDBdO1xuICBjdHguX3RyYW5zZm9ybVN0YWNrID0gW107XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QuZ2V0UHJvdG90eXBlT2YoY3R4KSwgXCJsaW5lV2lkdGhcIik7XG4gICAgY3R4Ll9zZXRMaW5lV2lkdGggPSBkZXNjLnNldDtcbiAgICBjdHguX2dldExpbmVXaWR0aCA9IGRlc2MuZ2V0O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsIFwibGluZVdpZHRoXCIsIHtcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0TGluZVdpZHRoKHdpZHRoKSB7XG4gICAgICAgIHRoaXMuX3NldExpbmVXaWR0aCh3aWR0aCAqIExJTkVXSURUSF9TQ0FMRV9GQUNUT1IpO1xuICAgICAgfSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0TGluZVdpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TGluZVdpZHRoKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gY2F0Y2ggKF8pIHt9XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0eCwgXCJtb3pDdXJyZW50VHJhbnNmb3JtXCIsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldEN1cnJlbnRUcmFuc2Zvcm0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhbnNmb3JtTWF0cml4O1xuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsIFwibW96Q3VycmVudFRyYW5zZm9ybUludmVyc2VcIiwge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0Q3VycmVudFRyYW5zZm9ybUludmVyc2UoKSB7XG4gICAgICBjb25zdCBbYSwgYiwgYywgZCwgZSwgZl0gPSB0aGlzLl90cmFuc2Zvcm1NYXRyaXg7XG4gICAgICBjb25zdCBhZF9iYyA9IGEgKiBkIC0gYiAqIGM7XG4gICAgICBjb25zdCBiY19hZCA9IGIgKiBjIC0gYSAqIGQ7XG4gICAgICByZXR1cm4gW2QgLyBhZF9iYywgYiAvIGJjX2FkLCBjIC8gYmNfYWQsIGEgLyBhZF9iYywgKGQgKiBlIC0gYyAqIGYpIC8gYmNfYWQsIChiICogZSAtIGEgKiBmKSAvIGFkX2JjXTtcbiAgICB9XG4gIH0pO1xuXG4gIGN0eC5zYXZlID0gZnVuY3Rpb24gY3R4U2F2ZSgpIHtcbiAgICBjb25zdCBvbGQgPSB0aGlzLl90cmFuc2Zvcm1NYXRyaXg7XG5cbiAgICB0aGlzLl90cmFuc2Zvcm1TdGFjay5wdXNoKG9sZCk7XG5cbiAgICB0aGlzLl90cmFuc2Zvcm1NYXRyaXggPSBvbGQuc2xpY2UoMCwgNik7XG5cbiAgICB0aGlzLl9vcmlnaW5hbFNhdmUoKTtcbiAgfTtcblxuICBjdHgucmVzdG9yZSA9IGZ1bmN0aW9uIGN0eFJlc3RvcmUoKSB7XG4gICAgY29uc3QgcHJldiA9IHRoaXMuX3RyYW5zZm9ybVN0YWNrLnBvcCgpO1xuXG4gICAgaWYgKHByZXYpIHtcbiAgICAgIHRoaXMuX3RyYW5zZm9ybU1hdHJpeCA9IHByZXY7XG5cbiAgICAgIHRoaXMuX29yaWdpbmFsUmVzdG9yZSgpO1xuICAgIH1cbiAgfTtcblxuICBjdHgudHJhbnNsYXRlID0gZnVuY3Rpb24gY3R4VHJhbnNsYXRlKHgsIHkpIHtcbiAgICBjb25zdCBtID0gdGhpcy5fdHJhbnNmb3JtTWF0cml4O1xuICAgIG1bNF0gPSBtWzBdICogeCArIG1bMl0gKiB5ICsgbVs0XTtcbiAgICBtWzVdID0gbVsxXSAqIHggKyBtWzNdICogeSArIG1bNV07XG5cbiAgICB0aGlzLl9vcmlnaW5hbFRyYW5zbGF0ZSh4LCB5KTtcbiAgfTtcblxuICBjdHguc2NhbGUgPSBmdW5jdGlvbiBjdHhTY2FsZSh4LCB5KSB7XG4gICAgY29uc3QgbSA9IHRoaXMuX3RyYW5zZm9ybU1hdHJpeDtcbiAgICBtWzBdICo9IHg7XG4gICAgbVsxXSAqPSB4O1xuICAgIG1bMl0gKj0geTtcbiAgICBtWzNdICo9IHk7XG5cbiAgICB0aGlzLl9vcmlnaW5hbFNjYWxlKHgsIHkpO1xuICB9O1xuXG4gIGN0eC50cmFuc2Zvcm0gPSBmdW5jdGlvbiBjdHhUcmFuc2Zvcm0oYSwgYiwgYywgZCwgZSwgZikge1xuICAgIGNvbnN0IG0gPSB0aGlzLl90cmFuc2Zvcm1NYXRyaXg7XG4gICAgdGhpcy5fdHJhbnNmb3JtTWF0cml4ID0gW21bMF0gKiBhICsgbVsyXSAqIGIsIG1bMV0gKiBhICsgbVszXSAqIGIsIG1bMF0gKiBjICsgbVsyXSAqIGQsIG1bMV0gKiBjICsgbVszXSAqIGQsIG1bMF0gKiBlICsgbVsyXSAqIGYgKyBtWzRdLCBtWzFdICogZSArIG1bM10gKiBmICsgbVs1XV07XG5cbiAgICBjdHguX29yaWdpbmFsVHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpO1xuICB9O1xuXG4gIGN0eC5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbiBjdHhTZXRUcmFuc2Zvcm0oYSwgYiwgYywgZCwgZSwgZikge1xuICAgIHRoaXMuX3RyYW5zZm9ybU1hdHJpeCA9IFthLCBiLCBjLCBkLCBlLCBmXTtcblxuICAgIGN0eC5fb3JpZ2luYWxTZXRUcmFuc2Zvcm0oYSwgYiwgYywgZCwgZSwgZik7XG4gIH07XG5cbiAgY3R4LnJlc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gY3R4UmVzZXRUcmFuc2Zvcm0oKSB7XG4gICAgdGhpcy5fdHJhbnNmb3JtTWF0cml4ID0gWzEsIDAsIDAsIDEsIDAsIDBdO1xuXG4gICAgY3R4Ll9vcmlnaW5hbFJlc2V0VHJhbnNmb3JtKCk7XG4gIH07XG5cbiAgY3R4LnJvdGF0ZSA9IGZ1bmN0aW9uIGN0eFJvdGF0ZShhbmdsZSkge1xuICAgIGNvbnN0IGNvc1ZhbHVlID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgIGNvbnN0IHNpblZhbHVlID0gTWF0aC5zaW4oYW5nbGUpO1xuICAgIGNvbnN0IG0gPSB0aGlzLl90cmFuc2Zvcm1NYXRyaXg7XG4gICAgdGhpcy5fdHJhbnNmb3JtTWF0cml4ID0gW21bMF0gKiBjb3NWYWx1ZSArIG1bMl0gKiBzaW5WYWx1ZSwgbVsxXSAqIGNvc1ZhbHVlICsgbVszXSAqIHNpblZhbHVlLCBtWzBdICogLXNpblZhbHVlICsgbVsyXSAqIGNvc1ZhbHVlLCBtWzFdICogLXNpblZhbHVlICsgbVszXSAqIGNvc1ZhbHVlLCBtWzRdLCBtWzVdXTtcblxuICAgIHRoaXMuX29yaWdpbmFsUm90YXRlKGFuZ2xlKTtcbiAgfTtcbn1cblxuY2xhc3MgQ2FjaGVkQ2FudmFzZXMge1xuICBjb25zdHJ1Y3RvcihjYW52YXNGYWN0b3J5KSB7XG4gICAgdGhpcy5jYW52YXNGYWN0b3J5ID0gY2FudmFzRmFjdG9yeTtcbiAgICB0aGlzLmNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgfVxuXG4gIGdldENhbnZhcyhpZCwgd2lkdGgsIGhlaWdodCwgdHJhY2tUcmFuc2Zvcm0pIHtcbiAgICBsZXQgY2FudmFzRW50cnk7XG5cbiAgICBpZiAodGhpcy5jYWNoZVtpZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2FudmFzRW50cnkgPSB0aGlzLmNhY2hlW2lkXTtcbiAgICAgIHRoaXMuY2FudmFzRmFjdG9yeS5yZXNldChjYW52YXNFbnRyeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICBjYW52YXNFbnRyeS5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FudmFzRW50cnkgPSB0aGlzLmNhbnZhc0ZhY3RvcnkuY3JlYXRlKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgdGhpcy5jYWNoZVtpZF0gPSBjYW52YXNFbnRyeTtcbiAgICB9XG5cbiAgICBpZiAodHJhY2tUcmFuc2Zvcm0pIHtcbiAgICAgIGFkZENvbnRleHRDdXJyZW50VHJhbnNmb3JtKGNhbnZhc0VudHJ5LmNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBjYW52YXNFbnRyeTtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5jYWNoZSkge1xuICAgICAgY29uc3QgY2FudmFzRW50cnkgPSB0aGlzLmNhY2hlW2lkXTtcbiAgICAgIHRoaXMuY2FudmFzRmFjdG9yeS5kZXN0cm95KGNhbnZhc0VudHJ5KTtcbiAgICAgIGRlbGV0ZSB0aGlzLmNhY2hlW2lkXTtcbiAgICB9XG4gIH1cblxufVxuXG5mdW5jdGlvbiBjb21waWxlVHlwZTNHbHlwaChpbWdEYXRhKSB7XG4gIGNvbnN0IFBPSU5UX1RPX1BST0NFU1NfTElNSVQgPSAxMDAwO1xuICBjb25zdCBQT0lOVF9UWVBFUyA9IG5ldyBVaW50OEFycmF5KFswLCAyLCA0LCAwLCAxLCAwLCA1LCA0LCA4LCAxMCwgMCwgOCwgMCwgMiwgMSwgMF0pO1xuICBjb25zdCB3aWR0aCA9IGltZ0RhdGEud2lkdGgsXG4gICAgICAgIGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0LFxuICAgICAgICB3aWR0aDEgPSB3aWR0aCArIDE7XG4gIGxldCBpLCBpaSwgaiwgajA7XG4gIGNvbnN0IHBvaW50cyA9IG5ldyBVaW50OEFycmF5KHdpZHRoMSAqIChoZWlnaHQgKyAxKSk7XG4gIGNvbnN0IGxpbmVTaXplID0gd2lkdGggKyA3ICYgfjcsXG4gICAgICAgIGRhdGEwID0gaW1nRGF0YS5kYXRhO1xuICBjb25zdCBkYXRhID0gbmV3IFVpbnQ4QXJyYXkobGluZVNpemUgKiBoZWlnaHQpO1xuICBsZXQgcG9zID0gMDtcblxuICBmb3IgKGkgPSAwLCBpaSA9IGRhdGEwLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICBjb25zdCBlbGVtID0gZGF0YTBbaV07XG4gICAgbGV0IG1hc2sgPSAxMjg7XG5cbiAgICB3aGlsZSAobWFzayA+IDApIHtcbiAgICAgIGRhdGFbcG9zKytdID0gZWxlbSAmIG1hc2sgPyAwIDogMjU1O1xuICAgICAgbWFzayA+Pj0gMTtcbiAgICB9XG4gIH1cblxuICBsZXQgY291bnQgPSAwO1xuICBwb3MgPSAwO1xuXG4gIGlmIChkYXRhW3Bvc10gIT09IDApIHtcbiAgICBwb2ludHNbMF0gPSAxO1xuICAgICsrY291bnQ7XG4gIH1cblxuICBmb3IgKGogPSAxOyBqIDwgd2lkdGg7IGorKykge1xuICAgIGlmIChkYXRhW3Bvc10gIT09IGRhdGFbcG9zICsgMV0pIHtcbiAgICAgIHBvaW50c1tqXSA9IGRhdGFbcG9zXSA/IDIgOiAxO1xuICAgICAgKytjb3VudDtcbiAgICB9XG5cbiAgICBwb3MrKztcbiAgfVxuXG4gIGlmIChkYXRhW3Bvc10gIT09IDApIHtcbiAgICBwb2ludHNbal0gPSAyO1xuICAgICsrY291bnQ7XG4gIH1cblxuICBmb3IgKGkgPSAxOyBpIDwgaGVpZ2h0OyBpKyspIHtcbiAgICBwb3MgPSBpICogbGluZVNpemU7XG4gICAgajAgPSBpICogd2lkdGgxO1xuXG4gICAgaWYgKGRhdGFbcG9zIC0gbGluZVNpemVdICE9PSBkYXRhW3Bvc10pIHtcbiAgICAgIHBvaW50c1tqMF0gPSBkYXRhW3Bvc10gPyAxIDogODtcbiAgICAgICsrY291bnQ7XG4gICAgfVxuXG4gICAgbGV0IHN1bSA9IChkYXRhW3Bvc10gPyA0IDogMCkgKyAoZGF0YVtwb3MgLSBsaW5lU2l6ZV0gPyA4IDogMCk7XG5cbiAgICBmb3IgKGogPSAxOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgc3VtID0gKHN1bSA+PiAyKSArIChkYXRhW3BvcyArIDFdID8gNCA6IDApICsgKGRhdGFbcG9zIC0gbGluZVNpemUgKyAxXSA/IDggOiAwKTtcblxuICAgICAgaWYgKFBPSU5UX1RZUEVTW3N1bV0pIHtcbiAgICAgICAgcG9pbnRzW2owICsgal0gPSBQT0lOVF9UWVBFU1tzdW1dO1xuICAgICAgICArK2NvdW50O1xuICAgICAgfVxuXG4gICAgICBwb3MrKztcbiAgICB9XG5cbiAgICBpZiAoZGF0YVtwb3MgLSBsaW5lU2l6ZV0gIT09IGRhdGFbcG9zXSkge1xuICAgICAgcG9pbnRzW2owICsgal0gPSBkYXRhW3Bvc10gPyAyIDogNDtcbiAgICAgICsrY291bnQ7XG4gICAgfVxuXG4gICAgaWYgKGNvdW50ID4gUE9JTlRfVE9fUFJPQ0VTU19MSU1JVCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcG9zID0gbGluZVNpemUgKiAoaGVpZ2h0IC0gMSk7XG4gIGowID0gaSAqIHdpZHRoMTtcblxuICBpZiAoZGF0YVtwb3NdICE9PSAwKSB7XG4gICAgcG9pbnRzW2owXSA9IDg7XG4gICAgKytjb3VudDtcbiAgfVxuXG4gIGZvciAoaiA9IDE7IGogPCB3aWR0aDsgaisrKSB7XG4gICAgaWYgKGRhdGFbcG9zXSAhPT0gZGF0YVtwb3MgKyAxXSkge1xuICAgICAgcG9pbnRzW2owICsgal0gPSBkYXRhW3Bvc10gPyA0IDogODtcbiAgICAgICsrY291bnQ7XG4gICAgfVxuXG4gICAgcG9zKys7XG4gIH1cblxuICBpZiAoZGF0YVtwb3NdICE9PSAwKSB7XG4gICAgcG9pbnRzW2owICsgal0gPSA0O1xuICAgICsrY291bnQ7XG4gIH1cblxuICBpZiAoY291bnQgPiBQT0lOVF9UT19QUk9DRVNTX0xJTUlUKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBzdGVwcyA9IG5ldyBJbnQzMkFycmF5KFswLCB3aWR0aDEsIC0xLCAwLCAtd2lkdGgxLCAwLCAwLCAwLCAxXSk7XG4gIGNvbnN0IG91dGxpbmVzID0gW107XG5cbiAgZm9yIChpID0gMDsgY291bnQgJiYgaSA8PSBoZWlnaHQ7IGkrKykge1xuICAgIGxldCBwID0gaSAqIHdpZHRoMTtcbiAgICBjb25zdCBlbmQgPSBwICsgd2lkdGg7XG5cbiAgICB3aGlsZSAocCA8IGVuZCAmJiAhcG9pbnRzW3BdKSB7XG4gICAgICBwKys7XG4gICAgfVxuXG4gICAgaWYgKHAgPT09IGVuZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgY29vcmRzID0gW3AgJSB3aWR0aDEsIGldO1xuICAgIGNvbnN0IHAwID0gcDtcbiAgICBsZXQgdHlwZSA9IHBvaW50c1twXTtcblxuICAgIGRvIHtcbiAgICAgIGNvbnN0IHN0ZXAgPSBzdGVwc1t0eXBlXTtcblxuICAgICAgZG8ge1xuICAgICAgICBwICs9IHN0ZXA7XG4gICAgICB9IHdoaWxlICghcG9pbnRzW3BdKTtcblxuICAgICAgY29uc3QgcHAgPSBwb2ludHNbcF07XG5cbiAgICAgIGlmIChwcCAhPT0gNSAmJiBwcCAhPT0gMTApIHtcbiAgICAgICAgdHlwZSA9IHBwO1xuICAgICAgICBwb2ludHNbcF0gPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHlwZSA9IHBwICYgMHgzMyAqIHR5cGUgPj4gNDtcbiAgICAgICAgcG9pbnRzW3BdICY9IHR5cGUgPj4gMiB8IHR5cGUgPDwgMjtcbiAgICAgIH1cblxuICAgICAgY29vcmRzLnB1c2gocCAlIHdpZHRoMSwgcCAvIHdpZHRoMSB8IDApO1xuXG4gICAgICBpZiAoIXBvaW50c1twXSkge1xuICAgICAgICAtLWNvdW50O1xuICAgICAgfVxuICAgIH0gd2hpbGUgKHAwICE9PSBwKTtcblxuICAgIG91dGxpbmVzLnB1c2goY29vcmRzKTtcbiAgICAtLWk7XG4gIH1cblxuICBjb25zdCBkcmF3T3V0bGluZSA9IGZ1bmN0aW9uIChjKSB7XG4gICAgYy5zYXZlKCk7XG4gICAgYy5zY2FsZSgxIC8gd2lkdGgsIC0xIC8gaGVpZ2h0KTtcbiAgICBjLnRyYW5zbGF0ZSgwLCAtaGVpZ2h0KTtcbiAgICBjLmJlZ2luUGF0aCgpO1xuXG4gICAgZm9yIChsZXQgayA9IDAsIGtrID0gb3V0bGluZXMubGVuZ3RoOyBrIDwga2s7IGsrKykge1xuICAgICAgY29uc3QgbyA9IG91dGxpbmVzW2tdO1xuICAgICAgYy5tb3ZlVG8ob1swXSwgb1sxXSk7XG5cbiAgICAgIGZvciAobGV0IGwgPSAyLCBsbCA9IG8ubGVuZ3RoOyBsIDwgbGw7IGwgKz0gMikge1xuICAgICAgICBjLmxpbmVUbyhvW2xdLCBvW2wgKyAxXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYy5maWxsKCk7XG4gICAgYy5iZWdpblBhdGgoKTtcbiAgICBjLnJlc3RvcmUoKTtcbiAgfTtcblxuICByZXR1cm4gZHJhd091dGxpbmU7XG59XG5cbmNsYXNzIENhbnZhc0V4dHJhU3RhdGUge1xuICBjb25zdHJ1Y3Rvcih3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdGhpcy5hbHBoYUlzU2hhcGUgPSBmYWxzZTtcbiAgICB0aGlzLmZvbnRTaXplID0gMDtcbiAgICB0aGlzLmZvbnRTaXplU2NhbGUgPSAxO1xuICAgIHRoaXMudGV4dE1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWDtcbiAgICB0aGlzLnRleHRNYXRyaXhTY2FsZSA9IDE7XG4gICAgdGhpcy5mb250TWF0cml4ID0gX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG4gICAgdGhpcy5sZWFkaW5nID0gMDtcbiAgICB0aGlzLnggPSAwO1xuICAgIHRoaXMueSA9IDA7XG4gICAgdGhpcy5saW5lWCA9IDA7XG4gICAgdGhpcy5saW5lWSA9IDA7XG4gICAgdGhpcy5jaGFyU3BhY2luZyA9IDA7XG4gICAgdGhpcy53b3JkU3BhY2luZyA9IDA7XG4gICAgdGhpcy50ZXh0SFNjYWxlID0gMTtcbiAgICB0aGlzLnRleHRSZW5kZXJpbmdNb2RlID0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTDtcbiAgICB0aGlzLnRleHRSaXNlID0gMDtcbiAgICB0aGlzLmZpbGxDb2xvciA9IFwiIzAwMDAwMFwiO1xuICAgIHRoaXMuc3Ryb2tlQ29sb3IgPSBcIiMwMDAwMDBcIjtcbiAgICB0aGlzLnBhdHRlcm5GaWxsID0gZmFsc2U7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuICAgIHRoaXMuc3Ryb2tlQWxwaGEgPSAxO1xuICAgIHRoaXMubGluZVdpZHRoID0gMTtcbiAgICB0aGlzLmFjdGl2ZVNNYXNrID0gbnVsbDtcbiAgICB0aGlzLnRyYW5zZmVyTWFwcyA9IG51bGw7XG4gICAgdGhpcy5zdGFydE5ld1BhdGhBbmRDbGlwQm94KFswLCAwLCB3aWR0aCwgaGVpZ2h0XSk7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICBjb25zdCBjbG9uZSA9IE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgY2xvbmUuY2xpcEJveCA9IHRoaXMuY2xpcEJveC5zbGljZSgpO1xuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIHNldEN1cnJlbnRQb2ludCh4LCB5KSB7XG4gICAgdGhpcy54ID0geDtcbiAgICB0aGlzLnkgPSB5O1xuICB9XG5cbiAgdXBkYXRlUGF0aE1pbk1heCh0cmFuc2Zvcm0sIHgsIHkpIHtcbiAgICBbeCwgeV0gPSBfdXRpbC5VdGlsLmFwcGx5VHJhbnNmb3JtKFt4LCB5XSwgdHJhbnNmb3JtKTtcbiAgICB0aGlzLm1pblggPSBNYXRoLm1pbih0aGlzLm1pblgsIHgpO1xuICAgIHRoaXMubWluWSA9IE1hdGgubWluKHRoaXMubWluWSwgeSk7XG4gICAgdGhpcy5tYXhYID0gTWF0aC5tYXgodGhpcy5tYXhYLCB4KTtcbiAgICB0aGlzLm1heFkgPSBNYXRoLm1heCh0aGlzLm1heFksIHkpO1xuICB9XG5cbiAgdXBkYXRlQ3VydmVQYXRoTWluTWF4KHRyYW5zZm9ybSwgeDAsIHkwLCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzKSB7XG4gICAgY29uc3QgYm94ID0gX3V0aWwuVXRpbC5iZXppZXJCb3VuZGluZ0JveCh4MCwgeTAsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpO1xuXG4gICAgdGhpcy51cGRhdGVQYXRoTWluTWF4KHRyYW5zZm9ybSwgYm94WzBdLCBib3hbMV0pO1xuICAgIHRoaXMudXBkYXRlUGF0aE1pbk1heCh0cmFuc2Zvcm0sIGJveFsyXSwgYm94WzNdKTtcbiAgfVxuXG4gIGdldFBhdGhCb3VuZGluZ0JveChwYXRoVHlwZSA9IF9wYXR0ZXJuX2hlbHBlci5QYXRoVHlwZS5GSUxMLCB0cmFuc2Zvcm0gPSBudWxsKSB7XG4gICAgY29uc3QgYm94ID0gW3RoaXMubWluWCwgdGhpcy5taW5ZLCB0aGlzLm1heFgsIHRoaXMubWF4WV07XG5cbiAgICBpZiAocGF0aFR5cGUgPT09IF9wYXR0ZXJuX2hlbHBlci5QYXRoVHlwZS5TVFJPS0UpIHtcbiAgICAgIGlmICghdHJhbnNmb3JtKSB7XG4gICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJTdHJva2UgYm91bmRpbmcgYm94IG11c3QgaW5jbHVkZSB0cmFuc2Zvcm0uXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzY2FsZSA9IF91dGlsLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUodHJhbnNmb3JtKTtcblxuICAgICAgY29uc3QgeFN0cm9rZVBhZCA9IHNjYWxlWzBdICogdGhpcy5saW5lV2lkdGggLyAyO1xuICAgICAgY29uc3QgeVN0cm9rZVBhZCA9IHNjYWxlWzFdICogdGhpcy5saW5lV2lkdGggLyAyO1xuICAgICAgYm94WzBdIC09IHhTdHJva2VQYWQ7XG4gICAgICBib3hbMV0gLT0geVN0cm9rZVBhZDtcbiAgICAgIGJveFsyXSArPSB4U3Ryb2tlUGFkO1xuICAgICAgYm94WzNdICs9IHlTdHJva2VQYWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJveDtcbiAgfVxuXG4gIHVwZGF0ZUNsaXBGcm9tUGF0aCgpIHtcbiAgICBjb25zdCBpbnRlcnNlY3QgPSBfdXRpbC5VdGlsLmludGVyc2VjdCh0aGlzLmNsaXBCb3gsIHRoaXMuZ2V0UGF0aEJvdW5kaW5nQm94KCkpO1xuXG4gICAgdGhpcy5zdGFydE5ld1BhdGhBbmRDbGlwQm94KGludGVyc2VjdCB8fCBbMCwgMCwgMCwgMF0pO1xuICB9XG5cbiAgc3RhcnROZXdQYXRoQW5kQ2xpcEJveChib3gpIHtcbiAgICB0aGlzLmNsaXBCb3ggPSBib3g7XG4gICAgdGhpcy5taW5YID0gSW5maW5pdHk7XG4gICAgdGhpcy5taW5ZID0gSW5maW5pdHk7XG4gICAgdGhpcy5tYXhYID0gMDtcbiAgICB0aGlzLm1heFkgPSAwO1xuICB9XG5cbiAgZ2V0Q2xpcHBlZFBhdGhCb3VuZGluZ0JveChwYXRoVHlwZSA9IF9wYXR0ZXJuX2hlbHBlci5QYXRoVHlwZS5GSUxMLCB0cmFuc2Zvcm0gPSBudWxsKSB7XG4gICAgcmV0dXJuIF91dGlsLlV0aWwuaW50ZXJzZWN0KHRoaXMuY2xpcEJveCwgdGhpcy5nZXRQYXRoQm91bmRpbmdCb3gocGF0aFR5cGUsIHRyYW5zZm9ybSkpO1xuICB9XG5cbn1cblxuZnVuY3Rpb24gcHV0QmluYXJ5SW1hZ2VEYXRhKGN0eCwgaW1nRGF0YSwgdHJhbnNmZXJNYXBzID0gbnVsbCkge1xuICBpZiAodHlwZW9mIEltYWdlRGF0YSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpbWdEYXRhIGluc3RhbmNlb2YgSW1hZ2VEYXRhKSB7XG4gICAgY3R4LnB1dEltYWdlRGF0YShpbWdEYXRhLCAwLCAwKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBoZWlnaHQgPSBpbWdEYXRhLmhlaWdodCxcbiAgICAgICAgd2lkdGggPSBpbWdEYXRhLndpZHRoO1xuICBjb25zdCBwYXJ0aWFsQ2h1bmtIZWlnaHQgPSBoZWlnaHQgJSBGVUxMX0NIVU5LX0hFSUdIVDtcbiAgY29uc3QgZnVsbENodW5rcyA9IChoZWlnaHQgLSBwYXJ0aWFsQ2h1bmtIZWlnaHQpIC8gRlVMTF9DSFVOS19IRUlHSFQ7XG4gIGNvbnN0IHRvdGFsQ2h1bmtzID0gcGFydGlhbENodW5rSGVpZ2h0ID09PSAwID8gZnVsbENodW5rcyA6IGZ1bGxDaHVua3MgKyAxO1xuICBjb25zdCBjaHVua0ltZ0RhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKHdpZHRoLCBGVUxMX0NIVU5LX0hFSUdIVCk7XG4gIGxldCBzcmNQb3MgPSAwLFxuICAgICAgZGVzdFBvcztcbiAgY29uc3Qgc3JjID0gaW1nRGF0YS5kYXRhO1xuICBjb25zdCBkZXN0ID0gY2h1bmtJbWdEYXRhLmRhdGE7XG4gIGxldCBpLCBqLCB0aGlzQ2h1bmtIZWlnaHQsIGVsZW1zSW5UaGlzQ2h1bms7XG4gIGxldCB0cmFuc2Zlck1hcFJlZCwgdHJhbnNmZXJNYXBHcmVlbiwgdHJhbnNmZXJNYXBCbHVlLCB0cmFuc2Zlck1hcEdyYXk7XG5cbiAgaWYgKHRyYW5zZmVyTWFwcykge1xuICAgIHN3aXRjaCAodHJhbnNmZXJNYXBzLmxlbmd0aCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICB0cmFuc2Zlck1hcFJlZCA9IHRyYW5zZmVyTWFwc1swXTtcbiAgICAgICAgdHJhbnNmZXJNYXBHcmVlbiA9IHRyYW5zZmVyTWFwc1swXTtcbiAgICAgICAgdHJhbnNmZXJNYXBCbHVlID0gdHJhbnNmZXJNYXBzWzBdO1xuICAgICAgICB0cmFuc2Zlck1hcEdyYXkgPSB0cmFuc2Zlck1hcHNbMF07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDQ6XG4gICAgICAgIHRyYW5zZmVyTWFwUmVkID0gdHJhbnNmZXJNYXBzWzBdO1xuICAgICAgICB0cmFuc2Zlck1hcEdyZWVuID0gdHJhbnNmZXJNYXBzWzFdO1xuICAgICAgICB0cmFuc2Zlck1hcEJsdWUgPSB0cmFuc2Zlck1hcHNbMl07XG4gICAgICAgIHRyYW5zZmVyTWFwR3JheSA9IHRyYW5zZmVyTWFwc1szXTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKGltZ0RhdGEua2luZCA9PT0gX3V0aWwuSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQKSB7XG4gICAgY29uc3Qgc3JjTGVuZ3RoID0gc3JjLmJ5dGVMZW5ndGg7XG4gICAgY29uc3QgZGVzdDMyID0gbmV3IFVpbnQzMkFycmF5KGRlc3QuYnVmZmVyLCAwLCBkZXN0LmJ5dGVMZW5ndGggPj4gMik7XG4gICAgY29uc3QgZGVzdDMyRGF0YUxlbmd0aCA9IGRlc3QzMi5sZW5ndGg7XG4gICAgY29uc3QgZnVsbFNyY0RpZmYgPSB3aWR0aCArIDcgPj4gMztcbiAgICBsZXQgd2hpdGUgPSAweGZmZmZmZmZmO1xuICAgIGxldCBibGFjayA9IF91dGlsLklzTGl0dGxlRW5kaWFuQ2FjaGVkLnZhbHVlID8gMHhmZjAwMDAwMCA6IDB4MDAwMDAwZmY7XG5cbiAgICBpZiAodHJhbnNmZXJNYXBHcmF5KSB7XG4gICAgICBpZiAodHJhbnNmZXJNYXBHcmF5WzBdID09PSAweGZmICYmIHRyYW5zZmVyTWFwR3JheVsweGZmXSA9PT0gMCkge1xuICAgICAgICBbd2hpdGUsIGJsYWNrXSA9IFtibGFjaywgd2hpdGVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbENodW5rczsgaSsrKSB7XG4gICAgICB0aGlzQ2h1bmtIZWlnaHQgPSBpIDwgZnVsbENodW5rcyA/IEZVTExfQ0hVTktfSEVJR0hUIDogcGFydGlhbENodW5rSGVpZ2h0O1xuICAgICAgZGVzdFBvcyA9IDA7XG5cbiAgICAgIGZvciAoaiA9IDA7IGogPCB0aGlzQ2h1bmtIZWlnaHQ7IGorKykge1xuICAgICAgICBjb25zdCBzcmNEaWZmID0gc3JjTGVuZ3RoIC0gc3JjUG9zO1xuICAgICAgICBsZXQgayA9IDA7XG4gICAgICAgIGNvbnN0IGtFbmQgPSBzcmNEaWZmID4gZnVsbFNyY0RpZmYgPyB3aWR0aCA6IHNyY0RpZmYgKiA4IC0gNztcbiAgICAgICAgY29uc3Qga0VuZFVucm9sbGVkID0ga0VuZCAmIH43O1xuICAgICAgICBsZXQgbWFzayA9IDA7XG4gICAgICAgIGxldCBzcmNCeXRlID0gMDtcblxuICAgICAgICBmb3IgKDsgayA8IGtFbmRVbnJvbGxlZDsgayArPSA4KSB7XG4gICAgICAgICAgc3JjQnl0ZSA9IHNyY1tzcmNQb3MrK107XG4gICAgICAgICAgZGVzdDMyW2Rlc3RQb3MrK10gPSBzcmNCeXRlICYgMTI4ID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiA2NCA/IHdoaXRlIDogYmxhY2s7XG4gICAgICAgICAgZGVzdDMyW2Rlc3RQb3MrK10gPSBzcmNCeXRlICYgMzIgPyB3aGl0ZSA6IGJsYWNrO1xuICAgICAgICAgIGRlc3QzMltkZXN0UG9zKytdID0gc3JjQnl0ZSAmIDE2ID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiA4ID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiA0ID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiAyID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiAxID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoOyBrIDwga0VuZDsgaysrKSB7XG4gICAgICAgICAgaWYgKG1hc2sgPT09IDApIHtcbiAgICAgICAgICAgIHNyY0J5dGUgPSBzcmNbc3JjUG9zKytdO1xuICAgICAgICAgICAgbWFzayA9IDEyODtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiBtYXNrID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICBtYXNrID4+PSAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChkZXN0UG9zIDwgZGVzdDMyRGF0YUxlbmd0aCkge1xuICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IDA7XG4gICAgICB9XG5cbiAgICAgIGN0eC5wdXRJbWFnZURhdGEoY2h1bmtJbWdEYXRhLCAwLCBpICogRlVMTF9DSFVOS19IRUlHSFQpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpbWdEYXRhLmtpbmQgPT09IF91dGlsLkltYWdlS2luZC5SR0JBXzMyQlBQKSB7XG4gICAgY29uc3QgaGFzVHJhbnNmZXJNYXBzID0gISEodHJhbnNmZXJNYXBSZWQgfHwgdHJhbnNmZXJNYXBHcmVlbiB8fCB0cmFuc2Zlck1hcEJsdWUpO1xuICAgIGogPSAwO1xuICAgIGVsZW1zSW5UaGlzQ2h1bmsgPSB3aWR0aCAqIEZVTExfQ0hVTktfSEVJR0hUICogNDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBmdWxsQ2h1bmtzOyBpKyspIHtcbiAgICAgIGRlc3Quc2V0KHNyYy5zdWJhcnJheShzcmNQb3MsIHNyY1BvcyArIGVsZW1zSW5UaGlzQ2h1bmspKTtcbiAgICAgIHNyY1BvcyArPSBlbGVtc0luVGhpc0NodW5rO1xuXG4gICAgICBpZiAoaGFzVHJhbnNmZXJNYXBzKSB7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgZWxlbXNJblRoaXNDaHVuazsgayArPSA0KSB7XG4gICAgICAgICAgaWYgKHRyYW5zZmVyTWFwUmVkKSB7XG4gICAgICAgICAgICBkZXN0W2sgKyAwXSA9IHRyYW5zZmVyTWFwUmVkW2Rlc3RbayArIDBdXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHJhbnNmZXJNYXBHcmVlbikge1xuICAgICAgICAgICAgZGVzdFtrICsgMV0gPSB0cmFuc2Zlck1hcEdyZWVuW2Rlc3RbayArIDFdXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHJhbnNmZXJNYXBCbHVlKSB7XG4gICAgICAgICAgICBkZXN0W2sgKyAyXSA9IHRyYW5zZmVyTWFwQmx1ZVtkZXN0W2sgKyAyXV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGN0eC5wdXRJbWFnZURhdGEoY2h1bmtJbWdEYXRhLCAwLCBqKTtcbiAgICAgIGogKz0gRlVMTF9DSFVOS19IRUlHSFQ7XG4gICAgfVxuXG4gICAgaWYgKGkgPCB0b3RhbENodW5rcykge1xuICAgICAgZWxlbXNJblRoaXNDaHVuayA9IHdpZHRoICogcGFydGlhbENodW5rSGVpZ2h0ICogNDtcbiAgICAgIGRlc3Quc2V0KHNyYy5zdWJhcnJheShzcmNQb3MsIHNyY1BvcyArIGVsZW1zSW5UaGlzQ2h1bmspKTtcblxuICAgICAgaWYgKGhhc1RyYW5zZmVyTWFwcykge1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGVsZW1zSW5UaGlzQ2h1bms7IGsgKz0gNCkge1xuICAgICAgICAgIGlmICh0cmFuc2Zlck1hcFJlZCkge1xuICAgICAgICAgICAgZGVzdFtrICsgMF0gPSB0cmFuc2Zlck1hcFJlZFtkZXN0W2sgKyAwXV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRyYW5zZmVyTWFwR3JlZW4pIHtcbiAgICAgICAgICAgIGRlc3RbayArIDFdID0gdHJhbnNmZXJNYXBHcmVlbltkZXN0W2sgKyAxXV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRyYW5zZmVyTWFwQmx1ZSkge1xuICAgICAgICAgICAgZGVzdFtrICsgMl0gPSB0cmFuc2Zlck1hcEJsdWVbZGVzdFtrICsgMl1dO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjdHgucHV0SW1hZ2VEYXRhKGNodW5rSW1nRGF0YSwgMCwgaik7XG4gICAgfVxuICB9IGVsc2UgaWYgKGltZ0RhdGEua2luZCA9PT0gX3V0aWwuSW1hZ2VLaW5kLlJHQl8yNEJQUCkge1xuICAgIGNvbnN0IGhhc1RyYW5zZmVyTWFwcyA9ICEhKHRyYW5zZmVyTWFwUmVkIHx8IHRyYW5zZmVyTWFwR3JlZW4gfHwgdHJhbnNmZXJNYXBCbHVlKTtcbiAgICB0aGlzQ2h1bmtIZWlnaHQgPSBGVUxMX0NIVU5LX0hFSUdIVDtcbiAgICBlbGVtc0luVGhpc0NodW5rID0gd2lkdGggKiB0aGlzQ2h1bmtIZWlnaHQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxDaHVua3M7IGkrKykge1xuICAgICAgaWYgKGkgPj0gZnVsbENodW5rcykge1xuICAgICAgICB0aGlzQ2h1bmtIZWlnaHQgPSBwYXJ0aWFsQ2h1bmtIZWlnaHQ7XG4gICAgICAgIGVsZW1zSW5UaGlzQ2h1bmsgPSB3aWR0aCAqIHRoaXNDaHVua0hlaWdodDtcbiAgICAgIH1cblxuICAgICAgZGVzdFBvcyA9IDA7XG5cbiAgICAgIGZvciAoaiA9IGVsZW1zSW5UaGlzQ2h1bms7IGotLTspIHtcbiAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gc3JjW3NyY1BvcysrXTtcbiAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gc3JjW3NyY1BvcysrXTtcbiAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gc3JjW3NyY1BvcysrXTtcbiAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gMjU1O1xuICAgICAgfVxuXG4gICAgICBpZiAoaGFzVHJhbnNmZXJNYXBzKSB7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgZGVzdFBvczsgayArPSA0KSB7XG4gICAgICAgICAgaWYgKHRyYW5zZmVyTWFwUmVkKSB7XG4gICAgICAgICAgICBkZXN0W2sgKyAwXSA9IHRyYW5zZmVyTWFwUmVkW2Rlc3RbayArIDBdXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHJhbnNmZXJNYXBHcmVlbikge1xuICAgICAgICAgICAgZGVzdFtrICsgMV0gPSB0cmFuc2Zlck1hcEdyZWVuW2Rlc3RbayArIDFdXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHJhbnNmZXJNYXBCbHVlKSB7XG4gICAgICAgICAgICBkZXN0W2sgKyAyXSA9IHRyYW5zZmVyTWFwQmx1ZVtkZXN0W2sgKyAyXV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGN0eC5wdXRJbWFnZURhdGEoY2h1bmtJbWdEYXRhLCAwLCBpICogRlVMTF9DSFVOS19IRUlHSFQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGJhZCBpbWFnZSBraW5kOiAke2ltZ0RhdGEua2luZH1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdXRCaW5hcnlJbWFnZU1hc2soY3R4LCBpbWdEYXRhKSB7XG4gIGNvbnN0IGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0LFxuICAgICAgICB3aWR0aCA9IGltZ0RhdGEud2lkdGg7XG4gIGNvbnN0IHBhcnRpYWxDaHVua0hlaWdodCA9IGhlaWdodCAlIEZVTExfQ0hVTktfSEVJR0hUO1xuICBjb25zdCBmdWxsQ2h1bmtzID0gKGhlaWdodCAtIHBhcnRpYWxDaHVua0hlaWdodCkgLyBGVUxMX0NIVU5LX0hFSUdIVDtcbiAgY29uc3QgdG90YWxDaHVua3MgPSBwYXJ0aWFsQ2h1bmtIZWlnaHQgPT09IDAgPyBmdWxsQ2h1bmtzIDogZnVsbENodW5rcyArIDE7XG4gIGNvbnN0IGNodW5rSW1nRGF0YSA9IGN0eC5jcmVhdGVJbWFnZURhdGEod2lkdGgsIEZVTExfQ0hVTktfSEVJR0hUKTtcbiAgbGV0IHNyY1BvcyA9IDA7XG4gIGNvbnN0IHNyYyA9IGltZ0RhdGEuZGF0YTtcbiAgY29uc3QgZGVzdCA9IGNodW5rSW1nRGF0YS5kYXRhO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG90YWxDaHVua3M7IGkrKykge1xuICAgIGNvbnN0IHRoaXNDaHVua0hlaWdodCA9IGkgPCBmdWxsQ2h1bmtzID8gRlVMTF9DSFVOS19IRUlHSFQgOiBwYXJ0aWFsQ2h1bmtIZWlnaHQ7XG4gICAgbGV0IGRlc3RQb3MgPSAzO1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzQ2h1bmtIZWlnaHQ7IGorKykge1xuICAgICAgbGV0IGVsZW0sXG4gICAgICAgICAgbWFzayA9IDA7XG5cbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgd2lkdGg7IGsrKykge1xuICAgICAgICBpZiAoIW1hc2spIHtcbiAgICAgICAgICBlbGVtID0gc3JjW3NyY1BvcysrXTtcbiAgICAgICAgICBtYXNrID0gMTI4O1xuICAgICAgICB9XG5cbiAgICAgICAgZGVzdFtkZXN0UG9zXSA9IGVsZW0gJiBtYXNrID8gMCA6IDI1NTtcbiAgICAgICAgZGVzdFBvcyArPSA0O1xuICAgICAgICBtYXNrID4+PSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGN0eC5wdXRJbWFnZURhdGEoY2h1bmtJbWdEYXRhLCAwLCBpICogRlVMTF9DSFVOS19IRUlHSFQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvcHlDdHhTdGF0ZShzb3VyY2VDdHgsIGRlc3RDdHgpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IFtcInN0cm9rZVN0eWxlXCIsIFwiZmlsbFN0eWxlXCIsIFwiZmlsbFJ1bGVcIiwgXCJnbG9iYWxBbHBoYVwiLCBcImxpbmVXaWR0aFwiLCBcImxpbmVDYXBcIiwgXCJsaW5lSm9pblwiLCBcIm1pdGVyTGltaXRcIiwgXCJnbG9iYWxDb21wb3NpdGVPcGVyYXRpb25cIiwgXCJmb250XCJdO1xuXG4gIGZvciAobGV0IGkgPSAwLCBpaSA9IHByb3BlcnRpZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcblxuICAgIGlmIChzb3VyY2VDdHhbcHJvcGVydHldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlc3RDdHhbcHJvcGVydHldID0gc291cmNlQ3R4W3Byb3BlcnR5XTtcbiAgICB9XG4gIH1cblxuICBpZiAoc291cmNlQ3R4LnNldExpbmVEYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICBkZXN0Q3R4LnNldExpbmVEYXNoKHNvdXJjZUN0eC5nZXRMaW5lRGFzaCgpKTtcbiAgICBkZXN0Q3R4LmxpbmVEYXNoT2Zmc2V0ID0gc291cmNlQ3R4LmxpbmVEYXNoT2Zmc2V0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0Q3R4VG9EZWZhdWx0KGN0eCkge1xuICBjdHguc3Ryb2tlU3R5bGUgPSBcIiMwMDAwMDBcIjtcbiAgY3R4LmZpbGxTdHlsZSA9IFwiIzAwMDAwMFwiO1xuICBjdHguZmlsbFJ1bGUgPSBcIm5vbnplcm9cIjtcbiAgY3R4Lmdsb2JhbEFscGhhID0gMTtcbiAgY3R4LmxpbmVXaWR0aCA9IDE7XG4gIGN0eC5saW5lQ2FwID0gXCJidXR0XCI7XG4gIGN0eC5saW5lSm9pbiA9IFwibWl0ZXJcIjtcbiAgY3R4Lm1pdGVyTGltaXQgPSAxMDtcbiAgY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IFwic291cmNlLW92ZXJcIjtcbiAgY3R4LmZvbnQgPSBcIjEwcHggc2Fucy1zZXJpZlwiO1xuXG4gIGlmIChjdHguc2V0TGluZURhc2ggIT09IHVuZGVmaW5lZCkge1xuICAgIGN0eC5zZXRMaW5lRGFzaChbXSk7XG4gICAgY3R4LmxpbmVEYXNoT2Zmc2V0ID0gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wb3NlU01hc2tCYWNrZHJvcChieXRlcywgcjAsIGcwLCBiMCkge1xuICBjb25zdCBsZW5ndGggPSBieXRlcy5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaSA9IDM7IGkgPCBsZW5ndGg7IGkgKz0gNCkge1xuICAgIGNvbnN0IGFscGhhID0gYnl0ZXNbaV07XG5cbiAgICBpZiAoYWxwaGEgPT09IDApIHtcbiAgICAgIGJ5dGVzW2kgLSAzXSA9IHIwO1xuICAgICAgYnl0ZXNbaSAtIDJdID0gZzA7XG4gICAgICBieXRlc1tpIC0gMV0gPSBiMDtcbiAgICB9IGVsc2UgaWYgKGFscGhhIDwgMjU1KSB7XG4gICAgICBjb25zdCBhbHBoYV8gPSAyNTUgLSBhbHBoYTtcbiAgICAgIGJ5dGVzW2kgLSAzXSA9IGJ5dGVzW2kgLSAzXSAqIGFscGhhICsgcjAgKiBhbHBoYV8gPj4gODtcbiAgICAgIGJ5dGVzW2kgLSAyXSA9IGJ5dGVzW2kgLSAyXSAqIGFscGhhICsgZzAgKiBhbHBoYV8gPj4gODtcbiAgICAgIGJ5dGVzW2kgLSAxXSA9IGJ5dGVzW2kgLSAxXSAqIGFscGhhICsgYjAgKiBhbHBoYV8gPj4gODtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcG9zZVNNYXNrQWxwaGEobWFza0RhdGEsIGxheWVyRGF0YSwgdHJhbnNmZXJNYXApIHtcbiAgY29uc3QgbGVuZ3RoID0gbWFza0RhdGEubGVuZ3RoO1xuICBjb25zdCBzY2FsZSA9IDEgLyAyNTU7XG5cbiAgZm9yIChsZXQgaSA9IDM7IGkgPCBsZW5ndGg7IGkgKz0gNCkge1xuICAgIGNvbnN0IGFscGhhID0gdHJhbnNmZXJNYXAgPyB0cmFuc2Zlck1hcFttYXNrRGF0YVtpXV0gOiBtYXNrRGF0YVtpXTtcbiAgICBsYXllckRhdGFbaV0gPSBsYXllckRhdGFbaV0gKiBhbHBoYSAqIHNjYWxlIHwgMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wb3NlU01hc2tMdW1pbm9zaXR5KG1hc2tEYXRhLCBsYXllckRhdGEsIHRyYW5zZmVyTWFwKSB7XG4gIGNvbnN0IGxlbmd0aCA9IG1hc2tEYXRhLmxlbmd0aDtcblxuICBmb3IgKGxldCBpID0gMzsgaSA8IGxlbmd0aDsgaSArPSA0KSB7XG4gICAgY29uc3QgeSA9IG1hc2tEYXRhW2kgLSAzXSAqIDc3ICsgbWFza0RhdGFbaSAtIDJdICogMTUyICsgbWFza0RhdGFbaSAtIDFdICogMjg7XG4gICAgbGF5ZXJEYXRhW2ldID0gdHJhbnNmZXJNYXAgPyBsYXllckRhdGFbaV0gKiB0cmFuc2Zlck1hcFt5ID4+IDhdID4+IDggOiBsYXllckRhdGFbaV0gKiB5ID4+IDE2O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdlbmVyaWNDb21wb3NlU01hc2sobWFza0N0eCwgbGF5ZXJDdHgsIHdpZHRoLCBoZWlnaHQsIHN1YnR5cGUsIGJhY2tkcm9wLCB0cmFuc2Zlck1hcCwgbGF5ZXJPZmZzZXRYLCBsYXllck9mZnNldFksIG1hc2tPZmZzZXRYLCBtYXNrT2Zmc2V0WSkge1xuICBjb25zdCBoYXNCYWNrZHJvcCA9ICEhYmFja2Ryb3A7XG4gIGNvbnN0IHIwID0gaGFzQmFja2Ryb3AgPyBiYWNrZHJvcFswXSA6IDA7XG4gIGNvbnN0IGcwID0gaGFzQmFja2Ryb3AgPyBiYWNrZHJvcFsxXSA6IDA7XG4gIGNvbnN0IGIwID0gaGFzQmFja2Ryb3AgPyBiYWNrZHJvcFsyXSA6IDA7XG4gIGxldCBjb21wb3NlRm47XG5cbiAgaWYgKHN1YnR5cGUgPT09IFwiTHVtaW5vc2l0eVwiKSB7XG4gICAgY29tcG9zZUZuID0gY29tcG9zZVNNYXNrTHVtaW5vc2l0eTtcbiAgfSBlbHNlIHtcbiAgICBjb21wb3NlRm4gPSBjb21wb3NlU01hc2tBbHBoYTtcbiAgfVxuXG4gIGNvbnN0IFBJWEVMU19UT19QUk9DRVNTID0gMTA0ODU3NjtcbiAgY29uc3QgY2h1bmtTaXplID0gTWF0aC5taW4oaGVpZ2h0LCBNYXRoLmNlaWwoUElYRUxTX1RPX1BST0NFU1MgLyB3aWR0aCkpO1xuXG4gIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICs9IGNodW5rU2l6ZSkge1xuICAgIGNvbnN0IGNodW5rSGVpZ2h0ID0gTWF0aC5taW4oY2h1bmtTaXplLCBoZWlnaHQgLSByb3cpO1xuICAgIGNvbnN0IG1hc2tEYXRhID0gbWFza0N0eC5nZXRJbWFnZURhdGEobGF5ZXJPZmZzZXRYIC0gbWFza09mZnNldFgsIHJvdyArIChsYXllck9mZnNldFkgLSBtYXNrT2Zmc2V0WSksIHdpZHRoLCBjaHVua0hlaWdodCk7XG4gICAgY29uc3QgbGF5ZXJEYXRhID0gbGF5ZXJDdHguZ2V0SW1hZ2VEYXRhKGxheWVyT2Zmc2V0WCwgcm93ICsgbGF5ZXJPZmZzZXRZLCB3aWR0aCwgY2h1bmtIZWlnaHQpO1xuXG4gICAgaWYgKGhhc0JhY2tkcm9wKSB7XG4gICAgICBjb21wb3NlU01hc2tCYWNrZHJvcChtYXNrRGF0YS5kYXRhLCByMCwgZzAsIGIwKTtcbiAgICB9XG5cbiAgICBjb21wb3NlRm4obWFza0RhdGEuZGF0YSwgbGF5ZXJEYXRhLmRhdGEsIHRyYW5zZmVyTWFwKTtcbiAgICBsYXllckN0eC5wdXRJbWFnZURhdGEobGF5ZXJEYXRhLCBsYXllck9mZnNldFgsIHJvdyArIGxheWVyT2Zmc2V0WSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcG9zZVNNYXNrKGN0eCwgc21hc2ssIGxheWVyQ3R4LCBsYXllckJveCkge1xuICBjb25zdCBsYXllck9mZnNldFggPSBsYXllckJveFswXTtcbiAgY29uc3QgbGF5ZXJPZmZzZXRZID0gbGF5ZXJCb3hbMV07XG4gIGNvbnN0IGxheWVyV2lkdGggPSBsYXllckJveFsyXSAtIGxheWVyT2Zmc2V0WDtcbiAgY29uc3QgbGF5ZXJIZWlnaHQgPSBsYXllckJveFszXSAtIGxheWVyT2Zmc2V0WTtcblxuICBpZiAobGF5ZXJXaWR0aCA9PT0gMCB8fCBsYXllckhlaWdodCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGdlbmVyaWNDb21wb3NlU01hc2soc21hc2suY29udGV4dCwgbGF5ZXJDdHgsIGxheWVyV2lkdGgsIGxheWVySGVpZ2h0LCBzbWFzay5zdWJ0eXBlLCBzbWFzay5iYWNrZHJvcCwgc21hc2sudHJhbnNmZXJNYXAsIGxheWVyT2Zmc2V0WCwgbGF5ZXJPZmZzZXRZLCBzbWFzay5vZmZzZXRYLCBzbWFzay5vZmZzZXRZKTtcbiAgY3R4LnNhdmUoKTtcbiAgY3R4Lmdsb2JhbEFscGhhID0gMTtcbiAgY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IFwic291cmNlLW92ZXJcIjtcbiAgY3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgY3R4LmRyYXdJbWFnZShsYXllckN0eC5jYW52YXMsIDAsIDApO1xuICBjdHgucmVzdG9yZSgpO1xufVxuXG5mdW5jdGlvbiBnZXRJbWFnZVNtb290aGluZ0VuYWJsZWQodHJhbnNmb3JtLCBpbnRlcnBvbGF0ZSkge1xuICBjb25zdCBzY2FsZSA9IF91dGlsLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUodHJhbnNmb3JtKTtcblxuICBzY2FsZVswXSA9IE1hdGguZnJvdW5kKHNjYWxlWzBdKTtcbiAgc2NhbGVbMV0gPSBNYXRoLmZyb3VuZChzY2FsZVsxXSk7XG4gIGNvbnN0IGFjdHVhbFNjYWxlID0gTWF0aC5mcm91bmQoKGdsb2JhbFRoaXMuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSAqIF9kaXNwbGF5X3V0aWxzLlBpeGVsc1BlckluY2guUERGX1RPX0NTU19VTklUUyk7XG5cbiAgaWYgKGludGVycG9sYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGU7XG4gIH0gZWxzZSBpZiAoc2NhbGVbMF0gPD0gYWN0dWFsU2NhbGUgfHwgc2NhbGVbMV0gPD0gYWN0dWFsU2NhbGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuY29uc3QgTElORV9DQVBfU1RZTEVTID0gW1wiYnV0dFwiLCBcInJvdW5kXCIsIFwic3F1YXJlXCJdO1xuY29uc3QgTElORV9KT0lOX1NUWUxFUyA9IFtcIm1pdGVyXCIsIFwicm91bmRcIiwgXCJiZXZlbFwiXTtcbmNvbnN0IE5PUk1BTF9DTElQID0ge307XG5jb25zdCBFT19DTElQID0ge307XG5cbmNsYXNzIENhbnZhc0dyYXBoaWNzIHtcbiAgY29uc3RydWN0b3IoY2FudmFzQ3R4LCBjb21tb25PYmpzLCBvYmpzLCBjYW52YXNGYWN0b3J5LCBpbWFnZUxheWVyLCBvcHRpb25hbENvbnRlbnRDb25maWcsIGFubm90YXRpb25DYW52YXNNYXApIHtcbiAgICB0aGlzLmN0eCA9IGNhbnZhc0N0eDtcbiAgICB0aGlzLmN1cnJlbnQgPSBuZXcgQ2FudmFzRXh0cmFTdGF0ZSh0aGlzLmN0eC5jYW52YXMud2lkdGgsIHRoaXMuY3R4LmNhbnZhcy5oZWlnaHQpO1xuICAgIHRoaXMuc3RhdGVTdGFjayA9IFtdO1xuICAgIHRoaXMucGVuZGluZ0NsaXAgPSBudWxsO1xuICAgIHRoaXMucGVuZGluZ0VPRmlsbCA9IGZhbHNlO1xuICAgIHRoaXMucmVzID0gbnVsbDtcbiAgICB0aGlzLnhvYmpzID0gbnVsbDtcbiAgICB0aGlzLmNvbW1vbk9ianMgPSBjb21tb25PYmpzO1xuICAgIHRoaXMub2JqcyA9IG9ianM7XG4gICAgdGhpcy5jYW52YXNGYWN0b3J5ID0gY2FudmFzRmFjdG9yeTtcbiAgICB0aGlzLmltYWdlTGF5ZXIgPSBpbWFnZUxheWVyO1xuICAgIHRoaXMuZ3JvdXBTdGFjayA9IFtdO1xuICAgIHRoaXMucHJvY2Vzc2luZ1R5cGUzID0gbnVsbDtcbiAgICB0aGlzLmJhc2VUcmFuc2Zvcm0gPSBudWxsO1xuICAgIHRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrID0gW107XG4gICAgdGhpcy5ncm91cExldmVsID0gMDtcbiAgICB0aGlzLnNtYXNrU3RhY2sgPSBbXTtcbiAgICB0aGlzLnNtYXNrQ291bnRlciA9IDA7XG4gICAgdGhpcy50ZW1wU01hc2sgPSBudWxsO1xuICAgIHRoaXMuc3VzcGVuZGVkQ3R4ID0gbnVsbDtcbiAgICB0aGlzLmNvbnRlbnRWaXNpYmxlID0gdHJ1ZTtcbiAgICB0aGlzLm1hcmtlZENvbnRlbnRTdGFjayA9IFtdO1xuICAgIHRoaXMub3B0aW9uYWxDb250ZW50Q29uZmlnID0gb3B0aW9uYWxDb250ZW50Q29uZmlnO1xuICAgIHRoaXMuY2FjaGVkQ2FudmFzZXMgPSBuZXcgQ2FjaGVkQ2FudmFzZXModGhpcy5jYW52YXNGYWN0b3J5KTtcbiAgICB0aGlzLmNhY2hlZFBhdHRlcm5zID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuYW5ub3RhdGlvbkNhbnZhc01hcCA9IGFubm90YXRpb25DYW52YXNNYXA7XG4gICAgdGhpcy52aWV3cG9ydFNjYWxlID0gMTtcbiAgICB0aGlzLm91dHB1dFNjYWxlWCA9IDE7XG4gICAgdGhpcy5vdXRwdXRTY2FsZVkgPSAxO1xuXG4gICAgaWYgKGNhbnZhc0N0eCkge1xuICAgICAgYWRkQ29udGV4dEN1cnJlbnRUcmFuc2Zvcm0oY2FudmFzQ3R4KTtcbiAgICB9XG5cbiAgICB0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID0gbnVsbDtcbiAgfVxuXG4gIGJlZ2luRHJhd2luZyh7XG4gICAgdHJhbnNmb3JtLFxuICAgIHZpZXdwb3J0LFxuICAgIHRyYW5zcGFyZW5jeSA9IGZhbHNlLFxuICAgIGJhY2tncm91bmQgPSBudWxsXG4gIH0pIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuY3R4LmNhbnZhcy53aWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmN0eC5jYW52YXMuaGVpZ2h0O1xuICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBiYWNrZ3JvdW5kIHx8IFwicmdiKDI1NSwgMjU1LCAyNTUpXCI7XG4gICAgdGhpcy5jdHguZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuXG4gICAgaWYgKHRyYW5zcGFyZW5jeSkge1xuICAgICAgY29uc3QgdHJhbnNwYXJlbnRDYW52YXMgPSB0aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhcInRyYW5zcGFyZW50XCIsIHdpZHRoLCBoZWlnaHQsIHRydWUpO1xuICAgICAgdGhpcy5jb21wb3NpdGVDdHggPSB0aGlzLmN0eDtcbiAgICAgIHRoaXMudHJhbnNwYXJlbnRDYW52YXMgPSB0cmFuc3BhcmVudENhbnZhcy5jYW52YXM7XG4gICAgICB0aGlzLmN0eCA9IHRyYW5zcGFyZW50Q2FudmFzLmNvbnRleHQ7XG4gICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICB0aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsIHRoaXMuY29tcG9zaXRlQ3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICByZXNldEN0eFRvRGVmYXVsdCh0aGlzLmN0eCk7XG5cbiAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICB0aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsIHRyYW5zZm9ybSk7XG4gICAgICB0aGlzLm91dHB1dFNjYWxlWCA9IHRyYW5zZm9ybVswXTtcbiAgICAgIHRoaXMub3V0cHV0U2NhbGVZID0gdHJhbnNmb3JtWzBdO1xuICAgIH1cblxuICAgIHRoaXMuY3R4LnRyYW5zZm9ybS5hcHBseSh0aGlzLmN0eCwgdmlld3BvcnQudHJhbnNmb3JtKTtcbiAgICB0aGlzLnZpZXdwb3J0U2NhbGUgPSB2aWV3cG9ydC5zY2FsZTtcbiAgICB0aGlzLmJhc2VUcmFuc2Zvcm0gPSB0aGlzLmN0eC5tb3pDdXJyZW50VHJhbnNmb3JtLnNsaWNlKCk7XG4gICAgdGhpcy5fY29tYmluZWRTY2FsZUZhY3RvciA9IE1hdGguaHlwb3QodGhpcy5iYXNlVHJhbnNmb3JtWzBdLCB0aGlzLmJhc2VUcmFuc2Zvcm1bMl0pO1xuXG4gICAgaWYgKHRoaXMuaW1hZ2VMYXllcikge1xuICAgICAgdGhpcy5pbWFnZUxheWVyLmJlZ2luTGF5b3V0KCk7XG4gICAgfVxuICB9XG5cbiAgZXhlY3V0ZU9wZXJhdG9yTGlzdChvcGVyYXRvckxpc3QsIGV4ZWN1dGlvblN0YXJ0SWR4LCBjb250aW51ZUNhbGxiYWNrLCBzdGVwcGVyKSB7XG4gICAgY29uc3QgYXJnc0FycmF5ID0gb3BlcmF0b3JMaXN0LmFyZ3NBcnJheTtcbiAgICBjb25zdCBmbkFycmF5ID0gb3BlcmF0b3JMaXN0LmZuQXJyYXk7XG4gICAgbGV0IGkgPSBleGVjdXRpb25TdGFydElkeCB8fCAwO1xuICAgIGNvbnN0IGFyZ3NBcnJheUxlbiA9IGFyZ3NBcnJheS5sZW5ndGg7XG5cbiAgICBpZiAoYXJnc0FycmF5TGVuID09PSBpKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG5cbiAgICBjb25zdCBjaHVua09wZXJhdGlvbnMgPSBhcmdzQXJyYXlMZW4gLSBpID4gRVhFQ1VUSU9OX1NURVBTICYmIHR5cGVvZiBjb250aW51ZUNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCI7XG4gICAgY29uc3QgZW5kVGltZSA9IGNodW5rT3BlcmF0aW9ucyA/IERhdGUubm93KCkgKyBFWEVDVVRJT05fVElNRSA6IDA7XG4gICAgbGV0IHN0ZXBzID0gMDtcbiAgICBjb25zdCBjb21tb25PYmpzID0gdGhpcy5jb21tb25PYmpzO1xuICAgIGNvbnN0IG9ianMgPSB0aGlzLm9ianM7XG4gICAgbGV0IGZuSWQ7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKHN0ZXBwZXIgIT09IHVuZGVmaW5lZCAmJiBpID09PSBzdGVwcGVyLm5leHRCcmVha1BvaW50KSB7XG4gICAgICAgIHN0ZXBwZXIuYnJlYWtJdChpLCBjb250aW51ZUNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9XG5cbiAgICAgIGZuSWQgPSBmbkFycmF5W2ldO1xuXG4gICAgICBpZiAoZm5JZCAhPT0gX3V0aWwuT1BTLmRlcGVuZGVuY3kpIHtcbiAgICAgICAgdGhpc1tmbklkXS5hcHBseSh0aGlzLCBhcmdzQXJyYXlbaV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCBkZXBPYmpJZCBvZiBhcmdzQXJyYXlbaV0pIHtcbiAgICAgICAgICBjb25zdCBvYmpzUG9vbCA9IGRlcE9iaklkLnN0YXJ0c1dpdGgoXCJnX1wiKSA/IGNvbW1vbk9ianMgOiBvYmpzO1xuXG4gICAgICAgICAgaWYgKCFvYmpzUG9vbC5oYXMoZGVwT2JqSWQpKSB7XG4gICAgICAgICAgICBvYmpzUG9vbC5nZXQoZGVwT2JqSWQsIGNvbnRpbnVlQ2FsbGJhY2spO1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGkrKztcblxuICAgICAgaWYgKGkgPT09IGFyZ3NBcnJheUxlbikge1xuICAgICAgICByZXR1cm4gaTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNodW5rT3BlcmF0aW9ucyAmJiArK3N0ZXBzID4gRVhFQ1VUSU9OX1NURVBTKSB7XG4gICAgICAgIGlmIChEYXRlLm5vdygpID4gZW5kVGltZSkge1xuICAgICAgICAgIGNvbnRpbnVlQ2FsbGJhY2soKTtcbiAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0ZXBzID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbmREcmF3aW5nKCkge1xuICAgIHdoaWxlICh0aGlzLnN0YXRlU3RhY2subGVuZ3RoIHx8IHRoaXMuY3VycmVudC5hY3RpdmVTTWFzayAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuXG4gICAgaWYgKHRoaXMudHJhbnNwYXJlbnRDYW52YXMpIHtcbiAgICAgIHRoaXMuY3R4ID0gdGhpcy5jb21wb3NpdGVDdHg7XG4gICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICB0aGlzLmN0eC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG4gICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UodGhpcy50cmFuc3BhcmVudENhbnZhcywgMCwgMCk7XG4gICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgICB0aGlzLnRyYW5zcGFyZW50Q2FudmFzID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLmNhY2hlZENhbnZhc2VzLmNsZWFyKCk7XG4gICAgdGhpcy5jYWNoZWRQYXR0ZXJucy5jbGVhcigpO1xuXG4gICAgaWYgKHRoaXMuaW1hZ2VMYXllcikge1xuICAgICAgdGhpcy5pbWFnZUxheWVyLmVuZExheW91dCgpO1xuICAgIH1cbiAgfVxuXG4gIF9zY2FsZUltYWdlKGltZywgaW52ZXJzZVRyYW5zZm9ybSkge1xuICAgIGNvbnN0IHdpZHRoID0gaW1nLndpZHRoO1xuICAgIGNvbnN0IGhlaWdodCA9IGltZy5oZWlnaHQ7XG4gICAgbGV0IHdpZHRoU2NhbGUgPSBNYXRoLm1heChNYXRoLmh5cG90KGludmVyc2VUcmFuc2Zvcm1bMF0sIGludmVyc2VUcmFuc2Zvcm1bMV0pLCAxKTtcbiAgICBsZXQgaGVpZ2h0U2NhbGUgPSBNYXRoLm1heChNYXRoLmh5cG90KGludmVyc2VUcmFuc2Zvcm1bMl0sIGludmVyc2VUcmFuc2Zvcm1bM10pLCAxKTtcbiAgICBsZXQgcGFpbnRXaWR0aCA9IHdpZHRoLFxuICAgICAgICBwYWludEhlaWdodCA9IGhlaWdodDtcbiAgICBsZXQgdG1wQ2FudmFzSWQgPSBcInByZXNjYWxlMVwiO1xuICAgIGxldCB0bXBDYW52YXMsIHRtcEN0eDtcblxuICAgIHdoaWxlICh3aWR0aFNjYWxlID4gMiAmJiBwYWludFdpZHRoID4gMSB8fCBoZWlnaHRTY2FsZSA+IDIgJiYgcGFpbnRIZWlnaHQgPiAxKSB7XG4gICAgICBsZXQgbmV3V2lkdGggPSBwYWludFdpZHRoLFxuICAgICAgICAgIG5ld0hlaWdodCA9IHBhaW50SGVpZ2h0O1xuXG4gICAgICBpZiAod2lkdGhTY2FsZSA+IDIgJiYgcGFpbnRXaWR0aCA+IDEpIHtcbiAgICAgICAgbmV3V2lkdGggPSBNYXRoLmNlaWwocGFpbnRXaWR0aCAvIDIpO1xuICAgICAgICB3aWR0aFNjYWxlIC89IHBhaW50V2lkdGggLyBuZXdXaWR0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKGhlaWdodFNjYWxlID4gMiAmJiBwYWludEhlaWdodCA+IDEpIHtcbiAgICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5jZWlsKHBhaW50SGVpZ2h0IC8gMik7XG4gICAgICAgIGhlaWdodFNjYWxlIC89IHBhaW50SGVpZ2h0IC8gbmV3SGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICB0bXBDYW52YXMgPSB0aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyh0bXBDYW52YXNJZCwgbmV3V2lkdGgsIG5ld0hlaWdodCk7XG4gICAgICB0bXBDdHggPSB0bXBDYW52YXMuY29udGV4dDtcbiAgICAgIHRtcEN0eC5jbGVhclJlY3QoMCwgMCwgbmV3V2lkdGgsIG5ld0hlaWdodCk7XG4gICAgICB0bXBDdHguZHJhd0ltYWdlKGltZywgMCwgMCwgcGFpbnRXaWR0aCwgcGFpbnRIZWlnaHQsIDAsIDAsIG5ld1dpZHRoLCBuZXdIZWlnaHQpO1xuICAgICAgaW1nID0gdG1wQ2FudmFzLmNhbnZhcztcbiAgICAgIHBhaW50V2lkdGggPSBuZXdXaWR0aDtcbiAgICAgIHBhaW50SGVpZ2h0ID0gbmV3SGVpZ2h0O1xuICAgICAgdG1wQ2FudmFzSWQgPSB0bXBDYW52YXNJZCA9PT0gXCJwcmVzY2FsZTFcIiA/IFwicHJlc2NhbGUyXCIgOiBcInByZXNjYWxlMVwiO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpbWcsXG4gICAgICBwYWludFdpZHRoLFxuICAgICAgcGFpbnRIZWlnaHRcbiAgICB9O1xuICB9XG5cbiAgX2NyZWF0ZU1hc2tDYW52YXMoaW1nKSB7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7XG4gICAgY29uc3Qgd2lkdGggPSBpbWcud2lkdGgsXG4gICAgICAgICAgaGVpZ2h0ID0gaW1nLmhlaWdodDtcbiAgICBjb25zdCBmaWxsQ29sb3IgPSB0aGlzLmN1cnJlbnQuZmlsbENvbG9yO1xuICAgIGNvbnN0IGlzUGF0dGVybkZpbGwgPSB0aGlzLmN1cnJlbnQucGF0dGVybkZpbGw7XG4gICAgY29uc3QgbWFza0NhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKFwibWFza0NhbnZhc1wiLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICBjb25zdCBtYXNrQ3R4ID0gbWFza0NhbnZhcy5jb250ZXh0O1xuICAgIHB1dEJpbmFyeUltYWdlTWFzayhtYXNrQ3R4LCBpbWcpO1xuICAgIGNvbnN0IG9ialRvQ2FudmFzID0gY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm07XG5cbiAgICBsZXQgbWFza1RvQ2FudmFzID0gX3V0aWwuVXRpbC50cmFuc2Zvcm0ob2JqVG9DYW52YXMsIFsxIC8gd2lkdGgsIDAsIDAsIC0xIC8gaGVpZ2h0LCAwLCAwXSk7XG5cbiAgICBtYXNrVG9DYW52YXMgPSBfdXRpbC5VdGlsLnRyYW5zZm9ybShtYXNrVG9DYW52YXMsIFsxLCAwLCAwLCAxLCAwLCAtaGVpZ2h0XSk7XG5cbiAgICBjb25zdCBjb3JkMSA9IF91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsIDBdLCBtYXNrVG9DYW52YXMpO1xuXG4gICAgY29uc3QgY29yZDIgPSBfdXRpbC5VdGlsLmFwcGx5VHJhbnNmb3JtKFt3aWR0aCwgaGVpZ2h0XSwgbWFza1RvQ2FudmFzKTtcblxuICAgIGNvbnN0IHJlY3QgPSBfdXRpbC5VdGlsLm5vcm1hbGl6ZVJlY3QoW2NvcmQxWzBdLCBjb3JkMVsxXSwgY29yZDJbMF0sIGNvcmQyWzFdXSk7XG5cbiAgICBjb25zdCBkcmF3bldpZHRoID0gTWF0aC5jZWlsKHJlY3RbMl0gLSByZWN0WzBdKTtcbiAgICBjb25zdCBkcmF3bkhlaWdodCA9IE1hdGguY2VpbChyZWN0WzNdIC0gcmVjdFsxXSk7XG4gICAgY29uc3QgZmlsbENhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKFwiZmlsbENhbnZhc1wiLCBkcmF3bldpZHRoLCBkcmF3bkhlaWdodCwgdHJ1ZSk7XG4gICAgY29uc3QgZmlsbEN0eCA9IGZpbGxDYW52YXMuY29udGV4dDtcbiAgICBjb25zdCBvZmZzZXRYID0gTWF0aC5taW4oY29yZDFbMF0sIGNvcmQyWzBdKTtcbiAgICBjb25zdCBvZmZzZXRZID0gTWF0aC5taW4oY29yZDFbMV0sIGNvcmQyWzFdKTtcbiAgICBmaWxsQ3R4LnRyYW5zbGF0ZSgtb2Zmc2V0WCwgLW9mZnNldFkpO1xuICAgIGZpbGxDdHgudHJhbnNmb3JtLmFwcGx5KGZpbGxDdHgsIG1hc2tUb0NhbnZhcyk7XG5cbiAgICBjb25zdCBzY2FsZWQgPSB0aGlzLl9zY2FsZUltYWdlKG1hc2tDYW52YXMuY2FudmFzLCBmaWxsQ3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKTtcblxuICAgIGZpbGxDdHguaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZ2V0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKGZpbGxDdHgubW96Q3VycmVudFRyYW5zZm9ybSwgaW1nLmludGVycG9sYXRlKTtcbiAgICBmaWxsQ3R4LmRyYXdJbWFnZShzY2FsZWQuaW1nLCAwLCAwLCBzY2FsZWQuaW1nLndpZHRoLCBzY2FsZWQuaW1nLmhlaWdodCwgMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmlsbEN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBcInNvdXJjZS1pblwiO1xuXG4gICAgY29uc3QgaW52ZXJzZSA9IF91dGlsLlV0aWwudHJhbnNmb3JtKGZpbGxDdHgubW96Q3VycmVudFRyYW5zZm9ybUludmVyc2UsIFsxLCAwLCAwLCAxLCAtb2Zmc2V0WCwgLW9mZnNldFldKTtcblxuICAgIGZpbGxDdHguZmlsbFN0eWxlID0gaXNQYXR0ZXJuRmlsbCA/IGZpbGxDb2xvci5nZXRQYXR0ZXJuKGN0eCwgdGhpcywgaW52ZXJzZSwgX3BhdHRlcm5faGVscGVyLlBhdGhUeXBlLkZJTEwpIDogZmlsbENvbG9yO1xuICAgIGZpbGxDdHguZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhbnZhczogZmlsbENhbnZhcy5jYW52YXMsXG4gICAgICBvZmZzZXRYOiBNYXRoLnJvdW5kKG9mZnNldFgpLFxuICAgICAgb2Zmc2V0WTogTWF0aC5yb3VuZChvZmZzZXRZKVxuICAgIH07XG4gIH1cblxuICBzZXRMaW5lV2lkdGgod2lkdGgpIHtcbiAgICB0aGlzLmN1cnJlbnQubGluZVdpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5jdHgubGluZVdpZHRoID0gd2lkdGg7XG4gIH1cblxuICBzZXRMaW5lQ2FwKHN0eWxlKSB7XG4gICAgdGhpcy5jdHgubGluZUNhcCA9IExJTkVfQ0FQX1NUWUxFU1tzdHlsZV07XG4gIH1cblxuICBzZXRMaW5lSm9pbihzdHlsZSkge1xuICAgIHRoaXMuY3R4LmxpbmVKb2luID0gTElORV9KT0lOX1NUWUxFU1tzdHlsZV07XG4gIH1cblxuICBzZXRNaXRlckxpbWl0KGxpbWl0KSB7XG4gICAgdGhpcy5jdHgubWl0ZXJMaW1pdCA9IGxpbWl0O1xuICB9XG5cbiAgc2V0RGFzaChkYXNoQXJyYXksIGRhc2hQaGFzZSkge1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuXG4gICAgaWYgKGN0eC5zZXRMaW5lRGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjdHguc2V0TGluZURhc2goZGFzaEFycmF5KTtcbiAgICAgIGN0eC5saW5lRGFzaE9mZnNldCA9IGRhc2hQaGFzZTtcbiAgICB9XG4gIH1cblxuICBzZXRSZW5kZXJpbmdJbnRlbnQoaW50ZW50KSB7fVxuXG4gIHNldEZsYXRuZXNzKGZsYXRuZXNzKSB7fVxuXG4gIHNldEdTdGF0ZShzdGF0ZXMpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBzdGF0ZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgY29uc3Qgc3RhdGUgPSBzdGF0ZXNbaV07XG4gICAgICBjb25zdCBrZXkgPSBzdGF0ZVswXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gc3RhdGVbMV07XG5cbiAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgXCJMV1wiOlxuICAgICAgICAgIHRoaXMuc2V0TGluZVdpZHRoKHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiTENcIjpcbiAgICAgICAgICB0aGlzLnNldExpbmVDYXAodmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJMSlwiOlxuICAgICAgICAgIHRoaXMuc2V0TGluZUpvaW4odmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJNTFwiOlxuICAgICAgICAgIHRoaXMuc2V0TWl0ZXJMaW1pdCh2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIkRcIjpcbiAgICAgICAgICB0aGlzLnNldERhc2godmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiUklcIjpcbiAgICAgICAgICB0aGlzLnNldFJlbmRlcmluZ0ludGVudCh2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIkZMXCI6XG4gICAgICAgICAgdGhpcy5zZXRGbGF0bmVzcyh2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIkZvbnRcIjpcbiAgICAgICAgICB0aGlzLnNldEZvbnQodmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiQ0FcIjpcbiAgICAgICAgICB0aGlzLmN1cnJlbnQuc3Ryb2tlQWxwaGEgPSBzdGF0ZVsxXTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiY2FcIjpcbiAgICAgICAgICB0aGlzLmN1cnJlbnQuZmlsbEFscGhhID0gc3RhdGVbMV07XG4gICAgICAgICAgdGhpcy5jdHguZ2xvYmFsQWxwaGEgPSBzdGF0ZVsxXTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiQk1cIjpcbiAgICAgICAgICB0aGlzLmN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSB2YWx1ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiU01hc2tcIjpcbiAgICAgICAgICB0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2sgPSB2YWx1ZSA/IHRoaXMudGVtcFNNYXNrIDogbnVsbDtcbiAgICAgICAgICB0aGlzLnRlbXBTTWFzayA9IG51bGw7XG4gICAgICAgICAgdGhpcy5jaGVja1NNYXNrU3RhdGUoKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiVFJcIjpcbiAgICAgICAgICB0aGlzLmN1cnJlbnQudHJhbnNmZXJNYXBzID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hlY2tTTWFza1N0YXRlKCkge1xuICAgIGNvbnN0IGluU01hc2tNb2RlID0gISF0aGlzLnN1c3BlbmRlZEN0eDtcblxuICAgIGlmICh0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2sgJiYgIWluU01hc2tNb2RlKSB7XG4gICAgICB0aGlzLmJlZ2luU01hc2tNb2RlKCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrICYmIGluU01hc2tNb2RlKSB7XG4gICAgICB0aGlzLmVuZFNNYXNrTW9kZSgpO1xuICAgIH1cbiAgfVxuXG4gIGJlZ2luU01hc2tNb2RlKCkge1xuICAgIGlmICh0aGlzLnN1c3BlbmRlZEN0eCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYmVnaW5TTWFza01vZGUgY2FsbGVkIHdoaWxlIGFscmVhZHkgaW4gc21hc2sgbW9kZVwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBkcmF3bldpZHRoID0gdGhpcy5jdHguY2FudmFzLndpZHRoO1xuICAgIGNvbnN0IGRyYXduSGVpZ2h0ID0gdGhpcy5jdHguY2FudmFzLmhlaWdodDtcbiAgICBjb25zdCBjYWNoZUlkID0gXCJzbWFza0dyb3VwQXRcIiArIHRoaXMuZ3JvdXBMZXZlbDtcbiAgICBjb25zdCBzY3JhdGNoQ2FudmFzID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoY2FjaGVJZCwgZHJhd25XaWR0aCwgZHJhd25IZWlnaHQsIHRydWUpO1xuICAgIHRoaXMuc3VzcGVuZGVkQ3R4ID0gdGhpcy5jdHg7XG4gICAgdGhpcy5jdHggPSBzY3JhdGNoQ2FudmFzLmNvbnRleHQ7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7XG4gICAgY3R4LnNldFRyYW5zZm9ybS5hcHBseShjdHgsIHRoaXMuc3VzcGVuZGVkQ3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0pO1xuICAgIGNvcHlDdHhTdGF0ZSh0aGlzLnN1c3BlbmRlZEN0eCwgY3R4KTtcbiAgICBtaXJyb3JDb250ZXh0T3BlcmF0aW9ucyhjdHgsIHRoaXMuc3VzcGVuZGVkQ3R4KTtcbiAgICB0aGlzLnNldEdTdGF0ZShbW1wiQk1cIiwgXCJzb3VyY2Utb3ZlclwiXSwgW1wiY2FcIiwgMV0sIFtcIkNBXCIsIDFdXSk7XG4gIH1cblxuICBlbmRTTWFza01vZGUoKSB7XG4gICAgaWYgKCF0aGlzLnN1c3BlbmRlZEN0eCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZW5kU01hc2tNb2RlIGNhbGxlZCB3aGlsZSBub3QgaW4gc21hc2sgbW9kZVwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmN0eC5fcmVtb3ZlTWlycm9yaW5nKCk7XG5cbiAgICBjb3B5Q3R4U3RhdGUodGhpcy5jdHgsIHRoaXMuc3VzcGVuZGVkQ3R4KTtcbiAgICB0aGlzLmN0eCA9IHRoaXMuc3VzcGVuZGVkQ3R4O1xuICAgIHRoaXMuY3VycmVudC5hY3RpdmVTTWFzayA9IG51bGw7XG4gICAgdGhpcy5zdXNwZW5kZWRDdHggPSBudWxsO1xuICB9XG5cbiAgY29tcG9zZShkaXJ0eUJveCkge1xuICAgIGlmICghdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkaXJ0eUJveCkge1xuICAgICAgZGlydHlCb3ggPSBbMCwgMCwgdGhpcy5jdHguY2FudmFzLndpZHRoLCB0aGlzLmN0eC5jYW52YXMuaGVpZ2h0XTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlydHlCb3hbMF0gPSBNYXRoLmZsb29yKGRpcnR5Qm94WzBdKTtcbiAgICAgIGRpcnR5Qm94WzFdID0gTWF0aC5mbG9vcihkaXJ0eUJveFsxXSk7XG4gICAgICBkaXJ0eUJveFsyXSA9IE1hdGguY2VpbChkaXJ0eUJveFsyXSk7XG4gICAgICBkaXJ0eUJveFszXSA9IE1hdGguY2VpbChkaXJ0eUJveFszXSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc21hc2sgPSB0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2s7XG4gICAgY29uc3Qgc3VzcGVuZGVkQ3R4ID0gdGhpcy5zdXNwZW5kZWRDdHg7XG4gICAgY29tcG9zZVNNYXNrKHN1c3BlbmRlZEN0eCwgc21hc2ssIHRoaXMuY3R4LCBkaXJ0eUJveCk7XG4gICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgIHRoaXMuY3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0aGlzLmN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jdHguY2FudmFzLndpZHRoLCB0aGlzLmN0eC5jYW52YXMuaGVpZ2h0KTtcbiAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gIH1cblxuICBzYXZlKCkge1xuICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICBjb25zdCBvbGQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgdGhpcy5zdGF0ZVN0YWNrLnB1c2gob2xkKTtcbiAgICB0aGlzLmN1cnJlbnQgPSBvbGQuY2xvbmUoKTtcbiAgfVxuXG4gIHJlc3RvcmUoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGVTdGFjay5sZW5ndGggPT09IDAgJiYgdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrKSB7XG4gICAgICB0aGlzLmVuZFNNYXNrTW9kZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXRlU3RhY2subGVuZ3RoICE9PSAwKSB7XG4gICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLnN0YXRlU3RhY2sucG9wKCk7XG4gICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgICB0aGlzLmNoZWNrU01hc2tTdGF0ZSgpO1xuICAgICAgdGhpcy5wZW5kaW5nQ2xpcCA9IG51bGw7XG4gICAgICB0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB0cmFuc2Zvcm0oYSwgYiwgYywgZCwgZSwgZikge1xuICAgIHRoaXMuY3R4LnRyYW5zZm9ybShhLCBiLCBjLCBkLCBlLCBmKTtcbiAgICB0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID0gbnVsbDtcbiAgfVxuXG4gIGNvbnN0cnVjdFBhdGgob3BzLCBhcmdzKSB7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICBsZXQgeCA9IGN1cnJlbnQueCxcbiAgICAgICAgeSA9IGN1cnJlbnQueTtcbiAgICBsZXQgc3RhcnRYLCBzdGFydFk7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaiA9IDAsIGlpID0gb3BzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHN3aXRjaCAob3BzW2ldIHwgMCkge1xuICAgICAgICBjYXNlIF91dGlsLk9QUy5yZWN0YW5nbGU6XG4gICAgICAgICAgeCA9IGFyZ3NbaisrXTtcbiAgICAgICAgICB5ID0gYXJnc1tqKytdO1xuICAgICAgICAgIGNvbnN0IHdpZHRoID0gYXJnc1tqKytdO1xuICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGFyZ3NbaisrXTtcbiAgICAgICAgICBjb25zdCB4dyA9IHggKyB3aWR0aDtcbiAgICAgICAgICBjb25zdCB5aCA9IHkgKyBoZWlnaHQ7XG4gICAgICAgICAgY3R4Lm1vdmVUbyh4LCB5KTtcblxuICAgICAgICAgIGlmICh3aWR0aCA9PT0gMCB8fCBoZWlnaHQgPT09IDApIHtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeHcsIHloKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh4dywgeSk7XG4gICAgICAgICAgICBjdHgubGluZVRvKHh3LCB5aCk7XG4gICAgICAgICAgICBjdHgubGluZVRvKHgsIHloKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50LnVwZGF0ZVBhdGhNaW5NYXgoY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0sIHgsIHkpO1xuICAgICAgICAgIGN1cnJlbnQudXBkYXRlUGF0aE1pbk1heChjdHgubW96Q3VycmVudFRyYW5zZm9ybSwgeHcsIHloKTtcbiAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBfdXRpbC5PUFMubW92ZVRvOlxuICAgICAgICAgIHggPSBhcmdzW2orK107XG4gICAgICAgICAgeSA9IGFyZ3NbaisrXTtcbiAgICAgICAgICBjdHgubW92ZVRvKHgsIHkpO1xuICAgICAgICAgIGN1cnJlbnQudXBkYXRlUGF0aE1pbk1heChjdHgubW96Q3VycmVudFRyYW5zZm9ybSwgeCwgeSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBfdXRpbC5PUFMubGluZVRvOlxuICAgICAgICAgIHggPSBhcmdzW2orK107XG4gICAgICAgICAgeSA9IGFyZ3NbaisrXTtcbiAgICAgICAgICBjdHgubGluZVRvKHgsIHkpO1xuICAgICAgICAgIGN1cnJlbnQudXBkYXRlUGF0aE1pbk1heChjdHgubW96Q3VycmVudFRyYW5zZm9ybSwgeCwgeSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBfdXRpbC5PUFMuY3VydmVUbzpcbiAgICAgICAgICBzdGFydFggPSB4O1xuICAgICAgICAgIHN0YXJ0WSA9IHk7XG4gICAgICAgICAgeCA9IGFyZ3NbaiArIDRdO1xuICAgICAgICAgIHkgPSBhcmdzW2ogKyA1XTtcbiAgICAgICAgICBjdHguYmV6aWVyQ3VydmVUbyhhcmdzW2pdLCBhcmdzW2ogKyAxXSwgYXJnc1tqICsgMl0sIGFyZ3NbaiArIDNdLCB4LCB5KTtcbiAgICAgICAgICBjdXJyZW50LnVwZGF0ZUN1cnZlUGF0aE1pbk1heChjdHgubW96Q3VycmVudFRyYW5zZm9ybSwgc3RhcnRYLCBzdGFydFksIGFyZ3Nbal0sIGFyZ3NbaiArIDFdLCBhcmdzW2ogKyAyXSwgYXJnc1tqICsgM10sIHgsIHkpO1xuICAgICAgICAgIGogKz0gNjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIF91dGlsLk9QUy5jdXJ2ZVRvMjpcbiAgICAgICAgICBzdGFydFggPSB4O1xuICAgICAgICAgIHN0YXJ0WSA9IHk7XG4gICAgICAgICAgY3R4LmJlemllckN1cnZlVG8oeCwgeSwgYXJnc1tqXSwgYXJnc1tqICsgMV0sIGFyZ3NbaiArIDJdLCBhcmdzW2ogKyAzXSk7XG4gICAgICAgICAgY3VycmVudC51cGRhdGVDdXJ2ZVBhdGhNaW5NYXgoY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0sIHN0YXJ0WCwgc3RhcnRZLCB4LCB5LCBhcmdzW2pdLCBhcmdzW2ogKyAxXSwgYXJnc1tqICsgMl0sIGFyZ3NbaiArIDNdKTtcbiAgICAgICAgICB4ID0gYXJnc1tqICsgMl07XG4gICAgICAgICAgeSA9IGFyZ3NbaiArIDNdO1xuICAgICAgICAgIGogKz0gNDtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIF91dGlsLk9QUy5jdXJ2ZVRvMzpcbiAgICAgICAgICBzdGFydFggPSB4O1xuICAgICAgICAgIHN0YXJ0WSA9IHk7XG4gICAgICAgICAgeCA9IGFyZ3NbaiArIDJdO1xuICAgICAgICAgIHkgPSBhcmdzW2ogKyAzXTtcbiAgICAgICAgICBjdHguYmV6aWVyQ3VydmVUbyhhcmdzW2pdLCBhcmdzW2ogKyAxXSwgeCwgeSwgeCwgeSk7XG4gICAgICAgICAgY3VycmVudC51cGRhdGVDdXJ2ZVBhdGhNaW5NYXgoY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0sIHN0YXJ0WCwgc3RhcnRZLCBhcmdzW2pdLCBhcmdzW2ogKyAxXSwgeCwgeSwgeCwgeSk7XG4gICAgICAgICAgaiArPSA0O1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsb3NlUGF0aDpcbiAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY3VycmVudC5zZXRDdXJyZW50UG9pbnQoeCwgeSk7XG4gIH1cblxuICBjbG9zZVBhdGgoKSB7XG4gICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gIH1cblxuICBzdHJva2UoY29uc3VtZVBhdGgpIHtcbiAgICBjb25zdW1lUGF0aCA9IHR5cGVvZiBjb25zdW1lUGF0aCAhPT0gXCJ1bmRlZmluZWRcIiA/IGNvbnN1bWVQYXRoIDogdHJ1ZTtcbiAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICBjb25zdCBzdHJva2VDb2xvciA9IHRoaXMuY3VycmVudC5zdHJva2VDb2xvcjtcbiAgICBjdHguZ2xvYmFsQWxwaGEgPSB0aGlzLmN1cnJlbnQuc3Ryb2tlQWxwaGE7XG5cbiAgICBpZiAodGhpcy5jb250ZW50VmlzaWJsZSkge1xuICAgICAgaWYgKHR5cGVvZiBzdHJva2VDb2xvciA9PT0gXCJvYmplY3RcIiAmJiBzdHJva2VDb2xvcj8uZ2V0UGF0dGVybikge1xuICAgICAgICBjb25zdCBsaW5lV2lkdGggPSB0aGlzLmdldFNpbmdsZVBpeGVsV2lkdGgoKTtcbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc3Ryb2tlQ29sb3IuZ2V0UGF0dGVybihjdHgsIHRoaXMsIGN0eC5tb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSwgX3BhdHRlcm5faGVscGVyLlBhdGhUeXBlLlNUUk9LRSk7XG4gICAgICAgIGN0eC5saW5lV2lkdGggPSBNYXRoLm1heChsaW5lV2lkdGgsIHRoaXMuY3VycmVudC5saW5lV2lkdGgpO1xuICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsaW5lV2lkdGggPSB0aGlzLmdldFNpbmdsZVBpeGVsV2lkdGgoKTtcblxuICAgICAgICBpZiAobGluZVdpZHRoIDwgMCAmJiAtbGluZVdpZHRoID49IHRoaXMuY3VycmVudC5saW5lV2lkdGgpIHtcbiAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgIGN0eC5yZXNldFRyYW5zZm9ybSgpO1xuICAgICAgICAgIGN0eC5saW5lV2lkdGggPSBNYXRoLnJvdW5kKHRoaXMuX2NvbWJpbmVkU2NhbGVGYWN0b3IpO1xuICAgICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN0eC5saW5lV2lkdGggPSBNYXRoLm1heChsaW5lV2lkdGgsIHRoaXMuY3VycmVudC5saW5lV2lkdGgpO1xuICAgICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb25zdW1lUGF0aCkge1xuICAgICAgdGhpcy5jb25zdW1lUGF0aCh0aGlzLmN1cnJlbnQuZ2V0Q2xpcHBlZFBhdGhCb3VuZGluZ0JveCgpKTtcbiAgICB9XG5cbiAgICBjdHguZ2xvYmFsQWxwaGEgPSB0aGlzLmN1cnJlbnQuZmlsbEFscGhhO1xuICB9XG5cbiAgY2xvc2VTdHJva2UoKSB7XG4gICAgdGhpcy5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLnN0cm9rZSgpO1xuICB9XG5cbiAgZmlsbChjb25zdW1lUGF0aCkge1xuICAgIGNvbnN1bWVQYXRoID0gdHlwZW9mIGNvbnN1bWVQYXRoICE9PSBcInVuZGVmaW5lZFwiID8gY29uc3VtZVBhdGggOiB0cnVlO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuICAgIGNvbnN0IGZpbGxDb2xvciA9IHRoaXMuY3VycmVudC5maWxsQ29sb3I7XG4gICAgY29uc3QgaXNQYXR0ZXJuRmlsbCA9IHRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbDtcbiAgICBsZXQgbmVlZFJlc3RvcmUgPSBmYWxzZTtcblxuICAgIGlmIChpc1BhdHRlcm5GaWxsKSB7XG4gICAgICBjdHguc2F2ZSgpO1xuICAgICAgY3R4LmZpbGxTdHlsZSA9IGZpbGxDb2xvci5nZXRQYXR0ZXJuKGN0eCwgdGhpcywgY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlLCBfcGF0dGVybl9oZWxwZXIuUGF0aFR5cGUuRklMTCk7XG4gICAgICBuZWVkUmVzdG9yZSA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJzZWN0ID0gdGhpcy5jdXJyZW50LmdldENsaXBwZWRQYXRoQm91bmRpbmdCb3goKTtcblxuICAgIGlmICh0aGlzLmNvbnRlbnRWaXNpYmxlICYmIGludGVyc2VjdCAhPT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMucGVuZGluZ0VPRmlsbCkge1xuICAgICAgICBjdHguZmlsbChcImV2ZW5vZGRcIik7XG4gICAgICAgIHRoaXMucGVuZGluZ0VPRmlsbCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3R4LmZpbGwoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmVlZFJlc3RvcmUpIHtcbiAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnN1bWVQYXRoKSB7XG4gICAgICB0aGlzLmNvbnN1bWVQYXRoKGludGVyc2VjdCk7XG4gICAgfVxuICB9XG5cbiAgZW9GaWxsKCkge1xuICAgIHRoaXMucGVuZGluZ0VPRmlsbCA9IHRydWU7XG4gICAgdGhpcy5maWxsKCk7XG4gIH1cblxuICBmaWxsU3Ryb2tlKCkge1xuICAgIHRoaXMuZmlsbChmYWxzZSk7XG4gICAgdGhpcy5zdHJva2UoZmFsc2UpO1xuICAgIHRoaXMuY29uc3VtZVBhdGgoKTtcbiAgfVxuXG4gIGVvRmlsbFN0cm9rZSgpIHtcbiAgICB0aGlzLnBlbmRpbmdFT0ZpbGwgPSB0cnVlO1xuICAgIHRoaXMuZmlsbFN0cm9rZSgpO1xuICB9XG5cbiAgY2xvc2VGaWxsU3Ryb2tlKCkge1xuICAgIHRoaXMuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5maWxsU3Ryb2tlKCk7XG4gIH1cblxuICBjbG9zZUVPRmlsbFN0cm9rZSgpIHtcbiAgICB0aGlzLnBlbmRpbmdFT0ZpbGwgPSB0cnVlO1xuICAgIHRoaXMuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5maWxsU3Ryb2tlKCk7XG4gIH1cblxuICBlbmRQYXRoKCkge1xuICAgIHRoaXMuY29uc3VtZVBhdGgoKTtcbiAgfVxuXG4gIGNsaXAoKSB7XG4gICAgdGhpcy5wZW5kaW5nQ2xpcCA9IE5PUk1BTF9DTElQO1xuICB9XG5cbiAgZW9DbGlwKCkge1xuICAgIHRoaXMucGVuZGluZ0NsaXAgPSBFT19DTElQO1xuICB9XG5cbiAgYmVnaW5UZXh0KCkge1xuICAgIHRoaXMuY3VycmVudC50ZXh0TWF0cml4ID0gX3V0aWwuSURFTlRJVFlfTUFUUklYO1xuICAgIHRoaXMuY3VycmVudC50ZXh0TWF0cml4U2NhbGUgPSAxO1xuICAgIHRoaXMuY3VycmVudC54ID0gdGhpcy5jdXJyZW50LmxpbmVYID0gMDtcbiAgICB0aGlzLmN1cnJlbnQueSA9IHRoaXMuY3VycmVudC5saW5lWSA9IDA7XG4gIH1cblxuICBlbmRUZXh0KCkge1xuICAgIGNvbnN0IHBhdGhzID0gdGhpcy5wZW5kaW5nVGV4dFBhdGhzO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuXG4gICAgaWYgKHBhdGhzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjdHguc2F2ZSgpO1xuICAgIGN0eC5iZWdpblBhdGgoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHBhdGggPSBwYXRoc1tpXTtcbiAgICAgIGN0eC5zZXRUcmFuc2Zvcm0uYXBwbHkoY3R4LCBwYXRoLnRyYW5zZm9ybSk7XG4gICAgICBjdHgudHJhbnNsYXRlKHBhdGgueCwgcGF0aC55KTtcbiAgICAgIHBhdGguYWRkVG9QYXRoKGN0eCwgcGF0aC5mb250U2l6ZSk7XG4gICAgfVxuXG4gICAgY3R4LnJlc3RvcmUoKTtcbiAgICBjdHguY2xpcCgpO1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBkZWxldGUgdGhpcy5wZW5kaW5nVGV4dFBhdGhzO1xuICB9XG5cbiAgc2V0Q2hhclNwYWNpbmcoc3BhY2luZykge1xuICAgIHRoaXMuY3VycmVudC5jaGFyU3BhY2luZyA9IHNwYWNpbmc7XG4gIH1cblxuICBzZXRXb3JkU3BhY2luZyhzcGFjaW5nKSB7XG4gICAgdGhpcy5jdXJyZW50LndvcmRTcGFjaW5nID0gc3BhY2luZztcbiAgfVxuXG4gIHNldEhTY2FsZShzY2FsZSkge1xuICAgIHRoaXMuY3VycmVudC50ZXh0SFNjYWxlID0gc2NhbGUgLyAxMDA7XG4gIH1cblxuICBzZXRMZWFkaW5nKGxlYWRpbmcpIHtcbiAgICB0aGlzLmN1cnJlbnQubGVhZGluZyA9IC1sZWFkaW5nO1xuICB9XG5cbiAgc2V0Rm9udChmb250UmVmTmFtZSwgc2l6ZSkge1xuICAgIGNvbnN0IGZvbnRPYmogPSB0aGlzLmNvbW1vbk9ianMuZ2V0KGZvbnRSZWZOYW1lKTtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuXG4gICAgaWYgKCFmb250T2JqKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IGZpbmQgZm9udCBmb3IgJHtmb250UmVmTmFtZX1gKTtcbiAgICB9XG5cbiAgICBjdXJyZW50LmZvbnRNYXRyaXggPSBmb250T2JqLmZvbnRNYXRyaXggfHwgX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG5cbiAgICBpZiAoY3VycmVudC5mb250TWF0cml4WzBdID09PSAwIHx8IGN1cnJlbnQuZm9udE1hdHJpeFszXSA9PT0gMCkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiSW52YWxpZCBmb250IG1hdHJpeCBmb3IgZm9udCBcIiArIGZvbnRSZWZOYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoc2l6ZSA8IDApIHtcbiAgICAgIHNpemUgPSAtc2l6ZTtcbiAgICAgIGN1cnJlbnQuZm9udERpcmVjdGlvbiA9IC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50LmZvbnREaXJlY3Rpb24gPSAxO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudC5mb250ID0gZm9udE9iajtcbiAgICB0aGlzLmN1cnJlbnQuZm9udFNpemUgPSBzaXplO1xuXG4gICAgaWYgKGZvbnRPYmouaXNUeXBlM0ZvbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lID0gZm9udE9iai5sb2FkZWROYW1lIHx8IFwic2Fucy1zZXJpZlwiO1xuICAgIGxldCBib2xkID0gXCJub3JtYWxcIjtcblxuICAgIGlmIChmb250T2JqLmJsYWNrKSB7XG4gICAgICBib2xkID0gXCI5MDBcIjtcbiAgICB9IGVsc2UgaWYgKGZvbnRPYmouYm9sZCkge1xuICAgICAgYm9sZCA9IFwiYm9sZFwiO1xuICAgIH1cblxuICAgIGNvbnN0IGl0YWxpYyA9IGZvbnRPYmouaXRhbGljID8gXCJpdGFsaWNcIiA6IFwibm9ybWFsXCI7XG4gICAgY29uc3QgdHlwZWZhY2UgPSBgXCIke25hbWV9XCIsICR7Zm9udE9iai5mYWxsYmFja05hbWV9YDtcbiAgICBsZXQgYnJvd3NlckZvbnRTaXplID0gc2l6ZTtcblxuICAgIGlmIChzaXplIDwgTUlOX0ZPTlRfU0laRSkge1xuICAgICAgYnJvd3NlckZvbnRTaXplID0gTUlOX0ZPTlRfU0laRTtcbiAgICB9IGVsc2UgaWYgKHNpemUgPiBNQVhfRk9OVF9TSVpFKSB7XG4gICAgICBicm93c2VyRm9udFNpemUgPSBNQVhfRk9OVF9TSVpFO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudC5mb250U2l6ZVNjYWxlID0gc2l6ZSAvIGJyb3dzZXJGb250U2l6ZTtcbiAgICB0aGlzLmN0eC5mb250ID0gYCR7aXRhbGljfSAke2JvbGR9ICR7YnJvd3NlckZvbnRTaXplfXB4ICR7dHlwZWZhY2V9YDtcbiAgfVxuXG4gIHNldFRleHRSZW5kZXJpbmdNb2RlKG1vZGUpIHtcbiAgICB0aGlzLmN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGUgPSBtb2RlO1xuICB9XG5cbiAgc2V0VGV4dFJpc2UocmlzZSkge1xuICAgIHRoaXMuY3VycmVudC50ZXh0UmlzZSA9IHJpc2U7XG4gIH1cblxuICBtb3ZlVGV4dCh4LCB5KSB7XG4gICAgdGhpcy5jdXJyZW50LnggPSB0aGlzLmN1cnJlbnQubGluZVggKz0geDtcbiAgICB0aGlzLmN1cnJlbnQueSA9IHRoaXMuY3VycmVudC5saW5lWSArPSB5O1xuICB9XG5cbiAgc2V0TGVhZGluZ01vdmVUZXh0KHgsIHkpIHtcbiAgICB0aGlzLnNldExlYWRpbmcoLXkpO1xuICAgIHRoaXMubW92ZVRleHQoeCwgeSk7XG4gIH1cblxuICBzZXRUZXh0TWF0cml4KGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICB0aGlzLmN1cnJlbnQudGV4dE1hdHJpeCA9IFthLCBiLCBjLCBkLCBlLCBmXTtcbiAgICB0aGlzLmN1cnJlbnQudGV4dE1hdHJpeFNjYWxlID0gTWF0aC5oeXBvdChhLCBiKTtcbiAgICB0aGlzLmN1cnJlbnQueCA9IHRoaXMuY3VycmVudC5saW5lWCA9IDA7XG4gICAgdGhpcy5jdXJyZW50LnkgPSB0aGlzLmN1cnJlbnQubGluZVkgPSAwO1xuICB9XG5cbiAgbmV4dExpbmUoKSB7XG4gICAgdGhpcy5tb3ZlVGV4dCgwLCB0aGlzLmN1cnJlbnQubGVhZGluZyk7XG4gIH1cblxuICBwYWludENoYXIoY2hhcmFjdGVyLCB4LCB5LCBwYXR0ZXJuVHJhbnNmb3JtLCByZXNldExpbmVXaWR0aFRvT25lKSB7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICBjb25zdCBmb250ID0gY3VycmVudC5mb250O1xuICAgIGNvbnN0IHRleHRSZW5kZXJpbmdNb2RlID0gY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZTtcbiAgICBjb25zdCBmb250U2l6ZSA9IGN1cnJlbnQuZm9udFNpemUgLyBjdXJyZW50LmZvbnRTaXplU2NhbGU7XG4gICAgY29uc3QgZmlsbFN0cm9rZU1vZGUgPSB0ZXh0UmVuZGVyaW5nTW9kZSAmIF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFX01BU0s7XG4gICAgY29uc3QgaXNBZGRUb1BhdGhTZXQgPSAhISh0ZXh0UmVuZGVyaW5nTW9kZSAmIF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkFERF9UT19QQVRIX0ZMQUcpO1xuICAgIGNvbnN0IHBhdHRlcm5GaWxsID0gY3VycmVudC5wYXR0ZXJuRmlsbCAmJiAhZm9udC5taXNzaW5nRmlsZTtcbiAgICBsZXQgYWRkVG9QYXRoO1xuXG4gICAgaWYgKGZvbnQuZGlzYWJsZUZvbnRGYWNlIHx8IGlzQWRkVG9QYXRoU2V0IHx8IHBhdHRlcm5GaWxsKSB7XG4gICAgICBhZGRUb1BhdGggPSBmb250LmdldFBhdGhHZW5lcmF0b3IodGhpcy5jb21tb25PYmpzLCBjaGFyYWN0ZXIpO1xuICAgIH1cblxuICAgIGlmIChmb250LmRpc2FibGVGb250RmFjZSB8fCBwYXR0ZXJuRmlsbCkge1xuICAgICAgY3R4LnNhdmUoKTtcbiAgICAgIGN0eC50cmFuc2xhdGUoeCwgeSk7XG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICBhZGRUb1BhdGgoY3R4LCBmb250U2l6ZSk7XG5cbiAgICAgIGlmIChwYXR0ZXJuVHJhbnNmb3JtKSB7XG4gICAgICAgIGN0eC5zZXRUcmFuc2Zvcm0uYXBwbHkoY3R4LCBwYXR0ZXJuVHJhbnNmb3JtKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMIHx8IGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRSkge1xuICAgICAgICBjdHguZmlsbCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsbFN0cm9rZU1vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLlNUUk9LRSB8fCBmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0UpIHtcbiAgICAgICAgaWYgKHJlc2V0TGluZVdpZHRoVG9PbmUpIHtcbiAgICAgICAgICBjdHgucmVzZXRUcmFuc2Zvcm0oKTtcbiAgICAgICAgICBjdHgubGluZVdpZHRoID0gTWF0aC5yb3VuZCh0aGlzLl9jb21iaW5lZFNjYWxlRmFjdG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgIH1cblxuICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMIHx8IGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRSkge1xuICAgICAgICBjdHguZmlsbFRleHQoY2hhcmFjdGVyLCB4LCB5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5TVFJPS0UgfHwgZmlsbFN0cm9rZU1vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFKSB7XG4gICAgICAgIGlmIChyZXNldExpbmVXaWR0aFRvT25lKSB7XG4gICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICBjdHgubW92ZVRvKHgsIHkpO1xuICAgICAgICAgIGN0eC5yZXNldFRyYW5zZm9ybSgpO1xuICAgICAgICAgIGN0eC5saW5lV2lkdGggPSBNYXRoLnJvdW5kKHRoaXMuX2NvbWJpbmVkU2NhbGVGYWN0b3IpO1xuICAgICAgICAgIGN0eC5zdHJva2VUZXh0KGNoYXJhY3RlciwgMCwgMCk7XG4gICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdHguc3Ryb2tlVGV4dChjaGFyYWN0ZXIsIHgsIHkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzQWRkVG9QYXRoU2V0KSB7XG4gICAgICBjb25zdCBwYXRocyA9IHRoaXMucGVuZGluZ1RleHRQYXRocyB8fCAodGhpcy5wZW5kaW5nVGV4dFBhdGhzID0gW10pO1xuICAgICAgcGF0aHMucHVzaCh7XG4gICAgICAgIHRyYW5zZm9ybTogY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0sXG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIGZvbnRTaXplLFxuICAgICAgICBhZGRUb1BhdGhcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBjb250ZXh0OiBjdHhcbiAgICB9ID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoXCJpc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZFwiLCAxMCwgMTApO1xuICAgIGN0eC5zY2FsZSgxLjUsIDEpO1xuICAgIGN0eC5maWxsVGV4dChcIklcIiwgMCwgMTApO1xuICAgIGNvbnN0IGRhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIDEwLCAxMCkuZGF0YTtcbiAgICBsZXQgZW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgaSA9IDM7IGkgPCBkYXRhLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgICBpZiAoZGF0YVtpXSA+IDAgJiYgZGF0YVtpXSA8IDI1NSkge1xuICAgICAgICBlbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiaXNGb250U3VicGl4ZWxBQUVuYWJsZWRcIiwgZW5hYmxlZCk7XG4gIH1cblxuICBzaG93VGV4dChnbHlwaHMpIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICAgIGNvbnN0IGZvbnQgPSBjdXJyZW50LmZvbnQ7XG5cbiAgICBpZiAoZm9udC5pc1R5cGUzRm9udCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2hvd1R5cGUzVGV4dChnbHlwaHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGZvbnRTaXplID0gY3VycmVudC5mb250U2l6ZTtcblxuICAgIGlmIChmb250U2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICBjb25zdCBmb250U2l6ZVNjYWxlID0gY3VycmVudC5mb250U2l6ZVNjYWxlO1xuICAgIGNvbnN0IGNoYXJTcGFjaW5nID0gY3VycmVudC5jaGFyU3BhY2luZztcbiAgICBjb25zdCB3b3JkU3BhY2luZyA9IGN1cnJlbnQud29yZFNwYWNpbmc7XG4gICAgY29uc3QgZm9udERpcmVjdGlvbiA9IGN1cnJlbnQuZm9udERpcmVjdGlvbjtcbiAgICBjb25zdCB0ZXh0SFNjYWxlID0gY3VycmVudC50ZXh0SFNjYWxlICogZm9udERpcmVjdGlvbjtcbiAgICBjb25zdCBnbHlwaHNMZW5ndGggPSBnbHlwaHMubGVuZ3RoO1xuICAgIGNvbnN0IHZlcnRpY2FsID0gZm9udC52ZXJ0aWNhbDtcbiAgICBjb25zdCBzcGFjaW5nRGlyID0gdmVydGljYWwgPyAxIDogLTE7XG4gICAgY29uc3QgZGVmYXVsdFZNZXRyaWNzID0gZm9udC5kZWZhdWx0Vk1ldHJpY3M7XG4gICAgY29uc3Qgd2lkdGhBZHZhbmNlU2NhbGUgPSBmb250U2l6ZSAqIGN1cnJlbnQuZm9udE1hdHJpeFswXTtcbiAgICBjb25zdCBzaW1wbGVGaWxsVGV4dCA9IGN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTEwgJiYgIWZvbnQuZGlzYWJsZUZvbnRGYWNlICYmICFjdXJyZW50LnBhdHRlcm5GaWxsO1xuICAgIGN0eC5zYXZlKCk7XG4gICAgY3R4LnRyYW5zZm9ybS5hcHBseShjdHgsIGN1cnJlbnQudGV4dE1hdHJpeCk7XG4gICAgY3R4LnRyYW5zbGF0ZShjdXJyZW50LngsIGN1cnJlbnQueSArIGN1cnJlbnQudGV4dFJpc2UpO1xuXG4gICAgaWYgKGZvbnREaXJlY3Rpb24gPiAwKSB7XG4gICAgICBjdHguc2NhbGUodGV4dEhTY2FsZSwgLTEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdHguc2NhbGUodGV4dEhTY2FsZSwgMSk7XG4gICAgfVxuXG4gICAgbGV0IHBhdHRlcm5UcmFuc2Zvcm07XG5cbiAgICBpZiAoY3VycmVudC5wYXR0ZXJuRmlsbCkge1xuICAgICAgY3R4LnNhdmUoKTtcbiAgICAgIGNvbnN0IHBhdHRlcm4gPSBjdXJyZW50LmZpbGxDb2xvci5nZXRQYXR0ZXJuKGN0eCwgdGhpcywgY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlLCBfcGF0dGVybl9oZWxwZXIuUGF0aFR5cGUuRklMTCk7XG4gICAgICBwYXR0ZXJuVHJhbnNmb3JtID0gY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm07XG4gICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgY3R4LmZpbGxTdHlsZSA9IHBhdHRlcm47XG4gICAgfVxuXG4gICAgbGV0IGxpbmVXaWR0aCA9IGN1cnJlbnQubGluZVdpZHRoO1xuICAgIGxldCByZXNldExpbmVXaWR0aFRvT25lID0gZmFsc2U7XG4gICAgY29uc3Qgc2NhbGUgPSBjdXJyZW50LnRleHRNYXRyaXhTY2FsZTtcblxuICAgIGlmIChzY2FsZSA9PT0gMCB8fCBsaW5lV2lkdGggPT09IDApIHtcbiAgICAgIGNvbnN0IGZpbGxTdHJva2VNb2RlID0gY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSAmIF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFX01BU0s7XG5cbiAgICAgIGlmIChmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFIHx8IGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRSkge1xuICAgICAgICB0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID0gbnVsbDtcbiAgICAgICAgbGluZVdpZHRoID0gdGhpcy5nZXRTaW5nbGVQaXhlbFdpZHRoKCk7XG4gICAgICAgIHJlc2V0TGluZVdpZHRoVG9PbmUgPSBsaW5lV2lkdGggPCAwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsaW5lV2lkdGggLz0gc2NhbGU7XG4gICAgfVxuXG4gICAgaWYgKGZvbnRTaXplU2NhbGUgIT09IDEuMCkge1xuICAgICAgY3R4LnNjYWxlKGZvbnRTaXplU2NhbGUsIGZvbnRTaXplU2NhbGUpO1xuICAgICAgbGluZVdpZHRoIC89IGZvbnRTaXplU2NhbGU7XG4gICAgfVxuXG4gICAgY3R4LmxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcbiAgICBsZXQgeCA9IDAsXG4gICAgICAgIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgZ2x5cGhzTGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IGdseXBoID0gZ2x5cGhzW2ldO1xuXG4gICAgICBpZiAoKDAsIF91dGlsLmlzTnVtKShnbHlwaCkpIHtcbiAgICAgICAgeCArPSBzcGFjaW5nRGlyICogZ2x5cGggKiBmb250U2l6ZSAvIDEwMDA7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVzdG9yZU5lZWRlZCA9IGZhbHNlO1xuICAgICAgY29uc3Qgc3BhY2luZyA9IChnbHlwaC5pc1NwYWNlID8gd29yZFNwYWNpbmcgOiAwKSArIGNoYXJTcGFjaW5nO1xuICAgICAgY29uc3QgY2hhcmFjdGVyID0gZ2x5cGguZm9udENoYXI7XG4gICAgICBjb25zdCBhY2NlbnQgPSBnbHlwaC5hY2NlbnQ7XG4gICAgICBsZXQgc2NhbGVkWCwgc2NhbGVkWTtcbiAgICAgIGxldCB3aWR0aCA9IGdseXBoLndpZHRoO1xuXG4gICAgICBpZiAodmVydGljYWwpIHtcbiAgICAgICAgY29uc3Qgdm1ldHJpYyA9IGdseXBoLnZtZXRyaWMgfHwgZGVmYXVsdFZNZXRyaWNzO1xuICAgICAgICBjb25zdCB2eCA9IC0oZ2x5cGgudm1ldHJpYyA/IHZtZXRyaWNbMV0gOiB3aWR0aCAqIDAuNSkgKiB3aWR0aEFkdmFuY2VTY2FsZTtcbiAgICAgICAgY29uc3QgdnkgPSB2bWV0cmljWzJdICogd2lkdGhBZHZhbmNlU2NhbGU7XG4gICAgICAgIHdpZHRoID0gdm1ldHJpYyA/IC12bWV0cmljWzBdIDogd2lkdGg7XG4gICAgICAgIHNjYWxlZFggPSB2eCAvIGZvbnRTaXplU2NhbGU7XG4gICAgICAgIHNjYWxlZFkgPSAoeCArIHZ5KSAvIGZvbnRTaXplU2NhbGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2FsZWRYID0geCAvIGZvbnRTaXplU2NhbGU7XG4gICAgICAgIHNjYWxlZFkgPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9udC5yZW1lYXN1cmUgJiYgd2lkdGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG1lYXN1cmVkV2lkdGggPSBjdHgubWVhc3VyZVRleHQoY2hhcmFjdGVyKS53aWR0aCAqIDEwMDAgLyBmb250U2l6ZSAqIGZvbnRTaXplU2NhbGU7XG5cbiAgICAgICAgaWYgKHdpZHRoIDwgbWVhc3VyZWRXaWR0aCAmJiB0aGlzLmlzRm9udFN1YnBpeGVsQUFFbmFibGVkKSB7XG4gICAgICAgICAgY29uc3QgY2hhcmFjdGVyU2NhbGVYID0gd2lkdGggLyBtZWFzdXJlZFdpZHRoO1xuICAgICAgICAgIHJlc3RvcmVOZWVkZWQgPSB0cnVlO1xuICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgY3R4LnNjYWxlKGNoYXJhY3RlclNjYWxlWCwgMSk7XG4gICAgICAgICAgc2NhbGVkWCAvPSBjaGFyYWN0ZXJTY2FsZVg7XG4gICAgICAgIH0gZWxzZSBpZiAod2lkdGggIT09IG1lYXN1cmVkV2lkdGgpIHtcbiAgICAgICAgICBzY2FsZWRYICs9ICh3aWR0aCAtIG1lYXN1cmVkV2lkdGgpIC8gMjAwMCAqIGZvbnRTaXplIC8gZm9udFNpemVTY2FsZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jb250ZW50VmlzaWJsZSAmJiAoZ2x5cGguaXNJbkZvbnQgfHwgZm9udC5taXNzaW5nRmlsZSkpIHtcbiAgICAgICAgaWYgKHNpbXBsZUZpbGxUZXh0ICYmICFhY2NlbnQpIHtcbiAgICAgICAgICBjdHguZmlsbFRleHQoY2hhcmFjdGVyLCBzY2FsZWRYLCBzY2FsZWRZKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnBhaW50Q2hhcihjaGFyYWN0ZXIsIHNjYWxlZFgsIHNjYWxlZFksIHBhdHRlcm5UcmFuc2Zvcm0sIHJlc2V0TGluZVdpZHRoVG9PbmUpO1xuXG4gICAgICAgICAgaWYgKGFjY2VudCkge1xuICAgICAgICAgICAgY29uc3Qgc2NhbGVkQWNjZW50WCA9IHNjYWxlZFggKyBmb250U2l6ZSAqIGFjY2VudC5vZmZzZXQueCAvIGZvbnRTaXplU2NhbGU7XG4gICAgICAgICAgICBjb25zdCBzY2FsZWRBY2NlbnRZID0gc2NhbGVkWSAtIGZvbnRTaXplICogYWNjZW50Lm9mZnNldC55IC8gZm9udFNpemVTY2FsZTtcbiAgICAgICAgICAgIHRoaXMucGFpbnRDaGFyKGFjY2VudC5mb250Q2hhciwgc2NhbGVkQWNjZW50WCwgc2NhbGVkQWNjZW50WSwgcGF0dGVyblRyYW5zZm9ybSwgcmVzZXRMaW5lV2lkdGhUb09uZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCBjaGFyV2lkdGg7XG5cbiAgICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgICBjaGFyV2lkdGggPSB3aWR0aCAqIHdpZHRoQWR2YW5jZVNjYWxlIC0gc3BhY2luZyAqIGZvbnREaXJlY3Rpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGFyV2lkdGggPSB3aWR0aCAqIHdpZHRoQWR2YW5jZVNjYWxlICsgc3BhY2luZyAqIGZvbnREaXJlY3Rpb247XG4gICAgICB9XG5cbiAgICAgIHggKz0gY2hhcldpZHRoO1xuXG4gICAgICBpZiAocmVzdG9yZU5lZWRlZCkge1xuICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgY3VycmVudC55IC09IHg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnQueCArPSB4ICogdGV4dEhTY2FsZTtcbiAgICB9XG5cbiAgICBjdHgucmVzdG9yZSgpO1xuICAgIHRoaXMuY29tcG9zZSgpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBzaG93VHlwZTNUZXh0KGdseXBocykge1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgY29uc3QgZm9udCA9IGN1cnJlbnQuZm9udDtcbiAgICBjb25zdCBmb250U2l6ZSA9IGN1cnJlbnQuZm9udFNpemU7XG4gICAgY29uc3QgZm9udERpcmVjdGlvbiA9IGN1cnJlbnQuZm9udERpcmVjdGlvbjtcbiAgICBjb25zdCBzcGFjaW5nRGlyID0gZm9udC52ZXJ0aWNhbCA/IDEgOiAtMTtcbiAgICBjb25zdCBjaGFyU3BhY2luZyA9IGN1cnJlbnQuY2hhclNwYWNpbmc7XG4gICAgY29uc3Qgd29yZFNwYWNpbmcgPSBjdXJyZW50LndvcmRTcGFjaW5nO1xuICAgIGNvbnN0IHRleHRIU2NhbGUgPSBjdXJyZW50LnRleHRIU2NhbGUgKiBmb250RGlyZWN0aW9uO1xuICAgIGNvbnN0IGZvbnRNYXRyaXggPSBjdXJyZW50LmZvbnRNYXRyaXggfHwgX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG4gICAgY29uc3QgZ2x5cGhzTGVuZ3RoID0gZ2x5cGhzLmxlbmd0aDtcbiAgICBjb25zdCBpc1RleHRJbnZpc2libGUgPSBjdXJyZW50LnRleHRSZW5kZXJpbmdNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5JTlZJU0lCTEU7XG4gICAgbGV0IGksIGdseXBoLCB3aWR0aCwgc3BhY2luZ0xlbmd0aDtcblxuICAgIGlmIChpc1RleHRJbnZpc2libGUgfHwgZm9udFNpemUgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID0gbnVsbDtcbiAgICBjdHguc2F2ZSgpO1xuICAgIGN0eC50cmFuc2Zvcm0uYXBwbHkoY3R4LCBjdXJyZW50LnRleHRNYXRyaXgpO1xuICAgIGN0eC50cmFuc2xhdGUoY3VycmVudC54LCBjdXJyZW50LnkpO1xuICAgIGN0eC5zY2FsZSh0ZXh0SFNjYWxlLCBmb250RGlyZWN0aW9uKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBnbHlwaHNMZW5ndGg7ICsraSkge1xuICAgICAgZ2x5cGggPSBnbHlwaHNbaV07XG5cbiAgICAgIGlmICgoMCwgX3V0aWwuaXNOdW0pKGdseXBoKSkge1xuICAgICAgICBzcGFjaW5nTGVuZ3RoID0gc3BhY2luZ0RpciAqIGdseXBoICogZm9udFNpemUgLyAxMDAwO1xuICAgICAgICB0aGlzLmN0eC50cmFuc2xhdGUoc3BhY2luZ0xlbmd0aCwgMCk7XG4gICAgICAgIGN1cnJlbnQueCArPSBzcGFjaW5nTGVuZ3RoICogdGV4dEhTY2FsZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNwYWNpbmcgPSAoZ2x5cGguaXNTcGFjZSA/IHdvcmRTcGFjaW5nIDogMCkgKyBjaGFyU3BhY2luZztcbiAgICAgIGNvbnN0IG9wZXJhdG9yTGlzdCA9IGZvbnQuY2hhclByb2NPcGVyYXRvckxpc3RbZ2x5cGgub3BlcmF0b3JMaXN0SWRdO1xuXG4gICAgICBpZiAoIW9wZXJhdG9yTGlzdCkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYFR5cGUzIGNoYXJhY3RlciBcIiR7Z2x5cGgub3BlcmF0b3JMaXN0SWR9XCIgaXMgbm90IGF2YWlsYWJsZS5gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbnRlbnRWaXNpYmxlKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc2luZ1R5cGUzID0gZ2x5cGg7XG4gICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICBjdHguc2NhbGUoZm9udFNpemUsIGZvbnRTaXplKTtcbiAgICAgICAgY3R4LnRyYW5zZm9ybS5hcHBseShjdHgsIGZvbnRNYXRyaXgpO1xuICAgICAgICB0aGlzLmV4ZWN1dGVPcGVyYXRvckxpc3Qob3BlcmF0b3JMaXN0KTtcbiAgICAgICAgdGhpcy5yZXN0b3JlKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVkID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbZ2x5cGgud2lkdGgsIDBdLCBmb250TWF0cml4KTtcblxuICAgICAgd2lkdGggPSB0cmFuc2Zvcm1lZFswXSAqIGZvbnRTaXplICsgc3BhY2luZztcbiAgICAgIGN0eC50cmFuc2xhdGUod2lkdGgsIDApO1xuICAgICAgY3VycmVudC54ICs9IHdpZHRoICogdGV4dEhTY2FsZTtcbiAgICB9XG5cbiAgICBjdHgucmVzdG9yZSgpO1xuICAgIHRoaXMucHJvY2Vzc2luZ1R5cGUzID0gbnVsbDtcbiAgfVxuXG4gIHNldENoYXJXaWR0aCh4V2lkdGgsIHlXaWR0aCkge31cblxuICBzZXRDaGFyV2lkdGhBbmRCb3VuZHMoeFdpZHRoLCB5V2lkdGgsIGxseCwgbGx5LCB1cngsIHVyeSkge1xuICAgIHRoaXMuY3R4LnJlY3QobGx4LCBsbHksIHVyeCAtIGxseCwgdXJ5IC0gbGx5KTtcbiAgICB0aGlzLmNsaXAoKTtcbiAgICB0aGlzLmVuZFBhdGgoKTtcbiAgfVxuXG4gIGdldENvbG9yTl9QYXR0ZXJuKElSKSB7XG4gICAgbGV0IHBhdHRlcm47XG5cbiAgICBpZiAoSVJbMF0gPT09IFwiVGlsaW5nUGF0dGVyblwiKSB7XG4gICAgICBjb25zdCBjb2xvciA9IElSWzFdO1xuICAgICAgY29uc3QgYmFzZVRyYW5zZm9ybSA9IHRoaXMuYmFzZVRyYW5zZm9ybSB8fCB0aGlzLmN0eC5tb3pDdXJyZW50VHJhbnNmb3JtLnNsaWNlKCk7XG4gICAgICBjb25zdCBjYW52YXNHcmFwaGljc0ZhY3RvcnkgPSB7XG4gICAgICAgIGNyZWF0ZUNhbnZhc0dyYXBoaWNzOiBjdHggPT4ge1xuICAgICAgICAgIHJldHVybiBuZXcgQ2FudmFzR3JhcGhpY3MoY3R4LCB0aGlzLmNvbW1vbk9ianMsIHRoaXMub2JqcywgdGhpcy5jYW52YXNGYWN0b3J5KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHBhdHRlcm4gPSBuZXcgX3BhdHRlcm5faGVscGVyLlRpbGluZ1BhdHRlcm4oSVIsIGNvbG9yLCB0aGlzLmN0eCwgY2FudmFzR3JhcGhpY3NGYWN0b3J5LCBiYXNlVHJhbnNmb3JtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0dGVybiA9IHRoaXMuX2dldFBhdHRlcm4oSVJbMV0sIElSWzJdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGF0dGVybjtcbiAgfVxuXG4gIHNldFN0cm9rZUNvbG9yTigpIHtcbiAgICB0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3IgPSB0aGlzLmdldENvbG9yTl9QYXR0ZXJuKGFyZ3VtZW50cyk7XG4gIH1cblxuICBzZXRGaWxsQ29sb3JOKCkge1xuICAgIHRoaXMuY3VycmVudC5maWxsQ29sb3IgPSB0aGlzLmdldENvbG9yTl9QYXR0ZXJuKGFyZ3VtZW50cyk7XG4gICAgdGhpcy5jdXJyZW50LnBhdHRlcm5GaWxsID0gdHJ1ZTtcbiAgfVxuXG4gIHNldFN0cm9rZVJHQkNvbG9yKHIsIGcsIGIpIHtcbiAgICBjb25zdCBjb2xvciA9IF91dGlsLlV0aWwubWFrZUhleENvbG9yKHIsIGcsIGIpO1xuXG4gICAgdGhpcy5jdHguc3Ryb2tlU3R5bGUgPSBjb2xvcjtcbiAgICB0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3IgPSBjb2xvcjtcbiAgfVxuXG4gIHNldEZpbGxSR0JDb2xvcihyLCBnLCBiKSB7XG4gICAgY29uc3QgY29sb3IgPSBfdXRpbC5VdGlsLm1ha2VIZXhDb2xvcihyLCBnLCBiKTtcblxuICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IGNvbG9yO1xuICAgIHRoaXMuY3VycmVudC5maWxsQ29sb3IgPSBjb2xvcjtcbiAgICB0aGlzLmN1cnJlbnQucGF0dGVybkZpbGwgPSBmYWxzZTtcbiAgfVxuXG4gIF9nZXRQYXR0ZXJuKG9iaklkLCBtYXRyaXggPSBudWxsKSB7XG4gICAgbGV0IHBhdHRlcm47XG5cbiAgICBpZiAodGhpcy5jYWNoZWRQYXR0ZXJucy5oYXMob2JqSWQpKSB7XG4gICAgICBwYXR0ZXJuID0gdGhpcy5jYWNoZWRQYXR0ZXJucy5nZXQob2JqSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXR0ZXJuID0gKDAsIF9wYXR0ZXJuX2hlbHBlci5nZXRTaGFkaW5nUGF0dGVybikodGhpcy5vYmpzLmdldChvYmpJZCkpO1xuICAgICAgdGhpcy5jYWNoZWRQYXR0ZXJucy5zZXQob2JqSWQsIHBhdHRlcm4pO1xuICAgIH1cblxuICAgIGlmIChtYXRyaXgpIHtcbiAgICAgIHBhdHRlcm4ubWF0cml4ID0gbWF0cml4O1xuICAgIH1cblxuICAgIHJldHVybiBwYXR0ZXJuO1xuICB9XG5cbiAgc2hhZGluZ0ZpbGwob2JqSWQpIHtcbiAgICBpZiAoIXRoaXMuY29udGVudFZpc2libGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICB0aGlzLnNhdmUoKTtcblxuICAgIGNvbnN0IHBhdHRlcm4gPSB0aGlzLl9nZXRQYXR0ZXJuKG9iaklkKTtcblxuICAgIGN0eC5maWxsU3R5bGUgPSBwYXR0ZXJuLmdldFBhdHRlcm4oY3R4LCB0aGlzLCBjdHgubW96Q3VycmVudFRyYW5zZm9ybUludmVyc2UsIF9wYXR0ZXJuX2hlbHBlci5QYXRoVHlwZS5TSEFESU5HKTtcbiAgICBjb25zdCBpbnYgPSBjdHgubW96Q3VycmVudFRyYW5zZm9ybUludmVyc2U7XG5cbiAgICBpZiAoaW52KSB7XG4gICAgICBjb25zdCBjYW52YXMgPSBjdHguY2FudmFzO1xuICAgICAgY29uc3Qgd2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgICBjb25zdCBoZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gICAgICBjb25zdCBibCA9IF91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsIDBdLCBpbnYpO1xuXG4gICAgICBjb25zdCBiciA9IF91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsIGhlaWdodF0sIGludik7XG5cbiAgICAgIGNvbnN0IHVsID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbd2lkdGgsIDBdLCBpbnYpO1xuXG4gICAgICBjb25zdCB1ciA9IF91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3dpZHRoLCBoZWlnaHRdLCBpbnYpO1xuXG4gICAgICBjb25zdCB4MCA9IE1hdGgubWluKGJsWzBdLCBiclswXSwgdWxbMF0sIHVyWzBdKTtcbiAgICAgIGNvbnN0IHkwID0gTWF0aC5taW4oYmxbMV0sIGJyWzFdLCB1bFsxXSwgdXJbMV0pO1xuICAgICAgY29uc3QgeDEgPSBNYXRoLm1heChibFswXSwgYnJbMF0sIHVsWzBdLCB1clswXSk7XG4gICAgICBjb25zdCB5MSA9IE1hdGgubWF4KGJsWzFdLCBiclsxXSwgdWxbMV0sIHVyWzFdKTtcbiAgICAgIHRoaXMuY3R4LmZpbGxSZWN0KHgwLCB5MCwgeDEgLSB4MCwgeTEgLSB5MCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3R4LmZpbGxSZWN0KC0xZTEwLCAtMWUxMCwgMmUxMCwgMmUxMCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wb3NlKHRoaXMuY3VycmVudC5nZXRDbGlwcGVkUGF0aEJvdW5kaW5nQm94KCkpO1xuICAgIHRoaXMucmVzdG9yZSgpO1xuICB9XG5cbiAgYmVnaW5JbmxpbmVJbWFnZSgpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiU2hvdWxkIG5vdCBjYWxsIGJlZ2luSW5saW5lSW1hZ2VcIik7XG4gIH1cblxuICBiZWdpbkltYWdlRGF0YSgpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiU2hvdWxkIG5vdCBjYWxsIGJlZ2luSW1hZ2VEYXRhXCIpO1xuICB9XG5cbiAgcGFpbnRGb3JtWE9iamVjdEJlZ2luKG1hdHJpeCwgYmJveCkge1xuICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2F2ZSgpO1xuICAgIHRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrLnB1c2godGhpcy5iYXNlVHJhbnNmb3JtKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KG1hdHJpeCkgJiYgbWF0cml4Lmxlbmd0aCA9PT0gNikge1xuICAgICAgdGhpcy50cmFuc2Zvcm0uYXBwbHkodGhpcywgbWF0cml4KTtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUcmFuc2Zvcm0gPSB0aGlzLmN0eC5tb3pDdXJyZW50VHJhbnNmb3JtO1xuXG4gICAgaWYgKGJib3gpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gYmJveFsyXSAtIGJib3hbMF07XG4gICAgICBjb25zdCBoZWlnaHQgPSBiYm94WzNdIC0gYmJveFsxXTtcbiAgICAgIHRoaXMuY3R4LnJlY3QoYmJveFswXSwgYmJveFsxXSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICB0aGlzLmN1cnJlbnQudXBkYXRlUGF0aE1pbk1heCh0aGlzLmN0eC5tb3pDdXJyZW50VHJhbnNmb3JtLCBiYm94WzBdLCBiYm94WzFdKTtcbiAgICAgIHRoaXMuY3VycmVudC51cGRhdGVQYXRoTWluTWF4KHRoaXMuY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0sIGJib3hbMl0sIGJib3hbM10pO1xuICAgICAgdGhpcy5jbGlwKCk7XG4gICAgICB0aGlzLmVuZFBhdGgoKTtcbiAgICB9XG4gIH1cblxuICBwYWludEZvcm1YT2JqZWN0RW5kKCkge1xuICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVzdG9yZSgpO1xuICAgIHRoaXMuYmFzZVRyYW5zZm9ybSA9IHRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrLnBvcCgpO1xuICB9XG5cbiAgYmVnaW5Hcm91cChncm91cCkge1xuICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2F2ZSgpO1xuICAgIGNvbnN0IHN1c3BlbmRlZEN0eCA9IHRoaXMuc3VzcGVuZGVkQ3R4O1xuXG4gICAgaWYgKHRoaXMuY3VycmVudC5hY3RpdmVTTWFzaykge1xuICAgICAgdGhpcy5zdXNwZW5kZWRDdHggPSBudWxsO1xuICAgICAgdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50Q3R4ID0gdGhpcy5jdHg7XG5cbiAgICBpZiAoIWdyb3VwLmlzb2xhdGVkKSB7XG4gICAgICAoMCwgX3V0aWwuaW5mbykoXCJUT0RPOiBTdXBwb3J0IG5vbi1pc29sYXRlZCBncm91cHMuXCIpO1xuICAgIH1cblxuICAgIGlmIChncm91cC5rbm9ja291dCkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiS25vY2tvdXQgZ3JvdXBzIG5vdCBzdXBwb3J0ZWQuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRUcmFuc2Zvcm0gPSBjdXJyZW50Q3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm07XG5cbiAgICBpZiAoZ3JvdXAubWF0cml4KSB7XG4gICAgICBjdXJyZW50Q3R4LnRyYW5zZm9ybS5hcHBseShjdXJyZW50Q3R4LCBncm91cC5tYXRyaXgpO1xuICAgIH1cblxuICAgIGlmICghZ3JvdXAuYmJveCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQm91bmRpbmcgYm94IGlzIHJlcXVpcmVkLlwiKTtcbiAgICB9XG5cbiAgICBsZXQgYm91bmRzID0gX3V0aWwuVXRpbC5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveChncm91cC5iYm94LCBjdXJyZW50Q3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0pO1xuXG4gICAgY29uc3QgY2FudmFzQm91bmRzID0gWzAsIDAsIGN1cnJlbnRDdHguY2FudmFzLndpZHRoLCBjdXJyZW50Q3R4LmNhbnZhcy5oZWlnaHRdO1xuICAgIGJvdW5kcyA9IF91dGlsLlV0aWwuaW50ZXJzZWN0KGJvdW5kcywgY2FudmFzQm91bmRzKSB8fCBbMCwgMCwgMCwgMF07XG4gICAgY29uc3Qgb2Zmc2V0WCA9IE1hdGguZmxvb3IoYm91bmRzWzBdKTtcbiAgICBjb25zdCBvZmZzZXRZID0gTWF0aC5mbG9vcihib3VuZHNbMV0pO1xuICAgIGxldCBkcmF3bldpZHRoID0gTWF0aC5tYXgoTWF0aC5jZWlsKGJvdW5kc1syXSkgLSBvZmZzZXRYLCAxKTtcbiAgICBsZXQgZHJhd25IZWlnaHQgPSBNYXRoLm1heChNYXRoLmNlaWwoYm91bmRzWzNdKSAtIG9mZnNldFksIDEpO1xuICAgIGxldCBzY2FsZVggPSAxLFxuICAgICAgICBzY2FsZVkgPSAxO1xuXG4gICAgaWYgKGRyYXduV2lkdGggPiBNQVhfR1JPVVBfU0laRSkge1xuICAgICAgc2NhbGVYID0gZHJhd25XaWR0aCAvIE1BWF9HUk9VUF9TSVpFO1xuICAgICAgZHJhd25XaWR0aCA9IE1BWF9HUk9VUF9TSVpFO1xuICAgIH1cblxuICAgIGlmIChkcmF3bkhlaWdodCA+IE1BWF9HUk9VUF9TSVpFKSB7XG4gICAgICBzY2FsZVkgPSBkcmF3bkhlaWdodCAvIE1BWF9HUk9VUF9TSVpFO1xuICAgICAgZHJhd25IZWlnaHQgPSBNQVhfR1JPVVBfU0laRTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnQuc3RhcnROZXdQYXRoQW5kQ2xpcEJveChbMCwgMCwgZHJhd25XaWR0aCwgZHJhd25IZWlnaHRdKTtcbiAgICBsZXQgY2FjaGVJZCA9IFwiZ3JvdXBBdFwiICsgdGhpcy5ncm91cExldmVsO1xuXG4gICAgaWYgKGdyb3VwLnNtYXNrKSB7XG4gICAgICBjYWNoZUlkICs9IFwiX3NtYXNrX1wiICsgdGhpcy5zbWFza0NvdW50ZXIrKyAlIDI7XG4gICAgfVxuXG4gICAgY29uc3Qgc2NyYXRjaENhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKGNhY2hlSWQsIGRyYXduV2lkdGgsIGRyYXduSGVpZ2h0LCB0cnVlKTtcbiAgICBjb25zdCBncm91cEN0eCA9IHNjcmF0Y2hDYW52YXMuY29udGV4dDtcbiAgICBncm91cEN0eC5zY2FsZSgxIC8gc2NhbGVYLCAxIC8gc2NhbGVZKTtcbiAgICBncm91cEN0eC50cmFuc2xhdGUoLW9mZnNldFgsIC1vZmZzZXRZKTtcbiAgICBncm91cEN0eC50cmFuc2Zvcm0uYXBwbHkoZ3JvdXBDdHgsIGN1cnJlbnRUcmFuc2Zvcm0pO1xuXG4gICAgaWYgKGdyb3VwLnNtYXNrKSB7XG4gICAgICB0aGlzLnNtYXNrU3RhY2sucHVzaCh7XG4gICAgICAgIGNhbnZhczogc2NyYXRjaENhbnZhcy5jYW52YXMsXG4gICAgICAgIGNvbnRleHQ6IGdyb3VwQ3R4LFxuICAgICAgICBvZmZzZXRYLFxuICAgICAgICBvZmZzZXRZLFxuICAgICAgICBzY2FsZVgsXG4gICAgICAgIHNjYWxlWSxcbiAgICAgICAgc3VidHlwZTogZ3JvdXAuc21hc2suc3VidHlwZSxcbiAgICAgICAgYmFja2Ryb3A6IGdyb3VwLnNtYXNrLmJhY2tkcm9wLFxuICAgICAgICB0cmFuc2Zlck1hcDogZ3JvdXAuc21hc2sudHJhbnNmZXJNYXAgfHwgbnVsbCxcbiAgICAgICAgc3RhcnRUcmFuc2Zvcm1JbnZlcnNlOiBudWxsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudEN0eC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG4gICAgICBjdXJyZW50Q3R4LnRyYW5zbGF0ZShvZmZzZXRYLCBvZmZzZXRZKTtcbiAgICAgIGN1cnJlbnRDdHguc2NhbGUoc2NhbGVYLCBzY2FsZVkpO1xuICAgICAgY3VycmVudEN0eC5zYXZlKCk7XG4gICAgfVxuXG4gICAgY29weUN0eFN0YXRlKGN1cnJlbnRDdHgsIGdyb3VwQ3R4KTtcbiAgICB0aGlzLmN0eCA9IGdyb3VwQ3R4O1xuICAgIHRoaXMuc2V0R1N0YXRlKFtbXCJCTVwiLCBcInNvdXJjZS1vdmVyXCJdLCBbXCJjYVwiLCAxXSwgW1wiQ0FcIiwgMV1dKTtcbiAgICB0aGlzLmdyb3VwU3RhY2sucHVzaCh7XG4gICAgICBjdHg6IGN1cnJlbnRDdHgsXG4gICAgICBzdXNwZW5kZWRDdHhcbiAgICB9KTtcbiAgICB0aGlzLmdyb3VwTGV2ZWwrKztcbiAgfVxuXG4gIGVuZEdyb3VwKGdyb3VwKSB7XG4gICAgaWYgKCF0aGlzLmNvbnRlbnRWaXNpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5ncm91cExldmVsLS07XG4gICAgY29uc3QgZ3JvdXBDdHggPSB0aGlzLmN0eDtcbiAgICBjb25zdCB7XG4gICAgICBjdHgsXG4gICAgICBzdXNwZW5kZWRDdHhcbiAgICB9ID0gdGhpcy5ncm91cFN0YWNrLnBvcCgpO1xuICAgIHRoaXMuY3R4ID0gY3R4O1xuICAgIHRoaXMuY3R4LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgaWYgKHN1c3BlbmRlZEN0eCkge1xuICAgICAgdGhpcy5zdXNwZW5kZWRDdHggPSBzdXNwZW5kZWRDdHg7XG4gICAgfVxuXG4gICAgaWYgKGdyb3VwLnNtYXNrKSB7XG4gICAgICB0aGlzLnRlbXBTTWFzayA9IHRoaXMuc21hc2tTdGFjay5wb3AoKTtcbiAgICAgIHRoaXMucmVzdG9yZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgICBjb25zdCBjdXJyZW50TXR4ID0gdGhpcy5jdHgubW96Q3VycmVudFRyYW5zZm9ybTtcbiAgICAgIHRoaXMucmVzdG9yZSgpO1xuICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgdGhpcy5jdHguc2V0VHJhbnNmb3JtLmFwcGx5KHRoaXMuY3R4LCBjdXJyZW50TXR4KTtcblxuICAgICAgY29uc3QgZGlydHlCb3ggPSBfdXRpbC5VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KFswLCAwLCBncm91cEN0eC5jYW52YXMud2lkdGgsIGdyb3VwQ3R4LmNhbnZhcy5oZWlnaHRdLCBjdXJyZW50TXR4KTtcblxuICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKGdyb3VwQ3R4LmNhbnZhcywgMCwgMCk7XG4gICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgICB0aGlzLmNvbXBvc2UoZGlydHlCb3gpO1xuICAgIH1cbiAgfVxuXG4gIGJlZ2luQW5ub3RhdGlvbnMoKSB7XG4gICAgdGhpcy5zYXZlKCk7XG5cbiAgICBpZiAodGhpcy5iYXNlVHJhbnNmb3JtKSB7XG4gICAgICB0aGlzLmN0eC5zZXRUcmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsIHRoaXMuYmFzZVRyYW5zZm9ybSk7XG4gICAgfVxuICB9XG5cbiAgZW5kQW5ub3RhdGlvbnMoKSB7XG4gICAgdGhpcy5yZXN0b3JlKCk7XG4gIH1cblxuICBiZWdpbkFubm90YXRpb24oaWQsIHJlY3QsIHRyYW5zZm9ybSwgbWF0cml4LCBoYXNPd25DYW52YXMpIHtcbiAgICB0aGlzLnNhdmUoKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlY3QpICYmIHJlY3QubGVuZ3RoID09PSA0KSB7XG4gICAgICBjb25zdCB3aWR0aCA9IHJlY3RbMl0gLSByZWN0WzBdO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gcmVjdFszXSAtIHJlY3RbMV07XG5cbiAgICAgIGlmIChoYXNPd25DYW52YXMgJiYgdGhpcy5hbm5vdGF0aW9uQ2FudmFzTWFwKSB7XG4gICAgICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybS5zbGljZSgpO1xuICAgICAgICB0cmFuc2Zvcm1bNF0gLT0gcmVjdFswXTtcbiAgICAgICAgdHJhbnNmb3JtWzVdIC09IHJlY3RbMV07XG4gICAgICAgIHJlY3QgPSByZWN0LnNsaWNlKCk7XG4gICAgICAgIHJlY3RbMF0gPSByZWN0WzFdID0gMDtcbiAgICAgICAgcmVjdFsyXSA9IHdpZHRoO1xuICAgICAgICByZWN0WzNdID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnN0IFtzY2FsZVgsIHNjYWxlWV0gPSBfdXRpbC5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKHRoaXMuY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0pO1xuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICB2aWV3cG9ydFNjYWxlXG4gICAgICAgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBjYW52YXNXaWR0aCA9IE1hdGguY2VpbCh3aWR0aCAqIHRoaXMub3V0cHV0U2NhbGVYICogdmlld3BvcnRTY2FsZSk7XG4gICAgICAgIGNvbnN0IGNhbnZhc0hlaWdodCA9IE1hdGguY2VpbChoZWlnaHQgKiB0aGlzLm91dHB1dFNjYWxlWSAqIHZpZXdwb3J0U2NhbGUpO1xuICAgICAgICB0aGlzLmFubm90YXRpb25DYW52YXMgPSB0aGlzLmNhbnZhc0ZhY3RvcnkuY3JlYXRlKGNhbnZhc1dpZHRoLCBjYW52YXNIZWlnaHQpO1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgY2FudmFzLFxuICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgfSA9IHRoaXMuYW5ub3RhdGlvbkNhbnZhcztcbiAgICAgICAgY2FudmFzLnN0eWxlLndpZHRoID0gYGNhbGMoJHt3aWR0aH1weCAqIHZhcigtLXZpZXdwb3J0LXNjYWxlLWZhY3RvcikpYDtcbiAgICAgICAgY2FudmFzLnN0eWxlLmhlaWdodCA9IGBjYWxjKCR7aGVpZ2h0fXB4ICogdmFyKC0tdmlld3BvcnQtc2NhbGUtZmFjdG9yKSlgO1xuICAgICAgICB0aGlzLmFubm90YXRpb25DYW52YXNNYXAuc2V0KGlkLCBjYW52YXMpO1xuICAgICAgICB0aGlzLmFubm90YXRpb25DYW52YXMuc2F2ZWRDdHggPSB0aGlzLmN0eDtcbiAgICAgICAgdGhpcy5jdHggPSBjb250ZXh0O1xuICAgICAgICB0aGlzLmN0eC5zZXRUcmFuc2Zvcm0oc2NhbGVYLCAwLCAwLCAtc2NhbGVZLCAwLCBoZWlnaHQgKiBzY2FsZVkpO1xuICAgICAgICBhZGRDb250ZXh0Q3VycmVudFRyYW5zZm9ybSh0aGlzLmN0eCk7XG4gICAgICAgIHJlc2V0Q3R4VG9EZWZhdWx0KHRoaXMuY3R4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0Q3R4VG9EZWZhdWx0KHRoaXMuY3R4KTtcbiAgICAgICAgdGhpcy5jdHgucmVjdChyZWN0WzBdLCByZWN0WzFdLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5jbGlwKCk7XG4gICAgICAgIHRoaXMuZW5kUGF0aCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY3VycmVudCA9IG5ldyBDYW52YXNFeHRyYVN0YXRlKHRoaXMuY3R4LmNhbnZhcy53aWR0aCwgdGhpcy5jdHguY2FudmFzLmhlaWdodCk7XG4gICAgdGhpcy50cmFuc2Zvcm0uYXBwbHkodGhpcywgdHJhbnNmb3JtKTtcbiAgICB0aGlzLnRyYW5zZm9ybS5hcHBseSh0aGlzLCBtYXRyaXgpO1xuICB9XG5cbiAgZW5kQW5ub3RhdGlvbigpIHtcbiAgICBpZiAodGhpcy5hbm5vdGF0aW9uQ2FudmFzKSB7XG4gICAgICB0aGlzLmN0eCA9IHRoaXMuYW5ub3RhdGlvbkNhbnZhcy5zYXZlZEN0eDtcbiAgICAgIGRlbGV0ZSB0aGlzLmFubm90YXRpb25DYW52YXMuc2F2ZWRDdHg7XG4gICAgICBkZWxldGUgdGhpcy5hbm5vdGF0aW9uQ2FudmFzO1xuICAgIH1cblxuICAgIHRoaXMucmVzdG9yZSgpO1xuICB9XG5cbiAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0KGltZykge1xuICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuICAgIGNvbnN0IHdpZHRoID0gaW1nLndpZHRoLFxuICAgICAgICAgIGhlaWdodCA9IGltZy5oZWlnaHQ7XG4gICAgY29uc3QgZ2x5cGggPSB0aGlzLnByb2Nlc3NpbmdUeXBlMztcblxuICAgIGlmIChDT01QSUxFX1RZUEUzX0dMWVBIUyAmJiBnbHlwaCAmJiBnbHlwaC5jb21waWxlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAod2lkdGggPD0gTUFYX1NJWkVfVE9fQ09NUElMRSAmJiBoZWlnaHQgPD0gTUFYX1NJWkVfVE9fQ09NUElMRSkge1xuICAgICAgICBnbHlwaC5jb21waWxlZCA9IGNvbXBpbGVUeXBlM0dseXBoKHtcbiAgICAgICAgICBkYXRhOiBpbWcuZGF0YSxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHRcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnbHlwaC5jb21waWxlZCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdseXBoPy5jb21waWxlZCkge1xuICAgICAgZ2x5cGguY29tcGlsZWQoY3R4KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtYXNrID0gdGhpcy5fY3JlYXRlTWFza0NhbnZhcyhpbWcpO1xuXG4gICAgY29uc3QgbWFza0NhbnZhcyA9IG1hc2suY2FudmFzO1xuICAgIGN0eC5zYXZlKCk7XG4gICAgY3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICBjdHguZHJhd0ltYWdlKG1hc2tDYW52YXMsIG1hc2sub2Zmc2V0WCwgbWFzay5vZmZzZXRZKTtcbiAgICBjdHgucmVzdG9yZSgpO1xuICAgIHRoaXMuY29tcG9zZSgpO1xuICB9XG5cbiAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0KGltZ0RhdGEsIHNjYWxlWCwgc2tld1ggPSAwLCBza2V3WSA9IDAsIHNjYWxlWSwgcG9zaXRpb25zKSB7XG4gICAgaWYgKCF0aGlzLmNvbnRlbnRWaXNpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7XG4gICAgY3R4LnNhdmUoKTtcbiAgICBjb25zdCBjdXJyZW50VHJhbnNmb3JtID0gY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm07XG4gICAgY3R4LnRyYW5zZm9ybShzY2FsZVgsIHNrZXdYLCBza2V3WSwgc2NhbGVZLCAwLCAwKTtcblxuICAgIGNvbnN0IG1hc2sgPSB0aGlzLl9jcmVhdGVNYXNrQ2FudmFzKGltZ0RhdGEpO1xuXG4gICAgY3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHBvc2l0aW9ucy5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7XG4gICAgICBjb25zdCB0cmFucyA9IF91dGlsLlV0aWwudHJhbnNmb3JtKGN1cnJlbnRUcmFuc2Zvcm0sIFtzY2FsZVgsIHNrZXdYLCBza2V3WSwgc2NhbGVZLCBwb3NpdGlvbnNbaV0sIHBvc2l0aW9uc1tpICsgMV1dKTtcblxuICAgICAgY29uc3QgW3gsIHldID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbMCwgMF0sIHRyYW5zKTtcblxuICAgICAgY3R4LmRyYXdJbWFnZShtYXNrLmNhbnZhcywgeCwgeSk7XG4gICAgfVxuXG4gICAgY3R4LnJlc3RvcmUoKTtcbiAgICB0aGlzLmNvbXBvc2UoKTtcbiAgfVxuXG4gIHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwKGltYWdlcykge1xuICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuICAgIGNvbnN0IGZpbGxDb2xvciA9IHRoaXMuY3VycmVudC5maWxsQ29sb3I7XG4gICAgY29uc3QgaXNQYXR0ZXJuRmlsbCA9IHRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbDtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGltYWdlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBjb25zdCBpbWFnZSA9IGltYWdlc1tpXTtcbiAgICAgIGNvbnN0IHdpZHRoID0gaW1hZ2Uud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQgPSBpbWFnZS5oZWlnaHQ7XG4gICAgICBjb25zdCBtYXNrQ2FudmFzID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoXCJtYXNrQ2FudmFzXCIsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgY29uc3QgbWFza0N0eCA9IG1hc2tDYW52YXMuY29udGV4dDtcbiAgICAgIG1hc2tDdHguc2F2ZSgpO1xuICAgICAgcHV0QmluYXJ5SW1hZ2VNYXNrKG1hc2tDdHgsIGltYWdlKTtcbiAgICAgIG1hc2tDdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gXCJzb3VyY2UtaW5cIjtcbiAgICAgIG1hc2tDdHguZmlsbFN0eWxlID0gaXNQYXR0ZXJuRmlsbCA/IGZpbGxDb2xvci5nZXRQYXR0ZXJuKG1hc2tDdHgsIHRoaXMsIGN0eC5tb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSwgX3BhdHRlcm5faGVscGVyLlBhdGhUeXBlLkZJTEwpIDogZmlsbENvbG9yO1xuICAgICAgbWFza0N0eC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIG1hc2tDdHgucmVzdG9yZSgpO1xuICAgICAgY3R4LnNhdmUoKTtcbiAgICAgIGN0eC50cmFuc2Zvcm0uYXBwbHkoY3R4LCBpbWFnZS50cmFuc2Zvcm0pO1xuICAgICAgY3R4LnNjYWxlKDEsIC0xKTtcbiAgICAgIGN0eC5kcmF3SW1hZ2UobWFza0NhbnZhcy5jYW52YXMsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIDAsIC0xLCAxLCAxKTtcbiAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wb3NlKCk7XG4gIH1cblxuICBwYWludEltYWdlWE9iamVjdChvYmpJZCkge1xuICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGltZ0RhdGEgPSBvYmpJZC5zdGFydHNXaXRoKFwiZ19cIikgPyB0aGlzLmNvbW1vbk9ianMuZ2V0KG9iaklkKSA6IHRoaXMub2Jqcy5nZXQob2JqSWQpO1xuXG4gICAgaWYgKCFpbWdEYXRhKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJEZXBlbmRlbnQgaW1hZ2UgaXNuJ3QgcmVhZHkgeWV0XCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QoaW1nRGF0YSk7XG4gIH1cblxuICBwYWludEltYWdlWE9iamVjdFJlcGVhdChvYmpJZCwgc2NhbGVYLCBzY2FsZVksIHBvc2l0aW9ucykge1xuICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGltZ0RhdGEgPSBvYmpJZC5zdGFydHNXaXRoKFwiZ19cIikgPyB0aGlzLmNvbW1vbk9ianMuZ2V0KG9iaklkKSA6IHRoaXMub2Jqcy5nZXQob2JqSWQpO1xuXG4gICAgaWYgKCFpbWdEYXRhKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJEZXBlbmRlbnQgaW1hZ2UgaXNuJ3QgcmVhZHkgeWV0XCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHdpZHRoID0gaW1nRGF0YS53aWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSBpbWdEYXRhLmhlaWdodDtcbiAgICBjb25zdCBtYXAgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHBvc2l0aW9ucy5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7XG4gICAgICBtYXAucHVzaCh7XG4gICAgICAgIHRyYW5zZm9ybTogW3NjYWxlWCwgMCwgMCwgc2NhbGVZLCBwb3NpdGlvbnNbaV0sIHBvc2l0aW9uc1tpICsgMV1dLFxuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAwLFxuICAgICAgICB3OiB3aWR0aCxcbiAgICAgICAgaDogaGVpZ2h0XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXAoaW1nRGF0YSwgbWFwKTtcbiAgfVxuXG4gIHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KGltZ0RhdGEpIHtcbiAgICBpZiAoIXRoaXMuY29udGVudFZpc2libGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB3aWR0aCA9IGltZ0RhdGEud2lkdGg7XG4gICAgY29uc3QgaGVpZ2h0ID0gaW1nRGF0YS5oZWlnaHQ7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7XG4gICAgdGhpcy5zYXZlKCk7XG4gICAgY3R4LnNjYWxlKDEgLyB3aWR0aCwgLTEgLyBoZWlnaHQpO1xuICAgIGxldCBpbWdUb1BhaW50O1xuXG4gICAgaWYgKHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJmdW5jdGlvblwiICYmIGltZ0RhdGEgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCAhaW1nRGF0YS5kYXRhKSB7XG4gICAgICBpbWdUb1BhaW50ID0gaW1nRGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdG1wQ2FudmFzID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoXCJpbmxpbmVJbWFnZVwiLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGNvbnN0IHRtcEN0eCA9IHRtcENhbnZhcy5jb250ZXh0O1xuICAgICAgcHV0QmluYXJ5SW1hZ2VEYXRhKHRtcEN0eCwgaW1nRGF0YSwgdGhpcy5jdXJyZW50LnRyYW5zZmVyTWFwcyk7XG4gICAgICBpbWdUb1BhaW50ID0gdG1wQ2FudmFzLmNhbnZhcztcbiAgICB9XG5cbiAgICBjb25zdCBzY2FsZWQgPSB0aGlzLl9zY2FsZUltYWdlKGltZ1RvUGFpbnQsIGN0eC5tb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSk7XG5cbiAgICBjdHguaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZ2V0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKGN0eC5tb3pDdXJyZW50VHJhbnNmb3JtLCBpbWdEYXRhLmludGVycG9sYXRlKTtcbiAgICBjdHguZHJhd0ltYWdlKHNjYWxlZC5pbWcsIDAsIDAsIHNjYWxlZC5wYWludFdpZHRoLCBzY2FsZWQucGFpbnRIZWlnaHQsIDAsIC1oZWlnaHQsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYgKHRoaXMuaW1hZ2VMYXllcikge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmdldENhbnZhc1Bvc2l0aW9uKDAsIC1oZWlnaHQpO1xuICAgICAgdGhpcy5pbWFnZUxheWVyLmFwcGVuZEltYWdlKHtcbiAgICAgICAgaW1nRGF0YSxcbiAgICAgICAgbGVmdDogcG9zaXRpb25bMF0sXG4gICAgICAgIHRvcDogcG9zaXRpb25bMV0sXG4gICAgICAgIHdpZHRoOiB3aWR0aCAvIGN0eC5tb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZVswXSxcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQgLyBjdHgubW96Q3VycmVudFRyYW5zZm9ybUludmVyc2VbM11cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuY29tcG9zZSgpO1xuICAgIHRoaXMucmVzdG9yZSgpO1xuICB9XG5cbiAgcGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cChpbWdEYXRhLCBtYXApIHtcbiAgICBpZiAoIXRoaXMuY29udGVudFZpc2libGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICBjb25zdCB3ID0gaW1nRGF0YS53aWR0aDtcbiAgICBjb25zdCBoID0gaW1nRGF0YS5oZWlnaHQ7XG4gICAgY29uc3QgdG1wQ2FudmFzID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoXCJpbmxpbmVJbWFnZVwiLCB3LCBoKTtcbiAgICBjb25zdCB0bXBDdHggPSB0bXBDYW52YXMuY29udGV4dDtcbiAgICBwdXRCaW5hcnlJbWFnZURhdGEodG1wQ3R4LCBpbWdEYXRhLCB0aGlzLmN1cnJlbnQudHJhbnNmZXJNYXBzKTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IG1hcC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IG1hcFtpXTtcbiAgICAgIGN0eC5zYXZlKCk7XG4gICAgICBjdHgudHJhbnNmb3JtLmFwcGx5KGN0eCwgZW50cnkudHJhbnNmb3JtKTtcbiAgICAgIGN0eC5zY2FsZSgxLCAtMSk7XG4gICAgICBjdHguZHJhd0ltYWdlKHRtcENhbnZhcy5jYW52YXMsIGVudHJ5LngsIGVudHJ5LnksIGVudHJ5LncsIGVudHJ5LmgsIDAsIC0xLCAxLCAxKTtcblxuICAgICAgaWYgKHRoaXMuaW1hZ2VMYXllcikge1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0Q2FudmFzUG9zaXRpb24oZW50cnkueCwgZW50cnkueSk7XG4gICAgICAgIHRoaXMuaW1hZ2VMYXllci5hcHBlbmRJbWFnZSh7XG4gICAgICAgICAgaW1nRGF0YSxcbiAgICAgICAgICBsZWZ0OiBwb3NpdGlvblswXSxcbiAgICAgICAgICB0b3A6IHBvc2l0aW9uWzFdLFxuICAgICAgICAgIHdpZHRoOiB3LFxuICAgICAgICAgIGhlaWdodDogaFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBvc2UoKTtcbiAgfVxuXG4gIHBhaW50U29saWRDb2xvckltYWdlTWFzaygpIHtcbiAgICBpZiAoIXRoaXMuY29udGVudFZpc2libGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN0eC5maWxsUmVjdCgwLCAwLCAxLCAxKTtcbiAgICB0aGlzLmNvbXBvc2UoKTtcbiAgfVxuXG4gIG1hcmtQb2ludCh0YWcpIHt9XG5cbiAgbWFya1BvaW50UHJvcHModGFnLCBwcm9wZXJ0aWVzKSB7fVxuXG4gIGJlZ2luTWFya2VkQ29udGVudCh0YWcpIHtcbiAgICB0aGlzLm1hcmtlZENvbnRlbnRTdGFjay5wdXNoKHtcbiAgICAgIHZpc2libGU6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIGJlZ2luTWFya2VkQ29udGVudFByb3BzKHRhZywgcHJvcGVydGllcykge1xuICAgIGlmICh0YWcgPT09IFwiT0NcIikge1xuICAgICAgdGhpcy5tYXJrZWRDb250ZW50U3RhY2sucHVzaCh7XG4gICAgICAgIHZpc2libGU6IHRoaXMub3B0aW9uYWxDb250ZW50Q29uZmlnLmlzVmlzaWJsZShwcm9wZXJ0aWVzKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWFya2VkQ29udGVudFN0YWNrLnB1c2goe1xuICAgICAgICB2aXNpYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRlbnRWaXNpYmxlID0gdGhpcy5pc0NvbnRlbnRWaXNpYmxlKCk7XG4gIH1cblxuICBlbmRNYXJrZWRDb250ZW50KCkge1xuICAgIHRoaXMubWFya2VkQ29udGVudFN0YWNrLnBvcCgpO1xuICAgIHRoaXMuY29udGVudFZpc2libGUgPSB0aGlzLmlzQ29udGVudFZpc2libGUoKTtcbiAgfVxuXG4gIGJlZ2luQ29tcGF0KCkge31cblxuICBlbmRDb21wYXQoKSB7fVxuXG4gIGNvbnN1bWVQYXRoKGNsaXBCb3gpIHtcbiAgICBpZiAodGhpcy5wZW5kaW5nQ2xpcCkge1xuICAgICAgdGhpcy5jdXJyZW50LnVwZGF0ZUNsaXBGcm9tUGF0aCgpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5wZW5kaW5nQ2xpcCkge1xuICAgICAgdGhpcy5jb21wb3NlKGNsaXBCb3gpO1xuICAgIH1cblxuICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuXG4gICAgaWYgKHRoaXMucGVuZGluZ0NsaXApIHtcbiAgICAgIGlmICh0aGlzLnBlbmRpbmdDbGlwID09PSBFT19DTElQKSB7XG4gICAgICAgIGN0eC5jbGlwKFwiZXZlbm9kZFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN0eC5jbGlwKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucGVuZGluZ0NsaXAgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudC5zdGFydE5ld1BhdGhBbmRDbGlwQm94KHRoaXMuY3VycmVudC5jbGlwQm94KTtcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gIH1cblxuICBnZXRTaW5nbGVQaXhlbFdpZHRoKCkge1xuICAgIGlmICh0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID09PSBudWxsKSB7XG4gICAgICBjb25zdCBtID0gdGhpcy5jdHgubW96Q3VycmVudFRyYW5zZm9ybTtcbiAgICAgIGNvbnN0IGFic0RldCA9IE1hdGguYWJzKG1bMF0gKiBtWzNdIC0gbVsyXSAqIG1bMV0pO1xuICAgICAgY29uc3Qgc3FOb3JtMSA9IG1bMF0gKiogMiArIG1bMl0gKiogMjtcbiAgICAgIGNvbnN0IHNxTm9ybTIgPSBtWzFdICoqIDIgKyBtWzNdICoqIDI7XG4gICAgICBjb25zdCBwaXhlbEhlaWdodCA9IE1hdGguc3FydChNYXRoLm1heChzcU5vcm0xLCBzcU5vcm0yKSkgLyBhYnNEZXQ7XG5cbiAgICAgIGlmIChzcU5vcm0xICE9PSBzcU5vcm0yICYmIHRoaXMuX2NvbWJpbmVkU2NhbGVGYWN0b3IgKiBwaXhlbEhlaWdodCA+IDEpIHtcbiAgICAgICAgdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aCA9IC0odGhpcy5fY29tYmluZWRTY2FsZUZhY3RvciAqIHBpeGVsSGVpZ2h0KTtcbiAgICAgIH0gZWxzZSBpZiAoYWJzRGV0ID4gTnVtYmVyLkVQU0lMT04pIHtcbiAgICAgICAgdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aCA9IHBpeGVsSGVpZ2h0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aCA9IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGg7XG4gIH1cblxuICBnZXRDYW52YXNQb3NpdGlvbih4LCB5KSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gdGhpcy5jdHgubW96Q3VycmVudFRyYW5zZm9ybTtcbiAgICByZXR1cm4gW3RyYW5zZm9ybVswXSAqIHggKyB0cmFuc2Zvcm1bMl0gKiB5ICsgdHJhbnNmb3JtWzRdLCB0cmFuc2Zvcm1bMV0gKiB4ICsgdHJhbnNmb3JtWzNdICogeSArIHRyYW5zZm9ybVs1XV07XG4gIH1cblxuICBpc0NvbnRlbnRWaXNpYmxlKCkge1xuICAgIGZvciAobGV0IGkgPSB0aGlzLm1hcmtlZENvbnRlbnRTdGFjay5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKCF0aGlzLm1hcmtlZENvbnRlbnRTdGFja1tpXS52aXNpYmxlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQ2FudmFzR3JhcGhpY3MgPSBDYW52YXNHcmFwaGljcztcblxuZm9yIChjb25zdCBvcCBpbiBfdXRpbC5PUFMpIHtcbiAgaWYgKENhbnZhc0dyYXBoaWNzLnByb3RvdHlwZVtvcF0gIT09IHVuZGVmaW5lZCkge1xuICAgIENhbnZhc0dyYXBoaWNzLnByb3RvdHlwZVtfdXRpbC5PUFNbb3BdXSA9IENhbnZhc0dyYXBoaWNzLnByb3RvdHlwZVtvcF07XG4gIH1cbn1cblxuLyoqKi8gfSksXG4vKiAxMSAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5UaWxpbmdQYXR0ZXJuID0gZXhwb3J0cy5QYXRoVHlwZSA9IHZvaWQgMDtcbmV4cG9ydHMuZ2V0U2hhZGluZ1BhdHRlcm4gPSBnZXRTaGFkaW5nUGF0dGVybjtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuY29uc3QgUGF0aFR5cGUgPSB7XG4gIEZJTEw6IFwiRmlsbFwiLFxuICBTVFJPS0U6IFwiU3Ryb2tlXCIsXG4gIFNIQURJTkc6IFwiU2hhZGluZ1wiXG59O1xuZXhwb3J0cy5QYXRoVHlwZSA9IFBhdGhUeXBlO1xuXG5mdW5jdGlvbiBhcHBseUJvdW5kaW5nQm94KGN0eCwgYmJveCkge1xuICBpZiAoIWJib3ggfHwgdHlwZW9mIFBhdGgyRCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHdpZHRoID0gYmJveFsyXSAtIGJib3hbMF07XG4gIGNvbnN0IGhlaWdodCA9IGJib3hbM10gLSBiYm94WzFdO1xuICBjb25zdCByZWdpb24gPSBuZXcgUGF0aDJEKCk7XG4gIHJlZ2lvbi5yZWN0KGJib3hbMF0sIGJib3hbMV0sIHdpZHRoLCBoZWlnaHQpO1xuICBjdHguY2xpcChyZWdpb24pO1xufVxuXG5jbGFzcyBCYXNlU2hhZGluZ1BhdHRlcm4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gQmFzZVNoYWRpbmdQYXR0ZXJuKSB7XG4gICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQ2Fubm90IGluaXRpYWxpemUgQmFzZVNoYWRpbmdQYXR0ZXJuLlwiKTtcbiAgICB9XG4gIH1cblxuICBnZXRQYXR0ZXJuKCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYGdldFBhdHRlcm5gIGNhbGxlZC5cIik7XG4gIH1cblxufVxuXG5jbGFzcyBSYWRpYWxBeGlhbFNoYWRpbmdQYXR0ZXJuIGV4dGVuZHMgQmFzZVNoYWRpbmdQYXR0ZXJuIHtcbiAgY29uc3RydWN0b3IoSVIpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3R5cGUgPSBJUlsxXTtcbiAgICB0aGlzLl9iYm94ID0gSVJbMl07XG4gICAgdGhpcy5fY29sb3JTdG9wcyA9IElSWzNdO1xuICAgIHRoaXMuX3AwID0gSVJbNF07XG4gICAgdGhpcy5fcDEgPSBJUls1XTtcbiAgICB0aGlzLl9yMCA9IElSWzZdO1xuICAgIHRoaXMuX3IxID0gSVJbN107XG4gICAgdGhpcy5tYXRyaXggPSBudWxsO1xuICB9XG5cbiAgX2NyZWF0ZUdyYWRpZW50KGN0eCkge1xuICAgIGxldCBncmFkO1xuXG4gICAgaWYgKHRoaXMuX3R5cGUgPT09IFwiYXhpYWxcIikge1xuICAgICAgZ3JhZCA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCh0aGlzLl9wMFswXSwgdGhpcy5fcDBbMV0sIHRoaXMuX3AxWzBdLCB0aGlzLl9wMVsxXSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBcInJhZGlhbFwiKSB7XG4gICAgICBncmFkID0gY3R4LmNyZWF0ZVJhZGlhbEdyYWRpZW50KHRoaXMuX3AwWzBdLCB0aGlzLl9wMFsxXSwgdGhpcy5fcjAsIHRoaXMuX3AxWzBdLCB0aGlzLl9wMVsxXSwgdGhpcy5fcjEpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY29sb3JTdG9wIG9mIHRoaXMuX2NvbG9yU3RvcHMpIHtcbiAgICAgIGdyYWQuYWRkQ29sb3JTdG9wKGNvbG9yU3RvcFswXSwgY29sb3JTdG9wWzFdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3JhZDtcbiAgfVxuXG4gIGdldFBhdHRlcm4oY3R4LCBvd25lciwgaW52ZXJzZSwgcGF0aFR5cGUpIHtcbiAgICBsZXQgcGF0dGVybjtcblxuICAgIGlmIChwYXRoVHlwZSA9PT0gUGF0aFR5cGUuU1RST0tFIHx8IHBhdGhUeXBlID09PSBQYXRoVHlwZS5GSUxMKSB7XG4gICAgICBjb25zdCBvd25lckJCb3ggPSBvd25lci5jdXJyZW50LmdldENsaXBwZWRQYXRoQm91bmRpbmdCb3gocGF0aFR5cGUsIGN0eC5tb3pDdXJyZW50VHJhbnNmb3JtKSB8fCBbMCwgMCwgMCwgMF07XG4gICAgICBjb25zdCB3aWR0aCA9IE1hdGguY2VpbChvd25lckJCb3hbMl0gLSBvd25lckJCb3hbMF0pIHx8IDE7XG4gICAgICBjb25zdCBoZWlnaHQgPSBNYXRoLmNlaWwob3duZXJCQm94WzNdIC0gb3duZXJCQm94WzFdKSB8fCAxO1xuICAgICAgY29uc3QgdG1wQ2FudmFzID0gb3duZXIuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKFwicGF0dGVyblwiLCB3aWR0aCwgaGVpZ2h0LCB0cnVlKTtcbiAgICAgIGNvbnN0IHRtcEN0eCA9IHRtcENhbnZhcy5jb250ZXh0O1xuICAgICAgdG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0bXBDdHguY2FudmFzLndpZHRoLCB0bXBDdHguY2FudmFzLmhlaWdodCk7XG4gICAgICB0bXBDdHguYmVnaW5QYXRoKCk7XG4gICAgICB0bXBDdHgucmVjdCgwLCAwLCB0bXBDdHguY2FudmFzLndpZHRoLCB0bXBDdHguY2FudmFzLmhlaWdodCk7XG4gICAgICB0bXBDdHgudHJhbnNsYXRlKC1vd25lckJCb3hbMF0sIC1vd25lckJCb3hbMV0pO1xuICAgICAgaW52ZXJzZSA9IF91dGlsLlV0aWwudHJhbnNmb3JtKGludmVyc2UsIFsxLCAwLCAwLCAxLCBvd25lckJCb3hbMF0sIG93bmVyQkJveFsxXV0pO1xuICAgICAgdG1wQ3R4LnRyYW5zZm9ybS5hcHBseSh0bXBDdHgsIG93bmVyLmJhc2VUcmFuc2Zvcm0pO1xuXG4gICAgICBpZiAodGhpcy5tYXRyaXgpIHtcbiAgICAgICAgdG1wQ3R4LnRyYW5zZm9ybS5hcHBseSh0bXBDdHgsIHRoaXMubWF0cml4KTtcbiAgICAgIH1cblxuICAgICAgYXBwbHlCb3VuZGluZ0JveCh0bXBDdHgsIHRoaXMuX2Jib3gpO1xuICAgICAgdG1wQ3R4LmZpbGxTdHlsZSA9IHRoaXMuX2NyZWF0ZUdyYWRpZW50KHRtcEN0eCk7XG4gICAgICB0bXBDdHguZmlsbCgpO1xuICAgICAgcGF0dGVybiA9IGN0eC5jcmVhdGVQYXR0ZXJuKHRtcENhbnZhcy5jYW52YXMsIFwibm8tcmVwZWF0XCIpO1xuICAgICAgY29uc3QgZG9tTWF0cml4ID0gbmV3IERPTU1hdHJpeChpbnZlcnNlKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcGF0dGVybi5zZXRUcmFuc2Zvcm0oZG9tTWF0cml4KTtcbiAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgUmFkaWFsQXhpYWxTaGFkaW5nUGF0dGVybi5nZXRQYXR0ZXJuOiBcIiR7ZXg/Lm1lc3NhZ2V9XCIuYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGx5Qm91bmRpbmdCb3goY3R4LCB0aGlzLl9iYm94KTtcbiAgICAgIHBhdHRlcm4gPSB0aGlzLl9jcmVhdGVHcmFkaWVudChjdHgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXR0ZXJuO1xuICB9XG5cbn1cblxuZnVuY3Rpb24gZHJhd1RyaWFuZ2xlKGRhdGEsIGNvbnRleHQsIHAxLCBwMiwgcDMsIGMxLCBjMiwgYzMpIHtcbiAgY29uc3QgY29vcmRzID0gY29udGV4dC5jb29yZHMsXG4gICAgICAgIGNvbG9ycyA9IGNvbnRleHQuY29sb3JzO1xuICBjb25zdCBieXRlcyA9IGRhdGEuZGF0YSxcbiAgICAgICAgcm93U2l6ZSA9IGRhdGEud2lkdGggKiA0O1xuICBsZXQgdG1wO1xuXG4gIGlmIChjb29yZHNbcDEgKyAxXSA+IGNvb3Jkc1twMiArIDFdKSB7XG4gICAgdG1wID0gcDE7XG4gICAgcDEgPSBwMjtcbiAgICBwMiA9IHRtcDtcbiAgICB0bXAgPSBjMTtcbiAgICBjMSA9IGMyO1xuICAgIGMyID0gdG1wO1xuICB9XG5cbiAgaWYgKGNvb3Jkc1twMiArIDFdID4gY29vcmRzW3AzICsgMV0pIHtcbiAgICB0bXAgPSBwMjtcbiAgICBwMiA9IHAzO1xuICAgIHAzID0gdG1wO1xuICAgIHRtcCA9IGMyO1xuICAgIGMyID0gYzM7XG4gICAgYzMgPSB0bXA7XG4gIH1cblxuICBpZiAoY29vcmRzW3AxICsgMV0gPiBjb29yZHNbcDIgKyAxXSkge1xuICAgIHRtcCA9IHAxO1xuICAgIHAxID0gcDI7XG4gICAgcDIgPSB0bXA7XG4gICAgdG1wID0gYzE7XG4gICAgYzEgPSBjMjtcbiAgICBjMiA9IHRtcDtcbiAgfVxuXG4gIGNvbnN0IHgxID0gKGNvb3Jkc1twMV0gKyBjb250ZXh0Lm9mZnNldFgpICogY29udGV4dC5zY2FsZVg7XG4gIGNvbnN0IHkxID0gKGNvb3Jkc1twMSArIDFdICsgY29udGV4dC5vZmZzZXRZKSAqIGNvbnRleHQuc2NhbGVZO1xuICBjb25zdCB4MiA9IChjb29yZHNbcDJdICsgY29udGV4dC5vZmZzZXRYKSAqIGNvbnRleHQuc2NhbGVYO1xuICBjb25zdCB5MiA9IChjb29yZHNbcDIgKyAxXSArIGNvbnRleHQub2Zmc2V0WSkgKiBjb250ZXh0LnNjYWxlWTtcbiAgY29uc3QgeDMgPSAoY29vcmRzW3AzXSArIGNvbnRleHQub2Zmc2V0WCkgKiBjb250ZXh0LnNjYWxlWDtcbiAgY29uc3QgeTMgPSAoY29vcmRzW3AzICsgMV0gKyBjb250ZXh0Lm9mZnNldFkpICogY29udGV4dC5zY2FsZVk7XG5cbiAgaWYgKHkxID49IHkzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYzFyID0gY29sb3JzW2MxXSxcbiAgICAgICAgYzFnID0gY29sb3JzW2MxICsgMV0sXG4gICAgICAgIGMxYiA9IGNvbG9yc1tjMSArIDJdO1xuICBjb25zdCBjMnIgPSBjb2xvcnNbYzJdLFxuICAgICAgICBjMmcgPSBjb2xvcnNbYzIgKyAxXSxcbiAgICAgICAgYzJiID0gY29sb3JzW2MyICsgMl07XG4gIGNvbnN0IGMzciA9IGNvbG9yc1tjM10sXG4gICAgICAgIGMzZyA9IGNvbG9yc1tjMyArIDFdLFxuICAgICAgICBjM2IgPSBjb2xvcnNbYzMgKyAyXTtcbiAgY29uc3QgbWluWSA9IE1hdGgucm91bmQoeTEpLFxuICAgICAgICBtYXhZID0gTWF0aC5yb3VuZCh5Myk7XG4gIGxldCB4YSwgY2FyLCBjYWcsIGNhYjtcbiAgbGV0IHhiLCBjYnIsIGNiZywgY2JiO1xuXG4gIGZvciAobGV0IHkgPSBtaW5ZOyB5IDw9IG1heFk7IHkrKykge1xuICAgIGlmICh5IDwgeTIpIHtcbiAgICAgIGxldCBrO1xuXG4gICAgICBpZiAoeSA8IHkxKSB7XG4gICAgICAgIGsgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgayA9ICh5MSAtIHkpIC8gKHkxIC0geTIpO1xuICAgICAgfVxuXG4gICAgICB4YSA9IHgxIC0gKHgxIC0geDIpICogaztcbiAgICAgIGNhciA9IGMxciAtIChjMXIgLSBjMnIpICogaztcbiAgICAgIGNhZyA9IGMxZyAtIChjMWcgLSBjMmcpICogaztcbiAgICAgIGNhYiA9IGMxYiAtIChjMWIgLSBjMmIpICogaztcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGs7XG5cbiAgICAgIGlmICh5ID4geTMpIHtcbiAgICAgICAgayA9IDE7XG4gICAgICB9IGVsc2UgaWYgKHkyID09PSB5Mykge1xuICAgICAgICBrID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGsgPSAoeTIgLSB5KSAvICh5MiAtIHkzKTtcbiAgICAgIH1cblxuICAgICAgeGEgPSB4MiAtICh4MiAtIHgzKSAqIGs7XG4gICAgICBjYXIgPSBjMnIgLSAoYzJyIC0gYzNyKSAqIGs7XG4gICAgICBjYWcgPSBjMmcgLSAoYzJnIC0gYzNnKSAqIGs7XG4gICAgICBjYWIgPSBjMmIgLSAoYzJiIC0gYzNiKSAqIGs7XG4gICAgfVxuXG4gICAgbGV0IGs7XG5cbiAgICBpZiAoeSA8IHkxKSB7XG4gICAgICBrID0gMDtcbiAgICB9IGVsc2UgaWYgKHkgPiB5Mykge1xuICAgICAgayA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGsgPSAoeTEgLSB5KSAvICh5MSAtIHkzKTtcbiAgICB9XG5cbiAgICB4YiA9IHgxIC0gKHgxIC0geDMpICogaztcbiAgICBjYnIgPSBjMXIgLSAoYzFyIC0gYzNyKSAqIGs7XG4gICAgY2JnID0gYzFnIC0gKGMxZyAtIGMzZykgKiBrO1xuICAgIGNiYiA9IGMxYiAtIChjMWIgLSBjM2IpICogaztcbiAgICBjb25zdCB4MV8gPSBNYXRoLnJvdW5kKE1hdGgubWluKHhhLCB4YikpO1xuICAgIGNvbnN0IHgyXyA9IE1hdGgucm91bmQoTWF0aC5tYXgoeGEsIHhiKSk7XG4gICAgbGV0IGogPSByb3dTaXplICogeSArIHgxXyAqIDQ7XG5cbiAgICBmb3IgKGxldCB4ID0geDFfOyB4IDw9IHgyXzsgeCsrKSB7XG4gICAgICBrID0gKHhhIC0geCkgLyAoeGEgLSB4Yik7XG5cbiAgICAgIGlmIChrIDwgMCkge1xuICAgICAgICBrID0gMDtcbiAgICAgIH0gZWxzZSBpZiAoayA+IDEpIHtcbiAgICAgICAgayA9IDE7XG4gICAgICB9XG5cbiAgICAgIGJ5dGVzW2orK10gPSBjYXIgLSAoY2FyIC0gY2JyKSAqIGsgfCAwO1xuICAgICAgYnl0ZXNbaisrXSA9IGNhZyAtIChjYWcgLSBjYmcpICogayB8IDA7XG4gICAgICBieXRlc1tqKytdID0gY2FiIC0gKGNhYiAtIGNiYikgKiBrIHwgMDtcbiAgICAgIGJ5dGVzW2orK10gPSAyNTU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRyYXdGaWd1cmUoZGF0YSwgZmlndXJlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBzID0gZmlndXJlLmNvb3JkcztcbiAgY29uc3QgY3MgPSBmaWd1cmUuY29sb3JzO1xuICBsZXQgaSwgaWk7XG5cbiAgc3dpdGNoIChmaWd1cmUudHlwZSkge1xuICAgIGNhc2UgXCJsYXR0aWNlXCI6XG4gICAgICBjb25zdCB2ZXJ0aWNlc1BlclJvdyA9IGZpZ3VyZS52ZXJ0aWNlc1BlclJvdztcbiAgICAgIGNvbnN0IHJvd3MgPSBNYXRoLmZsb29yKHBzLmxlbmd0aCAvIHZlcnRpY2VzUGVyUm93KSAtIDE7XG4gICAgICBjb25zdCBjb2xzID0gdmVydGljZXNQZXJSb3cgLSAxO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgIGxldCBxID0gaSAqIHZlcnRpY2VzUGVyUm93O1xuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sczsgaisrLCBxKyspIHtcbiAgICAgICAgICBkcmF3VHJpYW5nbGUoZGF0YSwgY29udGV4dCwgcHNbcV0sIHBzW3EgKyAxXSwgcHNbcSArIHZlcnRpY2VzUGVyUm93XSwgY3NbcV0sIGNzW3EgKyAxXSwgY3NbcSArIHZlcnRpY2VzUGVyUm93XSk7XG4gICAgICAgICAgZHJhd1RyaWFuZ2xlKGRhdGEsIGNvbnRleHQsIHBzW3EgKyB2ZXJ0aWNlc1BlclJvdyArIDFdLCBwc1txICsgMV0sIHBzW3EgKyB2ZXJ0aWNlc1BlclJvd10sIGNzW3EgKyB2ZXJ0aWNlc1BlclJvdyArIDFdLCBjc1txICsgMV0sIGNzW3EgKyB2ZXJ0aWNlc1BlclJvd10pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInRyaWFuZ2xlc1wiOlxuICAgICAgZm9yIChpID0gMCwgaWkgPSBwcy5sZW5ndGg7IGkgPCBpaTsgaSArPSAzKSB7XG4gICAgICAgIGRyYXdUcmlhbmdsZShkYXRhLCBjb250ZXh0LCBwc1tpXSwgcHNbaSArIDFdLCBwc1tpICsgMl0sIGNzW2ldLCBjc1tpICsgMV0sIGNzW2kgKyAyXSk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgZmlndXJlXCIpO1xuICB9XG59XG5cbmNsYXNzIE1lc2hTaGFkaW5nUGF0dGVybiBleHRlbmRzIEJhc2VTaGFkaW5nUGF0dGVybiB7XG4gIGNvbnN0cnVjdG9yKElSKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9jb29yZHMgPSBJUlsyXTtcbiAgICB0aGlzLl9jb2xvcnMgPSBJUlszXTtcbiAgICB0aGlzLl9maWd1cmVzID0gSVJbNF07XG4gICAgdGhpcy5fYm91bmRzID0gSVJbNV07XG4gICAgdGhpcy5fYmJveCA9IElSWzddO1xuICAgIHRoaXMuX2JhY2tncm91bmQgPSBJUls4XTtcbiAgICB0aGlzLm1hdHJpeCA9IG51bGw7XG4gIH1cblxuICBfY3JlYXRlTWVzaENhbnZhcyhjb21iaW5lZFNjYWxlLCBiYWNrZ3JvdW5kQ29sb3IsIGNhY2hlZENhbnZhc2VzKSB7XG4gICAgY29uc3QgRVhQRUNURURfU0NBTEUgPSAxLjE7XG4gICAgY29uc3QgTUFYX1BBVFRFUk5fU0laRSA9IDMwMDA7XG4gICAgY29uc3QgQk9SREVSX1NJWkUgPSAyO1xuICAgIGNvbnN0IG9mZnNldFggPSBNYXRoLmZsb29yKHRoaXMuX2JvdW5kc1swXSk7XG4gICAgY29uc3Qgb2Zmc2V0WSA9IE1hdGguZmxvb3IodGhpcy5fYm91bmRzWzFdKTtcbiAgICBjb25zdCBib3VuZHNXaWR0aCA9IE1hdGguY2VpbCh0aGlzLl9ib3VuZHNbMl0pIC0gb2Zmc2V0WDtcbiAgICBjb25zdCBib3VuZHNIZWlnaHQgPSBNYXRoLmNlaWwodGhpcy5fYm91bmRzWzNdKSAtIG9mZnNldFk7XG4gICAgY29uc3Qgd2lkdGggPSBNYXRoLm1pbihNYXRoLmNlaWwoTWF0aC5hYnMoYm91bmRzV2lkdGggKiBjb21iaW5lZFNjYWxlWzBdICogRVhQRUNURURfU0NBTEUpKSwgTUFYX1BBVFRFUk5fU0laRSk7XG4gICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5taW4oTWF0aC5jZWlsKE1hdGguYWJzKGJvdW5kc0hlaWdodCAqIGNvbWJpbmVkU2NhbGVbMV0gKiBFWFBFQ1RFRF9TQ0FMRSkpLCBNQVhfUEFUVEVSTl9TSVpFKTtcbiAgICBjb25zdCBzY2FsZVggPSBib3VuZHNXaWR0aCAvIHdpZHRoO1xuICAgIGNvbnN0IHNjYWxlWSA9IGJvdW5kc0hlaWdodCAvIGhlaWdodDtcbiAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgY29vcmRzOiB0aGlzLl9jb29yZHMsXG4gICAgICBjb2xvcnM6IHRoaXMuX2NvbG9ycyxcbiAgICAgIG9mZnNldFg6IC1vZmZzZXRYLFxuICAgICAgb2Zmc2V0WTogLW9mZnNldFksXG4gICAgICBzY2FsZVg6IDEgLyBzY2FsZVgsXG4gICAgICBzY2FsZVk6IDEgLyBzY2FsZVlcbiAgICB9O1xuICAgIGNvbnN0IHBhZGRlZFdpZHRoID0gd2lkdGggKyBCT1JERVJfU0laRSAqIDI7XG4gICAgY29uc3QgcGFkZGVkSGVpZ2h0ID0gaGVpZ2h0ICsgQk9SREVSX1NJWkUgKiAyO1xuICAgIGNvbnN0IHRtcENhbnZhcyA9IGNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhcIm1lc2hcIiwgcGFkZGVkV2lkdGgsIHBhZGRlZEhlaWdodCwgZmFsc2UpO1xuICAgIGNvbnN0IHRtcEN0eCA9IHRtcENhbnZhcy5jb250ZXh0O1xuICAgIGNvbnN0IGRhdGEgPSB0bXBDdHguY3JlYXRlSW1hZ2VEYXRhKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYgKGJhY2tncm91bmRDb2xvcikge1xuICAgICAgY29uc3QgYnl0ZXMgPSBkYXRhLmRhdGE7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGJ5dGVzLmxlbmd0aDsgaSA8IGlpOyBpICs9IDQpIHtcbiAgICAgICAgYnl0ZXNbaV0gPSBiYWNrZ3JvdW5kQ29sb3JbMF07XG4gICAgICAgIGJ5dGVzW2kgKyAxXSA9IGJhY2tncm91bmRDb2xvclsxXTtcbiAgICAgICAgYnl0ZXNbaSArIDJdID0gYmFja2dyb3VuZENvbG9yWzJdO1xuICAgICAgICBieXRlc1tpICsgM10gPSAyNTU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBmaWd1cmUgb2YgdGhpcy5fZmlndXJlcykge1xuICAgICAgZHJhd0ZpZ3VyZShkYXRhLCBmaWd1cmUsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHRtcEN0eC5wdXRJbWFnZURhdGEoZGF0YSwgQk9SREVSX1NJWkUsIEJPUkRFUl9TSVpFKTtcbiAgICBjb25zdCBjYW52YXMgPSB0bXBDYW52YXMuY2FudmFzO1xuICAgIHJldHVybiB7XG4gICAgICBjYW52YXMsXG4gICAgICBvZmZzZXRYOiBvZmZzZXRYIC0gQk9SREVSX1NJWkUgKiBzY2FsZVgsXG4gICAgICBvZmZzZXRZOiBvZmZzZXRZIC0gQk9SREVSX1NJWkUgKiBzY2FsZVksXG4gICAgICBzY2FsZVgsXG4gICAgICBzY2FsZVlcbiAgICB9O1xuICB9XG5cbiAgZ2V0UGF0dGVybihjdHgsIG93bmVyLCBpbnZlcnNlLCBwYXRoVHlwZSkge1xuICAgIGFwcGx5Qm91bmRpbmdCb3goY3R4LCB0aGlzLl9iYm94KTtcbiAgICBsZXQgc2NhbGU7XG5cbiAgICBpZiAocGF0aFR5cGUgPT09IFBhdGhUeXBlLlNIQURJTkcpIHtcbiAgICAgIHNjYWxlID0gX3V0aWwuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZShjdHgubW96Q3VycmVudFRyYW5zZm9ybSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjYWxlID0gX3V0aWwuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZShvd25lci5iYXNlVHJhbnNmb3JtKTtcblxuICAgICAgaWYgKHRoaXMubWF0cml4KSB7XG4gICAgICAgIGNvbnN0IG1hdHJpeFNjYWxlID0gX3V0aWwuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSh0aGlzLm1hdHJpeCk7XG5cbiAgICAgICAgc2NhbGUgPSBbc2NhbGVbMF0gKiBtYXRyaXhTY2FsZVswXSwgc2NhbGVbMV0gKiBtYXRyaXhTY2FsZVsxXV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdGVtcG9yYXJ5UGF0dGVybkNhbnZhcyA9IHRoaXMuX2NyZWF0ZU1lc2hDYW52YXMoc2NhbGUsIHBhdGhUeXBlID09PSBQYXRoVHlwZS5TSEFESU5HID8gbnVsbCA6IHRoaXMuX2JhY2tncm91bmQsIG93bmVyLmNhY2hlZENhbnZhc2VzKTtcblxuICAgIGlmIChwYXRoVHlwZSAhPT0gUGF0aFR5cGUuU0hBRElORykge1xuICAgICAgY3R4LnNldFRyYW5zZm9ybS5hcHBseShjdHgsIG93bmVyLmJhc2VUcmFuc2Zvcm0pO1xuXG4gICAgICBpZiAodGhpcy5tYXRyaXgpIHtcbiAgICAgICAgY3R4LnRyYW5zZm9ybS5hcHBseShjdHgsIHRoaXMubWF0cml4KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjdHgudHJhbnNsYXRlKHRlbXBvcmFyeVBhdHRlcm5DYW52YXMub2Zmc2V0WCwgdGVtcG9yYXJ5UGF0dGVybkNhbnZhcy5vZmZzZXRZKTtcbiAgICBjdHguc2NhbGUodGVtcG9yYXJ5UGF0dGVybkNhbnZhcy5zY2FsZVgsIHRlbXBvcmFyeVBhdHRlcm5DYW52YXMuc2NhbGVZKTtcbiAgICByZXR1cm4gY3R4LmNyZWF0ZVBhdHRlcm4odGVtcG9yYXJ5UGF0dGVybkNhbnZhcy5jYW52YXMsIFwibm8tcmVwZWF0XCIpO1xuICB9XG5cbn1cblxuY2xhc3MgRHVtbXlTaGFkaW5nUGF0dGVybiBleHRlbmRzIEJhc2VTaGFkaW5nUGF0dGVybiB7XG4gIGdldFBhdHRlcm4oKSB7XG4gICAgcmV0dXJuIFwiaG90cGlua1wiO1xuICB9XG5cbn1cblxuZnVuY3Rpb24gZ2V0U2hhZGluZ1BhdHRlcm4oSVIpIHtcbiAgc3dpdGNoIChJUlswXSkge1xuICAgIGNhc2UgXCJSYWRpYWxBeGlhbFwiOlxuICAgICAgcmV0dXJuIG5ldyBSYWRpYWxBeGlhbFNoYWRpbmdQYXR0ZXJuKElSKTtcblxuICAgIGNhc2UgXCJNZXNoXCI6XG4gICAgICByZXR1cm4gbmV3IE1lc2hTaGFkaW5nUGF0dGVybihJUik7XG5cbiAgICBjYXNlIFwiRHVtbXlcIjpcbiAgICAgIHJldHVybiBuZXcgRHVtbXlTaGFkaW5nUGF0dGVybigpO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIElSIHR5cGU6ICR7SVJbMF19YCk7XG59XG5cbmNvbnN0IFBhaW50VHlwZSA9IHtcbiAgQ09MT1JFRDogMSxcbiAgVU5DT0xPUkVEOiAyXG59O1xuXG5jbGFzcyBUaWxpbmdQYXR0ZXJuIHtcbiAgc3RhdGljIGdldCBNQVhfUEFUVEVSTl9TSVpFKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIk1BWF9QQVRURVJOX1NJWkVcIiwgMzAwMCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihJUiwgY29sb3IsIGN0eCwgY2FudmFzR3JhcGhpY3NGYWN0b3J5LCBiYXNlVHJhbnNmb3JtKSB7XG4gICAgdGhpcy5vcGVyYXRvckxpc3QgPSBJUlsyXTtcbiAgICB0aGlzLm1hdHJpeCA9IElSWzNdIHx8IFsxLCAwLCAwLCAxLCAwLCAwXTtcbiAgICB0aGlzLmJib3ggPSBJUls0XTtcbiAgICB0aGlzLnhzdGVwID0gSVJbNV07XG4gICAgdGhpcy55c3RlcCA9IElSWzZdO1xuICAgIHRoaXMucGFpbnRUeXBlID0gSVJbN107XG4gICAgdGhpcy50aWxpbmdUeXBlID0gSVJbOF07XG4gICAgdGhpcy5jb2xvciA9IGNvbG9yO1xuICAgIHRoaXMuY3R4ID0gY3R4O1xuICAgIHRoaXMuY2FudmFzR3JhcGhpY3NGYWN0b3J5ID0gY2FudmFzR3JhcGhpY3NGYWN0b3J5O1xuICAgIHRoaXMuYmFzZVRyYW5zZm9ybSA9IGJhc2VUcmFuc2Zvcm07XG4gIH1cblxuICBjcmVhdGVQYXR0ZXJuQ2FudmFzKG93bmVyKSB7XG4gICAgY29uc3Qgb3BlcmF0b3JMaXN0ID0gdGhpcy5vcGVyYXRvckxpc3Q7XG4gICAgY29uc3QgYmJveCA9IHRoaXMuYmJveDtcbiAgICBjb25zdCB4c3RlcCA9IHRoaXMueHN0ZXA7XG4gICAgY29uc3QgeXN0ZXAgPSB0aGlzLnlzdGVwO1xuICAgIGNvbnN0IHBhaW50VHlwZSA9IHRoaXMucGFpbnRUeXBlO1xuICAgIGNvbnN0IHRpbGluZ1R5cGUgPSB0aGlzLnRpbGluZ1R5cGU7XG4gICAgY29uc3QgY29sb3IgPSB0aGlzLmNvbG9yO1xuICAgIGNvbnN0IGNhbnZhc0dyYXBoaWNzRmFjdG9yeSA9IHRoaXMuY2FudmFzR3JhcGhpY3NGYWN0b3J5O1xuICAgICgwLCBfdXRpbC5pbmZvKShcIlRpbGluZ1R5cGU6IFwiICsgdGlsaW5nVHlwZSk7XG4gICAgY29uc3QgeDAgPSBiYm94WzBdLFxuICAgICAgICAgIHkwID0gYmJveFsxXSxcbiAgICAgICAgICB4MSA9IGJib3hbMl0sXG4gICAgICAgICAgeTEgPSBiYm94WzNdO1xuXG4gICAgY29uc3QgbWF0cml4U2NhbGUgPSBfdXRpbC5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKHRoaXMubWF0cml4KTtcblxuICAgIGNvbnN0IGN1ck1hdHJpeFNjYWxlID0gX3V0aWwuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSh0aGlzLmJhc2VUcmFuc2Zvcm0pO1xuXG4gICAgY29uc3QgY29tYmluZWRTY2FsZSA9IFttYXRyaXhTY2FsZVswXSAqIGN1ck1hdHJpeFNjYWxlWzBdLCBtYXRyaXhTY2FsZVsxXSAqIGN1ck1hdHJpeFNjYWxlWzFdXTtcbiAgICBjb25zdCBkaW14ID0gdGhpcy5nZXRTaXplQW5kU2NhbGUoeHN0ZXAsIHRoaXMuY3R4LmNhbnZhcy53aWR0aCwgY29tYmluZWRTY2FsZVswXSk7XG4gICAgY29uc3QgZGlteSA9IHRoaXMuZ2V0U2l6ZUFuZFNjYWxlKHlzdGVwLCB0aGlzLmN0eC5jYW52YXMuaGVpZ2h0LCBjb21iaW5lZFNjYWxlWzFdKTtcbiAgICBjb25zdCB0bXBDYW52YXMgPSBvd25lci5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoXCJwYXR0ZXJuXCIsIGRpbXguc2l6ZSwgZGlteS5zaXplLCB0cnVlKTtcbiAgICBjb25zdCB0bXBDdHggPSB0bXBDYW52YXMuY29udGV4dDtcbiAgICBjb25zdCBncmFwaGljcyA9IGNhbnZhc0dyYXBoaWNzRmFjdG9yeS5jcmVhdGVDYW52YXNHcmFwaGljcyh0bXBDdHgpO1xuICAgIGdyYXBoaWNzLmdyb3VwTGV2ZWwgPSBvd25lci5ncm91cExldmVsO1xuICAgIHRoaXMuc2V0RmlsbEFuZFN0cm9rZVN0eWxlVG9Db250ZXh0KGdyYXBoaWNzLCBwYWludFR5cGUsIGNvbG9yKTtcbiAgICBsZXQgYWRqdXN0ZWRYMCA9IHgwO1xuICAgIGxldCBhZGp1c3RlZFkwID0geTA7XG4gICAgbGV0IGFkanVzdGVkWDEgPSB4MTtcbiAgICBsZXQgYWRqdXN0ZWRZMSA9IHkxO1xuXG4gICAgaWYgKHgwIDwgMCkge1xuICAgICAgYWRqdXN0ZWRYMCA9IDA7XG4gICAgICBhZGp1c3RlZFgxICs9IE1hdGguYWJzKHgwKTtcbiAgICB9XG5cbiAgICBpZiAoeTAgPCAwKSB7XG4gICAgICBhZGp1c3RlZFkwID0gMDtcbiAgICAgIGFkanVzdGVkWTEgKz0gTWF0aC5hYnMoeTApO1xuICAgIH1cblxuICAgIHRtcEN0eC50cmFuc2xhdGUoLShkaW14LnNjYWxlICogYWRqdXN0ZWRYMCksIC0oZGlteS5zY2FsZSAqIGFkanVzdGVkWTApKTtcbiAgICBncmFwaGljcy50cmFuc2Zvcm0oZGlteC5zY2FsZSwgMCwgMCwgZGlteS5zY2FsZSwgMCwgMCk7XG4gICAgdGhpcy5jbGlwQmJveChncmFwaGljcywgYWRqdXN0ZWRYMCwgYWRqdXN0ZWRZMCwgYWRqdXN0ZWRYMSwgYWRqdXN0ZWRZMSk7XG4gICAgZ3JhcGhpY3MuYmFzZVRyYW5zZm9ybSA9IGdyYXBoaWNzLmN0eC5tb3pDdXJyZW50VHJhbnNmb3JtLnNsaWNlKCk7XG4gICAgZ3JhcGhpY3MuZXhlY3V0ZU9wZXJhdG9yTGlzdChvcGVyYXRvckxpc3QpO1xuICAgIGdyYXBoaWNzLmVuZERyYXdpbmcoKTtcbiAgICByZXR1cm4ge1xuICAgICAgY2FudmFzOiB0bXBDYW52YXMuY2FudmFzLFxuICAgICAgc2NhbGVYOiBkaW14LnNjYWxlLFxuICAgICAgc2NhbGVZOiBkaW15LnNjYWxlLFxuICAgICAgb2Zmc2V0WDogYWRqdXN0ZWRYMCxcbiAgICAgIG9mZnNldFk6IGFkanVzdGVkWTBcbiAgICB9O1xuICB9XG5cbiAgZ2V0U2l6ZUFuZFNjYWxlKHN0ZXAsIHJlYWxPdXRwdXRTaXplLCBzY2FsZSkge1xuICAgIHN0ZXAgPSBNYXRoLmFicyhzdGVwKTtcbiAgICBjb25zdCBtYXhTaXplID0gTWF0aC5tYXgoVGlsaW5nUGF0dGVybi5NQVhfUEFUVEVSTl9TSVpFLCByZWFsT3V0cHV0U2l6ZSk7XG4gICAgbGV0IHNpemUgPSBNYXRoLmNlaWwoc3RlcCAqIHNjYWxlKTtcblxuICAgIGlmIChzaXplID49IG1heFNpemUpIHtcbiAgICAgIHNpemUgPSBtYXhTaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICBzY2FsZSA9IHNpemUgLyBzdGVwO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzY2FsZSxcbiAgICAgIHNpemVcbiAgICB9O1xuICB9XG5cbiAgY2xpcEJib3goZ3JhcGhpY3MsIHgwLCB5MCwgeDEsIHkxKSB7XG4gICAgY29uc3QgYmJveFdpZHRoID0geDEgLSB4MDtcbiAgICBjb25zdCBiYm94SGVpZ2h0ID0geTEgLSB5MDtcbiAgICBncmFwaGljcy5jdHgucmVjdCh4MCwgeTAsIGJib3hXaWR0aCwgYmJveEhlaWdodCk7XG4gICAgZ3JhcGhpY3MuY2xpcCgpO1xuICAgIGdyYXBoaWNzLmVuZFBhdGgoKTtcbiAgfVxuXG4gIHNldEZpbGxBbmRTdHJva2VTdHlsZVRvQ29udGV4dChncmFwaGljcywgcGFpbnRUeXBlLCBjb2xvcikge1xuICAgIGNvbnN0IGNvbnRleHQgPSBncmFwaGljcy5jdHgsXG4gICAgICAgICAgY3VycmVudCA9IGdyYXBoaWNzLmN1cnJlbnQ7XG5cbiAgICBzd2l0Y2ggKHBhaW50VHlwZSkge1xuICAgICAgY2FzZSBQYWludFR5cGUuQ09MT1JFRDpcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7XG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gY3R4LmZpbGxTdHlsZTtcbiAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGN0eC5zdHJva2VTdHlsZTtcbiAgICAgICAgY3VycmVudC5maWxsQ29sb3IgPSBjdHguZmlsbFN0eWxlO1xuICAgICAgICBjdXJyZW50LnN0cm9rZUNvbG9yID0gY3R4LnN0cm9rZVN0eWxlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBQYWludFR5cGUuVU5DT0xPUkVEOlxuICAgICAgICBjb25zdCBjc3NDb2xvciA9IF91dGlsLlV0aWwubWFrZUhleENvbG9yKGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0pO1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gY3NzQ29sb3I7XG4gICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBjc3NDb2xvcjtcbiAgICAgICAgY3VycmVudC5maWxsQ29sb3IgPSBjc3NDb2xvcjtcbiAgICAgICAgY3VycmVudC5zdHJva2VDb2xvciA9IGNzc0NvbG9yO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBVbnN1cHBvcnRlZCBwYWludCB0eXBlOiAke3BhaW50VHlwZX1gKTtcbiAgICB9XG4gIH1cblxuICBnZXRQYXR0ZXJuKGN0eCwgb3duZXIsIGludmVyc2UsIHBhdGhUeXBlKSB7XG4gICAgbGV0IG1hdHJpeCA9IGludmVyc2U7XG5cbiAgICBpZiAocGF0aFR5cGUgIT09IFBhdGhUeXBlLlNIQURJTkcpIHtcbiAgICAgIG1hdHJpeCA9IF91dGlsLlV0aWwudHJhbnNmb3JtKG1hdHJpeCwgb3duZXIuYmFzZVRyYW5zZm9ybSk7XG5cbiAgICAgIGlmICh0aGlzLm1hdHJpeCkge1xuICAgICAgICBtYXRyaXggPSBfdXRpbC5VdGlsLnRyYW5zZm9ybShtYXRyaXgsIHRoaXMubWF0cml4KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB0ZW1wb3JhcnlQYXR0ZXJuQ2FudmFzID0gdGhpcy5jcmVhdGVQYXR0ZXJuQ2FudmFzKG93bmVyKTtcbiAgICBsZXQgZG9tTWF0cml4ID0gbmV3IERPTU1hdHJpeChtYXRyaXgpO1xuICAgIGRvbU1hdHJpeCA9IGRvbU1hdHJpeC50cmFuc2xhdGUodGVtcG9yYXJ5UGF0dGVybkNhbnZhcy5vZmZzZXRYLCB0ZW1wb3JhcnlQYXR0ZXJuQ2FudmFzLm9mZnNldFkpO1xuICAgIGRvbU1hdHJpeCA9IGRvbU1hdHJpeC5zY2FsZSgxIC8gdGVtcG9yYXJ5UGF0dGVybkNhbnZhcy5zY2FsZVgsIDEgLyB0ZW1wb3JhcnlQYXR0ZXJuQ2FudmFzLnNjYWxlWSk7XG4gICAgY29uc3QgcGF0dGVybiA9IGN0eC5jcmVhdGVQYXR0ZXJuKHRlbXBvcmFyeVBhdHRlcm5DYW52YXMuY2FudmFzLCBcInJlcGVhdFwiKTtcblxuICAgIHRyeSB7XG4gICAgICBwYXR0ZXJuLnNldFRyYW5zZm9ybShkb21NYXRyaXgpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoYFRpbGluZ1BhdHRlcm4uZ2V0UGF0dGVybjogXCIke2V4Py5tZXNzYWdlfVwiLmApO1xuICAgIH1cblxuICAgIHJldHVybiBwYXR0ZXJuO1xuICB9XG5cbn1cblxuZXhwb3J0cy5UaWxpbmdQYXR0ZXJuID0gVGlsaW5nUGF0dGVybjtcblxuLyoqKi8gfSksXG4vKiAxMiAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5HbG9iYWxXb3JrZXJPcHRpb25zID0gdm9pZCAwO1xuY29uc3QgR2xvYmFsV29ya2VyT3B0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5leHBvcnRzLkdsb2JhbFdvcmtlck9wdGlvbnMgPSBHbG9iYWxXb3JrZXJPcHRpb25zO1xuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJQb3J0ID0gR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJQb3J0ID09PSB1bmRlZmluZWQgPyBudWxsIDogR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJQb3J0O1xuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmMgPSBHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYyA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IEdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjO1xuXG4vKioqLyB9KSxcbi8qIDEzICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLk1lc3NhZ2VIYW5kbGVyID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jb25zdCBDYWxsYmFja0tpbmQgPSB7XG4gIFVOS05PV046IDAsXG4gIERBVEE6IDEsXG4gIEVSUk9SOiAyXG59O1xuY29uc3QgU3RyZWFtS2luZCA9IHtcbiAgVU5LTk9XTjogMCxcbiAgQ0FOQ0VMOiAxLFxuICBDQU5DRUxfQ09NUExFVEU6IDIsXG4gIENMT1NFOiAzLFxuICBFTlFVRVVFOiA0LFxuICBFUlJPUjogNSxcbiAgUFVMTDogNixcbiAgUFVMTF9DT01QTEVURTogNyxcbiAgU1RBUlRfQ09NUExFVEU6IDhcbn07XG5cbmZ1bmN0aW9uIHdyYXBSZWFzb24ocmVhc29uKSB7XG4gIGlmICghKHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yIHx8IHR5cGVvZiByZWFzb24gPT09IFwib2JqZWN0XCIgJiYgcmVhc29uICE9PSBudWxsKSkge1xuICAgICgwLCBfdXRpbC53YXJuKSgnd3JhcFJlYXNvbjogRXhwZWN0ZWQgXCJyZWFzb25cIiB0byBiZSBhIChwb3NzaWJseSBjbG9uZWQpIEVycm9yLicpO1xuICAgIHJldHVybiByZWFzb247XG4gIH1cblxuICBzd2l0Y2ggKHJlYXNvbi5uYW1lKSB7XG4gICAgY2FzZSBcIkFib3J0RXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLkFib3J0RXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlKTtcblxuICAgIGNhc2UgXCJNaXNzaW5nUERGRXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24ocmVhc29uLm1lc3NhZ2UpO1xuXG4gICAgY2FzZSBcIlBhc3N3b3JkRXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlLCByZWFzb24uY29kZSk7XG5cbiAgICBjYXNlIFwiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbihyZWFzb24ubWVzc2FnZSwgcmVhc29uLnN0YXR1cyk7XG5cbiAgICBjYXNlIFwiVW5rbm93bkVycm9yRXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLlVua25vd25FcnJvckV4Y2VwdGlvbihyZWFzb24ubWVzc2FnZSwgcmVhc29uLmRldGFpbHMpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBuZXcgX3V0aWwuVW5rbm93bkVycm9yRXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlLCByZWFzb24udG9TdHJpbmcoKSk7XG4gIH1cbn1cblxuY2xhc3MgTWVzc2FnZUhhbmRsZXIge1xuICBjb25zdHJ1Y3Rvcihzb3VyY2VOYW1lLCB0YXJnZXROYW1lLCBjb21PYmopIHtcbiAgICB0aGlzLnNvdXJjZU5hbWUgPSBzb3VyY2VOYW1lO1xuICAgIHRoaXMudGFyZ2V0TmFtZSA9IHRhcmdldE5hbWU7XG4gICAgdGhpcy5jb21PYmogPSBjb21PYmo7XG4gICAgdGhpcy5jYWxsYmFja0lkID0gMTtcbiAgICB0aGlzLnN0cmVhbUlkID0gMTtcbiAgICB0aGlzLnN0cmVhbVNpbmtzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLmFjdGlvbkhhbmRsZXIgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgdGhpcy5fb25Db21PYmpPbk1lc3NhZ2UgPSBldmVudCA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gZXZlbnQuZGF0YTtcblxuICAgICAgaWYgKGRhdGEudGFyZ2V0TmFtZSAhPT0gdGhpcy5zb3VyY2VOYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc3RyZWFtKSB7XG4gICAgICAgIHRoaXMuX3Byb2Nlc3NTdHJlYW1NZXNzYWdlKGRhdGEpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tJZCA9IGRhdGEuY2FsbGJhY2tJZDtcbiAgICAgICAgY29uc3QgY2FwYWJpbGl0eSA9IHRoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbY2FsbGJhY2tJZF07XG5cbiAgICAgICAgaWYgKCFjYXBhYmlsaXR5KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVzb2x2ZSBjYWxsYmFjayAke2NhbGxiYWNrSWR9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBkZWxldGUgdGhpcy5jYWxsYmFja0NhcGFiaWxpdGllc1tjYWxsYmFja0lkXTtcblxuICAgICAgICBpZiAoZGF0YS5jYWxsYmFjayA9PT0gQ2FsbGJhY2tLaW5kLkRBVEEpIHtcbiAgICAgICAgICBjYXBhYmlsaXR5LnJlc29sdmUoZGF0YS5kYXRhKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmNhbGxiYWNrID09PSBDYWxsYmFja0tpbmQuRVJST1IpIHtcbiAgICAgICAgICBjYXBhYmlsaXR5LnJlamVjdCh3cmFwUmVhc29uKGRhdGEucmVhc29uKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBjYWxsYmFjayBjYXNlXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmFjdGlvbkhhbmRsZXJbZGF0YS5hY3Rpb25dO1xuXG4gICAgICBpZiAoIWFjdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYWN0aW9uIGZyb20gd29ya2VyOiAke2RhdGEuYWN0aW9ufWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jYWxsYmFja0lkKSB7XG4gICAgICAgIGNvbnN0IGNiU291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZTtcbiAgICAgICAgY29uc3QgY2JUYXJnZXROYW1lID0gZGF0YS5zb3VyY2VOYW1lO1xuICAgICAgICBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIHJlc29sdmUoYWN0aW9uKGRhdGEuZGF0YSkpO1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZTogY2JTb3VyY2VOYW1lLFxuICAgICAgICAgICAgdGFyZ2V0TmFtZTogY2JUYXJnZXROYW1lLFxuICAgICAgICAgICAgY2FsbGJhY2s6IENhbGxiYWNrS2luZC5EQVRBLFxuICAgICAgICAgICAgY2FsbGJhY2tJZDogZGF0YS5jYWxsYmFja0lkLFxuICAgICAgICAgICAgZGF0YTogcmVzdWx0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZTogY2JTb3VyY2VOYW1lLFxuICAgICAgICAgICAgdGFyZ2V0TmFtZTogY2JUYXJnZXROYW1lLFxuICAgICAgICAgICAgY2FsbGJhY2s6IENhbGxiYWNrS2luZC5FUlJPUixcbiAgICAgICAgICAgIGNhbGxiYWNrSWQ6IGRhdGEuY2FsbGJhY2tJZCxcbiAgICAgICAgICAgIHJlYXNvbjogd3JhcFJlYXNvbihyZWFzb24pXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnN0cmVhbUlkKSB7XG4gICAgICAgIHRoaXMuX2NyZWF0ZVN0cmVhbVNpbmsoZGF0YSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhY3Rpb24oZGF0YS5kYXRhKTtcbiAgICB9O1xuXG4gICAgY29tT2JqLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKTtcbiAgfVxuXG4gIG9uKGFjdGlvbk5hbWUsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBhaCA9IHRoaXMuYWN0aW9uSGFuZGxlcjtcblxuICAgIGlmIChhaFthY3Rpb25OYW1lXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBpcyBhbHJlYWR5IGFuIGFjdGlvbk5hbWUgY2FsbGVkIFwiJHthY3Rpb25OYW1lfVwiYCk7XG4gICAgfVxuXG4gICAgYWhbYWN0aW9uTmFtZV0gPSBoYW5kbGVyO1xuICB9XG5cbiAgc2VuZChhY3Rpb25OYW1lLCBkYXRhLCB0cmFuc2ZlcnMpIHtcbiAgICB0aGlzLmNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICBzb3VyY2VOYW1lOiB0aGlzLnNvdXJjZU5hbWUsXG4gICAgICB0YXJnZXROYW1lOiB0aGlzLnRhcmdldE5hbWUsXG4gICAgICBhY3Rpb246IGFjdGlvbk5hbWUsXG4gICAgICBkYXRhXG4gICAgfSwgdHJhbnNmZXJzKTtcbiAgfVxuXG4gIHNlbmRXaXRoUHJvbWlzZShhY3Rpb25OYW1lLCBkYXRhLCB0cmFuc2ZlcnMpIHtcbiAgICBjb25zdCBjYWxsYmFja0lkID0gdGhpcy5jYWxsYmFja0lkKys7XG4gICAgY29uc3QgY2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICB0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzW2NhbGxiYWNrSWRdID0gY2FwYWJpbGl0eTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgIHNvdXJjZU5hbWU6IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgdGFyZ2V0TmFtZTogdGhpcy50YXJnZXROYW1lLFxuICAgICAgICBhY3Rpb246IGFjdGlvbk5hbWUsXG4gICAgICAgIGNhbGxiYWNrSWQsXG4gICAgICAgIGRhdGFcbiAgICAgIH0sIHRyYW5zZmVycyk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGNhcGFiaWxpdHkucmVqZWN0KGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG5cbiAgc2VuZFdpdGhTdHJlYW0oYWN0aW9uTmFtZSwgZGF0YSwgcXVldWVpbmdTdHJhdGVneSwgdHJhbnNmZXJzKSB7XG4gICAgY29uc3Qgc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkKyssXG4gICAgICAgICAgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgICB0YXJnZXROYW1lID0gdGhpcy50YXJnZXROYW1lLFxuICAgICAgICAgIGNvbU9iaiA9IHRoaXMuY29tT2JqO1xuICAgIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgICAgc3RhcnQ6IGNvbnRyb2xsZXIgPT4ge1xuICAgICAgICBjb25zdCBzdGFydENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdID0ge1xuICAgICAgICAgIGNvbnRyb2xsZXIsXG4gICAgICAgICAgc3RhcnRDYWxsOiBzdGFydENhcGFiaWxpdHksXG4gICAgICAgICAgcHVsbENhbGw6IG51bGwsXG4gICAgICAgICAgY2FuY2VsQ2FsbDogbnVsbCxcbiAgICAgICAgICBpc0Nsb3NlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLFxuICAgICAgICAgIHN0cmVhbUlkLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgZGVzaXJlZFNpemU6IGNvbnRyb2xsZXIuZGVzaXJlZFNpemVcbiAgICAgICAgfSwgdHJhbnNmZXJzKTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0Q2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgfSxcbiAgICAgIHB1bGw6IGNvbnRyb2xsZXIgPT4ge1xuICAgICAgICBjb25zdCBwdWxsQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0ucHVsbENhbGwgPSBwdWxsQ2FwYWJpbGl0eTtcbiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlBVTEwsXG4gICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgZGVzaXJlZFNpemU6IGNvbnRyb2xsZXIuZGVzaXJlZFNpemVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwdWxsQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgfSxcbiAgICAgIGNhbmNlbDogcmVhc29uID0+IHtcbiAgICAgICAgKDAsIF91dGlsLmFzc2VydCkocmVhc29uIGluc3RhbmNlb2YgRXJyb3IsIFwiY2FuY2VsIG11c3QgaGF2ZSBhIHZhbGlkIHJlYXNvblwiKTtcbiAgICAgICAgY29uc3QgY2FuY2VsQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0uY2FuY2VsQ2FsbCA9IGNhbmNlbENhcGFiaWxpdHk7XG4gICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmlzQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLkNBTkNFTCxcbiAgICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24ocmVhc29uKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNhbmNlbENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgIH1cbiAgICB9LCBxdWV1ZWluZ1N0cmF0ZWd5KTtcbiAgfVxuXG4gIF9jcmVhdGVTdHJlYW1TaW5rKGRhdGEpIHtcbiAgICBjb25zdCBzdHJlYW1JZCA9IGRhdGEuc3RyZWFtSWQsXG4gICAgICAgICAgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgICB0YXJnZXROYW1lID0gZGF0YS5zb3VyY2VOYW1lLFxuICAgICAgICAgIGNvbU9iaiA9IHRoaXMuY29tT2JqO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzLFxuICAgICAgICAgIGFjdGlvbiA9IHRoaXMuYWN0aW9uSGFuZGxlcltkYXRhLmFjdGlvbl07XG4gICAgY29uc3Qgc3RyZWFtU2luayA9IHtcbiAgICAgIGVucXVldWUoY2h1bmssIHNpemUgPSAxLCB0cmFuc2ZlcnMpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDYW5jZWxsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0RGVzaXJlZFNpemUgPSB0aGlzLmRlc2lyZWRTaXplO1xuICAgICAgICB0aGlzLmRlc2lyZWRTaXplIC09IHNpemU7XG5cbiAgICAgICAgaWYgKGxhc3REZXNpcmVkU2l6ZSA+IDAgJiYgdGhpcy5kZXNpcmVkU2l6ZSA8PSAwKSB7XG4gICAgICAgICAgdGhpcy5zaW5rQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICB0aGlzLnJlYWR5ID0gdGhpcy5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLkVOUVVFVUUsXG4gICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgY2h1bmtcbiAgICAgICAgfSwgdHJhbnNmZXJzKTtcbiAgICAgIH0sXG5cbiAgICAgIGNsb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5pc0NhbmNlbGxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNDYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0xPU0UsXG4gICAgICAgICAgc3RyZWFtSWRcbiAgICAgICAgfSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmLnN0cmVhbVNpbmtzW3N0cmVhbUlkXTtcbiAgICAgIH0sXG5cbiAgICAgIGVycm9yKHJlYXNvbikge1xuICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KShyZWFzb24gaW5zdGFuY2VvZiBFcnJvciwgXCJlcnJvciBtdXN0IGhhdmUgYSB2YWxpZCByZWFzb25cIik7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDYW5jZWxsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLkVSUk9SLFxuICAgICAgICAgIHN0cmVhbUlkLFxuICAgICAgICAgIHJlYXNvbjogd3JhcFJlYXNvbihyZWFzb24pXG4gICAgICAgIH0pO1xuICAgICAgfSxcblxuICAgICAgc2lua0NhcGFiaWxpdHk6ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxcbiAgICAgIG9uUHVsbDogbnVsbCxcbiAgICAgIG9uQ2FuY2VsOiBudWxsLFxuICAgICAgaXNDYW5jZWxsZWQ6IGZhbHNlLFxuICAgICAgZGVzaXJlZFNpemU6IGRhdGEuZGVzaXJlZFNpemUsXG4gICAgICByZWFkeTogbnVsbFxuICAgIH07XG4gICAgc3RyZWFtU2luay5zaW5rQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgc3RyZWFtU2luay5yZWFkeSA9IHN0cmVhbVNpbmsuc2lua0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB0aGlzLnN0cmVhbVNpbmtzW3N0cmVhbUlkXSA9IHN0cmVhbVNpbms7XG4gICAgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmUoYWN0aW9uKGRhdGEuZGF0YSwgc3RyZWFtU2luaykpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlNUQVJUX0NPTVBMRVRFLFxuICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgc3VjY2VzczogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlNUQVJUX0NPTVBMRVRFLFxuICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgcmVhc29uOiB3cmFwUmVhc29uKHJlYXNvbilcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgX3Byb2Nlc3NTdHJlYW1NZXNzYWdlKGRhdGEpIHtcbiAgICBjb25zdCBzdHJlYW1JZCA9IGRhdGEuc3RyZWFtSWQsXG4gICAgICAgICAgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgICB0YXJnZXROYW1lID0gZGF0YS5zb3VyY2VOYW1lLFxuICAgICAgICAgIGNvbU9iaiA9IHRoaXMuY29tT2JqO1xuICAgIGNvbnN0IHN0cmVhbUNvbnRyb2xsZXIgPSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXSxcbiAgICAgICAgICBzdHJlYW1TaW5rID0gdGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF07XG5cbiAgICBzd2l0Y2ggKGRhdGEuc3RyZWFtKSB7XG4gICAgICBjYXNlIFN0cmVhbUtpbmQuU1RBUlRfQ09NUExFVEU6XG4gICAgICAgIGlmIChkYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBzdHJlYW1Db250cm9sbGVyLnN0YXJ0Q2FsbC5yZXNvbHZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyZWFtQ29udHJvbGxlci5zdGFydENhbGwucmVqZWN0KHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuUFVMTF9DT01QTEVURTpcbiAgICAgICAgaWYgKGRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgIHN0cmVhbUNvbnRyb2xsZXIucHVsbENhbGwucmVzb2x2ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0cmVhbUNvbnRyb2xsZXIucHVsbENhbGwucmVqZWN0KHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuUFVMTDpcbiAgICAgICAgaWYgKCFzdHJlYW1TaW5rKSB7XG4gICAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlBVTExfQ09NUExFVEUsXG4gICAgICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJlYW1TaW5rLmRlc2lyZWRTaXplIDw9IDAgJiYgZGF0YS5kZXNpcmVkU2l6ZSA+IDApIHtcbiAgICAgICAgICBzdHJlYW1TaW5rLnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0cmVhbVNpbmsuZGVzaXJlZFNpemUgPSBkYXRhLmRlc2lyZWRTaXplO1xuICAgICAgICBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIHJlc29sdmUoc3RyZWFtU2luay5vblB1bGwgJiYgc3RyZWFtU2luay5vblB1bGwoKSk7XG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICAgIHN0cmVhbTogU3RyZWFtS2luZC5QVUxMX0NPTVBMRVRFLFxuICAgICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuUFVMTF9DT01QTEVURSxcbiAgICAgICAgICAgIHN0cmVhbUlkLFxuICAgICAgICAgICAgcmVhc29uOiB3cmFwUmVhc29uKHJlYXNvbilcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuRU5RVUVVRTpcbiAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoc3RyZWFtQ29udHJvbGxlciwgXCJlbnF1ZXVlIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyXCIpO1xuXG4gICAgICAgIGlmIChzdHJlYW1Db250cm9sbGVyLmlzQ2xvc2VkKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzdHJlYW1Db250cm9sbGVyLmNvbnRyb2xsZXIuZW5xdWV1ZShkYXRhLmNodW5rKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU3RyZWFtS2luZC5DTE9TRTpcbiAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoc3RyZWFtQ29udHJvbGxlciwgXCJjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlclwiKTtcblxuICAgICAgICBpZiAoc3RyZWFtQ29udHJvbGxlci5pc0Nsb3NlZCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyZWFtQ29udHJvbGxlci5pc0Nsb3NlZCA9IHRydWU7XG4gICAgICAgIHN0cmVhbUNvbnRyb2xsZXIuY29udHJvbGxlci5jbG9zZSgpO1xuXG4gICAgICAgIHRoaXMuX2RlbGV0ZVN0cmVhbUNvbnRyb2xsZXIoc3RyZWFtQ29udHJvbGxlciwgc3RyZWFtSWQpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuRVJST1I6XG4gICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHN0cmVhbUNvbnRyb2xsZXIsIFwiZXJyb3Igc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXJcIik7XG4gICAgICAgIHN0cmVhbUNvbnRyb2xsZXIuY29udHJvbGxlci5lcnJvcih3cmFwUmVhc29uKGRhdGEucmVhc29uKSk7XG5cbiAgICAgICAgdGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihzdHJlYW1Db250cm9sbGVyLCBzdHJlYW1JZCk7XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU3RyZWFtS2luZC5DQU5DRUxfQ09NUExFVEU6XG4gICAgICAgIGlmIChkYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBzdHJlYW1Db250cm9sbGVyLmNhbmNlbENhbGwucmVzb2x2ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0cmVhbUNvbnRyb2xsZXIuY2FuY2VsQ2FsbC5yZWplY3Qod3JhcFJlYXNvbihkYXRhLnJlYXNvbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihzdHJlYW1Db250cm9sbGVyLCBzdHJlYW1JZCk7XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU3RyZWFtS2luZC5DQU5DRUw6XG4gICAgICAgIGlmICghc3RyZWFtU2luaykge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICByZXNvbHZlKHN0cmVhbVNpbmsub25DYW5jZWwgJiYgc3RyZWFtU2luay5vbkNhbmNlbCh3cmFwUmVhc29uKGRhdGEucmVhc29uKSkpO1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0FOQ0VMX0NPTVBMRVRFLFxuICAgICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0FOQ0VMX0NPTVBMRVRFLFxuICAgICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24ocmVhc29uKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgc3RyZWFtU2luay5zaW5rQ2FwYWJpbGl0eS5yZWplY3Qod3JhcFJlYXNvbihkYXRhLnJlYXNvbikpO1xuICAgICAgICBzdHJlYW1TaW5rLmlzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc3RyZWFtU2lua3Nbc3RyZWFtSWRdO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBzdHJlYW0gY2FzZVwiKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfZGVsZXRlU3RyZWFtQ29udHJvbGxlcihzdHJlYW1Db250cm9sbGVyLCBzdHJlYW1JZCkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbc3RyZWFtQ29udHJvbGxlci5zdGFydENhbGwgJiYgc3RyZWFtQ29udHJvbGxlci5zdGFydENhbGwucHJvbWlzZSwgc3RyZWFtQ29udHJvbGxlci5wdWxsQ2FsbCAmJiBzdHJlYW1Db250cm9sbGVyLnB1bGxDYWxsLnByb21pc2UsIHN0cmVhbUNvbnRyb2xsZXIuY2FuY2VsQ2FsbCAmJiBzdHJlYW1Db250cm9sbGVyLmNhbmNlbENhbGwucHJvbWlzZV0pO1xuICAgIGRlbGV0ZSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5jb21PYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5fb25Db21PYmpPbk1lc3NhZ2UpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5NZXNzYWdlSGFuZGxlciA9IE1lc3NhZ2VIYW5kbGVyO1xuXG4vKioqLyB9KSxcbi8qIDE0ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLk1ldGFkYXRhID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jbGFzcyBNZXRhZGF0YSB7XG4gICNtZXRhZGF0YU1hcDtcbiAgI2RhdGE7XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIHBhcnNlZERhdGEsXG4gICAgcmF3RGF0YVxuICB9KSB7XG4gICAgdGhpcy4jbWV0YWRhdGFNYXAgPSBwYXJzZWREYXRhO1xuICAgIHRoaXMuI2RhdGEgPSByYXdEYXRhO1xuICB9XG5cbiAgZ2V0UmF3KCkge1xuICAgIHJldHVybiB0aGlzLiNkYXRhO1xuICB9XG5cbiAgZ2V0KG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy4jbWV0YWRhdGFNYXAuZ2V0KG5hbWUpID8/IG51bGw7XG4gIH1cblxuICBnZXRBbGwoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5vYmplY3RGcm9tTWFwKSh0aGlzLiNtZXRhZGF0YU1hcCk7XG4gIH1cblxuICBoYXMobmFtZSkge1xuICAgIHJldHVybiB0aGlzLiNtZXRhZGF0YU1hcC5oYXMobmFtZSk7XG4gIH1cblxufVxuXG5leHBvcnRzLk1ldGFkYXRhID0gTWV0YWRhdGE7XG5cbi8qKiovIH0pLFxuLyogMTUgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuT3B0aW9uYWxDb250ZW50Q29uZmlnID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jbGFzcyBPcHRpb25hbENvbnRlbnRHcm91cCB7XG4gIGNvbnN0cnVjdG9yKG5hbWUsIGludGVudCkge1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmludGVudCA9IGludGVudDtcbiAgfVxuXG59XG5cbmNsYXNzIE9wdGlvbmFsQ29udGVudENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICB0aGlzLm5hbWUgPSBudWxsO1xuICAgIHRoaXMuY3JlYXRvciA9IG51bGw7XG4gICAgdGhpcy5fb3JkZXIgPSBudWxsO1xuICAgIHRoaXMuX2dyb3VwcyA9IG5ldyBNYXAoKTtcblxuICAgIGlmIChkYXRhID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5uYW1lID0gZGF0YS5uYW1lO1xuICAgIHRoaXMuY3JlYXRvciA9IGRhdGEuY3JlYXRvcjtcbiAgICB0aGlzLl9vcmRlciA9IGRhdGEub3JkZXI7XG5cbiAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIGRhdGEuZ3JvdXBzKSB7XG4gICAgICB0aGlzLl9ncm91cHMuc2V0KGdyb3VwLmlkLCBuZXcgT3B0aW9uYWxDb250ZW50R3JvdXAoZ3JvdXAubmFtZSwgZ3JvdXAuaW50ZW50KSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuYmFzZVN0YXRlID09PSBcIk9GRlwiKSB7XG4gICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIHRoaXMuX2dyb3Vwcykge1xuICAgICAgICBncm91cC52aXNpYmxlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBvbiBvZiBkYXRhLm9uKSB7XG4gICAgICB0aGlzLl9ncm91cHMuZ2V0KG9uKS52aXNpYmxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG9mZiBvZiBkYXRhLm9mZikge1xuICAgICAgdGhpcy5fZ3JvdXBzLmdldChvZmYpLnZpc2libGUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBfZXZhbHVhdGVWaXNpYmlsaXR5RXhwcmVzc2lvbihhcnJheSkge1xuICAgIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgIGlmIChsZW5ndGggPCAyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBvcGVyYXRvciA9IGFycmF5WzBdO1xuXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2ldO1xuICAgICAgbGV0IHN0YXRlO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50KSkge1xuICAgICAgICBzdGF0ZSA9IHRoaXMuX2V2YWx1YXRlVmlzaWJpbGl0eUV4cHJlc3Npb24oZWxlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2dyb3Vwcy5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgc3RhdGUgPSB0aGlzLl9ncm91cHMuZ2V0KGVsZW1lbnQpLnZpc2libGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYE9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAke2VsZW1lbnR9YCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XG4gICAgICAgIGNhc2UgXCJBbmRcIjpcbiAgICAgICAgICBpZiAoIXN0YXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIk9yXCI6XG4gICAgICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiTm90XCI6XG4gICAgICAgICAgcmV0dXJuICFzdGF0ZTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvcGVyYXRvciA9PT0gXCJBbmRcIjtcbiAgfVxuXG4gIGlzVmlzaWJsZShncm91cCkge1xuICAgIGlmICh0aGlzLl9ncm91cHMuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFncm91cCkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZGVmaW5lZC5cIik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAudHlwZSA9PT0gXCJPQ0dcIikge1xuICAgICAgaWYgKCF0aGlzLl9ncm91cHMuaGFzKGdyb3VwLmlkKSkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYE9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAke2dyb3VwLmlkfWApO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2dyb3Vwcy5nZXQoZ3JvdXAuaWQpLnZpc2libGU7XG4gICAgfSBlbHNlIGlmIChncm91cC50eXBlID09PSBcIk9DTURcIikge1xuICAgICAgaWYgKGdyb3VwLmV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V2YWx1YXRlVmlzaWJpbGl0eUV4cHJlc3Npb24oZ3JvdXAuZXhwcmVzc2lvbik7XG4gICAgICB9XG5cbiAgICAgIGlmICghZ3JvdXAucG9saWN5IHx8IGdyb3VwLnBvbGljeSA9PT0gXCJBbnlPblwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgZ3JvdXAuaWRzKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLl9ncm91cHMuaGFzKGlkKSkge1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogJHtpZH1gKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLl9ncm91cHMuZ2V0KGlkKS52aXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKGdyb3VwLnBvbGljeSA9PT0gXCJBbGxPblwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgZ3JvdXAuaWRzKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLl9ncm91cHMuaGFzKGlkKSkge1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogJHtpZH1gKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdGhpcy5fZ3JvdXBzLmdldChpZCkudmlzaWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChncm91cC5wb2xpY3kgPT09IFwiQW55T2ZmXCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBncm91cC5pZHMpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuX2dyb3Vwcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYE9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAke2lkfWApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCF0aGlzLl9ncm91cHMuZ2V0KGlkKS52aXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKGdyb3VwLnBvbGljeSA9PT0gXCJBbGxPZmZcIikge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGdyb3VwLmlkcykge1xuICAgICAgICAgIGlmICghdGhpcy5fZ3JvdXBzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZm91bmQ6ICR7aWR9YCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5fZ3JvdXBzLmdldChpZCkudmlzaWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwud2FybikoYFVua25vd24gb3B0aW9uYWwgY29udGVudCBwb2xpY3kgJHtncm91cC5wb2xpY3l9LmApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgKDAsIF91dGlsLndhcm4pKGBVbmtub3duIGdyb3VwIHR5cGUgJHtncm91cC50eXBlfS5gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHNldFZpc2liaWxpdHkoaWQsIHZpc2libGUgPSB0cnVlKSB7XG4gICAgaWYgKCF0aGlzLl9ncm91cHMuaGFzKGlkKSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogJHtpZH1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9ncm91cHMuZ2V0KGlkKS52aXNpYmxlID0gISF2aXNpYmxlO1xuICB9XG5cbiAgZ2V0T3JkZXIoKSB7XG4gICAgaWYgKCF0aGlzLl9ncm91cHMuc2l6ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX29yZGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fb3JkZXIuc2xpY2UoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9ncm91cHMua2V5cygpKTtcbiAgfVxuXG4gIGdldEdyb3VwcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZ3JvdXBzLnNpemUgPiAwID8gKDAsIF91dGlsLm9iamVjdEZyb21NYXApKHRoaXMuX2dyb3VwcykgOiBudWxsO1xuICB9XG5cbiAgZ2V0R3JvdXAoaWQpIHtcbiAgICByZXR1cm4gdGhpcy5fZ3JvdXBzLmdldChpZCkgfHwgbnVsbDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuT3B0aW9uYWxDb250ZW50Q29uZmlnID0gT3B0aW9uYWxDb250ZW50Q29uZmlnO1xuXG4vKioqLyB9KSxcbi8qIDE2ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlBERkRhdGFUcmFuc3BvcnRTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfZGlzcGxheV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oMSk7XG5cbmNsYXNzIFBERkRhdGFUcmFuc3BvcnRTdHJlYW0ge1xuICBjb25zdHJ1Y3RvcihwYXJhbXMsIHBkZkRhdGFSYW5nZVRyYW5zcG9ydCkge1xuICAgICgwLCBfdXRpbC5hc3NlcnQpKHBkZkRhdGFSYW5nZVRyYW5zcG9ydCwgJ1BERkRhdGFUcmFuc3BvcnRTdHJlYW0gLSBtaXNzaW5nIHJlcXVpcmVkIFwicGRmRGF0YVJhbmdlVHJhbnNwb3J0XCIgYXJndW1lbnQuJyk7XG4gICAgdGhpcy5fcXVldWVkQ2h1bmtzID0gW107XG4gICAgdGhpcy5fcHJvZ3Jlc3NpdmVEb25lID0gcGFyYW1zLnByb2dyZXNzaXZlRG9uZSB8fCBmYWxzZTtcbiAgICB0aGlzLl9jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZSA9IHBhcmFtcy5jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZSB8fCBudWxsO1xuICAgIGNvbnN0IGluaXRpYWxEYXRhID0gcGFyYW1zLmluaXRpYWxEYXRhO1xuXG4gICAgaWYgKGluaXRpYWxEYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheShpbml0aWFsRGF0YSkuYnVmZmVyO1xuXG4gICAgICB0aGlzLl9xdWV1ZWRDaHVua3MucHVzaChidWZmZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydCA9IHBkZkRhdGFSYW5nZVRyYW5zcG9ydDtcbiAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9ICFwYXJhbXMuZGlzYWJsZVN0cmVhbTtcbiAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gIXBhcmFtcy5kaXNhYmxlUmFuZ2U7XG4gICAgdGhpcy5fY29udGVudExlbmd0aCA9IHBhcmFtcy5sZW5ndGg7XG4gICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBudWxsO1xuICAgIHRoaXMuX3JhbmdlUmVhZGVycyA9IFtdO1xuXG4gICAgdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmFkZFJhbmdlTGlzdGVuZXIoKGJlZ2luLCBjaHVuaykgPT4ge1xuICAgICAgdGhpcy5fb25SZWNlaXZlRGF0YSh7XG4gICAgICAgIGJlZ2luLFxuICAgICAgICBjaHVua1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUHJvZ3Jlc3NMaXN0ZW5lcigobG9hZGVkLCB0b3RhbCkgPT4ge1xuICAgICAgdGhpcy5fb25Qcm9ncmVzcyh7XG4gICAgICAgIGxvYWRlZCxcbiAgICAgICAgdG90YWxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmFkZFByb2dyZXNzaXZlUmVhZExpc3RlbmVyKGNodW5rID0+IHtcbiAgICAgIHRoaXMuX29uUmVjZWl2ZURhdGEoe1xuICAgICAgICBjaHVua1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUHJvZ3Jlc3NpdmVEb25lTGlzdGVuZXIoKCkgPT4ge1xuICAgICAgdGhpcy5fb25Qcm9ncmVzc2l2ZURvbmUoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC50cmFuc3BvcnRSZWFkeSgpO1xuICB9XG5cbiAgX29uUmVjZWl2ZURhdGEoYXJncykge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGFyZ3MuY2h1bmspLmJ1ZmZlcjtcblxuICAgIGlmIChhcmdzLmJlZ2luID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcikge1xuICAgICAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlci5fZW5xdWV1ZShidWZmZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fcXVldWVkQ2h1bmtzLnB1c2goYnVmZmVyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZm91bmQgPSB0aGlzLl9yYW5nZVJlYWRlcnMuc29tZShmdW5jdGlvbiAocmFuZ2VSZWFkZXIpIHtcbiAgICAgICAgaWYgKHJhbmdlUmVhZGVyLl9iZWdpbiAhPT0gYXJncy5iZWdpbikge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJhbmdlUmVhZGVyLl9lbnF1ZXVlKGJ1ZmZlcik7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcblxuICAgICAgKDAsIF91dGlsLmFzc2VydCkoZm91bmQsIFwiX29uUmVjZWl2ZURhdGEgLSBubyBgUERGRGF0YVRyYW5zcG9ydFN0cmVhbVJhbmdlUmVhZGVyYCBpbnN0YW5jZSBmb3VuZC5cIik7XG4gICAgfVxuICB9XG5cbiAgZ2V0IF9wcm9ncmVzc2l2ZURhdGFMZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPy5fbG9hZGVkID8/IDA7XG4gIH1cblxuICBfb25Qcm9ncmVzcyhldnQpIHtcbiAgICBpZiAoZXZ0LnRvdGFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZpcnN0UmVhZGVyID0gdGhpcy5fcmFuZ2VSZWFkZXJzWzBdO1xuXG4gICAgICBpZiAoZmlyc3RSZWFkZXI/Lm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgZmlyc3RSZWFkZXIub25Qcm9ncmVzcyh7XG4gICAgICAgICAgbG9hZGVkOiBldnQubG9hZGVkXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmdWxsUmVhZGVyID0gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI7XG5cbiAgICAgIGlmIChmdWxsUmVhZGVyPy5vblByb2dyZXNzKSB7XG4gICAgICAgIGZ1bGxSZWFkZXIub25Qcm9ncmVzcyh7XG4gICAgICAgICAgbG9hZGVkOiBldnQubG9hZGVkLFxuICAgICAgICAgIHRvdGFsOiBldnQudG90YWxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX29uUHJvZ3Jlc3NpdmVEb25lKCkge1xuICAgIGlmICh0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcikge1xuICAgICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIucHJvZ3Jlc3NpdmVEb25lKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcHJvZ3Jlc3NpdmVEb25lID0gdHJ1ZTtcbiAgfVxuXG4gIF9yZW1vdmVSYW5nZVJlYWRlcihyZWFkZXIpIHtcbiAgICBjb25zdCBpID0gdGhpcy5fcmFuZ2VSZWFkZXJzLmluZGV4T2YocmVhZGVyKTtcblxuICAgIGlmIChpID49IDApIHtcbiAgICAgIHRoaXMuX3JhbmdlUmVhZGVycy5zcGxpY2UoaSwgMSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RnVsbFJlYWRlcigpIHtcbiAgICAoMCwgX3V0aWwuYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIsIFwiUERGRGF0YVRyYW5zcG9ydFN0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLlwiKTtcbiAgICBjb25zdCBxdWV1ZWRDaHVua3MgPSB0aGlzLl9xdWV1ZWRDaHVua3M7XG4gICAgdGhpcy5fcXVldWVkQ2h1bmtzID0gbnVsbDtcbiAgICByZXR1cm4gbmV3IFBERkRhdGFUcmFuc3BvcnRTdHJlYW1SZWFkZXIodGhpcywgcXVldWVkQ2h1bmtzLCB0aGlzLl9wcm9ncmVzc2l2ZURvbmUsIHRoaXMuX2NvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lKTtcbiAgfVxuXG4gIGdldFJhbmdlUmVhZGVyKGJlZ2luLCBlbmQpIHtcbiAgICBpZiAoZW5kIDw9IHRoaXMuX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IFBERkRhdGFUcmFuc3BvcnRTdHJlYW1SYW5nZVJlYWRlcih0aGlzLCBiZWdpbiwgZW5kKTtcblxuICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5yZXF1ZXN0RGF0YVJhbmdlKGJlZ2luLCBlbmQpO1xuXG4gICAgdGhpcy5fcmFuZ2VSZWFkZXJzLnB1c2gocmVhZGVyKTtcblxuICAgIHJldHVybiByZWFkZXI7XG4gIH1cblxuICBjYW5jZWxBbGxSZXF1ZXN0cyhyZWFzb24pIHtcbiAgICBpZiAodGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpIHtcbiAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVhZGVyIG9mIHRoaXMuX3JhbmdlUmVhZGVycy5zbGljZSgwKSkge1xuICAgICAgcmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgIH1cblxuICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5hYm9ydCgpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QREZEYXRhVHJhbnNwb3J0U3RyZWFtID0gUERGRGF0YVRyYW5zcG9ydFN0cmVhbTtcblxuY2xhc3MgUERGRGF0YVRyYW5zcG9ydFN0cmVhbVJlYWRlciB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSwgcXVldWVkQ2h1bmtzLCBwcm9ncmVzc2l2ZURvbmUgPSBmYWxzZSwgY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWUgPSBudWxsKSB7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuX2RvbmUgPSBwcm9ncmVzc2l2ZURvbmUgfHwgZmFsc2U7XG4gICAgdGhpcy5fZmlsZW5hbWUgPSAoMCwgX2Rpc3BsYXlfdXRpbHMuaXNQZGZGaWxlKShjb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZSkgPyBjb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZSA6IG51bGw7XG4gICAgdGhpcy5fcXVldWVkQ2h1bmtzID0gcXVldWVkQ2h1bmtzIHx8IFtdO1xuICAgIHRoaXMuX2xvYWRlZCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGNodW5rIG9mIHRoaXMuX3F1ZXVlZENodW5rcykge1xuICAgICAgdGhpcy5fbG9hZGVkICs9IGNodW5rLmJ5dGVMZW5ndGg7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVxdWVzdHMgPSBbXTtcbiAgICB0aGlzLl9oZWFkZXJzUmVhZHkgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBzdHJlYW0uX2Z1bGxSZXF1ZXN0UmVhZGVyID0gdGhpcztcbiAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsO1xuICB9XG5cbiAgX2VucXVldWUoY2h1bmspIHtcbiAgICBpZiAodGhpcy5fZG9uZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9yZXF1ZXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCByZXF1ZXN0Q2FwYWJpbGl0eSA9IHRoaXMuX3JlcXVlc3RzLnNoaWZ0KCk7XG5cbiAgICAgIHJlcXVlc3RDYXBhYmlsaXR5LnJlc29sdmUoe1xuICAgICAgICB2YWx1ZTogY2h1bmssXG4gICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcXVldWVkQ2h1bmtzLnB1c2goY2h1bmspO1xuICAgIH1cblxuICAgIHRoaXMuX2xvYWRlZCArPSBjaHVuay5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGhlYWRlcnNSZWFkeSgpIHtcbiAgICByZXR1cm4gdGhpcy5faGVhZGVyc1JlYWR5O1xuICB9XG5cbiAgZ2V0IGZpbGVuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9maWxlbmFtZTtcbiAgfVxuXG4gIGdldCBpc1JhbmdlU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdHJlYW0uX2lzUmFuZ2VTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0cmVhbS5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgY29udGVudExlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RyZWFtLl9jb250ZW50TGVuZ3RoO1xuICB9XG5cbiAgYXN5bmMgcmVhZCgpIHtcbiAgICBpZiAodGhpcy5fcXVldWVkQ2h1bmtzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5fcXVldWVkQ2h1bmtzLnNoaWZ0KCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiBjaHVuayxcbiAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2RvbmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG5cbiAgICB0aGlzLl9yZXF1ZXN0cy5wdXNoKHJlcXVlc3RDYXBhYmlsaXR5KTtcblxuICAgIHJldHVybiByZXF1ZXN0Q2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG5cbiAgY2FuY2VsKHJlYXNvbikge1xuICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0Q2FwYWJpbGl0eSBvZiB0aGlzLl9yZXF1ZXN0cykge1xuICAgICAgcmVxdWVzdENhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX3JlcXVlc3RzLmxlbmd0aCA9IDA7XG4gIH1cblxuICBwcm9ncmVzc2l2ZURvbmUoKSB7XG4gICAgaWYgKHRoaXMuX2RvbmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcbiAgfVxuXG59XG5cbmNsYXNzIFBERkRhdGFUcmFuc3BvcnRTdHJlYW1SYW5nZVJlYWRlciB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSwgYmVnaW4sIGVuZCkge1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLl9iZWdpbiA9IGJlZ2luO1xuICAgIHRoaXMuX2VuZCA9IGVuZDtcbiAgICB0aGlzLl9xdWV1ZWRDaHVuayA9IG51bGw7XG4gICAgdGhpcy5fcmVxdWVzdHMgPSBbXTtcbiAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgfVxuXG4gIF9lbnF1ZXVlKGNodW5rKSB7XG4gICAgaWYgKHRoaXMuX2RvbmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcmVxdWVzdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLl9xdWV1ZWRDaHVuayA9IGNodW5rO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXF1ZXN0c0NhcGFiaWxpdHkgPSB0aGlzLl9yZXF1ZXN0cy5zaGlmdCgpO1xuXG4gICAgICByZXF1ZXN0c0NhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgIHZhbHVlOiBjaHVuayxcbiAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RDYXBhYmlsaXR5IG9mIHRoaXMuX3JlcXVlc3RzKSB7XG4gICAgICAgIHJlcXVlc3RDYXBhYmlsaXR5LnJlc29sdmUoe1xuICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcmVxdWVzdHMubGVuZ3RoID0gMDtcbiAgICB9XG5cbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcblxuICAgIHRoaXMuX3N0cmVhbS5fcmVtb3ZlUmFuZ2VSZWFkZXIodGhpcyk7XG4gIH1cblxuICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgcmVhZCgpIHtcbiAgICBpZiAodGhpcy5fcXVldWVkQ2h1bmspIHtcbiAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5fcXVldWVkQ2h1bms7XG4gICAgICB0aGlzLl9xdWV1ZWRDaHVuayA9IG51bGw7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogY2h1bmssXG4gICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9kb25lKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICBkb25lOiB0cnVlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuXG4gICAgdGhpcy5fcmVxdWVzdHMucHVzaChyZXF1ZXN0Q2FwYWJpbGl0eSk7XG5cbiAgICByZXR1cm4gcmVxdWVzdENhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIGNhbmNlbChyZWFzb24pIHtcbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcblxuICAgIGZvciAoY29uc3QgcmVxdWVzdENhcGFiaWxpdHkgb2YgdGhpcy5fcmVxdWVzdHMpIHtcbiAgICAgIHJlcXVlc3RDYXBhYmlsaXR5LnJlc29sdmUoe1xuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICBkb25lOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9yZXF1ZXN0cy5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fc3RyZWFtLl9yZW1vdmVSYW5nZVJlYWRlcih0aGlzKTtcbiAgfVxuXG59XG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuWGZhVGV4dCA9IHZvaWQgMDtcblxuY2xhc3MgWGZhVGV4dCB7XG4gIHN0YXRpYyB0ZXh0Q29udGVudCh4ZmEpIHtcbiAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgIGNvbnN0IG91dHB1dCA9IHtcbiAgICAgIGl0ZW1zLFxuICAgICAgc3R5bGVzOiBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHdhbGsobm9kZSkge1xuICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IHN0ciA9IG51bGw7XG4gICAgICBjb25zdCBuYW1lID0gbm9kZS5uYW1lO1xuXG4gICAgICBpZiAobmFtZSA9PT0gXCIjdGV4dFwiKSB7XG4gICAgICAgIHN0ciA9IG5vZGUudmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKCFYZmFUZXh0LnNob3VsZEJ1aWxkVGV4dChuYW1lKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKG5vZGU/LmF0dHJpYnV0ZXM/LnRleHRDb250ZW50KSB7XG4gICAgICAgIHN0ciA9IG5vZGUuYXR0cmlidXRlcy50ZXh0Q29udGVudDtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS52YWx1ZSkge1xuICAgICAgICBzdHIgPSBub2RlLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RyICE9PSBudWxsKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgIHN0clxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIHdhbGsoY2hpbGQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHdhbGsoeGZhKTtcbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgc3RhdGljIHNob3VsZEJ1aWxkVGV4dChuYW1lKSB7XG4gICAgcmV0dXJuICEobmFtZSA9PT0gXCJ0ZXh0YXJlYVwiIHx8IG5hbWUgPT09IFwiaW5wdXRcIiB8fCBuYW1lID09PSBcIm9wdGlvblwiIHx8IG5hbWUgPT09IFwic2VsZWN0XCIpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5YZmFUZXh0ID0gWGZhVGV4dDtcblxuLyoqKi8gfSksXG4vKiAxOCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5Bbm5vdGF0aW9uTGF5ZXIgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfZGlzcGxheV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oMSk7XG5cbnZhciBfYW5ub3RhdGlvbl9zdG9yYWdlID0gX193X3BkZmpzX3JlcXVpcmVfXyg5KTtcblxudmFyIF9zY3JpcHRpbmdfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE5KTtcblxudmFyIF94ZmFfbGF5ZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIwKTtcblxuY29uc3QgREVGQVVMVF9UQUJfSU5ERVggPSAxMDAwO1xuY29uc3QgR2V0RWxlbWVudHNCeU5hbWVTZXQgPSBuZXcgV2Vha1NldCgpO1xuXG5jbGFzcyBBbm5vdGF0aW9uRWxlbWVudEZhY3Rvcnkge1xuICBzdGF0aWMgY3JlYXRlKHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBzdWJ0eXBlID0gcGFyYW1ldGVycy5kYXRhLmFubm90YXRpb25UeXBlO1xuXG4gICAgc3dpdGNoIChzdWJ0eXBlKSB7XG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLkxJTks6XG4gICAgICAgIHJldHVybiBuZXcgTGlua0Fubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLlRFWFQ6XG4gICAgICAgIHJldHVybiBuZXcgVGV4dEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLldJREdFVDpcbiAgICAgICAgY29uc3QgZmllbGRUeXBlID0gcGFyYW1ldGVycy5kYXRhLmZpZWxkVHlwZTtcblxuICAgICAgICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xuICAgICAgICAgIGNhc2UgXCJUeFwiOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBUZXh0V2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICBjYXNlIFwiQnRuXCI6XG4gICAgICAgICAgICBpZiAocGFyYW1ldGVycy5kYXRhLnJhZGlvQnV0dG9uKSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgUmFkaW9CdXR0b25XaWRnZXRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1ldGVycy5kYXRhLmNoZWNrQm94KSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgQ2hlY2tib3hXaWRnZXRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQdXNoQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICBjYXNlIFwiQ2hcIjpcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFdpZGdldEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLlBPUFVQOlxuICAgICAgICByZXR1cm4gbmV3IFBvcHVwQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuRlJFRVRFWFQ6XG4gICAgICAgIHJldHVybiBuZXcgRnJlZVRleHRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5MSU5FOlxuICAgICAgICByZXR1cm4gbmV3IExpbmVBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5TUVVBUkU6XG4gICAgICAgIHJldHVybiBuZXcgU3F1YXJlQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuQ0lSQ0xFOlxuICAgICAgICByZXR1cm4gbmV3IENpcmNsZUFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLlBPTFlMSU5FOlxuICAgICAgICByZXR1cm4gbmV3IFBvbHlsaW5lQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuQ0FSRVQ6XG4gICAgICAgIHJldHVybiBuZXcgQ2FyZXRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5JTks6XG4gICAgICAgIHJldHVybiBuZXcgSW5rQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuUE9MWUdPTjpcbiAgICAgICAgcmV0dXJuIG5ldyBQb2x5Z29uQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuSElHSExJR0hUOlxuICAgICAgICByZXR1cm4gbmV3IEhpZ2hsaWdodEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLlVOREVSTElORTpcbiAgICAgICAgcmV0dXJuIG5ldyBVbmRlcmxpbmVBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5TUVVJR0dMWTpcbiAgICAgICAgcmV0dXJuIG5ldyBTcXVpZ2dseUFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLlNUUklLRU9VVDpcbiAgICAgICAgcmV0dXJuIG5ldyBTdHJpa2VPdXRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5TVEFNUDpcbiAgICAgICAgcmV0dXJuIG5ldyBTdGFtcEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLkZJTEVBVFRBQ0hNRU5UOlxuICAgICAgICByZXR1cm4gbmV3IEZpbGVBdHRhY2htZW50QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBuZXcgQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzLCB7XG4gICAgaXNSZW5kZXJhYmxlID0gZmFsc2UsXG4gICAgaWdub3JlQm9yZGVyID0gZmFsc2UsXG4gICAgY3JlYXRlUXVhZHJpbGF0ZXJhbHMgPSBmYWxzZVxuICB9ID0ge30pIHtcbiAgICB0aGlzLmlzUmVuZGVyYWJsZSA9IGlzUmVuZGVyYWJsZTtcbiAgICB0aGlzLmRhdGEgPSBwYXJhbWV0ZXJzLmRhdGE7XG4gICAgdGhpcy5sYXllciA9IHBhcmFtZXRlcnMubGF5ZXI7XG4gICAgdGhpcy5wYWdlID0gcGFyYW1ldGVycy5wYWdlO1xuICAgIHRoaXMudmlld3BvcnQgPSBwYXJhbWV0ZXJzLnZpZXdwb3J0O1xuICAgIHRoaXMubGlua1NlcnZpY2UgPSBwYXJhbWV0ZXJzLmxpbmtTZXJ2aWNlO1xuICAgIHRoaXMuZG93bmxvYWRNYW5hZ2VyID0gcGFyYW1ldGVycy5kb3dubG9hZE1hbmFnZXI7XG4gICAgdGhpcy5pbWFnZVJlc291cmNlc1BhdGggPSBwYXJhbWV0ZXJzLmltYWdlUmVzb3VyY2VzUGF0aDtcbiAgICB0aGlzLnJlbmRlckZvcm1zID0gcGFyYW1ldGVycy5yZW5kZXJGb3JtcztcbiAgICB0aGlzLnN2Z0ZhY3RvcnkgPSBwYXJhbWV0ZXJzLnN2Z0ZhY3Rvcnk7XG4gICAgdGhpcy5hbm5vdGF0aW9uU3RvcmFnZSA9IHBhcmFtZXRlcnMuYW5ub3RhdGlvblN0b3JhZ2U7XG4gICAgdGhpcy5lbmFibGVTY3JpcHRpbmcgPSBwYXJhbWV0ZXJzLmVuYWJsZVNjcmlwdGluZztcbiAgICB0aGlzLmhhc0pTQWN0aW9ucyA9IHBhcmFtZXRlcnMuaGFzSlNBY3Rpb25zO1xuICAgIHRoaXMuX2ZpZWxkT2JqZWN0cyA9IHBhcmFtZXRlcnMuZmllbGRPYmplY3RzO1xuICAgIHRoaXMuX21vdXNlU3RhdGUgPSBwYXJhbWV0ZXJzLm1vdXNlU3RhdGU7XG5cbiAgICBpZiAoaXNSZW5kZXJhYmxlKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lciA9IHRoaXMuX2NyZWF0ZUNvbnRhaW5lcihpZ25vcmVCb3JkZXIpO1xuICAgIH1cblxuICAgIGlmIChjcmVhdGVRdWFkcmlsYXRlcmFscykge1xuICAgICAgdGhpcy5xdWFkcmlsYXRlcmFscyA9IHRoaXMuX2NyZWF0ZVF1YWRyaWxhdGVyYWxzKGlnbm9yZUJvcmRlcik7XG4gICAgfVxuICB9XG5cbiAgX2NyZWF0ZUNvbnRhaW5lcihpZ25vcmVCb3JkZXIgPSBmYWxzZSkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGEsXG4gICAgICAgICAgcGFnZSA9IHRoaXMucGFnZSxcbiAgICAgICAgICB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnQ7XG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNlY3Rpb25cIik7XG4gICAgbGV0IHdpZHRoID0gZGF0YS5yZWN0WzJdIC0gZGF0YS5yZWN0WzBdO1xuICAgIGxldCBoZWlnaHQgPSBkYXRhLnJlY3RbM10gLSBkYXRhLnJlY3RbMV07XG4gICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtYW5ub3RhdGlvbi1pZFwiLCBkYXRhLmlkKTtcblxuICAgIGNvbnN0IHJlY3QgPSBfdXRpbC5VdGlsLm5vcm1hbGl6ZVJlY3QoW2RhdGEucmVjdFswXSwgcGFnZS52aWV3WzNdIC0gZGF0YS5yZWN0WzFdICsgcGFnZS52aWV3WzFdLCBkYXRhLnJlY3RbMl0sIHBhZ2Uudmlld1szXSAtIGRhdGEucmVjdFszXSArIHBhZ2Uudmlld1sxXV0pO1xuXG4gICAgaWYgKGRhdGEuaGFzT3duQ2FudmFzKSB7XG4gICAgICBjb25zdCB0cmFuc2Zvcm0gPSB2aWV3cG9ydC50cmFuc2Zvcm0uc2xpY2UoKTtcblxuICAgICAgY29uc3QgW3NjYWxlWCwgc2NhbGVZXSA9IF91dGlsLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUodHJhbnNmb3JtKTtcblxuICAgICAgd2lkdGggPSBNYXRoLmNlaWwod2lkdGggKiBzY2FsZVgpO1xuICAgICAgaGVpZ2h0ID0gTWF0aC5jZWlsKGhlaWdodCAqIHNjYWxlWSk7XG4gICAgICByZWN0WzBdICo9IHNjYWxlWDtcbiAgICAgIHJlY3RbMV0gKj0gc2NhbGVZO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICB0cmFuc2Zvcm1baV0gPSBNYXRoLnNpZ24odHJhbnNmb3JtW2ldKTtcbiAgICAgIH1cblxuICAgICAgY29udGFpbmVyLnN0eWxlLnRyYW5zZm9ybSA9IGBtYXRyaXgoJHt0cmFuc2Zvcm0uam9pbihcIixcIil9KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm0gPSBgbWF0cml4KCR7dmlld3BvcnQudHJhbnNmb3JtLmpvaW4oXCIsXCIpfSlgO1xuICAgIH1cblxuICAgIGNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSBgJHstcmVjdFswXX1weCAkey1yZWN0WzFdfXB4YDtcblxuICAgIGlmICghaWdub3JlQm9yZGVyICYmIGRhdGEuYm9yZGVyU3R5bGUud2lkdGggPiAwKSB7XG4gICAgICBjb250YWluZXIuc3R5bGUuYm9yZGVyV2lkdGggPSBgJHtkYXRhLmJvcmRlclN0eWxlLndpZHRofXB4YDtcblxuICAgICAgaWYgKGRhdGEuYm9yZGVyU3R5bGUuc3R5bGUgIT09IF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuVU5ERVJMSU5FKSB7XG4gICAgICAgIHdpZHRoIC09IDIgKiBkYXRhLmJvcmRlclN0eWxlLndpZHRoO1xuICAgICAgICBoZWlnaHQgLT0gMiAqIGRhdGEuYm9yZGVyU3R5bGUud2lkdGg7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhvcml6b250YWxSYWRpdXMgPSBkYXRhLmJvcmRlclN0eWxlLmhvcml6b250YWxDb3JuZXJSYWRpdXM7XG4gICAgICBjb25zdCB2ZXJ0aWNhbFJhZGl1cyA9IGRhdGEuYm9yZGVyU3R5bGUudmVydGljYWxDb3JuZXJSYWRpdXM7XG5cbiAgICAgIGlmIChob3Jpem9udGFsUmFkaXVzID4gMCB8fCB2ZXJ0aWNhbFJhZGl1cyA+IDApIHtcbiAgICAgICAgY29uc3QgcmFkaXVzID0gYCR7aG9yaXpvbnRhbFJhZGl1c31weCAvICR7dmVydGljYWxSYWRpdXN9cHhgO1xuICAgICAgICBjb250YWluZXIuc3R5bGUuYm9yZGVyUmFkaXVzID0gcmFkaXVzO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGEuYm9yZGVyU3R5bGUuc3R5bGUpIHtcbiAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlNPTElEOlxuICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5ib3JkZXJTdHlsZSA9IFwic29saWRcIjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuREFTSEVEOlxuICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5ib3JkZXJTdHlsZSA9IFwiZGFzaGVkXCI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLkJFVkVMRUQ6XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5pbXBsZW1lbnRlZCBib3JkZXIgc3R5bGU6IGJldmVsZWRcIik7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLklOU0VUOlxuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlVuaW1wbGVtZW50ZWQgYm9yZGVyIHN0eWxlOiBpbnNldFwiKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuVU5ERVJMSU5FOlxuICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5ib3JkZXJCb3R0b21TdHlsZSA9IFwic29saWRcIjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBib3JkZXJDb2xvciA9IGRhdGEuYm9yZGVyQ29sb3IgfHwgZGF0YS5jb2xvciB8fCBudWxsO1xuXG4gICAgICBpZiAoYm9yZGVyQ29sb3IpIHtcbiAgICAgICAgY29udGFpbmVyLnN0eWxlLmJvcmRlckNvbG9yID0gX3V0aWwuVXRpbC5tYWtlSGV4Q29sb3IoZGF0YS5jb2xvclswXSB8IDAsIGRhdGEuY29sb3JbMV0gfCAwLCBkYXRhLmNvbG9yWzJdIHwgMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250YWluZXIuc3R5bGUuYm9yZGVyV2lkdGggPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gYCR7cmVjdFswXX1weGA7XG4gICAgY29udGFpbmVyLnN0eWxlLnRvcCA9IGAke3JlY3RbMV19cHhgO1xuXG4gICAgaWYgKGRhdGEuaGFzT3duQ2FudmFzKSB7XG4gICAgICBjb250YWluZXIuc3R5bGUud2lkdGggPSBjb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gXCJhdXRvXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRhaW5lci5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcbiAgICAgIGNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xuICAgIH1cblxuICAgIHJldHVybiBjb250YWluZXI7XG4gIH1cblxuICBfY3JlYXRlUXVhZHJpbGF0ZXJhbHMoaWdub3JlQm9yZGVyID0gZmFsc2UpIHtcbiAgICBpZiAoIXRoaXMuZGF0YS5xdWFkUG9pbnRzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBxdWFkcmlsYXRlcmFscyA9IFtdO1xuICAgIGNvbnN0IHNhdmVkUmVjdCA9IHRoaXMuZGF0YS5yZWN0O1xuXG4gICAgZm9yIChjb25zdCBxdWFkUG9pbnQgb2YgdGhpcy5kYXRhLnF1YWRQb2ludHMpIHtcbiAgICAgIHRoaXMuZGF0YS5yZWN0ID0gW3F1YWRQb2ludFsyXS54LCBxdWFkUG9pbnRbMl0ueSwgcXVhZFBvaW50WzFdLngsIHF1YWRQb2ludFsxXS55XTtcbiAgICAgIHF1YWRyaWxhdGVyYWxzLnB1c2godGhpcy5fY3JlYXRlQ29udGFpbmVyKGlnbm9yZUJvcmRlcikpO1xuICAgIH1cblxuICAgIHRoaXMuZGF0YS5yZWN0ID0gc2F2ZWRSZWN0O1xuICAgIHJldHVybiBxdWFkcmlsYXRlcmFscztcbiAgfVxuXG4gIF9jcmVhdGVQb3B1cCh0cmlnZ2VyLCBkYXRhKSB7XG4gICAgbGV0IGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyO1xuXG4gICAgaWYgKHRoaXMucXVhZHJpbGF0ZXJhbHMpIHtcbiAgICAgIHRyaWdnZXIgPSB0cmlnZ2VyIHx8IHRoaXMucXVhZHJpbGF0ZXJhbHM7XG4gICAgICBjb250YWluZXIgPSB0aGlzLnF1YWRyaWxhdGVyYWxzWzBdO1xuICAgIH1cblxuICAgIGlmICghdHJpZ2dlcikge1xuICAgICAgdHJpZ2dlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0cmlnZ2VyLnN0eWxlLmhlaWdodCA9IGNvbnRhaW5lci5zdHlsZS5oZWlnaHQ7XG4gICAgICB0cmlnZ2VyLnN0eWxlLndpZHRoID0gY29udGFpbmVyLnN0eWxlLndpZHRoO1xuICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRyaWdnZXIpO1xuICAgIH1cblxuICAgIGNvbnN0IHBvcHVwRWxlbWVudCA9IG5ldyBQb3B1cEVsZW1lbnQoe1xuICAgICAgY29udGFpbmVyLFxuICAgICAgdHJpZ2dlcixcbiAgICAgIGNvbG9yOiBkYXRhLmNvbG9yLFxuICAgICAgdGl0bGVPYmo6IGRhdGEudGl0bGVPYmosXG4gICAgICBtb2RpZmljYXRpb25EYXRlOiBkYXRhLm1vZGlmaWNhdGlvbkRhdGUsXG4gICAgICBjb250ZW50c09iajogZGF0YS5jb250ZW50c09iaixcbiAgICAgIHJpY2hUZXh0OiBkYXRhLnJpY2hUZXh0LFxuICAgICAgaGlkZVdyYXBwZXI6IHRydWVcbiAgICB9KTtcbiAgICBjb25zdCBwb3B1cCA9IHBvcHVwRWxlbWVudC5yZW5kZXIoKTtcbiAgICBwb3B1cC5zdHlsZS5sZWZ0ID0gY29udGFpbmVyLnN0eWxlLndpZHRoO1xuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChwb3B1cCk7XG4gIH1cblxuICBfcmVuZGVyUXVhZHJpbGF0ZXJhbHMoY2xhc3NOYW1lKSB7XG4gICAgZm9yIChjb25zdCBxdWFkcmlsYXRlcmFsIG9mIHRoaXMucXVhZHJpbGF0ZXJhbHMpIHtcbiAgICAgIHF1YWRyaWxhdGVyYWwuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnF1YWRyaWxhdGVyYWxzO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYEFubm90YXRpb25FbGVtZW50LnJlbmRlcmAgY2FsbGVkXCIpO1xuICB9XG5cbiAgX2dldEVsZW1lbnRzQnlOYW1lKG5hbWUsIHNraXBJZCA9IG51bGwpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBbXTtcblxuICAgIGlmICh0aGlzLl9maWVsZE9iamVjdHMpIHtcbiAgICAgIGNvbnN0IGZpZWxkT2JqID0gdGhpcy5fZmllbGRPYmplY3RzW25hbWVdO1xuXG4gICAgICBpZiAoZmllbGRPYmopIHtcbiAgICAgICAgZm9yIChjb25zdCB7XG4gICAgICAgICAgcGFnZSxcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBleHBvcnRWYWx1ZXNcbiAgICAgICAgfSBvZiBmaWVsZE9iaikge1xuICAgICAgICAgIGlmIChwYWdlID09PSAtMSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGlkID09PSBza2lwSWQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGV4cG9ydFZhbHVlID0gdHlwZW9mIGV4cG9ydFZhbHVlcyA9PT0gXCJzdHJpbmdcIiA/IGV4cG9ydFZhbHVlcyA6IG51bGw7XG4gICAgICAgICAgY29uc3QgZG9tRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblxuICAgICAgICAgIGlmIChkb21FbGVtZW50ICYmICFHZXRFbGVtZW50c0J5TmFtZVNldC5oYXMoZG9tRWxlbWVudCkpIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgX2dldEVsZW1lbnRzQnlOYW1lIC0gZWxlbWVudCBub3QgYWxsb3dlZDogJHtpZH1gKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgZXhwb3J0VmFsdWUsXG4gICAgICAgICAgICBkb21FbGVtZW50XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGRvbUVsZW1lbnQgb2YgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUobmFtZSkpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgaWQsXG4gICAgICAgIGV4cG9ydFZhbHVlXG4gICAgICB9ID0gZG9tRWxlbWVudDtcblxuICAgICAgaWYgKGlkID09PSBza2lwSWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghR2V0RWxlbWVudHNCeU5hbWVTZXQuaGFzKGRvbUVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmaWVsZHMucHVzaCh7XG4gICAgICAgIGlkLFxuICAgICAgICBleHBvcnRWYWx1ZSxcbiAgICAgICAgZG9tRWxlbWVudFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpZWxkcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGxhdGZvcm0oKSB7XG4gICAgY29uc3QgcGxhdGZvcm0gPSB0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiID8gbmF2aWdhdG9yLnBsYXRmb3JtIDogXCJcIjtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJwbGF0Zm9ybVwiLCB7XG4gICAgICBpc1dpbjogcGxhdGZvcm0uaW5jbHVkZXMoXCJXaW5cIiksXG4gICAgICBpc01hYzogcGxhdGZvcm0uaW5jbHVkZXMoXCJNYWNcIilcbiAgICB9KTtcbiAgfVxuXG59XG5cbmNsYXNzIExpbmtBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycywgb3B0aW9ucyA9IG51bGwpIHtcbiAgICBjb25zdCBpc1JlbmRlcmFibGUgPSAhIShwYXJhbWV0ZXJzLmRhdGEudXJsIHx8IHBhcmFtZXRlcnMuZGF0YS5kZXN0IHx8IHBhcmFtZXRlcnMuZGF0YS5hY3Rpb24gfHwgcGFyYW1ldGVycy5kYXRhLmlzVG9vbHRpcE9ubHkgfHwgcGFyYW1ldGVycy5kYXRhLnJlc2V0Rm9ybSB8fCBwYXJhbWV0ZXJzLmRhdGEuYWN0aW9ucyAmJiAocGFyYW1ldGVycy5kYXRhLmFjdGlvbnMuQWN0aW9uIHx8IHBhcmFtZXRlcnMuZGF0YS5hY3Rpb25zW1wiTW91c2UgVXBcIl0gfHwgcGFyYW1ldGVycy5kYXRhLmFjdGlvbnNbXCJNb3VzZSBEb3duXCJdKSk7XG4gICAgc3VwZXIocGFyYW1ldGVycywge1xuICAgICAgaXNSZW5kZXJhYmxlLFxuICAgICAgaWdub3JlQm9yZGVyOiAhIW9wdGlvbnM/Lmlnbm9yZUJvcmRlcixcbiAgICAgIGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZGF0YSxcbiAgICAgIGxpbmtTZXJ2aWNlXG4gICAgfSA9IHRoaXM7XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuXG4gICAgaWYgKGRhdGEudXJsKSB7XG4gICAgICBpZiAoIWxpbmtTZXJ2aWNlLmFkZExpbmtBdHRyaWJ1dGVzKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIkxpbmtBbm5vdGF0aW9uRWxlbWVudC5yZW5kZXIgLSBtaXNzaW5nIGBhZGRMaW5rQXR0cmlidXRlc2AtbWV0aG9kIG9uIHRoZSBgbGlua1NlcnZpY2VgLWluc3RhbmNlLlwiKTtcbiAgICAgIH1cblxuICAgICAgbGlua1NlcnZpY2UuYWRkTGlua0F0dHJpYnV0ZXM/LihsaW5rLCBkYXRhLnVybCwgZGF0YS5uZXdXaW5kb3cpO1xuICAgIH0gZWxzZSBpZiAoZGF0YS5hY3Rpb24pIHtcbiAgICAgIHRoaXMuX2JpbmROYW1lZEFjdGlvbihsaW5rLCBkYXRhLmFjdGlvbik7XG4gICAgfSBlbHNlIGlmIChkYXRhLmRlc3QpIHtcbiAgICAgIHRoaXMuX2JpbmRMaW5rKGxpbmssIGRhdGEuZGVzdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBoYXNDbGlja0FjdGlvbiA9IGZhbHNlO1xuXG4gICAgICBpZiAoZGF0YS5hY3Rpb25zICYmIChkYXRhLmFjdGlvbnMuQWN0aW9uIHx8IGRhdGEuYWN0aW9uc1tcIk1vdXNlIFVwXCJdIHx8IGRhdGEuYWN0aW9uc1tcIk1vdXNlIERvd25cIl0pICYmIHRoaXMuZW5hYmxlU2NyaXB0aW5nICYmIHRoaXMuaGFzSlNBY3Rpb25zKSB7XG4gICAgICAgIGhhc0NsaWNrQWN0aW9uID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLl9iaW5kSlNBY3Rpb24obGluaywgZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnJlc2V0Rm9ybSkge1xuICAgICAgICB0aGlzLl9iaW5kUmVzZXRGb3JtQWN0aW9uKGxpbmssIGRhdGEucmVzZXRGb3JtKTtcbiAgICAgIH0gZWxzZSBpZiAoIWhhc0NsaWNrQWN0aW9uKSB7XG4gICAgICAgIHRoaXMuX2JpbmRMaW5rKGxpbmssIFwiXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnF1YWRyaWxhdGVyYWxzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyUXVhZHJpbGF0ZXJhbHMoXCJsaW5rQW5ub3RhdGlvblwiKS5tYXAoKHF1YWRyaWxhdGVyYWwsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGxpbmtFbGVtZW50ID0gaW5kZXggPT09IDAgPyBsaW5rIDogbGluay5jbG9uZU5vZGUoKTtcbiAgICAgICAgcXVhZHJpbGF0ZXJhbC5hcHBlbmRDaGlsZChsaW5rRWxlbWVudCk7XG4gICAgICAgIHJldHVybiBxdWFkcmlsYXRlcmFsO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJsaW5rQW5ub3RhdGlvblwiO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGxpbmspO1xuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG4gIF9iaW5kTGluayhsaW5rLCBkZXN0aW5hdGlvbikge1xuICAgIGxpbmsuaHJlZiA9IHRoaXMubGlua1NlcnZpY2UuZ2V0RGVzdGluYXRpb25IYXNoKGRlc3RpbmF0aW9uKTtcblxuICAgIGxpbmsub25jbGljayA9ICgpID0+IHtcbiAgICAgIGlmIChkZXN0aW5hdGlvbikge1xuICAgICAgICB0aGlzLmxpbmtTZXJ2aWNlLmdvVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgaWYgKGRlc3RpbmF0aW9uIHx8IGRlc3RpbmF0aW9uID09PSBcIlwiKSB7XG4gICAgICBsaW5rLmNsYXNzTmFtZSA9IFwiaW50ZXJuYWxMaW5rXCI7XG4gICAgfVxuICB9XG5cbiAgX2JpbmROYW1lZEFjdGlvbihsaW5rLCBhY3Rpb24pIHtcbiAgICBsaW5rLmhyZWYgPSB0aGlzLmxpbmtTZXJ2aWNlLmdldEFuY2hvclVybChcIlwiKTtcblxuICAgIGxpbmsub25jbGljayA9ICgpID0+IHtcbiAgICAgIHRoaXMubGlua1NlcnZpY2UuZXhlY3V0ZU5hbWVkQWN0aW9uKGFjdGlvbik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIGxpbmsuY2xhc3NOYW1lID0gXCJpbnRlcm5hbExpbmtcIjtcbiAgfVxuXG4gIF9iaW5kSlNBY3Rpb24obGluaywgZGF0YSkge1xuICAgIGxpbmsuaHJlZiA9IHRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKFwiXCIpO1xuICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoW1tcIkFjdGlvblwiLCBcIm9uY2xpY2tcIl0sIFtcIk1vdXNlIFVwXCIsIFwib25tb3VzZXVwXCJdLCBbXCJNb3VzZSBEb3duXCIsIFwib25tb3VzZWRvd25cIl1dKTtcblxuICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhkYXRhLmFjdGlvbnMpKSB7XG4gICAgICBjb25zdCBqc05hbWUgPSBtYXAuZ2V0KG5hbWUpO1xuXG4gICAgICBpZiAoIWpzTmFtZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGlua1tqc05hbWVdID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmxpbmtTZXJ2aWNlLmV2ZW50QnVzPy5kaXNwYXRjaChcImRpc3BhdGNoZXZlbnRpbnNhbmRib3hcIiwge1xuICAgICAgICAgIHNvdXJjZTogdGhpcyxcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCFsaW5rLm9uY2xpY2spIHtcbiAgICAgIGxpbmsub25jbGljayA9ICgpID0+IGZhbHNlO1xuICAgIH1cblxuICAgIGxpbmsuY2xhc3NOYW1lID0gXCJpbnRlcm5hbExpbmtcIjtcbiAgfVxuXG4gIF9iaW5kUmVzZXRGb3JtQWN0aW9uKGxpbmssIHJlc2V0Rm9ybSkge1xuICAgIGNvbnN0IG90aGVyQ2xpY2tBY3Rpb24gPSBsaW5rLm9uY2xpY2s7XG5cbiAgICBpZiAoIW90aGVyQ2xpY2tBY3Rpb24pIHtcbiAgICAgIGxpbmsuaHJlZiA9IHRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKFwiXCIpO1xuICAgIH1cblxuICAgIGxpbmsuY2xhc3NOYW1lID0gXCJpbnRlcm5hbExpbmtcIjtcblxuICAgIGlmICghdGhpcy5fZmllbGRPYmplY3RzKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoYF9iaW5kUmVzZXRGb3JtQWN0aW9uIC0gXCJyZXNldEZvcm1cIiBhY3Rpb24gbm90IHN1cHBvcnRlZCwgYCArIFwiZW5zdXJlIHRoYXQgdGhlIGBmaWVsZE9iamVjdHNgIHBhcmFtZXRlciBpcyBwcm92aWRlZC5cIik7XG5cbiAgICAgIGlmICghb3RoZXJDbGlja0FjdGlvbikge1xuICAgICAgICBsaW5rLm9uY2xpY2sgPSAoKSA9PiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxpbmsub25jbGljayA9ICgpID0+IHtcbiAgICAgIGlmIChvdGhlckNsaWNrQWN0aW9uKSB7XG4gICAgICAgIG90aGVyQ2xpY2tBY3Rpb24oKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge1xuICAgICAgICBmaWVsZHM6IHJlc2V0Rm9ybUZpZWxkcyxcbiAgICAgICAgcmVmczogcmVzZXRGb3JtUmVmcyxcbiAgICAgICAgaW5jbHVkZVxuICAgICAgfSA9IHJlc2V0Rm9ybTtcbiAgICAgIGNvbnN0IGFsbEZpZWxkcyA9IFtdO1xuXG4gICAgICBpZiAocmVzZXRGb3JtRmllbGRzLmxlbmd0aCAhPT0gMCB8fCByZXNldEZvcm1SZWZzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICBjb25zdCBmaWVsZElkcyA9IG5ldyBTZXQocmVzZXRGb3JtUmVmcyk7XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWVsZE5hbWUgb2YgcmVzZXRGb3JtRmllbGRzKSB7XG4gICAgICAgICAgY29uc3QgZmllbGRzID0gdGhpcy5fZmllbGRPYmplY3RzW2ZpZWxkTmFtZV0gfHwgW107XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgfSBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgIGZpZWxkSWRzLmFkZChpZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWVsZHMgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLl9maWVsZE9iamVjdHMpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgIGlmIChmaWVsZElkcy5oYXMoZmllbGQuaWQpID09PSBpbmNsdWRlKSB7XG4gICAgICAgICAgICAgIGFsbEZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgZmllbGRzIG9mIE9iamVjdC52YWx1ZXModGhpcy5fZmllbGRPYmplY3RzKSkge1xuICAgICAgICAgIGFsbEZpZWxkcy5wdXNoKC4uLmZpZWxkcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuYW5ub3RhdGlvblN0b3JhZ2U7XG4gICAgICBjb25zdCBhbGxJZHMgPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBhbGxGaWVsZHMpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGlkXG4gICAgICAgIH0gPSBmaWVsZDtcbiAgICAgICAgYWxsSWRzLnB1c2goaWQpO1xuXG4gICAgICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQuZGVmYXVsdFZhbHVlIHx8IFwiXCI7XG4gICAgICAgICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZUFzU3RyaW5nOiB2YWx1ZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIFwiY2hlY2tib3hcIjpcbiAgICAgICAgICBjYXNlIFwicmFkaW9idXR0b25cIjpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWVsZC5kZWZhdWx0VmFsdWUgPT09IGZpZWxkLmV4cG9ydFZhbHVlcztcbiAgICAgICAgICAgICAgc3RvcmFnZS5zZXRWYWx1ZShpZCwge1xuICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgXCJjb21ib2JveFwiOlxuICAgICAgICAgIGNhc2UgXCJsaXN0Ym94XCI6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQuZGVmYXVsdFZhbHVlIHx8IFwiXCI7XG4gICAgICAgICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkb21FbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXG4gICAgICAgIGlmICghZG9tRWxlbWVudCB8fCAhR2V0RWxlbWVudHNCeU5hbWVTZXQuaGFzKGRvbUVsZW1lbnQpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBkb21FbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwicmVzZXRmb3JtXCIpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZW5hYmxlU2NyaXB0aW5nKSB7XG4gICAgICAgIHRoaXMubGlua1NlcnZpY2UuZXZlbnRCdXM/LmRpc3BhdGNoKFwiZGlzcGF0Y2hldmVudGluc2FuZGJveFwiLCB7XG4gICAgICAgICAgc291cmNlOiB0aGlzLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgaWQ6IFwiYXBwXCIsXG4gICAgICAgICAgICBpZHM6IGFsbElkcyxcbiAgICAgICAgICAgIG5hbWU6IFwiUmVzZXRGb3JtXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgfVxuXG59XG5cbmNsYXNzIFRleHRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGVPYmo/LnN0ciB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHNPYmo/LnN0ciB8fCBwYXJhbWV0ZXJzLmRhdGEucmljaFRleHQ/LnN0cik7XG4gICAgc3VwZXIocGFyYW1ldGVycywge1xuICAgICAgaXNSZW5kZXJhYmxlXG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJ0ZXh0QW5ub3RhdGlvblwiO1xuICAgIGNvbnN0IGltYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcbiAgICBpbWFnZS5zdHlsZS5oZWlnaHQgPSB0aGlzLmNvbnRhaW5lci5zdHlsZS5oZWlnaHQ7XG4gICAgaW1hZ2Uuc3R5bGUud2lkdGggPSB0aGlzLmNvbnRhaW5lci5zdHlsZS53aWR0aDtcbiAgICBpbWFnZS5zcmMgPSB0aGlzLmltYWdlUmVzb3VyY2VzUGF0aCArIFwiYW5ub3RhdGlvbi1cIiArIHRoaXMuZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkgKyBcIi5zdmdcIjtcbiAgICBpbWFnZS5hbHQgPSBcIlt7e3R5cGV9fSBBbm5vdGF0aW9uXVwiO1xuICAgIGltYWdlLmRhdGFzZXQubDEwbklkID0gXCJ0ZXh0X2Fubm90YXRpb25fdHlwZVwiO1xuICAgIGltYWdlLmRhdGFzZXQubDEwbkFyZ3MgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICB0eXBlOiB0aGlzLmRhdGEubmFtZVxuICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLmRhdGEuaGFzUG9wdXApIHtcbiAgICAgIHRoaXMuX2NyZWF0ZVBvcHVwKGltYWdlLCB0aGlzLmRhdGEpO1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGltYWdlKTtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmRhdGEuYWx0ZXJuYXRpdmVUZXh0KSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci50aXRsZSA9IHRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbiAgX2dldEtleU1vZGlmaWVyKGV2ZW50KSB7XG4gICAgY29uc3Qge1xuICAgICAgaXNXaW4sXG4gICAgICBpc01hY1xuICAgIH0gPSBBbm5vdGF0aW9uRWxlbWVudC5wbGF0Zm9ybTtcbiAgICByZXR1cm4gaXNXaW4gJiYgZXZlbnQuY3RybEtleSB8fCBpc01hYyAmJiBldmVudC5tZXRhS2V5O1xuICB9XG5cbiAgX3NldEV2ZW50TGlzdGVuZXIoZWxlbWVudCwgYmFzZU5hbWUsIGV2ZW50TmFtZSwgdmFsdWVHZXR0ZXIpIHtcbiAgICBpZiAoYmFzZU5hbWUuaW5jbHVkZXMoXCJtb3VzZVwiKSkge1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGJhc2VOYW1lLCBldmVudCA9PiB7XG4gICAgICAgIHRoaXMubGlua1NlcnZpY2UuZXZlbnRCdXM/LmRpc3BhdGNoKFwiZGlzcGF0Y2hldmVudGluc2FuZGJveFwiLCB7XG4gICAgICAgICAgc291cmNlOiB0aGlzLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgaWQ6IHRoaXMuZGF0YS5pZCxcbiAgICAgICAgICAgIG5hbWU6IGV2ZW50TmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZUdldHRlcihldmVudCksXG4gICAgICAgICAgICBzaGlmdDogZXZlbnQuc2hpZnRLZXksXG4gICAgICAgICAgICBtb2RpZmllcjogdGhpcy5fZ2V0S2V5TW9kaWZpZXIoZXZlbnQpXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoYmFzZU5hbWUsIGV2ZW50ID0+IHtcbiAgICAgICAgdGhpcy5saW5rU2VydmljZS5ldmVudEJ1cz8uZGlzcGF0Y2goXCJkaXNwYXRjaGV2ZW50aW5zYW5kYm94XCIsIHtcbiAgICAgICAgICBzb3VyY2U6IHRoaXMsXG4gICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICBpZDogdGhpcy5kYXRhLmlkLFxuICAgICAgICAgICAgbmFtZTogZXZlbnROYW1lLFxuICAgICAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC5jaGVja2VkXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9zZXRFdmVudExpc3RlbmVycyhlbGVtZW50LCBuYW1lcywgZ2V0dGVyKSB7XG4gICAgZm9yIChjb25zdCBbYmFzZU5hbWUsIGV2ZW50TmFtZV0gb2YgbmFtZXMpIHtcbiAgICAgIGlmIChldmVudE5hbWUgPT09IFwiQWN0aW9uXCIgfHwgdGhpcy5kYXRhLmFjdGlvbnM/LltldmVudE5hbWVdKSB7XG4gICAgICAgIHRoaXMuX3NldEV2ZW50TGlzdGVuZXIoZWxlbWVudCwgYmFzZU5hbWUsIGV2ZW50TmFtZSwgZ2V0dGVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfc2V0QmFja2dyb3VuZENvbG9yKGVsZW1lbnQpIHtcbiAgICBjb25zdCBjb2xvciA9IHRoaXMuZGF0YS5iYWNrZ3JvdW5kQ29sb3IgfHwgbnVsbDtcbiAgICBlbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yID09PSBudWxsID8gXCJ0cmFuc3BhcmVudFwiIDogX3V0aWwuVXRpbC5tYWtlSGV4Q29sb3IoY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSk7XG4gIH1cblxuICBfZGlzcGF0Y2hFdmVudEZyb21TYW5kYm94KGFjdGlvbnMsIGpzRXZlbnQpIHtcbiAgICBjb25zdCBzZXRDb2xvciA9IChqc05hbWUsIHN0eWxlTmFtZSwgZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGNvbG9yID0gZXZlbnQuZGV0YWlsW2pzTmFtZV07XG4gICAgICBldmVudC50YXJnZXQuc3R5bGVbc3R5bGVOYW1lXSA9IF9zY3JpcHRpbmdfdXRpbHMuQ29sb3JDb252ZXJ0ZXJzW2Ake2NvbG9yWzBdfV9IVE1MYF0oY29sb3Iuc2xpY2UoMSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBjb21tb25BY3Rpb25zID0ge1xuICAgICAgZGlzcGxheTogZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCBoaWRkZW4gPSBldmVudC5kZXRhaWwuZGlzcGxheSAlIDIgPT09IDE7XG4gICAgICAgIGV2ZW50LnRhcmdldC5zdHlsZS52aXNpYmlsaXR5ID0gaGlkZGVuID8gXCJoaWRkZW5cIiA6IFwidmlzaWJsZVwiO1xuICAgICAgICB0aGlzLmFubm90YXRpb25TdG9yYWdlLnNldFZhbHVlKHRoaXMuZGF0YS5pZCwge1xuICAgICAgICAgIGhpZGRlbixcbiAgICAgICAgICBwcmludDogZXZlbnQuZGV0YWlsLmRpc3BsYXkgPT09IDAgfHwgZXZlbnQuZGV0YWlsLmRpc3BsYXkgPT09IDNcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgcHJpbnQ6IGV2ZW50ID0+IHtcbiAgICAgICAgdGhpcy5hbm5vdGF0aW9uU3RvcmFnZS5zZXRWYWx1ZSh0aGlzLmRhdGEuaWQsIHtcbiAgICAgICAgICBwcmludDogZXZlbnQuZGV0YWlsLnByaW50XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGhpZGRlbjogZXZlbnQgPT4ge1xuICAgICAgICBldmVudC50YXJnZXQuc3R5bGUudmlzaWJpbGl0eSA9IGV2ZW50LmRldGFpbC5oaWRkZW4gPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XG4gICAgICAgIHRoaXMuYW5ub3RhdGlvblN0b3JhZ2Uuc2V0VmFsdWUodGhpcy5kYXRhLmlkLCB7XG4gICAgICAgICAgaGlkZGVuOiBldmVudC5kZXRhaWwuaGlkZGVuXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGZvY3VzOiBldmVudCA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZXZlbnQudGFyZ2V0LmZvY3VzKHtcbiAgICAgICAgICBwcmV2ZW50U2Nyb2xsOiBmYWxzZVxuICAgICAgICB9KSwgMCk7XG4gICAgICB9LFxuICAgICAgdXNlck5hbWU6IGV2ZW50ID0+IHtcbiAgICAgICAgZXZlbnQudGFyZ2V0LnRpdGxlID0gZXZlbnQuZGV0YWlsLnVzZXJOYW1lO1xuICAgICAgfSxcbiAgICAgIHJlYWRvbmx5OiBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5kZXRhaWwucmVhZG9ubHkpIHtcbiAgICAgICAgICBldmVudC50YXJnZXQuc2V0QXR0cmlidXRlKFwicmVhZG9ubHlcIiwgXCJcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXZlbnQudGFyZ2V0LnJlbW92ZUF0dHJpYnV0ZShcInJlYWRvbmx5XCIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmRldGFpbC5yZXF1aXJlZCkge1xuICAgICAgICAgIGV2ZW50LnRhcmdldC5zZXRBdHRyaWJ1dGUoXCJyZXF1aXJlZFwiLCBcIlwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBldmVudC50YXJnZXQucmVtb3ZlQXR0cmlidXRlKFwicmVxdWlyZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBiZ0NvbG9yOiBldmVudCA9PiB7XG4gICAgICAgIHNldENvbG9yKFwiYmdDb2xvclwiLCBcImJhY2tncm91bmRDb2xvclwiLCBldmVudCk7XG4gICAgICB9LFxuICAgICAgZmlsbENvbG9yOiBldmVudCA9PiB7XG4gICAgICAgIHNldENvbG9yKFwiZmlsbENvbG9yXCIsIFwiYmFja2dyb3VuZENvbG9yXCIsIGV2ZW50KTtcbiAgICAgIH0sXG4gICAgICBmZ0NvbG9yOiBldmVudCA9PiB7XG4gICAgICAgIHNldENvbG9yKFwiZmdDb2xvclwiLCBcImNvbG9yXCIsIGV2ZW50KTtcbiAgICAgIH0sXG4gICAgICB0ZXh0Q29sb3I6IGV2ZW50ID0+IHtcbiAgICAgICAgc2V0Q29sb3IoXCJ0ZXh0Q29sb3JcIiwgXCJjb2xvclwiLCBldmVudCk7XG4gICAgICB9LFxuICAgICAgYm9yZGVyQ29sb3I6IGV2ZW50ID0+IHtcbiAgICAgICAgc2V0Q29sb3IoXCJib3JkZXJDb2xvclwiLCBcImJvcmRlckNvbG9yXCIsIGV2ZW50KTtcbiAgICAgIH0sXG4gICAgICBzdHJva2VDb2xvcjogZXZlbnQgPT4ge1xuICAgICAgICBzZXRDb2xvcihcInN0cm9rZUNvbG9yXCIsIFwiYm9yZGVyQ29sb3JcIiwgZXZlbnQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoanNFdmVudC5kZXRhaWwpKSB7XG4gICAgICBjb25zdCBhY3Rpb24gPSBhY3Rpb25zW25hbWVdIHx8IGNvbW1vbkFjdGlvbnNbbmFtZV07XG5cbiAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgYWN0aW9uKGpzRXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG5cbmNsYXNzIFRleHRXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIFdpZGdldEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9IHBhcmFtZXRlcnMucmVuZGVyRm9ybXMgfHwgIXBhcmFtZXRlcnMuZGF0YS5oYXNBcHBlYXJhbmNlICYmICEhcGFyYW1ldGVycy5kYXRhLmZpZWxkVmFsdWU7XG4gICAgc3VwZXIocGFyYW1ldGVycywge1xuICAgICAgaXNSZW5kZXJhYmxlXG4gICAgfSk7XG4gIH1cblxuICBzZXRQcm9wZXJ0eU9uU2libGluZ3MoYmFzZSwga2V5LCB2YWx1ZSwga2V5SW5TdG9yYWdlKSB7XG4gICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuYW5ub3RhdGlvblN0b3JhZ2U7XG5cbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5fZ2V0RWxlbWVudHNCeU5hbWUoYmFzZS5uYW1lLCBiYXNlLmlkKSkge1xuICAgICAgaWYgKGVsZW1lbnQuZG9tRWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmRvbUVsZW1lbnRba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBzdG9yYWdlLnNldFZhbHVlKGVsZW1lbnQuaWQsIHtcbiAgICAgICAgW2tleUluU3RvcmFnZV06IHZhbHVlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuYW5ub3RhdGlvblN0b3JhZ2U7XG4gICAgY29uc3QgaWQgPSB0aGlzLmRhdGEuaWQ7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJ0ZXh0V2lkZ2V0QW5ub3RhdGlvblwiO1xuICAgIGxldCBlbGVtZW50ID0gbnVsbDtcblxuICAgIGlmICh0aGlzLnJlbmRlckZvcm1zKSB7XG4gICAgICBjb25zdCBzdG9yZWREYXRhID0gc3RvcmFnZS5nZXRWYWx1ZShpZCwge1xuICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmZpZWxkVmFsdWUsXG4gICAgICAgIHZhbHVlQXNTdHJpbmc6IHRoaXMuZGF0YS5maWVsZFZhbHVlXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHRleHRDb250ZW50ID0gc3RvcmVkRGF0YS52YWx1ZUFzU3RyaW5nIHx8IHN0b3JlZERhdGEudmFsdWUgfHwgXCJcIjtcbiAgICAgIGNvbnN0IGVsZW1lbnREYXRhID0ge1xuICAgICAgICB1c2VyVmFsdWU6IG51bGwsXG4gICAgICAgIGZvcm1hdHRlZFZhbHVlOiBudWxsLFxuICAgICAgICBiZWZvcmVJbnB1dFNlbGVjdGlvblJhbmdlOiBudWxsLFxuICAgICAgICBiZWZvcmVJbnB1dFZhbHVlOiBudWxsXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5kYXRhLm11bHRpTGluZSkge1xuICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRleHRhcmVhXCIpO1xuICAgICAgICBlbGVtZW50LnRleHRDb250ZW50ID0gdGV4dENvbnRlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgICAgICBlbGVtZW50LnR5cGUgPSBcInRleHRcIjtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCB0ZXh0Q29udGVudCk7XG4gICAgICB9XG5cbiAgICAgIEdldEVsZW1lbnRzQnlOYW1lU2V0LmFkZChlbGVtZW50KTtcbiAgICAgIGVsZW1lbnQuZGlzYWJsZWQgPSB0aGlzLmRhdGEucmVhZE9ubHk7XG4gICAgICBlbGVtZW50Lm5hbWUgPSB0aGlzLmRhdGEuZmllbGROYW1lO1xuICAgICAgZWxlbWVudC50YWJJbmRleCA9IERFRkFVTFRfVEFCX0lOREVYO1xuICAgICAgZWxlbWVudERhdGEudXNlclZhbHVlID0gdGV4dENvbnRlbnQ7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcImlkXCIsIGlkKTtcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIGV2ZW50ID0+IHtcbiAgICAgICAgc3RvcmFnZS5zZXRWYWx1ZShpZCwge1xuICAgICAgICAgIHZhbHVlOiBldmVudC50YXJnZXQudmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlPblNpYmxpbmdzKGVsZW1lbnQsIFwidmFsdWVcIiwgZXZlbnQudGFyZ2V0LnZhbHVlLCBcInZhbHVlXCIpO1xuICAgICAgfSk7XG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNldGZvcm1cIiwgZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWUgfHwgXCJcIjtcbiAgICAgICAgZWxlbWVudC52YWx1ZSA9IGVsZW1lbnREYXRhLnVzZXJWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgZGVsZXRlIGVsZW1lbnREYXRhLmZvcm1hdHRlZFZhbHVlO1xuICAgICAgfSk7XG5cbiAgICAgIGxldCBibHVyTGlzdGVuZXIgPSBldmVudCA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50RGF0YS5mb3JtYXR0ZWRWYWx1ZSkge1xuICAgICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IGVsZW1lbnREYXRhLmZvcm1hdHRlZFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQudGFyZ2V0LnNjcm9sbExlZnQgPSAwO1xuICAgICAgICBlbGVtZW50RGF0YS5iZWZvcmVJbnB1dFNlbGVjdGlvblJhbmdlID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLmVuYWJsZVNjcmlwdGluZyAmJiB0aGlzLmhhc0pTQWN0aW9ucykge1xuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKGVsZW1lbnREYXRhLnVzZXJWYWx1ZSkge1xuICAgICAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gZWxlbWVudERhdGEudXNlclZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInVwZGF0ZWZyb21zYW5kYm94XCIsIGpzRXZlbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSB7XG4gICAgICAgICAgICB2YWx1ZShldmVudCkge1xuICAgICAgICAgICAgICBlbGVtZW50RGF0YS51c2VyVmFsdWUgPSBldmVudC5kZXRhaWwudmFsdWUgfHwgXCJcIjtcbiAgICAgICAgICAgICAgc3RvcmFnZS5zZXRWYWx1ZShpZCwge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBlbGVtZW50RGF0YS51c2VyVmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAoIWVsZW1lbnREYXRhLmZvcm1hdHRlZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gZWxlbWVudERhdGEudXNlclZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB2YWx1ZUFzU3RyaW5nKGV2ZW50KSB7XG4gICAgICAgICAgICAgIGVsZW1lbnREYXRhLmZvcm1hdHRlZFZhbHVlID0gZXZlbnQuZGV0YWlsLnZhbHVlQXNTdHJpbmcgfHwgXCJcIjtcblxuICAgICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ICE9PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gZWxlbWVudERhdGEuZm9ybWF0dGVkVmFsdWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBzdG9yYWdlLnNldFZhbHVlKGlkLCB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWU6IGVsZW1lbnREYXRhLmZvcm1hdHRlZFZhbHVlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc2VsUmFuZ2UoZXZlbnQpIHtcbiAgICAgICAgICAgICAgY29uc3QgW3NlbFN0YXJ0LCBzZWxFbmRdID0gZXZlbnQuZGV0YWlsLnNlbFJhbmdlO1xuXG4gICAgICAgICAgICAgIGlmIChzZWxTdGFydCA+PSAwICYmIHNlbEVuZCA8IGV2ZW50LnRhcmdldC52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBldmVudC50YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsU3RhcnQsIHNlbEVuZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50RnJvbVNhbmRib3goYWN0aW9ucywganNFdmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGV2ZW50ID0+IHtcbiAgICAgICAgICBlbGVtZW50RGF0YS5iZWZvcmVJbnB1dFZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgICAgIGxldCBjb21taXRLZXkgPSAtMTtcblxuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgICAgICAgIGNvbW1pdEtleSA9IDA7XG4gICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgICAgICAgY29tbWl0S2V5ID0gMjtcbiAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJUYWJcIikge1xuICAgICAgICAgICAgY29tbWl0S2V5ID0gMztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29tbWl0S2V5ID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVsZW1lbnREYXRhLnVzZXJWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgICAgICB0aGlzLmxpbmtTZXJ2aWNlLmV2ZW50QnVzPy5kaXNwYXRjaChcImRpc3BhdGNoZXZlbnRpbnNhbmRib3hcIiwge1xuICAgICAgICAgICAgc291cmNlOiB0aGlzLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICBuYW1lOiBcIktleXN0cm9rZVwiLFxuICAgICAgICAgICAgICB2YWx1ZTogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICB3aWxsQ29tbWl0OiB0cnVlLFxuICAgICAgICAgICAgICBjb21taXRLZXksXG4gICAgICAgICAgICAgIHNlbFN0YXJ0OiBldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQsXG4gICAgICAgICAgICAgIHNlbEVuZDogZXZlbnQudGFyZ2V0LnNlbGVjdGlvbkVuZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgX2JsdXJMaXN0ZW5lciA9IGJsdXJMaXN0ZW5lcjtcbiAgICAgICAgYmx1ckxpc3RlbmVyID0gbnVsbDtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX21vdXNlU3RhdGUuaXNEb3duKSB7XG4gICAgICAgICAgICBlbGVtZW50RGF0YS51c2VyVmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICAgICAgICB0aGlzLmxpbmtTZXJ2aWNlLmV2ZW50QnVzPy5kaXNwYXRjaChcImRpc3BhdGNoZXZlbnRpbnNhbmRib3hcIiwge1xuICAgICAgICAgICAgICBzb3VyY2U6IHRoaXMsXG4gICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIG5hbWU6IFwiS2V5c3Ryb2tlXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICB3aWxsQ29tbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbW1pdEtleTogMSxcbiAgICAgICAgICAgICAgICBzZWxTdGFydDogZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0LFxuICAgICAgICAgICAgICAgIHNlbEVuZDogZXZlbnQudGFyZ2V0LnNlbGVjdGlvbkVuZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfYmx1ckxpc3RlbmVyKGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCBldmVudCA9PiB7XG4gICAgICAgICAgZWxlbWVudERhdGEuYmVmb3JlSW5wdXRWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgICAgICBlbGVtZW50RGF0YS5iZWZvcmVJbnB1dFNlbGVjdGlvblJhbmdlID0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIGV2ZW50ID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0ID09PSBldmVudC50YXJnZXQuc2VsZWN0aW9uRW5kKSB7XG4gICAgICAgICAgICBlbGVtZW50RGF0YS5iZWZvcmVJbnB1dFNlbGVjdGlvblJhbmdlID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzZWxlY3RcIiwgZXZlbnQgPT4ge1xuICAgICAgICAgIGVsZW1lbnREYXRhLmJlZm9yZUlucHV0U2VsZWN0aW9uUmFuZ2UgPSBbZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0LCBldmVudC50YXJnZXQuc2VsZWN0aW9uRW5kXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZGF0YS5hY3Rpb25zPy5LZXlzdHJva2UpIHtcbiAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBldmVudCA9PiB7XG4gICAgICAgICAgICBsZXQgc2VsU3RhcnQgPSAtMTtcbiAgICAgICAgICAgIGxldCBzZWxFbmQgPSAtMTtcblxuICAgICAgICAgICAgaWYgKGVsZW1lbnREYXRhLmJlZm9yZUlucHV0U2VsZWN0aW9uUmFuZ2UpIHtcbiAgICAgICAgICAgICAgW3NlbFN0YXJ0LCBzZWxFbmRdID0gZWxlbWVudERhdGEuYmVmb3JlSW5wdXRTZWxlY3Rpb25SYW5nZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5saW5rU2VydmljZS5ldmVudEJ1cz8uZGlzcGF0Y2goXCJkaXNwYXRjaGV2ZW50aW5zYW5kYm94XCIsIHtcbiAgICAgICAgICAgICAgc291cmNlOiB0aGlzLFxuICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICBuYW1lOiBcIktleXN0cm9rZVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBlbGVtZW50RGF0YS5iZWZvcmVJbnB1dFZhbHVlLFxuICAgICAgICAgICAgICAgIGNoYW5nZTogZXZlbnQuZGF0YSxcbiAgICAgICAgICAgICAgICB3aWxsQ29tbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzZWxTdGFydCxcbiAgICAgICAgICAgICAgICBzZWxFbmRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZXRFdmVudExpc3RlbmVycyhlbGVtZW50LCBbW1wiZm9jdXNcIiwgXCJGb2N1c1wiXSwgW1wiYmx1clwiLCBcIkJsdXJcIl0sIFtcIm1vdXNlZG93blwiLCBcIk1vdXNlIERvd25cIl0sIFtcIm1vdXNlZW50ZXJcIiwgXCJNb3VzZSBFbnRlclwiXSwgW1wibW91c2VsZWF2ZVwiLCBcIk1vdXNlIEV4aXRcIl0sIFtcIm1vdXNldXBcIiwgXCJNb3VzZSBVcFwiXV0sIGV2ZW50ID0+IGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChibHVyTGlzdGVuZXIpIHtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCBibHVyTGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5kYXRhLm1heExlbiAhPT0gbnVsbCkge1xuICAgICAgICBlbGVtZW50Lm1heExlbmd0aCA9IHRoaXMuZGF0YS5tYXhMZW47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmRhdGEuY29tYikge1xuICAgICAgICBjb25zdCBmaWVsZFdpZHRoID0gdGhpcy5kYXRhLnJlY3RbMl0gLSB0aGlzLmRhdGEucmVjdFswXTtcbiAgICAgICAgY29uc3QgY29tYldpZHRoID0gZmllbGRXaWR0aCAvIHRoaXMuZGF0YS5tYXhMZW47XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImNvbWJcIik7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGV0dGVyU3BhY2luZyA9IGBjYWxjKCR7Y29tYldpZHRofXB4IC0gMWNoKWA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgZWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMuZGF0YS5maWVsZFZhbHVlO1xuICAgICAgZWxlbWVudC5zdHlsZS52ZXJ0aWNhbEFsaWduID0gXCJtaWRkbGVcIjtcbiAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwidGFibGUtY2VsbFwiO1xuICAgIH1cblxuICAgIHRoaXMuX3NldFRleHRTdHlsZShlbGVtZW50KTtcblxuICAgIHRoaXMuX3NldEJhY2tncm91bmRDb2xvcihlbGVtZW50KTtcblxuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG4gIF9zZXRUZXh0U3R5bGUoZWxlbWVudCkge1xuICAgIGNvbnN0IFRFWFRfQUxJR05NRU5UID0gW1wibGVmdFwiLCBcImNlbnRlclwiLCBcInJpZ2h0XCJdO1xuICAgIGNvbnN0IHtcbiAgICAgIGZvbnRTaXplLFxuICAgICAgZm9udENvbG9yXG4gICAgfSA9IHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE7XG4gICAgY29uc3Qgc3R5bGUgPSBlbGVtZW50LnN0eWxlO1xuXG4gICAgaWYgKGZvbnRTaXplKSB7XG4gICAgICBzdHlsZS5mb250U2l6ZSA9IGAke2ZvbnRTaXplfXB4YDtcbiAgICB9XG5cbiAgICBzdHlsZS5jb2xvciA9IF91dGlsLlV0aWwubWFrZUhleENvbG9yKGZvbnRDb2xvclswXSwgZm9udENvbG9yWzFdLCBmb250Q29sb3JbMl0pO1xuXG4gICAgaWYgKHRoaXMuZGF0YS50ZXh0QWxpZ25tZW50ICE9PSBudWxsKSB7XG4gICAgICBzdHlsZS50ZXh0QWxpZ24gPSBURVhUX0FMSUdOTUVOVFt0aGlzLmRhdGEudGV4dEFsaWdubWVudF07XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgQ2hlY2tib3hXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIFdpZGdldEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIHtcbiAgICAgIGlzUmVuZGVyYWJsZTogcGFyYW1ldGVycy5yZW5kZXJGb3Jtc1xuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLmFubm90YXRpb25TdG9yYWdlO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgY29uc3QgaWQgPSBkYXRhLmlkO1xuICAgIGxldCB2YWx1ZSA9IHN0b3JhZ2UuZ2V0VmFsdWUoaWQsIHtcbiAgICAgIHZhbHVlOiBkYXRhLmV4cG9ydFZhbHVlID09PSBkYXRhLmZpZWxkVmFsdWVcbiAgICB9KS52YWx1ZTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgIT09IFwiT2ZmXCI7XG4gICAgICBzdG9yYWdlLnNldFZhbHVlKGlkLCB7XG4gICAgICAgIHZhbHVlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSBcImJ1dHRvbldpZGdldEFubm90YXRpb24gY2hlY2tCb3hcIjtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIEdldEVsZW1lbnRzQnlOYW1lU2V0LmFkZChlbGVtZW50KTtcbiAgICBlbGVtZW50LmRpc2FibGVkID0gZGF0YS5yZWFkT25seTtcbiAgICBlbGVtZW50LnR5cGUgPSBcImNoZWNrYm94XCI7XG4gICAgZWxlbWVudC5uYW1lID0gZGF0YS5maWVsZE5hbWU7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY2hlY2tlZFwiLCB0cnVlKTtcbiAgICB9XG5cbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcImlkXCIsIGlkKTtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcImV4cG9ydFZhbHVlXCIsIGRhdGEuZXhwb3J0VmFsdWUpO1xuICAgIGVsZW1lbnQudGFiSW5kZXggPSBERUZBVUxUX1RBQl9JTkRFWDtcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgZXZlbnQgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBuYW1lLFxuICAgICAgICBjaGVja2VkXG4gICAgICB9ID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICBmb3IgKGNvbnN0IGNoZWNrYm94IG9mIHRoaXMuX2dldEVsZW1lbnRzQnlOYW1lKG5hbWUsIGlkKSkge1xuICAgICAgICBjb25zdCBjdXJDaGVja2VkID0gY2hlY2tlZCAmJiBjaGVja2JveC5leHBvcnRWYWx1ZSA9PT0gZGF0YS5leHBvcnRWYWx1ZTtcblxuICAgICAgICBpZiAoY2hlY2tib3guZG9tRWxlbWVudCkge1xuICAgICAgICAgIGNoZWNrYm94LmRvbUVsZW1lbnQuY2hlY2tlZCA9IGN1ckNoZWNrZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBzdG9yYWdlLnNldFZhbHVlKGNoZWNrYm94LmlkLCB7XG4gICAgICAgICAgdmFsdWU6IGN1ckNoZWNrZWRcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHtcbiAgICAgICAgdmFsdWU6IGNoZWNrZWRcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2V0Zm9ybVwiLCBldmVudCA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBkYXRhLmRlZmF1bHRGaWVsZFZhbHVlIHx8IFwiT2ZmXCI7XG4gICAgICBldmVudC50YXJnZXQuY2hlY2tlZCA9IGRlZmF1bHRWYWx1ZSA9PT0gZGF0YS5leHBvcnRWYWx1ZTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmVuYWJsZVNjcmlwdGluZyAmJiB0aGlzLmhhc0pTQWN0aW9ucykge1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidXBkYXRlZnJvbXNhbmRib3hcIiwganNFdmVudCA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGlvbnMgPSB7XG4gICAgICAgICAgdmFsdWUoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldC5jaGVja2VkID0gZXZlbnQuZGV0YWlsLnZhbHVlICE9PSBcIk9mZlwiO1xuICAgICAgICAgICAgc3RvcmFnZS5zZXRWYWx1ZShpZCwge1xuICAgICAgICAgICAgICB2YWx1ZTogZXZlbnQudGFyZ2V0LmNoZWNrZWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoRXZlbnRGcm9tU2FuZGJveChhY3Rpb25zLCBqc0V2ZW50KTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9zZXRFdmVudExpc3RlbmVycyhlbGVtZW50LCBbW1wiY2hhbmdlXCIsIFwiVmFsaWRhdGVcIl0sIFtcImNoYW5nZVwiLCBcIkFjdGlvblwiXSwgW1wiZm9jdXNcIiwgXCJGb2N1c1wiXSwgW1wiYmx1clwiLCBcIkJsdXJcIl0sIFtcIm1vdXNlZG93blwiLCBcIk1vdXNlIERvd25cIl0sIFtcIm1vdXNlZW50ZXJcIiwgXCJNb3VzZSBFbnRlclwiXSwgW1wibW91c2VsZWF2ZVwiLCBcIk1vdXNlIEV4aXRcIl0sIFtcIm1vdXNldXBcIiwgXCJNb3VzZSBVcFwiXV0sIGV2ZW50ID0+IGV2ZW50LnRhcmdldC5jaGVja2VkKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zZXRCYWNrZ3JvdW5kQ29sb3IoZWxlbWVudCk7XG5cbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChlbGVtZW50KTtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBSYWRpb0J1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycywge1xuICAgICAgaXNSZW5kZXJhYmxlOiBwYXJhbWV0ZXJzLnJlbmRlckZvcm1zXG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJidXR0b25XaWRnZXRBbm5vdGF0aW9uIHJhZGlvQnV0dG9uXCI7XG4gICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuYW5ub3RhdGlvblN0b3JhZ2U7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICBjb25zdCBpZCA9IGRhdGEuaWQ7XG4gICAgbGV0IHZhbHVlID0gc3RvcmFnZS5nZXRWYWx1ZShpZCwge1xuICAgICAgdmFsdWU6IGRhdGEuZmllbGRWYWx1ZSA9PT0gZGF0YS5idXR0b25WYWx1ZVxuICAgIH0pLnZhbHVlO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdmFsdWUgPSB2YWx1ZSAhPT0gZGF0YS5idXR0b25WYWx1ZTtcbiAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHtcbiAgICAgICAgdmFsdWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgR2V0RWxlbWVudHNCeU5hbWVTZXQuYWRkKGVsZW1lbnQpO1xuICAgIGVsZW1lbnQuZGlzYWJsZWQgPSBkYXRhLnJlYWRPbmx5O1xuICAgIGVsZW1lbnQudHlwZSA9IFwicmFkaW9cIjtcbiAgICBlbGVtZW50Lm5hbWUgPSBkYXRhLmZpZWxkTmFtZTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsIHRydWUpO1xuICAgIH1cblxuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiaWRcIiwgaWQpO1xuICAgIGVsZW1lbnQudGFiSW5kZXggPSBERUZBVUxUX1RBQl9JTkRFWDtcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgZXZlbnQgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBuYW1lLFxuICAgICAgICBjaGVja2VkXG4gICAgICB9ID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICBmb3IgKGNvbnN0IHJhZGlvIG9mIHRoaXMuX2dldEVsZW1lbnRzQnlOYW1lKG5hbWUsIGlkKSkge1xuICAgICAgICBzdG9yYWdlLnNldFZhbHVlKHJhZGlvLmlkLCB7XG4gICAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBzdG9yYWdlLnNldFZhbHVlKGlkLCB7XG4gICAgICAgIHZhbHVlOiBjaGVja2VkXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNldGZvcm1cIiwgZXZlbnQgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gZGF0YS5kZWZhdWx0RmllbGRWYWx1ZTtcbiAgICAgIGV2ZW50LnRhcmdldC5jaGVja2VkID0gZGVmYXVsdFZhbHVlICE9PSBudWxsICYmIGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGRlZmF1bHRWYWx1ZSA9PT0gZGF0YS5idXR0b25WYWx1ZTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmVuYWJsZVNjcmlwdGluZyAmJiB0aGlzLmhhc0pTQWN0aW9ucykge1xuICAgICAgY29uc3QgcGRmQnV0dG9uVmFsdWUgPSBkYXRhLmJ1dHRvblZhbHVlO1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidXBkYXRlZnJvbXNhbmRib3hcIiwganNFdmVudCA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGlvbnMgPSB7XG4gICAgICAgICAgdmFsdWU6IGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrZWQgPSBwZGZCdXR0b25WYWx1ZSA9PT0gZXZlbnQuZGV0YWlsLnZhbHVlO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJhZGlvIG9mIHRoaXMuX2dldEVsZW1lbnRzQnlOYW1lKGV2ZW50LnRhcmdldC5uYW1lKSkge1xuICAgICAgICAgICAgICBjb25zdCBjdXJDaGVja2VkID0gY2hlY2tlZCAmJiByYWRpby5pZCA9PT0gaWQ7XG5cbiAgICAgICAgICAgICAgaWYgKHJhZGlvLmRvbUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByYWRpby5kb21FbGVtZW50LmNoZWNrZWQgPSBjdXJDaGVja2VkO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc3RvcmFnZS5zZXRWYWx1ZShyYWRpby5pZCwge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBjdXJDaGVja2VkXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50RnJvbVNhbmRib3goYWN0aW9ucywganNFdmVudCk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5fc2V0RXZlbnRMaXN0ZW5lcnMoZWxlbWVudCwgW1tcImNoYW5nZVwiLCBcIlZhbGlkYXRlXCJdLCBbXCJjaGFuZ2VcIiwgXCJBY3Rpb25cIl0sIFtcImZvY3VzXCIsIFwiRm9jdXNcIl0sIFtcImJsdXJcIiwgXCJCbHVyXCJdLCBbXCJtb3VzZWRvd25cIiwgXCJNb3VzZSBEb3duXCJdLCBbXCJtb3VzZWVudGVyXCIsIFwiTW91c2UgRW50ZXJcIl0sIFtcIm1vdXNlbGVhdmVcIiwgXCJNb3VzZSBFeGl0XCJdLCBbXCJtb3VzZXVwXCIsIFwiTW91c2UgVXBcIl1dLCBldmVudCA9PiBldmVudC50YXJnZXQuY2hlY2tlZCk7XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0QmFja2dyb3VuZENvbG9yKGVsZW1lbnQpO1xuXG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgUHVzaEJ1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgTGlua0Fubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIHtcbiAgICAgIGlnbm9yZUJvcmRlcjogcGFyYW1ldGVycy5kYXRhLmhhc0FwcGVhcmFuY2VcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBzdXBlci5yZW5kZXIoKTtcbiAgICBjb250YWluZXIuY2xhc3NOYW1lID0gXCJidXR0b25XaWRnZXRBbm5vdGF0aW9uIHB1c2hCdXR0b25cIjtcblxuICAgIGlmICh0aGlzLmRhdGEuYWx0ZXJuYXRpdmVUZXh0KSB7XG4gICAgICBjb250YWluZXIudGl0bGUgPSB0aGlzLmRhdGEuYWx0ZXJuYXRpdmVUZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBjb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBDaG9pY2VXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIFdpZGdldEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIHtcbiAgICAgIGlzUmVuZGVyYWJsZTogcGFyYW1ldGVycy5yZW5kZXJGb3Jtc1xuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9IFwiY2hvaWNlV2lkZ2V0QW5ub3RhdGlvblwiO1xuICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLmFubm90YXRpb25TdG9yYWdlO1xuICAgIGNvbnN0IGlkID0gdGhpcy5kYXRhLmlkO1xuICAgIHN0b3JhZ2UuZ2V0VmFsdWUoaWQsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmRhdGEuZmllbGRWYWx1ZS5sZW5ndGggPiAwID8gdGhpcy5kYXRhLmZpZWxkVmFsdWVbMF0gOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgICBsZXQge1xuICAgICAgZm9udFNpemVcbiAgICB9ID0gdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YTtcblxuICAgIGlmICghZm9udFNpemUpIHtcbiAgICAgIGZvbnRTaXplID0gOTtcbiAgICB9XG5cbiAgICBjb25zdCBmb250U2l6ZVN0eWxlID0gYGNhbGMoJHtmb250U2l6ZX1weCAqIHZhcigtLXpvb20tZmFjdG9yKSlgO1xuICAgIGNvbnN0IHNlbGVjdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIpO1xuICAgIEdldEVsZW1lbnRzQnlOYW1lU2V0LmFkZChzZWxlY3RFbGVtZW50KTtcbiAgICBzZWxlY3RFbGVtZW50LmRpc2FibGVkID0gdGhpcy5kYXRhLnJlYWRPbmx5O1xuICAgIHNlbGVjdEVsZW1lbnQubmFtZSA9IHRoaXMuZGF0YS5maWVsZE5hbWU7XG4gICAgc2VsZWN0RWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpZCk7XG4gICAgc2VsZWN0RWxlbWVudC50YWJJbmRleCA9IERFRkFVTFRfVEFCX0lOREVYO1xuICAgIHNlbGVjdEVsZW1lbnQuc3R5bGUuZm9udFNpemUgPSBgJHtmb250U2l6ZX1weGA7XG5cbiAgICBpZiAoIXRoaXMuZGF0YS5jb21ibykge1xuICAgICAgc2VsZWN0RWxlbWVudC5zaXplID0gdGhpcy5kYXRhLm9wdGlvbnMubGVuZ3RoO1xuXG4gICAgICBpZiAodGhpcy5kYXRhLm11bHRpU2VsZWN0KSB7XG4gICAgICAgIHNlbGVjdEVsZW1lbnQubXVsdGlwbGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2V0Zm9ybVwiLCBldmVudCA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWU7XG5cbiAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHNlbGVjdEVsZW1lbnQub3B0aW9ucykge1xuICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSBvcHRpb24udmFsdWUgPT09IGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHRoaXMuZGF0YS5vcHRpb25zKSB7XG4gICAgICBjb25zdCBvcHRpb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiKTtcbiAgICAgIG9wdGlvbkVsZW1lbnQudGV4dENvbnRlbnQgPSBvcHRpb24uZGlzcGxheVZhbHVlO1xuICAgICAgb3B0aW9uRWxlbWVudC52YWx1ZSA9IG9wdGlvbi5leHBvcnRWYWx1ZTtcblxuICAgICAgaWYgKHRoaXMuZGF0YS5jb21ibykge1xuICAgICAgICBvcHRpb25FbGVtZW50LnN0eWxlLmZvbnRTaXplID0gZm9udFNpemVTdHlsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZGF0YS5maWVsZFZhbHVlLmluY2x1ZGVzKG9wdGlvbi5leHBvcnRWYWx1ZSkpIHtcbiAgICAgICAgb3B0aW9uRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzZWxlY3RlZFwiLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgc2VsZWN0RWxlbWVudC5hcHBlbmRDaGlsZChvcHRpb25FbGVtZW50KTtcbiAgICB9XG5cbiAgICBjb25zdCBnZXRWYWx1ZSA9IChldmVudCwgaXNFeHBvcnQpID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBpc0V4cG9ydCA/IFwidmFsdWVcIiA6IFwidGV4dENvbnRlbnRcIjtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBldmVudC50YXJnZXQub3B0aW9ucztcblxuICAgICAgaWYgKCFldmVudC50YXJnZXQubXVsdGlwbGUpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuc2VsZWN0ZWRJbmRleCA9PT0gLTEgPyBudWxsIDogb3B0aW9uc1tvcHRpb25zLnNlbGVjdGVkSW5kZXhdW25hbWVdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKG9wdGlvbnMsIG9wdGlvbiA9PiBvcHRpb24uc2VsZWN0ZWQpLm1hcChvcHRpb24gPT4gb3B0aW9uW25hbWVdKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0SXRlbXMgPSBldmVudCA9PiB7XG4gICAgICBjb25zdCBvcHRpb25zID0gZXZlbnQudGFyZ2V0Lm9wdGlvbnM7XG4gICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKG9wdGlvbnMsIG9wdGlvbiA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGlzcGxheVZhbHVlOiBvcHRpb24udGV4dENvbnRlbnQsXG4gICAgICAgICAgZXhwb3J0VmFsdWU6IG9wdGlvbi52YWx1ZVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGlmICh0aGlzLmVuYWJsZVNjcmlwdGluZyAmJiB0aGlzLmhhc0pTQWN0aW9ucykge1xuICAgICAgc2VsZWN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidXBkYXRlZnJvbXNhbmRib3hcIiwganNFdmVudCA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGlvbnMgPSB7XG4gICAgICAgICAgdmFsdWUoZXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQuZGV0YWlsLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gbmV3IFNldChBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXSk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHNlbGVjdEVsZW1lbnQub3B0aW9ucykge1xuICAgICAgICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSB2YWx1ZXMuaGFzKG9wdGlvbi52YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHtcbiAgICAgICAgICAgICAgdmFsdWU6IGdldFZhbHVlKGV2ZW50LCB0cnVlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIG11bHRpcGxlU2VsZWN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm11bHRpcGxlID0gdHJ1ZTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgcmVtb3ZlKGV2ZW50KSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gc2VsZWN0RWxlbWVudC5vcHRpb25zO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBldmVudC5kZXRhaWwucmVtb3ZlO1xuICAgICAgICAgICAgb3B0aW9uc1tpbmRleF0uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQucmVtb3ZlKGluZGV4KTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBpID0gQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleC5jYWxsKG9wdGlvbnMsIG9wdGlvbiA9PiBvcHRpb24uc2VsZWN0ZWQpO1xuXG4gICAgICAgICAgICAgIGlmIChpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbMF0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHtcbiAgICAgICAgICAgICAgdmFsdWU6IGdldFZhbHVlKGV2ZW50LCB0cnVlKSxcbiAgICAgICAgICAgICAgaXRlbXM6IGdldEl0ZW1zKGV2ZW50KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGNsZWFyKGV2ZW50KSB7XG4gICAgICAgICAgICB3aGlsZSAoc2VsZWN0RWxlbWVudC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5yZW1vdmUoMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHtcbiAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICAgIGl0ZW1zOiBbXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGluc2VydChldmVudCkge1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgZGlzcGxheVZhbHVlLFxuICAgICAgICAgICAgICBleHBvcnRWYWx1ZVxuICAgICAgICAgICAgfSA9IGV2ZW50LmRldGFpbC5pbnNlcnQ7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiKTtcbiAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQudGV4dENvbnRlbnQgPSBkaXNwbGF5VmFsdWU7XG4gICAgICAgICAgICBvcHRpb25FbGVtZW50LnZhbHVlID0gZXhwb3J0VmFsdWU7XG4gICAgICAgICAgICBzZWxlY3RFbGVtZW50Lmluc2VydEJlZm9yZShvcHRpb25FbGVtZW50LCBzZWxlY3RFbGVtZW50LmNoaWxkcmVuW2luZGV4XSk7XG4gICAgICAgICAgICBzdG9yYWdlLnNldFZhbHVlKGlkLCB7XG4gICAgICAgICAgICAgIHZhbHVlOiBnZXRWYWx1ZShldmVudCwgdHJ1ZSksXG4gICAgICAgICAgICAgIGl0ZW1zOiBnZXRJdGVtcyhldmVudClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBpdGVtcyhldmVudCkge1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBpdGVtc1xuICAgICAgICAgICAgfSA9IGV2ZW50LmRldGFpbDtcblxuICAgICAgICAgICAgd2hpbGUgKHNlbGVjdEVsZW1lbnQubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQucmVtb3ZlKDApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlWYWx1ZSxcbiAgICAgICAgICAgICAgICBleHBvcnRWYWx1ZVxuICAgICAgICAgICAgICB9ID0gaXRlbTtcbiAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIik7XG4gICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQudGV4dENvbnRlbnQgPSBkaXNwbGF5VmFsdWU7XG4gICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQudmFsdWUgPSBleHBvcnRWYWx1ZTtcbiAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5hcHBlbmRDaGlsZChvcHRpb25FbGVtZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNlbGVjdEVsZW1lbnQub3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1swXS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHtcbiAgICAgICAgICAgICAgdmFsdWU6IGdldFZhbHVlKGV2ZW50LCB0cnVlKSxcbiAgICAgICAgICAgICAgaXRlbXM6IGdldEl0ZW1zKGV2ZW50KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGluZGljZXMoZXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGljZXMgPSBuZXcgU2V0KGV2ZW50LmRldGFpbC5pbmRpY2VzKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgZXZlbnQudGFyZ2V0Lm9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gaW5kaWNlcy5oYXMob3B0aW9uLmluZGV4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RvcmFnZS5zZXRWYWx1ZShpZCwge1xuICAgICAgICAgICAgICB2YWx1ZTogZ2V0VmFsdWUoZXZlbnQsIHRydWUpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgZWRpdGFibGUoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldC5kaXNhYmxlZCA9ICFldmVudC5kZXRhaWwuZWRpdGFibGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fZGlzcGF0Y2hFdmVudEZyb21TYW5kYm94KGFjdGlvbnMsIGpzRXZlbnQpO1xuICAgICAgfSk7XG4gICAgICBzZWxlY3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IGV4cG9ydFZhbHVlID0gZ2V0VmFsdWUoZXZlbnQsIHRydWUpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGdldFZhbHVlKGV2ZW50LCBmYWxzZSk7XG4gICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHtcbiAgICAgICAgICB2YWx1ZTogZXhwb3J0VmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubGlua1NlcnZpY2UuZXZlbnRCdXM/LmRpc3BhdGNoKFwiZGlzcGF0Y2hldmVudGluc2FuZGJveFwiLCB7XG4gICAgICAgICAgc291cmNlOiB0aGlzLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBuYW1lOiBcIktleXN0cm9rZVwiLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBjaGFuZ2VFeDogZXhwb3J0VmFsdWUsXG4gICAgICAgICAgICB3aWxsQ29tbWl0OiB0cnVlLFxuICAgICAgICAgICAgY29tbWl0S2V5OiAxLFxuICAgICAgICAgICAga2V5RG93bjogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX3NldEV2ZW50TGlzdGVuZXJzKHNlbGVjdEVsZW1lbnQsIFtbXCJmb2N1c1wiLCBcIkZvY3VzXCJdLCBbXCJibHVyXCIsIFwiQmx1clwiXSwgW1wibW91c2Vkb3duXCIsIFwiTW91c2UgRG93blwiXSwgW1wibW91c2VlbnRlclwiLCBcIk1vdXNlIEVudGVyXCJdLCBbXCJtb3VzZWxlYXZlXCIsIFwiTW91c2UgRXhpdFwiXSwgW1wibW91c2V1cFwiLCBcIk1vdXNlIFVwXCJdLCBbXCJpbnB1dFwiLCBcIkFjdGlvblwiXV0sIGV2ZW50ID0+IGV2ZW50LnRhcmdldC5jaGVja2VkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHtcbiAgICAgICAgICB2YWx1ZTogZ2V0VmFsdWUoZXZlbnQpXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0QmFja2dyb3VuZENvbG9yKHNlbGVjdEVsZW1lbnQpO1xuXG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoc2VsZWN0RWxlbWVudCk7XG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgUG9wdXBBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS50aXRsZU9iaj8uc3RyIHx8IHBhcmFtZXRlcnMuZGF0YS5jb250ZW50c09iaj8uc3RyIHx8IHBhcmFtZXRlcnMuZGF0YS5yaWNoVGV4dD8uc3RyKTtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCB7XG4gICAgICBpc1JlbmRlcmFibGVcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBJR05PUkVfVFlQRVMgPSBbXCJMaW5lXCIsIFwiU3F1YXJlXCIsIFwiQ2lyY2xlXCIsIFwiUG9seUxpbmVcIiwgXCJQb2x5Z29uXCIsIFwiSW5rXCJdO1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9IFwicG9wdXBBbm5vdGF0aW9uXCI7XG5cbiAgICBpZiAoSUdOT1JFX1RZUEVTLmluY2x1ZGVzKHRoaXMuZGF0YS5wYXJlbnRUeXBlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdG9yID0gYFtkYXRhLWFubm90YXRpb24taWQ9XCIke3RoaXMuZGF0YS5wYXJlbnRJZH1cIl1gO1xuICAgIGNvbnN0IHBhcmVudEVsZW1lbnRzID0gdGhpcy5sYXllci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcblxuICAgIGlmIChwYXJlbnRFbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBjb25zdCBwb3B1cCA9IG5ldyBQb3B1cEVsZW1lbnQoe1xuICAgICAgY29udGFpbmVyOiB0aGlzLmNvbnRhaW5lcixcbiAgICAgIHRyaWdnZXI6IEFycmF5LmZyb20ocGFyZW50RWxlbWVudHMpLFxuICAgICAgY29sb3I6IHRoaXMuZGF0YS5jb2xvcixcbiAgICAgIHRpdGxlT2JqOiB0aGlzLmRhdGEudGl0bGVPYmosXG4gICAgICBtb2RpZmljYXRpb25EYXRlOiB0aGlzLmRhdGEubW9kaWZpY2F0aW9uRGF0ZSxcbiAgICAgIGNvbnRlbnRzT2JqOiB0aGlzLmRhdGEuY29udGVudHNPYmosXG4gICAgICByaWNoVGV4dDogdGhpcy5kYXRhLnJpY2hUZXh0XG4gICAgfSk7XG4gICAgY29uc3QgcGFnZSA9IHRoaXMucGFnZTtcblxuICAgIGNvbnN0IHJlY3QgPSBfdXRpbC5VdGlsLm5vcm1hbGl6ZVJlY3QoW3RoaXMuZGF0YS5wYXJlbnRSZWN0WzBdLCBwYWdlLnZpZXdbM10gLSB0aGlzLmRhdGEucGFyZW50UmVjdFsxXSArIHBhZ2Uudmlld1sxXSwgdGhpcy5kYXRhLnBhcmVudFJlY3RbMl0sIHBhZ2Uudmlld1szXSAtIHRoaXMuZGF0YS5wYXJlbnRSZWN0WzNdICsgcGFnZS52aWV3WzFdXSk7XG5cbiAgICBjb25zdCBwb3B1cExlZnQgPSByZWN0WzBdICsgdGhpcy5kYXRhLnBhcmVudFJlY3RbMl0gLSB0aGlzLmRhdGEucGFyZW50UmVjdFswXTtcbiAgICBjb25zdCBwb3B1cFRvcCA9IHJlY3RbMV07XG4gICAgdGhpcy5jb250YWluZXIuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gYCR7LXBvcHVwTGVmdH1weCAkey1wb3B1cFRvcH1weGA7XG4gICAgdGhpcy5jb250YWluZXIuc3R5bGUubGVmdCA9IGAke3BvcHVwTGVmdH1weGA7XG4gICAgdGhpcy5jb250YWluZXIuc3R5bGUudG9wID0gYCR7cG9wdXBUb3B9cHhgO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHBvcHVwLnJlbmRlcigpKTtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBQb3B1cEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBwYXJhbWV0ZXJzLmNvbnRhaW5lcjtcbiAgICB0aGlzLnRyaWdnZXIgPSBwYXJhbWV0ZXJzLnRyaWdnZXI7XG4gICAgdGhpcy5jb2xvciA9IHBhcmFtZXRlcnMuY29sb3I7XG4gICAgdGhpcy50aXRsZU9iaiA9IHBhcmFtZXRlcnMudGl0bGVPYmo7XG4gICAgdGhpcy5tb2RpZmljYXRpb25EYXRlID0gcGFyYW1ldGVycy5tb2RpZmljYXRpb25EYXRlO1xuICAgIHRoaXMuY29udGVudHNPYmogPSBwYXJhbWV0ZXJzLmNvbnRlbnRzT2JqO1xuICAgIHRoaXMucmljaFRleHQgPSBwYXJhbWV0ZXJzLnJpY2hUZXh0O1xuICAgIHRoaXMuaGlkZVdyYXBwZXIgPSBwYXJhbWV0ZXJzLmhpZGVXcmFwcGVyIHx8IGZhbHNlO1xuICAgIHRoaXMucGlubmVkID0gZmFsc2U7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgQkFDS0dST1VORF9FTkxJR0hUID0gMC43O1xuICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHdyYXBwZXIuY2xhc3NOYW1lID0gXCJwb3B1cFdyYXBwZXJcIjtcbiAgICB0aGlzLmhpZGVFbGVtZW50ID0gdGhpcy5oaWRlV3JhcHBlciA/IHdyYXBwZXIgOiB0aGlzLmNvbnRhaW5lcjtcbiAgICB0aGlzLmhpZGVFbGVtZW50LmhpZGRlbiA9IHRydWU7XG4gICAgY29uc3QgcG9wdXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHBvcHVwLmNsYXNzTmFtZSA9IFwicG9wdXBcIjtcbiAgICBjb25zdCBjb2xvciA9IHRoaXMuY29sb3I7XG5cbiAgICBpZiAoY29sb3IpIHtcbiAgICAgIGNvbnN0IHIgPSBCQUNLR1JPVU5EX0VOTElHSFQgKiAoMjU1IC0gY29sb3JbMF0pICsgY29sb3JbMF07XG4gICAgICBjb25zdCBnID0gQkFDS0dST1VORF9FTkxJR0hUICogKDI1NSAtIGNvbG9yWzFdKSArIGNvbG9yWzFdO1xuICAgICAgY29uc3QgYiA9IEJBQ0tHUk9VTkRfRU5MSUdIVCAqICgyNTUgLSBjb2xvclsyXSkgKyBjb2xvclsyXTtcbiAgICAgIHBvcHVwLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IF91dGlsLlV0aWwubWFrZUhleENvbG9yKHIgfCAwLCBnIHwgMCwgYiB8IDApO1xuICAgIH1cblxuICAgIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImgxXCIpO1xuICAgIHRpdGxlLmRpciA9IHRoaXMudGl0bGVPYmouZGlyO1xuICAgIHRpdGxlLnRleHRDb250ZW50ID0gdGhpcy50aXRsZU9iai5zdHI7XG4gICAgcG9wdXAuYXBwZW5kQ2hpbGQodGl0bGUpO1xuXG4gICAgY29uc3QgZGF0ZU9iamVjdCA9IF9kaXNwbGF5X3V0aWxzLlBERkRhdGVTdHJpbmcudG9EYXRlT2JqZWN0KHRoaXMubW9kaWZpY2F0aW9uRGF0ZSk7XG5cbiAgICBpZiAoZGF0ZU9iamVjdCkge1xuICAgICAgY29uc3QgbW9kaWZpY2F0aW9uRGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgICAgbW9kaWZpY2F0aW9uRGF0ZS5jbGFzc05hbWUgPSBcInBvcHVwRGF0ZVwiO1xuICAgICAgbW9kaWZpY2F0aW9uRGF0ZS50ZXh0Q29udGVudCA9IFwie3tkYXRlfX0sIHt7dGltZX19XCI7XG4gICAgICBtb2RpZmljYXRpb25EYXRlLmRhdGFzZXQubDEwbklkID0gXCJhbm5vdGF0aW9uX2RhdGVfc3RyaW5nXCI7XG4gICAgICBtb2RpZmljYXRpb25EYXRlLmRhdGFzZXQubDEwbkFyZ3MgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGRhdGU6IGRhdGVPYmplY3QudG9Mb2NhbGVEYXRlU3RyaW5nKCksXG4gICAgICAgIHRpbWU6IGRhdGVPYmplY3QudG9Mb2NhbGVUaW1lU3RyaW5nKClcbiAgICAgIH0pO1xuICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQobW9kaWZpY2F0aW9uRGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmljaFRleHQ/LnN0ciAmJiAoIXRoaXMuY29udGVudHNPYmo/LnN0ciB8fCB0aGlzLmNvbnRlbnRzT2JqLnN0ciA9PT0gdGhpcy5yaWNoVGV4dC5zdHIpKSB7XG4gICAgICBfeGZhX2xheWVyLlhmYUxheWVyLnJlbmRlcih7XG4gICAgICAgIHhmYUh0bWw6IHRoaXMucmljaFRleHQuaHRtbCxcbiAgICAgICAgaW50ZW50OiBcInJpY2hUZXh0XCIsXG4gICAgICAgIGRpdjogcG9wdXBcbiAgICAgIH0pO1xuXG4gICAgICBwb3B1cC5sYXN0Q2hpbGQuY2xhc3NOYW1lID0gXCJyaWNoVGV4dCBwb3B1cENvbnRlbnRcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29udGVudHMgPSB0aGlzLl9mb3JtYXRDb250ZW50cyh0aGlzLmNvbnRlbnRzT2JqKTtcblxuICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQoY29udGVudHMpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnRyaWdnZXIpKSB7XG4gICAgICB0aGlzLnRyaWdnZXIgPSBbdGhpcy50cmlnZ2VyXTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy50cmlnZ2VyKSB7XG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl90b2dnbGUuYmluZCh0aGlzKSk7XG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgdGhpcy5fc2hvdy5iaW5kKHRoaXMsIGZhbHNlKSk7XG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW91dFwiLCB0aGlzLl9oaWRlLmJpbmQodGhpcywgZmFsc2UpKTtcbiAgICB9XG5cbiAgICBwb3B1cC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGlkZS5iaW5kKHRoaXMsIHRydWUpKTtcbiAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHBvcHVwKTtcbiAgICByZXR1cm4gd3JhcHBlcjtcbiAgfVxuXG4gIF9mb3JtYXRDb250ZW50cyh7XG4gICAgc3RyLFxuICAgIGRpclxuICB9KSB7XG4gICAgY29uc3QgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpO1xuICAgIHAuY2xhc3NOYW1lID0gXCJwb3B1cENvbnRlbnRcIjtcbiAgICBwLmRpciA9IGRpcjtcbiAgICBjb25zdCBsaW5lcyA9IHN0ci5zcGxpdCgvKD86XFxyXFxuP3xcXG4pLyk7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBsaW5lcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICBjb25zdCBsaW5lID0gbGluZXNbaV07XG4gICAgICBwLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGxpbmUpKTtcblxuICAgICAgaWYgKGkgPCBpaSAtIDEpIHtcbiAgICAgICAgcC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnJcIikpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwO1xuICB9XG5cbiAgX3RvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5waW5uZWQpIHtcbiAgICAgIHRoaXMuX2hpZGUodHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Nob3codHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgX3Nob3cocGluID0gZmFsc2UpIHtcbiAgICBpZiAocGluKSB7XG4gICAgICB0aGlzLnBpbm5lZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGlkZUVsZW1lbnQuaGlkZGVuKSB7XG4gICAgICB0aGlzLmhpZGVFbGVtZW50LmhpZGRlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUuekluZGV4ICs9IDE7XG4gICAgfVxuICB9XG5cbiAgX2hpZGUodW5waW4gPSB0cnVlKSB7XG4gICAgaWYgKHVucGluKSB7XG4gICAgICB0aGlzLnBpbm5lZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5oaWRlRWxlbWVudC5oaWRkZW4gJiYgIXRoaXMucGlubmVkKSB7XG4gICAgICB0aGlzLmhpZGVFbGVtZW50LmhpZGRlbiA9IHRydWU7XG4gICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS56SW5kZXggLT0gMTtcbiAgICB9XG4gIH1cblxufVxuXG5jbGFzcyBGcmVlVGV4dEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZU9iaj8uc3RyIHx8IHBhcmFtZXRlcnMuZGF0YS5jb250ZW50c09iaj8uc3RyIHx8IHBhcmFtZXRlcnMuZGF0YS5yaWNoVGV4dD8uc3RyKTtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCB7XG4gICAgICBpc1JlbmRlcmFibGUsXG4gICAgICBpZ25vcmVCb3JkZXI6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSBcImZyZWVUZXh0QW5ub3RhdGlvblwiO1xuXG4gICAgaWYgKCF0aGlzLmRhdGEuaGFzUG9wdXApIHtcbiAgICAgIHRoaXMuX2NyZWF0ZVBvcHVwKG51bGwsIHRoaXMuZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgTGluZUFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZU9iaj8uc3RyIHx8IHBhcmFtZXRlcnMuZGF0YS5jb250ZW50c09iaj8uc3RyIHx8IHBhcmFtZXRlcnMuZGF0YS5yaWNoVGV4dD8uc3RyKTtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCB7XG4gICAgICBpc1JlbmRlcmFibGUsXG4gICAgICBpZ25vcmVCb3JkZXI6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSBcImxpbmVBbm5vdGF0aW9uXCI7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICBjb25zdCB3aWR0aCA9IGRhdGEucmVjdFsyXSAtIGRhdGEucmVjdFswXTtcbiAgICBjb25zdCBoZWlnaHQgPSBkYXRhLnJlY3RbM10gLSBkYXRhLnJlY3RbMV07XG4gICAgY29uc3Qgc3ZnID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICBjb25zdCBsaW5lID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6bGluZVwiKTtcbiAgICBsaW5lLnNldEF0dHJpYnV0ZShcIngxXCIsIGRhdGEucmVjdFsyXSAtIGRhdGEubGluZUNvb3JkaW5hdGVzWzBdKTtcbiAgICBsaW5lLnNldEF0dHJpYnV0ZShcInkxXCIsIGRhdGEucmVjdFszXSAtIGRhdGEubGluZUNvb3JkaW5hdGVzWzFdKTtcbiAgICBsaW5lLnNldEF0dHJpYnV0ZShcIngyXCIsIGRhdGEucmVjdFsyXSAtIGRhdGEubGluZUNvb3JkaW5hdGVzWzJdKTtcbiAgICBsaW5lLnNldEF0dHJpYnV0ZShcInkyXCIsIGRhdGEucmVjdFszXSAtIGRhdGEubGluZUNvb3JkaW5hdGVzWzNdKTtcbiAgICBsaW5lLnNldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiLCBkYXRhLmJvcmRlclN0eWxlLndpZHRoIHx8IDEpO1xuICAgIGxpbmUuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIFwidHJhbnNwYXJlbnRcIik7XG4gICAgbGluZS5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIik7XG4gICAgc3ZnLmFwcGVuZENoaWxkKGxpbmUpO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChzdmcpO1xuXG4gICAgdGhpcy5fY3JlYXRlUG9wdXAobGluZSwgZGF0YSk7XG5cbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBTcXVhcmVBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGVPYmo/LnN0ciB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHNPYmo/LnN0ciB8fCBwYXJhbWV0ZXJzLmRhdGEucmljaFRleHQ/LnN0cik7XG4gICAgc3VwZXIocGFyYW1ldGVycywge1xuICAgICAgaXNSZW5kZXJhYmxlLFxuICAgICAgaWdub3JlQm9yZGVyOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJzcXVhcmVBbm5vdGF0aW9uXCI7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICBjb25zdCB3aWR0aCA9IGRhdGEucmVjdFsyXSAtIGRhdGEucmVjdFswXTtcbiAgICBjb25zdCBoZWlnaHQgPSBkYXRhLnJlY3RbM10gLSBkYXRhLnJlY3RbMV07XG4gICAgY29uc3Qgc3ZnID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICBjb25zdCBib3JkZXJXaWR0aCA9IGRhdGEuYm9yZGVyU3R5bGUud2lkdGg7XG4gICAgY29uc3Qgc3F1YXJlID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6cmVjdFwiKTtcbiAgICBzcXVhcmUuc2V0QXR0cmlidXRlKFwieFwiLCBib3JkZXJXaWR0aCAvIDIpO1xuICAgIHNxdWFyZS5zZXRBdHRyaWJ1dGUoXCJ5XCIsIGJvcmRlcldpZHRoIC8gMik7XG4gICAgc3F1YXJlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIHdpZHRoIC0gYm9yZGVyV2lkdGgpO1xuICAgIHNxdWFyZS5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgaGVpZ2h0IC0gYm9yZGVyV2lkdGgpO1xuICAgIHNxdWFyZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIiwgYm9yZGVyV2lkdGggfHwgMSk7XG4gICAgc3F1YXJlLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCBcInRyYW5zcGFyZW50XCIpO1xuICAgIHNxdWFyZS5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIik7XG4gICAgc3ZnLmFwcGVuZENoaWxkKHNxdWFyZSk7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kKHN2Zyk7XG5cbiAgICB0aGlzLl9jcmVhdGVQb3B1cChzcXVhcmUsIGRhdGEpO1xuXG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgQ2lyY2xlQW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBpc1JlbmRlcmFibGUgPSAhIShwYXJhbWV0ZXJzLmRhdGEuaGFzUG9wdXAgfHwgcGFyYW1ldGVycy5kYXRhLnRpdGxlT2JqPy5zdHIgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzT2JqPy5zdHIgfHwgcGFyYW1ldGVycy5kYXRhLnJpY2hUZXh0Py5zdHIpO1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIHtcbiAgICAgIGlzUmVuZGVyYWJsZSxcbiAgICAgIGlnbm9yZUJvcmRlcjogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9IFwiY2lyY2xlQW5ub3RhdGlvblwiO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgY29uc3Qgd2lkdGggPSBkYXRhLnJlY3RbMl0gLSBkYXRhLnJlY3RbMF07XG4gICAgY29uc3QgaGVpZ2h0ID0gZGF0YS5yZWN0WzNdIC0gZGF0YS5yZWN0WzFdO1xuICAgIGNvbnN0IHN2ZyA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUod2lkdGgsIGhlaWdodCk7XG4gICAgY29uc3QgYm9yZGVyV2lkdGggPSBkYXRhLmJvcmRlclN0eWxlLndpZHRoO1xuICAgIGNvbnN0IGNpcmNsZSA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOmVsbGlwc2VcIik7XG4gICAgY2lyY2xlLnNldEF0dHJpYnV0ZShcImN4XCIsIHdpZHRoIC8gMik7XG4gICAgY2lyY2xlLnNldEF0dHJpYnV0ZShcImN5XCIsIGhlaWdodCAvIDIpO1xuICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoXCJyeFwiLCB3aWR0aCAvIDIgLSBib3JkZXJXaWR0aCAvIDIpO1xuICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoXCJyeVwiLCBoZWlnaHQgLyAyIC0gYm9yZGVyV2lkdGggLyAyKTtcbiAgICBjaXJjbGUuc2V0QXR0cmlidXRlKFwic3Ryb2tlLXdpZHRoXCIsIGJvcmRlcldpZHRoIHx8IDEpO1xuICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIiwgXCJ0cmFuc3BhcmVudFwiKTtcbiAgICBjaXJjbGUuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCBcInRyYW5zcGFyZW50XCIpO1xuICAgIHN2Zy5hcHBlbmRDaGlsZChjaXJjbGUpO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChzdmcpO1xuXG4gICAgdGhpcy5fY3JlYXRlUG9wdXAoY2lyY2xlLCBkYXRhKTtcblxuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG59XG5cbmNsYXNzIFBvbHlsaW5lQW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBpc1JlbmRlcmFibGUgPSAhIShwYXJhbWV0ZXJzLmRhdGEuaGFzUG9wdXAgfHwgcGFyYW1ldGVycy5kYXRhLnRpdGxlT2JqPy5zdHIgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzT2JqPy5zdHIgfHwgcGFyYW1ldGVycy5kYXRhLnJpY2hUZXh0Py5zdHIpO1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIHtcbiAgICAgIGlzUmVuZGVyYWJsZSxcbiAgICAgIGlnbm9yZUJvcmRlcjogdHJ1ZVxuICAgIH0pO1xuICAgIHRoaXMuY29udGFpbmVyQ2xhc3NOYW1lID0gXCJwb2x5bGluZUFubm90YXRpb25cIjtcbiAgICB0aGlzLnN2Z0VsZW1lbnROYW1lID0gXCJzdmc6cG9seWxpbmVcIjtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSB0aGlzLmNvbnRhaW5lckNsYXNzTmFtZTtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuICAgIGNvbnN0IHdpZHRoID0gZGF0YS5yZWN0WzJdIC0gZGF0YS5yZWN0WzBdO1xuICAgIGNvbnN0IGhlaWdodCA9IGRhdGEucmVjdFszXSAtIGRhdGEucmVjdFsxXTtcbiAgICBjb25zdCBzdmcgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKHdpZHRoLCBoZWlnaHQpO1xuICAgIGxldCBwb2ludHMgPSBbXTtcblxuICAgIGZvciAoY29uc3QgY29vcmRpbmF0ZSBvZiBkYXRhLnZlcnRpY2VzKSB7XG4gICAgICBjb25zdCB4ID0gY29vcmRpbmF0ZS54IC0gZGF0YS5yZWN0WzBdO1xuICAgICAgY29uc3QgeSA9IGRhdGEucmVjdFszXSAtIGNvb3JkaW5hdGUueTtcbiAgICAgIHBvaW50cy5wdXNoKHggKyBcIixcIiArIHkpO1xuICAgIH1cblxuICAgIHBvaW50cyA9IHBvaW50cy5qb2luKFwiIFwiKTtcbiAgICBjb25zdCBwb2x5bGluZSA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KHRoaXMuc3ZnRWxlbWVudE5hbWUpO1xuICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZShcInBvaW50c1wiLCBwb2ludHMpO1xuICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiLCBkYXRhLmJvcmRlclN0eWxlLndpZHRoIHx8IDEpO1xuICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCBcInRyYW5zcGFyZW50XCIpO1xuICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgXCJ0cmFuc3BhcmVudFwiKTtcbiAgICBzdmcuYXBwZW5kQ2hpbGQocG9seWxpbmUpO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChzdmcpO1xuXG4gICAgdGhpcy5fY3JlYXRlUG9wdXAocG9seWxpbmUsIGRhdGEpO1xuXG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgUG9seWdvbkFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgUG9seWxpbmVBbm5vdGF0aW9uRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICB0aGlzLmNvbnRhaW5lckNsYXNzTmFtZSA9IFwicG9seWdvbkFubm90YXRpb25cIjtcbiAgICB0aGlzLnN2Z0VsZW1lbnROYW1lID0gXCJzdmc6cG9seWdvblwiO1xuICB9XG5cbn1cblxuY2xhc3MgQ2FyZXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGVPYmo/LnN0ciB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHNPYmo/LnN0ciB8fCBwYXJhbWV0ZXJzLmRhdGEucmljaFRleHQ/LnN0cik7XG4gICAgc3VwZXIocGFyYW1ldGVycywge1xuICAgICAgaXNSZW5kZXJhYmxlLFxuICAgICAgaWdub3JlQm9yZGVyOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJjYXJldEFubm90YXRpb25cIjtcblxuICAgIGlmICghdGhpcy5kYXRhLmhhc1BvcHVwKSB7XG4gICAgICB0aGlzLl9jcmVhdGVQb3B1cChudWxsLCB0aGlzLmRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG59XG5cbmNsYXNzIElua0Fubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZU9iaj8uc3RyIHx8IHBhcmFtZXRlcnMuZGF0YS5jb250ZW50c09iaj8uc3RyIHx8IHBhcmFtZXRlcnMuZGF0YS5yaWNoVGV4dD8uc3RyKTtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCB7XG4gICAgICBpc1JlbmRlcmFibGUsXG4gICAgICBpZ25vcmVCb3JkZXI6IHRydWVcbiAgICB9KTtcbiAgICB0aGlzLmNvbnRhaW5lckNsYXNzTmFtZSA9IFwiaW5rQW5ub3RhdGlvblwiO1xuICAgIHRoaXMuc3ZnRWxlbWVudE5hbWUgPSBcInN2Zzpwb2x5bGluZVwiO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9IHRoaXMuY29udGFpbmVyQ2xhc3NOYW1lO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgY29uc3Qgd2lkdGggPSBkYXRhLnJlY3RbMl0gLSBkYXRhLnJlY3RbMF07XG4gICAgY29uc3QgaGVpZ2h0ID0gZGF0YS5yZWN0WzNdIC0gZGF0YS5yZWN0WzFdO1xuICAgIGNvbnN0IHN2ZyA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUod2lkdGgsIGhlaWdodCk7XG5cbiAgICBmb3IgKGNvbnN0IGlua0xpc3Qgb2YgZGF0YS5pbmtMaXN0cykge1xuICAgICAgbGV0IHBvaW50cyA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGNvb3JkaW5hdGUgb2YgaW5rTGlzdCkge1xuICAgICAgICBjb25zdCB4ID0gY29vcmRpbmF0ZS54IC0gZGF0YS5yZWN0WzBdO1xuICAgICAgICBjb25zdCB5ID0gZGF0YS5yZWN0WzNdIC0gY29vcmRpbmF0ZS55O1xuICAgICAgICBwb2ludHMucHVzaChgJHt4fSwke3l9YCk7XG4gICAgICB9XG5cbiAgICAgIHBvaW50cyA9IHBvaW50cy5qb2luKFwiIFwiKTtcbiAgICAgIGNvbnN0IHBvbHlsaW5lID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQodGhpcy5zdmdFbGVtZW50TmFtZSk7XG4gICAgICBwb2x5bGluZS5zZXRBdHRyaWJ1dGUoXCJwb2ludHNcIiwgcG9pbnRzKTtcbiAgICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiLCBkYXRhLmJvcmRlclN0eWxlLndpZHRoIHx8IDEpO1xuICAgICAgcG9seWxpbmUuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIFwidHJhbnNwYXJlbnRcIik7XG4gICAgICBwb2x5bGluZS5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIik7XG5cbiAgICAgIHRoaXMuX2NyZWF0ZVBvcHVwKHBvbHlsaW5lLCBkYXRhKTtcblxuICAgICAgc3ZnLmFwcGVuZENoaWxkKHBvbHlsaW5lKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmQoc3ZnKTtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBIaWdobGlnaHRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGVPYmo/LnN0ciB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHNPYmo/LnN0ciB8fCBwYXJhbWV0ZXJzLmRhdGEucmljaFRleHQ/LnN0cik7XG4gICAgc3VwZXIocGFyYW1ldGVycywge1xuICAgICAgaXNSZW5kZXJhYmxlLFxuICAgICAgaWdub3JlQm9yZGVyOiB0cnVlLFxuICAgICAgY3JlYXRlUXVhZHJpbGF0ZXJhbHM6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAoIXRoaXMuZGF0YS5oYXNQb3B1cCkge1xuICAgICAgdGhpcy5fY3JlYXRlUG9wdXAobnVsbCwgdGhpcy5kYXRhKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5xdWFkcmlsYXRlcmFscykge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclF1YWRyaWxhdGVyYWxzKFwiaGlnaGxpZ2h0QW5ub3RhdGlvblwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSBcImhpZ2hsaWdodEFubm90YXRpb25cIjtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBVbmRlcmxpbmVBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGVPYmo/LnN0ciB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHNPYmo/LnN0ciB8fCBwYXJhbWV0ZXJzLmRhdGEucmljaFRleHQ/LnN0cik7XG4gICAgc3VwZXIocGFyYW1ldGVycywge1xuICAgICAgaXNSZW5kZXJhYmxlLFxuICAgICAgaWdub3JlQm9yZGVyOiB0cnVlLFxuICAgICAgY3JlYXRlUXVhZHJpbGF0ZXJhbHM6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAoIXRoaXMuZGF0YS5oYXNQb3B1cCkge1xuICAgICAgdGhpcy5fY3JlYXRlUG9wdXAobnVsbCwgdGhpcy5kYXRhKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5xdWFkcmlsYXRlcmFscykge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclF1YWRyaWxhdGVyYWxzKFwidW5kZXJsaW5lQW5ub3RhdGlvblwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSBcInVuZGVybGluZUFubm90YXRpb25cIjtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBTcXVpZ2dseUFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZU9iaj8uc3RyIHx8IHBhcmFtZXRlcnMuZGF0YS5jb250ZW50c09iaj8uc3RyIHx8IHBhcmFtZXRlcnMuZGF0YS5yaWNoVGV4dD8uc3RyKTtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCB7XG4gICAgICBpc1JlbmRlcmFibGUsXG4gICAgICBpZ25vcmVCb3JkZXI6IHRydWUsXG4gICAgICBjcmVhdGVRdWFkcmlsYXRlcmFsczogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICghdGhpcy5kYXRhLmhhc1BvcHVwKSB7XG4gICAgICB0aGlzLl9jcmVhdGVQb3B1cChudWxsLCB0aGlzLmRhdGEpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnF1YWRyaWxhdGVyYWxzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyUXVhZHJpbGF0ZXJhbHMoXCJzcXVpZ2dseUFubm90YXRpb25cIik7XG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJzcXVpZ2dseUFubm90YXRpb25cIjtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBTdHJpa2VPdXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGVPYmo/LnN0ciB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHNPYmo/LnN0ciB8fCBwYXJhbWV0ZXJzLmRhdGEucmljaFRleHQ/LnN0cik7XG4gICAgc3VwZXIocGFyYW1ldGVycywge1xuICAgICAgaXNSZW5kZXJhYmxlLFxuICAgICAgaWdub3JlQm9yZGVyOiB0cnVlLFxuICAgICAgY3JlYXRlUXVhZHJpbGF0ZXJhbHM6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAoIXRoaXMuZGF0YS5oYXNQb3B1cCkge1xuICAgICAgdGhpcy5fY3JlYXRlUG9wdXAobnVsbCwgdGhpcy5kYXRhKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5xdWFkcmlsYXRlcmFscykge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclF1YWRyaWxhdGVyYWxzKFwic3RyaWtlb3V0QW5ub3RhdGlvblwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSBcInN0cmlrZW91dEFubm90YXRpb25cIjtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBTdGFtcEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZU9iaj8uc3RyIHx8IHBhcmFtZXRlcnMuZGF0YS5jb250ZW50c09iaj8uc3RyIHx8IHBhcmFtZXRlcnMuZGF0YS5yaWNoVGV4dD8uc3RyKTtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCB7XG4gICAgICBpc1JlbmRlcmFibGUsXG4gICAgICBpZ25vcmVCb3JkZXI6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSBcInN0YW1wQW5ub3RhdGlvblwiO1xuXG4gICAgaWYgKCF0aGlzLmRhdGEuaGFzUG9wdXApIHtcbiAgICAgIHRoaXMuX2NyZWF0ZVBvcHVwKG51bGwsIHRoaXMuZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIHtcbiAgICAgIGlzUmVuZGVyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGNvbnN0IHtcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgY29udGVudFxuICAgIH0gPSB0aGlzLmRhdGEuZmlsZTtcbiAgICB0aGlzLmZpbGVuYW1lID0gKDAsIF9kaXNwbGF5X3V0aWxzLmdldEZpbGVuYW1lRnJvbVVybCkoZmlsZW5hbWUpO1xuICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XG4gICAgdGhpcy5saW5rU2VydmljZS5ldmVudEJ1cz8uZGlzcGF0Y2goXCJmaWxlYXR0YWNobWVudGFubm90YXRpb25cIiwge1xuICAgICAgc291cmNlOiB0aGlzLFxuICAgICAgaWQ6ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoZmlsZW5hbWUpLFxuICAgICAgZmlsZW5hbWUsXG4gICAgICBjb250ZW50XG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJmaWxlQXR0YWNobWVudEFubm90YXRpb25cIjtcbiAgICBjb25zdCB0cmlnZ2VyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0cmlnZ2VyLnN0eWxlLmhlaWdodCA9IHRoaXMuY29udGFpbmVyLnN0eWxlLmhlaWdodDtcbiAgICB0cmlnZ2VyLnN0eWxlLndpZHRoID0gdGhpcy5jb250YWluZXIuc3R5bGUud2lkdGg7XG4gICAgdHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKFwiZGJsY2xpY2tcIiwgdGhpcy5fZG93bmxvYWQuYmluZCh0aGlzKSk7XG5cbiAgICBpZiAoIXRoaXMuZGF0YS5oYXNQb3B1cCAmJiAodGhpcy5kYXRhLnRpdGxlT2JqPy5zdHIgfHwgdGhpcy5kYXRhLmNvbnRlbnRzT2JqPy5zdHIgfHwgdGhpcy5kYXRhLnJpY2hUZXh0KSkge1xuICAgICAgdGhpcy5fY3JlYXRlUG9wdXAodHJpZ2dlciwgdGhpcy5kYXRhKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0cmlnZ2VyKTtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxuICBfZG93bmxvYWQoKSB7XG4gICAgdGhpcy5kb3dubG9hZE1hbmFnZXI/Lm9wZW5PckRvd25sb2FkRGF0YSh0aGlzLmNvbnRhaW5lciwgdGhpcy5jb250ZW50LCB0aGlzLmZpbGVuYW1lKTtcbiAgfVxuXG59XG5cbmNsYXNzIEFubm90YXRpb25MYXllciB7XG4gIHN0YXRpYyByZW5kZXIocGFyYW1ldGVycykge1xuICAgIGNvbnN0IHNvcnRlZEFubm90YXRpb25zID0gW10sXG4gICAgICAgICAgcG9wdXBBbm5vdGF0aW9ucyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIHBhcmFtZXRlcnMuYW5ub3RhdGlvbnMpIHtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuYW5ub3RhdGlvblR5cGUgPT09IF91dGlsLkFubm90YXRpb25UeXBlLlBPUFVQKSB7XG4gICAgICAgIHBvcHVwQW5ub3RhdGlvbnMucHVzaChkYXRhKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHNvcnRlZEFubm90YXRpb25zLnB1c2goZGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKHBvcHVwQW5ub3RhdGlvbnMubGVuZ3RoKSB7XG4gICAgICBzb3J0ZWRBbm5vdGF0aW9ucy5wdXNoKC4uLnBvcHVwQW5ub3RhdGlvbnMpO1xuICAgIH1cblxuICAgIGNvbnN0IGRpdiA9IHBhcmFtZXRlcnMuZGl2O1xuXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIHNvcnRlZEFubm90YXRpb25zKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gQW5ub3RhdGlvbkVsZW1lbnRGYWN0b3J5LmNyZWF0ZSh7XG4gICAgICAgIGRhdGEsXG4gICAgICAgIGxheWVyOiBkaXYsXG4gICAgICAgIHBhZ2U6IHBhcmFtZXRlcnMucGFnZSxcbiAgICAgICAgdmlld3BvcnQ6IHBhcmFtZXRlcnMudmlld3BvcnQsXG4gICAgICAgIGxpbmtTZXJ2aWNlOiBwYXJhbWV0ZXJzLmxpbmtTZXJ2aWNlLFxuICAgICAgICBkb3dubG9hZE1hbmFnZXI6IHBhcmFtZXRlcnMuZG93bmxvYWRNYW5hZ2VyLFxuICAgICAgICBpbWFnZVJlc291cmNlc1BhdGg6IHBhcmFtZXRlcnMuaW1hZ2VSZXNvdXJjZXNQYXRoIHx8IFwiXCIsXG4gICAgICAgIHJlbmRlckZvcm1zOiBwYXJhbWV0ZXJzLnJlbmRlckZvcm1zICE9PSBmYWxzZSxcbiAgICAgICAgc3ZnRmFjdG9yeTogbmV3IF9kaXNwbGF5X3V0aWxzLkRPTVNWR0ZhY3RvcnkoKSxcbiAgICAgICAgYW5ub3RhdGlvblN0b3JhZ2U6IHBhcmFtZXRlcnMuYW5ub3RhdGlvblN0b3JhZ2UgfHwgbmV3IF9hbm5vdGF0aW9uX3N0b3JhZ2UuQW5ub3RhdGlvblN0b3JhZ2UoKSxcbiAgICAgICAgZW5hYmxlU2NyaXB0aW5nOiBwYXJhbWV0ZXJzLmVuYWJsZVNjcmlwdGluZyxcbiAgICAgICAgaGFzSlNBY3Rpb25zOiBwYXJhbWV0ZXJzLmhhc0pTQWN0aW9ucyxcbiAgICAgICAgZmllbGRPYmplY3RzOiBwYXJhbWV0ZXJzLmZpZWxkT2JqZWN0cyxcbiAgICAgICAgbW91c2VTdGF0ZTogcGFyYW1ldGVycy5tb3VzZVN0YXRlIHx8IHtcbiAgICAgICAgICBpc0Rvd246IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZWxlbWVudC5pc1JlbmRlcmFibGUpIHtcbiAgICAgICAgY29uc3QgcmVuZGVyZWQgPSBlbGVtZW50LnJlbmRlcigpO1xuXG4gICAgICAgIGlmIChkYXRhLmhpZGRlbikge1xuICAgICAgICAgIHJlbmRlcmVkLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVuZGVyZWQpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCByZW5kZXJlZEVsZW1lbnQgb2YgcmVuZGVyZWQpIHtcbiAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChyZW5kZXJlZEVsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFBvcHVwQW5ub3RhdGlvbkVsZW1lbnQpIHtcbiAgICAgICAgICAgIGRpdi5wcmVwZW5kKHJlbmRlcmVkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKHJlbmRlcmVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNzZXRBbm5vdGF0aW9uQ2FudmFzTWFwKGRpdiwgcGFyYW1ldGVycy5hbm5vdGF0aW9uQ2FudmFzTWFwKTtcbiAgfVxuXG4gIHN0YXRpYyB1cGRhdGUocGFyYW1ldGVycykge1xuICAgIGNvbnN0IHtcbiAgICAgIHBhZ2UsXG4gICAgICB2aWV3cG9ydCxcbiAgICAgIGFubm90YXRpb25zLFxuICAgICAgYW5ub3RhdGlvbkNhbnZhc01hcCxcbiAgICAgIGRpdlxuICAgIH0gPSBwYXJhbWV0ZXJzO1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IHZpZXdwb3J0LnRyYW5zZm9ybTtcbiAgICBjb25zdCBtYXRyaXggPSBgbWF0cml4KCR7dHJhbnNmb3JtLmpvaW4oXCIsXCIpfSlgO1xuICAgIGxldCBzY2FsZSwgb3duTWF0cml4O1xuXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGFubm90YXRpb25zKSB7XG4gICAgICBjb25zdCBlbGVtZW50cyA9IGRpdi5xdWVyeVNlbGVjdG9yQWxsKGBbZGF0YS1hbm5vdGF0aW9uLWlkPVwiJHtkYXRhLmlkfVwiXWApO1xuXG4gICAgICBpZiAoZWxlbWVudHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgICAgICAgaWYgKGRhdGEuaGFzT3duQ2FudmFzKSB7XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gX3V0aWwuVXRpbC5ub3JtYWxpemVSZWN0KFtkYXRhLnJlY3RbMF0sIHBhZ2Uudmlld1szXSAtIGRhdGEucmVjdFsxXSArIHBhZ2Uudmlld1sxXSwgZGF0YS5yZWN0WzJdLCBwYWdlLnZpZXdbM10gLSBkYXRhLnJlY3RbM10gKyBwYWdlLnZpZXdbMV1dKTtcblxuICAgICAgICAgICAgaWYgKCFvd25NYXRyaXgpIHtcbiAgICAgICAgICAgICAgc2NhbGUgPSBNYXRoLmFicyh0cmFuc2Zvcm1bMF0gfHwgdHJhbnNmb3JtWzFdKTtcbiAgICAgICAgICAgICAgY29uc3Qgb3duVHJhbnNmb3JtID0gdHJhbnNmb3JtLnNsaWNlKCk7XG5cbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICAgICAgICAgICAgICBvd25UcmFuc2Zvcm1baV0gPSBNYXRoLnNpZ24ob3duVHJhbnNmb3JtW2ldKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG93bk1hdHJpeCA9IGBtYXRyaXgoJHtvd25UcmFuc2Zvcm0uam9pbihcIixcIil9KWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSByZWN0WzBdICogc2NhbGU7XG4gICAgICAgICAgICBjb25zdCB0b3AgPSByZWN0WzFdICogc2NhbGU7XG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YDtcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7dG9wfXB4YDtcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gYCR7LWxlZnR9cHggJHstdG9wfXB4YDtcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gb3duTWF0cml4O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IG1hdHJpeDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNzZXRBbm5vdGF0aW9uQ2FudmFzTWFwKGRpdiwgYW5ub3RhdGlvbkNhbnZhc01hcCk7XG4gICAgZGl2LmhpZGRlbiA9IGZhbHNlO1xuICB9XG5cbiAgc3RhdGljICNzZXRBbm5vdGF0aW9uQ2FudmFzTWFwKGRpdiwgYW5ub3RhdGlvbkNhbnZhc01hcCkge1xuICAgIGlmICghYW5ub3RhdGlvbkNhbnZhc01hcCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2lkLCBjYW52YXNdIG9mIGFubm90YXRpb25DYW52YXNNYXApIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkaXYucXVlcnlTZWxlY3RvcihgW2RhdGEtYW5ub3RhdGlvbi1pZD1cIiR7aWR9XCJdYCk7XG5cbiAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge1xuICAgICAgICBmaXJzdENoaWxkXG4gICAgICB9ID0gZWxlbWVudDtcblxuICAgICAgaWYgKGZpcnN0Q2hpbGQubm9kZU5hbWUgPT09IFwiQ0FOVkFTXCIpIHtcbiAgICAgICAgZWxlbWVudC5yZXBsYWNlQ2hpbGQoY2FudmFzLCBmaXJzdENoaWxkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNhbnZhcywgZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYW5ub3RhdGlvbkNhbnZhc01hcC5jbGVhcigpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Bbm5vdGF0aW9uTGF5ZXIgPSBBbm5vdGF0aW9uTGF5ZXI7XG5cbi8qKiovIH0pLFxuLyogMTkgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuQ29sb3JDb252ZXJ0ZXJzID0gdm9pZCAwO1xuXG5mdW5jdGlvbiBtYWtlQ29sb3JDb21wKG4pIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgbikpICogMjU1KS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpO1xufVxuXG5jbGFzcyBDb2xvckNvbnZlcnRlcnMge1xuICBzdGF0aWMgQ01ZS19HKFtjLCB5LCBtLCBrXSkge1xuICAgIHJldHVybiBbXCJHXCIsIDEgLSBNYXRoLm1pbigxLCAwLjMgKiBjICsgMC41OSAqIG0gKyAwLjExICogeSArIGspXTtcbiAgfVxuXG4gIHN0YXRpYyBHX0NNWUsoW2ddKSB7XG4gICAgcmV0dXJuIFtcIkNNWUtcIiwgMCwgMCwgMCwgMSAtIGddO1xuICB9XG5cbiAgc3RhdGljIEdfUkdCKFtnXSkge1xuICAgIHJldHVybiBbXCJSR0JcIiwgZywgZywgZ107XG4gIH1cblxuICBzdGF0aWMgR19IVE1MKFtnXSkge1xuICAgIGNvbnN0IEcgPSBtYWtlQ29sb3JDb21wKGcpO1xuICAgIHJldHVybiBgIyR7R30ke0d9JHtHfWA7XG4gIH1cblxuICBzdGF0aWMgUkdCX0coW3IsIGcsIGJdKSB7XG4gICAgcmV0dXJuIFtcIkdcIiwgMC4zICogciArIDAuNTkgKiBnICsgMC4xMSAqIGJdO1xuICB9XG5cbiAgc3RhdGljIFJHQl9IVE1MKFtyLCBnLCBiXSkge1xuICAgIGNvbnN0IFIgPSBtYWtlQ29sb3JDb21wKHIpO1xuICAgIGNvbnN0IEcgPSBtYWtlQ29sb3JDb21wKGcpO1xuICAgIGNvbnN0IEIgPSBtYWtlQ29sb3JDb21wKGIpO1xuICAgIHJldHVybiBgIyR7Un0ke0d9JHtCfWA7XG4gIH1cblxuICBzdGF0aWMgVF9IVE1MKCkge1xuICAgIHJldHVybiBcIiMwMDAwMDAwMFwiO1xuICB9XG5cbiAgc3RhdGljIENNWUtfUkdCKFtjLCB5LCBtLCBrXSkge1xuICAgIHJldHVybiBbXCJSR0JcIiwgMSAtIE1hdGgubWluKDEsIGMgKyBrKSwgMSAtIE1hdGgubWluKDEsIG0gKyBrKSwgMSAtIE1hdGgubWluKDEsIHkgKyBrKV07XG4gIH1cblxuICBzdGF0aWMgQ01ZS19IVE1MKGNvbXBvbmVudHMpIHtcbiAgICByZXR1cm4gdGhpcy5SR0JfSFRNTCh0aGlzLkNNWUtfUkdCKGNvbXBvbmVudHMpKTtcbiAgfVxuXG4gIHN0YXRpYyBSR0JfQ01ZSyhbciwgZywgYl0pIHtcbiAgICBjb25zdCBjID0gMSAtIHI7XG4gICAgY29uc3QgbSA9IDEgLSBnO1xuICAgIGNvbnN0IHkgPSAxIC0gYjtcbiAgICBjb25zdCBrID0gTWF0aC5taW4oYywgbSwgeSk7XG4gICAgcmV0dXJuIFtcIkNNWUtcIiwgYywgbSwgeSwga107XG4gIH1cblxufVxuXG5leHBvcnRzLkNvbG9yQ29udmVydGVycyA9IENvbG9yQ29udmVydGVycztcblxuLyoqKi8gfSksXG4vKiAyMCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5YZmFMYXllciA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF94ZmFfdGV4dCA9IF9fd19wZGZqc19yZXF1aXJlX18oMTcpO1xuXG5jbGFzcyBYZmFMYXllciB7XG4gIHN0YXRpYyBzZXR1cFN0b3JhZ2UoaHRtbCwgaWQsIGVsZW1lbnQsIHN0b3JhZ2UsIGludGVudCkge1xuICAgIGNvbnN0IHN0b3JlZERhdGEgPSBzdG9yYWdlLmdldFZhbHVlKGlkLCB7XG4gICAgICB2YWx1ZTogbnVsbFxuICAgIH0pO1xuXG4gICAgc3dpdGNoIChlbGVtZW50Lm5hbWUpIHtcbiAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxuICAgICAgICBpZiAoc3RvcmVkRGF0YS52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGh0bWwudGV4dENvbnRlbnQgPSBzdG9yZWREYXRhLnZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGludGVudCA9PT0gXCJwcmludFwiKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBodG1sLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBldmVudCA9PiB7XG4gICAgICAgICAgc3RvcmFnZS5zZXRWYWx1ZShpZCwge1xuICAgICAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJpbnB1dFwiOlxuICAgICAgICBpZiAoZWxlbWVudC5hdHRyaWJ1dGVzLnR5cGUgPT09IFwicmFkaW9cIiB8fCBlbGVtZW50LmF0dHJpYnV0ZXMudHlwZSA9PT0gXCJjaGVja2JveFwiKSB7XG4gICAgICAgICAgaWYgKHN0b3JlZERhdGEudmFsdWUgPT09IGVsZW1lbnQuYXR0cmlidXRlcy54ZmFPbikge1xuICAgICAgICAgICAgaHRtbC5zZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RvcmVkRGF0YS52YWx1ZSA9PT0gZWxlbWVudC5hdHRyaWJ1dGVzLnhmYU9mZikge1xuICAgICAgICAgICAgaHRtbC5yZW1vdmVBdHRyaWJ1dGUoXCJjaGVja2VkXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpbnRlbnQgPT09IFwicHJpbnRcIikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaHRtbC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHtcbiAgICAgICAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC5jaGVja2VkID8gZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZShcInhmYU9uXCIpIDogZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZShcInhmYU9mZlwiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHN0b3JlZERhdGEudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGh0bWwuc2V0QXR0cmlidXRlKFwidmFsdWVcIiwgc3RvcmVkRGF0YS52YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGludGVudCA9PT0gXCJwcmludFwiKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBodG1sLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBldmVudCA9PiB7XG4gICAgICAgICAgICBzdG9yYWdlLnNldFZhbHVlKGlkLCB7XG4gICAgICAgICAgICAgIHZhbHVlOiBldmVudC50YXJnZXQudmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgaWYgKHN0b3JlZERhdGEudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBlbGVtZW50LmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9uLmF0dHJpYnV0ZXMudmFsdWUgPT09IHN0b3JlZERhdGEudmFsdWUpIHtcbiAgICAgICAgICAgICAgb3B0aW9uLmF0dHJpYnV0ZXMuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGh0bWwuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCBvcHRpb25zID0gZXZlbnQudGFyZ2V0Lm9wdGlvbnM7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnNlbGVjdGVkSW5kZXggPT09IC0xID8gXCJcIiA6IG9wdGlvbnNbb3B0aW9ucy5zZWxlY3RlZEluZGV4XS52YWx1ZTtcbiAgICAgICAgICBzdG9yYWdlLnNldFZhbHVlKGlkLCB7XG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHNldEF0dHJpYnV0ZXMoe1xuICAgIGh0bWwsXG4gICAgZWxlbWVudCxcbiAgICBzdG9yYWdlID0gbnVsbCxcbiAgICBpbnRlbnQsXG4gICAgbGlua1NlcnZpY2VcbiAgfSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGF0dHJpYnV0ZXNcbiAgICB9ID0gZWxlbWVudDtcbiAgICBjb25zdCBpc0hUTUxBbmNob3JFbGVtZW50ID0gaHRtbCBpbnN0YW5jZW9mIEhUTUxBbmNob3JFbGVtZW50O1xuXG4gICAgaWYgKGF0dHJpYnV0ZXMudHlwZSA9PT0gXCJyYWRpb1wiKSB7XG4gICAgICBhdHRyaWJ1dGVzLm5hbWUgPSBgJHthdHRyaWJ1dGVzLm5hbWV9LSR7aW50ZW50fWA7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcykpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gXCJkYXRhSWRcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGtleSAhPT0gXCJzdHlsZVwiKSB7XG4gICAgICAgIGlmIChrZXkgPT09IFwidGV4dENvbnRlbnRcIikge1xuICAgICAgICAgIGh0bWwudGV4dENvbnRlbnQgPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IFwiY2xhc3NcIikge1xuICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGh0bWwuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUuam9pbihcIiBcIikpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaXNIVE1MQW5jaG9yRWxlbWVudCAmJiAoa2V5ID09PSBcImhyZWZcIiB8fCBrZXkgPT09IFwibmV3V2luZG93XCIpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBodG1sLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihodG1sLnN0eWxlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzSFRNTEFuY2hvckVsZW1lbnQpIHtcbiAgICAgIGlmICghbGlua1NlcnZpY2UuYWRkTGlua0F0dHJpYnV0ZXMpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiWGZhTGF5ZXIuc2V0QXR0cmlidXRlIC0gbWlzc2luZyBgYWRkTGlua0F0dHJpYnV0ZXNgLW1ldGhvZCBvbiB0aGUgYGxpbmtTZXJ2aWNlYC1pbnN0YW5jZS5cIik7XG4gICAgICB9XG5cbiAgICAgIGxpbmtTZXJ2aWNlLmFkZExpbmtBdHRyaWJ1dGVzPy4oaHRtbCwgYXR0cmlidXRlcy5ocmVmLCBhdHRyaWJ1dGVzLm5ld1dpbmRvdyk7XG4gICAgfVxuXG4gICAgaWYgKHN0b3JhZ2UgJiYgYXR0cmlidXRlcy5kYXRhSWQpIHtcbiAgICAgIHRoaXMuc2V0dXBTdG9yYWdlKGh0bWwsIGF0dHJpYnV0ZXMuZGF0YUlkLCBlbGVtZW50LCBzdG9yYWdlKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgcmVuZGVyKHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBzdG9yYWdlID0gcGFyYW1ldGVycy5hbm5vdGF0aW9uU3RvcmFnZTtcbiAgICBjb25zdCBsaW5rU2VydmljZSA9IHBhcmFtZXRlcnMubGlua1NlcnZpY2U7XG4gICAgY29uc3Qgcm9vdCA9IHBhcmFtZXRlcnMueGZhSHRtbDtcbiAgICBjb25zdCBpbnRlbnQgPSBwYXJhbWV0ZXJzLmludGVudCB8fCBcImRpc3BsYXlcIjtcbiAgICBjb25zdCByb290SHRtbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocm9vdC5uYW1lKTtcblxuICAgIGlmIChyb290LmF0dHJpYnV0ZXMpIHtcbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlcyh7XG4gICAgICAgIGh0bWw6IHJvb3RIdG1sLFxuICAgICAgICBlbGVtZW50OiByb290LFxuICAgICAgICBpbnRlbnQsXG4gICAgICAgIGxpbmtTZXJ2aWNlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFjayA9IFtbcm9vdCwgLTEsIHJvb3RIdG1sXV07XG4gICAgY29uc3Qgcm9vdERpdiA9IHBhcmFtZXRlcnMuZGl2O1xuICAgIHJvb3REaXYuYXBwZW5kQ2hpbGQocm9vdEh0bWwpO1xuXG4gICAgaWYgKHBhcmFtZXRlcnMudmlld3BvcnQpIHtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IGBtYXRyaXgoJHtwYXJhbWV0ZXJzLnZpZXdwb3J0LnRyYW5zZm9ybS5qb2luKFwiLFwiKX0pYDtcbiAgICAgIHJvb3REaXYuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgIH1cblxuICAgIGlmIChpbnRlbnQgIT09IFwicmljaFRleHRcIikge1xuICAgICAgcm9vdERpdi5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInhmYUxheWVyIHhmYUZvbnRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgdGV4dERpdnMgPSBbXTtcblxuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBbcGFyZW50LCBpLCBodG1sXSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgICBpZiAoaSArIDEgPT09IHBhcmVudC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgc3RhY2sucG9wKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjaGlsZCA9IHBhcmVudC5jaGlsZHJlblsrK3N0YWNrW3N0YWNrLmxlbmd0aCAtIDFdWzFdXTtcblxuICAgICAgaWYgKGNoaWxkID09PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7XG4gICAgICAgIG5hbWVcbiAgICAgIH0gPSBjaGlsZDtcblxuICAgICAgaWYgKG5hbWUgPT09IFwiI3RleHRcIikge1xuICAgICAgICBjb25zdCBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2hpbGQudmFsdWUpO1xuICAgICAgICB0ZXh0RGl2cy5wdXNoKG5vZGUpO1xuICAgICAgICBodG1sLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IGNoaWxkSHRtbDtcblxuICAgICAgaWYgKGNoaWxkPy5hdHRyaWJ1dGVzPy54bWxucykge1xuICAgICAgICBjaGlsZEh0bWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoY2hpbGQuYXR0cmlidXRlcy54bWxucywgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZEh0bWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpO1xuICAgICAgfVxuXG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNoaWxkSHRtbCk7XG5cbiAgICAgIGlmIChjaGlsZC5hdHRyaWJ1dGVzKSB7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgaHRtbDogY2hpbGRIdG1sLFxuICAgICAgICAgIGVsZW1lbnQ6IGNoaWxkLFxuICAgICAgICAgIHN0b3JhZ2UsXG4gICAgICAgICAgaW50ZW50LFxuICAgICAgICAgIGxpbmtTZXJ2aWNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hpbGQuY2hpbGRyZW4gJiYgY2hpbGQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICBzdGFjay5wdXNoKFtjaGlsZCwgLTEsIGNoaWxkSHRtbF0pO1xuICAgICAgfSBlbHNlIGlmIChjaGlsZC52YWx1ZSkge1xuICAgICAgICBjb25zdCBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2hpbGQudmFsdWUpO1xuXG4gICAgICAgIGlmIChfeGZhX3RleHQuWGZhVGV4dC5zaG91bGRCdWlsZFRleHQobmFtZSkpIHtcbiAgICAgICAgICB0ZXh0RGl2cy5wdXNoKG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGRIdG1sLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZWwgb2Ygcm9vdERpdi5xdWVyeVNlbGVjdG9yQWxsKFwiLnhmYU5vbkludGVyYWN0aXZlIGlucHV0LCAueGZhTm9uSW50ZXJhY3RpdmUgdGV4dGFyZWFcIikpIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZShcInJlYWRPbmx5XCIsIHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0ZXh0RGl2c1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgdXBkYXRlKHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBgbWF0cml4KCR7cGFyYW1ldGVycy52aWV3cG9ydC50cmFuc2Zvcm0uam9pbihcIixcIil9KWA7XG4gICAgcGFyYW1ldGVycy5kaXYuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgIHBhcmFtZXRlcnMuZGl2LmhpZGRlbiA9IGZhbHNlO1xuICB9XG5cbn1cblxuZXhwb3J0cy5YZmFMYXllciA9IFhmYUxheWVyO1xuXG4vKioqLyB9KSxcbi8qIDIxICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLnJlbmRlclRleHRMYXllciA9IHJlbmRlclRleHRMYXllcjtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuY29uc3QgTUFYX1RFWFRfRElWU19UT19SRU5ERVIgPSAxMDAwMDA7XG5jb25zdCBERUZBVUxUX0ZPTlRfU0laRSA9IDMwO1xuY29uc3QgREVGQVVMVF9GT05UX0FTQ0VOVCA9IDAuODtcbmNvbnN0IGFzY2VudENhY2hlID0gbmV3IE1hcCgpO1xuY29uc3QgQWxsV2hpdGVzcGFjZVJlZ2V4cCA9IC9eXFxzKyQvZztcblxuZnVuY3Rpb24gZ2V0QXNjZW50KGZvbnRGYW1pbHksIGN0eCkge1xuICBjb25zdCBjYWNoZWRBc2NlbnQgPSBhc2NlbnRDYWNoZS5nZXQoZm9udEZhbWlseSk7XG5cbiAgaWYgKGNhY2hlZEFzY2VudCkge1xuICAgIHJldHVybiBjYWNoZWRBc2NlbnQ7XG4gIH1cblxuICBjdHguc2F2ZSgpO1xuICBjdHguZm9udCA9IGAke0RFRkFVTFRfRk9OVF9TSVpFfXB4ICR7Zm9udEZhbWlseX1gO1xuICBjb25zdCBtZXRyaWNzID0gY3R4Lm1lYXN1cmVUZXh0KFwiXCIpO1xuICBsZXQgYXNjZW50ID0gbWV0cmljcy5mb250Qm91bmRpbmdCb3hBc2NlbnQ7XG4gIGxldCBkZXNjZW50ID0gTWF0aC5hYnMobWV0cmljcy5mb250Qm91bmRpbmdCb3hEZXNjZW50KTtcblxuICBpZiAoYXNjZW50KSB7XG4gICAgY3R4LnJlc3RvcmUoKTtcbiAgICBjb25zdCByYXRpbyA9IGFzY2VudCAvIChhc2NlbnQgKyBkZXNjZW50KTtcbiAgICBhc2NlbnRDYWNoZS5zZXQoZm9udEZhbWlseSwgcmF0aW8pO1xuICAgIHJldHVybiByYXRpbztcbiAgfVxuXG4gIGN0eC5zdHJva2VTdHlsZSA9IFwicmVkXCI7XG4gIGN0eC5jbGVhclJlY3QoMCwgMCwgREVGQVVMVF9GT05UX1NJWkUsIERFRkFVTFRfRk9OVF9TSVpFKTtcbiAgY3R4LnN0cm9rZVRleHQoXCJnXCIsIDAsIDApO1xuICBsZXQgcGl4ZWxzID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCBERUZBVUxUX0ZPTlRfU0laRSwgREVGQVVMVF9GT05UX1NJWkUpLmRhdGE7XG4gIGRlc2NlbnQgPSAwO1xuXG4gIGZvciAobGV0IGkgPSBwaXhlbHMubGVuZ3RoIC0gMSAtIDM7IGkgPj0gMDsgaSAtPSA0KSB7XG4gICAgaWYgKHBpeGVsc1tpXSA+IDApIHtcbiAgICAgIGRlc2NlbnQgPSBNYXRoLmNlaWwoaSAvIDQgLyBERUZBVUxUX0ZPTlRfU0laRSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBjdHguY2xlYXJSZWN0KDAsIDAsIERFRkFVTFRfRk9OVF9TSVpFLCBERUZBVUxUX0ZPTlRfU0laRSk7XG4gIGN0eC5zdHJva2VUZXh0KFwiQVwiLCAwLCBERUZBVUxUX0ZPTlRfU0laRSk7XG4gIHBpeGVscyA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgREVGQVVMVF9GT05UX1NJWkUsIERFRkFVTFRfRk9OVF9TSVpFKS5kYXRhO1xuICBhc2NlbnQgPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwLCBpaSA9IHBpeGVscy5sZW5ndGg7IGkgPCBpaTsgaSArPSA0KSB7XG4gICAgaWYgKHBpeGVsc1tpXSA+IDApIHtcbiAgICAgIGFzY2VudCA9IERFRkFVTFRfRk9OVF9TSVpFIC0gTWF0aC5mbG9vcihpIC8gNCAvIERFRkFVTFRfRk9OVF9TSVpFKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGN0eC5yZXN0b3JlKCk7XG5cbiAgaWYgKGFzY2VudCkge1xuICAgIGNvbnN0IHJhdGlvID0gYXNjZW50IC8gKGFzY2VudCArIGRlc2NlbnQpO1xuICAgIGFzY2VudENhY2hlLnNldChmb250RmFtaWx5LCByYXRpbyk7XG4gICAgcmV0dXJuIHJhdGlvO1xuICB9XG5cbiAgYXNjZW50Q2FjaGUuc2V0KGZvbnRGYW1pbHksIERFRkFVTFRfRk9OVF9BU0NFTlQpO1xuICByZXR1cm4gREVGQVVMVF9GT05UX0FTQ0VOVDtcbn1cblxuZnVuY3Rpb24gYXBwZW5kVGV4dCh0YXNrLCBnZW9tLCBzdHlsZXMsIGN0eCkge1xuICBjb25zdCB0ZXh0RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gIGNvbnN0IHRleHREaXZQcm9wZXJ0aWVzID0gdGFzay5fZW5oYW5jZVRleHRTZWxlY3Rpb24gPyB7XG4gICAgYW5nbGU6IDAsXG4gICAgY2FudmFzV2lkdGg6IDAsXG4gICAgaGFzVGV4dDogZ2VvbS5zdHIgIT09IFwiXCIsXG4gICAgaGFzRU9MOiBnZW9tLmhhc0VPTCxcbiAgICBvcmlnaW5hbFRyYW5zZm9ybTogbnVsbCxcbiAgICBwYWRkaW5nQm90dG9tOiAwLFxuICAgIHBhZGRpbmdMZWZ0OiAwLFxuICAgIHBhZGRpbmdSaWdodDogMCxcbiAgICBwYWRkaW5nVG9wOiAwLFxuICAgIHNjYWxlOiAxXG4gIH0gOiB7XG4gICAgYW5nbGU6IDAsXG4gICAgY2FudmFzV2lkdGg6IDAsXG4gICAgaGFzVGV4dDogZ2VvbS5zdHIgIT09IFwiXCIsXG4gICAgaGFzRU9MOiBnZW9tLmhhc0VPTFxuICB9O1xuXG4gIHRhc2suX3RleHREaXZzLnB1c2godGV4dERpdik7XG5cbiAgY29uc3QgdHggPSBfdXRpbC5VdGlsLnRyYW5zZm9ybSh0YXNrLl92aWV3cG9ydC50cmFuc2Zvcm0sIGdlb20udHJhbnNmb3JtKTtcblxuICBsZXQgYW5nbGUgPSBNYXRoLmF0YW4yKHR4WzFdLCB0eFswXSk7XG4gIGNvbnN0IHN0eWxlID0gc3R5bGVzW2dlb20uZm9udE5hbWVdO1xuXG4gIGlmIChzdHlsZS52ZXJ0aWNhbCkge1xuICAgIGFuZ2xlICs9IE1hdGguUEkgLyAyO1xuICB9XG5cbiAgY29uc3QgZm9udEhlaWdodCA9IE1hdGguaHlwb3QodHhbMl0sIHR4WzNdKTtcbiAgY29uc3QgZm9udEFzY2VudCA9IGZvbnRIZWlnaHQgKiBnZXRBc2NlbnQoc3R5bGUuZm9udEZhbWlseSwgY3R4KTtcbiAgbGV0IGxlZnQsIHRvcDtcblxuICBpZiAoYW5nbGUgPT09IDApIHtcbiAgICBsZWZ0ID0gdHhbNF07XG4gICAgdG9wID0gdHhbNV0gLSBmb250QXNjZW50O1xuICB9IGVsc2Uge1xuICAgIGxlZnQgPSB0eFs0XSArIGZvbnRBc2NlbnQgKiBNYXRoLnNpbihhbmdsZSk7XG4gICAgdG9wID0gdHhbNV0gLSBmb250QXNjZW50ICogTWF0aC5jb3MoYW5nbGUpO1xuICB9XG5cbiAgdGV4dERpdi5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGA7XG4gIHRleHREaXYuc3R5bGUudG9wID0gYCR7dG9wfXB4YDtcbiAgdGV4dERpdi5zdHlsZS5mb250U2l6ZSA9IGAke2ZvbnRIZWlnaHR9cHhgO1xuICB0ZXh0RGl2LnN0eWxlLmZvbnRGYW1pbHkgPSBzdHlsZS5mb250RmFtaWx5O1xuICB0ZXh0RGl2LnNldEF0dHJpYnV0ZShcInJvbGVcIiwgXCJwcmVzZW50YXRpb25cIik7XG4gIHRleHREaXYudGV4dENvbnRlbnQgPSBnZW9tLnN0cjtcbiAgdGV4dERpdi5kaXIgPSBnZW9tLmRpcjtcblxuICBpZiAodGFzay5fZm9udEluc3BlY3RvckVuYWJsZWQpIHtcbiAgICB0ZXh0RGl2LmRhdGFzZXQuZm9udE5hbWUgPSBnZW9tLmZvbnROYW1lO1xuICB9XG5cbiAgaWYgKGFuZ2xlICE9PSAwKSB7XG4gICAgdGV4dERpdlByb3BlcnRpZXMuYW5nbGUgPSBhbmdsZSAqICgxODAgLyBNYXRoLlBJKTtcbiAgfVxuXG4gIGxldCBzaG91bGRTY2FsZVRleHQgPSBmYWxzZTtcblxuICBpZiAoZ2VvbS5zdHIubGVuZ3RoID4gMSB8fCB0YXNrLl9lbmhhbmNlVGV4dFNlbGVjdGlvbiAmJiBBbGxXaGl0ZXNwYWNlUmVnZXhwLnRlc3QoZ2VvbS5zdHIpKSB7XG4gICAgc2hvdWxkU2NhbGVUZXh0ID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChnZW9tLnN0ciAhPT0gXCIgXCIgJiYgZ2VvbS50cmFuc2Zvcm1bMF0gIT09IGdlb20udHJhbnNmb3JtWzNdKSB7XG4gICAgY29uc3QgYWJzU2NhbGVYID0gTWF0aC5hYnMoZ2VvbS50cmFuc2Zvcm1bMF0pLFxuICAgICAgICAgIGFic1NjYWxlWSA9IE1hdGguYWJzKGdlb20udHJhbnNmb3JtWzNdKTtcblxuICAgIGlmIChhYnNTY2FsZVggIT09IGFic1NjYWxlWSAmJiBNYXRoLm1heChhYnNTY2FsZVgsIGFic1NjYWxlWSkgLyBNYXRoLm1pbihhYnNTY2FsZVgsIGFic1NjYWxlWSkgPiAxLjUpIHtcbiAgICAgIHNob3VsZFNjYWxlVGV4dCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKHNob3VsZFNjYWxlVGV4dCkge1xuICAgIGlmIChzdHlsZS52ZXJ0aWNhbCkge1xuICAgICAgdGV4dERpdlByb3BlcnRpZXMuY2FudmFzV2lkdGggPSBnZW9tLmhlaWdodCAqIHRhc2suX3ZpZXdwb3J0LnNjYWxlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZXh0RGl2UHJvcGVydGllcy5jYW52YXNXaWR0aCA9IGdlb20ud2lkdGggKiB0YXNrLl92aWV3cG9ydC5zY2FsZTtcbiAgICB9XG4gIH1cblxuICB0YXNrLl90ZXh0RGl2UHJvcGVydGllcy5zZXQodGV4dERpdiwgdGV4dERpdlByb3BlcnRpZXMpO1xuXG4gIGlmICh0YXNrLl90ZXh0Q29udGVudFN0cmVhbSkge1xuICAgIHRhc2suX2xheW91dFRleHQodGV4dERpdik7XG4gIH1cblxuICBpZiAodGFzay5fZW5oYW5jZVRleHRTZWxlY3Rpb24gJiYgdGV4dERpdlByb3BlcnRpZXMuaGFzVGV4dCkge1xuICAgIGxldCBhbmdsZUNvcyA9IDEsXG4gICAgICAgIGFuZ2xlU2luID0gMDtcblxuICAgIGlmIChhbmdsZSAhPT0gMCkge1xuICAgICAgYW5nbGVDb3MgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICBhbmdsZVNpbiA9IE1hdGguc2luKGFuZ2xlKTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXZXaWR0aCA9IChzdHlsZS52ZXJ0aWNhbCA/IGdlb20uaGVpZ2h0IDogZ2VvbS53aWR0aCkgKiB0YXNrLl92aWV3cG9ydC5zY2FsZTtcbiAgICBjb25zdCBkaXZIZWlnaHQgPSBmb250SGVpZ2h0O1xuICAgIGxldCBtLCBiO1xuXG4gICAgaWYgKGFuZ2xlICE9PSAwKSB7XG4gICAgICBtID0gW2FuZ2xlQ29zLCBhbmdsZVNpbiwgLWFuZ2xlU2luLCBhbmdsZUNvcywgbGVmdCwgdG9wXTtcbiAgICAgIGIgPSBfdXRpbC5VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KFswLCAwLCBkaXZXaWR0aCwgZGl2SGVpZ2h0XSwgbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGIgPSBbbGVmdCwgdG9wLCBsZWZ0ICsgZGl2V2lkdGgsIHRvcCArIGRpdkhlaWdodF07XG4gICAgfVxuXG4gICAgdGFzay5fYm91bmRzLnB1c2goe1xuICAgICAgbGVmdDogYlswXSxcbiAgICAgIHRvcDogYlsxXSxcbiAgICAgIHJpZ2h0OiBiWzJdLFxuICAgICAgYm90dG9tOiBiWzNdLFxuICAgICAgZGl2OiB0ZXh0RGl2LFxuICAgICAgc2l6ZTogW2RpdldpZHRoLCBkaXZIZWlnaHRdLFxuICAgICAgbVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlcih0YXNrKSB7XG4gIGlmICh0YXNrLl9jYW5jZWxlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHRleHREaXZzID0gdGFzay5fdGV4dERpdnM7XG4gIGNvbnN0IGNhcGFiaWxpdHkgPSB0YXNrLl9jYXBhYmlsaXR5O1xuICBjb25zdCB0ZXh0RGl2c0xlbmd0aCA9IHRleHREaXZzLmxlbmd0aDtcblxuICBpZiAodGV4dERpdnNMZW5ndGggPiBNQVhfVEVYVF9ESVZTX1RPX1JFTkRFUikge1xuICAgIHRhc2suX3JlbmRlcmluZ0RvbmUgPSB0cnVlO1xuICAgIGNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghdGFzay5fdGV4dENvbnRlbnRTdHJlYW0pIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHREaXZzTGVuZ3RoOyBpKyspIHtcbiAgICAgIHRhc2suX2xheW91dFRleHQodGV4dERpdnNbaV0pO1xuICAgIH1cbiAgfVxuXG4gIHRhc2suX3JlbmRlcmluZ0RvbmUgPSB0cnVlO1xuICBjYXBhYmlsaXR5LnJlc29sdmUoKTtcbn1cblxuZnVuY3Rpb24gZmluZFBvc2l0aXZlTWluKHRzLCBvZmZzZXQsIGNvdW50KSB7XG4gIGxldCByZXN1bHQgPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgIGNvbnN0IHQgPSB0c1tvZmZzZXQrK107XG5cbiAgICBpZiAodCA+IDApIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCA/IE1hdGgubWluKHQsIHJlc3VsdCkgOiB0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZCh0YXNrKSB7XG4gIGNvbnN0IGJvdW5kcyA9IHRhc2suX2JvdW5kcztcbiAgY29uc3Qgdmlld3BvcnQgPSB0YXNrLl92aWV3cG9ydDtcbiAgY29uc3QgZXhwYW5kZWQgPSBleHBhbmRCb3VuZHModmlld3BvcnQud2lkdGgsIHZpZXdwb3J0LmhlaWdodCwgYm91bmRzKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cGFuZGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZGl2ID0gYm91bmRzW2ldLmRpdjtcblxuICAgIGNvbnN0IGRpdlByb3BlcnRpZXMgPSB0YXNrLl90ZXh0RGl2UHJvcGVydGllcy5nZXQoZGl2KTtcblxuICAgIGlmIChkaXZQcm9wZXJ0aWVzLmFuZ2xlID09PSAwKSB7XG4gICAgICBkaXZQcm9wZXJ0aWVzLnBhZGRpbmdMZWZ0ID0gYm91bmRzW2ldLmxlZnQgLSBleHBhbmRlZFtpXS5sZWZ0O1xuICAgICAgZGl2UHJvcGVydGllcy5wYWRkaW5nVG9wID0gYm91bmRzW2ldLnRvcCAtIGV4cGFuZGVkW2ldLnRvcDtcbiAgICAgIGRpdlByb3BlcnRpZXMucGFkZGluZ1JpZ2h0ID0gZXhwYW5kZWRbaV0ucmlnaHQgLSBib3VuZHNbaV0ucmlnaHQ7XG4gICAgICBkaXZQcm9wZXJ0aWVzLnBhZGRpbmdCb3R0b20gPSBleHBhbmRlZFtpXS5ib3R0b20gLSBib3VuZHNbaV0uYm90dG9tO1xuXG4gICAgICB0YXNrLl90ZXh0RGl2UHJvcGVydGllcy5zZXQoZGl2LCBkaXZQcm9wZXJ0aWVzKTtcblxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgZSA9IGV4cGFuZGVkW2ldLFxuICAgICAgICAgIGIgPSBib3VuZHNbaV07XG4gICAgY29uc3QgbSA9IGIubSxcbiAgICAgICAgICBjID0gbVswXSxcbiAgICAgICAgICBzID0gbVsxXTtcbiAgICBjb25zdCBwb2ludHMgPSBbWzAsIDBdLCBbMCwgYi5zaXplWzFdXSwgW2Iuc2l6ZVswXSwgMF0sIGIuc2l6ZV07XG4gICAgY29uc3QgdHMgPSBuZXcgRmxvYXQ2NEFycmF5KDY0KTtcblxuICAgIGZvciAobGV0IGogPSAwLCBqaiA9IHBvaW50cy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICBjb25zdCB0ID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShwb2ludHNbal0sIG0pO1xuXG4gICAgICB0c1tqICsgMF0gPSBjICYmIChlLmxlZnQgLSB0WzBdKSAvIGM7XG4gICAgICB0c1tqICsgNF0gPSBzICYmIChlLnRvcCAtIHRbMV0pIC8gcztcbiAgICAgIHRzW2ogKyA4XSA9IGMgJiYgKGUucmlnaHQgLSB0WzBdKSAvIGM7XG4gICAgICB0c1tqICsgMTJdID0gcyAmJiAoZS5ib3R0b20gLSB0WzFdKSAvIHM7XG4gICAgICB0c1tqICsgMTZdID0gcyAmJiAoZS5sZWZ0IC0gdFswXSkgLyAtcztcbiAgICAgIHRzW2ogKyAyMF0gPSBjICYmIChlLnRvcCAtIHRbMV0pIC8gYztcbiAgICAgIHRzW2ogKyAyNF0gPSBzICYmIChlLnJpZ2h0IC0gdFswXSkgLyAtcztcbiAgICAgIHRzW2ogKyAyOF0gPSBjICYmIChlLmJvdHRvbSAtIHRbMV0pIC8gYztcbiAgICAgIHRzW2ogKyAzMl0gPSBjICYmIChlLmxlZnQgLSB0WzBdKSAvIC1jO1xuICAgICAgdHNbaiArIDM2XSA9IHMgJiYgKGUudG9wIC0gdFsxXSkgLyAtcztcbiAgICAgIHRzW2ogKyA0MF0gPSBjICYmIChlLnJpZ2h0IC0gdFswXSkgLyAtYztcbiAgICAgIHRzW2ogKyA0NF0gPSBzICYmIChlLmJvdHRvbSAtIHRbMV0pIC8gLXM7XG4gICAgICB0c1tqICsgNDhdID0gcyAmJiAoZS5sZWZ0IC0gdFswXSkgLyBzO1xuICAgICAgdHNbaiArIDUyXSA9IGMgJiYgKGUudG9wIC0gdFsxXSkgLyAtYztcbiAgICAgIHRzW2ogKyA1Nl0gPSBzICYmIChlLnJpZ2h0IC0gdFswXSkgLyBzO1xuICAgICAgdHNbaiArIDYwXSA9IGMgJiYgKGUuYm90dG9tIC0gdFsxXSkgLyAtYztcbiAgICB9XG5cbiAgICBjb25zdCBib3hTY2FsZSA9IDEgKyBNYXRoLm1pbihNYXRoLmFicyhjKSwgTWF0aC5hYnMocykpO1xuICAgIGRpdlByb3BlcnRpZXMucGFkZGluZ0xlZnQgPSBmaW5kUG9zaXRpdmVNaW4odHMsIDMyLCAxNikgLyBib3hTY2FsZTtcbiAgICBkaXZQcm9wZXJ0aWVzLnBhZGRpbmdUb3AgPSBmaW5kUG9zaXRpdmVNaW4odHMsIDQ4LCAxNikgLyBib3hTY2FsZTtcbiAgICBkaXZQcm9wZXJ0aWVzLnBhZGRpbmdSaWdodCA9IGZpbmRQb3NpdGl2ZU1pbih0cywgMCwgMTYpIC8gYm94U2NhbGU7XG4gICAgZGl2UHJvcGVydGllcy5wYWRkaW5nQm90dG9tID0gZmluZFBvc2l0aXZlTWluKHRzLCAxNiwgMTYpIC8gYm94U2NhbGU7XG5cbiAgICB0YXNrLl90ZXh0RGl2UHJvcGVydGllcy5zZXQoZGl2LCBkaXZQcm9wZXJ0aWVzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBleHBhbmRCb3VuZHMod2lkdGgsIGhlaWdodCwgYm94ZXMpIHtcbiAgY29uc3QgYm91bmRzID0gYm94ZXMubWFwKGZ1bmN0aW9uIChib3gsIGkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDE6IGJveC5sZWZ0LFxuICAgICAgeTE6IGJveC50b3AsXG4gICAgICB4MjogYm94LnJpZ2h0LFxuICAgICAgeTI6IGJveC5ib3R0b20sXG4gICAgICBpbmRleDogaSxcbiAgICAgIHgxTmV3OiB1bmRlZmluZWQsXG4gICAgICB4Mk5ldzogdW5kZWZpbmVkXG4gICAgfTtcbiAgfSk7XG4gIGV4cGFuZEJvdW5kc0xUUih3aWR0aCwgYm91bmRzKTtcbiAgY29uc3QgZXhwYW5kZWQgPSBuZXcgQXJyYXkoYm94ZXMubGVuZ3RoKTtcblxuICBmb3IgKGNvbnN0IGIgb2YgYm91bmRzKSB7XG4gICAgY29uc3QgaSA9IGIuaW5kZXg7XG4gICAgZXhwYW5kZWRbaV0gPSB7XG4gICAgICBsZWZ0OiBiLngxTmV3LFxuICAgICAgdG9wOiAwLFxuICAgICAgcmlnaHQ6IGIueDJOZXcsXG4gICAgICBib3R0b206IDBcbiAgICB9O1xuICB9XG5cbiAgYm94ZXMubWFwKGZ1bmN0aW9uIChib3gsIGkpIHtcbiAgICBjb25zdCBlID0gZXhwYW5kZWRbaV0sXG4gICAgICAgICAgYiA9IGJvdW5kc1tpXTtcbiAgICBiLngxID0gYm94LnRvcDtcbiAgICBiLnkxID0gd2lkdGggLSBlLnJpZ2h0O1xuICAgIGIueDIgPSBib3guYm90dG9tO1xuICAgIGIueTIgPSB3aWR0aCAtIGUubGVmdDtcbiAgICBiLmluZGV4ID0gaTtcbiAgICBiLngxTmV3ID0gdW5kZWZpbmVkO1xuICAgIGIueDJOZXcgPSB1bmRlZmluZWQ7XG4gIH0pO1xuICBleHBhbmRCb3VuZHNMVFIoaGVpZ2h0LCBib3VuZHMpO1xuXG4gIGZvciAoY29uc3QgYiBvZiBib3VuZHMpIHtcbiAgICBjb25zdCBpID0gYi5pbmRleDtcbiAgICBleHBhbmRlZFtpXS50b3AgPSBiLngxTmV3O1xuICAgIGV4cGFuZGVkW2ldLmJvdHRvbSA9IGIueDJOZXc7XG4gIH1cblxuICByZXR1cm4gZXhwYW5kZWQ7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZEJvdW5kc0xUUih3aWR0aCwgYm91bmRzKSB7XG4gIGJvdW5kcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGEueDEgLSBiLngxIHx8IGEuaW5kZXggLSBiLmluZGV4O1xuICB9KTtcbiAgY29uc3QgZmFrZUJvdW5kYXJ5ID0ge1xuICAgIHgxOiAtSW5maW5pdHksXG4gICAgeTE6IC1JbmZpbml0eSxcbiAgICB4MjogMCxcbiAgICB5MjogSW5maW5pdHksXG4gICAgaW5kZXg6IC0xLFxuICAgIHgxTmV3OiAwLFxuICAgIHgyTmV3OiAwXG4gIH07XG4gIGNvbnN0IGhvcml6b24gPSBbe1xuICAgIHN0YXJ0OiAtSW5maW5pdHksXG4gICAgZW5kOiBJbmZpbml0eSxcbiAgICBib3VuZGFyeTogZmFrZUJvdW5kYXJ5XG4gIH1dO1xuXG4gIGZvciAoY29uc3QgYm91bmRhcnkgb2YgYm91bmRzKSB7XG4gICAgbGV0IGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBob3Jpem9uLmxlbmd0aCAmJiBob3Jpem9uW2ldLmVuZCA8PSBib3VuZGFyeS55MSkge1xuICAgICAgaSsrO1xuICAgIH1cblxuICAgIGxldCBqID0gaG9yaXpvbi5sZW5ndGggLSAxO1xuXG4gICAgd2hpbGUgKGogPj0gMCAmJiBob3Jpem9uW2pdLnN0YXJ0ID49IGJvdW5kYXJ5LnkyKSB7XG4gICAgICBqLS07XG4gICAgfVxuXG4gICAgbGV0IGhvcml6b25QYXJ0LCBhZmZlY3RlZEJvdW5kYXJ5O1xuICAgIGxldCBxLFxuICAgICAgICBrLFxuICAgICAgICBtYXhYTmV3ID0gLUluZmluaXR5O1xuXG4gICAgZm9yIChxID0gaTsgcSA8PSBqOyBxKyspIHtcbiAgICAgIGhvcml6b25QYXJ0ID0gaG9yaXpvbltxXTtcbiAgICAgIGFmZmVjdGVkQm91bmRhcnkgPSBob3Jpem9uUGFydC5ib3VuZGFyeTtcbiAgICAgIGxldCB4TmV3O1xuXG4gICAgICBpZiAoYWZmZWN0ZWRCb3VuZGFyeS54MiA+IGJvdW5kYXJ5LngxKSB7XG4gICAgICAgIHhOZXcgPSBhZmZlY3RlZEJvdW5kYXJ5LmluZGV4ID4gYm91bmRhcnkuaW5kZXggPyBhZmZlY3RlZEJvdW5kYXJ5LngxTmV3IDogYm91bmRhcnkueDE7XG4gICAgICB9IGVsc2UgaWYgKGFmZmVjdGVkQm91bmRhcnkueDJOZXcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB4TmV3ID0gKGFmZmVjdGVkQm91bmRhcnkueDIgKyBib3VuZGFyeS54MSkgLyAyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgeE5ldyA9IGFmZmVjdGVkQm91bmRhcnkueDJOZXc7XG4gICAgICB9XG5cbiAgICAgIGlmICh4TmV3ID4gbWF4WE5ldykge1xuICAgICAgICBtYXhYTmV3ID0geE5ldztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBib3VuZGFyeS54MU5ldyA9IG1heFhOZXc7XG5cbiAgICBmb3IgKHEgPSBpOyBxIDw9IGo7IHErKykge1xuICAgICAgaG9yaXpvblBhcnQgPSBob3Jpem9uW3FdO1xuICAgICAgYWZmZWN0ZWRCb3VuZGFyeSA9IGhvcml6b25QYXJ0LmJvdW5kYXJ5O1xuXG4gICAgICBpZiAoYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChhZmZlY3RlZEJvdW5kYXJ5LngyID4gYm91bmRhcnkueDEpIHtcbiAgICAgICAgICBpZiAoYWZmZWN0ZWRCb3VuZGFyeS5pbmRleCA+IGJvdW5kYXJ5LmluZGV4KSB7XG4gICAgICAgICAgICBhZmZlY3RlZEJvdW5kYXJ5LngyTmV3ID0gYWZmZWN0ZWRCb3VuZGFyeS54MjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyA9IG1heFhOZXc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyA+IG1heFhOZXcpIHtcbiAgICAgICAgYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyA9IE1hdGgubWF4KG1heFhOZXcsIGFmZmVjdGVkQm91bmRhcnkueDIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNoYW5nZWRIb3Jpem9uID0gW107XG4gICAgbGV0IGxhc3RCb3VuZGFyeSA9IG51bGw7XG5cbiAgICBmb3IgKHEgPSBpOyBxIDw9IGo7IHErKykge1xuICAgICAgaG9yaXpvblBhcnQgPSBob3Jpem9uW3FdO1xuICAgICAgYWZmZWN0ZWRCb3VuZGFyeSA9IGhvcml6b25QYXJ0LmJvdW5kYXJ5O1xuICAgICAgY29uc3QgdXNlQm91bmRhcnkgPSBhZmZlY3RlZEJvdW5kYXJ5LngyID4gYm91bmRhcnkueDIgPyBhZmZlY3RlZEJvdW5kYXJ5IDogYm91bmRhcnk7XG5cbiAgICAgIGlmIChsYXN0Qm91bmRhcnkgPT09IHVzZUJvdW5kYXJ5KSB7XG4gICAgICAgIGNoYW5nZWRIb3Jpem9uW2NoYW5nZWRIb3Jpem9uLmxlbmd0aCAtIDFdLmVuZCA9IGhvcml6b25QYXJ0LmVuZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoYW5nZWRIb3Jpem9uLnB1c2goe1xuICAgICAgICAgIHN0YXJ0OiBob3Jpem9uUGFydC5zdGFydCxcbiAgICAgICAgICBlbmQ6IGhvcml6b25QYXJ0LmVuZCxcbiAgICAgICAgICBib3VuZGFyeTogdXNlQm91bmRhcnlcbiAgICAgICAgfSk7XG4gICAgICAgIGxhc3RCb3VuZGFyeSA9IHVzZUJvdW5kYXJ5O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChob3Jpem9uW2ldLnN0YXJ0IDwgYm91bmRhcnkueTEpIHtcbiAgICAgIGNoYW5nZWRIb3Jpem9uWzBdLnN0YXJ0ID0gYm91bmRhcnkueTE7XG4gICAgICBjaGFuZ2VkSG9yaXpvbi51bnNoaWZ0KHtcbiAgICAgICAgc3RhcnQ6IGhvcml6b25baV0uc3RhcnQsXG4gICAgICAgIGVuZDogYm91bmRhcnkueTEsXG4gICAgICAgIGJvdW5kYXJ5OiBob3Jpem9uW2ldLmJvdW5kYXJ5XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoYm91bmRhcnkueTIgPCBob3Jpem9uW2pdLmVuZCkge1xuICAgICAgY2hhbmdlZEhvcml6b25bY2hhbmdlZEhvcml6b24ubGVuZ3RoIC0gMV0uZW5kID0gYm91bmRhcnkueTI7XG4gICAgICBjaGFuZ2VkSG9yaXpvbi5wdXNoKHtcbiAgICAgICAgc3RhcnQ6IGJvdW5kYXJ5LnkyLFxuICAgICAgICBlbmQ6IGhvcml6b25bal0uZW5kLFxuICAgICAgICBib3VuZGFyeTogaG9yaXpvbltqXS5ib3VuZGFyeVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChxID0gaTsgcSA8PSBqOyBxKyspIHtcbiAgICAgIGhvcml6b25QYXJ0ID0gaG9yaXpvbltxXTtcbiAgICAgIGFmZmVjdGVkQm91bmRhcnkgPSBob3Jpem9uUGFydC5ib3VuZGFyeTtcblxuICAgICAgaWYgKGFmZmVjdGVkQm91bmRhcnkueDJOZXcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IHVzZWQgPSBmYWxzZTtcblxuICAgICAgZm9yIChrID0gaSAtIDE7ICF1c2VkICYmIGsgPj0gMCAmJiBob3Jpem9uW2tdLnN0YXJ0ID49IGFmZmVjdGVkQm91bmRhcnkueTE7IGstLSkge1xuICAgICAgICB1c2VkID0gaG9yaXpvbltrXS5ib3VuZGFyeSA9PT0gYWZmZWN0ZWRCb3VuZGFyeTtcbiAgICAgIH1cblxuICAgICAgZm9yIChrID0gaiArIDE7ICF1c2VkICYmIGsgPCBob3Jpem9uLmxlbmd0aCAmJiBob3Jpem9uW2tdLmVuZCA8PSBhZmZlY3RlZEJvdW5kYXJ5LnkyOyBrKyspIHtcbiAgICAgICAgdXNlZCA9IGhvcml6b25ba10uYm91bmRhcnkgPT09IGFmZmVjdGVkQm91bmRhcnk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoayA9IDA7ICF1c2VkICYmIGsgPCBjaGFuZ2VkSG9yaXpvbi5sZW5ndGg7IGsrKykge1xuICAgICAgICB1c2VkID0gY2hhbmdlZEhvcml6b25ba10uYm91bmRhcnkgPT09IGFmZmVjdGVkQm91bmRhcnk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdXNlZCkge1xuICAgICAgICBhZmZlY3RlZEJvdW5kYXJ5LngyTmV3ID0gbWF4WE5ldztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGhvcml6b24sIFtpLCBqIC0gaSArIDFdLmNvbmNhdChjaGFuZ2VkSG9yaXpvbikpO1xuICB9XG5cbiAgZm9yIChjb25zdCBob3Jpem9uUGFydCBvZiBob3Jpem9uKSB7XG4gICAgY29uc3QgYWZmZWN0ZWRCb3VuZGFyeSA9IGhvcml6b25QYXJ0LmJvdW5kYXJ5O1xuXG4gICAgaWYgKGFmZmVjdGVkQm91bmRhcnkueDJOZXcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyA9IE1hdGgubWF4KHdpZHRoLCBhZmZlY3RlZEJvdW5kYXJ5LngyKTtcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgVGV4dExheWVyUmVuZGVyVGFzayB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICB0ZXh0Q29udGVudCxcbiAgICB0ZXh0Q29udGVudFN0cmVhbSxcbiAgICBjb250YWluZXIsXG4gICAgdmlld3BvcnQsXG4gICAgdGV4dERpdnMsXG4gICAgdGV4dENvbnRlbnRJdGVtc1N0cixcbiAgICBlbmhhbmNlVGV4dFNlbGVjdGlvblxuICB9KSB7XG4gICAgdGhpcy5fdGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudDtcbiAgICB0aGlzLl90ZXh0Q29udGVudFN0cmVhbSA9IHRleHRDb250ZW50U3RyZWFtO1xuICAgIHRoaXMuX2NvbnRhaW5lciA9IGNvbnRhaW5lcjtcbiAgICB0aGlzLl9kb2N1bWVudCA9IGNvbnRhaW5lci5vd25lckRvY3VtZW50O1xuICAgIHRoaXMuX3ZpZXdwb3J0ID0gdmlld3BvcnQ7XG4gICAgdGhpcy5fdGV4dERpdnMgPSB0ZXh0RGl2cyB8fCBbXTtcbiAgICB0aGlzLl90ZXh0Q29udGVudEl0ZW1zU3RyID0gdGV4dENvbnRlbnRJdGVtc1N0ciB8fCBbXTtcbiAgICB0aGlzLl9lbmhhbmNlVGV4dFNlbGVjdGlvbiA9ICEhZW5oYW5jZVRleHRTZWxlY3Rpb247XG4gICAgdGhpcy5fZm9udEluc3BlY3RvckVuYWJsZWQgPSAhIWdsb2JhbFRoaXMuRm9udEluc3BlY3Rvcj8uZW5hYmxlZDtcbiAgICB0aGlzLl9yZWFkZXIgPSBudWxsO1xuICAgIHRoaXMuX2xheW91dFRleHRMYXN0Rm9udFNpemUgPSBudWxsO1xuICAgIHRoaXMuX2xheW91dFRleHRMYXN0Rm9udEZhbWlseSA9IG51bGw7XG4gICAgdGhpcy5fbGF5b3V0VGV4dEN0eCA9IG51bGw7XG4gICAgdGhpcy5fdGV4dERpdlByb3BlcnRpZXMgPSBuZXcgV2Vha01hcCgpO1xuICAgIHRoaXMuX3JlbmRlcmluZ0RvbmUgPSBmYWxzZTtcbiAgICB0aGlzLl9jYW5jZWxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2NhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgdGhpcy5fcmVuZGVyVGltZXIgPSBudWxsO1xuICAgIHRoaXMuX2JvdW5kcyA9IFtdO1xuXG4gICAgdGhpcy5fY2FwYWJpbGl0eS5wcm9taXNlLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9lbmhhbmNlVGV4dFNlbGVjdGlvbikge1xuICAgICAgICB0aGlzLl90ZXh0RGl2UHJvcGVydGllcyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9sYXlvdXRUZXh0Q3R4KSB7XG4gICAgICAgIHRoaXMuX2xheW91dFRleHRDdHguY2FudmFzLndpZHRoID0gMDtcbiAgICAgICAgdGhpcy5fbGF5b3V0VGV4dEN0eC5jYW52YXMuaGVpZ2h0ID0gMDtcbiAgICAgICAgdGhpcy5fbGF5b3V0VGV4dEN0eCA9IG51bGw7XG4gICAgICB9XG4gICAgfSkuY2F0Y2goKCkgPT4ge30pO1xuICB9XG5cbiAgZ2V0IHByb21pc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLl9jYW5jZWxlZCA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5fcmVhZGVyKSB7XG4gICAgICB0aGlzLl9yZWFkZXIuY2FuY2VsKG5ldyBfdXRpbC5BYm9ydEV4Y2VwdGlvbihcIlRleHRMYXllciB0YXNrIGNhbmNlbGxlZC5cIikpLmNhdGNoKCgpID0+IHt9KTtcblxuICAgICAgdGhpcy5fcmVhZGVyID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcmVuZGVyVGltZXIgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZW5kZXJUaW1lcik7XG4gICAgICB0aGlzLl9yZW5kZXJUaW1lciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKFwiVGV4dExheWVyIHRhc2sgY2FuY2VsbGVkLlwiKSk7XG4gIH1cblxuICBfcHJvY2Vzc0l0ZW1zKGl0ZW1zLCBzdHlsZUNhY2hlKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpZiAoaXRlbXNbaV0uc3RyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGl0ZW1zW2ldLnR5cGUgPT09IFwiYmVnaW5NYXJrZWRDb250ZW50UHJvcHNcIiB8fCBpdGVtc1tpXS50eXBlID09PSBcImJlZ2luTWFya2VkQ29udGVudFwiKSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5fY29udGFpbmVyO1xuICAgICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuXG4gICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJtYXJrZWRDb250ZW50XCIpO1xuXG4gICAgICAgICAgaWYgKGl0ZW1zW2ldLmlkICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgYCR7aXRlbXNbaV0uaWR9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbXNbaV0udHlwZSA9PT0gXCJlbmRNYXJrZWRDb250ZW50XCIpIHtcbiAgICAgICAgICB0aGlzLl9jb250YWluZXIgPSB0aGlzLl9jb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl90ZXh0Q29udGVudEl0ZW1zU3RyLnB1c2goaXRlbXNbaV0uc3RyKTtcblxuICAgICAgYXBwZW5kVGV4dCh0aGlzLCBpdGVtc1tpXSwgc3R5bGVDYWNoZSwgdGhpcy5fbGF5b3V0VGV4dEN0eCk7XG4gICAgfVxuICB9XG5cbiAgX2xheW91dFRleHQodGV4dERpdikge1xuICAgIGNvbnN0IHRleHREaXZQcm9wZXJ0aWVzID0gdGhpcy5fdGV4dERpdlByb3BlcnRpZXMuZ2V0KHRleHREaXYpO1xuXG4gICAgbGV0IHRyYW5zZm9ybSA9IFwiXCI7XG5cbiAgICBpZiAodGV4dERpdlByb3BlcnRpZXMuY2FudmFzV2lkdGggIT09IDAgJiYgdGV4dERpdlByb3BlcnRpZXMuaGFzVGV4dCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgZm9udEZhbWlseVxuICAgICAgfSA9IHRleHREaXYuc3R5bGU7XG5cbiAgICAgIGlmIChmb250U2l6ZSAhPT0gdGhpcy5fbGF5b3V0VGV4dExhc3RGb250U2l6ZSB8fCBmb250RmFtaWx5ICE9PSB0aGlzLl9sYXlvdXRUZXh0TGFzdEZvbnRGYW1pbHkpIHtcbiAgICAgICAgdGhpcy5fbGF5b3V0VGV4dEN0eC5mb250ID0gYCR7Zm9udFNpemV9ICR7Zm9udEZhbWlseX1gO1xuICAgICAgICB0aGlzLl9sYXlvdXRUZXh0TGFzdEZvbnRTaXplID0gZm9udFNpemU7XG4gICAgICAgIHRoaXMuX2xheW91dFRleHRMYXN0Rm9udEZhbWlseSA9IGZvbnRGYW1pbHk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgd2lkdGhcbiAgICAgIH0gPSB0aGlzLl9sYXlvdXRUZXh0Q3R4Lm1lYXN1cmVUZXh0KHRleHREaXYudGV4dENvbnRlbnQpO1xuXG4gICAgICBpZiAod2lkdGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gdGV4dERpdlByb3BlcnRpZXMuY2FudmFzV2lkdGggLyB3aWR0aDtcblxuICAgICAgICBpZiAodGhpcy5fZW5oYW5jZVRleHRTZWxlY3Rpb24pIHtcbiAgICAgICAgICB0ZXh0RGl2UHJvcGVydGllcy5zY2FsZSA9IHNjYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJhbnNmb3JtID0gYHNjYWxlWCgke3NjYWxlfSlgO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0ZXh0RGl2UHJvcGVydGllcy5hbmdsZSAhPT0gMCkge1xuICAgICAgdHJhbnNmb3JtID0gYHJvdGF0ZSgke3RleHREaXZQcm9wZXJ0aWVzLmFuZ2xlfWRlZykgJHt0cmFuc2Zvcm19YDtcbiAgICB9XG5cbiAgICBpZiAodHJhbnNmb3JtLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0aGlzLl9lbmhhbmNlVGV4dFNlbGVjdGlvbikge1xuICAgICAgICB0ZXh0RGl2UHJvcGVydGllcy5vcmlnaW5hbFRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgICAgIH1cblxuICAgICAgdGV4dERpdi5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgfVxuXG4gICAgaWYgKHRleHREaXZQcm9wZXJ0aWVzLmhhc1RleHQpIHtcbiAgICAgIHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZCh0ZXh0RGl2KTtcbiAgICB9XG5cbiAgICBpZiAodGV4dERpdlByb3BlcnRpZXMuaGFzRU9MKSB7XG4gICAgICBjb25zdCBiciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJiclwiKTtcbiAgICAgIGJyLnNldEF0dHJpYnV0ZShcInJvbGVcIiwgXCJwcmVzZW50YXRpb25cIik7XG5cbiAgICAgIHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChicik7XG4gICAgfVxuICB9XG5cbiAgX3JlbmRlcih0aW1lb3V0ID0gMCkge1xuICAgIGNvbnN0IGNhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgbGV0IHN0eWxlQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcblxuICAgIGNhbnZhcy5oZWlnaHQgPSBjYW52YXMud2lkdGggPSBERUZBVUxUX0ZPTlRfU0laRTtcbiAgICBjYW52YXMubW96T3BhcXVlID0gdHJ1ZTtcbiAgICB0aGlzLl9sYXlvdXRUZXh0Q3R4ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiLCB7XG4gICAgICBhbHBoYTogZmFsc2VcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLl90ZXh0Q29udGVudCkge1xuICAgICAgY29uc3QgdGV4dEl0ZW1zID0gdGhpcy5fdGV4dENvbnRlbnQuaXRlbXM7XG4gICAgICBjb25zdCB0ZXh0U3R5bGVzID0gdGhpcy5fdGV4dENvbnRlbnQuc3R5bGVzO1xuXG4gICAgICB0aGlzLl9wcm9jZXNzSXRlbXModGV4dEl0ZW1zLCB0ZXh0U3R5bGVzKTtcblxuICAgICAgY2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl90ZXh0Q29udGVudFN0cmVhbSkge1xuICAgICAgY29uc3QgcHVtcCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVhZGVyLnJlYWQoKS50aGVuKCh7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgZG9uZVxuICAgICAgICB9KSA9PiB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIGNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oc3R5bGVDYWNoZSwgdmFsdWUuc3R5bGVzKTtcblxuICAgICAgICAgIHRoaXMuX3Byb2Nlc3NJdGVtcyh2YWx1ZS5pdGVtcywgc3R5bGVDYWNoZSk7XG5cbiAgICAgICAgICBwdW1wKCk7XG4gICAgICAgIH0sIGNhcGFiaWxpdHkucmVqZWN0KTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX3JlYWRlciA9IHRoaXMuX3RleHRDb250ZW50U3RyZWFtLmdldFJlYWRlcigpO1xuICAgICAgcHVtcCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05laXRoZXIgXCJ0ZXh0Q29udGVudFwiIG5vciBcInRleHRDb250ZW50U3RyZWFtXCIgcGFyYW1ldGVycyBzcGVjaWZpZWQuJyk7XG4gICAgfVxuXG4gICAgY2FwYWJpbGl0eS5wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgc3R5bGVDYWNoZSA9IG51bGw7XG5cbiAgICAgIGlmICghdGltZW91dCkge1xuICAgICAgICByZW5kZXIodGhpcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9yZW5kZXJUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHJlbmRlcih0aGlzKTtcbiAgICAgICAgICB0aGlzLl9yZW5kZXJUaW1lciA9IG51bGw7XG4gICAgICAgIH0sIHRpbWVvdXQpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuX2NhcGFiaWxpdHkucmVqZWN0KTtcbiAgfVxuXG4gIGV4cGFuZFRleHREaXZzKGV4cGFuZERpdnMgPSBmYWxzZSkge1xuICAgIGlmICghdGhpcy5fZW5oYW5jZVRleHRTZWxlY3Rpb24gfHwgIXRoaXMuX3JlbmRlcmluZ0RvbmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYm91bmRzICE9PSBudWxsKSB7XG4gICAgICBleHBhbmQodGhpcyk7XG4gICAgICB0aGlzLl9ib3VuZHMgPSBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zZm9ybUJ1ZiA9IFtdLFxuICAgICAgICAgIHBhZGRpbmdCdWYgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHRoaXMuX3RleHREaXZzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNvbnN0IGRpdiA9IHRoaXMuX3RleHREaXZzW2ldO1xuXG4gICAgICBjb25zdCBkaXZQcm9wcyA9IHRoaXMuX3RleHREaXZQcm9wZXJ0aWVzLmdldChkaXYpO1xuXG4gICAgICBpZiAoIWRpdlByb3BzLmhhc1RleHQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChleHBhbmREaXZzKSB7XG4gICAgICAgIHRyYW5zZm9ybUJ1Zi5sZW5ndGggPSAwO1xuICAgICAgICBwYWRkaW5nQnVmLmxlbmd0aCA9IDA7XG5cbiAgICAgICAgaWYgKGRpdlByb3BzLm9yaWdpbmFsVHJhbnNmb3JtKSB7XG4gICAgICAgICAgdHJhbnNmb3JtQnVmLnB1c2goZGl2UHJvcHMub3JpZ2luYWxUcmFuc2Zvcm0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpdlByb3BzLnBhZGRpbmdUb3AgPiAwKSB7XG4gICAgICAgICAgcGFkZGluZ0J1Zi5wdXNoKGAke2RpdlByb3BzLnBhZGRpbmdUb3B9cHhgKTtcbiAgICAgICAgICB0cmFuc2Zvcm1CdWYucHVzaChgdHJhbnNsYXRlWSgkey1kaXZQcm9wcy5wYWRkaW5nVG9wfXB4KWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhZGRpbmdCdWYucHVzaCgwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXZQcm9wcy5wYWRkaW5nUmlnaHQgPiAwKSB7XG4gICAgICAgICAgcGFkZGluZ0J1Zi5wdXNoKGAke2RpdlByb3BzLnBhZGRpbmdSaWdodCAvIGRpdlByb3BzLnNjYWxlfXB4YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFkZGluZ0J1Zi5wdXNoKDApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpdlByb3BzLnBhZGRpbmdCb3R0b20gPiAwKSB7XG4gICAgICAgICAgcGFkZGluZ0J1Zi5wdXNoKGAke2RpdlByb3BzLnBhZGRpbmdCb3R0b219cHhgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYWRkaW5nQnVmLnB1c2goMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGl2UHJvcHMucGFkZGluZ0xlZnQgPiAwKSB7XG4gICAgICAgICAgcGFkZGluZ0J1Zi5wdXNoKGAke2RpdlByb3BzLnBhZGRpbmdMZWZ0IC8gZGl2UHJvcHMuc2NhbGV9cHhgKTtcbiAgICAgICAgICB0cmFuc2Zvcm1CdWYucHVzaChgdHJhbnNsYXRlWCgkey1kaXZQcm9wcy5wYWRkaW5nTGVmdCAvIGRpdlByb3BzLnNjYWxlfXB4KWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhZGRpbmdCdWYucHVzaCgwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpdi5zdHlsZS5wYWRkaW5nID0gcGFkZGluZ0J1Zi5qb2luKFwiIFwiKTtcblxuICAgICAgICBpZiAodHJhbnNmb3JtQnVmLmxlbmd0aCkge1xuICAgICAgICAgIGRpdi5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1CdWYuam9pbihcIiBcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpdi5zdHlsZS5wYWRkaW5nID0gbnVsbDtcbiAgICAgICAgZGl2LnN0eWxlLnRyYW5zZm9ybSA9IGRpdlByb3BzLm9yaWdpbmFsVHJhbnNmb3JtO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG5cbmZ1bmN0aW9uIHJlbmRlclRleHRMYXllcihyZW5kZXJQYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHRhc2sgPSBuZXcgVGV4dExheWVyUmVuZGVyVGFzayh7XG4gICAgdGV4dENvbnRlbnQ6IHJlbmRlclBhcmFtZXRlcnMudGV4dENvbnRlbnQsXG4gICAgdGV4dENvbnRlbnRTdHJlYW06IHJlbmRlclBhcmFtZXRlcnMudGV4dENvbnRlbnRTdHJlYW0sXG4gICAgY29udGFpbmVyOiByZW5kZXJQYXJhbWV0ZXJzLmNvbnRhaW5lcixcbiAgICB2aWV3cG9ydDogcmVuZGVyUGFyYW1ldGVycy52aWV3cG9ydCxcbiAgICB0ZXh0RGl2czogcmVuZGVyUGFyYW1ldGVycy50ZXh0RGl2cyxcbiAgICB0ZXh0Q29udGVudEl0ZW1zU3RyOiByZW5kZXJQYXJhbWV0ZXJzLnRleHRDb250ZW50SXRlbXNTdHIsXG4gICAgZW5oYW5jZVRleHRTZWxlY3Rpb246IHJlbmRlclBhcmFtZXRlcnMuZW5oYW5jZVRleHRTZWxlY3Rpb25cbiAgfSk7XG5cbiAgdGFzay5fcmVuZGVyKHJlbmRlclBhcmFtZXRlcnMudGltZW91dCk7XG5cbiAgcmV0dXJuIHRhc2s7XG59XG5cbi8qKiovIH0pLFxuLyogMjIgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuU1ZHR3JhcGhpY3MgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfZGlzcGxheV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oMSk7XG5cbnZhciBfaXNfbm9kZSA9IF9fd19wZGZqc19yZXF1aXJlX18oNCk7XG5cbmxldCBTVkdHcmFwaGljcyA9IGNsYXNzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIk5vdCBpbXBsZW1lbnRlZDogU1ZHR3JhcGhpY3NcIik7XG4gIH1cblxufTtcbmV4cG9ydHMuU1ZHR3JhcGhpY3MgPSBTVkdHcmFwaGljcztcbntcbiAgY29uc3QgU1ZHX0RFRkFVTFRTID0ge1xuICAgIGZvbnRTdHlsZTogXCJub3JtYWxcIixcbiAgICBmb250V2VpZ2h0OiBcIm5vcm1hbFwiLFxuICAgIGZpbGxDb2xvcjogXCIjMDAwMDAwXCJcbiAgfTtcbiAgY29uc3QgWE1MX05TID0gXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIjtcbiAgY29uc3QgWExJTktfTlMgPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIjtcbiAgY29uc3QgTElORV9DQVBfU1RZTEVTID0gW1wiYnV0dFwiLCBcInJvdW5kXCIsIFwic3F1YXJlXCJdO1xuICBjb25zdCBMSU5FX0pPSU5fU1RZTEVTID0gW1wibWl0ZXJcIiwgXCJyb3VuZFwiLCBcImJldmVsXCJdO1xuXG4gIGNvbnN0IGNvbnZlcnRJbWdEYXRhVG9QbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgUE5HX0hFQURFUiA9IG5ldyBVaW50OEFycmF5KFsweDg5LCAweDUwLCAweDRlLCAweDQ3LCAweDBkLCAweDBhLCAweDFhLCAweDBhXSk7XG4gICAgY29uc3QgQ0hVTktfV1JBUFBFUl9TSVpFID0gMTI7XG4gICAgY29uc3QgY3JjVGFibGUgPSBuZXcgSW50MzJBcnJheSgyNTYpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgbGV0IGMgPSBpO1xuXG4gICAgICBmb3IgKGxldCBoID0gMDsgaCA8IDg7IGgrKykge1xuICAgICAgICBpZiAoYyAmIDEpIHtcbiAgICAgICAgICBjID0gMHhlZGI4ODMyMCBeIGMgPj4gMSAmIDB4N2ZmZmZmZmY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYyA9IGMgPj4gMSAmIDB4N2ZmZmZmZmY7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY3JjVGFibGVbaV0gPSBjO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyYzMyKGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIGxldCBjcmMgPSAtMTtcblxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgY29uc3QgYSA9IChjcmMgXiBkYXRhW2ldKSAmIDB4ZmY7XG4gICAgICAgIGNvbnN0IGIgPSBjcmNUYWJsZVthXTtcbiAgICAgICAgY3JjID0gY3JjID4+PiA4IF4gYjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNyYyBeIC0xO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdyaXRlUG5nQ2h1bmsodHlwZSwgYm9keSwgZGF0YSwgb2Zmc2V0KSB7XG4gICAgICBsZXQgcCA9IG9mZnNldDtcbiAgICAgIGNvbnN0IGxlbiA9IGJvZHkubGVuZ3RoO1xuICAgICAgZGF0YVtwXSA9IGxlbiA+PiAyNCAmIDB4ZmY7XG4gICAgICBkYXRhW3AgKyAxXSA9IGxlbiA+PiAxNiAmIDB4ZmY7XG4gICAgICBkYXRhW3AgKyAyXSA9IGxlbiA+PiA4ICYgMHhmZjtcbiAgICAgIGRhdGFbcCArIDNdID0gbGVuICYgMHhmZjtcbiAgICAgIHAgKz0gNDtcbiAgICAgIGRhdGFbcF0gPSB0eXBlLmNoYXJDb2RlQXQoMCkgJiAweGZmO1xuICAgICAgZGF0YVtwICsgMV0gPSB0eXBlLmNoYXJDb2RlQXQoMSkgJiAweGZmO1xuICAgICAgZGF0YVtwICsgMl0gPSB0eXBlLmNoYXJDb2RlQXQoMikgJiAweGZmO1xuICAgICAgZGF0YVtwICsgM10gPSB0eXBlLmNoYXJDb2RlQXQoMykgJiAweGZmO1xuICAgICAgcCArPSA0O1xuICAgICAgZGF0YS5zZXQoYm9keSwgcCk7XG4gICAgICBwICs9IGJvZHkubGVuZ3RoO1xuICAgICAgY29uc3QgY3JjID0gY3JjMzIoZGF0YSwgb2Zmc2V0ICsgNCwgcCk7XG4gICAgICBkYXRhW3BdID0gY3JjID4+IDI0ICYgMHhmZjtcbiAgICAgIGRhdGFbcCArIDFdID0gY3JjID4+IDE2ICYgMHhmZjtcbiAgICAgIGRhdGFbcCArIDJdID0gY3JjID4+IDggJiAweGZmO1xuICAgICAgZGF0YVtwICsgM10gPSBjcmMgJiAweGZmO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkbGVyMzIoZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgICAgbGV0IGEgPSAxO1xuICAgICAgbGV0IGIgPSAwO1xuXG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgICAgICBhID0gKGEgKyAoZGF0YVtpXSAmIDB4ZmYpKSAlIDY1NTIxO1xuICAgICAgICBiID0gKGIgKyBhKSAlIDY1NTIxO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYiA8PCAxNiB8IGE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmbGF0ZVN5bmMobGl0ZXJhbHMpIHtcbiAgICAgIGlmICghX2lzX25vZGUuaXNOb2RlSlMpIHtcbiAgICAgICAgcmV0dXJuIGRlZmxhdGVTeW5jVW5jb21wcmVzc2VkKGxpdGVyYWxzKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IGlucHV0O1xuXG4gICAgICAgIGlmIChwYXJzZUludChwcm9jZXNzLnZlcnNpb25zLm5vZGUpID49IDgpIHtcbiAgICAgICAgICBpbnB1dCA9IGxpdGVyYWxzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlucHV0ID0gQnVmZmVyLmZyb20obGl0ZXJhbHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gcmVxdWlyZShcInpsaWJcIikuZGVmbGF0ZVN5bmMoaW5wdXQsIHtcbiAgICAgICAgICBsZXZlbDogOVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gb3V0cHV0IGluc3RhbmNlb2YgVWludDhBcnJheSA/IG91dHB1dCA6IG5ldyBVaW50OEFycmF5KG91dHB1dCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIk5vdCBjb21wcmVzc2luZyBQTkcgYmVjYXVzZSB6bGliLmRlZmxhdGVTeW5jIGlzIHVuYXZhaWxhYmxlOiBcIiArIGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVmbGF0ZVN5bmNVbmNvbXByZXNzZWQobGl0ZXJhbHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmxhdGVTeW5jVW5jb21wcmVzc2VkKGxpdGVyYWxzKSB7XG4gICAgICBsZXQgbGVuID0gbGl0ZXJhbHMubGVuZ3RoO1xuICAgICAgY29uc3QgbWF4QmxvY2tMZW5ndGggPSAweGZmZmY7XG4gICAgICBjb25zdCBkZWZsYXRlQmxvY2tzID0gTWF0aC5jZWlsKGxlbiAvIG1heEJsb2NrTGVuZ3RoKTtcbiAgICAgIGNvbnN0IGlkYXQgPSBuZXcgVWludDhBcnJheSgyICsgbGVuICsgZGVmbGF0ZUJsb2NrcyAqIDUgKyA0KTtcbiAgICAgIGxldCBwaSA9IDA7XG4gICAgICBpZGF0W3BpKytdID0gMHg3ODtcbiAgICAgIGlkYXRbcGkrK10gPSAweDljO1xuICAgICAgbGV0IHBvcyA9IDA7XG5cbiAgICAgIHdoaWxlIChsZW4gPiBtYXhCbG9ja0xlbmd0aCkge1xuICAgICAgICBpZGF0W3BpKytdID0gMHgwMDtcbiAgICAgICAgaWRhdFtwaSsrXSA9IDB4ZmY7XG4gICAgICAgIGlkYXRbcGkrK10gPSAweGZmO1xuICAgICAgICBpZGF0W3BpKytdID0gMHgwMDtcbiAgICAgICAgaWRhdFtwaSsrXSA9IDB4MDA7XG4gICAgICAgIGlkYXQuc2V0KGxpdGVyYWxzLnN1YmFycmF5KHBvcywgcG9zICsgbWF4QmxvY2tMZW5ndGgpLCBwaSk7XG4gICAgICAgIHBpICs9IG1heEJsb2NrTGVuZ3RoO1xuICAgICAgICBwb3MgKz0gbWF4QmxvY2tMZW5ndGg7XG4gICAgICAgIGxlbiAtPSBtYXhCbG9ja0xlbmd0aDtcbiAgICAgIH1cblxuICAgICAgaWRhdFtwaSsrXSA9IDB4MDE7XG4gICAgICBpZGF0W3BpKytdID0gbGVuICYgMHhmZjtcbiAgICAgIGlkYXRbcGkrK10gPSBsZW4gPj4gOCAmIDB4ZmY7XG4gICAgICBpZGF0W3BpKytdID0gfmxlbiAmIDB4ZmZmZiAmIDB4ZmY7XG4gICAgICBpZGF0W3BpKytdID0gKH5sZW4gJiAweGZmZmYpID4+IDggJiAweGZmO1xuICAgICAgaWRhdC5zZXQobGl0ZXJhbHMuc3ViYXJyYXkocG9zKSwgcGkpO1xuICAgICAgcGkgKz0gbGl0ZXJhbHMubGVuZ3RoIC0gcG9zO1xuICAgICAgY29uc3QgYWRsZXIgPSBhZGxlcjMyKGxpdGVyYWxzLCAwLCBsaXRlcmFscy5sZW5ndGgpO1xuICAgICAgaWRhdFtwaSsrXSA9IGFkbGVyID4+IDI0ICYgMHhmZjtcbiAgICAgIGlkYXRbcGkrK10gPSBhZGxlciA+PiAxNiAmIDB4ZmY7XG4gICAgICBpZGF0W3BpKytdID0gYWRsZXIgPj4gOCAmIDB4ZmY7XG4gICAgICBpZGF0W3BpKytdID0gYWRsZXIgJiAweGZmO1xuICAgICAgcmV0dXJuIGlkYXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5jb2RlKGltZ0RhdGEsIGtpbmQsIGZvcmNlRGF0YVNjaGVtYSwgaXNNYXNrKSB7XG4gICAgICBjb25zdCB3aWR0aCA9IGltZ0RhdGEud2lkdGg7XG4gICAgICBjb25zdCBoZWlnaHQgPSBpbWdEYXRhLmhlaWdodDtcbiAgICAgIGxldCBiaXREZXB0aCwgY29sb3JUeXBlLCBsaW5lU2l6ZTtcbiAgICAgIGNvbnN0IGJ5dGVzID0gaW1nRGF0YS5kYXRhO1xuXG4gICAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgICAgY2FzZSBfdXRpbC5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA6XG4gICAgICAgICAgY29sb3JUeXBlID0gMDtcbiAgICAgICAgICBiaXREZXB0aCA9IDE7XG4gICAgICAgICAgbGluZVNpemUgPSB3aWR0aCArIDcgPj4gMztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIF91dGlsLkltYWdlS2luZC5SR0JfMjRCUFA6XG4gICAgICAgICAgY29sb3JUeXBlID0gMjtcbiAgICAgICAgICBiaXREZXB0aCA9IDg7XG4gICAgICAgICAgbGluZVNpemUgPSB3aWR0aCAqIDM7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBfdXRpbC5JbWFnZUtpbmQuUkdCQV8zMkJQUDpcbiAgICAgICAgICBjb2xvclR5cGUgPSA2O1xuICAgICAgICAgIGJpdERlcHRoID0gODtcbiAgICAgICAgICBsaW5lU2l6ZSA9IHdpZHRoICogNDtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZm9ybWF0XCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsaXRlcmFscyA9IG5ldyBVaW50OEFycmF5KCgxICsgbGluZVNpemUpICogaGVpZ2h0KTtcbiAgICAgIGxldCBvZmZzZXRMaXRlcmFscyA9IDAsXG4gICAgICAgICAgb2Zmc2V0Qnl0ZXMgPSAwO1xuXG4gICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgKyt5KSB7XG4gICAgICAgIGxpdGVyYWxzW29mZnNldExpdGVyYWxzKytdID0gMDtcbiAgICAgICAgbGl0ZXJhbHMuc2V0KGJ5dGVzLnN1YmFycmF5KG9mZnNldEJ5dGVzLCBvZmZzZXRCeXRlcyArIGxpbmVTaXplKSwgb2Zmc2V0TGl0ZXJhbHMpO1xuICAgICAgICBvZmZzZXRCeXRlcyArPSBsaW5lU2l6ZTtcbiAgICAgICAgb2Zmc2V0TGl0ZXJhbHMgKz0gbGluZVNpemU7XG4gICAgICB9XG5cbiAgICAgIGlmIChraW5kID09PSBfdXRpbC5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFAgJiYgaXNNYXNrKSB7XG4gICAgICAgIG9mZnNldExpdGVyYWxzID0gMDtcblxuICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgICAgICAgb2Zmc2V0TGl0ZXJhbHMrKztcblxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZVNpemU7IGkrKykge1xuICAgICAgICAgICAgbGl0ZXJhbHNbb2Zmc2V0TGl0ZXJhbHMrK10gXj0gMHhmZjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgaWhkciA9IG5ldyBVaW50OEFycmF5KFt3aWR0aCA+PiAyNCAmIDB4ZmYsIHdpZHRoID4+IDE2ICYgMHhmZiwgd2lkdGggPj4gOCAmIDB4ZmYsIHdpZHRoICYgMHhmZiwgaGVpZ2h0ID4+IDI0ICYgMHhmZiwgaGVpZ2h0ID4+IDE2ICYgMHhmZiwgaGVpZ2h0ID4+IDggJiAweGZmLCBoZWlnaHQgJiAweGZmLCBiaXREZXB0aCwgY29sb3JUeXBlLCAweDAwLCAweDAwLCAweDAwXSk7XG4gICAgICBjb25zdCBpZGF0ID0gZGVmbGF0ZVN5bmMobGl0ZXJhbHMpO1xuICAgICAgY29uc3QgcG5nTGVuZ3RoID0gUE5HX0hFQURFUi5sZW5ndGggKyBDSFVOS19XUkFQUEVSX1NJWkUgKiAzICsgaWhkci5sZW5ndGggKyBpZGF0Lmxlbmd0aDtcbiAgICAgIGNvbnN0IGRhdGEgPSBuZXcgVWludDhBcnJheShwbmdMZW5ndGgpO1xuICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICBkYXRhLnNldChQTkdfSEVBREVSLCBvZmZzZXQpO1xuICAgICAgb2Zmc2V0ICs9IFBOR19IRUFERVIubGVuZ3RoO1xuICAgICAgd3JpdGVQbmdDaHVuayhcIklIRFJcIiwgaWhkciwgZGF0YSwgb2Zmc2V0KTtcbiAgICAgIG9mZnNldCArPSBDSFVOS19XUkFQUEVSX1NJWkUgKyBpaGRyLmxlbmd0aDtcbiAgICAgIHdyaXRlUG5nQ2h1bmsoXCJJREFUQVwiLCBpZGF0LCBkYXRhLCBvZmZzZXQpO1xuICAgICAgb2Zmc2V0ICs9IENIVU5LX1dSQVBQRVJfU0laRSArIGlkYXQubGVuZ3RoO1xuICAgICAgd3JpdGVQbmdDaHVuayhcIklFTkRcIiwgbmV3IFVpbnQ4QXJyYXkoMCksIGRhdGEsIG9mZnNldCk7XG4gICAgICByZXR1cm4gKDAsIF91dGlsLmNyZWF0ZU9iamVjdFVSTCkoZGF0YSwgXCJpbWFnZS9wbmdcIiwgZm9yY2VEYXRhU2NoZW1hKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gY29udmVydEltZ0RhdGFUb1BuZyhpbWdEYXRhLCBmb3JjZURhdGFTY2hlbWEsIGlzTWFzaykge1xuICAgICAgY29uc3Qga2luZCA9IGltZ0RhdGEua2luZCA9PT0gdW5kZWZpbmVkID8gX3V0aWwuSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQIDogaW1nRGF0YS5raW5kO1xuICAgICAgcmV0dXJuIGVuY29kZShpbWdEYXRhLCBraW5kLCBmb3JjZURhdGFTY2hlbWEsIGlzTWFzayk7XG4gICAgfTtcbiAgfSgpO1xuXG4gIGNsYXNzIFNWR0V4dHJhU3RhdGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgdGhpcy5mb250U2l6ZVNjYWxlID0gMTtcbiAgICAgIHRoaXMuZm9udFdlaWdodCA9IFNWR19ERUZBVUxUUy5mb250V2VpZ2h0O1xuICAgICAgdGhpcy5mb250U2l6ZSA9IDA7XG4gICAgICB0aGlzLnRleHRNYXRyaXggPSBfdXRpbC5JREVOVElUWV9NQVRSSVg7XG4gICAgICB0aGlzLmZvbnRNYXRyaXggPSBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWDtcbiAgICAgIHRoaXMubGVhZGluZyA9IDA7XG4gICAgICB0aGlzLnRleHRSZW5kZXJpbmdNb2RlID0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTDtcbiAgICAgIHRoaXMudGV4dE1hdHJpeFNjYWxlID0gMTtcbiAgICAgIHRoaXMueCA9IDA7XG4gICAgICB0aGlzLnkgPSAwO1xuICAgICAgdGhpcy5saW5lWCA9IDA7XG4gICAgICB0aGlzLmxpbmVZID0gMDtcbiAgICAgIHRoaXMuY2hhclNwYWNpbmcgPSAwO1xuICAgICAgdGhpcy53b3JkU3BhY2luZyA9IDA7XG4gICAgICB0aGlzLnRleHRIU2NhbGUgPSAxO1xuICAgICAgdGhpcy50ZXh0UmlzZSA9IDA7XG4gICAgICB0aGlzLmZpbGxDb2xvciA9IFNWR19ERUZBVUxUUy5maWxsQ29sb3I7XG4gICAgICB0aGlzLnN0cm9rZUNvbG9yID0gXCIjMDAwMDAwXCI7XG4gICAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG4gICAgICB0aGlzLnN0cm9rZUFscGhhID0gMTtcbiAgICAgIHRoaXMubGluZVdpZHRoID0gMTtcbiAgICAgIHRoaXMubGluZUpvaW4gPSBcIlwiO1xuICAgICAgdGhpcy5saW5lQ2FwID0gXCJcIjtcbiAgICAgIHRoaXMubWl0ZXJMaW1pdCA9IDA7XG4gICAgICB0aGlzLmRhc2hBcnJheSA9IFtdO1xuICAgICAgdGhpcy5kYXNoUGhhc2UgPSAwO1xuICAgICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBbXTtcbiAgICAgIHRoaXMuYWN0aXZlQ2xpcFVybCA9IG51bGw7XG4gICAgICB0aGlzLmNsaXBHcm91cCA9IG51bGw7XG4gICAgICB0aGlzLm1hc2tJZCA9IFwiXCI7XG4gICAgfVxuXG4gICAgY2xvbmUoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICB9XG5cbiAgICBzZXRDdXJyZW50UG9pbnQoeCwgeSkge1xuICAgICAgdGhpcy54ID0geDtcbiAgICAgIHRoaXMueSA9IHk7XG4gICAgfVxuXG4gIH1cblxuICBmdW5jdGlvbiBvcExpc3RUb1RyZWUob3BMaXN0KSB7XG4gICAgbGV0IG9wVHJlZSA9IFtdO1xuICAgIGNvbnN0IHRtcCA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBvcExpc3RFbGVtZW50IG9mIG9wTGlzdCkge1xuICAgICAgaWYgKG9wTGlzdEVsZW1lbnQuZm4gPT09IFwic2F2ZVwiKSB7XG4gICAgICAgIG9wVHJlZS5wdXNoKHtcbiAgICAgICAgICBmbklkOiA5MixcbiAgICAgICAgICBmbjogXCJncm91cFwiLFxuICAgICAgICAgIGl0ZW1zOiBbXVxuICAgICAgICB9KTtcbiAgICAgICAgdG1wLnB1c2gob3BUcmVlKTtcbiAgICAgICAgb3BUcmVlID0gb3BUcmVlW29wVHJlZS5sZW5ndGggLSAxXS5pdGVtcztcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcExpc3RFbGVtZW50LmZuID09PSBcInJlc3RvcmVcIikge1xuICAgICAgICBvcFRyZWUgPSB0bXAucG9wKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcFRyZWUucHVzaChvcExpc3RFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3BUcmVlO1xuICB9XG5cbiAgZnVuY3Rpb24gcGYodmFsdWUpIHtcbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGNvbnN0IHMgPSB2YWx1ZS50b0ZpeGVkKDEwKTtcbiAgICBsZXQgaSA9IHMubGVuZ3RoIC0gMTtcblxuICAgIGlmIChzW2ldICE9PSBcIjBcIikge1xuICAgICAgcmV0dXJuIHM7XG4gICAgfVxuXG4gICAgZG8ge1xuICAgICAgaS0tO1xuICAgIH0gd2hpbGUgKHNbaV0gPT09IFwiMFwiKTtcblxuICAgIHJldHVybiBzLnN1YnN0cmluZygwLCBzW2ldID09PSBcIi5cIiA/IGkgOiBpICsgMSk7XG4gIH1cblxuICBmdW5jdGlvbiBwbShtKSB7XG4gICAgaWYgKG1bNF0gPT09IDAgJiYgbVs1XSA9PT0gMCkge1xuICAgICAgaWYgKG1bMV0gPT09IDAgJiYgbVsyXSA9PT0gMCkge1xuICAgICAgICBpZiAobVswXSA9PT0gMSAmJiBtWzNdID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYHNjYWxlKCR7cGYobVswXSl9ICR7cGYobVszXSl9KWA7XG4gICAgICB9XG5cbiAgICAgIGlmIChtWzBdID09PSBtWzNdICYmIG1bMV0gPT09IC1tWzJdKSB7XG4gICAgICAgIGNvbnN0IGEgPSBNYXRoLmFjb3MobVswXSkgKiAxODAgLyBNYXRoLlBJO1xuICAgICAgICByZXR1cm4gYHJvdGF0ZSgke3BmKGEpfSlgO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobVswXSA9PT0gMSAmJiBtWzFdID09PSAwICYmIG1bMl0gPT09IDAgJiYgbVszXSA9PT0gMSkge1xuICAgICAgICByZXR1cm4gYHRyYW5zbGF0ZSgke3BmKG1bNF0pfSAke3BmKG1bNV0pfSlgO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBgbWF0cml4KCR7cGYobVswXSl9ICR7cGYobVsxXSl9ICR7cGYobVsyXSl9ICR7cGYobVszXSl9ICR7cGYobVs0XSl9IGAgKyBgJHtwZihtWzVdKX0pYDtcbiAgfVxuXG4gIGxldCBjbGlwQ291bnQgPSAwO1xuICBsZXQgbWFza0NvdW50ID0gMDtcbiAgbGV0IHNoYWRpbmdDb3VudCA9IDA7XG4gIGV4cG9ydHMuU1ZHR3JhcGhpY3MgPSBTVkdHcmFwaGljcyA9IGNsYXNzIHtcbiAgICBjb25zdHJ1Y3Rvcihjb21tb25PYmpzLCBvYmpzLCBmb3JjZURhdGFTY2hlbWEgPSBmYWxzZSkge1xuICAgICAgdGhpcy5zdmdGYWN0b3J5ID0gbmV3IF9kaXNwbGF5X3V0aWxzLkRPTVNWR0ZhY3RvcnkoKTtcbiAgICAgIHRoaXMuY3VycmVudCA9IG5ldyBTVkdFeHRyYVN0YXRlKCk7XG4gICAgICB0aGlzLnRyYW5zZm9ybU1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWDtcbiAgICAgIHRoaXMudHJhbnNmb3JtU3RhY2sgPSBbXTtcbiAgICAgIHRoaXMuZXh0cmFTdGFjayA9IFtdO1xuICAgICAgdGhpcy5jb21tb25PYmpzID0gY29tbW9uT2JqcztcbiAgICAgIHRoaXMub2JqcyA9IG9ianM7XG4gICAgICB0aGlzLnBlbmRpbmdDbGlwID0gbnVsbDtcbiAgICAgIHRoaXMucGVuZGluZ0VPRmlsbCA9IGZhbHNlO1xuICAgICAgdGhpcy5lbWJlZEZvbnRzID0gZmFsc2U7XG4gICAgICB0aGlzLmVtYmVkZGVkRm9udHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgdGhpcy5jc3NTdHlsZSA9IG51bGw7XG4gICAgICB0aGlzLmZvcmNlRGF0YVNjaGVtYSA9ICEhZm9yY2VEYXRhU2NoZW1hO1xuICAgICAgdGhpcy5fb3BlcmF0b3JJZE1hcHBpbmcgPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBvcCBpbiBfdXRpbC5PUFMpIHtcbiAgICAgICAgdGhpcy5fb3BlcmF0b3JJZE1hcHBpbmdbX3V0aWwuT1BTW29wXV0gPSBvcDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzYXZlKCkge1xuICAgICAgdGhpcy50cmFuc2Zvcm1TdGFjay5wdXNoKHRoaXMudHJhbnNmb3JtTWF0cml4KTtcbiAgICAgIGNvbnN0IG9sZCA9IHRoaXMuY3VycmVudDtcbiAgICAgIHRoaXMuZXh0cmFTdGFjay5wdXNoKG9sZCk7XG4gICAgICB0aGlzLmN1cnJlbnQgPSBvbGQuY2xvbmUoKTtcbiAgICB9XG5cbiAgICByZXN0b3JlKCkge1xuICAgICAgdGhpcy50cmFuc2Zvcm1NYXRyaXggPSB0aGlzLnRyYW5zZm9ybVN0YWNrLnBvcCgpO1xuICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy5leHRyYVN0YWNrLnBvcCgpO1xuICAgICAgdGhpcy5wZW5kaW5nQ2xpcCA9IG51bGw7XG4gICAgICB0aGlzLnRncnAgPSBudWxsO1xuICAgIH1cblxuICAgIGdyb3VwKGl0ZW1zKSB7XG4gICAgICB0aGlzLnNhdmUoKTtcbiAgICAgIHRoaXMuZXhlY3V0ZU9wVHJlZShpdGVtcyk7XG4gICAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICBsb2FkRGVwZW5kZW5jaWVzKG9wZXJhdG9yTGlzdCkge1xuICAgICAgY29uc3QgZm5BcnJheSA9IG9wZXJhdG9yTGlzdC5mbkFycmF5O1xuICAgICAgY29uc3QgYXJnc0FycmF5ID0gb3BlcmF0b3JMaXN0LmFyZ3NBcnJheTtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZm5BcnJheS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGlmIChmbkFycmF5W2ldICE9PSBfdXRpbC5PUFMuZGVwZW5kZW5jeSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBvYmogb2YgYXJnc0FycmF5W2ldKSB7XG4gICAgICAgICAgY29uc3Qgb2Jqc1Bvb2wgPSBvYmouc3RhcnRzV2l0aChcImdfXCIpID8gdGhpcy5jb21tb25PYmpzIDogdGhpcy5vYmpzO1xuICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIG9ianNQb29sLmdldChvYmosIHJlc29sdmUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY3VycmVudC5kZXBlbmRlbmNpZXMucHVzaChwcm9taXNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5jdXJyZW50LmRlcGVuZGVuY2llcyk7XG4gICAgfVxuXG4gICAgdHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybU1hdHJpeCA9IFthLCBiLCBjLCBkLCBlLCBmXTtcbiAgICAgIHRoaXMudHJhbnNmb3JtTWF0cml4ID0gX3V0aWwuVXRpbC50cmFuc2Zvcm0odGhpcy50cmFuc2Zvcm1NYXRyaXgsIHRyYW5zZm9ybU1hdHJpeCk7XG4gICAgICB0aGlzLnRncnAgPSBudWxsO1xuICAgIH1cblxuICAgIGdldFNWRyhvcGVyYXRvckxpc3QsIHZpZXdwb3J0KSB7XG4gICAgICB0aGlzLnZpZXdwb3J0ID0gdmlld3BvcnQ7XG5cbiAgICAgIGNvbnN0IHN2Z0VsZW1lbnQgPSB0aGlzLl9pbml0aWFsaXplKHZpZXdwb3J0KTtcblxuICAgICAgcmV0dXJuIHRoaXMubG9hZERlcGVuZGVuY2llcyhvcGVyYXRvckxpc3QpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnRyYW5zZm9ybU1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWDtcbiAgICAgICAgdGhpcy5leGVjdXRlT3BUcmVlKHRoaXMuY29udmVydE9wTGlzdChvcGVyYXRvckxpc3QpKTtcbiAgICAgICAgcmV0dXJuIHN2Z0VsZW1lbnQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb252ZXJ0T3BMaXN0KG9wZXJhdG9yTGlzdCkge1xuICAgICAgY29uc3Qgb3BlcmF0b3JJZE1hcHBpbmcgPSB0aGlzLl9vcGVyYXRvcklkTWFwcGluZztcbiAgICAgIGNvbnN0IGFyZ3NBcnJheSA9IG9wZXJhdG9yTGlzdC5hcmdzQXJyYXk7XG4gICAgICBjb25zdCBmbkFycmF5ID0gb3BlcmF0b3JMaXN0LmZuQXJyYXk7XG4gICAgICBjb25zdCBvcExpc3QgPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZm5BcnJheS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGZuSWQgPSBmbkFycmF5W2ldO1xuICAgICAgICBvcExpc3QucHVzaCh7XG4gICAgICAgICAgZm5JZCxcbiAgICAgICAgICBmbjogb3BlcmF0b3JJZE1hcHBpbmdbZm5JZF0sXG4gICAgICAgICAgYXJnczogYXJnc0FycmF5W2ldXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3BMaXN0VG9UcmVlKG9wTGlzdCk7XG4gICAgfVxuXG4gICAgZXhlY3V0ZU9wVHJlZShvcFRyZWUpIHtcbiAgICAgIGZvciAoY29uc3Qgb3BUcmVlRWxlbWVudCBvZiBvcFRyZWUpIHtcbiAgICAgICAgY29uc3QgZm4gPSBvcFRyZWVFbGVtZW50LmZuO1xuICAgICAgICBjb25zdCBmbklkID0gb3BUcmVlRWxlbWVudC5mbklkO1xuICAgICAgICBjb25zdCBhcmdzID0gb3BUcmVlRWxlbWVudC5hcmdzO1xuXG4gICAgICAgIHN3aXRjaCAoZm5JZCB8IDApIHtcbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5iZWdpblRleHQ6XG4gICAgICAgICAgICB0aGlzLmJlZ2luVGV4dCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5kZXBlbmRlbmN5OlxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRMZWFkaW5nOlxuICAgICAgICAgICAgdGhpcy5zZXRMZWFkaW5nKGFyZ3MpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRMZWFkaW5nTW92ZVRleHQ6XG4gICAgICAgICAgICB0aGlzLnNldExlYWRpbmdNb3ZlVGV4dChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0Rm9udDpcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9udChhcmdzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2hvd1RleHQ6XG4gICAgICAgICAgICB0aGlzLnNob3dUZXh0KGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zaG93U3BhY2VkVGV4dDpcbiAgICAgICAgICAgIHRoaXMuc2hvd1RleHQoYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmVuZFRleHQ6XG4gICAgICAgICAgICB0aGlzLmVuZFRleHQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMubW92ZVRleHQ6XG4gICAgICAgICAgICB0aGlzLm1vdmVUZXh0KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRDaGFyU3BhY2luZzpcbiAgICAgICAgICAgIHRoaXMuc2V0Q2hhclNwYWNpbmcoYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFdvcmRTcGFjaW5nOlxuICAgICAgICAgICAgdGhpcy5zZXRXb3JkU3BhY2luZyhhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0SFNjYWxlOlxuICAgICAgICAgICAgdGhpcy5zZXRIU2NhbGUoYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFRleHRNYXRyaXg6XG4gICAgICAgICAgICB0aGlzLnNldFRleHRNYXRyaXgoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFRleHRSaXNlOlxuICAgICAgICAgICAgdGhpcy5zZXRUZXh0UmlzZShhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0VGV4dFJlbmRlcmluZ01vZGU6XG4gICAgICAgICAgICB0aGlzLnNldFRleHRSZW5kZXJpbmdNb2RlKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRMaW5lV2lkdGg6XG4gICAgICAgICAgICB0aGlzLnNldExpbmVXaWR0aChhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0TGluZUpvaW46XG4gICAgICAgICAgICB0aGlzLnNldExpbmVKb2luKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRMaW5lQ2FwOlxuICAgICAgICAgICAgdGhpcy5zZXRMaW5lQ2FwKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRNaXRlckxpbWl0OlxuICAgICAgICAgICAgdGhpcy5zZXRNaXRlckxpbWl0KGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGaWxsUkdCQ29sb3I6XG4gICAgICAgICAgICB0aGlzLnNldEZpbGxSR0JDb2xvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I6XG4gICAgICAgICAgICB0aGlzLnNldFN0cm9rZVJHQkNvbG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRTdHJva2VDb2xvck46XG4gICAgICAgICAgICB0aGlzLnNldFN0cm9rZUNvbG9yTihhcmdzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0RmlsbENvbG9yTjpcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsbENvbG9yTihhcmdzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2hhZGluZ0ZpbGw6XG4gICAgICAgICAgICB0aGlzLnNoYWRpbmdGaWxsKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXREYXNoOlxuICAgICAgICAgICAgdGhpcy5zZXREYXNoKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRSZW5kZXJpbmdJbnRlbnQ6XG4gICAgICAgICAgICB0aGlzLnNldFJlbmRlcmluZ0ludGVudChhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0RmxhdG5lc3M6XG4gICAgICAgICAgICB0aGlzLnNldEZsYXRuZXNzKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRHU3RhdGU6XG4gICAgICAgICAgICB0aGlzLnNldEdTdGF0ZShhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuZmlsbDpcbiAgICAgICAgICAgIHRoaXMuZmlsbCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5lb0ZpbGw6XG4gICAgICAgICAgICB0aGlzLmVvRmlsbCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zdHJva2U6XG4gICAgICAgICAgICB0aGlzLnN0cm9rZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5maWxsU3Ryb2tlOlxuICAgICAgICAgICAgdGhpcy5maWxsU3Ryb2tlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmVvRmlsbFN0cm9rZTpcbiAgICAgICAgICAgIHRoaXMuZW9GaWxsU3Ryb2tlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsaXA6XG4gICAgICAgICAgICB0aGlzLmNsaXAoXCJub256ZXJvXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5lb0NsaXA6XG4gICAgICAgICAgICB0aGlzLmNsaXAoXCJldmVub2RkXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5wYWludFNvbGlkQ29sb3JJbWFnZU1hc2s6XG4gICAgICAgICAgICB0aGlzLnBhaW50U29saWRDb2xvckltYWdlTWFzaygpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5wYWludEltYWdlWE9iamVjdDpcbiAgICAgICAgICAgIHRoaXMucGFpbnRJbWFnZVhPYmplY3QoYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OlxuICAgICAgICAgICAgdGhpcy5wYWludElubGluZUltYWdlWE9iamVjdChhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0OlxuICAgICAgICAgICAgdGhpcy5wYWludEltYWdlTWFza1hPYmplY3QoYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50Rm9ybVhPYmplY3RCZWdpbjpcbiAgICAgICAgICAgIHRoaXMucGFpbnRGb3JtWE9iamVjdEJlZ2luKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5wYWludEZvcm1YT2JqZWN0RW5kOlxuICAgICAgICAgICAgdGhpcy5wYWludEZvcm1YT2JqZWN0RW5kKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsb3NlUGF0aDpcbiAgICAgICAgICAgIHRoaXMuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsb3NlU3Ryb2tlOlxuICAgICAgICAgICAgdGhpcy5jbG9zZVN0cm9rZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jbG9zZUZpbGxTdHJva2U6XG4gICAgICAgICAgICB0aGlzLmNsb3NlRmlsbFN0cm9rZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jbG9zZUVPRmlsbFN0cm9rZTpcbiAgICAgICAgICAgIHRoaXMuY2xvc2VFT0ZpbGxTdHJva2UoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMubmV4dExpbmU6XG4gICAgICAgICAgICB0aGlzLm5leHRMaW5lKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnRyYW5zZm9ybTpcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jb25zdHJ1Y3RQYXRoOlxuICAgICAgICAgICAgdGhpcy5jb25zdHJ1Y3RQYXRoKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5lbmRQYXRoOlxuICAgICAgICAgICAgdGhpcy5lbmRQYXRoKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgOTI6XG4gICAgICAgICAgICB0aGlzLmdyb3VwKG9wVHJlZUVsZW1lbnQuaXRlbXMpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBVbmltcGxlbWVudGVkIG9wZXJhdG9yICR7Zm59YCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHNldFdvcmRTcGFjaW5nKHdvcmRTcGFjaW5nKSB7XG4gICAgICB0aGlzLmN1cnJlbnQud29yZFNwYWNpbmcgPSB3b3JkU3BhY2luZztcbiAgICB9XG5cbiAgICBzZXRDaGFyU3BhY2luZyhjaGFyU3BhY2luZykge1xuICAgICAgdGhpcy5jdXJyZW50LmNoYXJTcGFjaW5nID0gY2hhclNwYWNpbmc7XG4gICAgfVxuXG4gICAgbmV4dExpbmUoKSB7XG4gICAgICB0aGlzLm1vdmVUZXh0KDAsIHRoaXMuY3VycmVudC5sZWFkaW5nKTtcbiAgICB9XG5cbiAgICBzZXRUZXh0TWF0cml4KGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICBjdXJyZW50LnRleHRNYXRyaXggPSBjdXJyZW50LmxpbmVNYXRyaXggPSBbYSwgYiwgYywgZCwgZSwgZl07XG4gICAgICBjdXJyZW50LnRleHRNYXRyaXhTY2FsZSA9IE1hdGguaHlwb3QoYSwgYik7XG4gICAgICBjdXJyZW50LnggPSBjdXJyZW50LmxpbmVYID0gMDtcbiAgICAgIGN1cnJlbnQueSA9IGN1cnJlbnQubGluZVkgPSAwO1xuICAgICAgY3VycmVudC54Y29vcmRzID0gW107XG4gICAgICBjdXJyZW50Lnljb29yZHMgPSBbXTtcbiAgICAgIGN1cnJlbnQudHNwYW4gPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2Zzp0c3BhblwiKTtcbiAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmb250LWZhbWlseVwiLCBjdXJyZW50LmZvbnRGYW1pbHkpO1xuICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZvbnQtc2l6ZVwiLCBgJHtwZihjdXJyZW50LmZvbnRTaXplKX1weGApO1xuICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInlcIiwgcGYoLWN1cnJlbnQueSkpO1xuICAgICAgY3VycmVudC50eHRFbGVtZW50ID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6dGV4dFwiKTtcbiAgICAgIGN1cnJlbnQudHh0RWxlbWVudC5hcHBlbmRDaGlsZChjdXJyZW50LnRzcGFuKTtcbiAgICB9XG5cbiAgICBiZWdpblRleHQoKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICAgICAgY3VycmVudC54ID0gY3VycmVudC5saW5lWCA9IDA7XG4gICAgICBjdXJyZW50LnkgPSBjdXJyZW50LmxpbmVZID0gMDtcbiAgICAgIGN1cnJlbnQudGV4dE1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWDtcbiAgICAgIGN1cnJlbnQubGluZU1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWDtcbiAgICAgIGN1cnJlbnQudGV4dE1hdHJpeFNjYWxlID0gMTtcbiAgICAgIGN1cnJlbnQudHNwYW4gPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2Zzp0c3BhblwiKTtcbiAgICAgIGN1cnJlbnQudHh0RWxlbWVudCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnRleHRcIik7XG4gICAgICBjdXJyZW50LnR4dGdycCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOmdcIik7XG4gICAgICBjdXJyZW50Lnhjb29yZHMgPSBbXTtcbiAgICAgIGN1cnJlbnQueWNvb3JkcyA9IFtdO1xuICAgIH1cblxuICAgIG1vdmVUZXh0KHgsIHkpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICBjdXJyZW50LnggPSBjdXJyZW50LmxpbmVYICs9IHg7XG4gICAgICBjdXJyZW50LnkgPSBjdXJyZW50LmxpbmVZICs9IHk7XG4gICAgICBjdXJyZW50Lnhjb29yZHMgPSBbXTtcbiAgICAgIGN1cnJlbnQueWNvb3JkcyA9IFtdO1xuICAgICAgY3VycmVudC50c3BhbiA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnRzcGFuXCIpO1xuICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZvbnQtZmFtaWx5XCIsIGN1cnJlbnQuZm9udEZhbWlseSk7XG4gICAgICBjdXJyZW50LnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZm9udC1zaXplXCIsIGAke3BmKGN1cnJlbnQuZm9udFNpemUpfXB4YCk7XG4gICAgICBjdXJyZW50LnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieVwiLCBwZigtY3VycmVudC55KSk7XG4gICAgfVxuXG4gICAgc2hvd1RleHQoZ2x5cGhzKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICAgICAgY29uc3QgZm9udCA9IGN1cnJlbnQuZm9udDtcbiAgICAgIGNvbnN0IGZvbnRTaXplID0gY3VycmVudC5mb250U2l6ZTtcblxuICAgICAgaWYgKGZvbnRTaXplID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9udFNpemVTY2FsZSA9IGN1cnJlbnQuZm9udFNpemVTY2FsZTtcbiAgICAgIGNvbnN0IGNoYXJTcGFjaW5nID0gY3VycmVudC5jaGFyU3BhY2luZztcbiAgICAgIGNvbnN0IHdvcmRTcGFjaW5nID0gY3VycmVudC53b3JkU3BhY2luZztcbiAgICAgIGNvbnN0IGZvbnREaXJlY3Rpb24gPSBjdXJyZW50LmZvbnREaXJlY3Rpb247XG4gICAgICBjb25zdCB0ZXh0SFNjYWxlID0gY3VycmVudC50ZXh0SFNjYWxlICogZm9udERpcmVjdGlvbjtcbiAgICAgIGNvbnN0IHZlcnRpY2FsID0gZm9udC52ZXJ0aWNhbDtcbiAgICAgIGNvbnN0IHNwYWNpbmdEaXIgPSB2ZXJ0aWNhbCA/IDEgOiAtMTtcbiAgICAgIGNvbnN0IGRlZmF1bHRWTWV0cmljcyA9IGZvbnQuZGVmYXVsdFZNZXRyaWNzO1xuICAgICAgY29uc3Qgd2lkdGhBZHZhbmNlU2NhbGUgPSBmb250U2l6ZSAqIGN1cnJlbnQuZm9udE1hdHJpeFswXTtcbiAgICAgIGxldCB4ID0gMDtcblxuICAgICAgZm9yIChjb25zdCBnbHlwaCBvZiBnbHlwaHMpIHtcbiAgICAgICAgaWYgKGdseXBoID09PSBudWxsKSB7XG4gICAgICAgICAgeCArPSBmb250RGlyZWN0aW9uICogd29yZFNwYWNpbmc7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAoKDAsIF91dGlsLmlzTnVtKShnbHlwaCkpIHtcbiAgICAgICAgICB4ICs9IHNwYWNpbmdEaXIgKiBnbHlwaCAqIGZvbnRTaXplIC8gMTAwMDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNwYWNpbmcgPSAoZ2x5cGguaXNTcGFjZSA/IHdvcmRTcGFjaW5nIDogMCkgKyBjaGFyU3BhY2luZztcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyID0gZ2x5cGguZm9udENoYXI7XG4gICAgICAgIGxldCBzY2FsZWRYLCBzY2FsZWRZO1xuICAgICAgICBsZXQgd2lkdGggPSBnbHlwaC53aWR0aDtcblxuICAgICAgICBpZiAodmVydGljYWwpIHtcbiAgICAgICAgICBsZXQgdng7XG4gICAgICAgICAgY29uc3Qgdm1ldHJpYyA9IGdseXBoLnZtZXRyaWMgfHwgZGVmYXVsdFZNZXRyaWNzO1xuICAgICAgICAgIHZ4ID0gZ2x5cGgudm1ldHJpYyA/IHZtZXRyaWNbMV0gOiB3aWR0aCAqIDAuNTtcbiAgICAgICAgICB2eCA9IC12eCAqIHdpZHRoQWR2YW5jZVNjYWxlO1xuICAgICAgICAgIGNvbnN0IHZ5ID0gdm1ldHJpY1syXSAqIHdpZHRoQWR2YW5jZVNjYWxlO1xuICAgICAgICAgIHdpZHRoID0gdm1ldHJpYyA/IC12bWV0cmljWzBdIDogd2lkdGg7XG4gICAgICAgICAgc2NhbGVkWCA9IHZ4IC8gZm9udFNpemVTY2FsZTtcbiAgICAgICAgICBzY2FsZWRZID0gKHggKyB2eSkgLyBmb250U2l6ZVNjYWxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjYWxlZFggPSB4IC8gZm9udFNpemVTY2FsZTtcbiAgICAgICAgICBzY2FsZWRZID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChnbHlwaC5pc0luRm9udCB8fCBmb250Lm1pc3NpbmdGaWxlKSB7XG4gICAgICAgICAgY3VycmVudC54Y29vcmRzLnB1c2goY3VycmVudC54ICsgc2NhbGVkWCk7XG5cbiAgICAgICAgICBpZiAodmVydGljYWwpIHtcbiAgICAgICAgICAgIGN1cnJlbnQueWNvb3Jkcy5wdXNoKC1jdXJyZW50LnkgKyBzY2FsZWRZKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50LnRzcGFuLnRleHRDb250ZW50ICs9IGNoYXJhY3RlcjtcbiAgICAgICAgfSBlbHNlIHt9XG5cbiAgICAgICAgbGV0IGNoYXJXaWR0aDtcblxuICAgICAgICBpZiAodmVydGljYWwpIHtcbiAgICAgICAgICBjaGFyV2lkdGggPSB3aWR0aCAqIHdpZHRoQWR2YW5jZVNjYWxlIC0gc3BhY2luZyAqIGZvbnREaXJlY3Rpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2hhcldpZHRoID0gd2lkdGggKiB3aWR0aEFkdmFuY2VTY2FsZSArIHNwYWNpbmcgKiBmb250RGlyZWN0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgeCArPSBjaGFyV2lkdGg7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ4XCIsIGN1cnJlbnQueGNvb3Jkcy5tYXAocGYpLmpvaW4oXCIgXCIpKTtcblxuICAgICAgaWYgKHZlcnRpY2FsKSB7XG4gICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIGN1cnJlbnQueWNvb3Jkcy5tYXAocGYpLmpvaW4oXCIgXCIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIHBmKC1jdXJyZW50LnkpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZlcnRpY2FsKSB7XG4gICAgICAgIGN1cnJlbnQueSAtPSB4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudC54ICs9IHggKiB0ZXh0SFNjYWxlO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50LnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZm9udC1mYW1pbHlcIiwgY3VycmVudC5mb250RmFtaWx5KTtcbiAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmb250LXNpemVcIiwgYCR7cGYoY3VycmVudC5mb250U2l6ZSl9cHhgKTtcblxuICAgICAgaWYgKGN1cnJlbnQuZm9udFN0eWxlICE9PSBTVkdfREVGQVVMVFMuZm9udFN0eWxlKSB7XG4gICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmb250LXN0eWxlXCIsIGN1cnJlbnQuZm9udFN0eWxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGN1cnJlbnQuZm9udFdlaWdodCAhPT0gU1ZHX0RFRkFVTFRTLmZvbnRXZWlnaHQpIHtcbiAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZvbnQtd2VpZ2h0XCIsIGN1cnJlbnQuZm9udFdlaWdodCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGxTdHJva2VNb2RlID0gY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSAmIF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFX01BU0s7XG5cbiAgICAgIGlmIChmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTCB8fCBmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0UpIHtcbiAgICAgICAgaWYgKGN1cnJlbnQuZmlsbENvbG9yICE9PSBTVkdfREVGQVVMVFMuZmlsbENvbG9yKSB7XG4gICAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZpbGxcIiwgY3VycmVudC5maWxsQ29sb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnQuZmlsbEFscGhhIDwgMSkge1xuICAgICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsLW9wYWNpdHlcIiwgY3VycmVudC5maWxsQWxwaGEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkFERF9UT19QQVRIKSB7XG4gICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyZW50LnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbFwiLCBcIm5vbmVcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFIHx8IGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRSkge1xuICAgICAgICBjb25zdCBsaW5lV2lkdGhTY2FsZSA9IDEgLyAoY3VycmVudC50ZXh0TWF0cml4U2NhbGUgfHwgMSk7XG5cbiAgICAgICAgdGhpcy5fc2V0U3Ryb2tlQXR0cmlidXRlcyhjdXJyZW50LnRzcGFuLCBsaW5lV2lkdGhTY2FsZSk7XG4gICAgICB9XG5cbiAgICAgIGxldCB0ZXh0TWF0cml4ID0gY3VycmVudC50ZXh0TWF0cml4O1xuXG4gICAgICBpZiAoY3VycmVudC50ZXh0UmlzZSAhPT0gMCkge1xuICAgICAgICB0ZXh0TWF0cml4ID0gdGV4dE1hdHJpeC5zbGljZSgpO1xuICAgICAgICB0ZXh0TWF0cml4WzVdICs9IGN1cnJlbnQudGV4dFJpc2U7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnQudHh0RWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInRyYW5zZm9ybVwiLCBgJHtwbSh0ZXh0TWF0cml4KX0gc2NhbGUoJHtwZih0ZXh0SFNjYWxlKX0sIC0xKWApO1xuICAgICAgY3VycmVudC50eHRFbGVtZW50LnNldEF0dHJpYnV0ZU5TKFhNTF9OUywgXCJ4bWw6c3BhY2VcIiwgXCJwcmVzZXJ2ZVwiKTtcbiAgICAgIGN1cnJlbnQudHh0RWxlbWVudC5hcHBlbmRDaGlsZChjdXJyZW50LnRzcGFuKTtcbiAgICAgIGN1cnJlbnQudHh0Z3JwLmFwcGVuZENoaWxkKGN1cnJlbnQudHh0RWxlbWVudCk7XG5cbiAgICAgIHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kQ2hpbGQoY3VycmVudC50eHRFbGVtZW50KTtcbiAgICB9XG5cbiAgICBzZXRMZWFkaW5nTW92ZVRleHQoeCwgeSkge1xuICAgICAgdGhpcy5zZXRMZWFkaW5nKC15KTtcbiAgICAgIHRoaXMubW92ZVRleHQoeCwgeSk7XG4gICAgfVxuXG4gICAgYWRkRm9udFN0eWxlKGZvbnRPYmopIHtcbiAgICAgIGlmICghZm9udE9iai5kYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFkZEZvbnRTdHlsZTogTm8gZm9udCBkYXRhIGF2YWlsYWJsZSwgXCIgKyAnZW5zdXJlIHRoYXQgdGhlIFwiZm9udEV4dHJhUHJvcGVydGllc1wiIEFQSSBwYXJhbWV0ZXIgaXMgc2V0LicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuY3NzU3R5bGUpIHtcbiAgICAgICAgdGhpcy5jc3NTdHlsZSA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnN0eWxlXCIpO1xuICAgICAgICB0aGlzLmNzc1N0eWxlLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwidHlwZVwiLCBcInRleHQvY3NzXCIpO1xuICAgICAgICB0aGlzLmRlZnMuYXBwZW5kQ2hpbGQodGhpcy5jc3NTdHlsZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVybCA9ICgwLCBfdXRpbC5jcmVhdGVPYmplY3RVUkwpKGZvbnRPYmouZGF0YSwgZm9udE9iai5taW1ldHlwZSwgdGhpcy5mb3JjZURhdGFTY2hlbWEpO1xuICAgICAgdGhpcy5jc3NTdHlsZS50ZXh0Q29udGVudCArPSBgQGZvbnQtZmFjZSB7IGZvbnQtZmFtaWx5OiBcIiR7Zm9udE9iai5sb2FkZWROYW1lfVwiO2AgKyBgIHNyYzogdXJsKCR7dXJsfSk7IH1cXG5gO1xuICAgIH1cblxuICAgIHNldEZvbnQoZGV0YWlscykge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgIGNvbnN0IGZvbnRPYmogPSB0aGlzLmNvbW1vbk9ianMuZ2V0KGRldGFpbHNbMF0pO1xuICAgICAgbGV0IHNpemUgPSBkZXRhaWxzWzFdO1xuICAgICAgY3VycmVudC5mb250ID0gZm9udE9iajtcblxuICAgICAgaWYgKHRoaXMuZW1iZWRGb250cyAmJiAhZm9udE9iai5taXNzaW5nRmlsZSAmJiAhdGhpcy5lbWJlZGRlZEZvbnRzW2ZvbnRPYmoubG9hZGVkTmFtZV0pIHtcbiAgICAgICAgdGhpcy5hZGRGb250U3R5bGUoZm9udE9iaik7XG4gICAgICAgIHRoaXMuZW1iZWRkZWRGb250c1tmb250T2JqLmxvYWRlZE5hbWVdID0gZm9udE9iajtcbiAgICAgIH1cblxuICAgICAgY3VycmVudC5mb250TWF0cml4ID0gZm9udE9iai5mb250TWF0cml4IHx8IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYO1xuICAgICAgbGV0IGJvbGQgPSBcIm5vcm1hbFwiO1xuXG4gICAgICBpZiAoZm9udE9iai5ibGFjaykge1xuICAgICAgICBib2xkID0gXCI5MDBcIjtcbiAgICAgIH0gZWxzZSBpZiAoZm9udE9iai5ib2xkKSB7XG4gICAgICAgIGJvbGQgPSBcImJvbGRcIjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXRhbGljID0gZm9udE9iai5pdGFsaWMgPyBcIml0YWxpY1wiIDogXCJub3JtYWxcIjtcblxuICAgICAgaWYgKHNpemUgPCAwKSB7XG4gICAgICAgIHNpemUgPSAtc2l6ZTtcbiAgICAgICAgY3VycmVudC5mb250RGlyZWN0aW9uID0gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyZW50LmZvbnREaXJlY3Rpb24gPSAxO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50LmZvbnRTaXplID0gc2l6ZTtcbiAgICAgIGN1cnJlbnQuZm9udEZhbWlseSA9IGZvbnRPYmoubG9hZGVkTmFtZTtcbiAgICAgIGN1cnJlbnQuZm9udFdlaWdodCA9IGJvbGQ7XG4gICAgICBjdXJyZW50LmZvbnRTdHlsZSA9IGl0YWxpYztcbiAgICAgIGN1cnJlbnQudHNwYW4gPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2Zzp0c3BhblwiKTtcbiAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIHBmKC1jdXJyZW50LnkpKTtcbiAgICAgIGN1cnJlbnQueGNvb3JkcyA9IFtdO1xuICAgICAgY3VycmVudC55Y29vcmRzID0gW107XG4gICAgfVxuXG4gICAgZW5kVGV4dCgpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG5cbiAgICAgIGlmIChjdXJyZW50LnRleHRSZW5kZXJpbmdNb2RlICYgX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuQUREX1RPX1BBVEhfRkxBRyAmJiBjdXJyZW50LnR4dEVsZW1lbnQ/Lmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICBjdXJyZW50LmVsZW1lbnQgPSBjdXJyZW50LnR4dEVsZW1lbnQ7XG4gICAgICAgIHRoaXMuY2xpcChcIm5vbnplcm9cIik7XG4gICAgICAgIHRoaXMuZW5kUGF0aCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldExpbmVXaWR0aCh3aWR0aCkge1xuICAgICAgaWYgKHdpZHRoID4gMCkge1xuICAgICAgICB0aGlzLmN1cnJlbnQubGluZVdpZHRoID0gd2lkdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0TGluZUNhcChzdHlsZSkge1xuICAgICAgdGhpcy5jdXJyZW50LmxpbmVDYXAgPSBMSU5FX0NBUF9TVFlMRVNbc3R5bGVdO1xuICAgIH1cblxuICAgIHNldExpbmVKb2luKHN0eWxlKSB7XG4gICAgICB0aGlzLmN1cnJlbnQubGluZUpvaW4gPSBMSU5FX0pPSU5fU1RZTEVTW3N0eWxlXTtcbiAgICB9XG5cbiAgICBzZXRNaXRlckxpbWl0KGxpbWl0KSB7XG4gICAgICB0aGlzLmN1cnJlbnQubWl0ZXJMaW1pdCA9IGxpbWl0O1xuICAgIH1cblxuICAgIHNldFN0cm9rZUFscGhhKHN0cm9rZUFscGhhKSB7XG4gICAgICB0aGlzLmN1cnJlbnQuc3Ryb2tlQWxwaGEgPSBzdHJva2VBbHBoYTtcbiAgICB9XG5cbiAgICBzZXRTdHJva2VSR0JDb2xvcihyLCBnLCBiKSB7XG4gICAgICB0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3IgPSBfdXRpbC5VdGlsLm1ha2VIZXhDb2xvcihyLCBnLCBiKTtcbiAgICB9XG5cbiAgICBzZXRGaWxsQWxwaGEoZmlsbEFscGhhKSB7XG4gICAgICB0aGlzLmN1cnJlbnQuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuICAgIH1cblxuICAgIHNldEZpbGxSR0JDb2xvcihyLCBnLCBiKSB7XG4gICAgICB0aGlzLmN1cnJlbnQuZmlsbENvbG9yID0gX3V0aWwuVXRpbC5tYWtlSGV4Q29sb3IociwgZywgYik7XG4gICAgICB0aGlzLmN1cnJlbnQudHNwYW4gPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2Zzp0c3BhblwiKTtcbiAgICAgIHRoaXMuY3VycmVudC54Y29vcmRzID0gW107XG4gICAgICB0aGlzLmN1cnJlbnQueWNvb3JkcyA9IFtdO1xuICAgIH1cblxuICAgIHNldFN0cm9rZUNvbG9yTihhcmdzKSB7XG4gICAgICB0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3IgPSB0aGlzLl9tYWtlQ29sb3JOX1BhdHRlcm4oYXJncyk7XG4gICAgfVxuXG4gICAgc2V0RmlsbENvbG9yTihhcmdzKSB7XG4gICAgICB0aGlzLmN1cnJlbnQuZmlsbENvbG9yID0gdGhpcy5fbWFrZUNvbG9yTl9QYXR0ZXJuKGFyZ3MpO1xuICAgIH1cblxuICAgIHNoYWRpbmdGaWxsKGFyZ3MpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy52aWV3cG9ydC53aWR0aDtcbiAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMudmlld3BvcnQuaGVpZ2h0O1xuXG4gICAgICBjb25zdCBpbnYgPSBfdXRpbC5VdGlsLmludmVyc2VUcmFuc2Zvcm0odGhpcy50cmFuc2Zvcm1NYXRyaXgpO1xuXG4gICAgICBjb25zdCBibCA9IF91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsIDBdLCBpbnYpO1xuXG4gICAgICBjb25zdCBiciA9IF91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsIGhlaWdodF0sIGludik7XG5cbiAgICAgIGNvbnN0IHVsID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbd2lkdGgsIDBdLCBpbnYpO1xuXG4gICAgICBjb25zdCB1ciA9IF91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3dpZHRoLCBoZWlnaHRdLCBpbnYpO1xuXG4gICAgICBjb25zdCB4MCA9IE1hdGgubWluKGJsWzBdLCBiclswXSwgdWxbMF0sIHVyWzBdKTtcbiAgICAgIGNvbnN0IHkwID0gTWF0aC5taW4oYmxbMV0sIGJyWzFdLCB1bFsxXSwgdXJbMV0pO1xuICAgICAgY29uc3QgeDEgPSBNYXRoLm1heChibFswXSwgYnJbMF0sIHVsWzBdLCB1clswXSk7XG4gICAgICBjb25zdCB5MSA9IE1hdGgubWF4KGJsWzFdLCBiclsxXSwgdWxbMV0sIHVyWzFdKTtcbiAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2ZzpyZWN0XCIpO1xuICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInhcIiwgeDApO1xuICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInlcIiwgeTApO1xuICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcIndpZHRoXCIsIHgxIC0geDApO1xuICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImhlaWdodFwiLCB5MSAtIHkwKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsXCIsIHRoaXMuX21ha2VTaGFkaW5nUGF0dGVybihhcmdzKSk7XG5cbiAgICAgIGlmICh0aGlzLmN1cnJlbnQuZmlsbEFscGhhIDwgMSkge1xuICAgICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbC1vcGFjaXR5XCIsIHRoaXMuY3VycmVudC5maWxsQWxwaGEpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZENoaWxkKHJlY3QpO1xuICAgIH1cblxuICAgIF9tYWtlQ29sb3JOX1BhdHRlcm4oYXJncykge1xuICAgICAgaWYgKGFyZ3NbMF0gPT09IFwiVGlsaW5nUGF0dGVyblwiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYWtlVGlsaW5nUGF0dGVybihhcmdzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX21ha2VTaGFkaW5nUGF0dGVybihhcmdzKTtcbiAgICB9XG5cbiAgICBfbWFrZVRpbGluZ1BhdHRlcm4oYXJncykge1xuICAgICAgY29uc3QgY29sb3IgPSBhcmdzWzFdO1xuICAgICAgY29uc3Qgb3BlcmF0b3JMaXN0ID0gYXJnc1syXTtcbiAgICAgIGNvbnN0IG1hdHJpeCA9IGFyZ3NbM10gfHwgX3V0aWwuSURFTlRJVFlfTUFUUklYO1xuICAgICAgY29uc3QgW3gwLCB5MCwgeDEsIHkxXSA9IGFyZ3NbNF07XG4gICAgICBjb25zdCB4c3RlcCA9IGFyZ3NbNV07XG4gICAgICBjb25zdCB5c3RlcCA9IGFyZ3NbNl07XG4gICAgICBjb25zdCBwYWludFR5cGUgPSBhcmdzWzddO1xuICAgICAgY29uc3QgdGlsaW5nSWQgPSBgc2hhZGluZyR7c2hhZGluZ0NvdW50Kyt9YDtcblxuICAgICAgY29uc3QgW3R4MCwgdHkwLCB0eDEsIHR5MV0gPSBfdXRpbC5VdGlsLm5vcm1hbGl6ZVJlY3QoWy4uLl91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3gwLCB5MF0sIG1hdHJpeCksIC4uLl91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3gxLCB5MV0sIG1hdHJpeCldKTtcblxuICAgICAgY29uc3QgW3hzY2FsZSwgeXNjYWxlXSA9IF91dGlsLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUobWF0cml4KTtcblxuICAgICAgY29uc3QgdHhzdGVwID0geHN0ZXAgKiB4c2NhbGU7XG4gICAgICBjb25zdCB0eXN0ZXAgPSB5c3RlcCAqIHlzY2FsZTtcbiAgICAgIGNvbnN0IHRpbGluZyA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnBhdHRlcm5cIik7XG4gICAgICB0aWxpbmcuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJpZFwiLCB0aWxpbmdJZCk7XG4gICAgICB0aWxpbmcuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJwYXR0ZXJuVW5pdHNcIiwgXCJ1c2VyU3BhY2VPblVzZVwiKTtcbiAgICAgIHRpbGluZy5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcIndpZHRoXCIsIHR4c3RlcCk7XG4gICAgICB0aWxpbmcuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJoZWlnaHRcIiwgdHlzdGVwKTtcbiAgICAgIHRpbGluZy5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInhcIiwgYCR7dHgwfWApO1xuICAgICAgdGlsaW5nLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieVwiLCBgJHt0eTB9YCk7XG4gICAgICBjb25zdCBzdmcgPSB0aGlzLnN2ZztcbiAgICAgIGNvbnN0IHRyYW5zZm9ybU1hdHJpeCA9IHRoaXMudHJhbnNmb3JtTWF0cml4O1xuICAgICAgY29uc3QgZmlsbENvbG9yID0gdGhpcy5jdXJyZW50LmZpbGxDb2xvcjtcbiAgICAgIGNvbnN0IHN0cm9rZUNvbG9yID0gdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yO1xuICAgICAgY29uc3QgYmJveCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUodHgxIC0gdHgwLCB0eTEgLSB0eTApO1xuICAgICAgdGhpcy5zdmcgPSBiYm94O1xuICAgICAgdGhpcy50cmFuc2Zvcm1NYXRyaXggPSBtYXRyaXg7XG5cbiAgICAgIGlmIChwYWludFR5cGUgPT09IDIpIHtcbiAgICAgICAgY29uc3QgY3NzQ29sb3IgPSBfdXRpbC5VdGlsLm1ha2VIZXhDb2xvciguLi5jb2xvcik7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50LmZpbGxDb2xvciA9IGNzc0NvbG9yO1xuICAgICAgICB0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3IgPSBjc3NDb2xvcjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5leGVjdXRlT3BUcmVlKHRoaXMuY29udmVydE9wTGlzdChvcGVyYXRvckxpc3QpKTtcbiAgICAgIHRoaXMuc3ZnID0gc3ZnO1xuICAgICAgdGhpcy50cmFuc2Zvcm1NYXRyaXggPSB0cmFuc2Zvcm1NYXRyaXg7XG4gICAgICB0aGlzLmN1cnJlbnQuZmlsbENvbG9yID0gZmlsbENvbG9yO1xuICAgICAgdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yID0gc3Ryb2tlQ29sb3I7XG4gICAgICB0aWxpbmcuYXBwZW5kQ2hpbGQoYmJveC5jaGlsZE5vZGVzWzBdKTtcbiAgICAgIHRoaXMuZGVmcy5hcHBlbmRDaGlsZCh0aWxpbmcpO1xuICAgICAgcmV0dXJuIGB1cmwoIyR7dGlsaW5nSWR9KWA7XG4gICAgfVxuXG4gICAgX21ha2VTaGFkaW5nUGF0dGVybihhcmdzKSB7XG4gICAgICBpZiAodHlwZW9mIGFyZ3MgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgYXJncyA9IHRoaXMub2Jqcy5nZXQoYXJncyk7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoYXJnc1swXSkge1xuICAgICAgICBjYXNlIFwiUmFkaWFsQXhpYWxcIjpcbiAgICAgICAgICBjb25zdCBzaGFkaW5nSWQgPSBgc2hhZGluZyR7c2hhZGluZ0NvdW50Kyt9YDtcbiAgICAgICAgICBjb25zdCBjb2xvclN0b3BzID0gYXJnc1szXTtcbiAgICAgICAgICBsZXQgZ3JhZGllbnQ7XG5cbiAgICAgICAgICBzd2l0Y2ggKGFyZ3NbMV0pIHtcbiAgICAgICAgICAgIGNhc2UgXCJheGlhbFwiOlxuICAgICAgICAgICAgICBjb25zdCBwb2ludDAgPSBhcmdzWzRdO1xuICAgICAgICAgICAgICBjb25zdCBwb2ludDEgPSBhcmdzWzVdO1xuICAgICAgICAgICAgICBncmFkaWVudCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOmxpbmVhckdyYWRpZW50XCIpO1xuICAgICAgICAgICAgICBncmFkaWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImlkXCIsIHNoYWRpbmdJZCk7XG4gICAgICAgICAgICAgIGdyYWRpZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZ3JhZGllbnRVbml0c1wiLCBcInVzZXJTcGFjZU9uVXNlXCIpO1xuICAgICAgICAgICAgICBncmFkaWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcIngxXCIsIHBvaW50MFswXSk7XG4gICAgICAgICAgICAgIGdyYWRpZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieTFcIiwgcG9pbnQwWzFdKTtcbiAgICAgICAgICAgICAgZ3JhZGllbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ4MlwiLCBwb2ludDFbMF0pO1xuICAgICAgICAgICAgICBncmFkaWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInkyXCIsIHBvaW50MVsxXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFwicmFkaWFsXCI6XG4gICAgICAgICAgICAgIGNvbnN0IGZvY2FsUG9pbnQgPSBhcmdzWzRdO1xuICAgICAgICAgICAgICBjb25zdCBjaXJjbGVQb2ludCA9IGFyZ3NbNV07XG4gICAgICAgICAgICAgIGNvbnN0IGZvY2FsUmFkaXVzID0gYXJnc1s2XTtcbiAgICAgICAgICAgICAgY29uc3QgY2lyY2xlUmFkaXVzID0gYXJnc1s3XTtcbiAgICAgICAgICAgICAgZ3JhZGllbnQgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2ZzpyYWRpYWxHcmFkaWVudFwiKTtcbiAgICAgICAgICAgICAgZ3JhZGllbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJpZFwiLCBzaGFkaW5nSWQpO1xuICAgICAgICAgICAgICBncmFkaWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImdyYWRpZW50VW5pdHNcIiwgXCJ1c2VyU3BhY2VPblVzZVwiKTtcbiAgICAgICAgICAgICAgZ3JhZGllbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJjeFwiLCBjaXJjbGVQb2ludFswXSk7XG4gICAgICAgICAgICAgIGdyYWRpZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiY3lcIiwgY2lyY2xlUG9pbnRbMV0pO1xuICAgICAgICAgICAgICBncmFkaWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInJcIiwgY2lyY2xlUmFkaXVzKTtcbiAgICAgICAgICAgICAgZ3JhZGllbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmeFwiLCBmb2NhbFBvaW50WzBdKTtcbiAgICAgICAgICAgICAgZ3JhZGllbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmeVwiLCBmb2NhbFBvaW50WzFdKTtcbiAgICAgICAgICAgICAgZ3JhZGllbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmclwiLCBmb2NhbFJhZGl1cyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gUmFkaWFsQXhpYWwgdHlwZTogJHthcmdzWzFdfWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAoY29uc3QgY29sb3JTdG9wIG9mIGNvbG9yU3RvcHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0b3AgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2ZzpzdG9wXCIpO1xuICAgICAgICAgICAgc3RvcC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcIm9mZnNldFwiLCBjb2xvclN0b3BbMF0pO1xuICAgICAgICAgICAgc3RvcC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInN0b3AtY29sb3JcIiwgY29sb3JTdG9wWzFdKTtcbiAgICAgICAgICAgIGdyYWRpZW50LmFwcGVuZENoaWxkKHN0b3ApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuZGVmcy5hcHBlbmRDaGlsZChncmFkaWVudCk7XG4gICAgICAgICAgcmV0dXJuIGB1cmwoIyR7c2hhZGluZ0lkfSlgO1xuXG4gICAgICAgIGNhc2UgXCJNZXNoXCI6XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5pbXBsZW1lbnRlZCBwYXR0ZXJuIE1lc2hcIik7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY2FzZSBcIkR1bW15XCI6XG4gICAgICAgICAgcmV0dXJuIFwiaG90cGlua1wiO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIElSIHR5cGU6ICR7YXJnc1swXX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXREYXNoKGRhc2hBcnJheSwgZGFzaFBoYXNlKSB7XG4gICAgICB0aGlzLmN1cnJlbnQuZGFzaEFycmF5ID0gZGFzaEFycmF5O1xuICAgICAgdGhpcy5jdXJyZW50LmRhc2hQaGFzZSA9IGRhc2hQaGFzZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RQYXRoKG9wcywgYXJncykge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgIGxldCB4ID0gY3VycmVudC54LFxuICAgICAgICAgIHkgPSBjdXJyZW50Lnk7XG4gICAgICBsZXQgZCA9IFtdO1xuICAgICAgbGV0IGogPSAwO1xuXG4gICAgICBmb3IgKGNvbnN0IG9wIG9mIG9wcykge1xuICAgICAgICBzd2l0Y2ggKG9wIHwgMCkge1xuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnJlY3RhbmdsZTpcbiAgICAgICAgICAgIHggPSBhcmdzW2orK107XG4gICAgICAgICAgICB5ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBhcmdzW2orK107XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBhcmdzW2orK107XG4gICAgICAgICAgICBjb25zdCB4dyA9IHggKyB3aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IHloID0geSArIGhlaWdodDtcbiAgICAgICAgICAgIGQucHVzaChcIk1cIiwgcGYoeCksIHBmKHkpLCBcIkxcIiwgcGYoeHcpLCBwZih5KSwgXCJMXCIsIHBmKHh3KSwgcGYoeWgpLCBcIkxcIiwgcGYoeCksIHBmKHloKSwgXCJaXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5tb3ZlVG86XG4gICAgICAgICAgICB4ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgeSA9IGFyZ3NbaisrXTtcbiAgICAgICAgICAgIGQucHVzaChcIk1cIiwgcGYoeCksIHBmKHkpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMubGluZVRvOlxuICAgICAgICAgICAgeCA9IGFyZ3NbaisrXTtcbiAgICAgICAgICAgIHkgPSBhcmdzW2orK107XG4gICAgICAgICAgICBkLnB1c2goXCJMXCIsIHBmKHgpLCBwZih5KSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmN1cnZlVG86XG4gICAgICAgICAgICB4ID0gYXJnc1tqICsgNF07XG4gICAgICAgICAgICB5ID0gYXJnc1tqICsgNV07XG4gICAgICAgICAgICBkLnB1c2goXCJDXCIsIHBmKGFyZ3Nbal0pLCBwZihhcmdzW2ogKyAxXSksIHBmKGFyZ3NbaiArIDJdKSwgcGYoYXJnc1tqICsgM10pLCBwZih4KSwgcGYoeSkpO1xuICAgICAgICAgICAgaiArPSA2O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jdXJ2ZVRvMjpcbiAgICAgICAgICAgIGQucHVzaChcIkNcIiwgcGYoeCksIHBmKHkpLCBwZihhcmdzW2pdKSwgcGYoYXJnc1tqICsgMV0pLCBwZihhcmdzW2ogKyAyXSksIHBmKGFyZ3NbaiArIDNdKSk7XG4gICAgICAgICAgICB4ID0gYXJnc1tqICsgMl07XG4gICAgICAgICAgICB5ID0gYXJnc1tqICsgM107XG4gICAgICAgICAgICBqICs9IDQ7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmN1cnZlVG8zOlxuICAgICAgICAgICAgeCA9IGFyZ3NbaiArIDJdO1xuICAgICAgICAgICAgeSA9IGFyZ3NbaiArIDNdO1xuICAgICAgICAgICAgZC5wdXNoKFwiQ1wiLCBwZihhcmdzW2pdKSwgcGYoYXJnc1tqICsgMV0pLCBwZih4KSwgcGYoeSksIHBmKHgpLCBwZih5KSk7XG4gICAgICAgICAgICBqICs9IDQ7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsb3NlUGF0aDpcbiAgICAgICAgICAgIGQucHVzaChcIlpcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBkID0gZC5qb2luKFwiIFwiKTtcblxuICAgICAgaWYgKGN1cnJlbnQucGF0aCAmJiBvcHMubGVuZ3RoID4gMCAmJiBvcHNbMF0gIT09IF91dGlsLk9QUy5yZWN0YW5nbGUgJiYgb3BzWzBdICE9PSBfdXRpbC5PUFMubW92ZVRvKSB7XG4gICAgICAgIGQgPSBjdXJyZW50LnBhdGguZ2V0QXR0cmlidXRlTlMobnVsbCwgXCJkXCIpICsgZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnQucGF0aCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnBhdGhcIik7XG5cbiAgICAgICAgdGhpcy5fZW5zdXJlVHJhbnNmb3JtR3JvdXAoKS5hcHBlbmRDaGlsZChjdXJyZW50LnBhdGgpO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50LnBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwgXCJkXCIsIGQpO1xuICAgICAgY3VycmVudC5wYXRoLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbFwiLCBcIm5vbmVcIik7XG4gICAgICBjdXJyZW50LmVsZW1lbnQgPSBjdXJyZW50LnBhdGg7XG4gICAgICBjdXJyZW50LnNldEN1cnJlbnRQb2ludCh4LCB5KTtcbiAgICB9XG5cbiAgICBlbmRQYXRoKCkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgIGN1cnJlbnQucGF0aCA9IG51bGw7XG5cbiAgICAgIGlmICghdGhpcy5wZW5kaW5nQ2xpcCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghY3VycmVudC5lbGVtZW50KSB7XG4gICAgICAgIHRoaXMucGVuZGluZ0NsaXAgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNsaXBJZCA9IGBjbGlwcGF0aCR7Y2xpcENvdW50Kyt9YDtcbiAgICAgIGNvbnN0IGNsaXBQYXRoID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6Y2xpcFBhdGhcIik7XG4gICAgICBjbGlwUGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImlkXCIsIGNsaXBJZCk7XG4gICAgICBjbGlwUGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInRyYW5zZm9ybVwiLCBwbSh0aGlzLnRyYW5zZm9ybU1hdHJpeCkpO1xuICAgICAgY29uc3QgY2xpcEVsZW1lbnQgPSBjdXJyZW50LmVsZW1lbnQuY2xvbmVOb2RlKHRydWUpO1xuXG4gICAgICBpZiAodGhpcy5wZW5kaW5nQ2xpcCA9PT0gXCJldmVub2RkXCIpIHtcbiAgICAgICAgY2xpcEVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJjbGlwLXJ1bGVcIiwgXCJldmVub2RkXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xpcEVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJjbGlwLXJ1bGVcIiwgXCJub256ZXJvXCIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBlbmRpbmdDbGlwID0gbnVsbDtcbiAgICAgIGNsaXBQYXRoLmFwcGVuZENoaWxkKGNsaXBFbGVtZW50KTtcbiAgICAgIHRoaXMuZGVmcy5hcHBlbmRDaGlsZChjbGlwUGF0aCk7XG5cbiAgICAgIGlmIChjdXJyZW50LmFjdGl2ZUNsaXBVcmwpIHtcbiAgICAgICAgY3VycmVudC5jbGlwR3JvdXAgPSBudWxsO1xuXG4gICAgICAgIGZvciAoY29uc3QgcHJldiBvZiB0aGlzLmV4dHJhU3RhY2spIHtcbiAgICAgICAgICBwcmV2LmNsaXBHcm91cCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjbGlwUGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImNsaXAtcGF0aFwiLCBjdXJyZW50LmFjdGl2ZUNsaXBVcmwpO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50LmFjdGl2ZUNsaXBVcmwgPSBgdXJsKCMke2NsaXBJZH0pYDtcbiAgICAgIHRoaXMudGdycCA9IG51bGw7XG4gICAgfVxuXG4gICAgY2xpcCh0eXBlKSB7XG4gICAgICB0aGlzLnBlbmRpbmdDbGlwID0gdHlwZTtcbiAgICB9XG5cbiAgICBjbG9zZVBhdGgoKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuXG4gICAgICBpZiAoY3VycmVudC5wYXRoKSB7XG4gICAgICAgIGNvbnN0IGQgPSBgJHtjdXJyZW50LnBhdGguZ2V0QXR0cmlidXRlTlMobnVsbCwgXCJkXCIpfVpgO1xuICAgICAgICBjdXJyZW50LnBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwgXCJkXCIsIGQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldExlYWRpbmcobGVhZGluZykge1xuICAgICAgdGhpcy5jdXJyZW50LmxlYWRpbmcgPSAtbGVhZGluZztcbiAgICB9XG5cbiAgICBzZXRUZXh0UmlzZSh0ZXh0UmlzZSkge1xuICAgICAgdGhpcy5jdXJyZW50LnRleHRSaXNlID0gdGV4dFJpc2U7XG4gICAgfVxuXG4gICAgc2V0VGV4dFJlbmRlcmluZ01vZGUodGV4dFJlbmRlcmluZ01vZGUpIHtcbiAgICAgIHRoaXMuY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSA9IHRleHRSZW5kZXJpbmdNb2RlO1xuICAgIH1cblxuICAgIHNldEhTY2FsZShzY2FsZSkge1xuICAgICAgdGhpcy5jdXJyZW50LnRleHRIU2NhbGUgPSBzY2FsZSAvIDEwMDtcbiAgICB9XG5cbiAgICBzZXRSZW5kZXJpbmdJbnRlbnQoaW50ZW50KSB7fVxuXG4gICAgc2V0RmxhdG5lc3MoZmxhdG5lc3MpIHt9XG5cbiAgICBzZXRHU3RhdGUoc3RhdGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBzdGF0ZXMpIHtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICBjYXNlIFwiTFdcIjpcbiAgICAgICAgICAgIHRoaXMuc2V0TGluZVdpZHRoKHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIkxDXCI6XG4gICAgICAgICAgICB0aGlzLnNldExpbmVDYXAodmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiTEpcIjpcbiAgICAgICAgICAgIHRoaXMuc2V0TGluZUpvaW4odmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiTUxcIjpcbiAgICAgICAgICAgIHRoaXMuc2V0TWl0ZXJMaW1pdCh2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJEXCI6XG4gICAgICAgICAgICB0aGlzLnNldERhc2godmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIlJJXCI6XG4gICAgICAgICAgICB0aGlzLnNldFJlbmRlcmluZ0ludGVudCh2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJGTFwiOlxuICAgICAgICAgICAgdGhpcy5zZXRGbGF0bmVzcyh2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJGb250XCI6XG4gICAgICAgICAgICB0aGlzLnNldEZvbnQodmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiQ0FcIjpcbiAgICAgICAgICAgIHRoaXMuc2V0U3Ryb2tlQWxwaGEodmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiY2FcIjpcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsbEFscGhhKHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgVW5pbXBsZW1lbnRlZCBncmFwaGljIHN0YXRlIG9wZXJhdG9yICR7a2V5fWApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmaWxsKCkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcblxuICAgICAgaWYgKGN1cnJlbnQuZWxlbWVudCkge1xuICAgICAgICBjdXJyZW50LmVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsXCIsIGN1cnJlbnQuZmlsbENvbG9yKTtcbiAgICAgICAgY3VycmVudC5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbC1vcGFjaXR5XCIsIGN1cnJlbnQuZmlsbEFscGhhKTtcbiAgICAgICAgdGhpcy5lbmRQYXRoKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3Ryb2tlKCkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcblxuICAgICAgaWYgKGN1cnJlbnQuZWxlbWVudCkge1xuICAgICAgICB0aGlzLl9zZXRTdHJva2VBdHRyaWJ1dGVzKGN1cnJlbnQuZWxlbWVudCk7XG5cbiAgICAgICAgY3VycmVudC5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbFwiLCBcIm5vbmVcIik7XG4gICAgICAgIHRoaXMuZW5kUGF0aCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIF9zZXRTdHJva2VBdHRyaWJ1dGVzKGVsZW1lbnQsIGxpbmVXaWR0aFNjYWxlID0gMSkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgIGxldCBkYXNoQXJyYXkgPSBjdXJyZW50LmRhc2hBcnJheTtcblxuICAgICAgaWYgKGxpbmVXaWR0aFNjYWxlICE9PSAxICYmIGRhc2hBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRhc2hBcnJheSA9IGRhc2hBcnJheS5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIGxpbmVXaWR0aFNjYWxlICogdmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwic3Ryb2tlXCIsIGN1cnJlbnQuc3Ryb2tlQ29sb3IpO1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInN0cm9rZS1vcGFjaXR5XCIsIGN1cnJlbnQuc3Ryb2tlQWxwaGEpO1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInN0cm9rZS1taXRlcmxpbWl0XCIsIHBmKGN1cnJlbnQubWl0ZXJMaW1pdCkpO1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInN0cm9rZS1saW5lY2FwXCIsIGN1cnJlbnQubGluZUNhcCk7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwic3Ryb2tlLWxpbmVqb2luXCIsIGN1cnJlbnQubGluZUpvaW4pO1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInN0cm9rZS13aWR0aFwiLCBwZihsaW5lV2lkdGhTY2FsZSAqIGN1cnJlbnQubGluZVdpZHRoKSArIFwicHhcIik7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwic3Ryb2tlLWRhc2hhcnJheVwiLCBkYXNoQXJyYXkubWFwKHBmKS5qb2luKFwiIFwiKSk7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwic3Ryb2tlLWRhc2hvZmZzZXRcIiwgcGYobGluZVdpZHRoU2NhbGUgKiBjdXJyZW50LmRhc2hQaGFzZSkgKyBcInB4XCIpO1xuICAgIH1cblxuICAgIGVvRmlsbCgpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnQuZWxlbWVudCkge1xuICAgICAgICB0aGlzLmN1cnJlbnQuZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZpbGwtcnVsZVwiLCBcImV2ZW5vZGRcIik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZmlsbCgpO1xuICAgIH1cblxuICAgIGZpbGxTdHJva2UoKSB7XG4gICAgICB0aGlzLnN0cm9rZSgpO1xuICAgICAgdGhpcy5maWxsKCk7XG4gICAgfVxuXG4gICAgZW9GaWxsU3Ryb2tlKCkge1xuICAgICAgaWYgKHRoaXMuY3VycmVudC5lbGVtZW50KSB7XG4gICAgICAgIHRoaXMuY3VycmVudC5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbC1ydWxlXCIsIFwiZXZlbm9kZFwiKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5maWxsU3Ryb2tlKCk7XG4gICAgfVxuXG4gICAgY2xvc2VTdHJva2UoKSB7XG4gICAgICB0aGlzLmNsb3NlUGF0aCgpO1xuICAgICAgdGhpcy5zdHJva2UoKTtcbiAgICB9XG5cbiAgICBjbG9zZUZpbGxTdHJva2UoKSB7XG4gICAgICB0aGlzLmNsb3NlUGF0aCgpO1xuICAgICAgdGhpcy5maWxsU3Ryb2tlKCk7XG4gICAgfVxuXG4gICAgY2xvc2VFT0ZpbGxTdHJva2UoKSB7XG4gICAgICB0aGlzLmNsb3NlUGF0aCgpO1xuICAgICAgdGhpcy5lb0ZpbGxTdHJva2UoKTtcbiAgICB9XG5cbiAgICBwYWludFNvbGlkQ29sb3JJbWFnZU1hc2soKSB7XG4gICAgICBjb25zdCByZWN0ID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6cmVjdFwiKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ4XCIsIFwiMFwiKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIFwiMFwiKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ3aWR0aFwiLCBcIjFweFwiKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJoZWlnaHRcIiwgXCIxcHhcIik7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbFwiLCB0aGlzLmN1cnJlbnQuZmlsbENvbG9yKTtcblxuICAgICAgdGhpcy5fZW5zdXJlVHJhbnNmb3JtR3JvdXAoKS5hcHBlbmRDaGlsZChyZWN0KTtcbiAgICB9XG5cbiAgICBwYWludEltYWdlWE9iamVjdChvYmpJZCkge1xuICAgICAgY29uc3QgaW1nRGF0YSA9IG9iaklkLnN0YXJ0c1dpdGgoXCJnX1wiKSA/IHRoaXMuY29tbW9uT2Jqcy5nZXQob2JqSWQpIDogdGhpcy5vYmpzLmdldChvYmpJZCk7XG5cbiAgICAgIGlmICghaW1nRGF0YSkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYERlcGVuZGVudCBpbWFnZSB3aXRoIG9iamVjdCBJRCAke29iaklkfSBpcyBub3QgcmVhZHkgeWV0YCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wYWludElubGluZUltYWdlWE9iamVjdChpbWdEYXRhKTtcbiAgICB9XG5cbiAgICBwYWludElubGluZUltYWdlWE9iamVjdChpbWdEYXRhLCBtYXNrKSB7XG4gICAgICBjb25zdCB3aWR0aCA9IGltZ0RhdGEud2lkdGg7XG4gICAgICBjb25zdCBoZWlnaHQgPSBpbWdEYXRhLmhlaWdodDtcbiAgICAgIGNvbnN0IGltZ1NyYyA9IGNvbnZlcnRJbWdEYXRhVG9QbmcoaW1nRGF0YSwgdGhpcy5mb3JjZURhdGFTY2hlbWEsICEhbWFzayk7XG4gICAgICBjb25zdCBjbGlwcmVjdCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnJlY3RcIik7XG4gICAgICBjbGlwcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInhcIiwgXCIwXCIpO1xuICAgICAgY2xpcHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIFwiMFwiKTtcbiAgICAgIGNsaXByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwid2lkdGhcIiwgcGYod2lkdGgpKTtcbiAgICAgIGNsaXByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiaGVpZ2h0XCIsIHBmKGhlaWdodCkpO1xuICAgICAgdGhpcy5jdXJyZW50LmVsZW1lbnQgPSBjbGlwcmVjdDtcbiAgICAgIHRoaXMuY2xpcChcIm5vbnplcm9cIik7XG4gICAgICBjb25zdCBpbWdFbCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOmltYWdlXCIpO1xuICAgICAgaW1nRWwuc2V0QXR0cmlidXRlTlMoWExJTktfTlMsIFwieGxpbms6aHJlZlwiLCBpbWdTcmMpO1xuICAgICAgaW1nRWwuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ4XCIsIFwiMFwiKTtcbiAgICAgIGltZ0VsLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieVwiLCBwZigtaGVpZ2h0KSk7XG4gICAgICBpbWdFbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcIndpZHRoXCIsIHBmKHdpZHRoKSArIFwicHhcIik7XG4gICAgICBpbWdFbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImhlaWdodFwiLCBwZihoZWlnaHQpICsgXCJweFwiKTtcbiAgICAgIGltZ0VsLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwidHJhbnNmb3JtXCIsIGBzY2FsZSgke3BmKDEgLyB3aWR0aCl9ICR7cGYoLTEgLyBoZWlnaHQpfSlgKTtcblxuICAgICAgaWYgKG1hc2spIHtcbiAgICAgICAgbWFzay5hcHBlbmRDaGlsZChpbWdFbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZENoaWxkKGltZ0VsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYWludEltYWdlTWFza1hPYmplY3QoaW1nRGF0YSkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgIGNvbnN0IHdpZHRoID0gaW1nRGF0YS53aWR0aDtcbiAgICAgIGNvbnN0IGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0O1xuICAgICAgY29uc3QgZmlsbENvbG9yID0gY3VycmVudC5maWxsQ29sb3I7XG4gICAgICBjdXJyZW50Lm1hc2tJZCA9IGBtYXNrJHttYXNrQ291bnQrK31gO1xuICAgICAgY29uc3QgbWFzayA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOm1hc2tcIik7XG4gICAgICBtYXNrLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiaWRcIiwgY3VycmVudC5tYXNrSWQpO1xuICAgICAgY29uc3QgcmVjdCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnJlY3RcIik7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieFwiLCBcIjBcIik7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieVwiLCBcIjBcIik7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwid2lkdGhcIiwgcGYod2lkdGgpKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJoZWlnaHRcIiwgcGYoaGVpZ2h0KSk7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbFwiLCBmaWxsQ29sb3IpO1xuICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcIm1hc2tcIiwgYHVybCgjJHtjdXJyZW50Lm1hc2tJZH0pYCk7XG4gICAgICB0aGlzLmRlZnMuYXBwZW5kQ2hpbGQobWFzayk7XG5cbiAgICAgIHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kQ2hpbGQocmVjdCk7XG5cbiAgICAgIHRoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QoaW1nRGF0YSwgbWFzayk7XG4gICAgfVxuXG4gICAgcGFpbnRGb3JtWE9iamVjdEJlZ2luKG1hdHJpeCwgYmJveCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWF0cml4KSAmJiBtYXRyaXgubGVuZ3RoID09PSA2KSB7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtKG1hdHJpeFswXSwgbWF0cml4WzFdLCBtYXRyaXhbMl0sIG1hdHJpeFszXSwgbWF0cml4WzRdLCBtYXRyaXhbNV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoYmJveCkge1xuICAgICAgICBjb25zdCB3aWR0aCA9IGJib3hbMl0gLSBiYm94WzBdO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBiYm94WzNdIC0gYmJveFsxXTtcbiAgICAgICAgY29uc3QgY2xpcHJlY3QgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2ZzpyZWN0XCIpO1xuICAgICAgICBjbGlwcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInhcIiwgYmJveFswXSk7XG4gICAgICAgIGNsaXByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieVwiLCBiYm94WzFdKTtcbiAgICAgICAgY2xpcHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ3aWR0aFwiLCBwZih3aWR0aCkpO1xuICAgICAgICBjbGlwcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImhlaWdodFwiLCBwZihoZWlnaHQpKTtcbiAgICAgICAgdGhpcy5jdXJyZW50LmVsZW1lbnQgPSBjbGlwcmVjdDtcbiAgICAgICAgdGhpcy5jbGlwKFwibm9uemVyb1wiKTtcbiAgICAgICAgdGhpcy5lbmRQYXRoKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFpbnRGb3JtWE9iamVjdEVuZCgpIHt9XG5cbiAgICBfaW5pdGlhbGl6ZSh2aWV3cG9ydCkge1xuICAgICAgY29uc3Qgc3ZnID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZSh2aWV3cG9ydC53aWR0aCwgdmlld3BvcnQuaGVpZ2h0KTtcbiAgICAgIGNvbnN0IGRlZmluaXRpb25zID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6ZGVmc1wiKTtcbiAgICAgIHN2Zy5hcHBlbmRDaGlsZChkZWZpbml0aW9ucyk7XG4gICAgICB0aGlzLmRlZnMgPSBkZWZpbml0aW9ucztcbiAgICAgIGNvbnN0IHJvb3RHcm91cCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOmdcIik7XG4gICAgICByb290R3JvdXAuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ0cmFuc2Zvcm1cIiwgcG0odmlld3BvcnQudHJhbnNmb3JtKSk7XG4gICAgICBzdmcuYXBwZW5kQ2hpbGQocm9vdEdyb3VwKTtcbiAgICAgIHRoaXMuc3ZnID0gcm9vdEdyb3VwO1xuICAgICAgcmV0dXJuIHN2ZztcbiAgICB9XG5cbiAgICBfZW5zdXJlQ2xpcEdyb3VwKCkge1xuICAgICAgaWYgKCF0aGlzLmN1cnJlbnQuY2xpcEdyb3VwKSB7XG4gICAgICAgIGNvbnN0IGNsaXBHcm91cCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOmdcIik7XG4gICAgICAgIGNsaXBHcm91cC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImNsaXAtcGF0aFwiLCB0aGlzLmN1cnJlbnQuYWN0aXZlQ2xpcFVybCk7XG4gICAgICAgIHRoaXMuc3ZnLmFwcGVuZENoaWxkKGNsaXBHcm91cCk7XG4gICAgICAgIHRoaXMuY3VycmVudC5jbGlwR3JvdXAgPSBjbGlwR3JvdXA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQuY2xpcEdyb3VwO1xuICAgIH1cblxuICAgIF9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpIHtcbiAgICAgIGlmICghdGhpcy50Z3JwKSB7XG4gICAgICAgIHRoaXMudGdycCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOmdcIik7XG4gICAgICAgIHRoaXMudGdycC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInRyYW5zZm9ybVwiLCBwbSh0aGlzLnRyYW5zZm9ybU1hdHJpeCkpO1xuXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnQuYWN0aXZlQ2xpcFVybCkge1xuICAgICAgICAgIHRoaXMuX2Vuc3VyZUNsaXBHcm91cCgpLmFwcGVuZENoaWxkKHRoaXMudGdycCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdmcuYXBwZW5kQ2hpbGQodGhpcy50Z3JwKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy50Z3JwO1xuICAgIH1cblxuICB9O1xufVxuXG4vKioqLyB9KSxcbi8qIDIzICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlBERk5vZGVTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfbmV0d29ya191dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oMjQpO1xuXG47XG5cbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuXG5jb25zdCBodHRwID0gcmVxdWlyZShcImh0dHBcIik7XG5cbmNvbnN0IGh0dHBzID0gcmVxdWlyZShcImh0dHBzXCIpO1xuXG5jb25zdCB1cmwgPSByZXF1aXJlKFwidXJsXCIpO1xuXG5jb25zdCBmaWxlVXJpUmVnZXggPSAvXmZpbGU6XFwvXFwvXFwvW2EtekEtWl06XFwvLztcblxuZnVuY3Rpb24gcGFyc2VVcmwoc291cmNlVXJsKSB7XG4gIGNvbnN0IHBhcnNlZFVybCA9IHVybC5wYXJzZShzb3VyY2VVcmwpO1xuXG4gIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgPT09IFwiZmlsZTpcIiB8fCBwYXJzZWRVcmwuaG9zdCkge1xuICAgIHJldHVybiBwYXJzZWRVcmw7XG4gIH1cblxuICBpZiAoL15bYS16XTpbL1xcXFxdL2kudGVzdChzb3VyY2VVcmwpKSB7XG4gICAgcmV0dXJuIHVybC5wYXJzZShgZmlsZTovLy8ke3NvdXJjZVVybH1gKTtcbiAgfVxuXG4gIGlmICghcGFyc2VkVXJsLmhvc3QpIHtcbiAgICBwYXJzZWRVcmwucHJvdG9jb2wgPSBcImZpbGU6XCI7XG4gIH1cblxuICByZXR1cm4gcGFyc2VkVXJsO1xufVxuXG5jbGFzcyBQREZOb2RlU3RyZWFtIHtcbiAgY29uc3RydWN0b3Ioc291cmNlKSB7XG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgdGhpcy51cmwgPSBwYXJzZVVybChzb3VyY2UudXJsKTtcbiAgICB0aGlzLmlzSHR0cCA9IHRoaXMudXJsLnByb3RvY29sID09PSBcImh0dHA6XCIgfHwgdGhpcy51cmwucHJvdG9jb2wgPT09IFwiaHR0cHM6XCI7XG4gICAgdGhpcy5pc0ZzVXJsID0gdGhpcy51cmwucHJvdG9jb2wgPT09IFwiZmlsZTpcIjtcbiAgICB0aGlzLmh0dHBIZWFkZXJzID0gdGhpcy5pc0h0dHAgJiYgc291cmNlLmh0dHBIZWFkZXJzIHx8IHt9O1xuICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyID0gbnVsbDtcbiAgICB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzID0gW107XG4gIH1cblxuICBnZXQgX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI/Ll9sb2FkZWQgPz8gMDtcbiAgfVxuXG4gIGdldEZ1bGxSZWFkZXIoKSB7XG4gICAgKDAsIF91dGlsLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLCBcIlBERk5vZGVTdHJlYW0uZ2V0RnVsbFJlYWRlciBjYW4gb25seSBiZSBjYWxsZWQgb25jZS5cIik7XG4gICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSB0aGlzLmlzRnNVcmwgPyBuZXcgUERGTm9kZVN0cmVhbUZzRnVsbFJlYWRlcih0aGlzKSA6IG5ldyBQREZOb2RlU3RyZWFtRnVsbFJlYWRlcih0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI7XG4gIH1cblxuICBnZXRSYW5nZVJlYWRlcihzdGFydCwgZW5kKSB7XG4gICAgaWYgKGVuZCA8PSB0aGlzLl9wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJhbmdlUmVhZGVyID0gdGhpcy5pc0ZzVXJsID8gbmV3IFBERk5vZGVTdHJlYW1Gc1JhbmdlUmVhZGVyKHRoaXMsIHN0YXJ0LCBlbmQpIDogbmV3IFBERk5vZGVTdHJlYW1SYW5nZVJlYWRlcih0aGlzLCBzdGFydCwgZW5kKTtcblxuICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChyYW5nZVJlYWRlcik7XG5cbiAgICByZXR1cm4gcmFuZ2VSZWFkZXI7XG4gIH1cblxuICBjYW5jZWxBbGxSZXF1ZXN0cyhyZWFzb24pIHtcbiAgICBpZiAodGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpIHtcbiAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVhZGVyIG9mIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCkpIHtcbiAgICAgIHJlYWRlci5jYW5jZWwocmVhc29uKTtcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnRzLlBERk5vZGVTdHJlYW0gPSBQREZOb2RlU3RyZWFtO1xuXG5jbGFzcyBCYXNlRnVsbFJlYWRlciB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSkge1xuICAgIHRoaXMuX3VybCA9IHN0cmVhbS51cmw7XG4gICAgdGhpcy5fZG9uZSA9IGZhbHNlO1xuICAgIHRoaXMuX3N0b3JlZEVycm9yID0gbnVsbDtcbiAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsO1xuICAgIGNvbnN0IHNvdXJjZSA9IHN0cmVhbS5zb3VyY2U7XG4gICAgdGhpcy5fY29udGVudExlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG4gICAgdGhpcy5fbG9hZGVkID0gMDtcbiAgICB0aGlzLl9maWxlbmFtZSA9IG51bGw7XG4gICAgdGhpcy5fZGlzYWJsZVJhbmdlID0gc291cmNlLmRpc2FibGVSYW5nZSB8fCBmYWxzZTtcbiAgICB0aGlzLl9yYW5nZUNodW5rU2l6ZSA9IHNvdXJjZS5yYW5nZUNodW5rU2l6ZTtcblxuICAgIGlmICghdGhpcy5fcmFuZ2VDaHVua1NpemUgJiYgIXRoaXMuX2Rpc2FibGVSYW5nZSkge1xuICAgICAgdGhpcy5fZGlzYWJsZVJhbmdlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9ICFzb3VyY2UuZGlzYWJsZVN0cmVhbTtcbiAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gIXNvdXJjZS5kaXNhYmxlUmFuZ2U7XG4gICAgdGhpcy5fcmVhZGFibGVTdHJlYW0gPSBudWxsO1xuICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICB9XG5cbiAgZ2V0IGhlYWRlcnNSZWFkeSgpIHtcbiAgICByZXR1cm4gdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIGdldCBmaWxlbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZW5hbWU7XG4gIH1cblxuICBnZXQgY29udGVudExlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGVudExlbmd0aDtcbiAgfVxuXG4gIGdldCBpc1JhbmdlU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZDtcbiAgfVxuXG4gIGFzeW5jIHJlYWQoKSB7XG4gICAgYXdhaXQgdGhpcy5fcmVhZENhcGFiaWxpdHkucHJvbWlzZTtcblxuICAgIGlmICh0aGlzLl9kb25lKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICBkb25lOiB0cnVlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdG9yZWRFcnJvcikge1xuICAgICAgdGhyb3cgdGhpcy5fc3RvcmVkRXJyb3I7XG4gICAgfVxuXG4gICAgY29uc3QgY2h1bmsgPSB0aGlzLl9yZWFkYWJsZVN0cmVhbS5yZWFkKCk7XG5cbiAgICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgcmV0dXJuIHRoaXMucmVhZCgpO1xuICAgIH1cblxuICAgIHRoaXMuX2xvYWRlZCArPSBjaHVuay5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5vblByb2dyZXNzKSB7XG4gICAgICB0aGlzLm9uUHJvZ3Jlc3Moe1xuICAgICAgICBsb2FkZWQ6IHRoaXMuX2xvYWRlZCxcbiAgICAgICAgdG90YWw6IHRoaXMuX2NvbnRlbnRMZW5ndGhcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGNodW5rKS5idWZmZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBidWZmZXIsXG4gICAgICBkb25lOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjYW5jZWwocmVhc29uKSB7XG4gICAgaWYgKCF0aGlzLl9yZWFkYWJsZVN0cmVhbSkge1xuICAgICAgdGhpcy5fZXJyb3IocmVhc29uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtLmRlc3Ryb3kocmVhc29uKTtcbiAgfVxuXG4gIF9lcnJvcihyZWFzb24pIHtcbiAgICB0aGlzLl9zdG9yZWRFcnJvciA9IHJlYXNvbjtcblxuICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgfVxuXG4gIF9zZXRSZWFkYWJsZVN0cmVhbShyZWFkYWJsZVN0cmVhbSkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtID0gcmVhZGFibGVTdHJlYW07XG4gICAgcmVhZGFibGVTdHJlYW0ub24oXCJyZWFkYWJsZVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgcmVhZGFibGVTdHJlYW0ub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgcmVhZGFibGVTdHJlYW0uZGVzdHJveSgpO1xuICAgICAgdGhpcy5fZG9uZSA9IHRydWU7XG5cbiAgICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICB9KTtcbiAgICByZWFkYWJsZVN0cmVhbS5vbihcImVycm9yXCIsIHJlYXNvbiA9PiB7XG4gICAgICB0aGlzLl9lcnJvcihyZWFzb24pO1xuICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCAmJiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkKSB7XG4gICAgICB0aGlzLl9lcnJvcihuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24oXCJzdHJlYW1pbmcgaXMgZGlzYWJsZWRcIikpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdG9yZWRFcnJvcikge1xuICAgICAgdGhpcy5fcmVhZGFibGVTdHJlYW0uZGVzdHJveSh0aGlzLl9zdG9yZWRFcnJvcik7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgQmFzZVJhbmdlUmVhZGVyIHtcbiAgY29uc3RydWN0b3Ioc3RyZWFtKSB7XG4gICAgdGhpcy5fdXJsID0gc3RyZWFtLnVybDtcbiAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgdGhpcy5fc3RvcmVkRXJyb3IgPSBudWxsO1xuICAgIHRoaXMub25Qcm9ncmVzcyA9IG51bGw7XG4gICAgdGhpcy5fbG9hZGVkID0gMDtcbiAgICB0aGlzLl9yZWFkYWJsZVN0cmVhbSA9IG51bGw7XG4gICAgdGhpcy5fcmVhZENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgY29uc3Qgc291cmNlID0gc3RyZWFtLnNvdXJjZTtcbiAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9ICFzb3VyY2UuZGlzYWJsZVN0cmVhbTtcbiAgfVxuXG4gIGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ7XG4gIH1cblxuICBhc3luYyByZWFkKCkge1xuICAgIGF3YWl0IHRoaXMuX3JlYWRDYXBhYmlsaXR5LnByb21pc2U7XG5cbiAgICBpZiAodGhpcy5fZG9uZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RvcmVkRXJyb3IpIHtcbiAgICAgIHRocm93IHRoaXMuX3N0b3JlZEVycm9yO1xuICAgIH1cblxuICAgIGNvbnN0IGNodW5rID0gdGhpcy5fcmVhZGFibGVTdHJlYW0ucmVhZCgpO1xuXG4gICAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgIHJldHVybiB0aGlzLnJlYWQoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2FkZWQgKz0gY2h1bmsubGVuZ3RoO1xuXG4gICAgaWYgKHRoaXMub25Qcm9ncmVzcykge1xuICAgICAgdGhpcy5vblByb2dyZXNzKHtcbiAgICAgICAgbG9hZGVkOiB0aGlzLl9sb2FkZWRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGNodW5rKS5idWZmZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBidWZmZXIsXG4gICAgICBkb25lOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjYW5jZWwocmVhc29uKSB7XG4gICAgaWYgKCF0aGlzLl9yZWFkYWJsZVN0cmVhbSkge1xuICAgICAgdGhpcy5fZXJyb3IocmVhc29uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtLmRlc3Ryb3kocmVhc29uKTtcbiAgfVxuXG4gIF9lcnJvcihyZWFzb24pIHtcbiAgICB0aGlzLl9zdG9yZWRFcnJvciA9IHJlYXNvbjtcblxuICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgfVxuXG4gIF9zZXRSZWFkYWJsZVN0cmVhbShyZWFkYWJsZVN0cmVhbSkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtID0gcmVhZGFibGVTdHJlYW07XG4gICAgcmVhZGFibGVTdHJlYW0ub24oXCJyZWFkYWJsZVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgcmVhZGFibGVTdHJlYW0ub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgcmVhZGFibGVTdHJlYW0uZGVzdHJveSgpO1xuICAgICAgdGhpcy5fZG9uZSA9IHRydWU7XG5cbiAgICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICB9KTtcbiAgICByZWFkYWJsZVN0cmVhbS5vbihcImVycm9yXCIsIHJlYXNvbiA9PiB7XG4gICAgICB0aGlzLl9lcnJvcihyZWFzb24pO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuX3N0b3JlZEVycm9yKSB7XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHRoaXMuX3N0b3JlZEVycm9yKTtcbiAgICB9XG4gIH1cblxufVxuXG5mdW5jdGlvbiBjcmVhdGVSZXF1ZXN0T3B0aW9ucyhwYXJzZWRVcmwsIGhlYWRlcnMpIHtcbiAgcmV0dXJuIHtcbiAgICBwcm90b2NvbDogcGFyc2VkVXJsLnByb3RvY29sLFxuICAgIGF1dGg6IHBhcnNlZFVybC5hdXRoLFxuICAgIGhvc3Q6IHBhcnNlZFVybC5ob3N0bmFtZSxcbiAgICBwb3J0OiBwYXJzZWRVcmwucG9ydCxcbiAgICBwYXRoOiBwYXJzZWRVcmwucGF0aCxcbiAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgaGVhZGVyc1xuICB9O1xufVxuXG5jbGFzcyBQREZOb2RlU3RyZWFtRnVsbFJlYWRlciBleHRlbmRzIEJhc2VGdWxsUmVhZGVyIHtcbiAgY29uc3RydWN0b3Ioc3RyZWFtKSB7XG4gICAgc3VwZXIoc3RyZWFtKTtcblxuICAgIGNvbnN0IGhhbmRsZVJlc3BvbnNlID0gcmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgPT09IDQwNCkge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBfdXRpbC5NaXNzaW5nUERGRXhjZXB0aW9uKGBNaXNzaW5nIFBERiBcIiR7dGhpcy5fdXJsfVwiLmApO1xuICAgICAgICB0aGlzLl9zdG9yZWRFcnJvciA9IGVycm9yO1xuXG4gICAgICAgIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnJlamVjdChlcnJvcik7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG5cbiAgICAgIHRoaXMuX3NldFJlYWRhYmxlU3RyZWFtKHJlc3BvbnNlKTtcblxuICAgICAgY29uc3QgZ2V0UmVzcG9uc2VIZWFkZXIgPSBuYW1lID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RyZWFtLmhlYWRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYWxsb3dSYW5nZVJlcXVlc3RzLFxuICAgICAgICBzdWdnZXN0ZWRMZW5ndGhcbiAgICAgIH0gPSAoMCwgX25ldHdvcmtfdXRpbHMudmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXMpKHtcbiAgICAgICAgZ2V0UmVzcG9uc2VIZWFkZXIsXG4gICAgICAgIGlzSHR0cDogc3RyZWFtLmlzSHR0cCxcbiAgICAgICAgcmFuZ2VDaHVua1NpemU6IHRoaXMuX3JhbmdlQ2h1bmtTaXplLFxuICAgICAgICBkaXNhYmxlUmFuZ2U6IHRoaXMuX2Rpc2FibGVSYW5nZVxuICAgICAgfSk7XG4gICAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gYWxsb3dSYW5nZVJlcXVlc3RzO1xuICAgICAgdGhpcy5fY29udGVudExlbmd0aCA9IHN1Z2dlc3RlZExlbmd0aCB8fCB0aGlzLl9jb250ZW50TGVuZ3RoO1xuICAgICAgdGhpcy5fZmlsZW5hbWUgPSAoMCwgX25ldHdvcmtfdXRpbHMuZXh0cmFjdEZpbGVuYW1lRnJvbUhlYWRlcikoZ2V0UmVzcG9uc2VIZWFkZXIpO1xuICAgIH07XG5cbiAgICB0aGlzLl9yZXF1ZXN0ID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl91cmwucHJvdG9jb2wgPT09IFwiaHR0cDpcIikge1xuICAgICAgdGhpcy5fcmVxdWVzdCA9IGh0dHAucmVxdWVzdChjcmVhdGVSZXF1ZXN0T3B0aW9ucyh0aGlzLl91cmwsIHN0cmVhbS5odHRwSGVhZGVycyksIGhhbmRsZVJlc3BvbnNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcmVxdWVzdCA9IGh0dHBzLnJlcXVlc3QoY3JlYXRlUmVxdWVzdE9wdGlvbnModGhpcy5fdXJsLCBzdHJlYW0uaHR0cEhlYWRlcnMpLCBoYW5kbGVSZXNwb25zZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVxdWVzdC5vbihcImVycm9yXCIsIHJlYXNvbiA9PiB7XG4gICAgICB0aGlzLl9zdG9yZWRFcnJvciA9IHJlYXNvbjtcblxuICAgICAgdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucmVqZWN0KHJlYXNvbik7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9yZXF1ZXN0LmVuZCgpO1xuICB9XG5cbn1cblxuY2xhc3MgUERGTm9kZVN0cmVhbVJhbmdlUmVhZGVyIGV4dGVuZHMgQmFzZVJhbmdlUmVhZGVyIHtcbiAgY29uc3RydWN0b3Ioc3RyZWFtLCBzdGFydCwgZW5kKSB7XG4gICAgc3VwZXIoc3RyZWFtKTtcbiAgICB0aGlzLl9odHRwSGVhZGVycyA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBzdHJlYW0uaHR0cEhlYWRlcnMpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gc3RyZWFtLmh0dHBIZWFkZXJzW3Byb3BlcnR5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faHR0cEhlYWRlcnNbcHJvcGVydHldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5faHR0cEhlYWRlcnMuUmFuZ2UgPSBgYnl0ZXM9JHtzdGFydH0tJHtlbmQgLSAxfWA7XG5cbiAgICBjb25zdCBoYW5kbGVSZXNwb25zZSA9IHJlc3BvbnNlID0+IHtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlID09PSA0MDQpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgX3V0aWwuTWlzc2luZ1BERkV4Y2VwdGlvbihgTWlzc2luZyBQREYgXCIke3RoaXMuX3VybH1cIi5gKTtcbiAgICAgICAgdGhpcy5fc3RvcmVkRXJyb3IgPSBlcnJvcjtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXRSZWFkYWJsZVN0cmVhbShyZXNwb25zZSk7XG4gICAgfTtcblxuICAgIHRoaXMuX3JlcXVlc3QgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuX3VybC5wcm90b2NvbCA9PT0gXCJodHRwOlwiKSB7XG4gICAgICB0aGlzLl9yZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0KGNyZWF0ZVJlcXVlc3RPcHRpb25zKHRoaXMuX3VybCwgdGhpcy5faHR0cEhlYWRlcnMpLCBoYW5kbGVSZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3JlcXVlc3QgPSBodHRwcy5yZXF1ZXN0KGNyZWF0ZVJlcXVlc3RPcHRpb25zKHRoaXMuX3VybCwgdGhpcy5faHR0cEhlYWRlcnMpLCBoYW5kbGVSZXNwb25zZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVxdWVzdC5vbihcImVycm9yXCIsIHJlYXNvbiA9PiB7XG4gICAgICB0aGlzLl9zdG9yZWRFcnJvciA9IHJlYXNvbjtcbiAgICB9KTtcblxuICAgIHRoaXMuX3JlcXVlc3QuZW5kKCk7XG4gIH1cblxufVxuXG5jbGFzcyBQREZOb2RlU3RyZWFtRnNGdWxsUmVhZGVyIGV4dGVuZHMgQmFzZUZ1bGxSZWFkZXIge1xuICBjb25zdHJ1Y3RvcihzdHJlYW0pIHtcbiAgICBzdXBlcihzdHJlYW0pO1xuICAgIGxldCBwYXRoID0gZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMuX3VybC5wYXRoKTtcblxuICAgIGlmIChmaWxlVXJpUmVnZXgudGVzdCh0aGlzLl91cmwuaHJlZikpIHtcbiAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC8vLCBcIlwiKTtcbiAgICB9XG5cbiAgICBmcy5sc3RhdChwYXRoLCAoZXJyb3IsIHN0YXQpID0+IHtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gXCJFTk9FTlRcIikge1xuICAgICAgICAgIGVycm9yID0gbmV3IF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24oYE1pc3NpbmcgUERGIFwiJHtwYXRofVwiLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3RvcmVkRXJyb3IgPSBlcnJvcjtcblxuICAgICAgICB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZWplY3QoZXJyb3IpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY29udGVudExlbmd0aCA9IHN0YXQuc2l6ZTtcblxuICAgICAgdGhpcy5fc2V0UmVhZGFibGVTdHJlYW0oZnMuY3JlYXRlUmVhZFN0cmVhbShwYXRoKSk7XG5cbiAgICAgIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICB9KTtcbiAgfVxuXG59XG5cbmNsYXNzIFBERk5vZGVTdHJlYW1Gc1JhbmdlUmVhZGVyIGV4dGVuZHMgQmFzZVJhbmdlUmVhZGVyIHtcbiAgY29uc3RydWN0b3Ioc3RyZWFtLCBzdGFydCwgZW5kKSB7XG4gICAgc3VwZXIoc3RyZWFtKTtcbiAgICBsZXQgcGF0aCA9IGRlY29kZVVSSUNvbXBvbmVudCh0aGlzLl91cmwucGF0aCk7XG5cbiAgICBpZiAoZmlsZVVyaVJlZ2V4LnRlc3QodGhpcy5fdXJsLmhyZWYpKSB7XG4gICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eXFwvLywgXCJcIik7XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0UmVhZGFibGVTdHJlYW0oZnMuY3JlYXRlUmVhZFN0cmVhbShwYXRoLCB7XG4gICAgICBzdGFydCxcbiAgICAgIGVuZDogZW5kIC0gMVxuICAgIH0pKTtcbiAgfVxuXG59XG5cbi8qKiovIH0pLFxuLyogMjQgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuY3JlYXRlUmVzcG9uc2VTdGF0dXNFcnJvciA9IGNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3I7XG5leHBvcnRzLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIgPSBleHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyO1xuZXhwb3J0cy52YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcyA9IHZhbGlkYXRlUmFuZ2VSZXF1ZXN0Q2FwYWJpbGl0aWVzO1xuZXhwb3J0cy52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzID0gdmFsaWRhdGVSZXNwb25zZVN0YXR1cztcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9jb250ZW50X2Rpc3Bvc2l0aW9uID0gX193X3BkZmpzX3JlcXVpcmVfXygyNSk7XG5cbnZhciBfZGlzcGxheV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oMSk7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUmFuZ2VSZXF1ZXN0Q2FwYWJpbGl0aWVzKHtcbiAgZ2V0UmVzcG9uc2VIZWFkZXIsXG4gIGlzSHR0cCxcbiAgcmFuZ2VDaHVua1NpemUsXG4gIGRpc2FibGVSYW5nZVxufSkge1xuICAoMCwgX3V0aWwuYXNzZXJ0KShyYW5nZUNodW5rU2l6ZSA+IDAsIFwiUmFuZ2UgY2h1bmsgc2l6ZSBtdXN0IGJlIGxhcmdlciB0aGFuIHplcm9cIik7XG4gIGNvbnN0IHJldHVyblZhbHVlcyA9IHtcbiAgICBhbGxvd1JhbmdlUmVxdWVzdHM6IGZhbHNlLFxuICAgIHN1Z2dlc3RlZExlbmd0aDogdW5kZWZpbmVkXG4gIH07XG4gIGNvbnN0IGxlbmd0aCA9IHBhcnNlSW50KGdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1MZW5ndGhcIiksIDEwKTtcblxuICBpZiAoIU51bWJlci5pc0ludGVnZXIobGVuZ3RoKSkge1xuICAgIHJldHVybiByZXR1cm5WYWx1ZXM7XG4gIH1cblxuICByZXR1cm5WYWx1ZXMuc3VnZ2VzdGVkTGVuZ3RoID0gbGVuZ3RoO1xuXG4gIGlmIChsZW5ndGggPD0gMiAqIHJhbmdlQ2h1bmtTaXplKSB7XG4gICAgcmV0dXJuIHJldHVyblZhbHVlcztcbiAgfVxuXG4gIGlmIChkaXNhYmxlUmFuZ2UgfHwgIWlzSHR0cCkge1xuICAgIHJldHVybiByZXR1cm5WYWx1ZXM7XG4gIH1cblxuICBpZiAoZ2V0UmVzcG9uc2VIZWFkZXIoXCJBY2NlcHQtUmFuZ2VzXCIpICE9PSBcImJ5dGVzXCIpIHtcbiAgICByZXR1cm4gcmV0dXJuVmFsdWVzO1xuICB9XG5cbiAgY29uc3QgY29udGVudEVuY29kaW5nID0gZ2V0UmVzcG9uc2VIZWFkZXIoXCJDb250ZW50LUVuY29kaW5nXCIpIHx8IFwiaWRlbnRpdHlcIjtcblxuICBpZiAoY29udGVudEVuY29kaW5nICE9PSBcImlkZW50aXR5XCIpIHtcbiAgICByZXR1cm4gcmV0dXJuVmFsdWVzO1xuICB9XG5cbiAgcmV0dXJuVmFsdWVzLmFsbG93UmFuZ2VSZXF1ZXN0cyA9IHRydWU7XG4gIHJldHVybiByZXR1cm5WYWx1ZXM7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIoZ2V0UmVzcG9uc2VIZWFkZXIpIHtcbiAgY29uc3QgY29udGVudERpc3Bvc2l0aW9uID0gZ2V0UmVzcG9uc2VIZWFkZXIoXCJDb250ZW50LURpc3Bvc2l0aW9uXCIpO1xuXG4gIGlmIChjb250ZW50RGlzcG9zaXRpb24pIHtcbiAgICBsZXQgZmlsZW5hbWUgPSAoMCwgX2NvbnRlbnRfZGlzcG9zaXRpb24uZ2V0RmlsZW5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uSGVhZGVyKShjb250ZW50RGlzcG9zaXRpb24pO1xuXG4gICAgaWYgKGZpbGVuYW1lLmluY2x1ZGVzKFwiJVwiKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZmlsZW5hbWUgPSBkZWNvZGVVUklDb21wb25lbnQoZmlsZW5hbWUpO1xuICAgICAgfSBjYXRjaCAoZXgpIHt9XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfZGlzcGxheV91dGlscy5pc1BkZkZpbGUpKGZpbGVuYW1lKSkge1xuICAgICAgcmV0dXJuIGZpbGVuYW1lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSZXNwb25zZVN0YXR1c0Vycm9yKHN0YXR1cywgdXJsKSB7XG4gIGlmIChzdGF0dXMgPT09IDQwNCB8fCBzdGF0dXMgPT09IDAgJiYgdXJsLnN0YXJ0c1dpdGgoXCJmaWxlOlwiKSkge1xuICAgIHJldHVybiBuZXcgX3V0aWwuTWlzc2luZ1BERkV4Y2VwdGlvbignTWlzc2luZyBQREYgXCInICsgdXJsICsgJ1wiLicpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBfdXRpbC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24oYFVuZXhwZWN0ZWQgc2VydmVyIHJlc3BvbnNlICgke3N0YXR1c30pIHdoaWxlIHJldHJpZXZpbmcgUERGIFwiJHt1cmx9XCIuYCwgc3RhdHVzKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVSZXNwb25zZVN0YXR1cyhzdGF0dXMpIHtcbiAgcmV0dXJuIHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA2O1xufVxuXG4vKioqLyB9KSxcbi8qIDI1ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLmdldEZpbGVuYW1lRnJvbUNvbnRlbnREaXNwb3NpdGlvbkhlYWRlciA9IGdldEZpbGVuYW1lRnJvbUNvbnRlbnREaXNwb3NpdGlvbkhlYWRlcjtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuZnVuY3Rpb24gZ2V0RmlsZW5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uSGVhZGVyKGNvbnRlbnREaXNwb3NpdGlvbikge1xuICBsZXQgbmVlZHNFbmNvZGluZ0ZpeHVwID0gdHJ1ZTtcbiAgbGV0IHRtcCA9IHRvUGFyYW1SZWdFeHAoXCJmaWxlbmFtZVxcXFwqXCIsIFwiaVwiKS5leGVjKGNvbnRlbnREaXNwb3NpdGlvbik7XG5cbiAgaWYgKHRtcCkge1xuICAgIHRtcCA9IHRtcFsxXTtcbiAgICBsZXQgZmlsZW5hbWUgPSByZmMyNjE2dW5xdW90ZSh0bXApO1xuICAgIGZpbGVuYW1lID0gdW5lc2NhcGUoZmlsZW5hbWUpO1xuICAgIGZpbGVuYW1lID0gcmZjNTk4N2RlY29kZShmaWxlbmFtZSk7XG4gICAgZmlsZW5hbWUgPSByZmMyMDQ3ZGVjb2RlKGZpbGVuYW1lKTtcbiAgICByZXR1cm4gZml4dXBFbmNvZGluZyhmaWxlbmFtZSk7XG4gIH1cblxuICB0bXAgPSByZmMyMjMxZ2V0cGFyYW0oY29udGVudERpc3Bvc2l0aW9uKTtcblxuICBpZiAodG1wKSB7XG4gICAgY29uc3QgZmlsZW5hbWUgPSByZmMyMDQ3ZGVjb2RlKHRtcCk7XG4gICAgcmV0dXJuIGZpeHVwRW5jb2RpbmcoZmlsZW5hbWUpO1xuICB9XG5cbiAgdG1wID0gdG9QYXJhbVJlZ0V4cChcImZpbGVuYW1lXCIsIFwiaVwiKS5leGVjKGNvbnRlbnREaXNwb3NpdGlvbik7XG5cbiAgaWYgKHRtcCkge1xuICAgIHRtcCA9IHRtcFsxXTtcbiAgICBsZXQgZmlsZW5hbWUgPSByZmMyNjE2dW5xdW90ZSh0bXApO1xuICAgIGZpbGVuYW1lID0gcmZjMjA0N2RlY29kZShmaWxlbmFtZSk7XG4gICAgcmV0dXJuIGZpeHVwRW5jb2RpbmcoZmlsZW5hbWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9QYXJhbVJlZ0V4cChhdHRyaWJ1dGVQYXR0ZXJuLCBmbGFncykge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKFwiKD86Xnw7KVxcXFxzKlwiICsgYXR0cmlidXRlUGF0dGVybiArIFwiXFxcXHMqPVxcXFxzKlwiICsgXCIoXCIgKyAnW15cIjtcXFxcc11bXjtcXFxcc10qJyArIFwifFwiICsgJ1wiKD86W15cIlxcXFxcXFxcXXxcXFxcXFxcXFwiPykrXCI/JyArIFwiKVwiLCBmbGFncyk7XG4gIH1cblxuICBmdW5jdGlvbiB0ZXh0ZGVjb2RlKGVuY29kaW5nLCB2YWx1ZSkge1xuICAgIGlmIChlbmNvZGluZykge1xuICAgICAgaWYgKCEvXltcXHgwMC1cXHhGRl0rJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKGVuY29kaW5nLCB7XG4gICAgICAgICAgZmF0YWw6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKSh2YWx1ZSk7XG4gICAgICAgIHZhbHVlID0gZGVjb2Rlci5kZWNvZGUoYnVmZmVyKTtcbiAgICAgICAgbmVlZHNFbmNvZGluZ0ZpeHVwID0gZmFsc2U7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICgvXnV0Zi0/OCQvaS50ZXN0KGVuY29kaW5nKSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUodmFsdWUpKTtcbiAgICAgICAgICAgIG5lZWRzRW5jb2RpbmdGaXh1cCA9IGZhbHNlO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge31cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpeHVwRW5jb2RpbmcodmFsdWUpIHtcbiAgICBpZiAobmVlZHNFbmNvZGluZ0ZpeHVwICYmIC9bXFx4ODAtXFx4ZmZdLy50ZXN0KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB0ZXh0ZGVjb2RlKFwidXRmLThcIiwgdmFsdWUpO1xuXG4gICAgICBpZiAobmVlZHNFbmNvZGluZ0ZpeHVwKSB7XG4gICAgICAgIHZhbHVlID0gdGV4dGRlY29kZShcImlzby04ODU5LTFcIiwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJmYzIyMzFnZXRwYXJhbShjb250ZW50RGlzcG9zaXRpb25TdHIpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gW107XG4gICAgbGV0IG1hdGNoO1xuICAgIGNvbnN0IGl0ZXIgPSB0b1BhcmFtUmVnRXhwKFwiZmlsZW5hbWVcXFxcKigoPyEwXFxcXGQpXFxcXGQrKShcXFxcKj8pXCIsIFwiaWdcIik7XG5cbiAgICB3aGlsZSAoKG1hdGNoID0gaXRlci5leGVjKGNvbnRlbnREaXNwb3NpdGlvblN0cikpICE9PSBudWxsKSB7XG4gICAgICBsZXQgWywgbiwgcXVvdCwgcGFydF0gPSBtYXRjaDtcbiAgICAgIG4gPSBwYXJzZUludChuLCAxMCk7XG5cbiAgICAgIGlmIChuIGluIG1hdGNoZXMpIHtcbiAgICAgICAgaWYgKG4gPT09IDApIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBtYXRjaGVzW25dID0gW3F1b3QsIHBhcnRdO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnRzID0gW107XG5cbiAgICBmb3IgKGxldCBuID0gMDsgbiA8IG1hdGNoZXMubGVuZ3RoOyArK24pIHtcbiAgICAgIGlmICghKG4gaW4gbWF0Y2hlcykpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGxldCBbcXVvdCwgcGFydF0gPSBtYXRjaGVzW25dO1xuICAgICAgcGFydCA9IHJmYzI2MTZ1bnF1b3RlKHBhcnQpO1xuXG4gICAgICBpZiAocXVvdCkge1xuICAgICAgICBwYXJ0ID0gdW5lc2NhcGUocGFydCk7XG5cbiAgICAgICAgaWYgKG4gPT09IDApIHtcbiAgICAgICAgICBwYXJ0ID0gcmZjNTk4N2RlY29kZShwYXJ0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwYXJ0cy5wdXNoKHBhcnQpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKFwiXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmZjMjYxNnVucXVvdGUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnXCInKSkge1xuICAgICAgY29uc3QgcGFydHMgPSB2YWx1ZS5zbGljZSgxKS5zcGxpdCgnXFxcXFwiJyk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY29uc3QgcXVvdGluZGV4ID0gcGFydHNbaV0uaW5kZXhPZignXCInKTtcblxuICAgICAgICBpZiAocXVvdGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHBhcnRzW2ldID0gcGFydHNbaV0uc2xpY2UoMCwgcXVvdGluZGV4KTtcbiAgICAgICAgICBwYXJ0cy5sZW5ndGggPSBpICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnRzW2ldID0gcGFydHNbaV0ucmVwbGFjZSgvXFxcXCguKS9nLCBcIiQxXCIpO1xuICAgICAgfVxuXG4gICAgICB2YWx1ZSA9IHBhcnRzLmpvaW4oJ1wiJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gcmZjNTk4N2RlY29kZShleHR2YWx1ZSkge1xuICAgIGNvbnN0IGVuY29kaW5nZW5kID0gZXh0dmFsdWUuaW5kZXhPZihcIidcIik7XG5cbiAgICBpZiAoZW5jb2RpbmdlbmQgPT09IC0xKSB7XG4gICAgICByZXR1cm4gZXh0dmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgZW5jb2RpbmcgPSBleHR2YWx1ZS5zbGljZSgwLCBlbmNvZGluZ2VuZCk7XG4gICAgY29uc3QgbGFuZ3ZhbHVlID0gZXh0dmFsdWUuc2xpY2UoZW5jb2RpbmdlbmQgKyAxKTtcbiAgICBjb25zdCB2YWx1ZSA9IGxhbmd2YWx1ZS5yZXBsYWNlKC9eW14nXSonLywgXCJcIik7XG4gICAgcmV0dXJuIHRleHRkZWNvZGUoZW5jb2RpbmcsIHZhbHVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJmYzIwNDdkZWNvZGUodmFsdWUpIHtcbiAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoXCI9P1wiKSB8fCAvW1xceDAwLVxceDE5XFx4ODAtXFx4ZmZdLy50ZXN0KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC89XFw/KFtcXHctXSopXFw/KFtRcUJiXSlcXD8oKD86W14/XXxcXD8oPyE9KSkqKVxcPz0vZywgZnVuY3Rpb24gKG1hdGNoZXMsIGNoYXJzZXQsIGVuY29kaW5nLCB0ZXh0KSB7XG4gICAgICBpZiAoZW5jb2RpbmcgPT09IFwicVwiIHx8IGVuY29kaW5nID09PSBcIlFcIikge1xuICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9fL2csIFwiIFwiKTtcbiAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgvPShbMC05YS1mQS1GXXsyfSkvZywgZnVuY3Rpb24gKG1hdGNoLCBoZXgpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChoZXgsIDE2KSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGV4dGRlY29kZShjaGFyc2V0LCB0ZXh0KTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgdGV4dCA9IGF0b2IodGV4dCk7XG4gICAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgICByZXR1cm4gdGV4dGRlY29kZShjaGFyc2V0LCB0ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBcIlwiO1xufVxuXG4vKioqLyB9KSxcbi8qIDI2ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlBERk5ldHdvcmtTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfbmV0d29ya191dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oMjQpO1xuXG47XG5jb25zdCBPS19SRVNQT05TRSA9IDIwMDtcbmNvbnN0IFBBUlRJQUxfQ09OVEVOVF9SRVNQT05TRSA9IDIwNjtcblxuZnVuY3Rpb24gZ2V0QXJyYXlCdWZmZXIoeGhyKSB7XG4gIGNvbnN0IGRhdGEgPSB4aHIucmVzcG9uc2U7XG5cbiAgaWYgKHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBjb25zdCBhcnJheSA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkYXRhKTtcbiAgcmV0dXJuIGFycmF5LmJ1ZmZlcjtcbn1cblxuY2xhc3MgTmV0d29ya01hbmFnZXIge1xuICBjb25zdHJ1Y3Rvcih1cmwsIGFyZ3MgPSB7fSkge1xuICAgIHRoaXMudXJsID0gdXJsO1xuICAgIHRoaXMuaXNIdHRwID0gL15odHRwcz86L2kudGVzdCh1cmwpO1xuICAgIHRoaXMuaHR0cEhlYWRlcnMgPSB0aGlzLmlzSHR0cCAmJiBhcmdzLmh0dHBIZWFkZXJzIHx8IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy53aXRoQ3JlZGVudGlhbHMgPSBhcmdzLndpdGhDcmVkZW50aWFscyB8fCBmYWxzZTtcblxuICAgIHRoaXMuZ2V0WGhyID0gYXJncy5nZXRYaHIgfHwgZnVuY3Rpb24gTmV0d29ya01hbmFnZXJfZ2V0WGhyKCkge1xuICAgICAgcmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIH07XG5cbiAgICB0aGlzLmN1cnJYaHJJZCA9IDA7XG4gICAgdGhpcy5wZW5kaW5nUmVxdWVzdHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgcmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQsIGxpc3RlbmVycykge1xuICAgIGNvbnN0IGFyZ3MgPSB7XG4gICAgICBiZWdpbixcbiAgICAgIGVuZFxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gbGlzdGVuZXJzKSB7XG4gICAgICBhcmdzW3Byb3BdID0gbGlzdGVuZXJzW3Byb3BdO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoYXJncyk7XG4gIH1cblxuICByZXF1ZXN0RnVsbChsaXN0ZW5lcnMpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KGxpc3RlbmVycyk7XG4gIH1cblxuICByZXF1ZXN0KGFyZ3MpIHtcbiAgICBjb25zdCB4aHIgPSB0aGlzLmdldFhocigpO1xuICAgIGNvbnN0IHhocklkID0gdGhpcy5jdXJyWGhySWQrKztcbiAgICBjb25zdCBwZW5kaW5nUmVxdWVzdCA9IHRoaXMucGVuZGluZ1JlcXVlc3RzW3hocklkXSA9IHtcbiAgICAgIHhoclxuICAgIH07XG4gICAgeGhyLm9wZW4oXCJHRVRcIiwgdGhpcy51cmwpO1xuICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0aGlzLndpdGhDcmVkZW50aWFscztcblxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gdGhpcy5odHRwSGVhZGVycykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmh0dHBIZWFkZXJzW3Byb3BlcnR5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIocHJvcGVydHksIHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0h0dHAgJiYgXCJiZWdpblwiIGluIGFyZ3MgJiYgXCJlbmRcIiBpbiBhcmdzKSB7XG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIlJhbmdlXCIsIGBieXRlcz0ke2FyZ3MuYmVnaW59LSR7YXJncy5lbmQgLSAxfWApO1xuICAgICAgcGVuZGluZ1JlcXVlc3QuZXhwZWN0ZWRTdGF0dXMgPSBQQVJUSUFMX0NPTlRFTlRfUkVTUE9OU0U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdSZXF1ZXN0LmV4cGVjdGVkU3RhdHVzID0gT0tfUkVTUE9OU0U7XG4gICAgfVxuXG4gICAgeGhyLnJlc3BvbnNlVHlwZSA9IFwiYXJyYXlidWZmZXJcIjtcblxuICAgIGlmIChhcmdzLm9uRXJyb3IpIHtcbiAgICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICBhcmdzLm9uRXJyb3IoeGhyLnN0YXR1cyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSB0aGlzLm9uU3RhdGVDaGFuZ2UuYmluZCh0aGlzLCB4aHJJZCk7XG4gICAgeGhyLm9ucHJvZ3Jlc3MgPSB0aGlzLm9uUHJvZ3Jlc3MuYmluZCh0aGlzLCB4aHJJZCk7XG4gICAgcGVuZGluZ1JlcXVlc3Qub25IZWFkZXJzUmVjZWl2ZWQgPSBhcmdzLm9uSGVhZGVyc1JlY2VpdmVkO1xuICAgIHBlbmRpbmdSZXF1ZXN0Lm9uRG9uZSA9IGFyZ3Mub25Eb25lO1xuICAgIHBlbmRpbmdSZXF1ZXN0Lm9uRXJyb3IgPSBhcmdzLm9uRXJyb3I7XG4gICAgcGVuZGluZ1JlcXVlc3Qub25Qcm9ncmVzcyA9IGFyZ3Mub25Qcm9ncmVzcztcbiAgICB4aHIuc2VuZChudWxsKTtcbiAgICByZXR1cm4geGhySWQ7XG4gIH1cblxuICBvblByb2dyZXNzKHhocklkLCBldnQpIHtcbiAgICBjb25zdCBwZW5kaW5nUmVxdWVzdCA9IHRoaXMucGVuZGluZ1JlcXVlc3RzW3hocklkXTtcblxuICAgIGlmICghcGVuZGluZ1JlcXVlc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwZW5kaW5nUmVxdWVzdC5vblByb2dyZXNzPy4oZXZ0KTtcbiAgfVxuXG4gIG9uU3RhdGVDaGFuZ2UoeGhySWQsIGV2dCkge1xuICAgIGNvbnN0IHBlbmRpbmdSZXF1ZXN0ID0gdGhpcy5wZW5kaW5nUmVxdWVzdHNbeGhySWRdO1xuXG4gICAgaWYgKCFwZW5kaW5nUmVxdWVzdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHhociA9IHBlbmRpbmdSZXF1ZXN0LnhocjtcblxuICAgIGlmICh4aHIucmVhZHlTdGF0ZSA+PSAyICYmIHBlbmRpbmdSZXF1ZXN0Lm9uSGVhZGVyc1JlY2VpdmVkKSB7XG4gICAgICBwZW5kaW5nUmVxdWVzdC5vbkhlYWRlcnNSZWNlaXZlZCgpO1xuICAgICAgZGVsZXRlIHBlbmRpbmdSZXF1ZXN0Lm9uSGVhZGVyc1JlY2VpdmVkO1xuICAgIH1cblxuICAgIGlmICh4aHIucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghKHhocklkIGluIHRoaXMucGVuZGluZ1JlcXVlc3RzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRlbGV0ZSB0aGlzLnBlbmRpbmdSZXF1ZXN0c1t4aHJJZF07XG5cbiAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMCAmJiB0aGlzLmlzSHR0cCkge1xuICAgICAgcGVuZGluZ1JlcXVlc3Qub25FcnJvcj8uKHhoci5zdGF0dXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHhoclN0YXR1cyA9IHhoci5zdGF0dXMgfHwgT0tfUkVTUE9OU0U7XG4gICAgY29uc3Qgb2tfcmVzcG9uc2Vfb25fcmFuZ2VfcmVxdWVzdCA9IHhoclN0YXR1cyA9PT0gT0tfUkVTUE9OU0UgJiYgcGVuZGluZ1JlcXVlc3QuZXhwZWN0ZWRTdGF0dXMgPT09IFBBUlRJQUxfQ09OVEVOVF9SRVNQT05TRTtcblxuICAgIGlmICghb2tfcmVzcG9uc2Vfb25fcmFuZ2VfcmVxdWVzdCAmJiB4aHJTdGF0dXMgIT09IHBlbmRpbmdSZXF1ZXN0LmV4cGVjdGVkU3RhdHVzKSB7XG4gICAgICBwZW5kaW5nUmVxdWVzdC5vbkVycm9yPy4oeGhyLnN0YXR1cyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2h1bmsgPSBnZXRBcnJheUJ1ZmZlcih4aHIpO1xuXG4gICAgaWYgKHhoclN0YXR1cyA9PT0gUEFSVElBTF9DT05URU5UX1JFU1BPTlNFKSB7XG4gICAgICBjb25zdCByYW5nZUhlYWRlciA9IHhoci5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtUmFuZ2VcIik7XG4gICAgICBjb25zdCBtYXRjaGVzID0gL2J5dGVzIChcXGQrKS0oXFxkKylcXC8oXFxkKykvLmV4ZWMocmFuZ2VIZWFkZXIpO1xuICAgICAgcGVuZGluZ1JlcXVlc3Qub25Eb25lKHtcbiAgICAgICAgYmVnaW46IHBhcnNlSW50KG1hdGNoZXNbMV0sIDEwKSxcbiAgICAgICAgY2h1bmtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoY2h1bmspIHtcbiAgICAgIHBlbmRpbmdSZXF1ZXN0Lm9uRG9uZSh7XG4gICAgICAgIGJlZ2luOiAwLFxuICAgICAgICBjaHVua1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdSZXF1ZXN0Lm9uRXJyb3I/Lih4aHIuc3RhdHVzKTtcbiAgICB9XG4gIH1cblxuICBnZXRSZXF1ZXN0WGhyKHhocklkKSB7XG4gICAgcmV0dXJuIHRoaXMucGVuZGluZ1JlcXVlc3RzW3hocklkXS54aHI7XG4gIH1cblxuICBpc1BlbmRpbmdSZXF1ZXN0KHhocklkKSB7XG4gICAgcmV0dXJuIHhocklkIGluIHRoaXMucGVuZGluZ1JlcXVlc3RzO1xuICB9XG5cbiAgYWJvcnRSZXF1ZXN0KHhocklkKSB7XG4gICAgY29uc3QgeGhyID0gdGhpcy5wZW5kaW5nUmVxdWVzdHNbeGhySWRdLnhocjtcbiAgICBkZWxldGUgdGhpcy5wZW5kaW5nUmVxdWVzdHNbeGhySWRdO1xuICAgIHhoci5hYm9ydCgpO1xuICB9XG5cbn1cblxuY2xhc3MgUERGTmV0d29ya1N0cmVhbSB7XG4gIGNvbnN0cnVjdG9yKHNvdXJjZSkge1xuICAgIHRoaXMuX3NvdXJjZSA9IHNvdXJjZTtcbiAgICB0aGlzLl9tYW5hZ2VyID0gbmV3IE5ldHdvcmtNYW5hZ2VyKHNvdXJjZS51cmwsIHtcbiAgICAgIGh0dHBIZWFkZXJzOiBzb3VyY2UuaHR0cEhlYWRlcnMsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHNvdXJjZS53aXRoQ3JlZGVudGlhbHNcbiAgICB9KTtcbiAgICB0aGlzLl9yYW5nZUNodW5rU2l6ZSA9IHNvdXJjZS5yYW5nZUNodW5rU2l6ZTtcbiAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IG51bGw7XG4gICAgdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycyA9IFtdO1xuICB9XG5cbiAgX29uUmFuZ2VSZXF1ZXN0UmVhZGVyQ2xvc2VkKHJlYWRlcikge1xuICAgIGNvbnN0IGkgPSB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLmluZGV4T2YocmVhZGVyKTtcblxuICAgIGlmIChpID49IDApIHtcbiAgICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgfVxuXG4gIGdldEZ1bGxSZWFkZXIoKSB7XG4gICAgKDAsIF91dGlsLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLCBcIlBERk5ldHdvcmtTdHJlYW0uZ2V0RnVsbFJlYWRlciBjYW4gb25seSBiZSBjYWxsZWQgb25jZS5cIik7XG4gICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBuZXcgUERGTmV0d29ya1N0cmVhbUZ1bGxSZXF1ZXN0UmVhZGVyKHRoaXMuX21hbmFnZXIsIHRoaXMuX3NvdXJjZSk7XG4gICAgcmV0dXJuIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyO1xuICB9XG5cbiAgZ2V0UmFuZ2VSZWFkZXIoYmVnaW4sIGVuZCkge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBQREZOZXR3b3JrU3RyZWFtUmFuZ2VSZXF1ZXN0UmVhZGVyKHRoaXMuX21hbmFnZXIsIGJlZ2luLCBlbmQpO1xuICAgIHJlYWRlci5vbkNsb3NlZCA9IHRoaXMuX29uUmFuZ2VSZXF1ZXN0UmVhZGVyQ2xvc2VkLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2gocmVhZGVyKTtcblxuICAgIHJldHVybiByZWFkZXI7XG4gIH1cblxuICBjYW5jZWxBbGxSZXF1ZXN0cyhyZWFzb24pIHtcbiAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj8uY2FuY2VsKHJlYXNvbik7XG5cbiAgICBmb3IgKGNvbnN0IHJlYWRlciBvZiB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApKSB7XG4gICAgICByZWFkZXIuY2FuY2VsKHJlYXNvbik7XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5QREZOZXR3b3JrU3RyZWFtID0gUERGTmV0d29ya1N0cmVhbTtcblxuY2xhc3MgUERGTmV0d29ya1N0cmVhbUZ1bGxSZXF1ZXN0UmVhZGVyIHtcbiAgY29uc3RydWN0b3IobWFuYWdlciwgc291cmNlKSB7XG4gICAgdGhpcy5fbWFuYWdlciA9IG1hbmFnZXI7XG4gICAgY29uc3QgYXJncyA9IHtcbiAgICAgIG9uSGVhZGVyc1JlY2VpdmVkOiB0aGlzLl9vbkhlYWRlcnNSZWNlaXZlZC5iaW5kKHRoaXMpLFxuICAgICAgb25Eb25lOiB0aGlzLl9vbkRvbmUuYmluZCh0aGlzKSxcbiAgICAgIG9uRXJyb3I6IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKSxcbiAgICAgIG9uUHJvZ3Jlc3M6IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKVxuICAgIH07XG4gICAgdGhpcy5fdXJsID0gc291cmNlLnVybDtcbiAgICB0aGlzLl9mdWxsUmVxdWVzdElkID0gbWFuYWdlci5yZXF1ZXN0RnVsbChhcmdzKTtcbiAgICB0aGlzLl9oZWFkZXJzUmVjZWl2ZWRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgIHRoaXMuX2Rpc2FibGVSYW5nZSA9IHNvdXJjZS5kaXNhYmxlUmFuZ2UgfHwgZmFsc2U7XG4gICAgdGhpcy5fY29udGVudExlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG4gICAgdGhpcy5fcmFuZ2VDaHVua1NpemUgPSBzb3VyY2UucmFuZ2VDaHVua1NpemU7XG5cbiAgICBpZiAoIXRoaXMuX3JhbmdlQ2h1bmtTaXplICYmICF0aGlzLl9kaXNhYmxlUmFuZ2UpIHtcbiAgICAgIHRoaXMuX2Rpc2FibGVSYW5nZSA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5fY2FjaGVkQ2h1bmtzID0gW107XG4gICAgdGhpcy5fcmVxdWVzdHMgPSBbXTtcbiAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgdGhpcy5fc3RvcmVkRXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZmlsZW5hbWUgPSBudWxsO1xuICAgIHRoaXMub25Qcm9ncmVzcyA9IG51bGw7XG4gIH1cblxuICBfb25IZWFkZXJzUmVjZWl2ZWQoKSB7XG4gICAgY29uc3QgZnVsbFJlcXVlc3RYaHJJZCA9IHRoaXMuX2Z1bGxSZXF1ZXN0SWQ7XG5cbiAgICBjb25zdCBmdWxsUmVxdWVzdFhociA9IHRoaXMuX21hbmFnZXIuZ2V0UmVxdWVzdFhocihmdWxsUmVxdWVzdFhocklkKTtcblxuICAgIGNvbnN0IGdldFJlc3BvbnNlSGVhZGVyID0gbmFtZSA9PiB7XG4gICAgICByZXR1cm4gZnVsbFJlcXVlc3RYaHIuZ2V0UmVzcG9uc2VIZWFkZXIobmFtZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHtcbiAgICAgIGFsbG93UmFuZ2VSZXF1ZXN0cyxcbiAgICAgIHN1Z2dlc3RlZExlbmd0aFxuICAgIH0gPSAoMCwgX25ldHdvcmtfdXRpbHMudmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXMpKHtcbiAgICAgIGdldFJlc3BvbnNlSGVhZGVyLFxuICAgICAgaXNIdHRwOiB0aGlzLl9tYW5hZ2VyLmlzSHR0cCxcbiAgICAgIHJhbmdlQ2h1bmtTaXplOiB0aGlzLl9yYW5nZUNodW5rU2l6ZSxcbiAgICAgIGRpc2FibGVSYW5nZTogdGhpcy5fZGlzYWJsZVJhbmdlXG4gICAgfSk7XG5cbiAgICBpZiAoYWxsb3dSYW5nZVJlcXVlc3RzKSB7XG4gICAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jb250ZW50TGVuZ3RoID0gc3VnZ2VzdGVkTGVuZ3RoIHx8IHRoaXMuX2NvbnRlbnRMZW5ndGg7XG4gICAgdGhpcy5fZmlsZW5hbWUgPSAoMCwgX25ldHdvcmtfdXRpbHMuZXh0cmFjdEZpbGVuYW1lRnJvbUhlYWRlcikoZ2V0UmVzcG9uc2VIZWFkZXIpO1xuXG4gICAgaWYgKHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMuX21hbmFnZXIuYWJvcnRSZXF1ZXN0KGZ1bGxSZXF1ZXN0WGhySWQpO1xuICAgIH1cblxuICAgIHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICB9XG5cbiAgX29uRG9uZShkYXRhKSB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmICh0aGlzLl9yZXF1ZXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RDYXBhYmlsaXR5ID0gdGhpcy5fcmVxdWVzdHMuc2hpZnQoKTtcblxuICAgICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHtcbiAgICAgICAgICB2YWx1ZTogZGF0YS5jaHVuayxcbiAgICAgICAgICBkb25lOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2NhY2hlZENodW5rcy5wdXNoKGRhdGEuY2h1bmspO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuX2NhY2hlZENodW5rcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0Q2FwYWJpbGl0eSBvZiB0aGlzLl9yZXF1ZXN0cykge1xuICAgICAgcmVxdWVzdENhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX3JlcXVlc3RzLmxlbmd0aCA9IDA7XG4gIH1cblxuICBfb25FcnJvcihzdGF0dXMpIHtcbiAgICB0aGlzLl9zdG9yZWRFcnJvciA9ICgwLCBfbmV0d29ya191dGlscy5jcmVhdGVSZXNwb25zZVN0YXR1c0Vycm9yKShzdGF0dXMsIHRoaXMuX3VybCk7XG5cbiAgICB0aGlzLl9oZWFkZXJzUmVjZWl2ZWRDYXBhYmlsaXR5LnJlamVjdCh0aGlzLl9zdG9yZWRFcnJvcik7XG5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RDYXBhYmlsaXR5IG9mIHRoaXMuX3JlcXVlc3RzKSB7XG4gICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZWplY3QodGhpcy5fc3RvcmVkRXJyb3IpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlcXVlc3RzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5fY2FjaGVkQ2h1bmtzLmxlbmd0aCA9IDA7XG4gIH1cblxuICBfb25Qcm9ncmVzcyhldnQpIHtcbiAgICB0aGlzLm9uUHJvZ3Jlc3M/Lih7XG4gICAgICBsb2FkZWQ6IGV2dC5sb2FkZWQsXG4gICAgICB0b3RhbDogZXZ0Lmxlbmd0aENvbXB1dGFibGUgPyBldnQudG90YWwgOiB0aGlzLl9jb250ZW50TGVuZ3RoXG4gICAgfSk7XG4gIH1cblxuICBnZXQgZmlsZW5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVuYW1lO1xuICB9XG5cbiAgZ2V0IGlzUmFuZ2VTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IGNvbnRlbnRMZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGg7XG4gIH1cblxuICBnZXQgaGVhZGVyc1JlYWR5KCkge1xuICAgIHJldHVybiB0aGlzLl9oZWFkZXJzUmVjZWl2ZWRDYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cblxuICBhc3luYyByZWFkKCkge1xuICAgIGlmICh0aGlzLl9zdG9yZWRFcnJvcikge1xuICAgICAgdGhyb3cgdGhpcy5fc3RvcmVkRXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NhY2hlZENodW5rcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjaHVuayA9IHRoaXMuX2NhY2hlZENodW5rcy5zaGlmdCgpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogY2h1bmssXG4gICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9kb25lKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICBkb25lOiB0cnVlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuXG4gICAgdGhpcy5fcmVxdWVzdHMucHVzaChyZXF1ZXN0Q2FwYWJpbGl0eSk7XG5cbiAgICByZXR1cm4gcmVxdWVzdENhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIGNhbmNlbChyZWFzb24pIHtcbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcblxuICAgIHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucmVqZWN0KHJlYXNvbik7XG5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RDYXBhYmlsaXR5IG9mIHRoaXMuX3JlcXVlc3RzKSB7XG4gICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHtcbiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVxdWVzdHMubGVuZ3RoID0gMDtcblxuICAgIGlmICh0aGlzLl9tYW5hZ2VyLmlzUGVuZGluZ1JlcXVlc3QodGhpcy5fZnVsbFJlcXVlc3RJZCkpIHtcbiAgICAgIHRoaXMuX21hbmFnZXIuYWJvcnRSZXF1ZXN0KHRoaXMuX2Z1bGxSZXF1ZXN0SWQpO1xuICAgIH1cblxuICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFBERk5ldHdvcmtTdHJlYW1SYW5nZVJlcXVlc3RSZWFkZXIge1xuICBjb25zdHJ1Y3RvcihtYW5hZ2VyLCBiZWdpbiwgZW5kKSB7XG4gICAgdGhpcy5fbWFuYWdlciA9IG1hbmFnZXI7XG4gICAgY29uc3QgYXJncyA9IHtcbiAgICAgIG9uRG9uZTogdGhpcy5fb25Eb25lLmJpbmQodGhpcyksXG4gICAgICBvbkVycm9yOiB0aGlzLl9vbkVycm9yLmJpbmQodGhpcyksXG4gICAgICBvblByb2dyZXNzOiB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcylcbiAgICB9O1xuICAgIHRoaXMuX3VybCA9IG1hbmFnZXIudXJsO1xuICAgIHRoaXMuX3JlcXVlc3RJZCA9IG1hbmFnZXIucmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQsIGFyZ3MpO1xuICAgIHRoaXMuX3JlcXVlc3RzID0gW107XG4gICAgdGhpcy5fcXVldWVkQ2h1bmsgPSBudWxsO1xuICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICB0aGlzLl9zdG9yZWRFcnJvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsO1xuICAgIHRoaXMub25DbG9zZWQgPSBudWxsO1xuICB9XG5cbiAgX2Nsb3NlKCkge1xuICAgIHRoaXMub25DbG9zZWQ/Lih0aGlzKTtcbiAgfVxuXG4gIF9vbkRvbmUoZGF0YSkge1xuICAgIGNvbnN0IGNodW5rID0gZGF0YS5jaHVuaztcblxuICAgIGlmICh0aGlzLl9yZXF1ZXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCByZXF1ZXN0Q2FwYWJpbGl0eSA9IHRoaXMuX3JlcXVlc3RzLnNoaWZ0KCk7XG5cbiAgICAgIHJlcXVlc3RDYXBhYmlsaXR5LnJlc29sdmUoe1xuICAgICAgICB2YWx1ZTogY2h1bmssXG4gICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcXVldWVkQ2h1bmsgPSBjaHVuaztcbiAgICB9XG5cbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcblxuICAgIGZvciAoY29uc3QgcmVxdWVzdENhcGFiaWxpdHkgb2YgdGhpcy5fcmVxdWVzdHMpIHtcbiAgICAgIHJlcXVlc3RDYXBhYmlsaXR5LnJlc29sdmUoe1xuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICBkb25lOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9yZXF1ZXN0cy5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fY2xvc2UoKTtcbiAgfVxuXG4gIF9vbkVycm9yKHN0YXR1cykge1xuICAgIHRoaXMuX3N0b3JlZEVycm9yID0gKDAsIF9uZXR3b3JrX3V0aWxzLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKHN0YXR1cywgdGhpcy5fdXJsKTtcblxuICAgIGZvciAoY29uc3QgcmVxdWVzdENhcGFiaWxpdHkgb2YgdGhpcy5fcmVxdWVzdHMpIHtcbiAgICAgIHJlcXVlc3RDYXBhYmlsaXR5LnJlamVjdCh0aGlzLl9zdG9yZWRFcnJvcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVxdWVzdHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLl9xdWV1ZWRDaHVuayA9IG51bGw7XG4gIH1cblxuICBfb25Qcm9ncmVzcyhldnQpIHtcbiAgICBpZiAoIXRoaXMuaXNTdHJlYW1pbmdTdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMub25Qcm9ncmVzcz8uKHtcbiAgICAgICAgbG9hZGVkOiBldnQubG9hZGVkXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgcmVhZCgpIHtcbiAgICBpZiAodGhpcy5fc3RvcmVkRXJyb3IpIHtcbiAgICAgIHRocm93IHRoaXMuX3N0b3JlZEVycm9yO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9xdWV1ZWRDaHVuayAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgY2h1bmsgPSB0aGlzLl9xdWV1ZWRDaHVuaztcbiAgICAgIHRoaXMuX3F1ZXVlZENodW5rID0gbnVsbDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiBjaHVuayxcbiAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2RvbmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG5cbiAgICB0aGlzLl9yZXF1ZXN0cy5wdXNoKHJlcXVlc3RDYXBhYmlsaXR5KTtcblxuICAgIHJldHVybiByZXF1ZXN0Q2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG5cbiAgY2FuY2VsKHJlYXNvbikge1xuICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0Q2FwYWJpbGl0eSBvZiB0aGlzLl9yZXF1ZXN0cykge1xuICAgICAgcmVxdWVzdENhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX3JlcXVlc3RzLmxlbmd0aCA9IDA7XG5cbiAgICBpZiAodGhpcy5fbWFuYWdlci5pc1BlbmRpbmdSZXF1ZXN0KHRoaXMuX3JlcXVlc3RJZCkpIHtcbiAgICAgIHRoaXMuX21hbmFnZXIuYWJvcnRSZXF1ZXN0KHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgfVxuXG4gICAgdGhpcy5fY2xvc2UoKTtcbiAgfVxuXG59XG5cbi8qKiovIH0pLFxuLyogMjcgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuUERGRmV0Y2hTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfbmV0d29ya191dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oMjQpO1xuXG47XG5cbmZ1bmN0aW9uIGNyZWF0ZUZldGNoT3B0aW9ucyhoZWFkZXJzLCB3aXRoQ3JlZGVudGlhbHMsIGFib3J0Q29udHJvbGxlcikge1xuICByZXR1cm4ge1xuICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICBoZWFkZXJzLFxuICAgIHNpZ25hbDogYWJvcnRDb250cm9sbGVyPy5zaWduYWwsXG4gICAgbW9kZTogXCJjb3JzXCIsXG4gICAgY3JlZGVudGlhbHM6IHdpdGhDcmVkZW50aWFscyA/IFwiaW5jbHVkZVwiIDogXCJzYW1lLW9yaWdpblwiLFxuICAgIHJlZGlyZWN0OiBcImZvbGxvd1wiXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUhlYWRlcnMoaHR0cEhlYWRlcnMpIHtcbiAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XG5cbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBodHRwSGVhZGVycykge1xuICAgIGNvbnN0IHZhbHVlID0gaHR0cEhlYWRlcnNbcHJvcGVydHldO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaGVhZGVycy5hcHBlbmQocHJvcGVydHksIHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBoZWFkZXJzO1xufVxuXG5jbGFzcyBQREZGZXRjaFN0cmVhbSB7XG4gIGNvbnN0cnVjdG9yKHNvdXJjZSkge1xuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgIHRoaXMuaXNIdHRwID0gL15odHRwcz86L2kudGVzdChzb3VyY2UudXJsKTtcbiAgICB0aGlzLmh0dHBIZWFkZXJzID0gdGhpcy5pc0h0dHAgJiYgc291cmNlLmh0dHBIZWFkZXJzIHx8IHt9O1xuICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyID0gbnVsbDtcbiAgICB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzID0gW107XG4gIH1cblxuICBnZXQgX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI/Ll9sb2FkZWQgPz8gMDtcbiAgfVxuXG4gIGdldEZ1bGxSZWFkZXIoKSB7XG4gICAgKDAsIF91dGlsLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLCBcIlBERkZldGNoU3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuXCIpO1xuICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyID0gbmV3IFBERkZldGNoU3RyZWFtUmVhZGVyKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcjtcbiAgfVxuXG4gIGdldFJhbmdlUmVhZGVyKGJlZ2luLCBlbmQpIHtcbiAgICBpZiAoZW5kIDw9IHRoaXMuX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IFBERkZldGNoU3RyZWFtUmFuZ2VSZWFkZXIodGhpcywgYmVnaW4sIGVuZCk7XG5cbiAgICB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2gocmVhZGVyKTtcblxuICAgIHJldHVybiByZWFkZXI7XG4gIH1cblxuICBjYW5jZWxBbGxSZXF1ZXN0cyhyZWFzb24pIHtcbiAgICBpZiAodGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpIHtcbiAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVhZGVyIG9mIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCkpIHtcbiAgICAgIHJlYWRlci5jYW5jZWwocmVhc29uKTtcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnRzLlBERkZldGNoU3RyZWFtID0gUERGRmV0Y2hTdHJlYW07XG5cbmNsYXNzIFBERkZldGNoU3RyZWFtUmVhZGVyIHtcbiAgY29uc3RydWN0b3Ioc3RyZWFtKSB7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuX3JlYWRlciA9IG51bGw7XG4gICAgdGhpcy5fbG9hZGVkID0gMDtcbiAgICB0aGlzLl9maWxlbmFtZSA9IG51bGw7XG4gICAgY29uc3Qgc291cmNlID0gc3RyZWFtLnNvdXJjZTtcbiAgICB0aGlzLl93aXRoQ3JlZGVudGlhbHMgPSBzb3VyY2Uud2l0aENyZWRlbnRpYWxzIHx8IGZhbHNlO1xuICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuICAgIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgIHRoaXMuX2Rpc2FibGVSYW5nZSA9IHNvdXJjZS5kaXNhYmxlUmFuZ2UgfHwgZmFsc2U7XG4gICAgdGhpcy5fcmFuZ2VDaHVua1NpemUgPSBzb3VyY2UucmFuZ2VDaHVua1NpemU7XG5cbiAgICBpZiAoIXRoaXMuX3JhbmdlQ2h1bmtTaXplICYmICF0aGlzLl9kaXNhYmxlUmFuZ2UpIHtcbiAgICAgIHRoaXMuX2Rpc2FibGVSYW5nZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBBYm9ydENvbnRyb2xsZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXMuX2Fib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9ICFzb3VyY2UuZGlzYWJsZVN0cmVhbTtcbiAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gIXNvdXJjZS5kaXNhYmxlUmFuZ2U7XG4gICAgdGhpcy5faGVhZGVycyA9IGNyZWF0ZUhlYWRlcnModGhpcy5fc3RyZWFtLmh0dHBIZWFkZXJzKTtcbiAgICBjb25zdCB1cmwgPSBzb3VyY2UudXJsO1xuICAgIGZldGNoKHVybCwgY3JlYXRlRmV0Y2hPcHRpb25zKHRoaXMuX2hlYWRlcnMsIHRoaXMuX3dpdGhDcmVkZW50aWFscywgdGhpcy5fYWJvcnRDb250cm9sbGVyKSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICBpZiAoISgwLCBfbmV0d29ya191dGlscy52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzKShyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgICAgIHRocm93ICgwLCBfbmV0d29ya191dGlscy5jcmVhdGVSZXNwb25zZVN0YXR1c0Vycm9yKShyZXNwb25zZS5zdGF0dXMsIHVybCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3JlYWRlciA9IHJlc3BvbnNlLmJvZHkuZ2V0UmVhZGVyKCk7XG5cbiAgICAgIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnJlc29sdmUoKTtcblxuICAgICAgY29uc3QgZ2V0UmVzcG9uc2VIZWFkZXIgPSBuYW1lID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KG5hbWUpO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qge1xuICAgICAgICBhbGxvd1JhbmdlUmVxdWVzdHMsXG4gICAgICAgIHN1Z2dlc3RlZExlbmd0aFxuICAgICAgfSA9ICgwLCBfbmV0d29ya191dGlscy52YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcykoe1xuICAgICAgICBnZXRSZXNwb25zZUhlYWRlcixcbiAgICAgICAgaXNIdHRwOiB0aGlzLl9zdHJlYW0uaXNIdHRwLFxuICAgICAgICByYW5nZUNodW5rU2l6ZTogdGhpcy5fcmFuZ2VDaHVua1NpemUsXG4gICAgICAgIGRpc2FibGVSYW5nZTogdGhpcy5fZGlzYWJsZVJhbmdlXG4gICAgICB9KTtcbiAgICAgIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQgPSBhbGxvd1JhbmdlUmVxdWVzdHM7XG4gICAgICB0aGlzLl9jb250ZW50TGVuZ3RoID0gc3VnZ2VzdGVkTGVuZ3RoIHx8IHRoaXMuX2NvbnRlbnRMZW5ndGg7XG4gICAgICB0aGlzLl9maWxlbmFtZSA9ICgwLCBfbmV0d29ya191dGlscy5leHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyKShnZXRSZXNwb25zZUhlYWRlcik7XG5cbiAgICAgIGlmICghdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQgJiYgdGhpcy5faXNSYW5nZVN1cHBvcnRlZCkge1xuICAgICAgICB0aGlzLmNhbmNlbChuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24oXCJTdHJlYW1pbmcgaXMgZGlzYWJsZWQuXCIpKTtcbiAgICAgIH1cbiAgICB9KS5jYXRjaCh0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZWplY3QpO1xuICAgIHRoaXMub25Qcm9ncmVzcyA9IG51bGw7XG4gIH1cblxuICBnZXQgaGVhZGVyc1JlYWR5KCkge1xuICAgIHJldHVybiB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG5cbiAgZ2V0IGZpbGVuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9maWxlbmFtZTtcbiAgfVxuXG4gIGdldCBjb250ZW50TGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl9jb250ZW50TGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGlzUmFuZ2VTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkO1xuICB9XG5cbiAgYXN5bmMgcmVhZCgpIHtcbiAgICBhd2FpdCB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgIGNvbnN0IHtcbiAgICAgIHZhbHVlLFxuICAgICAgZG9uZVxuICAgIH0gPSBhd2FpdCB0aGlzLl9yZWFkZXIucmVhZCgpO1xuXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBkb25lXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuX2xvYWRlZCArPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuXG4gICAgaWYgKHRoaXMub25Qcm9ncmVzcykge1xuICAgICAgdGhpcy5vblByb2dyZXNzKHtcbiAgICAgICAgbG9hZGVkOiB0aGlzLl9sb2FkZWQsXG4gICAgICAgIHRvdGFsOiB0aGlzLl9jb250ZW50TGVuZ3RoXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh2YWx1ZSkuYnVmZmVyO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogYnVmZmVyLFxuICAgICAgZG9uZTogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgY2FuY2VsKHJlYXNvbikge1xuICAgIGlmICh0aGlzLl9yZWFkZXIpIHtcbiAgICAgIHRoaXMuX3JlYWRlci5jYW5jZWwocmVhc29uKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICB0aGlzLl9hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICB9XG4gIH1cblxufVxuXG5jbGFzcyBQREZGZXRjaFN0cmVhbVJhbmdlUmVhZGVyIHtcbiAgY29uc3RydWN0b3Ioc3RyZWFtLCBiZWdpbiwgZW5kKSB7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuX3JlYWRlciA9IG51bGw7XG4gICAgdGhpcy5fbG9hZGVkID0gMDtcbiAgICBjb25zdCBzb3VyY2UgPSBzdHJlYW0uc291cmNlO1xuICAgIHRoaXMuX3dpdGhDcmVkZW50aWFscyA9IHNvdXJjZS53aXRoQ3JlZGVudGlhbHMgfHwgZmFsc2U7XG4gICAgdGhpcy5fcmVhZENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQgPSAhc291cmNlLmRpc2FibGVTdHJlYW07XG5cbiAgICBpZiAodHlwZW9mIEFib3J0Q29udHJvbGxlciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy5fYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIH1cblxuICAgIHRoaXMuX2hlYWRlcnMgPSBjcmVhdGVIZWFkZXJzKHRoaXMuX3N0cmVhbS5odHRwSGVhZGVycyk7XG5cbiAgICB0aGlzLl9oZWFkZXJzLmFwcGVuZChcIlJhbmdlXCIsIGBieXRlcz0ke2JlZ2lufS0ke2VuZCAtIDF9YCk7XG5cbiAgICBjb25zdCB1cmwgPSBzb3VyY2UudXJsO1xuICAgIGZldGNoKHVybCwgY3JlYXRlRmV0Y2hPcHRpb25zKHRoaXMuX2hlYWRlcnMsIHRoaXMuX3dpdGhDcmVkZW50aWFscywgdGhpcy5fYWJvcnRDb250cm9sbGVyKSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICBpZiAoISgwLCBfbmV0d29ya191dGlscy52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzKShyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgICAgIHRocm93ICgwLCBfbmV0d29ya191dGlscy5jcmVhdGVSZXNwb25zZVN0YXR1c0Vycm9yKShyZXNwb25zZS5zdGF0dXMsIHVybCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKTtcblxuICAgICAgdGhpcy5fcmVhZGVyID0gcmVzcG9uc2UuYm9keS5nZXRSZWFkZXIoKTtcbiAgICB9KS5jYXRjaCh0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZWplY3QpO1xuICAgIHRoaXMub25Qcm9ncmVzcyA9IG51bGw7XG4gIH1cblxuICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkO1xuICB9XG5cbiAgYXN5bmMgcmVhZCgpIHtcbiAgICBhd2FpdCB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgIGNvbnN0IHtcbiAgICAgIHZhbHVlLFxuICAgICAgZG9uZVxuICAgIH0gPSBhd2FpdCB0aGlzLl9yZWFkZXIucmVhZCgpO1xuXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBkb25lXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuX2xvYWRlZCArPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuXG4gICAgaWYgKHRoaXMub25Qcm9ncmVzcykge1xuICAgICAgdGhpcy5vblByb2dyZXNzKHtcbiAgICAgICAgbG9hZGVkOiB0aGlzLl9sb2FkZWRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHZhbHVlKS5idWZmZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBidWZmZXIsXG4gICAgICBkb25lOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjYW5jZWwocmVhc29uKSB7XG4gICAgaWYgKHRoaXMuX3JlYWRlcikge1xuICAgICAgdGhpcy5fcmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9hYm9ydENvbnRyb2xsZXIpIHtcbiAgICAgIHRoaXMuX2Fib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgIH1cbiAgfVxuXG59XG5cbi8qKiovIH0pXG4vKioqKioqLyBcdF0pO1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dfcGRmanNfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG4vKioqKioqLyBcdFx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG4vKioqKioqLyBcdFx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovIFx0XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xudmFyIF9fd2VicGFja19leHBvcnRzX18gPSB7fTtcbi8vIFRoaXMgZW50cnkgbmVlZCB0byBiZSB3cmFwcGVkIGluIGFuIElJRkUgYmVjYXVzZSBpdCBuZWVkIHRvIGJlIGlzb2xhdGVkIGFnYWluc3Qgb3RoZXIgbW9kdWxlcyBpbiB0aGUgY2h1bmsuXG4oKCkgPT4ge1xudmFyIGV4cG9ydHMgPSBfX3dlYnBhY2tfZXhwb3J0c19fO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFubm90YXRpb25MYXllclwiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2Fubm90YXRpb25fbGF5ZXIuQW5ub3RhdGlvbkxheWVyO1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBbm5vdGF0aW9uTW9kZVwiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3V0aWwuQW5ub3RhdGlvbk1vZGU7XG4gIH1cbn0pKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNNYXBDb21wcmVzc2lvblR5cGVcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLkNNYXBDb21wcmVzc2lvblR5cGU7XG4gIH1cbn0pKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkdsb2JhbFdvcmtlck9wdGlvbnNcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF93b3JrZXJfb3B0aW9ucy5HbG9iYWxXb3JrZXJPcHRpb25zO1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJbnZhbGlkUERGRXhjZXB0aW9uXCIsICh7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdXRpbC5JbnZhbGlkUERGRXhjZXB0aW9uO1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMaW5rVGFyZ2V0XCIsICh7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfZGlzcGxheV91dGlscy5MaW5rVGFyZ2V0O1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMb29wYmFja1BvcnRcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9hcGkuTG9vcGJhY2tQb3J0O1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNaXNzaW5nUERGRXhjZXB0aW9uXCIsICh7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdXRpbC5NaXNzaW5nUERGRXhjZXB0aW9uO1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPUFNcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLk9QUztcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUERGRGF0YVJhbmdlVHJhbnNwb3J0XCIsICh7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfYXBpLlBERkRhdGFSYW5nZVRyYW5zcG9ydDtcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUERGRGF0ZVN0cmluZ1wiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2Rpc3BsYXlfdXRpbHMuUERGRGF0ZVN0cmluZztcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUERGV29ya2VyXCIsICh7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfYXBpLlBERldvcmtlcjtcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUGFzc3dvcmRSZXNwb25zZXNcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLlBhc3N3b3JkUmVzcG9uc2VzO1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQZXJtaXNzaW9uRmxhZ1wiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3V0aWwuUGVybWlzc2lvbkZsYWc7XG4gIH1cbn0pKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBpeGVsc1BlckluY2hcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9kaXNwbGF5X3V0aWxzLlBpeGVsc1BlckluY2g7XG4gIH1cbn0pKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvblwiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2Rpc3BsYXlfdXRpbHMuUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uO1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTVkdHcmFwaGljc1wiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3N2Zy5TVkdHcmFwaGljcztcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVU5TVVBQT1JURURfRkVBVFVSRVNcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTO1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb25cIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbjtcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVXRpbFwiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3V0aWwuVXRpbDtcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVmVyYm9zaXR5TGV2ZWxcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLlZlcmJvc2l0eUxldmVsO1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJYZmFMYXllclwiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3hmYV9sYXllci5YZmFMYXllcjtcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWRkTGlua0F0dHJpYnV0ZXNcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9kaXNwbGF5X3V0aWxzLmFkZExpbmtBdHRyaWJ1dGVzO1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJidWlsZFwiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2FwaS5idWlsZDtcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlT2JqZWN0VVJMXCIsICh7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdXRpbC5jcmVhdGVPYmplY3RVUkw7XG4gIH1cbn0pKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVByb21pc2VDYXBhYmlsaXR5XCIsICh7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eTtcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVmFsaWRBYnNvbHV0ZVVybFwiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3V0aWwuY3JlYXRlVmFsaWRBYnNvbHV0ZVVybDtcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0RG9jdW1lbnRcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9hcGkuZ2V0RG9jdW1lbnQ7XG4gIH1cbn0pKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldEZpbGVuYW1lRnJvbVVybFwiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2Rpc3BsYXlfdXRpbHMuZ2V0RmlsZW5hbWVGcm9tVXJsO1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRQZGZGaWxlbmFtZUZyb21VcmxcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9kaXNwbGF5X3V0aWxzLmdldFBkZkZpbGVuYW1lRnJvbVVybDtcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0WGZhUGFnZVZpZXdwb3J0XCIsICh7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfZGlzcGxheV91dGlscy5nZXRYZmFQYWdlVmlld3BvcnQ7XG4gIH1cbn0pKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUGRmRmlsZVwiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2Rpc3BsYXlfdXRpbHMuaXNQZGZGaWxlO1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsb2FkU2NyaXB0XCIsICh7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfZGlzcGxheV91dGlscy5sb2FkU2NyaXB0O1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZW1vdmVOdWxsQ2hhcmFjdGVyc1wiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3V0aWwucmVtb3ZlTnVsbENoYXJhY3RlcnM7XG4gIH1cbn0pKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlbmRlclRleHRMYXllclwiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3RleHRfbGF5ZXIucmVuZGVyVGV4dExheWVyO1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzaGFkb3dcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLnNoYWRvdztcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmVyc2lvblwiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2FwaS52ZXJzaW9uO1xuICB9XG59KSk7XG5cbnZhciBfZGlzcGxheV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oMSk7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfYXBpID0gX193X3BkZmpzX3JlcXVpcmVfXyg2KTtcblxudmFyIF9hbm5vdGF0aW9uX2xheWVyID0gX193X3BkZmpzX3JlcXVpcmVfXygxOCk7XG5cbnZhciBfd29ya2VyX29wdGlvbnMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEyKTtcblxudmFyIF9pc19ub2RlID0gX193X3BkZmpzX3JlcXVpcmVfXyg0KTtcblxudmFyIF90ZXh0X2xheWVyID0gX193X3BkZmpzX3JlcXVpcmVfXygyMSk7XG5cbnZhciBfc3ZnID0gX193X3BkZmpzX3JlcXVpcmVfXygyMik7XG5cbnZhciBfeGZhX2xheWVyID0gX193X3BkZmpzX3JlcXVpcmVfXygyMCk7XG5cbmNvbnN0IHBkZmpzVmVyc2lvbiA9ICcyLjEyLjMxMyc7XG5jb25zdCBwZGZqc0J1aWxkID0gJ2EyYWU1NmYzOSc7XG57XG4gIGlmIChfaXNfbm9kZS5pc05vZGVKUykge1xuICAgIGNvbnN0IHtcbiAgICAgIFBERk5vZGVTdHJlYW1cbiAgICB9ID0gX193X3BkZmpzX3JlcXVpcmVfXygyMyk7XG5cbiAgICAoMCwgX2FwaS5zZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeSkocGFyYW1zID0+IHtcbiAgICAgIHJldHVybiBuZXcgUERGTm9kZVN0cmVhbShwYXJhbXMpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHtcbiAgICAgIFBERk5ldHdvcmtTdHJlYW1cbiAgICB9ID0gX193X3BkZmpzX3JlcXVpcmVfXygyNik7XG5cbiAgICBjb25zdCB7XG4gICAgICBQREZGZXRjaFN0cmVhbVxuICAgIH0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI3KTtcblxuICAgICgwLCBfYXBpLnNldFBERk5ldHdvcmtTdHJlYW1GYWN0b3J5KShwYXJhbXMgPT4ge1xuICAgICAgaWYgKCgwLCBfZGlzcGxheV91dGlscy5pc1ZhbGlkRmV0Y2hVcmwpKHBhcmFtcy51cmwpKSB7XG4gICAgICAgIHJldHVybiBuZXcgUERGRmV0Y2hTdHJlYW0ocGFyYW1zKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBQREZOZXR3b3JrU3RyZWFtKHBhcmFtcyk7XG4gICAgfSk7XG4gIH1cbn1cbn0pKCk7XG5cbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19leHBvcnRzX187XG4vKioqKioqLyB9KSgpXG47XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBkZi5qcy5tYXAiLCIvKipcbiAqIEBsaWNzdGFydCBUaGUgZm9sbG93aW5nIGlzIHRoZSBlbnRpcmUgbGljZW5zZSBub3RpY2UgZm9yIHRoZVxuICogSmF2YXNjcmlwdCBjb2RlIGluIHRoaXMgcGFnZVxuICpcbiAqIENvcHlyaWdodCAyMDIxIE1vemlsbGEgRm91bmRhdGlvblxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKiBAbGljZW5kIFRoZSBhYm92ZSBpcyB0aGUgZW50aXJlIGxpY2Vuc2Ugbm90aWNlIGZvciB0aGVcbiAqIEphdmFzY3JpcHQgY29kZSBpbiB0aGlzIHBhZ2VcbiAqL1xuXG4oZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlclwiLCBbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJwZGZqcy1kaXN0L2J1aWxkL3BkZi53b3JrZXJcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wicGRmanMtZGlzdC9idWlsZC9wZGYud29ya2VyXCJdID0gcm9vdC5wZGZqc1dvcmtlciA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuIC8qKioqKiovICgoKSA9PiB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0XCJ1c2Ugc3RyaWN0XCI7XG4vKioqKioqLyBcdHZhciBfX3dlYnBhY2tfbW9kdWxlc19fID0gKFtcbi8qIDAgKi8sXG4vKiAxICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLldvcmtlclRhc2sgPSBleHBvcnRzLldvcmtlck1lc3NhZ2VIYW5kbGVyID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX3BkZl9tYW5hZ2VyID0gX193X3BkZmpzX3JlcXVpcmVfXyg3KTtcblxudmFyIF93cml0ZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDcxKTtcblxudmFyIF9pc19ub2RlID0gX193X3BkZmpzX3JlcXVpcmVfXyg0KTtcblxudmFyIF9tZXNzYWdlX2hhbmRsZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDk5KTtcblxudmFyIF93b3JrZXJfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxMDApO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG5jbGFzcyBXb3JrZXJUYXNrIHtcbiAgY29uc3RydWN0b3IobmFtZSkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy50ZXJtaW5hdGVkID0gZmFsc2U7XG4gICAgdGhpcy5fY2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgfVxuXG4gIGdldCBmaW5pc2hlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG5cbiAgZmluaXNoKCkge1xuICAgIHRoaXMuX2NhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICB9XG5cbiAgdGVybWluYXRlKCkge1xuICAgIHRoaXMudGVybWluYXRlZCA9IHRydWU7XG4gIH1cblxuICBlbnN1cmVOb3RUZXJtaW5hdGVkKCkge1xuICAgIGlmICh0aGlzLnRlcm1pbmF0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIldvcmtlciB0YXNrIHdhcyB0ZXJtaW5hdGVkXCIpO1xuICAgIH1cbiAgfVxuXG59XG5cbmV4cG9ydHMuV29ya2VyVGFzayA9IFdvcmtlclRhc2s7XG5cbmNsYXNzIFdvcmtlck1lc3NhZ2VIYW5kbGVyIHtcbiAgc3RhdGljIHNldHVwKGhhbmRsZXIsIHBvcnQpIHtcbiAgICBsZXQgdGVzdE1lc3NhZ2VQcm9jZXNzZWQgPSBmYWxzZTtcbiAgICBoYW5kbGVyLm9uKFwidGVzdFwiLCBmdW5jdGlvbiB3cGhTZXR1cFRlc3QoZGF0YSkge1xuICAgICAgaWYgKHRlc3RNZXNzYWdlUHJvY2Vzc2VkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGVzdE1lc3NhZ2VQcm9jZXNzZWQgPSB0cnVlO1xuICAgICAgaGFuZGxlci5zZW5kKFwidGVzdFwiLCBkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSAmJiBkYXRhWzBdID09PSAyNTUpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJjb25maWd1cmVcIiwgZnVuY3Rpb24gd3BoQ29uZmlndXJlKGRhdGEpIHtcbiAgICAgICgwLCBfdXRpbC5zZXRWZXJib3NpdHlMZXZlbCkoZGF0YS52ZXJib3NpdHkpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXREb2NSZXF1ZXN0XCIsIGZ1bmN0aW9uIHdwaFNldHVwRG9jKGRhdGEpIHtcbiAgICAgIHJldHVybiBXb3JrZXJNZXNzYWdlSGFuZGxlci5jcmVhdGVEb2N1bWVudEhhbmRsZXIoZGF0YSwgcG9ydCk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlRG9jdW1lbnRIYW5kbGVyKGRvY1BhcmFtcywgcG9ydCkge1xuICAgIGxldCBwZGZNYW5hZ2VyO1xuICAgIGxldCB0ZXJtaW5hdGVkID0gZmFsc2U7XG4gICAgbGV0IGNhbmNlbFhIUnMgPSBudWxsO1xuICAgIGNvbnN0IFdvcmtlclRhc2tzID0gW107XG4gICAgY29uc3QgdmVyYm9zaXR5ID0gKDAsIF91dGlsLmdldFZlcmJvc2l0eUxldmVsKSgpO1xuICAgIGNvbnN0IGFwaVZlcnNpb24gPSBkb2NQYXJhbXMuYXBpVmVyc2lvbjtcbiAgICBjb25zdCB3b3JrZXJWZXJzaW9uID0gJzIuMTIuMzEzJztcblxuICAgIGlmIChhcGlWZXJzaW9uICE9PSB3b3JrZXJWZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBBUEkgdmVyc2lvbiBcIiR7YXBpVmVyc2lvbn1cIiBkb2VzIG5vdCBtYXRjaCBgICsgYHRoZSBXb3JrZXIgdmVyc2lvbiBcIiR7d29ya2VyVmVyc2lvbn1cIi5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnVtZXJhYmxlUHJvcGVydGllcyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBbXSkge1xuICAgICAgZW51bWVyYWJsZVByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgaWYgKGVudW1lcmFibGVQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGBBcnJheS5wcm90b3R5cGVgIGNvbnRhaW5zIHVuZXhwZWN0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzOiBcIiArIGVudW1lcmFibGVQcm9wZXJ0aWVzLmpvaW4oXCIsIFwiKSArIFwiOyB0aHVzIGJyZWFraW5nIGUuZy4gYGZvci4uLmluYCBpdGVyYXRpb24gb2YgYEFycmF5YHMuXCIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgUmVhZGFibGVTdHJlYW0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBicm93c2VyL2Vudmlyb25tZW50IGxhY2tzIG5hdGl2ZSBzdXBwb3J0IGZvciBjcml0aWNhbCBcIiArIFwiZnVuY3Rpb25hbGl0eSB1c2VkIGJ5IHRoZSBQREYuanMgbGlicmFyeSAoZS5nLiBgUmVhZGFibGVTdHJlYW1gKTsgXCIgKyBcInBsZWFzZSB1c2UgYSBgbGVnYWN5YC1idWlsZCBpbnN0ZWFkLlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBkb2NJZCA9IGRvY1BhcmFtcy5kb2NJZDtcbiAgICBjb25zdCBkb2NCYXNlVXJsID0gZG9jUGFyYW1zLmRvY0Jhc2VVcmw7XG4gICAgY29uc3Qgd29ya2VySGFuZGxlck5hbWUgPSBkb2NQYXJhbXMuZG9jSWQgKyBcIl93b3JrZXJcIjtcbiAgICBsZXQgaGFuZGxlciA9IG5ldyBfbWVzc2FnZV9oYW5kbGVyLk1lc3NhZ2VIYW5kbGVyKHdvcmtlckhhbmRsZXJOYW1lLCBkb2NJZCwgcG9ydCk7XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVOb3RUZXJtaW5hdGVkKCkge1xuICAgICAgaWYgKHRlcm1pbmF0ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV29ya2VyIHdhcyB0ZXJtaW5hdGVkXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0V29ya2VyVGFzayh0YXNrKSB7XG4gICAgICBXb3JrZXJUYXNrcy5wdXNoKHRhc2spO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbmlzaFdvcmtlclRhc2sodGFzaykge1xuICAgICAgdGFzay5maW5pc2goKTtcbiAgICAgIGNvbnN0IGkgPSBXb3JrZXJUYXNrcy5pbmRleE9mKHRhc2spO1xuICAgICAgV29ya2VyVGFza3Muc3BsaWNlKGksIDEpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWREb2N1bWVudChyZWNvdmVyeU1vZGUpIHtcbiAgICAgIGF3YWl0IHBkZk1hbmFnZXIuZW5zdXJlRG9jKFwiY2hlY2tIZWFkZXJcIik7XG4gICAgICBhd2FpdCBwZGZNYW5hZ2VyLmVuc3VyZURvYyhcInBhcnNlU3RhcnRYUmVmXCIpO1xuICAgICAgYXdhaXQgcGRmTWFuYWdlci5lbnN1cmVEb2MoXCJwYXJzZVwiLCBbcmVjb3ZlcnlNb2RlXSk7XG4gICAgICBhd2FpdCBwZGZNYW5hZ2VyLmVuc3VyZURvYyhcImNoZWNrRmlyc3RQYWdlXCIsIFtyZWNvdmVyeU1vZGVdKTtcbiAgICAgIGF3YWl0IHBkZk1hbmFnZXIuZW5zdXJlRG9jKFwiY2hlY2tMYXN0UGFnZVwiLCBbcmVjb3ZlcnlNb2RlXSk7XG4gICAgICBjb25zdCBpc1B1cmVYZmEgPSBhd2FpdCBwZGZNYW5hZ2VyLmVuc3VyZURvYyhcImlzUHVyZVhmYVwiKTtcblxuICAgICAgaWYgKGlzUHVyZVhmYSkge1xuICAgICAgICBjb25zdCB0YXNrID0gbmV3IFdvcmtlclRhc2soXCJsb2FkWGZhRm9udHNcIik7XG4gICAgICAgIHN0YXJ0V29ya2VyVGFzayh0YXNrKTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW3BkZk1hbmFnZXIubG9hZFhmYUZvbnRzKGhhbmRsZXIsIHRhc2spLmNhdGNoKHJlYXNvbiA9PiB7fSkudGhlbigoKSA9PiBmaW5pc2hXb3JrZXJUYXNrKHRhc2spKSwgcGRmTWFuYWdlci5sb2FkWGZhSW1hZ2VzKCldKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW251bVBhZ2VzLCBmaW5nZXJwcmludHNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW3BkZk1hbmFnZXIuZW5zdXJlRG9jKFwibnVtUGFnZXNcIiksIHBkZk1hbmFnZXIuZW5zdXJlRG9jKFwiZmluZ2VycHJpbnRzXCIpXSk7XG4gICAgICBjb25zdCBodG1sRm9yWGZhID0gaXNQdXJlWGZhID8gYXdhaXQgcGRmTWFuYWdlci5lbnN1cmVEb2MoXCJodG1sRm9yWGZhXCIpIDogbnVsbDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG51bVBhZ2VzLFxuICAgICAgICBmaW5nZXJwcmludHMsXG4gICAgICAgIGh0bWxGb3JYZmFcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGRmTWFuYWdlcihkYXRhLCBldmFsdWF0b3JPcHRpb25zLCBlbmFibGVYZmEpIHtcbiAgICAgIGNvbnN0IHBkZk1hbmFnZXJDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgbGV0IG5ld1BkZk1hbmFnZXI7XG4gICAgICBjb25zdCBzb3VyY2UgPSBkYXRhLnNvdXJjZTtcblxuICAgICAgaWYgKHNvdXJjZS5kYXRhKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbmV3UGRmTWFuYWdlciA9IG5ldyBfcGRmX21hbmFnZXIuTG9jYWxQZGZNYW5hZ2VyKGRvY0lkLCBzb3VyY2UuZGF0YSwgc291cmNlLnBhc3N3b3JkLCBoYW5kbGVyLCBldmFsdWF0b3JPcHRpb25zLCBlbmFibGVYZmEsIGRvY0Jhc2VVcmwpO1xuICAgICAgICAgIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnJlc29sdmUobmV3UGRmTWFuYWdlcik7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgcGRmTWFuYWdlckNhcGFiaWxpdHkucmVqZWN0KGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgfVxuXG4gICAgICBsZXQgcGRmU3RyZWFtLFxuICAgICAgICAgIGNhY2hlZENodW5rcyA9IFtdO1xuXG4gICAgICB0cnkge1xuICAgICAgICBwZGZTdHJlYW0gPSBuZXcgX3dvcmtlcl9zdHJlYW0uUERGV29ya2VyU3RyZWFtKGhhbmRsZXIpO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgcGRmTWFuYWdlckNhcGFiaWxpdHkucmVqZWN0KGV4KTtcbiAgICAgICAgcmV0dXJuIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bGxSZXF1ZXN0ID0gcGRmU3RyZWFtLmdldEZ1bGxSZWFkZXIoKTtcbiAgICAgIGZ1bGxSZXF1ZXN0LmhlYWRlcnNSZWFkeS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFmdWxsUmVxdWVzdC5pc1JhbmdlU3VwcG9ydGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGlzYWJsZUF1dG9GZXRjaCA9IHNvdXJjZS5kaXNhYmxlQXV0b0ZldGNoIHx8IGZ1bGxSZXF1ZXN0LmlzU3RyZWFtaW5nU3VwcG9ydGVkO1xuICAgICAgICBuZXdQZGZNYW5hZ2VyID0gbmV3IF9wZGZfbWFuYWdlci5OZXR3b3JrUGRmTWFuYWdlcihkb2NJZCwgcGRmU3RyZWFtLCB7XG4gICAgICAgICAgbXNnSGFuZGxlcjogaGFuZGxlcixcbiAgICAgICAgICBwYXNzd29yZDogc291cmNlLnBhc3N3b3JkLFxuICAgICAgICAgIGxlbmd0aDogZnVsbFJlcXVlc3QuY29udGVudExlbmd0aCxcbiAgICAgICAgICBkaXNhYmxlQXV0b0ZldGNoLFxuICAgICAgICAgIHJhbmdlQ2h1bmtTaXplOiBzb3VyY2UucmFuZ2VDaHVua1NpemVcbiAgICAgICAgfSwgZXZhbHVhdG9yT3B0aW9ucywgZW5hYmxlWGZhLCBkb2NCYXNlVXJsKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhY2hlZENodW5rcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIG5ld1BkZk1hbmFnZXIuc2VuZFByb2dyZXNzaXZlRGF0YShjYWNoZWRDaHVua3NbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FjaGVkQ2h1bmtzID0gW107XG4gICAgICAgIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnJlc29sdmUobmV3UGRmTWFuYWdlcik7XG4gICAgICAgIGNhbmNlbFhIUnMgPSBudWxsO1xuICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5yZWplY3QocmVhc29uKTtcbiAgICAgICAgY2FuY2VsWEhScyA9IG51bGw7XG4gICAgICB9KTtcbiAgICAgIGxldCBsb2FkZWQgPSAwO1xuXG4gICAgICBjb25zdCBmbHVzaENodW5rcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcGRmRmlsZSA9ICgwLCBfdXRpbC5hcnJheXNUb0J5dGVzKShjYWNoZWRDaHVua3MpO1xuXG4gICAgICAgIGlmIChzb3VyY2UubGVuZ3RoICYmIHBkZkZpbGUubGVuZ3RoICE9PSBzb3VyY2UubGVuZ3RoKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwicmVwb3J0ZWQgSFRUUCBsZW5ndGggaXMgZGlmZmVyZW50IGZyb20gYWN0dWFsXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBuZXdQZGZNYW5hZ2VyID0gbmV3IF9wZGZfbWFuYWdlci5Mb2NhbFBkZk1hbmFnZXIoZG9jSWQsIHBkZkZpbGUsIHNvdXJjZS5wYXNzd29yZCwgaGFuZGxlciwgZXZhbHVhdG9yT3B0aW9ucywgZW5hYmxlWGZhLCBkb2NCYXNlVXJsKTtcbiAgICAgICAgICBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5yZXNvbHZlKG5ld1BkZk1hbmFnZXIpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnJlamVjdChleCk7XG4gICAgICAgIH1cblxuICAgICAgICBjYWNoZWRDaHVua3MgPSBbXTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlYWRQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBjb25zdCByZWFkQ2h1bmsgPSBmdW5jdGlvbiAoe1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIGRvbmVcbiAgICAgICAgfSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBlbnN1cmVOb3RUZXJtaW5hdGVkKCk7XG5cbiAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgIGlmICghbmV3UGRmTWFuYWdlcikge1xuICAgICAgICAgICAgICAgIGZsdXNoQ2h1bmtzKCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjYW5jZWxYSFJzID0gbnVsbDtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsb2FkZWQgKz0gKDAsIF91dGlsLmFycmF5Qnl0ZUxlbmd0aCkodmFsdWUpO1xuXG4gICAgICAgICAgICBpZiAoIWZ1bGxSZXF1ZXN0LmlzU3RyZWFtaW5nU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgIGhhbmRsZXIuc2VuZChcIkRvY1Byb2dyZXNzXCIsIHtcbiAgICAgICAgICAgICAgICBsb2FkZWQsXG4gICAgICAgICAgICAgICAgdG90YWw6IE1hdGgubWF4KGxvYWRlZCwgZnVsbFJlcXVlc3QuY29udGVudExlbmd0aCB8fCAwKVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5ld1BkZk1hbmFnZXIpIHtcbiAgICAgICAgICAgICAgbmV3UGRmTWFuYWdlci5zZW5kUHJvZ3Jlc3NpdmVEYXRhKHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNhY2hlZENodW5rcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVsbFJlcXVlc3QucmVhZCgpLnRoZW4ocmVhZENodW5rLCByZWplY3QpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVsbFJlcXVlc3QucmVhZCgpLnRoZW4ocmVhZENodW5rLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICByZWFkUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5yZWplY3QoZSk7XG4gICAgICAgIGNhbmNlbFhIUnMgPSBudWxsO1xuICAgICAgfSk7XG5cbiAgICAgIGNhbmNlbFhIUnMgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIHBkZlN0cmVhbS5jYW5jZWxBbGxSZXF1ZXN0cyhyZWFzb24pO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0dXBEb2MoZGF0YSkge1xuICAgICAgZnVuY3Rpb24gb25TdWNjZXNzKGRvYykge1xuICAgICAgICBlbnN1cmVOb3RUZXJtaW5hdGVkKCk7XG4gICAgICAgIGhhbmRsZXIuc2VuZChcIkdldERvY1wiLCB7XG4gICAgICAgICAgcGRmSW5mbzogZG9jXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBvbkZhaWx1cmUoZXgpIHtcbiAgICAgICAgZW5zdXJlTm90VGVybWluYXRlZCgpO1xuXG4gICAgICAgIGlmIChleCBpbnN0YW5jZW9mIF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKSB7XG4gICAgICAgICAgY29uc3QgdGFzayA9IG5ldyBXb3JrZXJUYXNrKGBQYXNzd29yZEV4Y2VwdGlvbjogcmVzcG9uc2UgJHtleC5jb2RlfWApO1xuICAgICAgICAgIHN0YXJ0V29ya2VyVGFzayh0YXNrKTtcbiAgICAgICAgICBoYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIlBhc3N3b3JkUmVxdWVzdFwiLCBleCkudGhlbihmdW5jdGlvbiAoe1xuICAgICAgICAgICAgcGFzc3dvcmRcbiAgICAgICAgICB9KSB7XG4gICAgICAgICAgICBmaW5pc2hXb3JrZXJUYXNrKHRhc2spO1xuICAgICAgICAgICAgcGRmTWFuYWdlci51cGRhdGVQYXNzd29yZChwYXNzd29yZCk7XG4gICAgICAgICAgICBwZGZNYW5hZ2VyUmVhZHkoKTtcbiAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBmaW5pc2hXb3JrZXJUYXNrKHRhc2spO1xuICAgICAgICAgICAgaGFuZGxlci5zZW5kKFwiRG9jRXhjZXB0aW9uXCIsIGV4KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChleCBpbnN0YW5jZW9mIF91dGlsLkludmFsaWRQREZFeGNlcHRpb24gfHwgZXggaW5zdGFuY2VvZiBfdXRpbC5NaXNzaW5nUERGRXhjZXB0aW9uIHx8IGV4IGluc3RhbmNlb2YgX3V0aWwuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIHx8IGV4IGluc3RhbmNlb2YgX3V0aWwuVW5rbm93bkVycm9yRXhjZXB0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlci5zZW5kKFwiRG9jRXhjZXB0aW9uXCIsIGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYW5kbGVyLnNlbmQoXCJEb2NFeGNlcHRpb25cIiwgbmV3IF91dGlsLlVua25vd25FcnJvckV4Y2VwdGlvbihleC5tZXNzYWdlLCBleC50b1N0cmluZygpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcGRmTWFuYWdlclJlYWR5KCkge1xuICAgICAgICBlbnN1cmVOb3RUZXJtaW5hdGVkKCk7XG4gICAgICAgIGxvYWREb2N1bWVudChmYWxzZSkudGhlbihvblN1Y2Nlc3MsIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBlbnN1cmVOb3RUZXJtaW5hdGVkKCk7XG5cbiAgICAgICAgICBpZiAoIShyZWFzb24gaW5zdGFuY2VvZiBfY29yZV91dGlscy5YUmVmUGFyc2VFeGNlcHRpb24pKSB7XG4gICAgICAgICAgICBvbkZhaWx1cmUocmVhc29uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwZGZNYW5hZ2VyLnJlcXVlc3RMb2FkZWRTdHJlYW0oKTtcbiAgICAgICAgICBwZGZNYW5hZ2VyLm9uTG9hZGVkU3RyZWFtKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBlbnN1cmVOb3RUZXJtaW5hdGVkKCk7XG4gICAgICAgICAgICBsb2FkRG9jdW1lbnQodHJ1ZSkudGhlbihvblN1Y2Nlc3MsIG9uRmFpbHVyZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBlbnN1cmVOb3RUZXJtaW5hdGVkKCk7XG4gICAgICBjb25zdCBldmFsdWF0b3JPcHRpb25zID0ge1xuICAgICAgICBtYXhJbWFnZVNpemU6IGRhdGEubWF4SW1hZ2VTaXplLFxuICAgICAgICBkaXNhYmxlRm9udEZhY2U6IGRhdGEuZGlzYWJsZUZvbnRGYWNlLFxuICAgICAgICBpZ25vcmVFcnJvcnM6IGRhdGEuaWdub3JlRXJyb3JzLFxuICAgICAgICBpc0V2YWxTdXBwb3J0ZWQ6IGRhdGEuaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICBmb250RXh0cmFQcm9wZXJ0aWVzOiBkYXRhLmZvbnRFeHRyYVByb3BlcnRpZXMsXG4gICAgICAgIHVzZVN5c3RlbUZvbnRzOiBkYXRhLnVzZVN5c3RlbUZvbnRzLFxuICAgICAgICBjTWFwVXJsOiBkYXRhLmNNYXBVcmwsXG4gICAgICAgIHN0YW5kYXJkRm9udERhdGFVcmw6IGRhdGEuc3RhbmRhcmRGb250RGF0YVVybFxuICAgICAgfTtcbiAgICAgIGdldFBkZk1hbmFnZXIoZGF0YSwgZXZhbHVhdG9yT3B0aW9ucywgZGF0YS5lbmFibGVYZmEpLnRoZW4oZnVuY3Rpb24gKG5ld1BkZk1hbmFnZXIpIHtcbiAgICAgICAgaWYgKHRlcm1pbmF0ZWQpIHtcbiAgICAgICAgICBuZXdQZGZNYW5hZ2VyLnRlcm1pbmF0ZShuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24oXCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuXCIpKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBwZGZNYW5hZ2VyID0gbmV3UGRmTWFuYWdlcjtcbiAgICAgICAgcGRmTWFuYWdlci5vbkxvYWRlZFN0cmVhbSgpLnRoZW4oZnVuY3Rpb24gKHN0cmVhbSkge1xuICAgICAgICAgIGhhbmRsZXIuc2VuZChcIkRhdGFMb2FkZWRcIiwge1xuICAgICAgICAgICAgbGVuZ3RoOiBzdHJlYW0uYnl0ZXMuYnl0ZUxlbmd0aFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pLnRoZW4ocGRmTWFuYWdlclJlYWR5LCBvbkZhaWx1cmUpO1xuICAgIH1cblxuICAgIGhhbmRsZXIub24oXCJHZXRQYWdlXCIsIGZ1bmN0aW9uIHdwaFNldHVwR2V0UGFnZShkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5nZXRQYWdlKGRhdGEucGFnZUluZGV4KS50aGVuKGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbcGRmTWFuYWdlci5lbnN1cmUocGFnZSwgXCJyb3RhdGVcIiksIHBkZk1hbmFnZXIuZW5zdXJlKHBhZ2UsIFwicmVmXCIpLCBwZGZNYW5hZ2VyLmVuc3VyZShwYWdlLCBcInVzZXJVbml0XCIpLCBwZGZNYW5hZ2VyLmVuc3VyZShwYWdlLCBcInZpZXdcIildKS50aGVuKGZ1bmN0aW9uIChbcm90YXRlLCByZWYsIHVzZXJVbml0LCB2aWV3XSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByb3RhdGUsXG4gICAgICAgICAgICByZWYsXG4gICAgICAgICAgICB1c2VyVW5pdCxcbiAgICAgICAgICAgIHZpZXdcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRQYWdlSW5kZXhcIiwgZnVuY3Rpb24gd3BoU2V0dXBHZXRQYWdlSW5kZXgoe1xuICAgICAgcmVmXG4gICAgfSkge1xuICAgICAgY29uc3QgcGFnZVJlZiA9IF9wcmltaXRpdmVzLlJlZi5nZXQocmVmLm51bSwgcmVmLmdlbik7XG5cbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coXCJnZXRQYWdlSW5kZXhcIiwgW3BhZ2VSZWZdKTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiR2V0RGVzdGluYXRpb25zXCIsIGZ1bmN0aW9uIHdwaFNldHVwR2V0RGVzdGluYXRpb25zKGRhdGEpIHtcbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coXCJkZXN0aW5hdGlvbnNcIik7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldERlc3RpbmF0aW9uXCIsIGZ1bmN0aW9uIHdwaFNldHVwR2V0RGVzdGluYXRpb24oZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcImdldERlc3RpbmF0aW9uXCIsIFtkYXRhLmlkXSk7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldFBhZ2VMYWJlbHNcIiwgZnVuY3Rpb24gd3BoU2V0dXBHZXRQYWdlTGFiZWxzKGRhdGEpIHtcbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coXCJwYWdlTGFiZWxzXCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRQYWdlTGF5b3V0XCIsIGZ1bmN0aW9uIHdwaFNldHVwR2V0UGFnZUxheW91dChkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwicGFnZUxheW91dFwiKTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiR2V0UGFnZU1vZGVcIiwgZnVuY3Rpb24gd3BoU2V0dXBHZXRQYWdlTW9kZShkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwicGFnZU1vZGVcIik7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldFZpZXdlclByZWZlcmVuY2VzXCIsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwidmlld2VyUHJlZmVyZW5jZXNcIik7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldE9wZW5BY3Rpb25cIiwgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coXCJvcGVuQWN0aW9uXCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRBdHRhY2htZW50c1wiLCBmdW5jdGlvbiB3cGhTZXR1cEdldEF0dGFjaG1lbnRzKGRhdGEpIHtcbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coXCJhdHRhY2htZW50c1wiKTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiR2V0SmF2YVNjcmlwdFwiLCBmdW5jdGlvbiB3cGhTZXR1cEdldEphdmFTY3JpcHQoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcImphdmFTY3JpcHRcIik7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldERvY0pTQWN0aW9uc1wiLCBmdW5jdGlvbiB3cGhTZXR1cEdldERvY0pTQWN0aW9ucyhkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwianNBY3Rpb25zXCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRQYWdlSlNBY3Rpb25zXCIsIGZ1bmN0aW9uICh7XG4gICAgICBwYWdlSW5kZXhcbiAgICB9KSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5nZXRQYWdlKHBhZ2VJbmRleCkudGhlbihmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmUocGFnZSwgXCJqc0FjdGlvbnNcIik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiR2V0T3V0bGluZVwiLCBmdW5jdGlvbiB3cGhTZXR1cEdldE91dGxpbmUoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcImRvY3VtZW50T3V0bGluZVwiKTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiR2V0T3B0aW9uYWxDb250ZW50Q29uZmlnXCIsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwib3B0aW9uYWxDb250ZW50Q29uZmlnXCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRQZXJtaXNzaW9uc1wiLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcInBlcm1pc3Npb25zXCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRNZXRhZGF0YVwiLCBmdW5jdGlvbiB3cGhTZXR1cEdldE1ldGFkYXRhKGRhdGEpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChbcGRmTWFuYWdlci5lbnN1cmVEb2MoXCJkb2N1bWVudEluZm9cIiksIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcIm1ldGFkYXRhXCIpXSk7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldE1hcmtJbmZvXCIsIGZ1bmN0aW9uIHdwaFNldHVwR2V0TWFya0luZm8oZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcIm1hcmtJbmZvXCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXREYXRhXCIsIGZ1bmN0aW9uIHdwaFNldHVwR2V0RGF0YShkYXRhKSB7XG4gICAgICBwZGZNYW5hZ2VyLnJlcXVlc3RMb2FkZWRTdHJlYW0oKTtcbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLm9uTG9hZGVkU3RyZWFtKCkudGhlbihmdW5jdGlvbiAoc3RyZWFtKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW0uYnl0ZXM7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiR2V0QW5ub3RhdGlvbnNcIiwgZnVuY3Rpb24gKHtcbiAgICAgIHBhZ2VJbmRleCxcbiAgICAgIGludGVudFxuICAgIH0pIHtcbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmdldFBhZ2UocGFnZUluZGV4KS50aGVuKGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgIHJldHVybiBwYWdlLmdldEFubm90YXRpb25zRGF0YShpbnRlbnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldEZpZWxkT2JqZWN0c1wiLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlRG9jKFwiZmllbGRPYmplY3RzXCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJIYXNKU0FjdGlvbnNcIiwgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZURvYyhcImhhc0pTQWN0aW9uc1wiKTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiR2V0Q2FsY3VsYXRpb25PcmRlcklkc1wiLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlRG9jKFwiY2FsY3VsYXRpb25PcmRlcklkc1wiKTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiU2F2ZURvY3VtZW50XCIsIGZ1bmN0aW9uICh7XG4gICAgICBpc1B1cmVYZmEsXG4gICAgICBudW1QYWdlcyxcbiAgICAgIGFubm90YXRpb25TdG9yYWdlLFxuICAgICAgZmlsZW5hbWVcbiAgICB9KSB7XG4gICAgICBwZGZNYW5hZ2VyLnJlcXVlc3RMb2FkZWRTdHJlYW0oKTtcbiAgICAgIGNvbnN0IHByb21pc2VzID0gW3BkZk1hbmFnZXIub25Mb2FkZWRTdHJlYW0oKSwgcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwiYWNyb0Zvcm1cIiksIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcImFjcm9Gb3JtUmVmXCIpLCBwZGZNYW5hZ2VyLmVuc3VyZURvYyhcInhyZWZcIiksIHBkZk1hbmFnZXIuZW5zdXJlRG9jKFwic3RhcnRYUmVmXCIpXTtcblxuICAgICAgaWYgKGlzUHVyZVhmYSkge1xuICAgICAgICBwcm9taXNlcy5wdXNoKHBkZk1hbmFnZXIuc2VyaWFsaXplWGZhRGF0YShhbm5vdGF0aW9uU3RvcmFnZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgcGFnZUluZGV4ID0gMDsgcGFnZUluZGV4IDwgbnVtUGFnZXM7IHBhZ2VJbmRleCsrKSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChwZGZNYW5hZ2VyLmdldFBhZ2UocGFnZUluZGV4KS50aGVuKGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgICAgICBjb25zdCB0YXNrID0gbmV3IFdvcmtlclRhc2soYFNhdmU6IHBhZ2UgJHtwYWdlSW5kZXh9YCk7XG4gICAgICAgICAgICByZXR1cm4gcGFnZS5zYXZlKGhhbmRsZXIsIHRhc2ssIGFubm90YXRpb25TdG9yYWdlKS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgZmluaXNoV29ya2VyVGFzayh0YXNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKFtzdHJlYW0sIGFjcm9Gb3JtLCBhY3JvRm9ybVJlZiwgeHJlZiwgc3RhcnRYUmVmLCAuLi5yZWZzXSkge1xuICAgICAgICBsZXQgbmV3UmVmcyA9IFtdO1xuICAgICAgICBsZXQgeGZhRGF0YSA9IG51bGw7XG5cbiAgICAgICAgaWYgKGlzUHVyZVhmYSkge1xuICAgICAgICAgIHhmYURhdGEgPSByZWZzWzBdO1xuXG4gICAgICAgICAgaWYgKCF4ZmFEYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyZWFtLmJ5dGVzO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlZiBvZiByZWZzKSB7XG4gICAgICAgICAgICBuZXdSZWZzID0gcmVmLmZpbHRlcih4ID0+IHggIT09IG51bGwpLnJlZHVjZSgoYSwgYikgPT4gYS5jb25jYXQoYiksIG5ld1JlZnMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChuZXdSZWZzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5ieXRlcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB4ZmEgPSBhY3JvRm9ybSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QgJiYgYWNyb0Zvcm0uZ2V0KFwiWEZBXCIpIHx8IG51bGw7XG4gICAgICAgIGxldCB4ZmFEYXRhc2V0c1JlZiA9IG51bGw7XG4gICAgICAgIGxldCBoYXNYZmFEYXRhc2V0c0VudHJ5ID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoeGZhKSkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHhmYS5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7XG4gICAgICAgICAgICBpZiAoeGZhW2ldID09PSBcImRhdGFzZXRzXCIpIHtcbiAgICAgICAgICAgICAgeGZhRGF0YXNldHNSZWYgPSB4ZmFbaSArIDFdO1xuICAgICAgICAgICAgICBhY3JvRm9ybVJlZiA9IG51bGw7XG4gICAgICAgICAgICAgIGhhc1hmYURhdGFzZXRzRW50cnkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh4ZmFEYXRhc2V0c1JlZiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgeGZhRGF0YXNldHNSZWYgPSB4cmVmLmdldE5ld1JlZigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh4ZmEpIHtcbiAgICAgICAgICBhY3JvRm9ybVJlZiA9IG51bGw7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5zdXBwb3J0ZWQgWEZBIHR5cGUuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG5ld1hyZWZJbmZvID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICBpZiAoeHJlZi50cmFpbGVyKSB7XG4gICAgICAgICAgY29uc3QgaW5mb09iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgY29uc3QgeHJlZkluZm8gPSB4cmVmLnRyYWlsZXIuZ2V0KFwiSW5mb1wiKSB8fCBudWxsO1xuXG4gICAgICAgICAgaWYgKHhyZWZJbmZvIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkge1xuICAgICAgICAgICAgeHJlZkluZm8uZm9yRWFjaCgoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzU3RyaW5nKShrZXkpICYmICgwLCBfdXRpbC5pc1N0cmluZykodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgaW5mb09ialtrZXldID0gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKSh2YWx1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld1hyZWZJbmZvID0ge1xuICAgICAgICAgICAgcm9vdFJlZjogeHJlZi50cmFpbGVyLmdldFJhdyhcIlJvb3RcIikgfHwgbnVsbCxcbiAgICAgICAgICAgIGVuY3J5cHRSZWY6IHhyZWYudHJhaWxlci5nZXRSYXcoXCJFbmNyeXB0XCIpIHx8IG51bGwsXG4gICAgICAgICAgICBuZXdSZWY6IHhyZWYuZ2V0TmV3UmVmKCksXG4gICAgICAgICAgICBpbmZvUmVmOiB4cmVmLnRyYWlsZXIuZ2V0UmF3KFwiSW5mb1wiKSB8fCBudWxsLFxuICAgICAgICAgICAgaW5mbzogaW5mb09iaixcbiAgICAgICAgICAgIGZpbGVJZHM6IHhyZWYudHJhaWxlci5nZXQoXCJJRFwiKSB8fCBudWxsLFxuICAgICAgICAgICAgc3RhcnRYUmVmLFxuICAgICAgICAgICAgZmlsZW5hbWVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgeHJlZi5yZXNldE5ld1JlZigpO1xuICAgICAgICByZXR1cm4gKDAsIF93cml0ZXIuaW5jcmVtZW50YWxVcGRhdGUpKHtcbiAgICAgICAgICBvcmlnaW5hbERhdGE6IHN0cmVhbS5ieXRlcyxcbiAgICAgICAgICB4cmVmSW5mbzogbmV3WHJlZkluZm8sXG4gICAgICAgICAgbmV3UmVmcyxcbiAgICAgICAgICB4cmVmLFxuICAgICAgICAgIGhhc1hmYTogISF4ZmEsXG4gICAgICAgICAgeGZhRGF0YXNldHNSZWYsXG4gICAgICAgICAgaGFzWGZhRGF0YXNldHNFbnRyeSxcbiAgICAgICAgICBhY3JvRm9ybVJlZixcbiAgICAgICAgICBhY3JvRm9ybSxcbiAgICAgICAgICB4ZmFEYXRhXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldE9wZXJhdG9yTGlzdFwiLCBmdW5jdGlvbiB3cGhTZXR1cFJlbmRlclBhZ2UoZGF0YSwgc2luaykge1xuICAgICAgY29uc3QgcGFnZUluZGV4ID0gZGF0YS5wYWdlSW5kZXg7XG4gICAgICBwZGZNYW5hZ2VyLmdldFBhZ2UocGFnZUluZGV4KS50aGVuKGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgIGNvbnN0IHRhc2sgPSBuZXcgV29ya2VyVGFzayhgR2V0T3BlcmF0b3JMaXN0OiBwYWdlICR7cGFnZUluZGV4fWApO1xuICAgICAgICBzdGFydFdvcmtlclRhc2sodGFzayk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdmVyYm9zaXR5ID49IF91dGlsLlZlcmJvc2l0eUxldmVsLklORk9TID8gRGF0ZS5ub3coKSA6IDA7XG4gICAgICAgIHBhZ2UuZ2V0T3BlcmF0b3JMaXN0KHtcbiAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgIHNpbmssXG4gICAgICAgICAgdGFzayxcbiAgICAgICAgICBpbnRlbnQ6IGRhdGEuaW50ZW50LFxuICAgICAgICAgIGNhY2hlS2V5OiBkYXRhLmNhY2hlS2V5LFxuICAgICAgICAgIGFubm90YXRpb25TdG9yYWdlOiBkYXRhLmFubm90YXRpb25TdG9yYWdlXG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKG9wZXJhdG9yTGlzdEluZm8pIHtcbiAgICAgICAgICBmaW5pc2hXb3JrZXJUYXNrKHRhc2spO1xuXG4gICAgICAgICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoYHBhZ2U9JHtwYWdlSW5kZXggKyAxfSAtIGdldE9wZXJhdG9yTGlzdDogdGltZT1gICsgYCR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zLCBsZW49JHtvcGVyYXRvckxpc3RJbmZvLmxlbmd0aH1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzaW5rLmNsb3NlKCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBmaW5pc2hXb3JrZXJUYXNrKHRhc2spO1xuXG4gICAgICAgICAgaWYgKHRhc2sudGVybWluYXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGhhbmRsZXIuc2VuZChcIlVuc3VwcG9ydGVkRmVhdHVyZVwiLCB7XG4gICAgICAgICAgICBmZWF0dXJlSWQ6IF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yT3BlcmF0b3JMaXN0XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc2luay5lcnJvcihyZWFzb24pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRUZXh0Q29udGVudFwiLCBmdW5jdGlvbiB3cGhFeHRyYWN0VGV4dChkYXRhLCBzaW5rKSB7XG4gICAgICBjb25zdCBwYWdlSW5kZXggPSBkYXRhLnBhZ2VJbmRleDtcbiAgICAgIHBkZk1hbmFnZXIuZ2V0UGFnZShwYWdlSW5kZXgpLnRoZW4oZnVuY3Rpb24gKHBhZ2UpIHtcbiAgICAgICAgY29uc3QgdGFzayA9IG5ldyBXb3JrZXJUYXNrKFwiR2V0VGV4dENvbnRlbnQ6IHBhZ2UgXCIgKyBwYWdlSW5kZXgpO1xuICAgICAgICBzdGFydFdvcmtlclRhc2sodGFzayk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdmVyYm9zaXR5ID49IF91dGlsLlZlcmJvc2l0eUxldmVsLklORk9TID8gRGF0ZS5ub3coKSA6IDA7XG4gICAgICAgIHBhZ2UuZXh0cmFjdFRleHRDb250ZW50KHtcbiAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgIHRhc2ssXG4gICAgICAgICAgc2luayxcbiAgICAgICAgICBub3JtYWxpemVXaGl0ZXNwYWNlOiBkYXRhLm5vcm1hbGl6ZVdoaXRlc3BhY2UsXG4gICAgICAgICAgaW5jbHVkZU1hcmtlZENvbnRlbnQ6IGRhdGEuaW5jbHVkZU1hcmtlZENvbnRlbnQsXG4gICAgICAgICAgY29tYmluZVRleHRJdGVtczogZGF0YS5jb21iaW5lVGV4dEl0ZW1zXG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGZpbmlzaFdvcmtlclRhc2sodGFzayk7XG5cbiAgICAgICAgICBpZiAoc3RhcnQpIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShgcGFnZT0ke3BhZ2VJbmRleCArIDF9IC0gZ2V0VGV4dENvbnRlbnQ6IHRpbWU9YCArIGAke0RhdGUubm93KCkgLSBzdGFydH1tc2ApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNpbmsuY2xvc2UoKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgIGZpbmlzaFdvcmtlclRhc2sodGFzayk7XG5cbiAgICAgICAgICBpZiAodGFzay50ZXJtaW5hdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2luay5lcnJvcihyZWFzb24pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRTdHJ1Y3RUcmVlXCIsIGZ1bmN0aW9uIHdwaEdldFN0cnVjdFRyZWUoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZ2V0UGFnZShkYXRhLnBhZ2VJbmRleCkudGhlbihmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmUocGFnZSwgXCJnZXRTdHJ1Y3RUcmVlXCIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkZvbnRGYWxsYmFja1wiLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZm9udEZhbGxiYWNrKGRhdGEuaWQsIGhhbmRsZXIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJDbGVhbnVwXCIsIGZ1bmN0aW9uIHdwaENsZWFudXAoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuY2xlYW51cCh0cnVlKTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiVGVybWluYXRlXCIsIGZ1bmN0aW9uIHdwaFRlcm1pbmF0ZShkYXRhKSB7XG4gICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHdhaXRPbiA9IFtdO1xuXG4gICAgICBpZiAocGRmTWFuYWdlcikge1xuICAgICAgICBwZGZNYW5hZ2VyLnRlcm1pbmF0ZShuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24oXCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuXCIpKTtcbiAgICAgICAgY29uc3QgY2xlYW51cFByb21pc2UgPSBwZGZNYW5hZ2VyLmNsZWFudXAoKTtcbiAgICAgICAgd2FpdE9uLnB1c2goY2xlYW51cFByb21pc2UpO1xuICAgICAgICBwZGZNYW5hZ2VyID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICgwLCBfcHJpbWl0aXZlcy5jbGVhclByaW1pdGl2ZUNhY2hlcykoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNhbmNlbFhIUnMpIHtcbiAgICAgICAgY2FuY2VsWEhScyhuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24oXCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuXCIpKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCB0YXNrIG9mIFdvcmtlclRhc2tzKSB7XG4gICAgICAgIHdhaXRPbi5wdXNoKHRhc2suZmluaXNoZWQpO1xuICAgICAgICB0YXNrLnRlcm1pbmF0ZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwod2FpdE9uKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgIGhhbmRsZXIgPSBudWxsO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIlJlYWR5XCIsIGZ1bmN0aW9uIHdwaFJlYWR5KGRhdGEpIHtcbiAgICAgIHNldHVwRG9jKGRvY1BhcmFtcyk7XG4gICAgICBkb2NQYXJhbXMgPSBudWxsO1xuICAgIH0pO1xuICAgIHJldHVybiB3b3JrZXJIYW5kbGVyTmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBpbml0aWFsaXplRnJvbVBvcnQocG9ydCkge1xuICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihcIndvcmtlclwiLCBcIm1haW5cIiwgcG9ydCk7XG4gICAgV29ya2VyTWVzc2FnZUhhbmRsZXIuc2V0dXAoaGFuZGxlciwgcG9ydCk7XG4gICAgaGFuZGxlci5zZW5kKFwicmVhZHlcIiwgbnVsbCk7XG4gIH1cblxufVxuXG5leHBvcnRzLldvcmtlck1lc3NhZ2VIYW5kbGVyID0gV29ya2VyTWVzc2FnZUhhbmRsZXI7XG5cbmZ1bmN0aW9uIGlzTWVzc2FnZVBvcnQobWF5YmVQb3J0KSB7XG4gIHJldHVybiB0eXBlb2YgbWF5YmVQb3J0LnBvc3RNZXNzYWdlID09PSBcImZ1bmN0aW9uXCIgJiYgXCJvbm1lc3NhZ2VcIiBpbiBtYXliZVBvcnQ7XG59XG5cbmlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiICYmICFfaXNfbm9kZS5pc05vZGVKUyAmJiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpc01lc3NhZ2VQb3J0KHNlbGYpKSB7XG4gIFdvcmtlck1lc3NhZ2VIYW5kbGVyLmluaXRpYWxpemVGcm9tUG9ydChzZWxmKTtcbn1cblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlZlcmJvc2l0eUxldmVsID0gZXhwb3J0cy5VdGlsID0gZXhwb3J0cy5Vbmtub3duRXJyb3JFeGNlcHRpb24gPSBleHBvcnRzLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiA9IGV4cG9ydHMuVU5TVVBQT1JURURfRkVBVFVSRVMgPSBleHBvcnRzLlRleHRSZW5kZXJpbmdNb2RlID0gZXhwb3J0cy5TdHJlYW1UeXBlID0gZXhwb3J0cy5SZW5kZXJpbmdJbnRlbnRGbGFnID0gZXhwb3J0cy5QZXJtaXNzaW9uRmxhZyA9IGV4cG9ydHMuUGFzc3dvcmRSZXNwb25zZXMgPSBleHBvcnRzLlBhc3N3b3JkRXhjZXB0aW9uID0gZXhwb3J0cy5QYWdlQWN0aW9uRXZlbnRUeXBlID0gZXhwb3J0cy5PUFMgPSBleHBvcnRzLk1pc3NpbmdQREZFeGNlcHRpb24gPSBleHBvcnRzLklzTGl0dGxlRW5kaWFuQ2FjaGVkID0gZXhwb3J0cy5Jc0V2YWxTdXBwb3J0ZWRDYWNoZWQgPSBleHBvcnRzLkludmFsaWRQREZFeGNlcHRpb24gPSBleHBvcnRzLkltYWdlS2luZCA9IGV4cG9ydHMuSURFTlRJVFlfTUFUUklYID0gZXhwb3J0cy5Gb3JtYXRFcnJvciA9IGV4cG9ydHMuRm9udFR5cGUgPSBleHBvcnRzLkZPTlRfSURFTlRJVFlfTUFUUklYID0gZXhwb3J0cy5Eb2N1bWVudEFjdGlvbkV2ZW50VHlwZSA9IGV4cG9ydHMuQ01hcENvbXByZXNzaW9uVHlwZSA9IGV4cG9ydHMuQmFzZUV4Y2VwdGlvbiA9IGV4cG9ydHMuQW5ub3RhdGlvblR5cGUgPSBleHBvcnRzLkFubm90YXRpb25TdGF0ZU1vZGVsVHlwZSA9IGV4cG9ydHMuQW5ub3RhdGlvblJldmlld1N0YXRlID0gZXhwb3J0cy5Bbm5vdGF0aW9uUmVwbHlUeXBlID0gZXhwb3J0cy5Bbm5vdGF0aW9uTW9kZSA9IGV4cG9ydHMuQW5ub3RhdGlvbk1hcmtlZFN0YXRlID0gZXhwb3J0cy5Bbm5vdGF0aW9uRmxhZyA9IGV4cG9ydHMuQW5ub3RhdGlvbkZpZWxkRmxhZyA9IGV4cG9ydHMuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZSA9IGV4cG9ydHMuQW5ub3RhdGlvbkFjdGlvbkV2ZW50VHlwZSA9IGV4cG9ydHMuQWJvcnRFeGNlcHRpb24gPSB2b2lkIDA7XG5leHBvcnRzLmFycmF5Qnl0ZUxlbmd0aCA9IGFycmF5Qnl0ZUxlbmd0aDtcbmV4cG9ydHMuYXJyYXlzVG9CeXRlcyA9IGFycmF5c1RvQnl0ZXM7XG5leHBvcnRzLmFzc2VydCA9IGFzc2VydDtcbmV4cG9ydHMuYnl0ZXNUb1N0cmluZyA9IGJ5dGVzVG9TdHJpbmc7XG5leHBvcnRzLmNyZWF0ZU9iamVjdFVSTCA9IGNyZWF0ZU9iamVjdFVSTDtcbmV4cG9ydHMuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkgPSBjcmVhdGVQcm9taXNlQ2FwYWJpbGl0eTtcbmV4cG9ydHMuY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCA9IGNyZWF0ZVZhbGlkQWJzb2x1dGVVcmw7XG5leHBvcnRzLmVzY2FwZVN0cmluZyA9IGVzY2FwZVN0cmluZztcbmV4cG9ydHMuZ2V0TW9kaWZpY2F0aW9uRGF0ZSA9IGdldE1vZGlmaWNhdGlvbkRhdGU7XG5leHBvcnRzLmdldFZlcmJvc2l0eUxldmVsID0gZ2V0VmVyYm9zaXR5TGV2ZWw7XG5leHBvcnRzLmluZm8gPSBpbmZvO1xuZXhwb3J0cy5pc0FycmF5QnVmZmVyID0gaXNBcnJheUJ1ZmZlcjtcbmV4cG9ydHMuaXNBcnJheUVxdWFsID0gaXNBcnJheUVxdWFsO1xuZXhwb3J0cy5pc0FzY2lpID0gaXNBc2NpaTtcbmV4cG9ydHMuaXNCb29sID0gaXNCb29sO1xuZXhwb3J0cy5pc051bSA9IGlzTnVtO1xuZXhwb3J0cy5pc1NhbWVPcmlnaW4gPSBpc1NhbWVPcmlnaW47XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5leHBvcnRzLm9iamVjdEZyb21NYXAgPSBvYmplY3RGcm9tTWFwO1xuZXhwb3J0cy5vYmplY3RTaXplID0gb2JqZWN0U2l6ZTtcbmV4cG9ydHMucmVtb3ZlTnVsbENoYXJhY3RlcnMgPSByZW1vdmVOdWxsQ2hhcmFjdGVycztcbmV4cG9ydHMuc2V0VmVyYm9zaXR5TGV2ZWwgPSBzZXRWZXJib3NpdHlMZXZlbDtcbmV4cG9ydHMuc2hhZG93ID0gc2hhZG93O1xuZXhwb3J0cy5zdHJpbmczMiA9IHN0cmluZzMyO1xuZXhwb3J0cy5zdHJpbmdUb0J5dGVzID0gc3RyaW5nVG9CeXRlcztcbmV4cG9ydHMuc3RyaW5nVG9QREZTdHJpbmcgPSBzdHJpbmdUb1BERlN0cmluZztcbmV4cG9ydHMuc3RyaW5nVG9VVEYxNkJFU3RyaW5nID0gc3RyaW5nVG9VVEYxNkJFU3RyaW5nO1xuZXhwb3J0cy5zdHJpbmdUb1VURjhTdHJpbmcgPSBzdHJpbmdUb1VURjhTdHJpbmc7XG5leHBvcnRzLnVucmVhY2hhYmxlID0gdW5yZWFjaGFibGU7XG5leHBvcnRzLnV0ZjhTdHJpbmdUb1N0cmluZyA9IHV0ZjhTdHJpbmdUb1N0cmluZztcbmV4cG9ydHMud2FybiA9IHdhcm47XG5cbl9fd19wZGZqc19yZXF1aXJlX18oMyk7XG5cbmNvbnN0IElERU5USVRZX01BVFJJWCA9IFsxLCAwLCAwLCAxLCAwLCAwXTtcbmV4cG9ydHMuSURFTlRJVFlfTUFUUklYID0gSURFTlRJVFlfTUFUUklYO1xuY29uc3QgRk9OVF9JREVOVElUWV9NQVRSSVggPSBbMC4wMDEsIDAsIDAsIDAuMDAxLCAwLCAwXTtcbmV4cG9ydHMuRk9OVF9JREVOVElUWV9NQVRSSVggPSBGT05UX0lERU5USVRZX01BVFJJWDtcbmNvbnN0IFJlbmRlcmluZ0ludGVudEZsYWcgPSB7XG4gIEFOWTogMHgwMSxcbiAgRElTUExBWTogMHgwMixcbiAgUFJJTlQ6IDB4MDQsXG4gIEFOTk9UQVRJT05TX0ZPUk1TOiAweDEwLFxuICBBTk5PVEFUSU9OU19TVE9SQUdFOiAweDIwLFxuICBBTk5PVEFUSU9OU19ESVNBQkxFOiAweDQwLFxuICBPUExJU1Q6IDB4MTAwXG59O1xuZXhwb3J0cy5SZW5kZXJpbmdJbnRlbnRGbGFnID0gUmVuZGVyaW5nSW50ZW50RmxhZztcbmNvbnN0IEFubm90YXRpb25Nb2RlID0ge1xuICBESVNBQkxFOiAwLFxuICBFTkFCTEU6IDEsXG4gIEVOQUJMRV9GT1JNUzogMixcbiAgRU5BQkxFX1NUT1JBR0U6IDNcbn07XG5leHBvcnRzLkFubm90YXRpb25Nb2RlID0gQW5ub3RhdGlvbk1vZGU7XG5jb25zdCBQZXJtaXNzaW9uRmxhZyA9IHtcbiAgUFJJTlQ6IDB4MDQsXG4gIE1PRElGWV9DT05URU5UUzogMHgwOCxcbiAgQ09QWTogMHgxMCxcbiAgTU9ESUZZX0FOTk9UQVRJT05TOiAweDIwLFxuICBGSUxMX0lOVEVSQUNUSVZFX0ZPUk1TOiAweDEwMCxcbiAgQ09QWV9GT1JfQUNDRVNTSUJJTElUWTogMHgyMDAsXG4gIEFTU0VNQkxFOiAweDQwMCxcbiAgUFJJTlRfSElHSF9RVUFMSVRZOiAweDgwMFxufTtcbmV4cG9ydHMuUGVybWlzc2lvbkZsYWcgPSBQZXJtaXNzaW9uRmxhZztcbmNvbnN0IFRleHRSZW5kZXJpbmdNb2RlID0ge1xuICBGSUxMOiAwLFxuICBTVFJPS0U6IDEsXG4gIEZJTExfU1RST0tFOiAyLFxuICBJTlZJU0lCTEU6IDMsXG4gIEZJTExfQUREX1RPX1BBVEg6IDQsXG4gIFNUUk9LRV9BRERfVE9fUEFUSDogNSxcbiAgRklMTF9TVFJPS0VfQUREX1RPX1BBVEg6IDYsXG4gIEFERF9UT19QQVRIOiA3LFxuICBGSUxMX1NUUk9LRV9NQVNLOiAzLFxuICBBRERfVE9fUEFUSF9GTEFHOiA0XG59O1xuZXhwb3J0cy5UZXh0UmVuZGVyaW5nTW9kZSA9IFRleHRSZW5kZXJpbmdNb2RlO1xuY29uc3QgSW1hZ2VLaW5kID0ge1xuICBHUkFZU0NBTEVfMUJQUDogMSxcbiAgUkdCXzI0QlBQOiAyLFxuICBSR0JBXzMyQlBQOiAzXG59O1xuZXhwb3J0cy5JbWFnZUtpbmQgPSBJbWFnZUtpbmQ7XG5jb25zdCBBbm5vdGF0aW9uVHlwZSA9IHtcbiAgVEVYVDogMSxcbiAgTElOSzogMixcbiAgRlJFRVRFWFQ6IDMsXG4gIExJTkU6IDQsXG4gIFNRVUFSRTogNSxcbiAgQ0lSQ0xFOiA2LFxuICBQT0xZR09OOiA3LFxuICBQT0xZTElORTogOCxcbiAgSElHSExJR0hUOiA5LFxuICBVTkRFUkxJTkU6IDEwLFxuICBTUVVJR0dMWTogMTEsXG4gIFNUUklLRU9VVDogMTIsXG4gIFNUQU1QOiAxMyxcbiAgQ0FSRVQ6IDE0LFxuICBJTks6IDE1LFxuICBQT1BVUDogMTYsXG4gIEZJTEVBVFRBQ0hNRU5UOiAxNyxcbiAgU09VTkQ6IDE4LFxuICBNT1ZJRTogMTksXG4gIFdJREdFVDogMjAsXG4gIFNDUkVFTjogMjEsXG4gIFBSSU5URVJNQVJLOiAyMixcbiAgVFJBUE5FVDogMjMsXG4gIFdBVEVSTUFSSzogMjQsXG4gIFRIUkVFRDogMjUsXG4gIFJFREFDVDogMjZcbn07XG5leHBvcnRzLkFubm90YXRpb25UeXBlID0gQW5ub3RhdGlvblR5cGU7XG5jb25zdCBBbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGUgPSB7XG4gIE1BUktFRDogXCJNYXJrZWRcIixcbiAgUkVWSUVXOiBcIlJldmlld1wiXG59O1xuZXhwb3J0cy5Bbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGUgPSBBbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGU7XG5jb25zdCBBbm5vdGF0aW9uTWFya2VkU3RhdGUgPSB7XG4gIE1BUktFRDogXCJNYXJrZWRcIixcbiAgVU5NQVJLRUQ6IFwiVW5tYXJrZWRcIlxufTtcbmV4cG9ydHMuQW5ub3RhdGlvbk1hcmtlZFN0YXRlID0gQW5ub3RhdGlvbk1hcmtlZFN0YXRlO1xuY29uc3QgQW5ub3RhdGlvblJldmlld1N0YXRlID0ge1xuICBBQ0NFUFRFRDogXCJBY2NlcHRlZFwiLFxuICBSRUpFQ1RFRDogXCJSZWplY3RlZFwiLFxuICBDQU5DRUxMRUQ6IFwiQ2FuY2VsbGVkXCIsXG4gIENPTVBMRVRFRDogXCJDb21wbGV0ZWRcIixcbiAgTk9ORTogXCJOb25lXCJcbn07XG5leHBvcnRzLkFubm90YXRpb25SZXZpZXdTdGF0ZSA9IEFubm90YXRpb25SZXZpZXdTdGF0ZTtcbmNvbnN0IEFubm90YXRpb25SZXBseVR5cGUgPSB7XG4gIEdST1VQOiBcIkdyb3VwXCIsXG4gIFJFUExZOiBcIlJcIlxufTtcbmV4cG9ydHMuQW5ub3RhdGlvblJlcGx5VHlwZSA9IEFubm90YXRpb25SZXBseVR5cGU7XG5jb25zdCBBbm5vdGF0aW9uRmxhZyA9IHtcbiAgSU5WSVNJQkxFOiAweDAxLFxuICBISURERU46IDB4MDIsXG4gIFBSSU5UOiAweDA0LFxuICBOT1pPT006IDB4MDgsXG4gIE5PUk9UQVRFOiAweDEwLFxuICBOT1ZJRVc6IDB4MjAsXG4gIFJFQURPTkxZOiAweDQwLFxuICBMT0NLRUQ6IDB4ODAsXG4gIFRPR0dMRU5PVklFVzogMHgxMDAsXG4gIExPQ0tFRENPTlRFTlRTOiAweDIwMFxufTtcbmV4cG9ydHMuQW5ub3RhdGlvbkZsYWcgPSBBbm5vdGF0aW9uRmxhZztcbmNvbnN0IEFubm90YXRpb25GaWVsZEZsYWcgPSB7XG4gIFJFQURPTkxZOiAweDAwMDAwMDEsXG4gIFJFUVVJUkVEOiAweDAwMDAwMDIsXG4gIE5PRVhQT1JUOiAweDAwMDAwMDQsXG4gIE1VTFRJTElORTogMHgwMDAxMDAwLFxuICBQQVNTV09SRDogMHgwMDAyMDAwLFxuICBOT1RPR0dMRVRPT0ZGOiAweDAwMDQwMDAsXG4gIFJBRElPOiAweDAwMDgwMDAsXG4gIFBVU0hCVVRUT046IDB4MDAxMDAwMCxcbiAgQ09NQk86IDB4MDAyMDAwMCxcbiAgRURJVDogMHgwMDQwMDAwLFxuICBTT1JUOiAweDAwODAwMDAsXG4gIEZJTEVTRUxFQ1Q6IDB4MDEwMDAwMCxcbiAgTVVMVElTRUxFQ1Q6IDB4MDIwMDAwMCxcbiAgRE9OT1RTUEVMTENIRUNLOiAweDA0MDAwMDAsXG4gIERPTk9UU0NST0xMOiAweDA4MDAwMDAsXG4gIENPTUI6IDB4MTAwMDAwMCxcbiAgUklDSFRFWFQ6IDB4MjAwMDAwMCxcbiAgUkFESU9TSU5VTklTT046IDB4MjAwMDAwMCxcbiAgQ09NTUlUT05TRUxDSEFOR0U6IDB4NDAwMDAwMFxufTtcbmV4cG9ydHMuQW5ub3RhdGlvbkZpZWxkRmxhZyA9IEFubm90YXRpb25GaWVsZEZsYWc7XG5jb25zdCBBbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlID0ge1xuICBTT0xJRDogMSxcbiAgREFTSEVEOiAyLFxuICBCRVZFTEVEOiAzLFxuICBJTlNFVDogNCxcbiAgVU5ERVJMSU5FOiA1XG59O1xuZXhwb3J0cy5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlID0gQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZTtcbmNvbnN0IEFubm90YXRpb25BY3Rpb25FdmVudFR5cGUgPSB7XG4gIEU6IFwiTW91c2UgRW50ZXJcIixcbiAgWDogXCJNb3VzZSBFeGl0XCIsXG4gIEQ6IFwiTW91c2UgRG93blwiLFxuICBVOiBcIk1vdXNlIFVwXCIsXG4gIEZvOiBcIkZvY3VzXCIsXG4gIEJsOiBcIkJsdXJcIixcbiAgUE86IFwiUGFnZU9wZW5cIixcbiAgUEM6IFwiUGFnZUNsb3NlXCIsXG4gIFBWOiBcIlBhZ2VWaXNpYmxlXCIsXG4gIFBJOiBcIlBhZ2VJbnZpc2libGVcIixcbiAgSzogXCJLZXlzdHJva2VcIixcbiAgRjogXCJGb3JtYXRcIixcbiAgVjogXCJWYWxpZGF0ZVwiLFxuICBDOiBcIkNhbGN1bGF0ZVwiXG59O1xuZXhwb3J0cy5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlID0gQW5ub3RhdGlvbkFjdGlvbkV2ZW50VHlwZTtcbmNvbnN0IERvY3VtZW50QWN0aW9uRXZlbnRUeXBlID0ge1xuICBXQzogXCJXaWxsQ2xvc2VcIixcbiAgV1M6IFwiV2lsbFNhdmVcIixcbiAgRFM6IFwiRGlkU2F2ZVwiLFxuICBXUDogXCJXaWxsUHJpbnRcIixcbiAgRFA6IFwiRGlkUHJpbnRcIlxufTtcbmV4cG9ydHMuRG9jdW1lbnRBY3Rpb25FdmVudFR5cGUgPSBEb2N1bWVudEFjdGlvbkV2ZW50VHlwZTtcbmNvbnN0IFBhZ2VBY3Rpb25FdmVudFR5cGUgPSB7XG4gIE86IFwiUGFnZU9wZW5cIixcbiAgQzogXCJQYWdlQ2xvc2VcIlxufTtcbmV4cG9ydHMuUGFnZUFjdGlvbkV2ZW50VHlwZSA9IFBhZ2VBY3Rpb25FdmVudFR5cGU7XG5jb25zdCBTdHJlYW1UeXBlID0ge1xuICBVTktOT1dOOiBcIlVOS05PV05cIixcbiAgRkxBVEU6IFwiRkxBVEVcIixcbiAgTFpXOiBcIkxaV1wiLFxuICBEQ1Q6IFwiRENUXCIsXG4gIEpQWDogXCJKUFhcIixcbiAgSkJJRzogXCJKQklHXCIsXG4gIEE4NTogXCJBODVcIixcbiAgQUhYOiBcIkFIWFwiLFxuICBDQ0Y6IFwiQ0NGXCIsXG4gIFJMWDogXCJSTFhcIlxufTtcbmV4cG9ydHMuU3RyZWFtVHlwZSA9IFN0cmVhbVR5cGU7XG5jb25zdCBGb250VHlwZSA9IHtcbiAgVU5LTk9XTjogXCJVTktOT1dOXCIsXG4gIFRZUEUxOiBcIlRZUEUxXCIsXG4gIFRZUEUxU1RBTkRBUkQ6IFwiVFlQRTFTVEFOREFSRFwiLFxuICBUWVBFMUM6IFwiVFlQRTFDXCIsXG4gIENJREZPTlRUWVBFMDogXCJDSURGT05UVFlQRTBcIixcbiAgQ0lERk9OVFRZUEUwQzogXCJDSURGT05UVFlQRTBDXCIsXG4gIFRSVUVUWVBFOiBcIlRSVUVUWVBFXCIsXG4gIENJREZPTlRUWVBFMjogXCJDSURGT05UVFlQRTJcIixcbiAgVFlQRTM6IFwiVFlQRTNcIixcbiAgT1BFTlRZUEU6IFwiT1BFTlRZUEVcIixcbiAgVFlQRTA6IFwiVFlQRTBcIixcbiAgTU1UWVBFMTogXCJNTVRZUEUxXCJcbn07XG5leHBvcnRzLkZvbnRUeXBlID0gRm9udFR5cGU7XG5jb25zdCBWZXJib3NpdHlMZXZlbCA9IHtcbiAgRVJST1JTOiAwLFxuICBXQVJOSU5HUzogMSxcbiAgSU5GT1M6IDVcbn07XG5leHBvcnRzLlZlcmJvc2l0eUxldmVsID0gVmVyYm9zaXR5TGV2ZWw7XG5jb25zdCBDTWFwQ29tcHJlc3Npb25UeXBlID0ge1xuICBOT05FOiAwLFxuICBCSU5BUlk6IDEsXG4gIFNUUkVBTTogMlxufTtcbmV4cG9ydHMuQ01hcENvbXByZXNzaW9uVHlwZSA9IENNYXBDb21wcmVzc2lvblR5cGU7XG5jb25zdCBPUFMgPSB7XG4gIGRlcGVuZGVuY3k6IDEsXG4gIHNldExpbmVXaWR0aDogMixcbiAgc2V0TGluZUNhcDogMyxcbiAgc2V0TGluZUpvaW46IDQsXG4gIHNldE1pdGVyTGltaXQ6IDUsXG4gIHNldERhc2g6IDYsXG4gIHNldFJlbmRlcmluZ0ludGVudDogNyxcbiAgc2V0RmxhdG5lc3M6IDgsXG4gIHNldEdTdGF0ZTogOSxcbiAgc2F2ZTogMTAsXG4gIHJlc3RvcmU6IDExLFxuICB0cmFuc2Zvcm06IDEyLFxuICBtb3ZlVG86IDEzLFxuICBsaW5lVG86IDE0LFxuICBjdXJ2ZVRvOiAxNSxcbiAgY3VydmVUbzI6IDE2LFxuICBjdXJ2ZVRvMzogMTcsXG4gIGNsb3NlUGF0aDogMTgsXG4gIHJlY3RhbmdsZTogMTksXG4gIHN0cm9rZTogMjAsXG4gIGNsb3NlU3Ryb2tlOiAyMSxcbiAgZmlsbDogMjIsXG4gIGVvRmlsbDogMjMsXG4gIGZpbGxTdHJva2U6IDI0LFxuICBlb0ZpbGxTdHJva2U6IDI1LFxuICBjbG9zZUZpbGxTdHJva2U6IDI2LFxuICBjbG9zZUVPRmlsbFN0cm9rZTogMjcsXG4gIGVuZFBhdGg6IDI4LFxuICBjbGlwOiAyOSxcbiAgZW9DbGlwOiAzMCxcbiAgYmVnaW5UZXh0OiAzMSxcbiAgZW5kVGV4dDogMzIsXG4gIHNldENoYXJTcGFjaW5nOiAzMyxcbiAgc2V0V29yZFNwYWNpbmc6IDM0LFxuICBzZXRIU2NhbGU6IDM1LFxuICBzZXRMZWFkaW5nOiAzNixcbiAgc2V0Rm9udDogMzcsXG4gIHNldFRleHRSZW5kZXJpbmdNb2RlOiAzOCxcbiAgc2V0VGV4dFJpc2U6IDM5LFxuICBtb3ZlVGV4dDogNDAsXG4gIHNldExlYWRpbmdNb3ZlVGV4dDogNDEsXG4gIHNldFRleHRNYXRyaXg6IDQyLFxuICBuZXh0TGluZTogNDMsXG4gIHNob3dUZXh0OiA0NCxcbiAgc2hvd1NwYWNlZFRleHQ6IDQ1LFxuICBuZXh0TGluZVNob3dUZXh0OiA0NixcbiAgbmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6IDQ3LFxuICBzZXRDaGFyV2lkdGg6IDQ4LFxuICBzZXRDaGFyV2lkdGhBbmRCb3VuZHM6IDQ5LFxuICBzZXRTdHJva2VDb2xvclNwYWNlOiA1MCxcbiAgc2V0RmlsbENvbG9yU3BhY2U6IDUxLFxuICBzZXRTdHJva2VDb2xvcjogNTIsXG4gIHNldFN0cm9rZUNvbG9yTjogNTMsXG4gIHNldEZpbGxDb2xvcjogNTQsXG4gIHNldEZpbGxDb2xvck46IDU1LFxuICBzZXRTdHJva2VHcmF5OiA1NixcbiAgc2V0RmlsbEdyYXk6IDU3LFxuICBzZXRTdHJva2VSR0JDb2xvcjogNTgsXG4gIHNldEZpbGxSR0JDb2xvcjogNTksXG4gIHNldFN0cm9rZUNNWUtDb2xvcjogNjAsXG4gIHNldEZpbGxDTVlLQ29sb3I6IDYxLFxuICBzaGFkaW5nRmlsbDogNjIsXG4gIGJlZ2luSW5saW5lSW1hZ2U6IDYzLFxuICBiZWdpbkltYWdlRGF0YTogNjQsXG4gIGVuZElubGluZUltYWdlOiA2NSxcbiAgcGFpbnRYT2JqZWN0OiA2NixcbiAgbWFya1BvaW50OiA2NyxcbiAgbWFya1BvaW50UHJvcHM6IDY4LFxuICBiZWdpbk1hcmtlZENvbnRlbnQ6IDY5LFxuICBiZWdpbk1hcmtlZENvbnRlbnRQcm9wczogNzAsXG4gIGVuZE1hcmtlZENvbnRlbnQ6IDcxLFxuICBiZWdpbkNvbXBhdDogNzIsXG4gIGVuZENvbXBhdDogNzMsXG4gIHBhaW50Rm9ybVhPYmplY3RCZWdpbjogNzQsXG4gIHBhaW50Rm9ybVhPYmplY3RFbmQ6IDc1LFxuICBiZWdpbkdyb3VwOiA3NixcbiAgZW5kR3JvdXA6IDc3LFxuICBiZWdpbkFubm90YXRpb25zOiA3OCxcbiAgZW5kQW5ub3RhdGlvbnM6IDc5LFxuICBiZWdpbkFubm90YXRpb246IDgwLFxuICBlbmRBbm5vdGF0aW9uOiA4MSxcbiAgcGFpbnRKcGVnWE9iamVjdDogODIsXG4gIHBhaW50SW1hZ2VNYXNrWE9iamVjdDogODMsXG4gIHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwOiA4NCxcbiAgcGFpbnRJbWFnZVhPYmplY3Q6IDg1LFxuICBwYWludElubGluZUltYWdlWE9iamVjdDogODYsXG4gIHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6IDg3LFxuICBwYWludEltYWdlWE9iamVjdFJlcGVhdDogODgsXG4gIHBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdDogODksXG4gIHBhaW50U29saWRDb2xvckltYWdlTWFzazogOTAsXG4gIGNvbnN0cnVjdFBhdGg6IDkxXG59O1xuZXhwb3J0cy5PUFMgPSBPUFM7XG5jb25zdCBVTlNVUFBPUlRFRF9GRUFUVVJFUyA9IHtcbiAgdW5rbm93bjogXCJ1bmtub3duXCIsXG4gIGZvcm1zOiBcImZvcm1zXCIsXG4gIGphdmFTY3JpcHQ6IFwiamF2YVNjcmlwdFwiLFxuICBzaWduYXR1cmVzOiBcInNpZ25hdHVyZXNcIixcbiAgc21hc2s6IFwic21hc2tcIixcbiAgc2hhZGluZ1BhdHRlcm46IFwic2hhZGluZ1BhdHRlcm5cIixcbiAgZm9udDogXCJmb250XCIsXG4gIGVycm9yVGlsaW5nUGF0dGVybjogXCJlcnJvclRpbGluZ1BhdHRlcm5cIixcbiAgZXJyb3JFeHRHU3RhdGU6IFwiZXJyb3JFeHRHU3RhdGVcIixcbiAgZXJyb3JYT2JqZWN0OiBcImVycm9yWE9iamVjdFwiLFxuICBlcnJvckZvbnRMb2FkVHlwZTM6IFwiZXJyb3JGb250TG9hZFR5cGUzXCIsXG4gIGVycm9yRm9udFN0YXRlOiBcImVycm9yRm9udFN0YXRlXCIsXG4gIGVycm9yRm9udE1pc3Npbmc6IFwiZXJyb3JGb250TWlzc2luZ1wiLFxuICBlcnJvckZvbnRUcmFuc2xhdGU6IFwiZXJyb3JGb250VHJhbnNsYXRlXCIsXG4gIGVycm9yQ29sb3JTcGFjZTogXCJlcnJvckNvbG9yU3BhY2VcIixcbiAgZXJyb3JPcGVyYXRvckxpc3Q6IFwiZXJyb3JPcGVyYXRvckxpc3RcIixcbiAgZXJyb3JGb250VG9Vbmljb2RlOiBcImVycm9yRm9udFRvVW5pY29kZVwiLFxuICBlcnJvckZvbnRMb2FkTmF0aXZlOiBcImVycm9yRm9udExvYWROYXRpdmVcIixcbiAgZXJyb3JGb250QnVpbGRQYXRoOiBcImVycm9yRm9udEJ1aWxkUGF0aFwiLFxuICBlcnJvckZvbnRHZXRQYXRoOiBcImVycm9yRm9udEdldFBhdGhcIixcbiAgZXJyb3JNYXJrZWRDb250ZW50OiBcImVycm9yTWFya2VkQ29udGVudFwiLFxuICBlcnJvckNvbnRlbnRTdWJTdHJlYW06IFwiZXJyb3JDb250ZW50U3ViU3RyZWFtXCJcbn07XG5leHBvcnRzLlVOU1VQUE9SVEVEX0ZFQVRVUkVTID0gVU5TVVBQT1JURURfRkVBVFVSRVM7XG5jb25zdCBQYXNzd29yZFJlc3BvbnNlcyA9IHtcbiAgTkVFRF9QQVNTV09SRDogMSxcbiAgSU5DT1JSRUNUX1BBU1NXT1JEOiAyXG59O1xuZXhwb3J0cy5QYXNzd29yZFJlc3BvbnNlcyA9IFBhc3N3b3JkUmVzcG9uc2VzO1xubGV0IHZlcmJvc2l0eSA9IFZlcmJvc2l0eUxldmVsLldBUk5JTkdTO1xuXG5mdW5jdGlvbiBzZXRWZXJib3NpdHlMZXZlbChsZXZlbCkge1xuICBpZiAoTnVtYmVyLmlzSW50ZWdlcihsZXZlbCkpIHtcbiAgICB2ZXJib3NpdHkgPSBsZXZlbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRWZXJib3NpdHlMZXZlbCgpIHtcbiAgcmV0dXJuIHZlcmJvc2l0eTtcbn1cblxuZnVuY3Rpb24gaW5mbyhtc2cpIHtcbiAgaWYgKHZlcmJvc2l0eSA+PSBWZXJib3NpdHlMZXZlbC5JTkZPUykge1xuICAgIGNvbnNvbGUubG9nKGBJbmZvOiAke21zZ31gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuKG1zZykge1xuICBpZiAodmVyYm9zaXR5ID49IFZlcmJvc2l0eUxldmVsLldBUk5JTkdTKSB7XG4gICAgY29uc29sZS5sb2coYFdhcm5pbmc6ICR7bXNnfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVucmVhY2hhYmxlKG1zZykge1xuICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0KGNvbmQsIG1zZykge1xuICBpZiAoIWNvbmQpIHtcbiAgICB1bnJlYWNoYWJsZShtc2cpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzU2FtZU9yaWdpbihiYXNlVXJsLCBvdGhlclVybCkge1xuICBsZXQgYmFzZTtcblxuICB0cnkge1xuICAgIGJhc2UgPSBuZXcgVVJMKGJhc2VVcmwpO1xuXG4gICAgaWYgKCFiYXNlLm9yaWdpbiB8fCBiYXNlLm9yaWdpbiA9PT0gXCJudWxsXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBvdGhlciA9IG5ldyBVUkwob3RoZXJVcmwsIGJhc2UpO1xuICByZXR1cm4gYmFzZS5vcmlnaW4gPT09IG90aGVyLm9yaWdpbjtcbn1cblxuZnVuY3Rpb24gX2lzVmFsaWRQcm90b2NvbCh1cmwpIHtcbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2ggKHVybC5wcm90b2NvbCkge1xuICAgIGNhc2UgXCJodHRwOlwiOlxuICAgIGNhc2UgXCJodHRwczpcIjpcbiAgICBjYXNlIFwiZnRwOlwiOlxuICAgIGNhc2UgXCJtYWlsdG86XCI6XG4gICAgY2FzZSBcInRlbDpcIjpcbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVWYWxpZEFic29sdXRlVXJsKHVybCwgYmFzZVVybCA9IG51bGwsIG9wdGlvbnMgPSBudWxsKSB7XG4gIGlmICghdXJsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiB1cmwgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGlmIChvcHRpb25zLmFkZERlZmF1bHRQcm90b2NvbCAmJiB1cmwuc3RhcnRzV2l0aChcInd3dy5cIikpIHtcbiAgICAgICAgY29uc3QgZG90cyA9IHVybC5tYXRjaCgvXFwuL2cpO1xuXG4gICAgICAgIGlmIChkb3RzICYmIGRvdHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICB1cmwgPSBgaHR0cDovLyR7dXJsfWA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMudHJ5Q29udmVydEVuY29kaW5nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdXJsID0gc3RyaW5nVG9VVEY4U3RyaW5nKHVybCk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7fVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFic29sdXRlVXJsID0gYmFzZVVybCA/IG5ldyBVUkwodXJsLCBiYXNlVXJsKSA6IG5ldyBVUkwodXJsKTtcblxuICAgIGlmIChfaXNWYWxpZFByb3RvY29sKGFic29sdXRlVXJsKSkge1xuICAgICAgcmV0dXJuIGFic29sdXRlVXJsO1xuICAgIH1cbiAgfSBjYXRjaCAoZXgpIHt9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHNoYWRvdyhvYmosIHByb3AsIHZhbHVlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIHtcbiAgICB2YWx1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuY29uc3QgQmFzZUV4Y2VwdGlvbiA9IGZ1bmN0aW9uIEJhc2VFeGNlcHRpb25DbG9zdXJlKCkge1xuICBmdW5jdGlvbiBCYXNlRXhjZXB0aW9uKG1lc3NhZ2UsIG5hbWUpIHtcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gQmFzZUV4Y2VwdGlvbikge1xuICAgICAgdW5yZWFjaGFibGUoXCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlRXhjZXB0aW9uLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBCYXNlRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICBCYXNlRXhjZXB0aW9uLmNvbnN0cnVjdG9yID0gQmFzZUV4Y2VwdGlvbjtcbiAgcmV0dXJuIEJhc2VFeGNlcHRpb247XG59KCk7XG5cbmV4cG9ydHMuQmFzZUV4Y2VwdGlvbiA9IEJhc2VFeGNlcHRpb247XG5cbmNsYXNzIFBhc3N3b3JkRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZywgY29kZSkge1xuICAgIHN1cGVyKG1zZywgXCJQYXNzd29yZEV4Y2VwdGlvblwiKTtcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QYXNzd29yZEV4Y2VwdGlvbiA9IFBhc3N3b3JkRXhjZXB0aW9uO1xuXG5jbGFzcyBVbmtub3duRXJyb3JFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobXNnLCBkZXRhaWxzKSB7XG4gICAgc3VwZXIobXNnLCBcIlVua25vd25FcnJvckV4Y2VwdGlvblwiKTtcbiAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Vbmtub3duRXJyb3JFeGNlcHRpb24gPSBVbmtub3duRXJyb3JFeGNlcHRpb247XG5cbmNsYXNzIEludmFsaWRQREZFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgc3VwZXIobXNnLCBcIkludmFsaWRQREZFeGNlcHRpb25cIik7XG4gIH1cblxufVxuXG5leHBvcnRzLkludmFsaWRQREZFeGNlcHRpb24gPSBJbnZhbGlkUERGRXhjZXB0aW9uO1xuXG5jbGFzcyBNaXNzaW5nUERGRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZykge1xuICAgIHN1cGVyKG1zZywgXCJNaXNzaW5nUERGRXhjZXB0aW9uXCIpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5NaXNzaW5nUERGRXhjZXB0aW9uID0gTWlzc2luZ1BERkV4Y2VwdGlvbjtcblxuY2xhc3MgVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZywgc3RhdHVzKSB7XG4gICAgc3VwZXIobXNnLCBcIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvblwiKTtcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgfVxuXG59XG5cbmV4cG9ydHMuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uID0gVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uO1xuXG5jbGFzcyBGb3JtYXRFcnJvciBleHRlbmRzIEJhc2VFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3Rvcihtc2cpIHtcbiAgICBzdXBlcihtc2csIFwiRm9ybWF0RXJyb3JcIik7XG4gIH1cblxufVxuXG5leHBvcnRzLkZvcm1hdEVycm9yID0gRm9ybWF0RXJyb3I7XG5cbmNsYXNzIEFib3J0RXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZykge1xuICAgIHN1cGVyKG1zZywgXCJBYm9ydEV4Y2VwdGlvblwiKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQWJvcnRFeGNlcHRpb24gPSBBYm9ydEV4Y2VwdGlvbjtcbmNvbnN0IE51bGxDaGFyYWN0ZXJzUmVnRXhwID0gL1xceDAwKy9nO1xuY29uc3QgSW52aXNpYmxlQ2hhcmFjdGVyc1JlZ0V4cCA9IC9bXFx4MDEtXFx4MUZdL2c7XG5cbmZ1bmN0aW9uIHJlbW92ZU51bGxDaGFyYWN0ZXJzKHN0ciwgcmVwbGFjZUludmlzaWJsZSA9IGZhbHNlKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSBcInN0cmluZ1wiKSB7XG4gICAgd2FybihcIlRoZSBhcmd1bWVudCBmb3IgcmVtb3ZlTnVsbENoYXJhY3RlcnMgbXVzdCBiZSBhIHN0cmluZy5cIik7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIGlmIChyZXBsYWNlSW52aXNpYmxlKSB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoSW52aXNpYmxlQ2hhcmFjdGVyc1JlZ0V4cCwgXCIgXCIpO1xuICB9XG5cbiAgcmV0dXJuIHN0ci5yZXBsYWNlKE51bGxDaGFyYWN0ZXJzUmVnRXhwLCBcIlwiKTtcbn1cblxuZnVuY3Rpb24gYnl0ZXNUb1N0cmluZyhieXRlcykge1xuICBhc3NlcnQoYnl0ZXMgIT09IG51bGwgJiYgdHlwZW9mIGJ5dGVzID09PSBcIm9iamVjdFwiICYmIGJ5dGVzLmxlbmd0aCAhPT0gdW5kZWZpbmVkLCBcIkludmFsaWQgYXJndW1lbnQgZm9yIGJ5dGVzVG9TdHJpbmdcIik7XG4gIGNvbnN0IGxlbmd0aCA9IGJ5dGVzLmxlbmd0aDtcbiAgY29uc3QgTUFYX0FSR1VNRU5UX0NPVU5UID0gODE5MjtcblxuICBpZiAobGVuZ3RoIDwgTUFYX0FSR1VNRU5UX0NPVU5UKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgYnl0ZXMpO1xuICB9XG5cbiAgY29uc3Qgc3RyQnVmID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gTUFYX0FSR1VNRU5UX0NPVU5UKSB7XG4gICAgY29uc3QgY2h1bmtFbmQgPSBNYXRoLm1pbihpICsgTUFYX0FSR1VNRU5UX0NPVU5ULCBsZW5ndGgpO1xuICAgIGNvbnN0IGNodW5rID0gYnl0ZXMuc3ViYXJyYXkoaSwgY2h1bmtFbmQpO1xuICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgY2h1bmspKTtcbiAgfVxuXG4gIHJldHVybiBzdHJCdWYuam9pbihcIlwiKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5nVG9CeXRlcyhzdHIpIHtcbiAgYXNzZXJ0KHR5cGVvZiBzdHIgPT09IFwic3RyaW5nXCIsIFwiSW52YWxpZCBhcmd1bWVudCBmb3Igc3RyaW5nVG9CeXRlc1wiKTtcbiAgY29uc3QgbGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBieXRlc1tpXSA9IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZjtcbiAgfVxuXG4gIHJldHVybiBieXRlcztcbn1cblxuZnVuY3Rpb24gYXJyYXlCeXRlTGVuZ3RoKGFycikge1xuICBpZiAoYXJyLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGFyci5sZW5ndGg7XG4gIH1cblxuICBhc3NlcnQoYXJyLmJ5dGVMZW5ndGggIT09IHVuZGVmaW5lZCwgXCJhcnJheUJ5dGVMZW5ndGggLSBpbnZhbGlkIGFyZ3VtZW50LlwiKTtcbiAgcmV0dXJuIGFyci5ieXRlTGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBhcnJheXNUb0J5dGVzKGFycikge1xuICBjb25zdCBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gIGlmIChsZW5ndGggPT09IDEgJiYgYXJyWzBdIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgIHJldHVybiBhcnJbMF07XG4gIH1cblxuICBsZXQgcmVzdWx0TGVuZ3RoID0gMDtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgcmVzdWx0TGVuZ3RoICs9IGFycmF5Qnl0ZUxlbmd0aChhcnJbaV0pO1xuICB9XG5cbiAgbGV0IHBvcyA9IDA7XG4gIGNvbnN0IGRhdGEgPSBuZXcgVWludDhBcnJheShyZXN1bHRMZW5ndGgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgaXRlbSA9IGFycltpXTtcblxuICAgIGlmICghKGl0ZW0gaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGl0ZW0gPSBzdHJpbmdUb0J5dGVzKGl0ZW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbSA9IG5ldyBVaW50OEFycmF5KGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGl0ZW1MZW5ndGggPSBpdGVtLmJ5dGVMZW5ndGg7XG4gICAgZGF0YS5zZXQoaXRlbSwgcG9zKTtcbiAgICBwb3MgKz0gaXRlbUxlbmd0aDtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBzdHJpbmczMih2YWx1ZSkge1xuICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh2YWx1ZSA+PiAyNCAmIDB4ZmYsIHZhbHVlID4+IDE2ICYgMHhmZiwgdmFsdWUgPj4gOCAmIDB4ZmYsIHZhbHVlICYgMHhmZik7XG59XG5cbmZ1bmN0aW9uIG9iamVjdFNpemUob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gb2JqZWN0RnJvbU1hcChtYXApIHtcbiAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBtYXApIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gaXNMaXR0bGVFbmRpYW4oKSB7XG4gIGNvbnN0IGJ1ZmZlcjggPSBuZXcgVWludDhBcnJheSg0KTtcbiAgYnVmZmVyOFswXSA9IDE7XG4gIGNvbnN0IHZpZXczMiA9IG5ldyBVaW50MzJBcnJheShidWZmZXI4LmJ1ZmZlciwgMCwgMSk7XG4gIHJldHVybiB2aWV3MzJbMF0gPT09IDE7XG59XG5cbmNvbnN0IElzTGl0dGxlRW5kaWFuQ2FjaGVkID0ge1xuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHNoYWRvdyh0aGlzLCBcInZhbHVlXCIsIGlzTGl0dGxlRW5kaWFuKCkpO1xuICB9XG5cbn07XG5leHBvcnRzLklzTGl0dGxlRW5kaWFuQ2FjaGVkID0gSXNMaXR0bGVFbmRpYW5DYWNoZWQ7XG5cbmZ1bmN0aW9uIGlzRXZhbFN1cHBvcnRlZCgpIHtcbiAgdHJ5IHtcbiAgICBuZXcgRnVuY3Rpb24oXCJcIik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuY29uc3QgSXNFdmFsU3VwcG9ydGVkQ2FjaGVkID0ge1xuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHNoYWRvdyh0aGlzLCBcInZhbHVlXCIsIGlzRXZhbFN1cHBvcnRlZCgpKTtcbiAgfVxuXG59O1xuZXhwb3J0cy5Jc0V2YWxTdXBwb3J0ZWRDYWNoZWQgPSBJc0V2YWxTdXBwb3J0ZWRDYWNoZWQ7XG5jb25zdCBoZXhOdW1iZXJzID0gWy4uLkFycmF5KDI1Nikua2V5cygpXS5tYXAobiA9PiBuLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCBcIjBcIikpO1xuXG5jbGFzcyBVdGlsIHtcbiAgc3RhdGljIG1ha2VIZXhDb2xvcihyLCBnLCBiKSB7XG4gICAgcmV0dXJuIGAjJHtoZXhOdW1iZXJzW3JdfSR7aGV4TnVtYmVyc1tnXX0ke2hleE51bWJlcnNbYl19YDtcbiAgfVxuXG4gIHN0YXRpYyB0cmFuc2Zvcm0obTEsIG0yKSB7XG4gICAgcmV0dXJuIFttMVswXSAqIG0yWzBdICsgbTFbMl0gKiBtMlsxXSwgbTFbMV0gKiBtMlswXSArIG0xWzNdICogbTJbMV0sIG0xWzBdICogbTJbMl0gKyBtMVsyXSAqIG0yWzNdLCBtMVsxXSAqIG0yWzJdICsgbTFbM10gKiBtMlszXSwgbTFbMF0gKiBtMls0XSArIG0xWzJdICogbTJbNV0gKyBtMVs0XSwgbTFbMV0gKiBtMls0XSArIG0xWzNdICogbTJbNV0gKyBtMVs1XV07XG4gIH1cblxuICBzdGF0aWMgYXBwbHlUcmFuc2Zvcm0ocCwgbSkge1xuICAgIGNvbnN0IHh0ID0gcFswXSAqIG1bMF0gKyBwWzFdICogbVsyXSArIG1bNF07XG4gICAgY29uc3QgeXQgPSBwWzBdICogbVsxXSArIHBbMV0gKiBtWzNdICsgbVs1XTtcbiAgICByZXR1cm4gW3h0LCB5dF07XG4gIH1cblxuICBzdGF0aWMgYXBwbHlJbnZlcnNlVHJhbnNmb3JtKHAsIG0pIHtcbiAgICBjb25zdCBkID0gbVswXSAqIG1bM10gLSBtWzFdICogbVsyXTtcbiAgICBjb25zdCB4dCA9IChwWzBdICogbVszXSAtIHBbMV0gKiBtWzJdICsgbVsyXSAqIG1bNV0gLSBtWzRdICogbVszXSkgLyBkO1xuICAgIGNvbnN0IHl0ID0gKC1wWzBdICogbVsxXSArIHBbMV0gKiBtWzBdICsgbVs0XSAqIG1bMV0gLSBtWzVdICogbVswXSkgLyBkO1xuICAgIHJldHVybiBbeHQsIHl0XTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveChyLCBtKSB7XG4gICAgY29uc3QgcDEgPSBVdGlsLmFwcGx5VHJhbnNmb3JtKHIsIG0pO1xuICAgIGNvbnN0IHAyID0gVXRpbC5hcHBseVRyYW5zZm9ybShyLnNsaWNlKDIsIDQpLCBtKTtcbiAgICBjb25zdCBwMyA9IFV0aWwuYXBwbHlUcmFuc2Zvcm0oW3JbMF0sIHJbM11dLCBtKTtcbiAgICBjb25zdCBwNCA9IFV0aWwuYXBwbHlUcmFuc2Zvcm0oW3JbMl0sIHJbMV1dLCBtKTtcbiAgICByZXR1cm4gW01hdGgubWluKHAxWzBdLCBwMlswXSwgcDNbMF0sIHA0WzBdKSwgTWF0aC5taW4ocDFbMV0sIHAyWzFdLCBwM1sxXSwgcDRbMV0pLCBNYXRoLm1heChwMVswXSwgcDJbMF0sIHAzWzBdLCBwNFswXSksIE1hdGgubWF4KHAxWzFdLCBwMlsxXSwgcDNbMV0sIHA0WzFdKV07XG4gIH1cblxuICBzdGF0aWMgaW52ZXJzZVRyYW5zZm9ybShtKSB7XG4gICAgY29uc3QgZCA9IG1bMF0gKiBtWzNdIC0gbVsxXSAqIG1bMl07XG4gICAgcmV0dXJuIFttWzNdIC8gZCwgLW1bMV0gLyBkLCAtbVsyXSAvIGQsIG1bMF0gLyBkLCAobVsyXSAqIG1bNV0gLSBtWzRdICogbVszXSkgLyBkLCAobVs0XSAqIG1bMV0gLSBtWzVdICogbVswXSkgLyBkXTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseTNkVHJhbnNmb3JtKG0sIHYpIHtcbiAgICByZXR1cm4gW21bMF0gKiB2WzBdICsgbVsxXSAqIHZbMV0gKyBtWzJdICogdlsyXSwgbVszXSAqIHZbMF0gKyBtWzRdICogdlsxXSArIG1bNV0gKiB2WzJdLCBtWzZdICogdlswXSArIG1bN10gKiB2WzFdICsgbVs4XSAqIHZbMl1dO1xuICB9XG5cbiAgc3RhdGljIHNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKG0pIHtcbiAgICBjb25zdCB0cmFuc3Bvc2UgPSBbbVswXSwgbVsyXSwgbVsxXSwgbVszXV07XG4gICAgY29uc3QgYSA9IG1bMF0gKiB0cmFuc3Bvc2VbMF0gKyBtWzFdICogdHJhbnNwb3NlWzJdO1xuICAgIGNvbnN0IGIgPSBtWzBdICogdHJhbnNwb3NlWzFdICsgbVsxXSAqIHRyYW5zcG9zZVszXTtcbiAgICBjb25zdCBjID0gbVsyXSAqIHRyYW5zcG9zZVswXSArIG1bM10gKiB0cmFuc3Bvc2VbMl07XG4gICAgY29uc3QgZCA9IG1bMl0gKiB0cmFuc3Bvc2VbMV0gKyBtWzNdICogdHJhbnNwb3NlWzNdO1xuICAgIGNvbnN0IGZpcnN0ID0gKGEgKyBkKSAvIDI7XG4gICAgY29uc3Qgc2Vjb25kID0gTWF0aC5zcXJ0KChhICsgZCkgKiogMiAtIDQgKiAoYSAqIGQgLSBjICogYikpIC8gMjtcbiAgICBjb25zdCBzeCA9IGZpcnN0ICsgc2Vjb25kIHx8IDE7XG4gICAgY29uc3Qgc3kgPSBmaXJzdCAtIHNlY29uZCB8fCAxO1xuICAgIHJldHVybiBbTWF0aC5zcXJ0KHN4KSwgTWF0aC5zcXJ0KHN5KV07XG4gIH1cblxuICBzdGF0aWMgbm9ybWFsaXplUmVjdChyZWN0KSB7XG4gICAgY29uc3QgciA9IHJlY3Quc2xpY2UoMCk7XG5cbiAgICBpZiAocmVjdFswXSA+IHJlY3RbMl0pIHtcbiAgICAgIHJbMF0gPSByZWN0WzJdO1xuICAgICAgclsyXSA9IHJlY3RbMF07XG4gICAgfVxuXG4gICAgaWYgKHJlY3RbMV0gPiByZWN0WzNdKSB7XG4gICAgICByWzFdID0gcmVjdFszXTtcbiAgICAgIHJbM10gPSByZWN0WzFdO1xuICAgIH1cblxuICAgIHJldHVybiByO1xuICB9XG5cbiAgc3RhdGljIGludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgICBmdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgICAgIHJldHVybiBhIC0gYjtcbiAgICB9XG5cbiAgICBjb25zdCBvcmRlcmVkWCA9IFtyZWN0MVswXSwgcmVjdDFbMl0sIHJlY3QyWzBdLCByZWN0MlsyXV0uc29ydChjb21wYXJlKTtcbiAgICBjb25zdCBvcmRlcmVkWSA9IFtyZWN0MVsxXSwgcmVjdDFbM10sIHJlY3QyWzFdLCByZWN0MlszXV0uc29ydChjb21wYXJlKTtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICByZWN0MSA9IFV0aWwubm9ybWFsaXplUmVjdChyZWN0MSk7XG4gICAgcmVjdDIgPSBVdGlsLm5vcm1hbGl6ZVJlY3QocmVjdDIpO1xuXG4gICAgaWYgKG9yZGVyZWRYWzBdID09PSByZWN0MVswXSAmJiBvcmRlcmVkWFsxXSA9PT0gcmVjdDJbMF0gfHwgb3JkZXJlZFhbMF0gPT09IHJlY3QyWzBdICYmIG9yZGVyZWRYWzFdID09PSByZWN0MVswXSkge1xuICAgICAgcmVzdWx0WzBdID0gb3JkZXJlZFhbMV07XG4gICAgICByZXN1bHRbMl0gPSBvcmRlcmVkWFsyXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG9yZGVyZWRZWzBdID09PSByZWN0MVsxXSAmJiBvcmRlcmVkWVsxXSA9PT0gcmVjdDJbMV0gfHwgb3JkZXJlZFlbMF0gPT09IHJlY3QyWzFdICYmIG9yZGVyZWRZWzFdID09PSByZWN0MVsxXSkge1xuICAgICAgcmVzdWx0WzFdID0gb3JkZXJlZFlbMV07XG4gICAgICByZXN1bHRbM10gPSBvcmRlcmVkWVsyXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0YXRpYyBiZXppZXJCb3VuZGluZ0JveCh4MCwgeTAsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpIHtcbiAgICBjb25zdCB0dmFsdWVzID0gW10sXG4gICAgICAgICAgYm91bmRzID0gW1tdLCBbXV07XG4gICAgbGV0IGEsIGIsIGMsIHQsIHQxLCB0MiwgYjJhYywgc3FydGIyYWM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI7ICsraSkge1xuICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgYiA9IDYgKiB4MCAtIDEyICogeDEgKyA2ICogeDI7XG4gICAgICAgIGEgPSAtMyAqIHgwICsgOSAqIHgxIC0gOSAqIHgyICsgMyAqIHgzO1xuICAgICAgICBjID0gMyAqIHgxIC0gMyAqIHgwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYiA9IDYgKiB5MCAtIDEyICogeTEgKyA2ICogeTI7XG4gICAgICAgIGEgPSAtMyAqIHkwICsgOSAqIHkxIC0gOSAqIHkyICsgMyAqIHkzO1xuICAgICAgICBjID0gMyAqIHkxIC0gMyAqIHkwO1xuICAgICAgfVxuXG4gICAgICBpZiAoTWF0aC5hYnMoYSkgPCAxZS0xMikge1xuICAgICAgICBpZiAoTWF0aC5hYnMoYikgPCAxZS0xMikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdCA9IC1jIC8gYjtcblxuICAgICAgICBpZiAoMCA8IHQgJiYgdCA8IDEpIHtcbiAgICAgICAgICB0dmFsdWVzLnB1c2godCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYjJhYyA9IGIgKiBiIC0gNCAqIGMgKiBhO1xuICAgICAgc3FydGIyYWMgPSBNYXRoLnNxcnQoYjJhYyk7XG5cbiAgICAgIGlmIChiMmFjIDwgMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdDEgPSAoLWIgKyBzcXJ0YjJhYykgLyAoMiAqIGEpO1xuXG4gICAgICBpZiAoMCA8IHQxICYmIHQxIDwgMSkge1xuICAgICAgICB0dmFsdWVzLnB1c2godDEpO1xuICAgICAgfVxuXG4gICAgICB0MiA9ICgtYiAtIHNxcnRiMmFjKSAvICgyICogYSk7XG5cbiAgICAgIGlmICgwIDwgdDIgJiYgdDIgPCAxKSB7XG4gICAgICAgIHR2YWx1ZXMucHVzaCh0Mik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGogPSB0dmFsdWVzLmxlbmd0aCxcbiAgICAgICAgbXQ7XG4gICAgY29uc3QgamxlbiA9IGo7XG5cbiAgICB3aGlsZSAoai0tKSB7XG4gICAgICB0ID0gdHZhbHVlc1tqXTtcbiAgICAgIG10ID0gMSAtIHQ7XG4gICAgICBib3VuZHNbMF1bal0gPSBtdCAqIG10ICogbXQgKiB4MCArIDMgKiBtdCAqIG10ICogdCAqIHgxICsgMyAqIG10ICogdCAqIHQgKiB4MiArIHQgKiB0ICogdCAqIHgzO1xuICAgICAgYm91bmRzWzFdW2pdID0gbXQgKiBtdCAqIG10ICogeTAgKyAzICogbXQgKiBtdCAqIHQgKiB5MSArIDMgKiBtdCAqIHQgKiB0ICogeTIgKyB0ICogdCAqIHQgKiB5MztcbiAgICB9XG5cbiAgICBib3VuZHNbMF1bamxlbl0gPSB4MDtcbiAgICBib3VuZHNbMV1bamxlbl0gPSB5MDtcbiAgICBib3VuZHNbMF1bamxlbiArIDFdID0geDM7XG4gICAgYm91bmRzWzFdW2psZW4gKyAxXSA9IHkzO1xuICAgIGJvdW5kc1swXS5sZW5ndGggPSBib3VuZHNbMV0ubGVuZ3RoID0gamxlbiArIDI7XG4gICAgcmV0dXJuIFtNYXRoLm1pbiguLi5ib3VuZHNbMF0pLCBNYXRoLm1pbiguLi5ib3VuZHNbMV0pLCBNYXRoLm1heCguLi5ib3VuZHNbMF0pLCBNYXRoLm1heCguLi5ib3VuZHNbMV0pXTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuVXRpbCA9IFV0aWw7XG5jb25zdCBQREZTdHJpbmdUcmFuc2xhdGVUYWJsZSA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAweDJkOCwgMHgyYzcsIDB4MmM2LCAweDJkOSwgMHgyZGQsIDB4MmRiLCAweDJkYSwgMHgyZGMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4MjAyMiwgMHgyMDIwLCAweDIwMjEsIDB4MjAyNiwgMHgyMDE0LCAweDIwMTMsIDB4MTkyLCAweDIwNDQsIDB4MjAzOSwgMHgyMDNhLCAweDIyMTIsIDB4MjAzMCwgMHgyMDFlLCAweDIwMWMsIDB4MjAxZCwgMHgyMDE4LCAweDIwMTksIDB4MjAxYSwgMHgyMTIyLCAweGZiMDEsIDB4ZmIwMiwgMHgxNDEsIDB4MTUyLCAweDE2MCwgMHgxNzgsIDB4MTdkLCAweDEzMSwgMHgxNDIsIDB4MTUzLCAweDE2MSwgMHgxN2UsIDAsIDB4MjBhY107XG5cbmZ1bmN0aW9uIHN0cmluZ1RvUERGU3RyaW5nKHN0cikge1xuICBjb25zdCBsZW5ndGggPSBzdHIubGVuZ3RoLFxuICAgICAgICBzdHJCdWYgPSBbXTtcblxuICBpZiAoc3RyWzBdID09PSBcIlxceEZFXCIgJiYgc3RyWzFdID09PSBcIlxceEZGXCIpIHtcbiAgICBmb3IgKGxldCBpID0gMjsgaSA8IGxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHN0ci5jaGFyQ29kZUF0KGkpIDw8IDggfCBzdHIuY2hhckNvZGVBdChpICsgMSkpKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoc3RyWzBdID09PSBcIlxceEZGXCIgJiYgc3RyWzFdID09PSBcIlxceEZFXCIpIHtcbiAgICBmb3IgKGxldCBpID0gMjsgaSA8IGxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHN0ci5jaGFyQ29kZUF0KGkgKyAxKSA8PCA4IHwgc3RyLmNoYXJDb2RlQXQoaSkpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgY29kZSA9IFBERlN0cmluZ1RyYW5zbGF0ZVRhYmxlW3N0ci5jaGFyQ29kZUF0KGkpXTtcbiAgICAgIHN0ckJ1Zi5wdXNoKGNvZGUgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpIDogc3RyLmNoYXJBdChpKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ckJ1Zi5qb2luKFwiXCIpO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvKFsoKVxcXFxcXG5cXHJdKS9nLCBtYXRjaCA9PiB7XG4gICAgaWYgKG1hdGNoID09PSBcIlxcblwiKSB7XG4gICAgICByZXR1cm4gXCJcXFxcblwiO1xuICAgIH0gZWxzZSBpZiAobWF0Y2ggPT09IFwiXFxyXCIpIHtcbiAgICAgIHJldHVybiBcIlxcXFxyXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBcXFxcJHttYXRjaH1gO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaXNBc2NpaShzdHIpIHtcbiAgcmV0dXJuIC9eW1xceDAwLVxceDdGXSokLy50ZXN0KHN0cik7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ1RvVVRGMTZCRVN0cmluZyhzdHIpIHtcbiAgY29uc3QgYnVmID0gW1wiXFx4RkVcXHhGRlwiXTtcblxuICBmb3IgKGxldCBpID0gMCwgaWkgPSBzdHIubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgIGNvbnN0IGNoYXIgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICBidWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXIgPj4gOCAmIDB4ZmYpLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXIgJiAweGZmKSk7XG4gIH1cblxuICByZXR1cm4gYnVmLmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ1RvVVRGOFN0cmluZyhzdHIpIHtcbiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoc3RyKSk7XG59XG5cbmZ1bmN0aW9uIHV0ZjhTdHJpbmdUb1N0cmluZyhzdHIpIHtcbiAgcmV0dXJuIHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKTtcbn1cblxuZnVuY3Rpb24gaXNCb29sKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSBcImJvb2xlYW5cIjtcbn1cblxuZnVuY3Rpb24gaXNOdW0odikge1xuICByZXR1cm4gdHlwZW9mIHYgPT09IFwibnVtYmVyXCI7XG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSBcInN0cmluZ1wiO1xufVxuXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT09IG51bGwgJiYgdi5ieXRlTGVuZ3RoICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXlFcXVhbChhcnIxLCBhcnIyKSB7XG4gIGlmIChhcnIxLmxlbmd0aCAhPT0gYXJyMi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMCwgaWkgPSBhcnIxLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlKGRhdGUgPSBuZXcgRGF0ZSgpKSB7XG4gIGNvbnN0IGJ1ZmZlciA9IFtkYXRlLmdldFVUQ0Z1bGxZZWFyKCkudG9TdHJpbmcoKSwgKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpLCBkYXRlLmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKSwgZGF0ZS5nZXRVVENIb3VycygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpLCBkYXRlLmdldFVUQ01pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKSwgZGF0ZS5nZXRVVENTZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIildO1xuICByZXR1cm4gYnVmZmVyLmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KCkge1xuICBjb25zdCBjYXBhYmlsaXR5ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgbGV0IGlzU2V0dGxlZCA9IGZhbHNlO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2FwYWJpbGl0eSwgXCJzZXR0bGVkXCIsIHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gaXNTZXR0bGVkO1xuICAgIH1cblxuICB9KTtcbiAgY2FwYWJpbGl0eS5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGNhcGFiaWxpdHkucmVzb2x2ZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICBpc1NldHRsZWQgPSB0cnVlO1xuICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICB9O1xuXG4gICAgY2FwYWJpbGl0eS5yZWplY3QgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBpc1NldHRsZWQgPSB0cnVlO1xuICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiBjYXBhYmlsaXR5O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPYmplY3RVUkwoZGF0YSwgY29udGVudFR5cGUgPSBcIlwiLCBmb3JjZURhdGFTY2hlbWEgPSBmYWxzZSkge1xuICBpZiAoVVJMLmNyZWF0ZU9iamVjdFVSTCAmJiB0eXBlb2YgQmxvYiAhPT0gXCJ1bmRlZmluZWRcIiAmJiAhZm9yY2VEYXRhU2NoZW1hKSB7XG4gICAgcmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW2RhdGFdLCB7XG4gICAgICB0eXBlOiBjb250ZW50VHlwZVxuICAgIH0pKTtcbiAgfVxuXG4gIGNvbnN0IGRpZ2l0cyA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIjtcbiAgbGV0IGJ1ZmZlciA9IGBkYXRhOiR7Y29udGVudFR5cGV9O2Jhc2U2NCxgO1xuXG4gIGZvciAobGV0IGkgPSAwLCBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMykge1xuICAgIGNvbnN0IGIxID0gZGF0YVtpXSAmIDB4ZmY7XG4gICAgY29uc3QgYjIgPSBkYXRhW2kgKyAxXSAmIDB4ZmY7XG4gICAgY29uc3QgYjMgPSBkYXRhW2kgKyAyXSAmIDB4ZmY7XG4gICAgY29uc3QgZDEgPSBiMSA+PiAyLFxuICAgICAgICAgIGQyID0gKGIxICYgMykgPDwgNCB8IGIyID4+IDQ7XG4gICAgY29uc3QgZDMgPSBpICsgMSA8IGlpID8gKGIyICYgMHhmKSA8PCAyIHwgYjMgPj4gNiA6IDY0O1xuICAgIGNvbnN0IGQ0ID0gaSArIDIgPCBpaSA/IGIzICYgMHgzZiA6IDY0O1xuICAgIGJ1ZmZlciArPSBkaWdpdHNbZDFdICsgZGlnaXRzW2QyXSArIGRpZ2l0c1tkM10gKyBkaWdpdHNbZDRdO1xuICB9XG5cbiAgcmV0dXJuIGJ1ZmZlcjtcbn1cblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbnZhciBfaXNfbm9kZSA9IF9fd19wZGZqc19yZXF1aXJlX18oNCk7XG5cbjtcblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLmlzTm9kZUpTID0gdm9pZCAwO1xuY29uc3QgaXNOb2RlSlMgPSB0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzICsgXCJcIiA9PT0gXCJbb2JqZWN0IHByb2Nlc3NdXCIgJiYgIXByb2Nlc3MudmVyc2lvbnMubncgJiYgIShwcm9jZXNzLnZlcnNpb25zLmVsZWN0cm9uICYmIHByb2Nlc3MudHlwZSAmJiBwcm9jZXNzLnR5cGUgIT09IFwiYnJvd3NlclwiKTtcbmV4cG9ydHMuaXNOb2RlSlMgPSBpc05vZGVKUztcblxuLyoqKi8gfSksXG4vKiA1ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlJlZlNldENhY2hlID0gZXhwb3J0cy5SZWZTZXQgPSBleHBvcnRzLlJlZiA9IGV4cG9ydHMuTmFtZSA9IGV4cG9ydHMuRU9GID0gZXhwb3J0cy5EaWN0ID0gZXhwb3J0cy5DbWQgPSBleHBvcnRzLkNJUkNVTEFSX1JFRiA9IHZvaWQgMDtcbmV4cG9ydHMuY2xlYXJQcmltaXRpdmVDYWNoZXMgPSBjbGVhclByaW1pdGl2ZUNhY2hlcztcbmV4cG9ydHMuaXNDbWQgPSBpc0NtZDtcbmV4cG9ydHMuaXNEaWN0ID0gaXNEaWN0O1xuZXhwb3J0cy5pc05hbWUgPSBpc05hbWU7XG5leHBvcnRzLmlzUmVmID0gaXNSZWY7XG5leHBvcnRzLmlzUmVmc0VxdWFsID0gaXNSZWZzRXF1YWw7XG5leHBvcnRzLmlzU3RyZWFtID0gaXNTdHJlYW07XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfYmFzZV9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDYpO1xuXG5jb25zdCBDSVJDVUxBUl9SRUYgPSBTeW1ib2woXCJDSVJDVUxBUl9SRUZcIik7XG5leHBvcnRzLkNJUkNVTEFSX1JFRiA9IENJUkNVTEFSX1JFRjtcbmNvbnN0IEVPRiA9IFN5bWJvbChcIkVPRlwiKTtcbmV4cG9ydHMuRU9GID0gRU9GO1xuXG5jb25zdCBOYW1lID0gZnVuY3Rpb24gTmFtZUNsb3N1cmUoKSB7XG4gIGxldCBuYW1lQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIGNsYXNzIE5hbWUge1xuICAgIGNvbnN0cnVjdG9yKG5hbWUpIHtcbiAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldChuYW1lKSB7XG4gICAgICBjb25zdCBuYW1lVmFsdWUgPSBuYW1lQ2FjaGVbbmFtZV07XG4gICAgICByZXR1cm4gbmFtZVZhbHVlID8gbmFtZVZhbHVlIDogbmFtZUNhY2hlW25hbWVdID0gbmV3IE5hbWUobmFtZSk7XG4gICAgfVxuXG4gICAgc3RhdGljIF9jbGVhckNhY2hlKCkge1xuICAgICAgbmFtZUNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBOYW1lO1xufSgpO1xuXG5leHBvcnRzLk5hbWUgPSBOYW1lO1xuXG5jb25zdCBDbWQgPSBmdW5jdGlvbiBDbWRDbG9zdXJlKCkge1xuICBsZXQgY21kQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIGNsYXNzIENtZCB7XG4gICAgY29uc3RydWN0b3IoY21kKSB7XG4gICAgICB0aGlzLmNtZCA9IGNtZDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0KGNtZCkge1xuICAgICAgY29uc3QgY21kVmFsdWUgPSBjbWRDYWNoZVtjbWRdO1xuICAgICAgcmV0dXJuIGNtZFZhbHVlID8gY21kVmFsdWUgOiBjbWRDYWNoZVtjbWRdID0gbmV3IENtZChjbWQpO1xuICAgIH1cblxuICAgIHN0YXRpYyBfY2xlYXJDYWNoZSgpIHtcbiAgICAgIGNtZENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBDbWQ7XG59KCk7XG5cbmV4cG9ydHMuQ21kID0gQ21kO1xuXG5jb25zdCBub25TZXJpYWxpemFibGUgPSBmdW5jdGlvbiBub25TZXJpYWxpemFibGVDbG9zdXJlKCkge1xuICByZXR1cm4gbm9uU2VyaWFsaXphYmxlO1xufTtcblxuY2xhc3MgRGljdCB7XG4gIGNvbnN0cnVjdG9yKHhyZWYgPSBudWxsKSB7XG4gICAgdGhpcy5fbWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLnhyZWYgPSB4cmVmO1xuICAgIHRoaXMub2JqSWQgPSBudWxsO1xuICAgIHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5fX25vblNlcmlhbGl6YWJsZV9fID0gbm9uU2VyaWFsaXphYmxlO1xuICB9XG5cbiAgYXNzaWduWHJlZihuZXdYcmVmKSB7XG4gICAgdGhpcy54cmVmID0gbmV3WHJlZjtcbiAgfVxuXG4gIGdldCBzaXplKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tYXApLmxlbmd0aDtcbiAgfVxuXG4gIGdldChrZXkxLCBrZXkyLCBrZXkzKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5fbWFwW2tleTFdO1xuXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYga2V5MiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMuX21hcFtrZXkyXTtcblxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYga2V5MyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5fbWFwW2tleTNdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJlZiAmJiB0aGlzLnhyZWYpIHtcbiAgICAgIHJldHVybiB0aGlzLnhyZWYuZmV0Y2godmFsdWUsIHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBhc3luYyBnZXRBc3luYyhrZXkxLCBrZXkyLCBrZXkzKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5fbWFwW2tleTFdO1xuXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYga2V5MiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMuX21hcFtrZXkyXTtcblxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYga2V5MyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5fbWFwW2tleTNdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJlZiAmJiB0aGlzLnhyZWYpIHtcbiAgICAgIHJldHVybiB0aGlzLnhyZWYuZmV0Y2hBc3luYyh2YWx1ZSwgdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGdldEFycmF5KGtleTEsIGtleTIsIGtleTMpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLl9tYXBba2V5MV07XG5cbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBrZXkyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5fbWFwW2tleTJdO1xuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBrZXkzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLl9tYXBba2V5M107XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVmICYmIHRoaXMueHJlZikge1xuICAgICAgdmFsdWUgPSB0aGlzLnhyZWYuZmV0Y2godmFsdWUsIHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gdmFsdWUubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBpZiAodmFsdWVbaV0gaW5zdGFuY2VvZiBSZWYgJiYgdGhpcy54cmVmKSB7XG4gICAgICAgICAgdmFsdWVbaV0gPSB0aGlzLnhyZWYuZmV0Y2godmFsdWVbaV0sIHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGdldFJhdyhrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFwW2tleV07XG4gIH1cblxuICBnZXRLZXlzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tYXApO1xuICB9XG5cbiAgZ2V0UmF3VmFsdWVzKCkge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX21hcCk7XG4gIH1cblxuICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHRoaXMuX21hcFtrZXldID0gdmFsdWU7XG4gIH1cblxuICBoYXMoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuX21hcFtrZXldICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5fbWFwKSB7XG4gICAgICBjYWxsYmFjayhrZXksIHRoaXMuZ2V0KGtleSkpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXQgZW1wdHkoKSB7XG4gICAgY29uc3QgZW1wdHlEaWN0ID0gbmV3IERpY3QobnVsbCk7XG5cbiAgICBlbXB0eURpY3Quc2V0ID0gKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJTaG91bGQgbm90IGNhbGwgYHNldGAgb24gdGhlIGVtcHR5IGRpY3Rpb25hcnkuXCIpO1xuICAgIH07XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJlbXB0eVwiLCBlbXB0eURpY3QpO1xuICB9XG5cbiAgc3RhdGljIG1lcmdlKHtcbiAgICB4cmVmLFxuICAgIGRpY3RBcnJheSxcbiAgICBtZXJnZVN1YkRpY3RzID0gZmFsc2VcbiAgfSkge1xuICAgIGNvbnN0IG1lcmdlZERpY3QgPSBuZXcgRGljdCh4cmVmKSxcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gbmV3IE1hcCgpO1xuXG4gICAgZm9yIChjb25zdCBkaWN0IG9mIGRpY3RBcnJheSkge1xuICAgICAgaWYgKCEoZGljdCBpbnN0YW5jZW9mIERpY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkaWN0Ll9tYXApKSB7XG4gICAgICAgIGxldCBwcm9wZXJ0eSA9IHByb3BlcnRpZXMuZ2V0KGtleSk7XG5cbiAgICAgICAgaWYgKHByb3BlcnR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwcm9wZXJ0eSA9IFtdO1xuICAgICAgICAgIHByb3BlcnRpZXMuc2V0KGtleSwgcHJvcGVydHkpO1xuICAgICAgICB9IGVsc2UgaWYgKCFtZXJnZVN1YkRpY3RzIHx8ICEodmFsdWUgaW5zdGFuY2VvZiBEaWN0KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydHkucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVzXSBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMSB8fCAhKHZhbHVlc1swXSBpbnN0YW5jZW9mIERpY3QpKSB7XG4gICAgICAgIG1lcmdlZERpY3QuX21hcFtuYW1lXSA9IHZhbHVlc1swXTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1YkRpY3QgPSBuZXcgRGljdCh4cmVmKTtcblxuICAgICAgZm9yIChjb25zdCBkaWN0IG9mIHZhbHVlcykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkaWN0Ll9tYXApKSB7XG4gICAgICAgICAgaWYgKHN1YkRpY3QuX21hcFtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN1YkRpY3QuX21hcFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdWJEaWN0LnNpemUgPiAwKSB7XG4gICAgICAgIG1lcmdlZERpY3QuX21hcFtuYW1lXSA9IHN1YkRpY3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvcGVydGllcy5jbGVhcigpO1xuICAgIHJldHVybiBtZXJnZWREaWN0LnNpemUgPiAwID8gbWVyZ2VkRGljdCA6IERpY3QuZW1wdHk7XG4gIH1cblxufVxuXG5leHBvcnRzLkRpY3QgPSBEaWN0O1xuXG5jb25zdCBSZWYgPSBmdW5jdGlvbiBSZWZDbG9zdXJlKCkge1xuICBsZXQgcmVmQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIGNsYXNzIFJlZiB7XG4gICAgY29uc3RydWN0b3IobnVtLCBnZW4pIHtcbiAgICAgIHRoaXMubnVtID0gbnVtO1xuICAgICAgdGhpcy5nZW4gPSBnZW47XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICBpZiAodGhpcy5nZW4gPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubnVtfVJgO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYCR7dGhpcy5udW19UiR7dGhpcy5nZW59YDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0KG51bSwgZ2VuKSB7XG4gICAgICBjb25zdCBrZXkgPSBnZW4gPT09IDAgPyBgJHtudW19UmAgOiBgJHtudW19UiR7Z2VufWA7XG4gICAgICBjb25zdCByZWZWYWx1ZSA9IHJlZkNhY2hlW2tleV07XG4gICAgICByZXR1cm4gcmVmVmFsdWUgPyByZWZWYWx1ZSA6IHJlZkNhY2hlW2tleV0gPSBuZXcgUmVmKG51bSwgZ2VuKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgX2NsZWFyQ2FjaGUoKSB7XG4gICAgICByZWZDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfVxuXG4gIH1cblxuICByZXR1cm4gUmVmO1xufSgpO1xuXG5leHBvcnRzLlJlZiA9IFJlZjtcblxuY2xhc3MgUmVmU2V0IHtcbiAgY29uc3RydWN0b3IocGFyZW50ID0gbnVsbCkge1xuICAgIHRoaXMuX3NldCA9IG5ldyBTZXQocGFyZW50ICYmIHBhcmVudC5fc2V0KTtcbiAgfVxuXG4gIGhhcyhyZWYpIHtcbiAgICByZXR1cm4gdGhpcy5fc2V0LmhhcyhyZWYudG9TdHJpbmcoKSk7XG4gIH1cblxuICBwdXQocmVmKSB7XG4gICAgdGhpcy5fc2V0LmFkZChyZWYudG9TdHJpbmcoKSk7XG4gIH1cblxuICByZW1vdmUocmVmKSB7XG4gICAgdGhpcy5fc2V0LmRlbGV0ZShyZWYudG9TdHJpbmcoKSk7XG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgZm9yIChjb25zdCByZWYgb2YgdGhpcy5fc2V0LnZhbHVlcygpKSB7XG4gICAgICBjYWxsYmFjayhyZWYpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuX3NldC5jbGVhcigpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5SZWZTZXQgPSBSZWZTZXQ7XG5cbmNsYXNzIFJlZlNldENhY2hlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fbWFwID0gbmV3IE1hcCgpO1xuICB9XG5cbiAgZ2V0IHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21hcC5zaXplO1xuICB9XG5cbiAgZ2V0KHJlZikge1xuICAgIHJldHVybiB0aGlzLl9tYXAuZ2V0KHJlZi50b1N0cmluZygpKTtcbiAgfVxuXG4gIGhhcyhyZWYpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFwLmhhcyhyZWYudG9TdHJpbmcoKSk7XG4gIH1cblxuICBwdXQocmVmLCBvYmopIHtcbiAgICB0aGlzLl9tYXAuc2V0KHJlZi50b1N0cmluZygpLCBvYmopO1xuICB9XG5cbiAgcHV0QWxpYXMocmVmLCBhbGlhc1JlZikge1xuICAgIHRoaXMuX21hcC5zZXQocmVmLnRvU3RyaW5nKCksIHRoaXMuZ2V0KGFsaWFzUmVmKSk7XG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLl9tYXAudmFsdWVzKCkpIHtcbiAgICAgIGNhbGxiYWNrKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLl9tYXAuY2xlYXIoKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUmVmU2V0Q2FjaGUgPSBSZWZTZXRDYWNoZTtcblxuZnVuY3Rpb24gaXNOYW1lKHYsIG5hbWUpIHtcbiAgcmV0dXJuIHYgaW5zdGFuY2VvZiBOYW1lICYmIChuYW1lID09PSB1bmRlZmluZWQgfHwgdi5uYW1lID09PSBuYW1lKTtcbn1cblxuZnVuY3Rpb24gaXNDbWQodiwgY21kKSB7XG4gIHJldHVybiB2IGluc3RhbmNlb2YgQ21kICYmIChjbWQgPT09IHVuZGVmaW5lZCB8fCB2LmNtZCA9PT0gY21kKTtcbn1cblxuZnVuY3Rpb24gaXNEaWN0KHYsIHR5cGUpIHtcbiAgcmV0dXJuIHYgaW5zdGFuY2VvZiBEaWN0ICYmICh0eXBlID09PSB1bmRlZmluZWQgfHwgaXNOYW1lKHYuZ2V0KFwiVHlwZVwiKSwgdHlwZSkpO1xufVxuXG5mdW5jdGlvbiBpc1JlZih2KSB7XG4gIHJldHVybiB2IGluc3RhbmNlb2YgUmVmO1xufVxuXG5mdW5jdGlvbiBpc1JlZnNFcXVhbCh2MSwgdjIpIHtcbiAgcmV0dXJuIHYxLm51bSA9PT0gdjIubnVtICYmIHYxLmdlbiA9PT0gdjIuZ2VuO1xufVxuXG5mdW5jdGlvbiBpc1N0cmVhbSh2KSB7XG4gIHJldHVybiB2IGluc3RhbmNlb2YgX2Jhc2Vfc3RyZWFtLkJhc2VTdHJlYW07XG59XG5cbmZ1bmN0aW9uIGNsZWFyUHJpbWl0aXZlQ2FjaGVzKCkge1xuICBDbWQuX2NsZWFyQ2FjaGUoKTtcblxuICBOYW1lLl9jbGVhckNhY2hlKCk7XG5cbiAgUmVmLl9jbGVhckNhY2hlKCk7XG59XG5cbi8qKiovIH0pLFxuLyogNiAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5CYXNlU3RyZWFtID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jbGFzcyBCYXNlU3RyZWFtIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IEJhc2VTdHJlYW0pIHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlU3RyZWFtLlwiKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbGVuZ3RoKCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBnZXR0ZXIgYGxlbmd0aGAgYWNjZXNzZWRcIik7XG4gIH1cblxuICBnZXQgaXNFbXB0eSgpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgZ2V0dGVyIGBpc0VtcHR5YCBhY2Nlc3NlZFwiKTtcbiAgfVxuXG4gIGdldCBpc0RhdGFMb2FkZWQoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiaXNEYXRhTG9hZGVkXCIsIHRydWUpO1xuICB9XG5cbiAgZ2V0Qnl0ZSgpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIGBnZXRCeXRlYCBjYWxsZWRcIik7XG4gIH1cblxuICBnZXRCeXRlcyhsZW5ndGgsIGZvcmNlQ2xhbXBlZCA9IGZhbHNlKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgZ2V0Qnl0ZXNgIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHBlZWtCeXRlKCkge1xuICAgIGNvbnN0IHBlZWtlZEJ5dGUgPSB0aGlzLmdldEJ5dGUoKTtcblxuICAgIGlmIChwZWVrZWRCeXRlICE9PSAtMSkge1xuICAgICAgdGhpcy5wb3MtLTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGVla2VkQnl0ZTtcbiAgfVxuXG4gIHBlZWtCeXRlcyhsZW5ndGgsIGZvcmNlQ2xhbXBlZCA9IGZhbHNlKSB7XG4gICAgY29uc3QgYnl0ZXMgPSB0aGlzLmdldEJ5dGVzKGxlbmd0aCwgZm9yY2VDbGFtcGVkKTtcbiAgICB0aGlzLnBvcyAtPSBieXRlcy5sZW5ndGg7XG4gICAgcmV0dXJuIGJ5dGVzO1xuICB9XG5cbiAgZ2V0VWludDE2KCkge1xuICAgIGNvbnN0IGIwID0gdGhpcy5nZXRCeXRlKCk7XG4gICAgY29uc3QgYjEgPSB0aGlzLmdldEJ5dGUoKTtcblxuICAgIGlmIChiMCA9PT0gLTEgfHwgYjEgPT09IC0xKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIChiMCA8PCA4KSArIGIxO1xuICB9XG5cbiAgZ2V0SW50MzIoKSB7XG4gICAgY29uc3QgYjAgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICBjb25zdCBiMSA9IHRoaXMuZ2V0Qnl0ZSgpO1xuICAgIGNvbnN0IGIyID0gdGhpcy5nZXRCeXRlKCk7XG4gICAgY29uc3QgYjMgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICByZXR1cm4gKGIwIDw8IDI0KSArIChiMSA8PCAxNikgKyAoYjIgPDwgOCkgKyBiMztcbiAgfVxuXG4gIGdldEJ5dGVSYW5nZShiZWdpbiwgZW5kKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgZ2V0Qnl0ZVJhbmdlYCBjYWxsZWRcIik7XG4gIH1cblxuICBnZXRTdHJpbmcobGVuZ3RoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKSh0aGlzLmdldEJ5dGVzKGxlbmd0aCwgZmFsc2UpKTtcbiAgfVxuXG4gIHNraXAobikge1xuICAgIHRoaXMucG9zICs9IG4gfHwgMTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYHJlc2V0YCBjYWxsZWRcIik7XG4gIH1cblxuICBtb3ZlU3RhcnQoKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgbW92ZVN0YXJ0YCBjYWxsZWRcIik7XG4gIH1cblxuICBtYWtlU3ViU3RyZWFtKHN0YXJ0LCBsZW5ndGgsIGRpY3QgPSBudWxsKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgbWFrZVN1YlN0cmVhbWAgY2FsbGVkXCIpO1xuICB9XG5cbiAgZ2V0QmFzZVN0cmVhbXMoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxufVxuXG5leHBvcnRzLkJhc2VTdHJlYW0gPSBCYXNlU3RyZWFtO1xuXG4vKioqLyB9KSxcbi8qIDcgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuTmV0d29ya1BkZk1hbmFnZXIgPSBleHBvcnRzLkxvY2FsUGRmTWFuYWdlciA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9jaHVua2VkX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oOCk7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOSk7XG5cbnZhciBfZG9jdW1lbnQgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDExKTtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEwKTtcblxuZnVuY3Rpb24gcGFyc2VEb2NCYXNlVXJsKHVybCkge1xuICBpZiAodXJsKSB7XG4gICAgY29uc3QgYWJzb2x1dGVVcmwgPSAoMCwgX3V0aWwuY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCkodXJsKTtcblxuICAgIGlmIChhYnNvbHV0ZVVybCkge1xuICAgICAgcmV0dXJuIGFic29sdXRlVXJsLmhyZWY7XG4gICAgfVxuXG4gICAgKDAsIF91dGlsLndhcm4pKGBJbnZhbGlkIGFic29sdXRlIGRvY0Jhc2VVcmw6IFwiJHt1cmx9XCIuYCk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuY2xhc3MgQmFzZVBkZk1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gQmFzZVBkZk1hbmFnZXIpIHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlUGRmTWFuYWdlci5cIik7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRvY0lkKCkge1xuICAgIHJldHVybiB0aGlzLl9kb2NJZDtcbiAgfVxuXG4gIGdldCBwYXNzd29yZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFzc3dvcmQ7XG4gIH1cblxuICBnZXQgZG9jQmFzZVVybCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZG9jQmFzZVVybDtcbiAgfVxuXG4gIG9uTG9hZGVkU3RyZWFtKCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYG9uTG9hZGVkU3RyZWFtYCBjYWxsZWRcIik7XG4gIH1cblxuICBlbnN1cmVEb2MocHJvcCwgYXJncykge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LCBwcm9wLCBhcmdzKTtcbiAgfVxuXG4gIGVuc3VyZVhSZWYocHJvcCwgYXJncykge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LnhyZWYsIHByb3AsIGFyZ3MpO1xuICB9XG5cbiAgZW5zdXJlQ2F0YWxvZyhwcm9wLCBhcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlKHRoaXMucGRmRG9jdW1lbnQuY2F0YWxvZywgcHJvcCwgYXJncyk7XG4gIH1cblxuICBnZXRQYWdlKHBhZ2VJbmRleCkge1xuICAgIHJldHVybiB0aGlzLnBkZkRvY3VtZW50LmdldFBhZ2UocGFnZUluZGV4KTtcbiAgfVxuXG4gIGZvbnRGYWxsYmFjayhpZCwgaGFuZGxlcikge1xuICAgIHJldHVybiB0aGlzLnBkZkRvY3VtZW50LmZvbnRGYWxsYmFjayhpZCwgaGFuZGxlcik7XG4gIH1cblxuICBsb2FkWGZhRm9udHMoaGFuZGxlciwgdGFzaykge1xuICAgIHJldHVybiB0aGlzLnBkZkRvY3VtZW50LmxvYWRYZmFGb250cyhoYW5kbGVyLCB0YXNrKTtcbiAgfVxuXG4gIGxvYWRYZmFJbWFnZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucGRmRG9jdW1lbnQubG9hZFhmYUltYWdlcygpO1xuICB9XG5cbiAgc2VyaWFsaXplWGZhRGF0YShhbm5vdGF0aW9uU3RvcmFnZSkge1xuICAgIHJldHVybiB0aGlzLnBkZkRvY3VtZW50LnNlcmlhbGl6ZVhmYURhdGEoYW5ub3RhdGlvblN0b3JhZ2UpO1xuICB9XG5cbiAgY2xlYW51cChtYW51YWxseVRyaWdnZXJlZCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuY2xlYW51cChtYW51YWxseVRyaWdnZXJlZCk7XG4gIH1cblxuICBhc3luYyBlbnN1cmUob2JqLCBwcm9wLCBhcmdzKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgZW5zdXJlYCBjYWxsZWRcIik7XG4gIH1cblxuICByZXF1ZXN0UmFuZ2UoYmVnaW4sIGVuZCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYHJlcXVlc3RSYW5nZWAgY2FsbGVkXCIpO1xuICB9XG5cbiAgcmVxdWVzdExvYWRlZFN0cmVhbSgpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0TG9hZGVkU3RyZWFtYCBjYWxsZWRcIik7XG4gIH1cblxuICBzZW5kUHJvZ3Jlc3NpdmVEYXRhKGNodW5rKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgc2VuZFByb2dyZXNzaXZlRGF0YWAgY2FsbGVkXCIpO1xuICB9XG5cbiAgdXBkYXRlUGFzc3dvcmQocGFzc3dvcmQpIHtcbiAgICB0aGlzLl9wYXNzd29yZCA9IHBhc3N3b3JkO1xuICB9XG5cbiAgdGVybWluYXRlKHJlYXNvbikge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYHRlcm1pbmF0ZWAgY2FsbGVkXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgTG9jYWxQZGZNYW5hZ2VyIGV4dGVuZHMgQmFzZVBkZk1hbmFnZXIge1xuICBjb25zdHJ1Y3Rvcihkb2NJZCwgZGF0YSwgcGFzc3dvcmQsIG1zZ0hhbmRsZXIsIGV2YWx1YXRvck9wdGlvbnMsIGVuYWJsZVhmYSwgZG9jQmFzZVVybCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZG9jSWQgPSBkb2NJZDtcbiAgICB0aGlzLl9wYXNzd29yZCA9IHBhc3N3b3JkO1xuICAgIHRoaXMuX2RvY0Jhc2VVcmwgPSBwYXJzZURvY0Jhc2VVcmwoZG9jQmFzZVVybCk7XG4gICAgdGhpcy5tc2dIYW5kbGVyID0gbXNnSGFuZGxlcjtcbiAgICB0aGlzLmV2YWx1YXRvck9wdGlvbnMgPSBldmFsdWF0b3JPcHRpb25zO1xuICAgIHRoaXMuZW5hYmxlWGZhID0gZW5hYmxlWGZhO1xuICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBfc3RyZWFtLlN0cmVhbShkYXRhKTtcbiAgICB0aGlzLnBkZkRvY3VtZW50ID0gbmV3IF9kb2N1bWVudC5QREZEb2N1bWVudCh0aGlzLCBzdHJlYW0pO1xuICAgIHRoaXMuX2xvYWRlZFN0cmVhbVByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoc3RyZWFtKTtcbiAgfVxuXG4gIGFzeW5jIGVuc3VyZShvYmosIHByb3AsIGFyZ3MpIHtcbiAgICBjb25zdCB2YWx1ZSA9IG9ialtwcm9wXTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIHZhbHVlLmFwcGx5KG9iaiwgYXJncyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICByZXF1ZXN0TG9hZGVkU3RyZWFtKCkge31cblxuICBvbkxvYWRlZFN0cmVhbSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZGVkU3RyZWFtUHJvbWlzZTtcbiAgfVxuXG4gIHRlcm1pbmF0ZShyZWFzb24pIHt9XG5cbn1cblxuZXhwb3J0cy5Mb2NhbFBkZk1hbmFnZXIgPSBMb2NhbFBkZk1hbmFnZXI7XG5cbmNsYXNzIE5ldHdvcmtQZGZNYW5hZ2VyIGV4dGVuZHMgQmFzZVBkZk1hbmFnZXIge1xuICBjb25zdHJ1Y3Rvcihkb2NJZCwgcGRmTmV0d29ya1N0cmVhbSwgYXJncywgZXZhbHVhdG9yT3B0aW9ucywgZW5hYmxlWGZhLCBkb2NCYXNlVXJsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9kb2NJZCA9IGRvY0lkO1xuICAgIHRoaXMuX3Bhc3N3b3JkID0gYXJncy5wYXNzd29yZDtcbiAgICB0aGlzLl9kb2NCYXNlVXJsID0gcGFyc2VEb2NCYXNlVXJsKGRvY0Jhc2VVcmwpO1xuICAgIHRoaXMubXNnSGFuZGxlciA9IGFyZ3MubXNnSGFuZGxlcjtcbiAgICB0aGlzLmV2YWx1YXRvck9wdGlvbnMgPSBldmFsdWF0b3JPcHRpb25zO1xuICAgIHRoaXMuZW5hYmxlWGZhID0gZW5hYmxlWGZhO1xuICAgIHRoaXMuc3RyZWFtTWFuYWdlciA9IG5ldyBfY2h1bmtlZF9zdHJlYW0uQ2h1bmtlZFN0cmVhbU1hbmFnZXIocGRmTmV0d29ya1N0cmVhbSwge1xuICAgICAgbXNnSGFuZGxlcjogYXJncy5tc2dIYW5kbGVyLFxuICAgICAgbGVuZ3RoOiBhcmdzLmxlbmd0aCxcbiAgICAgIGRpc2FibGVBdXRvRmV0Y2g6IGFyZ3MuZGlzYWJsZUF1dG9GZXRjaCxcbiAgICAgIHJhbmdlQ2h1bmtTaXplOiBhcmdzLnJhbmdlQ2h1bmtTaXplXG4gICAgfSk7XG4gICAgdGhpcy5wZGZEb2N1bWVudCA9IG5ldyBfZG9jdW1lbnQuUERGRG9jdW1lbnQodGhpcywgdGhpcy5zdHJlYW1NYW5hZ2VyLmdldFN0cmVhbSgpKTtcbiAgfVxuXG4gIGFzeW5jIGVuc3VyZShvYmosIHByb3AsIGFyZ3MpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdmFsdWUgPSBvYmpbcHJvcF07XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gdmFsdWUuYXBwbHkob2JqLCBhcmdzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoIShleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSkge1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0UmFuZ2UoZXguYmVnaW4sIGV4LmVuZCk7XG4gICAgICByZXR1cm4gdGhpcy5lbnN1cmUob2JqLCBwcm9wLCBhcmdzKTtcbiAgICB9XG4gIH1cblxuICByZXF1ZXN0UmFuZ2UoYmVnaW4sIGVuZCkge1xuICAgIHJldHVybiB0aGlzLnN0cmVhbU1hbmFnZXIucmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQpO1xuICB9XG5cbiAgcmVxdWVzdExvYWRlZFN0cmVhbSgpIHtcbiAgICB0aGlzLnN0cmVhbU1hbmFnZXIucmVxdWVzdEFsbENodW5rcygpO1xuICB9XG5cbiAgc2VuZFByb2dyZXNzaXZlRGF0YShjaHVuaykge1xuICAgIHRoaXMuc3RyZWFtTWFuYWdlci5vblJlY2VpdmVEYXRhKHtcbiAgICAgIGNodW5rXG4gICAgfSk7XG4gIH1cblxuICBvbkxvYWRlZFN0cmVhbSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJlYW1NYW5hZ2VyLm9uTG9hZGVkU3RyZWFtKCk7XG4gIH1cblxuICB0ZXJtaW5hdGUocmVhc29uKSB7XG4gICAgdGhpcy5zdHJlYW1NYW5hZ2VyLmFib3J0KHJlYXNvbik7XG4gIH1cblxufVxuXG5leHBvcnRzLk5ldHdvcmtQZGZNYW5hZ2VyID0gTmV0d29ya1BkZk1hbmFnZXI7XG5cbi8qKiovIH0pLFxuLyogOCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5DaHVua2VkU3RyZWFtTWFuYWdlciA9IGV4cG9ydHMuQ2h1bmtlZFN0cmVhbSA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg5KTtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEwKTtcblxuY2xhc3MgQ2h1bmtlZFN0cmVhbSBleHRlbmRzIF9zdHJlYW0uU3RyZWFtIHtcbiAgY29uc3RydWN0b3IobGVuZ3RoLCBjaHVua1NpemUsIG1hbmFnZXIpIHtcbiAgICBzdXBlcihuZXcgVWludDhBcnJheShsZW5ndGgpLCAwLCBsZW5ndGgsIG51bGwpO1xuICAgIHRoaXMuY2h1bmtTaXplID0gY2h1bmtTaXplO1xuICAgIHRoaXMuX2xvYWRlZENodW5rcyA9IG5ldyBTZXQoKTtcbiAgICB0aGlzLm51bUNodW5rcyA9IE1hdGguY2VpbChsZW5ndGggLyBjaHVua1NpemUpO1xuICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGggPSAwO1xuICAgIHRoaXMubGFzdFN1Y2Nlc3NmdWxFbnN1cmVCeXRlQ2h1bmsgPSAtMTtcbiAgfVxuXG4gIGdldE1pc3NpbmdDaHVua3MoKSB7XG4gICAgY29uc3QgY2h1bmtzID0gW107XG5cbiAgICBmb3IgKGxldCBjaHVuayA9IDAsIG4gPSB0aGlzLm51bUNodW5rczsgY2h1bmsgPCBuOyArK2NodW5rKSB7XG4gICAgICBpZiAoIXRoaXMuX2xvYWRlZENodW5rcy5oYXMoY2h1bmspKSB7XG4gICAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2h1bmtzO1xuICB9XG5cbiAgZ2V0IG51bUNodW5rc0xvYWRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZGVkQ2h1bmtzLnNpemU7XG4gIH1cblxuICBnZXQgaXNEYXRhTG9hZGVkKCkge1xuICAgIHJldHVybiB0aGlzLm51bUNodW5rc0xvYWRlZCA9PT0gdGhpcy5udW1DaHVua3M7XG4gIH1cblxuICBvblJlY2VpdmVEYXRhKGJlZ2luLCBjaHVuaykge1xuICAgIGNvbnN0IGNodW5rU2l6ZSA9IHRoaXMuY2h1bmtTaXplO1xuXG4gICAgaWYgKGJlZ2luICUgY2h1bmtTaXplICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBiZWdpbiBvZmZzZXQ6ICR7YmVnaW59YCk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kID0gYmVnaW4gKyBjaHVuay5ieXRlTGVuZ3RoO1xuXG4gICAgaWYgKGVuZCAlIGNodW5rU2l6ZSAhPT0gMCAmJiBlbmQgIT09IHRoaXMuYnl0ZXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBlbmQgb2Zmc2V0OiAke2VuZH1gKTtcbiAgICB9XG5cbiAgICB0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheShjaHVuayksIGJlZ2luKTtcbiAgICBjb25zdCBiZWdpbkNodW5rID0gTWF0aC5mbG9vcihiZWdpbiAvIGNodW5rU2l6ZSk7XG4gICAgY29uc3QgZW5kQ2h1bmsgPSBNYXRoLmZsb29yKChlbmQgLSAxKSAvIGNodW5rU2l6ZSkgKyAxO1xuXG4gICAgZm9yIChsZXQgY3VyQ2h1bmsgPSBiZWdpbkNodW5rOyBjdXJDaHVuayA8IGVuZENodW5rOyArK2N1ckNodW5rKSB7XG4gICAgICB0aGlzLl9sb2FkZWRDaHVua3MuYWRkKGN1ckNodW5rKTtcbiAgICB9XG4gIH1cblxuICBvblJlY2VpdmVQcm9ncmVzc2l2ZURhdGEoZGF0YSkge1xuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoO1xuICAgIGNvbnN0IGJlZ2luQ2h1bmsgPSBNYXRoLmZsb29yKHBvc2l0aW9uIC8gdGhpcy5jaHVua1NpemUpO1xuICAgIHRoaXMuYnl0ZXMuc2V0KG5ldyBVaW50OEFycmF5KGRhdGEpLCBwb3NpdGlvbik7XG4gICAgcG9zaXRpb24gKz0gZGF0YS5ieXRlTGVuZ3RoO1xuICAgIHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoID0gcG9zaXRpb247XG4gICAgY29uc3QgZW5kQ2h1bmsgPSBwb3NpdGlvbiA+PSB0aGlzLmVuZCA/IHRoaXMubnVtQ2h1bmtzIDogTWF0aC5mbG9vcihwb3NpdGlvbiAvIHRoaXMuY2h1bmtTaXplKTtcblxuICAgIGZvciAobGV0IGN1ckNodW5rID0gYmVnaW5DaHVuazsgY3VyQ2h1bmsgPCBlbmRDaHVuazsgKytjdXJDaHVuaykge1xuICAgICAgdGhpcy5fbG9hZGVkQ2h1bmtzLmFkZChjdXJDaHVuayk7XG4gICAgfVxuICB9XG5cbiAgZW5zdXJlQnl0ZShwb3MpIHtcbiAgICBpZiAocG9zIDwgdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjaHVuayA9IE1hdGguZmxvb3IocG9zIC8gdGhpcy5jaHVua1NpemUpO1xuXG4gICAgaWYgKGNodW5rID4gdGhpcy5udW1DaHVua3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2h1bmsgPT09IHRoaXMubGFzdFN1Y2Nlc3NmdWxFbnN1cmVCeXRlQ2h1bmspIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX2xvYWRlZENodW5rcy5oYXMoY2h1bmspKSB7XG4gICAgICB0aHJvdyBuZXcgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24ocG9zLCBwb3MgKyAxKTtcbiAgICB9XG5cbiAgICB0aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rID0gY2h1bms7XG4gIH1cblxuICBlbnN1cmVSYW5nZShiZWdpbiwgZW5kKSB7XG4gICAgaWYgKGJlZ2luID49IGVuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChlbmQgPD0gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBiZWdpbkNodW5rID0gTWF0aC5mbG9vcihiZWdpbiAvIHRoaXMuY2h1bmtTaXplKTtcblxuICAgIGlmIChiZWdpbkNodW5rID4gdGhpcy5udW1DaHVua3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlbmRDaHVuayA9IE1hdGgubWluKE1hdGguZmxvb3IoKGVuZCAtIDEpIC8gdGhpcy5jaHVua1NpemUpICsgMSwgdGhpcy5udW1DaHVua3MpO1xuXG4gICAgZm9yIChsZXQgY2h1bmsgPSBiZWdpbkNodW5rOyBjaHVuayA8IGVuZENodW5rOyArK2NodW5rKSB7XG4gICAgICBpZiAoIXRoaXMuX2xvYWRlZENodW5rcy5oYXMoY2h1bmspKSB7XG4gICAgICAgIHRocm93IG5ldyBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbihiZWdpbiwgZW5kKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZXh0RW1wdHlDaHVuayhiZWdpbkNodW5rKSB7XG4gICAgY29uc3QgbnVtQ2h1bmtzID0gdGhpcy5udW1DaHVua3M7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUNodW5rczsgKytpKSB7XG4gICAgICBjb25zdCBjaHVuayA9IChiZWdpbkNodW5rICsgaSkgJSBudW1DaHVua3M7XG5cbiAgICAgIGlmICghdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyhjaHVuaykpIHtcbiAgICAgICAgcmV0dXJuIGNodW5rO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaGFzQ2h1bmsoY2h1bmspIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyhjaHVuayk7XG4gIH1cblxuICBnZXRCeXRlKCkge1xuICAgIGNvbnN0IHBvcyA9IHRoaXMucG9zO1xuXG4gICAgaWYgKHBvcyA+PSB0aGlzLmVuZCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIGlmIChwb3MgPj0gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHtcbiAgICAgIHRoaXMuZW5zdXJlQnl0ZShwb3MpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmJ5dGVzW3RoaXMucG9zKytdO1xuICB9XG5cbiAgZ2V0Qnl0ZXMobGVuZ3RoLCBmb3JjZUNsYW1wZWQgPSBmYWxzZSkge1xuICAgIGNvbnN0IGJ5dGVzID0gdGhpcy5ieXRlcztcbiAgICBjb25zdCBwb3MgPSB0aGlzLnBvcztcbiAgICBjb25zdCBzdHJFbmQgPSB0aGlzLmVuZDtcblxuICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICBpZiAoc3RyRW5kID4gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVSYW5nZShwb3MsIHN0ckVuZCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1YmFycmF5ID0gYnl0ZXMuc3ViYXJyYXkocG9zLCBzdHJFbmQpO1xuICAgICAgcmV0dXJuIGZvcmNlQ2xhbXBlZCA/IG5ldyBVaW50OENsYW1wZWRBcnJheShzdWJhcnJheSkgOiBzdWJhcnJheTtcbiAgICB9XG5cbiAgICBsZXQgZW5kID0gcG9zICsgbGVuZ3RoO1xuXG4gICAgaWYgKGVuZCA+IHN0ckVuZCkge1xuICAgICAgZW5kID0gc3RyRW5kO1xuICAgIH1cblxuICAgIGlmIChlbmQgPiB0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCkge1xuICAgICAgdGhpcy5lbnN1cmVSYW5nZShwb3MsIGVuZCk7XG4gICAgfVxuXG4gICAgdGhpcy5wb3MgPSBlbmQ7XG4gICAgY29uc3Qgc3ViYXJyYXkgPSBieXRlcy5zdWJhcnJheShwb3MsIGVuZCk7XG4gICAgcmV0dXJuIGZvcmNlQ2xhbXBlZCA/IG5ldyBVaW50OENsYW1wZWRBcnJheShzdWJhcnJheSkgOiBzdWJhcnJheTtcbiAgfVxuXG4gIGdldEJ5dGVSYW5nZShiZWdpbiwgZW5kKSB7XG4gICAgaWYgKGJlZ2luIDwgMCkge1xuICAgICAgYmVnaW4gPSAwO1xuICAgIH1cblxuICAgIGlmIChlbmQgPiB0aGlzLmVuZCkge1xuICAgICAgZW5kID0gdGhpcy5lbmQ7XG4gICAgfVxuXG4gICAgaWYgKGVuZCA+IHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKSB7XG4gICAgICB0aGlzLmVuc3VyZVJhbmdlKGJlZ2luLCBlbmQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmJ5dGVzLnN1YmFycmF5KGJlZ2luLCBlbmQpO1xuICB9XG5cbiAgbWFrZVN1YlN0cmVhbShzdGFydCwgbGVuZ3RoLCBkaWN0ID0gbnVsbCkge1xuICAgIGlmIChsZW5ndGgpIHtcbiAgICAgIGlmIChzdGFydCArIGxlbmd0aCA+IHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlUmFuZ2Uoc3RhcnQsIHN0YXJ0ICsgbGVuZ3RoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXJ0ID49IHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlQnl0ZShzdGFydCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gQ2h1bmtlZFN0cmVhbVN1YnN0cmVhbSgpIHt9XG5cbiAgICBDaHVua2VkU3RyZWFtU3Vic3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUodGhpcyk7XG5cbiAgICBDaHVua2VkU3RyZWFtU3Vic3RyZWFtLnByb3RvdHlwZS5nZXRNaXNzaW5nQ2h1bmtzID0gZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2h1bmtTaXplID0gdGhpcy5jaHVua1NpemU7XG4gICAgICBjb25zdCBiZWdpbkNodW5rID0gTWF0aC5mbG9vcih0aGlzLnN0YXJ0IC8gY2h1bmtTaXplKTtcbiAgICAgIGNvbnN0IGVuZENodW5rID0gTWF0aC5mbG9vcigodGhpcy5lbmQgLSAxKSAvIGNodW5rU2l6ZSkgKyAxO1xuICAgICAgY29uc3QgbWlzc2luZ0NodW5rcyA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBjaHVuayA9IGJlZ2luQ2h1bms7IGNodW5rIDwgZW5kQ2h1bms7ICsrY2h1bmspIHtcbiAgICAgICAgaWYgKCF0aGlzLl9sb2FkZWRDaHVua3MuaGFzKGNodW5rKSkge1xuICAgICAgICAgIG1pc3NpbmdDaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1pc3NpbmdDaHVua3M7XG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDaHVua2VkU3RyZWFtU3Vic3RyZWFtLnByb3RvdHlwZSwgXCJpc0RhdGFMb2FkZWRcIiwge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBpZiAodGhpcy5udW1DaHVua3NMb2FkZWQgPT09IHRoaXMubnVtQ2h1bmtzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNaXNzaW5nQ2h1bmtzKCkubGVuZ3RoID09PSAwO1xuICAgICAgfSxcblxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgY29uc3Qgc3ViU3RyZWFtID0gbmV3IENodW5rZWRTdHJlYW1TdWJzdHJlYW0oKTtcbiAgICBzdWJTdHJlYW0ucG9zID0gc3ViU3RyZWFtLnN0YXJ0ID0gc3RhcnQ7XG4gICAgc3ViU3RyZWFtLmVuZCA9IHN0YXJ0ICsgbGVuZ3RoIHx8IHRoaXMuZW5kO1xuICAgIHN1YlN0cmVhbS5kaWN0ID0gZGljdDtcbiAgICByZXR1cm4gc3ViU3RyZWFtO1xuICB9XG5cbiAgZ2V0QmFzZVN0cmVhbXMoKSB7XG4gICAgcmV0dXJuIFt0aGlzXTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQ2h1bmtlZFN0cmVhbSA9IENodW5rZWRTdHJlYW07XG5cbmNsYXNzIENodW5rZWRTdHJlYW1NYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IocGRmTmV0d29ya1N0cmVhbSwgYXJncykge1xuICAgIHRoaXMubGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gICAgdGhpcy5jaHVua1NpemUgPSBhcmdzLnJhbmdlQ2h1bmtTaXplO1xuICAgIHRoaXMuc3RyZWFtID0gbmV3IENodW5rZWRTdHJlYW0odGhpcy5sZW5ndGgsIHRoaXMuY2h1bmtTaXplLCB0aGlzKTtcbiAgICB0aGlzLnBkZk5ldHdvcmtTdHJlYW0gPSBwZGZOZXR3b3JrU3RyZWFtO1xuICAgIHRoaXMuZGlzYWJsZUF1dG9GZXRjaCA9IGFyZ3MuZGlzYWJsZUF1dG9GZXRjaDtcbiAgICB0aGlzLm1zZ0hhbmRsZXIgPSBhcmdzLm1zZ0hhbmRsZXI7XG4gICAgdGhpcy5jdXJyUmVxdWVzdElkID0gMDtcbiAgICB0aGlzLl9jaHVua3NOZWVkZWRCeVJlcXVlc3QgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5fcmVxdWVzdHNCeUNodW5rID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX3Byb21pc2VzQnlSZXF1ZXN0ID0gbmV3IE1hcCgpO1xuICAgIHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoID0gMDtcbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICB9XG5cbiAgb25Mb2FkZWRTdHJlYW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIHNlbmRSZXF1ZXN0KGJlZ2luLCBlbmQpIHtcbiAgICBjb25zdCByYW5nZVJlYWRlciA9IHRoaXMucGRmTmV0d29ya1N0cmVhbS5nZXRSYW5nZVJlYWRlcihiZWdpbiwgZW5kKTtcblxuICAgIGlmICghcmFuZ2VSZWFkZXIuaXNTdHJlYW1pbmdTdXBwb3J0ZWQpIHtcbiAgICAgIHJhbmdlUmVhZGVyLm9uUHJvZ3Jlc3MgPSB0aGlzLm9uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBsZXQgY2h1bmtzID0gW10sXG4gICAgICAgIGxvYWRlZCA9IDA7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHJlYWRDaHVuayA9IGNodW5rID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIWNodW5rLmRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBjaHVuay52YWx1ZTtcbiAgICAgICAgICAgIGNodW5rcy5wdXNoKGRhdGEpO1xuICAgICAgICAgICAgbG9hZGVkICs9ICgwLCBfdXRpbC5hcnJheUJ5dGVMZW5ndGgpKGRhdGEpO1xuXG4gICAgICAgICAgICBpZiAocmFuZ2VSZWFkZXIuaXNTdHJlYW1pbmdTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5vblByb2dyZXNzKHtcbiAgICAgICAgICAgICAgICBsb2FkZWRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJhbmdlUmVhZGVyLnJlYWQoKS50aGVuKHJlYWRDaHVuaywgcmVqZWN0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjaHVua0RhdGEgPSAoMCwgX3V0aWwuYXJyYXlzVG9CeXRlcykoY2h1bmtzKTtcbiAgICAgICAgICBjaHVua3MgPSBudWxsO1xuICAgICAgICAgIHJlc29sdmUoY2h1bmtEYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmFuZ2VSZWFkZXIucmVhZCgpLnRoZW4ocmVhZENodW5rLCByZWplY3QpO1xuICAgIH0pLnRoZW4oZGF0YSA9PiB7XG4gICAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vblJlY2VpdmVEYXRhKHtcbiAgICAgICAgY2h1bms6IGRhdGEsXG4gICAgICAgIGJlZ2luXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlcXVlc3RBbGxDaHVua3MoKSB7XG4gICAgY29uc3QgbWlzc2luZ0NodW5rcyA9IHRoaXMuc3RyZWFtLmdldE1pc3NpbmdDaHVua3MoKTtcblxuICAgIHRoaXMuX3JlcXVlc3RDaHVua3MobWlzc2luZ0NodW5rcyk7XG5cbiAgICByZXR1cm4gdGhpcy5fbG9hZGVkU3RyZWFtQ2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG5cbiAgX3JlcXVlc3RDaHVua3MoY2h1bmtzKSB7XG4gICAgY29uc3QgcmVxdWVzdElkID0gdGhpcy5jdXJyUmVxdWVzdElkKys7XG4gICAgY29uc3QgY2h1bmtzTmVlZGVkID0gbmV3IFNldCgpO1xuXG4gICAgdGhpcy5fY2h1bmtzTmVlZGVkQnlSZXF1ZXN0LnNldChyZXF1ZXN0SWQsIGNodW5rc05lZWRlZCk7XG5cbiAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcykge1xuICAgICAgaWYgKCF0aGlzLnN0cmVhbS5oYXNDaHVuayhjaHVuaykpIHtcbiAgICAgICAgY2h1bmtzTmVlZGVkLmFkZChjaHVuayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNodW5rc05lZWRlZC5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcblxuICAgIHRoaXMuX3Byb21pc2VzQnlSZXF1ZXN0LnNldChyZXF1ZXN0SWQsIGNhcGFiaWxpdHkpO1xuXG4gICAgY29uc3QgY2h1bmtzVG9SZXF1ZXN0ID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rc05lZWRlZCkge1xuICAgICAgbGV0IHJlcXVlc3RJZHMgPSB0aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZ2V0KGNodW5rKTtcblxuICAgICAgaWYgKCFyZXF1ZXN0SWRzKSB7XG4gICAgICAgIHJlcXVlc3RJZHMgPSBbXTtcblxuICAgICAgICB0aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuc2V0KGNodW5rLCByZXF1ZXN0SWRzKTtcblxuICAgICAgICBjaHVua3NUb1JlcXVlc3QucHVzaChjaHVuayk7XG4gICAgICB9XG5cbiAgICAgIHJlcXVlc3RJZHMucHVzaChyZXF1ZXN0SWQpO1xuICAgIH1cblxuICAgIGlmIChjaHVua3NUb1JlcXVlc3QubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZ3JvdXBlZENodW5rc1RvUmVxdWVzdCA9IHRoaXMuZ3JvdXBDaHVua3MoY2h1bmtzVG9SZXF1ZXN0KTtcblxuICAgICAgZm9yIChjb25zdCBncm91cGVkQ2h1bmsgb2YgZ3JvdXBlZENodW5rc1RvUmVxdWVzdCkge1xuICAgICAgICBjb25zdCBiZWdpbiA9IGdyb3VwZWRDaHVuay5iZWdpbkNodW5rICogdGhpcy5jaHVua1NpemU7XG4gICAgICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKGdyb3VwZWRDaHVuay5lbmRDaHVuayAqIHRoaXMuY2h1bmtTaXplLCB0aGlzLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuc2VuZFJlcXVlc3QoYmVnaW4sIGVuZCkuY2F0Y2goY2FwYWJpbGl0eS5yZWplY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2UuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgIGlmICh0aGlzLmFib3J0ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyByZWFzb247XG4gICAgfSk7XG4gIH1cblxuICBnZXRTdHJlYW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyZWFtO1xuICB9XG5cbiAgcmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQpIHtcbiAgICBlbmQgPSBNYXRoLm1pbihlbmQsIHRoaXMubGVuZ3RoKTtcbiAgICBjb25zdCBiZWdpbkNodW5rID0gdGhpcy5nZXRCZWdpbkNodW5rKGJlZ2luKTtcbiAgICBjb25zdCBlbmRDaHVuayA9IHRoaXMuZ2V0RW5kQ2h1bmsoZW5kKTtcbiAgICBjb25zdCBjaHVua3MgPSBbXTtcblxuICAgIGZvciAobGV0IGNodW5rID0gYmVnaW5DaHVuazsgY2h1bmsgPCBlbmRDaHVuazsgKytjaHVuaykge1xuICAgICAgY2h1bmtzLnB1c2goY2h1bmspO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0Q2h1bmtzKGNodW5rcyk7XG4gIH1cblxuICByZXF1ZXN0UmFuZ2VzKHJhbmdlcyA9IFtdKSB7XG4gICAgY29uc3QgY2h1bmtzVG9SZXF1ZXN0ID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHJhbmdlIG9mIHJhbmdlcykge1xuICAgICAgY29uc3QgYmVnaW5DaHVuayA9IHRoaXMuZ2V0QmVnaW5DaHVuayhyYW5nZS5iZWdpbik7XG4gICAgICBjb25zdCBlbmRDaHVuayA9IHRoaXMuZ2V0RW5kQ2h1bmsocmFuZ2UuZW5kKTtcblxuICAgICAgZm9yIChsZXQgY2h1bmsgPSBiZWdpbkNodW5rOyBjaHVuayA8IGVuZENodW5rOyArK2NodW5rKSB7XG4gICAgICAgIGlmICghY2h1bmtzVG9SZXF1ZXN0LmluY2x1ZGVzKGNodW5rKSkge1xuICAgICAgICAgIGNodW5rc1RvUmVxdWVzdC5wdXNoKGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNodW5rc1RvUmVxdWVzdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYSAtIGI7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVlc3RDaHVua3MoY2h1bmtzVG9SZXF1ZXN0KTtcbiAgfVxuXG4gIGdyb3VwQ2h1bmtzKGNodW5rcykge1xuICAgIGNvbnN0IGdyb3VwZWRDaHVua3MgPSBbXTtcbiAgICBsZXQgYmVnaW5DaHVuayA9IC0xO1xuICAgIGxldCBwcmV2Q2h1bmsgPSAtMTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGNodW5rcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICBjb25zdCBjaHVuayA9IGNodW5rc1tpXTtcblxuICAgICAgaWYgKGJlZ2luQ2h1bmsgPCAwKSB7XG4gICAgICAgIGJlZ2luQ2h1bmsgPSBjaHVuaztcbiAgICAgIH1cblxuICAgICAgaWYgKHByZXZDaHVuayA+PSAwICYmIHByZXZDaHVuayArIDEgIT09IGNodW5rKSB7XG4gICAgICAgIGdyb3VwZWRDaHVua3MucHVzaCh7XG4gICAgICAgICAgYmVnaW5DaHVuayxcbiAgICAgICAgICBlbmRDaHVuazogcHJldkNodW5rICsgMVxuICAgICAgICB9KTtcbiAgICAgICAgYmVnaW5DaHVuayA9IGNodW5rO1xuICAgICAgfVxuXG4gICAgICBpZiAoaSArIDEgPT09IGNodW5rcy5sZW5ndGgpIHtcbiAgICAgICAgZ3JvdXBlZENodW5rcy5wdXNoKHtcbiAgICAgICAgICBiZWdpbkNodW5rLFxuICAgICAgICAgIGVuZENodW5rOiBjaHVuayArIDFcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHByZXZDaHVuayA9IGNodW5rO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cGVkQ2h1bmtzO1xuICB9XG5cbiAgb25Qcm9ncmVzcyhhcmdzKSB7XG4gICAgdGhpcy5tc2dIYW5kbGVyLnNlbmQoXCJEb2NQcm9ncmVzc1wiLCB7XG4gICAgICBsb2FkZWQ6IHRoaXMuc3RyZWFtLm51bUNodW5rc0xvYWRlZCAqIHRoaXMuY2h1bmtTaXplICsgYXJncy5sb2FkZWQsXG4gICAgICB0b3RhbDogdGhpcy5sZW5ndGhcbiAgICB9KTtcbiAgfVxuXG4gIG9uUmVjZWl2ZURhdGEoYXJncykge1xuICAgIGNvbnN0IGNodW5rID0gYXJncy5jaHVuaztcbiAgICBjb25zdCBpc1Byb2dyZXNzaXZlID0gYXJncy5iZWdpbiA9PT0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGJlZ2luID0gaXNQcm9ncmVzc2l2ZSA/IHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoIDogYXJncy5iZWdpbjtcbiAgICBjb25zdCBlbmQgPSBiZWdpbiArIGNodW5rLmJ5dGVMZW5ndGg7XG4gICAgY29uc3QgYmVnaW5DaHVuayA9IE1hdGguZmxvb3IoYmVnaW4gLyB0aGlzLmNodW5rU2l6ZSk7XG4gICAgY29uc3QgZW5kQ2h1bmsgPSBlbmQgPCB0aGlzLmxlbmd0aCA/IE1hdGguZmxvb3IoZW5kIC8gdGhpcy5jaHVua1NpemUpIDogTWF0aC5jZWlsKGVuZCAvIHRoaXMuY2h1bmtTaXplKTtcblxuICAgIGlmIChpc1Byb2dyZXNzaXZlKSB7XG4gICAgICB0aGlzLnN0cmVhbS5vblJlY2VpdmVQcm9ncmVzc2l2ZURhdGEoY2h1bmspO1xuICAgICAgdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGggPSBlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RyZWFtLm9uUmVjZWl2ZURhdGEoYmVnaW4sIGNodW5rKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdHJlYW0uaXNEYXRhTG9hZGVkKSB7XG4gICAgICB0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5LnJlc29sdmUodGhpcy5zdHJlYW0pO1xuICAgIH1cblxuICAgIGNvbnN0IGxvYWRlZFJlcXVlc3RzID0gW107XG5cbiAgICBmb3IgKGxldCBjdXJDaHVuayA9IGJlZ2luQ2h1bms7IGN1ckNodW5rIDwgZW5kQ2h1bms7ICsrY3VyQ2h1bmspIHtcbiAgICAgIGNvbnN0IHJlcXVlc3RJZHMgPSB0aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZ2V0KGN1ckNodW5rKTtcblxuICAgICAgaWYgKCFyZXF1ZXN0SWRzKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZGVsZXRlKGN1ckNodW5rKTtcblxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0SWQgb2YgcmVxdWVzdElkcykge1xuICAgICAgICBjb25zdCBjaHVua3NOZWVkZWQgPSB0aGlzLl9jaHVua3NOZWVkZWRCeVJlcXVlc3QuZ2V0KHJlcXVlc3RJZCk7XG5cbiAgICAgICAgaWYgKGNodW5rc05lZWRlZC5oYXMoY3VyQ2h1bmspKSB7XG4gICAgICAgICAgY2h1bmtzTmVlZGVkLmRlbGV0ZShjdXJDaHVuayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2h1bmtzTmVlZGVkLnNpemUgPiAwKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsb2FkZWRSZXF1ZXN0cy5wdXNoKHJlcXVlc3RJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRpc2FibGVBdXRvRmV0Y2ggJiYgdGhpcy5fcmVxdWVzdHNCeUNodW5rLnNpemUgPT09IDApIHtcbiAgICAgIGxldCBuZXh0RW1wdHlDaHVuaztcblxuICAgICAgaWYgKHRoaXMuc3RyZWFtLm51bUNodW5rc0xvYWRlZCA9PT0gMSkge1xuICAgICAgICBjb25zdCBsYXN0Q2h1bmsgPSB0aGlzLnN0cmVhbS5udW1DaHVua3MgLSAxO1xuXG4gICAgICAgIGlmICghdGhpcy5zdHJlYW0uaGFzQ2h1bmsobGFzdENodW5rKSkge1xuICAgICAgICAgIG5leHRFbXB0eUNodW5rID0gbGFzdENodW5rO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0RW1wdHlDaHVuayA9IHRoaXMuc3RyZWFtLm5leHRFbXB0eUNodW5rKGVuZENodW5rKTtcbiAgICAgIH1cblxuICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIobmV4dEVtcHR5Q2h1bmspKSB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RDaHVua3MoW25leHRFbXB0eUNodW5rXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0SWQgb2YgbG9hZGVkUmVxdWVzdHMpIHtcbiAgICAgIGNvbnN0IGNhcGFiaWxpdHkgPSB0aGlzLl9wcm9taXNlc0J5UmVxdWVzdC5nZXQocmVxdWVzdElkKTtcblxuICAgICAgdGhpcy5fcHJvbWlzZXNCeVJlcXVlc3QuZGVsZXRlKHJlcXVlc3RJZCk7XG5cbiAgICAgIGNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHRoaXMubXNnSGFuZGxlci5zZW5kKFwiRG9jUHJvZ3Jlc3NcIiwge1xuICAgICAgbG9hZGVkOiB0aGlzLnN0cmVhbS5udW1DaHVua3NMb2FkZWQgKiB0aGlzLmNodW5rU2l6ZSxcbiAgICAgIHRvdGFsOiB0aGlzLmxlbmd0aFxuICAgIH0pO1xuICB9XG5cbiAgb25FcnJvcihlcnIpIHtcbiAgICB0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5LnJlamVjdChlcnIpO1xuICB9XG5cbiAgZ2V0QmVnaW5DaHVuayhiZWdpbikge1xuICAgIHJldHVybiBNYXRoLmZsb29yKGJlZ2luIC8gdGhpcy5jaHVua1NpemUpO1xuICB9XG5cbiAgZ2V0RW5kQ2h1bmsoZW5kKSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoKGVuZCAtIDEpIC8gdGhpcy5jaHVua1NpemUpICsgMTtcbiAgfVxuXG4gIGFib3J0KHJlYXNvbikge1xuICAgIHRoaXMuYWJvcnRlZCA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5wZGZOZXR3b3JrU3RyZWFtKSB7XG4gICAgICB0aGlzLnBkZk5ldHdvcmtTdHJlYW0uY2FuY2VsQWxsUmVxdWVzdHMocmVhc29uKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNhcGFiaWxpdHkgb2YgdGhpcy5fcHJvbWlzZXNCeVJlcXVlc3QudmFsdWVzKCkpIHtcbiAgICAgIGNhcGFiaWxpdHkucmVqZWN0KHJlYXNvbik7XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5DaHVua2VkU3RyZWFtTWFuYWdlciA9IENodW5rZWRTdHJlYW1NYW5hZ2VyO1xuXG4vKioqLyB9KSxcbi8qIDkgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuWFJlZlBhcnNlRXhjZXB0aW9uID0gZXhwb3J0cy5YUmVmRW50cnlFeGNlcHRpb24gPSBleHBvcnRzLlBhcnNlckVPRkV4Y2VwdGlvbiA9IGV4cG9ydHMuTWlzc2luZ0RhdGFFeGNlcHRpb24gPSBleHBvcnRzLkRvY1N0YXRzID0gdm9pZCAwO1xuZXhwb3J0cy5jb2xsZWN0QWN0aW9ucyA9IGNvbGxlY3RBY3Rpb25zO1xuZXhwb3J0cy5lbmNvZGVUb1htbFN0cmluZyA9IGVuY29kZVRvWG1sU3RyaW5nO1xuZXhwb3J0cy5lc2NhcGVQREZOYW1lID0gZXNjYXBlUERGTmFtZTtcbmV4cG9ydHMuZ2V0QXJyYXlMb29rdXBUYWJsZUZhY3RvcnkgPSBnZXRBcnJheUxvb2t1cFRhYmxlRmFjdG9yeTtcbmV4cG9ydHMuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSA9IGdldEluaGVyaXRhYmxlUHJvcGVydHk7XG5leHBvcnRzLmdldExvb2t1cFRhYmxlRmFjdG9yeSA9IGdldExvb2t1cFRhYmxlRmFjdG9yeTtcbmV4cG9ydHMuaXNXaGl0ZVNwYWNlID0gaXNXaGl0ZVNwYWNlO1xuZXhwb3J0cy5sb2cyID0gbG9nMjtcbmV4cG9ydHMucGFyc2VYRkFQYXRoID0gcGFyc2VYRkFQYXRoO1xuZXhwb3J0cy5yZWFkSW50OCA9IHJlYWRJbnQ4O1xuZXhwb3J0cy5yZWFkVWludDE2ID0gcmVhZFVpbnQxNjtcbmV4cG9ydHMucmVhZFVpbnQzMiA9IHJlYWRVaW50MzI7XG5leHBvcnRzLnJlY292ZXJKc1VSTCA9IHJlY292ZXJKc1VSTDtcbmV4cG9ydHMudG9Sb21hbk51bWVyYWxzID0gdG9Sb21hbk51bWVyYWxzO1xuZXhwb3J0cy52YWxpZGF0ZUNTU0ZvbnQgPSB2YWxpZGF0ZUNTU0ZvbnQ7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbmZ1bmN0aW9uIGdldExvb2t1cFRhYmxlRmFjdG9yeShpbml0aWFsaXplcikge1xuICBsZXQgbG9va3VwO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmIChpbml0aWFsaXplcikge1xuICAgICAgbG9va3VwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIGluaXRpYWxpemVyKGxvb2t1cCk7XG4gICAgICBpbml0aWFsaXplciA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvb2t1cDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0QXJyYXlMb29rdXBUYWJsZUZhY3RvcnkoaW5pdGlhbGl6ZXIpIHtcbiAgbGV0IGxvb2t1cDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaW5pdGlhbGl6ZXIpIHtcbiAgICAgIGxldCBhcnIgPSBpbml0aWFsaXplcigpO1xuICAgICAgaW5pdGlhbGl6ZXIgPSBudWxsO1xuICAgICAgbG9va3VwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gYXJyLmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHtcbiAgICAgICAgbG9va3VwW2FycltpXV0gPSBhcnJbaSArIDFdO1xuICAgICAgfVxuXG4gICAgICBhcnIgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBsb29rdXA7XG4gIH07XG59XG5cbmNsYXNzIE1pc3NpbmdEYXRhRXhjZXB0aW9uIGV4dGVuZHMgX3V0aWwuQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGJlZ2luLCBlbmQpIHtcbiAgICBzdXBlcihgTWlzc2luZyBkYXRhIFske2JlZ2lufSwgJHtlbmR9KWAsIFwiTWlzc2luZ0RhdGFFeGNlcHRpb25cIik7XG4gICAgdGhpcy5iZWdpbiA9IGJlZ2luO1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbn1cblxuZXhwb3J0cy5NaXNzaW5nRGF0YUV4Y2VwdGlvbiA9IE1pc3NpbmdEYXRhRXhjZXB0aW9uO1xuXG5jbGFzcyBQYXJzZXJFT0ZFeGNlcHRpb24gZXh0ZW5kcyBfdXRpbC5CYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgc3VwZXIobXNnLCBcIlBhcnNlckVPRkV4Y2VwdGlvblwiKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUGFyc2VyRU9GRXhjZXB0aW9uID0gUGFyc2VyRU9GRXhjZXB0aW9uO1xuXG5jbGFzcyBYUmVmRW50cnlFeGNlcHRpb24gZXh0ZW5kcyBfdXRpbC5CYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgc3VwZXIobXNnLCBcIlhSZWZFbnRyeUV4Y2VwdGlvblwiKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuWFJlZkVudHJ5RXhjZXB0aW9uID0gWFJlZkVudHJ5RXhjZXB0aW9uO1xuXG5jbGFzcyBYUmVmUGFyc2VFeGNlcHRpb24gZXh0ZW5kcyBfdXRpbC5CYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgc3VwZXIobXNnLCBcIlhSZWZQYXJzZUV4Y2VwdGlvblwiKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuWFJlZlBhcnNlRXhjZXB0aW9uID0gWFJlZlBhcnNlRXhjZXB0aW9uO1xuXG5jbGFzcyBEb2NTdGF0cyB7XG4gIGNvbnN0cnVjdG9yKGhhbmRsZXIpIHtcbiAgICB0aGlzLl9oYW5kbGVyID0gaGFuZGxlcjtcbiAgICB0aGlzLl9zdHJlYW1UeXBlcyA9IG5ldyBTZXQoKTtcbiAgICB0aGlzLl9mb250VHlwZXMgPSBuZXcgU2V0KCk7XG4gIH1cblxuICBfc2VuZCgpIHtcbiAgICBjb25zdCBzdHJlYW1UeXBlcyA9IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgZm9udFR5cGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0aGlzLl9zdHJlYW1UeXBlcykge1xuICAgICAgc3RyZWFtVHlwZXNbdHlwZV0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0aGlzLl9mb250VHlwZXMpIHtcbiAgICAgIGZvbnRUeXBlc1t0eXBlXSA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5faGFuZGxlci5zZW5kKFwiRG9jU3RhdHNcIiwge1xuICAgICAgc3RyZWFtVHlwZXMsXG4gICAgICBmb250VHlwZXNcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFN0cmVhbVR5cGUodHlwZSkge1xuICAgIGlmICh0aGlzLl9zdHJlYW1UeXBlcy5oYXModHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zdHJlYW1UeXBlcy5hZGQodHlwZSk7XG5cbiAgICB0aGlzLl9zZW5kKCk7XG4gIH1cblxuICBhZGRGb250VHlwZSh0eXBlKSB7XG4gICAgaWYgKHRoaXMuX2ZvbnRUeXBlcy5oYXModHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9mb250VHlwZXMuYWRkKHR5cGUpO1xuXG4gICAgdGhpcy5fc2VuZCgpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Eb2NTdGF0cyA9IERvY1N0YXRzO1xuXG5mdW5jdGlvbiBnZXRJbmhlcml0YWJsZVByb3BlcnR5KHtcbiAgZGljdCxcbiAga2V5LFxuICBnZXRBcnJheSA9IGZhbHNlLFxuICBzdG9wV2hlbkZvdW5kID0gdHJ1ZVxufSkge1xuICBsZXQgdmFsdWVzO1xuICBjb25zdCB2aXNpdGVkID0gbmV3IF9wcmltaXRpdmVzLlJlZlNldCgpO1xuXG4gIHdoaWxlIChkaWN0IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCAmJiAhKGRpY3Qub2JqSWQgJiYgdmlzaXRlZC5oYXMoZGljdC5vYmpJZCkpKSB7XG4gICAgaWYgKGRpY3Qub2JqSWQpIHtcbiAgICAgIHZpc2l0ZWQucHV0KGRpY3Qub2JqSWQpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gZ2V0QXJyYXkgPyBkaWN0LmdldEFycmF5KGtleSkgOiBkaWN0LmdldChrZXkpO1xuXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChzdG9wV2hlbkZvdW5kKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgICAgdmFsdWVzID0gW107XG4gICAgICB9XG5cbiAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICB9XG5cbiAgICBkaWN0ID0gZGljdC5nZXQoXCJQYXJlbnRcIik7XG4gIH1cblxuICByZXR1cm4gdmFsdWVzO1xufVxuXG5jb25zdCBST01BTl9OVU1CRVJfTUFQID0gW1wiXCIsIFwiQ1wiLCBcIkNDXCIsIFwiQ0NDXCIsIFwiQ0RcIiwgXCJEXCIsIFwiRENcIiwgXCJEQ0NcIiwgXCJEQ0NDXCIsIFwiQ01cIiwgXCJcIiwgXCJYXCIsIFwiWFhcIiwgXCJYWFhcIiwgXCJYTFwiLCBcIkxcIiwgXCJMWFwiLCBcIkxYWFwiLCBcIkxYWFhcIiwgXCJYQ1wiLCBcIlwiLCBcIklcIiwgXCJJSVwiLCBcIklJSVwiLCBcIklWXCIsIFwiVlwiLCBcIlZJXCIsIFwiVklJXCIsIFwiVklJSVwiLCBcIklYXCJdO1xuXG5mdW5jdGlvbiB0b1JvbWFuTnVtZXJhbHMobnVtYmVyLCBsb3dlckNhc2UgPSBmYWxzZSkge1xuICAoMCwgX3V0aWwuYXNzZXJ0KShOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcikgJiYgbnVtYmVyID4gMCwgXCJUaGUgbnVtYmVyIHNob3VsZCBiZSBhIHBvc2l0aXZlIGludGVnZXIuXCIpO1xuICBjb25zdCByb21hbkJ1ZiA9IFtdO1xuICBsZXQgcG9zO1xuXG4gIHdoaWxlIChudW1iZXIgPj0gMTAwMCkge1xuICAgIG51bWJlciAtPSAxMDAwO1xuICAgIHJvbWFuQnVmLnB1c2goXCJNXCIpO1xuICB9XG5cbiAgcG9zID0gbnVtYmVyIC8gMTAwIHwgMDtcbiAgbnVtYmVyICU9IDEwMDtcbiAgcm9tYW5CdWYucHVzaChST01BTl9OVU1CRVJfTUFQW3Bvc10pO1xuICBwb3MgPSBudW1iZXIgLyAxMCB8IDA7XG4gIG51bWJlciAlPSAxMDtcbiAgcm9tYW5CdWYucHVzaChST01BTl9OVU1CRVJfTUFQWzEwICsgcG9zXSk7XG4gIHJvbWFuQnVmLnB1c2goUk9NQU5fTlVNQkVSX01BUFsyMCArIG51bWJlcl0pO1xuICBjb25zdCByb21hblN0ciA9IHJvbWFuQnVmLmpvaW4oXCJcIik7XG4gIHJldHVybiBsb3dlckNhc2UgPyByb21hblN0ci50b0xvd2VyQ2FzZSgpIDogcm9tYW5TdHI7XG59XG5cbmZ1bmN0aW9uIGxvZzIoeCkge1xuICBpZiAoeCA8PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICByZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nMih4KSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRJbnQ4KGRhdGEsIG9mZnNldCkge1xuICByZXR1cm4gZGF0YVtvZmZzZXRdIDw8IDI0ID4+IDI0O1xufVxuXG5mdW5jdGlvbiByZWFkVWludDE2KGRhdGEsIG9mZnNldCkge1xuICByZXR1cm4gZGF0YVtvZmZzZXRdIDw8IDggfCBkYXRhW29mZnNldCArIDFdO1xufVxuXG5mdW5jdGlvbiByZWFkVWludDMyKGRhdGEsIG9mZnNldCkge1xuICByZXR1cm4gKGRhdGFbb2Zmc2V0XSA8PCAyNCB8IGRhdGFbb2Zmc2V0ICsgMV0gPDwgMTYgfCBkYXRhW29mZnNldCArIDJdIDw8IDggfCBkYXRhW29mZnNldCArIDNdKSA+Pj4gMDtcbn1cblxuZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGNoKSB7XG4gIHJldHVybiBjaCA9PT0gMHgyMCB8fCBjaCA9PT0gMHgwOSB8fCBjaCA9PT0gMHgwZCB8fCBjaCA9PT0gMHgwYTtcbn1cblxuZnVuY3Rpb24gcGFyc2VYRkFQYXRoKHBhdGgpIHtcbiAgY29uc3QgcG9zaXRpb25QYXR0ZXJuID0gLyguKylcXFsoXFxkKylcXF0kLztcbiAgcmV0dXJuIHBhdGguc3BsaXQoXCIuXCIpLm1hcChjb21wb25lbnQgPT4ge1xuICAgIGNvbnN0IG0gPSBjb21wb25lbnQubWF0Y2gocG9zaXRpb25QYXR0ZXJuKTtcblxuICAgIGlmIChtKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBtWzFdLFxuICAgICAgICBwb3M6IHBhcnNlSW50KG1bMl0sIDEwKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogY29tcG9uZW50LFxuICAgICAgcG9zOiAwXG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVzY2FwZVBERk5hbWUoc3RyKSB7XG4gIGNvbnN0IGJ1ZmZlciA9IFtdO1xuICBsZXQgc3RhcnQgPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwLCBpaSA9IHN0ci5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgY29uc3QgY2hhciA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuXG4gICAgaWYgKGNoYXIgPCAweDIxIHx8IGNoYXIgPiAweDdlIHx8IGNoYXIgPT09IDB4MjMgfHwgY2hhciA9PT0gMHgyOCB8fCBjaGFyID09PSAweDI5IHx8IGNoYXIgPT09IDB4M2MgfHwgY2hhciA9PT0gMHgzZSB8fCBjaGFyID09PSAweDViIHx8IGNoYXIgPT09IDB4NWQgfHwgY2hhciA9PT0gMHg3YiB8fCBjaGFyID09PSAweDdkIHx8IGNoYXIgPT09IDB4MmYgfHwgY2hhciA9PT0gMHgyNSkge1xuICAgICAgaWYgKHN0YXJ0IDwgaSkge1xuICAgICAgICBidWZmZXIucHVzaChzdHIuc3Vic3RyaW5nKHN0YXJ0LCBpKSk7XG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlci5wdXNoKGAjJHtjaGFyLnRvU3RyaW5nKDE2KX1gKTtcbiAgICAgIHN0YXJ0ID0gaSArIDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgaWYgKHN0YXJ0IDwgc3RyLmxlbmd0aCkge1xuICAgIGJ1ZmZlci5wdXNoKHN0ci5zdWJzdHJpbmcoc3RhcnQsIHN0ci5sZW5ndGgpKTtcbiAgfVxuXG4gIHJldHVybiBidWZmZXIuam9pbihcIlwiKTtcbn1cblxuZnVuY3Rpb24gX2NvbGxlY3RKUyhlbnRyeSwgeHJlZiwgbGlzdCwgcGFyZW50cykge1xuICBpZiAoIWVudHJ5KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHBhcmVudCA9IG51bGw7XG5cbiAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikoZW50cnkpKSB7XG4gICAgaWYgKHBhcmVudHMuaGFzKGVudHJ5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHBhcmVudCA9IGVudHJ5O1xuICAgIHBhcmVudHMucHV0KHBhcmVudCk7XG4gICAgZW50cnkgPSB4cmVmLmZldGNoKGVudHJ5KTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGVudHJ5KSkge1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbnRyeSkge1xuICAgICAgX2NvbGxlY3RKUyhlbGVtZW50LCB4cmVmLCBsaXN0LCBwYXJlbnRzKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZW50cnkgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSB7XG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGVudHJ5LmdldChcIlNcIiksIFwiSmF2YVNjcmlwdFwiKSAmJiBlbnRyeS5oYXMoXCJKU1wiKSkge1xuICAgICAgY29uc3QganMgPSBlbnRyeS5nZXQoXCJKU1wiKTtcbiAgICAgIGxldCBjb2RlO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShqcykpIHtcbiAgICAgICAgY29kZSA9IGpzLmdldFN0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29kZSA9IGpzO1xuICAgICAgfVxuXG4gICAgICBjb2RlID0gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShjb2RlKTtcblxuICAgICAgaWYgKGNvZGUpIHtcbiAgICAgICAgbGlzdC5wdXNoKGNvZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIF9jb2xsZWN0SlMoZW50cnkuZ2V0UmF3KFwiTmV4dFwiKSwgeHJlZiwgbGlzdCwgcGFyZW50cyk7XG4gIH1cblxuICBpZiAocGFyZW50KSB7XG4gICAgcGFyZW50cy5yZW1vdmUocGFyZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb2xsZWN0QWN0aW9ucyh4cmVmLCBkaWN0LCBldmVudFR5cGUpIHtcbiAgY29uc3QgYWN0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGNvbnN0IGFkZGl0aW9uYWxBY3Rpb25zRGljdHMgPSBnZXRJbmhlcml0YWJsZVByb3BlcnR5KHtcbiAgICBkaWN0LFxuICAgIGtleTogXCJBQVwiLFxuICAgIHN0b3BXaGVuRm91bmQ6IGZhbHNlXG4gIH0pO1xuXG4gIGlmIChhZGRpdGlvbmFsQWN0aW9uc0RpY3RzKSB7XG4gICAgZm9yIChsZXQgaSA9IGFkZGl0aW9uYWxBY3Rpb25zRGljdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxBY3Rpb25zID0gYWRkaXRpb25hbEFjdGlvbnNEaWN0c1tpXTtcblxuICAgICAgaWYgKCEoYWRkaXRpb25hbEFjdGlvbnMgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgYWRkaXRpb25hbEFjdGlvbnMuZ2V0S2V5cygpKSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IGV2ZW50VHlwZVtrZXldO1xuXG4gICAgICAgIGlmICghYWN0aW9uKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhY3Rpb25EaWN0ID0gYWRkaXRpb25hbEFjdGlvbnMuZ2V0UmF3KGtleSk7XG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0KCk7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBbXTtcblxuICAgICAgICBfY29sbGVjdEpTKGFjdGlvbkRpY3QsIHhyZWYsIGxpc3QsIHBhcmVudHMpO1xuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBhY3Rpb25zW2FjdGlvbl0gPSBsaXN0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGRpY3QuaGFzKFwiQVwiKSkge1xuICAgIGNvbnN0IGFjdGlvbkRpY3QgPSBkaWN0LmdldChcIkFcIik7XG4gICAgY29uc3QgcGFyZW50cyA9IG5ldyBfcHJpbWl0aXZlcy5SZWZTZXQoKTtcbiAgICBjb25zdCBsaXN0ID0gW107XG5cbiAgICBfY29sbGVjdEpTKGFjdGlvbkRpY3QsIHhyZWYsIGxpc3QsIHBhcmVudHMpO1xuXG4gICAgaWYgKGxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgYWN0aW9ucy5BY3Rpb24gPSBsaXN0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoMCwgX3V0aWwub2JqZWN0U2l6ZSkoYWN0aW9ucykgPiAwID8gYWN0aW9ucyA6IG51bGw7XG59XG5cbmNvbnN0IFhNTEVudGl0aWVzID0ge1xuICAweDNjOiBcIiZsdDtcIixcbiAgMHgzZTogXCImZ3Q7XCIsXG4gIDB4MjY6IFwiJmFtcDtcIixcbiAgMHgyMjogXCImcXVvdDtcIixcbiAgMHgyNzogXCImYXBvcztcIlxufTtcblxuZnVuY3Rpb24gZW5jb2RlVG9YbWxTdHJpbmcoc3RyKSB7XG4gIGNvbnN0IGJ1ZmZlciA9IFtdO1xuICBsZXQgc3RhcnQgPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwLCBpaSA9IHN0ci5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgY29uc3QgY2hhciA9IHN0ci5jb2RlUG9pbnRBdChpKTtcblxuICAgIGlmICgweDIwIDw9IGNoYXIgJiYgY2hhciA8PSAweDdlKSB7XG4gICAgICBjb25zdCBlbnRpdHkgPSBYTUxFbnRpdGllc1tjaGFyXTtcblxuICAgICAgaWYgKGVudGl0eSkge1xuICAgICAgICBpZiAoc3RhcnQgPCBpKSB7XG4gICAgICAgICAgYnVmZmVyLnB1c2goc3RyLnN1YnN0cmluZyhzdGFydCwgaSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVmZmVyLnB1c2goZW50aXR5KTtcbiAgICAgICAgc3RhcnQgPSBpICsgMTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXJ0IDwgaSkge1xuICAgICAgICBidWZmZXIucHVzaChzdHIuc3Vic3RyaW5nKHN0YXJ0LCBpKSk7XG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlci5wdXNoKGAmI3gke2NoYXIudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9O2ApO1xuXG4gICAgICBpZiAoY2hhciA+IDB4ZDdmZiAmJiAoY2hhciA8IDB4ZTAwMCB8fCBjaGFyID4gMHhmZmZkKSkge1xuICAgICAgICBpKys7XG4gICAgICB9XG5cbiAgICAgIHN0YXJ0ID0gaSArIDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgaWYgKHN0YXJ0IDwgc3RyLmxlbmd0aCkge1xuICAgIGJ1ZmZlci5wdXNoKHN0ci5zdWJzdHJpbmcoc3RhcnQsIHN0ci5sZW5ndGgpKTtcbiAgfVxuXG4gIHJldHVybiBidWZmZXIuam9pbihcIlwiKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVDU1NGb250KGNzc0ZvbnRJbmZvKSB7XG4gIGNvbnN0IERFRkFVTFRfQ1NTX0ZPTlRfT0JMSVFVRSA9IFwiMTRcIjtcbiAgY29uc3QgREVGQVVMVF9DU1NfRk9OVF9XRUlHSFQgPSBcIjQwMFwiO1xuICBjb25zdCBDU1NfRk9OVF9XRUlHSFRfVkFMVUVTID0gbmV3IFNldChbXCIxMDBcIiwgXCIyMDBcIiwgXCIzMDBcIiwgXCI0MDBcIiwgXCI1MDBcIiwgXCI2MDBcIiwgXCI3MDBcIiwgXCI4MDBcIiwgXCI5MDBcIiwgXCIxMDAwXCIsIFwibm9ybWFsXCIsIFwiYm9sZFwiLCBcImJvbGRlclwiLCBcImxpZ2h0ZXJcIl0pO1xuICBjb25zdCB7XG4gICAgZm9udEZhbWlseSxcbiAgICBmb250V2VpZ2h0LFxuICAgIGl0YWxpY0FuZ2xlXG4gIH0gPSBjc3NGb250SW5mbztcblxuICBpZiAoL15cIi4qXCIkLy50ZXN0KGZvbnRGYW1pbHkpKSB7XG4gICAgaWYgKC9bXlxcXFxdXCIvLnRlc3QoZm9udEZhbWlseS5zbGljZSgxLCBmb250RmFtaWx5Lmxlbmd0aCAtIDEpKSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBGb250RmFtaWx5IGNvbnRhaW5zIHNvbWUgdW5lc2NhcGVkIFwiOiAke2ZvbnRGYW1pbHl9LmApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBlbHNlIGlmICgvXicuKickLy50ZXN0KGZvbnRGYW1pbHkpKSB7XG4gICAgaWYgKC9bXlxcXFxdJy8udGVzdChmb250RmFtaWx5LnNsaWNlKDEsIGZvbnRGYW1pbHkubGVuZ3RoIC0gMSkpKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoYFhGQSAtIEZvbnRGYW1pbHkgY29udGFpbnMgc29tZSB1bmVzY2FwZWQgJzogJHtmb250RmFtaWx5fS5gKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChjb25zdCBpZGVudCBvZiBmb250RmFtaWx5LnNwbGl0KC9bIFxcdF0rLykpIHtcbiAgICAgIGlmICgvXihcXGR8KC0oXFxkfC0pKSkvLnRlc3QoaWRlbnQpIHx8ICEvXltcXHctXFxcXF0rJC8udGVzdChpZGVudCkpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBGb250RmFtaWx5IGNvbnRhaW5zIHNvbWUgaW52YWxpZCA8Y3VzdG9tLWlkZW50PjogJHtmb250RmFtaWx5fS5gKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHdlaWdodCA9IGZvbnRXZWlnaHQgPyBmb250V2VpZ2h0LnRvU3RyaW5nKCkgOiBcIlwiO1xuICBjc3NGb250SW5mby5mb250V2VpZ2h0ID0gQ1NTX0ZPTlRfV0VJR0hUX1ZBTFVFUy5oYXMod2VpZ2h0KSA/IHdlaWdodCA6IERFRkFVTFRfQ1NTX0ZPTlRfV0VJR0hUO1xuICBjb25zdCBhbmdsZSA9IHBhcnNlRmxvYXQoaXRhbGljQW5nbGUpO1xuICBjc3NGb250SW5mby5pdGFsaWNBbmdsZSA9IGlzTmFOKGFuZ2xlKSB8fCBhbmdsZSA8IC05MCB8fCBhbmdsZSA+IDkwID8gREVGQVVMVF9DU1NfRk9OVF9PQkxJUVVFIDogaXRhbGljQW5nbGUudG9TdHJpbmcoKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlY292ZXJKc1VSTChzdHIpIHtcbiAgY29uc3QgVVJMX09QRU5fTUVUSE9EUyA9IFtcImFwcC5sYXVuY2hVUkxcIiwgXCJ3aW5kb3cub3BlblwiLCBcInhmYS5ob3N0LmdvdG9VUkxcIl07XG4gIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChcIl5cXFxccyooXCIgKyBVUkxfT1BFTl9NRVRIT0RTLmpvaW4oXCJ8XCIpLnNwbGl0KFwiLlwiKS5qb2luKFwiXFxcXC5cIikgKyBcIilcXFxcKCg/Oid8XFxcIikoW14nXFxcIl0qKSg/Oid8XFxcIikoPzosXFxcXHMqKFxcXFx3KylcXFxcKXxcXFxcKSlcIiwgXCJpXCIpO1xuICBjb25zdCBqc1VybCA9IHJlZ2V4LmV4ZWMoc3RyKTtcblxuICBpZiAoanNVcmwgJiYganNVcmxbMl0pIHtcbiAgICBjb25zdCB1cmwgPSBqc1VybFsyXTtcbiAgICBsZXQgbmV3V2luZG93ID0gZmFsc2U7XG5cbiAgICBpZiAoanNVcmxbM10gPT09IFwidHJ1ZVwiICYmIGpzVXJsWzFdID09PSBcImFwcC5sYXVuY2hVUkxcIikge1xuICAgICAgbmV3V2luZG93ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdXJsLFxuICAgICAgbmV3V2luZG93XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKioqLyB9KSxcbi8qIDEwICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlN0cmluZ1N0cmVhbSA9IGV4cG9ydHMuU3RyZWFtID0gZXhwb3J0cy5OdWxsU3RyZWFtID0gdm9pZCAwO1xuXG52YXIgX2Jhc2Vfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXyg2KTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuY2xhc3MgU3RyZWFtIGV4dGVuZHMgX2Jhc2Vfc3RyZWFtLkJhc2VTdHJlYW0ge1xuICBjb25zdHJ1Y3RvcihhcnJheUJ1ZmZlciwgc3RhcnQsIGxlbmd0aCwgZGljdCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5ieXRlcyA9IGFycmF5QnVmZmVyIGluc3RhbmNlb2YgVWludDhBcnJheSA/IGFycmF5QnVmZmVyIDogbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydCB8fCAwO1xuICAgIHRoaXMucG9zID0gdGhpcy5zdGFydDtcbiAgICB0aGlzLmVuZCA9IHN0YXJ0ICsgbGVuZ3RoIHx8IHRoaXMuYnl0ZXMubGVuZ3RoO1xuICAgIHRoaXMuZGljdCA9IGRpY3Q7XG4gIH1cblxuICBnZXQgbGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLmVuZCAtIHRoaXMuc3RhcnQ7XG4gIH1cblxuICBnZXQgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5sZW5ndGggPT09IDA7XG4gIH1cblxuICBnZXRCeXRlKCkge1xuICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmVuZCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmJ5dGVzW3RoaXMucG9zKytdO1xuICB9XG5cbiAgZ2V0Qnl0ZXMobGVuZ3RoLCBmb3JjZUNsYW1wZWQgPSBmYWxzZSkge1xuICAgIGNvbnN0IGJ5dGVzID0gdGhpcy5ieXRlcztcbiAgICBjb25zdCBwb3MgPSB0aGlzLnBvcztcbiAgICBjb25zdCBzdHJFbmQgPSB0aGlzLmVuZDtcblxuICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdWJhcnJheSA9IGJ5dGVzLnN1YmFycmF5KHBvcywgc3RyRW5kKTtcbiAgICAgIHJldHVybiBmb3JjZUNsYW1wZWQgPyBuZXcgVWludDhDbGFtcGVkQXJyYXkoc3ViYXJyYXkpIDogc3ViYXJyYXk7XG4gICAgfVxuXG4gICAgbGV0IGVuZCA9IHBvcyArIGxlbmd0aDtcblxuICAgIGlmIChlbmQgPiBzdHJFbmQpIHtcbiAgICAgIGVuZCA9IHN0ckVuZDtcbiAgICB9XG5cbiAgICB0aGlzLnBvcyA9IGVuZDtcbiAgICBjb25zdCBzdWJhcnJheSA9IGJ5dGVzLnN1YmFycmF5KHBvcywgZW5kKTtcbiAgICByZXR1cm4gZm9yY2VDbGFtcGVkID8gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHN1YmFycmF5KSA6IHN1YmFycmF5O1xuICB9XG5cbiAgZ2V0Qnl0ZVJhbmdlKGJlZ2luLCBlbmQpIHtcbiAgICBpZiAoYmVnaW4gPCAwKSB7XG4gICAgICBiZWdpbiA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGVuZCA+IHRoaXMuZW5kKSB7XG4gICAgICBlbmQgPSB0aGlzLmVuZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5ieXRlcy5zdWJhcnJheShiZWdpbiwgZW5kKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMucG9zID0gdGhpcy5zdGFydDtcbiAgfVxuXG4gIG1vdmVTdGFydCgpIHtcbiAgICB0aGlzLnN0YXJ0ID0gdGhpcy5wb3M7XG4gIH1cblxuICBtYWtlU3ViU3RyZWFtKHN0YXJ0LCBsZW5ndGgsIGRpY3QgPSBudWxsKSB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW0odGhpcy5ieXRlcy5idWZmZXIsIHN0YXJ0LCBsZW5ndGgsIGRpY3QpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5TdHJlYW0gPSBTdHJlYW07XG5cbmNsYXNzIFN0cmluZ1N0cmVhbSBleHRlbmRzIFN0cmVhbSB7XG4gIGNvbnN0cnVjdG9yKHN0cikge1xuICAgIHN1cGVyKCgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShzdHIpKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuU3RyaW5nU3RyZWFtID0gU3RyaW5nU3RyZWFtO1xuXG5jbGFzcyBOdWxsU3RyZWFtIGV4dGVuZHMgU3RyZWFtIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIobmV3IFVpbnQ4QXJyYXkoMCkpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5OdWxsU3RyZWFtID0gTnVsbFN0cmVhbTtcblxuLyoqKi8gfSksXG4vKiAxMSAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5QYWdlID0gZXhwb3J0cy5QREZEb2N1bWVudCA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg5KTtcblxudmFyIF94ZmFfZm9udHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEyKTtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEwKTtcblxudmFyIF9hbm5vdGF0aW9uID0gX193X3BkZmpzX3JlcXVpcmVfXygyMik7XG5cbnZhciBfYmFzZV9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDYpO1xuXG52YXIgX2NyeXB0byA9IF9fd19wZGZqc19yZXF1aXJlX18oNzIpO1xuXG52YXIgX2NhdGFsb2cgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDY0KTtcblxudmFyIF9wYXJzZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI3KTtcblxudmFyIF9vYmplY3RfbG9hZGVyID0gX193X3BkZmpzX3JlcXVpcmVfXyg3MCk7XG5cbnZhciBfb3BlcmF0b3JfbGlzdCA9IF9fd19wZGZqc19yZXF1aXJlX18oNjIpO1xuXG52YXIgX2V2YWx1YXRvciA9IF9fd19wZGZqc19yZXF1aXJlX18oMjUpO1xuXG52YXIgX2RlY29kZV9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI5KTtcblxudmFyIF9zdHJ1Y3RfdHJlZSA9IF9fd19wZGZqc19yZXF1aXJlX18oNjkpO1xuXG52YXIgX2ZhY3RvcnkgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc0KTtcblxudmFyIF94cmVmID0gX193X3BkZmpzX3JlcXVpcmVfXyg5OCk7XG5cbmNvbnN0IERFRkFVTFRfVVNFUl9VTklUID0gMS4wO1xuY29uc3QgTEVUVEVSX1NJWkVfTUVESUFCT1ggPSBbMCwgMCwgNjEyLCA3OTJdO1xuXG5jbGFzcyBQYWdlIHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIHBkZk1hbmFnZXIsXG4gICAgeHJlZixcbiAgICBwYWdlSW5kZXgsXG4gICAgcGFnZURpY3QsXG4gICAgcmVmLFxuICAgIGdsb2JhbElkRmFjdG9yeSxcbiAgICBmb250Q2FjaGUsXG4gICAgYnVpbHRJbkNNYXBDYWNoZSxcbiAgICBzdGFuZGFyZEZvbnREYXRhQ2FjaGUsXG4gICAgZ2xvYmFsSW1hZ2VDYWNoZSxcbiAgICBub25CbGVuZE1vZGVzU2V0LFxuICAgIHhmYUZhY3RvcnlcbiAgfSkge1xuICAgIHRoaXMucGRmTWFuYWdlciA9IHBkZk1hbmFnZXI7XG4gICAgdGhpcy5wYWdlSW5kZXggPSBwYWdlSW5kZXg7XG4gICAgdGhpcy5wYWdlRGljdCA9IHBhZ2VEaWN0O1xuICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgdGhpcy5yZWYgPSByZWY7XG4gICAgdGhpcy5mb250Q2FjaGUgPSBmb250Q2FjaGU7XG4gICAgdGhpcy5idWlsdEluQ01hcENhY2hlID0gYnVpbHRJbkNNYXBDYWNoZTtcbiAgICB0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZSA9IHN0YW5kYXJkRm9udERhdGFDYWNoZTtcbiAgICB0aGlzLmdsb2JhbEltYWdlQ2FjaGUgPSBnbG9iYWxJbWFnZUNhY2hlO1xuICAgIHRoaXMubm9uQmxlbmRNb2Rlc1NldCA9IG5vbkJsZW5kTW9kZXNTZXQ7XG4gICAgdGhpcy5ldmFsdWF0b3JPcHRpb25zID0gcGRmTWFuYWdlci5ldmFsdWF0b3JPcHRpb25zO1xuICAgIHRoaXMucmVzb3VyY2VzUHJvbWlzZSA9IG51bGw7XG4gICAgdGhpcy54ZmFGYWN0b3J5ID0geGZhRmFjdG9yeTtcbiAgICBjb25zdCBpZENvdW50ZXJzID0ge1xuICAgICAgb2JqOiAwXG4gICAgfTtcbiAgICB0aGlzLl9sb2NhbElkRmFjdG9yeSA9IGNsYXNzIGV4dGVuZHMgZ2xvYmFsSWRGYWN0b3J5IHtcbiAgICAgIHN0YXRpYyBjcmVhdGVPYmpJZCgpIHtcbiAgICAgICAgcmV0dXJuIGBwJHtwYWdlSW5kZXh9XyR7KytpZENvdW50ZXJzLm9ian1gO1xuICAgICAgfVxuXG4gICAgICBzdGF0aWMgZ2V0UGFnZU9iaklkKCkge1xuICAgICAgICByZXR1cm4gYHBhZ2Uke3JlZi50b1N0cmluZygpfWA7XG4gICAgICB9XG5cbiAgICB9O1xuICB9XG5cbiAgX2dldEluaGVyaXRhYmxlUHJvcGVydHkoa2V5LCBnZXRBcnJheSA9IGZhbHNlKSB7XG4gICAgY29uc3QgdmFsdWUgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe1xuICAgICAgZGljdDogdGhpcy5wYWdlRGljdCxcbiAgICAgIGtleSxcbiAgICAgIGdldEFycmF5LFxuICAgICAgc3RvcFdoZW5Gb3VuZDogZmFsc2VcbiAgICB9KTtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAxIHx8ICEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KSh2YWx1ZVswXSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZVswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3ByaW1pdGl2ZXMuRGljdC5tZXJnZSh7XG4gICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICBkaWN0QXJyYXk6IHZhbHVlXG4gICAgfSk7XG4gIH1cblxuICBnZXQgY29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlRGljdC5nZXRBcnJheShcIkNvbnRlbnRzXCIpO1xuICB9XG5cbiAgZ2V0IHJlc291cmNlcygpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJyZXNvdXJjZXNcIiwgdGhpcy5fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eShcIlJlc291cmNlc1wiKSB8fCBfcHJpbWl0aXZlcy5EaWN0LmVtcHR5KTtcbiAgfVxuXG4gIF9nZXRCb3VuZGluZ0JveChuYW1lKSB7XG4gICAgaWYgKHRoaXMueGZhRGF0YSkge1xuICAgICAgcmV0dXJuIHRoaXMueGZhRGF0YS5iYm94O1xuICAgIH1cblxuICAgIGNvbnN0IGJveCA9IHRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkobmFtZSwgdHJ1ZSk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShib3gpICYmIGJveC5sZW5ndGggPT09IDQpIHtcbiAgICAgIGlmIChib3hbMl0gLSBib3hbMF0gIT09IDAgJiYgYm94WzNdIC0gYm94WzFdICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBib3g7XG4gICAgICB9XG5cbiAgICAgICgwLCBfdXRpbC53YXJuKShgRW1wdHkgLyR7bmFtZX0gZW50cnkuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgbWVkaWFCb3goKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwibWVkaWFCb3hcIiwgdGhpcy5fZ2V0Qm91bmRpbmdCb3goXCJNZWRpYUJveFwiKSB8fCBMRVRURVJfU0laRV9NRURJQUJPWCk7XG4gIH1cblxuICBnZXQgY3JvcEJveCgpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJjcm9wQm94XCIsIHRoaXMuX2dldEJvdW5kaW5nQm94KFwiQ3JvcEJveFwiKSB8fCB0aGlzLm1lZGlhQm94KTtcbiAgfVxuXG4gIGdldCB1c2VyVW5pdCgpIHtcbiAgICBsZXQgb2JqID0gdGhpcy5wYWdlRGljdC5nZXQoXCJVc2VyVW5pdFwiKTtcblxuICAgIGlmICghKDAsIF91dGlsLmlzTnVtKShvYmopIHx8IG9iaiA8PSAwKSB7XG4gICAgICBvYmogPSBERUZBVUxUX1VTRVJfVU5JVDtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJ1c2VyVW5pdFwiLCBvYmopO1xuICB9XG5cbiAgZ2V0IHZpZXcoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY3JvcEJveCxcbiAgICAgIG1lZGlhQm94XG4gICAgfSA9IHRoaXM7XG4gICAgbGV0IHZpZXc7XG5cbiAgICBpZiAoY3JvcEJveCA9PT0gbWVkaWFCb3ggfHwgKDAsIF91dGlsLmlzQXJyYXlFcXVhbCkoY3JvcEJveCwgbWVkaWFCb3gpKSB7XG4gICAgICB2aWV3ID0gbWVkaWFCb3g7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJveCA9IF91dGlsLlV0aWwuaW50ZXJzZWN0KGNyb3BCb3gsIG1lZGlhQm94KTtcblxuICAgICAgaWYgKGJveCAmJiBib3hbMl0gLSBib3hbMF0gIT09IDAgJiYgYm94WzNdIC0gYm94WzFdICE9PSAwKSB7XG4gICAgICAgIHZpZXcgPSBib3g7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJFbXB0eSAvQ3JvcEJveCBhbmQgL01lZGlhQm94IGludGVyc2VjdGlvbi5cIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwidmlld1wiLCB2aWV3IHx8IG1lZGlhQm94KTtcbiAgfVxuXG4gIGdldCByb3RhdGUoKSB7XG4gICAgbGV0IHJvdGF0ZSA9IHRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoXCJSb3RhdGVcIikgfHwgMDtcblxuICAgIGlmIChyb3RhdGUgJSA5MCAhPT0gMCkge1xuICAgICAgcm90YXRlID0gMDtcbiAgICB9IGVsc2UgaWYgKHJvdGF0ZSA+PSAzNjApIHtcbiAgICAgIHJvdGF0ZSAlPSAzNjA7XG4gICAgfSBlbHNlIGlmIChyb3RhdGUgPCAwKSB7XG4gICAgICByb3RhdGUgPSAocm90YXRlICUgMzYwICsgMzYwKSAlIDM2MDtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJyb3RhdGVcIiwgcm90YXRlKTtcbiAgfVxuXG4gIF9vblN1YlN0cmVhbUVycm9yKGhhbmRsZXIsIHJlYXNvbiwgb2JqSWQpIHtcbiAgICBpZiAodGhpcy5ldmFsdWF0b3JPcHRpb25zLmlnbm9yZUVycm9ycykge1xuICAgICAgaGFuZGxlci5zZW5kKFwiVW5zdXBwb3J0ZWRGZWF0dXJlXCIsIHtcbiAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckNvbnRlbnRTdWJTdHJlYW1cbiAgICAgIH0pO1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBnZXRDb250ZW50U3RyZWFtIC0gaWdub3Jpbmcgc3ViLXN0cmVhbSAoJHtvYmpJZH0pOiBcIiR7cmVhc29ufVwiLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRocm93IHJlYXNvbjtcbiAgfVxuXG4gIGdldENvbnRlbnRTdHJlYW0oaGFuZGxlcikge1xuICAgIHJldHVybiB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsIFwiY29udGVudFwiKS50aGVuKGNvbnRlbnQgPT4ge1xuICAgICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBfYmFzZV9zdHJlYW0uQmFzZVN0cmVhbSkge1xuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29udGVudCkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfZGVjb2RlX3N0cmVhbS5TdHJlYW1zU2VxdWVuY2VTdHJlYW0oY29udGVudCwgdGhpcy5fb25TdWJTdHJlYW1FcnJvci5iaW5kKHRoaXMsIGhhbmRsZXIpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBfc3RyZWFtLk51bGxTdHJlYW0oKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCB4ZmFEYXRhKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInhmYURhdGFcIiwgdGhpcy54ZmFGYWN0b3J5ID8ge1xuICAgICAgYmJveDogdGhpcy54ZmFGYWN0b3J5LmdldEJvdW5kaW5nQm94KHRoaXMucGFnZUluZGV4KVxuICAgIH0gOiBudWxsKTtcbiAgfVxuXG4gIHNhdmUoaGFuZGxlciwgdGFzaywgYW5ub3RhdGlvblN0b3JhZ2UpIHtcbiAgICBjb25zdCBwYXJ0aWFsRXZhbHVhdG9yID0gbmV3IF9ldmFsdWF0b3IuUGFydGlhbEV2YWx1YXRvcih7XG4gICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICBoYW5kbGVyLFxuICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCxcbiAgICAgIGlkRmFjdG9yeTogdGhpcy5fbG9jYWxJZEZhY3RvcnksXG4gICAgICBmb250Q2FjaGU6IHRoaXMuZm9udENhY2hlLFxuICAgICAgYnVpbHRJbkNNYXBDYWNoZTogdGhpcy5idWlsdEluQ01hcENhY2hlLFxuICAgICAgc3RhbmRhcmRGb250RGF0YUNhY2hlOiB0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZSxcbiAgICAgIGdsb2JhbEltYWdlQ2FjaGU6IHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMuZXZhbHVhdG9yT3B0aW9uc1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl9wYXJzZWRBbm5vdGF0aW9ucy50aGVuKGZ1bmN0aW9uIChhbm5vdGF0aW9ucykge1xuICAgICAgY29uc3QgbmV3UmVmc1Byb21pc2VzID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgYW5ub3RhdGlvbiBvZiBhbm5vdGF0aW9ucykge1xuICAgICAgICBpZiAoIWFubm90YXRpb24ubXVzdEJlUHJpbnRlZChhbm5vdGF0aW9uU3RvcmFnZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5ld1JlZnNQcm9taXNlcy5wdXNoKGFubm90YXRpb24uc2F2ZShwYXJ0aWFsRXZhbHVhdG9yLCB0YXNrLCBhbm5vdGF0aW9uU3RvcmFnZSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcInNhdmUgLSBpZ25vcmluZyBhbm5vdGF0aW9uIGRhdGEgZHVyaW5nIFwiICsgYFwiJHt0YXNrLm5hbWV9XCIgdGFzazogXCIke3JlYXNvbn1cIi5gKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwobmV3UmVmc1Byb21pc2VzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRSZXNvdXJjZXMoa2V5cykge1xuICAgIGlmICghdGhpcy5yZXNvdXJjZXNQcm9taXNlKSB7XG4gICAgICB0aGlzLnJlc291cmNlc1Byb21pc2UgPSB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsIFwicmVzb3VyY2VzXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlc291cmNlc1Byb21pc2UudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBvYmplY3RMb2FkZXIgPSBuZXcgX29iamVjdF9sb2FkZXIuT2JqZWN0TG9hZGVyKHRoaXMucmVzb3VyY2VzLCBrZXlzLCB0aGlzLnhyZWYpO1xuICAgICAgcmV0dXJuIG9iamVjdExvYWRlci5sb2FkKCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRPcGVyYXRvckxpc3Qoe1xuICAgIGhhbmRsZXIsXG4gICAgc2luayxcbiAgICB0YXNrLFxuICAgIGludGVudCxcbiAgICBjYWNoZUtleSxcbiAgICBhbm5vdGF0aW9uU3RvcmFnZSA9IG51bGxcbiAgfSkge1xuICAgIGNvbnN0IGNvbnRlbnRTdHJlYW1Qcm9taXNlID0gdGhpcy5nZXRDb250ZW50U3RyZWFtKGhhbmRsZXIpO1xuICAgIGNvbnN0IHJlc291cmNlc1Byb21pc2UgPSB0aGlzLmxvYWRSZXNvdXJjZXMoW1wiQ29sb3JTcGFjZVwiLCBcIkV4dEdTdGF0ZVwiLCBcIkZvbnRcIiwgXCJQYXR0ZXJuXCIsIFwiUHJvcGVydGllc1wiLCBcIlNoYWRpbmdcIiwgXCJYT2JqZWN0XCJdKTtcbiAgICBjb25zdCBwYXJ0aWFsRXZhbHVhdG9yID0gbmV3IF9ldmFsdWF0b3IuUGFydGlhbEV2YWx1YXRvcih7XG4gICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICBoYW5kbGVyLFxuICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCxcbiAgICAgIGlkRmFjdG9yeTogdGhpcy5fbG9jYWxJZEZhY3RvcnksXG4gICAgICBmb250Q2FjaGU6IHRoaXMuZm9udENhY2hlLFxuICAgICAgYnVpbHRJbkNNYXBDYWNoZTogdGhpcy5idWlsdEluQ01hcENhY2hlLFxuICAgICAgc3RhbmRhcmRGb250RGF0YUNhY2hlOiB0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZSxcbiAgICAgIGdsb2JhbEltYWdlQ2FjaGU6IHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMuZXZhbHVhdG9yT3B0aW9uc1xuICAgIH0pO1xuICAgIGNvbnN0IGRhdGFQcm9taXNlcyA9IFByb21pc2UuYWxsKFtjb250ZW50U3RyZWFtUHJvbWlzZSwgcmVzb3VyY2VzUHJvbWlzZV0pO1xuICAgIGNvbnN0IHBhZ2VMaXN0UHJvbWlzZSA9IGRhdGFQcm9taXNlcy50aGVuKChbY29udGVudFN0cmVhbV0pID0+IHtcbiAgICAgIGNvbnN0IG9wTGlzdCA9IG5ldyBfb3BlcmF0b3JfbGlzdC5PcGVyYXRvckxpc3QoaW50ZW50LCBzaW5rKTtcbiAgICAgIGhhbmRsZXIuc2VuZChcIlN0YXJ0UmVuZGVyUGFnZVwiLCB7XG4gICAgICAgIHRyYW5zcGFyZW5jeTogcGFydGlhbEV2YWx1YXRvci5oYXNCbGVuZE1vZGVzKHRoaXMucmVzb3VyY2VzLCB0aGlzLm5vbkJsZW5kTW9kZXNTZXQpLFxuICAgICAgICBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LFxuICAgICAgICBjYWNoZUtleVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcGFydGlhbEV2YWx1YXRvci5nZXRPcGVyYXRvckxpc3Qoe1xuICAgICAgICBzdHJlYW06IGNvbnRlbnRTdHJlYW0sXG4gICAgICAgIHRhc2ssXG4gICAgICAgIHJlc291cmNlczogdGhpcy5yZXNvdXJjZXMsXG4gICAgICAgIG9wZXJhdG9yTGlzdDogb3BMaXN0XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG9wTGlzdDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChbcGFnZUxpc3RQcm9taXNlLCB0aGlzLl9wYXJzZWRBbm5vdGF0aW9uc10pLnRoZW4oZnVuY3Rpb24gKFtwYWdlT3BMaXN0LCBhbm5vdGF0aW9uc10pIHtcbiAgICAgIGlmIChhbm5vdGF0aW9ucy5sZW5ndGggPT09IDAgfHwgaW50ZW50ICYgX3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19ESVNBQkxFKSB7XG4gICAgICAgIHBhZ2VPcExpc3QuZmx1c2godHJ1ZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGVuZ3RoOiBwYWdlT3BMaXN0LnRvdGFsTGVuZ3RoXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbmRlckZvcm1zID0gISEoaW50ZW50ICYgX3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19GT1JNUyksXG4gICAgICAgICAgICBpbnRlbnRBbnkgPSAhIShpbnRlbnQgJiBfdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLkFOWSksXG4gICAgICAgICAgICBpbnRlbnREaXNwbGF5ID0gISEoaW50ZW50ICYgX3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5ESVNQTEFZKSxcbiAgICAgICAgICAgIGludGVudFByaW50ID0gISEoaW50ZW50ICYgX3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5QUklOVCk7XG4gICAgICBjb25zdCBvcExpc3RQcm9taXNlcyA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFubm90YXRpb24gb2YgYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgaWYgKGludGVudEFueSB8fCBpbnRlbnREaXNwbGF5ICYmIGFubm90YXRpb24ubXVzdEJlVmlld2VkKGFubm90YXRpb25TdG9yYWdlKSB8fCBpbnRlbnRQcmludCAmJiBhbm5vdGF0aW9uLm11c3RCZVByaW50ZWQoYW5ub3RhdGlvblN0b3JhZ2UpKSB7XG4gICAgICAgICAgb3BMaXN0UHJvbWlzZXMucHVzaChhbm5vdGF0aW9uLmdldE9wZXJhdG9yTGlzdChwYXJ0aWFsRXZhbHVhdG9yLCB0YXNrLCBpbnRlbnQsIHJlbmRlckZvcm1zLCBhbm5vdGF0aW9uU3RvcmFnZSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgYW5ub3RhdGlvbiBkYXRhIGR1cmluZyBcIiArIGBcIiR7dGFzay5uYW1lfVwiIHRhc2s6IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKG9wTGlzdFByb21pc2VzKS50aGVuKGZ1bmN0aW9uIChvcExpc3RzKSB7XG4gICAgICAgIHBhZ2VPcExpc3QuYWRkT3AoX3V0aWwuT1BTLmJlZ2luQW5ub3RhdGlvbnMsIFtdKTtcblxuICAgICAgICBmb3IgKGNvbnN0IG9wTGlzdCBvZiBvcExpc3RzKSB7XG4gICAgICAgICAgcGFnZU9wTGlzdC5hZGRPcExpc3Qob3BMaXN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhZ2VPcExpc3QuYWRkT3AoX3V0aWwuT1BTLmVuZEFubm90YXRpb25zLCBbXSk7XG4gICAgICAgIHBhZ2VPcExpc3QuZmx1c2godHJ1ZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGVuZ3RoOiBwYWdlT3BMaXN0LnRvdGFsTGVuZ3RoXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGV4dHJhY3RUZXh0Q29udGVudCh7XG4gICAgaGFuZGxlcixcbiAgICB0YXNrLFxuICAgIG5vcm1hbGl6ZVdoaXRlc3BhY2UsXG4gICAgaW5jbHVkZU1hcmtlZENvbnRlbnQsXG4gICAgc2luayxcbiAgICBjb21iaW5lVGV4dEl0ZW1zXG4gIH0pIHtcbiAgICBjb25zdCBjb250ZW50U3RyZWFtUHJvbWlzZSA9IHRoaXMuZ2V0Q29udGVudFN0cmVhbShoYW5kbGVyKTtcbiAgICBjb25zdCByZXNvdXJjZXNQcm9taXNlID0gdGhpcy5sb2FkUmVzb3VyY2VzKFtcIkV4dEdTdGF0ZVwiLCBcIkZvbnRcIiwgXCJQcm9wZXJ0aWVzXCIsIFwiWE9iamVjdFwiXSk7XG4gICAgY29uc3QgZGF0YVByb21pc2VzID0gUHJvbWlzZS5hbGwoW2NvbnRlbnRTdHJlYW1Qcm9taXNlLCByZXNvdXJjZXNQcm9taXNlXSk7XG4gICAgcmV0dXJuIGRhdGFQcm9taXNlcy50aGVuKChbY29udGVudFN0cmVhbV0pID0+IHtcbiAgICAgIGNvbnN0IHBhcnRpYWxFdmFsdWF0b3IgPSBuZXcgX2V2YWx1YXRvci5QYXJ0aWFsRXZhbHVhdG9yKHtcbiAgICAgICAgeHJlZjogdGhpcy54cmVmLFxuICAgICAgICBoYW5kbGVyLFxuICAgICAgICBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LFxuICAgICAgICBpZEZhY3Rvcnk6IHRoaXMuX2xvY2FsSWRGYWN0b3J5LFxuICAgICAgICBmb250Q2FjaGU6IHRoaXMuZm9udENhY2hlLFxuICAgICAgICBidWlsdEluQ01hcENhY2hlOiB0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsXG4gICAgICAgIHN0YW5kYXJkRm9udERhdGFDYWNoZTogdGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsXG4gICAgICAgIGdsb2JhbEltYWdlQ2FjaGU6IHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZSxcbiAgICAgICAgb3B0aW9uczogdGhpcy5ldmFsdWF0b3JPcHRpb25zXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBwYXJ0aWFsRXZhbHVhdG9yLmdldFRleHRDb250ZW50KHtcbiAgICAgICAgc3RyZWFtOiBjb250ZW50U3RyZWFtLFxuICAgICAgICB0YXNrLFxuICAgICAgICByZXNvdXJjZXM6IHRoaXMucmVzb3VyY2VzLFxuICAgICAgICBub3JtYWxpemVXaGl0ZXNwYWNlLFxuICAgICAgICBpbmNsdWRlTWFya2VkQ29udGVudCxcbiAgICAgICAgY29tYmluZVRleHRJdGVtcyxcbiAgICAgICAgc2lua1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRTdHJ1Y3RUcmVlKCkge1xuICAgIGNvbnN0IHN0cnVjdFRyZWVSb290ID0gYXdhaXQgdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coXCJzdHJ1Y3RUcmVlUm9vdFwiKTtcblxuICAgIGlmICghc3RydWN0VHJlZVJvb3QpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHN0cnVjdFRyZWUgPSBhd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsIFwiX3BhcnNlU3RydWN0VHJlZVwiLCBbc3RydWN0VHJlZVJvb3RdKTtcbiAgICByZXR1cm4gc3RydWN0VHJlZS5zZXJpYWxpemFibGU7XG4gIH1cblxuICBfcGFyc2VTdHJ1Y3RUcmVlKHN0cnVjdFRyZWVSb290KSB7XG4gICAgY29uc3QgdHJlZSA9IG5ldyBfc3RydWN0X3RyZWUuU3RydWN0VHJlZVBhZ2Uoc3RydWN0VHJlZVJvb3QsIHRoaXMucGFnZURpY3QpO1xuICAgIHRyZWUucGFyc2UoKTtcbiAgICByZXR1cm4gdHJlZTtcbiAgfVxuXG4gIGdldEFubm90YXRpb25zRGF0YShpbnRlbnQpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyc2VkQW5ub3RhdGlvbnMudGhlbihmdW5jdGlvbiAoYW5ub3RhdGlvbnMpIHtcbiAgICAgIGNvbnN0IGFubm90YXRpb25zRGF0YSA9IFtdO1xuXG4gICAgICBpZiAoYW5ub3RhdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBhbm5vdGF0aW9uc0RhdGE7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGludGVudEFueSA9ICEhKGludGVudCAmIF91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuQU5ZKSxcbiAgICAgICAgICAgIGludGVudERpc3BsYXkgPSAhIShpbnRlbnQgJiBfdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLkRJU1BMQVkpLFxuICAgICAgICAgICAgaW50ZW50UHJpbnQgPSAhIShpbnRlbnQgJiBfdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLlBSSU5UKTtcblxuICAgICAgZm9yIChjb25zdCBhbm5vdGF0aW9uIG9mIGFubm90YXRpb25zKSB7XG4gICAgICAgIGlmIChpbnRlbnRBbnkgfHwgaW50ZW50RGlzcGxheSAmJiBhbm5vdGF0aW9uLnZpZXdhYmxlIHx8IGludGVudFByaW50ICYmIGFubm90YXRpb24ucHJpbnRhYmxlKSB7XG4gICAgICAgICAgYW5ub3RhdGlvbnNEYXRhLnB1c2goYW5ub3RhdGlvbi5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYW5ub3RhdGlvbnNEYXRhO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGFubm90YXRpb25zKCkge1xuICAgIGNvbnN0IGFubm90cyA9IHRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoXCJBbm5vdHNcIik7XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJhbm5vdGF0aW9uc1wiLCBBcnJheS5pc0FycmF5KGFubm90cykgPyBhbm5vdHMgOiBbXSk7XG4gIH1cblxuICBnZXQgX3BhcnNlZEFubm90YXRpb25zKCkge1xuICAgIGNvbnN0IHBhcnNlZEFubm90YXRpb25zID0gdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCBcImFubm90YXRpb25zXCIpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgYW5ub3RhdGlvblByb21pc2VzID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgYW5ub3RhdGlvblJlZiBvZiB0aGlzLmFubm90YXRpb25zKSB7XG4gICAgICAgIGFubm90YXRpb25Qcm9taXNlcy5wdXNoKF9hbm5vdGF0aW9uLkFubm90YXRpb25GYWN0b3J5LmNyZWF0ZSh0aGlzLnhyZWYsIGFubm90YXRpb25SZWYsIHRoaXMucGRmTWFuYWdlciwgdGhpcy5fbG9jYWxJZEZhY3RvcnksIGZhbHNlKS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBfcGFyc2VkQW5ub3RhdGlvbnM6IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGFubm90YXRpb25Qcm9taXNlcykudGhlbihmdW5jdGlvbiAoYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGFubm90YXRpb25zLmZpbHRlcihhbm5vdGF0aW9uID0+ICEhYW5ub3RhdGlvbik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJfcGFyc2VkQW5ub3RhdGlvbnNcIiwgcGFyc2VkQW5ub3RhdGlvbnMpO1xuICB9XG5cbiAgZ2V0IGpzQWN0aW9ucygpIHtcbiAgICBjb25zdCBhY3Rpb25zID0gKDAsIF9jb3JlX3V0aWxzLmNvbGxlY3RBY3Rpb25zKSh0aGlzLnhyZWYsIHRoaXMucGFnZURpY3QsIF91dGlsLlBhZ2VBY3Rpb25FdmVudFR5cGUpO1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImpzQWN0aW9uc1wiLCBhY3Rpb25zKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUGFnZSA9IFBhZ2U7XG5jb25zdCBQREZfSEVBREVSX1NJR05BVFVSRSA9IG5ldyBVaW50OEFycmF5KFsweDI1LCAweDUwLCAweDQ0LCAweDQ2LCAweDJkXSk7XG5jb25zdCBTVEFSVFhSRUZfU0lHTkFUVVJFID0gbmV3IFVpbnQ4QXJyYXkoWzB4NzMsIDB4NzQsIDB4NjEsIDB4NzIsIDB4NzQsIDB4NzgsIDB4NzIsIDB4NjUsIDB4NjZdKTtcbmNvbnN0IEVORE9CSl9TSUdOQVRVUkUgPSBuZXcgVWludDhBcnJheShbMHg2NSwgMHg2ZSwgMHg2NCwgMHg2ZiwgMHg2MiwgMHg2YV0pO1xuY29uc3QgRklOR0VSUFJJTlRfRklSU1RfQllURVMgPSAxMDI0O1xuY29uc3QgRU1QVFlfRklOR0VSUFJJTlQgPSBcIlxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXCI7XG5jb25zdCBQREZfSEVBREVSX1ZFUlNJT05fUkVHRVhQID0gL15bMS05XVxcLlxcZCQvO1xuXG5mdW5jdGlvbiBmaW5kKHN0cmVhbSwgc2lnbmF0dXJlLCBsaW1pdCA9IDEwMjQsIGJhY2t3YXJkcyA9IGZhbHNlKSB7XG4gIGNvbnN0IHNpZ25hdHVyZUxlbmd0aCA9IHNpZ25hdHVyZS5sZW5ndGg7XG4gIGNvbnN0IHNjYW5CeXRlcyA9IHN0cmVhbS5wZWVrQnl0ZXMobGltaXQpO1xuICBjb25zdCBzY2FuTGVuZ3RoID0gc2NhbkJ5dGVzLmxlbmd0aCAtIHNpZ25hdHVyZUxlbmd0aDtcblxuICBpZiAoc2Nhbkxlbmd0aCA8PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGJhY2t3YXJkcykge1xuICAgIGNvbnN0IHNpZ25hdHVyZUVuZCA9IHNpZ25hdHVyZUxlbmd0aCAtIDE7XG4gICAgbGV0IHBvcyA9IHNjYW5CeXRlcy5sZW5ndGggLSAxO1xuXG4gICAgd2hpbGUgKHBvcyA+PSBzaWduYXR1cmVFbmQpIHtcbiAgICAgIGxldCBqID0gMDtcblxuICAgICAgd2hpbGUgKGogPCBzaWduYXR1cmVMZW5ndGggJiYgc2NhbkJ5dGVzW3BvcyAtIGpdID09PSBzaWduYXR1cmVbc2lnbmF0dXJlRW5kIC0gal0pIHtcbiAgICAgICAgaisrO1xuICAgICAgfVxuXG4gICAgICBpZiAoaiA+PSBzaWduYXR1cmVMZW5ndGgpIHtcbiAgICAgICAgc3RyZWFtLnBvcyArPSBwb3MgLSBzaWduYXR1cmVFbmQ7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBwb3MtLTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IHBvcyA9IDA7XG5cbiAgICB3aGlsZSAocG9zIDw9IHNjYW5MZW5ndGgpIHtcbiAgICAgIGxldCBqID0gMDtcblxuICAgICAgd2hpbGUgKGogPCBzaWduYXR1cmVMZW5ndGggJiYgc2NhbkJ5dGVzW3BvcyArIGpdID09PSBzaWduYXR1cmVbal0pIHtcbiAgICAgICAgaisrO1xuICAgICAgfVxuXG4gICAgICBpZiAoaiA+PSBzaWduYXR1cmVMZW5ndGgpIHtcbiAgICAgICAgc3RyZWFtLnBvcyArPSBwb3M7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBwb3MrKztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmNsYXNzIFBERkRvY3VtZW50IHtcbiAgY29uc3RydWN0b3IocGRmTWFuYWdlciwgYXJnKSB7XG4gICAgbGV0IHN0cmVhbTtcblxuICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKGFyZykpIHtcbiAgICAgIHN0cmVhbSA9IGFyZztcbiAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc0FycmF5QnVmZmVyKShhcmcpKSB7XG4gICAgICBzdHJlYW0gPSBuZXcgX3N0cmVhbS5TdHJlYW0oYXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUERGRG9jdW1lbnQ6IFVua25vd24gYXJndW1lbnQgdHlwZVwiKTtcbiAgICB9XG5cbiAgICBpZiAoc3RyZWFtLmxlbmd0aCA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuSW52YWxpZFBERkV4Y2VwdGlvbihcIlRoZSBQREYgZmlsZSBpcyBlbXB0eSwgaS5lLiBpdHMgc2l6ZSBpcyB6ZXJvIGJ5dGVzLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnBkZk1hbmFnZXIgPSBwZGZNYW5hZ2VyO1xuICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMueHJlZiA9IG5ldyBfeHJlZi5YUmVmKHN0cmVhbSwgcGRmTWFuYWdlcik7XG4gICAgdGhpcy5fcGFnZVByb21pc2VzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX3ZlcnNpb24gPSBudWxsO1xuICAgIGNvbnN0IGlkQ291bnRlcnMgPSB7XG4gICAgICBmb250OiAwXG4gICAgfTtcbiAgICB0aGlzLl9nbG9iYWxJZEZhY3RvcnkgPSBjbGFzcyB7XG4gICAgICBzdGF0aWMgZ2V0RG9jSWQoKSB7XG4gICAgICAgIHJldHVybiBgZ18ke3BkZk1hbmFnZXIuZG9jSWR9YDtcbiAgICAgIH1cblxuICAgICAgc3RhdGljIGNyZWF0ZUZvbnRJZCgpIHtcbiAgICAgICAgcmV0dXJuIGBmJHsrK2lkQ291bnRlcnMuZm9udH1gO1xuICAgICAgfVxuXG4gICAgICBzdGF0aWMgY3JlYXRlT2JqSWQoKSB7XG4gICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYGNyZWF0ZU9iaklkYCBjYWxsZWQuXCIpO1xuICAgICAgfVxuXG4gICAgICBzdGF0aWMgZ2V0UGFnZU9iaklkKCkge1xuICAgICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIGBnZXRQYWdlT2JqSWRgIGNhbGxlZC5cIik7XG4gICAgICB9XG5cbiAgICB9O1xuICB9XG5cbiAgcGFyc2UocmVjb3ZlcnlNb2RlKSB7XG4gICAgdGhpcy54cmVmLnBhcnNlKHJlY292ZXJ5TW9kZSk7XG4gICAgdGhpcy5jYXRhbG9nID0gbmV3IF9jYXRhbG9nLkNhdGFsb2codGhpcy5wZGZNYW5hZ2VyLCB0aGlzLnhyZWYpO1xuXG4gICAgaWYgKHRoaXMuY2F0YWxvZy52ZXJzaW9uKSB7XG4gICAgICB0aGlzLl92ZXJzaW9uID0gdGhpcy5jYXRhbG9nLnZlcnNpb247XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxpbmVhcml6YXRpb24oKSB7XG4gICAgbGV0IGxpbmVhcml6YXRpb24gPSBudWxsO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxpbmVhcml6YXRpb24gPSBfcGFyc2VyLkxpbmVhcml6YXRpb24uY3JlYXRlKHRoaXMuc3RyZWFtKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG5cbiAgICAgICgwLCBfdXRpbC5pbmZvKShlcnIpO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImxpbmVhcml6YXRpb25cIiwgbGluZWFyaXphdGlvbik7XG4gIH1cblxuICBnZXQgc3RhcnRYUmVmKCkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtO1xuICAgIGxldCBzdGFydFhSZWYgPSAwO1xuXG4gICAgaWYgKHRoaXMubGluZWFyaXphdGlvbikge1xuICAgICAgc3RyZWFtLnJlc2V0KCk7XG5cbiAgICAgIGlmIChmaW5kKHN0cmVhbSwgRU5ET0JKX1NJR05BVFVSRSkpIHtcbiAgICAgICAgc3RhcnRYUmVmID0gc3RyZWFtLnBvcyArIDYgLSBzdHJlYW0uc3RhcnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0ZXAgPSAxMDI0O1xuICAgICAgY29uc3Qgc3RhcnRYUmVmTGVuZ3RoID0gU1RBUlRYUkVGX1NJR05BVFVSRS5sZW5ndGg7XG4gICAgICBsZXQgZm91bmQgPSBmYWxzZSxcbiAgICAgICAgICBwb3MgPSBzdHJlYW0uZW5kO1xuXG4gICAgICB3aGlsZSAoIWZvdW5kICYmIHBvcyA+IDApIHtcbiAgICAgICAgcG9zIC09IHN0ZXAgLSBzdGFydFhSZWZMZW5ndGg7XG5cbiAgICAgICAgaWYgKHBvcyA8IDApIHtcbiAgICAgICAgICBwb3MgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyZWFtLnBvcyA9IHBvcztcbiAgICAgICAgZm91bmQgPSBmaW5kKHN0cmVhbSwgU1RBUlRYUkVGX1NJR05BVFVSRSwgc3RlcCwgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICBzdHJlYW0uc2tpcCg5KTtcbiAgICAgICAgbGV0IGNoO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICBjaCA9IHN0cmVhbS5nZXRCeXRlKCk7XG4gICAgICAgIH0gd2hpbGUgKCgwLCBfY29yZV91dGlscy5pc1doaXRlU3BhY2UpKGNoKSk7XG5cbiAgICAgICAgbGV0IHN0ciA9IFwiXCI7XG5cbiAgICAgICAgd2hpbGUgKGNoID49IDB4MjAgJiYgY2ggPD0gMHgzOSkge1xuICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcbiAgICAgICAgICBjaCA9IHN0cmVhbS5nZXRCeXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGFydFhSZWYgPSBwYXJzZUludChzdHIsIDEwKTtcblxuICAgICAgICBpZiAoaXNOYU4oc3RhcnRYUmVmKSkge1xuICAgICAgICAgIHN0YXJ0WFJlZiA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJzdGFydFhSZWZcIiwgc3RhcnRYUmVmKTtcbiAgfVxuXG4gIGNoZWNrSGVhZGVyKCkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtO1xuICAgIHN0cmVhbS5yZXNldCgpO1xuXG4gICAgaWYgKCFmaW5kKHN0cmVhbSwgUERGX0hFQURFUl9TSUdOQVRVUkUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3RyZWFtLm1vdmVTdGFydCgpO1xuICAgIGNvbnN0IE1BWF9QREZfVkVSU0lPTl9MRU5HVEggPSAxMjtcbiAgICBsZXQgdmVyc2lvbiA9IFwiXCIsXG4gICAgICAgIGNoO1xuXG4gICAgd2hpbGUgKChjaCA9IHN0cmVhbS5nZXRCeXRlKCkpID4gMHgyMCkge1xuICAgICAgaWYgKHZlcnNpb24ubGVuZ3RoID49IE1BWF9QREZfVkVSU0lPTl9MRU5HVEgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHZlcnNpb24gKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl92ZXJzaW9uKSB7XG4gICAgICB0aGlzLl92ZXJzaW9uID0gdmVyc2lvbi5zdWJzdHJpbmcoNSk7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VTdGFydFhSZWYoKSB7XG4gICAgdGhpcy54cmVmLnNldFN0YXJ0WFJlZih0aGlzLnN0YXJ0WFJlZik7XG4gIH1cblxuICBnZXQgbnVtUGFnZXMoKSB7XG4gICAgbGV0IG51bSA9IDA7XG5cbiAgICBpZiAodGhpcy5jYXRhbG9nLmhhc0FjdHVhbE51bVBhZ2VzKSB7XG4gICAgICBudW0gPSB0aGlzLmNhdGFsb2cubnVtUGFnZXM7XG4gICAgfSBlbHNlIGlmICh0aGlzLnhmYUZhY3RvcnkpIHtcbiAgICAgIG51bSA9IHRoaXMueGZhRmFjdG9yeS5nZXROdW1QYWdlcygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5saW5lYXJpemF0aW9uKSB7XG4gICAgICBudW0gPSB0aGlzLmxpbmVhcml6YXRpb24ubnVtUGFnZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG51bSA9IHRoaXMuY2F0YWxvZy5udW1QYWdlcztcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJudW1QYWdlc1wiLCBudW0pO1xuICB9XG5cbiAgX2hhc09ubHlEb2N1bWVudFNpZ25hdHVyZXMoZmllbGRzLCByZWN1cnNpb25EZXB0aCA9IDApIHtcbiAgICBjb25zdCBSRUNVUlNJT05fTElNSVQgPSAxMDtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheShmaWVsZHMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpZWxkcy5ldmVyeShmaWVsZCA9PiB7XG4gICAgICBmaWVsZCA9IHRoaXMueHJlZi5mZXRjaElmUmVmKGZpZWxkKTtcblxuICAgICAgaWYgKCEoZmllbGQgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWVsZC5oYXMoXCJLaWRzXCIpKSB7XG4gICAgICAgIGlmICgrK3JlY3Vyc2lvbkRlcHRoID4gUkVDVVJTSU9OX0xJTUlUKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiX2hhc09ubHlEb2N1bWVudFNpZ25hdHVyZXM6IG1heGltdW0gcmVjdXJzaW9uIGRlcHRoIHJlYWNoZWRcIik7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc09ubHlEb2N1bWVudFNpZ25hdHVyZXMoZmllbGQuZ2V0KFwiS2lkc1wiKSwgcmVjdXJzaW9uRGVwdGgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc1NpZ25hdHVyZSA9ICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZpZWxkLmdldChcIkZUXCIpLCBcIlNpZ1wiKTtcbiAgICAgIGNvbnN0IHJlY3RhbmdsZSA9IGZpZWxkLmdldChcIlJlY3RcIik7XG4gICAgICBjb25zdCBpc0ludmlzaWJsZSA9IEFycmF5LmlzQXJyYXkocmVjdGFuZ2xlKSAmJiByZWN0YW5nbGUuZXZlcnkodmFsdWUgPT4gdmFsdWUgPT09IDApO1xuICAgICAgcmV0dXJuIGlzU2lnbmF0dXJlICYmIGlzSW52aXNpYmxlO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IHhmYURhdGEoKSB7XG4gICAgY29uc3QgYWNyb0Zvcm0gPSB0aGlzLmNhdGFsb2cuYWNyb0Zvcm07XG5cbiAgICBpZiAoIWFjcm9Gb3JtKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB4ZmEgPSBhY3JvRm9ybS5nZXQoXCJYRkFcIik7XG4gICAgY29uc3QgZW50cmllcyA9IHtcbiAgICAgIFwieGRwOnhkcFwiOiBcIlwiLFxuICAgICAgdGVtcGxhdGU6IFwiXCIsXG4gICAgICBkYXRhc2V0czogXCJcIixcbiAgICAgIGNvbmZpZzogXCJcIixcbiAgICAgIGNvbm5lY3Rpb25TZXQ6IFwiXCIsXG4gICAgICBsb2NhbGVTZXQ6IFwiXCIsXG4gICAgICBzdHlsZXNoZWV0OiBcIlwiLFxuICAgICAgXCIveGRwOnhkcFwiOiBcIlwiXG4gICAgfTtcblxuICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKHhmYSkgJiYgIXhmYS5pc0VtcHR5KSB7XG4gICAgICB0cnkge1xuICAgICAgICBlbnRyaWVzW1wieGRwOnhkcFwiXSA9ICgwLCBfdXRpbC5zdHJpbmdUb1VURjhTdHJpbmcpKHhmYS5nZXRTdHJpbmcoKSk7XG4gICAgICAgIHJldHVybiBlbnRyaWVzO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJYRkEgLSBJbnZhbGlkIHV0Zi04IHN0cmluZy5cIik7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh4ZmEpIHx8IHhmYS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHhmYS5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7XG4gICAgICBsZXQgbmFtZTtcblxuICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgbmFtZSA9IFwieGRwOnhkcFwiO1xuICAgICAgfSBlbHNlIGlmIChpID09PSBpaSAtIDIpIHtcbiAgICAgICAgbmFtZSA9IFwiL3hkcDp4ZHBcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5hbWUgPSB4ZmFbaV07XG4gICAgICB9XG5cbiAgICAgIGlmICghZW50cmllcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMueHJlZi5mZXRjaElmUmVmKHhmYVtpICsgMV0pO1xuXG4gICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoZGF0YSkgfHwgZGF0YS5pc0VtcHR5KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBlbnRyaWVzW25hbWVdID0gKDAsIF91dGlsLnN0cmluZ1RvVVRGOFN0cmluZykoZGF0YS5nZXRTdHJpbmcoKSk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIlhGQSAtIEludmFsaWQgdXRmLTggc3RyaW5nLlwiKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudHJpZXM7XG4gIH1cblxuICBnZXQgeGZhRmFjdG9yeSgpIHtcbiAgICBsZXQgZGF0YTtcblxuICAgIGlmICh0aGlzLnBkZk1hbmFnZXIuZW5hYmxlWGZhICYmIHRoaXMuY2F0YWxvZy5uZWVkc1JlbmRlcmluZyAmJiB0aGlzLmZvcm1JbmZvLmhhc1hmYSAmJiAhdGhpcy5mb3JtSW5mby5oYXNBY3JvRm9ybSkge1xuICAgICAgZGF0YSA9IHRoaXMueGZhRGF0YTtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJ4ZmFGYWN0b3J5XCIsIGRhdGEgPyBuZXcgX2ZhY3RvcnkuWEZBRmFjdG9yeShkYXRhKSA6IG51bGwpO1xuICB9XG5cbiAgZ2V0IGlzUHVyZVhmYSgpIHtcbiAgICByZXR1cm4gdGhpcy54ZmFGYWN0b3J5ID8gdGhpcy54ZmFGYWN0b3J5LmlzVmFsaWQoKSA6IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGh0bWxGb3JYZmEoKSB7XG4gICAgcmV0dXJuIHRoaXMueGZhRmFjdG9yeSA/IHRoaXMueGZhRmFjdG9yeS5nZXRQYWdlcygpIDogbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGxvYWRYZmFJbWFnZXMoKSB7XG4gICAgY29uc3QgeGZhSW1hZ2VzRGljdCA9IGF3YWl0IHRoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwieGZhSW1hZ2VzXCIpO1xuXG4gICAgaWYgKCF4ZmFJbWFnZXNEaWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qga2V5cyA9IHhmYUltYWdlc0RpY3QuZ2V0S2V5cygpO1xuICAgIGNvbnN0IG9iamVjdExvYWRlciA9IG5ldyBfb2JqZWN0X2xvYWRlci5PYmplY3RMb2FkZXIoeGZhSW1hZ2VzRGljdCwga2V5cywgdGhpcy54cmVmKTtcbiAgICBhd2FpdCBvYmplY3RMb2FkZXIubG9hZCgpO1xuICAgIGNvbnN0IHhmYUltYWdlcyA9IG5ldyBNYXAoKTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IHhmYUltYWdlc0RpY3QuZ2V0KGtleSk7XG5cbiAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShzdHJlYW0pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB4ZmFJbWFnZXMuc2V0KGtleSwgc3RyZWFtLmdldEJ5dGVzKCkpO1xuICAgIH1cblxuICAgIHRoaXMueGZhRmFjdG9yeS5zZXRJbWFnZXMoeGZhSW1hZ2VzKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRYZmFGb250cyhoYW5kbGVyLCB0YXNrKSB7XG4gICAgY29uc3QgYWNyb0Zvcm0gPSBhd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcImFjcm9Gb3JtXCIpO1xuXG4gICAgaWYgKCFhY3JvRm9ybSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlcyA9IGF3YWl0IGFjcm9Gb3JtLmdldEFzeW5jKFwiRFJcIik7XG5cbiAgICBpZiAoIShyZXNvdXJjZXMgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9iamVjdExvYWRlciA9IG5ldyBfb2JqZWN0X2xvYWRlci5PYmplY3RMb2FkZXIocmVzb3VyY2VzLCBbXCJGb250XCJdLCB0aGlzLnhyZWYpO1xuICAgIGF3YWl0IG9iamVjdExvYWRlci5sb2FkKCk7XG4gICAgY29uc3QgZm9udFJlcyA9IHJlc291cmNlcy5nZXQoXCJGb250XCIpO1xuXG4gICAgaWYgKCEoZm9udFJlcyBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwgdGhpcy5wZGZNYW5hZ2VyLmV2YWx1YXRvck9wdGlvbnMpO1xuICAgIG9wdGlvbnMudXNlU3lzdGVtRm9udHMgPSBmYWxzZTtcbiAgICBjb25zdCBwYXJ0aWFsRXZhbHVhdG9yID0gbmV3IF9ldmFsdWF0b3IuUGFydGlhbEV2YWx1YXRvcih7XG4gICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICBoYW5kbGVyLFxuICAgICAgcGFnZUluZGV4OiAtMSxcbiAgICAgIGlkRmFjdG9yeTogdGhpcy5fZ2xvYmFsSWRGYWN0b3J5LFxuICAgICAgZm9udENhY2hlOiB0aGlzLmNhdGFsb2cuZm9udENhY2hlLFxuICAgICAgYnVpbHRJbkNNYXBDYWNoZTogdGhpcy5jYXRhbG9nLmJ1aWx0SW5DTWFwQ2FjaGUsXG4gICAgICBzdGFuZGFyZEZvbnREYXRhQ2FjaGU6IHRoaXMuY2F0YWxvZy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsXG4gICAgICBvcHRpb25zXG4gICAgfSk7XG4gICAgY29uc3Qgb3BlcmF0b3JMaXN0ID0gbmV3IF9vcGVyYXRvcl9saXN0Lk9wZXJhdG9yTGlzdCgpO1xuICAgIGNvbnN0IHBkZkZvbnRzID0gW107XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgICAgZ2V0IGZvbnQoKSB7XG4gICAgICAgIHJldHVybiBwZGZGb250c1twZGZGb250cy5sZW5ndGggLSAxXTtcbiAgICAgIH0sXG5cbiAgICAgIHNldCBmb250KGZvbnQpIHtcbiAgICAgICAgcGRmRm9udHMucHVzaChmb250KTtcbiAgICAgIH0sXG5cbiAgICAgIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgIH07XG4gICAgY29uc3QgZm9udHMgPSBuZXcgTWFwKCk7XG4gICAgZm9udFJlcy5mb3JFYWNoKChmb250TmFtZSwgZm9udCkgPT4ge1xuICAgICAgZm9udHMuc2V0KGZvbnROYW1lLCBmb250KTtcbiAgICB9KTtcbiAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBbZm9udE5hbWUsIGZvbnRdIG9mIGZvbnRzKSB7XG4gICAgICBjb25zdCBkZXNjcmlwdG9yID0gZm9udC5nZXQoXCJGb250RGVzY3JpcHRvclwiKTtcblxuICAgICAgaWYgKCEoZGVzY3JpcHRvciBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgZm9udEZhbWlseSA9IGRlc2NyaXB0b3IuZ2V0KFwiRm9udEZhbWlseVwiKTtcbiAgICAgIGZvbnRGYW1pbHkgPSBmb250RmFtaWx5LnJlcGxhY2UoL1sgXSsoXFxkKS9nLCBcIiQxXCIpO1xuICAgICAgY29uc3QgZm9udFdlaWdodCA9IGRlc2NyaXB0b3IuZ2V0KFwiRm9udFdlaWdodFwiKTtcbiAgICAgIGNvbnN0IGl0YWxpY0FuZ2xlID0gLWRlc2NyaXB0b3IuZ2V0KFwiSXRhbGljQW5nbGVcIik7XG4gICAgICBjb25zdCBjc3NGb250SW5mbyA9IHtcbiAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgZm9udFdlaWdodCxcbiAgICAgICAgaXRhbGljQW5nbGVcbiAgICAgIH07XG5cbiAgICAgIGlmICghKDAsIF9jb3JlX3V0aWxzLnZhbGlkYXRlQ1NTRm9udCkoY3NzRm9udEluZm8pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBwcm9taXNlcy5wdXNoKHBhcnRpYWxFdmFsdWF0b3IuaGFuZGxlU2V0Rm9udChyZXNvdXJjZXMsIFtfcHJpbWl0aXZlcy5OYW1lLmdldChmb250TmFtZSksIDFdLCBudWxsLCBvcGVyYXRvckxpc3QsIHRhc2ssIGluaXRpYWxTdGF0ZSwgbnVsbCwgY3NzRm9udEluZm8pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGBsb2FkWGZhRm9udHM6IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICBjb25zdCBtaXNzaW5nRm9udHMgPSB0aGlzLnhmYUZhY3Rvcnkuc2V0Rm9udHMocGRmRm9udHMpO1xuXG4gICAgaWYgKCFtaXNzaW5nRm9udHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvcHRpb25zLmlnbm9yZUVycm9ycyA9IHRydWU7XG4gICAgcHJvbWlzZXMubGVuZ3RoID0gMDtcbiAgICBwZGZGb250cy5sZW5ndGggPSAwO1xuICAgIGNvbnN0IHJlYWxseU1pc3NpbmdGb250cyA9IG5ldyBTZXQoKTtcblxuICAgIGZvciAoY29uc3QgbWlzc2luZyBvZiBtaXNzaW5nRm9udHMpIHtcbiAgICAgIGlmICghKDAsIF94ZmFfZm9udHMuZ2V0WGZhRm9udE5hbWUpKGAke21pc3Npbmd9LVJlZ3VsYXJgKSkge1xuICAgICAgICByZWFsbHlNaXNzaW5nRm9udHMuYWRkKG1pc3NpbmcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZWFsbHlNaXNzaW5nRm9udHMuc2l6ZSkge1xuICAgICAgbWlzc2luZ0ZvbnRzLnB1c2goXCJQZGZKUy1GYWxsYmFja1wiKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG1pc3Npbmcgb2YgbWlzc2luZ0ZvbnRzKSB7XG4gICAgICBpZiAocmVhbGx5TWlzc2luZ0ZvbnRzLmhhcyhtaXNzaW5nKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBmb250SW5mbyBvZiBbe1xuICAgICAgICBuYW1lOiBcIlJlZ3VsYXJcIixcbiAgICAgICAgZm9udFdlaWdodDogNDAwLFxuICAgICAgICBpdGFsaWNBbmdsZTogMFxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiBcIkJvbGRcIixcbiAgICAgICAgZm9udFdlaWdodDogNzAwLFxuICAgICAgICBpdGFsaWNBbmdsZTogMFxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiBcIkl0YWxpY1wiLFxuICAgICAgICBmb250V2VpZ2h0OiA0MDAsXG4gICAgICAgIGl0YWxpY0FuZ2xlOiAxMlxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiBcIkJvbGRJdGFsaWNcIixcbiAgICAgICAgZm9udFdlaWdodDogNzAwLFxuICAgICAgICBpdGFsaWNBbmdsZTogMTJcbiAgICAgIH1dKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBgJHttaXNzaW5nfS0ke2ZvbnRJbmZvLm5hbWV9YDtcbiAgICAgICAgY29uc3QgZGljdCA9ICgwLCBfeGZhX2ZvbnRzLmdldFhmYUZvbnREaWN0KShuYW1lKTtcbiAgICAgICAgcHJvbWlzZXMucHVzaChwYXJ0aWFsRXZhbHVhdG9yLmhhbmRsZVNldEZvbnQocmVzb3VyY2VzLCBbX3ByaW1pdGl2ZXMuTmFtZS5nZXQobmFtZSksIDFdLCBudWxsLCBvcGVyYXRvckxpc3QsIHRhc2ssIGluaXRpYWxTdGF0ZSwgZGljdCwge1xuICAgICAgICAgIGZvbnRGYW1pbHk6IG1pc3NpbmcsXG4gICAgICAgICAgZm9udFdlaWdodDogZm9udEluZm8uZm9udFdlaWdodCxcbiAgICAgICAgICBpdGFsaWNBbmdsZTogZm9udEluZm8uaXRhbGljQW5nbGVcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgbG9hZFhmYUZvbnRzOiBcIiR7cmVhc29ufVwiLmApO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgIHRoaXMueGZhRmFjdG9yeS5hcHBlbmRGb250cyhwZGZGb250cywgcmVhbGx5TWlzc2luZ0ZvbnRzKTtcbiAgfVxuXG4gIGFzeW5jIHNlcmlhbGl6ZVhmYURhdGEoYW5ub3RhdGlvblN0b3JhZ2UpIHtcbiAgICByZXR1cm4gdGhpcy54ZmFGYWN0b3J5ID8gdGhpcy54ZmFGYWN0b3J5LnNlcmlhbGl6ZURhdGEoYW5ub3RhdGlvblN0b3JhZ2UpIDogbnVsbDtcbiAgfVxuXG4gIGdldCBmb3JtSW5mbygpIHtcbiAgICBjb25zdCBmb3JtSW5mbyA9IHtcbiAgICAgIGhhc0ZpZWxkczogZmFsc2UsXG4gICAgICBoYXNBY3JvRm9ybTogZmFsc2UsXG4gICAgICBoYXNYZmE6IGZhbHNlLFxuICAgICAgaGFzU2lnbmF0dXJlczogZmFsc2VcbiAgICB9O1xuICAgIGNvbnN0IGFjcm9Gb3JtID0gdGhpcy5jYXRhbG9nLmFjcm9Gb3JtO1xuXG4gICAgaWYgKCFhY3JvRm9ybSkge1xuICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiZm9ybUluZm9cIiwgZm9ybUluZm8pO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWVsZHMgPSBhY3JvRm9ybS5nZXQoXCJGaWVsZHNcIik7XG4gICAgICBjb25zdCBoYXNGaWVsZHMgPSBBcnJheS5pc0FycmF5KGZpZWxkcykgJiYgZmllbGRzLmxlbmd0aCA+IDA7XG4gICAgICBmb3JtSW5mby5oYXNGaWVsZHMgPSBoYXNGaWVsZHM7XG4gICAgICBjb25zdCB4ZmEgPSBhY3JvRm9ybS5nZXQoXCJYRkFcIik7XG4gICAgICBmb3JtSW5mby5oYXNYZmEgPSBBcnJheS5pc0FycmF5KHhmYSkgJiYgeGZhLmxlbmd0aCA+IDAgfHwgKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKSh4ZmEpICYmICF4ZmEuaXNFbXB0eTtcbiAgICAgIGNvbnN0IHNpZ0ZsYWdzID0gYWNyb0Zvcm0uZ2V0KFwiU2lnRmxhZ3NcIik7XG4gICAgICBjb25zdCBoYXNTaWduYXR1cmVzID0gISEoc2lnRmxhZ3MgJiAweDEpO1xuXG4gICAgICBjb25zdCBoYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzID0gaGFzU2lnbmF0dXJlcyAmJiB0aGlzLl9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzKGZpZWxkcyk7XG5cbiAgICAgIGZvcm1JbmZvLmhhc0Fjcm9Gb3JtID0gaGFzRmllbGRzICYmICFoYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzO1xuICAgICAgZm9ybUluZm8uaGFzU2lnbmF0dXJlcyA9IGhhc1NpZ25hdHVyZXM7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwud2FybikoYENhbm5vdCBmZXRjaCBmb3JtIGluZm9ybWF0aW9uOiBcIiR7ZXh9XCIuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiZm9ybUluZm9cIiwgZm9ybUluZm8pO1xuICB9XG5cbiAgZ2V0IGRvY3VtZW50SW5mbygpIHtcbiAgICBjb25zdCBEb2N1bWVudEluZm9WYWxpZGF0b3JzID0ge1xuICAgICAgVGl0bGU6IF91dGlsLmlzU3RyaW5nLFxuICAgICAgQXV0aG9yOiBfdXRpbC5pc1N0cmluZyxcbiAgICAgIFN1YmplY3Q6IF91dGlsLmlzU3RyaW5nLFxuICAgICAgS2V5d29yZHM6IF91dGlsLmlzU3RyaW5nLFxuICAgICAgQ3JlYXRvcjogX3V0aWwuaXNTdHJpbmcsXG4gICAgICBQcm9kdWNlcjogX3V0aWwuaXNTdHJpbmcsXG4gICAgICBDcmVhdGlvbkRhdGU6IF91dGlsLmlzU3RyaW5nLFxuICAgICAgTW9kRGF0ZTogX3V0aWwuaXNTdHJpbmcsXG4gICAgICBUcmFwcGVkOiBfcHJpbWl0aXZlcy5pc05hbWVcbiAgICB9O1xuICAgIGxldCB2ZXJzaW9uID0gdGhpcy5fdmVyc2lvbjtcblxuICAgIGlmICh0eXBlb2YgdmVyc2lvbiAhPT0gXCJzdHJpbmdcIiB8fCAhUERGX0hFQURFUl9WRVJTSU9OX1JFR0VYUC50ZXN0KHZlcnNpb24pKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoYEludmFsaWQgUERGIGhlYWRlciB2ZXJzaW9uIG51bWJlcjogJHt2ZXJzaW9ufWApO1xuICAgICAgdmVyc2lvbiA9IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZG9jSW5mbyA9IHtcbiAgICAgIFBERkZvcm1hdFZlcnNpb246IHZlcnNpb24sXG4gICAgICBMYW5ndWFnZTogdGhpcy5jYXRhbG9nLmxhbmcsXG4gICAgICBFbmNyeXB0RmlsdGVyTmFtZTogdGhpcy54cmVmLmVuY3J5cHQgPyB0aGlzLnhyZWYuZW5jcnlwdC5maWx0ZXJOYW1lIDogbnVsbCxcbiAgICAgIElzTGluZWFyaXplZDogISF0aGlzLmxpbmVhcml6YXRpb24sXG4gICAgICBJc0Fjcm9Gb3JtUHJlc2VudDogdGhpcy5mb3JtSW5mby5oYXNBY3JvRm9ybSxcbiAgICAgIElzWEZBUHJlc2VudDogdGhpcy5mb3JtSW5mby5oYXNYZmEsXG4gICAgICBJc0NvbGxlY3Rpb25QcmVzZW50OiAhIXRoaXMuY2F0YWxvZy5jb2xsZWN0aW9uLFxuICAgICAgSXNTaWduYXR1cmVzUHJlc2VudDogdGhpcy5mb3JtSW5mby5oYXNTaWduYXR1cmVzXG4gICAgfTtcbiAgICBsZXQgaW5mb0RpY3Q7XG5cbiAgICB0cnkge1xuICAgICAgaW5mb0RpY3QgPSB0aGlzLnhyZWYudHJhaWxlci5nZXQoXCJJbmZvXCIpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLmluZm8pKFwiVGhlIGRvY3VtZW50IGluZm9ybWF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC5cIik7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGluZm9EaWN0KSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgaW5mb0RpY3QuZ2V0S2V5cygpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaW5mb0RpY3QuZ2V0KGtleSk7XG5cbiAgICAgICAgaWYgKERvY3VtZW50SW5mb1ZhbGlkYXRvcnNba2V5XSkge1xuICAgICAgICAgIGlmIChEb2N1bWVudEluZm9WYWxpZGF0b3JzW2tleV0odmFsdWUpKSB7XG4gICAgICAgICAgICBkb2NJbmZvW2tleV0gPSB0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIgPyB2YWx1ZSA6ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoYEJhZCB2YWx1ZSBpbiBkb2N1bWVudCBpbmZvIGZvciBcIiR7a2V5fVwiLmApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgbGV0IGN1c3RvbVZhbHVlO1xuXG4gICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykodmFsdWUpKSB7XG4gICAgICAgICAgICBjdXN0b21WYWx1ZSA9ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodmFsdWUpIHx8ICgwLCBfdXRpbC5pc051bSkodmFsdWUpIHx8ICgwLCBfdXRpbC5pc0Jvb2wpKHZhbHVlKSkge1xuICAgICAgICAgICAgY3VzdG9tVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKGBVbnN1cHBvcnRlZCB2YWx1ZSBpbiBkb2N1bWVudCBpbmZvIGZvciAoY3VzdG9tKSBcIiR7a2V5fVwiLmApO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFkb2NJbmZvLkN1c3RvbSkge1xuICAgICAgICAgICAgZG9jSW5mby5DdXN0b20gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvY0luZm8uQ3VzdG9tW2tleV0gPSBjdXN0b21WYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImRvY3VtZW50SW5mb1wiLCBkb2NJbmZvKTtcbiAgfVxuXG4gIGdldCBmaW5nZXJwcmludHMoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUoZGF0YSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICYmIGRhdGEubGVuZ3RoID4gMCAmJiBkYXRhICE9PSBFTVBUWV9GSU5HRVJQUklOVDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoZXhTdHJpbmcoaGFzaCkge1xuICAgICAgY29uc3QgYnVmID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGhhc2gubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBjb25zdCBoZXggPSBoYXNoW2ldLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgYnVmLnB1c2goaGV4LnBhZFN0YXJ0KDIsIFwiMFwiKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBidWYuam9pbihcIlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZEFycmF5ID0gdGhpcy54cmVmLnRyYWlsZXIuZ2V0KFwiSURcIik7XG4gICAgbGV0IGhhc2hPcmlnaW5hbCwgaGFzaE1vZGlmaWVkO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaWRBcnJheSkgJiYgdmFsaWRhdGUoaWRBcnJheVswXSkpIHtcbiAgICAgIGhhc2hPcmlnaW5hbCA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShpZEFycmF5WzBdKTtcblxuICAgICAgaWYgKGlkQXJyYXlbMV0gIT09IGlkQXJyYXlbMF0gJiYgdmFsaWRhdGUoaWRBcnJheVsxXSkpIHtcbiAgICAgICAgaGFzaE1vZGlmaWVkID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGlkQXJyYXlbMV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBoYXNoT3JpZ2luYWwgPSAoMCwgX2NyeXB0by5jYWxjdWxhdGVNRDUpKHRoaXMuc3RyZWFtLmdldEJ5dGVSYW5nZSgwLCBGSU5HRVJQUklOVF9GSVJTVF9CWVRFUyksIDAsIEZJTkdFUlBSSU5UX0ZJUlNUX0JZVEVTKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJmaW5nZXJwcmludHNcIiwgW2hleFN0cmluZyhoYXNoT3JpZ2luYWwpLCBoYXNoTW9kaWZpZWQgPyBoZXhTdHJpbmcoaGFzaE1vZGlmaWVkKSA6IG51bGxdKTtcbiAgfVxuXG4gIGFzeW5jIF9nZXRMaW5lYXJpemF0aW9uUGFnZShwYWdlSW5kZXgpIHtcbiAgICBjb25zdCB7XG4gICAgICBjYXRhbG9nLFxuICAgICAgbGluZWFyaXphdGlvblxuICAgIH0gPSB0aGlzO1xuXG4gICAgY29uc3QgcmVmID0gX3ByaW1pdGl2ZXMuUmVmLmdldChsaW5lYXJpemF0aW9uLm9iamVjdE51bWJlckZpcnN0LCAwKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBvYmogPSBhd2FpdCB0aGlzLnhyZWYuZmV0Y2hBc3luYyhyZWYpO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqLCBcIlBhZ2VcIikgfHwgKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqKSAmJiAhb2JqLmhhcyhcIlR5cGVcIikgJiYgb2JqLmhhcyhcIkNvbnRlbnRzXCIpKSB7XG4gICAgICAgIGlmIChyZWYgJiYgIWNhdGFsb2cucGFnZUtpZHNDb3VudENhY2hlLmhhcyhyZWYpKSB7XG4gICAgICAgICAgY2F0YWxvZy5wYWdlS2lkc0NvdW50Q2FjaGUucHV0KHJlZiwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW29iaiwgcmVmXTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVGhlIExpbmVhcml6YXRpb24gZGljdGlvbmFyeSBkb2Vzbid0IHBvaW50IHRvIGEgdmFsaWQgUGFnZSBkaWN0aW9uYXJ5LlwiKTtcbiAgICB9IGNhdGNoIChyZWFzb24pIHtcbiAgICAgICgwLCBfdXRpbC5pbmZvKShyZWFzb24pO1xuICAgICAgcmV0dXJuIGNhdGFsb2cuZ2V0UGFnZURpY3QocGFnZUluZGV4KTtcbiAgICB9XG4gIH1cblxuICBnZXRQYWdlKHBhZ2VJbmRleCkge1xuICAgIGNvbnN0IGNhY2hlZFByb21pc2UgPSB0aGlzLl9wYWdlUHJvbWlzZXMuZ2V0KHBhZ2VJbmRleCk7XG5cbiAgICBpZiAoY2FjaGVkUHJvbWlzZSkge1xuICAgICAgcmV0dXJuIGNhY2hlZFByb21pc2U7XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgY2F0YWxvZyxcbiAgICAgIGxpbmVhcml6YXRpb24sXG4gICAgICB4ZmFGYWN0b3J5XG4gICAgfSA9IHRoaXM7XG4gICAgbGV0IHByb21pc2U7XG5cbiAgICBpZiAoeGZhRmFjdG9yeSkge1xuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShbX3ByaW1pdGl2ZXMuRGljdC5lbXB0eSwgbnVsbF0pO1xuICAgIH0gZWxzZSBpZiAobGluZWFyaXphdGlvbiAmJiBsaW5lYXJpemF0aW9uLnBhZ2VGaXJzdCA9PT0gcGFnZUluZGV4KSB7XG4gICAgICBwcm9taXNlID0gdGhpcy5fZ2V0TGluZWFyaXphdGlvblBhZ2UocGFnZUluZGV4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZSA9IGNhdGFsb2cuZ2V0UGFnZURpY3QocGFnZUluZGV4KTtcbiAgICB9XG5cbiAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKChbcGFnZURpY3QsIHJlZl0pID0+IHtcbiAgICAgIHJldHVybiBuZXcgUGFnZSh7XG4gICAgICAgIHBkZk1hbmFnZXI6IHRoaXMucGRmTWFuYWdlcixcbiAgICAgICAgeHJlZjogdGhpcy54cmVmLFxuICAgICAgICBwYWdlSW5kZXgsXG4gICAgICAgIHBhZ2VEaWN0LFxuICAgICAgICByZWYsXG4gICAgICAgIGdsb2JhbElkRmFjdG9yeTogdGhpcy5fZ2xvYmFsSWRGYWN0b3J5LFxuICAgICAgICBmb250Q2FjaGU6IGNhdGFsb2cuZm9udENhY2hlLFxuICAgICAgICBidWlsdEluQ01hcENhY2hlOiBjYXRhbG9nLmJ1aWx0SW5DTWFwQ2FjaGUsXG4gICAgICAgIHN0YW5kYXJkRm9udERhdGFDYWNoZTogY2F0YWxvZy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsXG4gICAgICAgIGdsb2JhbEltYWdlQ2FjaGU6IGNhdGFsb2cuZ2xvYmFsSW1hZ2VDYWNoZSxcbiAgICAgICAgbm9uQmxlbmRNb2Rlc1NldDogY2F0YWxvZy5ub25CbGVuZE1vZGVzU2V0LFxuICAgICAgICB4ZmFGYWN0b3J5XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3BhZ2VQcm9taXNlcy5zZXQocGFnZUluZGV4LCBwcm9taXNlKTtcblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgYXN5bmMgY2hlY2tGaXJzdFBhZ2UocmVjb3ZlcnlNb2RlID0gZmFsc2UpIHtcbiAgICBpZiAocmVjb3ZlcnlNb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0UGFnZSgwKTtcbiAgICB9IGNhdGNoIChyZWFzb24pIHtcbiAgICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBfY29yZV91dGlscy5YUmVmRW50cnlFeGNlcHRpb24pIHtcbiAgICAgICAgdGhpcy5fcGFnZVByb21pc2VzLmRlbGV0ZSgwKTtcblxuICAgICAgICBhd2FpdCB0aGlzLmNsZWFudXAoKTtcbiAgICAgICAgdGhyb3cgbmV3IF9jb3JlX3V0aWxzLlhSZWZQYXJzZUV4Y2VwdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNoZWNrTGFzdFBhZ2UocmVjb3ZlcnlNb2RlID0gZmFsc2UpIHtcbiAgICBjb25zdCB7XG4gICAgICBjYXRhbG9nLFxuICAgICAgcGRmTWFuYWdlclxuICAgIH0gPSB0aGlzO1xuICAgIGNhdGFsb2cuc2V0QWN0dWFsTnVtUGFnZXMoKTtcbiAgICBsZXQgbnVtUGFnZXM7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW3BkZk1hbmFnZXIuZW5zdXJlRG9jKFwieGZhRmFjdG9yeVwiKSwgcGRmTWFuYWdlci5lbnN1cmVEb2MoXCJsaW5lYXJpemF0aW9uXCIpLCBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coXCJudW1QYWdlc1wiKV0pO1xuXG4gICAgICBpZiAodGhpcy54ZmFGYWN0b3J5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5saW5lYXJpemF0aW9uKSB7XG4gICAgICAgIG51bVBhZ2VzID0gdGhpcy5saW5lYXJpemF0aW9uLm51bVBhZ2VzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbnVtUGFnZXMgPSBjYXRhbG9nLm51bVBhZ2VzO1xuICAgICAgfVxuXG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobnVtUGFnZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlBhZ2UgY291bnQgaXMgbm90IGFuIGludGVnZXIuXCIpO1xuICAgICAgfSBlbHNlIGlmIChudW1QYWdlcyA8PSAxKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5nZXRQYWdlKG51bVBhZ2VzIC0gMSk7XG4gICAgfSBjYXRjaCAocmVhc29uKSB7XG4gICAgICB0aGlzLl9wYWdlUHJvbWlzZXMuZGVsZXRlKG51bVBhZ2VzIC0gMSk7XG5cbiAgICAgIGF3YWl0IHRoaXMuY2xlYW51cCgpO1xuXG4gICAgICBpZiAocmVhc29uIGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuWFJlZkVudHJ5RXhjZXB0aW9uICYmICFyZWNvdmVyeU1vZGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9jb3JlX3V0aWxzLlhSZWZQYXJzZUV4Y2VwdGlvbigpO1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwud2FybikoYGNoZWNrTGFzdFBhZ2UgLSBpbnZhbGlkIC9QYWdlcyB0cmVlIC9Db3VudDogJHtudW1QYWdlc30uYCk7XG4gICAgICBsZXQgcGFnZXNUcmVlO1xuXG4gICAgICB0cnkge1xuICAgICAgICBwYWdlc1RyZWUgPSBhd2FpdCBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coXCJnZXRBbGxQYWdlRGljdHNcIiwgW3JlY292ZXJ5TW9kZV0pO1xuICAgICAgfSBjYXRjaCAocmVhc29uQWxsKSB7XG4gICAgICAgIGlmIChyZWFzb25BbGwgaW5zdGFuY2VvZiBfY29yZV91dGlscy5YUmVmRW50cnlFeGNlcHRpb24gJiYgIXJlY292ZXJ5TW9kZSkge1xuICAgICAgICAgIHRocm93IG5ldyBfY29yZV91dGlscy5YUmVmUGFyc2VFeGNlcHRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhdGFsb2cuc2V0QWN0dWFsTnVtUGFnZXMoMSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBbcGFnZUluZGV4LCBbcGFnZURpY3QsIHJlZl1dIG9mIHBhZ2VzVHJlZSkge1xuICAgICAgICBsZXQgcHJvbWlzZTtcblxuICAgICAgICBpZiAocGFnZURpY3QgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlamVjdChwYWdlRGljdCk7XG4gICAgICAgICAgcHJvbWlzZS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShuZXcgUGFnZSh7XG4gICAgICAgICAgICBwZGZNYW5hZ2VyLFxuICAgICAgICAgICAgeHJlZjogdGhpcy54cmVmLFxuICAgICAgICAgICAgcGFnZUluZGV4LFxuICAgICAgICAgICAgcGFnZURpY3QsXG4gICAgICAgICAgICByZWYsXG4gICAgICAgICAgICBnbG9iYWxJZEZhY3Rvcnk6IHRoaXMuX2dsb2JhbElkRmFjdG9yeSxcbiAgICAgICAgICAgIGZvbnRDYWNoZTogY2F0YWxvZy5mb250Q2FjaGUsXG4gICAgICAgICAgICBidWlsdEluQ01hcENhY2hlOiBjYXRhbG9nLmJ1aWx0SW5DTWFwQ2FjaGUsXG4gICAgICAgICAgICBzdGFuZGFyZEZvbnREYXRhQ2FjaGU6IGNhdGFsb2cuc3RhbmRhcmRGb250RGF0YUNhY2hlLFxuICAgICAgICAgICAgZ2xvYmFsSW1hZ2VDYWNoZTogY2F0YWxvZy5nbG9iYWxJbWFnZUNhY2hlLFxuICAgICAgICAgICAgbm9uQmxlbmRNb2Rlc1NldDogY2F0YWxvZy5ub25CbGVuZE1vZGVzU2V0LFxuICAgICAgICAgICAgeGZhRmFjdG9yeTogbnVsbFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3BhZ2VQcm9taXNlcy5zZXQocGFnZUluZGV4LCBwcm9taXNlKTtcbiAgICAgIH1cblxuICAgICAgY2F0YWxvZy5zZXRBY3R1YWxOdW1QYWdlcyhwYWdlc1RyZWUuc2l6ZSk7XG4gICAgfVxuICB9XG5cbiAgZm9udEZhbGxiYWNrKGlkLCBoYW5kbGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuY2F0YWxvZy5mb250RmFsbGJhY2soaWQsIGhhbmRsZXIpO1xuICB9XG5cbiAgYXN5bmMgY2xlYW51cChtYW51YWxseVRyaWdnZXJlZCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMuY2F0YWxvZyA/IHRoaXMuY2F0YWxvZy5jbGVhbnVwKG1hbnVhbGx5VHJpZ2dlcmVkKSA6ICgwLCBfcHJpbWl0aXZlcy5jbGVhclByaW1pdGl2ZUNhY2hlcykoKTtcbiAgfVxuXG4gIF9jb2xsZWN0RmllbGRPYmplY3RzKG5hbWUsIGZpZWxkUmVmLCBwcm9taXNlcykge1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy54cmVmLmZldGNoSWZSZWYoZmllbGRSZWYpO1xuXG4gICAgaWYgKGZpZWxkLmhhcyhcIlRcIikpIHtcbiAgICAgIGNvbnN0IHBhcnROYW1lID0gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShmaWVsZC5nZXQoXCJUXCIpKTtcblxuICAgICAgaWYgKG5hbWUgPT09IFwiXCIpIHtcbiAgICAgICAgbmFtZSA9IHBhcnROYW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmFtZSA9IGAke25hbWV9LiR7cGFydE5hbWV9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXByb21pc2VzLmhhcyhuYW1lKSkge1xuICAgICAgcHJvbWlzZXMuc2V0KG5hbWUsIFtdKTtcbiAgICB9XG5cbiAgICBwcm9taXNlcy5nZXQobmFtZSkucHVzaChfYW5ub3RhdGlvbi5Bbm5vdGF0aW9uRmFjdG9yeS5jcmVhdGUodGhpcy54cmVmLCBmaWVsZFJlZiwgdGhpcy5wZGZNYW5hZ2VyLCB0aGlzLl9sb2NhbElkRmFjdG9yeSwgdHJ1ZSkudGhlbihhbm5vdGF0aW9uID0+IGFubm90YXRpb24gJiYgYW5ub3RhdGlvbi5nZXRGaWVsZE9iamVjdCgpKS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoYF9jb2xsZWN0RmllbGRPYmplY3RzOiBcIiR7cmVhc29ufVwiLmApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSkpO1xuXG4gICAgaWYgKGZpZWxkLmhhcyhcIktpZHNcIikpIHtcbiAgICAgIGNvbnN0IGtpZHMgPSBmaWVsZC5nZXQoXCJLaWRzXCIpO1xuXG4gICAgICBmb3IgKGNvbnN0IGtpZCBvZiBraWRzKSB7XG4gICAgICAgIHRoaXMuX2NvbGxlY3RGaWVsZE9iamVjdHMobmFtZSwga2lkLCBwcm9taXNlcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZpZWxkT2JqZWN0cygpIHtcbiAgICBpZiAoIXRoaXMuZm9ybUluZm8uaGFzRmllbGRzKSB7XG4gICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJmaWVsZE9iamVjdHNcIiwgUHJvbWlzZS5yZXNvbHZlKG51bGwpKTtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxGaWVsZHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGNvbnN0IGZpZWxkUHJvbWlzZXMgPSBuZXcgTWFwKCk7XG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkUmVmIG9mIHRoaXMuY2F0YWxvZy5hY3JvRm9ybS5nZXQoXCJGaWVsZHNcIikpIHtcbiAgICAgIHRoaXMuX2NvbGxlY3RGaWVsZE9iamVjdHMoXCJcIiwgZmllbGRSZWYsIGZpZWxkUHJvbWlzZXMpO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbFByb21pc2VzID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBwcm9taXNlc10gb2YgZmllbGRQcm9taXNlcykge1xuICAgICAgYWxsUHJvbWlzZXMucHVzaChQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmaWVsZHMgPT4ge1xuICAgICAgICBmaWVsZHMgPSBmaWVsZHMuZmlsdGVyKGZpZWxkID0+ICEhZmllbGQpO1xuXG4gICAgICAgIGlmIChmaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGFsbEZpZWxkc1tuYW1lXSA9IGZpZWxkcztcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImZpZWxkT2JqZWN0c1wiLCBQcm9taXNlLmFsbChhbGxQcm9taXNlcykudGhlbigoKSA9PiBhbGxGaWVsZHMpKTtcbiAgfVxuXG4gIGdldCBoYXNKU0FjdGlvbnMoKSB7XG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucGRmTWFuYWdlci5lbnN1cmVEb2MoXCJfcGFyc2VIYXNKU0FjdGlvbnNcIik7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiaGFzSlNBY3Rpb25zXCIsIHByb21pc2UpO1xuICB9XG5cbiAgYXN5bmMgX3BhcnNlSGFzSlNBY3Rpb25zKCkge1xuICAgIGNvbnN0IFtjYXRhbG9nSnNBY3Rpb25zLCBmaWVsZE9iamVjdHNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwianNBY3Rpb25zXCIpLCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlRG9jKFwiZmllbGRPYmplY3RzXCIpXSk7XG5cbiAgICBpZiAoY2F0YWxvZ0pzQWN0aW9ucykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkT2JqZWN0cykge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRPYmplY3RzKS5zb21lKGZpZWxkT2JqZWN0ID0+IGZpZWxkT2JqZWN0LnNvbWUob2JqZWN0ID0+IG9iamVjdC5hY3Rpb25zICE9PSBudWxsKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0IGNhbGN1bGF0aW9uT3JkZXJJZHMoKSB7XG4gICAgY29uc3QgYWNyb0Zvcm0gPSB0aGlzLmNhdGFsb2cuYWNyb0Zvcm07XG5cbiAgICBpZiAoIWFjcm9Gb3JtIHx8ICFhY3JvRm9ybS5oYXMoXCJDT1wiKSkge1xuICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiY2FsY3VsYXRpb25PcmRlcklkc1wiLCBudWxsKTtcbiAgICB9XG5cbiAgICBjb25zdCBjYWxjdWxhdGlvbk9yZGVyID0gYWNyb0Zvcm0uZ2V0KFwiQ09cIik7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2FsY3VsYXRpb25PcmRlcikgfHwgY2FsY3VsYXRpb25PcmRlci5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImNhbGN1bGF0aW9uT3JkZXJJZHNcIiwgbnVsbCk7XG4gICAgfVxuXG4gICAgY29uc3QgaWRzID0gY2FsY3VsYXRpb25PcmRlci5maWx0ZXIoX3ByaW1pdGl2ZXMuaXNSZWYpLm1hcChyZWYgPT4gcmVmLnRvU3RyaW5nKCkpO1xuXG4gICAgaWYgKGlkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImNhbGN1bGF0aW9uT3JkZXJJZHNcIiwgbnVsbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiY2FsY3VsYXRpb25PcmRlcklkc1wiLCBpZHMpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QREZEb2N1bWVudCA9IFBERkRvY3VtZW50O1xuXG4vKioqLyB9KSxcbi8qIDEyICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLmdldFhmYUZvbnREaWN0ID0gZ2V0WGZhRm9udERpY3Q7XG5leHBvcnRzLmdldFhmYUZvbnROYW1lID0gZ2V0WGZhRm9udE5hbWU7XG5cbnZhciBfY2FsaWJyaV9mYWN0b3JzID0gX193X3BkZmpzX3JlcXVpcmVfXygxMyk7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfaGVsdmV0aWNhX2ZhY3RvcnMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE0KTtcblxudmFyIF9saWJlcmF0aW9uc2Fuc193aWR0aHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE1KTtcblxudmFyIF9teXJpYWRwcm9fZmFjdG9ycyA9IF9fd19wZGZqc19yZXF1aXJlX18oMTYpO1xuXG52YXIgX3NlZ29ldWlfZmFjdG9ycyA9IF9fd19wZGZqc19yZXF1aXJlX18oMTcpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG52YXIgX2ZvbnRzX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXygxOCk7XG5cbmNvbnN0IGdldFhGQUZvbnRNYXAgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICB0W1wiTXlyaWFkUHJvLVJlZ3VsYXJcIl0gPSB0W1wiUGRmSlMtRmFsbGJhY2stUmVndWxhclwiXSA9IHtcbiAgICBuYW1lOiBcIkxpYmVyYXRpb25TYW5zLVJlZ3VsYXJcIixcbiAgICBmYWN0b3JzOiBfbXlyaWFkcHJvX2ZhY3RvcnMuTXlyaWFkUHJvUmVndWxhckZhY3RvcnMsXG4gICAgYmFzZVdpZHRoczogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsXG4gICAgYmFzZU1hcHBpbmc6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxcbiAgICBtZXRyaWNzOiBfbXlyaWFkcHJvX2ZhY3RvcnMuTXlyaWFkUHJvUmVndWxhck1ldHJpY3NcbiAgfTtcbiAgdFtcIk15cmlhZFByby1Cb2xkXCJdID0gdFtcIlBkZkpTLUZhbGxiYWNrLUJvbGRcIl0gPSB7XG4gICAgbmFtZTogXCJMaWJlcmF0aW9uU2Fucy1Cb2xkXCIsXG4gICAgZmFjdG9yczogX215cmlhZHByb19mYWN0b3JzLk15cmlhZFByb0JvbGRGYWN0b3JzLFxuICAgIGJhc2VXaWR0aHM6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLFxuICAgIGJhc2VNYXBwaW5nOiBfbGliZXJhdGlvbnNhbnNfd2lkdGhzLkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmcsXG4gICAgbWV0cmljczogX215cmlhZHByb19mYWN0b3JzLk15cmlhZFByb0JvbGRNZXRyaWNzXG4gIH07XG4gIHRbXCJNeXJpYWRQcm8tSXRcIl0gPSB0W1wiTXlyaWFkUHJvLUl0YWxpY1wiXSA9IHRbXCJQZGZKUy1GYWxsYmFjay1JdGFsaWNcIl0gPSB7XG4gICAgbmFtZTogXCJMaWJlcmF0aW9uU2Fucy1JdGFsaWNcIixcbiAgICBmYWN0b3JzOiBfbXlyaWFkcHJvX2ZhY3RvcnMuTXlyaWFkUHJvSXRhbGljRmFjdG9ycyxcbiAgICBiYXNlV2lkdGhzOiBfbGliZXJhdGlvbnNhbnNfd2lkdGhzLkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzLFxuICAgIGJhc2VNYXBwaW5nOiBfbGliZXJhdGlvbnNhbnNfd2lkdGhzLkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZyxcbiAgICBtZXRyaWNzOiBfbXlyaWFkcHJvX2ZhY3RvcnMuTXlyaWFkUHJvSXRhbGljTWV0cmljc1xuICB9O1xuICB0W1wiTXlyaWFkUHJvLUJvbGRJdFwiXSA9IHRbXCJNeXJpYWRQcm8tQm9sZEl0YWxpY1wiXSA9IHRbXCJQZGZKUy1GYWxsYmFjay1Cb2xkSXRhbGljXCJdID0ge1xuICAgIG5hbWU6IFwiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpY1wiLFxuICAgIGZhY3RvcnM6IF9teXJpYWRwcm9fZmFjdG9ycy5NeXJpYWRQcm9Cb2xkSXRhbGljRmFjdG9ycyxcbiAgICBiYXNlV2lkdGhzOiBfbGliZXJhdGlvbnNhbnNfd2lkdGhzLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocyxcbiAgICBiYXNlTWFwcGluZzogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nLFxuICAgIG1ldHJpY3M6IF9teXJpYWRwcm9fZmFjdG9ycy5NeXJpYWRQcm9Cb2xkSXRhbGljTWV0cmljc1xuICB9O1xuICB0LkFyaWFsTVQgPSB0LkFyaWFsID0gdFtcIkFyaWFsLVJlZ3VsYXJcIl0gPSB7XG4gICAgbmFtZTogXCJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyXCIsXG4gICAgYmFzZVdpZHRoczogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsXG4gICAgYmFzZU1hcHBpbmc6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZ1xuICB9O1xuICB0W1wiQXJpYWwtQm9sZE1UXCJdID0gdFtcIkFyaWFsLUJvbGRcIl0gPSB7XG4gICAgbmFtZTogXCJMaWJlcmF0aW9uU2Fucy1Cb2xkXCIsXG4gICAgYmFzZVdpZHRoczogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHMsXG4gICAgYmFzZU1hcHBpbmc6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZ1xuICB9O1xuICB0W1wiQXJpYWwtSXRhbGljTVRcIl0gPSB0W1wiQXJpYWwtSXRhbGljXCJdID0ge1xuICAgIG5hbWU6IFwiTGliZXJhdGlvblNhbnMtSXRhbGljXCIsXG4gICAgYmFzZVdpZHRoczogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocyxcbiAgICBiYXNlTWFwcGluZzogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmdcbiAgfTtcbiAgdFtcIkFyaWFsLUJvbGRJdGFsaWNNVFwiXSA9IHRbXCJBcmlhbC1Cb2xkSXRhbGljXCJdID0ge1xuICAgIG5hbWU6IFwiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpY1wiLFxuICAgIGJhc2VXaWR0aHM6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzLFxuICAgIGJhc2VNYXBwaW5nOiBfbGliZXJhdGlvbnNhbnNfd2lkdGhzLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmdcbiAgfTtcbiAgdFtcIkNhbGlicmktUmVndWxhclwiXSA9IHtcbiAgICBuYW1lOiBcIkxpYmVyYXRpb25TYW5zLVJlZ3VsYXJcIixcbiAgICBmYWN0b3JzOiBfY2FsaWJyaV9mYWN0b3JzLkNhbGlicmlSZWd1bGFyRmFjdG9ycyxcbiAgICBiYXNlV2lkdGhzOiBfbGliZXJhdGlvbnNhbnNfd2lkdGhzLkxpYmVyYXRpb25TYW5zUmVndWxhcldpZHRocyxcbiAgICBiYXNlTWFwcGluZzogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nLFxuICAgIG1ldHJpY3M6IF9jYWxpYnJpX2ZhY3RvcnMuQ2FsaWJyaVJlZ3VsYXJNZXRyaWNzXG4gIH07XG4gIHRbXCJDYWxpYnJpLUJvbGRcIl0gPSB7XG4gICAgbmFtZTogXCJMaWJlcmF0aW9uU2Fucy1Cb2xkXCIsXG4gICAgZmFjdG9yczogX2NhbGlicmlfZmFjdG9ycy5DYWxpYnJpQm9sZEZhY3RvcnMsXG4gICAgYmFzZVdpZHRoczogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHMsXG4gICAgYmFzZU1hcHBpbmc6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyxcbiAgICBtZXRyaWNzOiBfY2FsaWJyaV9mYWN0b3JzLkNhbGlicmlCb2xkTWV0cmljc1xuICB9O1xuICB0W1wiQ2FsaWJyaS1JdGFsaWNcIl0gPSB7XG4gICAgbmFtZTogXCJMaWJlcmF0aW9uU2Fucy1JdGFsaWNcIixcbiAgICBmYWN0b3JzOiBfY2FsaWJyaV9mYWN0b3JzLkNhbGlicmlJdGFsaWNGYWN0b3JzLFxuICAgIGJhc2VXaWR0aHM6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsXG4gICAgYmFzZU1hcHBpbmc6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nLFxuICAgIG1ldHJpY3M6IF9jYWxpYnJpX2ZhY3RvcnMuQ2FsaWJyaUl0YWxpY01ldHJpY3NcbiAgfTtcbiAgdFtcIkNhbGlicmktQm9sZEl0YWxpY1wiXSA9IHtcbiAgICBuYW1lOiBcIkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWNcIixcbiAgICBmYWN0b3JzOiBfY2FsaWJyaV9mYWN0b3JzLkNhbGlicmlCb2xkSXRhbGljRmFjdG9ycyxcbiAgICBiYXNlV2lkdGhzOiBfbGliZXJhdGlvbnNhbnNfd2lkdGhzLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocyxcbiAgICBiYXNlTWFwcGluZzogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nLFxuICAgIG1ldHJpY3M6IF9jYWxpYnJpX2ZhY3RvcnMuQ2FsaWJyaUJvbGRJdGFsaWNNZXRyaWNzXG4gIH07XG4gIHRbXCJTZWdvZXVpLVJlZ3VsYXJcIl0gPSB7XG4gICAgbmFtZTogXCJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyXCIsXG4gICAgZmFjdG9yczogX3NlZ29ldWlfZmFjdG9ycy5TZWdvZXVpUmVndWxhckZhY3RvcnMsXG4gICAgYmFzZVdpZHRoczogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsXG4gICAgYmFzZU1hcHBpbmc6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxcbiAgICBtZXRyaWNzOiBfc2Vnb2V1aV9mYWN0b3JzLlNlZ29ldWlSZWd1bGFyTWV0cmljc1xuICB9O1xuICB0W1wiU2Vnb2V1aS1Cb2xkXCJdID0ge1xuICAgIG5hbWU6IFwiTGliZXJhdGlvblNhbnMtQm9sZFwiLFxuICAgIGZhY3RvcnM6IF9zZWdvZXVpX2ZhY3RvcnMuU2Vnb2V1aUJvbGRGYWN0b3JzLFxuICAgIGJhc2VXaWR0aHM6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLFxuICAgIGJhc2VNYXBwaW5nOiBfbGliZXJhdGlvbnNhbnNfd2lkdGhzLkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmcsXG4gICAgbWV0cmljczogX3NlZ29ldWlfZmFjdG9ycy5TZWdvZXVpQm9sZE1ldHJpY3NcbiAgfTtcbiAgdFtcIlNlZ29ldWktSXRhbGljXCJdID0ge1xuICAgIG5hbWU6IFwiTGliZXJhdGlvblNhbnMtSXRhbGljXCIsXG4gICAgZmFjdG9yczogX3NlZ29ldWlfZmFjdG9ycy5TZWdvZXVpSXRhbGljRmFjdG9ycyxcbiAgICBiYXNlV2lkdGhzOiBfbGliZXJhdGlvbnNhbnNfd2lkdGhzLkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzLFxuICAgIGJhc2VNYXBwaW5nOiBfbGliZXJhdGlvbnNhbnNfd2lkdGhzLkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZyxcbiAgICBtZXRyaWNzOiBfc2Vnb2V1aV9mYWN0b3JzLlNlZ29ldWlJdGFsaWNNZXRyaWNzXG4gIH07XG4gIHRbXCJTZWdvZXVpLUJvbGRJdGFsaWNcIl0gPSB7XG4gICAgbmFtZTogXCJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljXCIsXG4gICAgZmFjdG9yczogX3NlZ29ldWlfZmFjdG9ycy5TZWdvZXVpQm9sZEl0YWxpY0ZhY3RvcnMsXG4gICAgYmFzZVdpZHRoczogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsXG4gICAgYmFzZU1hcHBpbmc6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyxcbiAgICBtZXRyaWNzOiBfc2Vnb2V1aV9mYWN0b3JzLlNlZ29ldWlCb2xkSXRhbGljTWV0cmljc1xuICB9O1xuICB0W1wiSGVsdmV0aWNhLVJlZ3VsYXJcIl0gPSB0LkhlbHZldGljYSA9IHtcbiAgICBuYW1lOiBcIkxpYmVyYXRpb25TYW5zLVJlZ3VsYXJcIixcbiAgICBmYWN0b3JzOiBfaGVsdmV0aWNhX2ZhY3RvcnMuSGVsdmV0aWNhUmVndWxhckZhY3RvcnMsXG4gICAgYmFzZVdpZHRoczogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsXG4gICAgYmFzZU1hcHBpbmc6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxcbiAgICBtZXRyaWNzOiBfaGVsdmV0aWNhX2ZhY3RvcnMuSGVsdmV0aWNhUmVndWxhck1ldHJpY3NcbiAgfTtcbiAgdFtcIkhlbHZldGljYS1Cb2xkXCJdID0ge1xuICAgIG5hbWU6IFwiTGliZXJhdGlvblNhbnMtQm9sZFwiLFxuICAgIGZhY3RvcnM6IF9oZWx2ZXRpY2FfZmFjdG9ycy5IZWx2ZXRpY2FCb2xkRmFjdG9ycyxcbiAgICBiYXNlV2lkdGhzOiBfbGliZXJhdGlvbnNhbnNfd2lkdGhzLkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocyxcbiAgICBiYXNlTWFwcGluZzogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nLFxuICAgIG1ldHJpY3M6IF9oZWx2ZXRpY2FfZmFjdG9ycy5IZWx2ZXRpY2FCb2xkTWV0cmljc1xuICB9O1xuICB0W1wiSGVsdmV0aWNhLUl0YWxpY1wiXSA9IHtcbiAgICBuYW1lOiBcIkxpYmVyYXRpb25TYW5zLUl0YWxpY1wiLFxuICAgIGZhY3RvcnM6IF9oZWx2ZXRpY2FfZmFjdG9ycy5IZWx2ZXRpY2FJdGFsaWNGYWN0b3JzLFxuICAgIGJhc2VXaWR0aHM6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsXG4gICAgYmFzZU1hcHBpbmc6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nLFxuICAgIG1ldHJpY3M6IF9oZWx2ZXRpY2FfZmFjdG9ycy5IZWx2ZXRpY2FJdGFsaWNNZXRyaWNzXG4gIH07XG4gIHRbXCJIZWx2ZXRpY2EtQm9sZEl0YWxpY1wiXSA9IHtcbiAgICBuYW1lOiBcIkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWNcIixcbiAgICBmYWN0b3JzOiBfaGVsdmV0aWNhX2ZhY3RvcnMuSGVsdmV0aWNhQm9sZEl0YWxpY0ZhY3RvcnMsXG4gICAgYmFzZVdpZHRoczogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsXG4gICAgYmFzZU1hcHBpbmc6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyxcbiAgICBtZXRyaWNzOiBfaGVsdmV0aWNhX2ZhY3RvcnMuSGVsdmV0aWNhQm9sZEl0YWxpY01ldHJpY3NcbiAgfTtcbn0pO1xuXG5mdW5jdGlvbiBnZXRYZmFGb250TmFtZShuYW1lKSB7XG4gIGNvbnN0IGZvbnROYW1lID0gKDAsIF9mb250c191dGlscy5ub3JtYWxpemVGb250TmFtZSkobmFtZSk7XG4gIGNvbnN0IGZvbnRNYXAgPSBnZXRYRkFGb250TWFwKCk7XG4gIHJldHVybiBmb250TWFwW2ZvbnROYW1lXTtcbn1cblxuZnVuY3Rpb24gZ2V0WGZhRm9udFdpZHRocyhuYW1lKSB7XG4gIGNvbnN0IGluZm8gPSBnZXRYZmFGb250TmFtZShuYW1lKTtcblxuICBpZiAoIWluZm8pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBiYXNlV2lkdGhzLFxuICAgIGJhc2VNYXBwaW5nLFxuICAgIGZhY3RvcnNcbiAgfSA9IGluZm87XG4gIGxldCByZXNjYWxlZEJhc2VXaWR0aHM7XG5cbiAgaWYgKCFmYWN0b3JzKSB7XG4gICAgcmVzY2FsZWRCYXNlV2lkdGhzID0gYmFzZVdpZHRocztcbiAgfSBlbHNlIHtcbiAgICByZXNjYWxlZEJhc2VXaWR0aHMgPSBiYXNlV2lkdGhzLm1hcCgodywgaSkgPT4gdyAqIGZhY3RvcnNbaV0pO1xuICB9XG5cbiAgbGV0IGN1cnJlbnRDb2RlID0gLTI7XG4gIGxldCBjdXJyZW50QXJyYXk7XG4gIGNvbnN0IG5ld1dpZHRocyA9IFtdO1xuXG4gIGZvciAoY29uc3QgW3VuaWNvZGUsIGdseXBoSW5kZXhdIG9mIGJhc2VNYXBwaW5nLm1hcCgoY2hhclVuaWNvZGUsIGluZGV4KSA9PiBbY2hhclVuaWNvZGUsIGluZGV4XSkuc29ydCgoW3VuaWNvZGUxXSwgW3VuaWNvZGUyXSkgPT4gdW5pY29kZTEgLSB1bmljb2RlMikpIHtcbiAgICBpZiAodW5pY29kZSA9PT0gLTEpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICh1bmljb2RlID09PSBjdXJyZW50Q29kZSArIDEpIHtcbiAgICAgIGN1cnJlbnRBcnJheS5wdXNoKHJlc2NhbGVkQmFzZVdpZHRoc1tnbHlwaEluZGV4XSk7XG4gICAgICBjdXJyZW50Q29kZSArPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Q29kZSA9IHVuaWNvZGU7XG4gICAgICBjdXJyZW50QXJyYXkgPSBbcmVzY2FsZWRCYXNlV2lkdGhzW2dseXBoSW5kZXhdXTtcbiAgICAgIG5ld1dpZHRocy5wdXNoKHVuaWNvZGUsIGN1cnJlbnRBcnJheSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld1dpZHRocztcbn1cblxuZnVuY3Rpb24gZ2V0WGZhRm9udERpY3QobmFtZSkge1xuICBjb25zdCB3aWR0aHMgPSBnZXRYZmFGb250V2lkdGhzKG5hbWUpO1xuICBjb25zdCBkaWN0ID0gbmV3IF9wcmltaXRpdmVzLkRpY3QobnVsbCk7XG4gIGRpY3Quc2V0KFwiQmFzZUZvbnRcIiwgX3ByaW1pdGl2ZXMuTmFtZS5nZXQobmFtZSkpO1xuICBkaWN0LnNldChcIlR5cGVcIiwgX3ByaW1pdGl2ZXMuTmFtZS5nZXQoXCJGb250XCIpKTtcbiAgZGljdC5zZXQoXCJTdWJ0eXBlXCIsIF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiQ0lERm9udFR5cGUyXCIpKTtcbiAgZGljdC5zZXQoXCJFbmNvZGluZ1wiLCBfcHJpbWl0aXZlcy5OYW1lLmdldChcIklkZW50aXR5LUhcIikpO1xuICBkaWN0LnNldChcIkNJRFRvR0lETWFwXCIsIF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiSWRlbnRpdHlcIikpO1xuICBkaWN0LnNldChcIldcIiwgd2lkdGhzKTtcbiAgZGljdC5zZXQoXCJGaXJzdENoYXJcIiwgd2lkdGhzWzBdKTtcbiAgZGljdC5zZXQoXCJMYXN0Q2hhclwiLCB3aWR0aHNbd2lkdGhzLmxlbmd0aCAtIDJdICsgd2lkdGhzW3dpZHRocy5sZW5ndGggLSAxXS5sZW5ndGggLSAxKTtcbiAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBfcHJpbWl0aXZlcy5EaWN0KG51bGwpO1xuICBkaWN0LnNldChcIkZvbnREZXNjcmlwdG9yXCIsIGRlc2NyaXB0b3IpO1xuICBjb25zdCBzeXN0ZW1JbmZvID0gbmV3IF9wcmltaXRpdmVzLkRpY3QobnVsbCk7XG4gIHN5c3RlbUluZm8uc2V0KFwiT3JkZXJpbmdcIiwgXCJJZGVudGl0eVwiKTtcbiAgc3lzdGVtSW5mby5zZXQoXCJSZWdpc3RyeVwiLCBcIkFkb2JlXCIpO1xuICBzeXN0ZW1JbmZvLnNldChcIlN1cHBsZW1lbnRcIiwgMCk7XG4gIGRpY3Quc2V0KFwiQ0lEU3lzdGVtSW5mb1wiLCBzeXN0ZW1JbmZvKTtcbiAgcmV0dXJuIGRpY3Q7XG59XG5cbi8qKiovIH0pLFxuLyogMTMgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuQ2FsaWJyaVJlZ3VsYXJNZXRyaWNzID0gZXhwb3J0cy5DYWxpYnJpUmVndWxhckZhY3RvcnMgPSBleHBvcnRzLkNhbGlicmlJdGFsaWNNZXRyaWNzID0gZXhwb3J0cy5DYWxpYnJpSXRhbGljRmFjdG9ycyA9IGV4cG9ydHMuQ2FsaWJyaUJvbGRNZXRyaWNzID0gZXhwb3J0cy5DYWxpYnJpQm9sZEl0YWxpY01ldHJpY3MgPSBleHBvcnRzLkNhbGlicmlCb2xkSXRhbGljRmFjdG9ycyA9IGV4cG9ydHMuQ2FsaWJyaUJvbGRGYWN0b3JzID0gdm9pZCAwO1xuY29uc3QgQ2FsaWJyaUJvbGRGYWN0b3JzID0gWzEuMzg3NywgMSwgMSwgMSwgMC45NzgwMSwgMC45MjQ4MiwgMC44OTU1MiwgMC45MTEzMywgMC44MTk4OCwgMC45NzU2NiwgMC45ODE1MiwgMC45MzU0OCwgMC45MzU0OCwgMS4yNzk4LCAwLjg1Mjg0LCAwLjkyNzk0LCAxLCAwLjk2MTM0LCAxLjU0NjU3LCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjgyODQ1LCAwLjgyODQ1LCAwLjg1Mjg0LCAwLjg1Mjg0LCAwLjg1Mjg0LCAwLjc1ODU5LCAwLjkyMTM4LCAwLjgzOTA4LCAwLjc3NjIsIDAuNzMyOTMsIDAuODcyODksIDAuNzMxMzMsIDAuNzUxNCwgMC44MTkyMSwgMC44NzM1NiwgMC45NTk1OCwgMC41OTUyNiwgMC43NTcyNywgMC42OTIyNSwgMS4wNDkyNCwgMC45MTIxLCAwLjg2OTQzLCAwLjc5Nzk1LCAwLjg4MTk4LCAwLjc3OTU4LCAwLjcwODY0LCAwLjgxMDU1LCAwLjkwMzk5LCAwLjg4NjUzLCAwLjk2MDE3LCAwLjgyNTc3LCAwLjc3ODkyLCAwLjc4MjU3LCAwLjk3NTA3LCAxLjU0NjU3LCAwLjk3NTA3LCAwLjg1Mjg0LCAwLjg5NTUyLCAwLjkwMTc2LCAwLjg4NzYyLCAwLjg3ODUsIDAuNzUyNDEsIDAuODc4NSwgMC45MDUxOCwgMC45NTAxNSwgMC43NzYxOCwgMC44Nzg1LCAwLjg4NDAxLCAwLjkxOTE2LCAwLjg2MzA0LCAwLjg4NDAxLCAwLjkxNDg4LCAwLjg3ODUsIDAuODgwMSwgMC44Nzg1LCAwLjg3ODUsIDAuOTEzNDMsIDAuNzE3MywgMS4wNDEwNiwgMC44Nzg1LCAwLjg1MDc1LCAwLjk1Nzk0LCAwLjgyNjE2LCAwLjg1MTYyLCAwLjc5NDkyLCAwLjg4MzMxLCAxLjY5ODA4LCAwLjg4MzMxLCAwLjg1Mjg0LCAwLjk3ODAxLCAwLjg5NTUyLCAwLjkxMTMzLCAwLjg5NTUyLCAwLjkxMTMzLCAxLjc4MDEsIDAuODk1NTIsIDEuMjQ0ODcsIDEuMTMyNTQsIDEuMTI0MDEsIDAuOTY4MzksIDAuODUyODQsIDAuNjg3ODcsIDAuNzA2NDUsIDAuODU1OTIsIDAuOTA3NDcsIDEuMDE0NjYsIDEuMDA4OCwgMC45MDMyMywgMSwgMS4wNzQ2MywgMSwgMC45MTA1NiwgMC43NTgwNiwgMS4xOTExOCwgMC45NjgzOSwgMC43ODg2NCwgMC44Mjg0NSwgMC44NDEzMywgMC43NTg1OSwgMC44MzkwOCwgMC44MzkwOCwgMC44MzkwOCwgMC44MzkwOCwgMC44MzkwOCwgMC44MzkwOCwgMC43NzUzOSwgMC43MzI5MywgMC43MzEzMywgMC43MzEzMywgMC43MzEzMywgMC43MzEzMywgMC45NTk1OCwgMC45NTk1OCwgMC45NTk1OCwgMC45NTk1OCwgMC44ODUwNiwgMC45MTIxLCAwLjg2OTQzLCAwLjg2OTQzLCAwLjg2OTQzLCAwLjg2OTQzLCAwLjg2OTQzLCAwLjg1Mjg0LCAwLjg3NTA4LCAwLjkwMzk5LCAwLjkwMzk5LCAwLjkwMzk5LCAwLjkwMzk5LCAwLjc3ODkyLCAwLjc5Nzk1LCAwLjkwODA3LCAwLjg4NzYyLCAwLjg4NzYyLCAwLjg4NzYyLCAwLjg4NzYyLCAwLjg4NzYyLCAwLjg4NzYyLCAwLjg3MTUsIDAuNzUyNDEsIDAuOTA1MTgsIDAuOTA1MTgsIDAuOTA1MTgsIDAuOTA1MTgsIDAuODg0MDEsIDAuODg0MDEsIDAuODg0MDEsIDAuODg0MDEsIDAuODc4NSwgMC44Nzg1LCAwLjg4MDEsIDAuODgwMSwgMC44ODAxLCAwLjg4MDEsIDAuODgwMSwgMC45MDc0NywgMC44OTA0OSwgMC44Nzg1LCAwLjg3ODUsIDAuODc4NSwgMC44Nzg1LCAwLjg1MTYyLCAwLjg3ODUsIDAuODUxNjIsIDAuODM5MDgsIDAuODg3NjIsIDAuODM5MDgsIDAuODg3NjIsIDAuODM5MDgsIDAuODg3NjIsIDAuNzMyOTMsIDAuNzUyNDEsIDAuNzMyOTMsIDAuNzUyNDEsIDAuNzMyOTMsIDAuNzUyNDEsIDAuNzMyOTMsIDAuNzUyNDEsIDAuODcyODksIDAuODMwMTYsIDAuODg1MDYsIDAuOTMxMjUsIDAuNzMxMzMsIDAuOTA1MTgsIDAuNzMxMzMsIDAuOTA1MTgsIDAuNzMxMzMsIDAuOTA1MTgsIDAuNzMxMzMsIDAuOTA1MTgsIDAuNzMxMzMsIDAuOTA1MTgsIDAuODE5MjEsIDAuNzc2MTgsIDAuODE5MjEsIDAuNzc2MTgsIDAuODE5MjEsIDAuNzc2MTgsIDEsIDEsIDAuODczNTYsIDAuODc4NSwgMC45MTA3NSwgMC44OTYwOCwgMC45NTk1OCwgMC44ODQwMSwgMC45NTk1OCwgMC44ODQwMSwgMC45NTk1OCwgMC44ODQwMSwgMC45NTk1OCwgMC44ODQwMSwgMC45NTk1OCwgMC44ODQwMSwgMC43NjIyOSwgMC45MDE2NywgMC41OTUyNiwgMC45MTkxNiwgMSwgMSwgMC44NjMwNCwgMC42OTIyNSwgMC44ODQwMSwgMSwgMSwgMC43MDQyNCwgMC43OTQ2OCwgMC45MTkyNiwgMC44ODE3NSwgMC43MDgyMywgMC45NDkwMywgMC45MTIxLCAwLjg3ODUsIDEsIDEsIDAuOTEyMSwgMC44Nzg1LCAwLjg3ODAyLCAwLjg4NjU2LCAwLjg3ODUsIDAuODY5NDMsIDAuODgwMSwgMC44Njk0MywgMC44ODAxLCAwLjg2OTQzLCAwLjg4MDEsIDAuODc0MDIsIDAuODkyOTEsIDAuNzc5NTgsIDAuOTEzNDMsIDEsIDEsIDAuNzc5NTgsIDAuOTEzNDMsIDAuNzA4NjQsIDAuNzE3MywgMC43MDg2NCwgMC43MTczLCAwLjcwODY0LCAwLjcxNzMsIDAuNzA4NjQsIDAuNzE3MywgMSwgMSwgMC44MTA1NSwgMC43NTg0MSwgMC44MTA1NSwgMS4wNjQ1MiwgMC45MDM5OSwgMC44Nzg1LCAwLjkwMzk5LCAwLjg3ODUsIDAuOTAzOTksIDAuODc4NSwgMC45MDM5OSwgMC44Nzg1LCAwLjkwMzk5LCAwLjg3ODUsIDAuOTAzOTksIDAuODc4NSwgMC45NjAxNywgMC45NTc5NCwgMC43Nzg5MiwgMC44NTE2MiwgMC43Nzg5MiwgMC43ODI1NywgMC43OTQ5MiwgMC43ODI1NywgMC43OTQ5MiwgMC43ODI1NywgMC43OTQ5MiwgMC45Mjk3LCAwLjU2ODkyLCAwLjgzOTA4LCAwLjg4NzYyLCAwLjc3NTM5LCAwLjg3MTUsIDAuODc1MDgsIDAuODkwNDksIDEsIDEsIDAuODEwNTUsIDEuMDQxMDYsIDEuMjA1MjgsIDEuMjA1MjgsIDEsIDEuMTU1NDMsIDAuNzA2NzQsIDAuOTgzODcsIDAuOTQ3MjEsIDEuMzM0MzEsIDEuNDU4OTQsIDAuOTUxNjEsIDEuMDYzMDMsIDAuODM5MDgsIDAuODAzNTIsIDAuNTcxODQsIDAuNjk2NSwgMC41NjI4OSwgMC44MjAwMSwgMC41NjAyOSwgMC44MTIzNSwgMS4wMjk4OCwgMC44MzkwOCwgMC43NzYyLCAwLjY4MTU2LCAwLjgwMzY3LCAwLjczMTMzLCAwLjc4MjU3LCAwLjg3MzU2LCAwLjg2OTQzLCAwLjk1OTU4LCAwLjc1NzI3LCAwLjg5MDE5LCAxLjA0OTI0LCAwLjkxMjEsIDAuNzY0OCwgMC44Njk0MywgMC44NzM1NiwgMC43OTc5NSwgMC43ODI3NSwgMC44MTA1NSwgMC43Nzg5MiwgMC45NzYyLCAwLjgyNTc3LCAwLjk5ODE5LCAwLjg0ODk2LCAwLjk1OTU4LCAwLjc3ODkyLCAwLjk2MTA4LCAxLjAxNDA3LCAwLjg5MDQ5LCAxLjAyOTg4LCAwLjk0MjExLCAwLjk2MTA4LCAwLjg5MzYsIDAuODQwMjEsIDAuODc4NDIsIDAuOTYzOTksIDAuNzkxMDksIDAuODkwNDksIDEuMDA4MTMsIDEuMDI5ODgsIDAuODYwNzcsIDAuODc0NDUsIDAuOTIwOTksIDAuODQ3MjMsIDAuODY1MTMsIDAuODgwMSwgMC43NTYzOCwgMC44NTcxNCwgMC43ODIxNiwgMC43OTU4NiwgMC44Nzk2NSwgMC45NDIxMSwgMC45Nzc0NywgMC43ODI4NywgMC45NzkyNiwgMC44NDk3MSwgMS4wMjk4OCwgMC45NDIxMSwgMC44ODAxLCAwLjk0MjExLCAwLjg0OTcxLCAwLjczMTMzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjkwMjY0LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjkwNTE4LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjkwNTQ4LCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk2MDE3LCAwLjk1Nzk0LCAwLjk2MDE3LCAwLjk1Nzk0LCAwLjk2MDE3LCAwLjk1Nzk0LCAwLjc3ODkyLCAwLjg1MTYyLCAxLCAxLCAwLjg5NTUyLCAwLjkwNTI3LCAxLCAwLjkwMzYzLCAwLjkyNzk0LCAwLjkyNzk0LCAwLjkyNzk0LCAwLjkyNzk0LCAwLjg3MDEyLCAwLjg3MDEyLCAwLjg3MDEyLCAwLjg5NTUyLCAwLjg5NTUyLCAxLjQyMjU5LCAwLjcxMTQzLCAxLjA2MTUyLCAxLCAxLCAxLjAzMzcyLCAxLjAzMzcyLCAwLjk3MTcxLCAxLjQ5NTYsIDIuMjgwNywgMC45MzgzNSwgMC44MzQwNiwgMC45MTEzMywgMC44NDEwNywgMC45MTEzMywgMSwgMSwgMSwgMC43MjAyMSwgMSwgMS4yMzEwOCwgMC44MzQ4OSwgMC44ODUyNSwgMC44ODUyNSwgMC44MTQ5OSwgMC45MDUyNywgMS44MTA1NSwgMC45MDUyNywgMS44MTA1NSwgMS4zMTAwNiwgMS41MzcxMSwgMC45NDQzNCwgMS4wODY5NiwgMSwgMC45NTAxOCwgMC43NzE5MiwgMC44NTI4NCwgMC45MDc0NywgMS4xNzUzNCwgMC42OTgyNSwgMC45NzE2LCAxLjM3MDc3LCAwLjkwNzQ3LCAwLjkwNzQ3LCAwLjg1MzU2LCAwLjkwNzQ3LCAwLjkwNzQ3LCAxLjQ0OTQ3LCAwLjg1Mjg0LCAwLjg5NDEsIDAuODk0MSwgMC43MDU3MiwgMC44LCAwLjcwNTcyLCAwLjcwNTcyLCAwLjcwNTcyLCAwLjcwNTcyLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk5ODYyLCAwLjk5ODYyLCAxLCAxLCAxLCAxLCAxLCAxLjA4MDA0LCAwLjkxMDI3LCAxLCAxLCAxLCAwLjk5ODYyLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjkwNzI3LCAwLjkwNzI3LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxXTtcbmV4cG9ydHMuQ2FsaWJyaUJvbGRGYWN0b3JzID0gQ2FsaWJyaUJvbGRGYWN0b3JzO1xuY29uc3QgQ2FsaWJyaUJvbGRNZXRyaWNzID0ge1xuICBsaW5lSGVpZ2h0OiAxLjIyMDcsXG4gIGxpbmVHYXA6IDAuMjIwN1xufTtcbmV4cG9ydHMuQ2FsaWJyaUJvbGRNZXRyaWNzID0gQ2FsaWJyaUJvbGRNZXRyaWNzO1xuY29uc3QgQ2FsaWJyaUJvbGRJdGFsaWNGYWN0b3JzID0gWzEuMzg3NywgMSwgMSwgMSwgMC45NzgwMSwgMC45MjQ4MiwgMC44OTU1MiwgMC45MTEzMywgMC44MTk4OCwgMC45NzU2NiwgMC45ODE1MiwgMC45MzU0OCwgMC45MzU0OCwgMS4yNzk4LCAwLjg1Mjg0LCAwLjkyNzk0LCAxLCAwLjk2MTM0LCAxLjU2MjM5LCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjgyODQ1LCAwLjgyODQ1LCAwLjg1Mjg0LCAwLjg1Mjg0LCAwLjg1Mjg0LCAwLjc1ODU5LCAwLjkyMTM4LCAwLjgzOTA4LCAwLjc3NjIsIDAuNzE4MDUsIDAuODcyODksIDAuNzMxMzMsIDAuNzUxNCwgMC44MTkyMSwgMC44NzM1NiwgMC45NTk1OCwgMC41OTUyNiwgMC43NTcyNywgMC42OTIyNSwgMS4wNDkyNCwgMC45MDg3MiwgMC44NTkzOCwgMC43OTc5NSwgMC44NzA2OCwgMC43Nzk1OCwgMC42OTc2NiwgMC44MTA1NSwgMC45MDM5OSwgMC44ODY1MywgMC45NjA2OCwgMC44MjU3NywgMC43Nzg5MiwgMC43ODI1NywgMC45NzUwNywgMS41MjksIDAuOTc1MDcsIDAuODUyODQsIDAuODk1NTIsIDAuOTAxNzYsIDAuOTQ5MDgsIDAuODY0MTEsIDAuNzQwMTIsIDAuODY0MTEsIDAuODgzMjMsIDAuOTUwMTUsIDAuODY0MTEsIDAuODYzMzEsIDAuODg0MDEsIDAuOTE5MTYsIDAuODYzMDQsIDAuODg0MDEsIDAuOTAzOSwgMC44NjMzMSwgMC44NjMzMSwgMC44NjQxMSwgMC44NjQxMSwgMC45MDQ2NCwgMC43MDg1MiwgMS4wNDEwNiwgMC44NjMzMSwgMC44NDM3MiwgMC45NTc5NCwgMC44MjYxNiwgMC44NDU0OCwgMC43OTQ5MiwgMC44ODMzMSwgMS42OTgwOCwgMC44ODMzMSwgMC44NTI4NCwgMC45NzgwMSwgMC44OTU1MiwgMC45MTEzMywgMC44OTU1MiwgMC45MTEzMywgMS43ODAxLCAwLjg5NTUyLCAxLjI0NDg3LCAxLjEzMjU0LCAxLjE5MTI5LCAwLjk2ODM5LCAwLjg1Mjg0LCAwLjY4Nzg3LCAwLjcwNjQ1LCAwLjg1NTkyLCAwLjkwNzQ3LCAxLjAxNDY2LCAxLjAwODgsIDAuOTAzMjMsIDEsIDEuMDc0NjMsIDEsIDAuOTEwNTYsIDAuNzU4MDYsIDEuMTkxMTgsIDAuOTY4MzksIDAuNzg4NjQsIDAuODI4NDUsIDAuODQxMzMsIDAuNzU4NTksIDAuODM5MDgsIDAuODM5MDgsIDAuODM5MDgsIDAuODM5MDgsIDAuODM5MDgsIDAuODM5MDgsIDAuNzc1MzksIDAuNzE4MDUsIDAuNzMxMzMsIDAuNzMxMzMsIDAuNzMxMzMsIDAuNzMxMzMsIDAuOTU5NTgsIDAuOTU5NTgsIDAuOTU5NTgsIDAuOTU5NTgsIDAuODg1MDYsIDAuOTA4NzIsIDAuODU5MzgsIDAuODU5MzgsIDAuODU5MzgsIDAuODU5MzgsIDAuODU5MzgsIDAuODUyODQsIDAuODcwNjgsIDAuOTAzOTksIDAuOTAzOTksIDAuOTAzOTksIDAuOTAzOTksIDAuNzc4OTIsIDAuNzk3OTUsIDAuOTA4MDcsIDAuOTQ5MDgsIDAuOTQ5MDgsIDAuOTQ5MDgsIDAuOTQ5MDgsIDAuOTQ5MDgsIDAuOTQ5MDgsIDAuODU4ODcsIDAuNzQwMTIsIDAuODgzMjMsIDAuODgzMjMsIDAuODgzMjMsIDAuODgzMjMsIDAuODg0MDEsIDAuODg0MDEsIDAuODg0MDEsIDAuODg0MDEsIDAuODc4NSwgMC44NjMzMSwgMC44NjMzMSwgMC44NjMzMSwgMC44NjMzMSwgMC44NjMzMSwgMC44NjMzMSwgMC45MDc0NywgMC44OTA0OSwgMC44NjMzMSwgMC44NjMzMSwgMC44NjMzMSwgMC44NjMzMSwgMC44NDU0OCwgMC44NjQxMSwgMC44NDU0OCwgMC44MzkwOCwgMC45NDkwOCwgMC44MzkwOCwgMC45NDkwOCwgMC44MzkwOCwgMC45NDkwOCwgMC43MTgwNSwgMC43NDAxMiwgMC43MTgwNSwgMC43NDAxMiwgMC43MTgwNSwgMC43NDAxMiwgMC43MTgwNSwgMC43NDAxMiwgMC44NzI4OSwgMC43OTUzOCwgMC44ODUwNiwgMC45MjcyNiwgMC43MzEzMywgMC44ODMyMywgMC43MzEzMywgMC44ODMyMywgMC43MzEzMywgMC44ODMyMywgMC43MzEzMywgMC44ODMyMywgMC43MzEzMywgMC44ODMyMywgMC44MTkyMSwgMC44NjQxMSwgMC44MTkyMSwgMC44NjQxMSwgMC44MTkyMSwgMC44NjQxMSwgMSwgMSwgMC44NzM1NiwgMC44NjMzMSwgMC45MTA3NSwgMC44Nzc3LCAwLjk1OTU4LCAwLjg4NDAxLCAwLjk1OTU4LCAwLjg4NDAxLCAwLjk1OTU4LCAwLjg4NDAxLCAwLjk1OTU4LCAwLjg4NDAxLCAwLjk1OTU4LCAwLjg4NDAxLCAwLjc2NDY3LCAwLjkwMTY3LCAwLjU5NTI2LCAwLjkxOTE2LCAxLCAxLCAwLjg2MzA0LCAwLjY5MjI1LCAwLjg4NDAxLCAxLCAxLCAwLjcwNDI0LCAwLjc3MzEyLCAwLjkxOTI2LCAwLjg4MTc1LCAwLjcwODIzLCAwLjk0OTAzLCAwLjkwODcyLCAwLjg2MzMxLCAxLCAxLCAwLjkwODcyLCAwLjg2MzMxLCAwLjg2OTA2LCAwLjg4MTE2LCAwLjg2MzMxLCAwLjg1OTM4LCAwLjg2MzMxLCAwLjg1OTM4LCAwLjg2MzMxLCAwLjg1OTM4LCAwLjg2MzMxLCAwLjg3NDAyLCAwLjg2NTQ5LCAwLjc3OTU4LCAwLjkwNDY0LCAxLCAxLCAwLjc3OTU4LCAwLjkwNDY0LCAwLjY5NzY2LCAwLjcwODUyLCAwLjY5NzY2LCAwLjcwODUyLCAwLjY5NzY2LCAwLjcwODUyLCAwLjY5NzY2LCAwLjcwODUyLCAxLCAxLCAwLjgxMDU1LCAwLjc1ODQxLCAwLjgxMDU1LCAxLjA2NDUyLCAwLjkwMzk5LCAwLjg2MzMxLCAwLjkwMzk5LCAwLjg2MzMxLCAwLjkwMzk5LCAwLjg2MzMxLCAwLjkwMzk5LCAwLjg2MzMxLCAwLjkwMzk5LCAwLjg2MzMxLCAwLjkwMzk5LCAwLjg2MzMxLCAwLjk2MDY4LCAwLjk1Nzk0LCAwLjc3ODkyLCAwLjg0NTQ4LCAwLjc3ODkyLCAwLjc4MjU3LCAwLjc5NDkyLCAwLjc4MjU3LCAwLjc5NDkyLCAwLjc4MjU3LCAwLjc5NDkyLCAwLjkyOTcsIDAuNTY4OTIsIDAuODM5MDgsIDAuOTQ5MDgsIDAuNzc1MzksIDAuODU4ODcsIDAuODcwNjgsIDAuODkwNDksIDEsIDEsIDAuODEwNTUsIDEuMDQxMDYsIDEuMjA1MjgsIDEuMjA1MjgsIDEsIDEuMTU1NDMsIDAuNzAwODgsIDAuOTgzODcsIDAuOTQ3MjEsIDEuMzM0MzEsIDEuNDU4OTQsIDAuOTUxNjEsIDEuNDgzODcsIDAuODM5MDgsIDAuODAzNTIsIDAuNTcxMTgsIDAuNjk2NSwgMC41NjM0NywgMC43OTE3OSwgMC41NTg1MywgMC44MDM0NiwgMS4wMjk4OCwgMC44MzkwOCwgMC43NzYyLCAwLjY3MTc0LCAwLjg2MDM2LCAwLjczMTMzLCAwLjc4MjU3LCAwLjg3MzU2LCAwLjg2NDQxLCAwLjk1OTU4LCAwLjc1NzI3LCAwLjg5MDE5LCAxLjA0OTI0LCAwLjkwODcyLCAwLjc0ODg5LCAwLjg1OTM4LCAwLjg3ODkxLCAwLjc5Nzk1LCAwLjc5NTcsIDAuODEwNTUsIDAuNzc4OTIsIDAuOTc0NDcsIDAuODI1NzcsIDAuOTc0NjYsIDAuODcxNzksIDAuOTU5NTgsIDAuNzc4OTIsIDAuOTQyNTIsIDAuOTU2MTIsIDAuODc1MywgMS4wMjk4OCwgMC45MjczMywgMC45NDI1MiwgMC44NzQxMSwgMC44NDAyMSwgMC44NzI4LCAwLjk1NjEyLCAwLjc0MDgxLCAwLjg3NTMsIDEuMDIxODksIDEuMDI5ODgsIDAuODQ4MTQsIDAuODc0NDUsIDAuOTE4MjIsIDAuODQ3MjMsIDAuODU2NjgsIDAuODYzMzEsIDAuODEzNDQsIDAuODc1ODEsIDAuNzY0MjIsIDAuODIwNDYsIDAuOTYwNTcsIDAuOTI3MzMsIDAuOTkzNzUsIDAuNzgwMjIsIDAuOTU0NTIsIDAuODYwMTUsIDEuMDI5ODgsIDAuOTI3MzMsIDAuODYzMzEsIDAuOTI3MzMsIDAuODYwMTUsIDAuNzMxMzMsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuOTA2MzEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuODgzMjMsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuODUxNzQsIDEsIDEsIDEsIDEsIDEsIDEsIDAuOTYwNjgsIDAuOTU3OTQsIDAuOTYwNjgsIDAuOTU3OTQsIDAuOTYwNjgsIDAuOTU3OTQsIDAuNzc4OTIsIDAuODQ1NDgsIDEsIDEsIDAuODk1NTIsIDAuOTA1MjcsIDEsIDAuOTAzNjMsIDAuOTI3OTQsIDAuOTI3OTQsIDAuOTI3OTQsIDAuODk4MDcsIDAuODcwMTIsIDAuODcwMTIsIDAuODcwMTIsIDAuODk1NTIsIDAuODk1NTIsIDEuNDIyNTksIDAuNzEwOTQsIDEuMDYxNTIsIDEsIDEsIDEuMDMzNzIsIDEuMDMzNzIsIDAuOTcxNzEsIDEuNDk1NiwgMi4yODA3LCAwLjkyOTcyLCAwLjgzNDA2LCAwLjkxMTMzLCAwLjgzMzI2LCAwLjkxMTMzLCAxLCAxLCAxLCAwLjcyMDIxLCAxLCAxLjIzMTA4LCAwLjgzNDg5LCAwLjg4NTI1LCAwLjg4NTI1LCAwLjgxNDk5LCAwLjkwNjE2LCAxLjgxMDU1LCAwLjkwNTI3LCAxLjgxMDU1LCAxLjMxMDcsIDEuNTM3MTEsIDAuOTQ0MzQsIDEuMDg2OTYsIDEsIDAuOTUwMTgsIDAuNzcxOTIsIDAuODUyODQsIDAuOTA3NDcsIDEuMTc1MzQsIDAuNjk4MjUsIDAuOTcxNiwgMS4zNzA3NywgMC45MDc0NywgMC45MDc0NywgMC44NTM1NiwgMC45MDc0NywgMC45MDc0NywgMS40NDk0NywgMC44NTI4NCwgMC44OTQxLCAwLjg5NDEsIDAuNzA1NzIsIDAuOCwgMC43MDU3MiwgMC43MDU3MiwgMC43MDU3MiwgMC43MDU3MiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC45OTg2MiwgMC45OTg2MiwgMSwgMSwgMSwgMSwgMSwgMS4wODAwNCwgMC45MTAyNywgMSwgMSwgMSwgMC45OTg2MiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC45MDcyNywgMC45MDcyNywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMV07XG5leHBvcnRzLkNhbGlicmlCb2xkSXRhbGljRmFjdG9ycyA9IENhbGlicmlCb2xkSXRhbGljRmFjdG9ycztcbmNvbnN0IENhbGlicmlCb2xkSXRhbGljTWV0cmljcyA9IHtcbiAgbGluZUhlaWdodDogMS4yMjA3LFxuICBsaW5lR2FwOiAwLjIyMDdcbn07XG5leHBvcnRzLkNhbGlicmlCb2xkSXRhbGljTWV0cmljcyA9IENhbGlicmlCb2xkSXRhbGljTWV0cmljcztcbmNvbnN0IENhbGlicmlJdGFsaWNGYWN0b3JzID0gWzEuMzg3NywgMSwgMSwgMSwgMS4xNzIyMywgMS4xMjkzLCAwLjg5NTUyLCAwLjkxMTMzLCAwLjgwMzk1LCAxLjAyMjY5LCAxLjE1NjAxLCAwLjkxMDU2LCAwLjkxMDU2LCAxLjI3OTgsIDAuODUyODQsIDAuODk4MDcsIDEsIDAuOTA4NjEsIDEuMzk1NDMsIDAuOTExMzMsIDAuOTExMzMsIDAuOTExMzMsIDAuOTExMzMsIDAuOTExMzMsIDAuOTExMzMsIDAuOTExMzMsIDAuOTExMzMsIDAuOTExMzMsIDAuOTExMzMsIDAuOTYzMDksIDAuOTYzMDksIDAuODUyODQsIDAuODUyODQsIDAuODUyODQsIDAuODMzMTksIDAuODgwNzEsIDAuODY3NSwgMC44MTU1MiwgMC43MjM0NiwgMC44NTE5MywgMC43MzIwNiwgMC43NTIyLCAwLjgxMTA1LCAwLjg2Mjc1LCAwLjkwNjg1LCAwLjYzNzcsIDAuNzc4OTIsIDAuNzU1OTMsIDEuMDI2MzgsIDAuODkyNDksIDAuODQxMTgsIDAuNzc0NTIsIDAuODUzNzQsIDAuNzUxODYsIDAuNjc3ODksIDAuNzk3NzYsIDAuODg4NDQsIDAuODUwNjYsIDAuOTQzMDksIDAuNzc4MTgsIDAuNzMwNiwgMC43NjY1OSwgMS4xMDM2OSwgMS4zODMxMywgMS4xMDM2OSwgMS4wNjEzOSwgMC44OTU1MiwgMC44NzM5LCAwLjkyNDUsIDAuOTI0NSwgMC44MzIwMywgMC45MjQ1LCAwLjg1ODY1LCAxLjA5ODQyLCAwLjkyNDUsIDAuOTI0NSwgMS4wMzI5NywgMS4wNzY5MiwgMC45MDkxOCwgMS4wMzI5NywgMC45NDk1OSwgMC45MjQ1LCAwLjkyMjc0LCAwLjkyNDUsIDAuOTI0NSwgMS4wMjkzMywgMC43NzgzMiwgMS4yMDU2MiwgMC45MjQ1LCAwLjg5MTYsIDAuOTg5ODYsIDAuODY2MjEsIDAuODk0NTMsIDAuNzkwMDQsIDAuOTQxNTIsIDEuNzcyNTYsIDAuOTQxNTIsIDAuODUyODQsIDAuOTc4MDEsIDAuODk1NTIsIDAuOTExMzMsIDAuODk1NTIsIDAuOTExMzMsIDEuOTE3MjksIDAuODk1NTIsIDEuMTc4ODksIDEuMTMyNTQsIDEuMTYzNTksIDAuOTIwOTgsIDAuODUyODQsIDAuNjg3ODcsIDAuNzEzNTMsIDAuODQ3MzcsIDAuOTA3NDcsIDEuMDA4OCwgMS4wMDQ0LCAwLjg3NjgzLCAxLCAxLjA5MDkxLCAxLCAwLjkyMjI5LCAwLjczOSwgMS4xNTY0MiwgMC45MjA5OCwgMC43NjI4OCwgMC44MDUwNCwgMC44MDk3MiwgMC43NTg1OSwgMC44Njc1LCAwLjg2NzUsIDAuODY3NSwgMC44Njc1LCAwLjg2NzUsIDAuODY3NSwgMC43NjMxOCwgMC43MjM0NiwgMC43MzIwNiwgMC43MzIwNiwgMC43MzIwNiwgMC43MzIwNiwgMC45MDY4NSwgMC45MDY4NSwgMC45MDY4NSwgMC45MDY4NSwgMC44NjQ3NywgMC44OTI0OSwgMC44NDExOCwgMC44NDExOCwgMC44NDExOCwgMC44NDExOCwgMC44NDExOCwgMC44NTI4NCwgMC44NDU1NywgMC44ODg0NCwgMC44ODg0NCwgMC44ODg0NCwgMC44ODg0NCwgMC43MzA2LCAwLjc3NDUyLCAwLjg2MzMxLCAwLjkyNDUsIDAuOTI0NSwgMC45MjQ1LCAwLjkyNDUsIDAuOTI0NSwgMC45MjQ1LCAwLjg0ODQzLCAwLjgzMjAzLCAwLjg1ODY1LCAwLjg1ODY1LCAwLjg1ODY1LCAwLjg1ODY1LCAwLjgyNjAxLCAwLjgyNjAxLCAwLjgyNjAxLCAwLjgyNjAxLCAwLjk0NDY5LCAwLjkyNDUsIDAuOTIyNzQsIDAuOTIyNzQsIDAuOTIyNzQsIDAuOTIyNzQsIDAuOTIyNzQsIDAuOTA3NDcsIDAuODY2NTEsIDAuOTI0NSwgMC45MjQ1LCAwLjkyNDUsIDAuOTI0NSwgMC44OTQ1MywgMC45MjQ1LCAwLjg5NDUzLCAwLjg2NzUsIDAuOTI0NSwgMC44Njc1LCAwLjkyNDUsIDAuODY3NSwgMC45MjQ1LCAwLjcyMzQ2LCAwLjgzMjAzLCAwLjcyMzQ2LCAwLjgzMjAzLCAwLjcyMzQ2LCAwLjgzMjAzLCAwLjcyMzQ2LCAwLjgzMjAzLCAwLjg1MTkzLCAwLjg4NzUsIDAuODY0NzcsIDAuOTkwMzQsIDAuNzMyMDYsIDAuODU4NjUsIDAuNzMyMDYsIDAuODU4NjUsIDAuNzMyMDYsIDAuODU4NjUsIDAuNzMyMDYsIDAuODU4NjUsIDAuNzMyMDYsIDAuODU4NjUsIDAuODExMDUsIDAuOTI0NSwgMC44MTEwNSwgMC45MjQ1LCAwLjgxMTA1LCAwLjkyNDUsIDEsIDEsIDAuODYyNzUsIDAuOTI0NSwgMC45MDg3MiwgMC45MzU5MSwgMC45MDY4NSwgMC44MjYwMSwgMC45MDY4NSwgMC44MjYwMSwgMC45MDY4NSwgMC44MjYwMSwgMC45MDY4NSwgMS4wMzI5NywgMC45MDY4NSwgMC44MjYwMSwgMC43Nzg5NiwgMS4wNTYxMSwgMC42Mzc3LCAxLjA3NjkyLCAxLCAxLCAwLjkwOTE4LCAwLjc1NTkzLCAxLjAzMjk3LCAxLCAxLCAwLjc2MDMyLCAwLjkzNzUsIDAuOTgxNTYsIDAuOTM0MDcsIDAuNzcyNjEsIDEuMTE0MjksIDAuODkyNDksIDAuOTI0NSwgMSwgMSwgMC44OTI0OSwgMC45MjQ1LCAwLjkyNTM0LCAwLjg2Njk4LCAwLjkyNDUsIDAuODQxMTgsIDAuOTIyNzQsIDAuODQxMTgsIDAuOTIyNzQsIDAuODQxMTgsIDAuOTIyNzQsIDAuODY2NywgMC44NjI5MSwgMC43NTE4NiwgMS4wMjkzMywgMSwgMSwgMC43NTE4NiwgMS4wMjkzMywgMC42Nzc4OSwgMC43NzgzMiwgMC42Nzc4OSwgMC43NzgzMiwgMC42Nzc4OSwgMC43NzgzMiwgMC42Nzc4OSwgMC43NzgzMiwgMSwgMSwgMC43OTc3NiwgMC45NzY1NSwgMC43OTc3NiwgMS4yMzAyMywgMC44ODg0NCwgMC45MjQ1LCAwLjg4ODQ0LCAwLjkyNDUsIDAuODg4NDQsIDAuOTI0NSwgMC44ODg0NCwgMC45MjQ1LCAwLjg4ODQ0LCAwLjkyNDUsIDAuODg4NDQsIDAuOTI0NSwgMC45NDMwOSwgMC45ODk4NiwgMC43MzA2LCAwLjg5NDUzLCAwLjczMDYsIDAuNzY2NTksIDAuNzkwMDQsIDAuNzY2NTksIDAuNzkwMDQsIDAuNzY2NTksIDAuNzkwMDQsIDEuMDkyMzEsIDAuNTQ4NzMsIDAuODY3NSwgMC45MjQ1LCAwLjc2MzE4LCAwLjg0ODQzLCAwLjg0NTU3LCAwLjg2NjUxLCAxLCAxLCAwLjc5Nzc2LCAxLjIwNTYyLCAxLjE4NjIyLCAxLjE4NjIyLCAxLCAxLjE0MzcsIDAuNjcwMDksIDAuOTYzMzQsIDAuOTM2OTUsIDEuMzUxOTEsIDEuNDA5MDksIDAuOTUxNjEsIDEuNDgzODcsIDAuODY3NSwgMC45MDg2MSwgMC42MTkyLCAwLjczNjMsIDAuNjQ4MjQsIDAuODI0MTEsIDAuNTYzMjEsIDAuODU2OTYsIDEuMjM1MTYsIDAuODY3NSwgMC44MTU1MiwgMC43Mjg2LCAwLjg0MTM0LCAwLjczMjA2LCAwLjc2NjU5LCAwLjg2Mjc1LCAwLjg0MzY5LCAwLjkwNjg1LCAwLjc3ODkyLCAwLjg1ODcxLCAxLjAyNjM4LCAwLjg5MjQ5LCAwLjc1ODI4LCAwLjg0MTE4LCAwLjg1OTg0LCAwLjc3NDUyLCAwLjc2NDY2LCAwLjc5Nzc2LCAwLjczMDYsIDAuOTA3ODIsIDAuNzc4MTgsIDAuOTAzLCAwLjg3MjkxLCAwLjkwNjg1LCAwLjczMDYsIDAuOTkwNTgsIDEuMDM2NjcsIDAuOTQ2MzUsIDEuMjM1MTYsIDAuOTg0OSwgMC45OTA1OCwgMC45MjM5MywgMC44OTE2LCAwLjk0MiwgMS4wMzY2NywgMC43NTAyNiwgMC45NDYzNSwgMS4wMjk3LCAxLjIzNTE2LCAwLjkwOTE4LCAwLjk0MDQ4LCAwLjk4MjE3LCAwLjg5NzQ2LCAwLjg0MTUzLCAwLjkyMjc0LCAwLjgyNTA3LCAwLjg4ODMyLCAwLjg0NDM4LCAwLjg4MTc4LCAxLjAzNTI1LCAwLjk4NDksIDEuMDAyMjUsIDAuNzgwODYsIDAuOTcyNDgsIDAuODk0MDQsIDEuMjM1MTYsIDAuOTg0OSwgMC45MjI3NCwgMC45ODQ5LCAwLjg5NDA0LCAwLjczMjA2LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjg5NjkzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjg1ODY1LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjkwOTMzLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk0MzA5LCAwLjk4OTg2LCAwLjk0MzA5LCAwLjk4OTg2LCAwLjk0MzA5LCAwLjk4OTg2LCAwLjczMDYsIDAuODk0NTMsIDEsIDEsIDAuODk1NTIsIDAuOTA1MjcsIDEsIDAuOTAxODYsIDEuMTIzMDgsIDEuMTIzMDgsIDEuMTIzMDgsIDEuMTIzMDgsIDEuMjU2NiwgMS4yNTY2LCAxLjI1NjYsIDAuODk1NTIsIDAuODk1NTIsIDEuNDIyNTksIDAuNjg5OTQsIDEuMDM4MDksIDEsIDEsIDEuMDE3NiwgMS4wMTc2LCAxLjExNTIzLCAxLjQ5NTYsIDIuMDE0NjIsIDAuOTc4NTgsIDAuODI2MTYsIDAuOTExMzMsIDAuODM0MzcsIDAuOTExMzMsIDEsIDEsIDEsIDAuNzA1MDgsIDEsIDEuMjMxMDgsIDAuNzk4MDEsIDAuODQ0MjYsIDAuODQ0MjYsIDAuNzc0LCAwLjkwNTcyLCAxLjgxMDU1LCAwLjkwNzQ5LCAxLjgxMDU1LCAxLjI4ODA5LCAxLjU1NDY5LCAwLjk0NDM0LCAxLjA3ODA2LCAxLCAwLjk3MDk0LCAwLjc1ODksIDAuODUyODQsIDAuOTA3NDcsIDEuMTk2NTgsIDAuNjk4MjUsIDAuOTc2MjIsIDEuMzM1MTIsIDAuOTA3NDcsIDAuOTA3NDcsIDAuODUyODQsIDAuOTA3NDcsIDAuOTA3NDcsIDEuNDQ5NDcsIDAuODUyODQsIDAuODk0MSwgMC44OTQxLCAwLjcwNTcyLCAwLjgsIDAuNzA1NzIsIDAuNzA1NzIsIDAuNzA1NzIsIDAuNzA1NzIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuOTk4NjIsIDAuOTk4NjIsIDEsIDEsIDEsIDEsIDEsIDEuMDMzNiwgMC45MTAyNywgMSwgMSwgMSwgMC45OTg2MiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMS4wNTg1OSwgMS4wNTg1OSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMV07XG5leHBvcnRzLkNhbGlicmlJdGFsaWNGYWN0b3JzID0gQ2FsaWJyaUl0YWxpY0ZhY3RvcnM7XG5jb25zdCBDYWxpYnJpSXRhbGljTWV0cmljcyA9IHtcbiAgbGluZUhlaWdodDogMS4yMjA3LFxuICBsaW5lR2FwOiAwLjIyMDdcbn07XG5leHBvcnRzLkNhbGlicmlJdGFsaWNNZXRyaWNzID0gQ2FsaWJyaUl0YWxpY01ldHJpY3M7XG5jb25zdCBDYWxpYnJpUmVndWxhckZhY3RvcnMgPSBbMS4zODc3LCAxLCAxLCAxLCAxLjE3MjIzLCAxLjEyOTMsIDAuODk1NTIsIDAuOTExMzMsIDAuODAzOTUsIDEuMDIyNjksIDEuMTU2MDEsIDAuOTEwNTYsIDAuOTEwNTYsIDEuMjc5OCwgMC44NTI4NCwgMC44OTgwNywgMSwgMC45MDg2MSwgMS4zOTAxNiwgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45NjMwOSwgMC45NjMwOSwgMC44NTI4NCwgMC44NTI4NCwgMC44NTI4NCwgMC44MzMxOSwgMC44ODA3MSwgMC44Njc1LCAwLjgxNTUyLCAwLjczODM0LCAwLjg1MTkzLCAwLjczMjA2LCAwLjc1MjIsIDAuODExMDUsIDAuODYyNzUsIDAuOTA2ODUsIDAuNjM3NywgMC43Nzg5MiwgMC43NTU5MywgMS4wMjYzOCwgMC44OTM4NSwgMC44NTEyMiwgMC43NzQ1MiwgMC44NjUwMywgMC43NTE4NiwgMC42ODg4NywgMC43OTc3NiwgMC44ODg0NCwgMC44NTA2NiwgMC45NDI1OCwgMC43NzgxOCwgMC43MzA2LCAwLjc2NjU5LCAxLjEwMzY5LCAxLjM5MDE2LCAxLjEwMzY5LCAxLjA2MTM5LCAwLjg5NTUyLCAwLjg3MzksIDAuODYxMjgsIDAuOTQ0NjksIDAuODQ1NywgMC45NDQ2OSwgMC44OTQ2NCwgMS4wOTg0MiwgMC44NDYzNiwgMC45NDQ2OSwgMS4wMzI5NywgMS4wNzY5MiwgMC45MDkxOCwgMS4wMzI5NywgMC45NTg5NywgMC45NDQ2OSwgMC45NDgyLCAwLjk0NDY5LCAwLjk0NDY5LCAxLjA0NjkyLCAwLjc4MjIzLCAxLjIwNTYyLCAwLjk0NDY5LCAwLjkwMzMyLCAwLjk4OTg2LCAwLjg2NjIxLCAwLjkwNTI3LCAwLjc5MDA0LCAwLjk0MTUyLCAxLjc3MjU2LCAwLjk0MTUyLCAwLjg1Mjg0LCAwLjk3ODAxLCAwLjg5NTUyLCAwLjkxMTMzLCAwLjg5NTUyLCAwLjkxMTMzLCAxLjkxNzI5LCAwLjg5NTUyLCAxLjE3ODg5LCAxLjEzMjU0LCAxLjA4NzA3LCAwLjkyMDk4LCAwLjg1Mjg0LCAwLjY4Nzg3LCAwLjcxMzUzLCAwLjg0NzM3LCAwLjkwNzQ3LCAxLjAwODgsIDEuMDA0NCwgMC44NzY4MywgMSwgMS4wOTA5MSwgMSwgMC45MjIyOSwgMC43MzksIDEuMTU2NDIsIDAuOTIwOTgsIDAuNzYyODgsIDAuODA1MDQsIDAuODA5NzIsIDAuNzU4NTksIDAuODY3NSwgMC44Njc1LCAwLjg2NzUsIDAuODY3NSwgMC44Njc1LCAwLjg2NzUsIDAuNzYzMTgsIDAuNzM4MzQsIDAuNzMyMDYsIDAuNzMyMDYsIDAuNzMyMDYsIDAuNzMyMDYsIDAuOTA2ODUsIDAuOTA2ODUsIDAuOTA2ODUsIDAuOTA2ODUsIDAuODY0NzcsIDAuODkzODUsIDAuODUxMjIsIDAuODUxMjIsIDAuODUxMjIsIDAuODUxMjIsIDAuODUxMjIsIDAuODUyODQsIDAuODUzMTEsIDAuODg4NDQsIDAuODg4NDQsIDAuODg4NDQsIDAuODg4NDQsIDAuNzMwNiwgMC43NzQ1MiwgMC44NjMzMSwgMC44NjEyOCwgMC44NjEyOCwgMC44NjEyOCwgMC44NjEyOCwgMC44NjEyOCwgMC44NjEyOCwgMC44NjkzLCAwLjg0NTcsIDAuODk0NjQsIDAuODk0NjQsIDAuODk0NjQsIDAuODk0NjQsIDAuODI2MDEsIDAuODI2MDEsIDAuODI2MDEsIDAuODI2MDEsIDAuOTQ0NjksIDAuOTQ0NjksIDAuOTQ4MiwgMC45NDgyLCAwLjk0ODIsIDAuOTQ4MiwgMC45NDgyLCAwLjkwNzQ3LCAwLjg2NjUxLCAwLjk0NDY5LCAwLjk0NDY5LCAwLjk0NDY5LCAwLjk0NDY5LCAwLjkwNTI3LCAwLjk0NDY5LCAwLjkwNTI3LCAwLjg2NzUsIDAuODYxMjgsIDAuODY3NSwgMC44NjEyOCwgMC44Njc1LCAwLjg2MTI4LCAwLjczODM0LCAwLjg0NTcsIDAuNzM4MzQsIDAuODQ1NywgMC43MzgzNCwgMC44NDU3LCAwLjczODM0LCAwLjg0NTcsIDAuODUxOTMsIDAuOTI0NTQsIDAuODY0NzcsIDAuOTkyMSwgMC43MzIwNiwgMC44OTQ2NCwgMC43MzIwNiwgMC44OTQ2NCwgMC43MzIwNiwgMC44OTQ2NCwgMC43MzIwNiwgMC44OTQ2NCwgMC43MzIwNiwgMC44OTQ2NCwgMC44MTEwNSwgMC44NDYzNiwgMC44MTEwNSwgMC44NDYzNiwgMC44MTEwNSwgMC44NDYzNiwgMSwgMSwgMC44NjI3NSwgMC45NDQ2OSwgMC45MDg3MiwgMC45NTc4NiwgMC45MDY4NSwgMC44MjYwMSwgMC45MDY4NSwgMC44MjYwMSwgMC45MDY4NSwgMC44MjYwMSwgMC45MDY4NSwgMS4wMzI5NywgMC45MDY4NSwgMC44MjYwMSwgMC43Nzc0MSwgMS4wNTYxMSwgMC42Mzc3LCAxLjA3NjkyLCAxLCAxLCAwLjkwOTE4LCAwLjc1NTkzLCAxLjAzMjk3LCAxLCAxLCAwLjc2MDMyLCAwLjkwNDUyLCAwLjk4MTU2LCAxLjExODQyLCAwLjc3MjYxLCAxLjExNDI5LCAwLjg5Mzg1LCAwLjk0NDY5LCAxLCAxLCAwLjg5Mzg1LCAwLjk0NDY5LCAwLjk1ODc3LCAwLjg2OTAxLCAwLjk0NDY5LCAwLjg1MTIyLCAwLjk0ODIsIDAuODUxMjIsIDAuOTQ4MiwgMC44NTEyMiwgMC45NDgyLCAwLjg2NjcsIDAuOTAwMTYsIDAuNzUxODYsIDEuMDQ2OTIsIDEsIDEsIDAuNzUxODYsIDEuMDQ2OTIsIDAuNjg4ODcsIDAuNzgyMjMsIDAuNjg4ODcsIDAuNzgyMjMsIDAuNjg4ODcsIDAuNzgyMjMsIDAuNjg4ODcsIDAuNzgyMjMsIDEsIDEsIDAuNzk3NzYsIDAuOTIxODgsIDAuNzk3NzYsIDEuMjMwMjMsIDAuODg4NDQsIDAuOTQ0NjksIDAuODg4NDQsIDAuOTQ0NjksIDAuODg4NDQsIDAuOTQ0NjksIDAuODg4NDQsIDAuOTQ0NjksIDAuODg4NDQsIDAuOTQ0NjksIDAuODg4NDQsIDAuOTQ0NjksIDAuOTQyNTgsIDAuOTg5ODYsIDAuNzMwNiwgMC45MDUyNywgMC43MzA2LCAwLjc2NjU5LCAwLjc5MDA0LCAwLjc2NjU5LCAwLjc5MDA0LCAwLjc2NjU5LCAwLjc5MDA0LCAxLjA5MjMxLCAwLjU0ODczLCAwLjg2NzUsIDAuODYxMjgsIDAuNzYzMTgsIDAuODY5MywgMC44NTMxMSwgMC44NjY1MSwgMSwgMSwgMC43OTc3NiwgMS4yMDU2MiwgMS4xODYyMiwgMS4xODYyMiwgMSwgMS4xNDM3LCAwLjY3NzQyLCAwLjk2MzM0LCAwLjkzNjk1LCAxLjM1MTkxLCAxLjQwOTA5LCAwLjk1MTYxLCAxLjQ4Mzg3LCAwLjg2Njg2LCAwLjkwODYxLCAwLjYyMjY3LCAwLjc0MzU5LCAwLjY1NjQ5LCAwLjg1NDk4LCAwLjU2OTYzLCAwLjg4MjU0LCAxLjIzNTE2LCAwLjg2NzUsIDAuODE1NTIsIDAuNzU0NDMsIDAuODQ1MDMsIDAuNzMyMDYsIDAuNzY2NTksIDAuODYyNzUsIDAuODUxMjIsIDAuOTA2ODUsIDAuNzc4OTIsIDAuODU3NDYsIDEuMDI2MzgsIDAuODkzODUsIDAuNzU2NTcsIDAuODUxMjIsIDAuODYyNzUsIDAuNzc0NTIsIDAuNzQxNzEsIDAuNzk3NzYsIDAuNzMwNiwgMC45NTE2NSwgMC43NzgxOCwgMC44OTc3MiwgMC44ODgzMSwgMC45MDY4NSwgMC43MzA2LCAwLjk4MTQyLCAxLjAyMTkxLCAwLjk2NTc2LCAxLjIzNTE2LCAwLjk5MDE4LCAwLjk4MTQyLCAwLjkyMzYsIDAuODkyNTgsIDAuOTQwMzUsIDEuMDIxOTEsIDAuNzg4NDgsIDAuOTY1NzYsIDAuOTU2MSwgMS4yMzUxNiwgMC45MDkxOCwgMC45MjU3OCwgMC45NTQyNCwgMC44OTc0NiwgMC44Mzk2OSwgMC45NDgyLCAwLjgwMTEzLCAwLjg5NDQyLCAwLjg1MjA4LCAwLjg2MTU1LCAwLjk4MDIyLCAwLjk5MDE4LCAxLjAwNDUyLCAwLjgxMjA5LCAwLjk5MjQ3LCAwLjg5MTgxLCAxLjIzNTE2LCAwLjk5MDE4LCAwLjk0ODIsIDAuOTkwMTgsIDAuODkxODEsIDAuNzMyMDYsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuODg4NDQsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuODk0NjQsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuOTY3NjYsIDEsIDEsIDEsIDEsIDEsIDEsIDAuOTQyNTgsIDAuOTg5ODYsIDAuOTQyNTgsIDAuOTg5ODYsIDAuOTQyNTgsIDAuOTg5ODYsIDAuNzMwNiwgMC45MDUyNywgMSwgMSwgMC44OTU1MiwgMC45MDUyNywgMSwgMC45MDE4NiwgMS4xMjMwOCwgMS4xMjMwOCwgMS4xMjMwOCwgMS4xMjMwOCwgMS4yNTY2LCAxLjI1NjYsIDEuMjU2NiwgMC44OTU1MiwgMC44OTU1MiwgMS40MjI1OSwgMC42OTA0MywgMS4wMzgwOSwgMSwgMSwgMS4wMTc2LCAxLjAxNzYsIDEuMTE1MjMsIDEuNDk1NiwgMi4wMTQ2MiwgMC45OTMzMSwgMC44MjYxNiwgMC45MTEzMywgMC44NDI4NiwgMC45MTEzMywgMSwgMSwgMSwgMC43MDUwOCwgMSwgMS4yMzEwOCwgMC43OTgwMSwgMC44NDQyNiwgMC44NDQyNiwgMC43NzQsIDAuOTA1MjcsIDEuODEwNTUsIDAuOTA1MjcsIDEuODEwNTUsIDEuMjg4MDksIDEuNTU0NjksIDAuOTQ0MzQsIDEuMDc4MDYsIDEsIDAuOTcwOTQsIDAuNzU4OSwgMC44NTI4NCwgMC45MDc0NywgMS4xOTY1OCwgMC42OTgyNSwgMC45NzYyMiwgMS4zMzUxMiwgMC45MDc0NywgMC45MDc0NywgMC44NTM1NiwgMC45MDc0NywgMC45MDc0NywgMS40NDk0NywgMC44NTI4NCwgMC44OTQxLCAwLjg5NDEsIDAuNzA1NzIsIDAuOCwgMC43MDU3MiwgMC43MDU3MiwgMC43MDU3MiwgMC43MDU3MiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC45OTg2MiwgMC45OTg2MiwgMSwgMSwgMSwgMSwgMSwgMS4wMzM2LCAwLjkxMDI3LCAxLCAxLCAxLCAwLjk5ODYyLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLjA1ODU5LCAxLjA1ODU5LCAxLCAxLCAxLCAxLjA3MTg1LCAwLjk5NDEzLCAwLjk2MzM0LCAxLjA4MDY1LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxXTtcbmV4cG9ydHMuQ2FsaWJyaVJlZ3VsYXJGYWN0b3JzID0gQ2FsaWJyaVJlZ3VsYXJGYWN0b3JzO1xuY29uc3QgQ2FsaWJyaVJlZ3VsYXJNZXRyaWNzID0ge1xuICBsaW5lSGVpZ2h0OiAxLjIyMDcsXG4gIGxpbmVHYXA6IDAuMjIwN1xufTtcbmV4cG9ydHMuQ2FsaWJyaVJlZ3VsYXJNZXRyaWNzID0gQ2FsaWJyaVJlZ3VsYXJNZXRyaWNzO1xuXG4vKioqLyB9KSxcbi8qIDE0ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLkhlbHZldGljYVJlZ3VsYXJNZXRyaWNzID0gZXhwb3J0cy5IZWx2ZXRpY2FSZWd1bGFyRmFjdG9ycyA9IGV4cG9ydHMuSGVsdmV0aWNhSXRhbGljTWV0cmljcyA9IGV4cG9ydHMuSGVsdmV0aWNhSXRhbGljRmFjdG9ycyA9IGV4cG9ydHMuSGVsdmV0aWNhQm9sZE1ldHJpY3MgPSBleHBvcnRzLkhlbHZldGljYUJvbGRJdGFsaWNNZXRyaWNzID0gZXhwb3J0cy5IZWx2ZXRpY2FCb2xkSXRhbGljRmFjdG9ycyA9IGV4cG9ydHMuSGVsdmV0aWNhQm9sZEZhY3RvcnMgPSB2b2lkIDA7XG5jb25zdCBIZWx2ZXRpY2FCb2xkRmFjdG9ycyA9IFswLjc2MTE2LCAxLCAxLCAxLjAwMDYsIDAuOTk5OTgsIDAuOTk5NzQsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5ODIsIDAuOTk5NzcsIDEuMDAwODcsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5NTksIDEuMDAwMDMsIDEuMDAwNiwgMC45OTk5OCwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5OTgsIDEsIDEuMDAwMDMsIDEuMDAwMDMsIDEuMDAwMDMsIDEuMDAwMjYsIDAuOTk5OSwgMC45OTk3NywgMC45OTk3NywgMC45OTk3NywgMC45OTk3NywgMS4wMDAwMSwgMS4wMDAyNiwgMS4wMDAyMiwgMC45OTk3NywgMS4wMDA2LCAwLjk5OTczLCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTk5LCAwLjk5OTc3LCAxLjAwMDIyLCAxLjAwMDAxLCAxLjAwMDIyLCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDE2LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDI2LCAwLjk5OTk4LCAxLjAwMDYsIDAuOTk5OTgsIDEuMDAwMDMsIDAuOTk5NzMsIDAuOTk5OTgsIDAuOTk5NzMsIDEuMDAwMjYsIDAuOTk5NzMsIDEuMDAwMjYsIDAuOTk5NzMsIDAuOTk5OTgsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwNiwgMS4wMDA2LCAwLjk5OTczLCAxLjAwMDYsIDAuOTk5ODIsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDAuOTk5NTksIDAuOTk5NzMsIDAuOTk5OTgsIDEuMDAwMjYsIDAuOTk5NzMsIDEuMDAwMjIsIDAuOTk5NzMsIDAuOTk5NzMsIDEsIDAuOTk5NTksIDEuMDAwNzcsIDAuOTk5NTksIDEuMDAwMDMsIDAuOTk5OTgsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwNzcsIDAuOTk5NzMsIDAuOTk5OTgsIDEuMDAwMjUsIDAuOTk5NjgsIDAuOTk5NzMsIDEuMDAwMDMsIDEuMDAwMjUsIDAuNjAyOTksIDEuMDAwMjQsIDEuMDY0MDksIDEsIDEsIDAuOTk5OTgsIDEsIDAuOTk5NzMsIDEuMDAwNiwgMC45OTk5OCwgMSwgMC45OTkzNiwgMC45OTk3MywgMS4wMDAwMiwgMS4wMDAwMiwgMS4wMDAwMiwgMS4wMDAyNiwgMC45OTk3NywgMC45OTk3NywgMC45OTk3NywgMC45OTk3NywgMC45OTk3NywgMC45OTk3NywgMSwgMC45OTk3NywgMS4wMDAwMSwgMS4wMDAwMSwgMS4wMDAwMSwgMS4wMDAwMSwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAwLjk5OTc3LCAwLjk5OTc3LCAxLjAwMDIyLCAxLjAwMDIyLCAxLjAwMDIyLCAxLjAwMDIyLCAxLjAwMDIyLCAxLjAwMDAzLCAxLjAwMDIyLCAwLjk5OTc3LCAwLjk5OTc3LCAwLjk5OTc3LCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDI2LCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTgyLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDY0MDksIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDAuOTk5NzMsIDEuMDAwMjYsIDAuOTk5NzMsIDAuOTk5NzcsIDAuOTk5NzMsIDAuOTk5NzcsIDAuOTk5NzMsIDAuOTk5NzcsIDAuOTk5NzMsIDAuOTk5NzcsIDAuOTk5NzMsIDAuOTk5NzcsIDAuOTk5NzMsIDAuOTk5NzcsIDAuOTk5NzMsIDAuOTk5NzcsIDAuOTk5NzMsIDAuOTk5NzcsIDEuMDMzNzQsIDAuOTk5NzcsIDEuMDAwMjYsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMjIsIDEuMDAwMjYsIDEuMDAwMjIsIDEuMDAwMjYsIDEuMDAwMjIsIDEuMDAwMjYsIDEuMDAwMjIsIDEuMDAwMjYsIDAuOTk5NzcsIDEuMDAwMjYsIDAuOTk5NzcsIDEuMDAwMjYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA0MiwgMC45OTk3MywgMC45OTk3MywgMS4wMDA2LCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDI2LCAxLjAwMDYsIDEuMDAwMjYsIDEuMDAwNiwgMS4wMDAyNiwgMS4wMzgyOCwgMS4wMDAyNiwgMC45OTk5OSwgMS4wMDAyNiwgMS4wMDA2LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTMsIDAuOTk5OCwgMS4wMDAyNiwgMS4wMDAyMiwgMS4wMDAyNiwgMS4wMDAyMiwgMS4wMDAyNiwgMS4wMDAyMiwgMS4wMDAyNiwgMSwgMS4wMDAxNiwgMC45OTk3NywgMC45OTk1OSwgMC45OTk3NywgMC45OTk1OSwgMC45OTk3NywgMC45OTk1OSwgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAyNiwgMC45OTk5OCwgMS4wMDAyNiwgMC44MTIxLCAxLjAwMDI2LCAwLjk5OTk4LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAxLjAwMDE2LCAxLjAwMDIyLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAxLjAwMDI2LCAxLCAxLjAwMDI2LCAxLCAxLjAwMDI2LCAxLCAxLjAwMDYsIDAuOTk5NzMsIDAuOTk5NzcsIDAuOTk5NzMsIDEsIDAuOTk5ODIsIDEuMDAwMjIsIDEuMDAwMjYsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMjYsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDEuMDAwMzQsIDAuOTk5NzcsIDEsIDAuOTk5OTcsIDEuMDAwMjYsIDEuMDAwNzgsIDEuMDAwMzYsIDAuOTk5NzMsIDEuMDAwMTMsIDEuMDAwNiwgMC45OTk3NywgMC45OTk3NywgMC45OTk4OCwgMC44NTE0OCwgMS4wMDAwMSwgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyMiwgMS4wMDA2LCAwLjk5OTc3LCAxLjAwMDAxLCAwLjk5OTk5LCAwLjk5OTc3LCAxLjAwMDY5LCAxLjAwMDIyLCAwLjk5OTc3LCAxLjAwMDAxLCAwLjk5OTg0LCAxLjAwMDI2LCAxLjAwMDAxLCAxLjAwMDI0LCAxLjAwMDAxLCAwLjk5OTksIDEsIDEuMDAwNiwgMS4wMDAwMSwgMS4wMDA0MSwgMC45OTk2MiwgMS4wMDAyNiwgMS4wMDA2LCAwLjk5OTk1LCAxLjAwMDQxLCAwLjk5OTQyLCAwLjk5OTczLCAwLjk5OTI3LCAxLjAwMDgyLCAwLjk5OTAyLCAxLjAwMDI2LCAxLjAwMDg3LCAxLjAwMDYsIDEuMDAwNjksIDAuOTk5NzMsIDAuOTk4NjcsIDAuOTk5NzMsIDAuOTk5MywgMS4wMDAyNiwgMS4wMDA0OSwgMS4wMDA1NiwgMSwgMC45OTk4OCwgMC45OTkzNSwgMC45OTk5NSwgMC45OTk1NCwgMS4wMDA1NSwgMC45OTk0NSwgMS4wMDAzMiwgMS4wMDA2LCAwLjk5OTk1LCAxLjAwMDI2LCAwLjk5OTk1LCAxLjAwMDMyLCAxLjAwMDAxLCAxLjAwMDA4LCAwLjk5OTcxLCAxLjAwMDE5LCAwLjk5OTQsIDEuMDAwMDEsIDEuMDAwNiwgMS4wMDA0NCwgMC45OTk3MywgMS4wMDAyMywgMS4wMDA0NywgMSwgMC45OTk0MiwgMC45OTU2MSwgMC45OTk4OSwgMS4wMDAzNSwgMC45OTk3NywgMS4wMDAzNSwgMC45OTk3NywgMS4wMDAxOSwgMC45OTk0NCwgMS4wMDAwMSwgMS4wMDAyMSwgMC45OTkyNiwgMS4wMDAzNSwgMS4wMDAzNSwgMC45OTk0MiwgMS4wMDA0OCwgMC45OTk5OSwgMC45OTk3NywgMS4wMDAyMiwgMS4wMDAzNSwgMS4wMDAwMSwgMC45OTk3NywgMS4wMDAyNiwgMC45OTk4OSwgMS4wMDA1NywgMS4wMDAwMSwgMC45OTkzNiwgMS4wMDA1MiwgMS4wMDAxMiwgMC45OTk5NiwgMS4wMDA0MywgMSwgMS4wMDAzNSwgMC45OTk0LCAwLjk5OTc2LCAxLjAwMDM1LCAwLjk5OTczLCAxLjAwMDUyLCAxLjAwMDQxLCAxLjAwMTE5LCAxLjAwMDM3LCAwLjk5OTczLCAxLjAwMDAyLCAwLjk5OTg2LCAxLjAwMDQxLCAxLjAwMDQxLCAwLjk5OTAyLCAwLjk5OTYsIDEuMDAwMzQsIDAuOTk5OTksIDEuMDAwMjYsIDAuOTk5OTksIDEuMDAwMjYsIDAuOTk5NzMsIDEuMDAwNTIsIDAuOTk5NzMsIDEsIDAuOTk5NzMsIDEuMDAwNDEsIDEuMDAwNzUsIDAuOTk5NCwgMS4wMDAzLCAwLjk5OTk5LCAxLCAxLjAwMDQxLCAwLjk5OTU1LCAxLCAwLjk5OTE1LCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDI2LCAxLjAwMTE5LCAwLjk5OTU1LCAwLjk5OTczLCAxLjAwMDYsIDAuOTk5MTEsIDEuMDAwNiwgMS4wMDAyNiwgMC45OTk3MiwgMS4wMDAyNiwgMC45OTkwMiwgMS4wMDA0MSwgMC45OTk3MywgMC45OTk5OSwgMSwgMSwgMS4wMDAzOCwgMS4wMDA1LCAxLjAwMDE2LCAxLjAwMDIyLCAxLjAwMDE2LCAxLjAwMDIyLCAxLjAwMDE2LCAxLjAwMDIyLCAxLjAwMDAxLCAwLjk5OTczLCAxLCAxLCAwLjk5OTczLCAxLCAxLCAwLjk5OTU1LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEsIDEsIDEsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzIsIDEsIDEsIDEuMDAxMDYsIDAuOTk5OTksIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTksIDAuOTk5OTgsIDEuNjY0NzUsIDEsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwMjMsIDAuOTk5NzMsIDAuOTk5NzEsIDEuMDAwNDcsIDEuMDAwMjMsIDEsIDAuOTk5OTEsIDAuOTk5ODQsIDEuMDAwMDIsIDEuMDAwMDIsIDEuMDAwMDIsIDEuMDAwMDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuOTk5NzIsIDEsIDEuMjA5ODUsIDEuMzk3MTMsIDEuMDAwMDMsIDEuMDAwMzEsIDEuMDAwMTUsIDEsIDAuOTk1NjEsIDEuMDAwMjcsIDEuMDAwMzEsIDEuMDAwMzEsIDAuOTk5MTUsIDEuMDAwMzEsIDEuMDAwMzEsIDAuOTk5OTksIDEuMDAwMDMsIDAuOTk5OTksIDAuOTk5OTksIDEuNDExNDQsIDEuNiwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MDU3OSwgMS40MDU3OSwgMS4zNjYyNSwgMC45OTk5OSwgMSwgMC45OTg2MSwgMC45OTg2MSwgMSwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMC45OTk3MiwgMC45OTk5OSwgMC45OTk5OSwgMC45OTk5OSwgMC45OTk5OSwgMS40MDQ4MywgMSwgMC45OTk3NywgMS4wMDA1NCwgMSwgMSwgMC45OTk1MywgMC45OTk2MiwgMS4wMDA0MiwgMC45OTk1LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxXTtcbmV4cG9ydHMuSGVsdmV0aWNhQm9sZEZhY3RvcnMgPSBIZWx2ZXRpY2FCb2xkRmFjdG9ycztcbmNvbnN0IEhlbHZldGljYUJvbGRNZXRyaWNzID0ge1xuICBsaW5lSGVpZ2h0OiAxLjIsXG4gIGxpbmVHYXA6IDAuMlxufTtcbmV4cG9ydHMuSGVsdmV0aWNhQm9sZE1ldHJpY3MgPSBIZWx2ZXRpY2FCb2xkTWV0cmljcztcbmNvbnN0IEhlbHZldGljYUJvbGRJdGFsaWNGYWN0b3JzID0gWzAuNzYxMTYsIDEsIDEsIDEuMDAwNiwgMC45OTk5OCwgMC45OTk3NCwgMC45OTk3MywgMC45OTk3MywgMC45OTk4MiwgMC45OTk3NywgMS4wMDA4NywgMC45OTk5OCwgMC45OTk5OCwgMC45OTk1OSwgMS4wMDAwMywgMS4wMDA2LCAwLjk5OTk4LCAxLjAwMDYsIDEuMDAwNiwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk5OCwgMSwgMS4wMDAwMywgMS4wMDAwMywgMS4wMDAwMywgMS4wMDAyNiwgMC45OTk5LCAwLjk5OTc3LCAwLjk5OTc3LCAwLjk5OTc3LCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDI2LCAxLjAwMDIyLCAwLjk5OTc3LCAxLjAwMDYsIDAuOTk5NzMsIDAuOTk5NzcsIDEuMDAwMjYsIDAuOTk5OTksIDAuOTk5NzcsIDEuMDAwMjIsIDEuMDAwMDEsIDEuMDAwMjIsIDAuOTk5NzcsIDEuMDAwMDEsIDEuMDAwMjYsIDAuOTk5NzcsIDEuMDAwMDEsIDEuMDAwMTYsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwMjYsIDAuOTk5OTgsIDEuMDAwNiwgMC45OTk5OCwgMS4wMDAwMywgMC45OTk3MywgMC45OTk5OCwgMC45OTk3MywgMS4wMDAyNiwgMC45OTk3MywgMS4wMDAyNiwgMC45OTk3MywgMC45OTk5OCwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5NzMsIDEuMDAwNiwgMC45OTk4MiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMC45OTk1OSwgMC45OTk3MywgMC45OTk5OCwgMS4wMDAyNiwgMC45OTk3MywgMS4wMDAyMiwgMC45OTk3MywgMC45OTk3MywgMSwgMC45OTk1OSwgMS4wMDA3NywgMC45OTk1OSwgMS4wMDAwMywgMC45OTk5OCwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMS4wMDA3NywgMC45OTk3MywgMC45OTk5OCwgMS4wMDAyNSwgMC45OTk2OCwgMC45OTk3MywgMS4wMDAwMywgMS4wMDAyNSwgMC42MDI5OSwgMS4wMDAyNCwgMS4wNjQwOSwgMSwgMSwgMC45OTk5OCwgMSwgMC45OTk3MywgMS4wMDA2LCAwLjk5OTk4LCAxLCAwLjk5OTM2LCAwLjk5OTczLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDI2LCAwLjk5OTc3LCAwLjk5OTc3LCAwLjk5OTc3LCAwLjk5OTc3LCAwLjk5OTc3LCAwLjk5OTc3LCAxLCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5NzcsIDAuOTk5NzcsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMDMsIDEuMDAwMjIsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwMjYsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5ODIsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wNjQwOSwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMC45OTk3MywgMS4wMDAyNiwgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMS4wMDQ0LCAwLjk5OTc3LCAxLjAwMDI2LCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDIyLCAxLjAwMDI2LCAxLjAwMDIyLCAxLjAwMDI2LCAxLjAwMDIyLCAxLjAwMDI2LCAxLjAwMDIyLCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5NzEsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwNiwgMC45OTk3NywgMC45OTk3MywgMC45OTk3MywgMS4wMDAyNiwgMS4wMDA2LCAxLjAwMDI2LCAxLjAwMDYsIDEuMDAwMjYsIDEuMDEwMTEsIDEuMDAwMjYsIDAuOTk5OTksIDEuMDAwMjYsIDEuMDAwNiwgMC45OTk3NywgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyNiwgMC45OTkzLCAwLjk5OTgsIDEuMDAwMjYsIDEuMDAwMjIsIDEuMDAwMjYsIDEuMDAwMjIsIDEuMDAwMjYsIDEuMDAwMjIsIDEuMDAwMjYsIDEsIDEuMDAwMTYsIDAuOTk5NzcsIDAuOTk5NTksIDAuOTk5NzcsIDAuOTk5NTksIDAuOTk5NzcsIDAuOTk5NTksIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMjYsIDAuOTk5OTgsIDEuMDAwMjYsIDAuODEyMSwgMS4wMDAyNiwgMC45OTk5OCwgMC45OTk3NywgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyNiwgMS4wMDAxNiwgMS4wMDAyMiwgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMS4wMDAyNiwgMSwgMS4wMDAyNiwgMSwgMS4wMDAyNiwgMSwgMS4wMDA2LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAxLCAwLjk5OTgyLCAxLjAwMDIyLCAxLjAwMDI2LCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDI2LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTc3LCAxLCAxLCAxLjAwMDI2LCAwLjk5OTY5LCAwLjk5OTcyLCAwLjk5OTgxLCAwLjk5OTgsIDEuMDAwNiwgMC45OTk3NywgMC45OTk3NywgMS4wMDAyMiwgMC45MTE1NSwgMS4wMDAwMSwgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyMiwgMS4wMDA2LCAwLjk5OTc3LCAxLjAwMDAxLCAwLjk5OTk5LCAwLjk5OTc3LCAwLjk5OTY2LCAxLjAwMDIyLCAxLjAwMDMyLCAxLjAwMDAxLCAwLjk5OTQ0LCAxLjAwMDI2LCAxLjAwMDAxLCAwLjk5OTY4LCAxLjAwMDAxLCAxLjAwMDQ3LCAxLCAxLjAwMDYsIDEuMDAwMDEsIDAuOTk5ODEsIDEuMDAxMDEsIDEuMDAwMjYsIDEuMDAwNiwgMC45OTk0OCwgMC45OTk4MSwgMS4wMDA2NCwgMC45OTk3MywgMC45OTk0MiwgMS4wMDEwMSwgMS4wMDA2MSwgMS4wMDAyNiwgMS4wMDA2OSwgMS4wMDA2LCAxLjAwMDE0LCAwLjk5OTczLCAxLjAxMzIyLCAwLjk5OTczLCAxLjAwMDY1LCAxLjAwMDI2LCAxLjAwMDEyLCAwLjk5OTIzLCAxLCAxLjAwMDY0LCAxLjAwMDc2LCAwLjk5OTQ4LCAxLjAwMDU1LCAxLjAwMDYzLCAxLjAwMDA3LCAwLjk5OTQzLCAxLjAwMDYsIDAuOTk5NDgsIDEuMDAwMjYsIDAuOTk5NDgsIDAuOTk5NDMsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwMjksIDEuMDAwMzgsIDEuMDAwMzUsIDEuMDAwMDEsIDEuMDAwNiwgMS4wMDA2LCAwLjk5OTczLCAwLjk5OTc4LCAxLjAwMDAxLCAxLjAwMDU3LCAwLjk5OTg5LCAwLjk5OTY3LCAwLjk5OTY0LCAwLjk5OTY3LCAwLjk5OTc3LCAwLjk5OTk5LCAwLjk5OTc3LCAxLjAwMDM4LCAwLjk5OTc3LCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDY2LCAwLjk5OTY3LCAwLjk5OTY3LCAxLjAwMDQxLCAwLjk5OTk4LCAwLjk5OTk5LCAwLjk5OTc3LCAxLjAwMDIyLCAwLjk5OTY3LCAxLjAwMDAxLCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTY0LCAxLjAwMDMxLCAxLjAwMDAxLCAwLjk5OTk5LCAwLjk5OTk5LCAxLCAxLjAwMDIzLCAxLCAxLCAwLjk5OTk5LCAxLjAwMDM1LCAxLjAwMDAxLCAwLjk5OTk5LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTk5LCAxLjAwMDU4LCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTU1LCAwLjk5OTUsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMzIsIDAuOTk5ODksIDEuMDAwMzQsIDAuOTk5OTksIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDAuOTk5NzMsIDAuNDU5OTgsIDAuOTk5NzMsIDEuMDAwMjYsIDAuOTk5NzMsIDEuMDAwMDEsIDAuOTk5OTksIDAuOTk5ODIsIDAuOTk5OTQsIDAuOTk5OTYsIDEsIDEuMDAwNDIsIDEuMDAwNDQsIDEuMDAwMjksIDEuMDAwMjMsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwMjYsIDAuOTk5NDksIDEuMDAwMDIsIDAuOTk5NzMsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5NzUsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMzIsIDAuOTg2ODUsIDAuOTk5NzMsIDEuMDAwMjYsIDEsIDEsIDAuOTk5NjYsIDEuMDAwNDQsIDEuMDAwMTYsIDEuMDAwMjIsIDEuMDAwMTYsIDEuMDAwMjIsIDEuMDAwMTYsIDEuMDAwMjIsIDEuMDAwMDEsIDAuOTk5NzMsIDEsIDEsIDAuOTk5NzMsIDEsIDEsIDAuOTk5NTUsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMSwgMSwgMSwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MiwgMSwgMSwgMS4wMDEwNiwgMC45OTk5OSwgMC45OTk5OCwgMC45OTk5OCwgMC45OTk5OSwgMC45OTk5OCwgMS42NjQ3NSwgMSwgMC45OTk3MywgMC45OTk3MywgMSwgMC45OTk3MywgMC45OTk3MSwgMC45OTk3OCwgMSwgMSwgMC45OTk5MSwgMC45OTk4NCwgMS4wMDAwMiwgMS4wMDAwMiwgMS4wMDAwMiwgMS4wMDAwMiwgMS4wMDA5OCwgMSwgMSwgMSwgMS4wMDA0OSwgMSwgMSwgMC45OTk3MiwgMSwgMS4yMDk4NSwgMS4zOTcxMywgMS4wMDAwMywgMS4wMDAzMSwgMS4wMDAxNSwgMSwgMC45OTU2MSwgMS4wMDAyNywgMS4wMDAzMSwgMS4wMDAzMSwgMC45OTkxNSwgMS4wMDAzMSwgMS4wMDAzMSwgMC45OTk5OSwgMS4wMDAwMywgMC45OTk5OSwgMC45OTk5OSwgMS40MTE0NCwgMS42LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQwNTc5LCAxLjQwNTc5LCAxLjM2NjI1LCAwLjk5OTk5LCAxLCAwLjk5ODYxLCAwLjk5ODYxLCAxLCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAwLjk5OTcyLCAwLjk5OTk5LCAwLjk5OTk5LCAwLjk5OTk5LCAwLjk5OTk5LCAxLjQwNDgzLCAxLCAwLjk5OTc3LCAxLjAwMDU0LCAxLCAxLCAwLjk5OTUzLCAwLjk5OTYyLCAxLjAwMDQyLCAwLjk5OTUsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDFdO1xuZXhwb3J0cy5IZWx2ZXRpY2FCb2xkSXRhbGljRmFjdG9ycyA9IEhlbHZldGljYUJvbGRJdGFsaWNGYWN0b3JzO1xuY29uc3QgSGVsdmV0aWNhQm9sZEl0YWxpY01ldHJpY3MgPSB7XG4gIGxpbmVIZWlnaHQ6IDEuMzUsXG4gIGxpbmVHYXA6IDAuMlxufTtcbmV4cG9ydHMuSGVsdmV0aWNhQm9sZEl0YWxpY01ldHJpY3MgPSBIZWx2ZXRpY2FCb2xkSXRhbGljTWV0cmljcztcbmNvbnN0IEhlbHZldGljYUl0YWxpY0ZhY3RvcnMgPSBbMC43NjExNiwgMSwgMSwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwMDYsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5ODIsIDEuMDAwMDEsIDEuMDAwNDMsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5NTksIDEuMDAwMDMsIDEuMDAwNiwgMC45OTk5OCwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwNiwgMSwgMS4wMDAwMywgMS4wMDAwMywgMS4wMDAwMywgMC45OTk3MywgMC45OTk4NywgMS4wMDAwMSwgMS4wMDAwMSwgMC45OTk3NywgMC45OTk3NywgMS4wMDAwMSwgMS4wMDAyNiwgMS4wMDAyMiwgMC45OTk3NywgMS4wMDA2LCAxLCAxLjAwMDAxLCAwLjk5OTczLCAwLjk5OTk5LCAwLjk5OTc3LCAxLjAwMDIyLCAxLjAwMDAxLCAxLjAwMDIyLCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDE2LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDI2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAwLjk5OTQ5LCAwLjk5OTczLCAwLjk5OTk4LCAwLjk5OTczLCAwLjk5OTczLCAxLCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDYsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5MjQsIDAuOTk5MjQsIDEsIDAuOTk5MjQsIDAuOTk5OTksIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5OTgsIDEsIDEuMDAwNiwgMC45OTk3MywgMSwgMC45OTk3NywgMSwgMSwgMSwgMS4wMDAwNSwgMS4wMDA5LCAxLjAwMDA1LCAxLjAwMDAzLCAwLjk5OTk4LCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDksIDAuOTk5NzMsIDAuOTk5OTgsIDEuMDAwMjUsIDAuOTk5NjgsIDAuOTk5NzMsIDEuMDAwMDMsIDEuMDAwMjUsIDAuNjAyOTksIDEuMDAwMjQsIDEuMDY0MDksIDEsIDEsIDAuOTk5OTgsIDEsIDAuOTk5OCwgMS4wMDA2LCAwLjk5OTk4LCAxLCAwLjk5OTM2LCAwLjk5OTczLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDI2LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5NzcsIDAuOTk5NzcsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMDMsIDEuMDAwMjIsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwMjYsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5ODIsIDEsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMS4wNjQwOSwgMS4wMDAyNiwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMSwgMC45OTk3MywgMSwgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMC45OTk3NywgMSwgMC45OTk3NywgMSwgMC45OTk3NywgMSwgMC45OTk3NywgMSwgMC45OTk3NywgMS4wMjg4LCAwLjk5OTc3LCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDIyLCAwLjk5OTczLCAxLjAwMDIyLCAwLjk5OTczLCAxLjAwMDIyLCAwLjk5OTczLCAxLjAwMDIyLCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5MjQsIDEuMDAwNiwgMS4wMDA2LCAwLjk5OTQ2LCAxLjAwMDM0LCAxLCAwLjk5OTI0LCAxLjAwMDAxLCAxLCAxLCAwLjk5OTczLCAwLjk5OTI0LCAwLjk5OTczLCAwLjk5OTI0LCAwLjk5OTczLCAxLjA2MzExLCAwLjk5OTczLCAxLjAwMDI0LCAwLjk5OTczLCAwLjk5OTI0LCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAxLjAwMDQxLCAwLjk5OTgsIDAuOTk5NzMsIDEuMDAwMjIsIDAuOTk5NzMsIDEuMDAwMjIsIDAuOTk5NzMsIDEuMDAwMjIsIDAuOTk5NzMsIDEsIDEuMDAwMTYsIDAuOTk5NzcsIDAuOTk5OTgsIDAuOTk5NzcsIDAuOTk5OTgsIDAuOTk5NzcsIDAuOTk5OTgsIDEuMDAwMDEsIDEsIDEuMDAwMDEsIDEsIDEuMDAwMDEsIDEsIDEuMDAwMDEsIDEsIDEuMDAwMjYsIDEuMDAwNiwgMS4wMDAyNiwgMC44OTU0NywgMS4wMDAyNiwgMS4wMDA2LCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAxLjAwMDE2LCAwLjk5OTc3LCAxLjAwMDAxLCAxLCAxLjAwMDAxLCAxLjAwMDI2LCAxLCAxLjAwMDI2LCAxLCAxLjAwMDI2LCAxLCAwLjk5OTI0LCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLCAwLjk5OTgyLCAxLjAwMDIyLCAxLjAwMDI2LCAxLjAwMDAxLCAxLCAxLjAwMDI2LCAxLjAwMDYsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDEuMDAwMDEsIDEsIDEuMDAwNTQsIDAuOTk5NzcsIDEuMDAwODQsIDEuMDAwMDcsIDAuOTk5NzMsIDEuMDAwMTMsIDAuOTk5MjQsIDEuMDAwMDEsIDEuMDAwMDEsIDAuOTk5NDUsIDAuOTEyMjEsIDEuMDAwMDEsIDEuMDAwMjYsIDAuOTk5NzcsIDEuMDAwMjIsIDEuMDAwNiwgMS4wMDAwMSwgMS4wMDAwMSwgMC45OTk5OSwgMC45OTk3NywgMC45OTkzMywgMS4wMDAyMiwgMS4wMDA1NCwgMS4wMDAwMSwgMS4wMDA2NSwgMS4wMDAyNiwgMS4wMDAwMSwgMS4wMDAxLCAxLjAwMDAxLCAxLjAwMDUyLCAxLCAxLjAwMDYsIDEuMDAwMDEsIDAuOTk5NDUsIDAuOTk4OTcsIDAuOTk5NjgsIDAuOTk5MjQsIDEuMDAwMzYsIDAuOTk5NDUsIDAuOTk5NDksIDEsIDEuMDAwNiwgMC45OTg5NywgMC45OTkxOCwgMC45OTk2OCwgMC45OTkxMSwgMC45OTkyNCwgMSwgMC45OTk2MiwgMS4wMTQ4NywgMSwgMS4wMDA1LCAwLjk5OTczLCAxLjAwMDEyLCAxLjAwMDQzLCAxLCAwLjk5OTk1LCAwLjk5OTk0LCAxLjAwMDM2LCAwLjk5OTQ3LCAxLjAwMDE5LCAxLjAwMDYzLCAxLjAwMDI1LCAwLjk5OTI0LCAxLjAwMDM2LCAwLjk5OTczLCAxLjAwMDM2LCAxLjAwMDI1LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDI3LCAxLjAwMDEsIDEuMDAwNjgsIDEuMDAwMDEsIDEuMDAwNiwgMS4wMDA2LCAxLCAxLjAwMDA4LCAwLjk5OTU3LCAwLjk5OTcyLCAwLjk5OTQsIDAuOTk5NTQsIDAuOTk5NzUsIDEuMDAwNTEsIDEuMDAwMDEsIDEuMDAwMTksIDEuMDAwMDEsIDEuMDAwMSwgMC45OTk4NiwgMS4wMDAwMSwgMS4wMDAwMSwgMS4wMDAzOCwgMC45OTk1NCwgMC45OTk1NCwgMC45OTk0LCAxLjAwMDY2LCAwLjk5OTk5LCAwLjk5OTc3LCAxLjAwMDIyLCAxLjAwMDU0LCAxLjAwMDAxLCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc1LCAxLjAwMDEsIDEuMDAwMDEsIDAuOTk5OTMsIDAuOTk5NSwgMC45OTk1NSwgMS4wMDAxNiwgMC45OTk3OCwgMC45OTk3NCwgMS4wMDAxOSwgMS4wMDAyMiwgMC45OTk1NSwgMS4wMDA1MywgMC45OTk3MywgMS4wMDA4OSwgMS4wMDAwNSwgMC45OTk2NywgMS4wMDA0OCwgMC45OTk3MywgMS4wMDAwMiwgMS4wMDAzNCwgMC45OTk3MywgMC45OTk3MywgMC45OTk2NCwgMS4wMDAwNiwgMS4wMDA2NiwgMC45OTk0NywgMC45OTk3MywgMC45ODg5NCwgMC45OTk3MywgMSwgMC40NDg5OCwgMSwgMC45OTk0NiwgMSwgMS4wMDAzOSwgMS4wMDA4MiwgMC45OTk5MSwgMC45OTk5MSwgMC45OTk4NSwgMS4wMDAyMiwgMS4wMDAyMywgMS4wMDA2MSwgMS4wMDAwNiwgMC45OTk2NiwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMS4wMDAxOSwgMS4wMDA4LCAxLCAwLjk5OTI0LCAwLjk5OTI0LCAwLjk5OTI0LCAwLjk5OTgzLCAxLjAwMDQ0LCAwLjk5OTczLCAwLjk5OTY0LCAwLjk4MzMyLCAxLCAwLjk5OTczLCAxLCAxLCAwLjk5OTYyLCAwLjk5ODk1LCAxLjAwMDE2LCAwLjk5OTc3LCAxLjAwMDE2LCAwLjk5OTc3LCAxLjAwMDE2LCAwLjk5OTc3LCAxLjAwMDAxLCAxLCAxLCAxLCAwLjk5OTczLCAxLCAxLCAwLjk5OTU1LCAwLjk5OTI0LCAwLjk5OTI0LCAwLjk5OTI0LCAwLjk5OTI0LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTcyLCAxLCAxLCAxLjAwMjY3LCAwLjk5OTk5LCAwLjk5OTk4LCAwLjk5OTk4LCAxLCAwLjk5OTk4LCAxLjY2NDc1LCAxLCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDIzLCAwLjk5OTczLCAxLjAwNDIzLCAwLjk5OTI1LCAwLjk5OTk5LCAxLCAwLjk5OTkxLCAwLjk5OTg0LCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDQ5LCAxLCAxLjAwMjQ1LCAxLCAxLCAxLCAxLCAwLjk2MzI5LCAxLCAxLjIwOTg1LCAxLjM5NzEzLCAxLjAwMDAzLCAwLjgyNTQsIDEuMDAwMTUsIDEsIDEuMDAwMzUsIDEuMDAwMjcsIDEuMDAwMzEsIDEuMDAwMzEsIDEuMDAwMDMsIDEuMDAwMzEsIDEuMDAwMzEsIDAuOTk5OTksIDEuMDAwMDMsIDAuOTk5OTksIDAuOTk5OTksIDEuNDExNDQsIDEuNiwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MDU3OSwgMS40MDU3OSwgMS4zNjYyNSwgMC45OTk5OSwgMSwgMC45OTg2MSwgMC45OTg2MSwgMSwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMC45NTMxNywgMC45OTk5OSwgMC45OTk5OSwgMC45OTk5OSwgMC45OTk5OSwgMS40MDQ4MywgMSwgMC45OTk3NywgMS4wMDA1NCwgMSwgMSwgMC45OTk1MywgMC45OTk2MiwgMS4wMDA0MiwgMC45OTk1LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxXTtcbmV4cG9ydHMuSGVsdmV0aWNhSXRhbGljRmFjdG9ycyA9IEhlbHZldGljYUl0YWxpY0ZhY3RvcnM7XG5jb25zdCBIZWx2ZXRpY2FJdGFsaWNNZXRyaWNzID0ge1xuICBsaW5lSGVpZ2h0OiAxLjM1LFxuICBsaW5lR2FwOiAwLjJcbn07XG5leHBvcnRzLkhlbHZldGljYUl0YWxpY01ldHJpY3MgPSBIZWx2ZXRpY2FJdGFsaWNNZXRyaWNzO1xuY29uc3QgSGVsdmV0aWNhUmVndWxhckZhY3RvcnMgPSBbMC43NjExNiwgMSwgMSwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwMDYsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5ODIsIDEuMDAwMDEsIDEuMDAwNDMsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5NTksIDEuMDAwMDMsIDEuMDAwNiwgMC45OTk5OCwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwNiwgMSwgMS4wMDAwMywgMS4wMDAwMywgMS4wMDAwMywgMC45OTk3MywgMC45OTk4NywgMS4wMDAwMSwgMS4wMDAwMSwgMC45OTk3NywgMC45OTk3NywgMS4wMDAwMSwgMS4wMDAyNiwgMS4wMDAyMiwgMC45OTk3NywgMS4wMDA2LCAxLCAxLjAwMDAxLCAwLjk5OTczLCAwLjk5OTk5LCAwLjk5OTc3LCAxLjAwMDIyLCAxLjAwMDAxLCAxLjAwMDIyLCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDE2LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDI2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAwLjk5OTQ5LCAwLjk5OTczLCAwLjk5OTk4LCAwLjk5OTczLCAwLjk5OTczLCAxLCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDYsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5MjQsIDAuOTk5MjQsIDEsIDAuOTk5MjQsIDAuOTk5OTksIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5OTgsIDEsIDEuMDAwNiwgMC45OTk3MywgMSwgMC45OTk3NywgMSwgMSwgMSwgMS4wMDAwNSwgMS4wMDA5LCAxLjAwMDA1LCAxLjAwMDAzLCAwLjk5OTk4LCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDksIDAuOTk5NzMsIDAuOTk5OTgsIDEuMDAwMjUsIDAuOTk5NjgsIDAuOTk5NzMsIDEuMDAwMDMsIDEuMDAwMjUsIDAuNjAyOTksIDEuMDAwMjQsIDEuMDY0MDksIDEsIDEsIDAuOTk5OTgsIDEsIDAuOTk5OCwgMS4wMDA2LCAwLjk5OTk4LCAxLCAwLjk5OTM2LCAwLjk5OTczLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDI2LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5NzcsIDAuOTk5NzcsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMDMsIDEuMDAwMjIsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwMjYsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5ODIsIDEsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMS4wNjQwOSwgMS4wMDAyNiwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMSwgMC45OTk3MywgMSwgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMC45OTk3NywgMSwgMC45OTk3NywgMSwgMC45OTk3NywgMSwgMC45OTk3NywgMSwgMC45OTk3NywgMS4wNDU5NiwgMC45OTk3NywgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAyMiwgMC45OTk3MywgMS4wMDAyMiwgMC45OTk3MywgMS4wMDAyMiwgMC45OTk3MywgMS4wMDAyMiwgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAwLjk5OTI0LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDAxOSwgMS4wMDAzNCwgMSwgMC45OTkyNCwgMS4wMDAwMSwgMSwgMSwgMC45OTk3MywgMC45OTkyNCwgMC45OTk3MywgMC45OTkyNCwgMC45OTk3MywgMS4wMjU3MiwgMC45OTk3MywgMS4wMDAwNSwgMC45OTk3MywgMC45OTkyNCwgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk5OSwgMC45OTk4LCAwLjk5OTczLCAxLjAwMDIyLCAwLjk5OTczLCAxLjAwMDIyLCAwLjk5OTczLCAxLjAwMDIyLCAwLjk5OTczLCAxLCAxLjAwMDE2LCAwLjk5OTc3LCAwLjk5OTk4LCAwLjk5OTc3LCAwLjk5OTk4LCAwLjk5OTc3LCAwLjk5OTk4LCAxLjAwMDAxLCAxLCAxLjAwMDAxLCAxLCAxLjAwMDAxLCAxLCAxLjAwMDAxLCAxLCAxLjAwMDI2LCAxLjAwMDYsIDEuMDAwMjYsIDAuODQ1MzMsIDEuMDAwMjYsIDEuMDAwNiwgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMS4wMDAxNiwgMC45OTk3NywgMS4wMDAwMSwgMSwgMS4wMDAwMSwgMS4wMDAyNiwgMSwgMS4wMDAyNiwgMSwgMS4wMDAyNiwgMSwgMC45OTkyNCwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMSwgMC45OTk4MiwgMS4wMDAyMiwgMS4wMDAyNiwgMS4wMDAwMSwgMSwgMS4wMDAyNiwgMS4wMDA2LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTI4LCAxLCAwLjk5OTc3LCAxLjAwMDEzLCAxLjAwMDU1LCAwLjk5OTQ3LCAwLjk5OTQ1LCAwLjk5OTQxLCAwLjk5OTI0LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDQsIDAuOTE2MjEsIDEuMDAwMDEsIDEuMDAwMjYsIDAuOTk5NzcsIDEuMDAwMjIsIDEuMDAwNiwgMS4wMDAwMSwgMS4wMDAwNSwgMC45OTk5OSwgMC45OTk3NywgMS4wMDAxNSwgMS4wMDAyMiwgMC45OTk3NywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAyNiwgMS4wMDAwMSwgMS4wMDAxOSwgMS4wMDAwMSwgMC45OTk0NiwgMSwgMS4wMDA2LCAxLjAwMDAxLCAwLjk5OTc4LCAxLjAwMDQ1LCAwLjk5OTczLCAwLjk5OTI0LCAxLjAwMDIzLCAwLjk5OTc4LCAwLjk5OTY2LCAxLCAxLjAwMDY1LCAxLjAwMDQ1LCAxLjAwMDE5LCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTI0LCAxLCAxLCAwLjk2NDk5LCAxLCAxLjAwMDU1LCAwLjk5OTczLCAxLjAwMDA4LCAxLjAwMDI3LCAxLCAwLjk5OTcsIDAuOTk5OTUsIDEuMDAwMjMsIDAuOTk5MzMsIDEuMDAwMTksIDEuMDAwMTUsIDEuMDAwMzEsIDAuOTk5MjQsIDEuMDAwMjMsIDAuOTk5NzMsIDEuMDAwMjMsIDEuMDAwMzEsIDEuMDAwMDEsIDAuOTk5MjgsIDEuMDAwMjksIDEuMDAwOTIsIDEuMDAwMzUsIDEuMDAwMDEsIDEuMDAwNiwgMS4wMDA2LCAxLCAwLjk5OTg4LCAwLjk5OTc1LCAxLCAxLjAwMDgyLCAwLjk5NTYxLCAwLjk5OTYsIDEuMDAwMzUsIDEuMDAwMDEsIDAuOTk5NjIsIDEuMDAwMDEsIDEuMDAwOTIsIDAuOTk5NjQsIDEuMDAwMDEsIDAuOTk5NjMsIDAuOTk5OTksIDEuMDAwMzUsIDEuMDAwMzUsIDEuMDAwODIsIDAuOTk5NjIsIDAuOTk5OTksIDAuOTk5NzcsIDEuMDAwMjIsIDEuMDAwMzUsIDEuMDAwMDEsIDAuOTk5NzcsIDEuMDAwMjYsIDAuOTk5NiwgMC45OTk2NywgMS4wMDAwMSwgMS4wMDAzNCwgMS4wMDA3NCwgMS4wMDA1NCwgMS4wMDA1MywgMS4wMDA2MywgMC45OTk3MSwgMC45OTk2MiwgMS4wMDAzNSwgMC45OTk3NSwgMC45OTk3NywgMC45OTk3MywgMS4wMDA0MywgMC45OTk1MywgMS4wMDA3LCAwLjk5OTE1LCAwLjk5OTczLCAxLjAwMDA4LCAwLjk5ODkyLCAxLjAwMDczLCAxLjAwMDczLCAxLjAwMTE0LCAwLjk5OTE1LCAxLjAwMDczLCAwLjk5OTU1LCAwLjk5OTczLCAxLjAwMDkyLCAwLjk5OTczLCAxLCAwLjk5OTk4LCAxLCAxLjAwMDMsIDEsIDEuMDAwNDMsIDEuMDAwMDEsIDAuOTk5NjksIDEuMDAwMywgMSwgMS4wMDAzNSwgMS4wMDAwMSwgMC45OTk1LCAxLCAxLjAwMDkyLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDcsIDAuOTk5NSwgMSwgMC45OTkyNCwgMS4wMDA2LCAwLjk5OTI0LCAwLjk5OTcyLCAxLjAwMDYyLCAwLjk5OTczLCAxLjAwMTE0LCAxLjAwMDczLCAxLCAwLjk5OTU1LCAxLCAxLCAxLjAwMDQ3LCAwLjk5OTY4LCAxLjAwMDE2LCAwLjk5OTc3LCAxLjAwMDE2LCAwLjk5OTc3LCAxLjAwMDE2LCAwLjk5OTc3LCAxLjAwMDAxLCAxLCAxLCAxLCAwLjk5OTczLCAxLCAxLCAwLjk5OTU1LCAwLjk5OTI0LCAwLjk5OTI0LCAwLjk5OTI0LCAwLjk5OTI0LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTcyLCAxLCAxLCAxLjAwMjY3LCAwLjk5OTk5LCAwLjk5OTk4LCAwLjk5OTk4LCAxLCAwLjk5OTk4LCAxLjY2NDc1LCAxLCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDIzLCAwLjk5OTczLCAwLjk5OTcxLCAwLjk5OTI1LCAxLjAwMDIzLCAxLCAwLjk5OTkxLCAwLjk5OTg0LCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDAyLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk2MzI5LCAxLCAxLjIwOTg1LCAxLjM5NzEzLCAxLjAwMDAzLCAwLjgyNTQsIDEuMDAwMTUsIDEsIDEuMDAwMzUsIDEuMDAwMjcsIDEuMDAwMzEsIDEuMDAwMzEsIDAuOTk5MTUsIDEuMDAwMzEsIDEuMDAwMzEsIDAuOTk5OTksIDEuMDAwMDMsIDAuOTk5OTksIDAuOTk5OTksIDEuNDExNDQsIDEuNiwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MDU3OSwgMS40MDU3OSwgMS4zNjYyNSwgMC45OTk5OSwgMSwgMC45OTg2MSwgMC45OTg2MSwgMSwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMC45NTMxNywgMC45OTk5OSwgMC45OTk5OSwgMC45OTk5OSwgMC45OTk5OSwgMS40MDQ4MywgMSwgMC45OTk3NywgMS4wMDA1NCwgMSwgMSwgMC45OTk1MywgMC45OTk2MiwgMS4wMDA0MiwgMC45OTk1LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxXTtcbmV4cG9ydHMuSGVsdmV0aWNhUmVndWxhckZhY3RvcnMgPSBIZWx2ZXRpY2FSZWd1bGFyRmFjdG9ycztcbmNvbnN0IEhlbHZldGljYVJlZ3VsYXJNZXRyaWNzID0ge1xuICBsaW5lSGVpZ2h0OiAxLjIsXG4gIGxpbmVHYXA6IDAuMlxufTtcbmV4cG9ydHMuSGVsdmV0aWNhUmVndWxhck1ldHJpY3MgPSBIZWx2ZXRpY2FSZWd1bGFyTWV0cmljcztcblxuLyoqKi8gfSksXG4vKiAxNSAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMgPSBleHBvcnRzLkxpYmVyYXRpb25TYW5zUmVndWxhck1hcHBpbmcgPSBleHBvcnRzLkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzID0gZXhwb3J0cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcgPSBleHBvcnRzLkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocyA9IGV4cG9ydHMuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyA9IGV4cG9ydHMuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzID0gZXhwb3J0cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nID0gdm9pZCAwO1xuY29uc3QgTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzID0gWzM2NSwgMCwgMzMzLCAyNzgsIDMzMywgNDc0LCA1NTYsIDU1NiwgODg5LCA3MjIsIDIzOCwgMzMzLCAzMzMsIDM4OSwgNTg0LCAyNzgsIDMzMywgMjc4LCAyNzgsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzMzLCAzMzMsIDU4NCwgNTg0LCA1ODQsIDYxMSwgOTc1LCA3MjIsIDcyMiwgNzIyLCA3MjIsIDY2NywgNjExLCA3NzgsIDcyMiwgMjc4LCA1NTYsIDcyMiwgNjExLCA4MzMsIDcyMiwgNzc4LCA2NjcsIDc3OCwgNzIyLCA2NjcsIDYxMSwgNzIyLCA2NjcsIDk0NCwgNjY3LCA2NjcsIDYxMSwgMzMzLCAyNzgsIDMzMywgNTg0LCA1NTYsIDMzMywgNTU2LCA2MTEsIDU1NiwgNjExLCA1NTYsIDMzMywgNjExLCA2MTEsIDI3OCwgMjc4LCA1NTYsIDI3OCwgODg5LCA2MTEsIDYxMSwgNjExLCA2MTEsIDM4OSwgNTU2LCAzMzMsIDYxMSwgNTU2LCA3NzgsIDU1NiwgNTU2LCA1MDAsIDM4OSwgMjgwLCAzODksIDU4NCwgMzMzLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI4MCwgNTU2LCAzMzMsIDczNywgMzcwLCA1NTYsIDU4NCwgNzM3LCA1NTIsIDQwMCwgNTQ5LCAzMzMsIDMzMywgMzMzLCA1NzYsIDU1NiwgMjc4LCAzMzMsIDMzMywgMzY1LCA1NTYsIDgzNCwgODM0LCA4MzQsIDYxMSwgNzIyLCA3MjIsIDcyMiwgNzIyLCA3MjIsIDcyMiwgMTAwMCwgNzIyLCA2NjcsIDY2NywgNjY3LCA2NjcsIDI3OCwgMjc4LCAyNzgsIDI3OCwgNzIyLCA3MjIsIDc3OCwgNzc4LCA3NzgsIDc3OCwgNzc4LCA1ODQsIDc3OCwgNzIyLCA3MjIsIDcyMiwgNzIyLCA2NjcsIDY2NywgNjExLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA4ODksIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDYxMSwgNjExLCA2MTEsIDYxMSwgNjExLCA2MTEsIDYxMSwgNTQ5LCA2MTEsIDYxMSwgNjExLCA2MTEsIDYxMSwgNTU2LCA2MTEsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNzE5LCA3MjIsIDYxMSwgNjY3LCA1NTYsIDY2NywgNTU2LCA2NjcsIDU1NiwgNjY3LCA1NTYsIDY2NywgNTU2LCA3NzgsIDYxMSwgNzc4LCA2MTEsIDc3OCwgNjExLCA3NzgsIDYxMSwgNzIyLCA2MTEsIDcyMiwgNjExLCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDc4NSwgNTU2LCA1NTYsIDI3OCwgNzIyLCA1NTYsIDU1NiwgNjExLCAyNzgsIDYxMSwgMjc4LCA2MTEsIDM4NSwgNjExLCA0NzksIDYxMSwgMjc4LCA3MjIsIDYxMSwgNzIyLCA2MTEsIDcyMiwgNjExLCA3MDgsIDcyMywgNjExLCA3NzgsIDYxMSwgNzc4LCA2MTEsIDc3OCwgNjExLCAxMDAwLCA5NDQsIDcyMiwgMzg5LCA3MjIsIDM4OSwgNzIyLCAzODksIDY2NywgNTU2LCA2NjcsIDU1NiwgNjY3LCA1NTYsIDY2NywgNTU2LCA2MTEsIDMzMywgNjExLCA0NzksIDYxMSwgMzMzLCA3MjIsIDYxMSwgNzIyLCA2MTEsIDcyMiwgNjExLCA3MjIsIDYxMSwgNzIyLCA2MTEsIDcyMiwgNjExLCA5NDQsIDc3OCwgNjY3LCA1NTYsIDY2NywgNjExLCA1MDAsIDYxMSwgNTAwLCA2MTEsIDUwMCwgMjc4LCA1NTYsIDcyMiwgNTU2LCAxMDAwLCA4ODksIDc3OCwgNjExLCA2NjcsIDU1NiwgNjExLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgNDY1LCA3MjIsIDMzMywgODUzLCA5MDYsIDQ3NCwgODI1LCA5MjcsIDgzOCwgMjc4LCA3MjIsIDcyMiwgNjAxLCA3MTksIDY2NywgNjExLCA3MjIsIDc3OCwgMjc4LCA3MjIsIDY2NywgODMzLCA3MjIsIDY0NCwgNzc4LCA3MjIsIDY2NywgNjAwLCA2MTEsIDY2NywgODIxLCA2NjcsIDgwOSwgODAyLCAyNzgsIDY2NywgNjE1LCA0NTEsIDYxMSwgMjc4LCA1ODIsIDYxNSwgNjEwLCA1NTYsIDYwNiwgNDc1LCA0NjAsIDYxMSwgNTQxLCAyNzgsIDU1OCwgNTU2LCA2MTIsIDU1NiwgNDQ1LCA2MTEsIDc2NiwgNjE5LCA1MjAsIDY4NCwgNDQ2LCA1ODIsIDcxNSwgNTc2LCA3NTMsIDg0NSwgMjc4LCA1ODIsIDYxMSwgNTgyLCA4NDUsIDY2NywgNjY5LCA4ODUsIDU2NywgNzExLCA2NjcsIDI3OCwgMjc2LCA1NTYsIDEwOTQsIDEwNjIsIDg3NSwgNjEwLCA3MjIsIDYyMiwgNzE5LCA3MjIsIDcxOSwgNzIyLCA1NjcsIDcxMiwgNjY3LCA5MDQsIDYyNiwgNzE5LCA3MTksIDYxMCwgNzAyLCA4MzMsIDcyMiwgNzc4LCA3MTksIDY2NywgNzIyLCA2MTEsIDYyMiwgODU0LCA2NjcsIDczMCwgNzAzLCAxMDA1LCAxMDE5LCA4NzAsIDk3OSwgNzE5LCA3MTEsIDEwMzEsIDcxOSwgNTU2LCA2MTgsIDYxNSwgNDE3LCA2MzUsIDU1NiwgNzA5LCA0OTcsIDYxNSwgNjE1LCA1MDAsIDYzNSwgNzQwLCA2MDQsIDYxMSwgNjA0LCA2MTEsIDU1NiwgNDkwLCA1NTYsIDg3NSwgNTU2LCA2MTUsIDU4MSwgODMzLCA4NDQsIDcyOSwgODU0LCA2MTUsIDU1MiwgODU0LCA1ODMsIDU1NiwgNTU2LCA2MTEsIDQxNywgNTUyLCA1NTYsIDI3OCwgMjgxLCAyNzgsIDk2OSwgOTA2LCA2MTEsIDUwMCwgNjE1LCA1NTYsIDYwNCwgNzc4LCA2MTEsIDQ4NywgNDQ3LCA5NDQsIDc3OCwgOTQ0LCA3NzgsIDk0NCwgNzc4LCA2NjcsIDU1NiwgMzMzLCAzMzMsIDU1NiwgMTAwMCwgMTAwMCwgNTUyLCAyNzgsIDI3OCwgMjc4LCAyNzgsIDUwMCwgNTAwLCA1MDAsIDU1NiwgNTU2LCAzNTAsIDEwMDAsIDEwMDAsIDI0MCwgNDc5LCAzMzMsIDMzMywgNjA0LCAzMzMsIDE2NywgMzk2LCA1NTYsIDU1NiwgMTA5NCwgNTU2LCA4ODUsIDQ4OSwgMTExNSwgMTAwMCwgNzY4LCA2MDAsIDgzNCwgODM0LCA4MzQsIDgzNCwgMTAwMCwgNTAwLCAxMDAwLCA1MDAsIDEwMDAsIDUwMCwgNTAwLCA0OTQsIDYxMiwgODIzLCA3MTMsIDU4NCwgNTQ5LCA3MTMsIDk3OSwgNzIyLCAyNzQsIDU0OSwgNTQ5LCA1ODMsIDU0OSwgNTQ5LCA2MDQsIDU4NCwgNjA0LCA2MDQsIDcwOCwgNjI1LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MjksIDYwNCwgNjA0LCAzNTQsIDM1NCwgMTAwMCwgOTkwLCA5OTAsIDk5MCwgOTkwLCA0OTQsIDYwNCwgNjA0LCA2MDQsIDYwNCwgMzU0LCAxMDIxLCAxMDUyLCA5MTcsIDc1MCwgNzUwLCA1MzEsIDY1NiwgNTk0LCA1MTAsIDUwMCwgNzUwLCA3NTAsIDYxMSwgNjExLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMjIyLCAyMjIsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzXTtcbmV4cG9ydHMuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzID0gTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzO1xuY29uc3QgTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyA9IFstMSwgLTEsIC0xLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwgOTYsIDk3LCA5OCwgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsIDExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDE2MSwgMTYyLCAxNjMsIDE2NCwgMTY1LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcxLCAxNzIsIDE3NCwgMTc1LCAxNzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywgMTg0LCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwLCAxOTEsIDE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywgMjA4LCAyMDksIDIxMCwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDIxOSwgMjIwLCAyMjEsIDIyMiwgMjIzLCAyMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwgMjMyLCAyMzMsIDIzNCwgMjM1LCAyMzYsIDIzNywgMjM4LCAyMzksIDI0MCwgMjQxLCAyNDIsIDI0MywgMjQ0LCAyNDUsIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDI1MiwgMjUzLCAyNTQsIDI1NSwgMjU2LCAyNTcsIDI1OCwgMjU5LCAyNjAsIDI2MSwgMjYyLCAyNjMsIDI2NCwgMjY1LCAyNjYsIDI2NywgMjY4LCAyNjksIDI3MCwgMjcxLCAyNzIsIDI3MywgMjc0LCAyNzUsIDI3NiwgMjc3LCAyNzgsIDI3OSwgMjgwLCAyODEsIDI4MiwgMjgzLCAyODQsIDI4NSwgMjg2LCAyODcsIDI4OCwgMjg5LCAyOTAsIDI5MSwgMjkyLCAyOTMsIDI5NCwgMjk1LCAyOTYsIDI5NywgMjk4LCAyOTksIDMwMCwgMzAxLCAzMDIsIDMwMywgMzA0LCAzMDUsIDMwNiwgMzA3LCAzMDgsIDMwOSwgMzEwLCAzMTEsIDMxMiwgMzEzLCAzMTQsIDMxNSwgMzE2LCAzMTcsIDMxOCwgMzE5LCAzMjAsIDMyMSwgMzIyLCAzMjMsIDMyNCwgMzI1LCAzMjYsIDMyNywgMzI4LCAzMjksIDMzMCwgMzMxLCAzMzIsIDMzMywgMzM0LCAzMzUsIDMzNiwgMzM3LCAzMzgsIDMzOSwgMzQwLCAzNDEsIDM0MiwgMzQzLCAzNDQsIDM0NSwgMzQ2LCAzNDcsIDM0OCwgMzQ5LCAzNTAsIDM1MSwgMzUyLCAzNTMsIDM1NCwgMzU1LCAzNTYsIDM1NywgMzU4LCAzNTksIDM2MCwgMzYxLCAzNjIsIDM2MywgMzY0LCAzNjUsIDM2NiwgMzY3LCAzNjgsIDM2OSwgMzcwLCAzNzEsIDM3MiwgMzczLCAzNzQsIDM3NSwgMzc2LCAzNzcsIDM3OCwgMzc5LCAzODAsIDM4MSwgMzgyLCAzODMsIDQwMiwgNTA2LCA1MDcsIDUwOCwgNTA5LCA1MTAsIDUxMSwgNTM2LCA1MzcsIDUzOCwgNTM5LCA3MTAsIDcxMSwgNzEzLCA3MjgsIDcyOSwgNzMwLCA3MzEsIDczMiwgNzMzLCA5MDAsIDkwMSwgOTAyLCA5MDMsIDkwNCwgOTA1LCA5MDYsIDkwOCwgOTEwLCA5MTEsIDkxMiwgOTEzLCA5MTQsIDkxNSwgOTE2LCA5MTcsIDkxOCwgOTE5LCA5MjAsIDkyMSwgOTIyLCA5MjMsIDkyNCwgOTI1LCA5MjYsIDkyNywgOTI4LCA5MjksIDkzMSwgOTMyLCA5MzMsIDkzNCwgOTM1LCA5MzYsIDkzNywgOTM4LCA5MzksIDk0MCwgOTQxLCA5NDIsIDk0MywgOTQ0LCA5NDUsIDk0NiwgOTQ3LCA5NDgsIDk0OSwgOTUwLCA5NTEsIDk1MiwgOTUzLCA5NTQsIDk1NSwgOTU2LCA5NTcsIDk1OCwgOTU5LCA5NjAsIDk2MSwgOTYyLCA5NjMsIDk2NCwgOTY1LCA5NjYsIDk2NywgOTY4LCA5NjksIDk3MCwgOTcxLCA5NzIsIDk3MywgOTc0LCAxMDI0LCAxMDI1LCAxMDI2LCAxMDI3LCAxMDI4LCAxMDI5LCAxMDMwLCAxMDMxLCAxMDMyLCAxMDMzLCAxMDM0LCAxMDM1LCAxMDM2LCAxMDM3LCAxMDM4LCAxMDM5LCAxMDQwLCAxMDQxLCAxMDQyLCAxMDQzLCAxMDQ0LCAxMDQ1LCAxMDQ2LCAxMDQ3LCAxMDQ4LCAxMDQ5LCAxMDUwLCAxMDUxLCAxMDUyLCAxMDUzLCAxMDU0LCAxMDU1LCAxMDU2LCAxMDU3LCAxMDU4LCAxMDU5LCAxMDYwLCAxMDYxLCAxMDYyLCAxMDYzLCAxMDY0LCAxMDY1LCAxMDY2LCAxMDY3LCAxMDY4LCAxMDY5LCAxMDcwLCAxMDcxLCAxMDcyLCAxMDczLCAxMDc0LCAxMDc1LCAxMDc2LCAxMDc3LCAxMDc4LCAxMDc5LCAxMDgwLCAxMDgxLCAxMDgyLCAxMDgzLCAxMDg0LCAxMDg1LCAxMDg2LCAxMDg3LCAxMDg4LCAxMDg5LCAxMDkwLCAxMDkxLCAxMDkyLCAxMDkzLCAxMDk0LCAxMDk1LCAxMDk2LCAxMDk3LCAxMDk4LCAxMDk5LCAxMTAwLCAxMTAxLCAxMTAyLCAxMTAzLCAxMTA0LCAxMTA1LCAxMTA2LCAxMTA3LCAxMTA4LCAxMTA5LCAxMTEwLCAxMTExLCAxMTEyLCAxMTEzLCAxMTE0LCAxMTE1LCAxMTE2LCAxMTE3LCAxMTE4LCAxMTE5LCAxMTM4LCAxMTM5LCAxMTY4LCAxMTY5LCA3ODA4LCA3ODA5LCA3ODEwLCA3ODExLCA3ODEyLCA3ODEzLCA3OTIyLCA3OTIzLCA4MjA4LCA4MjA5LCA4MjExLCA4MjEyLCA4MjEzLCA4MjE1LCA4MjE2LCA4MjE3LCA4MjE4LCA4MjE5LCA4MjIwLCA4MjIxLCA4MjIyLCA4MjI0LCA4MjI1LCA4MjI2LCA4MjMwLCA4MjQwLCA4MjQyLCA4MjQzLCA4MjQ5LCA4MjUwLCA4MjUyLCA4MjU0LCA4MjYwLCA4MzE5LCA4MzU1LCA4MzU2LCA4MzU5LCA4MzY0LCA4NDUzLCA4NDY3LCA4NDcwLCA4NDgyLCA4NDg2LCA4NDk0LCA4NTM5LCA4NTQwLCA4NTQxLCA4NTQyLCA4NTkyLCA4NTkzLCA4NTk0LCA4NTk1LCA4NTk2LCA4NTk3LCA4NjE2LCA4NzA2LCA4NzEwLCA4NzE5LCA4NzIxLCA4NzIyLCA4NzMwLCA4NzM0LCA4NzM1LCA4NzQ1LCA4NzQ3LCA4Nzc2LCA4ODAwLCA4ODAxLCA4ODA0LCA4ODA1LCA4OTYyLCA4OTc2LCA4OTkyLCA4OTkzLCA5NDcyLCA5NDc0LCA5NDg0LCA5NDg4LCA5NDkyLCA5NDk2LCA5NTAwLCA5NTA4LCA5NTE2LCA5NTI0LCA5NTMyLCA5NTUyLCA5NTUzLCA5NTU0LCA5NTU1LCA5NTU2LCA5NTU3LCA5NTU4LCA5NTU5LCA5NTYwLCA5NTYxLCA5NTYyLCA5NTYzLCA5NTY0LCA5NTY1LCA5NTY2LCA5NTY3LCA5NTY4LCA5NTY5LCA5NTcwLCA5NTcxLCA5NTcyLCA5NTczLCA5NTc0LCA5NTc1LCA5NTc2LCA5NTc3LCA5NTc4LCA5NTc5LCA5NTgwLCA5NjAwLCA5NjA0LCA5NjA4LCA5NjEyLCA5NjE2LCA5NjE3LCA5NjE4LCA5NjE5LCA5NjMyLCA5NjMzLCA5NjQyLCA5NjQzLCA5NjQ0LCA5NjUwLCA5NjU4LCA5NjYwLCA5NjY4LCA5Njc0LCA5Njc1LCA5Njc5LCA5Njg4LCA5Njg5LCA5NzAyLCA5Nzg2LCA5Nzg3LCA5Nzg4LCA5NzkyLCA5Nzk0LCA5ODI0LCA5ODI3LCA5ODI5LCA5ODMwLCA5ODM0LCA5ODM1LCA5ODM2LCA2MTQ0MSwgNjE0NDIsIDYxNDQ1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTFdO1xuZXhwb3J0cy5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nID0gTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZztcbmNvbnN0IExpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocyA9IFszNjUsIDAsIDMzMywgMjc4LCAzMzMsIDQ3NCwgNTU2LCA1NTYsIDg4OSwgNzIyLCAyMzgsIDMzMywgMzMzLCAzODksIDU4NCwgMjc4LCAzMzMsIDI3OCwgMjc4LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDMzMywgMzMzLCA1ODQsIDU4NCwgNTg0LCA2MTEsIDk3NSwgNzIyLCA3MjIsIDcyMiwgNzIyLCA2NjcsIDYxMSwgNzc4LCA3MjIsIDI3OCwgNTU2LCA3MjIsIDYxMSwgODMzLCA3MjIsIDc3OCwgNjY3LCA3NzgsIDcyMiwgNjY3LCA2MTEsIDcyMiwgNjY3LCA5NDQsIDY2NywgNjY3LCA2MTEsIDMzMywgMjc4LCAzMzMsIDU4NCwgNTU2LCAzMzMsIDU1NiwgNjExLCA1NTYsIDYxMSwgNTU2LCAzMzMsIDYxMSwgNjExLCAyNzgsIDI3OCwgNTU2LCAyNzgsIDg4OSwgNjExLCA2MTEsIDYxMSwgNjExLCAzODksIDU1NiwgMzMzLCA2MTEsIDU1NiwgNzc4LCA1NTYsIDU1NiwgNTAwLCAzODksIDI4MCwgMzg5LCA1ODQsIDMzMywgNTU2LCA1NTYsIDU1NiwgNTU2LCAyODAsIDU1NiwgMzMzLCA3MzcsIDM3MCwgNTU2LCA1ODQsIDczNywgNTUyLCA0MDAsIDU0OSwgMzMzLCAzMzMsIDMzMywgNTc2LCA1NTYsIDI3OCwgMzMzLCAzMzMsIDM2NSwgNTU2LCA4MzQsIDgzNCwgODM0LCA2MTEsIDcyMiwgNzIyLCA3MjIsIDcyMiwgNzIyLCA3MjIsIDEwMDAsIDcyMiwgNjY3LCA2NjcsIDY2NywgNjY3LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDcyMiwgNzIyLCA3NzgsIDc3OCwgNzc4LCA3NzgsIDc3OCwgNTg0LCA3NzgsIDcyMiwgNzIyLCA3MjIsIDcyMiwgNjY3LCA2NjcsIDYxMSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgODg5LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjc4LCAyNzgsIDI3OCwgMjc4LCA2MTEsIDYxMSwgNjExLCA2MTEsIDYxMSwgNjExLCA2MTEsIDU0OSwgNjExLCA2MTEsIDYxMSwgNjExLCA2MTEsIDU1NiwgNjExLCA1NTYsIDcyMiwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCA3MjIsIDc0MCwgNzIyLCA2MTEsIDY2NywgNTU2LCA2NjcsIDU1NiwgNjY3LCA1NTYsIDY2NywgNTU2LCA2NjcsIDU1NiwgNzc4LCA2MTEsIDc3OCwgNjExLCA3NzgsIDYxMSwgNzc4LCA2MTEsIDcyMiwgNjExLCA3MjIsIDYxMSwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCA3ODIsIDU1NiwgNTU2LCAyNzgsIDcyMiwgNTU2LCA1NTYsIDYxMSwgMjc4LCA2MTEsIDI3OCwgNjExLCAzOTYsIDYxMSwgNDc5LCA2MTEsIDI3OCwgNzIyLCA2MTEsIDcyMiwgNjExLCA3MjIsIDYxMSwgNzA4LCA3MjMsIDYxMSwgNzc4LCA2MTEsIDc3OCwgNjExLCA3NzgsIDYxMSwgMTAwMCwgOTQ0LCA3MjIsIDM4OSwgNzIyLCAzODksIDcyMiwgMzg5LCA2NjcsIDU1NiwgNjY3LCA1NTYsIDY2NywgNTU2LCA2NjcsIDU1NiwgNjExLCAzMzMsIDYxMSwgNDc5LCA2MTEsIDMzMywgNzIyLCA2MTEsIDcyMiwgNjExLCA3MjIsIDYxMSwgNzIyLCA2MTEsIDcyMiwgNjExLCA3MjIsIDYxMSwgOTQ0LCA3NzgsIDY2NywgNTU2LCA2NjcsIDYxMSwgNTAwLCA2MTEsIDUwMCwgNjExLCA1MDAsIDI3OCwgNTU2LCA3MjIsIDU1NiwgMTAwMCwgODg5LCA3NzgsIDYxMSwgNjY3LCA1NTYsIDYxMSwgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgNzIyLCAzMzMsIDg1NCwgOTA2LCA0NzMsIDg0NCwgOTMwLCA4NDcsIDI3OCwgNzIyLCA3MjIsIDYxMCwgNjcxLCA2NjcsIDYxMSwgNzIyLCA3NzgsIDI3OCwgNzIyLCA2NjcsIDgzMywgNzIyLCA2NTcsIDc3OCwgNzE4LCA2NjcsIDU5MCwgNjExLCA2NjcsIDgyMiwgNjY3LCA4MjksIDc4MSwgMjc4LCA2NjcsIDYyMCwgNDc5LCA2MTEsIDI3OCwgNTkxLCA2MjAsIDYyMSwgNTU2LCA2MTAsIDQ3OSwgNDkyLCA2MTEsIDU1OCwgMjc4LCA1NjYsIDU1NiwgNjAzLCA1NTYsIDQ1MCwgNjExLCA3MTIsIDYwNSwgNTMyLCA2NjQsIDQwOSwgNTkxLCA3MDQsIDU3OCwgNzczLCA4MzQsIDI3OCwgNTkxLCA2MTEsIDU5MSwgODM0LCA2NjcsIDY2NywgODg2LCA2MTQsIDcxOSwgNjY3LCAyNzgsIDI3OCwgNTU2LCAxMDk0LCAxMDQyLCA4NTQsIDYyMiwgNzE5LCA2NzcsIDcxOSwgNzIyLCA3MDgsIDcyMiwgNjE0LCA3MjIsIDY2NywgOTI3LCA2NDMsIDcxOSwgNzE5LCA2MTUsIDY4NywgODMzLCA3MjIsIDc3OCwgNzE5LCA2NjcsIDcyMiwgNjExLCA2NzcsIDc4MSwgNjY3LCA3MjksIDcwOCwgOTc5LCA5ODksIDg1NCwgMTAwMCwgNzA4LCA3MTksIDEwNDIsIDcyOSwgNTU2LCA2MTksIDYwNCwgNTM0LCA2MTgsIDU1NiwgNzM2LCA1MTAsIDYxMSwgNjExLCA1MDcsIDYyMiwgNzQwLCA2MDQsIDYxMSwgNjExLCA2MTEsIDU1NiwgODg5LCA1NTYsIDg4NSwgNTU2LCA2NDYsIDU4MywgODg5LCA5MzUsIDcwNywgODU0LCA1OTQsIDU1MiwgODY1LCA1ODksIDU1NiwgNTU2LCA2MTEsIDQ2OSwgNTYzLCA1NTYsIDI3OCwgMjc4LCAyNzgsIDk2OSwgOTA2LCA2MTEsIDUwNywgNjE5LCA1NTYsIDYxMSwgNzc4LCA2MTEsIDU3NSwgNDY3LCA5NDQsIDc3OCwgOTQ0LCA3NzgsIDk0NCwgNzc4LCA2NjcsIDU1NiwgMzMzLCAzMzMsIDU1NiwgMTAwMCwgMTAwMCwgNTUyLCAyNzgsIDI3OCwgMjc4LCAyNzgsIDUwMCwgNTAwLCA1MDAsIDU1NiwgNTU2LCAzNTAsIDEwMDAsIDEwMDAsIDI0MCwgNDc5LCAzMzMsIDMzMywgNjA0LCAzMzMsIDE2NywgMzk2LCA1NTYsIDU1NiwgMTEwNCwgNTU2LCA4ODUsIDUxNiwgMTE0NiwgMTAwMCwgNzY4LCA2MDAsIDgzNCwgODM0LCA4MzQsIDgzNCwgOTk5LCA1MDAsIDEwMDAsIDUwMCwgMTAwMCwgNTAwLCA1MDAsIDQ5NCwgNjEyLCA4MjMsIDcxMywgNTg0LCA1NDksIDcxMywgOTc5LCA3MjIsIDI3NCwgNTQ5LCA1NDksIDU4MywgNTQ5LCA1NDksIDYwNCwgNTg0LCA2MDQsIDYwNCwgNzA4LCA2MjUsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcyOSwgNjA0LCA2MDQsIDM1NCwgMzU0LCAxMDAwLCA5OTAsIDk5MCwgOTkwLCA5OTAsIDQ5NCwgNjA0LCA2MDQsIDYwNCwgNjA0LCAzNTQsIDEwMjEsIDEwNTIsIDkxNywgNzUwLCA3NTAsIDUzMSwgNjU2LCA1OTQsIDUxMCwgNTAwLCA3NTAsIDc1MCwgNjExLCA2MTEsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAyMjIsIDIyMiwgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzNdO1xuZXhwb3J0cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMgPSBMaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHM7XG5jb25zdCBMaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nID0gWy0xLCAtMSwgLTEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgODIsIDgzLCA4NCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk1LCA5NiwgOTcsIDk4LCA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwgMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTYxLCAxNjIsIDE2MywgMTY0LCAxNjUsIDE2NiwgMTY3LCAxNjgsIDE2OSwgMTcwLCAxNzEsIDE3MiwgMTc0LCAxNzUsIDE3NiwgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODEsIDE4MiwgMTgzLCAxODQsIDE4NSwgMTg2LCAxODcsIDE4OCwgMTg5LCAxOTAsIDE5MSwgMTkyLCAxOTMsIDE5NCwgMTk1LCAxOTYsIDE5NywgMTk4LCAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgMjA0LCAyMDUsIDIwNiwgMjA3LCAyMDgsIDIwOSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMSwgMjIyLCAyMjMsIDIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIzMCwgMjMxLCAyMzIsIDIzMywgMjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwgMjQwLCAyNDEsIDI0MiwgMjQzLCAyNDQsIDI0NSwgMjQ2LCAyNDcsIDI0OCwgMjQ5LCAyNTAsIDI1MSwgMjUyLCAyNTMsIDI1NCwgMjU1LCAyNTYsIDI1NywgMjU4LCAyNTksIDI2MCwgMjYxLCAyNjIsIDI2MywgMjY0LCAyNjUsIDI2NiwgMjY3LCAyNjgsIDI2OSwgMjcwLCAyNzEsIDI3MiwgMjczLCAyNzQsIDI3NSwgMjc2LCAyNzcsIDI3OCwgMjc5LCAyODAsIDI4MSwgMjgyLCAyODMsIDI4NCwgMjg1LCAyODYsIDI4NywgMjg4LCAyODksIDI5MCwgMjkxLCAyOTIsIDI5MywgMjk0LCAyOTUsIDI5NiwgMjk3LCAyOTgsIDI5OSwgMzAwLCAzMDEsIDMwMiwgMzAzLCAzMDQsIDMwNSwgMzA2LCAzMDcsIDMwOCwgMzA5LCAzMTAsIDMxMSwgMzEyLCAzMTMsIDMxNCwgMzE1LCAzMTYsIDMxNywgMzE4LCAzMTksIDMyMCwgMzIxLCAzMjIsIDMyMywgMzI0LCAzMjUsIDMyNiwgMzI3LCAzMjgsIDMyOSwgMzMwLCAzMzEsIDMzMiwgMzMzLCAzMzQsIDMzNSwgMzM2LCAzMzcsIDMzOCwgMzM5LCAzNDAsIDM0MSwgMzQyLCAzNDMsIDM0NCwgMzQ1LCAzNDYsIDM0NywgMzQ4LCAzNDksIDM1MCwgMzUxLCAzNTIsIDM1MywgMzU0LCAzNTUsIDM1NiwgMzU3LCAzNTgsIDM1OSwgMzYwLCAzNjEsIDM2MiwgMzYzLCAzNjQsIDM2NSwgMzY2LCAzNjcsIDM2OCwgMzY5LCAzNzAsIDM3MSwgMzcyLCAzNzMsIDM3NCwgMzc1LCAzNzYsIDM3NywgMzc4LCAzNzksIDM4MCwgMzgxLCAzODIsIDM4MywgNDAyLCA1MDYsIDUwNywgNTA4LCA1MDksIDUxMCwgNTExLCA1MzYsIDUzNywgNTM4LCA1MzksIDcxMCwgNzExLCA3MTMsIDcyOCwgNzI5LCA3MzAsIDczMSwgNzMyLCA3MzMsIDkwMCwgOTAxLCA5MDIsIDkwMywgOTA0LCA5MDUsIDkwNiwgOTA4LCA5MTAsIDkxMSwgOTEyLCA5MTMsIDkxNCwgOTE1LCA5MTYsIDkxNywgOTE4LCA5MTksIDkyMCwgOTIxLCA5MjIsIDkyMywgOTI0LCA5MjUsIDkyNiwgOTI3LCA5MjgsIDkyOSwgOTMxLCA5MzIsIDkzMywgOTM0LCA5MzUsIDkzNiwgOTM3LCA5MzgsIDkzOSwgOTQwLCA5NDEsIDk0MiwgOTQzLCA5NDQsIDk0NSwgOTQ2LCA5NDcsIDk0OCwgOTQ5LCA5NTAsIDk1MSwgOTUyLCA5NTMsIDk1NCwgOTU1LCA5NTYsIDk1NywgOTU4LCA5NTksIDk2MCwgOTYxLCA5NjIsIDk2MywgOTY0LCA5NjUsIDk2NiwgOTY3LCA5NjgsIDk2OSwgOTcwLCA5NzEsIDk3MiwgOTczLCA5NzQsIDEwMjQsIDEwMjUsIDEwMjYsIDEwMjcsIDEwMjgsIDEwMjksIDEwMzAsIDEwMzEsIDEwMzIsIDEwMzMsIDEwMzQsIDEwMzUsIDEwMzYsIDEwMzcsIDEwMzgsIDEwMzksIDEwNDAsIDEwNDEsIDEwNDIsIDEwNDMsIDEwNDQsIDEwNDUsIDEwNDYsIDEwNDcsIDEwNDgsIDEwNDksIDEwNTAsIDEwNTEsIDEwNTIsIDEwNTMsIDEwNTQsIDEwNTUsIDEwNTYsIDEwNTcsIDEwNTgsIDEwNTksIDEwNjAsIDEwNjEsIDEwNjIsIDEwNjMsIDEwNjQsIDEwNjUsIDEwNjYsIDEwNjcsIDEwNjgsIDEwNjksIDEwNzAsIDEwNzEsIDEwNzIsIDEwNzMsIDEwNzQsIDEwNzUsIDEwNzYsIDEwNzcsIDEwNzgsIDEwNzksIDEwODAsIDEwODEsIDEwODIsIDEwODMsIDEwODQsIDEwODUsIDEwODYsIDEwODcsIDEwODgsIDEwODksIDEwOTAsIDEwOTEsIDEwOTIsIDEwOTMsIDEwOTQsIDEwOTUsIDEwOTYsIDEwOTcsIDEwOTgsIDEwOTksIDExMDAsIDExMDEsIDExMDIsIDExMDMsIDExMDQsIDExMDUsIDExMDYsIDExMDcsIDExMDgsIDExMDksIDExMTAsIDExMTEsIDExMTIsIDExMTMsIDExMTQsIDExMTUsIDExMTYsIDExMTcsIDExMTgsIDExMTksIDExMzgsIDExMzksIDExNjgsIDExNjksIDc4MDgsIDc4MDksIDc4MTAsIDc4MTEsIDc4MTIsIDc4MTMsIDc5MjIsIDc5MjMsIDgyMDgsIDgyMDksIDgyMTEsIDgyMTIsIDgyMTMsIDgyMTUsIDgyMTYsIDgyMTcsIDgyMTgsIDgyMTksIDgyMjAsIDgyMjEsIDgyMjIsIDgyMjQsIDgyMjUsIDgyMjYsIDgyMzAsIDgyNDAsIDgyNDIsIDgyNDMsIDgyNDksIDgyNTAsIDgyNTIsIDgyNTQsIDgyNjAsIDgzMTksIDgzNTUsIDgzNTYsIDgzNTksIDgzNjQsIDg0NTMsIDg0NjcsIDg0NzAsIDg0ODIsIDg0ODYsIDg0OTQsIDg1MzksIDg1NDAsIDg1NDEsIDg1NDIsIDg1OTIsIDg1OTMsIDg1OTQsIDg1OTUsIDg1OTYsIDg1OTcsIDg2MTYsIDg3MDYsIDg3MTAsIDg3MTksIDg3MjEsIDg3MjIsIDg3MzAsIDg3MzQsIDg3MzUsIDg3NDUsIDg3NDcsIDg3NzYsIDg4MDAsIDg4MDEsIDg4MDQsIDg4MDUsIDg5NjIsIDg5NzYsIDg5OTIsIDg5OTMsIDk0NzIsIDk0NzQsIDk0ODQsIDk0ODgsIDk0OTIsIDk0OTYsIDk1MDAsIDk1MDgsIDk1MTYsIDk1MjQsIDk1MzIsIDk1NTIsIDk1NTMsIDk1NTQsIDk1NTUsIDk1NTYsIDk1NTcsIDk1NTgsIDk1NTksIDk1NjAsIDk1NjEsIDk1NjIsIDk1NjMsIDk1NjQsIDk1NjUsIDk1NjYsIDk1NjcsIDk1NjgsIDk1NjksIDk1NzAsIDk1NzEsIDk1NzIsIDk1NzMsIDk1NzQsIDk1NzUsIDk1NzYsIDk1NzcsIDk1NzgsIDk1NzksIDk1ODAsIDk2MDAsIDk2MDQsIDk2MDgsIDk2MTIsIDk2MTYsIDk2MTcsIDk2MTgsIDk2MTksIDk2MzIsIDk2MzMsIDk2NDIsIDk2NDMsIDk2NDQsIDk2NTAsIDk2NTgsIDk2NjAsIDk2NjgsIDk2NzQsIDk2NzUsIDk2NzksIDk2ODgsIDk2ODksIDk3MDIsIDk3ODYsIDk3ODcsIDk3ODgsIDk3OTIsIDk3OTQsIDk4MjQsIDk4MjcsIDk4MjksIDk4MzAsIDk4MzQsIDk4MzUsIDk4MzYsIDYxNDQxLCA2MTQ0MiwgNjE0NDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMV07XG5leHBvcnRzLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmcgPSBMaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nO1xuY29uc3QgTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMgPSBbMzY1LCAwLCAzMzMsIDI3OCwgMjc4LCAzNTUsIDU1NiwgNTU2LCA4ODksIDY2NywgMTkxLCAzMzMsIDMzMywgMzg5LCA1ODQsIDI3OCwgMzMzLCAyNzgsIDI3OCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNzgsIDI3OCwgNTg0LCA1ODQsIDU4NCwgNTU2LCAxMDE1LCA2NjcsIDY2NywgNzIyLCA3MjIsIDY2NywgNjExLCA3NzgsIDcyMiwgMjc4LCA1MDAsIDY2NywgNTU2LCA4MzMsIDcyMiwgNzc4LCA2NjcsIDc3OCwgNzIyLCA2NjcsIDYxMSwgNzIyLCA2NjcsIDk0NCwgNjY3LCA2NjcsIDYxMSwgMjc4LCAyNzgsIDI3OCwgNDY5LCA1NTYsIDMzMywgNTU2LCA1NTYsIDUwMCwgNTU2LCA1NTYsIDI3OCwgNTU2LCA1NTYsIDIyMiwgMjIyLCA1MDAsIDIyMiwgODMzLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDMzMywgNTAwLCAyNzgsIDU1NiwgNTAwLCA3MjIsIDUwMCwgNTAwLCA1MDAsIDMzNCwgMjYwLCAzMzQsIDU4NCwgMzMzLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI2MCwgNTU2LCAzMzMsIDczNywgMzcwLCA1NTYsIDU4NCwgNzM3LCA1NTIsIDQwMCwgNTQ5LCAzMzMsIDMzMywgMzMzLCA1NzYsIDUzNywgMjc4LCAzMzMsIDMzMywgMzY1LCA1NTYsIDgzNCwgODM0LCA4MzQsIDYxMSwgNjY3LCA2NjcsIDY2NywgNjY3LCA2NjcsIDY2NywgMTAwMCwgNzIyLCA2NjcsIDY2NywgNjY3LCA2NjcsIDI3OCwgMjc4LCAyNzgsIDI3OCwgNzIyLCA3MjIsIDc3OCwgNzc4LCA3NzgsIDc3OCwgNzc4LCA1ODQsIDc3OCwgNzIyLCA3MjIsIDcyMiwgNzIyLCA2NjcsIDY2NywgNjExLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA4ODksIDUwMCwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTQ5LCA2MTEsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTAwLCA1NTYsIDUwMCwgNjY3LCA1NTYsIDY2NywgNTU2LCA2NjcsIDU1NiwgNzIyLCA1MDAsIDcyMiwgNTAwLCA3MjIsIDUwMCwgNzIyLCA1MDAsIDcyMiwgNjI1LCA3MjIsIDU1NiwgNjY3LCA1NTYsIDY2NywgNTU2LCA2NjcsIDU1NiwgNjY3LCA1NTYsIDY2NywgNTU2LCA3NzgsIDU1NiwgNzc4LCA1NTYsIDc3OCwgNTU2LCA3NzgsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDIyMiwgMjc4LCAyNzgsIDczMywgNDQ0LCA1MDAsIDIyMiwgNjY3LCA1MDAsIDUwMCwgNTU2LCAyMjIsIDU1NiwgMjIyLCA1NTYsIDI4MSwgNTU2LCA0MDAsIDU1NiwgMjIyLCA3MjIsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCA2MTUsIDcyMywgNTU2LCA3NzgsIDU1NiwgNzc4LCA1NTYsIDc3OCwgNTU2LCAxMDAwLCA5NDQsIDcyMiwgMzMzLCA3MjIsIDMzMywgNzIyLCAzMzMsIDY2NywgNTAwLCA2NjcsIDUwMCwgNjY3LCA1MDAsIDY2NywgNTAwLCA2MTEsIDI3OCwgNjExLCAzNTQsIDYxMSwgMjc4LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCA5NDQsIDcyMiwgNjY3LCA1MDAsIDY2NywgNjExLCA1MDAsIDYxMSwgNTAwLCA2MTEsIDUwMCwgMjIyLCA1NTYsIDY2NywgNTU2LCAxMDAwLCA4ODksIDc3OCwgNjExLCA2NjcsIDUwMCwgNjExLCAyNzgsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCA2NjcsIDI3OCwgNzg5LCA4NDYsIDM4OSwgNzk0LCA4NjUsIDc3NSwgMjIyLCA2NjcsIDY2NywgNTcwLCA2NzEsIDY2NywgNjExLCA3MjIsIDc3OCwgMjc4LCA2NjcsIDY2NywgODMzLCA3MjIsIDY0OCwgNzc4LCA3MjUsIDY2NywgNjAwLCA2MTEsIDY2NywgODM3LCA2NjcsIDgzMSwgNzYxLCAyNzgsIDY2NywgNTcwLCA0MzksIDU1NSwgMjIyLCA1NTAsIDU3MCwgNTcxLCA1MDAsIDU1NiwgNDM5LCA0NjMsIDU1NSwgNTQyLCAyMjIsIDUwMCwgNDkyLCA1NDgsIDUwMCwgNDQ3LCA1NTYsIDY3MCwgNTczLCA0ODYsIDYwMywgMzc0LCA1NTAsIDY1MiwgNTQ2LCA3MjgsIDc3OSwgMjIyLCA1NTAsIDU1NiwgNTUwLCA3NzksIDY2NywgNjY3LCA4NDMsIDU0NCwgNzA4LCA2NjcsIDI3OCwgMjc4LCA1MDAsIDEwNjYsIDk4MiwgODQ0LCA1ODksIDcxNSwgNjM5LCA3MjQsIDY2NywgNjUxLCA2NjcsIDU0NCwgNzA0LCA2NjcsIDkxNywgNjE0LCA3MTUsIDcxNSwgNTg5LCA2ODYsIDgzMywgNzIyLCA3NzgsIDcyNSwgNjY3LCA3MjIsIDYxMSwgNjM5LCA3OTUsIDY2NywgNzI3LCA2NzMsIDkyMCwgOTIzLCA4MDUsIDg4NiwgNjUxLCA2OTQsIDEwMjIsIDY4MiwgNTU2LCA1NjIsIDUyMiwgNDkzLCA1NTMsIDU1NiwgNjg4LCA0NjUsIDU1NiwgNTU2LCA0NzIsIDU2NCwgNjg2LCA1NTAsIDU1NiwgNTU2LCA1NTYsIDUwMCwgODMzLCA1MDAsIDgzNSwgNTAwLCA1NzIsIDUxOCwgODMwLCA4NTEsIDYyMSwgNzM2LCA1MjYsIDQ5MiwgNzUyLCA1MzQsIDU1NiwgNTU2LCA1NTYsIDM3OCwgNDk2LCA1MDAsIDIyMiwgMjIyLCAyMjIsIDkxMCwgODI4LCA1NTYsIDQ3MiwgNTY1LCA1MDAsIDU1NiwgNzc4LCA1NTYsIDQ5MiwgMzM5LCA5NDQsIDcyMiwgOTQ0LCA3MjIsIDk0NCwgNzIyLCA2NjcsIDUwMCwgMzMzLCAzMzMsIDU1NiwgMTAwMCwgMTAwMCwgNTUyLCAyMjIsIDIyMiwgMjIyLCAyMjIsIDMzMywgMzMzLCAzMzMsIDU1NiwgNTU2LCAzNTAsIDEwMDAsIDEwMDAsIDE4OCwgMzU0LCAzMzMsIDMzMywgNTAwLCAzMzMsIDE2NywgMzY1LCA1NTYsIDU1NiwgMTA5NCwgNTU2LCA4ODUsIDMyMywgMTA4MywgMTAwMCwgNzY4LCA2MDAsIDgzNCwgODM0LCA4MzQsIDgzNCwgMTAwMCwgNTAwLCA5OTgsIDUwMCwgMTAwMCwgNTAwLCA1MDAsIDQ5NCwgNjEyLCA4MjMsIDcxMywgNTg0LCA1NDksIDcxMywgOTc5LCA3MTksIDI3NCwgNTQ5LCA1NDksIDU4NCwgNTQ5LCA1NDksIDYwNCwgNTg0LCA2MDQsIDYwNCwgNzA4LCA2MjUsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcyOSwgNjA0LCA2MDQsIDM1NCwgMzU0LCAxMDAwLCA5OTAsIDk5MCwgOTkwLCA5OTAsIDQ5NCwgNjA0LCA2MDQsIDYwNCwgNjA0LCAzNTQsIDEwMjEsIDEwNTIsIDkxNywgNzUwLCA3NTAsIDUzMSwgNjU2LCA1OTQsIDUxMCwgNTAwLCA3NTAsIDc1MCwgNTAwLCA1MDAsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAyMjIsIDIyMiwgMjk0LCAyOTQsIDMyNCwgMzI0LCAzMTYsIDMyOCwgMzk4LCAyODVdO1xuZXhwb3J0cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocyA9IExpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzO1xuY29uc3QgTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nID0gWy0xLCAtMSwgLTEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgODIsIDgzLCA4NCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk1LCA5NiwgOTcsIDk4LCA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwgMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTYxLCAxNjIsIDE2MywgMTY0LCAxNjUsIDE2NiwgMTY3LCAxNjgsIDE2OSwgMTcwLCAxNzEsIDE3MiwgMTc0LCAxNzUsIDE3NiwgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODEsIDE4MiwgMTgzLCAxODQsIDE4NSwgMTg2LCAxODcsIDE4OCwgMTg5LCAxOTAsIDE5MSwgMTkyLCAxOTMsIDE5NCwgMTk1LCAxOTYsIDE5NywgMTk4LCAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgMjA0LCAyMDUsIDIwNiwgMjA3LCAyMDgsIDIwOSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMSwgMjIyLCAyMjMsIDIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIzMCwgMjMxLCAyMzIsIDIzMywgMjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwgMjQwLCAyNDEsIDI0MiwgMjQzLCAyNDQsIDI0NSwgMjQ2LCAyNDcsIDI0OCwgMjQ5LCAyNTAsIDI1MSwgMjUyLCAyNTMsIDI1NCwgMjU1LCAyNTYsIDI1NywgMjU4LCAyNTksIDI2MCwgMjYxLCAyNjIsIDI2MywgMjY0LCAyNjUsIDI2NiwgMjY3LCAyNjgsIDI2OSwgMjcwLCAyNzEsIDI3MiwgMjczLCAyNzQsIDI3NSwgMjc2LCAyNzcsIDI3OCwgMjc5LCAyODAsIDI4MSwgMjgyLCAyODMsIDI4NCwgMjg1LCAyODYsIDI4NywgMjg4LCAyODksIDI5MCwgMjkxLCAyOTIsIDI5MywgMjk0LCAyOTUsIDI5NiwgMjk3LCAyOTgsIDI5OSwgMzAwLCAzMDEsIDMwMiwgMzAzLCAzMDQsIDMwNSwgMzA2LCAzMDcsIDMwOCwgMzA5LCAzMTAsIDMxMSwgMzEyLCAzMTMsIDMxNCwgMzE1LCAzMTYsIDMxNywgMzE4LCAzMTksIDMyMCwgMzIxLCAzMjIsIDMyMywgMzI0LCAzMjUsIDMyNiwgMzI3LCAzMjgsIDMyOSwgMzMwLCAzMzEsIDMzMiwgMzMzLCAzMzQsIDMzNSwgMzM2LCAzMzcsIDMzOCwgMzM5LCAzNDAsIDM0MSwgMzQyLCAzNDMsIDM0NCwgMzQ1LCAzNDYsIDM0NywgMzQ4LCAzNDksIDM1MCwgMzUxLCAzNTIsIDM1MywgMzU0LCAzNTUsIDM1NiwgMzU3LCAzNTgsIDM1OSwgMzYwLCAzNjEsIDM2MiwgMzYzLCAzNjQsIDM2NSwgMzY2LCAzNjcsIDM2OCwgMzY5LCAzNzAsIDM3MSwgMzcyLCAzNzMsIDM3NCwgMzc1LCAzNzYsIDM3NywgMzc4LCAzNzksIDM4MCwgMzgxLCAzODIsIDM4MywgNDAyLCA1MDYsIDUwNywgNTA4LCA1MDksIDUxMCwgNTExLCA1MzYsIDUzNywgNTM4LCA1MzksIDcxMCwgNzExLCA3MTMsIDcyOCwgNzI5LCA3MzAsIDczMSwgNzMyLCA3MzMsIDkwMCwgOTAxLCA5MDIsIDkwMywgOTA0LCA5MDUsIDkwNiwgOTA4LCA5MTAsIDkxMSwgOTEyLCA5MTMsIDkxNCwgOTE1LCA5MTYsIDkxNywgOTE4LCA5MTksIDkyMCwgOTIxLCA5MjIsIDkyMywgOTI0LCA5MjUsIDkyNiwgOTI3LCA5MjgsIDkyOSwgOTMxLCA5MzIsIDkzMywgOTM0LCA5MzUsIDkzNiwgOTM3LCA5MzgsIDkzOSwgOTQwLCA5NDEsIDk0MiwgOTQzLCA5NDQsIDk0NSwgOTQ2LCA5NDcsIDk0OCwgOTQ5LCA5NTAsIDk1MSwgOTUyLCA5NTMsIDk1NCwgOTU1LCA5NTYsIDk1NywgOTU4LCA5NTksIDk2MCwgOTYxLCA5NjIsIDk2MywgOTY0LCA5NjUsIDk2NiwgOTY3LCA5NjgsIDk2OSwgOTcwLCA5NzEsIDk3MiwgOTczLCA5NzQsIDEwMjQsIDEwMjUsIDEwMjYsIDEwMjcsIDEwMjgsIDEwMjksIDEwMzAsIDEwMzEsIDEwMzIsIDEwMzMsIDEwMzQsIDEwMzUsIDEwMzYsIDEwMzcsIDEwMzgsIDEwMzksIDEwNDAsIDEwNDEsIDEwNDIsIDEwNDMsIDEwNDQsIDEwNDUsIDEwNDYsIDEwNDcsIDEwNDgsIDEwNDksIDEwNTAsIDEwNTEsIDEwNTIsIDEwNTMsIDEwNTQsIDEwNTUsIDEwNTYsIDEwNTcsIDEwNTgsIDEwNTksIDEwNjAsIDEwNjEsIDEwNjIsIDEwNjMsIDEwNjQsIDEwNjUsIDEwNjYsIDEwNjcsIDEwNjgsIDEwNjksIDEwNzAsIDEwNzEsIDEwNzIsIDEwNzMsIDEwNzQsIDEwNzUsIDEwNzYsIDEwNzcsIDEwNzgsIDEwNzksIDEwODAsIDEwODEsIDEwODIsIDEwODMsIDEwODQsIDEwODUsIDEwODYsIDEwODcsIDEwODgsIDEwODksIDEwOTAsIDEwOTEsIDEwOTIsIDEwOTMsIDEwOTQsIDEwOTUsIDEwOTYsIDEwOTcsIDEwOTgsIDEwOTksIDExMDAsIDExMDEsIDExMDIsIDExMDMsIDExMDQsIDExMDUsIDExMDYsIDExMDcsIDExMDgsIDExMDksIDExMTAsIDExMTEsIDExMTIsIDExMTMsIDExMTQsIDExMTUsIDExMTYsIDExMTcsIDExMTgsIDExMTksIDExMzgsIDExMzksIDExNjgsIDExNjksIDc4MDgsIDc4MDksIDc4MTAsIDc4MTEsIDc4MTIsIDc4MTMsIDc5MjIsIDc5MjMsIDgyMDgsIDgyMDksIDgyMTEsIDgyMTIsIDgyMTMsIDgyMTUsIDgyMTYsIDgyMTcsIDgyMTgsIDgyMTksIDgyMjAsIDgyMjEsIDgyMjIsIDgyMjQsIDgyMjUsIDgyMjYsIDgyMzAsIDgyNDAsIDgyNDIsIDgyNDMsIDgyNDksIDgyNTAsIDgyNTIsIDgyNTQsIDgyNjAsIDgzMTksIDgzNTUsIDgzNTYsIDgzNTksIDgzNjQsIDg0NTMsIDg0NjcsIDg0NzAsIDg0ODIsIDg0ODYsIDg0OTQsIDg1MzksIDg1NDAsIDg1NDEsIDg1NDIsIDg1OTIsIDg1OTMsIDg1OTQsIDg1OTUsIDg1OTYsIDg1OTcsIDg2MTYsIDg3MDYsIDg3MTAsIDg3MTksIDg3MjEsIDg3MjIsIDg3MzAsIDg3MzQsIDg3MzUsIDg3NDUsIDg3NDcsIDg3NzYsIDg4MDAsIDg4MDEsIDg4MDQsIDg4MDUsIDg5NjIsIDg5NzYsIDg5OTIsIDg5OTMsIDk0NzIsIDk0NzQsIDk0ODQsIDk0ODgsIDk0OTIsIDk0OTYsIDk1MDAsIDk1MDgsIDk1MTYsIDk1MjQsIDk1MzIsIDk1NTIsIDk1NTMsIDk1NTQsIDk1NTUsIDk1NTYsIDk1NTcsIDk1NTgsIDk1NTksIDk1NjAsIDk1NjEsIDk1NjIsIDk1NjMsIDk1NjQsIDk1NjUsIDk1NjYsIDk1NjcsIDk1NjgsIDk1NjksIDk1NzAsIDk1NzEsIDk1NzIsIDk1NzMsIDk1NzQsIDk1NzUsIDk1NzYsIDk1NzcsIDk1NzgsIDk1NzksIDk1ODAsIDk2MDAsIDk2MDQsIDk2MDgsIDk2MTIsIDk2MTYsIDk2MTcsIDk2MTgsIDk2MTksIDk2MzIsIDk2MzMsIDk2NDIsIDk2NDMsIDk2NDQsIDk2NTAsIDk2NTgsIDk2NjAsIDk2NjgsIDk2NzQsIDk2NzUsIDk2NzksIDk2ODgsIDk2ODksIDk3MDIsIDk3ODYsIDk3ODcsIDk3ODgsIDk3OTIsIDk3OTQsIDk4MjQsIDk4MjcsIDk4MjksIDk4MzAsIDk4MzQsIDk4MzUsIDk4MzYsIDYxNDQxLCA2MTQ0MiwgNjE0NDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMV07XG5leHBvcnRzLkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZyA9IExpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZztcbmNvbnN0IExpYmVyYXRpb25TYW5zUmVndWxhcldpZHRocyA9IFszNjUsIDAsIDMzMywgMjc4LCAyNzgsIDM1NSwgNTU2LCA1NTYsIDg4OSwgNjY3LCAxOTEsIDMzMywgMzMzLCAzODksIDU4NCwgMjc4LCAzMzMsIDI3OCwgMjc4LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI3OCwgMjc4LCA1ODQsIDU4NCwgNTg0LCA1NTYsIDEwMTUsIDY2NywgNjY3LCA3MjIsIDcyMiwgNjY3LCA2MTEsIDc3OCwgNzIyLCAyNzgsIDUwMCwgNjY3LCA1NTYsIDgzMywgNzIyLCA3NzgsIDY2NywgNzc4LCA3MjIsIDY2NywgNjExLCA3MjIsIDY2NywgOTQ0LCA2NjcsIDY2NywgNjExLCAyNzgsIDI3OCwgMjc4LCA0NjksIDU1NiwgMzMzLCA1NTYsIDU1NiwgNTAwLCA1NTYsIDU1NiwgMjc4LCA1NTYsIDU1NiwgMjIyLCAyMjIsIDUwMCwgMjIyLCA4MzMsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzMzLCA1MDAsIDI3OCwgNTU2LCA1MDAsIDcyMiwgNTAwLCA1MDAsIDUwMCwgMzM0LCAyNjAsIDMzNCwgNTg0LCAzMzMsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjYwLCA1NTYsIDMzMywgNzM3LCAzNzAsIDU1NiwgNTg0LCA3MzcsIDU1MiwgNDAwLCA1NDksIDMzMywgMzMzLCAzMzMsIDU3NiwgNTM3LCAyNzgsIDMzMywgMzMzLCAzNjUsIDU1NiwgODM0LCA4MzQsIDgzNCwgNjExLCA2NjcsIDY2NywgNjY3LCA2NjcsIDY2NywgNjY3LCAxMDAwLCA3MjIsIDY2NywgNjY3LCA2NjcsIDY2NywgMjc4LCAyNzgsIDI3OCwgMjc4LCA3MjIsIDcyMiwgNzc4LCA3NzgsIDc3OCwgNzc4LCA3NzgsIDU4NCwgNzc4LCA3MjIsIDcyMiwgNzIyLCA3MjIsIDY2NywgNjY3LCA2MTEsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDg4OSwgNTAwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI3OCwgMjc4LCAyNzgsIDI3OCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NDksIDYxMSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1MDAsIDU1NiwgNTAwLCA2NjcsIDU1NiwgNjY3LCA1NTYsIDY2NywgNTU2LCA3MjIsIDUwMCwgNzIyLCA1MDAsIDcyMiwgNTAwLCA3MjIsIDUwMCwgNzIyLCA2MTUsIDcyMiwgNTU2LCA2NjcsIDU1NiwgNjY3LCA1NTYsIDY2NywgNTU2LCA2NjcsIDU1NiwgNjY3LCA1NTYsIDc3OCwgNTU2LCA3NzgsIDU1NiwgNzc4LCA1NTYsIDc3OCwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjIyLCAyNzgsIDI3OCwgNzM1LCA0NDQsIDUwMCwgMjIyLCA2NjcsIDUwMCwgNTAwLCA1NTYsIDIyMiwgNTU2LCAyMjIsIDU1NiwgMjkyLCA1NTYsIDMzNCwgNTU2LCAyMjIsIDcyMiwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDYwNCwgNzIzLCA1NTYsIDc3OCwgNTU2LCA3NzgsIDU1NiwgNzc4LCA1NTYsIDEwMDAsIDk0NCwgNzIyLCAzMzMsIDcyMiwgMzMzLCA3MjIsIDMzMywgNjY3LCA1MDAsIDY2NywgNTAwLCA2NjcsIDUwMCwgNjY3LCA1MDAsIDYxMSwgMjc4LCA2MTEsIDM3NSwgNjExLCAyNzgsIDcyMiwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDk0NCwgNzIyLCA2NjcsIDUwMCwgNjY3LCA2MTEsIDUwMCwgNjExLCA1MDAsIDYxMSwgNTAwLCAyMjIsIDU1NiwgNjY3LCA1NTYsIDEwMDAsIDg4OSwgNzc4LCA2MTEsIDY2NywgNTAwLCA2MTEsIDI3OCwgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDY2NywgMjc4LCA3ODQsIDgzOCwgMzg0LCA3NzQsIDg1NSwgNzUyLCAyMjIsIDY2NywgNjY3LCA1NTEsIDY2OCwgNjY3LCA2MTEsIDcyMiwgNzc4LCAyNzgsIDY2NywgNjY4LCA4MzMsIDcyMiwgNjUwLCA3NzgsIDcyMiwgNjY3LCA2MTgsIDYxMSwgNjY3LCA3OTgsIDY2NywgODM1LCA3NDgsIDI3OCwgNjY3LCA1NzgsIDQ0NiwgNTU2LCAyMjIsIDU0NywgNTc4LCA1NzUsIDUwMCwgNTU3LCA0NDYsIDQ0MSwgNTU2LCA1NTYsIDIyMiwgNTAwLCA1MDAsIDU3NiwgNTAwLCA0NDgsIDU1NiwgNjkwLCA1NjksIDQ4MiwgNjE3LCAzOTUsIDU0NywgNjQ4LCA1MjUsIDcxMywgNzgxLCAyMjIsIDU0NywgNTU2LCA1NDcsIDc4MSwgNjY3LCA2NjcsIDg2NSwgNTQyLCA3MTksIDY2NywgMjc4LCAyNzgsIDUwMCwgMTA1NywgMTAxMCwgODU0LCA1ODMsIDcyMiwgNjM1LCA3MTksIDY2NywgNjU2LCA2NjcsIDU0MiwgNjc3LCA2NjcsIDkyMywgNjA0LCA3MTksIDcxOSwgNTgzLCA2NTYsIDgzMywgNzIyLCA3NzgsIDcxOSwgNjY3LCA3MjIsIDYxMSwgNjM1LCA3NjAsIDY2NywgNzQwLCA2NjcsIDkxNywgOTM4LCA3OTIsIDg4NSwgNjU2LCA3MTksIDEwMTAsIDcyMiwgNTU2LCA1NzMsIDUzMSwgMzY1LCA1ODMsIDU1NiwgNjY5LCA0NTgsIDU1OSwgNTU5LCA0MzgsIDU4MywgNjg4LCA1NTIsIDU1NiwgNTQyLCA1NTYsIDUwMCwgNDU4LCA1MDAsIDgyMywgNTAwLCA1NzMsIDUyMSwgODAyLCA4MjMsIDYyNSwgNzE5LCA1MjEsIDUxMCwgNzUwLCA1NDIsIDU1NiwgNTU2LCA1NTYsIDM2NSwgNTEwLCA1MDAsIDIyMiwgMjc4LCAyMjIsIDkwNiwgODEyLCA1NTYsIDQzOCwgNTU5LCA1MDAsIDU1MiwgNzc4LCA1NTYsIDQ4OSwgNDExLCA5NDQsIDcyMiwgOTQ0LCA3MjIsIDk0NCwgNzIyLCA2NjcsIDUwMCwgMzMzLCAzMzMsIDU1NiwgMTAwMCwgMTAwMCwgNTUyLCAyMjIsIDIyMiwgMjIyLCAyMjIsIDMzMywgMzMzLCAzMzMsIDU1NiwgNTU2LCAzNTAsIDEwMDAsIDEwMDAsIDE4OCwgMzU0LCAzMzMsIDMzMywgNTAwLCAzMzMsIDE2NywgMzY1LCA1NTYsIDU1NiwgMTA5NCwgNTU2LCA4ODUsIDMyMywgMTA3MywgMTAwMCwgNzY4LCA2MDAsIDgzNCwgODM0LCA4MzQsIDgzNCwgMTAwMCwgNTAwLCAxMDAwLCA1MDAsIDEwMDAsIDUwMCwgNTAwLCA0OTQsIDYxMiwgODIzLCA3MTMsIDU4NCwgNTQ5LCA3MTMsIDk3OSwgNzE5LCAyNzQsIDU0OSwgNTQ5LCA1ODMsIDU0OSwgNTQ5LCA2MDQsIDU4NCwgNjA0LCA2MDQsIDcwOCwgNjI1LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MjksIDYwNCwgNjA0LCAzNTQsIDM1NCwgMTAwMCwgOTkwLCA5OTAsIDk5MCwgOTkwLCA0OTQsIDYwNCwgNjA0LCA2MDQsIDYwNCwgMzU0LCAxMDIxLCAxMDUyLCA5MTcsIDc1MCwgNzUwLCA1MzEsIDY1NiwgNTk0LCA1MTAsIDUwMCwgNzUwLCA3NTAsIDUwMCwgNTAwLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMjIyLCAyMjIsIDI5NCwgMjk0LCAzMjQsIDMyNCwgMzE2LCAzMjgsIDM5OCwgMjg1XTtcbmV4cG9ydHMuTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzID0gTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzO1xuY29uc3QgTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyA9IFstMSwgLTEsIC0xLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwgOTYsIDk3LCA5OCwgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsIDExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDE2MSwgMTYyLCAxNjMsIDE2NCwgMTY1LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcxLCAxNzIsIDE3NCwgMTc1LCAxNzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywgMTg0LCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwLCAxOTEsIDE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywgMjA4LCAyMDksIDIxMCwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDIxOSwgMjIwLCAyMjEsIDIyMiwgMjIzLCAyMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwgMjMyLCAyMzMsIDIzNCwgMjM1LCAyMzYsIDIzNywgMjM4LCAyMzksIDI0MCwgMjQxLCAyNDIsIDI0MywgMjQ0LCAyNDUsIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDI1MiwgMjUzLCAyNTQsIDI1NSwgMjU2LCAyNTcsIDI1OCwgMjU5LCAyNjAsIDI2MSwgMjYyLCAyNjMsIDI2NCwgMjY1LCAyNjYsIDI2NywgMjY4LCAyNjksIDI3MCwgMjcxLCAyNzIsIDI3MywgMjc0LCAyNzUsIDI3NiwgMjc3LCAyNzgsIDI3OSwgMjgwLCAyODEsIDI4MiwgMjgzLCAyODQsIDI4NSwgMjg2LCAyODcsIDI4OCwgMjg5LCAyOTAsIDI5MSwgMjkyLCAyOTMsIDI5NCwgMjk1LCAyOTYsIDI5NywgMjk4LCAyOTksIDMwMCwgMzAxLCAzMDIsIDMwMywgMzA0LCAzMDUsIDMwNiwgMzA3LCAzMDgsIDMwOSwgMzEwLCAzMTEsIDMxMiwgMzEzLCAzMTQsIDMxNSwgMzE2LCAzMTcsIDMxOCwgMzE5LCAzMjAsIDMyMSwgMzIyLCAzMjMsIDMyNCwgMzI1LCAzMjYsIDMyNywgMzI4LCAzMjksIDMzMCwgMzMxLCAzMzIsIDMzMywgMzM0LCAzMzUsIDMzNiwgMzM3LCAzMzgsIDMzOSwgMzQwLCAzNDEsIDM0MiwgMzQzLCAzNDQsIDM0NSwgMzQ2LCAzNDcsIDM0OCwgMzQ5LCAzNTAsIDM1MSwgMzUyLCAzNTMsIDM1NCwgMzU1LCAzNTYsIDM1NywgMzU4LCAzNTksIDM2MCwgMzYxLCAzNjIsIDM2MywgMzY0LCAzNjUsIDM2NiwgMzY3LCAzNjgsIDM2OSwgMzcwLCAzNzEsIDM3MiwgMzczLCAzNzQsIDM3NSwgMzc2LCAzNzcsIDM3OCwgMzc5LCAzODAsIDM4MSwgMzgyLCAzODMsIDQwMiwgNTA2LCA1MDcsIDUwOCwgNTA5LCA1MTAsIDUxMSwgNTM2LCA1MzcsIDUzOCwgNTM5LCA3MTAsIDcxMSwgNzEzLCA3MjgsIDcyOSwgNzMwLCA3MzEsIDczMiwgNzMzLCA5MDAsIDkwMSwgOTAyLCA5MDMsIDkwNCwgOTA1LCA5MDYsIDkwOCwgOTEwLCA5MTEsIDkxMiwgOTEzLCA5MTQsIDkxNSwgOTE2LCA5MTcsIDkxOCwgOTE5LCA5MjAsIDkyMSwgOTIyLCA5MjMsIDkyNCwgOTI1LCA5MjYsIDkyNywgOTI4LCA5MjksIDkzMSwgOTMyLCA5MzMsIDkzNCwgOTM1LCA5MzYsIDkzNywgOTM4LCA5MzksIDk0MCwgOTQxLCA5NDIsIDk0MywgOTQ0LCA5NDUsIDk0NiwgOTQ3LCA5NDgsIDk0OSwgOTUwLCA5NTEsIDk1MiwgOTUzLCA5NTQsIDk1NSwgOTU2LCA5NTcsIDk1OCwgOTU5LCA5NjAsIDk2MSwgOTYyLCA5NjMsIDk2NCwgOTY1LCA5NjYsIDk2NywgOTY4LCA5NjksIDk3MCwgOTcxLCA5NzIsIDk3MywgOTc0LCAxMDI0LCAxMDI1LCAxMDI2LCAxMDI3LCAxMDI4LCAxMDI5LCAxMDMwLCAxMDMxLCAxMDMyLCAxMDMzLCAxMDM0LCAxMDM1LCAxMDM2LCAxMDM3LCAxMDM4LCAxMDM5LCAxMDQwLCAxMDQxLCAxMDQyLCAxMDQzLCAxMDQ0LCAxMDQ1LCAxMDQ2LCAxMDQ3LCAxMDQ4LCAxMDQ5LCAxMDUwLCAxMDUxLCAxMDUyLCAxMDUzLCAxMDU0LCAxMDU1LCAxMDU2LCAxMDU3LCAxMDU4LCAxMDU5LCAxMDYwLCAxMDYxLCAxMDYyLCAxMDYzLCAxMDY0LCAxMDY1LCAxMDY2LCAxMDY3LCAxMDY4LCAxMDY5LCAxMDcwLCAxMDcxLCAxMDcyLCAxMDczLCAxMDc0LCAxMDc1LCAxMDc2LCAxMDc3LCAxMDc4LCAxMDc5LCAxMDgwLCAxMDgxLCAxMDgyLCAxMDgzLCAxMDg0LCAxMDg1LCAxMDg2LCAxMDg3LCAxMDg4LCAxMDg5LCAxMDkwLCAxMDkxLCAxMDkyLCAxMDkzLCAxMDk0LCAxMDk1LCAxMDk2LCAxMDk3LCAxMDk4LCAxMDk5LCAxMTAwLCAxMTAxLCAxMTAyLCAxMTAzLCAxMTA0LCAxMTA1LCAxMTA2LCAxMTA3LCAxMTA4LCAxMTA5LCAxMTEwLCAxMTExLCAxMTEyLCAxMTEzLCAxMTE0LCAxMTE1LCAxMTE2LCAxMTE3LCAxMTE4LCAxMTE5LCAxMTM4LCAxMTM5LCAxMTY4LCAxMTY5LCA3ODA4LCA3ODA5LCA3ODEwLCA3ODExLCA3ODEyLCA3ODEzLCA3OTIyLCA3OTIzLCA4MjA4LCA4MjA5LCA4MjExLCA4MjEyLCA4MjEzLCA4MjE1LCA4MjE2LCA4MjE3LCA4MjE4LCA4MjE5LCA4MjIwLCA4MjIxLCA4MjIyLCA4MjI0LCA4MjI1LCA4MjI2LCA4MjMwLCA4MjQwLCA4MjQyLCA4MjQzLCA4MjQ5LCA4MjUwLCA4MjUyLCA4MjU0LCA4MjYwLCA4MzE5LCA4MzU1LCA4MzU2LCA4MzU5LCA4MzY0LCA4NDUzLCA4NDY3LCA4NDcwLCA4NDgyLCA4NDg2LCA4NDk0LCA4NTM5LCA4NTQwLCA4NTQxLCA4NTQyLCA4NTkyLCA4NTkzLCA4NTk0LCA4NTk1LCA4NTk2LCA4NTk3LCA4NjE2LCA4NzA2LCA4NzEwLCA4NzE5LCA4NzIxLCA4NzIyLCA4NzMwLCA4NzM0LCA4NzM1LCA4NzQ1LCA4NzQ3LCA4Nzc2LCA4ODAwLCA4ODAxLCA4ODA0LCA4ODA1LCA4OTYyLCA4OTc2LCA4OTkyLCA4OTkzLCA5NDcyLCA5NDc0LCA5NDg0LCA5NDg4LCA5NDkyLCA5NDk2LCA5NTAwLCA5NTA4LCA5NTE2LCA5NTI0LCA5NTMyLCA5NTUyLCA5NTUzLCA5NTU0LCA5NTU1LCA5NTU2LCA5NTU3LCA5NTU4LCA5NTU5LCA5NTYwLCA5NTYxLCA5NTYyLCA5NTYzLCA5NTY0LCA5NTY1LCA5NTY2LCA5NTY3LCA5NTY4LCA5NTY5LCA5NTcwLCA5NTcxLCA5NTcyLCA5NTczLCA5NTc0LCA5NTc1LCA5NTc2LCA5NTc3LCA5NTc4LCA5NTc5LCA5NTgwLCA5NjAwLCA5NjA0LCA5NjA4LCA5NjEyLCA5NjE2LCA5NjE3LCA5NjE4LCA5NjE5LCA5NjMyLCA5NjMzLCA5NjQyLCA5NjQzLCA5NjQ0LCA5NjUwLCA5NjU4LCA5NjYwLCA5NjY4LCA5Njc0LCA5Njc1LCA5Njc5LCA5Njg4LCA5Njg5LCA5NzAyLCA5Nzg2LCA5Nzg3LCA5Nzg4LCA5NzkyLCA5Nzk0LCA5ODI0LCA5ODI3LCA5ODI5LCA5ODMwLCA5ODM0LCA5ODM1LCA5ODM2LCA2MTQ0MSwgNjE0NDIsIDYxNDQ1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTFdO1xuZXhwb3J0cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nID0gTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZztcblxuLyoqKi8gfSksXG4vKiAxNiAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5NeXJpYWRQcm9SZWd1bGFyTWV0cmljcyA9IGV4cG9ydHMuTXlyaWFkUHJvUmVndWxhckZhY3RvcnMgPSBleHBvcnRzLk15cmlhZFByb0l0YWxpY01ldHJpY3MgPSBleHBvcnRzLk15cmlhZFByb0l0YWxpY0ZhY3RvcnMgPSBleHBvcnRzLk15cmlhZFByb0JvbGRNZXRyaWNzID0gZXhwb3J0cy5NeXJpYWRQcm9Cb2xkSXRhbGljTWV0cmljcyA9IGV4cG9ydHMuTXlyaWFkUHJvQm9sZEl0YWxpY0ZhY3RvcnMgPSBleHBvcnRzLk15cmlhZFByb0JvbGRGYWN0b3JzID0gdm9pZCAwO1xuY29uc3QgTXlyaWFkUHJvQm9sZEZhY3RvcnMgPSBbMS4zNjg5OCwgMSwgMSwgMC43MjcwNiwgMC44MDQ3OSwgMC44MzczNCwgMC45ODg5NCwgMC45OTc5MywgMC45ODk3LCAwLjkzODg0LCAwLjg2MjA5LCAwLjk0MjkyLCAwLjk0MjkyLCAxLjE2NjYxLCAxLjAyMDU4LCAwLjkzNTgyLCAwLjk2Njk0LCAwLjkzNTgyLCAxLjE5MTM3LCAwLjk5NzkzLCAwLjk5NzkzLCAwLjk5NzkzLCAwLjk5NzkzLCAwLjk5NzkzLCAwLjk5NzkzLCAwLjk5NzkzLCAwLjk5NzkzLCAwLjk5NzkzLCAwLjk5NzkzLCAwLjc4MDc2LCAwLjc4MDc2LCAxLjAyMDU4LCAxLjAyMDU4LCAxLjAyMDU4LCAwLjcyODUxLCAwLjc4OTY2LCAwLjkwODM4LCAwLjgzNjM3LCAwLjgyMzkxLCAwLjk2Mzc2LCAwLjgwMDYxLCAwLjg2Mjc1LCAwLjg3NjgsIDAuOTU0MDcsIDEuMDI1OCwgMC43MzkwMSwgMC44NTAyMiwgMC44MzY1NSwgMS4wMTU2LCAwLjk1NTQ2LCAwLjkyMTc5LCAwLjg3MTA3LCAwLjkyMTc5LCAwLjgyMTE0LCAwLjgwOTYsIDAuODk3MTMsIDAuOTQ0MzgsIDAuOTUzNTMsIDAuOTQwODMsIDAuOTE5MDUsIDAuOTA0MDYsIDAuOTQ0NiwgMC45NDI5MiwgMS4xODc3NywgMC45NDI5MiwgMS4wMjA1OCwgMC44OTkwMywgMC45MDA4OCwgMC45NDkzOCwgMC45Nzg5OCwgMC44MTA5MywgMC45NzU3MSwgMC45NDkzOCwgMS4wMjQsIDAuOTU3NywgMC45NTkzMywgMC45ODYyMSwgMS4wNDc0LCAwLjk3NDU1LCAwLjk4OTgxLCAwLjk2NzIsIDAuOTU5MzMsIDAuOTQ0NiwgMC45Nzg5OCwgMC45NzQwNywgMC45NzY0NiwgMC43ODAzNiwgMS4xMDIwOCwgMC45NTQ0MiwgMC45NTI5OCwgMC45NzU3OSwgMC45MzMyLCAwLjk0MDM5LCAwLjkzOCwgMC44MDY4NywgMS4wMTE0OSwgMC44MDY4NywgMS4wMjA1OCwgMC44MDQ3OSwgMC45OTc5MywgMC45OTc5MywgMC45OTc5MywgMC45OTc5MywgMS4wMTE0OSwgMS4wMDg3MiwgMC45MDA4OCwgMC45MTg4MiwgMS4wMjEzLCAwLjgzNjEsIDEuMDIwNTgsIDAuNjIyOTUsIDAuNTQzMjQsIDAuODkwMjIsIDEuMDg1OTUsIDEsIDEsIDAuOTAwODgsIDEsIDAuOTc0NTUsIDAuOTM1ODIsIDAuOTAwODgsIDEsIDEuMDU2ODYsIDAuODM2MSwgMC45OTY0MiwgMC45OTY0MiwgMC45OTY0MiwgMC43Mjg1MSwgMC45MDgzOCwgMC45MDgzOCwgMC45MDgzOCwgMC45MDgzOCwgMC45MDgzOCwgMC45MDgzOCwgMC44NjgsIDAuODIzOTEsIDAuODAwNjEsIDAuODAwNjEsIDAuODAwNjEsIDAuODAwNjEsIDEuMDI1OCwgMS4wMjU4LCAxLjAyNTgsIDEuMDI1OCwgMC45NzQ4NCwgMC45NTU0NiwgMC45MjE3OSwgMC45MjE3OSwgMC45MjE3OSwgMC45MjE3OSwgMC45MjE3OSwgMS4wMjA1OCwgMC45MjE3OSwgMC45NDQzOCwgMC45NDQzOCwgMC45NDQzOCwgMC45NDQzOCwgMC45MDQwNiwgMC44Njk1OCwgMC45ODIyNSwgMC45NDkzOCwgMC45NDkzOCwgMC45NDkzOCwgMC45NDkzOCwgMC45NDkzOCwgMC45NDkzOCwgMC45MDMxLCAwLjgxMDkzLCAwLjk0OTM4LCAwLjk0OTM4LCAwLjk0OTM4LCAwLjk0OTM4LCAwLjk4NjIxLCAwLjk4NjIxLCAwLjk4NjIxLCAwLjk4NjIxLCAwLjkzOTY5LCAwLjk1OTMzLCAwLjk0NDYsIDAuOTQ0NiwgMC45NDQ2LCAwLjk0NDYsIDAuOTQ0NiwgMS4wODU5NSwgMC45NDQ2LCAwLjk1NDQyLCAwLjk1NDQyLCAwLjk1NDQyLCAwLjk1NDQyLCAwLjk0MDM5LCAwLjk3ODk4LCAwLjk0MDM5LCAwLjkwODM4LCAwLjk0OTM4LCAwLjkwODM4LCAwLjk0OTM4LCAwLjkwODM4LCAwLjk0OTM4LCAwLjgyMzkxLCAwLjgxMDkzLCAwLjgyMzkxLCAwLjgxMDkzLCAwLjgyMzkxLCAwLjgxMDkzLCAwLjgyMzkxLCAwLjgxMDkzLCAwLjk2Mzc2LCAwLjg0MzEzLCAwLjk3NDg0LCAwLjk3NTcxLCAwLjgwMDYxLCAwLjk0OTM4LCAwLjgwMDYxLCAwLjk0OTM4LCAwLjgwMDYxLCAwLjk0OTM4LCAwLjgwMDYxLCAwLjk0OTM4LCAwLjgwMDYxLCAwLjk0OTM4LCAwLjg3NjgsIDAuOTU3NywgMC44NzY4LCAwLjk1NzcsIDAuODc2OCwgMC45NTc3LCAxLCAxLCAwLjk1NDA3LCAwLjk1OTMzLCAwLjk3MDY5LCAwLjk1OTMzLCAxLjAyNTgsIDAuOTg2MjEsIDEuMDI1OCwgMC45ODYyMSwgMS4wMjU4LCAwLjk4NjIxLCAxLjAyNTgsIDAuOTg2MjEsIDEuMDI1OCwgMC45ODYyMSwgMC44ODcsIDEuMDE1OTEsIDAuNzM5MDEsIDEuMDQ3NCwgMSwgMSwgMC45NzQ1NSwgMC44MzY1NSwgMC45ODk4MSwgMSwgMSwgMC44MzY1NSwgMC43Mzk3NywgMC44MzY1NSwgMC43MzkwMywgMC44NDYzOCwgMS4wMzMsIDAuOTU1NDYsIDAuOTU5MzMsIDEsIDEsIDAuOTU1NDYsIDAuOTU5MzMsIDAuODI3MSwgMC45NTQxNywgMC45NTkzMywgMC45MjE3OSwgMC45NDQ2LCAwLjkyMTc5LCAwLjk0NDYsIDAuOTIxNzksIDAuOTQ0NiwgMC45MzYsIDAuOTE5NjQsIDAuODIxMTQsIDAuOTc2NDYsIDEsIDEsIDAuODIxMTQsIDAuOTc2NDYsIDAuODA5NiwgMC43ODAzNiwgMC44MDk2LCAwLjc4MDM2LCAxLCAxLCAwLjgwOTYsIDAuNzgwMzYsIDEsIDEsIDAuODk3MTMsIDAuNzc0NTIsIDAuODk3MTMsIDEuMTAyMDgsIDAuOTQ0MzgsIDAuOTU0NDIsIDAuOTQ0MzgsIDAuOTU0NDIsIDAuOTQ0MzgsIDAuOTU0NDIsIDAuOTQ0MzgsIDAuOTU0NDIsIDAuOTQ0MzgsIDAuOTU0NDIsIDAuOTQ0MzgsIDAuOTU0NDIsIDAuOTQwODMsIDAuOTc1NzksIDAuOTA0MDYsIDAuOTQwMzksIDAuOTA0MDYsIDAuOTQ0NiwgMC45MzgsIDAuOTQ0NiwgMC45MzgsIDAuOTQ0NiwgMC45MzgsIDEsIDAuOTk3OTMsIDAuOTA4MzgsIDAuOTQ5MzgsIDAuODY4LCAwLjkwMzEsIDAuOTIxNzksIDAuOTQ0NiwgMSwgMSwgMC44OTcxMywgMS4xMDIwOCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDk4OSwgMC45MzU4LCAwLjkxOTQ1LCAwLjgzMTgxLCAwLjc1MjYxLCAwLjg3OTkyLCAwLjgyOTc2LCAwLjk2MDM0LCAwLjgzNjg5LCAwLjk3MjY4LCAxLjAwNzgsIDAuOTA4MzgsIDAuODM2MzcsIDAuODAxOSwgMC45MDE1NywgMC44MDA2MSwgMC45NDQ2LCAwLjk1NDA3LCAwLjkyNDM2LCAxLjAyNTgsIDAuODUwMjIsIDAuOTcxNTMsIDEuMDE1NiwgMC45NTU0NiwgMC44OTE5MiwgMC45MjE3OSwgMC45MjM2MSwgMC44NzEwNywgMC45NjMxOCwgMC44OTcxMywgMC45MzcwNCwgMC45NTYzOCwgMC45MTkwNSwgMC45MTcwOSwgMC45Mjc5NiwgMS4wMjU4LCAwLjkzNzA0LCAwLjk0ODM2LCAxLjAzNzMsIDAuOTU5MzMsIDEuMDA3OCwgMC45NTg3MSwgMC45NDgzNiwgMC45NjE3NCwgMC45MjYwMSwgMC45NDk4LCAwLjk4NjA3LCAwLjk1Nzc2LCAwLjk1OTMzLCAxLjA1NDUzLCAxLjAwNzgsIDAuOTgyNzUsIDAuOTMxNCwgMC45NTYxNywgMC45MTcwMSwgMS4wNTk5MywgMC45NDQ2LCAwLjc4MzY3LCAwLjk1NTMsIDEsIDAuODY4MzIsIDEuMDEyOCwgMC45NTg3MSwgMC45OTM5NCwgMC44NzU0OCwgMC45NjM2MSwgMC44Njc3NCwgMS4wMDc4LCAwLjk1ODcxLCAwLjk0NDYsIDAuOTU4NzEsIDAuODY3NzQsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuOTQwODMsIDAuOTc1NzksIDAuOTQwODMsIDAuOTc1NzksIDAuOTQwODMsIDAuOTc1NzksIDAuOTA0MDYsIDAuOTQwMzksIDAuOTY2OTQsIDEsIDAuODk5MDMsIDEsIDEsIDEsIDAuOTM1ODIsIDAuOTM1ODIsIDAuOTM1ODIsIDEsIDAuOTA4LCAwLjkwOCwgMC45MTgsIDAuOTQyMTksIDAuOTQyMTksIDAuOTY1NDQsIDEsIDEuMjg1LCAxLCAxLCAwLjgxMDc5LCAwLjgxMDc5LCAxLCAxLCAwLjc0ODU0LCAxLCAxLCAxLCAxLCAwLjk5NzkzLCAxLCAxLCAxLCAwLjY1LCAxLCAxLjM2MTQ1LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLjE3MTczLCAxLCAwLjgwNTM1LCAwLjc2MTY5LCAxLjAyMDU4LCAxLjA3MzIsIDEuMDU0ODYsIDEsIDEsIDEuMzA2OTIsIDEuMDg1OTUsIDEuMDg1OTUsIDEsIDEuMDg1OTUsIDEuMDg1OTUsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEuMTYxNjEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDFdO1xuZXhwb3J0cy5NeXJpYWRQcm9Cb2xkRmFjdG9ycyA9IE15cmlhZFByb0JvbGRGYWN0b3JzO1xuY29uc3QgTXlyaWFkUHJvQm9sZE1ldHJpY3MgPSB7XG4gIGxpbmVIZWlnaHQ6IDEuMixcbiAgbGluZUdhcDogMC4yXG59O1xuZXhwb3J0cy5NeXJpYWRQcm9Cb2xkTWV0cmljcyA9IE15cmlhZFByb0JvbGRNZXRyaWNzO1xuY29uc3QgTXlyaWFkUHJvQm9sZEl0YWxpY0ZhY3RvcnMgPSBbMS4zNjg5OCwgMSwgMSwgMC42NjIyNywgMC44MDc3OSwgMC44MTYyNSwgMC45NzI3NiwgMC45NzI3NiwgMC45NzczMywgMC45MjIyMiwgMC44MzI2NiwgMC45NDI5MiwgMC45NDI5MiwgMS4xNjE0OCwgMS4wMjA1OCwgMC45MzU4MiwgMC45NjY5NCwgMC45MzU4MiwgMS4xNzMzNywgMC45NzI3NiwgMC45NzI3NiwgMC45NzI3NiwgMC45NzI3NiwgMC45NzI3NiwgMC45NzI3NiwgMC45NzI3NiwgMC45NzI3NiwgMC45NzI3NiwgMC45NzI3NiwgMC43ODA3NiwgMC43ODA3NiwgMS4wMjA1OCwgMS4wMjA1OCwgMS4wMjA1OCwgMC43MTU0MSwgMC43NjgxMywgMC44NTU3NiwgMC44MDU5MSwgMC44MDcyOSwgMC45NDI5OSwgMC43NzUxMiwgMC44MzY1NSwgMC44NjUyMywgMC45MjIyMiwgMC45ODYyMSwgMC43MTc0MywgMC44MTY5OCwgMC43OTcyNiwgMC45ODU1OCwgMC45MjIyMiwgMC45MDYzNywgMC44MzgwOSwgMC45MDYzNywgMC44MDcyOSwgMC43NjQ2MywgMC44NjI3NSwgMC45MDY5OSwgMC45MTYwNSwgMC45MTU0LCAwLjg1MzA4LCAwLjg1NDU4LCAwLjkwNTMxLCAwLjk0MjkyLCAxLjIxMjk2LCAwLjk0MjkyLCAxLjAyMDU4LCAwLjg5OTAzLCAxLjE4NjE2LCAwLjk5NjEzLCAwLjkxNjc3LCAwLjc4MjE2LCAwLjkxNjc3LCAwLjkwMDgzLCAwLjk4Nzk2LCAwLjkxMzUsIDAuOTIxNjgsIDAuOTUzODEsIDAuOTg5ODEsIDAuOTUyOTgsIDAuOTUzODEsIDAuOTM0NTksIDAuOTIxNjgsIDAuOTE1MTMsIDAuOTIwMDQsIDAuOTE2NzcsIDAuOTUwNzcsIDAuNzQ4LCAxLjA0NTAyLCAwLjkxNjc3LCAwLjkyMDYxLCAwLjk0MjM2LCAwLjg5NTQ0LCAwLjg5MzY0LCAwLjksIDAuODA2ODcsIDAuODU3OCwgMC44MDY4NywgMS4wMjA1OCwgMC44MDc3OSwgMC45NzI3NiwgMC45NzI3NiwgMC45NzI3NiwgMC45NzI3NiwgMC44NTc4LCAwLjk5OTczLCAxLjE4NjE2LCAwLjkxMzM5LCAxLjA4MDc0LCAwLjgyODkxLCAxLjAyMDU4LCAwLjU1NTA5LCAwLjcxNTI2LCAwLjg5MDIyLCAxLjA4NTk1LCAxLCAxLCAxLjE4NjE2LCAxLCAwLjk2NzM2LCAwLjkzNTgyLCAxLjE4NjE2LCAxLCAxLjA0ODY0LCAwLjgyNzExLCAwLjk5MDQzLCAwLjk5MDQzLCAwLjk5MDQzLCAwLjcxNTQxLCAwLjg1NTc2LCAwLjg1NTc2LCAwLjg1NTc2LCAwLjg1NTc2LCAwLjg1NTc2LCAwLjg1NTc2LCAwLjg0NSwgMC44MDcyOSwgMC43NzUxMiwgMC43NzUxMiwgMC43NzUxMiwgMC43NzUxMiwgMC45ODYyMSwgMC45ODYyMSwgMC45ODYyMSwgMC45ODYyMSwgMC45NTk2MSwgMC45MjIyMiwgMC45MDYzNywgMC45MDYzNywgMC45MDYzNywgMC45MDYzNywgMC45MDYzNywgMS4wMjA1OCwgMC45MDI1MSwgMC45MDY5OSwgMC45MDY5OSwgMC45MDY5OSwgMC45MDY5OSwgMC44NTQ1OCwgMC44MzY1OSwgMC45NDk1MSwgMC45OTYxMywgMC45OTYxMywgMC45OTYxMywgMC45OTYxMywgMC45OTYxMywgMC45OTYxMywgMC44NTgxMSwgMC43ODIxNiwgMC45MDA4MywgMC45MDA4MywgMC45MDA4MywgMC45MDA4MywgMC45NTM4MSwgMC45NTM4MSwgMC45NTM4MSwgMC45NTM4MSwgMC45MTM1LCAwLjkyMTY4LCAwLjkxNTEzLCAwLjkxNTEzLCAwLjkxNTEzLCAwLjkxNTEzLCAwLjkxNTEzLCAxLjA4NTk1LCAwLjkxNjc3LCAwLjkxNjc3LCAwLjkxNjc3LCAwLjkxNjc3LCAwLjkxNjc3LCAwLjg5MzY0LCAwLjkyMzMyLCAwLjg5MzY0LCAwLjg1NTc2LCAwLjk5NjEzLCAwLjg1NTc2LCAwLjk5NjEzLCAwLjg1NTc2LCAwLjk5NjEzLCAwLjgwNzI5LCAwLjc4MjE2LCAwLjgwNzI5LCAwLjc4MjE2LCAwLjgwNzI5LCAwLjc4MjE2LCAwLjgwNzI5LCAwLjc4MjE2LCAwLjk0Mjk5LCAwLjc2NzgzLCAwLjk1OTYxLCAwLjkxNjc3LCAwLjc3NTEyLCAwLjkwMDgzLCAwLjc3NTEyLCAwLjkwMDgzLCAwLjc3NTEyLCAwLjkwMDgzLCAwLjc3NTEyLCAwLjkwMDgzLCAwLjc3NTEyLCAwLjkwMDgzLCAwLjg2NTIzLCAwLjkxMzUsIDAuODY1MjMsIDAuOTEzNSwgMC44NjUyMywgMC45MTM1LCAxLCAxLCAwLjkyMjIyLCAwLjkyMTY4LCAwLjkyMjIyLCAwLjkyMTY4LCAwLjk4NjIxLCAwLjk1MzgxLCAwLjk4NjIxLCAwLjk1MzgxLCAwLjk4NjIxLCAwLjk1MzgxLCAwLjk4NjIxLCAwLjk1MzgxLCAwLjk4NjIxLCAwLjk1MzgxLCAwLjg2MDM2LCAwLjk3MDk2LCAwLjcxNzQzLCAwLjk4OTgxLCAxLCAxLCAwLjk1Mjk4LCAwLjc5NzI2LCAwLjk1MzgxLCAxLCAxLCAwLjc5NzI2LCAwLjY4OTQsIDAuNzk3MjYsIDAuNzQzMjEsIDAuODE2OTEsIDEuMDAwNiwgMC45MjIyMiwgMC45MjE2OCwgMSwgMSwgMC45MjIyMiwgMC45MjE2OCwgMC43OTQ2NCwgMC45MjA5OCwgMC45MjE2OCwgMC45MDYzNywgMC45MTUxMywgMC45MDYzNywgMC45MTUxMywgMC45MDYzNywgMC45MTUxMywgMC45MDksIDAuODc1MTQsIDAuODA3MjksIDAuOTUwNzcsIDEsIDEsIDAuODA3MjksIDAuOTUwNzcsIDAuNzY0NjMsIDAuNzQ4LCAwLjc2NDYzLCAwLjc0OCwgMSwgMSwgMC43NjQ2MywgMC43NDgsIDEsIDEsIDAuODYyNzUsIDAuNzI2NTEsIDAuODYyNzUsIDEuMDQ1MDIsIDAuOTA2OTksIDAuOTE2NzcsIDAuOTA2OTksIDAuOTE2NzcsIDAuOTA2OTksIDAuOTE2NzcsIDAuOTA2OTksIDAuOTE2NzcsIDAuOTA2OTksIDAuOTE2NzcsIDAuOTA2OTksIDAuOTE2NzcsIDAuOTE1NCwgMC45NDIzNiwgMC44NTQ1OCwgMC44OTM2NCwgMC44NTQ1OCwgMC45MDUzMSwgMC45LCAwLjkwNTMxLCAwLjksIDAuOTA1MzEsIDAuOSwgMSwgMC45NzI3NiwgMC44NTU3NiwgMC45OTYxMywgMC44NDUsIDAuODU4MTEsIDAuOTAyNTEsIDAuOTE2NzcsIDEsIDEsIDAuODYyNzUsIDEuMDQ1MDIsIDEuMTg2MTYsIDEuMTg2MTYsIDEuMTg2MTYsIDEuMTg2MTYsIDEuMTg2MTYsIDEuMTg2MTYsIDEuMTg2MTYsIDEuMTg2MTYsIDEuMTg2MTYsIDEuMDA4OTksIDEuMzA2MjgsIDAuODU1NzYsIDAuODAxNzgsIDAuNjY4NjIsIDAuNzkyNywgMC42OTMyMywgMC44ODEyNywgMC43MjQ1OSwgMC44OTcxMSwgMC45NTM4MSwgMC44NTU3NiwgMC44MDU5MSwgMC43ODA1LCAwLjk0NzI5LCAwLjc3NTEyLCAwLjkwNTMxLCAwLjkyMjIyLCAwLjkwNjM3LCAwLjk4NjIxLCAwLjgxNjk4LCAwLjkyNjU1LCAwLjk4NTU4LCAwLjkyMjIyLCAwLjg1MzU5LCAwLjkwNjM3LCAwLjkwOTc2LCAwLjgzODA5LCAwLjk0NTIzLCAwLjg2Mjc1LCAwLjgzNTA5LCAwLjkzMTU3LCAwLjg1MzA4LCAwLjgzMzkyLCAwLjkyMzQ2LCAwLjk4NjIxLCAwLjgzNTA5LCAwLjkyODg2LCAwLjkxMzI0LCAwLjkyMTY4LCAwLjk1MzgxLCAwLjkwNjQ2LCAwLjkyODg2LCAwLjkwNTU3LCAwLjg2ODQ3LCAwLjkwMjc2LCAwLjkxMzI0LCAwLjg2ODQyLCAwLjkyMTY4LCAwLjk5NTMxLCAwLjk1MzgxLCAwLjkyMjQsIDAuODU0MDgsIDAuOTI2OTksIDAuODY4NDcsIDEuMDA1MSwgMC45MTUxMywgMC44MDQ4NywgMC45MzQ4MSwgMSwgMC44ODE1OSwgMS4wNTIxNCwgMC45MDY0NiwgMC45NzM1NSwgMC44MTUzOSwgMC44OTM5OCwgMC44NTkyMywgMC45NTM4MSwgMC45MDY0NiwgMC45MTUxMywgMC45MDY0NiwgMC44NTkyMywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC45MTU0LCAwLjk0MjM2LCAwLjkxNTQsIDAuOTQyMzYsIDAuOTE1NCwgMC45NDIzNiwgMC44NTQ1OCwgMC44OTM2NCwgMC45NjY5NCwgMSwgMC44OTkwMywgMSwgMSwgMSwgMC45MTc4MiwgMC45MTc4MiwgMC45MTc4MiwgMSwgMC44OTYsIDAuODk2LCAwLjg5NiwgMC45MzMyLCAwLjkzMzIsIDAuOTU5NzMsIDEsIDEuMjYsIDEsIDEsIDAuODA0NzksIDAuODAxNzgsIDEsIDEsIDAuODU2MzMsIDEsIDEsIDEsIDEsIDAuOTcyNzYsIDEsIDEsIDEsIDAuNjk4LCAxLCAxLjM2MTQ1LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLjE0NTQyLCAxLCAwLjc5MTk5LCAwLjc4Njk0LCAxLjAyMDU4LCAxLjAzNDkzLCAxLjA1NDg2LCAxLCAxLCAxLjIzMDI2LCAxLjA4NTk1LCAxLjA4NTk1LCAxLCAxLjA4NTk1LCAxLjA4NTk1LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLjIwMDA2LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxXTtcbmV4cG9ydHMuTXlyaWFkUHJvQm9sZEl0YWxpY0ZhY3RvcnMgPSBNeXJpYWRQcm9Cb2xkSXRhbGljRmFjdG9ycztcbmNvbnN0IE15cmlhZFByb0JvbGRJdGFsaWNNZXRyaWNzID0ge1xuICBsaW5lSGVpZ2h0OiAxLjIsXG4gIGxpbmVHYXA6IDAuMlxufTtcbmV4cG9ydHMuTXlyaWFkUHJvQm9sZEl0YWxpY01ldHJpY3MgPSBNeXJpYWRQcm9Cb2xkSXRhbGljTWV0cmljcztcbmNvbnN0IE15cmlhZFByb0l0YWxpY0ZhY3RvcnMgPSBbMS4zNjg5OCwgMSwgMSwgMC42NTUwNywgMC44NDk0MywgMC44NTYzOSwgMC44ODQ2NSwgMC44ODQ2NSwgMC44NjkzNiwgMC44ODMwNywgMC44Njk0OCwgMC44NTI4MywgMC44NTI4MywgMS4wNjM4MywgMS4wMjA1OCwgMC43NTk0NSwgMC45MjE5LCAwLjc1OTQ1LCAxLjE3MzM3LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjc1OTQ1LCAwLjc1OTQ1LCAxLjAyMDU4LCAxLjAyMDU4LCAxLjAyMDU4LCAwLjY5MDQ2LCAwLjcwOTI2LCAwLjg1MTU4LCAwLjc3ODEyLCAwLjc2ODUyLCAwLjg5NTkxLCAwLjcwNDY2LCAwLjc2MTI1LCAwLjgwMDk0LCAwLjg2ODIyLCAwLjgzODY0LCAwLjcyOCwgMC43NzIxMiwgMC43OTQ3NSwgMC45MzYzNywgMC44NzUxNCwgMC44NTg4LCAwLjc2MDEzLCAwLjg1ODgsIDAuNzI0MjEsIDAuNjk4NjYsIDAuNzc1OTgsIDAuODU5OTEsIDAuODA4MTEsIDAuODc4MzIsIDAuNzgxMTIsIDAuNzc1MTIsIDAuODU2MiwgMS4wMjIyLCAxLjE4NDE3LCAxLjAyMjIsIDEuMjcwMTQsIDAuODk5MDMsIDEuMTUwMTIsIDAuOTM4NTksIDAuOTQzOTksIDAuODQ2LCAwLjk0Mzk5LCAwLjgxNDUzLCAxLjAxODYsIDAuOTQyMTksIDAuOTYwMTcsIDEuMDMwNzUsIDEuMDIxNzUsIDAuOTEyLCAxLjAzMDc1LCAwLjk2OTk4LCAwLjk2MDE3LCAwLjkzODU5LCAwLjk0Mzk5LCAwLjk0Mzk5LCAwLjk1NDkzLCAwLjc0NiwgMS4xMjY1OCwgMC45NDU3OCwgMC45MSwgMC45NzksIDAuODgyLCAwLjg4MiwgMC44MywgMC44NTAzNCwgMC44MzUzNywgMC44NTAzNCwgMS4wMjA1OCwgMC43MDg2OSwgMC44ODQ2NSwgMC44ODQ2NSwgMC44ODQ2NSwgMC44ODQ2NSwgMC44MzUzNywgMC45MDA4MywgMS4xNTAxMiwgMC45MTYxLCAwLjk0NTY1LCAwLjczNTQxLCAxLjAyMDU4LCAwLjUzNjA5LCAwLjY5MzUzLCAwLjc5NTE5LCAxLjA4NTk1LCAxLCAxLCAxLjE1MDEyLCAxLCAwLjkxOTc0LCAwLjc1OTQ1LCAxLjE1MDEyLCAxLCAwLjk0NDYsIDAuNzMzNjEsIDAuOTAwNSwgMC45MDA1LCAwLjkwMDUsIDAuNjI4NjQsIDAuODUxNTgsIDAuODUxNTgsIDAuODUxNTgsIDAuODUxNTgsIDAuODUxNTgsIDAuODUxNTgsIDAuNzczLCAwLjc2ODUyLCAwLjcwNDY2LCAwLjcwNDY2LCAwLjcwNDY2LCAwLjcwNDY2LCAwLjgzODY0LCAwLjgzODY0LCAwLjgzODY0LCAwLjgzODY0LCAwLjkwNTYxLCAwLjg3NTE0LCAwLjg1ODgsIDAuODU4OCwgMC44NTg4LCAwLjg1ODgsIDAuODU4OCwgMS4wMjA1OCwgMC44NTc1MSwgMC44NTk5MSwgMC44NTk5MSwgMC44NTk5MSwgMC44NTk5MSwgMC43NzUxMiwgMC43NjAxMywgMC44ODA3NSwgMC45Mzg1OSwgMC45Mzg1OSwgMC45Mzg1OSwgMC45Mzg1OSwgMC45Mzg1OSwgMC45Mzg1OSwgMC44MDc1LCAwLjg0NiwgMC44MTQ1MywgMC44MTQ1MywgMC44MTQ1MywgMC44MTQ1MywgMC44MjQyNCwgMC44MjQyNCwgMC44MjQyNCwgMC44MjQyNCwgMC45Mjc4LCAwLjk2MDE3LCAwLjkzODU5LCAwLjkzODU5LCAwLjkzODU5LCAwLjkzODU5LCAwLjkzODU5LCAxLjA4NTk1LCAwLjg1NjIsIDAuOTQ1NzgsIDAuOTQ1NzgsIDAuOTQ1NzgsIDAuOTQ1NzgsIDAuODgyLCAwLjk0NTc4LCAwLjg4MiwgMC44NTE1OCwgMC45Mzg1OSwgMC44NTE1OCwgMC45Mzg1OSwgMC44NTE1OCwgMC45Mzg1OSwgMC43Njg1MiwgMC44NDYsIDAuNzY4NTIsIDAuODQ2LCAwLjc2ODUyLCAwLjg0NiwgMC43Njg1MiwgMC44NDYsIDAuODk1OTEsIDAuODU0NCwgMC45MDU2MSwgMC45NDM5OSwgMC43MDQ2NiwgMC44MTQ1MywgMC43MDQ2NiwgMC44MTQ1MywgMC43MDQ2NiwgMC44MTQ1MywgMC43MDQ2NiwgMC44MTQ1MywgMC43MDQ2NiwgMC44MTQ1MywgMC44MDA5NCwgMC45NDIxOSwgMC44MDA5NCwgMC45NDIxOSwgMC44MDA5NCwgMC45NDIxOSwgMSwgMSwgMC44NjgyMiwgMC45NjAxNywgMC44NjgyMiwgMC45NjAxNywgMC44Mzg2NCwgMC44MjQyNCwgMC44Mzg2NCwgMC44MjQyNCwgMC44Mzg2NCwgMC44MjQyNCwgMC44Mzg2NCwgMS4wMzA3NSwgMC44Mzg2NCwgMC44MjQyNCwgMC44MTQwMiwgMS4wMjczOCwgMC43MjgsIDEuMDIxNzUsIDEsIDEsIDAuOTEyLCAwLjc5NDc1LCAxLjAzMDc1LCAxLCAxLCAwLjc5NDc1LCAwLjgzOTExLCAwLjc5NDc1LCAwLjY2MjY2LCAwLjgwNTUzLCAxLjA2Njc2LCAwLjg3NTE0LCAwLjk2MDE3LCAxLCAxLCAwLjg3NTE0LCAwLjk2MDE3LCAwLjg2ODY1LCAwLjg3Mzk2LCAwLjk2MDE3LCAwLjg1ODgsIDAuOTM4NTksIDAuODU4OCwgMC45Mzg1OSwgMC44NTg4LCAwLjkzODU5LCAwLjg2NywgMC44NDc1OSwgMC43MjQyMSwgMC45NTQ5MywgMSwgMSwgMC43MjQyMSwgMC45NTQ5MywgMC42OTg2NiwgMC43NDYsIDAuNjk4NjYsIDAuNzQ2LCAxLCAxLCAwLjY5ODY2LCAwLjc0NiwgMSwgMSwgMC43NzU5OCwgMC44ODQxNywgMC43NzU5OCwgMS4xMjY1OCwgMC44NTk5MSwgMC45NDU3OCwgMC44NTk5MSwgMC45NDU3OCwgMC44NTk5MSwgMC45NDU3OCwgMC44NTk5MSwgMC45NDU3OCwgMC44NTk5MSwgMC45NDU3OCwgMC44NTk5MSwgMC45NDU3OCwgMC44NzgzMiwgMC45NzksIDAuNzc1MTIsIDAuODgyLCAwLjc3NTEyLCAwLjg1NjIsIDAuODMsIDAuODU2MiwgMC44MywgMC44NTYyLCAwLjgzLCAxLCAwLjg4NDY1LCAwLjg1MTU4LCAwLjkzODU5LCAwLjc3MywgMC44MDc1LCAwLjg1NzUxLCAwLjg1NjIsIDEsIDEsIDAuNzc1OTgsIDEuMTI2NTgsIDEuMTUwMTIsIDEuMTUwMTIsIDEuMTUwMTIsIDEuMTUwMTIsIDEuMTUwMTIsIDEuMTUzMTMsIDEuMTUwMTIsIDEuMTUwMTIsIDEuMTUwMTIsIDEuMDgxMDYsIDEuMDM5MDEsIDAuODUxNTgsIDAuNzcwMjUsIDAuNjIyNjQsIDAuNzY0NiwgMC42NTM1MSwgMC44NjAyNiwgMC42OTQ2MSwgMC44OTk0NywgMS4wMzA3NSwgMC44NTE1OCwgMC43NzgxMiwgMC43NjQ0OSwgMC44ODgzNiwgMC43MDQ2NiwgMC44NTYyLCAwLjg2ODIyLCAwLjg1ODgsIDAuODM4NjQsIDAuNzcyMTIsIDAuODUzMDgsIDAuOTM2MzcsIDAuODc1MTQsIDAuODIzNTIsIDAuODU4OCwgMC44NTcwMSwgMC43NjAxMywgMC44OTA1OCwgMC43NzU5OCwgMC44MTU2LCAwLjgyNTY1LCAwLjc4MTEyLCAwLjc3ODk5LCAwLjg5Mzg2LCAwLjgzODY0LCAwLjgxNTYsIDAuOTQ4NiwgMC45MjM4OCwgMC45NjE4NiwgMS4wMzA3NSwgMC45MTEyMywgMC45NDg2LCAwLjkzMjk4LCAwLjg3OCwgMC45Mzk0MiwgMC45MjM4OCwgMC44NDU5NiwgMC45NjE4NiwgMC45NTExOSwgMS4wMzA3NSwgMC45MjIsIDAuODg3ODcsIDAuOTU4MjksIDAuODgsIDAuOTM1NTksIDAuOTM4NTksIDAuNzg4MTUsIDAuOTM3NTgsIDEsIDAuODkyMTcsIDEuMDM3MzcsIDAuOTExMjMsIDAuOTM5NjksIDAuNzc0ODcsIDAuODU3NjksIDAuODY3OTksIDEuMDMwNzUsIDAuOTExMjMsIDAuOTM4NTksIDAuOTExMjMsIDAuODY3OTksIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuODc4MzIsIDAuOTc5LCAwLjg3ODMyLCAwLjk3OSwgMC44NzgzMiwgMC45NzksIDAuNzc1MTIsIDAuODgyLCAwLjkyMTksIDEsIDAuODk5MDMsIDEsIDEsIDEsIDAuODczMjEsIDAuODczMjEsIDAuODczMjEsIDEsIDEuMDI3LCAxLjAyNywgMS4wMjcsIDAuODY4NDcsIDAuODY4NDcsIDAuNzkxMjEsIDEsIDEuMTI0LCAxLCAxLCAwLjczNTcyLCAwLjczNTcyLCAxLCAxLCAwLjg1MDM0LCAxLCAxLCAxLCAxLCAwLjg4NDY1LCAxLCAxLCAxLCAwLjY2OSwgMSwgMS4zNjE0NSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMS4wNDgyOCwgMSwgMC43NDk0OCwgMC43NTE4NywgMS4wMjA1OCwgMC45ODM5MSwgMS4wMjExOSwgMSwgMSwgMS4wNjIzMywgMS4wODU5NSwgMS4wODU5NSwgMSwgMS4wODU5NSwgMS4wODU5NSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMS4wNTIzMywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMV07XG5leHBvcnRzLk15cmlhZFByb0l0YWxpY0ZhY3RvcnMgPSBNeXJpYWRQcm9JdGFsaWNGYWN0b3JzO1xuY29uc3QgTXlyaWFkUHJvSXRhbGljTWV0cmljcyA9IHtcbiAgbGluZUhlaWdodDogMS4yLFxuICBsaW5lR2FwOiAwLjJcbn07XG5leHBvcnRzLk15cmlhZFByb0l0YWxpY01ldHJpY3MgPSBNeXJpYWRQcm9JdGFsaWNNZXRyaWNzO1xuY29uc3QgTXlyaWFkUHJvUmVndWxhckZhY3RvcnMgPSBbMS4zNjg5OCwgMSwgMSwgMC43NjMwNSwgMC44Mjc4NCwgMC45NDkzNSwgMC44OTM2NCwgMC45MjI0MSwgMC44OTA3MywgMC45MDcwNiwgMC45ODQ3MiwgMC44NTI4MywgMC44NTI4MywgMS4wNjY0LCAxLjAyMDU4LCAwLjc0NTA1LCAwLjkyMTksIDAuNzQ1MDUsIDEuMjM0NTYsIDAuOTIyNDEsIDAuOTIyNDEsIDAuOTIyNDEsIDAuOTIyNDEsIDAuOTIyNDEsIDAuOTIyNDEsIDAuOTIyNDEsIDAuOTIyNDEsIDAuOTIyNDEsIDAuOTIyNDEsIDAuNzQ1MDUsIDAuNzQ1MDUsIDEuMDIwNTgsIDEuMDIwNTgsIDEuMDIwNTgsIDAuNzMwMDIsIDAuNzI2MDEsIDAuOTE3NTUsIDAuODEyNiwgMC44MDMxNCwgMC45MjIyMiwgMC43Mzc2NCwgMC43OTcyNiwgMC44MzA1MSwgMC45MDI4NCwgMC44NjAyMywgMC43NCwgMC44MTI2LCAwLjg0ODY5LCAwLjk2NTE4LCAwLjkxMTE1LCAwLjg4NTgsIDAuNzk3NjEsIDAuODg1OCwgMC43NDQ5OCwgMC43MzkxNCwgMC44MTM2MywgMC44OTU5MSwgMC44MzY1OSwgMC44OTYzMywgMC44NTYwOCwgMC44MTExLCAwLjkwNTMxLCAxLjAyMjIsIDEuMjI3MzYsIDEuMDIyMiwgMS4yNzAxNCwgMC44OTkwMywgMC45MDA4OCwgMC44NjY2NywgMS4wMjMxLCAwLjg5NiwgMS4wMTQxMSwgMC45MDA4MywgMS4wNTA5OSwgMS4wMDUxMiwgMC45OTc5MywgMS4wNTMyNiwgMS4wOTM3NywgMC45MzgsIDEuMDYyMjYsIDEuMDAxMTksIDAuOTk3OTMsIDAuOTg3MTQsIDEuMDIzMSwgMS4wMTIzMSwgMC45ODE5NiwgMC43OTIsIDEuMTkxMzcsIDAuOTkwNzQsIDAuOTYyLCAxLjAxOTE1LCAwLjkyNiwgMC45NDIsIDAuODU2LCAwLjg1MDM0LCAwLjkyMDA2LCAwLjg1MDM0LCAxLjAyMDU4LCAwLjY5MDY3LCAwLjkyMjQxLCAwLjkyMjQxLCAwLjkyMjQxLCAwLjkyMjQxLCAwLjkyMDA2LCAwLjkzMzIsIDAuOTAwODgsIDAuOTE4ODIsIDAuOTM0ODQsIDAuNzUzMzksIDEuMDIwNTgsIDAuNTY4NjYsIDAuNTQzMjQsIDAuNzk1MTksIDEuMDg1OTUsIDEsIDEsIDAuOTAwODgsIDEsIDAuOTUzMjUsIDAuNzQ1MDUsIDAuOTAwODgsIDEsIDAuOTcxOTgsIDAuNzUzMzksIDAuOTEwMDksIDAuOTEwMDksIDAuOTEwMDksIDAuNjY0NjYsIDAuOTE3NTUsIDAuOTE3NTUsIDAuOTE3NTUsIDAuOTE3NTUsIDAuOTE3NTUsIDAuOTE3NTUsIDAuNzg4LCAwLjgwMzE0LCAwLjczNzY0LCAwLjczNzY0LCAwLjczNzY0LCAwLjczNzY0LCAwLjg2MDIzLCAwLjg2MDIzLCAwLjg2MDIzLCAwLjg2MDIzLCAwLjkyOTE1LCAwLjkxMTE1LCAwLjg4NTgsIDAuODg1OCwgMC44ODU4LCAwLjg4NTgsIDAuODg1OCwgMS4wMjA1OCwgMC44ODU4LCAwLjg5NTkxLCAwLjg5NTkxLCAwLjg5NTkxLCAwLjg5NTkxLCAwLjgxMTEsIDAuNzk2MTEsIDAuODk3MTMsIDAuODY2NjcsIDAuODY2NjcsIDAuODY2NjcsIDAuODY2NjcsIDAuODY2NjcsIDAuODY2NjcsIDAuODY5MzYsIDAuODk2LCAwLjkwMDgzLCAwLjkwMDgzLCAwLjkwMDgzLCAwLjkwMDgzLCAwLjg0MjI0LCAwLjg0MjI0LCAwLjg0MjI0LCAwLjg0MjI0LCAwLjk3Mjc2LCAwLjk5NzkzLCAwLjk4NzE0LCAwLjk4NzE0LCAwLjk4NzE0LCAwLjk4NzE0LCAwLjk4NzE0LCAxLjA4NTk1LCAwLjg5ODc2LCAwLjk5MDc0LCAwLjk5MDc0LCAwLjk5MDc0LCAwLjk5MDc0LCAwLjk0MiwgMS4wMjMxLCAwLjk0MiwgMC45MTc1NSwgMC44NjY2NywgMC45MTc1NSwgMC44NjY2NywgMC45MTc1NSwgMC44NjY2NywgMC44MDMxNCwgMC44OTYsIDAuODAzMTQsIDAuODk2LCAwLjgwMzE0LCAwLjg5NiwgMC44MDMxNCwgMC44OTYsIDAuOTIyMjIsIDAuOTMzNzIsIDAuOTI5MTUsIDEuMDE0MTEsIDAuNzM3NjQsIDAuOTAwODMsIDAuNzM3NjQsIDAuOTAwODMsIDAuNzM3NjQsIDAuOTAwODMsIDAuNzM3NjQsIDAuOTAwODMsIDAuNzM3NjQsIDAuOTAwODMsIDAuODMwNTEsIDEuMDA1MTIsIDAuODMwNTEsIDEuMDA1MTIsIDAuODMwNTEsIDEuMDA1MTIsIDEsIDEsIDAuOTAyODQsIDAuOTk3OTMsIDAuOTA5NzYsIDAuOTk3OTMsIDAuODYwMjMsIDAuODQyMjQsIDAuODYwMjMsIDAuODQyMjQsIDAuODYwMjMsIDAuODQyMjQsIDAuODYwMjMsIDEuMDUzMjYsIDAuODYwMjMsIDAuODQyMjQsIDAuODI4NzMsIDEuMDc0NjksIDAuNzQsIDEuMDkzNzcsIDEsIDEsIDAuOTM4LCAwLjg0ODY5LCAxLjA2MjI2LCAxLCAxLCAwLjg0ODY5LCAwLjgzNzA0LCAwLjg0ODY5LCAwLjgxNDQxLCAwLjg1NTg4LCAxLjA4OTI3LCAwLjkxMTE1LCAwLjk5NzkzLCAxLCAxLCAwLjkxMTE1LCAwLjk5NzkzLCAwLjkxODg3LCAwLjkwOTkxLCAwLjk5NzkzLCAwLjg4NTgsIDAuOTg3MTQsIDAuODg1OCwgMC45ODcxNCwgMC44ODU4LCAwLjk4NzE0LCAwLjg5NCwgMC45MTQzNCwgMC43NDQ5OCwgMC45ODE5NiwgMSwgMSwgMC43NDQ5OCwgMC45ODE5NiwgMC43MzkxNCwgMC43OTIsIDAuNzM5MTQsIDAuNzkyLCAxLCAxLCAwLjczOTE0LCAwLjc5MiwgMSwgMSwgMC44MTM2MywgMC45MDQsIDAuODEzNjMsIDEuMTkxMzcsIDAuODk1OTEsIDAuOTkwNzQsIDAuODk1OTEsIDAuOTkwNzQsIDAuODk1OTEsIDAuOTkwNzQsIDAuODk1OTEsIDAuOTkwNzQsIDAuODk1OTEsIDAuOTkwNzQsIDAuODk1OTEsIDAuOTkwNzQsIDAuODk2MzMsIDEuMDE5MTUsIDAuODExMSwgMC45NDIsIDAuODExMSwgMC45MDUzMSwgMC44NTYsIDAuOTA1MzEsIDAuODU2LCAwLjkwNTMxLCAwLjg1NiwgMSwgMC45MjI0MSwgMC45MTc1NSwgMC44NjY2NywgMC43ODgsIDAuODY5MzYsIDAuODg1OCwgMC44OTg3NiwgMSwgMSwgMC44MTM2MywgMS4xOTEzNywgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDM4OCwgMS4wMzkwMSwgMC45MjEzOCwgMC43ODEwNSwgMC43MTU0LCAwLjg2MTY5LCAwLjgwNTEzLCAwLjk0MDA3LCAwLjgyNTI4LCAwLjk4NjEyLCAxLjA2MjI2LCAwLjkxNzU1LCAwLjgxMjYsIDAuODE4ODQsIDAuOTI4MTksIDAuNzM3NjQsIDAuOTA1MzEsIDAuOTAyODQsIDAuODg1OCwgMC44NjAyMywgMC44MTI2LCAwLjkxMTcyLCAwLjk2NTE4LCAwLjkxMTE1LCAwLjgzMDg5LCAwLjg4NTgsIDAuODc3OTEsIDAuNzk3NjEsIDAuODkyOTcsIDAuODEzNjMsIDAuODgxNTcsIDAuODk5OTIsIDAuODU2MDgsIDAuODE5OTIsIDAuOTQzMDcsIDAuODYwMjMsIDAuODgxNTcsIDAuOTUzMDgsIDAuOTg2OTksIDAuOTk3OTMsIDEuMDYyMjYsIDAuOTU4MTcsIDAuOTUzMDgsIDAuOTczNTgsIDAuOTI4LCAwLjk4MDg4LCAwLjk4Njk5LCAwLjkyNzYxLCAwLjk5NzkzLCAwLjk2MDE3LCAxLjA2MjI2LCAwLjk4NiwgMC45NDQsIDAuOTU5NzgsIDAuOTM4LCAwLjk2NzA1LCAwLjk4NzE0LCAwLjgwNDQyLCAwLjk4OTcyLCAxLCAwLjg5NzYyLCAxLjA0NTUyLCAwLjk1ODE3LCAwLjk5MDA3LCAwLjg3MDY0LCAwLjkxODc5LCAwLjg4ODg4LCAxLjA2MjI2LCAwLjk1ODE3LCAwLjk4NzE0LCAwLjk1ODE3LCAwLjg4ODg4LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjg5NjMzLCAxLjAxOTE1LCAwLjg5NjMzLCAxLjAxOTE1LCAwLjg5NjMzLCAxLjAxOTE1LCAwLjgxMTEsIDAuOTQyLCAwLjkyMTksIDEsIDAuODk5MDMsIDEsIDEsIDEsIDAuOTMxNzMsIDAuOTMxNzMsIDAuOTMxNzMsIDEsIDEuMDYzMDQsIDEuMDYzMDQsIDEuMDY5MDQsIDAuODk5MDMsIDAuODk5MDMsIDAuODA1NDksIDEsIDEuMTU2LCAxLCAxLCAwLjc2NTc1LCAwLjc2NTc1LCAxLCAxLCAwLjcyNDU4LCAxLCAxLCAxLCAxLCAwLjkyMjQxLCAxLCAxLCAxLCAwLjYxOSwgMSwgMS4zNjE0NSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMS4wNzI1NywgMSwgMC43NDcwNSwgMC43MTExOSwgMS4wMjA1OCwgMS4wMjQsIDEuMDIxMTksIDEsIDEsIDEuMTUzNiwgMS4wODU5NSwgMS4wODU5NSwgMSwgMS4wODU5NSwgMS4wODU5NSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMS4wNTYzOCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMV07XG5leHBvcnRzLk15cmlhZFByb1JlZ3VsYXJGYWN0b3JzID0gTXlyaWFkUHJvUmVndWxhckZhY3RvcnM7XG5jb25zdCBNeXJpYWRQcm9SZWd1bGFyTWV0cmljcyA9IHtcbiAgbGluZUhlaWdodDogMS4yLFxuICBsaW5lR2FwOiAwLjJcbn07XG5leHBvcnRzLk15cmlhZFByb1JlZ3VsYXJNZXRyaWNzID0gTXlyaWFkUHJvUmVndWxhck1ldHJpY3M7XG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuU2Vnb2V1aVJlZ3VsYXJNZXRyaWNzID0gZXhwb3J0cy5TZWdvZXVpUmVndWxhckZhY3RvcnMgPSBleHBvcnRzLlNlZ29ldWlJdGFsaWNNZXRyaWNzID0gZXhwb3J0cy5TZWdvZXVpSXRhbGljRmFjdG9ycyA9IGV4cG9ydHMuU2Vnb2V1aUJvbGRNZXRyaWNzID0gZXhwb3J0cy5TZWdvZXVpQm9sZEl0YWxpY01ldHJpY3MgPSBleHBvcnRzLlNlZ29ldWlCb2xkSXRhbGljRmFjdG9ycyA9IGV4cG9ydHMuU2Vnb2V1aUJvbGRGYWN0b3JzID0gdm9pZCAwO1xuY29uc3QgU2Vnb2V1aUJvbGRGYWN0b3JzID0gWzEuNzY3MzgsIDEsIDEsIDAuOTkyOTcsIDAuOTgyNCwgMS4wNDAxNiwgMS4wNjQ5NywgMS4wMzQyNCwgMC45NzUyOSwgMS4xNzY0NywgMS4yMzIwMywgMS4xMDg1LCAxLjEwODUsIDEuMTY5MzksIDEuMjEwNywgMC45NzU0LCAxLjIxNDA4LCAwLjk3NTQsIDEuNTk1NzgsIDEuMDM0MjQsIDEuMDM0MjQsIDEuMDM0MjQsIDEuMDM0MjQsIDEuMDM0MjQsIDEuMDM0MjQsIDEuMDM0MjQsIDEuMDM0MjQsIDEuMDM0MjQsIDEuMDM0MjQsIDAuODEzNzgsIDAuODEzNzgsIDEuMjEwNywgMS4yMTA3LCAxLjIxMDcsIDAuNzE3MDMsIDAuOTc4NDcsIDAuOTczNjMsIDAuODg3NzYsIDAuODY0MSwgMS4wMjA5NiwgMC43OTc5NSwgMC44NTEzMiwgMC45MTQsIDEuMDYwODUsIDEuMTQwNiwgMC44MDA3LCAwLjg5ODU4LCAwLjgzNjkzLCAxLjE0ODg5LCAxLjA5Mzk4LCAwLjk3NDg5LCAwLjkyMDk0LCAwLjk3NDg5LCAwLjkwMzk5LCAwLjg0MDQxLCAwLjk1OTIzLCAxLjAwMTM1LCAxLCAxLjA2NDY3LCAwLjk4MjQzLCAwLjkwOTk2LCAwLjk5MzYxLCAxLjEwODUsIDEuNTY5NDIsIDEuMTA4NSwgMS4yMTA3LCAwLjc0NjI3LCAwLjk0MjgyLCAwLjk2NzUyLCAxLjAxNTE5LCAwLjg2MzA0LCAxLjAxMzU5LCAwLjk3Mjc4LCAxLjE1MTAzLCAxLjAxMzU5LCAwLjk4NTYxLCAxLjAyMjg1LCAxLjAyMjg1LCAxLjAwNTI3LCAxLjAyMjg1LCAxLjAzMDIsIDAuOTkwNDEsIDEuMDAwOCwgMS4wMTUxOSwgMS4wMTM1OSwgMS4wMjI1OCwgMC43OTEwNCwgMS4xNjg2MiwgMC45OTA0MSwgMC45NzQ1NCwgMS4wMjUxMSwgMC45OTI5OCwgMC45Njc1MiwgMC45NTgwMSwgMC45NDg1NiwgMS4xNjU3OSwgMC45NDg1NiwgMS4yMTA3LCAwLjk4MjQsIDEuMDM0MjQsIDEuMDM0MjQsIDEsIDEuMDM0MjQsIDEuMTY1NzksIDAuODcyNywgMS4zODcxLCAxLjE4NjIyLCAxLjEwODE4LCAxLjA0NDc4LCAxLjIxMDcsIDEuMTg2MjIsIDAuNzUxNTUsIDAuOTQ5OTQsIDEuMjg4MjYsIDEuMjE0MDgsIDEuMjE0MDgsIDAuOTEwNTYsIDEsIDAuOTE1NzIsIDAuOTc1NCwgMC42NDY2MywgMS4xODMyOCwgMS4yNDg2NiwgMS4wNDQ3OCwgMS4xNDE2OSwgMS4xNTc0OSwgMS4xNzM4OSwgMC43MTcwMywgMC45NzM2MywgMC45NzM2MywgMC45NzM2MywgMC45NzM2MywgMC45NzM2MywgMC45NzM2MywgMC45MzUwNiwgMC44NjQxLCAwLjc5Nzk1LCAwLjc5Nzk1LCAwLjc5Nzk1LCAwLjc5Nzk1LCAxLjE0MDYsIDEuMTQwNiwgMS4xNDA2LCAxLjE0MDYsIDEuMDIwOTYsIDEuMDkzOTgsIDAuOTc0MjYsIDAuOTc0MjYsIDAuOTc0MjYsIDAuOTc0MjYsIDAuOTc0MjYsIDEuMjEwNywgMC45NzQ4OSwgMS4wMDEzNSwgMS4wMDEzNSwgMS4wMDEzNSwgMS4wMDEzNSwgMC45MDk5NiwgMC45MjA5NCwgMS4wMjc5OCwgMC45Njc1MiwgMC45Njc1MiwgMC45Njc1MiwgMC45Njc1MiwgMC45Njc1MiwgMC45Njc1MiwgMC45MzEzNiwgMC44NjMwNCwgMC45NzI3OCwgMC45NzI3OCwgMC45NzI3OCwgMC45NzI3OCwgMS4wMjI4NSwgMS4wMjI4NSwgMS4wMjI4NSwgMS4wMjI4NSwgMC45NzEyMiwgMC45OTA0MSwgMSwgMSwgMSwgMSwgMSwgMS4yODgyNiwgMS4wMDA4LCAwLjk5MDQxLCAwLjk5MDQxLCAwLjk5MDQxLCAwLjk5MDQxLCAwLjk2NzUyLCAxLjAxNTE5LCAwLjk2NzUyLCAwLjk3MzYzLCAwLjk2NzUyLCAwLjk3MzYzLCAwLjk2NzUyLCAwLjk3MzYzLCAwLjk2NzUyLCAwLjg2NDEsIDAuODYzMDQsIDAuODY0MSwgMC44NjMwNCwgMC44NjQxLCAwLjg2MzA0LCAwLjg2NDEsIDAuODYzMDQsIDEuMDIwOTYsIDEuMDMwNTcsIDEuMDIwOTYsIDEuMDM1MTcsIDAuNzk3OTUsIDAuOTcyNzgsIDAuNzk3OTUsIDAuOTcyNzgsIDAuNzk3OTUsIDAuOTcyNzgsIDAuNzk3OTUsIDAuOTcyNzgsIDAuNzk3OTUsIDAuOTcyNzgsIDAuOTE0LCAxLjAxMzU5LCAwLjkxNCwgMS4wMTM1OSwgMC45MTQsIDEuMDEzNTksIDEsIDEsIDEuMDYwODUsIDAuOTg1NjEsIDEuMDYwODUsIDEuMDA4NzksIDEuMTQwNiwgMS4wMjI4NSwgMS4xNDA2LCAxLjAyMjg1LCAxLjE0MDYsIDEuMDIyODUsIDEuMTQwNiwgMS4wMjI4NSwgMS4xNDA2LCAxLjAyMjg1LCAwLjk3MTM4LCAxLjA4NjkyLCAwLjgwMDcsIDEuMDIyODUsIDEsIDEsIDEuMDA1MjcsIDAuODM2OTMsIDEuMDIyODUsIDEsIDEsIDAuODM2OTMsIDAuOTQ1NSwgMC44MzY5MywgMC45MDQxOCwgMC44MzY5MywgMS4xMzAwNSwgMS4wOTM5OCwgMC45OTA0MSwgMSwgMSwgMS4wOTM5OCwgMC45OTA0MSwgMC45NjY5MiwgMS4wOTI1MSwgMC45OTA0MSwgMC45NzQ4OSwgMS4wMDA4LCAwLjk3NDg5LCAxLjAwMDgsIDAuOTc0ODksIDEuMDAwOCwgMC45Mzk5NCwgMC45NzkzMSwgMC45MDM5OSwgMS4wMjI1OCwgMSwgMSwgMC45MDM5OSwgMS4wMjI1OCwgMC44NDA0MSwgMC43OTEwNCwgMC44NDA0MSwgMC43OTEwNCwgMC44NDA0MSwgMC43OTEwNCwgMC44NDA0MSwgMC43OTEwNCwgMSwgMSwgMC45NTkyMywgMS4wNzAzNCwgMC45NTkyMywgMS4xNjg2MiwgMS4wMDEzNSwgMC45OTA0MSwgMS4wMDEzNSwgMC45OTA0MSwgMS4wMDEzNSwgMC45OTA0MSwgMS4wMDEzNSwgMC45OTA0MSwgMS4wMDEzNSwgMC45OTA0MSwgMS4wMDEzNSwgMC45OTA0MSwgMS4wNjQ2NywgMS4wMjUxMSwgMC45MDk5NiwgMC45Njc1MiwgMC45MDk5NiwgMC45OTM2MSwgMC45NTgwMSwgMC45OTM2MSwgMC45NTgwMSwgMC45OTM2MSwgMC45NTgwMSwgMS4wNzczMywgMS4wMzQyNCwgMC45NzM2MywgMC45Njc1MiwgMC45MzUwNiwgMC45MzEzNiwgMC45NzQ4OSwgMS4wMDA4LCAxLCAxLCAwLjk1OTIzLCAxLjE2ODYyLCAxLjE1MTAzLCAxLjE1MTAzLCAxLjAxMTczLCAxLjAzOTU5LCAwLjc1OTUzLCAwLjgxMzc4LCAwLjc5OTEyLCAxLjE1MTAzLCAxLjIxOTk0LCAwLjk1MTYxLCAwLjg3ODE1LCAxLjAxMTQ5LCAwLjgxNTI1LCAwLjc2NzYsIDAuOTgxNjcsIDEuMDExMzQsIDEuMDI1NDYsIDAuODQwOTcsIDEuMDMwODksIDEuMTgxMDIsIDAuOTczNjMsIDAuODg3NzYsIDAuODUxMzQsIDAuOTc4MjYsIDAuNzk3OTUsIDAuOTkzNjEsIDEuMDYwODUsIDAuOTc0ODksIDEuMTQwNiwgMC44OTg1OCwgMS4wMzg4LCAxLjE0ODg5LCAxLjA5Mzk4LCAwLjg2MDM5LCAwLjk3NDg5LCAxLjA1OTUsIDAuOTIwOTQsIDAuOTQ3OTMsIDAuOTU5MjMsIDAuOTA5OTYsIDAuOTkzNDYsIDAuOTgyNDMsIDEuMDIxMTIsIDAuOTU0OTMsIDEuMTQwNiwgMC45MDk5NiwgMS4wMzU3NCwgMS4wMjU5NywgMS4wMDA4LCAxLjE4MTAyLCAxLjA2NjI4LCAxLjAzNTc0LCAxLjAxOTIsIDEuMDE5MzIsIDEuMDA4ODYsIDAuOTc1MzEsIDEuMDEwNiwgMS4wMDA4LCAxLjEzMTg5LCAxLjE4MTAyLCAxLjAyMjc3LCAwLjk4NjgzLCAxLjAwMTYsIDAuOTk1NjEsIDEuMDcyMzcsIDEuMDAwOCwgMC45MDQzNCwgMC45OTkyMSwgMC45MzgwMywgMC44OTY1LCAxLjIzMDg1LCAxLjA2NjI4LCAxLjA0OTgzLCAwLjk2MjY4LCAxLjA0OTksIDAuOTg0MzksIDEuMTgxMDIsIDEuMDY2MjgsIDEuMDAwOCwgMS4wNjYyOCwgMC45ODQzOSwgMC43OTc5NSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMS4wOTQ2NiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC45NzI3OCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMS4wMjA2NSwgMSwgMSwgMSwgMSwgMSwgMSwgMS4wNjQ2NywgMS4wMjUxMSwgMS4wNjQ2NywgMS4wMjUxMSwgMS4wNjQ2NywgMS4wMjUxMSwgMC45MDk5NiwgMC45Njc1MiwgMSwgMS4yMTQwOCwgMC44OTkwMywgMSwgMSwgMC43NTE1NSwgMS4wNDM5NCwgMS4wNDM5NCwgMS4wNDM5NCwgMS4wNDM5NCwgMC45ODYzMywgMC45ODYzMywgMC45ODYzMywgMC43MzA0NywgMC43MzA0NywgMS4yMDY0MiwgMC45MTIxMSwgMS4yNTYzNSwgMS4yMjIsIDEuMDI5NTYsIDEuMDMzNzIsIDEuMDMzNzIsIDAuOTYwMzksIDEuMjQ2MzMsIDEsIDEuMTI0NTQsIDAuOTM1MDMsIDEuMDM0MjQsIDEuMTk2ODcsIDEuMDM0MjQsIDEsIDEsIDEsIDAuNzcxLCAxLCAxLCAxLjE1NzQ5LCAxLjE1NzQ5LCAxLjE1NzQ5LCAxLjEwOTQ4LCAwLjg2Mjc5LCAwLjk0NDM0LCAwLjg2Mjc5LCAwLjk0NDM0LCAwLjg2MTgyLCAxLCAxLCAxLjE2ODk3LCAxLCAwLjk2MDg1LCAwLjkwMTM3LCAxLjIxMDcsIDEuMTg0MTYsIDEuMTM5NzMsIDAuNjk4MjUsIDAuOTcxNiwgMi4xMDMzOSwgMS4yOTAwNCwgMS4yOTAwNCwgMS4yMTE3MiwgMS4yOTAwNCwgMS4yOTAwNCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMS40MjYwMywgMSwgMC45OTg2MiwgMC45OTg2MiwgMSwgMC44NzAyNSwgMC44NzAyNSwgMC44NzAyNSwgMC44NzAyNSwgMS4xODg3NCwgMS40MjYwMywgMSwgMS40MjYwMywgMS40MjYwMywgMC45OTg2MiwgMSwgMSwgMSwgMSwgMSwgMS4yODg2LCAxLjA0MzE1LCAxLjE1Mjk2LCAxLjM0MTYzLCAxLCAxLCAxLCAxLjA5MTkzLCAxLjA5MTkzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxXTtcbmV4cG9ydHMuU2Vnb2V1aUJvbGRGYWN0b3JzID0gU2Vnb2V1aUJvbGRGYWN0b3JzO1xuY29uc3QgU2Vnb2V1aUJvbGRNZXRyaWNzID0ge1xuICBsaW5lSGVpZ2h0OiAxLjMzMDA4LFxuICBsaW5lR2FwOiAwXG59O1xuZXhwb3J0cy5TZWdvZXVpQm9sZE1ldHJpY3MgPSBTZWdvZXVpQm9sZE1ldHJpY3M7XG5jb25zdCBTZWdvZXVpQm9sZEl0YWxpY0ZhY3RvcnMgPSBbMS43NjczOCwgMSwgMSwgMC45ODk0NiwgMS4wMzk1OSwgMS4wNDAxNiwgMS4wMjgwOSwgMS4wMzYsIDAuOTc2MzksIDEuMTA5NTMsIDEuMjMyMDMsIDEuMTExNDQsIDEuMTExNDQsIDEuMTY5MzksIDEuMjEyMzcsIDAuOTc1NCwgMS4yMTI2MSwgMC45NzU0LCAxLjU5NzU0LCAxLjAzNiwgMS4wMzYsIDEuMDM2LCAxLjAzNiwgMS4wMzYsIDEuMDM2LCAxLjAzNiwgMS4wMzYsIDEuMDM2LCAxLjAzNiwgMC44MTM3OCwgMC44MTM3OCwgMS4yMTIzNywgMS4yMTIzNywgMS4yMTIzNywgMC43MzU0MSwgMC45Nzg0NywgMC45NzM2MywgMC44OTcyMywgMC44Nzg5NywgMS4wNDI2LCAwLjc5NDI5LCAwLjg1MjkyLCAwLjkxMTQ5LCAxLjA1ODE1LCAxLjE0MDYsIDAuNzk2MzEsIDAuOTAxMjgsIDAuODM4NTMsIDEuMDQzOTYsIDEuMTA2MTUsIDAuOTc1NTIsIDAuOTQ0MzYsIDAuOTc1NTIsIDAuODg2NDEsIDAuODA1MjcsIDAuOTYwODMsIDEuMDAxMzUsIDEsIDEuMDY3NzcsIDAuOTgxNywgMC45MTE0MiwgMC45OTM2MSwgMS4xMTE0NCwgMS41NzI5MywgMS4xMTE0NCwgMS4yMTIzNywgMC43NDYyNywgMS4zMTgxOCwgMS4wNjU4NSwgMC45NzA0MiwgMC44MzA1NSwgMC45NzA0MiwgMC45MzUwMywgMS4xMjYxLCAwLjk3MDQyLCAwLjk3OTIyLCAxLjE0MjM2LCAwLjk0NTUyLCAxLjAxMDU0LCAxLjE0MjM2LCAxLjAyNDcxLCAwLjk3OTIyLCAwLjk0MTY1LCAwLjk3MDQyLCAwLjk3MDQyLCAxLjAyNzYsIDAuNzg5MjksIDEuMTI2MSwgMC45NzkyMiwgMC45NTg3NCwgMS4wMjE5NywgMC45ODUwNywgMC45Njc1MiwgMC45NzE2OCwgMC45NTEwNywgMS4xNjU3OSwgMC45NTEwNywgMS4yMTIzNywgMS4wMzk1OSwgMS4wMzYsIDEuMDM2LCAxLCAxLjAzNiwgMS4xNjU3OSwgMC44NzM1NywgMS4zMTgxOCwgMS4xODc1NCwgMS4yNjc4MSwgMS4wNTM1NiwgMS4yMTIzNywgMS4xODYyMiwgMC43OTQ4NywgMC45NDk5NCwgMS4yOTAwNCwgMS4yNDA0NywgMS4yNDA0NywgMS4zMTgxOCwgMSwgMC45MTQ4NCwgMC45NzU0LCAxLjMxODE4LCAxLjEzNDksIDEuMjQ4NjYsIDEuMDUzNTYsIDEuMTM5MzQsIDEuMTU1NzQsIDEuMTczODksIDAuNzM1NDEsIDAuOTczNjMsIDAuOTczNjMsIDAuOTczNjMsIDAuOTczNjMsIDAuOTczNjMsIDAuOTczNjMsIDAuOTQzODUsIDAuODc4OTcsIDAuNzk0MjksIDAuNzk0MjksIDAuNzk0MjksIDAuNzk0MjksIDEuMTQwNiwgMS4xNDA2LCAxLjE0MDYsIDEuMTQwNiwgMS4wNDI2LCAxLjEwNjE1LCAwLjk3NTUyLCAwLjk3NTUyLCAwLjk3NTUyLCAwLjk3NTUyLCAwLjk3NTUyLCAxLjIxMjM3LCAwLjk3NTUyLCAxLjAwMTM1LCAxLjAwMTM1LCAxLjAwMTM1LCAxLjAwMTM1LCAwLjkxMTQyLCAwLjk0NDM2LCAwLjk4NzIxLCAxLjA2NTg1LCAxLjA2NTg1LCAxLjA2NTg1LCAxLjA2NTg1LCAxLjA2NTg1LCAxLjA2NTg1LCAwLjk2NzA1LCAwLjgzMDU1LCAwLjkzNTAzLCAwLjkzNTAzLCAwLjkzNTAzLCAwLjkzNTAzLCAxLjE0MjM2LCAxLjE0MjM2LCAxLjE0MjM2LCAxLjE0MjM2LCAwLjkzMTI1LCAwLjk3OTIyLCAwLjk0MTY1LCAwLjk0MTY1LCAwLjk0MTY1LCAwLjk0MTY1LCAwLjk0MTY1LCAxLjI5MDA0LCAwLjk0MTY1LCAwLjk3OTIyLCAwLjk3OTIyLCAwLjk3OTIyLCAwLjk3OTIyLCAwLjk2NzUyLCAwLjk3MDQyLCAwLjk2NzUyLCAwLjk3MzYzLCAxLjA2NTg1LCAwLjk3MzYzLCAxLjA2NTg1LCAwLjk3MzYzLCAxLjA2NTg1LCAwLjg3ODk3LCAwLjgzMDU1LCAwLjg3ODk3LCAwLjgzMDU1LCAwLjg3ODk3LCAwLjgzMDU1LCAwLjg3ODk3LCAwLjgzMDU1LCAxLjA0MjYsIDEuMDAzMywgMS4wNDI2LCAwLjk3MDQyLCAwLjc5NDI5LCAwLjkzNTAzLCAwLjc5NDI5LCAwLjkzNTAzLCAwLjc5NDI5LCAwLjkzNTAzLCAwLjc5NDI5LCAwLjkzNTAzLCAwLjc5NDI5LCAwLjkzNTAzLCAwLjkxMTQ5LCAwLjk3MDQyLCAwLjkxMTQ5LCAwLjk3MDQyLCAwLjkxMTQ5LCAwLjk3MDQyLCAxLCAxLCAxLjA1ODE1LCAwLjk3OTIyLCAxLjA1ODE1LCAwLjk3OTIyLCAxLjE0MDYsIDEuMTQyMzYsIDEuMTQwNiwgMS4xNDIzNiwgMS4xNDA2LCAxLjE0MjM2LCAxLjE0MDYsIDEuMTQyMzYsIDEuMTQwNiwgMS4xNDIzNiwgMC45NzQ0MSwgMS4wNDMwMiwgMC43OTYzMSwgMS4wMTU4MiwgMSwgMSwgMS4wMTA1NCwgMC44Mzg1MywgMS4xNDIzNiwgMSwgMSwgMC44Mzg1MywgMS4wOTEyNSwgMC44Mzg1MywgMC45MDQxOCwgMC44Mzg1MywgMS4xOTUwOCwgMS4xMDYxNSwgMC45NzkyMiwgMSwgMSwgMS4xMDYxNSwgMC45NzkyMiwgMS4wMTAzNCwgMS4xMDQ2NiwgMC45NzkyMiwgMC45NzU1MiwgMC45NDE2NSwgMC45NzU1MiwgMC45NDE2NSwgMC45NzU1MiwgMC45NDE2NSwgMC45MTYwMiwgMC45MTk4MSwgMC44ODY0MSwgMS4wMjc2LCAxLCAxLCAwLjg4NjQxLCAxLjAyNzYsIDAuODA1MjcsIDAuNzg5MjksIDAuODA1MjcsIDAuNzg5MjksIDAuODA1MjcsIDAuNzg5MjksIDAuODA1MjcsIDAuNzg5MjksIDEsIDEsIDAuOTYwODMsIDEuMDU0MDMsIDAuOTU5MjMsIDEuMTY4NjIsIDEuMDAxMzUsIDAuOTc5MjIsIDEuMDAxMzUsIDAuOTc5MjIsIDEuMDAxMzUsIDAuOTc5MjIsIDEuMDAxMzUsIDAuOTc5MjIsIDEuMDAxMzUsIDAuOTc5MjIsIDEuMDAxMzUsIDAuOTc5MjIsIDEuMDY3NzcsIDEuMDIxOTcsIDAuOTExNDIsIDAuOTY3NTIsIDAuOTExNDIsIDAuOTkzNjEsIDAuOTcxNjgsIDAuOTkzNjEsIDAuOTcxNjgsIDAuOTkzNjEsIDAuOTcxNjgsIDEuMjMxOTksIDEuMDM2LCAwLjk3MzYzLCAxLjA2NTg1LCAwLjk0Mzg1LCAwLjk2NzA1LCAwLjk3NTUyLCAwLjk0MTY1LCAxLCAxLCAwLjk2MDgzLCAxLjEyNjEsIDEuMzE4MTgsIDEuMzE4MTgsIDEuMzE4MTgsIDEuMzE4MTgsIDEuMzE4MTgsIDEuMzE4MTgsIDEuMzE4MTgsIDEuMzE4MTgsIDEuMzE4MTgsIDAuOTUxNjEsIDEuMjcxMjYsIDEuMDA4MTEsIDAuODMyODQsIDAuNzc3MDIsIDAuOTkxMzcsIDAuOTUyNTMsIDEuMDM0NywgMC44NjE0MiwgMS4wNzIwNSwgMS4xNDIzNiwgMC45NzM2MywgMC44OTcyMywgMC44Njg2OSwgMS4wOTgxOCwgMC43OTQyOSwgMC45OTM2MSwgMS4wNTgxNSwgMC45NzU1MiwgMS4xNDA2LCAwLjkwMTI4LCAxLjA2NjYyLCAxLjA0Mzk2LCAxLjEwNjE1LCAwLjg0OTE4LCAwLjk3NTUyLCAxLjA0Njk0LCAwLjk0NDM2LCAwLjk4MDE1LCAwLjk2MDgzLCAwLjkxMTQyLCAxLjAwMzU2LCAwLjk4MTcsIDEuMDE5NDUsIDAuOTg5OTksIDEuMTQwNiwgMC45MTE0MiwgMS4wNDk2MSwgMC45ODk4LCAxLjAwNjM5LCAxLjE0MjM2LCAxLjA3NTE0LCAxLjA0OTYxLCAwLjk5NjA3LCAxLjAyODk3LCAxLjAwOCwgMC45ODk4LCAwLjk1MTM0LCAxLjAwNjM5LCAxLjExMTIxLCAxLjE0MjM2LCAxLjAwNTE4LCAwLjk3OTgxLCAxLjAyMTg2LCAxLCAxLjA4NTc4LCAwLjk0MTY1LCAwLjk5MzE0LCAwLjk4Mzg3LCAwLjkzMDI4LCAwLjkzMzc3LCAxLjM1MTI1LCAxLjA3NTE0LCAxLjEwNjg3LCAwLjkzNDkxLCAxLjA0MjMyLCAxLjAwMzUxLCAxLjE0MjM2LCAxLjA3NTE0LCAwLjk0MTY1LCAxLjA3NTE0LCAxLjAwMzUxLCAwLjc5NDI5LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLjA5MDk3LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjkzNTAzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk2NjA5LCAxLCAxLCAxLCAxLCAxLCAxLCAxLjA2Nzc3LCAxLjAyMTk3LCAxLjA2Nzc3LCAxLjAyMTk3LCAxLjA2Nzc3LCAxLjAyMTk3LCAwLjkxMTQyLCAwLjk2NzUyLCAxLCAxLjIxMjYxLCAwLjg5OTAzLCAxLCAxLCAwLjc1MTU1LCAxLjA0NzQ1LCAxLjA0NzQ1LCAxLjA0NzQ1LCAxLjA0Mzk0LCAwLjk4NjMzLCAwLjk4NjMzLCAwLjk4NjMzLCAwLjcyOTU5LCAwLjcyOTU5LCAxLjIwNTAyLCAwLjkxNDA2LCAxLjI2NTE0LCAxLjIyMiwgMS4wMjk1NiwgMS4wMzM3MiwgMS4wMzM3MiwgMC45NjAzOSwgMS4yNDYzMywgMSwgMS4wOTEyNSwgMC45MzMyNywgMS4wMzMzNiwgMS4xNjU0MSwgMS4wMzYsIDEsIDEsIDEsIDAuNzcxLCAxLCAxLCAxLjE1NTc0LCAxLjE1NTc0LCAxLjE1NTc0LCAxLjE1NTc0LCAwLjg2MzY0LCAwLjk0NDM0LCAwLjg2Mjc5LCAwLjk0NDM0LCAwLjg2MjI0LCAxLCAxLCAxLjE2Nzk4LCAxLCAwLjk2MDg1LCAwLjkwMDY4LCAxLjIxMjM3LCAxLjE4NDE2LCAxLjEzOTA0LCAwLjY5ODI1LCAwLjk3MTYsIDIuMTAzMzksIDEuMjkwMDQsIDEuMjkwMDQsIDEuMjEzMzksIDEuMjkwMDQsIDEuMjkwMDQsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEuNDI2MDMsIDEsIDAuOTk4NjIsIDAuOTk4NjIsIDEsIDAuODcwMjUsIDAuODcwMjUsIDAuODcwMjUsIDAuODcwMjUsIDEuMTg3NzUsIDEuNDI2MDMsIDEsIDEuNDI2MDMsIDEuNDI2MDMsIDAuOTk4NjIsIDEsIDEsIDEsIDEsIDEsIDEuMjg4NiwgMS4wNDMxNSwgMS4xNTI5NiwgMS4zNDE2MywgMSwgMSwgMSwgMS4xMzI2OSwgMS4xMzI2OSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMV07XG5leHBvcnRzLlNlZ29ldWlCb2xkSXRhbGljRmFjdG9ycyA9IFNlZ29ldWlCb2xkSXRhbGljRmFjdG9ycztcbmNvbnN0IFNlZ29ldWlCb2xkSXRhbGljTWV0cmljcyA9IHtcbiAgbGluZUhlaWdodDogMS4zMzAwOCxcbiAgbGluZUdhcDogMFxufTtcbmV4cG9ydHMuU2Vnb2V1aUJvbGRJdGFsaWNNZXRyaWNzID0gU2Vnb2V1aUJvbGRJdGFsaWNNZXRyaWNzO1xuY29uc3QgU2Vnb2V1aUl0YWxpY0ZhY3RvcnMgPSBbMS43NjczOCwgMSwgMSwgMC45ODk0NiwgMS4xNDc2MywgMS4wNTM2NSwgMS4wNjIzNCwgMC45NjkyNywgMC45MjU4NiwgMS4xNTM3MywgMS4xODQxNCwgMC45MTM0OSwgMC45MTM0OSwgMS4wNzQwMywgMS4xNzMwOCwgMC43ODM4MywgMS4yMDA4OCwgMC43ODM4MywgMS40MjUzMSwgMC45NjkyNywgMC45NjkyNywgMC45NjkyNywgMC45NjkyNywgMC45NjkyNywgMC45NjkyNywgMC45NjkyNywgMC45NjkyNywgMC45NjkyNywgMC45NjkyNywgMC43ODM4MywgMC43ODM4MywgMS4xNzMwOCwgMS4xNzMwOCwgMS4xNzMwOCwgMC43NzM0OSwgMC45NDU2NSwgMC45NDcyOSwgMC44NTk0NCwgMC44ODUwNiwgMC45ODU4LCAwLjc0ODE3LCAwLjgwMDE2LCAwLjg4NDQ5LCAwLjk4MDM5LCAwLjk1NzgyLCAwLjY5MjM4LCAwLjg5ODk4LCAwLjgzMjMxLCAwLjk4MTgzLCAxLjAzOTg5LCAwLjk2OTI0LCAwLjg2MjM3LCAwLjk2OTI0LCAwLjgwNTk1LCAwLjc0NTI0LCAwLjg2MDkxLCAwLjk1NDAyLCAwLjk0MTQzLCAwLjk4NDQ4LCAwLjg4NTgsIDAuODMwODksIDAuOTMyODUsIDEuMDk0OSwgMS4zOTAxNiwgMS4wOTQ5LCAxLjQ1OTk0LCAwLjc0NjI3LCAxLjA0ODM5LCAwLjk3NDU0LCAwLjk3NDU0LCAwLjg3MjA3LCAwLjk3NDU0LCAwLjg3NTMzLCAxLjA2MTUxLCAwLjk3NDU0LCAxLjAwMTc2LCAxLjE2NDg0LCAxLjA4MTMyLCAwLjk4MDQ3LCAxLjE2NDg0LCAxLjAyOTg5LCAxLjAxMDU0LCAwLjk2MjI1LCAwLjk3NDU0LCAwLjk3NDU0LCAxLjA2NTk4LCAwLjc5MDA0LCAxLjE2MzQ0LCAxLjAwMzUxLCAwLjk0NjI5LCAwLjk5NzMsIDAuOTEwMTYsIDAuOTY3NzcsIDAuOTA0MywgMC45MTA4MiwgMC45MjQ4MSwgMC45MTA4MiwgMS4xNzMwOCwgMC45NTc0OCwgMC45NjkyNywgMC45NjkyNywgMSwgMC45NjkyNywgMC45MjQ4MSwgMC44MDU5NywgMS4wNDgzOSwgMS4yMzM5MywgMS4xNzgxLCAwLjkyNDUsIDEuMTczMDgsIDEuMjA4MDgsIDAuNjMyMTgsIDAuOTQyNjEsIDEuMjQ4MjIsIDEuMDk5NzEsIDEuMDk5NzEsIDEuMDQ4MzksIDEsIDAuODUyNzMsIDAuNzgwMzIsIDEuMDQ4MzksIDEuMDk5NzEsIDEuMjIzMjYsIDAuOTI0NSwgMS4wOTgzNiwgMS4xMzUyNSwgMS4xNTIyMiwgMC43MDQyNCwgMC45NDcyOSwgMC45NDcyOSwgMC45NDcyOSwgMC45NDcyOSwgMC45NDcyOSwgMC45NDcyOSwgMC44NTQ5OCwgMC44ODUwNiwgMC43NDgxNywgMC43NDgxNywgMC43NDgxNywgMC43NDgxNywgMC45NTc4MiwgMC45NTc4MiwgMC45NTc4MiwgMC45NTc4MiwgMC45ODU4LCAxLjAzOTg5LCAwLjk2OTI0LCAwLjk2OTI0LCAwLjk2OTI0LCAwLjk2OTI0LCAwLjk2OTI0LCAxLjE3MzA4LCAwLjk2OTI0LCAwLjk1NDAyLCAwLjk1NDAyLCAwLjk1NDAyLCAwLjk1NDAyLCAwLjgzMDg5LCAwLjg2MjM3LCAwLjg4NDA5LCAwLjk3NDU0LCAwLjk3NDU0LCAwLjk3NDU0LCAwLjk3NDU0LCAwLjk3NDU0LCAwLjk3NDU0LCAwLjkyOTE2LCAwLjg3MjA3LCAwLjg3NTMzLCAwLjg3NTMzLCAwLjg3NTMzLCAwLjg3NTMzLCAwLjkzMTQ2LCAwLjkzMTQ2LCAwLjkzMTQ2LCAwLjkzMTQ2LCAwLjkzODU0LCAxLjAxMDU0LCAwLjk2MjI1LCAwLjk2MjI1LCAwLjk2MjI1LCAwLjk2MjI1LCAwLjk2MjI1LCAxLjI0ODIyLCAwLjg3NjEsIDEuMDAzNTEsIDEuMDAzNTEsIDEuMDAzNTEsIDEuMDAzNTEsIDAuOTY3NzcsIDAuOTc0NTQsIDAuOTY3NzcsIDAuOTQ3MjksIDAuOTc0NTQsIDAuOTQ3MjksIDAuOTc0NTQsIDAuOTQ3MjksIDAuOTc0NTQsIDAuODg1MDYsIDAuODcyMDcsIDAuODg1MDYsIDAuODcyMDcsIDAuODg1MDYsIDAuODcyMDcsIDAuODg1MDYsIDAuODcyMDcsIDAuOTg1OCwgMC45NTM5MSwgMC45ODU4LCAwLjk3NDU0LCAwLjc0ODE3LCAwLjg3NTMzLCAwLjc0ODE3LCAwLjg3NTMzLCAwLjc0ODE3LCAwLjg3NTMzLCAwLjc0ODE3LCAwLjg3NTMzLCAwLjc0ODE3LCAwLjg3NTMzLCAwLjg4NDQ5LCAwLjk3NDU0LCAwLjg4NDQ5LCAwLjk3NDU0LCAwLjg4NDQ5LCAwLjk3NDU0LCAxLCAxLCAwLjk4MDM5LCAxLjAwMTc2LCAwLjk4MDM5LCAxLjAwMTc2LCAwLjk1NzgyLCAwLjkzMTQ2LCAwLjk1NzgyLCAwLjkzMTQ2LCAwLjk1NzgyLCAwLjkzMTQ2LCAwLjk1NzgyLCAxLjE2NDg0LCAwLjk1NzgyLCAwLjkzMTQ2LCAwLjg0NDIxLCAxLjEyNzYxLCAwLjY5MjM4LCAxLjA4MTMyLCAxLCAxLCAwLjk4MDQ3LCAwLjgzMjMxLCAxLjE2NDg0LCAxLCAxLCAwLjg0NzIzLCAxLjA0ODYxLCAwLjg0NzIzLCAwLjc4NzU1LCAwLjgzMjMxLCAxLjIzNzM2LCAxLjAzOTg5LCAxLjAxMDU0LCAxLCAxLCAxLjAzOTg5LCAxLjAxMDU0LCAwLjk4NTcsIDEuMDM4NDksIDEuMDEwNTQsIDAuOTY5MjQsIDAuOTYyMjUsIDAuOTY5MjQsIDAuOTYyMjUsIDAuOTY5MjQsIDAuOTYyMjUsIDAuOTIzODMsIDAuOTAxNzEsIDAuODA1OTUsIDEuMDY1OTgsIDEsIDEsIDAuODA1OTUsIDEuMDY1OTgsIDAuNzQ1MjQsIDAuNzkwMDQsIDAuNzQ1MjQsIDAuNzkwMDQsIDAuNzQ1MjQsIDAuNzkwMDQsIDAuNzQ1MjQsIDAuNzkwMDQsIDEsIDEsIDAuODYwOTEsIDEuMDI3NTksIDAuODU3NzEsIDEuMTYzNDQsIDAuOTU0MDIsIDEuMDAzNTEsIDAuOTU0MDIsIDEuMDAzNTEsIDAuOTU0MDIsIDEuMDAzNTEsIDAuOTU0MDIsIDEuMDAzNTEsIDAuOTU0MDIsIDEuMDAzNTEsIDAuOTU0MDIsIDEuMDAzNTEsIDAuOTg0NDgsIDAuOTk3MywgMC44MzA4OSwgMC45Njc3NywgMC44MzA4OSwgMC45MzI4NSwgMC45MDQzLCAwLjkzMjg1LCAwLjkwNDMsIDAuOTMyODUsIDAuOTA0MywgMS4zMTg2OCwgMC45NjkyNywgMC45NDcyOSwgMC45NzQ1NCwgMC44NTQ5OCwgMC45MjkxNiwgMC45NjkyNCwgMC44NzYxLCAxLCAxLCAwLjg2MDkxLCAxLjE2MzQ0LCAxLjA0ODM5LCAxLjA0ODM5LCAxLjA0ODM5LCAxLjA0ODM5LCAxLjA0ODM5LCAxLjA0ODM5LCAxLjA0ODM5LCAxLjA0ODM5LCAxLjA0ODM5LCAwLjgxOTY1LCAwLjgxOTY1LCAwLjk0NzI5LCAwLjc4MDMyLCAwLjcxMDIyLCAwLjkwODgzLCAwLjg0MTcxLCAwLjk5ODc3LCAwLjc3NTk2LCAxLjA1NzM0LCAxLjIsIDAuOTQ3MjksIDAuODU5NDQsIDAuODI3OTEsIDAuOTYwNywgMC43NDgxNywgMC45MzI4NSwgMC45ODAzOSwgMC45NjkyNCwgMC45NTc4MiwgMC44OTg5OCwgMC45ODMxNiwgMC45ODE4MywgMS4wMzk4OSwgMC43ODYxNCwgMC45NjkyNCwgMC45NzY0MiwgMC44NjIzNywgMC44NjA3NSwgMC44NjA5MSwgMC44MzA4OSwgMC45MDA4MiwgMC44ODU4LCAwLjk3Mjk2LCAxLjAxMjg0LCAwLjk1NzgyLCAwLjgzMDg5LCAxLjA5NzYsIDEuMDQsIDEuMDMzNDIsIDEuMiwgMS4wNjc1LCAxLjA5NzYsIDAuOTgyMDUsIDEuMDM4MDksIDEuMDUwOTcsIDEuMDQsIDAuOTUzNjQsIDEuMDMzNDIsIDEuMDU0MDEsIDEuMiwgMS4wMjE0OCwgMS4wMTE5LCAxLjA0NzI0LCAxLjAxMjcsIDEuMDI3MzIsIDAuOTYyMjUsIDAuODk2NSwgMC45Nzc4MywgMC45MzU3NCwgMC45NDgxOCwgMS4zMDY3OSwgMS4wNjc1LCAxLjExODI2LCAwLjk5ODIxLCAxLjA1NTcsIDEuMDMyNiwgMS4yLCAxLjA2NzUsIDAuOTYyMjUsIDEuMDY3NSwgMS4wMzI2LCAwLjc0ODE3LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLjAzNzU0LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjg3NTMzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk4NzA1LCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk4NDQ4LCAwLjk5NzMsIDAuOTg0NDgsIDAuOTk3MywgMC45ODQ0OCwgMC45OTczLCAwLjgzMDg5LCAwLjk2Nzc3LCAxLCAxLjIwMDg4LCAwLjg5OTAzLCAxLCAxLCAwLjc1MTU1LCAwLjk0OTQ1LCAwLjk0OTQ1LCAwLjk0OTQ1LCAwLjk0OTQ1LCAxLjEyMzE3LCAxLjEyMzE3LCAxLjEyMzE3LCAwLjY3NjAzLCAwLjY3NjAzLCAxLjE1NjIxLCAwLjczNTg0LCAxLjIxMTkxLCAxLjIyMTM1LCAxLjA2NDgzLCAwLjk0ODY4LCAwLjk0ODY4LCAwLjk1OTk2LCAxLjI0NjMzLCAxLCAxLjA3NDk3LCAwLjg3NzA5LCAwLjk2OTI3LCAxLjAxNDczLCAwLjk2OTI3LCAxLCAxLCAxLCAwLjc3Mjk1LCAxLCAxLCAxLjA5ODM2LCAxLjA5ODM2LCAxLjA5ODM2LCAxLjAxNTIyLCAwLjg2MzIxLCAwLjk0NDM0LCAwLjg2NDksIDAuOTQ0MzQsIDAuODYxODIsIDEsIDEsIDEuMDgzLCAxLCAwLjkxNTc4LCAwLjg2NDM4LCAxLjE3MzA4LCAxLjE4NDE2LCAxLjE0NTg5LCAwLjY5ODI1LCAwLjk3NjIyLCAxLjk2NzkxLCAxLjI0ODIyLCAxLjI0ODIyLCAxLjE3MzA4LCAxLjI0ODIyLCAxLjI0ODIyLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLjQyNjAzLCAxLCAwLjk5ODYyLCAwLjk5ODYyLCAxLCAwLjg3MDI1LCAwLjg3MDI1LCAwLjg3MDI1LCAwLjg3MDI1LCAxLjE3OTg0LCAxLjQyNjAzLCAxLCAxLjQyNjAzLCAxLjQyNjAzLCAwLjk5ODYyLCAxLCAxLCAxLCAxLCAxLCAxLjI4ODYsIDEuMDQzMTUsIDEuMTUyOTYsIDEuMzQxNjMsIDEsIDEsIDEsIDEuMTA3NDIsIDEuMTA3NDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDFdO1xuZXhwb3J0cy5TZWdvZXVpSXRhbGljRmFjdG9ycyA9IFNlZ29ldWlJdGFsaWNGYWN0b3JzO1xuY29uc3QgU2Vnb2V1aUl0YWxpY01ldHJpY3MgPSB7XG4gIGxpbmVIZWlnaHQ6IDEuMzMwMDgsXG4gIGxpbmVHYXA6IDBcbn07XG5leHBvcnRzLlNlZ29ldWlJdGFsaWNNZXRyaWNzID0gU2Vnb2V1aUl0YWxpY01ldHJpY3M7XG5jb25zdCBTZWdvZXVpUmVndWxhckZhY3RvcnMgPSBbMS43NjczOCwgMSwgMSwgMC45ODU5NCwgMS4wMjI4NSwgMS4xMDQ1NCwgMS4wNjIzNCwgMC45NjkyNywgMC45MjAzNywgMS4xOTk4NSwgMS4yMDQ2LCAwLjkwNjE2LCAwLjkwNjE2LCAxLjA3MTUyLCAxLjE3MTQsIDAuNzgwMzIsIDEuMjAwODgsIDAuNzgwMzIsIDEuNDAyNDYsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuNzgwMzIsIDAuNzgwMzIsIDEuMTcxNCwgMS4xNzE0LCAxLjE3MTQsIDAuODA1OTcsIDAuOTQwODQsIDAuOTY3MDYsIDAuODU5NDQsIDAuODU3MzQsIDAuOTcwOTMsIDAuNzU4NDIsIDAuNzk5MzYsIDAuODgxOTgsIDAuOTgzMSwgMC45NTc4MiwgMC43MTM4NywgMC44Njk2OSwgMC44NDYzNiwgMS4wNzc5NiwgMS4wMzU4NCwgMC45NjkyNCwgMC44Mzk2OCwgMC45NjkyNCwgMC44MjgyNiwgMC43OTY0OSwgMC44NTc3MSwgMC45NTEzMiwgMC45MzExOSwgMC45ODk2NSwgMC44ODQzMywgMC44Mjg3LCAwLjkzMzY1LCAxLjA4NjEyLCAxLjM2MzgsIDEuMDg2MTIsIDEuNDU3ODYsIDAuNzQ2MjcsIDAuODA0OTksIDAuOTE0ODQsIDEuMDU3MDcsIDAuOTIzODMsIDEuMDU4ODIsIDAuOTQwMywgMS4xMjY1NCwgMS4wNTg4MiwgMS4wMTc1NiwgMS4wOTAxMSwgMS4wOTAxMSwgMC45OTQxNCwgMS4wOTAxMSwgMS4wMzQsIDEuMDE3NTYsIDEuMDUzNTYsIDEuMDU3MDcsIDEuMDU4ODIsIDEuMDQzOTksIDAuODQ4NjMsIDEuMjE5NjgsIDEuMDE3NTYsIDAuOTU4MDEsIDEuMDAwNjgsIDAuOTE3OTcsIDAuOTY3NzcsIDAuOTA0MywgMC45MDM1MSwgMC45MjEwNSwgMC45MDM1MSwgMS4xNzE0LCAwLjg1MzM3LCAwLjk2OTI3LCAwLjk2OTI3LCAwLjk5OTEyLCAwLjk2OTI3LCAwLjkyMTA1LCAwLjgwNTk3LCAxLjI0MzQsIDEuMjA4MDgsIDEuMDU5MzcsIDAuOTA5NTcsIDEuMTcxNCwgMS4yMDgwOCwgMC43NTE1NSwgMC45NDI2MSwgMS4yNDY0NCwgMS4wOTk3MSwgMS4wOTk3MSwgMC44NDc1MSwgMSwgMC44NTI3MywgMC43ODAzMiwgMC42MTU4NCwgMS4wNTQyNSwgMS4xNzkxNCwgMC45MDk1NywgMS4wODY2NSwgMS4xMTU5MywgMS4xNDE2OSwgMC43MzM4MSwgMC45NjcwNiwgMC45NjcwNiwgMC45NjcwNiwgMC45NjcwNiwgMC45NjcwNiwgMC45NjcwNiwgMC44NjAzNSwgMC44NTczNCwgMC43NTg0MiwgMC43NTg0MiwgMC43NTg0MiwgMC43NTg0MiwgMC45NTc4MiwgMC45NTc4MiwgMC45NTc4MiwgMC45NTc4MiwgMC45NzA5MywgMS4wMzU4NCwgMC45NjkyNCwgMC45NjkyNCwgMC45NjkyNCwgMC45NjkyNCwgMC45NjkyNCwgMS4xNzE0LCAwLjk2OTI0LCAwLjk1MTMyLCAwLjk1MTMyLCAwLjk1MTMyLCAwLjk1MTMyLCAwLjgyODcsIDAuODM5NjgsIDAuODkwNDksIDAuOTE0ODQsIDAuOTE0ODQsIDAuOTE0ODQsIDAuOTE0ODQsIDAuOTE0ODQsIDAuOTE0ODQsIDAuOTM1NzUsIDAuOTIzODMsIDAuOTQwMywgMC45NDAzLCAwLjk0MDMsIDAuOTQwMywgMC44NzE3LCAwLjg3MTcsIDAuODcxNywgMC44NzE3LCAxLjAwNTI3LCAxLjAxNzU2LCAxLjA1MzU2LCAxLjA1MzU2LCAxLjA1MzU2LCAxLjA1MzU2LCAxLjA1MzU2LCAxLjI0NjQ0LCAwLjk1OTIzLCAxLjAxNzU2LCAxLjAxNzU2LCAxLjAxNzU2LCAxLjAxNzU2LCAwLjk2Nzc3LCAxLjA1NzA3LCAwLjk2Nzc3LCAwLjk2NzA2LCAwLjkxNDg0LCAwLjk2NzA2LCAwLjkxNDg0LCAwLjk2NzA2LCAwLjkxNDg0LCAwLjg1NzM0LCAwLjkyMzgzLCAwLjg1NzM0LCAwLjkyMzgzLCAwLjg1NzM0LCAwLjkyMzgzLCAwLjg1NzM0LCAwLjkyMzgzLCAwLjk3MDkzLCAxLjA5NjksIDAuOTcwOTMsIDEuMDU4ODIsIDAuNzU4NDIsIDAuOTQwMywgMC43NTg0MiwgMC45NDAzLCAwLjc1ODQyLCAwLjk0MDMsIDAuNzU4NDIsIDAuOTQwMywgMC43NTg0MiwgMC45NDAzLCAwLjg4MTk4LCAxLjA1ODgyLCAwLjg4MTk4LCAxLjA1ODgyLCAwLjg4MTk4LCAxLjA1ODgyLCAxLCAxLCAwLjk4MzEsIDEuMDE3NTYsIDAuOTgzMSwgMS4wMTc1NiwgMC45NTc4MiwgMC44NzE3LCAwLjk1NzgyLCAwLjg3MTcsIDAuOTU3ODIsIDAuODcxNywgMC45NTc4MiwgMS4wOTAxMSwgMC45NTc4MiwgMC44NzE3LCAwLjg0Nzg0LCAxLjExNTUxLCAwLjcxMzg3LCAxLjA5MDExLCAxLCAxLCAwLjk5NDE0LCAwLjg0NjM2LCAxLjA5MDExLCAxLCAxLCAwLjg0NjM2LCAxLjA1MzYsIDAuODQ2MzYsIDAuOTQyOTgsIDAuODQ2MzYsIDEuMjMyOTcsIDEuMDM1ODQsIDEuMDE3NTYsIDEsIDEsIDEuMDM1ODQsIDEuMDE3NTYsIDEuMDAzMjMsIDEuMDM0NDQsIDEuMDE3NTYsIDAuOTY5MjQsIDEuMDUzNTYsIDAuOTY5MjQsIDEuMDUzNTYsIDAuOTY5MjQsIDEuMDUzNTYsIDAuOTMwNjYsIDAuOTgyOTMsIDAuODI4MjYsIDEuMDQzOTksIDEsIDEsIDAuODI4MjYsIDEuMDQzOTksIDAuNzk2NDksIDAuODQ4NjMsIDAuNzk2NDksIDAuODQ4NjMsIDAuNzk2NDksIDAuODQ4NjMsIDAuNzk2NDksIDAuODQ4NjMsIDEsIDEsIDAuODU3NzEsIDEuMTczMTgsIDAuODU3NzEsIDEuMjE5NjgsIDAuOTUxMzIsIDEuMDE3NTYsIDAuOTUxMzIsIDEuMDE3NTYsIDAuOTUxMzIsIDEuMDE3NTYsIDAuOTUxMzIsIDEuMDE3NTYsIDAuOTUxMzIsIDEuMDE3NTYsIDAuOTUxMzIsIDEuMDE3NTYsIDAuOTg5NjUsIDEuMDAwNjgsIDAuODI4NywgMC45Njc3NywgMC44Mjg3LCAwLjkzMzY1LCAwLjkwNDMsIDAuOTMzNjUsIDAuOTA0MywgMC45MzM2NSwgMC45MDQzLCAxLjA4NTcxLCAwLjk2OTI3LCAwLjk2NzA2LCAwLjkxNDg0LCAwLjg2MDM1LCAwLjkzNTc1LCAwLjk2OTI0LCAwLjk1OTIzLCAxLCAxLCAwLjg1NzcxLCAxLjIxOTY4LCAxLjExNDM3LCAxLjExNDM3LCAwLjkzMTA5LCAwLjkxMjAyLCAwLjYwNDExLCAwLjg0MTY0LCAwLjU1NTcyLCAxLjAxMTczLCAwLjk3MzYxLCAwLjgxODE4LCAwLjgxODE4LCAwLjk2NjM1LCAwLjc4MDMyLCAwLjcyNzI3LCAwLjkyMzY2LCAwLjk4NjAxLCAxLjAzNDA1LCAwLjc3OTY4LCAxLjA5Nzk5LCAxLjIsIDAuOTY3MDYsIDAuODU5NDQsIDAuODU2MzgsIDAuOTY0OTEsIDAuNzU4NDIsIDAuOTMzNjUsIDAuOTgzMSwgMC45NjkyNCwgMC45NTc4MiwgMC44Njk2OSwgMC45NDE1MiwgMS4wNzc5NiwgMS4wMzU4NCwgMC43ODQzNywgMC45NjkyNCwgMC45ODcxNSwgMC44Mzk2OCwgMC44MzQ5MSwgMC44NTc3MSwgMC44Mjg3LCAwLjk0NDkyLCAwLjg4NDMzLCAwLjkyODcsIDEuMDA5OCwgMC45NTc4MiwgMC44Mjg3LCAxLjA2MjUsIDAuOTgyNDgsIDEuMDM0MjQsIDEuMiwgMS4wMTA3MSwgMS4wNjI1LCAwLjk1MjQ2LCAxLjAzODA5LCAxLjA0OTEyLCAwLjk4MjQ4LCAxLjAwMjIxLCAxLjAzNDI0LCAxLjA1NDQzLCAxLjIsIDEuMDQ3ODUsIDAuOTk2MDksIDEuMDAxNjksIDEuMDUxNzYsIDAuOTkzNDYsIDEuMDUzNTYsIDAuOTA4NywgMS4wMzAwNCwgMC45NTU0MiwgMC45MzExNywgMS4yMzM2MiwgMS4wMTA3MSwgMS4wNzgzMSwgMS4wMjUxMiwgMS4wNTIwNSwgMS4wMzUwMiwgMS4yLCAxLjAxMDcxLCAxLjA1MzU2LCAxLjAxMDcxLCAxLjAzNTAyLCAwLjc1ODQyLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLjAzNzE5LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk0MDMsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEuMDQwMjEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuOTg5NjUsIDEuMDAwNjgsIDAuOTg5NjUsIDEuMDAwNjgsIDAuOTg5NjUsIDEuMDAwNjgsIDAuODI4NywgMC45Njc3NywgMSwgMS4yMDA4OCwgMC44OTkwMywgMSwgMSwgMC43NTE1NSwgMS4wMzA3NywgMS4wMzA3NywgMS4wMzA3NywgMS4wMzA3NywgMS4xMzE5NiwgMS4xMzE5NiwgMS4xMzE5NiwgMC42NzQyOCwgMC42NzQyOCwgMS4xNjAzOSwgMC43MzI5MSwgMS4yMDk5NiwgMS4yMjEzNSwgMS4wNjQ4MywgMC45NDg2OCwgMC45NDg2OCwgMC45NTk5NiwgMS4yNDYzMywgMSwgMS4wNzQ5NywgMC44Nzc5NiwgMC45NjkyNywgMS4wMTUxOCwgMC45NjkyNywgMSwgMSwgMSwgMC43NzI5NSwgMSwgMSwgMS4xMDUzOSwgMS4xMDUzOSwgMS4xMTM1OCwgMS4wNjk2NywgMC44NjI3OSwgMC45NDQzNCwgMC44NjI3OSwgMC45NDQzNCwgMC44NjE4MiwgMSwgMSwgMS4wODMsIDEsIDAuOTE1NzgsIDAuODY1MDcsIDEuMTcxNCwgMS4xODQxNiwgMS4xNDU4OSwgMC42OTgyNSwgMC45NzYyMiwgMS45Njk3LCAxLjI0ODIyLCAxLjI0ODIyLCAxLjE3MjM4LCAxLjI0ODIyLCAxLjI0ODIyLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLjQyNjAzLCAxLCAwLjk5ODYyLCAwLjk5ODYyLCAxLCAwLjg3MDI1LCAwLjg3MDI1LCAwLjg3MDI1LCAwLjg3MDI1LCAxLjE4MDgzLCAxLjQyNjAzLCAxLCAxLjQyNjAzLCAxLjQyNjAzLCAwLjk5ODYyLCAxLCAxLCAxLCAxLCAxLCAxLjI4ODYsIDEuMDQzMTUsIDEuMTUyOTYsIDEuMzQxNjMsIDEsIDEsIDEsIDEuMTA5MzgsIDEuMTA5MzgsIDEsIDEsIDEsIDEuMDU0MjUsIDEuMDk5NzEsIDEuMDk5NzEsIDEuMDk5NzEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDFdO1xuZXhwb3J0cy5TZWdvZXVpUmVndWxhckZhY3RvcnMgPSBTZWdvZXVpUmVndWxhckZhY3RvcnM7XG5jb25zdCBTZWdvZXVpUmVndWxhck1ldHJpY3MgPSB7XG4gIGxpbmVIZWlnaHQ6IDEuMzMwMDgsXG4gIGxpbmVHYXA6IDBcbn07XG5leHBvcnRzLlNlZ29ldWlSZWd1bGFyTWV0cmljcyA9IFNlZ29ldWlSZWd1bGFyTWV0cmljcztcblxuLyoqKi8gfSksXG4vKiAxOCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5TRUFDX0FOQUxZU0lTX0VOQUJMRUQgPSBleHBvcnRzLk1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZyA9IGV4cG9ydHMuRm9udEZsYWdzID0gdm9pZCAwO1xuZXhwb3J0cy5nZXRGb250VHlwZSA9IGdldEZvbnRUeXBlO1xuZXhwb3J0cy5ub3JtYWxpemVGb250TmFtZSA9IG5vcm1hbGl6ZUZvbnROYW1lO1xuZXhwb3J0cy5yZWNvdmVyR2x5cGhOYW1lID0gcmVjb3ZlckdseXBoTmFtZTtcbmV4cG9ydHMudHlwZTFGb250R2x5cGhNYXBwaW5nID0gdHlwZTFGb250R2x5cGhNYXBwaW5nO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX2VuY29kaW5ncyA9IF9fd19wZGZqc19yZXF1aXJlX18oMTkpO1xuXG52YXIgX2dseXBobGlzdCA9IF9fd19wZGZqc19yZXF1aXJlX18oMjApO1xuXG52YXIgX3VuaWNvZGUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIxKTtcblxuY29uc3QgU0VBQ19BTkFMWVNJU19FTkFCTEVEID0gdHJ1ZTtcbmV4cG9ydHMuU0VBQ19BTkFMWVNJU19FTkFCTEVEID0gU0VBQ19BTkFMWVNJU19FTkFCTEVEO1xuY29uc3QgRm9udEZsYWdzID0ge1xuICBGaXhlZFBpdGNoOiAxLFxuICBTZXJpZjogMixcbiAgU3ltYm9saWM6IDQsXG4gIFNjcmlwdDogOCxcbiAgTm9uc3ltYm9saWM6IDMyLFxuICBJdGFsaWM6IDY0LFxuICBBbGxDYXA6IDY1NTM2LFxuICBTbWFsbENhcDogMTMxMDcyLFxuICBGb3JjZUJvbGQ6IDI2MjE0NFxufTtcbmV4cG9ydHMuRm9udEZsYWdzID0gRm9udEZsYWdzO1xuY29uc3QgTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nID0gW1wiLm5vdGRlZlwiLCBcIi5udWxsXCIsIFwibm9ubWFya2luZ3JldHVyblwiLCBcInNwYWNlXCIsIFwiZXhjbGFtXCIsIFwicXVvdGVkYmxcIiwgXCJudW1iZXJzaWduXCIsIFwiZG9sbGFyXCIsIFwicGVyY2VudFwiLCBcImFtcGVyc2FuZFwiLCBcInF1b3Rlc2luZ2xlXCIsIFwicGFyZW5sZWZ0XCIsIFwicGFyZW5yaWdodFwiLCBcImFzdGVyaXNrXCIsIFwicGx1c1wiLCBcImNvbW1hXCIsIFwiaHlwaGVuXCIsIFwicGVyaW9kXCIsIFwic2xhc2hcIiwgXCJ6ZXJvXCIsIFwib25lXCIsIFwidHdvXCIsIFwidGhyZWVcIiwgXCJmb3VyXCIsIFwiZml2ZVwiLCBcInNpeFwiLCBcInNldmVuXCIsIFwiZWlnaHRcIiwgXCJuaW5lXCIsIFwiY29sb25cIiwgXCJzZW1pY29sb25cIiwgXCJsZXNzXCIsIFwiZXF1YWxcIiwgXCJncmVhdGVyXCIsIFwicXVlc3Rpb25cIiwgXCJhdFwiLCBcIkFcIiwgXCJCXCIsIFwiQ1wiLCBcIkRcIiwgXCJFXCIsIFwiRlwiLCBcIkdcIiwgXCJIXCIsIFwiSVwiLCBcIkpcIiwgXCJLXCIsIFwiTFwiLCBcIk1cIiwgXCJOXCIsIFwiT1wiLCBcIlBcIiwgXCJRXCIsIFwiUlwiLCBcIlNcIiwgXCJUXCIsIFwiVVwiLCBcIlZcIiwgXCJXXCIsIFwiWFwiLCBcIllcIiwgXCJaXCIsIFwiYnJhY2tldGxlZnRcIiwgXCJiYWNrc2xhc2hcIiwgXCJicmFja2V0cmlnaHRcIiwgXCJhc2NpaWNpcmN1bVwiLCBcInVuZGVyc2NvcmVcIiwgXCJncmF2ZVwiLCBcImFcIiwgXCJiXCIsIFwiY1wiLCBcImRcIiwgXCJlXCIsIFwiZlwiLCBcImdcIiwgXCJoXCIsIFwiaVwiLCBcImpcIiwgXCJrXCIsIFwibFwiLCBcIm1cIiwgXCJuXCIsIFwib1wiLCBcInBcIiwgXCJxXCIsIFwiclwiLCBcInNcIiwgXCJ0XCIsIFwidVwiLCBcInZcIiwgXCJ3XCIsIFwieFwiLCBcInlcIiwgXCJ6XCIsIFwiYnJhY2VsZWZ0XCIsIFwiYmFyXCIsIFwiYnJhY2VyaWdodFwiLCBcImFzY2lpdGlsZGVcIiwgXCJBZGllcmVzaXNcIiwgXCJBcmluZ1wiLCBcIkNjZWRpbGxhXCIsIFwiRWFjdXRlXCIsIFwiTnRpbGRlXCIsIFwiT2RpZXJlc2lzXCIsIFwiVWRpZXJlc2lzXCIsIFwiYWFjdXRlXCIsIFwiYWdyYXZlXCIsIFwiYWNpcmN1bWZsZXhcIiwgXCJhZGllcmVzaXNcIiwgXCJhdGlsZGVcIiwgXCJhcmluZ1wiLCBcImNjZWRpbGxhXCIsIFwiZWFjdXRlXCIsIFwiZWdyYXZlXCIsIFwiZWNpcmN1bWZsZXhcIiwgXCJlZGllcmVzaXNcIiwgXCJpYWN1dGVcIiwgXCJpZ3JhdmVcIiwgXCJpY2lyY3VtZmxleFwiLCBcImlkaWVyZXNpc1wiLCBcIm50aWxkZVwiLCBcIm9hY3V0ZVwiLCBcIm9ncmF2ZVwiLCBcIm9jaXJjdW1mbGV4XCIsIFwib2RpZXJlc2lzXCIsIFwib3RpbGRlXCIsIFwidWFjdXRlXCIsIFwidWdyYXZlXCIsIFwidWNpcmN1bWZsZXhcIiwgXCJ1ZGllcmVzaXNcIiwgXCJkYWdnZXJcIiwgXCJkZWdyZWVcIiwgXCJjZW50XCIsIFwic3RlcmxpbmdcIiwgXCJzZWN0aW9uXCIsIFwiYnVsbGV0XCIsIFwicGFyYWdyYXBoXCIsIFwiZ2VybWFuZGJsc1wiLCBcInJlZ2lzdGVyZWRcIiwgXCJjb3B5cmlnaHRcIiwgXCJ0cmFkZW1hcmtcIiwgXCJhY3V0ZVwiLCBcImRpZXJlc2lzXCIsIFwibm90ZXF1YWxcIiwgXCJBRVwiLCBcIk9zbGFzaFwiLCBcImluZmluaXR5XCIsIFwicGx1c21pbnVzXCIsIFwibGVzc2VxdWFsXCIsIFwiZ3JlYXRlcmVxdWFsXCIsIFwieWVuXCIsIFwibXVcIiwgXCJwYXJ0aWFsZGlmZlwiLCBcInN1bW1hdGlvblwiLCBcInByb2R1Y3RcIiwgXCJwaVwiLCBcImludGVncmFsXCIsIFwib3JkZmVtaW5pbmVcIiwgXCJvcmRtYXNjdWxpbmVcIiwgXCJPbWVnYVwiLCBcImFlXCIsIFwib3NsYXNoXCIsIFwicXVlc3Rpb25kb3duXCIsIFwiZXhjbGFtZG93blwiLCBcImxvZ2ljYWxub3RcIiwgXCJyYWRpY2FsXCIsIFwiZmxvcmluXCIsIFwiYXBwcm94ZXF1YWxcIiwgXCJEZWx0YVwiLCBcImd1aWxsZW1vdGxlZnRcIiwgXCJndWlsbGVtb3RyaWdodFwiLCBcImVsbGlwc2lzXCIsIFwibm9uYnJlYWtpbmdzcGFjZVwiLCBcIkFncmF2ZVwiLCBcIkF0aWxkZVwiLCBcIk90aWxkZVwiLCBcIk9FXCIsIFwib2VcIiwgXCJlbmRhc2hcIiwgXCJlbWRhc2hcIiwgXCJxdW90ZWRibGxlZnRcIiwgXCJxdW90ZWRibHJpZ2h0XCIsIFwicXVvdGVsZWZ0XCIsIFwicXVvdGVyaWdodFwiLCBcImRpdmlkZVwiLCBcImxvemVuZ2VcIiwgXCJ5ZGllcmVzaXNcIiwgXCJZZGllcmVzaXNcIiwgXCJmcmFjdGlvblwiLCBcImN1cnJlbmN5XCIsIFwiZ3VpbHNpbmdsbGVmdFwiLCBcImd1aWxzaW5nbHJpZ2h0XCIsIFwiZmlcIiwgXCJmbFwiLCBcImRhZ2dlcmRibFwiLCBcInBlcmlvZGNlbnRlcmVkXCIsIFwicXVvdGVzaW5nbGJhc2VcIiwgXCJxdW90ZWRibGJhc2VcIiwgXCJwZXJ0aG91c2FuZFwiLCBcIkFjaXJjdW1mbGV4XCIsIFwiRWNpcmN1bWZsZXhcIiwgXCJBYWN1dGVcIiwgXCJFZGllcmVzaXNcIiwgXCJFZ3JhdmVcIiwgXCJJYWN1dGVcIiwgXCJJY2lyY3VtZmxleFwiLCBcIklkaWVyZXNpc1wiLCBcIklncmF2ZVwiLCBcIk9hY3V0ZVwiLCBcIk9jaXJjdW1mbGV4XCIsIFwiYXBwbGVcIiwgXCJPZ3JhdmVcIiwgXCJVYWN1dGVcIiwgXCJVY2lyY3VtZmxleFwiLCBcIlVncmF2ZVwiLCBcImRvdGxlc3NpXCIsIFwiY2lyY3VtZmxleFwiLCBcInRpbGRlXCIsIFwibWFjcm9uXCIsIFwiYnJldmVcIiwgXCJkb3RhY2NlbnRcIiwgXCJyaW5nXCIsIFwiY2VkaWxsYVwiLCBcImh1bmdhcnVtbGF1dFwiLCBcIm9nb25la1wiLCBcImNhcm9uXCIsIFwiTHNsYXNoXCIsIFwibHNsYXNoXCIsIFwiU2Nhcm9uXCIsIFwic2Nhcm9uXCIsIFwiWmNhcm9uXCIsIFwiemNhcm9uXCIsIFwiYnJva2VuYmFyXCIsIFwiRXRoXCIsIFwiZXRoXCIsIFwiWWFjdXRlXCIsIFwieWFjdXRlXCIsIFwiVGhvcm5cIiwgXCJ0aG9yblwiLCBcIm1pbnVzXCIsIFwibXVsdGlwbHlcIiwgXCJvbmVzdXBlcmlvclwiLCBcInR3b3N1cGVyaW9yXCIsIFwidGhyZWVzdXBlcmlvclwiLCBcIm9uZWhhbGZcIiwgXCJvbmVxdWFydGVyXCIsIFwidGhyZWVxdWFydGVyc1wiLCBcImZyYW5jXCIsIFwiR2JyZXZlXCIsIFwiZ2JyZXZlXCIsIFwiSWRvdGFjY2VudFwiLCBcIlNjZWRpbGxhXCIsIFwic2NlZGlsbGFcIiwgXCJDYWN1dGVcIiwgXCJjYWN1dGVcIiwgXCJDY2Fyb25cIiwgXCJjY2Fyb25cIiwgXCJkY3JvYXRcIl07XG5leHBvcnRzLk1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZyA9IE1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZztcblxuZnVuY3Rpb24gZ2V0Rm9udFR5cGUodHlwZSwgc3VidHlwZSwgaXNTdGFuZGFyZEZvbnQgPSBmYWxzZSkge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFwiVHlwZTFcIjpcbiAgICAgIGlmIChpc1N0YW5kYXJkRm9udCkge1xuICAgICAgICByZXR1cm4gX3V0aWwuRm9udFR5cGUuVFlQRTFTVEFOREFSRDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN1YnR5cGUgPT09IFwiVHlwZTFDXCIgPyBfdXRpbC5Gb250VHlwZS5UWVBFMUMgOiBfdXRpbC5Gb250VHlwZS5UWVBFMTtcblxuICAgIGNhc2UgXCJDSURGb250VHlwZTBcIjpcbiAgICAgIHJldHVybiBzdWJ0eXBlID09PSBcIkNJREZvbnRUeXBlMENcIiA/IF91dGlsLkZvbnRUeXBlLkNJREZPTlRUWVBFMEMgOiBfdXRpbC5Gb250VHlwZS5DSURGT05UVFlQRTA7XG5cbiAgICBjYXNlIFwiT3BlblR5cGVcIjpcbiAgICAgIHJldHVybiBfdXRpbC5Gb250VHlwZS5PUEVOVFlQRTtcblxuICAgIGNhc2UgXCJUcnVlVHlwZVwiOlxuICAgICAgcmV0dXJuIF91dGlsLkZvbnRUeXBlLlRSVUVUWVBFO1xuXG4gICAgY2FzZSBcIkNJREZvbnRUeXBlMlwiOlxuICAgICAgcmV0dXJuIF91dGlsLkZvbnRUeXBlLkNJREZPTlRUWVBFMjtcblxuICAgIGNhc2UgXCJNTVR5cGUxXCI6XG4gICAgICByZXR1cm4gX3V0aWwuRm9udFR5cGUuTU1UWVBFMTtcblxuICAgIGNhc2UgXCJUeXBlMFwiOlxuICAgICAgcmV0dXJuIF91dGlsLkZvbnRUeXBlLlRZUEUwO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBfdXRpbC5Gb250VHlwZS5VTktOT1dOO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlY292ZXJHbHlwaE5hbWUobmFtZSwgZ2x5cGhzVW5pY29kZU1hcCkge1xuICBpZiAoZ2x5cGhzVW5pY29kZU1hcFtuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cblxuICBjb25zdCB1bmljb2RlID0gKDAsIF91bmljb2RlLmdldFVuaWNvZGVGb3JHbHlwaCkobmFtZSwgZ2x5cGhzVW5pY29kZU1hcCk7XG5cbiAgaWYgKHVuaWNvZGUgIT09IC0xKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZ2x5cGhzVW5pY29kZU1hcCkge1xuICAgICAgaWYgKGdseXBoc1VuaWNvZGVNYXBba2V5XSA9PT0gdW5pY29kZSkge1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICgwLCBfdXRpbC5pbmZvKShcIlVuYWJsZSB0byByZWNvdmVyIGEgc3RhbmRhcmQgZ2x5cGggbmFtZSBmb3I6IFwiICsgbmFtZSk7XG4gIHJldHVybiBuYW1lO1xufVxuXG5mdW5jdGlvbiB0eXBlMUZvbnRHbHlwaE1hcHBpbmcocHJvcGVydGllcywgYnVpbHRJbkVuY29kaW5nLCBnbHlwaE5hbWVzKSB7XG4gIGNvbnN0IGNoYXJDb2RlVG9HbHlwaElkID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgbGV0IGdseXBoSWQsIGNoYXJDb2RlLCBiYXNlRW5jb2Rpbmc7XG4gIGNvbnN0IGlzU3ltYm9saWNGb250ID0gISEocHJvcGVydGllcy5mbGFncyAmIEZvbnRGbGFncy5TeW1ib2xpYyk7XG5cbiAgaWYgKHByb3BlcnRpZXMuaXNJbnRlcm5hbEZvbnQpIHtcbiAgICBiYXNlRW5jb2RpbmcgPSBidWlsdEluRW5jb2Rpbmc7XG5cbiAgICBmb3IgKGNoYXJDb2RlID0gMDsgY2hhckNvZGUgPCBiYXNlRW5jb2RpbmcubGVuZ3RoOyBjaGFyQ29kZSsrKSB7XG4gICAgICBnbHlwaElkID0gZ2x5cGhOYW1lcy5pbmRleE9mKGJhc2VFbmNvZGluZ1tjaGFyQ29kZV0pO1xuXG4gICAgICBpZiAoZ2x5cGhJZCA+PSAwKSB7XG4gICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGdseXBoSWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChwcm9wZXJ0aWVzLmJhc2VFbmNvZGluZ05hbWUpIHtcbiAgICBiYXNlRW5jb2RpbmcgPSAoMCwgX2VuY29kaW5ncy5nZXRFbmNvZGluZykocHJvcGVydGllcy5iYXNlRW5jb2RpbmdOYW1lKTtcblxuICAgIGZvciAoY2hhckNvZGUgPSAwOyBjaGFyQ29kZSA8IGJhc2VFbmNvZGluZy5sZW5ndGg7IGNoYXJDb2RlKyspIHtcbiAgICAgIGdseXBoSWQgPSBnbHlwaE5hbWVzLmluZGV4T2YoYmFzZUVuY29kaW5nW2NoYXJDb2RlXSk7XG5cbiAgICAgIGlmIChnbHlwaElkID49IDApIHtcbiAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gZ2x5cGhJZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzU3ltYm9saWNGb250KSB7XG4gICAgZm9yIChjaGFyQ29kZSBpbiBidWlsdEluRW5jb2RpbmcpIHtcbiAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGJ1aWx0SW5FbmNvZGluZ1tjaGFyQ29kZV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJhc2VFbmNvZGluZyA9IF9lbmNvZGluZ3MuU3RhbmRhcmRFbmNvZGluZztcblxuICAgIGZvciAoY2hhckNvZGUgPSAwOyBjaGFyQ29kZSA8IGJhc2VFbmNvZGluZy5sZW5ndGg7IGNoYXJDb2RlKyspIHtcbiAgICAgIGdseXBoSWQgPSBnbHlwaE5hbWVzLmluZGV4T2YoYmFzZUVuY29kaW5nW2NoYXJDb2RlXSk7XG5cbiAgICAgIGlmIChnbHlwaElkID49IDApIHtcbiAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gZ2x5cGhJZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZGlmZmVyZW5jZXMgPSBwcm9wZXJ0aWVzLmRpZmZlcmVuY2VzO1xuICBsZXQgZ2x5cGhzVW5pY29kZU1hcDtcblxuICBpZiAoZGlmZmVyZW5jZXMpIHtcbiAgICBmb3IgKGNoYXJDb2RlIGluIGRpZmZlcmVuY2VzKSB7XG4gICAgICBjb25zdCBnbHlwaE5hbWUgPSBkaWZmZXJlbmNlc1tjaGFyQ29kZV07XG4gICAgICBnbHlwaElkID0gZ2x5cGhOYW1lcy5pbmRleE9mKGdseXBoTmFtZSk7XG5cbiAgICAgIGlmIChnbHlwaElkID09PSAtMSkge1xuICAgICAgICBpZiAoIWdseXBoc1VuaWNvZGVNYXApIHtcbiAgICAgICAgICBnbHlwaHNVbmljb2RlTWFwID0gKDAsIF9nbHlwaGxpc3QuZ2V0R2x5cGhzVW5pY29kZSkoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YW5kYXJkR2x5cGhOYW1lID0gcmVjb3ZlckdseXBoTmFtZShnbHlwaE5hbWUsIGdseXBoc1VuaWNvZGVNYXApO1xuXG4gICAgICAgIGlmIChzdGFuZGFyZEdseXBoTmFtZSAhPT0gZ2x5cGhOYW1lKSB7XG4gICAgICAgICAgZ2x5cGhJZCA9IGdseXBoTmFtZXMuaW5kZXhPZihzdGFuZGFyZEdseXBoTmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGdseXBoSWQgPj0gMCkge1xuICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gPSBnbHlwaElkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hhckNvZGVUb0dseXBoSWQ7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZvbnROYW1lKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUucmVwbGFjZSgvWyxfXS9nLCBcIi1cIikucmVwbGFjZSgvXFxzL2csIFwiXCIpO1xufVxuXG4vKioqLyB9KSxcbi8qIDE5ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlphcGZEaW5nYmF0c0VuY29kaW5nID0gZXhwb3J0cy5XaW5BbnNpRW5jb2RpbmcgPSBleHBvcnRzLlN5bWJvbFNldEVuY29kaW5nID0gZXhwb3J0cy5TdGFuZGFyZEVuY29kaW5nID0gZXhwb3J0cy5NYWNSb21hbkVuY29kaW5nID0gZXhwb3J0cy5FeHBlcnRFbmNvZGluZyA9IHZvaWQgMDtcbmV4cG9ydHMuZ2V0RW5jb2RpbmcgPSBnZXRFbmNvZGluZztcbmNvbnN0IEV4cGVydEVuY29kaW5nID0gW1wiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwic3BhY2VcIiwgXCJleGNsYW1zbWFsbFwiLCBcIkh1bmdhcnVtbGF1dHNtYWxsXCIsIFwiXCIsIFwiZG9sbGFyb2xkc3R5bGVcIiwgXCJkb2xsYXJzdXBlcmlvclwiLCBcImFtcGVyc2FuZHNtYWxsXCIsIFwiQWN1dGVzbWFsbFwiLCBcInBhcmVubGVmdHN1cGVyaW9yXCIsIFwicGFyZW5yaWdodHN1cGVyaW9yXCIsIFwidHdvZG90ZW5sZWFkZXJcIiwgXCJvbmVkb3RlbmxlYWRlclwiLCBcImNvbW1hXCIsIFwiaHlwaGVuXCIsIFwicGVyaW9kXCIsIFwiZnJhY3Rpb25cIiwgXCJ6ZXJvb2xkc3R5bGVcIiwgXCJvbmVvbGRzdHlsZVwiLCBcInR3b29sZHN0eWxlXCIsIFwidGhyZWVvbGRzdHlsZVwiLCBcImZvdXJvbGRzdHlsZVwiLCBcImZpdmVvbGRzdHlsZVwiLCBcInNpeG9sZHN0eWxlXCIsIFwic2V2ZW5vbGRzdHlsZVwiLCBcImVpZ2h0b2xkc3R5bGVcIiwgXCJuaW5lb2xkc3R5bGVcIiwgXCJjb2xvblwiLCBcInNlbWljb2xvblwiLCBcImNvbW1hc3VwZXJpb3JcIiwgXCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoXCIsIFwicGVyaW9kc3VwZXJpb3JcIiwgXCJxdWVzdGlvbnNtYWxsXCIsIFwiXCIsIFwiYXN1cGVyaW9yXCIsIFwiYnN1cGVyaW9yXCIsIFwiY2VudHN1cGVyaW9yXCIsIFwiZHN1cGVyaW9yXCIsIFwiZXN1cGVyaW9yXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiaXN1cGVyaW9yXCIsIFwiXCIsIFwiXCIsIFwibHN1cGVyaW9yXCIsIFwibXN1cGVyaW9yXCIsIFwibnN1cGVyaW9yXCIsIFwib3N1cGVyaW9yXCIsIFwiXCIsIFwiXCIsIFwicnN1cGVyaW9yXCIsIFwic3N1cGVyaW9yXCIsIFwidHN1cGVyaW9yXCIsIFwiXCIsIFwiZmZcIiwgXCJmaVwiLCBcImZsXCIsIFwiZmZpXCIsIFwiZmZsXCIsIFwicGFyZW5sZWZ0aW5mZXJpb3JcIiwgXCJcIiwgXCJwYXJlbnJpZ2h0aW5mZXJpb3JcIiwgXCJDaXJjdW1mbGV4c21hbGxcIiwgXCJoeXBoZW5zdXBlcmlvclwiLCBcIkdyYXZlc21hbGxcIiwgXCJBc21hbGxcIiwgXCJCc21hbGxcIiwgXCJDc21hbGxcIiwgXCJEc21hbGxcIiwgXCJFc21hbGxcIiwgXCJGc21hbGxcIiwgXCJHc21hbGxcIiwgXCJIc21hbGxcIiwgXCJJc21hbGxcIiwgXCJKc21hbGxcIiwgXCJLc21hbGxcIiwgXCJMc21hbGxcIiwgXCJNc21hbGxcIiwgXCJOc21hbGxcIiwgXCJPc21hbGxcIiwgXCJQc21hbGxcIiwgXCJRc21hbGxcIiwgXCJSc21hbGxcIiwgXCJTc21hbGxcIiwgXCJUc21hbGxcIiwgXCJVc21hbGxcIiwgXCJWc21hbGxcIiwgXCJXc21hbGxcIiwgXCJYc21hbGxcIiwgXCJZc21hbGxcIiwgXCJac21hbGxcIiwgXCJjb2xvbm1vbmV0YXJ5XCIsIFwib25lZml0dGVkXCIsIFwicnVwaWFoXCIsIFwiVGlsZGVzbWFsbFwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcImV4Y2xhbWRvd25zbWFsbFwiLCBcImNlbnRvbGRzdHlsZVwiLCBcIkxzbGFzaHNtYWxsXCIsIFwiXCIsIFwiXCIsIFwiU2Nhcm9uc21hbGxcIiwgXCJaY2Fyb25zbWFsbFwiLCBcIkRpZXJlc2lzc21hbGxcIiwgXCJCcmV2ZXNtYWxsXCIsIFwiQ2Fyb25zbWFsbFwiLCBcIlwiLCBcIkRvdGFjY2VudHNtYWxsXCIsIFwiXCIsIFwiXCIsIFwiTWFjcm9uc21hbGxcIiwgXCJcIiwgXCJcIiwgXCJmaWd1cmVkYXNoXCIsIFwiaHlwaGVuaW5mZXJpb3JcIiwgXCJcIiwgXCJcIiwgXCJPZ29uZWtzbWFsbFwiLCBcIlJpbmdzbWFsbFwiLCBcIkNlZGlsbGFzbWFsbFwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIm9uZXF1YXJ0ZXJcIiwgXCJvbmVoYWxmXCIsIFwidGhyZWVxdWFydGVyc1wiLCBcInF1ZXN0aW9uZG93bnNtYWxsXCIsIFwib25lZWlnaHRoXCIsIFwidGhyZWVlaWdodGhzXCIsIFwiZml2ZWVpZ2h0aHNcIiwgXCJzZXZlbmVpZ2h0aHNcIiwgXCJvbmV0aGlyZFwiLCBcInR3b3RoaXJkc1wiLCBcIlwiLCBcIlwiLCBcInplcm9zdXBlcmlvclwiLCBcIm9uZXN1cGVyaW9yXCIsIFwidHdvc3VwZXJpb3JcIiwgXCJ0aHJlZXN1cGVyaW9yXCIsIFwiZm91cnN1cGVyaW9yXCIsIFwiZml2ZXN1cGVyaW9yXCIsIFwic2l4c3VwZXJpb3JcIiwgXCJzZXZlbnN1cGVyaW9yXCIsIFwiZWlnaHRzdXBlcmlvclwiLCBcIm5pbmVzdXBlcmlvclwiLCBcInplcm9pbmZlcmlvclwiLCBcIm9uZWluZmVyaW9yXCIsIFwidHdvaW5mZXJpb3JcIiwgXCJ0aHJlZWluZmVyaW9yXCIsIFwiZm91cmluZmVyaW9yXCIsIFwiZml2ZWluZmVyaW9yXCIsIFwic2l4aW5mZXJpb3JcIiwgXCJzZXZlbmluZmVyaW9yXCIsIFwiZWlnaHRpbmZlcmlvclwiLCBcIm5pbmVpbmZlcmlvclwiLCBcImNlbnRpbmZlcmlvclwiLCBcImRvbGxhcmluZmVyaW9yXCIsIFwicGVyaW9kaW5mZXJpb3JcIiwgXCJjb21tYWluZmVyaW9yXCIsIFwiQWdyYXZlc21hbGxcIiwgXCJBYWN1dGVzbWFsbFwiLCBcIkFjaXJjdW1mbGV4c21hbGxcIiwgXCJBdGlsZGVzbWFsbFwiLCBcIkFkaWVyZXNpc3NtYWxsXCIsIFwiQXJpbmdzbWFsbFwiLCBcIkFFc21hbGxcIiwgXCJDY2VkaWxsYXNtYWxsXCIsIFwiRWdyYXZlc21hbGxcIiwgXCJFYWN1dGVzbWFsbFwiLCBcIkVjaXJjdW1mbGV4c21hbGxcIiwgXCJFZGllcmVzaXNzbWFsbFwiLCBcIklncmF2ZXNtYWxsXCIsIFwiSWFjdXRlc21hbGxcIiwgXCJJY2lyY3VtZmxleHNtYWxsXCIsIFwiSWRpZXJlc2lzc21hbGxcIiwgXCJFdGhzbWFsbFwiLCBcIk50aWxkZXNtYWxsXCIsIFwiT2dyYXZlc21hbGxcIiwgXCJPYWN1dGVzbWFsbFwiLCBcIk9jaXJjdW1mbGV4c21hbGxcIiwgXCJPdGlsZGVzbWFsbFwiLCBcIk9kaWVyZXNpc3NtYWxsXCIsIFwiT0VzbWFsbFwiLCBcIk9zbGFzaHNtYWxsXCIsIFwiVWdyYXZlc21hbGxcIiwgXCJVYWN1dGVzbWFsbFwiLCBcIlVjaXJjdW1mbGV4c21hbGxcIiwgXCJVZGllcmVzaXNzbWFsbFwiLCBcIllhY3V0ZXNtYWxsXCIsIFwiVGhvcm5zbWFsbFwiLCBcIllkaWVyZXNpc3NtYWxsXCJdO1xuZXhwb3J0cy5FeHBlcnRFbmNvZGluZyA9IEV4cGVydEVuY29kaW5nO1xuY29uc3QgTWFjRXhwZXJ0RW5jb2RpbmcgPSBbXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJzcGFjZVwiLCBcImV4Y2xhbXNtYWxsXCIsIFwiSHVuZ2FydW1sYXV0c21hbGxcIiwgXCJjZW50b2xkc3R5bGVcIiwgXCJkb2xsYXJvbGRzdHlsZVwiLCBcImRvbGxhcnN1cGVyaW9yXCIsIFwiYW1wZXJzYW5kc21hbGxcIiwgXCJBY3V0ZXNtYWxsXCIsIFwicGFyZW5sZWZ0c3VwZXJpb3JcIiwgXCJwYXJlbnJpZ2h0c3VwZXJpb3JcIiwgXCJ0d29kb3RlbmxlYWRlclwiLCBcIm9uZWRvdGVubGVhZGVyXCIsIFwiY29tbWFcIiwgXCJoeXBoZW5cIiwgXCJwZXJpb2RcIiwgXCJmcmFjdGlvblwiLCBcInplcm9vbGRzdHlsZVwiLCBcIm9uZW9sZHN0eWxlXCIsIFwidHdvb2xkc3R5bGVcIiwgXCJ0aHJlZW9sZHN0eWxlXCIsIFwiZm91cm9sZHN0eWxlXCIsIFwiZml2ZW9sZHN0eWxlXCIsIFwic2l4b2xkc3R5bGVcIiwgXCJzZXZlbm9sZHN0eWxlXCIsIFwiZWlnaHRvbGRzdHlsZVwiLCBcIm5pbmVvbGRzdHlsZVwiLCBcImNvbG9uXCIsIFwic2VtaWNvbG9uXCIsIFwiXCIsIFwidGhyZWVxdWFydGVyc2VtZGFzaFwiLCBcIlwiLCBcInF1ZXN0aW9uc21hbGxcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJFdGhzbWFsbFwiLCBcIlwiLCBcIlwiLCBcIm9uZXF1YXJ0ZXJcIiwgXCJvbmVoYWxmXCIsIFwidGhyZWVxdWFydGVyc1wiLCBcIm9uZWVpZ2h0aFwiLCBcInRocmVlZWlnaHRoc1wiLCBcImZpdmVlaWdodGhzXCIsIFwic2V2ZW5laWdodGhzXCIsIFwib25ldGhpcmRcIiwgXCJ0d290aGlyZHNcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJmZlwiLCBcImZpXCIsIFwiZmxcIiwgXCJmZmlcIiwgXCJmZmxcIiwgXCJwYXJlbmxlZnRpbmZlcmlvclwiLCBcIlwiLCBcInBhcmVucmlnaHRpbmZlcmlvclwiLCBcIkNpcmN1bWZsZXhzbWFsbFwiLCBcImh5cGhlbmluZmVyaW9yXCIsIFwiR3JhdmVzbWFsbFwiLCBcIkFzbWFsbFwiLCBcIkJzbWFsbFwiLCBcIkNzbWFsbFwiLCBcIkRzbWFsbFwiLCBcIkVzbWFsbFwiLCBcIkZzbWFsbFwiLCBcIkdzbWFsbFwiLCBcIkhzbWFsbFwiLCBcIklzbWFsbFwiLCBcIkpzbWFsbFwiLCBcIktzbWFsbFwiLCBcIkxzbWFsbFwiLCBcIk1zbWFsbFwiLCBcIk5zbWFsbFwiLCBcIk9zbWFsbFwiLCBcIlBzbWFsbFwiLCBcIlFzbWFsbFwiLCBcIlJzbWFsbFwiLCBcIlNzbWFsbFwiLCBcIlRzbWFsbFwiLCBcIlVzbWFsbFwiLCBcIlZzbWFsbFwiLCBcIldzbWFsbFwiLCBcIlhzbWFsbFwiLCBcIllzbWFsbFwiLCBcIlpzbWFsbFwiLCBcImNvbG9ubW9uZXRhcnlcIiwgXCJvbmVmaXR0ZWRcIiwgXCJydXBpYWhcIiwgXCJUaWxkZXNtYWxsXCIsIFwiXCIsIFwiXCIsIFwiYXN1cGVyaW9yXCIsIFwiY2VudHN1cGVyaW9yXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiQWFjdXRlc21hbGxcIiwgXCJBZ3JhdmVzbWFsbFwiLCBcIkFjaXJjdW1mbGV4c21hbGxcIiwgXCJBZGllcmVzaXNzbWFsbFwiLCBcIkF0aWxkZXNtYWxsXCIsIFwiQXJpbmdzbWFsbFwiLCBcIkNjZWRpbGxhc21hbGxcIiwgXCJFYWN1dGVzbWFsbFwiLCBcIkVncmF2ZXNtYWxsXCIsIFwiRWNpcmN1bWZsZXhzbWFsbFwiLCBcIkVkaWVyZXNpc3NtYWxsXCIsIFwiSWFjdXRlc21hbGxcIiwgXCJJZ3JhdmVzbWFsbFwiLCBcIkljaXJjdW1mbGV4c21hbGxcIiwgXCJJZGllcmVzaXNzbWFsbFwiLCBcIk50aWxkZXNtYWxsXCIsIFwiT2FjdXRlc21hbGxcIiwgXCJPZ3JhdmVzbWFsbFwiLCBcIk9jaXJjdW1mbGV4c21hbGxcIiwgXCJPZGllcmVzaXNzbWFsbFwiLCBcIk90aWxkZXNtYWxsXCIsIFwiVWFjdXRlc21hbGxcIiwgXCJVZ3JhdmVzbWFsbFwiLCBcIlVjaXJjdW1mbGV4c21hbGxcIiwgXCJVZGllcmVzaXNzbWFsbFwiLCBcIlwiLCBcImVpZ2h0c3VwZXJpb3JcIiwgXCJmb3VyaW5mZXJpb3JcIiwgXCJ0aHJlZWluZmVyaW9yXCIsIFwic2l4aW5mZXJpb3JcIiwgXCJlaWdodGluZmVyaW9yXCIsIFwic2V2ZW5pbmZlcmlvclwiLCBcIlNjYXJvbnNtYWxsXCIsIFwiXCIsIFwiY2VudGluZmVyaW9yXCIsIFwidHdvaW5mZXJpb3JcIiwgXCJcIiwgXCJEaWVyZXNpc3NtYWxsXCIsIFwiXCIsIFwiQ2Fyb25zbWFsbFwiLCBcIm9zdXBlcmlvclwiLCBcImZpdmVpbmZlcmlvclwiLCBcIlwiLCBcImNvbW1haW5mZXJpb3JcIiwgXCJwZXJpb2RpbmZlcmlvclwiLCBcIllhY3V0ZXNtYWxsXCIsIFwiXCIsIFwiZG9sbGFyaW5mZXJpb3JcIiwgXCJcIiwgXCJcIiwgXCJUaG9ybnNtYWxsXCIsIFwiXCIsIFwibmluZWluZmVyaW9yXCIsIFwiemVyb2luZmVyaW9yXCIsIFwiWmNhcm9uc21hbGxcIiwgXCJBRXNtYWxsXCIsIFwiT3NsYXNoc21hbGxcIiwgXCJxdWVzdGlvbmRvd25zbWFsbFwiLCBcIm9uZWluZmVyaW9yXCIsIFwiTHNsYXNoc21hbGxcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJDZWRpbGxhc21hbGxcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJPRXNtYWxsXCIsIFwiZmlndXJlZGFzaFwiLCBcImh5cGhlbnN1cGVyaW9yXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiZXhjbGFtZG93bnNtYWxsXCIsIFwiXCIsIFwiWWRpZXJlc2lzc21hbGxcIiwgXCJcIiwgXCJvbmVzdXBlcmlvclwiLCBcInR3b3N1cGVyaW9yXCIsIFwidGhyZWVzdXBlcmlvclwiLCBcImZvdXJzdXBlcmlvclwiLCBcImZpdmVzdXBlcmlvclwiLCBcInNpeHN1cGVyaW9yXCIsIFwic2V2ZW5zdXBlcmlvclwiLCBcIm5pbmVzdXBlcmlvclwiLCBcInplcm9zdXBlcmlvclwiLCBcIlwiLCBcImVzdXBlcmlvclwiLCBcInJzdXBlcmlvclwiLCBcInRzdXBlcmlvclwiLCBcIlwiLCBcIlwiLCBcImlzdXBlcmlvclwiLCBcInNzdXBlcmlvclwiLCBcImRzdXBlcmlvclwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcImxzdXBlcmlvclwiLCBcIk9nb25la3NtYWxsXCIsIFwiQnJldmVzbWFsbFwiLCBcIk1hY3JvbnNtYWxsXCIsIFwiYnN1cGVyaW9yXCIsIFwibnN1cGVyaW9yXCIsIFwibXN1cGVyaW9yXCIsIFwiY29tbWFzdXBlcmlvclwiLCBcInBlcmlvZHN1cGVyaW9yXCIsIFwiRG90YWNjZW50c21hbGxcIiwgXCJSaW5nc21hbGxcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIl07XG5jb25zdCBNYWNSb21hbkVuY29kaW5nID0gW1wiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwic3BhY2VcIiwgXCJleGNsYW1cIiwgXCJxdW90ZWRibFwiLCBcIm51bWJlcnNpZ25cIiwgXCJkb2xsYXJcIiwgXCJwZXJjZW50XCIsIFwiYW1wZXJzYW5kXCIsIFwicXVvdGVzaW5nbGVcIiwgXCJwYXJlbmxlZnRcIiwgXCJwYXJlbnJpZ2h0XCIsIFwiYXN0ZXJpc2tcIiwgXCJwbHVzXCIsIFwiY29tbWFcIiwgXCJoeXBoZW5cIiwgXCJwZXJpb2RcIiwgXCJzbGFzaFwiLCBcInplcm9cIiwgXCJvbmVcIiwgXCJ0d29cIiwgXCJ0aHJlZVwiLCBcImZvdXJcIiwgXCJmaXZlXCIsIFwic2l4XCIsIFwic2V2ZW5cIiwgXCJlaWdodFwiLCBcIm5pbmVcIiwgXCJjb2xvblwiLCBcInNlbWljb2xvblwiLCBcImxlc3NcIiwgXCJlcXVhbFwiLCBcImdyZWF0ZXJcIiwgXCJxdWVzdGlvblwiLCBcImF0XCIsIFwiQVwiLCBcIkJcIiwgXCJDXCIsIFwiRFwiLCBcIkVcIiwgXCJGXCIsIFwiR1wiLCBcIkhcIiwgXCJJXCIsIFwiSlwiLCBcIktcIiwgXCJMXCIsIFwiTVwiLCBcIk5cIiwgXCJPXCIsIFwiUFwiLCBcIlFcIiwgXCJSXCIsIFwiU1wiLCBcIlRcIiwgXCJVXCIsIFwiVlwiLCBcIldcIiwgXCJYXCIsIFwiWVwiLCBcIlpcIiwgXCJicmFja2V0bGVmdFwiLCBcImJhY2tzbGFzaFwiLCBcImJyYWNrZXRyaWdodFwiLCBcImFzY2lpY2lyY3VtXCIsIFwidW5kZXJzY29yZVwiLCBcImdyYXZlXCIsIFwiYVwiLCBcImJcIiwgXCJjXCIsIFwiZFwiLCBcImVcIiwgXCJmXCIsIFwiZ1wiLCBcImhcIiwgXCJpXCIsIFwialwiLCBcImtcIiwgXCJsXCIsIFwibVwiLCBcIm5cIiwgXCJvXCIsIFwicFwiLCBcInFcIiwgXCJyXCIsIFwic1wiLCBcInRcIiwgXCJ1XCIsIFwidlwiLCBcIndcIiwgXCJ4XCIsIFwieVwiLCBcInpcIiwgXCJicmFjZWxlZnRcIiwgXCJiYXJcIiwgXCJicmFjZXJpZ2h0XCIsIFwiYXNjaWl0aWxkZVwiLCBcIlwiLCBcIkFkaWVyZXNpc1wiLCBcIkFyaW5nXCIsIFwiQ2NlZGlsbGFcIiwgXCJFYWN1dGVcIiwgXCJOdGlsZGVcIiwgXCJPZGllcmVzaXNcIiwgXCJVZGllcmVzaXNcIiwgXCJhYWN1dGVcIiwgXCJhZ3JhdmVcIiwgXCJhY2lyY3VtZmxleFwiLCBcImFkaWVyZXNpc1wiLCBcImF0aWxkZVwiLCBcImFyaW5nXCIsIFwiY2NlZGlsbGFcIiwgXCJlYWN1dGVcIiwgXCJlZ3JhdmVcIiwgXCJlY2lyY3VtZmxleFwiLCBcImVkaWVyZXNpc1wiLCBcImlhY3V0ZVwiLCBcImlncmF2ZVwiLCBcImljaXJjdW1mbGV4XCIsIFwiaWRpZXJlc2lzXCIsIFwibnRpbGRlXCIsIFwib2FjdXRlXCIsIFwib2dyYXZlXCIsIFwib2NpcmN1bWZsZXhcIiwgXCJvZGllcmVzaXNcIiwgXCJvdGlsZGVcIiwgXCJ1YWN1dGVcIiwgXCJ1Z3JhdmVcIiwgXCJ1Y2lyY3VtZmxleFwiLCBcInVkaWVyZXNpc1wiLCBcImRhZ2dlclwiLCBcImRlZ3JlZVwiLCBcImNlbnRcIiwgXCJzdGVybGluZ1wiLCBcInNlY3Rpb25cIiwgXCJidWxsZXRcIiwgXCJwYXJhZ3JhcGhcIiwgXCJnZXJtYW5kYmxzXCIsIFwicmVnaXN0ZXJlZFwiLCBcImNvcHlyaWdodFwiLCBcInRyYWRlbWFya1wiLCBcImFjdXRlXCIsIFwiZGllcmVzaXNcIiwgXCJub3RlcXVhbFwiLCBcIkFFXCIsIFwiT3NsYXNoXCIsIFwiaW5maW5pdHlcIiwgXCJwbHVzbWludXNcIiwgXCJsZXNzZXF1YWxcIiwgXCJncmVhdGVyZXF1YWxcIiwgXCJ5ZW5cIiwgXCJtdVwiLCBcInBhcnRpYWxkaWZmXCIsIFwic3VtbWF0aW9uXCIsIFwicHJvZHVjdFwiLCBcInBpXCIsIFwiaW50ZWdyYWxcIiwgXCJvcmRmZW1pbmluZVwiLCBcIm9yZG1hc2N1bGluZVwiLCBcIk9tZWdhXCIsIFwiYWVcIiwgXCJvc2xhc2hcIiwgXCJxdWVzdGlvbmRvd25cIiwgXCJleGNsYW1kb3duXCIsIFwibG9naWNhbG5vdFwiLCBcInJhZGljYWxcIiwgXCJmbG9yaW5cIiwgXCJhcHByb3hlcXVhbFwiLCBcIkRlbHRhXCIsIFwiZ3VpbGxlbW90bGVmdFwiLCBcImd1aWxsZW1vdHJpZ2h0XCIsIFwiZWxsaXBzaXNcIiwgXCJzcGFjZVwiLCBcIkFncmF2ZVwiLCBcIkF0aWxkZVwiLCBcIk90aWxkZVwiLCBcIk9FXCIsIFwib2VcIiwgXCJlbmRhc2hcIiwgXCJlbWRhc2hcIiwgXCJxdW90ZWRibGxlZnRcIiwgXCJxdW90ZWRibHJpZ2h0XCIsIFwicXVvdGVsZWZ0XCIsIFwicXVvdGVyaWdodFwiLCBcImRpdmlkZVwiLCBcImxvemVuZ2VcIiwgXCJ5ZGllcmVzaXNcIiwgXCJZZGllcmVzaXNcIiwgXCJmcmFjdGlvblwiLCBcImN1cnJlbmN5XCIsIFwiZ3VpbHNpbmdsbGVmdFwiLCBcImd1aWxzaW5nbHJpZ2h0XCIsIFwiZmlcIiwgXCJmbFwiLCBcImRhZ2dlcmRibFwiLCBcInBlcmlvZGNlbnRlcmVkXCIsIFwicXVvdGVzaW5nbGJhc2VcIiwgXCJxdW90ZWRibGJhc2VcIiwgXCJwZXJ0aG91c2FuZFwiLCBcIkFjaXJjdW1mbGV4XCIsIFwiRWNpcmN1bWZsZXhcIiwgXCJBYWN1dGVcIiwgXCJFZGllcmVzaXNcIiwgXCJFZ3JhdmVcIiwgXCJJYWN1dGVcIiwgXCJJY2lyY3VtZmxleFwiLCBcIklkaWVyZXNpc1wiLCBcIklncmF2ZVwiLCBcIk9hY3V0ZVwiLCBcIk9jaXJjdW1mbGV4XCIsIFwiYXBwbGVcIiwgXCJPZ3JhdmVcIiwgXCJVYWN1dGVcIiwgXCJVY2lyY3VtZmxleFwiLCBcIlVncmF2ZVwiLCBcImRvdGxlc3NpXCIsIFwiY2lyY3VtZmxleFwiLCBcInRpbGRlXCIsIFwibWFjcm9uXCIsIFwiYnJldmVcIiwgXCJkb3RhY2NlbnRcIiwgXCJyaW5nXCIsIFwiY2VkaWxsYVwiLCBcImh1bmdhcnVtbGF1dFwiLCBcIm9nb25la1wiLCBcImNhcm9uXCJdO1xuZXhwb3J0cy5NYWNSb21hbkVuY29kaW5nID0gTWFjUm9tYW5FbmNvZGluZztcbmNvbnN0IFN0YW5kYXJkRW5jb2RpbmcgPSBbXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJzcGFjZVwiLCBcImV4Y2xhbVwiLCBcInF1b3RlZGJsXCIsIFwibnVtYmVyc2lnblwiLCBcImRvbGxhclwiLCBcInBlcmNlbnRcIiwgXCJhbXBlcnNhbmRcIiwgXCJxdW90ZXJpZ2h0XCIsIFwicGFyZW5sZWZ0XCIsIFwicGFyZW5yaWdodFwiLCBcImFzdGVyaXNrXCIsIFwicGx1c1wiLCBcImNvbW1hXCIsIFwiaHlwaGVuXCIsIFwicGVyaW9kXCIsIFwic2xhc2hcIiwgXCJ6ZXJvXCIsIFwib25lXCIsIFwidHdvXCIsIFwidGhyZWVcIiwgXCJmb3VyXCIsIFwiZml2ZVwiLCBcInNpeFwiLCBcInNldmVuXCIsIFwiZWlnaHRcIiwgXCJuaW5lXCIsIFwiY29sb25cIiwgXCJzZW1pY29sb25cIiwgXCJsZXNzXCIsIFwiZXF1YWxcIiwgXCJncmVhdGVyXCIsIFwicXVlc3Rpb25cIiwgXCJhdFwiLCBcIkFcIiwgXCJCXCIsIFwiQ1wiLCBcIkRcIiwgXCJFXCIsIFwiRlwiLCBcIkdcIiwgXCJIXCIsIFwiSVwiLCBcIkpcIiwgXCJLXCIsIFwiTFwiLCBcIk1cIiwgXCJOXCIsIFwiT1wiLCBcIlBcIiwgXCJRXCIsIFwiUlwiLCBcIlNcIiwgXCJUXCIsIFwiVVwiLCBcIlZcIiwgXCJXXCIsIFwiWFwiLCBcIllcIiwgXCJaXCIsIFwiYnJhY2tldGxlZnRcIiwgXCJiYWNrc2xhc2hcIiwgXCJicmFja2V0cmlnaHRcIiwgXCJhc2NpaWNpcmN1bVwiLCBcInVuZGVyc2NvcmVcIiwgXCJxdW90ZWxlZnRcIiwgXCJhXCIsIFwiYlwiLCBcImNcIiwgXCJkXCIsIFwiZVwiLCBcImZcIiwgXCJnXCIsIFwiaFwiLCBcImlcIiwgXCJqXCIsIFwia1wiLCBcImxcIiwgXCJtXCIsIFwiblwiLCBcIm9cIiwgXCJwXCIsIFwicVwiLCBcInJcIiwgXCJzXCIsIFwidFwiLCBcInVcIiwgXCJ2XCIsIFwid1wiLCBcInhcIiwgXCJ5XCIsIFwielwiLCBcImJyYWNlbGVmdFwiLCBcImJhclwiLCBcImJyYWNlcmlnaHRcIiwgXCJhc2NpaXRpbGRlXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiZXhjbGFtZG93blwiLCBcImNlbnRcIiwgXCJzdGVybGluZ1wiLCBcImZyYWN0aW9uXCIsIFwieWVuXCIsIFwiZmxvcmluXCIsIFwic2VjdGlvblwiLCBcImN1cnJlbmN5XCIsIFwicXVvdGVzaW5nbGVcIiwgXCJxdW90ZWRibGxlZnRcIiwgXCJndWlsbGVtb3RsZWZ0XCIsIFwiZ3VpbHNpbmdsbGVmdFwiLCBcImd1aWxzaW5nbHJpZ2h0XCIsIFwiZmlcIiwgXCJmbFwiLCBcIlwiLCBcImVuZGFzaFwiLCBcImRhZ2dlclwiLCBcImRhZ2dlcmRibFwiLCBcInBlcmlvZGNlbnRlcmVkXCIsIFwiXCIsIFwicGFyYWdyYXBoXCIsIFwiYnVsbGV0XCIsIFwicXVvdGVzaW5nbGJhc2VcIiwgXCJxdW90ZWRibGJhc2VcIiwgXCJxdW90ZWRibHJpZ2h0XCIsIFwiZ3VpbGxlbW90cmlnaHRcIiwgXCJlbGxpcHNpc1wiLCBcInBlcnRob3VzYW5kXCIsIFwiXCIsIFwicXVlc3Rpb25kb3duXCIsIFwiXCIsIFwiZ3JhdmVcIiwgXCJhY3V0ZVwiLCBcImNpcmN1bWZsZXhcIiwgXCJ0aWxkZVwiLCBcIm1hY3JvblwiLCBcImJyZXZlXCIsIFwiZG90YWNjZW50XCIsIFwiZGllcmVzaXNcIiwgXCJcIiwgXCJyaW5nXCIsIFwiY2VkaWxsYVwiLCBcIlwiLCBcImh1bmdhcnVtbGF1dFwiLCBcIm9nb25la1wiLCBcImNhcm9uXCIsIFwiZW1kYXNoXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiQUVcIiwgXCJcIiwgXCJvcmRmZW1pbmluZVwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIkxzbGFzaFwiLCBcIk9zbGFzaFwiLCBcIk9FXCIsIFwib3JkbWFzY3VsaW5lXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiYWVcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJkb3RsZXNzaVwiLCBcIlwiLCBcIlwiLCBcImxzbGFzaFwiLCBcIm9zbGFzaFwiLCBcIm9lXCIsIFwiZ2VybWFuZGJsc1wiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiXTtcbmV4cG9ydHMuU3RhbmRhcmRFbmNvZGluZyA9IFN0YW5kYXJkRW5jb2Rpbmc7XG5jb25zdCBXaW5BbnNpRW5jb2RpbmcgPSBbXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJzcGFjZVwiLCBcImV4Y2xhbVwiLCBcInF1b3RlZGJsXCIsIFwibnVtYmVyc2lnblwiLCBcImRvbGxhclwiLCBcInBlcmNlbnRcIiwgXCJhbXBlcnNhbmRcIiwgXCJxdW90ZXNpbmdsZVwiLCBcInBhcmVubGVmdFwiLCBcInBhcmVucmlnaHRcIiwgXCJhc3Rlcmlza1wiLCBcInBsdXNcIiwgXCJjb21tYVwiLCBcImh5cGhlblwiLCBcInBlcmlvZFwiLCBcInNsYXNoXCIsIFwiemVyb1wiLCBcIm9uZVwiLCBcInR3b1wiLCBcInRocmVlXCIsIFwiZm91clwiLCBcImZpdmVcIiwgXCJzaXhcIiwgXCJzZXZlblwiLCBcImVpZ2h0XCIsIFwibmluZVwiLCBcImNvbG9uXCIsIFwic2VtaWNvbG9uXCIsIFwibGVzc1wiLCBcImVxdWFsXCIsIFwiZ3JlYXRlclwiLCBcInF1ZXN0aW9uXCIsIFwiYXRcIiwgXCJBXCIsIFwiQlwiLCBcIkNcIiwgXCJEXCIsIFwiRVwiLCBcIkZcIiwgXCJHXCIsIFwiSFwiLCBcIklcIiwgXCJKXCIsIFwiS1wiLCBcIkxcIiwgXCJNXCIsIFwiTlwiLCBcIk9cIiwgXCJQXCIsIFwiUVwiLCBcIlJcIiwgXCJTXCIsIFwiVFwiLCBcIlVcIiwgXCJWXCIsIFwiV1wiLCBcIlhcIiwgXCJZXCIsIFwiWlwiLCBcImJyYWNrZXRsZWZ0XCIsIFwiYmFja3NsYXNoXCIsIFwiYnJhY2tldHJpZ2h0XCIsIFwiYXNjaWljaXJjdW1cIiwgXCJ1bmRlcnNjb3JlXCIsIFwiZ3JhdmVcIiwgXCJhXCIsIFwiYlwiLCBcImNcIiwgXCJkXCIsIFwiZVwiLCBcImZcIiwgXCJnXCIsIFwiaFwiLCBcImlcIiwgXCJqXCIsIFwia1wiLCBcImxcIiwgXCJtXCIsIFwiblwiLCBcIm9cIiwgXCJwXCIsIFwicVwiLCBcInJcIiwgXCJzXCIsIFwidFwiLCBcInVcIiwgXCJ2XCIsIFwid1wiLCBcInhcIiwgXCJ5XCIsIFwielwiLCBcImJyYWNlbGVmdFwiLCBcImJhclwiLCBcImJyYWNlcmlnaHRcIiwgXCJhc2NpaXRpbGRlXCIsIFwiYnVsbGV0XCIsIFwiRXVyb1wiLCBcImJ1bGxldFwiLCBcInF1b3Rlc2luZ2xiYXNlXCIsIFwiZmxvcmluXCIsIFwicXVvdGVkYmxiYXNlXCIsIFwiZWxsaXBzaXNcIiwgXCJkYWdnZXJcIiwgXCJkYWdnZXJkYmxcIiwgXCJjaXJjdW1mbGV4XCIsIFwicGVydGhvdXNhbmRcIiwgXCJTY2Fyb25cIiwgXCJndWlsc2luZ2xsZWZ0XCIsIFwiT0VcIiwgXCJidWxsZXRcIiwgXCJaY2Fyb25cIiwgXCJidWxsZXRcIiwgXCJidWxsZXRcIiwgXCJxdW90ZWxlZnRcIiwgXCJxdW90ZXJpZ2h0XCIsIFwicXVvdGVkYmxsZWZ0XCIsIFwicXVvdGVkYmxyaWdodFwiLCBcImJ1bGxldFwiLCBcImVuZGFzaFwiLCBcImVtZGFzaFwiLCBcInRpbGRlXCIsIFwidHJhZGVtYXJrXCIsIFwic2Nhcm9uXCIsIFwiZ3VpbHNpbmdscmlnaHRcIiwgXCJvZVwiLCBcImJ1bGxldFwiLCBcInpjYXJvblwiLCBcIllkaWVyZXNpc1wiLCBcInNwYWNlXCIsIFwiZXhjbGFtZG93blwiLCBcImNlbnRcIiwgXCJzdGVybGluZ1wiLCBcImN1cnJlbmN5XCIsIFwieWVuXCIsIFwiYnJva2VuYmFyXCIsIFwic2VjdGlvblwiLCBcImRpZXJlc2lzXCIsIFwiY29weXJpZ2h0XCIsIFwib3JkZmVtaW5pbmVcIiwgXCJndWlsbGVtb3RsZWZ0XCIsIFwibG9naWNhbG5vdFwiLCBcImh5cGhlblwiLCBcInJlZ2lzdGVyZWRcIiwgXCJtYWNyb25cIiwgXCJkZWdyZWVcIiwgXCJwbHVzbWludXNcIiwgXCJ0d29zdXBlcmlvclwiLCBcInRocmVlc3VwZXJpb3JcIiwgXCJhY3V0ZVwiLCBcIm11XCIsIFwicGFyYWdyYXBoXCIsIFwicGVyaW9kY2VudGVyZWRcIiwgXCJjZWRpbGxhXCIsIFwib25lc3VwZXJpb3JcIiwgXCJvcmRtYXNjdWxpbmVcIiwgXCJndWlsbGVtb3RyaWdodFwiLCBcIm9uZXF1YXJ0ZXJcIiwgXCJvbmVoYWxmXCIsIFwidGhyZWVxdWFydGVyc1wiLCBcInF1ZXN0aW9uZG93blwiLCBcIkFncmF2ZVwiLCBcIkFhY3V0ZVwiLCBcIkFjaXJjdW1mbGV4XCIsIFwiQXRpbGRlXCIsIFwiQWRpZXJlc2lzXCIsIFwiQXJpbmdcIiwgXCJBRVwiLCBcIkNjZWRpbGxhXCIsIFwiRWdyYXZlXCIsIFwiRWFjdXRlXCIsIFwiRWNpcmN1bWZsZXhcIiwgXCJFZGllcmVzaXNcIiwgXCJJZ3JhdmVcIiwgXCJJYWN1dGVcIiwgXCJJY2lyY3VtZmxleFwiLCBcIklkaWVyZXNpc1wiLCBcIkV0aFwiLCBcIk50aWxkZVwiLCBcIk9ncmF2ZVwiLCBcIk9hY3V0ZVwiLCBcIk9jaXJjdW1mbGV4XCIsIFwiT3RpbGRlXCIsIFwiT2RpZXJlc2lzXCIsIFwibXVsdGlwbHlcIiwgXCJPc2xhc2hcIiwgXCJVZ3JhdmVcIiwgXCJVYWN1dGVcIiwgXCJVY2lyY3VtZmxleFwiLCBcIlVkaWVyZXNpc1wiLCBcIllhY3V0ZVwiLCBcIlRob3JuXCIsIFwiZ2VybWFuZGJsc1wiLCBcImFncmF2ZVwiLCBcImFhY3V0ZVwiLCBcImFjaXJjdW1mbGV4XCIsIFwiYXRpbGRlXCIsIFwiYWRpZXJlc2lzXCIsIFwiYXJpbmdcIiwgXCJhZVwiLCBcImNjZWRpbGxhXCIsIFwiZWdyYXZlXCIsIFwiZWFjdXRlXCIsIFwiZWNpcmN1bWZsZXhcIiwgXCJlZGllcmVzaXNcIiwgXCJpZ3JhdmVcIiwgXCJpYWN1dGVcIiwgXCJpY2lyY3VtZmxleFwiLCBcImlkaWVyZXNpc1wiLCBcImV0aFwiLCBcIm50aWxkZVwiLCBcIm9ncmF2ZVwiLCBcIm9hY3V0ZVwiLCBcIm9jaXJjdW1mbGV4XCIsIFwib3RpbGRlXCIsIFwib2RpZXJlc2lzXCIsIFwiZGl2aWRlXCIsIFwib3NsYXNoXCIsIFwidWdyYXZlXCIsIFwidWFjdXRlXCIsIFwidWNpcmN1bWZsZXhcIiwgXCJ1ZGllcmVzaXNcIiwgXCJ5YWN1dGVcIiwgXCJ0aG9yblwiLCBcInlkaWVyZXNpc1wiXTtcbmV4cG9ydHMuV2luQW5zaUVuY29kaW5nID0gV2luQW5zaUVuY29kaW5nO1xuY29uc3QgU3ltYm9sU2V0RW5jb2RpbmcgPSBbXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJzcGFjZVwiLCBcImV4Y2xhbVwiLCBcInVuaXZlcnNhbFwiLCBcIm51bWJlcnNpZ25cIiwgXCJleGlzdGVudGlhbFwiLCBcInBlcmNlbnRcIiwgXCJhbXBlcnNhbmRcIiwgXCJzdWNodGhhdFwiLCBcInBhcmVubGVmdFwiLCBcInBhcmVucmlnaHRcIiwgXCJhc3Rlcmlza21hdGhcIiwgXCJwbHVzXCIsIFwiY29tbWFcIiwgXCJtaW51c1wiLCBcInBlcmlvZFwiLCBcInNsYXNoXCIsIFwiemVyb1wiLCBcIm9uZVwiLCBcInR3b1wiLCBcInRocmVlXCIsIFwiZm91clwiLCBcImZpdmVcIiwgXCJzaXhcIiwgXCJzZXZlblwiLCBcImVpZ2h0XCIsIFwibmluZVwiLCBcImNvbG9uXCIsIFwic2VtaWNvbG9uXCIsIFwibGVzc1wiLCBcImVxdWFsXCIsIFwiZ3JlYXRlclwiLCBcInF1ZXN0aW9uXCIsIFwiY29uZ3J1ZW50XCIsIFwiQWxwaGFcIiwgXCJCZXRhXCIsIFwiQ2hpXCIsIFwiRGVsdGFcIiwgXCJFcHNpbG9uXCIsIFwiUGhpXCIsIFwiR2FtbWFcIiwgXCJFdGFcIiwgXCJJb3RhXCIsIFwidGhldGExXCIsIFwiS2FwcGFcIiwgXCJMYW1iZGFcIiwgXCJNdVwiLCBcIk51XCIsIFwiT21pY3JvblwiLCBcIlBpXCIsIFwiVGhldGFcIiwgXCJSaG9cIiwgXCJTaWdtYVwiLCBcIlRhdVwiLCBcIlVwc2lsb25cIiwgXCJzaWdtYTFcIiwgXCJPbWVnYVwiLCBcIlhpXCIsIFwiUHNpXCIsIFwiWmV0YVwiLCBcImJyYWNrZXRsZWZ0XCIsIFwidGhlcmVmb3JlXCIsIFwiYnJhY2tldHJpZ2h0XCIsIFwicGVycGVuZGljdWxhclwiLCBcInVuZGVyc2NvcmVcIiwgXCJyYWRpY2FsZXhcIiwgXCJhbHBoYVwiLCBcImJldGFcIiwgXCJjaGlcIiwgXCJkZWx0YVwiLCBcImVwc2lsb25cIiwgXCJwaGlcIiwgXCJnYW1tYVwiLCBcImV0YVwiLCBcImlvdGFcIiwgXCJwaGkxXCIsIFwia2FwcGFcIiwgXCJsYW1iZGFcIiwgXCJtdVwiLCBcIm51XCIsIFwib21pY3JvblwiLCBcInBpXCIsIFwidGhldGFcIiwgXCJyaG9cIiwgXCJzaWdtYVwiLCBcInRhdVwiLCBcInVwc2lsb25cIiwgXCJvbWVnYTFcIiwgXCJvbWVnYVwiLCBcInhpXCIsIFwicHNpXCIsIFwiemV0YVwiLCBcImJyYWNlbGVmdFwiLCBcImJhclwiLCBcImJyYWNlcmlnaHRcIiwgXCJzaW1pbGFyXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiRXVyb1wiLCBcIlVwc2lsb24xXCIsIFwibWludXRlXCIsIFwibGVzc2VxdWFsXCIsIFwiZnJhY3Rpb25cIiwgXCJpbmZpbml0eVwiLCBcImZsb3JpblwiLCBcImNsdWJcIiwgXCJkaWFtb25kXCIsIFwiaGVhcnRcIiwgXCJzcGFkZVwiLCBcImFycm93Ym90aFwiLCBcImFycm93bGVmdFwiLCBcImFycm93dXBcIiwgXCJhcnJvd3JpZ2h0XCIsIFwiYXJyb3dkb3duXCIsIFwiZGVncmVlXCIsIFwicGx1c21pbnVzXCIsIFwic2Vjb25kXCIsIFwiZ3JlYXRlcmVxdWFsXCIsIFwibXVsdGlwbHlcIiwgXCJwcm9wb3J0aW9uYWxcIiwgXCJwYXJ0aWFsZGlmZlwiLCBcImJ1bGxldFwiLCBcImRpdmlkZVwiLCBcIm5vdGVxdWFsXCIsIFwiZXF1aXZhbGVuY2VcIiwgXCJhcHByb3hlcXVhbFwiLCBcImVsbGlwc2lzXCIsIFwiYXJyb3d2ZXJ0ZXhcIiwgXCJhcnJvd2hvcml6ZXhcIiwgXCJjYXJyaWFnZXJldHVyblwiLCBcImFsZXBoXCIsIFwiSWZyYWt0dXJcIiwgXCJSZnJha3R1clwiLCBcIndlaWVyc3RyYXNzXCIsIFwiY2lyY2xlbXVsdGlwbHlcIiwgXCJjaXJjbGVwbHVzXCIsIFwiZW1wdHlzZXRcIiwgXCJpbnRlcnNlY3Rpb25cIiwgXCJ1bmlvblwiLCBcInByb3BlcnN1cGVyc2V0XCIsIFwicmVmbGV4c3VwZXJzZXRcIiwgXCJub3RzdWJzZXRcIiwgXCJwcm9wZXJzdWJzZXRcIiwgXCJyZWZsZXhzdWJzZXRcIiwgXCJlbGVtZW50XCIsIFwibm90ZWxlbWVudFwiLCBcImFuZ2xlXCIsIFwiZ3JhZGllbnRcIiwgXCJyZWdpc3RlcnNlcmlmXCIsIFwiY29weXJpZ2h0c2VyaWZcIiwgXCJ0cmFkZW1hcmtzZXJpZlwiLCBcInByb2R1Y3RcIiwgXCJyYWRpY2FsXCIsIFwiZG90bWF0aFwiLCBcImxvZ2ljYWxub3RcIiwgXCJsb2dpY2FsYW5kXCIsIFwibG9naWNhbG9yXCIsIFwiYXJyb3dkYmxib3RoXCIsIFwiYXJyb3dkYmxsZWZ0XCIsIFwiYXJyb3dkYmx1cFwiLCBcImFycm93ZGJscmlnaHRcIiwgXCJhcnJvd2RibGRvd25cIiwgXCJsb3plbmdlXCIsIFwiYW5nbGVsZWZ0XCIsIFwicmVnaXN0ZXJzYW5zXCIsIFwiY29weXJpZ2h0c2Fuc1wiLCBcInRyYWRlbWFya3NhbnNcIiwgXCJzdW1tYXRpb25cIiwgXCJwYXJlbmxlZnR0cFwiLCBcInBhcmVubGVmdGV4XCIsIFwicGFyZW5sZWZ0YnRcIiwgXCJicmFja2V0bGVmdHRwXCIsIFwiYnJhY2tldGxlZnRleFwiLCBcImJyYWNrZXRsZWZ0YnRcIiwgXCJicmFjZWxlZnR0cFwiLCBcImJyYWNlbGVmdG1pZFwiLCBcImJyYWNlbGVmdGJ0XCIsIFwiYnJhY2VleFwiLCBcIlwiLCBcImFuZ2xlcmlnaHRcIiwgXCJpbnRlZ3JhbFwiLCBcImludGVncmFsdHBcIiwgXCJpbnRlZ3JhbGV4XCIsIFwiaW50ZWdyYWxidFwiLCBcInBhcmVucmlnaHR0cFwiLCBcInBhcmVucmlnaHRleFwiLCBcInBhcmVucmlnaHRidFwiLCBcImJyYWNrZXRyaWdodHRwXCIsIFwiYnJhY2tldHJpZ2h0ZXhcIiwgXCJicmFja2V0cmlnaHRidFwiLCBcImJyYWNlcmlnaHR0cFwiLCBcImJyYWNlcmlnaHRtaWRcIiwgXCJicmFjZXJpZ2h0YnRcIiwgXCJcIl07XG5leHBvcnRzLlN5bWJvbFNldEVuY29kaW5nID0gU3ltYm9sU2V0RW5jb2Rpbmc7XG5jb25zdCBaYXBmRGluZ2JhdHNFbmNvZGluZyA9IFtcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcInNwYWNlXCIsIFwiYTFcIiwgXCJhMlwiLCBcImEyMDJcIiwgXCJhM1wiLCBcImE0XCIsIFwiYTVcIiwgXCJhMTE5XCIsIFwiYTExOFwiLCBcImExMTdcIiwgXCJhMTFcIiwgXCJhMTJcIiwgXCJhMTNcIiwgXCJhMTRcIiwgXCJhMTVcIiwgXCJhMTZcIiwgXCJhMTA1XCIsIFwiYTE3XCIsIFwiYTE4XCIsIFwiYTE5XCIsIFwiYTIwXCIsIFwiYTIxXCIsIFwiYTIyXCIsIFwiYTIzXCIsIFwiYTI0XCIsIFwiYTI1XCIsIFwiYTI2XCIsIFwiYTI3XCIsIFwiYTI4XCIsIFwiYTZcIiwgXCJhN1wiLCBcImE4XCIsIFwiYTlcIiwgXCJhMTBcIiwgXCJhMjlcIiwgXCJhMzBcIiwgXCJhMzFcIiwgXCJhMzJcIiwgXCJhMzNcIiwgXCJhMzRcIiwgXCJhMzVcIiwgXCJhMzZcIiwgXCJhMzdcIiwgXCJhMzhcIiwgXCJhMzlcIiwgXCJhNDBcIiwgXCJhNDFcIiwgXCJhNDJcIiwgXCJhNDNcIiwgXCJhNDRcIiwgXCJhNDVcIiwgXCJhNDZcIiwgXCJhNDdcIiwgXCJhNDhcIiwgXCJhNDlcIiwgXCJhNTBcIiwgXCJhNTFcIiwgXCJhNTJcIiwgXCJhNTNcIiwgXCJhNTRcIiwgXCJhNTVcIiwgXCJhNTZcIiwgXCJhNTdcIiwgXCJhNThcIiwgXCJhNTlcIiwgXCJhNjBcIiwgXCJhNjFcIiwgXCJhNjJcIiwgXCJhNjNcIiwgXCJhNjRcIiwgXCJhNjVcIiwgXCJhNjZcIiwgXCJhNjdcIiwgXCJhNjhcIiwgXCJhNjlcIiwgXCJhNzBcIiwgXCJhNzFcIiwgXCJhNzJcIiwgXCJhNzNcIiwgXCJhNzRcIiwgXCJhMjAzXCIsIFwiYTc1XCIsIFwiYTIwNFwiLCBcImE3NlwiLCBcImE3N1wiLCBcImE3OFwiLCBcImE3OVwiLCBcImE4MVwiLCBcImE4MlwiLCBcImE4M1wiLCBcImE4NFwiLCBcImE5N1wiLCBcImE5OFwiLCBcImE5OVwiLCBcImExMDBcIiwgXCJcIiwgXCJhODlcIiwgXCJhOTBcIiwgXCJhOTNcIiwgXCJhOTRcIiwgXCJhOTFcIiwgXCJhOTJcIiwgXCJhMjA1XCIsIFwiYTg1XCIsIFwiYTIwNlwiLCBcImE4NlwiLCBcImE4N1wiLCBcImE4OFwiLCBcImE5NVwiLCBcImE5NlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcImExMDFcIiwgXCJhMTAyXCIsIFwiYTEwM1wiLCBcImExMDRcIiwgXCJhMTA2XCIsIFwiYTEwN1wiLCBcImExMDhcIiwgXCJhMTEyXCIsIFwiYTExMVwiLCBcImExMTBcIiwgXCJhMTA5XCIsIFwiYTEyMFwiLCBcImExMjFcIiwgXCJhMTIyXCIsIFwiYTEyM1wiLCBcImExMjRcIiwgXCJhMTI1XCIsIFwiYTEyNlwiLCBcImExMjdcIiwgXCJhMTI4XCIsIFwiYTEyOVwiLCBcImExMzBcIiwgXCJhMTMxXCIsIFwiYTEzMlwiLCBcImExMzNcIiwgXCJhMTM0XCIsIFwiYTEzNVwiLCBcImExMzZcIiwgXCJhMTM3XCIsIFwiYTEzOFwiLCBcImExMzlcIiwgXCJhMTQwXCIsIFwiYTE0MVwiLCBcImExNDJcIiwgXCJhMTQzXCIsIFwiYTE0NFwiLCBcImExNDVcIiwgXCJhMTQ2XCIsIFwiYTE0N1wiLCBcImExNDhcIiwgXCJhMTQ5XCIsIFwiYTE1MFwiLCBcImExNTFcIiwgXCJhMTUyXCIsIFwiYTE1M1wiLCBcImExNTRcIiwgXCJhMTU1XCIsIFwiYTE1NlwiLCBcImExNTdcIiwgXCJhMTU4XCIsIFwiYTE1OVwiLCBcImExNjBcIiwgXCJhMTYxXCIsIFwiYTE2M1wiLCBcImExNjRcIiwgXCJhMTk2XCIsIFwiYTE2NVwiLCBcImExOTJcIiwgXCJhMTY2XCIsIFwiYTE2N1wiLCBcImExNjhcIiwgXCJhMTY5XCIsIFwiYTE3MFwiLCBcImExNzFcIiwgXCJhMTcyXCIsIFwiYTE3M1wiLCBcImExNjJcIiwgXCJhMTc0XCIsIFwiYTE3NVwiLCBcImExNzZcIiwgXCJhMTc3XCIsIFwiYTE3OFwiLCBcImExNzlcIiwgXCJhMTkzXCIsIFwiYTE4MFwiLCBcImExOTlcIiwgXCJhMTgxXCIsIFwiYTIwMFwiLCBcImExODJcIiwgXCJcIiwgXCJhMjAxXCIsIFwiYTE4M1wiLCBcImExODRcIiwgXCJhMTk3XCIsIFwiYTE4NVwiLCBcImExOTRcIiwgXCJhMTk4XCIsIFwiYTE4NlwiLCBcImExOTVcIiwgXCJhMTg3XCIsIFwiYTE4OFwiLCBcImExODlcIiwgXCJhMTkwXCIsIFwiYTE5MVwiLCBcIlwiXTtcbmV4cG9ydHMuWmFwZkRpbmdiYXRzRW5jb2RpbmcgPSBaYXBmRGluZ2JhdHNFbmNvZGluZztcblxuZnVuY3Rpb24gZ2V0RW5jb2RpbmcoZW5jb2RpbmdOYW1lKSB7XG4gIHN3aXRjaCAoZW5jb2RpbmdOYW1lKSB7XG4gICAgY2FzZSBcIldpbkFuc2lFbmNvZGluZ1wiOlxuICAgICAgcmV0dXJuIFdpbkFuc2lFbmNvZGluZztcblxuICAgIGNhc2UgXCJTdGFuZGFyZEVuY29kaW5nXCI6XG4gICAgICByZXR1cm4gU3RhbmRhcmRFbmNvZGluZztcblxuICAgIGNhc2UgXCJNYWNSb21hbkVuY29kaW5nXCI6XG4gICAgICByZXR1cm4gTWFjUm9tYW5FbmNvZGluZztcblxuICAgIGNhc2UgXCJTeW1ib2xTZXRFbmNvZGluZ1wiOlxuICAgICAgcmV0dXJuIFN5bWJvbFNldEVuY29kaW5nO1xuXG4gICAgY2FzZSBcIlphcGZEaW5nYmF0c0VuY29kaW5nXCI6XG4gICAgICByZXR1cm4gWmFwZkRpbmdiYXRzRW5jb2Rpbmc7XG5cbiAgICBjYXNlIFwiRXhwZXJ0RW5jb2RpbmdcIjpcbiAgICAgIHJldHVybiBFeHBlcnRFbmNvZGluZztcblxuICAgIGNhc2UgXCJNYWNFeHBlcnRFbmNvZGluZ1wiOlxuICAgICAgcmV0dXJuIE1hY0V4cGVydEVuY29kaW5nO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKiovIH0pLFxuLyogMjAgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuX193X3BkZmpzX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKi8gX193X3BkZmpzX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIHtcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXCJnZXREaW5nYmF0c0dseXBoc1VuaWNvZGVcIjogKCkgPT4gKC8qIGJpbmRpbmcgKi8gZ2V0RGluZ2JhdHNHbHlwaHNVbmljb2RlKSxcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXCJnZXRHbHlwaHNVbmljb2RlXCI6ICgpID0+ICgvKiBiaW5kaW5nICovIGdldEdseXBoc1VuaWNvZGUpXG4vKiBoYXJtb255IGV4cG9ydCAqLyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29yZV91dGlsc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193X3BkZmpzX3JlcXVpcmVfXyg5KTtcblxuY29uc3QgZ2V0R2x5cGhzVW5pY29kZSA9ICgwLF9jb3JlX3V0aWxzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18uZ2V0QXJyYXlMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICgpIHtcbiByZXR1cm4gW1xuICBcIkFcIixcbiAgMHgwMDQxLFxuICBcIkFFXCIsXG4gIDB4MDBjNixcbiAgXCJBRWFjdXRlXCIsXG4gIDB4MDFmYyxcbiAgXCJBRW1hY3JvblwiLFxuICAweDAxZTIsXG4gIFwiQUVzbWFsbFwiLFxuICAweGY3ZTYsXG4gIFwiQWFjdXRlXCIsXG4gIDB4MDBjMSxcbiAgXCJBYWN1dGVzbWFsbFwiLFxuICAweGY3ZTEsXG4gIFwiQWJyZXZlXCIsXG4gIDB4MDEwMixcbiAgXCJBYnJldmVhY3V0ZVwiLFxuICAweDFlYWUsXG4gIFwiQWJyZXZlY3lyaWxsaWNcIixcbiAgMHgwNGQwLFxuICBcIkFicmV2ZWRvdGJlbG93XCIsXG4gIDB4MWViNixcbiAgXCJBYnJldmVncmF2ZVwiLFxuICAweDFlYjAsXG4gIFwiQWJyZXZlaG9va2Fib3ZlXCIsXG4gIDB4MWViMixcbiAgXCJBYnJldmV0aWxkZVwiLFxuICAweDFlYjQsXG4gIFwiQWNhcm9uXCIsXG4gIDB4MDFjZCxcbiAgXCJBY2lyY2xlXCIsXG4gIDB4MjRiNixcbiAgXCJBY2lyY3VtZmxleFwiLFxuICAweDAwYzIsXG4gIFwiQWNpcmN1bWZsZXhhY3V0ZVwiLFxuICAweDFlYTQsXG4gIFwiQWNpcmN1bWZsZXhkb3RiZWxvd1wiLFxuICAweDFlYWMsXG4gIFwiQWNpcmN1bWZsZXhncmF2ZVwiLFxuICAweDFlYTYsXG4gIFwiQWNpcmN1bWZsZXhob29rYWJvdmVcIixcbiAgMHgxZWE4LFxuICBcIkFjaXJjdW1mbGV4c21hbGxcIixcbiAgMHhmN2UyLFxuICBcIkFjaXJjdW1mbGV4dGlsZGVcIixcbiAgMHgxZWFhLFxuICBcIkFjdXRlXCIsXG4gIDB4ZjZjOSxcbiAgXCJBY3V0ZXNtYWxsXCIsXG4gIDB4ZjdiNCxcbiAgXCJBY3lyaWxsaWNcIixcbiAgMHgwNDEwLFxuICBcIkFkYmxncmF2ZVwiLFxuICAweDAyMDAsXG4gIFwiQWRpZXJlc2lzXCIsXG4gIDB4MDBjNCxcbiAgXCJBZGllcmVzaXNjeXJpbGxpY1wiLFxuICAweDA0ZDIsXG4gIFwiQWRpZXJlc2lzbWFjcm9uXCIsXG4gIDB4MDFkZSxcbiAgXCJBZGllcmVzaXNzbWFsbFwiLFxuICAweGY3ZTQsXG4gIFwiQWRvdGJlbG93XCIsXG4gIDB4MWVhMCxcbiAgXCJBZG90bWFjcm9uXCIsXG4gIDB4MDFlMCxcbiAgXCJBZ3JhdmVcIixcbiAgMHgwMGMwLFxuICBcIkFncmF2ZXNtYWxsXCIsXG4gIDB4ZjdlMCxcbiAgXCJBaG9va2Fib3ZlXCIsXG4gIDB4MWVhMixcbiAgXCJBaWVjeXJpbGxpY1wiLFxuICAweDA0ZDQsXG4gIFwiQWludmVydGVkYnJldmVcIixcbiAgMHgwMjAyLFxuICBcIkFscGhhXCIsXG4gIDB4MDM5MSxcbiAgXCJBbHBoYXRvbm9zXCIsXG4gIDB4MDM4NixcbiAgXCJBbWFjcm9uXCIsXG4gIDB4MDEwMCxcbiAgXCJBbW9ub3NwYWNlXCIsXG4gIDB4ZmYyMSxcbiAgXCJBb2dvbmVrXCIsXG4gIDB4MDEwNCxcbiAgXCJBcmluZ1wiLFxuICAweDAwYzUsXG4gIFwiQXJpbmdhY3V0ZVwiLFxuICAweDAxZmEsXG4gIFwiQXJpbmdiZWxvd1wiLFxuICAweDFlMDAsXG4gIFwiQXJpbmdzbWFsbFwiLFxuICAweGY3ZTUsXG4gIFwiQXNtYWxsXCIsXG4gIDB4Zjc2MSxcbiAgXCJBdGlsZGVcIixcbiAgMHgwMGMzLFxuICBcIkF0aWxkZXNtYWxsXCIsXG4gIDB4ZjdlMyxcbiAgXCJBeWJhcm1lbmlhblwiLFxuICAweDA1MzEsXG4gIFwiQlwiLFxuICAweDAwNDIsXG4gIFwiQmNpcmNsZVwiLFxuICAweDI0YjcsXG4gIFwiQmRvdGFjY2VudFwiLFxuICAweDFlMDIsXG4gIFwiQmRvdGJlbG93XCIsXG4gIDB4MWUwNCxcbiAgXCJCZWN5cmlsbGljXCIsXG4gIDB4MDQxMSxcbiAgXCJCZW5hcm1lbmlhblwiLFxuICAweDA1MzIsXG4gIFwiQmV0YVwiLFxuICAweDAzOTIsXG4gIFwiQmhvb2tcIixcbiAgMHgwMTgxLFxuICBcIkJsaW5lYmVsb3dcIixcbiAgMHgxZTA2LFxuICBcIkJtb25vc3BhY2VcIixcbiAgMHhmZjIyLFxuICBcIkJyZXZlc21hbGxcIixcbiAgMHhmNmY0LFxuICBcIkJzbWFsbFwiLFxuICAweGY3NjIsXG4gIFwiQnRvcGJhclwiLFxuICAweDAxODIsXG4gIFwiQ1wiLFxuICAweDAwNDMsXG4gIFwiQ2Fhcm1lbmlhblwiLFxuICAweDA1M2UsXG4gIFwiQ2FjdXRlXCIsXG4gIDB4MDEwNixcbiAgXCJDYXJvblwiLFxuICAweGY2Y2EsXG4gIFwiQ2Fyb25zbWFsbFwiLFxuICAweGY2ZjUsXG4gIFwiQ2Nhcm9uXCIsXG4gIDB4MDEwYyxcbiAgXCJDY2VkaWxsYVwiLFxuICAweDAwYzcsXG4gIFwiQ2NlZGlsbGFhY3V0ZVwiLFxuICAweDFlMDgsXG4gIFwiQ2NlZGlsbGFzbWFsbFwiLFxuICAweGY3ZTcsXG4gIFwiQ2NpcmNsZVwiLFxuICAweDI0YjgsXG4gIFwiQ2NpcmN1bWZsZXhcIixcbiAgMHgwMTA4LFxuICBcIkNkb3RcIixcbiAgMHgwMTBhLFxuICBcIkNkb3RhY2NlbnRcIixcbiAgMHgwMTBhLFxuICBcIkNlZGlsbGFzbWFsbFwiLFxuICAweGY3YjgsXG4gIFwiQ2hhYXJtZW5pYW5cIixcbiAgMHgwNTQ5LFxuICBcIkNoZWFia2hhc2lhbmN5cmlsbGljXCIsXG4gIDB4MDRiYyxcbiAgXCJDaGVjeXJpbGxpY1wiLFxuICAweDA0MjcsXG4gIFwiQ2hlZGVzY2VuZGVyYWJraGFzaWFuY3lyaWxsaWNcIixcbiAgMHgwNGJlLFxuICBcIkNoZWRlc2NlbmRlcmN5cmlsbGljXCIsXG4gIDB4MDRiNixcbiAgXCJDaGVkaWVyZXNpc2N5cmlsbGljXCIsXG4gIDB4MDRmNCxcbiAgXCJDaGVoYXJtZW5pYW5cIixcbiAgMHgwNTQzLFxuICBcIkNoZWtoYWthc3NpYW5jeXJpbGxpY1wiLFxuICAweDA0Y2IsXG4gIFwiQ2hldmVydGljYWxzdHJva2VjeXJpbGxpY1wiLFxuICAweDA0YjgsXG4gIFwiQ2hpXCIsXG4gIDB4MDNhNyxcbiAgXCJDaG9va1wiLFxuICAweDAxODcsXG4gIFwiQ2lyY3VtZmxleHNtYWxsXCIsXG4gIDB4ZjZmNixcbiAgXCJDbW9ub3NwYWNlXCIsXG4gIDB4ZmYyMyxcbiAgXCJDb2FybWVuaWFuXCIsXG4gIDB4MDU1MSxcbiAgXCJDc21hbGxcIixcbiAgMHhmNzYzLFxuICBcIkRcIixcbiAgMHgwMDQ0LFxuICBcIkRaXCIsXG4gIDB4MDFmMSxcbiAgXCJEWmNhcm9uXCIsXG4gIDB4MDFjNCxcbiAgXCJEYWFybWVuaWFuXCIsXG4gIDB4MDUzNCxcbiAgXCJEYWZyaWNhblwiLFxuICAweDAxODksXG4gIFwiRGNhcm9uXCIsXG4gIDB4MDEwZSxcbiAgXCJEY2VkaWxsYVwiLFxuICAweDFlMTAsXG4gIFwiRGNpcmNsZVwiLFxuICAweDI0YjksXG4gIFwiRGNpcmN1bWZsZXhiZWxvd1wiLFxuICAweDFlMTIsXG4gIFwiRGNyb2F0XCIsXG4gIDB4MDExMCxcbiAgXCJEZG90YWNjZW50XCIsXG4gIDB4MWUwYSxcbiAgXCJEZG90YmVsb3dcIixcbiAgMHgxZTBjLFxuICBcIkRlY3lyaWxsaWNcIixcbiAgMHgwNDE0LFxuICBcIkRlaWNvcHRpY1wiLFxuICAweDAzZWUsXG4gIFwiRGVsdGFcIixcbiAgMHgyMjA2LFxuICBcIkRlbHRhZ3JlZWtcIixcbiAgMHgwMzk0LFxuICBcIkRob29rXCIsXG4gIDB4MDE4YSxcbiAgXCJEaWVyZXNpc1wiLFxuICAweGY2Y2IsXG4gIFwiRGllcmVzaXNBY3V0ZVwiLFxuICAweGY2Y2MsXG4gIFwiRGllcmVzaXNHcmF2ZVwiLFxuICAweGY2Y2QsXG4gIFwiRGllcmVzaXNzbWFsbFwiLFxuICAweGY3YTgsXG4gIFwiRGlnYW1tYWdyZWVrXCIsXG4gIDB4MDNkYyxcbiAgXCJEamVjeXJpbGxpY1wiLFxuICAweDA0MDIsXG4gIFwiRGxpbmViZWxvd1wiLFxuICAweDFlMGUsXG4gIFwiRG1vbm9zcGFjZVwiLFxuICAweGZmMjQsXG4gIFwiRG90YWNjZW50c21hbGxcIixcbiAgMHhmNmY3LFxuICBcIkRzbGFzaFwiLFxuICAweDAxMTAsXG4gIFwiRHNtYWxsXCIsXG4gIDB4Zjc2NCxcbiAgXCJEdG9wYmFyXCIsXG4gIDB4MDE4YixcbiAgXCJEelwiLFxuICAweDAxZjIsXG4gIFwiRHpjYXJvblwiLFxuICAweDAxYzUsXG4gIFwiRHplYWJraGFzaWFuY3lyaWxsaWNcIixcbiAgMHgwNGUwLFxuICBcIkR6ZWN5cmlsbGljXCIsXG4gIDB4MDQwNSxcbiAgXCJEemhlY3lyaWxsaWNcIixcbiAgMHgwNDBmLFxuICBcIkVcIixcbiAgMHgwMDQ1LFxuICBcIkVhY3V0ZVwiLFxuICAweDAwYzksXG4gIFwiRWFjdXRlc21hbGxcIixcbiAgMHhmN2U5LFxuICBcIkVicmV2ZVwiLFxuICAweDAxMTQsXG4gIFwiRWNhcm9uXCIsXG4gIDB4MDExYSxcbiAgXCJFY2VkaWxsYWJyZXZlXCIsXG4gIDB4MWUxYyxcbiAgXCJFY2hhcm1lbmlhblwiLFxuICAweDA1MzUsXG4gIFwiRWNpcmNsZVwiLFxuICAweDI0YmEsXG4gIFwiRWNpcmN1bWZsZXhcIixcbiAgMHgwMGNhLFxuICBcIkVjaXJjdW1mbGV4YWN1dGVcIixcbiAgMHgxZWJlLFxuICBcIkVjaXJjdW1mbGV4YmVsb3dcIixcbiAgMHgxZTE4LFxuICBcIkVjaXJjdW1mbGV4ZG90YmVsb3dcIixcbiAgMHgxZWM2LFxuICBcIkVjaXJjdW1mbGV4Z3JhdmVcIixcbiAgMHgxZWMwLFxuICBcIkVjaXJjdW1mbGV4aG9va2Fib3ZlXCIsXG4gIDB4MWVjMixcbiAgXCJFY2lyY3VtZmxleHNtYWxsXCIsXG4gIDB4ZjdlYSxcbiAgXCJFY2lyY3VtZmxleHRpbGRlXCIsXG4gIDB4MWVjNCxcbiAgXCJFY3lyaWxsaWNcIixcbiAgMHgwNDA0LFxuICBcIkVkYmxncmF2ZVwiLFxuICAweDAyMDQsXG4gIFwiRWRpZXJlc2lzXCIsXG4gIDB4MDBjYixcbiAgXCJFZGllcmVzaXNzbWFsbFwiLFxuICAweGY3ZWIsXG4gIFwiRWRvdFwiLFxuICAweDAxMTYsXG4gIFwiRWRvdGFjY2VudFwiLFxuICAweDAxMTYsXG4gIFwiRWRvdGJlbG93XCIsXG4gIDB4MWViOCxcbiAgXCJFZmN5cmlsbGljXCIsXG4gIDB4MDQyNCxcbiAgXCJFZ3JhdmVcIixcbiAgMHgwMGM4LFxuICBcIkVncmF2ZXNtYWxsXCIsXG4gIDB4ZjdlOCxcbiAgXCJFaGFybWVuaWFuXCIsXG4gIDB4MDUzNyxcbiAgXCJFaG9va2Fib3ZlXCIsXG4gIDB4MWViYSxcbiAgXCJFaWdodHJvbWFuXCIsXG4gIDB4MjE2NyxcbiAgXCJFaW52ZXJ0ZWRicmV2ZVwiLFxuICAweDAyMDYsXG4gIFwiRWlvdGlmaWVkY3lyaWxsaWNcIixcbiAgMHgwNDY0LFxuICBcIkVsY3lyaWxsaWNcIixcbiAgMHgwNDFiLFxuICBcIkVsZXZlbnJvbWFuXCIsXG4gIDB4MjE2YSxcbiAgXCJFbWFjcm9uXCIsXG4gIDB4MDExMixcbiAgXCJFbWFjcm9uYWN1dGVcIixcbiAgMHgxZTE2LFxuICBcIkVtYWNyb25ncmF2ZVwiLFxuICAweDFlMTQsXG4gIFwiRW1jeXJpbGxpY1wiLFxuICAweDA0MWMsXG4gIFwiRW1vbm9zcGFjZVwiLFxuICAweGZmMjUsXG4gIFwiRW5jeXJpbGxpY1wiLFxuICAweDA0MWQsXG4gIFwiRW5kZXNjZW5kZXJjeXJpbGxpY1wiLFxuICAweDA0YTIsXG4gIFwiRW5nXCIsXG4gIDB4MDE0YSxcbiAgXCJFbmdoZWN5cmlsbGljXCIsXG4gIDB4MDRhNCxcbiAgXCJFbmhvb2tjeXJpbGxpY1wiLFxuICAweDA0YzcsXG4gIFwiRW9nb25la1wiLFxuICAweDAxMTgsXG4gIFwiRW9wZW5cIixcbiAgMHgwMTkwLFxuICBcIkVwc2lsb25cIixcbiAgMHgwMzk1LFxuICBcIkVwc2lsb250b25vc1wiLFxuICAweDAzODgsXG4gIFwiRXJjeXJpbGxpY1wiLFxuICAweDA0MjAsXG4gIFwiRXJldmVyc2VkXCIsXG4gIDB4MDE4ZSxcbiAgXCJFcmV2ZXJzZWRjeXJpbGxpY1wiLFxuICAweDA0MmQsXG4gIFwiRXNjeXJpbGxpY1wiLFxuICAweDA0MjEsXG4gIFwiRXNkZXNjZW5kZXJjeXJpbGxpY1wiLFxuICAweDA0YWEsXG4gIFwiRXNoXCIsXG4gIDB4MDFhOSxcbiAgXCJFc21hbGxcIixcbiAgMHhmNzY1LFxuICBcIkV0YVwiLFxuICAweDAzOTcsXG4gIFwiRXRhcm1lbmlhblwiLFxuICAweDA1MzgsXG4gIFwiRXRhdG9ub3NcIixcbiAgMHgwMzg5LFxuICBcIkV0aFwiLFxuICAweDAwZDAsXG4gIFwiRXRoc21hbGxcIixcbiAgMHhmN2YwLFxuICBcIkV0aWxkZVwiLFxuICAweDFlYmMsXG4gIFwiRXRpbGRlYmVsb3dcIixcbiAgMHgxZTFhLFxuICBcIkV1cm9cIixcbiAgMHgyMGFjLFxuICBcIkV6aFwiLFxuICAweDAxYjcsXG4gIFwiRXpoY2Fyb25cIixcbiAgMHgwMWVlLFxuICBcIkV6aHJldmVyc2VkXCIsXG4gIDB4MDFiOCxcbiAgXCJGXCIsXG4gIDB4MDA0NixcbiAgXCJGY2lyY2xlXCIsXG4gIDB4MjRiYixcbiAgXCJGZG90YWNjZW50XCIsXG4gIDB4MWUxZSxcbiAgXCJGZWhhcm1lbmlhblwiLFxuICAweDA1NTYsXG4gIFwiRmVpY29wdGljXCIsXG4gIDB4MDNlNCxcbiAgXCJGaG9va1wiLFxuICAweDAxOTEsXG4gIFwiRml0YWN5cmlsbGljXCIsXG4gIDB4MDQ3MixcbiAgXCJGaXZlcm9tYW5cIixcbiAgMHgyMTY0LFxuICBcIkZtb25vc3BhY2VcIixcbiAgMHhmZjI2LFxuICBcIkZvdXJyb21hblwiLFxuICAweDIxNjMsXG4gIFwiRnNtYWxsXCIsXG4gIDB4Zjc2NixcbiAgXCJHXCIsXG4gIDB4MDA0NyxcbiAgXCJHQnNxdWFyZVwiLFxuICAweDMzODcsXG4gIFwiR2FjdXRlXCIsXG4gIDB4MDFmNCxcbiAgXCJHYW1tYVwiLFxuICAweDAzOTMsXG4gIFwiR2FtbWFhZnJpY2FuXCIsXG4gIDB4MDE5NCxcbiAgXCJHYW5naWFjb3B0aWNcIixcbiAgMHgwM2VhLFxuICBcIkdicmV2ZVwiLFxuICAweDAxMWUsXG4gIFwiR2Nhcm9uXCIsXG4gIDB4MDFlNixcbiAgXCJHY2VkaWxsYVwiLFxuICAweDAxMjIsXG4gIFwiR2NpcmNsZVwiLFxuICAweDI0YmMsXG4gIFwiR2NpcmN1bWZsZXhcIixcbiAgMHgwMTFjLFxuICBcIkdjb21tYWFjY2VudFwiLFxuICAweDAxMjIsXG4gIFwiR2RvdFwiLFxuICAweDAxMjAsXG4gIFwiR2RvdGFjY2VudFwiLFxuICAweDAxMjAsXG4gIFwiR2VjeXJpbGxpY1wiLFxuICAweDA0MTMsXG4gIFwiR2hhZGFybWVuaWFuXCIsXG4gIDB4MDU0MixcbiAgXCJHaGVtaWRkbGVob29rY3lyaWxsaWNcIixcbiAgMHgwNDk0LFxuICBcIkdoZXN0cm9rZWN5cmlsbGljXCIsXG4gIDB4MDQ5MixcbiAgXCJHaGV1cHR1cm5jeXJpbGxpY1wiLFxuICAweDA0OTAsXG4gIFwiR2hvb2tcIixcbiAgMHgwMTkzLFxuICBcIkdpbWFybWVuaWFuXCIsXG4gIDB4MDUzMyxcbiAgXCJHamVjeXJpbGxpY1wiLFxuICAweDA0MDMsXG4gIFwiR21hY3JvblwiLFxuICAweDFlMjAsXG4gIFwiR21vbm9zcGFjZVwiLFxuICAweGZmMjcsXG4gIFwiR3JhdmVcIixcbiAgMHhmNmNlLFxuICBcIkdyYXZlc21hbGxcIixcbiAgMHhmNzYwLFxuICBcIkdzbWFsbFwiLFxuICAweGY3NjcsXG4gIFwiR3NtYWxsaG9va1wiLFxuICAweDAyOWIsXG4gIFwiR3N0cm9rZVwiLFxuICAweDAxZTQsXG4gIFwiSFwiLFxuICAweDAwNDgsXG4gIFwiSDE4NTMzXCIsXG4gIDB4MjVjZixcbiAgXCJIMTg1NDNcIixcbiAgMHgyNWFhLFxuICBcIkgxODU1MVwiLFxuICAweDI1YWIsXG4gIFwiSDIyMDczXCIsXG4gIDB4MjVhMSxcbiAgXCJIUHNxdWFyZVwiLFxuICAweDMzY2IsXG4gIFwiSGFhYmtoYXNpYW5jeXJpbGxpY1wiLFxuICAweDA0YTgsXG4gIFwiSGFkZXNjZW5kZXJjeXJpbGxpY1wiLFxuICAweDA0YjIsXG4gIFwiSGFyZHNpZ25jeXJpbGxpY1wiLFxuICAweDA0MmEsXG4gIFwiSGJhclwiLFxuICAweDAxMjYsXG4gIFwiSGJyZXZlYmVsb3dcIixcbiAgMHgxZTJhLFxuICBcIkhjZWRpbGxhXCIsXG4gIDB4MWUyOCxcbiAgXCJIY2lyY2xlXCIsXG4gIDB4MjRiZCxcbiAgXCJIY2lyY3VtZmxleFwiLFxuICAweDAxMjQsXG4gIFwiSGRpZXJlc2lzXCIsXG4gIDB4MWUyNixcbiAgXCJIZG90YWNjZW50XCIsXG4gIDB4MWUyMixcbiAgXCJIZG90YmVsb3dcIixcbiAgMHgxZTI0LFxuICBcIkhtb25vc3BhY2VcIixcbiAgMHhmZjI4LFxuICBcIkhvYXJtZW5pYW5cIixcbiAgMHgwNTQwLFxuICBcIkhvcmljb3B0aWNcIixcbiAgMHgwM2U4LFxuICBcIkhzbWFsbFwiLFxuICAweGY3NjgsXG4gIFwiSHVuZ2FydW1sYXV0XCIsXG4gIDB4ZjZjZixcbiAgXCJIdW5nYXJ1bWxhdXRzbWFsbFwiLFxuICAweGY2ZjgsXG4gIFwiSHpzcXVhcmVcIixcbiAgMHgzMzkwLFxuICBcIklcIixcbiAgMHgwMDQ5LFxuICBcIklBY3lyaWxsaWNcIixcbiAgMHgwNDJmLFxuICBcIklKXCIsXG4gIDB4MDEzMixcbiAgXCJJVWN5cmlsbGljXCIsXG4gIDB4MDQyZSxcbiAgXCJJYWN1dGVcIixcbiAgMHgwMGNkLFxuICBcIklhY3V0ZXNtYWxsXCIsXG4gIDB4ZjdlZCxcbiAgXCJJYnJldmVcIixcbiAgMHgwMTJjLFxuICBcIkljYXJvblwiLFxuICAweDAxY2YsXG4gIFwiSWNpcmNsZVwiLFxuICAweDI0YmUsXG4gIFwiSWNpcmN1bWZsZXhcIixcbiAgMHgwMGNlLFxuICBcIkljaXJjdW1mbGV4c21hbGxcIixcbiAgMHhmN2VlLFxuICBcIkljeXJpbGxpY1wiLFxuICAweDA0MDYsXG4gIFwiSWRibGdyYXZlXCIsXG4gIDB4MDIwOCxcbiAgXCJJZGllcmVzaXNcIixcbiAgMHgwMGNmLFxuICBcIklkaWVyZXNpc2FjdXRlXCIsXG4gIDB4MWUyZSxcbiAgXCJJZGllcmVzaXNjeXJpbGxpY1wiLFxuICAweDA0ZTQsXG4gIFwiSWRpZXJlc2lzc21hbGxcIixcbiAgMHhmN2VmLFxuICBcIklkb3RcIixcbiAgMHgwMTMwLFxuICBcIklkb3RhY2NlbnRcIixcbiAgMHgwMTMwLFxuICBcIklkb3RiZWxvd1wiLFxuICAweDFlY2EsXG4gIFwiSWVicmV2ZWN5cmlsbGljXCIsXG4gIDB4MDRkNixcbiAgXCJJZWN5cmlsbGljXCIsXG4gIDB4MDQxNSxcbiAgXCJJZnJha3R1clwiLFxuICAweDIxMTEsXG4gIFwiSWdyYXZlXCIsXG4gIDB4MDBjYyxcbiAgXCJJZ3JhdmVzbWFsbFwiLFxuICAweGY3ZWMsXG4gIFwiSWhvb2thYm92ZVwiLFxuICAweDFlYzgsXG4gIFwiSWljeXJpbGxpY1wiLFxuICAweDA0MTgsXG4gIFwiSWludmVydGVkYnJldmVcIixcbiAgMHgwMjBhLFxuICBcIklpc2hvcnRjeXJpbGxpY1wiLFxuICAweDA0MTksXG4gIFwiSW1hY3JvblwiLFxuICAweDAxMmEsXG4gIFwiSW1hY3JvbmN5cmlsbGljXCIsXG4gIDB4MDRlMixcbiAgXCJJbW9ub3NwYWNlXCIsXG4gIDB4ZmYyOSxcbiAgXCJJbmlhcm1lbmlhblwiLFxuICAweDA1M2IsXG4gIFwiSW9jeXJpbGxpY1wiLFxuICAweDA0MDEsXG4gIFwiSW9nb25la1wiLFxuICAweDAxMmUsXG4gIFwiSW90YVwiLFxuICAweDAzOTksXG4gIFwiSW90YWFmcmljYW5cIixcbiAgMHgwMTk2LFxuICBcIklvdGFkaWVyZXNpc1wiLFxuICAweDAzYWEsXG4gIFwiSW90YXRvbm9zXCIsXG4gIDB4MDM4YSxcbiAgXCJJc21hbGxcIixcbiAgMHhmNzY5LFxuICBcIklzdHJva2VcIixcbiAgMHgwMTk3LFxuICBcIkl0aWxkZVwiLFxuICAweDAxMjgsXG4gIFwiSXRpbGRlYmVsb3dcIixcbiAgMHgxZTJjLFxuICBcIkl6aGl0c2FjeXJpbGxpY1wiLFxuICAweDA0NzQsXG4gIFwiSXpoaXRzYWRibGdyYXZlY3lyaWxsaWNcIixcbiAgMHgwNDc2LFxuICBcIkpcIixcbiAgMHgwMDRhLFxuICBcIkphYXJtZW5pYW5cIixcbiAgMHgwNTQxLFxuICBcIkpjaXJjbGVcIixcbiAgMHgyNGJmLFxuICBcIkpjaXJjdW1mbGV4XCIsXG4gIDB4MDEzNCxcbiAgXCJKZWN5cmlsbGljXCIsXG4gIDB4MDQwOCxcbiAgXCJKaGVoYXJtZW5pYW5cIixcbiAgMHgwNTRiLFxuICBcIkptb25vc3BhY2VcIixcbiAgMHhmZjJhLFxuICBcIkpzbWFsbFwiLFxuICAweGY3NmEsXG4gIFwiS1wiLFxuICAweDAwNGIsXG4gIFwiS0JzcXVhcmVcIixcbiAgMHgzMzg1LFxuICBcIktLc3F1YXJlXCIsXG4gIDB4MzNjZCxcbiAgXCJLYWJhc2hraXJjeXJpbGxpY1wiLFxuICAweDA0YTAsXG4gIFwiS2FjdXRlXCIsXG4gIDB4MWUzMCxcbiAgXCJLYWN5cmlsbGljXCIsXG4gIDB4MDQxYSxcbiAgXCJLYWRlc2NlbmRlcmN5cmlsbGljXCIsXG4gIDB4MDQ5YSxcbiAgXCJLYWhvb2tjeXJpbGxpY1wiLFxuICAweDA0YzMsXG4gIFwiS2FwcGFcIixcbiAgMHgwMzlhLFxuICBcIkthc3Ryb2tlY3lyaWxsaWNcIixcbiAgMHgwNDllLFxuICBcIkthdmVydGljYWxzdHJva2VjeXJpbGxpY1wiLFxuICAweDA0OWMsXG4gIFwiS2Nhcm9uXCIsXG4gIDB4MDFlOCxcbiAgXCJLY2VkaWxsYVwiLFxuICAweDAxMzYsXG4gIFwiS2NpcmNsZVwiLFxuICAweDI0YzAsXG4gIFwiS2NvbW1hYWNjZW50XCIsXG4gIDB4MDEzNixcbiAgXCJLZG90YmVsb3dcIixcbiAgMHgxZTMyLFxuICBcIktlaGFybWVuaWFuXCIsXG4gIDB4MDU1NCxcbiAgXCJLZW5hcm1lbmlhblwiLFxuICAweDA1M2YsXG4gIFwiS2hhY3lyaWxsaWNcIixcbiAgMHgwNDI1LFxuICBcIktoZWljb3B0aWNcIixcbiAgMHgwM2U2LFxuICBcIktob29rXCIsXG4gIDB4MDE5OCxcbiAgXCJLamVjeXJpbGxpY1wiLFxuICAweDA0MGMsXG4gIFwiS2xpbmViZWxvd1wiLFxuICAweDFlMzQsXG4gIFwiS21vbm9zcGFjZVwiLFxuICAweGZmMmIsXG4gIFwiS29wcGFjeXJpbGxpY1wiLFxuICAweDA0ODAsXG4gIFwiS29wcGFncmVla1wiLFxuICAweDAzZGUsXG4gIFwiS3NpY3lyaWxsaWNcIixcbiAgMHgwNDZlLFxuICBcIktzbWFsbFwiLFxuICAweGY3NmIsXG4gIFwiTFwiLFxuICAweDAwNGMsXG4gIFwiTEpcIixcbiAgMHgwMWM3LFxuICBcIkxMXCIsXG4gIDB4ZjZiZixcbiAgXCJMYWN1dGVcIixcbiAgMHgwMTM5LFxuICBcIkxhbWJkYVwiLFxuICAweDAzOWIsXG4gIFwiTGNhcm9uXCIsXG4gIDB4MDEzZCxcbiAgXCJMY2VkaWxsYVwiLFxuICAweDAxM2IsXG4gIFwiTGNpcmNsZVwiLFxuICAweDI0YzEsXG4gIFwiTGNpcmN1bWZsZXhiZWxvd1wiLFxuICAweDFlM2MsXG4gIFwiTGNvbW1hYWNjZW50XCIsXG4gIDB4MDEzYixcbiAgXCJMZG90XCIsXG4gIDB4MDEzZixcbiAgXCJMZG90YWNjZW50XCIsXG4gIDB4MDEzZixcbiAgXCJMZG90YmVsb3dcIixcbiAgMHgxZTM2LFxuICBcIkxkb3RiZWxvd21hY3JvblwiLFxuICAweDFlMzgsXG4gIFwiTGl3bmFybWVuaWFuXCIsXG4gIDB4MDUzYyxcbiAgXCJMalwiLFxuICAweDAxYzgsXG4gIFwiTGplY3lyaWxsaWNcIixcbiAgMHgwNDA5LFxuICBcIkxsaW5lYmVsb3dcIixcbiAgMHgxZTNhLFxuICBcIkxtb25vc3BhY2VcIixcbiAgMHhmZjJjLFxuICBcIkxzbGFzaFwiLFxuICAweDAxNDEsXG4gIFwiTHNsYXNoc21hbGxcIixcbiAgMHhmNmY5LFxuICBcIkxzbWFsbFwiLFxuICAweGY3NmMsXG4gIFwiTVwiLFxuICAweDAwNGQsXG4gIFwiTUJzcXVhcmVcIixcbiAgMHgzMzg2LFxuICBcIk1hY3JvblwiLFxuICAweGY2ZDAsXG4gIFwiTWFjcm9uc21hbGxcIixcbiAgMHhmN2FmLFxuICBcIk1hY3V0ZVwiLFxuICAweDFlM2UsXG4gIFwiTWNpcmNsZVwiLFxuICAweDI0YzIsXG4gIFwiTWRvdGFjY2VudFwiLFxuICAweDFlNDAsXG4gIFwiTWRvdGJlbG93XCIsXG4gIDB4MWU0MixcbiAgXCJNZW5hcm1lbmlhblwiLFxuICAweDA1NDQsXG4gIFwiTW1vbm9zcGFjZVwiLFxuICAweGZmMmQsXG4gIFwiTXNtYWxsXCIsXG4gIDB4Zjc2ZCxcbiAgXCJNdHVybmVkXCIsXG4gIDB4MDE5YyxcbiAgXCJNdVwiLFxuICAweDAzOWMsXG4gIFwiTlwiLFxuICAweDAwNGUsXG4gIFwiTkpcIixcbiAgMHgwMWNhLFxuICBcIk5hY3V0ZVwiLFxuICAweDAxNDMsXG4gIFwiTmNhcm9uXCIsXG4gIDB4MDE0NyxcbiAgXCJOY2VkaWxsYVwiLFxuICAweDAxNDUsXG4gIFwiTmNpcmNsZVwiLFxuICAweDI0YzMsXG4gIFwiTmNpcmN1bWZsZXhiZWxvd1wiLFxuICAweDFlNGEsXG4gIFwiTmNvbW1hYWNjZW50XCIsXG4gIDB4MDE0NSxcbiAgXCJOZG90YWNjZW50XCIsXG4gIDB4MWU0NCxcbiAgXCJOZG90YmVsb3dcIixcbiAgMHgxZTQ2LFxuICBcIk5ob29rbGVmdFwiLFxuICAweDAxOWQsXG4gIFwiTmluZXJvbWFuXCIsXG4gIDB4MjE2OCxcbiAgXCJOalwiLFxuICAweDAxY2IsXG4gIFwiTmplY3lyaWxsaWNcIixcbiAgMHgwNDBhLFxuICBcIk5saW5lYmVsb3dcIixcbiAgMHgxZTQ4LFxuICBcIk5tb25vc3BhY2VcIixcbiAgMHhmZjJlLFxuICBcIk5vd2FybWVuaWFuXCIsXG4gIDB4MDU0NixcbiAgXCJOc21hbGxcIixcbiAgMHhmNzZlLFxuICBcIk50aWxkZVwiLFxuICAweDAwZDEsXG4gIFwiTnRpbGRlc21hbGxcIixcbiAgMHhmN2YxLFxuICBcIk51XCIsXG4gIDB4MDM5ZCxcbiAgXCJPXCIsXG4gIDB4MDA0ZixcbiAgXCJPRVwiLFxuICAweDAxNTIsXG4gIFwiT0VzbWFsbFwiLFxuICAweGY2ZmEsXG4gIFwiT2FjdXRlXCIsXG4gIDB4MDBkMyxcbiAgXCJPYWN1dGVzbWFsbFwiLFxuICAweGY3ZjMsXG4gIFwiT2JhcnJlZGN5cmlsbGljXCIsXG4gIDB4MDRlOCxcbiAgXCJPYmFycmVkZGllcmVzaXNjeXJpbGxpY1wiLFxuICAweDA0ZWEsXG4gIFwiT2JyZXZlXCIsXG4gIDB4MDE0ZSxcbiAgXCJPY2Fyb25cIixcbiAgMHgwMWQxLFxuICBcIk9jZW50ZXJlZHRpbGRlXCIsXG4gIDB4MDE5ZixcbiAgXCJPY2lyY2xlXCIsXG4gIDB4MjRjNCxcbiAgXCJPY2lyY3VtZmxleFwiLFxuICAweDAwZDQsXG4gIFwiT2NpcmN1bWZsZXhhY3V0ZVwiLFxuICAweDFlZDAsXG4gIFwiT2NpcmN1bWZsZXhkb3RiZWxvd1wiLFxuICAweDFlZDgsXG4gIFwiT2NpcmN1bWZsZXhncmF2ZVwiLFxuICAweDFlZDIsXG4gIFwiT2NpcmN1bWZsZXhob29rYWJvdmVcIixcbiAgMHgxZWQ0LFxuICBcIk9jaXJjdW1mbGV4c21hbGxcIixcbiAgMHhmN2Y0LFxuICBcIk9jaXJjdW1mbGV4dGlsZGVcIixcbiAgMHgxZWQ2LFxuICBcIk9jeXJpbGxpY1wiLFxuICAweDA0MWUsXG4gIFwiT2RibGFjdXRlXCIsXG4gIDB4MDE1MCxcbiAgXCJPZGJsZ3JhdmVcIixcbiAgMHgwMjBjLFxuICBcIk9kaWVyZXNpc1wiLFxuICAweDAwZDYsXG4gIFwiT2RpZXJlc2lzY3lyaWxsaWNcIixcbiAgMHgwNGU2LFxuICBcIk9kaWVyZXNpc3NtYWxsXCIsXG4gIDB4ZjdmNixcbiAgXCJPZG90YmVsb3dcIixcbiAgMHgxZWNjLFxuICBcIk9nb25la3NtYWxsXCIsXG4gIDB4ZjZmYixcbiAgXCJPZ3JhdmVcIixcbiAgMHgwMGQyLFxuICBcIk9ncmF2ZXNtYWxsXCIsXG4gIDB4ZjdmMixcbiAgXCJPaGFybWVuaWFuXCIsXG4gIDB4MDU1NSxcbiAgXCJPaG1cIixcbiAgMHgyMTI2LFxuICBcIk9ob29rYWJvdmVcIixcbiAgMHgxZWNlLFxuICBcIk9ob3JuXCIsXG4gIDB4MDFhMCxcbiAgXCJPaG9ybmFjdXRlXCIsXG4gIDB4MWVkYSxcbiAgXCJPaG9ybmRvdGJlbG93XCIsXG4gIDB4MWVlMixcbiAgXCJPaG9ybmdyYXZlXCIsXG4gIDB4MWVkYyxcbiAgXCJPaG9ybmhvb2thYm92ZVwiLFxuICAweDFlZGUsXG4gIFwiT2hvcm50aWxkZVwiLFxuICAweDFlZTAsXG4gIFwiT2h1bmdhcnVtbGF1dFwiLFxuICAweDAxNTAsXG4gIFwiT2lcIixcbiAgMHgwMWEyLFxuICBcIk9pbnZlcnRlZGJyZXZlXCIsXG4gIDB4MDIwZSxcbiAgXCJPbWFjcm9uXCIsXG4gIDB4MDE0YyxcbiAgXCJPbWFjcm9uYWN1dGVcIixcbiAgMHgxZTUyLFxuICBcIk9tYWNyb25ncmF2ZVwiLFxuICAweDFlNTAsXG4gIFwiT21lZ2FcIixcbiAgMHgyMTI2LFxuICBcIk9tZWdhY3lyaWxsaWNcIixcbiAgMHgwNDYwLFxuICBcIk9tZWdhZ3JlZWtcIixcbiAgMHgwM2E5LFxuICBcIk9tZWdhcm91bmRjeXJpbGxpY1wiLFxuICAweDA0N2EsXG4gIFwiT21lZ2F0aXRsb2N5cmlsbGljXCIsXG4gIDB4MDQ3YyxcbiAgXCJPbWVnYXRvbm9zXCIsXG4gIDB4MDM4ZixcbiAgXCJPbWljcm9uXCIsXG4gIDB4MDM5ZixcbiAgXCJPbWljcm9udG9ub3NcIixcbiAgMHgwMzhjLFxuICBcIk9tb25vc3BhY2VcIixcbiAgMHhmZjJmLFxuICBcIk9uZXJvbWFuXCIsXG4gIDB4MjE2MCxcbiAgXCJPb2dvbmVrXCIsXG4gIDB4MDFlYSxcbiAgXCJPb2dvbmVrbWFjcm9uXCIsXG4gIDB4MDFlYyxcbiAgXCJPb3BlblwiLFxuICAweDAxODYsXG4gIFwiT3NsYXNoXCIsXG4gIDB4MDBkOCxcbiAgXCJPc2xhc2hhY3V0ZVwiLFxuICAweDAxZmUsXG4gIFwiT3NsYXNoc21hbGxcIixcbiAgMHhmN2Y4LFxuICBcIk9zbWFsbFwiLFxuICAweGY3NmYsXG4gIFwiT3N0cm9rZWFjdXRlXCIsXG4gIDB4MDFmZSxcbiAgXCJPdGN5cmlsbGljXCIsXG4gIDB4MDQ3ZSxcbiAgXCJPdGlsZGVcIixcbiAgMHgwMGQ1LFxuICBcIk90aWxkZWFjdXRlXCIsXG4gIDB4MWU0YyxcbiAgXCJPdGlsZGVkaWVyZXNpc1wiLFxuICAweDFlNGUsXG4gIFwiT3RpbGRlc21hbGxcIixcbiAgMHhmN2Y1LFxuICBcIlBcIixcbiAgMHgwMDUwLFxuICBcIlBhY3V0ZVwiLFxuICAweDFlNTQsXG4gIFwiUGNpcmNsZVwiLFxuICAweDI0YzUsXG4gIFwiUGRvdGFjY2VudFwiLFxuICAweDFlNTYsXG4gIFwiUGVjeXJpbGxpY1wiLFxuICAweDA0MWYsXG4gIFwiUGVoYXJtZW5pYW5cIixcbiAgMHgwNTRhLFxuICBcIlBlbWlkZGxlaG9va2N5cmlsbGljXCIsXG4gIDB4MDRhNixcbiAgXCJQaGlcIixcbiAgMHgwM2E2LFxuICBcIlBob29rXCIsXG4gIDB4MDFhNCxcbiAgXCJQaVwiLFxuICAweDAzYTAsXG4gIFwiUGl3cmFybWVuaWFuXCIsXG4gIDB4MDU1MyxcbiAgXCJQbW9ub3NwYWNlXCIsXG4gIDB4ZmYzMCxcbiAgXCJQc2lcIixcbiAgMHgwM2E4LFxuICBcIlBzaWN5cmlsbGljXCIsXG4gIDB4MDQ3MCxcbiAgXCJQc21hbGxcIixcbiAgMHhmNzcwLFxuICBcIlFcIixcbiAgMHgwMDUxLFxuICBcIlFjaXJjbGVcIixcbiAgMHgyNGM2LFxuICBcIlFtb25vc3BhY2VcIixcbiAgMHhmZjMxLFxuICBcIlFzbWFsbFwiLFxuICAweGY3NzEsXG4gIFwiUlwiLFxuICAweDAwNTIsXG4gIFwiUmFhcm1lbmlhblwiLFxuICAweDA1NGMsXG4gIFwiUmFjdXRlXCIsXG4gIDB4MDE1NCxcbiAgXCJSY2Fyb25cIixcbiAgMHgwMTU4LFxuICBcIlJjZWRpbGxhXCIsXG4gIDB4MDE1NixcbiAgXCJSY2lyY2xlXCIsXG4gIDB4MjRjNyxcbiAgXCJSY29tbWFhY2NlbnRcIixcbiAgMHgwMTU2LFxuICBcIlJkYmxncmF2ZVwiLFxuICAweDAyMTAsXG4gIFwiUmRvdGFjY2VudFwiLFxuICAweDFlNTgsXG4gIFwiUmRvdGJlbG93XCIsXG4gIDB4MWU1YSxcbiAgXCJSZG90YmVsb3dtYWNyb25cIixcbiAgMHgxZTVjLFxuICBcIlJlaGFybWVuaWFuXCIsXG4gIDB4MDU1MCxcbiAgXCJSZnJha3R1clwiLFxuICAweDIxMWMsXG4gIFwiUmhvXCIsXG4gIDB4MDNhMSxcbiAgXCJSaW5nc21hbGxcIixcbiAgMHhmNmZjLFxuICBcIlJpbnZlcnRlZGJyZXZlXCIsXG4gIDB4MDIxMixcbiAgXCJSbGluZWJlbG93XCIsXG4gIDB4MWU1ZSxcbiAgXCJSbW9ub3NwYWNlXCIsXG4gIDB4ZmYzMixcbiAgXCJSc21hbGxcIixcbiAgMHhmNzcyLFxuICBcIlJzbWFsbGludmVydGVkXCIsXG4gIDB4MDI4MSxcbiAgXCJSc21hbGxpbnZlcnRlZHN1cGVyaW9yXCIsXG4gIDB4MDJiNixcbiAgXCJTXCIsXG4gIDB4MDA1MyxcbiAgXCJTRjAxMDAwMFwiLFxuICAweDI1MGMsXG4gIFwiU0YwMjAwMDBcIixcbiAgMHgyNTE0LFxuICBcIlNGMDMwMDAwXCIsXG4gIDB4MjUxMCxcbiAgXCJTRjA0MDAwMFwiLFxuICAweDI1MTgsXG4gIFwiU0YwNTAwMDBcIixcbiAgMHgyNTNjLFxuICBcIlNGMDYwMDAwXCIsXG4gIDB4MjUyYyxcbiAgXCJTRjA3MDAwMFwiLFxuICAweDI1MzQsXG4gIFwiU0YwODAwMDBcIixcbiAgMHgyNTFjLFxuICBcIlNGMDkwMDAwXCIsXG4gIDB4MjUyNCxcbiAgXCJTRjEwMDAwMFwiLFxuICAweDI1MDAsXG4gIFwiU0YxMTAwMDBcIixcbiAgMHgyNTAyLFxuICBcIlNGMTkwMDAwXCIsXG4gIDB4MjU2MSxcbiAgXCJTRjIwMDAwMFwiLFxuICAweDI1NjIsXG4gIFwiU0YyMTAwMDBcIixcbiAgMHgyNTU2LFxuICBcIlNGMjIwMDAwXCIsXG4gIDB4MjU1NSxcbiAgXCJTRjIzMDAwMFwiLFxuICAweDI1NjMsXG4gIFwiU0YyNDAwMDBcIixcbiAgMHgyNTUxLFxuICBcIlNGMjUwMDAwXCIsXG4gIDB4MjU1NyxcbiAgXCJTRjI2MDAwMFwiLFxuICAweDI1NWQsXG4gIFwiU0YyNzAwMDBcIixcbiAgMHgyNTVjLFxuICBcIlNGMjgwMDAwXCIsXG4gIDB4MjU1YixcbiAgXCJTRjM2MDAwMFwiLFxuICAweDI1NWUsXG4gIFwiU0YzNzAwMDBcIixcbiAgMHgyNTVmLFxuICBcIlNGMzgwMDAwXCIsXG4gIDB4MjU1YSxcbiAgXCJTRjM5MDAwMFwiLFxuICAweDI1NTQsXG4gIFwiU0Y0MDAwMDBcIixcbiAgMHgyNTY5LFxuICBcIlNGNDEwMDAwXCIsXG4gIDB4MjU2NixcbiAgXCJTRjQyMDAwMFwiLFxuICAweDI1NjAsXG4gIFwiU0Y0MzAwMDBcIixcbiAgMHgyNTUwLFxuICBcIlNGNDQwMDAwXCIsXG4gIDB4MjU2YyxcbiAgXCJTRjQ1MDAwMFwiLFxuICAweDI1NjcsXG4gIFwiU0Y0NjAwMDBcIixcbiAgMHgyNTY4LFxuICBcIlNGNDcwMDAwXCIsXG4gIDB4MjU2NCxcbiAgXCJTRjQ4MDAwMFwiLFxuICAweDI1NjUsXG4gIFwiU0Y0OTAwMDBcIixcbiAgMHgyNTU5LFxuICBcIlNGNTAwMDAwXCIsXG4gIDB4MjU1OCxcbiAgXCJTRjUxMDAwMFwiLFxuICAweDI1NTIsXG4gIFwiU0Y1MjAwMDBcIixcbiAgMHgyNTUzLFxuICBcIlNGNTMwMDAwXCIsXG4gIDB4MjU2YixcbiAgXCJTRjU0MDAwMFwiLFxuICAweDI1NmEsXG4gIFwiU2FjdXRlXCIsXG4gIDB4MDE1YSxcbiAgXCJTYWN1dGVkb3RhY2NlbnRcIixcbiAgMHgxZTY0LFxuICBcIlNhbXBpZ3JlZWtcIixcbiAgMHgwM2UwLFxuICBcIlNjYXJvblwiLFxuICAweDAxNjAsXG4gIFwiU2Nhcm9uZG90YWNjZW50XCIsXG4gIDB4MWU2NixcbiAgXCJTY2Fyb25zbWFsbFwiLFxuICAweGY2ZmQsXG4gIFwiU2NlZGlsbGFcIixcbiAgMHgwMTVlLFxuICBcIlNjaHdhXCIsXG4gIDB4MDE4ZixcbiAgXCJTY2h3YWN5cmlsbGljXCIsXG4gIDB4MDRkOCxcbiAgXCJTY2h3YWRpZXJlc2lzY3lyaWxsaWNcIixcbiAgMHgwNGRhLFxuICBcIlNjaXJjbGVcIixcbiAgMHgyNGM4LFxuICBcIlNjaXJjdW1mbGV4XCIsXG4gIDB4MDE1YyxcbiAgXCJTY29tbWFhY2NlbnRcIixcbiAgMHgwMjE4LFxuICBcIlNkb3RhY2NlbnRcIixcbiAgMHgxZTYwLFxuICBcIlNkb3RiZWxvd1wiLFxuICAweDFlNjIsXG4gIFwiU2RvdGJlbG93ZG90YWNjZW50XCIsXG4gIDB4MWU2OCxcbiAgXCJTZWhhcm1lbmlhblwiLFxuICAweDA1NGQsXG4gIFwiU2V2ZW5yb21hblwiLFxuICAweDIxNjYsXG4gIFwiU2hhYXJtZW5pYW5cIixcbiAgMHgwNTQ3LFxuICBcIlNoYWN5cmlsbGljXCIsXG4gIDB4MDQyOCxcbiAgXCJTaGNoYWN5cmlsbGljXCIsXG4gIDB4MDQyOSxcbiAgXCJTaGVpY29wdGljXCIsXG4gIDB4MDNlMixcbiAgXCJTaGhhY3lyaWxsaWNcIixcbiAgMHgwNGJhLFxuICBcIlNoaW1hY29wdGljXCIsXG4gIDB4MDNlYyxcbiAgXCJTaWdtYVwiLFxuICAweDAzYTMsXG4gIFwiU2l4cm9tYW5cIixcbiAgMHgyMTY1LFxuICBcIlNtb25vc3BhY2VcIixcbiAgMHhmZjMzLFxuICBcIlNvZnRzaWduY3lyaWxsaWNcIixcbiAgMHgwNDJjLFxuICBcIlNzbWFsbFwiLFxuICAweGY3NzMsXG4gIFwiU3RpZ21hZ3JlZWtcIixcbiAgMHgwM2RhLFxuICBcIlRcIixcbiAgMHgwMDU0LFxuICBcIlRhdVwiLFxuICAweDAzYTQsXG4gIFwiVGJhclwiLFxuICAweDAxNjYsXG4gIFwiVGNhcm9uXCIsXG4gIDB4MDE2NCxcbiAgXCJUY2VkaWxsYVwiLFxuICAweDAxNjIsXG4gIFwiVGNpcmNsZVwiLFxuICAweDI0YzksXG4gIFwiVGNpcmN1bWZsZXhiZWxvd1wiLFxuICAweDFlNzAsXG4gIFwiVGNvbW1hYWNjZW50XCIsXG4gIDB4MDE2MixcbiAgXCJUZG90YWNjZW50XCIsXG4gIDB4MWU2YSxcbiAgXCJUZG90YmVsb3dcIixcbiAgMHgxZTZjLFxuICBcIlRlY3lyaWxsaWNcIixcbiAgMHgwNDIyLFxuICBcIlRlZGVzY2VuZGVyY3lyaWxsaWNcIixcbiAgMHgwNGFjLFxuICBcIlRlbnJvbWFuXCIsXG4gIDB4MjE2OSxcbiAgXCJUZXRzZWN5cmlsbGljXCIsXG4gIDB4MDRiNCxcbiAgXCJUaGV0YVwiLFxuICAweDAzOTgsXG4gIFwiVGhvb2tcIixcbiAgMHgwMWFjLFxuICBcIlRob3JuXCIsXG4gIDB4MDBkZSxcbiAgXCJUaG9ybnNtYWxsXCIsXG4gIDB4ZjdmZSxcbiAgXCJUaHJlZXJvbWFuXCIsXG4gIDB4MjE2MixcbiAgXCJUaWxkZXNtYWxsXCIsXG4gIDB4ZjZmZSxcbiAgXCJUaXduYXJtZW5pYW5cIixcbiAgMHgwNTRmLFxuICBcIlRsaW5lYmVsb3dcIixcbiAgMHgxZTZlLFxuICBcIlRtb25vc3BhY2VcIixcbiAgMHhmZjM0LFxuICBcIlRvYXJtZW5pYW5cIixcbiAgMHgwNTM5LFxuICBcIlRvbmVmaXZlXCIsXG4gIDB4MDFiYyxcbiAgXCJUb25lc2l4XCIsXG4gIDB4MDE4NCxcbiAgXCJUb25ldHdvXCIsXG4gIDB4MDFhNyxcbiAgXCJUcmV0cm9mbGV4aG9va1wiLFxuICAweDAxYWUsXG4gIFwiVHNlY3lyaWxsaWNcIixcbiAgMHgwNDI2LFxuICBcIlRzaGVjeXJpbGxpY1wiLFxuICAweDA0MGIsXG4gIFwiVHNtYWxsXCIsXG4gIDB4Zjc3NCxcbiAgXCJUd2VsdmVyb21hblwiLFxuICAweDIxNmIsXG4gIFwiVHdvcm9tYW5cIixcbiAgMHgyMTYxLFxuICBcIlVcIixcbiAgMHgwMDU1LFxuICBcIlVhY3V0ZVwiLFxuICAweDAwZGEsXG4gIFwiVWFjdXRlc21hbGxcIixcbiAgMHhmN2ZhLFxuICBcIlVicmV2ZVwiLFxuICAweDAxNmMsXG4gIFwiVWNhcm9uXCIsXG4gIDB4MDFkMyxcbiAgXCJVY2lyY2xlXCIsXG4gIDB4MjRjYSxcbiAgXCJVY2lyY3VtZmxleFwiLFxuICAweDAwZGIsXG4gIFwiVWNpcmN1bWZsZXhiZWxvd1wiLFxuICAweDFlNzYsXG4gIFwiVWNpcmN1bWZsZXhzbWFsbFwiLFxuICAweGY3ZmIsXG4gIFwiVWN5cmlsbGljXCIsXG4gIDB4MDQyMyxcbiAgXCJVZGJsYWN1dGVcIixcbiAgMHgwMTcwLFxuICBcIlVkYmxncmF2ZVwiLFxuICAweDAyMTQsXG4gIFwiVWRpZXJlc2lzXCIsXG4gIDB4MDBkYyxcbiAgXCJVZGllcmVzaXNhY3V0ZVwiLFxuICAweDAxZDcsXG4gIFwiVWRpZXJlc2lzYmVsb3dcIixcbiAgMHgxZTcyLFxuICBcIlVkaWVyZXNpc2Nhcm9uXCIsXG4gIDB4MDFkOSxcbiAgXCJVZGllcmVzaXNjeXJpbGxpY1wiLFxuICAweDA0ZjAsXG4gIFwiVWRpZXJlc2lzZ3JhdmVcIixcbiAgMHgwMWRiLFxuICBcIlVkaWVyZXNpc21hY3JvblwiLFxuICAweDAxZDUsXG4gIFwiVWRpZXJlc2lzc21hbGxcIixcbiAgMHhmN2ZjLFxuICBcIlVkb3RiZWxvd1wiLFxuICAweDFlZTQsXG4gIFwiVWdyYXZlXCIsXG4gIDB4MDBkOSxcbiAgXCJVZ3JhdmVzbWFsbFwiLFxuICAweGY3ZjksXG4gIFwiVWhvb2thYm92ZVwiLFxuICAweDFlZTYsXG4gIFwiVWhvcm5cIixcbiAgMHgwMWFmLFxuICBcIlVob3JuYWN1dGVcIixcbiAgMHgxZWU4LFxuICBcIlVob3JuZG90YmVsb3dcIixcbiAgMHgxZWYwLFxuICBcIlVob3JuZ3JhdmVcIixcbiAgMHgxZWVhLFxuICBcIlVob3JuaG9va2Fib3ZlXCIsXG4gIDB4MWVlYyxcbiAgXCJVaG9ybnRpbGRlXCIsXG4gIDB4MWVlZSxcbiAgXCJVaHVuZ2FydW1sYXV0XCIsXG4gIDB4MDE3MCxcbiAgXCJVaHVuZ2FydW1sYXV0Y3lyaWxsaWNcIixcbiAgMHgwNGYyLFxuICBcIlVpbnZlcnRlZGJyZXZlXCIsXG4gIDB4MDIxNixcbiAgXCJVa2N5cmlsbGljXCIsXG4gIDB4MDQ3OCxcbiAgXCJVbWFjcm9uXCIsXG4gIDB4MDE2YSxcbiAgXCJVbWFjcm9uY3lyaWxsaWNcIixcbiAgMHgwNGVlLFxuICBcIlVtYWNyb25kaWVyZXNpc1wiLFxuICAweDFlN2EsXG4gIFwiVW1vbm9zcGFjZVwiLFxuICAweGZmMzUsXG4gIFwiVW9nb25la1wiLFxuICAweDAxNzIsXG4gIFwiVXBzaWxvblwiLFxuICAweDAzYTUsXG4gIFwiVXBzaWxvbjFcIixcbiAgMHgwM2QyLFxuICBcIlVwc2lsb25hY3V0ZWhvb2tzeW1ib2xncmVla1wiLFxuICAweDAzZDMsXG4gIFwiVXBzaWxvbmFmcmljYW5cIixcbiAgMHgwMWIxLFxuICBcIlVwc2lsb25kaWVyZXNpc1wiLFxuICAweDAzYWIsXG4gIFwiVXBzaWxvbmRpZXJlc2lzaG9va3N5bWJvbGdyZWVrXCIsXG4gIDB4MDNkNCxcbiAgXCJVcHNpbG9uaG9va3N5bWJvbFwiLFxuICAweDAzZDIsXG4gIFwiVXBzaWxvbnRvbm9zXCIsXG4gIDB4MDM4ZSxcbiAgXCJVcmluZ1wiLFxuICAweDAxNmUsXG4gIFwiVXNob3J0Y3lyaWxsaWNcIixcbiAgMHgwNDBlLFxuICBcIlVzbWFsbFwiLFxuICAweGY3NzUsXG4gIFwiVXN0cmFpZ2h0Y3lyaWxsaWNcIixcbiAgMHgwNGFlLFxuICBcIlVzdHJhaWdodHN0cm9rZWN5cmlsbGljXCIsXG4gIDB4MDRiMCxcbiAgXCJVdGlsZGVcIixcbiAgMHgwMTY4LFxuICBcIlV0aWxkZWFjdXRlXCIsXG4gIDB4MWU3OCxcbiAgXCJVdGlsZGViZWxvd1wiLFxuICAweDFlNzQsXG4gIFwiVlwiLFxuICAweDAwNTYsXG4gIFwiVmNpcmNsZVwiLFxuICAweDI0Y2IsXG4gIFwiVmRvdGJlbG93XCIsXG4gIDB4MWU3ZSxcbiAgXCJWZWN5cmlsbGljXCIsXG4gIDB4MDQxMixcbiAgXCJWZXdhcm1lbmlhblwiLFxuICAweDA1NGUsXG4gIFwiVmhvb2tcIixcbiAgMHgwMWIyLFxuICBcIlZtb25vc3BhY2VcIixcbiAgMHhmZjM2LFxuICBcIlZvYXJtZW5pYW5cIixcbiAgMHgwNTQ4LFxuICBcIlZzbWFsbFwiLFxuICAweGY3NzYsXG4gIFwiVnRpbGRlXCIsXG4gIDB4MWU3YyxcbiAgXCJXXCIsXG4gIDB4MDA1NyxcbiAgXCJXYWN1dGVcIixcbiAgMHgxZTgyLFxuICBcIldjaXJjbGVcIixcbiAgMHgyNGNjLFxuICBcIldjaXJjdW1mbGV4XCIsXG4gIDB4MDE3NCxcbiAgXCJXZGllcmVzaXNcIixcbiAgMHgxZTg0LFxuICBcIldkb3RhY2NlbnRcIixcbiAgMHgxZTg2LFxuICBcIldkb3RiZWxvd1wiLFxuICAweDFlODgsXG4gIFwiV2dyYXZlXCIsXG4gIDB4MWU4MCxcbiAgXCJXbW9ub3NwYWNlXCIsXG4gIDB4ZmYzNyxcbiAgXCJXc21hbGxcIixcbiAgMHhmNzc3LFxuICBcIlhcIixcbiAgMHgwMDU4LFxuICBcIlhjaXJjbGVcIixcbiAgMHgyNGNkLFxuICBcIlhkaWVyZXNpc1wiLFxuICAweDFlOGMsXG4gIFwiWGRvdGFjY2VudFwiLFxuICAweDFlOGEsXG4gIFwiWGVoYXJtZW5pYW5cIixcbiAgMHgwNTNkLFxuICBcIlhpXCIsXG4gIDB4MDM5ZSxcbiAgXCJYbW9ub3NwYWNlXCIsXG4gIDB4ZmYzOCxcbiAgXCJYc21hbGxcIixcbiAgMHhmNzc4LFxuICBcIllcIixcbiAgMHgwMDU5LFxuICBcIllhY3V0ZVwiLFxuICAweDAwZGQsXG4gIFwiWWFjdXRlc21hbGxcIixcbiAgMHhmN2ZkLFxuICBcIllhdGN5cmlsbGljXCIsXG4gIDB4MDQ2MixcbiAgXCJZY2lyY2xlXCIsXG4gIDB4MjRjZSxcbiAgXCJZY2lyY3VtZmxleFwiLFxuICAweDAxNzYsXG4gIFwiWWRpZXJlc2lzXCIsXG4gIDB4MDE3OCxcbiAgXCJZZGllcmVzaXNzbWFsbFwiLFxuICAweGY3ZmYsXG4gIFwiWWRvdGFjY2VudFwiLFxuICAweDFlOGUsXG4gIFwiWWRvdGJlbG93XCIsXG4gIDB4MWVmNCxcbiAgXCJZZXJpY3lyaWxsaWNcIixcbiAgMHgwNDJiLFxuICBcIlllcnVkaWVyZXNpc2N5cmlsbGljXCIsXG4gIDB4MDRmOCxcbiAgXCJZZ3JhdmVcIixcbiAgMHgxZWYyLFxuICBcIllob29rXCIsXG4gIDB4MDFiMyxcbiAgXCJZaG9va2Fib3ZlXCIsXG4gIDB4MWVmNixcbiAgXCJZaWFybWVuaWFuXCIsXG4gIDB4MDU0NSxcbiAgXCJZaWN5cmlsbGljXCIsXG4gIDB4MDQwNyxcbiAgXCJZaXduYXJtZW5pYW5cIixcbiAgMHgwNTUyLFxuICBcIlltb25vc3BhY2VcIixcbiAgMHhmZjM5LFxuICBcIllzbWFsbFwiLFxuICAweGY3NzksXG4gIFwiWXRpbGRlXCIsXG4gIDB4MWVmOCxcbiAgXCJZdXNiaWdjeXJpbGxpY1wiLFxuICAweDA0NmEsXG4gIFwiWXVzYmlnaW90aWZpZWRjeXJpbGxpY1wiLFxuICAweDA0NmMsXG4gIFwiWXVzbGl0dGxlY3lyaWxsaWNcIixcbiAgMHgwNDY2LFxuICBcIll1c2xpdHRsZWlvdGlmaWVkY3lyaWxsaWNcIixcbiAgMHgwNDY4LFxuICBcIlpcIixcbiAgMHgwMDVhLFxuICBcIlphYXJtZW5pYW5cIixcbiAgMHgwNTM2LFxuICBcIlphY3V0ZVwiLFxuICAweDAxNzksXG4gIFwiWmNhcm9uXCIsXG4gIDB4MDE3ZCxcbiAgXCJaY2Fyb25zbWFsbFwiLFxuICAweGY2ZmYsXG4gIFwiWmNpcmNsZVwiLFxuICAweDI0Y2YsXG4gIFwiWmNpcmN1bWZsZXhcIixcbiAgMHgxZTkwLFxuICBcIlpkb3RcIixcbiAgMHgwMTdiLFxuICBcIlpkb3RhY2NlbnRcIixcbiAgMHgwMTdiLFxuICBcIlpkb3RiZWxvd1wiLFxuICAweDFlOTIsXG4gIFwiWmVjeXJpbGxpY1wiLFxuICAweDA0MTcsXG4gIFwiWmVkZXNjZW5kZXJjeXJpbGxpY1wiLFxuICAweDA0OTgsXG4gIFwiWmVkaWVyZXNpc2N5cmlsbGljXCIsXG4gIDB4MDRkZSxcbiAgXCJaZXRhXCIsXG4gIDB4MDM5NixcbiAgXCJaaGVhcm1lbmlhblwiLFxuICAweDA1M2EsXG4gIFwiWmhlYnJldmVjeXJpbGxpY1wiLFxuICAweDA0YzEsXG4gIFwiWmhlY3lyaWxsaWNcIixcbiAgMHgwNDE2LFxuICBcIlpoZWRlc2NlbmRlcmN5cmlsbGljXCIsXG4gIDB4MDQ5NixcbiAgXCJaaGVkaWVyZXNpc2N5cmlsbGljXCIsXG4gIDB4MDRkYyxcbiAgXCJabGluZWJlbG93XCIsXG4gIDB4MWU5NCxcbiAgXCJabW9ub3NwYWNlXCIsXG4gIDB4ZmYzYSxcbiAgXCJac21hbGxcIixcbiAgMHhmNzdhLFxuICBcIlpzdHJva2VcIixcbiAgMHgwMWI1LFxuICBcImFcIixcbiAgMHgwMDYxLFxuICBcImFhYmVuZ2FsaVwiLFxuICAweDA5ODYsXG4gIFwiYWFjdXRlXCIsXG4gIDB4MDBlMSxcbiAgXCJhYWRldmFcIixcbiAgMHgwOTA2LFxuICBcImFhZ3VqYXJhdGlcIixcbiAgMHgwYTg2LFxuICBcImFhZ3VybXVraGlcIixcbiAgMHgwYTA2LFxuICBcImFhbWF0cmFndXJtdWtoaVwiLFxuICAweDBhM2UsXG4gIFwiYWFydXNxdWFyZVwiLFxuICAweDMzMDMsXG4gIFwiYWF2b3dlbHNpZ25iZW5nYWxpXCIsXG4gIDB4MDliZSxcbiAgXCJhYXZvd2Vsc2lnbmRldmFcIixcbiAgMHgwOTNlLFxuICBcImFhdm93ZWxzaWduZ3VqYXJhdGlcIixcbiAgMHgwYWJlLFxuICBcImFiYnJldmlhdGlvbm1hcmthcm1lbmlhblwiLFxuICAweDA1NWYsXG4gIFwiYWJicmV2aWF0aW9uc2lnbmRldmFcIixcbiAgMHgwOTcwLFxuICBcImFiZW5nYWxpXCIsXG4gIDB4MDk4NSxcbiAgXCJhYm9wb21vZm9cIixcbiAgMHgzMTFhLFxuICBcImFicmV2ZVwiLFxuICAweDAxMDMsXG4gIFwiYWJyZXZlYWN1dGVcIixcbiAgMHgxZWFmLFxuICBcImFicmV2ZWN5cmlsbGljXCIsXG4gIDB4MDRkMSxcbiAgXCJhYnJldmVkb3RiZWxvd1wiLFxuICAweDFlYjcsXG4gIFwiYWJyZXZlZ3JhdmVcIixcbiAgMHgxZWIxLFxuICBcImFicmV2ZWhvb2thYm92ZVwiLFxuICAweDFlYjMsXG4gIFwiYWJyZXZldGlsZGVcIixcbiAgMHgxZWI1LFxuICBcImFjYXJvblwiLFxuICAweDAxY2UsXG4gIFwiYWNpcmNsZVwiLFxuICAweDI0ZDAsXG4gIFwiYWNpcmN1bWZsZXhcIixcbiAgMHgwMGUyLFxuICBcImFjaXJjdW1mbGV4YWN1dGVcIixcbiAgMHgxZWE1LFxuICBcImFjaXJjdW1mbGV4ZG90YmVsb3dcIixcbiAgMHgxZWFkLFxuICBcImFjaXJjdW1mbGV4Z3JhdmVcIixcbiAgMHgxZWE3LFxuICBcImFjaXJjdW1mbGV4aG9va2Fib3ZlXCIsXG4gIDB4MWVhOSxcbiAgXCJhY2lyY3VtZmxleHRpbGRlXCIsXG4gIDB4MWVhYixcbiAgXCJhY3V0ZVwiLFxuICAweDAwYjQsXG4gIFwiYWN1dGViZWxvd2NtYlwiLFxuICAweDAzMTcsXG4gIFwiYWN1dGVjbWJcIixcbiAgMHgwMzAxLFxuICBcImFjdXRlY29tYlwiLFxuICAweDAzMDEsXG4gIFwiYWN1dGVkZXZhXCIsXG4gIDB4MDk1NCxcbiAgXCJhY3V0ZWxvd21vZFwiLFxuICAweDAyY2YsXG4gIFwiYWN1dGV0b25lY21iXCIsXG4gIDB4MDM0MSxcbiAgXCJhY3lyaWxsaWNcIixcbiAgMHgwNDMwLFxuICBcImFkYmxncmF2ZVwiLFxuICAweDAyMDEsXG4gIFwiYWRkYWtndXJtdWtoaVwiLFxuICAweDBhNzEsXG4gIFwiYWRldmFcIixcbiAgMHgwOTA1LFxuICBcImFkaWVyZXNpc1wiLFxuICAweDAwZTQsXG4gIFwiYWRpZXJlc2lzY3lyaWxsaWNcIixcbiAgMHgwNGQzLFxuICBcImFkaWVyZXNpc21hY3JvblwiLFxuICAweDAxZGYsXG4gIFwiYWRvdGJlbG93XCIsXG4gIDB4MWVhMSxcbiAgXCJhZG90bWFjcm9uXCIsXG4gIDB4MDFlMSxcbiAgXCJhZVwiLFxuICAweDAwZTYsXG4gIFwiYWVhY3V0ZVwiLFxuICAweDAxZmQsXG4gIFwiYWVrb3JlYW5cIixcbiAgMHgzMTUwLFxuICBcImFlbWFjcm9uXCIsXG4gIDB4MDFlMyxcbiAgXCJhZmlpMDAyMDhcIixcbiAgMHgyMDE1LFxuICBcImFmaWkwODk0MVwiLFxuICAweDIwYTQsXG4gIFwiYWZpaTEwMDE3XCIsXG4gIDB4MDQxMCxcbiAgXCJhZmlpMTAwMThcIixcbiAgMHgwNDExLFxuICBcImFmaWkxMDAxOVwiLFxuICAweDA0MTIsXG4gIFwiYWZpaTEwMDIwXCIsXG4gIDB4MDQxMyxcbiAgXCJhZmlpMTAwMjFcIixcbiAgMHgwNDE0LFxuICBcImFmaWkxMDAyMlwiLFxuICAweDA0MTUsXG4gIFwiYWZpaTEwMDIzXCIsXG4gIDB4MDQwMSxcbiAgXCJhZmlpMTAwMjRcIixcbiAgMHgwNDE2LFxuICBcImFmaWkxMDAyNVwiLFxuICAweDA0MTcsXG4gIFwiYWZpaTEwMDI2XCIsXG4gIDB4MDQxOCxcbiAgXCJhZmlpMTAwMjdcIixcbiAgMHgwNDE5LFxuICBcImFmaWkxMDAyOFwiLFxuICAweDA0MWEsXG4gIFwiYWZpaTEwMDI5XCIsXG4gIDB4MDQxYixcbiAgXCJhZmlpMTAwMzBcIixcbiAgMHgwNDFjLFxuICBcImFmaWkxMDAzMVwiLFxuICAweDA0MWQsXG4gIFwiYWZpaTEwMDMyXCIsXG4gIDB4MDQxZSxcbiAgXCJhZmlpMTAwMzNcIixcbiAgMHgwNDFmLFxuICBcImFmaWkxMDAzNFwiLFxuICAweDA0MjAsXG4gIFwiYWZpaTEwMDM1XCIsXG4gIDB4MDQyMSxcbiAgXCJhZmlpMTAwMzZcIixcbiAgMHgwNDIyLFxuICBcImFmaWkxMDAzN1wiLFxuICAweDA0MjMsXG4gIFwiYWZpaTEwMDM4XCIsXG4gIDB4MDQyNCxcbiAgXCJhZmlpMTAwMzlcIixcbiAgMHgwNDI1LFxuICBcImFmaWkxMDA0MFwiLFxuICAweDA0MjYsXG4gIFwiYWZpaTEwMDQxXCIsXG4gIDB4MDQyNyxcbiAgXCJhZmlpMTAwNDJcIixcbiAgMHgwNDI4LFxuICBcImFmaWkxMDA0M1wiLFxuICAweDA0MjksXG4gIFwiYWZpaTEwMDQ0XCIsXG4gIDB4MDQyYSxcbiAgXCJhZmlpMTAwNDVcIixcbiAgMHgwNDJiLFxuICBcImFmaWkxMDA0NlwiLFxuICAweDA0MmMsXG4gIFwiYWZpaTEwMDQ3XCIsXG4gIDB4MDQyZCxcbiAgXCJhZmlpMTAwNDhcIixcbiAgMHgwNDJlLFxuICBcImFmaWkxMDA0OVwiLFxuICAweDA0MmYsXG4gIFwiYWZpaTEwMDUwXCIsXG4gIDB4MDQ5MCxcbiAgXCJhZmlpMTAwNTFcIixcbiAgMHgwNDAyLFxuICBcImFmaWkxMDA1MlwiLFxuICAweDA0MDMsXG4gIFwiYWZpaTEwMDUzXCIsXG4gIDB4MDQwNCxcbiAgXCJhZmlpMTAwNTRcIixcbiAgMHgwNDA1LFxuICBcImFmaWkxMDA1NVwiLFxuICAweDA0MDYsXG4gIFwiYWZpaTEwMDU2XCIsXG4gIDB4MDQwNyxcbiAgXCJhZmlpMTAwNTdcIixcbiAgMHgwNDA4LFxuICBcImFmaWkxMDA1OFwiLFxuICAweDA0MDksXG4gIFwiYWZpaTEwMDU5XCIsXG4gIDB4MDQwYSxcbiAgXCJhZmlpMTAwNjBcIixcbiAgMHgwNDBiLFxuICBcImFmaWkxMDA2MVwiLFxuICAweDA0MGMsXG4gIFwiYWZpaTEwMDYyXCIsXG4gIDB4MDQwZSxcbiAgXCJhZmlpMTAwNjNcIixcbiAgMHhmNmM0LFxuICBcImFmaWkxMDA2NFwiLFxuICAweGY2YzUsXG4gIFwiYWZpaTEwMDY1XCIsXG4gIDB4MDQzMCxcbiAgXCJhZmlpMTAwNjZcIixcbiAgMHgwNDMxLFxuICBcImFmaWkxMDA2N1wiLFxuICAweDA0MzIsXG4gIFwiYWZpaTEwMDY4XCIsXG4gIDB4MDQzMyxcbiAgXCJhZmlpMTAwNjlcIixcbiAgMHgwNDM0LFxuICBcImFmaWkxMDA3MFwiLFxuICAweDA0MzUsXG4gIFwiYWZpaTEwMDcxXCIsXG4gIDB4MDQ1MSxcbiAgXCJhZmlpMTAwNzJcIixcbiAgMHgwNDM2LFxuICBcImFmaWkxMDA3M1wiLFxuICAweDA0MzcsXG4gIFwiYWZpaTEwMDc0XCIsXG4gIDB4MDQzOCxcbiAgXCJhZmlpMTAwNzVcIixcbiAgMHgwNDM5LFxuICBcImFmaWkxMDA3NlwiLFxuICAweDA0M2EsXG4gIFwiYWZpaTEwMDc3XCIsXG4gIDB4MDQzYixcbiAgXCJhZmlpMTAwNzhcIixcbiAgMHgwNDNjLFxuICBcImFmaWkxMDA3OVwiLFxuICAweDA0M2QsXG4gIFwiYWZpaTEwMDgwXCIsXG4gIDB4MDQzZSxcbiAgXCJhZmlpMTAwODFcIixcbiAgMHgwNDNmLFxuICBcImFmaWkxMDA4MlwiLFxuICAweDA0NDAsXG4gIFwiYWZpaTEwMDgzXCIsXG4gIDB4MDQ0MSxcbiAgXCJhZmlpMTAwODRcIixcbiAgMHgwNDQyLFxuICBcImFmaWkxMDA4NVwiLFxuICAweDA0NDMsXG4gIFwiYWZpaTEwMDg2XCIsXG4gIDB4MDQ0NCxcbiAgXCJhZmlpMTAwODdcIixcbiAgMHgwNDQ1LFxuICBcImFmaWkxMDA4OFwiLFxuICAweDA0NDYsXG4gIFwiYWZpaTEwMDg5XCIsXG4gIDB4MDQ0NyxcbiAgXCJhZmlpMTAwOTBcIixcbiAgMHgwNDQ4LFxuICBcImFmaWkxMDA5MVwiLFxuICAweDA0NDksXG4gIFwiYWZpaTEwMDkyXCIsXG4gIDB4MDQ0YSxcbiAgXCJhZmlpMTAwOTNcIixcbiAgMHgwNDRiLFxuICBcImFmaWkxMDA5NFwiLFxuICAweDA0NGMsXG4gIFwiYWZpaTEwMDk1XCIsXG4gIDB4MDQ0ZCxcbiAgXCJhZmlpMTAwOTZcIixcbiAgMHgwNDRlLFxuICBcImFmaWkxMDA5N1wiLFxuICAweDA0NGYsXG4gIFwiYWZpaTEwMDk4XCIsXG4gIDB4MDQ5MSxcbiAgXCJhZmlpMTAwOTlcIixcbiAgMHgwNDUyLFxuICBcImFmaWkxMDEwMFwiLFxuICAweDA0NTMsXG4gIFwiYWZpaTEwMTAxXCIsXG4gIDB4MDQ1NCxcbiAgXCJhZmlpMTAxMDJcIixcbiAgMHgwNDU1LFxuICBcImFmaWkxMDEwM1wiLFxuICAweDA0NTYsXG4gIFwiYWZpaTEwMTA0XCIsXG4gIDB4MDQ1NyxcbiAgXCJhZmlpMTAxMDVcIixcbiAgMHgwNDU4LFxuICBcImFmaWkxMDEwNlwiLFxuICAweDA0NTksXG4gIFwiYWZpaTEwMTA3XCIsXG4gIDB4MDQ1YSxcbiAgXCJhZmlpMTAxMDhcIixcbiAgMHgwNDViLFxuICBcImFmaWkxMDEwOVwiLFxuICAweDA0NWMsXG4gIFwiYWZpaTEwMTEwXCIsXG4gIDB4MDQ1ZSxcbiAgXCJhZmlpMTAxNDVcIixcbiAgMHgwNDBmLFxuICBcImFmaWkxMDE0NlwiLFxuICAweDA0NjIsXG4gIFwiYWZpaTEwMTQ3XCIsXG4gIDB4MDQ3MixcbiAgXCJhZmlpMTAxNDhcIixcbiAgMHgwNDc0LFxuICBcImFmaWkxMDE5MlwiLFxuICAweGY2YzYsXG4gIFwiYWZpaTEwMTkzXCIsXG4gIDB4MDQ1ZixcbiAgXCJhZmlpMTAxOTRcIixcbiAgMHgwNDYzLFxuICBcImFmaWkxMDE5NVwiLFxuICAweDA0NzMsXG4gIFwiYWZpaTEwMTk2XCIsXG4gIDB4MDQ3NSxcbiAgXCJhZmlpMTA4MzFcIixcbiAgMHhmNmM3LFxuICBcImFmaWkxMDgzMlwiLFxuICAweGY2YzgsXG4gIFwiYWZpaTEwODQ2XCIsXG4gIDB4MDRkOSxcbiAgXCJhZmlpMjk5XCIsXG4gIDB4MjAwZSxcbiAgXCJhZmlpMzAwXCIsXG4gIDB4MjAwZixcbiAgXCJhZmlpMzAxXCIsXG4gIDB4MjAwZCxcbiAgXCJhZmlpNTczODFcIixcbiAgMHgwNjZhLFxuICBcImFmaWk1NzM4OFwiLFxuICAweDA2MGMsXG4gIFwiYWZpaTU3MzkyXCIsXG4gIDB4MDY2MCxcbiAgXCJhZmlpNTczOTNcIixcbiAgMHgwNjYxLFxuICBcImFmaWk1NzM5NFwiLFxuICAweDA2NjIsXG4gIFwiYWZpaTU3Mzk1XCIsXG4gIDB4MDY2MyxcbiAgXCJhZmlpNTczOTZcIixcbiAgMHgwNjY0LFxuICBcImFmaWk1NzM5N1wiLFxuICAweDA2NjUsXG4gIFwiYWZpaTU3Mzk4XCIsXG4gIDB4MDY2NixcbiAgXCJhZmlpNTczOTlcIixcbiAgMHgwNjY3LFxuICBcImFmaWk1NzQwMFwiLFxuICAweDA2NjgsXG4gIFwiYWZpaTU3NDAxXCIsXG4gIDB4MDY2OSxcbiAgXCJhZmlpNTc0MDNcIixcbiAgMHgwNjFiLFxuICBcImFmaWk1NzQwN1wiLFxuICAweDA2MWYsXG4gIFwiYWZpaTU3NDA5XCIsXG4gIDB4MDYyMSxcbiAgXCJhZmlpNTc0MTBcIixcbiAgMHgwNjIyLFxuICBcImFmaWk1NzQxMVwiLFxuICAweDA2MjMsXG4gIFwiYWZpaTU3NDEyXCIsXG4gIDB4MDYyNCxcbiAgXCJhZmlpNTc0MTNcIixcbiAgMHgwNjI1LFxuICBcImFmaWk1NzQxNFwiLFxuICAweDA2MjYsXG4gIFwiYWZpaTU3NDE1XCIsXG4gIDB4MDYyNyxcbiAgXCJhZmlpNTc0MTZcIixcbiAgMHgwNjI4LFxuICBcImFmaWk1NzQxN1wiLFxuICAweDA2MjksXG4gIFwiYWZpaTU3NDE4XCIsXG4gIDB4MDYyYSxcbiAgXCJhZmlpNTc0MTlcIixcbiAgMHgwNjJiLFxuICBcImFmaWk1NzQyMFwiLFxuICAweDA2MmMsXG4gIFwiYWZpaTU3NDIxXCIsXG4gIDB4MDYyZCxcbiAgXCJhZmlpNTc0MjJcIixcbiAgMHgwNjJlLFxuICBcImFmaWk1NzQyM1wiLFxuICAweDA2MmYsXG4gIFwiYWZpaTU3NDI0XCIsXG4gIDB4MDYzMCxcbiAgXCJhZmlpNTc0MjVcIixcbiAgMHgwNjMxLFxuICBcImFmaWk1NzQyNlwiLFxuICAweDA2MzIsXG4gIFwiYWZpaTU3NDI3XCIsXG4gIDB4MDYzMyxcbiAgXCJhZmlpNTc0MjhcIixcbiAgMHgwNjM0LFxuICBcImFmaWk1NzQyOVwiLFxuICAweDA2MzUsXG4gIFwiYWZpaTU3NDMwXCIsXG4gIDB4MDYzNixcbiAgXCJhZmlpNTc0MzFcIixcbiAgMHgwNjM3LFxuICBcImFmaWk1NzQzMlwiLFxuICAweDA2MzgsXG4gIFwiYWZpaTU3NDMzXCIsXG4gIDB4MDYzOSxcbiAgXCJhZmlpNTc0MzRcIixcbiAgMHgwNjNhLFxuICBcImFmaWk1NzQ0MFwiLFxuICAweDA2NDAsXG4gIFwiYWZpaTU3NDQxXCIsXG4gIDB4MDY0MSxcbiAgXCJhZmlpNTc0NDJcIixcbiAgMHgwNjQyLFxuICBcImFmaWk1NzQ0M1wiLFxuICAweDA2NDMsXG4gIFwiYWZpaTU3NDQ0XCIsXG4gIDB4MDY0NCxcbiAgXCJhZmlpNTc0NDVcIixcbiAgMHgwNjQ1LFxuICBcImFmaWk1NzQ0NlwiLFxuICAweDA2NDYsXG4gIFwiYWZpaTU3NDQ4XCIsXG4gIDB4MDY0OCxcbiAgXCJhZmlpNTc0NDlcIixcbiAgMHgwNjQ5LFxuICBcImFmaWk1NzQ1MFwiLFxuICAweDA2NGEsXG4gIFwiYWZpaTU3NDUxXCIsXG4gIDB4MDY0YixcbiAgXCJhZmlpNTc0NTJcIixcbiAgMHgwNjRjLFxuICBcImFmaWk1NzQ1M1wiLFxuICAweDA2NGQsXG4gIFwiYWZpaTU3NDU0XCIsXG4gIDB4MDY0ZSxcbiAgXCJhZmlpNTc0NTVcIixcbiAgMHgwNjRmLFxuICBcImFmaWk1NzQ1NlwiLFxuICAweDA2NTAsXG4gIFwiYWZpaTU3NDU3XCIsXG4gIDB4MDY1MSxcbiAgXCJhZmlpNTc0NThcIixcbiAgMHgwNjUyLFxuICBcImFmaWk1NzQ3MFwiLFxuICAweDA2NDcsXG4gIFwiYWZpaTU3NTA1XCIsXG4gIDB4MDZhNCxcbiAgXCJhZmlpNTc1MDZcIixcbiAgMHgwNjdlLFxuICBcImFmaWk1NzUwN1wiLFxuICAweDA2ODYsXG4gIFwiYWZpaTU3NTA4XCIsXG4gIDB4MDY5OCxcbiAgXCJhZmlpNTc1MDlcIixcbiAgMHgwNmFmLFxuICBcImFmaWk1NzUxMVwiLFxuICAweDA2NzksXG4gIFwiYWZpaTU3NTEyXCIsXG4gIDB4MDY4OCxcbiAgXCJhZmlpNTc1MTNcIixcbiAgMHgwNjkxLFxuICBcImFmaWk1NzUxNFwiLFxuICAweDA2YmEsXG4gIFwiYWZpaTU3NTE5XCIsXG4gIDB4MDZkMixcbiAgXCJhZmlpNTc1MzRcIixcbiAgMHgwNmQ1LFxuICBcImFmaWk1NzYzNlwiLFxuICAweDIwYWEsXG4gIFwiYWZpaTU3NjQ1XCIsXG4gIDB4MDViZSxcbiAgXCJhZmlpNTc2NThcIixcbiAgMHgwNWMzLFxuICBcImFmaWk1NzY2NFwiLFxuICAweDA1ZDAsXG4gIFwiYWZpaTU3NjY1XCIsXG4gIDB4MDVkMSxcbiAgXCJhZmlpNTc2NjZcIixcbiAgMHgwNWQyLFxuICBcImFmaWk1NzY2N1wiLFxuICAweDA1ZDMsXG4gIFwiYWZpaTU3NjY4XCIsXG4gIDB4MDVkNCxcbiAgXCJhZmlpNTc2NjlcIixcbiAgMHgwNWQ1LFxuICBcImFmaWk1NzY3MFwiLFxuICAweDA1ZDYsXG4gIFwiYWZpaTU3NjcxXCIsXG4gIDB4MDVkNyxcbiAgXCJhZmlpNTc2NzJcIixcbiAgMHgwNWQ4LFxuICBcImFmaWk1NzY3M1wiLFxuICAweDA1ZDksXG4gIFwiYWZpaTU3Njc0XCIsXG4gIDB4MDVkYSxcbiAgXCJhZmlpNTc2NzVcIixcbiAgMHgwNWRiLFxuICBcImFmaWk1NzY3NlwiLFxuICAweDA1ZGMsXG4gIFwiYWZpaTU3Njc3XCIsXG4gIDB4MDVkZCxcbiAgXCJhZmlpNTc2NzhcIixcbiAgMHgwNWRlLFxuICBcImFmaWk1NzY3OVwiLFxuICAweDA1ZGYsXG4gIFwiYWZpaTU3NjgwXCIsXG4gIDB4MDVlMCxcbiAgXCJhZmlpNTc2ODFcIixcbiAgMHgwNWUxLFxuICBcImFmaWk1NzY4MlwiLFxuICAweDA1ZTIsXG4gIFwiYWZpaTU3NjgzXCIsXG4gIDB4MDVlMyxcbiAgXCJhZmlpNTc2ODRcIixcbiAgMHgwNWU0LFxuICBcImFmaWk1NzY4NVwiLFxuICAweDA1ZTUsXG4gIFwiYWZpaTU3Njg2XCIsXG4gIDB4MDVlNixcbiAgXCJhZmlpNTc2ODdcIixcbiAgMHgwNWU3LFxuICBcImFmaWk1NzY4OFwiLFxuICAweDA1ZTgsXG4gIFwiYWZpaTU3Njg5XCIsXG4gIDB4MDVlOSxcbiAgXCJhZmlpNTc2OTBcIixcbiAgMHgwNWVhLFxuICBcImFmaWk1NzY5NFwiLFxuICAweGZiMmEsXG4gIFwiYWZpaTU3Njk1XCIsXG4gIDB4ZmIyYixcbiAgXCJhZmlpNTc3MDBcIixcbiAgMHhmYjRiLFxuICBcImFmaWk1NzcwNVwiLFxuICAweGZiMWYsXG4gIFwiYWZpaTU3NzE2XCIsXG4gIDB4MDVmMCxcbiAgXCJhZmlpNTc3MTdcIixcbiAgMHgwNWYxLFxuICBcImFmaWk1NzcxOFwiLFxuICAweDA1ZjIsXG4gIFwiYWZpaTU3NzIzXCIsXG4gIDB4ZmIzNSxcbiAgXCJhZmlpNTc3OTNcIixcbiAgMHgwNWI0LFxuICBcImFmaWk1Nzc5NFwiLFxuICAweDA1YjUsXG4gIFwiYWZpaTU3Nzk1XCIsXG4gIDB4MDViNixcbiAgXCJhZmlpNTc3OTZcIixcbiAgMHgwNWJiLFxuICBcImFmaWk1Nzc5N1wiLFxuICAweDA1YjgsXG4gIFwiYWZpaTU3Nzk4XCIsXG4gIDB4MDViNyxcbiAgXCJhZmlpNTc3OTlcIixcbiAgMHgwNWIwLFxuICBcImFmaWk1NzgwMFwiLFxuICAweDA1YjIsXG4gIFwiYWZpaTU3ODAxXCIsXG4gIDB4MDViMSxcbiAgXCJhZmlpNTc4MDJcIixcbiAgMHgwNWIzLFxuICBcImFmaWk1NzgwM1wiLFxuICAweDA1YzIsXG4gIFwiYWZpaTU3ODA0XCIsXG4gIDB4MDVjMSxcbiAgXCJhZmlpNTc4MDZcIixcbiAgMHgwNWI5LFxuICBcImFmaWk1NzgwN1wiLFxuICAweDA1YmMsXG4gIFwiYWZpaTU3ODM5XCIsXG4gIDB4MDViZCxcbiAgXCJhZmlpNTc4NDFcIixcbiAgMHgwNWJmLFxuICBcImFmaWk1Nzg0MlwiLFxuICAweDA1YzAsXG4gIFwiYWZpaTU3OTI5XCIsXG4gIDB4MDJiYyxcbiAgXCJhZmlpNjEyNDhcIixcbiAgMHgyMTA1LFxuICBcImFmaWk2MTI4OVwiLFxuICAweDIxMTMsXG4gIFwiYWZpaTYxMzUyXCIsXG4gIDB4MjExNixcbiAgXCJhZmlpNjE1NzNcIixcbiAgMHgyMDJjLFxuICBcImFmaWk2MTU3NFwiLFxuICAweDIwMmQsXG4gIFwiYWZpaTYxNTc1XCIsXG4gIDB4MjAyZSxcbiAgXCJhZmlpNjE2NjRcIixcbiAgMHgyMDBjLFxuICBcImFmaWk2MzE2N1wiLFxuICAweDA2NmQsXG4gIFwiYWZpaTY0OTM3XCIsXG4gIDB4MDJiZCxcbiAgXCJhZ3JhdmVcIixcbiAgMHgwMGUwLFxuICBcImFndWphcmF0aVwiLFxuICAweDBhODUsXG4gIFwiYWd1cm11a2hpXCIsXG4gIDB4MGEwNSxcbiAgXCJhaGlyYWdhbmFcIixcbiAgMHgzMDQyLFxuICBcImFob29rYWJvdmVcIixcbiAgMHgxZWEzLFxuICBcImFpYmVuZ2FsaVwiLFxuICAweDA5OTAsXG4gIFwiYWlib3BvbW9mb1wiLFxuICAweDMxMWUsXG4gIFwiYWlkZXZhXCIsXG4gIDB4MDkxMCxcbiAgXCJhaWVjeXJpbGxpY1wiLFxuICAweDA0ZDUsXG4gIFwiYWlndWphcmF0aVwiLFxuICAweDBhOTAsXG4gIFwiYWlndXJtdWtoaVwiLFxuICAweDBhMTAsXG4gIFwiYWltYXRyYWd1cm11a2hpXCIsXG4gIDB4MGE0OCxcbiAgXCJhaW5hcmFiaWNcIixcbiAgMHgwNjM5LFxuICBcImFpbmZpbmFsYXJhYmljXCIsXG4gIDB4ZmVjYSxcbiAgXCJhaW5pbml0aWFsYXJhYmljXCIsXG4gIDB4ZmVjYixcbiAgXCJhaW5tZWRpYWxhcmFiaWNcIixcbiAgMHhmZWNjLFxuICBcImFpbnZlcnRlZGJyZXZlXCIsXG4gIDB4MDIwMyxcbiAgXCJhaXZvd2Vsc2lnbmJlbmdhbGlcIixcbiAgMHgwOWM4LFxuICBcImFpdm93ZWxzaWduZGV2YVwiLFxuICAweDA5NDgsXG4gIFwiYWl2b3dlbHNpZ25ndWphcmF0aVwiLFxuICAweDBhYzgsXG4gIFwiYWthdGFrYW5hXCIsXG4gIDB4MzBhMixcbiAgXCJha2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjcxLFxuICBcImFrb3JlYW5cIixcbiAgMHgzMTRmLFxuICBcImFsZWZcIixcbiAgMHgwNWQwLFxuICBcImFsZWZhcmFiaWNcIixcbiAgMHgwNjI3LFxuICBcImFsZWZkYWdlc2hoZWJyZXdcIixcbiAgMHhmYjMwLFxuICBcImFsZWZmaW5hbGFyYWJpY1wiLFxuICAweGZlOGUsXG4gIFwiYWxlZmhhbXphYWJvdmVhcmFiaWNcIixcbiAgMHgwNjIzLFxuICBcImFsZWZoYW16YWFib3ZlZmluYWxhcmFiaWNcIixcbiAgMHhmZTg0LFxuICBcImFsZWZoYW16YWJlbG93YXJhYmljXCIsXG4gIDB4MDYyNSxcbiAgXCJhbGVmaGFtemFiZWxvd2ZpbmFsYXJhYmljXCIsXG4gIDB4ZmU4OCxcbiAgXCJhbGVmaGVicmV3XCIsXG4gIDB4MDVkMCxcbiAgXCJhbGVmbGFtZWRoZWJyZXdcIixcbiAgMHhmYjRmLFxuICBcImFsZWZtYWRkYWFib3ZlYXJhYmljXCIsXG4gIDB4MDYyMixcbiAgXCJhbGVmbWFkZGFhYm92ZWZpbmFsYXJhYmljXCIsXG4gIDB4ZmU4MixcbiAgXCJhbGVmbWFrc3VyYWFyYWJpY1wiLFxuICAweDA2NDksXG4gIFwiYWxlZm1ha3N1cmFmaW5hbGFyYWJpY1wiLFxuICAweGZlZjAsXG4gIFwiYWxlZm1ha3N1cmFpbml0aWFsYXJhYmljXCIsXG4gIDB4ZmVmMyxcbiAgXCJhbGVmbWFrc3VyYW1lZGlhbGFyYWJpY1wiLFxuICAweGZlZjQsXG4gIFwiYWxlZnBhdGFoaGVicmV3XCIsXG4gIDB4ZmIyZSxcbiAgXCJhbGVmcWFtYXRzaGVicmV3XCIsXG4gIDB4ZmIyZixcbiAgXCJhbGVwaFwiLFxuICAweDIxMzUsXG4gIFwiYWxsZXF1YWxcIixcbiAgMHgyMjRjLFxuICBcImFscGhhXCIsXG4gIDB4MDNiMSxcbiAgXCJhbHBoYXRvbm9zXCIsXG4gIDB4MDNhYyxcbiAgXCJhbWFjcm9uXCIsXG4gIDB4MDEwMSxcbiAgXCJhbW9ub3NwYWNlXCIsXG4gIDB4ZmY0MSxcbiAgXCJhbXBlcnNhbmRcIixcbiAgMHgwMDI2LFxuICBcImFtcGVyc2FuZG1vbm9zcGFjZVwiLFxuICAweGZmMDYsXG4gIFwiYW1wZXJzYW5kc21hbGxcIixcbiAgMHhmNzI2LFxuICBcImFtc3F1YXJlXCIsXG4gIDB4MzNjMixcbiAgXCJhbmJvcG9tb2ZvXCIsXG4gIDB4MzEyMixcbiAgXCJhbmdib3BvbW9mb1wiLFxuICAweDMxMjQsXG4gIFwiYW5nYnJhY2tldGxlZnRcIixcbiAgMHgzMDA4LFxuICBcImFuZ2JyYWNrZXRyaWdodFwiLFxuICAweDMwMDksXG4gIFwiYW5na2hhbmtodXRoYWlcIixcbiAgMHgwZTVhLFxuICBcImFuZ2xlXCIsXG4gIDB4MjIyMCxcbiAgXCJhbmdsZWJyYWNrZXRsZWZ0XCIsXG4gIDB4MzAwOCxcbiAgXCJhbmdsZWJyYWNrZXRsZWZ0dmVydGljYWxcIixcbiAgMHhmZTNmLFxuICBcImFuZ2xlYnJhY2tldHJpZ2h0XCIsXG4gIDB4MzAwOSxcbiAgXCJhbmdsZWJyYWNrZXRyaWdodHZlcnRpY2FsXCIsXG4gIDB4ZmU0MCxcbiAgXCJhbmdsZWxlZnRcIixcbiAgMHgyMzI5LFxuICBcImFuZ2xlcmlnaHRcIixcbiAgMHgyMzJhLFxuICBcImFuZ3N0cm9tXCIsXG4gIDB4MjEyYixcbiAgXCJhbm90ZWxlaWFcIixcbiAgMHgwMzg3LFxuICBcImFudWRhdHRhZGV2YVwiLFxuICAweDA5NTIsXG4gIFwiYW51c3ZhcmFiZW5nYWxpXCIsXG4gIDB4MDk4MixcbiAgXCJhbnVzdmFyYWRldmFcIixcbiAgMHgwOTAyLFxuICBcImFudXN2YXJhZ3VqYXJhdGlcIixcbiAgMHgwYTgyLFxuICBcImFvZ29uZWtcIixcbiAgMHgwMTA1LFxuICBcImFwYWF0b3NxdWFyZVwiLFxuICAweDMzMDAsXG4gIFwiYXBhcmVuXCIsXG4gIDB4MjQ5YyxcbiAgXCJhcG9zdHJvcGhlYXJtZW5pYW5cIixcbiAgMHgwNTVhLFxuICBcImFwb3N0cm9waGVtb2RcIixcbiAgMHgwMmJjLFxuICBcImFwcGxlXCIsXG4gIDB4ZjhmZixcbiAgXCJhcHByb2FjaGVzXCIsXG4gIDB4MjI1MCxcbiAgXCJhcHByb3hlcXVhbFwiLFxuICAweDIyNDgsXG4gIFwiYXBwcm94ZXF1YWxvcmltYWdlXCIsXG4gIDB4MjI1MixcbiAgXCJhcHByb3hpbWF0ZWx5ZXF1YWxcIixcbiAgMHgyMjQ1LFxuICBcImFyYWVhZWtvcmVhblwiLFxuICAweDMxOGUsXG4gIFwiYXJhZWFrb3JlYW5cIixcbiAgMHgzMThkLFxuICBcImFyY1wiLFxuICAweDIzMTIsXG4gIFwiYXJpZ2h0aGFsZnJpbmdcIixcbiAgMHgxZTlhLFxuICBcImFyaW5nXCIsXG4gIDB4MDBlNSxcbiAgXCJhcmluZ2FjdXRlXCIsXG4gIDB4MDFmYixcbiAgXCJhcmluZ2JlbG93XCIsXG4gIDB4MWUwMSxcbiAgXCJhcnJvd2JvdGhcIixcbiAgMHgyMTk0LFxuICBcImFycm93ZGFzaGRvd25cIixcbiAgMHgyMWUzLFxuICBcImFycm93ZGFzaGxlZnRcIixcbiAgMHgyMWUwLFxuICBcImFycm93ZGFzaHJpZ2h0XCIsXG4gIDB4MjFlMixcbiAgXCJhcnJvd2Rhc2h1cFwiLFxuICAweDIxZTEsXG4gIFwiYXJyb3dkYmxib3RoXCIsXG4gIDB4MjFkNCxcbiAgXCJhcnJvd2RibGRvd25cIixcbiAgMHgyMWQzLFxuICBcImFycm93ZGJsbGVmdFwiLFxuICAweDIxZDAsXG4gIFwiYXJyb3dkYmxyaWdodFwiLFxuICAweDIxZDIsXG4gIFwiYXJyb3dkYmx1cFwiLFxuICAweDIxZDEsXG4gIFwiYXJyb3dkb3duXCIsXG4gIDB4MjE5MyxcbiAgXCJhcnJvd2Rvd25sZWZ0XCIsXG4gIDB4MjE5OSxcbiAgXCJhcnJvd2Rvd25yaWdodFwiLFxuICAweDIxOTgsXG4gIFwiYXJyb3dkb3dud2hpdGVcIixcbiAgMHgyMWU5LFxuICBcImFycm93aGVhZGRvd25tb2RcIixcbiAgMHgwMmM1LFxuICBcImFycm93aGVhZGxlZnRtb2RcIixcbiAgMHgwMmMyLFxuICBcImFycm93aGVhZHJpZ2h0bW9kXCIsXG4gIDB4MDJjMyxcbiAgXCJhcnJvd2hlYWR1cG1vZFwiLFxuICAweDAyYzQsXG4gIFwiYXJyb3dob3JpemV4XCIsXG4gIDB4ZjhlNyxcbiAgXCJhcnJvd2xlZnRcIixcbiAgMHgyMTkwLFxuICBcImFycm93bGVmdGRibFwiLFxuICAweDIxZDAsXG4gIFwiYXJyb3dsZWZ0ZGJsc3Ryb2tlXCIsXG4gIDB4MjFjZCxcbiAgXCJhcnJvd2xlZnRvdmVycmlnaHRcIixcbiAgMHgyMWM2LFxuICBcImFycm93bGVmdHdoaXRlXCIsXG4gIDB4MjFlNixcbiAgXCJhcnJvd3JpZ2h0XCIsXG4gIDB4MjE5MixcbiAgXCJhcnJvd3JpZ2h0ZGJsc3Ryb2tlXCIsXG4gIDB4MjFjZixcbiAgXCJhcnJvd3JpZ2h0aGVhdnlcIixcbiAgMHgyNzllLFxuICBcImFycm93cmlnaHRvdmVybGVmdFwiLFxuICAweDIxYzQsXG4gIFwiYXJyb3dyaWdodHdoaXRlXCIsXG4gIDB4MjFlOCxcbiAgXCJhcnJvd3RhYmxlZnRcIixcbiAgMHgyMWU0LFxuICBcImFycm93dGFicmlnaHRcIixcbiAgMHgyMWU1LFxuICBcImFycm93dXBcIixcbiAgMHgyMTkxLFxuICBcImFycm93dXBkblwiLFxuICAweDIxOTUsXG4gIFwiYXJyb3d1cGRuYnNlXCIsXG4gIDB4MjFhOCxcbiAgXCJhcnJvd3VwZG93bmJhc2VcIixcbiAgMHgyMWE4LFxuICBcImFycm93dXBsZWZ0XCIsXG4gIDB4MjE5NixcbiAgXCJhcnJvd3VwbGVmdG9mZG93blwiLFxuICAweDIxYzUsXG4gIFwiYXJyb3d1cHJpZ2h0XCIsXG4gIDB4MjE5NyxcbiAgXCJhcnJvd3Vwd2hpdGVcIixcbiAgMHgyMWU3LFxuICBcImFycm93dmVydGV4XCIsXG4gIDB4ZjhlNixcbiAgXCJhc2NpaWNpcmN1bVwiLFxuICAweDAwNWUsXG4gIFwiYXNjaWljaXJjdW1tb25vc3BhY2VcIixcbiAgMHhmZjNlLFxuICBcImFzY2lpdGlsZGVcIixcbiAgMHgwMDdlLFxuICBcImFzY2lpdGlsZGVtb25vc3BhY2VcIixcbiAgMHhmZjVlLFxuICBcImFzY3JpcHRcIixcbiAgMHgwMjUxLFxuICBcImFzY3JpcHR0dXJuZWRcIixcbiAgMHgwMjUyLFxuICBcImFzbWFsbGhpcmFnYW5hXCIsXG4gIDB4MzA0MSxcbiAgXCJhc21hbGxrYXRha2FuYVwiLFxuICAweDMwYTEsXG4gIFwiYXNtYWxsa2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjY3LFxuICBcImFzdGVyaXNrXCIsXG4gIDB4MDAyYSxcbiAgXCJhc3Rlcmlza2FsdG9uZWFyYWJpY1wiLFxuICAweDA2NmQsXG4gIFwiYXN0ZXJpc2thcmFiaWNcIixcbiAgMHgwNjZkLFxuICBcImFzdGVyaXNrbWF0aFwiLFxuICAweDIyMTcsXG4gIFwiYXN0ZXJpc2ttb25vc3BhY2VcIixcbiAgMHhmZjBhLFxuICBcImFzdGVyaXNrc21hbGxcIixcbiAgMHhmZTYxLFxuICBcImFzdGVyaXNtXCIsXG4gIDB4MjA0MixcbiAgXCJhc3VwZXJpb3JcIixcbiAgMHhmNmU5LFxuICBcImFzeW1wdG90aWNhbGx5ZXF1YWxcIixcbiAgMHgyMjQzLFxuICBcImF0XCIsXG4gIDB4MDA0MCxcbiAgXCJhdGlsZGVcIixcbiAgMHgwMGUzLFxuICBcImF0bW9ub3NwYWNlXCIsXG4gIDB4ZmYyMCxcbiAgXCJhdHNtYWxsXCIsXG4gIDB4ZmU2YixcbiAgXCJhdHVybmVkXCIsXG4gIDB4MDI1MCxcbiAgXCJhdWJlbmdhbGlcIixcbiAgMHgwOTk0LFxuICBcImF1Ym9wb21vZm9cIixcbiAgMHgzMTIwLFxuICBcImF1ZGV2YVwiLFxuICAweDA5MTQsXG4gIFwiYXVndWphcmF0aVwiLFxuICAweDBhOTQsXG4gIFwiYXVndXJtdWtoaVwiLFxuICAweDBhMTQsXG4gIFwiYXVsZW5ndGhtYXJrYmVuZ2FsaVwiLFxuICAweDA5ZDcsXG4gIFwiYXVtYXRyYWd1cm11a2hpXCIsXG4gIDB4MGE0YyxcbiAgXCJhdXZvd2Vsc2lnbmJlbmdhbGlcIixcbiAgMHgwOWNjLFxuICBcImF1dm93ZWxzaWduZGV2YVwiLFxuICAweDA5NGMsXG4gIFwiYXV2b3dlbHNpZ25ndWphcmF0aVwiLFxuICAweDBhY2MsXG4gIFwiYXZhZ3JhaGFkZXZhXCIsXG4gIDB4MDkzZCxcbiAgXCJheWJhcm1lbmlhblwiLFxuICAweDA1NjEsXG4gIFwiYXlpblwiLFxuICAweDA1ZTIsXG4gIFwiYXlpbmFsdG9uZWhlYnJld1wiLFxuICAweGZiMjAsXG4gIFwiYXlpbmhlYnJld1wiLFxuICAweDA1ZTIsXG4gIFwiYlwiLFxuICAweDAwNjIsXG4gIFwiYmFiZW5nYWxpXCIsXG4gIDB4MDlhYyxcbiAgXCJiYWNrc2xhc2hcIixcbiAgMHgwMDVjLFxuICBcImJhY2tzbGFzaG1vbm9zcGFjZVwiLFxuICAweGZmM2MsXG4gIFwiYmFkZXZhXCIsXG4gIDB4MDkyYyxcbiAgXCJiYWd1amFyYXRpXCIsXG4gIDB4MGFhYyxcbiAgXCJiYWd1cm11a2hpXCIsXG4gIDB4MGEyYyxcbiAgXCJiYWhpcmFnYW5hXCIsXG4gIDB4MzA3MCxcbiAgXCJiYWh0dGhhaVwiLFxuICAweDBlM2YsXG4gIFwiYmFrYXRha2FuYVwiLFxuICAweDMwZDAsXG4gIFwiYmFyXCIsXG4gIDB4MDA3YyxcbiAgXCJiYXJtb25vc3BhY2VcIixcbiAgMHhmZjVjLFxuICBcImJib3BvbW9mb1wiLFxuICAweDMxMDUsXG4gIFwiYmNpcmNsZVwiLFxuICAweDI0ZDEsXG4gIFwiYmRvdGFjY2VudFwiLFxuICAweDFlMDMsXG4gIFwiYmRvdGJlbG93XCIsXG4gIDB4MWUwNSxcbiAgXCJiZWFtZWRzaXh0ZWVudGhub3Rlc1wiLFxuICAweDI2NmMsXG4gIFwiYmVjYXVzZVwiLFxuICAweDIyMzUsXG4gIFwiYmVjeXJpbGxpY1wiLFxuICAweDA0MzEsXG4gIFwiYmVoYXJhYmljXCIsXG4gIDB4MDYyOCxcbiAgXCJiZWhmaW5hbGFyYWJpY1wiLFxuICAweGZlOTAsXG4gIFwiYmVoaW5pdGlhbGFyYWJpY1wiLFxuICAweGZlOTEsXG4gIFwiYmVoaXJhZ2FuYVwiLFxuICAweDMwNzksXG4gIFwiYmVobWVkaWFsYXJhYmljXCIsXG4gIDB4ZmU5MixcbiAgXCJiZWhtZWVtaW5pdGlhbGFyYWJpY1wiLFxuICAweGZjOWYsXG4gIFwiYmVobWVlbWlzb2xhdGVkYXJhYmljXCIsXG4gIDB4ZmMwOCxcbiAgXCJiZWhub29uZmluYWxhcmFiaWNcIixcbiAgMHhmYzZkLFxuICBcImJla2F0YWthbmFcIixcbiAgMHgzMGQ5LFxuICBcImJlbmFybWVuaWFuXCIsXG4gIDB4MDU2MixcbiAgXCJiZXRcIixcbiAgMHgwNWQxLFxuICBcImJldGFcIixcbiAgMHgwM2IyLFxuICBcImJldGFzeW1ib2xncmVla1wiLFxuICAweDAzZDAsXG4gIFwiYmV0ZGFnZXNoXCIsXG4gIDB4ZmIzMSxcbiAgXCJiZXRkYWdlc2hoZWJyZXdcIixcbiAgMHhmYjMxLFxuICBcImJldGhlYnJld1wiLFxuICAweDA1ZDEsXG4gIFwiYmV0cmFmZWhlYnJld1wiLFxuICAweGZiNGMsXG4gIFwiYmhhYmVuZ2FsaVwiLFxuICAweDA5YWQsXG4gIFwiYmhhZGV2YVwiLFxuICAweDA5MmQsXG4gIFwiYmhhZ3VqYXJhdGlcIixcbiAgMHgwYWFkLFxuICBcImJoYWd1cm11a2hpXCIsXG4gIDB4MGEyZCxcbiAgXCJiaG9va1wiLFxuICAweDAyNTMsXG4gIFwiYmloaXJhZ2FuYVwiLFxuICAweDMwNzMsXG4gIFwiYmlrYXRha2FuYVwiLFxuICAweDMwZDMsXG4gIFwiYmlsYWJpYWxjbGlja1wiLFxuICAweDAyOTgsXG4gIFwiYmluZGlndXJtdWtoaVwiLFxuICAweDBhMDIsXG4gIFwiYmlydXNxdWFyZVwiLFxuICAweDMzMzEsXG4gIFwiYmxhY2tjaXJjbGVcIixcbiAgMHgyNWNmLFxuICBcImJsYWNrZGlhbW9uZFwiLFxuICAweDI1YzYsXG4gIFwiYmxhY2tkb3ducG9pbnRpbmd0cmlhbmdsZVwiLFxuICAweDI1YmMsXG4gIFwiYmxhY2tsZWZ0cG9pbnRpbmdwb2ludGVyXCIsXG4gIDB4MjVjNCxcbiAgXCJibGFja2xlZnRwb2ludGluZ3RyaWFuZ2xlXCIsXG4gIDB4MjVjMCxcbiAgXCJibGFja2xlbnRpY3VsYXJicmFja2V0bGVmdFwiLFxuICAweDMwMTAsXG4gIFwiYmxhY2tsZW50aWN1bGFyYnJhY2tldGxlZnR2ZXJ0aWNhbFwiLFxuICAweGZlM2IsXG4gIFwiYmxhY2tsZW50aWN1bGFyYnJhY2tldHJpZ2h0XCIsXG4gIDB4MzAxMSxcbiAgXCJibGFja2xlbnRpY3VsYXJicmFja2V0cmlnaHR2ZXJ0aWNhbFwiLFxuICAweGZlM2MsXG4gIFwiYmxhY2tsb3dlcmxlZnR0cmlhbmdsZVwiLFxuICAweDI1ZTMsXG4gIFwiYmxhY2tsb3dlcnJpZ2h0dHJpYW5nbGVcIixcbiAgMHgyNWUyLFxuICBcImJsYWNrcmVjdGFuZ2xlXCIsXG4gIDB4MjVhYyxcbiAgXCJibGFja3JpZ2h0cG9pbnRpbmdwb2ludGVyXCIsXG4gIDB4MjViYSxcbiAgXCJibGFja3JpZ2h0cG9pbnRpbmd0cmlhbmdsZVwiLFxuICAweDI1YjYsXG4gIFwiYmxhY2tzbWFsbHNxdWFyZVwiLFxuICAweDI1YWEsXG4gIFwiYmxhY2tzbWlsaW5nZmFjZVwiLFxuICAweDI2M2IsXG4gIFwiYmxhY2tzcXVhcmVcIixcbiAgMHgyNWEwLFxuICBcImJsYWNrc3RhclwiLFxuICAweDI2MDUsXG4gIFwiYmxhY2t1cHBlcmxlZnR0cmlhbmdsZVwiLFxuICAweDI1ZTQsXG4gIFwiYmxhY2t1cHBlcnJpZ2h0dHJpYW5nbGVcIixcbiAgMHgyNWU1LFxuICBcImJsYWNrdXBwb2ludGluZ3NtYWxsdHJpYW5nbGVcIixcbiAgMHgyNWI0LFxuICBcImJsYWNrdXBwb2ludGluZ3RyaWFuZ2xlXCIsXG4gIDB4MjViMixcbiAgXCJibGFua1wiLFxuICAweDI0MjMsXG4gIFwiYmxpbmViZWxvd1wiLFxuICAweDFlMDcsXG4gIFwiYmxvY2tcIixcbiAgMHgyNTg4LFxuICBcImJtb25vc3BhY2VcIixcbiAgMHhmZjQyLFxuICBcImJvYmFpbWFpdGhhaVwiLFxuICAweDBlMWEsXG4gIFwiYm9oaXJhZ2FuYVwiLFxuICAweDMwN2MsXG4gIFwiYm9rYXRha2FuYVwiLFxuICAweDMwZGMsXG4gIFwiYnBhcmVuXCIsXG4gIDB4MjQ5ZCxcbiAgXCJicXNxdWFyZVwiLFxuICAweDMzYzMsXG4gIFwiYnJhY2VleFwiLFxuICAweGY4ZjQsXG4gIFwiYnJhY2VsZWZ0XCIsXG4gIDB4MDA3YixcbiAgXCJicmFjZWxlZnRidFwiLFxuICAweGY4ZjMsXG4gIFwiYnJhY2VsZWZ0bWlkXCIsXG4gIDB4ZjhmMixcbiAgXCJicmFjZWxlZnRtb25vc3BhY2VcIixcbiAgMHhmZjViLFxuICBcImJyYWNlbGVmdHNtYWxsXCIsXG4gIDB4ZmU1YixcbiAgXCJicmFjZWxlZnR0cFwiLFxuICAweGY4ZjEsXG4gIFwiYnJhY2VsZWZ0dmVydGljYWxcIixcbiAgMHhmZTM3LFxuICBcImJyYWNlcmlnaHRcIixcbiAgMHgwMDdkLFxuICBcImJyYWNlcmlnaHRidFwiLFxuICAweGY4ZmUsXG4gIFwiYnJhY2VyaWdodG1pZFwiLFxuICAweGY4ZmQsXG4gIFwiYnJhY2VyaWdodG1vbm9zcGFjZVwiLFxuICAweGZmNWQsXG4gIFwiYnJhY2VyaWdodHNtYWxsXCIsXG4gIDB4ZmU1YyxcbiAgXCJicmFjZXJpZ2h0dHBcIixcbiAgMHhmOGZjLFxuICBcImJyYWNlcmlnaHR2ZXJ0aWNhbFwiLFxuICAweGZlMzgsXG4gIFwiYnJhY2tldGxlZnRcIixcbiAgMHgwMDViLFxuICBcImJyYWNrZXRsZWZ0YnRcIixcbiAgMHhmOGYwLFxuICBcImJyYWNrZXRsZWZ0ZXhcIixcbiAgMHhmOGVmLFxuICBcImJyYWNrZXRsZWZ0bW9ub3NwYWNlXCIsXG4gIDB4ZmYzYixcbiAgXCJicmFja2V0bGVmdHRwXCIsXG4gIDB4ZjhlZSxcbiAgXCJicmFja2V0cmlnaHRcIixcbiAgMHgwMDVkLFxuICBcImJyYWNrZXRyaWdodGJ0XCIsXG4gIDB4ZjhmYixcbiAgXCJicmFja2V0cmlnaHRleFwiLFxuICAweGY4ZmEsXG4gIFwiYnJhY2tldHJpZ2h0bW9ub3NwYWNlXCIsXG4gIDB4ZmYzZCxcbiAgXCJicmFja2V0cmlnaHR0cFwiLFxuICAweGY4ZjksXG4gIFwiYnJldmVcIixcbiAgMHgwMmQ4LFxuICBcImJyZXZlYmVsb3djbWJcIixcbiAgMHgwMzJlLFxuICBcImJyZXZlY21iXCIsXG4gIDB4MDMwNixcbiAgXCJicmV2ZWludmVydGVkYmVsb3djbWJcIixcbiAgMHgwMzJmLFxuICBcImJyZXZlaW52ZXJ0ZWRjbWJcIixcbiAgMHgwMzExLFxuICBcImJyZXZlaW52ZXJ0ZWRkb3VibGVjbWJcIixcbiAgMHgwMzYxLFxuICBcImJyaWRnZWJlbG93Y21iXCIsXG4gIDB4MDMyYSxcbiAgXCJicmlkZ2VpbnZlcnRlZGJlbG93Y21iXCIsXG4gIDB4MDMzYSxcbiAgXCJicm9rZW5iYXJcIixcbiAgMHgwMGE2LFxuICBcImJzdHJva2VcIixcbiAgMHgwMTgwLFxuICBcImJzdXBlcmlvclwiLFxuICAweGY2ZWEsXG4gIFwiYnRvcGJhclwiLFxuICAweDAxODMsXG4gIFwiYnVoaXJhZ2FuYVwiLFxuICAweDMwNzYsXG4gIFwiYnVrYXRha2FuYVwiLFxuICAweDMwZDYsXG4gIFwiYnVsbGV0XCIsXG4gIDB4MjAyMixcbiAgXCJidWxsZXRpbnZlcnNlXCIsXG4gIDB4MjVkOCxcbiAgXCJidWxsZXRvcGVyYXRvclwiLFxuICAweDIyMTksXG4gIFwiYnVsbHNleWVcIixcbiAgMHgyNWNlLFxuICBcImNcIixcbiAgMHgwMDYzLFxuICBcImNhYXJtZW5pYW5cIixcbiAgMHgwNTZlLFxuICBcImNhYmVuZ2FsaVwiLFxuICAweDA5OWEsXG4gIFwiY2FjdXRlXCIsXG4gIDB4MDEwNyxcbiAgXCJjYWRldmFcIixcbiAgMHgwOTFhLFxuICBcImNhZ3VqYXJhdGlcIixcbiAgMHgwYTlhLFxuICBcImNhZ3VybXVraGlcIixcbiAgMHgwYTFhLFxuICBcImNhbHNxdWFyZVwiLFxuICAweDMzODgsXG4gIFwiY2FuZHJhYmluZHViZW5nYWxpXCIsXG4gIDB4MDk4MSxcbiAgXCJjYW5kcmFiaW5kdWNtYlwiLFxuICAweDAzMTAsXG4gIFwiY2FuZHJhYmluZHVkZXZhXCIsXG4gIDB4MDkwMSxcbiAgXCJjYW5kcmFiaW5kdWd1amFyYXRpXCIsXG4gIDB4MGE4MSxcbiAgXCJjYXBzbG9ja1wiLFxuICAweDIxZWEsXG4gIFwiY2FyZW9mXCIsXG4gIDB4MjEwNSxcbiAgXCJjYXJvblwiLFxuICAweDAyYzcsXG4gIFwiY2Fyb25iZWxvd2NtYlwiLFxuICAweDAzMmMsXG4gIFwiY2Fyb25jbWJcIixcbiAgMHgwMzBjLFxuICBcImNhcnJpYWdlcmV0dXJuXCIsXG4gIDB4MjFiNSxcbiAgXCJjYm9wb21vZm9cIixcbiAgMHgzMTE4LFxuICBcImNjYXJvblwiLFxuICAweDAxMGQsXG4gIFwiY2NlZGlsbGFcIixcbiAgMHgwMGU3LFxuICBcImNjZWRpbGxhYWN1dGVcIixcbiAgMHgxZTA5LFxuICBcImNjaXJjbGVcIixcbiAgMHgyNGQyLFxuICBcImNjaXJjdW1mbGV4XCIsXG4gIDB4MDEwOSxcbiAgXCJjY3VybFwiLFxuICAweDAyNTUsXG4gIFwiY2RvdFwiLFxuICAweDAxMGIsXG4gIFwiY2RvdGFjY2VudFwiLFxuICAweDAxMGIsXG4gIFwiY2RzcXVhcmVcIixcbiAgMHgzM2M1LFxuICBcImNlZGlsbGFcIixcbiAgMHgwMGI4LFxuICBcImNlZGlsbGFjbWJcIixcbiAgMHgwMzI3LFxuICBcImNlbnRcIixcbiAgMHgwMGEyLFxuICBcImNlbnRpZ3JhZGVcIixcbiAgMHgyMTAzLFxuICBcImNlbnRpbmZlcmlvclwiLFxuICAweGY2ZGYsXG4gIFwiY2VudG1vbm9zcGFjZVwiLFxuICAweGZmZTAsXG4gIFwiY2VudG9sZHN0eWxlXCIsXG4gIDB4ZjdhMixcbiAgXCJjZW50c3VwZXJpb3JcIixcbiAgMHhmNmUwLFxuICBcImNoYWFybWVuaWFuXCIsXG4gIDB4MDU3OSxcbiAgXCJjaGFiZW5nYWxpXCIsXG4gIDB4MDk5YixcbiAgXCJjaGFkZXZhXCIsXG4gIDB4MDkxYixcbiAgXCJjaGFndWphcmF0aVwiLFxuICAweDBhOWIsXG4gIFwiY2hhZ3VybXVraGlcIixcbiAgMHgwYTFiLFxuICBcImNoYm9wb21vZm9cIixcbiAgMHgzMTE0LFxuICBcImNoZWFia2hhc2lhbmN5cmlsbGljXCIsXG4gIDB4MDRiZCxcbiAgXCJjaGVja21hcmtcIixcbiAgMHgyNzEzLFxuICBcImNoZWN5cmlsbGljXCIsXG4gIDB4MDQ0NyxcbiAgXCJjaGVkZXNjZW5kZXJhYmtoYXNpYW5jeXJpbGxpY1wiLFxuICAweDA0YmYsXG4gIFwiY2hlZGVzY2VuZGVyY3lyaWxsaWNcIixcbiAgMHgwNGI3LFxuICBcImNoZWRpZXJlc2lzY3lyaWxsaWNcIixcbiAgMHgwNGY1LFxuICBcImNoZWhhcm1lbmlhblwiLFxuICAweDA1NzMsXG4gIFwiY2hla2hha2Fzc2lhbmN5cmlsbGljXCIsXG4gIDB4MDRjYyxcbiAgXCJjaGV2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljXCIsXG4gIDB4MDRiOSxcbiAgXCJjaGlcIixcbiAgMHgwM2M3LFxuICBcImNoaWV1Y2hhY2lyY2xla29yZWFuXCIsXG4gIDB4MzI3NyxcbiAgXCJjaGlldWNoYXBhcmVua29yZWFuXCIsXG4gIDB4MzIxNyxcbiAgXCJjaGlldWNoY2lyY2xla29yZWFuXCIsXG4gIDB4MzI2OSxcbiAgXCJjaGlldWNoa29yZWFuXCIsXG4gIDB4MzE0YSxcbiAgXCJjaGlldWNocGFyZW5rb3JlYW5cIixcbiAgMHgzMjA5LFxuICBcImNob2NoYW5ndGhhaVwiLFxuICAweDBlMGEsXG4gIFwiY2hvY2hhbnRoYWlcIixcbiAgMHgwZTA4LFxuICBcImNob2NoaW5ndGhhaVwiLFxuICAweDBlMDksXG4gIFwiY2hvY2hvZXRoYWlcIixcbiAgMHgwZTBjLFxuICBcImNob29rXCIsXG4gIDB4MDE4OCxcbiAgXCJjaWV1Y2FjaXJjbGVrb3JlYW5cIixcbiAgMHgzMjc2LFxuICBcImNpZXVjYXBhcmVua29yZWFuXCIsXG4gIDB4MzIxNixcbiAgXCJjaWV1Y2NpcmNsZWtvcmVhblwiLFxuICAweDMyNjgsXG4gIFwiY2lldWNrb3JlYW5cIixcbiAgMHgzMTQ4LFxuICBcImNpZXVjcGFyZW5rb3JlYW5cIixcbiAgMHgzMjA4LFxuICBcImNpZXVjdXBhcmVua29yZWFuXCIsXG4gIDB4MzIxYyxcbiAgXCJjaXJjbGVcIixcbiAgMHgyNWNiLFxuICBcImNpcmNsZWNvcHlydFwiLFxuICAweDAwYTksXG4gIFwiY2lyY2xlbXVsdGlwbHlcIixcbiAgMHgyMjk3LFxuICBcImNpcmNsZW90XCIsXG4gIDB4MjI5OSxcbiAgXCJjaXJjbGVwbHVzXCIsXG4gIDB4MjI5NSxcbiAgXCJjaXJjbGVwb3N0YWxtYXJrXCIsXG4gIDB4MzAzNixcbiAgXCJjaXJjbGV3aXRobGVmdGhhbGZibGFja1wiLFxuICAweDI1ZDAsXG4gIFwiY2lyY2xld2l0aHJpZ2h0aGFsZmJsYWNrXCIsXG4gIDB4MjVkMSxcbiAgXCJjaXJjdW1mbGV4XCIsXG4gIDB4MDJjNixcbiAgXCJjaXJjdW1mbGV4YmVsb3djbWJcIixcbiAgMHgwMzJkLFxuICBcImNpcmN1bWZsZXhjbWJcIixcbiAgMHgwMzAyLFxuICBcImNsZWFyXCIsXG4gIDB4MjMyNyxcbiAgXCJjbGlja2FsdmVvbGFyXCIsXG4gIDB4MDFjMixcbiAgXCJjbGlja2RlbnRhbFwiLFxuICAweDAxYzAsXG4gIFwiY2xpY2tsYXRlcmFsXCIsXG4gIDB4MDFjMSxcbiAgXCJjbGlja3JldHJvZmxleFwiLFxuICAweDAxYzMsXG4gIFwiY2x1YlwiLFxuICAweDI2NjMsXG4gIFwiY2x1YnN1aXRibGFja1wiLFxuICAweDI2NjMsXG4gIFwiY2x1YnN1aXR3aGl0ZVwiLFxuICAweDI2NjcsXG4gIFwiY21jdWJlZHNxdWFyZVwiLFxuICAweDMzYTQsXG4gIFwiY21vbm9zcGFjZVwiLFxuICAweGZmNDMsXG4gIFwiY21zcXVhcmVkc3F1YXJlXCIsXG4gIDB4MzNhMCxcbiAgXCJjb2FybWVuaWFuXCIsXG4gIDB4MDU4MSxcbiAgXCJjb2xvblwiLFxuICAweDAwM2EsXG4gIFwiY29sb25tb25ldGFyeVwiLFxuICAweDIwYTEsXG4gIFwiY29sb25tb25vc3BhY2VcIixcbiAgMHhmZjFhLFxuICBcImNvbG9uc2lnblwiLFxuICAweDIwYTEsXG4gIFwiY29sb25zbWFsbFwiLFxuICAweGZlNTUsXG4gIFwiY29sb250cmlhbmd1bGFyaGFsZm1vZFwiLFxuICAweDAyZDEsXG4gIFwiY29sb250cmlhbmd1bGFybW9kXCIsXG4gIDB4MDJkMCxcbiAgXCJjb21tYVwiLFxuICAweDAwMmMsXG4gIFwiY29tbWFhYm92ZWNtYlwiLFxuICAweDAzMTMsXG4gIFwiY29tbWFhYm92ZXJpZ2h0Y21iXCIsXG4gIDB4MDMxNSxcbiAgXCJjb21tYWFjY2VudFwiLFxuICAweGY2YzMsXG4gIFwiY29tbWFhcmFiaWNcIixcbiAgMHgwNjBjLFxuICBcImNvbW1hYXJtZW5pYW5cIixcbiAgMHgwNTVkLFxuICBcImNvbW1haW5mZXJpb3JcIixcbiAgMHhmNmUxLFxuICBcImNvbW1hbW9ub3NwYWNlXCIsXG4gIDB4ZmYwYyxcbiAgXCJjb21tYXJldmVyc2VkYWJvdmVjbWJcIixcbiAgMHgwMzE0LFxuICBcImNvbW1hcmV2ZXJzZWRtb2RcIixcbiAgMHgwMmJkLFxuICBcImNvbW1hc21hbGxcIixcbiAgMHhmZTUwLFxuICBcImNvbW1hc3VwZXJpb3JcIixcbiAgMHhmNmUyLFxuICBcImNvbW1hdHVybmVkYWJvdmVjbWJcIixcbiAgMHgwMzEyLFxuICBcImNvbW1hdHVybmVkbW9kXCIsXG4gIDB4MDJiYixcbiAgXCJjb21wYXNzXCIsXG4gIDB4MjYzYyxcbiAgXCJjb25ncnVlbnRcIixcbiAgMHgyMjQ1LFxuICBcImNvbnRvdXJpbnRlZ3JhbFwiLFxuICAweDIyMmUsXG4gIFwiY29udHJvbFwiLFxuICAweDIzMDMsXG4gIFwiY29udHJvbEFDS1wiLFxuICAweDAwMDYsXG4gIFwiY29udHJvbEJFTFwiLFxuICAweDAwMDcsXG4gIFwiY29udHJvbEJTXCIsXG4gIDB4MDAwOCxcbiAgXCJjb250cm9sQ0FOXCIsXG4gIDB4MDAxOCxcbiAgXCJjb250cm9sQ1JcIixcbiAgMHgwMDBkLFxuICBcImNvbnRyb2xEQzFcIixcbiAgMHgwMDExLFxuICBcImNvbnRyb2xEQzJcIixcbiAgMHgwMDEyLFxuICBcImNvbnRyb2xEQzNcIixcbiAgMHgwMDEzLFxuICBcImNvbnRyb2xEQzRcIixcbiAgMHgwMDE0LFxuICBcImNvbnRyb2xERUxcIixcbiAgMHgwMDdmLFxuICBcImNvbnRyb2xETEVcIixcbiAgMHgwMDEwLFxuICBcImNvbnRyb2xFTVwiLFxuICAweDAwMTksXG4gIFwiY29udHJvbEVOUVwiLFxuICAweDAwMDUsXG4gIFwiY29udHJvbEVPVFwiLFxuICAweDAwMDQsXG4gIFwiY29udHJvbEVTQ1wiLFxuICAweDAwMWIsXG4gIFwiY29udHJvbEVUQlwiLFxuICAweDAwMTcsXG4gIFwiY29udHJvbEVUWFwiLFxuICAweDAwMDMsXG4gIFwiY29udHJvbEZGXCIsXG4gIDB4MDAwYyxcbiAgXCJjb250cm9sRlNcIixcbiAgMHgwMDFjLFxuICBcImNvbnRyb2xHU1wiLFxuICAweDAwMWQsXG4gIFwiY29udHJvbEhUXCIsXG4gIDB4MDAwOSxcbiAgXCJjb250cm9sTEZcIixcbiAgMHgwMDBhLFxuICBcImNvbnRyb2xOQUtcIixcbiAgMHgwMDE1LFxuICBcImNvbnRyb2xOVUxMXCIsXG4gIDB4MDAwMCxcbiAgXCJjb250cm9sUlNcIixcbiAgMHgwMDFlLFxuICBcImNvbnRyb2xTSVwiLFxuICAweDAwMGYsXG4gIFwiY29udHJvbFNPXCIsXG4gIDB4MDAwZSxcbiAgXCJjb250cm9sU09UXCIsXG4gIDB4MDAwMixcbiAgXCJjb250cm9sU1RYXCIsXG4gIDB4MDAwMSxcbiAgXCJjb250cm9sU1VCXCIsXG4gIDB4MDAxYSxcbiAgXCJjb250cm9sU1lOXCIsXG4gIDB4MDAxNixcbiAgXCJjb250cm9sVVNcIixcbiAgMHgwMDFmLFxuICBcImNvbnRyb2xWVFwiLFxuICAweDAwMGIsXG4gIFwiY29weXJpZ2h0XCIsXG4gIDB4MDBhOSxcbiAgXCJjb3B5cmlnaHRzYW5zXCIsXG4gIDB4ZjhlOSxcbiAgXCJjb3B5cmlnaHRzZXJpZlwiLFxuICAweGY2ZDksXG4gIFwiY29ybmVyYnJhY2tldGxlZnRcIixcbiAgMHgzMDBjLFxuICBcImNvcm5lcmJyYWNrZXRsZWZ0aGFsZndpZHRoXCIsXG4gIDB4ZmY2MixcbiAgXCJjb3JuZXJicmFja2V0bGVmdHZlcnRpY2FsXCIsXG4gIDB4ZmU0MSxcbiAgXCJjb3JuZXJicmFja2V0cmlnaHRcIixcbiAgMHgzMDBkLFxuICBcImNvcm5lcmJyYWNrZXRyaWdodGhhbGZ3aWR0aFwiLFxuICAweGZmNjMsXG4gIFwiY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWxcIixcbiAgMHhmZTQyLFxuICBcImNvcnBvcmF0aW9uc3F1YXJlXCIsXG4gIDB4MzM3ZixcbiAgXCJjb3NxdWFyZVwiLFxuICAweDMzYzcsXG4gIFwiY292ZXJrZ3NxdWFyZVwiLFxuICAweDMzYzYsXG4gIFwiY3BhcmVuXCIsXG4gIDB4MjQ5ZSxcbiAgXCJjcnV6ZWlyb1wiLFxuICAweDIwYTIsXG4gIFwiY3N0cmV0Y2hlZFwiLFxuICAweDAyOTcsXG4gIFwiY3VybHlhbmRcIixcbiAgMHgyMmNmLFxuICBcImN1cmx5b3JcIixcbiAgMHgyMmNlLFxuICBcImN1cnJlbmN5XCIsXG4gIDB4MDBhNCxcbiAgXCJjeXJCcmV2ZVwiLFxuICAweGY2ZDEsXG4gIFwiY3lyRmxleFwiLFxuICAweGY2ZDIsXG4gIFwiY3lyYnJldmVcIixcbiAgMHhmNmQ0LFxuICBcImN5cmZsZXhcIixcbiAgMHhmNmQ1LFxuICBcImRcIixcbiAgMHgwMDY0LFxuICBcImRhYXJtZW5pYW5cIixcbiAgMHgwNTY0LFxuICBcImRhYmVuZ2FsaVwiLFxuICAweDA5YTYsXG4gIFwiZGFkYXJhYmljXCIsXG4gIDB4MDYzNixcbiAgXCJkYWRldmFcIixcbiAgMHgwOTI2LFxuICBcImRhZGZpbmFsYXJhYmljXCIsXG4gIDB4ZmViZSxcbiAgXCJkYWRpbml0aWFsYXJhYmljXCIsXG4gIDB4ZmViZixcbiAgXCJkYWRtZWRpYWxhcmFiaWNcIixcbiAgMHhmZWMwLFxuICBcImRhZ2VzaFwiLFxuICAweDA1YmMsXG4gIFwiZGFnZXNoaGVicmV3XCIsXG4gIDB4MDViYyxcbiAgXCJkYWdnZXJcIixcbiAgMHgyMDIwLFxuICBcImRhZ2dlcmRibFwiLFxuICAweDIwMjEsXG4gIFwiZGFndWphcmF0aVwiLFxuICAweDBhYTYsXG4gIFwiZGFndXJtdWtoaVwiLFxuICAweDBhMjYsXG4gIFwiZGFoaXJhZ2FuYVwiLFxuICAweDMwNjAsXG4gIFwiZGFrYXRha2FuYVwiLFxuICAweDMwYzAsXG4gIFwiZGFsYXJhYmljXCIsXG4gIDB4MDYyZixcbiAgXCJkYWxldFwiLFxuICAweDA1ZDMsXG4gIFwiZGFsZXRkYWdlc2hcIixcbiAgMHhmYjMzLFxuICBcImRhbGV0ZGFnZXNoaGVicmV3XCIsXG4gIDB4ZmIzMyxcbiAgXCJkYWxldGhlYnJld1wiLFxuICAweDA1ZDMsXG4gIFwiZGFsZmluYWxhcmFiaWNcIixcbiAgMHhmZWFhLFxuICBcImRhbW1hYXJhYmljXCIsXG4gIDB4MDY0ZixcbiAgXCJkYW1tYWxvd2FyYWJpY1wiLFxuICAweDA2NGYsXG4gIFwiZGFtbWF0YW5hbHRvbmVhcmFiaWNcIixcbiAgMHgwNjRjLFxuICBcImRhbW1hdGFuYXJhYmljXCIsXG4gIDB4MDY0YyxcbiAgXCJkYW5kYVwiLFxuICAweDA5NjQsXG4gIFwiZGFyZ2FoZWJyZXdcIixcbiAgMHgwNWE3LFxuICBcImRhcmdhbGVmdGhlYnJld1wiLFxuICAweDA1YTcsXG4gIFwiZGFzaWFwbmV1bWF0YWN5cmlsbGljY21iXCIsXG4gIDB4MDQ4NSxcbiAgXCJkYmxHcmF2ZVwiLFxuICAweGY2ZDMsXG4gIFwiZGJsYW5nbGVicmFja2V0bGVmdFwiLFxuICAweDMwMGEsXG4gIFwiZGJsYW5nbGVicmFja2V0bGVmdHZlcnRpY2FsXCIsXG4gIDB4ZmUzZCxcbiAgXCJkYmxhbmdsZWJyYWNrZXRyaWdodFwiLFxuICAweDMwMGIsXG4gIFwiZGJsYW5nbGVicmFja2V0cmlnaHR2ZXJ0aWNhbFwiLFxuICAweGZlM2UsXG4gIFwiZGJsYXJjaGludmVydGVkYmVsb3djbWJcIixcbiAgMHgwMzJiLFxuICBcImRibGFycm93bGVmdFwiLFxuICAweDIxZDQsXG4gIFwiZGJsYXJyb3dyaWdodFwiLFxuICAweDIxZDIsXG4gIFwiZGJsZGFuZGFcIixcbiAgMHgwOTY1LFxuICBcImRibGdyYXZlXCIsXG4gIDB4ZjZkNixcbiAgXCJkYmxncmF2ZWNtYlwiLFxuICAweDAzMGYsXG4gIFwiZGJsaW50ZWdyYWxcIixcbiAgMHgyMjJjLFxuICBcImRibGxvd2xpbmVcIixcbiAgMHgyMDE3LFxuICBcImRibGxvd2xpbmVjbWJcIixcbiAgMHgwMzMzLFxuICBcImRibG92ZXJsaW5lY21iXCIsXG4gIDB4MDMzZixcbiAgXCJkYmxwcmltZW1vZFwiLFxuICAweDAyYmEsXG4gIFwiZGJsdmVydGljYWxiYXJcIixcbiAgMHgyMDE2LFxuICBcImRibHZlcnRpY2FsbGluZWFib3ZlY21iXCIsXG4gIDB4MDMwZSxcbiAgXCJkYm9wb21vZm9cIixcbiAgMHgzMTA5LFxuICBcImRic3F1YXJlXCIsXG4gIDB4MzNjOCxcbiAgXCJkY2Fyb25cIixcbiAgMHgwMTBmLFxuICBcImRjZWRpbGxhXCIsXG4gIDB4MWUxMSxcbiAgXCJkY2lyY2xlXCIsXG4gIDB4MjRkMyxcbiAgXCJkY2lyY3VtZmxleGJlbG93XCIsXG4gIDB4MWUxMyxcbiAgXCJkY3JvYXRcIixcbiAgMHgwMTExLFxuICBcImRkYWJlbmdhbGlcIixcbiAgMHgwOWExLFxuICBcImRkYWRldmFcIixcbiAgMHgwOTIxLFxuICBcImRkYWd1amFyYXRpXCIsXG4gIDB4MGFhMSxcbiAgXCJkZGFndXJtdWtoaVwiLFxuICAweDBhMjEsXG4gIFwiZGRhbGFyYWJpY1wiLFxuICAweDA2ODgsXG4gIFwiZGRhbGZpbmFsYXJhYmljXCIsXG4gIDB4ZmI4OSxcbiAgXCJkZGRoYWRldmFcIixcbiAgMHgwOTVjLFxuICBcImRkaGFiZW5nYWxpXCIsXG4gIDB4MDlhMixcbiAgXCJkZGhhZGV2YVwiLFxuICAweDA5MjIsXG4gIFwiZGRoYWd1amFyYXRpXCIsXG4gIDB4MGFhMixcbiAgXCJkZGhhZ3VybXVraGlcIixcbiAgMHgwYTIyLFxuICBcImRkb3RhY2NlbnRcIixcbiAgMHgxZTBiLFxuICBcImRkb3RiZWxvd1wiLFxuICAweDFlMGQsXG4gIFwiZGVjaW1hbHNlcGFyYXRvcmFyYWJpY1wiLFxuICAweDA2NmIsXG4gIFwiZGVjaW1hbHNlcGFyYXRvcnBlcnNpYW5cIixcbiAgMHgwNjZiLFxuICBcImRlY3lyaWxsaWNcIixcbiAgMHgwNDM0LFxuICBcImRlZ3JlZVwiLFxuICAweDAwYjAsXG4gIFwiZGVoaWhlYnJld1wiLFxuICAweDA1YWQsXG4gIFwiZGVoaXJhZ2FuYVwiLFxuICAweDMwNjcsXG4gIFwiZGVpY29wdGljXCIsXG4gIDB4MDNlZixcbiAgXCJkZWthdGFrYW5hXCIsXG4gIDB4MzBjNyxcbiAgXCJkZWxldGVsZWZ0XCIsXG4gIDB4MjMyYixcbiAgXCJkZWxldGVyaWdodFwiLFxuICAweDIzMjYsXG4gIFwiZGVsdGFcIixcbiAgMHgwM2I0LFxuICBcImRlbHRhdHVybmVkXCIsXG4gIDB4MDE4ZCxcbiAgXCJkZW5vbWluYXRvcm1pbnVzb25lbnVtZXJhdG9yYmVuZ2FsaVwiLFxuICAweDA5ZjgsXG4gIFwiZGV6aFwiLFxuICAweDAyYTQsXG4gIFwiZGhhYmVuZ2FsaVwiLFxuICAweDA5YTcsXG4gIFwiZGhhZGV2YVwiLFxuICAweDA5MjcsXG4gIFwiZGhhZ3VqYXJhdGlcIixcbiAgMHgwYWE3LFxuICBcImRoYWd1cm11a2hpXCIsXG4gIDB4MGEyNyxcbiAgXCJkaG9va1wiLFxuICAweDAyNTcsXG4gIFwiZGlhbHl0aWthdG9ub3NcIixcbiAgMHgwMzg1LFxuICBcImRpYWx5dGlrYXRvbm9zY21iXCIsXG4gIDB4MDM0NCxcbiAgXCJkaWFtb25kXCIsXG4gIDB4MjY2NixcbiAgXCJkaWFtb25kc3VpdHdoaXRlXCIsXG4gIDB4MjY2MixcbiAgXCJkaWVyZXNpc1wiLFxuICAweDAwYTgsXG4gIFwiZGllcmVzaXNhY3V0ZVwiLFxuICAweGY2ZDcsXG4gIFwiZGllcmVzaXNiZWxvd2NtYlwiLFxuICAweDAzMjQsXG4gIFwiZGllcmVzaXNjbWJcIixcbiAgMHgwMzA4LFxuICBcImRpZXJlc2lzZ3JhdmVcIixcbiAgMHhmNmQ4LFxuICBcImRpZXJlc2lzdG9ub3NcIixcbiAgMHgwMzg1LFxuICBcImRpaGlyYWdhbmFcIixcbiAgMHgzMDYyLFxuICBcImRpa2F0YWthbmFcIixcbiAgMHgzMGMyLFxuICBcImRpdHRvbWFya1wiLFxuICAweDMwMDMsXG4gIFwiZGl2aWRlXCIsXG4gIDB4MDBmNyxcbiAgXCJkaXZpZGVzXCIsXG4gIDB4MjIyMyxcbiAgXCJkaXZpc2lvbnNsYXNoXCIsXG4gIDB4MjIxNSxcbiAgXCJkamVjeXJpbGxpY1wiLFxuICAweDA0NTIsXG4gIFwiZGtzaGFkZVwiLFxuICAweDI1OTMsXG4gIFwiZGxpbmViZWxvd1wiLFxuICAweDFlMGYsXG4gIFwiZGxzcXVhcmVcIixcbiAgMHgzMzk3LFxuICBcImRtYWNyb25cIixcbiAgMHgwMTExLFxuICBcImRtb25vc3BhY2VcIixcbiAgMHhmZjQ0LFxuICBcImRuYmxvY2tcIixcbiAgMHgyNTg0LFxuICBcImRvY2hhZGF0aGFpXCIsXG4gIDB4MGUwZSxcbiAgXCJkb2Rla3RoYWlcIixcbiAgMHgwZTE0LFxuICBcImRvaGlyYWdhbmFcIixcbiAgMHgzMDY5LFxuICBcImRva2F0YWthbmFcIixcbiAgMHgzMGM5LFxuICBcImRvbGxhclwiLFxuICAweDAwMjQsXG4gIFwiZG9sbGFyaW5mZXJpb3JcIixcbiAgMHhmNmUzLFxuICBcImRvbGxhcm1vbm9zcGFjZVwiLFxuICAweGZmMDQsXG4gIFwiZG9sbGFyb2xkc3R5bGVcIixcbiAgMHhmNzI0LFxuICBcImRvbGxhcnNtYWxsXCIsXG4gIDB4ZmU2OSxcbiAgXCJkb2xsYXJzdXBlcmlvclwiLFxuICAweGY2ZTQsXG4gIFwiZG9uZ1wiLFxuICAweDIwYWIsXG4gIFwiZG9ydXNxdWFyZVwiLFxuICAweDMzMjYsXG4gIFwiZG90YWNjZW50XCIsXG4gIDB4MDJkOSxcbiAgXCJkb3RhY2NlbnRjbWJcIixcbiAgMHgwMzA3LFxuICBcImRvdGJlbG93Y21iXCIsXG4gIDB4MDMyMyxcbiAgXCJkb3RiZWxvd2NvbWJcIixcbiAgMHgwMzIzLFxuICBcImRvdGthdGFrYW5hXCIsXG4gIDB4MzBmYixcbiAgXCJkb3RsZXNzaVwiLFxuICAweDAxMzEsXG4gIFwiZG90bGVzc2pcIixcbiAgMHhmNmJlLFxuICBcImRvdGxlc3Nqc3Ryb2tlaG9va1wiLFxuICAweDAyODQsXG4gIFwiZG90bWF0aFwiLFxuICAweDIyYzUsXG4gIFwiZG90dGVkY2lyY2xlXCIsXG4gIDB4MjVjYyxcbiAgXCJkb3VibGV5b2RwYXRhaFwiLFxuICAweGZiMWYsXG4gIFwiZG91YmxleW9kcGF0YWhoZWJyZXdcIixcbiAgMHhmYjFmLFxuICBcImRvd250YWNrYmVsb3djbWJcIixcbiAgMHgwMzFlLFxuICBcImRvd250YWNrbW9kXCIsXG4gIDB4MDJkNSxcbiAgXCJkcGFyZW5cIixcbiAgMHgyNDlmLFxuICBcImRzdXBlcmlvclwiLFxuICAweGY2ZWIsXG4gIFwiZHRhaWxcIixcbiAgMHgwMjU2LFxuICBcImR0b3BiYXJcIixcbiAgMHgwMThjLFxuICBcImR1aGlyYWdhbmFcIixcbiAgMHgzMDY1LFxuICBcImR1a2F0YWthbmFcIixcbiAgMHgzMGM1LFxuICBcImR6XCIsXG4gIDB4MDFmMyxcbiAgXCJkemFsdG9uZVwiLFxuICAweDAyYTMsXG4gIFwiZHpjYXJvblwiLFxuICAweDAxYzYsXG4gIFwiZHpjdXJsXCIsXG4gIDB4MDJhNSxcbiAgXCJkemVhYmtoYXNpYW5jeXJpbGxpY1wiLFxuICAweDA0ZTEsXG4gIFwiZHplY3lyaWxsaWNcIixcbiAgMHgwNDU1LFxuICBcImR6aGVjeXJpbGxpY1wiLFxuICAweDA0NWYsXG4gIFwiZVwiLFxuICAweDAwNjUsXG4gIFwiZWFjdXRlXCIsXG4gIDB4MDBlOSxcbiAgXCJlYXJ0aFwiLFxuICAweDI2NDEsXG4gIFwiZWJlbmdhbGlcIixcbiAgMHgwOThmLFxuICBcImVib3BvbW9mb1wiLFxuICAweDMxMWMsXG4gIFwiZWJyZXZlXCIsXG4gIDB4MDExNSxcbiAgXCJlY2FuZHJhZGV2YVwiLFxuICAweDA5MGQsXG4gIFwiZWNhbmRyYWd1amFyYXRpXCIsXG4gIDB4MGE4ZCxcbiAgXCJlY2FuZHJhdm93ZWxzaWduZGV2YVwiLFxuICAweDA5NDUsXG4gIFwiZWNhbmRyYXZvd2Vsc2lnbmd1amFyYXRpXCIsXG4gIDB4MGFjNSxcbiAgXCJlY2Fyb25cIixcbiAgMHgwMTFiLFxuICBcImVjZWRpbGxhYnJldmVcIixcbiAgMHgxZTFkLFxuICBcImVjaGFybWVuaWFuXCIsXG4gIDB4MDU2NSxcbiAgXCJlY2h5aXduYXJtZW5pYW5cIixcbiAgMHgwNTg3LFxuICBcImVjaXJjbGVcIixcbiAgMHgyNGQ0LFxuICBcImVjaXJjdW1mbGV4XCIsXG4gIDB4MDBlYSxcbiAgXCJlY2lyY3VtZmxleGFjdXRlXCIsXG4gIDB4MWViZixcbiAgXCJlY2lyY3VtZmxleGJlbG93XCIsXG4gIDB4MWUxOSxcbiAgXCJlY2lyY3VtZmxleGRvdGJlbG93XCIsXG4gIDB4MWVjNyxcbiAgXCJlY2lyY3VtZmxleGdyYXZlXCIsXG4gIDB4MWVjMSxcbiAgXCJlY2lyY3VtZmxleGhvb2thYm92ZVwiLFxuICAweDFlYzMsXG4gIFwiZWNpcmN1bWZsZXh0aWxkZVwiLFxuICAweDFlYzUsXG4gIFwiZWN5cmlsbGljXCIsXG4gIDB4MDQ1NCxcbiAgXCJlZGJsZ3JhdmVcIixcbiAgMHgwMjA1LFxuICBcImVkZXZhXCIsXG4gIDB4MDkwZixcbiAgXCJlZGllcmVzaXNcIixcbiAgMHgwMGViLFxuICBcImVkb3RcIixcbiAgMHgwMTE3LFxuICBcImVkb3RhY2NlbnRcIixcbiAgMHgwMTE3LFxuICBcImVkb3RiZWxvd1wiLFxuICAweDFlYjksXG4gIFwiZWVndXJtdWtoaVwiLFxuICAweDBhMGYsXG4gIFwiZWVtYXRyYWd1cm11a2hpXCIsXG4gIDB4MGE0NyxcbiAgXCJlZmN5cmlsbGljXCIsXG4gIDB4MDQ0NCxcbiAgXCJlZ3JhdmVcIixcbiAgMHgwMGU4LFxuICBcImVndWphcmF0aVwiLFxuICAweDBhOGYsXG4gIFwiZWhhcm1lbmlhblwiLFxuICAweDA1NjcsXG4gIFwiZWhib3BvbW9mb1wiLFxuICAweDMxMWQsXG4gIFwiZWhpcmFnYW5hXCIsXG4gIDB4MzA0OCxcbiAgXCJlaG9va2Fib3ZlXCIsXG4gIDB4MWViYixcbiAgXCJlaWJvcG9tb2ZvXCIsXG4gIDB4MzExZixcbiAgXCJlaWdodFwiLFxuICAweDAwMzgsXG4gIFwiZWlnaHRhcmFiaWNcIixcbiAgMHgwNjY4LFxuICBcImVpZ2h0YmVuZ2FsaVwiLFxuICAweDA5ZWUsXG4gIFwiZWlnaHRjaXJjbGVcIixcbiAgMHgyNDY3LFxuICBcImVpZ2h0Y2lyY2xlaW52ZXJzZXNhbnNzZXJpZlwiLFxuICAweDI3OTEsXG4gIFwiZWlnaHRkZXZhXCIsXG4gIDB4MDk2ZSxcbiAgXCJlaWdodGVlbmNpcmNsZVwiLFxuICAweDI0NzEsXG4gIFwiZWlnaHRlZW5wYXJlblwiLFxuICAweDI0ODUsXG4gIFwiZWlnaHRlZW5wZXJpb2RcIixcbiAgMHgyNDk5LFxuICBcImVpZ2h0Z3VqYXJhdGlcIixcbiAgMHgwYWVlLFxuICBcImVpZ2h0Z3VybXVraGlcIixcbiAgMHgwYTZlLFxuICBcImVpZ2h0aGFja2FyYWJpY1wiLFxuICAweDA2NjgsXG4gIFwiZWlnaHRoYW5nemhvdVwiLFxuICAweDMwMjgsXG4gIFwiZWlnaHRobm90ZWJlYW1lZFwiLFxuICAweDI2NmIsXG4gIFwiZWlnaHRpZGVvZ3JhcGhpY3BhcmVuXCIsXG4gIDB4MzIyNyxcbiAgXCJlaWdodGluZmVyaW9yXCIsXG4gIDB4MjA4OCxcbiAgXCJlaWdodG1vbm9zcGFjZVwiLFxuICAweGZmMTgsXG4gIFwiZWlnaHRvbGRzdHlsZVwiLFxuICAweGY3MzgsXG4gIFwiZWlnaHRwYXJlblwiLFxuICAweDI0N2IsXG4gIFwiZWlnaHRwZXJpb2RcIixcbiAgMHgyNDhmLFxuICBcImVpZ2h0cGVyc2lhblwiLFxuICAweDA2ZjgsXG4gIFwiZWlnaHRyb21hblwiLFxuICAweDIxNzcsXG4gIFwiZWlnaHRzdXBlcmlvclwiLFxuICAweDIwNzgsXG4gIFwiZWlnaHR0aGFpXCIsXG4gIDB4MGU1OCxcbiAgXCJlaW52ZXJ0ZWRicmV2ZVwiLFxuICAweDAyMDcsXG4gIFwiZWlvdGlmaWVkY3lyaWxsaWNcIixcbiAgMHgwNDY1LFxuICBcImVrYXRha2FuYVwiLFxuICAweDMwYTgsXG4gIFwiZWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY3NCxcbiAgXCJla29ua2FyZ3VybXVraGlcIixcbiAgMHgwYTc0LFxuICBcImVrb3JlYW5cIixcbiAgMHgzMTU0LFxuICBcImVsY3lyaWxsaWNcIixcbiAgMHgwNDNiLFxuICBcImVsZW1lbnRcIixcbiAgMHgyMjA4LFxuICBcImVsZXZlbmNpcmNsZVwiLFxuICAweDI0NmEsXG4gIFwiZWxldmVucGFyZW5cIixcbiAgMHgyNDdlLFxuICBcImVsZXZlbnBlcmlvZFwiLFxuICAweDI0OTIsXG4gIFwiZWxldmVucm9tYW5cIixcbiAgMHgyMTdhLFxuICBcImVsbGlwc2lzXCIsXG4gIDB4MjAyNixcbiAgXCJlbGxpcHNpc3ZlcnRpY2FsXCIsXG4gIDB4MjJlZSxcbiAgXCJlbWFjcm9uXCIsXG4gIDB4MDExMyxcbiAgXCJlbWFjcm9uYWN1dGVcIixcbiAgMHgxZTE3LFxuICBcImVtYWNyb25ncmF2ZVwiLFxuICAweDFlMTUsXG4gIFwiZW1jeXJpbGxpY1wiLFxuICAweDA0M2MsXG4gIFwiZW1kYXNoXCIsXG4gIDB4MjAxNCxcbiAgXCJlbWRhc2h2ZXJ0aWNhbFwiLFxuICAweGZlMzEsXG4gIFwiZW1vbm9zcGFjZVwiLFxuICAweGZmNDUsXG4gIFwiZW1waGFzaXNtYXJrYXJtZW5pYW5cIixcbiAgMHgwNTViLFxuICBcImVtcHR5c2V0XCIsXG4gIDB4MjIwNSxcbiAgXCJlbmJvcG9tb2ZvXCIsXG4gIDB4MzEyMyxcbiAgXCJlbmN5cmlsbGljXCIsXG4gIDB4MDQzZCxcbiAgXCJlbmRhc2hcIixcbiAgMHgyMDEzLFxuICBcImVuZGFzaHZlcnRpY2FsXCIsXG4gIDB4ZmUzMixcbiAgXCJlbmRlc2NlbmRlcmN5cmlsbGljXCIsXG4gIDB4MDRhMyxcbiAgXCJlbmdcIixcbiAgMHgwMTRiLFxuICBcImVuZ2JvcG9tb2ZvXCIsXG4gIDB4MzEyNSxcbiAgXCJlbmdoZWN5cmlsbGljXCIsXG4gIDB4MDRhNSxcbiAgXCJlbmhvb2tjeXJpbGxpY1wiLFxuICAweDA0YzgsXG4gIFwiZW5zcGFjZVwiLFxuICAweDIwMDIsXG4gIFwiZW9nb25la1wiLFxuICAweDAxMTksXG4gIFwiZW9rb3JlYW5cIixcbiAgMHgzMTUzLFxuICBcImVvcGVuXCIsXG4gIDB4MDI1YixcbiAgXCJlb3BlbmNsb3NlZFwiLFxuICAweDAyOWEsXG4gIFwiZW9wZW5yZXZlcnNlZFwiLFxuICAweDAyNWMsXG4gIFwiZW9wZW5yZXZlcnNlZGNsb3NlZFwiLFxuICAweDAyNWUsXG4gIFwiZW9wZW5yZXZlcnNlZGhvb2tcIixcbiAgMHgwMjVkLFxuICBcImVwYXJlblwiLFxuICAweDI0YTAsXG4gIFwiZXBzaWxvblwiLFxuICAweDAzYjUsXG4gIFwiZXBzaWxvbnRvbm9zXCIsXG4gIDB4MDNhZCxcbiAgXCJlcXVhbFwiLFxuICAweDAwM2QsXG4gIFwiZXF1YWxtb25vc3BhY2VcIixcbiAgMHhmZjFkLFxuICBcImVxdWFsc21hbGxcIixcbiAgMHhmZTY2LFxuICBcImVxdWFsc3VwZXJpb3JcIixcbiAgMHgyMDdjLFxuICBcImVxdWl2YWxlbmNlXCIsXG4gIDB4MjI2MSxcbiAgXCJlcmJvcG9tb2ZvXCIsXG4gIDB4MzEyNixcbiAgXCJlcmN5cmlsbGljXCIsXG4gIDB4MDQ0MCxcbiAgXCJlcmV2ZXJzZWRcIixcbiAgMHgwMjU4LFxuICBcImVyZXZlcnNlZGN5cmlsbGljXCIsXG4gIDB4MDQ0ZCxcbiAgXCJlc2N5cmlsbGljXCIsXG4gIDB4MDQ0MSxcbiAgXCJlc2Rlc2NlbmRlcmN5cmlsbGljXCIsXG4gIDB4MDRhYixcbiAgXCJlc2hcIixcbiAgMHgwMjgzLFxuICBcImVzaGN1cmxcIixcbiAgMHgwMjg2LFxuICBcImVzaG9ydGRldmFcIixcbiAgMHgwOTBlLFxuICBcImVzaG9ydHZvd2Vsc2lnbmRldmFcIixcbiAgMHgwOTQ2LFxuICBcImVzaHJldmVyc2VkbG9vcFwiLFxuICAweDAxYWEsXG4gIFwiZXNoc3F1YXRyZXZlcnNlZFwiLFxuICAweDAyODUsXG4gIFwiZXNtYWxsaGlyYWdhbmFcIixcbiAgMHgzMDQ3LFxuICBcImVzbWFsbGthdGFrYW5hXCIsXG4gIDB4MzBhNyxcbiAgXCJlc21hbGxrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmNmEsXG4gIFwiZXN0aW1hdGVkXCIsXG4gIDB4MjEyZSxcbiAgXCJlc3VwZXJpb3JcIixcbiAgMHhmNmVjLFxuICBcImV0YVwiLFxuICAweDAzYjcsXG4gIFwiZXRhcm1lbmlhblwiLFxuICAweDA1NjgsXG4gIFwiZXRhdG9ub3NcIixcbiAgMHgwM2FlLFxuICBcImV0aFwiLFxuICAweDAwZjAsXG4gIFwiZXRpbGRlXCIsXG4gIDB4MWViZCxcbiAgXCJldGlsZGViZWxvd1wiLFxuICAweDFlMWIsXG4gIFwiZXRuYWh0YWZvdWtoaGVicmV3XCIsXG4gIDB4MDU5MSxcbiAgXCJldG5haHRhZm91a2hsZWZ0aGVicmV3XCIsXG4gIDB4MDU5MSxcbiAgXCJldG5haHRhaGVicmV3XCIsXG4gIDB4MDU5MSxcbiAgXCJldG5haHRhbGVmdGhlYnJld1wiLFxuICAweDA1OTEsXG4gIFwiZXR1cm5lZFwiLFxuICAweDAxZGQsXG4gIFwiZXVrb3JlYW5cIixcbiAgMHgzMTYxLFxuICBcImV1cm9cIixcbiAgMHgyMGFjLFxuICBcImV2b3dlbHNpZ25iZW5nYWxpXCIsXG4gIDB4MDljNyxcbiAgXCJldm93ZWxzaWduZGV2YVwiLFxuICAweDA5NDcsXG4gIFwiZXZvd2Vsc2lnbmd1amFyYXRpXCIsXG4gIDB4MGFjNyxcbiAgXCJleGNsYW1cIixcbiAgMHgwMDIxLFxuICBcImV4Y2xhbWFybWVuaWFuXCIsXG4gIDB4MDU1YyxcbiAgXCJleGNsYW1kYmxcIixcbiAgMHgyMDNjLFxuICBcImV4Y2xhbWRvd25cIixcbiAgMHgwMGExLFxuICBcImV4Y2xhbWRvd25zbWFsbFwiLFxuICAweGY3YTEsXG4gIFwiZXhjbGFtbW9ub3NwYWNlXCIsXG4gIDB4ZmYwMSxcbiAgXCJleGNsYW1zbWFsbFwiLFxuICAweGY3MjEsXG4gIFwiZXhpc3RlbnRpYWxcIixcbiAgMHgyMjAzLFxuICBcImV6aFwiLFxuICAweDAyOTIsXG4gIFwiZXpoY2Fyb25cIixcbiAgMHgwMWVmLFxuICBcImV6aGN1cmxcIixcbiAgMHgwMjkzLFxuICBcImV6aHJldmVyc2VkXCIsXG4gIDB4MDFiOSxcbiAgXCJlemh0YWlsXCIsXG4gIDB4MDFiYSxcbiAgXCJmXCIsXG4gIDB4MDA2NixcbiAgXCJmYWRldmFcIixcbiAgMHgwOTVlLFxuICBcImZhZ3VybXVraGlcIixcbiAgMHgwYTVlLFxuICBcImZhaHJlbmhlaXRcIixcbiAgMHgyMTA5LFxuICBcImZhdGhhYXJhYmljXCIsXG4gIDB4MDY0ZSxcbiAgXCJmYXRoYWxvd2FyYWJpY1wiLFxuICAweDA2NGUsXG4gIFwiZmF0aGF0YW5hcmFiaWNcIixcbiAgMHgwNjRiLFxuICBcImZib3BvbW9mb1wiLFxuICAweDMxMDgsXG4gIFwiZmNpcmNsZVwiLFxuICAweDI0ZDUsXG4gIFwiZmRvdGFjY2VudFwiLFxuICAweDFlMWYsXG4gIFwiZmVoYXJhYmljXCIsXG4gIDB4MDY0MSxcbiAgXCJmZWhhcm1lbmlhblwiLFxuICAweDA1ODYsXG4gIFwiZmVoZmluYWxhcmFiaWNcIixcbiAgMHhmZWQyLFxuICBcImZlaGluaXRpYWxhcmFiaWNcIixcbiAgMHhmZWQzLFxuICBcImZlaG1lZGlhbGFyYWJpY1wiLFxuICAweGZlZDQsXG4gIFwiZmVpY29wdGljXCIsXG4gIDB4MDNlNSxcbiAgXCJmZW1hbGVcIixcbiAgMHgyNjQwLFxuICBcImZmXCIsXG4gIDB4ZmIwMCxcbiAgXCJmX2ZcIixcbiAgMHhmYjAwLFxuICBcImZmaVwiLFxuICAweGZiMDMsXG4gIFwiZmZsXCIsXG4gIDB4ZmIwNCxcbiAgXCJmaVwiLFxuICAweGZiMDEsXG4gIFwiZmlmdGVlbmNpcmNsZVwiLFxuICAweDI0NmUsXG4gIFwiZmlmdGVlbnBhcmVuXCIsXG4gIDB4MjQ4MixcbiAgXCJmaWZ0ZWVucGVyaW9kXCIsXG4gIDB4MjQ5NixcbiAgXCJmaWd1cmVkYXNoXCIsXG4gIDB4MjAxMixcbiAgXCJmaWxsZWRib3hcIixcbiAgMHgyNWEwLFxuICBcImZpbGxlZHJlY3RcIixcbiAgMHgyNWFjLFxuICBcImZpbmFsa2FmXCIsXG4gIDB4MDVkYSxcbiAgXCJmaW5hbGthZmRhZ2VzaFwiLFxuICAweGZiM2EsXG4gIFwiZmluYWxrYWZkYWdlc2hoZWJyZXdcIixcbiAgMHhmYjNhLFxuICBcImZpbmFsa2FmaGVicmV3XCIsXG4gIDB4MDVkYSxcbiAgXCJmaW5hbG1lbVwiLFxuICAweDA1ZGQsXG4gIFwiZmluYWxtZW1oZWJyZXdcIixcbiAgMHgwNWRkLFxuICBcImZpbmFsbnVuXCIsXG4gIDB4MDVkZixcbiAgXCJmaW5hbG51bmhlYnJld1wiLFxuICAweDA1ZGYsXG4gIFwiZmluYWxwZVwiLFxuICAweDA1ZTMsXG4gIFwiZmluYWxwZWhlYnJld1wiLFxuICAweDA1ZTMsXG4gIFwiZmluYWx0c2FkaVwiLFxuICAweDA1ZTUsXG4gIFwiZmluYWx0c2FkaWhlYnJld1wiLFxuICAweDA1ZTUsXG4gIFwiZmlyc3R0b25lY2hpbmVzZVwiLFxuICAweDAyYzksXG4gIFwiZmlzaGV5ZVwiLFxuICAweDI1YzksXG4gIFwiZml0YWN5cmlsbGljXCIsXG4gIDB4MDQ3MyxcbiAgXCJmaXZlXCIsXG4gIDB4MDAzNSxcbiAgXCJmaXZlYXJhYmljXCIsXG4gIDB4MDY2NSxcbiAgXCJmaXZlYmVuZ2FsaVwiLFxuICAweDA5ZWIsXG4gIFwiZml2ZWNpcmNsZVwiLFxuICAweDI0NjQsXG4gIFwiZml2ZWNpcmNsZWludmVyc2VzYW5zc2VyaWZcIixcbiAgMHgyNzhlLFxuICBcImZpdmVkZXZhXCIsXG4gIDB4MDk2YixcbiAgXCJmaXZlZWlnaHRoc1wiLFxuICAweDIxNWQsXG4gIFwiZml2ZWd1amFyYXRpXCIsXG4gIDB4MGFlYixcbiAgXCJmaXZlZ3VybXVraGlcIixcbiAgMHgwYTZiLFxuICBcImZpdmVoYWNrYXJhYmljXCIsXG4gIDB4MDY2NSxcbiAgXCJmaXZlaGFuZ3pob3VcIixcbiAgMHgzMDI1LFxuICBcImZpdmVpZGVvZ3JhcGhpY3BhcmVuXCIsXG4gIDB4MzIyNCxcbiAgXCJmaXZlaW5mZXJpb3JcIixcbiAgMHgyMDg1LFxuICBcImZpdmVtb25vc3BhY2VcIixcbiAgMHhmZjE1LFxuICBcImZpdmVvbGRzdHlsZVwiLFxuICAweGY3MzUsXG4gIFwiZml2ZXBhcmVuXCIsXG4gIDB4MjQ3OCxcbiAgXCJmaXZlcGVyaW9kXCIsXG4gIDB4MjQ4YyxcbiAgXCJmaXZlcGVyc2lhblwiLFxuICAweDA2ZjUsXG4gIFwiZml2ZXJvbWFuXCIsXG4gIDB4MjE3NCxcbiAgXCJmaXZlc3VwZXJpb3JcIixcbiAgMHgyMDc1LFxuICBcImZpdmV0aGFpXCIsXG4gIDB4MGU1NSxcbiAgXCJmbFwiLFxuICAweGZiMDIsXG4gIFwiZmxvcmluXCIsXG4gIDB4MDE5MixcbiAgXCJmbW9ub3NwYWNlXCIsXG4gIDB4ZmY0NixcbiAgXCJmbXNxdWFyZVwiLFxuICAweDMzOTksXG4gIFwiZm9mYW50aGFpXCIsXG4gIDB4MGUxZixcbiAgXCJmb2ZhdGhhaVwiLFxuICAweDBlMWQsXG4gIFwiZm9uZ21hbnRoYWlcIixcbiAgMHgwZTRmLFxuICBcImZvcmFsbFwiLFxuICAweDIyMDAsXG4gIFwiZm91clwiLFxuICAweDAwMzQsXG4gIFwiZm91cmFyYWJpY1wiLFxuICAweDA2NjQsXG4gIFwiZm91cmJlbmdhbGlcIixcbiAgMHgwOWVhLFxuICBcImZvdXJjaXJjbGVcIixcbiAgMHgyNDYzLFxuICBcImZvdXJjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmXCIsXG4gIDB4Mjc4ZCxcbiAgXCJmb3VyZGV2YVwiLFxuICAweDA5NmEsXG4gIFwiZm91cmd1amFyYXRpXCIsXG4gIDB4MGFlYSxcbiAgXCJmb3VyZ3VybXVraGlcIixcbiAgMHgwYTZhLFxuICBcImZvdXJoYWNrYXJhYmljXCIsXG4gIDB4MDY2NCxcbiAgXCJmb3VyaGFuZ3pob3VcIixcbiAgMHgzMDI0LFxuICBcImZvdXJpZGVvZ3JhcGhpY3BhcmVuXCIsXG4gIDB4MzIyMyxcbiAgXCJmb3VyaW5mZXJpb3JcIixcbiAgMHgyMDg0LFxuICBcImZvdXJtb25vc3BhY2VcIixcbiAgMHhmZjE0LFxuICBcImZvdXJudW1lcmF0b3JiZW5nYWxpXCIsXG4gIDB4MDlmNyxcbiAgXCJmb3Vyb2xkc3R5bGVcIixcbiAgMHhmNzM0LFxuICBcImZvdXJwYXJlblwiLFxuICAweDI0NzcsXG4gIFwiZm91cnBlcmlvZFwiLFxuICAweDI0OGIsXG4gIFwiZm91cnBlcnNpYW5cIixcbiAgMHgwNmY0LFxuICBcImZvdXJyb21hblwiLFxuICAweDIxNzMsXG4gIFwiZm91cnN1cGVyaW9yXCIsXG4gIDB4MjA3NCxcbiAgXCJmb3VydGVlbmNpcmNsZVwiLFxuICAweDI0NmQsXG4gIFwiZm91cnRlZW5wYXJlblwiLFxuICAweDI0ODEsXG4gIFwiZm91cnRlZW5wZXJpb2RcIixcbiAgMHgyNDk1LFxuICBcImZvdXJ0aGFpXCIsXG4gIDB4MGU1NCxcbiAgXCJmb3VydGh0b25lY2hpbmVzZVwiLFxuICAweDAyY2IsXG4gIFwiZnBhcmVuXCIsXG4gIDB4MjRhMSxcbiAgXCJmcmFjdGlvblwiLFxuICAweDIwNDQsXG4gIFwiZnJhbmNcIixcbiAgMHgyMGEzLFxuICBcImdcIixcbiAgMHgwMDY3LFxuICBcImdhYmVuZ2FsaVwiLFxuICAweDA5OTcsXG4gIFwiZ2FjdXRlXCIsXG4gIDB4MDFmNSxcbiAgXCJnYWRldmFcIixcbiAgMHgwOTE3LFxuICBcImdhZmFyYWJpY1wiLFxuICAweDA2YWYsXG4gIFwiZ2FmZmluYWxhcmFiaWNcIixcbiAgMHhmYjkzLFxuICBcImdhZmluaXRpYWxhcmFiaWNcIixcbiAgMHhmYjk0LFxuICBcImdhZm1lZGlhbGFyYWJpY1wiLFxuICAweGZiOTUsXG4gIFwiZ2FndWphcmF0aVwiLFxuICAweDBhOTcsXG4gIFwiZ2FndXJtdWtoaVwiLFxuICAweDBhMTcsXG4gIFwiZ2FoaXJhZ2FuYVwiLFxuICAweDMwNGMsXG4gIFwiZ2FrYXRha2FuYVwiLFxuICAweDMwYWMsXG4gIFwiZ2FtbWFcIixcbiAgMHgwM2IzLFxuICBcImdhbW1hbGF0aW5zbWFsbFwiLFxuICAweDAyNjMsXG4gIFwiZ2FtbWFzdXBlcmlvclwiLFxuICAweDAyZTAsXG4gIFwiZ2FuZ2lhY29wdGljXCIsXG4gIDB4MDNlYixcbiAgXCJnYm9wb21vZm9cIixcbiAgMHgzMTBkLFxuICBcImdicmV2ZVwiLFxuICAweDAxMWYsXG4gIFwiZ2Nhcm9uXCIsXG4gIDB4MDFlNyxcbiAgXCJnY2VkaWxsYVwiLFxuICAweDAxMjMsXG4gIFwiZ2NpcmNsZVwiLFxuICAweDI0ZDYsXG4gIFwiZ2NpcmN1bWZsZXhcIixcbiAgMHgwMTFkLFxuICBcImdjb21tYWFjY2VudFwiLFxuICAweDAxMjMsXG4gIFwiZ2RvdFwiLFxuICAweDAxMjEsXG4gIFwiZ2RvdGFjY2VudFwiLFxuICAweDAxMjEsXG4gIFwiZ2VjeXJpbGxpY1wiLFxuICAweDA0MzMsXG4gIFwiZ2VoaXJhZ2FuYVwiLFxuICAweDMwNTIsXG4gIFwiZ2VrYXRha2FuYVwiLFxuICAweDMwYjIsXG4gIFwiZ2VvbWV0cmljYWxseWVxdWFsXCIsXG4gIDB4MjI1MSxcbiAgXCJnZXJlc2hhY2NlbnRoZWJyZXdcIixcbiAgMHgwNTljLFxuICBcImdlcmVzaGhlYnJld1wiLFxuICAweDA1ZjMsXG4gIFwiZ2VyZXNobXVxZGFtaGVicmV3XCIsXG4gIDB4MDU5ZCxcbiAgXCJnZXJtYW5kYmxzXCIsXG4gIDB4MDBkZixcbiAgXCJnZXJzaGF5aW1hY2NlbnRoZWJyZXdcIixcbiAgMHgwNTllLFxuICBcImdlcnNoYXlpbWhlYnJld1wiLFxuICAweDA1ZjQsXG4gIFwiZ2V0YW1hcmtcIixcbiAgMHgzMDEzLFxuICBcImdoYWJlbmdhbGlcIixcbiAgMHgwOTk4LFxuICBcImdoYWRhcm1lbmlhblwiLFxuICAweDA1NzIsXG4gIFwiZ2hhZGV2YVwiLFxuICAweDA5MTgsXG4gIFwiZ2hhZ3VqYXJhdGlcIixcbiAgMHgwYTk4LFxuICBcImdoYWd1cm11a2hpXCIsXG4gIDB4MGExOCxcbiAgXCJnaGFpbmFyYWJpY1wiLFxuICAweDA2M2EsXG4gIFwiZ2hhaW5maW5hbGFyYWJpY1wiLFxuICAweGZlY2UsXG4gIFwiZ2hhaW5pbml0aWFsYXJhYmljXCIsXG4gIDB4ZmVjZixcbiAgXCJnaGFpbm1lZGlhbGFyYWJpY1wiLFxuICAweGZlZDAsXG4gIFwiZ2hlbWlkZGxlaG9va2N5cmlsbGljXCIsXG4gIDB4MDQ5NSxcbiAgXCJnaGVzdHJva2VjeXJpbGxpY1wiLFxuICAweDA0OTMsXG4gIFwiZ2hldXB0dXJuY3lyaWxsaWNcIixcbiAgMHgwNDkxLFxuICBcImdoaGFkZXZhXCIsXG4gIDB4MDk1YSxcbiAgXCJnaGhhZ3VybXVraGlcIixcbiAgMHgwYTVhLFxuICBcImdob29rXCIsXG4gIDB4MDI2MCxcbiAgXCJnaHpzcXVhcmVcIixcbiAgMHgzMzkzLFxuICBcImdpaGlyYWdhbmFcIixcbiAgMHgzMDRlLFxuICBcImdpa2F0YWthbmFcIixcbiAgMHgzMGFlLFxuICBcImdpbWFybWVuaWFuXCIsXG4gIDB4MDU2MyxcbiAgXCJnaW1lbFwiLFxuICAweDA1ZDIsXG4gIFwiZ2ltZWxkYWdlc2hcIixcbiAgMHhmYjMyLFxuICBcImdpbWVsZGFnZXNoaGVicmV3XCIsXG4gIDB4ZmIzMixcbiAgXCJnaW1lbGhlYnJld1wiLFxuICAweDA1ZDIsXG4gIFwiZ2plY3lyaWxsaWNcIixcbiAgMHgwNDUzLFxuICBcImdsb3R0YWxpbnZlcnRlZHN0cm9rZVwiLFxuICAweDAxYmUsXG4gIFwiZ2xvdHRhbHN0b3BcIixcbiAgMHgwMjk0LFxuICBcImdsb3R0YWxzdG9waW52ZXJ0ZWRcIixcbiAgMHgwMjk2LFxuICBcImdsb3R0YWxzdG9wbW9kXCIsXG4gIDB4MDJjMCxcbiAgXCJnbG90dGFsc3RvcHJldmVyc2VkXCIsXG4gIDB4MDI5NSxcbiAgXCJnbG90dGFsc3RvcHJldmVyc2VkbW9kXCIsXG4gIDB4MDJjMSxcbiAgXCJnbG90dGFsc3RvcHJldmVyc2Vkc3VwZXJpb3JcIixcbiAgMHgwMmU0LFxuICBcImdsb3R0YWxzdG9wc3Ryb2tlXCIsXG4gIDB4MDJhMSxcbiAgXCJnbG90dGFsc3RvcHN0cm9rZXJldmVyc2VkXCIsXG4gIDB4MDJhMixcbiAgXCJnbWFjcm9uXCIsXG4gIDB4MWUyMSxcbiAgXCJnbW9ub3NwYWNlXCIsXG4gIDB4ZmY0NyxcbiAgXCJnb2hpcmFnYW5hXCIsXG4gIDB4MzA1NCxcbiAgXCJnb2thdGFrYW5hXCIsXG4gIDB4MzBiNCxcbiAgXCJncGFyZW5cIixcbiAgMHgyNGEyLFxuICBcImdwYXNxdWFyZVwiLFxuICAweDMzYWMsXG4gIFwiZ3JhZGllbnRcIixcbiAgMHgyMjA3LFxuICBcImdyYXZlXCIsXG4gIDB4MDA2MCxcbiAgXCJncmF2ZWJlbG93Y21iXCIsXG4gIDB4MDMxNixcbiAgXCJncmF2ZWNtYlwiLFxuICAweDAzMDAsXG4gIFwiZ3JhdmVjb21iXCIsXG4gIDB4MDMwMCxcbiAgXCJncmF2ZWRldmFcIixcbiAgMHgwOTUzLFxuICBcImdyYXZlbG93bW9kXCIsXG4gIDB4MDJjZSxcbiAgXCJncmF2ZW1vbm9zcGFjZVwiLFxuICAweGZmNDAsXG4gIFwiZ3JhdmV0b25lY21iXCIsXG4gIDB4MDM0MCxcbiAgXCJncmVhdGVyXCIsXG4gIDB4MDAzZSxcbiAgXCJncmVhdGVyZXF1YWxcIixcbiAgMHgyMjY1LFxuICBcImdyZWF0ZXJlcXVhbG9ybGVzc1wiLFxuICAweDIyZGIsXG4gIFwiZ3JlYXRlcm1vbm9zcGFjZVwiLFxuICAweGZmMWUsXG4gIFwiZ3JlYXRlcm9yZXF1aXZhbGVudFwiLFxuICAweDIyNzMsXG4gIFwiZ3JlYXRlcm9ybGVzc1wiLFxuICAweDIyNzcsXG4gIFwiZ3JlYXRlcm92ZXJlcXVhbFwiLFxuICAweDIyNjcsXG4gIFwiZ3JlYXRlcnNtYWxsXCIsXG4gIDB4ZmU2NSxcbiAgXCJnc2NyaXB0XCIsXG4gIDB4MDI2MSxcbiAgXCJnc3Ryb2tlXCIsXG4gIDB4MDFlNSxcbiAgXCJndWhpcmFnYW5hXCIsXG4gIDB4MzA1MCxcbiAgXCJndWlsbGVtb3RsZWZ0XCIsXG4gIDB4MDBhYixcbiAgXCJndWlsbGVtb3RyaWdodFwiLFxuICAweDAwYmIsXG4gIFwiZ3VpbHNpbmdsbGVmdFwiLFxuICAweDIwMzksXG4gIFwiZ3VpbHNpbmdscmlnaHRcIixcbiAgMHgyMDNhLFxuICBcImd1a2F0YWthbmFcIixcbiAgMHgzMGIwLFxuICBcImd1cmFtdXNxdWFyZVwiLFxuICAweDMzMTgsXG4gIFwiZ3lzcXVhcmVcIixcbiAgMHgzM2M5LFxuICBcImhcIixcbiAgMHgwMDY4LFxuICBcImhhYWJraGFzaWFuY3lyaWxsaWNcIixcbiAgMHgwNGE5LFxuICBcImhhYWx0b25lYXJhYmljXCIsXG4gIDB4MDZjMSxcbiAgXCJoYWJlbmdhbGlcIixcbiAgMHgwOWI5LFxuICBcImhhZGVzY2VuZGVyY3lyaWxsaWNcIixcbiAgMHgwNGIzLFxuICBcImhhZGV2YVwiLFxuICAweDA5MzksXG4gIFwiaGFndWphcmF0aVwiLFxuICAweDBhYjksXG4gIFwiaGFndXJtdWtoaVwiLFxuICAweDBhMzksXG4gIFwiaGFoYXJhYmljXCIsXG4gIDB4MDYyZCxcbiAgXCJoYWhmaW5hbGFyYWJpY1wiLFxuICAweGZlYTIsXG4gIFwiaGFoaW5pdGlhbGFyYWJpY1wiLFxuICAweGZlYTMsXG4gIFwiaGFoaXJhZ2FuYVwiLFxuICAweDMwNmYsXG4gIFwiaGFobWVkaWFsYXJhYmljXCIsXG4gIDB4ZmVhNCxcbiAgXCJoYWl0dXNxdWFyZVwiLFxuICAweDMzMmEsXG4gIFwiaGFrYXRha2FuYVwiLFxuICAweDMwY2YsXG4gIFwiaGFrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmOGEsXG4gIFwiaGFsYW50Z3VybXVraGlcIixcbiAgMHgwYTRkLFxuICBcImhhbXphYXJhYmljXCIsXG4gIDB4MDYyMSxcbiAgXCJoYW16YWxvd2FyYWJpY1wiLFxuICAweDA2MjEsXG4gIFwiaGFuZ3VsZmlsbGVyXCIsXG4gIDB4MzE2NCxcbiAgXCJoYXJkc2lnbmN5cmlsbGljXCIsXG4gIDB4MDQ0YSxcbiAgXCJoYXJwb29ubGVmdGJhcmJ1cFwiLFxuICAweDIxYmMsXG4gIFwiaGFycG9vbnJpZ2h0YmFyYnVwXCIsXG4gIDB4MjFjMCxcbiAgXCJoYXNxdWFyZVwiLFxuICAweDMzY2EsXG4gIFwiaGF0YWZwYXRhaFwiLFxuICAweDA1YjIsXG4gIFwiaGF0YWZwYXRhaDE2XCIsXG4gIDB4MDViMixcbiAgXCJoYXRhZnBhdGFoMjNcIixcbiAgMHgwNWIyLFxuICBcImhhdGFmcGF0YWgyZlwiLFxuICAweDA1YjIsXG4gIFwiaGF0YWZwYXRhaGhlYnJld1wiLFxuICAweDA1YjIsXG4gIFwiaGF0YWZwYXRhaG5hcnJvd2hlYnJld1wiLFxuICAweDA1YjIsXG4gIFwiaGF0YWZwYXRhaHF1YXJ0ZXJoZWJyZXdcIixcbiAgMHgwNWIyLFxuICBcImhhdGFmcGF0YWh3aWRlaGVicmV3XCIsXG4gIDB4MDViMixcbiAgXCJoYXRhZnFhbWF0c1wiLFxuICAweDA1YjMsXG4gIFwiaGF0YWZxYW1hdHMxYlwiLFxuICAweDA1YjMsXG4gIFwiaGF0YWZxYW1hdHMyOFwiLFxuICAweDA1YjMsXG4gIFwiaGF0YWZxYW1hdHMzNFwiLFxuICAweDA1YjMsXG4gIFwiaGF0YWZxYW1hdHNoZWJyZXdcIixcbiAgMHgwNWIzLFxuICBcImhhdGFmcWFtYXRzbmFycm93aGVicmV3XCIsXG4gIDB4MDViMyxcbiAgXCJoYXRhZnFhbWF0c3F1YXJ0ZXJoZWJyZXdcIixcbiAgMHgwNWIzLFxuICBcImhhdGFmcWFtYXRzd2lkZWhlYnJld1wiLFxuICAweDA1YjMsXG4gIFwiaGF0YWZzZWdvbFwiLFxuICAweDA1YjEsXG4gIFwiaGF0YWZzZWdvbDE3XCIsXG4gIDB4MDViMSxcbiAgXCJoYXRhZnNlZ29sMjRcIixcbiAgMHgwNWIxLFxuICBcImhhdGFmc2Vnb2wzMFwiLFxuICAweDA1YjEsXG4gIFwiaGF0YWZzZWdvbGhlYnJld1wiLFxuICAweDA1YjEsXG4gIFwiaGF0YWZzZWdvbG5hcnJvd2hlYnJld1wiLFxuICAweDA1YjEsXG4gIFwiaGF0YWZzZWdvbHF1YXJ0ZXJoZWJyZXdcIixcbiAgMHgwNWIxLFxuICBcImhhdGFmc2Vnb2x3aWRlaGVicmV3XCIsXG4gIDB4MDViMSxcbiAgXCJoYmFyXCIsXG4gIDB4MDEyNyxcbiAgXCJoYm9wb21vZm9cIixcbiAgMHgzMTBmLFxuICBcImhicmV2ZWJlbG93XCIsXG4gIDB4MWUyYixcbiAgXCJoY2VkaWxsYVwiLFxuICAweDFlMjksXG4gIFwiaGNpcmNsZVwiLFxuICAweDI0ZDcsXG4gIFwiaGNpcmN1bWZsZXhcIixcbiAgMHgwMTI1LFxuICBcImhkaWVyZXNpc1wiLFxuICAweDFlMjcsXG4gIFwiaGRvdGFjY2VudFwiLFxuICAweDFlMjMsXG4gIFwiaGRvdGJlbG93XCIsXG4gIDB4MWUyNSxcbiAgXCJoZVwiLFxuICAweDA1ZDQsXG4gIFwiaGVhcnRcIixcbiAgMHgyNjY1LFxuICBcImhlYXJ0c3VpdGJsYWNrXCIsXG4gIDB4MjY2NSxcbiAgXCJoZWFydHN1aXR3aGl0ZVwiLFxuICAweDI2NjEsXG4gIFwiaGVkYWdlc2hcIixcbiAgMHhmYjM0LFxuICBcImhlZGFnZXNoaGVicmV3XCIsXG4gIDB4ZmIzNCxcbiAgXCJoZWhhbHRvbmVhcmFiaWNcIixcbiAgMHgwNmMxLFxuICBcImhlaGFyYWJpY1wiLFxuICAweDA2NDcsXG4gIFwiaGVoZWJyZXdcIixcbiAgMHgwNWQ0LFxuICBcImhlaGZpbmFsYWx0b25lYXJhYmljXCIsXG4gIDB4ZmJhNyxcbiAgXCJoZWhmaW5hbGFsdHR3b2FyYWJpY1wiLFxuICAweGZlZWEsXG4gIFwiaGVoZmluYWxhcmFiaWNcIixcbiAgMHhmZWVhLFxuICBcImhlaGhhbXphYWJvdmVmaW5hbGFyYWJpY1wiLFxuICAweGZiYTUsXG4gIFwiaGVoaGFtemFhYm92ZWlzb2xhdGVkYXJhYmljXCIsXG4gIDB4ZmJhNCxcbiAgXCJoZWhpbml0aWFsYWx0b25lYXJhYmljXCIsXG4gIDB4ZmJhOCxcbiAgXCJoZWhpbml0aWFsYXJhYmljXCIsXG4gIDB4ZmVlYixcbiAgXCJoZWhpcmFnYW5hXCIsXG4gIDB4MzA3OCxcbiAgXCJoZWhtZWRpYWxhbHRvbmVhcmFiaWNcIixcbiAgMHhmYmE5LFxuICBcImhlaG1lZGlhbGFyYWJpY1wiLFxuICAweGZlZWMsXG4gIFwiaGVpc2VpZXJhc3F1YXJlXCIsXG4gIDB4MzM3YixcbiAgXCJoZWthdGFrYW5hXCIsXG4gIDB4MzBkOCxcbiAgXCJoZWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY4ZCxcbiAgXCJoZWt1dGFhcnVzcXVhcmVcIixcbiAgMHgzMzM2LFxuICBcImhlbmdob29rXCIsXG4gIDB4MDI2NyxcbiAgXCJoZXJ1dHVzcXVhcmVcIixcbiAgMHgzMzM5LFxuICBcImhldFwiLFxuICAweDA1ZDcsXG4gIFwiaGV0aGVicmV3XCIsXG4gIDB4MDVkNyxcbiAgXCJoaG9va1wiLFxuICAweDAyNjYsXG4gIFwiaGhvb2tzdXBlcmlvclwiLFxuICAweDAyYjEsXG4gIFwiaGlldWhhY2lyY2xla29yZWFuXCIsXG4gIDB4MzI3YixcbiAgXCJoaWV1aGFwYXJlbmtvcmVhblwiLFxuICAweDMyMWIsXG4gIFwiaGlldWhjaXJjbGVrb3JlYW5cIixcbiAgMHgzMjZkLFxuICBcImhpZXVoa29yZWFuXCIsXG4gIDB4MzE0ZSxcbiAgXCJoaWV1aHBhcmVua29yZWFuXCIsXG4gIDB4MzIwZCxcbiAgXCJoaWhpcmFnYW5hXCIsXG4gIDB4MzA3MixcbiAgXCJoaWthdGFrYW5hXCIsXG4gIDB4MzBkMixcbiAgXCJoaWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY4YixcbiAgXCJoaXJpcVwiLFxuICAweDA1YjQsXG4gIFwiaGlyaXExNFwiLFxuICAweDA1YjQsXG4gIFwiaGlyaXEyMVwiLFxuICAweDA1YjQsXG4gIFwiaGlyaXEyZFwiLFxuICAweDA1YjQsXG4gIFwiaGlyaXFoZWJyZXdcIixcbiAgMHgwNWI0LFxuICBcImhpcmlxbmFycm93aGVicmV3XCIsXG4gIDB4MDViNCxcbiAgXCJoaXJpcXF1YXJ0ZXJoZWJyZXdcIixcbiAgMHgwNWI0LFxuICBcImhpcmlxd2lkZWhlYnJld1wiLFxuICAweDA1YjQsXG4gIFwiaGxpbmViZWxvd1wiLFxuICAweDFlOTYsXG4gIFwiaG1vbm9zcGFjZVwiLFxuICAweGZmNDgsXG4gIFwiaG9hcm1lbmlhblwiLFxuICAweDA1NzAsXG4gIFwiaG9oaXB0aGFpXCIsXG4gIDB4MGUyYixcbiAgXCJob2hpcmFnYW5hXCIsXG4gIDB4MzA3YixcbiAgXCJob2thdGFrYW5hXCIsXG4gIDB4MzBkYixcbiAgXCJob2thdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY4ZSxcbiAgXCJob2xhbVwiLFxuICAweDA1YjksXG4gIFwiaG9sYW0xOVwiLFxuICAweDA1YjksXG4gIFwiaG9sYW0yNlwiLFxuICAweDA1YjksXG4gIFwiaG9sYW0zMlwiLFxuICAweDA1YjksXG4gIFwiaG9sYW1oZWJyZXdcIixcbiAgMHgwNWI5LFxuICBcImhvbGFtbmFycm93aGVicmV3XCIsXG4gIDB4MDViOSxcbiAgXCJob2xhbXF1YXJ0ZXJoZWJyZXdcIixcbiAgMHgwNWI5LFxuICBcImhvbGFtd2lkZWhlYnJld1wiLFxuICAweDA1YjksXG4gIFwiaG9ub2todWt0aGFpXCIsXG4gIDB4MGUyZSxcbiAgXCJob29rYWJvdmVjb21iXCIsXG4gIDB4MDMwOSxcbiAgXCJob29rY21iXCIsXG4gIDB4MDMwOSxcbiAgXCJob29rcGFsYXRhbGl6ZWRiZWxvd2NtYlwiLFxuICAweDAzMjEsXG4gIFwiaG9va3JldHJvZmxleGJlbG93Y21iXCIsXG4gIDB4MDMyMixcbiAgXCJob29uc3F1YXJlXCIsXG4gIDB4MzM0MixcbiAgXCJob3JpY29wdGljXCIsXG4gIDB4MDNlOSxcbiAgXCJob3Jpem9udGFsYmFyXCIsXG4gIDB4MjAxNSxcbiAgXCJob3JuY21iXCIsXG4gIDB4MDMxYixcbiAgXCJob3RzcHJpbmdzXCIsXG4gIDB4MjY2OCxcbiAgXCJob3VzZVwiLFxuICAweDIzMDIsXG4gIFwiaHBhcmVuXCIsXG4gIDB4MjRhMyxcbiAgXCJoc3VwZXJpb3JcIixcbiAgMHgwMmIwLFxuICBcImh0dXJuZWRcIixcbiAgMHgwMjY1LFxuICBcImh1aGlyYWdhbmFcIixcbiAgMHgzMDc1LFxuICBcImh1aWl0b3NxdWFyZVwiLFxuICAweDMzMzMsXG4gIFwiaHVrYXRha2FuYVwiLFxuICAweDMwZDUsXG4gIFwiaHVrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmOGMsXG4gIFwiaHVuZ2FydW1sYXV0XCIsXG4gIDB4MDJkZCxcbiAgXCJodW5nYXJ1bWxhdXRjbWJcIixcbiAgMHgwMzBiLFxuICBcImh2XCIsXG4gIDB4MDE5NSxcbiAgXCJoeXBoZW5cIixcbiAgMHgwMDJkLFxuICBcImh5cGhlbmluZmVyaW9yXCIsXG4gIDB4ZjZlNSxcbiAgXCJoeXBoZW5tb25vc3BhY2VcIixcbiAgMHhmZjBkLFxuICBcImh5cGhlbnNtYWxsXCIsXG4gIDB4ZmU2MyxcbiAgXCJoeXBoZW5zdXBlcmlvclwiLFxuICAweGY2ZTYsXG4gIFwiaHlwaGVudHdvXCIsXG4gIDB4MjAxMCxcbiAgXCJpXCIsXG4gIDB4MDA2OSxcbiAgXCJpYWN1dGVcIixcbiAgMHgwMGVkLFxuICBcImlhY3lyaWxsaWNcIixcbiAgMHgwNDRmLFxuICBcImliZW5nYWxpXCIsXG4gIDB4MDk4NyxcbiAgXCJpYm9wb21vZm9cIixcbiAgMHgzMTI3LFxuICBcImlicmV2ZVwiLFxuICAweDAxMmQsXG4gIFwiaWNhcm9uXCIsXG4gIDB4MDFkMCxcbiAgXCJpY2lyY2xlXCIsXG4gIDB4MjRkOCxcbiAgXCJpY2lyY3VtZmxleFwiLFxuICAweDAwZWUsXG4gIFwiaWN5cmlsbGljXCIsXG4gIDB4MDQ1NixcbiAgXCJpZGJsZ3JhdmVcIixcbiAgMHgwMjA5LFxuICBcImlkZW9ncmFwaGVhcnRoY2lyY2xlXCIsXG4gIDB4MzI4ZixcbiAgXCJpZGVvZ3JhcGhmaXJlY2lyY2xlXCIsXG4gIDB4MzI4YixcbiAgXCJpZGVvZ3JhcGhpY2FsbGlhbmNlcGFyZW5cIixcbiAgMHgzMjNmLFxuICBcImlkZW9ncmFwaGljY2FsbHBhcmVuXCIsXG4gIDB4MzIzYSxcbiAgXCJpZGVvZ3JhcGhpY2NlbnRyZWNpcmNsZVwiLFxuICAweDMyYTUsXG4gIFwiaWRlb2dyYXBoaWNjbG9zZVwiLFxuICAweDMwMDYsXG4gIFwiaWRlb2dyYXBoaWNjb21tYVwiLFxuICAweDMwMDEsXG4gIFwiaWRlb2dyYXBoaWNjb21tYWxlZnRcIixcbiAgMHhmZjY0LFxuICBcImlkZW9ncmFwaGljY29uZ3JhdHVsYXRpb25wYXJlblwiLFxuICAweDMyMzcsXG4gIFwiaWRlb2dyYXBoaWNjb3JyZWN0Y2lyY2xlXCIsXG4gIDB4MzJhMyxcbiAgXCJpZGVvZ3JhcGhpY2VhcnRocGFyZW5cIixcbiAgMHgzMjJmLFxuICBcImlkZW9ncmFwaGljZW50ZXJwcmlzZXBhcmVuXCIsXG4gIDB4MzIzZCxcbiAgXCJpZGVvZ3JhcGhpY2V4Y2VsbGVudGNpcmNsZVwiLFxuICAweDMyOWQsXG4gIFwiaWRlb2dyYXBoaWNmZXN0aXZhbHBhcmVuXCIsXG4gIDB4MzI0MCxcbiAgXCJpZGVvZ3JhcGhpY2ZpbmFuY2lhbGNpcmNsZVwiLFxuICAweDMyOTYsXG4gIFwiaWRlb2dyYXBoaWNmaW5hbmNpYWxwYXJlblwiLFxuICAweDMyMzYsXG4gIFwiaWRlb2dyYXBoaWNmaXJlcGFyZW5cIixcbiAgMHgzMjJiLFxuICBcImlkZW9ncmFwaGljaGF2ZXBhcmVuXCIsXG4gIDB4MzIzMixcbiAgXCJpZGVvZ3JhcGhpY2hpZ2hjaXJjbGVcIixcbiAgMHgzMmE0LFxuICBcImlkZW9ncmFwaGljaXRlcmF0aW9ubWFya1wiLFxuICAweDMwMDUsXG4gIFwiaWRlb2dyYXBoaWNsYWJvcmNpcmNsZVwiLFxuICAweDMyOTgsXG4gIFwiaWRlb2dyYXBoaWNsYWJvcnBhcmVuXCIsXG4gIDB4MzIzOCxcbiAgXCJpZGVvZ3JhcGhpY2xlZnRjaXJjbGVcIixcbiAgMHgzMmE3LFxuICBcImlkZW9ncmFwaGljbG93Y2lyY2xlXCIsXG4gIDB4MzJhNixcbiAgXCJpZGVvZ3JhcGhpY21lZGljaW5lY2lyY2xlXCIsXG4gIDB4MzJhOSxcbiAgXCJpZGVvZ3JhcGhpY21ldGFscGFyZW5cIixcbiAgMHgzMjJlLFxuICBcImlkZW9ncmFwaGljbW9vbnBhcmVuXCIsXG4gIDB4MzIyYSxcbiAgXCJpZGVvZ3JhcGhpY25hbWVwYXJlblwiLFxuICAweDMyMzQsXG4gIFwiaWRlb2dyYXBoaWNwZXJpb2RcIixcbiAgMHgzMDAyLFxuICBcImlkZW9ncmFwaGljcHJpbnRjaXJjbGVcIixcbiAgMHgzMjllLFxuICBcImlkZW9ncmFwaGljcmVhY2hwYXJlblwiLFxuICAweDMyNDMsXG4gIFwiaWRlb2dyYXBoaWNyZXByZXNlbnRwYXJlblwiLFxuICAweDMyMzksXG4gIFwiaWRlb2dyYXBoaWNyZXNvdXJjZXBhcmVuXCIsXG4gIDB4MzIzZSxcbiAgXCJpZGVvZ3JhcGhpY3JpZ2h0Y2lyY2xlXCIsXG4gIDB4MzJhOCxcbiAgXCJpZGVvZ3JhcGhpY3NlY3JldGNpcmNsZVwiLFxuICAweDMyOTksXG4gIFwiaWRlb2dyYXBoaWNzZWxmcGFyZW5cIixcbiAgMHgzMjQyLFxuICBcImlkZW9ncmFwaGljc29jaWV0eXBhcmVuXCIsXG4gIDB4MzIzMyxcbiAgXCJpZGVvZ3JhcGhpY3NwYWNlXCIsXG4gIDB4MzAwMCxcbiAgXCJpZGVvZ3JhcGhpY3NwZWNpYWxwYXJlblwiLFxuICAweDMyMzUsXG4gIFwiaWRlb2dyYXBoaWNzdG9ja3BhcmVuXCIsXG4gIDB4MzIzMSxcbiAgXCJpZGVvZ3JhcGhpY3N0dWR5cGFyZW5cIixcbiAgMHgzMjNiLFxuICBcImlkZW9ncmFwaGljc3VucGFyZW5cIixcbiAgMHgzMjMwLFxuICBcImlkZW9ncmFwaGljc3VwZXJ2aXNlcGFyZW5cIixcbiAgMHgzMjNjLFxuICBcImlkZW9ncmFwaGljd2F0ZXJwYXJlblwiLFxuICAweDMyMmMsXG4gIFwiaWRlb2dyYXBoaWN3b29kcGFyZW5cIixcbiAgMHgzMjJkLFxuICBcImlkZW9ncmFwaGljemVyb1wiLFxuICAweDMwMDcsXG4gIFwiaWRlb2dyYXBobWV0YWxjaXJjbGVcIixcbiAgMHgzMjhlLFxuICBcImlkZW9ncmFwaG1vb25jaXJjbGVcIixcbiAgMHgzMjhhLFxuICBcImlkZW9ncmFwaG5hbWVjaXJjbGVcIixcbiAgMHgzMjk0LFxuICBcImlkZW9ncmFwaHN1bmNpcmNsZVwiLFxuICAweDMyOTAsXG4gIFwiaWRlb2dyYXBod2F0ZXJjaXJjbGVcIixcbiAgMHgzMjhjLFxuICBcImlkZW9ncmFwaHdvb2RjaXJjbGVcIixcbiAgMHgzMjhkLFxuICBcImlkZXZhXCIsXG4gIDB4MDkwNyxcbiAgXCJpZGllcmVzaXNcIixcbiAgMHgwMGVmLFxuICBcImlkaWVyZXNpc2FjdXRlXCIsXG4gIDB4MWUyZixcbiAgXCJpZGllcmVzaXNjeXJpbGxpY1wiLFxuICAweDA0ZTUsXG4gIFwiaWRvdGJlbG93XCIsXG4gIDB4MWVjYixcbiAgXCJpZWJyZXZlY3lyaWxsaWNcIixcbiAgMHgwNGQ3LFxuICBcImllY3lyaWxsaWNcIixcbiAgMHgwNDM1LFxuICBcImlldW5nYWNpcmNsZWtvcmVhblwiLFxuICAweDMyNzUsXG4gIFwiaWV1bmdhcGFyZW5rb3JlYW5cIixcbiAgMHgzMjE1LFxuICBcImlldW5nY2lyY2xla29yZWFuXCIsXG4gIDB4MzI2NyxcbiAgXCJpZXVuZ2tvcmVhblwiLFxuICAweDMxNDcsXG4gIFwiaWV1bmdwYXJlbmtvcmVhblwiLFxuICAweDMyMDcsXG4gIFwiaWdyYXZlXCIsXG4gIDB4MDBlYyxcbiAgXCJpZ3VqYXJhdGlcIixcbiAgMHgwYTg3LFxuICBcImlndXJtdWtoaVwiLFxuICAweDBhMDcsXG4gIFwiaWhpcmFnYW5hXCIsXG4gIDB4MzA0NCxcbiAgXCJpaG9va2Fib3ZlXCIsXG4gIDB4MWVjOSxcbiAgXCJpaWJlbmdhbGlcIixcbiAgMHgwOTg4LFxuICBcImlpY3lyaWxsaWNcIixcbiAgMHgwNDM4LFxuICBcImlpZGV2YVwiLFxuICAweDA5MDgsXG4gIFwiaWlndWphcmF0aVwiLFxuICAweDBhODgsXG4gIFwiaWlndXJtdWtoaVwiLFxuICAweDBhMDgsXG4gIFwiaWltYXRyYWd1cm11a2hpXCIsXG4gIDB4MGE0MCxcbiAgXCJpaW52ZXJ0ZWRicmV2ZVwiLFxuICAweDAyMGIsXG4gIFwiaWlzaG9ydGN5cmlsbGljXCIsXG4gIDB4MDQzOSxcbiAgXCJpaXZvd2Vsc2lnbmJlbmdhbGlcIixcbiAgMHgwOWMwLFxuICBcImlpdm93ZWxzaWduZGV2YVwiLFxuICAweDA5NDAsXG4gIFwiaWl2b3dlbHNpZ25ndWphcmF0aVwiLFxuICAweDBhYzAsXG4gIFwiaWpcIixcbiAgMHgwMTMzLFxuICBcImlrYXRha2FuYVwiLFxuICAweDMwYTQsXG4gIFwiaWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY3MixcbiAgXCJpa29yZWFuXCIsXG4gIDB4MzE2MyxcbiAgXCJpbGRlXCIsXG4gIDB4MDJkYyxcbiAgXCJpbHV5aGVicmV3XCIsXG4gIDB4MDVhYyxcbiAgXCJpbWFjcm9uXCIsXG4gIDB4MDEyYixcbiAgXCJpbWFjcm9uY3lyaWxsaWNcIixcbiAgMHgwNGUzLFxuICBcImltYWdlb3JhcHByb3hpbWF0ZWx5ZXF1YWxcIixcbiAgMHgyMjUzLFxuICBcImltYXRyYWd1cm11a2hpXCIsXG4gIDB4MGEzZixcbiAgXCJpbW9ub3NwYWNlXCIsXG4gIDB4ZmY0OSxcbiAgXCJpbmNyZW1lbnRcIixcbiAgMHgyMjA2LFxuICBcImluZmluaXR5XCIsXG4gIDB4MjIxZSxcbiAgXCJpbmlhcm1lbmlhblwiLFxuICAweDA1NmIsXG4gIFwiaW50ZWdyYWxcIixcbiAgMHgyMjJiLFxuICBcImludGVncmFsYm90dG9tXCIsXG4gIDB4MjMyMSxcbiAgXCJpbnRlZ3JhbGJ0XCIsXG4gIDB4MjMyMSxcbiAgXCJpbnRlZ3JhbGV4XCIsXG4gIDB4ZjhmNSxcbiAgXCJpbnRlZ3JhbHRvcFwiLFxuICAweDIzMjAsXG4gIFwiaW50ZWdyYWx0cFwiLFxuICAweDIzMjAsXG4gIFwiaW50ZXJzZWN0aW9uXCIsXG4gIDB4MjIyOSxcbiAgXCJpbnRpc3F1YXJlXCIsXG4gIDB4MzMwNSxcbiAgXCJpbnZidWxsZXRcIixcbiAgMHgyNWQ4LFxuICBcImludmNpcmNsZVwiLFxuICAweDI1ZDksXG4gIFwiaW52c21pbGVmYWNlXCIsXG4gIDB4MjYzYixcbiAgXCJpb2N5cmlsbGljXCIsXG4gIDB4MDQ1MSxcbiAgXCJpb2dvbmVrXCIsXG4gIDB4MDEyZixcbiAgXCJpb3RhXCIsXG4gIDB4MDNiOSxcbiAgXCJpb3RhZGllcmVzaXNcIixcbiAgMHgwM2NhLFxuICBcImlvdGFkaWVyZXNpc3Rvbm9zXCIsXG4gIDB4MDM5MCxcbiAgXCJpb3RhbGF0aW5cIixcbiAgMHgwMjY5LFxuICBcImlvdGF0b25vc1wiLFxuICAweDAzYWYsXG4gIFwiaXBhcmVuXCIsXG4gIDB4MjRhNCxcbiAgXCJpcmlndXJtdWtoaVwiLFxuICAweDBhNzIsXG4gIFwiaXNtYWxsaGlyYWdhbmFcIixcbiAgMHgzMDQzLFxuICBcImlzbWFsbGthdGFrYW5hXCIsXG4gIDB4MzBhMyxcbiAgXCJpc21hbGxrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmNjgsXG4gIFwiaXNzaGFyYmVuZ2FsaVwiLFxuICAweDA5ZmEsXG4gIFwiaXN0cm9rZVwiLFxuICAweDAyNjgsXG4gIFwiaXN1cGVyaW9yXCIsXG4gIDB4ZjZlZCxcbiAgXCJpdGVyYXRpb25oaXJhZ2FuYVwiLFxuICAweDMwOWQsXG4gIFwiaXRlcmF0aW9ua2F0YWthbmFcIixcbiAgMHgzMGZkLFxuICBcIml0aWxkZVwiLFxuICAweDAxMjksXG4gIFwiaXRpbGRlYmVsb3dcIixcbiAgMHgxZTJkLFxuICBcIml1Ym9wb21vZm9cIixcbiAgMHgzMTI5LFxuICBcIml1Y3lyaWxsaWNcIixcbiAgMHgwNDRlLFxuICBcIml2b3dlbHNpZ25iZW5nYWxpXCIsXG4gIDB4MDliZixcbiAgXCJpdm93ZWxzaWduZGV2YVwiLFxuICAweDA5M2YsXG4gIFwiaXZvd2Vsc2lnbmd1amFyYXRpXCIsXG4gIDB4MGFiZixcbiAgXCJpemhpdHNhY3lyaWxsaWNcIixcbiAgMHgwNDc1LFxuICBcIml6aGl0c2FkYmxncmF2ZWN5cmlsbGljXCIsXG4gIDB4MDQ3NyxcbiAgXCJqXCIsXG4gIDB4MDA2YSxcbiAgXCJqYWFybWVuaWFuXCIsXG4gIDB4MDU3MSxcbiAgXCJqYWJlbmdhbGlcIixcbiAgMHgwOTljLFxuICBcImphZGV2YVwiLFxuICAweDA5MWMsXG4gIFwiamFndWphcmF0aVwiLFxuICAweDBhOWMsXG4gIFwiamFndXJtdWtoaVwiLFxuICAweDBhMWMsXG4gIFwiamJvcG9tb2ZvXCIsXG4gIDB4MzExMCxcbiAgXCJqY2Fyb25cIixcbiAgMHgwMWYwLFxuICBcImpjaXJjbGVcIixcbiAgMHgyNGQ5LFxuICBcImpjaXJjdW1mbGV4XCIsXG4gIDB4MDEzNSxcbiAgXCJqY3Jvc3NlZHRhaWxcIixcbiAgMHgwMjlkLFxuICBcImpkb3RsZXNzc3Ryb2tlXCIsXG4gIDB4MDI1ZixcbiAgXCJqZWN5cmlsbGljXCIsXG4gIDB4MDQ1OCxcbiAgXCJqZWVtYXJhYmljXCIsXG4gIDB4MDYyYyxcbiAgXCJqZWVtZmluYWxhcmFiaWNcIixcbiAgMHhmZTllLFxuICBcImplZW1pbml0aWFsYXJhYmljXCIsXG4gIDB4ZmU5ZixcbiAgXCJqZWVtbWVkaWFsYXJhYmljXCIsXG4gIDB4ZmVhMCxcbiAgXCJqZWhhcmFiaWNcIixcbiAgMHgwNjk4LFxuICBcImplaGZpbmFsYXJhYmljXCIsXG4gIDB4ZmI4YixcbiAgXCJqaGFiZW5nYWxpXCIsXG4gIDB4MDk5ZCxcbiAgXCJqaGFkZXZhXCIsXG4gIDB4MDkxZCxcbiAgXCJqaGFndWphcmF0aVwiLFxuICAweDBhOWQsXG4gIFwiamhhZ3VybXVraGlcIixcbiAgMHgwYTFkLFxuICBcImpoZWhhcm1lbmlhblwiLFxuICAweDA1N2IsXG4gIFwiamlzXCIsXG4gIDB4MzAwNCxcbiAgXCJqbW9ub3NwYWNlXCIsXG4gIDB4ZmY0YSxcbiAgXCJqcGFyZW5cIixcbiAgMHgyNGE1LFxuICBcImpzdXBlcmlvclwiLFxuICAweDAyYjIsXG4gIFwia1wiLFxuICAweDAwNmIsXG4gIFwia2FiYXNoa2lyY3lyaWxsaWNcIixcbiAgMHgwNGExLFxuICBcImthYmVuZ2FsaVwiLFxuICAweDA5OTUsXG4gIFwia2FjdXRlXCIsXG4gIDB4MWUzMSxcbiAgXCJrYWN5cmlsbGljXCIsXG4gIDB4MDQzYSxcbiAgXCJrYWRlc2NlbmRlcmN5cmlsbGljXCIsXG4gIDB4MDQ5YixcbiAgXCJrYWRldmFcIixcbiAgMHgwOTE1LFxuICBcImthZlwiLFxuICAweDA1ZGIsXG4gIFwia2FmYXJhYmljXCIsXG4gIDB4MDY0MyxcbiAgXCJrYWZkYWdlc2hcIixcbiAgMHhmYjNiLFxuICBcImthZmRhZ2VzaGhlYnJld1wiLFxuICAweGZiM2IsXG4gIFwia2FmZmluYWxhcmFiaWNcIixcbiAgMHhmZWRhLFxuICBcImthZmhlYnJld1wiLFxuICAweDA1ZGIsXG4gIFwia2FmaW5pdGlhbGFyYWJpY1wiLFxuICAweGZlZGIsXG4gIFwia2FmbWVkaWFsYXJhYmljXCIsXG4gIDB4ZmVkYyxcbiAgXCJrYWZyYWZlaGVicmV3XCIsXG4gIDB4ZmI0ZCxcbiAgXCJrYWd1amFyYXRpXCIsXG4gIDB4MGE5NSxcbiAgXCJrYWd1cm11a2hpXCIsXG4gIDB4MGExNSxcbiAgXCJrYWhpcmFnYW5hXCIsXG4gIDB4MzA0YixcbiAgXCJrYWhvb2tjeXJpbGxpY1wiLFxuICAweDA0YzQsXG4gIFwia2FrYXRha2FuYVwiLFxuICAweDMwYWIsXG4gIFwia2FrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmNzYsXG4gIFwia2FwcGFcIixcbiAgMHgwM2JhLFxuICBcImthcHBhc3ltYm9sZ3JlZWtcIixcbiAgMHgwM2YwLFxuICBcImthcHllb3VubWlldW1rb3JlYW5cIixcbiAgMHgzMTcxLFxuICBcImthcHllb3VucGhpZXVwaGtvcmVhblwiLFxuICAweDMxODQsXG4gIFwia2FweWVvdW5waWV1cGtvcmVhblwiLFxuICAweDMxNzgsXG4gIFwia2FweWVvdW5zc2FuZ3BpZXVwa29yZWFuXCIsXG4gIDB4MzE3OSxcbiAgXCJrYXJvcmlpc3F1YXJlXCIsXG4gIDB4MzMwZCxcbiAgXCJrYXNoaWRhYXV0b2FyYWJpY1wiLFxuICAweDA2NDAsXG4gIFwia2FzaGlkYWF1dG9ub3NpZGViZWFyaW5nYXJhYmljXCIsXG4gIDB4MDY0MCxcbiAgXCJrYXNtYWxsa2F0YWthbmFcIixcbiAgMHgzMGY1LFxuICBcImthc3F1YXJlXCIsXG4gIDB4MzM4NCxcbiAgXCJrYXNyYWFyYWJpY1wiLFxuICAweDA2NTAsXG4gIFwia2FzcmF0YW5hcmFiaWNcIixcbiAgMHgwNjRkLFxuICBcImthc3Ryb2tlY3lyaWxsaWNcIixcbiAgMHgwNDlmLFxuICBcImthdGFoaXJhcHJvbG9uZ21hcmtoYWxmd2lkdGhcIixcbiAgMHhmZjcwLFxuICBcImthdmVydGljYWxzdHJva2VjeXJpbGxpY1wiLFxuICAweDA0OWQsXG4gIFwia2JvcG9tb2ZvXCIsXG4gIDB4MzEwZSxcbiAgXCJrY2Fsc3F1YXJlXCIsXG4gIDB4MzM4OSxcbiAgXCJrY2Fyb25cIixcbiAgMHgwMWU5LFxuICBcImtjZWRpbGxhXCIsXG4gIDB4MDEzNyxcbiAgXCJrY2lyY2xlXCIsXG4gIDB4MjRkYSxcbiAgXCJrY29tbWFhY2NlbnRcIixcbiAgMHgwMTM3LFxuICBcImtkb3RiZWxvd1wiLFxuICAweDFlMzMsXG4gIFwia2VoYXJtZW5pYW5cIixcbiAgMHgwNTg0LFxuICBcImtlaGlyYWdhbmFcIixcbiAgMHgzMDUxLFxuICBcImtla2F0YWthbmFcIixcbiAgMHgzMGIxLFxuICBcImtla2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjc5LFxuICBcImtlbmFybWVuaWFuXCIsXG4gIDB4MDU2ZixcbiAgXCJrZXNtYWxsa2F0YWthbmFcIixcbiAgMHgzMGY2LFxuICBcImtncmVlbmxhbmRpY1wiLFxuICAweDAxMzgsXG4gIFwia2hhYmVuZ2FsaVwiLFxuICAweDA5OTYsXG4gIFwia2hhY3lyaWxsaWNcIixcbiAgMHgwNDQ1LFxuICBcImtoYWRldmFcIixcbiAgMHgwOTE2LFxuICBcImtoYWd1amFyYXRpXCIsXG4gIDB4MGE5NixcbiAgXCJraGFndXJtdWtoaVwiLFxuICAweDBhMTYsXG4gIFwia2hhaGFyYWJpY1wiLFxuICAweDA2MmUsXG4gIFwia2hhaGZpbmFsYXJhYmljXCIsXG4gIDB4ZmVhNixcbiAgXCJraGFoaW5pdGlhbGFyYWJpY1wiLFxuICAweGZlYTcsXG4gIFwia2hhaG1lZGlhbGFyYWJpY1wiLFxuICAweGZlYTgsXG4gIFwia2hlaWNvcHRpY1wiLFxuICAweDAzZTcsXG4gIFwia2hoYWRldmFcIixcbiAgMHgwOTU5LFxuICBcImtoaGFndXJtdWtoaVwiLFxuICAweDBhNTksXG4gIFwia2hpZXVraGFjaXJjbGVrb3JlYW5cIixcbiAgMHgzMjc4LFxuICBcImtoaWV1a2hhcGFyZW5rb3JlYW5cIixcbiAgMHgzMjE4LFxuICBcImtoaWV1a2hjaXJjbGVrb3JlYW5cIixcbiAgMHgzMjZhLFxuICBcImtoaWV1a2hrb3JlYW5cIixcbiAgMHgzMTRiLFxuICBcImtoaWV1a2hwYXJlbmtvcmVhblwiLFxuICAweDMyMGEsXG4gIFwia2hva2hhaXRoYWlcIixcbiAgMHgwZTAyLFxuICBcImtob2tob250aGFpXCIsXG4gIDB4MGUwNSxcbiAgXCJraG9raHVhdHRoYWlcIixcbiAgMHgwZTAzLFxuICBcImtob2tod2FpdGhhaVwiLFxuICAweDBlMDQsXG4gIFwia2hvbXV0dGhhaVwiLFxuICAweDBlNWIsXG4gIFwia2hvb2tcIixcbiAgMHgwMTk5LFxuICBcImtob3Jha2hhbmd0aGFpXCIsXG4gIDB4MGUwNixcbiAgXCJraHpzcXVhcmVcIixcbiAgMHgzMzkxLFxuICBcImtpaGlyYWdhbmFcIixcbiAgMHgzMDRkLFxuICBcImtpa2F0YWthbmFcIixcbiAgMHgzMGFkLFxuICBcImtpa2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjc3LFxuICBcImtpcm9ndXJhbXVzcXVhcmVcIixcbiAgMHgzMzE1LFxuICBcImtpcm9tZWV0b3J1c3F1YXJlXCIsXG4gIDB4MzMxNixcbiAgXCJraXJvc3F1YXJlXCIsXG4gIDB4MzMxNCxcbiAgXCJraXllb2thY2lyY2xla29yZWFuXCIsXG4gIDB4MzI2ZSxcbiAgXCJraXllb2thcGFyZW5rb3JlYW5cIixcbiAgMHgzMjBlLFxuICBcImtpeWVva2NpcmNsZWtvcmVhblwiLFxuICAweDMyNjAsXG4gIFwia2l5ZW9ra29yZWFuXCIsXG4gIDB4MzEzMSxcbiAgXCJraXllb2twYXJlbmtvcmVhblwiLFxuICAweDMyMDAsXG4gIFwia2l5ZW9rc2lvc2tvcmVhblwiLFxuICAweDMxMzMsXG4gIFwia2plY3lyaWxsaWNcIixcbiAgMHgwNDVjLFxuICBcImtsaW5lYmVsb3dcIixcbiAgMHgxZTM1LFxuICBcImtsc3F1YXJlXCIsXG4gIDB4MzM5OCxcbiAgXCJrbWN1YmVkc3F1YXJlXCIsXG4gIDB4MzNhNixcbiAgXCJrbW9ub3NwYWNlXCIsXG4gIDB4ZmY0YixcbiAgXCJrbXNxdWFyZWRzcXVhcmVcIixcbiAgMHgzM2EyLFxuICBcImtvaGlyYWdhbmFcIixcbiAgMHgzMDUzLFxuICBcImtvaG1zcXVhcmVcIixcbiAgMHgzM2MwLFxuICBcImtva2FpdGhhaVwiLFxuICAweDBlMDEsXG4gIFwia29rYXRha2FuYVwiLFxuICAweDMwYjMsXG4gIFwia29rYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmN2EsXG4gIFwia29vcG9zcXVhcmVcIixcbiAgMHgzMzFlLFxuICBcImtvcHBhY3lyaWxsaWNcIixcbiAgMHgwNDgxLFxuICBcImtvcmVhbnN0YW5kYXJkc3ltYm9sXCIsXG4gIDB4MzI3ZixcbiAgXCJrb3JvbmlzY21iXCIsXG4gIDB4MDM0MyxcbiAgXCJrcGFyZW5cIixcbiAgMHgyNGE2LFxuICBcImtwYXNxdWFyZVwiLFxuICAweDMzYWEsXG4gIFwia3NpY3lyaWxsaWNcIixcbiAgMHgwNDZmLFxuICBcImt0c3F1YXJlXCIsXG4gIDB4MzNjZixcbiAgXCJrdHVybmVkXCIsXG4gIDB4MDI5ZSxcbiAgXCJrdWhpcmFnYW5hXCIsXG4gIDB4MzA0ZixcbiAgXCJrdWthdGFrYW5hXCIsXG4gIDB4MzBhZixcbiAgXCJrdWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY3OCxcbiAgXCJrdnNxdWFyZVwiLFxuICAweDMzYjgsXG4gIFwia3dzcXVhcmVcIixcbiAgMHgzM2JlLFxuICBcImxcIixcbiAgMHgwMDZjLFxuICBcImxhYmVuZ2FsaVwiLFxuICAweDA5YjIsXG4gIFwibGFjdXRlXCIsXG4gIDB4MDEzYSxcbiAgXCJsYWRldmFcIixcbiAgMHgwOTMyLFxuICBcImxhZ3VqYXJhdGlcIixcbiAgMHgwYWIyLFxuICBcImxhZ3VybXVraGlcIixcbiAgMHgwYTMyLFxuICBcImxha2toYW5neWFvdGhhaVwiLFxuICAweDBlNDUsXG4gIFwibGFtYWxlZmZpbmFsYXJhYmljXCIsXG4gIDB4ZmVmYyxcbiAgXCJsYW1hbGVmaGFtemFhYm92ZWZpbmFsYXJhYmljXCIsXG4gIDB4ZmVmOCxcbiAgXCJsYW1hbGVmaGFtemFhYm92ZWlzb2xhdGVkYXJhYmljXCIsXG4gIDB4ZmVmNyxcbiAgXCJsYW1hbGVmaGFtemFiZWxvd2ZpbmFsYXJhYmljXCIsXG4gIDB4ZmVmYSxcbiAgXCJsYW1hbGVmaGFtemFiZWxvd2lzb2xhdGVkYXJhYmljXCIsXG4gIDB4ZmVmOSxcbiAgXCJsYW1hbGVmaXNvbGF0ZWRhcmFiaWNcIixcbiAgMHhmZWZiLFxuICBcImxhbWFsZWZtYWRkYWFib3ZlZmluYWxhcmFiaWNcIixcbiAgMHhmZWY2LFxuICBcImxhbWFsZWZtYWRkYWFib3ZlaXNvbGF0ZWRhcmFiaWNcIixcbiAgMHhmZWY1LFxuICBcImxhbWFyYWJpY1wiLFxuICAweDA2NDQsXG4gIFwibGFtYmRhXCIsXG4gIDB4MDNiYixcbiAgXCJsYW1iZGFzdHJva2VcIixcbiAgMHgwMTliLFxuICBcImxhbWVkXCIsXG4gIDB4MDVkYyxcbiAgXCJsYW1lZGRhZ2VzaFwiLFxuICAweGZiM2MsXG4gIFwibGFtZWRkYWdlc2hoZWJyZXdcIixcbiAgMHhmYjNjLFxuICBcImxhbWVkaGVicmV3XCIsXG4gIDB4MDVkYyxcbiAgXCJsYW1maW5hbGFyYWJpY1wiLFxuICAweGZlZGUsXG4gIFwibGFtaGFoaW5pdGlhbGFyYWJpY1wiLFxuICAweGZjY2EsXG4gIFwibGFtaW5pdGlhbGFyYWJpY1wiLFxuICAweGZlZGYsXG4gIFwibGFtamVlbWluaXRpYWxhcmFiaWNcIixcbiAgMHhmY2M5LFxuICBcImxhbWtoYWhpbml0aWFsYXJhYmljXCIsXG4gIDB4ZmNjYixcbiAgXCJsYW1sYW1oZWhpc29sYXRlZGFyYWJpY1wiLFxuICAweGZkZjIsXG4gIFwibGFtbWVkaWFsYXJhYmljXCIsXG4gIDB4ZmVlMCxcbiAgXCJsYW1tZWVtaGFoaW5pdGlhbGFyYWJpY1wiLFxuICAweGZkODgsXG4gIFwibGFtbWVlbWluaXRpYWxhcmFiaWNcIixcbiAgMHhmY2NjLFxuICBcImxhcmdlY2lyY2xlXCIsXG4gIDB4MjVlZixcbiAgXCJsYmFyXCIsXG4gIDB4MDE5YSxcbiAgXCJsYmVsdFwiLFxuICAweDAyNmMsXG4gIFwibGJvcG9tb2ZvXCIsXG4gIDB4MzEwYyxcbiAgXCJsY2Fyb25cIixcbiAgMHgwMTNlLFxuICBcImxjZWRpbGxhXCIsXG4gIDB4MDEzYyxcbiAgXCJsY2lyY2xlXCIsXG4gIDB4MjRkYixcbiAgXCJsY2lyY3VtZmxleGJlbG93XCIsXG4gIDB4MWUzZCxcbiAgXCJsY29tbWFhY2NlbnRcIixcbiAgMHgwMTNjLFxuICBcImxkb3RcIixcbiAgMHgwMTQwLFxuICBcImxkb3RhY2NlbnRcIixcbiAgMHgwMTQwLFxuICBcImxkb3RiZWxvd1wiLFxuICAweDFlMzcsXG4gIFwibGRvdGJlbG93bWFjcm9uXCIsXG4gIDB4MWUzOSxcbiAgXCJsZWZ0YW5nbGVhYm92ZWNtYlwiLFxuICAweDAzMWEsXG4gIFwibGVmdHRhY2tiZWxvd2NtYlwiLFxuICAweDAzMTgsXG4gIFwibGVzc1wiLFxuICAweDAwM2MsXG4gIFwibGVzc2VxdWFsXCIsXG4gIDB4MjI2NCxcbiAgXCJsZXNzZXF1YWxvcmdyZWF0ZXJcIixcbiAgMHgyMmRhLFxuICBcImxlc3Ntb25vc3BhY2VcIixcbiAgMHhmZjFjLFxuICBcImxlc3NvcmVxdWl2YWxlbnRcIixcbiAgMHgyMjcyLFxuICBcImxlc3NvcmdyZWF0ZXJcIixcbiAgMHgyMjc2LFxuICBcImxlc3NvdmVyZXF1YWxcIixcbiAgMHgyMjY2LFxuICBcImxlc3NzbWFsbFwiLFxuICAweGZlNjQsXG4gIFwibGV6aFwiLFxuICAweDAyNmUsXG4gIFwibGZibG9ja1wiLFxuICAweDI1OGMsXG4gIFwibGhvb2tyZXRyb2ZsZXhcIixcbiAgMHgwMjZkLFxuICBcImxpcmFcIixcbiAgMHgyMGE0LFxuICBcImxpd25hcm1lbmlhblwiLFxuICAweDA1NmMsXG4gIFwibGpcIixcbiAgMHgwMWM5LFxuICBcImxqZWN5cmlsbGljXCIsXG4gIDB4MDQ1OSxcbiAgXCJsbFwiLFxuICAweGY2YzAsXG4gIFwibGxhZGV2YVwiLFxuICAweDA5MzMsXG4gIFwibGxhZ3VqYXJhdGlcIixcbiAgMHgwYWIzLFxuICBcImxsaW5lYmVsb3dcIixcbiAgMHgxZTNiLFxuICBcImxsbGFkZXZhXCIsXG4gIDB4MDkzNCxcbiAgXCJsbHZvY2FsaWNiZW5nYWxpXCIsXG4gIDB4MDllMSxcbiAgXCJsbHZvY2FsaWNkZXZhXCIsXG4gIDB4MDk2MSxcbiAgXCJsbHZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpXCIsXG4gIDB4MDllMyxcbiAgXCJsbHZvY2FsaWN2b3dlbHNpZ25kZXZhXCIsXG4gIDB4MDk2MyxcbiAgXCJsbWlkZGxldGlsZGVcIixcbiAgMHgwMjZiLFxuICBcImxtb25vc3BhY2VcIixcbiAgMHhmZjRjLFxuICBcImxtc3F1YXJlXCIsXG4gIDB4MzNkMCxcbiAgXCJsb2NodWxhdGhhaVwiLFxuICAweDBlMmMsXG4gIFwibG9naWNhbGFuZFwiLFxuICAweDIyMjcsXG4gIFwibG9naWNhbG5vdFwiLFxuICAweDAwYWMsXG4gIFwibG9naWNhbG5vdHJldmVyc2VkXCIsXG4gIDB4MjMxMCxcbiAgXCJsb2dpY2Fsb3JcIixcbiAgMHgyMjI4LFxuICBcImxvbGluZ3RoYWlcIixcbiAgMHgwZTI1LFxuICBcImxvbmdzXCIsXG4gIDB4MDE3ZixcbiAgXCJsb3dsaW5lY2VudGVybGluZVwiLFxuICAweGZlNGUsXG4gIFwibG93bGluZWNtYlwiLFxuICAweDAzMzIsXG4gIFwibG93bGluZWRhc2hlZFwiLFxuICAweGZlNGQsXG4gIFwibG96ZW5nZVwiLFxuICAweDI1Y2EsXG4gIFwibHBhcmVuXCIsXG4gIDB4MjRhNyxcbiAgXCJsc2xhc2hcIixcbiAgMHgwMTQyLFxuICBcImxzcXVhcmVcIixcbiAgMHgyMTEzLFxuICBcImxzdXBlcmlvclwiLFxuICAweGY2ZWUsXG4gIFwibHRzaGFkZVwiLFxuICAweDI1OTEsXG4gIFwibHV0aGFpXCIsXG4gIDB4MGUyNixcbiAgXCJsdm9jYWxpY2JlbmdhbGlcIixcbiAgMHgwOThjLFxuICBcImx2b2NhbGljZGV2YVwiLFxuICAweDA5MGMsXG4gIFwibHZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpXCIsXG4gIDB4MDllMixcbiAgXCJsdm9jYWxpY3Zvd2Vsc2lnbmRldmFcIixcbiAgMHgwOTYyLFxuICBcImx4c3F1YXJlXCIsXG4gIDB4MzNkMyxcbiAgXCJtXCIsXG4gIDB4MDA2ZCxcbiAgXCJtYWJlbmdhbGlcIixcbiAgMHgwOWFlLFxuICBcIm1hY3JvblwiLFxuICAweDAwYWYsXG4gIFwibWFjcm9uYmVsb3djbWJcIixcbiAgMHgwMzMxLFxuICBcIm1hY3JvbmNtYlwiLFxuICAweDAzMDQsXG4gIFwibWFjcm9ubG93bW9kXCIsXG4gIDB4MDJjZCxcbiAgXCJtYWNyb25tb25vc3BhY2VcIixcbiAgMHhmZmUzLFxuICBcIm1hY3V0ZVwiLFxuICAweDFlM2YsXG4gIFwibWFkZXZhXCIsXG4gIDB4MDkyZSxcbiAgXCJtYWd1amFyYXRpXCIsXG4gIDB4MGFhZSxcbiAgXCJtYWd1cm11a2hpXCIsXG4gIDB4MGEyZSxcbiAgXCJtYWhhcGFraGhlYnJld1wiLFxuICAweDA1YTQsXG4gIFwibWFoYXBha2hsZWZ0aGVicmV3XCIsXG4gIDB4MDVhNCxcbiAgXCJtYWhpcmFnYW5hXCIsXG4gIDB4MzA3ZSxcbiAgXCJtYWljaGF0dGF3YWxvd2xlZnR0aGFpXCIsXG4gIDB4Zjg5NSxcbiAgXCJtYWljaGF0dGF3YWxvd3JpZ2h0dGhhaVwiLFxuICAweGY4OTQsXG4gIFwibWFpY2hhdHRhd2F0aGFpXCIsXG4gIDB4MGU0YixcbiAgXCJtYWljaGF0dGF3YXVwcGVybGVmdHRoYWlcIixcbiAgMHhmODkzLFxuICBcIm1haWVrbG93bGVmdHRoYWlcIixcbiAgMHhmODhjLFxuICBcIm1haWVrbG93cmlnaHR0aGFpXCIsXG4gIDB4Zjg4YixcbiAgXCJtYWlla3RoYWlcIixcbiAgMHgwZTQ4LFxuICBcIm1haWVrdXBwZXJsZWZ0dGhhaVwiLFxuICAweGY4OGEsXG4gIFwibWFpaGFuYWthdGxlZnR0aGFpXCIsXG4gIDB4Zjg4NCxcbiAgXCJtYWloYW5ha2F0dGhhaVwiLFxuICAweDBlMzEsXG4gIFwibWFpdGFpa2h1bGVmdHRoYWlcIixcbiAgMHhmODg5LFxuICBcIm1haXRhaWtodXRoYWlcIixcbiAgMHgwZTQ3LFxuICBcIm1haXRob2xvd2xlZnR0aGFpXCIsXG4gIDB4Zjg4ZixcbiAgXCJtYWl0aG9sb3dyaWdodHRoYWlcIixcbiAgMHhmODhlLFxuICBcIm1haXRob3RoYWlcIixcbiAgMHgwZTQ5LFxuICBcIm1haXRob3VwcGVybGVmdHRoYWlcIixcbiAgMHhmODhkLFxuICBcIm1haXRyaWxvd2xlZnR0aGFpXCIsXG4gIDB4Zjg5MixcbiAgXCJtYWl0cmlsb3dyaWdodHRoYWlcIixcbiAgMHhmODkxLFxuICBcIm1haXRyaXRoYWlcIixcbiAgMHgwZTRhLFxuICBcIm1haXRyaXVwcGVybGVmdHRoYWlcIixcbiAgMHhmODkwLFxuICBcIm1haXlhbW9rdGhhaVwiLFxuICAweDBlNDYsXG4gIFwibWFrYXRha2FuYVwiLFxuICAweDMwZGUsXG4gIFwibWFrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmOGYsXG4gIFwibWFsZVwiLFxuICAweDI2NDIsXG4gIFwibWFuc3lvbnNxdWFyZVwiLFxuICAweDMzNDcsXG4gIFwibWFxYWZoZWJyZXdcIixcbiAgMHgwNWJlLFxuICBcIm1hcnNcIixcbiAgMHgyNjQyLFxuICBcIm1hc29yYWNpcmNsZWhlYnJld1wiLFxuICAweDA1YWYsXG4gIFwibWFzcXVhcmVcIixcbiAgMHgzMzgzLFxuICBcIm1ib3BvbW9mb1wiLFxuICAweDMxMDcsXG4gIFwibWJzcXVhcmVcIixcbiAgMHgzM2Q0LFxuICBcIm1jaXJjbGVcIixcbiAgMHgyNGRjLFxuICBcIm1jdWJlZHNxdWFyZVwiLFxuICAweDMzYTUsXG4gIFwibWRvdGFjY2VudFwiLFxuICAweDFlNDEsXG4gIFwibWRvdGJlbG93XCIsXG4gIDB4MWU0MyxcbiAgXCJtZWVtYXJhYmljXCIsXG4gIDB4MDY0NSxcbiAgXCJtZWVtZmluYWxhcmFiaWNcIixcbiAgMHhmZWUyLFxuICBcIm1lZW1pbml0aWFsYXJhYmljXCIsXG4gIDB4ZmVlMyxcbiAgXCJtZWVtbWVkaWFsYXJhYmljXCIsXG4gIDB4ZmVlNCxcbiAgXCJtZWVtbWVlbWluaXRpYWxhcmFiaWNcIixcbiAgMHhmY2QxLFxuICBcIm1lZW1tZWVtaXNvbGF0ZWRhcmFiaWNcIixcbiAgMHhmYzQ4LFxuICBcIm1lZXRvcnVzcXVhcmVcIixcbiAgMHgzMzRkLFxuICBcIm1laGlyYWdhbmFcIixcbiAgMHgzMDgxLFxuICBcIm1laXppZXJhc3F1YXJlXCIsXG4gIDB4MzM3ZSxcbiAgXCJtZWthdGFrYW5hXCIsXG4gIDB4MzBlMSxcbiAgXCJtZWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY5MixcbiAgXCJtZW1cIixcbiAgMHgwNWRlLFxuICBcIm1lbWRhZ2VzaFwiLFxuICAweGZiM2UsXG4gIFwibWVtZGFnZXNoaGVicmV3XCIsXG4gIDB4ZmIzZSxcbiAgXCJtZW1oZWJyZXdcIixcbiAgMHgwNWRlLFxuICBcIm1lbmFybWVuaWFuXCIsXG4gIDB4MDU3NCxcbiAgXCJtZXJraGFoZWJyZXdcIixcbiAgMHgwNWE1LFxuICBcIm1lcmtoYWtlZnVsYWhlYnJld1wiLFxuICAweDA1YTYsXG4gIFwibWVya2hha2VmdWxhbGVmdGhlYnJld1wiLFxuICAweDA1YTYsXG4gIFwibWVya2hhbGVmdGhlYnJld1wiLFxuICAweDA1YTUsXG4gIFwibWhvb2tcIixcbiAgMHgwMjcxLFxuICBcIm1oenNxdWFyZVwiLFxuICAweDMzOTIsXG4gIFwibWlkZGxlZG90a2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjY1LFxuICBcIm1pZGRvdFwiLFxuICAweDAwYjcsXG4gIFwibWlldW1hY2lyY2xla29yZWFuXCIsXG4gIDB4MzI3MixcbiAgXCJtaWV1bWFwYXJlbmtvcmVhblwiLFxuICAweDMyMTIsXG4gIFwibWlldW1jaXJjbGVrb3JlYW5cIixcbiAgMHgzMjY0LFxuICBcIm1pZXVta29yZWFuXCIsXG4gIDB4MzE0MSxcbiAgXCJtaWV1bXBhbnNpb3Nrb3JlYW5cIixcbiAgMHgzMTcwLFxuICBcIm1pZXVtcGFyZW5rb3JlYW5cIixcbiAgMHgzMjA0LFxuICBcIm1pZXVtcGlldXBrb3JlYW5cIixcbiAgMHgzMTZlLFxuICBcIm1pZXVtc2lvc2tvcmVhblwiLFxuICAweDMxNmYsXG4gIFwibWloaXJhZ2FuYVwiLFxuICAweDMwN2YsXG4gIFwibWlrYXRha2FuYVwiLFxuICAweDMwZGYsXG4gIFwibWlrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmOTAsXG4gIFwibWludXNcIixcbiAgMHgyMjEyLFxuICBcIm1pbnVzYmVsb3djbWJcIixcbiAgMHgwMzIwLFxuICBcIm1pbnVzY2lyY2xlXCIsXG4gIDB4MjI5NixcbiAgXCJtaW51c21vZFwiLFxuICAweDAyZDcsXG4gIFwibWludXNwbHVzXCIsXG4gIDB4MjIxMyxcbiAgXCJtaW51dGVcIixcbiAgMHgyMDMyLFxuICBcIm1pcmliYWFydXNxdWFyZVwiLFxuICAweDMzNGEsXG4gIFwibWlyaXNxdWFyZVwiLFxuICAweDMzNDksXG4gIFwibWxvbmdsZWd0dXJuZWRcIixcbiAgMHgwMjcwLFxuICBcIm1sc3F1YXJlXCIsXG4gIDB4MzM5NixcbiAgXCJtbWN1YmVkc3F1YXJlXCIsXG4gIDB4MzNhMyxcbiAgXCJtbW9ub3NwYWNlXCIsXG4gIDB4ZmY0ZCxcbiAgXCJtbXNxdWFyZWRzcXVhcmVcIixcbiAgMHgzMzlmLFxuICBcIm1vaGlyYWdhbmFcIixcbiAgMHgzMDgyLFxuICBcIm1vaG1zcXVhcmVcIixcbiAgMHgzM2MxLFxuICBcIm1va2F0YWthbmFcIixcbiAgMHgzMGUyLFxuICBcIm1va2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjkzLFxuICBcIm1vbHNxdWFyZVwiLFxuICAweDMzZDYsXG4gIFwibW9tYXRoYWlcIixcbiAgMHgwZTIxLFxuICBcIm1vdmVyc3NxdWFyZVwiLFxuICAweDMzYTcsXG4gIFwibW92ZXJzc3F1YXJlZHNxdWFyZVwiLFxuICAweDMzYTgsXG4gIFwibXBhcmVuXCIsXG4gIDB4MjRhOCxcbiAgXCJtcGFzcXVhcmVcIixcbiAgMHgzM2FiLFxuICBcIm1zc3F1YXJlXCIsXG4gIDB4MzNiMyxcbiAgXCJtc3VwZXJpb3JcIixcbiAgMHhmNmVmLFxuICBcIm10dXJuZWRcIixcbiAgMHgwMjZmLFxuICBcIm11XCIsXG4gIDB4MDBiNSxcbiAgXCJtdTFcIixcbiAgMHgwMGI1LFxuICBcIm11YXNxdWFyZVwiLFxuICAweDMzODIsXG4gIFwibXVjaGdyZWF0ZXJcIixcbiAgMHgyMjZiLFxuICBcIm11Y2hsZXNzXCIsXG4gIDB4MjI2YSxcbiAgXCJtdWZzcXVhcmVcIixcbiAgMHgzMzhjLFxuICBcIm11Z3JlZWtcIixcbiAgMHgwM2JjLFxuICBcIm11Z3NxdWFyZVwiLFxuICAweDMzOGQsXG4gIFwibXVoaXJhZ2FuYVwiLFxuICAweDMwODAsXG4gIFwibXVrYXRha2FuYVwiLFxuICAweDMwZTAsXG4gIFwibXVrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmOTEsXG4gIFwibXVsc3F1YXJlXCIsXG4gIDB4MzM5NSxcbiAgXCJtdWx0aXBseVwiLFxuICAweDAwZDcsXG4gIFwibXVtc3F1YXJlXCIsXG4gIDB4MzM5YixcbiAgXCJtdW5haGhlYnJld1wiLFxuICAweDA1YTMsXG4gIFwibXVuYWhsZWZ0aGVicmV3XCIsXG4gIDB4MDVhMyxcbiAgXCJtdXNpY2Fsbm90ZVwiLFxuICAweDI2NmEsXG4gIFwibXVzaWNhbG5vdGVkYmxcIixcbiAgMHgyNjZiLFxuICBcIm11c2ljZmxhdHNpZ25cIixcbiAgMHgyNjZkLFxuICBcIm11c2ljc2hhcnBzaWduXCIsXG4gIDB4MjY2ZixcbiAgXCJtdXNzcXVhcmVcIixcbiAgMHgzM2IyLFxuICBcIm11dnNxdWFyZVwiLFxuICAweDMzYjYsXG4gIFwibXV3c3F1YXJlXCIsXG4gIDB4MzNiYyxcbiAgXCJtdm1lZ2FzcXVhcmVcIixcbiAgMHgzM2I5LFxuICBcIm12c3F1YXJlXCIsXG4gIDB4MzNiNyxcbiAgXCJtd21lZ2FzcXVhcmVcIixcbiAgMHgzM2JmLFxuICBcIm13c3F1YXJlXCIsXG4gIDB4MzNiZCxcbiAgXCJuXCIsXG4gIDB4MDA2ZSxcbiAgXCJuYWJlbmdhbGlcIixcbiAgMHgwOWE4LFxuICBcIm5hYmxhXCIsXG4gIDB4MjIwNyxcbiAgXCJuYWN1dGVcIixcbiAgMHgwMTQ0LFxuICBcIm5hZGV2YVwiLFxuICAweDA5MjgsXG4gIFwibmFndWphcmF0aVwiLFxuICAweDBhYTgsXG4gIFwibmFndXJtdWtoaVwiLFxuICAweDBhMjgsXG4gIFwibmFoaXJhZ2FuYVwiLFxuICAweDMwNmEsXG4gIFwibmFrYXRha2FuYVwiLFxuICAweDMwY2EsXG4gIFwibmFrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmODUsXG4gIFwibmFwb3N0cm9waGVcIixcbiAgMHgwMTQ5LFxuICBcIm5hc3F1YXJlXCIsXG4gIDB4MzM4MSxcbiAgXCJuYm9wb21vZm9cIixcbiAgMHgzMTBiLFxuICBcIm5ic3BhY2VcIixcbiAgMHgwMGEwLFxuICBcIm5jYXJvblwiLFxuICAweDAxNDgsXG4gIFwibmNlZGlsbGFcIixcbiAgMHgwMTQ2LFxuICBcIm5jaXJjbGVcIixcbiAgMHgyNGRkLFxuICBcIm5jaXJjdW1mbGV4YmVsb3dcIixcbiAgMHgxZTRiLFxuICBcIm5jb21tYWFjY2VudFwiLFxuICAweDAxNDYsXG4gIFwibmRvdGFjY2VudFwiLFxuICAweDFlNDUsXG4gIFwibmRvdGJlbG93XCIsXG4gIDB4MWU0NyxcbiAgXCJuZWhpcmFnYW5hXCIsXG4gIDB4MzA2ZCxcbiAgXCJuZWthdGFrYW5hXCIsXG4gIDB4MzBjZCxcbiAgXCJuZWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY4OCxcbiAgXCJuZXdzaGVxZWxzaWduXCIsXG4gIDB4MjBhYSxcbiAgXCJuZnNxdWFyZVwiLFxuICAweDMzOGIsXG4gIFwibmdhYmVuZ2FsaVwiLFxuICAweDA5OTksXG4gIFwibmdhZGV2YVwiLFxuICAweDA5MTksXG4gIFwibmdhZ3VqYXJhdGlcIixcbiAgMHgwYTk5LFxuICBcIm5nYWd1cm11a2hpXCIsXG4gIDB4MGExOSxcbiAgXCJuZ29uZ3V0aGFpXCIsXG4gIDB4MGUwNyxcbiAgXCJuaGlyYWdhbmFcIixcbiAgMHgzMDkzLFxuICBcIm5ob29rbGVmdFwiLFxuICAweDAyNzIsXG4gIFwibmhvb2tyZXRyb2ZsZXhcIixcbiAgMHgwMjczLFxuICBcIm5pZXVuYWNpcmNsZWtvcmVhblwiLFxuICAweDMyNmYsXG4gIFwibmlldW5hcGFyZW5rb3JlYW5cIixcbiAgMHgzMjBmLFxuICBcIm5pZXVuY2lldWNrb3JlYW5cIixcbiAgMHgzMTM1LFxuICBcIm5pZXVuY2lyY2xla29yZWFuXCIsXG4gIDB4MzI2MSxcbiAgXCJuaWV1bmhpZXVoa29yZWFuXCIsXG4gIDB4MzEzNixcbiAgXCJuaWV1bmtvcmVhblwiLFxuICAweDMxMzQsXG4gIFwibmlldW5wYW5zaW9za29yZWFuXCIsXG4gIDB4MzE2OCxcbiAgXCJuaWV1bnBhcmVua29yZWFuXCIsXG4gIDB4MzIwMSxcbiAgXCJuaWV1bnNpb3Nrb3JlYW5cIixcbiAgMHgzMTY3LFxuICBcIm5pZXVudGlrZXV0a29yZWFuXCIsXG4gIDB4MzE2NixcbiAgXCJuaWhpcmFnYW5hXCIsXG4gIDB4MzA2YixcbiAgXCJuaWthdGFrYW5hXCIsXG4gIDB4MzBjYixcbiAgXCJuaWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY4NixcbiAgXCJuaWtoYWhpdGxlZnR0aGFpXCIsXG4gIDB4Zjg5OSxcbiAgXCJuaWtoYWhpdHRoYWlcIixcbiAgMHgwZTRkLFxuICBcIm5pbmVcIixcbiAgMHgwMDM5LFxuICBcIm5pbmVhcmFiaWNcIixcbiAgMHgwNjY5LFxuICBcIm5pbmViZW5nYWxpXCIsXG4gIDB4MDllZixcbiAgXCJuaW5lY2lyY2xlXCIsXG4gIDB4MjQ2OCxcbiAgXCJuaW5lY2lyY2xlaW52ZXJzZXNhbnNzZXJpZlwiLFxuICAweDI3OTIsXG4gIFwibmluZWRldmFcIixcbiAgMHgwOTZmLFxuICBcIm5pbmVndWphcmF0aVwiLFxuICAweDBhZWYsXG4gIFwibmluZWd1cm11a2hpXCIsXG4gIDB4MGE2ZixcbiAgXCJuaW5laGFja2FyYWJpY1wiLFxuICAweDA2NjksXG4gIFwibmluZWhhbmd6aG91XCIsXG4gIDB4MzAyOSxcbiAgXCJuaW5laWRlb2dyYXBoaWNwYXJlblwiLFxuICAweDMyMjgsXG4gIFwibmluZWluZmVyaW9yXCIsXG4gIDB4MjA4OSxcbiAgXCJuaW5lbW9ub3NwYWNlXCIsXG4gIDB4ZmYxOSxcbiAgXCJuaW5lb2xkc3R5bGVcIixcbiAgMHhmNzM5LFxuICBcIm5pbmVwYXJlblwiLFxuICAweDI0N2MsXG4gIFwibmluZXBlcmlvZFwiLFxuICAweDI0OTAsXG4gIFwibmluZXBlcnNpYW5cIixcbiAgMHgwNmY5LFxuICBcIm5pbmVyb21hblwiLFxuICAweDIxNzgsXG4gIFwibmluZXN1cGVyaW9yXCIsXG4gIDB4MjA3OSxcbiAgXCJuaW5ldGVlbmNpcmNsZVwiLFxuICAweDI0NzIsXG4gIFwibmluZXRlZW5wYXJlblwiLFxuICAweDI0ODYsXG4gIFwibmluZXRlZW5wZXJpb2RcIixcbiAgMHgyNDlhLFxuICBcIm5pbmV0aGFpXCIsXG4gIDB4MGU1OSxcbiAgXCJualwiLFxuICAweDAxY2MsXG4gIFwibmplY3lyaWxsaWNcIixcbiAgMHgwNDVhLFxuICBcIm5rYXRha2FuYVwiLFxuICAweDMwZjMsXG4gIFwibmthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY5ZCxcbiAgXCJubGVncmlnaHRsb25nXCIsXG4gIDB4MDE5ZSxcbiAgXCJubGluZWJlbG93XCIsXG4gIDB4MWU0OSxcbiAgXCJubW9ub3NwYWNlXCIsXG4gIDB4ZmY0ZSxcbiAgXCJubXNxdWFyZVwiLFxuICAweDMzOWEsXG4gIFwibm5hYmVuZ2FsaVwiLFxuICAweDA5YTMsXG4gIFwibm5hZGV2YVwiLFxuICAweDA5MjMsXG4gIFwibm5hZ3VqYXJhdGlcIixcbiAgMHgwYWEzLFxuICBcIm5uYWd1cm11a2hpXCIsXG4gIDB4MGEyMyxcbiAgXCJubm5hZGV2YVwiLFxuICAweDA5MjksXG4gIFwibm9oaXJhZ2FuYVwiLFxuICAweDMwNmUsXG4gIFwibm9rYXRha2FuYVwiLFxuICAweDMwY2UsXG4gIFwibm9rYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmODksXG4gIFwibm9uYnJlYWtpbmdzcGFjZVwiLFxuICAweDAwYTAsXG4gIFwibm9uZW50aGFpXCIsXG4gIDB4MGUxMyxcbiAgXCJub251dGhhaVwiLFxuICAweDBlMTksXG4gIFwibm9vbmFyYWJpY1wiLFxuICAweDA2NDYsXG4gIFwibm9vbmZpbmFsYXJhYmljXCIsXG4gIDB4ZmVlNixcbiAgXCJub29uZ2h1bm5hYXJhYmljXCIsXG4gIDB4MDZiYSxcbiAgXCJub29uZ2h1bm5hZmluYWxhcmFiaWNcIixcbiAgMHhmYjlmLFxuICBcIm5vb25pbml0aWFsYXJhYmljXCIsXG4gIDB4ZmVlNyxcbiAgXCJub29uamVlbWluaXRpYWxhcmFiaWNcIixcbiAgMHhmY2QyLFxuICBcIm5vb25qZWVtaXNvbGF0ZWRhcmFiaWNcIixcbiAgMHhmYzRiLFxuICBcIm5vb25tZWRpYWxhcmFiaWNcIixcbiAgMHhmZWU4LFxuICBcIm5vb25tZWVtaW5pdGlhbGFyYWJpY1wiLFxuICAweGZjZDUsXG4gIFwibm9vbm1lZW1pc29sYXRlZGFyYWJpY1wiLFxuICAweGZjNGUsXG4gIFwibm9vbm5vb25maW5hbGFyYWJpY1wiLFxuICAweGZjOGQsXG4gIFwibm90Y29udGFpbnNcIixcbiAgMHgyMjBjLFxuICBcIm5vdGVsZW1lbnRcIixcbiAgMHgyMjA5LFxuICBcIm5vdGVsZW1lbnRvZlwiLFxuICAweDIyMDksXG4gIFwibm90ZXF1YWxcIixcbiAgMHgyMjYwLFxuICBcIm5vdGdyZWF0ZXJcIixcbiAgMHgyMjZmLFxuICBcIm5vdGdyZWF0ZXJub3JlcXVhbFwiLFxuICAweDIyNzEsXG4gIFwibm90Z3JlYXRlcm5vcmxlc3NcIixcbiAgMHgyMjc5LFxuICBcIm5vdGlkZW50aWNhbFwiLFxuICAweDIyNjIsXG4gIFwibm90bGVzc1wiLFxuICAweDIyNmUsXG4gIFwibm90bGVzc25vcmVxdWFsXCIsXG4gIDB4MjI3MCxcbiAgXCJub3RwYXJhbGxlbFwiLFxuICAweDIyMjYsXG4gIFwibm90cHJlY2VkZXNcIixcbiAgMHgyMjgwLFxuICBcIm5vdHN1YnNldFwiLFxuICAweDIyODQsXG4gIFwibm90c3VjY2VlZHNcIixcbiAgMHgyMjgxLFxuICBcIm5vdHN1cGVyc2V0XCIsXG4gIDB4MjI4NSxcbiAgXCJub3dhcm1lbmlhblwiLFxuICAweDA1NzYsXG4gIFwibnBhcmVuXCIsXG4gIDB4MjRhOSxcbiAgXCJuc3NxdWFyZVwiLFxuICAweDMzYjEsXG4gIFwibnN1cGVyaW9yXCIsXG4gIDB4MjA3ZixcbiAgXCJudGlsZGVcIixcbiAgMHgwMGYxLFxuICBcIm51XCIsXG4gIDB4MDNiZCxcbiAgXCJudWhpcmFnYW5hXCIsXG4gIDB4MzA2YyxcbiAgXCJudWthdGFrYW5hXCIsXG4gIDB4MzBjYyxcbiAgXCJudWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY4NyxcbiAgXCJudWt0YWJlbmdhbGlcIixcbiAgMHgwOWJjLFxuICBcIm51a3RhZGV2YVwiLFxuICAweDA5M2MsXG4gIFwibnVrdGFndWphcmF0aVwiLFxuICAweDBhYmMsXG4gIFwibnVrdGFndXJtdWtoaVwiLFxuICAweDBhM2MsXG4gIFwibnVtYmVyc2lnblwiLFxuICAweDAwMjMsXG4gIFwibnVtYmVyc2lnbm1vbm9zcGFjZVwiLFxuICAweGZmMDMsXG4gIFwibnVtYmVyc2lnbnNtYWxsXCIsXG4gIDB4ZmU1ZixcbiAgXCJudW1lcmFsc2lnbmdyZWVrXCIsXG4gIDB4MDM3NCxcbiAgXCJudW1lcmFsc2lnbmxvd2VyZ3JlZWtcIixcbiAgMHgwMzc1LFxuICBcIm51bWVyb1wiLFxuICAweDIxMTYsXG4gIFwibnVuXCIsXG4gIDB4MDVlMCxcbiAgXCJudW5kYWdlc2hcIixcbiAgMHhmYjQwLFxuICBcIm51bmRhZ2VzaGhlYnJld1wiLFxuICAweGZiNDAsXG4gIFwibnVuaGVicmV3XCIsXG4gIDB4MDVlMCxcbiAgXCJudnNxdWFyZVwiLFxuICAweDMzYjUsXG4gIFwibndzcXVhcmVcIixcbiAgMHgzM2JiLFxuICBcIm55YWJlbmdhbGlcIixcbiAgMHgwOTllLFxuICBcIm55YWRldmFcIixcbiAgMHgwOTFlLFxuICBcIm55YWd1amFyYXRpXCIsXG4gIDB4MGE5ZSxcbiAgXCJueWFndXJtdWtoaVwiLFxuICAweDBhMWUsXG4gIFwib1wiLFxuICAweDAwNmYsXG4gIFwib2FjdXRlXCIsXG4gIDB4MDBmMyxcbiAgXCJvYW5ndGhhaVwiLFxuICAweDBlMmQsXG4gIFwib2JhcnJlZFwiLFxuICAweDAyNzUsXG4gIFwib2JhcnJlZGN5cmlsbGljXCIsXG4gIDB4MDRlOSxcbiAgXCJvYmFycmVkZGllcmVzaXNjeXJpbGxpY1wiLFxuICAweDA0ZWIsXG4gIFwib2JlbmdhbGlcIixcbiAgMHgwOTkzLFxuICBcIm9ib3BvbW9mb1wiLFxuICAweDMxMWIsXG4gIFwib2JyZXZlXCIsXG4gIDB4MDE0ZixcbiAgXCJvY2FuZHJhZGV2YVwiLFxuICAweDA5MTEsXG4gIFwib2NhbmRyYWd1amFyYXRpXCIsXG4gIDB4MGE5MSxcbiAgXCJvY2FuZHJhdm93ZWxzaWduZGV2YVwiLFxuICAweDA5NDksXG4gIFwib2NhbmRyYXZvd2Vsc2lnbmd1amFyYXRpXCIsXG4gIDB4MGFjOSxcbiAgXCJvY2Fyb25cIixcbiAgMHgwMWQyLFxuICBcIm9jaXJjbGVcIixcbiAgMHgyNGRlLFxuICBcIm9jaXJjdW1mbGV4XCIsXG4gIDB4MDBmNCxcbiAgXCJvY2lyY3VtZmxleGFjdXRlXCIsXG4gIDB4MWVkMSxcbiAgXCJvY2lyY3VtZmxleGRvdGJlbG93XCIsXG4gIDB4MWVkOSxcbiAgXCJvY2lyY3VtZmxleGdyYXZlXCIsXG4gIDB4MWVkMyxcbiAgXCJvY2lyY3VtZmxleGhvb2thYm92ZVwiLFxuICAweDFlZDUsXG4gIFwib2NpcmN1bWZsZXh0aWxkZVwiLFxuICAweDFlZDcsXG4gIFwib2N5cmlsbGljXCIsXG4gIDB4MDQzZSxcbiAgXCJvZGJsYWN1dGVcIixcbiAgMHgwMTUxLFxuICBcIm9kYmxncmF2ZVwiLFxuICAweDAyMGQsXG4gIFwib2RldmFcIixcbiAgMHgwOTEzLFxuICBcIm9kaWVyZXNpc1wiLFxuICAweDAwZjYsXG4gIFwib2RpZXJlc2lzY3lyaWxsaWNcIixcbiAgMHgwNGU3LFxuICBcIm9kb3RiZWxvd1wiLFxuICAweDFlY2QsXG4gIFwib2VcIixcbiAgMHgwMTUzLFxuICBcIm9la29yZWFuXCIsXG4gIDB4MzE1YSxcbiAgXCJvZ29uZWtcIixcbiAgMHgwMmRiLFxuICBcIm9nb25la2NtYlwiLFxuICAweDAzMjgsXG4gIFwib2dyYXZlXCIsXG4gIDB4MDBmMixcbiAgXCJvZ3VqYXJhdGlcIixcbiAgMHgwYTkzLFxuICBcIm9oYXJtZW5pYW5cIixcbiAgMHgwNTg1LFxuICBcIm9oaXJhZ2FuYVwiLFxuICAweDMwNGEsXG4gIFwib2hvb2thYm92ZVwiLFxuICAweDFlY2YsXG4gIFwib2hvcm5cIixcbiAgMHgwMWExLFxuICBcIm9ob3JuYWN1dGVcIixcbiAgMHgxZWRiLFxuICBcIm9ob3JuZG90YmVsb3dcIixcbiAgMHgxZWUzLFxuICBcIm9ob3JuZ3JhdmVcIixcbiAgMHgxZWRkLFxuICBcIm9ob3JuaG9va2Fib3ZlXCIsXG4gIDB4MWVkZixcbiAgXCJvaG9ybnRpbGRlXCIsXG4gIDB4MWVlMSxcbiAgXCJvaHVuZ2FydW1sYXV0XCIsXG4gIDB4MDE1MSxcbiAgXCJvaVwiLFxuICAweDAxYTMsXG4gIFwib2ludmVydGVkYnJldmVcIixcbiAgMHgwMjBmLFxuICBcIm9rYXRha2FuYVwiLFxuICAweDMwYWEsXG4gIFwib2thdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY3NSxcbiAgXCJva29yZWFuXCIsXG4gIDB4MzE1NyxcbiAgXCJvbGVoZWJyZXdcIixcbiAgMHgwNWFiLFxuICBcIm9tYWNyb25cIixcbiAgMHgwMTRkLFxuICBcIm9tYWNyb25hY3V0ZVwiLFxuICAweDFlNTMsXG4gIFwib21hY3JvbmdyYXZlXCIsXG4gIDB4MWU1MSxcbiAgXCJvbWRldmFcIixcbiAgMHgwOTUwLFxuICBcIm9tZWdhXCIsXG4gIDB4MDNjOSxcbiAgXCJvbWVnYTFcIixcbiAgMHgwM2Q2LFxuICBcIm9tZWdhY3lyaWxsaWNcIixcbiAgMHgwNDYxLFxuICBcIm9tZWdhbGF0aW5jbG9zZWRcIixcbiAgMHgwMjc3LFxuICBcIm9tZWdhcm91bmRjeXJpbGxpY1wiLFxuICAweDA0N2IsXG4gIFwib21lZ2F0aXRsb2N5cmlsbGljXCIsXG4gIDB4MDQ3ZCxcbiAgXCJvbWVnYXRvbm9zXCIsXG4gIDB4MDNjZSxcbiAgXCJvbWd1amFyYXRpXCIsXG4gIDB4MGFkMCxcbiAgXCJvbWljcm9uXCIsXG4gIDB4MDNiZixcbiAgXCJvbWljcm9udG9ub3NcIixcbiAgMHgwM2NjLFxuICBcIm9tb25vc3BhY2VcIixcbiAgMHhmZjRmLFxuICBcIm9uZVwiLFxuICAweDAwMzEsXG4gIFwib25lYXJhYmljXCIsXG4gIDB4MDY2MSxcbiAgXCJvbmViZW5nYWxpXCIsXG4gIDB4MDllNyxcbiAgXCJvbmVjaXJjbGVcIixcbiAgMHgyNDYwLFxuICBcIm9uZWNpcmNsZWludmVyc2VzYW5zc2VyaWZcIixcbiAgMHgyNzhhLFxuICBcIm9uZWRldmFcIixcbiAgMHgwOTY3LFxuICBcIm9uZWRvdGVubGVhZGVyXCIsXG4gIDB4MjAyNCxcbiAgXCJvbmVlaWdodGhcIixcbiAgMHgyMTViLFxuICBcIm9uZWZpdHRlZFwiLFxuICAweGY2ZGMsXG4gIFwib25lZ3VqYXJhdGlcIixcbiAgMHgwYWU3LFxuICBcIm9uZWd1cm11a2hpXCIsXG4gIDB4MGE2NyxcbiAgXCJvbmVoYWNrYXJhYmljXCIsXG4gIDB4MDY2MSxcbiAgXCJvbmVoYWxmXCIsXG4gIDB4MDBiZCxcbiAgXCJvbmVoYW5nemhvdVwiLFxuICAweDMwMjEsXG4gIFwib25laWRlb2dyYXBoaWNwYXJlblwiLFxuICAweDMyMjAsXG4gIFwib25laW5mZXJpb3JcIixcbiAgMHgyMDgxLFxuICBcIm9uZW1vbm9zcGFjZVwiLFxuICAweGZmMTEsXG4gIFwib25lbnVtZXJhdG9yYmVuZ2FsaVwiLFxuICAweDA5ZjQsXG4gIFwib25lb2xkc3R5bGVcIixcbiAgMHhmNzMxLFxuICBcIm9uZXBhcmVuXCIsXG4gIDB4MjQ3NCxcbiAgXCJvbmVwZXJpb2RcIixcbiAgMHgyNDg4LFxuICBcIm9uZXBlcnNpYW5cIixcbiAgMHgwNmYxLFxuICBcIm9uZXF1YXJ0ZXJcIixcbiAgMHgwMGJjLFxuICBcIm9uZXJvbWFuXCIsXG4gIDB4MjE3MCxcbiAgXCJvbmVzdXBlcmlvclwiLFxuICAweDAwYjksXG4gIFwib25ldGhhaVwiLFxuICAweDBlNTEsXG4gIFwib25ldGhpcmRcIixcbiAgMHgyMTUzLFxuICBcIm9vZ29uZWtcIixcbiAgMHgwMWViLFxuICBcIm9vZ29uZWttYWNyb25cIixcbiAgMHgwMWVkLFxuICBcIm9vZ3VybXVraGlcIixcbiAgMHgwYTEzLFxuICBcIm9vbWF0cmFndXJtdWtoaVwiLFxuICAweDBhNGIsXG4gIFwib29wZW5cIixcbiAgMHgwMjU0LFxuICBcIm9wYXJlblwiLFxuICAweDI0YWEsXG4gIFwib3BlbmJ1bGxldFwiLFxuICAweDI1ZTYsXG4gIFwib3B0aW9uXCIsXG4gIDB4MjMyNSxcbiAgXCJvcmRmZW1pbmluZVwiLFxuICAweDAwYWEsXG4gIFwib3JkbWFzY3VsaW5lXCIsXG4gIDB4MDBiYSxcbiAgXCJvcnRob2dvbmFsXCIsXG4gIDB4MjIxZixcbiAgXCJvc2hvcnRkZXZhXCIsXG4gIDB4MDkxMixcbiAgXCJvc2hvcnR2b3dlbHNpZ25kZXZhXCIsXG4gIDB4MDk0YSxcbiAgXCJvc2xhc2hcIixcbiAgMHgwMGY4LFxuICBcIm9zbGFzaGFjdXRlXCIsXG4gIDB4MDFmZixcbiAgXCJvc21hbGxoaXJhZ2FuYVwiLFxuICAweDMwNDksXG4gIFwib3NtYWxsa2F0YWthbmFcIixcbiAgMHgzMGE5LFxuICBcIm9zbWFsbGthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY2YixcbiAgXCJvc3Ryb2tlYWN1dGVcIixcbiAgMHgwMWZmLFxuICBcIm9zdXBlcmlvclwiLFxuICAweGY2ZjAsXG4gIFwib3RjeXJpbGxpY1wiLFxuICAweDA0N2YsXG4gIFwib3RpbGRlXCIsXG4gIDB4MDBmNSxcbiAgXCJvdGlsZGVhY3V0ZVwiLFxuICAweDFlNGQsXG4gIFwib3RpbGRlZGllcmVzaXNcIixcbiAgMHgxZTRmLFxuICBcIm91Ym9wb21vZm9cIixcbiAgMHgzMTIxLFxuICBcIm92ZXJsaW5lXCIsXG4gIDB4MjAzZSxcbiAgXCJvdmVybGluZWNlbnRlcmxpbmVcIixcbiAgMHhmZTRhLFxuICBcIm92ZXJsaW5lY21iXCIsXG4gIDB4MDMwNSxcbiAgXCJvdmVybGluZWRhc2hlZFwiLFxuICAweGZlNDksXG4gIFwib3ZlcmxpbmVkYmx3YXZ5XCIsXG4gIDB4ZmU0YyxcbiAgXCJvdmVybGluZXdhdnlcIixcbiAgMHhmZTRiLFxuICBcIm92ZXJzY29yZVwiLFxuICAweDAwYWYsXG4gIFwib3Zvd2Vsc2lnbmJlbmdhbGlcIixcbiAgMHgwOWNiLFxuICBcIm92b3dlbHNpZ25kZXZhXCIsXG4gIDB4MDk0YixcbiAgXCJvdm93ZWxzaWduZ3VqYXJhdGlcIixcbiAgMHgwYWNiLFxuICBcInBcIixcbiAgMHgwMDcwLFxuICBcInBhYW1wc3NxdWFyZVwiLFxuICAweDMzODAsXG4gIFwicGFhc2VudG9zcXVhcmVcIixcbiAgMHgzMzJiLFxuICBcInBhYmVuZ2FsaVwiLFxuICAweDA5YWEsXG4gIFwicGFjdXRlXCIsXG4gIDB4MWU1NSxcbiAgXCJwYWRldmFcIixcbiAgMHgwOTJhLFxuICBcInBhZ2Vkb3duXCIsXG4gIDB4MjFkZixcbiAgXCJwYWdldXBcIixcbiAgMHgyMWRlLFxuICBcInBhZ3VqYXJhdGlcIixcbiAgMHgwYWFhLFxuICBcInBhZ3VybXVraGlcIixcbiAgMHgwYTJhLFxuICBcInBhaGlyYWdhbmFcIixcbiAgMHgzMDcxLFxuICBcInBhaXlhbm5vaXRoYWlcIixcbiAgMHgwZTJmLFxuICBcInBha2F0YWthbmFcIixcbiAgMHgzMGQxLFxuICBcInBhbGF0YWxpemF0aW9uY3lyaWxsaWNjbWJcIixcbiAgMHgwNDg0LFxuICBcInBhbG9jaGthY3lyaWxsaWNcIixcbiAgMHgwNGMwLFxuICBcInBhbnNpb3Nrb3JlYW5cIixcbiAgMHgzMTdmLFxuICBcInBhcmFncmFwaFwiLFxuICAweDAwYjYsXG4gIFwicGFyYWxsZWxcIixcbiAgMHgyMjI1LFxuICBcInBhcmVubGVmdFwiLFxuICAweDAwMjgsXG4gIFwicGFyZW5sZWZ0YWx0b25lYXJhYmljXCIsXG4gIDB4ZmQzZSxcbiAgXCJwYXJlbmxlZnRidFwiLFxuICAweGY4ZWQsXG4gIFwicGFyZW5sZWZ0ZXhcIixcbiAgMHhmOGVjLFxuICBcInBhcmVubGVmdGluZmVyaW9yXCIsXG4gIDB4MjA4ZCxcbiAgXCJwYXJlbmxlZnRtb25vc3BhY2VcIixcbiAgMHhmZjA4LFxuICBcInBhcmVubGVmdHNtYWxsXCIsXG4gIDB4ZmU1OSxcbiAgXCJwYXJlbmxlZnRzdXBlcmlvclwiLFxuICAweDIwN2QsXG4gIFwicGFyZW5sZWZ0dHBcIixcbiAgMHhmOGViLFxuICBcInBhcmVubGVmdHZlcnRpY2FsXCIsXG4gIDB4ZmUzNSxcbiAgXCJwYXJlbnJpZ2h0XCIsXG4gIDB4MDAyOSxcbiAgXCJwYXJlbnJpZ2h0YWx0b25lYXJhYmljXCIsXG4gIDB4ZmQzZixcbiAgXCJwYXJlbnJpZ2h0YnRcIixcbiAgMHhmOGY4LFxuICBcInBhcmVucmlnaHRleFwiLFxuICAweGY4ZjcsXG4gIFwicGFyZW5yaWdodGluZmVyaW9yXCIsXG4gIDB4MjA4ZSxcbiAgXCJwYXJlbnJpZ2h0bW9ub3NwYWNlXCIsXG4gIDB4ZmYwOSxcbiAgXCJwYXJlbnJpZ2h0c21hbGxcIixcbiAgMHhmZTVhLFxuICBcInBhcmVucmlnaHRzdXBlcmlvclwiLFxuICAweDIwN2UsXG4gIFwicGFyZW5yaWdodHRwXCIsXG4gIDB4ZjhmNixcbiAgXCJwYXJlbnJpZ2h0dmVydGljYWxcIixcbiAgMHhmZTM2LFxuICBcInBhcnRpYWxkaWZmXCIsXG4gIDB4MjIwMixcbiAgXCJwYXNlcWhlYnJld1wiLFxuICAweDA1YzAsXG4gIFwicGFzaHRhaGVicmV3XCIsXG4gIDB4MDU5OSxcbiAgXCJwYXNxdWFyZVwiLFxuICAweDMzYTksXG4gIFwicGF0YWhcIixcbiAgMHgwNWI3LFxuICBcInBhdGFoMTFcIixcbiAgMHgwNWI3LFxuICBcInBhdGFoMWRcIixcbiAgMHgwNWI3LFxuICBcInBhdGFoMmFcIixcbiAgMHgwNWI3LFxuICBcInBhdGFoaGVicmV3XCIsXG4gIDB4MDViNyxcbiAgXCJwYXRhaG5hcnJvd2hlYnJld1wiLFxuICAweDA1YjcsXG4gIFwicGF0YWhxdWFydGVyaGVicmV3XCIsXG4gIDB4MDViNyxcbiAgXCJwYXRhaHdpZGVoZWJyZXdcIixcbiAgMHgwNWI3LFxuICBcInBhemVyaGVicmV3XCIsXG4gIDB4MDVhMSxcbiAgXCJwYm9wb21vZm9cIixcbiAgMHgzMTA2LFxuICBcInBjaXJjbGVcIixcbiAgMHgyNGRmLFxuICBcInBkb3RhY2NlbnRcIixcbiAgMHgxZTU3LFxuICBcInBlXCIsXG4gIDB4MDVlNCxcbiAgXCJwZWN5cmlsbGljXCIsXG4gIDB4MDQzZixcbiAgXCJwZWRhZ2VzaFwiLFxuICAweGZiNDQsXG4gIFwicGVkYWdlc2hoZWJyZXdcIixcbiAgMHhmYjQ0LFxuICBcInBlZXppc3F1YXJlXCIsXG4gIDB4MzMzYixcbiAgXCJwZWZpbmFsZGFnZXNoaGVicmV3XCIsXG4gIDB4ZmI0MyxcbiAgXCJwZWhhcmFiaWNcIixcbiAgMHgwNjdlLFxuICBcInBlaGFybWVuaWFuXCIsXG4gIDB4MDU3YSxcbiAgXCJwZWhlYnJld1wiLFxuICAweDA1ZTQsXG4gIFwicGVoZmluYWxhcmFiaWNcIixcbiAgMHhmYjU3LFxuICBcInBlaGluaXRpYWxhcmFiaWNcIixcbiAgMHhmYjU4LFxuICBcInBlaGlyYWdhbmFcIixcbiAgMHgzMDdhLFxuICBcInBlaG1lZGlhbGFyYWJpY1wiLFxuICAweGZiNTksXG4gIFwicGVrYXRha2FuYVwiLFxuICAweDMwZGEsXG4gIFwicGVtaWRkbGVob29rY3lyaWxsaWNcIixcbiAgMHgwNGE3LFxuICBcInBlcmFmZWhlYnJld1wiLFxuICAweGZiNGUsXG4gIFwicGVyY2VudFwiLFxuICAweDAwMjUsXG4gIFwicGVyY2VudGFyYWJpY1wiLFxuICAweDA2NmEsXG4gIFwicGVyY2VudG1vbm9zcGFjZVwiLFxuICAweGZmMDUsXG4gIFwicGVyY2VudHNtYWxsXCIsXG4gIDB4ZmU2YSxcbiAgXCJwZXJpb2RcIixcbiAgMHgwMDJlLFxuICBcInBlcmlvZGFybWVuaWFuXCIsXG4gIDB4MDU4OSxcbiAgXCJwZXJpb2RjZW50ZXJlZFwiLFxuICAweDAwYjcsXG4gIFwicGVyaW9kaGFsZndpZHRoXCIsXG4gIDB4ZmY2MSxcbiAgXCJwZXJpb2RpbmZlcmlvclwiLFxuICAweGY2ZTcsXG4gIFwicGVyaW9kbW9ub3NwYWNlXCIsXG4gIDB4ZmYwZSxcbiAgXCJwZXJpb2RzbWFsbFwiLFxuICAweGZlNTIsXG4gIFwicGVyaW9kc3VwZXJpb3JcIixcbiAgMHhmNmU4LFxuICBcInBlcmlzcG9tZW5pZ3JlZWtjbWJcIixcbiAgMHgwMzQyLFxuICBcInBlcnBlbmRpY3VsYXJcIixcbiAgMHgyMmE1LFxuICBcInBlcnRob3VzYW5kXCIsXG4gIDB4MjAzMCxcbiAgXCJwZXNldGFcIixcbiAgMHgyMGE3LFxuICBcInBmc3F1YXJlXCIsXG4gIDB4MzM4YSxcbiAgXCJwaGFiZW5nYWxpXCIsXG4gIDB4MDlhYixcbiAgXCJwaGFkZXZhXCIsXG4gIDB4MDkyYixcbiAgXCJwaGFndWphcmF0aVwiLFxuICAweDBhYWIsXG4gIFwicGhhZ3VybXVraGlcIixcbiAgMHgwYTJiLFxuICBcInBoaVwiLFxuICAweDAzYzYsXG4gIFwicGhpMVwiLFxuICAweDAzZDUsXG4gIFwicGhpZXVwaGFjaXJjbGVrb3JlYW5cIixcbiAgMHgzMjdhLFxuICBcInBoaWV1cGhhcGFyZW5rb3JlYW5cIixcbiAgMHgzMjFhLFxuICBcInBoaWV1cGhjaXJjbGVrb3JlYW5cIixcbiAgMHgzMjZjLFxuICBcInBoaWV1cGhrb3JlYW5cIixcbiAgMHgzMTRkLFxuICBcInBoaWV1cGhwYXJlbmtvcmVhblwiLFxuICAweDMyMGMsXG4gIFwicGhpbGF0aW5cIixcbiAgMHgwMjc4LFxuICBcInBoaW50aHV0aGFpXCIsXG4gIDB4MGUzYSxcbiAgXCJwaGlzeW1ib2xncmVla1wiLFxuICAweDAzZDUsXG4gIFwicGhvb2tcIixcbiAgMHgwMWE1LFxuICBcInBob3BoYW50aGFpXCIsXG4gIDB4MGUxZSxcbiAgXCJwaG9waHVuZ3RoYWlcIixcbiAgMHgwZTFjLFxuICBcInBob3NhbXBoYW90aGFpXCIsXG4gIDB4MGUyMCxcbiAgXCJwaVwiLFxuICAweDAzYzAsXG4gIFwicGlldXBhY2lyY2xla29yZWFuXCIsXG4gIDB4MzI3MyxcbiAgXCJwaWV1cGFwYXJlbmtvcmVhblwiLFxuICAweDMyMTMsXG4gIFwicGlldXBjaWV1Y2tvcmVhblwiLFxuICAweDMxNzYsXG4gIFwicGlldXBjaXJjbGVrb3JlYW5cIixcbiAgMHgzMjY1LFxuICBcInBpZXVwa2l5ZW9ra29yZWFuXCIsXG4gIDB4MzE3MixcbiAgXCJwaWV1cGtvcmVhblwiLFxuICAweDMxNDIsXG4gIFwicGlldXBwYXJlbmtvcmVhblwiLFxuICAweDMyMDUsXG4gIFwicGlldXBzaW9za2l5ZW9ra29yZWFuXCIsXG4gIDB4MzE3NCxcbiAgXCJwaWV1cHNpb3Nrb3JlYW5cIixcbiAgMHgzMTQ0LFxuICBcInBpZXVwc2lvc3Rpa2V1dGtvcmVhblwiLFxuICAweDMxNzUsXG4gIFwicGlldXB0aGlldXRoa29yZWFuXCIsXG4gIDB4MzE3NyxcbiAgXCJwaWV1cHRpa2V1dGtvcmVhblwiLFxuICAweDMxNzMsXG4gIFwicGloaXJhZ2FuYVwiLFxuICAweDMwNzQsXG4gIFwicGlrYXRha2FuYVwiLFxuICAweDMwZDQsXG4gIFwicGlzeW1ib2xncmVla1wiLFxuICAweDAzZDYsXG4gIFwicGl3cmFybWVuaWFuXCIsXG4gIDB4MDU4MyxcbiAgXCJwbHVzXCIsXG4gIDB4MDAyYixcbiAgXCJwbHVzYmVsb3djbWJcIixcbiAgMHgwMzFmLFxuICBcInBsdXNjaXJjbGVcIixcbiAgMHgyMjk1LFxuICBcInBsdXNtaW51c1wiLFxuICAweDAwYjEsXG4gIFwicGx1c21vZFwiLFxuICAweDAyZDYsXG4gIFwicGx1c21vbm9zcGFjZVwiLFxuICAweGZmMGIsXG4gIFwicGx1c3NtYWxsXCIsXG4gIDB4ZmU2MixcbiAgXCJwbHVzc3VwZXJpb3JcIixcbiAgMHgyMDdhLFxuICBcInBtb25vc3BhY2VcIixcbiAgMHhmZjUwLFxuICBcInBtc3F1YXJlXCIsXG4gIDB4MzNkOCxcbiAgXCJwb2hpcmFnYW5hXCIsXG4gIDB4MzA3ZCxcbiAgXCJwb2ludGluZ2luZGV4ZG93bndoaXRlXCIsXG4gIDB4MjYxZixcbiAgXCJwb2ludGluZ2luZGV4bGVmdHdoaXRlXCIsXG4gIDB4MjYxYyxcbiAgXCJwb2ludGluZ2luZGV4cmlnaHR3aGl0ZVwiLFxuICAweDI2MWUsXG4gIFwicG9pbnRpbmdpbmRleHVwd2hpdGVcIixcbiAgMHgyNjFkLFxuICBcInBva2F0YWthbmFcIixcbiAgMHgzMGRkLFxuICBcInBvcGxhdGhhaVwiLFxuICAweDBlMWIsXG4gIFwicG9zdGFsbWFya1wiLFxuICAweDMwMTIsXG4gIFwicG9zdGFsbWFya2ZhY2VcIixcbiAgMHgzMDIwLFxuICBcInBwYXJlblwiLFxuICAweDI0YWIsXG4gIFwicHJlY2VkZXNcIixcbiAgMHgyMjdhLFxuICBcInByZXNjcmlwdGlvblwiLFxuICAweDIxMWUsXG4gIFwicHJpbWVtb2RcIixcbiAgMHgwMmI5LFxuICBcInByaW1lcmV2ZXJzZWRcIixcbiAgMHgyMDM1LFxuICBcInByb2R1Y3RcIixcbiAgMHgyMjBmLFxuICBcInByb2plY3RpdmVcIixcbiAgMHgyMzA1LFxuICBcInByb2xvbmdlZGthbmFcIixcbiAgMHgzMGZjLFxuICBcInByb3BlbGxvclwiLFxuICAweDIzMTgsXG4gIFwicHJvcGVyc3Vic2V0XCIsXG4gIDB4MjI4MixcbiAgXCJwcm9wZXJzdXBlcnNldFwiLFxuICAweDIyODMsXG4gIFwicHJvcG9ydGlvblwiLFxuICAweDIyMzcsXG4gIFwicHJvcG9ydGlvbmFsXCIsXG4gIDB4MjIxZCxcbiAgXCJwc2lcIixcbiAgMHgwM2M4LFxuICBcInBzaWN5cmlsbGljXCIsXG4gIDB4MDQ3MSxcbiAgXCJwc2lsaXBuZXVtYXRhY3lyaWxsaWNjbWJcIixcbiAgMHgwNDg2LFxuICBcInBzc3F1YXJlXCIsXG4gIDB4MzNiMCxcbiAgXCJwdWhpcmFnYW5hXCIsXG4gIDB4MzA3NyxcbiAgXCJwdWthdGFrYW5hXCIsXG4gIDB4MzBkNyxcbiAgXCJwdnNxdWFyZVwiLFxuICAweDMzYjQsXG4gIFwicHdzcXVhcmVcIixcbiAgMHgzM2JhLFxuICBcInFcIixcbiAgMHgwMDcxLFxuICBcInFhZGV2YVwiLFxuICAweDA5NTgsXG4gIFwicWFkbWFoZWJyZXdcIixcbiAgMHgwNWE4LFxuICBcInFhZmFyYWJpY1wiLFxuICAweDA2NDIsXG4gIFwicWFmZmluYWxhcmFiaWNcIixcbiAgMHhmZWQ2LFxuICBcInFhZmluaXRpYWxhcmFiaWNcIixcbiAgMHhmZWQ3LFxuICBcInFhZm1lZGlhbGFyYWJpY1wiLFxuICAweGZlZDgsXG4gIFwicWFtYXRzXCIsXG4gIDB4MDViOCxcbiAgXCJxYW1hdHMxMFwiLFxuICAweDA1YjgsXG4gIFwicWFtYXRzMWFcIixcbiAgMHgwNWI4LFxuICBcInFhbWF0czFjXCIsXG4gIDB4MDViOCxcbiAgXCJxYW1hdHMyN1wiLFxuICAweDA1YjgsXG4gIFwicWFtYXRzMjlcIixcbiAgMHgwNWI4LFxuICBcInFhbWF0czMzXCIsXG4gIDB4MDViOCxcbiAgXCJxYW1hdHNkZVwiLFxuICAweDA1YjgsXG4gIFwicWFtYXRzaGVicmV3XCIsXG4gIDB4MDViOCxcbiAgXCJxYW1hdHNuYXJyb3doZWJyZXdcIixcbiAgMHgwNWI4LFxuICBcInFhbWF0c3FhdGFuaGVicmV3XCIsXG4gIDB4MDViOCxcbiAgXCJxYW1hdHNxYXRhbm5hcnJvd2hlYnJld1wiLFxuICAweDA1YjgsXG4gIFwicWFtYXRzcWF0YW5xdWFydGVyaGVicmV3XCIsXG4gIDB4MDViOCxcbiAgXCJxYW1hdHNxYXRhbndpZGVoZWJyZXdcIixcbiAgMHgwNWI4LFxuICBcInFhbWF0c3F1YXJ0ZXJoZWJyZXdcIixcbiAgMHgwNWI4LFxuICBcInFhbWF0c3dpZGVoZWJyZXdcIixcbiAgMHgwNWI4LFxuICBcInFhcm5leXBhcmFoZWJyZXdcIixcbiAgMHgwNTlmLFxuICBcInFib3BvbW9mb1wiLFxuICAweDMxMTEsXG4gIFwicWNpcmNsZVwiLFxuICAweDI0ZTAsXG4gIFwicWhvb2tcIixcbiAgMHgwMmEwLFxuICBcInFtb25vc3BhY2VcIixcbiAgMHhmZjUxLFxuICBcInFvZlwiLFxuICAweDA1ZTcsXG4gIFwicW9mZGFnZXNoXCIsXG4gIDB4ZmI0NyxcbiAgXCJxb2ZkYWdlc2hoZWJyZXdcIixcbiAgMHhmYjQ3LFxuICBcInFvZmhlYnJld1wiLFxuICAweDA1ZTcsXG4gIFwicXBhcmVuXCIsXG4gIDB4MjRhYyxcbiAgXCJxdWFydGVybm90ZVwiLFxuICAweDI2NjksXG4gIFwicXVidXRzXCIsXG4gIDB4MDViYixcbiAgXCJxdWJ1dHMxOFwiLFxuICAweDA1YmIsXG4gIFwicXVidXRzMjVcIixcbiAgMHgwNWJiLFxuICBcInF1YnV0czMxXCIsXG4gIDB4MDViYixcbiAgXCJxdWJ1dHNoZWJyZXdcIixcbiAgMHgwNWJiLFxuICBcInF1YnV0c25hcnJvd2hlYnJld1wiLFxuICAweDA1YmIsXG4gIFwicXVidXRzcXVhcnRlcmhlYnJld1wiLFxuICAweDA1YmIsXG4gIFwicXVidXRzd2lkZWhlYnJld1wiLFxuICAweDA1YmIsXG4gIFwicXVlc3Rpb25cIixcbiAgMHgwMDNmLFxuICBcInF1ZXN0aW9uYXJhYmljXCIsXG4gIDB4MDYxZixcbiAgXCJxdWVzdGlvbmFybWVuaWFuXCIsXG4gIDB4MDU1ZSxcbiAgXCJxdWVzdGlvbmRvd25cIixcbiAgMHgwMGJmLFxuICBcInF1ZXN0aW9uZG93bnNtYWxsXCIsXG4gIDB4ZjdiZixcbiAgXCJxdWVzdGlvbmdyZWVrXCIsXG4gIDB4MDM3ZSxcbiAgXCJxdWVzdGlvbm1vbm9zcGFjZVwiLFxuICAweGZmMWYsXG4gIFwicXVlc3Rpb25zbWFsbFwiLFxuICAweGY3M2YsXG4gIFwicXVvdGVkYmxcIixcbiAgMHgwMDIyLFxuICBcInF1b3RlZGJsYmFzZVwiLFxuICAweDIwMWUsXG4gIFwicXVvdGVkYmxsZWZ0XCIsXG4gIDB4MjAxYyxcbiAgXCJxdW90ZWRibG1vbm9zcGFjZVwiLFxuICAweGZmMDIsXG4gIFwicXVvdGVkYmxwcmltZVwiLFxuICAweDMwMWUsXG4gIFwicXVvdGVkYmxwcmltZXJldmVyc2VkXCIsXG4gIDB4MzAxZCxcbiAgXCJxdW90ZWRibHJpZ2h0XCIsXG4gIDB4MjAxZCxcbiAgXCJxdW90ZWxlZnRcIixcbiAgMHgyMDE4LFxuICBcInF1b3RlbGVmdHJldmVyc2VkXCIsXG4gIDB4MjAxYixcbiAgXCJxdW90ZXJldmVyc2VkXCIsXG4gIDB4MjAxYixcbiAgXCJxdW90ZXJpZ2h0XCIsXG4gIDB4MjAxOSxcbiAgXCJxdW90ZXJpZ2h0blwiLFxuICAweDAxNDksXG4gIFwicXVvdGVzaW5nbGJhc2VcIixcbiAgMHgyMDFhLFxuICBcInF1b3Rlc2luZ2xlXCIsXG4gIDB4MDAyNyxcbiAgXCJxdW90ZXNpbmdsZW1vbm9zcGFjZVwiLFxuICAweGZmMDcsXG4gIFwiclwiLFxuICAweDAwNzIsXG4gIFwicmFhcm1lbmlhblwiLFxuICAweDA1N2MsXG4gIFwicmFiZW5nYWxpXCIsXG4gIDB4MDliMCxcbiAgXCJyYWN1dGVcIixcbiAgMHgwMTU1LFxuICBcInJhZGV2YVwiLFxuICAweDA5MzAsXG4gIFwicmFkaWNhbFwiLFxuICAweDIyMWEsXG4gIFwicmFkaWNhbGV4XCIsXG4gIDB4ZjhlNSxcbiAgXCJyYWRvdmVyc3NxdWFyZVwiLFxuICAweDMzYWUsXG4gIFwicmFkb3ZlcnNzcXVhcmVkc3F1YXJlXCIsXG4gIDB4MzNhZixcbiAgXCJyYWRzcXVhcmVcIixcbiAgMHgzM2FkLFxuICBcInJhZmVcIixcbiAgMHgwNWJmLFxuICBcInJhZmVoZWJyZXdcIixcbiAgMHgwNWJmLFxuICBcInJhZ3VqYXJhdGlcIixcbiAgMHgwYWIwLFxuICBcInJhZ3VybXVraGlcIixcbiAgMHgwYTMwLFxuICBcInJhaGlyYWdhbmFcIixcbiAgMHgzMDg5LFxuICBcInJha2F0YWthbmFcIixcbiAgMHgzMGU5LFxuICBcInJha2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjk3LFxuICBcInJhbG93ZXJkaWFnb25hbGJlbmdhbGlcIixcbiAgMHgwOWYxLFxuICBcInJhbWlkZGxlZGlhZ29uYWxiZW5nYWxpXCIsXG4gIDB4MDlmMCxcbiAgXCJyYW1zaG9yblwiLFxuICAweDAyNjQsXG4gIFwicmF0aW9cIixcbiAgMHgyMjM2LFxuICBcInJib3BvbW9mb1wiLFxuICAweDMxMTYsXG4gIFwicmNhcm9uXCIsXG4gIDB4MDE1OSxcbiAgXCJyY2VkaWxsYVwiLFxuICAweDAxNTcsXG4gIFwicmNpcmNsZVwiLFxuICAweDI0ZTEsXG4gIFwicmNvbW1hYWNjZW50XCIsXG4gIDB4MDE1NyxcbiAgXCJyZGJsZ3JhdmVcIixcbiAgMHgwMjExLFxuICBcInJkb3RhY2NlbnRcIixcbiAgMHgxZTU5LFxuICBcInJkb3RiZWxvd1wiLFxuICAweDFlNWIsXG4gIFwicmRvdGJlbG93bWFjcm9uXCIsXG4gIDB4MWU1ZCxcbiAgXCJyZWZlcmVuY2VtYXJrXCIsXG4gIDB4MjAzYixcbiAgXCJyZWZsZXhzdWJzZXRcIixcbiAgMHgyMjg2LFxuICBcInJlZmxleHN1cGVyc2V0XCIsXG4gIDB4MjI4NyxcbiAgXCJyZWdpc3RlcmVkXCIsXG4gIDB4MDBhZSxcbiAgXCJyZWdpc3RlcnNhbnNcIixcbiAgMHhmOGU4LFxuICBcInJlZ2lzdGVyc2VyaWZcIixcbiAgMHhmNmRhLFxuICBcInJlaGFyYWJpY1wiLFxuICAweDA2MzEsXG4gIFwicmVoYXJtZW5pYW5cIixcbiAgMHgwNTgwLFxuICBcInJlaGZpbmFsYXJhYmljXCIsXG4gIDB4ZmVhZSxcbiAgXCJyZWhpcmFnYW5hXCIsXG4gIDB4MzA4YyxcbiAgXCJyZWthdGFrYW5hXCIsXG4gIDB4MzBlYyxcbiAgXCJyZWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY5YSxcbiAgXCJyZXNoXCIsXG4gIDB4MDVlOCxcbiAgXCJyZXNoZGFnZXNoaGVicmV3XCIsXG4gIDB4ZmI0OCxcbiAgXCJyZXNoaGVicmV3XCIsXG4gIDB4MDVlOCxcbiAgXCJyZXZlcnNlZHRpbGRlXCIsXG4gIDB4MjIzZCxcbiAgXCJyZXZpYWhlYnJld1wiLFxuICAweDA1OTcsXG4gIFwicmV2aWFtdWdyYXNoaGVicmV3XCIsXG4gIDB4MDU5NyxcbiAgXCJyZXZsb2dpY2Fsbm90XCIsXG4gIDB4MjMxMCxcbiAgXCJyZmlzaGhvb2tcIixcbiAgMHgwMjdlLFxuICBcInJmaXNoaG9va3JldmVyc2VkXCIsXG4gIDB4MDI3ZixcbiAgXCJyaGFiZW5nYWxpXCIsXG4gIDB4MDlkZCxcbiAgXCJyaGFkZXZhXCIsXG4gIDB4MDk1ZCxcbiAgXCJyaG9cIixcbiAgMHgwM2MxLFxuICBcInJob29rXCIsXG4gIDB4MDI3ZCxcbiAgXCJyaG9va3R1cm5lZFwiLFxuICAweDAyN2IsXG4gIFwicmhvb2t0dXJuZWRzdXBlcmlvclwiLFxuICAweDAyYjUsXG4gIFwicmhvc3ltYm9sZ3JlZWtcIixcbiAgMHgwM2YxLFxuICBcInJob3RpY2hvb2ttb2RcIixcbiAgMHgwMmRlLFxuICBcInJpZXVsYWNpcmNsZWtvcmVhblwiLFxuICAweDMyNzEsXG4gIFwicmlldWxhcGFyZW5rb3JlYW5cIixcbiAgMHgzMjExLFxuICBcInJpZXVsY2lyY2xla29yZWFuXCIsXG4gIDB4MzI2MyxcbiAgXCJyaWV1bGhpZXVoa29yZWFuXCIsXG4gIDB4MzE0MCxcbiAgXCJyaWV1bGtpeWVva2tvcmVhblwiLFxuICAweDMxM2EsXG4gIFwicmlldWxraXllb2tzaW9za29yZWFuXCIsXG4gIDB4MzE2OSxcbiAgXCJyaWV1bGtvcmVhblwiLFxuICAweDMxMzksXG4gIFwicmlldWxtaWV1bWtvcmVhblwiLFxuICAweDMxM2IsXG4gIFwicmlldWxwYW5zaW9za29yZWFuXCIsXG4gIDB4MzE2YyxcbiAgXCJyaWV1bHBhcmVua29yZWFuXCIsXG4gIDB4MzIwMyxcbiAgXCJyaWV1bHBoaWV1cGhrb3JlYW5cIixcbiAgMHgzMTNmLFxuICBcInJpZXVscGlldXBrb3JlYW5cIixcbiAgMHgzMTNjLFxuICBcInJpZXVscGlldXBzaW9za29yZWFuXCIsXG4gIDB4MzE2YixcbiAgXCJyaWV1bHNpb3Nrb3JlYW5cIixcbiAgMHgzMTNkLFxuICBcInJpZXVsdGhpZXV0aGtvcmVhblwiLFxuICAweDMxM2UsXG4gIFwicmlldWx0aWtldXRrb3JlYW5cIixcbiAgMHgzMTZhLFxuICBcInJpZXVseWVvcmluaGlldWhrb3JlYW5cIixcbiAgMHgzMTZkLFxuICBcInJpZ2h0YW5nbGVcIixcbiAgMHgyMjFmLFxuICBcInJpZ2h0dGFja2JlbG93Y21iXCIsXG4gIDB4MDMxOSxcbiAgXCJyaWdodHRyaWFuZ2xlXCIsXG4gIDB4MjJiZixcbiAgXCJyaWhpcmFnYW5hXCIsXG4gIDB4MzA4YSxcbiAgXCJyaWthdGFrYW5hXCIsXG4gIDB4MzBlYSxcbiAgXCJyaWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY5OCxcbiAgXCJyaW5nXCIsXG4gIDB4MDJkYSxcbiAgXCJyaW5nYmVsb3djbWJcIixcbiAgMHgwMzI1LFxuICBcInJpbmdjbWJcIixcbiAgMHgwMzBhLFxuICBcInJpbmdoYWxmbGVmdFwiLFxuICAweDAyYmYsXG4gIFwicmluZ2hhbGZsZWZ0YXJtZW5pYW5cIixcbiAgMHgwNTU5LFxuICBcInJpbmdoYWxmbGVmdGJlbG93Y21iXCIsXG4gIDB4MDMxYyxcbiAgXCJyaW5naGFsZmxlZnRjZW50ZXJlZFwiLFxuICAweDAyZDMsXG4gIFwicmluZ2hhbGZyaWdodFwiLFxuICAweDAyYmUsXG4gIFwicmluZ2hhbGZyaWdodGJlbG93Y21iXCIsXG4gIDB4MDMzOSxcbiAgXCJyaW5naGFsZnJpZ2h0Y2VudGVyZWRcIixcbiAgMHgwMmQyLFxuICBcInJpbnZlcnRlZGJyZXZlXCIsXG4gIDB4MDIxMyxcbiAgXCJyaXR0b3J1c3F1YXJlXCIsXG4gIDB4MzM1MSxcbiAgXCJybGluZWJlbG93XCIsXG4gIDB4MWU1ZixcbiAgXCJybG9uZ2xlZ1wiLFxuICAweDAyN2MsXG4gIFwicmxvbmdsZWd0dXJuZWRcIixcbiAgMHgwMjdhLFxuICBcInJtb25vc3BhY2VcIixcbiAgMHhmZjUyLFxuICBcInJvaGlyYWdhbmFcIixcbiAgMHgzMDhkLFxuICBcInJva2F0YWthbmFcIixcbiAgMHgzMGVkLFxuICBcInJva2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjliLFxuICBcInJvcnVhdGhhaVwiLFxuICAweDBlMjMsXG4gIFwicnBhcmVuXCIsXG4gIDB4MjRhZCxcbiAgXCJycmFiZW5nYWxpXCIsXG4gIDB4MDlkYyxcbiAgXCJycmFkZXZhXCIsXG4gIDB4MDkzMSxcbiAgXCJycmFndXJtdWtoaVwiLFxuICAweDBhNWMsXG4gIFwicnJlaGFyYWJpY1wiLFxuICAweDA2OTEsXG4gIFwicnJlaGZpbmFsYXJhYmljXCIsXG4gIDB4ZmI4ZCxcbiAgXCJycnZvY2FsaWNiZW5nYWxpXCIsXG4gIDB4MDllMCxcbiAgXCJycnZvY2FsaWNkZXZhXCIsXG4gIDB4MDk2MCxcbiAgXCJycnZvY2FsaWNndWphcmF0aVwiLFxuICAweDBhZTAsXG4gIFwicnJ2b2NhbGljdm93ZWxzaWduYmVuZ2FsaVwiLFxuICAweDA5YzQsXG4gIFwicnJ2b2NhbGljdm93ZWxzaWduZGV2YVwiLFxuICAweDA5NDQsXG4gIFwicnJ2b2NhbGljdm93ZWxzaWduZ3VqYXJhdGlcIixcbiAgMHgwYWM0LFxuICBcInJzdXBlcmlvclwiLFxuICAweGY2ZjEsXG4gIFwicnRibG9ja1wiLFxuICAweDI1OTAsXG4gIFwicnR1cm5lZFwiLFxuICAweDAyNzksXG4gIFwicnR1cm5lZHN1cGVyaW9yXCIsXG4gIDB4MDJiNCxcbiAgXCJydWhpcmFnYW5hXCIsXG4gIDB4MzA4YixcbiAgXCJydWthdGFrYW5hXCIsXG4gIDB4MzBlYixcbiAgXCJydWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY5OSxcbiAgXCJydXBlZW1hcmtiZW5nYWxpXCIsXG4gIDB4MDlmMixcbiAgXCJydXBlZXNpZ25iZW5nYWxpXCIsXG4gIDB4MDlmMyxcbiAgXCJydXBpYWhcIixcbiAgMHhmNmRkLFxuICBcInJ1dGhhaVwiLFxuICAweDBlMjQsXG4gIFwicnZvY2FsaWNiZW5nYWxpXCIsXG4gIDB4MDk4YixcbiAgXCJydm9jYWxpY2RldmFcIixcbiAgMHgwOTBiLFxuICBcInJ2b2NhbGljZ3VqYXJhdGlcIixcbiAgMHgwYThiLFxuICBcInJ2b2NhbGljdm93ZWxzaWduYmVuZ2FsaVwiLFxuICAweDA5YzMsXG4gIFwicnZvY2FsaWN2b3dlbHNpZ25kZXZhXCIsXG4gIDB4MDk0MyxcbiAgXCJydm9jYWxpY3Zvd2Vsc2lnbmd1amFyYXRpXCIsXG4gIDB4MGFjMyxcbiAgXCJzXCIsXG4gIDB4MDA3MyxcbiAgXCJzYWJlbmdhbGlcIixcbiAgMHgwOWI4LFxuICBcInNhY3V0ZVwiLFxuICAweDAxNWIsXG4gIFwic2FjdXRlZG90YWNjZW50XCIsXG4gIDB4MWU2NSxcbiAgXCJzYWRhcmFiaWNcIixcbiAgMHgwNjM1LFxuICBcInNhZGV2YVwiLFxuICAweDA5MzgsXG4gIFwic2FkZmluYWxhcmFiaWNcIixcbiAgMHhmZWJhLFxuICBcInNhZGluaXRpYWxhcmFiaWNcIixcbiAgMHhmZWJiLFxuICBcInNhZG1lZGlhbGFyYWJpY1wiLFxuICAweGZlYmMsXG4gIFwic2FndWphcmF0aVwiLFxuICAweDBhYjgsXG4gIFwic2FndXJtdWtoaVwiLFxuICAweDBhMzgsXG4gIFwic2FoaXJhZ2FuYVwiLFxuICAweDMwNTUsXG4gIFwic2FrYXRha2FuYVwiLFxuICAweDMwYjUsXG4gIFwic2FrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmN2IsXG4gIFwic2FsbGFsbGFob3VhbGF5aGV3YXNhbGxhbWFyYWJpY1wiLFxuICAweGZkZmEsXG4gIFwic2FtZWtoXCIsXG4gIDB4MDVlMSxcbiAgXCJzYW1la2hkYWdlc2hcIixcbiAgMHhmYjQxLFxuICBcInNhbWVraGRhZ2VzaGhlYnJld1wiLFxuICAweGZiNDEsXG4gIFwic2FtZWtoaGVicmV3XCIsXG4gIDB4MDVlMSxcbiAgXCJzYXJhYWF0aGFpXCIsXG4gIDB4MGUzMixcbiAgXCJzYXJhYWV0aGFpXCIsXG4gIDB4MGU0MSxcbiAgXCJzYXJhYWltYWltYWxhaXRoYWlcIixcbiAgMHgwZTQ0LFxuICBcInNhcmFhaW1haW11YW50aGFpXCIsXG4gIDB4MGU0MyxcbiAgXCJzYXJhYW10aGFpXCIsXG4gIDB4MGUzMyxcbiAgXCJzYXJhYXRoYWlcIixcbiAgMHgwZTMwLFxuICBcInNhcmFldGhhaVwiLFxuICAweDBlNDAsXG4gIFwic2FyYWlpbGVmdHRoYWlcIixcbiAgMHhmODg2LFxuICBcInNhcmFpaXRoYWlcIixcbiAgMHgwZTM1LFxuICBcInNhcmFpbGVmdHRoYWlcIixcbiAgMHhmODg1LFxuICBcInNhcmFpdGhhaVwiLFxuICAweDBlMzQsXG4gIFwic2FyYW90aGFpXCIsXG4gIDB4MGU0MixcbiAgXCJzYXJhdWVlbGVmdHRoYWlcIixcbiAgMHhmODg4LFxuICBcInNhcmF1ZWV0aGFpXCIsXG4gIDB4MGUzNyxcbiAgXCJzYXJhdWVsZWZ0dGhhaVwiLFxuICAweGY4ODcsXG4gIFwic2FyYXVldGhhaVwiLFxuICAweDBlMzYsXG4gIFwic2FyYXV0aGFpXCIsXG4gIDB4MGUzOCxcbiAgXCJzYXJhdXV0aGFpXCIsXG4gIDB4MGUzOSxcbiAgXCJzYm9wb21vZm9cIixcbiAgMHgzMTE5LFxuICBcInNjYXJvblwiLFxuICAweDAxNjEsXG4gIFwic2Nhcm9uZG90YWNjZW50XCIsXG4gIDB4MWU2NyxcbiAgXCJzY2VkaWxsYVwiLFxuICAweDAxNWYsXG4gIFwic2Nod2FcIixcbiAgMHgwMjU5LFxuICBcInNjaHdhY3lyaWxsaWNcIixcbiAgMHgwNGQ5LFxuICBcInNjaHdhZGllcmVzaXNjeXJpbGxpY1wiLFxuICAweDA0ZGIsXG4gIFwic2Nod2Fob29rXCIsXG4gIDB4MDI1YSxcbiAgXCJzY2lyY2xlXCIsXG4gIDB4MjRlMixcbiAgXCJzY2lyY3VtZmxleFwiLFxuICAweDAxNWQsXG4gIFwic2NvbW1hYWNjZW50XCIsXG4gIDB4MDIxOSxcbiAgXCJzZG90YWNjZW50XCIsXG4gIDB4MWU2MSxcbiAgXCJzZG90YmVsb3dcIixcbiAgMHgxZTYzLFxuICBcInNkb3RiZWxvd2RvdGFjY2VudFwiLFxuICAweDFlNjksXG4gIFwic2VhZ3VsbGJlbG93Y21iXCIsXG4gIDB4MDMzYyxcbiAgXCJzZWNvbmRcIixcbiAgMHgyMDMzLFxuICBcInNlY29uZHRvbmVjaGluZXNlXCIsXG4gIDB4MDJjYSxcbiAgXCJzZWN0aW9uXCIsXG4gIDB4MDBhNyxcbiAgXCJzZWVuYXJhYmljXCIsXG4gIDB4MDYzMyxcbiAgXCJzZWVuZmluYWxhcmFiaWNcIixcbiAgMHhmZWIyLFxuICBcInNlZW5pbml0aWFsYXJhYmljXCIsXG4gIDB4ZmViMyxcbiAgXCJzZWVubWVkaWFsYXJhYmljXCIsXG4gIDB4ZmViNCxcbiAgXCJzZWdvbFwiLFxuICAweDA1YjYsXG4gIFwic2Vnb2wxM1wiLFxuICAweDA1YjYsXG4gIFwic2Vnb2wxZlwiLFxuICAweDA1YjYsXG4gIFwic2Vnb2wyY1wiLFxuICAweDA1YjYsXG4gIFwic2Vnb2xoZWJyZXdcIixcbiAgMHgwNWI2LFxuICBcInNlZ29sbmFycm93aGVicmV3XCIsXG4gIDB4MDViNixcbiAgXCJzZWdvbHF1YXJ0ZXJoZWJyZXdcIixcbiAgMHgwNWI2LFxuICBcInNlZ29sdGFoZWJyZXdcIixcbiAgMHgwNTkyLFxuICBcInNlZ29sd2lkZWhlYnJld1wiLFxuICAweDA1YjYsXG4gIFwic2VoYXJtZW5pYW5cIixcbiAgMHgwNTdkLFxuICBcInNlaGlyYWdhbmFcIixcbiAgMHgzMDViLFxuICBcInNla2F0YWthbmFcIixcbiAgMHgzMGJiLFxuICBcInNla2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjdlLFxuICBcInNlbWljb2xvblwiLFxuICAweDAwM2IsXG4gIFwic2VtaWNvbG9uYXJhYmljXCIsXG4gIDB4MDYxYixcbiAgXCJzZW1pY29sb25tb25vc3BhY2VcIixcbiAgMHhmZjFiLFxuICBcInNlbWljb2xvbnNtYWxsXCIsXG4gIDB4ZmU1NCxcbiAgXCJzZW1pdm9pY2VkbWFya2thbmFcIixcbiAgMHgzMDljLFxuICBcInNlbWl2b2ljZWRtYXJra2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmOWYsXG4gIFwic2VudGlzcXVhcmVcIixcbiAgMHgzMzIyLFxuICBcInNlbnRvc3F1YXJlXCIsXG4gIDB4MzMyMyxcbiAgXCJzZXZlblwiLFxuICAweDAwMzcsXG4gIFwic2V2ZW5hcmFiaWNcIixcbiAgMHgwNjY3LFxuICBcInNldmVuYmVuZ2FsaVwiLFxuICAweDA5ZWQsXG4gIFwic2V2ZW5jaXJjbGVcIixcbiAgMHgyNDY2LFxuICBcInNldmVuY2lyY2xlaW52ZXJzZXNhbnNzZXJpZlwiLFxuICAweDI3OTAsXG4gIFwic2V2ZW5kZXZhXCIsXG4gIDB4MDk2ZCxcbiAgXCJzZXZlbmVpZ2h0aHNcIixcbiAgMHgyMTVlLFxuICBcInNldmVuZ3VqYXJhdGlcIixcbiAgMHgwYWVkLFxuICBcInNldmVuZ3VybXVraGlcIixcbiAgMHgwYTZkLFxuICBcInNldmVuaGFja2FyYWJpY1wiLFxuICAweDA2NjcsXG4gIFwic2V2ZW5oYW5nemhvdVwiLFxuICAweDMwMjcsXG4gIFwic2V2ZW5pZGVvZ3JhcGhpY3BhcmVuXCIsXG4gIDB4MzIyNixcbiAgXCJzZXZlbmluZmVyaW9yXCIsXG4gIDB4MjA4NyxcbiAgXCJzZXZlbm1vbm9zcGFjZVwiLFxuICAweGZmMTcsXG4gIFwic2V2ZW5vbGRzdHlsZVwiLFxuICAweGY3MzcsXG4gIFwic2V2ZW5wYXJlblwiLFxuICAweDI0N2EsXG4gIFwic2V2ZW5wZXJpb2RcIixcbiAgMHgyNDhlLFxuICBcInNldmVucGVyc2lhblwiLFxuICAweDA2ZjcsXG4gIFwic2V2ZW5yb21hblwiLFxuICAweDIxNzYsXG4gIFwic2V2ZW5zdXBlcmlvclwiLFxuICAweDIwNzcsXG4gIFwic2V2ZW50ZWVuY2lyY2xlXCIsXG4gIDB4MjQ3MCxcbiAgXCJzZXZlbnRlZW5wYXJlblwiLFxuICAweDI0ODQsXG4gIFwic2V2ZW50ZWVucGVyaW9kXCIsXG4gIDB4MjQ5OCxcbiAgXCJzZXZlbnRoYWlcIixcbiAgMHgwZTU3LFxuICBcInNmdGh5cGhlblwiLFxuICAweDAwYWQsXG4gIFwic2hhYXJtZW5pYW5cIixcbiAgMHgwNTc3LFxuICBcInNoYWJlbmdhbGlcIixcbiAgMHgwOWI2LFxuICBcInNoYWN5cmlsbGljXCIsXG4gIDB4MDQ0OCxcbiAgXCJzaGFkZGFhcmFiaWNcIixcbiAgMHgwNjUxLFxuICBcInNoYWRkYWRhbW1hYXJhYmljXCIsXG4gIDB4ZmM2MSxcbiAgXCJzaGFkZGFkYW1tYXRhbmFyYWJpY1wiLFxuICAweGZjNWUsXG4gIFwic2hhZGRhZmF0aGFhcmFiaWNcIixcbiAgMHhmYzYwLFxuICBcInNoYWRkYWthc3JhYXJhYmljXCIsXG4gIDB4ZmM2MixcbiAgXCJzaGFkZGFrYXNyYXRhbmFyYWJpY1wiLFxuICAweGZjNWYsXG4gIFwic2hhZGVcIixcbiAgMHgyNTkyLFxuICBcInNoYWRlZGFya1wiLFxuICAweDI1OTMsXG4gIFwic2hhZGVsaWdodFwiLFxuICAweDI1OTEsXG4gIFwic2hhZGVtZWRpdW1cIixcbiAgMHgyNTkyLFxuICBcInNoYWRldmFcIixcbiAgMHgwOTM2LFxuICBcInNoYWd1amFyYXRpXCIsXG4gIDB4MGFiNixcbiAgXCJzaGFndXJtdWtoaVwiLFxuICAweDBhMzYsXG4gIFwic2hhbHNoZWxldGhlYnJld1wiLFxuICAweDA1OTMsXG4gIFwic2hib3BvbW9mb1wiLFxuICAweDMxMTUsXG4gIFwic2hjaGFjeXJpbGxpY1wiLFxuICAweDA0NDksXG4gIFwic2hlZW5hcmFiaWNcIixcbiAgMHgwNjM0LFxuICBcInNoZWVuZmluYWxhcmFiaWNcIixcbiAgMHhmZWI2LFxuICBcInNoZWVuaW5pdGlhbGFyYWJpY1wiLFxuICAweGZlYjcsXG4gIFwic2hlZW5tZWRpYWxhcmFiaWNcIixcbiAgMHhmZWI4LFxuICBcInNoZWljb3B0aWNcIixcbiAgMHgwM2UzLFxuICBcInNoZXFlbFwiLFxuICAweDIwYWEsXG4gIFwic2hlcWVsaGVicmV3XCIsXG4gIDB4MjBhYSxcbiAgXCJzaGV2YVwiLFxuICAweDA1YjAsXG4gIFwic2hldmExMTVcIixcbiAgMHgwNWIwLFxuICBcInNoZXZhMTVcIixcbiAgMHgwNWIwLFxuICBcInNoZXZhMjJcIixcbiAgMHgwNWIwLFxuICBcInNoZXZhMmVcIixcbiAgMHgwNWIwLFxuICBcInNoZXZhaGVicmV3XCIsXG4gIDB4MDViMCxcbiAgXCJzaGV2YW5hcnJvd2hlYnJld1wiLFxuICAweDA1YjAsXG4gIFwic2hldmFxdWFydGVyaGVicmV3XCIsXG4gIDB4MDViMCxcbiAgXCJzaGV2YXdpZGVoZWJyZXdcIixcbiAgMHgwNWIwLFxuICBcInNoaGFjeXJpbGxpY1wiLFxuICAweDA0YmIsXG4gIFwic2hpbWFjb3B0aWNcIixcbiAgMHgwM2VkLFxuICBcInNoaW5cIixcbiAgMHgwNWU5LFxuICBcInNoaW5kYWdlc2hcIixcbiAgMHhmYjQ5LFxuICBcInNoaW5kYWdlc2hoZWJyZXdcIixcbiAgMHhmYjQ5LFxuICBcInNoaW5kYWdlc2hzaGluZG90XCIsXG4gIDB4ZmIyYyxcbiAgXCJzaGluZGFnZXNoc2hpbmRvdGhlYnJld1wiLFxuICAweGZiMmMsXG4gIFwic2hpbmRhZ2VzaHNpbmRvdFwiLFxuICAweGZiMmQsXG4gIFwic2hpbmRhZ2VzaHNpbmRvdGhlYnJld1wiLFxuICAweGZiMmQsXG4gIFwic2hpbmRvdGhlYnJld1wiLFxuICAweDA1YzEsXG4gIFwic2hpbmhlYnJld1wiLFxuICAweDA1ZTksXG4gIFwic2hpbnNoaW5kb3RcIixcbiAgMHhmYjJhLFxuICBcInNoaW5zaGluZG90aGVicmV3XCIsXG4gIDB4ZmIyYSxcbiAgXCJzaGluc2luZG90XCIsXG4gIDB4ZmIyYixcbiAgXCJzaGluc2luZG90aGVicmV3XCIsXG4gIDB4ZmIyYixcbiAgXCJzaG9va1wiLFxuICAweDAyODIsXG4gIFwic2lnbWFcIixcbiAgMHgwM2MzLFxuICBcInNpZ21hMVwiLFxuICAweDAzYzIsXG4gIFwic2lnbWFmaW5hbFwiLFxuICAweDAzYzIsXG4gIFwic2lnbWFsdW5hdGVzeW1ib2xncmVla1wiLFxuICAweDAzZjIsXG4gIFwic2loaXJhZ2FuYVwiLFxuICAweDMwNTcsXG4gIFwic2lrYXRha2FuYVwiLFxuICAweDMwYjcsXG4gIFwic2lrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmN2MsXG4gIFwic2lsdXFoZWJyZXdcIixcbiAgMHgwNWJkLFxuICBcInNpbHVxbGVmdGhlYnJld1wiLFxuICAweDA1YmQsXG4gIFwic2ltaWxhclwiLFxuICAweDIyM2MsXG4gIFwic2luZG90aGVicmV3XCIsXG4gIDB4MDVjMixcbiAgXCJzaW9zYWNpcmNsZWtvcmVhblwiLFxuICAweDMyNzQsXG4gIFwic2lvc2FwYXJlbmtvcmVhblwiLFxuICAweDMyMTQsXG4gIFwic2lvc2NpZXVja29yZWFuXCIsXG4gIDB4MzE3ZSxcbiAgXCJzaW9zY2lyY2xla29yZWFuXCIsXG4gIDB4MzI2NixcbiAgXCJzaW9za2l5ZW9ra29yZWFuXCIsXG4gIDB4MzE3YSxcbiAgXCJzaW9za29yZWFuXCIsXG4gIDB4MzE0NSxcbiAgXCJzaW9zbmlldW5rb3JlYW5cIixcbiAgMHgzMTdiLFxuICBcInNpb3NwYXJlbmtvcmVhblwiLFxuICAweDMyMDYsXG4gIFwic2lvc3BpZXVwa29yZWFuXCIsXG4gIDB4MzE3ZCxcbiAgXCJzaW9zdGlrZXV0a29yZWFuXCIsXG4gIDB4MzE3YyxcbiAgXCJzaXhcIixcbiAgMHgwMDM2LFxuICBcInNpeGFyYWJpY1wiLFxuICAweDA2NjYsXG4gIFwic2l4YmVuZ2FsaVwiLFxuICAweDA5ZWMsXG4gIFwic2l4Y2lyY2xlXCIsXG4gIDB4MjQ2NSxcbiAgXCJzaXhjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmXCIsXG4gIDB4Mjc4ZixcbiAgXCJzaXhkZXZhXCIsXG4gIDB4MDk2YyxcbiAgXCJzaXhndWphcmF0aVwiLFxuICAweDBhZWMsXG4gIFwic2l4Z3VybXVraGlcIixcbiAgMHgwYTZjLFxuICBcInNpeGhhY2thcmFiaWNcIixcbiAgMHgwNjY2LFxuICBcInNpeGhhbmd6aG91XCIsXG4gIDB4MzAyNixcbiAgXCJzaXhpZGVvZ3JhcGhpY3BhcmVuXCIsXG4gIDB4MzIyNSxcbiAgXCJzaXhpbmZlcmlvclwiLFxuICAweDIwODYsXG4gIFwic2l4bW9ub3NwYWNlXCIsXG4gIDB4ZmYxNixcbiAgXCJzaXhvbGRzdHlsZVwiLFxuICAweGY3MzYsXG4gIFwic2l4cGFyZW5cIixcbiAgMHgyNDc5LFxuICBcInNpeHBlcmlvZFwiLFxuICAweDI0OGQsXG4gIFwic2l4cGVyc2lhblwiLFxuICAweDA2ZjYsXG4gIFwic2l4cm9tYW5cIixcbiAgMHgyMTc1LFxuICBcInNpeHN1cGVyaW9yXCIsXG4gIDB4MjA3NixcbiAgXCJzaXh0ZWVuY2lyY2xlXCIsXG4gIDB4MjQ2ZixcbiAgXCJzaXh0ZWVuY3VycmVuY3lkZW5vbWluYXRvcmJlbmdhbGlcIixcbiAgMHgwOWY5LFxuICBcInNpeHRlZW5wYXJlblwiLFxuICAweDI0ODMsXG4gIFwic2l4dGVlbnBlcmlvZFwiLFxuICAweDI0OTcsXG4gIFwic2l4dGhhaVwiLFxuICAweDBlNTYsXG4gIFwic2xhc2hcIixcbiAgMHgwMDJmLFxuICBcInNsYXNobW9ub3NwYWNlXCIsXG4gIDB4ZmYwZixcbiAgXCJzbG9uZ1wiLFxuICAweDAxN2YsXG4gIFwic2xvbmdkb3RhY2NlbnRcIixcbiAgMHgxZTliLFxuICBcInNtaWxlZmFjZVwiLFxuICAweDI2M2EsXG4gIFwic21vbm9zcGFjZVwiLFxuICAweGZmNTMsXG4gIFwic29mcGFzdXFoZWJyZXdcIixcbiAgMHgwNWMzLFxuICBcInNvZnRoeXBoZW5cIixcbiAgMHgwMGFkLFxuICBcInNvZnRzaWduY3lyaWxsaWNcIixcbiAgMHgwNDRjLFxuICBcInNvaGlyYWdhbmFcIixcbiAgMHgzMDVkLFxuICBcInNva2F0YWthbmFcIixcbiAgMHgzMGJkLFxuICBcInNva2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjdmLFxuICBcInNvbGlkdXNsb25nb3ZlcmxheWNtYlwiLFxuICAweDAzMzgsXG4gIFwic29saWR1c3Nob3J0b3ZlcmxheWNtYlwiLFxuICAweDAzMzcsXG4gIFwic29ydXNpdGhhaVwiLFxuICAweDBlMjksXG4gIFwic29zYWxhdGhhaVwiLFxuICAweDBlMjgsXG4gIFwic29zb3RoYWlcIixcbiAgMHgwZTBiLFxuICBcInNvc3VhdGhhaVwiLFxuICAweDBlMmEsXG4gIFwic3BhY2VcIixcbiAgMHgwMDIwLFxuICBcInNwYWNlaGFja2FyYWJpY1wiLFxuICAweDAwMjAsXG4gIFwic3BhZGVcIixcbiAgMHgyNjYwLFxuICBcInNwYWRlc3VpdGJsYWNrXCIsXG4gIDB4MjY2MCxcbiAgXCJzcGFkZXN1aXR3aGl0ZVwiLFxuICAweDI2NjQsXG4gIFwic3BhcmVuXCIsXG4gIDB4MjRhZSxcbiAgXCJzcXVhcmViZWxvd2NtYlwiLFxuICAweDAzM2IsXG4gIFwic3F1YXJlY2NcIixcbiAgMHgzM2M0LFxuICBcInNxdWFyZWNtXCIsXG4gIDB4MzM5ZCxcbiAgXCJzcXVhcmVkaWFnb25hbGNyb3NzaGF0Y2hmaWxsXCIsXG4gIDB4MjVhOSxcbiAgXCJzcXVhcmVob3Jpem9udGFsZmlsbFwiLFxuICAweDI1YTQsXG4gIFwic3F1YXJla2dcIixcbiAgMHgzMzhmLFxuICBcInNxdWFyZWttXCIsXG4gIDB4MzM5ZSxcbiAgXCJzcXVhcmVrbWNhcGl0YWxcIixcbiAgMHgzM2NlLFxuICBcInNxdWFyZWxuXCIsXG4gIDB4MzNkMSxcbiAgXCJzcXVhcmVsb2dcIixcbiAgMHgzM2QyLFxuICBcInNxdWFyZW1nXCIsXG4gIDB4MzM4ZSxcbiAgXCJzcXVhcmVtaWxcIixcbiAgMHgzM2Q1LFxuICBcInNxdWFyZW1tXCIsXG4gIDB4MzM5YyxcbiAgXCJzcXVhcmVtc3F1YXJlZFwiLFxuICAweDMzYTEsXG4gIFwic3F1YXJlb3J0aG9nb25hbGNyb3NzaGF0Y2hmaWxsXCIsXG4gIDB4MjVhNixcbiAgXCJzcXVhcmV1cHBlcmxlZnR0b2xvd2VycmlnaHRmaWxsXCIsXG4gIDB4MjVhNyxcbiAgXCJzcXVhcmV1cHBlcnJpZ2h0dG9sb3dlcmxlZnRmaWxsXCIsXG4gIDB4MjVhOCxcbiAgXCJzcXVhcmV2ZXJ0aWNhbGZpbGxcIixcbiAgMHgyNWE1LFxuICBcInNxdWFyZXdoaXRld2l0aHNtYWxsYmxhY2tcIixcbiAgMHgyNWEzLFxuICBcInNyc3F1YXJlXCIsXG4gIDB4MzNkYixcbiAgXCJzc2FiZW5nYWxpXCIsXG4gIDB4MDliNyxcbiAgXCJzc2FkZXZhXCIsXG4gIDB4MDkzNyxcbiAgXCJzc2FndWphcmF0aVwiLFxuICAweDBhYjcsXG4gIFwic3NhbmdjaWV1Y2tvcmVhblwiLFxuICAweDMxNDksXG4gIFwic3NhbmdoaWV1aGtvcmVhblwiLFxuICAweDMxODUsXG4gIFwic3NhbmdpZXVuZ2tvcmVhblwiLFxuICAweDMxODAsXG4gIFwic3NhbmdraXllb2trb3JlYW5cIixcbiAgMHgzMTMyLFxuICBcInNzYW5nbmlldW5rb3JlYW5cIixcbiAgMHgzMTY1LFxuICBcInNzYW5ncGlldXBrb3JlYW5cIixcbiAgMHgzMTQzLFxuICBcInNzYW5nc2lvc2tvcmVhblwiLFxuICAweDMxNDYsXG4gIFwic3Nhbmd0aWtldXRrb3JlYW5cIixcbiAgMHgzMTM4LFxuICBcInNzdXBlcmlvclwiLFxuICAweGY2ZjIsXG4gIFwic3RlcmxpbmdcIixcbiAgMHgwMGEzLFxuICBcInN0ZXJsaW5nbW9ub3NwYWNlXCIsXG4gIDB4ZmZlMSxcbiAgXCJzdHJva2Vsb25nb3ZlcmxheWNtYlwiLFxuICAweDAzMzYsXG4gIFwic3Ryb2tlc2hvcnRvdmVybGF5Y21iXCIsXG4gIDB4MDMzNSxcbiAgXCJzdWJzZXRcIixcbiAgMHgyMjgyLFxuICBcInN1YnNldG5vdGVxdWFsXCIsXG4gIDB4MjI4YSxcbiAgXCJzdWJzZXRvcmVxdWFsXCIsXG4gIDB4MjI4NixcbiAgXCJzdWNjZWVkc1wiLFxuICAweDIyN2IsXG4gIFwic3VjaHRoYXRcIixcbiAgMHgyMjBiLFxuICBcInN1aGlyYWdhbmFcIixcbiAgMHgzMDU5LFxuICBcInN1a2F0YWthbmFcIixcbiAgMHgzMGI5LFxuICBcInN1a2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjdkLFxuICBcInN1a3VuYXJhYmljXCIsXG4gIDB4MDY1MixcbiAgXCJzdW1tYXRpb25cIixcbiAgMHgyMjExLFxuICBcInN1blwiLFxuICAweDI2M2MsXG4gIFwic3VwZXJzZXRcIixcbiAgMHgyMjgzLFxuICBcInN1cGVyc2V0bm90ZXF1YWxcIixcbiAgMHgyMjhiLFxuICBcInN1cGVyc2V0b3JlcXVhbFwiLFxuICAweDIyODcsXG4gIFwic3ZzcXVhcmVcIixcbiAgMHgzM2RjLFxuICBcInN5b3V3YWVyYXNxdWFyZVwiLFxuICAweDMzN2MsXG4gIFwidFwiLFxuICAweDAwNzQsXG4gIFwidGFiZW5nYWxpXCIsXG4gIDB4MDlhNCxcbiAgXCJ0YWNrZG93blwiLFxuICAweDIyYTQsXG4gIFwidGFja2xlZnRcIixcbiAgMHgyMmEzLFxuICBcInRhZGV2YVwiLFxuICAweDA5MjQsXG4gIFwidGFndWphcmF0aVwiLFxuICAweDBhYTQsXG4gIFwidGFndXJtdWtoaVwiLFxuICAweDBhMjQsXG4gIFwidGFoYXJhYmljXCIsXG4gIDB4MDYzNyxcbiAgXCJ0YWhmaW5hbGFyYWJpY1wiLFxuICAweGZlYzIsXG4gIFwidGFoaW5pdGlhbGFyYWJpY1wiLFxuICAweGZlYzMsXG4gIFwidGFoaXJhZ2FuYVwiLFxuICAweDMwNWYsXG4gIFwidGFobWVkaWFsYXJhYmljXCIsXG4gIDB4ZmVjNCxcbiAgXCJ0YWlzeW91ZXJhc3F1YXJlXCIsXG4gIDB4MzM3ZCxcbiAgXCJ0YWthdGFrYW5hXCIsXG4gIDB4MzBiZixcbiAgXCJ0YWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY4MCxcbiAgXCJ0YXR3ZWVsYXJhYmljXCIsXG4gIDB4MDY0MCxcbiAgXCJ0YXVcIixcbiAgMHgwM2M0LFxuICBcInRhdlwiLFxuICAweDA1ZWEsXG4gIFwidGF2ZGFnZXNcIixcbiAgMHhmYjRhLFxuICBcInRhdmRhZ2VzaFwiLFxuICAweGZiNGEsXG4gIFwidGF2ZGFnZXNoaGVicmV3XCIsXG4gIDB4ZmI0YSxcbiAgXCJ0YXZoZWJyZXdcIixcbiAgMHgwNWVhLFxuICBcInRiYXJcIixcbiAgMHgwMTY3LFxuICBcInRib3BvbW9mb1wiLFxuICAweDMxMGEsXG4gIFwidGNhcm9uXCIsXG4gIDB4MDE2NSxcbiAgXCJ0Y2N1cmxcIixcbiAgMHgwMmE4LFxuICBcInRjZWRpbGxhXCIsXG4gIDB4MDE2MyxcbiAgXCJ0Y2hlaGFyYWJpY1wiLFxuICAweDA2ODYsXG4gIFwidGNoZWhmaW5hbGFyYWJpY1wiLFxuICAweGZiN2IsXG4gIFwidGNoZWhpbml0aWFsYXJhYmljXCIsXG4gIDB4ZmI3YyxcbiAgXCJ0Y2hlaG1lZGlhbGFyYWJpY1wiLFxuICAweGZiN2QsXG4gIFwidGNpcmNsZVwiLFxuICAweDI0ZTMsXG4gIFwidGNpcmN1bWZsZXhiZWxvd1wiLFxuICAweDFlNzEsXG4gIFwidGNvbW1hYWNjZW50XCIsXG4gIDB4MDE2MyxcbiAgXCJ0ZGllcmVzaXNcIixcbiAgMHgxZTk3LFxuICBcInRkb3RhY2NlbnRcIixcbiAgMHgxZTZiLFxuICBcInRkb3RiZWxvd1wiLFxuICAweDFlNmQsXG4gIFwidGVjeXJpbGxpY1wiLFxuICAweDA0NDIsXG4gIFwidGVkZXNjZW5kZXJjeXJpbGxpY1wiLFxuICAweDA0YWQsXG4gIFwidGVoYXJhYmljXCIsXG4gIDB4MDYyYSxcbiAgXCJ0ZWhmaW5hbGFyYWJpY1wiLFxuICAweGZlOTYsXG4gIFwidGVoaGFoaW5pdGlhbGFyYWJpY1wiLFxuICAweGZjYTIsXG4gIFwidGVoaGFoaXNvbGF0ZWRhcmFiaWNcIixcbiAgMHhmYzBjLFxuICBcInRlaGluaXRpYWxhcmFiaWNcIixcbiAgMHhmZTk3LFxuICBcInRlaGlyYWdhbmFcIixcbiAgMHgzMDY2LFxuICBcInRlaGplZW1pbml0aWFsYXJhYmljXCIsXG4gIDB4ZmNhMSxcbiAgXCJ0ZWhqZWVtaXNvbGF0ZWRhcmFiaWNcIixcbiAgMHhmYzBiLFxuICBcInRlaG1hcmJ1dGFhcmFiaWNcIixcbiAgMHgwNjI5LFxuICBcInRlaG1hcmJ1dGFmaW5hbGFyYWJpY1wiLFxuICAweGZlOTQsXG4gIFwidGVobWVkaWFsYXJhYmljXCIsXG4gIDB4ZmU5OCxcbiAgXCJ0ZWhtZWVtaW5pdGlhbGFyYWJpY1wiLFxuICAweGZjYTQsXG4gIFwidGVobWVlbWlzb2xhdGVkYXJhYmljXCIsXG4gIDB4ZmMwZSxcbiAgXCJ0ZWhub29uZmluYWxhcmFiaWNcIixcbiAgMHhmYzczLFxuICBcInRla2F0YWthbmFcIixcbiAgMHgzMGM2LFxuICBcInRla2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjgzLFxuICBcInRlbGVwaG9uZVwiLFxuICAweDIxMjEsXG4gIFwidGVsZXBob25lYmxhY2tcIixcbiAgMHgyNjBlLFxuICBcInRlbGlzaGFnZWRvbGFoZWJyZXdcIixcbiAgMHgwNWEwLFxuICBcInRlbGlzaGFxZXRhbmFoZWJyZXdcIixcbiAgMHgwNWE5LFxuICBcInRlbmNpcmNsZVwiLFxuICAweDI0NjksXG4gIFwidGVuaWRlb2dyYXBoaWNwYXJlblwiLFxuICAweDMyMjksXG4gIFwidGVucGFyZW5cIixcbiAgMHgyNDdkLFxuICBcInRlbnBlcmlvZFwiLFxuICAweDI0OTEsXG4gIFwidGVucm9tYW5cIixcbiAgMHgyMTc5LFxuICBcInRlc2hcIixcbiAgMHgwMmE3LFxuICBcInRldFwiLFxuICAweDA1ZDgsXG4gIFwidGV0ZGFnZXNoXCIsXG4gIDB4ZmIzOCxcbiAgXCJ0ZXRkYWdlc2hoZWJyZXdcIixcbiAgMHhmYjM4LFxuICBcInRldGhlYnJld1wiLFxuICAweDA1ZDgsXG4gIFwidGV0c2VjeXJpbGxpY1wiLFxuICAweDA0YjUsXG4gIFwidGV2aXJoZWJyZXdcIixcbiAgMHgwNTliLFxuICBcInRldmlybGVmdGhlYnJld1wiLFxuICAweDA1OWIsXG4gIFwidGhhYmVuZ2FsaVwiLFxuICAweDA5YTUsXG4gIFwidGhhZGV2YVwiLFxuICAweDA5MjUsXG4gIFwidGhhZ3VqYXJhdGlcIixcbiAgMHgwYWE1LFxuICBcInRoYWd1cm11a2hpXCIsXG4gIDB4MGEyNSxcbiAgXCJ0aGFsYXJhYmljXCIsXG4gIDB4MDYzMCxcbiAgXCJ0aGFsZmluYWxhcmFiaWNcIixcbiAgMHhmZWFjLFxuICBcInRoYW50aGFraGF0bG93bGVmdHRoYWlcIixcbiAgMHhmODk4LFxuICBcInRoYW50aGFraGF0bG93cmlnaHR0aGFpXCIsXG4gIDB4Zjg5NyxcbiAgXCJ0aGFudGhha2hhdHRoYWlcIixcbiAgMHgwZTRjLFxuICBcInRoYW50aGFraGF0dXBwZXJsZWZ0dGhhaVwiLFxuICAweGY4OTYsXG4gIFwidGhlaGFyYWJpY1wiLFxuICAweDA2MmIsXG4gIFwidGhlaGZpbmFsYXJhYmljXCIsXG4gIDB4ZmU5YSxcbiAgXCJ0aGVoaW5pdGlhbGFyYWJpY1wiLFxuICAweGZlOWIsXG4gIFwidGhlaG1lZGlhbGFyYWJpY1wiLFxuICAweGZlOWMsXG4gIFwidGhlcmVleGlzdHNcIixcbiAgMHgyMjAzLFxuICBcInRoZXJlZm9yZVwiLFxuICAweDIyMzQsXG4gIFwidGhldGFcIixcbiAgMHgwM2I4LFxuICBcInRoZXRhMVwiLFxuICAweDAzZDEsXG4gIFwidGhldGFzeW1ib2xncmVla1wiLFxuICAweDAzZDEsXG4gIFwidGhpZXV0aGFjaXJjbGVrb3JlYW5cIixcbiAgMHgzMjc5LFxuICBcInRoaWV1dGhhcGFyZW5rb3JlYW5cIixcbiAgMHgzMjE5LFxuICBcInRoaWV1dGhjaXJjbGVrb3JlYW5cIixcbiAgMHgzMjZiLFxuICBcInRoaWV1dGhrb3JlYW5cIixcbiAgMHgzMTRjLFxuICBcInRoaWV1dGhwYXJlbmtvcmVhblwiLFxuICAweDMyMGIsXG4gIFwidGhpcnRlZW5jaXJjbGVcIixcbiAgMHgyNDZjLFxuICBcInRoaXJ0ZWVucGFyZW5cIixcbiAgMHgyNDgwLFxuICBcInRoaXJ0ZWVucGVyaW9kXCIsXG4gIDB4MjQ5NCxcbiAgXCJ0aG9uYW5nbW9udGhvdGhhaVwiLFxuICAweDBlMTEsXG4gIFwidGhvb2tcIixcbiAgMHgwMWFkLFxuICBcInRob3BodXRoYW90aGFpXCIsXG4gIDB4MGUxMixcbiAgXCJ0aG9yblwiLFxuICAweDAwZmUsXG4gIFwidGhvdGhhaGFudGhhaVwiLFxuICAweDBlMTcsXG4gIFwidGhvdGhhbnRoYWlcIixcbiAgMHgwZTEwLFxuICBcInRob3Rob25ndGhhaVwiLFxuICAweDBlMTgsXG4gIFwidGhvdGh1bmd0aGFpXCIsXG4gIDB4MGUxNixcbiAgXCJ0aG91c2FuZGN5cmlsbGljXCIsXG4gIDB4MDQ4MixcbiAgXCJ0aG91c2FuZHNzZXBhcmF0b3JhcmFiaWNcIixcbiAgMHgwNjZjLFxuICBcInRob3VzYW5kc3NlcGFyYXRvcnBlcnNpYW5cIixcbiAgMHgwNjZjLFxuICBcInRocmVlXCIsXG4gIDB4MDAzMyxcbiAgXCJ0aHJlZWFyYWJpY1wiLFxuICAweDA2NjMsXG4gIFwidGhyZWViZW5nYWxpXCIsXG4gIDB4MDllOSxcbiAgXCJ0aHJlZWNpcmNsZVwiLFxuICAweDI0NjIsXG4gIFwidGhyZWVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmXCIsXG4gIDB4Mjc4YyxcbiAgXCJ0aHJlZWRldmFcIixcbiAgMHgwOTY5LFxuICBcInRocmVlZWlnaHRoc1wiLFxuICAweDIxNWMsXG4gIFwidGhyZWVndWphcmF0aVwiLFxuICAweDBhZTksXG4gIFwidGhyZWVndXJtdWtoaVwiLFxuICAweDBhNjksXG4gIFwidGhyZWVoYWNrYXJhYmljXCIsXG4gIDB4MDY2MyxcbiAgXCJ0aHJlZWhhbmd6aG91XCIsXG4gIDB4MzAyMyxcbiAgXCJ0aHJlZWlkZW9ncmFwaGljcGFyZW5cIixcbiAgMHgzMjIyLFxuICBcInRocmVlaW5mZXJpb3JcIixcbiAgMHgyMDgzLFxuICBcInRocmVlbW9ub3NwYWNlXCIsXG4gIDB4ZmYxMyxcbiAgXCJ0aHJlZW51bWVyYXRvcmJlbmdhbGlcIixcbiAgMHgwOWY2LFxuICBcInRocmVlb2xkc3R5bGVcIixcbiAgMHhmNzMzLFxuICBcInRocmVlcGFyZW5cIixcbiAgMHgyNDc2LFxuICBcInRocmVlcGVyaW9kXCIsXG4gIDB4MjQ4YSxcbiAgXCJ0aHJlZXBlcnNpYW5cIixcbiAgMHgwNmYzLFxuICBcInRocmVlcXVhcnRlcnNcIixcbiAgMHgwMGJlLFxuICBcInRocmVlcXVhcnRlcnNlbWRhc2hcIixcbiAgMHhmNmRlLFxuICBcInRocmVlcm9tYW5cIixcbiAgMHgyMTcyLFxuICBcInRocmVlc3VwZXJpb3JcIixcbiAgMHgwMGIzLFxuICBcInRocmVldGhhaVwiLFxuICAweDBlNTMsXG4gIFwidGh6c3F1YXJlXCIsXG4gIDB4MzM5NCxcbiAgXCJ0aWhpcmFnYW5hXCIsXG4gIDB4MzA2MSxcbiAgXCJ0aWthdGFrYW5hXCIsXG4gIDB4MzBjMSxcbiAgXCJ0aWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY4MSxcbiAgXCJ0aWtldXRhY2lyY2xla29yZWFuXCIsXG4gIDB4MzI3MCxcbiAgXCJ0aWtldXRhcGFyZW5rb3JlYW5cIixcbiAgMHgzMjEwLFxuICBcInRpa2V1dGNpcmNsZWtvcmVhblwiLFxuICAweDMyNjIsXG4gIFwidGlrZXV0a29yZWFuXCIsXG4gIDB4MzEzNyxcbiAgXCJ0aWtldXRwYXJlbmtvcmVhblwiLFxuICAweDMyMDIsXG4gIFwidGlsZGVcIixcbiAgMHgwMmRjLFxuICBcInRpbGRlYmVsb3djbWJcIixcbiAgMHgwMzMwLFxuICBcInRpbGRlY21iXCIsXG4gIDB4MDMwMyxcbiAgXCJ0aWxkZWNvbWJcIixcbiAgMHgwMzAzLFxuICBcInRpbGRlZG91YmxlY21iXCIsXG4gIDB4MDM2MCxcbiAgXCJ0aWxkZW9wZXJhdG9yXCIsXG4gIDB4MjIzYyxcbiAgXCJ0aWxkZW92ZXJsYXljbWJcIixcbiAgMHgwMzM0LFxuICBcInRpbGRldmVydGljYWxjbWJcIixcbiAgMHgwMzNlLFxuICBcInRpbWVzY2lyY2xlXCIsXG4gIDB4MjI5NyxcbiAgXCJ0aXBlaGFoZWJyZXdcIixcbiAgMHgwNTk2LFxuICBcInRpcGVoYWxlZnRoZWJyZXdcIixcbiAgMHgwNTk2LFxuICBcInRpcHBpZ3VybXVraGlcIixcbiAgMHgwYTcwLFxuICBcInRpdGxvY3lyaWxsaWNjbWJcIixcbiAgMHgwNDgzLFxuICBcInRpd25hcm1lbmlhblwiLFxuICAweDA1N2YsXG4gIFwidGxpbmViZWxvd1wiLFxuICAweDFlNmYsXG4gIFwidG1vbm9zcGFjZVwiLFxuICAweGZmNTQsXG4gIFwidG9hcm1lbmlhblwiLFxuICAweDA1NjksXG4gIFwidG9oaXJhZ2FuYVwiLFxuICAweDMwNjgsXG4gIFwidG9rYXRha2FuYVwiLFxuICAweDMwYzgsXG4gIFwidG9rYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmODQsXG4gIFwidG9uZWJhcmV4dHJhaGlnaG1vZFwiLFxuICAweDAyZTUsXG4gIFwidG9uZWJhcmV4dHJhbG93bW9kXCIsXG4gIDB4MDJlOSxcbiAgXCJ0b25lYmFyaGlnaG1vZFwiLFxuICAweDAyZTYsXG4gIFwidG9uZWJhcmxvd21vZFwiLFxuICAweDAyZTgsXG4gIFwidG9uZWJhcm1pZG1vZFwiLFxuICAweDAyZTcsXG4gIFwidG9uZWZpdmVcIixcbiAgMHgwMWJkLFxuICBcInRvbmVzaXhcIixcbiAgMHgwMTg1LFxuICBcInRvbmV0d29cIixcbiAgMHgwMWE4LFxuICBcInRvbm9zXCIsXG4gIDB4MDM4NCxcbiAgXCJ0b25zcXVhcmVcIixcbiAgMHgzMzI3LFxuICBcInRvcGF0YWt0aGFpXCIsXG4gIDB4MGUwZixcbiAgXCJ0b3J0b2lzZXNoZWxsYnJhY2tldGxlZnRcIixcbiAgMHgzMDE0LFxuICBcInRvcnRvaXNlc2hlbGxicmFja2V0bGVmdHNtYWxsXCIsXG4gIDB4ZmU1ZCxcbiAgXCJ0b3J0b2lzZXNoZWxsYnJhY2tldGxlZnR2ZXJ0aWNhbFwiLFxuICAweGZlMzksXG4gIFwidG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodFwiLFxuICAweDMwMTUsXG4gIFwidG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHNtYWxsXCIsXG4gIDB4ZmU1ZSxcbiAgXCJ0b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0dmVydGljYWxcIixcbiAgMHhmZTNhLFxuICBcInRvdGFvdGhhaVwiLFxuICAweDBlMTUsXG4gIFwidHBhbGF0YWxob29rXCIsXG4gIDB4MDFhYixcbiAgXCJ0cGFyZW5cIixcbiAgMHgyNGFmLFxuICBcInRyYWRlbWFya1wiLFxuICAweDIxMjIsXG4gIFwidHJhZGVtYXJrc2Fuc1wiLFxuICAweGY4ZWEsXG4gIFwidHJhZGVtYXJrc2VyaWZcIixcbiAgMHhmNmRiLFxuICBcInRyZXRyb2ZsZXhob29rXCIsXG4gIDB4MDI4OCxcbiAgXCJ0cmlhZ2RuXCIsXG4gIDB4MjViYyxcbiAgXCJ0cmlhZ2xmXCIsXG4gIDB4MjVjNCxcbiAgXCJ0cmlhZ3J0XCIsXG4gIDB4MjViYSxcbiAgXCJ0cmlhZ3VwXCIsXG4gIDB4MjViMixcbiAgXCJ0c1wiLFxuICAweDAyYTYsXG4gIFwidHNhZGlcIixcbiAgMHgwNWU2LFxuICBcInRzYWRpZGFnZXNoXCIsXG4gIDB4ZmI0NixcbiAgXCJ0c2FkaWRhZ2VzaGhlYnJld1wiLFxuICAweGZiNDYsXG4gIFwidHNhZGloZWJyZXdcIixcbiAgMHgwNWU2LFxuICBcInRzZWN5cmlsbGljXCIsXG4gIDB4MDQ0NixcbiAgXCJ0c2VyZVwiLFxuICAweDA1YjUsXG4gIFwidHNlcmUxMlwiLFxuICAweDA1YjUsXG4gIFwidHNlcmUxZVwiLFxuICAweDA1YjUsXG4gIFwidHNlcmUyYlwiLFxuICAweDA1YjUsXG4gIFwidHNlcmVoZWJyZXdcIixcbiAgMHgwNWI1LFxuICBcInRzZXJlbmFycm93aGVicmV3XCIsXG4gIDB4MDViNSxcbiAgXCJ0c2VyZXF1YXJ0ZXJoZWJyZXdcIixcbiAgMHgwNWI1LFxuICBcInRzZXJld2lkZWhlYnJld1wiLFxuICAweDA1YjUsXG4gIFwidHNoZWN5cmlsbGljXCIsXG4gIDB4MDQ1YixcbiAgXCJ0c3VwZXJpb3JcIixcbiAgMHhmNmYzLFxuICBcInR0YWJlbmdhbGlcIixcbiAgMHgwOTlmLFxuICBcInR0YWRldmFcIixcbiAgMHgwOTFmLFxuICBcInR0YWd1amFyYXRpXCIsXG4gIDB4MGE5ZixcbiAgXCJ0dGFndXJtdWtoaVwiLFxuICAweDBhMWYsXG4gIFwidHRlaGFyYWJpY1wiLFxuICAweDA2NzksXG4gIFwidHRlaGZpbmFsYXJhYmljXCIsXG4gIDB4ZmI2NyxcbiAgXCJ0dGVoaW5pdGlhbGFyYWJpY1wiLFxuICAweGZiNjgsXG4gIFwidHRlaG1lZGlhbGFyYWJpY1wiLFxuICAweGZiNjksXG4gIFwidHRoYWJlbmdhbGlcIixcbiAgMHgwOWEwLFxuICBcInR0aGFkZXZhXCIsXG4gIDB4MDkyMCxcbiAgXCJ0dGhhZ3VqYXJhdGlcIixcbiAgMHgwYWEwLFxuICBcInR0aGFndXJtdWtoaVwiLFxuICAweDBhMjAsXG4gIFwidHR1cm5lZFwiLFxuICAweDAyODcsXG4gIFwidHVoaXJhZ2FuYVwiLFxuICAweDMwNjQsXG4gIFwidHVrYXRha2FuYVwiLFxuICAweDMwYzQsXG4gIFwidHVrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmODIsXG4gIFwidHVzbWFsbGhpcmFnYW5hXCIsXG4gIDB4MzA2MyxcbiAgXCJ0dXNtYWxsa2F0YWthbmFcIixcbiAgMHgzMGMzLFxuICBcInR1c21hbGxrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmNmYsXG4gIFwidHdlbHZlY2lyY2xlXCIsXG4gIDB4MjQ2YixcbiAgXCJ0d2VsdmVwYXJlblwiLFxuICAweDI0N2YsXG4gIFwidHdlbHZlcGVyaW9kXCIsXG4gIDB4MjQ5MyxcbiAgXCJ0d2VsdmVyb21hblwiLFxuICAweDIxN2IsXG4gIFwidHdlbnR5Y2lyY2xlXCIsXG4gIDB4MjQ3MyxcbiAgXCJ0d2VudHloYW5nemhvdVwiLFxuICAweDUzNDQsXG4gIFwidHdlbnR5cGFyZW5cIixcbiAgMHgyNDg3LFxuICBcInR3ZW50eXBlcmlvZFwiLFxuICAweDI0OWIsXG4gIFwidHdvXCIsXG4gIDB4MDAzMixcbiAgXCJ0d29hcmFiaWNcIixcbiAgMHgwNjYyLFxuICBcInR3b2JlbmdhbGlcIixcbiAgMHgwOWU4LFxuICBcInR3b2NpcmNsZVwiLFxuICAweDI0NjEsXG4gIFwidHdvY2lyY2xlaW52ZXJzZXNhbnNzZXJpZlwiLFxuICAweDI3OGIsXG4gIFwidHdvZGV2YVwiLFxuICAweDA5NjgsXG4gIFwidHdvZG90ZW5sZWFkZXJcIixcbiAgMHgyMDI1LFxuICBcInR3b2RvdGxlYWRlclwiLFxuICAweDIwMjUsXG4gIFwidHdvZG90bGVhZGVydmVydGljYWxcIixcbiAgMHhmZTMwLFxuICBcInR3b2d1amFyYXRpXCIsXG4gIDB4MGFlOCxcbiAgXCJ0d29ndXJtdWtoaVwiLFxuICAweDBhNjgsXG4gIFwidHdvaGFja2FyYWJpY1wiLFxuICAweDA2NjIsXG4gIFwidHdvaGFuZ3pob3VcIixcbiAgMHgzMDIyLFxuICBcInR3b2lkZW9ncmFwaGljcGFyZW5cIixcbiAgMHgzMjIxLFxuICBcInR3b2luZmVyaW9yXCIsXG4gIDB4MjA4MixcbiAgXCJ0d29tb25vc3BhY2VcIixcbiAgMHhmZjEyLFxuICBcInR3b251bWVyYXRvcmJlbmdhbGlcIixcbiAgMHgwOWY1LFxuICBcInR3b29sZHN0eWxlXCIsXG4gIDB4ZjczMixcbiAgXCJ0d29wYXJlblwiLFxuICAweDI0NzUsXG4gIFwidHdvcGVyaW9kXCIsXG4gIDB4MjQ4OSxcbiAgXCJ0d29wZXJzaWFuXCIsXG4gIDB4MDZmMixcbiAgXCJ0d29yb21hblwiLFxuICAweDIxNzEsXG4gIFwidHdvc3Ryb2tlXCIsXG4gIDB4MDFiYixcbiAgXCJ0d29zdXBlcmlvclwiLFxuICAweDAwYjIsXG4gIFwidHdvdGhhaVwiLFxuICAweDBlNTIsXG4gIFwidHdvdGhpcmRzXCIsXG4gIDB4MjE1NCxcbiAgXCJ1XCIsXG4gIDB4MDA3NSxcbiAgXCJ1YWN1dGVcIixcbiAgMHgwMGZhLFxuICBcInViYXJcIixcbiAgMHgwMjg5LFxuICBcInViZW5nYWxpXCIsXG4gIDB4MDk4OSxcbiAgXCJ1Ym9wb21vZm9cIixcbiAgMHgzMTI4LFxuICBcInVicmV2ZVwiLFxuICAweDAxNmQsXG4gIFwidWNhcm9uXCIsXG4gIDB4MDFkNCxcbiAgXCJ1Y2lyY2xlXCIsXG4gIDB4MjRlNCxcbiAgXCJ1Y2lyY3VtZmxleFwiLFxuICAweDAwZmIsXG4gIFwidWNpcmN1bWZsZXhiZWxvd1wiLFxuICAweDFlNzcsXG4gIFwidWN5cmlsbGljXCIsXG4gIDB4MDQ0MyxcbiAgXCJ1ZGF0dGFkZXZhXCIsXG4gIDB4MDk1MSxcbiAgXCJ1ZGJsYWN1dGVcIixcbiAgMHgwMTcxLFxuICBcInVkYmxncmF2ZVwiLFxuICAweDAyMTUsXG4gIFwidWRldmFcIixcbiAgMHgwOTA5LFxuICBcInVkaWVyZXNpc1wiLFxuICAweDAwZmMsXG4gIFwidWRpZXJlc2lzYWN1dGVcIixcbiAgMHgwMWQ4LFxuICBcInVkaWVyZXNpc2JlbG93XCIsXG4gIDB4MWU3MyxcbiAgXCJ1ZGllcmVzaXNjYXJvblwiLFxuICAweDAxZGEsXG4gIFwidWRpZXJlc2lzY3lyaWxsaWNcIixcbiAgMHgwNGYxLFxuICBcInVkaWVyZXNpc2dyYXZlXCIsXG4gIDB4MDFkYyxcbiAgXCJ1ZGllcmVzaXNtYWNyb25cIixcbiAgMHgwMWQ2LFxuICBcInVkb3RiZWxvd1wiLFxuICAweDFlZTUsXG4gIFwidWdyYXZlXCIsXG4gIDB4MDBmOSxcbiAgXCJ1Z3VqYXJhdGlcIixcbiAgMHgwYTg5LFxuICBcInVndXJtdWtoaVwiLFxuICAweDBhMDksXG4gIFwidWhpcmFnYW5hXCIsXG4gIDB4MzA0NixcbiAgXCJ1aG9va2Fib3ZlXCIsXG4gIDB4MWVlNyxcbiAgXCJ1aG9yblwiLFxuICAweDAxYjAsXG4gIFwidWhvcm5hY3V0ZVwiLFxuICAweDFlZTksXG4gIFwidWhvcm5kb3RiZWxvd1wiLFxuICAweDFlZjEsXG4gIFwidWhvcm5ncmF2ZVwiLFxuICAweDFlZWIsXG4gIFwidWhvcm5ob29rYWJvdmVcIixcbiAgMHgxZWVkLFxuICBcInVob3JudGlsZGVcIixcbiAgMHgxZWVmLFxuICBcInVodW5nYXJ1bWxhdXRcIixcbiAgMHgwMTcxLFxuICBcInVodW5nYXJ1bWxhdXRjeXJpbGxpY1wiLFxuICAweDA0ZjMsXG4gIFwidWludmVydGVkYnJldmVcIixcbiAgMHgwMjE3LFxuICBcInVrYXRha2FuYVwiLFxuICAweDMwYTYsXG4gIFwidWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY3MyxcbiAgXCJ1a2N5cmlsbGljXCIsXG4gIDB4MDQ3OSxcbiAgXCJ1a29yZWFuXCIsXG4gIDB4MzE1YyxcbiAgXCJ1bWFjcm9uXCIsXG4gIDB4MDE2YixcbiAgXCJ1bWFjcm9uY3lyaWxsaWNcIixcbiAgMHgwNGVmLFxuICBcInVtYWNyb25kaWVyZXNpc1wiLFxuICAweDFlN2IsXG4gIFwidW1hdHJhZ3VybXVraGlcIixcbiAgMHgwYTQxLFxuICBcInVtb25vc3BhY2VcIixcbiAgMHhmZjU1LFxuICBcInVuZGVyc2NvcmVcIixcbiAgMHgwMDVmLFxuICBcInVuZGVyc2NvcmVkYmxcIixcbiAgMHgyMDE3LFxuICBcInVuZGVyc2NvcmVtb25vc3BhY2VcIixcbiAgMHhmZjNmLFxuICBcInVuZGVyc2NvcmV2ZXJ0aWNhbFwiLFxuICAweGZlMzMsXG4gIFwidW5kZXJzY29yZXdhdnlcIixcbiAgMHhmZTRmLFxuICBcInVuaW9uXCIsXG4gIDB4MjIyYSxcbiAgXCJ1bml2ZXJzYWxcIixcbiAgMHgyMjAwLFxuICBcInVvZ29uZWtcIixcbiAgMHgwMTczLFxuICBcInVwYXJlblwiLFxuICAweDI0YjAsXG4gIFwidXBibG9ja1wiLFxuICAweDI1ODAsXG4gIFwidXBwZXJkb3RoZWJyZXdcIixcbiAgMHgwNWM0LFxuICBcInVwc2lsb25cIixcbiAgMHgwM2M1LFxuICBcInVwc2lsb25kaWVyZXNpc1wiLFxuICAweDAzY2IsXG4gIFwidXBzaWxvbmRpZXJlc2lzdG9ub3NcIixcbiAgMHgwM2IwLFxuICBcInVwc2lsb25sYXRpblwiLFxuICAweDAyOGEsXG4gIFwidXBzaWxvbnRvbm9zXCIsXG4gIDB4MDNjZCxcbiAgXCJ1cHRhY2tiZWxvd2NtYlwiLFxuICAweDAzMWQsXG4gIFwidXB0YWNrbW9kXCIsXG4gIDB4MDJkNCxcbiAgXCJ1cmFndXJtdWtoaVwiLFxuICAweDBhNzMsXG4gIFwidXJpbmdcIixcbiAgMHgwMTZmLFxuICBcInVzaG9ydGN5cmlsbGljXCIsXG4gIDB4MDQ1ZSxcbiAgXCJ1c21hbGxoaXJhZ2FuYVwiLFxuICAweDMwNDUsXG4gIFwidXNtYWxsa2F0YWthbmFcIixcbiAgMHgzMGE1LFxuICBcInVzbWFsbGthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY2OSxcbiAgXCJ1c3RyYWlnaHRjeXJpbGxpY1wiLFxuICAweDA0YWYsXG4gIFwidXN0cmFpZ2h0c3Ryb2tlY3lyaWxsaWNcIixcbiAgMHgwNGIxLFxuICBcInV0aWxkZVwiLFxuICAweDAxNjksXG4gIFwidXRpbGRlYWN1dGVcIixcbiAgMHgxZTc5LFxuICBcInV0aWxkZWJlbG93XCIsXG4gIDB4MWU3NSxcbiAgXCJ1dWJlbmdhbGlcIixcbiAgMHgwOThhLFxuICBcInV1ZGV2YVwiLFxuICAweDA5MGEsXG4gIFwidXVndWphcmF0aVwiLFxuICAweDBhOGEsXG4gIFwidXVndXJtdWtoaVwiLFxuICAweDBhMGEsXG4gIFwidXVtYXRyYWd1cm11a2hpXCIsXG4gIDB4MGE0MixcbiAgXCJ1dXZvd2Vsc2lnbmJlbmdhbGlcIixcbiAgMHgwOWMyLFxuICBcInV1dm93ZWxzaWduZGV2YVwiLFxuICAweDA5NDIsXG4gIFwidXV2b3dlbHNpZ25ndWphcmF0aVwiLFxuICAweDBhYzIsXG4gIFwidXZvd2Vsc2lnbmJlbmdhbGlcIixcbiAgMHgwOWMxLFxuICBcInV2b3dlbHNpZ25kZXZhXCIsXG4gIDB4MDk0MSxcbiAgXCJ1dm93ZWxzaWduZ3VqYXJhdGlcIixcbiAgMHgwYWMxLFxuICBcInZcIixcbiAgMHgwMDc2LFxuICBcInZhZGV2YVwiLFxuICAweDA5MzUsXG4gIFwidmFndWphcmF0aVwiLFxuICAweDBhYjUsXG4gIFwidmFndXJtdWtoaVwiLFxuICAweDBhMzUsXG4gIFwidmFrYXRha2FuYVwiLFxuICAweDMwZjcsXG4gIFwidmF2XCIsXG4gIDB4MDVkNSxcbiAgXCJ2YXZkYWdlc2hcIixcbiAgMHhmYjM1LFxuICBcInZhdmRhZ2VzaDY1XCIsXG4gIDB4ZmIzNSxcbiAgXCJ2YXZkYWdlc2hoZWJyZXdcIixcbiAgMHhmYjM1LFxuICBcInZhdmhlYnJld1wiLFxuICAweDA1ZDUsXG4gIFwidmF2aG9sYW1cIixcbiAgMHhmYjRiLFxuICBcInZhdmhvbGFtaGVicmV3XCIsXG4gIDB4ZmI0YixcbiAgXCJ2YXZ2YXZoZWJyZXdcIixcbiAgMHgwNWYwLFxuICBcInZhdnlvZGhlYnJld1wiLFxuICAweDA1ZjEsXG4gIFwidmNpcmNsZVwiLFxuICAweDI0ZTUsXG4gIFwidmRvdGJlbG93XCIsXG4gIDB4MWU3ZixcbiAgXCJ2ZWN5cmlsbGljXCIsXG4gIDB4MDQzMixcbiAgXCJ2ZWhhcmFiaWNcIixcbiAgMHgwNmE0LFxuICBcInZlaGZpbmFsYXJhYmljXCIsXG4gIDB4ZmI2YixcbiAgXCJ2ZWhpbml0aWFsYXJhYmljXCIsXG4gIDB4ZmI2YyxcbiAgXCJ2ZWhtZWRpYWxhcmFiaWNcIixcbiAgMHhmYjZkLFxuICBcInZla2F0YWthbmFcIixcbiAgMHgzMGY5LFxuICBcInZlbnVzXCIsXG4gIDB4MjY0MCxcbiAgXCJ2ZXJ0aWNhbGJhclwiLFxuICAweDAwN2MsXG4gIFwidmVydGljYWxsaW5lYWJvdmVjbWJcIixcbiAgMHgwMzBkLFxuICBcInZlcnRpY2FsbGluZWJlbG93Y21iXCIsXG4gIDB4MDMyOSxcbiAgXCJ2ZXJ0aWNhbGxpbmVsb3dtb2RcIixcbiAgMHgwMmNjLFxuICBcInZlcnRpY2FsbGluZW1vZFwiLFxuICAweDAyYzgsXG4gIFwidmV3YXJtZW5pYW5cIixcbiAgMHgwNTdlLFxuICBcInZob29rXCIsXG4gIDB4MDI4YixcbiAgXCJ2aWthdGFrYW5hXCIsXG4gIDB4MzBmOCxcbiAgXCJ2aXJhbWFiZW5nYWxpXCIsXG4gIDB4MDljZCxcbiAgXCJ2aXJhbWFkZXZhXCIsXG4gIDB4MDk0ZCxcbiAgXCJ2aXJhbWFndWphcmF0aVwiLFxuICAweDBhY2QsXG4gIFwidmlzYXJnYWJlbmdhbGlcIixcbiAgMHgwOTgzLFxuICBcInZpc2FyZ2FkZXZhXCIsXG4gIDB4MDkwMyxcbiAgXCJ2aXNhcmdhZ3VqYXJhdGlcIixcbiAgMHgwYTgzLFxuICBcInZtb25vc3BhY2VcIixcbiAgMHhmZjU2LFxuICBcInZvYXJtZW5pYW5cIixcbiAgMHgwNTc4LFxuICBcInZvaWNlZGl0ZXJhdGlvbmhpcmFnYW5hXCIsXG4gIDB4MzA5ZSxcbiAgXCJ2b2ljZWRpdGVyYXRpb25rYXRha2FuYVwiLFxuICAweDMwZmUsXG4gIFwidm9pY2VkbWFya2thbmFcIixcbiAgMHgzMDliLFxuICBcInZvaWNlZG1hcmtrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY5ZSxcbiAgXCJ2b2thdGFrYW5hXCIsXG4gIDB4MzBmYSxcbiAgXCJ2cGFyZW5cIixcbiAgMHgyNGIxLFxuICBcInZ0aWxkZVwiLFxuICAweDFlN2QsXG4gIFwidnR1cm5lZFwiLFxuICAweDAyOGMsXG4gIFwidnVoaXJhZ2FuYVwiLFxuICAweDMwOTQsXG4gIFwidnVrYXRha2FuYVwiLFxuICAweDMwZjQsXG4gIFwid1wiLFxuICAweDAwNzcsXG4gIFwid2FjdXRlXCIsXG4gIDB4MWU4MyxcbiAgXCJ3YWVrb3JlYW5cIixcbiAgMHgzMTU5LFxuICBcIndhaGlyYWdhbmFcIixcbiAgMHgzMDhmLFxuICBcIndha2F0YWthbmFcIixcbiAgMHgzMGVmLFxuICBcIndha2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjljLFxuICBcIndha29yZWFuXCIsXG4gIDB4MzE1OCxcbiAgXCJ3YXNtYWxsaGlyYWdhbmFcIixcbiAgMHgzMDhlLFxuICBcIndhc21hbGxrYXRha2FuYVwiLFxuICAweDMwZWUsXG4gIFwid2F0dG9zcXVhcmVcIixcbiAgMHgzMzU3LFxuICBcIndhdmVkYXNoXCIsXG4gIDB4MzAxYyxcbiAgXCJ3YXZ5dW5kZXJzY29yZXZlcnRpY2FsXCIsXG4gIDB4ZmUzNCxcbiAgXCJ3YXdhcmFiaWNcIixcbiAgMHgwNjQ4LFxuICBcIndhd2ZpbmFsYXJhYmljXCIsXG4gIDB4ZmVlZSxcbiAgXCJ3YXdoYW16YWFib3ZlYXJhYmljXCIsXG4gIDB4MDYyNCxcbiAgXCJ3YXdoYW16YWFib3ZlZmluYWxhcmFiaWNcIixcbiAgMHhmZTg2LFxuICBcIndic3F1YXJlXCIsXG4gIDB4MzNkZCxcbiAgXCJ3Y2lyY2xlXCIsXG4gIDB4MjRlNixcbiAgXCJ3Y2lyY3VtZmxleFwiLFxuICAweDAxNzUsXG4gIFwid2RpZXJlc2lzXCIsXG4gIDB4MWU4NSxcbiAgXCJ3ZG90YWNjZW50XCIsXG4gIDB4MWU4NyxcbiAgXCJ3ZG90YmVsb3dcIixcbiAgMHgxZTg5LFxuICBcIndlaGlyYWdhbmFcIixcbiAgMHgzMDkxLFxuICBcIndlaWVyc3RyYXNzXCIsXG4gIDB4MjExOCxcbiAgXCJ3ZWthdGFrYW5hXCIsXG4gIDB4MzBmMSxcbiAgXCJ3ZWtvcmVhblwiLFxuICAweDMxNWUsXG4gIFwid2Vva29yZWFuXCIsXG4gIDB4MzE1ZCxcbiAgXCJ3Z3JhdmVcIixcbiAgMHgxZTgxLFxuICBcIndoaXRlYnVsbGV0XCIsXG4gIDB4MjVlNixcbiAgXCJ3aGl0ZWNpcmNsZVwiLFxuICAweDI1Y2IsXG4gIFwid2hpdGVjaXJjbGVpbnZlcnNlXCIsXG4gIDB4MjVkOSxcbiAgXCJ3aGl0ZWNvcm5lcmJyYWNrZXRsZWZ0XCIsXG4gIDB4MzAwZSxcbiAgXCJ3aGl0ZWNvcm5lcmJyYWNrZXRsZWZ0dmVydGljYWxcIixcbiAgMHhmZTQzLFxuICBcIndoaXRlY29ybmVyYnJhY2tldHJpZ2h0XCIsXG4gIDB4MzAwZixcbiAgXCJ3aGl0ZWNvcm5lcmJyYWNrZXRyaWdodHZlcnRpY2FsXCIsXG4gIDB4ZmU0NCxcbiAgXCJ3aGl0ZWRpYW1vbmRcIixcbiAgMHgyNWM3LFxuICBcIndoaXRlZGlhbW9uZGNvbnRhaW5pbmdibGFja3NtYWxsZGlhbW9uZFwiLFxuICAweDI1YzgsXG4gIFwid2hpdGVkb3ducG9pbnRpbmdzbWFsbHRyaWFuZ2xlXCIsXG4gIDB4MjViZixcbiAgXCJ3aGl0ZWRvd25wb2ludGluZ3RyaWFuZ2xlXCIsXG4gIDB4MjViZCxcbiAgXCJ3aGl0ZWxlZnRwb2ludGluZ3NtYWxsdHJpYW5nbGVcIixcbiAgMHgyNWMzLFxuICBcIndoaXRlbGVmdHBvaW50aW5ndHJpYW5nbGVcIixcbiAgMHgyNWMxLFxuICBcIndoaXRlbGVudGljdWxhcmJyYWNrZXRsZWZ0XCIsXG4gIDB4MzAxNixcbiAgXCJ3aGl0ZWxlbnRpY3VsYXJicmFja2V0cmlnaHRcIixcbiAgMHgzMDE3LFxuICBcIndoaXRlcmlnaHRwb2ludGluZ3NtYWxsdHJpYW5nbGVcIixcbiAgMHgyNWI5LFxuICBcIndoaXRlcmlnaHRwb2ludGluZ3RyaWFuZ2xlXCIsXG4gIDB4MjViNyxcbiAgXCJ3aGl0ZXNtYWxsc3F1YXJlXCIsXG4gIDB4MjVhYixcbiAgXCJ3aGl0ZXNtaWxpbmdmYWNlXCIsXG4gIDB4MjYzYSxcbiAgXCJ3aGl0ZXNxdWFyZVwiLFxuICAweDI1YTEsXG4gIFwid2hpdGVzdGFyXCIsXG4gIDB4MjYwNixcbiAgXCJ3aGl0ZXRlbGVwaG9uZVwiLFxuICAweDI2MGYsXG4gIFwid2hpdGV0b3J0b2lzZXNoZWxsYnJhY2tldGxlZnRcIixcbiAgMHgzMDE4LFxuICBcIndoaXRldG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodFwiLFxuICAweDMwMTksXG4gIFwid2hpdGV1cHBvaW50aW5nc21hbGx0cmlhbmdsZVwiLFxuICAweDI1YjUsXG4gIFwid2hpdGV1cHBvaW50aW5ndHJpYW5nbGVcIixcbiAgMHgyNWIzLFxuICBcIndpaGlyYWdhbmFcIixcbiAgMHgzMDkwLFxuICBcIndpa2F0YWthbmFcIixcbiAgMHgzMGYwLFxuICBcIndpa29yZWFuXCIsXG4gIDB4MzE1ZixcbiAgXCJ3bW9ub3NwYWNlXCIsXG4gIDB4ZmY1NyxcbiAgXCJ3b2hpcmFnYW5hXCIsXG4gIDB4MzA5MixcbiAgXCJ3b2thdGFrYW5hXCIsXG4gIDB4MzBmMixcbiAgXCJ3b2thdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY2NixcbiAgXCJ3b25cIixcbiAgMHgyMGE5LFxuICBcIndvbm1vbm9zcGFjZVwiLFxuICAweGZmZTYsXG4gIFwid293YWVudGhhaVwiLFxuICAweDBlMjcsXG4gIFwid3BhcmVuXCIsXG4gIDB4MjRiMixcbiAgXCJ3cmluZ1wiLFxuICAweDFlOTgsXG4gIFwid3N1cGVyaW9yXCIsXG4gIDB4MDJiNyxcbiAgXCJ3dHVybmVkXCIsXG4gIDB4MDI4ZCxcbiAgXCJ3eW5uXCIsXG4gIDB4MDFiZixcbiAgXCJ4XCIsXG4gIDB4MDA3OCxcbiAgXCJ4YWJvdmVjbWJcIixcbiAgMHgwMzNkLFxuICBcInhib3BvbW9mb1wiLFxuICAweDMxMTIsXG4gIFwieGNpcmNsZVwiLFxuICAweDI0ZTcsXG4gIFwieGRpZXJlc2lzXCIsXG4gIDB4MWU4ZCxcbiAgXCJ4ZG90YWNjZW50XCIsXG4gIDB4MWU4YixcbiAgXCJ4ZWhhcm1lbmlhblwiLFxuICAweDA1NmQsXG4gIFwieGlcIixcbiAgMHgwM2JlLFxuICBcInhtb25vc3BhY2VcIixcbiAgMHhmZjU4LFxuICBcInhwYXJlblwiLFxuICAweDI0YjMsXG4gIFwieHN1cGVyaW9yXCIsXG4gIDB4MDJlMyxcbiAgXCJ5XCIsXG4gIDB4MDA3OSxcbiAgXCJ5YWFkb3NxdWFyZVwiLFxuICAweDMzNGUsXG4gIFwieWFiZW5nYWxpXCIsXG4gIDB4MDlhZixcbiAgXCJ5YWN1dGVcIixcbiAgMHgwMGZkLFxuICBcInlhZGV2YVwiLFxuICAweDA5MmYsXG4gIFwieWFla29yZWFuXCIsXG4gIDB4MzE1MixcbiAgXCJ5YWd1amFyYXRpXCIsXG4gIDB4MGFhZixcbiAgXCJ5YWd1cm11a2hpXCIsXG4gIDB4MGEyZixcbiAgXCJ5YWhpcmFnYW5hXCIsXG4gIDB4MzA4NCxcbiAgXCJ5YWthdGFrYW5hXCIsXG4gIDB4MzBlNCxcbiAgXCJ5YWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY5NCxcbiAgXCJ5YWtvcmVhblwiLFxuICAweDMxNTEsXG4gIFwieWFtYWtrYW50aGFpXCIsXG4gIDB4MGU0ZSxcbiAgXCJ5YXNtYWxsaGlyYWdhbmFcIixcbiAgMHgzMDgzLFxuICBcInlhc21hbGxrYXRha2FuYVwiLFxuICAweDMwZTMsXG4gIFwieWFzbWFsbGthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY2YyxcbiAgXCJ5YXRjeXJpbGxpY1wiLFxuICAweDA0NjMsXG4gIFwieWNpcmNsZVwiLFxuICAweDI0ZTgsXG4gIFwieWNpcmN1bWZsZXhcIixcbiAgMHgwMTc3LFxuICBcInlkaWVyZXNpc1wiLFxuICAweDAwZmYsXG4gIFwieWRvdGFjY2VudFwiLFxuICAweDFlOGYsXG4gIFwieWRvdGJlbG93XCIsXG4gIDB4MWVmNSxcbiAgXCJ5ZWhhcmFiaWNcIixcbiAgMHgwNjRhLFxuICBcInllaGJhcnJlZWFyYWJpY1wiLFxuICAweDA2ZDIsXG4gIFwieWVoYmFycmVlZmluYWxhcmFiaWNcIixcbiAgMHhmYmFmLFxuICBcInllaGZpbmFsYXJhYmljXCIsXG4gIDB4ZmVmMixcbiAgXCJ5ZWhoYW16YWFib3ZlYXJhYmljXCIsXG4gIDB4MDYyNixcbiAgXCJ5ZWhoYW16YWFib3ZlZmluYWxhcmFiaWNcIixcbiAgMHhmZThhLFxuICBcInllaGhhbXphYWJvdmVpbml0aWFsYXJhYmljXCIsXG4gIDB4ZmU4YixcbiAgXCJ5ZWhoYW16YWFib3ZlbWVkaWFsYXJhYmljXCIsXG4gIDB4ZmU4YyxcbiAgXCJ5ZWhpbml0aWFsYXJhYmljXCIsXG4gIDB4ZmVmMyxcbiAgXCJ5ZWhtZWRpYWxhcmFiaWNcIixcbiAgMHhmZWY0LFxuICBcInllaG1lZW1pbml0aWFsYXJhYmljXCIsXG4gIDB4ZmNkZCxcbiAgXCJ5ZWhtZWVtaXNvbGF0ZWRhcmFiaWNcIixcbiAgMHhmYzU4LFxuICBcInllaG5vb25maW5hbGFyYWJpY1wiLFxuICAweGZjOTQsXG4gIFwieWVodGhyZWVkb3RzYmVsb3dhcmFiaWNcIixcbiAgMHgwNmQxLFxuICBcInlla29yZWFuXCIsXG4gIDB4MzE1NixcbiAgXCJ5ZW5cIixcbiAgMHgwMGE1LFxuICBcInllbm1vbm9zcGFjZVwiLFxuICAweGZmZTUsXG4gIFwieWVva29yZWFuXCIsXG4gIDB4MzE1NSxcbiAgXCJ5ZW9yaW5oaWV1aGtvcmVhblwiLFxuICAweDMxODYsXG4gIFwieWVyYWhiZW55b21vaGVicmV3XCIsXG4gIDB4MDVhYSxcbiAgXCJ5ZXJhaGJlbnlvbW9sZWZ0aGVicmV3XCIsXG4gIDB4MDVhYSxcbiAgXCJ5ZXJpY3lyaWxsaWNcIixcbiAgMHgwNDRiLFxuICBcInllcnVkaWVyZXNpc2N5cmlsbGljXCIsXG4gIDB4MDRmOSxcbiAgXCJ5ZXNpZXVuZ2tvcmVhblwiLFxuICAweDMxODEsXG4gIFwieWVzaWV1bmdwYW5zaW9za29yZWFuXCIsXG4gIDB4MzE4MyxcbiAgXCJ5ZXNpZXVuZ3Npb3Nrb3JlYW5cIixcbiAgMHgzMTgyLFxuICBcInlldGl2aGVicmV3XCIsXG4gIDB4MDU5YSxcbiAgXCJ5Z3JhdmVcIixcbiAgMHgxZWYzLFxuICBcInlob29rXCIsXG4gIDB4MDFiNCxcbiAgXCJ5aG9va2Fib3ZlXCIsXG4gIDB4MWVmNyxcbiAgXCJ5aWFybWVuaWFuXCIsXG4gIDB4MDU3NSxcbiAgXCJ5aWN5cmlsbGljXCIsXG4gIDB4MDQ1NyxcbiAgXCJ5aWtvcmVhblwiLFxuICAweDMxNjIsXG4gIFwieWlueWFuZ1wiLFxuICAweDI2MmYsXG4gIFwieWl3bmFybWVuaWFuXCIsXG4gIDB4MDU4MixcbiAgXCJ5bW9ub3NwYWNlXCIsXG4gIDB4ZmY1OSxcbiAgXCJ5b2RcIixcbiAgMHgwNWQ5LFxuICBcInlvZGRhZ2VzaFwiLFxuICAweGZiMzksXG4gIFwieW9kZGFnZXNoaGVicmV3XCIsXG4gIDB4ZmIzOSxcbiAgXCJ5b2RoZWJyZXdcIixcbiAgMHgwNWQ5LFxuICBcInlvZHlvZGhlYnJld1wiLFxuICAweDA1ZjIsXG4gIFwieW9keW9kcGF0YWhoZWJyZXdcIixcbiAgMHhmYjFmLFxuICBcInlvaGlyYWdhbmFcIixcbiAgMHgzMDg4LFxuICBcInlvaWtvcmVhblwiLFxuICAweDMxODksXG4gIFwieW9rYXRha2FuYVwiLFxuICAweDMwZTgsXG4gIFwieW9rYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmOTYsXG4gIFwieW9rb3JlYW5cIixcbiAgMHgzMTViLFxuICBcInlvc21hbGxoaXJhZ2FuYVwiLFxuICAweDMwODcsXG4gIFwieW9zbWFsbGthdGFrYW5hXCIsXG4gIDB4MzBlNyxcbiAgXCJ5b3NtYWxsa2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjZlLFxuICBcInlvdGdyZWVrXCIsXG4gIDB4MDNmMyxcbiAgXCJ5b3lhZWtvcmVhblwiLFxuICAweDMxODgsXG4gIFwieW95YWtvcmVhblwiLFxuICAweDMxODcsXG4gIFwieW95YWt0aGFpXCIsXG4gIDB4MGUyMixcbiAgXCJ5b3lpbmd0aGFpXCIsXG4gIDB4MGUwZCxcbiAgXCJ5cGFyZW5cIixcbiAgMHgyNGI0LFxuICBcInlwb2dlZ3JhbW1lbmlcIixcbiAgMHgwMzdhLFxuICBcInlwb2dlZ3JhbW1lbmlncmVla2NtYlwiLFxuICAweDAzNDUsXG4gIFwieXJcIixcbiAgMHgwMWE2LFxuICBcInlyaW5nXCIsXG4gIDB4MWU5OSxcbiAgXCJ5c3VwZXJpb3JcIixcbiAgMHgwMmI4LFxuICBcInl0aWxkZVwiLFxuICAweDFlZjksXG4gIFwieXR1cm5lZFwiLFxuICAweDAyOGUsXG4gIFwieXVoaXJhZ2FuYVwiLFxuICAweDMwODYsXG4gIFwieXVpa29yZWFuXCIsXG4gIDB4MzE4YyxcbiAgXCJ5dWthdGFrYW5hXCIsXG4gIDB4MzBlNixcbiAgXCJ5dWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY5NSxcbiAgXCJ5dWtvcmVhblwiLFxuICAweDMxNjAsXG4gIFwieXVzYmlnY3lyaWxsaWNcIixcbiAgMHgwNDZiLFxuICBcInl1c2JpZ2lvdGlmaWVkY3lyaWxsaWNcIixcbiAgMHgwNDZkLFxuICBcInl1c2xpdHRsZWN5cmlsbGljXCIsXG4gIDB4MDQ2NyxcbiAgXCJ5dXNsaXR0bGVpb3RpZmllZGN5cmlsbGljXCIsXG4gIDB4MDQ2OSxcbiAgXCJ5dXNtYWxsaGlyYWdhbmFcIixcbiAgMHgzMDg1LFxuICBcInl1c21hbGxrYXRha2FuYVwiLFxuICAweDMwZTUsXG4gIFwieXVzbWFsbGthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY2ZCxcbiAgXCJ5dXlla29yZWFuXCIsXG4gIDB4MzE4YixcbiAgXCJ5dXllb2tvcmVhblwiLFxuICAweDMxOGEsXG4gIFwieXlhYmVuZ2FsaVwiLFxuICAweDA5ZGYsXG4gIFwieXlhZGV2YVwiLFxuICAweDA5NWYsXG4gIFwielwiLFxuICAweDAwN2EsXG4gIFwiemFhcm1lbmlhblwiLFxuICAweDA1NjYsXG4gIFwiemFjdXRlXCIsXG4gIDB4MDE3YSxcbiAgXCJ6YWRldmFcIixcbiAgMHgwOTViLFxuICBcInphZ3VybXVraGlcIixcbiAgMHgwYTViLFxuICBcInphaGFyYWJpY1wiLFxuICAweDA2MzgsXG4gIFwiemFoZmluYWxhcmFiaWNcIixcbiAgMHhmZWM2LFxuICBcInphaGluaXRpYWxhcmFiaWNcIixcbiAgMHhmZWM3LFxuICBcInphaGlyYWdhbmFcIixcbiAgMHgzMDU2LFxuICBcInphaG1lZGlhbGFyYWJpY1wiLFxuICAweGZlYzgsXG4gIFwiemFpbmFyYWJpY1wiLFxuICAweDA2MzIsXG4gIFwiemFpbmZpbmFsYXJhYmljXCIsXG4gIDB4ZmViMCxcbiAgXCJ6YWthdGFrYW5hXCIsXG4gIDB4MzBiNixcbiAgXCJ6YXFlZmdhZG9saGVicmV3XCIsXG4gIDB4MDU5NSxcbiAgXCJ6YXFlZnFhdGFuaGVicmV3XCIsXG4gIDB4MDU5NCxcbiAgXCJ6YXJxYWhlYnJld1wiLFxuICAweDA1OTgsXG4gIFwiemF5aW5cIixcbiAgMHgwNWQ2LFxuICBcInpheWluZGFnZXNoXCIsXG4gIDB4ZmIzNixcbiAgXCJ6YXlpbmRhZ2VzaGhlYnJld1wiLFxuICAweGZiMzYsXG4gIFwiemF5aW5oZWJyZXdcIixcbiAgMHgwNWQ2LFxuICBcInpib3BvbW9mb1wiLFxuICAweDMxMTcsXG4gIFwiemNhcm9uXCIsXG4gIDB4MDE3ZSxcbiAgXCJ6Y2lyY2xlXCIsXG4gIDB4MjRlOSxcbiAgXCJ6Y2lyY3VtZmxleFwiLFxuICAweDFlOTEsXG4gIFwiemN1cmxcIixcbiAgMHgwMjkxLFxuICBcInpkb3RcIixcbiAgMHgwMTdjLFxuICBcInpkb3RhY2NlbnRcIixcbiAgMHgwMTdjLFxuICBcInpkb3RiZWxvd1wiLFxuICAweDFlOTMsXG4gIFwiemVjeXJpbGxpY1wiLFxuICAweDA0MzcsXG4gIFwiemVkZXNjZW5kZXJjeXJpbGxpY1wiLFxuICAweDA0OTksXG4gIFwiemVkaWVyZXNpc2N5cmlsbGljXCIsXG4gIDB4MDRkZixcbiAgXCJ6ZWhpcmFnYW5hXCIsXG4gIDB4MzA1YyxcbiAgXCJ6ZWthdGFrYW5hXCIsXG4gIDB4MzBiYyxcbiAgXCJ6ZXJvXCIsXG4gIDB4MDAzMCxcbiAgXCJ6ZXJvYXJhYmljXCIsXG4gIDB4MDY2MCxcbiAgXCJ6ZXJvYmVuZ2FsaVwiLFxuICAweDA5ZTYsXG4gIFwiemVyb2RldmFcIixcbiAgMHgwOTY2LFxuICBcInplcm9ndWphcmF0aVwiLFxuICAweDBhZTYsXG4gIFwiemVyb2d1cm11a2hpXCIsXG4gIDB4MGE2NixcbiAgXCJ6ZXJvaGFja2FyYWJpY1wiLFxuICAweDA2NjAsXG4gIFwiemVyb2luZmVyaW9yXCIsXG4gIDB4MjA4MCxcbiAgXCJ6ZXJvbW9ub3NwYWNlXCIsXG4gIDB4ZmYxMCxcbiAgXCJ6ZXJvb2xkc3R5bGVcIixcbiAgMHhmNzMwLFxuICBcInplcm9wZXJzaWFuXCIsXG4gIDB4MDZmMCxcbiAgXCJ6ZXJvc3VwZXJpb3JcIixcbiAgMHgyMDcwLFxuICBcInplcm90aGFpXCIsXG4gIDB4MGU1MCxcbiAgXCJ6ZXJvd2lkdGhqb2luZXJcIixcbiAgMHhmZWZmLFxuICBcInplcm93aWR0aG5vbmpvaW5lclwiLFxuICAweDIwMGMsXG4gIFwiemVyb3dpZHRoc3BhY2VcIixcbiAgMHgyMDBiLFxuICBcInpldGFcIixcbiAgMHgwM2I2LFxuICBcInpoYm9wb21vZm9cIixcbiAgMHgzMTEzLFxuICBcInpoZWFybWVuaWFuXCIsXG4gIDB4MDU2YSxcbiAgXCJ6aGVicmV2ZWN5cmlsbGljXCIsXG4gIDB4MDRjMixcbiAgXCJ6aGVjeXJpbGxpY1wiLFxuICAweDA0MzYsXG4gIFwiemhlZGVzY2VuZGVyY3lyaWxsaWNcIixcbiAgMHgwNDk3LFxuICBcInpoZWRpZXJlc2lzY3lyaWxsaWNcIixcbiAgMHgwNGRkLFxuICBcInppaGlyYWdhbmFcIixcbiAgMHgzMDU4LFxuICBcInppa2F0YWthbmFcIixcbiAgMHgzMGI4LFxuICBcInppbm9yaGVicmV3XCIsXG4gIDB4MDVhZSxcbiAgXCJ6bGluZWJlbG93XCIsXG4gIDB4MWU5NSxcbiAgXCJ6bW9ub3NwYWNlXCIsXG4gIDB4ZmY1YSxcbiAgXCJ6b2hpcmFnYW5hXCIsXG4gIDB4MzA1ZSxcbiAgXCJ6b2thdGFrYW5hXCIsXG4gIDB4MzBiZSxcbiAgXCJ6cGFyZW5cIixcbiAgMHgyNGI1LFxuICBcInpyZXRyb2ZsZXhob29rXCIsXG4gIDB4MDI5MCxcbiAgXCJ6c3Ryb2tlXCIsXG4gIDB4MDFiNixcbiAgXCJ6dWhpcmFnYW5hXCIsXG4gIDB4MzA1YSxcbiAgXCJ6dWthdGFrYW5hXCIsXG4gIDB4MzBiYSxcbiAgXCIubm90ZGVmXCIsXG4gIDB4MDAwMCxcbiAgXCJhbmdicmFja2V0bGVmdGJpZ1wiLFxuICAweDIzMjksXG4gIFwiYW5nYnJhY2tldGxlZnRCaWdcIixcbiAgMHgyMzI5LFxuICBcImFuZ2JyYWNrZXRsZWZ0YmlnZ1wiLFxuICAweDIzMjksXG4gIFwiYW5nYnJhY2tldGxlZnRCaWdnXCIsXG4gIDB4MjMyOSxcbiAgXCJhbmdicmFja2V0cmlnaHRCaWdcIixcbiAgMHgyMzJhLFxuICBcImFuZ2JyYWNrZXRyaWdodGJpZ1wiLFxuICAweDIzMmEsXG4gIFwiYW5nYnJhY2tldHJpZ2h0QmlnZ1wiLFxuICAweDIzMmEsXG4gIFwiYW5nYnJhY2tldHJpZ2h0YmlnZ1wiLFxuICAweDIzMmEsXG4gIFwiYXJyb3dob29rbGVmdFwiLFxuICAweDIxYWEsXG4gIFwiYXJyb3dob29rcmlnaHRcIixcbiAgMHgyMWE5LFxuICBcImFycm93bGVmdHRvcGhhbGZcIixcbiAgMHgyMWJjLFxuICBcImFycm93bGVmdGJvdGhhbGZcIixcbiAgMHgyMWJkLFxuICBcImFycm93bm9ydGhlYXN0XCIsXG4gIDB4MjE5NyxcbiAgXCJhcnJvd25vcnRod2VzdFwiLFxuICAweDIxOTYsXG4gIFwiYXJyb3dyaWdodHRvcGhhbGZcIixcbiAgMHgyMWMwLFxuICBcImFycm93cmlnaHRib3RoYWxmXCIsXG4gIDB4MjFjMSxcbiAgXCJhcnJvd3NvdXRoZWFzdFwiLFxuICAweDIxOTgsXG4gIFwiYXJyb3dzb3V0aHdlc3RcIixcbiAgMHgyMTk5LFxuICBcImJhY2tzbGFzaGJpZ1wiLFxuICAweDIyMTYsXG4gIFwiYmFja3NsYXNoQmlnXCIsXG4gIDB4MjIxNixcbiAgXCJiYWNrc2xhc2hCaWdnXCIsXG4gIDB4MjIxNixcbiAgXCJiYWNrc2xhc2hiaWdnXCIsXG4gIDB4MjIxNixcbiAgXCJiYXJkYmxcIixcbiAgMHgyMDE2LFxuICBcImJyYWNlaHRpcGRvd25sZWZ0XCIsXG4gIDB4ZmUzNyxcbiAgXCJicmFjZWh0aXBkb3ducmlnaHRcIixcbiAgMHhmZTM3LFxuICBcImJyYWNlaHRpcHVwbGVmdFwiLFxuICAweGZlMzgsXG4gIFwiYnJhY2VodGlwdXByaWdodFwiLFxuICAweGZlMzgsXG4gIFwiYnJhY2VsZWZ0QmlnXCIsXG4gIDB4MDA3YixcbiAgXCJicmFjZWxlZnRiaWdcIixcbiAgMHgwMDdiLFxuICBcImJyYWNlbGVmdGJpZ2dcIixcbiAgMHgwMDdiLFxuICBcImJyYWNlbGVmdEJpZ2dcIixcbiAgMHgwMDdiLFxuICBcImJyYWNlcmlnaHRCaWdcIixcbiAgMHgwMDdkLFxuICBcImJyYWNlcmlnaHRiaWdcIixcbiAgMHgwMDdkLFxuICBcImJyYWNlcmlnaHRiaWdnXCIsXG4gIDB4MDA3ZCxcbiAgXCJicmFjZXJpZ2h0QmlnZ1wiLFxuICAweDAwN2QsXG4gIFwiYnJhY2tldGxlZnRiaWdcIixcbiAgMHgwMDViLFxuICBcImJyYWNrZXRsZWZ0QmlnXCIsXG4gIDB4MDA1YixcbiAgXCJicmFja2V0bGVmdGJpZ2dcIixcbiAgMHgwMDViLFxuICBcImJyYWNrZXRsZWZ0QmlnZ1wiLFxuICAweDAwNWIsXG4gIFwiYnJhY2tldHJpZ2h0QmlnXCIsXG4gIDB4MDA1ZCxcbiAgXCJicmFja2V0cmlnaHRiaWdcIixcbiAgMHgwMDVkLFxuICBcImJyYWNrZXRyaWdodGJpZ2dcIixcbiAgMHgwMDVkLFxuICBcImJyYWNrZXRyaWdodEJpZ2dcIixcbiAgMHgwMDVkLFxuICBcImNlaWxpbmdsZWZ0YmlnXCIsXG4gIDB4MjMwOCxcbiAgXCJjZWlsaW5nbGVmdEJpZ1wiLFxuICAweDIzMDgsXG4gIFwiY2VpbGluZ2xlZnRCaWdnXCIsXG4gIDB4MjMwOCxcbiAgXCJjZWlsaW5nbGVmdGJpZ2dcIixcbiAgMHgyMzA4LFxuICBcImNlaWxpbmdyaWdodGJpZ1wiLFxuICAweDIzMDksXG4gIFwiY2VpbGluZ3JpZ2h0QmlnXCIsXG4gIDB4MjMwOSxcbiAgXCJjZWlsaW5ncmlnaHRiaWdnXCIsXG4gIDB4MjMwOSxcbiAgXCJjZWlsaW5ncmlnaHRCaWdnXCIsXG4gIDB4MjMwOSxcbiAgXCJjaXJjbGVkb3RkaXNwbGF5XCIsXG4gIDB4MjI5OSxcbiAgXCJjaXJjbGVkb3R0ZXh0XCIsXG4gIDB4MjI5OSxcbiAgXCJjaXJjbGVtdWx0aXBseWRpc3BsYXlcIixcbiAgMHgyMjk3LFxuICBcImNpcmNsZW11bHRpcGx5dGV4dFwiLFxuICAweDIyOTcsXG4gIFwiY2lyY2xlcGx1c2Rpc3BsYXlcIixcbiAgMHgyMjk1LFxuICBcImNpcmNsZXBsdXN0ZXh0XCIsXG4gIDB4MjI5NSxcbiAgXCJjb250aW50ZWdyYWxkaXNwbGF5XCIsXG4gIDB4MjIyZSxcbiAgXCJjb250aW50ZWdyYWx0ZXh0XCIsXG4gIDB4MjIyZSxcbiAgXCJjb3Byb2R1Y3RkaXNwbGF5XCIsXG4gIDB4MjIxMCxcbiAgXCJjb3Byb2R1Y3R0ZXh0XCIsXG4gIDB4MjIxMCxcbiAgXCJmbG9vcmxlZnRCaWdcIixcbiAgMHgyMzBhLFxuICBcImZsb29ybGVmdGJpZ1wiLFxuICAweDIzMGEsXG4gIFwiZmxvb3JsZWZ0YmlnZ1wiLFxuICAweDIzMGEsXG4gIFwiZmxvb3JsZWZ0QmlnZ1wiLFxuICAweDIzMGEsXG4gIFwiZmxvb3JyaWdodGJpZ1wiLFxuICAweDIzMGIsXG4gIFwiZmxvb3JyaWdodEJpZ1wiLFxuICAweDIzMGIsXG4gIFwiZmxvb3JyaWdodEJpZ2dcIixcbiAgMHgyMzBiLFxuICBcImZsb29ycmlnaHRiaWdnXCIsXG4gIDB4MjMwYixcbiAgXCJoYXR3aWRlXCIsXG4gIDB4MDMwMixcbiAgXCJoYXR3aWRlclwiLFxuICAweDAzMDIsXG4gIFwiaGF0d2lkZXN0XCIsXG4gIDB4MDMwMixcbiAgXCJpbnRlcmNhbFwiLFxuICAweDFkNDAsXG4gIFwiaW50ZWdyYWxkaXNwbGF5XCIsXG4gIDB4MjIyYixcbiAgXCJpbnRlZ3JhbHRleHRcIixcbiAgMHgyMjJiLFxuICBcImludGVyc2VjdGlvbmRpc3BsYXlcIixcbiAgMHgyMmMyLFxuICBcImludGVyc2VjdGlvbnRleHRcIixcbiAgMHgyMmMyLFxuICBcImxvZ2ljYWxhbmRkaXNwbGF5XCIsXG4gIDB4MjIyNyxcbiAgXCJsb2dpY2FsYW5kdGV4dFwiLFxuICAweDIyMjcsXG4gIFwibG9naWNhbG9yZGlzcGxheVwiLFxuICAweDIyMjgsXG4gIFwibG9naWNhbG9ydGV4dFwiLFxuICAweDIyMjgsXG4gIFwicGFyZW5sZWZ0QmlnXCIsXG4gIDB4MDAyOCxcbiAgXCJwYXJlbmxlZnRiaWdcIixcbiAgMHgwMDI4LFxuICBcInBhcmVubGVmdEJpZ2dcIixcbiAgMHgwMDI4LFxuICBcInBhcmVubGVmdGJpZ2dcIixcbiAgMHgwMDI4LFxuICBcInBhcmVucmlnaHRCaWdcIixcbiAgMHgwMDI5LFxuICBcInBhcmVucmlnaHRiaWdcIixcbiAgMHgwMDI5LFxuICBcInBhcmVucmlnaHRCaWdnXCIsXG4gIDB4MDAyOSxcbiAgXCJwYXJlbnJpZ2h0YmlnZ1wiLFxuICAweDAwMjksXG4gIFwicHJpbWVcIixcbiAgMHgyMDMyLFxuICBcInByb2R1Y3RkaXNwbGF5XCIsXG4gIDB4MjIwZixcbiAgXCJwcm9kdWN0dGV4dFwiLFxuICAweDIyMGYsXG4gIFwicmFkaWNhbGJpZ1wiLFxuICAweDIyMWEsXG4gIFwicmFkaWNhbEJpZ1wiLFxuICAweDIyMWEsXG4gIFwicmFkaWNhbEJpZ2dcIixcbiAgMHgyMjFhLFxuICBcInJhZGljYWxiaWdnXCIsXG4gIDB4MjIxYSxcbiAgXCJyYWRpY2FsYnRcIixcbiAgMHgyMjFhLFxuICBcInJhZGljYWx0cFwiLFxuICAweDIyMWEsXG4gIFwicmFkaWNhbHZlcnRleFwiLFxuICAweDIyMWEsXG4gIFwic2xhc2hiaWdcIixcbiAgMHgwMDJmLFxuICBcInNsYXNoQmlnXCIsXG4gIDB4MDAyZixcbiAgXCJzbGFzaEJpZ2dcIixcbiAgMHgwMDJmLFxuICBcInNsYXNoYmlnZ1wiLFxuICAweDAwMmYsXG4gIFwic3VtbWF0aW9uZGlzcGxheVwiLFxuICAweDIyMTEsXG4gIFwic3VtbWF0aW9udGV4dFwiLFxuICAweDIyMTEsXG4gIFwidGlsZGV3aWRlXCIsXG4gIDB4MDJkYyxcbiAgXCJ0aWxkZXdpZGVyXCIsXG4gIDB4MDJkYyxcbiAgXCJ0aWxkZXdpZGVzdFwiLFxuICAweDAyZGMsXG4gIFwidW5pb25kaXNwbGF5XCIsXG4gIDB4MjJjMyxcbiAgXCJ1bmlvbm11bHRpZGlzcGxheVwiLFxuICAweDIyOGUsXG4gIFwidW5pb25tdWx0aXRleHRcIixcbiAgMHgyMjhlLFxuICBcInVuaW9uc3FkaXNwbGF5XCIsXG4gIDB4MjI5NCxcbiAgXCJ1bmlvbnNxdGV4dFwiLFxuICAweDIyOTQsXG4gIFwidW5pb250ZXh0XCIsXG4gIDB4MjJjMyxcbiAgXCJ2ZXh0ZW5kZG91YmxlXCIsXG4gIDB4MjIyNSxcbiAgXCJ2ZXh0ZW5kc2luZ2xlXCIsXG4gIDB4MjIyM1xuIF07XG59KTtcbmNvbnN0IGdldERpbmdiYXRzR2x5cGhzVW5pY29kZSA9ICgwLF9jb3JlX3V0aWxzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18uZ2V0QXJyYXlMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICgpIHtcbiByZXR1cm4gW1xuICBcInNwYWNlXCIsXG4gIDB4MDAyMCxcbiAgXCJhMVwiLFxuICAweDI3MDEsXG4gIFwiYTJcIixcbiAgMHgyNzAyLFxuICBcImEyMDJcIixcbiAgMHgyNzAzLFxuICBcImEzXCIsXG4gIDB4MjcwNCxcbiAgXCJhNFwiLFxuICAweDI2MGUsXG4gIFwiYTVcIixcbiAgMHgyNzA2LFxuICBcImExMTlcIixcbiAgMHgyNzA3LFxuICBcImExMThcIixcbiAgMHgyNzA4LFxuICBcImExMTdcIixcbiAgMHgyNzA5LFxuICBcImExMVwiLFxuICAweDI2MWIsXG4gIFwiYTEyXCIsXG4gIDB4MjYxZSxcbiAgXCJhMTNcIixcbiAgMHgyNzBjLFxuICBcImExNFwiLFxuICAweDI3MGQsXG4gIFwiYTE1XCIsXG4gIDB4MjcwZSxcbiAgXCJhMTZcIixcbiAgMHgyNzBmLFxuICBcImExMDVcIixcbiAgMHgyNzEwLFxuICBcImExN1wiLFxuICAweDI3MTEsXG4gIFwiYTE4XCIsXG4gIDB4MjcxMixcbiAgXCJhMTlcIixcbiAgMHgyNzEzLFxuICBcImEyMFwiLFxuICAweDI3MTQsXG4gIFwiYTIxXCIsXG4gIDB4MjcxNSxcbiAgXCJhMjJcIixcbiAgMHgyNzE2LFxuICBcImEyM1wiLFxuICAweDI3MTcsXG4gIFwiYTI0XCIsXG4gIDB4MjcxOCxcbiAgXCJhMjVcIixcbiAgMHgyNzE5LFxuICBcImEyNlwiLFxuICAweDI3MWEsXG4gIFwiYTI3XCIsXG4gIDB4MjcxYixcbiAgXCJhMjhcIixcbiAgMHgyNzFjLFxuICBcImE2XCIsXG4gIDB4MjcxZCxcbiAgXCJhN1wiLFxuICAweDI3MWUsXG4gIFwiYThcIixcbiAgMHgyNzFmLFxuICBcImE5XCIsXG4gIDB4MjcyMCxcbiAgXCJhMTBcIixcbiAgMHgyNzIxLFxuICBcImEyOVwiLFxuICAweDI3MjIsXG4gIFwiYTMwXCIsXG4gIDB4MjcyMyxcbiAgXCJhMzFcIixcbiAgMHgyNzI0LFxuICBcImEzMlwiLFxuICAweDI3MjUsXG4gIFwiYTMzXCIsXG4gIDB4MjcyNixcbiAgXCJhMzRcIixcbiAgMHgyNzI3LFxuICBcImEzNVwiLFxuICAweDI2MDUsXG4gIFwiYTM2XCIsXG4gIDB4MjcyOSxcbiAgXCJhMzdcIixcbiAgMHgyNzJhLFxuICBcImEzOFwiLFxuICAweDI3MmIsXG4gIFwiYTM5XCIsXG4gIDB4MjcyYyxcbiAgXCJhNDBcIixcbiAgMHgyNzJkLFxuICBcImE0MVwiLFxuICAweDI3MmUsXG4gIFwiYTQyXCIsXG4gIDB4MjcyZixcbiAgXCJhNDNcIixcbiAgMHgyNzMwLFxuICBcImE0NFwiLFxuICAweDI3MzEsXG4gIFwiYTQ1XCIsXG4gIDB4MjczMixcbiAgXCJhNDZcIixcbiAgMHgyNzMzLFxuICBcImE0N1wiLFxuICAweDI3MzQsXG4gIFwiYTQ4XCIsXG4gIDB4MjczNSxcbiAgXCJhNDlcIixcbiAgMHgyNzM2LFxuICBcImE1MFwiLFxuICAweDI3MzcsXG4gIFwiYTUxXCIsXG4gIDB4MjczOCxcbiAgXCJhNTJcIixcbiAgMHgyNzM5LFxuICBcImE1M1wiLFxuICAweDI3M2EsXG4gIFwiYTU0XCIsXG4gIDB4MjczYixcbiAgXCJhNTVcIixcbiAgMHgyNzNjLFxuICBcImE1NlwiLFxuICAweDI3M2QsXG4gIFwiYTU3XCIsXG4gIDB4MjczZSxcbiAgXCJhNThcIixcbiAgMHgyNzNmLFxuICBcImE1OVwiLFxuICAweDI3NDAsXG4gIFwiYTYwXCIsXG4gIDB4Mjc0MSxcbiAgXCJhNjFcIixcbiAgMHgyNzQyLFxuICBcImE2MlwiLFxuICAweDI3NDMsXG4gIFwiYTYzXCIsXG4gIDB4Mjc0NCxcbiAgXCJhNjRcIixcbiAgMHgyNzQ1LFxuICBcImE2NVwiLFxuICAweDI3NDYsXG4gIFwiYTY2XCIsXG4gIDB4Mjc0NyxcbiAgXCJhNjdcIixcbiAgMHgyNzQ4LFxuICBcImE2OFwiLFxuICAweDI3NDksXG4gIFwiYTY5XCIsXG4gIDB4Mjc0YSxcbiAgXCJhNzBcIixcbiAgMHgyNzRiLFxuICBcImE3MVwiLFxuICAweDI1Y2YsXG4gIFwiYTcyXCIsXG4gIDB4Mjc0ZCxcbiAgXCJhNzNcIixcbiAgMHgyNWEwLFxuICBcImE3NFwiLFxuICAweDI3NGYsXG4gIFwiYTIwM1wiLFxuICAweDI3NTAsXG4gIFwiYTc1XCIsXG4gIDB4Mjc1MSxcbiAgXCJhMjA0XCIsXG4gIDB4Mjc1MixcbiAgXCJhNzZcIixcbiAgMHgyNWIyLFxuICBcImE3N1wiLFxuICAweDI1YmMsXG4gIFwiYTc4XCIsXG4gIDB4MjVjNixcbiAgXCJhNzlcIixcbiAgMHgyNzU2LFxuICBcImE4MVwiLFxuICAweDI1ZDcsXG4gIFwiYTgyXCIsXG4gIDB4Mjc1OCxcbiAgXCJhODNcIixcbiAgMHgyNzU5LFxuICBcImE4NFwiLFxuICAweDI3NWEsXG4gIFwiYTk3XCIsXG4gIDB4Mjc1YixcbiAgXCJhOThcIixcbiAgMHgyNzVjLFxuICBcImE5OVwiLFxuICAweDI3NWQsXG4gIFwiYTEwMFwiLFxuICAweDI3NWUsXG4gIFwiYTEwMVwiLFxuICAweDI3NjEsXG4gIFwiYTEwMlwiLFxuICAweDI3NjIsXG4gIFwiYTEwM1wiLFxuICAweDI3NjMsXG4gIFwiYTEwNFwiLFxuICAweDI3NjQsXG4gIFwiYTEwNlwiLFxuICAweDI3NjUsXG4gIFwiYTEwN1wiLFxuICAweDI3NjYsXG4gIFwiYTEwOFwiLFxuICAweDI3NjcsXG4gIFwiYTExMlwiLFxuICAweDI2NjMsXG4gIFwiYTExMVwiLFxuICAweDI2NjYsXG4gIFwiYTExMFwiLFxuICAweDI2NjUsXG4gIFwiYTEwOVwiLFxuICAweDI2NjAsXG4gIFwiYTEyMFwiLFxuICAweDI0NjAsXG4gIFwiYTEyMVwiLFxuICAweDI0NjEsXG4gIFwiYTEyMlwiLFxuICAweDI0NjIsXG4gIFwiYTEyM1wiLFxuICAweDI0NjMsXG4gIFwiYTEyNFwiLFxuICAweDI0NjQsXG4gIFwiYTEyNVwiLFxuICAweDI0NjUsXG4gIFwiYTEyNlwiLFxuICAweDI0NjYsXG4gIFwiYTEyN1wiLFxuICAweDI0NjcsXG4gIFwiYTEyOFwiLFxuICAweDI0NjgsXG4gIFwiYTEyOVwiLFxuICAweDI0NjksXG4gIFwiYTEzMFwiLFxuICAweDI3NzYsXG4gIFwiYTEzMVwiLFxuICAweDI3NzcsXG4gIFwiYTEzMlwiLFxuICAweDI3NzgsXG4gIFwiYTEzM1wiLFxuICAweDI3NzksXG4gIFwiYTEzNFwiLFxuICAweDI3N2EsXG4gIFwiYTEzNVwiLFxuICAweDI3N2IsXG4gIFwiYTEzNlwiLFxuICAweDI3N2MsXG4gIFwiYTEzN1wiLFxuICAweDI3N2QsXG4gIFwiYTEzOFwiLFxuICAweDI3N2UsXG4gIFwiYTEzOVwiLFxuICAweDI3N2YsXG4gIFwiYTE0MFwiLFxuICAweDI3ODAsXG4gIFwiYTE0MVwiLFxuICAweDI3ODEsXG4gIFwiYTE0MlwiLFxuICAweDI3ODIsXG4gIFwiYTE0M1wiLFxuICAweDI3ODMsXG4gIFwiYTE0NFwiLFxuICAweDI3ODQsXG4gIFwiYTE0NVwiLFxuICAweDI3ODUsXG4gIFwiYTE0NlwiLFxuICAweDI3ODYsXG4gIFwiYTE0N1wiLFxuICAweDI3ODcsXG4gIFwiYTE0OFwiLFxuICAweDI3ODgsXG4gIFwiYTE0OVwiLFxuICAweDI3ODksXG4gIFwiYTE1MFwiLFxuICAweDI3OGEsXG4gIFwiYTE1MVwiLFxuICAweDI3OGIsXG4gIFwiYTE1MlwiLFxuICAweDI3OGMsXG4gIFwiYTE1M1wiLFxuICAweDI3OGQsXG4gIFwiYTE1NFwiLFxuICAweDI3OGUsXG4gIFwiYTE1NVwiLFxuICAweDI3OGYsXG4gIFwiYTE1NlwiLFxuICAweDI3OTAsXG4gIFwiYTE1N1wiLFxuICAweDI3OTEsXG4gIFwiYTE1OFwiLFxuICAweDI3OTIsXG4gIFwiYTE1OVwiLFxuICAweDI3OTMsXG4gIFwiYTE2MFwiLFxuICAweDI3OTQsXG4gIFwiYTE2MVwiLFxuICAweDIxOTIsXG4gIFwiYTE2M1wiLFxuICAweDIxOTQsXG4gIFwiYTE2NFwiLFxuICAweDIxOTUsXG4gIFwiYTE5NlwiLFxuICAweDI3OTgsXG4gIFwiYTE2NVwiLFxuICAweDI3OTksXG4gIFwiYTE5MlwiLFxuICAweDI3OWEsXG4gIFwiYTE2NlwiLFxuICAweDI3OWIsXG4gIFwiYTE2N1wiLFxuICAweDI3OWMsXG4gIFwiYTE2OFwiLFxuICAweDI3OWQsXG4gIFwiYTE2OVwiLFxuICAweDI3OWUsXG4gIFwiYTE3MFwiLFxuICAweDI3OWYsXG4gIFwiYTE3MVwiLFxuICAweDI3YTAsXG4gIFwiYTE3MlwiLFxuICAweDI3YTEsXG4gIFwiYTE3M1wiLFxuICAweDI3YTIsXG4gIFwiYTE2MlwiLFxuICAweDI3YTMsXG4gIFwiYTE3NFwiLFxuICAweDI3YTQsXG4gIFwiYTE3NVwiLFxuICAweDI3YTUsXG4gIFwiYTE3NlwiLFxuICAweDI3YTYsXG4gIFwiYTE3N1wiLFxuICAweDI3YTcsXG4gIFwiYTE3OFwiLFxuICAweDI3YTgsXG4gIFwiYTE3OVwiLFxuICAweDI3YTksXG4gIFwiYTE5M1wiLFxuICAweDI3YWEsXG4gIFwiYTE4MFwiLFxuICAweDI3YWIsXG4gIFwiYTE5OVwiLFxuICAweDI3YWMsXG4gIFwiYTE4MVwiLFxuICAweDI3YWQsXG4gIFwiYTIwMFwiLFxuICAweDI3YWUsXG4gIFwiYTE4MlwiLFxuICAweDI3YWYsXG4gIFwiYTIwMVwiLFxuICAweDI3YjEsXG4gIFwiYTE4M1wiLFxuICAweDI3YjIsXG4gIFwiYTE4NFwiLFxuICAweDI3YjMsXG4gIFwiYTE5N1wiLFxuICAweDI3YjQsXG4gIFwiYTE4NVwiLFxuICAweDI3YjUsXG4gIFwiYTE5NFwiLFxuICAweDI3YjYsXG4gIFwiYTE5OFwiLFxuICAweDI3YjcsXG4gIFwiYTE4NlwiLFxuICAweDI3YjgsXG4gIFwiYTE5NVwiLFxuICAweDI3YjksXG4gIFwiYTE4N1wiLFxuICAweDI3YmEsXG4gIFwiYTE4OFwiLFxuICAweDI3YmIsXG4gIFwiYTE4OVwiLFxuICAweDI3YmMsXG4gIFwiYTE5MFwiLFxuICAweDI3YmQsXG4gIFwiYTE5MVwiLFxuICAweDI3YmUsXG4gIFwiYTg5XCIsXG4gIDB4Mjc2OCxcbiAgXCJhOTBcIixcbiAgMHgyNzY5LFxuICBcImE5M1wiLFxuICAweDI3NmEsXG4gIFwiYTk0XCIsXG4gIDB4Mjc2YixcbiAgXCJhOTFcIixcbiAgMHgyNzZjLFxuICBcImE5MlwiLFxuICAweDI3NmQsXG4gIFwiYTIwNVwiLFxuICAweDI3NmUsXG4gIFwiYTg1XCIsXG4gIDB4Mjc2ZixcbiAgXCJhMjA2XCIsXG4gIDB4Mjc3MCxcbiAgXCJhODZcIixcbiAgMHgyNzcxLFxuICBcImE4N1wiLFxuICAweDI3NzIsXG4gIFwiYTg4XCIsXG4gIDB4Mjc3MyxcbiAgXCJhOTVcIixcbiAgMHgyNzc0LFxuICBcImE5NlwiLFxuICAweDI3NzUsXG4gIFwiLm5vdGRlZlwiLFxuICAweDAwMDBcbiBdO1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMSAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5fX3dfcGRmanNfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dfcGRmanNfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xuLyogaGFybW9ueSBleHBvcnQgKi8gICBcImdldE5vcm1hbGl6ZWRVbmljb2Rlc1wiOiAoKSA9PiAoLyogYmluZGluZyAqLyBnZXROb3JtYWxpemVkVW5pY29kZXMpLFxuLyogaGFybW9ueSBleHBvcnQgKi8gICBcImdldFVuaWNvZGVGb3JHbHlwaFwiOiAoKSA9PiAoLyogYmluZGluZyAqLyBnZXRVbmljb2RlRm9yR2x5cGgpLFxuLyogaGFybW9ueSBleHBvcnQgKi8gICBcImdldFVuaWNvZGVSYW5nZUZvclwiOiAoKSA9PiAoLyogYmluZGluZyAqLyBnZXRVbmljb2RlUmFuZ2VGb3IpLFxuLyogaGFybW9ueSBleHBvcnQgKi8gICBcIm1hcFNwZWNpYWxVbmljb2RlVmFsdWVzXCI6ICgpID0+ICgvKiBiaW5kaW5nICovIG1hcFNwZWNpYWxVbmljb2RlVmFsdWVzKSxcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXCJyZXZlcnNlSWZSdGxcIjogKCkgPT4gKC8qIGJpbmRpbmcgKi8gcmV2ZXJzZUlmUnRsKVxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2NvcmVfdXRpbHNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd19wZGZqc19yZXF1aXJlX18oOSk7XG5cbmNvbnN0IGdldFNwZWNpYWxQVUFTeW1ib2xzID0gKDAsX2NvcmVfdXRpbHNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gdFs2MzcyMV0gPSAweDAwYTk7XG4gdFs2MzE5M10gPSAweDAwYTk7XG4gdFs2MzcyMF0gPSAweDAwYWU7XG4gdFs2MzE5NF0gPSAweDAwYWU7XG4gdFs2MzcyMl0gPSAweDIxMjI7XG4gdFs2MzE5NV0gPSAweDIxMjI7XG4gdFs2MzcyOV0gPSAweDIzYTc7XG4gdFs2MzczMF0gPSAweDIzYTg7XG4gdFs2MzczMV0gPSAweDIzYTk7XG4gdFs2Mzc0MF0gPSAweDIzYWI7XG4gdFs2Mzc0MV0gPSAweDIzYWM7XG4gdFs2Mzc0Ml0gPSAweDIzYWQ7XG4gdFs2MzcyNl0gPSAweDIzYTE7XG4gdFs2MzcyN10gPSAweDIzYTI7XG4gdFs2MzcyOF0gPSAweDIzYTM7XG4gdFs2MzczN10gPSAweDIzYTQ7XG4gdFs2MzczOF0gPSAweDIzYTU7XG4gdFs2MzczOV0gPSAweDIzYTY7XG4gdFs2MzcyM10gPSAweDIzOWI7XG4gdFs2MzcyNF0gPSAweDIzOWM7XG4gdFs2MzcyNV0gPSAweDIzOWQ7XG4gdFs2MzczNF0gPSAweDIzOWU7XG4gdFs2MzczNV0gPSAweDIzOWY7XG4gdFs2MzczNl0gPSAweDIzYTA7XG59KTtcbmZ1bmN0aW9uIG1hcFNwZWNpYWxVbmljb2RlVmFsdWVzKGNvZGUpIHtcbiBpZiAoY29kZSA+PSAweGZmZjAgJiYgY29kZSA8PSAweGZmZmYpIHtcbiAgcmV0dXJuIDA7XG4gfSBlbHNlIGlmIChjb2RlID49IDB4ZjYwMCAmJiBjb2RlIDw9IDB4ZjhmZikge1xuICByZXR1cm4gZ2V0U3BlY2lhbFBVQVN5bWJvbHMoKVtjb2RlXSB8fCBjb2RlO1xuIH0gZWxzZSBpZiAoY29kZSA9PT0gMHgwMGFkKSB7XG4gIHJldHVybiAweDAwMmQ7XG4gfVxuIHJldHVybiBjb2RlO1xufVxuZnVuY3Rpb24gZ2V0VW5pY29kZUZvckdseXBoKG5hbWUsIGdseXBoc1VuaWNvZGVNYXApIHtcbiBsZXQgdW5pY29kZSA9IGdseXBoc1VuaWNvZGVNYXBbbmFtZV07XG4gaWYgKHVuaWNvZGUgIT09IHVuZGVmaW5lZCkge1xuICByZXR1cm4gdW5pY29kZTtcbiB9XG4gaWYgKCFuYW1lKSB7XG4gIHJldHVybiAtMTtcbiB9XG4gaWYgKG5hbWVbMF0gPT09IFwidVwiKSB7XG4gIGNvbnN0IG5hbWVMZW4gPSBuYW1lLmxlbmd0aDtcbiAgbGV0IGhleFN0cjtcbiAgaWYgKG5hbWVMZW4gPT09IDcgJiYgbmFtZVsxXSA9PT0gXCJuXCIgJiYgbmFtZVsyXSA9PT0gXCJpXCIpIHtcbiAgIGhleFN0ciA9IG5hbWUuc3Vic3RyaW5nKDMpO1xuICB9IGVsc2UgaWYgKG5hbWVMZW4gPj0gNSAmJiBuYW1lTGVuIDw9IDcpIHtcbiAgIGhleFN0ciA9IG5hbWUuc3Vic3RyaW5nKDEpO1xuICB9IGVsc2Uge1xuICAgcmV0dXJuIC0xO1xuICB9XG4gIGlmIChoZXhTdHIgPT09IGhleFN0ci50b1VwcGVyQ2FzZSgpKSB7XG4gICB1bmljb2RlID0gcGFyc2VJbnQoaGV4U3RyLCAxNik7XG4gICBpZiAodW5pY29kZSA+PSAwKSB7XG4gICAgcmV0dXJuIHVuaWNvZGU7XG4gICB9XG4gIH1cbiB9XG4gcmV0dXJuIC0xO1xufVxuY29uc3QgVW5pY29kZVJhbmdlcyA9IFtcbiB7XG4gIGJlZ2luOiAweDAwMDAsXG4gIGVuZDogMHgwMDdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDAwODAsXG4gIGVuZDogMHgwMGZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDAxMDAsXG4gIGVuZDogMHgwMTdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDAxODAsXG4gIGVuZDogMHgwMjRmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDAyNTAsXG4gIGVuZDogMHgwMmFmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDAyYjAsXG4gIGVuZDogMHgwMmZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDAzMDAsXG4gIGVuZDogMHgwMzZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDAzNzAsXG4gIGVuZDogMHgwM2ZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDJjODAsXG4gIGVuZDogMHgyY2ZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDA0MDAsXG4gIGVuZDogMHgwNGZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDA1MzAsXG4gIGVuZDogMHgwNThmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDA1OTAsXG4gIGVuZDogMHgwNWZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweGE1MDAsXG4gIGVuZDogMHhhNjNmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDA2MDAsXG4gIGVuZDogMHgwNmZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDA3YzAsXG4gIGVuZDogMHgwN2ZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDA5MDAsXG4gIGVuZDogMHgwOTdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDA5ODAsXG4gIGVuZDogMHgwOWZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDBhMDAsXG4gIGVuZDogMHgwYTdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDBhODAsXG4gIGVuZDogMHgwYWZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDBiMDAsXG4gIGVuZDogMHgwYjdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDBiODAsXG4gIGVuZDogMHgwYmZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDBjMDAsXG4gIGVuZDogMHgwYzdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDBjODAsXG4gIGVuZDogMHgwY2ZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDBkMDAsXG4gIGVuZDogMHgwZDdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDBlMDAsXG4gIGVuZDogMHgwZTdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDBlODAsXG4gIGVuZDogMHgwZWZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEwYTAsXG4gIGVuZDogMHgxMGZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDFiMDAsXG4gIGVuZDogMHgxYjdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDExMDAsXG4gIGVuZDogMHgxMWZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDFlMDAsXG4gIGVuZDogMHgxZWZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDFmMDAsXG4gIGVuZDogMHgxZmZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDIwMDAsXG4gIGVuZDogMHgyMDZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDIwNzAsXG4gIGVuZDogMHgyMDlmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDIwYTAsXG4gIGVuZDogMHgyMGNmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDIwZDAsXG4gIGVuZDogMHgyMGZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDIxMDAsXG4gIGVuZDogMHgyMTRmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDIxNTAsXG4gIGVuZDogMHgyMThmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDIxOTAsXG4gIGVuZDogMHgyMWZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDIyMDAsXG4gIGVuZDogMHgyMmZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDIzMDAsXG4gIGVuZDogMHgyM2ZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDI0MDAsXG4gIGVuZDogMHgyNDNmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDI0NDAsXG4gIGVuZDogMHgyNDVmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDI0NjAsXG4gIGVuZDogMHgyNGZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDI1MDAsXG4gIGVuZDogMHgyNTdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDI1ODAsXG4gIGVuZDogMHgyNTlmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDI1YTAsXG4gIGVuZDogMHgyNWZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDI2MDAsXG4gIGVuZDogMHgyNmZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDI3MDAsXG4gIGVuZDogMHgyN2JmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDMwMDAsXG4gIGVuZDogMHgzMDNmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDMwNDAsXG4gIGVuZDogMHgzMDlmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDMwYTAsXG4gIGVuZDogMHgzMGZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDMxMDAsXG4gIGVuZDogMHgzMTJmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDMxMzAsXG4gIGVuZDogMHgzMThmXG4gfSxcbiB7XG4gIGJlZ2luOiAweGE4NDAsXG4gIGVuZDogMHhhODdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDMyMDAsXG4gIGVuZDogMHgzMmZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDMzMDAsXG4gIGVuZDogMHgzM2ZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweGFjMDAsXG4gIGVuZDogMHhkN2FmXG4gfSxcbiB7XG4gIGJlZ2luOiAweGQ4MDAsXG4gIGVuZDogMHhkZmZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEwOTAwLFxuICBlbmQ6IDB4MTA5MWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4NGUwMCxcbiAgZW5kOiAweDlmZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZTAwMCxcbiAgZW5kOiAweGY4ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MzFjMCxcbiAgZW5kOiAweDMxZWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZmIwMCxcbiAgZW5kOiAweGZiNGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZmI1MCxcbiAgZW5kOiAweGZkZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZmUyMCxcbiAgZW5kOiAweGZlMmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZmUxMCxcbiAgZW5kOiAweGZlMWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZmU1MCxcbiAgZW5kOiAweGZlNmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZmU3MCxcbiAgZW5kOiAweGZlZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZmYwMCxcbiAgZW5kOiAweGZmZWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZmZmMCxcbiAgZW5kOiAweGZmZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MGYwMCxcbiAgZW5kOiAweDBmZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDcwMCxcbiAgZW5kOiAweDA3NGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDc4MCxcbiAgZW5kOiAweDA3YmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MGQ4MCxcbiAgZW5kOiAweDBkZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTAwMCxcbiAgZW5kOiAweDEwOWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTIwMCxcbiAgZW5kOiAweDEzN2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTNhMCxcbiAgZW5kOiAweDEzZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTQwMCxcbiAgZW5kOiAweDE2N2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTY4MCxcbiAgZW5kOiAweDE2OWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTZhMCxcbiAgZW5kOiAweDE2ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTc4MCxcbiAgZW5kOiAweDE3ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTgwMCxcbiAgZW5kOiAweDE4YWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjgwMCxcbiAgZW5kOiAweDI4ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4YTAwMCxcbiAgZW5kOiAweGE0OGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTcwMCxcbiAgZW5kOiAweDE3MWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTAzMDAsXG4gIGVuZDogMHgxMDMyZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxMDMzMCxcbiAgZW5kOiAweDEwMzRmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEwNDAwLFxuICBlbmQ6IDB4MTA0NGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MWQwMDAsXG4gIGVuZDogMHgxZDBmZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxZDQwMCxcbiAgZW5kOiAweDFkN2ZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweGZmMDAwLFxuICBlbmQ6IDB4ZmZmZmRcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZmUwMCxcbiAgZW5kOiAweGZlMGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZTAwMDAsXG4gIGVuZDogMHhlMDA3ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxOTAwLFxuICBlbmQ6IDB4MTk0ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxOTUwLFxuICBlbmQ6IDB4MTk3ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxOTgwLFxuICBlbmQ6IDB4MTlkZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxYTAwLFxuICBlbmQ6IDB4MWExZlxuIH0sXG4ge1xuICBiZWdpbjogMHgyYzAwLFxuICBlbmQ6IDB4MmM1ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgyZDMwLFxuICBlbmQ6IDB4MmQ3ZlxuIH0sXG4ge1xuICBiZWdpbjogMHg0ZGMwLFxuICBlbmQ6IDB4NGRmZlxuIH0sXG4ge1xuICBiZWdpbjogMHhhODAwLFxuICBlbmQ6IDB4YTgyZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxMDAwMCxcbiAgZW5kOiAweDEwMDdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEwMTQwLFxuICBlbmQ6IDB4MTAxOGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTAzODAsXG4gIGVuZDogMHgxMDM5ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxMDNhMCxcbiAgZW5kOiAweDEwM2RmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEwNDUwLFxuICBlbmQ6IDB4MTA0N2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTA0ODAsXG4gIGVuZDogMHgxMDRhZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxMDgwMCxcbiAgZW5kOiAweDEwODNmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEwYTAwLFxuICBlbmQ6IDB4MTBhNWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MWQzMDAsXG4gIGVuZDogMHgxZDM1ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxMjAwMCxcbiAgZW5kOiAweDEyM2ZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDFkMzYwLFxuICBlbmQ6IDB4MWQzN2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MWI4MCxcbiAgZW5kOiAweDFiYmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MWMwMCxcbiAgZW5kOiAweDFjNGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MWM1MCxcbiAgZW5kOiAweDFjN2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4YTg4MCxcbiAgZW5kOiAweGE4ZGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4YTkwMCxcbiAgZW5kOiAweGE5MmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4YTkzMCxcbiAgZW5kOiAweGE5NWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4YWEwMCxcbiAgZW5kOiAweGFhNWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTAxOTAsXG4gIGVuZDogMHgxMDFjZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxMDFkMCxcbiAgZW5kOiAweDEwMWZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEwMmEwLFxuICBlbmQ6IDB4MTAyZGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MWYwMzAsXG4gIGVuZDogMHgxZjA5ZlxuIH1cbl07XG5mdW5jdGlvbiBnZXRVbmljb2RlUmFuZ2VGb3IodmFsdWUpIHtcbiBmb3IgKGxldCBpID0gMCwgaWkgPSBVbmljb2RlUmFuZ2VzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgY29uc3QgcmFuZ2UgPSBVbmljb2RlUmFuZ2VzW2ldO1xuICBpZiAodmFsdWUgPj0gcmFuZ2UuYmVnaW4gJiYgdmFsdWUgPCByYW5nZS5lbmQpIHtcbiAgIHJldHVybiBpO1xuICB9XG4gfVxuIHJldHVybiAtMTtcbn1cbmZ1bmN0aW9uIGlzUlRMUmFuZ2VGb3IodmFsdWUpIHtcbiBsZXQgcmFuZ2UgPSBVbmljb2RlUmFuZ2VzWzEzXTtcbiBpZiAodmFsdWUgPj0gcmFuZ2UuYmVnaW4gJiYgdmFsdWUgPCByYW5nZS5lbmQpIHtcbiAgcmV0dXJuIHRydWU7XG4gfVxuIHJhbmdlID0gVW5pY29kZVJhbmdlc1sxMV07XG4gaWYgKHZhbHVlID49IHJhbmdlLmJlZ2luICYmIHZhbHVlIDwgcmFuZ2UuZW5kKSB7XG4gIHJldHVybiB0cnVlO1xuIH1cbiByZXR1cm4gZmFsc2U7XG59XG5jb25zdCBnZXROb3JtYWxpemVkVW5pY29kZXMgPSAoMCxfY29yZV91dGlsc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fLmdldEFycmF5TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAoKSB7XG4gcmV0dXJuIFtcbiAgXCJcXHUwMEE4XCIsXG4gIFwiXFx1MDAyMFxcdTAzMDhcIixcbiAgXCJcXHUwMEFGXCIsXG4gIFwiXFx1MDAyMFxcdTAzMDRcIixcbiAgXCJcXHUwMEI0XCIsXG4gIFwiXFx1MDAyMFxcdTAzMDFcIixcbiAgXCJcXHUwMEI1XCIsXG4gIFwiXFx1MDNCQ1wiLFxuICBcIlxcdTAwQjhcIixcbiAgXCJcXHUwMDIwXFx1MDMyN1wiLFxuICBcIlxcdTAxMzJcIixcbiAgXCJcXHUwMDQ5XFx1MDA0QVwiLFxuICBcIlxcdTAxMzNcIixcbiAgXCJcXHUwMDY5XFx1MDA2QVwiLFxuICBcIlxcdTAxM0ZcIixcbiAgXCJcXHUwMDRDXFx1MDBCN1wiLFxuICBcIlxcdTAxNDBcIixcbiAgXCJcXHUwMDZDXFx1MDBCN1wiLFxuICBcIlxcdTAxNDlcIixcbiAgXCJcXHUwMkJDXFx1MDA2RVwiLFxuICBcIlxcdTAxN0ZcIixcbiAgXCJcXHUwMDczXCIsXG4gIFwiXFx1MDFDNFwiLFxuICBcIlxcdTAwNDRcXHUwMTdEXCIsXG4gIFwiXFx1MDFDNVwiLFxuICBcIlxcdTAwNDRcXHUwMTdFXCIsXG4gIFwiXFx1MDFDNlwiLFxuICBcIlxcdTAwNjRcXHUwMTdFXCIsXG4gIFwiXFx1MDFDN1wiLFxuICBcIlxcdTAwNENcXHUwMDRBXCIsXG4gIFwiXFx1MDFDOFwiLFxuICBcIlxcdTAwNENcXHUwMDZBXCIsXG4gIFwiXFx1MDFDOVwiLFxuICBcIlxcdTAwNkNcXHUwMDZBXCIsXG4gIFwiXFx1MDFDQVwiLFxuICBcIlxcdTAwNEVcXHUwMDRBXCIsXG4gIFwiXFx1MDFDQlwiLFxuICBcIlxcdTAwNEVcXHUwMDZBXCIsXG4gIFwiXFx1MDFDQ1wiLFxuICBcIlxcdTAwNkVcXHUwMDZBXCIsXG4gIFwiXFx1MDFGMVwiLFxuICBcIlxcdTAwNDRcXHUwMDVBXCIsXG4gIFwiXFx1MDFGMlwiLFxuICBcIlxcdTAwNDRcXHUwMDdBXCIsXG4gIFwiXFx1MDFGM1wiLFxuICBcIlxcdTAwNjRcXHUwMDdBXCIsXG4gIFwiXFx1MDJEOFwiLFxuICBcIlxcdTAwMjBcXHUwMzA2XCIsXG4gIFwiXFx1MDJEOVwiLFxuICBcIlxcdTAwMjBcXHUwMzA3XCIsXG4gIFwiXFx1MDJEQVwiLFxuICBcIlxcdTAwMjBcXHUwMzBBXCIsXG4gIFwiXFx1MDJEQlwiLFxuICBcIlxcdTAwMjBcXHUwMzI4XCIsXG4gIFwiXFx1MDJEQ1wiLFxuICBcIlxcdTAwMjBcXHUwMzAzXCIsXG4gIFwiXFx1MDJERFwiLFxuICBcIlxcdTAwMjBcXHUwMzBCXCIsXG4gIFwiXFx1MDM3QVwiLFxuICBcIlxcdTAwMjBcXHUwMzQ1XCIsXG4gIFwiXFx1MDM4NFwiLFxuICBcIlxcdTAwMjBcXHUwMzAxXCIsXG4gIFwiXFx1MDNEMFwiLFxuICBcIlxcdTAzQjJcIixcbiAgXCJcXHUwM0QxXCIsXG4gIFwiXFx1MDNCOFwiLFxuICBcIlxcdTAzRDJcIixcbiAgXCJcXHUwM0E1XCIsXG4gIFwiXFx1MDNENVwiLFxuICBcIlxcdTAzQzZcIixcbiAgXCJcXHUwM0Q2XCIsXG4gIFwiXFx1MDNDMFwiLFxuICBcIlxcdTAzRjBcIixcbiAgXCJcXHUwM0JBXCIsXG4gIFwiXFx1MDNGMVwiLFxuICBcIlxcdTAzQzFcIixcbiAgXCJcXHUwM0YyXCIsXG4gIFwiXFx1MDNDMlwiLFxuICBcIlxcdTAzRjRcIixcbiAgXCJcXHUwMzk4XCIsXG4gIFwiXFx1MDNGNVwiLFxuICBcIlxcdTAzQjVcIixcbiAgXCJcXHUwM0Y5XCIsXG4gIFwiXFx1MDNBM1wiLFxuICBcIlxcdTA1ODdcIixcbiAgXCJcXHUwNTY1XFx1MDU4MlwiLFxuICBcIlxcdTA2NzVcIixcbiAgXCJcXHUwNjI3XFx1MDY3NFwiLFxuICBcIlxcdTA2NzZcIixcbiAgXCJcXHUwNjQ4XFx1MDY3NFwiLFxuICBcIlxcdTA2NzdcIixcbiAgXCJcXHUwNkM3XFx1MDY3NFwiLFxuICBcIlxcdTA2NzhcIixcbiAgXCJcXHUwNjRBXFx1MDY3NFwiLFxuICBcIlxcdTBFMzNcIixcbiAgXCJcXHUwRTREXFx1MEUzMlwiLFxuICBcIlxcdTBFQjNcIixcbiAgXCJcXHUwRUNEXFx1MEVCMlwiLFxuICBcIlxcdTBFRENcIixcbiAgXCJcXHUwRUFCXFx1MEU5OVwiLFxuICBcIlxcdTBFRERcIixcbiAgXCJcXHUwRUFCXFx1MEVBMVwiLFxuICBcIlxcdTBGNzdcIixcbiAgXCJcXHUwRkIyXFx1MEY4MVwiLFxuICBcIlxcdTBGNzlcIixcbiAgXCJcXHUwRkIzXFx1MEY4MVwiLFxuICBcIlxcdTFFOUFcIixcbiAgXCJcXHUwMDYxXFx1MDJCRVwiLFxuICBcIlxcdTFGQkRcIixcbiAgXCJcXHUwMDIwXFx1MDMxM1wiLFxuICBcIlxcdTFGQkZcIixcbiAgXCJcXHUwMDIwXFx1MDMxM1wiLFxuICBcIlxcdTFGQzBcIixcbiAgXCJcXHUwMDIwXFx1MDM0MlwiLFxuICBcIlxcdTFGRkVcIixcbiAgXCJcXHUwMDIwXFx1MDMxNFwiLFxuICBcIlxcdTIwMDJcIixcbiAgXCJcXHUwMDIwXCIsXG4gIFwiXFx1MjAwM1wiLFxuICBcIlxcdTAwMjBcIixcbiAgXCJcXHUyMDA0XCIsXG4gIFwiXFx1MDAyMFwiLFxuICBcIlxcdTIwMDVcIixcbiAgXCJcXHUwMDIwXCIsXG4gIFwiXFx1MjAwNlwiLFxuICBcIlxcdTAwMjBcIixcbiAgXCJcXHUyMDA4XCIsXG4gIFwiXFx1MDAyMFwiLFxuICBcIlxcdTIwMDlcIixcbiAgXCJcXHUwMDIwXCIsXG4gIFwiXFx1MjAwQVwiLFxuICBcIlxcdTAwMjBcIixcbiAgXCJcXHUyMDE3XCIsXG4gIFwiXFx1MDAyMFxcdTAzMzNcIixcbiAgXCJcXHUyMDI0XCIsXG4gIFwiXFx1MDAyRVwiLFxuICBcIlxcdTIwMjVcIixcbiAgXCJcXHUwMDJFXFx1MDAyRVwiLFxuICBcIlxcdTIwMjZcIixcbiAgXCJcXHUwMDJFXFx1MDAyRVxcdTAwMkVcIixcbiAgXCJcXHUyMDMzXCIsXG4gIFwiXFx1MjAzMlxcdTIwMzJcIixcbiAgXCJcXHUyMDM0XCIsXG4gIFwiXFx1MjAzMlxcdTIwMzJcXHUyMDMyXCIsXG4gIFwiXFx1MjAzNlwiLFxuICBcIlxcdTIwMzVcXHUyMDM1XCIsXG4gIFwiXFx1MjAzN1wiLFxuICBcIlxcdTIwMzVcXHUyMDM1XFx1MjAzNVwiLFxuICBcIlxcdTIwM0NcIixcbiAgXCJcXHUwMDIxXFx1MDAyMVwiLFxuICBcIlxcdTIwM0VcIixcbiAgXCJcXHUwMDIwXFx1MDMwNVwiLFxuICBcIlxcdTIwNDdcIixcbiAgXCJcXHUwMDNGXFx1MDAzRlwiLFxuICBcIlxcdTIwNDhcIixcbiAgXCJcXHUwMDNGXFx1MDAyMVwiLFxuICBcIlxcdTIwNDlcIixcbiAgXCJcXHUwMDIxXFx1MDAzRlwiLFxuICBcIlxcdTIwNTdcIixcbiAgXCJcXHUyMDMyXFx1MjAzMlxcdTIwMzJcXHUyMDMyXCIsXG4gIFwiXFx1MjA1RlwiLFxuICBcIlxcdTAwMjBcIixcbiAgXCJcXHUyMEE4XCIsXG4gIFwiXFx1MDA1MlxcdTAwNzNcIixcbiAgXCJcXHUyMTAwXCIsXG4gIFwiXFx1MDA2MVxcdTAwMkZcXHUwMDYzXCIsXG4gIFwiXFx1MjEwMVwiLFxuICBcIlxcdTAwNjFcXHUwMDJGXFx1MDA3M1wiLFxuICBcIlxcdTIxMDNcIixcbiAgXCJcXHUwMEIwXFx1MDA0M1wiLFxuICBcIlxcdTIxMDVcIixcbiAgXCJcXHUwMDYzXFx1MDAyRlxcdTAwNkZcIixcbiAgXCJcXHUyMTA2XCIsXG4gIFwiXFx1MDA2M1xcdTAwMkZcXHUwMDc1XCIsXG4gIFwiXFx1MjEwN1wiLFxuICBcIlxcdTAxOTBcIixcbiAgXCJcXHUyMTA5XCIsXG4gIFwiXFx1MDBCMFxcdTAwNDZcIixcbiAgXCJcXHUyMTE2XCIsXG4gIFwiXFx1MDA0RVxcdTAwNkZcIixcbiAgXCJcXHUyMTIxXCIsXG4gIFwiXFx1MDA1NFxcdTAwNDVcXHUwMDRDXCIsXG4gIFwiXFx1MjEzNVwiLFxuICBcIlxcdTA1RDBcIixcbiAgXCJcXHUyMTM2XCIsXG4gIFwiXFx1MDVEMVwiLFxuICBcIlxcdTIxMzdcIixcbiAgXCJcXHUwNUQyXCIsXG4gIFwiXFx1MjEzOFwiLFxuICBcIlxcdTA1RDNcIixcbiAgXCJcXHUyMTNCXCIsXG4gIFwiXFx1MDA0NlxcdTAwNDFcXHUwMDU4XCIsXG4gIFwiXFx1MjE2MFwiLFxuICBcIlxcdTAwNDlcIixcbiAgXCJcXHUyMTYxXCIsXG4gIFwiXFx1MDA0OVxcdTAwNDlcIixcbiAgXCJcXHUyMTYyXCIsXG4gIFwiXFx1MDA0OVxcdTAwNDlcXHUwMDQ5XCIsXG4gIFwiXFx1MjE2M1wiLFxuICBcIlxcdTAwNDlcXHUwMDU2XCIsXG4gIFwiXFx1MjE2NFwiLFxuICBcIlxcdTAwNTZcIixcbiAgXCJcXHUyMTY1XCIsXG4gIFwiXFx1MDA1NlxcdTAwNDlcIixcbiAgXCJcXHUyMTY2XCIsXG4gIFwiXFx1MDA1NlxcdTAwNDlcXHUwMDQ5XCIsXG4gIFwiXFx1MjE2N1wiLFxuICBcIlxcdTAwNTZcXHUwMDQ5XFx1MDA0OVxcdTAwNDlcIixcbiAgXCJcXHUyMTY4XCIsXG4gIFwiXFx1MDA0OVxcdTAwNThcIixcbiAgXCJcXHUyMTY5XCIsXG4gIFwiXFx1MDA1OFwiLFxuICBcIlxcdTIxNkFcIixcbiAgXCJcXHUwMDU4XFx1MDA0OVwiLFxuICBcIlxcdTIxNkJcIixcbiAgXCJcXHUwMDU4XFx1MDA0OVxcdTAwNDlcIixcbiAgXCJcXHUyMTZDXCIsXG4gIFwiXFx1MDA0Q1wiLFxuICBcIlxcdTIxNkRcIixcbiAgXCJcXHUwMDQzXCIsXG4gIFwiXFx1MjE2RVwiLFxuICBcIlxcdTAwNDRcIixcbiAgXCJcXHUyMTZGXCIsXG4gIFwiXFx1MDA0RFwiLFxuICBcIlxcdTIxNzBcIixcbiAgXCJcXHUwMDY5XCIsXG4gIFwiXFx1MjE3MVwiLFxuICBcIlxcdTAwNjlcXHUwMDY5XCIsXG4gIFwiXFx1MjE3MlwiLFxuICBcIlxcdTAwNjlcXHUwMDY5XFx1MDA2OVwiLFxuICBcIlxcdTIxNzNcIixcbiAgXCJcXHUwMDY5XFx1MDA3NlwiLFxuICBcIlxcdTIxNzRcIixcbiAgXCJcXHUwMDc2XCIsXG4gIFwiXFx1MjE3NVwiLFxuICBcIlxcdTAwNzZcXHUwMDY5XCIsXG4gIFwiXFx1MjE3NlwiLFxuICBcIlxcdTAwNzZcXHUwMDY5XFx1MDA2OVwiLFxuICBcIlxcdTIxNzdcIixcbiAgXCJcXHUwMDc2XFx1MDA2OVxcdTAwNjlcXHUwMDY5XCIsXG4gIFwiXFx1MjE3OFwiLFxuICBcIlxcdTAwNjlcXHUwMDc4XCIsXG4gIFwiXFx1MjE3OVwiLFxuICBcIlxcdTAwNzhcIixcbiAgXCJcXHUyMTdBXCIsXG4gIFwiXFx1MDA3OFxcdTAwNjlcIixcbiAgXCJcXHUyMTdCXCIsXG4gIFwiXFx1MDA3OFxcdTAwNjlcXHUwMDY5XCIsXG4gIFwiXFx1MjE3Q1wiLFxuICBcIlxcdTAwNkNcIixcbiAgXCJcXHUyMTdEXCIsXG4gIFwiXFx1MDA2M1wiLFxuICBcIlxcdTIxN0VcIixcbiAgXCJcXHUwMDY0XCIsXG4gIFwiXFx1MjE3RlwiLFxuICBcIlxcdTAwNkRcIixcbiAgXCJcXHUyMjJDXCIsXG4gIFwiXFx1MjIyQlxcdTIyMkJcIixcbiAgXCJcXHUyMjJEXCIsXG4gIFwiXFx1MjIyQlxcdTIyMkJcXHUyMjJCXCIsXG4gIFwiXFx1MjIyRlwiLFxuICBcIlxcdTIyMkVcXHUyMjJFXCIsXG4gIFwiXFx1MjIzMFwiLFxuICBcIlxcdTIyMkVcXHUyMjJFXFx1MjIyRVwiLFxuICBcIlxcdTI0NzRcIixcbiAgXCJcXHUwMDI4XFx1MDAzMVxcdTAwMjlcIixcbiAgXCJcXHUyNDc1XCIsXG4gIFwiXFx1MDAyOFxcdTAwMzJcXHUwMDI5XCIsXG4gIFwiXFx1MjQ3NlwiLFxuICBcIlxcdTAwMjhcXHUwMDMzXFx1MDAyOVwiLFxuICBcIlxcdTI0NzdcIixcbiAgXCJcXHUwMDI4XFx1MDAzNFxcdTAwMjlcIixcbiAgXCJcXHUyNDc4XCIsXG4gIFwiXFx1MDAyOFxcdTAwMzVcXHUwMDI5XCIsXG4gIFwiXFx1MjQ3OVwiLFxuICBcIlxcdTAwMjhcXHUwMDM2XFx1MDAyOVwiLFxuICBcIlxcdTI0N0FcIixcbiAgXCJcXHUwMDI4XFx1MDAzN1xcdTAwMjlcIixcbiAgXCJcXHUyNDdCXCIsXG4gIFwiXFx1MDAyOFxcdTAwMzhcXHUwMDI5XCIsXG4gIFwiXFx1MjQ3Q1wiLFxuICBcIlxcdTAwMjhcXHUwMDM5XFx1MDAyOVwiLFxuICBcIlxcdTI0N0RcIixcbiAgXCJcXHUwMDI4XFx1MDAzMVxcdTAwMzBcXHUwMDI5XCIsXG4gIFwiXFx1MjQ3RVwiLFxuICBcIlxcdTAwMjhcXHUwMDMxXFx1MDAzMVxcdTAwMjlcIixcbiAgXCJcXHUyNDdGXCIsXG4gIFwiXFx1MDAyOFxcdTAwMzFcXHUwMDMyXFx1MDAyOVwiLFxuICBcIlxcdTI0ODBcIixcbiAgXCJcXHUwMDI4XFx1MDAzMVxcdTAwMzNcXHUwMDI5XCIsXG4gIFwiXFx1MjQ4MVwiLFxuICBcIlxcdTAwMjhcXHUwMDMxXFx1MDAzNFxcdTAwMjlcIixcbiAgXCJcXHUyNDgyXCIsXG4gIFwiXFx1MDAyOFxcdTAwMzFcXHUwMDM1XFx1MDAyOVwiLFxuICBcIlxcdTI0ODNcIixcbiAgXCJcXHUwMDI4XFx1MDAzMVxcdTAwMzZcXHUwMDI5XCIsXG4gIFwiXFx1MjQ4NFwiLFxuICBcIlxcdTAwMjhcXHUwMDMxXFx1MDAzN1xcdTAwMjlcIixcbiAgXCJcXHUyNDg1XCIsXG4gIFwiXFx1MDAyOFxcdTAwMzFcXHUwMDM4XFx1MDAyOVwiLFxuICBcIlxcdTI0ODZcIixcbiAgXCJcXHUwMDI4XFx1MDAzMVxcdTAwMzlcXHUwMDI5XCIsXG4gIFwiXFx1MjQ4N1wiLFxuICBcIlxcdTAwMjhcXHUwMDMyXFx1MDAzMFxcdTAwMjlcIixcbiAgXCJcXHUyNDg4XCIsXG4gIFwiXFx1MDAzMVxcdTAwMkVcIixcbiAgXCJcXHUyNDg5XCIsXG4gIFwiXFx1MDAzMlxcdTAwMkVcIixcbiAgXCJcXHUyNDhBXCIsXG4gIFwiXFx1MDAzM1xcdTAwMkVcIixcbiAgXCJcXHUyNDhCXCIsXG4gIFwiXFx1MDAzNFxcdTAwMkVcIixcbiAgXCJcXHUyNDhDXCIsXG4gIFwiXFx1MDAzNVxcdTAwMkVcIixcbiAgXCJcXHUyNDhEXCIsXG4gIFwiXFx1MDAzNlxcdTAwMkVcIixcbiAgXCJcXHUyNDhFXCIsXG4gIFwiXFx1MDAzN1xcdTAwMkVcIixcbiAgXCJcXHUyNDhGXCIsXG4gIFwiXFx1MDAzOFxcdTAwMkVcIixcbiAgXCJcXHUyNDkwXCIsXG4gIFwiXFx1MDAzOVxcdTAwMkVcIixcbiAgXCJcXHUyNDkxXCIsXG4gIFwiXFx1MDAzMVxcdTAwMzBcXHUwMDJFXCIsXG4gIFwiXFx1MjQ5MlwiLFxuICBcIlxcdTAwMzFcXHUwMDMxXFx1MDAyRVwiLFxuICBcIlxcdTI0OTNcIixcbiAgXCJcXHUwMDMxXFx1MDAzMlxcdTAwMkVcIixcbiAgXCJcXHUyNDk0XCIsXG4gIFwiXFx1MDAzMVxcdTAwMzNcXHUwMDJFXCIsXG4gIFwiXFx1MjQ5NVwiLFxuICBcIlxcdTAwMzFcXHUwMDM0XFx1MDAyRVwiLFxuICBcIlxcdTI0OTZcIixcbiAgXCJcXHUwMDMxXFx1MDAzNVxcdTAwMkVcIixcbiAgXCJcXHUyNDk3XCIsXG4gIFwiXFx1MDAzMVxcdTAwMzZcXHUwMDJFXCIsXG4gIFwiXFx1MjQ5OFwiLFxuICBcIlxcdTAwMzFcXHUwMDM3XFx1MDAyRVwiLFxuICBcIlxcdTI0OTlcIixcbiAgXCJcXHUwMDMxXFx1MDAzOFxcdTAwMkVcIixcbiAgXCJcXHUyNDlBXCIsXG4gIFwiXFx1MDAzMVxcdTAwMzlcXHUwMDJFXCIsXG4gIFwiXFx1MjQ5QlwiLFxuICBcIlxcdTAwMzJcXHUwMDMwXFx1MDAyRVwiLFxuICBcIlxcdTI0OUNcIixcbiAgXCJcXHUwMDI4XFx1MDA2MVxcdTAwMjlcIixcbiAgXCJcXHUyNDlEXCIsXG4gIFwiXFx1MDAyOFxcdTAwNjJcXHUwMDI5XCIsXG4gIFwiXFx1MjQ5RVwiLFxuICBcIlxcdTAwMjhcXHUwMDYzXFx1MDAyOVwiLFxuICBcIlxcdTI0OUZcIixcbiAgXCJcXHUwMDI4XFx1MDA2NFxcdTAwMjlcIixcbiAgXCJcXHUyNEEwXCIsXG4gIFwiXFx1MDAyOFxcdTAwNjVcXHUwMDI5XCIsXG4gIFwiXFx1MjRBMVwiLFxuICBcIlxcdTAwMjhcXHUwMDY2XFx1MDAyOVwiLFxuICBcIlxcdTI0QTJcIixcbiAgXCJcXHUwMDI4XFx1MDA2N1xcdTAwMjlcIixcbiAgXCJcXHUyNEEzXCIsXG4gIFwiXFx1MDAyOFxcdTAwNjhcXHUwMDI5XCIsXG4gIFwiXFx1MjRBNFwiLFxuICBcIlxcdTAwMjhcXHUwMDY5XFx1MDAyOVwiLFxuICBcIlxcdTI0QTVcIixcbiAgXCJcXHUwMDI4XFx1MDA2QVxcdTAwMjlcIixcbiAgXCJcXHUyNEE2XCIsXG4gIFwiXFx1MDAyOFxcdTAwNkJcXHUwMDI5XCIsXG4gIFwiXFx1MjRBN1wiLFxuICBcIlxcdTAwMjhcXHUwMDZDXFx1MDAyOVwiLFxuICBcIlxcdTI0QThcIixcbiAgXCJcXHUwMDI4XFx1MDA2RFxcdTAwMjlcIixcbiAgXCJcXHUyNEE5XCIsXG4gIFwiXFx1MDAyOFxcdTAwNkVcXHUwMDI5XCIsXG4gIFwiXFx1MjRBQVwiLFxuICBcIlxcdTAwMjhcXHUwMDZGXFx1MDAyOVwiLFxuICBcIlxcdTI0QUJcIixcbiAgXCJcXHUwMDI4XFx1MDA3MFxcdTAwMjlcIixcbiAgXCJcXHUyNEFDXCIsXG4gIFwiXFx1MDAyOFxcdTAwNzFcXHUwMDI5XCIsXG4gIFwiXFx1MjRBRFwiLFxuICBcIlxcdTAwMjhcXHUwMDcyXFx1MDAyOVwiLFxuICBcIlxcdTI0QUVcIixcbiAgXCJcXHUwMDI4XFx1MDA3M1xcdTAwMjlcIixcbiAgXCJcXHUyNEFGXCIsXG4gIFwiXFx1MDAyOFxcdTAwNzRcXHUwMDI5XCIsXG4gIFwiXFx1MjRCMFwiLFxuICBcIlxcdTAwMjhcXHUwMDc1XFx1MDAyOVwiLFxuICBcIlxcdTI0QjFcIixcbiAgXCJcXHUwMDI4XFx1MDA3NlxcdTAwMjlcIixcbiAgXCJcXHUyNEIyXCIsXG4gIFwiXFx1MDAyOFxcdTAwNzdcXHUwMDI5XCIsXG4gIFwiXFx1MjRCM1wiLFxuICBcIlxcdTAwMjhcXHUwMDc4XFx1MDAyOVwiLFxuICBcIlxcdTI0QjRcIixcbiAgXCJcXHUwMDI4XFx1MDA3OVxcdTAwMjlcIixcbiAgXCJcXHUyNEI1XCIsXG4gIFwiXFx1MDAyOFxcdTAwN0FcXHUwMDI5XCIsXG4gIFwiXFx1MkEwQ1wiLFxuICBcIlxcdTIyMkJcXHUyMjJCXFx1MjIyQlxcdTIyMkJcIixcbiAgXCJcXHUyQTc0XCIsXG4gIFwiXFx1MDAzQVxcdTAwM0FcXHUwMDNEXCIsXG4gIFwiXFx1MkE3NVwiLFxuICBcIlxcdTAwM0RcXHUwMDNEXCIsXG4gIFwiXFx1MkE3NlwiLFxuICBcIlxcdTAwM0RcXHUwMDNEXFx1MDAzRFwiLFxuICBcIlxcdTJFOUZcIixcbiAgXCJcXHU2QkNEXCIsXG4gIFwiXFx1MkVGM1wiLFxuICBcIlxcdTlGOUZcIixcbiAgXCJcXHUyRjAwXCIsXG4gIFwiXFx1NEUwMFwiLFxuICBcIlxcdTJGMDFcIixcbiAgXCJcXHU0RTI4XCIsXG4gIFwiXFx1MkYwMlwiLFxuICBcIlxcdTRFMzZcIixcbiAgXCJcXHUyRjAzXCIsXG4gIFwiXFx1NEUzRlwiLFxuICBcIlxcdTJGMDRcIixcbiAgXCJcXHU0RTU5XCIsXG4gIFwiXFx1MkYwNVwiLFxuICBcIlxcdTRFODVcIixcbiAgXCJcXHUyRjA2XCIsXG4gIFwiXFx1NEU4Q1wiLFxuICBcIlxcdTJGMDdcIixcbiAgXCJcXHU0RUEwXCIsXG4gIFwiXFx1MkYwOFwiLFxuICBcIlxcdTRFQkFcIixcbiAgXCJcXHUyRjA5XCIsXG4gIFwiXFx1NTEzRlwiLFxuICBcIlxcdTJGMEFcIixcbiAgXCJcXHU1MTY1XCIsXG4gIFwiXFx1MkYwQlwiLFxuICBcIlxcdTUxNkJcIixcbiAgXCJcXHUyRjBDXCIsXG4gIFwiXFx1NTE4MlwiLFxuICBcIlxcdTJGMERcIixcbiAgXCJcXHU1MTk2XCIsXG4gIFwiXFx1MkYwRVwiLFxuICBcIlxcdTUxQUJcIixcbiAgXCJcXHUyRjBGXCIsXG4gIFwiXFx1NTFFMFwiLFxuICBcIlxcdTJGMTBcIixcbiAgXCJcXHU1MUY1XCIsXG4gIFwiXFx1MkYxMVwiLFxuICBcIlxcdTUyMDBcIixcbiAgXCJcXHUyRjEyXCIsXG4gIFwiXFx1NTI5QlwiLFxuICBcIlxcdTJGMTNcIixcbiAgXCJcXHU1MkY5XCIsXG4gIFwiXFx1MkYxNFwiLFxuICBcIlxcdTUzMTVcIixcbiAgXCJcXHUyRjE1XCIsXG4gIFwiXFx1NTMxQVwiLFxuICBcIlxcdTJGMTZcIixcbiAgXCJcXHU1MzM4XCIsXG4gIFwiXFx1MkYxN1wiLFxuICBcIlxcdTUzNDFcIixcbiAgXCJcXHUyRjE4XCIsXG4gIFwiXFx1NTM1Q1wiLFxuICBcIlxcdTJGMTlcIixcbiAgXCJcXHU1MzY5XCIsXG4gIFwiXFx1MkYxQVwiLFxuICBcIlxcdTUzODJcIixcbiAgXCJcXHUyRjFCXCIsXG4gIFwiXFx1NTNCNlwiLFxuICBcIlxcdTJGMUNcIixcbiAgXCJcXHU1M0M4XCIsXG4gIFwiXFx1MkYxRFwiLFxuICBcIlxcdTUzRTNcIixcbiAgXCJcXHUyRjFFXCIsXG4gIFwiXFx1NTZEN1wiLFxuICBcIlxcdTJGMUZcIixcbiAgXCJcXHU1NzFGXCIsXG4gIFwiXFx1MkYyMFwiLFxuICBcIlxcdTU4RUJcIixcbiAgXCJcXHUyRjIxXCIsXG4gIFwiXFx1NTkwMlwiLFxuICBcIlxcdTJGMjJcIixcbiAgXCJcXHU1OTBBXCIsXG4gIFwiXFx1MkYyM1wiLFxuICBcIlxcdTU5MTVcIixcbiAgXCJcXHUyRjI0XCIsXG4gIFwiXFx1NTkyN1wiLFxuICBcIlxcdTJGMjVcIixcbiAgXCJcXHU1OTczXCIsXG4gIFwiXFx1MkYyNlwiLFxuICBcIlxcdTVCNTBcIixcbiAgXCJcXHUyRjI3XCIsXG4gIFwiXFx1NUI4MFwiLFxuICBcIlxcdTJGMjhcIixcbiAgXCJcXHU1QkY4XCIsXG4gIFwiXFx1MkYyOVwiLFxuICBcIlxcdTVDMEZcIixcbiAgXCJcXHUyRjJBXCIsXG4gIFwiXFx1NUMyMlwiLFxuICBcIlxcdTJGMkJcIixcbiAgXCJcXHU1QzM4XCIsXG4gIFwiXFx1MkYyQ1wiLFxuICBcIlxcdTVDNkVcIixcbiAgXCJcXHUyRjJEXCIsXG4gIFwiXFx1NUM3MVwiLFxuICBcIlxcdTJGMkVcIixcbiAgXCJcXHU1RERCXCIsXG4gIFwiXFx1MkYyRlwiLFxuICBcIlxcdTVERTVcIixcbiAgXCJcXHUyRjMwXCIsXG4gIFwiXFx1NURGMVwiLFxuICBcIlxcdTJGMzFcIixcbiAgXCJcXHU1REZFXCIsXG4gIFwiXFx1MkYzMlwiLFxuICBcIlxcdTVFNzJcIixcbiAgXCJcXHUyRjMzXCIsXG4gIFwiXFx1NUU3QVwiLFxuICBcIlxcdTJGMzRcIixcbiAgXCJcXHU1RTdGXCIsXG4gIFwiXFx1MkYzNVwiLFxuICBcIlxcdTVFRjRcIixcbiAgXCJcXHUyRjM2XCIsXG4gIFwiXFx1NUVGRVwiLFxuICBcIlxcdTJGMzdcIixcbiAgXCJcXHU1RjBCXCIsXG4gIFwiXFx1MkYzOFwiLFxuICBcIlxcdTVGMTNcIixcbiAgXCJcXHUyRjM5XCIsXG4gIFwiXFx1NUY1MFwiLFxuICBcIlxcdTJGM0FcIixcbiAgXCJcXHU1RjYxXCIsXG4gIFwiXFx1MkYzQlwiLFxuICBcIlxcdTVGNzNcIixcbiAgXCJcXHUyRjNDXCIsXG4gIFwiXFx1NUZDM1wiLFxuICBcIlxcdTJGM0RcIixcbiAgXCJcXHU2MjA4XCIsXG4gIFwiXFx1MkYzRVwiLFxuICBcIlxcdTYyMzZcIixcbiAgXCJcXHUyRjNGXCIsXG4gIFwiXFx1NjI0QlwiLFxuICBcIlxcdTJGNDBcIixcbiAgXCJcXHU2NTJGXCIsXG4gIFwiXFx1MkY0MVwiLFxuICBcIlxcdTY1MzRcIixcbiAgXCJcXHUyRjQyXCIsXG4gIFwiXFx1NjU4N1wiLFxuICBcIlxcdTJGNDNcIixcbiAgXCJcXHU2NTk3XCIsXG4gIFwiXFx1MkY0NFwiLFxuICBcIlxcdTY1QTRcIixcbiAgXCJcXHUyRjQ1XCIsXG4gIFwiXFx1NjVCOVwiLFxuICBcIlxcdTJGNDZcIixcbiAgXCJcXHU2NUUwXCIsXG4gIFwiXFx1MkY0N1wiLFxuICBcIlxcdTY1RTVcIixcbiAgXCJcXHUyRjQ4XCIsXG4gIFwiXFx1NjZGMFwiLFxuICBcIlxcdTJGNDlcIixcbiAgXCJcXHU2NzA4XCIsXG4gIFwiXFx1MkY0QVwiLFxuICBcIlxcdTY3MjhcIixcbiAgXCJcXHUyRjRCXCIsXG4gIFwiXFx1NkIyMFwiLFxuICBcIlxcdTJGNENcIixcbiAgXCJcXHU2QjYyXCIsXG4gIFwiXFx1MkY0RFwiLFxuICBcIlxcdTZCNzlcIixcbiAgXCJcXHUyRjRFXCIsXG4gIFwiXFx1NkJCM1wiLFxuICBcIlxcdTJGNEZcIixcbiAgXCJcXHU2QkNCXCIsXG4gIFwiXFx1MkY1MFwiLFxuICBcIlxcdTZCRDRcIixcbiAgXCJcXHUyRjUxXCIsXG4gIFwiXFx1NkJEQlwiLFxuICBcIlxcdTJGNTJcIixcbiAgXCJcXHU2QzBGXCIsXG4gIFwiXFx1MkY1M1wiLFxuICBcIlxcdTZDMTRcIixcbiAgXCJcXHUyRjU0XCIsXG4gIFwiXFx1NkMzNFwiLFxuICBcIlxcdTJGNTVcIixcbiAgXCJcXHU3MDZCXCIsXG4gIFwiXFx1MkY1NlwiLFxuICBcIlxcdTcyMkFcIixcbiAgXCJcXHUyRjU3XCIsXG4gIFwiXFx1NzIzNlwiLFxuICBcIlxcdTJGNThcIixcbiAgXCJcXHU3MjNCXCIsXG4gIFwiXFx1MkY1OVwiLFxuICBcIlxcdTcyM0ZcIixcbiAgXCJcXHUyRjVBXCIsXG4gIFwiXFx1NzI0N1wiLFxuICBcIlxcdTJGNUJcIixcbiAgXCJcXHU3MjU5XCIsXG4gIFwiXFx1MkY1Q1wiLFxuICBcIlxcdTcyNUJcIixcbiAgXCJcXHUyRjVEXCIsXG4gIFwiXFx1NzJBQ1wiLFxuICBcIlxcdTJGNUVcIixcbiAgXCJcXHU3Mzg0XCIsXG4gIFwiXFx1MkY1RlwiLFxuICBcIlxcdTczODlcIixcbiAgXCJcXHUyRjYwXCIsXG4gIFwiXFx1NzREQ1wiLFxuICBcIlxcdTJGNjFcIixcbiAgXCJcXHU3NEU2XCIsXG4gIFwiXFx1MkY2MlwiLFxuICBcIlxcdTc1MThcIixcbiAgXCJcXHUyRjYzXCIsXG4gIFwiXFx1NzUxRlwiLFxuICBcIlxcdTJGNjRcIixcbiAgXCJcXHU3NTI4XCIsXG4gIFwiXFx1MkY2NVwiLFxuICBcIlxcdTc1MzBcIixcbiAgXCJcXHUyRjY2XCIsXG4gIFwiXFx1NzU4QlwiLFxuICBcIlxcdTJGNjdcIixcbiAgXCJcXHU3NTkyXCIsXG4gIFwiXFx1MkY2OFwiLFxuICBcIlxcdTc2NzZcIixcbiAgXCJcXHUyRjY5XCIsXG4gIFwiXFx1NzY3RFwiLFxuICBcIlxcdTJGNkFcIixcbiAgXCJcXHU3NkFFXCIsXG4gIFwiXFx1MkY2QlwiLFxuICBcIlxcdTc2QkZcIixcbiAgXCJcXHUyRjZDXCIsXG4gIFwiXFx1NzZFRVwiLFxuICBcIlxcdTJGNkRcIixcbiAgXCJcXHU3N0RCXCIsXG4gIFwiXFx1MkY2RVwiLFxuICBcIlxcdTc3RTJcIixcbiAgXCJcXHUyRjZGXCIsXG4gIFwiXFx1NzdGM1wiLFxuICBcIlxcdTJGNzBcIixcbiAgXCJcXHU3OTNBXCIsXG4gIFwiXFx1MkY3MVwiLFxuICBcIlxcdTc5QjhcIixcbiAgXCJcXHUyRjcyXCIsXG4gIFwiXFx1NzlCRVwiLFxuICBcIlxcdTJGNzNcIixcbiAgXCJcXHU3QTc0XCIsXG4gIFwiXFx1MkY3NFwiLFxuICBcIlxcdTdBQ0JcIixcbiAgXCJcXHUyRjc1XCIsXG4gIFwiXFx1N0FGOVwiLFxuICBcIlxcdTJGNzZcIixcbiAgXCJcXHU3QzczXCIsXG4gIFwiXFx1MkY3N1wiLFxuICBcIlxcdTdDRjhcIixcbiAgXCJcXHUyRjc4XCIsXG4gIFwiXFx1N0YzNlwiLFxuICBcIlxcdTJGNzlcIixcbiAgXCJcXHU3RjUxXCIsXG4gIFwiXFx1MkY3QVwiLFxuICBcIlxcdTdGOEFcIixcbiAgXCJcXHUyRjdCXCIsXG4gIFwiXFx1N0ZCRFwiLFxuICBcIlxcdTJGN0NcIixcbiAgXCJcXHU4MDAxXCIsXG4gIFwiXFx1MkY3RFwiLFxuICBcIlxcdTgwMENcIixcbiAgXCJcXHUyRjdFXCIsXG4gIFwiXFx1ODAxMlwiLFxuICBcIlxcdTJGN0ZcIixcbiAgXCJcXHU4MDMzXCIsXG4gIFwiXFx1MkY4MFwiLFxuICBcIlxcdTgwN0ZcIixcbiAgXCJcXHUyRjgxXCIsXG4gIFwiXFx1ODA4OVwiLFxuICBcIlxcdTJGODJcIixcbiAgXCJcXHU4MUUzXCIsXG4gIFwiXFx1MkY4M1wiLFxuICBcIlxcdTgxRUFcIixcbiAgXCJcXHUyRjg0XCIsXG4gIFwiXFx1ODFGM1wiLFxuICBcIlxcdTJGODVcIixcbiAgXCJcXHU4MUZDXCIsXG4gIFwiXFx1MkY4NlwiLFxuICBcIlxcdTgyMENcIixcbiAgXCJcXHUyRjg3XCIsXG4gIFwiXFx1ODIxQlwiLFxuICBcIlxcdTJGODhcIixcbiAgXCJcXHU4MjFGXCIsXG4gIFwiXFx1MkY4OVwiLFxuICBcIlxcdTgyNkVcIixcbiAgXCJcXHUyRjhBXCIsXG4gIFwiXFx1ODI3MlwiLFxuICBcIlxcdTJGOEJcIixcbiAgXCJcXHU4Mjc4XCIsXG4gIFwiXFx1MkY4Q1wiLFxuICBcIlxcdTg2NERcIixcbiAgXCJcXHUyRjhEXCIsXG4gIFwiXFx1ODY2QlwiLFxuICBcIlxcdTJGOEVcIixcbiAgXCJcXHU4ODQwXCIsXG4gIFwiXFx1MkY4RlwiLFxuICBcIlxcdTg4NENcIixcbiAgXCJcXHUyRjkwXCIsXG4gIFwiXFx1ODg2M1wiLFxuICBcIlxcdTJGOTFcIixcbiAgXCJcXHU4OTdFXCIsXG4gIFwiXFx1MkY5MlwiLFxuICBcIlxcdTg5OEJcIixcbiAgXCJcXHUyRjkzXCIsXG4gIFwiXFx1ODlEMlwiLFxuICBcIlxcdTJGOTRcIixcbiAgXCJcXHU4QTAwXCIsXG4gIFwiXFx1MkY5NVwiLFxuICBcIlxcdThDMzdcIixcbiAgXCJcXHUyRjk2XCIsXG4gIFwiXFx1OEM0NlwiLFxuICBcIlxcdTJGOTdcIixcbiAgXCJcXHU4QzU1XCIsXG4gIFwiXFx1MkY5OFwiLFxuICBcIlxcdThDNzhcIixcbiAgXCJcXHUyRjk5XCIsXG4gIFwiXFx1OEM5RFwiLFxuICBcIlxcdTJGOUFcIixcbiAgXCJcXHU4RDY0XCIsXG4gIFwiXFx1MkY5QlwiLFxuICBcIlxcdThENzBcIixcbiAgXCJcXHUyRjlDXCIsXG4gIFwiXFx1OERCM1wiLFxuICBcIlxcdTJGOURcIixcbiAgXCJcXHU4RUFCXCIsXG4gIFwiXFx1MkY5RVwiLFxuICBcIlxcdThFQ0FcIixcbiAgXCJcXHUyRjlGXCIsXG4gIFwiXFx1OEY5QlwiLFxuICBcIlxcdTJGQTBcIixcbiAgXCJcXHU4RkIwXCIsXG4gIFwiXFx1MkZBMVwiLFxuICBcIlxcdThGQjVcIixcbiAgXCJcXHUyRkEyXCIsXG4gIFwiXFx1OTA5MVwiLFxuICBcIlxcdTJGQTNcIixcbiAgXCJcXHU5MTQ5XCIsXG4gIFwiXFx1MkZBNFwiLFxuICBcIlxcdTkxQzZcIixcbiAgXCJcXHUyRkE1XCIsXG4gIFwiXFx1OTFDQ1wiLFxuICBcIlxcdTJGQTZcIixcbiAgXCJcXHU5MUQxXCIsXG4gIFwiXFx1MkZBN1wiLFxuICBcIlxcdTk1NzdcIixcbiAgXCJcXHUyRkE4XCIsXG4gIFwiXFx1OTU4MFwiLFxuICBcIlxcdTJGQTlcIixcbiAgXCJcXHU5NjFDXCIsXG4gIFwiXFx1MkZBQVwiLFxuICBcIlxcdTk2QjZcIixcbiAgXCJcXHUyRkFCXCIsXG4gIFwiXFx1OTZCOVwiLFxuICBcIlxcdTJGQUNcIixcbiAgXCJcXHU5NkU4XCIsXG4gIFwiXFx1MkZBRFwiLFxuICBcIlxcdTk3NTFcIixcbiAgXCJcXHUyRkFFXCIsXG4gIFwiXFx1OTc1RVwiLFxuICBcIlxcdTJGQUZcIixcbiAgXCJcXHU5NzYyXCIsXG4gIFwiXFx1MkZCMFwiLFxuICBcIlxcdTk3NjlcIixcbiAgXCJcXHUyRkIxXCIsXG4gIFwiXFx1OTdDQlwiLFxuICBcIlxcdTJGQjJcIixcbiAgXCJcXHU5N0VEXCIsXG4gIFwiXFx1MkZCM1wiLFxuICBcIlxcdTk3RjNcIixcbiAgXCJcXHUyRkI0XCIsXG4gIFwiXFx1OTgwMVwiLFxuICBcIlxcdTJGQjVcIixcbiAgXCJcXHU5OEE4XCIsXG4gIFwiXFx1MkZCNlwiLFxuICBcIlxcdTk4REJcIixcbiAgXCJcXHUyRkI3XCIsXG4gIFwiXFx1OThERlwiLFxuICBcIlxcdTJGQjhcIixcbiAgXCJcXHU5OTk2XCIsXG4gIFwiXFx1MkZCOVwiLFxuICBcIlxcdTk5OTlcIixcbiAgXCJcXHUyRkJBXCIsXG4gIFwiXFx1OTlBQ1wiLFxuICBcIlxcdTJGQkJcIixcbiAgXCJcXHU5QUE4XCIsXG4gIFwiXFx1MkZCQ1wiLFxuICBcIlxcdTlBRDhcIixcbiAgXCJcXHUyRkJEXCIsXG4gIFwiXFx1OUFERlwiLFxuICBcIlxcdTJGQkVcIixcbiAgXCJcXHU5QjI1XCIsXG4gIFwiXFx1MkZCRlwiLFxuICBcIlxcdTlCMkZcIixcbiAgXCJcXHUyRkMwXCIsXG4gIFwiXFx1OUIzMlwiLFxuICBcIlxcdTJGQzFcIixcbiAgXCJcXHU5QjNDXCIsXG4gIFwiXFx1MkZDMlwiLFxuICBcIlxcdTlCNUFcIixcbiAgXCJcXHUyRkMzXCIsXG4gIFwiXFx1OUNFNVwiLFxuICBcIlxcdTJGQzRcIixcbiAgXCJcXHU5RTc1XCIsXG4gIFwiXFx1MkZDNVwiLFxuICBcIlxcdTlFN0ZcIixcbiAgXCJcXHUyRkM2XCIsXG4gIFwiXFx1OUVBNVwiLFxuICBcIlxcdTJGQzdcIixcbiAgXCJcXHU5RUJCXCIsXG4gIFwiXFx1MkZDOFwiLFxuICBcIlxcdTlFQzNcIixcbiAgXCJcXHUyRkM5XCIsXG4gIFwiXFx1OUVDRFwiLFxuICBcIlxcdTJGQ0FcIixcbiAgXCJcXHU5RUQxXCIsXG4gIFwiXFx1MkZDQlwiLFxuICBcIlxcdTlFRjlcIixcbiAgXCJcXHUyRkNDXCIsXG4gIFwiXFx1OUVGRFwiLFxuICBcIlxcdTJGQ0RcIixcbiAgXCJcXHU5RjBFXCIsXG4gIFwiXFx1MkZDRVwiLFxuICBcIlxcdTlGMTNcIixcbiAgXCJcXHUyRkNGXCIsXG4gIFwiXFx1OUYyMFwiLFxuICBcIlxcdTJGRDBcIixcbiAgXCJcXHU5RjNCXCIsXG4gIFwiXFx1MkZEMVwiLFxuICBcIlxcdTlGNEFcIixcbiAgXCJcXHUyRkQyXCIsXG4gIFwiXFx1OUY1MlwiLFxuICBcIlxcdTJGRDNcIixcbiAgXCJcXHU5RjhEXCIsXG4gIFwiXFx1MkZENFwiLFxuICBcIlxcdTlGOUNcIixcbiAgXCJcXHUyRkQ1XCIsXG4gIFwiXFx1OUZBMFwiLFxuICBcIlxcdTMwMzZcIixcbiAgXCJcXHUzMDEyXCIsXG4gIFwiXFx1MzAzOFwiLFxuICBcIlxcdTUzNDFcIixcbiAgXCJcXHUzMDM5XCIsXG4gIFwiXFx1NTM0NFwiLFxuICBcIlxcdTMwM0FcIixcbiAgXCJcXHU1MzQ1XCIsXG4gIFwiXFx1MzA5QlwiLFxuICBcIlxcdTAwMjBcXHUzMDk5XCIsXG4gIFwiXFx1MzA5Q1wiLFxuICBcIlxcdTAwMjBcXHUzMDlBXCIsXG4gIFwiXFx1MzEzMVwiLFxuICBcIlxcdTExMDBcIixcbiAgXCJcXHUzMTMyXCIsXG4gIFwiXFx1MTEwMVwiLFxuICBcIlxcdTMxMzNcIixcbiAgXCJcXHUxMUFBXCIsXG4gIFwiXFx1MzEzNFwiLFxuICBcIlxcdTExMDJcIixcbiAgXCJcXHUzMTM1XCIsXG4gIFwiXFx1MTFBQ1wiLFxuICBcIlxcdTMxMzZcIixcbiAgXCJcXHUxMUFEXCIsXG4gIFwiXFx1MzEzN1wiLFxuICBcIlxcdTExMDNcIixcbiAgXCJcXHUzMTM4XCIsXG4gIFwiXFx1MTEwNFwiLFxuICBcIlxcdTMxMzlcIixcbiAgXCJcXHUxMTA1XCIsXG4gIFwiXFx1MzEzQVwiLFxuICBcIlxcdTExQjBcIixcbiAgXCJcXHUzMTNCXCIsXG4gIFwiXFx1MTFCMVwiLFxuICBcIlxcdTMxM0NcIixcbiAgXCJcXHUxMUIyXCIsXG4gIFwiXFx1MzEzRFwiLFxuICBcIlxcdTExQjNcIixcbiAgXCJcXHUzMTNFXCIsXG4gIFwiXFx1MTFCNFwiLFxuICBcIlxcdTMxM0ZcIixcbiAgXCJcXHUxMUI1XCIsXG4gIFwiXFx1MzE0MFwiLFxuICBcIlxcdTExMUFcIixcbiAgXCJcXHUzMTQxXCIsXG4gIFwiXFx1MTEwNlwiLFxuICBcIlxcdTMxNDJcIixcbiAgXCJcXHUxMTA3XCIsXG4gIFwiXFx1MzE0M1wiLFxuICBcIlxcdTExMDhcIixcbiAgXCJcXHUzMTQ0XCIsXG4gIFwiXFx1MTEyMVwiLFxuICBcIlxcdTMxNDVcIixcbiAgXCJcXHUxMTA5XCIsXG4gIFwiXFx1MzE0NlwiLFxuICBcIlxcdTExMEFcIixcbiAgXCJcXHUzMTQ3XCIsXG4gIFwiXFx1MTEwQlwiLFxuICBcIlxcdTMxNDhcIixcbiAgXCJcXHUxMTBDXCIsXG4gIFwiXFx1MzE0OVwiLFxuICBcIlxcdTExMERcIixcbiAgXCJcXHUzMTRBXCIsXG4gIFwiXFx1MTEwRVwiLFxuICBcIlxcdTMxNEJcIixcbiAgXCJcXHUxMTBGXCIsXG4gIFwiXFx1MzE0Q1wiLFxuICBcIlxcdTExMTBcIixcbiAgXCJcXHUzMTREXCIsXG4gIFwiXFx1MTExMVwiLFxuICBcIlxcdTMxNEVcIixcbiAgXCJcXHUxMTEyXCIsXG4gIFwiXFx1MzE0RlwiLFxuICBcIlxcdTExNjFcIixcbiAgXCJcXHUzMTUwXCIsXG4gIFwiXFx1MTE2MlwiLFxuICBcIlxcdTMxNTFcIixcbiAgXCJcXHUxMTYzXCIsXG4gIFwiXFx1MzE1MlwiLFxuICBcIlxcdTExNjRcIixcbiAgXCJcXHUzMTUzXCIsXG4gIFwiXFx1MTE2NVwiLFxuICBcIlxcdTMxNTRcIixcbiAgXCJcXHUxMTY2XCIsXG4gIFwiXFx1MzE1NVwiLFxuICBcIlxcdTExNjdcIixcbiAgXCJcXHUzMTU2XCIsXG4gIFwiXFx1MTE2OFwiLFxuICBcIlxcdTMxNTdcIixcbiAgXCJcXHUxMTY5XCIsXG4gIFwiXFx1MzE1OFwiLFxuICBcIlxcdTExNkFcIixcbiAgXCJcXHUzMTU5XCIsXG4gIFwiXFx1MTE2QlwiLFxuICBcIlxcdTMxNUFcIixcbiAgXCJcXHUxMTZDXCIsXG4gIFwiXFx1MzE1QlwiLFxuICBcIlxcdTExNkRcIixcbiAgXCJcXHUzMTVDXCIsXG4gIFwiXFx1MTE2RVwiLFxuICBcIlxcdTMxNURcIixcbiAgXCJcXHUxMTZGXCIsXG4gIFwiXFx1MzE1RVwiLFxuICBcIlxcdTExNzBcIixcbiAgXCJcXHUzMTVGXCIsXG4gIFwiXFx1MTE3MVwiLFxuICBcIlxcdTMxNjBcIixcbiAgXCJcXHUxMTcyXCIsXG4gIFwiXFx1MzE2MVwiLFxuICBcIlxcdTExNzNcIixcbiAgXCJcXHUzMTYyXCIsXG4gIFwiXFx1MTE3NFwiLFxuICBcIlxcdTMxNjNcIixcbiAgXCJcXHUxMTc1XCIsXG4gIFwiXFx1MzE2NFwiLFxuICBcIlxcdTExNjBcIixcbiAgXCJcXHUzMTY1XCIsXG4gIFwiXFx1MTExNFwiLFxuICBcIlxcdTMxNjZcIixcbiAgXCJcXHUxMTE1XCIsXG4gIFwiXFx1MzE2N1wiLFxuICBcIlxcdTExQzdcIixcbiAgXCJcXHUzMTY4XCIsXG4gIFwiXFx1MTFDOFwiLFxuICBcIlxcdTMxNjlcIixcbiAgXCJcXHUxMUNDXCIsXG4gIFwiXFx1MzE2QVwiLFxuICBcIlxcdTExQ0VcIixcbiAgXCJcXHUzMTZCXCIsXG4gIFwiXFx1MTFEM1wiLFxuICBcIlxcdTMxNkNcIixcbiAgXCJcXHUxMUQ3XCIsXG4gIFwiXFx1MzE2RFwiLFxuICBcIlxcdTExRDlcIixcbiAgXCJcXHUzMTZFXCIsXG4gIFwiXFx1MTExQ1wiLFxuICBcIlxcdTMxNkZcIixcbiAgXCJcXHUxMUREXCIsXG4gIFwiXFx1MzE3MFwiLFxuICBcIlxcdTExREZcIixcbiAgXCJcXHUzMTcxXCIsXG4gIFwiXFx1MTExRFwiLFxuICBcIlxcdTMxNzJcIixcbiAgXCJcXHUxMTFFXCIsXG4gIFwiXFx1MzE3M1wiLFxuICBcIlxcdTExMjBcIixcbiAgXCJcXHUzMTc0XCIsXG4gIFwiXFx1MTEyMlwiLFxuICBcIlxcdTMxNzVcIixcbiAgXCJcXHUxMTIzXCIsXG4gIFwiXFx1MzE3NlwiLFxuICBcIlxcdTExMjdcIixcbiAgXCJcXHUzMTc3XCIsXG4gIFwiXFx1MTEyOVwiLFxuICBcIlxcdTMxNzhcIixcbiAgXCJcXHUxMTJCXCIsXG4gIFwiXFx1MzE3OVwiLFxuICBcIlxcdTExMkNcIixcbiAgXCJcXHUzMTdBXCIsXG4gIFwiXFx1MTEyRFwiLFxuICBcIlxcdTMxN0JcIixcbiAgXCJcXHUxMTJFXCIsXG4gIFwiXFx1MzE3Q1wiLFxuICBcIlxcdTExMkZcIixcbiAgXCJcXHUzMTdEXCIsXG4gIFwiXFx1MTEzMlwiLFxuICBcIlxcdTMxN0VcIixcbiAgXCJcXHUxMTM2XCIsXG4gIFwiXFx1MzE3RlwiLFxuICBcIlxcdTExNDBcIixcbiAgXCJcXHUzMTgwXCIsXG4gIFwiXFx1MTE0N1wiLFxuICBcIlxcdTMxODFcIixcbiAgXCJcXHUxMTRDXCIsXG4gIFwiXFx1MzE4MlwiLFxuICBcIlxcdTExRjFcIixcbiAgXCJcXHUzMTgzXCIsXG4gIFwiXFx1MTFGMlwiLFxuICBcIlxcdTMxODRcIixcbiAgXCJcXHUxMTU3XCIsXG4gIFwiXFx1MzE4NVwiLFxuICBcIlxcdTExNThcIixcbiAgXCJcXHUzMTg2XCIsXG4gIFwiXFx1MTE1OVwiLFxuICBcIlxcdTMxODdcIixcbiAgXCJcXHUxMTg0XCIsXG4gIFwiXFx1MzE4OFwiLFxuICBcIlxcdTExODVcIixcbiAgXCJcXHUzMTg5XCIsXG4gIFwiXFx1MTE4OFwiLFxuICBcIlxcdTMxOEFcIixcbiAgXCJcXHUxMTkxXCIsXG4gIFwiXFx1MzE4QlwiLFxuICBcIlxcdTExOTJcIixcbiAgXCJcXHUzMThDXCIsXG4gIFwiXFx1MTE5NFwiLFxuICBcIlxcdTMxOERcIixcbiAgXCJcXHUxMTlFXCIsXG4gIFwiXFx1MzE4RVwiLFxuICBcIlxcdTExQTFcIixcbiAgXCJcXHUzMjAwXCIsXG4gIFwiXFx1MDAyOFxcdTExMDBcXHUwMDI5XCIsXG4gIFwiXFx1MzIwMVwiLFxuICBcIlxcdTAwMjhcXHUxMTAyXFx1MDAyOVwiLFxuICBcIlxcdTMyMDJcIixcbiAgXCJcXHUwMDI4XFx1MTEwM1xcdTAwMjlcIixcbiAgXCJcXHUzMjAzXCIsXG4gIFwiXFx1MDAyOFxcdTExMDVcXHUwMDI5XCIsXG4gIFwiXFx1MzIwNFwiLFxuICBcIlxcdTAwMjhcXHUxMTA2XFx1MDAyOVwiLFxuICBcIlxcdTMyMDVcIixcbiAgXCJcXHUwMDI4XFx1MTEwN1xcdTAwMjlcIixcbiAgXCJcXHUzMjA2XCIsXG4gIFwiXFx1MDAyOFxcdTExMDlcXHUwMDI5XCIsXG4gIFwiXFx1MzIwN1wiLFxuICBcIlxcdTAwMjhcXHUxMTBCXFx1MDAyOVwiLFxuICBcIlxcdTMyMDhcIixcbiAgXCJcXHUwMDI4XFx1MTEwQ1xcdTAwMjlcIixcbiAgXCJcXHUzMjA5XCIsXG4gIFwiXFx1MDAyOFxcdTExMEVcXHUwMDI5XCIsXG4gIFwiXFx1MzIwQVwiLFxuICBcIlxcdTAwMjhcXHUxMTBGXFx1MDAyOVwiLFxuICBcIlxcdTMyMEJcIixcbiAgXCJcXHUwMDI4XFx1MTExMFxcdTAwMjlcIixcbiAgXCJcXHUzMjBDXCIsXG4gIFwiXFx1MDAyOFxcdTExMTFcXHUwMDI5XCIsXG4gIFwiXFx1MzIwRFwiLFxuICBcIlxcdTAwMjhcXHUxMTEyXFx1MDAyOVwiLFxuICBcIlxcdTMyMEVcIixcbiAgXCJcXHUwMDI4XFx1MTEwMFxcdTExNjFcXHUwMDI5XCIsXG4gIFwiXFx1MzIwRlwiLFxuICBcIlxcdTAwMjhcXHUxMTAyXFx1MTE2MVxcdTAwMjlcIixcbiAgXCJcXHUzMjEwXCIsXG4gIFwiXFx1MDAyOFxcdTExMDNcXHUxMTYxXFx1MDAyOVwiLFxuICBcIlxcdTMyMTFcIixcbiAgXCJcXHUwMDI4XFx1MTEwNVxcdTExNjFcXHUwMDI5XCIsXG4gIFwiXFx1MzIxMlwiLFxuICBcIlxcdTAwMjhcXHUxMTA2XFx1MTE2MVxcdTAwMjlcIixcbiAgXCJcXHUzMjEzXCIsXG4gIFwiXFx1MDAyOFxcdTExMDdcXHUxMTYxXFx1MDAyOVwiLFxuICBcIlxcdTMyMTRcIixcbiAgXCJcXHUwMDI4XFx1MTEwOVxcdTExNjFcXHUwMDI5XCIsXG4gIFwiXFx1MzIxNVwiLFxuICBcIlxcdTAwMjhcXHUxMTBCXFx1MTE2MVxcdTAwMjlcIixcbiAgXCJcXHUzMjE2XCIsXG4gIFwiXFx1MDAyOFxcdTExMENcXHUxMTYxXFx1MDAyOVwiLFxuICBcIlxcdTMyMTdcIixcbiAgXCJcXHUwMDI4XFx1MTEwRVxcdTExNjFcXHUwMDI5XCIsXG4gIFwiXFx1MzIxOFwiLFxuICBcIlxcdTAwMjhcXHUxMTBGXFx1MTE2MVxcdTAwMjlcIixcbiAgXCJcXHUzMjE5XCIsXG4gIFwiXFx1MDAyOFxcdTExMTBcXHUxMTYxXFx1MDAyOVwiLFxuICBcIlxcdTMyMUFcIixcbiAgXCJcXHUwMDI4XFx1MTExMVxcdTExNjFcXHUwMDI5XCIsXG4gIFwiXFx1MzIxQlwiLFxuICBcIlxcdTAwMjhcXHUxMTEyXFx1MTE2MVxcdTAwMjlcIixcbiAgXCJcXHUzMjFDXCIsXG4gIFwiXFx1MDAyOFxcdTExMENcXHUxMTZFXFx1MDAyOVwiLFxuICBcIlxcdTMyMURcIixcbiAgXCJcXHUwMDI4XFx1MTEwQlxcdTExNjlcXHUxMTBDXFx1MTE2NVxcdTExQUJcXHUwMDI5XCIsXG4gIFwiXFx1MzIxRVwiLFxuICBcIlxcdTAwMjhcXHUxMTBCXFx1MTE2OVxcdTExMTJcXHUxMTZFXFx1MDAyOVwiLFxuICBcIlxcdTMyMjBcIixcbiAgXCJcXHUwMDI4XFx1NEUwMFxcdTAwMjlcIixcbiAgXCJcXHUzMjIxXCIsXG4gIFwiXFx1MDAyOFxcdTRFOENcXHUwMDI5XCIsXG4gIFwiXFx1MzIyMlwiLFxuICBcIlxcdTAwMjhcXHU0RTA5XFx1MDAyOVwiLFxuICBcIlxcdTMyMjNcIixcbiAgXCJcXHUwMDI4XFx1NTZEQlxcdTAwMjlcIixcbiAgXCJcXHUzMjI0XCIsXG4gIFwiXFx1MDAyOFxcdTRFOTRcXHUwMDI5XCIsXG4gIFwiXFx1MzIyNVwiLFxuICBcIlxcdTAwMjhcXHU1MTZEXFx1MDAyOVwiLFxuICBcIlxcdTMyMjZcIixcbiAgXCJcXHUwMDI4XFx1NEUwM1xcdTAwMjlcIixcbiAgXCJcXHUzMjI3XCIsXG4gIFwiXFx1MDAyOFxcdTUxNkJcXHUwMDI5XCIsXG4gIFwiXFx1MzIyOFwiLFxuICBcIlxcdTAwMjhcXHU0RTVEXFx1MDAyOVwiLFxuICBcIlxcdTMyMjlcIixcbiAgXCJcXHUwMDI4XFx1NTM0MVxcdTAwMjlcIixcbiAgXCJcXHUzMjJBXCIsXG4gIFwiXFx1MDAyOFxcdTY3MDhcXHUwMDI5XCIsXG4gIFwiXFx1MzIyQlwiLFxuICBcIlxcdTAwMjhcXHU3MDZCXFx1MDAyOVwiLFxuICBcIlxcdTMyMkNcIixcbiAgXCJcXHUwMDI4XFx1NkMzNFxcdTAwMjlcIixcbiAgXCJcXHUzMjJEXCIsXG4gIFwiXFx1MDAyOFxcdTY3MjhcXHUwMDI5XCIsXG4gIFwiXFx1MzIyRVwiLFxuICBcIlxcdTAwMjhcXHU5MUQxXFx1MDAyOVwiLFxuICBcIlxcdTMyMkZcIixcbiAgXCJcXHUwMDI4XFx1NTcxRlxcdTAwMjlcIixcbiAgXCJcXHUzMjMwXCIsXG4gIFwiXFx1MDAyOFxcdTY1RTVcXHUwMDI5XCIsXG4gIFwiXFx1MzIzMVwiLFxuICBcIlxcdTAwMjhcXHU2ODJBXFx1MDAyOVwiLFxuICBcIlxcdTMyMzJcIixcbiAgXCJcXHUwMDI4XFx1NjcwOVxcdTAwMjlcIixcbiAgXCJcXHUzMjMzXCIsXG4gIFwiXFx1MDAyOFxcdTc5M0VcXHUwMDI5XCIsXG4gIFwiXFx1MzIzNFwiLFxuICBcIlxcdTAwMjhcXHU1NDBEXFx1MDAyOVwiLFxuICBcIlxcdTMyMzVcIixcbiAgXCJcXHUwMDI4XFx1NzI3OVxcdTAwMjlcIixcbiAgXCJcXHUzMjM2XCIsXG4gIFwiXFx1MDAyOFxcdThDQTFcXHUwMDI5XCIsXG4gIFwiXFx1MzIzN1wiLFxuICBcIlxcdTAwMjhcXHU3OTVEXFx1MDAyOVwiLFxuICBcIlxcdTMyMzhcIixcbiAgXCJcXHUwMDI4XFx1NTJCNFxcdTAwMjlcIixcbiAgXCJcXHUzMjM5XCIsXG4gIFwiXFx1MDAyOFxcdTRFRTNcXHUwMDI5XCIsXG4gIFwiXFx1MzIzQVwiLFxuICBcIlxcdTAwMjhcXHU1NDdDXFx1MDAyOVwiLFxuICBcIlxcdTMyM0JcIixcbiAgXCJcXHUwMDI4XFx1NUI2NlxcdTAwMjlcIixcbiAgXCJcXHUzMjNDXCIsXG4gIFwiXFx1MDAyOFxcdTc2RTNcXHUwMDI5XCIsXG4gIFwiXFx1MzIzRFwiLFxuICBcIlxcdTAwMjhcXHU0RjAxXFx1MDAyOVwiLFxuICBcIlxcdTMyM0VcIixcbiAgXCJcXHUwMDI4XFx1OENDN1xcdTAwMjlcIixcbiAgXCJcXHUzMjNGXCIsXG4gIFwiXFx1MDAyOFxcdTUzNTRcXHUwMDI5XCIsXG4gIFwiXFx1MzI0MFwiLFxuICBcIlxcdTAwMjhcXHU3OTZEXFx1MDAyOVwiLFxuICBcIlxcdTMyNDFcIixcbiAgXCJcXHUwMDI4XFx1NEYxMVxcdTAwMjlcIixcbiAgXCJcXHUzMjQyXCIsXG4gIFwiXFx1MDAyOFxcdTgxRUFcXHUwMDI5XCIsXG4gIFwiXFx1MzI0M1wiLFxuICBcIlxcdTAwMjhcXHU4MUYzXFx1MDAyOVwiLFxuICBcIlxcdTMyQzBcIixcbiAgXCJcXHUwMDMxXFx1NjcwOFwiLFxuICBcIlxcdTMyQzFcIixcbiAgXCJcXHUwMDMyXFx1NjcwOFwiLFxuICBcIlxcdTMyQzJcIixcbiAgXCJcXHUwMDMzXFx1NjcwOFwiLFxuICBcIlxcdTMyQzNcIixcbiAgXCJcXHUwMDM0XFx1NjcwOFwiLFxuICBcIlxcdTMyQzRcIixcbiAgXCJcXHUwMDM1XFx1NjcwOFwiLFxuICBcIlxcdTMyQzVcIixcbiAgXCJcXHUwMDM2XFx1NjcwOFwiLFxuICBcIlxcdTMyQzZcIixcbiAgXCJcXHUwMDM3XFx1NjcwOFwiLFxuICBcIlxcdTMyQzdcIixcbiAgXCJcXHUwMDM4XFx1NjcwOFwiLFxuICBcIlxcdTMyQzhcIixcbiAgXCJcXHUwMDM5XFx1NjcwOFwiLFxuICBcIlxcdTMyQzlcIixcbiAgXCJcXHUwMDMxXFx1MDAzMFxcdTY3MDhcIixcbiAgXCJcXHUzMkNBXCIsXG4gIFwiXFx1MDAzMVxcdTAwMzFcXHU2NzA4XCIsXG4gIFwiXFx1MzJDQlwiLFxuICBcIlxcdTAwMzFcXHUwMDMyXFx1NjcwOFwiLFxuICBcIlxcdTMzNThcIixcbiAgXCJcXHUwMDMwXFx1NzBCOVwiLFxuICBcIlxcdTMzNTlcIixcbiAgXCJcXHUwMDMxXFx1NzBCOVwiLFxuICBcIlxcdTMzNUFcIixcbiAgXCJcXHUwMDMyXFx1NzBCOVwiLFxuICBcIlxcdTMzNUJcIixcbiAgXCJcXHUwMDMzXFx1NzBCOVwiLFxuICBcIlxcdTMzNUNcIixcbiAgXCJcXHUwMDM0XFx1NzBCOVwiLFxuICBcIlxcdTMzNURcIixcbiAgXCJcXHUwMDM1XFx1NzBCOVwiLFxuICBcIlxcdTMzNUVcIixcbiAgXCJcXHUwMDM2XFx1NzBCOVwiLFxuICBcIlxcdTMzNUZcIixcbiAgXCJcXHUwMDM3XFx1NzBCOVwiLFxuICBcIlxcdTMzNjBcIixcbiAgXCJcXHUwMDM4XFx1NzBCOVwiLFxuICBcIlxcdTMzNjFcIixcbiAgXCJcXHUwMDM5XFx1NzBCOVwiLFxuICBcIlxcdTMzNjJcIixcbiAgXCJcXHUwMDMxXFx1MDAzMFxcdTcwQjlcIixcbiAgXCJcXHUzMzYzXCIsXG4gIFwiXFx1MDAzMVxcdTAwMzFcXHU3MEI5XCIsXG4gIFwiXFx1MzM2NFwiLFxuICBcIlxcdTAwMzFcXHUwMDMyXFx1NzBCOVwiLFxuICBcIlxcdTMzNjVcIixcbiAgXCJcXHUwMDMxXFx1MDAzM1xcdTcwQjlcIixcbiAgXCJcXHUzMzY2XCIsXG4gIFwiXFx1MDAzMVxcdTAwMzRcXHU3MEI5XCIsXG4gIFwiXFx1MzM2N1wiLFxuICBcIlxcdTAwMzFcXHUwMDM1XFx1NzBCOVwiLFxuICBcIlxcdTMzNjhcIixcbiAgXCJcXHUwMDMxXFx1MDAzNlxcdTcwQjlcIixcbiAgXCJcXHUzMzY5XCIsXG4gIFwiXFx1MDAzMVxcdTAwMzdcXHU3MEI5XCIsXG4gIFwiXFx1MzM2QVwiLFxuICBcIlxcdTAwMzFcXHUwMDM4XFx1NzBCOVwiLFxuICBcIlxcdTMzNkJcIixcbiAgXCJcXHUwMDMxXFx1MDAzOVxcdTcwQjlcIixcbiAgXCJcXHUzMzZDXCIsXG4gIFwiXFx1MDAzMlxcdTAwMzBcXHU3MEI5XCIsXG4gIFwiXFx1MzM2RFwiLFxuICBcIlxcdTAwMzJcXHUwMDMxXFx1NzBCOVwiLFxuICBcIlxcdTMzNkVcIixcbiAgXCJcXHUwMDMyXFx1MDAzMlxcdTcwQjlcIixcbiAgXCJcXHUzMzZGXCIsXG4gIFwiXFx1MDAzMlxcdTAwMzNcXHU3MEI5XCIsXG4gIFwiXFx1MzM3MFwiLFxuICBcIlxcdTAwMzJcXHUwMDM0XFx1NzBCOVwiLFxuICBcIlxcdTMzRTBcIixcbiAgXCJcXHUwMDMxXFx1NjVFNVwiLFxuICBcIlxcdTMzRTFcIixcbiAgXCJcXHUwMDMyXFx1NjVFNVwiLFxuICBcIlxcdTMzRTJcIixcbiAgXCJcXHUwMDMzXFx1NjVFNVwiLFxuICBcIlxcdTMzRTNcIixcbiAgXCJcXHUwMDM0XFx1NjVFNVwiLFxuICBcIlxcdTMzRTRcIixcbiAgXCJcXHUwMDM1XFx1NjVFNVwiLFxuICBcIlxcdTMzRTVcIixcbiAgXCJcXHUwMDM2XFx1NjVFNVwiLFxuICBcIlxcdTMzRTZcIixcbiAgXCJcXHUwMDM3XFx1NjVFNVwiLFxuICBcIlxcdTMzRTdcIixcbiAgXCJcXHUwMDM4XFx1NjVFNVwiLFxuICBcIlxcdTMzRThcIixcbiAgXCJcXHUwMDM5XFx1NjVFNVwiLFxuICBcIlxcdTMzRTlcIixcbiAgXCJcXHUwMDMxXFx1MDAzMFxcdTY1RTVcIixcbiAgXCJcXHUzM0VBXCIsXG4gIFwiXFx1MDAzMVxcdTAwMzFcXHU2NUU1XCIsXG4gIFwiXFx1MzNFQlwiLFxuICBcIlxcdTAwMzFcXHUwMDMyXFx1NjVFNVwiLFxuICBcIlxcdTMzRUNcIixcbiAgXCJcXHUwMDMxXFx1MDAzM1xcdTY1RTVcIixcbiAgXCJcXHUzM0VEXCIsXG4gIFwiXFx1MDAzMVxcdTAwMzRcXHU2NUU1XCIsXG4gIFwiXFx1MzNFRVwiLFxuICBcIlxcdTAwMzFcXHUwMDM1XFx1NjVFNVwiLFxuICBcIlxcdTMzRUZcIixcbiAgXCJcXHUwMDMxXFx1MDAzNlxcdTY1RTVcIixcbiAgXCJcXHUzM0YwXCIsXG4gIFwiXFx1MDAzMVxcdTAwMzdcXHU2NUU1XCIsXG4gIFwiXFx1MzNGMVwiLFxuICBcIlxcdTAwMzFcXHUwMDM4XFx1NjVFNVwiLFxuICBcIlxcdTMzRjJcIixcbiAgXCJcXHUwMDMxXFx1MDAzOVxcdTY1RTVcIixcbiAgXCJcXHUzM0YzXCIsXG4gIFwiXFx1MDAzMlxcdTAwMzBcXHU2NUU1XCIsXG4gIFwiXFx1MzNGNFwiLFxuICBcIlxcdTAwMzJcXHUwMDMxXFx1NjVFNVwiLFxuICBcIlxcdTMzRjVcIixcbiAgXCJcXHUwMDMyXFx1MDAzMlxcdTY1RTVcIixcbiAgXCJcXHUzM0Y2XCIsXG4gIFwiXFx1MDAzMlxcdTAwMzNcXHU2NUU1XCIsXG4gIFwiXFx1MzNGN1wiLFxuICBcIlxcdTAwMzJcXHUwMDM0XFx1NjVFNVwiLFxuICBcIlxcdTMzRjhcIixcbiAgXCJcXHUwMDMyXFx1MDAzNVxcdTY1RTVcIixcbiAgXCJcXHUzM0Y5XCIsXG4gIFwiXFx1MDAzMlxcdTAwMzZcXHU2NUU1XCIsXG4gIFwiXFx1MzNGQVwiLFxuICBcIlxcdTAwMzJcXHUwMDM3XFx1NjVFNVwiLFxuICBcIlxcdTMzRkJcIixcbiAgXCJcXHUwMDMyXFx1MDAzOFxcdTY1RTVcIixcbiAgXCJcXHUzM0ZDXCIsXG4gIFwiXFx1MDAzMlxcdTAwMzlcXHU2NUU1XCIsXG4gIFwiXFx1MzNGRFwiLFxuICBcIlxcdTAwMzNcXHUwMDMwXFx1NjVFNVwiLFxuICBcIlxcdTMzRkVcIixcbiAgXCJcXHUwMDMzXFx1MDAzMVxcdTY1RTVcIixcbiAgXCJcXHVGQjAwXCIsXG4gIFwiXFx1MDA2NlxcdTAwNjZcIixcbiAgXCJcXHVGQjAxXCIsXG4gIFwiXFx1MDA2NlxcdTAwNjlcIixcbiAgXCJcXHVGQjAyXCIsXG4gIFwiXFx1MDA2NlxcdTAwNkNcIixcbiAgXCJcXHVGQjAzXCIsXG4gIFwiXFx1MDA2NlxcdTAwNjZcXHUwMDY5XCIsXG4gIFwiXFx1RkIwNFwiLFxuICBcIlxcdTAwNjZcXHUwMDY2XFx1MDA2Q1wiLFxuICBcIlxcdUZCMDVcIixcbiAgXCJcXHUwMTdGXFx1MDA3NFwiLFxuICBcIlxcdUZCMDZcIixcbiAgXCJcXHUwMDczXFx1MDA3NFwiLFxuICBcIlxcdUZCMTNcIixcbiAgXCJcXHUwNTc0XFx1MDU3NlwiLFxuICBcIlxcdUZCMTRcIixcbiAgXCJcXHUwNTc0XFx1MDU2NVwiLFxuICBcIlxcdUZCMTVcIixcbiAgXCJcXHUwNTc0XFx1MDU2QlwiLFxuICBcIlxcdUZCMTZcIixcbiAgXCJcXHUwNTdFXFx1MDU3NlwiLFxuICBcIlxcdUZCMTdcIixcbiAgXCJcXHUwNTc0XFx1MDU2RFwiLFxuICBcIlxcdUZCNEZcIixcbiAgXCJcXHUwNUQwXFx1MDVEQ1wiLFxuICBcIlxcdUZCNTBcIixcbiAgXCJcXHUwNjcxXCIsXG4gIFwiXFx1RkI1MVwiLFxuICBcIlxcdTA2NzFcIixcbiAgXCJcXHVGQjUyXCIsXG4gIFwiXFx1MDY3QlwiLFxuICBcIlxcdUZCNTNcIixcbiAgXCJcXHUwNjdCXCIsXG4gIFwiXFx1RkI1NFwiLFxuICBcIlxcdTA2N0JcIixcbiAgXCJcXHVGQjU1XCIsXG4gIFwiXFx1MDY3QlwiLFxuICBcIlxcdUZCNTZcIixcbiAgXCJcXHUwNjdFXCIsXG4gIFwiXFx1RkI1N1wiLFxuICBcIlxcdTA2N0VcIixcbiAgXCJcXHVGQjU4XCIsXG4gIFwiXFx1MDY3RVwiLFxuICBcIlxcdUZCNTlcIixcbiAgXCJcXHUwNjdFXCIsXG4gIFwiXFx1RkI1QVwiLFxuICBcIlxcdTA2ODBcIixcbiAgXCJcXHVGQjVCXCIsXG4gIFwiXFx1MDY4MFwiLFxuICBcIlxcdUZCNUNcIixcbiAgXCJcXHUwNjgwXCIsXG4gIFwiXFx1RkI1RFwiLFxuICBcIlxcdTA2ODBcIixcbiAgXCJcXHVGQjVFXCIsXG4gIFwiXFx1MDY3QVwiLFxuICBcIlxcdUZCNUZcIixcbiAgXCJcXHUwNjdBXCIsXG4gIFwiXFx1RkI2MFwiLFxuICBcIlxcdTA2N0FcIixcbiAgXCJcXHVGQjYxXCIsXG4gIFwiXFx1MDY3QVwiLFxuICBcIlxcdUZCNjJcIixcbiAgXCJcXHUwNjdGXCIsXG4gIFwiXFx1RkI2M1wiLFxuICBcIlxcdTA2N0ZcIixcbiAgXCJcXHVGQjY0XCIsXG4gIFwiXFx1MDY3RlwiLFxuICBcIlxcdUZCNjVcIixcbiAgXCJcXHUwNjdGXCIsXG4gIFwiXFx1RkI2NlwiLFxuICBcIlxcdTA2NzlcIixcbiAgXCJcXHVGQjY3XCIsXG4gIFwiXFx1MDY3OVwiLFxuICBcIlxcdUZCNjhcIixcbiAgXCJcXHUwNjc5XCIsXG4gIFwiXFx1RkI2OVwiLFxuICBcIlxcdTA2NzlcIixcbiAgXCJcXHVGQjZBXCIsXG4gIFwiXFx1MDZBNFwiLFxuICBcIlxcdUZCNkJcIixcbiAgXCJcXHUwNkE0XCIsXG4gIFwiXFx1RkI2Q1wiLFxuICBcIlxcdTA2QTRcIixcbiAgXCJcXHVGQjZEXCIsXG4gIFwiXFx1MDZBNFwiLFxuICBcIlxcdUZCNkVcIixcbiAgXCJcXHUwNkE2XCIsXG4gIFwiXFx1RkI2RlwiLFxuICBcIlxcdTA2QTZcIixcbiAgXCJcXHVGQjcwXCIsXG4gIFwiXFx1MDZBNlwiLFxuICBcIlxcdUZCNzFcIixcbiAgXCJcXHUwNkE2XCIsXG4gIFwiXFx1RkI3MlwiLFxuICBcIlxcdTA2ODRcIixcbiAgXCJcXHVGQjczXCIsXG4gIFwiXFx1MDY4NFwiLFxuICBcIlxcdUZCNzRcIixcbiAgXCJcXHUwNjg0XCIsXG4gIFwiXFx1RkI3NVwiLFxuICBcIlxcdTA2ODRcIixcbiAgXCJcXHVGQjc2XCIsXG4gIFwiXFx1MDY4M1wiLFxuICBcIlxcdUZCNzdcIixcbiAgXCJcXHUwNjgzXCIsXG4gIFwiXFx1RkI3OFwiLFxuICBcIlxcdTA2ODNcIixcbiAgXCJcXHVGQjc5XCIsXG4gIFwiXFx1MDY4M1wiLFxuICBcIlxcdUZCN0FcIixcbiAgXCJcXHUwNjg2XCIsXG4gIFwiXFx1RkI3QlwiLFxuICBcIlxcdTA2ODZcIixcbiAgXCJcXHVGQjdDXCIsXG4gIFwiXFx1MDY4NlwiLFxuICBcIlxcdUZCN0RcIixcbiAgXCJcXHUwNjg2XCIsXG4gIFwiXFx1RkI3RVwiLFxuICBcIlxcdTA2ODdcIixcbiAgXCJcXHVGQjdGXCIsXG4gIFwiXFx1MDY4N1wiLFxuICBcIlxcdUZCODBcIixcbiAgXCJcXHUwNjg3XCIsXG4gIFwiXFx1RkI4MVwiLFxuICBcIlxcdTA2ODdcIixcbiAgXCJcXHVGQjgyXCIsXG4gIFwiXFx1MDY4RFwiLFxuICBcIlxcdUZCODNcIixcbiAgXCJcXHUwNjhEXCIsXG4gIFwiXFx1RkI4NFwiLFxuICBcIlxcdTA2OENcIixcbiAgXCJcXHVGQjg1XCIsXG4gIFwiXFx1MDY4Q1wiLFxuICBcIlxcdUZCODZcIixcbiAgXCJcXHUwNjhFXCIsXG4gIFwiXFx1RkI4N1wiLFxuICBcIlxcdTA2OEVcIixcbiAgXCJcXHVGQjg4XCIsXG4gIFwiXFx1MDY4OFwiLFxuICBcIlxcdUZCODlcIixcbiAgXCJcXHUwNjg4XCIsXG4gIFwiXFx1RkI4QVwiLFxuICBcIlxcdTA2OThcIixcbiAgXCJcXHVGQjhCXCIsXG4gIFwiXFx1MDY5OFwiLFxuICBcIlxcdUZCOENcIixcbiAgXCJcXHUwNjkxXCIsXG4gIFwiXFx1RkI4RFwiLFxuICBcIlxcdTA2OTFcIixcbiAgXCJcXHVGQjhFXCIsXG4gIFwiXFx1MDZBOVwiLFxuICBcIlxcdUZCOEZcIixcbiAgXCJcXHUwNkE5XCIsXG4gIFwiXFx1RkI5MFwiLFxuICBcIlxcdTA2QTlcIixcbiAgXCJcXHVGQjkxXCIsXG4gIFwiXFx1MDZBOVwiLFxuICBcIlxcdUZCOTJcIixcbiAgXCJcXHUwNkFGXCIsXG4gIFwiXFx1RkI5M1wiLFxuICBcIlxcdTA2QUZcIixcbiAgXCJcXHVGQjk0XCIsXG4gIFwiXFx1MDZBRlwiLFxuICBcIlxcdUZCOTVcIixcbiAgXCJcXHUwNkFGXCIsXG4gIFwiXFx1RkI5NlwiLFxuICBcIlxcdTA2QjNcIixcbiAgXCJcXHVGQjk3XCIsXG4gIFwiXFx1MDZCM1wiLFxuICBcIlxcdUZCOThcIixcbiAgXCJcXHUwNkIzXCIsXG4gIFwiXFx1RkI5OVwiLFxuICBcIlxcdTA2QjNcIixcbiAgXCJcXHVGQjlBXCIsXG4gIFwiXFx1MDZCMVwiLFxuICBcIlxcdUZCOUJcIixcbiAgXCJcXHUwNkIxXCIsXG4gIFwiXFx1RkI5Q1wiLFxuICBcIlxcdTA2QjFcIixcbiAgXCJcXHVGQjlEXCIsXG4gIFwiXFx1MDZCMVwiLFxuICBcIlxcdUZCOUVcIixcbiAgXCJcXHUwNkJBXCIsXG4gIFwiXFx1RkI5RlwiLFxuICBcIlxcdTA2QkFcIixcbiAgXCJcXHVGQkEwXCIsXG4gIFwiXFx1MDZCQlwiLFxuICBcIlxcdUZCQTFcIixcbiAgXCJcXHUwNkJCXCIsXG4gIFwiXFx1RkJBMlwiLFxuICBcIlxcdTA2QkJcIixcbiAgXCJcXHVGQkEzXCIsXG4gIFwiXFx1MDZCQlwiLFxuICBcIlxcdUZCQTRcIixcbiAgXCJcXHUwNkMwXCIsXG4gIFwiXFx1RkJBNVwiLFxuICBcIlxcdTA2QzBcIixcbiAgXCJcXHVGQkE2XCIsXG4gIFwiXFx1MDZDMVwiLFxuICBcIlxcdUZCQTdcIixcbiAgXCJcXHUwNkMxXCIsXG4gIFwiXFx1RkJBOFwiLFxuICBcIlxcdTA2QzFcIixcbiAgXCJcXHVGQkE5XCIsXG4gIFwiXFx1MDZDMVwiLFxuICBcIlxcdUZCQUFcIixcbiAgXCJcXHUwNkJFXCIsXG4gIFwiXFx1RkJBQlwiLFxuICBcIlxcdTA2QkVcIixcbiAgXCJcXHVGQkFDXCIsXG4gIFwiXFx1MDZCRVwiLFxuICBcIlxcdUZCQURcIixcbiAgXCJcXHUwNkJFXCIsXG4gIFwiXFx1RkJBRVwiLFxuICBcIlxcdTA2RDJcIixcbiAgXCJcXHVGQkFGXCIsXG4gIFwiXFx1MDZEMlwiLFxuICBcIlxcdUZCQjBcIixcbiAgXCJcXHUwNkQzXCIsXG4gIFwiXFx1RkJCMVwiLFxuICBcIlxcdTA2RDNcIixcbiAgXCJcXHVGQkQzXCIsXG4gIFwiXFx1MDZBRFwiLFxuICBcIlxcdUZCRDRcIixcbiAgXCJcXHUwNkFEXCIsXG4gIFwiXFx1RkJENVwiLFxuICBcIlxcdTA2QURcIixcbiAgXCJcXHVGQkQ2XCIsXG4gIFwiXFx1MDZBRFwiLFxuICBcIlxcdUZCRDdcIixcbiAgXCJcXHUwNkM3XCIsXG4gIFwiXFx1RkJEOFwiLFxuICBcIlxcdTA2QzdcIixcbiAgXCJcXHVGQkQ5XCIsXG4gIFwiXFx1MDZDNlwiLFxuICBcIlxcdUZCREFcIixcbiAgXCJcXHUwNkM2XCIsXG4gIFwiXFx1RkJEQlwiLFxuICBcIlxcdTA2QzhcIixcbiAgXCJcXHVGQkRDXCIsXG4gIFwiXFx1MDZDOFwiLFxuICBcIlxcdUZCRERcIixcbiAgXCJcXHUwNjc3XCIsXG4gIFwiXFx1RkJERVwiLFxuICBcIlxcdTA2Q0JcIixcbiAgXCJcXHVGQkRGXCIsXG4gIFwiXFx1MDZDQlwiLFxuICBcIlxcdUZCRTBcIixcbiAgXCJcXHUwNkM1XCIsXG4gIFwiXFx1RkJFMVwiLFxuICBcIlxcdTA2QzVcIixcbiAgXCJcXHVGQkUyXCIsXG4gIFwiXFx1MDZDOVwiLFxuICBcIlxcdUZCRTNcIixcbiAgXCJcXHUwNkM5XCIsXG4gIFwiXFx1RkJFNFwiLFxuICBcIlxcdTA2RDBcIixcbiAgXCJcXHVGQkU1XCIsXG4gIFwiXFx1MDZEMFwiLFxuICBcIlxcdUZCRTZcIixcbiAgXCJcXHUwNkQwXCIsXG4gIFwiXFx1RkJFN1wiLFxuICBcIlxcdTA2RDBcIixcbiAgXCJcXHVGQkU4XCIsXG4gIFwiXFx1MDY0OVwiLFxuICBcIlxcdUZCRTlcIixcbiAgXCJcXHUwNjQ5XCIsXG4gIFwiXFx1RkJFQVwiLFxuICBcIlxcdTA2MjZcXHUwNjI3XCIsXG4gIFwiXFx1RkJFQlwiLFxuICBcIlxcdTA2MjZcXHUwNjI3XCIsXG4gIFwiXFx1RkJFQ1wiLFxuICBcIlxcdTA2MjZcXHUwNkQ1XCIsXG4gIFwiXFx1RkJFRFwiLFxuICBcIlxcdTA2MjZcXHUwNkQ1XCIsXG4gIFwiXFx1RkJFRVwiLFxuICBcIlxcdTA2MjZcXHUwNjQ4XCIsXG4gIFwiXFx1RkJFRlwiLFxuICBcIlxcdTA2MjZcXHUwNjQ4XCIsXG4gIFwiXFx1RkJGMFwiLFxuICBcIlxcdTA2MjZcXHUwNkM3XCIsXG4gIFwiXFx1RkJGMVwiLFxuICBcIlxcdTA2MjZcXHUwNkM3XCIsXG4gIFwiXFx1RkJGMlwiLFxuICBcIlxcdTA2MjZcXHUwNkM2XCIsXG4gIFwiXFx1RkJGM1wiLFxuICBcIlxcdTA2MjZcXHUwNkM2XCIsXG4gIFwiXFx1RkJGNFwiLFxuICBcIlxcdTA2MjZcXHUwNkM4XCIsXG4gIFwiXFx1RkJGNVwiLFxuICBcIlxcdTA2MjZcXHUwNkM4XCIsXG4gIFwiXFx1RkJGNlwiLFxuICBcIlxcdTA2MjZcXHUwNkQwXCIsXG4gIFwiXFx1RkJGN1wiLFxuICBcIlxcdTA2MjZcXHUwNkQwXCIsXG4gIFwiXFx1RkJGOFwiLFxuICBcIlxcdTA2MjZcXHUwNkQwXCIsXG4gIFwiXFx1RkJGOVwiLFxuICBcIlxcdTA2MjZcXHUwNjQ5XCIsXG4gIFwiXFx1RkJGQVwiLFxuICBcIlxcdTA2MjZcXHUwNjQ5XCIsXG4gIFwiXFx1RkJGQlwiLFxuICBcIlxcdTA2MjZcXHUwNjQ5XCIsXG4gIFwiXFx1RkJGQ1wiLFxuICBcIlxcdTA2Q0NcIixcbiAgXCJcXHVGQkZEXCIsXG4gIFwiXFx1MDZDQ1wiLFxuICBcIlxcdUZCRkVcIixcbiAgXCJcXHUwNkNDXCIsXG4gIFwiXFx1RkJGRlwiLFxuICBcIlxcdTA2Q0NcIixcbiAgXCJcXHVGQzAwXCIsXG4gIFwiXFx1MDYyNlxcdTA2MkNcIixcbiAgXCJcXHVGQzAxXCIsXG4gIFwiXFx1MDYyNlxcdTA2MkRcIixcbiAgXCJcXHVGQzAyXCIsXG4gIFwiXFx1MDYyNlxcdTA2NDVcIixcbiAgXCJcXHVGQzAzXCIsXG4gIFwiXFx1MDYyNlxcdTA2NDlcIixcbiAgXCJcXHVGQzA0XCIsXG4gIFwiXFx1MDYyNlxcdTA2NEFcIixcbiAgXCJcXHVGQzA1XCIsXG4gIFwiXFx1MDYyOFxcdTA2MkNcIixcbiAgXCJcXHVGQzA2XCIsXG4gIFwiXFx1MDYyOFxcdTA2MkRcIixcbiAgXCJcXHVGQzA3XCIsXG4gIFwiXFx1MDYyOFxcdTA2MkVcIixcbiAgXCJcXHVGQzA4XCIsXG4gIFwiXFx1MDYyOFxcdTA2NDVcIixcbiAgXCJcXHVGQzA5XCIsXG4gIFwiXFx1MDYyOFxcdTA2NDlcIixcbiAgXCJcXHVGQzBBXCIsXG4gIFwiXFx1MDYyOFxcdTA2NEFcIixcbiAgXCJcXHVGQzBCXCIsXG4gIFwiXFx1MDYyQVxcdTA2MkNcIixcbiAgXCJcXHVGQzBDXCIsXG4gIFwiXFx1MDYyQVxcdTA2MkRcIixcbiAgXCJcXHVGQzBEXCIsXG4gIFwiXFx1MDYyQVxcdTA2MkVcIixcbiAgXCJcXHVGQzBFXCIsXG4gIFwiXFx1MDYyQVxcdTA2NDVcIixcbiAgXCJcXHVGQzBGXCIsXG4gIFwiXFx1MDYyQVxcdTA2NDlcIixcbiAgXCJcXHVGQzEwXCIsXG4gIFwiXFx1MDYyQVxcdTA2NEFcIixcbiAgXCJcXHVGQzExXCIsXG4gIFwiXFx1MDYyQlxcdTA2MkNcIixcbiAgXCJcXHVGQzEyXCIsXG4gIFwiXFx1MDYyQlxcdTA2NDVcIixcbiAgXCJcXHVGQzEzXCIsXG4gIFwiXFx1MDYyQlxcdTA2NDlcIixcbiAgXCJcXHVGQzE0XCIsXG4gIFwiXFx1MDYyQlxcdTA2NEFcIixcbiAgXCJcXHVGQzE1XCIsXG4gIFwiXFx1MDYyQ1xcdTA2MkRcIixcbiAgXCJcXHVGQzE2XCIsXG4gIFwiXFx1MDYyQ1xcdTA2NDVcIixcbiAgXCJcXHVGQzE3XCIsXG4gIFwiXFx1MDYyRFxcdTA2MkNcIixcbiAgXCJcXHVGQzE4XCIsXG4gIFwiXFx1MDYyRFxcdTA2NDVcIixcbiAgXCJcXHVGQzE5XCIsXG4gIFwiXFx1MDYyRVxcdTA2MkNcIixcbiAgXCJcXHVGQzFBXCIsXG4gIFwiXFx1MDYyRVxcdTA2MkRcIixcbiAgXCJcXHVGQzFCXCIsXG4gIFwiXFx1MDYyRVxcdTA2NDVcIixcbiAgXCJcXHVGQzFDXCIsXG4gIFwiXFx1MDYzM1xcdTA2MkNcIixcbiAgXCJcXHVGQzFEXCIsXG4gIFwiXFx1MDYzM1xcdTA2MkRcIixcbiAgXCJcXHVGQzFFXCIsXG4gIFwiXFx1MDYzM1xcdTA2MkVcIixcbiAgXCJcXHVGQzFGXCIsXG4gIFwiXFx1MDYzM1xcdTA2NDVcIixcbiAgXCJcXHVGQzIwXCIsXG4gIFwiXFx1MDYzNVxcdTA2MkRcIixcbiAgXCJcXHVGQzIxXCIsXG4gIFwiXFx1MDYzNVxcdTA2NDVcIixcbiAgXCJcXHVGQzIyXCIsXG4gIFwiXFx1MDYzNlxcdTA2MkNcIixcbiAgXCJcXHVGQzIzXCIsXG4gIFwiXFx1MDYzNlxcdTA2MkRcIixcbiAgXCJcXHVGQzI0XCIsXG4gIFwiXFx1MDYzNlxcdTA2MkVcIixcbiAgXCJcXHVGQzI1XCIsXG4gIFwiXFx1MDYzNlxcdTA2NDVcIixcbiAgXCJcXHVGQzI2XCIsXG4gIFwiXFx1MDYzN1xcdTA2MkRcIixcbiAgXCJcXHVGQzI3XCIsXG4gIFwiXFx1MDYzN1xcdTA2NDVcIixcbiAgXCJcXHVGQzI4XCIsXG4gIFwiXFx1MDYzOFxcdTA2NDVcIixcbiAgXCJcXHVGQzI5XCIsXG4gIFwiXFx1MDYzOVxcdTA2MkNcIixcbiAgXCJcXHVGQzJBXCIsXG4gIFwiXFx1MDYzOVxcdTA2NDVcIixcbiAgXCJcXHVGQzJCXCIsXG4gIFwiXFx1MDYzQVxcdTA2MkNcIixcbiAgXCJcXHVGQzJDXCIsXG4gIFwiXFx1MDYzQVxcdTA2NDVcIixcbiAgXCJcXHVGQzJEXCIsXG4gIFwiXFx1MDY0MVxcdTA2MkNcIixcbiAgXCJcXHVGQzJFXCIsXG4gIFwiXFx1MDY0MVxcdTA2MkRcIixcbiAgXCJcXHVGQzJGXCIsXG4gIFwiXFx1MDY0MVxcdTA2MkVcIixcbiAgXCJcXHVGQzMwXCIsXG4gIFwiXFx1MDY0MVxcdTA2NDVcIixcbiAgXCJcXHVGQzMxXCIsXG4gIFwiXFx1MDY0MVxcdTA2NDlcIixcbiAgXCJcXHVGQzMyXCIsXG4gIFwiXFx1MDY0MVxcdTA2NEFcIixcbiAgXCJcXHVGQzMzXCIsXG4gIFwiXFx1MDY0MlxcdTA2MkRcIixcbiAgXCJcXHVGQzM0XCIsXG4gIFwiXFx1MDY0MlxcdTA2NDVcIixcbiAgXCJcXHVGQzM1XCIsXG4gIFwiXFx1MDY0MlxcdTA2NDlcIixcbiAgXCJcXHVGQzM2XCIsXG4gIFwiXFx1MDY0MlxcdTA2NEFcIixcbiAgXCJcXHVGQzM3XCIsXG4gIFwiXFx1MDY0M1xcdTA2MjdcIixcbiAgXCJcXHVGQzM4XCIsXG4gIFwiXFx1MDY0M1xcdTA2MkNcIixcbiAgXCJcXHVGQzM5XCIsXG4gIFwiXFx1MDY0M1xcdTA2MkRcIixcbiAgXCJcXHVGQzNBXCIsXG4gIFwiXFx1MDY0M1xcdTA2MkVcIixcbiAgXCJcXHVGQzNCXCIsXG4gIFwiXFx1MDY0M1xcdTA2NDRcIixcbiAgXCJcXHVGQzNDXCIsXG4gIFwiXFx1MDY0M1xcdTA2NDVcIixcbiAgXCJcXHVGQzNEXCIsXG4gIFwiXFx1MDY0M1xcdTA2NDlcIixcbiAgXCJcXHVGQzNFXCIsXG4gIFwiXFx1MDY0M1xcdTA2NEFcIixcbiAgXCJcXHVGQzNGXCIsXG4gIFwiXFx1MDY0NFxcdTA2MkNcIixcbiAgXCJcXHVGQzQwXCIsXG4gIFwiXFx1MDY0NFxcdTA2MkRcIixcbiAgXCJcXHVGQzQxXCIsXG4gIFwiXFx1MDY0NFxcdTA2MkVcIixcbiAgXCJcXHVGQzQyXCIsXG4gIFwiXFx1MDY0NFxcdTA2NDVcIixcbiAgXCJcXHVGQzQzXCIsXG4gIFwiXFx1MDY0NFxcdTA2NDlcIixcbiAgXCJcXHVGQzQ0XCIsXG4gIFwiXFx1MDY0NFxcdTA2NEFcIixcbiAgXCJcXHVGQzQ1XCIsXG4gIFwiXFx1MDY0NVxcdTA2MkNcIixcbiAgXCJcXHVGQzQ2XCIsXG4gIFwiXFx1MDY0NVxcdTA2MkRcIixcbiAgXCJcXHVGQzQ3XCIsXG4gIFwiXFx1MDY0NVxcdTA2MkVcIixcbiAgXCJcXHVGQzQ4XCIsXG4gIFwiXFx1MDY0NVxcdTA2NDVcIixcbiAgXCJcXHVGQzQ5XCIsXG4gIFwiXFx1MDY0NVxcdTA2NDlcIixcbiAgXCJcXHVGQzRBXCIsXG4gIFwiXFx1MDY0NVxcdTA2NEFcIixcbiAgXCJcXHVGQzRCXCIsXG4gIFwiXFx1MDY0NlxcdTA2MkNcIixcbiAgXCJcXHVGQzRDXCIsXG4gIFwiXFx1MDY0NlxcdTA2MkRcIixcbiAgXCJcXHVGQzREXCIsXG4gIFwiXFx1MDY0NlxcdTA2MkVcIixcbiAgXCJcXHVGQzRFXCIsXG4gIFwiXFx1MDY0NlxcdTA2NDVcIixcbiAgXCJcXHVGQzRGXCIsXG4gIFwiXFx1MDY0NlxcdTA2NDlcIixcbiAgXCJcXHVGQzUwXCIsXG4gIFwiXFx1MDY0NlxcdTA2NEFcIixcbiAgXCJcXHVGQzUxXCIsXG4gIFwiXFx1MDY0N1xcdTA2MkNcIixcbiAgXCJcXHVGQzUyXCIsXG4gIFwiXFx1MDY0N1xcdTA2NDVcIixcbiAgXCJcXHVGQzUzXCIsXG4gIFwiXFx1MDY0N1xcdTA2NDlcIixcbiAgXCJcXHVGQzU0XCIsXG4gIFwiXFx1MDY0N1xcdTA2NEFcIixcbiAgXCJcXHVGQzU1XCIsXG4gIFwiXFx1MDY0QVxcdTA2MkNcIixcbiAgXCJcXHVGQzU2XCIsXG4gIFwiXFx1MDY0QVxcdTA2MkRcIixcbiAgXCJcXHVGQzU3XCIsXG4gIFwiXFx1MDY0QVxcdTA2MkVcIixcbiAgXCJcXHVGQzU4XCIsXG4gIFwiXFx1MDY0QVxcdTA2NDVcIixcbiAgXCJcXHVGQzU5XCIsXG4gIFwiXFx1MDY0QVxcdTA2NDlcIixcbiAgXCJcXHVGQzVBXCIsXG4gIFwiXFx1MDY0QVxcdTA2NEFcIixcbiAgXCJcXHVGQzVCXCIsXG4gIFwiXFx1MDYzMFxcdTA2NzBcIixcbiAgXCJcXHVGQzVDXCIsXG4gIFwiXFx1MDYzMVxcdTA2NzBcIixcbiAgXCJcXHVGQzVEXCIsXG4gIFwiXFx1MDY0OVxcdTA2NzBcIixcbiAgXCJcXHVGQzVFXCIsXG4gIFwiXFx1MDAyMFxcdTA2NENcXHUwNjUxXCIsXG4gIFwiXFx1RkM1RlwiLFxuICBcIlxcdTAwMjBcXHUwNjREXFx1MDY1MVwiLFxuICBcIlxcdUZDNjBcIixcbiAgXCJcXHUwMDIwXFx1MDY0RVxcdTA2NTFcIixcbiAgXCJcXHVGQzYxXCIsXG4gIFwiXFx1MDAyMFxcdTA2NEZcXHUwNjUxXCIsXG4gIFwiXFx1RkM2MlwiLFxuICBcIlxcdTAwMjBcXHUwNjUwXFx1MDY1MVwiLFxuICBcIlxcdUZDNjNcIixcbiAgXCJcXHUwMDIwXFx1MDY1MVxcdTA2NzBcIixcbiAgXCJcXHVGQzY0XCIsXG4gIFwiXFx1MDYyNlxcdTA2MzFcIixcbiAgXCJcXHVGQzY1XCIsXG4gIFwiXFx1MDYyNlxcdTA2MzJcIixcbiAgXCJcXHVGQzY2XCIsXG4gIFwiXFx1MDYyNlxcdTA2NDVcIixcbiAgXCJcXHVGQzY3XCIsXG4gIFwiXFx1MDYyNlxcdTA2NDZcIixcbiAgXCJcXHVGQzY4XCIsXG4gIFwiXFx1MDYyNlxcdTA2NDlcIixcbiAgXCJcXHVGQzY5XCIsXG4gIFwiXFx1MDYyNlxcdTA2NEFcIixcbiAgXCJcXHVGQzZBXCIsXG4gIFwiXFx1MDYyOFxcdTA2MzFcIixcbiAgXCJcXHVGQzZCXCIsXG4gIFwiXFx1MDYyOFxcdTA2MzJcIixcbiAgXCJcXHVGQzZDXCIsXG4gIFwiXFx1MDYyOFxcdTA2NDVcIixcbiAgXCJcXHVGQzZEXCIsXG4gIFwiXFx1MDYyOFxcdTA2NDZcIixcbiAgXCJcXHVGQzZFXCIsXG4gIFwiXFx1MDYyOFxcdTA2NDlcIixcbiAgXCJcXHVGQzZGXCIsXG4gIFwiXFx1MDYyOFxcdTA2NEFcIixcbiAgXCJcXHVGQzcwXCIsXG4gIFwiXFx1MDYyQVxcdTA2MzFcIixcbiAgXCJcXHVGQzcxXCIsXG4gIFwiXFx1MDYyQVxcdTA2MzJcIixcbiAgXCJcXHVGQzcyXCIsXG4gIFwiXFx1MDYyQVxcdTA2NDVcIixcbiAgXCJcXHVGQzczXCIsXG4gIFwiXFx1MDYyQVxcdTA2NDZcIixcbiAgXCJcXHVGQzc0XCIsXG4gIFwiXFx1MDYyQVxcdTA2NDlcIixcbiAgXCJcXHVGQzc1XCIsXG4gIFwiXFx1MDYyQVxcdTA2NEFcIixcbiAgXCJcXHVGQzc2XCIsXG4gIFwiXFx1MDYyQlxcdTA2MzFcIixcbiAgXCJcXHVGQzc3XCIsXG4gIFwiXFx1MDYyQlxcdTA2MzJcIixcbiAgXCJcXHVGQzc4XCIsXG4gIFwiXFx1MDYyQlxcdTA2NDVcIixcbiAgXCJcXHVGQzc5XCIsXG4gIFwiXFx1MDYyQlxcdTA2NDZcIixcbiAgXCJcXHVGQzdBXCIsXG4gIFwiXFx1MDYyQlxcdTA2NDlcIixcbiAgXCJcXHVGQzdCXCIsXG4gIFwiXFx1MDYyQlxcdTA2NEFcIixcbiAgXCJcXHVGQzdDXCIsXG4gIFwiXFx1MDY0MVxcdTA2NDlcIixcbiAgXCJcXHVGQzdEXCIsXG4gIFwiXFx1MDY0MVxcdTA2NEFcIixcbiAgXCJcXHVGQzdFXCIsXG4gIFwiXFx1MDY0MlxcdTA2NDlcIixcbiAgXCJcXHVGQzdGXCIsXG4gIFwiXFx1MDY0MlxcdTA2NEFcIixcbiAgXCJcXHVGQzgwXCIsXG4gIFwiXFx1MDY0M1xcdTA2MjdcIixcbiAgXCJcXHVGQzgxXCIsXG4gIFwiXFx1MDY0M1xcdTA2NDRcIixcbiAgXCJcXHVGQzgyXCIsXG4gIFwiXFx1MDY0M1xcdTA2NDVcIixcbiAgXCJcXHVGQzgzXCIsXG4gIFwiXFx1MDY0M1xcdTA2NDlcIixcbiAgXCJcXHVGQzg0XCIsXG4gIFwiXFx1MDY0M1xcdTA2NEFcIixcbiAgXCJcXHVGQzg1XCIsXG4gIFwiXFx1MDY0NFxcdTA2NDVcIixcbiAgXCJcXHVGQzg2XCIsXG4gIFwiXFx1MDY0NFxcdTA2NDlcIixcbiAgXCJcXHVGQzg3XCIsXG4gIFwiXFx1MDY0NFxcdTA2NEFcIixcbiAgXCJcXHVGQzg4XCIsXG4gIFwiXFx1MDY0NVxcdTA2MjdcIixcbiAgXCJcXHVGQzg5XCIsXG4gIFwiXFx1MDY0NVxcdTA2NDVcIixcbiAgXCJcXHVGQzhBXCIsXG4gIFwiXFx1MDY0NlxcdTA2MzFcIixcbiAgXCJcXHVGQzhCXCIsXG4gIFwiXFx1MDY0NlxcdTA2MzJcIixcbiAgXCJcXHVGQzhDXCIsXG4gIFwiXFx1MDY0NlxcdTA2NDVcIixcbiAgXCJcXHVGQzhEXCIsXG4gIFwiXFx1MDY0NlxcdTA2NDZcIixcbiAgXCJcXHVGQzhFXCIsXG4gIFwiXFx1MDY0NlxcdTA2NDlcIixcbiAgXCJcXHVGQzhGXCIsXG4gIFwiXFx1MDY0NlxcdTA2NEFcIixcbiAgXCJcXHVGQzkwXCIsXG4gIFwiXFx1MDY0OVxcdTA2NzBcIixcbiAgXCJcXHVGQzkxXCIsXG4gIFwiXFx1MDY0QVxcdTA2MzFcIixcbiAgXCJcXHVGQzkyXCIsXG4gIFwiXFx1MDY0QVxcdTA2MzJcIixcbiAgXCJcXHVGQzkzXCIsXG4gIFwiXFx1MDY0QVxcdTA2NDVcIixcbiAgXCJcXHVGQzk0XCIsXG4gIFwiXFx1MDY0QVxcdTA2NDZcIixcbiAgXCJcXHVGQzk1XCIsXG4gIFwiXFx1MDY0QVxcdTA2NDlcIixcbiAgXCJcXHVGQzk2XCIsXG4gIFwiXFx1MDY0QVxcdTA2NEFcIixcbiAgXCJcXHVGQzk3XCIsXG4gIFwiXFx1MDYyNlxcdTA2MkNcIixcbiAgXCJcXHVGQzk4XCIsXG4gIFwiXFx1MDYyNlxcdTA2MkRcIixcbiAgXCJcXHVGQzk5XCIsXG4gIFwiXFx1MDYyNlxcdTA2MkVcIixcbiAgXCJcXHVGQzlBXCIsXG4gIFwiXFx1MDYyNlxcdTA2NDVcIixcbiAgXCJcXHVGQzlCXCIsXG4gIFwiXFx1MDYyNlxcdTA2NDdcIixcbiAgXCJcXHVGQzlDXCIsXG4gIFwiXFx1MDYyOFxcdTA2MkNcIixcbiAgXCJcXHVGQzlEXCIsXG4gIFwiXFx1MDYyOFxcdTA2MkRcIixcbiAgXCJcXHVGQzlFXCIsXG4gIFwiXFx1MDYyOFxcdTA2MkVcIixcbiAgXCJcXHVGQzlGXCIsXG4gIFwiXFx1MDYyOFxcdTA2NDVcIixcbiAgXCJcXHVGQ0EwXCIsXG4gIFwiXFx1MDYyOFxcdTA2NDdcIixcbiAgXCJcXHVGQ0ExXCIsXG4gIFwiXFx1MDYyQVxcdTA2MkNcIixcbiAgXCJcXHVGQ0EyXCIsXG4gIFwiXFx1MDYyQVxcdTA2MkRcIixcbiAgXCJcXHVGQ0EzXCIsXG4gIFwiXFx1MDYyQVxcdTA2MkVcIixcbiAgXCJcXHVGQ0E0XCIsXG4gIFwiXFx1MDYyQVxcdTA2NDVcIixcbiAgXCJcXHVGQ0E1XCIsXG4gIFwiXFx1MDYyQVxcdTA2NDdcIixcbiAgXCJcXHVGQ0E2XCIsXG4gIFwiXFx1MDYyQlxcdTA2NDVcIixcbiAgXCJcXHVGQ0E3XCIsXG4gIFwiXFx1MDYyQ1xcdTA2MkRcIixcbiAgXCJcXHVGQ0E4XCIsXG4gIFwiXFx1MDYyQ1xcdTA2NDVcIixcbiAgXCJcXHVGQ0E5XCIsXG4gIFwiXFx1MDYyRFxcdTA2MkNcIixcbiAgXCJcXHVGQ0FBXCIsXG4gIFwiXFx1MDYyRFxcdTA2NDVcIixcbiAgXCJcXHVGQ0FCXCIsXG4gIFwiXFx1MDYyRVxcdTA2MkNcIixcbiAgXCJcXHVGQ0FDXCIsXG4gIFwiXFx1MDYyRVxcdTA2NDVcIixcbiAgXCJcXHVGQ0FEXCIsXG4gIFwiXFx1MDYzM1xcdTA2MkNcIixcbiAgXCJcXHVGQ0FFXCIsXG4gIFwiXFx1MDYzM1xcdTA2MkRcIixcbiAgXCJcXHVGQ0FGXCIsXG4gIFwiXFx1MDYzM1xcdTA2MkVcIixcbiAgXCJcXHVGQ0IwXCIsXG4gIFwiXFx1MDYzM1xcdTA2NDVcIixcbiAgXCJcXHVGQ0IxXCIsXG4gIFwiXFx1MDYzNVxcdTA2MkRcIixcbiAgXCJcXHVGQ0IyXCIsXG4gIFwiXFx1MDYzNVxcdTA2MkVcIixcbiAgXCJcXHVGQ0IzXCIsXG4gIFwiXFx1MDYzNVxcdTA2NDVcIixcbiAgXCJcXHVGQ0I0XCIsXG4gIFwiXFx1MDYzNlxcdTA2MkNcIixcbiAgXCJcXHVGQ0I1XCIsXG4gIFwiXFx1MDYzNlxcdTA2MkRcIixcbiAgXCJcXHVGQ0I2XCIsXG4gIFwiXFx1MDYzNlxcdTA2MkVcIixcbiAgXCJcXHVGQ0I3XCIsXG4gIFwiXFx1MDYzNlxcdTA2NDVcIixcbiAgXCJcXHVGQ0I4XCIsXG4gIFwiXFx1MDYzN1xcdTA2MkRcIixcbiAgXCJcXHVGQ0I5XCIsXG4gIFwiXFx1MDYzOFxcdTA2NDVcIixcbiAgXCJcXHVGQ0JBXCIsXG4gIFwiXFx1MDYzOVxcdTA2MkNcIixcbiAgXCJcXHVGQ0JCXCIsXG4gIFwiXFx1MDYzOVxcdTA2NDVcIixcbiAgXCJcXHVGQ0JDXCIsXG4gIFwiXFx1MDYzQVxcdTA2MkNcIixcbiAgXCJcXHVGQ0JEXCIsXG4gIFwiXFx1MDYzQVxcdTA2NDVcIixcbiAgXCJcXHVGQ0JFXCIsXG4gIFwiXFx1MDY0MVxcdTA2MkNcIixcbiAgXCJcXHVGQ0JGXCIsXG4gIFwiXFx1MDY0MVxcdTA2MkRcIixcbiAgXCJcXHVGQ0MwXCIsXG4gIFwiXFx1MDY0MVxcdTA2MkVcIixcbiAgXCJcXHVGQ0MxXCIsXG4gIFwiXFx1MDY0MVxcdTA2NDVcIixcbiAgXCJcXHVGQ0MyXCIsXG4gIFwiXFx1MDY0MlxcdTA2MkRcIixcbiAgXCJcXHVGQ0MzXCIsXG4gIFwiXFx1MDY0MlxcdTA2NDVcIixcbiAgXCJcXHVGQ0M0XCIsXG4gIFwiXFx1MDY0M1xcdTA2MkNcIixcbiAgXCJcXHVGQ0M1XCIsXG4gIFwiXFx1MDY0M1xcdTA2MkRcIixcbiAgXCJcXHVGQ0M2XCIsXG4gIFwiXFx1MDY0M1xcdTA2MkVcIixcbiAgXCJcXHVGQ0M3XCIsXG4gIFwiXFx1MDY0M1xcdTA2NDRcIixcbiAgXCJcXHVGQ0M4XCIsXG4gIFwiXFx1MDY0M1xcdTA2NDVcIixcbiAgXCJcXHVGQ0M5XCIsXG4gIFwiXFx1MDY0NFxcdTA2MkNcIixcbiAgXCJcXHVGQ0NBXCIsXG4gIFwiXFx1MDY0NFxcdTA2MkRcIixcbiAgXCJcXHVGQ0NCXCIsXG4gIFwiXFx1MDY0NFxcdTA2MkVcIixcbiAgXCJcXHVGQ0NDXCIsXG4gIFwiXFx1MDY0NFxcdTA2NDVcIixcbiAgXCJcXHVGQ0NEXCIsXG4gIFwiXFx1MDY0NFxcdTA2NDdcIixcbiAgXCJcXHVGQ0NFXCIsXG4gIFwiXFx1MDY0NVxcdTA2MkNcIixcbiAgXCJcXHVGQ0NGXCIsXG4gIFwiXFx1MDY0NVxcdTA2MkRcIixcbiAgXCJcXHVGQ0QwXCIsXG4gIFwiXFx1MDY0NVxcdTA2MkVcIixcbiAgXCJcXHVGQ0QxXCIsXG4gIFwiXFx1MDY0NVxcdTA2NDVcIixcbiAgXCJcXHVGQ0QyXCIsXG4gIFwiXFx1MDY0NlxcdTA2MkNcIixcbiAgXCJcXHVGQ0QzXCIsXG4gIFwiXFx1MDY0NlxcdTA2MkRcIixcbiAgXCJcXHVGQ0Q0XCIsXG4gIFwiXFx1MDY0NlxcdTA2MkVcIixcbiAgXCJcXHVGQ0Q1XCIsXG4gIFwiXFx1MDY0NlxcdTA2NDVcIixcbiAgXCJcXHVGQ0Q2XCIsXG4gIFwiXFx1MDY0NlxcdTA2NDdcIixcbiAgXCJcXHVGQ0Q3XCIsXG4gIFwiXFx1MDY0N1xcdTA2MkNcIixcbiAgXCJcXHVGQ0Q4XCIsXG4gIFwiXFx1MDY0N1xcdTA2NDVcIixcbiAgXCJcXHVGQ0Q5XCIsXG4gIFwiXFx1MDY0N1xcdTA2NzBcIixcbiAgXCJcXHVGQ0RBXCIsXG4gIFwiXFx1MDY0QVxcdTA2MkNcIixcbiAgXCJcXHVGQ0RCXCIsXG4gIFwiXFx1MDY0QVxcdTA2MkRcIixcbiAgXCJcXHVGQ0RDXCIsXG4gIFwiXFx1MDY0QVxcdTA2MkVcIixcbiAgXCJcXHVGQ0REXCIsXG4gIFwiXFx1MDY0QVxcdTA2NDVcIixcbiAgXCJcXHVGQ0RFXCIsXG4gIFwiXFx1MDY0QVxcdTA2NDdcIixcbiAgXCJcXHVGQ0RGXCIsXG4gIFwiXFx1MDYyNlxcdTA2NDVcIixcbiAgXCJcXHVGQ0UwXCIsXG4gIFwiXFx1MDYyNlxcdTA2NDdcIixcbiAgXCJcXHVGQ0UxXCIsXG4gIFwiXFx1MDYyOFxcdTA2NDVcIixcbiAgXCJcXHVGQ0UyXCIsXG4gIFwiXFx1MDYyOFxcdTA2NDdcIixcbiAgXCJcXHVGQ0UzXCIsXG4gIFwiXFx1MDYyQVxcdTA2NDVcIixcbiAgXCJcXHVGQ0U0XCIsXG4gIFwiXFx1MDYyQVxcdTA2NDdcIixcbiAgXCJcXHVGQ0U1XCIsXG4gIFwiXFx1MDYyQlxcdTA2NDVcIixcbiAgXCJcXHVGQ0U2XCIsXG4gIFwiXFx1MDYyQlxcdTA2NDdcIixcbiAgXCJcXHVGQ0U3XCIsXG4gIFwiXFx1MDYzM1xcdTA2NDVcIixcbiAgXCJcXHVGQ0U4XCIsXG4gIFwiXFx1MDYzM1xcdTA2NDdcIixcbiAgXCJcXHVGQ0U5XCIsXG4gIFwiXFx1MDYzNFxcdTA2NDVcIixcbiAgXCJcXHVGQ0VBXCIsXG4gIFwiXFx1MDYzNFxcdTA2NDdcIixcbiAgXCJcXHVGQ0VCXCIsXG4gIFwiXFx1MDY0M1xcdTA2NDRcIixcbiAgXCJcXHVGQ0VDXCIsXG4gIFwiXFx1MDY0M1xcdTA2NDVcIixcbiAgXCJcXHVGQ0VEXCIsXG4gIFwiXFx1MDY0NFxcdTA2NDVcIixcbiAgXCJcXHVGQ0VFXCIsXG4gIFwiXFx1MDY0NlxcdTA2NDVcIixcbiAgXCJcXHVGQ0VGXCIsXG4gIFwiXFx1MDY0NlxcdTA2NDdcIixcbiAgXCJcXHVGQ0YwXCIsXG4gIFwiXFx1MDY0QVxcdTA2NDVcIixcbiAgXCJcXHVGQ0YxXCIsXG4gIFwiXFx1MDY0QVxcdTA2NDdcIixcbiAgXCJcXHVGQ0YyXCIsXG4gIFwiXFx1MDY0MFxcdTA2NEVcXHUwNjUxXCIsXG4gIFwiXFx1RkNGM1wiLFxuICBcIlxcdTA2NDBcXHUwNjRGXFx1MDY1MVwiLFxuICBcIlxcdUZDRjRcIixcbiAgXCJcXHUwNjQwXFx1MDY1MFxcdTA2NTFcIixcbiAgXCJcXHVGQ0Y1XCIsXG4gIFwiXFx1MDYzN1xcdTA2NDlcIixcbiAgXCJcXHVGQ0Y2XCIsXG4gIFwiXFx1MDYzN1xcdTA2NEFcIixcbiAgXCJcXHVGQ0Y3XCIsXG4gIFwiXFx1MDYzOVxcdTA2NDlcIixcbiAgXCJcXHVGQ0Y4XCIsXG4gIFwiXFx1MDYzOVxcdTA2NEFcIixcbiAgXCJcXHVGQ0Y5XCIsXG4gIFwiXFx1MDYzQVxcdTA2NDlcIixcbiAgXCJcXHVGQ0ZBXCIsXG4gIFwiXFx1MDYzQVxcdTA2NEFcIixcbiAgXCJcXHVGQ0ZCXCIsXG4gIFwiXFx1MDYzM1xcdTA2NDlcIixcbiAgXCJcXHVGQ0ZDXCIsXG4gIFwiXFx1MDYzM1xcdTA2NEFcIixcbiAgXCJcXHVGQ0ZEXCIsXG4gIFwiXFx1MDYzNFxcdTA2NDlcIixcbiAgXCJcXHVGQ0ZFXCIsXG4gIFwiXFx1MDYzNFxcdTA2NEFcIixcbiAgXCJcXHVGQ0ZGXCIsXG4gIFwiXFx1MDYyRFxcdTA2NDlcIixcbiAgXCJcXHVGRDAwXCIsXG4gIFwiXFx1MDYyRFxcdTA2NEFcIixcbiAgXCJcXHVGRDAxXCIsXG4gIFwiXFx1MDYyQ1xcdTA2NDlcIixcbiAgXCJcXHVGRDAyXCIsXG4gIFwiXFx1MDYyQ1xcdTA2NEFcIixcbiAgXCJcXHVGRDAzXCIsXG4gIFwiXFx1MDYyRVxcdTA2NDlcIixcbiAgXCJcXHVGRDA0XCIsXG4gIFwiXFx1MDYyRVxcdTA2NEFcIixcbiAgXCJcXHVGRDA1XCIsXG4gIFwiXFx1MDYzNVxcdTA2NDlcIixcbiAgXCJcXHVGRDA2XCIsXG4gIFwiXFx1MDYzNVxcdTA2NEFcIixcbiAgXCJcXHVGRDA3XCIsXG4gIFwiXFx1MDYzNlxcdTA2NDlcIixcbiAgXCJcXHVGRDA4XCIsXG4gIFwiXFx1MDYzNlxcdTA2NEFcIixcbiAgXCJcXHVGRDA5XCIsXG4gIFwiXFx1MDYzNFxcdTA2MkNcIixcbiAgXCJcXHVGRDBBXCIsXG4gIFwiXFx1MDYzNFxcdTA2MkRcIixcbiAgXCJcXHVGRDBCXCIsXG4gIFwiXFx1MDYzNFxcdTA2MkVcIixcbiAgXCJcXHVGRDBDXCIsXG4gIFwiXFx1MDYzNFxcdTA2NDVcIixcbiAgXCJcXHVGRDBEXCIsXG4gIFwiXFx1MDYzNFxcdTA2MzFcIixcbiAgXCJcXHVGRDBFXCIsXG4gIFwiXFx1MDYzM1xcdTA2MzFcIixcbiAgXCJcXHVGRDBGXCIsXG4gIFwiXFx1MDYzNVxcdTA2MzFcIixcbiAgXCJcXHVGRDEwXCIsXG4gIFwiXFx1MDYzNlxcdTA2MzFcIixcbiAgXCJcXHVGRDExXCIsXG4gIFwiXFx1MDYzN1xcdTA2NDlcIixcbiAgXCJcXHVGRDEyXCIsXG4gIFwiXFx1MDYzN1xcdTA2NEFcIixcbiAgXCJcXHVGRDEzXCIsXG4gIFwiXFx1MDYzOVxcdTA2NDlcIixcbiAgXCJcXHVGRDE0XCIsXG4gIFwiXFx1MDYzOVxcdTA2NEFcIixcbiAgXCJcXHVGRDE1XCIsXG4gIFwiXFx1MDYzQVxcdTA2NDlcIixcbiAgXCJcXHVGRDE2XCIsXG4gIFwiXFx1MDYzQVxcdTA2NEFcIixcbiAgXCJcXHVGRDE3XCIsXG4gIFwiXFx1MDYzM1xcdTA2NDlcIixcbiAgXCJcXHVGRDE4XCIsXG4gIFwiXFx1MDYzM1xcdTA2NEFcIixcbiAgXCJcXHVGRDE5XCIsXG4gIFwiXFx1MDYzNFxcdTA2NDlcIixcbiAgXCJcXHVGRDFBXCIsXG4gIFwiXFx1MDYzNFxcdTA2NEFcIixcbiAgXCJcXHVGRDFCXCIsXG4gIFwiXFx1MDYyRFxcdTA2NDlcIixcbiAgXCJcXHVGRDFDXCIsXG4gIFwiXFx1MDYyRFxcdTA2NEFcIixcbiAgXCJcXHVGRDFEXCIsXG4gIFwiXFx1MDYyQ1xcdTA2NDlcIixcbiAgXCJcXHVGRDFFXCIsXG4gIFwiXFx1MDYyQ1xcdTA2NEFcIixcbiAgXCJcXHVGRDFGXCIsXG4gIFwiXFx1MDYyRVxcdTA2NDlcIixcbiAgXCJcXHVGRDIwXCIsXG4gIFwiXFx1MDYyRVxcdTA2NEFcIixcbiAgXCJcXHVGRDIxXCIsXG4gIFwiXFx1MDYzNVxcdTA2NDlcIixcbiAgXCJcXHVGRDIyXCIsXG4gIFwiXFx1MDYzNVxcdTA2NEFcIixcbiAgXCJcXHVGRDIzXCIsXG4gIFwiXFx1MDYzNlxcdTA2NDlcIixcbiAgXCJcXHVGRDI0XCIsXG4gIFwiXFx1MDYzNlxcdTA2NEFcIixcbiAgXCJcXHVGRDI1XCIsXG4gIFwiXFx1MDYzNFxcdTA2MkNcIixcbiAgXCJcXHVGRDI2XCIsXG4gIFwiXFx1MDYzNFxcdTA2MkRcIixcbiAgXCJcXHVGRDI3XCIsXG4gIFwiXFx1MDYzNFxcdTA2MkVcIixcbiAgXCJcXHVGRDI4XCIsXG4gIFwiXFx1MDYzNFxcdTA2NDVcIixcbiAgXCJcXHVGRDI5XCIsXG4gIFwiXFx1MDYzNFxcdTA2MzFcIixcbiAgXCJcXHVGRDJBXCIsXG4gIFwiXFx1MDYzM1xcdTA2MzFcIixcbiAgXCJcXHVGRDJCXCIsXG4gIFwiXFx1MDYzNVxcdTA2MzFcIixcbiAgXCJcXHVGRDJDXCIsXG4gIFwiXFx1MDYzNlxcdTA2MzFcIixcbiAgXCJcXHVGRDJEXCIsXG4gIFwiXFx1MDYzNFxcdTA2MkNcIixcbiAgXCJcXHVGRDJFXCIsXG4gIFwiXFx1MDYzNFxcdTA2MkRcIixcbiAgXCJcXHVGRDJGXCIsXG4gIFwiXFx1MDYzNFxcdTA2MkVcIixcbiAgXCJcXHVGRDMwXCIsXG4gIFwiXFx1MDYzNFxcdTA2NDVcIixcbiAgXCJcXHVGRDMxXCIsXG4gIFwiXFx1MDYzM1xcdTA2NDdcIixcbiAgXCJcXHVGRDMyXCIsXG4gIFwiXFx1MDYzNFxcdTA2NDdcIixcbiAgXCJcXHVGRDMzXCIsXG4gIFwiXFx1MDYzN1xcdTA2NDVcIixcbiAgXCJcXHVGRDM0XCIsXG4gIFwiXFx1MDYzM1xcdTA2MkNcIixcbiAgXCJcXHVGRDM1XCIsXG4gIFwiXFx1MDYzM1xcdTA2MkRcIixcbiAgXCJcXHVGRDM2XCIsXG4gIFwiXFx1MDYzM1xcdTA2MkVcIixcbiAgXCJcXHVGRDM3XCIsXG4gIFwiXFx1MDYzNFxcdTA2MkNcIixcbiAgXCJcXHVGRDM4XCIsXG4gIFwiXFx1MDYzNFxcdTA2MkRcIixcbiAgXCJcXHVGRDM5XCIsXG4gIFwiXFx1MDYzNFxcdTA2MkVcIixcbiAgXCJcXHVGRDNBXCIsXG4gIFwiXFx1MDYzN1xcdTA2NDVcIixcbiAgXCJcXHVGRDNCXCIsXG4gIFwiXFx1MDYzOFxcdTA2NDVcIixcbiAgXCJcXHVGRDNDXCIsXG4gIFwiXFx1MDYyN1xcdTA2NEJcIixcbiAgXCJcXHVGRDNEXCIsXG4gIFwiXFx1MDYyN1xcdTA2NEJcIixcbiAgXCJcXHVGRDUwXCIsXG4gIFwiXFx1MDYyQVxcdTA2MkNcXHUwNjQ1XCIsXG4gIFwiXFx1RkQ1MVwiLFxuICBcIlxcdTA2MkFcXHUwNjJEXFx1MDYyQ1wiLFxuICBcIlxcdUZENTJcIixcbiAgXCJcXHUwNjJBXFx1MDYyRFxcdTA2MkNcIixcbiAgXCJcXHVGRDUzXCIsXG4gIFwiXFx1MDYyQVxcdTA2MkRcXHUwNjQ1XCIsXG4gIFwiXFx1RkQ1NFwiLFxuICBcIlxcdTA2MkFcXHUwNjJFXFx1MDY0NVwiLFxuICBcIlxcdUZENTVcIixcbiAgXCJcXHUwNjJBXFx1MDY0NVxcdTA2MkNcIixcbiAgXCJcXHVGRDU2XCIsXG4gIFwiXFx1MDYyQVxcdTA2NDVcXHUwNjJEXCIsXG4gIFwiXFx1RkQ1N1wiLFxuICBcIlxcdTA2MkFcXHUwNjQ1XFx1MDYyRVwiLFxuICBcIlxcdUZENThcIixcbiAgXCJcXHUwNjJDXFx1MDY0NVxcdTA2MkRcIixcbiAgXCJcXHVGRDU5XCIsXG4gIFwiXFx1MDYyQ1xcdTA2NDVcXHUwNjJEXCIsXG4gIFwiXFx1RkQ1QVwiLFxuICBcIlxcdTA2MkRcXHUwNjQ1XFx1MDY0QVwiLFxuICBcIlxcdUZENUJcIixcbiAgXCJcXHUwNjJEXFx1MDY0NVxcdTA2NDlcIixcbiAgXCJcXHVGRDVDXCIsXG4gIFwiXFx1MDYzM1xcdTA2MkRcXHUwNjJDXCIsXG4gIFwiXFx1RkQ1RFwiLFxuICBcIlxcdTA2MzNcXHUwNjJDXFx1MDYyRFwiLFxuICBcIlxcdUZENUVcIixcbiAgXCJcXHUwNjMzXFx1MDYyQ1xcdTA2NDlcIixcbiAgXCJcXHVGRDVGXCIsXG4gIFwiXFx1MDYzM1xcdTA2NDVcXHUwNjJEXCIsXG4gIFwiXFx1RkQ2MFwiLFxuICBcIlxcdTA2MzNcXHUwNjQ1XFx1MDYyRFwiLFxuICBcIlxcdUZENjFcIixcbiAgXCJcXHUwNjMzXFx1MDY0NVxcdTA2MkNcIixcbiAgXCJcXHVGRDYyXCIsXG4gIFwiXFx1MDYzM1xcdTA2NDVcXHUwNjQ1XCIsXG4gIFwiXFx1RkQ2M1wiLFxuICBcIlxcdTA2MzNcXHUwNjQ1XFx1MDY0NVwiLFxuICBcIlxcdUZENjRcIixcbiAgXCJcXHUwNjM1XFx1MDYyRFxcdTA2MkRcIixcbiAgXCJcXHVGRDY1XCIsXG4gIFwiXFx1MDYzNVxcdTA2MkRcXHUwNjJEXCIsXG4gIFwiXFx1RkQ2NlwiLFxuICBcIlxcdTA2MzVcXHUwNjQ1XFx1MDY0NVwiLFxuICBcIlxcdUZENjdcIixcbiAgXCJcXHUwNjM0XFx1MDYyRFxcdTA2NDVcIixcbiAgXCJcXHVGRDY4XCIsXG4gIFwiXFx1MDYzNFxcdTA2MkRcXHUwNjQ1XCIsXG4gIFwiXFx1RkQ2OVwiLFxuICBcIlxcdTA2MzRcXHUwNjJDXFx1MDY0QVwiLFxuICBcIlxcdUZENkFcIixcbiAgXCJcXHUwNjM0XFx1MDY0NVxcdTA2MkVcIixcbiAgXCJcXHVGRDZCXCIsXG4gIFwiXFx1MDYzNFxcdTA2NDVcXHUwNjJFXCIsXG4gIFwiXFx1RkQ2Q1wiLFxuICBcIlxcdTA2MzRcXHUwNjQ1XFx1MDY0NVwiLFxuICBcIlxcdUZENkRcIixcbiAgXCJcXHUwNjM0XFx1MDY0NVxcdTA2NDVcIixcbiAgXCJcXHVGRDZFXCIsXG4gIFwiXFx1MDYzNlxcdTA2MkRcXHUwNjQ5XCIsXG4gIFwiXFx1RkQ2RlwiLFxuICBcIlxcdTA2MzZcXHUwNjJFXFx1MDY0NVwiLFxuICBcIlxcdUZENzBcIixcbiAgXCJcXHUwNjM2XFx1MDYyRVxcdTA2NDVcIixcbiAgXCJcXHVGRDcxXCIsXG4gIFwiXFx1MDYzN1xcdTA2NDVcXHUwNjJEXCIsXG4gIFwiXFx1RkQ3MlwiLFxuICBcIlxcdTA2MzdcXHUwNjQ1XFx1MDYyRFwiLFxuICBcIlxcdUZENzNcIixcbiAgXCJcXHUwNjM3XFx1MDY0NVxcdTA2NDVcIixcbiAgXCJcXHVGRDc0XCIsXG4gIFwiXFx1MDYzN1xcdTA2NDVcXHUwNjRBXCIsXG4gIFwiXFx1RkQ3NVwiLFxuICBcIlxcdTA2MzlcXHUwNjJDXFx1MDY0NVwiLFxuICBcIlxcdUZENzZcIixcbiAgXCJcXHUwNjM5XFx1MDY0NVxcdTA2NDVcIixcbiAgXCJcXHVGRDc3XCIsXG4gIFwiXFx1MDYzOVxcdTA2NDVcXHUwNjQ1XCIsXG4gIFwiXFx1RkQ3OFwiLFxuICBcIlxcdTA2MzlcXHUwNjQ1XFx1MDY0OVwiLFxuICBcIlxcdUZENzlcIixcbiAgXCJcXHUwNjNBXFx1MDY0NVxcdTA2NDVcIixcbiAgXCJcXHVGRDdBXCIsXG4gIFwiXFx1MDYzQVxcdTA2NDVcXHUwNjRBXCIsXG4gIFwiXFx1RkQ3QlwiLFxuICBcIlxcdTA2M0FcXHUwNjQ1XFx1MDY0OVwiLFxuICBcIlxcdUZEN0NcIixcbiAgXCJcXHUwNjQxXFx1MDYyRVxcdTA2NDVcIixcbiAgXCJcXHVGRDdEXCIsXG4gIFwiXFx1MDY0MVxcdTA2MkVcXHUwNjQ1XCIsXG4gIFwiXFx1RkQ3RVwiLFxuICBcIlxcdTA2NDJcXHUwNjQ1XFx1MDYyRFwiLFxuICBcIlxcdUZEN0ZcIixcbiAgXCJcXHUwNjQyXFx1MDY0NVxcdTA2NDVcIixcbiAgXCJcXHVGRDgwXCIsXG4gIFwiXFx1MDY0NFxcdTA2MkRcXHUwNjQ1XCIsXG4gIFwiXFx1RkQ4MVwiLFxuICBcIlxcdTA2NDRcXHUwNjJEXFx1MDY0QVwiLFxuICBcIlxcdUZEODJcIixcbiAgXCJcXHUwNjQ0XFx1MDYyRFxcdTA2NDlcIixcbiAgXCJcXHVGRDgzXCIsXG4gIFwiXFx1MDY0NFxcdTA2MkNcXHUwNjJDXCIsXG4gIFwiXFx1RkQ4NFwiLFxuICBcIlxcdTA2NDRcXHUwNjJDXFx1MDYyQ1wiLFxuICBcIlxcdUZEODVcIixcbiAgXCJcXHUwNjQ0XFx1MDYyRVxcdTA2NDVcIixcbiAgXCJcXHVGRDg2XCIsXG4gIFwiXFx1MDY0NFxcdTA2MkVcXHUwNjQ1XCIsXG4gIFwiXFx1RkQ4N1wiLFxuICBcIlxcdTA2NDRcXHUwNjQ1XFx1MDYyRFwiLFxuICBcIlxcdUZEODhcIixcbiAgXCJcXHUwNjQ0XFx1MDY0NVxcdTA2MkRcIixcbiAgXCJcXHVGRDg5XCIsXG4gIFwiXFx1MDY0NVxcdTA2MkRcXHUwNjJDXCIsXG4gIFwiXFx1RkQ4QVwiLFxuICBcIlxcdTA2NDVcXHUwNjJEXFx1MDY0NVwiLFxuICBcIlxcdUZEOEJcIixcbiAgXCJcXHUwNjQ1XFx1MDYyRFxcdTA2NEFcIixcbiAgXCJcXHVGRDhDXCIsXG4gIFwiXFx1MDY0NVxcdTA2MkNcXHUwNjJEXCIsXG4gIFwiXFx1RkQ4RFwiLFxuICBcIlxcdTA2NDVcXHUwNjJDXFx1MDY0NVwiLFxuICBcIlxcdUZEOEVcIixcbiAgXCJcXHUwNjQ1XFx1MDYyRVxcdTA2MkNcIixcbiAgXCJcXHVGRDhGXCIsXG4gIFwiXFx1MDY0NVxcdTA2MkVcXHUwNjQ1XCIsXG4gIFwiXFx1RkQ5MlwiLFxuICBcIlxcdTA2NDVcXHUwNjJDXFx1MDYyRVwiLFxuICBcIlxcdUZEOTNcIixcbiAgXCJcXHUwNjQ3XFx1MDY0NVxcdTA2MkNcIixcbiAgXCJcXHVGRDk0XCIsXG4gIFwiXFx1MDY0N1xcdTA2NDVcXHUwNjQ1XCIsXG4gIFwiXFx1RkQ5NVwiLFxuICBcIlxcdTA2NDZcXHUwNjJEXFx1MDY0NVwiLFxuICBcIlxcdUZEOTZcIixcbiAgXCJcXHUwNjQ2XFx1MDYyRFxcdTA2NDlcIixcbiAgXCJcXHVGRDk3XCIsXG4gIFwiXFx1MDY0NlxcdTA2MkNcXHUwNjQ1XCIsXG4gIFwiXFx1RkQ5OFwiLFxuICBcIlxcdTA2NDZcXHUwNjJDXFx1MDY0NVwiLFxuICBcIlxcdUZEOTlcIixcbiAgXCJcXHUwNjQ2XFx1MDYyQ1xcdTA2NDlcIixcbiAgXCJcXHVGRDlBXCIsXG4gIFwiXFx1MDY0NlxcdTA2NDVcXHUwNjRBXCIsXG4gIFwiXFx1RkQ5QlwiLFxuICBcIlxcdTA2NDZcXHUwNjQ1XFx1MDY0OVwiLFxuICBcIlxcdUZEOUNcIixcbiAgXCJcXHUwNjRBXFx1MDY0NVxcdTA2NDVcIixcbiAgXCJcXHVGRDlEXCIsXG4gIFwiXFx1MDY0QVxcdTA2NDVcXHUwNjQ1XCIsXG4gIFwiXFx1RkQ5RVwiLFxuICBcIlxcdTA2MjhcXHUwNjJFXFx1MDY0QVwiLFxuICBcIlxcdUZEOUZcIixcbiAgXCJcXHUwNjJBXFx1MDYyQ1xcdTA2NEFcIixcbiAgXCJcXHVGREEwXCIsXG4gIFwiXFx1MDYyQVxcdTA2MkNcXHUwNjQ5XCIsXG4gIFwiXFx1RkRBMVwiLFxuICBcIlxcdTA2MkFcXHUwNjJFXFx1MDY0QVwiLFxuICBcIlxcdUZEQTJcIixcbiAgXCJcXHUwNjJBXFx1MDYyRVxcdTA2NDlcIixcbiAgXCJcXHVGREEzXCIsXG4gIFwiXFx1MDYyQVxcdTA2NDVcXHUwNjRBXCIsXG4gIFwiXFx1RkRBNFwiLFxuICBcIlxcdTA2MkFcXHUwNjQ1XFx1MDY0OVwiLFxuICBcIlxcdUZEQTVcIixcbiAgXCJcXHUwNjJDXFx1MDY0NVxcdTA2NEFcIixcbiAgXCJcXHVGREE2XCIsXG4gIFwiXFx1MDYyQ1xcdTA2MkRcXHUwNjQ5XCIsXG4gIFwiXFx1RkRBN1wiLFxuICBcIlxcdTA2MkNcXHUwNjQ1XFx1MDY0OVwiLFxuICBcIlxcdUZEQThcIixcbiAgXCJcXHUwNjMzXFx1MDYyRVxcdTA2NDlcIixcbiAgXCJcXHVGREE5XCIsXG4gIFwiXFx1MDYzNVxcdTA2MkRcXHUwNjRBXCIsXG4gIFwiXFx1RkRBQVwiLFxuICBcIlxcdTA2MzRcXHUwNjJEXFx1MDY0QVwiLFxuICBcIlxcdUZEQUJcIixcbiAgXCJcXHUwNjM2XFx1MDYyRFxcdTA2NEFcIixcbiAgXCJcXHVGREFDXCIsXG4gIFwiXFx1MDY0NFxcdTA2MkNcXHUwNjRBXCIsXG4gIFwiXFx1RkRBRFwiLFxuICBcIlxcdTA2NDRcXHUwNjQ1XFx1MDY0QVwiLFxuICBcIlxcdUZEQUVcIixcbiAgXCJcXHUwNjRBXFx1MDYyRFxcdTA2NEFcIixcbiAgXCJcXHVGREFGXCIsXG4gIFwiXFx1MDY0QVxcdTA2MkNcXHUwNjRBXCIsXG4gIFwiXFx1RkRCMFwiLFxuICBcIlxcdTA2NEFcXHUwNjQ1XFx1MDY0QVwiLFxuICBcIlxcdUZEQjFcIixcbiAgXCJcXHUwNjQ1XFx1MDY0NVxcdTA2NEFcIixcbiAgXCJcXHVGREIyXCIsXG4gIFwiXFx1MDY0MlxcdTA2NDVcXHUwNjRBXCIsXG4gIFwiXFx1RkRCM1wiLFxuICBcIlxcdTA2NDZcXHUwNjJEXFx1MDY0QVwiLFxuICBcIlxcdUZEQjRcIixcbiAgXCJcXHUwNjQyXFx1MDY0NVxcdTA2MkRcIixcbiAgXCJcXHVGREI1XCIsXG4gIFwiXFx1MDY0NFxcdTA2MkRcXHUwNjQ1XCIsXG4gIFwiXFx1RkRCNlwiLFxuICBcIlxcdTA2MzlcXHUwNjQ1XFx1MDY0QVwiLFxuICBcIlxcdUZEQjdcIixcbiAgXCJcXHUwNjQzXFx1MDY0NVxcdTA2NEFcIixcbiAgXCJcXHVGREI4XCIsXG4gIFwiXFx1MDY0NlxcdTA2MkNcXHUwNjJEXCIsXG4gIFwiXFx1RkRCOVwiLFxuICBcIlxcdTA2NDVcXHUwNjJFXFx1MDY0QVwiLFxuICBcIlxcdUZEQkFcIixcbiAgXCJcXHUwNjQ0XFx1MDYyQ1xcdTA2NDVcIixcbiAgXCJcXHVGREJCXCIsXG4gIFwiXFx1MDY0M1xcdTA2NDVcXHUwNjQ1XCIsXG4gIFwiXFx1RkRCQ1wiLFxuICBcIlxcdTA2NDRcXHUwNjJDXFx1MDY0NVwiLFxuICBcIlxcdUZEQkRcIixcbiAgXCJcXHUwNjQ2XFx1MDYyQ1xcdTA2MkRcIixcbiAgXCJcXHVGREJFXCIsXG4gIFwiXFx1MDYyQ1xcdTA2MkRcXHUwNjRBXCIsXG4gIFwiXFx1RkRCRlwiLFxuICBcIlxcdTA2MkRcXHUwNjJDXFx1MDY0QVwiLFxuICBcIlxcdUZEQzBcIixcbiAgXCJcXHUwNjQ1XFx1MDYyQ1xcdTA2NEFcIixcbiAgXCJcXHVGREMxXCIsXG4gIFwiXFx1MDY0MVxcdTA2NDVcXHUwNjRBXCIsXG4gIFwiXFx1RkRDMlwiLFxuICBcIlxcdTA2MjhcXHUwNjJEXFx1MDY0QVwiLFxuICBcIlxcdUZEQzNcIixcbiAgXCJcXHUwNjQzXFx1MDY0NVxcdTA2NDVcIixcbiAgXCJcXHVGREM0XCIsXG4gIFwiXFx1MDYzOVxcdTA2MkNcXHUwNjQ1XCIsXG4gIFwiXFx1RkRDNVwiLFxuICBcIlxcdTA2MzVcXHUwNjQ1XFx1MDY0NVwiLFxuICBcIlxcdUZEQzZcIixcbiAgXCJcXHUwNjMzXFx1MDYyRVxcdTA2NEFcIixcbiAgXCJcXHVGREM3XCIsXG4gIFwiXFx1MDY0NlxcdTA2MkNcXHUwNjRBXCIsXG4gIFwiXFx1RkU0OVwiLFxuICBcIlxcdTIwM0VcIixcbiAgXCJcXHVGRTRBXCIsXG4gIFwiXFx1MjAzRVwiLFxuICBcIlxcdUZFNEJcIixcbiAgXCJcXHUyMDNFXCIsXG4gIFwiXFx1RkU0Q1wiLFxuICBcIlxcdTIwM0VcIixcbiAgXCJcXHVGRTREXCIsXG4gIFwiXFx1MDA1RlwiLFxuICBcIlxcdUZFNEVcIixcbiAgXCJcXHUwMDVGXCIsXG4gIFwiXFx1RkU0RlwiLFxuICBcIlxcdTAwNUZcIixcbiAgXCJcXHVGRTgwXCIsXG4gIFwiXFx1MDYyMVwiLFxuICBcIlxcdUZFODFcIixcbiAgXCJcXHUwNjIyXCIsXG4gIFwiXFx1RkU4MlwiLFxuICBcIlxcdTA2MjJcIixcbiAgXCJcXHVGRTgzXCIsXG4gIFwiXFx1MDYyM1wiLFxuICBcIlxcdUZFODRcIixcbiAgXCJcXHUwNjIzXCIsXG4gIFwiXFx1RkU4NVwiLFxuICBcIlxcdTA2MjRcIixcbiAgXCJcXHVGRTg2XCIsXG4gIFwiXFx1MDYyNFwiLFxuICBcIlxcdUZFODdcIixcbiAgXCJcXHUwNjI1XCIsXG4gIFwiXFx1RkU4OFwiLFxuICBcIlxcdTA2MjVcIixcbiAgXCJcXHVGRTg5XCIsXG4gIFwiXFx1MDYyNlwiLFxuICBcIlxcdUZFOEFcIixcbiAgXCJcXHUwNjI2XCIsXG4gIFwiXFx1RkU4QlwiLFxuICBcIlxcdTA2MjZcIixcbiAgXCJcXHVGRThDXCIsXG4gIFwiXFx1MDYyNlwiLFxuICBcIlxcdUZFOERcIixcbiAgXCJcXHUwNjI3XCIsXG4gIFwiXFx1RkU4RVwiLFxuICBcIlxcdTA2MjdcIixcbiAgXCJcXHVGRThGXCIsXG4gIFwiXFx1MDYyOFwiLFxuICBcIlxcdUZFOTBcIixcbiAgXCJcXHUwNjI4XCIsXG4gIFwiXFx1RkU5MVwiLFxuICBcIlxcdTA2MjhcIixcbiAgXCJcXHVGRTkyXCIsXG4gIFwiXFx1MDYyOFwiLFxuICBcIlxcdUZFOTNcIixcbiAgXCJcXHUwNjI5XCIsXG4gIFwiXFx1RkU5NFwiLFxuICBcIlxcdTA2MjlcIixcbiAgXCJcXHVGRTk1XCIsXG4gIFwiXFx1MDYyQVwiLFxuICBcIlxcdUZFOTZcIixcbiAgXCJcXHUwNjJBXCIsXG4gIFwiXFx1RkU5N1wiLFxuICBcIlxcdTA2MkFcIixcbiAgXCJcXHVGRTk4XCIsXG4gIFwiXFx1MDYyQVwiLFxuICBcIlxcdUZFOTlcIixcbiAgXCJcXHUwNjJCXCIsXG4gIFwiXFx1RkU5QVwiLFxuICBcIlxcdTA2MkJcIixcbiAgXCJcXHVGRTlCXCIsXG4gIFwiXFx1MDYyQlwiLFxuICBcIlxcdUZFOUNcIixcbiAgXCJcXHUwNjJCXCIsXG4gIFwiXFx1RkU5RFwiLFxuICBcIlxcdTA2MkNcIixcbiAgXCJcXHVGRTlFXCIsXG4gIFwiXFx1MDYyQ1wiLFxuICBcIlxcdUZFOUZcIixcbiAgXCJcXHUwNjJDXCIsXG4gIFwiXFx1RkVBMFwiLFxuICBcIlxcdTA2MkNcIixcbiAgXCJcXHVGRUExXCIsXG4gIFwiXFx1MDYyRFwiLFxuICBcIlxcdUZFQTJcIixcbiAgXCJcXHUwNjJEXCIsXG4gIFwiXFx1RkVBM1wiLFxuICBcIlxcdTA2MkRcIixcbiAgXCJcXHVGRUE0XCIsXG4gIFwiXFx1MDYyRFwiLFxuICBcIlxcdUZFQTVcIixcbiAgXCJcXHUwNjJFXCIsXG4gIFwiXFx1RkVBNlwiLFxuICBcIlxcdTA2MkVcIixcbiAgXCJcXHVGRUE3XCIsXG4gIFwiXFx1MDYyRVwiLFxuICBcIlxcdUZFQThcIixcbiAgXCJcXHUwNjJFXCIsXG4gIFwiXFx1RkVBOVwiLFxuICBcIlxcdTA2MkZcIixcbiAgXCJcXHVGRUFBXCIsXG4gIFwiXFx1MDYyRlwiLFxuICBcIlxcdUZFQUJcIixcbiAgXCJcXHUwNjMwXCIsXG4gIFwiXFx1RkVBQ1wiLFxuICBcIlxcdTA2MzBcIixcbiAgXCJcXHVGRUFEXCIsXG4gIFwiXFx1MDYzMVwiLFxuICBcIlxcdUZFQUVcIixcbiAgXCJcXHUwNjMxXCIsXG4gIFwiXFx1RkVBRlwiLFxuICBcIlxcdTA2MzJcIixcbiAgXCJcXHVGRUIwXCIsXG4gIFwiXFx1MDYzMlwiLFxuICBcIlxcdUZFQjFcIixcbiAgXCJcXHUwNjMzXCIsXG4gIFwiXFx1RkVCMlwiLFxuICBcIlxcdTA2MzNcIixcbiAgXCJcXHVGRUIzXCIsXG4gIFwiXFx1MDYzM1wiLFxuICBcIlxcdUZFQjRcIixcbiAgXCJcXHUwNjMzXCIsXG4gIFwiXFx1RkVCNVwiLFxuICBcIlxcdTA2MzRcIixcbiAgXCJcXHVGRUI2XCIsXG4gIFwiXFx1MDYzNFwiLFxuICBcIlxcdUZFQjdcIixcbiAgXCJcXHUwNjM0XCIsXG4gIFwiXFx1RkVCOFwiLFxuICBcIlxcdTA2MzRcIixcbiAgXCJcXHVGRUI5XCIsXG4gIFwiXFx1MDYzNVwiLFxuICBcIlxcdUZFQkFcIixcbiAgXCJcXHUwNjM1XCIsXG4gIFwiXFx1RkVCQlwiLFxuICBcIlxcdTA2MzVcIixcbiAgXCJcXHVGRUJDXCIsXG4gIFwiXFx1MDYzNVwiLFxuICBcIlxcdUZFQkRcIixcbiAgXCJcXHUwNjM2XCIsXG4gIFwiXFx1RkVCRVwiLFxuICBcIlxcdTA2MzZcIixcbiAgXCJcXHVGRUJGXCIsXG4gIFwiXFx1MDYzNlwiLFxuICBcIlxcdUZFQzBcIixcbiAgXCJcXHUwNjM2XCIsXG4gIFwiXFx1RkVDMVwiLFxuICBcIlxcdTA2MzdcIixcbiAgXCJcXHVGRUMyXCIsXG4gIFwiXFx1MDYzN1wiLFxuICBcIlxcdUZFQzNcIixcbiAgXCJcXHUwNjM3XCIsXG4gIFwiXFx1RkVDNFwiLFxuICBcIlxcdTA2MzdcIixcbiAgXCJcXHVGRUM1XCIsXG4gIFwiXFx1MDYzOFwiLFxuICBcIlxcdUZFQzZcIixcbiAgXCJcXHUwNjM4XCIsXG4gIFwiXFx1RkVDN1wiLFxuICBcIlxcdTA2MzhcIixcbiAgXCJcXHVGRUM4XCIsXG4gIFwiXFx1MDYzOFwiLFxuICBcIlxcdUZFQzlcIixcbiAgXCJcXHUwNjM5XCIsXG4gIFwiXFx1RkVDQVwiLFxuICBcIlxcdTA2MzlcIixcbiAgXCJcXHVGRUNCXCIsXG4gIFwiXFx1MDYzOVwiLFxuICBcIlxcdUZFQ0NcIixcbiAgXCJcXHUwNjM5XCIsXG4gIFwiXFx1RkVDRFwiLFxuICBcIlxcdTA2M0FcIixcbiAgXCJcXHVGRUNFXCIsXG4gIFwiXFx1MDYzQVwiLFxuICBcIlxcdUZFQ0ZcIixcbiAgXCJcXHUwNjNBXCIsXG4gIFwiXFx1RkVEMFwiLFxuICBcIlxcdTA2M0FcIixcbiAgXCJcXHVGRUQxXCIsXG4gIFwiXFx1MDY0MVwiLFxuICBcIlxcdUZFRDJcIixcbiAgXCJcXHUwNjQxXCIsXG4gIFwiXFx1RkVEM1wiLFxuICBcIlxcdTA2NDFcIixcbiAgXCJcXHVGRUQ0XCIsXG4gIFwiXFx1MDY0MVwiLFxuICBcIlxcdUZFRDVcIixcbiAgXCJcXHUwNjQyXCIsXG4gIFwiXFx1RkVENlwiLFxuICBcIlxcdTA2NDJcIixcbiAgXCJcXHVGRUQ3XCIsXG4gIFwiXFx1MDY0MlwiLFxuICBcIlxcdUZFRDhcIixcbiAgXCJcXHUwNjQyXCIsXG4gIFwiXFx1RkVEOVwiLFxuICBcIlxcdTA2NDNcIixcbiAgXCJcXHVGRURBXCIsXG4gIFwiXFx1MDY0M1wiLFxuICBcIlxcdUZFREJcIixcbiAgXCJcXHUwNjQzXCIsXG4gIFwiXFx1RkVEQ1wiLFxuICBcIlxcdTA2NDNcIixcbiAgXCJcXHVGRUREXCIsXG4gIFwiXFx1MDY0NFwiLFxuICBcIlxcdUZFREVcIixcbiAgXCJcXHUwNjQ0XCIsXG4gIFwiXFx1RkVERlwiLFxuICBcIlxcdTA2NDRcIixcbiAgXCJcXHVGRUUwXCIsXG4gIFwiXFx1MDY0NFwiLFxuICBcIlxcdUZFRTFcIixcbiAgXCJcXHUwNjQ1XCIsXG4gIFwiXFx1RkVFMlwiLFxuICBcIlxcdTA2NDVcIixcbiAgXCJcXHVGRUUzXCIsXG4gIFwiXFx1MDY0NVwiLFxuICBcIlxcdUZFRTRcIixcbiAgXCJcXHUwNjQ1XCIsXG4gIFwiXFx1RkVFNVwiLFxuICBcIlxcdTA2NDZcIixcbiAgXCJcXHVGRUU2XCIsXG4gIFwiXFx1MDY0NlwiLFxuICBcIlxcdUZFRTdcIixcbiAgXCJcXHUwNjQ2XCIsXG4gIFwiXFx1RkVFOFwiLFxuICBcIlxcdTA2NDZcIixcbiAgXCJcXHVGRUU5XCIsXG4gIFwiXFx1MDY0N1wiLFxuICBcIlxcdUZFRUFcIixcbiAgXCJcXHUwNjQ3XCIsXG4gIFwiXFx1RkVFQlwiLFxuICBcIlxcdTA2NDdcIixcbiAgXCJcXHVGRUVDXCIsXG4gIFwiXFx1MDY0N1wiLFxuICBcIlxcdUZFRURcIixcbiAgXCJcXHUwNjQ4XCIsXG4gIFwiXFx1RkVFRVwiLFxuICBcIlxcdTA2NDhcIixcbiAgXCJcXHVGRUVGXCIsXG4gIFwiXFx1MDY0OVwiLFxuICBcIlxcdUZFRjBcIixcbiAgXCJcXHUwNjQ5XCIsXG4gIFwiXFx1RkVGMVwiLFxuICBcIlxcdTA2NEFcIixcbiAgXCJcXHVGRUYyXCIsXG4gIFwiXFx1MDY0QVwiLFxuICBcIlxcdUZFRjNcIixcbiAgXCJcXHUwNjRBXCIsXG4gIFwiXFx1RkVGNFwiLFxuICBcIlxcdTA2NEFcIixcbiAgXCJcXHVGRUY1XCIsXG4gIFwiXFx1MDY0NFxcdTA2MjJcIixcbiAgXCJcXHVGRUY2XCIsXG4gIFwiXFx1MDY0NFxcdTA2MjJcIixcbiAgXCJcXHVGRUY3XCIsXG4gIFwiXFx1MDY0NFxcdTA2MjNcIixcbiAgXCJcXHVGRUY4XCIsXG4gIFwiXFx1MDY0NFxcdTA2MjNcIixcbiAgXCJcXHVGRUY5XCIsXG4gIFwiXFx1MDY0NFxcdTA2MjVcIixcbiAgXCJcXHVGRUZBXCIsXG4gIFwiXFx1MDY0NFxcdTA2MjVcIixcbiAgXCJcXHVGRUZCXCIsXG4gIFwiXFx1MDY0NFxcdTA2MjdcIixcbiAgXCJcXHVGRUZDXCIsXG4gIFwiXFx1MDY0NFxcdTA2MjdcIlxuIF07XG59KTtcbmZ1bmN0aW9uIHJldmVyc2VJZlJ0bChjaGFycykge1xuIGNvbnN0IGNoYXJzTGVuZ3RoID0gY2hhcnMubGVuZ3RoO1xuIGlmIChjaGFyc0xlbmd0aCA8PSAxIHx8ICFpc1JUTFJhbmdlRm9yKGNoYXJzLmNoYXJDb2RlQXQoMCkpKSB7XG4gIHJldHVybiBjaGFycztcbiB9XG4gY29uc3QgYnVmID0gW107XG4gZm9yIChsZXQgaWkgPSBjaGFyc0xlbmd0aCAtIDE7IGlpID49IDA7IGlpLS0pIHtcbiAgYnVmLnB1c2goY2hhcnNbaWldKTtcbiB9XG4gcmV0dXJuIGJ1Zi5qb2luKFwiXCIpO1xufVxuXG5cbi8qKiovIH0pLFxuLyogMjIgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuTWFya3VwQW5ub3RhdGlvbiA9IGV4cG9ydHMuQW5ub3RhdGlvbkZhY3RvcnkgPSBleHBvcnRzLkFubm90YXRpb25Cb3JkZXJTdHlsZSA9IGV4cG9ydHMuQW5ub3RhdGlvbiA9IHZvaWQgMDtcbmV4cG9ydHMuZ2V0UXVhZFBvaW50cyA9IGdldFF1YWRQb2ludHM7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOSk7XG5cbnZhciBfZGVmYXVsdF9hcHBlYXJhbmNlID0gX193X3BkZmpzX3JlcXVpcmVfXygyMyk7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfYmlkaSA9IF9fd19wZGZqc19yZXF1aXJlX18oNTkpO1xuXG52YXIgX2NhdGFsb2cgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDY0KTtcblxudmFyIF9jb2xvcnNwYWNlID0gX193X3BkZmpzX3JlcXVpcmVfXygyNCk7XG5cbnZhciBfZmlsZV9zcGVjID0gX193X3BkZmpzX3JlcXVpcmVfXyg2Nik7XG5cbnZhciBfb2JqZWN0X2xvYWRlciA9IF9fd19wZGZqc19yZXF1aXJlX18oNzApO1xuXG52YXIgX29wZXJhdG9yX2xpc3QgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDYyKTtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEwKTtcblxudmFyIF93cml0ZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDcxKTtcblxudmFyIF9mYWN0b3J5ID0gX193X3BkZmpzX3JlcXVpcmVfXyg3NCk7XG5cbmNsYXNzIEFubm90YXRpb25GYWN0b3J5IHtcbiAgc3RhdGljIGNyZWF0ZSh4cmVmLCByZWYsIHBkZk1hbmFnZXIsIGlkRmFjdG9yeSwgY29sbGVjdEZpZWxkcykge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChbcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwiYWNyb0Zvcm1cIiksIGNvbGxlY3RGaWVsZHMgPyB0aGlzLl9nZXRQYWdlSW5kZXgoeHJlZiwgcmVmLCBwZGZNYW5hZ2VyKSA6IC0xXSkudGhlbigoW2Fjcm9Gb3JtLCBwYWdlSW5kZXhdKSA9PiBwZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCBcIl9jcmVhdGVcIiwgW3hyZWYsIHJlZiwgcGRmTWFuYWdlciwgaWRGYWN0b3J5LCBhY3JvRm9ybSwgY29sbGVjdEZpZWxkcywgcGFnZUluZGV4XSkpO1xuICB9XG5cbiAgc3RhdGljIF9jcmVhdGUoeHJlZiwgcmVmLCBwZGZNYW5hZ2VyLCBpZEZhY3RvcnksIGFjcm9Gb3JtLCBjb2xsZWN0RmllbGRzLCBwYWdlSW5kZXggPSAtMSkge1xuICAgIGNvbnN0IGRpY3QgPSB4cmVmLmZldGNoSWZSZWYocmVmKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZGljdCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgaWQgPSAoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKHJlZikgPyByZWYudG9TdHJpbmcoKSA6IGBhbm5vdF8ke2lkRmFjdG9yeS5jcmVhdGVPYmpJZCgpfWA7XG4gICAgbGV0IHN1YnR5cGUgPSBkaWN0LmdldChcIlN1YnR5cGVcIik7XG4gICAgc3VidHlwZSA9ICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHN1YnR5cGUpID8gc3VidHlwZS5uYW1lIDogbnVsbDtcbiAgICBjb25zdCBwYXJhbWV0ZXJzID0ge1xuICAgICAgeHJlZixcbiAgICAgIHJlZixcbiAgICAgIGRpY3QsXG4gICAgICBzdWJ0eXBlLFxuICAgICAgaWQsXG4gICAgICBwZGZNYW5hZ2VyLFxuICAgICAgYWNyb0Zvcm06IGFjcm9Gb3JtIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCA/IGFjcm9Gb3JtIDogX3ByaW1pdGl2ZXMuRGljdC5lbXB0eSxcbiAgICAgIGNvbGxlY3RGaWVsZHMsXG4gICAgICBwYWdlSW5kZXhcbiAgICB9O1xuXG4gICAgc3dpdGNoIChzdWJ0eXBlKSB7XG4gICAgICBjYXNlIFwiTGlua1wiOlxuICAgICAgICByZXR1cm4gbmV3IExpbmtBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiVGV4dFwiOlxuICAgICAgICByZXR1cm4gbmV3IFRleHRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiV2lkZ2V0XCI6XG4gICAgICAgIGxldCBmaWVsZFR5cGUgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe1xuICAgICAgICAgIGRpY3QsXG4gICAgICAgICAga2V5OiBcIkZUXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGZpZWxkVHlwZSA9ICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZpZWxkVHlwZSkgPyBmaWVsZFR5cGUubmFtZSA6IG51bGw7XG5cbiAgICAgICAgc3dpdGNoIChmaWVsZFR5cGUpIHtcbiAgICAgICAgICBjYXNlIFwiVHhcIjpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVGV4dFdpZGdldEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICBjYXNlIFwiQnRuXCI6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJ1dHRvbldpZGdldEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICBjYXNlIFwiQ2hcIjpcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgIGNhc2UgXCJTaWdcIjpcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2lnbmF0dXJlV2lkZ2V0QW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgVW5pbXBsZW1lbnRlZCB3aWRnZXQgZmllbGQgdHlwZSBcIiR7ZmllbGRUeXBlfVwiLCBgICsgXCJmYWxsaW5nIGJhY2sgdG8gYmFzZSBmaWVsZCB0eXBlLlwiKTtcbiAgICAgICAgcmV0dXJuIG5ldyBXaWRnZXRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiUG9wdXBcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBQb3B1cEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgXCJGcmVlVGV4dFwiOlxuICAgICAgICByZXR1cm4gbmV3IEZyZWVUZXh0QW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBcIkxpbmVcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBMaW5lQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBcIlNxdWFyZVwiOlxuICAgICAgICByZXR1cm4gbmV3IFNxdWFyZUFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgXCJDaXJjbGVcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBDaXJjbGVBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiUG9seUxpbmVcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBQb2x5bGluZUFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgXCJQb2x5Z29uXCI6XG4gICAgICAgIHJldHVybiBuZXcgUG9seWdvbkFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgXCJDYXJldFwiOlxuICAgICAgICByZXR1cm4gbmV3IENhcmV0QW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBcIklua1wiOlxuICAgICAgICByZXR1cm4gbmV3IElua0Fubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgXCJIaWdobGlnaHRcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBIaWdobGlnaHRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiVW5kZXJsaW5lXCI6XG4gICAgICAgIHJldHVybiBuZXcgVW5kZXJsaW5lQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBcIlNxdWlnZ2x5XCI6XG4gICAgICAgIHJldHVybiBuZXcgU3F1aWdnbHlBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiU3RyaWtlT3V0XCI6XG4gICAgICAgIHJldHVybiBuZXcgU3RyaWtlT3V0QW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBcIlN0YW1wXCI6XG4gICAgICAgIHJldHVybiBuZXcgU3RhbXBBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiRmlsZUF0dGFjaG1lbnRcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBGaWxlQXR0YWNobWVudEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICghY29sbGVjdEZpZWxkcykge1xuICAgICAgICAgIGlmICghc3VidHlwZSkge1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiQW5ub3RhdGlvbiBpcyBtaXNzaW5nIHRoZSByZXF1aXJlZCAvU3VidHlwZS5cIik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgVW5pbXBsZW1lbnRlZCBhbm5vdGF0aW9uIHR5cGUgXCIke3N1YnR5cGV9XCIsIGAgKyBcImZhbGxpbmcgYmFjayB0byBiYXNlIGFubm90YXRpb24uXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgX2dldFBhZ2VJbmRleCh4cmVmLCByZWYsIHBkZk1hbmFnZXIpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYW5ub3REaWN0ID0gYXdhaXQgeHJlZi5mZXRjaElmUmVmQXN5bmMocmVmKTtcblxuICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShhbm5vdERpY3QpKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFnZVJlZiA9IGFubm90RGljdC5nZXRSYXcoXCJQXCIpO1xuXG4gICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1JlZikocGFnZVJlZikpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWdlSW5kZXggPSBhd2FpdCBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coXCJnZXRQYWdlSW5kZXhcIiwgW3BhZ2VSZWZdKTtcbiAgICAgIHJldHVybiBwYWdlSW5kZXg7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShgX2dldFBhZ2VJbmRleDogXCIke2V4fVwiLmApO1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgfVxuXG59XG5cbmV4cG9ydHMuQW5ub3RhdGlvbkZhY3RvcnkgPSBBbm5vdGF0aW9uRmFjdG9yeTtcblxuZnVuY3Rpb24gZ2V0UmdiQ29sb3IoY29sb3IsIGRlZmF1bHRDb2xvciA9IG5ldyBVaW50OENsYW1wZWRBcnJheSgzKSkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoY29sb3IpKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRDb2xvcjtcbiAgfVxuXG4gIGNvbnN0IHJnYkNvbG9yID0gZGVmYXVsdENvbG9yIHx8IG5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtcblxuICBzd2l0Y2ggKGNvbG9yLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSAxOlxuICAgICAgX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiSXRlbShjb2xvciwgMCwgcmdiQ29sb3IsIDApO1xuXG4gICAgICByZXR1cm4gcmdiQ29sb3I7XG5cbiAgICBjYXNlIDM6XG4gICAgICBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYkl0ZW0oY29sb3IsIDAsIHJnYkNvbG9yLCAwKTtcblxuICAgICAgcmV0dXJuIHJnYkNvbG9yO1xuXG4gICAgY2FzZSA0OlxuICAgICAgX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiSXRlbShjb2xvciwgMCwgcmdiQ29sb3IsIDApO1xuXG4gICAgICByZXR1cm4gcmdiQ29sb3I7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRlZmF1bHRDb2xvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRRdWFkUG9pbnRzKGRpY3QsIHJlY3QpIHtcbiAgaWYgKCFkaWN0LmhhcyhcIlF1YWRQb2ludHNcIikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHF1YWRQb2ludHMgPSBkaWN0LmdldEFycmF5KFwiUXVhZFBvaW50c1wiKTtcblxuICBpZiAoIUFycmF5LmlzQXJyYXkocXVhZFBvaW50cykgfHwgcXVhZFBvaW50cy5sZW5ndGggPT09IDAgfHwgcXVhZFBvaW50cy5sZW5ndGggJSA4ID4gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcXVhZFBvaW50c0xpc3RzID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDAsIGlpID0gcXVhZFBvaW50cy5sZW5ndGggLyA4OyBpIDwgaWk7IGkrKykge1xuICAgIHF1YWRQb2ludHNMaXN0cy5wdXNoKFtdKTtcblxuICAgIGZvciAobGV0IGogPSBpICogOCwgamogPSBpICogOCArIDg7IGogPCBqajsgaiArPSAyKSB7XG4gICAgICBjb25zdCB4ID0gcXVhZFBvaW50c1tqXTtcbiAgICAgIGNvbnN0IHkgPSBxdWFkUG9pbnRzW2ogKyAxXTtcblxuICAgICAgaWYgKHJlY3QgIT09IG51bGwgJiYgKHggPCByZWN0WzBdIHx8IHggPiByZWN0WzJdIHx8IHkgPCByZWN0WzFdIHx8IHkgPiByZWN0WzNdKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcXVhZFBvaW50c0xpc3RzW2ldLnB1c2goe1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcXVhZFBvaW50c0xpc3RzLm1hcChxdWFkUG9pbnRzTGlzdCA9PiB7XG4gICAgY29uc3QgW21pblgsIG1heFgsIG1pblksIG1heFldID0gcXVhZFBvaW50c0xpc3QucmVkdWNlKChbbVgsIE1YLCBtWSwgTVldLCBxdWFkUG9pbnQpID0+IFtNYXRoLm1pbihtWCwgcXVhZFBvaW50LngpLCBNYXRoLm1heChNWCwgcXVhZFBvaW50LngpLCBNYXRoLm1pbihtWSwgcXVhZFBvaW50LnkpLCBNYXRoLm1heChNWSwgcXVhZFBvaW50LnkpXSwgW051bWJlci5NQVhfVkFMVUUsIE51bWJlci5NSU5fVkFMVUUsIE51bWJlci5NQVhfVkFMVUUsIE51bWJlci5NSU5fVkFMVUVdKTtcbiAgICByZXR1cm4gW3tcbiAgICAgIHg6IG1pblgsXG4gICAgICB5OiBtYXhZXG4gICAgfSwge1xuICAgICAgeDogbWF4WCxcbiAgICAgIHk6IG1heFlcbiAgICB9LCB7XG4gICAgICB4OiBtaW5YLFxuICAgICAgeTogbWluWVxuICAgIH0sIHtcbiAgICAgIHg6IG1heFgsXG4gICAgICB5OiBtaW5ZXG4gICAgfV07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFuc2Zvcm1NYXRyaXgocmVjdCwgYmJveCwgbWF0cml4KSB7XG4gIGNvbnN0IFttaW5YLCBtaW5ZLCBtYXhYLCBtYXhZXSA9IF91dGlsLlV0aWwuZ2V0QXhpYWxBbGlnbmVkQm91bmRpbmdCb3goYmJveCwgbWF0cml4KTtcblxuICBpZiAobWluWCA9PT0gbWF4WCB8fCBtaW5ZID09PSBtYXhZKSB7XG4gICAgcmV0dXJuIFsxLCAwLCAwLCAxLCByZWN0WzBdLCByZWN0WzFdXTtcbiAgfVxuXG4gIGNvbnN0IHhSYXRpbyA9IChyZWN0WzJdIC0gcmVjdFswXSkgLyAobWF4WCAtIG1pblgpO1xuICBjb25zdCB5UmF0aW8gPSAocmVjdFszXSAtIHJlY3RbMV0pIC8gKG1heFkgLSBtaW5ZKTtcbiAgcmV0dXJuIFt4UmF0aW8sIDAsIDAsIHlSYXRpbywgcmVjdFswXSAtIG1pblggKiB4UmF0aW8sIHJlY3RbMV0gLSBtaW5ZICogeVJhdGlvXTtcbn1cblxuY2xhc3MgQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtcykge1xuICAgIGNvbnN0IGRpY3QgPSBwYXJhbXMuZGljdDtcbiAgICB0aGlzLnNldFRpdGxlKGRpY3QuZ2V0KFwiVFwiKSk7XG4gICAgdGhpcy5zZXRDb250ZW50cyhkaWN0LmdldChcIkNvbnRlbnRzXCIpKTtcbiAgICB0aGlzLnNldE1vZGlmaWNhdGlvbkRhdGUoZGljdC5nZXQoXCJNXCIpKTtcbiAgICB0aGlzLnNldEZsYWdzKGRpY3QuZ2V0KFwiRlwiKSk7XG4gICAgdGhpcy5zZXRSZWN0YW5nbGUoZGljdC5nZXRBcnJheShcIlJlY3RcIikpO1xuICAgIHRoaXMuc2V0Q29sb3IoZGljdC5nZXRBcnJheShcIkNcIikpO1xuICAgIHRoaXMuc2V0Qm9yZGVyU3R5bGUoZGljdCk7XG4gICAgdGhpcy5zZXRBcHBlYXJhbmNlKGRpY3QpO1xuICAgIHRoaXMuc2V0Qm9yZGVyQW5kQmFja2dyb3VuZENvbG9ycyhkaWN0LmdldChcIk1LXCIpKTtcbiAgICB0aGlzLl9zdHJlYW1zID0gW107XG5cbiAgICBpZiAodGhpcy5hcHBlYXJhbmNlKSB7XG4gICAgICB0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5hcHBlYXJhbmNlKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEgPSB7XG4gICAgICBhbm5vdGF0aW9uRmxhZ3M6IHRoaXMuZmxhZ3MsXG4gICAgICBib3JkZXJTdHlsZTogdGhpcy5ib3JkZXJTdHlsZSxcbiAgICAgIGNvbG9yOiB0aGlzLmNvbG9yLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLmJhY2tncm91bmRDb2xvcixcbiAgICAgIGJvcmRlckNvbG9yOiB0aGlzLmJvcmRlckNvbG9yLFxuICAgICAgY29udGVudHNPYmo6IHRoaXMuX2NvbnRlbnRzLFxuICAgICAgaGFzQXBwZWFyYW5jZTogISF0aGlzLmFwcGVhcmFuY2UsXG4gICAgICBpZDogcGFyYW1zLmlkLFxuICAgICAgbW9kaWZpY2F0aW9uRGF0ZTogdGhpcy5tb2RpZmljYXRpb25EYXRlLFxuICAgICAgcmVjdDogdGhpcy5yZWN0YW5nbGUsXG4gICAgICBzdWJ0eXBlOiBwYXJhbXMuc3VidHlwZSxcbiAgICAgIGhhc093bkNhbnZhczogZmFsc2VcbiAgICB9O1xuXG4gICAgaWYgKHBhcmFtcy5jb2xsZWN0RmllbGRzKSB7XG4gICAgICBjb25zdCBraWRzID0gZGljdC5nZXQoXCJLaWRzXCIpO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShraWRzKSkge1xuICAgICAgICBjb25zdCBraWRJZHMgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGtpZCBvZiBraWRzKSB7XG4gICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikoa2lkKSkge1xuICAgICAgICAgICAga2lkSWRzLnB1c2goa2lkLnRvU3RyaW5nKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChraWRJZHMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgdGhpcy5kYXRhLmtpZElkcyA9IGtpZElkcztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmRhdGEuYWN0aW9ucyA9ICgwLCBfY29yZV91dGlscy5jb2xsZWN0QWN0aW9ucykocGFyYW1zLnhyZWYsIGRpY3QsIF91dGlsLkFubm90YXRpb25BY3Rpb25FdmVudFR5cGUpO1xuICAgICAgdGhpcy5kYXRhLmZpZWxkTmFtZSA9IHRoaXMuX2NvbnN0cnVjdEZpZWxkTmFtZShkaWN0KTtcbiAgICAgIHRoaXMuZGF0YS5wYWdlSW5kZXggPSBwYXJhbXMucGFnZUluZGV4O1xuICAgIH1cblxuICAgIHRoaXMuX2ZhbGxiYWNrRm9udERpY3QgPSBudWxsO1xuICB9XG5cbiAgX2hhc0ZsYWcoZmxhZ3MsIGZsYWcpIHtcbiAgICByZXR1cm4gISEoZmxhZ3MgJiBmbGFnKTtcbiAgfVxuXG4gIF9pc1ZpZXdhYmxlKGZsYWdzKSB7XG4gICAgcmV0dXJuICF0aGlzLl9oYXNGbGFnKGZsYWdzLCBfdXRpbC5Bbm5vdGF0aW9uRmxhZy5JTlZJU0lCTEUpICYmICF0aGlzLl9oYXNGbGFnKGZsYWdzLCBfdXRpbC5Bbm5vdGF0aW9uRmxhZy5OT1ZJRVcpO1xuICB9XG5cbiAgX2lzUHJpbnRhYmxlKGZsYWdzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc0ZsYWcoZmxhZ3MsIF91dGlsLkFubm90YXRpb25GbGFnLlBSSU5UKSAmJiAhdGhpcy5faGFzRmxhZyhmbGFncywgX3V0aWwuQW5ub3RhdGlvbkZsYWcuSU5WSVNJQkxFKTtcbiAgfVxuXG4gIG11c3RCZVZpZXdlZChhbm5vdGF0aW9uU3RvcmFnZSkge1xuICAgIGNvbnN0IHN0b3JhZ2VFbnRyeSA9IGFubm90YXRpb25TdG9yYWdlICYmIGFubm90YXRpb25TdG9yYWdlLmdldCh0aGlzLmRhdGEuaWQpO1xuXG4gICAgaWYgKHN0b3JhZ2VFbnRyeSAmJiBzdG9yYWdlRW50cnkuaGlkZGVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAhc3RvcmFnZUVudHJ5LmhpZGRlbjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy52aWV3YWJsZSAmJiAhdGhpcy5faGFzRmxhZyh0aGlzLmZsYWdzLCBfdXRpbC5Bbm5vdGF0aW9uRmxhZy5ISURERU4pO1xuICB9XG5cbiAgbXVzdEJlUHJpbnRlZChhbm5vdGF0aW9uU3RvcmFnZSkge1xuICAgIGNvbnN0IHN0b3JhZ2VFbnRyeSA9IGFubm90YXRpb25TdG9yYWdlICYmIGFubm90YXRpb25TdG9yYWdlLmdldCh0aGlzLmRhdGEuaWQpO1xuXG4gICAgaWYgKHN0b3JhZ2VFbnRyeSAmJiBzdG9yYWdlRW50cnkucHJpbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHN0b3JhZ2VFbnRyeS5wcmludDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wcmludGFibGU7XG4gIH1cblxuICBnZXQgdmlld2FibGUoKSB7XG4gICAgaWYgKHRoaXMuZGF0YS5xdWFkUG9pbnRzID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmxhZ3MgPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9pc1ZpZXdhYmxlKHRoaXMuZmxhZ3MpO1xuICB9XG5cbiAgZ2V0IHByaW50YWJsZSgpIHtcbiAgICBpZiAodGhpcy5kYXRhLnF1YWRQb2ludHMgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mbGFncyA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9pc1ByaW50YWJsZSh0aGlzLmZsYWdzKTtcbiAgfVxuXG4gIF9wYXJzZVN0cmluZ0hlbHBlcihkYXRhKSB7XG4gICAgY29uc3Qgc3RyID0gdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgPyAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGRhdGEpIDogXCJcIjtcbiAgICBjb25zdCBkaXIgPSBzdHIgJiYgKDAsIF9iaWRpLmJpZGkpKHN0cikuZGlyID09PSBcInJ0bFwiID8gXCJydGxcIiA6IFwibHRyXCI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0cixcbiAgICAgIGRpclxuICAgIH07XG4gIH1cblxuICBzZXRUaXRsZSh0aXRsZSkge1xuICAgIHRoaXMuX3RpdGxlID0gdGhpcy5fcGFyc2VTdHJpbmdIZWxwZXIodGl0bGUpO1xuICB9XG5cbiAgc2V0Q29udGVudHMoY29udGVudHMpIHtcbiAgICB0aGlzLl9jb250ZW50cyA9IHRoaXMuX3BhcnNlU3RyaW5nSGVscGVyKGNvbnRlbnRzKTtcbiAgfVxuXG4gIHNldE1vZGlmaWNhdGlvbkRhdGUobW9kaWZpY2F0aW9uRGF0ZSkge1xuICAgIHRoaXMubW9kaWZpY2F0aW9uRGF0ZSA9ICgwLCBfdXRpbC5pc1N0cmluZykobW9kaWZpY2F0aW9uRGF0ZSkgPyBtb2RpZmljYXRpb25EYXRlIDogbnVsbDtcbiAgfVxuXG4gIHNldEZsYWdzKGZsYWdzKSB7XG4gICAgdGhpcy5mbGFncyA9IE51bWJlci5pc0ludGVnZXIoZmxhZ3MpICYmIGZsYWdzID4gMCA/IGZsYWdzIDogMDtcbiAgfVxuXG4gIGhhc0ZsYWcoZmxhZykge1xuICAgIHJldHVybiB0aGlzLl9oYXNGbGFnKHRoaXMuZmxhZ3MsIGZsYWcpO1xuICB9XG5cbiAgc2V0UmVjdGFuZ2xlKHJlY3RhbmdsZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlY3RhbmdsZSkgJiYgcmVjdGFuZ2xlLmxlbmd0aCA9PT0gNCkge1xuICAgICAgdGhpcy5yZWN0YW5nbGUgPSBfdXRpbC5VdGlsLm5vcm1hbGl6ZVJlY3QocmVjdGFuZ2xlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWN0YW5nbGUgPSBbMCwgMCwgMCwgMF07XG4gICAgfVxuICB9XG5cbiAgc2V0Q29sb3IoY29sb3IpIHtcbiAgICB0aGlzLmNvbG9yID0gZ2V0UmdiQ29sb3IoY29sb3IpO1xuICB9XG5cbiAgc2V0Qm9yZGVyQW5kQmFja2dyb3VuZENvbG9ycyhtaykge1xuICAgIGlmIChtayBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpIHtcbiAgICAgIHRoaXMuYm9yZGVyQ29sb3IgPSBnZXRSZ2JDb2xvcihtay5nZXRBcnJheShcIkJDXCIpLCBudWxsKTtcbiAgICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gZ2V0UmdiQ29sb3IobWsuZ2V0QXJyYXkoXCJCR1wiKSwgbnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm9yZGVyQ29sb3IgPSB0aGlzLmJhY2tncm91bmRDb2xvciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgc2V0Qm9yZGVyU3R5bGUoYm9yZGVyU3R5bGUpIHtcbiAgICB0aGlzLmJvcmRlclN0eWxlID0gbmV3IEFubm90YXRpb25Cb3JkZXJTdHlsZSgpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShib3JkZXJTdHlsZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoYm9yZGVyU3R5bGUuaGFzKFwiQlNcIikpIHtcbiAgICAgIGNvbnN0IGRpY3QgPSBib3JkZXJTdHlsZS5nZXQoXCJCU1wiKTtcbiAgICAgIGNvbnN0IGRpY3RUeXBlID0gZGljdC5nZXQoXCJUeXBlXCIpO1xuXG4gICAgICBpZiAoIWRpY3RUeXBlIHx8ICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGRpY3RUeXBlLCBcIkJvcmRlclwiKSkge1xuICAgICAgICB0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKGRpY3QuZ2V0KFwiV1wiKSwgdGhpcy5yZWN0YW5nbGUpO1xuICAgICAgICB0aGlzLmJvcmRlclN0eWxlLnNldFN0eWxlKGRpY3QuZ2V0KFwiU1wiKSk7XG4gICAgICAgIHRoaXMuYm9yZGVyU3R5bGUuc2V0RGFzaEFycmF5KGRpY3QuZ2V0QXJyYXkoXCJEXCIpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGJvcmRlclN0eWxlLmhhcyhcIkJvcmRlclwiKSkge1xuICAgICAgY29uc3QgYXJyYXkgPSBib3JkZXJTdHlsZS5nZXRBcnJheShcIkJvcmRlclwiKTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyYXkpICYmIGFycmF5Lmxlbmd0aCA+PSAzKSB7XG4gICAgICAgIHRoaXMuYm9yZGVyU3R5bGUuc2V0SG9yaXpvbnRhbENvcm5lclJhZGl1cyhhcnJheVswXSk7XG4gICAgICAgIHRoaXMuYm9yZGVyU3R5bGUuc2V0VmVydGljYWxDb3JuZXJSYWRpdXMoYXJyYXlbMV0pO1xuICAgICAgICB0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKGFycmF5WzJdLCB0aGlzLnJlY3RhbmdsZSk7XG5cbiAgICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgIHRoaXMuYm9yZGVyU3R5bGUuc2V0RGFzaEFycmF5KGFycmF5WzNdLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKDApO1xuICAgIH1cbiAgfVxuXG4gIHNldEFwcGVhcmFuY2UoZGljdCkge1xuICAgIHRoaXMuYXBwZWFyYW5jZSA9IG51bGw7XG4gICAgY29uc3QgYXBwZWFyYW5jZVN0YXRlcyA9IGRpY3QuZ2V0KFwiQVBcIik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGFwcGVhcmFuY2VTdGF0ZXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsQXBwZWFyYW5jZVN0YXRlID0gYXBwZWFyYW5jZVN0YXRlcy5nZXQoXCJOXCIpO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkobm9ybWFsQXBwZWFyYW5jZVN0YXRlKSkge1xuICAgICAgdGhpcy5hcHBlYXJhbmNlID0gbm9ybWFsQXBwZWFyYW5jZVN0YXRlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkobm9ybWFsQXBwZWFyYW5jZVN0YXRlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFzID0gZGljdC5nZXQoXCJBU1wiKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoYXMpIHx8ICFub3JtYWxBcHBlYXJhbmNlU3RhdGUuaGFzKGFzLm5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hcHBlYXJhbmNlID0gbm9ybWFsQXBwZWFyYW5jZVN0YXRlLmdldChhcy5uYW1lKTtcbiAgfVxuXG4gIGxvYWRSZXNvdXJjZXMoa2V5cywgYXBwZWFyYW5jZSkge1xuICAgIHJldHVybiBhcHBlYXJhbmNlLmRpY3QuZ2V0QXN5bmMoXCJSZXNvdXJjZXNcIikudGhlbihyZXNvdXJjZXMgPT4ge1xuICAgICAgaWYgKCFyZXNvdXJjZXMpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2JqZWN0TG9hZGVyID0gbmV3IF9vYmplY3RfbG9hZGVyLk9iamVjdExvYWRlcihyZXNvdXJjZXMsIGtleXMsIHJlc291cmNlcy54cmVmKTtcbiAgICAgIHJldHVybiBvYmplY3RMb2FkZXIubG9hZCgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmVzb3VyY2VzO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRPcGVyYXRvckxpc3QoZXZhbHVhdG9yLCB0YXNrLCBpbnRlbnQsIHJlbmRlckZvcm1zLCBhbm5vdGF0aW9uU3RvcmFnZSkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgbGV0IGFwcGVhcmFuY2UgPSB0aGlzLmFwcGVhcmFuY2U7XG4gICAgY29uc3QgaXNVc2luZ093bkNhbnZhcyA9IGRhdGEuaGFzT3duQ2FudmFzICYmIGludGVudCAmIF91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuRElTUExBWTtcblxuICAgIGlmICghYXBwZWFyYW5jZSkge1xuICAgICAgaWYgKCFpc1VzaW5nT3duQ2FudmFzKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IF9vcGVyYXRvcl9saXN0Lk9wZXJhdG9yTGlzdCgpKTtcbiAgICAgIH1cblxuICAgICAgYXBwZWFyYW5jZSA9IG5ldyBfc3RyZWFtLlN0cmluZ1N0cmVhbShcIlwiKTtcbiAgICAgIGFwcGVhcmFuY2UuZGljdCA9IG5ldyBfcHJpbWl0aXZlcy5EaWN0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXBwZWFyYW5jZURpY3QgPSBhcHBlYXJhbmNlLmRpY3Q7XG4gICAgY29uc3QgcmVzb3VyY2VzUHJvbWlzZSA9IHRoaXMubG9hZFJlc291cmNlcyhbXCJFeHRHU3RhdGVcIiwgXCJDb2xvclNwYWNlXCIsIFwiUGF0dGVyblwiLCBcIlNoYWRpbmdcIiwgXCJYT2JqZWN0XCIsIFwiRm9udFwiXSwgYXBwZWFyYW5jZSk7XG4gICAgY29uc3QgYmJveCA9IGFwcGVhcmFuY2VEaWN0LmdldEFycmF5KFwiQkJveFwiKSB8fCBbMCwgMCwgMSwgMV07XG4gICAgY29uc3QgbWF0cml4ID0gYXBwZWFyYW5jZURpY3QuZ2V0QXJyYXkoXCJNYXRyaXhcIikgfHwgWzEsIDAsIDAsIDEsIDAsIDBdO1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IGdldFRyYW5zZm9ybU1hdHJpeChkYXRhLnJlY3QsIGJib3gsIG1hdHJpeCk7XG4gICAgcmV0dXJuIHJlc291cmNlc1Byb21pc2UudGhlbihyZXNvdXJjZXMgPT4ge1xuICAgICAgY29uc3Qgb3BMaXN0ID0gbmV3IF9vcGVyYXRvcl9saXN0Lk9wZXJhdG9yTGlzdCgpO1xuICAgICAgb3BMaXN0LmFkZE9wKF91dGlsLk9QUy5iZWdpbkFubm90YXRpb24sIFtkYXRhLmlkLCBkYXRhLnJlY3QsIHRyYW5zZm9ybSwgbWF0cml4LCBpc1VzaW5nT3duQ2FudmFzXSk7XG4gICAgICByZXR1cm4gZXZhbHVhdG9yLmdldE9wZXJhdG9yTGlzdCh7XG4gICAgICAgIHN0cmVhbTogYXBwZWFyYW5jZSxcbiAgICAgICAgdGFzayxcbiAgICAgICAgcmVzb3VyY2VzLFxuICAgICAgICBvcGVyYXRvckxpc3Q6IG9wTGlzdCxcbiAgICAgICAgZmFsbGJhY2tGb250RGljdDogdGhpcy5fZmFsbGJhY2tGb250RGljdFxuICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIG9wTGlzdC5hZGRPcChfdXRpbC5PUFMuZW5kQW5ub3RhdGlvbiwgW10pO1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIHJldHVybiBvcExpc3Q7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoZXZhbHVhdG9yLCB0YXNrLCBhbm5vdGF0aW9uU3RvcmFnZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0RmllbGRPYmplY3QoKSB7XG4gICAgaWYgKHRoaXMuZGF0YS5raWRJZHMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiB0aGlzLmRhdGEuaWQsXG4gICAgICAgIGFjdGlvbnM6IHRoaXMuZGF0YS5hY3Rpb25zLFxuICAgICAgICBuYW1lOiB0aGlzLmRhdGEuZmllbGROYW1lLFxuICAgICAgICBzdHJva2VDb2xvcjogdGhpcy5kYXRhLmJvcmRlckNvbG9yLFxuICAgICAgICBmaWxsQ29sb3I6IHRoaXMuZGF0YS5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgIHR5cGU6IFwiXCIsXG4gICAgICAgIGtpZElkczogdGhpcy5kYXRhLmtpZElkcyxcbiAgICAgICAgcGFnZTogdGhpcy5kYXRhLnBhZ2VJbmRleFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIGZvciAoY29uc3Qgc3RyZWFtIG9mIHRoaXMuX3N0cmVhbXMpIHtcbiAgICAgIHN0cmVhbS5yZXNldCgpO1xuICAgIH1cbiAgfVxuXG4gIF9jb25zdHJ1Y3RGaWVsZE5hbWUoZGljdCkge1xuICAgIGlmICghZGljdC5oYXMoXCJUXCIpICYmICFkaWN0LmhhcyhcIlBhcmVudFwiKSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5rbm93biBmaWVsZCBuYW1lLCBmYWxsaW5nIGJhY2sgdG8gZW1wdHkgZmllbGQgbmFtZS5cIik7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBpZiAoIWRpY3QuaGFzKFwiUGFyZW50XCIpKSB7XG4gICAgICByZXR1cm4gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShkaWN0LmdldChcIlRcIikpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpZWxkTmFtZSA9IFtdO1xuXG4gICAgaWYgKGRpY3QuaGFzKFwiVFwiKSkge1xuICAgICAgZmllbGROYW1lLnVuc2hpZnQoKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShkaWN0LmdldChcIlRcIikpKTtcbiAgICB9XG5cbiAgICBsZXQgbG9vcERpY3QgPSBkaWN0O1xuICAgIGNvbnN0IHZpc2l0ZWQgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0KCk7XG5cbiAgICBpZiAoZGljdC5vYmpJZCkge1xuICAgICAgdmlzaXRlZC5wdXQoZGljdC5vYmpJZCk7XG4gICAgfVxuXG4gICAgd2hpbGUgKGxvb3BEaWN0LmhhcyhcIlBhcmVudFwiKSkge1xuICAgICAgbG9vcERpY3QgPSBsb29wRGljdC5nZXQoXCJQYXJlbnRcIik7XG5cbiAgICAgIGlmICghKGxvb3BEaWN0IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkgfHwgbG9vcERpY3Qub2JqSWQgJiYgdmlzaXRlZC5oYXMobG9vcERpY3Qub2JqSWQpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAobG9vcERpY3Qub2JqSWQpIHtcbiAgICAgICAgdmlzaXRlZC5wdXQobG9vcERpY3Qub2JqSWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAobG9vcERpY3QuaGFzKFwiVFwiKSkge1xuICAgICAgICBmaWVsZE5hbWUudW5zaGlmdCgoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGxvb3BEaWN0LmdldChcIlRcIikpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmllbGROYW1lLmpvaW4oXCIuXCIpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Bbm5vdGF0aW9uID0gQW5ub3RhdGlvbjtcblxuY2xhc3MgQW5ub3RhdGlvbkJvcmRlclN0eWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy53aWR0aCA9IDE7XG4gICAgdGhpcy5zdHlsZSA9IF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuU09MSUQ7XG4gICAgdGhpcy5kYXNoQXJyYXkgPSBbM107XG4gICAgdGhpcy5ob3Jpem9udGFsQ29ybmVyUmFkaXVzID0gMDtcbiAgICB0aGlzLnZlcnRpY2FsQ29ybmVyUmFkaXVzID0gMDtcbiAgfVxuXG4gIHNldFdpZHRoKHdpZHRoLCByZWN0ID0gWzAsIDAsIDAsIDBdKSB7XG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHdpZHRoKSkge1xuICAgICAgdGhpcy53aWR0aCA9IDA7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIod2lkdGgpKSB7XG4gICAgICBpZiAod2lkdGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG1heFdpZHRoID0gKHJlY3RbMl0gLSByZWN0WzBdKSAvIDI7XG4gICAgICAgIGNvbnN0IG1heEhlaWdodCA9IChyZWN0WzNdIC0gcmVjdFsxXSkgLyAyO1xuXG4gICAgICAgIGlmIChtYXhXaWR0aCA+IDAgJiYgbWF4SGVpZ2h0ID4gMCAmJiAod2lkdGggPiBtYXhXaWR0aCB8fCB3aWR0aCA+IG1heEhlaWdodCkpIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoYEFubm90YXRpb25Cb3JkZXJTdHlsZS5zZXRXaWR0aCAtIGlnbm9yaW5nIHdpZHRoOiAke3dpZHRofWApO1xuICAgICAgICAgIHdpZHRoID0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgfVxuICB9XG5cbiAgc2V0U3R5bGUoc3R5bGUpIHtcbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHN0eWxlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAoc3R5bGUubmFtZSkge1xuICAgICAgY2FzZSBcIlNcIjpcbiAgICAgICAgdGhpcy5zdHlsZSA9IF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuU09MSUQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiRFwiOlxuICAgICAgICB0aGlzLnN0eWxlID0gX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5EQVNIRUQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiQlwiOlxuICAgICAgICB0aGlzLnN0eWxlID0gX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5CRVZFTEVEO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIklcIjpcbiAgICAgICAgdGhpcy5zdHlsZSA9IF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuSU5TRVQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiVVwiOlxuICAgICAgICB0aGlzLnN0eWxlID0gX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5VTkRFUkxJTkU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzZXREYXNoQXJyYXkoZGFzaEFycmF5LCBmb3JjZVN0eWxlID0gZmFsc2UpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXNoQXJyYXkpICYmIGRhc2hBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWU7XG4gICAgICBsZXQgYWxsWmVyb3MgPSB0cnVlO1xuXG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZGFzaEFycmF5KSB7XG4gICAgICAgIGNvbnN0IHZhbGlkTnVtYmVyID0gK2VsZW1lbnQgPj0gMDtcblxuICAgICAgICBpZiAoIXZhbGlkTnVtYmVyKSB7XG4gICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPiAwKSB7XG4gICAgICAgICAgYWxsWmVyb3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNWYWxpZCAmJiAhYWxsWmVyb3MpIHtcbiAgICAgICAgdGhpcy5kYXNoQXJyYXkgPSBkYXNoQXJyYXk7XG5cbiAgICAgICAgaWYgKGZvcmNlU3R5bGUpIHtcbiAgICAgICAgICB0aGlzLnNldFN0eWxlKF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiRFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMud2lkdGggPSAwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGFzaEFycmF5KSB7XG4gICAgICB0aGlzLndpZHRoID0gMDtcbiAgICB9XG4gIH1cblxuICBzZXRIb3Jpem9udGFsQ29ybmVyUmFkaXVzKHJhZGl1cykge1xuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHJhZGl1cykpIHtcbiAgICAgIHRoaXMuaG9yaXpvbnRhbENvcm5lclJhZGl1cyA9IHJhZGl1cztcbiAgICB9XG4gIH1cblxuICBzZXRWZXJ0aWNhbENvcm5lclJhZGl1cyhyYWRpdXMpIHtcbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihyYWRpdXMpKSB7XG4gICAgICB0aGlzLnZlcnRpY2FsQ29ybmVyUmFkaXVzID0gcmFkaXVzO1xuICAgIH1cbiAgfVxuXG59XG5cbmV4cG9ydHMuQW5ub3RhdGlvbkJvcmRlclN0eWxlID0gQW5ub3RhdGlvbkJvcmRlclN0eWxlO1xuXG5jbGFzcyBNYXJrdXBBbm5vdGF0aW9uIGV4dGVuZHMgQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICBjb25zdCBkaWN0ID0gcGFyYW1ldGVycy5kaWN0O1xuXG4gICAgaWYgKGRpY3QuaGFzKFwiSVJUXCIpKSB7XG4gICAgICBjb25zdCByYXdJUlQgPSBkaWN0LmdldFJhdyhcIklSVFwiKTtcbiAgICAgIHRoaXMuZGF0YS5pblJlcGx5VG8gPSAoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKHJhd0lSVCkgPyByYXdJUlQudG9TdHJpbmcoKSA6IG51bGw7XG4gICAgICBjb25zdCBydCA9IGRpY3QuZ2V0KFwiUlRcIik7XG4gICAgICB0aGlzLmRhdGEucmVwbHlUeXBlID0gKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkocnQpID8gcnQubmFtZSA6IF91dGlsLkFubm90YXRpb25SZXBseVR5cGUuUkVQTFk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YS5yZXBseVR5cGUgPT09IF91dGlsLkFubm90YXRpb25SZXBseVR5cGUuR1JPVVApIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGRpY3QuZ2V0KFwiSVJUXCIpO1xuICAgICAgdGhpcy5zZXRUaXRsZShwYXJlbnQuZ2V0KFwiVFwiKSk7XG4gICAgICB0aGlzLmRhdGEudGl0bGVPYmogPSB0aGlzLl90aXRsZTtcbiAgICAgIHRoaXMuc2V0Q29udGVudHMocGFyZW50LmdldChcIkNvbnRlbnRzXCIpKTtcbiAgICAgIHRoaXMuZGF0YS5jb250ZW50c09iaiA9IHRoaXMuX2NvbnRlbnRzO1xuXG4gICAgICBpZiAoIXBhcmVudC5oYXMoXCJDcmVhdGlvbkRhdGVcIikpIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyZWF0aW9uRGF0ZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNldENyZWF0aW9uRGF0ZShwYXJlbnQuZ2V0KFwiQ3JlYXRpb25EYXRlXCIpKTtcbiAgICAgICAgdGhpcy5kYXRhLmNyZWF0aW9uRGF0ZSA9IHRoaXMuY3JlYXRpb25EYXRlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXBhcmVudC5oYXMoXCJNXCIpKSB7XG4gICAgICAgIHRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0TW9kaWZpY2F0aW9uRGF0ZShwYXJlbnQuZ2V0KFwiTVwiKSk7XG4gICAgICAgIHRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlID0gdGhpcy5tb2RpZmljYXRpb25EYXRlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRhdGEuaGFzUG9wdXAgPSBwYXJlbnQuaGFzKFwiUG9wdXBcIik7XG5cbiAgICAgIGlmICghcGFyZW50LmhhcyhcIkNcIikpIHtcbiAgICAgICAgdGhpcy5kYXRhLmNvbG9yID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0Q29sb3IocGFyZW50LmdldEFycmF5KFwiQ1wiKSk7XG4gICAgICAgIHRoaXMuZGF0YS5jb2xvciA9IHRoaXMuY29sb3I7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YS50aXRsZU9iaiA9IHRoaXMuX3RpdGxlO1xuICAgICAgdGhpcy5zZXRDcmVhdGlvbkRhdGUoZGljdC5nZXQoXCJDcmVhdGlvbkRhdGVcIikpO1xuICAgICAgdGhpcy5kYXRhLmNyZWF0aW9uRGF0ZSA9IHRoaXMuY3JlYXRpb25EYXRlO1xuICAgICAgdGhpcy5kYXRhLmhhc1BvcHVwID0gZGljdC5oYXMoXCJQb3B1cFwiKTtcblxuICAgICAgaWYgKCFkaWN0LmhhcyhcIkNcIikpIHtcbiAgICAgICAgdGhpcy5kYXRhLmNvbG9yID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGljdC5oYXMoXCJSQ1wiKSkge1xuICAgICAgdGhpcy5kYXRhLnJpY2hUZXh0ID0gX2ZhY3RvcnkuWEZBRmFjdG9yeS5nZXRSaWNoVGV4dEFzSHRtbChkaWN0LmdldChcIlJDXCIpKTtcbiAgICB9XG4gIH1cblxuICBzZXRDcmVhdGlvbkRhdGUoY3JlYXRpb25EYXRlKSB7XG4gICAgdGhpcy5jcmVhdGlvbkRhdGUgPSAoMCwgX3V0aWwuaXNTdHJpbmcpKGNyZWF0aW9uRGF0ZSkgPyBjcmVhdGlvbkRhdGUgOiBudWxsO1xuICB9XG5cbiAgX3NldERlZmF1bHRBcHBlYXJhbmNlKHtcbiAgICB4cmVmLFxuICAgIGV4dHJhLFxuICAgIHN0cm9rZUNvbG9yLFxuICAgIGZpbGxDb2xvcixcbiAgICBibGVuZE1vZGUsXG4gICAgc3Ryb2tlQWxwaGEsXG4gICAgZmlsbEFscGhhLFxuICAgIHBvaW50c0NhbGxiYWNrXG4gIH0pIHtcbiAgICBsZXQgbWluWCA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgbGV0IG1pblkgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgIGxldCBtYXhYID0gTnVtYmVyLk1JTl9WQUxVRTtcbiAgICBsZXQgbWF4WSA9IE51bWJlci5NSU5fVkFMVUU7XG4gICAgY29uc3QgYnVmZmVyID0gW1wicVwiXTtcblxuICAgIGlmIChleHRyYSkge1xuICAgICAgYnVmZmVyLnB1c2goZXh0cmEpO1xuICAgIH1cblxuICAgIGlmIChzdHJva2VDb2xvcikge1xuICAgICAgYnVmZmVyLnB1c2goYCR7c3Ryb2tlQ29sb3JbMF19ICR7c3Ryb2tlQ29sb3JbMV19ICR7c3Ryb2tlQ29sb3JbMl19IFJHYCk7XG4gICAgfVxuXG4gICAgaWYgKGZpbGxDb2xvcikge1xuICAgICAgYnVmZmVyLnB1c2goYCR7ZmlsbENvbG9yWzBdfSAke2ZpbGxDb2xvclsxXX0gJHtmaWxsQ29sb3JbMl19IHJnYCk7XG4gICAgfVxuXG4gICAgbGV0IHBvaW50c0FycmF5ID0gdGhpcy5kYXRhLnF1YWRQb2ludHM7XG5cbiAgICBpZiAoIXBvaW50c0FycmF5KSB7XG4gICAgICBwb2ludHNBcnJheSA9IFtbe1xuICAgICAgICB4OiB0aGlzLnJlY3RhbmdsZVswXSxcbiAgICAgICAgeTogdGhpcy5yZWN0YW5nbGVbM11cbiAgICAgIH0sIHtcbiAgICAgICAgeDogdGhpcy5yZWN0YW5nbGVbMl0sXG4gICAgICAgIHk6IHRoaXMucmVjdGFuZ2xlWzNdXG4gICAgICB9LCB7XG4gICAgICAgIHg6IHRoaXMucmVjdGFuZ2xlWzBdLFxuICAgICAgICB5OiB0aGlzLnJlY3RhbmdsZVsxXVxuICAgICAgfSwge1xuICAgICAgICB4OiB0aGlzLnJlY3RhbmdsZVsyXSxcbiAgICAgICAgeTogdGhpcy5yZWN0YW5nbGVbMV1cbiAgICAgIH1dXTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHBvaW50cyBvZiBwb2ludHNBcnJheSkge1xuICAgICAgY29uc3QgW21YLCBNWCwgbVksIE1ZXSA9IHBvaW50c0NhbGxiYWNrKGJ1ZmZlciwgcG9pbnRzKTtcbiAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBtWCk7XG4gICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgTVgpO1xuICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIG1ZKTtcbiAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBNWSk7XG4gICAgfVxuXG4gICAgYnVmZmVyLnB1c2goXCJRXCIpO1xuICAgIGNvbnN0IGZvcm1EaWN0ID0gbmV3IF9wcmltaXRpdmVzLkRpY3QoeHJlZik7XG4gICAgY29uc3QgYXBwZWFyYW5jZVN0cmVhbURpY3QgPSBuZXcgX3ByaW1pdGl2ZXMuRGljdCh4cmVmKTtcbiAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoXCJTdWJ0eXBlXCIsIF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiRm9ybVwiKSk7XG4gICAgY29uc3QgYXBwZWFyYW5jZVN0cmVhbSA9IG5ldyBfc3RyZWFtLlN0cmluZ1N0cmVhbShidWZmZXIuam9pbihcIiBcIikpO1xuICAgIGFwcGVhcmFuY2VTdHJlYW0uZGljdCA9IGFwcGVhcmFuY2VTdHJlYW1EaWN0O1xuICAgIGZvcm1EaWN0LnNldChcIkZtMFwiLCBhcHBlYXJhbmNlU3RyZWFtKTtcbiAgICBjb25zdCBnc0RpY3QgPSBuZXcgX3ByaW1pdGl2ZXMuRGljdCh4cmVmKTtcblxuICAgIGlmIChibGVuZE1vZGUpIHtcbiAgICAgIGdzRGljdC5zZXQoXCJCTVwiLCBfcHJpbWl0aXZlcy5OYW1lLmdldChibGVuZE1vZGUpKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHN0cm9rZUFscGhhID09PSBcIm51bWJlclwiKSB7XG4gICAgICBnc0RpY3Quc2V0KFwiQ0FcIiwgc3Ryb2tlQWxwaGEpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmlsbEFscGhhID09PSBcIm51bWJlclwiKSB7XG4gICAgICBnc0RpY3Quc2V0KFwiY2FcIiwgZmlsbEFscGhhKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0ZURpY3QgPSBuZXcgX3ByaW1pdGl2ZXMuRGljdCh4cmVmKTtcbiAgICBzdGF0ZURpY3Quc2V0KFwiR1MwXCIsIGdzRGljdCk7XG4gICAgY29uc3QgcmVzb3VyY2VzID0gbmV3IF9wcmltaXRpdmVzLkRpY3QoeHJlZik7XG4gICAgcmVzb3VyY2VzLnNldChcIkV4dEdTdGF0ZVwiLCBzdGF0ZURpY3QpO1xuICAgIHJlc291cmNlcy5zZXQoXCJYT2JqZWN0XCIsIGZvcm1EaWN0KTtcbiAgICBjb25zdCBhcHBlYXJhbmNlRGljdCA9IG5ldyBfcHJpbWl0aXZlcy5EaWN0KHhyZWYpO1xuICAgIGFwcGVhcmFuY2VEaWN0LnNldChcIlJlc291cmNlc1wiLCByZXNvdXJjZXMpO1xuICAgIGNvbnN0IGJib3ggPSB0aGlzLmRhdGEucmVjdCA9IFttaW5YLCBtaW5ZLCBtYXhYLCBtYXhZXTtcbiAgICBhcHBlYXJhbmNlRGljdC5zZXQoXCJCQm94XCIsIGJib3gpO1xuICAgIHRoaXMuYXBwZWFyYW5jZSA9IG5ldyBfc3RyZWFtLlN0cmluZ1N0cmVhbShcIi9HUzAgZ3MgL0ZtMCBEb1wiKTtcbiAgICB0aGlzLmFwcGVhcmFuY2UuZGljdCA9IGFwcGVhcmFuY2VEaWN0O1xuXG4gICAgdGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuYXBwZWFyYW5jZSwgYXBwZWFyYW5jZVN0cmVhbSk7XG4gIH1cblxufVxuXG5leHBvcnRzLk1hcmt1cEFubm90YXRpb24gPSBNYXJrdXBBbm5vdGF0aW9uO1xuXG5jbGFzcyBXaWRnZXRBbm5vdGF0aW9uIGV4dGVuZHMgQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtcykge1xuICAgIHN1cGVyKHBhcmFtcyk7XG4gICAgY29uc3QgZGljdCA9IHBhcmFtcy5kaWN0O1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgdGhpcy5yZWYgPSBwYXJhbXMucmVmO1xuICAgIGRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5XSURHRVQ7XG5cbiAgICBpZiAoZGF0YS5maWVsZE5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGF0YS5maWVsZE5hbWUgPSB0aGlzLl9jb25zdHJ1Y3RGaWVsZE5hbWUoZGljdCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuYWN0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkYXRhLmFjdGlvbnMgPSAoMCwgX2NvcmVfdXRpbHMuY29sbGVjdEFjdGlvbnMpKHBhcmFtcy54cmVmLCBkaWN0LCBfdXRpbC5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlKTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZFZhbHVlID0gKDAsIF9jb3JlX3V0aWxzLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtcbiAgICAgIGRpY3QsXG4gICAgICBrZXk6IFwiVlwiLFxuICAgICAgZ2V0QXJyYXk6IHRydWVcbiAgICB9KTtcbiAgICBkYXRhLmZpZWxkVmFsdWUgPSB0aGlzLl9kZWNvZGVGb3JtVmFsdWUoZmllbGRWYWx1ZSk7XG4gICAgY29uc3QgZGVmYXVsdEZpZWxkVmFsdWUgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe1xuICAgICAgZGljdCxcbiAgICAgIGtleTogXCJEVlwiLFxuICAgICAgZ2V0QXJyYXk6IHRydWVcbiAgICB9KTtcbiAgICBkYXRhLmRlZmF1bHRGaWVsZFZhbHVlID0gdGhpcy5fZGVjb2RlRm9ybVZhbHVlKGRlZmF1bHRGaWVsZFZhbHVlKTtcblxuICAgIGlmIChmaWVsZFZhbHVlID09PSB1bmRlZmluZWQgJiYgZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgZGF0YS5maWVsZFZhbHVlID0gZGF0YS5kZWZhdWx0RmllbGRWYWx1ZTtcbiAgICB9XG5cbiAgICBkYXRhLmFsdGVybmF0aXZlVGV4dCA9ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoZGljdC5nZXQoXCJUVVwiKSB8fCBcIlwiKTtcbiAgICBjb25zdCBkZWZhdWx0QXBwZWFyYW5jZSA9ICgwLCBfY29yZV91dGlscy5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICBkaWN0LFxuICAgICAga2V5OiBcIkRBXCJcbiAgICB9KSB8fCBwYXJhbXMuYWNyb0Zvcm0uZ2V0KFwiREFcIik7XG4gICAgdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2UgPSAoMCwgX3V0aWwuaXNTdHJpbmcpKGRlZmF1bHRBcHBlYXJhbmNlKSA/IGRlZmF1bHRBcHBlYXJhbmNlIDogXCJcIjtcbiAgICBkYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YSA9ICgwLCBfZGVmYXVsdF9hcHBlYXJhbmNlLnBhcnNlRGVmYXVsdEFwcGVhcmFuY2UpKHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlKTtcbiAgICBjb25zdCBmaWVsZFR5cGUgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe1xuICAgICAgZGljdCxcbiAgICAgIGtleTogXCJGVFwiXG4gICAgfSk7XG4gICAgZGF0YS5maWVsZFR5cGUgPSAoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShmaWVsZFR5cGUpID8gZmllbGRUeXBlLm5hbWUgOiBudWxsO1xuICAgIGNvbnN0IGxvY2FsUmVzb3VyY2VzID0gKDAsIF9jb3JlX3V0aWxzLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtcbiAgICAgIGRpY3QsXG4gICAgICBrZXk6IFwiRFJcIlxuICAgIH0pO1xuICAgIGNvbnN0IGFjcm9Gb3JtUmVzb3VyY2VzID0gcGFyYW1zLmFjcm9Gb3JtLmdldChcIkRSXCIpO1xuICAgIGNvbnN0IGFwcGVhcmFuY2VSZXNvdXJjZXMgPSB0aGlzLmFwcGVhcmFuY2UgJiYgdGhpcy5hcHBlYXJhbmNlLmRpY3QuZ2V0KFwiUmVzb3VyY2VzXCIpO1xuICAgIHRoaXMuX2ZpZWxkUmVzb3VyY2VzID0ge1xuICAgICAgbG9jYWxSZXNvdXJjZXMsXG4gICAgICBhY3JvRm9ybVJlc291cmNlcyxcbiAgICAgIGFwcGVhcmFuY2VSZXNvdXJjZXMsXG4gICAgICBtZXJnZWRSZXNvdXJjZXM6IF9wcmltaXRpdmVzLkRpY3QubWVyZ2Uoe1xuICAgICAgICB4cmVmOiBwYXJhbXMueHJlZixcbiAgICAgICAgZGljdEFycmF5OiBbbG9jYWxSZXNvdXJjZXMsIGFwcGVhcmFuY2VSZXNvdXJjZXMsIGFjcm9Gb3JtUmVzb3VyY2VzXSxcbiAgICAgICAgbWVyZ2VTdWJEaWN0czogdHJ1ZVxuICAgICAgfSlcbiAgICB9O1xuICAgIGRhdGEuZmllbGRGbGFncyA9ICgwLCBfY29yZV91dGlscy5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICBkaWN0LFxuICAgICAga2V5OiBcIkZmXCJcbiAgICB9KTtcblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihkYXRhLmZpZWxkRmxhZ3MpIHx8IGRhdGEuZmllbGRGbGFncyA8IDApIHtcbiAgICAgIGRhdGEuZmllbGRGbGFncyA9IDA7XG4gICAgfVxuXG4gICAgZGF0YS5yZWFkT25seSA9IHRoaXMuaGFzRmllbGRGbGFnKF91dGlsLkFubm90YXRpb25GaWVsZEZsYWcuUkVBRE9OTFkpO1xuICAgIGRhdGEuaGlkZGVuID0gdGhpcy5faGFzRmxhZyhkYXRhLmFubm90YXRpb25GbGFncywgX3V0aWwuQW5ub3RhdGlvbkZsYWcuSElEREVOKTtcbiAgfVxuXG4gIF9kZWNvZGVGb3JtVmFsdWUoZm9ybVZhbHVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9ybVZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZvcm1WYWx1ZS5maWx0ZXIoaXRlbSA9PiAoMCwgX3V0aWwuaXNTdHJpbmcpKGl0ZW0pKS5tYXAoaXRlbSA9PiAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGl0ZW0pKTtcbiAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZvcm1WYWx1ZSkpIHtcbiAgICAgIHJldHVybiAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGZvcm1WYWx1ZS5uYW1lKTtcbiAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykoZm9ybVZhbHVlKSkge1xuICAgICAgcmV0dXJuICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoZm9ybVZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGhhc0ZpZWxkRmxhZyhmbGFnKSB7XG4gICAgcmV0dXJuICEhKHRoaXMuZGF0YS5maWVsZEZsYWdzICYgZmxhZyk7XG4gIH1cblxuICBnZXRPcGVyYXRvckxpc3QoZXZhbHVhdG9yLCB0YXNrLCBpbnRlbnQsIHJlbmRlckZvcm1zLCBhbm5vdGF0aW9uU3RvcmFnZSkge1xuICAgIGlmIChyZW5kZXJGb3JtcyAmJiAhKHRoaXMgaW5zdGFuY2VvZiBTaWduYXR1cmVXaWRnZXRBbm5vdGF0aW9uKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgX29wZXJhdG9yX2xpc3QuT3BlcmF0b3JMaXN0KCkpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5faGFzVGV4dCkge1xuICAgICAgcmV0dXJuIHN1cGVyLmdldE9wZXJhdG9yTGlzdChldmFsdWF0b3IsIHRhc2ssIGludGVudCwgcmVuZGVyRm9ybXMsIGFubm90YXRpb25TdG9yYWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fZ2V0QXBwZWFyYW5jZShldmFsdWF0b3IsIHRhc2ssIGFubm90YXRpb25TdG9yYWdlKS50aGVuKGNvbnRlbnQgPT4ge1xuICAgICAgaWYgKHRoaXMuYXBwZWFyYW5jZSAmJiBjb250ZW50ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRPcGVyYXRvckxpc3QoZXZhbHVhdG9yLCB0YXNrLCBpbnRlbnQsIHJlbmRlckZvcm1zLCBhbm5vdGF0aW9uU3RvcmFnZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9wZXJhdG9yTGlzdCA9IG5ldyBfb3BlcmF0b3JfbGlzdC5PcGVyYXRvckxpc3QoKTtcblxuICAgICAgaWYgKCF0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZSB8fCBjb250ZW50ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBvcGVyYXRvckxpc3Q7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hdHJpeCA9IFsxLCAwLCAwLCAxLCAwLCAwXTtcbiAgICAgIGNvbnN0IGJib3ggPSBbMCwgMCwgdGhpcy5kYXRhLnJlY3RbMl0gLSB0aGlzLmRhdGEucmVjdFswXSwgdGhpcy5kYXRhLnJlY3RbM10gLSB0aGlzLmRhdGEucmVjdFsxXV07XG4gICAgICBjb25zdCB0cmFuc2Zvcm0gPSBnZXRUcmFuc2Zvcm1NYXRyaXgodGhpcy5kYXRhLnJlY3QsIGJib3gsIG1hdHJpeCk7XG4gICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLmJlZ2luQW5ub3RhdGlvbiwgW3RoaXMuZGF0YS5pZCwgdGhpcy5kYXRhLnJlY3QsIHRyYW5zZm9ybSwgbWF0cml4XSk7XG4gICAgICBjb25zdCBzdHJlYW0gPSBuZXcgX3N0cmVhbS5TdHJpbmdTdHJlYW0oY29udGVudCk7XG4gICAgICByZXR1cm4gZXZhbHVhdG9yLmdldE9wZXJhdG9yTGlzdCh7XG4gICAgICAgIHN0cmVhbSxcbiAgICAgICAgdGFzayxcbiAgICAgICAgcmVzb3VyY2VzOiB0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMsXG4gICAgICAgIG9wZXJhdG9yTGlzdFxuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuZW5kQW5ub3RhdGlvbiwgW10pO1xuICAgICAgICByZXR1cm4gb3BlcmF0b3JMaXN0O1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzYXZlKGV2YWx1YXRvciwgdGFzaywgYW5ub3RhdGlvblN0b3JhZ2UpIHtcbiAgICBpZiAoIWFubm90YXRpb25TdG9yYWdlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzdG9yYWdlRW50cnkgPSBhbm5vdGF0aW9uU3RvcmFnZS5nZXQodGhpcy5kYXRhLmlkKTtcbiAgICBjb25zdCB2YWx1ZSA9IHN0b3JhZ2VFbnRyeSAmJiBzdG9yYWdlRW50cnkudmFsdWU7XG5cbiAgICBpZiAodmFsdWUgPT09IHRoaXMuZGF0YS5maWVsZFZhbHVlIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBhcHBlYXJhbmNlID0gYXdhaXQgdGhpcy5fZ2V0QXBwZWFyYW5jZShldmFsdWF0b3IsIHRhc2ssIGFubm90YXRpb25TdG9yYWdlKTtcblxuICAgIGlmIChhcHBlYXJhbmNlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICB4cmVmXG4gICAgfSA9IGV2YWx1YXRvcjtcbiAgICBjb25zdCBkaWN0ID0geHJlZi5mZXRjaElmUmVmKHRoaXMucmVmKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZGljdCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGJib3ggPSBbMCwgMCwgdGhpcy5kYXRhLnJlY3RbMl0gLSB0aGlzLmRhdGEucmVjdFswXSwgdGhpcy5kYXRhLnJlY3RbM10gLSB0aGlzLmRhdGEucmVjdFsxXV07XG4gICAgY29uc3QgeGZhID0ge1xuICAgICAgcGF0aDogKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShkaWN0LmdldChcIlRcIikgfHwgXCJcIiksXG4gICAgICB2YWx1ZVxuICAgIH07XG4gICAgY29uc3QgbmV3UmVmID0geHJlZi5nZXROZXdSZWYoKTtcbiAgICBjb25zdCBBUCA9IG5ldyBfcHJpbWl0aXZlcy5EaWN0KHhyZWYpO1xuICAgIEFQLnNldChcIk5cIiwgbmV3UmVmKTtcbiAgICBjb25zdCBlbmNyeXB0ID0geHJlZi5lbmNyeXB0O1xuICAgIGxldCBvcmlnaW5hbFRyYW5zZm9ybSA9IG51bGw7XG4gICAgbGV0IG5ld1RyYW5zZm9ybSA9IG51bGw7XG5cbiAgICBpZiAoZW5jcnlwdCkge1xuICAgICAgb3JpZ2luYWxUcmFuc2Zvcm0gPSBlbmNyeXB0LmNyZWF0ZUNpcGhlclRyYW5zZm9ybSh0aGlzLnJlZi5udW0sIHRoaXMucmVmLmdlbik7XG4gICAgICBuZXdUcmFuc2Zvcm0gPSBlbmNyeXB0LmNyZWF0ZUNpcGhlclRyYW5zZm9ybShuZXdSZWYubnVtLCBuZXdSZWYuZ2VuKTtcbiAgICAgIGFwcGVhcmFuY2UgPSBuZXdUcmFuc2Zvcm0uZW5jcnlwdFN0cmluZyhhcHBlYXJhbmNlKTtcbiAgICB9XG5cbiAgICBkaWN0LnNldChcIlZcIiwgKDAsIF91dGlsLmlzQXNjaWkpKHZhbHVlKSA/IHZhbHVlIDogKDAsIF91dGlsLnN0cmluZ1RvVVRGMTZCRVN0cmluZykodmFsdWUpKTtcbiAgICBkaWN0LnNldChcIkFQXCIsIEFQKTtcbiAgICBkaWN0LnNldChcIk1cIiwgYEQ6JHsoMCwgX3V0aWwuZ2V0TW9kaWZpY2F0aW9uRGF0ZSkoKX1gKTtcbiAgICBjb25zdCBhcHBlYXJhbmNlRGljdCA9IG5ldyBfcHJpbWl0aXZlcy5EaWN0KHhyZWYpO1xuICAgIGFwcGVhcmFuY2VEaWN0LnNldChcIkxlbmd0aFwiLCBhcHBlYXJhbmNlLmxlbmd0aCk7XG4gICAgYXBwZWFyYW5jZURpY3Quc2V0KFwiU3VidHlwZVwiLCBfcHJpbWl0aXZlcy5OYW1lLmdldChcIkZvcm1cIikpO1xuICAgIGFwcGVhcmFuY2VEaWN0LnNldChcIlJlc291cmNlc1wiLCB0aGlzLl9nZXRTYXZlRmllbGRSZXNvdXJjZXMoeHJlZikpO1xuICAgIGFwcGVhcmFuY2VEaWN0LnNldChcIkJCb3hcIiwgYmJveCk7XG4gICAgY29uc3QgYnVmZmVyT3JpZ2luYWwgPSBbYCR7dGhpcy5yZWYubnVtfSAke3RoaXMucmVmLmdlbn0gb2JqXFxuYF07XG4gICAgKDAsIF93cml0ZXIud3JpdGVEaWN0KShkaWN0LCBidWZmZXJPcmlnaW5hbCwgb3JpZ2luYWxUcmFuc2Zvcm0pO1xuICAgIGJ1ZmZlck9yaWdpbmFsLnB1c2goXCJcXG5lbmRvYmpcXG5cIik7XG4gICAgY29uc3QgYnVmZmVyTmV3ID0gW2Ake25ld1JlZi5udW19ICR7bmV3UmVmLmdlbn0gb2JqXFxuYF07XG4gICAgKDAsIF93cml0ZXIud3JpdGVEaWN0KShhcHBlYXJhbmNlRGljdCwgYnVmZmVyTmV3LCBuZXdUcmFuc2Zvcm0pO1xuICAgIGJ1ZmZlck5ldy5wdXNoKFwiIHN0cmVhbVxcblwiLCBhcHBlYXJhbmNlLCBcIlxcbmVuZHN0cmVhbVxcbmVuZG9ialxcblwiKTtcbiAgICByZXR1cm4gW3tcbiAgICAgIHJlZjogdGhpcy5yZWYsXG4gICAgICBkYXRhOiBidWZmZXJPcmlnaW5hbC5qb2luKFwiXCIpLFxuICAgICAgeGZhXG4gICAgfSwge1xuICAgICAgcmVmOiBuZXdSZWYsXG4gICAgICBkYXRhOiBidWZmZXJOZXcuam9pbihcIlwiKSxcbiAgICAgIHhmYTogbnVsbFxuICAgIH1dO1xuICB9XG5cbiAgYXN5bmMgX2dldEFwcGVhcmFuY2UoZXZhbHVhdG9yLCB0YXNrLCBhbm5vdGF0aW9uU3RvcmFnZSkge1xuICAgIGNvbnN0IGlzUGFzc3dvcmQgPSB0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLlBBU1NXT1JEKTtcblxuICAgIGlmICghYW5ub3RhdGlvblN0b3JhZ2UgfHwgaXNQYXNzd29yZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RvcmFnZUVudHJ5ID0gYW5ub3RhdGlvblN0b3JhZ2UuZ2V0KHRoaXMuZGF0YS5pZCk7XG4gICAgbGV0IHZhbHVlID0gc3RvcmFnZUVudHJ5ICYmIHN0b3JhZ2VFbnRyeS52YWx1ZTtcblxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgbGV0IGxpbmVDb3VudCA9IC0xO1xuXG4gICAgaWYgKHRoaXMuZGF0YS5tdWx0aUxpbmUpIHtcbiAgICAgIGxpbmVDb3VudCA9IHZhbHVlLnNwbGl0KC9cXHJcXG58XFxyfFxcbi8pLmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0UGFkZGluZyA9IDI7XG4gICAgY29uc3QgaFBhZGRpbmcgPSBkZWZhdWx0UGFkZGluZztcbiAgICBjb25zdCB0b3RhbEhlaWdodCA9IHRoaXMuZGF0YS5yZWN0WzNdIC0gdGhpcy5kYXRhLnJlY3RbMV07XG4gICAgY29uc3QgdG90YWxXaWR0aCA9IHRoaXMuZGF0YS5yZWN0WzJdIC0gdGhpcy5kYXRhLnJlY3RbMF07XG5cbiAgICBpZiAoIXRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlKSB7XG4gICAgICB0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhID0gKDAsIF9kZWZhdWx0X2FwcGVhcmFuY2UucGFyc2VEZWZhdWx0QXBwZWFyYW5jZSkodGhpcy5fZGVmYXVsdEFwcGVhcmFuY2UgPSBcIi9IZWx2ZXRpY2EgMCBUZiAwIGdcIik7XG4gICAgfVxuXG4gICAgY29uc3QgW2RlZmF1bHRBcHBlYXJhbmNlLCBmb250U2l6ZV0gPSB0aGlzLl9jb21wdXRlRm9udFNpemUodG90YWxIZWlnaHQsIGxpbmVDb3VudCk7XG5cbiAgICBjb25zdCBmb250ID0gYXdhaXQgdGhpcy5fZ2V0Rm9udERhdGEoZXZhbHVhdG9yLCB0YXNrKTtcbiAgICBsZXQgZGVzY2VudCA9IGZvbnQuZGVzY2VudDtcblxuICAgIGlmIChpc05hTihkZXNjZW50KSkge1xuICAgICAgZGVzY2VudCA9IDA7XG4gICAgfVxuXG4gICAgY29uc3QgdlBhZGRpbmcgPSBkZWZhdWx0UGFkZGluZyArIE1hdGguYWJzKGRlc2NlbnQpICogZm9udFNpemU7XG4gICAgY29uc3QgYWxpZ25tZW50ID0gdGhpcy5kYXRhLnRleHRBbGlnbm1lbnQ7XG5cbiAgICBpZiAodGhpcy5kYXRhLm11bHRpTGluZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldE11bHRpbGluZUFwcGVhcmFuY2UoZGVmYXVsdEFwcGVhcmFuY2UsIHZhbHVlLCBmb250LCBmb250U2l6ZSwgdG90YWxXaWR0aCwgdG90YWxIZWlnaHQsIGFsaWdubWVudCwgaFBhZGRpbmcsIHZQYWRkaW5nKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmNvZGVkU3RyaW5nID0gZm9udC5lbmNvZGVTdHJpbmcodmFsdWUpLmpvaW4oXCJcIik7XG5cbiAgICBpZiAodGhpcy5kYXRhLmNvbWIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRDb21iQXBwZWFyYW5jZShkZWZhdWx0QXBwZWFyYW5jZSwgZm9udCwgZW5jb2RlZFN0cmluZywgdG90YWxXaWR0aCwgaFBhZGRpbmcsIHZQYWRkaW5nKTtcbiAgICB9XG5cbiAgICBpZiAoYWxpZ25tZW50ID09PSAwIHx8IGFsaWdubWVudCA+IDIpIHtcbiAgICAgIHJldHVybiBcIi9UeCBCTUMgcSBCVCBcIiArIGRlZmF1bHRBcHBlYXJhbmNlICsgYCAxIDAgMCAxICR7aFBhZGRpbmd9ICR7dlBhZGRpbmd9IFRtICgkeygwLCBfdXRpbC5lc2NhcGVTdHJpbmcpKGVuY29kZWRTdHJpbmcpfSkgVGpgICsgXCIgRVQgUSBFTUNcIjtcbiAgICB9XG5cbiAgICBjb25zdCByZW5kZXJlZFRleHQgPSB0aGlzLl9yZW5kZXJUZXh0KGVuY29kZWRTdHJpbmcsIGZvbnQsIGZvbnRTaXplLCB0b3RhbFdpZHRoLCBhbGlnbm1lbnQsIGhQYWRkaW5nLCB2UGFkZGluZyk7XG5cbiAgICByZXR1cm4gXCIvVHggQk1DIHEgQlQgXCIgKyBkZWZhdWx0QXBwZWFyYW5jZSArIGAgMSAwIDAgMSAwIDAgVG0gJHtyZW5kZXJlZFRleHR9YCArIFwiIEVUIFEgRU1DXCI7XG4gIH1cblxuICBhc3luYyBfZ2V0Rm9udERhdGEoZXZhbHVhdG9yLCB0YXNrKSB7XG4gICAgY29uc3Qgb3BlcmF0b3JMaXN0ID0gbmV3IF9vcGVyYXRvcl9saXN0Lk9wZXJhdG9yTGlzdCgpO1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgICAgIGZvbnQ6IG51bGwsXG5cbiAgICAgIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgIH07XG4gICAgY29uc3Qge1xuICAgICAgZm9udE5hbWUsXG4gICAgICBmb250U2l6ZVxuICAgIH0gPSB0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhO1xuICAgIGF3YWl0IGV2YWx1YXRvci5oYW5kbGVTZXRGb250KHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcywgW2ZvbnROYW1lICYmIF9wcmltaXRpdmVzLk5hbWUuZ2V0KGZvbnROYW1lKSwgZm9udFNpemVdLCBudWxsLCBvcGVyYXRvckxpc3QsIHRhc2ssIGluaXRpYWxTdGF0ZSwgbnVsbCk7XG4gICAgcmV0dXJuIGluaXRpYWxTdGF0ZS5mb250O1xuICB9XG5cbiAgX2NvbXB1dGVGb250U2l6ZShoZWlnaHQsIGxpbmVDb3VudCkge1xuICAgIGxldCB7XG4gICAgICBmb250U2l6ZVxuICAgIH0gPSB0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhO1xuXG4gICAgaWYgKCFmb250U2l6ZSkge1xuICAgICAgY29uc3Qgcm91bmRXaXRoT25lRGlnaXQgPSB4ID0+IE1hdGgucm91bmQoeCAqIDEwKSAvIDEwO1xuXG4gICAgICBjb25zdCBGT05UX0ZBQ1RPUiA9IDAuODtcblxuICAgICAgaWYgKGxpbmVDb3VudCA9PT0gLTEpIHtcbiAgICAgICAgZm9udFNpemUgPSByb3VuZFdpdGhPbmVEaWdpdChGT05UX0ZBQ1RPUiAqIGhlaWdodCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb250U2l6ZSA9IDEwO1xuICAgICAgICBsZXQgbGluZUhlaWdodCA9IGZvbnRTaXplIC8gRk9OVF9GQUNUT1I7XG4gICAgICAgIGxldCBudW1iZXJPZkxpbmVzID0gTWF0aC5yb3VuZChoZWlnaHQgLyBsaW5lSGVpZ2h0KTtcbiAgICAgICAgbnVtYmVyT2ZMaW5lcyA9IE1hdGgubWF4KG51bWJlck9mTGluZXMsIGxpbmVDb3VudCk7XG4gICAgICAgIGxpbmVIZWlnaHQgPSBoZWlnaHQgLyBudW1iZXJPZkxpbmVzO1xuICAgICAgICBmb250U2l6ZSA9IHJvdW5kV2l0aE9uZURpZ2l0KEZPTlRfRkFDVE9SICogbGluZUhlaWdodCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZm9udE5hbWUsXG4gICAgICAgIGZvbnRDb2xvclxuICAgICAgfSA9IHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE7XG4gICAgICB0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZSA9ICgwLCBfZGVmYXVsdF9hcHBlYXJhbmNlLmNyZWF0ZURlZmF1bHRBcHBlYXJhbmNlKSh7XG4gICAgICAgIGZvbnRTaXplLFxuICAgICAgICBmb250TmFtZSxcbiAgICAgICAgZm9udENvbG9yXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gW3RoaXMuX2RlZmF1bHRBcHBlYXJhbmNlLCBmb250U2l6ZV07XG4gIH1cblxuICBfcmVuZGVyVGV4dCh0ZXh0LCBmb250LCBmb250U2l6ZSwgdG90YWxXaWR0aCwgYWxpZ25tZW50LCBoUGFkZGluZywgdlBhZGRpbmcpIHtcbiAgICBjb25zdCBnbHlwaHMgPSBmb250LmNoYXJzVG9HbHlwaHModGV4dCk7XG4gICAgY29uc3Qgc2NhbGUgPSBmb250U2l6ZSAvIDEwMDA7XG4gICAgbGV0IHdpZHRoID0gMDtcblxuICAgIGZvciAoY29uc3QgZ2x5cGggb2YgZ2x5cGhzKSB7XG4gICAgICB3aWR0aCArPSBnbHlwaC53aWR0aCAqIHNjYWxlO1xuICAgIH1cblxuICAgIGxldCBzaGlmdDtcblxuICAgIGlmIChhbGlnbm1lbnQgPT09IDEpIHtcbiAgICAgIHNoaWZ0ID0gKHRvdGFsV2lkdGggLSB3aWR0aCkgLyAyO1xuICAgIH0gZWxzZSBpZiAoYWxpZ25tZW50ID09PSAyKSB7XG4gICAgICBzaGlmdCA9IHRvdGFsV2lkdGggLSB3aWR0aCAtIGhQYWRkaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaGlmdCA9IGhQYWRkaW5nO1xuICAgIH1cblxuICAgIHNoaWZ0ID0gc2hpZnQudG9GaXhlZCgyKTtcbiAgICB2UGFkZGluZyA9IHZQYWRkaW5nLnRvRml4ZWQoMik7XG4gICAgcmV0dXJuIGAke3NoaWZ0fSAke3ZQYWRkaW5nfSBUZCAoJHsoMCwgX3V0aWwuZXNjYXBlU3RyaW5nKSh0ZXh0KX0pIFRqYDtcbiAgfVxuXG4gIF9nZXRTYXZlRmllbGRSZXNvdXJjZXMoeHJlZikge1xuICAgIGNvbnN0IHtcbiAgICAgIGxvY2FsUmVzb3VyY2VzLFxuICAgICAgYXBwZWFyYW5jZVJlc291cmNlcyxcbiAgICAgIGFjcm9Gb3JtUmVzb3VyY2VzXG4gICAgfSA9IHRoaXMuX2ZpZWxkUmVzb3VyY2VzO1xuICAgIGNvbnN0IGZvbnROYW1lID0gdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YSAmJiB0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLmZvbnROYW1lO1xuXG4gICAgaWYgKCFmb250TmFtZSkge1xuICAgICAgcmV0dXJuIGxvY2FsUmVzb3VyY2VzIHx8IF9wcmltaXRpdmVzLkRpY3QuZW1wdHk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByZXNvdXJjZXMgb2YgW2xvY2FsUmVzb3VyY2VzLCBhcHBlYXJhbmNlUmVzb3VyY2VzXSkge1xuICAgICAgaWYgKHJlc291cmNlcyBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpIHtcbiAgICAgICAgY29uc3QgbG9jYWxGb250ID0gcmVzb3VyY2VzLmdldChcIkZvbnRcIik7XG5cbiAgICAgICAgaWYgKGxvY2FsRm9udCBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QgJiYgbG9jYWxGb250Lmhhcyhmb250TmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gcmVzb3VyY2VzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFjcm9Gb3JtUmVzb3VyY2VzIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkge1xuICAgICAgY29uc3QgYWNyb0Zvcm1Gb250ID0gYWNyb0Zvcm1SZXNvdXJjZXMuZ2V0KFwiRm9udFwiKTtcblxuICAgICAgaWYgKGFjcm9Gb3JtRm9udCBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QgJiYgYWNyb0Zvcm1Gb250Lmhhcyhmb250TmFtZSkpIHtcbiAgICAgICAgY29uc3Qgc3ViRm9udERpY3QgPSBuZXcgX3ByaW1pdGl2ZXMuRGljdCh4cmVmKTtcbiAgICAgICAgc3ViRm9udERpY3Quc2V0KGZvbnROYW1lLCBhY3JvRm9ybUZvbnQuZ2V0UmF3KGZvbnROYW1lKSk7XG4gICAgICAgIGNvbnN0IHN1YlJlc291cmNlc0RpY3QgPSBuZXcgX3ByaW1pdGl2ZXMuRGljdCh4cmVmKTtcbiAgICAgICAgc3ViUmVzb3VyY2VzRGljdC5zZXQoXCJGb250XCIsIHN1YkZvbnREaWN0KTtcbiAgICAgICAgcmV0dXJuIF9wcmltaXRpdmVzLkRpY3QubWVyZ2Uoe1xuICAgICAgICAgIHhyZWYsXG4gICAgICAgICAgZGljdEFycmF5OiBbc3ViUmVzb3VyY2VzRGljdCwgbG9jYWxSZXNvdXJjZXNdLFxuICAgICAgICAgIG1lcmdlU3ViRGljdHM6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvY2FsUmVzb3VyY2VzIHx8IF9wcmltaXRpdmVzLkRpY3QuZW1wdHk7XG4gIH1cblxuICBnZXRGaWVsZE9iamVjdCgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFRleHRXaWRnZXRBbm5vdGF0aW9uIGV4dGVuZHMgV2lkZ2V0QW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtcykge1xuICAgIHN1cGVyKHBhcmFtcyk7XG4gICAgdGhpcy5faGFzVGV4dCA9IHRydWU7XG4gICAgY29uc3QgZGljdCA9IHBhcmFtcy5kaWN0O1xuXG4gICAgaWYgKCEoMCwgX3V0aWwuaXNTdHJpbmcpKHRoaXMuZGF0YS5maWVsZFZhbHVlKSkge1xuICAgICAgdGhpcy5kYXRhLmZpZWxkVmFsdWUgPSBcIlwiO1xuICAgIH1cblxuICAgIGxldCBhbGlnbm1lbnQgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe1xuICAgICAgZGljdCxcbiAgICAgIGtleTogXCJRXCJcbiAgICB9KTtcblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihhbGlnbm1lbnQpIHx8IGFsaWdubWVudCA8IDAgfHwgYWxpZ25tZW50ID4gMikge1xuICAgICAgYWxpZ25tZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEudGV4dEFsaWdubWVudCA9IGFsaWdubWVudDtcbiAgICBsZXQgbWF4aW11bUxlbmd0aCA9ICgwLCBfY29yZV91dGlscy5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICBkaWN0LFxuICAgICAga2V5OiBcIk1heExlblwiXG4gICAgfSk7XG5cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobWF4aW11bUxlbmd0aCkgfHwgbWF4aW11bUxlbmd0aCA8IDApIHtcbiAgICAgIG1heGltdW1MZW5ndGggPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuZGF0YS5tYXhMZW4gPSBtYXhpbXVtTGVuZ3RoO1xuICAgIHRoaXMuZGF0YS5tdWx0aUxpbmUgPSB0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLk1VTFRJTElORSk7XG4gICAgdGhpcy5kYXRhLmNvbWIgPSB0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLkNPTUIpICYmICF0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLk1VTFRJTElORSkgJiYgIXRoaXMuaGFzRmllbGRGbGFnKF91dGlsLkFubm90YXRpb25GaWVsZEZsYWcuUEFTU1dPUkQpICYmICF0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLkZJTEVTRUxFQ1QpICYmIHRoaXMuZGF0YS5tYXhMZW4gIT09IG51bGw7XG4gIH1cblxuICBfZ2V0Q29tYkFwcGVhcmFuY2UoZGVmYXVsdEFwcGVhcmFuY2UsIGZvbnQsIHRleHQsIHdpZHRoLCBoUGFkZGluZywgdlBhZGRpbmcpIHtcbiAgICBjb25zdCBjb21iV2lkdGggPSAod2lkdGggLyB0aGlzLmRhdGEubWF4TGVuKS50b0ZpeGVkKDIpO1xuICAgIGNvbnN0IGJ1ZiA9IFtdO1xuICAgIGNvbnN0IHBvc2l0aW9ucyA9IGZvbnQuZ2V0Q2hhclBvc2l0aW9ucyh0ZXh0KTtcblxuICAgIGZvciAoY29uc3QgW3N0YXJ0LCBlbmRdIG9mIHBvc2l0aW9ucykge1xuICAgICAgYnVmLnB1c2goYCgkeygwLCBfdXRpbC5lc2NhcGVTdHJpbmcpKHRleHQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpKX0pIFRqYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVuZGVyZWRDb21iID0gYnVmLmpvaW4oYCAke2NvbWJXaWR0aH0gMCBUZCBgKTtcbiAgICByZXR1cm4gXCIvVHggQk1DIHEgQlQgXCIgKyBkZWZhdWx0QXBwZWFyYW5jZSArIGAgMSAwIDAgMSAke2hQYWRkaW5nfSAke3ZQYWRkaW5nfSBUbSAke3JlbmRlcmVkQ29tYn1gICsgXCIgRVQgUSBFTUNcIjtcbiAgfVxuXG4gIF9nZXRNdWx0aWxpbmVBcHBlYXJhbmNlKGRlZmF1bHRBcHBlYXJhbmNlLCB0ZXh0LCBmb250LCBmb250U2l6ZSwgd2lkdGgsIGhlaWdodCwgYWxpZ25tZW50LCBoUGFkZGluZywgdlBhZGRpbmcpIHtcbiAgICBjb25zdCBsaW5lcyA9IHRleHQuc3BsaXQoL1xcclxcbnxcXHJ8XFxuLyk7XG4gICAgY29uc3QgYnVmID0gW107XG4gICAgY29uc3QgdG90YWxXaWR0aCA9IHdpZHRoIC0gMiAqIGhQYWRkaW5nO1xuXG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICBjb25zdCBjaHVua3MgPSB0aGlzLl9zcGxpdExpbmUobGluZSwgZm9udCwgZm9udFNpemUsIHRvdGFsV2lkdGgpO1xuXG4gICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcykge1xuICAgICAgICBjb25zdCBwYWRkaW5nID0gYnVmLmxlbmd0aCA9PT0gMCA/IGhQYWRkaW5nIDogMDtcbiAgICAgICAgYnVmLnB1c2godGhpcy5fcmVuZGVyVGV4dChjaHVuaywgZm9udCwgZm9udFNpemUsIHdpZHRoLCBhbGlnbm1lbnQsIHBhZGRpbmcsIC1mb250U2l6ZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlbmRlcmVkVGV4dCA9IGJ1Zi5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBcIi9UeCBCTUMgcSBCVCBcIiArIGRlZmF1bHRBcHBlYXJhbmNlICsgYCAxIDAgMCAxIDAgJHtoZWlnaHR9IFRtICR7cmVuZGVyZWRUZXh0fWAgKyBcIiBFVCBRIEVNQ1wiO1xuICB9XG5cbiAgX3NwbGl0TGluZShsaW5lLCBmb250LCBmb250U2l6ZSwgd2lkdGgpIHtcbiAgICBsaW5lID0gZm9udC5lbmNvZGVTdHJpbmcobGluZSkuam9pbihcIlwiKTtcbiAgICBjb25zdCBnbHlwaHMgPSBmb250LmNoYXJzVG9HbHlwaHMobGluZSk7XG5cbiAgICBpZiAoZ2x5cGhzLmxlbmd0aCA8PSAxKSB7XG4gICAgICByZXR1cm4gW2xpbmVdO1xuICAgIH1cblxuICAgIGNvbnN0IHBvc2l0aW9ucyA9IGZvbnQuZ2V0Q2hhclBvc2l0aW9ucyhsaW5lKTtcbiAgICBjb25zdCBzY2FsZSA9IGZvbnRTaXplIC8gMTAwMDtcbiAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICBsZXQgbGFzdFNwYWNlUG9zSW5TdHJpbmdTdGFydCA9IC0xLFxuICAgICAgICBsYXN0U3BhY2VQb3NJblN0cmluZ0VuZCA9IC0xLFxuICAgICAgICBsYXN0U3BhY2VQb3MgPSAtMSxcbiAgICAgICAgc3RhcnRDaHVuayA9IDAsXG4gICAgICAgIGN1cnJlbnRXaWR0aCA9IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBnbHlwaHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgY29uc3QgW3N0YXJ0LCBlbmRdID0gcG9zaXRpb25zW2ldO1xuICAgICAgY29uc3QgZ2x5cGggPSBnbHlwaHNbaV07XG4gICAgICBjb25zdCBnbHlwaFdpZHRoID0gZ2x5cGgud2lkdGggKiBzY2FsZTtcblxuICAgICAgaWYgKGdseXBoLnVuaWNvZGUgPT09IFwiIFwiKSB7XG4gICAgICAgIGlmIChjdXJyZW50V2lkdGggKyBnbHlwaFdpZHRoID4gd2lkdGgpIHtcbiAgICAgICAgICBjaHVua3MucHVzaChsaW5lLnN1YnN0cmluZyhzdGFydENodW5rLCBzdGFydCkpO1xuICAgICAgICAgIHN0YXJ0Q2h1bmsgPSBzdGFydDtcbiAgICAgICAgICBjdXJyZW50V2lkdGggPSBnbHlwaFdpZHRoO1xuICAgICAgICAgIGxhc3RTcGFjZVBvc0luU3RyaW5nU3RhcnQgPSAtMTtcbiAgICAgICAgICBsYXN0U3BhY2VQb3MgPSAtMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50V2lkdGggKz0gZ2x5cGhXaWR0aDtcbiAgICAgICAgICBsYXN0U3BhY2VQb3NJblN0cmluZ1N0YXJ0ID0gc3RhcnQ7XG4gICAgICAgICAgbGFzdFNwYWNlUG9zSW5TdHJpbmdFbmQgPSBlbmQ7XG4gICAgICAgICAgbGFzdFNwYWNlUG9zID0gaTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGN1cnJlbnRXaWR0aCArIGdseXBoV2lkdGggPiB3aWR0aCkge1xuICAgICAgICAgIGlmIChsYXN0U3BhY2VQb3NJblN0cmluZ1N0YXJ0ICE9PSAtMSkge1xuICAgICAgICAgICAgY2h1bmtzLnB1c2gobGluZS5zdWJzdHJpbmcoc3RhcnRDaHVuaywgbGFzdFNwYWNlUG9zSW5TdHJpbmdFbmQpKTtcbiAgICAgICAgICAgIHN0YXJ0Q2h1bmsgPSBsYXN0U3BhY2VQb3NJblN0cmluZ0VuZDtcbiAgICAgICAgICAgIGkgPSBsYXN0U3BhY2VQb3MgKyAxO1xuICAgICAgICAgICAgbGFzdFNwYWNlUG9zSW5TdHJpbmdTdGFydCA9IC0xO1xuICAgICAgICAgICAgY3VycmVudFdpZHRoID0gMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2h1bmtzLnB1c2gobGluZS5zdWJzdHJpbmcoc3RhcnRDaHVuaywgc3RhcnQpKTtcbiAgICAgICAgICAgIHN0YXJ0Q2h1bmsgPSBzdGFydDtcbiAgICAgICAgICAgIGN1cnJlbnRXaWR0aCA9IGdseXBoV2lkdGg7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRXaWR0aCArPSBnbHlwaFdpZHRoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0Q2h1bmsgPCBsaW5lLmxlbmd0aCkge1xuICAgICAgY2h1bmtzLnB1c2gobGluZS5zdWJzdHJpbmcoc3RhcnRDaHVuaywgbGluZS5sZW5ndGgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2h1bmtzO1xuICB9XG5cbiAgZ2V0RmllbGRPYmplY3QoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmRhdGEuaWQsXG4gICAgICB2YWx1ZTogdGhpcy5kYXRhLmZpZWxkVmFsdWUsXG4gICAgICBkZWZhdWx0VmFsdWU6IHRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSxcbiAgICAgIG11bHRpbGluZTogdGhpcy5kYXRhLm11bHRpTGluZSxcbiAgICAgIHBhc3N3b3JkOiB0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLlBBU1NXT1JEKSxcbiAgICAgIGNoYXJMaW1pdDogdGhpcy5kYXRhLm1heExlbixcbiAgICAgIGNvbWI6IHRoaXMuZGF0YS5jb21iLFxuICAgICAgZWRpdGFibGU6ICF0aGlzLmRhdGEucmVhZE9ubHksXG4gICAgICBoaWRkZW46IHRoaXMuZGF0YS5oaWRkZW4sXG4gICAgICBuYW1lOiB0aGlzLmRhdGEuZmllbGROYW1lLFxuICAgICAgcmVjdDogdGhpcy5kYXRhLnJlY3QsXG4gICAgICBhY3Rpb25zOiB0aGlzLmRhdGEuYWN0aW9ucyxcbiAgICAgIHBhZ2U6IHRoaXMuZGF0YS5wYWdlSW5kZXgsXG4gICAgICBzdHJva2VDb2xvcjogdGhpcy5kYXRhLmJvcmRlckNvbG9yLFxuICAgICAgZmlsbENvbG9yOiB0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLFxuICAgICAgdHlwZTogXCJ0ZXh0XCJcbiAgICB9O1xuICB9XG5cbn1cblxuY2xhc3MgQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbiBleHRlbmRzIFdpZGdldEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICAgIHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UgPSBudWxsO1xuICAgIHRoaXMudW5jaGVja2VkQXBwZWFyYW5jZSA9IG51bGw7XG4gICAgdGhpcy5kYXRhLmNoZWNrQm94ID0gIXRoaXMuaGFzRmllbGRGbGFnKF91dGlsLkFubm90YXRpb25GaWVsZEZsYWcuUkFESU8pICYmICF0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLlBVU0hCVVRUT04pO1xuICAgIHRoaXMuZGF0YS5yYWRpb0J1dHRvbiA9IHRoaXMuaGFzRmllbGRGbGFnKF91dGlsLkFubm90YXRpb25GaWVsZEZsYWcuUkFESU8pICYmICF0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLlBVU0hCVVRUT04pO1xuICAgIHRoaXMuZGF0YS5wdXNoQnV0dG9uID0gdGhpcy5oYXNGaWVsZEZsYWcoX3V0aWwuQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKTtcbiAgICB0aGlzLmRhdGEuaXNUb29sdGlwT25seSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuZGF0YS5jaGVja0JveCkge1xuICAgICAgdGhpcy5fcHJvY2Vzc0NoZWNrQm94KHBhcmFtcyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRhdGEucmFkaW9CdXR0b24pIHtcbiAgICAgIHRoaXMuX3Byb2Nlc3NSYWRpb0J1dHRvbihwYXJhbXMpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhLnB1c2hCdXR0b24pIHtcbiAgICAgIHRoaXMuZGF0YS5oYXNPd25DYW52YXMgPSB0cnVlO1xuXG4gICAgICB0aGlzLl9wcm9jZXNzUHVzaEJ1dHRvbihwYXJhbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJJbnZhbGlkIGZpZWxkIGZsYWdzIGZvciBidXR0b24gd2lkZ2V0IGFubm90YXRpb25cIik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0T3BlcmF0b3JMaXN0KGV2YWx1YXRvciwgdGFzaywgaW50ZW50LCByZW5kZXJGb3JtcywgYW5ub3RhdGlvblN0b3JhZ2UpIHtcbiAgICBpZiAodGhpcy5kYXRhLnB1c2hCdXR0b24pIHtcbiAgICAgIHJldHVybiBzdXBlci5nZXRPcGVyYXRvckxpc3QoZXZhbHVhdG9yLCB0YXNrLCBpbnRlbnQsIGZhbHNlLCBhbm5vdGF0aW9uU3RvcmFnZSk7XG4gICAgfVxuXG4gICAgbGV0IHZhbHVlID0gbnVsbDtcblxuICAgIGlmIChhbm5vdGF0aW9uU3RvcmFnZSkge1xuICAgICAgY29uc3Qgc3RvcmFnZUVudHJ5ID0gYW5ub3RhdGlvblN0b3JhZ2UuZ2V0KHRoaXMuZGF0YS5pZCk7XG4gICAgICB2YWx1ZSA9IHN0b3JhZ2VFbnRyeSA/IHN0b3JhZ2VFbnRyeS52YWx1ZSA6IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy5hcHBlYXJhbmNlKSB7XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRPcGVyYXRvckxpc3QoZXZhbHVhdG9yLCB0YXNrLCBpbnRlbnQsIHJlbmRlckZvcm1zLCBhbm5vdGF0aW9uU3RvcmFnZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmRhdGEuY2hlY2tCb3gpIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGEuZmllbGRWYWx1ZSA9PT0gdGhpcy5kYXRhLmV4cG9ydFZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGEuZmllbGRWYWx1ZSA9PT0gdGhpcy5kYXRhLmJ1dHRvblZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFwcGVhcmFuY2UgPSB2YWx1ZSA/IHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UgOiB0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2U7XG5cbiAgICBpZiAoYXBwZWFyYW5jZSkge1xuICAgICAgY29uc3Qgc2F2ZWRBcHBlYXJhbmNlID0gdGhpcy5hcHBlYXJhbmNlO1xuICAgICAgdGhpcy5hcHBlYXJhbmNlID0gYXBwZWFyYW5jZTtcbiAgICAgIGNvbnN0IG9wZXJhdG9yTGlzdCA9IHN1cGVyLmdldE9wZXJhdG9yTGlzdChldmFsdWF0b3IsIHRhc2ssIGludGVudCwgcmVuZGVyRm9ybXMsIGFubm90YXRpb25TdG9yYWdlKTtcbiAgICAgIHRoaXMuYXBwZWFyYW5jZSA9IHNhdmVkQXBwZWFyYW5jZTtcbiAgICAgIHJldHVybiBvcGVyYXRvckxpc3Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBfb3BlcmF0b3JfbGlzdC5PcGVyYXRvckxpc3QoKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoZXZhbHVhdG9yLCB0YXNrLCBhbm5vdGF0aW9uU3RvcmFnZSkge1xuICAgIGlmICh0aGlzLmRhdGEuY2hlY2tCb3gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zYXZlQ2hlY2tib3goZXZhbHVhdG9yLCB0YXNrLCBhbm5vdGF0aW9uU3RvcmFnZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YS5yYWRpb0J1dHRvbikge1xuICAgICAgcmV0dXJuIHRoaXMuX3NhdmVSYWRpb0J1dHRvbihldmFsdWF0b3IsIHRhc2ssIGFubm90YXRpb25TdG9yYWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIF9zYXZlQ2hlY2tib3goZXZhbHVhdG9yLCB0YXNrLCBhbm5vdGF0aW9uU3RvcmFnZSkge1xuICAgIGlmICghYW5ub3RhdGlvblN0b3JhZ2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHN0b3JhZ2VFbnRyeSA9IGFubm90YXRpb25TdG9yYWdlLmdldCh0aGlzLmRhdGEuaWQpO1xuICAgIGNvbnN0IHZhbHVlID0gc3RvcmFnZUVudHJ5ICYmIHN0b3JhZ2VFbnRyeS52YWx1ZTtcblxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLmRhdGEuZmllbGRWYWx1ZSA9PT0gdGhpcy5kYXRhLmV4cG9ydFZhbHVlO1xuXG4gICAgaWYgKGRlZmF1bHRWYWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRpY3QgPSBldmFsdWF0b3IueHJlZi5mZXRjaElmUmVmKHRoaXMucmVmKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZGljdCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHhmYSA9IHtcbiAgICAgIHBhdGg6ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoZGljdC5nZXQoXCJUXCIpIHx8IFwiXCIpLFxuICAgICAgdmFsdWU6IHZhbHVlID8gdGhpcy5kYXRhLmV4cG9ydFZhbHVlIDogXCJcIlxuICAgIH07XG5cbiAgICBjb25zdCBuYW1lID0gX3ByaW1pdGl2ZXMuTmFtZS5nZXQodmFsdWUgPyB0aGlzLmRhdGEuZXhwb3J0VmFsdWUgOiBcIk9mZlwiKTtcblxuICAgIGRpY3Quc2V0KFwiVlwiLCBuYW1lKTtcbiAgICBkaWN0LnNldChcIkFTXCIsIG5hbWUpO1xuICAgIGRpY3Quc2V0KFwiTVwiLCBgRDokeygwLCBfdXRpbC5nZXRNb2RpZmljYXRpb25EYXRlKSgpfWApO1xuICAgIGNvbnN0IGVuY3J5cHQgPSBldmFsdWF0b3IueHJlZi5lbmNyeXB0O1xuICAgIGxldCBvcmlnaW5hbFRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICBpZiAoZW5jcnlwdCkge1xuICAgICAgb3JpZ2luYWxUcmFuc2Zvcm0gPSBlbmNyeXB0LmNyZWF0ZUNpcGhlclRyYW5zZm9ybSh0aGlzLnJlZi5udW0sIHRoaXMucmVmLmdlbik7XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gW2Ake3RoaXMucmVmLm51bX0gJHt0aGlzLnJlZi5nZW59IG9ialxcbmBdO1xuICAgICgwLCBfd3JpdGVyLndyaXRlRGljdCkoZGljdCwgYnVmZmVyLCBvcmlnaW5hbFRyYW5zZm9ybSk7XG4gICAgYnVmZmVyLnB1c2goXCJcXG5lbmRvYmpcXG5cIik7XG4gICAgcmV0dXJuIFt7XG4gICAgICByZWY6IHRoaXMucmVmLFxuICAgICAgZGF0YTogYnVmZmVyLmpvaW4oXCJcIiksXG4gICAgICB4ZmFcbiAgICB9XTtcbiAgfVxuXG4gIGFzeW5jIF9zYXZlUmFkaW9CdXR0b24oZXZhbHVhdG9yLCB0YXNrLCBhbm5vdGF0aW9uU3RvcmFnZSkge1xuICAgIGlmICghYW5ub3RhdGlvblN0b3JhZ2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHN0b3JhZ2VFbnRyeSA9IGFubm90YXRpb25TdG9yYWdlLmdldCh0aGlzLmRhdGEuaWQpO1xuICAgIGNvbnN0IHZhbHVlID0gc3RvcmFnZUVudHJ5ICYmIHN0b3JhZ2VFbnRyeS52YWx1ZTtcblxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLmRhdGEuZmllbGRWYWx1ZSA9PT0gdGhpcy5kYXRhLmJ1dHRvblZhbHVlO1xuXG4gICAgaWYgKGRlZmF1bHRWYWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRpY3QgPSBldmFsdWF0b3IueHJlZi5mZXRjaElmUmVmKHRoaXMucmVmKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZGljdCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHhmYSA9IHtcbiAgICAgIHBhdGg6ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoZGljdC5nZXQoXCJUXCIpIHx8IFwiXCIpLFxuICAgICAgdmFsdWU6IHZhbHVlID8gdGhpcy5kYXRhLmJ1dHRvblZhbHVlIDogXCJcIlxuICAgIH07XG5cbiAgICBjb25zdCBuYW1lID0gX3ByaW1pdGl2ZXMuTmFtZS5nZXQodmFsdWUgPyB0aGlzLmRhdGEuYnV0dG9uVmFsdWUgOiBcIk9mZlwiKTtcblxuICAgIGxldCBwYXJlbnRCdWZmZXIgPSBudWxsO1xuICAgIGNvbnN0IGVuY3J5cHQgPSBldmFsdWF0b3IueHJlZi5lbmNyeXB0O1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzUmVmKSh0aGlzLnBhcmVudCkpIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZXZhbHVhdG9yLnhyZWYuZmV0Y2godGhpcy5wYXJlbnQpO1xuICAgICAgICBsZXQgcGFyZW50VHJhbnNmb3JtID0gbnVsbDtcblxuICAgICAgICBpZiAoZW5jcnlwdCkge1xuICAgICAgICAgIHBhcmVudFRyYW5zZm9ybSA9IGVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKHRoaXMucGFyZW50Lm51bSwgdGhpcy5wYXJlbnQuZ2VuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudC5zZXQoXCJWXCIsIG5hbWUpO1xuICAgICAgICBwYXJlbnRCdWZmZXIgPSBbYCR7dGhpcy5wYXJlbnQubnVtfSAke3RoaXMucGFyZW50Lmdlbn0gb2JqXFxuYF07XG4gICAgICAgICgwLCBfd3JpdGVyLndyaXRlRGljdCkocGFyZW50LCBwYXJlbnRCdWZmZXIsIHBhcmVudFRyYW5zZm9ybSk7XG4gICAgICAgIHBhcmVudEJ1ZmZlci5wdXNoKFwiXFxuZW5kb2JqXFxuXCIpO1xuICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KSh0aGlzLnBhcmVudCkpIHtcbiAgICAgICAgdGhpcy5wYXJlbnQuc2V0KFwiVlwiLCBuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkaWN0LnNldChcIkFTXCIsIG5hbWUpO1xuICAgIGRpY3Quc2V0KFwiTVwiLCBgRDokeygwLCBfdXRpbC5nZXRNb2RpZmljYXRpb25EYXRlKSgpfWApO1xuICAgIGxldCBvcmlnaW5hbFRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICBpZiAoZW5jcnlwdCkge1xuICAgICAgb3JpZ2luYWxUcmFuc2Zvcm0gPSBlbmNyeXB0LmNyZWF0ZUNpcGhlclRyYW5zZm9ybSh0aGlzLnJlZi5udW0sIHRoaXMucmVmLmdlbik7XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gW2Ake3RoaXMucmVmLm51bX0gJHt0aGlzLnJlZi5nZW59IG9ialxcbmBdO1xuICAgICgwLCBfd3JpdGVyLndyaXRlRGljdCkoZGljdCwgYnVmZmVyLCBvcmlnaW5hbFRyYW5zZm9ybSk7XG4gICAgYnVmZmVyLnB1c2goXCJcXG5lbmRvYmpcXG5cIik7XG4gICAgY29uc3QgbmV3UmVmcyA9IFt7XG4gICAgICByZWY6IHRoaXMucmVmLFxuICAgICAgZGF0YTogYnVmZmVyLmpvaW4oXCJcIiksXG4gICAgICB4ZmFcbiAgICB9XTtcblxuICAgIGlmIChwYXJlbnRCdWZmZXIgIT09IG51bGwpIHtcbiAgICAgIG5ld1JlZnMucHVzaCh7XG4gICAgICAgIHJlZjogdGhpcy5wYXJlbnQsXG4gICAgICAgIGRhdGE6IHBhcmVudEJ1ZmZlci5qb2luKFwiXCIpLFxuICAgICAgICB4ZmE6IG51bGxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdSZWZzO1xuICB9XG5cbiAgX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZShwYXJhbXMsIHR5cGUpIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuZGF0YS5yZWN0WzJdIC0gdGhpcy5kYXRhLnJlY3RbMF07XG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5kYXRhLnJlY3RbM10gLSB0aGlzLmRhdGEucmVjdFsxXTtcbiAgICBjb25zdCBiYm94ID0gWzAsIDAsIHdpZHRoLCBoZWlnaHRdO1xuICAgIGNvbnN0IEZPTlRfUkFUSU8gPSAwLjg7XG4gICAgY29uc3QgZm9udFNpemUgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIEZPTlRfUkFUSU87XG4gICAgbGV0IG1ldHJpY3MsIGNoYXI7XG5cbiAgICBpZiAodHlwZSA9PT0gXCJjaGVja1wiKSB7XG4gICAgICBtZXRyaWNzID0ge1xuICAgICAgICB3aWR0aDogMC43NTUgKiBmb250U2l6ZSxcbiAgICAgICAgaGVpZ2h0OiAwLjcwNSAqIGZvbnRTaXplXG4gICAgICB9O1xuICAgICAgY2hhciA9IFwiXFx4MzNcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiZGlzY1wiKSB7XG4gICAgICBtZXRyaWNzID0ge1xuICAgICAgICB3aWR0aDogMC43OTEgKiBmb250U2l6ZSxcbiAgICAgICAgaGVpZ2h0OiAwLjcwNSAqIGZvbnRTaXplXG4gICAgICB9O1xuICAgICAgY2hhciA9IFwiXFx4NkNcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShgX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZSAtIHVuc3VwcG9ydGVkIHR5cGU6ICR7dHlwZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCB4U2hpZnQgPSAod2lkdGggLSBtZXRyaWNzLndpZHRoKSAvIDI7XG4gICAgY29uc3QgeVNoaWZ0ID0gKGhlaWdodCAtIG1ldHJpY3MuaGVpZ2h0KSAvIDI7XG4gICAgY29uc3QgYXBwZWFyYW5jZSA9IGBxIEJUIC9QZGZKc1phRGIgJHtmb250U2l6ZX0gVGYgMCBnICR7eFNoaWZ0fSAke3lTaGlmdH0gVGQgKCR7Y2hhcn0pIFRqIEVUIFFgO1xuICAgIGNvbnN0IGFwcGVhcmFuY2VTdHJlYW1EaWN0ID0gbmV3IF9wcmltaXRpdmVzLkRpY3QocGFyYW1zLnhyZWYpO1xuICAgIGFwcGVhcmFuY2VTdHJlYW1EaWN0LnNldChcIkZvcm1UeXBlXCIsIDEpO1xuICAgIGFwcGVhcmFuY2VTdHJlYW1EaWN0LnNldChcIlN1YnR5cGVcIiwgX3ByaW1pdGl2ZXMuTmFtZS5nZXQoXCJGb3JtXCIpKTtcbiAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoXCJUeXBlXCIsIF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiWE9iamVjdFwiKSk7XG4gICAgYXBwZWFyYW5jZVN0cmVhbURpY3Quc2V0KFwiQkJveFwiLCBiYm94KTtcbiAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoXCJNYXRyaXhcIiwgWzEsIDAsIDAsIDEsIDAsIDBdKTtcbiAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoXCJMZW5ndGhcIiwgYXBwZWFyYW5jZS5sZW5ndGgpO1xuICAgIGNvbnN0IHJlc291cmNlcyA9IG5ldyBfcHJpbWl0aXZlcy5EaWN0KHBhcmFtcy54cmVmKTtcbiAgICBjb25zdCBmb250ID0gbmV3IF9wcmltaXRpdmVzLkRpY3QocGFyYW1zLnhyZWYpO1xuICAgIGZvbnQuc2V0KFwiUGRmSnNaYURiXCIsIHRoaXMuZmFsbGJhY2tGb250RGljdCk7XG4gICAgcmVzb3VyY2VzLnNldChcIkZvbnRcIiwgZm9udCk7XG4gICAgYXBwZWFyYW5jZVN0cmVhbURpY3Quc2V0KFwiUmVzb3VyY2VzXCIsIHJlc291cmNlcyk7XG4gICAgdGhpcy5jaGVja2VkQXBwZWFyYW5jZSA9IG5ldyBfc3RyZWFtLlN0cmluZ1N0cmVhbShhcHBlYXJhbmNlKTtcbiAgICB0aGlzLmNoZWNrZWRBcHBlYXJhbmNlLmRpY3QgPSBhcHBlYXJhbmNlU3RyZWFtRGljdDtcblxuICAgIHRoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmNoZWNrZWRBcHBlYXJhbmNlKTtcbiAgfVxuXG4gIF9wcm9jZXNzQ2hlY2tCb3gocGFyYW1zKSB7XG4gICAgY29uc3QgY3VzdG9tQXBwZWFyYW5jZSA9IHBhcmFtcy5kaWN0LmdldChcIkFQXCIpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShjdXN0b21BcHBlYXJhbmNlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbEFwcGVhcmFuY2UgPSBjdXN0b21BcHBlYXJhbmNlLmdldChcIk5cIik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG5vcm1hbEFwcGVhcmFuY2UpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXNWYWx1ZSA9IHRoaXMuX2RlY29kZUZvcm1WYWx1ZShwYXJhbXMuZGljdC5nZXQoXCJBU1wiKSk7XG5cbiAgICBpZiAodHlwZW9mIGFzVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuZGF0YS5maWVsZFZhbHVlID0gYXNWYWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCB5ZXMgPSB0aGlzLmRhdGEuZmllbGRWYWx1ZSAhPT0gbnVsbCAmJiB0aGlzLmRhdGEuZmllbGRWYWx1ZSAhPT0gXCJPZmZcIiA/IHRoaXMuZGF0YS5maWVsZFZhbHVlIDogXCJZZXNcIjtcbiAgICBjb25zdCBleHBvcnRWYWx1ZXMgPSBub3JtYWxBcHBlYXJhbmNlLmdldEtleXMoKTtcblxuICAgIGlmIChleHBvcnRWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBleHBvcnRWYWx1ZXMucHVzaChcIk9mZlwiLCB5ZXMpO1xuICAgIH0gZWxzZSBpZiAoZXhwb3J0VmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaWYgKGV4cG9ydFZhbHVlc1swXSA9PT0gXCJPZmZcIikge1xuICAgICAgICBleHBvcnRWYWx1ZXMucHVzaCh5ZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhwb3J0VmFsdWVzLnVuc2hpZnQoXCJPZmZcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChleHBvcnRWYWx1ZXMuaW5jbHVkZXMoeWVzKSkge1xuICAgICAgZXhwb3J0VmFsdWVzLmxlbmd0aCA9IDA7XG4gICAgICBleHBvcnRWYWx1ZXMucHVzaChcIk9mZlwiLCB5ZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvdGhlclllcyA9IGV4cG9ydFZhbHVlcy5maW5kKHYgPT4gdiAhPT0gXCJPZmZcIik7XG4gICAgICBleHBvcnRWYWx1ZXMubGVuZ3RoID0gMDtcbiAgICAgIGV4cG9ydFZhbHVlcy5wdXNoKFwiT2ZmXCIsIG90aGVyWWVzKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4cG9ydFZhbHVlcy5pbmNsdWRlcyh0aGlzLmRhdGEuZmllbGRWYWx1ZSkpIHtcbiAgICAgIHRoaXMuZGF0YS5maWVsZFZhbHVlID0gXCJPZmZcIjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuZXhwb3J0VmFsdWUgPSBleHBvcnRWYWx1ZXNbMV07XG4gICAgdGhpcy5jaGVja2VkQXBwZWFyYW5jZSA9IG5vcm1hbEFwcGVhcmFuY2UuZ2V0KHRoaXMuZGF0YS5leHBvcnRWYWx1ZSkgfHwgbnVsbDtcbiAgICB0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UgPSBub3JtYWxBcHBlYXJhbmNlLmdldChcIk9mZlwiKSB8fCBudWxsO1xuXG4gICAgaWYgKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpIHtcbiAgICAgIHRoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmNoZWNrZWRBcHBlYXJhbmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZ2V0RGVmYXVsdENoZWNrZWRBcHBlYXJhbmNlKHBhcmFtcywgXCJjaGVja1wiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlKSB7XG4gICAgICB0aGlzLl9zdHJlYW1zLnB1c2godGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9mYWxsYmFja0ZvbnREaWN0ID0gdGhpcy5mYWxsYmFja0ZvbnREaWN0O1xuICB9XG5cbiAgX3Byb2Nlc3NSYWRpb0J1dHRvbihwYXJhbXMpIHtcbiAgICB0aGlzLmRhdGEuZmllbGRWYWx1ZSA9IHRoaXMuZGF0YS5idXR0b25WYWx1ZSA9IG51bGw7XG4gICAgY29uc3QgZmllbGRQYXJlbnQgPSBwYXJhbXMuZGljdC5nZXQoXCJQYXJlbnRcIik7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZmllbGRQYXJlbnQpKSB7XG4gICAgICB0aGlzLnBhcmVudCA9IHBhcmFtcy5kaWN0LmdldFJhdyhcIlBhcmVudFwiKTtcbiAgICAgIGNvbnN0IGZpZWxkUGFyZW50VmFsdWUgPSBmaWVsZFBhcmVudC5nZXQoXCJWXCIpO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZmllbGRQYXJlbnRWYWx1ZSkpIHtcbiAgICAgICAgdGhpcy5kYXRhLmZpZWxkVmFsdWUgPSB0aGlzLl9kZWNvZGVGb3JtVmFsdWUoZmllbGRQYXJlbnRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYXBwZWFyYW5jZVN0YXRlcyA9IHBhcmFtcy5kaWN0LmdldChcIkFQXCIpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShhcHBlYXJhbmNlU3RhdGVzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbEFwcGVhcmFuY2UgPSBhcHBlYXJhbmNlU3RhdGVzLmdldChcIk5cIik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG5vcm1hbEFwcGVhcmFuY2UpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgb2Ygbm9ybWFsQXBwZWFyYW5jZS5nZXRLZXlzKCkpIHtcbiAgICAgIGlmIChrZXkgIT09IFwiT2ZmXCIpIHtcbiAgICAgICAgdGhpcy5kYXRhLmJ1dHRvblZhbHVlID0gdGhpcy5fZGVjb2RlRm9ybVZhbHVlKGtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UgPSBub3JtYWxBcHBlYXJhbmNlLmdldCh0aGlzLmRhdGEuYnV0dG9uVmFsdWUpIHx8IG51bGw7XG4gICAgdGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlID0gbm9ybWFsQXBwZWFyYW5jZS5nZXQoXCJPZmZcIikgfHwgbnVsbDtcblxuICAgIGlmICh0aGlzLmNoZWNrZWRBcHBlYXJhbmNlKSB7XG4gICAgICB0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5jaGVja2VkQXBwZWFyYW5jZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZShwYXJhbXMsIFwiZGlzY1wiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlKSB7XG4gICAgICB0aGlzLl9zdHJlYW1zLnB1c2godGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9mYWxsYmFja0ZvbnREaWN0ID0gdGhpcy5mYWxsYmFja0ZvbnREaWN0O1xuICB9XG5cbiAgX3Byb2Nlc3NQdXNoQnV0dG9uKHBhcmFtcykge1xuICAgIGlmICghcGFyYW1zLmRpY3QuaGFzKFwiQVwiKSAmJiAhcGFyYW1zLmRpY3QuaGFzKFwiQUFcIikgJiYgIXRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIlB1c2ggYnV0dG9ucyB3aXRob3V0IGFjdGlvbiBkaWN0aW9uYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLmlzVG9vbHRpcE9ubHkgPSAhcGFyYW1zLmRpY3QuaGFzKFwiQVwiKSAmJiAhcGFyYW1zLmRpY3QuaGFzKFwiQUFcIik7XG5cbiAgICBfY2F0YWxvZy5DYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe1xuICAgICAgZGVzdERpY3Q6IHBhcmFtcy5kaWN0LFxuICAgICAgcmVzdWx0T2JqOiB0aGlzLmRhdGEsXG4gICAgICBkb2NCYXNlVXJsOiBwYXJhbXMucGRmTWFuYWdlci5kb2NCYXNlVXJsXG4gICAgfSk7XG4gIH1cblxuICBnZXRGaWVsZE9iamVjdCgpIHtcbiAgICBsZXQgdHlwZSA9IFwiYnV0dG9uXCI7XG4gICAgbGV0IGV4cG9ydFZhbHVlcztcblxuICAgIGlmICh0aGlzLmRhdGEuY2hlY2tCb3gpIHtcbiAgICAgIHR5cGUgPSBcImNoZWNrYm94XCI7XG4gICAgICBleHBvcnRWYWx1ZXMgPSB0aGlzLmRhdGEuZXhwb3J0VmFsdWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRhdGEucmFkaW9CdXR0b24pIHtcbiAgICAgIHR5cGUgPSBcInJhZGlvYnV0dG9uXCI7XG4gICAgICBleHBvcnRWYWx1ZXMgPSB0aGlzLmRhdGEuYnV0dG9uVmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmRhdGEuaWQsXG4gICAgICB2YWx1ZTogdGhpcy5kYXRhLmZpZWxkVmFsdWUgfHwgXCJPZmZcIixcbiAgICAgIGRlZmF1bHRWYWx1ZTogdGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlLFxuICAgICAgZXhwb3J0VmFsdWVzLFxuICAgICAgZWRpdGFibGU6ICF0aGlzLmRhdGEucmVhZE9ubHksXG4gICAgICBuYW1lOiB0aGlzLmRhdGEuZmllbGROYW1lLFxuICAgICAgcmVjdDogdGhpcy5kYXRhLnJlY3QsXG4gICAgICBoaWRkZW46IHRoaXMuZGF0YS5oaWRkZW4sXG4gICAgICBhY3Rpb25zOiB0aGlzLmRhdGEuYWN0aW9ucyxcbiAgICAgIHBhZ2U6IHRoaXMuZGF0YS5wYWdlSW5kZXgsXG4gICAgICBzdHJva2VDb2xvcjogdGhpcy5kYXRhLmJvcmRlckNvbG9yLFxuICAgICAgZmlsbENvbG9yOiB0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLFxuICAgICAgdHlwZVxuICAgIH07XG4gIH1cblxuICBnZXQgZmFsbGJhY2tGb250RGljdCgpIHtcbiAgICBjb25zdCBkaWN0ID0gbmV3IF9wcmltaXRpdmVzLkRpY3QoKTtcbiAgICBkaWN0LnNldChcIkJhc2VGb250XCIsIF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiWmFwZkRpbmdiYXRzXCIpKTtcbiAgICBkaWN0LnNldChcIlR5cGVcIiwgX3ByaW1pdGl2ZXMuTmFtZS5nZXQoXCJGYWxsYmFja1R5cGVcIikpO1xuICAgIGRpY3Quc2V0KFwiU3VidHlwZVwiLCBfcHJpbWl0aXZlcy5OYW1lLmdldChcIkZhbGxiYWNrVHlwZVwiKSk7XG4gICAgZGljdC5zZXQoXCJFbmNvZGluZ1wiLCBfcHJpbWl0aXZlcy5OYW1lLmdldChcIlphcGZEaW5nYmF0c0VuY29kaW5nXCIpKTtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJmYWxsYmFja0ZvbnREaWN0XCIsIGRpY3QpO1xuICB9XG5cbn1cblxuY2xhc3MgQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbiBleHRlbmRzIFdpZGdldEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICAgIHRoaXMuZGF0YS5vcHRpb25zID0gW107XG4gICAgY29uc3Qgb3B0aW9ucyA9ICgwLCBfY29yZV91dGlscy5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICBkaWN0OiBwYXJhbXMuZGljdCxcbiAgICAgIGtleTogXCJPcHRcIlxuICAgIH0pO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgIGNvbnN0IHhyZWYgPSBwYXJhbXMueHJlZjtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gb3B0aW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHhyZWYuZmV0Y2hJZlJlZihvcHRpb25zW2ldKTtcbiAgICAgICAgY29uc3QgaXNPcHRpb25BcnJheSA9IEFycmF5LmlzQXJyYXkob3B0aW9uKTtcbiAgICAgICAgdGhpcy5kYXRhLm9wdGlvbnNbaV0gPSB7XG4gICAgICAgICAgZXhwb3J0VmFsdWU6IHRoaXMuX2RlY29kZUZvcm1WYWx1ZShpc09wdGlvbkFycmF5ID8geHJlZi5mZXRjaElmUmVmKG9wdGlvblswXSkgOiBvcHRpb24pLFxuICAgICAgICAgIGRpc3BsYXlWYWx1ZTogdGhpcy5fZGVjb2RlRm9ybVZhbHVlKGlzT3B0aW9uQXJyYXkgPyB4cmVmLmZldGNoSWZSZWYob3B0aW9uWzFdKSA6IG9wdGlvbilcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKDAsIF91dGlsLmlzU3RyaW5nKSh0aGlzLmRhdGEuZmllbGRWYWx1ZSkpIHtcbiAgICAgIHRoaXMuZGF0YS5maWVsZFZhbHVlID0gW3RoaXMuZGF0YS5maWVsZFZhbHVlXTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmRhdGEuZmllbGRWYWx1ZSkge1xuICAgICAgdGhpcy5kYXRhLmZpZWxkVmFsdWUgPSBbXTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuY29tYm8gPSB0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLkNPTUJPKTtcbiAgICB0aGlzLmRhdGEubXVsdGlTZWxlY3QgPSB0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLk1VTFRJU0VMRUNUKTtcbiAgICB0aGlzLl9oYXNUZXh0ID0gdHJ1ZTtcbiAgfVxuXG4gIGdldEZpZWxkT2JqZWN0KCkge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmRhdGEuY29tYm8gPyBcImNvbWJvYm94XCIgOiBcImxpc3Rib3hcIjtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZGF0YS5maWVsZFZhbHVlLmxlbmd0aCA+IDAgPyB0aGlzLmRhdGEuZmllbGRWYWx1ZVswXSA6IG51bGw7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmRhdGEuaWQsXG4gICAgICB2YWx1ZSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogdGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlLFxuICAgICAgZWRpdGFibGU6ICF0aGlzLmRhdGEucmVhZE9ubHksXG4gICAgICBuYW1lOiB0aGlzLmRhdGEuZmllbGROYW1lLFxuICAgICAgcmVjdDogdGhpcy5kYXRhLnJlY3QsXG4gICAgICBudW1JdGVtczogdGhpcy5kYXRhLmZpZWxkVmFsdWUubGVuZ3RoLFxuICAgICAgbXVsdGlwbGVTZWxlY3Rpb246IHRoaXMuZGF0YS5tdWx0aVNlbGVjdCxcbiAgICAgIGhpZGRlbjogdGhpcy5kYXRhLmhpZGRlbixcbiAgICAgIGFjdGlvbnM6IHRoaXMuZGF0YS5hY3Rpb25zLFxuICAgICAgaXRlbXM6IHRoaXMuZGF0YS5vcHRpb25zLFxuICAgICAgcGFnZTogdGhpcy5kYXRhLnBhZ2VJbmRleCxcbiAgICAgIHN0cm9rZUNvbG9yOiB0aGlzLmRhdGEuYm9yZGVyQ29sb3IsXG4gICAgICBmaWxsQ29sb3I6IHRoaXMuZGF0YS5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICB0eXBlXG4gICAgfTtcbiAgfVxuXG59XG5cbmNsYXNzIFNpZ25hdHVyZVdpZGdldEFubm90YXRpb24gZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1zKSB7XG4gICAgc3VwZXIocGFyYW1zKTtcbiAgICB0aGlzLmRhdGEuZmllbGRWYWx1ZSA9IG51bGw7XG4gIH1cblxuICBnZXRGaWVsZE9iamVjdCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRoaXMuZGF0YS5pZCxcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgcGFnZTogdGhpcy5kYXRhLnBhZ2VJbmRleCxcbiAgICAgIHR5cGU6IFwic2lnbmF0dXJlXCJcbiAgICB9O1xuICB9XG5cbn1cblxuY2xhc3MgVGV4dEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IERFRkFVTFRfSUNPTl9TSVpFID0gMjI7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgY29uc3QgZGljdCA9IHBhcmFtZXRlcnMuZGljdDtcbiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5URVhUO1xuXG4gICAgaWYgKHRoaXMuZGF0YS5oYXNBcHBlYXJhbmNlKSB7XG4gICAgICB0aGlzLmRhdGEubmFtZSA9IFwiTm9JY29uXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YS5yZWN0WzFdID0gdGhpcy5kYXRhLnJlY3RbM10gLSBERUZBVUxUX0lDT05fU0laRTtcbiAgICAgIHRoaXMuZGF0YS5yZWN0WzJdID0gdGhpcy5kYXRhLnJlY3RbMF0gKyBERUZBVUxUX0lDT05fU0laRTtcbiAgICAgIHRoaXMuZGF0YS5uYW1lID0gZGljdC5oYXMoXCJOYW1lXCIpID8gZGljdC5nZXQoXCJOYW1lXCIpLm5hbWUgOiBcIk5vdGVcIjtcbiAgICB9XG5cbiAgICBpZiAoZGljdC5oYXMoXCJTdGF0ZVwiKSkge1xuICAgICAgdGhpcy5kYXRhLnN0YXRlID0gZGljdC5nZXQoXCJTdGF0ZVwiKSB8fCBudWxsO1xuICAgICAgdGhpcy5kYXRhLnN0YXRlTW9kZWwgPSBkaWN0LmdldChcIlN0YXRlTW9kZWxcIikgfHwgbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhLnN0YXRlID0gbnVsbDtcbiAgICAgIHRoaXMuZGF0YS5zdGF0ZU1vZGVsID0gbnVsbDtcbiAgICB9XG4gIH1cblxufVxuXG5jbGFzcyBMaW5rQW5ub3RhdGlvbiBleHRlbmRzIEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLkxJTks7XG4gICAgY29uc3QgcXVhZFBvaW50cyA9IGdldFF1YWRQb2ludHMocGFyYW1zLmRpY3QsIHRoaXMucmVjdGFuZ2xlKTtcblxuICAgIGlmIChxdWFkUG9pbnRzKSB7XG4gICAgICB0aGlzLmRhdGEucXVhZFBvaW50cyA9IHF1YWRQb2ludHM7XG4gICAgfVxuXG4gICAgX2NhdGFsb2cuQ2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtcbiAgICAgIGRlc3REaWN0OiBwYXJhbXMuZGljdCxcbiAgICAgIHJlc3VsdE9iajogdGhpcy5kYXRhLFxuICAgICAgZG9jQmFzZVVybDogcGFyYW1zLnBkZk1hbmFnZXIuZG9jQmFzZVVybFxuICAgIH0pO1xuICB9XG5cbn1cblxuY2xhc3MgUG9wdXBBbm5vdGF0aW9uIGV4dGVuZHMgQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5QT1BVUDtcbiAgICBsZXQgcGFyZW50SXRlbSA9IHBhcmFtZXRlcnMuZGljdC5nZXQoXCJQYXJlbnRcIik7XG5cbiAgICBpZiAoIXBhcmVudEl0ZW0pIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIlBvcHVwIGFubm90YXRpb24gaGFzIGEgbWlzc2luZyBvciBpbnZhbGlkIHBhcmVudCBhbm5vdGF0aW9uLlwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnRTdWJ0eXBlID0gcGFyZW50SXRlbS5nZXQoXCJTdWJ0eXBlXCIpO1xuICAgIHRoaXMuZGF0YS5wYXJlbnRUeXBlID0gKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkocGFyZW50U3VidHlwZSkgPyBwYXJlbnRTdWJ0eXBlLm5hbWUgOiBudWxsO1xuICAgIGNvbnN0IHJhd1BhcmVudCA9IHBhcmFtZXRlcnMuZGljdC5nZXRSYXcoXCJQYXJlbnRcIik7XG4gICAgdGhpcy5kYXRhLnBhcmVudElkID0gKDAsIF9wcmltaXRpdmVzLmlzUmVmKShyYXdQYXJlbnQpID8gcmF3UGFyZW50LnRvU3RyaW5nKCkgOiBudWxsO1xuICAgIGNvbnN0IHBhcmVudFJlY3QgPSBwYXJlbnRJdGVtLmdldEFycmF5KFwiUmVjdFwiKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmVudFJlY3QpICYmIHBhcmVudFJlY3QubGVuZ3RoID09PSA0KSB7XG4gICAgICB0aGlzLmRhdGEucGFyZW50UmVjdCA9IF91dGlsLlV0aWwubm9ybWFsaXplUmVjdChwYXJlbnRSZWN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhLnBhcmVudFJlY3QgPSBbMCwgMCwgMCwgMF07XG4gICAgfVxuXG4gICAgY29uc3QgcnQgPSBwYXJlbnRJdGVtLmdldChcIlJUXCIpO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHJ0LCBfdXRpbC5Bbm5vdGF0aW9uUmVwbHlUeXBlLkdST1VQKSkge1xuICAgICAgcGFyZW50SXRlbSA9IHBhcmVudEl0ZW0uZ2V0KFwiSVJUXCIpO1xuICAgIH1cblxuICAgIGlmICghcGFyZW50SXRlbS5oYXMoXCJNXCIpKSB7XG4gICAgICB0aGlzLmRhdGEubW9kaWZpY2F0aW9uRGF0ZSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0TW9kaWZpY2F0aW9uRGF0ZShwYXJlbnRJdGVtLmdldChcIk1cIikpO1xuICAgICAgdGhpcy5kYXRhLm1vZGlmaWNhdGlvbkRhdGUgPSB0aGlzLm1vZGlmaWNhdGlvbkRhdGU7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJlbnRJdGVtLmhhcyhcIkNcIikpIHtcbiAgICAgIHRoaXMuZGF0YS5jb2xvciA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0Q29sb3IocGFyZW50SXRlbS5nZXRBcnJheShcIkNcIikpO1xuICAgICAgdGhpcy5kYXRhLmNvbG9yID0gdGhpcy5jb2xvcjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmlld2FibGUpIHtcbiAgICAgIGNvbnN0IHBhcmVudEZsYWdzID0gcGFyZW50SXRlbS5nZXQoXCJGXCIpO1xuXG4gICAgICBpZiAodGhpcy5faXNWaWV3YWJsZShwYXJlbnRGbGFncykpIHtcbiAgICAgICAgdGhpcy5zZXRGbGFncyhwYXJlbnRGbGFncyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZXRUaXRsZShwYXJlbnRJdGVtLmdldChcIlRcIikpO1xuICAgIHRoaXMuZGF0YS50aXRsZU9iaiA9IHRoaXMuX3RpdGxlO1xuICAgIHRoaXMuc2V0Q29udGVudHMocGFyZW50SXRlbS5nZXQoXCJDb250ZW50c1wiKSk7XG4gICAgdGhpcy5kYXRhLmNvbnRlbnRzT2JqID0gdGhpcy5fY29udGVudHM7XG5cbiAgICBpZiAocGFyZW50SXRlbS5oYXMoXCJSQ1wiKSkge1xuICAgICAgdGhpcy5kYXRhLnJpY2hUZXh0ID0gX2ZhY3RvcnkuWEZBRmFjdG9yeS5nZXRSaWNoVGV4dEFzSHRtbChwYXJlbnRJdGVtLmdldChcIlJDXCIpKTtcbiAgICB9XG4gIH1cblxufVxuXG5jbGFzcyBGcmVlVGV4dEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xuICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLkZSRUVURVhUO1xuICB9XG5cbn1cblxuY2xhc3MgTGluZUFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xuICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLkxJTkU7XG4gICAgY29uc3QgbGluZUNvb3JkaW5hdGVzID0gcGFyYW1ldGVycy5kaWN0LmdldEFycmF5KFwiTFwiKTtcbiAgICB0aGlzLmRhdGEubGluZUNvb3JkaW5hdGVzID0gX3V0aWwuVXRpbC5ub3JtYWxpemVSZWN0KGxpbmVDb29yZGluYXRlcyk7XG5cbiAgICBpZiAoIXRoaXMuYXBwZWFyYW5jZSkge1xuICAgICAgY29uc3Qgc3Ryb2tlQ29sb3IgPSB0aGlzLmNvbG9yID8gQXJyYXkuZnJvbSh0aGlzLmNvbG9yKS5tYXAoYyA9PiBjIC8gMjU1KSA6IFswLCAwLCAwXTtcbiAgICAgIGNvbnN0IHN0cm9rZUFscGhhID0gcGFyYW1ldGVycy5kaWN0LmdldChcIkNBXCIpO1xuICAgICAgbGV0IGZpbGxDb2xvciA9IG51bGwsXG4gICAgICAgICAgaW50ZXJpb3JDb2xvciA9IHBhcmFtZXRlcnMuZGljdC5nZXRBcnJheShcIklDXCIpO1xuXG4gICAgICBpZiAoaW50ZXJpb3JDb2xvcikge1xuICAgICAgICBpbnRlcmlvckNvbG9yID0gZ2V0UmdiQ29sb3IoaW50ZXJpb3JDb2xvciwgbnVsbCk7XG4gICAgICAgIGZpbGxDb2xvciA9IGludGVyaW9yQ29sb3IgPyBBcnJheS5mcm9tKGludGVyaW9yQ29sb3IpLm1hcChjID0+IGMgLyAyNTUpIDogbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsbEFscGhhID0gZmlsbENvbG9yID8gc3Ryb2tlQWxwaGEgOiBudWxsO1xuICAgICAgY29uc3QgYm9yZGVyV2lkdGggPSB0aGlzLmJvcmRlclN0eWxlLndpZHRoIHx8IDEsXG4gICAgICAgICAgICBib3JkZXJBZGp1c3QgPSAyICogYm9yZGVyV2lkdGg7XG4gICAgICBjb25zdCBiYm94ID0gW3RoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXNbMF0gLSBib3JkZXJBZGp1c3QsIHRoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXNbMV0gLSBib3JkZXJBZGp1c3QsIHRoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXNbMl0gKyBib3JkZXJBZGp1c3QsIHRoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXNbM10gKyBib3JkZXJBZGp1c3RdO1xuXG4gICAgICBpZiAoIV91dGlsLlV0aWwuaW50ZXJzZWN0KHRoaXMucmVjdGFuZ2xlLCBiYm94KSkge1xuICAgICAgICB0aGlzLnJlY3RhbmdsZSA9IGJib3g7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHtcbiAgICAgICAgeHJlZjogcGFyYW1ldGVycy54cmVmLFxuICAgICAgICBleHRyYTogYCR7Ym9yZGVyV2lkdGh9IHdgLFxuICAgICAgICBzdHJva2VDb2xvcixcbiAgICAgICAgZmlsbENvbG9yLFxuICAgICAgICBzdHJva2VBbHBoYSxcbiAgICAgICAgZmlsbEFscGhhLFxuICAgICAgICBwb2ludHNDYWxsYmFjazogKGJ1ZmZlciwgcG9pbnRzKSA9PiB7XG4gICAgICAgICAgYnVmZmVyLnB1c2goYCR7bGluZUNvb3JkaW5hdGVzWzBdfSAke2xpbmVDb29yZGluYXRlc1sxXX0gbWAsIGAke2xpbmVDb29yZGluYXRlc1syXX0gJHtsaW5lQ29vcmRpbmF0ZXNbM119IGxgLCBcIlNcIik7XG4gICAgICAgICAgcmV0dXJuIFtwb2ludHNbMF0ueCAtIGJvcmRlcldpZHRoLCBwb2ludHNbMV0ueCArIGJvcmRlcldpZHRoLCBwb2ludHNbM10ueSAtIGJvcmRlcldpZHRoLCBwb2ludHNbMV0ueSArIGJvcmRlcldpZHRoXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgU3F1YXJlQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuU1FVQVJFO1xuXG4gICAgaWYgKCF0aGlzLmFwcGVhcmFuY2UpIHtcbiAgICAgIGNvbnN0IHN0cm9rZUNvbG9yID0gdGhpcy5jb2xvciA/IEFycmF5LmZyb20odGhpcy5jb2xvcikubWFwKGMgPT4gYyAvIDI1NSkgOiBbMCwgMCwgMF07XG4gICAgICBjb25zdCBzdHJva2VBbHBoYSA9IHBhcmFtZXRlcnMuZGljdC5nZXQoXCJDQVwiKTtcbiAgICAgIGxldCBmaWxsQ29sb3IgPSBudWxsLFxuICAgICAgICAgIGludGVyaW9yQ29sb3IgPSBwYXJhbWV0ZXJzLmRpY3QuZ2V0QXJyYXkoXCJJQ1wiKTtcblxuICAgICAgaWYgKGludGVyaW9yQ29sb3IpIHtcbiAgICAgICAgaW50ZXJpb3JDb2xvciA9IGdldFJnYkNvbG9yKGludGVyaW9yQ29sb3IsIG51bGwpO1xuICAgICAgICBmaWxsQ29sb3IgPSBpbnRlcmlvckNvbG9yID8gQXJyYXkuZnJvbShpbnRlcmlvckNvbG9yKS5tYXAoYyA9PiBjIC8gMjU1KSA6IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGxBbHBoYSA9IGZpbGxDb2xvciA/IHN0cm9rZUFscGhhIDogbnVsbDtcblxuICAgICAgaWYgKHRoaXMuYm9yZGVyU3R5bGUud2lkdGggPT09IDAgJiYgIWZpbGxDb2xvcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHtcbiAgICAgICAgeHJlZjogcGFyYW1ldGVycy54cmVmLFxuICAgICAgICBleHRyYTogYCR7dGhpcy5ib3JkZXJTdHlsZS53aWR0aH0gd2AsXG4gICAgICAgIHN0cm9rZUNvbG9yLFxuICAgICAgICBmaWxsQ29sb3IsXG4gICAgICAgIHN0cm9rZUFscGhhLFxuICAgICAgICBmaWxsQWxwaGEsXG4gICAgICAgIHBvaW50c0NhbGxiYWNrOiAoYnVmZmVyLCBwb2ludHMpID0+IHtcbiAgICAgICAgICBjb25zdCB4ID0gcG9pbnRzWzJdLnggKyB0aGlzLmJvcmRlclN0eWxlLndpZHRoIC8gMjtcbiAgICAgICAgICBjb25zdCB5ID0gcG9pbnRzWzJdLnkgKyB0aGlzLmJvcmRlclN0eWxlLndpZHRoIC8gMjtcbiAgICAgICAgICBjb25zdCB3aWR0aCA9IHBvaW50c1szXS54IC0gcG9pbnRzWzJdLnggLSB0aGlzLmJvcmRlclN0eWxlLndpZHRoO1xuICAgICAgICAgIGNvbnN0IGhlaWdodCA9IHBvaW50c1sxXS55IC0gcG9pbnRzWzNdLnkgLSB0aGlzLmJvcmRlclN0eWxlLndpZHRoO1xuICAgICAgICAgIGJ1ZmZlci5wdXNoKGAke3h9ICR7eX0gJHt3aWR0aH0gJHtoZWlnaHR9IHJlYCk7XG5cbiAgICAgICAgICBpZiAoZmlsbENvbG9yKSB7XG4gICAgICAgICAgICBidWZmZXIucHVzaChcIkJcIik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKFwiU1wiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gW3BvaW50c1swXS54LCBwb2ludHNbMV0ueCwgcG9pbnRzWzNdLnksIHBvaW50c1sxXS55XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgQ2lyY2xlQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuQ0lSQ0xFO1xuXG4gICAgaWYgKCF0aGlzLmFwcGVhcmFuY2UpIHtcbiAgICAgIGNvbnN0IHN0cm9rZUNvbG9yID0gdGhpcy5jb2xvciA/IEFycmF5LmZyb20odGhpcy5jb2xvcikubWFwKGMgPT4gYyAvIDI1NSkgOiBbMCwgMCwgMF07XG4gICAgICBjb25zdCBzdHJva2VBbHBoYSA9IHBhcmFtZXRlcnMuZGljdC5nZXQoXCJDQVwiKTtcbiAgICAgIGxldCBmaWxsQ29sb3IgPSBudWxsO1xuICAgICAgbGV0IGludGVyaW9yQ29sb3IgPSBwYXJhbWV0ZXJzLmRpY3QuZ2V0QXJyYXkoXCJJQ1wiKTtcblxuICAgICAgaWYgKGludGVyaW9yQ29sb3IpIHtcbiAgICAgICAgaW50ZXJpb3JDb2xvciA9IGdldFJnYkNvbG9yKGludGVyaW9yQ29sb3IsIG51bGwpO1xuICAgICAgICBmaWxsQ29sb3IgPSBpbnRlcmlvckNvbG9yID8gQXJyYXkuZnJvbShpbnRlcmlvckNvbG9yKS5tYXAoYyA9PiBjIC8gMjU1KSA6IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGxBbHBoYSA9IGZpbGxDb2xvciA/IHN0cm9rZUFscGhhIDogbnVsbDtcblxuICAgICAgaWYgKHRoaXMuYm9yZGVyU3R5bGUud2lkdGggPT09IDAgJiYgIWZpbGxDb2xvcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRyb2xQb2ludHNEaXN0YW5jZSA9IDQgLyAzICogTWF0aC50YW4oTWF0aC5QSSAvICgyICogNCkpO1xuXG4gICAgICB0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7XG4gICAgICAgIHhyZWY6IHBhcmFtZXRlcnMueHJlZixcbiAgICAgICAgZXh0cmE6IGAke3RoaXMuYm9yZGVyU3R5bGUud2lkdGh9IHdgLFxuICAgICAgICBzdHJva2VDb2xvcixcbiAgICAgICAgZmlsbENvbG9yLFxuICAgICAgICBzdHJva2VBbHBoYSxcbiAgICAgICAgZmlsbEFscGhhLFxuICAgICAgICBwb2ludHNDYWxsYmFjazogKGJ1ZmZlciwgcG9pbnRzKSA9PiB7XG4gICAgICAgICAgY29uc3QgeDAgPSBwb2ludHNbMF0ueCArIHRoaXMuYm9yZGVyU3R5bGUud2lkdGggLyAyO1xuICAgICAgICAgIGNvbnN0IHkwID0gcG9pbnRzWzBdLnkgLSB0aGlzLmJvcmRlclN0eWxlLndpZHRoIC8gMjtcbiAgICAgICAgICBjb25zdCB4MSA9IHBvaW50c1szXS54IC0gdGhpcy5ib3JkZXJTdHlsZS53aWR0aCAvIDI7XG4gICAgICAgICAgY29uc3QgeTEgPSBwb2ludHNbM10ueSArIHRoaXMuYm9yZGVyU3R5bGUud2lkdGggLyAyO1xuICAgICAgICAgIGNvbnN0IHhNaWQgPSB4MCArICh4MSAtIHgwKSAvIDI7XG4gICAgICAgICAgY29uc3QgeU1pZCA9IHkwICsgKHkxIC0geTApIC8gMjtcbiAgICAgICAgICBjb25zdCB4T2Zmc2V0ID0gKHgxIC0geDApIC8gMiAqIGNvbnRyb2xQb2ludHNEaXN0YW5jZTtcbiAgICAgICAgICBjb25zdCB5T2Zmc2V0ID0gKHkxIC0geTApIC8gMiAqIGNvbnRyb2xQb2ludHNEaXN0YW5jZTtcbiAgICAgICAgICBidWZmZXIucHVzaChgJHt4TWlkfSAke3kxfSBtYCwgYCR7eE1pZCArIHhPZmZzZXR9ICR7eTF9ICR7eDF9ICR7eU1pZCArIHlPZmZzZXR9ICR7eDF9ICR7eU1pZH0gY2AsIGAke3gxfSAke3lNaWQgLSB5T2Zmc2V0fSAke3hNaWQgKyB4T2Zmc2V0fSAke3kwfSAke3hNaWR9ICR7eTB9IGNgLCBgJHt4TWlkIC0geE9mZnNldH0gJHt5MH0gJHt4MH0gJHt5TWlkIC0geU9mZnNldH0gJHt4MH0gJHt5TWlkfSBjYCwgYCR7eDB9ICR7eU1pZCArIHlPZmZzZXR9ICR7eE1pZCAtIHhPZmZzZXR9ICR7eTF9ICR7eE1pZH0gJHt5MX0gY2AsIFwiaFwiKTtcblxuICAgICAgICAgIGlmIChmaWxsQ29sb3IpIHtcbiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKFwiQlwiKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZmVyLnB1c2goXCJTXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBbcG9pbnRzWzBdLngsIHBvaW50c1sxXS54LCBwb2ludHNbM10ueSwgcG9pbnRzWzFdLnldO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxufVxuXG5jbGFzcyBQb2x5bGluZUFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xuICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLlBPTFlMSU5FO1xuICAgIHRoaXMuZGF0YS52ZXJ0aWNlcyA9IFtdO1xuICAgIGNvbnN0IHJhd1ZlcnRpY2VzID0gcGFyYW1ldGVycy5kaWN0LmdldEFycmF5KFwiVmVydGljZXNcIik7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocmF3VmVydGljZXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gcmF3VmVydGljZXMubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMikge1xuICAgICAgdGhpcy5kYXRhLnZlcnRpY2VzLnB1c2goe1xuICAgICAgICB4OiByYXdWZXJ0aWNlc1tpXSxcbiAgICAgICAgeTogcmF3VmVydGljZXNbaSArIDFdXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYXBwZWFyYW5jZSkge1xuICAgICAgY29uc3Qgc3Ryb2tlQ29sb3IgPSB0aGlzLmNvbG9yID8gQXJyYXkuZnJvbSh0aGlzLmNvbG9yKS5tYXAoYyA9PiBjIC8gMjU1KSA6IFswLCAwLCAwXTtcbiAgICAgIGNvbnN0IHN0cm9rZUFscGhhID0gcGFyYW1ldGVycy5kaWN0LmdldChcIkNBXCIpO1xuICAgICAgY29uc3QgYm9yZGVyV2lkdGggPSB0aGlzLmJvcmRlclN0eWxlLndpZHRoIHx8IDEsXG4gICAgICAgICAgICBib3JkZXJBZGp1c3QgPSAyICogYm9yZGVyV2lkdGg7XG4gICAgICBjb25zdCBiYm94ID0gW0luZmluaXR5LCBJbmZpbml0eSwgLUluZmluaXR5LCAtSW5maW5pdHldO1xuXG4gICAgICBmb3IgKGNvbnN0IHZlcnRleCBvZiB0aGlzLmRhdGEudmVydGljZXMpIHtcbiAgICAgICAgYmJveFswXSA9IE1hdGgubWluKGJib3hbMF0sIHZlcnRleC54IC0gYm9yZGVyQWRqdXN0KTtcbiAgICAgICAgYmJveFsxXSA9IE1hdGgubWluKGJib3hbMV0sIHZlcnRleC55IC0gYm9yZGVyQWRqdXN0KTtcbiAgICAgICAgYmJveFsyXSA9IE1hdGgubWF4KGJib3hbMl0sIHZlcnRleC54ICsgYm9yZGVyQWRqdXN0KTtcbiAgICAgICAgYmJveFszXSA9IE1hdGgubWF4KGJib3hbM10sIHZlcnRleC55ICsgYm9yZGVyQWRqdXN0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfdXRpbC5VdGlsLmludGVyc2VjdCh0aGlzLnJlY3RhbmdsZSwgYmJveCkpIHtcbiAgICAgICAgdGhpcy5yZWN0YW5nbGUgPSBiYm94O1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7XG4gICAgICAgIHhyZWY6IHBhcmFtZXRlcnMueHJlZixcbiAgICAgICAgZXh0cmE6IGAke2JvcmRlcldpZHRofSB3YCxcbiAgICAgICAgc3Ryb2tlQ29sb3IsXG4gICAgICAgIHN0cm9rZUFscGhhLFxuICAgICAgICBwb2ludHNDYWxsYmFjazogKGJ1ZmZlciwgcG9pbnRzKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmVydGljZXMgPSB0aGlzLmRhdGEudmVydGljZXM7XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSB2ZXJ0aWNlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICBidWZmZXIucHVzaChgJHt2ZXJ0aWNlc1tpXS54fSAke3ZlcnRpY2VzW2ldLnl9ICR7aSA9PT0gMCA/IFwibVwiIDogXCJsXCJ9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnVmZmVyLnB1c2goXCJTXCIpO1xuICAgICAgICAgIHJldHVybiBbcG9pbnRzWzBdLngsIHBvaW50c1sxXS54LCBwb2ludHNbM10ueSwgcG9pbnRzWzFdLnldO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxufVxuXG5jbGFzcyBQb2x5Z29uQW5ub3RhdGlvbiBleHRlbmRzIFBvbHlsaW5lQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5QT0xZR09OO1xuICB9XG5cbn1cblxuY2xhc3MgQ2FyZXRBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5DQVJFVDtcbiAgfVxuXG59XG5cbmNsYXNzIElua0Fubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xuICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLklOSztcbiAgICB0aGlzLmRhdGEuaW5rTGlzdHMgPSBbXTtcbiAgICBjb25zdCByYXdJbmtMaXN0cyA9IHBhcmFtZXRlcnMuZGljdC5nZXRBcnJheShcIklua0xpc3RcIik7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocmF3SW5rTGlzdHMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeHJlZiA9IHBhcmFtZXRlcnMueHJlZjtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHJhd0lua0xpc3RzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIHRoaXMuZGF0YS5pbmtMaXN0cy5wdXNoKFtdKTtcblxuICAgICAgZm9yIChsZXQgaiA9IDAsIGpqID0gcmF3SW5rTGlzdHNbaV0ubGVuZ3RoOyBqIDwgamo7IGogKz0gMikge1xuICAgICAgICB0aGlzLmRhdGEuaW5rTGlzdHNbaV0ucHVzaCh7XG4gICAgICAgICAgeDogeHJlZi5mZXRjaElmUmVmKHJhd0lua0xpc3RzW2ldW2pdKSxcbiAgICAgICAgICB5OiB4cmVmLmZldGNoSWZSZWYocmF3SW5rTGlzdHNbaV1baiArIDFdKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYXBwZWFyYW5jZSkge1xuICAgICAgY29uc3Qgc3Ryb2tlQ29sb3IgPSB0aGlzLmNvbG9yID8gQXJyYXkuZnJvbSh0aGlzLmNvbG9yKS5tYXAoYyA9PiBjIC8gMjU1KSA6IFswLCAwLCAwXTtcbiAgICAgIGNvbnN0IHN0cm9rZUFscGhhID0gcGFyYW1ldGVycy5kaWN0LmdldChcIkNBXCIpO1xuICAgICAgY29uc3QgYm9yZGVyV2lkdGggPSB0aGlzLmJvcmRlclN0eWxlLndpZHRoIHx8IDEsXG4gICAgICAgICAgICBib3JkZXJBZGp1c3QgPSAyICogYm9yZGVyV2lkdGg7XG4gICAgICBjb25zdCBiYm94ID0gW0luZmluaXR5LCBJbmZpbml0eSwgLUluZmluaXR5LCAtSW5maW5pdHldO1xuXG4gICAgICBmb3IgKGNvbnN0IGlua0xpc3RzIG9mIHRoaXMuZGF0YS5pbmtMaXN0cykge1xuICAgICAgICBmb3IgKGNvbnN0IHZlcnRleCBvZiBpbmtMaXN0cykge1xuICAgICAgICAgIGJib3hbMF0gPSBNYXRoLm1pbihiYm94WzBdLCB2ZXJ0ZXgueCAtIGJvcmRlckFkanVzdCk7XG4gICAgICAgICAgYmJveFsxXSA9IE1hdGgubWluKGJib3hbMV0sIHZlcnRleC55IC0gYm9yZGVyQWRqdXN0KTtcbiAgICAgICAgICBiYm94WzJdID0gTWF0aC5tYXgoYmJveFsyXSwgdmVydGV4LnggKyBib3JkZXJBZGp1c3QpO1xuICAgICAgICAgIGJib3hbM10gPSBNYXRoLm1heChiYm94WzNdLCB2ZXJ0ZXgueSArIGJvcmRlckFkanVzdCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFfdXRpbC5VdGlsLmludGVyc2VjdCh0aGlzLnJlY3RhbmdsZSwgYmJveCkpIHtcbiAgICAgICAgdGhpcy5yZWN0YW5nbGUgPSBiYm94O1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7XG4gICAgICAgIHhyZWY6IHBhcmFtZXRlcnMueHJlZixcbiAgICAgICAgZXh0cmE6IGAke2JvcmRlcldpZHRofSB3YCxcbiAgICAgICAgc3Ryb2tlQ29sb3IsXG4gICAgICAgIHN0cm9rZUFscGhhLFxuICAgICAgICBwb2ludHNDYWxsYmFjazogKGJ1ZmZlciwgcG9pbnRzKSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCBpbmtMaXN0IG9mIHRoaXMuZGF0YS5pbmtMaXN0cykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gaW5rTGlzdC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgIGJ1ZmZlci5wdXNoKGAke2lua0xpc3RbaV0ueH0gJHtpbmtMaXN0W2ldLnl9ICR7aSA9PT0gMCA/IFwibVwiIDogXCJsXCJ9YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKFwiU1wiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gW3BvaW50c1swXS54LCBwb2ludHNbMV0ueCwgcG9pbnRzWzNdLnksIHBvaW50c1sxXS55XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgSGlnaGxpZ2h0QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuSElHSExJR0hUO1xuICAgIGNvbnN0IHF1YWRQb2ludHMgPSB0aGlzLmRhdGEucXVhZFBvaW50cyA9IGdldFF1YWRQb2ludHMocGFyYW1ldGVycy5kaWN0LCBudWxsKTtcblxuICAgIGlmIChxdWFkUG9pbnRzKSB7XG4gICAgICBjb25zdCByZXNvdXJjZXMgPSB0aGlzLmFwcGVhcmFuY2UgJiYgdGhpcy5hcHBlYXJhbmNlLmRpY3QuZ2V0KFwiUmVzb3VyY2VzXCIpO1xuXG4gICAgICBpZiAoIXRoaXMuYXBwZWFyYW5jZSB8fCAhKHJlc291cmNlcyAmJiByZXNvdXJjZXMuaGFzKFwiRXh0R1N0YXRlXCIpKSkge1xuICAgICAgICBpZiAodGhpcy5hcHBlYXJhbmNlKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiSGlnaGxpZ2h0QW5ub3RhdGlvbiAtIGlnbm9yaW5nIGJ1aWx0LWluIGFwcGVhcmFuY2Ugc3RyZWFtLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGxDb2xvciA9IHRoaXMuY29sb3IgPyBBcnJheS5mcm9tKHRoaXMuY29sb3IpLm1hcChjID0+IGMgLyAyNTUpIDogWzEsIDEsIDBdO1xuICAgICAgICBjb25zdCBmaWxsQWxwaGEgPSBwYXJhbWV0ZXJzLmRpY3QuZ2V0KFwiQ0FcIik7XG5cbiAgICAgICAgdGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe1xuICAgICAgICAgIHhyZWY6IHBhcmFtZXRlcnMueHJlZixcbiAgICAgICAgICBmaWxsQ29sb3IsXG4gICAgICAgICAgYmxlbmRNb2RlOiBcIk11bHRpcGx5XCIsXG4gICAgICAgICAgZmlsbEFscGhhLFxuICAgICAgICAgIHBvaW50c0NhbGxiYWNrOiAoYnVmZmVyLCBwb2ludHMpID0+IHtcbiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKGAke3BvaW50c1swXS54fSAke3BvaW50c1swXS55fSBtYCwgYCR7cG9pbnRzWzFdLnh9ICR7cG9pbnRzWzFdLnl9IGxgLCBgJHtwb2ludHNbM10ueH0gJHtwb2ludHNbM10ueX0gbGAsIGAke3BvaW50c1syXS54fSAke3BvaW50c1syXS55fSBsYCwgXCJmXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFtwb2ludHNbMF0ueCwgcG9pbnRzWzFdLngsIHBvaW50c1szXS55LCBwb2ludHNbMV0ueV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhLmhhc1BvcHVwID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgVW5kZXJsaW5lQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuVU5ERVJMSU5FO1xuICAgIGNvbnN0IHF1YWRQb2ludHMgPSB0aGlzLmRhdGEucXVhZFBvaW50cyA9IGdldFF1YWRQb2ludHMocGFyYW1ldGVycy5kaWN0LCBudWxsKTtcblxuICAgIGlmIChxdWFkUG9pbnRzKSB7XG4gICAgICBpZiAoIXRoaXMuYXBwZWFyYW5jZSkge1xuICAgICAgICBjb25zdCBzdHJva2VDb2xvciA9IHRoaXMuY29sb3IgPyBBcnJheS5mcm9tKHRoaXMuY29sb3IpLm1hcChjID0+IGMgLyAyNTUpIDogWzAsIDAsIDBdO1xuICAgICAgICBjb25zdCBzdHJva2VBbHBoYSA9IHBhcmFtZXRlcnMuZGljdC5nZXQoXCJDQVwiKTtcblxuICAgICAgICB0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7XG4gICAgICAgICAgeHJlZjogcGFyYW1ldGVycy54cmVmLFxuICAgICAgICAgIGV4dHJhOiBcIltdIDAgZCAxIHdcIixcbiAgICAgICAgICBzdHJva2VDb2xvcixcbiAgICAgICAgICBzdHJva2VBbHBoYSxcbiAgICAgICAgICBwb2ludHNDYWxsYmFjazogKGJ1ZmZlciwgcG9pbnRzKSA9PiB7XG4gICAgICAgICAgICBidWZmZXIucHVzaChgJHtwb2ludHNbMl0ueH0gJHtwb2ludHNbMl0ueX0gbWAsIGAke3BvaW50c1szXS54fSAke3BvaW50c1szXS55fSBsYCwgXCJTXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFtwb2ludHNbMF0ueCwgcG9pbnRzWzFdLngsIHBvaW50c1szXS55LCBwb2ludHNbMV0ueV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhLmhhc1BvcHVwID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgU3F1aWdnbHlBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5TUVVJR0dMWTtcbiAgICBjb25zdCBxdWFkUG9pbnRzID0gdGhpcy5kYXRhLnF1YWRQb2ludHMgPSBnZXRRdWFkUG9pbnRzKHBhcmFtZXRlcnMuZGljdCwgbnVsbCk7XG5cbiAgICBpZiAocXVhZFBvaW50cykge1xuICAgICAgaWYgKCF0aGlzLmFwcGVhcmFuY2UpIHtcbiAgICAgICAgY29uc3Qgc3Ryb2tlQ29sb3IgPSB0aGlzLmNvbG9yID8gQXJyYXkuZnJvbSh0aGlzLmNvbG9yKS5tYXAoYyA9PiBjIC8gMjU1KSA6IFswLCAwLCAwXTtcbiAgICAgICAgY29uc3Qgc3Ryb2tlQWxwaGEgPSBwYXJhbWV0ZXJzLmRpY3QuZ2V0KFwiQ0FcIik7XG5cbiAgICAgICAgdGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe1xuICAgICAgICAgIHhyZWY6IHBhcmFtZXRlcnMueHJlZixcbiAgICAgICAgICBleHRyYTogXCJbXSAwIGQgMSB3XCIsXG4gICAgICAgICAgc3Ryb2tlQ29sb3IsXG4gICAgICAgICAgc3Ryb2tlQWxwaGEsXG4gICAgICAgICAgcG9pbnRzQ2FsbGJhY2s6IChidWZmZXIsIHBvaW50cykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZHkgPSAocG9pbnRzWzBdLnkgLSBwb2ludHNbMl0ueSkgLyA2O1xuICAgICAgICAgICAgbGV0IHNoaWZ0ID0gZHk7XG4gICAgICAgICAgICBsZXQgeCA9IHBvaW50c1syXS54O1xuICAgICAgICAgICAgY29uc3QgeSA9IHBvaW50c1syXS55O1xuICAgICAgICAgICAgY29uc3QgeEVuZCA9IHBvaW50c1szXS54O1xuICAgICAgICAgICAgYnVmZmVyLnB1c2goYCR7eH0gJHt5ICsgc2hpZnR9IG1gKTtcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICB4ICs9IDI7XG4gICAgICAgICAgICAgIHNoaWZ0ID0gc2hpZnQgPT09IDAgPyBkeSA6IDA7XG4gICAgICAgICAgICAgIGJ1ZmZlci5wdXNoKGAke3h9ICR7eSArIHNoaWZ0fSBsYCk7XG4gICAgICAgICAgICB9IHdoaWxlICh4IDwgeEVuZCk7XG5cbiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKFwiU1wiKTtcbiAgICAgICAgICAgIHJldHVybiBbcG9pbnRzWzJdLngsIHhFbmQsIHkgLSAyICogZHksIHkgKyAyICogZHldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YS5oYXNQb3B1cCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG59XG5cbmNsYXNzIFN0cmlrZU91dEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xuICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLlNUUklLRU9VVDtcbiAgICBjb25zdCBxdWFkUG9pbnRzID0gdGhpcy5kYXRhLnF1YWRQb2ludHMgPSBnZXRRdWFkUG9pbnRzKHBhcmFtZXRlcnMuZGljdCwgbnVsbCk7XG5cbiAgICBpZiAocXVhZFBvaW50cykge1xuICAgICAgaWYgKCF0aGlzLmFwcGVhcmFuY2UpIHtcbiAgICAgICAgY29uc3Qgc3Ryb2tlQ29sb3IgPSB0aGlzLmNvbG9yID8gQXJyYXkuZnJvbSh0aGlzLmNvbG9yKS5tYXAoYyA9PiBjIC8gMjU1KSA6IFswLCAwLCAwXTtcbiAgICAgICAgY29uc3Qgc3Ryb2tlQWxwaGEgPSBwYXJhbWV0ZXJzLmRpY3QuZ2V0KFwiQ0FcIik7XG5cbiAgICAgICAgdGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe1xuICAgICAgICAgIHhyZWY6IHBhcmFtZXRlcnMueHJlZixcbiAgICAgICAgICBleHRyYTogXCJbXSAwIGQgMSB3XCIsXG4gICAgICAgICAgc3Ryb2tlQ29sb3IsXG4gICAgICAgICAgc3Ryb2tlQWxwaGEsXG4gICAgICAgICAgcG9pbnRzQ2FsbGJhY2s6IChidWZmZXIsIHBvaW50cykgPT4ge1xuICAgICAgICAgICAgYnVmZmVyLnB1c2goYCR7KHBvaW50c1swXS54ICsgcG9pbnRzWzJdLngpIC8gMn0gYCArIGAkeyhwb2ludHNbMF0ueSArIHBvaW50c1syXS55KSAvIDJ9IG1gLCBgJHsocG9pbnRzWzFdLnggKyBwb2ludHNbM10ueCkgLyAyfSBgICsgYCR7KHBvaW50c1sxXS55ICsgcG9pbnRzWzNdLnkpIC8gMn0gbGAsIFwiU1wiKTtcbiAgICAgICAgICAgIHJldHVybiBbcG9pbnRzWzBdLngsIHBvaW50c1sxXS54LCBwb2ludHNbM10ueSwgcG9pbnRzWzFdLnldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YS5oYXNQb3B1cCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG59XG5cbmNsYXNzIFN0YW1wQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuU1RBTVA7XG4gIH1cblxufVxuXG5jbGFzcyBGaWxlQXR0YWNobWVudEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xuICAgIGNvbnN0IGZpbGUgPSBuZXcgX2ZpbGVfc3BlYy5GaWxlU3BlYyhwYXJhbWV0ZXJzLmRpY3QuZ2V0KFwiRlNcIiksIHBhcmFtZXRlcnMueHJlZik7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuRklMRUFUVEFDSE1FTlQ7XG4gICAgdGhpcy5kYXRhLmZpbGUgPSBmaWxlLnNlcmlhbGl6YWJsZTtcbiAgfVxuXG59XG5cbi8qKiovIH0pLFxuLyogMjMgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuY3JlYXRlRGVmYXVsdEFwcGVhcmFuY2UgPSBjcmVhdGVEZWZhdWx0QXBwZWFyYW5jZTtcbmV4cG9ydHMucGFyc2VEZWZhdWx0QXBwZWFyYW5jZSA9IHBhcnNlRGVmYXVsdEFwcGVhcmFuY2U7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfY29sb3JzcGFjZSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjQpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG52YXIgX2V2YWx1YXRvciA9IF9fd19wZGZqc19yZXF1aXJlX18oMjUpO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMTApO1xuXG5jbGFzcyBEZWZhdWx0QXBwZWFyYW5jZUV2YWx1YXRvciBleHRlbmRzIF9ldmFsdWF0b3IuRXZhbHVhdG9yUHJlcHJvY2Vzc29yIHtcbiAgY29uc3RydWN0b3Ioc3RyKSB7XG4gICAgc3VwZXIobmV3IF9zdHJlYW0uU3RyaW5nU3RyZWFtKHN0cikpO1xuICB9XG5cbiAgcGFyc2UoKSB7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0ge1xuICAgICAgZm46IDAsXG4gICAgICBhcmdzOiBbXVxuICAgIH07XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgZm9udFNpemU6IDAsXG4gICAgICBmb250TmFtZTogXCJcIixcbiAgICAgIGZvbnRDb2xvcjogbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBvcGVyYXRpb24uYXJncy5sZW5ndGggPSAwO1xuXG4gICAgICAgIGlmICghdGhpcy5yZWFkKG9wZXJhdGlvbikpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNhdmVkU3RhdGVzRGVwdGggIT09IDApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBmbixcbiAgICAgICAgICBhcmdzXG4gICAgICAgIH0gPSBvcGVyYXRpb247XG5cbiAgICAgICAgc3dpdGNoIChmbiB8IDApIHtcbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGb250OlxuICAgICAgICAgICAgY29uc3QgW2ZvbnROYW1lLCBmb250U2l6ZV0gPSBhcmdzO1xuXG4gICAgICAgICAgICBpZiAoZm9udE5hbWUgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5OYW1lKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5mb250TmFtZSA9IGZvbnROYW1lLm5hbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZm9udFNpemUgPT09IFwibnVtYmVyXCIgJiYgZm9udFNpemUgPiAwKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5mb250U2l6ZSA9IGZvbnRTaXplO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxSR0JDb2xvcjpcbiAgICAgICAgICAgIF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiSXRlbShhcmdzLCAwLCByZXN1bHQuZm9udENvbG9yLCAwKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGaWxsR3JheTpcbiAgICAgICAgICAgIF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYkl0ZW0oYXJncywgMCwgcmVzdWx0LmZvbnRDb2xvciwgMCk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0RmlsbENvbG9yU3BhY2U6XG4gICAgICAgICAgICBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2JJdGVtKGFyZ3MsIDAsIHJlc3VsdC5mb250Q29sb3IsIDApO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKHJlYXNvbikge1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBwYXJzZURlZmF1bHRBcHBlYXJhbmNlIC0gaWdub3JpbmcgZXJyb3JzOiBcIiR7cmVhc29ufVwiLmApO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxufVxuXG5mdW5jdGlvbiBwYXJzZURlZmF1bHRBcHBlYXJhbmNlKHN0cikge1xuICByZXR1cm4gbmV3IERlZmF1bHRBcHBlYXJhbmNlRXZhbHVhdG9yKHN0cikucGFyc2UoKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVmYXVsdEFwcGVhcmFuY2Uoe1xuICBmb250U2l6ZSxcbiAgZm9udE5hbWUsXG4gIGZvbnRDb2xvclxufSkge1xuICBsZXQgY29sb3JDbWQ7XG5cbiAgaWYgKGZvbnRDb2xvci5ldmVyeShjID0+IGMgPT09IDApKSB7XG4gICAgY29sb3JDbWQgPSBcIjAgZ1wiO1xuICB9IGVsc2Uge1xuICAgIGNvbG9yQ21kID0gQXJyYXkuZnJvbShmb250Q29sb3IpLm1hcChjID0+IChjIC8gMjU1KS50b0ZpeGVkKDIpKS5qb2luKFwiIFwiKSArIFwiIHJnXCI7XG4gIH1cblxuICByZXR1cm4gYC8keygwLCBfY29yZV91dGlscy5lc2NhcGVQREZOYW1lKShmb250TmFtZSl9ICR7Zm9udFNpemV9IFRmICR7Y29sb3JDbWR9YDtcbn1cblxuLyoqKi8gfSksXG4vKiAyNCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5Db2xvclNwYWNlID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG5mdW5jdGlvbiByZXNpemVSZ2JJbWFnZShzcmMsIGRlc3QsIHcxLCBoMSwgdzIsIGgyLCBhbHBoYTAxKSB7XG4gIGNvbnN0IENPTVBPTkVOVFMgPSAzO1xuICBhbHBoYTAxID0gYWxwaGEwMSAhPT0gMSA/IDAgOiBhbHBoYTAxO1xuICBjb25zdCB4UmF0aW8gPSB3MSAvIHcyO1xuICBjb25zdCB5UmF0aW8gPSBoMSAvIGgyO1xuICBsZXQgbmV3SW5kZXggPSAwLFxuICAgICAgb2xkSW5kZXg7XG4gIGNvbnN0IHhTY2FsZWQgPSBuZXcgVWludDE2QXJyYXkodzIpO1xuICBjb25zdCB3MVNjYW5saW5lID0gdzEgKiBDT01QT05FTlRTO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdzI7IGkrKykge1xuICAgIHhTY2FsZWRbaV0gPSBNYXRoLmZsb29yKGkgKiB4UmF0aW8pICogQ09NUE9ORU5UUztcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaDI7IGkrKykge1xuICAgIGNvbnN0IHB5ID0gTWF0aC5mbG9vcihpICogeVJhdGlvKSAqIHcxU2NhbmxpbmU7XG5cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHcyOyBqKyspIHtcbiAgICAgIG9sZEluZGV4ID0gcHkgKyB4U2NhbGVkW2pdO1xuICAgICAgZGVzdFtuZXdJbmRleCsrXSA9IHNyY1tvbGRJbmRleCsrXTtcbiAgICAgIGRlc3RbbmV3SW5kZXgrK10gPSBzcmNbb2xkSW5kZXgrK107XG4gICAgICBkZXN0W25ld0luZGV4KytdID0gc3JjW29sZEluZGV4KytdO1xuICAgICAgbmV3SW5kZXggKz0gYWxwaGEwMTtcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgQ29sb3JTcGFjZSB7XG4gIGNvbnN0cnVjdG9yKG5hbWUsIG51bUNvbXBzKSB7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IENvbG9yU3BhY2UpIHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDYW5ub3QgaW5pdGlhbGl6ZSBDb2xvclNwYWNlLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMubnVtQ29tcHMgPSBudW1Db21wcztcbiAgfVxuXG4gIGdldFJnYihzcmMsIHNyY09mZnNldCkge1xuICAgIGNvbnN0IHJnYiA9IG5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtcbiAgICB0aGlzLmdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIHJnYiwgMCk7XG4gICAgcmV0dXJuIHJnYjtcbiAgfVxuXG4gIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0UmdiSXRlbVwiKTtcbiAgfVxuXG4gIGdldFJnYkJ1ZmZlcihzcmMsIHNyY09mZnNldCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIGJpdHMsIGFscGhhMDEpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0UmdiQnVmZmVyXCIpO1xuICB9XG5cbiAgZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBhbHBoYTAxKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIlNob3VsZCBub3QgY2FsbCBDb2xvclNwYWNlLmdldE91dHB1dExlbmd0aFwiKTtcbiAgfVxuXG4gIGlzUGFzc3Rocm91Z2goYml0cykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlzRGVmYXVsdERlY29kZShkZWNvZGVNYXAsIGJwYykge1xuICAgIHJldHVybiBDb2xvclNwYWNlLmlzRGVmYXVsdERlY29kZShkZWNvZGVNYXAsIHRoaXMubnVtQ29tcHMpO1xuICB9XG5cbiAgZmlsbFJnYihkZXN0LCBvcmlnaW5hbFdpZHRoLCBvcmlnaW5hbEhlaWdodCwgd2lkdGgsIGhlaWdodCwgYWN0dWFsSGVpZ2h0LCBicGMsIGNvbXBzLCBhbHBoYTAxKSB7XG4gICAgY29uc3QgY291bnQgPSBvcmlnaW5hbFdpZHRoICogb3JpZ2luYWxIZWlnaHQ7XG4gICAgbGV0IHJnYkJ1ZiA9IG51bGw7XG4gICAgY29uc3QgbnVtQ29tcG9uZW50Q29sb3JzID0gMSA8PCBicGM7XG4gICAgY29uc3QgbmVlZHNSZXNpemluZyA9IG9yaWdpbmFsSGVpZ2h0ICE9PSBoZWlnaHQgfHwgb3JpZ2luYWxXaWR0aCAhPT0gd2lkdGg7XG5cbiAgICBpZiAodGhpcy5pc1Bhc3N0aHJvdWdoKGJwYykpIHtcbiAgICAgIHJnYkJ1ZiA9IGNvbXBzO1xuICAgIH0gZWxzZSBpZiAodGhpcy5udW1Db21wcyA9PT0gMSAmJiBjb3VudCA+IG51bUNvbXBvbmVudENvbG9ycyAmJiB0aGlzLm5hbWUgIT09IFwiRGV2aWNlR3JheVwiICYmIHRoaXMubmFtZSAhPT0gXCJEZXZpY2VSR0JcIikge1xuICAgICAgY29uc3QgYWxsQ29sb3JzID0gYnBjIDw9IDggPyBuZXcgVWludDhBcnJheShudW1Db21wb25lbnRDb2xvcnMpIDogbmV3IFVpbnQxNkFycmF5KG51bUNvbXBvbmVudENvbG9ycyk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQ29tcG9uZW50Q29sb3JzOyBpKyspIHtcbiAgICAgICAgYWxsQ29sb3JzW2ldID0gaTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29sb3JNYXAgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkobnVtQ29tcG9uZW50Q29sb3JzICogMyk7XG4gICAgICB0aGlzLmdldFJnYkJ1ZmZlcihhbGxDb2xvcnMsIDAsIG51bUNvbXBvbmVudENvbG9ycywgY29sb3JNYXAsIDAsIGJwYywgMCk7XG5cbiAgICAgIGlmICghbmVlZHNSZXNpemluZykge1xuICAgICAgICBsZXQgZGVzdFBvcyA9IDA7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gY29tcHNbaV0gKiAzO1xuICAgICAgICAgIGRlc3RbZGVzdFBvcysrXSA9IGNvbG9yTWFwW2tleV07XG4gICAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gY29sb3JNYXBba2V5ICsgMV07XG4gICAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gY29sb3JNYXBba2V5ICsgMl07XG4gICAgICAgICAgZGVzdFBvcyArPSBhbHBoYTAxO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZ2JCdWYgPSBuZXcgVWludDhBcnJheShjb3VudCAqIDMpO1xuICAgICAgICBsZXQgcmdiUG9zID0gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBjb21wc1tpXSAqIDM7XG4gICAgICAgICAgcmdiQnVmW3JnYlBvcysrXSA9IGNvbG9yTWFwW2tleV07XG4gICAgICAgICAgcmdiQnVmW3JnYlBvcysrXSA9IGNvbG9yTWFwW2tleSArIDFdO1xuICAgICAgICAgIHJnYkJ1ZltyZ2JQb3MrK10gPSBjb2xvck1hcFtrZXkgKyAyXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIW5lZWRzUmVzaXppbmcpIHtcbiAgICAgICAgdGhpcy5nZXRSZ2JCdWZmZXIoY29tcHMsIDAsIHdpZHRoICogYWN0dWFsSGVpZ2h0LCBkZXN0LCAwLCBicGMsIGFscGhhMDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmdiQnVmID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGNvdW50ICogMyk7XG4gICAgICAgIHRoaXMuZ2V0UmdiQnVmZmVyKGNvbXBzLCAwLCBjb3VudCwgcmdiQnVmLCAwLCBicGMsIDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZ2JCdWYpIHtcbiAgICAgIGlmIChuZWVkc1Jlc2l6aW5nKSB7XG4gICAgICAgIHJlc2l6ZVJnYkltYWdlKHJnYkJ1ZiwgZGVzdCwgb3JpZ2luYWxXaWR0aCwgb3JpZ2luYWxIZWlnaHQsIHdpZHRoLCBoZWlnaHQsIGFscGhhMDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGRlc3RQb3MgPSAwLFxuICAgICAgICAgICAgcmdiUG9zID0gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSB3aWR0aCAqIGFjdHVhbEhlaWdodDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICBkZXN0W2Rlc3RQb3MrK10gPSByZ2JCdWZbcmdiUG9zKytdO1xuICAgICAgICAgIGRlc3RbZGVzdFBvcysrXSA9IHJnYkJ1ZltyZ2JQb3MrK107XG4gICAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gcmdiQnVmW3JnYlBvcysrXTtcbiAgICAgICAgICBkZXN0UG9zICs9IGFscGhhMDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgdXNlc1plcm9Ub09uZVJhbmdlKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInVzZXNaZXJvVG9PbmVSYW5nZVwiLCB0cnVlKTtcbiAgfVxuXG4gIHN0YXRpYyBfY2FjaGUoY2FjaGVLZXksIHhyZWYsIGxvY2FsQ29sb3JTcGFjZUNhY2hlLCBwYXJzZWRDb2xvclNwYWNlKSB7XG4gICAgaWYgKCFsb2NhbENvbG9yU3BhY2VDYWNoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2xvclNwYWNlLl9jYWNoZSAtIGV4cGVjdGVkIFwibG9jYWxDb2xvclNwYWNlQ2FjaGVcIiBhcmd1bWVudC4nKTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZENvbG9yU3BhY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29sb3JTcGFjZS5fY2FjaGUgLSBleHBlY3RlZCBcInBhcnNlZENvbG9yU3BhY2VcIiBhcmd1bWVudC4nKTtcbiAgICB9XG5cbiAgICBsZXQgY3NOYW1lLCBjc1JlZjtcblxuICAgIGlmIChjYWNoZUtleSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLlJlZikge1xuICAgICAgY3NSZWYgPSBjYWNoZUtleTtcbiAgICAgIGNhY2hlS2V5ID0geHJlZi5mZXRjaChjYWNoZUtleSk7XG4gICAgfVxuXG4gICAgaWYgKGNhY2hlS2V5IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuTmFtZSkge1xuICAgICAgY3NOYW1lID0gY2FjaGVLZXkubmFtZTtcbiAgICB9XG5cbiAgICBpZiAoY3NOYW1lIHx8IGNzUmVmKSB7XG4gICAgICBsb2NhbENvbG9yU3BhY2VDYWNoZS5zZXQoY3NOYW1lLCBjc1JlZiwgcGFyc2VkQ29sb3JTcGFjZSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldENhY2hlZChjYWNoZUtleSwgeHJlZiwgbG9jYWxDb2xvclNwYWNlQ2FjaGUpIHtcbiAgICBpZiAoIWxvY2FsQ29sb3JTcGFjZUNhY2hlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbG9yU3BhY2UuZ2V0Q2FjaGVkIC0gZXhwZWN0ZWQgXCJsb2NhbENvbG9yU3BhY2VDYWNoZVwiIGFyZ3VtZW50LicpO1xuICAgIH1cblxuICAgIGlmIChjYWNoZUtleSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLlJlZikge1xuICAgICAgY29uc3QgbG9jYWxDb2xvclNwYWNlID0gbG9jYWxDb2xvclNwYWNlQ2FjaGUuZ2V0QnlSZWYoY2FjaGVLZXkpO1xuXG4gICAgICBpZiAobG9jYWxDb2xvclNwYWNlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbENvbG9yU3BhY2U7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNhY2hlS2V5ID0geHJlZi5mZXRjaChjYWNoZUtleSk7XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhY2hlS2V5IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuTmFtZSkge1xuICAgICAgY29uc3QgbG9jYWxDb2xvclNwYWNlID0gbG9jYWxDb2xvclNwYWNlQ2FjaGUuZ2V0QnlOYW1lKGNhY2hlS2V5Lm5hbWUpO1xuXG4gICAgICBpZiAobG9jYWxDb2xvclNwYWNlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbENvbG9yU3BhY2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcGFyc2VBc3luYyh7XG4gICAgY3MsXG4gICAgeHJlZixcbiAgICByZXNvdXJjZXMgPSBudWxsLFxuICAgIHBkZkZ1bmN0aW9uRmFjdG9yeSxcbiAgICBsb2NhbENvbG9yU3BhY2VDYWNoZVxuICB9KSB7XG4gICAgY29uc3QgcGFyc2VkQ29sb3JTcGFjZSA9IHRoaXMuX3BhcnNlKGNzLCB4cmVmLCByZXNvdXJjZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSk7XG5cbiAgICB0aGlzLl9jYWNoZShjcywgeHJlZiwgbG9jYWxDb2xvclNwYWNlQ2FjaGUsIHBhcnNlZENvbG9yU3BhY2UpO1xuXG4gICAgcmV0dXJuIHBhcnNlZENvbG9yU3BhY2U7XG4gIH1cblxuICBzdGF0aWMgcGFyc2Uoe1xuICAgIGNzLFxuICAgIHhyZWYsXG4gICAgcmVzb3VyY2VzID0gbnVsbCxcbiAgICBwZGZGdW5jdGlvbkZhY3RvcnksXG4gICAgbG9jYWxDb2xvclNwYWNlQ2FjaGVcbiAgfSkge1xuICAgIGNvbnN0IGNhY2hlZENvbG9yU3BhY2UgPSB0aGlzLmdldENhY2hlZChjcywgeHJlZiwgbG9jYWxDb2xvclNwYWNlQ2FjaGUpO1xuXG4gICAgaWYgKGNhY2hlZENvbG9yU3BhY2UpIHtcbiAgICAgIHJldHVybiBjYWNoZWRDb2xvclNwYWNlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZENvbG9yU3BhY2UgPSB0aGlzLl9wYXJzZShjcywgeHJlZiwgcmVzb3VyY2VzLCBwZGZGdW5jdGlvbkZhY3RvcnkpO1xuXG4gICAgdGhpcy5fY2FjaGUoY3MsIHhyZWYsIGxvY2FsQ29sb3JTcGFjZUNhY2hlLCBwYXJzZWRDb2xvclNwYWNlKTtcblxuICAgIHJldHVybiBwYXJzZWRDb2xvclNwYWNlO1xuICB9XG5cbiAgc3RhdGljIF9wYXJzZShjcywgeHJlZiwgcmVzb3VyY2VzID0gbnVsbCwgcGRmRnVuY3Rpb25GYWN0b3J5KSB7XG4gICAgY3MgPSB4cmVmLmZldGNoSWZSZWYoY3MpO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGNzKSkge1xuICAgICAgc3dpdGNoIChjcy5uYW1lKSB7XG4gICAgICAgIGNhc2UgXCJHXCI6XG4gICAgICAgIGNhc2UgXCJEZXZpY2VHcmF5XCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5ncmF5O1xuXG4gICAgICAgIGNhc2UgXCJSR0JcIjpcbiAgICAgICAgY2FzZSBcIkRldmljZVJHQlwiOlxuICAgICAgICAgIHJldHVybiB0aGlzLnNpbmdsZXRvbnMucmdiO1xuXG4gICAgICAgIGNhc2UgXCJDTVlLXCI6XG4gICAgICAgIGNhc2UgXCJEZXZpY2VDTVlLXCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO1xuXG4gICAgICAgIGNhc2UgXCJQYXR0ZXJuXCI6XG4gICAgICAgICAgcmV0dXJuIG5ldyBQYXR0ZXJuQ1MobnVsbCk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkocmVzb3VyY2VzKSkge1xuICAgICAgICAgICAgY29uc3QgY29sb3JTcGFjZXMgPSByZXNvdXJjZXMuZ2V0KFwiQ29sb3JTcGFjZVwiKTtcblxuICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGNvbG9yU3BhY2VzKSkge1xuICAgICAgICAgICAgICBjb25zdCByZXNvdXJjZXNDUyA9IGNvbG9yU3BhY2VzLmdldChjcy5uYW1lKTtcblxuICAgICAgICAgICAgICBpZiAocmVzb3VyY2VzQ1MpIHtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkocmVzb3VyY2VzQ1MpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFyc2UocmVzb3VyY2VzQ1MsIHhyZWYsIHJlc291cmNlcywgcGRmRnVuY3Rpb25GYWN0b3J5KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjcyA9IHJlc291cmNlc0NTO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBVbnJlY29nbml6ZWQgQ29sb3JTcGFjZTogJHtjcy5uYW1lfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGNzKSkge1xuICAgICAgY29uc3QgbW9kZSA9IHhyZWYuZmV0Y2hJZlJlZihjc1swXSkubmFtZTtcbiAgICAgIGxldCBwYXJhbXMsIG51bUNvbXBzLCBiYXNlQ1MsIHdoaXRlUG9pbnQsIGJsYWNrUG9pbnQsIGdhbW1hO1xuXG4gICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgY2FzZSBcIkdcIjpcbiAgICAgICAgY2FzZSBcIkRldmljZUdyYXlcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7XG5cbiAgICAgICAgY2FzZSBcIlJHQlwiOlxuICAgICAgICBjYXNlIFwiRGV2aWNlUkdCXCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5yZ2I7XG5cbiAgICAgICAgY2FzZSBcIkNNWUtcIjpcbiAgICAgICAgY2FzZSBcIkRldmljZUNNWUtcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5zaW5nbGV0b25zLmNteWs7XG5cbiAgICAgICAgY2FzZSBcIkNhbEdyYXlcIjpcbiAgICAgICAgICBwYXJhbXMgPSB4cmVmLmZldGNoSWZSZWYoY3NbMV0pO1xuICAgICAgICAgIHdoaXRlUG9pbnQgPSBwYXJhbXMuZ2V0QXJyYXkoXCJXaGl0ZVBvaW50XCIpO1xuICAgICAgICAgIGJsYWNrUG9pbnQgPSBwYXJhbXMuZ2V0QXJyYXkoXCJCbGFja1BvaW50XCIpO1xuICAgICAgICAgIGdhbW1hID0gcGFyYW1zLmdldChcIkdhbW1hXCIpO1xuICAgICAgICAgIHJldHVybiBuZXcgQ2FsR3JheUNTKHdoaXRlUG9pbnQsIGJsYWNrUG9pbnQsIGdhbW1hKTtcblxuICAgICAgICBjYXNlIFwiQ2FsUkdCXCI6XG4gICAgICAgICAgcGFyYW1zID0geHJlZi5mZXRjaElmUmVmKGNzWzFdKTtcbiAgICAgICAgICB3aGl0ZVBvaW50ID0gcGFyYW1zLmdldEFycmF5KFwiV2hpdGVQb2ludFwiKTtcbiAgICAgICAgICBibGFja1BvaW50ID0gcGFyYW1zLmdldEFycmF5KFwiQmxhY2tQb2ludFwiKTtcbiAgICAgICAgICBnYW1tYSA9IHBhcmFtcy5nZXRBcnJheShcIkdhbW1hXCIpO1xuICAgICAgICAgIGNvbnN0IG1hdHJpeCA9IHBhcmFtcy5nZXRBcnJheShcIk1hdHJpeFwiKTtcbiAgICAgICAgICByZXR1cm4gbmV3IENhbFJHQkNTKHdoaXRlUG9pbnQsIGJsYWNrUG9pbnQsIGdhbW1hLCBtYXRyaXgpO1xuXG4gICAgICAgIGNhc2UgXCJJQ0NCYXNlZFwiOlxuICAgICAgICAgIGNvbnN0IHN0cmVhbSA9IHhyZWYuZmV0Y2hJZlJlZihjc1sxXSk7XG4gICAgICAgICAgY29uc3QgZGljdCA9IHN0cmVhbS5kaWN0O1xuICAgICAgICAgIG51bUNvbXBzID0gZGljdC5nZXQoXCJOXCIpO1xuICAgICAgICAgIGNvbnN0IGFsdCA9IGRpY3QuZ2V0KFwiQWx0ZXJuYXRlXCIpO1xuXG4gICAgICAgICAgaWYgKGFsdCkge1xuICAgICAgICAgICAgY29uc3QgYWx0Q1MgPSB0aGlzLl9wYXJzZShhbHQsIHhyZWYsIHJlc291cmNlcywgcGRmRnVuY3Rpb25GYWN0b3J5KTtcblxuICAgICAgICAgICAgaWYgKGFsdENTLm51bUNvbXBzID09PSBudW1Db21wcykge1xuICAgICAgICAgICAgICByZXR1cm4gYWx0Q1M7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIklDQ0Jhc2VkIGNvbG9yIHNwYWNlOiBJZ25vcmluZyBpbmNvcnJlY3QgL0FsdGVybmF0ZSBlbnRyeS5cIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG51bUNvbXBzID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7XG4gICAgICAgICAgfSBlbHNlIGlmIChudW1Db21wcyA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5yZ2I7XG4gICAgICAgICAgfSBlbHNlIGlmIChudW1Db21wcyA9PT0gNCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJQYXR0ZXJuXCI6XG4gICAgICAgICAgYmFzZUNTID0gY3NbMV0gfHwgbnVsbDtcblxuICAgICAgICAgIGlmIChiYXNlQ1MpIHtcbiAgICAgICAgICAgIGJhc2VDUyA9IHRoaXMuX3BhcnNlKGJhc2VDUywgeHJlZiwgcmVzb3VyY2VzLCBwZGZGdW5jdGlvbkZhY3RvcnkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBuZXcgUGF0dGVybkNTKGJhc2VDUyk7XG5cbiAgICAgICAgY2FzZSBcIklcIjpcbiAgICAgICAgY2FzZSBcIkluZGV4ZWRcIjpcbiAgICAgICAgICBiYXNlQ1MgPSB0aGlzLl9wYXJzZShjc1sxXSwgeHJlZiwgcmVzb3VyY2VzLCBwZGZGdW5jdGlvbkZhY3RvcnkpO1xuICAgICAgICAgIGNvbnN0IGhpVmFsID0geHJlZi5mZXRjaElmUmVmKGNzWzJdKSArIDE7XG4gICAgICAgICAgY29uc3QgbG9va3VwID0geHJlZi5mZXRjaElmUmVmKGNzWzNdKTtcbiAgICAgICAgICByZXR1cm4gbmV3IEluZGV4ZWRDUyhiYXNlQ1MsIGhpVmFsLCBsb29rdXApO1xuXG4gICAgICAgIGNhc2UgXCJTZXBhcmF0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJEZXZpY2VOXCI6XG4gICAgICAgICAgY29uc3QgbmFtZSA9IHhyZWYuZmV0Y2hJZlJlZihjc1sxXSk7XG4gICAgICAgICAgbnVtQ29tcHMgPSBBcnJheS5pc0FycmF5KG5hbWUpID8gbmFtZS5sZW5ndGggOiAxO1xuICAgICAgICAgIGJhc2VDUyA9IHRoaXMuX3BhcnNlKGNzWzJdLCB4cmVmLCByZXNvdXJjZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSk7XG4gICAgICAgICAgY29uc3QgdGludEZuID0gcGRmRnVuY3Rpb25GYWN0b3J5LmNyZWF0ZShjc1szXSk7XG4gICAgICAgICAgcmV0dXJuIG5ldyBBbHRlcm5hdGVDUyhudW1Db21wcywgYmFzZUNTLCB0aW50Rm4pO1xuXG4gICAgICAgIGNhc2UgXCJMYWJcIjpcbiAgICAgICAgICBwYXJhbXMgPSB4cmVmLmZldGNoSWZSZWYoY3NbMV0pO1xuICAgICAgICAgIHdoaXRlUG9pbnQgPSBwYXJhbXMuZ2V0QXJyYXkoXCJXaGl0ZVBvaW50XCIpO1xuICAgICAgICAgIGJsYWNrUG9pbnQgPSBwYXJhbXMuZ2V0QXJyYXkoXCJCbGFja1BvaW50XCIpO1xuICAgICAgICAgIGNvbnN0IHJhbmdlID0gcGFyYW1zLmdldEFycmF5KFwiUmFuZ2VcIik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBMYWJDUyh3aGl0ZVBvaW50LCBibGFja1BvaW50LCByYW5nZSk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFVuaW1wbGVtZW50ZWQgQ29sb3JTcGFjZSBvYmplY3Q6ICR7bW9kZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFVucmVjb2duaXplZCBDb2xvclNwYWNlIG9iamVjdDogJHtjc31gKTtcbiAgfVxuXG4gIHN0YXRpYyBpc0RlZmF1bHREZWNvZGUoZGVjb2RlLCBudW1Db21wcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShkZWNvZGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobnVtQ29tcHMgKiAyICE9PSBkZWNvZGUubGVuZ3RoKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJUaGUgZGVjb2RlIG1hcCBpcyBub3QgdGhlIGNvcnJlY3QgbGVuZ3RoXCIpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZGVjb2RlLmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHtcbiAgICAgIGlmIChkZWNvZGVbaV0gIT09IDAgfHwgZGVjb2RlW2kgKyAxXSAhPT0gMSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNpbmdsZXRvbnMoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwic2luZ2xldG9uc1wiLCB7XG4gICAgICBnZXQgZ3JheSgpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiZ3JheVwiLCBuZXcgRGV2aWNlR3JheUNTKCkpO1xuICAgICAgfSxcblxuICAgICAgZ2V0IHJnYigpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwicmdiXCIsIG5ldyBEZXZpY2VSZ2JDUygpKTtcbiAgICAgIH0sXG5cbiAgICAgIGdldCBjbXlrKCkge1xuICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJjbXlrXCIsIG5ldyBEZXZpY2VDbXlrQ1MoKSk7XG4gICAgICB9XG5cbiAgICB9KTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U7XG5cbmNsYXNzIEFsdGVybmF0ZUNTIGV4dGVuZHMgQ29sb3JTcGFjZSB7XG4gIGNvbnN0cnVjdG9yKG51bUNvbXBzLCBiYXNlLCB0aW50Rm4pIHtcbiAgICBzdXBlcihcIkFsdGVybmF0ZVwiLCBudW1Db21wcyk7XG4gICAgdGhpcy5iYXNlID0gYmFzZTtcbiAgICB0aGlzLnRpbnRGbiA9IHRpbnRGbjtcbiAgICB0aGlzLnRtcEJ1ZiA9IG5ldyBGbG9hdDMyQXJyYXkoYmFzZS5udW1Db21wcyk7XG4gIH1cblxuICBnZXRSZ2JJdGVtKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgY29uc3QgdG1wQnVmID0gdGhpcy50bXBCdWY7XG4gICAgdGhpcy50aW50Rm4oc3JjLCBzcmNPZmZzZXQsIHRtcEJ1ZiwgMCk7XG4gICAgdGhpcy5iYXNlLmdldFJnYkl0ZW0odG1wQnVmLCAwLCBkZXN0LCBkZXN0T2Zmc2V0KTtcbiAgfVxuXG4gIGdldFJnYkJ1ZmZlcihzcmMsIHNyY09mZnNldCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIGJpdHMsIGFscGhhMDEpIHtcbiAgICBjb25zdCB0aW50Rm4gPSB0aGlzLnRpbnRGbjtcbiAgICBjb25zdCBiYXNlID0gdGhpcy5iYXNlO1xuICAgIGNvbnN0IHNjYWxlID0gMSAvICgoMSA8PCBiaXRzKSAtIDEpO1xuICAgIGNvbnN0IGJhc2VOdW1Db21wcyA9IGJhc2UubnVtQ29tcHM7XG4gICAgY29uc3QgdXNlc1plcm9Ub09uZVJhbmdlID0gYmFzZS51c2VzWmVyb1RvT25lUmFuZ2U7XG4gICAgY29uc3QgaXNQYXNzdGhyb3VnaCA9IChiYXNlLmlzUGFzc3Rocm91Z2goOCkgfHwgIXVzZXNaZXJvVG9PbmVSYW5nZSkgJiYgYWxwaGEwMSA9PT0gMDtcbiAgICBsZXQgcG9zID0gaXNQYXNzdGhyb3VnaCA/IGRlc3RPZmZzZXQgOiAwO1xuICAgIGNvbnN0IGJhc2VCdWYgPSBpc1Bhc3N0aHJvdWdoID8gZGVzdCA6IG5ldyBVaW50OENsYW1wZWRBcnJheShiYXNlTnVtQ29tcHMgKiBjb3VudCk7XG4gICAgY29uc3QgbnVtQ29tcHMgPSB0aGlzLm51bUNvbXBzO1xuICAgIGNvbnN0IHNjYWxlZCA9IG5ldyBGbG9hdDMyQXJyYXkobnVtQ29tcHMpO1xuICAgIGNvbnN0IHRpbnRlZCA9IG5ldyBGbG9hdDMyQXJyYXkoYmFzZU51bUNvbXBzKTtcbiAgICBsZXQgaSwgajtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgbnVtQ29tcHM7IGorKykge1xuICAgICAgICBzY2FsZWRbal0gPSBzcmNbc3JjT2Zmc2V0KytdICogc2NhbGU7XG4gICAgICB9XG5cbiAgICAgIHRpbnRGbihzY2FsZWQsIDAsIHRpbnRlZCwgMCk7XG5cbiAgICAgIGlmICh1c2VzWmVyb1RvT25lUmFuZ2UpIHtcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGJhc2VOdW1Db21wczsgaisrKSB7XG4gICAgICAgICAgYmFzZUJ1Zltwb3MrK10gPSB0aW50ZWRbal0gKiAyNTU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2UuZ2V0UmdiSXRlbSh0aW50ZWQsIDAsIGJhc2VCdWYsIHBvcyk7XG4gICAgICAgIHBvcyArPSBiYXNlTnVtQ29tcHM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpc1Bhc3N0aHJvdWdoKSB7XG4gICAgICBiYXNlLmdldFJnYkJ1ZmZlcihiYXNlQnVmLCAwLCBjb3VudCwgZGVzdCwgZGVzdE9mZnNldCwgOCwgYWxwaGEwMSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBhbHBoYTAxKSB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZS5nZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGggKiB0aGlzLmJhc2UubnVtQ29tcHMgLyB0aGlzLm51bUNvbXBzLCBhbHBoYTAxKTtcbiAgfVxuXG59XG5cbmNsYXNzIFBhdHRlcm5DUyBleHRlbmRzIENvbG9yU3BhY2Uge1xuICBjb25zdHJ1Y3RvcihiYXNlQ1MpIHtcbiAgICBzdXBlcihcIlBhdHRlcm5cIiwgbnVsbCk7XG4gICAgdGhpcy5iYXNlID0gYmFzZUNTO1xuICB9XG5cbiAgaXNEZWZhdWx0RGVjb2RlKGRlY29kZU1hcCwgYnBjKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIlNob3VsZCBub3QgY2FsbCBQYXR0ZXJuQ1MuaXNEZWZhdWx0RGVjb2RlXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgSW5kZXhlZENTIGV4dGVuZHMgQ29sb3JTcGFjZSB7XG4gIGNvbnN0cnVjdG9yKGJhc2UsIGhpZ2hWYWwsIGxvb2t1cCkge1xuICAgIHN1cGVyKFwiSW5kZXhlZFwiLCAxKTtcbiAgICB0aGlzLmJhc2UgPSBiYXNlO1xuICAgIHRoaXMuaGlnaFZhbCA9IGhpZ2hWYWw7XG4gICAgY29uc3QgbGVuZ3RoID0gYmFzZS5udW1Db21wcyAqIGhpZ2hWYWw7XG4gICAgdGhpcy5sb29rdXAgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkobG9va3VwKSkge1xuICAgICAgY29uc3QgYnl0ZXMgPSBsb29rdXAuZ2V0Qnl0ZXMobGVuZ3RoKTtcbiAgICAgIHRoaXMubG9va3VwLnNldChieXRlcyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbG9va3VwID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMubG9va3VwW2ldID0gbG9va3VwLmNoYXJDb2RlQXQoaSkgJiAweGZmO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEluZGV4ZWRDUyAtIHVucmVjb2duaXplZCBsb29rdXAgdGFibGU6ICR7bG9va3VwfWApO1xuICAgIH1cbiAgfVxuXG4gIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICBjb25zdCBudW1Db21wcyA9IHRoaXMuYmFzZS5udW1Db21wcztcbiAgICBjb25zdCBzdGFydCA9IHNyY1tzcmNPZmZzZXRdICogbnVtQ29tcHM7XG4gICAgdGhpcy5iYXNlLmdldFJnYkJ1ZmZlcih0aGlzLmxvb2t1cCwgc3RhcnQsIDEsIGRlc3QsIGRlc3RPZmZzZXQsIDgsIDApO1xuICB9XG5cbiAgZ2V0UmdiQnVmZmVyKHNyYywgc3JjT2Zmc2V0LCBjb3VudCwgZGVzdCwgZGVzdE9mZnNldCwgYml0cywgYWxwaGEwMSkge1xuICAgIGNvbnN0IGJhc2UgPSB0aGlzLmJhc2U7XG4gICAgY29uc3QgbnVtQ29tcHMgPSBiYXNlLm51bUNvbXBzO1xuICAgIGNvbnN0IG91dHB1dERlbHRhID0gYmFzZS5nZXRPdXRwdXRMZW5ndGgobnVtQ29tcHMsIGFscGhhMDEpO1xuICAgIGNvbnN0IGxvb2t1cCA9IHRoaXMubG9va3VwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgICBjb25zdCBsb29rdXBQb3MgPSBzcmNbc3JjT2Zmc2V0KytdICogbnVtQ29tcHM7XG4gICAgICBiYXNlLmdldFJnYkJ1ZmZlcihsb29rdXAsIGxvb2t1cFBvcywgMSwgZGVzdCwgZGVzdE9mZnNldCwgOCwgYWxwaGEwMSk7XG4gICAgICBkZXN0T2Zmc2V0ICs9IG91dHB1dERlbHRhO1xuICAgIH1cbiAgfVxuXG4gIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkge1xuICAgIHJldHVybiB0aGlzLmJhc2UuZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoICogdGhpcy5iYXNlLm51bUNvbXBzLCBhbHBoYTAxKTtcbiAgfVxuXG4gIGlzRGVmYXVsdERlY29kZShkZWNvZGVNYXAsIGJwYykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShkZWNvZGVNYXApKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZGVjb2RlTWFwLmxlbmd0aCAhPT0gMikge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiRGVjb2RlIG1hcCBsZW5ndGggaXMgbm90IGNvcnJlY3RcIik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYnBjKSB8fCBicGMgPCAxKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJCaXRzIHBlciBjb21wb25lbnQgaXMgbm90IGNvcnJlY3RcIik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVjb2RlTWFwWzBdID09PSAwICYmIGRlY29kZU1hcFsxXSA9PT0gKDEgPDwgYnBjKSAtIDE7XG4gIH1cblxufVxuXG5jbGFzcyBEZXZpY2VHcmF5Q1MgZXh0ZW5kcyBDb2xvclNwYWNlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJEZXZpY2VHcmF5XCIsIDEpO1xuICB9XG5cbiAgZ2V0UmdiSXRlbShzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCkge1xuICAgIGNvbnN0IGMgPSBzcmNbc3JjT2Zmc2V0XSAqIDI1NTtcbiAgICBkZXN0W2Rlc3RPZmZzZXRdID0gZGVzdFtkZXN0T2Zmc2V0ICsgMV0gPSBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IGM7XG4gIH1cblxuICBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7XG4gICAgY29uc3Qgc2NhbGUgPSAyNTUgLyAoKDEgPDwgYml0cykgLSAxKTtcbiAgICBsZXQgaiA9IHNyY09mZnNldCxcbiAgICAgICAgcSA9IGRlc3RPZmZzZXQ7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgIGNvbnN0IGMgPSBzY2FsZSAqIHNyY1tqKytdO1xuICAgICAgZGVzdFtxKytdID0gYztcbiAgICAgIGRlc3RbcSsrXSA9IGM7XG4gICAgICBkZXN0W3ErK10gPSBjO1xuICAgICAgcSArPSBhbHBoYTAxO1xuICAgIH1cbiAgfVxuXG4gIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkge1xuICAgIHJldHVybiBpbnB1dExlbmd0aCAqICgzICsgYWxwaGEwMSk7XG4gIH1cblxufVxuXG5jbGFzcyBEZXZpY2VSZ2JDUyBleHRlbmRzIENvbG9yU3BhY2Uge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkRldmljZVJHQlwiLCAzKTtcbiAgfVxuXG4gIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICBkZXN0W2Rlc3RPZmZzZXRdID0gc3JjW3NyY09mZnNldF0gKiAyNTU7XG4gICAgZGVzdFtkZXN0T2Zmc2V0ICsgMV0gPSBzcmNbc3JjT2Zmc2V0ICsgMV0gKiAyNTU7XG4gICAgZGVzdFtkZXN0T2Zmc2V0ICsgMl0gPSBzcmNbc3JjT2Zmc2V0ICsgMl0gKiAyNTU7XG4gIH1cblxuICBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7XG4gICAgaWYgKGJpdHMgPT09IDggJiYgYWxwaGEwMSA9PT0gMCkge1xuICAgICAgZGVzdC5zZXQoc3JjLnN1YmFycmF5KHNyY09mZnNldCwgc3JjT2Zmc2V0ICsgY291bnQgKiAzKSwgZGVzdE9mZnNldCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2NhbGUgPSAyNTUgLyAoKDEgPDwgYml0cykgLSAxKTtcbiAgICBsZXQgaiA9IHNyY09mZnNldCxcbiAgICAgICAgcSA9IGRlc3RPZmZzZXQ7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgIGRlc3RbcSsrXSA9IHNjYWxlICogc3JjW2orK107XG4gICAgICBkZXN0W3ErK10gPSBzY2FsZSAqIHNyY1tqKytdO1xuICAgICAgZGVzdFtxKytdID0gc2NhbGUgKiBzcmNbaisrXTtcbiAgICAgIHEgKz0gYWxwaGEwMTtcbiAgICB9XG4gIH1cblxuICBnZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGgsIGFscGhhMDEpIHtcbiAgICByZXR1cm4gaW5wdXRMZW5ndGggKiAoMyArIGFscGhhMDEpIC8gMyB8IDA7XG4gIH1cblxuICBpc1Bhc3N0aHJvdWdoKGJpdHMpIHtcbiAgICByZXR1cm4gYml0cyA9PT0gODtcbiAgfVxuXG59XG5cbmNvbnN0IERldmljZUNteWtDUyA9IGZ1bmN0aW9uIERldmljZUNteWtDU0Nsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIGNvbnZlcnRUb1JnYihzcmMsIHNyY09mZnNldCwgc3JjU2NhbGUsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICBjb25zdCBjID0gc3JjW3NyY09mZnNldF0gKiBzcmNTY2FsZTtcbiAgICBjb25zdCBtID0gc3JjW3NyY09mZnNldCArIDFdICogc3JjU2NhbGU7XG4gICAgY29uc3QgeSA9IHNyY1tzcmNPZmZzZXQgKyAyXSAqIHNyY1NjYWxlO1xuICAgIGNvbnN0IGsgPSBzcmNbc3JjT2Zmc2V0ICsgM10gKiBzcmNTY2FsZTtcbiAgICBkZXN0W2Rlc3RPZmZzZXRdID0gMjU1ICsgYyAqICgtNC4zODczMzIzODQ2MDk5ODggKiBjICsgNTQuNDg2MTUxOTQxODkxNzYgKiBtICsgMTguODIyOTA1MDIxNjUzMDIgKiB5ICsgMjEyLjI1NjYyNDUxNjM5NTg1ICogayArIC0yODUuMjMzMTAyNjEzNzAwNCkgKyBtICogKDEuNzE0OTc2MzQ3NzM2MjEzNCAqIG0gLSA1LjYwOTY3MzY5MDQwNDczMTUgKiB5ICsgLTE3Ljg3Mzg3MDg2MTQxNTQ0NCAqIGsgLSA1LjQ5NzAwNjQyNzE5NjM2NikgKyB5ICogKC0yLjUyMTczNDAxMzE2ODMwMzMgKiB5IC0gMjEuMjQ4OTIzMzM3MzUzMDczICogayArIDE3LjUxMTkyNzA4NDE4MTMpICsgayAqICgtMjEuODYxMjIxNDc0NjM2MDUgKiBrIC0gMTg5LjQ4MTgwODM1OTIyNzQ3KTtcbiAgICBkZXN0W2Rlc3RPZmZzZXQgKyAxXSA9IDI1NSArIGMgKiAoOC44NDEwNDE0MjIwMzYxNDkgKiBjICsgNjAuMTE4MDI3MDQ1NTk3MzY2ICogbSArIDYuODcxNDI1NTkyMDQ5MDA3ICogeSArIDMxLjE1OTEwMDEzMDA1NTkyMiAqIGsgKyAtNzkuMjk3MDg0NDgxNjU0OCkgKyBtICogKC0xNS4zMTAzNjEzMDY5Njc4MTcgKiBtICsgMTcuNTc1MjUxMjYxMTA5NDgyICogeSArIDEzMS4zNTI1MDkxMjQ5Mzk3NiAqIGsgLSAxOTAuOTQ1MzMwMjU4ODk1MSkgKyB5ICogKDQuNDQ0MzM5MTAyODUyNzM5ICogeSArIDkuODYzMjg2MTQ5MzQwNSAqIGsgLSAyNC44Njc0MTU4MjU1NTg3OCkgKyBrICogKC0yMC43MzczMjU0NzExODEwMzQgKiBrIC0gMTg3LjgwNDUzNzA5NzE5NTc4KTtcbiAgICBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IDI1NSArIGMgKiAoMC44ODQyNTIyNDMwMDAzMjk2ICogYyArIDguMDc4Njc3NTAzMTEyOTI4ICogbSArIDMwLjg5OTc4MzA5NzAzNzI5ICogeSAtIDAuMjM4ODMyMzg2ODkxNzg5MzQgKiBrICsgLTE0LjE4MzU3Njc5OTY3MzI4NikgKyBtICogKDEwLjQ5NTkzMjczNDMyMDcyICogbSArIDYzLjAyMzc4NDk0NzU0MDUyICogeSArIDUwLjYwNjk1NzY1NjM2MDczNCAqIGsgLSAxMTIuMjM4ODQyNTM3MTkyNDgpICsgeSAqICgwLjAzMjk2MDQxMTE0ODczMjE3ICogeSArIDExNS42MDM4NDQ0OTY0NjY0MSAqIGsgKyAtMTkzLjU4MjA5MzU2ODYxNTA1KSArIGsgKiAoLTIyLjMzODE2ODA3MzA5ODg2ICogayAtIDE4MC4xMjYxMzk3NDcwODM2Nyk7XG4gIH1cblxuICBjbGFzcyBEZXZpY2VDbXlrQ1MgZXh0ZW5kcyBDb2xvclNwYWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHN1cGVyKFwiRGV2aWNlQ01ZS1wiLCA0KTtcbiAgICB9XG5cbiAgICBnZXRSZ2JJdGVtKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICBjb252ZXJ0VG9SZ2Ioc3JjLCBzcmNPZmZzZXQsIDEsIGRlc3QsIGRlc3RPZmZzZXQpO1xuICAgIH1cblxuICAgIGdldFJnYkJ1ZmZlcihzcmMsIHNyY09mZnNldCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIGJpdHMsIGFscGhhMDEpIHtcbiAgICAgIGNvbnN0IHNjYWxlID0gMSAvICgoMSA8PCBiaXRzKSAtIDEpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgY29udmVydFRvUmdiKHNyYywgc3JjT2Zmc2V0LCBzY2FsZSwgZGVzdCwgZGVzdE9mZnNldCk7XG4gICAgICAgIHNyY09mZnNldCArPSA0O1xuICAgICAgICBkZXN0T2Zmc2V0ICs9IDMgKyBhbHBoYTAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkge1xuICAgICAgcmV0dXJuIGlucHV0TGVuZ3RoIC8gNCAqICgzICsgYWxwaGEwMSkgfCAwO1xuICAgIH1cblxuICB9XG5cbiAgcmV0dXJuIERldmljZUNteWtDUztcbn0oKTtcblxuY29uc3QgQ2FsR3JheUNTID0gZnVuY3Rpb24gQ2FsR3JheUNTQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gY29udmVydFRvUmdiKGNzLCBzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCwgc2NhbGUpIHtcbiAgICBjb25zdCBBID0gc3JjW3NyY09mZnNldF0gKiBzY2FsZTtcbiAgICBjb25zdCBBRyA9IEEgKiogY3MuRztcbiAgICBjb25zdCBMID0gY3MuWVcgKiBBRztcbiAgICBjb25zdCB2YWwgPSBNYXRoLm1heCgyOTUuOCAqIEwgKiogMC4zMzMzMzMzMzMzMzMzMzMzIC0gNDAuOCwgMCk7XG4gICAgZGVzdFtkZXN0T2Zmc2V0XSA9IHZhbDtcbiAgICBkZXN0W2Rlc3RPZmZzZXQgKyAxXSA9IHZhbDtcbiAgICBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IHZhbDtcbiAgfVxuXG4gIGNsYXNzIENhbEdyYXlDUyBleHRlbmRzIENvbG9yU3BhY2Uge1xuICAgIGNvbnN0cnVjdG9yKHdoaXRlUG9pbnQsIGJsYWNrUG9pbnQsIGdhbW1hKSB7XG4gICAgICBzdXBlcihcIkNhbEdyYXlcIiwgMSk7XG5cbiAgICAgIGlmICghd2hpdGVQb2ludCkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJXaGl0ZVBvaW50IG1pc3NpbmcgLSByZXF1aXJlZCBmb3IgY29sb3Igc3BhY2UgQ2FsR3JheVwiKTtcbiAgICAgIH1cblxuICAgICAgYmxhY2tQb2ludCA9IGJsYWNrUG9pbnQgfHwgWzAsIDAsIDBdO1xuICAgICAgZ2FtbWEgPSBnYW1tYSB8fCAxO1xuICAgICAgdGhpcy5YVyA9IHdoaXRlUG9pbnRbMF07XG4gICAgICB0aGlzLllXID0gd2hpdGVQb2ludFsxXTtcbiAgICAgIHRoaXMuWlcgPSB3aGl0ZVBvaW50WzJdO1xuICAgICAgdGhpcy5YQiA9IGJsYWNrUG9pbnRbMF07XG4gICAgICB0aGlzLllCID0gYmxhY2tQb2ludFsxXTtcbiAgICAgIHRoaXMuWkIgPSBibGFja1BvaW50WzJdO1xuICAgICAgdGhpcy5HID0gZ2FtbWE7XG5cbiAgICAgIGlmICh0aGlzLlhXIDwgMCB8fCB0aGlzLlpXIDwgMCB8fCB0aGlzLllXICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSW52YWxpZCBXaGl0ZVBvaW50IGNvbXBvbmVudHMgZm9yICR7dGhpcy5uYW1lfWAgKyBcIiwgbm8gZmFsbGJhY2sgYXZhaWxhYmxlXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5YQiA8IDAgfHwgdGhpcy5ZQiA8IDAgfHwgdGhpcy5aQiA8IDApIHtcbiAgICAgICAgKDAsIF91dGlsLmluZm8pKGBJbnZhbGlkIEJsYWNrUG9pbnQgZm9yICR7dGhpcy5uYW1lfSwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuYCk7XG4gICAgICAgIHRoaXMuWEIgPSB0aGlzLllCID0gdGhpcy5aQiA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLlhCICE9PSAwIHx8IHRoaXMuWUIgIT09IDAgfHwgdGhpcy5aQiAhPT0gMCkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYCR7dGhpcy5uYW1lfSwgQmxhY2tQb2ludDogWEI6ICR7dGhpcy5YQn0sIFlCOiAke3RoaXMuWUJ9LCBgICsgYFpCOiAke3RoaXMuWkJ9LCBvbmx5IGRlZmF1bHQgdmFsdWVzIGFyZSBzdXBwb3J0ZWQuYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLkcgPCAxKSB7XG4gICAgICAgICgwLCBfdXRpbC5pbmZvKShgSW52YWxpZCBHYW1tYTogJHt0aGlzLkd9IGZvciAke3RoaXMubmFtZX0sIGAgKyBcImZhbGxpbmcgYmFjayB0byBkZWZhdWx0LlwiKTtcbiAgICAgICAgdGhpcy5HID0gMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRSZ2JJdGVtKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICBjb252ZXJ0VG9SZ2IodGhpcywgc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQsIDEpO1xuICAgIH1cblxuICAgIGdldFJnYkJ1ZmZlcihzcmMsIHNyY09mZnNldCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIGJpdHMsIGFscGhhMDEpIHtcbiAgICAgIGNvbnN0IHNjYWxlID0gMSAvICgoMSA8PCBiaXRzKSAtIDEpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgICAgY29udmVydFRvUmdiKHRoaXMsIHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0LCBzY2FsZSk7XG4gICAgICAgIHNyY09mZnNldCArPSAxO1xuICAgICAgICBkZXN0T2Zmc2V0ICs9IDMgKyBhbHBoYTAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkge1xuICAgICAgcmV0dXJuIGlucHV0TGVuZ3RoICogKDMgKyBhbHBoYTAxKTtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBDYWxHcmF5Q1M7XG59KCk7XG5cbmNvbnN0IENhbFJHQkNTID0gZnVuY3Rpb24gQ2FsUkdCQ1NDbG9zdXJlKCkge1xuICBjb25zdCBCUkFERk9SRF9TQ0FMRV9NQVRSSVggPSBuZXcgRmxvYXQzMkFycmF5KFswLjg5NTEsIDAuMjY2NCwgLTAuMTYxNCwgLTAuNzUwMiwgMS43MTM1LCAwLjAzNjcsIDAuMDM4OSwgLTAuMDY4NSwgMS4wMjk2XSk7XG4gIGNvbnN0IEJSQURGT1JEX1NDQUxFX0lOVkVSU0VfTUFUUklYID0gbmV3IEZsb2F0MzJBcnJheShbMC45ODY5OTI5LCAtMC4xNDcwNTQzLCAwLjE1OTk2MjcsIDAuNDMyMzA1MywgMC41MTgzNjAzLCAwLjA0OTI5MTIsIC0wLjAwODUyODcsIDAuMDQwMDQyOCwgMC45Njg0ODY3XSk7XG4gIGNvbnN0IFNSR0JfRDY1X1hZWl9UT19SR0JfTUFUUklYID0gbmV3IEZsb2F0MzJBcnJheShbMy4yNDA0NTQyLCAtMS41MzcxMzg1LCAtMC40OTg1MzE0LCAtMC45NjkyNjYwLCAxLjg3NjAxMDgsIDAuMDQxNTU2MCwgMC4wNTU2NDM0LCAtMC4yMDQwMjU5LCAxLjA1NzIyNTJdKTtcbiAgY29uc3QgRkxBVF9XSElURVBPSU5UX01BVFJJWCA9IG5ldyBGbG9hdDMyQXJyYXkoWzEsIDEsIDFdKTtcbiAgY29uc3QgdGVtcE5vcm1hbGl6ZU1hdHJpeCA9IG5ldyBGbG9hdDMyQXJyYXkoMyk7XG4gIGNvbnN0IHRlbXBDb252ZXJ0TWF0cml4MSA9IG5ldyBGbG9hdDMyQXJyYXkoMyk7XG4gIGNvbnN0IHRlbXBDb252ZXJ0TWF0cml4MiA9IG5ldyBGbG9hdDMyQXJyYXkoMyk7XG4gIGNvbnN0IERFQ09ERV9MX0NPTlNUQU5UID0gKCg4ICsgMTYpIC8gMTE2KSAqKiAzIC8gOC4wO1xuXG4gIGZ1bmN0aW9uIG1hdHJpeFByb2R1Y3QoYSwgYiwgcmVzdWx0KSB7XG4gICAgcmVzdWx0WzBdID0gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXSArIGFbMl0gKiBiWzJdO1xuICAgIHJlc3VsdFsxXSA9IGFbM10gKiBiWzBdICsgYVs0XSAqIGJbMV0gKyBhWzVdICogYlsyXTtcbiAgICByZXN1bHRbMl0gPSBhWzZdICogYlswXSArIGFbN10gKiBiWzFdICsgYVs4XSAqIGJbMl07XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VG9GbGF0KHNvdXJjZVdoaXRlUG9pbnQsIExNUywgcmVzdWx0KSB7XG4gICAgcmVzdWx0WzBdID0gTE1TWzBdICogMSAvIHNvdXJjZVdoaXRlUG9pbnRbMF07XG4gICAgcmVzdWx0WzFdID0gTE1TWzFdICogMSAvIHNvdXJjZVdoaXRlUG9pbnRbMV07XG4gICAgcmVzdWx0WzJdID0gTE1TWzJdICogMSAvIHNvdXJjZVdoaXRlUG9pbnRbMl07XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VG9ENjUoc291cmNlV2hpdGVQb2ludCwgTE1TLCByZXN1bHQpIHtcbiAgICBjb25zdCBENjVYID0gMC45NTA0NztcbiAgICBjb25zdCBENjVZID0gMTtcbiAgICBjb25zdCBENjVaID0gMS4wODg4MztcbiAgICByZXN1bHRbMF0gPSBMTVNbMF0gKiBENjVYIC8gc291cmNlV2hpdGVQb2ludFswXTtcbiAgICByZXN1bHRbMV0gPSBMTVNbMV0gKiBENjVZIC8gc291cmNlV2hpdGVQb2ludFsxXTtcbiAgICByZXN1bHRbMl0gPSBMTVNbMl0gKiBENjVaIC8gc291cmNlV2hpdGVQb2ludFsyXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNSR0JUcmFuc2ZlckZ1bmN0aW9uKGNvbG9yKSB7XG4gICAgaWYgKGNvbG9yIDw9IDAuMDAzMTMwOCkge1xuICAgICAgcmV0dXJuIGFkanVzdFRvUmFuZ2UoMCwgMSwgMTIuOTIgKiBjb2xvcik7XG4gICAgfVxuXG4gICAgaWYgKGNvbG9yID49IDAuOTk1NTQ1MjUpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIHJldHVybiBhZGp1c3RUb1JhbmdlKDAsIDEsICgxICsgMC4wNTUpICogY29sb3IgKiogKDEgLyAyLjQpIC0gMC4wNTUpO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRqdXN0VG9SYW5nZShtaW4sIG1heCwgdmFsdWUpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgobWluLCBNYXRoLm1pbihtYXgsIHZhbHVlKSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZWNvZGVMKEwpIHtcbiAgICBpZiAoTCA8IDApIHtcbiAgICAgIHJldHVybiAtZGVjb2RlTCgtTCk7XG4gICAgfVxuXG4gICAgaWYgKEwgPiA4LjApIHtcbiAgICAgIHJldHVybiAoKEwgKyAxNikgLyAxMTYpICoqIDM7XG4gICAgfVxuXG4gICAgcmV0dXJuIEwgKiBERUNPREVfTF9DT05TVEFOVDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXBlbnNhdGVCbGFja1BvaW50KHNvdXJjZUJsYWNrUG9pbnQsIFhZWl9GbGF0LCByZXN1bHQpIHtcbiAgICBpZiAoc291cmNlQmxhY2tQb2ludFswXSA9PT0gMCAmJiBzb3VyY2VCbGFja1BvaW50WzFdID09PSAwICYmIHNvdXJjZUJsYWNrUG9pbnRbMl0gPT09IDApIHtcbiAgICAgIHJlc3VsdFswXSA9IFhZWl9GbGF0WzBdO1xuICAgICAgcmVzdWx0WzFdID0gWFlaX0ZsYXRbMV07XG4gICAgICByZXN1bHRbMl0gPSBYWVpfRmxhdFsyXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB6ZXJvRGVjb2RlTCA9IGRlY29kZUwoMCk7XG4gICAgY29uc3QgWF9EU1QgPSB6ZXJvRGVjb2RlTDtcbiAgICBjb25zdCBYX1NSQyA9IGRlY29kZUwoc291cmNlQmxhY2tQb2ludFswXSk7XG4gICAgY29uc3QgWV9EU1QgPSB6ZXJvRGVjb2RlTDtcbiAgICBjb25zdCBZX1NSQyA9IGRlY29kZUwoc291cmNlQmxhY2tQb2ludFsxXSk7XG4gICAgY29uc3QgWl9EU1QgPSB6ZXJvRGVjb2RlTDtcbiAgICBjb25zdCBaX1NSQyA9IGRlY29kZUwoc291cmNlQmxhY2tQb2ludFsyXSk7XG4gICAgY29uc3QgWF9TY2FsZSA9ICgxIC0gWF9EU1QpIC8gKDEgLSBYX1NSQyk7XG4gICAgY29uc3QgWF9PZmZzZXQgPSAxIC0gWF9TY2FsZTtcbiAgICBjb25zdCBZX1NjYWxlID0gKDEgLSBZX0RTVCkgLyAoMSAtIFlfU1JDKTtcbiAgICBjb25zdCBZX09mZnNldCA9IDEgLSBZX1NjYWxlO1xuICAgIGNvbnN0IFpfU2NhbGUgPSAoMSAtIFpfRFNUKSAvICgxIC0gWl9TUkMpO1xuICAgIGNvbnN0IFpfT2Zmc2V0ID0gMSAtIFpfU2NhbGU7XG4gICAgcmVzdWx0WzBdID0gWFlaX0ZsYXRbMF0gKiBYX1NjYWxlICsgWF9PZmZzZXQ7XG4gICAgcmVzdWx0WzFdID0gWFlaX0ZsYXRbMV0gKiBZX1NjYWxlICsgWV9PZmZzZXQ7XG4gICAgcmVzdWx0WzJdID0gWFlaX0ZsYXRbMl0gKiBaX1NjYWxlICsgWl9PZmZzZXQ7XG4gIH1cblxuICBmdW5jdGlvbiBub3JtYWxpemVXaGl0ZVBvaW50VG9GbGF0KHNvdXJjZVdoaXRlUG9pbnQsIFhZWl9JbiwgcmVzdWx0KSB7XG4gICAgaWYgKHNvdXJjZVdoaXRlUG9pbnRbMF0gPT09IDEgJiYgc291cmNlV2hpdGVQb2ludFsyXSA9PT0gMSkge1xuICAgICAgcmVzdWx0WzBdID0gWFlaX0luWzBdO1xuICAgICAgcmVzdWx0WzFdID0gWFlaX0luWzFdO1xuICAgICAgcmVzdWx0WzJdID0gWFlaX0luWzJdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IExNUyA9IHJlc3VsdDtcbiAgICBtYXRyaXhQcm9kdWN0KEJSQURGT1JEX1NDQUxFX01BVFJJWCwgWFlaX0luLCBMTVMpO1xuICAgIGNvbnN0IExNU19GbGF0ID0gdGVtcE5vcm1hbGl6ZU1hdHJpeDtcbiAgICBjb252ZXJ0VG9GbGF0KHNvdXJjZVdoaXRlUG9pbnQsIExNUywgTE1TX0ZsYXQpO1xuICAgIG1hdHJpeFByb2R1Y3QoQlJBREZPUkRfU0NBTEVfSU5WRVJTRV9NQVRSSVgsIExNU19GbGF0LCByZXN1bHQpO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplV2hpdGVQb2ludFRvRDY1KHNvdXJjZVdoaXRlUG9pbnQsIFhZWl9JbiwgcmVzdWx0KSB7XG4gICAgY29uc3QgTE1TID0gcmVzdWx0O1xuICAgIG1hdHJpeFByb2R1Y3QoQlJBREZPUkRfU0NBTEVfTUFUUklYLCBYWVpfSW4sIExNUyk7XG4gICAgY29uc3QgTE1TX0Q2NSA9IHRlbXBOb3JtYWxpemVNYXRyaXg7XG4gICAgY29udmVydFRvRDY1KHNvdXJjZVdoaXRlUG9pbnQsIExNUywgTE1TX0Q2NSk7XG4gICAgbWF0cml4UHJvZHVjdChCUkFERk9SRF9TQ0FMRV9JTlZFUlNFX01BVFJJWCwgTE1TX0Q2NSwgcmVzdWx0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRUb1JnYihjcywgc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQsIHNjYWxlKSB7XG4gICAgY29uc3QgQSA9IGFkanVzdFRvUmFuZ2UoMCwgMSwgc3JjW3NyY09mZnNldF0gKiBzY2FsZSk7XG4gICAgY29uc3QgQiA9IGFkanVzdFRvUmFuZ2UoMCwgMSwgc3JjW3NyY09mZnNldCArIDFdICogc2NhbGUpO1xuICAgIGNvbnN0IEMgPSBhZGp1c3RUb1JhbmdlKDAsIDEsIHNyY1tzcmNPZmZzZXQgKyAyXSAqIHNjYWxlKTtcbiAgICBjb25zdCBBR1IgPSBBID09PSAxID8gMSA6IEEgKiogY3MuR1I7XG4gICAgY29uc3QgQkdHID0gQiA9PT0gMSA/IDEgOiBCICoqIGNzLkdHO1xuICAgIGNvbnN0IENHQiA9IEMgPT09IDEgPyAxIDogQyAqKiBjcy5HQjtcbiAgICBjb25zdCBYID0gY3MuTVhBICogQUdSICsgY3MuTVhCICogQkdHICsgY3MuTVhDICogQ0dCO1xuICAgIGNvbnN0IFkgPSBjcy5NWUEgKiBBR1IgKyBjcy5NWUIgKiBCR0cgKyBjcy5NWUMgKiBDR0I7XG4gICAgY29uc3QgWiA9IGNzLk1aQSAqIEFHUiArIGNzLk1aQiAqIEJHRyArIGNzLk1aQyAqIENHQjtcbiAgICBjb25zdCBYWVogPSB0ZW1wQ29udmVydE1hdHJpeDE7XG4gICAgWFlaWzBdID0gWDtcbiAgICBYWVpbMV0gPSBZO1xuICAgIFhZWlsyXSA9IFo7XG4gICAgY29uc3QgWFlaX0ZsYXQgPSB0ZW1wQ29udmVydE1hdHJpeDI7XG4gICAgbm9ybWFsaXplV2hpdGVQb2ludFRvRmxhdChjcy53aGl0ZVBvaW50LCBYWVosIFhZWl9GbGF0KTtcbiAgICBjb25zdCBYWVpfQmxhY2sgPSB0ZW1wQ29udmVydE1hdHJpeDE7XG4gICAgY29tcGVuc2F0ZUJsYWNrUG9pbnQoY3MuYmxhY2tQb2ludCwgWFlaX0ZsYXQsIFhZWl9CbGFjayk7XG4gICAgY29uc3QgWFlaX0Q2NSA9IHRlbXBDb252ZXJ0TWF0cml4MjtcbiAgICBub3JtYWxpemVXaGl0ZVBvaW50VG9ENjUoRkxBVF9XSElURVBPSU5UX01BVFJJWCwgWFlaX0JsYWNrLCBYWVpfRDY1KTtcbiAgICBjb25zdCBTUkdCID0gdGVtcENvbnZlcnRNYXRyaXgxO1xuICAgIG1hdHJpeFByb2R1Y3QoU1JHQl9ENjVfWFlaX1RPX1JHQl9NQVRSSVgsIFhZWl9ENjUsIFNSR0IpO1xuICAgIGRlc3RbZGVzdE9mZnNldF0gPSBzUkdCVHJhbnNmZXJGdW5jdGlvbihTUkdCWzBdKSAqIDI1NTtcbiAgICBkZXN0W2Rlc3RPZmZzZXQgKyAxXSA9IHNSR0JUcmFuc2ZlckZ1bmN0aW9uKFNSR0JbMV0pICogMjU1O1xuICAgIGRlc3RbZGVzdE9mZnNldCArIDJdID0gc1JHQlRyYW5zZmVyRnVuY3Rpb24oU1JHQlsyXSkgKiAyNTU7XG4gIH1cblxuICBjbGFzcyBDYWxSR0JDUyBleHRlbmRzIENvbG9yU3BhY2Uge1xuICAgIGNvbnN0cnVjdG9yKHdoaXRlUG9pbnQsIGJsYWNrUG9pbnQsIGdhbW1hLCBtYXRyaXgpIHtcbiAgICAgIHN1cGVyKFwiQ2FsUkdCXCIsIDMpO1xuXG4gICAgICBpZiAoIXdoaXRlUG9pbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiV2hpdGVQb2ludCBtaXNzaW5nIC0gcmVxdWlyZWQgZm9yIGNvbG9yIHNwYWNlIENhbFJHQlwiKTtcbiAgICAgIH1cblxuICAgICAgYmxhY2tQb2ludCA9IGJsYWNrUG9pbnQgfHwgbmV3IEZsb2F0MzJBcnJheSgzKTtcbiAgICAgIGdhbW1hID0gZ2FtbWEgfHwgbmV3IEZsb2F0MzJBcnJheShbMSwgMSwgMV0pO1xuICAgICAgbWF0cml4ID0gbWF0cml4IHx8IG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDFdKTtcbiAgICAgIGNvbnN0IFhXID0gd2hpdGVQb2ludFswXTtcbiAgICAgIGNvbnN0IFlXID0gd2hpdGVQb2ludFsxXTtcbiAgICAgIGNvbnN0IFpXID0gd2hpdGVQb2ludFsyXTtcbiAgICAgIHRoaXMud2hpdGVQb2ludCA9IHdoaXRlUG9pbnQ7XG4gICAgICBjb25zdCBYQiA9IGJsYWNrUG9pbnRbMF07XG4gICAgICBjb25zdCBZQiA9IGJsYWNrUG9pbnRbMV07XG4gICAgICBjb25zdCBaQiA9IGJsYWNrUG9pbnRbMl07XG4gICAgICB0aGlzLmJsYWNrUG9pbnQgPSBibGFja1BvaW50O1xuICAgICAgdGhpcy5HUiA9IGdhbW1hWzBdO1xuICAgICAgdGhpcy5HRyA9IGdhbW1hWzFdO1xuICAgICAgdGhpcy5HQiA9IGdhbW1hWzJdO1xuICAgICAgdGhpcy5NWEEgPSBtYXRyaXhbMF07XG4gICAgICB0aGlzLk1ZQSA9IG1hdHJpeFsxXTtcbiAgICAgIHRoaXMuTVpBID0gbWF0cml4WzJdO1xuICAgICAgdGhpcy5NWEIgPSBtYXRyaXhbM107XG4gICAgICB0aGlzLk1ZQiA9IG1hdHJpeFs0XTtcbiAgICAgIHRoaXMuTVpCID0gbWF0cml4WzVdO1xuICAgICAgdGhpcy5NWEMgPSBtYXRyaXhbNl07XG4gICAgICB0aGlzLk1ZQyA9IG1hdHJpeFs3XTtcbiAgICAgIHRoaXMuTVpDID0gbWF0cml4WzhdO1xuXG4gICAgICBpZiAoWFcgPCAwIHx8IFpXIDwgMCB8fCBZVyAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzIGZvciAke3RoaXMubmFtZX1gICsgXCIsIG5vIGZhbGxiYWNrIGF2YWlsYWJsZVwiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFhCIDwgMCB8fCBZQiA8IDAgfHwgWkIgPCAwKSB7XG4gICAgICAgICgwLCBfdXRpbC5pbmZvKShgSW52YWxpZCBCbGFja1BvaW50IGZvciAke3RoaXMubmFtZX0gWyR7WEJ9LCAke1lCfSwgJHtaQn1dLCBgICsgXCJmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC5cIik7XG4gICAgICAgIHRoaXMuYmxhY2tQb2ludCA9IG5ldyBGbG9hdDMyQXJyYXkoMyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLkdSIDwgMCB8fCB0aGlzLkdHIDwgMCB8fCB0aGlzLkdCIDwgMCkge1xuICAgICAgICAoMCwgX3V0aWwuaW5mbykoYEludmFsaWQgR2FtbWEgWyR7dGhpcy5HUn0sICR7dGhpcy5HR30sICR7dGhpcy5HQn1dIGZvciBgICsgYCR7dGhpcy5uYW1lfSwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuYCk7XG4gICAgICAgIHRoaXMuR1IgPSB0aGlzLkdHID0gdGhpcy5HQiA9IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZ2V0UmdiSXRlbShzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCkge1xuICAgICAgY29udmVydFRvUmdiKHRoaXMsIHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0LCAxKTtcbiAgICB9XG5cbiAgICBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7XG4gICAgICBjb25zdCBzY2FsZSA9IDEgLyAoKDEgPDwgYml0cykgLSAxKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgICAgIGNvbnZlcnRUb1JnYih0aGlzLCBzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCwgc2NhbGUpO1xuICAgICAgICBzcmNPZmZzZXQgKz0gMztcbiAgICAgICAgZGVzdE9mZnNldCArPSAzICsgYWxwaGEwMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGgsIGFscGhhMDEpIHtcbiAgICAgIHJldHVybiBpbnB1dExlbmd0aCAqICgzICsgYWxwaGEwMSkgLyAzIHwgMDtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBDYWxSR0JDUztcbn0oKTtcblxuY29uc3QgTGFiQ1MgPSBmdW5jdGlvbiBMYWJDU0Nsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIGZuX2coeCkge1xuICAgIGxldCByZXN1bHQ7XG5cbiAgICBpZiAoeCA+PSA2IC8gMjkpIHtcbiAgICAgIHJlc3VsdCA9IHggKiogMztcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gMTA4IC8gODQxICogKHggLSA0IC8gMjkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBkZWNvZGUodmFsdWUsIGhpZ2gxLCBsb3cyLCBoaWdoMikge1xuICAgIHJldHVybiBsb3cyICsgdmFsdWUgKiAoaGlnaDIgLSBsb3cyKSAvIGhpZ2gxO1xuICB9XG5cbiAgZnVuY3Rpb24gY29udmVydFRvUmdiKGNzLCBzcmMsIHNyY09mZnNldCwgbWF4VmFsLCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgbGV0IExzID0gc3JjW3NyY09mZnNldF07XG4gICAgbGV0IGFzID0gc3JjW3NyY09mZnNldCArIDFdO1xuICAgIGxldCBicyA9IHNyY1tzcmNPZmZzZXQgKyAyXTtcblxuICAgIGlmIChtYXhWYWwgIT09IGZhbHNlKSB7XG4gICAgICBMcyA9IGRlY29kZShMcywgbWF4VmFsLCAwLCAxMDApO1xuICAgICAgYXMgPSBkZWNvZGUoYXMsIG1heFZhbCwgY3MuYW1pbiwgY3MuYW1heCk7XG4gICAgICBicyA9IGRlY29kZShicywgbWF4VmFsLCBjcy5ibWluLCBjcy5ibWF4KTtcbiAgICB9XG5cbiAgICBpZiAoYXMgPiBjcy5hbWF4KSB7XG4gICAgICBhcyA9IGNzLmFtYXg7XG4gICAgfSBlbHNlIGlmIChhcyA8IGNzLmFtaW4pIHtcbiAgICAgIGFzID0gY3MuYW1pbjtcbiAgICB9XG5cbiAgICBpZiAoYnMgPiBjcy5ibWF4KSB7XG4gICAgICBicyA9IGNzLmJtYXg7XG4gICAgfSBlbHNlIGlmIChicyA8IGNzLmJtaW4pIHtcbiAgICAgIGJzID0gY3MuYm1pbjtcbiAgICB9XG5cbiAgICBjb25zdCBNID0gKExzICsgMTYpIC8gMTE2O1xuICAgIGNvbnN0IEwgPSBNICsgYXMgLyA1MDA7XG4gICAgY29uc3QgTiA9IE0gLSBicyAvIDIwMDtcbiAgICBjb25zdCBYID0gY3MuWFcgKiBmbl9nKEwpO1xuICAgIGNvbnN0IFkgPSBjcy5ZVyAqIGZuX2coTSk7XG4gICAgY29uc3QgWiA9IGNzLlpXICogZm5fZyhOKTtcbiAgICBsZXQgciwgZywgYjtcblxuICAgIGlmIChjcy5aVyA8IDEpIHtcbiAgICAgIHIgPSBYICogMy4xMzM5ICsgWSAqIC0xLjYxNyArIFogKiAtMC40OTA2O1xuICAgICAgZyA9IFggKiAtMC45Nzg1ICsgWSAqIDEuOTE2ICsgWiAqIDAuMDMzMztcbiAgICAgIGIgPSBYICogMC4wNzIgKyBZICogLTAuMjI5ICsgWiAqIDEuNDA1NztcbiAgICB9IGVsc2Uge1xuICAgICAgciA9IFggKiAzLjI0MDYgKyBZICogLTEuNTM3MiArIFogKiAtMC40OTg2O1xuICAgICAgZyA9IFggKiAtMC45Njg5ICsgWSAqIDEuODc1OCArIFogKiAwLjA0MTU7XG4gICAgICBiID0gWCAqIDAuMDU1NyArIFkgKiAtMC4yMDQgKyBaICogMS4wNTc7XG4gICAgfVxuXG4gICAgZGVzdFtkZXN0T2Zmc2V0XSA9IE1hdGguc3FydChyKSAqIDI1NTtcbiAgICBkZXN0W2Rlc3RPZmZzZXQgKyAxXSA9IE1hdGguc3FydChnKSAqIDI1NTtcbiAgICBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IE1hdGguc3FydChiKSAqIDI1NTtcbiAgfVxuXG4gIGNsYXNzIExhYkNTIGV4dGVuZHMgQ29sb3JTcGFjZSB7XG4gICAgY29uc3RydWN0b3Iod2hpdGVQb2ludCwgYmxhY2tQb2ludCwgcmFuZ2UpIHtcbiAgICAgIHN1cGVyKFwiTGFiXCIsIDMpO1xuXG4gICAgICBpZiAoIXdoaXRlUG9pbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiV2hpdGVQb2ludCBtaXNzaW5nIC0gcmVxdWlyZWQgZm9yIGNvbG9yIHNwYWNlIExhYlwiKTtcbiAgICAgIH1cblxuICAgICAgYmxhY2tQb2ludCA9IGJsYWNrUG9pbnQgfHwgWzAsIDAsIDBdO1xuICAgICAgcmFuZ2UgPSByYW5nZSB8fCBbLTEwMCwgMTAwLCAtMTAwLCAxMDBdO1xuICAgICAgdGhpcy5YVyA9IHdoaXRlUG9pbnRbMF07XG4gICAgICB0aGlzLllXID0gd2hpdGVQb2ludFsxXTtcbiAgICAgIHRoaXMuWlcgPSB3aGl0ZVBvaW50WzJdO1xuICAgICAgdGhpcy5hbWluID0gcmFuZ2VbMF07XG4gICAgICB0aGlzLmFtYXggPSByYW5nZVsxXTtcbiAgICAgIHRoaXMuYm1pbiA9IHJhbmdlWzJdO1xuICAgICAgdGhpcy5ibWF4ID0gcmFuZ2VbM107XG4gICAgICB0aGlzLlhCID0gYmxhY2tQb2ludFswXTtcbiAgICAgIHRoaXMuWUIgPSBibGFja1BvaW50WzFdO1xuICAgICAgdGhpcy5aQiA9IGJsYWNrUG9pbnRbMl07XG5cbiAgICAgIGlmICh0aGlzLlhXIDwgMCB8fCB0aGlzLlpXIDwgMCB8fCB0aGlzLllXICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzLCBubyBmYWxsYmFjayBhdmFpbGFibGVcIik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLlhCIDwgMCB8fCB0aGlzLllCIDwgMCB8fCB0aGlzLlpCIDwgMCkge1xuICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJJbnZhbGlkIEJsYWNrUG9pbnQsIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0XCIpO1xuICAgICAgICB0aGlzLlhCID0gdGhpcy5ZQiA9IHRoaXMuWkIgPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5hbWluID4gdGhpcy5hbWF4IHx8IHRoaXMuYm1pbiA+IHRoaXMuYm1heCkge1xuICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJJbnZhbGlkIFJhbmdlLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdHNcIik7XG4gICAgICAgIHRoaXMuYW1pbiA9IC0xMDA7XG4gICAgICAgIHRoaXMuYW1heCA9IDEwMDtcbiAgICAgICAgdGhpcy5ibWluID0gLTEwMDtcbiAgICAgICAgdGhpcy5ibWF4ID0gMTAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgIGNvbnZlcnRUb1JnYih0aGlzLCBzcmMsIHNyY09mZnNldCwgZmFsc2UsIGRlc3QsIGRlc3RPZmZzZXQpO1xuICAgIH1cblxuICAgIGdldFJnYkJ1ZmZlcihzcmMsIHNyY09mZnNldCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIGJpdHMsIGFscGhhMDEpIHtcbiAgICAgIGNvbnN0IG1heFZhbCA9ICgxIDw8IGJpdHMpIC0gMTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnZlcnRUb1JnYih0aGlzLCBzcmMsIHNyY09mZnNldCwgbWF4VmFsLCBkZXN0LCBkZXN0T2Zmc2V0KTtcbiAgICAgICAgc3JjT2Zmc2V0ICs9IDM7XG4gICAgICAgIGRlc3RPZmZzZXQgKz0gMyArIGFscGhhMDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBhbHBoYTAxKSB7XG4gICAgICByZXR1cm4gaW5wdXRMZW5ndGggKiAoMyArIGFscGhhMDEpIC8gMyB8IDA7XG4gICAgfVxuXG4gICAgaXNEZWZhdWx0RGVjb2RlKGRlY29kZU1hcCwgYnBjKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXQgdXNlc1plcm9Ub09uZVJhbmdlKCkge1xuICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwidXNlc1plcm9Ub09uZVJhbmdlXCIsIGZhbHNlKTtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBMYWJDUztcbn0oKTtcblxuLyoqKi8gfSksXG4vKiAyNSAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5QYXJ0aWFsRXZhbHVhdG9yID0gZXhwb3J0cy5FdmFsdWF0b3JQcmVwcm9jZXNzb3IgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfY21hcCA9IF9fd19wZGZqc19yZXF1aXJlX18oMjYpO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX2ZvbnRzID0gX193X3BkZmpzX3JlcXVpcmVfXyg0NCk7XG5cbnZhciBfZm9udHNfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE4KTtcblxudmFyIF9lbmNvZGluZ3MgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE5KTtcblxudmFyIF9zdGFuZGFyZF9mb250cyA9IF9fd19wZGZqc19yZXF1aXJlX18oNDcpO1xuXG52YXIgX3VuaWNvZGUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIxKTtcblxudmFyIF9wYXR0ZXJuID0gX193X3BkZmpzX3JlcXVpcmVfXyg1NSk7XG5cbnZhciBfeGZhX2ZvbnRzID0gX193X3BkZmpzX3JlcXVpcmVfXygxMik7XG5cbnZhciBfdG9fdW5pY29kZV9tYXAgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDQ4KTtcblxudmFyIF9mdW5jdGlvbiA9IF9fd19wZGZqc19yZXF1aXJlX18oNTYpO1xuXG52YXIgX3BhcnNlciA9IF9fd19wZGZqc19yZXF1aXJlX18oMjcpO1xuXG52YXIgX2ltYWdlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1OCk7XG5cbnZhciBfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxMCk7XG5cbnZhciBfYmFzZV9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDYpO1xuXG52YXIgX2JpZGkgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDU5KTtcblxudmFyIF9jb2xvcnNwYWNlID0gX193X3BkZmpzX3JlcXVpcmVfXygyNCk7XG5cbnZhciBfZGVjb2RlX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjkpO1xuXG52YXIgX2dseXBobGlzdCA9IF9fd19wZGZqc19yZXF1aXJlX18oMjApO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG52YXIgX21ldHJpY3MgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDYwKTtcblxudmFyIF9tdXJtdXJoYXNoID0gX193X3BkZmpzX3JlcXVpcmVfXyg2MSk7XG5cbnZhciBfb3BlcmF0b3JfbGlzdCA9IF9fd19wZGZqc19yZXF1aXJlX18oNjIpO1xuXG52YXIgX2ltYWdlID0gX193X3BkZmpzX3JlcXVpcmVfXyg2Myk7XG5cbmNvbnN0IERlZmF1bHRQYXJ0aWFsRXZhbHVhdG9yT3B0aW9ucyA9IE9iamVjdC5mcmVlemUoe1xuICBtYXhJbWFnZVNpemU6IC0xLFxuICBkaXNhYmxlRm9udEZhY2U6IGZhbHNlLFxuICBpZ25vcmVFcnJvcnM6IGZhbHNlLFxuICBpc0V2YWxTdXBwb3J0ZWQ6IHRydWUsXG4gIGZvbnRFeHRyYVByb3BlcnRpZXM6IGZhbHNlLFxuICB1c2VTeXN0ZW1Gb250czogdHJ1ZSxcbiAgY01hcFVybDogbnVsbCxcbiAgc3RhbmRhcmRGb250RGF0YVVybDogbnVsbFxufSk7XG5jb25zdCBQYXR0ZXJuVHlwZSA9IHtcbiAgVElMSU5HOiAxLFxuICBTSEFESU5HOiAyXG59O1xuY29uc3QgVEVYVF9DSFVOS19CQVRDSF9TSVpFID0gMTA7XG5jb25zdCBkZWZlcnJlZCA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVCbGVuZE1vZGUodmFsdWUsIHBhcnNpbmdBcnJheSA9IGZhbHNlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHZhbHVlLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNvbnN0IG1heWJlQk0gPSBub3JtYWxpemVCbGVuZE1vZGUodmFsdWVbaV0sIHRydWUpO1xuXG4gICAgICBpZiAobWF5YmVCTSkge1xuICAgICAgICByZXR1cm4gbWF5YmVCTTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAoMCwgX3V0aWwud2FybikoYFVuc3VwcG9ydGVkIGJsZW5kIG1vZGUgQXJyYXk6ICR7dmFsdWV9YCk7XG4gICAgcmV0dXJuIFwic291cmNlLW92ZXJcIjtcbiAgfVxuXG4gIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodmFsdWUpKSB7XG4gICAgaWYgKHBhcnNpbmdBcnJheSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwic291cmNlLW92ZXJcIjtcbiAgfVxuXG4gIHN3aXRjaCAodmFsdWUubmFtZSkge1xuICAgIGNhc2UgXCJOb3JtYWxcIjpcbiAgICBjYXNlIFwiQ29tcGF0aWJsZVwiOlxuICAgICAgcmV0dXJuIFwic291cmNlLW92ZXJcIjtcblxuICAgIGNhc2UgXCJNdWx0aXBseVwiOlxuICAgICAgcmV0dXJuIFwibXVsdGlwbHlcIjtcblxuICAgIGNhc2UgXCJTY3JlZW5cIjpcbiAgICAgIHJldHVybiBcInNjcmVlblwiO1xuXG4gICAgY2FzZSBcIk92ZXJsYXlcIjpcbiAgICAgIHJldHVybiBcIm92ZXJsYXlcIjtcblxuICAgIGNhc2UgXCJEYXJrZW5cIjpcbiAgICAgIHJldHVybiBcImRhcmtlblwiO1xuXG4gICAgY2FzZSBcIkxpZ2h0ZW5cIjpcbiAgICAgIHJldHVybiBcImxpZ2h0ZW5cIjtcblxuICAgIGNhc2UgXCJDb2xvckRvZGdlXCI6XG4gICAgICByZXR1cm4gXCJjb2xvci1kb2RnZVwiO1xuXG4gICAgY2FzZSBcIkNvbG9yQnVyblwiOlxuICAgICAgcmV0dXJuIFwiY29sb3ItYnVyblwiO1xuXG4gICAgY2FzZSBcIkhhcmRMaWdodFwiOlxuICAgICAgcmV0dXJuIFwiaGFyZC1saWdodFwiO1xuXG4gICAgY2FzZSBcIlNvZnRMaWdodFwiOlxuICAgICAgcmV0dXJuIFwic29mdC1saWdodFwiO1xuXG4gICAgY2FzZSBcIkRpZmZlcmVuY2VcIjpcbiAgICAgIHJldHVybiBcImRpZmZlcmVuY2VcIjtcblxuICAgIGNhc2UgXCJFeGNsdXNpb25cIjpcbiAgICAgIHJldHVybiBcImV4Y2x1c2lvblwiO1xuXG4gICAgY2FzZSBcIkh1ZVwiOlxuICAgICAgcmV0dXJuIFwiaHVlXCI7XG5cbiAgICBjYXNlIFwiU2F0dXJhdGlvblwiOlxuICAgICAgcmV0dXJuIFwic2F0dXJhdGlvblwiO1xuXG4gICAgY2FzZSBcIkNvbG9yXCI6XG4gICAgICByZXR1cm4gXCJjb2xvclwiO1xuXG4gICAgY2FzZSBcIkx1bWlub3NpdHlcIjpcbiAgICAgIHJldHVybiBcImx1bWlub3NpdHlcIjtcbiAgfVxuXG4gIGlmIChwYXJzaW5nQXJyYXkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gICgwLCBfdXRpbC53YXJuKShgVW5zdXBwb3J0ZWQgYmxlbmQgbW9kZTogJHt2YWx1ZS5uYW1lfWApO1xuICByZXR1cm4gXCJzb3VyY2Utb3ZlclwiO1xufVxuXG5jbGFzcyBUaW1lU2xvdE1hbmFnZXIge1xuICBzdGF0aWMgZ2V0IFRJTUVfU0xPVF9EVVJBVElPTl9NUygpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJUSU1FX1NMT1RfRFVSQVRJT05fTVNcIiwgMjApO1xuICB9XG5cbiAgc3RhdGljIGdldCBDSEVDS19USU1FX0VWRVJZKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIkNIRUNLX1RJTUVfRVZFUllcIiwgMTAwKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuXG4gIGNoZWNrKCkge1xuICAgIGlmICgrK3RoaXMuY2hlY2tlZCA8IFRpbWVTbG90TWFuYWdlci5DSEVDS19USU1FX0VWRVJZKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5jaGVja2VkID0gMDtcbiAgICByZXR1cm4gdGhpcy5lbmRUaW1lIDw9IERhdGUubm93KCk7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLmVuZFRpbWUgPSBEYXRlLm5vdygpICsgVGltZVNsb3RNYW5hZ2VyLlRJTUVfU0xPVF9EVVJBVElPTl9NUztcbiAgICB0aGlzLmNoZWNrZWQgPSAwO1xuICB9XG5cbn1cblxuY2xhc3MgUGFydGlhbEV2YWx1YXRvciB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICB4cmVmLFxuICAgIGhhbmRsZXIsXG4gICAgcGFnZUluZGV4LFxuICAgIGlkRmFjdG9yeSxcbiAgICBmb250Q2FjaGUsXG4gICAgYnVpbHRJbkNNYXBDYWNoZSxcbiAgICBzdGFuZGFyZEZvbnREYXRhQ2FjaGUsXG4gICAgZ2xvYmFsSW1hZ2VDYWNoZSxcbiAgICBvcHRpb25zID0gbnVsbFxuICB9KSB7XG4gICAgdGhpcy54cmVmID0geHJlZjtcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyO1xuICAgIHRoaXMucGFnZUluZGV4ID0gcGFnZUluZGV4O1xuICAgIHRoaXMuaWRGYWN0b3J5ID0gaWRGYWN0b3J5O1xuICAgIHRoaXMuZm9udENhY2hlID0gZm9udENhY2hlO1xuICAgIHRoaXMuYnVpbHRJbkNNYXBDYWNoZSA9IGJ1aWx0SW5DTWFwQ2FjaGU7XG4gICAgdGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUgPSBzdGFuZGFyZEZvbnREYXRhQ2FjaGU7XG4gICAgdGhpcy5nbG9iYWxJbWFnZUNhY2hlID0gZ2xvYmFsSW1hZ2VDYWNoZTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IERlZmF1bHRQYXJ0aWFsRXZhbHVhdG9yT3B0aW9ucztcbiAgICB0aGlzLnBhcnNpbmdUeXBlM0ZvbnQgPSBmYWxzZTtcbiAgICB0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQgPSB0aGlzLmZldGNoQnVpbHRJbkNNYXAuYmluZCh0aGlzKTtcbiAgfVxuXG4gIGdldCBfcGRmRnVuY3Rpb25GYWN0b3J5KCkge1xuICAgIGNvbnN0IHBkZkZ1bmN0aW9uRmFjdG9yeSA9IG5ldyBfZnVuY3Rpb24uUERGRnVuY3Rpb25GYWN0b3J5KHtcbiAgICAgIHhyZWY6IHRoaXMueHJlZixcbiAgICAgIGlzRXZhbFN1cHBvcnRlZDogdGhpcy5vcHRpb25zLmlzRXZhbFN1cHBvcnRlZFxuICAgIH0pO1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIl9wZGZGdW5jdGlvbkZhY3RvcnlcIiwgcGRmRnVuY3Rpb25GYWN0b3J5KTtcbiAgfVxuXG4gIGNsb25lKG5ld09wdGlvbnMgPSBudWxsKSB7XG4gICAgY29uc3QgbmV3RXZhbHVhdG9yID0gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICBuZXdFdmFsdWF0b3Iub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwgdGhpcy5vcHRpb25zLCBuZXdPcHRpb25zKTtcbiAgICByZXR1cm4gbmV3RXZhbHVhdG9yO1xuICB9XG5cbiAgaGFzQmxlbmRNb2RlcyhyZXNvdXJjZXMsIG5vbkJsZW5kTW9kZXNTZXQpIHtcbiAgICBpZiAoIShyZXNvdXJjZXMgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChyZXNvdXJjZXMub2JqSWQgJiYgbm9uQmxlbmRNb2Rlc1NldC5oYXMocmVzb3VyY2VzLm9iaklkKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2Nlc3NlZCA9IG5ldyBfcHJpbWl0aXZlcy5SZWZTZXQobm9uQmxlbmRNb2Rlc1NldCk7XG5cbiAgICBpZiAocmVzb3VyY2VzLm9iaklkKSB7XG4gICAgICBwcm9jZXNzZWQucHV0KHJlc291cmNlcy5vYmpJZCk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZXMgPSBbcmVzb3VyY2VzXSxcbiAgICAgICAgICB4cmVmID0gdGhpcy54cmVmO1xuXG4gICAgd2hpbGUgKG5vZGVzLmxlbmd0aCkge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzLnNoaWZ0KCk7XG4gICAgICBjb25zdCBncmFwaGljU3RhdGVzID0gbm9kZS5nZXQoXCJFeHRHU3RhdGVcIik7XG5cbiAgICAgIGlmIChncmFwaGljU3RhdGVzIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkge1xuICAgICAgICBmb3IgKGxldCBncmFwaGljU3RhdGUgb2YgZ3JhcGhpY1N0YXRlcy5nZXRSYXdWYWx1ZXMoKSkge1xuICAgICAgICAgIGlmIChncmFwaGljU3RhdGUgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzZWQuaGFzKGdyYXBoaWNTdGF0ZSkpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGdyYXBoaWNTdGF0ZSA9IHhyZWYuZmV0Y2goZ3JhcGhpY1N0YXRlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgIHByb2Nlc3NlZC5wdXQoZ3JhcGhpY1N0YXRlKTtcbiAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKGBoYXNCbGVuZE1vZGVzIC0gaWdub3JpbmcgRXh0R1N0YXRlOiBcIiR7ZXh9XCIuYCk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghKGdyYXBoaWNTdGF0ZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZ3JhcGhpY1N0YXRlLm9iaklkKSB7XG4gICAgICAgICAgICBwcm9jZXNzZWQucHV0KGdyYXBoaWNTdGF0ZS5vYmpJZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYm0gPSBncmFwaGljU3RhdGUuZ2V0KFwiQk1cIik7XG5cbiAgICAgICAgICBpZiAoYm0gaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5OYW1lKSB7XG4gICAgICAgICAgICBpZiAoYm0ubmFtZSAhPT0gXCJOb3JtYWxcIikge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGJtICE9PSB1bmRlZmluZWQgJiYgQXJyYXkuaXNBcnJheShibSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBibSkge1xuICAgICAgICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLk5hbWUgJiYgZWxlbWVudC5uYW1lICE9PSBcIk5vcm1hbFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgeE9iamVjdHMgPSBub2RlLmdldChcIlhPYmplY3RcIik7XG5cbiAgICAgIGlmICghKHhPYmplY3RzIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IHhPYmplY3Qgb2YgeE9iamVjdHMuZ2V0UmF3VmFsdWVzKCkpIHtcbiAgICAgICAgaWYgKHhPYmplY3QgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgICAgICBpZiAocHJvY2Vzc2VkLmhhcyh4T2JqZWN0KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHhPYmplY3QgPSB4cmVmLmZldGNoKHhPYmplY3QpO1xuICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICBwcm9jZXNzZWQucHV0KHhPYmplY3QpO1xuICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKGBoYXNCbGVuZE1vZGVzIC0gaWdub3JpbmcgWE9iamVjdDogXCIke2V4fVwiLmApO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKHhPYmplY3QpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoeE9iamVjdC5kaWN0Lm9iaklkKSB7XG4gICAgICAgICAgcHJvY2Vzc2VkLnB1dCh4T2JqZWN0LmRpY3Qub2JqSWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeFJlc291cmNlcyA9IHhPYmplY3QuZGljdC5nZXQoXCJSZXNvdXJjZXNcIik7XG5cbiAgICAgICAgaWYgKCEoeFJlc291cmNlcyBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoeFJlc291cmNlcy5vYmpJZCAmJiBwcm9jZXNzZWQuaGFzKHhSZXNvdXJjZXMub2JqSWQpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBub2Rlcy5wdXNoKHhSZXNvdXJjZXMpO1xuXG4gICAgICAgIGlmICh4UmVzb3VyY2VzLm9iaklkKSB7XG4gICAgICAgICAgcHJvY2Vzc2VkLnB1dCh4UmVzb3VyY2VzLm9iaklkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHByb2Nlc3NlZC5mb3JFYWNoKHJlZiA9PiB7XG4gICAgICBub25CbGVuZE1vZGVzU2V0LnB1dChyZWYpO1xuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoQnVpbHRJbkNNYXAobmFtZSkge1xuICAgIGNvbnN0IGNhY2hlZERhdGEgPSB0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUuZ2V0KG5hbWUpO1xuXG4gICAgaWYgKGNhY2hlZERhdGEpIHtcbiAgICAgIHJldHVybiBjYWNoZWREYXRhO1xuICAgIH1cblxuICAgIGxldCBkYXRhO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jTWFwVXJsICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9wdGlvbnMuY01hcFVybH0ke25hbWV9LmJjbWFwYDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKTtcblxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGZldGNoQnVpbHRJbkNNYXA6IGZhaWxlZCB0byBmZXRjaCBmaWxlIFwiJHt1cmx9XCIgd2l0aCBcIiR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1cIi5gKTtcbiAgICAgIH1cblxuICAgICAgZGF0YSA9IHtcbiAgICAgICAgY01hcERhdGE6IG5ldyBVaW50OEFycmF5KGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpLFxuICAgICAgICBjb21wcmVzc2lvblR5cGU6IF91dGlsLkNNYXBDb21wcmVzc2lvblR5cGUuQklOQVJZXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhID0gYXdhaXQgdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkZldGNoQnVpbHRJbkNNYXBcIiwge1xuICAgICAgICBuYW1lXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5jb21wcmVzc2lvblR5cGUgIT09IF91dGlsLkNNYXBDb21wcmVzc2lvblR5cGUuTk9ORSkge1xuICAgICAgdGhpcy5idWlsdEluQ01hcENhY2hlLnNldChuYW1lLCBkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoU3RhbmRhcmRGb250RGF0YShuYW1lKSB7XG4gICAgY29uc3QgY2FjaGVkRGF0YSA9IHRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLmdldChuYW1lKTtcblxuICAgIGlmIChjYWNoZWREYXRhKSB7XG4gICAgICByZXR1cm4gbmV3IF9zdHJlYW0uU3RyZWFtKGNhY2hlZERhdGEpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMudXNlU3lzdGVtRm9udHMgJiYgbmFtZSAhPT0gXCJTeW1ib2xcIiAmJiBuYW1lICE9PSBcIlphcGZEaW5nYmF0c1wiKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFuZGFyZEZvbnROYW1lVG9GaWxlTmFtZSA9ICgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0Rm9udE5hbWVUb0ZpbGVNYXApKCksXG4gICAgICAgICAgZmlsZW5hbWUgPSBzdGFuZGFyZEZvbnROYW1lVG9GaWxlTmFtZVtuYW1lXTtcbiAgICBsZXQgZGF0YTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc3RhbmRhcmRGb250RGF0YVVybCAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmx9JHtmaWxlbmFtZX1gO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgZmV0Y2hTdGFuZGFyZEZvbnREYXRhOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSBcIiR7dXJsfVwiIHdpdGggXCIke3Jlc3BvbnNlLnN0YXR1c1RleHR9XCIuYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhID0gYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IHRoaXMuaGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJGZXRjaFN0YW5kYXJkRm9udERhdGFcIiwge1xuICAgICAgICAgIGZpbGVuYW1lXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYGZldGNoU3RhbmRhcmRGb250RGF0YTogZmFpbGVkIHRvIGZldGNoIGZpbGUgXCIke2ZpbGVuYW1lfVwiIHdpdGggXCIke2V9XCIuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5zZXQobmFtZSwgZGF0YSk7XG4gICAgcmV0dXJuIG5ldyBfc3RyZWFtLlN0cmVhbShkYXRhKTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkRm9ybVhPYmplY3QocmVzb3VyY2VzLCB4b2JqLCBzbWFzaywgb3BlcmF0b3JMaXN0LCB0YXNrLCBpbml0aWFsU3RhdGUsIGxvY2FsQ29sb3JTcGFjZUNhY2hlKSB7XG4gICAgY29uc3QgZGljdCA9IHhvYmouZGljdDtcbiAgICBjb25zdCBtYXRyaXggPSBkaWN0LmdldEFycmF5KFwiTWF0cml4XCIpO1xuICAgIGxldCBiYm94ID0gZGljdC5nZXRBcnJheShcIkJCb3hcIik7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShiYm94KSAmJiBiYm94Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgYmJveCA9IF91dGlsLlV0aWwubm9ybWFsaXplUmVjdChiYm94KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmJveCA9IG51bGw7XG4gICAgfVxuXG4gICAgbGV0IG9wdGlvbmFsQ29udGVudCwgZ3JvdXBPcHRpb25zO1xuXG4gICAgaWYgKGRpY3QuaGFzKFwiT0NcIikpIHtcbiAgICAgIG9wdGlvbmFsQ29udGVudCA9IGF3YWl0IHRoaXMucGFyc2VNYXJrZWRDb250ZW50UHJvcHMoZGljdC5nZXQoXCJPQ1wiKSwgcmVzb3VyY2VzKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9uYWxDb250ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHMsIFtcIk9DXCIsIG9wdGlvbmFsQ29udGVudF0pO1xuICAgIH1cblxuICAgIGNvbnN0IGdyb3VwID0gZGljdC5nZXQoXCJHcm91cFwiKTtcblxuICAgIGlmIChncm91cCkge1xuICAgICAgZ3JvdXBPcHRpb25zID0ge1xuICAgICAgICBtYXRyaXgsXG4gICAgICAgIGJib3gsXG4gICAgICAgIHNtYXNrLFxuICAgICAgICBpc29sYXRlZDogZmFsc2UsXG4gICAgICAgIGtub2Nrb3V0OiBmYWxzZVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGdyb3VwU3VidHlwZSA9IGdyb3VwLmdldChcIlNcIik7XG4gICAgICBsZXQgY29sb3JTcGFjZSA9IG51bGw7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShncm91cFN1YnR5cGUsIFwiVHJhbnNwYXJlbmN5XCIpKSB7XG4gICAgICAgIGdyb3VwT3B0aW9ucy5pc29sYXRlZCA9IGdyb3VwLmdldChcIklcIikgfHwgZmFsc2U7XG4gICAgICAgIGdyb3VwT3B0aW9ucy5rbm9ja291dCA9IGdyb3VwLmdldChcIktcIikgfHwgZmFsc2U7XG5cbiAgICAgICAgaWYgKGdyb3VwLmhhcyhcIkNTXCIpKSB7XG4gICAgICAgICAgY29uc3QgY3MgPSBncm91cC5nZXRSYXcoXCJDU1wiKTtcblxuICAgICAgICAgIGNvbnN0IGNhY2hlZENvbG9yU3BhY2UgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLmdldENhY2hlZChjcywgdGhpcy54cmVmLCBsb2NhbENvbG9yU3BhY2VDYWNoZSk7XG5cbiAgICAgICAgICBpZiAoY2FjaGVkQ29sb3JTcGFjZSkge1xuICAgICAgICAgICAgY29sb3JTcGFjZSA9IGNhY2hlZENvbG9yU3BhY2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbG9yU3BhY2UgPSBhd2FpdCB0aGlzLnBhcnNlQ29sb3JTcGFjZSh7XG4gICAgICAgICAgICAgIGNzLFxuICAgICAgICAgICAgICByZXNvdXJjZXMsXG4gICAgICAgICAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHNtYXNrICYmIHNtYXNrLmJhY2tkcm9wKSB7XG4gICAgICAgIGNvbG9yU3BhY2UgPSBjb2xvclNwYWNlIHx8IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2I7XG4gICAgICAgIHNtYXNrLmJhY2tkcm9wID0gY29sb3JTcGFjZS5nZXRSZ2Ioc21hc2suYmFja2Ryb3AsIDApO1xuICAgICAgfVxuXG4gICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLmJlZ2luR3JvdXAsIFtncm91cE9wdGlvbnNdKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcmdzID0gZ3JvdXAgPyBbbWF0cml4LCBudWxsXSA6IFttYXRyaXgsIGJib3hdO1xuICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMucGFpbnRGb3JtWE9iamVjdEJlZ2luLCBhcmdzKTtcbiAgICByZXR1cm4gdGhpcy5nZXRPcGVyYXRvckxpc3Qoe1xuICAgICAgc3RyZWFtOiB4b2JqLFxuICAgICAgdGFzayxcbiAgICAgIHJlc291cmNlczogZGljdC5nZXQoXCJSZXNvdXJjZXNcIikgfHwgcmVzb3VyY2VzLFxuICAgICAgb3BlcmF0b3JMaXN0LFxuICAgICAgaW5pdGlhbFN0YXRlXG4gICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnBhaW50Rm9ybVhPYmplY3RFbmQsIFtdKTtcblxuICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuZW5kR3JvdXAsIFtncm91cE9wdGlvbnNdKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbmFsQ29udGVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuZW5kTWFya2VkQ29udGVudCwgW10pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgX3NlbmRJbWdEYXRhKG9iaklkLCBpbWdEYXRhLCBjYWNoZUdsb2JhbGx5ID0gZmFsc2UpIHtcbiAgICBjb25zdCB0cmFuc2ZlcnMgPSBpbWdEYXRhID8gW2ltZ0RhdGEuZGF0YS5idWZmZXJdIDogbnVsbDtcblxuICAgIGlmICh0aGlzLnBhcnNpbmdUeXBlM0ZvbnQgfHwgY2FjaGVHbG9iYWxseSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5zZW5kKFwiY29tbW9ub2JqXCIsIFtvYmpJZCwgXCJJbWFnZVwiLCBpbWdEYXRhXSwgdHJhbnNmZXJzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLnNlbmQoXCJvYmpcIiwgW29iaklkLCB0aGlzLnBhZ2VJbmRleCwgXCJJbWFnZVwiLCBpbWdEYXRhXSwgdHJhbnNmZXJzKTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkUGFpbnRJbWFnZVhPYmplY3Qoe1xuICAgIHJlc291cmNlcyxcbiAgICBpbWFnZSxcbiAgICBpc0lubGluZSA9IGZhbHNlLFxuICAgIG9wZXJhdG9yTGlzdCxcbiAgICBjYWNoZUtleSxcbiAgICBsb2NhbEltYWdlQ2FjaGUsXG4gICAgbG9jYWxDb2xvclNwYWNlQ2FjaGVcbiAgfSkge1xuICAgIGNvbnN0IGRpY3QgPSBpbWFnZS5kaWN0O1xuICAgIGNvbnN0IGltYWdlUmVmID0gZGljdC5vYmpJZDtcbiAgICBjb25zdCB3ID0gZGljdC5nZXQoXCJXXCIsIFwiV2lkdGhcIik7XG4gICAgY29uc3QgaCA9IGRpY3QuZ2V0KFwiSFwiLCBcIkhlaWdodFwiKTtcblxuICAgIGlmICghKHcgJiYgKDAsIF91dGlsLmlzTnVtKSh3KSkgfHwgIShoICYmICgwLCBfdXRpbC5pc051bSkoaCkpKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJJbWFnZSBkaW1lbnNpb25zIGFyZSBtaXNzaW5nLCBvciBub3QgbnVtYmVycy5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWF4SW1hZ2VTaXplID0gdGhpcy5vcHRpb25zLm1heEltYWdlU2l6ZTtcblxuICAgIGlmIChtYXhJbWFnZVNpemUgIT09IC0xICYmIHcgKiBoID4gbWF4SW1hZ2VTaXplKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJJbWFnZSBleGNlZWRlZCBtYXhpbXVtIGFsbG93ZWQgc2l6ZSBhbmQgd2FzIHJlbW92ZWQuXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBvcHRpb25hbENvbnRlbnQ7XG5cbiAgICBpZiAoZGljdC5oYXMoXCJPQ1wiKSkge1xuICAgICAgb3B0aW9uYWxDb250ZW50ID0gYXdhaXQgdGhpcy5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyhkaWN0LmdldChcIk9DXCIpLCByZXNvdXJjZXMpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25hbENvbnRlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcywgW1wiT0NcIiwgb3B0aW9uYWxDb250ZW50XSk7XG4gICAgfVxuXG4gICAgY29uc3QgaW1hZ2VNYXNrID0gZGljdC5nZXQoXCJJTVwiLCBcIkltYWdlTWFza1wiKSB8fCBmYWxzZTtcbiAgICBjb25zdCBpbnRlcnBvbGF0ZSA9IGRpY3QuZ2V0KFwiSVwiLCBcIkludGVycG9sYXRlXCIpO1xuICAgIGxldCBpbWdEYXRhLCBhcmdzO1xuXG4gICAgaWYgKGltYWdlTWFzaykge1xuICAgICAgY29uc3QgYml0U3RyaWRlTGVuZ3RoID0gdyArIDcgPj4gMztcbiAgICAgIGNvbnN0IGltZ0FycmF5ID0gaW1hZ2UuZ2V0Qnl0ZXMoYml0U3RyaWRlTGVuZ3RoICogaCwgdHJ1ZSk7XG4gICAgICBjb25zdCBkZWNvZGUgPSBkaWN0LmdldEFycmF5KFwiRFwiLCBcIkRlY29kZVwiKTtcbiAgICAgIGltZ0RhdGEgPSBfaW1hZ2UuUERGSW1hZ2UuY3JlYXRlTWFzayh7XG4gICAgICAgIGltZ0FycmF5LFxuICAgICAgICB3aWR0aDogdyxcbiAgICAgICAgaGVpZ2h0OiBoLFxuICAgICAgICBpbWFnZUlzRnJvbURlY29kZVN0cmVhbTogaW1hZ2UgaW5zdGFuY2VvZiBfZGVjb2RlX3N0cmVhbS5EZWNvZGVTdHJlYW0sXG4gICAgICAgIGludmVyc2VEZWNvZGU6ICEhZGVjb2RlICYmIGRlY29kZVswXSA+IDAsXG4gICAgICAgIGludGVycG9sYXRlXG4gICAgICB9KTtcbiAgICAgIGltZ0RhdGEuY2FjaGVkID0gISFjYWNoZUtleTtcbiAgICAgIGFyZ3MgPSBbaW1nRGF0YV07XG4gICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCwgYXJncyk7XG5cbiAgICAgIGlmIChjYWNoZUtleSkge1xuICAgICAgICBsb2NhbEltYWdlQ2FjaGUuc2V0KGNhY2hlS2V5LCBpbWFnZVJlZiwge1xuICAgICAgICAgIGZuOiBfdXRpbC5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LFxuICAgICAgICAgIGFyZ3NcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25hbENvbnRlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLmVuZE1hcmtlZENvbnRlbnQsIFtdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNvZnRNYXNrID0gZGljdC5nZXQoXCJTTVwiLCBcIlNNYXNrXCIpIHx8IGZhbHNlO1xuICAgIGNvbnN0IG1hc2sgPSBkaWN0LmdldChcIk1hc2tcIikgfHwgZmFsc2U7XG4gICAgY29uc3QgU01BTExfSU1BR0VfRElNRU5TSU9OUyA9IDIwMDtcblxuICAgIGlmIChpc0lubGluZSAmJiAhc29mdE1hc2sgJiYgIW1hc2sgJiYgdyArIGggPCBTTUFMTF9JTUFHRV9ESU1FTlNJT05TKSB7XG4gICAgICBjb25zdCBpbWFnZU9iaiA9IG5ldyBfaW1hZ2UuUERGSW1hZ2Uoe1xuICAgICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICAgIHJlczogcmVzb3VyY2VzLFxuICAgICAgICBpbWFnZSxcbiAgICAgICAgaXNJbmxpbmUsXG4gICAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeTogdGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LFxuICAgICAgICBsb2NhbENvbG9yU3BhY2VDYWNoZVxuICAgICAgfSk7XG4gICAgICBpbWdEYXRhID0gaW1hZ2VPYmouY3JlYXRlSW1hZ2VEYXRhKHRydWUpO1xuICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdCwgW2ltZ0RhdGFdKTtcblxuICAgICAgaWYgKG9wdGlvbmFsQ29udGVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuZW5kTWFya2VkQ29udGVudCwgW10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG9iaklkID0gYGltZ18ke3RoaXMuaWRGYWN0b3J5LmNyZWF0ZU9iaklkKCl9YCxcbiAgICAgICAgY2FjaGVHbG9iYWxseSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMucGFyc2luZ1R5cGUzRm9udCkge1xuICAgICAgb2JqSWQgPSBgJHt0aGlzLmlkRmFjdG9yeS5nZXREb2NJZCgpfV90eXBlM18ke29iaklkfWA7XG4gICAgfSBlbHNlIGlmIChpbWFnZVJlZikge1xuICAgICAgY2FjaGVHbG9iYWxseSA9IHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5zaG91bGRDYWNoZShpbWFnZVJlZiwgdGhpcy5wYWdlSW5kZXgpO1xuXG4gICAgICBpZiAoY2FjaGVHbG9iYWxseSkge1xuICAgICAgICBvYmpJZCA9IGAke3RoaXMuaWRGYWN0b3J5LmdldERvY0lkKCl9XyR7b2JqSWR9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvcGVyYXRvckxpc3QuYWRkRGVwZW5kZW5jeShvYmpJZCk7XG4gICAgYXJncyA9IFtvYmpJZCwgdywgaF07XG5cbiAgICBfaW1hZ2UuUERGSW1hZ2UuYnVpbGRJbWFnZSh7XG4gICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICByZXM6IHJlc291cmNlcyxcbiAgICAgIGltYWdlLFxuICAgICAgaXNJbmxpbmUsXG4gICAgICBwZGZGdW5jdGlvbkZhY3Rvcnk6IHRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeSxcbiAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlXG4gICAgfSkudGhlbihpbWFnZU9iaiA9PiB7XG4gICAgICBpbWdEYXRhID0gaW1hZ2VPYmouY3JlYXRlSW1hZ2VEYXRhKGZhbHNlKTtcblxuICAgICAgaWYgKGNhY2hlS2V5ICYmIGltYWdlUmVmICYmIGNhY2hlR2xvYmFsbHkpIHtcbiAgICAgICAgdGhpcy5nbG9iYWxJbWFnZUNhY2hlLmFkZEJ5dGVTaXplKGltYWdlUmVmLCBpbWdEYXRhLmRhdGEubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX3NlbmRJbWdEYXRhKG9iaklkLCBpbWdEYXRhLCBjYWNoZUdsb2JhbGx5KTtcbiAgICB9KS5jYXRjaChyZWFzb24gPT4ge1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBVbmFibGUgdG8gZGVjb2RlIGltYWdlIFwiJHtvYmpJZH1cIjogXCIke3JlYXNvbn1cIi5gKTtcbiAgICAgIHJldHVybiB0aGlzLl9zZW5kSW1nRGF0YShvYmpJZCwgbnVsbCwgY2FjaGVHbG9iYWxseSk7XG4gICAgfSk7XG5cbiAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnBhaW50SW1hZ2VYT2JqZWN0LCBhcmdzKTtcblxuICAgIGlmIChjYWNoZUtleSkge1xuICAgICAgbG9jYWxJbWFnZUNhY2hlLnNldChjYWNoZUtleSwgaW1hZ2VSZWYsIHtcbiAgICAgICAgZm46IF91dGlsLk9QUy5wYWludEltYWdlWE9iamVjdCxcbiAgICAgICAgYXJnc1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChpbWFnZVJlZikge1xuICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSghaXNJbmxpbmUsIFwiQ2Fubm90IGNhY2hlIGFuIGlubGluZSBpbWFnZSBnbG9iYWxseS5cIik7XG4gICAgICAgIHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5hZGRQYWdlSW5kZXgoaW1hZ2VSZWYsIHRoaXMucGFnZUluZGV4KTtcblxuICAgICAgICBpZiAoY2FjaGVHbG9iYWxseSkge1xuICAgICAgICAgIHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5zZXREYXRhKGltYWdlUmVmLCB7XG4gICAgICAgICAgICBvYmpJZCxcbiAgICAgICAgICAgIGZuOiBfdXRpbC5PUFMucGFpbnRJbWFnZVhPYmplY3QsXG4gICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgYnl0ZVNpemU6IDBcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcHRpb25hbENvbnRlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5lbmRNYXJrZWRDb250ZW50LCBbXSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlU01hc2soc21hc2ssIHJlc291cmNlcywgb3BlcmF0b3JMaXN0LCB0YXNrLCBzdGF0ZU1hbmFnZXIsIGxvY2FsQ29sb3JTcGFjZUNhY2hlKSB7XG4gICAgY29uc3Qgc21hc2tDb250ZW50ID0gc21hc2suZ2V0KFwiR1wiKTtcbiAgICBjb25zdCBzbWFza09wdGlvbnMgPSB7XG4gICAgICBzdWJ0eXBlOiBzbWFzay5nZXQoXCJTXCIpLm5hbWUsXG4gICAgICBiYWNrZHJvcDogc21hc2suZ2V0KFwiQkNcIilcbiAgICB9O1xuICAgIGNvbnN0IHRyYW5zZmVyT2JqID0gc21hc2suZ2V0KFwiVFJcIik7XG5cbiAgICBpZiAoKDAsIF9mdW5jdGlvbi5pc1BERkZ1bmN0aW9uKSh0cmFuc2Zlck9iaikpIHtcbiAgICAgIGNvbnN0IHRyYW5zZmVyRm4gPSB0aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKHRyYW5zZmVyT2JqKTtcblxuICAgICAgY29uc3QgdHJhbnNmZXJNYXAgPSBuZXcgVWludDhBcnJheSgyNTYpO1xuICAgICAgY29uc3QgdG1wID0gbmV3IEZsb2F0MzJBcnJheSgxKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICB0bXBbMF0gPSBpIC8gMjU1O1xuICAgICAgICB0cmFuc2ZlckZuKHRtcCwgMCwgdG1wLCAwKTtcbiAgICAgICAgdHJhbnNmZXJNYXBbaV0gPSB0bXBbMF0gKiAyNTUgfCAwO1xuICAgICAgfVxuXG4gICAgICBzbWFza09wdGlvbnMudHJhbnNmZXJNYXAgPSB0cmFuc2Zlck1hcDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5idWlsZEZvcm1YT2JqZWN0KHJlc291cmNlcywgc21hc2tDb250ZW50LCBzbWFza09wdGlvbnMsIG9wZXJhdG9yTGlzdCwgdGFzaywgc3RhdGVNYW5hZ2VyLnN0YXRlLmNsb25lKCksIGxvY2FsQ29sb3JTcGFjZUNhY2hlKTtcbiAgfVxuXG4gIGhhbmRsZVRyYW5zZmVyRnVuY3Rpb24odHIpIHtcbiAgICBsZXQgdHJhbnNmZXJBcnJheTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHRyKSkge1xuICAgICAgdHJhbnNmZXJBcnJheSA9IHRyO1xuICAgIH0gZWxzZSBpZiAoKDAsIF9mdW5jdGlvbi5pc1BERkZ1bmN0aW9uKSh0cikpIHtcbiAgICAgIHRyYW5zZmVyQXJyYXkgPSBbdHJdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2Zlck1hcHMgPSBbXTtcbiAgICBsZXQgbnVtRm5zID0gMCxcbiAgICAgICAgbnVtRWZmZWN0ZnVsRm5zID0gMDtcblxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdHJhbnNmZXJBcnJheSkge1xuICAgICAgY29uc3QgdHJhbnNmZXJPYmogPSB0aGlzLnhyZWYuZmV0Y2hJZlJlZihlbnRyeSk7XG4gICAgICBudW1GbnMrKztcblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHRyYW5zZmVyT2JqLCBcIklkZW50aXR5XCIpKSB7XG4gICAgICAgIHRyYW5zZmVyTWFwcy5wdXNoKG51bGwpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAoISgwLCBfZnVuY3Rpb24uaXNQREZGdW5jdGlvbikodHJhbnNmZXJPYmopKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0cmFuc2ZlckZuID0gdGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LmNyZWF0ZSh0cmFuc2Zlck9iaik7XG5cbiAgICAgIGNvbnN0IHRyYW5zZmVyTWFwID0gbmV3IFVpbnQ4QXJyYXkoMjU2KSxcbiAgICAgICAgICAgIHRtcCA9IG5ldyBGbG9hdDMyQXJyYXkoMSk7XG5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMjU2OyBqKyspIHtcbiAgICAgICAgdG1wWzBdID0gaiAvIDI1NTtcbiAgICAgICAgdHJhbnNmZXJGbih0bXAsIDAsIHRtcCwgMCk7XG4gICAgICAgIHRyYW5zZmVyTWFwW2pdID0gdG1wWzBdICogMjU1IHwgMDtcbiAgICAgIH1cblxuICAgICAgdHJhbnNmZXJNYXBzLnB1c2godHJhbnNmZXJNYXApO1xuICAgICAgbnVtRWZmZWN0ZnVsRm5zKys7XG4gICAgfVxuXG4gICAgaWYgKCEobnVtRm5zID09PSAxIHx8IG51bUZucyA9PT0gNCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChudW1FZmZlY3RmdWxGbnMgPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0cmFuc2Zlck1hcHM7XG4gIH1cblxuICBoYW5kbGVUaWxpbmdUeXBlKGZuLCBjb2xvciwgcmVzb3VyY2VzLCBwYXR0ZXJuLCBwYXR0ZXJuRGljdCwgb3BlcmF0b3JMaXN0LCB0YXNrLCBsb2NhbFRpbGluZ1BhdHRlcm5DYWNoZSkge1xuICAgIGNvbnN0IHRpbGluZ09wTGlzdCA9IG5ldyBfb3BlcmF0b3JfbGlzdC5PcGVyYXRvckxpc3QoKTtcblxuICAgIGNvbnN0IHBhdHRlcm5SZXNvdXJjZXMgPSBfcHJpbWl0aXZlcy5EaWN0Lm1lcmdlKHtcbiAgICAgIHhyZWY6IHRoaXMueHJlZixcbiAgICAgIGRpY3RBcnJheTogW3BhdHRlcm5EaWN0LmdldChcIlJlc291cmNlc1wiKSwgcmVzb3VyY2VzXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHtcbiAgICAgIHN0cmVhbTogcGF0dGVybixcbiAgICAgIHRhc2ssXG4gICAgICByZXNvdXJjZXM6IHBhdHRlcm5SZXNvdXJjZXMsXG4gICAgICBvcGVyYXRvckxpc3Q6IHRpbGluZ09wTGlzdFxuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgb3BlcmF0b3JMaXN0SVIgPSB0aWxpbmdPcExpc3QuZ2V0SVIoKTtcbiAgICAgIGNvbnN0IHRpbGluZ1BhdHRlcm5JUiA9ICgwLCBfcGF0dGVybi5nZXRUaWxpbmdQYXR0ZXJuSVIpKG9wZXJhdG9yTGlzdElSLCBwYXR0ZXJuRGljdCwgY29sb3IpO1xuICAgICAgb3BlcmF0b3JMaXN0LmFkZERlcGVuZGVuY2llcyh0aWxpbmdPcExpc3QuZGVwZW5kZW5jaWVzKTtcbiAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChmbiwgdGlsaW5nUGF0dGVybklSKTtcblxuICAgICAgaWYgKHBhdHRlcm5EaWN0Lm9iaklkKSB7XG4gICAgICAgIGxvY2FsVGlsaW5nUGF0dGVybkNhY2hlLnNldChudWxsLCBwYXR0ZXJuRGljdC5vYmpJZCwge1xuICAgICAgICAgIG9wZXJhdG9yTGlzdElSLFxuICAgICAgICAgIGRpY3Q6IHBhdHRlcm5EaWN0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKHJlYXNvbiA9PiB7XG4gICAgICBpZiAocmVhc29uIGluc3RhbmNlb2YgX3V0aWwuQWJvcnRFeGNlcHRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycykge1xuICAgICAgICB0aGlzLmhhbmRsZXIuc2VuZChcIlVuc3VwcG9ydGVkRmVhdHVyZVwiLCB7XG4gICAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvclRpbGluZ1BhdHRlcm5cbiAgICAgICAgfSk7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgaGFuZGxlVGlsaW5nVHlwZSAtIGlnbm9yaW5nIHBhdHRlcm46IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgcmVhc29uO1xuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU2V0Rm9udChyZXNvdXJjZXMsIGZvbnRBcmdzLCBmb250UmVmLCBvcGVyYXRvckxpc3QsIHRhc2ssIHN0YXRlLCBmYWxsYmFja0ZvbnREaWN0ID0gbnVsbCwgY3NzRm9udEluZm8gPSBudWxsKSB7XG4gICAgY29uc3QgZm9udE5hbWUgPSBmb250QXJncyAmJiBmb250QXJnc1swXSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLk5hbWUgPyBmb250QXJnc1swXS5uYW1lIDogbnVsbDtcbiAgICByZXR1cm4gdGhpcy5sb2FkRm9udChmb250TmFtZSwgZm9udFJlZiwgcmVzb3VyY2VzLCBmYWxsYmFja0ZvbnREaWN0LCBjc3NGb250SW5mbykudGhlbih0cmFuc2xhdGVkID0+IHtcbiAgICAgIGlmICghdHJhbnNsYXRlZC5mb250LmlzVHlwZTNGb250KSB7XG4gICAgICAgIHJldHVybiB0cmFuc2xhdGVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJhbnNsYXRlZC5sb2FkVHlwZTNEYXRhKHRoaXMsIHJlc291cmNlcywgdGFzaykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9wZXJhdG9yTGlzdC5hZGREZXBlbmRlbmNpZXModHJhbnNsYXRlZC50eXBlM0RlcGVuZGVuY2llcyk7XG4gICAgICAgIHJldHVybiB0cmFuc2xhdGVkO1xuICAgICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVyLnNlbmQoXCJVbnN1cHBvcnRlZEZlYXR1cmVcIiwge1xuICAgICAgICAgIGZlYXR1cmVJZDogX3V0aWwuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JGb250TG9hZFR5cGUzXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0ZWRGb250KHtcbiAgICAgICAgICBsb2FkZWROYW1lOiBcImdfZm9udF9lcnJvclwiLFxuICAgICAgICAgIGZvbnQ6IG5ldyBfZm9udHMuRXJyb3JGb250KGBUeXBlMyBmb250IGxvYWQgZXJyb3I6ICR7cmVhc29ufWApLFxuICAgICAgICAgIGRpY3Q6IHRyYW5zbGF0ZWQuZm9udCxcbiAgICAgICAgICBldmFsdWF0b3JPcHRpb25zOiB0aGlzLm9wdGlvbnNcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KS50aGVuKHRyYW5zbGF0ZWQgPT4ge1xuICAgICAgc3RhdGUuZm9udCA9IHRyYW5zbGF0ZWQuZm9udDtcbiAgICAgIHRyYW5zbGF0ZWQuc2VuZCh0aGlzLmhhbmRsZXIpO1xuICAgICAgcmV0dXJuIHRyYW5zbGF0ZWQubG9hZGVkTmFtZTtcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVRleHQoY2hhcnMsIHN0YXRlKSB7XG4gICAgY29uc3QgZm9udCA9IHN0YXRlLmZvbnQ7XG4gICAgY29uc3QgZ2x5cGhzID0gZm9udC5jaGFyc1RvR2x5cGhzKGNoYXJzKTtcblxuICAgIGlmIChmb250LmRhdGEpIHtcbiAgICAgIGNvbnN0IGlzQWRkVG9QYXRoU2V0ID0gISEoc3RhdGUudGV4dFJlbmRlcmluZ01vZGUgJiBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSF9GTEFHKTtcblxuICAgICAgaWYgKGlzQWRkVG9QYXRoU2V0IHx8IHN0YXRlLmZpbGxDb2xvclNwYWNlLm5hbWUgPT09IFwiUGF0dGVyblwiIHx8IGZvbnQuZGlzYWJsZUZvbnRGYWNlIHx8IHRoaXMub3B0aW9ucy5kaXNhYmxlRm9udEZhY2UpIHtcbiAgICAgICAgUGFydGlhbEV2YWx1YXRvci5idWlsZEZvbnRQYXRocyhmb250LCBnbHlwaHMsIHRoaXMuaGFuZGxlciwgdGhpcy5vcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZ2x5cGhzO1xuICB9XG5cbiAgZW5zdXJlU3RhdGVGb250KHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLmZvbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZWFzb24gPSBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJNaXNzaW5nIHNldEZvbnQgKFRmKSBvcGVyYXRvciBiZWZvcmUgdGV4dCByZW5kZXJpbmcgb3BlcmF0b3IuXCIpO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5zZW5kKFwiVW5zdXBwb3J0ZWRGZWF0dXJlXCIsIHtcbiAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRTdGF0ZVxuICAgICAgfSk7XG4gICAgICAoMCwgX3V0aWwud2FybikoYGVuc3VyZVN0YXRlRm9udDogXCIke3JlYXNvbn1cIi5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aHJvdyByZWFzb247XG4gIH1cblxuICBhc3luYyBzZXRHU3RhdGUoe1xuICAgIHJlc291cmNlcyxcbiAgICBnU3RhdGUsXG4gICAgb3BlcmF0b3JMaXN0LFxuICAgIGNhY2hlS2V5LFxuICAgIHRhc2ssXG4gICAgc3RhdGVNYW5hZ2VyLFxuICAgIGxvY2FsR1N0YXRlQ2FjaGUsXG4gICAgbG9jYWxDb2xvclNwYWNlQ2FjaGVcbiAgfSkge1xuICAgIGNvbnN0IGdTdGF0ZVJlZiA9IGdTdGF0ZS5vYmpJZDtcbiAgICBsZXQgaXNTaW1wbGVHU3RhdGUgPSB0cnVlO1xuICAgIGNvbnN0IGdTdGF0ZU9iaiA9IFtdO1xuICAgIGNvbnN0IGdTdGF0ZUtleXMgPSBnU3RhdGUuZ2V0S2V5cygpO1xuICAgIGxldCBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBnU3RhdGVLZXlzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNvbnN0IGtleSA9IGdTdGF0ZUtleXNbaV07XG4gICAgICBjb25zdCB2YWx1ZSA9IGdTdGF0ZS5nZXQoa2V5KTtcblxuICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSBcIlR5cGVcIjpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiTFdcIjpcbiAgICAgICAgY2FzZSBcIkxDXCI6XG4gICAgICAgIGNhc2UgXCJMSlwiOlxuICAgICAgICBjYXNlIFwiTUxcIjpcbiAgICAgICAgY2FzZSBcIkRcIjpcbiAgICAgICAgY2FzZSBcIlJJXCI6XG4gICAgICAgIGNhc2UgXCJGTFwiOlxuICAgICAgICBjYXNlIFwiQ0FcIjpcbiAgICAgICAgY2FzZSBcImNhXCI6XG4gICAgICAgICAgZ1N0YXRlT2JqLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiRm9udFwiOlxuICAgICAgICAgIGlzU2ltcGxlR1N0YXRlID0gZmFsc2U7XG4gICAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVTZXRGb250KHJlc291cmNlcywgbnVsbCwgdmFsdWVbMF0sIG9wZXJhdG9yTGlzdCwgdGFzaywgc3RhdGVNYW5hZ2VyLnN0YXRlKS50aGVuKGZ1bmN0aW9uIChsb2FkZWROYW1lKSB7XG4gICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGREZXBlbmRlbmN5KGxvYWRlZE5hbWUpO1xuICAgICAgICAgICAgICBnU3RhdGVPYmoucHVzaChba2V5LCBbbG9hZGVkTmFtZSwgdmFsdWVbMV1dXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiQk1cIjpcbiAgICAgICAgICBnU3RhdGVPYmoucHVzaChba2V5LCBub3JtYWxpemVCbGVuZE1vZGUodmFsdWUpXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIlNNYXNrXCI6XG4gICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHZhbHVlLCBcIk5vbmVcIikpIHtcbiAgICAgICAgICAgIGdTdGF0ZU9iai5wdXNoKFtrZXksIGZhbHNlXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkodmFsdWUpKSB7XG4gICAgICAgICAgICBpc1NpbXBsZUdTdGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVNNYXNrKHZhbHVlLCByZXNvdXJjZXMsIG9wZXJhdG9yTGlzdCwgdGFzaywgc3RhdGVNYW5hZ2VyLCBsb2NhbENvbG9yU3BhY2VDYWNoZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGdTdGF0ZU9iai5wdXNoKFtrZXksIHRydWVdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5zdXBwb3J0ZWQgU01hc2sgdHlwZVwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiVFJcIjpcbiAgICAgICAgICBjb25zdCB0cmFuc2Zlck1hcHMgPSB0aGlzLmhhbmRsZVRyYW5zZmVyRnVuY3Rpb24odmFsdWUpO1xuICAgICAgICAgIGdTdGF0ZU9iai5wdXNoKFtrZXksIHRyYW5zZmVyTWFwc10pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJPUFwiOlxuICAgICAgICBjYXNlIFwib3BcIjpcbiAgICAgICAgY2FzZSBcIk9QTVwiOlxuICAgICAgICBjYXNlIFwiQkdcIjpcbiAgICAgICAgY2FzZSBcIkJHMlwiOlxuICAgICAgICBjYXNlIFwiVUNSXCI6XG4gICAgICAgIGNhc2UgXCJVQ1IyXCI6XG4gICAgICAgIGNhc2UgXCJUUjJcIjpcbiAgICAgICAgY2FzZSBcIkhUXCI6XG4gICAgICAgIGNhc2UgXCJTTVwiOlxuICAgICAgICBjYXNlIFwiU0FcIjpcbiAgICAgICAgY2FzZSBcIkFJU1wiOlxuICAgICAgICBjYXNlIFwiVEtcIjpcbiAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJncmFwaGljIHN0YXRlIG9wZXJhdG9yIFwiICsga2V5KTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIlVua25vd24gZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciBcIiArIGtleSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZ1N0YXRlT2JqLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5zZXRHU3RhdGUsIFtnU3RhdGVPYmpdKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzU2ltcGxlR1N0YXRlKSB7XG4gICAgICAgIGxvY2FsR1N0YXRlQ2FjaGUuc2V0KGNhY2hlS2V5LCBnU3RhdGVSZWYsIGdTdGF0ZU9iaik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBsb2FkRm9udChmb250TmFtZSwgZm9udCwgcmVzb3VyY2VzLCBmYWxsYmFja0ZvbnREaWN0ID0gbnVsbCwgY3NzRm9udEluZm8gPSBudWxsKSB7XG4gICAgY29uc3QgZXJyb3JGb250ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBUcmFuc2xhdGVkRm9udCh7XG4gICAgICAgIGxvYWRlZE5hbWU6IFwiZ19mb250X2Vycm9yXCIsXG4gICAgICAgIGZvbnQ6IG5ldyBfZm9udHMuRXJyb3JGb250KGBGb250IFwiJHtmb250TmFtZX1cIiBpcyBub3QgYXZhaWxhYmxlLmApLFxuICAgICAgICBkaWN0OiBmb250LFxuICAgICAgICBldmFsdWF0b3JPcHRpb25zOiB0aGlzLm9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCB4cmVmID0gdGhpcy54cmVmO1xuICAgIGxldCBmb250UmVmO1xuXG4gICAgaWYgKGZvbnQpIHtcbiAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzUmVmKShmb250KSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1RoZSBcImZvbnRcIiBvYmplY3Qgc2hvdWxkIGJlIGEgcmVmZXJlbmNlLicpO1xuICAgICAgfVxuXG4gICAgICBmb250UmVmID0gZm9udDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZm9udFJlcyA9IHJlc291cmNlcy5nZXQoXCJGb250XCIpO1xuXG4gICAgICBpZiAoZm9udFJlcykge1xuICAgICAgICBmb250UmVmID0gZm9udFJlcy5nZXRSYXcoZm9udE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZm9udFJlZikge1xuICAgICAgY29uc3QgcGFydGlhbE1zZyA9IGBGb250IFwiJHtmb250TmFtZSB8fCBmb250ICYmIGZvbnQudG9TdHJpbmcoKX1cIiBpcyBub3QgYXZhaWxhYmxlYDtcblxuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzICYmICF0aGlzLnBhcnNpbmdUeXBlM0ZvbnQpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGAke3BhcnRpYWxNc2d9LmApO1xuICAgICAgICByZXR1cm4gZXJyb3JGb250KCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaGFuZGxlci5zZW5kKFwiVW5zdXBwb3J0ZWRGZWF0dXJlXCIsIHtcbiAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRNaXNzaW5nXG4gICAgICB9KTtcbiAgICAgICgwLCBfdXRpbC53YXJuKShgJHtwYXJ0aWFsTXNnfSAtLSBhdHRlbXB0aW5nIHRvIGZhbGxiYWNrIHRvIGEgZGVmYXVsdCBmb250LmApO1xuXG4gICAgICBpZiAoZmFsbGJhY2tGb250RGljdCkge1xuICAgICAgICBmb250UmVmID0gZmFsbGJhY2tGb250RGljdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvbnRSZWYgPSBQYXJ0aWFsRXZhbHVhdG9yLmZhbGxiYWNrRm9udERpY3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9udENhY2hlLmhhcyhmb250UmVmKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9udENhY2hlLmdldChmb250UmVmKTtcbiAgICB9XG5cbiAgICBmb250ID0geHJlZi5mZXRjaElmUmVmKGZvbnRSZWYpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShmb250KSkge1xuICAgICAgcmV0dXJuIGVycm9yRm9udCgpO1xuICAgIH1cblxuICAgIGlmIChmb250LmNhY2hlS2V5ICYmIHRoaXMuZm9udENhY2hlLmhhcyhmb250LmNhY2hlS2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9udENhY2hlLmdldChmb250LmNhY2hlS2V5KTtcbiAgICB9XG5cbiAgICBjb25zdCBmb250Q2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICBsZXQgcHJlRXZhbHVhdGVkRm9udDtcblxuICAgIHRyeSB7XG4gICAgICBwcmVFdmFsdWF0ZWRGb250ID0gdGhpcy5wcmVFdmFsdWF0ZUZvbnQoZm9udCk7XG4gICAgICBwcmVFdmFsdWF0ZWRGb250LmNzc0ZvbnRJbmZvID0gY3NzRm9udEluZm87XG4gICAgfSBjYXRjaCAocmVhc29uKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoYGxvYWRGb250IC0gcHJlRXZhbHVhdGVGb250IGZhaWxlZDogXCIke3JlYXNvbn1cIi5gKTtcbiAgICAgIHJldHVybiBlcnJvckZvbnQoKTtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBkZXNjcmlwdG9yLFxuICAgICAgaGFzaFxuICAgIH0gPSBwcmVFdmFsdWF0ZWRGb250O1xuICAgIGNvbnN0IGZvbnRSZWZJc1JlZiA9ICgwLCBfcHJpbWl0aXZlcy5pc1JlZikoZm9udFJlZik7XG4gICAgbGV0IGZvbnRJRDtcblxuICAgIGlmIChmb250UmVmSXNSZWYpIHtcbiAgICAgIGZvbnRJRCA9IGBmJHtmb250UmVmLnRvU3RyaW5nKCl9YDtcbiAgICB9XG5cbiAgICBpZiAoaGFzaCAmJiAoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShkZXNjcmlwdG9yKSkge1xuICAgICAgaWYgKCFkZXNjcmlwdG9yLmZvbnRBbGlhc2VzKSB7XG4gICAgICAgIGRlc2NyaXB0b3IuZm9udEFsaWFzZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb250QWxpYXNlcyA9IGRlc2NyaXB0b3IuZm9udEFsaWFzZXM7XG5cbiAgICAgIGlmIChmb250QWxpYXNlc1toYXNoXSkge1xuICAgICAgICBjb25zdCBhbGlhc0ZvbnRSZWYgPSBmb250QWxpYXNlc1toYXNoXS5hbGlhc1JlZjtcblxuICAgICAgICBpZiAoZm9udFJlZklzUmVmICYmIGFsaWFzRm9udFJlZiAmJiB0aGlzLmZvbnRDYWNoZS5oYXMoYWxpYXNGb250UmVmKSkge1xuICAgICAgICAgIHRoaXMuZm9udENhY2hlLnB1dEFsaWFzKGZvbnRSZWYsIGFsaWFzRm9udFJlZik7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZm9udENhY2hlLmdldChmb250UmVmKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9udEFsaWFzZXNbaGFzaF0gPSB7XG4gICAgICAgICAgZm9udElEOiB0aGlzLmlkRmFjdG9yeS5jcmVhdGVGb250SWQoKVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9udFJlZklzUmVmKSB7XG4gICAgICAgIGZvbnRBbGlhc2VzW2hhc2hdLmFsaWFzUmVmID0gZm9udFJlZjtcbiAgICAgIH1cblxuICAgICAgZm9udElEID0gZm9udEFsaWFzZXNbaGFzaF0uZm9udElEO1xuICAgIH1cblxuICAgIGlmIChmb250UmVmSXNSZWYpIHtcbiAgICAgIHRoaXMuZm9udENhY2hlLnB1dChmb250UmVmLCBmb250Q2FwYWJpbGl0eS5wcm9taXNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFmb250SUQpIHtcbiAgICAgICAgZm9udElEID0gdGhpcy5pZEZhY3RvcnkuY3JlYXRlRm9udElkKCk7XG4gICAgICB9XG5cbiAgICAgIGZvbnQuY2FjaGVLZXkgPSBgY2FjaGVLZXlfJHtmb250SUR9YDtcbiAgICAgIHRoaXMuZm9udENhY2hlLnB1dChmb250LmNhY2hlS2V5LCBmb250Q2FwYWJpbGl0eS5wcm9taXNlKTtcbiAgICB9XG5cbiAgICAoMCwgX3V0aWwuYXNzZXJ0KShmb250SUQgJiYgZm9udElELnN0YXJ0c1dpdGgoXCJmXCIpLCAnVGhlIFwiZm9udElEXCIgbXVzdCBiZSAoY29ycmVjdGx5KSBkZWZpbmVkLicpO1xuICAgIGZvbnQubG9hZGVkTmFtZSA9IGAke3RoaXMuaWRGYWN0b3J5LmdldERvY0lkKCl9XyR7Zm9udElEfWA7XG4gICAgdGhpcy50cmFuc2xhdGVGb250KHByZUV2YWx1YXRlZEZvbnQpLnRoZW4odHJhbnNsYXRlZEZvbnQgPT4ge1xuICAgICAgaWYgKHRyYW5zbGF0ZWRGb250LmZvbnRUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgeHJlZi5zdGF0cy5hZGRGb250VHlwZSh0cmFuc2xhdGVkRm9udC5mb250VHlwZSk7XG4gICAgICB9XG5cbiAgICAgIGZvbnRDYXBhYmlsaXR5LnJlc29sdmUobmV3IFRyYW5zbGF0ZWRGb250KHtcbiAgICAgICAgbG9hZGVkTmFtZTogZm9udC5sb2FkZWROYW1lLFxuICAgICAgICBmb250OiB0cmFuc2xhdGVkRm9udCxcbiAgICAgICAgZGljdDogZm9udCxcbiAgICAgICAgZXZhbHVhdG9yT3B0aW9uczogdGhpcy5vcHRpb25zXG4gICAgICB9KSk7XG4gICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlci5zZW5kKFwiVW5zdXBwb3J0ZWRGZWF0dXJlXCIsIHtcbiAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRUcmFuc2xhdGVcbiAgICAgIH0pO1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBsb2FkRm9udCAtIHRyYW5zbGF0ZUZvbnQgZmFpbGVkOiBcIiR7cmVhc29ufVwiLmApO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBmb250RmlsZTMgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZ2V0KFwiRm9udEZpbGUzXCIpO1xuICAgICAgICBjb25zdCBzdWJ0eXBlID0gZm9udEZpbGUzICYmIGZvbnRGaWxlMy5nZXQoXCJTdWJ0eXBlXCIpO1xuICAgICAgICBjb25zdCBmb250VHlwZSA9ICgwLCBfZm9udHNfdXRpbHMuZ2V0Rm9udFR5cGUpKHByZUV2YWx1YXRlZEZvbnQudHlwZSwgc3VidHlwZSAmJiBzdWJ0eXBlLm5hbWUpO1xuXG4gICAgICAgIGlmIChmb250VHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgeHJlZi5zdGF0cy5hZGRGb250VHlwZShmb250VHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGV4KSB7fVxuXG4gICAgICBmb250Q2FwYWJpbGl0eS5yZXNvbHZlKG5ldyBUcmFuc2xhdGVkRm9udCh7XG4gICAgICAgIGxvYWRlZE5hbWU6IGZvbnQubG9hZGVkTmFtZSxcbiAgICAgICAgZm9udDogbmV3IF9mb250cy5FcnJvckZvbnQocmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZWFzb24ubWVzc2FnZSA6IHJlYXNvbiksXG4gICAgICAgIGRpY3Q6IGZvbnQsXG4gICAgICAgIGV2YWx1YXRvck9wdGlvbnM6IHRoaXMub3B0aW9uc1xuICAgICAgfSkpO1xuICAgIH0pO1xuICAgIHJldHVybiBmb250Q2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG5cbiAgYnVpbGRQYXRoKG9wZXJhdG9yTGlzdCwgZm4sIGFyZ3MsIHBhcnNpbmdUZXh0ID0gZmFsc2UpIHtcbiAgICBjb25zdCBsYXN0SW5kZXggPSBvcGVyYXRvckxpc3QubGVuZ3RoIC0gMTtcblxuICAgIGlmICghYXJncykge1xuICAgICAgYXJncyA9IFtdO1xuICAgIH1cblxuICAgIGlmIChsYXN0SW5kZXggPCAwIHx8IG9wZXJhdG9yTGlzdC5mbkFycmF5W2xhc3RJbmRleF0gIT09IF91dGlsLk9QUy5jb25zdHJ1Y3RQYXRoKSB7XG4gICAgICBpZiAocGFyc2luZ1RleHQpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGBFbmNvdW50ZXJlZCBwYXRoIG9wZXJhdG9yIFwiJHtmbn1cIiBpbnNpZGUgb2YgYSB0ZXh0IG9iamVjdC5gKTtcbiAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5zYXZlLCBudWxsKTtcbiAgICAgIH1cblxuICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5jb25zdHJ1Y3RQYXRoLCBbW2ZuXSwgYXJnc10pO1xuXG4gICAgICBpZiAocGFyc2luZ1RleHQpIHtcbiAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5yZXN0b3JlLCBudWxsKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb3BBcmdzID0gb3BlcmF0b3JMaXN0LmFyZ3NBcnJheVtsYXN0SW5kZXhdO1xuICAgICAgb3BBcmdzWzBdLnB1c2goZm4pO1xuICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkob3BBcmdzWzFdLCBhcmdzKTtcbiAgICB9XG4gIH1cblxuICBwYXJzZUNvbG9yU3BhY2Uoe1xuICAgIGNzLFxuICAgIHJlc291cmNlcyxcbiAgICBsb2NhbENvbG9yU3BhY2VDYWNoZVxuICB9KSB7XG4gICAgcmV0dXJuIF9jb2xvcnNwYWNlLkNvbG9yU3BhY2UucGFyc2VBc3luYyh7XG4gICAgICBjcyxcbiAgICAgIHhyZWY6IHRoaXMueHJlZixcbiAgICAgIHJlc291cmNlcyxcbiAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeTogdGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LFxuICAgICAgbG9jYWxDb2xvclNwYWNlQ2FjaGVcbiAgICB9KS5jYXRjaChyZWFzb24gPT4ge1xuICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLkFib3J0RXhjZXB0aW9uKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycykge1xuICAgICAgICB0aGlzLmhhbmRsZXIuc2VuZChcIlVuc3VwcG9ydGVkRmVhdHVyZVwiLCB7XG4gICAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckNvbG9yU3BhY2VcbiAgICAgICAgfSk7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgcGFyc2VDb2xvclNwYWNlIC0gaWdub3JpbmcgQ29sb3JTcGFjZTogXCIke3JlYXNvbn1cIi5gKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHRocm93IHJlYXNvbjtcbiAgICB9KTtcbiAgfVxuXG4gIHBhcnNlU2hhZGluZyh7XG4gICAgc2hhZGluZyxcbiAgICByZXNvdXJjZXMsXG4gICAgbG9jYWxDb2xvclNwYWNlQ2FjaGUsXG4gICAgbG9jYWxTaGFkaW5nUGF0dGVybkNhY2hlXG4gIH0pIHtcbiAgICBsZXQgaWQgPSBsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGUuZ2V0KHNoYWRpbmcpO1xuXG4gICAgaWYgKCFpZCkge1xuICAgICAgdmFyIHNoYWRpbmdGaWxsID0gX3BhdHRlcm4uUGF0dGVybi5wYXJzZVNoYWRpbmcoc2hhZGluZywgdGhpcy54cmVmLCByZXNvdXJjZXMsIHRoaXMuaGFuZGxlciwgdGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LCBsb2NhbENvbG9yU3BhY2VDYWNoZSk7XG5cbiAgICAgIGNvbnN0IHBhdHRlcm5JUiA9IHNoYWRpbmdGaWxsLmdldElSKCk7XG4gICAgICBpZCA9IGBwYXR0ZXJuXyR7dGhpcy5pZEZhY3RvcnkuY3JlYXRlT2JqSWQoKX1gO1xuICAgICAgbG9jYWxTaGFkaW5nUGF0dGVybkNhY2hlLnNldChzaGFkaW5nLCBpZCk7XG4gICAgICB0aGlzLmhhbmRsZXIuc2VuZChcIm9ialwiLCBbaWQsIHRoaXMucGFnZUluZGV4LCBcIlBhdHRlcm5cIiwgcGF0dGVybklSXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgaGFuZGxlQ29sb3JOKG9wZXJhdG9yTGlzdCwgZm4sIGFyZ3MsIGNzLCBwYXR0ZXJucywgcmVzb3VyY2VzLCB0YXNrLCBsb2NhbENvbG9yU3BhY2VDYWNoZSwgbG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUsIGxvY2FsU2hhZGluZ1BhdHRlcm5DYWNoZSkge1xuICAgIGNvbnN0IHBhdHRlcm5OYW1lID0gYXJncy5wb3AoKTtcblxuICAgIGlmIChwYXR0ZXJuTmFtZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLk5hbWUpIHtcbiAgICAgIGNvbnN0IHJhd1BhdHRlcm4gPSBwYXR0ZXJucy5nZXRSYXcocGF0dGVybk5hbWUubmFtZSk7XG4gICAgICBjb25zdCBsb2NhbFRpbGluZ1BhdHRlcm4gPSByYXdQYXR0ZXJuIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmICYmIGxvY2FsVGlsaW5nUGF0dGVybkNhY2hlLmdldEJ5UmVmKHJhd1BhdHRlcm4pO1xuXG4gICAgICBpZiAobG9jYWxUaWxpbmdQYXR0ZXJuKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY29sb3IgPSBjcy5iYXNlID8gY3MuYmFzZS5nZXRSZ2IoYXJncywgMCkgOiBudWxsO1xuICAgICAgICAgIGNvbnN0IHRpbGluZ1BhdHRlcm5JUiA9ICgwLCBfcGF0dGVybi5nZXRUaWxpbmdQYXR0ZXJuSVIpKGxvY2FsVGlsaW5nUGF0dGVybi5vcGVyYXRvckxpc3RJUiwgbG9jYWxUaWxpbmdQYXR0ZXJuLmRpY3QsIGNvbG9yKTtcbiAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoZm4sIHRpbGluZ1BhdHRlcm5JUik7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHt9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhdHRlcm4gPSB0aGlzLnhyZWYuZmV0Y2hJZlJlZihyYXdQYXR0ZXJuKTtcblxuICAgICAgaWYgKHBhdHRlcm4pIHtcbiAgICAgICAgY29uc3QgZGljdCA9ICgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkocGF0dGVybikgPyBwYXR0ZXJuLmRpY3QgOiBwYXR0ZXJuO1xuICAgICAgICBjb25zdCB0eXBlTnVtID0gZGljdC5nZXQoXCJQYXR0ZXJuVHlwZVwiKTtcblxuICAgICAgICBpZiAodHlwZU51bSA9PT0gUGF0dGVyblR5cGUuVElMSU5HKSB7XG4gICAgICAgICAgY29uc3QgY29sb3IgPSBjcy5iYXNlID8gY3MuYmFzZS5nZXRSZ2IoYXJncywgMCkgOiBudWxsO1xuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVRpbGluZ1R5cGUoZm4sIGNvbG9yLCByZXNvdXJjZXMsIHBhdHRlcm4sIGRpY3QsIG9wZXJhdG9yTGlzdCwgdGFzaywgbG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVOdW0gPT09IFBhdHRlcm5UeXBlLlNIQURJTkcpIHtcbiAgICAgICAgICBjb25zdCBzaGFkaW5nID0gZGljdC5nZXQoXCJTaGFkaW5nXCIpO1xuICAgICAgICAgIGNvbnN0IG1hdHJpeCA9IGRpY3QuZ2V0QXJyYXkoXCJNYXRyaXhcIik7XG4gICAgICAgICAgY29uc3Qgb2JqSWQgPSB0aGlzLnBhcnNlU2hhZGluZyh7XG4gICAgICAgICAgICBzaGFkaW5nLFxuICAgICAgICAgICAgcmVzb3VyY2VzLFxuICAgICAgICAgICAgbG9jYWxDb2xvclNwYWNlQ2FjaGUsXG4gICAgICAgICAgICBsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoZm4sIFtcIlNoYWRpbmdcIiwgb2JqSWQsIG1hdHJpeF0pO1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFVua25vd24gUGF0dGVyblR5cGU6ICR7dHlwZU51bX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFVua25vd24gUGF0dGVybk5hbWU6ICR7cGF0dGVybk5hbWV9YCk7XG4gIH1cblxuICBfcGFyc2VWaXNpYmlsaXR5RXhwcmVzc2lvbihhcnJheSwgbmVzdGluZ0NvdW50ZXIsIGN1cnJlbnRSZXN1bHQpIHtcbiAgICBjb25zdCBNQVhfTkVTVElORyA9IDEwO1xuXG4gICAgaWYgKCsrbmVzdGluZ0NvdW50ZXIgPiBNQVhfTkVTVElORykge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiVmlzaWJpbGl0eSBleHByZXNzaW9uIGlzIHRvbyBkZWVwbHkgbmVzdGVkXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICBjb25zdCBvcGVyYXRvciA9IHRoaXMueHJlZi5mZXRjaElmUmVmKGFycmF5WzBdKTtcblxuICAgIGlmIChsZW5ndGggPCAyIHx8ICEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShvcGVyYXRvcikpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIkludmFsaWQgdmlzaWJpbGl0eSBleHByZXNzaW9uXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAob3BlcmF0b3IubmFtZSkge1xuICAgICAgY2FzZSBcIkFuZFwiOlxuICAgICAgY2FzZSBcIk9yXCI6XG4gICAgICBjYXNlIFwiTm90XCI6XG4gICAgICAgIGN1cnJlbnRSZXN1bHQucHVzaChvcGVyYXRvci5uYW1lKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgSW52YWxpZCBvcGVyYXRvciAke29wZXJhdG9yLm5hbWV9IGluIHZpc2liaWxpdHkgZXhwcmVzc2lvbmApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcmF3ID0gYXJyYXlbaV07XG4gICAgICBjb25zdCBvYmplY3QgPSB0aGlzLnhyZWYuZmV0Y2hJZlJlZihyYXcpO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgIGNvbnN0IG5lc3RlZFJlc3VsdCA9IFtdO1xuICAgICAgICBjdXJyZW50UmVzdWx0LnB1c2gobmVzdGVkUmVzdWx0KTtcblxuICAgICAgICB0aGlzLl9wYXJzZVZpc2liaWxpdHlFeHByZXNzaW9uKG9iamVjdCwgbmVzdGluZ0NvdW50ZXIsIG5lc3RlZFJlc3VsdCk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikocmF3KSkge1xuICAgICAgICBjdXJyZW50UmVzdWx0LnB1c2gocmF3LnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHBhcnNlTWFya2VkQ29udGVudFByb3BzKGNvbnRlbnRQcm9wZXJ0aWVzLCByZXNvdXJjZXMpIHtcbiAgICBsZXQgb3B0aW9uYWxDb250ZW50O1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGNvbnRlbnRQcm9wZXJ0aWVzKSkge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHJlc291cmNlcy5nZXQoXCJQcm9wZXJ0aWVzXCIpO1xuICAgICAgb3B0aW9uYWxDb250ZW50ID0gcHJvcGVydGllcy5nZXQoY29udGVudFByb3BlcnRpZXMubmFtZSk7XG4gICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShjb250ZW50UHJvcGVydGllcykpIHtcbiAgICAgIG9wdGlvbmFsQ29udGVudCA9IGNvbnRlbnRQcm9wZXJ0aWVzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJPcHRpb25hbCBjb250ZW50IHByb3BlcnRpZXMgbWFsZm9ybWVkLlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25hbENvbnRlbnRUeXBlID0gb3B0aW9uYWxDb250ZW50LmdldChcIlR5cGVcIikubmFtZTtcblxuICAgIGlmIChvcHRpb25hbENvbnRlbnRUeXBlID09PSBcIk9DR1wiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBvcHRpb25hbENvbnRlbnRUeXBlLFxuICAgICAgICBpZDogb3B0aW9uYWxDb250ZW50Lm9iaklkXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAob3B0aW9uYWxDb250ZW50VHlwZSA9PT0gXCJPQ01EXCIpIHtcbiAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBvcHRpb25hbENvbnRlbnQuZ2V0KFwiVkVcIik7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4cHJlc3Npb24pKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgICAgIHRoaXMuX3BhcnNlVmlzaWJpbGl0eUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgMCwgcmVzdWx0KTtcblxuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogXCJPQ01EXCIsXG4gICAgICAgICAgICBleHByZXNzaW9uOiByZXN1bHRcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9wdGlvbmFsQ29udGVudEdyb3VwcyA9IG9wdGlvbmFsQ29udGVudC5nZXQoXCJPQ0dzXCIpO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25hbENvbnRlbnRHcm91cHMpIHx8ICgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9wdGlvbmFsQ29udGVudEdyb3VwcykpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBJZHMgPSBbXTtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25hbENvbnRlbnRHcm91cHMpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBvY2cgb2Ygb3B0aW9uYWxDb250ZW50R3JvdXBzKSB7XG4gICAgICAgICAgICBncm91cElkcy5wdXNoKG9jZy50b1N0cmluZygpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JvdXBJZHMucHVzaChvcHRpb25hbENvbnRlbnRHcm91cHMub2JqSWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiBvcHRpb25hbENvbnRlbnRUeXBlLFxuICAgICAgICAgIGlkczogZ3JvdXBJZHMsXG4gICAgICAgICAgcG9saWN5OiAoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShvcHRpb25hbENvbnRlbnQuZ2V0KFwiUFwiKSkgPyBvcHRpb25hbENvbnRlbnQuZ2V0KFwiUFwiKS5uYW1lIDogbnVsbCxcbiAgICAgICAgICBleHByZXNzaW9uOiBudWxsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikob3B0aW9uYWxDb250ZW50R3JvdXBzKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IG9wdGlvbmFsQ29udGVudFR5cGUsXG4gICAgICAgICAgaWQ6IG9wdGlvbmFsQ29udGVudEdyb3Vwcy50b1N0cmluZygpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXRPcGVyYXRvckxpc3Qoe1xuICAgIHN0cmVhbSxcbiAgICB0YXNrLFxuICAgIHJlc291cmNlcyxcbiAgICBvcGVyYXRvckxpc3QsXG4gICAgaW5pdGlhbFN0YXRlID0gbnVsbCxcbiAgICBmYWxsYmFja0ZvbnREaWN0ID0gbnVsbFxuICB9KSB7XG4gICAgcmVzb3VyY2VzID0gcmVzb3VyY2VzIHx8IF9wcmltaXRpdmVzLkRpY3QuZW1wdHk7XG4gICAgaW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlIHx8IG5ldyBFdmFsU3RhdGUoKTtcblxuICAgIGlmICghb3BlcmF0b3JMaXN0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldE9wZXJhdG9yTGlzdDogbWlzc2luZyBcIm9wZXJhdG9yTGlzdFwiIHBhcmFtZXRlcicpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IHhyZWYgPSB0aGlzLnhyZWY7XG4gICAgbGV0IHBhcnNpbmdUZXh0ID0gZmFsc2U7XG4gICAgY29uc3QgbG9jYWxJbWFnZUNhY2hlID0gbmV3IF9pbWFnZV91dGlscy5Mb2NhbEltYWdlQ2FjaGUoKTtcbiAgICBjb25zdCBsb2NhbENvbG9yU3BhY2VDYWNoZSA9IG5ldyBfaW1hZ2VfdXRpbHMuTG9jYWxDb2xvclNwYWNlQ2FjaGUoKTtcbiAgICBjb25zdCBsb2NhbEdTdGF0ZUNhY2hlID0gbmV3IF9pbWFnZV91dGlscy5Mb2NhbEdTdGF0ZUNhY2hlKCk7XG4gICAgY29uc3QgbG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUgPSBuZXcgX2ltYWdlX3V0aWxzLkxvY2FsVGlsaW5nUGF0dGVybkNhY2hlKCk7XG4gICAgY29uc3QgbG9jYWxTaGFkaW5nUGF0dGVybkNhY2hlID0gbmV3IE1hcCgpO1xuXG4gICAgY29uc3QgeG9ianMgPSByZXNvdXJjZXMuZ2V0KFwiWE9iamVjdFwiKSB8fCBfcHJpbWl0aXZlcy5EaWN0LmVtcHR5O1xuXG4gICAgY29uc3QgcGF0dGVybnMgPSByZXNvdXJjZXMuZ2V0KFwiUGF0dGVyblwiKSB8fCBfcHJpbWl0aXZlcy5EaWN0LmVtcHR5O1xuXG4gICAgY29uc3Qgc3RhdGVNYW5hZ2VyID0gbmV3IFN0YXRlTWFuYWdlcihpbml0aWFsU3RhdGUpO1xuICAgIGNvbnN0IHByZXByb2Nlc3NvciA9IG5ldyBFdmFsdWF0b3JQcmVwcm9jZXNzb3Ioc3RyZWFtLCB4cmVmLCBzdGF0ZU1hbmFnZXIpO1xuICAgIGNvbnN0IHRpbWVTbG90TWFuYWdlciA9IG5ldyBUaW1lU2xvdE1hbmFnZXIoKTtcblxuICAgIGZ1bmN0aW9uIGNsb3NlUGVuZGluZ1Jlc3RvcmVPUFMoYXJndW1lbnQpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHByZXByb2Nlc3Nvci5zYXZlZFN0YXRlc0RlcHRoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnJlc3RvcmUsIFtdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUJvZHkocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBjb25zdCBuZXh0ID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgUHJvbWlzZS5hbGwoW3Byb21pc2UsIG9wZXJhdG9yTGlzdC5yZWFkeV0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwcm9taXNlQm9keShyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICByZWplY3QoZXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH07XG5cbiAgICAgIHRhc2suZW5zdXJlTm90VGVybWluYXRlZCgpO1xuICAgICAgdGltZVNsb3RNYW5hZ2VyLnJlc2V0KCk7XG4gICAgICBjb25zdCBvcGVyYXRpb24gPSB7fTtcbiAgICAgIGxldCBzdG9wLCBpLCBpaSwgY3MsIG5hbWUsIGlzVmFsaWROYW1lO1xuXG4gICAgICB3aGlsZSAoIShzdG9wID0gdGltZVNsb3RNYW5hZ2VyLmNoZWNrKCkpKSB7XG4gICAgICAgIG9wZXJhdGlvbi5hcmdzID0gbnVsbDtcblxuICAgICAgICBpZiAoIXByZXByb2Nlc3Nvci5yZWFkKG9wZXJhdGlvbikpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBhcmdzID0gb3BlcmF0aW9uLmFyZ3M7XG4gICAgICAgIGxldCBmbiA9IG9wZXJhdGlvbi5mbjtcblxuICAgICAgICBzd2l0Y2ggKGZuIHwgMCkge1xuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50WE9iamVjdDpcbiAgICAgICAgICAgIGlzVmFsaWROYW1lID0gYXJnc1swXSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLk5hbWU7XG4gICAgICAgICAgICBuYW1lID0gYXJnc1swXS5uYW1lO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZE5hbWUpIHtcbiAgICAgICAgICAgICAgY29uc3QgbG9jYWxJbWFnZSA9IGxvY2FsSW1hZ2VDYWNoZS5nZXRCeU5hbWUobmFtZSk7XG5cbiAgICAgICAgICAgICAgaWYgKGxvY2FsSW1hZ2UpIHtcbiAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AobG9jYWxJbWFnZS5mbiwgbG9jYWxJbWFnZS5hcmdzKTtcbiAgICAgICAgICAgICAgICBhcmdzID0gbnVsbDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXh0KG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlWE9iamVjdCwgcmVqZWN0WE9iamVjdCkge1xuICAgICAgICAgICAgICBpZiAoIWlzVmFsaWROYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiWE9iamVjdCBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuXCIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbGV0IHhvYmogPSB4b2Jqcy5nZXRSYXcobmFtZSk7XG5cbiAgICAgICAgICAgICAgaWYgKHhvYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2NhbEltYWdlID0gbG9jYWxJbWFnZUNhY2hlLmdldEJ5UmVmKHhvYmopO1xuXG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsSW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChsb2NhbEltYWdlLmZuLCBsb2NhbEltYWdlLmFyZ3MpO1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZVhPYmplY3QoKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBnbG9iYWxJbWFnZSA9IHNlbGYuZ2xvYmFsSW1hZ2VDYWNoZS5nZXREYXRhKHhvYmosIHNlbGYucGFnZUluZGV4KTtcblxuICAgICAgICAgICAgICAgIGlmIChnbG9iYWxJbWFnZSkge1xuICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZERlcGVuZGVuY3koZ2xvYmFsSW1hZ2Uub2JqSWQpO1xuICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKGdsb2JhbEltYWdlLmZuLCBnbG9iYWxJbWFnZS5hcmdzKTtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVYT2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgeG9iaiA9IHhyZWYuZmV0Y2goeG9iaik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoeG9iaikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJYT2JqZWN0IHNob3VsZCBiZSBhIHN0cmVhbVwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB4b2JqLmRpY3QuZ2V0KFwiU3VidHlwZVwiKTtcblxuICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiWE9iamVjdCBzaG91bGQgaGF2ZSBhIE5hbWUgc3VidHlwZVwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0eXBlLm5hbWUgPT09IFwiRm9ybVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLnNhdmUoKTtcbiAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkRm9ybVhPYmplY3QocmVzb3VyY2VzLCB4b2JqLCBudWxsLCBvcGVyYXRvckxpc3QsIHRhc2ssIHN0YXRlTWFuYWdlci5zdGF0ZS5jbG9uZSgpLCBsb2NhbENvbG9yU3BhY2VDYWNoZSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZVhPYmplY3QoKTtcbiAgICAgICAgICAgICAgICB9LCByZWplY3RYT2JqZWN0KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5uYW1lID09PSBcIkltYWdlXCIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkUGFpbnRJbWFnZVhPYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgaW1hZ2U6IHhvYmosXG4gICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QsXG4gICAgICAgICAgICAgICAgICBjYWNoZUtleTogbmFtZSxcbiAgICAgICAgICAgICAgICAgIGxvY2FsSW1hZ2VDYWNoZSxcbiAgICAgICAgICAgICAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlXG4gICAgICAgICAgICAgICAgfSkudGhlbihyZXNvbHZlWE9iamVjdCwgcmVqZWN0WE9iamVjdCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUubmFtZSA9PT0gXCJQU1wiKSB7XG4gICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiSWdub3JlZCBYT2JqZWN0IHN1YnR5cGUgUFNcIik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBVbmhhbmRsZWQgWE9iamVjdCBzdWJ0eXBlICR7dHlwZS5uYW1lfWApO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmVzb2x2ZVhPYmplY3QoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLkFib3J0RXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2VuZChcIlVuc3VwcG9ydGVkRmVhdHVyZVwiLCB7XG4gICAgICAgICAgICAgICAgICBmZWF0dXJlSWQ6IF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yWE9iamVjdFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgWE9iamVjdDogXCIke3JlYXNvbn1cIi5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aHJvdyByZWFzb247XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGb250OlxuICAgICAgICAgICAgdmFyIGZvbnRTaXplID0gYXJnc1sxXTtcbiAgICAgICAgICAgIG5leHQoc2VsZi5oYW5kbGVTZXRGb250KHJlc291cmNlcywgYXJncywgbnVsbCwgb3BlcmF0b3JMaXN0LCB0YXNrLCBzdGF0ZU1hbmFnZXIuc3RhdGUsIGZhbGxiYWNrRm9udERpY3QpLnRoZW4oZnVuY3Rpb24gKGxvYWRlZE5hbWUpIHtcbiAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZERlcGVuZGVuY3kobG9hZGVkTmFtZSk7XG4gICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuc2V0Rm9udCwgW2xvYWRlZE5hbWUsIGZvbnRTaXplXSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5iZWdpblRleHQ6XG4gICAgICAgICAgICBwYXJzaW5nVGV4dCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmVuZFRleHQ6XG4gICAgICAgICAgICBwYXJzaW5nVGV4dCA9IGZhbHNlO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5lbmRJbmxpbmVJbWFnZTpcbiAgICAgICAgICAgIHZhciBjYWNoZUtleSA9IGFyZ3NbMF0uY2FjaGVLZXk7XG5cbiAgICAgICAgICAgIGlmIChjYWNoZUtleSkge1xuICAgICAgICAgICAgICBjb25zdCBsb2NhbEltYWdlID0gbG9jYWxJbWFnZUNhY2hlLmdldEJ5TmFtZShjYWNoZUtleSk7XG5cbiAgICAgICAgICAgICAgaWYgKGxvY2FsSW1hZ2UpIHtcbiAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AobG9jYWxJbWFnZS5mbiwgbG9jYWxJbWFnZS5hcmdzKTtcbiAgICAgICAgICAgICAgICBhcmdzID0gbnVsbDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXh0KHNlbGYuYnVpbGRQYWludEltYWdlWE9iamVjdCh7XG4gICAgICAgICAgICAgIHJlc291cmNlcyxcbiAgICAgICAgICAgICAgaW1hZ2U6IGFyZ3NbMF0sXG4gICAgICAgICAgICAgIGlzSW5saW5lOiB0cnVlLFxuICAgICAgICAgICAgICBvcGVyYXRvckxpc3QsXG4gICAgICAgICAgICAgIGNhY2hlS2V5LFxuICAgICAgICAgICAgICBsb2NhbEltYWdlQ2FjaGUsXG4gICAgICAgICAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zaG93VGV4dDpcbiAgICAgICAgICAgIGlmICghc3RhdGVNYW5hZ2VyLnN0YXRlLmZvbnQpIHtcbiAgICAgICAgICAgICAgc2VsZi5lbnN1cmVTdGF0ZUZvbnQoc3RhdGVNYW5hZ2VyLnN0YXRlKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFyZ3NbMF0gPSBzZWxmLmhhbmRsZVRleHQoYXJnc1swXSwgc3RhdGVNYW5hZ2VyLnN0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2hvd1NwYWNlZFRleHQ6XG4gICAgICAgICAgICBpZiAoIXN0YXRlTWFuYWdlci5zdGF0ZS5mb250KSB7XG4gICAgICAgICAgICAgIHNlbGYuZW5zdXJlU3RhdGVGb250KHN0YXRlTWFuYWdlci5zdGF0ZSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgYXJyID0gYXJnc1swXTtcbiAgICAgICAgICAgIHZhciBjb21iaW5lZEdseXBocyA9IFtdO1xuICAgICAgICAgICAgdmFyIGFyckxlbmd0aCA9IGFyci5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgc3RhdGUgPSBzdGF0ZU1hbmFnZXIuc3RhdGU7XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnJMZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICBjb25zdCBhcnJJdGVtID0gYXJyW2ldO1xuXG4gICAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKGFyckl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoY29tYmluZWRHbHlwaHMsIHNlbGYuaGFuZGxlVGV4dChhcnJJdGVtLCBzdGF0ZSkpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc051bSkoYXJySXRlbSkpIHtcbiAgICAgICAgICAgICAgICBjb21iaW5lZEdseXBocy5wdXNoKGFyckl0ZW0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFyZ3NbMF0gPSBjb21iaW5lZEdseXBocztcbiAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNob3dUZXh0O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5uZXh0TGluZVNob3dUZXh0OlxuICAgICAgICAgICAgaWYgKCFzdGF0ZU1hbmFnZXIuc3RhdGUuZm9udCkge1xuICAgICAgICAgICAgICBzZWxmLmVuc3VyZVN0YXRlRm9udChzdGF0ZU1hbmFnZXIuc3RhdGUpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5uZXh0TGluZSk7XG4gICAgICAgICAgICBhcmdzWzBdID0gc2VsZi5oYW5kbGVUZXh0KGFyZ3NbMF0sIHN0YXRlTWFuYWdlci5zdGF0ZSk7XG4gICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zaG93VGV4dDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6XG4gICAgICAgICAgICBpZiAoIXN0YXRlTWFuYWdlci5zdGF0ZS5mb250KSB7XG4gICAgICAgICAgICAgIHNlbGYuZW5zdXJlU3RhdGVGb250KHN0YXRlTWFuYWdlci5zdGF0ZSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLm5leHRMaW5lKTtcbiAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuc2V0V29yZFNwYWNpbmcsIFthcmdzLnNoaWZ0KCldKTtcbiAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuc2V0Q2hhclNwYWNpbmcsIFthcmdzLnNoaWZ0KCldKTtcbiAgICAgICAgICAgIGFyZ3NbMF0gPSBzZWxmLmhhbmRsZVRleHQoYXJnc1swXSwgc3RhdGVNYW5hZ2VyLnN0YXRlKTtcbiAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNob3dUZXh0O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRUZXh0UmVuZGVyaW5nTW9kZTpcbiAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS50ZXh0UmVuZGVyaW5nTW9kZSA9IGFyZ3NbMF07XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxDb2xvclNwYWNlOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb25zdCBjYWNoZWRDb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5nZXRDYWNoZWQoYXJnc1swXSwgeHJlZiwgbG9jYWxDb2xvclNwYWNlQ2FjaGUpO1xuXG4gICAgICAgICAgICAgIGlmIChjYWNoZWRDb2xvclNwYWNlKSB7XG4gICAgICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLnN0YXRlLmZpbGxDb2xvclNwYWNlID0gY2FjaGVkQ29sb3JTcGFjZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG5leHQoc2VsZi5wYXJzZUNvbG9yU3BhY2Uoe1xuICAgICAgICAgICAgICAgIGNzOiBhcmdzWzBdLFxuICAgICAgICAgICAgICAgIHJlc291cmNlcyxcbiAgICAgICAgICAgICAgICBsb2NhbENvbG9yU3BhY2VDYWNoZVxuICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChjb2xvclNwYWNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbG9yU3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5maWxsQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZUNvbG9yU3BhY2U6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbnN0IGNhY2hlZENvbG9yU3BhY2UgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLmdldENhY2hlZChhcmdzWzBdLCB4cmVmLCBsb2NhbENvbG9yU3BhY2VDYWNoZSk7XG5cbiAgICAgICAgICAgICAgaWYgKGNhY2hlZENvbG9yU3BhY2UpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSA9IGNhY2hlZENvbG9yU3BhY2U7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBuZXh0KHNlbGYucGFyc2VDb2xvclNwYWNlKHtcbiAgICAgICAgICAgICAgICBjczogYXJnc1swXSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXMsXG4gICAgICAgICAgICAgICAgbG9jYWxDb2xvclNwYWNlQ2FjaGVcbiAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoY29sb3JTcGFjZSkge1xuICAgICAgICAgICAgICAgIGlmIChjb2xvclNwYWNlKSB7XG4gICAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxDb2xvcjpcbiAgICAgICAgICAgIGNzID0gc3RhdGVNYW5hZ2VyLnN0YXRlLmZpbGxDb2xvclNwYWNlO1xuICAgICAgICAgICAgYXJncyA9IGNzLmdldFJnYihhcmdzLCAwKTtcbiAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNldEZpbGxSR0JDb2xvcjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0U3Ryb2tlQ29sb3I6XG4gICAgICAgICAgICBjcyA9IHN0YXRlTWFuYWdlci5zdGF0ZS5zdHJva2VDb2xvclNwYWNlO1xuICAgICAgICAgICAgYXJncyA9IGNzLmdldFJnYihhcmdzLCAwKTtcbiAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNldFN0cm9rZVJHQkNvbG9yO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGaWxsR3JheTpcbiAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5maWxsQ29sb3JTcGFjZSA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5O1xuICAgICAgICAgICAgYXJncyA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYihhcmdzLCAwKTtcbiAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNldEZpbGxSR0JDb2xvcjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0U3Ryb2tlR3JheTpcbiAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5zdHJva2VDb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXk7XG4gICAgICAgICAgICBhcmdzID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiKGFyZ3MsIDApO1xuICAgICAgICAgICAgZm4gPSBfdXRpbC5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxDTVlLQ29sb3I6XG4gICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUuZmlsbENvbG9yU3BhY2UgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215aztcbiAgICAgICAgICAgIGFyZ3MgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2IoYXJncywgMCk7XG4gICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zZXRGaWxsUkdCQ29sb3I7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZUNNWUtDb2xvcjpcbiAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5zdHJva2VDb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWs7XG4gICAgICAgICAgICBhcmdzID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiKGFyZ3MsIDApO1xuICAgICAgICAgICAgZm4gPSBfdXRpbC5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxSR0JDb2xvcjpcbiAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5maWxsQ29sb3JTcGFjZSA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2I7XG4gICAgICAgICAgICBhcmdzID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2IoYXJncywgMCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZVJHQkNvbG9yOlxuICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiO1xuICAgICAgICAgICAgYXJncyA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiKGFyZ3MsIDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGaWxsQ29sb3JOOlxuICAgICAgICAgICAgY3MgPSBzdGF0ZU1hbmFnZXIuc3RhdGUuZmlsbENvbG9yU3BhY2U7XG5cbiAgICAgICAgICAgIGlmIChjcy5uYW1lID09PSBcIlBhdHRlcm5cIikge1xuICAgICAgICAgICAgICBuZXh0KHNlbGYuaGFuZGxlQ29sb3JOKG9wZXJhdG9yTGlzdCwgX3V0aWwuT1BTLnNldEZpbGxDb2xvck4sIGFyZ3MsIGNzLCBwYXR0ZXJucywgcmVzb3VyY2VzLCB0YXNrLCBsb2NhbENvbG9yU3BhY2VDYWNoZSwgbG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUsIGxvY2FsU2hhZGluZ1BhdHRlcm5DYWNoZSkpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFyZ3MgPSBjcy5nZXRSZ2IoYXJncywgMCk7XG4gICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zZXRGaWxsUkdCQ29sb3I7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZUNvbG9yTjpcbiAgICAgICAgICAgIGNzID0gc3RhdGVNYW5hZ2VyLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U7XG5cbiAgICAgICAgICAgIGlmIChjcy5uYW1lID09PSBcIlBhdHRlcm5cIikge1xuICAgICAgICAgICAgICBuZXh0KHNlbGYuaGFuZGxlQ29sb3JOKG9wZXJhdG9yTGlzdCwgX3V0aWwuT1BTLnNldFN0cm9rZUNvbG9yTiwgYXJncywgY3MsIHBhdHRlcm5zLCByZXNvdXJjZXMsIHRhc2ssIGxvY2FsQ29sb3JTcGFjZUNhY2hlLCBsb2NhbFRpbGluZ1BhdHRlcm5DYWNoZSwgbG9jYWxTaGFkaW5nUGF0dGVybkNhY2hlKSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXJncyA9IGNzLmdldFJnYihhcmdzLCAwKTtcbiAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNldFN0cm9rZVJHQkNvbG9yO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zaGFkaW5nRmlsbDpcbiAgICAgICAgICAgIHZhciBzaGFkaW5nUmVzID0gcmVzb3VyY2VzLmdldChcIlNoYWRpbmdcIik7XG5cbiAgICAgICAgICAgIGlmICghc2hhZGluZ1Jlcykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJObyBzaGFkaW5nIHJlc291cmNlIGZvdW5kXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgc2hhZGluZyA9IHNoYWRpbmdSZXMuZ2V0KGFyZ3NbMF0ubmFtZSk7XG5cbiAgICAgICAgICAgIGlmICghc2hhZGluZykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJObyBzaGFkaW5nIG9iamVjdCBmb3VuZFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGF0dGVybklkID0gc2VsZi5wYXJzZVNoYWRpbmcoe1xuICAgICAgICAgICAgICBzaGFkaW5nLFxuICAgICAgICAgICAgICByZXNvdXJjZXMsXG4gICAgICAgICAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlLFxuICAgICAgICAgICAgICBsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXJncyA9IFtwYXR0ZXJuSWRdO1xuICAgICAgICAgICAgZm4gPSBfdXRpbC5PUFMuc2hhZGluZ0ZpbGw7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEdTdGF0ZTpcbiAgICAgICAgICAgIGlzVmFsaWROYW1lID0gYXJnc1swXSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLk5hbWU7XG4gICAgICAgICAgICBuYW1lID0gYXJnc1swXS5uYW1lO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZE5hbWUpIHtcbiAgICAgICAgICAgICAgY29uc3QgbG9jYWxHU3RhdGVPYmogPSBsb2NhbEdTdGF0ZUNhY2hlLmdldEJ5TmFtZShuYW1lKTtcblxuICAgICAgICAgICAgICBpZiAobG9jYWxHU3RhdGVPYmopIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxHU3RhdGVPYmoubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5zZXRHU3RhdGUsIFtsb2NhbEdTdGF0ZU9ial0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFyZ3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQobmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmVHU3RhdGUsIHJlamVjdEdTdGF0ZSkge1xuICAgICAgICAgICAgICBpZiAoIWlzVmFsaWROYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiR1N0YXRlIG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS5cIik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBleHRHU3RhdGUgPSByZXNvdXJjZXMuZ2V0KFwiRXh0R1N0YXRlXCIpO1xuXG4gICAgICAgICAgICAgIGlmICghKGV4dEdTdGF0ZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiRXh0R1N0YXRlIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkuXCIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgZ1N0YXRlID0gZXh0R1N0YXRlLmdldChuYW1lKTtcblxuICAgICAgICAgICAgICBpZiAoIShnU3RhdGUgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LlwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHNlbGYuc2V0R1N0YXRlKHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZXMsXG4gICAgICAgICAgICAgICAgZ1N0YXRlLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdCxcbiAgICAgICAgICAgICAgICBjYWNoZUtleTogbmFtZSxcbiAgICAgICAgICAgICAgICB0YXNrLFxuICAgICAgICAgICAgICAgIHN0YXRlTWFuYWdlcixcbiAgICAgICAgICAgICAgICBsb2NhbEdTdGF0ZUNhY2hlLFxuICAgICAgICAgICAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlXG4gICAgICAgICAgICAgIH0pLnRoZW4ocmVzb2x2ZUdTdGF0ZSwgcmVqZWN0R1N0YXRlKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLkFib3J0RXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2VuZChcIlVuc3VwcG9ydGVkRmVhdHVyZVwiLCB7XG4gICAgICAgICAgICAgICAgICBmZWF0dXJlSWQ6IF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRXh0R1N0YXRlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBFeHRHU3RhdGU6IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhyb3cgcmVhc29uO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMubW92ZVRvOlxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmxpbmVUbzpcbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jdXJ2ZVRvOlxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmN1cnZlVG8yOlxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmN1cnZlVG8zOlxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsb3NlUGF0aDpcbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5yZWN0YW5nbGU6XG4gICAgICAgICAgICBzZWxmLmJ1aWxkUGF0aChvcGVyYXRvckxpc3QsIGZuLCBhcmdzLCBwYXJzaW5nVGV4dCk7XG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLm1hcmtQb2ludDpcbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5tYXJrUG9pbnRQcm9wczpcbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5iZWdpbkNvbXBhdDpcbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5lbmRDb21wYXQ6XG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzOlxuICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShhcmdzWzBdKSkge1xuICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYEV4cGVjdGVkIG5hbWUgZm9yIGJlZ2luTWFya2VkQ29udGVudFByb3BzIGFyZzA9JHthcmdzWzBdfWApO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGFyZ3NbMF0ubmFtZSA9PT0gXCJPQ1wiKSB7XG4gICAgICAgICAgICAgIG5leHQoc2VsZi5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyhhcmdzWzFdLCByZXNvdXJjZXMpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcywgW1wiT0NcIiwgZGF0YV0pO1xuICAgICAgICAgICAgICB9KS5jYXRjaChyZWFzb24gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBfdXRpbC5BYm9ydEV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzZWxmLm9wdGlvbnMuaWdub3JlRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2VuZChcIlVuc3VwcG9ydGVkRmVhdHVyZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVJZDogX3V0aWwuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JNYXJrZWRDb250ZW50XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgYmVnaW5NYXJrZWRDb250ZW50UHJvcHM6IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhyb3cgcmVhc29uO1xuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXJncyA9IFthcmdzWzBdLm5hbWUsIGFyZ3NbMV0gaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0ID8gYXJnc1sxXS5nZXQoXCJNQ0lEXCIpIDogbnVsbF07XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmJlZ2luTWFya2VkQ29udGVudDpcbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5lbmRNYXJrZWRDb250ZW50OlxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoYXJncyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGFyZ3MubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzW2ldIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGkgPCBpaSkge1xuICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcImdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIG9wZXJhdG9yOiBcIiArIGZuKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoZm4sIGFyZ3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RvcCkge1xuICAgICAgICBuZXh0KGRlZmVycmVkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjbG9zZVBlbmRpbmdSZXN0b3JlT1BTKCk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBfdXRpbC5BYm9ydEV4Y2VwdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlci5zZW5kKFwiVW5zdXBwb3J0ZWRGZWF0dXJlXCIsIHtcbiAgICAgICAgICBmZWF0dXJlSWQ6IF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yT3BlcmF0b3JMaXN0XG4gICAgICAgIH0pO1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYGdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIGVycm9ycyBkdXJpbmcgXCIke3Rhc2submFtZX1cIiBgICsgYHRhc2s6IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgIGNsb3NlUGVuZGluZ1Jlc3RvcmVPUFMoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyByZWFzb247XG4gICAgfSk7XG4gIH1cblxuICBnZXRUZXh0Q29udGVudCh7XG4gICAgc3RyZWFtLFxuICAgIHRhc2ssXG4gICAgcmVzb3VyY2VzLFxuICAgIHN0YXRlTWFuYWdlciA9IG51bGwsXG4gICAgbm9ybWFsaXplV2hpdGVzcGFjZSA9IGZhbHNlLFxuICAgIGNvbWJpbmVUZXh0SXRlbXMgPSBmYWxzZSxcbiAgICBpbmNsdWRlTWFya2VkQ29udGVudCA9IGZhbHNlLFxuICAgIHNpbmssXG4gICAgc2VlblN0eWxlcyA9IG5ldyBTZXQoKVxuICB9KSB7XG4gICAgcmVzb3VyY2VzID0gcmVzb3VyY2VzIHx8IF9wcmltaXRpdmVzLkRpY3QuZW1wdHk7XG4gICAgc3RhdGVNYW5hZ2VyID0gc3RhdGVNYW5hZ2VyIHx8IG5ldyBTdGF0ZU1hbmFnZXIobmV3IFRleHRTdGF0ZSgpKTtcbiAgICBjb25zdCBXaGl0ZXNwYWNlUmVnZXhwID0gL1xccy9nO1xuICAgIGNvbnN0IERpYWNyaXRpY1JlZ0V4cCA9IG5ldyBSZWdFeHAoXCJeXFxcXHB7TW59JFwiLCBcInVcIik7XG4gICAgY29uc3QgTm9ybWFsaXplZFVuaWNvZGVzID0gKDAsIF91bmljb2RlLmdldE5vcm1hbGl6ZWRVbmljb2RlcykoKTtcbiAgICBjb25zdCB0ZXh0Q29udGVudCA9IHtcbiAgICAgIGl0ZW1zOiBbXSxcbiAgICAgIHN0eWxlczogT2JqZWN0LmNyZWF0ZShudWxsKVxuICAgIH07XG4gICAgY29uc3QgdGV4dENvbnRlbnRJdGVtID0ge1xuICAgICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLFxuICAgICAgc3RyOiBbXSxcbiAgICAgIHRvdGFsV2lkdGg6IDAsXG4gICAgICB0b3RhbEhlaWdodDogMCxcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgdmVydGljYWw6IGZhbHNlLFxuICAgICAgcHJldlRyYW5zZm9ybTogbnVsbCxcbiAgICAgIHRleHRBZHZhbmNlU2NhbGU6IDAsXG4gICAgICBzcGFjZUluRmxvd01pbjogMCxcbiAgICAgIHNwYWNlSW5GbG93TWF4OiAwLFxuICAgICAgdHJhY2tpbmdTcGFjZU1pbjogSW5maW5pdHksXG4gICAgICBuZWdhdGl2ZVNwYWNlTWF4OiAtSW5maW5pdHksXG4gICAgICB0cmFuc2Zvcm06IG51bGwsXG4gICAgICBmb250TmFtZTogbnVsbCxcbiAgICAgIGhhc0VPTDogZmFsc2VcbiAgICB9O1xuICAgIGNvbnN0IFRSQUNLSU5HX1NQQUNFX0ZBQ1RPUiA9IDAuMTtcbiAgICBjb25zdCBORUdBVElWRV9TUEFDRV9GQUNUT1IgPSAtMC4yO1xuICAgIGNvbnN0IFNQQUNFX0lOX0ZMT1dfTUlOX0ZBQ1RPUiA9IDAuMTtcbiAgICBjb25zdCBTUEFDRV9JTl9GTE9XX01BWF9GQUNUT1IgPSAwLjY7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgeHJlZiA9IHRoaXMueHJlZjtcbiAgICBjb25zdCBzaG93U3BhY2VkVGV4dEJ1ZmZlciA9IFtdO1xuICAgIGxldCB4b2JqcyA9IG51bGw7XG4gICAgY29uc3QgZW1wdHlYT2JqZWN0Q2FjaGUgPSBuZXcgX2ltYWdlX3V0aWxzLkxvY2FsSW1hZ2VDYWNoZSgpO1xuICAgIGNvbnN0IGVtcHR5R1N0YXRlQ2FjaGUgPSBuZXcgX2ltYWdlX3V0aWxzLkxvY2FsR1N0YXRlQ2FjaGUoKTtcbiAgICBjb25zdCBwcmVwcm9jZXNzb3IgPSBuZXcgRXZhbHVhdG9yUHJlcHJvY2Vzc29yKHN0cmVhbSwgeHJlZiwgc3RhdGVNYW5hZ2VyKTtcbiAgICBsZXQgdGV4dFN0YXRlO1xuXG4gICAgZnVuY3Rpb24gZ2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKSB7XG4gICAgICBjb25zdCBmb250ID0gdGV4dFN0YXRlLmZvbnQ7XG4gICAgICBjb25zdCB0c20gPSBbdGV4dFN0YXRlLmZvbnRTaXplICogdGV4dFN0YXRlLnRleHRIU2NhbGUsIDAsIDAsIHRleHRTdGF0ZS5mb250U2l6ZSwgMCwgdGV4dFN0YXRlLnRleHRSaXNlXTtcblxuICAgICAgaWYgKGZvbnQuaXNUeXBlM0ZvbnQgJiYgKHRleHRTdGF0ZS5mb250U2l6ZSA8PSAxIHx8IGZvbnQuaXNDaGFyQkJveCkgJiYgISgwLCBfdXRpbC5pc0FycmF5RXF1YWwpKHRleHRTdGF0ZS5mb250TWF0cml4LCBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWCkpIHtcbiAgICAgICAgY29uc3QgZ2x5cGhIZWlnaHQgPSBmb250LmJib3hbM10gLSBmb250LmJib3hbMV07XG5cbiAgICAgICAgaWYgKGdseXBoSGVpZ2h0ID4gMCkge1xuICAgICAgICAgIHRzbVszXSAqPSBnbHlwaEhlaWdodCAqIHRleHRTdGF0ZS5mb250TWF0cml4WzNdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdXRpbC5VdGlsLnRyYW5zZm9ybSh0ZXh0U3RhdGUuY3RtLCBfdXRpbC5VdGlsLnRyYW5zZm9ybSh0ZXh0U3RhdGUudGV4dE1hdHJpeCwgdHNtKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5zdXJlVGV4dENvbnRlbnRJdGVtKCkge1xuICAgICAgaWYgKHRleHRDb250ZW50SXRlbS5pbml0aWFsaXplZCkge1xuICAgICAgICByZXR1cm4gdGV4dENvbnRlbnRJdGVtO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb250ID0gdGV4dFN0YXRlLmZvbnQsXG4gICAgICAgICAgICBsb2FkZWROYW1lID0gZm9udC5sb2FkZWROYW1lO1xuXG4gICAgICBpZiAoIXNlZW5TdHlsZXMuaGFzKGxvYWRlZE5hbWUpKSB7XG4gICAgICAgIHNlZW5TdHlsZXMuYWRkKGxvYWRlZE5hbWUpO1xuICAgICAgICB0ZXh0Q29udGVudC5zdHlsZXNbbG9hZGVkTmFtZV0gPSB7XG4gICAgICAgICAgZm9udEZhbWlseTogZm9udC5mYWxsYmFja05hbWUsXG4gICAgICAgICAgYXNjZW50OiBmb250LmFzY2VudCxcbiAgICAgICAgICBkZXNjZW50OiBmb250LmRlc2NlbnQsXG4gICAgICAgICAgdmVydGljYWw6IGZvbnQudmVydGljYWxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdGV4dENvbnRlbnRJdGVtLmZvbnROYW1lID0gbG9hZGVkTmFtZTtcbiAgICAgIGNvbnN0IHRybSA9IHRleHRDb250ZW50SXRlbS50cmFuc2Zvcm0gPSBnZXRDdXJyZW50VGV4dFRyYW5zZm9ybSgpO1xuXG4gICAgICBpZiAoIWZvbnQudmVydGljYWwpIHtcbiAgICAgICAgdGV4dENvbnRlbnRJdGVtLndpZHRoID0gdGV4dENvbnRlbnRJdGVtLnRvdGFsV2lkdGggPSAwO1xuICAgICAgICB0ZXh0Q29udGVudEl0ZW0uaGVpZ2h0ID0gdGV4dENvbnRlbnRJdGVtLnRvdGFsSGVpZ2h0ID0gTWF0aC5oeXBvdCh0cm1bMl0sIHRybVszXSk7XG4gICAgICAgIHRleHRDb250ZW50SXRlbS52ZXJ0aWNhbCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dENvbnRlbnRJdGVtLndpZHRoID0gdGV4dENvbnRlbnRJdGVtLnRvdGFsV2lkdGggPSBNYXRoLmh5cG90KHRybVswXSwgdHJtWzFdKTtcbiAgICAgICAgdGV4dENvbnRlbnRJdGVtLmhlaWdodCA9IHRleHRDb250ZW50SXRlbS50b3RhbEhlaWdodCA9IDA7XG4gICAgICAgIHRleHRDb250ZW50SXRlbS52ZXJ0aWNhbCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNjYWxlTGluZVggPSBNYXRoLmh5cG90KHRleHRTdGF0ZS50ZXh0TGluZU1hdHJpeFswXSwgdGV4dFN0YXRlLnRleHRMaW5lTWF0cml4WzFdKTtcbiAgICAgIGNvbnN0IHNjYWxlQ3RtWCA9IE1hdGguaHlwb3QodGV4dFN0YXRlLmN0bVswXSwgdGV4dFN0YXRlLmN0bVsxXSk7XG4gICAgICB0ZXh0Q29udGVudEl0ZW0udGV4dEFkdmFuY2VTY2FsZSA9IHNjYWxlQ3RtWCAqIHNjYWxlTGluZVg7XG4gICAgICB0ZXh0Q29udGVudEl0ZW0udHJhY2tpbmdTcGFjZU1pbiA9IHRleHRTdGF0ZS5mb250U2l6ZSAqIFRSQUNLSU5HX1NQQUNFX0ZBQ1RPUjtcbiAgICAgIHRleHRDb250ZW50SXRlbS5uZWdhdGl2ZVNwYWNlTWF4ID0gdGV4dFN0YXRlLmZvbnRTaXplICogTkVHQVRJVkVfU1BBQ0VfRkFDVE9SO1xuICAgICAgdGV4dENvbnRlbnRJdGVtLnNwYWNlSW5GbG93TWluID0gdGV4dFN0YXRlLmZvbnRTaXplICogU1BBQ0VfSU5fRkxPV19NSU5fRkFDVE9SO1xuICAgICAgdGV4dENvbnRlbnRJdGVtLnNwYWNlSW5GbG93TWF4ID0gdGV4dFN0YXRlLmZvbnRTaXplICogU1BBQ0VfSU5fRkxPV19NQVhfRkFDVE9SO1xuICAgICAgdGV4dENvbnRlbnRJdGVtLmhhc0VPTCA9IGZhbHNlO1xuICAgICAgdGV4dENvbnRlbnRJdGVtLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0ZXh0Q29udGVudEl0ZW07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlQWR2YW5jZVNjYWxlKCkge1xuICAgICAgaWYgKCF0ZXh0Q29udGVudEl0ZW0uaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzY2FsZUxpbmVYID0gTWF0aC5oeXBvdCh0ZXh0U3RhdGUudGV4dExpbmVNYXRyaXhbMF0sIHRleHRTdGF0ZS50ZXh0TGluZU1hdHJpeFsxXSk7XG4gICAgICBjb25zdCBzY2FsZUN0bVggPSBNYXRoLmh5cG90KHRleHRTdGF0ZS5jdG1bMF0sIHRleHRTdGF0ZS5jdG1bMV0pO1xuICAgICAgY29uc3Qgc2NhbGVGYWN0b3IgPSBzY2FsZUN0bVggKiBzY2FsZUxpbmVYO1xuXG4gICAgICBpZiAoc2NhbGVGYWN0b3IgPT09IHRleHRDb250ZW50SXRlbS50ZXh0QWR2YW5jZVNjYWxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0ZXh0Q29udGVudEl0ZW0udmVydGljYWwpIHtcbiAgICAgICAgdGV4dENvbnRlbnRJdGVtLnRvdGFsV2lkdGggKz0gdGV4dENvbnRlbnRJdGVtLndpZHRoICogdGV4dENvbnRlbnRJdGVtLnRleHRBZHZhbmNlU2NhbGU7XG4gICAgICAgIHRleHRDb250ZW50SXRlbS53aWR0aCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0Q29udGVudEl0ZW0udG90YWxIZWlnaHQgKz0gdGV4dENvbnRlbnRJdGVtLmhlaWdodCAqIHRleHRDb250ZW50SXRlbS50ZXh0QWR2YW5jZVNjYWxlO1xuICAgICAgICB0ZXh0Q29udGVudEl0ZW0uaGVpZ2h0ID0gMDtcbiAgICAgIH1cblxuICAgICAgdGV4dENvbnRlbnRJdGVtLnRleHRBZHZhbmNlU2NhbGUgPSBzY2FsZUZhY3RvcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBsYWNlV2hpdGVzcGFjZShzdHIpIHtcbiAgICAgIGNvbnN0IGlpID0gc3RyLmxlbmd0aDtcbiAgICAgIGxldCBpID0gMCxcbiAgICAgICAgICBjb2RlO1xuXG4gICAgICB3aGlsZSAoaSA8IGlpICYmIChjb2RlID0gc3RyLmNoYXJDb2RlQXQoaSkpID49IDB4MjAgJiYgY29kZSA8PSAweDdmKSB7XG4gICAgICAgIGkrKztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGkgPCBpaSA/IHN0ci5yZXBsYWNlKFdoaXRlc3BhY2VSZWdleHAsIFwiIFwiKSA6IHN0cjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW5CaWRpVHJhbnNmb3JtKHRleHRDaHVuaykge1xuICAgICAgY29uc3QgdGV4dCA9IHRleHRDaHVuay5zdHIuam9pbihcIlwiKTtcbiAgICAgIGNvbnN0IGJpZGlSZXN1bHQgPSAoMCwgX2JpZGkuYmlkaSkodGV4dCwgLTEsIHRleHRDaHVuay52ZXJ0aWNhbCk7XG4gICAgICBjb25zdCBzdHIgPSBub3JtYWxpemVXaGl0ZXNwYWNlID8gcmVwbGFjZVdoaXRlc3BhY2UoYmlkaVJlc3VsdC5zdHIpIDogYmlkaVJlc3VsdC5zdHI7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdHIsXG4gICAgICAgIGRpcjogYmlkaVJlc3VsdC5kaXIsXG4gICAgICAgIHdpZHRoOiB0ZXh0Q2h1bmsudG90YWxXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiB0ZXh0Q2h1bmsudG90YWxIZWlnaHQsXG4gICAgICAgIHRyYW5zZm9ybTogdGV4dENodW5rLnRyYW5zZm9ybSxcbiAgICAgICAgZm9udE5hbWU6IHRleHRDaHVuay5mb250TmFtZSxcbiAgICAgICAgaGFzRU9MOiB0ZXh0Q2h1bmsuaGFzRU9MXG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVNldEZvbnQoZm9udE5hbWUsIGZvbnRSZWYpIHtcbiAgICAgIHJldHVybiBzZWxmLmxvYWRGb250KGZvbnROYW1lLCBmb250UmVmLCByZXNvdXJjZXMpLnRoZW4oZnVuY3Rpb24gKHRyYW5zbGF0ZWQpIHtcbiAgICAgICAgaWYgKCF0cmFuc2xhdGVkLmZvbnQuaXNUeXBlM0ZvbnQpIHtcbiAgICAgICAgICByZXR1cm4gdHJhbnNsYXRlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cmFuc2xhdGVkLmxvYWRUeXBlM0RhdGEoc2VsZiwgcmVzb3VyY2VzLCB0YXNrKS5jYXRjaChmdW5jdGlvbiAoKSB7fSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZWQ7XG4gICAgICAgIH0pO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAodHJhbnNsYXRlZCkge1xuICAgICAgICB0ZXh0U3RhdGUuZm9udCA9IHRyYW5zbGF0ZWQuZm9udDtcbiAgICAgICAgdGV4dFN0YXRlLmZvbnRNYXRyaXggPSB0cmFuc2xhdGVkLmZvbnQuZm9udE1hdHJpeCB8fCBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXBhcmVXaXRoTGFzdFBvc2l0aW9uKCkge1xuICAgICAgaWYgKCFjb21iaW5lVGV4dEl0ZW1zIHx8ICF0ZXh0U3RhdGUuZm9udCB8fCAhdGV4dENvbnRlbnRJdGVtLnByZXZUcmFuc2Zvcm0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50VHJhbnNmb3JtID0gZ2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKTtcbiAgICAgIGxldCBwb3NYID0gY3VycmVudFRyYW5zZm9ybVs0XTtcbiAgICAgIGxldCBwb3NZID0gY3VycmVudFRyYW5zZm9ybVs1XTtcbiAgICAgIGxldCBsYXN0UG9zWCA9IHRleHRDb250ZW50SXRlbS5wcmV2VHJhbnNmb3JtWzRdO1xuICAgICAgbGV0IGxhc3RQb3NZID0gdGV4dENvbnRlbnRJdGVtLnByZXZUcmFuc2Zvcm1bNV07XG5cbiAgICAgIGlmIChsYXN0UG9zWCA9PT0gcG9zWCAmJiBsYXN0UG9zWSA9PT0gcG9zWSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCByb3RhdGUgPSAwO1xuXG4gICAgICBpZiAoY3VycmVudFRyYW5zZm9ybVswXSAmJiBjdXJyZW50VHJhbnNmb3JtWzFdID09PSAwICYmIGN1cnJlbnRUcmFuc2Zvcm1bMl0gPT09IDApIHtcbiAgICAgICAgcm90YXRlID0gY3VycmVudFRyYW5zZm9ybVswXSA+IDAgPyAwIDogMTgwO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50VHJhbnNmb3JtWzFdICYmIGN1cnJlbnRUcmFuc2Zvcm1bMF0gPT09IDAgJiYgY3VycmVudFRyYW5zZm9ybVszXSA9PT0gMCkge1xuICAgICAgICByb3RhdGUgKz0gY3VycmVudFRyYW5zZm9ybVsxXSA+IDAgPyA5MCA6IDI3MDtcbiAgICAgIH1cblxuICAgICAgaWYgKHJvdGF0ZSAhPT0gMCkge1xuICAgICAgICBzd2l0Y2ggKHJvdGF0ZSkge1xuICAgICAgICAgIGNhc2UgOTA6XG4gICAgICAgICAgICBbcG9zWCwgcG9zWV0gPSBbcG9zWSwgcG9zWF07XG4gICAgICAgICAgICBbbGFzdFBvc1gsIGxhc3RQb3NZXSA9IFtsYXN0UG9zWSwgbGFzdFBvc1hdO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDE4MDpcbiAgICAgICAgICAgIFtwb3NYLCBwb3NZLCBsYXN0UG9zWCwgbGFzdFBvc1ldID0gWy1wb3NYLCAtcG9zWSwgLWxhc3RQb3NYLCAtbGFzdFBvc1ldO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDI3MDpcbiAgICAgICAgICAgIFtwb3NYLCBwb3NZXSA9IFstcG9zWSwgLXBvc1hdO1xuICAgICAgICAgICAgW2xhc3RQb3NYLCBsYXN0UG9zWV0gPSBbLWxhc3RQb3NZLCAtbGFzdFBvc1hdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRleHRTdGF0ZS5mb250LnZlcnRpY2FsKSB7XG4gICAgICAgIGNvbnN0IGFkdmFuY2VZID0gKGxhc3RQb3NZIC0gcG9zWSkgLyB0ZXh0Q29udGVudEl0ZW0udGV4dEFkdmFuY2VTY2FsZTtcbiAgICAgICAgY29uc3QgYWR2YW5jZVggPSBwb3NYIC0gbGFzdFBvc1g7XG5cbiAgICAgICAgaWYgKGFkdmFuY2VZIDwgdGV4dENvbnRlbnRJdGVtLm5lZ2F0aXZlU3BhY2VNYXgpIHtcbiAgICAgICAgICBpZiAoTWF0aC5hYnMoYWR2YW5jZVgpID4gMC41ICogdGV4dENvbnRlbnRJdGVtLndpZHRoKSB7XG4gICAgICAgICAgICBhcHBlbmRFT0woKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChNYXRoLmFicyhhZHZhbmNlWCkgPiB0ZXh0Q29udGVudEl0ZW0uaGVpZ2h0KSB7XG4gICAgICAgICAgYXBwZW5kRU9MKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFkdmFuY2VZIDw9IHRleHRDb250ZW50SXRlbS50cmFja2luZ1NwYWNlTWluKSB7XG4gICAgICAgICAgdGV4dENvbnRlbnRJdGVtLmhlaWdodCArPSBhZHZhbmNlWTtcbiAgICAgICAgfSBlbHNlIGlmICghYWRkRmFrZVNwYWNlcyhhZHZhbmNlWSwgdGV4dENvbnRlbnRJdGVtLnByZXZUcmFuc2Zvcm0pKSB7XG4gICAgICAgICAgaWYgKHRleHRDb250ZW50SXRlbS5zdHIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0ZXh0Q29udGVudC5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgc3RyOiBcIiBcIixcbiAgICAgICAgICAgICAgZGlyOiBcImx0clwiLFxuICAgICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBhZHZhbmNlWSxcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0ZXh0Q29udGVudEl0ZW0ucHJldlRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgZm9udE5hbWU6IHRleHRDb250ZW50SXRlbS5mb250TmFtZSxcbiAgICAgICAgICAgICAgaGFzRU9MOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS5oZWlnaHQgKz0gYWR2YW5jZVk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhZHZhbmNlWCA9IChwb3NYIC0gbGFzdFBvc1gpIC8gdGV4dENvbnRlbnRJdGVtLnRleHRBZHZhbmNlU2NhbGU7XG4gICAgICBjb25zdCBhZHZhbmNlWSA9IHBvc1kgLSBsYXN0UG9zWTtcblxuICAgICAgaWYgKGFkdmFuY2VYIDwgdGV4dENvbnRlbnRJdGVtLm5lZ2F0aXZlU3BhY2VNYXgpIHtcbiAgICAgICAgaWYgKE1hdGguYWJzKGFkdmFuY2VZKSA+IDAuNSAqIHRleHRDb250ZW50SXRlbS5oZWlnaHQpIHtcbiAgICAgICAgICBhcHBlbmRFT0woKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXRoLmFicyhhZHZhbmNlWSkgPiB0ZXh0Q29udGVudEl0ZW0uaGVpZ2h0KSB7XG4gICAgICAgIGFwcGVuZEVPTCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChhZHZhbmNlWCA8PSB0ZXh0Q29udGVudEl0ZW0udHJhY2tpbmdTcGFjZU1pbikge1xuICAgICAgICB0ZXh0Q29udGVudEl0ZW0ud2lkdGggKz0gYWR2YW5jZVg7XG4gICAgICB9IGVsc2UgaWYgKCFhZGRGYWtlU3BhY2VzKGFkdmFuY2VYLCB0ZXh0Q29udGVudEl0ZW0ucHJldlRyYW5zZm9ybSkpIHtcbiAgICAgICAgaWYgKHRleHRDb250ZW50SXRlbS5zdHIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGV4dENvbnRlbnQuaXRlbXMucHVzaCh7XG4gICAgICAgICAgICBzdHI6IFwiIFwiLFxuICAgICAgICAgICAgZGlyOiBcImx0clwiLFxuICAgICAgICAgICAgd2lkdGg6IGFkdmFuY2VYLFxuICAgICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgICAgdHJhbnNmb3JtOiB0ZXh0Q29udGVudEl0ZW0ucHJldlRyYW5zZm9ybSxcbiAgICAgICAgICAgIGZvbnROYW1lOiB0ZXh0Q29udGVudEl0ZW0uZm9udE5hbWUsXG4gICAgICAgICAgICBoYXNFT0w6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dENvbnRlbnRJdGVtLndpZHRoICs9IGFkdmFuY2VYO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRUZXh0Q29udGVudEl0ZW0oe1xuICAgICAgY2hhcnMsXG4gICAgICBleHRyYVNwYWNpbmdcbiAgICB9KSB7XG4gICAgICBjb25zdCBmb250ID0gdGV4dFN0YXRlLmZvbnQ7XG5cbiAgICAgIGlmICghY2hhcnMpIHtcbiAgICAgICAgY29uc3QgY2hhclNwYWNpbmcgPSB0ZXh0U3RhdGUuY2hhclNwYWNpbmcgKyBleHRyYVNwYWNpbmc7XG5cbiAgICAgICAgaWYgKGNoYXJTcGFjaW5nKSB7XG4gICAgICAgICAgaWYgKCFmb250LnZlcnRpY2FsKSB7XG4gICAgICAgICAgICB0ZXh0U3RhdGUudHJhbnNsYXRlVGV4dE1hdHJpeChjaGFyU3BhY2luZyAqIHRleHRTdGF0ZS50ZXh0SFNjYWxlLCAwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGV4dFN0YXRlLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCwgLWNoYXJTcGFjaW5nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdseXBocyA9IGZvbnQuY2hhcnNUb0dseXBocyhjaGFycyk7XG4gICAgICBjb25zdCBzY2FsZSA9IHRleHRTdGF0ZS5mb250TWF0cml4WzBdICogdGV4dFN0YXRlLmZvbnRTaXplO1xuXG4gICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBnbHlwaHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBjb25zdCBnbHlwaCA9IGdseXBoc1tpXTtcbiAgICAgICAgbGV0IGNoYXJTcGFjaW5nID0gdGV4dFN0YXRlLmNoYXJTcGFjaW5nICsgKGkgKyAxID09PSBpaSA/IGV4dHJhU3BhY2luZyA6IDApO1xuICAgICAgICBsZXQgZ2x5cGhXaWR0aCA9IGdseXBoLndpZHRoO1xuXG4gICAgICAgIGlmIChmb250LnZlcnRpY2FsKSB7XG4gICAgICAgICAgZ2x5cGhXaWR0aCA9IGdseXBoLnZtZXRyaWMgPyBnbHlwaC52bWV0cmljWzBdIDogLWdseXBoV2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc2NhbGVkRGltID0gZ2x5cGhXaWR0aCAqIHNjYWxlO1xuICAgICAgICBsZXQgZ2x5cGhVbmljb2RlID0gZ2x5cGgudW5pY29kZTtcblxuICAgICAgICBpZiAoZ2x5cGhVbmljb2RlID09PSBcIiBcIiAmJiAoaSA9PT0gMCB8fCBpICsgMSA9PT0gaWkgfHwgZ2x5cGhzW2kgLSAxXS51bmljb2RlID09PSBcIiBcIiB8fCBnbHlwaHNbaSArIDFdLnVuaWNvZGUgPT09IFwiIFwiIHx8IGV4dHJhU3BhY2luZykpIHtcbiAgICAgICAgICBpZiAoIWZvbnQudmVydGljYWwpIHtcbiAgICAgICAgICAgIGNoYXJTcGFjaW5nICs9IHNjYWxlZERpbSArIHRleHRTdGF0ZS53b3JkU3BhY2luZztcbiAgICAgICAgICAgIHRleHRTdGF0ZS50cmFuc2xhdGVUZXh0TWF0cml4KGNoYXJTcGFjaW5nICogdGV4dFN0YXRlLnRleHRIU2NhbGUsIDApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGFyU3BhY2luZyArPSAtc2NhbGVkRGltICsgdGV4dFN0YXRlLndvcmRTcGFjaW5nO1xuICAgICAgICAgICAgdGV4dFN0YXRlLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCwgLWNoYXJTcGFjaW5nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbXBhcmVXaXRoTGFzdFBvc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IHRleHRDaHVuayA9IGVuc3VyZVRleHRDb250ZW50SXRlbSgpO1xuXG4gICAgICAgIGlmIChEaWFjcml0aWNSZWdFeHAudGVzdChnbHlwaC51bmljb2RlKSkge1xuICAgICAgICAgIHNjYWxlZERpbSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWZvbnQudmVydGljYWwpIHtcbiAgICAgICAgICBzY2FsZWREaW0gKj0gdGV4dFN0YXRlLnRleHRIU2NhbGU7XG4gICAgICAgICAgdGV4dFN0YXRlLnRyYW5zbGF0ZVRleHRNYXRyaXgoc2NhbGVkRGltLCAwKTtcbiAgICAgICAgICB0ZXh0Q2h1bmsud2lkdGggKz0gc2NhbGVkRGltO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRleHRTdGF0ZS50cmFuc2xhdGVUZXh0TWF0cml4KDAsIHNjYWxlZERpbSk7XG4gICAgICAgICAgc2NhbGVkRGltID0gTWF0aC5hYnMoc2NhbGVkRGltKTtcbiAgICAgICAgICB0ZXh0Q2h1bmsuaGVpZ2h0ICs9IHNjYWxlZERpbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzY2FsZWREaW0pIHtcbiAgICAgICAgICB0ZXh0Q2h1bmsucHJldlRyYW5zZm9ybSA9IGdldEN1cnJlbnRUZXh0VHJhbnNmb3JtKCk7XG4gICAgICAgIH1cblxuICAgICAgICBnbHlwaFVuaWNvZGUgPSBOb3JtYWxpemVkVW5pY29kZXNbZ2x5cGhVbmljb2RlXSB8fCBnbHlwaFVuaWNvZGU7XG4gICAgICAgIGdseXBoVW5pY29kZSA9ICgwLCBfdW5pY29kZS5yZXZlcnNlSWZSdGwpKGdseXBoVW5pY29kZSk7XG4gICAgICAgIHRleHRDaHVuay5zdHIucHVzaChnbHlwaFVuaWNvZGUpO1xuXG4gICAgICAgIGlmIChjaGFyU3BhY2luZykge1xuICAgICAgICAgIGlmICghZm9udC52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgdGV4dFN0YXRlLnRyYW5zbGF0ZVRleHRNYXRyaXgoY2hhclNwYWNpbmcgKiB0ZXh0U3RhdGUudGV4dEhTY2FsZSwgMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRleHRTdGF0ZS50cmFuc2xhdGVUZXh0TWF0cml4KDAsIC1jaGFyU3BhY2luZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXBwZW5kRU9MKCkge1xuICAgICAgaWYgKHRleHRDb250ZW50SXRlbS5pbml0aWFsaXplZCkge1xuICAgICAgICB0ZXh0Q29udGVudEl0ZW0uaGFzRU9MID0gdHJ1ZTtcbiAgICAgICAgZmx1c2hUZXh0Q29udGVudEl0ZW0oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHRDb250ZW50Lml0ZW1zLnB1c2goe1xuICAgICAgICAgIHN0cjogXCJcIixcbiAgICAgICAgICBkaXI6IFwibHRyXCIsXG4gICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgIHRyYW5zZm9ybTogZ2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKSxcbiAgICAgICAgICBmb250TmFtZTogdGV4dFN0YXRlLmZvbnQubG9hZGVkTmFtZSxcbiAgICAgICAgICBoYXNFT0w6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkRmFrZVNwYWNlcyh3aWR0aCwgdHJhbnNmKSB7XG4gICAgICBpZiAodGV4dENvbnRlbnRJdGVtLnNwYWNlSW5GbG93TWluIDw9IHdpZHRoICYmIHdpZHRoIDw9IHRleHRDb250ZW50SXRlbS5zcGFjZUluRmxvd01heCkge1xuICAgICAgICBpZiAodGV4dENvbnRlbnRJdGVtLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgdGV4dENvbnRlbnRJdGVtLnN0ci5wdXNoKFwiIFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9udE5hbWUgPSB0ZXh0Q29udGVudEl0ZW0uZm9udE5hbWU7XG4gICAgICBsZXQgaGVpZ2h0ID0gMDtcblxuICAgICAgaWYgKHRleHRDb250ZW50SXRlbS52ZXJ0aWNhbCkge1xuICAgICAgICBoZWlnaHQgPSB3aWR0aDtcbiAgICAgICAgd2lkdGggPSAwO1xuICAgICAgfVxuXG4gICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgdGV4dENvbnRlbnQuaXRlbXMucHVzaCh7XG4gICAgICAgIHN0cjogXCIgXCIsXG4gICAgICAgIGRpcjogXCJsdHJcIixcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2YgfHwgZ2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKSxcbiAgICAgICAgZm9udE5hbWUsXG4gICAgICAgIGhhc0VPTDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmx1c2hUZXh0Q29udGVudEl0ZW0oKSB7XG4gICAgICBpZiAoIXRleHRDb250ZW50SXRlbS5pbml0aWFsaXplZCB8fCAhdGV4dENvbnRlbnRJdGVtLnN0cikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghdGV4dENvbnRlbnRJdGVtLnZlcnRpY2FsKSB7XG4gICAgICAgIHRleHRDb250ZW50SXRlbS50b3RhbFdpZHRoICs9IHRleHRDb250ZW50SXRlbS53aWR0aCAqIHRleHRDb250ZW50SXRlbS50ZXh0QWR2YW5jZVNjYWxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dENvbnRlbnRJdGVtLnRvdGFsSGVpZ2h0ICs9IHRleHRDb250ZW50SXRlbS5oZWlnaHQgKiB0ZXh0Q29udGVudEl0ZW0udGV4dEFkdmFuY2VTY2FsZTtcbiAgICAgIH1cblxuICAgICAgdGV4dENvbnRlbnQuaXRlbXMucHVzaChydW5CaWRpVHJhbnNmb3JtKHRleHRDb250ZW50SXRlbSkpO1xuICAgICAgdGV4dENvbnRlbnRJdGVtLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICB0ZXh0Q29udGVudEl0ZW0uc3RyLmxlbmd0aCA9IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZUNodW5rKGJhdGNoID0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IGxlbmd0aCA9IHRleHRDb250ZW50Lml0ZW1zLmxlbmd0aDtcblxuICAgICAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChiYXRjaCAmJiBsZW5ndGggPCBURVhUX0NIVU5LX0JBVENIX1NJWkUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzaW5rLmVucXVldWUodGV4dENvbnRlbnQsIGxlbmd0aCk7XG4gICAgICB0ZXh0Q29udGVudC5pdGVtcyA9IFtdO1xuICAgICAgdGV4dENvbnRlbnQuc3R5bGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lU2xvdE1hbmFnZXIgPSBuZXcgVGltZVNsb3RNYW5hZ2VyKCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VCb2R5KHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgY29uc3QgbmV4dCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIGVucXVldWVDaHVuayh0cnVlKTtcbiAgICAgICAgUHJvbWlzZS5hbGwoW3Byb21pc2UsIHNpbmsucmVhZHldKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvbWlzZUJvZHkocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgcmVqZWN0KGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9O1xuXG4gICAgICB0YXNrLmVuc3VyZU5vdFRlcm1pbmF0ZWQoKTtcbiAgICAgIHRpbWVTbG90TWFuYWdlci5yZXNldCgpO1xuICAgICAgY29uc3Qgb3BlcmF0aW9uID0ge307XG4gICAgICBsZXQgc3RvcCxcbiAgICAgICAgICBhcmdzID0gW107XG5cbiAgICAgIHdoaWxlICghKHN0b3AgPSB0aW1lU2xvdE1hbmFnZXIuY2hlY2soKSkpIHtcbiAgICAgICAgYXJncy5sZW5ndGggPSAwO1xuICAgICAgICBvcGVyYXRpb24uYXJncyA9IGFyZ3M7XG5cbiAgICAgICAgaWYgKCFwcmVwcm9jZXNzb3IucmVhZChvcGVyYXRpb24pKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0ZXh0U3RhdGUgPSBzdGF0ZU1hbmFnZXIuc3RhdGU7XG4gICAgICAgIGNvbnN0IGZuID0gb3BlcmF0aW9uLmZuO1xuICAgICAgICBhcmdzID0gb3BlcmF0aW9uLmFyZ3M7XG5cbiAgICAgICAgc3dpdGNoIChmbiB8IDApIHtcbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGb250OlxuICAgICAgICAgICAgdmFyIGZvbnROYW1lQXJnID0gYXJnc1swXS5uYW1lLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplQXJnID0gYXJnc1sxXTtcblxuICAgICAgICAgICAgaWYgKHRleHRTdGF0ZS5mb250ICYmIGZvbnROYW1lQXJnID09PSB0ZXh0U3RhdGUuZm9udE5hbWUgJiYgZm9udFNpemVBcmcgPT09IHRleHRTdGF0ZS5mb250U2l6ZSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmx1c2hUZXh0Q29udGVudEl0ZW0oKTtcbiAgICAgICAgICAgIHRleHRTdGF0ZS5mb250TmFtZSA9IGZvbnROYW1lQXJnO1xuICAgICAgICAgICAgdGV4dFN0YXRlLmZvbnRTaXplID0gZm9udFNpemVBcmc7XG4gICAgICAgICAgICBuZXh0KGhhbmRsZVNldEZvbnQoZm9udE5hbWVBcmcsIG51bGwpKTtcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFRleHRSaXNlOlxuICAgICAgICAgICAgdGV4dFN0YXRlLnRleHRSaXNlID0gYXJnc1swXTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0SFNjYWxlOlxuICAgICAgICAgICAgdGV4dFN0YXRlLnRleHRIU2NhbGUgPSBhcmdzWzBdIC8gMTAwO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRMZWFkaW5nOlxuICAgICAgICAgICAgdGV4dFN0YXRlLmxlYWRpbmcgPSBhcmdzWzBdO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5tb3ZlVGV4dDpcbiAgICAgICAgICAgIHRleHRTdGF0ZS50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgIHRleHRTdGF0ZS50ZXh0TWF0cml4ID0gdGV4dFN0YXRlLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldExlYWRpbmdNb3ZlVGV4dDpcbiAgICAgICAgICAgIHRleHRTdGF0ZS5sZWFkaW5nID0gLWFyZ3NbMV07XG4gICAgICAgICAgICB0ZXh0U3RhdGUudHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICB0ZXh0U3RhdGUudGV4dE1hdHJpeCA9IHRleHRTdGF0ZS50ZXh0TGluZU1hdHJpeC5zbGljZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5uZXh0TGluZTpcbiAgICAgICAgICAgIHRleHRTdGF0ZS5jYXJyaWFnZVJldHVybigpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRUZXh0TWF0cml4OlxuICAgICAgICAgICAgdGV4dFN0YXRlLnNldFRleHRNYXRyaXgoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSk7XG4gICAgICAgICAgICB0ZXh0U3RhdGUuc2V0VGV4dExpbmVNYXRyaXgoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSk7XG4gICAgICAgICAgICB1cGRhdGVBZHZhbmNlU2NhbGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0Q2hhclNwYWNpbmc6XG4gICAgICAgICAgICB0ZXh0U3RhdGUuY2hhclNwYWNpbmcgPSBhcmdzWzBdO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRXb3JkU3BhY2luZzpcbiAgICAgICAgICAgIHRleHRTdGF0ZS53b3JkU3BhY2luZyA9IGFyZ3NbMF07XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmJlZ2luVGV4dDpcbiAgICAgICAgICAgIHRleHRTdGF0ZS50ZXh0TWF0cml4ID0gX3V0aWwuSURFTlRJVFlfTUFUUklYLnNsaWNlKCk7XG4gICAgICAgICAgICB0ZXh0U3RhdGUudGV4dExpbmVNYXRyaXggPSBfdXRpbC5JREVOVElUWV9NQVRSSVguc2xpY2UoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2hvd1NwYWNlZFRleHQ6XG4gICAgICAgICAgICBpZiAoIXN0YXRlTWFuYWdlci5zdGF0ZS5mb250KSB7XG4gICAgICAgICAgICAgIHNlbGYuZW5zdXJlU3RhdGVGb250KHN0YXRlTWFuYWdlci5zdGF0ZSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzcGFjZUZhY3RvciA9ICh0ZXh0U3RhdGUuZm9udC52ZXJ0aWNhbCA/IDEgOiAtMSkgKiB0ZXh0U3RhdGUuZm9udFNpemUgLyAxMDAwO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBhcmdzWzBdO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBlbGVtZW50cy5sZW5ndGg7IGkgPCBpaSAtIDE7IGkrKykge1xuICAgICAgICAgICAgICBjb25zdCBpdGVtID0gZWxlbWVudHNbaV07XG5cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgc2hvd1NwYWNlZFRleHRCdWZmZXIucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJudW1iZXJcIiAmJiBpdGVtICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyID0gc2hvd1NwYWNlZFRleHRCdWZmZXIuam9pbihcIlwiKTtcbiAgICAgICAgICAgICAgICBzaG93U3BhY2VkVGV4dEJ1ZmZlci5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgIGJ1aWxkVGV4dENvbnRlbnRJdGVtKHtcbiAgICAgICAgICAgICAgICAgIGNoYXJzOiBzdHIsXG4gICAgICAgICAgICAgICAgICBleHRyYVNwYWNpbmc6IGl0ZW0gKiBzcGFjZUZhY3RvclxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBlbGVtZW50c1tlbGVtZW50cy5sZW5ndGggLSAxXTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgIHNob3dTcGFjZWRUZXh0QnVmZmVyLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaG93U3BhY2VkVGV4dEJ1ZmZlci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN0ciA9IHNob3dTcGFjZWRUZXh0QnVmZmVyLmpvaW4oXCJcIik7XG4gICAgICAgICAgICAgIHNob3dTcGFjZWRUZXh0QnVmZmVyLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgIGJ1aWxkVGV4dENvbnRlbnRJdGVtKHtcbiAgICAgICAgICAgICAgICBjaGFyczogc3RyLFxuICAgICAgICAgICAgICAgIGV4dHJhU3BhY2luZzogMFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zaG93VGV4dDpcbiAgICAgICAgICAgIGlmICghc3RhdGVNYW5hZ2VyLnN0YXRlLmZvbnQpIHtcbiAgICAgICAgICAgICAgc2VsZi5lbnN1cmVTdGF0ZUZvbnQoc3RhdGVNYW5hZ2VyLnN0YXRlKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJ1aWxkVGV4dENvbnRlbnRJdGVtKHtcbiAgICAgICAgICAgICAgY2hhcnM6IGFyZ3NbMF0sXG4gICAgICAgICAgICAgIGV4dHJhU3BhY2luZzogMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLm5leHRMaW5lU2hvd1RleHQ6XG4gICAgICAgICAgICBpZiAoIXN0YXRlTWFuYWdlci5zdGF0ZS5mb250KSB7XG4gICAgICAgICAgICAgIHNlbGYuZW5zdXJlU3RhdGVGb250KHN0YXRlTWFuYWdlci5zdGF0ZSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0ZXh0U3RhdGUuY2FycmlhZ2VSZXR1cm4oKTtcbiAgICAgICAgICAgIGJ1aWxkVGV4dENvbnRlbnRJdGVtKHtcbiAgICAgICAgICAgICAgY2hhcnM6IGFyZ3NbMF0sXG4gICAgICAgICAgICAgIGV4dHJhU3BhY2luZzogMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLm5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0OlxuICAgICAgICAgICAgaWYgKCFzdGF0ZU1hbmFnZXIuc3RhdGUuZm9udCkge1xuICAgICAgICAgICAgICBzZWxmLmVuc3VyZVN0YXRlRm9udChzdGF0ZU1hbmFnZXIuc3RhdGUpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGV4dFN0YXRlLndvcmRTcGFjaW5nID0gYXJnc1swXTtcbiAgICAgICAgICAgIHRleHRTdGF0ZS5jaGFyU3BhY2luZyA9IGFyZ3NbMV07XG4gICAgICAgICAgICB0ZXh0U3RhdGUuY2FycmlhZ2VSZXR1cm4oKTtcbiAgICAgICAgICAgIGJ1aWxkVGV4dENvbnRlbnRJdGVtKHtcbiAgICAgICAgICAgICAgY2hhcnM6IGFyZ3NbMl0sXG4gICAgICAgICAgICAgIGV4dHJhU3BhY2luZzogMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50WE9iamVjdDpcbiAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG5cbiAgICAgICAgICAgIGlmICgheG9ianMpIHtcbiAgICAgICAgICAgICAgeG9ianMgPSByZXNvdXJjZXMuZ2V0KFwiWE9iamVjdFwiKSB8fCBfcHJpbWl0aXZlcy5EaWN0LmVtcHR5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgaXNWYWxpZE5hbWUgPSBhcmdzWzBdIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuTmFtZTtcbiAgICAgICAgICAgIHZhciBuYW1lID0gYXJnc1swXS5uYW1lO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZE5hbWUgJiYgZW1wdHlYT2JqZWN0Q2FjaGUuZ2V0QnlOYW1lKG5hbWUpKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXh0KG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlWE9iamVjdCwgcmVqZWN0WE9iamVjdCkge1xuICAgICAgICAgICAgICBpZiAoIWlzVmFsaWROYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiWE9iamVjdCBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuXCIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbGV0IHhvYmogPSB4b2Jqcy5nZXRSYXcobmFtZSk7XG5cbiAgICAgICAgICAgICAgaWYgKHhvYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgICAgICAgICAgICBpZiAoZW1wdHlYT2JqZWN0Q2FjaGUuZ2V0QnlSZWYoeG9iaikpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVYT2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZ2xvYmFsSW1hZ2UgPSBzZWxmLmdsb2JhbEltYWdlQ2FjaGUuZ2V0RGF0YSh4b2JqLCBzZWxmLnBhZ2VJbmRleCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsSW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVYT2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgeG9iaiA9IHhyZWYuZmV0Y2goeG9iaik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoeG9iaikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJYT2JqZWN0IHNob3VsZCBiZSBhIHN0cmVhbVwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB4b2JqLmRpY3QuZ2V0KFwiU3VidHlwZVwiKTtcblxuICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiWE9iamVjdCBzaG91bGQgaGF2ZSBhIE5hbWUgc3VidHlwZVwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0eXBlLm5hbWUgIT09IFwiRm9ybVwiKSB7XG4gICAgICAgICAgICAgICAgZW1wdHlYT2JqZWN0Q2FjaGUuc2V0KG5hbWUsIHhvYmouZGljdC5vYmpJZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZVhPYmplY3QoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBzdGF0ZU1hbmFnZXIuc3RhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgY29uc3QgeE9ialN0YXRlTWFuYWdlciA9IG5ldyBTdGF0ZU1hbmFnZXIoY3VycmVudFN0YXRlKTtcbiAgICAgICAgICAgICAgY29uc3QgbWF0cml4ID0geG9iai5kaWN0LmdldEFycmF5KFwiTWF0cml4XCIpO1xuXG4gICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1hdHJpeCkgJiYgbWF0cml4Lmxlbmd0aCA9PT0gNikge1xuICAgICAgICAgICAgICAgIHhPYmpTdGF0ZU1hbmFnZXIudHJhbnNmb3JtKG1hdHJpeCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBlbnF1ZXVlQ2h1bmsoKTtcbiAgICAgICAgICAgICAgY29uc3Qgc2lua1dyYXBwZXIgPSB7XG4gICAgICAgICAgICAgICAgZW5xdWV1ZUludm9rZWQ6IGZhbHNlLFxuXG4gICAgICAgICAgICAgICAgZW5xdWV1ZShjaHVuaywgc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5lbnF1ZXVlSW52b2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBzaW5rLmVucXVldWUoY2h1bmssIHNpemUpO1xuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBnZXQgZGVzaXJlZFNpemUoKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gc2luay5kZXNpcmVkU2l6ZTtcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgZ2V0IHJlYWR5KCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHNpbmsucmVhZHk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHNlbGYuZ2V0VGV4dENvbnRlbnQoe1xuICAgICAgICAgICAgICAgIHN0cmVhbTogeG9iaixcbiAgICAgICAgICAgICAgICB0YXNrLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogeG9iai5kaWN0LmdldChcIlJlc291cmNlc1wiKSB8fCByZXNvdXJjZXMsXG4gICAgICAgICAgICAgICAgc3RhdGVNYW5hZ2VyOiB4T2JqU3RhdGVNYW5hZ2VyLFxuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZVdoaXRlc3BhY2UsXG4gICAgICAgICAgICAgICAgY29tYmluZVRleHRJdGVtcyxcbiAgICAgICAgICAgICAgICBpbmNsdWRlTWFya2VkQ29udGVudCxcbiAgICAgICAgICAgICAgICBzaW5rOiBzaW5rV3JhcHBlcixcbiAgICAgICAgICAgICAgICBzZWVuU3R5bGVzXG4gICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghc2lua1dyYXBwZXIuZW5xdWV1ZUludm9rZWQpIHtcbiAgICAgICAgICAgICAgICAgIGVtcHR5WE9iamVjdENhY2hlLnNldChuYW1lLCB4b2JqLmRpY3Qub2JqSWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmVYT2JqZWN0KCk7XG4gICAgICAgICAgICAgIH0sIHJlamVjdFhPYmplY3QpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICBpZiAocmVhc29uIGluc3RhbmNlb2YgX3V0aWwuQWJvcnRFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoc2VsZi5vcHRpb25zLmlnbm9yZUVycm9ycykge1xuICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgZ2V0VGV4dENvbnRlbnQgLSBpZ25vcmluZyBYT2JqZWN0OiBcIiR7cmVhc29ufVwiLmApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEdTdGF0ZTpcbiAgICAgICAgICAgIGlzVmFsaWROYW1lID0gYXJnc1swXSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLk5hbWU7XG4gICAgICAgICAgICBuYW1lID0gYXJnc1swXS5uYW1lO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZE5hbWUgJiYgZW1wdHlHU3RhdGVDYWNoZS5nZXRCeU5hbWUobmFtZSkpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQobmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmVHU3RhdGUsIHJlamVjdEdTdGF0ZSkge1xuICAgICAgICAgICAgICBpZiAoIWlzVmFsaWROYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiR1N0YXRlIG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS5cIik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBleHRHU3RhdGUgPSByZXNvdXJjZXMuZ2V0KFwiRXh0R1N0YXRlXCIpO1xuXG4gICAgICAgICAgICAgIGlmICghKGV4dEdTdGF0ZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiRXh0R1N0YXRlIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkuXCIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgZ1N0YXRlID0gZXh0R1N0YXRlLmdldChuYW1lKTtcblxuICAgICAgICAgICAgICBpZiAoIShnU3RhdGUgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LlwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGdTdGF0ZUZvbnQgPSBnU3RhdGUuZ2V0KFwiRm9udFwiKTtcblxuICAgICAgICAgICAgICBpZiAoIWdTdGF0ZUZvbnQpIHtcbiAgICAgICAgICAgICAgICBlbXB0eUdTdGF0ZUNhY2hlLnNldChuYW1lLCBnU3RhdGUub2JqSWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIHJlc29sdmVHU3RhdGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICB0ZXh0U3RhdGUuZm9udE5hbWUgPSBudWxsO1xuICAgICAgICAgICAgICB0ZXh0U3RhdGUuZm9udFNpemUgPSBnU3RhdGVGb250WzFdO1xuICAgICAgICAgICAgICBoYW5kbGVTZXRGb250KG51bGwsIGdTdGF0ZUZvbnRbMF0pLnRoZW4ocmVzb2x2ZUdTdGF0ZSwgcmVqZWN0R1N0YXRlKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLkFib3J0RXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYGdldFRleHRDb250ZW50IC0gaWdub3JpbmcgRXh0R1N0YXRlOiBcIiR7cmVhc29ufVwiLmApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmJlZ2luTWFya2VkQ29udGVudDpcbiAgICAgICAgICAgIGlmIChpbmNsdWRlTWFya2VkQ29udGVudCkge1xuICAgICAgICAgICAgICB0ZXh0Q29udGVudC5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImJlZ2luTWFya2VkQ29udGVudFwiLFxuICAgICAgICAgICAgICAgIHRhZzogKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoYXJnc1swXSkgPyBhcmdzWzBdLm5hbWUgOiBudWxsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzOlxuICAgICAgICAgICAgaWYgKGluY2x1ZGVNYXJrZWRDb250ZW50KSB7XG4gICAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgICAgICAgIGxldCBtY2lkID0gbnVsbDtcblxuICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoYXJnc1sxXSkpIHtcbiAgICAgICAgICAgICAgICBtY2lkID0gYXJnc1sxXS5nZXQoXCJNQ0lEXCIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGV4dENvbnRlbnQuaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJiZWdpbk1hcmtlZENvbnRlbnRQcm9wc1wiLFxuICAgICAgICAgICAgICAgIGlkOiBOdW1iZXIuaXNJbnRlZ2VyKG1jaWQpID8gYCR7c2VsZi5pZEZhY3RvcnkuZ2V0UGFnZU9iaklkKCl9X21jaWQke21jaWR9YCA6IG51bGwsXG4gICAgICAgICAgICAgICAgdGFnOiAoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShhcmdzWzBdKSA/IGFyZ3NbMF0ubmFtZSA6IG51bGxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuZW5kTWFya2VkQ29udGVudDpcbiAgICAgICAgICAgIGlmIChpbmNsdWRlTWFya2VkQ29udGVudCkge1xuICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICB0ZXh0Q29udGVudC5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImVuZE1hcmtlZENvbnRlbnRcIlxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGV4dENvbnRlbnQuaXRlbXMubGVuZ3RoID49IHNpbmsuZGVzaXJlZFNpemUpIHtcbiAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3RvcCkge1xuICAgICAgICBuZXh0KGRlZmVycmVkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgZW5xdWV1ZUNodW5rKCk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBfdXRpbC5BYm9ydEV4Y2VwdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgZ2V0VGV4dENvbnRlbnQgLSBpZ25vcmluZyBlcnJvcnMgZHVyaW5nIFwiJHt0YXNrLm5hbWV9XCIgYCArIGB0YXNrOiBcIiR7cmVhc29ufVwiLmApO1xuICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICBlbnF1ZXVlQ2h1bmsoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyByZWFzb247XG4gICAgfSk7XG4gIH1cblxuICBleHRyYWN0RGF0YVN0cnVjdHVyZXMoZGljdCwgYmFzZURpY3QsIHByb3BlcnRpZXMpIHtcbiAgICBjb25zdCB4cmVmID0gdGhpcy54cmVmO1xuICAgIGxldCBjaWRUb0dpZEJ5dGVzO1xuICAgIGNvbnN0IHRvVW5pY29kZVByb21pc2UgPSB0aGlzLnJlYWRUb1VuaWNvZGUocHJvcGVydGllcy50b1VuaWNvZGUgfHwgZGljdC5nZXQoXCJUb1VuaWNvZGVcIikgfHwgYmFzZURpY3QuZ2V0KFwiVG9Vbmljb2RlXCIpKTtcblxuICAgIGlmIChwcm9wZXJ0aWVzLmNvbXBvc2l0ZSkge1xuICAgICAgY29uc3QgY2lkU3lzdGVtSW5mbyA9IGRpY3QuZ2V0KFwiQ0lEU3lzdGVtSW5mb1wiKTtcblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGNpZFN5c3RlbUluZm8pKSB7XG4gICAgICAgIHByb3BlcnRpZXMuY2lkU3lzdGVtSW5mbyA9IHtcbiAgICAgICAgICByZWdpc3RyeTogKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShjaWRTeXN0ZW1JbmZvLmdldChcIlJlZ2lzdHJ5XCIpKSxcbiAgICAgICAgICBvcmRlcmluZzogKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShjaWRTeXN0ZW1JbmZvLmdldChcIk9yZGVyaW5nXCIpKSxcbiAgICAgICAgICBzdXBwbGVtZW50OiBjaWRTeXN0ZW1JbmZvLmdldChcIlN1cHBsZW1lbnRcIilcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2lkVG9HaWRNYXAgPSBkaWN0LmdldChcIkNJRFRvR0lETWFwXCIpO1xuXG4gICAgICBpZiAoY2lkVG9HaWRNYXAgaW5zdGFuY2VvZiBfYmFzZV9zdHJlYW0uQmFzZVN0cmVhbSkge1xuICAgICAgICBjaWRUb0dpZEJ5dGVzID0gY2lkVG9HaWRNYXAuZ2V0Qnl0ZXMoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkaWZmZXJlbmNlcyA9IFtdO1xuICAgIGxldCBiYXNlRW5jb2RpbmdOYW1lID0gbnVsbDtcbiAgICBsZXQgZW5jb2Rpbmc7XG5cbiAgICBpZiAoZGljdC5oYXMoXCJFbmNvZGluZ1wiKSkge1xuICAgICAgZW5jb2RpbmcgPSBkaWN0LmdldChcIkVuY29kaW5nXCIpO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZW5jb2RpbmcpKSB7XG4gICAgICAgIGJhc2VFbmNvZGluZ05hbWUgPSBlbmNvZGluZy5nZXQoXCJCYXNlRW5jb2RpbmdcIik7XG4gICAgICAgIGJhc2VFbmNvZGluZ05hbWUgPSAoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShiYXNlRW5jb2RpbmdOYW1lKSA/IGJhc2VFbmNvZGluZ05hbWUubmFtZSA6IG51bGw7XG5cbiAgICAgICAgaWYgKGVuY29kaW5nLmhhcyhcIkRpZmZlcmVuY2VzXCIpKSB7XG4gICAgICAgICAgY29uc3QgZGlmZkVuY29kaW5nID0gZW5jb2RpbmcuZ2V0KFwiRGlmZmVyZW5jZXNcIik7XG4gICAgICAgICAgbGV0IGluZGV4ID0gMDtcblxuICAgICAgICAgIGZvciAobGV0IGogPSAwLCBqaiA9IGRpZmZFbmNvZGluZy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0geHJlZi5mZXRjaElmUmVmKGRpZmZFbmNvZGluZ1tqXSk7XG5cbiAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNOdW0pKGRhdGEpKSB7XG4gICAgICAgICAgICAgIGluZGV4ID0gZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGlmZmVyZW5jZXNbaW5kZXgrK10gPSBkYXRhLm5hbWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEludmFsaWQgZW50cnkgaW4gJ0RpZmZlcmVuY2VzJyBhcnJheTogJHtkYXRhfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShlbmNvZGluZykpIHtcbiAgICAgICAgYmFzZUVuY29kaW5nTmFtZSA9IGVuY29kaW5nLm5hbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJFbmNvZGluZyBpcyBub3QgYSBOYW1lIG5vciBhIERpY3RcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChiYXNlRW5jb2RpbmdOYW1lICE9PSBcIk1hY1JvbWFuRW5jb2RpbmdcIiAmJiBiYXNlRW5jb2RpbmdOYW1lICE9PSBcIk1hY0V4cGVydEVuY29kaW5nXCIgJiYgYmFzZUVuY29kaW5nTmFtZSAhPT0gXCJXaW5BbnNpRW5jb2RpbmdcIikge1xuICAgICAgICBiYXNlRW5jb2RpbmdOYW1lID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYmFzZUVuY29kaW5nTmFtZSkge1xuICAgICAgcHJvcGVydGllcy5kZWZhdWx0RW5jb2RpbmcgPSAoMCwgX2VuY29kaW5ncy5nZXRFbmNvZGluZykoYmFzZUVuY29kaW5nTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGlzU3ltYm9saWNGb250ID0gISEocHJvcGVydGllcy5mbGFncyAmIF9mb250c191dGlscy5Gb250RmxhZ3MuU3ltYm9saWMpO1xuICAgICAgY29uc3QgaXNOb25zeW1ib2xpY0ZvbnQgPSAhIShwcm9wZXJ0aWVzLmZsYWdzICYgX2ZvbnRzX3V0aWxzLkZvbnRGbGFncy5Ob25zeW1ib2xpYyk7XG4gICAgICBlbmNvZGluZyA9IF9lbmNvZGluZ3MuU3RhbmRhcmRFbmNvZGluZztcblxuICAgICAgaWYgKHByb3BlcnRpZXMudHlwZSA9PT0gXCJUcnVlVHlwZVwiICYmICFpc05vbnN5bWJvbGljRm9udCkge1xuICAgICAgICBlbmNvZGluZyA9IF9lbmNvZGluZ3MuV2luQW5zaUVuY29kaW5nO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNTeW1ib2xpY0ZvbnQpIHtcbiAgICAgICAgZW5jb2RpbmcgPSBfZW5jb2RpbmdzLk1hY1JvbWFuRW5jb2Rpbmc7XG5cbiAgICAgICAgaWYgKCFwcm9wZXJ0aWVzLmZpbGUgfHwgcHJvcGVydGllcy5pc0ludGVybmFsRm9udCkge1xuICAgICAgICAgIGlmICgvU3ltYm9sL2kudGVzdChwcm9wZXJ0aWVzLm5hbWUpKSB7XG4gICAgICAgICAgICBlbmNvZGluZyA9IF9lbmNvZGluZ3MuU3ltYm9sU2V0RW5jb2Rpbmc7XG4gICAgICAgICAgfSBlbHNlIGlmICgvRGluZ2JhdHN8V2luZ2RpbmdzL2kudGVzdChwcm9wZXJ0aWVzLm5hbWUpKSB7XG4gICAgICAgICAgICBlbmNvZGluZyA9IF9lbmNvZGluZ3MuWmFwZkRpbmdiYXRzRW5jb2Rpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByb3BlcnRpZXMuZGVmYXVsdEVuY29kaW5nID0gZW5jb2Rpbmc7XG4gICAgfVxuXG4gICAgcHJvcGVydGllcy5kaWZmZXJlbmNlcyA9IGRpZmZlcmVuY2VzO1xuICAgIHByb3BlcnRpZXMuYmFzZUVuY29kaW5nTmFtZSA9IGJhc2VFbmNvZGluZ05hbWU7XG4gICAgcHJvcGVydGllcy5oYXNFbmNvZGluZyA9ICEhYmFzZUVuY29kaW5nTmFtZSB8fCBkaWZmZXJlbmNlcy5sZW5ndGggPiAwO1xuICAgIHByb3BlcnRpZXMuZGljdCA9IGRpY3Q7XG4gICAgcmV0dXJuIHRvVW5pY29kZVByb21pc2UudGhlbihyZWFkVG9Vbmljb2RlID0+IHtcbiAgICAgIHByb3BlcnRpZXMudG9Vbmljb2RlID0gcmVhZFRvVW5pY29kZTtcbiAgICAgIHJldHVybiB0aGlzLmJ1aWxkVG9Vbmljb2RlKHByb3BlcnRpZXMpO1xuICAgIH0pLnRoZW4oYnVpbHRUb1VuaWNvZGUgPT4ge1xuICAgICAgcHJvcGVydGllcy50b1VuaWNvZGUgPSBidWlsdFRvVW5pY29kZTtcblxuICAgICAgaWYgKGNpZFRvR2lkQnl0ZXMpIHtcbiAgICAgICAgcHJvcGVydGllcy5jaWRUb0dpZE1hcCA9IHRoaXMucmVhZENpZFRvR2lkTWFwKGNpZFRvR2lkQnl0ZXMsIGJ1aWx0VG9Vbmljb2RlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgfSk7XG4gIH1cblxuICBfc2ltcGxlRm9udFRvVW5pY29kZShwcm9wZXJ0aWVzLCBmb3JjZUdseXBocyA9IGZhbHNlKSB7XG4gICAgKDAsIF91dGlsLmFzc2VydCkoIXByb3BlcnRpZXMuY29tcG9zaXRlLCBcIk11c3QgYmUgYSBzaW1wbGUgZm9udC5cIik7XG4gICAgY29uc3QgdG9Vbmljb2RlID0gW107XG4gICAgY29uc3QgZW5jb2RpbmcgPSBwcm9wZXJ0aWVzLmRlZmF1bHRFbmNvZGluZy5zbGljZSgpO1xuICAgIGNvbnN0IGJhc2VFbmNvZGluZ05hbWUgPSBwcm9wZXJ0aWVzLmJhc2VFbmNvZGluZ05hbWU7XG4gICAgY29uc3QgZGlmZmVyZW5jZXMgPSBwcm9wZXJ0aWVzLmRpZmZlcmVuY2VzO1xuXG4gICAgZm9yIChjb25zdCBjaGFyY29kZSBpbiBkaWZmZXJlbmNlcykge1xuICAgICAgY29uc3QgZ2x5cGhOYW1lID0gZGlmZmVyZW5jZXNbY2hhcmNvZGVdO1xuXG4gICAgICBpZiAoZ2x5cGhOYW1lID09PSBcIi5ub3RkZWZcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZW5jb2RpbmdbY2hhcmNvZGVdID0gZ2x5cGhOYW1lO1xuICAgIH1cblxuICAgIGNvbnN0IGdseXBoc1VuaWNvZGVNYXAgPSAoMCwgX2dseXBobGlzdC5nZXRHbHlwaHNVbmljb2RlKSgpO1xuXG4gICAgZm9yIChjb25zdCBjaGFyY29kZSBpbiBlbmNvZGluZykge1xuICAgICAgbGV0IGdseXBoTmFtZSA9IGVuY29kaW5nW2NoYXJjb2RlXTtcblxuICAgICAgaWYgKGdseXBoTmFtZSA9PT0gXCJcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAoZ2x5cGhzVW5pY29kZU1hcFtnbHlwaE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IGNvZGUgPSAwO1xuXG4gICAgICAgIHN3aXRjaCAoZ2x5cGhOYW1lWzBdKSB7XG4gICAgICAgICAgY2FzZSBcIkdcIjpcbiAgICAgICAgICAgIGlmIChnbHlwaE5hbWUubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgIGNvZGUgPSBwYXJzZUludChnbHlwaE5hbWUuc3Vic3RyaW5nKDEpLCAxNik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImdcIjpcbiAgICAgICAgICAgIGlmIChnbHlwaE5hbWUubGVuZ3RoID09PSA1KSB7XG4gICAgICAgICAgICAgIGNvZGUgPSBwYXJzZUludChnbHlwaE5hbWUuc3Vic3RyaW5nKDEpLCAxNik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIkNcIjpcbiAgICAgICAgICBjYXNlIFwiY1wiOlxuICAgICAgICAgICAgaWYgKGdseXBoTmFtZS5sZW5ndGggPj0gMyAmJiBnbHlwaE5hbWUubGVuZ3RoIDw9IDQpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29kZVN0ciA9IGdseXBoTmFtZS5zdWJzdHJpbmcoMSk7XG5cbiAgICAgICAgICAgICAgaWYgKGZvcmNlR2x5cGhzKSB7XG4gICAgICAgICAgICAgICAgY29kZSA9IHBhcnNlSW50KGNvZGVTdHIsIDE2KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvZGUgPSArY29kZVN0cjtcblxuICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKGNvZGUpICYmIE51bWJlci5pc0ludGVnZXIocGFyc2VJbnQoY29kZVN0ciwgMTYpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaW1wbGVGb250VG9Vbmljb2RlKHByb3BlcnRpZXMsIHRydWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IHVuaWNvZGUgPSAoMCwgX3VuaWNvZGUuZ2V0VW5pY29kZUZvckdseXBoKShnbHlwaE5hbWUsIGdseXBoc1VuaWNvZGVNYXApO1xuXG4gICAgICAgICAgICBpZiAodW5pY29kZSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgY29kZSA9IHVuaWNvZGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2RlID4gMCAmJiBjb2RlIDw9IDB4MTBmZmZmICYmIE51bWJlci5pc0ludGVnZXIoY29kZSkpIHtcbiAgICAgICAgICBpZiAoYmFzZUVuY29kaW5nTmFtZSAmJiBjb2RlID09PSArY2hhcmNvZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VFbmNvZGluZyA9ICgwLCBfZW5jb2RpbmdzLmdldEVuY29kaW5nKShiYXNlRW5jb2RpbmdOYW1lKTtcblxuICAgICAgICAgICAgaWYgKGJhc2VFbmNvZGluZyAmJiAoZ2x5cGhOYW1lID0gYmFzZUVuY29kaW5nW2NoYXJjb2RlXSkpIHtcbiAgICAgICAgICAgICAgdG9Vbmljb2RlW2NoYXJjb2RlXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZ2x5cGhzVW5pY29kZU1hcFtnbHlwaE5hbWVdKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdG9Vbmljb2RlW2NoYXJjb2RlXSA9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHRvVW5pY29kZVtjaGFyY29kZV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGdseXBoc1VuaWNvZGVNYXBbZ2x5cGhOYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvVW5pY29kZTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkVG9Vbmljb2RlKHByb3BlcnRpZXMpIHtcbiAgICBwcm9wZXJ0aWVzLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwID0gISFwcm9wZXJ0aWVzLnRvVW5pY29kZSAmJiBwcm9wZXJ0aWVzLnRvVW5pY29kZS5sZW5ndGggPiAwO1xuXG4gICAgaWYgKHByb3BlcnRpZXMuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXApIHtcbiAgICAgIGlmICghcHJvcGVydGllcy5jb21wb3NpdGUgJiYgcHJvcGVydGllcy5oYXNFbmNvZGluZykge1xuICAgICAgICBwcm9wZXJ0aWVzLmZhbGxiYWNrVG9Vbmljb2RlID0gdGhpcy5fc2ltcGxlRm9udFRvVW5pY29kZShwcm9wZXJ0aWVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb3BlcnRpZXMudG9Vbmljb2RlO1xuICAgIH1cblxuICAgIGlmICghcHJvcGVydGllcy5jb21wb3NpdGUpIHtcbiAgICAgIHJldHVybiBuZXcgX3RvX3VuaWNvZGVfbWFwLlRvVW5pY29kZU1hcCh0aGlzLl9zaW1wbGVGb250VG9Vbmljb2RlKHByb3BlcnRpZXMpKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcGVydGllcy5jb21wb3NpdGUgJiYgKHByb3BlcnRpZXMuY01hcC5idWlsdEluQ01hcCAmJiAhKHByb3BlcnRpZXMuY01hcCBpbnN0YW5jZW9mIF9jbWFwLklkZW50aXR5Q01hcCkgfHwgcHJvcGVydGllcy5jaWRTeXN0ZW1JbmZvLnJlZ2lzdHJ5ID09PSBcIkFkb2JlXCIgJiYgKHByb3BlcnRpZXMuY2lkU3lzdGVtSW5mby5vcmRlcmluZyA9PT0gXCJHQjFcIiB8fCBwcm9wZXJ0aWVzLmNpZFN5c3RlbUluZm8ub3JkZXJpbmcgPT09IFwiQ05TMVwiIHx8IHByb3BlcnRpZXMuY2lkU3lzdGVtSW5mby5vcmRlcmluZyA9PT0gXCJKYXBhbjFcIiB8fCBwcm9wZXJ0aWVzLmNpZFN5c3RlbUluZm8ub3JkZXJpbmcgPT09IFwiS29yZWExXCIpKSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICByZWdpc3RyeSxcbiAgICAgICAgb3JkZXJpbmdcbiAgICAgIH0gPSBwcm9wZXJ0aWVzLmNpZFN5c3RlbUluZm87XG5cbiAgICAgIGNvbnN0IHVjczJDTWFwTmFtZSA9IF9wcmltaXRpdmVzLk5hbWUuZ2V0KGAke3JlZ2lzdHJ5fS0ke29yZGVyaW5nfS1VQ1MyYCk7XG5cbiAgICAgIGNvbnN0IHVjczJDTWFwID0gYXdhaXQgX2NtYXAuQ01hcEZhY3RvcnkuY3JlYXRlKHtcbiAgICAgICAgZW5jb2Rpbmc6IHVjczJDTWFwTmFtZSxcbiAgICAgICAgZmV0Y2hCdWlsdEluQ01hcDogdGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLFxuICAgICAgICB1c2VDTWFwOiBudWxsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHRvVW5pY29kZSA9IFtdO1xuICAgICAgcHJvcGVydGllcy5jTWFwLmZvckVhY2goZnVuY3Rpb24gKGNoYXJjb2RlLCBjaWQpIHtcbiAgICAgICAgaWYgKGNpZCA+IDB4ZmZmZikge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIk1heCBzaXplIG9mIENJRCBpcyA2NSw1MzVcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1Y3MyID0gdWNzMkNNYXAubG9va3VwKGNpZCk7XG5cbiAgICAgICAgaWYgKHVjczIpIHtcbiAgICAgICAgICB0b1VuaWNvZGVbY2hhcmNvZGVdID0gU3RyaW5nLmZyb21DaGFyQ29kZSgodWNzMi5jaGFyQ29kZUF0KDApIDw8IDgpICsgdWNzMi5jaGFyQ29kZUF0KDEpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IF90b191bmljb2RlX21hcC5Ub1VuaWNvZGVNYXAodG9Vbmljb2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IF90b191bmljb2RlX21hcC5JZGVudGl0eVRvVW5pY29kZU1hcChwcm9wZXJ0aWVzLmZpcnN0Q2hhciwgcHJvcGVydGllcy5sYXN0Q2hhcik7XG4gIH1cblxuICByZWFkVG9Vbmljb2RlKGNtYXBPYmopIHtcbiAgICBpZiAoIWNtYXBPYmopIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGNtYXBPYmopKSB7XG4gICAgICByZXR1cm4gX2NtYXAuQ01hcEZhY3RvcnkuY3JlYXRlKHtcbiAgICAgICAgZW5jb2Rpbmc6IGNtYXBPYmosXG4gICAgICAgIGZldGNoQnVpbHRJbkNNYXA6IHRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZCxcbiAgICAgICAgdXNlQ01hcDogbnVsbFxuICAgICAgfSkudGhlbihmdW5jdGlvbiAoY21hcCkge1xuICAgICAgICBpZiAoY21hcCBpbnN0YW5jZW9mIF9jbWFwLklkZW50aXR5Q01hcCkge1xuICAgICAgICAgIHJldHVybiBuZXcgX3RvX3VuaWNvZGVfbWFwLklkZW50aXR5VG9Vbmljb2RlTWFwKDAsIDB4ZmZmZik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IF90b191bmljb2RlX21hcC5Ub1VuaWNvZGVNYXAoY21hcC5nZXRNYXAoKSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoY21hcE9iaikpIHtcbiAgICAgIHJldHVybiBfY21hcC5DTWFwRmFjdG9yeS5jcmVhdGUoe1xuICAgICAgICBlbmNvZGluZzogY21hcE9iaixcbiAgICAgICAgZmV0Y2hCdWlsdEluQ01hcDogdGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLFxuICAgICAgICB1c2VDTWFwOiBudWxsXG4gICAgICB9KS50aGVuKGZ1bmN0aW9uIChjbWFwKSB7XG4gICAgICAgIGlmIChjbWFwIGluc3RhbmNlb2YgX2NtYXAuSWRlbnRpdHlDTWFwKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBfdG9fdW5pY29kZV9tYXAuSWRlbnRpdHlUb1VuaWNvZGVNYXAoMCwgMHhmZmZmKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyBBcnJheShjbWFwLmxlbmd0aCk7XG4gICAgICAgIGNtYXAuZm9yRWFjaChmdW5jdGlvbiAoY2hhckNvZGUsIHRva2VuKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgbWFwW2NoYXJDb2RlXSA9IFN0cmluZy5mcm9tQ29kZVBvaW50KHRva2VuKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzdHIgPSBbXTtcblxuICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdG9rZW4ubGVuZ3RoOyBrICs9IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IHcxID0gdG9rZW4uY2hhckNvZGVBdChrKSA8PCA4IHwgdG9rZW4uY2hhckNvZGVBdChrICsgMSk7XG5cbiAgICAgICAgICAgIGlmICgodzEgJiAweGY4MDApICE9PSAweGQ4MDApIHtcbiAgICAgICAgICAgICAgc3RyLnB1c2godzEpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgayArPSAyO1xuICAgICAgICAgICAgY29uc3QgdzIgPSB0b2tlbi5jaGFyQ29kZUF0KGspIDw8IDggfCB0b2tlbi5jaGFyQ29kZUF0KGsgKyAxKTtcbiAgICAgICAgICAgIHN0ci5wdXNoKCgodzEgJiAweDNmZikgPDwgMTApICsgKHcyICYgMHgzZmYpICsgMHgxMDAwMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWFwW2NoYXJDb2RlXSA9IFN0cmluZy5mcm9tQ29kZVBvaW50LmFwcGx5KFN0cmluZywgc3RyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgX3RvX3VuaWNvZGVfbWFwLlRvVW5pY29kZU1hcChtYXApO1xuICAgICAgfSwgcmVhc29uID0+IHtcbiAgICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLkFib3J0RXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycykge1xuICAgICAgICAgIHRoaXMuaGFuZGxlci5zZW5kKFwiVW5zdXBwb3J0ZWRGZWF0dXJlXCIsIHtcbiAgICAgICAgICAgIGZlYXR1cmVJZDogX3V0aWwuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JGb250VG9Vbmljb2RlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKGByZWFkVG9Vbmljb2RlIC0gaWdub3JpbmcgVG9Vbmljb2RlIGRhdGE6IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyByZWFzb247XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICB9XG5cbiAgcmVhZENpZFRvR2lkTWFwKGdseXBoc0RhdGEsIHRvVW5pY29kZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgZm9yIChsZXQgaiA9IDAsIGpqID0gZ2x5cGhzRGF0YS5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICBjb25zdCBnbHlwaElEID0gZ2x5cGhzRGF0YVtqKytdIDw8IDggfCBnbHlwaHNEYXRhW2pdO1xuICAgICAgY29uc3QgY29kZSA9IGogPj4gMTtcblxuICAgICAgaWYgKGdseXBoSUQgPT09IDAgJiYgIXRvVW5pY29kZS5oYXMoY29kZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdFtjb2RlXSA9IGdseXBoSUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGV4dHJhY3RXaWR0aHMoZGljdCwgZGVzY3JpcHRvciwgcHJvcGVydGllcykge1xuICAgIGNvbnN0IHhyZWYgPSB0aGlzLnhyZWY7XG4gICAgbGV0IGdseXBoc1dpZHRocyA9IFtdO1xuICAgIGxldCBkZWZhdWx0V2lkdGggPSAwO1xuICAgIGNvbnN0IGdseXBoc1ZNZXRyaWNzID0gW107XG4gICAgbGV0IGRlZmF1bHRWTWV0cmljcztcbiAgICBsZXQgaSwgaWksIGosIGpqLCBzdGFydCwgY29kZSwgd2lkdGhzO1xuXG4gICAgaWYgKHByb3BlcnRpZXMuY29tcG9zaXRlKSB7XG4gICAgICBkZWZhdWx0V2lkdGggPSBkaWN0LmhhcyhcIkRXXCIpID8gZGljdC5nZXQoXCJEV1wiKSA6IDEwMDA7XG4gICAgICB3aWR0aHMgPSBkaWN0LmdldChcIldcIik7XG5cbiAgICAgIGlmICh3aWR0aHMpIHtcbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSB3aWR0aHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgIHN0YXJ0ID0geHJlZi5mZXRjaElmUmVmKHdpZHRoc1tpKytdKTtcbiAgICAgICAgICBjb2RlID0geHJlZi5mZXRjaElmUmVmKHdpZHRoc1tpXSk7XG5cbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb2RlKSkge1xuICAgICAgICAgICAgZm9yIChqID0gMCwgamogPSBjb2RlLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgZ2x5cGhzV2lkdGhzW3N0YXJ0KytdID0geHJlZi5mZXRjaElmUmVmKGNvZGVbal0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHhyZWYuZmV0Y2hJZlJlZih3aWR0aHNbKytpXSk7XG5cbiAgICAgICAgICAgIGZvciAoaiA9IHN0YXJ0OyBqIDw9IGNvZGU7IGorKykge1xuICAgICAgICAgICAgICBnbHlwaHNXaWR0aHNbal0gPSB3aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BlcnRpZXMudmVydGljYWwpIHtcbiAgICAgICAgbGV0IHZtZXRyaWNzID0gZGljdC5nZXRBcnJheShcIkRXMlwiKSB8fCBbODgwLCAtMTAwMF07XG4gICAgICAgIGRlZmF1bHRWTWV0cmljcyA9IFt2bWV0cmljc1sxXSwgZGVmYXVsdFdpZHRoICogMC41LCB2bWV0cmljc1swXV07XG4gICAgICAgIHZtZXRyaWNzID0gZGljdC5nZXQoXCJXMlwiKTtcblxuICAgICAgICBpZiAodm1ldHJpY3MpIHtcbiAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHZtZXRyaWNzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgIHN0YXJ0ID0geHJlZi5mZXRjaElmUmVmKHZtZXRyaWNzW2krK10pO1xuICAgICAgICAgICAgY29kZSA9IHhyZWYuZmV0Y2hJZlJlZih2bWV0cmljc1tpXSk7XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvZGUpKSB7XG4gICAgICAgICAgICAgIGZvciAoaiA9IDAsIGpqID0gY29kZS5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICAgICAgZ2x5cGhzVk1ldHJpY3Nbc3RhcnQrK10gPSBbeHJlZi5mZXRjaElmUmVmKGNvZGVbaisrXSksIHhyZWYuZmV0Y2hJZlJlZihjb2RlW2orK10pLCB4cmVmLmZldGNoSWZSZWYoY29kZVtqXSldO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCB2bWV0cmljID0gW3hyZWYuZmV0Y2hJZlJlZih2bWV0cmljc1srK2ldKSwgeHJlZi5mZXRjaElmUmVmKHZtZXRyaWNzWysraV0pLCB4cmVmLmZldGNoSWZSZWYodm1ldHJpY3NbKytpXSldO1xuXG4gICAgICAgICAgICAgIGZvciAoaiA9IHN0YXJ0OyBqIDw9IGNvZGU7IGorKykge1xuICAgICAgICAgICAgICAgIGdseXBoc1ZNZXRyaWNzW2pdID0gdm1ldHJpYztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmaXJzdENoYXIgPSBwcm9wZXJ0aWVzLmZpcnN0Q2hhcjtcbiAgICAgIHdpZHRocyA9IGRpY3QuZ2V0KFwiV2lkdGhzXCIpO1xuXG4gICAgICBpZiAod2lkdGhzKSB7XG4gICAgICAgIGogPSBmaXJzdENoYXI7XG5cbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSB3aWR0aHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgIGdseXBoc1dpZHRoc1tqKytdID0geHJlZi5mZXRjaElmUmVmKHdpZHRoc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0V2lkdGggPSBwYXJzZUZsb2F0KGRlc2NyaXB0b3IuZ2V0KFwiTWlzc2luZ1dpZHRoXCIpKSB8fCAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYmFzZUZvbnROYW1lID0gZGljdC5nZXQoXCJCYXNlRm9udFwiKTtcblxuICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoYmFzZUZvbnROYW1lKSkge1xuICAgICAgICAgIGNvbnN0IG1ldHJpY3MgPSB0aGlzLmdldEJhc2VGb250TWV0cmljcyhiYXNlRm9udE5hbWUubmFtZSk7XG4gICAgICAgICAgZ2x5cGhzV2lkdGhzID0gdGhpcy5idWlsZENoYXJDb2RlVG9XaWR0aChtZXRyaWNzLndpZHRocywgcHJvcGVydGllcyk7XG4gICAgICAgICAgZGVmYXVsdFdpZHRoID0gbWV0cmljcy5kZWZhdWx0V2lkdGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgaXNNb25vc3BhY2UgPSB0cnVlO1xuICAgIGxldCBmaXJzdFdpZHRoID0gZGVmYXVsdFdpZHRoO1xuXG4gICAgZm9yIChjb25zdCBnbHlwaCBpbiBnbHlwaHNXaWR0aHMpIHtcbiAgICAgIGNvbnN0IGdseXBoV2lkdGggPSBnbHlwaHNXaWR0aHNbZ2x5cGhdO1xuXG4gICAgICBpZiAoIWdseXBoV2lkdGgpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghZmlyc3RXaWR0aCkge1xuICAgICAgICBmaXJzdFdpZHRoID0gZ2x5cGhXaWR0aDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaXJzdFdpZHRoICE9PSBnbHlwaFdpZHRoKSB7XG4gICAgICAgIGlzTW9ub3NwYWNlID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc01vbm9zcGFjZSkge1xuICAgICAgcHJvcGVydGllcy5mbGFncyB8PSBfZm9udHNfdXRpbHMuRm9udEZsYWdzLkZpeGVkUGl0Y2g7XG4gICAgfVxuXG4gICAgcHJvcGVydGllcy5kZWZhdWx0V2lkdGggPSBkZWZhdWx0V2lkdGg7XG4gICAgcHJvcGVydGllcy53aWR0aHMgPSBnbHlwaHNXaWR0aHM7XG4gICAgcHJvcGVydGllcy5kZWZhdWx0Vk1ldHJpY3MgPSBkZWZhdWx0Vk1ldHJpY3M7XG4gICAgcHJvcGVydGllcy52bWV0cmljcyA9IGdseXBoc1ZNZXRyaWNzO1xuICB9XG5cbiAgaXNTZXJpZkZvbnQoYmFzZUZvbnROYW1lKSB7XG4gICAgY29uc3QgZm9udE5hbWVXb1N0eWxlID0gYmFzZUZvbnROYW1lLnNwbGl0KFwiLVwiKVswXTtcbiAgICByZXR1cm4gZm9udE5hbWVXb1N0eWxlIGluICgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0U2VyaWZGb250cykoKSB8fCBmb250TmFtZVdvU3R5bGUuc2VhcmNoKC9zZXJpZi9naSkgIT09IC0xO1xuICB9XG5cbiAgZ2V0QmFzZUZvbnRNZXRyaWNzKG5hbWUpIHtcbiAgICBsZXQgZGVmYXVsdFdpZHRoID0gMDtcbiAgICBsZXQgd2lkdGhzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBsZXQgbW9ub3NwYWNlID0gZmFsc2U7XG4gICAgY29uc3Qgc3RkRm9udE1hcCA9ICgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0U3RkRm9udE1hcCkoKTtcbiAgICBsZXQgbG9va3VwTmFtZSA9IHN0ZEZvbnRNYXBbbmFtZV0gfHwgbmFtZTtcbiAgICBjb25zdCBNZXRyaWNzID0gKDAsIF9tZXRyaWNzLmdldE1ldHJpY3MpKCk7XG5cbiAgICBpZiAoIShsb29rdXBOYW1lIGluIE1ldHJpY3MpKSB7XG4gICAgICBpZiAodGhpcy5pc1NlcmlmRm9udChuYW1lKSkge1xuICAgICAgICBsb29rdXBOYW1lID0gXCJUaW1lcy1Sb21hblwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9va3VwTmFtZSA9IFwiSGVsdmV0aWNhXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZ2x5cGhXaWR0aHMgPSBNZXRyaWNzW2xvb2t1cE5hbWVdO1xuXG4gICAgaWYgKCgwLCBfdXRpbC5pc051bSkoZ2x5cGhXaWR0aHMpKSB7XG4gICAgICBkZWZhdWx0V2lkdGggPSBnbHlwaFdpZHRocztcbiAgICAgIG1vbm9zcGFjZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpZHRocyA9IGdseXBoV2lkdGhzKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRlZmF1bHRXaWR0aCxcbiAgICAgIG1vbm9zcGFjZSxcbiAgICAgIHdpZHRoc1xuICAgIH07XG4gIH1cblxuICBidWlsZENoYXJDb2RlVG9XaWR0aCh3aWR0aHNCeUdseXBoTmFtZSwgcHJvcGVydGllcykge1xuICAgIGNvbnN0IHdpZHRocyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgY29uc3QgZGlmZmVyZW5jZXMgPSBwcm9wZXJ0aWVzLmRpZmZlcmVuY2VzO1xuICAgIGNvbnN0IGVuY29kaW5nID0gcHJvcGVydGllcy5kZWZhdWx0RW5jb2Rpbmc7XG5cbiAgICBmb3IgKGxldCBjaGFyQ29kZSA9IDA7IGNoYXJDb2RlIDwgMjU2OyBjaGFyQ29kZSsrKSB7XG4gICAgICBpZiAoY2hhckNvZGUgaW4gZGlmZmVyZW5jZXMgJiYgd2lkdGhzQnlHbHlwaE5hbWVbZGlmZmVyZW5jZXNbY2hhckNvZGVdXSkge1xuICAgICAgICB3aWR0aHNbY2hhckNvZGVdID0gd2lkdGhzQnlHbHlwaE5hbWVbZGlmZmVyZW5jZXNbY2hhckNvZGVdXTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFyQ29kZSBpbiBlbmNvZGluZyAmJiB3aWR0aHNCeUdseXBoTmFtZVtlbmNvZGluZ1tjaGFyQ29kZV1dKSB7XG4gICAgICAgIHdpZHRoc1tjaGFyQ29kZV0gPSB3aWR0aHNCeUdseXBoTmFtZVtlbmNvZGluZ1tjaGFyQ29kZV1dO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gd2lkdGhzO1xuICB9XG5cbiAgcHJlRXZhbHVhdGVGb250KGRpY3QpIHtcbiAgICBjb25zdCBiYXNlRGljdCA9IGRpY3Q7XG4gICAgbGV0IHR5cGUgPSBkaWN0LmdldChcIlN1YnR5cGVcIik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJpbnZhbGlkIGZvbnQgU3VidHlwZVwiKTtcbiAgICB9XG5cbiAgICBsZXQgY29tcG9zaXRlID0gZmFsc2U7XG4gICAgbGV0IGhhc2gsIHRvVW5pY29kZTtcblxuICAgIGlmICh0eXBlLm5hbWUgPT09IFwiVHlwZTBcIikge1xuICAgICAgY29uc3QgZGYgPSBkaWN0LmdldChcIkRlc2NlbmRhbnRGb250c1wiKTtcblxuICAgICAgaWYgKCFkZikge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJEZXNjZW5kYW50IGZvbnRzIGFyZSBub3Qgc3BlY2lmaWVkXCIpO1xuICAgICAgfVxuXG4gICAgICBkaWN0ID0gQXJyYXkuaXNBcnJheShkZikgPyB0aGlzLnhyZWYuZmV0Y2hJZlJlZihkZlswXSkgOiBkZjtcblxuICAgICAgaWYgKCEoZGljdCBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkRlc2NlbmRhbnQgZm9udCBpcyBub3QgYSBkaWN0aW9uYXJ5LlwiKTtcbiAgICAgIH1cblxuICAgICAgdHlwZSA9IGRpY3QuZ2V0KFwiU3VidHlwZVwiKTtcblxuICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0eXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJpbnZhbGlkIGZvbnQgU3VidHlwZVwiKTtcbiAgICAgIH1cblxuICAgICAgY29tcG9zaXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBmaXJzdENoYXIgPSBkaWN0LmdldChcIkZpcnN0Q2hhclwiKSB8fCAwLFxuICAgICAgICAgIGxhc3RDaGFyID0gZGljdC5nZXQoXCJMYXN0Q2hhclwiKSB8fCAoY29tcG9zaXRlID8gMHhmZmZmIDogMHhmZik7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IGRpY3QuZ2V0KFwiRm9udERlc2NyaXB0b3JcIik7XG5cbiAgICBpZiAoZGVzY3JpcHRvcikge1xuICAgICAgaGFzaCA9IG5ldyBfbXVybXVyaGFzaC5NdXJtdXJIYXNoM182NCgpO1xuICAgICAgY29uc3QgZW5jb2RpbmcgPSBiYXNlRGljdC5nZXRSYXcoXCJFbmNvZGluZ1wiKTtcblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGVuY29kaW5nKSkge1xuICAgICAgICBoYXNoLnVwZGF0ZShlbmNvZGluZy5uYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzUmVmKShlbmNvZGluZykpIHtcbiAgICAgICAgaGFzaC51cGRhdGUoZW5jb2RpbmcudG9TdHJpbmcoKSk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGVuY29kaW5nKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVuY29kaW5nLmdldFJhd1ZhbHVlcygpKSB7XG4gICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGVudHJ5KSkge1xuICAgICAgICAgICAgaGFzaC51cGRhdGUoZW50cnkubmFtZSk7XG4gICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKGVudHJ5KSkge1xuICAgICAgICAgICAgaGFzaC51cGRhdGUoZW50cnkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGVudHJ5KSkge1xuICAgICAgICAgICAgY29uc3QgZGlmZkxlbmd0aCA9IGVudHJ5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgIGRpZmZCdWYgPSBuZXcgQXJyYXkoZGlmZkxlbmd0aCk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZGlmZkxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRpZmZFbnRyeSA9IGVudHJ5W2pdO1xuXG4gICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShkaWZmRW50cnkpKSB7XG4gICAgICAgICAgICAgICAgZGlmZkJ1ZltqXSA9IGRpZmZFbnRyeS5uYW1lO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc051bSkoZGlmZkVudHJ5KSB8fCAoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKGRpZmZFbnRyeSkpIHtcbiAgICAgICAgICAgICAgICBkaWZmQnVmW2pdID0gZGlmZkVudHJ5LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaGFzaC51cGRhdGUoZGlmZkJ1Zi5qb2luKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBoYXNoLnVwZGF0ZShgJHtmaXJzdENoYXJ9LSR7bGFzdENoYXJ9YCk7XG4gICAgICB0b1VuaWNvZGUgPSBkaWN0LmdldChcIlRvVW5pY29kZVwiKSB8fCBiYXNlRGljdC5nZXQoXCJUb1VuaWNvZGVcIik7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKHRvVW5pY29kZSkpIHtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gdG9Vbmljb2RlLnN0ciB8fCB0b1VuaWNvZGU7XG4gICAgICAgIGNvbnN0IHVpbnQ4YXJyYXkgPSBzdHJlYW0uYnVmZmVyID8gbmV3IFVpbnQ4QXJyYXkoc3RyZWFtLmJ1ZmZlci5idWZmZXIsIDAsIHN0cmVhbS5idWZmZXJMZW5ndGgpIDogbmV3IFVpbnQ4QXJyYXkoc3RyZWFtLmJ5dGVzLmJ1ZmZlciwgc3RyZWFtLnN0YXJ0LCBzdHJlYW0uZW5kIC0gc3RyZWFtLnN0YXJ0KTtcbiAgICAgICAgaGFzaC51cGRhdGUodWludDhhcnJheSk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHRvVW5pY29kZSkpIHtcbiAgICAgICAgaGFzaC51cGRhdGUodG9Vbmljb2RlLm5hbWUpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3aWR0aHMgPSBkaWN0LmdldChcIldpZHRoc1wiKSB8fCBiYXNlRGljdC5nZXQoXCJXaWR0aHNcIik7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHdpZHRocykpIHtcbiAgICAgICAgY29uc3Qgd2lkdGhzQnVmID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB3aWR0aHMpIHtcbiAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzTnVtKShlbnRyeSkgfHwgKDAsIF9wcmltaXRpdmVzLmlzUmVmKShlbnRyeSkpIHtcbiAgICAgICAgICAgIHdpZHRoc0J1Zi5wdXNoKGVudHJ5LnRvU3RyaW5nKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGhhc2gudXBkYXRlKHdpZHRoc0J1Zi5qb2luKCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29tcG9zaXRlKSB7XG4gICAgICAgIGhhc2gudXBkYXRlKFwiY29tcG9zaXRlRm9udFwiKTtcbiAgICAgICAgY29uc3QgY29tcG9zaXRlV2lkdGhzID0gZGljdC5nZXQoXCJXXCIpIHx8IGJhc2VEaWN0LmdldChcIldcIik7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29tcG9zaXRlV2lkdGhzKSkge1xuICAgICAgICAgIGNvbnN0IHdpZHRoc0J1ZiA9IFtdO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBjb21wb3NpdGVXaWR0aHMpIHtcbiAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNOdW0pKGVudHJ5KSB8fCAoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKGVudHJ5KSkge1xuICAgICAgICAgICAgICB3aWR0aHNCdWYucHVzaChlbnRyeS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShlbnRyeSkpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc3ViV2lkdGhzQnVmID0gW107XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc051bSkoZWxlbWVudCkgfHwgKDAsIF9wcmltaXRpdmVzLmlzUmVmKShlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgICAgc3ViV2lkdGhzQnVmLnB1c2goZWxlbWVudC50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB3aWR0aHNCdWYucHVzaChgWyR7c3ViV2lkdGhzQnVmLmpvaW4oKX1dYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaGFzaC51cGRhdGUod2lkdGhzQnVmLmpvaW4oKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaWRUb0dpZE1hcCA9IGRpY3QuZ2V0UmF3KFwiQ0lEVG9HSURNYXBcIikgfHwgYmFzZURpY3QuZ2V0UmF3KFwiQ0lEVG9HSURNYXBcIik7XG5cbiAgICAgICAgaWYgKGNpZFRvR2lkTWFwIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuTmFtZSkge1xuICAgICAgICAgIGhhc2gudXBkYXRlKGNpZFRvR2lkTWFwLm5hbWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGNpZFRvR2lkTWFwIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmKSB7XG4gICAgICAgICAgaGFzaC51cGRhdGUoY2lkVG9HaWRNYXAudG9TdHJpbmcoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2lkVG9HaWRNYXAgaW5zdGFuY2VvZiBfYmFzZV9zdHJlYW0uQmFzZVN0cmVhbSkge1xuICAgICAgICAgIGhhc2gudXBkYXRlKGNpZFRvR2lkTWFwLnBlZWtCeXRlcygpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkZXNjcmlwdG9yLFxuICAgICAgZGljdCxcbiAgICAgIGJhc2VEaWN0LFxuICAgICAgY29tcG9zaXRlLFxuICAgICAgdHlwZTogdHlwZS5uYW1lLFxuICAgICAgZmlyc3RDaGFyLFxuICAgICAgbGFzdENoYXIsXG4gICAgICB0b1VuaWNvZGUsXG4gICAgICBoYXNoOiBoYXNoID8gaGFzaC5oZXhkaWdlc3QoKSA6IFwiXCJcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdHJhbnNsYXRlRm9udCh7XG4gICAgZGVzY3JpcHRvcixcbiAgICBkaWN0LFxuICAgIGJhc2VEaWN0LFxuICAgIGNvbXBvc2l0ZSxcbiAgICB0eXBlLFxuICAgIGZpcnN0Q2hhcixcbiAgICBsYXN0Q2hhcixcbiAgICB0b1VuaWNvZGUsXG4gICAgY3NzRm9udEluZm9cbiAgfSkge1xuICAgIGNvbnN0IGlzVHlwZTNGb250ID0gdHlwZSA9PT0gXCJUeXBlM1wiO1xuICAgIGxldCBwcm9wZXJ0aWVzO1xuXG4gICAgaWYgKCFkZXNjcmlwdG9yKSB7XG4gICAgICBpZiAoaXNUeXBlM0ZvbnQpIHtcbiAgICAgICAgZGVzY3JpcHRvciA9IG5ldyBfcHJpbWl0aXZlcy5EaWN0KG51bGwpO1xuICAgICAgICBkZXNjcmlwdG9yLnNldChcIkZvbnROYW1lXCIsIF9wcmltaXRpdmVzLk5hbWUuZ2V0KHR5cGUpKTtcbiAgICAgICAgZGVzY3JpcHRvci5zZXQoXCJGb250QkJveFwiLCBkaWN0LmdldEFycmF5KFwiRm9udEJCb3hcIikgfHwgWzAsIDAsIDAsIDBdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBiYXNlRm9udE5hbWUgPSBkaWN0LmdldChcIkJhc2VGb250XCIpO1xuXG4gICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoYmFzZUZvbnROYW1lKSkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkJhc2UgZm9udCBpcyBub3Qgc3BlY2lmaWVkXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFzZUZvbnROYW1lID0gYmFzZUZvbnROYW1lLm5hbWUucmVwbGFjZSgvWyxfXS9nLCBcIi1cIik7XG4gICAgICAgIGNvbnN0IG1ldHJpY3MgPSB0aGlzLmdldEJhc2VGb250TWV0cmljcyhiYXNlRm9udE5hbWUpO1xuICAgICAgICBjb25zdCBmb250TmFtZVdvU3R5bGUgPSBiYXNlRm9udE5hbWUuc3BsaXQoXCItXCIpWzBdO1xuICAgICAgICBjb25zdCBmbGFncyA9ICh0aGlzLmlzU2VyaWZGb250KGZvbnROYW1lV29TdHlsZSkgPyBfZm9udHNfdXRpbHMuRm9udEZsYWdzLlNlcmlmIDogMCkgfCAobWV0cmljcy5tb25vc3BhY2UgPyBfZm9udHNfdXRpbHMuRm9udEZsYWdzLkZpeGVkUGl0Y2ggOiAwKSB8ICgoMCwgX3N0YW5kYXJkX2ZvbnRzLmdldFN5bWJvbHNGb250cykoKVtmb250TmFtZVdvU3R5bGVdID8gX2ZvbnRzX3V0aWxzLkZvbnRGbGFncy5TeW1ib2xpYyA6IF9mb250c191dGlscy5Gb250RmxhZ3MuTm9uc3ltYm9saWMpO1xuICAgICAgICBwcm9wZXJ0aWVzID0ge1xuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgbmFtZTogYmFzZUZvbnROYW1lLFxuICAgICAgICAgIGxvYWRlZE5hbWU6IGJhc2VEaWN0LmxvYWRlZE5hbWUsXG4gICAgICAgICAgd2lkdGhzOiBtZXRyaWNzLndpZHRocyxcbiAgICAgICAgICBkZWZhdWx0V2lkdGg6IG1ldHJpY3MuZGVmYXVsdFdpZHRoLFxuICAgICAgICAgIGlzU2ltdWxhdGVkRmxhZ3M6IHRydWUsXG4gICAgICAgICAgZmxhZ3MsXG4gICAgICAgICAgZmlyc3RDaGFyLFxuICAgICAgICAgIGxhc3RDaGFyLFxuICAgICAgICAgIHRvVW5pY29kZSxcbiAgICAgICAgICB4SGVpZ2h0OiAwLFxuICAgICAgICAgIGNhcEhlaWdodDogMCxcbiAgICAgICAgICBpdGFsaWNBbmdsZTogMCxcbiAgICAgICAgICBpc1R5cGUzRm9udFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB3aWR0aHMgPSBkaWN0LmdldChcIldpZHRoc1wiKTtcbiAgICAgICAgY29uc3Qgc3RhbmRhcmRGb250TmFtZSA9ICgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0U3RhbmRhcmRGb250TmFtZSkoYmFzZUZvbnROYW1lKTtcbiAgICAgICAgbGV0IGZpbGUgPSBudWxsO1xuXG4gICAgICAgIGlmIChzdGFuZGFyZEZvbnROYW1lKSB7XG4gICAgICAgICAgcHJvcGVydGllcy5pc1N0YW5kYXJkRm9udCA9IHRydWU7XG4gICAgICAgICAgZmlsZSA9IGF3YWl0IHRoaXMuZmV0Y2hTdGFuZGFyZEZvbnREYXRhKHN0YW5kYXJkRm9udE5hbWUpO1xuICAgICAgICAgIHByb3BlcnRpZXMuaXNJbnRlcm5hbEZvbnQgPSAhIWZpbGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXMoZGljdCwgZGljdCwgcHJvcGVydGllcykudGhlbihuZXdQcm9wZXJ0aWVzID0+IHtcbiAgICAgICAgICBpZiAod2lkdGhzKSB7XG4gICAgICAgICAgICBjb25zdCBnbHlwaFdpZHRocyA9IFtdO1xuICAgICAgICAgICAgbGV0IGogPSBmaXJzdENoYXI7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHdpZHRocy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgIGdseXBoV2lkdGhzW2orK10gPSB0aGlzLnhyZWYuZmV0Y2hJZlJlZih3aWR0aHNbaV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXdQcm9wZXJ0aWVzLndpZHRocyA9IGdseXBoV2lkdGhzO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdQcm9wZXJ0aWVzLndpZHRocyA9IHRoaXMuYnVpbGRDaGFyQ29kZVRvV2lkdGgobWV0cmljcy53aWR0aHMsIG5ld1Byb3BlcnRpZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBuZXcgX2ZvbnRzLkZvbnQoYmFzZUZvbnROYW1lLCBmaWxlLCBuZXdQcm9wZXJ0aWVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGZvbnROYW1lID0gZGVzY3JpcHRvci5nZXQoXCJGb250TmFtZVwiKTtcbiAgICBsZXQgYmFzZUZvbnQgPSBkaWN0LmdldChcIkJhc2VGb250XCIpO1xuXG4gICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykoZm9udE5hbWUpKSB7XG4gICAgICBmb250TmFtZSA9IF9wcmltaXRpdmVzLk5hbWUuZ2V0KGZvbnROYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF91dGlsLmlzU3RyaW5nKShiYXNlRm9udCkpIHtcbiAgICAgIGJhc2VGb250ID0gX3ByaW1pdGl2ZXMuTmFtZS5nZXQoYmFzZUZvbnQpO1xuICAgIH1cblxuICAgIGlmICghaXNUeXBlM0ZvbnQpIHtcbiAgICAgIGNvbnN0IGZvbnROYW1lU3RyID0gZm9udE5hbWUgJiYgZm9udE5hbWUubmFtZTtcbiAgICAgIGNvbnN0IGJhc2VGb250U3RyID0gYmFzZUZvbnQgJiYgYmFzZUZvbnQubmFtZTtcblxuICAgICAgaWYgKGZvbnROYW1lU3RyICE9PSBiYXNlRm9udFN0cikge1xuICAgICAgICAoMCwgX3V0aWwuaW5mbykoYFRoZSBGb250RGVzY3JpcHRvcidzIEZvbnROYW1lIGlzIFwiJHtmb250TmFtZVN0cn1cIiBidXQgYCArIGBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIEZvbnQncyBCYXNlRm9udCBcIiR7YmFzZUZvbnRTdHJ9XCIuYCk7XG5cbiAgICAgICAgaWYgKGZvbnROYW1lU3RyICYmIGJhc2VGb250U3RyICYmIGJhc2VGb250U3RyLnN0YXJ0c1dpdGgoZm9udE5hbWVTdHIpKSB7XG4gICAgICAgICAgZm9udE5hbWUgPSBiYXNlRm9udDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvbnROYW1lID0gZm9udE5hbWUgfHwgYmFzZUZvbnQ7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZvbnROYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiaW52YWxpZCBmb250IG5hbWVcIik7XG4gICAgfVxuXG4gICAgbGV0IGZvbnRGaWxlLCBzdWJ0eXBlLCBsZW5ndGgxLCBsZW5ndGgyLCBsZW5ndGgzO1xuXG4gICAgdHJ5IHtcbiAgICAgIGZvbnRGaWxlID0gZGVzY3JpcHRvci5nZXQoXCJGb250RmlsZVwiLCBcIkZvbnRGaWxlMlwiLCBcIkZvbnRGaWxlM1wiKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwud2FybikoYHRyYW5zbGF0ZUZvbnQgLSBmZXRjaGluZyBcIiR7Zm9udE5hbWUubmFtZX1cIiBmb250IGZpbGU6IFwiJHtleH1cIi5gKTtcbiAgICAgIGZvbnRGaWxlID0gbmV3IF9zdHJlYW0uTnVsbFN0cmVhbSgpO1xuICAgIH1cblxuICAgIGxldCBpc1N0YW5kYXJkRm9udCA9IGZhbHNlO1xuICAgIGxldCBpc0ludGVybmFsRm9udCA9IGZhbHNlO1xuICAgIGxldCBnbHlwaFNjYWxlRmFjdG9ycyA9IG51bGw7XG5cbiAgICBpZiAoZm9udEZpbGUpIHtcbiAgICAgIGlmIChmb250RmlsZS5kaWN0KSB7XG4gICAgICAgIGNvbnN0IHN1YnR5cGVFbnRyeSA9IGZvbnRGaWxlLmRpY3QuZ2V0KFwiU3VidHlwZVwiKTtcblxuICAgICAgICBpZiAoc3VidHlwZUVudHJ5IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuTmFtZSkge1xuICAgICAgICAgIHN1YnR5cGUgPSBzdWJ0eXBlRW50cnkubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxlbmd0aDEgPSBmb250RmlsZS5kaWN0LmdldChcIkxlbmd0aDFcIik7XG4gICAgICAgIGxlbmd0aDIgPSBmb250RmlsZS5kaWN0LmdldChcIkxlbmd0aDJcIik7XG4gICAgICAgIGxlbmd0aDMgPSBmb250RmlsZS5kaWN0LmdldChcIkxlbmd0aDNcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjc3NGb250SW5mbykge1xuICAgICAgY29uc3Qgc3RhbmRhcmRGb250TmFtZSA9ICgwLCBfeGZhX2ZvbnRzLmdldFhmYUZvbnROYW1lKShmb250TmFtZS5uYW1lKTtcblxuICAgICAgaWYgKHN0YW5kYXJkRm9udE5hbWUpIHtcbiAgICAgICAgY3NzRm9udEluZm8uZm9udEZhbWlseSA9IGAke2Nzc0ZvbnRJbmZvLmZvbnRGYW1pbHl9LVBkZkpTLVhGQWA7XG4gICAgICAgIGNzc0ZvbnRJbmZvLm1ldHJpY3MgPSBzdGFuZGFyZEZvbnROYW1lLm1ldHJpY3MgfHwgbnVsbDtcbiAgICAgICAgZ2x5cGhTY2FsZUZhY3RvcnMgPSBzdGFuZGFyZEZvbnROYW1lLmZhY3RvcnMgfHwgbnVsbDtcbiAgICAgICAgZm9udEZpbGUgPSBhd2FpdCB0aGlzLmZldGNoU3RhbmRhcmRGb250RGF0YShzdGFuZGFyZEZvbnROYW1lLm5hbWUpO1xuICAgICAgICBpc0ludGVybmFsRm9udCA9ICEhZm9udEZpbGU7XG4gICAgICAgIGJhc2VEaWN0ID0gZGljdCA9ICgwLCBfeGZhX2ZvbnRzLmdldFhmYUZvbnREaWN0KShmb250TmFtZS5uYW1lKTtcbiAgICAgICAgY29tcG9zaXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1R5cGUzRm9udCkge1xuICAgICAgY29uc3Qgc3RhbmRhcmRGb250TmFtZSA9ICgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0U3RhbmRhcmRGb250TmFtZSkoZm9udE5hbWUubmFtZSk7XG5cbiAgICAgIGlmIChzdGFuZGFyZEZvbnROYW1lKSB7XG4gICAgICAgIGlzU3RhbmRhcmRGb250ID0gdHJ1ZTtcbiAgICAgICAgZm9udEZpbGUgPSBhd2FpdCB0aGlzLmZldGNoU3RhbmRhcmRGb250RGF0YShzdGFuZGFyZEZvbnROYW1lKTtcbiAgICAgICAgaXNJbnRlcm5hbEZvbnQgPSAhIWZvbnRGaWxlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3BlcnRpZXMgPSB7XG4gICAgICB0eXBlLFxuICAgICAgbmFtZTogZm9udE5hbWUubmFtZSxcbiAgICAgIHN1YnR5cGUsXG4gICAgICBmaWxlOiBmb250RmlsZSxcbiAgICAgIGxlbmd0aDEsXG4gICAgICBsZW5ndGgyLFxuICAgICAgbGVuZ3RoMyxcbiAgICAgIGlzU3RhbmRhcmRGb250LFxuICAgICAgaXNJbnRlcm5hbEZvbnQsXG4gICAgICBsb2FkZWROYW1lOiBiYXNlRGljdC5sb2FkZWROYW1lLFxuICAgICAgY29tcG9zaXRlLFxuICAgICAgZml4ZWRQaXRjaDogZmFsc2UsXG4gICAgICBmb250TWF0cml4OiBkaWN0LmdldEFycmF5KFwiRm9udE1hdHJpeFwiKSB8fCBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWCxcbiAgICAgIGZpcnN0Q2hhcixcbiAgICAgIGxhc3RDaGFyLFxuICAgICAgdG9Vbmljb2RlLFxuICAgICAgYmJveDogZGVzY3JpcHRvci5nZXRBcnJheShcIkZvbnRCQm94XCIpIHx8IGRpY3QuZ2V0QXJyYXkoXCJGb250QkJveFwiKSxcbiAgICAgIGFzY2VudDogZGVzY3JpcHRvci5nZXQoXCJBc2NlbnRcIiksXG4gICAgICBkZXNjZW50OiBkZXNjcmlwdG9yLmdldChcIkRlc2NlbnRcIiksXG4gICAgICB4SGVpZ2h0OiBkZXNjcmlwdG9yLmdldChcIlhIZWlnaHRcIikgfHwgMCxcbiAgICAgIGNhcEhlaWdodDogZGVzY3JpcHRvci5nZXQoXCJDYXBIZWlnaHRcIikgfHwgMCxcbiAgICAgIGZsYWdzOiBkZXNjcmlwdG9yLmdldChcIkZsYWdzXCIpLFxuICAgICAgaXRhbGljQW5nbGU6IGRlc2NyaXB0b3IuZ2V0KFwiSXRhbGljQW5nbGVcIikgfHwgMCxcbiAgICAgIGlzVHlwZTNGb250LFxuICAgICAgY3NzRm9udEluZm8sXG4gICAgICBzY2FsZUZhY3RvcnM6IGdseXBoU2NhbGVGYWN0b3JzXG4gICAgfTtcblxuICAgIGlmIChjb21wb3NpdGUpIHtcbiAgICAgIGNvbnN0IGNpZEVuY29kaW5nID0gYmFzZURpY3QuZ2V0KFwiRW5jb2RpbmdcIik7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShjaWRFbmNvZGluZykpIHtcbiAgICAgICAgcHJvcGVydGllcy5jaWRFbmNvZGluZyA9IGNpZEVuY29kaW5nLm5hbWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNNYXAgPSBhd2FpdCBfY21hcC5DTWFwRmFjdG9yeS5jcmVhdGUoe1xuICAgICAgICBlbmNvZGluZzogY2lkRW5jb2RpbmcsXG4gICAgICAgIGZldGNoQnVpbHRJbkNNYXA6IHRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZCxcbiAgICAgICAgdXNlQ01hcDogbnVsbFxuICAgICAgfSk7XG4gICAgICBwcm9wZXJ0aWVzLmNNYXAgPSBjTWFwO1xuICAgICAgcHJvcGVydGllcy52ZXJ0aWNhbCA9IHByb3BlcnRpZXMuY01hcC52ZXJ0aWNhbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXMoZGljdCwgYmFzZURpY3QsIHByb3BlcnRpZXMpLnRoZW4obmV3UHJvcGVydGllcyA9PiB7XG4gICAgICB0aGlzLmV4dHJhY3RXaWR0aHMoZGljdCwgZGVzY3JpcHRvciwgbmV3UHJvcGVydGllcyk7XG4gICAgICByZXR1cm4gbmV3IF9mb250cy5Gb250KGZvbnROYW1lLm5hbWUsIGZvbnRGaWxlLCBuZXdQcm9wZXJ0aWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZEZvbnRQYXRocyhmb250LCBnbHlwaHMsIGhhbmRsZXIsIGV2YWx1YXRvck9wdGlvbnMpIHtcbiAgICBmdW5jdGlvbiBidWlsZFBhdGgoZm9udENoYXIpIHtcbiAgICAgIGNvbnN0IGdseXBoTmFtZSA9IGAke2ZvbnQubG9hZGVkTmFtZX1fcGF0aF8ke2ZvbnRDaGFyfWA7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChmb250LnJlbmRlcmVyLmhhc0J1aWx0UGF0aChmb250Q2hhcikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVyLnNlbmQoXCJjb21tb25vYmpcIiwgW2dseXBoTmFtZSwgXCJGb250UGF0aFwiLCBmb250LnJlbmRlcmVyLmdldFBhdGhKcyhmb250Q2hhcildKTtcbiAgICAgIH0gY2F0Y2ggKHJlYXNvbikge1xuICAgICAgICBpZiAoZXZhbHVhdG9yT3B0aW9ucy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgICAgICBoYW5kbGVyLnNlbmQoXCJVbnN1cHBvcnRlZEZlYXR1cmVcIiwge1xuICAgICAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRCdWlsZFBhdGhcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoYGJ1aWxkRm9udFBhdGhzIC0gaWdub3JpbmcgJHtnbHlwaE5hbWV9IGdseXBoOiBcIiR7cmVhc29ufVwiLmApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGdseXBoIG9mIGdseXBocykge1xuICAgICAgYnVpbGRQYXRoKGdseXBoLmZvbnRDaGFyKTtcbiAgICAgIGNvbnN0IGFjY2VudCA9IGdseXBoLmFjY2VudDtcblxuICAgICAgaWYgKGFjY2VudCAmJiBhY2NlbnQuZm9udENoYXIpIHtcbiAgICAgICAgYnVpbGRQYXRoKGFjY2VudC5mb250Q2hhcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldCBmYWxsYmFja0ZvbnREaWN0KCkge1xuICAgIGNvbnN0IGRpY3QgPSBuZXcgX3ByaW1pdGl2ZXMuRGljdCgpO1xuICAgIGRpY3Quc2V0KFwiQmFzZUZvbnRcIiwgX3ByaW1pdGl2ZXMuTmFtZS5nZXQoXCJQREZKUy1GYWxsYmFja0ZvbnRcIikpO1xuICAgIGRpY3Quc2V0KFwiVHlwZVwiLCBfcHJpbWl0aXZlcy5OYW1lLmdldChcIkZhbGxiYWNrVHlwZVwiKSk7XG4gICAgZGljdC5zZXQoXCJTdWJ0eXBlXCIsIF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiRmFsbGJhY2tUeXBlXCIpKTtcbiAgICBkaWN0LnNldChcIkVuY29kaW5nXCIsIF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiV2luQW5zaUVuY29kaW5nXCIpKTtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJmYWxsYmFja0ZvbnREaWN0XCIsIGRpY3QpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QYXJ0aWFsRXZhbHVhdG9yID0gUGFydGlhbEV2YWx1YXRvcjtcblxuY2xhc3MgVHJhbnNsYXRlZEZvbnQge1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgbG9hZGVkTmFtZSxcbiAgICBmb250LFxuICAgIGRpY3QsXG4gICAgZXZhbHVhdG9yT3B0aW9uc1xuICB9KSB7XG4gICAgdGhpcy5sb2FkZWROYW1lID0gbG9hZGVkTmFtZTtcbiAgICB0aGlzLmZvbnQgPSBmb250O1xuICAgIHRoaXMuZGljdCA9IGRpY3Q7XG4gICAgdGhpcy5fZXZhbHVhdG9yT3B0aW9ucyA9IGV2YWx1YXRvck9wdGlvbnMgfHwgRGVmYXVsdFBhcnRpYWxFdmFsdWF0b3JPcHRpb25zO1xuICAgIHRoaXMudHlwZTNMb2FkZWQgPSBudWxsO1xuICAgIHRoaXMudHlwZTNEZXBlbmRlbmNpZXMgPSBmb250LmlzVHlwZTNGb250ID8gbmV3IFNldCgpIDogbnVsbDtcbiAgICB0aGlzLnNlbnQgPSBmYWxzZTtcbiAgfVxuXG4gIHNlbmQoaGFuZGxlcikge1xuICAgIGlmICh0aGlzLnNlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbnQgPSB0cnVlO1xuICAgIGhhbmRsZXIuc2VuZChcImNvbW1vbm9ialwiLCBbdGhpcy5sb2FkZWROYW1lLCBcIkZvbnRcIiwgdGhpcy5mb250LmV4cG9ydERhdGEodGhpcy5fZXZhbHVhdG9yT3B0aW9ucy5mb250RXh0cmFQcm9wZXJ0aWVzKV0pO1xuICB9XG5cbiAgZmFsbGJhY2soaGFuZGxlcikge1xuICAgIGlmICghdGhpcy5mb250LmRhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZvbnQuZGlzYWJsZUZvbnRGYWNlID0gdHJ1ZTtcbiAgICBQYXJ0aWFsRXZhbHVhdG9yLmJ1aWxkRm9udFBhdGhzKHRoaXMuZm9udCwgdGhpcy5mb250LmdseXBoQ2FjaGVWYWx1ZXMsIGhhbmRsZXIsIHRoaXMuX2V2YWx1YXRvck9wdGlvbnMpO1xuICB9XG5cbiAgbG9hZFR5cGUzRGF0YShldmFsdWF0b3IsIHJlc291cmNlcywgdGFzaykge1xuICAgIGlmICh0aGlzLnR5cGUzTG9hZGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50eXBlM0xvYWRlZDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZm9udC5pc1R5cGUzRm9udCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTXVzdCBiZSBhIFR5cGUzIGZvbnQuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGUzRXZhbHVhdG9yID0gZXZhbHVhdG9yLmNsb25lKHtcbiAgICAgIGlnbm9yZUVycm9yczogZmFsc2VcbiAgICB9KTtcbiAgICB0eXBlM0V2YWx1YXRvci5wYXJzaW5nVHlwZTNGb250ID0gdHJ1ZTtcbiAgICBjb25zdCB0cmFuc2xhdGVkRm9udCA9IHRoaXMuZm9udCxcbiAgICAgICAgICB0eXBlM0RlcGVuZGVuY2llcyA9IHRoaXMudHlwZTNEZXBlbmRlbmNpZXM7XG4gICAgbGV0IGxvYWRDaGFyUHJvY3NQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgY29uc3QgY2hhclByb2NzID0gdGhpcy5kaWN0LmdldChcIkNoYXJQcm9jc1wiKTtcbiAgICBjb25zdCBmb250UmVzb3VyY2VzID0gdGhpcy5kaWN0LmdldChcIlJlc291cmNlc1wiKSB8fCByZXNvdXJjZXM7XG4gICAgY29uc3QgY2hhclByb2NPcGVyYXRvckxpc3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGNvbnN0IGlzRW1wdHlCQm94ID0gIXRyYW5zbGF0ZWRGb250LmJib3ggfHwgKDAsIF91dGlsLmlzQXJyYXlFcXVhbCkodHJhbnNsYXRlZEZvbnQuYmJveCwgWzAsIDAsIDAsIDBdKTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGNoYXJQcm9jcy5nZXRLZXlzKCkpIHtcbiAgICAgIGxvYWRDaGFyUHJvY3NQcm9taXNlID0gbG9hZENoYXJQcm9jc1Byb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGdseXBoU3RyZWFtID0gY2hhclByb2NzLmdldChrZXkpO1xuICAgICAgICBjb25zdCBvcGVyYXRvckxpc3QgPSBuZXcgX29wZXJhdG9yX2xpc3QuT3BlcmF0b3JMaXN0KCk7XG4gICAgICAgIHJldHVybiB0eXBlM0V2YWx1YXRvci5nZXRPcGVyYXRvckxpc3Qoe1xuICAgICAgICAgIHN0cmVhbTogZ2x5cGhTdHJlYW0sXG4gICAgICAgICAgdGFzayxcbiAgICAgICAgICByZXNvdXJjZXM6IGZvbnRSZXNvdXJjZXMsXG4gICAgICAgICAgb3BlcmF0b3JMaXN0XG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGlmIChvcGVyYXRvckxpc3QuZm5BcnJheVswXSA9PT0gX3V0aWwuT1BTLnNldENoYXJXaWR0aEFuZEJvdW5kcykge1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlVHlwZTNDb2xvck9wZXJhdG9ycyhvcGVyYXRvckxpc3QsIGlzRW1wdHlCQm94KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaGFyUHJvY09wZXJhdG9yTGlzdFtrZXldID0gb3BlcmF0b3JMaXN0LmdldElSKCk7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3kgb2Ygb3BlcmF0b3JMaXN0LmRlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgdHlwZTNEZXBlbmRlbmNpZXMuYWRkKGRlcGVuZGVuY3kpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgVHlwZTMgZm9udCByZXNvdXJjZSBcIiR7a2V5fVwiIGlzIG5vdCBhdmFpbGFibGUuYCk7XG4gICAgICAgICAgY29uc3QgZHVtbXlPcGVyYXRvckxpc3QgPSBuZXcgX29wZXJhdG9yX2xpc3QuT3BlcmF0b3JMaXN0KCk7XG4gICAgICAgICAgY2hhclByb2NPcGVyYXRvckxpc3Rba2V5XSA9IGR1bW15T3BlcmF0b3JMaXN0LmdldElSKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlM0xvYWRlZCA9IGxvYWRDaGFyUHJvY3NQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgdHJhbnNsYXRlZEZvbnQuY2hhclByb2NPcGVyYXRvckxpc3QgPSBjaGFyUHJvY09wZXJhdG9yTGlzdDtcblxuICAgICAgaWYgKHRoaXMuX2Jib3gpIHtcbiAgICAgICAgdHJhbnNsYXRlZEZvbnQuaXNDaGFyQkJveCA9IHRydWU7XG4gICAgICAgIHRyYW5zbGF0ZWRGb250LmJib3ggPSB0aGlzLl9iYm94O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLnR5cGUzTG9hZGVkO1xuICB9XG5cbiAgX3JlbW92ZVR5cGUzQ29sb3JPcGVyYXRvcnMob3BlcmF0b3JMaXN0LCBpc0VtcHR5QkJveCA9IGZhbHNlKSB7XG4gICAgaWYgKGlzRW1wdHlCQm94KSB7XG4gICAgICBpZiAoIXRoaXMuX2Jib3gpIHtcbiAgICAgICAgdGhpcy5fYmJveCA9IFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hhckJCb3ggPSBfdXRpbC5VdGlsLm5vcm1hbGl6ZVJlY3Qob3BlcmF0b3JMaXN0LmFyZ3NBcnJheVswXS5zbGljZSgyKSk7XG5cbiAgICAgIHRoaXMuX2Jib3hbMF0gPSBNYXRoLm1pbih0aGlzLl9iYm94WzBdLCBjaGFyQkJveFswXSk7XG4gICAgICB0aGlzLl9iYm94WzFdID0gTWF0aC5taW4odGhpcy5fYmJveFsxXSwgY2hhckJCb3hbMV0pO1xuICAgICAgdGhpcy5fYmJveFsyXSA9IE1hdGgubWF4KHRoaXMuX2Jib3hbMl0sIGNoYXJCQm94WzJdKTtcbiAgICAgIHRoaXMuX2Jib3hbM10gPSBNYXRoLm1heCh0aGlzLl9iYm94WzNdLCBjaGFyQkJveFszXSk7XG4gICAgfVxuXG4gICAgbGV0IGkgPSAxLFxuICAgICAgICBpaSA9IG9wZXJhdG9yTGlzdC5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaSA8IGlpKSB7XG4gICAgICBzd2l0Y2ggKG9wZXJhdG9yTGlzdC5mbkFycmF5W2ldKSB7XG4gICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZUNvbG9yU3BhY2U6XG4gICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxDb2xvclNwYWNlOlxuICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRTdHJva2VDb2xvcjpcbiAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0U3Ryb2tlQ29sb3JOOlxuICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGaWxsQ29sb3I6XG4gICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxDb2xvck46XG4gICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZUdyYXk6XG4gICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxHcmF5OlxuICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRTdHJva2VSR0JDb2xvcjpcbiAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0RmlsbFJHQkNvbG9yOlxuICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRTdHJva2VDTVlLQ29sb3I6XG4gICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxDTVlLQ29sb3I6XG4gICAgICAgIGNhc2UgX3V0aWwuT1BTLnNoYWRpbmdGaWxsOlxuICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRSZW5kZXJpbmdJbnRlbnQ6XG4gICAgICAgICAgb3BlcmF0b3JMaXN0LmZuQXJyYXkuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIG9wZXJhdG9yTGlzdC5hcmdzQXJyYXkuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGlpLS07XG4gICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0R1N0YXRlOlxuICAgICAgICAgIGNvbnN0IFtnU3RhdGVPYmpdID0gb3BlcmF0b3JMaXN0LmFyZ3NBcnJheVtpXTtcbiAgICAgICAgICBsZXQgaiA9IDAsXG4gICAgICAgICAgICAgIGpqID0gZ1N0YXRlT2JqLmxlbmd0aDtcblxuICAgICAgICAgIHdoaWxlIChqIDwgamopIHtcbiAgICAgICAgICAgIGNvbnN0IFtnU3RhdGVLZXldID0gZ1N0YXRlT2JqW2pdO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGdTdGF0ZUtleSkge1xuICAgICAgICAgICAgICBjYXNlIFwiVFJcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIlRSMlwiOlxuICAgICAgICAgICAgICBjYXNlIFwiSFRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIkJHXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJCRzJcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIlVDUlwiOlxuICAgICAgICAgICAgICBjYXNlIFwiVUNSMlwiOlxuICAgICAgICAgICAgICAgIGdTdGF0ZU9iai5zcGxpY2UoaiwgMSk7XG4gICAgICAgICAgICAgICAgamotLTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaisrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgU3RhdGVNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoaW5pdGlhbFN0YXRlID0gbmV3IEV2YWxTdGF0ZSgpKSB7XG4gICAgdGhpcy5zdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgICB0aGlzLnN0YXRlU3RhY2sgPSBbXTtcbiAgfVxuXG4gIHNhdmUoKSB7XG4gICAgY29uc3Qgb2xkID0gdGhpcy5zdGF0ZTtcbiAgICB0aGlzLnN0YXRlU3RhY2sucHVzaCh0aGlzLnN0YXRlKTtcbiAgICB0aGlzLnN0YXRlID0gb2xkLmNsb25lKCk7XG4gIH1cblxuICByZXN0b3JlKCkge1xuICAgIGNvbnN0IHByZXYgPSB0aGlzLnN0YXRlU3RhY2sucG9wKCk7XG5cbiAgICBpZiAocHJldikge1xuICAgICAgdGhpcy5zdGF0ZSA9IHByZXY7XG4gICAgfVxuICB9XG5cbiAgdHJhbnNmb3JtKGFyZ3MpIHtcbiAgICB0aGlzLnN0YXRlLmN0bSA9IF91dGlsLlV0aWwudHJhbnNmb3JtKHRoaXMuc3RhdGUuY3RtLCBhcmdzKTtcbiAgfVxuXG59XG5cbmNsYXNzIFRleHRTdGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY3RtID0gbmV3IEZsb2F0MzJBcnJheShfdXRpbC5JREVOVElUWV9NQVRSSVgpO1xuICAgIHRoaXMuZm9udE5hbWUgPSBudWxsO1xuICAgIHRoaXMuZm9udFNpemUgPSAwO1xuICAgIHRoaXMuZm9udCA9IG51bGw7XG4gICAgdGhpcy5mb250TWF0cml4ID0gX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG4gICAgdGhpcy50ZXh0TWF0cml4ID0gX3V0aWwuSURFTlRJVFlfTUFUUklYLnNsaWNlKCk7XG4gICAgdGhpcy50ZXh0TGluZU1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWC5zbGljZSgpO1xuICAgIHRoaXMuY2hhclNwYWNpbmcgPSAwO1xuICAgIHRoaXMud29yZFNwYWNpbmcgPSAwO1xuICAgIHRoaXMubGVhZGluZyA9IDA7XG4gICAgdGhpcy50ZXh0SFNjYWxlID0gMTtcbiAgICB0aGlzLnRleHRSaXNlID0gMDtcbiAgfVxuXG4gIHNldFRleHRNYXRyaXgoYSwgYiwgYywgZCwgZSwgZikge1xuICAgIGNvbnN0IG0gPSB0aGlzLnRleHRNYXRyaXg7XG4gICAgbVswXSA9IGE7XG4gICAgbVsxXSA9IGI7XG4gICAgbVsyXSA9IGM7XG4gICAgbVszXSA9IGQ7XG4gICAgbVs0XSA9IGU7XG4gICAgbVs1XSA9IGY7XG4gIH1cblxuICBzZXRUZXh0TGluZU1hdHJpeChhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgY29uc3QgbSA9IHRoaXMudGV4dExpbmVNYXRyaXg7XG4gICAgbVswXSA9IGE7XG4gICAgbVsxXSA9IGI7XG4gICAgbVsyXSA9IGM7XG4gICAgbVszXSA9IGQ7XG4gICAgbVs0XSA9IGU7XG4gICAgbVs1XSA9IGY7XG4gIH1cblxuICB0cmFuc2xhdGVUZXh0TWF0cml4KHgsIHkpIHtcbiAgICBjb25zdCBtID0gdGhpcy50ZXh0TWF0cml4O1xuICAgIG1bNF0gPSBtWzBdICogeCArIG1bMl0gKiB5ICsgbVs0XTtcbiAgICBtWzVdID0gbVsxXSAqIHggKyBtWzNdICogeSArIG1bNV07XG4gIH1cblxuICB0cmFuc2xhdGVUZXh0TGluZU1hdHJpeCh4LCB5KSB7XG4gICAgY29uc3QgbSA9IHRoaXMudGV4dExpbmVNYXRyaXg7XG4gICAgbVs0XSA9IG1bMF0gKiB4ICsgbVsyXSAqIHkgKyBtWzRdO1xuICAgIG1bNV0gPSBtWzFdICogeCArIG1bM10gKiB5ICsgbVs1XTtcbiAgfVxuXG4gIGNhcnJpYWdlUmV0dXJuKCkge1xuICAgIHRoaXMudHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoMCwgLXRoaXMubGVhZGluZyk7XG4gICAgdGhpcy50ZXh0TWF0cml4ID0gdGhpcy50ZXh0TGluZU1hdHJpeC5zbGljZSgpO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgY29uc3QgY2xvbmUgPSBPYmplY3QuY3JlYXRlKHRoaXMpO1xuICAgIGNsb25lLnRleHRNYXRyaXggPSB0aGlzLnRleHRNYXRyaXguc2xpY2UoKTtcbiAgICBjbG9uZS50ZXh0TGluZU1hdHJpeCA9IHRoaXMudGV4dExpbmVNYXRyaXguc2xpY2UoKTtcbiAgICBjbG9uZS5mb250TWF0cml4ID0gdGhpcy5mb250TWF0cml4LnNsaWNlKCk7XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG5cbn1cblxuY2xhc3MgRXZhbFN0YXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jdG0gPSBuZXcgRmxvYXQzMkFycmF5KF91dGlsLklERU5USVRZX01BVFJJWCk7XG4gICAgdGhpcy5mb250ID0gbnVsbDtcbiAgICB0aGlzLnRleHRSZW5kZXJpbmdNb2RlID0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTDtcbiAgICB0aGlzLmZpbGxDb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXk7XG4gICAgdGhpcy5zdHJva2VDb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXk7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgfVxuXG59XG5cbmNsYXNzIEV2YWx1YXRvclByZXByb2Nlc3NvciB7XG4gIHN0YXRpYyBnZXQgb3BNYXAoKSB7XG4gICAgY29uc3QgZ2V0T1BNYXAgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgICAgdC53ID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldExpbmVXaWR0aCxcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuSiA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRMaW5lQ2FwLFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5qID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldExpbmVKb2luLFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5NID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldE1pdGVyTGltaXQsXG4gICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LmQgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0RGFzaCxcbiAgICAgICAgbnVtQXJnczogMixcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQucmkgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0UmVuZGVyaW5nSW50ZW50LFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5pID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldEZsYXRuZXNzLFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5ncyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRHU3RhdGUsXG4gICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LnEgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2F2ZSxcbiAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuUSA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5yZXN0b3JlLFxuICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5jbSA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy50cmFuc2Zvcm0sXG4gICAgICAgIG51bUFyZ3M6IDYsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0Lm0gPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMubW92ZVRvLFxuICAgICAgICBudW1BcmdzOiAyLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5sID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmxpbmVUbyxcbiAgICAgICAgbnVtQXJnczogMixcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuYyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5jdXJ2ZVRvLFxuICAgICAgICBudW1BcmdzOiA2LFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC52ID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmN1cnZlVG8yLFxuICAgICAgICBudW1BcmdzOiA0LFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC55ID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmN1cnZlVG8zLFxuICAgICAgICBudW1BcmdzOiA0LFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5oID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmNsb3NlUGF0aCxcbiAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQucmUgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMucmVjdGFuZ2xlLFxuICAgICAgICBudW1BcmdzOiA0LFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5TID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnN0cm9rZSxcbiAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQucyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5jbG9zZVN0cm9rZSxcbiAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuZiA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5maWxsLFxuICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5GID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmZpbGwsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0W1wiZipcIl0gPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuZW9GaWxsLFxuICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5CID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmZpbGxTdHJva2UsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0W1wiQipcIl0gPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuZW9GaWxsU3Ryb2tlLFxuICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5iID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmNsb3NlRmlsbFN0cm9rZSxcbiAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHRbXCJiKlwiXSA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5jbG9zZUVPRmlsbFN0cm9rZSxcbiAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQubiA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5lbmRQYXRoLFxuICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5XID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmNsaXAsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0W1wiVypcIl0gPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuZW9DbGlwLFxuICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5CVCA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5iZWdpblRleHQsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LkVUID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmVuZFRleHQsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LlRjID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldENoYXJTcGFjaW5nLFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5UdyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRXb3JkU3BhY2luZyxcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuVHogPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0SFNjYWxlLFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5UTCA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRMZWFkaW5nLFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5UZiA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRGb250LFxuICAgICAgICBudW1BcmdzOiAyLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5UciA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRUZXh0UmVuZGVyaW5nTW9kZSxcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuVHMgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0VGV4dFJpc2UsXG4gICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LlRkID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLm1vdmVUZXh0LFxuICAgICAgICBudW1BcmdzOiAyLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5URCA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRMZWFkaW5nTW92ZVRleHQsXG4gICAgICAgIG51bUFyZ3M6IDIsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LlRtID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldFRleHRNYXRyaXgsXG4gICAgICAgIG51bUFyZ3M6IDYsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0W1wiVCpcIl0gPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMubmV4dExpbmUsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LlRqID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNob3dUZXh0LFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5USiA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zaG93U3BhY2VkVGV4dCxcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHRbXCInXCJdID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLm5leHRMaW5lU2hvd1RleHQsXG4gICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0WydcIiddID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLm5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0LFxuICAgICAgICBudW1BcmdzOiAzLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5kMCA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRDaGFyV2lkdGgsXG4gICAgICAgIG51bUFyZ3M6IDIsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LmQxID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldENoYXJXaWR0aEFuZEJvdW5kcyxcbiAgICAgICAgbnVtQXJnczogNixcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuQ1MgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0U3Ryb2tlQ29sb3JTcGFjZSxcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuY3MgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0RmlsbENvbG9yU3BhY2UsXG4gICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LlNDID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldFN0cm9rZUNvbG9yLFxuICAgICAgICBudW1BcmdzOiA0LFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IHRydWVcbiAgICAgIH07XG4gICAgICB0LlNDTiA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRTdHJva2VDb2xvck4sXG4gICAgICAgIG51bUFyZ3M6IDMzLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IHRydWVcbiAgICAgIH07XG4gICAgICB0LnNjID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldEZpbGxDb2xvcixcbiAgICAgICAgbnVtQXJnczogNCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiB0cnVlXG4gICAgICB9O1xuICAgICAgdC5zY24gPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0RmlsbENvbG9yTixcbiAgICAgICAgbnVtQXJnczogMzMsXG4gICAgICAgIHZhcmlhYmxlQXJnczogdHJ1ZVxuICAgICAgfTtcbiAgICAgIHQuRyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRTdHJva2VHcmF5LFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5nID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldEZpbGxHcmF5LFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5SRyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRTdHJva2VSR0JDb2xvcixcbiAgICAgICAgbnVtQXJnczogMyxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQucmcgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0RmlsbFJHQkNvbG9yLFxuICAgICAgICBudW1BcmdzOiAzLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5LID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldFN0cm9rZUNNWUtDb2xvcixcbiAgICAgICAgbnVtQXJnczogNCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuayA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRGaWxsQ01ZS0NvbG9yLFxuICAgICAgICBudW1BcmdzOiA0LFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5zaCA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zaGFkaW5nRmlsbCxcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuQkkgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuYmVnaW5JbmxpbmVJbWFnZSxcbiAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuSUQgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuYmVnaW5JbWFnZURhdGEsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LkVJID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmVuZElubGluZUltYWdlLFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5EbyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5wYWludFhPYmplY3QsXG4gICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0Lk1QID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLm1hcmtQb2ludCxcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuRFAgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMubWFya1BvaW50UHJvcHMsXG4gICAgICAgIG51bUFyZ3M6IDIsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LkJNQyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5iZWdpbk1hcmtlZENvbnRlbnQsXG4gICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LkJEQyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyxcbiAgICAgICAgbnVtQXJnczogMixcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuRU1DID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmVuZE1hcmtlZENvbnRlbnQsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LkJYID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmJlZ2luQ29tcGF0LFxuICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5FWCA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5lbmRDb21wYXQsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LkJNID0gbnVsbDtcbiAgICAgIHQuQkQgPSBudWxsO1xuICAgICAgdC50cnVlID0gbnVsbDtcbiAgICAgIHQuZmEgPSBudWxsO1xuICAgICAgdC5mYWwgPSBudWxsO1xuICAgICAgdC5mYWxzID0gbnVsbDtcbiAgICAgIHQuZmFsc2UgPSBudWxsO1xuICAgICAgdC5udSA9IG51bGw7XG4gICAgICB0Lm51bCA9IG51bGw7XG4gICAgICB0Lm51bGwgPSBudWxsO1xuICAgIH0pO1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIm9wTWFwXCIsIGdldE9QTWFwKCkpO1xuICB9XG5cbiAgc3RhdGljIGdldCBNQVhfSU5WQUxJRF9QQVRIX09QUygpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJNQVhfSU5WQUxJRF9QQVRIX09QU1wiLCAyMCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzdHJlYW0sIHhyZWYsIHN0YXRlTWFuYWdlciA9IG5ldyBTdGF0ZU1hbmFnZXIoKSkge1xuICAgIHRoaXMucGFyc2VyID0gbmV3IF9wYXJzZXIuUGFyc2VyKHtcbiAgICAgIGxleGVyOiBuZXcgX3BhcnNlci5MZXhlcihzdHJlYW0sIEV2YWx1YXRvclByZXByb2Nlc3Nvci5vcE1hcCksXG4gICAgICB4cmVmXG4gICAgfSk7XG4gICAgdGhpcy5zdGF0ZU1hbmFnZXIgPSBzdGF0ZU1hbmFnZXI7XG4gICAgdGhpcy5ub25Qcm9jZXNzZWRBcmdzID0gW107XG4gICAgdGhpcy5fbnVtSW52YWxpZFBhdGhPUFMgPSAwO1xuICB9XG5cbiAgZ2V0IHNhdmVkU3RhdGVzRGVwdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVNYW5hZ2VyLnN0YXRlU3RhY2subGVuZ3RoO1xuICB9XG5cbiAgcmVhZChvcGVyYXRpb24pIHtcbiAgICBsZXQgYXJncyA9IG9wZXJhdGlvbi5hcmdzO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IG9iaiA9IHRoaXMucGFyc2VyLmdldE9iaigpO1xuXG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuQ21kKSB7XG4gICAgICAgIGNvbnN0IGNtZCA9IG9iai5jbWQ7XG4gICAgICAgIGNvbnN0IG9wU3BlYyA9IEV2YWx1YXRvclByZXByb2Nlc3Nvci5vcE1hcFtjbWRdO1xuXG4gICAgICAgIGlmICghb3BTcGVjKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBVbmtub3duIGNvbW1hbmQgXCIke2NtZH1cIi5gKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZuID0gb3BTcGVjLmlkO1xuICAgICAgICBjb25zdCBudW1BcmdzID0gb3BTcGVjLm51bUFyZ3M7XG4gICAgICAgIGxldCBhcmdzTGVuZ3RoID0gYXJncyAhPT0gbnVsbCA/IGFyZ3MubGVuZ3RoIDogMDtcblxuICAgICAgICBpZiAoIW9wU3BlYy52YXJpYWJsZUFyZ3MpIHtcbiAgICAgICAgICBpZiAoYXJnc0xlbmd0aCAhPT0gbnVtQXJncykge1xuICAgICAgICAgICAgY29uc3Qgbm9uUHJvY2Vzc2VkQXJncyA9IHRoaXMubm9uUHJvY2Vzc2VkQXJncztcblxuICAgICAgICAgICAgd2hpbGUgKGFyZ3NMZW5ndGggPiBudW1BcmdzKSB7XG4gICAgICAgICAgICAgIG5vblByb2Nlc3NlZEFyZ3MucHVzaChhcmdzLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICBhcmdzTGVuZ3RoLS07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdoaWxlIChhcmdzTGVuZ3RoIDwgbnVtQXJncyAmJiBub25Qcm9jZXNzZWRBcmdzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICBpZiAoYXJncyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGFyZ3MudW5zaGlmdChub25Qcm9jZXNzZWRBcmdzLnBvcCgpKTtcbiAgICAgICAgICAgICAgYXJnc0xlbmd0aCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhcmdzTGVuZ3RoIDwgbnVtQXJncykge1xuICAgICAgICAgICAgY29uc3QgcGFydGlhbE1zZyA9IGBjb21tYW5kICR7Y21kfTogZXhwZWN0ZWQgJHtudW1BcmdzfSBhcmdzLCBgICsgYGJ1dCByZWNlaXZlZCAke2FyZ3NMZW5ndGh9IGFyZ3MuYDtcblxuICAgICAgICAgICAgaWYgKGZuID49IF91dGlsLk9QUy5tb3ZlVG8gJiYgZm4gPD0gX3V0aWwuT1BTLmVuZFBhdGggJiYgKyt0aGlzLl9udW1JbnZhbGlkUGF0aE9QUyA+IEV2YWx1YXRvclByZXByb2Nlc3Nvci5NQVhfSU5WQUxJRF9QQVRIX09QUykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEludmFsaWQgJHtwYXJ0aWFsTXNnfWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYFNraXBwaW5nICR7cGFydGlhbE1zZ31gKTtcblxuICAgICAgICAgICAgaWYgKGFyZ3MgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgYXJncy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoYXJnc0xlbmd0aCA+IG51bUFyZ3MpIHtcbiAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoYENvbW1hbmQgJHtjbWR9OiBleHBlY3RlZCBbMCwgJHtudW1BcmdzfV0gYXJncywgYCArIGBidXQgcmVjZWl2ZWQgJHthcmdzTGVuZ3RofSBhcmdzLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzQ29tbWFuZChmbiwgYXJncyk7XG4gICAgICAgIG9wZXJhdGlvbi5mbiA9IGZuO1xuICAgICAgICBvcGVyYXRpb24uYXJncyA9IGFyZ3M7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAob2JqID09PSBfcHJpbWl0aXZlcy5FT0YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAob2JqICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChhcmdzID09PSBudWxsKSB7XG4gICAgICAgICAgYXJncyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJncy5wdXNoKG9iaik7XG5cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMzMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJUb28gbWFueSBhcmd1bWVudHNcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcmVwcm9jZXNzQ29tbWFuZChmbiwgYXJncykge1xuICAgIHN3aXRjaCAoZm4gfCAwKSB7XG4gICAgICBjYXNlIF91dGlsLk9QUy5zYXZlOlxuICAgICAgICB0aGlzLnN0YXRlTWFuYWdlci5zYXZlKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIF91dGlsLk9QUy5yZXN0b3JlOlxuICAgICAgICB0aGlzLnN0YXRlTWFuYWdlci5yZXN0b3JlKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIF91dGlsLk9QUy50cmFuc2Zvcm06XG4gICAgICAgIHRoaXMuc3RhdGVNYW5hZ2VyLnRyYW5zZm9ybShhcmdzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5FdmFsdWF0b3JQcmVwcm9jZXNzb3IgPSBFdmFsdWF0b3JQcmVwcm9jZXNzb3I7XG5cbi8qKiovIH0pLFxuLyogMjYgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuSWRlbnRpdHlDTWFwID0gZXhwb3J0cy5DTWFwRmFjdG9yeSA9IGV4cG9ydHMuQ01hcCA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxudmFyIF9wYXJzZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI3KTtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg5KTtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEwKTtcblxuY29uc3QgQlVJTFRfSU5fQ01BUFMgPSBbXCJBZG9iZS1HQjEtVUNTMlwiLCBcIkFkb2JlLUNOUzEtVUNTMlwiLCBcIkFkb2JlLUphcGFuMS1VQ1MyXCIsIFwiQWRvYmUtS29yZWExLVVDUzJcIiwgXCI3OC1FVUMtSFwiLCBcIjc4LUVVQy1WXCIsIFwiNzgtSFwiLCBcIjc4LVJLU0otSFwiLCBcIjc4LVJLU0otVlwiLCBcIjc4LVZcIiwgXCI3OG1zLVJLU0otSFwiLCBcIjc4bXMtUktTSi1WXCIsIFwiODNwdi1SS1NKLUhcIiwgXCI5MG1zLVJLU0otSFwiLCBcIjkwbXMtUktTSi1WXCIsIFwiOTBtc3AtUktTSi1IXCIsIFwiOTBtc3AtUktTSi1WXCIsIFwiOTBwdi1SS1NKLUhcIiwgXCI5MHB2LVJLU0otVlwiLCBcIkFkZC1IXCIsIFwiQWRkLVJLU0otSFwiLCBcIkFkZC1SS1NKLVZcIiwgXCJBZGQtVlwiLCBcIkFkb2JlLUNOUzEtMFwiLCBcIkFkb2JlLUNOUzEtMVwiLCBcIkFkb2JlLUNOUzEtMlwiLCBcIkFkb2JlLUNOUzEtM1wiLCBcIkFkb2JlLUNOUzEtNFwiLCBcIkFkb2JlLUNOUzEtNVwiLCBcIkFkb2JlLUNOUzEtNlwiLCBcIkFkb2JlLUdCMS0wXCIsIFwiQWRvYmUtR0IxLTFcIiwgXCJBZG9iZS1HQjEtMlwiLCBcIkFkb2JlLUdCMS0zXCIsIFwiQWRvYmUtR0IxLTRcIiwgXCJBZG9iZS1HQjEtNVwiLCBcIkFkb2JlLUphcGFuMS0wXCIsIFwiQWRvYmUtSmFwYW4xLTFcIiwgXCJBZG9iZS1KYXBhbjEtMlwiLCBcIkFkb2JlLUphcGFuMS0zXCIsIFwiQWRvYmUtSmFwYW4xLTRcIiwgXCJBZG9iZS1KYXBhbjEtNVwiLCBcIkFkb2JlLUphcGFuMS02XCIsIFwiQWRvYmUtS29yZWExLTBcIiwgXCJBZG9iZS1Lb3JlYTEtMVwiLCBcIkFkb2JlLUtvcmVhMS0yXCIsIFwiQjUtSFwiLCBcIkI1LVZcIiwgXCJCNXBjLUhcIiwgXCJCNXBjLVZcIiwgXCJDTlMtRVVDLUhcIiwgXCJDTlMtRVVDLVZcIiwgXCJDTlMxLUhcIiwgXCJDTlMxLVZcIiwgXCJDTlMyLUhcIiwgXCJDTlMyLVZcIiwgXCJFVEhLLUI1LUhcIiwgXCJFVEhLLUI1LVZcIiwgXCJFVGVuLUI1LUhcIiwgXCJFVGVuLUI1LVZcIiwgXCJFVGVubXMtQjUtSFwiLCBcIkVUZW5tcy1CNS1WXCIsIFwiRVVDLUhcIiwgXCJFVUMtVlwiLCBcIkV4dC1IXCIsIFwiRXh0LVJLU0otSFwiLCBcIkV4dC1SS1NKLVZcIiwgXCJFeHQtVlwiLCBcIkdCLUVVQy1IXCIsIFwiR0ItRVVDLVZcIiwgXCJHQi1IXCIsIFwiR0ItVlwiLCBcIkdCSy1FVUMtSFwiLCBcIkdCSy1FVUMtVlwiLCBcIkdCSzJLLUhcIiwgXCJHQksySy1WXCIsIFwiR0JLcC1FVUMtSFwiLCBcIkdCS3AtRVVDLVZcIiwgXCJHQlQtRVVDLUhcIiwgXCJHQlQtRVVDLVZcIiwgXCJHQlQtSFwiLCBcIkdCVC1WXCIsIFwiR0JUcGMtRVVDLUhcIiwgXCJHQlRwYy1FVUMtVlwiLCBcIkdCcGMtRVVDLUhcIiwgXCJHQnBjLUVVQy1WXCIsIFwiSFwiLCBcIkhLZGxhLUI1LUhcIiwgXCJIS2RsYS1CNS1WXCIsIFwiSEtkbGItQjUtSFwiLCBcIkhLZGxiLUI1LVZcIiwgXCJIS2djY3MtQjUtSFwiLCBcIkhLZ2Njcy1CNS1WXCIsIFwiSEttMzE0LUI1LUhcIiwgXCJIS20zMTQtQjUtVlwiLCBcIkhLbTQ3MS1CNS1IXCIsIFwiSEttNDcxLUI1LVZcIiwgXCJIS3Njcy1CNS1IXCIsIFwiSEtzY3MtQjUtVlwiLCBcIkhhbmtha3VcIiwgXCJIaXJhZ2FuYVwiLCBcIktTQy1FVUMtSFwiLCBcIktTQy1FVUMtVlwiLCBcIktTQy1IXCIsIFwiS1NDLUpvaGFiLUhcIiwgXCJLU0MtSm9oYWItVlwiLCBcIktTQy1WXCIsIFwiS1NDbXMtVUhDLUhcIiwgXCJLU0Ntcy1VSEMtSFctSFwiLCBcIktTQ21zLVVIQy1IVy1WXCIsIFwiS1NDbXMtVUhDLVZcIiwgXCJLU0NwYy1FVUMtSFwiLCBcIktTQ3BjLUVVQy1WXCIsIFwiS2F0YWthbmFcIiwgXCJOV1AtSFwiLCBcIk5XUC1WXCIsIFwiUktTSi1IXCIsIFwiUktTSi1WXCIsIFwiUm9tYW5cIiwgXCJVbmlDTlMtVUNTMi1IXCIsIFwiVW5pQ05TLVVDUzItVlwiLCBcIlVuaUNOUy1VVEYxNi1IXCIsIFwiVW5pQ05TLVVURjE2LVZcIiwgXCJVbmlDTlMtVVRGMzItSFwiLCBcIlVuaUNOUy1VVEYzMi1WXCIsIFwiVW5pQ05TLVVURjgtSFwiLCBcIlVuaUNOUy1VVEY4LVZcIiwgXCJVbmlHQi1VQ1MyLUhcIiwgXCJVbmlHQi1VQ1MyLVZcIiwgXCJVbmlHQi1VVEYxNi1IXCIsIFwiVW5pR0ItVVRGMTYtVlwiLCBcIlVuaUdCLVVURjMyLUhcIiwgXCJVbmlHQi1VVEYzMi1WXCIsIFwiVW5pR0ItVVRGOC1IXCIsIFwiVW5pR0ItVVRGOC1WXCIsIFwiVW5pSklTLVVDUzItSFwiLCBcIlVuaUpJUy1VQ1MyLUhXLUhcIiwgXCJVbmlKSVMtVUNTMi1IVy1WXCIsIFwiVW5pSklTLVVDUzItVlwiLCBcIlVuaUpJUy1VVEYxNi1IXCIsIFwiVW5pSklTLVVURjE2LVZcIiwgXCJVbmlKSVMtVVRGMzItSFwiLCBcIlVuaUpJUy1VVEYzMi1WXCIsIFwiVW5pSklTLVVURjgtSFwiLCBcIlVuaUpJUy1VVEY4LVZcIiwgXCJVbmlKSVMyMDA0LVVURjE2LUhcIiwgXCJVbmlKSVMyMDA0LVVURjE2LVZcIiwgXCJVbmlKSVMyMDA0LVVURjMyLUhcIiwgXCJVbmlKSVMyMDA0LVVURjMyLVZcIiwgXCJVbmlKSVMyMDA0LVVURjgtSFwiLCBcIlVuaUpJUzIwMDQtVVRGOC1WXCIsIFwiVW5pSklTUHJvLVVDUzItSFctVlwiLCBcIlVuaUpJU1Byby1VQ1MyLVZcIiwgXCJVbmlKSVNQcm8tVVRGOC1WXCIsIFwiVW5pSklTWDAyMTMtVVRGMzItSFwiLCBcIlVuaUpJU1gwMjEzLVVURjMyLVZcIiwgXCJVbmlKSVNYMDIxMzIwMDQtVVRGMzItSFwiLCBcIlVuaUpJU1gwMjEzMjAwNC1VVEYzMi1WXCIsIFwiVW5pS1MtVUNTMi1IXCIsIFwiVW5pS1MtVUNTMi1WXCIsIFwiVW5pS1MtVVRGMTYtSFwiLCBcIlVuaUtTLVVURjE2LVZcIiwgXCJVbmlLUy1VVEYzMi1IXCIsIFwiVW5pS1MtVVRGMzItVlwiLCBcIlVuaUtTLVVURjgtSFwiLCBcIlVuaUtTLVVURjgtVlwiLCBcIlZcIiwgXCJXUC1TeW1ib2xcIl07XG5jb25zdCBNQVhfTUFQX1JBTkdFID0gMiAqKiAyNCAtIDE7XG5cbmNsYXNzIENNYXAge1xuICBjb25zdHJ1Y3RvcihidWlsdEluQ01hcCA9IGZhbHNlKSB7XG4gICAgdGhpcy5jb2Rlc3BhY2VSYW5nZXMgPSBbW10sIFtdLCBbXSwgW11dO1xuICAgIHRoaXMubnVtQ29kZXNwYWNlUmFuZ2VzID0gMDtcbiAgICB0aGlzLl9tYXAgPSBbXTtcbiAgICB0aGlzLm5hbWUgPSBcIlwiO1xuICAgIHRoaXMudmVydGljYWwgPSBmYWxzZTtcbiAgICB0aGlzLnVzZUNNYXAgPSBudWxsO1xuICAgIHRoaXMuYnVpbHRJbkNNYXAgPSBidWlsdEluQ01hcDtcbiAgfVxuXG4gIGFkZENvZGVzcGFjZVJhbmdlKG4sIGxvdywgaGlnaCkge1xuICAgIHRoaXMuY29kZXNwYWNlUmFuZ2VzW24gLSAxXS5wdXNoKGxvdywgaGlnaCk7XG4gICAgdGhpcy5udW1Db2Rlc3BhY2VSYW5nZXMrKztcbiAgfVxuXG4gIG1hcENpZFJhbmdlKGxvdywgaGlnaCwgZHN0TG93KSB7XG4gICAgaWYgKGhpZ2ggLSBsb3cgPiBNQVhfTUFQX1JBTkdFKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJtYXBDaWRSYW5nZSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS5cIik7XG4gICAgfVxuXG4gICAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgICB0aGlzLl9tYXBbbG93KytdID0gZHN0TG93Kys7XG4gICAgfVxuICB9XG5cbiAgbWFwQmZSYW5nZShsb3csIGhpZ2gsIGRzdExvdykge1xuICAgIGlmIChoaWdoIC0gbG93ID4gTUFYX01BUF9SQU5HRSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibWFwQmZSYW5nZSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS5cIik7XG4gICAgfVxuXG4gICAgY29uc3QgbGFzdEJ5dGUgPSBkc3RMb3cubGVuZ3RoIC0gMTtcblxuICAgIHdoaWxlIChsb3cgPD0gaGlnaCkge1xuICAgICAgdGhpcy5fbWFwW2xvdysrXSA9IGRzdExvdztcbiAgICAgIGNvbnN0IG5leHRDaGFyQ29kZSA9IGRzdExvdy5jaGFyQ29kZUF0KGxhc3RCeXRlKSArIDE7XG5cbiAgICAgIGlmIChuZXh0Q2hhckNvZGUgPiAweGZmKSB7XG4gICAgICAgIGRzdExvdyA9IGRzdExvdy5zdWJzdHJpbmcoMCwgbGFzdEJ5dGUgLSAxKSArIFN0cmluZy5mcm9tQ2hhckNvZGUoZHN0TG93LmNoYXJDb2RlQXQobGFzdEJ5dGUgLSAxKSArIDEpICsgXCJcXHgwMFwiO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZHN0TG93ID0gZHN0TG93LnN1YnN0cmluZygwLCBsYXN0Qnl0ZSkgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKG5leHRDaGFyQ29kZSk7XG4gICAgfVxuICB9XG5cbiAgbWFwQmZSYW5nZVRvQXJyYXkobG93LCBoaWdoLCBhcnJheSkge1xuICAgIGlmIChoaWdoIC0gbG93ID4gTUFYX01BUF9SQU5HRSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibWFwQmZSYW5nZVRvQXJyYXkgLSBpZ25vcmluZyBkYXRhIGFib3ZlIE1BWF9NQVBfUkFOR0UuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGlpID0gYXJyYXkubGVuZ3RoO1xuICAgIGxldCBpID0gMDtcblxuICAgIHdoaWxlIChsb3cgPD0gaGlnaCAmJiBpIDwgaWkpIHtcbiAgICAgIHRoaXMuX21hcFtsb3ddID0gYXJyYXlbaSsrXTtcbiAgICAgICsrbG93O1xuICAgIH1cbiAgfVxuXG4gIG1hcE9uZShzcmMsIGRzdCkge1xuICAgIHRoaXMuX21hcFtzcmNdID0gZHN0O1xuICB9XG5cbiAgbG9va3VwKGNvZGUpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFwW2NvZGVdO1xuICB9XG5cbiAgY29udGFpbnMoY29kZSkge1xuICAgIHJldHVybiB0aGlzLl9tYXBbY29kZV0gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZvckVhY2goY2FsbGJhY2spIHtcbiAgICBjb25zdCBtYXAgPSB0aGlzLl9tYXA7XG4gICAgY29uc3QgbGVuZ3RoID0gbWFwLmxlbmd0aDtcblxuICAgIGlmIChsZW5ndGggPD0gMHgxMDAwMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAobWFwW2ldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjYWxsYmFjayhpLCBtYXBbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgaSBpbiBtYXApIHtcbiAgICAgICAgY2FsbGJhY2soaSwgbWFwW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGFyQ29kZU9mKHZhbHVlKSB7XG4gICAgY29uc3QgbWFwID0gdGhpcy5fbWFwO1xuXG4gICAgaWYgKG1hcC5sZW5ndGggPD0gMHgxMDAwMCkge1xuICAgICAgcmV0dXJuIG1hcC5pbmRleE9mKHZhbHVlKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoYXJDb2RlIGluIG1hcCkge1xuICAgICAgaWYgKG1hcFtjaGFyQ29kZV0gPT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBjaGFyQ29kZSB8IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgZ2V0TWFwKCkge1xuICAgIHJldHVybiB0aGlzLl9tYXA7XG4gIH1cblxuICByZWFkQ2hhckNvZGUoc3RyLCBvZmZzZXQsIG91dCkge1xuICAgIGxldCBjID0gMDtcbiAgICBjb25zdCBjb2Rlc3BhY2VSYW5nZXMgPSB0aGlzLmNvZGVzcGFjZVJhbmdlcztcblxuICAgIGZvciAobGV0IG4gPSAwLCBubiA9IGNvZGVzcGFjZVJhbmdlcy5sZW5ndGg7IG4gPCBubjsgbisrKSB7XG4gICAgICBjID0gKGMgPDwgOCB8IHN0ci5jaGFyQ29kZUF0KG9mZnNldCArIG4pKSA+Pj4gMDtcbiAgICAgIGNvbnN0IGNvZGVzcGFjZVJhbmdlID0gY29kZXNwYWNlUmFuZ2VzW25dO1xuXG4gICAgICBmb3IgKGxldCBrID0gMCwga2sgPSBjb2Rlc3BhY2VSYW5nZS5sZW5ndGg7IGsgPCBrazspIHtcbiAgICAgICAgY29uc3QgbG93ID0gY29kZXNwYWNlUmFuZ2VbaysrXTtcbiAgICAgICAgY29uc3QgaGlnaCA9IGNvZGVzcGFjZVJhbmdlW2srK107XG5cbiAgICAgICAgaWYgKGMgPj0gbG93ICYmIGMgPD0gaGlnaCkge1xuICAgICAgICAgIG91dC5jaGFyY29kZSA9IGM7XG4gICAgICAgICAgb3V0Lmxlbmd0aCA9IG4gKyAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIG91dC5jaGFyY29kZSA9IDA7XG4gICAgb3V0Lmxlbmd0aCA9IDE7XG4gIH1cblxuICBnZXRDaGFyQ29kZUxlbmd0aChjaGFyQ29kZSkge1xuICAgIGNvbnN0IGNvZGVzcGFjZVJhbmdlcyA9IHRoaXMuY29kZXNwYWNlUmFuZ2VzO1xuXG4gICAgZm9yIChsZXQgbiA9IDAsIG5uID0gY29kZXNwYWNlUmFuZ2VzLmxlbmd0aDsgbiA8IG5uOyBuKyspIHtcbiAgICAgIGNvbnN0IGNvZGVzcGFjZVJhbmdlID0gY29kZXNwYWNlUmFuZ2VzW25dO1xuXG4gICAgICBmb3IgKGxldCBrID0gMCwga2sgPSBjb2Rlc3BhY2VSYW5nZS5sZW5ndGg7IGsgPCBrazspIHtcbiAgICAgICAgY29uc3QgbG93ID0gY29kZXNwYWNlUmFuZ2VbaysrXTtcbiAgICAgICAgY29uc3QgaGlnaCA9IGNvZGVzcGFjZVJhbmdlW2srK107XG5cbiAgICAgICAgaWYgKGNoYXJDb2RlID49IGxvdyAmJiBjaGFyQ29kZSA8PSBoaWdoKSB7XG4gICAgICAgICAgcmV0dXJuIG4gKyAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBnZXQgbGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl9tYXAubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGlzSWRlbnRpdHlDTWFwKCkge1xuICAgIGlmICghKHRoaXMubmFtZSA9PT0gXCJJZGVudGl0eS1IXCIgfHwgdGhpcy5uYW1lID09PSBcIklkZW50aXR5LVZcIikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFwLmxlbmd0aCAhPT0gMHgxMDAwMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMHgxMDAwMDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5fbWFwW2ldICE9PSBpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQ01hcCA9IENNYXA7XG5cbmNsYXNzIElkZW50aXR5Q01hcCBleHRlbmRzIENNYXAge1xuICBjb25zdHJ1Y3Rvcih2ZXJ0aWNhbCwgbikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy52ZXJ0aWNhbCA9IHZlcnRpY2FsO1xuICAgIHRoaXMuYWRkQ29kZXNwYWNlUmFuZ2UobiwgMCwgMHhmZmZmKTtcbiAgfVxuXG4gIG1hcENpZFJhbmdlKGxvdywgaGlnaCwgZHN0TG93KSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcInNob3VsZCBub3QgY2FsbCBtYXBDaWRSYW5nZVwiKTtcbiAgfVxuXG4gIG1hcEJmUmFuZ2UobG93LCBoaWdoLCBkc3RMb3cpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwic2hvdWxkIG5vdCBjYWxsIG1hcEJmUmFuZ2VcIik7XG4gIH1cblxuICBtYXBCZlJhbmdlVG9BcnJheShsb3csIGhpZ2gsIGFycmF5KSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcInNob3VsZCBub3QgY2FsbCBtYXBCZlJhbmdlVG9BcnJheVwiKTtcbiAgfVxuXG4gIG1hcE9uZShzcmMsIGRzdCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJzaG91bGQgbm90IGNhbGwgbWFwQ2lkT25lXCIpO1xuICB9XG5cbiAgbG9va3VwKGNvZGUpIHtcbiAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihjb2RlKSAmJiBjb2RlIDw9IDB4ZmZmZiA/IGNvZGUgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb250YWlucyhjb2RlKSB7XG4gICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIoY29kZSkgJiYgY29kZSA8PSAweGZmZmY7XG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMHhmZmZmOyBpKyspIHtcbiAgICAgIGNhbGxiYWNrKGksIGkpO1xuICAgIH1cbiAgfVxuXG4gIGNoYXJDb2RlT2YodmFsdWUpIHtcbiAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgJiYgdmFsdWUgPD0gMHhmZmZmID8gdmFsdWUgOiAtMTtcbiAgfVxuXG4gIGdldE1hcCgpIHtcbiAgICBjb25zdCBtYXAgPSBuZXcgQXJyYXkoMHgxMDAwMCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSAweGZmZmY7IGkrKykge1xuICAgICAgbWFwW2ldID0gaTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFwO1xuICB9XG5cbiAgZ2V0IGxlbmd0aCgpIHtcbiAgICByZXR1cm4gMHgxMDAwMDtcbiAgfVxuXG4gIGdldCBpc0lkZW50aXR5Q01hcCgpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwic2hvdWxkIG5vdCBhY2Nlc3MgLmlzSWRlbnRpdHlDTWFwXCIpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5JZGVudGl0eUNNYXAgPSBJZGVudGl0eUNNYXA7XG5cbmNvbnN0IEJpbmFyeUNNYXBSZWFkZXIgPSBmdW5jdGlvbiBCaW5hcnlDTWFwUmVhZGVyQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gaGV4VG9JbnQoYSwgc2l6ZSkge1xuICAgIGxldCBuID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHNpemU7IGkrKykge1xuICAgICAgbiA9IG4gPDwgOCB8IGFbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIG4gPj4+IDA7XG4gIH1cblxuICBmdW5jdGlvbiBoZXhUb1N0cihhLCBzaXplKSB7XG4gICAgaWYgKHNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGFbMF0sIGFbMV0pO1xuICAgIH1cblxuICAgIGlmIChzaXplID09PSAzKSB7XG4gICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShhWzBdLCBhWzFdLCBhWzJdLCBhWzNdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBhLnN1YmFycmF5KDAsIHNpemUgKyAxKSk7XG4gIH1cblxuICBmdW5jdGlvbiBhZGRIZXgoYSwgYiwgc2l6ZSkge1xuICAgIGxldCBjID0gMDtcblxuICAgIGZvciAobGV0IGkgPSBzaXplOyBpID49IDA7IGktLSkge1xuICAgICAgYyArPSBhW2ldICsgYltpXTtcbiAgICAgIGFbaV0gPSBjICYgMjU1O1xuICAgICAgYyA+Pj0gODtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbmNIZXgoYSwgc2l6ZSkge1xuICAgIGxldCBjID0gMTtcblxuICAgIGZvciAobGV0IGkgPSBzaXplOyBpID49IDAgJiYgYyA+IDA7IGktLSkge1xuICAgICAgYyArPSBhW2ldO1xuICAgICAgYVtpXSA9IGMgJiAyNTU7XG4gICAgICBjID4+PSA4O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IE1BWF9OVU1fU0laRSA9IDE2O1xuICBjb25zdCBNQVhfRU5DT0RFRF9OVU1fU0laRSA9IDE5O1xuXG4gIGNsYXNzIEJpbmFyeUNNYXBTdHJlYW0ge1xuICAgIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICAgIHRoaXMuYnVmZmVyID0gZGF0YTtcbiAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgIHRoaXMuZW5kID0gZGF0YS5sZW5ndGg7XG4gICAgICB0aGlzLnRtcEJ1ZiA9IG5ldyBVaW50OEFycmF5KE1BWF9FTkNPREVEX05VTV9TSVpFKTtcbiAgICB9XG5cbiAgICByZWFkQnl0ZSgpIHtcbiAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmVuZCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmJ1ZmZlclt0aGlzLnBvcysrXTtcbiAgICB9XG5cbiAgICByZWFkTnVtYmVyKCkge1xuICAgICAgbGV0IG4gPSAwO1xuICAgICAgbGV0IGxhc3Q7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgY29uc3QgYiA9IHRoaXMucmVhZEJ5dGUoKTtcblxuICAgICAgICBpZiAoYiA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJ1bmV4cGVjdGVkIEVPRiBpbiBiY21hcFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3QgPSAhKGIgJiAweDgwKTtcbiAgICAgICAgbiA9IG4gPDwgNyB8IGIgJiAweDdmO1xuICAgICAgfSB3aGlsZSAoIWxhc3QpO1xuXG4gICAgICByZXR1cm4gbjtcbiAgICB9XG5cbiAgICByZWFkU2lnbmVkKCkge1xuICAgICAgY29uc3QgbiA9IHRoaXMucmVhZE51bWJlcigpO1xuICAgICAgcmV0dXJuIG4gJiAxID8gfihuID4+PiAxKSA6IG4gPj4+IDE7XG4gICAgfVxuXG4gICAgcmVhZEhleChudW0sIHNpemUpIHtcbiAgICAgIG51bS5zZXQodGhpcy5idWZmZXIuc3ViYXJyYXkodGhpcy5wb3MsIHRoaXMucG9zICsgc2l6ZSArIDEpKTtcbiAgICAgIHRoaXMucG9zICs9IHNpemUgKyAxO1xuICAgIH1cblxuICAgIHJlYWRIZXhOdW1iZXIobnVtLCBzaXplKSB7XG4gICAgICBsZXQgbGFzdDtcbiAgICAgIGNvbnN0IHN0YWNrID0gdGhpcy50bXBCdWY7XG4gICAgICBsZXQgc3AgPSAwO1xuXG4gICAgICBkbyB7XG4gICAgICAgIGNvbnN0IGIgPSB0aGlzLnJlYWRCeXRlKCk7XG5cbiAgICAgICAgaWYgKGIgPCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwidW5leHBlY3RlZCBFT0YgaW4gYmNtYXBcIik7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0ID0gIShiICYgMHg4MCk7XG4gICAgICAgIHN0YWNrW3NwKytdID0gYiAmIDB4N2Y7XG4gICAgICB9IHdoaWxlICghbGFzdCk7XG5cbiAgICAgIGxldCBpID0gc2l6ZSxcbiAgICAgICAgICBidWZmZXIgPSAwLFxuICAgICAgICAgIGJ1ZmZlclNpemUgPSAwO1xuXG4gICAgICB3aGlsZSAoaSA+PSAwKSB7XG4gICAgICAgIHdoaWxlIChidWZmZXJTaXplIDwgOCAmJiBzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgYnVmZmVyIHw9IHN0YWNrWy0tc3BdIDw8IGJ1ZmZlclNpemU7XG4gICAgICAgICAgYnVmZmVyU2l6ZSArPSA3O1xuICAgICAgICB9XG5cbiAgICAgICAgbnVtW2ldID0gYnVmZmVyICYgMjU1O1xuICAgICAgICBpLS07XG4gICAgICAgIGJ1ZmZlciA+Pj0gODtcbiAgICAgICAgYnVmZmVyU2l6ZSAtPSA4O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlYWRIZXhTaWduZWQobnVtLCBzaXplKSB7XG4gICAgICB0aGlzLnJlYWRIZXhOdW1iZXIobnVtLCBzaXplKTtcbiAgICAgIGNvbnN0IHNpZ24gPSBudW1bc2l6ZV0gJiAxID8gMjU1IDogMDtcbiAgICAgIGxldCBjID0gMDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gc2l6ZTsgaSsrKSB7XG4gICAgICAgIGMgPSAoYyAmIDEpIDw8IDggfCBudW1baV07XG4gICAgICAgIG51bVtpXSA9IGMgPj4gMSBeIHNpZ247XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVhZFN0cmluZygpIHtcbiAgICAgIGNvbnN0IGxlbiA9IHRoaXMucmVhZE51bWJlcigpO1xuICAgICAgbGV0IHMgPSBcIlwiO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLnJlYWROdW1iZXIoKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzO1xuICAgIH1cblxuICB9XG5cbiAgY2xhc3MgQmluYXJ5Q01hcFJlYWRlciB7XG4gICAgYXN5bmMgcHJvY2VzcyhkYXRhLCBjTWFwLCBleHRlbmQpIHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBCaW5hcnlDTWFwU3RyZWFtKGRhdGEpO1xuICAgICAgY29uc3QgaGVhZGVyID0gc3RyZWFtLnJlYWRCeXRlKCk7XG4gICAgICBjTWFwLnZlcnRpY2FsID0gISEoaGVhZGVyICYgMSk7XG4gICAgICBsZXQgdXNlQ01hcCA9IG51bGw7XG4gICAgICBjb25zdCBzdGFydCA9IG5ldyBVaW50OEFycmF5KE1BWF9OVU1fU0laRSk7XG4gICAgICBjb25zdCBlbmQgPSBuZXcgVWludDhBcnJheShNQVhfTlVNX1NJWkUpO1xuICAgICAgY29uc3QgY2hhciA9IG5ldyBVaW50OEFycmF5KE1BWF9OVU1fU0laRSk7XG4gICAgICBjb25zdCBjaGFyQ29kZSA9IG5ldyBVaW50OEFycmF5KE1BWF9OVU1fU0laRSk7XG4gICAgICBjb25zdCB0bXAgPSBuZXcgVWludDhBcnJheShNQVhfTlVNX1NJWkUpO1xuICAgICAgbGV0IGNvZGU7XG4gICAgICBsZXQgYjtcblxuICAgICAgd2hpbGUgKChiID0gc3RyZWFtLnJlYWRCeXRlKCkpID49IDApIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGIgPj4gNTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gNykge1xuICAgICAgICAgIHN3aXRjaCAoYiAmIDB4MWYpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgc3RyZWFtLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgdXNlQ01hcCA9IHN0cmVhbS5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VxdWVuY2UgPSAhIShiICYgMHgxMCk7XG4gICAgICAgIGNvbnN0IGRhdGFTaXplID0gYiAmIDE1O1xuXG4gICAgICAgIGlmIChkYXRhU2l6ZSArIDEgPiBNQVhfTlVNX1NJWkUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCaW5hcnlDTWFwUmVhZGVyLnByb2Nlc3M6IEludmFsaWQgZGF0YVNpemUuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdWNzMkRhdGFTaXplID0gMTtcbiAgICAgICAgY29uc3Qgc3ViaXRlbXNDb3VudCA9IHN0cmVhbS5yZWFkTnVtYmVyKCk7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXgoc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKGVuZCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgYWRkSGV4KGVuZCwgc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgIGNNYXAuYWRkQ29kZXNwYWNlUmFuZ2UoZGF0YVNpemUgKyAxLCBoZXhUb0ludChzdGFydCwgZGF0YVNpemUpLCBoZXhUb0ludChlbmQsIGRhdGFTaXplKSk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgc3ViaXRlbXNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgIGluY0hleChlbmQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgYWRkSGV4KHN0YXJ0LCBlbmQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoZW5kLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIGFkZEhleChlbmQsIHN0YXJ0LCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIGNNYXAuYWRkQ29kZXNwYWNlUmFuZ2UoZGF0YVNpemUgKyAxLCBoZXhUb0ludChzdGFydCwgZGF0YVNpemUpLCBoZXhUb0ludChlbmQsIGRhdGFTaXplKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXgoc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKGVuZCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgYWRkSGV4KGVuZCwgc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgIHN0cmVhbS5yZWFkTnVtYmVyKCk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgc3ViaXRlbXNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgIGluY0hleChlbmQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgYWRkSGV4KHN0YXJ0LCBlbmQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoZW5kLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIGFkZEhleChlbmQsIHN0YXJ0LCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIHN0cmVhbS5yZWFkTnVtYmVyKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXgoY2hhciwgZGF0YVNpemUpO1xuICAgICAgICAgICAgY29kZSA9IHN0cmVhbS5yZWFkTnVtYmVyKCk7XG4gICAgICAgICAgICBjTWFwLm1hcE9uZShoZXhUb0ludChjaGFyLCBkYXRhU2l6ZSksIGNvZGUpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHN1Yml0ZW1zQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICBpbmNIZXgoY2hhciwgZGF0YVNpemUpO1xuXG4gICAgICAgICAgICAgIGlmICghc2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcih0bXAsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICBhZGRIZXgoY2hhciwgdG1wLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb2RlID0gc3RyZWFtLnJlYWRTaWduZWQoKSArIChjb2RlICsgMSk7XG4gICAgICAgICAgICAgIGNNYXAubWFwT25lKGhleFRvSW50KGNoYXIsIGRhdGFTaXplKSwgY29kZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXgoc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKGVuZCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgYWRkSGV4KGVuZCwgc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgIGNvZGUgPSBzdHJlYW0ucmVhZE51bWJlcigpO1xuICAgICAgICAgICAgY01hcC5tYXBDaWRSYW5nZShoZXhUb0ludChzdGFydCwgZGF0YVNpemUpLCBoZXhUb0ludChlbmQsIGRhdGFTaXplKSwgY29kZSk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgc3ViaXRlbXNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgIGluY0hleChlbmQsIGRhdGFTaXplKTtcblxuICAgICAgICAgICAgICBpZiAoIXNlcXVlbmNlKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICBhZGRIZXgoc3RhcnQsIGVuZCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0YXJ0LnNldChlbmQpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoZW5kLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIGFkZEhleChlbmQsIHN0YXJ0LCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIGNvZGUgPSBzdHJlYW0ucmVhZE51bWJlcigpO1xuICAgICAgICAgICAgICBjTWFwLm1hcENpZFJhbmdlKGhleFRvSW50KHN0YXJ0LCBkYXRhU2l6ZSksIGhleFRvSW50KGVuZCwgZGF0YVNpemUpLCBjb2RlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBzdHJlYW0ucmVhZEhleChjaGFyLCB1Y3MyRGF0YVNpemUpO1xuICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXgoY2hhckNvZGUsIGRhdGFTaXplKTtcbiAgICAgICAgICAgIGNNYXAubWFwT25lKGhleFRvSW50KGNoYXIsIHVjczJEYXRhU2l6ZSksIGhleFRvU3RyKGNoYXJDb2RlLCBkYXRhU2l6ZSkpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHN1Yml0ZW1zQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICBpbmNIZXgoY2hhciwgdWNzMkRhdGFTaXplKTtcblxuICAgICAgICAgICAgICBpZiAoIXNlcXVlbmNlKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIodG1wLCB1Y3MyRGF0YVNpemUpO1xuICAgICAgICAgICAgICAgIGFkZEhleChjaGFyLCB0bXAsIHVjczJEYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpbmNIZXgoY2hhckNvZGUsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhTaWduZWQodG1wLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIGFkZEhleChjaGFyQ29kZSwgdG1wLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIGNNYXAubWFwT25lKGhleFRvSW50KGNoYXIsIHVjczJEYXRhU2l6ZSksIGhleFRvU3RyKGNoYXJDb2RlLCBkYXRhU2l6ZSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4KHN0YXJ0LCB1Y3MyRGF0YVNpemUpO1xuICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoZW5kLCB1Y3MyRGF0YVNpemUpO1xuICAgICAgICAgICAgYWRkSGV4KGVuZCwgc3RhcnQsIHVjczJEYXRhU2l6ZSk7XG4gICAgICAgICAgICBzdHJlYW0ucmVhZEhleChjaGFyQ29kZSwgZGF0YVNpemUpO1xuICAgICAgICAgICAgY01hcC5tYXBCZlJhbmdlKGhleFRvSW50KHN0YXJ0LCB1Y3MyRGF0YVNpemUpLCBoZXhUb0ludChlbmQsIHVjczJEYXRhU2l6ZSksIGhleFRvU3RyKGNoYXJDb2RlLCBkYXRhU2l6ZSkpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHN1Yml0ZW1zQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICBpbmNIZXgoZW5kLCB1Y3MyRGF0YVNpemUpO1xuXG4gICAgICAgICAgICAgIGlmICghc2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihzdGFydCwgdWNzMkRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICBhZGRIZXgoc3RhcnQsIGVuZCwgdWNzMkRhdGFTaXplKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGFydC5zZXQoZW5kKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKGVuZCwgdWNzMkRhdGFTaXplKTtcbiAgICAgICAgICAgICAgYWRkSGV4KGVuZCwgc3RhcnQsIHVjczJEYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4KGNoYXJDb2RlLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIGNNYXAubWFwQmZSYW5nZShoZXhUb0ludChzdGFydCwgdWNzMkRhdGFTaXplKSwgaGV4VG9JbnQoZW5kLCB1Y3MyRGF0YVNpemUpLCBoZXhUb1N0cihjaGFyQ29kZSwgZGF0YVNpemUpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCaW5hcnlDTWFwUmVhZGVyLnByb2Nlc3MgLSB1bmtub3duIHR5cGU6ICR7dHlwZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodXNlQ01hcCkge1xuICAgICAgICByZXR1cm4gZXh0ZW5kKHVzZUNNYXApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY01hcDtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBCaW5hcnlDTWFwUmVhZGVyO1xufSgpO1xuXG5jb25zdCBDTWFwRmFjdG9yeSA9IGZ1bmN0aW9uIENNYXBGYWN0b3J5Q2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gc3RyVG9JbnQoc3RyKSB7XG4gICAgbGV0IGEgPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGEgPSBhIDw8IDggfCBzdHIuY2hhckNvZGVBdChpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYSA+Pj4gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cGVjdFN0cmluZyhvYmopIHtcbiAgICBpZiAoISgwLCBfdXRpbC5pc1N0cmluZykob2JqKSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiTWFsZm9ybWVkIENNYXA6IGV4cGVjdGVkIHN0cmluZy5cIik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZXhwZWN0SW50KG9iaikge1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihvYmopKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJNYWxmb3JtZWQgQ01hcDogZXhwZWN0ZWQgaW50LlwiKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUJmQ2hhcihjTWFwLCBsZXhlcikge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBsZXQgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG5cbiAgICAgIGlmIChvYmogPT09IF9wcmltaXRpdmVzLkVPRikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCBcImVuZGJmY2hhclwiKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV4cGVjdFN0cmluZyhvYmopO1xuICAgICAgY29uc3Qgc3JjID0gc3RyVG9JbnQob2JqKTtcbiAgICAgIG9iaiA9IGxleGVyLmdldE9iaigpO1xuICAgICAgZXhwZWN0U3RyaW5nKG9iaik7XG4gICAgICBjb25zdCBkc3QgPSBvYmo7XG4gICAgICBjTWFwLm1hcE9uZShzcmMsIGRzdCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VCZlJhbmdlKGNNYXAsIGxleGVyKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGxldCBvYmogPSBsZXhlci5nZXRPYmooKTtcblxuICAgICAgaWYgKG9iaiA9PT0gX3ByaW1pdGl2ZXMuRU9GKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmosIFwiZW5kYmZyYW5nZVwiKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV4cGVjdFN0cmluZyhvYmopO1xuICAgICAgY29uc3QgbG93ID0gc3RyVG9JbnQob2JqKTtcbiAgICAgIG9iaiA9IGxleGVyLmdldE9iaigpO1xuICAgICAgZXhwZWN0U3RyaW5nKG9iaik7XG4gICAgICBjb25zdCBoaWdoID0gc3RyVG9JbnQob2JqKTtcbiAgICAgIG9iaiA9IGxleGVyLmdldE9iaigpO1xuXG4gICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihvYmopIHx8ICgwLCBfdXRpbC5pc1N0cmluZykob2JqKSkge1xuICAgICAgICBjb25zdCBkc3RMb3cgPSBOdW1iZXIuaXNJbnRlZ2VyKG9iaikgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKG9iaikgOiBvYmo7XG4gICAgICAgIGNNYXAubWFwQmZSYW5nZShsb3csIGhpZ2gsIGRzdExvdyk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCBcIltcIikpIHtcbiAgICAgICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG4gICAgICAgIGNvbnN0IGFycmF5ID0gW107XG5cbiAgICAgICAgd2hpbGUgKCEoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKG9iaiwgXCJdXCIpICYmIG9iaiAhPT0gX3ByaW1pdGl2ZXMuRU9GKSB7XG4gICAgICAgICAgYXJyYXkucHVzaChvYmopO1xuICAgICAgICAgIG9iaiA9IGxleGVyLmdldE9iaigpO1xuICAgICAgICB9XG5cbiAgICAgICAgY01hcC5tYXBCZlJhbmdlVG9BcnJheShsb3csIGhpZ2gsIGFycmF5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgYmYgcmFuZ2UuXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VDaWRDaGFyKGNNYXAsIGxleGVyKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGxldCBvYmogPSBsZXhlci5nZXRPYmooKTtcblxuICAgICAgaWYgKG9iaiA9PT0gX3ByaW1pdGl2ZXMuRU9GKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmosIFwiZW5kY2lkY2hhclwiKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV4cGVjdFN0cmluZyhvYmopO1xuICAgICAgY29uc3Qgc3JjID0gc3RyVG9JbnQob2JqKTtcbiAgICAgIG9iaiA9IGxleGVyLmdldE9iaigpO1xuICAgICAgZXhwZWN0SW50KG9iaik7XG4gICAgICBjb25zdCBkc3QgPSBvYmo7XG4gICAgICBjTWFwLm1hcE9uZShzcmMsIGRzdCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VDaWRSYW5nZShjTWFwLCBsZXhlcikge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBsZXQgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG5cbiAgICAgIGlmIChvYmogPT09IF9wcmltaXRpdmVzLkVPRikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCBcImVuZGNpZHJhbmdlXCIpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZXhwZWN0U3RyaW5nKG9iaik7XG4gICAgICBjb25zdCBsb3cgPSBzdHJUb0ludChvYmopO1xuICAgICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG4gICAgICBleHBlY3RTdHJpbmcob2JqKTtcbiAgICAgIGNvbnN0IGhpZ2ggPSBzdHJUb0ludChvYmopO1xuICAgICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG4gICAgICBleHBlY3RJbnQob2JqKTtcbiAgICAgIGNvbnN0IGRzdExvdyA9IG9iajtcbiAgICAgIGNNYXAubWFwQ2lkUmFuZ2UobG93LCBoaWdoLCBkc3RMb3cpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlQ29kZXNwYWNlUmFuZ2UoY01hcCwgbGV4ZXIpIHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgbGV0IG9iaiA9IGxleGVyLmdldE9iaigpO1xuXG4gICAgICBpZiAob2JqID09PSBfcHJpbWl0aXZlcy5FT0YpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKG9iaiwgXCJlbmRjb2Rlc3BhY2VyYW5nZVwiKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghKDAsIF91dGlsLmlzU3RyaW5nKShvYmopKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsb3cgPSBzdHJUb0ludChvYmopO1xuICAgICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG5cbiAgICAgIGlmICghKDAsIF91dGlsLmlzU3RyaW5nKShvYmopKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBoaWdoID0gc3RyVG9JbnQob2JqKTtcbiAgICAgIGNNYXAuYWRkQ29kZXNwYWNlUmFuZ2Uob2JqLmxlbmd0aCwgbG93LCBoaWdoKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIGNvZGVzcGFjZSByYW5nZS5cIik7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVdNb2RlKGNNYXAsIGxleGVyKSB7XG4gICAgY29uc3Qgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG5cbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihvYmopKSB7XG4gICAgICBjTWFwLnZlcnRpY2FsID0gISFvYmo7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VDTWFwTmFtZShjTWFwLCBsZXhlcikge1xuICAgIGNvbnN0IG9iaiA9IGxleGVyLmdldE9iaigpO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKG9iaikgJiYgKDAsIF91dGlsLmlzU3RyaW5nKShvYmoubmFtZSkpIHtcbiAgICAgIGNNYXAubmFtZSA9IG9iai5uYW1lO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHBhcnNlQ01hcChjTWFwLCBsZXhlciwgZmV0Y2hCdWlsdEluQ01hcCwgdXNlQ01hcCkge1xuICAgIGxldCBwcmV2aW91cywgZW1iZWRkZWRVc2VDTWFwO1xuXG4gICAgb2JqTG9vcDogd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IGxleGVyLmdldE9iaigpO1xuXG4gICAgICAgIGlmIChvYmogPT09IF9wcmltaXRpdmVzLkVPRikge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKG9iaikpIHtcbiAgICAgICAgICBpZiAob2JqLm5hbWUgPT09IFwiV01vZGVcIikge1xuICAgICAgICAgICAgcGFyc2VXTW9kZShjTWFwLCBsZXhlcik7XG4gICAgICAgICAgfSBlbHNlIGlmIChvYmoubmFtZSA9PT0gXCJDTWFwTmFtZVwiKSB7XG4gICAgICAgICAgICBwYXJzZUNNYXBOYW1lKGNNYXAsIGxleGVyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcmV2aW91cyA9IG9iajtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKG9iaikpIHtcbiAgICAgICAgICBzd2l0Y2ggKG9iai5jbWQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJlbmRjbWFwXCI6XG4gICAgICAgICAgICAgIGJyZWFrIG9iakxvb3A7XG5cbiAgICAgICAgICAgIGNhc2UgXCJ1c2VjbWFwXCI6XG4gICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShwcmV2aW91cykpIHtcbiAgICAgICAgICAgICAgICBlbWJlZGRlZFVzZUNNYXAgPSBwcmV2aW91cy5uYW1lO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJiZWdpbmNvZGVzcGFjZXJhbmdlXCI6XG4gICAgICAgICAgICAgIHBhcnNlQ29kZXNwYWNlUmFuZ2UoY01hcCwgbGV4ZXIpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcImJlZ2luYmZjaGFyXCI6XG4gICAgICAgICAgICAgIHBhcnNlQmZDaGFyKGNNYXAsIGxleGVyKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJiZWdpbmNpZGNoYXJcIjpcbiAgICAgICAgICAgICAgcGFyc2VDaWRDaGFyKGNNYXAsIGxleGVyKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJiZWdpbmJmcmFuZ2VcIjpcbiAgICAgICAgICAgICAgcGFyc2VCZlJhbmdlKGNNYXAsIGxleGVyKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJiZWdpbmNpZHJhbmdlXCI6XG4gICAgICAgICAgICAgIHBhcnNlQ2lkUmFuZ2UoY01hcCwgbGV4ZXIpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgIH1cblxuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJJbnZhbGlkIGNNYXAgZGF0YTogXCIgKyBleCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdXNlQ01hcCAmJiBlbWJlZGRlZFVzZUNNYXApIHtcbiAgICAgIHVzZUNNYXAgPSBlbWJlZGRlZFVzZUNNYXA7XG4gICAgfVxuXG4gICAgaWYgKHVzZUNNYXApIHtcbiAgICAgIHJldHVybiBleHRlbmRDTWFwKGNNYXAsIGZldGNoQnVpbHRJbkNNYXAsIHVzZUNNYXApO1xuICAgIH1cblxuICAgIHJldHVybiBjTWFwO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZXh0ZW5kQ01hcChjTWFwLCBmZXRjaEJ1aWx0SW5DTWFwLCB1c2VDTWFwKSB7XG4gICAgY01hcC51c2VDTWFwID0gYXdhaXQgY3JlYXRlQnVpbHRJbkNNYXAodXNlQ01hcCwgZmV0Y2hCdWlsdEluQ01hcCk7XG5cbiAgICBpZiAoY01hcC5udW1Db2Rlc3BhY2VSYW5nZXMgPT09IDApIHtcbiAgICAgIGNvbnN0IHVzZUNvZGVzcGFjZVJhbmdlcyA9IGNNYXAudXNlQ01hcC5jb2Rlc3BhY2VSYW5nZXM7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdXNlQ29kZXNwYWNlUmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNNYXAuY29kZXNwYWNlUmFuZ2VzW2ldID0gdXNlQ29kZXNwYWNlUmFuZ2VzW2ldLnNsaWNlKCk7XG4gICAgICB9XG5cbiAgICAgIGNNYXAubnVtQ29kZXNwYWNlUmFuZ2VzID0gY01hcC51c2VDTWFwLm51bUNvZGVzcGFjZVJhbmdlcztcbiAgICB9XG5cbiAgICBjTWFwLnVzZUNNYXAuZm9yRWFjaChmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKCFjTWFwLmNvbnRhaW5zKGtleSkpIHtcbiAgICAgICAgY01hcC5tYXBPbmUoa2V5LCBjTWFwLnVzZUNNYXAubG9va3VwKGtleSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjTWFwO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQnVpbHRJbkNNYXAobmFtZSwgZmV0Y2hCdWlsdEluQ01hcCkge1xuICAgIGlmIChuYW1lID09PSBcIklkZW50aXR5LUhcIikge1xuICAgICAgcmV0dXJuIG5ldyBJZGVudGl0eUNNYXAoZmFsc2UsIDIpO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gXCJJZGVudGl0eS1WXCIpIHtcbiAgICAgIHJldHVybiBuZXcgSWRlbnRpdHlDTWFwKHRydWUsIDIpO1xuICAgIH1cblxuICAgIGlmICghQlVJTFRfSU5fQ01BUFMuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gQ01hcCBuYW1lOiBcIiArIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICghZmV0Y2hCdWlsdEluQ01hcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQnVpbHQtaW4gQ01hcCBwYXJhbWV0ZXJzIGFyZSBub3QgcHJvdmlkZWQuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIGNNYXBEYXRhLFxuICAgICAgY29tcHJlc3Npb25UeXBlXG4gICAgfSA9IGF3YWl0IGZldGNoQnVpbHRJbkNNYXAobmFtZSk7XG4gICAgY29uc3QgY01hcCA9IG5ldyBDTWFwKHRydWUpO1xuXG4gICAgaWYgKGNvbXByZXNzaW9uVHlwZSA9PT0gX3V0aWwuQ01hcENvbXByZXNzaW9uVHlwZS5CSU5BUlkpIHtcbiAgICAgIHJldHVybiBuZXcgQmluYXJ5Q01hcFJlYWRlcigpLnByb2Nlc3MoY01hcERhdGEsIGNNYXAsIHVzZUNNYXAgPT4ge1xuICAgICAgICByZXR1cm4gZXh0ZW5kQ01hcChjTWFwLCBmZXRjaEJ1aWx0SW5DTWFwLCB1c2VDTWFwKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjb21wcmVzc2lvblR5cGUgPT09IF91dGlsLkNNYXBDb21wcmVzc2lvblR5cGUuTk9ORSkge1xuICAgICAgY29uc3QgbGV4ZXIgPSBuZXcgX3BhcnNlci5MZXhlcihuZXcgX3N0cmVhbS5TdHJlYW0oY01hcERhdGEpKTtcbiAgICAgIHJldHVybiBwYXJzZUNNYXAoY01hcCwgbGV4ZXIsIGZldGNoQnVpbHRJbkNNYXAsIG51bGwpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcIlRPRE86IE9ubHkgQklOQVJZL05PTkUgQ01hcCBjb21wcmVzc2lvbiBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLlwiKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgY3JlYXRlKHBhcmFtcykge1xuICAgICAgY29uc3QgZW5jb2RpbmcgPSBwYXJhbXMuZW5jb2Rpbmc7XG4gICAgICBjb25zdCBmZXRjaEJ1aWx0SW5DTWFwID0gcGFyYW1zLmZldGNoQnVpbHRJbkNNYXA7XG4gICAgICBjb25zdCB1c2VDTWFwID0gcGFyYW1zLnVzZUNNYXA7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShlbmNvZGluZykpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1aWx0SW5DTWFwKGVuY29kaW5nLm5hbWUsIGZldGNoQnVpbHRJbkNNYXApO1xuICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKGVuY29kaW5nKSkge1xuICAgICAgICBjb25zdCBwYXJzZWRDTWFwID0gYXdhaXQgcGFyc2VDTWFwKG5ldyBDTWFwKCksIG5ldyBfcGFyc2VyLkxleGVyKGVuY29kaW5nKSwgZmV0Y2hCdWlsdEluQ01hcCwgdXNlQ01hcCk7XG5cbiAgICAgICAgaWYgKHBhcnNlZENNYXAuaXNJZGVudGl0eUNNYXApIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQnVpbHRJbkNNYXAocGFyc2VkQ01hcC5uYW1lLCBmZXRjaEJ1aWx0SW5DTWFwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJzZWRDTWFwO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbmNvZGluZyByZXF1aXJlZC5cIik7XG4gICAgfVxuXG4gIH07XG59KCk7XG5cbmV4cG9ydHMuQ01hcEZhY3RvcnkgPSBDTWFwRmFjdG9yeTtcblxuLyoqKi8gfSksXG4vKiAyNyAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5QYXJzZXIgPSBleHBvcnRzLkxpbmVhcml6YXRpb24gPSBleHBvcnRzLkxleGVyID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG52YXIgX2FzY2lpXzg1X3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjgpO1xuXG52YXIgX2FzY2lpX2hleF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDMwKTtcblxudmFyIF9jY2l0dF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDMxKTtcblxudmFyIF9mbGF0ZV9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDMzKTtcblxudmFyIF9qYmlnMl9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDM0KTtcblxudmFyIF9qcGVnX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMzcpO1xuXG52YXIgX2pweF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDM5KTtcblxudmFyIF9sendfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXyg0MSk7XG5cbnZhciBfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxMCk7XG5cbnZhciBfcHJlZGljdG9yX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oNDIpO1xuXG52YXIgX3J1bl9sZW5ndGhfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXyg0Myk7XG5cbmNvbnN0IE1BWF9MRU5HVEhfVE9fQ0FDSEUgPSAxMDAwO1xuY29uc3QgTUFYX0FETEVSMzJfTEVOR1RIID0gNTU1MjtcblxuZnVuY3Rpb24gY29tcHV0ZUFkbGVyMzIoYnl0ZXMpIHtcbiAgY29uc3QgYnl0ZXNMZW5ndGggPSBieXRlcy5sZW5ndGg7XG4gIGxldCBhID0gMSxcbiAgICAgIGIgPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXNMZW5ndGg7ICsraSkge1xuICAgIGEgKz0gYnl0ZXNbaV0gJiAweGZmO1xuICAgIGIgKz0gYTtcbiAgfVxuXG4gIHJldHVybiBiICUgNjU1MjEgPDwgMTYgfCBhICUgNjU1MjE7XG59XG5cbmNsYXNzIFBhcnNlciB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBsZXhlcixcbiAgICB4cmVmLFxuICAgIGFsbG93U3RyZWFtcyA9IGZhbHNlLFxuICAgIHJlY292ZXJ5TW9kZSA9IGZhbHNlXG4gIH0pIHtcbiAgICB0aGlzLmxleGVyID0gbGV4ZXI7XG4gICAgdGhpcy54cmVmID0geHJlZjtcbiAgICB0aGlzLmFsbG93U3RyZWFtcyA9IGFsbG93U3RyZWFtcztcbiAgICB0aGlzLnJlY292ZXJ5TW9kZSA9IHJlY292ZXJ5TW9kZTtcbiAgICB0aGlzLmltYWdlQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMucmVmaWxsKCk7XG4gIH1cblxuICByZWZpbGwoKSB7XG4gICAgdGhpcy5idWYxID0gdGhpcy5sZXhlci5nZXRPYmooKTtcbiAgICB0aGlzLmJ1ZjIgPSB0aGlzLmxleGVyLmdldE9iaigpO1xuICB9XG5cbiAgc2hpZnQoKSB7XG4gICAgaWYgKHRoaXMuYnVmMiBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkNtZCAmJiB0aGlzLmJ1ZjIuY21kID09PSBcIklEXCIpIHtcbiAgICAgIHRoaXMuYnVmMSA9IHRoaXMuYnVmMjtcbiAgICAgIHRoaXMuYnVmMiA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYnVmMSA9IHRoaXMuYnVmMjtcbiAgICAgIHRoaXMuYnVmMiA9IHRoaXMubGV4ZXIuZ2V0T2JqKCk7XG4gICAgfVxuICB9XG5cbiAgdHJ5U2hpZnQoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGdldE9iaihjaXBoZXJUcmFuc2Zvcm0gPSBudWxsKSB7XG4gICAgY29uc3QgYnVmMSA9IHRoaXMuYnVmMTtcbiAgICB0aGlzLnNoaWZ0KCk7XG5cbiAgICBpZiAoYnVmMSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkNtZCkge1xuICAgICAgc3dpdGNoIChidWYxLmNtZCkge1xuICAgICAgICBjYXNlIFwiQklcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlSW5saW5lSW1hZ2UoY2lwaGVyVHJhbnNmb3JtKTtcblxuICAgICAgICBjYXNlIFwiW1wiOlxuICAgICAgICAgIGNvbnN0IGFycmF5ID0gW107XG5cbiAgICAgICAgICB3aGlsZSAoISgwLCBfcHJpbWl0aXZlcy5pc0NtZCkodGhpcy5idWYxLCBcIl1cIikgJiYgdGhpcy5idWYxICE9PSBfcHJpbWl0aXZlcy5FT0YpIHtcbiAgICAgICAgICAgIGFycmF5LnB1c2godGhpcy5nZXRPYmooY2lwaGVyVHJhbnNmb3JtKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMuYnVmMSA9PT0gX3ByaW1pdGl2ZXMuRU9GKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWNvdmVyeU1vZGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgX2NvcmVfdXRpbHMuUGFyc2VyRU9GRXhjZXB0aW9uKFwiRW5kIG9mIGZpbGUgaW5zaWRlIGFycmF5LlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnNoaWZ0KCk7XG4gICAgICAgICAgcmV0dXJuIGFycmF5O1xuXG4gICAgICAgIGNhc2UgXCI8PFwiOlxuICAgICAgICAgIGNvbnN0IGRpY3QgPSBuZXcgX3ByaW1pdGl2ZXMuRGljdCh0aGlzLnhyZWYpO1xuXG4gICAgICAgICAgd2hpbGUgKCEoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKHRoaXMuYnVmMSwgXCI+PlwiKSAmJiB0aGlzLmJ1ZjEgIT09IF9wcmltaXRpdmVzLkVPRikge1xuICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0aGlzLmJ1ZjEpKSB7XG4gICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIk1hbGZvcm1lZCBkaWN0aW9uYXJ5OiBrZXkgbXVzdCBiZSBhIG5hbWUgb2JqZWN0XCIpO1xuICAgICAgICAgICAgICB0aGlzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmJ1ZjEubmFtZTtcbiAgICAgICAgICAgIHRoaXMuc2hpZnQoKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYnVmMSA9PT0gX3ByaW1pdGl2ZXMuRU9GKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkaWN0LnNldChrZXksIHRoaXMuZ2V0T2JqKGNpcGhlclRyYW5zZm9ybSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLmJ1ZjEgPT09IF9wcmltaXRpdmVzLkVPRikge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVjb3ZlcnlNb2RlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBkaWN0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgX2NvcmVfdXRpbHMuUGFyc2VyRU9GRXhjZXB0aW9uKFwiRW5kIG9mIGZpbGUgaW5zaWRlIGRpY3Rpb25hcnkuXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKHRoaXMuYnVmMiwgXCJzdHJlYW1cIikpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFsbG93U3RyZWFtcyA/IHRoaXMubWFrZVN0cmVhbShkaWN0LCBjaXBoZXJUcmFuc2Zvcm0pIDogZGljdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnNoaWZ0KCk7XG4gICAgICAgICAgcmV0dXJuIGRpY3Q7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gYnVmMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihidWYxKSkge1xuICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIodGhpcy5idWYxKSAmJiAoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKHRoaXMuYnVmMiwgXCJSXCIpKSB7XG4gICAgICAgIGNvbnN0IHJlZiA9IF9wcmltaXRpdmVzLlJlZi5nZXQoYnVmMSwgdGhpcy5idWYxKTtcblxuICAgICAgICB0aGlzLnNoaWZ0KCk7XG4gICAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgcmV0dXJuIHJlZjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJ1ZjE7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBidWYxID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBpZiAoY2lwaGVyVHJhbnNmb3JtKSB7XG4gICAgICAgIHJldHVybiBjaXBoZXJUcmFuc2Zvcm0uZGVjcnlwdFN0cmluZyhidWYxKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJ1ZjE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZjE7XG4gIH1cblxuICBmaW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChzdHJlYW0pIHtcbiAgICBjb25zdCBFID0gMHg0NSxcbiAgICAgICAgICBJID0gMHg0OSxcbiAgICAgICAgICBTUEFDRSA9IDB4MjAsXG4gICAgICAgICAgTEYgPSAweGEsXG4gICAgICAgICAgQ1IgPSAweGQsXG4gICAgICAgICAgTlVMID0gMHgwO1xuICAgIGNvbnN0IGxleGVyID0gdGhpcy5sZXhlcixcbiAgICAgICAgICBzdGFydFBvcyA9IHN0cmVhbS5wb3MsXG4gICAgICAgICAgbiA9IDEwO1xuICAgIGxldCBzdGF0ZSA9IDAsXG4gICAgICAgIGNoLFxuICAgICAgICBtYXliZUVJUG9zO1xuXG4gICAgd2hpbGUgKChjaCA9IHN0cmVhbS5nZXRCeXRlKCkpICE9PSAtMSkge1xuICAgICAgaWYgKHN0YXRlID09PSAwKSB7XG4gICAgICAgIHN0YXRlID0gY2ggPT09IEUgPyAxIDogMDtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IDEpIHtcbiAgICAgICAgc3RhdGUgPSBjaCA9PT0gSSA/IDIgOiAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoc3RhdGUgPT09IDIsIFwiZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQgLSBpbnZhbGlkIHN0YXRlLlwiKTtcblxuICAgICAgICBpZiAoY2ggPT09IFNQQUNFIHx8IGNoID09PSBMRiB8fCBjaCA9PT0gQ1IpIHtcbiAgICAgICAgICBtYXliZUVJUG9zID0gc3RyZWFtLnBvcztcbiAgICAgICAgICBjb25zdCBmb2xsb3dpbmdCeXRlcyA9IHN0cmVhbS5wZWVrQnl0ZXMobik7XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBmb2xsb3dpbmdCeXRlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICBjaCA9IGZvbGxvd2luZ0J5dGVzW2ldO1xuXG4gICAgICAgICAgICBpZiAoY2ggPT09IE5VTCAmJiBmb2xsb3dpbmdCeXRlc1tpICsgMV0gIT09IE5VTCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNoICE9PSBMRiAmJiBjaCAhPT0gQ1IgJiYgKGNoIDwgU1BBQ0UgfHwgY2ggPiAweDdmKSkge1xuICAgICAgICAgICAgICBzdGF0ZSA9IDA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdGF0ZSAhPT0gMikge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGxleGVyLmtub3duQ29tbWFuZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRPYmogPSBsZXhlci5wZWVrT2JqKCk7XG5cbiAgICAgICAgICAgIGlmIChuZXh0T2JqIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuQ21kICYmICFsZXhlci5rbm93bkNvbW1hbmRzW25leHRPYmouY21kXSkge1xuICAgICAgICAgICAgICBzdGF0ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcImZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kIC0gYGxleGVyLmtub3duQ29tbWFuZHNgIGlzIHVuZGVmaW5lZC5cIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN0YXRlID09PSAyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoID09PSAtMSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQ6IFwiICsgXCJSZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSB3aXRob3V0IGZpbmRpbmcgYSB2YWxpZCBFSSBtYXJrZXJcIik7XG5cbiAgICAgIGlmIChtYXliZUVJUG9zKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKSgnLi4uIHRyeWluZyB0byByZWNvdmVyIGJ5IHVzaW5nIHRoZSBsYXN0IFwiRUlcIiBvY2N1cnJlbmNlLicpO1xuICAgICAgICBzdHJlYW0uc2tpcCgtKHN0cmVhbS5wb3MgLSBtYXliZUVJUG9zKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGVuZE9mZnNldCA9IDQ7XG4gICAgc3RyZWFtLnNraXAoLWVuZE9mZnNldCk7XG4gICAgY2ggPSBzdHJlYW0ucGVla0J5dGUoKTtcbiAgICBzdHJlYW0uc2tpcChlbmRPZmZzZXQpO1xuXG4gICAgaWYgKCEoMCwgX2NvcmVfdXRpbHMuaXNXaGl0ZVNwYWNlKShjaCkpIHtcbiAgICAgIGVuZE9mZnNldC0tO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW0ucG9zIC0gZW5kT2Zmc2V0IC0gc3RhcnRQb3M7XG4gIH1cblxuICBmaW5kRENURGVjb2RlSW5saW5lU3RyZWFtRW5kKHN0cmVhbSkge1xuICAgIGNvbnN0IHN0YXJ0UG9zID0gc3RyZWFtLnBvcztcbiAgICBsZXQgZm91bmRFT0kgPSBmYWxzZSxcbiAgICAgICAgYixcbiAgICAgICAgbWFya2VyTGVuZ3RoO1xuXG4gICAgd2hpbGUgKChiID0gc3RyZWFtLmdldEJ5dGUoKSkgIT09IC0xKSB7XG4gICAgICBpZiAoYiAhPT0gMHhmZikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChzdHJlYW0uZ2V0Qnl0ZSgpKSB7XG4gICAgICAgIGNhc2UgMHgwMDpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDB4ZmY6XG4gICAgICAgICAgc3RyZWFtLnNraXAoLTEpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMHhkOTpcbiAgICAgICAgICBmb3VuZEVPSSA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAweGMwOlxuICAgICAgICBjYXNlIDB4YzE6XG4gICAgICAgIGNhc2UgMHhjMjpcbiAgICAgICAgY2FzZSAweGMzOlxuICAgICAgICBjYXNlIDB4YzU6XG4gICAgICAgIGNhc2UgMHhjNjpcbiAgICAgICAgY2FzZSAweGM3OlxuICAgICAgICBjYXNlIDB4Yzk6XG4gICAgICAgIGNhc2UgMHhjYTpcbiAgICAgICAgY2FzZSAweGNiOlxuICAgICAgICBjYXNlIDB4Y2Q6XG4gICAgICAgIGNhc2UgMHhjZTpcbiAgICAgICAgY2FzZSAweGNmOlxuICAgICAgICBjYXNlIDB4YzQ6XG4gICAgICAgIGNhc2UgMHhjYzpcbiAgICAgICAgY2FzZSAweGRhOlxuICAgICAgICBjYXNlIDB4ZGI6XG4gICAgICAgIGNhc2UgMHhkYzpcbiAgICAgICAgY2FzZSAweGRkOlxuICAgICAgICBjYXNlIDB4ZGU6XG4gICAgICAgIGNhc2UgMHhkZjpcbiAgICAgICAgY2FzZSAweGUwOlxuICAgICAgICBjYXNlIDB4ZTE6XG4gICAgICAgIGNhc2UgMHhlMjpcbiAgICAgICAgY2FzZSAweGUzOlxuICAgICAgICBjYXNlIDB4ZTQ6XG4gICAgICAgIGNhc2UgMHhlNTpcbiAgICAgICAgY2FzZSAweGU2OlxuICAgICAgICBjYXNlIDB4ZTc6XG4gICAgICAgIGNhc2UgMHhlODpcbiAgICAgICAgY2FzZSAweGU5OlxuICAgICAgICBjYXNlIDB4ZWE6XG4gICAgICAgIGNhc2UgMHhlYjpcbiAgICAgICAgY2FzZSAweGVjOlxuICAgICAgICBjYXNlIDB4ZWQ6XG4gICAgICAgIGNhc2UgMHhlZTpcbiAgICAgICAgY2FzZSAweGVmOlxuICAgICAgICBjYXNlIDB4ZmU6XG4gICAgICAgICAgbWFya2VyTGVuZ3RoID0gc3RyZWFtLmdldFVpbnQxNigpO1xuXG4gICAgICAgICAgaWYgKG1hcmtlckxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHN0cmVhbS5za2lwKG1hcmtlckxlbmd0aCAtIDIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHJlYW0uc2tpcCgtMik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3VuZEVPSSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBsZW5ndGggPSBzdHJlYW0ucG9zIC0gc3RhcnRQb3M7XG5cbiAgICBpZiAoYiA9PT0gLTEpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIklubGluZSBEQ1REZWNvZGUgaW1hZ2Ugc3RyZWFtOiBcIiArIFwiRU9JIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLlwiKTtcbiAgICAgIHN0cmVhbS5za2lwKC1sZW5ndGgpO1xuICAgICAgcmV0dXJuIHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoc3RyZWFtKTtcbiAgICB9XG5cbiAgICB0aGlzLmlubGluZVN0cmVhbVNraXBFSShzdHJlYW0pO1xuICAgIHJldHVybiBsZW5ndGg7XG4gIH1cblxuICBmaW5kQVNDSUk4NURlY29kZUlubGluZVN0cmVhbUVuZChzdHJlYW0pIHtcbiAgICBjb25zdCBUSUxERSA9IDB4N2UsXG4gICAgICAgICAgR1QgPSAweDNlO1xuICAgIGNvbnN0IHN0YXJ0UG9zID0gc3RyZWFtLnBvcztcbiAgICBsZXQgY2g7XG5cbiAgICB3aGlsZSAoKGNoID0gc3RyZWFtLmdldEJ5dGUoKSkgIT09IC0xKSB7XG4gICAgICBpZiAoY2ggPT09IFRJTERFKSB7XG4gICAgICAgIGNvbnN0IHRpbGRlUG9zID0gc3RyZWFtLnBvcztcbiAgICAgICAgY2ggPSBzdHJlYW0ucGVla0J5dGUoKTtcblxuICAgICAgICB3aGlsZSAoKDAsIF9jb3JlX3V0aWxzLmlzV2hpdGVTcGFjZSkoY2gpKSB7XG4gICAgICAgICAgc3RyZWFtLnNraXAoKTtcbiAgICAgICAgICBjaCA9IHN0cmVhbS5wZWVrQnl0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoID09PSBHVCkge1xuICAgICAgICAgIHN0cmVhbS5za2lwKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyZWFtLnBvcyA+IHRpbGRlUG9zKSB7XG4gICAgICAgICAgY29uc3QgbWF5YmVFSSA9IHN0cmVhbS5wZWVrQnl0ZXMoMik7XG5cbiAgICAgICAgICBpZiAobWF5YmVFSVswXSA9PT0gMHg0NSAmJiBtYXliZUVJWzFdID09PSAweDQ5KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBsZW5ndGggPSBzdHJlYW0ucG9zIC0gc3RhcnRQb3M7XG5cbiAgICBpZiAoY2ggPT09IC0xKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJJbmxpbmUgQVNDSUk4NURlY29kZSBpbWFnZSBzdHJlYW06IFwiICsgXCJFT0QgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuXCIpO1xuICAgICAgc3RyZWFtLnNraXAoLWxlbmd0aCk7XG4gICAgICByZXR1cm4gdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChzdHJlYW0pO1xuICAgIH1cblxuICAgIHRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKHN0cmVhbSk7XG4gICAgcmV0dXJuIGxlbmd0aDtcbiAgfVxuXG4gIGZpbmRBU0NJSUhleERlY29kZUlubGluZVN0cmVhbUVuZChzdHJlYW0pIHtcbiAgICBjb25zdCBHVCA9IDB4M2U7XG4gICAgY29uc3Qgc3RhcnRQb3MgPSBzdHJlYW0ucG9zO1xuICAgIGxldCBjaDtcblxuICAgIHdoaWxlICgoY2ggPSBzdHJlYW0uZ2V0Qnl0ZSgpKSAhPT0gLTEpIHtcbiAgICAgIGlmIChjaCA9PT0gR1QpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbGVuZ3RoID0gc3RyZWFtLnBvcyAtIHN0YXJ0UG9zO1xuXG4gICAgaWYgKGNoID09PSAtMSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiSW5saW5lIEFTQ0lJSGV4RGVjb2RlIGltYWdlIHN0cmVhbTogXCIgKyBcIkVPRCBtYXJrZXIgbm90IGZvdW5kLCBzZWFyY2hpbmcgZm9yIC9FSS8gaW5zdGVhZC5cIik7XG4gICAgICBzdHJlYW0uc2tpcCgtbGVuZ3RoKTtcbiAgICAgIHJldHVybiB0aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKHN0cmVhbSk7XG4gICAgfVxuXG4gICAgdGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoc3RyZWFtKTtcbiAgICByZXR1cm4gbGVuZ3RoO1xuICB9XG5cbiAgaW5saW5lU3RyZWFtU2tpcEVJKHN0cmVhbSkge1xuICAgIGNvbnN0IEUgPSAweDQ1LFxuICAgICAgICAgIEkgPSAweDQ5O1xuICAgIGxldCBzdGF0ZSA9IDAsXG4gICAgICAgIGNoO1xuXG4gICAgd2hpbGUgKChjaCA9IHN0cmVhbS5nZXRCeXRlKCkpICE9PSAtMSkge1xuICAgICAgaWYgKHN0YXRlID09PSAwKSB7XG4gICAgICAgIHN0YXRlID0gY2ggPT09IEUgPyAxIDogMDtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IDEpIHtcbiAgICAgICAgc3RhdGUgPSBjaCA9PT0gSSA/IDIgOiAwO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gMikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtYWtlSW5saW5lSW1hZ2UoY2lwaGVyVHJhbnNmb3JtKSB7XG4gICAgY29uc3QgbGV4ZXIgPSB0aGlzLmxleGVyO1xuICAgIGNvbnN0IHN0cmVhbSA9IGxleGVyLnN0cmVhbTtcbiAgICBjb25zdCBkaWN0ID0gbmV3IF9wcmltaXRpdmVzLkRpY3QodGhpcy54cmVmKTtcbiAgICBsZXQgZGljdExlbmd0aDtcblxuICAgIHdoaWxlICghKDAsIF9wcmltaXRpdmVzLmlzQ21kKSh0aGlzLmJ1ZjEsIFwiSURcIikgJiYgdGhpcy5idWYxICE9PSBfcHJpbWl0aXZlcy5FT0YpIHtcbiAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodGhpcy5idWYxKSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJEaWN0aW9uYXJ5IGtleSBtdXN0IGJlIGEgbmFtZSBvYmplY3RcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuYnVmMS5uYW1lO1xuICAgICAgdGhpcy5zaGlmdCgpO1xuXG4gICAgICBpZiAodGhpcy5idWYxID09PSBfcHJpbWl0aXZlcy5FT0YpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGRpY3Quc2V0KGtleSwgdGhpcy5nZXRPYmooY2lwaGVyVHJhbnNmb3JtKSk7XG4gICAgfVxuXG4gICAgaWYgKGxleGVyLmJlZ2luSW5saW5lSW1hZ2VQb3MgIT09IC0xKSB7XG4gICAgICBkaWN0TGVuZ3RoID0gc3RyZWFtLnBvcyAtIGxleGVyLmJlZ2luSW5saW5lSW1hZ2VQb3M7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyID0gZGljdC5nZXQoXCJGXCIsIFwiRmlsdGVyXCIpO1xuICAgIGxldCBmaWx0ZXJOYW1lO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZpbHRlcikpIHtcbiAgICAgIGZpbHRlck5hbWUgPSBmaWx0ZXIubmFtZTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyKSkge1xuICAgICAgY29uc3QgZmlsdGVyWmVybyA9IHRoaXMueHJlZi5mZXRjaElmUmVmKGZpbHRlclswXSk7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShmaWx0ZXJaZXJvKSkge1xuICAgICAgICBmaWx0ZXJOYW1lID0gZmlsdGVyWmVyby5uYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0UG9zID0gc3RyZWFtLnBvcztcbiAgICBsZXQgbGVuZ3RoO1xuXG4gICAgc3dpdGNoIChmaWx0ZXJOYW1lKSB7XG4gICAgICBjYXNlIFwiRENUXCI6XG4gICAgICBjYXNlIFwiRENURGVjb2RlXCI6XG4gICAgICAgIGxlbmd0aCA9IHRoaXMuZmluZERDVERlY29kZUlubGluZVN0cmVhbUVuZChzdHJlYW0pO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIkE4NVwiOlxuICAgICAgY2FzZSBcIkFTQ0lJODVEZWNvZGVcIjpcbiAgICAgICAgbGVuZ3RoID0gdGhpcy5maW5kQVNDSUk4NURlY29kZUlubGluZVN0cmVhbUVuZChzdHJlYW0pO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIkFIeFwiOlxuICAgICAgY2FzZSBcIkFTQ0lJSGV4RGVjb2RlXCI6XG4gICAgICAgIGxlbmd0aCA9IHRoaXMuZmluZEFTQ0lJSGV4RGVjb2RlSW5saW5lU3RyZWFtRW5kKHN0cmVhbSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBsZW5ndGggPSB0aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKHN0cmVhbSk7XG4gICAgfVxuXG4gICAgbGV0IGltYWdlU3RyZWFtID0gc3RyZWFtLm1ha2VTdWJTdHJlYW0oc3RhcnRQb3MsIGxlbmd0aCwgZGljdCk7XG4gICAgbGV0IGNhY2hlS2V5O1xuXG4gICAgaWYgKGxlbmd0aCA8IE1BWF9MRU5HVEhfVE9fQ0FDSEUgJiYgZGljdExlbmd0aCA8IE1BWF9BRExFUjMyX0xFTkdUSCkge1xuICAgICAgY29uc3QgaW1hZ2VCeXRlcyA9IGltYWdlU3RyZWFtLmdldEJ5dGVzKCk7XG4gICAgICBpbWFnZVN0cmVhbS5yZXNldCgpO1xuICAgICAgY29uc3QgaW5pdGlhbFN0cmVhbVBvcyA9IHN0cmVhbS5wb3M7XG4gICAgICBzdHJlYW0ucG9zID0gbGV4ZXIuYmVnaW5JbmxpbmVJbWFnZVBvcztcbiAgICAgIGNvbnN0IGRpY3RCeXRlcyA9IHN0cmVhbS5nZXRCeXRlcyhkaWN0TGVuZ3RoKTtcbiAgICAgIHN0cmVhbS5wb3MgPSBpbml0aWFsU3RyZWFtUG9zO1xuICAgICAgY2FjaGVLZXkgPSBjb21wdXRlQWRsZXIzMihpbWFnZUJ5dGVzKSArIFwiX1wiICsgY29tcHV0ZUFkbGVyMzIoZGljdEJ5dGVzKTtcbiAgICAgIGNvbnN0IGNhY2hlRW50cnkgPSB0aGlzLmltYWdlQ2FjaGVbY2FjaGVLZXldO1xuXG4gICAgICBpZiAoY2FjaGVFbnRyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuYnVmMiA9IF9wcmltaXRpdmVzLkNtZC5nZXQoXCJFSVwiKTtcbiAgICAgICAgdGhpcy5zaGlmdCgpO1xuICAgICAgICBjYWNoZUVudHJ5LnJlc2V0KCk7XG4gICAgICAgIHJldHVybiBjYWNoZUVudHJ5O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaXBoZXJUcmFuc2Zvcm0pIHtcbiAgICAgIGltYWdlU3RyZWFtID0gY2lwaGVyVHJhbnNmb3JtLmNyZWF0ZVN0cmVhbShpbWFnZVN0cmVhbSwgbGVuZ3RoKTtcbiAgICB9XG5cbiAgICBpbWFnZVN0cmVhbSA9IHRoaXMuZmlsdGVyKGltYWdlU3RyZWFtLCBkaWN0LCBsZW5ndGgpO1xuICAgIGltYWdlU3RyZWFtLmRpY3QgPSBkaWN0O1xuXG4gICAgaWYgKGNhY2hlS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGltYWdlU3RyZWFtLmNhY2hlS2V5ID0gYGlubGluZV8ke2xlbmd0aH1fJHtjYWNoZUtleX1gO1xuICAgICAgdGhpcy5pbWFnZUNhY2hlW2NhY2hlS2V5XSA9IGltYWdlU3RyZWFtO1xuICAgIH1cblxuICAgIHRoaXMuYnVmMiA9IF9wcmltaXRpdmVzLkNtZC5nZXQoXCJFSVwiKTtcbiAgICB0aGlzLnNoaWZ0KCk7XG4gICAgcmV0dXJuIGltYWdlU3RyZWFtO1xuICB9XG5cbiAgX2ZpbmRTdHJlYW1MZW5ndGgoc3RhcnRQb3MsIHNpZ25hdHVyZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHN0cmVhbVxuICAgIH0gPSB0aGlzLmxleGVyO1xuICAgIHN0cmVhbS5wb3MgPSBzdGFydFBvcztcbiAgICBjb25zdCBTQ0FOX0JMT0NLX0xFTkdUSCA9IDIwNDg7XG4gICAgY29uc3Qgc2lnbmF0dXJlTGVuZ3RoID0gc2lnbmF0dXJlLmxlbmd0aDtcblxuICAgIHdoaWxlIChzdHJlYW0ucG9zIDwgc3RyZWFtLmVuZCkge1xuICAgICAgY29uc3Qgc2NhbkJ5dGVzID0gc3RyZWFtLnBlZWtCeXRlcyhTQ0FOX0JMT0NLX0xFTkdUSCk7XG4gICAgICBjb25zdCBzY2FuTGVuZ3RoID0gc2NhbkJ5dGVzLmxlbmd0aCAtIHNpZ25hdHVyZUxlbmd0aDtcblxuICAgICAgaWYgKHNjYW5MZW5ndGggPD0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgbGV0IHBvcyA9IDA7XG5cbiAgICAgIHdoaWxlIChwb3MgPCBzY2FuTGVuZ3RoKSB7XG4gICAgICAgIGxldCBqID0gMDtcblxuICAgICAgICB3aGlsZSAoaiA8IHNpZ25hdHVyZUxlbmd0aCAmJiBzY2FuQnl0ZXNbcG9zICsgal0gPT09IHNpZ25hdHVyZVtqXSkge1xuICAgICAgICAgIGorKztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChqID49IHNpZ25hdHVyZUxlbmd0aCkge1xuICAgICAgICAgIHN0cmVhbS5wb3MgKz0gcG9zO1xuICAgICAgICAgIHJldHVybiBzdHJlYW0ucG9zIC0gc3RhcnRQb3M7XG4gICAgICAgIH1cblxuICAgICAgICBwb3MrKztcbiAgICAgIH1cblxuICAgICAgc3RyZWFtLnBvcyArPSBzY2FuTGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIG1ha2VTdHJlYW0oZGljdCwgY2lwaGVyVHJhbnNmb3JtKSB7XG4gICAgY29uc3QgbGV4ZXIgPSB0aGlzLmxleGVyO1xuICAgIGxldCBzdHJlYW0gPSBsZXhlci5zdHJlYW07XG4gICAgbGV4ZXIuc2tpcFRvTmV4dExpbmUoKTtcbiAgICBjb25zdCBzdGFydFBvcyA9IHN0cmVhbS5wb3MgLSAxO1xuICAgIGxldCBsZW5ndGggPSBkaWN0LmdldChcIkxlbmd0aFwiKTtcblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihsZW5ndGgpKSB7XG4gICAgICAoMCwgX3V0aWwuaW5mbykoYEJhZCBsZW5ndGggXCIke2xlbmd0aCAmJiBsZW5ndGgudG9TdHJpbmcoKX1cIiBpbiBzdHJlYW0uYCk7XG4gICAgICBsZW5ndGggPSAwO1xuICAgIH1cblxuICAgIHN0cmVhbS5wb3MgPSBzdGFydFBvcyArIGxlbmd0aDtcbiAgICBsZXhlci5uZXh0Q2hhcigpO1xuXG4gICAgaWYgKHRoaXMudHJ5U2hpZnQoKSAmJiAoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKHRoaXMuYnVmMiwgXCJlbmRzdHJlYW1cIikpIHtcbiAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgRU5EU1RSRUFNX1NJR05BVFVSRSA9IG5ldyBVaW50OEFycmF5KFsweDY1LCAweDZlLCAweDY0LCAweDczLCAweDc0LCAweDcyLCAweDY1LCAweDYxLCAweDZkXSk7XG5cbiAgICAgIGxldCBhY3R1YWxMZW5ndGggPSB0aGlzLl9maW5kU3RyZWFtTGVuZ3RoKHN0YXJ0UG9zLCBFTkRTVFJFQU1fU0lHTkFUVVJFKTtcblxuICAgICAgaWYgKGFjdHVhbExlbmd0aCA8IDApIHtcbiAgICAgICAgY29uc3QgTUFYX1RSVU5DQVRJT04gPSAxO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IE1BWF9UUlVOQ0FUSU9OOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBlbmQgPSBFTkRTVFJFQU1fU0lHTkFUVVJFLmxlbmd0aCAtIGk7XG4gICAgICAgICAgY29uc3QgVFJVTkNBVEVEX1NJR05BVFVSRSA9IEVORFNUUkVBTV9TSUdOQVRVUkUuc2xpY2UoMCwgZW5kKTtcblxuICAgICAgICAgIGNvbnN0IG1heWJlTGVuZ3RoID0gdGhpcy5fZmluZFN0cmVhbUxlbmd0aChzdGFydFBvcywgVFJVTkNBVEVEX1NJR05BVFVSRSk7XG5cbiAgICAgICAgICBpZiAobWF5YmVMZW5ndGggPj0gMCkge1xuICAgICAgICAgICAgY29uc3QgbGFzdEJ5dGUgPSBzdHJlYW0ucGVla0J5dGVzKGVuZCArIDEpW2VuZF07XG5cbiAgICAgICAgICAgIGlmICghKDAsIF9jb3JlX3V0aWxzLmlzV2hpdGVTcGFjZSkobGFzdEJ5dGUpKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoYEZvdW5kIFwiJHsoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykoVFJVTkNBVEVEX1NJR05BVFVSRSl9XCIgd2hlbiBgICsgXCJzZWFyY2hpbmcgZm9yIGVuZHN0cmVhbSBjb21tYW5kLlwiKTtcbiAgICAgICAgICAgIGFjdHVhbExlbmd0aCA9IG1heWJlTGVuZ3RoO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdHVhbExlbmd0aCA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJNaXNzaW5nIGVuZHN0cmVhbSBjb21tYW5kLlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZW5ndGggPSBhY3R1YWxMZW5ndGg7XG4gICAgICBsZXhlci5uZXh0Q2hhcigpO1xuICAgICAgdGhpcy5zaGlmdCgpO1xuICAgICAgdGhpcy5zaGlmdCgpO1xuICAgIH1cblxuICAgIHRoaXMuc2hpZnQoKTtcbiAgICBzdHJlYW0gPSBzdHJlYW0ubWFrZVN1YlN0cmVhbShzdGFydFBvcywgbGVuZ3RoLCBkaWN0KTtcblxuICAgIGlmIChjaXBoZXJUcmFuc2Zvcm0pIHtcbiAgICAgIHN0cmVhbSA9IGNpcGhlclRyYW5zZm9ybS5jcmVhdGVTdHJlYW0oc3RyZWFtLCBsZW5ndGgpO1xuICAgIH1cblxuICAgIHN0cmVhbSA9IHRoaXMuZmlsdGVyKHN0cmVhbSwgZGljdCwgbGVuZ3RoKTtcbiAgICBzdHJlYW0uZGljdCA9IGRpY3Q7XG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIGZpbHRlcihzdHJlYW0sIGRpY3QsIGxlbmd0aCkge1xuICAgIGxldCBmaWx0ZXIgPSBkaWN0LmdldChcIkZcIiwgXCJGaWx0ZXJcIik7XG4gICAgbGV0IHBhcmFtcyA9IGRpY3QuZ2V0KFwiRFBcIiwgXCJEZWNvZGVQYXJtc1wiKTtcblxuICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShmaWx0ZXIpKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbXMpKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIi9EZWNvZGVQYXJtcyBzaG91bGQgbm90IGJlIGFuIEFycmF5LCB3aGVuIC9GaWx0ZXIgaXMgYSBOYW1lLlwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMubWFrZUZpbHRlcihzdHJlYW0sIGZpbHRlci5uYW1lLCBsZW5ndGgsIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgbGV0IG1heWJlTGVuZ3RoID0gbGVuZ3RoO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyKSkge1xuICAgICAgY29uc3QgZmlsdGVyQXJyYXkgPSBmaWx0ZXI7XG4gICAgICBjb25zdCBwYXJhbXNBcnJheSA9IHBhcmFtcztcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZmlsdGVyQXJyYXkubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICBmaWx0ZXIgPSB0aGlzLnhyZWYuZmV0Y2hJZlJlZihmaWx0ZXJBcnJheVtpXSk7XG5cbiAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShmaWx0ZXIpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBCYWQgZmlsdGVyIG5hbWUgXCIke2ZpbHRlcn1cImApO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyYW1zID0gbnVsbDtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbXNBcnJheSkgJiYgaSBpbiBwYXJhbXNBcnJheSkge1xuICAgICAgICAgIHBhcmFtcyA9IHRoaXMueHJlZi5mZXRjaElmUmVmKHBhcmFtc0FycmF5W2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0cmVhbSA9IHRoaXMubWFrZUZpbHRlcihzdHJlYW0sIGZpbHRlci5uYW1lLCBtYXliZUxlbmd0aCwgcGFyYW1zKTtcbiAgICAgICAgbWF5YmVMZW5ndGggPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW07XG4gIH1cblxuICBtYWtlRmlsdGVyKHN0cmVhbSwgbmFtZSwgbWF5YmVMZW5ndGgsIHBhcmFtcykge1xuICAgIGlmIChtYXliZUxlbmd0aCA9PT0gMCkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBFbXB0eSBcIiR7bmFtZX1cIiBzdHJlYW0uYCk7XG4gICAgICByZXR1cm4gbmV3IF9zdHJlYW0uTnVsbFN0cmVhbSgpO1xuICAgIH1cblxuICAgIGNvbnN0IHhyZWZTdGF0cyA9IHRoaXMueHJlZi5zdGF0cztcblxuICAgIHRyeSB7XG4gICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgY2FzZSBcIkZsXCI6XG4gICAgICAgIGNhc2UgXCJGbGF0ZURlY29kZVwiOlxuICAgICAgICAgIHhyZWZTdGF0cy5hZGRTdHJlYW1UeXBlKF91dGlsLlN0cmVhbVR5cGUuRkxBVEUpO1xuXG4gICAgICAgICAgaWYgKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBfcHJlZGljdG9yX3N0cmVhbS5QcmVkaWN0b3JTdHJlYW0obmV3IF9mbGF0ZV9zdHJlYW0uRmxhdGVTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCksIG1heWJlTGVuZ3RoLCBwYXJhbXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBuZXcgX2ZsYXRlX3N0cmVhbS5GbGF0ZVN0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoKTtcblxuICAgICAgICBjYXNlIFwiTFpXXCI6XG4gICAgICAgIGNhc2UgXCJMWldEZWNvZGVcIjpcbiAgICAgICAgICB4cmVmU3RhdHMuYWRkU3RyZWFtVHlwZShfdXRpbC5TdHJlYW1UeXBlLkxaVyk7XG4gICAgICAgICAgbGV0IGVhcmx5Q2hhbmdlID0gMTtcblxuICAgICAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgICAgIGlmIChwYXJhbXMuaGFzKFwiRWFybHlDaGFuZ2VcIikpIHtcbiAgICAgICAgICAgICAgZWFybHlDaGFuZ2UgPSBwYXJhbXMuZ2V0KFwiRWFybHlDaGFuZ2VcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgX3ByZWRpY3Rvcl9zdHJlYW0uUHJlZGljdG9yU3RyZWFtKG5ldyBfbHp3X3N0cmVhbS5MWldTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCwgZWFybHlDaGFuZ2UpLCBtYXliZUxlbmd0aCwgcGFyYW1zKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbmV3IF9sendfc3RyZWFtLkxaV1N0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoLCBlYXJseUNoYW5nZSk7XG5cbiAgICAgICAgY2FzZSBcIkRDVFwiOlxuICAgICAgICBjYXNlIFwiRENURGVjb2RlXCI6XG4gICAgICAgICAgeHJlZlN0YXRzLmFkZFN0cmVhbVR5cGUoX3V0aWwuU3RyZWFtVHlwZS5EQ1QpO1xuICAgICAgICAgIHJldHVybiBuZXcgX2pwZWdfc3RyZWFtLkpwZWdTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCwgcGFyYW1zKTtcblxuICAgICAgICBjYXNlIFwiSlBYXCI6XG4gICAgICAgIGNhc2UgXCJKUFhEZWNvZGVcIjpcbiAgICAgICAgICB4cmVmU3RhdHMuYWRkU3RyZWFtVHlwZShfdXRpbC5TdHJlYW1UeXBlLkpQWCk7XG4gICAgICAgICAgcmV0dXJuIG5ldyBfanB4X3N0cmVhbS5KcHhTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCwgcGFyYW1zKTtcblxuICAgICAgICBjYXNlIFwiQTg1XCI6XG4gICAgICAgIGNhc2UgXCJBU0NJSTg1RGVjb2RlXCI6XG4gICAgICAgICAgeHJlZlN0YXRzLmFkZFN0cmVhbVR5cGUoX3V0aWwuU3RyZWFtVHlwZS5BODUpO1xuICAgICAgICAgIHJldHVybiBuZXcgX2FzY2lpXzg1X3N0cmVhbS5Bc2NpaTg1U3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgpO1xuXG4gICAgICAgIGNhc2UgXCJBSHhcIjpcbiAgICAgICAgY2FzZSBcIkFTQ0lJSGV4RGVjb2RlXCI6XG4gICAgICAgICAgeHJlZlN0YXRzLmFkZFN0cmVhbVR5cGUoX3V0aWwuU3RyZWFtVHlwZS5BSFgpO1xuICAgICAgICAgIHJldHVybiBuZXcgX2FzY2lpX2hleF9zdHJlYW0uQXNjaWlIZXhTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCk7XG5cbiAgICAgICAgY2FzZSBcIkNDRlwiOlxuICAgICAgICBjYXNlIFwiQ0NJVFRGYXhEZWNvZGVcIjpcbiAgICAgICAgICB4cmVmU3RhdHMuYWRkU3RyZWFtVHlwZShfdXRpbC5TdHJlYW1UeXBlLkNDRik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBfY2NpdHRfc3RyZWFtLkNDSVRURmF4U3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgsIHBhcmFtcyk7XG5cbiAgICAgICAgY2FzZSBcIlJMXCI6XG4gICAgICAgIGNhc2UgXCJSdW5MZW5ndGhEZWNvZGVcIjpcbiAgICAgICAgICB4cmVmU3RhdHMuYWRkU3RyZWFtVHlwZShfdXRpbC5TdHJlYW1UeXBlLlJMWCk7XG4gICAgICAgICAgcmV0dXJuIG5ldyBfcnVuX2xlbmd0aF9zdHJlYW0uUnVuTGVuZ3RoU3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgpO1xuXG4gICAgICAgIGNhc2UgXCJKQklHMkRlY29kZVwiOlxuICAgICAgICAgIHhyZWZTdGF0cy5hZGRTdHJlYW1UeXBlKF91dGlsLlN0cmVhbVR5cGUuSkJJRyk7XG4gICAgICAgICAgcmV0dXJuIG5ldyBfamJpZzJfc3RyZWFtLkpiaWcyU3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgsIHBhcmFtcyk7XG4gICAgICB9XG5cbiAgICAgICgwLCBfdXRpbC53YXJuKShgRmlsdGVyIFwiJHtuYW1lfVwiIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgICByZXR1cm4gc3RyZWFtO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLndhcm4pKGBJbnZhbGlkIHN0cmVhbTogXCIke2V4fVwiYCk7XG4gICAgICByZXR1cm4gbmV3IF9zdHJlYW0uTnVsbFN0cmVhbSgpO1xuICAgIH1cbiAgfVxuXG59XG5cbmV4cG9ydHMuUGFyc2VyID0gUGFyc2VyO1xuY29uc3Qgc3BlY2lhbENoYXJzID0gWzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDIsIDAsIDAsIDIsIDIsIDAsIDAsIDAsIDAsIDAsIDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIsIDAsIDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIsIDAsIDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIsIDAsIDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdO1xuXG5mdW5jdGlvbiB0b0hleERpZ2l0KGNoKSB7XG4gIGlmIChjaCA+PSAweDMwICYmIGNoIDw9IDB4MzkpIHtcbiAgICByZXR1cm4gY2ggJiAweDBmO1xuICB9XG5cbiAgaWYgKGNoID49IDB4NDEgJiYgY2ggPD0gMHg0NiB8fCBjaCA+PSAweDYxICYmIGNoIDw9IDB4NjYpIHtcbiAgICByZXR1cm4gKGNoICYgMHgwZikgKyA5O1xuICB9XG5cbiAgcmV0dXJuIC0xO1xufVxuXG5jbGFzcyBMZXhlciB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSwga25vd25Db21tYW5kcyA9IG51bGwpIHtcbiAgICB0aGlzLnN0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgdGhpcy5zdHJCdWYgPSBbXTtcbiAgICB0aGlzLmtub3duQ29tbWFuZHMgPSBrbm93bkNvbW1hbmRzO1xuICAgIHRoaXMuX2hleFN0cmluZ051bVdhcm4gPSAwO1xuICAgIHRoaXMuYmVnaW5JbmxpbmVJbWFnZVBvcyA9IC0xO1xuICB9XG5cbiAgbmV4dENoYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudENoYXIgPSB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7XG4gIH1cblxuICBwZWVrQ2hhcigpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJlYW0ucGVla0J5dGUoKTtcbiAgfVxuXG4gIGdldE51bWJlcigpIHtcbiAgICBsZXQgY2ggPSB0aGlzLmN1cnJlbnRDaGFyO1xuICAgIGxldCBlTm90YXRpb24gPSBmYWxzZTtcbiAgICBsZXQgZGl2aWRlQnkgPSAwO1xuICAgIGxldCBzaWduID0gMDtcblxuICAgIGlmIChjaCA9PT0gMHgyZCkge1xuICAgICAgc2lnbiA9IC0xO1xuICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG5cbiAgICAgIGlmIChjaCA9PT0gMHgyZCkge1xuICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoID09PSAweDJiKSB7XG4gICAgICBzaWduID0gMTtcbiAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gMHgwYSB8fCBjaCA9PT0gMHgwZCkge1xuICAgICAgZG8ge1xuICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgIH0gd2hpbGUgKGNoID09PSAweDBhIHx8IGNoID09PSAweDBkKTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09IDB4MmUpIHtcbiAgICAgIGRpdmlkZUJ5ID0gMTA7XG4gICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPCAweDMwIHx8IGNoID4gMHgzOSkge1xuICAgICAgaWYgKGRpdmlkZUJ5ID09PSAxMCAmJiBzaWduID09PSAwICYmICgoMCwgX2NvcmVfdXRpbHMuaXNXaGl0ZVNwYWNlKShjaCkgfHwgY2ggPT09IC0xKSkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJMZXhlci5nZXROdW1iZXIgLSB0cmVhdGluZyBhIHNpbmdsZSBkZWNpbWFsIHBvaW50IGFzIHplcm8uXCIpO1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIG51bWJlcjogJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKX0gKGNoYXJDb2RlICR7Y2h9KWApO1xuICAgIH1cblxuICAgIHNpZ24gPSBzaWduIHx8IDE7XG4gICAgbGV0IGJhc2VWYWx1ZSA9IGNoIC0gMHgzMDtcbiAgICBsZXQgcG93ZXJWYWx1ZSA9IDA7XG4gICAgbGV0IHBvd2VyVmFsdWVTaWduID0gMTtcblxuICAgIHdoaWxlICgoY2ggPSB0aGlzLm5leHRDaGFyKCkpID49IDApIHtcbiAgICAgIGlmIChjaCA+PSAweDMwICYmIGNoIDw9IDB4MzkpIHtcbiAgICAgICAgY29uc3QgY3VycmVudERpZ2l0ID0gY2ggLSAweDMwO1xuXG4gICAgICAgIGlmIChlTm90YXRpb24pIHtcbiAgICAgICAgICBwb3dlclZhbHVlID0gcG93ZXJWYWx1ZSAqIDEwICsgY3VycmVudERpZ2l0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChkaXZpZGVCeSAhPT0gMCkge1xuICAgICAgICAgICAgZGl2aWRlQnkgKj0gMTA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYmFzZVZhbHVlID0gYmFzZVZhbHVlICogMTAgKyBjdXJyZW50RGlnaXQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MmUpIHtcbiAgICAgICAgaWYgKGRpdmlkZUJ5ID09PSAwKSB7XG4gICAgICAgICAgZGl2aWRlQnkgPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNoID09PSAweDJkKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIkJhZGx5IGZvcm1hdHRlZCBudW1iZXI6IG1pbnVzIHNpZ24gaW4gdGhlIG1pZGRsZVwiKTtcbiAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4NDUgfHwgY2ggPT09IDB4NjUpIHtcbiAgICAgICAgY2ggPSB0aGlzLnBlZWtDaGFyKCk7XG5cbiAgICAgICAgaWYgKGNoID09PSAweDJiIHx8IGNoID09PSAweDJkKSB7XG4gICAgICAgICAgcG93ZXJWYWx1ZVNpZ24gPSBjaCA9PT0gMHgyZCA/IC0xIDogMTtcbiAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPCAweDMwIHx8IGNoID4gMHgzOSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZU5vdGF0aW9uID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkaXZpZGVCeSAhPT0gMCkge1xuICAgICAgYmFzZVZhbHVlIC89IGRpdmlkZUJ5O1xuICAgIH1cblxuICAgIGlmIChlTm90YXRpb24pIHtcbiAgICAgIGJhc2VWYWx1ZSAqPSAxMCAqKiAocG93ZXJWYWx1ZVNpZ24gKiBwb3dlclZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2lnbiAqIGJhc2VWYWx1ZTtcbiAgfVxuXG4gIGdldFN0cmluZygpIHtcbiAgICBsZXQgbnVtUGFyZW4gPSAxO1xuICAgIGxldCBkb25lID0gZmFsc2U7XG4gICAgY29uc3Qgc3RyQnVmID0gdGhpcy5zdHJCdWY7XG4gICAgc3RyQnVmLmxlbmd0aCA9IDA7XG4gICAgbGV0IGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGxldCBjaGFyQnVmZmVyZWQgPSBmYWxzZTtcblxuICAgICAgc3dpdGNoIChjaCB8IDApIHtcbiAgICAgICAgY2FzZSAtMTpcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJVbnRlcm1pbmF0ZWQgc3RyaW5nXCIpO1xuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMHgyODpcbiAgICAgICAgICArK251bVBhcmVuO1xuICAgICAgICAgIHN0ckJ1Zi5wdXNoKFwiKFwiKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDB4Mjk6XG4gICAgICAgICAgaWYgKC0tbnVtUGFyZW4gPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHJCdWYucHVzaChcIilcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAweDVjOlxuICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuXG4gICAgICAgICAgc3dpdGNoIChjaCkge1xuICAgICAgICAgICAgY2FzZSAtMTpcbiAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW50ZXJtaW5hdGVkIHN0cmluZ1wiKTtcbiAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDB4NmU6XG4gICAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFwiXFxuXCIpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAweDcyOlxuICAgICAgICAgICAgICBzdHJCdWYucHVzaChcIlxcclwiKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMHg3NDpcbiAgICAgICAgICAgICAgc3RyQnVmLnB1c2goXCJcXHRcIik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDB4NjI6XG4gICAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFwiXFxiXCIpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAweDY2OlxuICAgICAgICAgICAgICBzdHJCdWYucHVzaChcIlxcZlwiKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMHg1YzpcbiAgICAgICAgICAgIGNhc2UgMHgyODpcbiAgICAgICAgICAgIGNhc2UgMHgyOTpcbiAgICAgICAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAweDMwOlxuICAgICAgICAgICAgY2FzZSAweDMxOlxuICAgICAgICAgICAgY2FzZSAweDMyOlxuICAgICAgICAgICAgY2FzZSAweDMzOlxuICAgICAgICAgICAgY2FzZSAweDM0OlxuICAgICAgICAgICAgY2FzZSAweDM1OlxuICAgICAgICAgICAgY2FzZSAweDM2OlxuICAgICAgICAgICAgY2FzZSAweDM3OlxuICAgICAgICAgICAgICBsZXQgeCA9IGNoICYgMHgwZjtcbiAgICAgICAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgIGNoYXJCdWZmZXJlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgaWYgKGNoID49IDB4MzAgJiYgY2ggPD0gMHgzNykge1xuICAgICAgICAgICAgICAgIHggPSAoeCA8PCAzKSArIChjaCAmIDB4MGYpO1xuICAgICAgICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNoID49IDB4MzAgJiYgY2ggPD0gMHgzNykge1xuICAgICAgICAgICAgICAgICAgY2hhckJ1ZmZlcmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB4ID0gKHggPDwgMykgKyAoY2ggJiAweDBmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHgpKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMHgwZDpcbiAgICAgICAgICAgICAgaWYgKHRoaXMucGVla0NoYXIoKSA9PT0gMHgwYSkge1xuICAgICAgICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDB4MGE6XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKCFjaGFyQnVmZmVyZWQpIHtcbiAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0ckJ1Zi5qb2luKFwiXCIpO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICBsZXQgY2gsIHByZXZpb3VzQ2g7XG4gICAgY29uc3Qgc3RyQnVmID0gdGhpcy5zdHJCdWY7XG4gICAgc3RyQnVmLmxlbmd0aCA9IDA7XG5cbiAgICB3aGlsZSAoKGNoID0gdGhpcy5uZXh0Q2hhcigpKSA+PSAwICYmICFzcGVjaWFsQ2hhcnNbY2hdKSB7XG4gICAgICBpZiAoY2ggPT09IDB4MjMpIHtcbiAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG5cbiAgICAgICAgaWYgKHNwZWNpYWxDaGFyc1tjaF0pIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJMZXhlcl9nZXROYW1lOiBcIiArIFwiTlVNQkVSIFNJR04gKCMpIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGhleGFkZWNpbWFsIG51bWJlci5cIik7XG4gICAgICAgICAgc3RyQnVmLnB1c2goXCIjXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeCA9IHRvSGV4RGlnaXQoY2gpO1xuXG4gICAgICAgIGlmICh4ICE9PSAtMSkge1xuICAgICAgICAgIHByZXZpb3VzQ2ggPSBjaDtcbiAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICBjb25zdCB4MiA9IHRvSGV4RGlnaXQoY2gpO1xuXG4gICAgICAgICAgaWYgKHgyID09PSAtMSkge1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBMZXhlcl9nZXROYW1lOiBJbGxlZ2FsIGRpZ2l0ICgke1N0cmluZy5mcm9tQ2hhckNvZGUoY2gpfSkgYCArIFwiaW4gaGV4YWRlY2ltYWwgbnVtYmVyLlwiKTtcbiAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFwiI1wiLCBTdHJpbmcuZnJvbUNoYXJDb2RlKHByZXZpb3VzQ2gpKTtcblxuICAgICAgICAgICAgaWYgKHNwZWNpYWxDaGFyc1tjaF0pIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoeCA8PCA0IHwgeDIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHJCdWYucHVzaChcIiNcIiwgU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0ckJ1Zi5sZW5ndGggPiAxMjcpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShgTmFtZSB0b2tlbiBpcyBsb25nZXIgdGhhbiBhbGxvd2VkIGJ5IHRoZSBzcGVjOiAke3N0ckJ1Zi5sZW5ndGh9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9wcmltaXRpdmVzLk5hbWUuZ2V0KHN0ckJ1Zi5qb2luKFwiXCIpKTtcbiAgfVxuXG4gIF9oZXhTdHJpbmdXYXJuKGNoKSB7XG4gICAgY29uc3QgTUFYX0hFWF9TVFJJTkdfTlVNX1dBUk4gPSA1O1xuXG4gICAgaWYgKHRoaXMuX2hleFN0cmluZ051bVdhcm4rKyA9PT0gTUFYX0hFWF9TVFJJTkdfTlVNX1dBUk4pIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcImdldEhleFN0cmluZyAtIGlnbm9yaW5nIGFkZGl0aW9uYWwgaW52YWxpZCBjaGFyYWN0ZXJzLlwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGV4U3RyaW5nTnVtV2FybiA+IE1BWF9IRVhfU1RSSU5HX05VTV9XQVJOKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgKDAsIF91dGlsLndhcm4pKGBnZXRIZXhTdHJpbmcgLSBpZ25vcmluZyBpbnZhbGlkIGNoYXJhY3RlcjogJHtjaH1gKTtcbiAgfVxuXG4gIGdldEhleFN0cmluZygpIHtcbiAgICBjb25zdCBzdHJCdWYgPSB0aGlzLnN0ckJ1ZjtcbiAgICBzdHJCdWYubGVuZ3RoID0gMDtcbiAgICBsZXQgY2ggPSB0aGlzLmN1cnJlbnRDaGFyO1xuICAgIGxldCBpc0ZpcnN0SGV4ID0gdHJ1ZTtcbiAgICBsZXQgZmlyc3REaWdpdCwgc2Vjb25kRGlnaXQ7XG4gICAgdGhpcy5faGV4U3RyaW5nTnVtV2FybiA9IDA7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGNoIDwgMCkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJVbnRlcm1pbmF0ZWQgaGV4IHN0cmluZ1wiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKGNoID09PSAweDNlKSB7XG4gICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKHNwZWNpYWxDaGFyc1tjaF0gPT09IDEpIHtcbiAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzRmlyc3RIZXgpIHtcbiAgICAgICAgICBmaXJzdERpZ2l0ID0gdG9IZXhEaWdpdChjaCk7XG5cbiAgICAgICAgICBpZiAoZmlyc3REaWdpdCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuX2hleFN0cmluZ1dhcm4oY2gpO1xuXG4gICAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWNvbmREaWdpdCA9IHRvSGV4RGlnaXQoY2gpO1xuXG4gICAgICAgICAgaWYgKHNlY29uZERpZ2l0ID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5faGV4U3RyaW5nV2FybihjaCk7XG5cbiAgICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShmaXJzdERpZ2l0IDw8IDQgfCBzZWNvbmREaWdpdCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaXNGaXJzdEhleCA9ICFpc0ZpcnN0SGV4O1xuICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3RyQnVmLmpvaW4oXCJcIik7XG4gIH1cblxuICBnZXRPYmooKSB7XG4gICAgbGV0IGNvbW1lbnQgPSBmYWxzZTtcbiAgICBsZXQgY2ggPSB0aGlzLmN1cnJlbnRDaGFyO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChjaCA8IDApIHtcbiAgICAgICAgcmV0dXJuIF9wcmltaXRpdmVzLkVPRjtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbW1lbnQpIHtcbiAgICAgICAgaWYgKGNoID09PSAweDBhIHx8IGNoID09PSAweDBkKSB7XG4gICAgICAgICAgY29tbWVudCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNoID09PSAweDI1KSB7XG4gICAgICAgIGNvbW1lbnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChzcGVjaWFsQ2hhcnNbY2hdICE9PSAxKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNoIHwgMCkge1xuICAgICAgY2FzZSAweDMwOlxuICAgICAgY2FzZSAweDMxOlxuICAgICAgY2FzZSAweDMyOlxuICAgICAgY2FzZSAweDMzOlxuICAgICAgY2FzZSAweDM0OlxuICAgICAgY2FzZSAweDM1OlxuICAgICAgY2FzZSAweDM2OlxuICAgICAgY2FzZSAweDM3OlxuICAgICAgY2FzZSAweDM4OlxuICAgICAgY2FzZSAweDM5OlxuICAgICAgY2FzZSAweDJiOlxuICAgICAgY2FzZSAweDJkOlxuICAgICAgY2FzZSAweDJlOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXROdW1iZXIoKTtcblxuICAgICAgY2FzZSAweDI4OlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgICAgY2FzZSAweDJmOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXROYW1lKCk7XG5cbiAgICAgIGNhc2UgMHg1YjpcbiAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuQ21kLmdldChcIltcIik7XG5cbiAgICAgIGNhc2UgMHg1ZDpcbiAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuQ21kLmdldChcIl1cIik7XG5cbiAgICAgIGNhc2UgMHgzYzpcbiAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG5cbiAgICAgICAgaWYgKGNoID09PSAweDNjKSB7XG4gICAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5DbWQuZ2V0KFwiPDxcIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRIZXhTdHJpbmcoKTtcblxuICAgICAgY2FzZSAweDNlOlxuICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcblxuICAgICAgICBpZiAoY2ggPT09IDB4M2UpIHtcbiAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgcmV0dXJuIF9wcmltaXRpdmVzLkNtZC5nZXQoXCI+PlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5DbWQuZ2V0KFwiPlwiKTtcblxuICAgICAgY2FzZSAweDdiOlxuICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5DbWQuZ2V0KFwie1wiKTtcblxuICAgICAgY2FzZSAweDdkOlxuICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5DbWQuZ2V0KFwifVwiKTtcblxuICAgICAgY2FzZSAweDI5OlxuICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSWxsZWdhbCBjaGFyYWN0ZXI6ICR7Y2h9YCk7XG4gICAgfVxuXG4gICAgbGV0IHN0ciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuXG4gICAgaWYgKGNoIDwgMHgyMCB8fCBjaCA+IDB4N2YpIHtcbiAgICAgIGNvbnN0IG5leHRDaCA9IHRoaXMucGVla0NoYXIoKTtcblxuICAgICAgaWYgKG5leHRDaCA+PSAweDIwICYmIG5leHRDaCA8PSAweDdmKSB7XG4gICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgcmV0dXJuIF9wcmltaXRpdmVzLkNtZC5nZXQoc3RyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBrbm93bkNvbW1hbmRzID0gdGhpcy5rbm93bkNvbW1hbmRzO1xuICAgIGxldCBrbm93bkNvbW1hbmRGb3VuZCA9IGtub3duQ29tbWFuZHMgJiYga25vd25Db21tYW5kc1tzdHJdICE9PSB1bmRlZmluZWQ7XG5cbiAgICB3aGlsZSAoKGNoID0gdGhpcy5uZXh0Q2hhcigpKSA+PSAwICYmICFzcGVjaWFsQ2hhcnNbY2hdKSB7XG4gICAgICBjb25zdCBwb3NzaWJsZUNvbW1hbmQgPSBzdHIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcblxuICAgICAgaWYgKGtub3duQ29tbWFuZEZvdW5kICYmIGtub3duQ29tbWFuZHNbcG9zc2libGVDb21tYW5kXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMTI4KSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgQ29tbWFuZCB0b2tlbiB0b28gbG9uZzogJHtzdHIubGVuZ3RofWApO1xuICAgICAgfVxuXG4gICAgICBzdHIgPSBwb3NzaWJsZUNvbW1hbmQ7XG4gICAgICBrbm93bkNvbW1hbmRGb3VuZCA9IGtub3duQ29tbWFuZHMgJiYga25vd25Db21tYW5kc1tzdHJdICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHN0ciA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdHIgPT09IFwiZmFsc2VcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzdHIgPT09IFwibnVsbFwiKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc3RyID09PSBcIkJJXCIpIHtcbiAgICAgIHRoaXMuYmVnaW5JbmxpbmVJbWFnZVBvcyA9IHRoaXMuc3RyZWFtLnBvcztcbiAgICB9XG5cbiAgICByZXR1cm4gX3ByaW1pdGl2ZXMuQ21kLmdldChzdHIpO1xuICB9XG5cbiAgcGVla09iaigpIHtcbiAgICBjb25zdCBzdHJlYW1Qb3MgPSB0aGlzLnN0cmVhbS5wb3MsXG4gICAgICAgICAgY3VycmVudENoYXIgPSB0aGlzLmN1cnJlbnRDaGFyLFxuICAgICAgICAgIGJlZ2luSW5saW5lSW1hZ2VQb3MgPSB0aGlzLmJlZ2luSW5saW5lSW1hZ2VQb3M7XG4gICAgbGV0IG5leHRPYmo7XG5cbiAgICB0cnkge1xuICAgICAgbmV4dE9iaiA9IHRoaXMuZ2V0T2JqKCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwud2FybikoYHBlZWtPYmo6ICR7ZXh9YCk7XG4gICAgfVxuXG4gICAgdGhpcy5zdHJlYW0ucG9zID0gc3RyZWFtUG9zO1xuICAgIHRoaXMuY3VycmVudENoYXIgPSBjdXJyZW50Q2hhcjtcbiAgICB0aGlzLmJlZ2luSW5saW5lSW1hZ2VQb3MgPSBiZWdpbklubGluZUltYWdlUG9zO1xuICAgIHJldHVybiBuZXh0T2JqO1xuICB9XG5cbiAgc2tpcFRvTmV4dExpbmUoKSB7XG4gICAgbGV0IGNoID0gdGhpcy5jdXJyZW50Q2hhcjtcblxuICAgIHdoaWxlIChjaCA+PSAwKSB7XG4gICAgICBpZiAoY2ggPT09IDB4MGQpIHtcbiAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG5cbiAgICAgICAgaWYgKGNoID09PSAweDBhKSB7XG4gICAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKGNoID09PSAweDBhKSB7XG4gICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgIH1cbiAgfVxuXG59XG5cbmV4cG9ydHMuTGV4ZXIgPSBMZXhlcjtcblxuY2xhc3MgTGluZWFyaXphdGlvbiB7XG4gIHN0YXRpYyBjcmVhdGUoc3RyZWFtKSB7XG4gICAgZnVuY3Rpb24gZ2V0SW50KGxpbkRpY3QsIG5hbWUsIGFsbG93WmVyb1ZhbHVlID0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IG9iaiA9IGxpbkRpY3QuZ2V0KG5hbWUpO1xuXG4gICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihvYmopICYmIChhbGxvd1plcm9WYWx1ZSA/IG9iaiA+PSAwIDogb2JqID4gMCkpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgXCIke25hbWV9XCIgcGFyYW1ldGVyIGluIHRoZSBsaW5lYXJpemF0aW9uIGAgKyBcImRpY3Rpb25hcnkgaXMgaW52YWxpZC5cIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SGludHMobGluRGljdCkge1xuICAgICAgY29uc3QgaGludHMgPSBsaW5EaWN0LmdldChcIkhcIik7XG4gICAgICBsZXQgaGludHNMZW5ndGg7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGhpbnRzKSAmJiAoKGhpbnRzTGVuZ3RoID0gaGludHMubGVuZ3RoKSA9PT0gMiB8fCBoaW50c0xlbmd0aCA9PT0gNCkpIHtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGhpbnRzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgY29uc3QgaGludCA9IGhpbnRzW2luZGV4XTtcblxuICAgICAgICAgIGlmICghKE51bWJlci5pc0ludGVnZXIoaGludCkgJiYgaGludCA+IDApKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhpbnQgKCR7aW5kZXh9KSBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGhpbnRzO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJIaW50IGFycmF5IGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC5cIik7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcih7XG4gICAgICBsZXhlcjogbmV3IExleGVyKHN0cmVhbSksXG4gICAgICB4cmVmOiBudWxsXG4gICAgfSk7XG4gICAgY29uc3Qgb2JqMSA9IHBhcnNlci5nZXRPYmooKTtcbiAgICBjb25zdCBvYmoyID0gcGFyc2VyLmdldE9iaigpO1xuICAgIGNvbnN0IG9iajMgPSBwYXJzZXIuZ2V0T2JqKCk7XG4gICAgY29uc3QgbGluRGljdCA9IHBhcnNlci5nZXRPYmooKTtcbiAgICBsZXQgb2JqLCBsZW5ndGg7XG5cbiAgICBpZiAoIShOdW1iZXIuaXNJbnRlZ2VyKG9iajEpICYmIE51bWJlci5pc0ludGVnZXIob2JqMikgJiYgKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmozLCBcIm9ialwiKSAmJiAoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShsaW5EaWN0KSAmJiAoMCwgX3V0aWwuaXNOdW0pKG9iaiA9IGxpbkRpY3QuZ2V0KFwiTGluZWFyaXplZFwiKSkgJiYgb2JqID4gMCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoKGxlbmd0aCA9IGdldEludChsaW5EaWN0LCBcIkxcIikpICE9PSBzdHJlYW0ubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBcIkxcIiBwYXJhbWV0ZXIgaW4gdGhlIGxpbmVhcml6YXRpb24gZGljdGlvbmFyeSAnICsgXCJkb2VzIG5vdCBlcXVhbCB0aGUgc3RyZWFtIGxlbmd0aC5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxlbmd0aCxcbiAgICAgIGhpbnRzOiBnZXRIaW50cyhsaW5EaWN0KSxcbiAgICAgIG9iamVjdE51bWJlckZpcnN0OiBnZXRJbnQobGluRGljdCwgXCJPXCIpLFxuICAgICAgZW5kRmlyc3Q6IGdldEludChsaW5EaWN0LCBcIkVcIiksXG4gICAgICBudW1QYWdlczogZ2V0SW50KGxpbkRpY3QsIFwiTlwiKSxcbiAgICAgIG1haW5YUmVmRW50cmllc09mZnNldDogZ2V0SW50KGxpbkRpY3QsIFwiVFwiKSxcbiAgICAgIHBhZ2VGaXJzdDogbGluRGljdC5oYXMoXCJQXCIpID8gZ2V0SW50KGxpbkRpY3QsIFwiUFwiLCB0cnVlKSA6IDBcbiAgICB9O1xuICB9XG5cbn1cblxuZXhwb3J0cy5MaW5lYXJpemF0aW9uID0gTGluZWFyaXphdGlvbjtcblxuLyoqKi8gfSksXG4vKiAyOCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5Bc2NpaTg1U3RyZWFtID0gdm9pZCAwO1xuXG52YXIgX2RlY29kZV9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI5KTtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg5KTtcblxuY2xhc3MgQXNjaWk4NVN0cmVhbSBleHRlbmRzIF9kZWNvZGVfc3RyZWFtLkRlY29kZVN0cmVhbSB7XG4gIGNvbnN0cnVjdG9yKHN0ciwgbWF5YmVMZW5ndGgpIHtcbiAgICBpZiAobWF5YmVMZW5ndGgpIHtcbiAgICAgIG1heWJlTGVuZ3RoICo9IDAuODtcbiAgICB9XG5cbiAgICBzdXBlcihtYXliZUxlbmd0aCk7XG4gICAgdGhpcy5zdHIgPSBzdHI7XG4gICAgdGhpcy5kaWN0ID0gc3RyLmRpY3Q7XG4gICAgdGhpcy5pbnB1dCA9IG5ldyBVaW50OEFycmF5KDUpO1xuICB9XG5cbiAgcmVhZEJsb2NrKCkge1xuICAgIGNvbnN0IFRJTERBX0NIQVIgPSAweDdlO1xuICAgIGNvbnN0IFpfTE9XRVJfQ0hBUiA9IDB4N2E7XG4gICAgY29uc3QgRU9GID0gLTE7XG4gICAgY29uc3Qgc3RyID0gdGhpcy5zdHI7XG4gICAgbGV0IGMgPSBzdHIuZ2V0Qnl0ZSgpO1xuXG4gICAgd2hpbGUgKCgwLCBfY29yZV91dGlscy5pc1doaXRlU3BhY2UpKGMpKSB7XG4gICAgICBjID0gc3RyLmdldEJ5dGUoKTtcbiAgICB9XG5cbiAgICBpZiAoYyA9PT0gRU9GIHx8IGMgPT09IFRJTERBX0NIQVIpIHtcbiAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlckxlbmd0aDtcbiAgICBsZXQgYnVmZmVyLCBpO1xuXG4gICAgaWYgKGMgPT09IFpfTE9XRVJfQ0hBUikge1xuICAgICAgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIoYnVmZmVyTGVuZ3RoICsgNCk7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHtcbiAgICAgICAgYnVmZmVyW2J1ZmZlckxlbmd0aCArIGldID0gMDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5idWZmZXJMZW5ndGggKz0gNDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmlucHV0O1xuICAgICAgaW5wdXRbMF0gPSBjO1xuXG4gICAgICBmb3IgKGkgPSAxOyBpIDwgNTsgKytpKSB7XG4gICAgICAgIGMgPSBzdHIuZ2V0Qnl0ZSgpO1xuXG4gICAgICAgIHdoaWxlICgoMCwgX2NvcmVfdXRpbHMuaXNXaGl0ZVNwYWNlKShjKSkge1xuICAgICAgICAgIGMgPSBzdHIuZ2V0Qnl0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5wdXRbaV0gPSBjO1xuXG4gICAgICAgIGlmIChjID09PSBFT0YgfHwgYyA9PT0gVElMREFfQ0hBUikge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKGJ1ZmZlckxlbmd0aCArIGkgLSAxKTtcbiAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoICs9IGkgLSAxO1xuXG4gICAgICBpZiAoaSA8IDUpIHtcbiAgICAgICAgZm9yICg7IGkgPCA1OyArK2kpIHtcbiAgICAgICAgICBpbnB1dFtpXSA9IDB4MjEgKyA4NDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IHQgPSAwO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgNTsgKytpKSB7XG4gICAgICAgIHQgPSB0ICogODUgKyAoaW5wdXRbaV0gLSAweDIxKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gMzsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgYnVmZmVyW2J1ZmZlckxlbmd0aCArIGldID0gdCAmIDB4ZmY7XG4gICAgICAgIHQgPj49IDg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5Bc2NpaTg1U3RyZWFtID0gQXNjaWk4NVN0cmVhbTtcblxuLyoqKi8gfSksXG4vKiAyOSAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5TdHJlYW1zU2VxdWVuY2VTdHJlYW0gPSBleHBvcnRzLkRlY29kZVN0cmVhbSA9IHZvaWQgMDtcblxudmFyIF9iYXNlX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oNik7XG5cbnZhciBfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxMCk7XG5cbmNvbnN0IGVtcHR5QnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoMCk7XG5cbmNsYXNzIERlY29kZVN0cmVhbSBleHRlbmRzIF9iYXNlX3N0cmVhbS5CYXNlU3RyZWFtIHtcbiAgY29uc3RydWN0b3IobWF5YmVNaW5CdWZmZXJMZW5ndGgpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3Jhd01pbkJ1ZmZlckxlbmd0aCA9IG1heWJlTWluQnVmZmVyTGVuZ3RoIHx8IDA7XG4gICAgdGhpcy5wb3MgPSAwO1xuICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gMDtcbiAgICB0aGlzLmVvZiA9IGZhbHNlO1xuICAgIHRoaXMuYnVmZmVyID0gZW1wdHlCdWZmZXI7XG4gICAgdGhpcy5taW5CdWZmZXJMZW5ndGggPSA1MTI7XG5cbiAgICBpZiAobWF5YmVNaW5CdWZmZXJMZW5ndGgpIHtcbiAgICAgIHdoaWxlICh0aGlzLm1pbkJ1ZmZlckxlbmd0aCA8IG1heWJlTWluQnVmZmVyTGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubWluQnVmZmVyTGVuZ3RoICo9IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzRW1wdHkoKSB7XG4gICAgd2hpbGUgKCF0aGlzLmVvZiAmJiB0aGlzLmJ1ZmZlckxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5yZWFkQmxvY2soKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5idWZmZXJMZW5ndGggPT09IDA7XG4gIH1cblxuICBlbnN1cmVCdWZmZXIocmVxdWVzdGVkKSB7XG4gICAgY29uc3QgYnVmZmVyID0gdGhpcy5idWZmZXI7XG5cbiAgICBpZiAocmVxdWVzdGVkIDw9IGJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYnVmZmVyO1xuICAgIH1cblxuICAgIGxldCBzaXplID0gdGhpcy5taW5CdWZmZXJMZW5ndGg7XG5cbiAgICB3aGlsZSAoc2l6ZSA8IHJlcXVlc3RlZCkge1xuICAgICAgc2l6ZSAqPSAyO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlcjIgPSBuZXcgVWludDhBcnJheShzaXplKTtcbiAgICBidWZmZXIyLnNldChidWZmZXIpO1xuICAgIHJldHVybiB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjI7XG4gIH1cblxuICBnZXRCeXRlKCkge1xuICAgIGNvbnN0IHBvcyA9IHRoaXMucG9zO1xuXG4gICAgd2hpbGUgKHRoaXMuYnVmZmVyTGVuZ3RoIDw9IHBvcykge1xuICAgICAgaWYgKHRoaXMuZW9mKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZWFkQmxvY2soKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5wb3MrK107XG4gIH1cblxuICBnZXRCeXRlcyhsZW5ndGgsIGZvcmNlQ2xhbXBlZCA9IGZhbHNlKSB7XG4gICAgY29uc3QgcG9zID0gdGhpcy5wb3M7XG4gICAgbGV0IGVuZDtcblxuICAgIGlmIChsZW5ndGgpIHtcbiAgICAgIHRoaXMuZW5zdXJlQnVmZmVyKHBvcyArIGxlbmd0aCk7XG4gICAgICBlbmQgPSBwb3MgKyBsZW5ndGg7XG5cbiAgICAgIHdoaWxlICghdGhpcy5lb2YgJiYgdGhpcy5idWZmZXJMZW5ndGggPCBlbmQpIHtcbiAgICAgICAgdGhpcy5yZWFkQmxvY2soKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYnVmRW5kID0gdGhpcy5idWZmZXJMZW5ndGg7XG5cbiAgICAgIGlmIChlbmQgPiBidWZFbmQpIHtcbiAgICAgICAgZW5kID0gYnVmRW5kO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB3aGlsZSAoIXRoaXMuZW9mKSB7XG4gICAgICAgIHRoaXMucmVhZEJsb2NrKCk7XG4gICAgICB9XG5cbiAgICAgIGVuZCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuICAgIH1cblxuICAgIHRoaXMucG9zID0gZW5kO1xuICAgIGNvbnN0IHN1YmFycmF5ID0gdGhpcy5idWZmZXIuc3ViYXJyYXkocG9zLCBlbmQpO1xuICAgIHJldHVybiBmb3JjZUNsYW1wZWQgJiYgIShzdWJhcnJheSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSA/IG5ldyBVaW50OENsYW1wZWRBcnJheShzdWJhcnJheSkgOiBzdWJhcnJheTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMucG9zID0gMDtcbiAgfVxuXG4gIG1ha2VTdWJTdHJlYW0oc3RhcnQsIGxlbmd0aCwgZGljdCA9IG51bGwpIHtcbiAgICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHdoaWxlICghdGhpcy5lb2YpIHtcbiAgICAgICAgdGhpcy5yZWFkQmxvY2soKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBsZW5ndGg7XG5cbiAgICAgIHdoaWxlICh0aGlzLmJ1ZmZlckxlbmd0aCA8PSBlbmQgJiYgIXRoaXMuZW9mKSB7XG4gICAgICAgIHRoaXMucmVhZEJsb2NrKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBfc3RyZWFtLlN0cmVhbSh0aGlzLmJ1ZmZlciwgc3RhcnQsIGxlbmd0aCwgZGljdCk7XG4gIH1cblxuICBnZXRCYXNlU3RyZWFtcygpIHtcbiAgICByZXR1cm4gdGhpcy5zdHIgPyB0aGlzLnN0ci5nZXRCYXNlU3RyZWFtcygpIDogbnVsbDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuRGVjb2RlU3RyZWFtID0gRGVjb2RlU3RyZWFtO1xuXG5jbGFzcyBTdHJlYW1zU2VxdWVuY2VTdHJlYW0gZXh0ZW5kcyBEZWNvZGVTdHJlYW0ge1xuICBjb25zdHJ1Y3RvcihzdHJlYW1zLCBvbkVycm9yID0gbnVsbCkge1xuICAgIGxldCBtYXliZUxlbmd0aCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IHN0cmVhbSBvZiBzdHJlYW1zKSB7XG4gICAgICBtYXliZUxlbmd0aCArPSBzdHJlYW0gaW5zdGFuY2VvZiBEZWNvZGVTdHJlYW0gPyBzdHJlYW0uX3Jhd01pbkJ1ZmZlckxlbmd0aCA6IHN0cmVhbS5sZW5ndGg7XG4gICAgfVxuXG4gICAgc3VwZXIobWF5YmVMZW5ndGgpO1xuICAgIHRoaXMuc3RyZWFtcyA9IHN0cmVhbXM7XG4gICAgdGhpcy5fb25FcnJvciA9IG9uRXJyb3I7XG4gIH1cblxuICByZWFkQmxvY2soKSB7XG4gICAgY29uc3Qgc3RyZWFtcyA9IHRoaXMuc3RyZWFtcztcblxuICAgIGlmIChzdHJlYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0cmVhbSA9IHN0cmVhbXMuc2hpZnQoKTtcbiAgICBsZXQgY2h1bms7XG5cbiAgICB0cnkge1xuICAgICAgY2h1bmsgPSBzdHJlYW0uZ2V0Qnl0ZXMoKTtcbiAgICB9IGNhdGNoIChyZWFzb24pIHtcbiAgICAgIGlmICh0aGlzLl9vbkVycm9yKSB7XG4gICAgICAgIHRoaXMuX29uRXJyb3IocmVhc29uLCBzdHJlYW0uZGljdCAmJiBzdHJlYW0uZGljdC5vYmpJZCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyByZWFzb247XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyTGVuZ3RoID0gdGhpcy5idWZmZXJMZW5ndGg7XG4gICAgY29uc3QgbmV3TGVuZ3RoID0gYnVmZmVyTGVuZ3RoICsgY2h1bmsubGVuZ3RoO1xuICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKG5ld0xlbmd0aCk7XG4gICAgYnVmZmVyLnNldChjaHVuaywgYnVmZmVyTGVuZ3RoKTtcbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IG5ld0xlbmd0aDtcbiAgfVxuXG4gIGdldEJhc2VTdHJlYW1zKCkge1xuICAgIGNvbnN0IGJhc2VTdHJlYW1zQnVmID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHN0cmVhbSBvZiB0aGlzLnN0cmVhbXMpIHtcbiAgICAgIGNvbnN0IGJhc2VTdHJlYW1zID0gc3RyZWFtLmdldEJhc2VTdHJlYW1zKCk7XG5cbiAgICAgIGlmIChiYXNlU3RyZWFtcykge1xuICAgICAgICBiYXNlU3RyZWFtc0J1Zi5wdXNoKC4uLmJhc2VTdHJlYW1zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVN0cmVhbXNCdWYubGVuZ3RoID4gMCA/IGJhc2VTdHJlYW1zQnVmIDogbnVsbDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuU3RyZWFtc1NlcXVlbmNlU3RyZWFtID0gU3RyZWFtc1NlcXVlbmNlU3RyZWFtO1xuXG4vKioqLyB9KSxcbi8qIDMwICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLkFzY2lpSGV4U3RyZWFtID0gdm9pZCAwO1xuXG52YXIgX2RlY29kZV9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI5KTtcblxuY2xhc3MgQXNjaWlIZXhTdHJlYW0gZXh0ZW5kcyBfZGVjb2RlX3N0cmVhbS5EZWNvZGVTdHJlYW0ge1xuICBjb25zdHJ1Y3RvcihzdHIsIG1heWJlTGVuZ3RoKSB7XG4gICAgaWYgKG1heWJlTGVuZ3RoKSB7XG4gICAgICBtYXliZUxlbmd0aCAqPSAwLjU7XG4gICAgfVxuXG4gICAgc3VwZXIobWF5YmVMZW5ndGgpO1xuICAgIHRoaXMuc3RyID0gc3RyO1xuICAgIHRoaXMuZGljdCA9IHN0ci5kaWN0O1xuICAgIHRoaXMuZmlyc3REaWdpdCA9IC0xO1xuICB9XG5cbiAgcmVhZEJsb2NrKCkge1xuICAgIGNvbnN0IFVQU1RSRUFNX0JMT0NLX1NJWkUgPSA4MDAwO1xuICAgIGNvbnN0IGJ5dGVzID0gdGhpcy5zdHIuZ2V0Qnl0ZXMoVVBTVFJFQU1fQkxPQ0tfU0laRSk7XG5cbiAgICBpZiAoIWJ5dGVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1heERlY29kZUxlbmd0aCA9IGJ5dGVzLmxlbmd0aCArIDEgPj4gMTtcbiAgICBjb25zdCBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCArIG1heERlY29kZUxlbmd0aCk7XG4gICAgbGV0IGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuICAgIGxldCBmaXJzdERpZ2l0ID0gdGhpcy5maXJzdERpZ2l0O1xuXG4gICAgZm9yIChjb25zdCBjaCBvZiBieXRlcykge1xuICAgICAgbGV0IGRpZ2l0O1xuXG4gICAgICBpZiAoY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM5KSB7XG4gICAgICAgIGRpZ2l0ID0gY2ggJiAweDBmO1xuICAgICAgfSBlbHNlIGlmIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NDYgfHwgY2ggPj0gMHg2MSAmJiBjaCA8PSAweDY2KSB7XG4gICAgICAgIGRpZ2l0ID0gKGNoICYgMHgwZikgKyA5O1xuICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgzZSkge1xuICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaXJzdERpZ2l0IDwgMCkge1xuICAgICAgICBmaXJzdERpZ2l0ID0gZGlnaXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoKytdID0gZmlyc3REaWdpdCA8PCA0IHwgZGlnaXQ7XG4gICAgICAgIGZpcnN0RGlnaXQgPSAtMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZmlyc3REaWdpdCA+PSAwICYmIHRoaXMuZW9mKSB7XG4gICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoKytdID0gZmlyc3REaWdpdCA8PCA0O1xuICAgICAgZmlyc3REaWdpdCA9IC0xO1xuICAgIH1cblxuICAgIHRoaXMuZmlyc3REaWdpdCA9IGZpcnN0RGlnaXQ7XG4gICAgdGhpcy5idWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGg7XG4gIH1cblxufVxuXG5leHBvcnRzLkFzY2lpSGV4U3RyZWFtID0gQXNjaWlIZXhTdHJlYW07XG5cbi8qKiovIH0pLFxuLyogMzEgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuQ0NJVFRGYXhTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfY2NpdHQgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDMyKTtcblxudmFyIF9kZWNvZGVfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygyOSk7XG5cbmNsYXNzIENDSVRURmF4U3RyZWFtIGV4dGVuZHMgX2RlY29kZV9zdHJlYW0uRGVjb2RlU3RyZWFtIHtcbiAgY29uc3RydWN0b3Ioc3RyLCBtYXliZUxlbmd0aCwgcGFyYW1zKSB7XG4gICAgc3VwZXIobWF5YmVMZW5ndGgpO1xuICAgIHRoaXMuc3RyID0gc3RyO1xuICAgIHRoaXMuZGljdCA9IHN0ci5kaWN0O1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShwYXJhbXMpKSB7XG4gICAgICBwYXJhbXMgPSBfcHJpbWl0aXZlcy5EaWN0LmVtcHR5O1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZSA9IHtcbiAgICAgIG5leHQoKSB7XG4gICAgICAgIHJldHVybiBzdHIuZ2V0Qnl0ZSgpO1xuICAgICAgfVxuXG4gICAgfTtcbiAgICB0aGlzLmNjaXR0RmF4RGVjb2RlciA9IG5ldyBfY2NpdHQuQ0NJVFRGYXhEZWNvZGVyKHNvdXJjZSwge1xuICAgICAgSzogcGFyYW1zLmdldChcIktcIiksXG4gICAgICBFbmRPZkxpbmU6IHBhcmFtcy5nZXQoXCJFbmRPZkxpbmVcIiksXG4gICAgICBFbmNvZGVkQnl0ZUFsaWduOiBwYXJhbXMuZ2V0KFwiRW5jb2RlZEJ5dGVBbGlnblwiKSxcbiAgICAgIENvbHVtbnM6IHBhcmFtcy5nZXQoXCJDb2x1bW5zXCIpLFxuICAgICAgUm93czogcGFyYW1zLmdldChcIlJvd3NcIiksXG4gICAgICBFbmRPZkJsb2NrOiBwYXJhbXMuZ2V0KFwiRW5kT2ZCbG9ja1wiKSxcbiAgICAgIEJsYWNrSXMxOiBwYXJhbXMuZ2V0KFwiQmxhY2tJczFcIilcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRCbG9jaygpIHtcbiAgICB3aGlsZSAoIXRoaXMuZW9mKSB7XG4gICAgICBjb25zdCBjID0gdGhpcy5jY2l0dEZheERlY29kZXIucmVhZE5leHRDaGFyKCk7XG5cbiAgICAgIGlmIChjID09PSAtMSkge1xuICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGggKyAxKTtcbiAgICAgIHRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyTGVuZ3RoKytdID0gYztcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnRzLkNDSVRURmF4U3RyZWFtID0gQ0NJVFRGYXhTdHJlYW07XG5cbi8qKiovIH0pLFxuLyogMzIgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuQ0NJVFRGYXhEZWNvZGVyID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jb25zdCBjY2l0dEVPTCA9IC0yO1xuY29uc3QgY2NpdHRFT0YgPSAtMTtcbmNvbnN0IHR3b0RpbVBhc3MgPSAwO1xuY29uc3QgdHdvRGltSG9yaXogPSAxO1xuY29uc3QgdHdvRGltVmVydDAgPSAyO1xuY29uc3QgdHdvRGltVmVydFIxID0gMztcbmNvbnN0IHR3b0RpbVZlcnRMMSA9IDQ7XG5jb25zdCB0d29EaW1WZXJ0UjIgPSA1O1xuY29uc3QgdHdvRGltVmVydEwyID0gNjtcbmNvbnN0IHR3b0RpbVZlcnRSMyA9IDc7XG5jb25zdCB0d29EaW1WZXJ0TDMgPSA4O1xuY29uc3QgdHdvRGltVGFibGUgPSBbWy0xLCAtMV0sIFstMSwgLTFdLCBbNywgdHdvRGltVmVydEwzXSwgWzcsIHR3b0RpbVZlcnRSM10sIFs2LCB0d29EaW1WZXJ0TDJdLCBbNiwgdHdvRGltVmVydEwyXSwgWzYsIHR3b0RpbVZlcnRSMl0sIFs2LCB0d29EaW1WZXJ0UjJdLCBbNCwgdHdvRGltUGFzc10sIFs0LCB0d29EaW1QYXNzXSwgWzQsIHR3b0RpbVBhc3NdLCBbNCwgdHdvRGltUGFzc10sIFs0LCB0d29EaW1QYXNzXSwgWzQsIHR3b0RpbVBhc3NdLCBbNCwgdHdvRGltUGFzc10sIFs0LCB0d29EaW1QYXNzXSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdXTtcbmNvbnN0IHdoaXRlVGFibGUxID0gW1stMSwgLTFdLCBbMTIsIGNjaXR0RU9MXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbMTEsIDE3OTJdLCBbMTEsIDE3OTJdLCBbMTIsIDE5ODRdLCBbMTIsIDIwNDhdLCBbMTIsIDIxMTJdLCBbMTIsIDIxNzZdLCBbMTIsIDIyNDBdLCBbMTIsIDIzMDRdLCBbMTEsIDE4NTZdLCBbMTEsIDE4NTZdLCBbMTEsIDE5MjBdLCBbMTEsIDE5MjBdLCBbMTIsIDIzNjhdLCBbMTIsIDI0MzJdLCBbMTIsIDI0OTZdLCBbMTIsIDI1NjBdXTtcbmNvbnN0IHdoaXRlVGFibGUyID0gW1stMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbOCwgMjldLCBbOCwgMjldLCBbOCwgMzBdLCBbOCwgMzBdLCBbOCwgNDVdLCBbOCwgNDVdLCBbOCwgNDZdLCBbOCwgNDZdLCBbNywgMjJdLCBbNywgMjJdLCBbNywgMjJdLCBbNywgMjJdLCBbNywgMjNdLCBbNywgMjNdLCBbNywgMjNdLCBbNywgMjNdLCBbOCwgNDddLCBbOCwgNDddLCBbOCwgNDhdLCBbOCwgNDhdLCBbNiwgMTNdLCBbNiwgMTNdLCBbNiwgMTNdLCBbNiwgMTNdLCBbNiwgMTNdLCBbNiwgMTNdLCBbNiwgMTNdLCBbNiwgMTNdLCBbNywgMjBdLCBbNywgMjBdLCBbNywgMjBdLCBbNywgMjBdLCBbOCwgMzNdLCBbOCwgMzNdLCBbOCwgMzRdLCBbOCwgMzRdLCBbOCwgMzVdLCBbOCwgMzVdLCBbOCwgMzZdLCBbOCwgMzZdLCBbOCwgMzddLCBbOCwgMzddLCBbOCwgMzhdLCBbOCwgMzhdLCBbNywgMTldLCBbNywgMTldLCBbNywgMTldLCBbNywgMTldLCBbOCwgMzFdLCBbOCwgMzFdLCBbOCwgMzJdLCBbOCwgMzJdLCBbNiwgMV0sIFs2LCAxXSwgWzYsIDFdLCBbNiwgMV0sIFs2LCAxXSwgWzYsIDFdLCBbNiwgMV0sIFs2LCAxXSwgWzYsIDEyXSwgWzYsIDEyXSwgWzYsIDEyXSwgWzYsIDEyXSwgWzYsIDEyXSwgWzYsIDEyXSwgWzYsIDEyXSwgWzYsIDEyXSwgWzgsIDUzXSwgWzgsIDUzXSwgWzgsIDU0XSwgWzgsIDU0XSwgWzcsIDI2XSwgWzcsIDI2XSwgWzcsIDI2XSwgWzcsIDI2XSwgWzgsIDM5XSwgWzgsIDM5XSwgWzgsIDQwXSwgWzgsIDQwXSwgWzgsIDQxXSwgWzgsIDQxXSwgWzgsIDQyXSwgWzgsIDQyXSwgWzgsIDQzXSwgWzgsIDQzXSwgWzgsIDQ0XSwgWzgsIDQ0XSwgWzcsIDIxXSwgWzcsIDIxXSwgWzcsIDIxXSwgWzcsIDIxXSwgWzcsIDI4XSwgWzcsIDI4XSwgWzcsIDI4XSwgWzcsIDI4XSwgWzgsIDYxXSwgWzgsIDYxXSwgWzgsIDYyXSwgWzgsIDYyXSwgWzgsIDYzXSwgWzgsIDYzXSwgWzgsIDBdLCBbOCwgMF0sIFs4LCAzMjBdLCBbOCwgMzIwXSwgWzgsIDM4NF0sIFs4LCAzODRdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNywgMjddLCBbNywgMjddLCBbNywgMjddLCBbNywgMjddLCBbOCwgNTldLCBbOCwgNTldLCBbOCwgNjBdLCBbOCwgNjBdLCBbOSwgMTQ3Ml0sIFs5LCAxNTM2XSwgWzksIDE2MDBdLCBbOSwgMTcyOF0sIFs3LCAxOF0sIFs3LCAxOF0sIFs3LCAxOF0sIFs3LCAxOF0sIFs3LCAyNF0sIFs3LCAyNF0sIFs3LCAyNF0sIFs3LCAyNF0sIFs4LCA0OV0sIFs4LCA0OV0sIFs4LCA1MF0sIFs4LCA1MF0sIFs4LCA1MV0sIFs4LCA1MV0sIFs4LCA1Ml0sIFs4LCA1Ml0sIFs3LCAyNV0sIFs3LCAyNV0sIFs3LCAyNV0sIFs3LCAyNV0sIFs4LCA1NV0sIFs4LCA1NV0sIFs4LCA1Nl0sIFs4LCA1Nl0sIFs4LCA1N10sIFs4LCA1N10sIFs4LCA1OF0sIFs4LCA1OF0sIFs2LCAxOTJdLCBbNiwgMTkyXSwgWzYsIDE5Ml0sIFs2LCAxOTJdLCBbNiwgMTkyXSwgWzYsIDE5Ml0sIFs2LCAxOTJdLCBbNiwgMTkyXSwgWzYsIDE2NjRdLCBbNiwgMTY2NF0sIFs2LCAxNjY0XSwgWzYsIDE2NjRdLCBbNiwgMTY2NF0sIFs2LCAxNjY0XSwgWzYsIDE2NjRdLCBbNiwgMTY2NF0sIFs4LCA0NDhdLCBbOCwgNDQ4XSwgWzgsIDUxMl0sIFs4LCA1MTJdLCBbOSwgNzA0XSwgWzksIDc2OF0sIFs4LCA2NDBdLCBbOCwgNjQwXSwgWzgsIDU3Nl0sIFs4LCA1NzZdLCBbOSwgODMyXSwgWzksIDg5Nl0sIFs5LCA5NjBdLCBbOSwgMTAyNF0sIFs5LCAxMDg4XSwgWzksIDExNTJdLCBbOSwgMTIxNl0sIFs5LCAxMjgwXSwgWzksIDEzNDRdLCBbOSwgMTQwOF0sIFs3LCAyNTZdLCBbNywgMjU2XSwgWzcsIDI1Nl0sIFs3LCAyNTZdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzYsIDE2XSwgWzYsIDE2XSwgWzYsIDE2XSwgWzYsIDE2XSwgWzYsIDE2XSwgWzYsIDE2XSwgWzYsIDE2XSwgWzYsIDE2XSwgWzYsIDE3XSwgWzYsIDE3XSwgWzYsIDE3XSwgWzYsIDE3XSwgWzYsIDE3XSwgWzYsIDE3XSwgWzYsIDE3XSwgWzYsIDE3XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNiwgMTRdLCBbNiwgMTRdLCBbNiwgMTRdLCBbNiwgMTRdLCBbNiwgMTRdLCBbNiwgMTRdLCBbNiwgMTRdLCBbNiwgMTRdLCBbNiwgMTVdLCBbNiwgMTVdLCBbNiwgMTVdLCBbNiwgMTVdLCBbNiwgMTVdLCBbNiwgMTVdLCBbNiwgMTVdLCBbNiwgMTVdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN11dO1xuY29uc3QgYmxhY2tUYWJsZTEgPSBbWy0xLCAtMV0sIFstMSwgLTFdLCBbMTIsIGNjaXR0RU9MXSwgWzEyLCBjY2l0dEVPTF0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbMTEsIDE3OTJdLCBbMTEsIDE3OTJdLCBbMTEsIDE3OTJdLCBbMTEsIDE3OTJdLCBbMTIsIDE5ODRdLCBbMTIsIDE5ODRdLCBbMTIsIDIwNDhdLCBbMTIsIDIwNDhdLCBbMTIsIDIxMTJdLCBbMTIsIDIxMTJdLCBbMTIsIDIxNzZdLCBbMTIsIDIxNzZdLCBbMTIsIDIyNDBdLCBbMTIsIDIyNDBdLCBbMTIsIDIzMDRdLCBbMTIsIDIzMDRdLCBbMTEsIDE4NTZdLCBbMTEsIDE4NTZdLCBbMTEsIDE4NTZdLCBbMTEsIDE4NTZdLCBbMTEsIDE5MjBdLCBbMTEsIDE5MjBdLCBbMTEsIDE5MjBdLCBbMTEsIDE5MjBdLCBbMTIsIDIzNjhdLCBbMTIsIDIzNjhdLCBbMTIsIDI0MzJdLCBbMTIsIDI0MzJdLCBbMTIsIDI0OTZdLCBbMTIsIDI0OTZdLCBbMTIsIDI1NjBdLCBbMTIsIDI1NjBdLCBbMTAsIDE4XSwgWzEwLCAxOF0sIFsxMCwgMThdLCBbMTAsIDE4XSwgWzEwLCAxOF0sIFsxMCwgMThdLCBbMTAsIDE4XSwgWzEwLCAxOF0sIFsxMiwgNTJdLCBbMTIsIDUyXSwgWzEzLCA2NDBdLCBbMTMsIDcwNF0sIFsxMywgNzY4XSwgWzEzLCA4MzJdLCBbMTIsIDU1XSwgWzEyLCA1NV0sIFsxMiwgNTZdLCBbMTIsIDU2XSwgWzEzLCAxMjgwXSwgWzEzLCAxMzQ0XSwgWzEzLCAxNDA4XSwgWzEzLCAxNDcyXSwgWzEyLCA1OV0sIFsxMiwgNTldLCBbMTIsIDYwXSwgWzEyLCA2MF0sIFsxMywgMTUzNl0sIFsxMywgMTYwMF0sIFsxMSwgMjRdLCBbMTEsIDI0XSwgWzExLCAyNF0sIFsxMSwgMjRdLCBbMTEsIDI1XSwgWzExLCAyNV0sIFsxMSwgMjVdLCBbMTEsIDI1XSwgWzEzLCAxNjY0XSwgWzEzLCAxNzI4XSwgWzEyLCAzMjBdLCBbMTIsIDMyMF0sIFsxMiwgMzg0XSwgWzEyLCAzODRdLCBbMTIsIDQ0OF0sIFsxMiwgNDQ4XSwgWzEzLCA1MTJdLCBbMTMsIDU3Nl0sIFsxMiwgNTNdLCBbMTIsIDUzXSwgWzEyLCA1NF0sIFsxMiwgNTRdLCBbMTMsIDg5Nl0sIFsxMywgOTYwXSwgWzEzLCAxMDI0XSwgWzEzLCAxMDg4XSwgWzEzLCAxMTUyXSwgWzEzLCAxMjE2XSwgWzEwLCA2NF0sIFsxMCwgNjRdLCBbMTAsIDY0XSwgWzEwLCA2NF0sIFsxMCwgNjRdLCBbMTAsIDY0XSwgWzEwLCA2NF0sIFsxMCwgNjRdXTtcbmNvbnN0IGJsYWNrVGFibGUyID0gW1s4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFsxMSwgMjNdLCBbMTEsIDIzXSwgWzEyLCA1MF0sIFsxMiwgNTFdLCBbMTIsIDQ0XSwgWzEyLCA0NV0sIFsxMiwgNDZdLCBbMTIsIDQ3XSwgWzEyLCA1N10sIFsxMiwgNThdLCBbMTIsIDYxXSwgWzEyLCAyNTZdLCBbMTAsIDE2XSwgWzEwLCAxNl0sIFsxMCwgMTZdLCBbMTAsIDE2XSwgWzEwLCAxN10sIFsxMCwgMTddLCBbMTAsIDE3XSwgWzEwLCAxN10sIFsxMiwgNDhdLCBbMTIsIDQ5XSwgWzEyLCA2Ml0sIFsxMiwgNjNdLCBbMTIsIDMwXSwgWzEyLCAzMV0sIFsxMiwgMzJdLCBbMTIsIDMzXSwgWzEyLCA0MF0sIFsxMiwgNDFdLCBbMTEsIDIyXSwgWzExLCAyMl0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs5LCAxNV0sIFs5LCAxNV0sIFs5LCAxNV0sIFs5LCAxNV0sIFs5LCAxNV0sIFs5LCAxNV0sIFs5LCAxNV0sIFs5LCAxNV0sIFsxMiwgMTI4XSwgWzEyLCAxOTJdLCBbMTIsIDI2XSwgWzEyLCAyN10sIFsxMiwgMjhdLCBbMTIsIDI5XSwgWzExLCAxOV0sIFsxMSwgMTldLCBbMTEsIDIwXSwgWzExLCAyMF0sIFsxMiwgMzRdLCBbMTIsIDM1XSwgWzEyLCAzNl0sIFsxMiwgMzddLCBbMTIsIDM4XSwgWzEyLCAzOV0sIFsxMSwgMjFdLCBbMTEsIDIxXSwgWzEyLCA0Ml0sIFsxMiwgNDNdLCBbMTAsIDBdLCBbMTAsIDBdLCBbMTAsIDBdLCBbMTAsIDBdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdXTtcbmNvbnN0IGJsYWNrVGFibGUzID0gW1stMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbNiwgOV0sIFs2LCA4XSwgWzUsIDddLCBbNSwgN10sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbMywgMV0sIFszLCAxXSwgWzMsIDFdLCBbMywgMV0sIFszLCAxXSwgWzMsIDFdLCBbMywgMV0sIFszLCAxXSwgWzMsIDRdLCBbMywgNF0sIFszLCA0XSwgWzMsIDRdLCBbMywgNF0sIFszLCA0XSwgWzMsIDRdLCBbMywgNF0sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdXTtcblxuY2xhc3MgQ0NJVFRGYXhEZWNvZGVyIHtcbiAgY29uc3RydWN0b3Ioc291cmNlLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAoIXNvdXJjZSB8fCB0eXBlb2Ygc291cmNlLm5leHQgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDQ0lUVEZheERlY29kZXIgLSBpbnZhbGlkIFwic291cmNlXCIgcGFyYW1ldGVyLicpO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgIHRoaXMuZW9mID0gZmFsc2U7XG4gICAgdGhpcy5lbmNvZGluZyA9IG9wdGlvbnMuSyB8fCAwO1xuICAgIHRoaXMuZW9saW5lID0gb3B0aW9ucy5FbmRPZkxpbmUgfHwgZmFsc2U7XG4gICAgdGhpcy5ieXRlQWxpZ24gPSBvcHRpb25zLkVuY29kZWRCeXRlQWxpZ24gfHwgZmFsc2U7XG4gICAgdGhpcy5jb2x1bW5zID0gb3B0aW9ucy5Db2x1bW5zIHx8IDE3Mjg7XG4gICAgdGhpcy5yb3dzID0gb3B0aW9ucy5Sb3dzIHx8IDA7XG4gICAgbGV0IGVvYmxvY2sgPSBvcHRpb25zLkVuZE9mQmxvY2s7XG5cbiAgICBpZiAoZW9ibG9jayA9PT0gbnVsbCB8fCBlb2Jsb2NrID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVvYmxvY2sgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuZW9ibG9jayA9IGVvYmxvY2s7XG4gICAgdGhpcy5ibGFjayA9IG9wdGlvbnMuQmxhY2tJczEgfHwgZmFsc2U7XG4gICAgdGhpcy5jb2RpbmdMaW5lID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuY29sdW1ucyArIDEpO1xuICAgIHRoaXMucmVmTGluZSA9IG5ldyBVaW50MzJBcnJheSh0aGlzLmNvbHVtbnMgKyAyKTtcbiAgICB0aGlzLmNvZGluZ0xpbmVbMF0gPSB0aGlzLmNvbHVtbnM7XG4gICAgdGhpcy5jb2RpbmdQb3MgPSAwO1xuICAgIHRoaXMucm93ID0gMDtcbiAgICB0aGlzLm5leHRMaW5lMkQgPSB0aGlzLmVuY29kaW5nIDwgMDtcbiAgICB0aGlzLmlucHV0Qml0cyA9IDA7XG4gICAgdGhpcy5pbnB1dEJ1ZiA9IDA7XG4gICAgdGhpcy5vdXRwdXRCaXRzID0gMDtcbiAgICB0aGlzLnJvd3NEb25lID0gZmFsc2U7XG4gICAgbGV0IGNvZGUxO1xuXG4gICAgd2hpbGUgKChjb2RlMSA9IHRoaXMuX2xvb2tCaXRzKDEyKSkgPT09IDApIHtcbiAgICAgIHRoaXMuX2VhdEJpdHMoMSk7XG4gICAgfVxuXG4gICAgaWYgKGNvZGUxID09PSAxKSB7XG4gICAgICB0aGlzLl9lYXRCaXRzKDEyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbmNvZGluZyA+IDApIHtcbiAgICAgIHRoaXMubmV4dExpbmUyRCA9ICF0aGlzLl9sb29rQml0cygxKTtcblxuICAgICAgdGhpcy5fZWF0Qml0cygxKTtcbiAgICB9XG4gIH1cblxuICByZWFkTmV4dENoYXIoKSB7XG4gICAgaWYgKHRoaXMuZW9mKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgY29uc3QgcmVmTGluZSA9IHRoaXMucmVmTGluZTtcbiAgICBjb25zdCBjb2RpbmdMaW5lID0gdGhpcy5jb2RpbmdMaW5lO1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG4gICAgbGV0IHJlZlBvcywgYmxhY2tQaXhlbHMsIGJpdHMsIGk7XG5cbiAgICBpZiAodGhpcy5vdXRwdXRCaXRzID09PSAwKSB7XG4gICAgICBpZiAodGhpcy5yb3dzRG9uZSkge1xuICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmVvZikge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZXJyID0gZmFsc2U7XG4gICAgICBsZXQgY29kZTEsIGNvZGUyLCBjb2RlMztcblxuICAgICAgaWYgKHRoaXMubmV4dExpbmUyRCkge1xuICAgICAgICBmb3IgKGkgPSAwOyBjb2RpbmdMaW5lW2ldIDwgY29sdW1uczsgKytpKSB7XG4gICAgICAgICAgcmVmTGluZVtpXSA9IGNvZGluZ0xpbmVbaV07XG4gICAgICAgIH1cblxuICAgICAgICByZWZMaW5lW2krK10gPSBjb2x1bW5zO1xuICAgICAgICByZWZMaW5lW2ldID0gY29sdW1ucztcbiAgICAgICAgY29kaW5nTGluZVswXSA9IDA7XG4gICAgICAgIHRoaXMuY29kaW5nUG9zID0gMDtcbiAgICAgICAgcmVmUG9zID0gMDtcbiAgICAgICAgYmxhY2tQaXhlbHMgPSAwO1xuXG4gICAgICAgIHdoaWxlIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICBjb2RlMSA9IHRoaXMuX2dldFR3b0RpbUNvZGUoKTtcblxuICAgICAgICAgIHN3aXRjaCAoY29kZTEpIHtcbiAgICAgICAgICAgIGNhc2UgdHdvRGltUGFzczpcbiAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzKHJlZkxpbmVbcmVmUG9zICsgMV0sIGJsYWNrUGl4ZWxzKTtcblxuICAgICAgICAgICAgICBpZiAocmVmTGluZVtyZWZQb3MgKyAxXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIHR3b0RpbUhvcml6OlxuICAgICAgICAgICAgICBjb2RlMSA9IGNvZGUyID0gMDtcblxuICAgICAgICAgICAgICBpZiAoYmxhY2tQaXhlbHMpIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICBjb2RlMSArPSBjb2RlMyA9IHRoaXMuX2dldEJsYWNrQ29kZSgpO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNvZGUzID49IDY0KTtcblxuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgIGNvZGUyICs9IGNvZGUzID0gdGhpcy5fZ2V0V2hpdGVDb2RlKCk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoY29kZTMgPj0gNjQpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgIGNvZGUxICs9IGNvZGUzID0gdGhpcy5fZ2V0V2hpdGVDb2RlKCk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoY29kZTMgPj0gNjQpO1xuXG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgY29kZTIgKz0gY29kZTMgPSB0aGlzLl9nZXRCbGFja0NvZGUoKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChjb2RlMyA+PSA2NCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gKyBjb2RlMSwgYmxhY2tQaXhlbHMpO1xuXG4gICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gKyBjb2RlMiwgYmxhY2tQaXhlbHMgXiAxKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgIHJlZlBvcyArPSAyO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydFIzOlxuICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMocmVmTGluZVtyZWZQb3NdICsgMywgYmxhY2tQaXhlbHMpO1xuXG4gICAgICAgICAgICAgIGJsYWNrUGl4ZWxzIF49IDE7XG5cbiAgICAgICAgICAgICAgaWYgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICsrcmVmUG9zO1xuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJlZkxpbmVbcmVmUG9zXSA8PSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSAmJiByZWZMaW5lW3JlZlBvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSB0d29EaW1WZXJ0UjI6XG4gICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhyZWZMaW5lW3JlZlBvc10gKyAyLCBibGFja1BpeGVscyk7XG5cbiAgICAgICAgICAgICAgYmxhY2tQaXhlbHMgXj0gMTtcblxuICAgICAgICAgICAgICBpZiAoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgKytyZWZQb3M7XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocmVmTGluZVtyZWZQb3NdIDw9IGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdICYmIHJlZkxpbmVbcmVmUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgIHJlZlBvcyArPSAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIHR3b0RpbVZlcnRSMTpcbiAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzKHJlZkxpbmVbcmVmUG9zXSArIDEsIGJsYWNrUGl4ZWxzKTtcblxuICAgICAgICAgICAgICBibGFja1BpeGVscyBePSAxO1xuXG4gICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICArK3JlZlBvcztcblxuICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgcmVmUG9zICs9IDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydDA6XG4gICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhyZWZMaW5lW3JlZlBvc10sIGJsYWNrUGl4ZWxzKTtcblxuICAgICAgICAgICAgICBibGFja1BpeGVscyBePSAxO1xuXG4gICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICArK3JlZlBvcztcblxuICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgcmVmUG9zICs9IDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydEwzOlxuICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHNOZWcocmVmTGluZVtyZWZQb3NdIC0gMywgYmxhY2tQaXhlbHMpO1xuXG4gICAgICAgICAgICAgIGJsYWNrUGl4ZWxzIF49IDE7XG5cbiAgICAgICAgICAgICAgaWYgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgIGlmIChyZWZQb3MgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAtLXJlZlBvcztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgKytyZWZQb3M7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJlZkxpbmVbcmVmUG9zXSA8PSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSAmJiByZWZMaW5lW3JlZlBvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSB0d29EaW1WZXJ0TDI6XG4gICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVsc05lZyhyZWZMaW5lW3JlZlBvc10gLSAyLCBibGFja1BpeGVscyk7XG5cbiAgICAgICAgICAgICAgYmxhY2tQaXhlbHMgXj0gMTtcblxuICAgICAgICAgICAgICBpZiAoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZlBvcyA+IDApIHtcbiAgICAgICAgICAgICAgICAgIC0tcmVmUG9zO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICArK3JlZlBvcztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocmVmTGluZVtyZWZQb3NdIDw9IGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdICYmIHJlZkxpbmVbcmVmUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgIHJlZlBvcyArPSAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIHR3b0RpbVZlcnRMMTpcbiAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzTmVnKHJlZkxpbmVbcmVmUG9zXSAtIDEsIGJsYWNrUGl4ZWxzKTtcblxuICAgICAgICAgICAgICBibGFja1BpeGVscyBePSAxO1xuXG4gICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVmUG9zID4gMCkge1xuICAgICAgICAgICAgICAgICAgLS1yZWZQb3M7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICsrcmVmUG9zO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgcmVmUG9zICs9IDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgY2NpdHRFT0Y6XG4gICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhjb2x1bW5zLCAwKTtcblxuICAgICAgICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJiYWQgMmQgY29kZVwiKTtcblxuICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMoY29sdW1ucywgMCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5lcnIgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29kaW5nTGluZVswXSA9IDA7XG4gICAgICAgIHRoaXMuY29kaW5nUG9zID0gMDtcbiAgICAgICAgYmxhY2tQaXhlbHMgPSAwO1xuXG4gICAgICAgIHdoaWxlIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICBjb2RlMSA9IDA7XG5cbiAgICAgICAgICBpZiAoYmxhY2tQaXhlbHMpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgY29kZTEgKz0gY29kZTMgPSB0aGlzLl9nZXRCbGFja0NvZGUoKTtcbiAgICAgICAgICAgIH0gd2hpbGUgKGNvZGUzID49IDY0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBjb2RlMSArPSBjb2RlMyA9IHRoaXMuX2dldFdoaXRlQ29kZSgpO1xuICAgICAgICAgICAgfSB3aGlsZSAoY29kZTMgPj0gNjQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSArIGNvZGUxLCBibGFja1BpeGVscyk7XG5cbiAgICAgICAgICBibGFja1BpeGVscyBePSAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCBnb3RFT0wgPSBmYWxzZTtcblxuICAgICAgaWYgKHRoaXMuYnl0ZUFsaWduKSB7XG4gICAgICAgIHRoaXMuaW5wdXRCaXRzICY9IH43O1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuZW9ibG9jayAmJiB0aGlzLnJvdyA9PT0gdGhpcy5yb3dzIC0gMSkge1xuICAgICAgICB0aGlzLnJvd3NEb25lID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvZGUxID0gdGhpcy5fbG9va0JpdHMoMTIpO1xuXG4gICAgICAgIGlmICh0aGlzLmVvbGluZSkge1xuICAgICAgICAgIHdoaWxlIChjb2RlMSAhPT0gY2NpdHRFT0YgJiYgY29kZTEgIT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMSk7XG5cbiAgICAgICAgICAgIGNvZGUxID0gdGhpcy5fbG9va0JpdHMoMTIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aGlsZSAoY29kZTEgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMSk7XG5cbiAgICAgICAgICAgIGNvZGUxID0gdGhpcy5fbG9va0JpdHMoMTIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2RlMSA9PT0gMSkge1xuICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMTIpO1xuXG4gICAgICAgICAgZ290RU9MID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2RlMSA9PT0gY2NpdHRFT0YpIHtcbiAgICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLmVvZiAmJiB0aGlzLmVuY29kaW5nID4gMCAmJiAhdGhpcy5yb3dzRG9uZSkge1xuICAgICAgICB0aGlzLm5leHRMaW5lMkQgPSAhdGhpcy5fbG9va0JpdHMoMSk7XG5cbiAgICAgICAgdGhpcy5fZWF0Qml0cygxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZW9ibG9jayAmJiBnb3RFT0wgJiYgdGhpcy5ieXRlQWxpZ24pIHtcbiAgICAgICAgY29kZTEgPSB0aGlzLl9sb29rQml0cygxMik7XG5cbiAgICAgICAgaWYgKGNvZGUxID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5fZWF0Qml0cygxMik7XG5cbiAgICAgICAgICBpZiAodGhpcy5lbmNvZGluZyA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2xvb2tCaXRzKDEpO1xuXG4gICAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLmVuY29kaW5nID49IDApIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHtcbiAgICAgICAgICAgICAgY29kZTEgPSB0aGlzLl9sb29rQml0cygxMik7XG5cbiAgICAgICAgICAgICAgaWYgKGNvZGUxICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiYmFkIHJ0YyBjb2RlOiBcIiArIGNvZGUxKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMTIpO1xuXG4gICAgICAgICAgICAgIGlmICh0aGlzLmVuY29kaW5nID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvb2tCaXRzKDEpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0Qml0cygxKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmVyciAmJiB0aGlzLmVvbGluZSkge1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGNvZGUxID0gdGhpcy5fbG9va0JpdHMoMTMpO1xuXG4gICAgICAgICAgaWYgKGNvZGUxID09PSBjY2l0dEVPRikge1xuICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb2RlMSA+PiAxID09PSAxKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZWF0Qml0cygxMik7XG5cbiAgICAgICAgaWYgKHRoaXMuZW5jb2RpbmcgPiAwKSB7XG4gICAgICAgICAgdGhpcy5fZWF0Qml0cygxKTtcblxuICAgICAgICAgIHRoaXMubmV4dExpbmUyRCA9ICEoY29kZTEgJiAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY29kaW5nTGluZVswXSA+IDApIHtcbiAgICAgICAgdGhpcy5vdXRwdXRCaXRzID0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1BvcyA9IDBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdXRwdXRCaXRzID0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1BvcyA9IDFdO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJvdysrO1xuICAgIH1cblxuICAgIGxldCBjO1xuXG4gICAgaWYgKHRoaXMub3V0cHV0Qml0cyA+PSA4KSB7XG4gICAgICBjID0gdGhpcy5jb2RpbmdQb3MgJiAxID8gMCA6IDB4ZmY7XG4gICAgICB0aGlzLm91dHB1dEJpdHMgLT0gODtcblxuICAgICAgaWYgKHRoaXMub3V0cHV0Qml0cyA9PT0gMCAmJiBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgdGhpcy5jb2RpbmdQb3MrKztcbiAgICAgICAgdGhpcy5vdXRwdXRCaXRzID0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gLSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zIC0gMV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJpdHMgPSA4O1xuICAgICAgYyA9IDA7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm91dHB1dEJpdHMgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0ludmFsaWQgL0NDSVRURmF4RGVjb2RlIGRhdGEsIFwib3V0cHV0Qml0c1wiIG11c3QgYmUgYSBudW1iZXIuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vdXRwdXRCaXRzID4gYml0cykge1xuICAgICAgICAgIGMgPDw9IGJpdHM7XG5cbiAgICAgICAgICBpZiAoISh0aGlzLmNvZGluZ1BvcyAmIDEpKSB7XG4gICAgICAgICAgICBjIHw9IDB4ZmYgPj4gOCAtIGJpdHM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5vdXRwdXRCaXRzIC09IGJpdHM7XG4gICAgICAgICAgYml0cyA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYyA8PD0gdGhpcy5vdXRwdXRCaXRzO1xuXG4gICAgICAgICAgaWYgKCEodGhpcy5jb2RpbmdQb3MgJiAxKSkge1xuICAgICAgICAgICAgYyB8PSAweGZmID4+IDggLSB0aGlzLm91dHB1dEJpdHM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYml0cyAtPSB0aGlzLm91dHB1dEJpdHM7XG4gICAgICAgICAgdGhpcy5vdXRwdXRCaXRzID0gMDtcblxuICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuY29kaW5nUG9zKys7XG4gICAgICAgICAgICB0aGlzLm91dHB1dEJpdHMgPSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSAtIGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3MgLSAxXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGJpdHMgPiAwKSB7XG4gICAgICAgICAgICBjIDw8PSBiaXRzO1xuICAgICAgICAgICAgYml0cyA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IHdoaWxlIChiaXRzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5ibGFjaykge1xuICAgICAgYyBePSAweGZmO1xuICAgIH1cblxuICAgIHJldHVybiBjO1xuICB9XG5cbiAgX2FkZFBpeGVscyhhMSwgYmxhY2tQaXhlbHMpIHtcbiAgICBjb25zdCBjb2RpbmdMaW5lID0gdGhpcy5jb2RpbmdMaW5lO1xuICAgIGxldCBjb2RpbmdQb3MgPSB0aGlzLmNvZGluZ1BvcztcblxuICAgIGlmIChhMSA+IGNvZGluZ0xpbmVbY29kaW5nUG9zXSkge1xuICAgICAgaWYgKGExID4gdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICgwLCBfdXRpbC5pbmZvKShcInJvdyBpcyB3cm9uZyBsZW5ndGhcIik7XG4gICAgICAgIHRoaXMuZXJyID0gdHJ1ZTtcbiAgICAgICAgYTEgPSB0aGlzLmNvbHVtbnM7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2RpbmdQb3MgJiAxIF4gYmxhY2tQaXhlbHMpIHtcbiAgICAgICAgKytjb2RpbmdQb3M7XG4gICAgICB9XG5cbiAgICAgIGNvZGluZ0xpbmVbY29kaW5nUG9zXSA9IGExO1xuICAgIH1cblxuICAgIHRoaXMuY29kaW5nUG9zID0gY29kaW5nUG9zO1xuICB9XG5cbiAgX2FkZFBpeGVsc05lZyhhMSwgYmxhY2tQaXhlbHMpIHtcbiAgICBjb25zdCBjb2RpbmdMaW5lID0gdGhpcy5jb2RpbmdMaW5lO1xuICAgIGxldCBjb2RpbmdQb3MgPSB0aGlzLmNvZGluZ1BvcztcblxuICAgIGlmIChhMSA+IGNvZGluZ0xpbmVbY29kaW5nUG9zXSkge1xuICAgICAgaWYgKGExID4gdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICgwLCBfdXRpbC5pbmZvKShcInJvdyBpcyB3cm9uZyBsZW5ndGhcIik7XG4gICAgICAgIHRoaXMuZXJyID0gdHJ1ZTtcbiAgICAgICAgYTEgPSB0aGlzLmNvbHVtbnM7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2RpbmdQb3MgJiAxIF4gYmxhY2tQaXhlbHMpIHtcbiAgICAgICAgKytjb2RpbmdQb3M7XG4gICAgICB9XG5cbiAgICAgIGNvZGluZ0xpbmVbY29kaW5nUG9zXSA9IGExO1xuICAgIH0gZWxzZSBpZiAoYTEgPCBjb2RpbmdMaW5lW2NvZGluZ1Bvc10pIHtcbiAgICAgIGlmIChhMSA8IDApIHtcbiAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiaW52YWxpZCBjb2RlXCIpO1xuICAgICAgICB0aGlzLmVyciA9IHRydWU7XG4gICAgICAgIGExID0gMDtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKGNvZGluZ1BvcyA+IDAgJiYgYTEgPCBjb2RpbmdMaW5lW2NvZGluZ1BvcyAtIDFdKSB7XG4gICAgICAgIC0tY29kaW5nUG9zO1xuICAgICAgfVxuXG4gICAgICBjb2RpbmdMaW5lW2NvZGluZ1Bvc10gPSBhMTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGluZ1BvcyA9IGNvZGluZ1BvcztcbiAgfVxuXG4gIF9maW5kVGFibGVDb2RlKHN0YXJ0LCBlbmQsIHRhYmxlLCBsaW1pdCkge1xuICAgIGNvbnN0IGxpbWl0VmFsdWUgPSBsaW1pdCB8fCAwO1xuXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgKytpKSB7XG4gICAgICBsZXQgY29kZSA9IHRoaXMuX2xvb2tCaXRzKGkpO1xuXG4gICAgICBpZiAoY29kZSA9PT0gY2NpdHRFT0YpIHtcbiAgICAgICAgcmV0dXJuIFt0cnVlLCAxLCBmYWxzZV07XG4gICAgICB9XG5cbiAgICAgIGlmIChpIDwgZW5kKSB7XG4gICAgICAgIGNvZGUgPDw9IGVuZCAtIGk7XG4gICAgICB9XG5cbiAgICAgIGlmICghbGltaXRWYWx1ZSB8fCBjb2RlID49IGxpbWl0VmFsdWUpIHtcbiAgICAgICAgY29uc3QgcCA9IHRhYmxlW2NvZGUgLSBsaW1pdFZhbHVlXTtcblxuICAgICAgICBpZiAocFswXSA9PT0gaSkge1xuICAgICAgICAgIHRoaXMuX2VhdEJpdHMoaSk7XG5cbiAgICAgICAgICByZXR1cm4gW3RydWUsIHBbMV0sIHRydWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtmYWxzZSwgMCwgZmFsc2VdO1xuICB9XG5cbiAgX2dldFR3b0RpbUNvZGUoKSB7XG4gICAgbGV0IGNvZGUgPSAwO1xuICAgIGxldCBwO1xuXG4gICAgaWYgKHRoaXMuZW9ibG9jaykge1xuICAgICAgY29kZSA9IHRoaXMuX2xvb2tCaXRzKDcpO1xuICAgICAgcCA9IHR3b0RpbVRhYmxlW2NvZGVdO1xuXG4gICAgICBpZiAocCAmJiBwWzBdID4gMCkge1xuICAgICAgICB0aGlzLl9lYXRCaXRzKHBbMF0pO1xuXG4gICAgICAgIHJldHVybiBwWzFdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9maW5kVGFibGVDb2RlKDEsIDcsIHR3b0RpbVRhYmxlKTtcblxuICAgICAgaWYgKHJlc3VsdFswXSAmJiByZXN1bHRbMl0pIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFsxXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAoMCwgX3V0aWwuaW5mbykoXCJCYWQgdHdvIGRpbSBjb2RlXCIpO1xuICAgIHJldHVybiBjY2l0dEVPRjtcbiAgfVxuXG4gIF9nZXRXaGl0ZUNvZGUoKSB7XG4gICAgbGV0IGNvZGUgPSAwO1xuICAgIGxldCBwO1xuXG4gICAgaWYgKHRoaXMuZW9ibG9jaykge1xuICAgICAgY29kZSA9IHRoaXMuX2xvb2tCaXRzKDEyKTtcblxuICAgICAgaWYgKGNvZGUgPT09IGNjaXR0RU9GKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29kZSA+PiA1ID09PSAwKSB7XG4gICAgICAgIHAgPSB3aGl0ZVRhYmxlMVtjb2RlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHAgPSB3aGl0ZVRhYmxlMltjb2RlID4+IDNdO1xuICAgICAgfVxuXG4gICAgICBpZiAocFswXSA+IDApIHtcbiAgICAgICAgdGhpcy5fZWF0Qml0cyhwWzBdKTtcblxuICAgICAgICByZXR1cm4gcFsxXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuX2ZpbmRUYWJsZUNvZGUoMSwgOSwgd2hpdGVUYWJsZTIpO1xuXG4gICAgICBpZiAocmVzdWx0WzBdKSB7XG4gICAgICAgIHJldHVybiByZXN1bHRbMV07XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdCA9IHRoaXMuX2ZpbmRUYWJsZUNvZGUoMTEsIDEyLCB3aGl0ZVRhYmxlMSk7XG5cbiAgICAgIGlmIChyZXN1bHRbMF0pIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFsxXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAoMCwgX3V0aWwuaW5mbykoXCJiYWQgd2hpdGUgY29kZVwiKTtcblxuICAgIHRoaXMuX2VhdEJpdHMoMSk7XG5cbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIF9nZXRCbGFja0NvZGUoKSB7XG4gICAgbGV0IGNvZGUsIHA7XG5cbiAgICBpZiAodGhpcy5lb2Jsb2NrKSB7XG4gICAgICBjb2RlID0gdGhpcy5fbG9va0JpdHMoMTMpO1xuXG4gICAgICBpZiAoY29kZSA9PT0gY2NpdHRFT0YpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2RlID4+IDcgPT09IDApIHtcbiAgICAgICAgcCA9IGJsYWNrVGFibGUxW2NvZGVdO1xuICAgICAgfSBlbHNlIGlmIChjb2RlID4+IDkgPT09IDAgJiYgY29kZSA+PiA3ICE9PSAwKSB7XG4gICAgICAgIHAgPSBibGFja1RhYmxlMlsoY29kZSA+PiAxKSAtIDY0XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHAgPSBibGFja1RhYmxlM1tjb2RlID4+IDddO1xuICAgICAgfVxuXG4gICAgICBpZiAocFswXSA+IDApIHtcbiAgICAgICAgdGhpcy5fZWF0Qml0cyhwWzBdKTtcblxuICAgICAgICByZXR1cm4gcFsxXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuX2ZpbmRUYWJsZUNvZGUoMiwgNiwgYmxhY2tUYWJsZTMpO1xuXG4gICAgICBpZiAocmVzdWx0WzBdKSB7XG4gICAgICAgIHJldHVybiByZXN1bHRbMV07XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdCA9IHRoaXMuX2ZpbmRUYWJsZUNvZGUoNywgMTIsIGJsYWNrVGFibGUyLCA2NCk7XG5cbiAgICAgIGlmIChyZXN1bHRbMF0pIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFsxXTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0ID0gdGhpcy5fZmluZFRhYmxlQ29kZSgxMCwgMTMsIGJsYWNrVGFibGUxKTtcblxuICAgICAgaWYgKHJlc3VsdFswXSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0WzFdO1xuICAgICAgfVxuICAgIH1cblxuICAgICgwLCBfdXRpbC5pbmZvKShcImJhZCBibGFjayBjb2RlXCIpO1xuXG4gICAgdGhpcy5fZWF0Qml0cygxKTtcblxuICAgIHJldHVybiAxO1xuICB9XG5cbiAgX2xvb2tCaXRzKG4pIHtcbiAgICBsZXQgYztcblxuICAgIHdoaWxlICh0aGlzLmlucHV0Qml0cyA8IG4pIHtcbiAgICAgIGlmICgoYyA9IHRoaXMuc291cmNlLm5leHQoKSkgPT09IC0xKSB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0Qml0cyA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBjY2l0dEVPRjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0QnVmIDw8IG4gLSB0aGlzLmlucHV0Qml0cyAmIDB4ZmZmZiA+PiAxNiAtIG47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaW5wdXRCdWYgPSB0aGlzLmlucHV0QnVmIDw8IDggfCBjO1xuICAgICAgdGhpcy5pbnB1dEJpdHMgKz0gODtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pbnB1dEJ1ZiA+PiB0aGlzLmlucHV0Qml0cyAtIG4gJiAweGZmZmYgPj4gMTYgLSBuO1xuICB9XG5cbiAgX2VhdEJpdHMobikge1xuICAgIGlmICgodGhpcy5pbnB1dEJpdHMgLT0gbikgPCAwKSB7XG4gICAgICB0aGlzLmlucHV0Qml0cyA9IDA7XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5DQ0lUVEZheERlY29kZXIgPSBDQ0lUVEZheERlY29kZXI7XG5cbi8qKiovIH0pLFxuLyogMzMgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuRmxhdGVTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfZGVjb2RlX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjkpO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jb25zdCBjb2RlTGVuQ29kZU1hcCA9IG5ldyBJbnQzMkFycmF5KFsxNiwgMTcsIDE4LCAwLCA4LCA3LCA5LCA2LCAxMCwgNSwgMTEsIDQsIDEyLCAzLCAxMywgMiwgMTQsIDEsIDE1XSk7XG5jb25zdCBsZW5ndGhEZWNvZGUgPSBuZXcgSW50MzJBcnJheShbMHgwMDAwMywgMHgwMDAwNCwgMHgwMDAwNSwgMHgwMDAwNiwgMHgwMDAwNywgMHgwMDAwOCwgMHgwMDAwOSwgMHgwMDAwYSwgMHgxMDAwYiwgMHgxMDAwZCwgMHgxMDAwZiwgMHgxMDAxMSwgMHgyMDAxMywgMHgyMDAxNywgMHgyMDAxYiwgMHgyMDAxZiwgMHgzMDAyMywgMHgzMDAyYiwgMHgzMDAzMywgMHgzMDAzYiwgMHg0MDA0MywgMHg0MDA1MywgMHg0MDA2MywgMHg0MDA3MywgMHg1MDA4MywgMHg1MDBhMywgMHg1MDBjMywgMHg1MDBlMywgMHgwMDEwMiwgMHgwMDEwMiwgMHgwMDEwMl0pO1xuY29uc3QgZGlzdERlY29kZSA9IG5ldyBJbnQzMkFycmF5KFsweDAwMDAxLCAweDAwMDAyLCAweDAwMDAzLCAweDAwMDA0LCAweDEwMDA1LCAweDEwMDA3LCAweDIwMDA5LCAweDIwMDBkLCAweDMwMDExLCAweDMwMDE5LCAweDQwMDIxLCAweDQwMDMxLCAweDUwMDQxLCAweDUwMDYxLCAweDYwMDgxLCAweDYwMGMxLCAweDcwMTAxLCAweDcwMTgxLCAweDgwMjAxLCAweDgwMzAxLCAweDkwNDAxLCAweDkwNjAxLCAweGEwODAxLCAweGEwYzAxLCAweGIxMDAxLCAweGIxODAxLCAweGMyMDAxLCAweGMzMDAxLCAweGQ0MDAxLCAweGQ2MDAxXSk7XG5jb25zdCBmaXhlZExpdENvZGVUYWIgPSBbbmV3IEludDMyQXJyYXkoWzB4NzAxMDAsIDB4ODAwNTAsIDB4ODAwMTAsIDB4ODAxMTgsIDB4NzAxMTAsIDB4ODAwNzAsIDB4ODAwMzAsIDB4OTAwYzAsIDB4NzAxMDgsIDB4ODAwNjAsIDB4ODAwMjAsIDB4OTAwYTAsIDB4ODAwMDAsIDB4ODAwODAsIDB4ODAwNDAsIDB4OTAwZTAsIDB4NzAxMDQsIDB4ODAwNTgsIDB4ODAwMTgsIDB4OTAwOTAsIDB4NzAxMTQsIDB4ODAwNzgsIDB4ODAwMzgsIDB4OTAwZDAsIDB4NzAxMGMsIDB4ODAwNjgsIDB4ODAwMjgsIDB4OTAwYjAsIDB4ODAwMDgsIDB4ODAwODgsIDB4ODAwNDgsIDB4OTAwZjAsIDB4NzAxMDIsIDB4ODAwNTQsIDB4ODAwMTQsIDB4ODAxMWMsIDB4NzAxMTIsIDB4ODAwNzQsIDB4ODAwMzQsIDB4OTAwYzgsIDB4NzAxMGEsIDB4ODAwNjQsIDB4ODAwMjQsIDB4OTAwYTgsIDB4ODAwMDQsIDB4ODAwODQsIDB4ODAwNDQsIDB4OTAwZTgsIDB4NzAxMDYsIDB4ODAwNWMsIDB4ODAwMWMsIDB4OTAwOTgsIDB4NzAxMTYsIDB4ODAwN2MsIDB4ODAwM2MsIDB4OTAwZDgsIDB4NzAxMGUsIDB4ODAwNmMsIDB4ODAwMmMsIDB4OTAwYjgsIDB4ODAwMGMsIDB4ODAwOGMsIDB4ODAwNGMsIDB4OTAwZjgsIDB4NzAxMDEsIDB4ODAwNTIsIDB4ODAwMTIsIDB4ODAxMWEsIDB4NzAxMTEsIDB4ODAwNzIsIDB4ODAwMzIsIDB4OTAwYzQsIDB4NzAxMDksIDB4ODAwNjIsIDB4ODAwMjIsIDB4OTAwYTQsIDB4ODAwMDIsIDB4ODAwODIsIDB4ODAwNDIsIDB4OTAwZTQsIDB4NzAxMDUsIDB4ODAwNWEsIDB4ODAwMWEsIDB4OTAwOTQsIDB4NzAxMTUsIDB4ODAwN2EsIDB4ODAwM2EsIDB4OTAwZDQsIDB4NzAxMGQsIDB4ODAwNmEsIDB4ODAwMmEsIDB4OTAwYjQsIDB4ODAwMGEsIDB4ODAwOGEsIDB4ODAwNGEsIDB4OTAwZjQsIDB4NzAxMDMsIDB4ODAwNTYsIDB4ODAwMTYsIDB4ODAxMWUsIDB4NzAxMTMsIDB4ODAwNzYsIDB4ODAwMzYsIDB4OTAwY2MsIDB4NzAxMGIsIDB4ODAwNjYsIDB4ODAwMjYsIDB4OTAwYWMsIDB4ODAwMDYsIDB4ODAwODYsIDB4ODAwNDYsIDB4OTAwZWMsIDB4NzAxMDcsIDB4ODAwNWUsIDB4ODAwMWUsIDB4OTAwOWMsIDB4NzAxMTcsIDB4ODAwN2UsIDB4ODAwM2UsIDB4OTAwZGMsIDB4NzAxMGYsIDB4ODAwNmUsIDB4ODAwMmUsIDB4OTAwYmMsIDB4ODAwMGUsIDB4ODAwOGUsIDB4ODAwNGUsIDB4OTAwZmMsIDB4NzAxMDAsIDB4ODAwNTEsIDB4ODAwMTEsIDB4ODAxMTksIDB4NzAxMTAsIDB4ODAwNzEsIDB4ODAwMzEsIDB4OTAwYzIsIDB4NzAxMDgsIDB4ODAwNjEsIDB4ODAwMjEsIDB4OTAwYTIsIDB4ODAwMDEsIDB4ODAwODEsIDB4ODAwNDEsIDB4OTAwZTIsIDB4NzAxMDQsIDB4ODAwNTksIDB4ODAwMTksIDB4OTAwOTIsIDB4NzAxMTQsIDB4ODAwNzksIDB4ODAwMzksIDB4OTAwZDIsIDB4NzAxMGMsIDB4ODAwNjksIDB4ODAwMjksIDB4OTAwYjIsIDB4ODAwMDksIDB4ODAwODksIDB4ODAwNDksIDB4OTAwZjIsIDB4NzAxMDIsIDB4ODAwNTUsIDB4ODAwMTUsIDB4ODAxMWQsIDB4NzAxMTIsIDB4ODAwNzUsIDB4ODAwMzUsIDB4OTAwY2EsIDB4NzAxMGEsIDB4ODAwNjUsIDB4ODAwMjUsIDB4OTAwYWEsIDB4ODAwMDUsIDB4ODAwODUsIDB4ODAwNDUsIDB4OTAwZWEsIDB4NzAxMDYsIDB4ODAwNWQsIDB4ODAwMWQsIDB4OTAwOWEsIDB4NzAxMTYsIDB4ODAwN2QsIDB4ODAwM2QsIDB4OTAwZGEsIDB4NzAxMGUsIDB4ODAwNmQsIDB4ODAwMmQsIDB4OTAwYmEsIDB4ODAwMGQsIDB4ODAwOGQsIDB4ODAwNGQsIDB4OTAwZmEsIDB4NzAxMDEsIDB4ODAwNTMsIDB4ODAwMTMsIDB4ODAxMWIsIDB4NzAxMTEsIDB4ODAwNzMsIDB4ODAwMzMsIDB4OTAwYzYsIDB4NzAxMDksIDB4ODAwNjMsIDB4ODAwMjMsIDB4OTAwYTYsIDB4ODAwMDMsIDB4ODAwODMsIDB4ODAwNDMsIDB4OTAwZTYsIDB4NzAxMDUsIDB4ODAwNWIsIDB4ODAwMWIsIDB4OTAwOTYsIDB4NzAxMTUsIDB4ODAwN2IsIDB4ODAwM2IsIDB4OTAwZDYsIDB4NzAxMGQsIDB4ODAwNmIsIDB4ODAwMmIsIDB4OTAwYjYsIDB4ODAwMGIsIDB4ODAwOGIsIDB4ODAwNGIsIDB4OTAwZjYsIDB4NzAxMDMsIDB4ODAwNTcsIDB4ODAwMTcsIDB4ODAxMWYsIDB4NzAxMTMsIDB4ODAwNzcsIDB4ODAwMzcsIDB4OTAwY2UsIDB4NzAxMGIsIDB4ODAwNjcsIDB4ODAwMjcsIDB4OTAwYWUsIDB4ODAwMDcsIDB4ODAwODcsIDB4ODAwNDcsIDB4OTAwZWUsIDB4NzAxMDcsIDB4ODAwNWYsIDB4ODAwMWYsIDB4OTAwOWUsIDB4NzAxMTcsIDB4ODAwN2YsIDB4ODAwM2YsIDB4OTAwZGUsIDB4NzAxMGYsIDB4ODAwNmYsIDB4ODAwMmYsIDB4OTAwYmUsIDB4ODAwMGYsIDB4ODAwOGYsIDB4ODAwNGYsIDB4OTAwZmUsIDB4NzAxMDAsIDB4ODAwNTAsIDB4ODAwMTAsIDB4ODAxMTgsIDB4NzAxMTAsIDB4ODAwNzAsIDB4ODAwMzAsIDB4OTAwYzEsIDB4NzAxMDgsIDB4ODAwNjAsIDB4ODAwMjAsIDB4OTAwYTEsIDB4ODAwMDAsIDB4ODAwODAsIDB4ODAwNDAsIDB4OTAwZTEsIDB4NzAxMDQsIDB4ODAwNTgsIDB4ODAwMTgsIDB4OTAwOTEsIDB4NzAxMTQsIDB4ODAwNzgsIDB4ODAwMzgsIDB4OTAwZDEsIDB4NzAxMGMsIDB4ODAwNjgsIDB4ODAwMjgsIDB4OTAwYjEsIDB4ODAwMDgsIDB4ODAwODgsIDB4ODAwNDgsIDB4OTAwZjEsIDB4NzAxMDIsIDB4ODAwNTQsIDB4ODAwMTQsIDB4ODAxMWMsIDB4NzAxMTIsIDB4ODAwNzQsIDB4ODAwMzQsIDB4OTAwYzksIDB4NzAxMGEsIDB4ODAwNjQsIDB4ODAwMjQsIDB4OTAwYTksIDB4ODAwMDQsIDB4ODAwODQsIDB4ODAwNDQsIDB4OTAwZTksIDB4NzAxMDYsIDB4ODAwNWMsIDB4ODAwMWMsIDB4OTAwOTksIDB4NzAxMTYsIDB4ODAwN2MsIDB4ODAwM2MsIDB4OTAwZDksIDB4NzAxMGUsIDB4ODAwNmMsIDB4ODAwMmMsIDB4OTAwYjksIDB4ODAwMGMsIDB4ODAwOGMsIDB4ODAwNGMsIDB4OTAwZjksIDB4NzAxMDEsIDB4ODAwNTIsIDB4ODAwMTIsIDB4ODAxMWEsIDB4NzAxMTEsIDB4ODAwNzIsIDB4ODAwMzIsIDB4OTAwYzUsIDB4NzAxMDksIDB4ODAwNjIsIDB4ODAwMjIsIDB4OTAwYTUsIDB4ODAwMDIsIDB4ODAwODIsIDB4ODAwNDIsIDB4OTAwZTUsIDB4NzAxMDUsIDB4ODAwNWEsIDB4ODAwMWEsIDB4OTAwOTUsIDB4NzAxMTUsIDB4ODAwN2EsIDB4ODAwM2EsIDB4OTAwZDUsIDB4NzAxMGQsIDB4ODAwNmEsIDB4ODAwMmEsIDB4OTAwYjUsIDB4ODAwMGEsIDB4ODAwOGEsIDB4ODAwNGEsIDB4OTAwZjUsIDB4NzAxMDMsIDB4ODAwNTYsIDB4ODAwMTYsIDB4ODAxMWUsIDB4NzAxMTMsIDB4ODAwNzYsIDB4ODAwMzYsIDB4OTAwY2QsIDB4NzAxMGIsIDB4ODAwNjYsIDB4ODAwMjYsIDB4OTAwYWQsIDB4ODAwMDYsIDB4ODAwODYsIDB4ODAwNDYsIDB4OTAwZWQsIDB4NzAxMDcsIDB4ODAwNWUsIDB4ODAwMWUsIDB4OTAwOWQsIDB4NzAxMTcsIDB4ODAwN2UsIDB4ODAwM2UsIDB4OTAwZGQsIDB4NzAxMGYsIDB4ODAwNmUsIDB4ODAwMmUsIDB4OTAwYmQsIDB4ODAwMGUsIDB4ODAwOGUsIDB4ODAwNGUsIDB4OTAwZmQsIDB4NzAxMDAsIDB4ODAwNTEsIDB4ODAwMTEsIDB4ODAxMTksIDB4NzAxMTAsIDB4ODAwNzEsIDB4ODAwMzEsIDB4OTAwYzMsIDB4NzAxMDgsIDB4ODAwNjEsIDB4ODAwMjEsIDB4OTAwYTMsIDB4ODAwMDEsIDB4ODAwODEsIDB4ODAwNDEsIDB4OTAwZTMsIDB4NzAxMDQsIDB4ODAwNTksIDB4ODAwMTksIDB4OTAwOTMsIDB4NzAxMTQsIDB4ODAwNzksIDB4ODAwMzksIDB4OTAwZDMsIDB4NzAxMGMsIDB4ODAwNjksIDB4ODAwMjksIDB4OTAwYjMsIDB4ODAwMDksIDB4ODAwODksIDB4ODAwNDksIDB4OTAwZjMsIDB4NzAxMDIsIDB4ODAwNTUsIDB4ODAwMTUsIDB4ODAxMWQsIDB4NzAxMTIsIDB4ODAwNzUsIDB4ODAwMzUsIDB4OTAwY2IsIDB4NzAxMGEsIDB4ODAwNjUsIDB4ODAwMjUsIDB4OTAwYWIsIDB4ODAwMDUsIDB4ODAwODUsIDB4ODAwNDUsIDB4OTAwZWIsIDB4NzAxMDYsIDB4ODAwNWQsIDB4ODAwMWQsIDB4OTAwOWIsIDB4NzAxMTYsIDB4ODAwN2QsIDB4ODAwM2QsIDB4OTAwZGIsIDB4NzAxMGUsIDB4ODAwNmQsIDB4ODAwMmQsIDB4OTAwYmIsIDB4ODAwMGQsIDB4ODAwOGQsIDB4ODAwNGQsIDB4OTAwZmIsIDB4NzAxMDEsIDB4ODAwNTMsIDB4ODAwMTMsIDB4ODAxMWIsIDB4NzAxMTEsIDB4ODAwNzMsIDB4ODAwMzMsIDB4OTAwYzcsIDB4NzAxMDksIDB4ODAwNjMsIDB4ODAwMjMsIDB4OTAwYTcsIDB4ODAwMDMsIDB4ODAwODMsIDB4ODAwNDMsIDB4OTAwZTcsIDB4NzAxMDUsIDB4ODAwNWIsIDB4ODAwMWIsIDB4OTAwOTcsIDB4NzAxMTUsIDB4ODAwN2IsIDB4ODAwM2IsIDB4OTAwZDcsIDB4NzAxMGQsIDB4ODAwNmIsIDB4ODAwMmIsIDB4OTAwYjcsIDB4ODAwMGIsIDB4ODAwOGIsIDB4ODAwNGIsIDB4OTAwZjcsIDB4NzAxMDMsIDB4ODAwNTcsIDB4ODAwMTcsIDB4ODAxMWYsIDB4NzAxMTMsIDB4ODAwNzcsIDB4ODAwMzcsIDB4OTAwY2YsIDB4NzAxMGIsIDB4ODAwNjcsIDB4ODAwMjcsIDB4OTAwYWYsIDB4ODAwMDcsIDB4ODAwODcsIDB4ODAwNDcsIDB4OTAwZWYsIDB4NzAxMDcsIDB4ODAwNWYsIDB4ODAwMWYsIDB4OTAwOWYsIDB4NzAxMTcsIDB4ODAwN2YsIDB4ODAwM2YsIDB4OTAwZGYsIDB4NzAxMGYsIDB4ODAwNmYsIDB4ODAwMmYsIDB4OTAwYmYsIDB4ODAwMGYsIDB4ODAwOGYsIDB4ODAwNGYsIDB4OTAwZmZdKSwgOV07XG5jb25zdCBmaXhlZERpc3RDb2RlVGFiID0gW25ldyBJbnQzMkFycmF5KFsweDUwMDAwLCAweDUwMDEwLCAweDUwMDA4LCAweDUwMDE4LCAweDUwMDA0LCAweDUwMDE0LCAweDUwMDBjLCAweDUwMDFjLCAweDUwMDAyLCAweDUwMDEyLCAweDUwMDBhLCAweDUwMDFhLCAweDUwMDA2LCAweDUwMDE2LCAweDUwMDBlLCAweDAwMDAwLCAweDUwMDAxLCAweDUwMDExLCAweDUwMDA5LCAweDUwMDE5LCAweDUwMDA1LCAweDUwMDE1LCAweDUwMDBkLCAweDUwMDFkLCAweDUwMDAzLCAweDUwMDEzLCAweDUwMDBiLCAweDUwMDFiLCAweDUwMDA3LCAweDUwMDE3LCAweDUwMDBmLCAweDAwMDAwXSksIDVdO1xuXG5jbGFzcyBGbGF0ZVN0cmVhbSBleHRlbmRzIF9kZWNvZGVfc3RyZWFtLkRlY29kZVN0cmVhbSB7XG4gIGNvbnN0cnVjdG9yKHN0ciwgbWF5YmVMZW5ndGgpIHtcbiAgICBzdXBlcihtYXliZUxlbmd0aCk7XG4gICAgdGhpcy5zdHIgPSBzdHI7XG4gICAgdGhpcy5kaWN0ID0gc3RyLmRpY3Q7XG4gICAgY29uc3QgY21mID0gc3RyLmdldEJ5dGUoKTtcbiAgICBjb25zdCBmbGcgPSBzdHIuZ2V0Qnl0ZSgpO1xuXG4gICAgaWYgKGNtZiA9PT0gLTEgfHwgZmxnID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW06ICR7Y21mfSwgJHtmbGd9YCk7XG4gICAgfVxuXG4gICAgaWYgKChjbWYgJiAweDBmKSAhPT0gMHgwOCkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBVbmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCBpbiBmbGF0ZSBzdHJlYW06ICR7Y21mfSwgJHtmbGd9YCk7XG4gICAgfVxuXG4gICAgaWYgKCgoY21mIDw8IDgpICsgZmxnKSAlIDMxICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEJhZCBGQ0hFQ0sgaW4gZmxhdGUgc3RyZWFtOiAke2NtZn0sICR7ZmxnfWApO1xuICAgIH1cblxuICAgIGlmIChmbGcgJiAweDIwKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEZESUNUIGJpdCBzZXQgaW4gZmxhdGUgc3RyZWFtOiAke2NtZn0sICR7ZmxnfWApO1xuICAgIH1cblxuICAgIHRoaXMuY29kZVNpemUgPSAwO1xuICAgIHRoaXMuY29kZUJ1ZiA9IDA7XG4gIH1cblxuICBnZXRCaXRzKGJpdHMpIHtcbiAgICBjb25zdCBzdHIgPSB0aGlzLnN0cjtcbiAgICBsZXQgY29kZVNpemUgPSB0aGlzLmNvZGVTaXplO1xuICAgIGxldCBjb2RlQnVmID0gdGhpcy5jb2RlQnVmO1xuICAgIGxldCBiO1xuXG4gICAgd2hpbGUgKGNvZGVTaXplIDwgYml0cykge1xuICAgICAgaWYgKChiID0gc3RyLmdldEJ5dGUoKSkgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkJhZCBlbmNvZGluZyBpbiBmbGF0ZSBzdHJlYW1cIik7XG4gICAgICB9XG5cbiAgICAgIGNvZGVCdWYgfD0gYiA8PCBjb2RlU2l6ZTtcbiAgICAgIGNvZGVTaXplICs9IDg7XG4gICAgfVxuXG4gICAgYiA9IGNvZGVCdWYgJiAoMSA8PCBiaXRzKSAtIDE7XG4gICAgdGhpcy5jb2RlQnVmID0gY29kZUJ1ZiA+PiBiaXRzO1xuICAgIHRoaXMuY29kZVNpemUgPSBjb2RlU2l6ZSAtPSBiaXRzO1xuICAgIHJldHVybiBiO1xuICB9XG5cbiAgZ2V0Q29kZSh0YWJsZSkge1xuICAgIGNvbnN0IHN0ciA9IHRoaXMuc3RyO1xuICAgIGNvbnN0IGNvZGVzID0gdGFibGVbMF07XG4gICAgY29uc3QgbWF4TGVuID0gdGFibGVbMV07XG4gICAgbGV0IGNvZGVTaXplID0gdGhpcy5jb2RlU2l6ZTtcbiAgICBsZXQgY29kZUJ1ZiA9IHRoaXMuY29kZUJ1ZjtcbiAgICBsZXQgYjtcblxuICAgIHdoaWxlIChjb2RlU2l6ZSA8IG1heExlbikge1xuICAgICAgaWYgKChiID0gc3RyLmdldEJ5dGUoKSkgPT09IC0xKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb2RlQnVmIHw9IGIgPDwgY29kZVNpemU7XG4gICAgICBjb2RlU2l6ZSArPSA4O1xuICAgIH1cblxuICAgIGNvbnN0IGNvZGUgPSBjb2Rlc1tjb2RlQnVmICYgKDEgPDwgbWF4TGVuKSAtIDFdO1xuICAgIGNvbnN0IGNvZGVMZW4gPSBjb2RlID4+IDE2O1xuICAgIGNvbnN0IGNvZGVWYWwgPSBjb2RlICYgMHhmZmZmO1xuXG4gICAgaWYgKGNvZGVMZW4gPCAxIHx8IGNvZGVTaXplIDwgY29kZUxlbikge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiQmFkIGVuY29kaW5nIGluIGZsYXRlIHN0cmVhbVwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGVCdWYgPSBjb2RlQnVmID4+IGNvZGVMZW47XG4gICAgdGhpcy5jb2RlU2l6ZSA9IGNvZGVTaXplIC0gY29kZUxlbjtcbiAgICByZXR1cm4gY29kZVZhbDtcbiAgfVxuXG4gIGdlbmVyYXRlSHVmZm1hblRhYmxlKGxlbmd0aHMpIHtcbiAgICBjb25zdCBuID0gbGVuZ3Rocy5sZW5ndGg7XG4gICAgbGV0IG1heExlbiA9IDA7XG4gICAgbGV0IGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobGVuZ3Roc1tpXSA+IG1heExlbikge1xuICAgICAgICBtYXhMZW4gPSBsZW5ndGhzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNpemUgPSAxIDw8IG1heExlbjtcbiAgICBjb25zdCBjb2RlcyA9IG5ldyBJbnQzMkFycmF5KHNpemUpO1xuXG4gICAgZm9yIChsZXQgbGVuID0gMSwgY29kZSA9IDAsIHNraXAgPSAyOyBsZW4gPD0gbWF4TGVuOyArK2xlbiwgY29kZSA8PD0gMSwgc2tpcCA8PD0gMSkge1xuICAgICAgZm9yIChsZXQgdmFsID0gMDsgdmFsIDwgbjsgKyt2YWwpIHtcbiAgICAgICAgaWYgKGxlbmd0aHNbdmFsXSA9PT0gbGVuKSB7XG4gICAgICAgICAgbGV0IGNvZGUyID0gMDtcbiAgICAgICAgICBsZXQgdCA9IGNvZGU7XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgIGNvZGUyID0gY29kZTIgPDwgMSB8IHQgJiAxO1xuICAgICAgICAgICAgdCA+Pj0gMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGkgPSBjb2RlMjsgaSA8IHNpemU7IGkgKz0gc2tpcCkge1xuICAgICAgICAgICAgY29kZXNbaV0gPSBsZW4gPDwgMTYgfCB2YWw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgKytjb2RlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtjb2RlcywgbWF4TGVuXTtcbiAgfVxuXG4gIHJlYWRCbG9jaygpIHtcbiAgICBsZXQgYnVmZmVyLCBsZW47XG4gICAgY29uc3Qgc3RyID0gdGhpcy5zdHI7XG4gICAgbGV0IGhkciA9IHRoaXMuZ2V0Qml0cygzKTtcblxuICAgIGlmIChoZHIgJiAxKSB7XG4gICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgfVxuXG4gICAgaGRyID4+PSAxO1xuXG4gICAgaWYgKGhkciA9PT0gMCkge1xuICAgICAgbGV0IGI7XG5cbiAgICAgIGlmICgoYiA9IHN0ci5nZXRCeXRlKCkpID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbVwiKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGJsb2NrTGVuID0gYjtcblxuICAgICAgaWYgKChiID0gc3RyLmdldEJ5dGUoKSkgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtXCIpO1xuICAgICAgfVxuXG4gICAgICBibG9ja0xlbiB8PSBiIDw8IDg7XG5cbiAgICAgIGlmICgoYiA9IHN0ci5nZXRCeXRlKCkpID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbVwiKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGNoZWNrID0gYjtcblxuICAgICAgaWYgKChiID0gc3RyLmdldEJ5dGUoKSkgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtXCIpO1xuICAgICAgfVxuXG4gICAgICBjaGVjayB8PSBiIDw8IDg7XG5cbiAgICAgIGlmIChjaGVjayAhPT0gKH5ibG9ja0xlbiAmIDB4ZmZmZikgJiYgKGJsb2NrTGVuICE9PSAwIHx8IGNoZWNrICE9PSAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJCYWQgdW5jb21wcmVzc2VkIGJsb2NrIGxlbmd0aCBpbiBmbGF0ZSBzdHJlYW1cIik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29kZUJ1ZiA9IDA7XG4gICAgICB0aGlzLmNvZGVTaXplID0gMDtcbiAgICAgIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoLFxuICAgICAgICAgICAgZW5kID0gYnVmZmVyTGVuZ3RoICsgYmxvY2tMZW47XG4gICAgICBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcihlbmQpO1xuICAgICAgdGhpcy5idWZmZXJMZW5ndGggPSBlbmQ7XG5cbiAgICAgIGlmIChibG9ja0xlbiA9PT0gMCkge1xuICAgICAgICBpZiAoc3RyLnBlZWtCeXRlKCkgPT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBibG9jayA9IHN0ci5nZXRCeXRlcyhibG9ja0xlbik7XG4gICAgICAgIGJ1ZmZlci5zZXQoYmxvY2ssIGJ1ZmZlckxlbmd0aCk7XG5cbiAgICAgICAgaWYgKGJsb2NrLmxlbmd0aCA8IGJsb2NrTGVuKSB7XG4gICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbGl0Q29kZVRhYmxlO1xuICAgIGxldCBkaXN0Q29kZVRhYmxlO1xuXG4gICAgaWYgKGhkciA9PT0gMSkge1xuICAgICAgbGl0Q29kZVRhYmxlID0gZml4ZWRMaXRDb2RlVGFiO1xuICAgICAgZGlzdENvZGVUYWJsZSA9IGZpeGVkRGlzdENvZGVUYWI7XG4gICAgfSBlbHNlIGlmIChoZHIgPT09IDIpIHtcbiAgICAgIGNvbnN0IG51bUxpdENvZGVzID0gdGhpcy5nZXRCaXRzKDUpICsgMjU3O1xuICAgICAgY29uc3QgbnVtRGlzdENvZGVzID0gdGhpcy5nZXRCaXRzKDUpICsgMTtcbiAgICAgIGNvbnN0IG51bUNvZGVMZW5Db2RlcyA9IHRoaXMuZ2V0Qml0cyg0KSArIDQ7XG4gICAgICBjb25zdCBjb2RlTGVuQ29kZUxlbmd0aHMgPSBuZXcgVWludDhBcnJheShjb2RlTGVuQ29kZU1hcC5sZW5ndGgpO1xuICAgICAgbGV0IGk7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1Db2RlTGVuQ29kZXM7ICsraSkge1xuICAgICAgICBjb2RlTGVuQ29kZUxlbmd0aHNbY29kZUxlbkNvZGVNYXBbaV1dID0gdGhpcy5nZXRCaXRzKDMpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb2RlTGVuQ29kZVRhYiA9IHRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUoY29kZUxlbkNvZGVMZW5ndGhzKTtcbiAgICAgIGxlbiA9IDA7XG4gICAgICBpID0gMDtcbiAgICAgIGNvbnN0IGNvZGVzID0gbnVtTGl0Q29kZXMgKyBudW1EaXN0Q29kZXM7XG4gICAgICBjb25zdCBjb2RlTGVuZ3RocyA9IG5ldyBVaW50OEFycmF5KGNvZGVzKTtcbiAgICAgIGxldCBiaXRzTGVuZ3RoLCBiaXRzT2Zmc2V0LCB3aGF0O1xuXG4gICAgICB3aGlsZSAoaSA8IGNvZGVzKSB7XG4gICAgICAgIGNvbnN0IGNvZGUgPSB0aGlzLmdldENvZGUoY29kZUxlbkNvZGVUYWIpO1xuXG4gICAgICAgIGlmIChjb2RlID09PSAxNikge1xuICAgICAgICAgIGJpdHNMZW5ndGggPSAyO1xuICAgICAgICAgIGJpdHNPZmZzZXQgPSAzO1xuICAgICAgICAgIHdoYXQgPSBsZW47XG4gICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gMTcpIHtcbiAgICAgICAgICBiaXRzTGVuZ3RoID0gMztcbiAgICAgICAgICBiaXRzT2Zmc2V0ID0gMztcbiAgICAgICAgICB3aGF0ID0gbGVuID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChjb2RlID09PSAxOCkge1xuICAgICAgICAgIGJpdHNMZW5ndGggPSA3O1xuICAgICAgICAgIGJpdHNPZmZzZXQgPSAxMTtcbiAgICAgICAgICB3aGF0ID0gbGVuID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2RlTGVuZ3Roc1tpKytdID0gbGVuID0gY29kZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXBlYXRMZW5ndGggPSB0aGlzLmdldEJpdHMoYml0c0xlbmd0aCkgKyBiaXRzT2Zmc2V0O1xuXG4gICAgICAgIHdoaWxlIChyZXBlYXRMZW5ndGgtLSA+IDApIHtcbiAgICAgICAgICBjb2RlTGVuZ3Roc1tpKytdID0gd2hhdDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsaXRDb2RlVGFibGUgPSB0aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKGNvZGVMZW5ndGhzLnN1YmFycmF5KDAsIG51bUxpdENvZGVzKSk7XG4gICAgICBkaXN0Q29kZVRhYmxlID0gdGhpcy5nZW5lcmF0ZUh1ZmZtYW5UYWJsZShjb2RlTGVuZ3Rocy5zdWJhcnJheShudW1MaXRDb2RlcywgY29kZXMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVW5rbm93biBibG9jayB0eXBlIGluIGZsYXRlIHN0cmVhbVwiKTtcbiAgICB9XG5cbiAgICBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcbiAgICBsZXQgbGltaXQgPSBidWZmZXIgPyBidWZmZXIubGVuZ3RoIDogMDtcbiAgICBsZXQgcG9zID0gdGhpcy5idWZmZXJMZW5ndGg7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgbGV0IGNvZGUxID0gdGhpcy5nZXRDb2RlKGxpdENvZGVUYWJsZSk7XG5cbiAgICAgIGlmIChjb2RlMSA8IDI1Nikge1xuICAgICAgICBpZiAocG9zICsgMSA+PSBsaW1pdCkge1xuICAgICAgICAgIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKHBvcyArIDEpO1xuICAgICAgICAgIGxpbWl0ID0gYnVmZmVyLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1ZmZlcltwb3MrK10gPSBjb2RlMTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2RlMSA9PT0gMjU2KSB7XG4gICAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gcG9zO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvZGUxIC09IDI1NztcbiAgICAgIGNvZGUxID0gbGVuZ3RoRGVjb2RlW2NvZGUxXTtcbiAgICAgIGxldCBjb2RlMiA9IGNvZGUxID4+IDE2O1xuXG4gICAgICBpZiAoY29kZTIgPiAwKSB7XG4gICAgICAgIGNvZGUyID0gdGhpcy5nZXRCaXRzKGNvZGUyKTtcbiAgICAgIH1cblxuICAgICAgbGVuID0gKGNvZGUxICYgMHhmZmZmKSArIGNvZGUyO1xuICAgICAgY29kZTEgPSB0aGlzLmdldENvZGUoZGlzdENvZGVUYWJsZSk7XG4gICAgICBjb2RlMSA9IGRpc3REZWNvZGVbY29kZTFdO1xuICAgICAgY29kZTIgPSBjb2RlMSA+PiAxNjtcblxuICAgICAgaWYgKGNvZGUyID4gMCkge1xuICAgICAgICBjb2RlMiA9IHRoaXMuZ2V0Qml0cyhjb2RlMik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRpc3QgPSAoY29kZTEgJiAweGZmZmYpICsgY29kZTI7XG5cbiAgICAgIGlmIChwb3MgKyBsZW4gPj0gbGltaXQpIHtcbiAgICAgICAgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIocG9zICsgbGVuKTtcbiAgICAgICAgbGltaXQgPSBidWZmZXIubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxlbjsgKytrLCArK3Bvcykge1xuICAgICAgICBidWZmZXJbcG9zXSA9IGJ1ZmZlcltwb3MgLSBkaXN0XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnRzLkZsYXRlU3RyZWFtID0gRmxhdGVTdHJlYW07XG5cbi8qKiovIH0pLFxuLyogMzQgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuSmJpZzJTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfZGVjb2RlX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjkpO1xuXG52YXIgX2piaWcgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDM1KTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuY2xhc3MgSmJpZzJTdHJlYW0gZXh0ZW5kcyBfZGVjb2RlX3N0cmVhbS5EZWNvZGVTdHJlYW0ge1xuICBjb25zdHJ1Y3RvcihzdHJlYW0sIG1heWJlTGVuZ3RoLCBwYXJhbXMpIHtcbiAgICBzdXBlcihtYXliZUxlbmd0aCk7XG4gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5kaWN0ID0gc3RyZWFtLmRpY3Q7XG4gICAgdGhpcy5tYXliZUxlbmd0aCA9IG1heWJlTGVuZ3RoO1xuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICB9XG5cbiAgZ2V0IGJ5dGVzKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImJ5dGVzXCIsIHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKTtcbiAgfVxuXG4gIGVuc3VyZUJ1ZmZlcihyZXF1ZXN0ZWQpIHt9XG5cbiAgcmVhZEJsb2NrKCkge1xuICAgIGlmICh0aGlzLmVvZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGpiaWcySW1hZ2UgPSBuZXcgX2piaWcuSmJpZzJJbWFnZSgpO1xuICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHRoaXMucGFyYW1zKSkge1xuICAgICAgY29uc3QgZ2xvYmFsc1N0cmVhbSA9IHRoaXMucGFyYW1zLmdldChcIkpCSUcyR2xvYmFsc1wiKTtcblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoZ2xvYmFsc1N0cmVhbSkpIHtcbiAgICAgICAgY29uc3QgZ2xvYmFscyA9IGdsb2JhbHNTdHJlYW0uZ2V0Qnl0ZXMoKTtcbiAgICAgICAgY2h1bmtzLnB1c2goe1xuICAgICAgICAgIGRhdGE6IGdsb2JhbHMsXG4gICAgICAgICAgc3RhcnQ6IDAsXG4gICAgICAgICAgZW5kOiBnbG9iYWxzLmxlbmd0aFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjaHVua3MucHVzaCh7XG4gICAgICBkYXRhOiB0aGlzLmJ5dGVzLFxuICAgICAgc3RhcnQ6IDAsXG4gICAgICBlbmQ6IHRoaXMuYnl0ZXMubGVuZ3RoXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGpiaWcySW1hZ2UucGFyc2VDaHVua3MoY2h1bmtzKTtcbiAgICBjb25zdCBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFMZW5ndGg7IGkrKykge1xuICAgICAgZGF0YVtpXSBePSAweGZmO1xuICAgIH1cblxuICAgIHRoaXMuYnVmZmVyID0gZGF0YTtcbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IGRhdGFMZW5ndGg7XG4gICAgdGhpcy5lb2YgPSB0cnVlO1xuICB9XG5cbn1cblxuZXhwb3J0cy5KYmlnMlN0cmVhbSA9IEpiaWcyU3RyZWFtO1xuXG4vKioqLyB9KSxcbi8qIDM1ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLkpiaWcySW1hZ2UgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOSk7XG5cbnZhciBfYXJpdGhtZXRpY19kZWNvZGVyID0gX193X3BkZmpzX3JlcXVpcmVfXygzNik7XG5cbnZhciBfY2NpdHQgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDMyKTtcblxuY2xhc3MgSmJpZzJFcnJvciBleHRlbmRzIF91dGlsLkJhc2VFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3Rvcihtc2cpIHtcbiAgICBzdXBlcihgSkJJRzIgZXJyb3I6ICR7bXNnfWAsIFwiSmJpZzJFcnJvclwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIENvbnRleHRDYWNoZSB7XG4gIGdldENvbnRleHRzKGlkKSB7XG4gICAgaWYgKGlkIGluIHRoaXMpIHtcbiAgICAgIHJldHVybiB0aGlzW2lkXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1tpZF0gPSBuZXcgSW50OEFycmF5KDEgPDwgMTYpO1xuICB9XG5cbn1cblxuY2xhc3MgRGVjb2RpbmdDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbiAgZ2V0IGRlY29kZXIoKSB7XG4gICAgY29uc3QgZGVjb2RlciA9IG5ldyBfYXJpdGhtZXRpY19kZWNvZGVyLkFyaXRobWV0aWNEZWNvZGVyKHRoaXMuZGF0YSwgdGhpcy5zdGFydCwgdGhpcy5lbmQpO1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImRlY29kZXJcIiwgZGVjb2Rlcik7XG4gIH1cblxuICBnZXQgY29udGV4dENhY2hlKCkge1xuICAgIGNvbnN0IGNhY2hlID0gbmV3IENvbnRleHRDYWNoZSgpO1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImNvbnRleHRDYWNoZVwiLCBjYWNoZSk7XG4gIH1cblxufVxuXG5mdW5jdGlvbiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgcHJvY2VkdXJlLCBkZWNvZGVyKSB7XG4gIGNvbnN0IGNvbnRleHRzID0gY29udGV4dENhY2hlLmdldENvbnRleHRzKHByb2NlZHVyZSk7XG4gIGxldCBwcmV2ID0gMTtcblxuICBmdW5jdGlvbiByZWFkQml0cyhsZW5ndGgpIHtcbiAgICBsZXQgdiA9IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBiaXQgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIHByZXYpO1xuICAgICAgcHJldiA9IHByZXYgPCAyNTYgPyBwcmV2IDw8IDEgfCBiaXQgOiAocHJldiA8PCAxIHwgYml0KSAmIDUxMSB8IDI1NjtcbiAgICAgIHYgPSB2IDw8IDEgfCBiaXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHYgPj4+IDA7XG4gIH1cblxuICBjb25zdCBzaWduID0gcmVhZEJpdHMoMSk7XG4gIGNvbnN0IHZhbHVlID0gcmVhZEJpdHMoMSkgPyByZWFkQml0cygxKSA/IHJlYWRCaXRzKDEpID8gcmVhZEJpdHMoMSkgPyByZWFkQml0cygxKSA/IHJlYWRCaXRzKDMyKSArIDQ0MzYgOiByZWFkQml0cygxMikgKyAzNDAgOiByZWFkQml0cyg4KSArIDg0IDogcmVhZEJpdHMoNikgKyAyMCA6IHJlYWRCaXRzKDQpICsgNCA6IHJlYWRCaXRzKDIpO1xuXG4gIGlmIChzaWduID09PSAwKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9IGVsc2UgaWYgKHZhbHVlID4gMCkge1xuICAgIHJldHVybiAtdmFsdWU7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZGVjb2RlSUFJRChjb250ZXh0Q2FjaGUsIGRlY29kZXIsIGNvZGVMZW5ndGgpIHtcbiAgY29uc3QgY29udGV4dHMgPSBjb250ZXh0Q2FjaGUuZ2V0Q29udGV4dHMoXCJJQUlEXCIpO1xuICBsZXQgcHJldiA9IDE7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2RlTGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBiaXQgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIHByZXYpO1xuICAgIHByZXYgPSBwcmV2IDw8IDEgfCBiaXQ7XG4gIH1cblxuICBpZiAoY29kZUxlbmd0aCA8IDMxKSB7XG4gICAgcmV0dXJuIHByZXYgJiAoMSA8PCBjb2RlTGVuZ3RoKSAtIDE7XG4gIH1cblxuICByZXR1cm4gcHJldiAmIDB4N2ZmZmZmZmY7XG59XG5cbmNvbnN0IFNlZ21lbnRUeXBlcyA9IFtcIlN5bWJvbERpY3Rpb25hcnlcIiwgbnVsbCwgbnVsbCwgbnVsbCwgXCJJbnRlcm1lZGlhdGVUZXh0UmVnaW9uXCIsIG51bGwsIFwiSW1tZWRpYXRlVGV4dFJlZ2lvblwiLCBcIkltbWVkaWF0ZUxvc3NsZXNzVGV4dFJlZ2lvblwiLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBcIlBhdHRlcm5EaWN0aW9uYXJ5XCIsIG51bGwsIG51bGwsIG51bGwsIFwiSW50ZXJtZWRpYXRlSGFsZnRvbmVSZWdpb25cIiwgbnVsbCwgXCJJbW1lZGlhdGVIYWxmdG9uZVJlZ2lvblwiLCBcIkltbWVkaWF0ZUxvc3NsZXNzSGFsZnRvbmVSZWdpb25cIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXCJJbnRlcm1lZGlhdGVHZW5lcmljUmVnaW9uXCIsIG51bGwsIFwiSW1tZWRpYXRlR2VuZXJpY1JlZ2lvblwiLCBcIkltbWVkaWF0ZUxvc3NsZXNzR2VuZXJpY1JlZ2lvblwiLCBcIkludGVybWVkaWF0ZUdlbmVyaWNSZWZpbmVtZW50UmVnaW9uXCIsIG51bGwsIFwiSW1tZWRpYXRlR2VuZXJpY1JlZmluZW1lbnRSZWdpb25cIiwgXCJJbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWZpbmVtZW50UmVnaW9uXCIsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIFwiUGFnZUluZm9ybWF0aW9uXCIsIFwiRW5kT2ZQYWdlXCIsIFwiRW5kT2ZTdHJpcGVcIiwgXCJFbmRPZkZpbGVcIiwgXCJQcm9maWxlc1wiLCBcIlRhYmxlc1wiLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBcIkV4dGVuc2lvblwiXTtcbmNvbnN0IENvZGluZ1RlbXBsYXRlcyA9IFtbe1xuICB4OiAtMSxcbiAgeTogLTJcbn0sIHtcbiAgeDogMCxcbiAgeTogLTJcbn0sIHtcbiAgeDogMSxcbiAgeTogLTJcbn0sIHtcbiAgeDogLTIsXG4gIHk6IC0xXG59LCB7XG4gIHg6IC0xLFxuICB5OiAtMVxufSwge1xuICB4OiAwLFxuICB5OiAtMVxufSwge1xuICB4OiAxLFxuICB5OiAtMVxufSwge1xuICB4OiAyLFxuICB5OiAtMVxufSwge1xuICB4OiAtNCxcbiAgeTogMFxufSwge1xuICB4OiAtMyxcbiAgeTogMFxufSwge1xuICB4OiAtMixcbiAgeTogMFxufSwge1xuICB4OiAtMSxcbiAgeTogMFxufV0sIFt7XG4gIHg6IC0xLFxuICB5OiAtMlxufSwge1xuICB4OiAwLFxuICB5OiAtMlxufSwge1xuICB4OiAxLFxuICB5OiAtMlxufSwge1xuICB4OiAyLFxuICB5OiAtMlxufSwge1xuICB4OiAtMixcbiAgeTogLTFcbn0sIHtcbiAgeDogLTEsXG4gIHk6IC0xXG59LCB7XG4gIHg6IDAsXG4gIHk6IC0xXG59LCB7XG4gIHg6IDEsXG4gIHk6IC0xXG59LCB7XG4gIHg6IDIsXG4gIHk6IC0xXG59LCB7XG4gIHg6IC0zLFxuICB5OiAwXG59LCB7XG4gIHg6IC0yLFxuICB5OiAwXG59LCB7XG4gIHg6IC0xLFxuICB5OiAwXG59XSwgW3tcbiAgeDogLTEsXG4gIHk6IC0yXG59LCB7XG4gIHg6IDAsXG4gIHk6IC0yXG59LCB7XG4gIHg6IDEsXG4gIHk6IC0yXG59LCB7XG4gIHg6IC0yLFxuICB5OiAtMVxufSwge1xuICB4OiAtMSxcbiAgeTogLTFcbn0sIHtcbiAgeDogMCxcbiAgeTogLTFcbn0sIHtcbiAgeDogMSxcbiAgeTogLTFcbn0sIHtcbiAgeDogLTIsXG4gIHk6IDBcbn0sIHtcbiAgeDogLTEsXG4gIHk6IDBcbn1dLCBbe1xuICB4OiAtMyxcbiAgeTogLTFcbn0sIHtcbiAgeDogLTIsXG4gIHk6IC0xXG59LCB7XG4gIHg6IC0xLFxuICB5OiAtMVxufSwge1xuICB4OiAwLFxuICB5OiAtMVxufSwge1xuICB4OiAxLFxuICB5OiAtMVxufSwge1xuICB4OiAtNCxcbiAgeTogMFxufSwge1xuICB4OiAtMyxcbiAgeTogMFxufSwge1xuICB4OiAtMixcbiAgeTogMFxufSwge1xuICB4OiAtMSxcbiAgeTogMFxufV1dO1xuY29uc3QgUmVmaW5lbWVudFRlbXBsYXRlcyA9IFt7XG4gIGNvZGluZzogW3tcbiAgICB4OiAwLFxuICAgIHk6IC0xXG4gIH0sIHtcbiAgICB4OiAxLFxuICAgIHk6IC0xXG4gIH0sIHtcbiAgICB4OiAtMSxcbiAgICB5OiAwXG4gIH1dLFxuICByZWZlcmVuY2U6IFt7XG4gICAgeDogMCxcbiAgICB5OiAtMVxuICB9LCB7XG4gICAgeDogMSxcbiAgICB5OiAtMVxuICB9LCB7XG4gICAgeDogLTEsXG4gICAgeTogMFxuICB9LCB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH0sIHtcbiAgICB4OiAxLFxuICAgIHk6IDBcbiAgfSwge1xuICAgIHg6IC0xLFxuICAgIHk6IDFcbiAgfSwge1xuICAgIHg6IDAsXG4gICAgeTogMVxuICB9LCB7XG4gICAgeDogMSxcbiAgICB5OiAxXG4gIH1dXG59LCB7XG4gIGNvZGluZzogW3tcbiAgICB4OiAtMSxcbiAgICB5OiAtMVxuICB9LCB7XG4gICAgeDogMCxcbiAgICB5OiAtMVxuICB9LCB7XG4gICAgeDogMSxcbiAgICB5OiAtMVxuICB9LCB7XG4gICAgeDogLTEsXG4gICAgeTogMFxuICB9XSxcbiAgcmVmZXJlbmNlOiBbe1xuICAgIHg6IDAsXG4gICAgeTogLTFcbiAgfSwge1xuICAgIHg6IC0xLFxuICAgIHk6IDBcbiAgfSwge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9LCB7XG4gICAgeDogMSxcbiAgICB5OiAwXG4gIH0sIHtcbiAgICB4OiAwLFxuICAgIHk6IDFcbiAgfSwge1xuICAgIHg6IDEsXG4gICAgeTogMVxuICB9XVxufV07XG5jb25zdCBSZXVzZWRDb250ZXh0cyA9IFsweDliMjUsIDB4MDc5NSwgMHgwMGU1LCAweDAxOTVdO1xuY29uc3QgUmVmaW5lbWVudFJldXNlZENvbnRleHRzID0gWzB4MDAyMCwgMHgwMDA4XTtcblxuZnVuY3Rpb24gZGVjb2RlQml0bWFwVGVtcGxhdGUwKHdpZHRoLCBoZWlnaHQsIGRlY29kaW5nQ29udGV4dCkge1xuICBjb25zdCBkZWNvZGVyID0gZGVjb2RpbmdDb250ZXh0LmRlY29kZXI7XG4gIGNvbnN0IGNvbnRleHRzID0gZGVjb2RpbmdDb250ZXh0LmNvbnRleHRDYWNoZS5nZXRDb250ZXh0cyhcIkdCXCIpO1xuICBjb25zdCBiaXRtYXAgPSBbXTtcbiAgbGV0IGNvbnRleHRMYWJlbCwgaSwgaiwgcGl4ZWwsIHJvdywgcm93MSwgcm93MjtcbiAgY29uc3QgT0xEX1BJWEVMX01BU0sgPSAweDdiZjc7XG5cbiAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7XG4gICAgcm93ID0gYml0bWFwW2ldID0gbmV3IFVpbnQ4QXJyYXkod2lkdGgpO1xuICAgIHJvdzEgPSBpIDwgMSA/IHJvdyA6IGJpdG1hcFtpIC0gMV07XG4gICAgcm93MiA9IGkgPCAyID8gcm93IDogYml0bWFwW2kgLSAyXTtcbiAgICBjb250ZXh0TGFiZWwgPSByb3cyWzBdIDw8IDEzIHwgcm93MlsxXSA8PCAxMiB8IHJvdzJbMl0gPDwgMTEgfCByb3cxWzBdIDw8IDcgfCByb3cxWzFdIDw8IDYgfCByb3cxWzJdIDw8IDUgfCByb3cxWzNdIDw8IDQ7XG5cbiAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgcm93W2pdID0gcGl4ZWwgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIGNvbnRleHRMYWJlbCk7XG4gICAgICBjb250ZXh0TGFiZWwgPSAoY29udGV4dExhYmVsICYgT0xEX1BJWEVMX01BU0spIDw8IDEgfCAoaiArIDMgPCB3aWR0aCA/IHJvdzJbaiArIDNdIDw8IDExIDogMCkgfCAoaiArIDQgPCB3aWR0aCA/IHJvdzFbaiArIDRdIDw8IDQgOiAwKSB8IHBpeGVsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBiaXRtYXA7XG59XG5cbmZ1bmN0aW9uIGRlY29kZUJpdG1hcChtbXIsIHdpZHRoLCBoZWlnaHQsIHRlbXBsYXRlSW5kZXgsIHByZWRpY3Rpb24sIHNraXAsIGF0LCBkZWNvZGluZ0NvbnRleHQpIHtcbiAgaWYgKG1tcikge1xuICAgIGNvbnN0IGlucHV0ID0gbmV3IFJlYWRlcihkZWNvZGluZ0NvbnRleHQuZGF0YSwgZGVjb2RpbmdDb250ZXh0LnN0YXJ0LCBkZWNvZGluZ0NvbnRleHQuZW5kKTtcbiAgICByZXR1cm4gZGVjb2RlTU1SQml0bWFwKGlucHV0LCB3aWR0aCwgaGVpZ2h0LCBmYWxzZSk7XG4gIH1cblxuICBpZiAodGVtcGxhdGVJbmRleCA9PT0gMCAmJiAhc2tpcCAmJiAhcHJlZGljdGlvbiAmJiBhdC5sZW5ndGggPT09IDQgJiYgYXRbMF0ueCA9PT0gMyAmJiBhdFswXS55ID09PSAtMSAmJiBhdFsxXS54ID09PSAtMyAmJiBhdFsxXS55ID09PSAtMSAmJiBhdFsyXS54ID09PSAyICYmIGF0WzJdLnkgPT09IC0yICYmIGF0WzNdLnggPT09IC0yICYmIGF0WzNdLnkgPT09IC0yKSB7XG4gICAgcmV0dXJuIGRlY29kZUJpdG1hcFRlbXBsYXRlMCh3aWR0aCwgaGVpZ2h0LCBkZWNvZGluZ0NvbnRleHQpO1xuICB9XG5cbiAgY29uc3QgdXNlc2tpcCA9ICEhc2tpcDtcbiAgY29uc3QgdGVtcGxhdGUgPSBDb2RpbmdUZW1wbGF0ZXNbdGVtcGxhdGVJbmRleF0uY29uY2F0KGF0KTtcbiAgdGVtcGxhdGUuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBhLnkgLSBiLnkgfHwgYS54IC0gYi54O1xuICB9KTtcbiAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSB0ZW1wbGF0ZS5sZW5ndGg7XG4gIGNvbnN0IHRlbXBsYXRlWCA9IG5ldyBJbnQ4QXJyYXkodGVtcGxhdGVMZW5ndGgpO1xuICBjb25zdCB0ZW1wbGF0ZVkgPSBuZXcgSW50OEFycmF5KHRlbXBsYXRlTGVuZ3RoKTtcbiAgY29uc3QgY2hhbmdpbmdUZW1wbGF0ZUVudHJpZXMgPSBbXTtcbiAgbGV0IHJldXNlTWFzayA9IDAsXG4gICAgICBtaW5YID0gMCxcbiAgICAgIG1heFggPSAwLFxuICAgICAgbWluWSA9IDA7XG4gIGxldCBjLCBrO1xuXG4gIGZvciAoayA9IDA7IGsgPCB0ZW1wbGF0ZUxlbmd0aDsgaysrKSB7XG4gICAgdGVtcGxhdGVYW2tdID0gdGVtcGxhdGVba10ueDtcbiAgICB0ZW1wbGF0ZVlba10gPSB0ZW1wbGF0ZVtrXS55O1xuICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCB0ZW1wbGF0ZVtrXS54KTtcbiAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgdGVtcGxhdGVba10ueCk7XG4gICAgbWluWSA9IE1hdGgubWluKG1pblksIHRlbXBsYXRlW2tdLnkpO1xuXG4gICAgaWYgKGsgPCB0ZW1wbGF0ZUxlbmd0aCAtIDEgJiYgdGVtcGxhdGVba10ueSA9PT0gdGVtcGxhdGVbayArIDFdLnkgJiYgdGVtcGxhdGVba10ueCA9PT0gdGVtcGxhdGVbayArIDFdLnggLSAxKSB7XG4gICAgICByZXVzZU1hc2sgfD0gMSA8PCB0ZW1wbGF0ZUxlbmd0aCAtIDEgLSBrO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFuZ2luZ1RlbXBsYXRlRW50cmllcy5wdXNoKGspO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNoYW5naW5nRW50cmllc0xlbmd0aCA9IGNoYW5naW5nVGVtcGxhdGVFbnRyaWVzLmxlbmd0aDtcbiAgY29uc3QgY2hhbmdpbmdUZW1wbGF0ZVggPSBuZXcgSW50OEFycmF5KGNoYW5naW5nRW50cmllc0xlbmd0aCk7XG4gIGNvbnN0IGNoYW5naW5nVGVtcGxhdGVZID0gbmV3IEludDhBcnJheShjaGFuZ2luZ0VudHJpZXNMZW5ndGgpO1xuICBjb25zdCBjaGFuZ2luZ1RlbXBsYXRlQml0ID0gbmV3IFVpbnQxNkFycmF5KGNoYW5naW5nRW50cmllc0xlbmd0aCk7XG5cbiAgZm9yIChjID0gMDsgYyA8IGNoYW5naW5nRW50cmllc0xlbmd0aDsgYysrKSB7XG4gICAgayA9IGNoYW5naW5nVGVtcGxhdGVFbnRyaWVzW2NdO1xuICAgIGNoYW5naW5nVGVtcGxhdGVYW2NdID0gdGVtcGxhdGVba10ueDtcbiAgICBjaGFuZ2luZ1RlbXBsYXRlWVtjXSA9IHRlbXBsYXRlW2tdLnk7XG4gICAgY2hhbmdpbmdUZW1wbGF0ZUJpdFtjXSA9IDEgPDwgdGVtcGxhdGVMZW5ndGggLSAxIC0gaztcbiAgfVxuXG4gIGNvbnN0IHNiYl9sZWZ0ID0gLW1pblg7XG4gIGNvbnN0IHNiYl90b3AgPSAtbWluWTtcbiAgY29uc3Qgc2JiX3JpZ2h0ID0gd2lkdGggLSBtYXhYO1xuICBjb25zdCBwc2V1ZG9QaXhlbENvbnRleHQgPSBSZXVzZWRDb250ZXh0c1t0ZW1wbGF0ZUluZGV4XTtcbiAgbGV0IHJvdyA9IG5ldyBVaW50OEFycmF5KHdpZHRoKTtcbiAgY29uc3QgYml0bWFwID0gW107XG4gIGNvbnN0IGRlY29kZXIgPSBkZWNvZGluZ0NvbnRleHQuZGVjb2RlcjtcbiAgY29uc3QgY29udGV4dHMgPSBkZWNvZGluZ0NvbnRleHQuY29udGV4dENhY2hlLmdldENvbnRleHRzKFwiR0JcIik7XG4gIGxldCBsdHAgPSAwLFxuICAgICAgaixcbiAgICAgIGkwLFxuICAgICAgajAsXG4gICAgICBjb250ZXh0TGFiZWwgPSAwLFxuICAgICAgYml0LFxuICAgICAgc2hpZnQ7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykge1xuICAgIGlmIChwcmVkaWN0aW9uKSB7XG4gICAgICBjb25zdCBzbHRwID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBwc2V1ZG9QaXhlbENvbnRleHQpO1xuICAgICAgbHRwIF49IHNsdHA7XG5cbiAgICAgIGlmIChsdHApIHtcbiAgICAgICAgYml0bWFwLnB1c2gocm93KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcm93ID0gbmV3IFVpbnQ4QXJyYXkocm93KTtcbiAgICBiaXRtYXAucHVzaChyb3cpO1xuXG4gICAgZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgIGlmICh1c2Vza2lwICYmIHNraXBbaV1bal0pIHtcbiAgICAgICAgcm93W2pdID0gMDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChqID49IHNiYl9sZWZ0ICYmIGogPCBzYmJfcmlnaHQgJiYgaSA+PSBzYmJfdG9wKSB7XG4gICAgICAgIGNvbnRleHRMYWJlbCA9IGNvbnRleHRMYWJlbCA8PCAxICYgcmV1c2VNYXNrO1xuXG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBjaGFuZ2luZ0VudHJpZXNMZW5ndGg7IGsrKykge1xuICAgICAgICAgIGkwID0gaSArIGNoYW5naW5nVGVtcGxhdGVZW2tdO1xuICAgICAgICAgIGowID0gaiArIGNoYW5naW5nVGVtcGxhdGVYW2tdO1xuICAgICAgICAgIGJpdCA9IGJpdG1hcFtpMF1bajBdO1xuXG4gICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgYml0ID0gY2hhbmdpbmdUZW1wbGF0ZUJpdFtrXTtcbiAgICAgICAgICAgIGNvbnRleHRMYWJlbCB8PSBiaXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0TGFiZWwgPSAwO1xuICAgICAgICBzaGlmdCA9IHRlbXBsYXRlTGVuZ3RoIC0gMTtcblxuICAgICAgICBmb3IgKGsgPSAwOyBrIDwgdGVtcGxhdGVMZW5ndGg7IGsrKywgc2hpZnQtLSkge1xuICAgICAgICAgIGowID0gaiArIHRlbXBsYXRlWFtrXTtcblxuICAgICAgICAgIGlmIChqMCA+PSAwICYmIGowIDwgd2lkdGgpIHtcbiAgICAgICAgICAgIGkwID0gaSArIHRlbXBsYXRlWVtrXTtcblxuICAgICAgICAgICAgaWYgKGkwID49IDApIHtcbiAgICAgICAgICAgICAgYml0ID0gYml0bWFwW2kwXVtqMF07XG5cbiAgICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICAgIGNvbnRleHRMYWJlbCB8PSBiaXQgPDwgc2hpZnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcGl4ZWwgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIGNvbnRleHRMYWJlbCk7XG4gICAgICByb3dbal0gPSBwaXhlbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYml0bWFwO1xufVxuXG5mdW5jdGlvbiBkZWNvZGVSZWZpbmVtZW50KHdpZHRoLCBoZWlnaHQsIHRlbXBsYXRlSW5kZXgsIHJlZmVyZW5jZUJpdG1hcCwgb2Zmc2V0WCwgb2Zmc2V0WSwgcHJlZGljdGlvbiwgYXQsIGRlY29kaW5nQ29udGV4dCkge1xuICBsZXQgY29kaW5nVGVtcGxhdGUgPSBSZWZpbmVtZW50VGVtcGxhdGVzW3RlbXBsYXRlSW5kZXhdLmNvZGluZztcblxuICBpZiAodGVtcGxhdGVJbmRleCA9PT0gMCkge1xuICAgIGNvZGluZ1RlbXBsYXRlID0gY29kaW5nVGVtcGxhdGUuY29uY2F0KFthdFswXV0pO1xuICB9XG5cbiAgY29uc3QgY29kaW5nVGVtcGxhdGVMZW5ndGggPSBjb2RpbmdUZW1wbGF0ZS5sZW5ndGg7XG4gIGNvbnN0IGNvZGluZ1RlbXBsYXRlWCA9IG5ldyBJbnQzMkFycmF5KGNvZGluZ1RlbXBsYXRlTGVuZ3RoKTtcbiAgY29uc3QgY29kaW5nVGVtcGxhdGVZID0gbmV3IEludDMyQXJyYXkoY29kaW5nVGVtcGxhdGVMZW5ndGgpO1xuICBsZXQgaztcblxuICBmb3IgKGsgPSAwOyBrIDwgY29kaW5nVGVtcGxhdGVMZW5ndGg7IGsrKykge1xuICAgIGNvZGluZ1RlbXBsYXRlWFtrXSA9IGNvZGluZ1RlbXBsYXRlW2tdLng7XG4gICAgY29kaW5nVGVtcGxhdGVZW2tdID0gY29kaW5nVGVtcGxhdGVba10ueTtcbiAgfVxuXG4gIGxldCByZWZlcmVuY2VUZW1wbGF0ZSA9IFJlZmluZW1lbnRUZW1wbGF0ZXNbdGVtcGxhdGVJbmRleF0ucmVmZXJlbmNlO1xuXG4gIGlmICh0ZW1wbGF0ZUluZGV4ID09PSAwKSB7XG4gICAgcmVmZXJlbmNlVGVtcGxhdGUgPSByZWZlcmVuY2VUZW1wbGF0ZS5jb25jYXQoW2F0WzFdXSk7XG4gIH1cblxuICBjb25zdCByZWZlcmVuY2VUZW1wbGF0ZUxlbmd0aCA9IHJlZmVyZW5jZVRlbXBsYXRlLmxlbmd0aDtcbiAgY29uc3QgcmVmZXJlbmNlVGVtcGxhdGVYID0gbmV3IEludDMyQXJyYXkocmVmZXJlbmNlVGVtcGxhdGVMZW5ndGgpO1xuICBjb25zdCByZWZlcmVuY2VUZW1wbGF0ZVkgPSBuZXcgSW50MzJBcnJheShyZWZlcmVuY2VUZW1wbGF0ZUxlbmd0aCk7XG5cbiAgZm9yIChrID0gMDsgayA8IHJlZmVyZW5jZVRlbXBsYXRlTGVuZ3RoOyBrKyspIHtcbiAgICByZWZlcmVuY2VUZW1wbGF0ZVhba10gPSByZWZlcmVuY2VUZW1wbGF0ZVtrXS54O1xuICAgIHJlZmVyZW5jZVRlbXBsYXRlWVtrXSA9IHJlZmVyZW5jZVRlbXBsYXRlW2tdLnk7XG4gIH1cblxuICBjb25zdCByZWZlcmVuY2VXaWR0aCA9IHJlZmVyZW5jZUJpdG1hcFswXS5sZW5ndGg7XG4gIGNvbnN0IHJlZmVyZW5jZUhlaWdodCA9IHJlZmVyZW5jZUJpdG1hcC5sZW5ndGg7XG4gIGNvbnN0IHBzZXVkb1BpeGVsQ29udGV4dCA9IFJlZmluZW1lbnRSZXVzZWRDb250ZXh0c1t0ZW1wbGF0ZUluZGV4XTtcbiAgY29uc3QgYml0bWFwID0gW107XG4gIGNvbnN0IGRlY29kZXIgPSBkZWNvZGluZ0NvbnRleHQuZGVjb2RlcjtcbiAgY29uc3QgY29udGV4dHMgPSBkZWNvZGluZ0NvbnRleHQuY29udGV4dENhY2hlLmdldENvbnRleHRzKFwiR1JcIik7XG4gIGxldCBsdHAgPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHtcbiAgICBpZiAocHJlZGljdGlvbikge1xuICAgICAgY29uc3Qgc2x0cCA9IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgcHNldWRvUGl4ZWxDb250ZXh0KTtcbiAgICAgIGx0cCBePSBzbHRwO1xuXG4gICAgICBpZiAobHRwKSB7XG4gICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwicHJlZGljdGlvbiBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJvdyA9IG5ldyBVaW50OEFycmF5KHdpZHRoKTtcbiAgICBiaXRtYXAucHVzaChyb3cpO1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7XG4gICAgICBsZXQgaTAsIGowO1xuICAgICAgbGV0IGNvbnRleHRMYWJlbCA9IDA7XG5cbiAgICAgIGZvciAoayA9IDA7IGsgPCBjb2RpbmdUZW1wbGF0ZUxlbmd0aDsgaysrKSB7XG4gICAgICAgIGkwID0gaSArIGNvZGluZ1RlbXBsYXRlWVtrXTtcbiAgICAgICAgajAgPSBqICsgY29kaW5nVGVtcGxhdGVYW2tdO1xuXG4gICAgICAgIGlmIChpMCA8IDAgfHwgajAgPCAwIHx8IGowID49IHdpZHRoKSB7XG4gICAgICAgICAgY29udGV4dExhYmVsIDw8PSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRleHRMYWJlbCA9IGNvbnRleHRMYWJlbCA8PCAxIHwgYml0bWFwW2kwXVtqMF07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChrID0gMDsgayA8IHJlZmVyZW5jZVRlbXBsYXRlTGVuZ3RoOyBrKyspIHtcbiAgICAgICAgaTAgPSBpICsgcmVmZXJlbmNlVGVtcGxhdGVZW2tdIC0gb2Zmc2V0WTtcbiAgICAgICAgajAgPSBqICsgcmVmZXJlbmNlVGVtcGxhdGVYW2tdIC0gb2Zmc2V0WDtcblxuICAgICAgICBpZiAoaTAgPCAwIHx8IGkwID49IHJlZmVyZW5jZUhlaWdodCB8fCBqMCA8IDAgfHwgajAgPj0gcmVmZXJlbmNlV2lkdGgpIHtcbiAgICAgICAgICBjb250ZXh0TGFiZWwgPDw9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGV4dExhYmVsID0gY29udGV4dExhYmVsIDw8IDEgfCByZWZlcmVuY2VCaXRtYXBbaTBdW2owXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwaXhlbCA9IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgY29udGV4dExhYmVsKTtcbiAgICAgIHJvd1tqXSA9IHBpeGVsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBiaXRtYXA7XG59XG5cbmZ1bmN0aW9uIGRlY29kZVN5bWJvbERpY3Rpb25hcnkoaHVmZm1hbiwgcmVmaW5lbWVudCwgc3ltYm9scywgbnVtYmVyT2ZOZXdTeW1ib2xzLCBudW1iZXJPZkV4cG9ydGVkU3ltYm9scywgaHVmZm1hblRhYmxlcywgdGVtcGxhdGVJbmRleCwgYXQsIHJlZmluZW1lbnRUZW1wbGF0ZUluZGV4LCByZWZpbmVtZW50QXQsIGRlY29kaW5nQ29udGV4dCwgaHVmZm1hbklucHV0KSB7XG4gIGlmIChodWZmbWFuICYmIHJlZmluZW1lbnQpIHtcbiAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcInN5bWJvbCByZWZpbmVtZW50IHdpdGggSHVmZm1hbiBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuICB9XG5cbiAgY29uc3QgbmV3U3ltYm9scyA9IFtdO1xuICBsZXQgY3VycmVudEhlaWdodCA9IDA7XG4gIGxldCBzeW1ib2xDb2RlTGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLmxvZzIpKHN5bWJvbHMubGVuZ3RoICsgbnVtYmVyT2ZOZXdTeW1ib2xzKTtcbiAgY29uc3QgZGVjb2RlciA9IGRlY29kaW5nQ29udGV4dC5kZWNvZGVyO1xuICBjb25zdCBjb250ZXh0Q2FjaGUgPSBkZWNvZGluZ0NvbnRleHQuY29udGV4dENhY2hlO1xuICBsZXQgdGFibGVCMSwgc3ltYm9sV2lkdGhzO1xuXG4gIGlmIChodWZmbWFuKSB7XG4gICAgdGFibGVCMSA9IGdldFN0YW5kYXJkVGFibGUoMSk7XG4gICAgc3ltYm9sV2lkdGhzID0gW107XG4gICAgc3ltYm9sQ29kZUxlbmd0aCA9IE1hdGgubWF4KHN5bWJvbENvZGVMZW5ndGgsIDEpO1xuICB9XG5cbiAgd2hpbGUgKG5ld1N5bWJvbHMubGVuZ3RoIDwgbnVtYmVyT2ZOZXdTeW1ib2xzKSB7XG4gICAgY29uc3QgZGVsdGFIZWlnaHQgPSBodWZmbWFuID8gaHVmZm1hblRhYmxlcy50YWJsZURlbHRhSGVpZ2h0LmRlY29kZShodWZmbWFuSW5wdXQpIDogZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsIFwiSUFESFwiLCBkZWNvZGVyKTtcbiAgICBjdXJyZW50SGVpZ2h0ICs9IGRlbHRhSGVpZ2h0O1xuICAgIGxldCBjdXJyZW50V2lkdGggPSAwLFxuICAgICAgICB0b3RhbFdpZHRoID0gMDtcbiAgICBjb25zdCBmaXJzdFN5bWJvbCA9IGh1ZmZtYW4gPyBzeW1ib2xXaWR0aHMubGVuZ3RoIDogMDtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBkZWx0YVdpZHRoID0gaHVmZm1hbiA/IGh1ZmZtYW5UYWJsZXMudGFibGVEZWx0YVdpZHRoLmRlY29kZShodWZmbWFuSW5wdXQpIDogZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsIFwiSUFEV1wiLCBkZWNvZGVyKTtcblxuICAgICAgaWYgKGRlbHRhV2lkdGggPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRXaWR0aCArPSBkZWx0YVdpZHRoO1xuICAgICAgdG90YWxXaWR0aCArPSBjdXJyZW50V2lkdGg7XG4gICAgICBsZXQgYml0bWFwO1xuXG4gICAgICBpZiAocmVmaW5lbWVudCkge1xuICAgICAgICBjb25zdCBudW1iZXJPZkluc3RhbmNlcyA9IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBQUlcIiwgZGVjb2Rlcik7XG5cbiAgICAgICAgaWYgKG51bWJlck9mSW5zdGFuY2VzID4gMSkge1xuICAgICAgICAgIGJpdG1hcCA9IGRlY29kZVRleHRSZWdpb24oaHVmZm1hbiwgcmVmaW5lbWVudCwgY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0LCAwLCBudW1iZXJPZkluc3RhbmNlcywgMSwgc3ltYm9scy5jb25jYXQobmV3U3ltYm9scyksIHN5bWJvbENvZGVMZW5ndGgsIDAsIDAsIDEsIDAsIGh1ZmZtYW5UYWJsZXMsIHJlZmluZW1lbnRUZW1wbGF0ZUluZGV4LCByZWZpbmVtZW50QXQsIGRlY29kaW5nQ29udGV4dCwgMCwgaHVmZm1hbklucHV0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzeW1ib2xJZCA9IGRlY29kZUlBSUQoY29udGV4dENhY2hlLCBkZWNvZGVyLCBzeW1ib2xDb2RlTGVuZ3RoKTtcbiAgICAgICAgICBjb25zdCByZHggPSBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgXCJJQVJEWFwiLCBkZWNvZGVyKTtcbiAgICAgICAgICBjb25zdCByZHkgPSBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgXCJJQVJEWVwiLCBkZWNvZGVyKTtcbiAgICAgICAgICBjb25zdCBzeW1ib2wgPSBzeW1ib2xJZCA8IHN5bWJvbHMubGVuZ3RoID8gc3ltYm9sc1tzeW1ib2xJZF0gOiBuZXdTeW1ib2xzW3N5bWJvbElkIC0gc3ltYm9scy5sZW5ndGhdO1xuICAgICAgICAgIGJpdG1hcCA9IGRlY29kZVJlZmluZW1lbnQoY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0LCByZWZpbmVtZW50VGVtcGxhdGVJbmRleCwgc3ltYm9sLCByZHgsIHJkeSwgZmFsc2UsIHJlZmluZW1lbnRBdCwgZGVjb2RpbmdDb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5ld1N5bWJvbHMucHVzaChiaXRtYXApO1xuICAgICAgfSBlbHNlIGlmIChodWZmbWFuKSB7XG4gICAgICAgIHN5bWJvbFdpZHRocy5wdXNoKGN1cnJlbnRXaWR0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiaXRtYXAgPSBkZWNvZGVCaXRtYXAoZmFsc2UsIGN1cnJlbnRXaWR0aCwgY3VycmVudEhlaWdodCwgdGVtcGxhdGVJbmRleCwgZmFsc2UsIG51bGwsIGF0LCBkZWNvZGluZ0NvbnRleHQpO1xuICAgICAgICBuZXdTeW1ib2xzLnB1c2goYml0bWFwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaHVmZm1hbiAmJiAhcmVmaW5lbWVudCkge1xuICAgICAgY29uc3QgYml0bWFwU2l6ZSA9IGh1ZmZtYW5UYWJsZXMudGFibGVCaXRtYXBTaXplLmRlY29kZShodWZmbWFuSW5wdXQpO1xuICAgICAgaHVmZm1hbklucHV0LmJ5dGVBbGlnbigpO1xuICAgICAgbGV0IGNvbGxlY3RpdmVCaXRtYXA7XG5cbiAgICAgIGlmIChiaXRtYXBTaXplID09PSAwKSB7XG4gICAgICAgIGNvbGxlY3RpdmVCaXRtYXAgPSByZWFkVW5jb21wcmVzc2VkQml0bWFwKGh1ZmZtYW5JbnB1dCwgdG90YWxXaWR0aCwgY3VycmVudEhlaWdodCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvcmlnaW5hbEVuZCA9IGh1ZmZtYW5JbnB1dC5lbmQ7XG4gICAgICAgIGNvbnN0IGJpdG1hcEVuZCA9IGh1ZmZtYW5JbnB1dC5wb3NpdGlvbiArIGJpdG1hcFNpemU7XG4gICAgICAgIGh1ZmZtYW5JbnB1dC5lbmQgPSBiaXRtYXBFbmQ7XG4gICAgICAgIGNvbGxlY3RpdmVCaXRtYXAgPSBkZWNvZGVNTVJCaXRtYXAoaHVmZm1hbklucHV0LCB0b3RhbFdpZHRoLCBjdXJyZW50SGVpZ2h0LCBmYWxzZSk7XG4gICAgICAgIGh1ZmZtYW5JbnB1dC5lbmQgPSBvcmlnaW5hbEVuZDtcbiAgICAgICAgaHVmZm1hbklucHV0LnBvc2l0aW9uID0gYml0bWFwRW5kO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBudW1iZXJPZlN5bWJvbHNEZWNvZGVkID0gc3ltYm9sV2lkdGhzLmxlbmd0aDtcblxuICAgICAgaWYgKGZpcnN0U3ltYm9sID09PSBudW1iZXJPZlN5bWJvbHNEZWNvZGVkIC0gMSkge1xuICAgICAgICBuZXdTeW1ib2xzLnB1c2goY29sbGVjdGl2ZUJpdG1hcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgaSxcbiAgICAgICAgICAgIHksXG4gICAgICAgICAgICB4TWluID0gMCxcbiAgICAgICAgICAgIHhNYXgsXG4gICAgICAgICAgICBiaXRtYXBXaWR0aCxcbiAgICAgICAgICAgIHN5bWJvbEJpdG1hcDtcblxuICAgICAgICBmb3IgKGkgPSBmaXJzdFN5bWJvbDsgaSA8IG51bWJlck9mU3ltYm9sc0RlY29kZWQ7IGkrKykge1xuICAgICAgICAgIGJpdG1hcFdpZHRoID0gc3ltYm9sV2lkdGhzW2ldO1xuICAgICAgICAgIHhNYXggPSB4TWluICsgYml0bWFwV2lkdGg7XG4gICAgICAgICAgc3ltYm9sQml0bWFwID0gW107XG5cbiAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgY3VycmVudEhlaWdodDsgeSsrKSB7XG4gICAgICAgICAgICBzeW1ib2xCaXRtYXAucHVzaChjb2xsZWN0aXZlQml0bWFwW3ldLnN1YmFycmF5KHhNaW4sIHhNYXgpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXdTeW1ib2xzLnB1c2goc3ltYm9sQml0bWFwKTtcbiAgICAgICAgICB4TWluID0geE1heDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGV4cG9ydGVkU3ltYm9scyA9IFtdLFxuICAgICAgICBmbGFncyA9IFtdO1xuICBsZXQgY3VycmVudEZsYWcgPSBmYWxzZSxcbiAgICAgIGksXG4gICAgICBpaTtcbiAgY29uc3QgdG90YWxTeW1ib2xzTGVuZ3RoID0gc3ltYm9scy5sZW5ndGggKyBudW1iZXJPZk5ld1N5bWJvbHM7XG5cbiAgd2hpbGUgKGZsYWdzLmxlbmd0aCA8IHRvdGFsU3ltYm9sc0xlbmd0aCkge1xuICAgIGxldCBydW5MZW5ndGggPSBodWZmbWFuID8gdGFibGVCMS5kZWNvZGUoaHVmZm1hbklucHV0KSA6IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBRVhcIiwgZGVjb2Rlcik7XG5cbiAgICB3aGlsZSAocnVuTGVuZ3RoLS0pIHtcbiAgICAgIGZsYWdzLnB1c2goY3VycmVudEZsYWcpO1xuICAgIH1cblxuICAgIGN1cnJlbnRGbGFnID0gIWN1cnJlbnRGbGFnO1xuICB9XG5cbiAgZm9yIChpID0gMCwgaWkgPSBzeW1ib2xzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICBpZiAoZmxhZ3NbaV0pIHtcbiAgICAgIGV4cG9ydGVkU3ltYm9scy5wdXNoKHN5bWJvbHNbaV0pO1xuICAgIH1cbiAgfVxuXG4gIGZvciAobGV0IGogPSAwOyBqIDwgbnVtYmVyT2ZOZXdTeW1ib2xzOyBpKyssIGorKykge1xuICAgIGlmIChmbGFnc1tpXSkge1xuICAgICAgZXhwb3J0ZWRTeW1ib2xzLnB1c2gobmV3U3ltYm9sc1tqXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4cG9ydGVkU3ltYm9scztcbn1cblxuZnVuY3Rpb24gZGVjb2RlVGV4dFJlZ2lvbihodWZmbWFuLCByZWZpbmVtZW50LCB3aWR0aCwgaGVpZ2h0LCBkZWZhdWx0UGl4ZWxWYWx1ZSwgbnVtYmVyT2ZTeW1ib2xJbnN0YW5jZXMsIHN0cmlwU2l6ZSwgaW5wdXRTeW1ib2xzLCBzeW1ib2xDb2RlTGVuZ3RoLCB0cmFuc3Bvc2VkLCBkc09mZnNldCwgcmVmZXJlbmNlQ29ybmVyLCBjb21iaW5hdGlvbk9wZXJhdG9yLCBodWZmbWFuVGFibGVzLCByZWZpbmVtZW50VGVtcGxhdGVJbmRleCwgcmVmaW5lbWVudEF0LCBkZWNvZGluZ0NvbnRleHQsIGxvZ1N0cmlwU2l6ZSwgaHVmZm1hbklucHV0KSB7XG4gIGlmIChodWZmbWFuICYmIHJlZmluZW1lbnQpIHtcbiAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcInJlZmluZW1lbnQgd2l0aCBIdWZmbWFuIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4gIH1cblxuICBjb25zdCBiaXRtYXAgPSBbXTtcbiAgbGV0IGksIHJvdztcblxuICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHtcbiAgICByb3cgPSBuZXcgVWludDhBcnJheSh3aWR0aCk7XG5cbiAgICBpZiAoZGVmYXVsdFBpeGVsVmFsdWUpIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICByb3dbal0gPSBkZWZhdWx0UGl4ZWxWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBiaXRtYXAucHVzaChyb3cpO1xuICB9XG5cbiAgY29uc3QgZGVjb2RlciA9IGRlY29kaW5nQ29udGV4dC5kZWNvZGVyO1xuICBjb25zdCBjb250ZXh0Q2FjaGUgPSBkZWNvZGluZ0NvbnRleHQuY29udGV4dENhY2hlO1xuICBsZXQgc3RyaXBUID0gaHVmZm1hbiA/IC1odWZmbWFuVGFibGVzLnRhYmxlRGVsdGFULmRlY29kZShodWZmbWFuSW5wdXQpIDogLWRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBRFRcIiwgZGVjb2Rlcik7XG4gIGxldCBmaXJzdFMgPSAwO1xuICBpID0gMDtcblxuICB3aGlsZSAoaSA8IG51bWJlck9mU3ltYm9sSW5zdGFuY2VzKSB7XG4gICAgY29uc3QgZGVsdGFUID0gaHVmZm1hbiA/IGh1ZmZtYW5UYWJsZXMudGFibGVEZWx0YVQuZGVjb2RlKGh1ZmZtYW5JbnB1dCkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgXCJJQURUXCIsIGRlY29kZXIpO1xuICAgIHN0cmlwVCArPSBkZWx0YVQ7XG4gICAgY29uc3QgZGVsdGFGaXJzdFMgPSBodWZmbWFuID8gaHVmZm1hblRhYmxlcy50YWJsZUZpcnN0Uy5kZWNvZGUoaHVmZm1hbklucHV0KSA6IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBRlNcIiwgZGVjb2Rlcik7XG4gICAgZmlyc3RTICs9IGRlbHRhRmlyc3RTO1xuICAgIGxldCBjdXJyZW50UyA9IGZpcnN0UztcblxuICAgIGRvIHtcbiAgICAgIGxldCBjdXJyZW50VCA9IDA7XG5cbiAgICAgIGlmIChzdHJpcFNpemUgPiAxKSB7XG4gICAgICAgIGN1cnJlbnRUID0gaHVmZm1hbiA/IGh1ZmZtYW5JbnB1dC5yZWFkQml0cyhsb2dTdHJpcFNpemUpIDogZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsIFwiSUFJVFwiLCBkZWNvZGVyKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdCA9IHN0cmlwU2l6ZSAqIHN0cmlwVCArIGN1cnJlbnRUO1xuICAgICAgY29uc3Qgc3ltYm9sSWQgPSBodWZmbWFuID8gaHVmZm1hblRhYmxlcy5zeW1ib2xJRFRhYmxlLmRlY29kZShodWZmbWFuSW5wdXQpIDogZGVjb2RlSUFJRChjb250ZXh0Q2FjaGUsIGRlY29kZXIsIHN5bWJvbENvZGVMZW5ndGgpO1xuICAgICAgY29uc3QgYXBwbHlSZWZpbmVtZW50ID0gcmVmaW5lbWVudCAmJiAoaHVmZm1hbiA/IGh1ZmZtYW5JbnB1dC5yZWFkQml0KCkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgXCJJQVJJXCIsIGRlY29kZXIpKTtcbiAgICAgIGxldCBzeW1ib2xCaXRtYXAgPSBpbnB1dFN5bWJvbHNbc3ltYm9sSWRdO1xuICAgICAgbGV0IHN5bWJvbFdpZHRoID0gc3ltYm9sQml0bWFwWzBdLmxlbmd0aDtcbiAgICAgIGxldCBzeW1ib2xIZWlnaHQgPSBzeW1ib2xCaXRtYXAubGVuZ3RoO1xuXG4gICAgICBpZiAoYXBwbHlSZWZpbmVtZW50KSB7XG4gICAgICAgIGNvbnN0IHJkdyA9IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBUkRXXCIsIGRlY29kZXIpO1xuICAgICAgICBjb25zdCByZGggPSBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgXCJJQVJESFwiLCBkZWNvZGVyKTtcbiAgICAgICAgY29uc3QgcmR4ID0gZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsIFwiSUFSRFhcIiwgZGVjb2Rlcik7XG4gICAgICAgIGNvbnN0IHJkeSA9IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBUkRZXCIsIGRlY29kZXIpO1xuICAgICAgICBzeW1ib2xXaWR0aCArPSByZHc7XG4gICAgICAgIHN5bWJvbEhlaWdodCArPSByZGg7XG4gICAgICAgIHN5bWJvbEJpdG1hcCA9IGRlY29kZVJlZmluZW1lbnQoc3ltYm9sV2lkdGgsIHN5bWJvbEhlaWdodCwgcmVmaW5lbWVudFRlbXBsYXRlSW5kZXgsIHN5bWJvbEJpdG1hcCwgKHJkdyA+PiAxKSArIHJkeCwgKHJkaCA+PiAxKSArIHJkeSwgZmFsc2UsIHJlZmluZW1lbnRBdCwgZGVjb2RpbmdDb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2Zmc2V0VCA9IHQgLSAocmVmZXJlbmNlQ29ybmVyICYgMSA/IDAgOiBzeW1ib2xIZWlnaHQgLSAxKTtcbiAgICAgIGNvbnN0IG9mZnNldFMgPSBjdXJyZW50UyAtIChyZWZlcmVuY2VDb3JuZXIgJiAyID8gc3ltYm9sV2lkdGggLSAxIDogMCk7XG4gICAgICBsZXQgczIsIHQyLCBzeW1ib2xSb3c7XG5cbiAgICAgIGlmICh0cmFuc3Bvc2VkKSB7XG4gICAgICAgIGZvciAoczIgPSAwOyBzMiA8IHN5bWJvbEhlaWdodDsgczIrKykge1xuICAgICAgICAgIHJvdyA9IGJpdG1hcFtvZmZzZXRTICsgczJdO1xuXG4gICAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN5bWJvbFJvdyA9IHN5bWJvbEJpdG1hcFtzMl07XG4gICAgICAgICAgY29uc3QgbWF4V2lkdGggPSBNYXRoLm1pbih3aWR0aCAtIG9mZnNldFQsIHN5bWJvbFdpZHRoKTtcblxuICAgICAgICAgIHN3aXRjaCAoY29tYmluYXRpb25PcGVyYXRvcikge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBmb3IgKHQyID0gMDsgdDIgPCBtYXhXaWR0aDsgdDIrKykge1xuICAgICAgICAgICAgICAgIHJvd1tvZmZzZXRUICsgdDJdIHw9IHN5bWJvbFJvd1t0Ml07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBmb3IgKHQyID0gMDsgdDIgPCBtYXhXaWR0aDsgdDIrKykge1xuICAgICAgICAgICAgICAgIHJvd1tvZmZzZXRUICsgdDJdIF49IHN5bWJvbFJvd1t0Ml07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoYG9wZXJhdG9yICR7Y29tYmluYXRpb25PcGVyYXRvcn0gaXMgbm90IHN1cHBvcnRlZGApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRTICs9IHN5bWJvbEhlaWdodCAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHQyID0gMDsgdDIgPCBzeW1ib2xIZWlnaHQ7IHQyKyspIHtcbiAgICAgICAgICByb3cgPSBiaXRtYXBbb2Zmc2V0VCArIHQyXTtcblxuICAgICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzeW1ib2xSb3cgPSBzeW1ib2xCaXRtYXBbdDJdO1xuXG4gICAgICAgICAgc3dpdGNoIChjb21iaW5hdGlvbk9wZXJhdG9yKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGZvciAoczIgPSAwOyBzMiA8IHN5bWJvbFdpZHRoOyBzMisrKSB7XG4gICAgICAgICAgICAgICAgcm93W29mZnNldFMgKyBzMl0gfD0gc3ltYm9sUm93W3MyXTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIGZvciAoczIgPSAwOyBzMiA8IHN5bWJvbFdpZHRoOyBzMisrKSB7XG4gICAgICAgICAgICAgICAgcm93W29mZnNldFMgKyBzMl0gXj0gc3ltYm9sUm93W3MyXTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihgb3BlcmF0b3IgJHtjb21iaW5hdGlvbk9wZXJhdG9yfSBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudFMgKz0gc3ltYm9sV2lkdGggLSAxO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgICBjb25zdCBkZWx0YVMgPSBodWZmbWFuID8gaHVmZm1hblRhYmxlcy50YWJsZURlbHRhUy5kZWNvZGUoaHVmZm1hbklucHV0KSA6IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBRFNcIiwgZGVjb2Rlcik7XG5cbiAgICAgIGlmIChkZWx0YVMgPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRTICs9IGRlbHRhUyArIGRzT2Zmc2V0O1xuICAgIH0gd2hpbGUgKHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIGJpdG1hcDtcbn1cblxuZnVuY3Rpb24gZGVjb2RlUGF0dGVybkRpY3Rpb25hcnkobW1yLCBwYXR0ZXJuV2lkdGgsIHBhdHRlcm5IZWlnaHQsIG1heFBhdHRlcm5JbmRleCwgdGVtcGxhdGUsIGRlY29kaW5nQ29udGV4dCkge1xuICBjb25zdCBhdCA9IFtdO1xuXG4gIGlmICghbW1yKSB7XG4gICAgYXQucHVzaCh7XG4gICAgICB4OiAtcGF0dGVybldpZHRoLFxuICAgICAgeTogMFxuICAgIH0pO1xuXG4gICAgaWYgKHRlbXBsYXRlID09PSAwKSB7XG4gICAgICBhdC5wdXNoKHtcbiAgICAgICAgeDogLTMsXG4gICAgICAgIHk6IC0xXG4gICAgICB9LCB7XG4gICAgICAgIHg6IDIsXG4gICAgICAgIHk6IC0yXG4gICAgICB9LCB7XG4gICAgICAgIHg6IC0yLFxuICAgICAgICB5OiAtMlxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY29sbGVjdGl2ZVdpZHRoID0gKG1heFBhdHRlcm5JbmRleCArIDEpICogcGF0dGVybldpZHRoO1xuICBjb25zdCBjb2xsZWN0aXZlQml0bWFwID0gZGVjb2RlQml0bWFwKG1tciwgY29sbGVjdGl2ZVdpZHRoLCBwYXR0ZXJuSGVpZ2h0LCB0ZW1wbGF0ZSwgZmFsc2UsIG51bGwsIGF0LCBkZWNvZGluZ0NvbnRleHQpO1xuICBjb25zdCBwYXR0ZXJucyA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IG1heFBhdHRlcm5JbmRleDsgaSsrKSB7XG4gICAgY29uc3QgcGF0dGVybkJpdG1hcCA9IFtdO1xuICAgIGNvbnN0IHhNaW4gPSBwYXR0ZXJuV2lkdGggKiBpO1xuICAgIGNvbnN0IHhNYXggPSB4TWluICsgcGF0dGVybldpZHRoO1xuXG4gICAgZm9yIChsZXQgeSA9IDA7IHkgPCBwYXR0ZXJuSGVpZ2h0OyB5KyspIHtcbiAgICAgIHBhdHRlcm5CaXRtYXAucHVzaChjb2xsZWN0aXZlQml0bWFwW3ldLnN1YmFycmF5KHhNaW4sIHhNYXgpKTtcbiAgICB9XG5cbiAgICBwYXR0ZXJucy5wdXNoKHBhdHRlcm5CaXRtYXApO1xuICB9XG5cbiAgcmV0dXJuIHBhdHRlcm5zO1xufVxuXG5mdW5jdGlvbiBkZWNvZGVIYWxmdG9uZVJlZ2lvbihtbXIsIHBhdHRlcm5zLCB0ZW1wbGF0ZSwgcmVnaW9uV2lkdGgsIHJlZ2lvbkhlaWdodCwgZGVmYXVsdFBpeGVsVmFsdWUsIGVuYWJsZVNraXAsIGNvbWJpbmF0aW9uT3BlcmF0b3IsIGdyaWRXaWR0aCwgZ3JpZEhlaWdodCwgZ3JpZE9mZnNldFgsIGdyaWRPZmZzZXRZLCBncmlkVmVjdG9yWCwgZ3JpZFZlY3RvclksIGRlY29kaW5nQ29udGV4dCkge1xuICBjb25zdCBza2lwID0gbnVsbDtcblxuICBpZiAoZW5hYmxlU2tpcCkge1xuICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwic2tpcCBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuICB9XG5cbiAgaWYgKGNvbWJpbmF0aW9uT3BlcmF0b3IgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihgb3BlcmF0b3IgXCIke2NvbWJpbmF0aW9uT3BlcmF0b3J9XCIgaXMgbm90IHN1cHBvcnRlZCBpbiBoYWxmdG9uZSByZWdpb25gKTtcbiAgfVxuXG4gIGNvbnN0IHJlZ2lvbkJpdG1hcCA9IFtdO1xuICBsZXQgaSwgaiwgcm93O1xuXG4gIGZvciAoaSA9IDA7IGkgPCByZWdpb25IZWlnaHQ7IGkrKykge1xuICAgIHJvdyA9IG5ldyBVaW50OEFycmF5KHJlZ2lvbldpZHRoKTtcblxuICAgIGlmIChkZWZhdWx0UGl4ZWxWYWx1ZSkge1xuICAgICAgZm9yIChqID0gMDsgaiA8IHJlZ2lvbldpZHRoOyBqKyspIHtcbiAgICAgICAgcm93W2pdID0gZGVmYXVsdFBpeGVsVmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVnaW9uQml0bWFwLnB1c2gocm93KTtcbiAgfVxuXG4gIGNvbnN0IG51bWJlck9mUGF0dGVybnMgPSBwYXR0ZXJucy5sZW5ndGg7XG4gIGNvbnN0IHBhdHRlcm4wID0gcGF0dGVybnNbMF07XG4gIGNvbnN0IHBhdHRlcm5XaWR0aCA9IHBhdHRlcm4wWzBdLmxlbmd0aCxcbiAgICAgICAgcGF0dGVybkhlaWdodCA9IHBhdHRlcm4wLmxlbmd0aDtcbiAgY29uc3QgYml0c1BlclZhbHVlID0gKDAsIF9jb3JlX3V0aWxzLmxvZzIpKG51bWJlck9mUGF0dGVybnMpO1xuICBjb25zdCBhdCA9IFtdO1xuXG4gIGlmICghbW1yKSB7XG4gICAgYXQucHVzaCh7XG4gICAgICB4OiB0ZW1wbGF0ZSA8PSAxID8gMyA6IDIsXG4gICAgICB5OiAtMVxuICAgIH0pO1xuXG4gICAgaWYgKHRlbXBsYXRlID09PSAwKSB7XG4gICAgICBhdC5wdXNoKHtcbiAgICAgICAgeDogLTMsXG4gICAgICAgIHk6IC0xXG4gICAgICB9LCB7XG4gICAgICAgIHg6IDIsXG4gICAgICAgIHk6IC0yXG4gICAgICB9LCB7XG4gICAgICAgIHg6IC0yLFxuICAgICAgICB5OiAtMlxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZ3JheVNjYWxlQml0UGxhbmVzID0gW107XG4gIGxldCBtbXJJbnB1dCwgYml0bWFwO1xuXG4gIGlmIChtbXIpIHtcbiAgICBtbXJJbnB1dCA9IG5ldyBSZWFkZXIoZGVjb2RpbmdDb250ZXh0LmRhdGEsIGRlY29kaW5nQ29udGV4dC5zdGFydCwgZGVjb2RpbmdDb250ZXh0LmVuZCk7XG4gIH1cblxuICBmb3IgKGkgPSBiaXRzUGVyVmFsdWUgLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChtbXIpIHtcbiAgICAgIGJpdG1hcCA9IGRlY29kZU1NUkJpdG1hcChtbXJJbnB1dCwgZ3JpZFdpZHRoLCBncmlkSGVpZ2h0LCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYml0bWFwID0gZGVjb2RlQml0bWFwKGZhbHNlLCBncmlkV2lkdGgsIGdyaWRIZWlnaHQsIHRlbXBsYXRlLCBmYWxzZSwgc2tpcCwgYXQsIGRlY29kaW5nQ29udGV4dCk7XG4gICAgfVxuXG4gICAgZ3JheVNjYWxlQml0UGxhbmVzW2ldID0gYml0bWFwO1xuICB9XG5cbiAgbGV0IG1nLCBuZywgYml0LCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5CaXRtYXAsIHgsIHksIHBhdHRlcm5Sb3csIHJlZ2lvblJvdztcblxuICBmb3IgKG1nID0gMDsgbWcgPCBncmlkSGVpZ2h0OyBtZysrKSB7XG4gICAgZm9yIChuZyA9IDA7IG5nIDwgZ3JpZFdpZHRoOyBuZysrKSB7XG4gICAgICBiaXQgPSAwO1xuICAgICAgcGF0dGVybkluZGV4ID0gMDtcblxuICAgICAgZm9yIChqID0gYml0c1BlclZhbHVlIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgYml0IF49IGdyYXlTY2FsZUJpdFBsYW5lc1tqXVttZ11bbmddO1xuICAgICAgICBwYXR0ZXJuSW5kZXggfD0gYml0IDw8IGo7XG4gICAgICB9XG5cbiAgICAgIHBhdHRlcm5CaXRtYXAgPSBwYXR0ZXJuc1twYXR0ZXJuSW5kZXhdO1xuICAgICAgeCA9IGdyaWRPZmZzZXRYICsgbWcgKiBncmlkVmVjdG9yWSArIG5nICogZ3JpZFZlY3RvclggPj4gODtcbiAgICAgIHkgPSBncmlkT2Zmc2V0WSArIG1nICogZ3JpZFZlY3RvclggLSBuZyAqIGdyaWRWZWN0b3JZID4+IDg7XG5cbiAgICAgIGlmICh4ID49IDAgJiYgeCArIHBhdHRlcm5XaWR0aCA8PSByZWdpb25XaWR0aCAmJiB5ID49IDAgJiYgeSArIHBhdHRlcm5IZWlnaHQgPD0gcmVnaW9uSGVpZ2h0KSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXR0ZXJuSGVpZ2h0OyBpKyspIHtcbiAgICAgICAgICByZWdpb25Sb3cgPSByZWdpb25CaXRtYXBbeSArIGldO1xuICAgICAgICAgIHBhdHRlcm5Sb3cgPSBwYXR0ZXJuQml0bWFwW2ldO1xuXG4gICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBhdHRlcm5XaWR0aDsgaisrKSB7XG4gICAgICAgICAgICByZWdpb25Sb3dbeCArIGpdIHw9IHBhdHRlcm5Sb3dbal07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcmVnaW9uWCwgcmVnaW9uWTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGF0dGVybkhlaWdodDsgaSsrKSB7XG4gICAgICAgICAgcmVnaW9uWSA9IHkgKyBpO1xuXG4gICAgICAgICAgaWYgKHJlZ2lvblkgPCAwIHx8IHJlZ2lvblkgPj0gcmVnaW9uSGVpZ2h0KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZWdpb25Sb3cgPSByZWdpb25CaXRtYXBbcmVnaW9uWV07XG4gICAgICAgICAgcGF0dGVyblJvdyA9IHBhdHRlcm5CaXRtYXBbaV07XG5cbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcGF0dGVybldpZHRoOyBqKyspIHtcbiAgICAgICAgICAgIHJlZ2lvblggPSB4ICsgajtcblxuICAgICAgICAgICAgaWYgKHJlZ2lvblggPj0gMCAmJiByZWdpb25YIDwgcmVnaW9uV2lkdGgpIHtcbiAgICAgICAgICAgICAgcmVnaW9uUm93W3JlZ2lvblhdIHw9IHBhdHRlcm5Sb3dbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlZ2lvbkJpdG1hcDtcbn1cblxuZnVuY3Rpb24gcmVhZFNlZ21lbnRIZWFkZXIoZGF0YSwgc3RhcnQpIHtcbiAgY29uc3Qgc2VnbWVudEhlYWRlciA9IHt9O1xuICBzZWdtZW50SGVhZGVyLm51bWJlciA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBzdGFydCk7XG4gIGNvbnN0IGZsYWdzID0gZGF0YVtzdGFydCArIDRdO1xuICBjb25zdCBzZWdtZW50VHlwZSA9IGZsYWdzICYgMHgzZjtcblxuICBpZiAoIVNlZ21lbnRUeXBlc1tzZWdtZW50VHlwZV0pIHtcbiAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcImludmFsaWQgc2VnbWVudCB0eXBlOiBcIiArIHNlZ21lbnRUeXBlKTtcbiAgfVxuXG4gIHNlZ21lbnRIZWFkZXIudHlwZSA9IHNlZ21lbnRUeXBlO1xuICBzZWdtZW50SGVhZGVyLnR5cGVOYW1lID0gU2VnbWVudFR5cGVzW3NlZ21lbnRUeXBlXTtcbiAgc2VnbWVudEhlYWRlci5kZWZlcnJlZE5vblJldGFpbiA9ICEhKGZsYWdzICYgMHg4MCk7XG4gIGNvbnN0IHBhZ2VBc3NvY2lhdGlvbkZpZWxkU2l6ZSA9ICEhKGZsYWdzICYgMHg0MCk7XG4gIGNvbnN0IHJlZmVycmVkRmxhZ3MgPSBkYXRhW3N0YXJ0ICsgNV07XG4gIGxldCByZWZlcnJlZFRvQ291bnQgPSByZWZlcnJlZEZsYWdzID4+IDUgJiA3O1xuICBjb25zdCByZXRhaW5CaXRzID0gW3JlZmVycmVkRmxhZ3MgJiAzMV07XG4gIGxldCBwb3NpdGlvbiA9IHN0YXJ0ICsgNjtcblxuICBpZiAocmVmZXJyZWRGbGFncyA9PT0gNykge1xuICAgIHJlZmVycmVkVG9Db3VudCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiAtIDEpICYgMHgxZmZmZmZmZjtcbiAgICBwb3NpdGlvbiArPSAzO1xuICAgIGxldCBieXRlcyA9IHJlZmVycmVkVG9Db3VudCArIDcgPj4gMztcbiAgICByZXRhaW5CaXRzWzBdID0gZGF0YVtwb3NpdGlvbisrXTtcblxuICAgIHdoaWxlICgtLWJ5dGVzID4gMCkge1xuICAgICAgcmV0YWluQml0cy5wdXNoKGRhdGFbcG9zaXRpb24rK10pO1xuICAgIH1cbiAgfSBlbHNlIGlmIChyZWZlcnJlZEZsYWdzID09PSA1IHx8IHJlZmVycmVkRmxhZ3MgPT09IDYpIHtcbiAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcImludmFsaWQgcmVmZXJyZWQtdG8gZmxhZ3NcIik7XG4gIH1cblxuICBzZWdtZW50SGVhZGVyLnJldGFpbkJpdHMgPSByZXRhaW5CaXRzO1xuICBsZXQgcmVmZXJyZWRUb1NlZ21lbnROdW1iZXJTaXplID0gNDtcblxuICBpZiAoc2VnbWVudEhlYWRlci5udW1iZXIgPD0gMjU2KSB7XG4gICAgcmVmZXJyZWRUb1NlZ21lbnROdW1iZXJTaXplID0gMTtcbiAgfSBlbHNlIGlmIChzZWdtZW50SGVhZGVyLm51bWJlciA8PSA2NTUzNikge1xuICAgIHJlZmVycmVkVG9TZWdtZW50TnVtYmVyU2l6ZSA9IDI7XG4gIH1cblxuICBjb25zdCByZWZlcnJlZFRvID0gW107XG4gIGxldCBpLCBpaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgcmVmZXJyZWRUb0NvdW50OyBpKyspIHtcbiAgICBsZXQgbnVtYmVyO1xuXG4gICAgaWYgKHJlZmVycmVkVG9TZWdtZW50TnVtYmVyU2l6ZSA9PT0gMSkge1xuICAgICAgbnVtYmVyID0gZGF0YVtwb3NpdGlvbl07XG4gICAgfSBlbHNlIGlmIChyZWZlcnJlZFRvU2VnbWVudE51bWJlclNpemUgPT09IDIpIHtcbiAgICAgIG51bWJlciA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG51bWJlciA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgcmVmZXJyZWRUby5wdXNoKG51bWJlcik7XG4gICAgcG9zaXRpb24gKz0gcmVmZXJyZWRUb1NlZ21lbnROdW1iZXJTaXplO1xuICB9XG5cbiAgc2VnbWVudEhlYWRlci5yZWZlcnJlZFRvID0gcmVmZXJyZWRUbztcblxuICBpZiAoIXBhZ2VBc3NvY2lhdGlvbkZpZWxkU2l6ZSkge1xuICAgIHNlZ21lbnRIZWFkZXIucGFnZUFzc29jaWF0aW9uID0gZGF0YVtwb3NpdGlvbisrXTtcbiAgfSBlbHNlIHtcbiAgICBzZWdtZW50SGVhZGVyLnBhZ2VBc3NvY2lhdGlvbiA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbik7XG4gICAgcG9zaXRpb24gKz0gNDtcbiAgfVxuXG4gIHNlZ21lbnRIZWFkZXIubGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKTtcbiAgcG9zaXRpb24gKz0gNDtcblxuICBpZiAoc2VnbWVudEhlYWRlci5sZW5ndGggPT09IDB4ZmZmZmZmZmYpIHtcbiAgICBpZiAoc2VnbWVudFR5cGUgPT09IDM4KSB7XG4gICAgICBjb25zdCBnZW5lcmljUmVnaW9uSW5mbyA9IHJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oZGF0YSwgcG9zaXRpb24pO1xuICAgICAgY29uc3QgZ2VuZXJpY1JlZ2lvblNlZ21lbnRGbGFncyA9IGRhdGFbcG9zaXRpb24gKyBSZWdpb25TZWdtZW50SW5mb3JtYXRpb25GaWVsZExlbmd0aF07XG4gICAgICBjb25zdCBnZW5lcmljUmVnaW9uTW1yID0gISEoZ2VuZXJpY1JlZ2lvblNlZ21lbnRGbGFncyAmIDEpO1xuICAgICAgY29uc3Qgc2VhcmNoUGF0dGVybkxlbmd0aCA9IDY7XG4gICAgICBjb25zdCBzZWFyY2hQYXR0ZXJuID0gbmV3IFVpbnQ4QXJyYXkoc2VhcmNoUGF0dGVybkxlbmd0aCk7XG5cbiAgICAgIGlmICghZ2VuZXJpY1JlZ2lvbk1tcikge1xuICAgICAgICBzZWFyY2hQYXR0ZXJuWzBdID0gMHhmZjtcbiAgICAgICAgc2VhcmNoUGF0dGVyblsxXSA9IDB4YWM7XG4gICAgICB9XG5cbiAgICAgIHNlYXJjaFBhdHRlcm5bMl0gPSBnZW5lcmljUmVnaW9uSW5mby5oZWlnaHQgPj4+IDI0ICYgMHhmZjtcbiAgICAgIHNlYXJjaFBhdHRlcm5bM10gPSBnZW5lcmljUmVnaW9uSW5mby5oZWlnaHQgPj4gMTYgJiAweGZmO1xuICAgICAgc2VhcmNoUGF0dGVybls0XSA9IGdlbmVyaWNSZWdpb25JbmZvLmhlaWdodCA+PiA4ICYgMHhmZjtcbiAgICAgIHNlYXJjaFBhdHRlcm5bNV0gPSBnZW5lcmljUmVnaW9uSW5mby5oZWlnaHQgJiAweGZmO1xuXG4gICAgICBmb3IgKGkgPSBwb3NpdGlvbiwgaWkgPSBkYXRhLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgbGV0IGogPSAwO1xuXG4gICAgICAgIHdoaWxlIChqIDwgc2VhcmNoUGF0dGVybkxlbmd0aCAmJiBzZWFyY2hQYXR0ZXJuW2pdID09PSBkYXRhW2kgKyBqXSkge1xuICAgICAgICAgIGorKztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChqID09PSBzZWFyY2hQYXR0ZXJuTGVuZ3RoKSB7XG4gICAgICAgICAgc2VnbWVudEhlYWRlci5sZW5ndGggPSBpICsgc2VhcmNoUGF0dGVybkxlbmd0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc2VnbWVudEhlYWRlci5sZW5ndGggPT09IDB4ZmZmZmZmZmYpIHtcbiAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoXCJzZWdtZW50IGVuZCB3YXMgbm90IGZvdW5kXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcImludmFsaWQgdW5rbm93biBzZWdtZW50IGxlbmd0aFwiKTtcbiAgICB9XG4gIH1cblxuICBzZWdtZW50SGVhZGVyLmhlYWRlckVuZCA9IHBvc2l0aW9uO1xuICByZXR1cm4gc2VnbWVudEhlYWRlcjtcbn1cblxuZnVuY3Rpb24gcmVhZFNlZ21lbnRzKGhlYWRlciwgZGF0YSwgc3RhcnQsIGVuZCkge1xuICBjb25zdCBzZWdtZW50cyA9IFtdO1xuICBsZXQgcG9zaXRpb24gPSBzdGFydDtcblxuICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHtcbiAgICBjb25zdCBzZWdtZW50SGVhZGVyID0gcmVhZFNlZ21lbnRIZWFkZXIoZGF0YSwgcG9zaXRpb24pO1xuICAgIHBvc2l0aW9uID0gc2VnbWVudEhlYWRlci5oZWFkZXJFbmQ7XG4gICAgY29uc3Qgc2VnbWVudCA9IHtcbiAgICAgIGhlYWRlcjogc2VnbWVudEhlYWRlcixcbiAgICAgIGRhdGFcbiAgICB9O1xuXG4gICAgaWYgKCFoZWFkZXIucmFuZG9tQWNjZXNzKSB7XG4gICAgICBzZWdtZW50LnN0YXJ0ID0gcG9zaXRpb247XG4gICAgICBwb3NpdGlvbiArPSBzZWdtZW50SGVhZGVyLmxlbmd0aDtcbiAgICAgIHNlZ21lbnQuZW5kID0gcG9zaXRpb247XG4gICAgfVxuXG4gICAgc2VnbWVudHMucHVzaChzZWdtZW50KTtcblxuICAgIGlmIChzZWdtZW50SGVhZGVyLnR5cGUgPT09IDUxKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoaGVhZGVyLnJhbmRvbUFjY2Vzcykge1xuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHNlZ21lbnRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHNlZ21lbnRzW2ldLnN0YXJ0ID0gcG9zaXRpb247XG4gICAgICBwb3NpdGlvbiArPSBzZWdtZW50c1tpXS5oZWFkZXIubGVuZ3RoO1xuICAgICAgc2VnbWVudHNbaV0uZW5kID0gcG9zaXRpb247XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNlZ21lbnRzO1xufVxuXG5mdW5jdGlvbiByZWFkUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uKGRhdGEsIHN0YXJ0KSB7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBzdGFydCksXG4gICAgaGVpZ2h0OiAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgc3RhcnQgKyA0KSxcbiAgICB4OiAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgc3RhcnQgKyA4KSxcbiAgICB5OiAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgc3RhcnQgKyAxMiksXG4gICAgY29tYmluYXRpb25PcGVyYXRvcjogZGF0YVtzdGFydCArIDE2XSAmIDdcbiAgfTtcbn1cblxuY29uc3QgUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uRmllbGRMZW5ndGggPSAxNztcblxuZnVuY3Rpb24gcHJvY2Vzc1NlZ21lbnQoc2VnbWVudCwgdmlzaXRvcikge1xuICBjb25zdCBoZWFkZXIgPSBzZWdtZW50LmhlYWRlcjtcbiAgY29uc3QgZGF0YSA9IHNlZ21lbnQuZGF0YSxcbiAgICAgICAgZW5kID0gc2VnbWVudC5lbmQ7XG4gIGxldCBwb3NpdGlvbiA9IHNlZ21lbnQuc3RhcnQ7XG4gIGxldCBhcmdzLCBhdCwgaSwgYXRMZW5ndGg7XG5cbiAgc3dpdGNoIChoZWFkZXIudHlwZSkge1xuICAgIGNhc2UgMDpcbiAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSB7fTtcbiAgICAgIGNvbnN0IGRpY3Rpb25hcnlGbGFncyA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbik7XG4gICAgICBkaWN0aW9uYXJ5Lmh1ZmZtYW4gPSAhIShkaWN0aW9uYXJ5RmxhZ3MgJiAxKTtcbiAgICAgIGRpY3Rpb25hcnkucmVmaW5lbWVudCA9ICEhKGRpY3Rpb25hcnlGbGFncyAmIDIpO1xuICAgICAgZGljdGlvbmFyeS5odWZmbWFuREhTZWxlY3RvciA9IGRpY3Rpb25hcnlGbGFncyA+PiAyICYgMztcbiAgICAgIGRpY3Rpb25hcnkuaHVmZm1hbkRXU2VsZWN0b3IgPSBkaWN0aW9uYXJ5RmxhZ3MgPj4gNCAmIDM7XG4gICAgICBkaWN0aW9uYXJ5LmJpdG1hcFNpemVTZWxlY3RvciA9IGRpY3Rpb25hcnlGbGFncyA+PiA2ICYgMTtcbiAgICAgIGRpY3Rpb25hcnkuYWdncmVnYXRpb25JbnN0YW5jZXNTZWxlY3RvciA9IGRpY3Rpb25hcnlGbGFncyA+PiA3ICYgMTtcbiAgICAgIGRpY3Rpb25hcnkuYml0bWFwQ29kaW5nQ29udGV4dFVzZWQgPSAhIShkaWN0aW9uYXJ5RmxhZ3MgJiAyNTYpO1xuICAgICAgZGljdGlvbmFyeS5iaXRtYXBDb2RpbmdDb250ZXh0UmV0YWluZWQgPSAhIShkaWN0aW9uYXJ5RmxhZ3MgJiA1MTIpO1xuICAgICAgZGljdGlvbmFyeS50ZW1wbGF0ZSA9IGRpY3Rpb25hcnlGbGFncyA+PiAxMCAmIDM7XG4gICAgICBkaWN0aW9uYXJ5LnJlZmluZW1lbnRUZW1wbGF0ZSA9IGRpY3Rpb25hcnlGbGFncyA+PiAxMiAmIDE7XG4gICAgICBwb3NpdGlvbiArPSAyO1xuXG4gICAgICBpZiAoIWRpY3Rpb25hcnkuaHVmZm1hbikge1xuICAgICAgICBhdExlbmd0aCA9IGRpY3Rpb25hcnkudGVtcGxhdGUgPT09IDAgPyA0IDogMTtcbiAgICAgICAgYXQgPSBbXTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXRMZW5ndGg7IGkrKykge1xuICAgICAgICAgIGF0LnB1c2goe1xuICAgICAgICAgICAgeDogKDAsIF9jb3JlX3V0aWxzLnJlYWRJbnQ4KShkYXRhLCBwb3NpdGlvbiksXG4gICAgICAgICAgICB5OiAoMCwgX2NvcmVfdXRpbHMucmVhZEludDgpKGRhdGEsIHBvc2l0aW9uICsgMSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwb3NpdGlvbiArPSAyO1xuICAgICAgICB9XG5cbiAgICAgICAgZGljdGlvbmFyeS5hdCA9IGF0O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGljdGlvbmFyeS5yZWZpbmVtZW50ICYmICFkaWN0aW9uYXJ5LnJlZmluZW1lbnRUZW1wbGF0ZSkge1xuICAgICAgICBhdCA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHtcbiAgICAgICAgICBhdC5wdXNoKHtcbiAgICAgICAgICAgIHg6ICgwLCBfY29yZV91dGlscy5yZWFkSW50OCkoZGF0YSwgcG9zaXRpb24pLFxuICAgICAgICAgICAgeTogKDAsIF9jb3JlX3V0aWxzLnJlYWRJbnQ4KShkYXRhLCBwb3NpdGlvbiArIDEpXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcG9zaXRpb24gKz0gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpY3Rpb25hcnkucmVmaW5lbWVudEF0ID0gYXQ7XG4gICAgICB9XG5cbiAgICAgIGRpY3Rpb25hcnkubnVtYmVyT2ZFeHBvcnRlZFN5bWJvbHMgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICAgIGRpY3Rpb25hcnkubnVtYmVyT2ZOZXdTeW1ib2xzID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgIHBvc2l0aW9uICs9IDQ7XG4gICAgICBhcmdzID0gW2RpY3Rpb25hcnksIGhlYWRlci5udW1iZXIsIGhlYWRlci5yZWZlcnJlZFRvLCBkYXRhLCBwb3NpdGlvbiwgZW5kXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSA2OlxuICAgIGNhc2UgNzpcbiAgICAgIGNvbnN0IHRleHRSZWdpb24gPSB7fTtcbiAgICAgIHRleHRSZWdpb24uaW5mbyA9IHJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oZGF0YSwgcG9zaXRpb24pO1xuICAgICAgcG9zaXRpb24gKz0gUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uRmllbGRMZW5ndGg7XG4gICAgICBjb25zdCB0ZXh0UmVnaW9uU2VnbWVudEZsYWdzID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgIHBvc2l0aW9uICs9IDI7XG4gICAgICB0ZXh0UmVnaW9uLmh1ZmZtYW4gPSAhISh0ZXh0UmVnaW9uU2VnbWVudEZsYWdzICYgMSk7XG4gICAgICB0ZXh0UmVnaW9uLnJlZmluZW1lbnQgPSAhISh0ZXh0UmVnaW9uU2VnbWVudEZsYWdzICYgMik7XG4gICAgICB0ZXh0UmVnaW9uLmxvZ1N0cmlwU2l6ZSA9IHRleHRSZWdpb25TZWdtZW50RmxhZ3MgPj4gMiAmIDM7XG4gICAgICB0ZXh0UmVnaW9uLnN0cmlwU2l6ZSA9IDEgPDwgdGV4dFJlZ2lvbi5sb2dTdHJpcFNpemU7XG4gICAgICB0ZXh0UmVnaW9uLnJlZmVyZW5jZUNvcm5lciA9IHRleHRSZWdpb25TZWdtZW50RmxhZ3MgPj4gNCAmIDM7XG4gICAgICB0ZXh0UmVnaW9uLnRyYW5zcG9zZWQgPSAhISh0ZXh0UmVnaW9uU2VnbWVudEZsYWdzICYgNjQpO1xuICAgICAgdGV4dFJlZ2lvbi5jb21iaW5hdGlvbk9wZXJhdG9yID0gdGV4dFJlZ2lvblNlZ21lbnRGbGFncyA+PiA3ICYgMztcbiAgICAgIHRleHRSZWdpb24uZGVmYXVsdFBpeGVsVmFsdWUgPSB0ZXh0UmVnaW9uU2VnbWVudEZsYWdzID4+IDkgJiAxO1xuICAgICAgdGV4dFJlZ2lvbi5kc09mZnNldCA9IHRleHRSZWdpb25TZWdtZW50RmxhZ3MgPDwgMTcgPj4gMjc7XG4gICAgICB0ZXh0UmVnaW9uLnJlZmluZW1lbnRUZW1wbGF0ZSA9IHRleHRSZWdpb25TZWdtZW50RmxhZ3MgPj4gMTUgJiAxO1xuXG4gICAgICBpZiAodGV4dFJlZ2lvbi5odWZmbWFuKSB7XG4gICAgICAgIGNvbnN0IHRleHRSZWdpb25IdWZmbWFuRmxhZ3MgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICBwb3NpdGlvbiArPSAyO1xuICAgICAgICB0ZXh0UmVnaW9uLmh1ZmZtYW5GUyA9IHRleHRSZWdpb25IdWZmbWFuRmxhZ3MgJiAzO1xuICAgICAgICB0ZXh0UmVnaW9uLmh1ZmZtYW5EUyA9IHRleHRSZWdpb25IdWZmbWFuRmxhZ3MgPj4gMiAmIDM7XG4gICAgICAgIHRleHRSZWdpb24uaHVmZm1hbkRUID0gdGV4dFJlZ2lvbkh1ZmZtYW5GbGFncyA+PiA0ICYgMztcbiAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuUmVmaW5lbWVudERXID0gdGV4dFJlZ2lvbkh1ZmZtYW5GbGFncyA+PiA2ICYgMztcbiAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuUmVmaW5lbWVudERIID0gdGV4dFJlZ2lvbkh1ZmZtYW5GbGFncyA+PiA4ICYgMztcbiAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuUmVmaW5lbWVudERYID0gdGV4dFJlZ2lvbkh1ZmZtYW5GbGFncyA+PiAxMCAmIDM7XG4gICAgICAgIHRleHRSZWdpb24uaHVmZm1hblJlZmluZW1lbnREWSA9IHRleHRSZWdpb25IdWZmbWFuRmxhZ3MgPj4gMTIgJiAzO1xuICAgICAgICB0ZXh0UmVnaW9uLmh1ZmZtYW5SZWZpbmVtZW50U2l6ZVNlbGVjdG9yID0gISEodGV4dFJlZ2lvbkh1ZmZtYW5GbGFncyAmIDB4NDAwMCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0ZXh0UmVnaW9uLnJlZmluZW1lbnQgJiYgIXRleHRSZWdpb24ucmVmaW5lbWVudFRlbXBsYXRlKSB7XG4gICAgICAgIGF0ID0gW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykge1xuICAgICAgICAgIGF0LnB1c2goe1xuICAgICAgICAgICAgeDogKDAsIF9jb3JlX3V0aWxzLnJlYWRJbnQ4KShkYXRhLCBwb3NpdGlvbiksXG4gICAgICAgICAgICB5OiAoMCwgX2NvcmVfdXRpbHMucmVhZEludDgpKGRhdGEsIHBvc2l0aW9uICsgMSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwb3NpdGlvbiArPSAyO1xuICAgICAgICB9XG5cbiAgICAgICAgdGV4dFJlZ2lvbi5yZWZpbmVtZW50QXQgPSBhdDtcbiAgICAgIH1cblxuICAgICAgdGV4dFJlZ2lvbi5udW1iZXJPZlN5bWJvbEluc3RhbmNlcyA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbik7XG4gICAgICBwb3NpdGlvbiArPSA0O1xuICAgICAgYXJncyA9IFt0ZXh0UmVnaW9uLCBoZWFkZXIucmVmZXJyZWRUbywgZGF0YSwgcG9zaXRpb24sIGVuZF07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgMTY6XG4gICAgICBjb25zdCBwYXR0ZXJuRGljdGlvbmFyeSA9IHt9O1xuICAgICAgY29uc3QgcGF0dGVybkRpY3Rpb25hcnlGbGFncyA9IGRhdGFbcG9zaXRpb24rK107XG4gICAgICBwYXR0ZXJuRGljdGlvbmFyeS5tbXIgPSAhIShwYXR0ZXJuRGljdGlvbmFyeUZsYWdzICYgMSk7XG4gICAgICBwYXR0ZXJuRGljdGlvbmFyeS50ZW1wbGF0ZSA9IHBhdHRlcm5EaWN0aW9uYXJ5RmxhZ3MgPj4gMSAmIDM7XG4gICAgICBwYXR0ZXJuRGljdGlvbmFyeS5wYXR0ZXJuV2lkdGggPSBkYXRhW3Bvc2l0aW9uKytdO1xuICAgICAgcGF0dGVybkRpY3Rpb25hcnkucGF0dGVybkhlaWdodCA9IGRhdGFbcG9zaXRpb24rK107XG4gICAgICBwYXR0ZXJuRGljdGlvbmFyeS5tYXhQYXR0ZXJuSW5kZXggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICAgIGFyZ3MgPSBbcGF0dGVybkRpY3Rpb25hcnksIGhlYWRlci5udW1iZXIsIGRhdGEsIHBvc2l0aW9uLCBlbmRdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDIyOlxuICAgIGNhc2UgMjM6XG4gICAgICBjb25zdCBoYWxmdG9uZVJlZ2lvbiA9IHt9O1xuICAgICAgaGFsZnRvbmVSZWdpb24uaW5mbyA9IHJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oZGF0YSwgcG9zaXRpb24pO1xuICAgICAgcG9zaXRpb24gKz0gUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uRmllbGRMZW5ndGg7XG4gICAgICBjb25zdCBoYWxmdG9uZVJlZ2lvbkZsYWdzID0gZGF0YVtwb3NpdGlvbisrXTtcbiAgICAgIGhhbGZ0b25lUmVnaW9uLm1tciA9ICEhKGhhbGZ0b25lUmVnaW9uRmxhZ3MgJiAxKTtcbiAgICAgIGhhbGZ0b25lUmVnaW9uLnRlbXBsYXRlID0gaGFsZnRvbmVSZWdpb25GbGFncyA+PiAxICYgMztcbiAgICAgIGhhbGZ0b25lUmVnaW9uLmVuYWJsZVNraXAgPSAhIShoYWxmdG9uZVJlZ2lvbkZsYWdzICYgOCk7XG4gICAgICBoYWxmdG9uZVJlZ2lvbi5jb21iaW5hdGlvbk9wZXJhdG9yID0gaGFsZnRvbmVSZWdpb25GbGFncyA+PiA0ICYgNztcbiAgICAgIGhhbGZ0b25lUmVnaW9uLmRlZmF1bHRQaXhlbFZhbHVlID0gaGFsZnRvbmVSZWdpb25GbGFncyA+PiA3ICYgMTtcbiAgICAgIGhhbGZ0b25lUmVnaW9uLmdyaWRXaWR0aCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbik7XG4gICAgICBwb3NpdGlvbiArPSA0O1xuICAgICAgaGFsZnRvbmVSZWdpb24uZ3JpZEhlaWdodCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbik7XG4gICAgICBwb3NpdGlvbiArPSA0O1xuICAgICAgaGFsZnRvbmVSZWdpb24uZ3JpZE9mZnNldFggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pICYgMHhmZmZmZmZmZjtcbiAgICAgIHBvc2l0aW9uICs9IDQ7XG4gICAgICBoYWxmdG9uZVJlZ2lvbi5ncmlkT2Zmc2V0WSA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbikgJiAweGZmZmZmZmZmO1xuICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICAgIGhhbGZ0b25lUmVnaW9uLmdyaWRWZWN0b3JYID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgIHBvc2l0aW9uICs9IDI7XG4gICAgICBoYWxmdG9uZVJlZ2lvbi5ncmlkVmVjdG9yWSA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbik7XG4gICAgICBwb3NpdGlvbiArPSAyO1xuICAgICAgYXJncyA9IFtoYWxmdG9uZVJlZ2lvbiwgaGVhZGVyLnJlZmVycmVkVG8sIGRhdGEsIHBvc2l0aW9uLCBlbmRdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDM4OlxuICAgIGNhc2UgMzk6XG4gICAgICBjb25zdCBnZW5lcmljUmVnaW9uID0ge307XG4gICAgICBnZW5lcmljUmVnaW9uLmluZm8gPSByZWFkUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgIHBvc2l0aW9uICs9IFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbkZpZWxkTGVuZ3RoO1xuICAgICAgY29uc3QgZ2VuZXJpY1JlZ2lvblNlZ21lbnRGbGFncyA9IGRhdGFbcG9zaXRpb24rK107XG4gICAgICBnZW5lcmljUmVnaW9uLm1tciA9ICEhKGdlbmVyaWNSZWdpb25TZWdtZW50RmxhZ3MgJiAxKTtcbiAgICAgIGdlbmVyaWNSZWdpb24udGVtcGxhdGUgPSBnZW5lcmljUmVnaW9uU2VnbWVudEZsYWdzID4+IDEgJiAzO1xuICAgICAgZ2VuZXJpY1JlZ2lvbi5wcmVkaWN0aW9uID0gISEoZ2VuZXJpY1JlZ2lvblNlZ21lbnRGbGFncyAmIDgpO1xuXG4gICAgICBpZiAoIWdlbmVyaWNSZWdpb24ubW1yKSB7XG4gICAgICAgIGF0TGVuZ3RoID0gZ2VuZXJpY1JlZ2lvbi50ZW1wbGF0ZSA9PT0gMCA/IDQgOiAxO1xuICAgICAgICBhdCA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBhdExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgYXQucHVzaCh7XG4gICAgICAgICAgICB4OiAoMCwgX2NvcmVfdXRpbHMucmVhZEludDgpKGRhdGEsIHBvc2l0aW9uKSxcbiAgICAgICAgICAgIHk6ICgwLCBfY29yZV91dGlscy5yZWFkSW50OCkoZGF0YSwgcG9zaXRpb24gKyAxKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHBvc2l0aW9uICs9IDI7XG4gICAgICAgIH1cblxuICAgICAgICBnZW5lcmljUmVnaW9uLmF0ID0gYXQ7XG4gICAgICB9XG5cbiAgICAgIGFyZ3MgPSBbZ2VuZXJpY1JlZ2lvbiwgZGF0YSwgcG9zaXRpb24sIGVuZF07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgNDg6XG4gICAgICBjb25zdCBwYWdlSW5mbyA9IHtcbiAgICAgICAgd2lkdGg6ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiksXG4gICAgICAgIGhlaWdodDogKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uICsgNCksXG4gICAgICAgIHJlc29sdXRpb25YOiAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyA4KSxcbiAgICAgICAgcmVzb2x1dGlvblk6ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDEyKVxuICAgICAgfTtcblxuICAgICAgaWYgKHBhZ2VJbmZvLmhlaWdodCA9PT0gMHhmZmZmZmZmZikge1xuICAgICAgICBkZWxldGUgcGFnZUluZm8uaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWdlU2VnbWVudEZsYWdzID0gZGF0YVtwb3NpdGlvbiArIDE2XTtcbiAgICAgICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbiArIDE3KTtcbiAgICAgIHBhZ2VJbmZvLmxvc3NsZXNzID0gISEocGFnZVNlZ21lbnRGbGFncyAmIDEpO1xuICAgICAgcGFnZUluZm8ucmVmaW5lbWVudCA9ICEhKHBhZ2VTZWdtZW50RmxhZ3MgJiAyKTtcbiAgICAgIHBhZ2VJbmZvLmRlZmF1bHRQaXhlbFZhbHVlID0gcGFnZVNlZ21lbnRGbGFncyA+PiAyICYgMTtcbiAgICAgIHBhZ2VJbmZvLmNvbWJpbmF0aW9uT3BlcmF0b3IgPSBwYWdlU2VnbWVudEZsYWdzID4+IDMgJiAzO1xuICAgICAgcGFnZUluZm8ucmVxdWlyZXNCdWZmZXIgPSAhIShwYWdlU2VnbWVudEZsYWdzICYgMzIpO1xuICAgICAgcGFnZUluZm8uY29tYmluYXRpb25PcGVyYXRvck92ZXJyaWRlID0gISEocGFnZVNlZ21lbnRGbGFncyAmIDY0KTtcbiAgICAgIGFyZ3MgPSBbcGFnZUluZm9dO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDQ5OlxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDUwOlxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDUxOlxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDUzOlxuICAgICAgYXJncyA9IFtoZWFkZXIubnVtYmVyLCBkYXRhLCBwb3NpdGlvbiwgZW5kXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSA2MjpcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKGBzZWdtZW50IHR5cGUgJHtoZWFkZXIudHlwZU5hbWV9KCR7aGVhZGVyLnR5cGV9KWAgKyBcIiBpcyBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cblxuICBjb25zdCBjYWxsYmFja05hbWUgPSBcIm9uXCIgKyBoZWFkZXIudHlwZU5hbWU7XG5cbiAgaWYgKGNhbGxiYWNrTmFtZSBpbiB2aXNpdG9yKSB7XG4gICAgdmlzaXRvcltjYWxsYmFja05hbWVdLmFwcGx5KHZpc2l0b3IsIGFyZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NTZWdtZW50cyhzZWdtZW50cywgdmlzaXRvcikge1xuICBmb3IgKGxldCBpID0gMCwgaWkgPSBzZWdtZW50cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgcHJvY2Vzc1NlZ21lbnQoc2VnbWVudHNbaV0sIHZpc2l0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlSmJpZzJDaHVua3MoY2h1bmtzKSB7XG4gIGNvbnN0IHZpc2l0b3IgPSBuZXcgU2ltcGxlU2VnbWVudFZpc2l0b3IoKTtcblxuICBmb3IgKGxldCBpID0gMCwgaWkgPSBjaHVua3MubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgIGNvbnN0IGNodW5rID0gY2h1bmtzW2ldO1xuICAgIGNvbnN0IHNlZ21lbnRzID0gcmVhZFNlZ21lbnRzKHt9LCBjaHVuay5kYXRhLCBjaHVuay5zdGFydCwgY2h1bmsuZW5kKTtcbiAgICBwcm9jZXNzU2VnbWVudHMoc2VnbWVudHMsIHZpc2l0b3IpO1xuICB9XG5cbiAgcmV0dXJuIHZpc2l0b3IuYnVmZmVyO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpiaWcyKGRhdGEpIHtcbiAgY29uc3QgZW5kID0gZGF0YS5sZW5ndGg7XG4gIGxldCBwb3NpdGlvbiA9IDA7XG5cbiAgaWYgKGRhdGFbcG9zaXRpb25dICE9PSAweDk3IHx8IGRhdGFbcG9zaXRpb24gKyAxXSAhPT0gMHg0YSB8fCBkYXRhW3Bvc2l0aW9uICsgMl0gIT09IDB4NDIgfHwgZGF0YVtwb3NpdGlvbiArIDNdICE9PSAweDMyIHx8IGRhdGFbcG9zaXRpb24gKyA0XSAhPT0gMHgwZCB8fCBkYXRhW3Bvc2l0aW9uICsgNV0gIT09IDB4MGEgfHwgZGF0YVtwb3NpdGlvbiArIDZdICE9PSAweDFhIHx8IGRhdGFbcG9zaXRpb24gKyA3XSAhPT0gMHgwYSkge1xuICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwicGFyc2VKYmlnMiAtIGludmFsaWQgaGVhZGVyLlwiKTtcbiAgfVxuXG4gIGNvbnN0IGhlYWRlciA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHBvc2l0aW9uICs9IDg7XG4gIGNvbnN0IGZsYWdzID0gZGF0YVtwb3NpdGlvbisrXTtcbiAgaGVhZGVyLnJhbmRvbUFjY2VzcyA9ICEoZmxhZ3MgJiAxKTtcblxuICBpZiAoIShmbGFncyAmIDIpKSB7XG4gICAgaGVhZGVyLm51bWJlck9mUGFnZXMgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pO1xuICAgIHBvc2l0aW9uICs9IDQ7XG4gIH1cblxuICBjb25zdCBzZWdtZW50cyA9IHJlYWRTZWdtZW50cyhoZWFkZXIsIGRhdGEsIHBvc2l0aW9uLCBlbmQpO1xuICBjb25zdCB2aXNpdG9yID0gbmV3IFNpbXBsZVNlZ21lbnRWaXNpdG9yKCk7XG4gIHByb2Nlc3NTZWdtZW50cyhzZWdtZW50cywgdmlzaXRvcik7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IHZpc2l0b3IuY3VycmVudFBhZ2VJbmZvO1xuICBjb25zdCBiaXRQYWNrZWQgPSB2aXNpdG9yLmJ1ZmZlcjtcbiAgY29uc3QgaW1nRGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheSh3aWR0aCAqIGhlaWdodCk7XG4gIGxldCBxID0gMCxcbiAgICAgIGsgPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHtcbiAgICBsZXQgbWFzayA9IDAsXG4gICAgICAgIGJ1ZmZlcjtcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgaWYgKCFtYXNrKSB7XG4gICAgICAgIG1hc2sgPSAxMjg7XG4gICAgICAgIGJ1ZmZlciA9IGJpdFBhY2tlZFtrKytdO1xuICAgICAgfVxuXG4gICAgICBpbWdEYXRhW3ErK10gPSBidWZmZXIgJiBtYXNrID8gMCA6IDI1NTtcbiAgICAgIG1hc2sgPj49IDE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpbWdEYXRhLFxuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9O1xufVxuXG5jbGFzcyBTaW1wbGVTZWdtZW50VmlzaXRvciB7XG4gIG9uUGFnZUluZm9ybWF0aW9uKGluZm8pIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlSW5mbyA9IGluZm87XG4gICAgY29uc3Qgcm93U2l6ZSA9IGluZm8ud2lkdGggKyA3ID4+IDM7XG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHJvd1NpemUgKiBpbmZvLmhlaWdodCk7XG5cbiAgICBpZiAoaW5mby5kZWZhdWx0UGl4ZWxWYWx1ZSkge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gYnVmZmVyLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgYnVmZmVyW2ldID0gMHhmZjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcbiAgfVxuXG4gIGRyYXdCaXRtYXAocmVnaW9uSW5mbywgYml0bWFwKSB7XG4gICAgY29uc3QgcGFnZUluZm8gPSB0aGlzLmN1cnJlbnRQYWdlSW5mbztcbiAgICBjb25zdCB3aWR0aCA9IHJlZ2lvbkluZm8ud2lkdGgsXG4gICAgICAgICAgaGVpZ2h0ID0gcmVnaW9uSW5mby5oZWlnaHQ7XG4gICAgY29uc3Qgcm93U2l6ZSA9IHBhZ2VJbmZvLndpZHRoICsgNyA+PiAzO1xuICAgIGNvbnN0IGNvbWJpbmF0aW9uT3BlcmF0b3IgPSBwYWdlSW5mby5jb21iaW5hdGlvbk9wZXJhdG9yT3ZlcnJpZGUgPyByZWdpb25JbmZvLmNvbWJpbmF0aW9uT3BlcmF0b3IgOiBwYWdlSW5mby5jb21iaW5hdGlvbk9wZXJhdG9yO1xuICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuYnVmZmVyO1xuICAgIGNvbnN0IG1hc2swID0gMTI4ID4+IChyZWdpb25JbmZvLnggJiA3KTtcbiAgICBsZXQgb2Zmc2V0MCA9IHJlZ2lvbkluZm8ueSAqIHJvd1NpemUgKyAocmVnaW9uSW5mby54ID4+IDMpO1xuICAgIGxldCBpLCBqLCBtYXNrLCBvZmZzZXQ7XG5cbiAgICBzd2l0Y2ggKGNvbWJpbmF0aW9uT3BlcmF0b3IpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7XG4gICAgICAgICAgbWFzayA9IG1hc2swO1xuICAgICAgICAgIG9mZnNldCA9IG9mZnNldDA7XG5cbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICAgICAgaWYgKGJpdG1hcFtpXVtqXSkge1xuICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0XSB8PSBtYXNrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtYXNrID4+PSAxO1xuXG4gICAgICAgICAgICBpZiAoIW1hc2spIHtcbiAgICAgICAgICAgICAgbWFzayA9IDEyODtcbiAgICAgICAgICAgICAgb2Zmc2V0Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb2Zmc2V0MCArPSByb3dTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7XG4gICAgICAgICAgbWFzayA9IG1hc2swO1xuICAgICAgICAgIG9mZnNldCA9IG9mZnNldDA7XG5cbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICAgICAgaWYgKGJpdG1hcFtpXVtqXSkge1xuICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0XSBePSBtYXNrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtYXNrID4+PSAxO1xuXG4gICAgICAgICAgICBpZiAoIW1hc2spIHtcbiAgICAgICAgICAgICAgbWFzayA9IDEyODtcbiAgICAgICAgICAgICAgb2Zmc2V0Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb2Zmc2V0MCArPSByb3dTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKGBvcGVyYXRvciAke2NvbWJpbmF0aW9uT3BlcmF0b3J9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICB9XG4gIH1cblxuICBvbkltbWVkaWF0ZUdlbmVyaWNSZWdpb24ocmVnaW9uLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgY29uc3QgcmVnaW9uSW5mbyA9IHJlZ2lvbi5pbmZvO1xuICAgIGNvbnN0IGRlY29kaW5nQ29udGV4dCA9IG5ldyBEZWNvZGluZ0NvbnRleHQoZGF0YSwgc3RhcnQsIGVuZCk7XG4gICAgY29uc3QgYml0bWFwID0gZGVjb2RlQml0bWFwKHJlZ2lvbi5tbXIsIHJlZ2lvbkluZm8ud2lkdGgsIHJlZ2lvbkluZm8uaGVpZ2h0LCByZWdpb24udGVtcGxhdGUsIHJlZ2lvbi5wcmVkaWN0aW9uLCBudWxsLCByZWdpb24uYXQsIGRlY29kaW5nQ29udGV4dCk7XG4gICAgdGhpcy5kcmF3Qml0bWFwKHJlZ2lvbkluZm8sIGJpdG1hcCk7XG4gIH1cblxuICBvbkltbWVkaWF0ZUxvc3NsZXNzR2VuZXJpY1JlZ2lvbigpIHtcbiAgICB0aGlzLm9uSW1tZWRpYXRlR2VuZXJpY1JlZ2lvbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgb25TeW1ib2xEaWN0aW9uYXJ5KGRpY3Rpb25hcnksIGN1cnJlbnRTZWdtZW50LCByZWZlcnJlZFNlZ21lbnRzLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgbGV0IGh1ZmZtYW5UYWJsZXMsIGh1ZmZtYW5JbnB1dDtcblxuICAgIGlmIChkaWN0aW9uYXJ5Lmh1ZmZtYW4pIHtcbiAgICAgIGh1ZmZtYW5UYWJsZXMgPSBnZXRTeW1ib2xEaWN0aW9uYXJ5SHVmZm1hblRhYmxlcyhkaWN0aW9uYXJ5LCByZWZlcnJlZFNlZ21lbnRzLCB0aGlzLmN1c3RvbVRhYmxlcyk7XG4gICAgICBodWZmbWFuSW5wdXQgPSBuZXcgUmVhZGVyKGRhdGEsIHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIGxldCBzeW1ib2xzID0gdGhpcy5zeW1ib2xzO1xuXG4gICAgaWYgKCFzeW1ib2xzKSB7XG4gICAgICB0aGlzLnN5bWJvbHMgPSBzeW1ib2xzID0ge307XG4gICAgfVxuXG4gICAgbGV0IGlucHV0U3ltYm9scyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gcmVmZXJyZWRTZWdtZW50cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBjb25zdCByZWZlcnJlZFN5bWJvbHMgPSBzeW1ib2xzW3JlZmVycmVkU2VnbWVudHNbaV1dO1xuXG4gICAgICBpZiAocmVmZXJyZWRTeW1ib2xzKSB7XG4gICAgICAgIGlucHV0U3ltYm9scyA9IGlucHV0U3ltYm9scy5jb25jYXQocmVmZXJyZWRTeW1ib2xzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkZWNvZGluZ0NvbnRleHQgPSBuZXcgRGVjb2RpbmdDb250ZXh0KGRhdGEsIHN0YXJ0LCBlbmQpO1xuICAgIHN5bWJvbHNbY3VycmVudFNlZ21lbnRdID0gZGVjb2RlU3ltYm9sRGljdGlvbmFyeShkaWN0aW9uYXJ5Lmh1ZmZtYW4sIGRpY3Rpb25hcnkucmVmaW5lbWVudCwgaW5wdXRTeW1ib2xzLCBkaWN0aW9uYXJ5Lm51bWJlck9mTmV3U3ltYm9scywgZGljdGlvbmFyeS5udW1iZXJPZkV4cG9ydGVkU3ltYm9scywgaHVmZm1hblRhYmxlcywgZGljdGlvbmFyeS50ZW1wbGF0ZSwgZGljdGlvbmFyeS5hdCwgZGljdGlvbmFyeS5yZWZpbmVtZW50VGVtcGxhdGUsIGRpY3Rpb25hcnkucmVmaW5lbWVudEF0LCBkZWNvZGluZ0NvbnRleHQsIGh1ZmZtYW5JbnB1dCk7XG4gIH1cblxuICBvbkltbWVkaWF0ZVRleHRSZWdpb24ocmVnaW9uLCByZWZlcnJlZFNlZ21lbnRzLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgY29uc3QgcmVnaW9uSW5mbyA9IHJlZ2lvbi5pbmZvO1xuICAgIGxldCBodWZmbWFuVGFibGVzLCBodWZmbWFuSW5wdXQ7XG4gICAgY29uc3Qgc3ltYm9scyA9IHRoaXMuc3ltYm9scztcbiAgICBsZXQgaW5wdXRTeW1ib2xzID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSByZWZlcnJlZFNlZ21lbnRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNvbnN0IHJlZmVycmVkU3ltYm9scyA9IHN5bWJvbHNbcmVmZXJyZWRTZWdtZW50c1tpXV07XG5cbiAgICAgIGlmIChyZWZlcnJlZFN5bWJvbHMpIHtcbiAgICAgICAgaW5wdXRTeW1ib2xzID0gaW5wdXRTeW1ib2xzLmNvbmNhdChyZWZlcnJlZFN5bWJvbHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN5bWJvbENvZGVMZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMubG9nMikoaW5wdXRTeW1ib2xzLmxlbmd0aCk7XG5cbiAgICBpZiAocmVnaW9uLmh1ZmZtYW4pIHtcbiAgICAgIGh1ZmZtYW5JbnB1dCA9IG5ldyBSZWFkZXIoZGF0YSwgc3RhcnQsIGVuZCk7XG4gICAgICBodWZmbWFuVGFibGVzID0gZ2V0VGV4dFJlZ2lvbkh1ZmZtYW5UYWJsZXMocmVnaW9uLCByZWZlcnJlZFNlZ21lbnRzLCB0aGlzLmN1c3RvbVRhYmxlcywgaW5wdXRTeW1ib2xzLmxlbmd0aCwgaHVmZm1hbklucHV0KTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNvZGluZ0NvbnRleHQgPSBuZXcgRGVjb2RpbmdDb250ZXh0KGRhdGEsIHN0YXJ0LCBlbmQpO1xuICAgIGNvbnN0IGJpdG1hcCA9IGRlY29kZVRleHRSZWdpb24ocmVnaW9uLmh1ZmZtYW4sIHJlZ2lvbi5yZWZpbmVtZW50LCByZWdpb25JbmZvLndpZHRoLCByZWdpb25JbmZvLmhlaWdodCwgcmVnaW9uLmRlZmF1bHRQaXhlbFZhbHVlLCByZWdpb24ubnVtYmVyT2ZTeW1ib2xJbnN0YW5jZXMsIHJlZ2lvbi5zdHJpcFNpemUsIGlucHV0U3ltYm9scywgc3ltYm9sQ29kZUxlbmd0aCwgcmVnaW9uLnRyYW5zcG9zZWQsIHJlZ2lvbi5kc09mZnNldCwgcmVnaW9uLnJlZmVyZW5jZUNvcm5lciwgcmVnaW9uLmNvbWJpbmF0aW9uT3BlcmF0b3IsIGh1ZmZtYW5UYWJsZXMsIHJlZ2lvbi5yZWZpbmVtZW50VGVtcGxhdGUsIHJlZ2lvbi5yZWZpbmVtZW50QXQsIGRlY29kaW5nQ29udGV4dCwgcmVnaW9uLmxvZ1N0cmlwU2l6ZSwgaHVmZm1hbklucHV0KTtcbiAgICB0aGlzLmRyYXdCaXRtYXAocmVnaW9uSW5mbywgYml0bWFwKTtcbiAgfVxuXG4gIG9uSW1tZWRpYXRlTG9zc2xlc3NUZXh0UmVnaW9uKCkge1xuICAgIHRoaXMub25JbW1lZGlhdGVUZXh0UmVnaW9uLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBvblBhdHRlcm5EaWN0aW9uYXJ5KGRpY3Rpb25hcnksIGN1cnJlbnRTZWdtZW50LCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgbGV0IHBhdHRlcm5zID0gdGhpcy5wYXR0ZXJucztcblxuICAgIGlmICghcGF0dGVybnMpIHtcbiAgICAgIHRoaXMucGF0dGVybnMgPSBwYXR0ZXJucyA9IHt9O1xuICAgIH1cblxuICAgIGNvbnN0IGRlY29kaW5nQ29udGV4dCA9IG5ldyBEZWNvZGluZ0NvbnRleHQoZGF0YSwgc3RhcnQsIGVuZCk7XG4gICAgcGF0dGVybnNbY3VycmVudFNlZ21lbnRdID0gZGVjb2RlUGF0dGVybkRpY3Rpb25hcnkoZGljdGlvbmFyeS5tbXIsIGRpY3Rpb25hcnkucGF0dGVybldpZHRoLCBkaWN0aW9uYXJ5LnBhdHRlcm5IZWlnaHQsIGRpY3Rpb25hcnkubWF4UGF0dGVybkluZGV4LCBkaWN0aW9uYXJ5LnRlbXBsYXRlLCBkZWNvZGluZ0NvbnRleHQpO1xuICB9XG5cbiAgb25JbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbihyZWdpb24sIHJlZmVycmVkU2VnbWVudHMsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICBjb25zdCBwYXR0ZXJucyA9IHRoaXMucGF0dGVybnNbcmVmZXJyZWRTZWdtZW50c1swXV07XG4gICAgY29uc3QgcmVnaW9uSW5mbyA9IHJlZ2lvbi5pbmZvO1xuICAgIGNvbnN0IGRlY29kaW5nQ29udGV4dCA9IG5ldyBEZWNvZGluZ0NvbnRleHQoZGF0YSwgc3RhcnQsIGVuZCk7XG4gICAgY29uc3QgYml0bWFwID0gZGVjb2RlSGFsZnRvbmVSZWdpb24ocmVnaW9uLm1tciwgcGF0dGVybnMsIHJlZ2lvbi50ZW1wbGF0ZSwgcmVnaW9uSW5mby53aWR0aCwgcmVnaW9uSW5mby5oZWlnaHQsIHJlZ2lvbi5kZWZhdWx0UGl4ZWxWYWx1ZSwgcmVnaW9uLmVuYWJsZVNraXAsIHJlZ2lvbi5jb21iaW5hdGlvbk9wZXJhdG9yLCByZWdpb24uZ3JpZFdpZHRoLCByZWdpb24uZ3JpZEhlaWdodCwgcmVnaW9uLmdyaWRPZmZzZXRYLCByZWdpb24uZ3JpZE9mZnNldFksIHJlZ2lvbi5ncmlkVmVjdG9yWCwgcmVnaW9uLmdyaWRWZWN0b3JZLCBkZWNvZGluZ0NvbnRleHQpO1xuICAgIHRoaXMuZHJhd0JpdG1hcChyZWdpb25JbmZvLCBiaXRtYXApO1xuICB9XG5cbiAgb25JbW1lZGlhdGVMb3NzbGVzc0hhbGZ0b25lUmVnaW9uKCkge1xuICAgIHRoaXMub25JbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgb25UYWJsZXMoY3VycmVudFNlZ21lbnQsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICBsZXQgY3VzdG9tVGFibGVzID0gdGhpcy5jdXN0b21UYWJsZXM7XG5cbiAgICBpZiAoIWN1c3RvbVRhYmxlcykge1xuICAgICAgdGhpcy5jdXN0b21UYWJsZXMgPSBjdXN0b21UYWJsZXMgPSB7fTtcbiAgICB9XG5cbiAgICBjdXN0b21UYWJsZXNbY3VycmVudFNlZ21lbnRdID0gZGVjb2RlVGFibGVzU2VnbWVudChkYXRhLCBzdGFydCwgZW5kKTtcbiAgfVxuXG59XG5cbmNsYXNzIEh1ZmZtYW5MaW5lIHtcbiAgY29uc3RydWN0b3IobGluZURhdGEpIHtcbiAgICBpZiAobGluZURhdGEubGVuZ3RoID09PSAyKSB7XG4gICAgICB0aGlzLmlzT09CID0gdHJ1ZTtcbiAgICAgIHRoaXMucmFuZ2VMb3cgPSAwO1xuICAgICAgdGhpcy5wcmVmaXhMZW5ndGggPSBsaW5lRGF0YVswXTtcbiAgICAgIHRoaXMucmFuZ2VMZW5ndGggPSAwO1xuICAgICAgdGhpcy5wcmVmaXhDb2RlID0gbGluZURhdGFbMV07XG4gICAgICB0aGlzLmlzTG93ZXJSYW5nZSA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzT09CID0gZmFsc2U7XG4gICAgICB0aGlzLnJhbmdlTG93ID0gbGluZURhdGFbMF07XG4gICAgICB0aGlzLnByZWZpeExlbmd0aCA9IGxpbmVEYXRhWzFdO1xuICAgICAgdGhpcy5yYW5nZUxlbmd0aCA9IGxpbmVEYXRhWzJdO1xuICAgICAgdGhpcy5wcmVmaXhDb2RlID0gbGluZURhdGFbM107XG4gICAgICB0aGlzLmlzTG93ZXJSYW5nZSA9IGxpbmVEYXRhWzRdID09PSBcImxvd2VyXCI7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgSHVmZm1hblRyZWVOb2RlIHtcbiAgY29uc3RydWN0b3IobGluZSkge1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcblxuICAgIGlmIChsaW5lKSB7XG4gICAgICB0aGlzLmlzTGVhZiA9IHRydWU7XG4gICAgICB0aGlzLnJhbmdlTGVuZ3RoID0gbGluZS5yYW5nZUxlbmd0aDtcbiAgICAgIHRoaXMucmFuZ2VMb3cgPSBsaW5lLnJhbmdlTG93O1xuICAgICAgdGhpcy5pc0xvd2VyUmFuZ2UgPSBsaW5lLmlzTG93ZXJSYW5nZTtcbiAgICAgIHRoaXMuaXNPT0IgPSBsaW5lLmlzT09CO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzTGVhZiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGJ1aWxkVHJlZShsaW5lLCBzaGlmdCkge1xuICAgIGNvbnN0IGJpdCA9IGxpbmUucHJlZml4Q29kZSA+PiBzaGlmdCAmIDE7XG5cbiAgICBpZiAoc2hpZnQgPD0gMCkge1xuICAgICAgdGhpcy5jaGlsZHJlbltiaXRdID0gbmV3IEh1ZmZtYW5UcmVlTm9kZShsaW5lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IG5vZGUgPSB0aGlzLmNoaWxkcmVuW2JpdF07XG5cbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2JpdF0gPSBub2RlID0gbmV3IEh1ZmZtYW5UcmVlTm9kZShudWxsKTtcbiAgICAgIH1cblxuICAgICAgbm9kZS5idWlsZFRyZWUobGluZSwgc2hpZnQgLSAxKTtcbiAgICB9XG4gIH1cblxuICBkZWNvZGVOb2RlKHJlYWRlcikge1xuICAgIGlmICh0aGlzLmlzTGVhZikge1xuICAgICAgaWYgKHRoaXMuaXNPT0IpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGh0T2Zmc2V0ID0gcmVhZGVyLnJlYWRCaXRzKHRoaXMucmFuZ2VMZW5ndGgpO1xuICAgICAgcmV0dXJuIHRoaXMucmFuZ2VMb3cgKyAodGhpcy5pc0xvd2VyUmFuZ2UgPyAtaHRPZmZzZXQgOiBodE9mZnNldCk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuY2hpbGRyZW5bcmVhZGVyLnJlYWRCaXQoKV07XG5cbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwiaW52YWxpZCBIdWZmbWFuIGRhdGFcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGUuZGVjb2RlTm9kZShyZWFkZXIpO1xuICB9XG5cbn1cblxuY2xhc3MgSHVmZm1hblRhYmxlIHtcbiAgY29uc3RydWN0b3IobGluZXMsIHByZWZpeENvZGVzRG9uZSkge1xuICAgIGlmICghcHJlZml4Q29kZXNEb25lKSB7XG4gICAgICB0aGlzLmFzc2lnblByZWZpeENvZGVzKGxpbmVzKTtcbiAgICB9XG5cbiAgICB0aGlzLnJvb3ROb2RlID0gbmV3IEh1ZmZtYW5UcmVlTm9kZShudWxsKTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGxpbmVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNvbnN0IGxpbmUgPSBsaW5lc1tpXTtcblxuICAgICAgaWYgKGxpbmUucHJlZml4TGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnJvb3ROb2RlLmJ1aWxkVHJlZShsaW5lLCBsaW5lLnByZWZpeExlbmd0aCAtIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRlY29kZShyZWFkZXIpIHtcbiAgICByZXR1cm4gdGhpcy5yb290Tm9kZS5kZWNvZGVOb2RlKHJlYWRlcik7XG4gIH1cblxuICBhc3NpZ25QcmVmaXhDb2RlcyhsaW5lcykge1xuICAgIGNvbnN0IGxpbmVzTGVuZ3RoID0gbGluZXMubGVuZ3RoO1xuICAgIGxldCBwcmVmaXhMZW5ndGhNYXggPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lc0xlbmd0aDsgaSsrKSB7XG4gICAgICBwcmVmaXhMZW5ndGhNYXggPSBNYXRoLm1heChwcmVmaXhMZW5ndGhNYXgsIGxpbmVzW2ldLnByZWZpeExlbmd0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgaGlzdG9ncmFtID0gbmV3IFVpbnQzMkFycmF5KHByZWZpeExlbmd0aE1heCArIDEpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lc0xlbmd0aDsgaSsrKSB7XG4gICAgICBoaXN0b2dyYW1bbGluZXNbaV0ucHJlZml4TGVuZ3RoXSsrO1xuICAgIH1cblxuICAgIGxldCBjdXJyZW50TGVuZ3RoID0gMSxcbiAgICAgICAgZmlyc3RDb2RlID0gMCxcbiAgICAgICAgY3VycmVudENvZGUsXG4gICAgICAgIGN1cnJlbnRUZW1wLFxuICAgICAgICBsaW5lO1xuICAgIGhpc3RvZ3JhbVswXSA9IDA7XG5cbiAgICB3aGlsZSAoY3VycmVudExlbmd0aCA8PSBwcmVmaXhMZW5ndGhNYXgpIHtcbiAgICAgIGZpcnN0Q29kZSA9IGZpcnN0Q29kZSArIGhpc3RvZ3JhbVtjdXJyZW50TGVuZ3RoIC0gMV0gPDwgMTtcbiAgICAgIGN1cnJlbnRDb2RlID0gZmlyc3RDb2RlO1xuICAgICAgY3VycmVudFRlbXAgPSAwO1xuXG4gICAgICB3aGlsZSAoY3VycmVudFRlbXAgPCBsaW5lc0xlbmd0aCkge1xuICAgICAgICBsaW5lID0gbGluZXNbY3VycmVudFRlbXBdO1xuXG4gICAgICAgIGlmIChsaW5lLnByZWZpeExlbmd0aCA9PT0gY3VycmVudExlbmd0aCkge1xuICAgICAgICAgIGxpbmUucHJlZml4Q29kZSA9IGN1cnJlbnRDb2RlO1xuICAgICAgICAgIGN1cnJlbnRDb2RlKys7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50VGVtcCsrO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50TGVuZ3RoKys7XG4gICAgfVxuICB9XG5cbn1cblxuZnVuY3Rpb24gZGVjb2RlVGFibGVzU2VnbWVudChkYXRhLCBzdGFydCwgZW5kKSB7XG4gIGNvbnN0IGZsYWdzID0gZGF0YVtzdGFydF07XG4gIGNvbnN0IGxvd2VzdFZhbHVlID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHN0YXJ0ICsgMSkgJiAweGZmZmZmZmZmO1xuICBjb25zdCBoaWdoZXN0VmFsdWUgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgc3RhcnQgKyA1KSAmIDB4ZmZmZmZmZmY7XG4gIGNvbnN0IHJlYWRlciA9IG5ldyBSZWFkZXIoZGF0YSwgc3RhcnQgKyA5LCBlbmQpO1xuICBjb25zdCBwcmVmaXhTaXplQml0cyA9IChmbGFncyA+PiAxICYgNykgKyAxO1xuICBjb25zdCByYW5nZVNpemVCaXRzID0gKGZsYWdzID4+IDQgJiA3KSArIDE7XG4gIGNvbnN0IGxpbmVzID0gW107XG4gIGxldCBwcmVmaXhMZW5ndGgsXG4gICAgICByYW5nZUxlbmd0aCxcbiAgICAgIGN1cnJlbnRSYW5nZUxvdyA9IGxvd2VzdFZhbHVlO1xuXG4gIGRvIHtcbiAgICBwcmVmaXhMZW5ndGggPSByZWFkZXIucmVhZEJpdHMocHJlZml4U2l6ZUJpdHMpO1xuICAgIHJhbmdlTGVuZ3RoID0gcmVhZGVyLnJlYWRCaXRzKHJhbmdlU2l6ZUJpdHMpO1xuICAgIGxpbmVzLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtjdXJyZW50UmFuZ2VMb3csIHByZWZpeExlbmd0aCwgcmFuZ2VMZW5ndGgsIDBdKSk7XG4gICAgY3VycmVudFJhbmdlTG93ICs9IDEgPDwgcmFuZ2VMZW5ndGg7XG4gIH0gd2hpbGUgKGN1cnJlbnRSYW5nZUxvdyA8IGhpZ2hlc3RWYWx1ZSk7XG5cbiAgcHJlZml4TGVuZ3RoID0gcmVhZGVyLnJlYWRCaXRzKHByZWZpeFNpemVCaXRzKTtcbiAgbGluZXMucHVzaChuZXcgSHVmZm1hbkxpbmUoW2xvd2VzdFZhbHVlIC0gMSwgcHJlZml4TGVuZ3RoLCAzMiwgMCwgXCJsb3dlclwiXSkpO1xuICBwcmVmaXhMZW5ndGggPSByZWFkZXIucmVhZEJpdHMocHJlZml4U2l6ZUJpdHMpO1xuICBsaW5lcy5wdXNoKG5ldyBIdWZmbWFuTGluZShbaGlnaGVzdFZhbHVlLCBwcmVmaXhMZW5ndGgsIDMyLCAwXSkpO1xuXG4gIGlmIChmbGFncyAmIDEpIHtcbiAgICBwcmVmaXhMZW5ndGggPSByZWFkZXIucmVhZEJpdHMocHJlZml4U2l6ZUJpdHMpO1xuICAgIGxpbmVzLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtwcmVmaXhMZW5ndGgsIDBdKSk7XG4gIH1cblxuICByZXR1cm4gbmV3IEh1ZmZtYW5UYWJsZShsaW5lcywgZmFsc2UpO1xufVxuXG5jb25zdCBzdGFuZGFyZFRhYmxlc0NhY2hlID0ge307XG5cbmZ1bmN0aW9uIGdldFN0YW5kYXJkVGFibGUobnVtYmVyKSB7XG4gIGxldCB0YWJsZSA9IHN0YW5kYXJkVGFibGVzQ2FjaGVbbnVtYmVyXTtcblxuICBpZiAodGFibGUpIHtcbiAgICByZXR1cm4gdGFibGU7XG4gIH1cblxuICBsZXQgbGluZXM7XG5cbiAgc3dpdGNoIChudW1iZXIpIHtcbiAgICBjYXNlIDE6XG4gICAgICBsaW5lcyA9IFtbMCwgMSwgNCwgMHgwXSwgWzE2LCAyLCA4LCAweDJdLCBbMjcyLCAzLCAxNiwgMHg2XSwgWzY1ODA4LCAzLCAzMiwgMHg3XV07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgMjpcbiAgICAgIGxpbmVzID0gW1swLCAxLCAwLCAweDBdLCBbMSwgMiwgMCwgMHgyXSwgWzIsIDMsIDAsIDB4Nl0sIFszLCA0LCAzLCAweGVdLCBbMTEsIDUsIDYsIDB4MWVdLCBbNzUsIDYsIDMyLCAweDNlXSwgWzYsIDB4M2ZdXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAzOlxuICAgICAgbGluZXMgPSBbWy0yNTYsIDgsIDgsIDB4ZmVdLCBbMCwgMSwgMCwgMHgwXSwgWzEsIDIsIDAsIDB4Ml0sIFsyLCAzLCAwLCAweDZdLCBbMywgNCwgMywgMHhlXSwgWzExLCA1LCA2LCAweDFlXSwgWy0yNTcsIDgsIDMyLCAweGZmLCBcImxvd2VyXCJdLCBbNzUsIDcsIDMyLCAweDdlXSwgWzYsIDB4M2VdXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSA0OlxuICAgICAgbGluZXMgPSBbWzEsIDEsIDAsIDB4MF0sIFsyLCAyLCAwLCAweDJdLCBbMywgMywgMCwgMHg2XSwgWzQsIDQsIDMsIDB4ZV0sIFsxMiwgNSwgNiwgMHgxZV0sIFs3NiwgNSwgMzIsIDB4MWZdXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSA1OlxuICAgICAgbGluZXMgPSBbWy0yNTUsIDcsIDgsIDB4N2VdLCBbMSwgMSwgMCwgMHgwXSwgWzIsIDIsIDAsIDB4Ml0sIFszLCAzLCAwLCAweDZdLCBbNCwgNCwgMywgMHhlXSwgWzEyLCA1LCA2LCAweDFlXSwgWy0yNTYsIDcsIDMyLCAweDdmLCBcImxvd2VyXCJdLCBbNzYsIDYsIDMyLCAweDNlXV07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgNjpcbiAgICAgIGxpbmVzID0gW1stMjA0OCwgNSwgMTAsIDB4MWNdLCBbLTEwMjQsIDQsIDksIDB4OF0sIFstNTEyLCA0LCA4LCAweDldLCBbLTI1NiwgNCwgNywgMHhhXSwgWy0xMjgsIDUsIDYsIDB4MWRdLCBbLTY0LCA1LCA1LCAweDFlXSwgWy0zMiwgNCwgNSwgMHhiXSwgWzAsIDIsIDcsIDB4MF0sIFsxMjgsIDMsIDcsIDB4Ml0sIFsyNTYsIDMsIDgsIDB4M10sIFs1MTIsIDQsIDksIDB4Y10sIFsxMDI0LCA0LCAxMCwgMHhkXSwgWy0yMDQ5LCA2LCAzMiwgMHgzZSwgXCJsb3dlclwiXSwgWzIwNDgsIDYsIDMyLCAweDNmXV07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgNzpcbiAgICAgIGxpbmVzID0gW1stMTAyNCwgNCwgOSwgMHg4XSwgWy01MTIsIDMsIDgsIDB4MF0sIFstMjU2LCA0LCA3LCAweDldLCBbLTEyOCwgNSwgNiwgMHgxYV0sIFstNjQsIDUsIDUsIDB4MWJdLCBbLTMyLCA0LCA1LCAweGFdLCBbMCwgNCwgNSwgMHhiXSwgWzMyLCA1LCA1LCAweDFjXSwgWzY0LCA1LCA2LCAweDFkXSwgWzEyOCwgNCwgNywgMHhjXSwgWzI1NiwgMywgOCwgMHgxXSwgWzUxMiwgMywgOSwgMHgyXSwgWzEwMjQsIDMsIDEwLCAweDNdLCBbLTEwMjUsIDUsIDMyLCAweDFlLCBcImxvd2VyXCJdLCBbMjA0OCwgNSwgMzIsIDB4MWZdXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSA4OlxuICAgICAgbGluZXMgPSBbWy0xNSwgOCwgMywgMHhmY10sIFstNywgOSwgMSwgMHgxZmNdLCBbLTUsIDgsIDEsIDB4ZmRdLCBbLTMsIDksIDAsIDB4MWZkXSwgWy0yLCA3LCAwLCAweDdjXSwgWy0xLCA0LCAwLCAweGFdLCBbMCwgMiwgMSwgMHgwXSwgWzIsIDUsIDAsIDB4MWFdLCBbMywgNiwgMCwgMHgzYV0sIFs0LCAzLCA0LCAweDRdLCBbMjAsIDYsIDEsIDB4M2JdLCBbMjIsIDQsIDQsIDB4Yl0sIFszOCwgNCwgNSwgMHhjXSwgWzcwLCA1LCA2LCAweDFiXSwgWzEzNCwgNSwgNywgMHgxY10sIFsyNjIsIDYsIDcsIDB4M2NdLCBbMzkwLCA3LCA4LCAweDdkXSwgWzY0NiwgNiwgMTAsIDB4M2RdLCBbLTE2LCA5LCAzMiwgMHgxZmUsIFwibG93ZXJcIl0sIFsxNjcwLCA5LCAzMiwgMHgxZmZdLCBbMiwgMHgxXV07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgOTpcbiAgICAgIGxpbmVzID0gW1stMzEsIDgsIDQsIDB4ZmNdLCBbLTE1LCA5LCAyLCAweDFmY10sIFstMTEsIDgsIDIsIDB4ZmRdLCBbLTcsIDksIDEsIDB4MWZkXSwgWy01LCA3LCAxLCAweDdjXSwgWy0zLCA0LCAxLCAweGFdLCBbLTEsIDMsIDEsIDB4Ml0sIFsxLCAzLCAxLCAweDNdLCBbMywgNSwgMSwgMHgxYV0sIFs1LCA2LCAxLCAweDNhXSwgWzcsIDMsIDUsIDB4NF0sIFszOSwgNiwgMiwgMHgzYl0sIFs0MywgNCwgNSwgMHhiXSwgWzc1LCA0LCA2LCAweGNdLCBbMTM5LCA1LCA3LCAweDFiXSwgWzI2NywgNSwgOCwgMHgxY10sIFs1MjMsIDYsIDgsIDB4M2NdLCBbNzc5LCA3LCA5LCAweDdkXSwgWzEyOTEsIDYsIDExLCAweDNkXSwgWy0zMiwgOSwgMzIsIDB4MWZlLCBcImxvd2VyXCJdLCBbMzMzOSwgOSwgMzIsIDB4MWZmXSwgWzIsIDB4MF1dO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDEwOlxuICAgICAgbGluZXMgPSBbWy0yMSwgNywgNCwgMHg3YV0sIFstNSwgOCwgMCwgMHhmY10sIFstNCwgNywgMCwgMHg3Yl0sIFstMywgNSwgMCwgMHgxOF0sIFstMiwgMiwgMiwgMHgwXSwgWzIsIDUsIDAsIDB4MTldLCBbMywgNiwgMCwgMHgzNl0sIFs0LCA3LCAwLCAweDdjXSwgWzUsIDgsIDAsIDB4ZmRdLCBbNiwgMiwgNiwgMHgxXSwgWzcwLCA1LCA1LCAweDFhXSwgWzEwMiwgNiwgNSwgMHgzN10sIFsxMzQsIDYsIDYsIDB4MzhdLCBbMTk4LCA2LCA3LCAweDM5XSwgWzMyNiwgNiwgOCwgMHgzYV0sIFs1ODIsIDYsIDksIDB4M2JdLCBbMTA5NCwgNiwgMTAsIDB4M2NdLCBbMjExOCwgNywgMTEsIDB4N2RdLCBbLTIyLCA4LCAzMiwgMHhmZSwgXCJsb3dlclwiXSwgWzQxNjYsIDgsIDMyLCAweGZmXSwgWzIsIDB4Ml1dO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDExOlxuICAgICAgbGluZXMgPSBbWzEsIDEsIDAsIDB4MF0sIFsyLCAyLCAxLCAweDJdLCBbNCwgNCwgMCwgMHhjXSwgWzUsIDQsIDEsIDB4ZF0sIFs3LCA1LCAxLCAweDFjXSwgWzksIDUsIDIsIDB4MWRdLCBbMTMsIDYsIDIsIDB4M2NdLCBbMTcsIDcsIDIsIDB4N2FdLCBbMjEsIDcsIDMsIDB4N2JdLCBbMjksIDcsIDQsIDB4N2NdLCBbNDUsIDcsIDUsIDB4N2RdLCBbNzcsIDcsIDYsIDB4N2VdLCBbMTQxLCA3LCAzMiwgMHg3Zl1dO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDEyOlxuICAgICAgbGluZXMgPSBbWzEsIDEsIDAsIDB4MF0sIFsyLCAyLCAwLCAweDJdLCBbMywgMywgMSwgMHg2XSwgWzUsIDUsIDAsIDB4MWNdLCBbNiwgNSwgMSwgMHgxZF0sIFs4LCA2LCAxLCAweDNjXSwgWzEwLCA3LCAwLCAweDdhXSwgWzExLCA3LCAxLCAweDdiXSwgWzEzLCA3LCAyLCAweDdjXSwgWzE3LCA3LCAzLCAweDdkXSwgWzI1LCA3LCA0LCAweDdlXSwgWzQxLCA4LCA1LCAweGZlXSwgWzczLCA4LCAzMiwgMHhmZl1dO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDEzOlxuICAgICAgbGluZXMgPSBbWzEsIDEsIDAsIDB4MF0sIFsyLCAzLCAwLCAweDRdLCBbMywgNCwgMCwgMHhjXSwgWzQsIDUsIDAsIDB4MWNdLCBbNSwgNCwgMSwgMHhkXSwgWzcsIDMsIDMsIDB4NV0sIFsxNSwgNiwgMSwgMHgzYV0sIFsxNywgNiwgMiwgMHgzYl0sIFsyMSwgNiwgMywgMHgzY10sIFsyOSwgNiwgNCwgMHgzZF0sIFs0NSwgNiwgNSwgMHgzZV0sIFs3NywgNywgNiwgMHg3ZV0sIFsxNDEsIDcsIDMyLCAweDdmXV07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgMTQ6XG4gICAgICBsaW5lcyA9IFtbLTIsIDMsIDAsIDB4NF0sIFstMSwgMywgMCwgMHg1XSwgWzAsIDEsIDAsIDB4MF0sIFsxLCAzLCAwLCAweDZdLCBbMiwgMywgMCwgMHg3XV07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgMTU6XG4gICAgICBsaW5lcyA9IFtbLTI0LCA3LCA0LCAweDdjXSwgWy04LCA2LCAyLCAweDNjXSwgWy00LCA1LCAxLCAweDFjXSwgWy0yLCA0LCAwLCAweGNdLCBbLTEsIDMsIDAsIDB4NF0sIFswLCAxLCAwLCAweDBdLCBbMSwgMywgMCwgMHg1XSwgWzIsIDQsIDAsIDB4ZF0sIFszLCA1LCAxLCAweDFkXSwgWzUsIDYsIDIsIDB4M2RdLCBbOSwgNywgNCwgMHg3ZF0sIFstMjUsIDcsIDMyLCAweDdlLCBcImxvd2VyXCJdLCBbMjUsIDcsIDMyLCAweDdmXV07XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihgc3RhbmRhcmQgdGFibGUgQi4ke251bWJlcn0gZG9lcyBub3QgZXhpc3RgKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwLCBpaSA9IGxpbmVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICBsaW5lc1tpXSA9IG5ldyBIdWZmbWFuTGluZShsaW5lc1tpXSk7XG4gIH1cblxuICB0YWJsZSA9IG5ldyBIdWZmbWFuVGFibGUobGluZXMsIHRydWUpO1xuICBzdGFuZGFyZFRhYmxlc0NhY2hlW251bWJlcl0gPSB0YWJsZTtcbiAgcmV0dXJuIHRhYmxlO1xufVxuXG5jbGFzcyBSZWFkZXIge1xuICBjb25zdHJ1Y3RvcihkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gICAgdGhpcy5wb3NpdGlvbiA9IHN0YXJ0O1xuICAgIHRoaXMuc2hpZnQgPSAtMTtcbiAgICB0aGlzLmN1cnJlbnRCeXRlID0gMDtcbiAgfVxuXG4gIHJlYWRCaXQoKSB7XG4gICAgaWYgKHRoaXMuc2hpZnQgPCAwKSB7XG4gICAgICBpZiAodGhpcy5wb3NpdGlvbiA+PSB0aGlzLmVuZCkge1xuICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcImVuZCBvZiBkYXRhIHdoaWxlIHJlYWRpbmcgYml0XCIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmN1cnJlbnRCeXRlID0gdGhpcy5kYXRhW3RoaXMucG9zaXRpb24rK107XG4gICAgICB0aGlzLnNoaWZ0ID0gNztcbiAgICB9XG5cbiAgICBjb25zdCBiaXQgPSB0aGlzLmN1cnJlbnRCeXRlID4+IHRoaXMuc2hpZnQgJiAxO1xuICAgIHRoaXMuc2hpZnQtLTtcbiAgICByZXR1cm4gYml0O1xuICB9XG5cbiAgcmVhZEJpdHMobnVtQml0cykge1xuICAgIGxldCByZXN1bHQgPSAwLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gbnVtQml0cyAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICByZXN1bHQgfD0gdGhpcy5yZWFkQml0KCkgPDwgaTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYnl0ZUFsaWduKCkge1xuICAgIHRoaXMuc2hpZnQgPSAtMTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgaWYgKHRoaXMucG9zaXRpb24gPj0gdGhpcy5lbmQpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kYXRhW3RoaXMucG9zaXRpb24rK107XG4gIH1cblxufVxuXG5mdW5jdGlvbiBnZXRDdXN0b21IdWZmbWFuVGFibGUoaW5kZXgsIHJlZmVycmVkVG8sIGN1c3RvbVRhYmxlcykge1xuICBsZXQgY3VycmVudEluZGV4ID0gMDtcblxuICBmb3IgKGxldCBpID0gMCwgaWkgPSByZWZlcnJlZFRvLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICBjb25zdCB0YWJsZSA9IGN1c3RvbVRhYmxlc1tyZWZlcnJlZFRvW2ldXTtcblxuICAgIGlmICh0YWJsZSkge1xuICAgICAgaWYgKGluZGV4ID09PSBjdXJyZW50SW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRhYmxlO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50SW5kZXgrKztcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcImNhbid0IGZpbmQgY3VzdG9tIEh1ZmZtYW4gdGFibGVcIik7XG59XG5cbmZ1bmN0aW9uIGdldFRleHRSZWdpb25IdWZmbWFuVGFibGVzKHRleHRSZWdpb24sIHJlZmVycmVkVG8sIGN1c3RvbVRhYmxlcywgbnVtYmVyT2ZTeW1ib2xzLCByZWFkZXIpIHtcbiAgY29uc3QgY29kZXMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8PSAzNDsgaSsrKSB7XG4gICAgY29uc3QgY29kZUxlbmd0aCA9IHJlYWRlci5yZWFkQml0cyg0KTtcbiAgICBjb2Rlcy5wdXNoKG5ldyBIdWZmbWFuTGluZShbaSwgY29kZUxlbmd0aCwgMCwgMF0pKTtcbiAgfVxuXG4gIGNvbnN0IHJ1bkNvZGVzVGFibGUgPSBuZXcgSHVmZm1hblRhYmxlKGNvZGVzLCBmYWxzZSk7XG4gIGNvZGVzLmxlbmd0aCA9IDA7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJPZlN5bWJvbHM7KSB7XG4gICAgY29uc3QgY29kZUxlbmd0aCA9IHJ1bkNvZGVzVGFibGUuZGVjb2RlKHJlYWRlcik7XG5cbiAgICBpZiAoY29kZUxlbmd0aCA+PSAzMikge1xuICAgICAgbGV0IHJlcGVhdGVkTGVuZ3RoLCBudW1iZXJPZlJlcGVhdHMsIGo7XG5cbiAgICAgIHN3aXRjaCAoY29kZUxlbmd0aCkge1xuICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcIm5vIHByZXZpb3VzIHZhbHVlIGluIHN5bWJvbCBJRCB0YWJsZVwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBudW1iZXJPZlJlcGVhdHMgPSByZWFkZXIucmVhZEJpdHMoMikgKyAzO1xuICAgICAgICAgIHJlcGVhdGVkTGVuZ3RoID0gY29kZXNbaSAtIDFdLnByZWZpeExlbmd0aDtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDMzOlxuICAgICAgICAgIG51bWJlck9mUmVwZWF0cyA9IHJlYWRlci5yZWFkQml0cygzKSArIDM7XG4gICAgICAgICAgcmVwZWF0ZWRMZW5ndGggPSAwO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgbnVtYmVyT2ZSZXBlYXRzID0gcmVhZGVyLnJlYWRCaXRzKDcpICsgMTE7XG4gICAgICAgICAgcmVwZWF0ZWRMZW5ndGggPSAwO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoXCJpbnZhbGlkIGNvZGUgbGVuZ3RoIGluIHN5bWJvbCBJRCB0YWJsZVwiKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChqID0gMDsgaiA8IG51bWJlck9mUmVwZWF0czsgaisrKSB7XG4gICAgICAgIGNvZGVzLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtpLCByZXBlYXRlZExlbmd0aCwgMCwgMF0pKTtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb2Rlcy5wdXNoKG5ldyBIdWZmbWFuTGluZShbaSwgY29kZUxlbmd0aCwgMCwgMF0pKTtcbiAgICAgIGkrKztcbiAgICB9XG4gIH1cblxuICByZWFkZXIuYnl0ZUFsaWduKCk7XG4gIGNvbnN0IHN5bWJvbElEVGFibGUgPSBuZXcgSHVmZm1hblRhYmxlKGNvZGVzLCBmYWxzZSk7XG4gIGxldCBjdXN0b21JbmRleCA9IDAsXG4gICAgICB0YWJsZUZpcnN0UyxcbiAgICAgIHRhYmxlRGVsdGFTLFxuICAgICAgdGFibGVEZWx0YVQ7XG5cbiAgc3dpdGNoICh0ZXh0UmVnaW9uLmh1ZmZtYW5GUykge1xuICAgIGNhc2UgMDpcbiAgICBjYXNlIDE6XG4gICAgICB0YWJsZUZpcnN0UyA9IGdldFN0YW5kYXJkVGFibGUodGV4dFJlZ2lvbi5odWZmbWFuRlMgKyA2KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAzOlxuICAgICAgdGFibGVGaXJzdFMgPSBnZXRDdXN0b21IdWZmbWFuVGFibGUoY3VzdG9tSW5kZXgsIHJlZmVycmVkVG8sIGN1c3RvbVRhYmxlcyk7XG4gICAgICBjdXN0b21JbmRleCsrO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoXCJpbnZhbGlkIEh1ZmZtYW4gRlMgc2VsZWN0b3JcIik7XG4gIH1cblxuICBzd2l0Y2ggKHRleHRSZWdpb24uaHVmZm1hbkRTKSB7XG4gICAgY2FzZSAwOlxuICAgIGNhc2UgMTpcbiAgICBjYXNlIDI6XG4gICAgICB0YWJsZURlbHRhUyA9IGdldFN0YW5kYXJkVGFibGUodGV4dFJlZ2lvbi5odWZmbWFuRFMgKyA4KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAzOlxuICAgICAgdGFibGVEZWx0YVMgPSBnZXRDdXN0b21IdWZmbWFuVGFibGUoY3VzdG9tSW5kZXgsIHJlZmVycmVkVG8sIGN1c3RvbVRhYmxlcyk7XG4gICAgICBjdXN0b21JbmRleCsrO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoXCJpbnZhbGlkIEh1ZmZtYW4gRFMgc2VsZWN0b3JcIik7XG4gIH1cblxuICBzd2l0Y2ggKHRleHRSZWdpb24uaHVmZm1hbkRUKSB7XG4gICAgY2FzZSAwOlxuICAgIGNhc2UgMTpcbiAgICBjYXNlIDI6XG4gICAgICB0YWJsZURlbHRhVCA9IGdldFN0YW5kYXJkVGFibGUodGV4dFJlZ2lvbi5odWZmbWFuRFQgKyAxMSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgMzpcbiAgICAgIHRhYmxlRGVsdGFUID0gZ2V0Q3VzdG9tSHVmZm1hblRhYmxlKGN1c3RvbUluZGV4LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpO1xuICAgICAgY3VzdG9tSW5kZXgrKztcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwiaW52YWxpZCBIdWZmbWFuIERUIHNlbGVjdG9yXCIpO1xuICB9XG5cbiAgaWYgKHRleHRSZWdpb24ucmVmaW5lbWVudCkge1xuICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwicmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZFwiKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3ltYm9sSURUYWJsZSxcbiAgICB0YWJsZUZpcnN0UyxcbiAgICB0YWJsZURlbHRhUyxcbiAgICB0YWJsZURlbHRhVFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRTeW1ib2xEaWN0aW9uYXJ5SHVmZm1hblRhYmxlcyhkaWN0aW9uYXJ5LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpIHtcbiAgbGV0IGN1c3RvbUluZGV4ID0gMCxcbiAgICAgIHRhYmxlRGVsdGFIZWlnaHQsXG4gICAgICB0YWJsZURlbHRhV2lkdGg7XG5cbiAgc3dpdGNoIChkaWN0aW9uYXJ5Lmh1ZmZtYW5ESFNlbGVjdG9yKSB7XG4gICAgY2FzZSAwOlxuICAgIGNhc2UgMTpcbiAgICAgIHRhYmxlRGVsdGFIZWlnaHQgPSBnZXRTdGFuZGFyZFRhYmxlKGRpY3Rpb25hcnkuaHVmZm1hbkRIU2VsZWN0b3IgKyA0KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAzOlxuICAgICAgdGFibGVEZWx0YUhlaWdodCA9IGdldEN1c3RvbUh1ZmZtYW5UYWJsZShjdXN0b21JbmRleCwgcmVmZXJyZWRUbywgY3VzdG9tVGFibGVzKTtcbiAgICAgIGN1c3RvbUluZGV4Kys7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcImludmFsaWQgSHVmZm1hbiBESCBzZWxlY3RvclwiKTtcbiAgfVxuXG4gIHN3aXRjaCAoZGljdGlvbmFyeS5odWZmbWFuRFdTZWxlY3Rvcikge1xuICAgIGNhc2UgMDpcbiAgICBjYXNlIDE6XG4gICAgICB0YWJsZURlbHRhV2lkdGggPSBnZXRTdGFuZGFyZFRhYmxlKGRpY3Rpb25hcnkuaHVmZm1hbkRXU2VsZWN0b3IgKyAyKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAzOlxuICAgICAgdGFibGVEZWx0YVdpZHRoID0gZ2V0Q3VzdG9tSHVmZm1hblRhYmxlKGN1c3RvbUluZGV4LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpO1xuICAgICAgY3VzdG9tSW5kZXgrKztcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwiaW52YWxpZCBIdWZmbWFuIERXIHNlbGVjdG9yXCIpO1xuICB9XG5cbiAgbGV0IHRhYmxlQml0bWFwU2l6ZSwgdGFibGVBZ2dyZWdhdGVJbnN0YW5jZXM7XG5cbiAgaWYgKGRpY3Rpb25hcnkuYml0bWFwU2l6ZVNlbGVjdG9yKSB7XG4gICAgdGFibGVCaXRtYXBTaXplID0gZ2V0Q3VzdG9tSHVmZm1hblRhYmxlKGN1c3RvbUluZGV4LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpO1xuICAgIGN1c3RvbUluZGV4Kys7XG4gIH0gZWxzZSB7XG4gICAgdGFibGVCaXRtYXBTaXplID0gZ2V0U3RhbmRhcmRUYWJsZSgxKTtcbiAgfVxuXG4gIGlmIChkaWN0aW9uYXJ5LmFnZ3JlZ2F0aW9uSW5zdGFuY2VzU2VsZWN0b3IpIHtcbiAgICB0YWJsZUFnZ3JlZ2F0ZUluc3RhbmNlcyA9IGdldEN1c3RvbUh1ZmZtYW5UYWJsZShjdXN0b21JbmRleCwgcmVmZXJyZWRUbywgY3VzdG9tVGFibGVzKTtcbiAgfSBlbHNlIHtcbiAgICB0YWJsZUFnZ3JlZ2F0ZUluc3RhbmNlcyA9IGdldFN0YW5kYXJkVGFibGUoMSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRhYmxlRGVsdGFIZWlnaHQsXG4gICAgdGFibGVEZWx0YVdpZHRoLFxuICAgIHRhYmxlQml0bWFwU2l6ZSxcbiAgICB0YWJsZUFnZ3JlZ2F0ZUluc3RhbmNlc1xuICB9O1xufVxuXG5mdW5jdGlvbiByZWFkVW5jb21wcmVzc2VkQml0bWFwKHJlYWRlciwgd2lkdGgsIGhlaWdodCkge1xuICBjb25zdCBiaXRtYXAgPSBbXTtcblxuICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgY29uc3Qgcm93ID0gbmV3IFVpbnQ4QXJyYXkod2lkdGgpO1xuICAgIGJpdG1hcC5wdXNoKHJvdyk7XG5cbiAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgIHJvd1t4XSA9IHJlYWRlci5yZWFkQml0KCk7XG4gICAgfVxuXG4gICAgcmVhZGVyLmJ5dGVBbGlnbigpO1xuICB9XG5cbiAgcmV0dXJuIGJpdG1hcDtcbn1cblxuZnVuY3Rpb24gZGVjb2RlTU1SQml0bWFwKGlucHV0LCB3aWR0aCwgaGVpZ2h0LCBlbmRPZkJsb2NrKSB7XG4gIGNvbnN0IHBhcmFtcyA9IHtcbiAgICBLOiAtMSxcbiAgICBDb2x1bW5zOiB3aWR0aCxcbiAgICBSb3dzOiBoZWlnaHQsXG4gICAgQmxhY2tJczE6IHRydWUsXG4gICAgRW5kT2ZCbG9jazogZW5kT2ZCbG9ja1xuICB9O1xuICBjb25zdCBkZWNvZGVyID0gbmV3IF9jY2l0dC5DQ0lUVEZheERlY29kZXIoaW5wdXQsIHBhcmFtcyk7XG4gIGNvbnN0IGJpdG1hcCA9IFtdO1xuICBsZXQgY3VycmVudEJ5dGUsXG4gICAgICBlb2YgPSBmYWxzZTtcblxuICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgY29uc3Qgcm93ID0gbmV3IFVpbnQ4QXJyYXkod2lkdGgpO1xuICAgIGJpdG1hcC5wdXNoKHJvdyk7XG4gICAgbGV0IHNoaWZ0ID0gLTE7XG5cbiAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgIGlmIChzaGlmdCA8IDApIHtcbiAgICAgICAgY3VycmVudEJ5dGUgPSBkZWNvZGVyLnJlYWROZXh0Q2hhcigpO1xuXG4gICAgICAgIGlmIChjdXJyZW50Qnl0ZSA9PT0gLTEpIHtcbiAgICAgICAgICBjdXJyZW50Qnl0ZSA9IDA7XG4gICAgICAgICAgZW9mID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNoaWZ0ID0gNztcbiAgICAgIH1cblxuICAgICAgcm93W3hdID0gY3VycmVudEJ5dGUgPj4gc2hpZnQgJiAxO1xuICAgICAgc2hpZnQtLTtcbiAgICB9XG4gIH1cblxuICBpZiAoZW5kT2ZCbG9jayAmJiAhZW9mKSB7XG4gICAgY29uc3QgbG9va0ZvckVPRkxpbWl0ID0gNTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9va0ZvckVPRkxpbWl0OyBpKyspIHtcbiAgICAgIGlmIChkZWNvZGVyLnJlYWROZXh0Q2hhcigpID09PSAtMSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYml0bWFwO1xufVxuXG5jbGFzcyBKYmlnMkltYWdlIHtcbiAgcGFyc2VDaHVua3MoY2h1bmtzKSB7XG4gICAgcmV0dXJuIHBhcnNlSmJpZzJDaHVua3MoY2h1bmtzKTtcbiAgfVxuXG4gIHBhcnNlKGRhdGEpIHtcbiAgICBjb25zdCB7XG4gICAgICBpbWdEYXRhLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9ID0gcGFyc2VKYmlnMihkYXRhKTtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgcmV0dXJuIGltZ0RhdGE7XG4gIH1cblxufVxuXG5leHBvcnRzLkpiaWcySW1hZ2UgPSBKYmlnMkltYWdlO1xuXG4vKioqLyB9KSxcbi8qIDM2ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLkFyaXRobWV0aWNEZWNvZGVyID0gdm9pZCAwO1xuY29uc3QgUWVUYWJsZSA9IFt7XG4gIHFlOiAweDU2MDEsXG4gIG5tcHM6IDEsXG4gIG5scHM6IDEsXG4gIHN3aXRjaEZsYWc6IDFcbn0sIHtcbiAgcWU6IDB4MzQwMSxcbiAgbm1wczogMixcbiAgbmxwczogNixcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgxODAxLFxuICBubXBzOiAzLFxuICBubHBzOiA5LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDBhYzEsXG4gIG5tcHM6IDQsXG4gIG5scHM6IDEyLFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDA1MjEsXG4gIG5tcHM6IDUsXG4gIG5scHM6IDI5LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDAyMjEsXG4gIG5tcHM6IDM4LFxuICBubHBzOiAzMyxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHg1NjAxLFxuICBubXBzOiA3LFxuICBubHBzOiA2LFxuICBzd2l0Y2hGbGFnOiAxXG59LCB7XG4gIHFlOiAweDU0MDEsXG4gIG5tcHM6IDgsXG4gIG5scHM6IDE0LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDQ4MDEsXG4gIG5tcHM6IDksXG4gIG5scHM6IDE0LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDM4MDEsXG4gIG5tcHM6IDEwLFxuICBubHBzOiAxNCxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgzMDAxLFxuICBubXBzOiAxMSxcbiAgbmxwczogMTcsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MjQwMSxcbiAgbm1wczogMTIsXG4gIG5scHM6IDE4LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDFjMDEsXG4gIG5tcHM6IDEzLFxuICBubHBzOiAyMCxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgxNjAxLFxuICBubXBzOiAyOSxcbiAgbmxwczogMjEsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4NTYwMSxcbiAgbm1wczogMTUsXG4gIG5scHM6IDE0LFxuICBzd2l0Y2hGbGFnOiAxXG59LCB7XG4gIHFlOiAweDU0MDEsXG4gIG5tcHM6IDE2LFxuICBubHBzOiAxNCxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHg1MTAxLFxuICBubXBzOiAxNyxcbiAgbmxwczogMTUsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4NDgwMSxcbiAgbm1wczogMTgsXG4gIG5scHM6IDE2LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDM4MDEsXG4gIG5tcHM6IDE5LFxuICBubHBzOiAxNyxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgzNDAxLFxuICBubXBzOiAyMCxcbiAgbmxwczogMTgsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MzAwMSxcbiAgbm1wczogMjEsXG4gIG5scHM6IDE5LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDI4MDEsXG4gIG5tcHM6IDIyLFxuICBubHBzOiAxOSxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgyNDAxLFxuICBubXBzOiAyMyxcbiAgbmxwczogMjAsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MjIwMSxcbiAgbm1wczogMjQsXG4gIG5scHM6IDIxLFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDFjMDEsXG4gIG5tcHM6IDI1LFxuICBubHBzOiAyMixcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgxODAxLFxuICBubXBzOiAyNixcbiAgbmxwczogMjMsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MTYwMSxcbiAgbm1wczogMjcsXG4gIG5scHM6IDI0LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDE0MDEsXG4gIG5tcHM6IDI4LFxuICBubHBzOiAyNSxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgxMjAxLFxuICBubXBzOiAyOSxcbiAgbmxwczogMjYsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MTEwMSxcbiAgbm1wczogMzAsXG4gIG5scHM6IDI3LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDBhYzEsXG4gIG5tcHM6IDMxLFxuICBubHBzOiAyOCxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgwOWMxLFxuICBubXBzOiAzMixcbiAgbmxwczogMjksXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MDhhMSxcbiAgbm1wczogMzMsXG4gIG5scHM6IDMwLFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDA1MjEsXG4gIG5tcHM6IDM0LFxuICBubHBzOiAzMSxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgwNDQxLFxuICBubXBzOiAzNSxcbiAgbmxwczogMzIsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MDJhMSxcbiAgbm1wczogMzYsXG4gIG5scHM6IDMzLFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDAyMjEsXG4gIG5tcHM6IDM3LFxuICBubHBzOiAzNCxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgwMTQxLFxuICBubXBzOiAzOCxcbiAgbmxwczogMzUsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MDExMSxcbiAgbm1wczogMzksXG4gIG5scHM6IDM2LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDAwODUsXG4gIG5tcHM6IDQwLFxuICBubHBzOiAzNyxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgwMDQ5LFxuICBubXBzOiA0MSxcbiAgbmxwczogMzgsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MDAyNSxcbiAgbm1wczogNDIsXG4gIG5scHM6IDM5LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDAwMTUsXG4gIG5tcHM6IDQzLFxuICBubHBzOiA0MCxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgwMDA5LFxuICBubXBzOiA0NCxcbiAgbmxwczogNDEsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MDAwNSxcbiAgbm1wczogNDUsXG4gIG5scHM6IDQyLFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDAwMDEsXG4gIG5tcHM6IDQ1LFxuICBubHBzOiA0MyxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHg1NjAxLFxuICBubXBzOiA0NixcbiAgbmxwczogNDYsXG4gIHN3aXRjaEZsYWc6IDBcbn1dO1xuXG5jbGFzcyBBcml0aG1ldGljRGVjb2RlciB7XG4gIGNvbnN0cnVjdG9yKGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMuYnAgPSBzdGFydDtcbiAgICB0aGlzLmRhdGFFbmQgPSBlbmQ7XG4gICAgdGhpcy5jaGlnaCA9IGRhdGFbc3RhcnRdO1xuICAgIHRoaXMuY2xvdyA9IDA7XG4gICAgdGhpcy5ieXRlSW4oKTtcbiAgICB0aGlzLmNoaWdoID0gdGhpcy5jaGlnaCA8PCA3ICYgMHhmZmZmIHwgdGhpcy5jbG93ID4+IDkgJiAweDdmO1xuICAgIHRoaXMuY2xvdyA9IHRoaXMuY2xvdyA8PCA3ICYgMHhmZmZmO1xuICAgIHRoaXMuY3QgLT0gNztcbiAgICB0aGlzLmEgPSAweDgwMDA7XG4gIH1cblxuICBieXRlSW4oKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICBsZXQgYnAgPSB0aGlzLmJwO1xuXG4gICAgaWYgKGRhdGFbYnBdID09PSAweGZmKSB7XG4gICAgICBpZiAoZGF0YVticCArIDFdID4gMHg4Zikge1xuICAgICAgICB0aGlzLmNsb3cgKz0gMHhmZjAwO1xuICAgICAgICB0aGlzLmN0ID0gODtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJwKys7XG4gICAgICAgIHRoaXMuY2xvdyArPSBkYXRhW2JwXSA8PCA5O1xuICAgICAgICB0aGlzLmN0ID0gNztcbiAgICAgICAgdGhpcy5icCA9IGJwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBicCsrO1xuICAgICAgdGhpcy5jbG93ICs9IGJwIDwgdGhpcy5kYXRhRW5kID8gZGF0YVticF0gPDwgOCA6IDB4ZmYwMDtcbiAgICAgIHRoaXMuY3QgPSA4O1xuICAgICAgdGhpcy5icCA9IGJwO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNsb3cgPiAweGZmZmYpIHtcbiAgICAgIHRoaXMuY2hpZ2ggKz0gdGhpcy5jbG93ID4+IDE2O1xuICAgICAgdGhpcy5jbG93ICY9IDB4ZmZmZjtcbiAgICB9XG4gIH1cblxuICByZWFkQml0KGNvbnRleHRzLCBwb3MpIHtcbiAgICBsZXQgY3hfaW5kZXggPSBjb250ZXh0c1twb3NdID4+IDEsXG4gICAgICAgIGN4X21wcyA9IGNvbnRleHRzW3Bvc10gJiAxO1xuICAgIGNvbnN0IHFlVGFibGVJY3ggPSBRZVRhYmxlW2N4X2luZGV4XTtcbiAgICBjb25zdCBxZUljeCA9IHFlVGFibGVJY3gucWU7XG4gICAgbGV0IGQ7XG4gICAgbGV0IGEgPSB0aGlzLmEgLSBxZUljeDtcblxuICAgIGlmICh0aGlzLmNoaWdoIDwgcWVJY3gpIHtcbiAgICAgIGlmIChhIDwgcWVJY3gpIHtcbiAgICAgICAgYSA9IHFlSWN4O1xuICAgICAgICBkID0gY3hfbXBzO1xuICAgICAgICBjeF9pbmRleCA9IHFlVGFibGVJY3gubm1wcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGEgPSBxZUljeDtcbiAgICAgICAgZCA9IDEgXiBjeF9tcHM7XG5cbiAgICAgICAgaWYgKHFlVGFibGVJY3guc3dpdGNoRmxhZyA9PT0gMSkge1xuICAgICAgICAgIGN4X21wcyA9IGQ7XG4gICAgICAgIH1cblxuICAgICAgICBjeF9pbmRleCA9IHFlVGFibGVJY3gubmxwcztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jaGlnaCAtPSBxZUljeDtcblxuICAgICAgaWYgKChhICYgMHg4MDAwKSAhPT0gMCkge1xuICAgICAgICB0aGlzLmEgPSBhO1xuICAgICAgICByZXR1cm4gY3hfbXBzO1xuICAgICAgfVxuXG4gICAgICBpZiAoYSA8IHFlSWN4KSB7XG4gICAgICAgIGQgPSAxIF4gY3hfbXBzO1xuXG4gICAgICAgIGlmIChxZVRhYmxlSWN4LnN3aXRjaEZsYWcgPT09IDEpIHtcbiAgICAgICAgICBjeF9tcHMgPSBkO1xuICAgICAgICB9XG5cbiAgICAgICAgY3hfaW5kZXggPSBxZVRhYmxlSWN4Lm5scHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkID0gY3hfbXBzO1xuICAgICAgICBjeF9pbmRleCA9IHFlVGFibGVJY3gubm1wcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkbyB7XG4gICAgICBpZiAodGhpcy5jdCA9PT0gMCkge1xuICAgICAgICB0aGlzLmJ5dGVJbigpO1xuICAgICAgfVxuXG4gICAgICBhIDw8PSAxO1xuICAgICAgdGhpcy5jaGlnaCA9IHRoaXMuY2hpZ2ggPDwgMSAmIDB4ZmZmZiB8IHRoaXMuY2xvdyA+PiAxNSAmIDE7XG4gICAgICB0aGlzLmNsb3cgPSB0aGlzLmNsb3cgPDwgMSAmIDB4ZmZmZjtcbiAgICAgIHRoaXMuY3QtLTtcbiAgICB9IHdoaWxlICgoYSAmIDB4ODAwMCkgPT09IDApO1xuXG4gICAgdGhpcy5hID0gYTtcbiAgICBjb250ZXh0c1twb3NdID0gY3hfaW5kZXggPDwgMSB8IGN4X21wcztcbiAgICByZXR1cm4gZDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQXJpdGhtZXRpY0RlY29kZXIgPSBBcml0aG1ldGljRGVjb2RlcjtcblxuLyoqKi8gfSksXG4vKiAzNyAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5KcGVnU3RyZWFtID0gdm9pZCAwO1xuXG52YXIgX2RlY29kZV9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI5KTtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxudmFyIF9qcGcgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDM4KTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuY2xhc3MgSnBlZ1N0cmVhbSBleHRlbmRzIF9kZWNvZGVfc3RyZWFtLkRlY29kZVN0cmVhbSB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSwgbWF5YmVMZW5ndGgsIHBhcmFtcykge1xuICAgIGxldCBjaDtcblxuICAgIHdoaWxlICgoY2ggPSBzdHJlYW0uZ2V0Qnl0ZSgpKSAhPT0gLTEpIHtcbiAgICAgIGlmIChjaCA9PT0gMHhmZikge1xuICAgICAgICBzdHJlYW0uc2tpcCgtMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN1cGVyKG1heWJlTGVuZ3RoKTtcbiAgICB0aGlzLnN0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLmRpY3QgPSBzdHJlYW0uZGljdDtcbiAgICB0aGlzLm1heWJlTGVuZ3RoID0gbWF5YmVMZW5ndGg7XG4gICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XG4gIH1cblxuICBnZXQgYnl0ZXMoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiYnl0ZXNcIiwgdGhpcy5zdHJlYW0uZ2V0Qnl0ZXModGhpcy5tYXliZUxlbmd0aCkpO1xuICB9XG5cbiAgZW5zdXJlQnVmZmVyKHJlcXVlc3RlZCkge31cblxuICByZWFkQmxvY2soKSB7XG4gICAgaWYgKHRoaXMuZW9mKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QganBlZ09wdGlvbnMgPSB7XG4gICAgICBkZWNvZGVUcmFuc2Zvcm06IHVuZGVmaW5lZCxcbiAgICAgIGNvbG9yVHJhbnNmb3JtOiB1bmRlZmluZWRcbiAgICB9O1xuICAgIGNvbnN0IGRlY29kZUFyciA9IHRoaXMuZGljdC5nZXRBcnJheShcIkRcIiwgXCJEZWNvZGVcIik7XG5cbiAgICBpZiAodGhpcy5mb3JjZVJHQiAmJiBBcnJheS5pc0FycmF5KGRlY29kZUFycikpIHtcbiAgICAgIGNvbnN0IGJpdHNQZXJDb21wb25lbnQgPSB0aGlzLmRpY3QuZ2V0KFwiQlBDXCIsIFwiQml0c1BlckNvbXBvbmVudFwiKSB8fCA4O1xuICAgICAgY29uc3QgZGVjb2RlQXJyTGVuZ3RoID0gZGVjb2RlQXJyLmxlbmd0aDtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBJbnQzMkFycmF5KGRlY29kZUFyckxlbmd0aCk7XG4gICAgICBsZXQgdHJhbnNmb3JtTmVlZGVkID0gZmFsc2U7XG4gICAgICBjb25zdCBtYXhWYWx1ZSA9ICgxIDw8IGJpdHNQZXJDb21wb25lbnQpIC0gMTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWNvZGVBcnJMZW5ndGg7IGkgKz0gMikge1xuICAgICAgICB0cmFuc2Zvcm1baV0gPSAoZGVjb2RlQXJyW2kgKyAxXSAtIGRlY29kZUFycltpXSkgKiAyNTYgfCAwO1xuICAgICAgICB0cmFuc2Zvcm1baSArIDFdID0gZGVjb2RlQXJyW2ldICogbWF4VmFsdWUgfCAwO1xuXG4gICAgICAgIGlmICh0cmFuc2Zvcm1baV0gIT09IDI1NiB8fCB0cmFuc2Zvcm1baSArIDFdICE9PSAwKSB7XG4gICAgICAgICAgdHJhbnNmb3JtTmVlZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHJhbnNmb3JtTmVlZGVkKSB7XG4gICAgICAgIGpwZWdPcHRpb25zLmRlY29kZVRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkodGhpcy5wYXJhbXMpKSB7XG4gICAgICBjb25zdCBjb2xvclRyYW5zZm9ybSA9IHRoaXMucGFyYW1zLmdldChcIkNvbG9yVHJhbnNmb3JtXCIpO1xuXG4gICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihjb2xvclRyYW5zZm9ybSkpIHtcbiAgICAgICAganBlZ09wdGlvbnMuY29sb3JUcmFuc2Zvcm0gPSBjb2xvclRyYW5zZm9ybTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBqcGVnSW1hZ2UgPSBuZXcgX2pwZy5KcGVnSW1hZ2UoanBlZ09wdGlvbnMpO1xuICAgIGpwZWdJbWFnZS5wYXJzZSh0aGlzLmJ5dGVzKTtcbiAgICBjb25zdCBkYXRhID0ganBlZ0ltYWdlLmdldERhdGEoe1xuICAgICAgd2lkdGg6IHRoaXMuZHJhd1dpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLmRyYXdIZWlnaHQsXG4gICAgICBmb3JjZVJHQjogdGhpcy5mb3JjZVJHQixcbiAgICAgIGlzU291cmNlUERGOiB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy5idWZmZXIgPSBkYXRhO1xuICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgdGhpcy5lb2YgPSB0cnVlO1xuICB9XG5cbn1cblxuZXhwb3J0cy5KcGVnU3RyZWFtID0gSnBlZ1N0cmVhbTtcblxuLyoqKi8gfSksXG4vKiAzOCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5KcGVnSW1hZ2UgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOSk7XG5cbmNsYXNzIEpwZWdFcnJvciBleHRlbmRzIF91dGlsLkJhc2VFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3Rvcihtc2cpIHtcbiAgICBzdXBlcihgSlBFRyBlcnJvcjogJHttc2d9YCwgXCJKcGVnRXJyb3JcIik7XG4gIH1cblxufVxuXG5jbGFzcyBETkxNYXJrZXJFcnJvciBleHRlbmRzIF91dGlsLkJhc2VFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBzY2FuTGluZXMpIHtcbiAgICBzdXBlcihtZXNzYWdlLCBcIkROTE1hcmtlckVycm9yXCIpO1xuICAgIHRoaXMuc2NhbkxpbmVzID0gc2NhbkxpbmVzO1xuICB9XG5cbn1cblxuY2xhc3MgRU9JTWFya2VyRXJyb3IgZXh0ZW5kcyBfdXRpbC5CYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgc3VwZXIobXNnLCBcIkVPSU1hcmtlckVycm9yXCIpO1xuICB9XG5cbn1cblxuY29uc3QgZGN0WmlnWmFnID0gbmV3IFVpbnQ4QXJyYXkoWzAsIDEsIDgsIDE2LCA5LCAyLCAzLCAxMCwgMTcsIDI0LCAzMiwgMjUsIDE4LCAxMSwgNCwgNSwgMTIsIDE5LCAyNiwgMzMsIDQwLCA0OCwgNDEsIDM0LCAyNywgMjAsIDEzLCA2LCA3LCAxNCwgMjEsIDI4LCAzNSwgNDIsIDQ5LCA1NiwgNTcsIDUwLCA0MywgMzYsIDI5LCAyMiwgMTUsIDIzLCAzMCwgMzcsIDQ0LCA1MSwgNTgsIDU5LCA1MiwgNDUsIDM4LCAzMSwgMzksIDQ2LCA1MywgNjAsIDYxLCA1NCwgNDcsIDU1LCA2MiwgNjNdKTtcbmNvbnN0IGRjdENvczEgPSA0MDE3O1xuY29uc3QgZGN0U2luMSA9IDc5OTtcbmNvbnN0IGRjdENvczMgPSAzNDA2O1xuY29uc3QgZGN0U2luMyA9IDIyNzY7XG5jb25zdCBkY3RDb3M2ID0gMTU2NztcbmNvbnN0IGRjdFNpbjYgPSAzNzg0O1xuY29uc3QgZGN0U3FydDIgPSA1NzkzO1xuY29uc3QgZGN0U3FydDFkMiA9IDI4OTY7XG5cbmZ1bmN0aW9uIGJ1aWxkSHVmZm1hblRhYmxlKGNvZGVMZW5ndGhzLCB2YWx1ZXMpIHtcbiAgbGV0IGsgPSAwLFxuICAgICAgaSxcbiAgICAgIGosXG4gICAgICBsZW5ndGggPSAxNjtcblxuICB3aGlsZSAobGVuZ3RoID4gMCAmJiAhY29kZUxlbmd0aHNbbGVuZ3RoIC0gMV0pIHtcbiAgICBsZW5ndGgtLTtcbiAgfVxuXG4gIGNvbnN0IGNvZGUgPSBbe1xuICAgIGNoaWxkcmVuOiBbXSxcbiAgICBpbmRleDogMFxuICB9XTtcbiAgbGV0IHAgPSBjb2RlWzBdLFxuICAgICAgcTtcblxuICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGogPSAwOyBqIDwgY29kZUxlbmd0aHNbaV07IGorKykge1xuICAgICAgcCA9IGNvZGUucG9wKCk7XG4gICAgICBwLmNoaWxkcmVuW3AuaW5kZXhdID0gdmFsdWVzW2tdO1xuXG4gICAgICB3aGlsZSAocC5pbmRleCA+IDApIHtcbiAgICAgICAgcCA9IGNvZGUucG9wKCk7XG4gICAgICB9XG5cbiAgICAgIHAuaW5kZXgrKztcbiAgICAgIGNvZGUucHVzaChwKTtcblxuICAgICAgd2hpbGUgKGNvZGUubGVuZ3RoIDw9IGkpIHtcbiAgICAgICAgY29kZS5wdXNoKHEgPSB7XG4gICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgIGluZGV4OiAwXG4gICAgICAgIH0pO1xuICAgICAgICBwLmNoaWxkcmVuW3AuaW5kZXhdID0gcS5jaGlsZHJlbjtcbiAgICAgICAgcCA9IHE7XG4gICAgICB9XG5cbiAgICAgIGsrKztcbiAgICB9XG5cbiAgICBpZiAoaSArIDEgPCBsZW5ndGgpIHtcbiAgICAgIGNvZGUucHVzaChxID0ge1xuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgIGluZGV4OiAwXG4gICAgICB9KTtcbiAgICAgIHAuY2hpbGRyZW5bcC5pbmRleF0gPSBxLmNoaWxkcmVuO1xuICAgICAgcCA9IHE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvZGVbMF0uY2hpbGRyZW47XG59XG5cbmZ1bmN0aW9uIGdldEJsb2NrQnVmZmVyT2Zmc2V0KGNvbXBvbmVudCwgcm93LCBjb2wpIHtcbiAgcmV0dXJuIDY0ICogKChjb21wb25lbnQuYmxvY2tzUGVyTGluZSArIDEpICogcm93ICsgY29sKTtcbn1cblxuZnVuY3Rpb24gZGVjb2RlU2NhbihkYXRhLCBvZmZzZXQsIGZyYW1lLCBjb21wb25lbnRzLCByZXNldEludGVydmFsLCBzcGVjdHJhbFN0YXJ0LCBzcGVjdHJhbEVuZCwgc3VjY2Vzc2l2ZVByZXYsIHN1Y2Nlc3NpdmUsIHBhcnNlRE5MTWFya2VyID0gZmFsc2UpIHtcbiAgY29uc3QgbWN1c1BlckxpbmUgPSBmcmFtZS5tY3VzUGVyTGluZTtcbiAgY29uc3QgcHJvZ3Jlc3NpdmUgPSBmcmFtZS5wcm9ncmVzc2l2ZTtcbiAgY29uc3Qgc3RhcnRPZmZzZXQgPSBvZmZzZXQ7XG4gIGxldCBiaXRzRGF0YSA9IDAsXG4gICAgICBiaXRzQ291bnQgPSAwO1xuXG4gIGZ1bmN0aW9uIHJlYWRCaXQoKSB7XG4gICAgaWYgKGJpdHNDb3VudCA+IDApIHtcbiAgICAgIGJpdHNDb3VudC0tO1xuICAgICAgcmV0dXJuIGJpdHNEYXRhID4+IGJpdHNDb3VudCAmIDE7XG4gICAgfVxuXG4gICAgYml0c0RhdGEgPSBkYXRhW29mZnNldCsrXTtcblxuICAgIGlmIChiaXRzRGF0YSA9PT0gMHhmZikge1xuICAgICAgY29uc3QgbmV4dEJ5dGUgPSBkYXRhW29mZnNldCsrXTtcblxuICAgICAgaWYgKG5leHRCeXRlKSB7XG4gICAgICAgIGlmIChuZXh0Qnl0ZSA9PT0gMHhkYyAmJiBwYXJzZUROTE1hcmtlcikge1xuICAgICAgICAgIG9mZnNldCArPSAyO1xuICAgICAgICAgIGNvbnN0IHNjYW5MaW5lcyA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBvZmZzZXQpO1xuICAgICAgICAgIG9mZnNldCArPSAyO1xuXG4gICAgICAgICAgaWYgKHNjYW5MaW5lcyA+IDAgJiYgc2NhbkxpbmVzICE9PSBmcmFtZS5zY2FuTGluZXMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBETkxNYXJrZXJFcnJvcihcIkZvdW5kIEROTCBtYXJrZXIgKDB4RkZEQykgd2hpbGUgcGFyc2luZyBzY2FuIGRhdGFcIiwgc2NhbkxpbmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV4dEJ5dGUgPT09IDB4ZDkpIHtcbiAgICAgICAgICBpZiAocGFyc2VETkxNYXJrZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heWJlU2NhbkxpbmVzID0gYmxvY2tSb3cgKiAoZnJhbWUucHJlY2lzaW9uID09PSA4ID8gOCA6IDApO1xuXG4gICAgICAgICAgICBpZiAobWF5YmVTY2FuTGluZXMgPiAwICYmIE1hdGgucm91bmQoZnJhbWUuc2NhbkxpbmVzIC8gbWF5YmVTY2FuTGluZXMpID49IDEwKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBETkxNYXJrZXJFcnJvcihcIkZvdW5kIEVPSSBtYXJrZXIgKDB4RkZEOSkgd2hpbGUgcGFyc2luZyBzY2FuIGRhdGEsIFwiICsgXCJwb3NzaWJseSBjYXVzZWQgYnkgaW5jb3JyZWN0IGBzY2FuTGluZXNgIHBhcmFtZXRlclwiLCBtYXliZVNjYW5MaW5lcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgbmV3IEVPSU1hcmtlckVycm9yKFwiRm91bmQgRU9JIG1hcmtlciAoMHhGRkQ5KSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBKcGVnRXJyb3IoYHVuZXhwZWN0ZWQgbWFya2VyICR7KGJpdHNEYXRhIDw8IDggfCBuZXh0Qnl0ZSkudG9TdHJpbmcoMTYpfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGJpdHNDb3VudCA9IDc7XG4gICAgcmV0dXJuIGJpdHNEYXRhID4+PiA3O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlSHVmZm1hbih0cmVlKSB7XG4gICAgbGV0IG5vZGUgPSB0cmVlO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIG5vZGUgPSBub2RlW3JlYWRCaXQoKV07XG5cbiAgICAgIHN3aXRjaCAodHlwZW9mIG5vZGUpIHtcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgIHJldHVybiBub2RlO1xuXG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEpwZWdFcnJvcihcImludmFsaWQgaHVmZm1hbiBzZXF1ZW5jZVwiKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWNlaXZlKGxlbmd0aCkge1xuICAgIGxldCBuID0gMDtcblxuICAgIHdoaWxlIChsZW5ndGggPiAwKSB7XG4gICAgICBuID0gbiA8PCAxIHwgcmVhZEJpdCgpO1xuICAgICAgbGVuZ3RoLS07XG4gICAgfVxuXG4gICAgcmV0dXJuIG47XG4gIH1cblxuICBmdW5jdGlvbiByZWNlaXZlQW5kRXh0ZW5kKGxlbmd0aCkge1xuICAgIGlmIChsZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiByZWFkQml0KCkgPT09IDEgPyAxIDogLTE7XG4gICAgfVxuXG4gICAgY29uc3QgbiA9IHJlY2VpdmUobGVuZ3RoKTtcblxuICAgIGlmIChuID49IDEgPDwgbGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuIG47XG4gICAgfVxuXG4gICAgcmV0dXJuIG4gKyAoLTEgPDwgbGVuZ3RoKSArIDE7XG4gIH1cblxuICBmdW5jdGlvbiBkZWNvZGVCYXNlbGluZShjb21wb25lbnQsIGJsb2NrT2Zmc2V0KSB7XG4gICAgY29uc3QgdCA9IGRlY29kZUh1ZmZtYW4oY29tcG9uZW50Lmh1ZmZtYW5UYWJsZURDKTtcbiAgICBjb25zdCBkaWZmID0gdCA9PT0gMCA/IDAgOiByZWNlaXZlQW5kRXh0ZW5kKHQpO1xuICAgIGNvbXBvbmVudC5ibG9ja0RhdGFbYmxvY2tPZmZzZXRdID0gY29tcG9uZW50LnByZWQgKz0gZGlmZjtcbiAgICBsZXQgayA9IDE7XG5cbiAgICB3aGlsZSAoayA8IDY0KSB7XG4gICAgICBjb25zdCBycyA9IGRlY29kZUh1ZmZtYW4oY29tcG9uZW50Lmh1ZmZtYW5UYWJsZUFDKTtcbiAgICAgIGNvbnN0IHMgPSBycyAmIDE1LFxuICAgICAgICAgICAgciA9IHJzID4+IDQ7XG5cbiAgICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgIGlmIChyIDwgMTUpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGsgKz0gMTY7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBrICs9IHI7XG4gICAgICBjb25zdCB6ID0gZGN0WmlnWmFnW2tdO1xuICAgICAgY29tcG9uZW50LmJsb2NrRGF0YVtibG9ja09mZnNldCArIHpdID0gcmVjZWl2ZUFuZEV4dGVuZChzKTtcbiAgICAgIGsrKztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZWNvZGVEQ0ZpcnN0KGNvbXBvbmVudCwgYmxvY2tPZmZzZXQpIHtcbiAgICBjb25zdCB0ID0gZGVjb2RlSHVmZm1hbihjb21wb25lbnQuaHVmZm1hblRhYmxlREMpO1xuICAgIGNvbnN0IGRpZmYgPSB0ID09PSAwID8gMCA6IHJlY2VpdmVBbmRFeHRlbmQodCkgPDwgc3VjY2Vzc2l2ZTtcbiAgICBjb21wb25lbnQuYmxvY2tEYXRhW2Jsb2NrT2Zmc2V0XSA9IGNvbXBvbmVudC5wcmVkICs9IGRpZmY7XG4gIH1cblxuICBmdW5jdGlvbiBkZWNvZGVEQ1N1Y2Nlc3NpdmUoY29tcG9uZW50LCBibG9ja09mZnNldCkge1xuICAgIGNvbXBvbmVudC5ibG9ja0RhdGFbYmxvY2tPZmZzZXRdIHw9IHJlYWRCaXQoKSA8PCBzdWNjZXNzaXZlO1xuICB9XG5cbiAgbGV0IGVvYnJ1biA9IDA7XG5cbiAgZnVuY3Rpb24gZGVjb2RlQUNGaXJzdChjb21wb25lbnQsIGJsb2NrT2Zmc2V0KSB7XG4gICAgaWYgKGVvYnJ1biA+IDApIHtcbiAgICAgIGVvYnJ1bi0tO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBrID0gc3BlY3RyYWxTdGFydDtcbiAgICBjb25zdCBlID0gc3BlY3RyYWxFbmQ7XG5cbiAgICB3aGlsZSAoayA8PSBlKSB7XG4gICAgICBjb25zdCBycyA9IGRlY29kZUh1ZmZtYW4oY29tcG9uZW50Lmh1ZmZtYW5UYWJsZUFDKTtcbiAgICAgIGNvbnN0IHMgPSBycyAmIDE1LFxuICAgICAgICAgICAgciA9IHJzID4+IDQ7XG5cbiAgICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgIGlmIChyIDwgMTUpIHtcbiAgICAgICAgICBlb2JydW4gPSByZWNlaXZlKHIpICsgKDEgPDwgcikgLSAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgayArPSAxNjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGsgKz0gcjtcbiAgICAgIGNvbnN0IHogPSBkY3RaaWdaYWdba107XG4gICAgICBjb21wb25lbnQuYmxvY2tEYXRhW2Jsb2NrT2Zmc2V0ICsgel0gPSByZWNlaXZlQW5kRXh0ZW5kKHMpICogKDEgPDwgc3VjY2Vzc2l2ZSk7XG4gICAgICBrKys7XG4gICAgfVxuICB9XG5cbiAgbGV0IHN1Y2Nlc3NpdmVBQ1N0YXRlID0gMCxcbiAgICAgIHN1Y2Nlc3NpdmVBQ05leHRWYWx1ZTtcblxuICBmdW5jdGlvbiBkZWNvZGVBQ1N1Y2Nlc3NpdmUoY29tcG9uZW50LCBibG9ja09mZnNldCkge1xuICAgIGxldCBrID0gc3BlY3RyYWxTdGFydDtcbiAgICBjb25zdCBlID0gc3BlY3RyYWxFbmQ7XG4gICAgbGV0IHIgPSAwO1xuICAgIGxldCBzO1xuICAgIGxldCBycztcblxuICAgIHdoaWxlIChrIDw9IGUpIHtcbiAgICAgIGNvbnN0IG9mZnNldFogPSBibG9ja09mZnNldCArIGRjdFppZ1phZ1trXTtcbiAgICAgIGNvbnN0IHNpZ24gPSBjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdIDwgMCA/IC0xIDogMTtcblxuICAgICAgc3dpdGNoIChzdWNjZXNzaXZlQUNTdGF0ZSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgcnMgPSBkZWNvZGVIdWZmbWFuKGNvbXBvbmVudC5odWZmbWFuVGFibGVBQyk7XG4gICAgICAgICAgcyA9IHJzICYgMTU7XG4gICAgICAgICAgciA9IHJzID4+IDQ7XG5cbiAgICAgICAgICBpZiAocyA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKHIgPCAxNSkge1xuICAgICAgICAgICAgICBlb2JydW4gPSByZWNlaXZlKHIpICsgKDEgPDwgcik7XG4gICAgICAgICAgICAgIHN1Y2Nlc3NpdmVBQ1N0YXRlID0gNDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHIgPSAxNjtcbiAgICAgICAgICAgICAgc3VjY2Vzc2l2ZUFDU3RhdGUgPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocyAhPT0gMSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgSnBlZ0Vycm9yKFwiaW52YWxpZCBBQ24gZW5jb2RpbmdcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN1Y2Nlc3NpdmVBQ05leHRWYWx1ZSA9IHJlY2VpdmVBbmRFeHRlbmQocyk7XG4gICAgICAgICAgICBzdWNjZXNzaXZlQUNTdGF0ZSA9IHIgPyAyIDogMztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICBjYXNlIDE6XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAoY29tcG9uZW50LmJsb2NrRGF0YVtvZmZzZXRaXSkge1xuICAgICAgICAgICAgY29tcG9uZW50LmJsb2NrRGF0YVtvZmZzZXRaXSArPSBzaWduICogKHJlYWRCaXQoKSA8PCBzdWNjZXNzaXZlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgci0tO1xuXG4gICAgICAgICAgICBpZiAociA9PT0gMCkge1xuICAgICAgICAgICAgICBzdWNjZXNzaXZlQUNTdGF0ZSA9IHN1Y2Nlc3NpdmVBQ1N0YXRlID09PSAyID8gMyA6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGlmIChjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdKSB7XG4gICAgICAgICAgICBjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdICs9IHNpZ24gKiAocmVhZEJpdCgpIDw8IHN1Y2Nlc3NpdmUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdID0gc3VjY2Vzc2l2ZUFDTmV4dFZhbHVlIDw8IHN1Y2Nlc3NpdmU7XG4gICAgICAgICAgICBzdWNjZXNzaXZlQUNTdGF0ZSA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGlmIChjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdKSB7XG4gICAgICAgICAgICBjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdICs9IHNpZ24gKiAocmVhZEJpdCgpIDw8IHN1Y2Nlc3NpdmUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBrKys7XG4gICAgfVxuXG4gICAgaWYgKHN1Y2Nlc3NpdmVBQ1N0YXRlID09PSA0KSB7XG4gICAgICBlb2JydW4tLTtcblxuICAgICAgaWYgKGVvYnJ1biA9PT0gMCkge1xuICAgICAgICBzdWNjZXNzaXZlQUNTdGF0ZSA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IGJsb2NrUm93ID0gMDtcblxuICBmdW5jdGlvbiBkZWNvZGVNY3UoY29tcG9uZW50LCBkZWNvZGUsIG1jdSwgcm93LCBjb2wpIHtcbiAgICBjb25zdCBtY3VSb3cgPSBtY3UgLyBtY3VzUGVyTGluZSB8IDA7XG4gICAgY29uc3QgbWN1Q29sID0gbWN1ICUgbWN1c1BlckxpbmU7XG4gICAgYmxvY2tSb3cgPSBtY3VSb3cgKiBjb21wb25lbnQudiArIHJvdztcbiAgICBjb25zdCBibG9ja0NvbCA9IG1jdUNvbCAqIGNvbXBvbmVudC5oICsgY29sO1xuICAgIGNvbnN0IGJsb2NrT2Zmc2V0ID0gZ2V0QmxvY2tCdWZmZXJPZmZzZXQoY29tcG9uZW50LCBibG9ja1JvdywgYmxvY2tDb2wpO1xuICAgIGRlY29kZShjb21wb25lbnQsIGJsb2NrT2Zmc2V0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY29kZUJsb2NrKGNvbXBvbmVudCwgZGVjb2RlLCBtY3UpIHtcbiAgICBibG9ja1JvdyA9IG1jdSAvIGNvbXBvbmVudC5ibG9ja3NQZXJMaW5lIHwgMDtcbiAgICBjb25zdCBibG9ja0NvbCA9IG1jdSAlIGNvbXBvbmVudC5ibG9ja3NQZXJMaW5lO1xuICAgIGNvbnN0IGJsb2NrT2Zmc2V0ID0gZ2V0QmxvY2tCdWZmZXJPZmZzZXQoY29tcG9uZW50LCBibG9ja1JvdywgYmxvY2tDb2wpO1xuICAgIGRlY29kZShjb21wb25lbnQsIGJsb2NrT2Zmc2V0KTtcbiAgfVxuXG4gIGNvbnN0IGNvbXBvbmVudHNMZW5ndGggPSBjb21wb25lbnRzLmxlbmd0aDtcbiAgbGV0IGNvbXBvbmVudCwgaSwgaiwgaywgbjtcbiAgbGV0IGRlY29kZUZuO1xuXG4gIGlmIChwcm9ncmVzc2l2ZSkge1xuICAgIGlmIChzcGVjdHJhbFN0YXJ0ID09PSAwKSB7XG4gICAgICBkZWNvZGVGbiA9IHN1Y2Nlc3NpdmVQcmV2ID09PSAwID8gZGVjb2RlRENGaXJzdCA6IGRlY29kZURDU3VjY2Vzc2l2ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVjb2RlRm4gPSBzdWNjZXNzaXZlUHJldiA9PT0gMCA/IGRlY29kZUFDRmlyc3QgOiBkZWNvZGVBQ1N1Y2Nlc3NpdmU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRlY29kZUZuID0gZGVjb2RlQmFzZWxpbmU7XG4gIH1cblxuICBsZXQgbWN1ID0gMCxcbiAgICAgIGZpbGVNYXJrZXI7XG4gIGxldCBtY3VFeHBlY3RlZDtcblxuICBpZiAoY29tcG9uZW50c0xlbmd0aCA9PT0gMSkge1xuICAgIG1jdUV4cGVjdGVkID0gY29tcG9uZW50c1swXS5ibG9ja3NQZXJMaW5lICogY29tcG9uZW50c1swXS5ibG9ja3NQZXJDb2x1bW47XG4gIH0gZWxzZSB7XG4gICAgbWN1RXhwZWN0ZWQgPSBtY3VzUGVyTGluZSAqIGZyYW1lLm1jdXNQZXJDb2x1bW47XG4gIH1cblxuICBsZXQgaCwgdjtcblxuICB3aGlsZSAobWN1IDw9IG1jdUV4cGVjdGVkKSB7XG4gICAgY29uc3QgbWN1VG9SZWFkID0gcmVzZXRJbnRlcnZhbCA/IE1hdGgubWluKG1jdUV4cGVjdGVkIC0gbWN1LCByZXNldEludGVydmFsKSA6IG1jdUV4cGVjdGVkO1xuXG4gICAgaWYgKG1jdVRvUmVhZCA+IDApIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjb21wb25lbnRzTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29tcG9uZW50c1tpXS5wcmVkID0gMDtcbiAgICAgIH1cblxuICAgICAgZW9icnVuID0gMDtcblxuICAgICAgaWYgKGNvbXBvbmVudHNMZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50c1swXTtcblxuICAgICAgICBmb3IgKG4gPSAwOyBuIDwgbWN1VG9SZWFkOyBuKyspIHtcbiAgICAgICAgICBkZWNvZGVCbG9jayhjb21wb25lbnQsIGRlY29kZUZuLCBtY3UpO1xuICAgICAgICAgIG1jdSsrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKG4gPSAwOyBuIDwgbWN1VG9SZWFkOyBuKyspIHtcbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29tcG9uZW50c0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnRzW2ldO1xuICAgICAgICAgICAgaCA9IGNvbXBvbmVudC5oO1xuICAgICAgICAgICAgdiA9IGNvbXBvbmVudC52O1xuXG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgdjsgaisrKSB7XG4gICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBoOyBrKyspIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVNY3UoY29tcG9uZW50LCBkZWNvZGVGbiwgbWN1LCBqLCBrKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG1jdSsrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgYml0c0NvdW50ID0gMDtcbiAgICBmaWxlTWFya2VyID0gZmluZE5leHRGaWxlTWFya2VyKGRhdGEsIG9mZnNldCk7XG5cbiAgICBpZiAoIWZpbGVNYXJrZXIpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChmaWxlTWFya2VyLmludmFsaWQpIHtcbiAgICAgIGNvbnN0IHBhcnRpYWxNc2cgPSBtY3VUb1JlYWQgPiAwID8gXCJ1bmV4cGVjdGVkXCIgOiBcImV4Y2Vzc2l2ZVwiO1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBkZWNvZGVTY2FuIC0gJHtwYXJ0aWFsTXNnfSBNQ1UgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICR7ZmlsZU1hcmtlci5pbnZhbGlkfWApO1xuICAgICAgb2Zmc2V0ID0gZmlsZU1hcmtlci5vZmZzZXQ7XG4gICAgfVxuXG4gICAgaWYgKGZpbGVNYXJrZXIubWFya2VyID49IDB4ZmZkMCAmJiBmaWxlTWFya2VyLm1hcmtlciA8PSAweGZmZDcpIHtcbiAgICAgIG9mZnNldCArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0IC0gc3RhcnRPZmZzZXQ7XG59XG5cbmZ1bmN0aW9uIHF1YW50aXplQW5kSW52ZXJzZShjb21wb25lbnQsIGJsb2NrQnVmZmVyT2Zmc2V0LCBwKSB7XG4gIGNvbnN0IHF0ID0gY29tcG9uZW50LnF1YW50aXphdGlvblRhYmxlLFxuICAgICAgICBibG9ja0RhdGEgPSBjb21wb25lbnQuYmxvY2tEYXRhO1xuICBsZXQgdjAsIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3O1xuICBsZXQgcDAsIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYsIHA3O1xuICBsZXQgdDtcblxuICBpZiAoIXF0KSB7XG4gICAgdGhyb3cgbmV3IEpwZWdFcnJvcihcIm1pc3NpbmcgcmVxdWlyZWQgUXVhbnRpemF0aW9uIFRhYmxlLlwiKTtcbiAgfVxuXG4gIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IDY0OyByb3cgKz0gOCkge1xuICAgIHAwID0gYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgcm93XTtcbiAgICBwMSA9IGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIHJvdyArIDFdO1xuICAgIHAyID0gYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgcm93ICsgMl07XG4gICAgcDMgPSBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyByb3cgKyAzXTtcbiAgICBwNCA9IGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIHJvdyArIDRdO1xuICAgIHA1ID0gYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgcm93ICsgNV07XG4gICAgcDYgPSBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyByb3cgKyA2XTtcbiAgICBwNyA9IGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIHJvdyArIDddO1xuICAgIHAwICo9IHF0W3Jvd107XG5cbiAgICBpZiAoKHAxIHwgcDIgfCBwMyB8IHA0IHwgcDUgfCBwNiB8IHA3KSA9PT0gMCkge1xuICAgICAgdCA9IGRjdFNxcnQyICogcDAgKyA1MTIgPj4gMTA7XG4gICAgICBwW3Jvd10gPSB0O1xuICAgICAgcFtyb3cgKyAxXSA9IHQ7XG4gICAgICBwW3JvdyArIDJdID0gdDtcbiAgICAgIHBbcm93ICsgM10gPSB0O1xuICAgICAgcFtyb3cgKyA0XSA9IHQ7XG4gICAgICBwW3JvdyArIDVdID0gdDtcbiAgICAgIHBbcm93ICsgNl0gPSB0O1xuICAgICAgcFtyb3cgKyA3XSA9IHQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBwMSAqPSBxdFtyb3cgKyAxXTtcbiAgICBwMiAqPSBxdFtyb3cgKyAyXTtcbiAgICBwMyAqPSBxdFtyb3cgKyAzXTtcbiAgICBwNCAqPSBxdFtyb3cgKyA0XTtcbiAgICBwNSAqPSBxdFtyb3cgKyA1XTtcbiAgICBwNiAqPSBxdFtyb3cgKyA2XTtcbiAgICBwNyAqPSBxdFtyb3cgKyA3XTtcbiAgICB2MCA9IGRjdFNxcnQyICogcDAgKyAxMjggPj4gODtcbiAgICB2MSA9IGRjdFNxcnQyICogcDQgKyAxMjggPj4gODtcbiAgICB2MiA9IHAyO1xuICAgIHYzID0gcDY7XG4gICAgdjQgPSBkY3RTcXJ0MWQyICogKHAxIC0gcDcpICsgMTI4ID4+IDg7XG4gICAgdjcgPSBkY3RTcXJ0MWQyICogKHAxICsgcDcpICsgMTI4ID4+IDg7XG4gICAgdjUgPSBwMyA8PCA0O1xuICAgIHY2ID0gcDUgPDwgNDtcbiAgICB2MCA9IHYwICsgdjEgKyAxID4+IDE7XG4gICAgdjEgPSB2MCAtIHYxO1xuICAgIHQgPSB2MiAqIGRjdFNpbjYgKyB2MyAqIGRjdENvczYgKyAxMjggPj4gODtcbiAgICB2MiA9IHYyICogZGN0Q29zNiAtIHYzICogZGN0U2luNiArIDEyOCA+PiA4O1xuICAgIHYzID0gdDtcbiAgICB2NCA9IHY0ICsgdjYgKyAxID4+IDE7XG4gICAgdjYgPSB2NCAtIHY2O1xuICAgIHY3ID0gdjcgKyB2NSArIDEgPj4gMTtcbiAgICB2NSA9IHY3IC0gdjU7XG4gICAgdjAgPSB2MCArIHYzICsgMSA+PiAxO1xuICAgIHYzID0gdjAgLSB2MztcbiAgICB2MSA9IHYxICsgdjIgKyAxID4+IDE7XG4gICAgdjIgPSB2MSAtIHYyO1xuICAgIHQgPSB2NCAqIGRjdFNpbjMgKyB2NyAqIGRjdENvczMgKyAyMDQ4ID4+IDEyO1xuICAgIHY0ID0gdjQgKiBkY3RDb3MzIC0gdjcgKiBkY3RTaW4zICsgMjA0OCA+PiAxMjtcbiAgICB2NyA9IHQ7XG4gICAgdCA9IHY1ICogZGN0U2luMSArIHY2ICogZGN0Q29zMSArIDIwNDggPj4gMTI7XG4gICAgdjUgPSB2NSAqIGRjdENvczEgLSB2NiAqIGRjdFNpbjEgKyAyMDQ4ID4+IDEyO1xuICAgIHY2ID0gdDtcbiAgICBwW3Jvd10gPSB2MCArIHY3O1xuICAgIHBbcm93ICsgN10gPSB2MCAtIHY3O1xuICAgIHBbcm93ICsgMV0gPSB2MSArIHY2O1xuICAgIHBbcm93ICsgNl0gPSB2MSAtIHY2O1xuICAgIHBbcm93ICsgMl0gPSB2MiArIHY1O1xuICAgIHBbcm93ICsgNV0gPSB2MiAtIHY1O1xuICAgIHBbcm93ICsgM10gPSB2MyArIHY0O1xuICAgIHBbcm93ICsgNF0gPSB2MyAtIHY0O1xuICB9XG5cbiAgZm9yIChsZXQgY29sID0gMDsgY29sIDwgODsgKytjb2wpIHtcbiAgICBwMCA9IHBbY29sXTtcbiAgICBwMSA9IHBbY29sICsgOF07XG4gICAgcDIgPSBwW2NvbCArIDE2XTtcbiAgICBwMyA9IHBbY29sICsgMjRdO1xuICAgIHA0ID0gcFtjb2wgKyAzMl07XG4gICAgcDUgPSBwW2NvbCArIDQwXTtcbiAgICBwNiA9IHBbY29sICsgNDhdO1xuICAgIHA3ID0gcFtjb2wgKyA1Nl07XG5cbiAgICBpZiAoKHAxIHwgcDIgfCBwMyB8IHA0IHwgcDUgfCBwNiB8IHA3KSA9PT0gMCkge1xuICAgICAgdCA9IGRjdFNxcnQyICogcDAgKyA4MTkyID4+IDE0O1xuXG4gICAgICBpZiAodCA8IC0yMDQwKSB7XG4gICAgICAgIHQgPSAwO1xuICAgICAgfSBlbHNlIGlmICh0ID49IDIwMjQpIHtcbiAgICAgICAgdCA9IDI1NTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHQgPSB0ICsgMjA1NiA+PiA0O1xuICAgICAgfVxuXG4gICAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2xdID0gdDtcbiAgICAgIGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIGNvbCArIDhdID0gdDtcbiAgICAgIGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIGNvbCArIDE2XSA9IHQ7XG4gICAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyAyNF0gPSB0O1xuICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgMzJdID0gdDtcbiAgICAgIGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIGNvbCArIDQwXSA9IHQ7XG4gICAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyA0OF0gPSB0O1xuICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgNTZdID0gdDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHYwID0gZGN0U3FydDIgKiBwMCArIDIwNDggPj4gMTI7XG4gICAgdjEgPSBkY3RTcXJ0MiAqIHA0ICsgMjA0OCA+PiAxMjtcbiAgICB2MiA9IHAyO1xuICAgIHYzID0gcDY7XG4gICAgdjQgPSBkY3RTcXJ0MWQyICogKHAxIC0gcDcpICsgMjA0OCA+PiAxMjtcbiAgICB2NyA9IGRjdFNxcnQxZDIgKiAocDEgKyBwNykgKyAyMDQ4ID4+IDEyO1xuICAgIHY1ID0gcDM7XG4gICAgdjYgPSBwNTtcbiAgICB2MCA9ICh2MCArIHYxICsgMSA+PiAxKSArIDQxMTI7XG4gICAgdjEgPSB2MCAtIHYxO1xuICAgIHQgPSB2MiAqIGRjdFNpbjYgKyB2MyAqIGRjdENvczYgKyAyMDQ4ID4+IDEyO1xuICAgIHYyID0gdjIgKiBkY3RDb3M2IC0gdjMgKiBkY3RTaW42ICsgMjA0OCA+PiAxMjtcbiAgICB2MyA9IHQ7XG4gICAgdjQgPSB2NCArIHY2ICsgMSA+PiAxO1xuICAgIHY2ID0gdjQgLSB2NjtcbiAgICB2NyA9IHY3ICsgdjUgKyAxID4+IDE7XG4gICAgdjUgPSB2NyAtIHY1O1xuICAgIHYwID0gdjAgKyB2MyArIDEgPj4gMTtcbiAgICB2MyA9IHYwIC0gdjM7XG4gICAgdjEgPSB2MSArIHYyICsgMSA+PiAxO1xuICAgIHYyID0gdjEgLSB2MjtcbiAgICB0ID0gdjQgKiBkY3RTaW4zICsgdjcgKiBkY3RDb3MzICsgMjA0OCA+PiAxMjtcbiAgICB2NCA9IHY0ICogZGN0Q29zMyAtIHY3ICogZGN0U2luMyArIDIwNDggPj4gMTI7XG4gICAgdjcgPSB0O1xuICAgIHQgPSB2NSAqIGRjdFNpbjEgKyB2NiAqIGRjdENvczEgKyAyMDQ4ID4+IDEyO1xuICAgIHY1ID0gdjUgKiBkY3RDb3MxIC0gdjYgKiBkY3RTaW4xICsgMjA0OCA+PiAxMjtcbiAgICB2NiA9IHQ7XG4gICAgcDAgPSB2MCArIHY3O1xuICAgIHA3ID0gdjAgLSB2NztcbiAgICBwMSA9IHYxICsgdjY7XG4gICAgcDYgPSB2MSAtIHY2O1xuICAgIHAyID0gdjIgKyB2NTtcbiAgICBwNSA9IHYyIC0gdjU7XG4gICAgcDMgPSB2MyArIHY0O1xuICAgIHA0ID0gdjMgLSB2NDtcblxuICAgIGlmIChwMCA8IDE2KSB7XG4gICAgICBwMCA9IDA7XG4gICAgfSBlbHNlIGlmIChwMCA+PSA0MDgwKSB7XG4gICAgICBwMCA9IDI1NTtcbiAgICB9IGVsc2Uge1xuICAgICAgcDAgPj49IDQ7XG4gICAgfVxuXG4gICAgaWYgKHAxIDwgMTYpIHtcbiAgICAgIHAxID0gMDtcbiAgICB9IGVsc2UgaWYgKHAxID49IDQwODApIHtcbiAgICAgIHAxID0gMjU1O1xuICAgIH0gZWxzZSB7XG4gICAgICBwMSA+Pj0gNDtcbiAgICB9XG5cbiAgICBpZiAocDIgPCAxNikge1xuICAgICAgcDIgPSAwO1xuICAgIH0gZWxzZSBpZiAocDIgPj0gNDA4MCkge1xuICAgICAgcDIgPSAyNTU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHAyID4+PSA0O1xuICAgIH1cblxuICAgIGlmIChwMyA8IDE2KSB7XG4gICAgICBwMyA9IDA7XG4gICAgfSBlbHNlIGlmIChwMyA+PSA0MDgwKSB7XG4gICAgICBwMyA9IDI1NTtcbiAgICB9IGVsc2Uge1xuICAgICAgcDMgPj49IDQ7XG4gICAgfVxuXG4gICAgaWYgKHA0IDwgMTYpIHtcbiAgICAgIHA0ID0gMDtcbiAgICB9IGVsc2UgaWYgKHA0ID49IDQwODApIHtcbiAgICAgIHA0ID0gMjU1O1xuICAgIH0gZWxzZSB7XG4gICAgICBwNCA+Pj0gNDtcbiAgICB9XG5cbiAgICBpZiAocDUgPCAxNikge1xuICAgICAgcDUgPSAwO1xuICAgIH0gZWxzZSBpZiAocDUgPj0gNDA4MCkge1xuICAgICAgcDUgPSAyNTU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHA1ID4+PSA0O1xuICAgIH1cblxuICAgIGlmIChwNiA8IDE2KSB7XG4gICAgICBwNiA9IDA7XG4gICAgfSBlbHNlIGlmIChwNiA+PSA0MDgwKSB7XG4gICAgICBwNiA9IDI1NTtcbiAgICB9IGVsc2Uge1xuICAgICAgcDYgPj49IDQ7XG4gICAgfVxuXG4gICAgaWYgKHA3IDwgMTYpIHtcbiAgICAgIHA3ID0gMDtcbiAgICB9IGVsc2UgaWYgKHA3ID49IDQwODApIHtcbiAgICAgIHA3ID0gMjU1O1xuICAgIH0gZWxzZSB7XG4gICAgICBwNyA+Pj0gNDtcbiAgICB9XG5cbiAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2xdID0gcDA7XG4gICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgOF0gPSBwMTtcbiAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyAxNl0gPSBwMjtcbiAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyAyNF0gPSBwMztcbiAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyAzMl0gPSBwNDtcbiAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyA0MF0gPSBwNTtcbiAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyA0OF0gPSBwNjtcbiAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyA1Nl0gPSBwNztcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZENvbXBvbmVudERhdGEoZnJhbWUsIGNvbXBvbmVudCkge1xuICBjb25zdCBibG9ja3NQZXJMaW5lID0gY29tcG9uZW50LmJsb2Nrc1BlckxpbmU7XG4gIGNvbnN0IGJsb2Nrc1BlckNvbHVtbiA9IGNvbXBvbmVudC5ibG9ja3NQZXJDb2x1bW47XG4gIGNvbnN0IGNvbXB1dGF0aW9uQnVmZmVyID0gbmV3IEludDE2QXJyYXkoNjQpO1xuXG4gIGZvciAobGV0IGJsb2NrUm93ID0gMDsgYmxvY2tSb3cgPCBibG9ja3NQZXJDb2x1bW47IGJsb2NrUm93KyspIHtcbiAgICBmb3IgKGxldCBibG9ja0NvbCA9IDA7IGJsb2NrQ29sIDwgYmxvY2tzUGVyTGluZTsgYmxvY2tDb2wrKykge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0QmxvY2tCdWZmZXJPZmZzZXQoY29tcG9uZW50LCBibG9ja1JvdywgYmxvY2tDb2wpO1xuICAgICAgcXVhbnRpemVBbmRJbnZlcnNlKGNvbXBvbmVudCwgb2Zmc2V0LCBjb21wdXRhdGlvbkJ1ZmZlcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbXBvbmVudC5ibG9ja0RhdGE7XG59XG5cbmZ1bmN0aW9uIGZpbmROZXh0RmlsZU1hcmtlcihkYXRhLCBjdXJyZW50UG9zLCBzdGFydFBvcyA9IGN1cnJlbnRQb3MpIHtcbiAgY29uc3QgbWF4UG9zID0gZGF0YS5sZW5ndGggLSAxO1xuICBsZXQgbmV3UG9zID0gc3RhcnRQb3MgPCBjdXJyZW50UG9zID8gc3RhcnRQb3MgOiBjdXJyZW50UG9zO1xuXG4gIGlmIChjdXJyZW50UG9zID49IG1heFBvcykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgY3VycmVudE1hcmtlciA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBjdXJyZW50UG9zKTtcblxuICBpZiAoY3VycmVudE1hcmtlciA+PSAweGZmYzAgJiYgY3VycmVudE1hcmtlciA8PSAweGZmZmUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW52YWxpZDogbnVsbCxcbiAgICAgIG1hcmtlcjogY3VycmVudE1hcmtlcixcbiAgICAgIG9mZnNldDogY3VycmVudFBvc1xuICAgIH07XG4gIH1cblxuICBsZXQgbmV3TWFya2VyID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG5ld1Bvcyk7XG5cbiAgd2hpbGUgKCEobmV3TWFya2VyID49IDB4ZmZjMCAmJiBuZXdNYXJrZXIgPD0gMHhmZmZlKSkge1xuICAgIGlmICgrK25ld1BvcyA+PSBtYXhQb3MpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIG5ld01hcmtlciA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBuZXdQb3MpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpbnZhbGlkOiBjdXJyZW50TWFya2VyLnRvU3RyaW5nKDE2KSxcbiAgICBtYXJrZXI6IG5ld01hcmtlcixcbiAgICBvZmZzZXQ6IG5ld1Bvc1xuICB9O1xufVxuXG5jbGFzcyBKcGVnSW1hZ2Uge1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgZGVjb2RlVHJhbnNmb3JtID0gbnVsbCxcbiAgICBjb2xvclRyYW5zZm9ybSA9IC0xXG4gIH0gPSB7fSkge1xuICAgIHRoaXMuX2RlY29kZVRyYW5zZm9ybSA9IGRlY29kZVRyYW5zZm9ybTtcbiAgICB0aGlzLl9jb2xvclRyYW5zZm9ybSA9IGNvbG9yVHJhbnNmb3JtO1xuICB9XG5cbiAgcGFyc2UoZGF0YSwge1xuICAgIGRubFNjYW5MaW5lcyA9IG51bGxcbiAgfSA9IHt9KSB7XG4gICAgZnVuY3Rpb24gcmVhZERhdGFCbG9jaygpIHtcbiAgICAgIGNvbnN0IGxlbmd0aCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBvZmZzZXQpO1xuICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICBsZXQgZW5kT2Zmc2V0ID0gb2Zmc2V0ICsgbGVuZ3RoIC0gMjtcbiAgICAgIGNvbnN0IGZpbGVNYXJrZXIgPSBmaW5kTmV4dEZpbGVNYXJrZXIoZGF0YSwgZW5kT2Zmc2V0LCBvZmZzZXQpO1xuXG4gICAgICBpZiAoZmlsZU1hcmtlciAmJiBmaWxlTWFya2VyLmludmFsaWQpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwicmVhZERhdGFCbG9jayAtIGluY29ycmVjdCBsZW5ndGgsIGN1cnJlbnQgbWFya2VyIGlzOiBcIiArIGZpbGVNYXJrZXIuaW52YWxpZCk7XG4gICAgICAgIGVuZE9mZnNldCA9IGZpbGVNYXJrZXIub2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcnJheSA9IGRhdGEuc3ViYXJyYXkob2Zmc2V0LCBlbmRPZmZzZXQpO1xuICAgICAgb2Zmc2V0ICs9IGFycmF5Lmxlbmd0aDtcbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVwYXJlQ29tcG9uZW50cyhmcmFtZSkge1xuICAgICAgY29uc3QgbWN1c1BlckxpbmUgPSBNYXRoLmNlaWwoZnJhbWUuc2FtcGxlc1BlckxpbmUgLyA4IC8gZnJhbWUubWF4SCk7XG4gICAgICBjb25zdCBtY3VzUGVyQ29sdW1uID0gTWF0aC5jZWlsKGZyYW1lLnNjYW5MaW5lcyAvIDggLyBmcmFtZS5tYXhWKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZnJhbWUuY29tcG9uZW50cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGZyYW1lLmNvbXBvbmVudHNbaV07XG4gICAgICAgIGNvbnN0IGJsb2Nrc1BlckxpbmUgPSBNYXRoLmNlaWwoTWF0aC5jZWlsKGZyYW1lLnNhbXBsZXNQZXJMaW5lIC8gOCkgKiBjb21wb25lbnQuaCAvIGZyYW1lLm1heEgpO1xuICAgICAgICBjb25zdCBibG9ja3NQZXJDb2x1bW4gPSBNYXRoLmNlaWwoTWF0aC5jZWlsKGZyYW1lLnNjYW5MaW5lcyAvIDgpICogY29tcG9uZW50LnYgLyBmcmFtZS5tYXhWKTtcbiAgICAgICAgY29uc3QgYmxvY2tzUGVyTGluZUZvck1jdSA9IG1jdXNQZXJMaW5lICogY29tcG9uZW50Lmg7XG4gICAgICAgIGNvbnN0IGJsb2Nrc1BlckNvbHVtbkZvck1jdSA9IG1jdXNQZXJDb2x1bW4gKiBjb21wb25lbnQudjtcbiAgICAgICAgY29uc3QgYmxvY2tzQnVmZmVyU2l6ZSA9IDY0ICogYmxvY2tzUGVyQ29sdW1uRm9yTWN1ICogKGJsb2Nrc1BlckxpbmVGb3JNY3UgKyAxKTtcbiAgICAgICAgY29tcG9uZW50LmJsb2NrRGF0YSA9IG5ldyBJbnQxNkFycmF5KGJsb2Nrc0J1ZmZlclNpemUpO1xuICAgICAgICBjb21wb25lbnQuYmxvY2tzUGVyTGluZSA9IGJsb2Nrc1BlckxpbmU7XG4gICAgICAgIGNvbXBvbmVudC5ibG9ja3NQZXJDb2x1bW4gPSBibG9ja3NQZXJDb2x1bW47XG4gICAgICB9XG5cbiAgICAgIGZyYW1lLm1jdXNQZXJMaW5lID0gbWN1c1BlckxpbmU7XG4gICAgICBmcmFtZS5tY3VzUGVyQ29sdW1uID0gbWN1c1BlckNvbHVtbjtcbiAgICB9XG5cbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBsZXQgamZpZiA9IG51bGw7XG4gICAgbGV0IGFkb2JlID0gbnVsbDtcbiAgICBsZXQgZnJhbWUsIHJlc2V0SW50ZXJ2YWw7XG4gICAgbGV0IG51bVNPU01hcmtlcnMgPSAwO1xuICAgIGNvbnN0IHF1YW50aXphdGlvblRhYmxlcyA9IFtdO1xuICAgIGNvbnN0IGh1ZmZtYW5UYWJsZXNBQyA9IFtdLFxuICAgICAgICAgIGh1ZmZtYW5UYWJsZXNEQyA9IFtdO1xuICAgIGxldCBmaWxlTWFya2VyID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG9mZnNldCk7XG4gICAgb2Zmc2V0ICs9IDI7XG5cbiAgICBpZiAoZmlsZU1hcmtlciAhPT0gMHhmZmQ4KSB7XG4gICAgICB0aHJvdyBuZXcgSnBlZ0Vycm9yKFwiU09JIG5vdCBmb3VuZFwiKTtcbiAgICB9XG5cbiAgICBmaWxlTWFya2VyID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG9mZnNldCk7XG4gICAgb2Zmc2V0ICs9IDI7XG5cbiAgICBtYXJrZXJMb29wOiB3aGlsZSAoZmlsZU1hcmtlciAhPT0gMHhmZmQ5KSB7XG4gICAgICBsZXQgaSwgaiwgbDtcblxuICAgICAgc3dpdGNoIChmaWxlTWFya2VyKSB7XG4gICAgICAgIGNhc2UgMHhmZmUwOlxuICAgICAgICBjYXNlIDB4ZmZlMTpcbiAgICAgICAgY2FzZSAweGZmZTI6XG4gICAgICAgIGNhc2UgMHhmZmUzOlxuICAgICAgICBjYXNlIDB4ZmZlNDpcbiAgICAgICAgY2FzZSAweGZmZTU6XG4gICAgICAgIGNhc2UgMHhmZmU2OlxuICAgICAgICBjYXNlIDB4ZmZlNzpcbiAgICAgICAgY2FzZSAweGZmZTg6XG4gICAgICAgIGNhc2UgMHhmZmU5OlxuICAgICAgICBjYXNlIDB4ZmZlYTpcbiAgICAgICAgY2FzZSAweGZmZWI6XG4gICAgICAgIGNhc2UgMHhmZmVjOlxuICAgICAgICBjYXNlIDB4ZmZlZDpcbiAgICAgICAgY2FzZSAweGZmZWU6XG4gICAgICAgIGNhc2UgMHhmZmVmOlxuICAgICAgICBjYXNlIDB4ZmZmZTpcbiAgICAgICAgICBjb25zdCBhcHBEYXRhID0gcmVhZERhdGFCbG9jaygpO1xuXG4gICAgICAgICAgaWYgKGZpbGVNYXJrZXIgPT09IDB4ZmZlMCkge1xuICAgICAgICAgICAgaWYgKGFwcERhdGFbMF0gPT09IDB4NGEgJiYgYXBwRGF0YVsxXSA9PT0gMHg0NiAmJiBhcHBEYXRhWzJdID09PSAweDQ5ICYmIGFwcERhdGFbM10gPT09IDB4NDYgJiYgYXBwRGF0YVs0XSA9PT0gMCkge1xuICAgICAgICAgICAgICBqZmlmID0ge1xuICAgICAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICAgIG1ham9yOiBhcHBEYXRhWzVdLFxuICAgICAgICAgICAgICAgICAgbWlub3I6IGFwcERhdGFbNl1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRlbnNpdHlVbml0czogYXBwRGF0YVs3XSxcbiAgICAgICAgICAgICAgICB4RGVuc2l0eTogYXBwRGF0YVs4XSA8PCA4IHwgYXBwRGF0YVs5XSxcbiAgICAgICAgICAgICAgICB5RGVuc2l0eTogYXBwRGF0YVsxMF0gPDwgOCB8IGFwcERhdGFbMTFdLFxuICAgICAgICAgICAgICAgIHRodW1iV2lkdGg6IGFwcERhdGFbMTJdLFxuICAgICAgICAgICAgICAgIHRodW1iSGVpZ2h0OiBhcHBEYXRhWzEzXSxcbiAgICAgICAgICAgICAgICB0aHVtYkRhdGE6IGFwcERhdGEuc3ViYXJyYXkoMTQsIDE0ICsgMyAqIGFwcERhdGFbMTJdICogYXBwRGF0YVsxM10pXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZpbGVNYXJrZXIgPT09IDB4ZmZlZSkge1xuICAgICAgICAgICAgaWYgKGFwcERhdGFbMF0gPT09IDB4NDEgJiYgYXBwRGF0YVsxXSA9PT0gMHg2NCAmJiBhcHBEYXRhWzJdID09PSAweDZmICYmIGFwcERhdGFbM10gPT09IDB4NjIgJiYgYXBwRGF0YVs0XSA9PT0gMHg2NSkge1xuICAgICAgICAgICAgICBhZG9iZSA9IHtcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiBhcHBEYXRhWzVdIDw8IDggfCBhcHBEYXRhWzZdLFxuICAgICAgICAgICAgICAgIGZsYWdzMDogYXBwRGF0YVs3XSA8PCA4IHwgYXBwRGF0YVs4XSxcbiAgICAgICAgICAgICAgICBmbGFnczE6IGFwcERhdGFbOV0gPDwgOCB8IGFwcERhdGFbMTBdLFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybUNvZGU6IGFwcERhdGFbMTFdXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAweGZmZGI6XG4gICAgICAgICAgY29uc3QgcXVhbnRpemF0aW9uVGFibGVzTGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG9mZnNldCk7XG4gICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgY29uc3QgcXVhbnRpemF0aW9uVGFibGVzRW5kID0gcXVhbnRpemF0aW9uVGFibGVzTGVuZ3RoICsgb2Zmc2V0IC0gMjtcbiAgICAgICAgICBsZXQgejtcblxuICAgICAgICAgIHdoaWxlIChvZmZzZXQgPCBxdWFudGl6YXRpb25UYWJsZXNFbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IHF1YW50aXphdGlvblRhYmxlU3BlYyA9IGRhdGFbb2Zmc2V0KytdO1xuICAgICAgICAgICAgY29uc3QgdGFibGVEYXRhID0gbmV3IFVpbnQxNkFycmF5KDY0KTtcblxuICAgICAgICAgICAgaWYgKHF1YW50aXphdGlvblRhYmxlU3BlYyA+PiA0ID09PSAwKSB7XG4gICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCA2NDsgaisrKSB7XG4gICAgICAgICAgICAgICAgeiA9IGRjdFppZ1phZ1tqXTtcbiAgICAgICAgICAgICAgICB0YWJsZURhdGFbel0gPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChxdWFudGl6YXRpb25UYWJsZVNwZWMgPj4gNCA9PT0gMSkge1xuICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgNjQ7IGorKykge1xuICAgICAgICAgICAgICAgIHogPSBkY3RaaWdaYWdbal07XG4gICAgICAgICAgICAgICAgdGFibGVEYXRhW3pdID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBKcGVnRXJyb3IoXCJEUVQgLSBpbnZhbGlkIHRhYmxlIHNwZWNcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHF1YW50aXphdGlvblRhYmxlc1txdWFudGl6YXRpb25UYWJsZVNwZWMgJiAxNV0gPSB0YWJsZURhdGE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAweGZmYzA6XG4gICAgICAgIGNhc2UgMHhmZmMxOlxuICAgICAgICBjYXNlIDB4ZmZjMjpcbiAgICAgICAgICBpZiAoZnJhbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBKcGVnRXJyb3IoXCJPbmx5IHNpbmdsZSBmcmFtZSBKUEVHcyBzdXBwb3J0ZWRcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgZnJhbWUgPSB7fTtcbiAgICAgICAgICBmcmFtZS5leHRlbmRlZCA9IGZpbGVNYXJrZXIgPT09IDB4ZmZjMTtcbiAgICAgICAgICBmcmFtZS5wcm9ncmVzc2l2ZSA9IGZpbGVNYXJrZXIgPT09IDB4ZmZjMjtcbiAgICAgICAgICBmcmFtZS5wcmVjaXNpb24gPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICBjb25zdCBzb2ZTY2FuTGluZXMgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgb2Zmc2V0KTtcbiAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICBmcmFtZS5zY2FuTGluZXMgPSBkbmxTY2FuTGluZXMgfHwgc29mU2NhbkxpbmVzO1xuICAgICAgICAgIGZyYW1lLnNhbXBsZXNQZXJMaW5lID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG9mZnNldCk7XG4gICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgZnJhbWUuY29tcG9uZW50cyA9IFtdO1xuICAgICAgICAgIGZyYW1lLmNvbXBvbmVudElkcyA9IHt9O1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHNDb3VudCA9IGRhdGFbb2Zmc2V0KytdO1xuICAgICAgICAgIGxldCBtYXhIID0gMCxcbiAgICAgICAgICAgICAgbWF4ViA9IDA7XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29tcG9uZW50c0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudElkID0gZGF0YVtvZmZzZXRdO1xuICAgICAgICAgICAgY29uc3QgaCA9IGRhdGFbb2Zmc2V0ICsgMV0gPj4gNDtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBkYXRhW29mZnNldCArIDFdICYgMTU7XG5cbiAgICAgICAgICAgIGlmIChtYXhIIDwgaCkge1xuICAgICAgICAgICAgICBtYXhIID0gaDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1heFYgPCB2KSB7XG4gICAgICAgICAgICAgIG1heFYgPSB2O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBxSWQgPSBkYXRhW29mZnNldCArIDJdO1xuICAgICAgICAgICAgbCA9IGZyYW1lLmNvbXBvbmVudHMucHVzaCh7XG4gICAgICAgICAgICAgIGgsXG4gICAgICAgICAgICAgIHYsXG4gICAgICAgICAgICAgIHF1YW50aXphdGlvbklkOiBxSWQsXG4gICAgICAgICAgICAgIHF1YW50aXphdGlvblRhYmxlOiBudWxsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZyYW1lLmNvbXBvbmVudElkc1tjb21wb25lbnRJZF0gPSBsIC0gMTtcbiAgICAgICAgICAgIG9mZnNldCArPSAzO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZyYW1lLm1heEggPSBtYXhIO1xuICAgICAgICAgIGZyYW1lLm1heFYgPSBtYXhWO1xuICAgICAgICAgIHByZXBhcmVDb21wb25lbnRzKGZyYW1lKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDB4ZmZjNDpcbiAgICAgICAgICBjb25zdCBodWZmbWFuTGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG9mZnNldCk7XG4gICAgICAgICAgb2Zmc2V0ICs9IDI7XG5cbiAgICAgICAgICBmb3IgKGkgPSAyOyBpIDwgaHVmZm1hbkxlbmd0aDspIHtcbiAgICAgICAgICAgIGNvbnN0IGh1ZmZtYW5UYWJsZVNwZWMgPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICAgIGNvbnN0IGNvZGVMZW5ndGhzID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICAgICAgICAgICAgbGV0IGNvZGVMZW5ndGhTdW0gPSAwO1xuXG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgMTY7IGorKywgb2Zmc2V0KyspIHtcbiAgICAgICAgICAgICAgY29kZUxlbmd0aFN1bSArPSBjb2RlTGVuZ3Roc1tqXSA9IGRhdGFbb2Zmc2V0XTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaHVmZm1hblZhbHVlcyA9IG5ldyBVaW50OEFycmF5KGNvZGVMZW5ndGhTdW0pO1xuXG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgY29kZUxlbmd0aFN1bTsgaisrLCBvZmZzZXQrKykge1xuICAgICAgICAgICAgICBodWZmbWFuVmFsdWVzW2pdID0gZGF0YVtvZmZzZXRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpICs9IDE3ICsgY29kZUxlbmd0aFN1bTtcbiAgICAgICAgICAgIChodWZmbWFuVGFibGVTcGVjID4+IDQgPT09IDAgPyBodWZmbWFuVGFibGVzREMgOiBodWZmbWFuVGFibGVzQUMpW2h1ZmZtYW5UYWJsZVNwZWMgJiAxNV0gPSBidWlsZEh1ZmZtYW5UYWJsZShjb2RlTGVuZ3RocywgaHVmZm1hblZhbHVlcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAweGZmZGQ6XG4gICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgcmVzZXRJbnRlcnZhbCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBvZmZzZXQpO1xuICAgICAgICAgIG9mZnNldCArPSAyO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMHhmZmRhOlxuICAgICAgICAgIGNvbnN0IHBhcnNlRE5MTWFya2VyID0gKytudW1TT1NNYXJrZXJzID09PSAxICYmICFkbmxTY2FuTGluZXM7XG4gICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0b3JzQ291bnQgPSBkYXRhW29mZnNldCsrXSxcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzID0gW107XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2VsZWN0b3JzQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudEluZGV4ID0gZnJhbWUuY29tcG9uZW50SWRzW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGZyYW1lLmNvbXBvbmVudHNbY29tcG9uZW50SW5kZXhdO1xuICAgICAgICAgICAgY29tcG9uZW50LmluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICBjb25zdCB0YWJsZVNwZWMgPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICAgIGNvbXBvbmVudC5odWZmbWFuVGFibGVEQyA9IGh1ZmZtYW5UYWJsZXNEQ1t0YWJsZVNwZWMgPj4gNF07XG4gICAgICAgICAgICBjb21wb25lbnQuaHVmZm1hblRhYmxlQUMgPSBodWZmbWFuVGFibGVzQUNbdGFibGVTcGVjICYgMTVdO1xuICAgICAgICAgICAgY29tcG9uZW50cy5wdXNoKGNvbXBvbmVudCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgc3BlY3RyYWxTdGFydCA9IGRhdGFbb2Zmc2V0KytdLFxuICAgICAgICAgICAgICAgIHNwZWN0cmFsRW5kID0gZGF0YVtvZmZzZXQrK10sXG4gICAgICAgICAgICAgICAgc3VjY2Vzc2l2ZUFwcHJveGltYXRpb24gPSBkYXRhW29mZnNldCsrXTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzZWQgPSBkZWNvZGVTY2FuKGRhdGEsIG9mZnNldCwgZnJhbWUsIGNvbXBvbmVudHMsIHJlc2V0SW50ZXJ2YWwsIHNwZWN0cmFsU3RhcnQsIHNwZWN0cmFsRW5kLCBzdWNjZXNzaXZlQXBwcm94aW1hdGlvbiA+PiA0LCBzdWNjZXNzaXZlQXBwcm94aW1hdGlvbiAmIDE1LCBwYXJzZUROTE1hcmtlcik7XG4gICAgICAgICAgICBvZmZzZXQgKz0gcHJvY2Vzc2VkO1xuICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBETkxNYXJrZXJFcnJvcikge1xuICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYCR7ZXgubWVzc2FnZX0gLS0gYXR0ZW1wdGluZyB0byByZS1wYXJzZSB0aGUgSlBFRyBpbWFnZS5gKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2UoZGF0YSwge1xuICAgICAgICAgICAgICAgIGRubFNjYW5MaW5lczogZXguc2NhbkxpbmVzXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChleCBpbnN0YW5jZW9mIEVPSU1hcmtlckVycm9yKSB7XG4gICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgJHtleC5tZXNzYWdlfSAtLSBpZ25vcmluZyB0aGUgcmVzdCBvZiB0aGUgaW1hZ2UgZGF0YS5gKTtcbiAgICAgICAgICAgICAgYnJlYWsgbWFya2VyTG9vcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAweGZmZGM6XG4gICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAweGZmZmY6XG4gICAgICAgICAgaWYgKGRhdGFbb2Zmc2V0XSAhPT0gMHhmZikge1xuICAgICAgICAgICAgb2Zmc2V0LS07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zdCBuZXh0RmlsZU1hcmtlciA9IGZpbmROZXh0RmlsZU1hcmtlcihkYXRhLCBvZmZzZXQgLSAyLCBvZmZzZXQgLSAzKTtcblxuICAgICAgICAgIGlmIChuZXh0RmlsZU1hcmtlciAmJiBuZXh0RmlsZU1hcmtlci5pbnZhbGlkKSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJKcGVnSW1hZ2UucGFyc2UgLSB1bmV4cGVjdGVkIGRhdGEsIGN1cnJlbnQgbWFya2VyIGlzOiBcIiArIG5leHRGaWxlTWFya2VyLmludmFsaWQpO1xuICAgICAgICAgICAgb2Zmc2V0ID0gbmV4dEZpbGVNYXJrZXIub2Zmc2V0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFuZXh0RmlsZU1hcmtlciB8fCBvZmZzZXQgPj0gZGF0YS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJKcGVnSW1hZ2UucGFyc2UgLSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGltYWdlIGRhdGEgXCIgKyBcIndpdGhvdXQgZmluZGluZyBhbiBFT0kgbWFya2VyICgweEZGRDkpLlwiKTtcbiAgICAgICAgICAgIGJyZWFrIG1hcmtlckxvb3A7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgbmV3IEpwZWdFcnJvcihcIkpwZWdJbWFnZS5wYXJzZSAtIHVua25vd24gbWFya2VyOiBcIiArIGZpbGVNYXJrZXIudG9TdHJpbmcoMTYpKTtcbiAgICAgIH1cblxuICAgICAgZmlsZU1hcmtlciA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBvZmZzZXQpO1xuICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgfVxuXG4gICAgdGhpcy53aWR0aCA9IGZyYW1lLnNhbXBsZXNQZXJMaW5lO1xuICAgIHRoaXMuaGVpZ2h0ID0gZnJhbWUuc2NhbkxpbmVzO1xuICAgIHRoaXMuamZpZiA9IGpmaWY7XG4gICAgdGhpcy5hZG9iZSA9IGFkb2JlO1xuICAgIHRoaXMuY29tcG9uZW50cyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZnJhbWUuY29tcG9uZW50cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBmcmFtZS5jb21wb25lbnRzW2ldO1xuICAgICAgY29uc3QgcXVhbnRpemF0aW9uVGFibGUgPSBxdWFudGl6YXRpb25UYWJsZXNbY29tcG9uZW50LnF1YW50aXphdGlvbklkXTtcblxuICAgICAgaWYgKHF1YW50aXphdGlvblRhYmxlKSB7XG4gICAgICAgIGNvbXBvbmVudC5xdWFudGl6YXRpb25UYWJsZSA9IHF1YW50aXphdGlvblRhYmxlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbXBvbmVudHMucHVzaCh7XG4gICAgICAgIGluZGV4OiBjb21wb25lbnQuaW5kZXgsXG4gICAgICAgIG91dHB1dDogYnVpbGRDb21wb25lbnREYXRhKGZyYW1lLCBjb21wb25lbnQpLFxuICAgICAgICBzY2FsZVg6IGNvbXBvbmVudC5oIC8gZnJhbWUubWF4SCxcbiAgICAgICAgc2NhbGVZOiBjb21wb25lbnQudiAvIGZyYW1lLm1heFYsXG4gICAgICAgIGJsb2Nrc1BlckxpbmU6IGNvbXBvbmVudC5ibG9ja3NQZXJMaW5lLFxuICAgICAgICBibG9ja3NQZXJDb2x1bW46IGNvbXBvbmVudC5ibG9ja3NQZXJDb2x1bW5cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMubnVtQ29tcG9uZW50cyA9IHRoaXMuY29tcG9uZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIF9nZXRMaW5lYXJpemVkQmxvY2tEYXRhKHdpZHRoLCBoZWlnaHQsIGlzU291cmNlUERGID0gZmFsc2UpIHtcbiAgICBjb25zdCBzY2FsZVggPSB0aGlzLndpZHRoIC8gd2lkdGgsXG4gICAgICAgICAgc2NhbGVZID0gdGhpcy5oZWlnaHQgLyBoZWlnaHQ7XG4gICAgbGV0IGNvbXBvbmVudCwgY29tcG9uZW50U2NhbGVYLCBjb21wb25lbnRTY2FsZVksIGJsb2Nrc1BlclNjYW5saW5lO1xuICAgIGxldCB4LCB5LCBpLCBqLCBrO1xuICAgIGxldCBpbmRleDtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBsZXQgb3V0cHV0O1xuICAgIGNvbnN0IG51bUNvbXBvbmVudHMgPSB0aGlzLmNvbXBvbmVudHMubGVuZ3RoO1xuICAgIGNvbnN0IGRhdGFMZW5ndGggPSB3aWR0aCAqIGhlaWdodCAqIG51bUNvbXBvbmVudHM7XG4gICAgY29uc3QgZGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShkYXRhTGVuZ3RoKTtcbiAgICBjb25zdCB4U2NhbGVCbG9ja09mZnNldCA9IG5ldyBVaW50MzJBcnJheSh3aWR0aCk7XG4gICAgY29uc3QgbWFzazNMU0IgPSAweGZmZmZmZmY4O1xuICAgIGxldCBsYXN0Q29tcG9uZW50U2NhbGVYO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG51bUNvbXBvbmVudHM7IGkrKykge1xuICAgICAgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnRzW2ldO1xuICAgICAgY29tcG9uZW50U2NhbGVYID0gY29tcG9uZW50LnNjYWxlWCAqIHNjYWxlWDtcbiAgICAgIGNvbXBvbmVudFNjYWxlWSA9IGNvbXBvbmVudC5zY2FsZVkgKiBzY2FsZVk7XG4gICAgICBvZmZzZXQgPSBpO1xuICAgICAgb3V0cHV0ID0gY29tcG9uZW50Lm91dHB1dDtcbiAgICAgIGJsb2Nrc1BlclNjYW5saW5lID0gY29tcG9uZW50LmJsb2Nrc1BlckxpbmUgKyAxIDw8IDM7XG5cbiAgICAgIGlmIChjb21wb25lbnRTY2FsZVggIT09IGxhc3RDb21wb25lbnRTY2FsZVgpIHtcbiAgICAgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgICAgICBqID0gMCB8IHggKiBjb21wb25lbnRTY2FsZVg7XG4gICAgICAgICAgeFNjYWxlQmxvY2tPZmZzZXRbeF0gPSAoaiAmIG1hc2szTFNCKSA8PCAzIHwgaiAmIDc7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0Q29tcG9uZW50U2NhbGVYID0gY29tcG9uZW50U2NhbGVYO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHtcbiAgICAgICAgaiA9IDAgfCB5ICogY29tcG9uZW50U2NhbGVZO1xuICAgICAgICBpbmRleCA9IGJsb2Nrc1BlclNjYW5saW5lICogKGogJiBtYXNrM0xTQikgfCAoaiAmIDcpIDw8IDM7XG5cbiAgICAgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgICAgICBkYXRhW29mZnNldF0gPSBvdXRwdXRbaW5kZXggKyB4U2NhbGVCbG9ja09mZnNldFt4XV07XG4gICAgICAgICAgb2Zmc2V0ICs9IG51bUNvbXBvbmVudHM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgdHJhbnNmb3JtID0gdGhpcy5fZGVjb2RlVHJhbnNmb3JtO1xuXG4gICAgaWYgKCFpc1NvdXJjZVBERiAmJiBudW1Db21wb25lbnRzID09PSA0ICYmICF0cmFuc2Zvcm0pIHtcbiAgICAgIHRyYW5zZm9ybSA9IG5ldyBJbnQzMkFycmF5KFstMjU2LCAyNTUsIC0yNTYsIDI1NSwgLTI1NiwgMjU1LCAtMjU2LCAyNTVdKTtcbiAgICB9XG5cbiAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YUxlbmd0aDspIHtcbiAgICAgICAgZm9yIChqID0gMCwgayA9IDA7IGogPCBudW1Db21wb25lbnRzOyBqKyssIGkrKywgayArPSAyKSB7XG4gICAgICAgICAgZGF0YVtpXSA9IChkYXRhW2ldICogdHJhbnNmb3JtW2tdID4+IDgpICsgdHJhbnNmb3JtW2sgKyAxXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgZ2V0IF9pc0NvbG9yQ29udmVyc2lvbk5lZWRlZCgpIHtcbiAgICBpZiAodGhpcy5hZG9iZSkge1xuICAgICAgcmV0dXJuICEhdGhpcy5hZG9iZS50cmFuc2Zvcm1Db2RlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm51bUNvbXBvbmVudHMgPT09IDMpIHtcbiAgICAgIGlmICh0aGlzLl9jb2xvclRyYW5zZm9ybSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50c1swXS5pbmRleCA9PT0gMHg1MiAmJiB0aGlzLmNvbXBvbmVudHNbMV0uaW5kZXggPT09IDB4NDcgJiYgdGhpcy5jb21wb25lbnRzWzJdLmluZGV4ID09PSAweDQyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbG9yVHJhbnNmb3JtID09PSAxKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBfY29udmVydFljY1RvUmdiKGRhdGEpIHtcbiAgICBsZXQgWSwgQ2IsIENyO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGRhdGEubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgIFkgPSBkYXRhW2ldO1xuICAgICAgQ2IgPSBkYXRhW2kgKyAxXTtcbiAgICAgIENyID0gZGF0YVtpICsgMl07XG4gICAgICBkYXRhW2ldID0gWSAtIDE3OS40NTYgKyAxLjQwMiAqIENyO1xuICAgICAgZGF0YVtpICsgMV0gPSBZICsgMTM1LjQ1OSAtIDAuMzQ0ICogQ2IgLSAwLjcxNCAqIENyO1xuICAgICAgZGF0YVtpICsgMl0gPSBZIC0gMjI2LjgxNiArIDEuNzcyICogQ2I7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBfY29udmVydFljY2tUb1JnYihkYXRhKSB7XG4gICAgbGV0IFksIENiLCBDciwgaztcbiAgICBsZXQgb2Zmc2V0ID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBkYXRhLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSArPSA0KSB7XG4gICAgICBZID0gZGF0YVtpXTtcbiAgICAgIENiID0gZGF0YVtpICsgMV07XG4gICAgICBDciA9IGRhdGFbaSArIDJdO1xuICAgICAgayA9IGRhdGFbaSArIDNdO1xuICAgICAgZGF0YVtvZmZzZXQrK10gPSAtMTIyLjY3MTk1NDA2ODk0ICsgQ2IgKiAoLTYuNjA2MzU2Njk0MjAzNjRlLTUgKiBDYiArIDAuMDAwNDM3MTMwNDc1OTI2MjMyICogQ3IgLSA1LjQwODA2MTAwNjQ1OTllLTUgKiBZICsgMC4wMDA0ODQ0OTc5NzEyMDI4MSAqIGsgLSAwLjE1NDM2MjE1MTg3MTEyNikgKyBDciAqICgtMC4wMDA5NTc5NjQzNzg0NDU3NzMgKiBDciArIDAuMDAwODE3MDc2OTExMzQ2NjI1ICogWSAtIDAuMDA0NzcyNzE0MDU0MDg3NDcgKiBrICsgMS41MzM4MDI1MzIyMTczNCkgKyBZICogKDAuMDAwOTYxMjUwMTg0MTMwNjg4ICogWSAtIDAuMDAyNjYyNTczMzIyODM5MzMgKiBrICsgMC40ODM1NzA4ODQ1MTI2NSkgKyBrICogKC0wLjAwMDMzNjE5NzE3NzYxODM5NCAqIGsgKyAwLjQ4NDc5MTU2MTQ5MDc3Nik7XG4gICAgICBkYXRhW29mZnNldCsrXSA9IDEwNy4yNjgwMzkzOTc3MjQgKyBDYiAqICgyLjE5OTI3MTA0NTI1NzQxZS01ICogQ2IgLSAwLjAwMDY0MDk5MjAxODI5Nzk0NSAqIENyICsgMC4wMDA2NTkzOTcwMDEyNDU1NzcgKiBZICsgMC4wMDA0MjYxMDU2NTI5Mzg4MzcgKiBrIC0gMC4xNzY0OTE3OTI0NjI4NzUpICsgQ3IgKiAoLTAuMDAwNzc4MjY5OTQxNTEzNjgzICogQ3IgKyAwLjAwMTMwODcyMjYxNDA4Mjc1ICogWSArIDAuMDAwNzcwNDgyNjMxODAxMTMyICogayAtIDAuMTUxMDUxNDkyNzc1NTYyKSArIFkgKiAoMC4wMDEyNjkzNTM2ODExNDg0MyAqIFkgLSAwLjAwMjY1MDkwMTg5MDEwODk4ICogayArIDAuMjU4MDI5MTAyMDY4NDUpICsgayAqICgtMC4wMDAzMTg5MTMxMTc1ODgzMjggKiBrIC0gMC4yMTM3NDI0MDAzMjM2NjUpO1xuICAgICAgZGF0YVtvZmZzZXQrK10gPSAtMjAuODEwMDEyNTQ2OTQ3ICsgQ2IgKiAoLTAuMDAwNTcwMTE1MTk2OTczNjc3ICogQ2IgLSAyLjYzNDA5MDUxMDA0NTg5ZS01ICogQ3IgKyAwLjAwMjA3NDEwODgxMTUwMTIgKiBZIC0gMC4wMDI4ODI2MDIzNjg1MzQ0MiAqIGsgKyAwLjgxNDI3Mjk2ODM1OTI5NSkgKyBDciAqICgtMS41MzQ5NjA1NzQ0MDk3NWUtNSAqIENyIC0gMC4wMDAxMzI2ODkwNDM5NjE0NDYgKiBZICsgMC4wMDA1NjA4MzM2OTEyNDI4MTIgKiBrIC0gMC4xOTUxNTIwMjc1MzQwNDkpICsgWSAqICgwLjAwMTc0NDE4MTMyOTI3NTgyICogWSAtIDAuMDAyNTUyNDMzMjE0MzkzNDcgKiBrICsgMC4xMTY5MzUwMjA0NjUxNDUpICsgayAqICgtMC4wMDAzNDM1MzE5OTY1MTA1NTUgKiBrICsgMC4yNDE2NTI2MDIzMjQwNyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGEuc3ViYXJyYXkoMCwgb2Zmc2V0KTtcbiAgfVxuXG4gIF9jb252ZXJ0WWNja1RvQ215ayhkYXRhKSB7XG4gICAgbGV0IFksIENiLCBDcjtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBkYXRhLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSArPSA0KSB7XG4gICAgICBZID0gZGF0YVtpXTtcbiAgICAgIENiID0gZGF0YVtpICsgMV07XG4gICAgICBDciA9IGRhdGFbaSArIDJdO1xuICAgICAgZGF0YVtpXSA9IDQzNC40NTYgLSBZIC0gMS40MDIgKiBDcjtcbiAgICAgIGRhdGFbaSArIDFdID0gMTE5LjU0MSAtIFkgKyAwLjM0NCAqIENiICsgMC43MTQgKiBDcjtcbiAgICAgIGRhdGFbaSArIDJdID0gNDgxLjgxNiAtIFkgLSAxLjc3MiAqIENiO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgX2NvbnZlcnRDbXlrVG9SZ2IoZGF0YSkge1xuICAgIGxldCBjLCBtLCB5LCBrO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGRhdGEubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpICs9IDQpIHtcbiAgICAgIGMgPSBkYXRhW2ldO1xuICAgICAgbSA9IGRhdGFbaSArIDFdO1xuICAgICAgeSA9IGRhdGFbaSArIDJdO1xuICAgICAgayA9IGRhdGFbaSArIDNdO1xuICAgICAgZGF0YVtvZmZzZXQrK10gPSAyNTUgKyBjICogKC0wLjAwMDA2NzQ3MTQ3MDczNjAyNDQxICogYyArIDAuMDAwODM3OTI2MjEyMTAxMzcyNyAqIG0gKyAwLjAwMDI4OTQ3MTgxODg2NDMyOTQgKiB5ICsgMC4wMDMyNjQyMzEwNTc1Mzc4MDYgKiBrIC0gMS4xMTg1NjExODY3MjAzOTM3KSArIG0gKiAoMC4wMDAwMjYzNzQxMDc2MTYwODk0MDUgKiBtIC0gMC4wMDAwODYyNjk0OTE1ODYzODU3MiAqIHkgLSAwLjAwMDI3NDg3NjkwNjc0OTk0OTEgKiBrIC0gMC4wMjE1NTY4ODc5NDk3ODk2NykgKyB5ICogKC0wLjAwMDAzODc4MDk5MjEyODY5MzYzICogeSAtIDAuMDAwMzI2NzgwODI3OTQ4NTI4NiAqIGsgKyAwLjA2ODY3NDIyMzg1OTUzNDUpIC0gayAqICgwLjAwMDMzNjE5NzE3NzYxODM5MzcgKiBrICsgMC43NDMwNjU5MTUxMzQyMjU0KTtcbiAgICAgIGRhdGFbb2Zmc2V0KytdID0gMjU1ICsgYyAqICgwLjAwMDEzNTk2MzcyODEzNTg4ODQ4ICogYyArIDAuMDAwOTI0NTM3MTMyNTczNTg1ICogbSArIDAuMDAwMTA1NjczNTk2MTg2ODM1OTMgKiB5ICsgMC4wMDA0NzkxODY0Njg3NDM2NTEyICogayAtIDAuMzEwOTY4OTU4NzUxNTg3NSkgKyBtICogKC0wLjAwMDIzNTQ1MzQ2MTA4MzcwMzQ0ICogbSArIDAuMDAwMjcwMjg0NTI1MzUzNDcxNCAqIHkgKyAwLjAwMjAyMDAzMDg5NzczMDcxNTYgKiBrIC0gMC43NDg4MDUyMTY3MDE1NDk0KSArIHkgKiAoMC4wMDAwNjgzNDgxNTk5ODIzNTY2MiAqIHkgKyAwLjAwMDE1MTY4NDUyMzYzNDYwOTczICogayAtIDAuMDk3NTE5Mjc3NzQ3Mjg5MzMpIC0gayAqICgwLjAwMDMxODkxMzExNzU4ODMyODEgKiBrICsgMC43MzY0ODgzODA3NzMzMTY4KTtcbiAgICAgIGRhdGFbb2Zmc2V0KytdID0gMjU1ICsgYyAqICgwLjAwMDAxMzU5ODY1MDQxMTM4NTMwNyAqIGMgKyAwLjAwMDEyNDIzOTU2MTc1NDkwODUxICogbSArIDAuMDAwNDc1MTk4NTA5NzU4MzU4OSAqIHkgLSAwLjAwMDAwMzY3MjkzMTc0NzY2MzA0MjIgKiBrIC0gMC4wNTU2MjE4Njk4MDI2NDAzNCkgKyBtICogKDAuMDAwMTYxNDEzODA1OTg3MjQ2NzYgKiBtICsgMC4wMDA5NjkyMjM5MTMwNzI1MTg2ICogeSArIDAuMDAwNzc4MjY5MjQ1MDAzNjI1MyAqIGsgLSAwLjQ0MDE1MjMyMzY3NTI2NDYzKSArIHkgKiAoNS4wNjg4ODI5MTQwNjg3NjllLTcgKiB5ICsgMC4wMDE3Nzc4MzY5MDExMzc1MDcxICogayAtIDAuNzU5MTQ1NDY0OTc0OTYwOSkgLSBrICogKDAuMDAwMzQzNTMxOTk2NTEwNTU1MyAqIGsgKyAwLjcwNjM3NzAxODYxNjAxNDQpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhLnN1YmFycmF5KDAsIG9mZnNldCk7XG4gIH1cblxuICBnZXREYXRhKHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgZm9yY2VSR0IgPSBmYWxzZSxcbiAgICBpc1NvdXJjZVBERiA9IGZhbHNlXG4gIH0pIHtcbiAgICBpZiAodGhpcy5udW1Db21wb25lbnRzID4gNCkge1xuICAgICAgdGhyb3cgbmV3IEpwZWdFcnJvcihcIlVuc3VwcG9ydGVkIGNvbG9yIG1vZGVcIik7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2dldExpbmVhcml6ZWRCbG9ja0RhdGEod2lkdGgsIGhlaWdodCwgaXNTb3VyY2VQREYpO1xuXG4gICAgaWYgKHRoaXMubnVtQ29tcG9uZW50cyA9PT0gMSAmJiBmb3JjZVJHQikge1xuICAgICAgY29uc3QgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuICAgICAgY29uc3QgcmdiRGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShkYXRhTGVuZ3RoICogMyk7XG4gICAgICBsZXQgb2Zmc2V0ID0gMDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZ3JheUNvbG9yID0gZGF0YVtpXTtcbiAgICAgICAgcmdiRGF0YVtvZmZzZXQrK10gPSBncmF5Q29sb3I7XG4gICAgICAgIHJnYkRhdGFbb2Zmc2V0KytdID0gZ3JheUNvbG9yO1xuICAgICAgICByZ2JEYXRhW29mZnNldCsrXSA9IGdyYXlDb2xvcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJnYkRhdGE7XG4gICAgfSBlbHNlIGlmICh0aGlzLm51bUNvbXBvbmVudHMgPT09IDMgJiYgdGhpcy5faXNDb2xvckNvbnZlcnNpb25OZWVkZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0WWNjVG9SZ2IoZGF0YSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm51bUNvbXBvbmVudHMgPT09IDQpIHtcbiAgICAgIGlmICh0aGlzLl9pc0NvbG9yQ29udmVyc2lvbk5lZWRlZCkge1xuICAgICAgICBpZiAoZm9yY2VSR0IpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydFljY2tUb1JnYihkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0WWNja1RvQ215ayhkYXRhKTtcbiAgICAgIH0gZWxzZSBpZiAoZm9yY2VSR0IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRDbXlrVG9SZ2IoZGF0YSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxufVxuXG5leHBvcnRzLkpwZWdJbWFnZSA9IEpwZWdJbWFnZTtcblxuLyoqKi8gfSksXG4vKiAzOSAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5KcHhTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfZGVjb2RlX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjkpO1xuXG52YXIgX2pweCA9IF9fd19wZGZqc19yZXF1aXJlX18oNDApO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jbGFzcyBKcHhTdHJlYW0gZXh0ZW5kcyBfZGVjb2RlX3N0cmVhbS5EZWNvZGVTdHJlYW0ge1xuICBjb25zdHJ1Y3RvcihzdHJlYW0sIG1heWJlTGVuZ3RoLCBwYXJhbXMpIHtcbiAgICBzdXBlcihtYXliZUxlbmd0aCk7XG4gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5kaWN0ID0gc3RyZWFtLmRpY3Q7XG4gICAgdGhpcy5tYXliZUxlbmd0aCA9IG1heWJlTGVuZ3RoO1xuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICB9XG5cbiAgZ2V0IGJ5dGVzKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImJ5dGVzXCIsIHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKTtcbiAgfVxuXG4gIGVuc3VyZUJ1ZmZlcihyZXF1ZXN0ZWQpIHt9XG5cbiAgcmVhZEJsb2NrKCkge1xuICAgIGlmICh0aGlzLmVvZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGpweEltYWdlID0gbmV3IF9qcHguSnB4SW1hZ2UoKTtcbiAgICBqcHhJbWFnZS5wYXJzZSh0aGlzLmJ5dGVzKTtcbiAgICBjb25zdCB3aWR0aCA9IGpweEltYWdlLndpZHRoO1xuICAgIGNvbnN0IGhlaWdodCA9IGpweEltYWdlLmhlaWdodDtcbiAgICBjb25zdCBjb21wb25lbnRzQ291bnQgPSBqcHhJbWFnZS5jb21wb25lbnRzQ291bnQ7XG4gICAgY29uc3QgdGlsZUNvdW50ID0ganB4SW1hZ2UudGlsZXMubGVuZ3RoO1xuXG4gICAgaWYgKHRpbGVDb3VudCA9PT0gMSkge1xuICAgICAgdGhpcy5idWZmZXIgPSBqcHhJbWFnZS50aWxlc1swXS5pdGVtcztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheSh3aWR0aCAqIGhlaWdodCAqIGNvbXBvbmVudHNDb3VudCk7XG5cbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGlsZUNvdW50OyBrKyspIHtcbiAgICAgICAgY29uc3QgdGlsZUNvbXBvbmVudHMgPSBqcHhJbWFnZS50aWxlc1trXTtcbiAgICAgICAgY29uc3QgdGlsZVdpZHRoID0gdGlsZUNvbXBvbmVudHMud2lkdGg7XG4gICAgICAgIGNvbnN0IHRpbGVIZWlnaHQgPSB0aWxlQ29tcG9uZW50cy5oZWlnaHQ7XG4gICAgICAgIGNvbnN0IHRpbGVMZWZ0ID0gdGlsZUNvbXBvbmVudHMubGVmdDtcbiAgICAgICAgY29uc3QgdGlsZVRvcCA9IHRpbGVDb21wb25lbnRzLnRvcDtcbiAgICAgICAgY29uc3Qgc3JjID0gdGlsZUNvbXBvbmVudHMuaXRlbXM7XG4gICAgICAgIGxldCBzcmNQb3NpdGlvbiA9IDA7XG4gICAgICAgIGxldCBkYXRhUG9zaXRpb24gPSAod2lkdGggKiB0aWxlVG9wICsgdGlsZUxlZnQpICogY29tcG9uZW50c0NvdW50O1xuICAgICAgICBjb25zdCBpbWdSb3dTaXplID0gd2lkdGggKiBjb21wb25lbnRzQ291bnQ7XG4gICAgICAgIGNvbnN0IHRpbGVSb3dTaXplID0gdGlsZVdpZHRoICogY29tcG9uZW50c0NvdW50O1xuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGlsZUhlaWdodDsgaisrKSB7XG4gICAgICAgICAgY29uc3Qgcm93Qnl0ZXMgPSBzcmMuc3ViYXJyYXkoc3JjUG9zaXRpb24sIHNyY1Bvc2l0aW9uICsgdGlsZVJvd1NpemUpO1xuICAgICAgICAgIGRhdGEuc2V0KHJvd0J5dGVzLCBkYXRhUG9zaXRpb24pO1xuICAgICAgICAgIHNyY1Bvc2l0aW9uICs9IHRpbGVSb3dTaXplO1xuICAgICAgICAgIGRhdGFQb3NpdGlvbiArPSBpbWdSb3dTaXplO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYnVmZmVyID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyLmxlbmd0aDtcbiAgICB0aGlzLmVvZiA9IHRydWU7XG4gIH1cblxufVxuXG5leHBvcnRzLkpweFN0cmVhbSA9IEpweFN0cmVhbTtcblxuLyoqKi8gfSksXG4vKiA0MCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5KcHhJbWFnZSA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg5KTtcblxudmFyIF9hcml0aG1ldGljX2RlY29kZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDM2KTtcblxuY2xhc3MgSnB4RXJyb3IgZXh0ZW5kcyBfdXRpbC5CYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgc3VwZXIoYEpQWCBlcnJvcjogJHttc2d9YCwgXCJKcHhFcnJvclwiKTtcbiAgfVxuXG59XG5cbmNvbnN0IFN1YmJhbmRzR2FpbkxvZzIgPSB7XG4gIExMOiAwLFxuICBMSDogMSxcbiAgSEw6IDEsXG4gIEhIOiAyXG59O1xuXG5jbGFzcyBKcHhJbWFnZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZmFpbE9uQ29ycnVwdGVkSW1hZ2UgPSBmYWxzZTtcbiAgfVxuXG4gIHBhcnNlKGRhdGEpIHtcbiAgICBjb25zdCBoZWFkID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIDApO1xuXG4gICAgaWYgKGhlYWQgPT09IDB4ZmY0Zikge1xuICAgICAgdGhpcy5wYXJzZUNvZGVzdHJlYW0oZGF0YSwgMCwgZGF0YS5sZW5ndGgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuICAgIGxldCBwb3NpdGlvbiA9IDA7XG5cbiAgICB3aGlsZSAocG9zaXRpb24gPCBsZW5ndGgpIHtcbiAgICAgIGxldCBoZWFkZXJTaXplID0gODtcbiAgICAgIGxldCBsYm94ID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgIGNvbnN0IHRib3ggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyA0KTtcbiAgICAgIHBvc2l0aW9uICs9IGhlYWRlclNpemU7XG5cbiAgICAgIGlmIChsYm94ID09PSAxKSB7XG4gICAgICAgIGxib3ggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pICogNDI5NDk2NzI5NiArICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDQpO1xuICAgICAgICBwb3NpdGlvbiArPSA4O1xuICAgICAgICBoZWFkZXJTaXplICs9IDg7XG4gICAgICB9XG5cbiAgICAgIGlmIChsYm94ID09PSAwKSB7XG4gICAgICAgIGxib3ggPSBsZW5ndGggLSBwb3NpdGlvbiArIGhlYWRlclNpemU7XG4gICAgICB9XG5cbiAgICAgIGlmIChsYm94IDwgaGVhZGVyU2l6ZSkge1xuICAgICAgICB0aHJvdyBuZXcgSnB4RXJyb3IoXCJJbnZhbGlkIGJveCBmaWVsZCBzaXplXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhTGVuZ3RoID0gbGJveCAtIGhlYWRlclNpemU7XG4gICAgICBsZXQganVtcERhdGFMZW5ndGggPSB0cnVlO1xuXG4gICAgICBzd2l0Y2ggKHRib3gpIHtcbiAgICAgICAgY2FzZSAweDZhNzAzMjY4OlxuICAgICAgICAgIGp1bXBEYXRhTGVuZ3RoID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAweDYzNmY2YzcyOlxuICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IGRhdGFbcG9zaXRpb25dO1xuXG4gICAgICAgICAgaWYgKG1ldGhvZCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgY29sb3JzcGFjZSA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDMpO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGNvbG9yc3BhY2UpIHtcbiAgICAgICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlVua25vd24gY29sb3JzcGFjZSBcIiArIGNvbG9yc3BhY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSAyKSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJJQ0MgcHJvZmlsZSBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMHg2YTcwMzI2MzpcbiAgICAgICAgICB0aGlzLnBhcnNlQ29kZXN0cmVhbShkYXRhLCBwb3NpdGlvbiwgcG9zaXRpb24gKyBkYXRhTGVuZ3RoKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDB4NmE1MDIwMjA6XG4gICAgICAgICAgaWYgKCgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbikgIT09IDB4MGQwYTg3MGEpIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIkludmFsaWQgSlAyIHNpZ25hdHVyZVwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDB4NmE1MDFhMWE6XG4gICAgICAgIGNhc2UgMHg2Njc0Nzk3MDpcbiAgICAgICAgY2FzZSAweDcyNzI2NTcxOlxuICAgICAgICBjYXNlIDB4NzI2NTczMjA6XG4gICAgICAgIGNhc2UgMHg2OTY4NjQ3MjpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnN0IGhlYWRlclR5cGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRib3ggPj4gMjQgJiAweGZmLCB0Ym94ID4+IDE2ICYgMHhmZiwgdGJveCA+PiA4ICYgMHhmZiwgdGJveCAmIDB4ZmYpO1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgVW5zdXBwb3J0ZWQgaGVhZGVyIHR5cGUgJHt0Ym94fSAoJHtoZWFkZXJUeXBlfSkuYCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChqdW1wRGF0YUxlbmd0aCkge1xuICAgICAgICBwb3NpdGlvbiArPSBkYXRhTGVuZ3RoO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHBhcnNlSW1hZ2VQcm9wZXJ0aWVzKHN0cmVhbSkge1xuICAgIGxldCBuZXdCeXRlID0gc3RyZWFtLmdldEJ5dGUoKTtcblxuICAgIHdoaWxlIChuZXdCeXRlID49IDApIHtcbiAgICAgIGNvbnN0IG9sZEJ5dGUgPSBuZXdCeXRlO1xuICAgICAgbmV3Qnl0ZSA9IHN0cmVhbS5nZXRCeXRlKCk7XG4gICAgICBjb25zdCBjb2RlID0gb2xkQnl0ZSA8PCA4IHwgbmV3Qnl0ZTtcblxuICAgICAgaWYgKGNvZGUgPT09IDB4ZmY1MSkge1xuICAgICAgICBzdHJlYW0uc2tpcCg0KTtcbiAgICAgICAgY29uc3QgWHNpeiA9IHN0cmVhbS5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgICBjb25zdCBZc2l6ID0gc3RyZWFtLmdldEludDMyKCkgPj4+IDA7XG4gICAgICAgIGNvbnN0IFhPc2l6ID0gc3RyZWFtLmdldEludDMyKCkgPj4+IDA7XG4gICAgICAgIGNvbnN0IFlPc2l6ID0gc3RyZWFtLmdldEludDMyKCkgPj4+IDA7XG4gICAgICAgIHN0cmVhbS5za2lwKDE2KTtcbiAgICAgICAgY29uc3QgQ3NpeiA9IHN0cmVhbS5nZXRVaW50MTYoKTtcbiAgICAgICAgdGhpcy53aWR0aCA9IFhzaXogLSBYT3NpejtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBZc2l6IC0gWU9zaXo7XG4gICAgICAgIHRoaXMuY29tcG9uZW50c0NvdW50ID0gQ3NpejtcbiAgICAgICAgdGhpcy5iaXRzUGVyQ29tcG9uZW50ID0gODtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBKcHhFcnJvcihcIk5vIHNpemUgbWFya2VyIGZvdW5kIGluIEpQWCBzdHJlYW1cIik7XG4gIH1cblxuICBwYXJzZUNvZGVzdHJlYW0oZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB7fTtcbiAgICBsZXQgZG9Ob3RSZWNvdmVyID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHBvc2l0aW9uID0gc3RhcnQ7XG5cbiAgICAgIHdoaWxlIChwb3NpdGlvbiArIDEgPCBlbmQpIHtcbiAgICAgICAgY29uc3QgY29kZSA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgIHBvc2l0aW9uICs9IDI7XG4gICAgICAgIGxldCBsZW5ndGggPSAwLFxuICAgICAgICAgICAgaixcbiAgICAgICAgICAgIHNxY2QsXG4gICAgICAgICAgICBzcHFjZHMsXG4gICAgICAgICAgICBzcHFjZFNpemUsXG4gICAgICAgICAgICBzY2FsYXJFeHBvdW5kZWQsXG4gICAgICAgICAgICB0aWxlO1xuXG4gICAgICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICAgIGNhc2UgMHhmZjRmOlxuICAgICAgICAgICAgY29udGV4dC5tYWluSGVhZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweGZmZDk6XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMHhmZjUxOlxuICAgICAgICAgICAgbGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IHNpeiA9IHt9O1xuICAgICAgICAgICAgc2l6LlhzaXogPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyA0KTtcbiAgICAgICAgICAgIHNpei5Zc2l6ID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uICsgOCk7XG4gICAgICAgICAgICBzaXouWE9zaXogPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyAxMik7XG4gICAgICAgICAgICBzaXouWU9zaXogPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyAxNik7XG4gICAgICAgICAgICBzaXouWFRzaXogPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyAyMCk7XG4gICAgICAgICAgICBzaXouWVRzaXogPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyAyNCk7XG4gICAgICAgICAgICBzaXouWFRPc2l6ID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uICsgMjgpO1xuICAgICAgICAgICAgc2l6LllUT3NpeiA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDMyKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHNDb3VudCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbiArIDM2KTtcbiAgICAgICAgICAgIHNpei5Dc2l6ID0gY29tcG9uZW50c0NvdW50O1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IFtdO1xuICAgICAgICAgICAgaiA9IHBvc2l0aW9uICsgMzg7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcG9uZW50c0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0ge1xuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogKGRhdGFbal0gJiAweDdmKSArIDEsXG4gICAgICAgICAgICAgICAgaXNTaWduZWQ6ICEhKGRhdGFbal0gJiAweDgwKSxcbiAgICAgICAgICAgICAgICBYUnNpejogZGF0YVtqICsgMV0sXG4gICAgICAgICAgICAgICAgWVJzaXo6IGRhdGFbaiArIDJdXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGogKz0gMztcbiAgICAgICAgICAgICAgY2FsY3VsYXRlQ29tcG9uZW50RGltZW5zaW9ucyhjb21wb25lbnQsIHNpeik7XG4gICAgICAgICAgICAgIGNvbXBvbmVudHMucHVzaChjb21wb25lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250ZXh0LlNJWiA9IHNpejtcbiAgICAgICAgICAgIGNvbnRleHQuY29tcG9uZW50cyA9IGNvbXBvbmVudHM7XG4gICAgICAgICAgICBjYWxjdWxhdGVUaWxlR3JpZHMoY29udGV4dCwgY29tcG9uZW50cyk7XG4gICAgICAgICAgICBjb250ZXh0LlFDQyA9IFtdO1xuICAgICAgICAgICAgY29udGV4dC5DT0MgPSBbXTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweGZmNWM6XG4gICAgICAgICAgICBsZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgY29uc3QgcWNkID0ge307XG4gICAgICAgICAgICBqID0gcG9zaXRpb24gKyAyO1xuICAgICAgICAgICAgc3FjZCA9IGRhdGFbaisrXTtcblxuICAgICAgICAgICAgc3dpdGNoIChzcWNkICYgMHgxZikge1xuICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgc3BxY2RTaXplID0gODtcbiAgICAgICAgICAgICAgICBzY2FsYXJFeHBvdW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBzcHFjZFNpemUgPSAxNjtcbiAgICAgICAgICAgICAgICBzY2FsYXJFeHBvdW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgc3BxY2RTaXplID0gMTY7XG4gICAgICAgICAgICAgICAgc2NhbGFyRXhwb3VuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgU1FjZCB2YWx1ZSBcIiArIHNxY2QpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBxY2Qubm9RdWFudGl6YXRpb24gPSBzcHFjZFNpemUgPT09IDg7XG4gICAgICAgICAgICBxY2Quc2NhbGFyRXhwb3VuZGVkID0gc2NhbGFyRXhwb3VuZGVkO1xuICAgICAgICAgICAgcWNkLmd1YXJkQml0cyA9IHNxY2QgPj4gNTtcbiAgICAgICAgICAgIHNwcWNkcyA9IFtdO1xuXG4gICAgICAgICAgICB3aGlsZSAoaiA8IGxlbmd0aCArIHBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNwcWNkID0ge307XG5cbiAgICAgICAgICAgICAgaWYgKHNwcWNkU2l6ZSA9PT0gOCkge1xuICAgICAgICAgICAgICAgIHNwcWNkLmVwc2lsb24gPSBkYXRhW2orK10gPj4gMztcbiAgICAgICAgICAgICAgICBzcHFjZC5tdSA9IDA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3BxY2QuZXBzaWxvbiA9IGRhdGFbal0gPj4gMztcbiAgICAgICAgICAgICAgICBzcHFjZC5tdSA9IChkYXRhW2pdICYgMHg3KSA8PCA4IHwgZGF0YVtqICsgMV07XG4gICAgICAgICAgICAgICAgaiArPSAyO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc3BxY2RzLnB1c2goc3BxY2QpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBxY2QuU1BxY2RzID0gc3BxY2RzO1xuXG4gICAgICAgICAgICBpZiAoY29udGV4dC5tYWluSGVhZGVyKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQuUUNEID0gcWNkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29udGV4dC5jdXJyZW50VGlsZS5RQ0QgPSBxY2Q7XG4gICAgICAgICAgICAgIGNvbnRleHQuY3VycmVudFRpbGUuUUNDID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweGZmNWQ6XG4gICAgICAgICAgICBsZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgY29uc3QgcWNjID0ge307XG4gICAgICAgICAgICBqID0gcG9zaXRpb24gKyAyO1xuICAgICAgICAgICAgbGV0IGNxY2M7XG5cbiAgICAgICAgICAgIGlmIChjb250ZXh0LlNJWi5Dc2l6IDwgMjU3KSB7XG4gICAgICAgICAgICAgIGNxY2MgPSBkYXRhW2orK107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjcWNjID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIGopO1xuICAgICAgICAgICAgICBqICs9IDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNxY2QgPSBkYXRhW2orK107XG5cbiAgICAgICAgICAgIHN3aXRjaCAoc3FjZCAmIDB4MWYpIHtcbiAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIHNwcWNkU2l6ZSA9IDg7XG4gICAgICAgICAgICAgICAgc2NhbGFyRXhwb3VuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgc3BxY2RTaXplID0gMTY7XG4gICAgICAgICAgICAgICAgc2NhbGFyRXhwb3VuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHNwcWNkU2l6ZSA9IDE2O1xuICAgICAgICAgICAgICAgIHNjYWxhckV4cG91bmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIFNRY2QgdmFsdWUgXCIgKyBzcWNkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcWNjLm5vUXVhbnRpemF0aW9uID0gc3BxY2RTaXplID09PSA4O1xuICAgICAgICAgICAgcWNjLnNjYWxhckV4cG91bmRlZCA9IHNjYWxhckV4cG91bmRlZDtcbiAgICAgICAgICAgIHFjYy5ndWFyZEJpdHMgPSBzcWNkID4+IDU7XG4gICAgICAgICAgICBzcHFjZHMgPSBbXTtcblxuICAgICAgICAgICAgd2hpbGUgKGogPCBsZW5ndGggKyBwb3NpdGlvbikge1xuICAgICAgICAgICAgICBjb25zdCBzcHFjZCA9IHt9O1xuXG4gICAgICAgICAgICAgIGlmIChzcHFjZFNpemUgPT09IDgpIHtcbiAgICAgICAgICAgICAgICBzcHFjZC5lcHNpbG9uID0gZGF0YVtqKytdID4+IDM7XG4gICAgICAgICAgICAgICAgc3BxY2QubXUgPSAwO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNwcWNkLmVwc2lsb24gPSBkYXRhW2pdID4+IDM7XG4gICAgICAgICAgICAgICAgc3BxY2QubXUgPSAoZGF0YVtqXSAmIDB4NykgPDwgOCB8IGRhdGFbaiArIDFdO1xuICAgICAgICAgICAgICAgIGogKz0gMjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHNwcWNkcy5wdXNoKHNwcWNkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcWNjLlNQcWNkcyA9IHNwcWNkcztcblxuICAgICAgICAgICAgaWYgKGNvbnRleHQubWFpbkhlYWRlcikge1xuICAgICAgICAgICAgICBjb250ZXh0LlFDQ1tjcWNjXSA9IHFjYztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnRleHQuY3VycmVudFRpbGUuUUNDW2NxY2NdID0gcWNjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMHhmZjUyOlxuICAgICAgICAgICAgbGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGNvZCA9IHt9O1xuICAgICAgICAgICAgaiA9IHBvc2l0aW9uICsgMjtcbiAgICAgICAgICAgIGNvbnN0IHNjb2QgPSBkYXRhW2orK107XG4gICAgICAgICAgICBjb2QuZW50cm9weUNvZGVyV2l0aEN1c3RvbVByZWNpbmN0cyA9ICEhKHNjb2QgJiAxKTtcbiAgICAgICAgICAgIGNvZC5zb3BNYXJrZXJVc2VkID0gISEoc2NvZCAmIDIpO1xuICAgICAgICAgICAgY29kLmVwaE1hcmtlclVzZWQgPSAhIShzY29kICYgNCk7XG4gICAgICAgICAgICBjb2QucHJvZ3Jlc3Npb25PcmRlciA9IGRhdGFbaisrXTtcbiAgICAgICAgICAgIGNvZC5sYXllcnNDb3VudCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBqKTtcbiAgICAgICAgICAgIGogKz0gMjtcbiAgICAgICAgICAgIGNvZC5tdWx0aXBsZUNvbXBvbmVudFRyYW5zZm9ybSA9IGRhdGFbaisrXTtcbiAgICAgICAgICAgIGNvZC5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgPSBkYXRhW2orK107XG4gICAgICAgICAgICBjb2QueGNiID0gKGRhdGFbaisrXSAmIDB4ZikgKyAyO1xuICAgICAgICAgICAgY29kLnljYiA9IChkYXRhW2orK10gJiAweGYpICsgMjtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrU3R5bGUgPSBkYXRhW2orK107XG4gICAgICAgICAgICBjb2Quc2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzcyA9ICEhKGJsb2NrU3R5bGUgJiAxKTtcbiAgICAgICAgICAgIGNvZC5yZXNldENvbnRleHRQcm9iYWJpbGl0aWVzID0gISEoYmxvY2tTdHlsZSAmIDIpO1xuICAgICAgICAgICAgY29kLnRlcm1pbmF0aW9uT25FYWNoQ29kaW5nUGFzcyA9ICEhKGJsb2NrU3R5bGUgJiA0KTtcbiAgICAgICAgICAgIGNvZC52ZXJ0aWNhbGx5U3RyaXBlID0gISEoYmxvY2tTdHlsZSAmIDgpO1xuICAgICAgICAgICAgY29kLnByZWRpY3RhYmxlVGVybWluYXRpb24gPSAhIShibG9ja1N0eWxlICYgMTYpO1xuICAgICAgICAgICAgY29kLnNlZ21lbnRhdGlvblN5bWJvbFVzZWQgPSAhIShibG9ja1N0eWxlICYgMzIpO1xuICAgICAgICAgICAgY29kLnJldmVyc2libGVUcmFuc2Zvcm1hdGlvbiA9IGRhdGFbaisrXTtcblxuICAgICAgICAgICAgaWYgKGNvZC5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHByZWNpbmN0c1NpemVzID0gW107XG5cbiAgICAgICAgICAgICAgd2hpbGUgKGogPCBsZW5ndGggKyBwb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZWNpbmN0c1NpemUgPSBkYXRhW2orK107XG4gICAgICAgICAgICAgICAgcHJlY2luY3RzU2l6ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBQUHg6IHByZWNpbmN0c1NpemUgJiAweGYsXG4gICAgICAgICAgICAgICAgICBQUHk6IHByZWNpbmN0c1NpemUgPj4gNFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29kLnByZWNpbmN0c1NpemVzID0gcHJlY2luY3RzU2l6ZXM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHVuc3VwcG9ydGVkID0gW107XG5cbiAgICAgICAgICAgIGlmIChjb2Quc2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzcykge1xuICAgICAgICAgICAgICB1bnN1cHBvcnRlZC5wdXNoKFwic2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzc1wiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvZC5yZXNldENvbnRleHRQcm9iYWJpbGl0aWVzKSB7XG4gICAgICAgICAgICAgIHVuc3VwcG9ydGVkLnB1c2goXCJyZXNldENvbnRleHRQcm9iYWJpbGl0aWVzXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29kLnRlcm1pbmF0aW9uT25FYWNoQ29kaW5nUGFzcykge1xuICAgICAgICAgICAgICB1bnN1cHBvcnRlZC5wdXNoKFwidGVybWluYXRpb25PbkVhY2hDb2RpbmdQYXNzXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29kLnZlcnRpY2FsbHlTdHJpcGUpIHtcbiAgICAgICAgICAgICAgdW5zdXBwb3J0ZWQucHVzaChcInZlcnRpY2FsbHlTdHJpcGVcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2QucHJlZGljdGFibGVUZXJtaW5hdGlvbikge1xuICAgICAgICAgICAgICB1bnN1cHBvcnRlZC5wdXNoKFwicHJlZGljdGFibGVUZXJtaW5hdGlvblwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHVuc3VwcG9ydGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgZG9Ob3RSZWNvdmVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBKUFg6IFVuc3VwcG9ydGVkIENPRCBvcHRpb25zICgke3Vuc3VwcG9ydGVkLmpvaW4oXCIsIFwiKX0pLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29udGV4dC5tYWluSGVhZGVyKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQuQ09EID0gY29kO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29udGV4dC5jdXJyZW50VGlsZS5DT0QgPSBjb2Q7XG4gICAgICAgICAgICAgIGNvbnRleHQuY3VycmVudFRpbGUuQ09DID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweGZmOTA6XG4gICAgICAgICAgICBsZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgdGlsZSA9IHt9O1xuICAgICAgICAgICAgdGlsZS5pbmRleCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbiArIDIpO1xuICAgICAgICAgICAgdGlsZS5sZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyA0KTtcbiAgICAgICAgICAgIHRpbGUuZGF0YUVuZCA9IHRpbGUubGVuZ3RoICsgcG9zaXRpb24gLSAyO1xuICAgICAgICAgICAgdGlsZS5wYXJ0SW5kZXggPSBkYXRhW3Bvc2l0aW9uICsgOF07XG4gICAgICAgICAgICB0aWxlLnBhcnRzQ291bnQgPSBkYXRhW3Bvc2l0aW9uICsgOV07XG4gICAgICAgICAgICBjb250ZXh0Lm1haW5IZWFkZXIgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHRpbGUucGFydEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgIHRpbGUuQ09EID0gY29udGV4dC5DT0Q7XG4gICAgICAgICAgICAgIHRpbGUuQ09DID0gY29udGV4dC5DT0Muc2xpY2UoMCk7XG4gICAgICAgICAgICAgIHRpbGUuUUNEID0gY29udGV4dC5RQ0Q7XG4gICAgICAgICAgICAgIHRpbGUuUUNDID0gY29udGV4dC5RQ0Muc2xpY2UoMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRleHQuY3VycmVudFRpbGUgPSB0aWxlO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDB4ZmY5MzpcbiAgICAgICAgICAgIHRpbGUgPSBjb250ZXh0LmN1cnJlbnRUaWxlO1xuXG4gICAgICAgICAgICBpZiAodGlsZS5wYXJ0SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgaW5pdGlhbGl6ZVRpbGUoY29udGV4dCwgdGlsZS5pbmRleCk7XG4gICAgICAgICAgICAgIGJ1aWxkUGFja2V0cyhjb250ZXh0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGVuZ3RoID0gdGlsZS5kYXRhRW5kIC0gcG9zaXRpb247XG4gICAgICAgICAgICBwYXJzZVRpbGVQYWNrZXRzKGNvbnRleHQsIGRhdGEsIHBvc2l0aW9uLCBsZW5ndGgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDB4ZmY1MzpcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIkpQWDogQ29kZXN0cmVhbSBjb2RlIDB4RkY1MyAoQ09DKSBpcyBub3QgaW1wbGVtZW50ZWQuXCIpO1xuXG4gICAgICAgICAgY2FzZSAweGZmNTU6XG4gICAgICAgICAgY2FzZSAweGZmNTc6XG4gICAgICAgICAgY2FzZSAweGZmNTg6XG4gICAgICAgICAgY2FzZSAweGZmNjQ6XG4gICAgICAgICAgICBsZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBjb2Rlc3RyZWFtIGNvZGU6IFwiICsgY29kZS50b1N0cmluZygxNikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9zaXRpb24gKz0gbGVuZ3RoO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChkb05vdFJlY292ZXIgfHwgdGhpcy5mYWlsT25Db3JydXB0ZWRJbWFnZSkge1xuICAgICAgICB0aHJvdyBuZXcgSnB4RXJyb3IoZS5tZXNzYWdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgSlBYOiBUcnlpbmcgdG8gcmVjb3ZlciBmcm9tOiBcIiR7ZS5tZXNzYWdlfVwiLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudGlsZXMgPSB0cmFuc2Zvcm1Db21wb25lbnRzKGNvbnRleHQpO1xuICAgIHRoaXMud2lkdGggPSBjb250ZXh0LlNJWi5Yc2l6IC0gY29udGV4dC5TSVouWE9zaXo7XG4gICAgdGhpcy5oZWlnaHQgPSBjb250ZXh0LlNJWi5Zc2l6IC0gY29udGV4dC5TSVouWU9zaXo7XG4gICAgdGhpcy5jb21wb25lbnRzQ291bnQgPSBjb250ZXh0LlNJWi5Dc2l6O1xuICB9XG5cbn1cblxuZXhwb3J0cy5KcHhJbWFnZSA9IEpweEltYWdlO1xuXG5mdW5jdGlvbiBjYWxjdWxhdGVDb21wb25lbnREaW1lbnNpb25zKGNvbXBvbmVudCwgc2l6KSB7XG4gIGNvbXBvbmVudC54MCA9IE1hdGguY2VpbChzaXouWE9zaXogLyBjb21wb25lbnQuWFJzaXopO1xuICBjb21wb25lbnQueDEgPSBNYXRoLmNlaWwoc2l6LlhzaXogLyBjb21wb25lbnQuWFJzaXopO1xuICBjb21wb25lbnQueTAgPSBNYXRoLmNlaWwoc2l6LllPc2l6IC8gY29tcG9uZW50LllSc2l6KTtcbiAgY29tcG9uZW50LnkxID0gTWF0aC5jZWlsKHNpei5Zc2l6IC8gY29tcG9uZW50LllSc2l6KTtcbiAgY29tcG9uZW50LndpZHRoID0gY29tcG9uZW50LngxIC0gY29tcG9uZW50LngwO1xuICBjb21wb25lbnQuaGVpZ2h0ID0gY29tcG9uZW50LnkxIC0gY29tcG9uZW50LnkwO1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVUaWxlR3JpZHMoY29udGV4dCwgY29tcG9uZW50cykge1xuICBjb25zdCBzaXogPSBjb250ZXh0LlNJWjtcbiAgY29uc3QgdGlsZXMgPSBbXTtcbiAgbGV0IHRpbGU7XG4gIGNvbnN0IG51bVh0aWxlcyA9IE1hdGguY2VpbCgoc2l6LlhzaXogLSBzaXouWFRPc2l6KSAvIHNpei5YVHNpeik7XG4gIGNvbnN0IG51bVl0aWxlcyA9IE1hdGguY2VpbCgoc2l6LllzaXogLSBzaXouWVRPc2l6KSAvIHNpei5ZVHNpeik7XG5cbiAgZm9yIChsZXQgcSA9IDA7IHEgPCBudW1ZdGlsZXM7IHErKykge1xuICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbnVtWHRpbGVzOyBwKyspIHtcbiAgICAgIHRpbGUgPSB7fTtcbiAgICAgIHRpbGUudHgwID0gTWF0aC5tYXgoc2l6LlhUT3NpeiArIHAgKiBzaXouWFRzaXosIHNpei5YT3Npeik7XG4gICAgICB0aWxlLnR5MCA9IE1hdGgubWF4KHNpei5ZVE9zaXogKyBxICogc2l6LllUc2l6LCBzaXouWU9zaXopO1xuICAgICAgdGlsZS50eDEgPSBNYXRoLm1pbihzaXouWFRPc2l6ICsgKHAgKyAxKSAqIHNpei5YVHNpeiwgc2l6LlhzaXopO1xuICAgICAgdGlsZS50eTEgPSBNYXRoLm1pbihzaXouWVRPc2l6ICsgKHEgKyAxKSAqIHNpei5ZVHNpeiwgc2l6LllzaXopO1xuICAgICAgdGlsZS53aWR0aCA9IHRpbGUudHgxIC0gdGlsZS50eDA7XG4gICAgICB0aWxlLmhlaWdodCA9IHRpbGUudHkxIC0gdGlsZS50eTA7XG4gICAgICB0aWxlLmNvbXBvbmVudHMgPSBbXTtcbiAgICAgIHRpbGVzLnB1c2godGlsZSk7XG4gICAgfVxuICB9XG5cbiAgY29udGV4dC50aWxlcyA9IHRpbGVzO1xuICBjb25zdCBjb21wb25lbnRzQ291bnQgPSBzaXouQ3NpejtcblxuICBmb3IgKGxldCBpID0gMCwgaWkgPSBjb21wb25lbnRzQ291bnQ7IGkgPCBpaTsgaSsrKSB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gY29tcG9uZW50c1tpXTtcblxuICAgIGZvciAobGV0IGogPSAwLCBqaiA9IHRpbGVzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgIGNvbnN0IHRpbGVDb21wb25lbnQgPSB7fTtcbiAgICAgIHRpbGUgPSB0aWxlc1tqXTtcbiAgICAgIHRpbGVDb21wb25lbnQudGN4MCA9IE1hdGguY2VpbCh0aWxlLnR4MCAvIGNvbXBvbmVudC5YUnNpeik7XG4gICAgICB0aWxlQ29tcG9uZW50LnRjeTAgPSBNYXRoLmNlaWwodGlsZS50eTAgLyBjb21wb25lbnQuWVJzaXopO1xuICAgICAgdGlsZUNvbXBvbmVudC50Y3gxID0gTWF0aC5jZWlsKHRpbGUudHgxIC8gY29tcG9uZW50LlhSc2l6KTtcbiAgICAgIHRpbGVDb21wb25lbnQudGN5MSA9IE1hdGguY2VpbCh0aWxlLnR5MSAvIGNvbXBvbmVudC5ZUnNpeik7XG4gICAgICB0aWxlQ29tcG9uZW50LndpZHRoID0gdGlsZUNvbXBvbmVudC50Y3gxIC0gdGlsZUNvbXBvbmVudC50Y3gwO1xuICAgICAgdGlsZUNvbXBvbmVudC5oZWlnaHQgPSB0aWxlQ29tcG9uZW50LnRjeTEgLSB0aWxlQ29tcG9uZW50LnRjeTA7XG4gICAgICB0aWxlLmNvbXBvbmVudHNbaV0gPSB0aWxlQ29tcG9uZW50O1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRCbG9ja3NEaW1lbnNpb25zKGNvbnRleHQsIGNvbXBvbmVudCwgcikge1xuICBjb25zdCBjb2RPckNvYyA9IGNvbXBvbmVudC5jb2RpbmdTdHlsZVBhcmFtZXRlcnM7XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuXG4gIGlmICghY29kT3JDb2MuZW50cm9weUNvZGVyV2l0aEN1c3RvbVByZWNpbmN0cykge1xuICAgIHJlc3VsdC5QUHggPSAxNTtcbiAgICByZXN1bHQuUFB5ID0gMTU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LlBQeCA9IGNvZE9yQ29jLnByZWNpbmN0c1NpemVzW3JdLlBQeDtcbiAgICByZXN1bHQuUFB5ID0gY29kT3JDb2MucHJlY2luY3RzU2l6ZXNbcl0uUFB5O1xuICB9XG5cbiAgcmVzdWx0LnhjYl8gPSByID4gMCA/IE1hdGgubWluKGNvZE9yQ29jLnhjYiwgcmVzdWx0LlBQeCAtIDEpIDogTWF0aC5taW4oY29kT3JDb2MueGNiLCByZXN1bHQuUFB4KTtcbiAgcmVzdWx0LnljYl8gPSByID4gMCA/IE1hdGgubWluKGNvZE9yQ29jLnljYiwgcmVzdWx0LlBQeSAtIDEpIDogTWF0aC5taW4oY29kT3JDb2MueWNiLCByZXN1bHQuUFB5KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gYnVpbGRQcmVjaW5jdHMoY29udGV4dCwgcmVzb2x1dGlvbiwgZGltZW5zaW9ucykge1xuICBjb25zdCBwcmVjaW5jdFdpZHRoID0gMSA8PCBkaW1lbnNpb25zLlBQeDtcbiAgY29uc3QgcHJlY2luY3RIZWlnaHQgPSAxIDw8IGRpbWVuc2lvbnMuUFB5O1xuICBjb25zdCBpc1plcm9SZXMgPSByZXNvbHV0aW9uLnJlc0xldmVsID09PSAwO1xuICBjb25zdCBwcmVjaW5jdFdpZHRoSW5TdWJiYW5kID0gMSA8PCBkaW1lbnNpb25zLlBQeCArIChpc1plcm9SZXMgPyAwIDogLTEpO1xuICBjb25zdCBwcmVjaW5jdEhlaWdodEluU3ViYmFuZCA9IDEgPDwgZGltZW5zaW9ucy5QUHkgKyAoaXNaZXJvUmVzID8gMCA6IC0xKTtcbiAgY29uc3QgbnVtcHJlY2luY3Rzd2lkZSA9IHJlc29sdXRpb24udHJ4MSA+IHJlc29sdXRpb24udHJ4MCA/IE1hdGguY2VpbChyZXNvbHV0aW9uLnRyeDEgLyBwcmVjaW5jdFdpZHRoKSAtIE1hdGguZmxvb3IocmVzb2x1dGlvbi50cngwIC8gcHJlY2luY3RXaWR0aCkgOiAwO1xuICBjb25zdCBudW1wcmVjaW5jdHNoaWdoID0gcmVzb2x1dGlvbi50cnkxID4gcmVzb2x1dGlvbi50cnkwID8gTWF0aC5jZWlsKHJlc29sdXRpb24udHJ5MSAvIHByZWNpbmN0SGVpZ2h0KSAtIE1hdGguZmxvb3IocmVzb2x1dGlvbi50cnkwIC8gcHJlY2luY3RIZWlnaHQpIDogMDtcbiAgY29uc3QgbnVtcHJlY2luY3RzID0gbnVtcHJlY2luY3Rzd2lkZSAqIG51bXByZWNpbmN0c2hpZ2g7XG4gIHJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzID0ge1xuICAgIHByZWNpbmN0V2lkdGgsXG4gICAgcHJlY2luY3RIZWlnaHQsXG4gICAgbnVtcHJlY2luY3Rzd2lkZSxcbiAgICBudW1wcmVjaW5jdHNoaWdoLFxuICAgIG51bXByZWNpbmN0cyxcbiAgICBwcmVjaW5jdFdpZHRoSW5TdWJiYW5kLFxuICAgIHByZWNpbmN0SGVpZ2h0SW5TdWJiYW5kXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQ29kZWJsb2Nrcyhjb250ZXh0LCBzdWJiYW5kLCBkaW1lbnNpb25zKSB7XG4gIGNvbnN0IHhjYl8gPSBkaW1lbnNpb25zLnhjYl87XG4gIGNvbnN0IHljYl8gPSBkaW1lbnNpb25zLnljYl87XG4gIGNvbnN0IGNvZGVibG9ja1dpZHRoID0gMSA8PCB4Y2JfO1xuICBjb25zdCBjb2RlYmxvY2tIZWlnaHQgPSAxIDw8IHljYl87XG4gIGNvbnN0IGNieDAgPSBzdWJiYW5kLnRieDAgPj4geGNiXztcbiAgY29uc3QgY2J5MCA9IHN1YmJhbmQudGJ5MCA+PiB5Y2JfO1xuICBjb25zdCBjYngxID0gc3ViYmFuZC50YngxICsgY29kZWJsb2NrV2lkdGggLSAxID4+IHhjYl87XG4gIGNvbnN0IGNieTEgPSBzdWJiYW5kLnRieTEgKyBjb2RlYmxvY2tIZWlnaHQgLSAxID4+IHljYl87XG4gIGNvbnN0IHByZWNpbmN0UGFyYW1ldGVycyA9IHN1YmJhbmQucmVzb2x1dGlvbi5wcmVjaW5jdFBhcmFtZXRlcnM7XG4gIGNvbnN0IGNvZGVibG9ja3MgPSBbXTtcbiAgY29uc3QgcHJlY2luY3RzID0gW107XG4gIGxldCBpLCBqLCBjb2RlYmxvY2ssIHByZWNpbmN0TnVtYmVyO1xuXG4gIGZvciAoaiA9IGNieTA7IGogPCBjYnkxOyBqKyspIHtcbiAgICBmb3IgKGkgPSBjYngwOyBpIDwgY2J4MTsgaSsrKSB7XG4gICAgICBjb2RlYmxvY2sgPSB7XG4gICAgICAgIGNieDogaSxcbiAgICAgICAgY2J5OiBqLFxuICAgICAgICB0YngwOiBjb2RlYmxvY2tXaWR0aCAqIGksXG4gICAgICAgIHRieTA6IGNvZGVibG9ja0hlaWdodCAqIGosXG4gICAgICAgIHRieDE6IGNvZGVibG9ja1dpZHRoICogKGkgKyAxKSxcbiAgICAgICAgdGJ5MTogY29kZWJsb2NrSGVpZ2h0ICogKGogKyAxKVxuICAgICAgfTtcbiAgICAgIGNvZGVibG9jay50YngwXyA9IE1hdGgubWF4KHN1YmJhbmQudGJ4MCwgY29kZWJsb2NrLnRieDApO1xuICAgICAgY29kZWJsb2NrLnRieTBfID0gTWF0aC5tYXgoc3ViYmFuZC50YnkwLCBjb2RlYmxvY2sudGJ5MCk7XG4gICAgICBjb2RlYmxvY2sudGJ4MV8gPSBNYXRoLm1pbihzdWJiYW5kLnRieDEsIGNvZGVibG9jay50YngxKTtcbiAgICAgIGNvZGVibG9jay50YnkxXyA9IE1hdGgubWluKHN1YmJhbmQudGJ5MSwgY29kZWJsb2NrLnRieTEpO1xuICAgICAgY29uc3QgcGkgPSBNYXRoLmZsb29yKChjb2RlYmxvY2sudGJ4MF8gLSBzdWJiYW5kLnRieDApIC8gcHJlY2luY3RQYXJhbWV0ZXJzLnByZWNpbmN0V2lkdGhJblN1YmJhbmQpO1xuICAgICAgY29uc3QgcGogPSBNYXRoLmZsb29yKChjb2RlYmxvY2sudGJ5MF8gLSBzdWJiYW5kLnRieTApIC8gcHJlY2luY3RQYXJhbWV0ZXJzLnByZWNpbmN0SGVpZ2h0SW5TdWJiYW5kKTtcbiAgICAgIHByZWNpbmN0TnVtYmVyID0gcGkgKyBwaiAqIHByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHN3aWRlO1xuICAgICAgY29kZWJsb2NrLnByZWNpbmN0TnVtYmVyID0gcHJlY2luY3ROdW1iZXI7XG4gICAgICBjb2RlYmxvY2suc3ViYmFuZFR5cGUgPSBzdWJiYW5kLnR5cGU7XG4gICAgICBjb2RlYmxvY2suTGJsb2NrID0gMztcblxuICAgICAgaWYgKGNvZGVibG9jay50YngxXyA8PSBjb2RlYmxvY2sudGJ4MF8gfHwgY29kZWJsb2NrLnRieTFfIDw9IGNvZGVibG9jay50YnkwXykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29kZWJsb2Nrcy5wdXNoKGNvZGVibG9jayk7XG4gICAgICBsZXQgcHJlY2luY3QgPSBwcmVjaW5jdHNbcHJlY2luY3ROdW1iZXJdO1xuXG4gICAgICBpZiAocHJlY2luY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoaSA8IHByZWNpbmN0LmNieE1pbikge1xuICAgICAgICAgIHByZWNpbmN0LmNieE1pbiA9IGk7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA+IHByZWNpbmN0LmNieE1heCkge1xuICAgICAgICAgIHByZWNpbmN0LmNieE1heCA9IGk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaiA8IHByZWNpbmN0LmNieU1pbikge1xuICAgICAgICAgIHByZWNpbmN0LmNieE1pbiA9IGo7XG4gICAgICAgIH0gZWxzZSBpZiAoaiA+IHByZWNpbmN0LmNieU1heCkge1xuICAgICAgICAgIHByZWNpbmN0LmNieU1heCA9IGo7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZWNpbmN0c1twcmVjaW5jdE51bWJlcl0gPSBwcmVjaW5jdCA9IHtcbiAgICAgICAgICBjYnhNaW46IGksXG4gICAgICAgICAgY2J5TWluOiBqLFxuICAgICAgICAgIGNieE1heDogaSxcbiAgICAgICAgICBjYnlNYXg6IGpcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29kZWJsb2NrLnByZWNpbmN0ID0gcHJlY2luY3Q7XG4gICAgfVxuICB9XG5cbiAgc3ViYmFuZC5jb2RlYmxvY2tQYXJhbWV0ZXJzID0ge1xuICAgIGNvZGVibG9ja1dpZHRoOiB4Y2JfLFxuICAgIGNvZGVibG9ja0hlaWdodDogeWNiXyxcbiAgICBudW1jb2RlYmxvY2t3aWRlOiBjYngxIC0gY2J4MCArIDEsXG4gICAgbnVtY29kZWJsb2NraGlnaDogY2J5MSAtIGNieTAgKyAxXG4gIH07XG4gIHN1YmJhbmQuY29kZWJsb2NrcyA9IGNvZGVibG9ja3M7XG4gIHN1YmJhbmQucHJlY2luY3RzID0gcHJlY2luY3RzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVQYWNrZXQocmVzb2x1dGlvbiwgcHJlY2luY3ROdW1iZXIsIGxheWVyTnVtYmVyKSB7XG4gIGNvbnN0IHByZWNpbmN0Q29kZWJsb2NrcyA9IFtdO1xuICBjb25zdCBzdWJiYW5kcyA9IHJlc29sdXRpb24uc3ViYmFuZHM7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGlpID0gc3ViYmFuZHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgIGNvbnN0IHN1YmJhbmQgPSBzdWJiYW5kc1tpXTtcbiAgICBjb25zdCBjb2RlYmxvY2tzID0gc3ViYmFuZC5jb2RlYmxvY2tzO1xuXG4gICAgZm9yIChsZXQgaiA9IDAsIGpqID0gY29kZWJsb2Nrcy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICBjb25zdCBjb2RlYmxvY2sgPSBjb2RlYmxvY2tzW2pdO1xuXG4gICAgICBpZiAoY29kZWJsb2NrLnByZWNpbmN0TnVtYmVyICE9PSBwcmVjaW5jdE51bWJlcikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcHJlY2luY3RDb2RlYmxvY2tzLnB1c2goY29kZWJsb2NrKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxheWVyTnVtYmVyLFxuICAgIGNvZGVibG9ja3M6IHByZWNpbmN0Q29kZWJsb2Nrc1xuICB9O1xufVxuXG5mdW5jdGlvbiBMYXllclJlc29sdXRpb25Db21wb25lbnRQb3NpdGlvbkl0ZXJhdG9yKGNvbnRleHQpIHtcbiAgY29uc3Qgc2l6ID0gY29udGV4dC5TSVo7XG4gIGNvbnN0IHRpbGVJbmRleCA9IGNvbnRleHQuY3VycmVudFRpbGUuaW5kZXg7XG4gIGNvbnN0IHRpbGUgPSBjb250ZXh0LnRpbGVzW3RpbGVJbmRleF07XG4gIGNvbnN0IGxheWVyc0NvdW50ID0gdGlsZS5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50O1xuICBjb25zdCBjb21wb25lbnRzQ291bnQgPSBzaXouQ3NpejtcbiAgbGV0IG1heERlY29tcG9zaXRpb25MZXZlbHNDb3VudCA9IDA7XG5cbiAgZm9yIChsZXQgcSA9IDA7IHEgPCBjb21wb25lbnRzQ291bnQ7IHErKykge1xuICAgIG1heERlY29tcG9zaXRpb25MZXZlbHNDb3VudCA9IE1hdGgubWF4KG1heERlY29tcG9zaXRpb25MZXZlbHNDb3VudCwgdGlsZS5jb21wb25lbnRzW3FdLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpO1xuICB9XG5cbiAgbGV0IGwgPSAwLFxuICAgICAgciA9IDAsXG4gICAgICBpID0gMCxcbiAgICAgIGsgPSAwO1xuXG4gIHRoaXMubmV4dFBhY2tldCA9IGZ1bmN0aW9uIEpweEltYWdlX25leHRQYWNrZXQoKSB7XG4gICAgZm9yICg7IGwgPCBsYXllcnNDb3VudDsgbCsrKSB7XG4gICAgICBmb3IgKDsgciA8PSBtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7IHIrKykge1xuICAgICAgICBmb3IgKDsgaSA8IGNvbXBvbmVudHNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGlsZS5jb21wb25lbnRzW2ldO1xuXG4gICAgICAgICAgaWYgKHIgPiBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgcmVzb2x1dGlvbiA9IGNvbXBvbmVudC5yZXNvbHV0aW9uc1tyXTtcbiAgICAgICAgICBjb25zdCBudW1wcmVjaW5jdHMgPSByZXNvbHV0aW9uLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHM7XG5cbiAgICAgICAgICBmb3IgKDsgayA8IG51bXByZWNpbmN0czspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhY2tldCA9IGNyZWF0ZVBhY2tldChyZXNvbHV0aW9uLCBrLCBsKTtcbiAgICAgICAgICAgIGsrKztcbiAgICAgICAgICAgIHJldHVybiBwYWNrZXQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgayA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpID0gMDtcbiAgICAgIH1cblxuICAgICAgciA9IDA7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEpweEVycm9yKFwiT3V0IG9mIHBhY2tldHNcIik7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFJlc29sdXRpb25MYXllckNvbXBvbmVudFBvc2l0aW9uSXRlcmF0b3IoY29udGV4dCkge1xuICBjb25zdCBzaXogPSBjb250ZXh0LlNJWjtcbiAgY29uc3QgdGlsZUluZGV4ID0gY29udGV4dC5jdXJyZW50VGlsZS5pbmRleDtcbiAgY29uc3QgdGlsZSA9IGNvbnRleHQudGlsZXNbdGlsZUluZGV4XTtcbiAgY29uc3QgbGF5ZXJzQ291bnQgPSB0aWxlLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubGF5ZXJzQ291bnQ7XG4gIGNvbnN0IGNvbXBvbmVudHNDb3VudCA9IHNpei5Dc2l6O1xuICBsZXQgbWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gMDtcblxuICBmb3IgKGxldCBxID0gMDsgcSA8IGNvbXBvbmVudHNDb3VudDsgcSsrKSB7XG4gICAgbWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gTWF0aC5tYXgobWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50LCB0aWxlLmNvbXBvbmVudHNbcV0uY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCk7XG4gIH1cblxuICBsZXQgciA9IDAsXG4gICAgICBsID0gMCxcbiAgICAgIGkgPSAwLFxuICAgICAgayA9IDA7XG5cbiAgdGhpcy5uZXh0UGFja2V0ID0gZnVuY3Rpb24gSnB4SW1hZ2VfbmV4dFBhY2tldCgpIHtcbiAgICBmb3IgKDsgciA8PSBtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7IHIrKykge1xuICAgICAgZm9yICg7IGwgPCBsYXllcnNDb3VudDsgbCsrKSB7XG4gICAgICAgIGZvciAoOyBpIDwgY29tcG9uZW50c0NvdW50OyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSB0aWxlLmNvbXBvbmVudHNbaV07XG5cbiAgICAgICAgICBpZiAociA+IGNvbXBvbmVudC5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCByZXNvbHV0aW9uID0gY29tcG9uZW50LnJlc29sdXRpb25zW3JdO1xuICAgICAgICAgIGNvbnN0IG51bXByZWNpbmN0cyA9IHJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0cztcblxuICAgICAgICAgIGZvciAoOyBrIDwgbnVtcHJlY2luY3RzOykge1xuICAgICAgICAgICAgY29uc3QgcGFja2V0ID0gY3JlYXRlUGFja2V0KHJlc29sdXRpb24sIGssIGwpO1xuICAgICAgICAgICAgaysrO1xuICAgICAgICAgICAgcmV0dXJuIHBhY2tldDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBrID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGkgPSAwO1xuICAgICAgfVxuXG4gICAgICBsID0gMDtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgSnB4RXJyb3IoXCJPdXQgb2YgcGFja2V0c1wiKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gUmVzb2x1dGlvblBvc2l0aW9uQ29tcG9uZW50TGF5ZXJJdGVyYXRvcihjb250ZXh0KSB7XG4gIGNvbnN0IHNpeiA9IGNvbnRleHQuU0laO1xuICBjb25zdCB0aWxlSW5kZXggPSBjb250ZXh0LmN1cnJlbnRUaWxlLmluZGV4O1xuICBjb25zdCB0aWxlID0gY29udGV4dC50aWxlc1t0aWxlSW5kZXhdO1xuICBjb25zdCBsYXllcnNDb3VudCA9IHRpbGUuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudDtcbiAgY29uc3QgY29tcG9uZW50c0NvdW50ID0gc2l6LkNzaXo7XG4gIGxldCBsLCByLCBjLCBwO1xuICBsZXQgbWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gMDtcblxuICBmb3IgKGMgPSAwOyBjIDwgY29tcG9uZW50c0NvdW50OyBjKyspIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSB0aWxlLmNvbXBvbmVudHNbY107XG4gICAgbWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gTWF0aC5tYXgobWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50LCBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCk7XG4gIH1cblxuICBjb25zdCBtYXhOdW1QcmVjaW5jdHNJbkxldmVsID0gbmV3IEludDMyQXJyYXkobWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50ICsgMSk7XG5cbiAgZm9yIChyID0gMDsgciA8PSBtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7ICsrcikge1xuICAgIGxldCBtYXhOdW1QcmVjaW5jdHMgPSAwO1xuXG4gICAgZm9yIChjID0gMDsgYyA8IGNvbXBvbmVudHNDb3VudDsgKytjKSB7XG4gICAgICBjb25zdCByZXNvbHV0aW9ucyA9IHRpbGUuY29tcG9uZW50c1tjXS5yZXNvbHV0aW9ucztcblxuICAgICAgaWYgKHIgPCByZXNvbHV0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgbWF4TnVtUHJlY2luY3RzID0gTWF0aC5tYXgobWF4TnVtUHJlY2luY3RzLCByZXNvbHV0aW9uc1tyXS5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtYXhOdW1QcmVjaW5jdHNJbkxldmVsW3JdID0gbWF4TnVtUHJlY2luY3RzO1xuICB9XG5cbiAgbCA9IDA7XG4gIHIgPSAwO1xuICBjID0gMDtcbiAgcCA9IDA7XG5cbiAgdGhpcy5uZXh0UGFja2V0ID0gZnVuY3Rpb24gSnB4SW1hZ2VfbmV4dFBhY2tldCgpIHtcbiAgICBmb3IgKDsgciA8PSBtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7IHIrKykge1xuICAgICAgZm9yICg7IHAgPCBtYXhOdW1QcmVjaW5jdHNJbkxldmVsW3JdOyBwKyspIHtcbiAgICAgICAgZm9yICg7IGMgPCBjb21wb25lbnRzQ291bnQ7IGMrKykge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRpbGUuY29tcG9uZW50c1tjXTtcblxuICAgICAgICAgIGlmIChyID4gY29tcG9uZW50LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJlc29sdXRpb24gPSBjb21wb25lbnQucmVzb2x1dGlvbnNbcl07XG4gICAgICAgICAgY29uc3QgbnVtcHJlY2luY3RzID0gcmVzb2x1dGlvbi5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzO1xuXG4gICAgICAgICAgaWYgKHAgPj0gbnVtcHJlY2luY3RzKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKDsgbCA8IGxheWVyc0NvdW50Oykge1xuICAgICAgICAgICAgY29uc3QgcGFja2V0ID0gY3JlYXRlUGFja2V0KHJlc29sdXRpb24sIHAsIGwpO1xuICAgICAgICAgICAgbCsrO1xuICAgICAgICAgICAgcmV0dXJuIHBhY2tldDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGMgPSAwO1xuICAgICAgfVxuXG4gICAgICBwID0gMDtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgSnB4RXJyb3IoXCJPdXQgb2YgcGFja2V0c1wiKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gUG9zaXRpb25Db21wb25lbnRSZXNvbHV0aW9uTGF5ZXJJdGVyYXRvcihjb250ZXh0KSB7XG4gIGNvbnN0IHNpeiA9IGNvbnRleHQuU0laO1xuICBjb25zdCB0aWxlSW5kZXggPSBjb250ZXh0LmN1cnJlbnRUaWxlLmluZGV4O1xuICBjb25zdCB0aWxlID0gY29udGV4dC50aWxlc1t0aWxlSW5kZXhdO1xuICBjb25zdCBsYXllcnNDb3VudCA9IHRpbGUuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudDtcbiAgY29uc3QgY29tcG9uZW50c0NvdW50ID0gc2l6LkNzaXo7XG4gIGNvbnN0IHByZWNpbmN0c1NpemVzID0gZ2V0UHJlY2luY3RTaXplc0luSW1hZ2VTY2FsZSh0aWxlKTtcbiAgY29uc3QgcHJlY2luY3RzSXRlcmF0aW9uU2l6ZXMgPSBwcmVjaW5jdHNTaXplcztcbiAgbGV0IGwgPSAwLFxuICAgICAgciA9IDAsXG4gICAgICBjID0gMCxcbiAgICAgIHB4ID0gMCxcbiAgICAgIHB5ID0gMDtcblxuICB0aGlzLm5leHRQYWNrZXQgPSBmdW5jdGlvbiBKcHhJbWFnZV9uZXh0UGFja2V0KCkge1xuICAgIGZvciAoOyBweSA8IHByZWNpbmN0c0l0ZXJhdGlvblNpemVzLm1heE51bUhpZ2g7IHB5KyspIHtcbiAgICAgIGZvciAoOyBweCA8IHByZWNpbmN0c0l0ZXJhdGlvblNpemVzLm1heE51bVdpZGU7IHB4KyspIHtcbiAgICAgICAgZm9yICg7IGMgPCBjb21wb25lbnRzQ291bnQ7IGMrKykge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRpbGUuY29tcG9uZW50c1tjXTtcbiAgICAgICAgICBjb25zdCBkZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgPSBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDtcblxuICAgICAgICAgIGZvciAoOyByIDw9IGRlY29tcG9zaXRpb25MZXZlbHNDb3VudDsgcisrKSB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHV0aW9uID0gY29tcG9uZW50LnJlc29sdXRpb25zW3JdO1xuICAgICAgICAgICAgY29uc3Qgc2l6ZUluSW1hZ2VTY2FsZSA9IHByZWNpbmN0c1NpemVzLmNvbXBvbmVudHNbY10ucmVzb2x1dGlvbnNbcl07XG4gICAgICAgICAgICBjb25zdCBrID0gZ2V0UHJlY2luY3RJbmRleElmRXhpc3QocHgsIHB5LCBzaXplSW5JbWFnZVNjYWxlLCBwcmVjaW5jdHNJdGVyYXRpb25TaXplcywgcmVzb2x1dGlvbik7XG5cbiAgICAgICAgICAgIGlmIChrID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKDsgbCA8IGxheWVyc0NvdW50Oykge1xuICAgICAgICAgICAgICBjb25zdCBwYWNrZXQgPSBjcmVhdGVQYWNrZXQocmVzb2x1dGlvbiwgaywgbCk7XG4gICAgICAgICAgICAgIGwrKztcbiAgICAgICAgICAgICAgcmV0dXJuIHBhY2tldDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbCA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgciA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjID0gMDtcbiAgICAgIH1cblxuICAgICAgcHggPSAwO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBKcHhFcnJvcihcIk91dCBvZiBwYWNrZXRzXCIpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBDb21wb25lbnRQb3NpdGlvblJlc29sdXRpb25MYXllckl0ZXJhdG9yKGNvbnRleHQpIHtcbiAgY29uc3Qgc2l6ID0gY29udGV4dC5TSVo7XG4gIGNvbnN0IHRpbGVJbmRleCA9IGNvbnRleHQuY3VycmVudFRpbGUuaW5kZXg7XG4gIGNvbnN0IHRpbGUgPSBjb250ZXh0LnRpbGVzW3RpbGVJbmRleF07XG4gIGNvbnN0IGxheWVyc0NvdW50ID0gdGlsZS5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50O1xuICBjb25zdCBjb21wb25lbnRzQ291bnQgPSBzaXouQ3NpejtcbiAgY29uc3QgcHJlY2luY3RzU2l6ZXMgPSBnZXRQcmVjaW5jdFNpemVzSW5JbWFnZVNjYWxlKHRpbGUpO1xuICBsZXQgbCA9IDAsXG4gICAgICByID0gMCxcbiAgICAgIGMgPSAwLFxuICAgICAgcHggPSAwLFxuICAgICAgcHkgPSAwO1xuXG4gIHRoaXMubmV4dFBhY2tldCA9IGZ1bmN0aW9uIEpweEltYWdlX25leHRQYWNrZXQoKSB7XG4gICAgZm9yICg7IGMgPCBjb21wb25lbnRzQ291bnQ7ICsrYykge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGlsZS5jb21wb25lbnRzW2NdO1xuICAgICAgY29uc3QgcHJlY2luY3RzSXRlcmF0aW9uU2l6ZXMgPSBwcmVjaW5jdHNTaXplcy5jb21wb25lbnRzW2NdO1xuICAgICAgY29uc3QgZGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gY29tcG9uZW50LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7XG5cbiAgICAgIGZvciAoOyBweSA8IHByZWNpbmN0c0l0ZXJhdGlvblNpemVzLm1heE51bUhpZ2g7IHB5KyspIHtcbiAgICAgICAgZm9yICg7IHB4IDwgcHJlY2luY3RzSXRlcmF0aW9uU2l6ZXMubWF4TnVtV2lkZTsgcHgrKykge1xuICAgICAgICAgIGZvciAoOyByIDw9IGRlY29tcG9zaXRpb25MZXZlbHNDb3VudDsgcisrKSB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHV0aW9uID0gY29tcG9uZW50LnJlc29sdXRpb25zW3JdO1xuICAgICAgICAgICAgY29uc3Qgc2l6ZUluSW1hZ2VTY2FsZSA9IHByZWNpbmN0c0l0ZXJhdGlvblNpemVzLnJlc29sdXRpb25zW3JdO1xuICAgICAgICAgICAgY29uc3QgayA9IGdldFByZWNpbmN0SW5kZXhJZkV4aXN0KHB4LCBweSwgc2l6ZUluSW1hZ2VTY2FsZSwgcHJlY2luY3RzSXRlcmF0aW9uU2l6ZXMsIHJlc29sdXRpb24pO1xuXG4gICAgICAgICAgICBpZiAoayA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yICg7IGwgPCBsYXllcnNDb3VudDspIHtcbiAgICAgICAgICAgICAgY29uc3QgcGFja2V0ID0gY3JlYXRlUGFja2V0KHJlc29sdXRpb24sIGssIGwpO1xuICAgICAgICAgICAgICBsKys7XG4gICAgICAgICAgICAgIHJldHVybiBwYWNrZXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGwgPSAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHIgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcHggPSAwO1xuICAgICAgfVxuXG4gICAgICBweSA9IDA7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEpweEVycm9yKFwiT3V0IG9mIHBhY2tldHNcIik7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFByZWNpbmN0SW5kZXhJZkV4aXN0KHB4SW5kZXgsIHB5SW5kZXgsIHNpemVJbkltYWdlU2NhbGUsIHByZWNpbmN0SXRlcmF0aW9uU2l6ZXMsIHJlc29sdXRpb24pIHtcbiAgY29uc3QgcG9zWCA9IHB4SW5kZXggKiBwcmVjaW5jdEl0ZXJhdGlvblNpemVzLm1pbldpZHRoO1xuICBjb25zdCBwb3NZID0gcHlJbmRleCAqIHByZWNpbmN0SXRlcmF0aW9uU2l6ZXMubWluSGVpZ2h0O1xuXG4gIGlmIChwb3NYICUgc2l6ZUluSW1hZ2VTY2FsZS53aWR0aCAhPT0gMCB8fCBwb3NZICUgc2l6ZUluSW1hZ2VTY2FsZS5oZWlnaHQgIT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHN0YXJ0UHJlY2luY3RSb3dJbmRleCA9IHBvc1kgLyBzaXplSW5JbWFnZVNjYWxlLndpZHRoICogcmVzb2x1dGlvbi5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3Rzd2lkZTtcbiAgcmV0dXJuIHBvc1ggLyBzaXplSW5JbWFnZVNjYWxlLmhlaWdodCArIHN0YXJ0UHJlY2luY3RSb3dJbmRleDtcbn1cblxuZnVuY3Rpb24gZ2V0UHJlY2luY3RTaXplc0luSW1hZ2VTY2FsZSh0aWxlKSB7XG4gIGNvbnN0IGNvbXBvbmVudHNDb3VudCA9IHRpbGUuY29tcG9uZW50cy5sZW5ndGg7XG4gIGxldCBtaW5XaWR0aCA9IE51bWJlci5NQVhfVkFMVUU7XG4gIGxldCBtaW5IZWlnaHQgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICBsZXQgbWF4TnVtV2lkZSA9IDA7XG4gIGxldCBtYXhOdW1IaWdoID0gMDtcbiAgY29uc3Qgc2l6ZVBlckNvbXBvbmVudCA9IG5ldyBBcnJheShjb21wb25lbnRzQ291bnQpO1xuXG4gIGZvciAobGV0IGMgPSAwOyBjIDwgY29tcG9uZW50c0NvdW50OyBjKyspIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSB0aWxlLmNvbXBvbmVudHNbY107XG4gICAgY29uc3QgZGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gY29tcG9uZW50LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7XG4gICAgY29uc3Qgc2l6ZVBlclJlc29sdXRpb24gPSBuZXcgQXJyYXkoZGVjb21wb3NpdGlvbkxldmVsc0NvdW50ICsgMSk7XG4gICAgbGV0IG1pbldpZHRoQ3VycmVudENvbXBvbmVudCA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgbGV0IG1pbkhlaWdodEN1cnJlbnRDb21wb25lbnQgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgIGxldCBtYXhOdW1XaWRlQ3VycmVudENvbXBvbmVudCA9IDA7XG4gICAgbGV0IG1heE51bUhpZ2hDdXJyZW50Q29tcG9uZW50ID0gMDtcbiAgICBsZXQgc2NhbGUgPSAxO1xuXG4gICAgZm9yIChsZXQgciA9IGRlY29tcG9zaXRpb25MZXZlbHNDb3VudDsgciA+PSAwOyAtLXIpIHtcbiAgICAgIGNvbnN0IHJlc29sdXRpb24gPSBjb21wb25lbnQucmVzb2x1dGlvbnNbcl07XG4gICAgICBjb25zdCB3aWR0aEN1cnJlbnRSZXNvbHV0aW9uID0gc2NhbGUgKiByZXNvbHV0aW9uLnByZWNpbmN0UGFyYW1ldGVycy5wcmVjaW5jdFdpZHRoO1xuICAgICAgY29uc3QgaGVpZ2h0Q3VycmVudFJlc29sdXRpb24gPSBzY2FsZSAqIHJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLnByZWNpbmN0SGVpZ2h0O1xuICAgICAgbWluV2lkdGhDdXJyZW50Q29tcG9uZW50ID0gTWF0aC5taW4obWluV2lkdGhDdXJyZW50Q29tcG9uZW50LCB3aWR0aEN1cnJlbnRSZXNvbHV0aW9uKTtcbiAgICAgIG1pbkhlaWdodEN1cnJlbnRDb21wb25lbnQgPSBNYXRoLm1pbihtaW5IZWlnaHRDdXJyZW50Q29tcG9uZW50LCBoZWlnaHRDdXJyZW50UmVzb2x1dGlvbik7XG4gICAgICBtYXhOdW1XaWRlQ3VycmVudENvbXBvbmVudCA9IE1hdGgubWF4KG1heE51bVdpZGVDdXJyZW50Q29tcG9uZW50LCByZXNvbHV0aW9uLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHN3aWRlKTtcbiAgICAgIG1heE51bUhpZ2hDdXJyZW50Q29tcG9uZW50ID0gTWF0aC5tYXgobWF4TnVtSGlnaEN1cnJlbnRDb21wb25lbnQsIHJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0c2hpZ2gpO1xuICAgICAgc2l6ZVBlclJlc29sdXRpb25bcl0gPSB7XG4gICAgICAgIHdpZHRoOiB3aWR0aEN1cnJlbnRSZXNvbHV0aW9uLFxuICAgICAgICBoZWlnaHQ6IGhlaWdodEN1cnJlbnRSZXNvbHV0aW9uXG4gICAgICB9O1xuICAgICAgc2NhbGUgPDw9IDE7XG4gICAgfVxuXG4gICAgbWluV2lkdGggPSBNYXRoLm1pbihtaW5XaWR0aCwgbWluV2lkdGhDdXJyZW50Q29tcG9uZW50KTtcbiAgICBtaW5IZWlnaHQgPSBNYXRoLm1pbihtaW5IZWlnaHQsIG1pbkhlaWdodEN1cnJlbnRDb21wb25lbnQpO1xuICAgIG1heE51bVdpZGUgPSBNYXRoLm1heChtYXhOdW1XaWRlLCBtYXhOdW1XaWRlQ3VycmVudENvbXBvbmVudCk7XG4gICAgbWF4TnVtSGlnaCA9IE1hdGgubWF4KG1heE51bUhpZ2gsIG1heE51bUhpZ2hDdXJyZW50Q29tcG9uZW50KTtcbiAgICBzaXplUGVyQ29tcG9uZW50W2NdID0ge1xuICAgICAgcmVzb2x1dGlvbnM6IHNpemVQZXJSZXNvbHV0aW9uLFxuICAgICAgbWluV2lkdGg6IG1pbldpZHRoQ3VycmVudENvbXBvbmVudCxcbiAgICAgIG1pbkhlaWdodDogbWluSGVpZ2h0Q3VycmVudENvbXBvbmVudCxcbiAgICAgIG1heE51bVdpZGU6IG1heE51bVdpZGVDdXJyZW50Q29tcG9uZW50LFxuICAgICAgbWF4TnVtSGlnaDogbWF4TnVtSGlnaEN1cnJlbnRDb21wb25lbnRcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjb21wb25lbnRzOiBzaXplUGVyQ29tcG9uZW50LFxuICAgIG1pbldpZHRoLFxuICAgIG1pbkhlaWdodCxcbiAgICBtYXhOdW1XaWRlLFxuICAgIG1heE51bUhpZ2hcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRQYWNrZXRzKGNvbnRleHQpIHtcbiAgY29uc3Qgc2l6ID0gY29udGV4dC5TSVo7XG4gIGNvbnN0IHRpbGVJbmRleCA9IGNvbnRleHQuY3VycmVudFRpbGUuaW5kZXg7XG4gIGNvbnN0IHRpbGUgPSBjb250ZXh0LnRpbGVzW3RpbGVJbmRleF07XG4gIGNvbnN0IGNvbXBvbmVudHNDb3VudCA9IHNpei5Dc2l6O1xuXG4gIGZvciAobGV0IGMgPSAwOyBjIDwgY29tcG9uZW50c0NvdW50OyBjKyspIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSB0aWxlLmNvbXBvbmVudHNbY107XG4gICAgY29uc3QgZGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gY29tcG9uZW50LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7XG4gICAgY29uc3QgcmVzb2x1dGlvbnMgPSBbXTtcbiAgICBjb25zdCBzdWJiYW5kcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgciA9IDA7IHIgPD0gZGVjb21wb3NpdGlvbkxldmVsc0NvdW50OyByKyspIHtcbiAgICAgIGNvbnN0IGJsb2Nrc0RpbWVuc2lvbnMgPSBnZXRCbG9ja3NEaW1lbnNpb25zKGNvbnRleHQsIGNvbXBvbmVudCwgcik7XG4gICAgICBjb25zdCByZXNvbHV0aW9uID0ge307XG4gICAgICBjb25zdCBzY2FsZSA9IDEgPDwgZGVjb21wb3NpdGlvbkxldmVsc0NvdW50IC0gcjtcbiAgICAgIHJlc29sdXRpb24udHJ4MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MCAvIHNjYWxlKTtcbiAgICAgIHJlc29sdXRpb24udHJ5MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MCAvIHNjYWxlKTtcbiAgICAgIHJlc29sdXRpb24udHJ4MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MSAvIHNjYWxlKTtcbiAgICAgIHJlc29sdXRpb24udHJ5MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MSAvIHNjYWxlKTtcbiAgICAgIHJlc29sdXRpb24ucmVzTGV2ZWwgPSByO1xuICAgICAgYnVpbGRQcmVjaW5jdHMoY29udGV4dCwgcmVzb2x1dGlvbiwgYmxvY2tzRGltZW5zaW9ucyk7XG4gICAgICByZXNvbHV0aW9ucy5wdXNoKHJlc29sdXRpb24pO1xuICAgICAgbGV0IHN1YmJhbmQ7XG5cbiAgICAgIGlmIChyID09PSAwKSB7XG4gICAgICAgIHN1YmJhbmQgPSB7fTtcbiAgICAgICAgc3ViYmFuZC50eXBlID0gXCJMTFwiO1xuICAgICAgICBzdWJiYW5kLnRieDAgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeDAgLyBzY2FsZSk7XG4gICAgICAgIHN1YmJhbmQudGJ5MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MCAvIHNjYWxlKTtcbiAgICAgICAgc3ViYmFuZC50YngxID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3gxIC8gc2NhbGUpO1xuICAgICAgICBzdWJiYW5kLnRieTEgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeTEgLyBzY2FsZSk7XG4gICAgICAgIHN1YmJhbmQucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG4gICAgICAgIGJ1aWxkQ29kZWJsb2Nrcyhjb250ZXh0LCBzdWJiYW5kLCBibG9ja3NEaW1lbnNpb25zKTtcbiAgICAgICAgc3ViYmFuZHMucHVzaChzdWJiYW5kKTtcbiAgICAgICAgcmVzb2x1dGlvbi5zdWJiYW5kcyA9IFtzdWJiYW5kXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGJzY2FsZSA9IDEgPDwgZGVjb21wb3NpdGlvbkxldmVsc0NvdW50IC0gciArIDE7XG4gICAgICAgIGNvbnN0IHJlc29sdXRpb25TdWJiYW5kcyA9IFtdO1xuICAgICAgICBzdWJiYW5kID0ge307XG4gICAgICAgIHN1YmJhbmQudHlwZSA9IFwiSExcIjtcbiAgICAgICAgc3ViYmFuZC50YngwID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3gwIC8gYnNjYWxlIC0gMC41KTtcbiAgICAgICAgc3ViYmFuZC50YnkwID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3kwIC8gYnNjYWxlKTtcbiAgICAgICAgc3ViYmFuZC50YngxID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3gxIC8gYnNjYWxlIC0gMC41KTtcbiAgICAgICAgc3ViYmFuZC50YnkxID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3kxIC8gYnNjYWxlKTtcbiAgICAgICAgc3ViYmFuZC5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcbiAgICAgICAgYnVpbGRDb2RlYmxvY2tzKGNvbnRleHQsIHN1YmJhbmQsIGJsb2Nrc0RpbWVuc2lvbnMpO1xuICAgICAgICBzdWJiYW5kcy5wdXNoKHN1YmJhbmQpO1xuICAgICAgICByZXNvbHV0aW9uU3ViYmFuZHMucHVzaChzdWJiYW5kKTtcbiAgICAgICAgc3ViYmFuZCA9IHt9O1xuICAgICAgICBzdWJiYW5kLnR5cGUgPSBcIkxIXCI7XG4gICAgICAgIHN1YmJhbmQudGJ4MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MCAvIGJzY2FsZSk7XG4gICAgICAgIHN1YmJhbmQudGJ5MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MCAvIGJzY2FsZSAtIDAuNSk7XG4gICAgICAgIHN1YmJhbmQudGJ4MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MSAvIGJzY2FsZSk7XG4gICAgICAgIHN1YmJhbmQudGJ5MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MSAvIGJzY2FsZSAtIDAuNSk7XG4gICAgICAgIHN1YmJhbmQucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG4gICAgICAgIGJ1aWxkQ29kZWJsb2Nrcyhjb250ZXh0LCBzdWJiYW5kLCBibG9ja3NEaW1lbnNpb25zKTtcbiAgICAgICAgc3ViYmFuZHMucHVzaChzdWJiYW5kKTtcbiAgICAgICAgcmVzb2x1dGlvblN1YmJhbmRzLnB1c2goc3ViYmFuZCk7XG4gICAgICAgIHN1YmJhbmQgPSB7fTtcbiAgICAgICAgc3ViYmFuZC50eXBlID0gXCJISFwiO1xuICAgICAgICBzdWJiYW5kLnRieDAgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeDAgLyBic2NhbGUgLSAwLjUpO1xuICAgICAgICBzdWJiYW5kLnRieTAgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeTAgLyBic2NhbGUgLSAwLjUpO1xuICAgICAgICBzdWJiYW5kLnRieDEgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeDEgLyBic2NhbGUgLSAwLjUpO1xuICAgICAgICBzdWJiYW5kLnRieTEgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeTEgLyBic2NhbGUgLSAwLjUpO1xuICAgICAgICBzdWJiYW5kLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuICAgICAgICBidWlsZENvZGVibG9ja3MoY29udGV4dCwgc3ViYmFuZCwgYmxvY2tzRGltZW5zaW9ucyk7XG4gICAgICAgIHN1YmJhbmRzLnB1c2goc3ViYmFuZCk7XG4gICAgICAgIHJlc29sdXRpb25TdWJiYW5kcy5wdXNoKHN1YmJhbmQpO1xuICAgICAgICByZXNvbHV0aW9uLnN1YmJhbmRzID0gcmVzb2x1dGlvblN1YmJhbmRzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBvbmVudC5yZXNvbHV0aW9ucyA9IHJlc29sdXRpb25zO1xuICAgIGNvbXBvbmVudC5zdWJiYW5kcyA9IHN1YmJhbmRzO1xuICB9XG5cbiAgY29uc3QgcHJvZ3Jlc3Npb25PcmRlciA9IHRpbGUuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5wcm9ncmVzc2lvbk9yZGVyO1xuXG4gIHN3aXRjaCAocHJvZ3Jlc3Npb25PcmRlcikge1xuICAgIGNhc2UgMDpcbiAgICAgIHRpbGUucGFja2V0c0l0ZXJhdG9yID0gbmV3IExheWVyUmVzb2x1dGlvbkNvbXBvbmVudFBvc2l0aW9uSXRlcmF0b3IoY29udGV4dCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgMTpcbiAgICAgIHRpbGUucGFja2V0c0l0ZXJhdG9yID0gbmV3IFJlc29sdXRpb25MYXllckNvbXBvbmVudFBvc2l0aW9uSXRlcmF0b3IoY29udGV4dCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgMjpcbiAgICAgIHRpbGUucGFja2V0c0l0ZXJhdG9yID0gbmV3IFJlc29sdXRpb25Qb3NpdGlvbkNvbXBvbmVudExheWVySXRlcmF0b3IoY29udGV4dCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgMzpcbiAgICAgIHRpbGUucGFja2V0c0l0ZXJhdG9yID0gbmV3IFBvc2l0aW9uQ29tcG9uZW50UmVzb2x1dGlvbkxheWVySXRlcmF0b3IoY29udGV4dCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgNDpcbiAgICAgIHRpbGUucGFja2V0c0l0ZXJhdG9yID0gbmV3IENvbXBvbmVudFBvc2l0aW9uUmVzb2x1dGlvbkxheWVySXRlcmF0b3IoY29udGV4dCk7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgSnB4RXJyb3IoYFVuc3VwcG9ydGVkIHByb2dyZXNzaW9uIG9yZGVyICR7cHJvZ3Jlc3Npb25PcmRlcn1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVRpbGVQYWNrZXRzKGNvbnRleHQsIGRhdGEsIG9mZnNldCwgZGF0YUxlbmd0aCkge1xuICBsZXQgcG9zaXRpb24gPSAwO1xuICBsZXQgYnVmZmVyLFxuICAgICAgYnVmZmVyU2l6ZSA9IDAsXG4gICAgICBza2lwTmV4dEJpdCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIHJlYWRCaXRzKGNvdW50KSB7XG4gICAgd2hpbGUgKGJ1ZmZlclNpemUgPCBjb3VudCkge1xuICAgICAgY29uc3QgYiA9IGRhdGFbb2Zmc2V0ICsgcG9zaXRpb25dO1xuICAgICAgcG9zaXRpb24rKztcblxuICAgICAgaWYgKHNraXBOZXh0Qml0KSB7XG4gICAgICAgIGJ1ZmZlciA9IGJ1ZmZlciA8PCA3IHwgYjtcbiAgICAgICAgYnVmZmVyU2l6ZSArPSA3O1xuICAgICAgICBza2lwTmV4dEJpdCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVmZmVyID0gYnVmZmVyIDw8IDggfCBiO1xuICAgICAgICBidWZmZXJTaXplICs9IDg7XG4gICAgICB9XG5cbiAgICAgIGlmIChiID09PSAweGZmKSB7XG4gICAgICAgIHNraXBOZXh0Qml0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBidWZmZXJTaXplIC09IGNvdW50O1xuICAgIHJldHVybiBidWZmZXIgPj4+IGJ1ZmZlclNpemUgJiAoMSA8PCBjb3VudCkgLSAxO1xuICB9XG5cbiAgZnVuY3Rpb24gc2tpcE1hcmtlcklmRXF1YWwodmFsdWUpIHtcbiAgICBpZiAoZGF0YVtvZmZzZXQgKyBwb3NpdGlvbiAtIDFdID09PSAweGZmICYmIGRhdGFbb2Zmc2V0ICsgcG9zaXRpb25dID09PSB2YWx1ZSkge1xuICAgICAgc2tpcEJ5dGVzKDEpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChkYXRhW29mZnNldCArIHBvc2l0aW9uXSA9PT0gMHhmZiAmJiBkYXRhW29mZnNldCArIHBvc2l0aW9uICsgMV0gPT09IHZhbHVlKSB7XG4gICAgICBza2lwQnl0ZXMoMik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBza2lwQnl0ZXMoY291bnQpIHtcbiAgICBwb3NpdGlvbiArPSBjb3VudDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFsaWduVG9CeXRlKCkge1xuICAgIGJ1ZmZlclNpemUgPSAwO1xuXG4gICAgaWYgKHNraXBOZXh0Qml0KSB7XG4gICAgICBwb3NpdGlvbisrO1xuICAgICAgc2tpcE5leHRCaXQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkQ29kaW5ncGFzc2VzKCkge1xuICAgIGlmIChyZWFkQml0cygxKSA9PT0gMCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgaWYgKHJlYWRCaXRzKDEpID09PSAwKSB7XG4gICAgICByZXR1cm4gMjtcbiAgICB9XG5cbiAgICBsZXQgdmFsdWUgPSByZWFkQml0cygyKTtcblxuICAgIGlmICh2YWx1ZSA8IDMpIHtcbiAgICAgIHJldHVybiB2YWx1ZSArIDM7XG4gICAgfVxuXG4gICAgdmFsdWUgPSByZWFkQml0cyg1KTtcblxuICAgIGlmICh2YWx1ZSA8IDMxKSB7XG4gICAgICByZXR1cm4gdmFsdWUgKyA2O1xuICAgIH1cblxuICAgIHZhbHVlID0gcmVhZEJpdHMoNyk7XG4gICAgcmV0dXJuIHZhbHVlICsgMzc7XG4gIH1cblxuICBjb25zdCB0aWxlSW5kZXggPSBjb250ZXh0LmN1cnJlbnRUaWxlLmluZGV4O1xuICBjb25zdCB0aWxlID0gY29udGV4dC50aWxlc1t0aWxlSW5kZXhdO1xuICBjb25zdCBzb3BNYXJrZXJVc2VkID0gY29udGV4dC5DT0Quc29wTWFya2VyVXNlZDtcbiAgY29uc3QgZXBoTWFya2VyVXNlZCA9IGNvbnRleHQuQ09ELmVwaE1hcmtlclVzZWQ7XG4gIGNvbnN0IHBhY2tldHNJdGVyYXRvciA9IHRpbGUucGFja2V0c0l0ZXJhdG9yO1xuXG4gIHdoaWxlIChwb3NpdGlvbiA8IGRhdGFMZW5ndGgpIHtcbiAgICBhbGlnblRvQnl0ZSgpO1xuXG4gICAgaWYgKHNvcE1hcmtlclVzZWQgJiYgc2tpcE1hcmtlcklmRXF1YWwoMHg5MSkpIHtcbiAgICAgIHNraXBCeXRlcyg0KTtcbiAgICB9XG5cbiAgICBjb25zdCBwYWNrZXQgPSBwYWNrZXRzSXRlcmF0b3IubmV4dFBhY2tldCgpO1xuXG4gICAgaWYgKCFyZWFkQml0cygxKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbGF5ZXJOdW1iZXIgPSBwYWNrZXQubGF5ZXJOdW1iZXIsXG4gICAgICAgICAgcXVldWUgPSBbXTtcbiAgICBsZXQgY29kZWJsb2NrO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gcGFja2V0LmNvZGVibG9ja3MubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgY29kZWJsb2NrID0gcGFja2V0LmNvZGVibG9ja3NbaV07XG4gICAgICBsZXQgcHJlY2luY3QgPSBjb2RlYmxvY2sucHJlY2luY3Q7XG4gICAgICBjb25zdCBjb2RlYmxvY2tDb2x1bW4gPSBjb2RlYmxvY2suY2J4IC0gcHJlY2luY3QuY2J4TWluO1xuICAgICAgY29uc3QgY29kZWJsb2NrUm93ID0gY29kZWJsb2NrLmNieSAtIHByZWNpbmN0LmNieU1pbjtcbiAgICAgIGxldCBjb2RlYmxvY2tJbmNsdWRlZCA9IGZhbHNlO1xuICAgICAgbGV0IGZpcnN0VGltZUluY2x1c2lvbiA9IGZhbHNlO1xuICAgICAgbGV0IHZhbHVlUmVhZHksIHplcm9CaXRQbGFuZXNUcmVlO1xuXG4gICAgICBpZiAoY29kZWJsb2NrLmluY2x1ZGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29kZWJsb2NrSW5jbHVkZWQgPSAhIXJlYWRCaXRzKDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJlY2luY3QgPSBjb2RlYmxvY2sucHJlY2luY3Q7XG4gICAgICAgIGxldCBpbmNsdXNpb25UcmVlO1xuXG4gICAgICAgIGlmIChwcmVjaW5jdC5pbmNsdXNpb25UcmVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpbmNsdXNpb25UcmVlID0gcHJlY2luY3QuaW5jbHVzaW9uVHJlZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB3aWR0aCA9IHByZWNpbmN0LmNieE1heCAtIHByZWNpbmN0LmNieE1pbiArIDE7XG4gICAgICAgICAgY29uc3QgaGVpZ2h0ID0gcHJlY2luY3QuY2J5TWF4IC0gcHJlY2luY3QuY2J5TWluICsgMTtcbiAgICAgICAgICBpbmNsdXNpb25UcmVlID0gbmV3IEluY2x1c2lvblRyZWUod2lkdGgsIGhlaWdodCwgbGF5ZXJOdW1iZXIpO1xuICAgICAgICAgIHplcm9CaXRQbGFuZXNUcmVlID0gbmV3IFRhZ1RyZWUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgcHJlY2luY3QuaW5jbHVzaW9uVHJlZSA9IGluY2x1c2lvblRyZWU7XG4gICAgICAgICAgcHJlY2luY3QuemVyb0JpdFBsYW5lc1RyZWUgPSB6ZXJvQml0UGxhbmVzVHJlZTtcblxuICAgICAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgbGF5ZXJOdW1iZXI7IGwrKykge1xuICAgICAgICAgICAgaWYgKHJlYWRCaXRzKDEpICE9PSAwKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBKcHhFcnJvcihcIkludmFsaWQgdGFnIHRyZWVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluY2x1c2lvblRyZWUucmVzZXQoY29kZWJsb2NrQ29sdW1uLCBjb2RlYmxvY2tSb3csIGxheWVyTnVtYmVyKSkge1xuICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBpZiAocmVhZEJpdHMoMSkpIHtcbiAgICAgICAgICAgICAgdmFsdWVSZWFkeSA9ICFpbmNsdXNpb25UcmVlLm5leHRMZXZlbCgpO1xuXG4gICAgICAgICAgICAgIGlmICh2YWx1ZVJlYWR5KSB7XG4gICAgICAgICAgICAgICAgY29kZWJsb2NrLmluY2x1ZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb2RlYmxvY2tJbmNsdWRlZCA9IGZpcnN0VGltZUluY2x1c2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGluY2x1c2lvblRyZWUuaW5jcmVtZW50VmFsdWUobGF5ZXJOdW1iZXIpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFjb2RlYmxvY2tJbmNsdWRlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpcnN0VGltZUluY2x1c2lvbikge1xuICAgICAgICB6ZXJvQml0UGxhbmVzVHJlZSA9IHByZWNpbmN0Lnplcm9CaXRQbGFuZXNUcmVlO1xuICAgICAgICB6ZXJvQml0UGxhbmVzVHJlZS5yZXNldChjb2RlYmxvY2tDb2x1bW4sIGNvZGVibG9ja1Jvdyk7XG5cbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICBpZiAocmVhZEJpdHMoMSkpIHtcbiAgICAgICAgICAgIHZhbHVlUmVhZHkgPSAhemVyb0JpdFBsYW5lc1RyZWUubmV4dExldmVsKCk7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZVJlYWR5KSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB6ZXJvQml0UGxhbmVzVHJlZS5pbmNyZW1lbnRWYWx1ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvZGVibG9jay56ZXJvQml0UGxhbmVzID0gemVyb0JpdFBsYW5lc1RyZWUudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvZGluZ3Bhc3NlcyA9IHJlYWRDb2RpbmdwYXNzZXMoKTtcblxuICAgICAgd2hpbGUgKHJlYWRCaXRzKDEpKSB7XG4gICAgICAgIGNvZGVibG9jay5MYmxvY2srKztcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29kaW5ncGFzc2VzTG9nMiA9ICgwLCBfY29yZV91dGlscy5sb2cyKShjb2RpbmdwYXNzZXMpO1xuICAgICAgY29uc3QgYml0cyA9IChjb2RpbmdwYXNzZXMgPCAxIDw8IGNvZGluZ3Bhc3Nlc0xvZzIgPyBjb2RpbmdwYXNzZXNMb2cyIC0gMSA6IGNvZGluZ3Bhc3Nlc0xvZzIpICsgY29kZWJsb2NrLkxibG9jaztcbiAgICAgIGNvbnN0IGNvZGVkRGF0YUxlbmd0aCA9IHJlYWRCaXRzKGJpdHMpO1xuICAgICAgcXVldWUucHVzaCh7XG4gICAgICAgIGNvZGVibG9jayxcbiAgICAgICAgY29kaW5ncGFzc2VzLFxuICAgICAgICBkYXRhTGVuZ3RoOiBjb2RlZERhdGFMZW5ndGhcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGFsaWduVG9CeXRlKCk7XG5cbiAgICBpZiAoZXBoTWFya2VyVXNlZCkge1xuICAgICAgc2tpcE1hcmtlcklmRXF1YWwoMHg5Mik7XG4gICAgfVxuXG4gICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHBhY2tldEl0ZW0gPSBxdWV1ZS5zaGlmdCgpO1xuICAgICAgY29kZWJsb2NrID0gcGFja2V0SXRlbS5jb2RlYmxvY2s7XG5cbiAgICAgIGlmIChjb2RlYmxvY2suZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvZGVibG9jay5kYXRhID0gW107XG4gICAgICB9XG5cbiAgICAgIGNvZGVibG9jay5kYXRhLnB1c2goe1xuICAgICAgICBkYXRhLFxuICAgICAgICBzdGFydDogb2Zmc2V0ICsgcG9zaXRpb24sXG4gICAgICAgIGVuZDogb2Zmc2V0ICsgcG9zaXRpb24gKyBwYWNrZXRJdGVtLmRhdGFMZW5ndGgsXG4gICAgICAgIGNvZGluZ3Bhc3NlczogcGFja2V0SXRlbS5jb2RpbmdwYXNzZXNcbiAgICAgIH0pO1xuICAgICAgcG9zaXRpb24gKz0gcGFja2V0SXRlbS5kYXRhTGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwb3NpdGlvbjtcbn1cblxuZnVuY3Rpb24gY29weUNvZWZmaWNpZW50cyhjb2VmZmljaWVudHMsIGxldmVsV2lkdGgsIGxldmVsSGVpZ2h0LCBzdWJiYW5kLCBkZWx0YSwgbWIsIHJldmVyc2libGUsIHNlZ21lbnRhdGlvblN5bWJvbFVzZWQpIHtcbiAgY29uc3QgeDAgPSBzdWJiYW5kLnRieDA7XG4gIGNvbnN0IHkwID0gc3ViYmFuZC50YnkwO1xuICBjb25zdCB3aWR0aCA9IHN1YmJhbmQudGJ4MSAtIHN1YmJhbmQudGJ4MDtcbiAgY29uc3QgY29kZWJsb2NrcyA9IHN1YmJhbmQuY29kZWJsb2NrcztcbiAgY29uc3QgcmlnaHQgPSBzdWJiYW5kLnR5cGUuY2hhckF0KDApID09PSBcIkhcIiA/IDEgOiAwO1xuICBjb25zdCBib3R0b20gPSBzdWJiYW5kLnR5cGUuY2hhckF0KDEpID09PSBcIkhcIiA/IGxldmVsV2lkdGggOiAwO1xuXG4gIGZvciAobGV0IGkgPSAwLCBpaSA9IGNvZGVibG9ja3MubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgIGNvbnN0IGNvZGVibG9jayA9IGNvZGVibG9ja3NbaV07XG4gICAgY29uc3QgYmxvY2tXaWR0aCA9IGNvZGVibG9jay50YngxXyAtIGNvZGVibG9jay50YngwXztcbiAgICBjb25zdCBibG9ja0hlaWdodCA9IGNvZGVibG9jay50YnkxXyAtIGNvZGVibG9jay50YnkwXztcblxuICAgIGlmIChibG9ja1dpZHRoID09PSAwIHx8IGJsb2NrSGVpZ2h0ID09PSAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY29kZWJsb2NrLmRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgYml0TW9kZWwgPSBuZXcgQml0TW9kZWwoYmxvY2tXaWR0aCwgYmxvY2tIZWlnaHQsIGNvZGVibG9jay5zdWJiYW5kVHlwZSwgY29kZWJsb2NrLnplcm9CaXRQbGFuZXMsIG1iKTtcbiAgICBsZXQgY3VycmVudENvZGluZ3Bhc3NUeXBlID0gMjtcbiAgICBjb25zdCBkYXRhID0gY29kZWJsb2NrLmRhdGE7XG4gICAgbGV0IHRvdGFsTGVuZ3RoID0gMCxcbiAgICAgICAgY29kaW5ncGFzc2VzID0gMDtcbiAgICBsZXQgaiwgamosIGRhdGFJdGVtO1xuXG4gICAgZm9yIChqID0gMCwgamogPSBkYXRhLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgIGRhdGFJdGVtID0gZGF0YVtqXTtcbiAgICAgIHRvdGFsTGVuZ3RoICs9IGRhdGFJdGVtLmVuZCAtIGRhdGFJdGVtLnN0YXJ0O1xuICAgICAgY29kaW5ncGFzc2VzICs9IGRhdGFJdGVtLmNvZGluZ3Bhc3NlcztcbiAgICB9XG5cbiAgICBjb25zdCBlbmNvZGVkRGF0YSA9IG5ldyBVaW50OEFycmF5KHRvdGFsTGVuZ3RoKTtcbiAgICBsZXQgcG9zaXRpb24gPSAwO1xuXG4gICAgZm9yIChqID0gMCwgamogPSBkYXRhLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgIGRhdGFJdGVtID0gZGF0YVtqXTtcbiAgICAgIGNvbnN0IGNodW5rID0gZGF0YUl0ZW0uZGF0YS5zdWJhcnJheShkYXRhSXRlbS5zdGFydCwgZGF0YUl0ZW0uZW5kKTtcbiAgICAgIGVuY29kZWREYXRhLnNldChjaHVuaywgcG9zaXRpb24pO1xuICAgICAgcG9zaXRpb24gKz0gY2h1bmsubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgX2FyaXRobWV0aWNfZGVjb2Rlci5Bcml0aG1ldGljRGVjb2RlcihlbmNvZGVkRGF0YSwgMCwgdG90YWxMZW5ndGgpO1xuICAgIGJpdE1vZGVsLnNldERlY29kZXIoZGVjb2Rlcik7XG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29kaW5ncGFzc2VzOyBqKyspIHtcbiAgICAgIHN3aXRjaCAoY3VycmVudENvZGluZ3Bhc3NUeXBlKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBiaXRNb2RlbC5ydW5TaWduaWZpY2FuY2VQcm9wYWdhdGlvblBhc3MoKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgYml0TW9kZWwucnVuTWFnbml0dWRlUmVmaW5lbWVudFBhc3MoKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgYml0TW9kZWwucnVuQ2xlYW51cFBhc3MoKTtcblxuICAgICAgICAgIGlmIChzZWdtZW50YXRpb25TeW1ib2xVc2VkKSB7XG4gICAgICAgICAgICBiaXRNb2RlbC5jaGVja1NlZ21lbnRhdGlvblN5bWJvbCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50Q29kaW5ncGFzc1R5cGUgPSAoY3VycmVudENvZGluZ3Bhc3NUeXBlICsgMSkgJSAzO1xuICAgIH1cblxuICAgIGxldCBvZmZzZXQgPSBjb2RlYmxvY2sudGJ4MF8gLSB4MCArIChjb2RlYmxvY2sudGJ5MF8gLSB5MCkgKiB3aWR0aDtcbiAgICBjb25zdCBzaWduID0gYml0TW9kZWwuY29lZmZpY2VudHNTaWduO1xuICAgIGNvbnN0IG1hZ25pdHVkZSA9IGJpdE1vZGVsLmNvZWZmaWNlbnRzTWFnbml0dWRlO1xuICAgIGNvbnN0IGJpdHNEZWNvZGVkID0gYml0TW9kZWwuYml0c0RlY29kZWQ7XG4gICAgY29uc3QgbWFnbml0dWRlQ29ycmVjdGlvbiA9IHJldmVyc2libGUgPyAwIDogMC41O1xuICAgIGxldCBrLCBuLCBuYjtcbiAgICBwb3NpdGlvbiA9IDA7XG4gICAgY29uc3QgaW50ZXJsZWF2ZSA9IHN1YmJhbmQudHlwZSAhPT0gXCJMTFwiO1xuXG4gICAgZm9yIChqID0gMDsgaiA8IGJsb2NrSGVpZ2h0OyBqKyspIHtcbiAgICAgIGNvbnN0IHJvdyA9IG9mZnNldCAvIHdpZHRoIHwgMDtcbiAgICAgIGNvbnN0IGxldmVsT2Zmc2V0ID0gMiAqIHJvdyAqIChsZXZlbFdpZHRoIC0gd2lkdGgpICsgcmlnaHQgKyBib3R0b207XG5cbiAgICAgIGZvciAoayA9IDA7IGsgPCBibG9ja1dpZHRoOyBrKyspIHtcbiAgICAgICAgbiA9IG1hZ25pdHVkZVtwb3NpdGlvbl07XG5cbiAgICAgICAgaWYgKG4gIT09IDApIHtcbiAgICAgICAgICBuID0gKG4gKyBtYWduaXR1ZGVDb3JyZWN0aW9uKSAqIGRlbHRhO1xuXG4gICAgICAgICAgaWYgKHNpZ25bcG9zaXRpb25dICE9PSAwKSB7XG4gICAgICAgICAgICBuID0gLW47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmIgPSBiaXRzRGVjb2RlZFtwb3NpdGlvbl07XG4gICAgICAgICAgY29uc3QgcG9zID0gaW50ZXJsZWF2ZSA/IGxldmVsT2Zmc2V0ICsgKG9mZnNldCA8PCAxKSA6IG9mZnNldDtcblxuICAgICAgICAgIGlmIChyZXZlcnNpYmxlICYmIG5iID49IG1iKSB7XG4gICAgICAgICAgICBjb2VmZmljaWVudHNbcG9zXSA9IG47XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvZWZmaWNpZW50c1twb3NdID0gbiAqICgxIDw8IG1iIC0gbmIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG9mZnNldCsrO1xuICAgICAgICBwb3NpdGlvbisrO1xuICAgICAgfVxuXG4gICAgICBvZmZzZXQgKz0gd2lkdGggLSBibG9ja1dpZHRoO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1UaWxlKGNvbnRleHQsIHRpbGUsIGMpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gdGlsZS5jb21wb25lbnRzW2NdO1xuICBjb25zdCBjb2RpbmdTdHlsZVBhcmFtZXRlcnMgPSBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzO1xuICBjb25zdCBxdWFudGl6YXRpb25QYXJhbWV0ZXJzID0gY29tcG9uZW50LnF1YW50aXphdGlvblBhcmFtZXRlcnM7XG4gIGNvbnN0IGRlY29tcG9zaXRpb25MZXZlbHNDb3VudCA9IGNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7XG4gIGNvbnN0IHNwcWNkcyA9IHF1YW50aXphdGlvblBhcmFtZXRlcnMuU1BxY2RzO1xuICBjb25zdCBzY2FsYXJFeHBvdW5kZWQgPSBxdWFudGl6YXRpb25QYXJhbWV0ZXJzLnNjYWxhckV4cG91bmRlZDtcbiAgY29uc3QgZ3VhcmRCaXRzID0gcXVhbnRpemF0aW9uUGFyYW1ldGVycy5ndWFyZEJpdHM7XG4gIGNvbnN0IHNlZ21lbnRhdGlvblN5bWJvbFVzZWQgPSBjb2RpbmdTdHlsZVBhcmFtZXRlcnMuc2VnbWVudGF0aW9uU3ltYm9sVXNlZDtcbiAgY29uc3QgcHJlY2lzaW9uID0gY29udGV4dC5jb21wb25lbnRzW2NdLnByZWNpc2lvbjtcbiAgY29uc3QgcmV2ZXJzaWJsZSA9IGNvZGluZ1N0eWxlUGFyYW1ldGVycy5yZXZlcnNpYmxlVHJhbnNmb3JtYXRpb247XG4gIGNvbnN0IHRyYW5zZm9ybSA9IHJldmVyc2libGUgPyBuZXcgUmV2ZXJzaWJsZVRyYW5zZm9ybSgpIDogbmV3IElycmV2ZXJzaWJsZVRyYW5zZm9ybSgpO1xuICBjb25zdCBzdWJiYW5kQ29lZmZpY2llbnRzID0gW107XG4gIGxldCBiID0gMDtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8PSBkZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7IGkrKykge1xuICAgIGNvbnN0IHJlc29sdXRpb24gPSBjb21wb25lbnQucmVzb2x1dGlvbnNbaV07XG4gICAgY29uc3Qgd2lkdGggPSByZXNvbHV0aW9uLnRyeDEgLSByZXNvbHV0aW9uLnRyeDA7XG4gICAgY29uc3QgaGVpZ2h0ID0gcmVzb2x1dGlvbi50cnkxIC0gcmVzb2x1dGlvbi50cnkwO1xuICAgIGNvbnN0IGNvZWZmaWNpZW50cyA9IG5ldyBGbG9hdDMyQXJyYXkod2lkdGggKiBoZWlnaHQpO1xuXG4gICAgZm9yIChsZXQgaiA9IDAsIGpqID0gcmVzb2x1dGlvbi5zdWJiYW5kcy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICBsZXQgbXUsIGVwc2lsb247XG5cbiAgICAgIGlmICghc2NhbGFyRXhwb3VuZGVkKSB7XG4gICAgICAgIG11ID0gc3BxY2RzWzBdLm11O1xuICAgICAgICBlcHNpbG9uID0gc3BxY2RzWzBdLmVwc2lsb24gKyAoaSA+IDAgPyAxIC0gaSA6IDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXUgPSBzcHFjZHNbYl0ubXU7XG4gICAgICAgIGVwc2lsb24gPSBzcHFjZHNbYl0uZXBzaWxvbjtcbiAgICAgICAgYisrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdWJiYW5kID0gcmVzb2x1dGlvbi5zdWJiYW5kc1tqXTtcbiAgICAgIGNvbnN0IGdhaW5Mb2cyID0gU3ViYmFuZHNHYWluTG9nMltzdWJiYW5kLnR5cGVdO1xuICAgICAgY29uc3QgZGVsdGEgPSByZXZlcnNpYmxlID8gMSA6IDIgKiogKHByZWNpc2lvbiArIGdhaW5Mb2cyIC0gZXBzaWxvbikgKiAoMSArIG11IC8gMjA0OCk7XG4gICAgICBjb25zdCBtYiA9IGd1YXJkQml0cyArIGVwc2lsb24gLSAxO1xuICAgICAgY29weUNvZWZmaWNpZW50cyhjb2VmZmljaWVudHMsIHdpZHRoLCBoZWlnaHQsIHN1YmJhbmQsIGRlbHRhLCBtYiwgcmV2ZXJzaWJsZSwgc2VnbWVudGF0aW9uU3ltYm9sVXNlZCk7XG4gICAgfVxuXG4gICAgc3ViYmFuZENvZWZmaWNpZW50cy5wdXNoKHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgaXRlbXM6IGNvZWZmaWNpZW50c1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gdHJhbnNmb3JtLmNhbGN1bGF0ZShzdWJiYW5kQ29lZmZpY2llbnRzLCBjb21wb25lbnQudGN4MCwgY29tcG9uZW50LnRjeTApO1xuICByZXR1cm4ge1xuICAgIGxlZnQ6IGNvbXBvbmVudC50Y3gwLFxuICAgIHRvcDogY29tcG9uZW50LnRjeTAsXG4gICAgd2lkdGg6IHJlc3VsdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlc3VsdC5oZWlnaHQsXG4gICAgaXRlbXM6IHJlc3VsdC5pdGVtc1xuICB9O1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Db21wb25lbnRzKGNvbnRleHQpIHtcbiAgY29uc3Qgc2l6ID0gY29udGV4dC5TSVo7XG4gIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNvbXBvbmVudHM7XG4gIGNvbnN0IGNvbXBvbmVudHNDb3VudCA9IHNpei5Dc2l6O1xuICBjb25zdCByZXN1bHRJbWFnZXMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMCwgaWkgPSBjb250ZXh0LnRpbGVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICBjb25zdCB0aWxlID0gY29udGV4dC50aWxlc1tpXTtcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFRpbGVzID0gW107XG5cbiAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNvbXBvbmVudHNDb3VudDsgYysrKSB7XG4gICAgICB0cmFuc2Zvcm1lZFRpbGVzW2NdID0gdHJhbnNmb3JtVGlsZShjb250ZXh0LCB0aWxlLCBjKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aWxlMCA9IHRyYW5zZm9ybWVkVGlsZXNbMF07XG4gICAgY29uc3Qgb3V0ID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHRpbGUwLml0ZW1zLmxlbmd0aCAqIGNvbXBvbmVudHNDb3VudCk7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgbGVmdDogdGlsZTAubGVmdCxcbiAgICAgIHRvcDogdGlsZTAudG9wLFxuICAgICAgd2lkdGg6IHRpbGUwLndpZHRoLFxuICAgICAgaGVpZ2h0OiB0aWxlMC5oZWlnaHQsXG4gICAgICBpdGVtczogb3V0XG4gICAgfTtcbiAgICBsZXQgc2hpZnQsIG9mZnNldDtcbiAgICBsZXQgcG9zID0gMCxcbiAgICAgICAgaixcbiAgICAgICAgamosXG4gICAgICAgIHkwLFxuICAgICAgICB5MSxcbiAgICAgICAgeTI7XG5cbiAgICBpZiAodGlsZS5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLm11bHRpcGxlQ29tcG9uZW50VHJhbnNmb3JtKSB7XG4gICAgICBjb25zdCBmb3VyQ29tcG9uZW50cyA9IGNvbXBvbmVudHNDb3VudCA9PT0gNDtcbiAgICAgIGNvbnN0IHkwaXRlbXMgPSB0cmFuc2Zvcm1lZFRpbGVzWzBdLml0ZW1zO1xuICAgICAgY29uc3QgeTFpdGVtcyA9IHRyYW5zZm9ybWVkVGlsZXNbMV0uaXRlbXM7XG4gICAgICBjb25zdCB5Mml0ZW1zID0gdHJhbnNmb3JtZWRUaWxlc1syXS5pdGVtcztcbiAgICAgIGNvbnN0IHkzaXRlbXMgPSBmb3VyQ29tcG9uZW50cyA/IHRyYW5zZm9ybWVkVGlsZXNbM10uaXRlbXMgOiBudWxsO1xuICAgICAgc2hpZnQgPSBjb21wb25lbnRzWzBdLnByZWNpc2lvbiAtIDg7XG4gICAgICBvZmZzZXQgPSAoMTI4IDw8IHNoaWZ0KSArIDAuNTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudDAgPSB0aWxlLmNvbXBvbmVudHNbMF07XG4gICAgICBjb25zdCBhbHBoYTAxID0gY29tcG9uZW50c0NvdW50IC0gMztcbiAgICAgIGpqID0geTBpdGVtcy5sZW5ndGg7XG5cbiAgICAgIGlmICghY29tcG9uZW50MC5jb2RpbmdTdHlsZVBhcmFtZXRlcnMucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uKSB7XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBqajsgaisrLCBwb3MgKz0gYWxwaGEwMSkge1xuICAgICAgICAgIHkwID0geTBpdGVtc1tqXSArIG9mZnNldDtcbiAgICAgICAgICB5MSA9IHkxaXRlbXNbal07XG4gICAgICAgICAgeTIgPSB5Mml0ZW1zW2pdO1xuICAgICAgICAgIG91dFtwb3MrK10gPSB5MCArIDEuNDAyICogeTIgPj4gc2hpZnQ7XG4gICAgICAgICAgb3V0W3BvcysrXSA9IHkwIC0gMC4zNDQxMyAqIHkxIC0gMC43MTQxNCAqIHkyID4+IHNoaWZ0O1xuICAgICAgICAgIG91dFtwb3MrK10gPSB5MCArIDEuNzcyICogeTEgPj4gc2hpZnQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBqajsgaisrLCBwb3MgKz0gYWxwaGEwMSkge1xuICAgICAgICAgIHkwID0geTBpdGVtc1tqXSArIG9mZnNldDtcbiAgICAgICAgICB5MSA9IHkxaXRlbXNbal07XG4gICAgICAgICAgeTIgPSB5Mml0ZW1zW2pdO1xuICAgICAgICAgIGNvbnN0IGcgPSB5MCAtICh5MiArIHkxID4+IDIpO1xuICAgICAgICAgIG91dFtwb3MrK10gPSBnICsgeTIgPj4gc2hpZnQ7XG4gICAgICAgICAgb3V0W3BvcysrXSA9IGcgPj4gc2hpZnQ7XG4gICAgICAgICAgb3V0W3BvcysrXSA9IGcgKyB5MSA+PiBzaGlmdDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZm91ckNvbXBvbmVudHMpIHtcbiAgICAgICAgZm9yIChqID0gMCwgcG9zID0gMzsgaiA8IGpqOyBqKyssIHBvcyArPSA0KSB7XG4gICAgICAgICAgb3V0W3Bvc10gPSB5M2l0ZW1zW2pdICsgb2Zmc2V0ID4+IHNoaWZ0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY29tcG9uZW50c0NvdW50OyBjKyspIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0cmFuc2Zvcm1lZFRpbGVzW2NdLml0ZW1zO1xuICAgICAgICBzaGlmdCA9IGNvbXBvbmVudHNbY10ucHJlY2lzaW9uIC0gODtcbiAgICAgICAgb2Zmc2V0ID0gKDEyOCA8PCBzaGlmdCkgKyAwLjU7XG5cbiAgICAgICAgZm9yIChwb3MgPSBjLCBqID0gMCwgamogPSBpdGVtcy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgb3V0W3Bvc10gPSBpdGVtc1tqXSArIG9mZnNldCA+PiBzaGlmdDtcbiAgICAgICAgICBwb3MgKz0gY29tcG9uZW50c0NvdW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzdWx0SW1hZ2VzLnB1c2gocmVzdWx0KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRJbWFnZXM7XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpemVUaWxlKGNvbnRleHQsIHRpbGVJbmRleCkge1xuICBjb25zdCBzaXogPSBjb250ZXh0LlNJWjtcbiAgY29uc3QgY29tcG9uZW50c0NvdW50ID0gc2l6LkNzaXo7XG4gIGNvbnN0IHRpbGUgPSBjb250ZXh0LnRpbGVzW3RpbGVJbmRleF07XG5cbiAgZm9yIChsZXQgYyA9IDA7IGMgPCBjb21wb25lbnRzQ291bnQ7IGMrKykge1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IHRpbGUuY29tcG9uZW50c1tjXTtcbiAgICBjb25zdCBxY2RPclFjYyA9IGNvbnRleHQuY3VycmVudFRpbGUuUUNDW2NdICE9PSB1bmRlZmluZWQgPyBjb250ZXh0LmN1cnJlbnRUaWxlLlFDQ1tjXSA6IGNvbnRleHQuY3VycmVudFRpbGUuUUNEO1xuICAgIGNvbXBvbmVudC5xdWFudGl6YXRpb25QYXJhbWV0ZXJzID0gcWNkT3JRY2M7XG4gICAgY29uc3QgY29kT3JDb2MgPSBjb250ZXh0LmN1cnJlbnRUaWxlLkNPQ1tjXSAhPT0gdW5kZWZpbmVkID8gY29udGV4dC5jdXJyZW50VGlsZS5DT0NbY10gOiBjb250ZXh0LmN1cnJlbnRUaWxlLkNPRDtcbiAgICBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzID0gY29kT3JDb2M7XG4gIH1cblxuICB0aWxlLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMgPSBjb250ZXh0LmN1cnJlbnRUaWxlLkNPRDtcbn1cblxuY2xhc3MgVGFnVHJlZSB7XG4gIGNvbnN0cnVjdG9yKHdpZHRoLCBoZWlnaHQpIHtcbiAgICBjb25zdCBsZXZlbHNMZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMubG9nMikoTWF0aC5tYXgod2lkdGgsIGhlaWdodCkpICsgMTtcbiAgICB0aGlzLmxldmVscyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZXZlbHNMZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbGV2ZWwgPSB7XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGl0ZW1zOiBbXVxuICAgICAgfTtcbiAgICAgIHRoaXMubGV2ZWxzLnB1c2gobGV2ZWwpO1xuICAgICAgd2lkdGggPSBNYXRoLmNlaWwod2lkdGggLyAyKTtcbiAgICAgIGhlaWdodCA9IE1hdGguY2VpbChoZWlnaHQgLyAyKTtcbiAgICB9XG4gIH1cblxuICByZXNldChpLCBqKSB7XG4gICAgbGV0IGN1cnJlbnRMZXZlbCA9IDAsXG4gICAgICAgIHZhbHVlID0gMCxcbiAgICAgICAgbGV2ZWw7XG5cbiAgICB3aGlsZSAoY3VycmVudExldmVsIDwgdGhpcy5sZXZlbHMubGVuZ3RoKSB7XG4gICAgICBsZXZlbCA9IHRoaXMubGV2ZWxzW2N1cnJlbnRMZXZlbF07XG4gICAgICBjb25zdCBpbmRleCA9IGkgKyBqICogbGV2ZWwud2lkdGg7XG5cbiAgICAgIGlmIChsZXZlbC5pdGVtc1tpbmRleF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZSA9IGxldmVsLml0ZW1zW2luZGV4XTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGxldmVsLmluZGV4ID0gaW5kZXg7XG4gICAgICBpID4+PSAxO1xuICAgICAgaiA+Pj0gMTtcbiAgICAgIGN1cnJlbnRMZXZlbCsrO1xuICAgIH1cblxuICAgIGN1cnJlbnRMZXZlbC0tO1xuICAgIGxldmVsID0gdGhpcy5sZXZlbHNbY3VycmVudExldmVsXTtcbiAgICBsZXZlbC5pdGVtc1tsZXZlbC5pbmRleF0gPSB2YWx1ZTtcbiAgICB0aGlzLmN1cnJlbnRMZXZlbCA9IGN1cnJlbnRMZXZlbDtcbiAgICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgfVxuXG4gIGluY3JlbWVudFZhbHVlKCkge1xuICAgIGNvbnN0IGxldmVsID0gdGhpcy5sZXZlbHNbdGhpcy5jdXJyZW50TGV2ZWxdO1xuICAgIGxldmVsLml0ZW1zW2xldmVsLmluZGV4XSsrO1xuICB9XG5cbiAgbmV4dExldmVsKCkge1xuICAgIGxldCBjdXJyZW50TGV2ZWwgPSB0aGlzLmN1cnJlbnRMZXZlbDtcbiAgICBsZXQgbGV2ZWwgPSB0aGlzLmxldmVsc1tjdXJyZW50TGV2ZWxdO1xuICAgIGNvbnN0IHZhbHVlID0gbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdO1xuICAgIGN1cnJlbnRMZXZlbC0tO1xuXG4gICAgaWYgKGN1cnJlbnRMZXZlbCA8IDApIHtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRMZXZlbCA9IGN1cnJlbnRMZXZlbDtcbiAgICBsZXZlbCA9IHRoaXMubGV2ZWxzW2N1cnJlbnRMZXZlbF07XG4gICAgbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdID0gdmFsdWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxufVxuXG5jbGFzcyBJbmNsdXNpb25UcmVlIHtcbiAgY29uc3RydWN0b3Iod2lkdGgsIGhlaWdodCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgY29uc3QgbGV2ZWxzTGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLmxvZzIpKE1hdGgubWF4KHdpZHRoLCBoZWlnaHQpKSArIDE7XG4gICAgdGhpcy5sZXZlbHMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGV2ZWxzTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gbmV3IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICBmb3IgKGxldCBqID0gMCwgamogPSBpdGVtcy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgIGl0ZW1zW2pdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsZXZlbCA9IHtcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgaXRlbXNcbiAgICAgIH07XG4gICAgICB0aGlzLmxldmVscy5wdXNoKGxldmVsKTtcbiAgICAgIHdpZHRoID0gTWF0aC5jZWlsKHdpZHRoIC8gMik7XG4gICAgICBoZWlnaHQgPSBNYXRoLmNlaWwoaGVpZ2h0IC8gMik7XG4gICAgfVxuICB9XG5cbiAgcmVzZXQoaSwgaiwgc3RvcFZhbHVlKSB7XG4gICAgbGV0IGN1cnJlbnRMZXZlbCA9IDA7XG5cbiAgICB3aGlsZSAoY3VycmVudExldmVsIDwgdGhpcy5sZXZlbHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBsZXZlbCA9IHRoaXMubGV2ZWxzW2N1cnJlbnRMZXZlbF07XG4gICAgICBjb25zdCBpbmRleCA9IGkgKyBqICogbGV2ZWwud2lkdGg7XG4gICAgICBsZXZlbC5pbmRleCA9IGluZGV4O1xuICAgICAgY29uc3QgdmFsdWUgPSBsZXZlbC5pdGVtc1tpbmRleF07XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gMHhmZikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlID4gc3RvcFZhbHVlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudExldmVsID0gY3VycmVudExldmVsO1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZVZhbHVlcygpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGkgPj49IDE7XG4gICAgICBqID4+PSAxO1xuICAgICAgY3VycmVudExldmVsKys7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50TGV2ZWwgPSBjdXJyZW50TGV2ZWwgLSAxO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaW5jcmVtZW50VmFsdWUoc3RvcFZhbHVlKSB7XG4gICAgY29uc3QgbGV2ZWwgPSB0aGlzLmxldmVsc1t0aGlzLmN1cnJlbnRMZXZlbF07XG4gICAgbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdID0gc3RvcFZhbHVlICsgMTtcbiAgICB0aGlzLnByb3BhZ2F0ZVZhbHVlcygpO1xuICB9XG5cbiAgcHJvcGFnYXRlVmFsdWVzKCkge1xuICAgIGxldCBsZXZlbEluZGV4ID0gdGhpcy5jdXJyZW50TGV2ZWw7XG4gICAgbGV0IGxldmVsID0gdGhpcy5sZXZlbHNbbGV2ZWxJbmRleF07XG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdO1xuXG4gICAgd2hpbGUgKC0tbGV2ZWxJbmRleCA+PSAwKSB7XG4gICAgICBsZXZlbCA9IHRoaXMubGV2ZWxzW2xldmVsSW5kZXhdO1xuICAgICAgbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdID0gY3VycmVudFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIG5leHRMZXZlbCgpIHtcbiAgICBsZXQgY3VycmVudExldmVsID0gdGhpcy5jdXJyZW50TGV2ZWw7XG4gICAgbGV0IGxldmVsID0gdGhpcy5sZXZlbHNbY3VycmVudExldmVsXTtcbiAgICBjb25zdCB2YWx1ZSA9IGxldmVsLml0ZW1zW2xldmVsLmluZGV4XTtcbiAgICBsZXZlbC5pdGVtc1tsZXZlbC5pbmRleF0gPSAweGZmO1xuICAgIGN1cnJlbnRMZXZlbC0tO1xuXG4gICAgaWYgKGN1cnJlbnRMZXZlbCA8IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRMZXZlbCA9IGN1cnJlbnRMZXZlbDtcbiAgICBsZXZlbCA9IHRoaXMubGV2ZWxzW2N1cnJlbnRMZXZlbF07XG4gICAgbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdID0gdmFsdWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxufVxuXG5jb25zdCBCaXRNb2RlbCA9IGZ1bmN0aW9uIEJpdE1vZGVsQ2xvc3VyZSgpIHtcbiAgY29uc3QgVU5JRk9STV9DT05URVhUID0gMTc7XG4gIGNvbnN0IFJVTkxFTkdUSF9DT05URVhUID0gMTg7XG4gIGNvbnN0IExMQW5kTEhDb250ZXh0c0xhYmVsID0gbmV3IFVpbnQ4QXJyYXkoWzAsIDUsIDgsIDAsIDMsIDcsIDgsIDAsIDQsIDcsIDgsIDAsIDAsIDAsIDAsIDAsIDEsIDYsIDgsIDAsIDMsIDcsIDgsIDAsIDQsIDcsIDgsIDAsIDAsIDAsIDAsIDAsIDIsIDYsIDgsIDAsIDMsIDcsIDgsIDAsIDQsIDcsIDgsIDAsIDAsIDAsIDAsIDAsIDIsIDYsIDgsIDAsIDMsIDcsIDgsIDAsIDQsIDcsIDgsIDAsIDAsIDAsIDAsIDAsIDIsIDYsIDgsIDAsIDMsIDcsIDgsIDAsIDQsIDcsIDhdKTtcbiAgY29uc3QgSExDb250ZXh0TGFiZWwgPSBuZXcgVWludDhBcnJheShbMCwgMywgNCwgMCwgNSwgNywgNywgMCwgOCwgOCwgOCwgMCwgMCwgMCwgMCwgMCwgMSwgMywgNCwgMCwgNiwgNywgNywgMCwgOCwgOCwgOCwgMCwgMCwgMCwgMCwgMCwgMiwgMywgNCwgMCwgNiwgNywgNywgMCwgOCwgOCwgOCwgMCwgMCwgMCwgMCwgMCwgMiwgMywgNCwgMCwgNiwgNywgNywgMCwgOCwgOCwgOCwgMCwgMCwgMCwgMCwgMCwgMiwgMywgNCwgMCwgNiwgNywgNywgMCwgOCwgOCwgOF0pO1xuICBjb25zdCBISENvbnRleHRMYWJlbCA9IG5ldyBVaW50OEFycmF5KFswLCAxLCAyLCAwLCAxLCAyLCAyLCAwLCAyLCAyLCAyLCAwLCAwLCAwLCAwLCAwLCAzLCA0LCA1LCAwLCA0LCA1LCA1LCAwLCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCA2LCA3LCA3LCAwLCA3LCA3LCA3LCAwLCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCA4LCA4LCA4LCAwLCA4LCA4LCA4LCAwLCA4LCA4LCA4LCAwLCAwLCAwLCAwLCAwLCA4LCA4LCA4LCAwLCA4LCA4LCA4LCAwLCA4LCA4LCA4XSk7XG5cbiAgY2xhc3MgQml0TW9kZWwge1xuICAgIGNvbnN0cnVjdG9yKHdpZHRoLCBoZWlnaHQsIHN1YmJhbmQsIHplcm9CaXRQbGFuZXMsIG1iKSB7XG4gICAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgIGxldCBjb250ZXh0TGFiZWxUYWJsZTtcblxuICAgICAgaWYgKHN1YmJhbmQgPT09IFwiSEhcIikge1xuICAgICAgICBjb250ZXh0TGFiZWxUYWJsZSA9IEhIQ29udGV4dExhYmVsO1xuICAgICAgfSBlbHNlIGlmIChzdWJiYW5kID09PSBcIkhMXCIpIHtcbiAgICAgICAgY29udGV4dExhYmVsVGFibGUgPSBITENvbnRleHRMYWJlbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHRMYWJlbFRhYmxlID0gTExBbmRMSENvbnRleHRzTGFiZWw7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29udGV4dExhYmVsVGFibGUgPSBjb250ZXh0TGFiZWxUYWJsZTtcbiAgICAgIGNvbnN0IGNvZWZmaWNpZW50Q291bnQgPSB3aWR0aCAqIGhlaWdodDtcbiAgICAgIHRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlID0gbmV3IFVpbnQ4QXJyYXkoY29lZmZpY2llbnRDb3VudCk7XG4gICAgICB0aGlzLmNvZWZmaWNlbnRzU2lnbiA9IG5ldyBVaW50OEFycmF5KGNvZWZmaWNpZW50Q291bnQpO1xuICAgICAgbGV0IGNvZWZmaWNlbnRzTWFnbml0dWRlO1xuXG4gICAgICBpZiAobWIgPiAxNCkge1xuICAgICAgICBjb2VmZmljZW50c01hZ25pdHVkZSA9IG5ldyBVaW50MzJBcnJheShjb2VmZmljaWVudENvdW50KTtcbiAgICAgIH0gZWxzZSBpZiAobWIgPiA2KSB7XG4gICAgICAgIGNvZWZmaWNlbnRzTWFnbml0dWRlID0gbmV3IFVpbnQxNkFycmF5KGNvZWZmaWNpZW50Q291bnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29lZmZpY2VudHNNYWduaXR1ZGUgPSBuZXcgVWludDhBcnJheShjb2VmZmljaWVudENvdW50KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jb2VmZmljZW50c01hZ25pdHVkZSA9IGNvZWZmaWNlbnRzTWFnbml0dWRlO1xuICAgICAgdGhpcy5wcm9jZXNzaW5nRmxhZ3MgPSBuZXcgVWludDhBcnJheShjb2VmZmljaWVudENvdW50KTtcbiAgICAgIGNvbnN0IGJpdHNEZWNvZGVkID0gbmV3IFVpbnQ4QXJyYXkoY29lZmZpY2llbnRDb3VudCk7XG5cbiAgICAgIGlmICh6ZXJvQml0UGxhbmVzICE9PSAwKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29lZmZpY2llbnRDb3VudDsgaSsrKSB7XG4gICAgICAgICAgYml0c0RlY29kZWRbaV0gPSB6ZXJvQml0UGxhbmVzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYml0c0RlY29kZWQgPSBiaXRzRGVjb2RlZDtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICBzZXREZWNvZGVyKGRlY29kZXIpIHtcbiAgICAgIHRoaXMuZGVjb2RlciA9IGRlY29kZXI7XG4gICAgfVxuXG4gICAgcmVzZXQoKSB7XG4gICAgICB0aGlzLmNvbnRleHRzID0gbmV3IEludDhBcnJheSgxOSk7XG4gICAgICB0aGlzLmNvbnRleHRzWzBdID0gNCA8PCAxIHwgMDtcbiAgICAgIHRoaXMuY29udGV4dHNbVU5JRk9STV9DT05URVhUXSA9IDQ2IDw8IDEgfCAwO1xuICAgICAgdGhpcy5jb250ZXh0c1tSVU5MRU5HVEhfQ09OVEVYVF0gPSAzIDw8IDEgfCAwO1xuICAgIH1cblxuICAgIHNldE5laWdoYm9yc1NpZ25pZmljYW5jZShyb3csIGNvbHVtbiwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IG5laWdoYm9yc1NpZ25pZmljYW5jZSA9IHRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlO1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgICBjb25zdCBsZWZ0ID0gY29sdW1uID4gMDtcbiAgICAgIGNvbnN0IHJpZ2h0ID0gY29sdW1uICsgMSA8IHdpZHRoO1xuICAgICAgbGV0IGk7XG5cbiAgICAgIGlmIChyb3cgPiAwKSB7XG4gICAgICAgIGkgPSBpbmRleCAtIHdpZHRoO1xuXG4gICAgICAgIGlmIChsZWZ0KSB7XG4gICAgICAgICAgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2kgLSAxXSArPSAweDEwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJpZ2h0KSB7XG4gICAgICAgICAgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2kgKyAxXSArPSAweDEwO1xuICAgICAgICB9XG5cbiAgICAgICAgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2ldICs9IDB4MDQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChyb3cgKyAxIDwgaGVpZ2h0KSB7XG4gICAgICAgIGkgPSBpbmRleCArIHdpZHRoO1xuXG4gICAgICAgIGlmIChsZWZ0KSB7XG4gICAgICAgICAgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2kgLSAxXSArPSAweDEwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJpZ2h0KSB7XG4gICAgICAgICAgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2kgKyAxXSArPSAweDEwO1xuICAgICAgICB9XG5cbiAgICAgICAgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2ldICs9IDB4MDQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChsZWZ0KSB7XG4gICAgICAgIG5laWdoYm9yc1NpZ25pZmljYW5jZVtpbmRleCAtIDFdICs9IDB4MDE7XG4gICAgICB9XG5cbiAgICAgIGlmIChyaWdodCkge1xuICAgICAgICBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaW5kZXggKyAxXSArPSAweDAxO1xuICAgICAgfVxuXG4gICAgICBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaW5kZXhdIHw9IDB4ODA7XG4gICAgfVxuXG4gICAgcnVuU2lnbmlmaWNhbmNlUHJvcGFnYXRpb25QYXNzKCkge1xuICAgICAgY29uc3QgZGVjb2RlciA9IHRoaXMuZGVjb2RlcjtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgY29uc3QgY29lZmZpY2VudHNNYWduaXR1ZGUgPSB0aGlzLmNvZWZmaWNlbnRzTWFnbml0dWRlO1xuICAgICAgY29uc3QgY29lZmZpY2VudHNTaWduID0gdGhpcy5jb2VmZmljZW50c1NpZ247XG4gICAgICBjb25zdCBuZWlnaGJvcnNTaWduaWZpY2FuY2UgPSB0aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZTtcbiAgICAgIGNvbnN0IHByb2Nlc3NpbmdGbGFncyA9IHRoaXMucHJvY2Vzc2luZ0ZsYWdzO1xuICAgICAgY29uc3QgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgY29uc3QgbGFiZWxzID0gdGhpcy5jb250ZXh0TGFiZWxUYWJsZTtcbiAgICAgIGNvbnN0IGJpdHNEZWNvZGVkID0gdGhpcy5iaXRzRGVjb2RlZDtcbiAgICAgIGNvbnN0IHByb2Nlc3NlZEludmVyc2VNYXNrID0gfjE7XG4gICAgICBjb25zdCBwcm9jZXNzZWRNYXNrID0gMTtcbiAgICAgIGNvbnN0IGZpcnN0TWFnbml0dWRlQml0TWFzayA9IDI7XG5cbiAgICAgIGZvciAobGV0IGkwID0gMDsgaTAgPCBoZWlnaHQ7IGkwICs9IDQpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7XG4gICAgICAgICAgbGV0IGluZGV4ID0gaTAgKiB3aWR0aCArIGo7XG5cbiAgICAgICAgICBmb3IgKGxldCBpMSA9IDA7IGkxIDwgNDsgaTErKywgaW5kZXggKz0gd2lkdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGkgPSBpMCArIGkxO1xuXG4gICAgICAgICAgICBpZiAoaSA+PSBoZWlnaHQpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gJj0gcHJvY2Vzc2VkSW52ZXJzZU1hc2s7XG5cbiAgICAgICAgICAgIGlmIChjb2VmZmljZW50c01hZ25pdHVkZVtpbmRleF0gfHwgIW5laWdoYm9yc1NpZ25pZmljYW5jZVtpbmRleF0pIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHRMYWJlbCA9IGxhYmVsc1tuZWlnaGJvcnNTaWduaWZpY2FuY2VbaW5kZXhdXTtcbiAgICAgICAgICAgIGNvbnN0IGRlY2lzaW9uID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBjb250ZXh0TGFiZWwpO1xuXG4gICAgICAgICAgICBpZiAoZGVjaXNpb24pIHtcbiAgICAgICAgICAgICAgY29uc3Qgc2lnbiA9IHRoaXMuZGVjb2RlU2lnbkJpdChpLCBqLCBpbmRleCk7XG4gICAgICAgICAgICAgIGNvZWZmaWNlbnRzU2lnbltpbmRleF0gPSBzaWduO1xuICAgICAgICAgICAgICBjb2VmZmljZW50c01hZ25pdHVkZVtpbmRleF0gPSAxO1xuICAgICAgICAgICAgICB0aGlzLnNldE5laWdoYm9yc1NpZ25pZmljYW5jZShpLCBqLCBpbmRleCk7XG4gICAgICAgICAgICAgIHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gfD0gZmlyc3RNYWduaXR1ZGVCaXRNYXNrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBiaXRzRGVjb2RlZFtpbmRleF0rKztcbiAgICAgICAgICAgIHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gfD0gcHJvY2Vzc2VkTWFzaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBkZWNvZGVTaWduQml0KHJvdywgY29sdW1uLCBpbmRleCkge1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgICBjb25zdCBjb2VmZmljZW50c01hZ25pdHVkZSA9IHRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGU7XG4gICAgICBjb25zdCBjb2VmZmljZW50c1NpZ24gPSB0aGlzLmNvZWZmaWNlbnRzU2lnbjtcbiAgICAgIGxldCBjb250cmlidXRpb24sIHNpZ24wLCBzaWduMSwgc2lnbmlmaWNhbmNlMTtcbiAgICAgIGxldCBjb250ZXh0TGFiZWwsIGRlY29kZWQ7XG4gICAgICBzaWduaWZpY2FuY2UxID0gY29sdW1uID4gMCAmJiBjb2VmZmljZW50c01hZ25pdHVkZVtpbmRleCAtIDFdICE9PSAwO1xuXG4gICAgICBpZiAoY29sdW1uICsgMSA8IHdpZHRoICYmIGNvZWZmaWNlbnRzTWFnbml0dWRlW2luZGV4ICsgMV0gIT09IDApIHtcbiAgICAgICAgc2lnbjEgPSBjb2VmZmljZW50c1NpZ25baW5kZXggKyAxXTtcblxuICAgICAgICBpZiAoc2lnbmlmaWNhbmNlMSkge1xuICAgICAgICAgIHNpZ24wID0gY29lZmZpY2VudHNTaWduW2luZGV4IC0gMV07XG4gICAgICAgICAgY29udHJpYnV0aW9uID0gMSAtIHNpZ24xIC0gc2lnbjA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udHJpYnV0aW9uID0gMSAtIHNpZ24xIC0gc2lnbjE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc2lnbmlmaWNhbmNlMSkge1xuICAgICAgICBzaWduMCA9IGNvZWZmaWNlbnRzU2lnbltpbmRleCAtIDFdO1xuICAgICAgICBjb250cmlidXRpb24gPSAxIC0gc2lnbjAgLSBzaWduMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRyaWJ1dGlvbiA9IDA7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhvcml6b250YWxDb250cmlidXRpb24gPSAzICogY29udHJpYnV0aW9uO1xuICAgICAgc2lnbmlmaWNhbmNlMSA9IHJvdyA+IDAgJiYgY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXggLSB3aWR0aF0gIT09IDA7XG5cbiAgICAgIGlmIChyb3cgKyAxIDwgaGVpZ2h0ICYmIGNvZWZmaWNlbnRzTWFnbml0dWRlW2luZGV4ICsgd2lkdGhdICE9PSAwKSB7XG4gICAgICAgIHNpZ24xID0gY29lZmZpY2VudHNTaWduW2luZGV4ICsgd2lkdGhdO1xuXG4gICAgICAgIGlmIChzaWduaWZpY2FuY2UxKSB7XG4gICAgICAgICAgc2lnbjAgPSBjb2VmZmljZW50c1NpZ25baW5kZXggLSB3aWR0aF07XG4gICAgICAgICAgY29udHJpYnV0aW9uID0gMSAtIHNpZ24xIC0gc2lnbjAgKyBob3Jpem9udGFsQ29udHJpYnV0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRyaWJ1dGlvbiA9IDEgLSBzaWduMSAtIHNpZ24xICsgaG9yaXpvbnRhbENvbnRyaWJ1dGlvbjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzaWduaWZpY2FuY2UxKSB7XG4gICAgICAgIHNpZ24wID0gY29lZmZpY2VudHNTaWduW2luZGV4IC0gd2lkdGhdO1xuICAgICAgICBjb250cmlidXRpb24gPSAxIC0gc2lnbjAgLSBzaWduMCArIGhvcml6b250YWxDb250cmlidXRpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250cmlidXRpb24gPSBob3Jpem9udGFsQ29udHJpYnV0aW9uO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29udHJpYnV0aW9uID49IDApIHtcbiAgICAgICAgY29udGV4dExhYmVsID0gOSArIGNvbnRyaWJ1dGlvbjtcbiAgICAgICAgZGVjb2RlZCA9IHRoaXMuZGVjb2Rlci5yZWFkQml0KHRoaXMuY29udGV4dHMsIGNvbnRleHRMYWJlbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0TGFiZWwgPSA5IC0gY29udHJpYnV0aW9uO1xuICAgICAgICBkZWNvZGVkID0gdGhpcy5kZWNvZGVyLnJlYWRCaXQodGhpcy5jb250ZXh0cywgY29udGV4dExhYmVsKSBeIDE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZWNvZGVkO1xuICAgIH1cblxuICAgIHJ1bk1hZ25pdHVkZVJlZmluZW1lbnRQYXNzKCkge1xuICAgICAgY29uc3QgZGVjb2RlciA9IHRoaXMuZGVjb2RlcjtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgY29uc3QgY29lZmZpY2VudHNNYWduaXR1ZGUgPSB0aGlzLmNvZWZmaWNlbnRzTWFnbml0dWRlO1xuICAgICAgY29uc3QgbmVpZ2hib3JzU2lnbmlmaWNhbmNlID0gdGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2U7XG4gICAgICBjb25zdCBjb250ZXh0cyA9IHRoaXMuY29udGV4dHM7XG4gICAgICBjb25zdCBiaXRzRGVjb2RlZCA9IHRoaXMuYml0c0RlY29kZWQ7XG4gICAgICBjb25zdCBwcm9jZXNzaW5nRmxhZ3MgPSB0aGlzLnByb2Nlc3NpbmdGbGFncztcbiAgICAgIGNvbnN0IHByb2Nlc3NlZE1hc2sgPSAxO1xuICAgICAgY29uc3QgZmlyc3RNYWduaXR1ZGVCaXRNYXNrID0gMjtcbiAgICAgIGNvbnN0IGxlbmd0aCA9IHdpZHRoICogaGVpZ2h0O1xuICAgICAgY29uc3Qgd2lkdGg0ID0gd2lkdGggKiA0O1xuXG4gICAgICBmb3IgKGxldCBpbmRleDAgPSAwLCBpbmRleE5leHQ7IGluZGV4MCA8IGxlbmd0aDsgaW5kZXgwID0gaW5kZXhOZXh0KSB7XG4gICAgICAgIGluZGV4TmV4dCA9IE1hdGgubWluKGxlbmd0aCwgaW5kZXgwICsgd2lkdGg0KTtcblxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IGluZGV4MCArIGo7IGluZGV4IDwgaW5kZXhOZXh0OyBpbmRleCArPSB3aWR0aCkge1xuICAgICAgICAgICAgaWYgKCFjb2VmZmljZW50c01hZ25pdHVkZVtpbmRleF0gfHwgKHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gJiBwcm9jZXNzZWRNYXNrKSAhPT0gMCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGNvbnRleHRMYWJlbCA9IDE2O1xuXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gJiBmaXJzdE1hZ25pdHVkZUJpdE1hc2spICE9PSAwKSB7XG4gICAgICAgICAgICAgIHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gXj0gZmlyc3RNYWduaXR1ZGVCaXRNYXNrO1xuICAgICAgICAgICAgICBjb25zdCBzaWduaWZpY2FuY2UgPSBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaW5kZXhdICYgMTI3O1xuICAgICAgICAgICAgICBjb250ZXh0TGFiZWwgPSBzaWduaWZpY2FuY2UgPT09IDAgPyAxNSA6IDE0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBiaXQgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIGNvbnRleHRMYWJlbCk7XG4gICAgICAgICAgICBjb2VmZmljZW50c01hZ25pdHVkZVtpbmRleF0gPSBjb2VmZmljZW50c01hZ25pdHVkZVtpbmRleF0gPDwgMSB8IGJpdDtcbiAgICAgICAgICAgIGJpdHNEZWNvZGVkW2luZGV4XSsrO1xuICAgICAgICAgICAgcHJvY2Vzc2luZ0ZsYWdzW2luZGV4XSB8PSBwcm9jZXNzZWRNYXNrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJ1bkNsZWFudXBQYXNzKCkge1xuICAgICAgY29uc3QgZGVjb2RlciA9IHRoaXMuZGVjb2RlcjtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgY29uc3QgbmVpZ2hib3JzU2lnbmlmaWNhbmNlID0gdGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2U7XG4gICAgICBjb25zdCBjb2VmZmljZW50c01hZ25pdHVkZSA9IHRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGU7XG4gICAgICBjb25zdCBjb2VmZmljZW50c1NpZ24gPSB0aGlzLmNvZWZmaWNlbnRzU2lnbjtcbiAgICAgIGNvbnN0IGNvbnRleHRzID0gdGhpcy5jb250ZXh0cztcbiAgICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuY29udGV4dExhYmVsVGFibGU7XG4gICAgICBjb25zdCBiaXRzRGVjb2RlZCA9IHRoaXMuYml0c0RlY29kZWQ7XG4gICAgICBjb25zdCBwcm9jZXNzaW5nRmxhZ3MgPSB0aGlzLnByb2Nlc3NpbmdGbGFncztcbiAgICAgIGNvbnN0IHByb2Nlc3NlZE1hc2sgPSAxO1xuICAgICAgY29uc3QgZmlyc3RNYWduaXR1ZGVCaXRNYXNrID0gMjtcbiAgICAgIGNvbnN0IG9uZVJvd0Rvd24gPSB3aWR0aDtcbiAgICAgIGNvbnN0IHR3b1Jvd3NEb3duID0gd2lkdGggKiAyO1xuICAgICAgY29uc3QgdGhyZWVSb3dzRG93biA9IHdpZHRoICogMztcbiAgICAgIGxldCBpTmV4dDtcblxuICAgICAgZm9yIChsZXQgaTAgPSAwOyBpMCA8IGhlaWdodDsgaTAgPSBpTmV4dCkge1xuICAgICAgICBpTmV4dCA9IE1hdGgubWluKGkwICsgNCwgaGVpZ2h0KTtcbiAgICAgICAgY29uc3QgaW5kZXhCYXNlID0gaTAgKiB3aWR0aDtcbiAgICAgICAgY29uc3QgY2hlY2tBbGxFbXB0eSA9IGkwICsgMyA8IGhlaWdodDtcblxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgICAgICBjb25zdCBpbmRleDAgPSBpbmRleEJhc2UgKyBqO1xuICAgICAgICAgIGNvbnN0IGFsbEVtcHR5ID0gY2hlY2tBbGxFbXB0eSAmJiBwcm9jZXNzaW5nRmxhZ3NbaW5kZXgwXSA9PT0gMCAmJiBwcm9jZXNzaW5nRmxhZ3NbaW5kZXgwICsgb25lUm93RG93bl0gPT09IDAgJiYgcHJvY2Vzc2luZ0ZsYWdzW2luZGV4MCArIHR3b1Jvd3NEb3duXSA9PT0gMCAmJiBwcm9jZXNzaW5nRmxhZ3NbaW5kZXgwICsgdGhyZWVSb3dzRG93bl0gPT09IDAgJiYgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2luZGV4MF0gPT09IDAgJiYgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2luZGV4MCArIG9uZVJvd0Rvd25dID09PSAwICYmIG5laWdoYm9yc1NpZ25pZmljYW5jZVtpbmRleDAgKyB0d29Sb3dzRG93bl0gPT09IDAgJiYgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2luZGV4MCArIHRocmVlUm93c0Rvd25dID09PSAwO1xuICAgICAgICAgIGxldCBpMSA9IDAsXG4gICAgICAgICAgICAgIGluZGV4ID0gaW5kZXgwO1xuICAgICAgICAgIGxldCBpID0gaTAsXG4gICAgICAgICAgICAgIHNpZ247XG5cbiAgICAgICAgICBpZiAoYWxsRW1wdHkpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc1NpZ25pZmljYW50Q29lZmZpY2VudCA9IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgUlVOTEVOR1RIX0NPTlRFWFQpO1xuXG4gICAgICAgICAgICBpZiAoIWhhc1NpZ25pZmljYW50Q29lZmZpY2VudCkge1xuICAgICAgICAgICAgICBiaXRzRGVjb2RlZFtpbmRleDBdKys7XG4gICAgICAgICAgICAgIGJpdHNEZWNvZGVkW2luZGV4MCArIG9uZVJvd0Rvd25dKys7XG4gICAgICAgICAgICAgIGJpdHNEZWNvZGVkW2luZGV4MCArIHR3b1Jvd3NEb3duXSsrO1xuICAgICAgICAgICAgICBiaXRzRGVjb2RlZFtpbmRleDAgKyB0aHJlZVJvd3NEb3duXSsrO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaTEgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIFVOSUZPUk1fQ09OVEVYVCkgPDwgMSB8IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgVU5JRk9STV9DT05URVhUKTtcblxuICAgICAgICAgICAgaWYgKGkxICE9PSAwKSB7XG4gICAgICAgICAgICAgIGkgPSBpMCArIGkxO1xuICAgICAgICAgICAgICBpbmRleCArPSBpMSAqIHdpZHRoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzaWduID0gdGhpcy5kZWNvZGVTaWduQml0KGksIGosIGluZGV4KTtcbiAgICAgICAgICAgIGNvZWZmaWNlbnRzU2lnbltpbmRleF0gPSBzaWduO1xuICAgICAgICAgICAgY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXhdID0gMTtcbiAgICAgICAgICAgIHRoaXMuc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKGksIGosIGluZGV4KTtcbiAgICAgICAgICAgIHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gfD0gZmlyc3RNYWduaXR1ZGVCaXRNYXNrO1xuICAgICAgICAgICAgaW5kZXggPSBpbmRleDA7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkyID0gaTA7IGkyIDw9IGk7IGkyKyssIGluZGV4ICs9IHdpZHRoKSB7XG4gICAgICAgICAgICAgIGJpdHNEZWNvZGVkW2luZGV4XSsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpMSsrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAoaSA9IGkwICsgaTE7IGkgPCBpTmV4dDsgaSsrLCBpbmRleCArPSB3aWR0aCkge1xuICAgICAgICAgICAgaWYgKGNvZWZmaWNlbnRzTWFnbml0dWRlW2luZGV4XSB8fCAocHJvY2Vzc2luZ0ZsYWdzW2luZGV4XSAmIHByb2Nlc3NlZE1hc2spICE9PSAwKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0TGFiZWwgPSBsYWJlbHNbbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2luZGV4XV07XG4gICAgICAgICAgICBjb25zdCBkZWNpc2lvbiA9IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgY29udGV4dExhYmVsKTtcblxuICAgICAgICAgICAgaWYgKGRlY2lzaW9uID09PSAxKSB7XG4gICAgICAgICAgICAgIHNpZ24gPSB0aGlzLmRlY29kZVNpZ25CaXQoaSwgaiwgaW5kZXgpO1xuICAgICAgICAgICAgICBjb2VmZmljZW50c1NpZ25baW5kZXhdID0gc2lnbjtcbiAgICAgICAgICAgICAgY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXhdID0gMTtcbiAgICAgICAgICAgICAgdGhpcy5zZXROZWlnaGJvcnNTaWduaWZpY2FuY2UoaSwgaiwgaW5kZXgpO1xuICAgICAgICAgICAgICBwcm9jZXNzaW5nRmxhZ3NbaW5kZXhdIHw9IGZpcnN0TWFnbml0dWRlQml0TWFzaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYml0c0RlY29kZWRbaW5kZXhdKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hlY2tTZWdtZW50YXRpb25TeW1ib2woKSB7XG4gICAgICBjb25zdCBkZWNvZGVyID0gdGhpcy5kZWNvZGVyO1xuICAgICAgY29uc3QgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgY29uc3Qgc3ltYm9sID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBVTklGT1JNX0NPTlRFWFQpIDw8IDMgfCBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIFVOSUZPUk1fQ09OVEVYVCkgPDwgMiB8IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgVU5JRk9STV9DT05URVhUKSA8PCAxIHwgZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBVTklGT1JNX0NPTlRFWFQpO1xuXG4gICAgICBpZiAoc3ltYm9sICE9PSAweGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEpweEVycm9yKFwiSW52YWxpZCBzZWdtZW50YXRpb24gc3ltYm9sXCIpO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgcmV0dXJuIEJpdE1vZGVsO1xufSgpO1xuXG5jbGFzcyBUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gVHJhbnNmb3JtKSB7XG4gICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQ2Fubm90IGluaXRpYWxpemUgVHJhbnNmb3JtLlwiKTtcbiAgICB9XG4gIH1cblxuICBjYWxjdWxhdGUoc3ViYmFuZHMsIHUwLCB2MCkge1xuICAgIGxldCBsbCA9IHN1YmJhbmRzWzBdO1xuXG4gICAgZm9yIChsZXQgaSA9IDEsIGlpID0gc3ViYmFuZHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgbGwgPSB0aGlzLml0ZXJhdGUobGwsIHN1YmJhbmRzW2ldLCB1MCwgdjApO1xuICAgIH1cblxuICAgIHJldHVybiBsbDtcbiAgfVxuXG4gIGV4dGVuZChidWZmZXIsIG9mZnNldCwgc2l6ZSkge1xuICAgIGxldCBpMSA9IG9mZnNldCAtIDEsXG4gICAgICAgIGoxID0gb2Zmc2V0ICsgMTtcbiAgICBsZXQgaTIgPSBvZmZzZXQgKyBzaXplIC0gMixcbiAgICAgICAgajIgPSBvZmZzZXQgKyBzaXplO1xuICAgIGJ1ZmZlcltpMS0tXSA9IGJ1ZmZlcltqMSsrXTtcbiAgICBidWZmZXJbajIrK10gPSBidWZmZXJbaTItLV07XG4gICAgYnVmZmVyW2kxLS1dID0gYnVmZmVyW2oxKytdO1xuICAgIGJ1ZmZlcltqMisrXSA9IGJ1ZmZlcltpMi0tXTtcbiAgICBidWZmZXJbaTEtLV0gPSBidWZmZXJbajErK107XG4gICAgYnVmZmVyW2oyKytdID0gYnVmZmVyW2kyLS1dO1xuICAgIGJ1ZmZlcltpMV0gPSBidWZmZXJbajFdO1xuICAgIGJ1ZmZlcltqMl0gPSBidWZmZXJbaTJdO1xuICB9XG5cbiAgZmlsdGVyKHgsIG9mZnNldCwgbGVuZ3RoKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgZmlsdGVyYCBjYWxsZWRcIik7XG4gIH1cblxuICBpdGVyYXRlKGxsLCBobF9saF9oaCwgdTAsIHYwKSB7XG4gICAgY29uc3QgbGxXaWR0aCA9IGxsLndpZHRoLFxuICAgICAgICAgIGxsSGVpZ2h0ID0gbGwuaGVpZ2h0O1xuICAgIGxldCBsbEl0ZW1zID0gbGwuaXRlbXM7XG4gICAgY29uc3Qgd2lkdGggPSBobF9saF9oaC53aWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSBobF9saF9oaC5oZWlnaHQ7XG4gICAgY29uc3QgaXRlbXMgPSBobF9saF9oaC5pdGVtcztcbiAgICBsZXQgaSwgaiwgaywgbCwgdSwgdjtcblxuICAgIGZvciAoayA9IDAsIGkgPSAwOyBpIDwgbGxIZWlnaHQ7IGkrKykge1xuICAgICAgbCA9IGkgKiAyICogd2lkdGg7XG5cbiAgICAgIGZvciAoaiA9IDA7IGogPCBsbFdpZHRoOyBqKyssIGsrKywgbCArPSAyKSB7XG4gICAgICAgIGl0ZW1zW2xdID0gbGxJdGVtc1trXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsbEl0ZW1zID0gbGwuaXRlbXMgPSBudWxsO1xuICAgIGNvbnN0IGJ1ZmZlclBhZGRpbmcgPSA0O1xuICAgIGNvbnN0IHJvd0J1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkod2lkdGggKyAyICogYnVmZmVyUGFkZGluZyk7XG5cbiAgICBpZiAod2lkdGggPT09IDEpIHtcbiAgICAgIGlmICgodTAgJiAxKSAhPT0gMCkge1xuICAgICAgICBmb3IgKHYgPSAwLCBrID0gMDsgdiA8IGhlaWdodDsgdisrLCBrICs9IHdpZHRoKSB7XG4gICAgICAgICAgaXRlbXNba10gKj0gMC41O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodiA9IDAsIGsgPSAwOyB2IDwgaGVpZ2h0OyB2KyssIGsgKz0gd2lkdGgpIHtcbiAgICAgICAgcm93QnVmZmVyLnNldChpdGVtcy5zdWJhcnJheShrLCBrICsgd2lkdGgpLCBidWZmZXJQYWRkaW5nKTtcbiAgICAgICAgdGhpcy5leHRlbmQocm93QnVmZmVyLCBidWZmZXJQYWRkaW5nLCB3aWR0aCk7XG4gICAgICAgIHRoaXMuZmlsdGVyKHJvd0J1ZmZlciwgYnVmZmVyUGFkZGluZywgd2lkdGgpO1xuICAgICAgICBpdGVtcy5zZXQocm93QnVmZmVyLnN1YmFycmF5KGJ1ZmZlclBhZGRpbmcsIGJ1ZmZlclBhZGRpbmcgKyB3aWR0aCksIGspO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBudW1CdWZmZXJzID0gMTY7XG4gICAgY29uc3QgY29sQnVmZmVycyA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG51bUJ1ZmZlcnM7IGkrKykge1xuICAgICAgY29sQnVmZmVycy5wdXNoKG5ldyBGbG9hdDMyQXJyYXkoaGVpZ2h0ICsgMiAqIGJ1ZmZlclBhZGRpbmcpKTtcbiAgICB9XG5cbiAgICBsZXQgYixcbiAgICAgICAgY3VycmVudEJ1ZmZlciA9IDA7XG4gICAgbGwgPSBidWZmZXJQYWRkaW5nICsgaGVpZ2h0O1xuXG4gICAgaWYgKGhlaWdodCA9PT0gMSkge1xuICAgICAgaWYgKCh2MCAmIDEpICE9PSAwKSB7XG4gICAgICAgIGZvciAodSA9IDA7IHUgPCB3aWR0aDsgdSsrKSB7XG4gICAgICAgICAgaXRlbXNbdV0gKj0gMC41O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodSA9IDA7IHUgPCB3aWR0aDsgdSsrKSB7XG4gICAgICAgIGlmIChjdXJyZW50QnVmZmVyID09PSAwKSB7XG4gICAgICAgICAgbnVtQnVmZmVycyA9IE1hdGgubWluKHdpZHRoIC0gdSwgbnVtQnVmZmVycyk7XG5cbiAgICAgICAgICBmb3IgKGsgPSB1LCBsID0gYnVmZmVyUGFkZGluZzsgbCA8IGxsOyBrICs9IHdpZHRoLCBsKyspIHtcbiAgICAgICAgICAgIGZvciAoYiA9IDA7IGIgPCBudW1CdWZmZXJzOyBiKyspIHtcbiAgICAgICAgICAgICAgY29sQnVmZmVyc1tiXVtsXSA9IGl0ZW1zW2sgKyBiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50QnVmZmVyID0gbnVtQnVmZmVycztcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRCdWZmZXItLTtcbiAgICAgICAgY29uc3QgYnVmZmVyID0gY29sQnVmZmVyc1tjdXJyZW50QnVmZmVyXTtcbiAgICAgICAgdGhpcy5leHRlbmQoYnVmZmVyLCBidWZmZXJQYWRkaW5nLCBoZWlnaHQpO1xuICAgICAgICB0aGlzLmZpbHRlcihidWZmZXIsIGJ1ZmZlclBhZGRpbmcsIGhlaWdodCk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRCdWZmZXIgPT09IDApIHtcbiAgICAgICAgICBrID0gdSAtIG51bUJ1ZmZlcnMgKyAxO1xuXG4gICAgICAgICAgZm9yIChsID0gYnVmZmVyUGFkZGluZzsgbCA8IGxsOyBrICs9IHdpZHRoLCBsKyspIHtcbiAgICAgICAgICAgIGZvciAoYiA9IDA7IGIgPCBudW1CdWZmZXJzOyBiKyspIHtcbiAgICAgICAgICAgICAgaXRlbXNbayArIGJdID0gY29sQnVmZmVyc1tiXVtsXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBpdGVtc1xuICAgIH07XG4gIH1cblxufVxuXG5jbGFzcyBJcnJldmVyc2libGVUcmFuc2Zvcm0gZXh0ZW5kcyBUcmFuc2Zvcm0ge1xuICBmaWx0ZXIoeCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgICBjb25zdCBsZW4gPSBsZW5ndGggPj4gMTtcbiAgICBvZmZzZXQgfD0gMDtcbiAgICBsZXQgaiwgbiwgY3VycmVudCwgbmV4dDtcbiAgICBjb25zdCBhbHBoYSA9IC0xLjU4NjEzNDM0MjA1OTkyNDtcbiAgICBjb25zdCBiZXRhID0gLTAuMDUyOTgwMTE4NTcyOTYxO1xuICAgIGNvbnN0IGdhbW1hID0gMC44ODI5MTEwNzU1MzA5MzQ7XG4gICAgY29uc3QgZGVsdGEgPSAwLjQ0MzUwNjg1MjA0Mzk3MTtcbiAgICBjb25zdCBLID0gMS4yMzAxNzQxMDQ5MTQwMDE7XG4gICAgY29uc3QgS18gPSAxIC8gSztcbiAgICBqID0gb2Zmc2V0IC0gMztcblxuICAgIGZvciAobiA9IGxlbiArIDQ7IG4tLTsgaiArPSAyKSB7XG4gICAgICB4W2pdICo9IEtfO1xuICAgIH1cblxuICAgIGogPSBvZmZzZXQgLSAyO1xuICAgIGN1cnJlbnQgPSBkZWx0YSAqIHhbaiAtIDFdO1xuXG4gICAgZm9yIChuID0gbGVuICsgMzsgbi0tOyBqICs9IDIpIHtcbiAgICAgIG5leHQgPSBkZWx0YSAqIHhbaiArIDFdO1xuICAgICAgeFtqXSA9IEsgKiB4W2pdIC0gY3VycmVudCAtIG5leHQ7XG5cbiAgICAgIGlmIChuLS0pIHtcbiAgICAgICAgaiArPSAyO1xuICAgICAgICBjdXJyZW50ID0gZGVsdGEgKiB4W2ogKyAxXTtcbiAgICAgICAgeFtqXSA9IEsgKiB4W2pdIC0gY3VycmVudCAtIG5leHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBqID0gb2Zmc2V0IC0gMTtcbiAgICBjdXJyZW50ID0gZ2FtbWEgKiB4W2ogLSAxXTtcblxuICAgIGZvciAobiA9IGxlbiArIDI7IG4tLTsgaiArPSAyKSB7XG4gICAgICBuZXh0ID0gZ2FtbWEgKiB4W2ogKyAxXTtcbiAgICAgIHhbal0gLT0gY3VycmVudCArIG5leHQ7XG5cbiAgICAgIGlmIChuLS0pIHtcbiAgICAgICAgaiArPSAyO1xuICAgICAgICBjdXJyZW50ID0gZ2FtbWEgKiB4W2ogKyAxXTtcbiAgICAgICAgeFtqXSAtPSBjdXJyZW50ICsgbmV4dDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGogPSBvZmZzZXQ7XG4gICAgY3VycmVudCA9IGJldGEgKiB4W2ogLSAxXTtcblxuICAgIGZvciAobiA9IGxlbiArIDE7IG4tLTsgaiArPSAyKSB7XG4gICAgICBuZXh0ID0gYmV0YSAqIHhbaiArIDFdO1xuICAgICAgeFtqXSAtPSBjdXJyZW50ICsgbmV4dDtcblxuICAgICAgaWYgKG4tLSkge1xuICAgICAgICBqICs9IDI7XG4gICAgICAgIGN1cnJlbnQgPSBiZXRhICogeFtqICsgMV07XG4gICAgICAgIHhbal0gLT0gY3VycmVudCArIG5leHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobGVuICE9PSAwKSB7XG4gICAgICBqID0gb2Zmc2V0ICsgMTtcbiAgICAgIGN1cnJlbnQgPSBhbHBoYSAqIHhbaiAtIDFdO1xuXG4gICAgICBmb3IgKG4gPSBsZW47IG4tLTsgaiArPSAyKSB7XG4gICAgICAgIG5leHQgPSBhbHBoYSAqIHhbaiArIDFdO1xuICAgICAgICB4W2pdIC09IGN1cnJlbnQgKyBuZXh0O1xuXG4gICAgICAgIGlmIChuLS0pIHtcbiAgICAgICAgICBqICs9IDI7XG4gICAgICAgICAgY3VycmVudCA9IGFscGhhICogeFtqICsgMV07XG4gICAgICAgICAgeFtqXSAtPSBjdXJyZW50ICsgbmV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG5cbmNsYXNzIFJldmVyc2libGVUcmFuc2Zvcm0gZXh0ZW5kcyBUcmFuc2Zvcm0ge1xuICBmaWx0ZXIoeCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgICBjb25zdCBsZW4gPSBsZW5ndGggPj4gMTtcbiAgICBvZmZzZXQgfD0gMDtcbiAgICBsZXQgaiwgbjtcblxuICAgIGZvciAoaiA9IG9mZnNldCwgbiA9IGxlbiArIDE7IG4tLTsgaiArPSAyKSB7XG4gICAgICB4W2pdIC09IHhbaiAtIDFdICsgeFtqICsgMV0gKyAyID4+IDI7XG4gICAgfVxuXG4gICAgZm9yIChqID0gb2Zmc2V0ICsgMSwgbiA9IGxlbjsgbi0tOyBqICs9IDIpIHtcbiAgICAgIHhbal0gKz0geFtqIC0gMV0gKyB4W2ogKyAxXSA+PiAxO1xuICAgIH1cbiAgfVxuXG59XG5cbi8qKiovIH0pLFxuLyogNDEgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuTFpXU3RyZWFtID0gdm9pZCAwO1xuXG52YXIgX2RlY29kZV9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI5KTtcblxuY2xhc3MgTFpXU3RyZWFtIGV4dGVuZHMgX2RlY29kZV9zdHJlYW0uRGVjb2RlU3RyZWFtIHtcbiAgY29uc3RydWN0b3Ioc3RyLCBtYXliZUxlbmd0aCwgZWFybHlDaGFuZ2UpIHtcbiAgICBzdXBlcihtYXliZUxlbmd0aCk7XG4gICAgdGhpcy5zdHIgPSBzdHI7XG4gICAgdGhpcy5kaWN0ID0gc3RyLmRpY3Q7XG4gICAgdGhpcy5jYWNoZWREYXRhID0gMDtcbiAgICB0aGlzLmJpdHNDYWNoZWQgPSAwO1xuICAgIGNvbnN0IG1heEx6d0RpY3Rpb25hcnlTaXplID0gNDA5NjtcbiAgICBjb25zdCBsendTdGF0ZSA9IHtcbiAgICAgIGVhcmx5Q2hhbmdlLFxuICAgICAgY29kZUxlbmd0aDogOSxcbiAgICAgIG5leHRDb2RlOiAyNTgsXG4gICAgICBkaWN0aW9uYXJ5VmFsdWVzOiBuZXcgVWludDhBcnJheShtYXhMendEaWN0aW9uYXJ5U2l6ZSksXG4gICAgICBkaWN0aW9uYXJ5TGVuZ3RoczogbmV3IFVpbnQxNkFycmF5KG1heEx6d0RpY3Rpb25hcnlTaXplKSxcbiAgICAgIGRpY3Rpb25hcnlQcmV2Q29kZXM6IG5ldyBVaW50MTZBcnJheShtYXhMendEaWN0aW9uYXJ5U2l6ZSksXG4gICAgICBjdXJyZW50U2VxdWVuY2U6IG5ldyBVaW50OEFycmF5KG1heEx6d0RpY3Rpb25hcnlTaXplKSxcbiAgICAgIGN1cnJlbnRTZXF1ZW5jZUxlbmd0aDogMFxuICAgIH07XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gICAgICBsendTdGF0ZS5kaWN0aW9uYXJ5VmFsdWVzW2ldID0gaTtcbiAgICAgIGx6d1N0YXRlLmRpY3Rpb25hcnlMZW5ndGhzW2ldID0gMTtcbiAgICB9XG5cbiAgICB0aGlzLmx6d1N0YXRlID0gbHp3U3RhdGU7XG4gIH1cblxuICByZWFkQml0cyhuKSB7XG4gICAgbGV0IGJpdHNDYWNoZWQgPSB0aGlzLmJpdHNDYWNoZWQ7XG4gICAgbGV0IGNhY2hlZERhdGEgPSB0aGlzLmNhY2hlZERhdGE7XG5cbiAgICB3aGlsZSAoYml0c0NhY2hlZCA8IG4pIHtcbiAgICAgIGNvbnN0IGMgPSB0aGlzLnN0ci5nZXRCeXRlKCk7XG5cbiAgICAgIGlmIChjID09PSAtMSkge1xuICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjYWNoZWREYXRhID0gY2FjaGVkRGF0YSA8PCA4IHwgYztcbiAgICAgIGJpdHNDYWNoZWQgKz0gODtcbiAgICB9XG5cbiAgICB0aGlzLmJpdHNDYWNoZWQgPSBiaXRzQ2FjaGVkIC09IG47XG4gICAgdGhpcy5jYWNoZWREYXRhID0gY2FjaGVkRGF0YTtcbiAgICB0aGlzLmxhc3RDb2RlID0gbnVsbDtcbiAgICByZXR1cm4gY2FjaGVkRGF0YSA+Pj4gYml0c0NhY2hlZCAmICgxIDw8IG4pIC0gMTtcbiAgfVxuXG4gIHJlYWRCbG9jaygpIHtcbiAgICBjb25zdCBibG9ja1NpemUgPSA1MTIsXG4gICAgICAgICAgZGVjb2RlZFNpemVEZWx0YSA9IGJsb2NrU2l6ZTtcbiAgICBsZXQgZXN0aW1hdGVkRGVjb2RlZFNpemUgPSBibG9ja1NpemUgKiAyO1xuICAgIGxldCBpLCBqLCBxO1xuICAgIGNvbnN0IGx6d1N0YXRlID0gdGhpcy5sendTdGF0ZTtcblxuICAgIGlmICghbHp3U3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlYXJseUNoYW5nZSA9IGx6d1N0YXRlLmVhcmx5Q2hhbmdlO1xuICAgIGxldCBuZXh0Q29kZSA9IGx6d1N0YXRlLm5leHRDb2RlO1xuICAgIGNvbnN0IGRpY3Rpb25hcnlWYWx1ZXMgPSBsendTdGF0ZS5kaWN0aW9uYXJ5VmFsdWVzO1xuICAgIGNvbnN0IGRpY3Rpb25hcnlMZW5ndGhzID0gbHp3U3RhdGUuZGljdGlvbmFyeUxlbmd0aHM7XG4gICAgY29uc3QgZGljdGlvbmFyeVByZXZDb2RlcyA9IGx6d1N0YXRlLmRpY3Rpb25hcnlQcmV2Q29kZXM7XG4gICAgbGV0IGNvZGVMZW5ndGggPSBsendTdGF0ZS5jb2RlTGVuZ3RoO1xuICAgIGxldCBwcmV2Q29kZSA9IGx6d1N0YXRlLnByZXZDb2RlO1xuICAgIGNvbnN0IGN1cnJlbnRTZXF1ZW5jZSA9IGx6d1N0YXRlLmN1cnJlbnRTZXF1ZW5jZTtcbiAgICBsZXQgY3VycmVudFNlcXVlbmNlTGVuZ3RoID0gbHp3U3RhdGUuY3VycmVudFNlcXVlbmNlTGVuZ3RoO1xuICAgIGxldCBkZWNvZGVkTGVuZ3RoID0gMDtcbiAgICBsZXQgY3VycmVudEJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuICAgIGxldCBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCArIGVzdGltYXRlZERlY29kZWRTaXplKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBibG9ja1NpemU7IGkrKykge1xuICAgICAgY29uc3QgY29kZSA9IHRoaXMucmVhZEJpdHMoY29kZUxlbmd0aCk7XG4gICAgICBjb25zdCBoYXNQcmV2ID0gY3VycmVudFNlcXVlbmNlTGVuZ3RoID4gMDtcblxuICAgICAgaWYgKGNvZGUgPCAyNTYpIHtcbiAgICAgICAgY3VycmVudFNlcXVlbmNlWzBdID0gY29kZTtcbiAgICAgICAgY3VycmVudFNlcXVlbmNlTGVuZ3RoID0gMTtcbiAgICAgIH0gZWxzZSBpZiAoY29kZSA+PSAyNTgpIHtcbiAgICAgICAgaWYgKGNvZGUgPCBuZXh0Q29kZSkge1xuICAgICAgICAgIGN1cnJlbnRTZXF1ZW5jZUxlbmd0aCA9IGRpY3Rpb25hcnlMZW5ndGhzW2NvZGVdO1xuXG4gICAgICAgICAgZm9yIChqID0gY3VycmVudFNlcXVlbmNlTGVuZ3RoIC0gMSwgcSA9IGNvZGU7IGogPj0gMDsgai0tKSB7XG4gICAgICAgICAgICBjdXJyZW50U2VxdWVuY2Vbal0gPSBkaWN0aW9uYXJ5VmFsdWVzW3FdO1xuICAgICAgICAgICAgcSA9IGRpY3Rpb25hcnlQcmV2Q29kZXNbcV07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRTZXF1ZW5jZVtjdXJyZW50U2VxdWVuY2VMZW5ndGgrK10gPSBjdXJyZW50U2VxdWVuY2VbMF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gMjU2KSB7XG4gICAgICAgIGNvZGVMZW5ndGggPSA5O1xuICAgICAgICBuZXh0Q29kZSA9IDI1ODtcbiAgICAgICAgY3VycmVudFNlcXVlbmNlTGVuZ3RoID0gMDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmx6d1N0YXRlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGhhc1ByZXYpIHtcbiAgICAgICAgZGljdGlvbmFyeVByZXZDb2Rlc1tuZXh0Q29kZV0gPSBwcmV2Q29kZTtcbiAgICAgICAgZGljdGlvbmFyeUxlbmd0aHNbbmV4dENvZGVdID0gZGljdGlvbmFyeUxlbmd0aHNbcHJldkNvZGVdICsgMTtcbiAgICAgICAgZGljdGlvbmFyeVZhbHVlc1tuZXh0Q29kZV0gPSBjdXJyZW50U2VxdWVuY2VbMF07XG4gICAgICAgIG5leHRDb2RlKys7XG4gICAgICAgIGNvZGVMZW5ndGggPSBuZXh0Q29kZSArIGVhcmx5Q2hhbmdlICYgbmV4dENvZGUgKyBlYXJseUNoYW5nZSAtIDEgPyBjb2RlTGVuZ3RoIDogTWF0aC5taW4oTWF0aC5sb2cobmV4dENvZGUgKyBlYXJseUNoYW5nZSkgLyAwLjY5MzE0NzE4MDU1OTk0NTMgKyAxLCAxMikgfCAwO1xuICAgICAgfVxuXG4gICAgICBwcmV2Q29kZSA9IGNvZGU7XG4gICAgICBkZWNvZGVkTGVuZ3RoICs9IGN1cnJlbnRTZXF1ZW5jZUxlbmd0aDtcblxuICAgICAgaWYgKGVzdGltYXRlZERlY29kZWRTaXplIDwgZGVjb2RlZExlbmd0aCkge1xuICAgICAgICBkbyB7XG4gICAgICAgICAgZXN0aW1hdGVkRGVjb2RlZFNpemUgKz0gZGVjb2RlZFNpemVEZWx0YTtcbiAgICAgICAgfSB3aGlsZSAoZXN0aW1hdGVkRGVjb2RlZFNpemUgPCBkZWNvZGVkTGVuZ3RoKTtcblxuICAgICAgICBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCArIGVzdGltYXRlZERlY29kZWRTaXplKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChqID0gMDsgaiA8IGN1cnJlbnRTZXF1ZW5jZUxlbmd0aDsgaisrKSB7XG4gICAgICAgIGJ1ZmZlcltjdXJyZW50QnVmZmVyTGVuZ3RoKytdID0gY3VycmVudFNlcXVlbmNlW2pdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGx6d1N0YXRlLm5leHRDb2RlID0gbmV4dENvZGU7XG4gICAgbHp3U3RhdGUuY29kZUxlbmd0aCA9IGNvZGVMZW5ndGg7XG4gICAgbHp3U3RhdGUucHJldkNvZGUgPSBwcmV2Q29kZTtcbiAgICBsendTdGF0ZS5jdXJyZW50U2VxdWVuY2VMZW5ndGggPSBjdXJyZW50U2VxdWVuY2VMZW5ndGg7XG4gICAgdGhpcy5idWZmZXJMZW5ndGggPSBjdXJyZW50QnVmZmVyTGVuZ3RoO1xuICB9XG5cbn1cblxuZXhwb3J0cy5MWldTdHJlYW0gPSBMWldTdHJlYW07XG5cbi8qKiovIH0pLFxuLyogNDIgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuUHJlZGljdG9yU3RyZWFtID0gdm9pZCAwO1xuXG52YXIgX2RlY29kZV9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI5KTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxuY2xhc3MgUHJlZGljdG9yU3RyZWFtIGV4dGVuZHMgX2RlY29kZV9zdHJlYW0uRGVjb2RlU3RyZWFtIHtcbiAgY29uc3RydWN0b3Ioc3RyLCBtYXliZUxlbmd0aCwgcGFyYW1zKSB7XG4gICAgc3VwZXIobWF5YmVMZW5ndGgpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShwYXJhbXMpKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIGNvbnN0IHByZWRpY3RvciA9IHRoaXMucHJlZGljdG9yID0gcGFyYW1zLmdldChcIlByZWRpY3RvclwiKSB8fCAxO1xuXG4gICAgaWYgKHByZWRpY3RvciA8PSAxKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIGlmIChwcmVkaWN0b3IgIT09IDIgJiYgKHByZWRpY3RvciA8IDEwIHx8IHByZWRpY3RvciA+IDE1KSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBVbnN1cHBvcnRlZCBwcmVkaWN0b3I6ICR7cHJlZGljdG9yfWApO1xuICAgIH1cblxuICAgIGlmIChwcmVkaWN0b3IgPT09IDIpIHtcbiAgICAgIHRoaXMucmVhZEJsb2NrID0gdGhpcy5yZWFkQmxvY2tUaWZmO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlYWRCbG9jayA9IHRoaXMucmVhZEJsb2NrUG5nO1xuICAgIH1cblxuICAgIHRoaXMuc3RyID0gc3RyO1xuICAgIHRoaXMuZGljdCA9IHN0ci5kaWN0O1xuICAgIGNvbnN0IGNvbG9ycyA9IHRoaXMuY29sb3JzID0gcGFyYW1zLmdldChcIkNvbG9yc1wiKSB8fCAxO1xuICAgIGNvbnN0IGJpdHMgPSB0aGlzLmJpdHMgPSBwYXJhbXMuZ2V0KFwiQlBDXCIsIFwiQml0c1BlckNvbXBvbmVudFwiKSB8fCA4O1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMgPSBwYXJhbXMuZ2V0KFwiQ29sdW1uc1wiKSB8fCAxO1xuICAgIHRoaXMucGl4Qnl0ZXMgPSBjb2xvcnMgKiBiaXRzICsgNyA+PiAzO1xuICAgIHRoaXMucm93Qnl0ZXMgPSBjb2x1bW5zICogY29sb3JzICogYml0cyArIDcgPj4gMztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJlYWRCbG9ja1RpZmYoKSB7XG4gICAgY29uc3Qgcm93Qnl0ZXMgPSB0aGlzLnJvd0J5dGVzO1xuICAgIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKGJ1ZmZlckxlbmd0aCArIHJvd0J5dGVzKTtcbiAgICBjb25zdCBiaXRzID0gdGhpcy5iaXRzO1xuICAgIGNvbnN0IGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuICAgIGNvbnN0IHJhd0J5dGVzID0gdGhpcy5zdHIuZ2V0Qnl0ZXMocm93Qnl0ZXMpO1xuICAgIHRoaXMuZW9mID0gIXJhd0J5dGVzLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLmVvZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpbmJ1ZiA9IDAsXG4gICAgICAgIG91dGJ1ZiA9IDA7XG4gICAgbGV0IGluYml0cyA9IDAsXG4gICAgICAgIG91dGJpdHMgPSAwO1xuICAgIGxldCBwb3MgPSBidWZmZXJMZW5ndGg7XG4gICAgbGV0IGk7XG5cbiAgICBpZiAoYml0cyA9PT0gMSAmJiBjb2xvcnMgPT09IDEpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dCeXRlczsgKytpKSB7XG4gICAgICAgIGxldCBjID0gcmF3Qnl0ZXNbaV0gXiBpbmJ1ZjtcbiAgICAgICAgYyBePSBjID4+IDE7XG4gICAgICAgIGMgXj0gYyA+PiAyO1xuICAgICAgICBjIF49IGMgPj4gNDtcbiAgICAgICAgaW5idWYgPSAoYyAmIDEpIDw8IDc7XG4gICAgICAgIGJ1ZmZlcltwb3MrK10gPSBjO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYml0cyA9PT0gOCkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IGNvbG9yczsgKytpKSB7XG4gICAgICAgIGJ1ZmZlcltwb3MrK10gPSByYXdCeXRlc1tpXTtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IGkgPCByb3dCeXRlczsgKytpKSB7XG4gICAgICAgIGJ1ZmZlcltwb3NdID0gYnVmZmVyW3BvcyAtIGNvbG9yc10gKyByYXdCeXRlc1tpXTtcbiAgICAgICAgcG9zKys7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChiaXRzID09PSAxNikge1xuICAgICAgY29uc3QgYnl0ZXNQZXJQaXhlbCA9IGNvbG9ycyAqIDI7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBieXRlc1BlclBpeGVsOyArK2kpIHtcbiAgICAgICAgYnVmZmVyW3BvcysrXSA9IHJhd0J5dGVzW2ldO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgaSA8IHJvd0J5dGVzOyBpICs9IDIpIHtcbiAgICAgICAgY29uc3Qgc3VtID0gKChyYXdCeXRlc1tpXSAmIDB4ZmYpIDw8IDgpICsgKHJhd0J5dGVzW2kgKyAxXSAmIDB4ZmYpICsgKChidWZmZXJbcG9zIC0gYnl0ZXNQZXJQaXhlbF0gJiAweGZmKSA8PCA4KSArIChidWZmZXJbcG9zIC0gYnl0ZXNQZXJQaXhlbCArIDFdICYgMHhmZik7XG4gICAgICAgIGJ1ZmZlcltwb3MrK10gPSBzdW0gPj4gOCAmIDB4ZmY7XG4gICAgICAgIGJ1ZmZlcltwb3MrK10gPSBzdW0gJiAweGZmO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb21wQXJyYXkgPSBuZXcgVWludDhBcnJheShjb2xvcnMgKyAxKTtcbiAgICAgIGNvbnN0IGJpdE1hc2sgPSAoMSA8PCBiaXRzKSAtIDE7XG4gICAgICBsZXQgaiA9IDAsXG4gICAgICAgICAgayA9IGJ1ZmZlckxlbmd0aDtcbiAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2x1bW5zOyArK2kpIHtcbiAgICAgICAgZm9yIChsZXQga2sgPSAwOyBrayA8IGNvbG9yczsgKytraykge1xuICAgICAgICAgIGlmIChpbmJpdHMgPCBiaXRzKSB7XG4gICAgICAgICAgICBpbmJ1ZiA9IGluYnVmIDw8IDggfCByYXdCeXRlc1tqKytdICYgMHhmZjtcbiAgICAgICAgICAgIGluYml0cyArPSA4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbXBBcnJheVtra10gPSBjb21wQXJyYXlba2tdICsgKGluYnVmID4+IGluYml0cyAtIGJpdHMpICYgYml0TWFzaztcbiAgICAgICAgICBpbmJpdHMgLT0gYml0cztcbiAgICAgICAgICBvdXRidWYgPSBvdXRidWYgPDwgYml0cyB8IGNvbXBBcnJheVtra107XG4gICAgICAgICAgb3V0Yml0cyArPSBiaXRzO1xuXG4gICAgICAgICAgaWYgKG91dGJpdHMgPj0gOCkge1xuICAgICAgICAgICAgYnVmZmVyW2srK10gPSBvdXRidWYgPj4gb3V0Yml0cyAtIDggJiAweGZmO1xuICAgICAgICAgICAgb3V0Yml0cyAtPSA4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAob3V0Yml0cyA+IDApIHtcbiAgICAgICAgYnVmZmVyW2srK10gPSAob3V0YnVmIDw8IDggLSBvdXRiaXRzKSArIChpbmJ1ZiAmICgxIDw8IDggLSBvdXRiaXRzKSAtIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYnVmZmVyTGVuZ3RoICs9IHJvd0J5dGVzO1xuICB9XG5cbiAgcmVhZEJsb2NrUG5nKCkge1xuICAgIGNvbnN0IHJvd0J5dGVzID0gdGhpcy5yb3dCeXRlcztcbiAgICBjb25zdCBwaXhCeXRlcyA9IHRoaXMucGl4Qnl0ZXM7XG4gICAgY29uc3QgcHJlZGljdG9yID0gdGhpcy5zdHIuZ2V0Qnl0ZSgpO1xuICAgIGNvbnN0IHJhd0J5dGVzID0gdGhpcy5zdHIuZ2V0Qnl0ZXMocm93Qnl0ZXMpO1xuICAgIHRoaXMuZW9mID0gIXJhd0J5dGVzLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLmVvZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKGJ1ZmZlckxlbmd0aCArIHJvd0J5dGVzKTtcbiAgICBsZXQgcHJldlJvdyA9IGJ1ZmZlci5zdWJhcnJheShidWZmZXJMZW5ndGggLSByb3dCeXRlcywgYnVmZmVyTGVuZ3RoKTtcblxuICAgIGlmIChwcmV2Um93Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcHJldlJvdyA9IG5ldyBVaW50OEFycmF5KHJvd0J5dGVzKTtcbiAgICB9XG5cbiAgICBsZXQgaSxcbiAgICAgICAgaiA9IGJ1ZmZlckxlbmd0aCxcbiAgICAgICAgdXAsXG4gICAgICAgIGM7XG5cbiAgICBzd2l0Y2ggKHByZWRpY3Rvcikge1xuICAgICAgY2FzZSAwOlxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93Qnl0ZXM7ICsraSkge1xuICAgICAgICAgIGJ1ZmZlcltqKytdID0gcmF3Qnl0ZXNbaV07XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAxOlxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGl4Qnl0ZXM7ICsraSkge1xuICAgICAgICAgIGJ1ZmZlcltqKytdID0gcmF3Qnl0ZXNbaV07XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKDsgaSA8IHJvd0J5dGVzOyArK2kpIHtcbiAgICAgICAgICBidWZmZXJbal0gPSBidWZmZXJbaiAtIHBpeEJ5dGVzXSArIHJhd0J5dGVzW2ldICYgMHhmZjtcbiAgICAgICAgICBqKys7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAyOlxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93Qnl0ZXM7ICsraSkge1xuICAgICAgICAgIGJ1ZmZlcltqKytdID0gcHJldlJvd1tpXSArIHJhd0J5dGVzW2ldICYgMHhmZjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDM6XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwaXhCeXRlczsgKytpKSB7XG4gICAgICAgICAgYnVmZmVyW2orK10gPSAocHJldlJvd1tpXSA+PiAxKSArIHJhd0J5dGVzW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICg7IGkgPCByb3dCeXRlczsgKytpKSB7XG4gICAgICAgICAgYnVmZmVyW2pdID0gKHByZXZSb3dbaV0gKyBidWZmZXJbaiAtIHBpeEJ5dGVzXSA+PiAxKSArIHJhd0J5dGVzW2ldICYgMHhmZjtcbiAgICAgICAgICBqKys7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA0OlxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGl4Qnl0ZXM7ICsraSkge1xuICAgICAgICAgIHVwID0gcHJldlJvd1tpXTtcbiAgICAgICAgICBjID0gcmF3Qnl0ZXNbaV07XG4gICAgICAgICAgYnVmZmVyW2orK10gPSB1cCArIGM7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKDsgaSA8IHJvd0J5dGVzOyArK2kpIHtcbiAgICAgICAgICB1cCA9IHByZXZSb3dbaV07XG4gICAgICAgICAgY29uc3QgdXBMZWZ0ID0gcHJldlJvd1tpIC0gcGl4Qnl0ZXNdO1xuICAgICAgICAgIGNvbnN0IGxlZnQgPSBidWZmZXJbaiAtIHBpeEJ5dGVzXTtcbiAgICAgICAgICBjb25zdCBwID0gbGVmdCArIHVwIC0gdXBMZWZ0O1xuICAgICAgICAgIGxldCBwYSA9IHAgLSBsZWZ0O1xuXG4gICAgICAgICAgaWYgKHBhIDwgMCkge1xuICAgICAgICAgICAgcGEgPSAtcGE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHBiID0gcCAtIHVwO1xuXG4gICAgICAgICAgaWYgKHBiIDwgMCkge1xuICAgICAgICAgICAgcGIgPSAtcGI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHBjID0gcCAtIHVwTGVmdDtcblxuICAgICAgICAgIGlmIChwYyA8IDApIHtcbiAgICAgICAgICAgIHBjID0gLXBjO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGMgPSByYXdCeXRlc1tpXTtcblxuICAgICAgICAgIGlmIChwYSA8PSBwYiAmJiBwYSA8PSBwYykge1xuICAgICAgICAgICAgYnVmZmVyW2orK10gPSBsZWZ0ICsgYztcbiAgICAgICAgICB9IGVsc2UgaWYgKHBiIDw9IHBjKSB7XG4gICAgICAgICAgICBidWZmZXJbaisrXSA9IHVwICsgYztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZmVyW2orK10gPSB1cExlZnQgKyBjO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFVuc3VwcG9ydGVkIHByZWRpY3RvcjogJHtwcmVkaWN0b3J9YCk7XG4gICAgfVxuXG4gICAgdGhpcy5idWZmZXJMZW5ndGggKz0gcm93Qnl0ZXM7XG4gIH1cblxufVxuXG5leHBvcnRzLlByZWRpY3RvclN0cmVhbSA9IFByZWRpY3RvclN0cmVhbTtcblxuLyoqKi8gfSksXG4vKiA0MyAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5SdW5MZW5ndGhTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfZGVjb2RlX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjkpO1xuXG5jbGFzcyBSdW5MZW5ndGhTdHJlYW0gZXh0ZW5kcyBfZGVjb2RlX3N0cmVhbS5EZWNvZGVTdHJlYW0ge1xuICBjb25zdHJ1Y3RvcihzdHIsIG1heWJlTGVuZ3RoKSB7XG4gICAgc3VwZXIobWF5YmVMZW5ndGgpO1xuICAgIHRoaXMuc3RyID0gc3RyO1xuICAgIHRoaXMuZGljdCA9IHN0ci5kaWN0O1xuICB9XG5cbiAgcmVhZEJsb2NrKCkge1xuICAgIGNvbnN0IHJlcGVhdEhlYWRlciA9IHRoaXMuc3RyLmdldEJ5dGVzKDIpO1xuXG4gICAgaWYgKCFyZXBlYXRIZWFkZXIgfHwgcmVwZWF0SGVhZGVyLmxlbmd0aCA8IDIgfHwgcmVwZWF0SGVhZGVyWzBdID09PSAxMjgpIHtcbiAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgYnVmZmVyO1xuICAgIGxldCBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlckxlbmd0aDtcbiAgICBsZXQgbiA9IHJlcGVhdEhlYWRlclswXTtcblxuICAgIGlmIChuIDwgMTI4KSB7XG4gICAgICBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcihidWZmZXJMZW5ndGggKyBuICsgMSk7XG4gICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoKytdID0gcmVwZWF0SGVhZGVyWzFdO1xuXG4gICAgICBpZiAobiA+IDApIHtcbiAgICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5zdHIuZ2V0Qnl0ZXMobik7XG4gICAgICAgIGJ1ZmZlci5zZXQoc291cmNlLCBidWZmZXJMZW5ndGgpO1xuICAgICAgICBidWZmZXJMZW5ndGggKz0gbjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbiA9IDI1NyAtIG47XG4gICAgICBjb25zdCBiID0gcmVwZWF0SGVhZGVyWzFdO1xuICAgICAgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIoYnVmZmVyTGVuZ3RoICsgbiArIDEpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoKytdID0gYjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IGJ1ZmZlckxlbmd0aDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUnVuTGVuZ3RoU3RyZWFtID0gUnVuTGVuZ3RoU3RyZWFtO1xuXG4vKioqLyB9KSxcbi8qIDQ0ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLkZvbnQgPSBleHBvcnRzLkVycm9yRm9udCA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9jZmZfcGFyc2VyID0gX193X3BkZmpzX3JlcXVpcmVfXyg0NSk7XG5cbnZhciBfZm9udHNfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE4KTtcblxudmFyIF9nbHlwaGxpc3QgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIwKTtcblxudmFyIF9lbmNvZGluZ3MgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE5KTtcblxudmFyIF9zdGFuZGFyZF9mb250cyA9IF9fd19wZGZqc19yZXF1aXJlX18oNDcpO1xuXG52YXIgX3VuaWNvZGUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIxKTtcblxudmFyIF90b191bmljb2RlX21hcCA9IF9fd19wZGZqc19yZXF1aXJlX18oNDgpO1xuXG52YXIgX2NmZl9mb250ID0gX193X3BkZmpzX3JlcXVpcmVfXyg0OSk7XG5cbnZhciBfZm9udF9yZW5kZXJlciA9IF9fd19wZGZqc19yZXF1aXJlX18oNTApO1xuXG52YXIgX2dseWYgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUxKTtcblxudmFyIF9jbWFwID0gX193X3BkZmpzX3JlcXVpcmVfXygyNik7XG5cbnZhciBfb3BlbnR5cGVfZmlsZV9idWlsZGVyID0gX193X3BkZmpzX3JlcXVpcmVfXyg1Mik7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOSk7XG5cbnZhciBfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxMCk7XG5cbnZhciBfdHlwZTFfZm9udCA9IF9fd19wZGZqc19yZXF1aXJlX18oNTMpO1xuXG5jb25zdCBQUklWQVRFX1VTRV9BUkVBUyA9IFtbMHhlMDAwLCAweGY4ZmZdLCBbMHgxMDAwMDAsIDB4MTBmZmZkXV07XG5jb25zdCBQREZfR0xZUEhfU1BBQ0VfVU5JVFMgPSAxMDAwO1xuY29uc3QgRVhQT1JUX0RBVEFfUFJPUEVSVElFUyA9IFtcImFzY2VudFwiLCBcImJib3hcIiwgXCJibGFja1wiLCBcImJvbGRcIiwgXCJjaGFyUHJvY09wZXJhdG9yTGlzdFwiLCBcImNvbXBvc2l0ZVwiLCBcImNzc0ZvbnRJbmZvXCIsIFwiZGF0YVwiLCBcImRlZmF1bHRWTWV0cmljc1wiLCBcImRlZmF1bHRXaWR0aFwiLCBcImRlc2NlbnRcIiwgXCJmYWxsYmFja05hbWVcIiwgXCJmb250TWF0cml4XCIsIFwiZm9udFR5cGVcIiwgXCJpc1R5cGUzRm9udFwiLCBcIml0YWxpY1wiLCBcImxvYWRlZE5hbWVcIiwgXCJtaW1ldHlwZVwiLCBcIm1pc3NpbmdGaWxlXCIsIFwibmFtZVwiLCBcInJlbWVhc3VyZVwiLCBcInN1YnR5cGVcIiwgXCJ0eXBlXCIsIFwidmVydGljYWxcIl07XG5jb25zdCBFWFBPUlRfREFUQV9FWFRSQV9QUk9QRVJUSUVTID0gW1wiY01hcFwiLCBcImRlZmF1bHRFbmNvZGluZ1wiLCBcImRpZmZlcmVuY2VzXCIsIFwiaXNNb25vc3BhY2VcIiwgXCJpc1NlcmlmRm9udFwiLCBcImlzU3ltYm9saWNGb250XCIsIFwic2VhY01hcFwiLCBcInRvRm9udENoYXJcIiwgXCJ0b1VuaWNvZGVcIiwgXCJ2bWV0cmljc1wiLCBcIndpZHRoc1wiXTtcblxuZnVuY3Rpb24gYWRqdXN0V2lkdGhzKHByb3BlcnRpZXMpIHtcbiAgaWYgKCFwcm9wZXJ0aWVzLmZvbnRNYXRyaXgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocHJvcGVydGllcy5mb250TWF0cml4WzBdID09PSBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWFswXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHNjYWxlID0gMC4wMDEgLyBwcm9wZXJ0aWVzLmZvbnRNYXRyaXhbMF07XG4gIGNvbnN0IGdseXBoc1dpZHRocyA9IHByb3BlcnRpZXMud2lkdGhzO1xuXG4gIGZvciAoY29uc3QgZ2x5cGggaW4gZ2x5cGhzV2lkdGhzKSB7XG4gICAgZ2x5cGhzV2lkdGhzW2dseXBoXSAqPSBzY2FsZTtcbiAgfVxuXG4gIHByb3BlcnRpZXMuZGVmYXVsdFdpZHRoICo9IHNjYWxlO1xufVxuXG5mdW5jdGlvbiBhZGp1c3RUb1VuaWNvZGUocHJvcGVydGllcywgYnVpbHRJbkVuY29kaW5nKSB7XG4gIGlmIChwcm9wZXJ0aWVzLmlzSW50ZXJuYWxGb250KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGJ1aWx0SW5FbmNvZGluZyA9PT0gcHJvcGVydGllcy5kZWZhdWx0RW5jb2RpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocHJvcGVydGllcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBfdG9fdW5pY29kZV9tYXAuSWRlbnRpdHlUb1VuaWNvZGVNYXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB0b1VuaWNvZGUgPSBbXSxcbiAgICAgICAgZ2x5cGhzVW5pY29kZU1hcCA9ICgwLCBfZ2x5cGhsaXN0LmdldEdseXBoc1VuaWNvZGUpKCk7XG5cbiAgZm9yIChjb25zdCBjaGFyQ29kZSBpbiBidWlsdEluRW5jb2RpbmcpIHtcbiAgICBpZiAocHJvcGVydGllcy5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcCkge1xuICAgICAgaWYgKHByb3BlcnRpZXMudG9Vbmljb2RlLmhhcyhjaGFyQ29kZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wZXJ0aWVzLmhhc0VuY29kaW5nKSB7XG4gICAgICBpZiAocHJvcGVydGllcy5kaWZmZXJlbmNlcy5sZW5ndGggPT09IDAgfHwgcHJvcGVydGllcy5kaWZmZXJlbmNlc1tjaGFyQ29kZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBnbHlwaE5hbWUgPSBidWlsdEluRW5jb2RpbmdbY2hhckNvZGVdO1xuICAgIGNvbnN0IHVuaWNvZGUgPSAoMCwgX3VuaWNvZGUuZ2V0VW5pY29kZUZvckdseXBoKShnbHlwaE5hbWUsIGdseXBoc1VuaWNvZGVNYXApO1xuXG4gICAgaWYgKHVuaWNvZGUgIT09IC0xKSB7XG4gICAgICB0b1VuaWNvZGVbY2hhckNvZGVdID0gU3RyaW5nLmZyb21DaGFyQ29kZSh1bmljb2RlKTtcbiAgICB9XG4gIH1cblxuICBpZiAodG9Vbmljb2RlLmxlbmd0aCA+IDApIHtcbiAgICBwcm9wZXJ0aWVzLnRvVW5pY29kZS5hbWVuZCh0b1VuaWNvZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFtZW5kRmFsbGJhY2tUb1VuaWNvZGUocHJvcGVydGllcykge1xuICBpZiAoIXByb3BlcnRpZXMuZmFsbGJhY2tUb1VuaWNvZGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocHJvcGVydGllcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBfdG9fdW5pY29kZV9tYXAuSWRlbnRpdHlUb1VuaWNvZGVNYXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB0b1VuaWNvZGUgPSBbXTtcblxuICBmb3IgKGNvbnN0IGNoYXJDb2RlIGluIHByb3BlcnRpZXMuZmFsbGJhY2tUb1VuaWNvZGUpIHtcbiAgICBpZiAocHJvcGVydGllcy50b1VuaWNvZGUuaGFzKGNoYXJDb2RlKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdG9Vbmljb2RlW2NoYXJDb2RlXSA9IHByb3BlcnRpZXMuZmFsbGJhY2tUb1VuaWNvZGVbY2hhckNvZGVdO1xuICB9XG5cbiAgaWYgKHRvVW5pY29kZS5sZW5ndGggPiAwKSB7XG4gICAgcHJvcGVydGllcy50b1VuaWNvZGUuYW1lbmQodG9Vbmljb2RlKTtcbiAgfVxufVxuXG5jbGFzcyBHbHlwaCB7XG4gIGNvbnN0cnVjdG9yKG9yaWdpbmFsQ2hhckNvZGUsIGZvbnRDaGFyLCB1bmljb2RlLCBhY2NlbnQsIHdpZHRoLCB2bWV0cmljLCBvcGVyYXRvckxpc3RJZCwgaXNTcGFjZSwgaXNJbkZvbnQpIHtcbiAgICB0aGlzLm9yaWdpbmFsQ2hhckNvZGUgPSBvcmlnaW5hbENoYXJDb2RlO1xuICAgIHRoaXMuZm9udENoYXIgPSBmb250Q2hhcjtcbiAgICB0aGlzLnVuaWNvZGUgPSB1bmljb2RlO1xuICAgIHRoaXMuYWNjZW50ID0gYWNjZW50O1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnZtZXRyaWMgPSB2bWV0cmljO1xuICAgIHRoaXMub3BlcmF0b3JMaXN0SWQgPSBvcGVyYXRvckxpc3RJZDtcbiAgICB0aGlzLmlzU3BhY2UgPSBpc1NwYWNlO1xuICAgIHRoaXMuaXNJbkZvbnQgPSBpc0luRm9udDtcbiAgfVxuXG4gIG1hdGNoZXNGb3JDYWNoZShvcmlnaW5hbENoYXJDb2RlLCBmb250Q2hhciwgdW5pY29kZSwgYWNjZW50LCB3aWR0aCwgdm1ldHJpYywgb3BlcmF0b3JMaXN0SWQsIGlzU3BhY2UsIGlzSW5Gb250KSB7XG4gICAgcmV0dXJuIHRoaXMub3JpZ2luYWxDaGFyQ29kZSA9PT0gb3JpZ2luYWxDaGFyQ29kZSAmJiB0aGlzLmZvbnRDaGFyID09PSBmb250Q2hhciAmJiB0aGlzLnVuaWNvZGUgPT09IHVuaWNvZGUgJiYgdGhpcy5hY2NlbnQgPT09IGFjY2VudCAmJiB0aGlzLndpZHRoID09PSB3aWR0aCAmJiB0aGlzLnZtZXRyaWMgPT09IHZtZXRyaWMgJiYgdGhpcy5vcGVyYXRvckxpc3RJZCA9PT0gb3BlcmF0b3JMaXN0SWQgJiYgdGhpcy5pc1NwYWNlID09PSBpc1NwYWNlICYmIHRoaXMuaXNJbkZvbnQgPT09IGlzSW5Gb250O1xuICB9XG5cbn1cblxuZnVuY3Rpb24gaW50MTYoYjAsIGIxKSB7XG4gIHJldHVybiAoYjAgPDwgOCkgKyBiMTtcbn1cblxuZnVuY3Rpb24gd3JpdGVTaWduZWRJbnQxNihieXRlcywgaW5kZXgsIHZhbHVlKSB7XG4gIGJ5dGVzW2luZGV4ICsgMV0gPSB2YWx1ZTtcbiAgYnl0ZXNbaW5kZXhdID0gdmFsdWUgPj4+IDg7XG59XG5cbmZ1bmN0aW9uIHNpZ25lZEludDE2KGIwLCBiMSkge1xuICBjb25zdCB2YWx1ZSA9IChiMCA8PCA4KSArIGIxO1xuICByZXR1cm4gdmFsdWUgJiAxIDw8IDE1ID8gdmFsdWUgLSAweDEwMDAwIDogdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGludDMyKGIwLCBiMSwgYjIsIGIzKSB7XG4gIHJldHVybiAoYjAgPDwgMjQpICsgKGIxIDw8IDE2KSArIChiMiA8PCA4KSArIGIzO1xufVxuXG5mdW5jdGlvbiBzdHJpbmcxNih2YWx1ZSkge1xuICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh2YWx1ZSA+PiA4ICYgMHhmZiwgdmFsdWUgJiAweGZmKTtcbn1cblxuZnVuY3Rpb24gc2FmZVN0cmluZzE2KHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA+IDB4N2ZmZikge1xuICAgIHZhbHVlID0gMHg3ZmZmO1xuICB9IGVsc2UgaWYgKHZhbHVlIDwgLTB4ODAwMCkge1xuICAgIHZhbHVlID0gLTB4ODAwMDtcbiAgfVxuXG4gIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHZhbHVlID4+IDggJiAweGZmLCB2YWx1ZSAmIDB4ZmYpO1xufVxuXG5mdW5jdGlvbiBpc1RydWVUeXBlRmlsZShmaWxlKSB7XG4gIGNvbnN0IGhlYWRlciA9IGZpbGUucGVla0J5dGVzKDQpO1xuICByZXR1cm4gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGhlYWRlciwgMCkgPT09IDB4MDAwMTAwMDAgfHwgKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGhlYWRlcikgPT09IFwidHJ1ZVwiO1xufVxuXG5mdW5jdGlvbiBpc1RydWVUeXBlQ29sbGVjdGlvbkZpbGUoZmlsZSkge1xuICBjb25zdCBoZWFkZXIgPSBmaWxlLnBlZWtCeXRlcyg0KTtcbiAgcmV0dXJuICgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKShoZWFkZXIpID09PSBcInR0Y2ZcIjtcbn1cblxuZnVuY3Rpb24gaXNPcGVuVHlwZUZpbGUoZmlsZSkge1xuICBjb25zdCBoZWFkZXIgPSBmaWxlLnBlZWtCeXRlcyg0KTtcbiAgcmV0dXJuICgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKShoZWFkZXIpID09PSBcIk9UVE9cIjtcbn1cblxuZnVuY3Rpb24gaXNUeXBlMUZpbGUoZmlsZSkge1xuICBjb25zdCBoZWFkZXIgPSBmaWxlLnBlZWtCeXRlcygyKTtcblxuICBpZiAoaGVhZGVyWzBdID09PSAweDI1ICYmIGhlYWRlclsxXSA9PT0gMHgyMSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGhlYWRlclswXSA9PT0gMHg4MCAmJiBoZWFkZXJbMV0gPT09IDB4MDEpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNDRkZGaWxlKGZpbGUpIHtcbiAgY29uc3QgaGVhZGVyID0gZmlsZS5wZWVrQnl0ZXMoNCk7XG5cbiAgaWYgKGhlYWRlclswXSA+PSAxICYmIGhlYWRlclszXSA+PSAxICYmIGhlYWRlclszXSA8PSA0KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldEZvbnRGaWxlVHlwZShmaWxlLCB7XG4gIHR5cGUsXG4gIHN1YnR5cGUsXG4gIGNvbXBvc2l0ZVxufSkge1xuICBsZXQgZmlsZVR5cGUsIGZpbGVTdWJ0eXBlO1xuXG4gIGlmIChpc1RydWVUeXBlRmlsZShmaWxlKSB8fCBpc1RydWVUeXBlQ29sbGVjdGlvbkZpbGUoZmlsZSkpIHtcbiAgICBpZiAoY29tcG9zaXRlKSB7XG4gICAgICBmaWxlVHlwZSA9IFwiQ0lERm9udFR5cGUyXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbGVUeXBlID0gXCJUcnVlVHlwZVwiO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09wZW5UeXBlRmlsZShmaWxlKSkge1xuICAgIGlmIChjb21wb3NpdGUpIHtcbiAgICAgIGZpbGVUeXBlID0gXCJDSURGb250VHlwZTJcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsZVR5cGUgPSBcIk9wZW5UeXBlXCI7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzVHlwZTFGaWxlKGZpbGUpKSB7XG4gICAgaWYgKGNvbXBvc2l0ZSkge1xuICAgICAgZmlsZVR5cGUgPSBcIkNJREZvbnRUeXBlMFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWxlVHlwZSA9IHR5cGUgPT09IFwiTU1UeXBlMVwiID8gXCJNTVR5cGUxXCIgOiBcIlR5cGUxXCI7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzQ0ZGRmlsZShmaWxlKSkge1xuICAgIGlmIChjb21wb3NpdGUpIHtcbiAgICAgIGZpbGVUeXBlID0gXCJDSURGb250VHlwZTBcIjtcbiAgICAgIGZpbGVTdWJ0eXBlID0gXCJDSURGb250VHlwZTBDXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbGVUeXBlID0gdHlwZSA9PT0gXCJNTVR5cGUxXCIgPyBcIk1NVHlwZTFcIiA6IFwiVHlwZTFcIjtcbiAgICAgIGZpbGVTdWJ0eXBlID0gXCJUeXBlMUNcIjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgKDAsIF91dGlsLndhcm4pKFwiZ2V0Rm9udEZpbGVUeXBlOiBVbmFibGUgdG8gZGV0ZWN0IGNvcnJlY3QgZm9udCBmaWxlIFR5cGUvU3VidHlwZS5cIik7XG4gICAgZmlsZVR5cGUgPSB0eXBlO1xuICAgIGZpbGVTdWJ0eXBlID0gc3VidHlwZTtcbiAgfVxuXG4gIHJldHVybiBbZmlsZVR5cGUsIGZpbGVTdWJ0eXBlXTtcbn1cblxuZnVuY3Rpb24gYXBwbHlTdGFuZGFyZEZvbnRHbHlwaE1hcChtYXAsIGdseXBoTWFwKSB7XG4gIGZvciAoY29uc3QgY2hhckNvZGUgaW4gZ2x5cGhNYXApIHtcbiAgICBtYXBbK2NoYXJDb2RlXSA9IGdseXBoTWFwW2NoYXJDb2RlXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZFRvRm9udENoYXIoZW5jb2RpbmcsIGdseXBoc1VuaWNvZGVNYXAsIGRpZmZlcmVuY2VzKSB7XG4gIGNvbnN0IHRvRm9udENoYXIgPSBbXTtcbiAgbGV0IHVuaWNvZGU7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGlpID0gZW5jb2RpbmcubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgIHVuaWNvZGUgPSAoMCwgX3VuaWNvZGUuZ2V0VW5pY29kZUZvckdseXBoKShlbmNvZGluZ1tpXSwgZ2x5cGhzVW5pY29kZU1hcCk7XG5cbiAgICBpZiAodW5pY29kZSAhPT0gLTEpIHtcbiAgICAgIHRvRm9udENoYXJbaV0gPSB1bmljb2RlO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgY2hhckNvZGUgaW4gZGlmZmVyZW5jZXMpIHtcbiAgICB1bmljb2RlID0gKDAsIF91bmljb2RlLmdldFVuaWNvZGVGb3JHbHlwaCkoZGlmZmVyZW5jZXNbY2hhckNvZGVdLCBnbHlwaHNVbmljb2RlTWFwKTtcblxuICAgIGlmICh1bmljb2RlICE9PSAtMSkge1xuICAgICAgdG9Gb250Q2hhclsrY2hhckNvZGVdID0gdW5pY29kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdG9Gb250Q2hhcjtcbn1cblxuZnVuY3Rpb24gY29udmVydENpZFN0cmluZyhjaGFyQ29kZSwgY2lkLCBzaG91bGRUaHJvdyA9IGZhbHNlKSB7XG4gIHN3aXRjaCAoY2lkLmxlbmd0aCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBjaWQuY2hhckNvZGVBdCgwKTtcblxuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiBjaWQuY2hhckNvZGVBdCgwKSA8PCA4IHwgY2lkLmNoYXJDb2RlQXQoMSk7XG4gIH1cblxuICBjb25zdCBtc2cgPSBgVW5zdXBwb3J0ZWQgQ0lEIHN0cmluZyAoY2hhckNvZGUgJHtjaGFyQ29kZX0pOiBcIiR7Y2lkfVwiLmA7XG5cbiAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKG1zZyk7XG4gIH1cblxuICAoMCwgX3V0aWwud2FybikobXNnKTtcbiAgcmV0dXJuIGNpZDtcbn1cblxuZnVuY3Rpb24gYWRqdXN0TWFwcGluZyhjaGFyQ29kZVRvR2x5cGhJZCwgaGFzR2x5cGgsIG5ld0dseXBoWmVyb0lkKSB7XG4gIGNvbnN0IG5ld01hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGNvbnN0IHRvRm9udENoYXIgPSBbXTtcbiAgbGV0IHByaXZhdGVVc2VBcmVhSW5kZXggPSAwO1xuICBsZXQgbmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZSA9IFBSSVZBVEVfVVNFX0FSRUFTW3ByaXZhdGVVc2VBcmVhSW5kZXhdWzBdO1xuICBsZXQgcHJpdmF0ZVVzZU9mZmV0RW5kID0gUFJJVkFURV9VU0VfQVJFQVNbcHJpdmF0ZVVzZUFyZWFJbmRleF1bMV07XG5cbiAgZm9yIChsZXQgb3JpZ2luYWxDaGFyQ29kZSBpbiBjaGFyQ29kZVRvR2x5cGhJZCkge1xuICAgIG9yaWdpbmFsQ2hhckNvZGUgfD0gMDtcbiAgICBsZXQgZ2x5cGhJZCA9IGNoYXJDb2RlVG9HbHlwaElkW29yaWdpbmFsQ2hhckNvZGVdO1xuXG4gICAgaWYgKCFoYXNHbHlwaChnbHlwaElkKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5leHRBdmFpbGFibGVGb250Q2hhckNvZGUgPiBwcml2YXRlVXNlT2ZmZXRFbmQpIHtcbiAgICAgIHByaXZhdGVVc2VBcmVhSW5kZXgrKztcblxuICAgICAgaWYgKHByaXZhdGVVc2VBcmVhSW5kZXggPj0gUFJJVkFURV9VU0VfQVJFQVMubGVuZ3RoKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIlJhbiBvdXQgb2Ygc3BhY2UgaW4gZm9udCBwcml2YXRlIHVzZSBhcmVhLlwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIG5leHRBdmFpbGFibGVGb250Q2hhckNvZGUgPSBQUklWQVRFX1VTRV9BUkVBU1twcml2YXRlVXNlQXJlYUluZGV4XVswXTtcbiAgICAgIHByaXZhdGVVc2VPZmZldEVuZCA9IFBSSVZBVEVfVVNFX0FSRUFTW3ByaXZhdGVVc2VBcmVhSW5kZXhdWzFdO1xuICAgIH1cblxuICAgIGNvbnN0IGZvbnRDaGFyQ29kZSA9IG5leHRBdmFpbGFibGVGb250Q2hhckNvZGUrKztcblxuICAgIGlmIChnbHlwaElkID09PSAwKSB7XG4gICAgICBnbHlwaElkID0gbmV3R2x5cGhaZXJvSWQ7XG4gICAgfVxuXG4gICAgbmV3TWFwW2ZvbnRDaGFyQ29kZV0gPSBnbHlwaElkO1xuICAgIHRvRm9udENoYXJbb3JpZ2luYWxDaGFyQ29kZV0gPSBmb250Q2hhckNvZGU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvRm9udENoYXIsXG4gICAgY2hhckNvZGVUb0dseXBoSWQ6IG5ld01hcCxcbiAgICBuZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFJhbmdlcyhnbHlwaHMsIG51bUdseXBocykge1xuICBjb25zdCBjb2RlcyA9IFtdO1xuXG4gIGZvciAoY29uc3QgY2hhckNvZGUgaW4gZ2x5cGhzKSB7XG4gICAgaWYgKGdseXBoc1tjaGFyQ29kZV0gPj0gbnVtR2x5cGhzKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb2Rlcy5wdXNoKHtcbiAgICAgIGZvbnRDaGFyQ29kZTogY2hhckNvZGUgfCAwLFxuICAgICAgZ2x5cGhJZDogZ2x5cGhzW2NoYXJDb2RlXVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGNvZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvZGVzLnB1c2goe1xuICAgICAgZm9udENoYXJDb2RlOiAwLFxuICAgICAgZ2x5cGhJZDogMFxuICAgIH0pO1xuICB9XG5cbiAgY29kZXMuc29ydChmdW5jdGlvbiBmb250R2V0UmFuZ2VzU29ydChhLCBiKSB7XG4gICAgcmV0dXJuIGEuZm9udENoYXJDb2RlIC0gYi5mb250Q2hhckNvZGU7XG4gIH0pO1xuICBjb25zdCByYW5nZXMgPSBbXTtcbiAgY29uc3QgbGVuZ3RoID0gY29kZXMubGVuZ3RoO1xuXG4gIGZvciAobGV0IG4gPSAwOyBuIDwgbGVuZ3RoOykge1xuICAgIGNvbnN0IHN0YXJ0ID0gY29kZXNbbl0uZm9udENoYXJDb2RlO1xuICAgIGNvbnN0IGNvZGVJbmRpY2VzID0gW2NvZGVzW25dLmdseXBoSWRdO1xuICAgICsrbjtcbiAgICBsZXQgZW5kID0gc3RhcnQ7XG5cbiAgICB3aGlsZSAobiA8IGxlbmd0aCAmJiBlbmQgKyAxID09PSBjb2Rlc1tuXS5mb250Q2hhckNvZGUpIHtcbiAgICAgIGNvZGVJbmRpY2VzLnB1c2goY29kZXNbbl0uZ2x5cGhJZCk7XG4gICAgICArK2VuZDtcbiAgICAgICsrbjtcblxuICAgICAgaWYgKGVuZCA9PT0gMHhmZmZmKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJhbmdlcy5wdXNoKFtzdGFydCwgZW5kLCBjb2RlSW5kaWNlc10pO1xuICB9XG5cbiAgcmV0dXJuIHJhbmdlcztcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ21hcFRhYmxlKGdseXBocywgbnVtR2x5cGhzKSB7XG4gIGNvbnN0IHJhbmdlcyA9IGdldFJhbmdlcyhnbHlwaHMsIG51bUdseXBocyk7XG4gIGNvbnN0IG51bVRhYmxlcyA9IHJhbmdlc1tyYW5nZXMubGVuZ3RoIC0gMV1bMV0gPiAweGZmZmYgPyAyIDogMTtcbiAgbGV0IGNtYXAgPSBcIlxceDAwXFx4MDBcIiArIHN0cmluZzE2KG51bVRhYmxlcykgKyBcIlxceDAwXFx4MDNcIiArIFwiXFx4MDBcXHgwMVwiICsgKDAsIF91dGlsLnN0cmluZzMyKSg0ICsgbnVtVGFibGVzICogOCk7XG4gIGxldCBpLCBpaSwgaiwgamo7XG5cbiAgZm9yIChpID0gcmFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgaWYgKHJhbmdlc1tpXVswXSA8PSAweGZmZmYpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGJtcExlbmd0aCA9IGkgKyAxO1xuXG4gIGlmIChyYW5nZXNbaV1bMF0gPCAweGZmZmYgJiYgcmFuZ2VzW2ldWzFdID09PSAweGZmZmYpIHtcbiAgICByYW5nZXNbaV1bMV0gPSAweGZmZmU7XG4gIH1cblxuICBjb25zdCB0cmFpbGluZ1Jhbmdlc0NvdW50ID0gcmFuZ2VzW2ldWzFdIDwgMHhmZmZmID8gMSA6IDA7XG4gIGNvbnN0IHNlZ0NvdW50ID0gYm1wTGVuZ3RoICsgdHJhaWxpbmdSYW5nZXNDb3VudDtcblxuICBjb25zdCBzZWFyY2hQYXJhbXMgPSBfb3BlbnR5cGVfZmlsZV9idWlsZGVyLk9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zKHNlZ0NvdW50LCAyKTtcblxuICBsZXQgc3RhcnRDb3VudCA9IFwiXCI7XG4gIGxldCBlbmRDb3VudCA9IFwiXCI7XG4gIGxldCBpZERlbHRhcyA9IFwiXCI7XG4gIGxldCBpZFJhbmdlT2Zmc2V0cyA9IFwiXCI7XG4gIGxldCBnbHlwaHNJZHMgPSBcIlwiO1xuICBsZXQgYmlhcyA9IDA7XG4gIGxldCByYW5nZSwgc3RhcnQsIGVuZCwgY29kZXM7XG5cbiAgZm9yIChpID0gMCwgaWkgPSBibXBMZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgcmFuZ2UgPSByYW5nZXNbaV07XG4gICAgc3RhcnQgPSByYW5nZVswXTtcbiAgICBlbmQgPSByYW5nZVsxXTtcbiAgICBzdGFydENvdW50ICs9IHN0cmluZzE2KHN0YXJ0KTtcbiAgICBlbmRDb3VudCArPSBzdHJpbmcxNihlbmQpO1xuICAgIGNvZGVzID0gcmFuZ2VbMl07XG4gICAgbGV0IGNvbnRpZ3VvdXMgPSB0cnVlO1xuXG4gICAgZm9yIChqID0gMSwgamogPSBjb2Rlcy5sZW5ndGg7IGogPCBqajsgKytqKSB7XG4gICAgICBpZiAoY29kZXNbal0gIT09IGNvZGVzW2ogLSAxXSArIDEpIHtcbiAgICAgICAgY29udGlndW91cyA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWNvbnRpZ3VvdXMpIHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IChzZWdDb3VudCAtIGkpICogMiArIGJpYXMgKiAyO1xuICAgICAgYmlhcyArPSBlbmQgLSBzdGFydCArIDE7XG4gICAgICBpZERlbHRhcyArPSBzdHJpbmcxNigwKTtcbiAgICAgIGlkUmFuZ2VPZmZzZXRzICs9IHN0cmluZzE2KG9mZnNldCk7XG5cbiAgICAgIGZvciAoaiA9IDAsIGpqID0gY29kZXMubGVuZ3RoOyBqIDwgamo7ICsraikge1xuICAgICAgICBnbHlwaHNJZHMgKz0gc3RyaW5nMTYoY29kZXNbal0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdGFydENvZGUgPSBjb2Rlc1swXTtcbiAgICAgIGlkRGVsdGFzICs9IHN0cmluZzE2KHN0YXJ0Q29kZSAtIHN0YXJ0ICYgMHhmZmZmKTtcbiAgICAgIGlkUmFuZ2VPZmZzZXRzICs9IHN0cmluZzE2KDApO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0cmFpbGluZ1Jhbmdlc0NvdW50ID4gMCkge1xuICAgIGVuZENvdW50ICs9IFwiXFx4RkZcXHhGRlwiO1xuICAgIHN0YXJ0Q291bnQgKz0gXCJcXHhGRlxceEZGXCI7XG4gICAgaWREZWx0YXMgKz0gXCJcXHgwMFxceDAxXCI7XG4gICAgaWRSYW5nZU9mZnNldHMgKz0gXCJcXHgwMFxceDAwXCI7XG4gIH1cblxuICBjb25zdCBmb3JtYXQzMTQgPSBcIlxceDAwXFx4MDBcIiArIHN0cmluZzE2KDIgKiBzZWdDb3VudCkgKyBzdHJpbmcxNihzZWFyY2hQYXJhbXMucmFuZ2UpICsgc3RyaW5nMTYoc2VhcmNoUGFyYW1zLmVudHJ5KSArIHN0cmluZzE2KHNlYXJjaFBhcmFtcy5yYW5nZVNoaWZ0KSArIGVuZENvdW50ICsgXCJcXHgwMFxceDAwXCIgKyBzdGFydENvdW50ICsgaWREZWx0YXMgKyBpZFJhbmdlT2Zmc2V0cyArIGdseXBoc0lkcztcbiAgbGV0IGZvcm1hdDMxMDEyID0gXCJcIjtcbiAgbGV0IGhlYWRlcjMxMDEyID0gXCJcIjtcblxuICBpZiAobnVtVGFibGVzID4gMSkge1xuICAgIGNtYXAgKz0gXCJcXHgwMFxceDAzXCIgKyBcIlxceDAwXFx4MEFcIiArICgwLCBfdXRpbC5zdHJpbmczMikoNCArIG51bVRhYmxlcyAqIDggKyA0ICsgZm9ybWF0MzE0Lmxlbmd0aCk7XG4gICAgZm9ybWF0MzEwMTIgPSBcIlwiO1xuXG4gICAgZm9yIChpID0gMCwgaWkgPSByYW5nZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgcmFuZ2UgPSByYW5nZXNbaV07XG4gICAgICBzdGFydCA9IHJhbmdlWzBdO1xuICAgICAgY29kZXMgPSByYW5nZVsyXTtcbiAgICAgIGxldCBjb2RlID0gY29kZXNbMF07XG5cbiAgICAgIGZvciAoaiA9IDEsIGpqID0gY29kZXMubGVuZ3RoOyBqIDwgamo7ICsraikge1xuICAgICAgICBpZiAoY29kZXNbal0gIT09IGNvZGVzW2ogLSAxXSArIDEpIHtcbiAgICAgICAgICBlbmQgPSByYW5nZVswXSArIGogLSAxO1xuICAgICAgICAgIGZvcm1hdDMxMDEyICs9ICgwLCBfdXRpbC5zdHJpbmczMikoc3RhcnQpICsgKDAsIF91dGlsLnN0cmluZzMyKShlbmQpICsgKDAsIF91dGlsLnN0cmluZzMyKShjb2RlKTtcbiAgICAgICAgICBzdGFydCA9IGVuZCArIDE7XG4gICAgICAgICAgY29kZSA9IGNvZGVzW2pdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvcm1hdDMxMDEyICs9ICgwLCBfdXRpbC5zdHJpbmczMikoc3RhcnQpICsgKDAsIF91dGlsLnN0cmluZzMyKShyYW5nZVsxXSkgKyAoMCwgX3V0aWwuc3RyaW5nMzIpKGNvZGUpO1xuICAgIH1cblxuICAgIGhlYWRlcjMxMDEyID0gXCJcXHgwMFxceDBDXCIgKyBcIlxceDAwXFx4MDBcIiArICgwLCBfdXRpbC5zdHJpbmczMikoZm9ybWF0MzEwMTIubGVuZ3RoICsgMTYpICsgXCJcXHgwMFxceDAwXFx4MDBcXHgwMFwiICsgKDAsIF91dGlsLnN0cmluZzMyKShmb3JtYXQzMTAxMi5sZW5ndGggLyAxMik7XG4gIH1cblxuICByZXR1cm4gY21hcCArIFwiXFx4MDBcXHgwNFwiICsgc3RyaW5nMTYoZm9ybWF0MzE0Lmxlbmd0aCArIDQpICsgZm9ybWF0MzE0ICsgaGVhZGVyMzEwMTIgKyBmb3JtYXQzMTAxMjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVPUzJUYWJsZShvczIsIGZpbGUpIHtcbiAgZmlsZS5wb3MgPSAoZmlsZS5zdGFydCB8fCAwKSArIG9zMi5vZmZzZXQ7XG4gIGNvbnN0IHZlcnNpb24gPSBmaWxlLmdldFVpbnQxNigpO1xuICBmaWxlLnNraXAoNjApO1xuICBjb25zdCBzZWxlY3Rpb24gPSBmaWxlLmdldFVpbnQxNigpO1xuXG4gIGlmICh2ZXJzaW9uIDwgNCAmJiBzZWxlY3Rpb24gJiAweDAzMDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBmaXJzdENoYXIgPSBmaWxlLmdldFVpbnQxNigpO1xuICBjb25zdCBsYXN0Q2hhciA9IGZpbGUuZ2V0VWludDE2KCk7XG5cbiAgaWYgKGZpcnN0Q2hhciA+IGxhc3RDaGFyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZmlsZS5za2lwKDYpO1xuICBjb25zdCB1c1dpbkFzY2VudCA9IGZpbGUuZ2V0VWludDE2KCk7XG5cbiAgaWYgKHVzV2luQXNjZW50ID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgb3MyLmRhdGFbOF0gPSBvczIuZGF0YVs5XSA9IDA7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPUzJUYWJsZShwcm9wZXJ0aWVzLCBjaGFyc3RyaW5ncywgb3ZlcnJpZGUpIHtcbiAgb3ZlcnJpZGUgPSBvdmVycmlkZSB8fCB7XG4gICAgdW5pdHNQZXJFbTogMCxcbiAgICB5TWF4OiAwLFxuICAgIHlNaW46IDAsXG4gICAgYXNjZW50OiAwLFxuICAgIGRlc2NlbnQ6IDBcbiAgfTtcbiAgbGV0IHVsVW5pY29kZVJhbmdlMSA9IDA7XG4gIGxldCB1bFVuaWNvZGVSYW5nZTIgPSAwO1xuICBsZXQgdWxVbmljb2RlUmFuZ2UzID0gMDtcbiAgbGV0IHVsVW5pY29kZVJhbmdlNCA9IDA7XG4gIGxldCBmaXJzdENoYXJJbmRleCA9IG51bGw7XG4gIGxldCBsYXN0Q2hhckluZGV4ID0gMDtcblxuICBpZiAoY2hhcnN0cmluZ3MpIHtcbiAgICBmb3IgKGxldCBjb2RlIGluIGNoYXJzdHJpbmdzKSB7XG4gICAgICBjb2RlIHw9IDA7XG5cbiAgICAgIGlmIChmaXJzdENoYXJJbmRleCA+IGNvZGUgfHwgIWZpcnN0Q2hhckluZGV4KSB7XG4gICAgICAgIGZpcnN0Q2hhckluZGV4ID0gY29kZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGxhc3RDaGFySW5kZXggPCBjb2RlKSB7XG4gICAgICAgIGxhc3RDaGFySW5kZXggPSBjb2RlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwb3NpdGlvbiA9ICgwLCBfdW5pY29kZS5nZXRVbmljb2RlUmFuZ2VGb3IpKGNvZGUpO1xuXG4gICAgICBpZiAocG9zaXRpb24gPCAzMikge1xuICAgICAgICB1bFVuaWNvZGVSYW5nZTEgfD0gMSA8PCBwb3NpdGlvbjtcbiAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPCA2NCkge1xuICAgICAgICB1bFVuaWNvZGVSYW5nZTIgfD0gMSA8PCBwb3NpdGlvbiAtIDMyO1xuICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA8IDk2KSB7XG4gICAgICAgIHVsVW5pY29kZVJhbmdlMyB8PSAxIDw8IHBvc2l0aW9uIC0gNjQ7XG4gICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uIDwgMTIzKSB7XG4gICAgICAgIHVsVW5pY29kZVJhbmdlNCB8PSAxIDw8IHBvc2l0aW9uIC0gOTY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJVbmljb2RlIHJhbmdlcyBCaXRzID4gMTIzIGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNhZ2VcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxhc3RDaGFySW5kZXggPiAweGZmZmYpIHtcbiAgICAgIGxhc3RDaGFySW5kZXggPSAweGZmZmY7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZpcnN0Q2hhckluZGV4ID0gMDtcbiAgICBsYXN0Q2hhckluZGV4ID0gMjU1O1xuICB9XG5cbiAgY29uc3QgYmJveCA9IHByb3BlcnRpZXMuYmJveCB8fCBbMCwgMCwgMCwgMF07XG4gIGNvbnN0IHVuaXRzUGVyRW0gPSBvdmVycmlkZS51bml0c1BlckVtIHx8IDEgLyAocHJvcGVydGllcy5mb250TWF0cml4IHx8IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYKVswXTtcbiAgY29uc3Qgc2NhbGUgPSBwcm9wZXJ0aWVzLmFzY2VudFNjYWxlZCA/IDEuMCA6IHVuaXRzUGVyRW0gLyBQREZfR0xZUEhfU1BBQ0VfVU5JVFM7XG4gIGNvbnN0IHR5cG9Bc2NlbnQgPSBvdmVycmlkZS5hc2NlbnQgfHwgTWF0aC5yb3VuZChzY2FsZSAqIChwcm9wZXJ0aWVzLmFzY2VudCB8fCBiYm94WzNdKSk7XG4gIGxldCB0eXBvRGVzY2VudCA9IG92ZXJyaWRlLmRlc2NlbnQgfHwgTWF0aC5yb3VuZChzY2FsZSAqIChwcm9wZXJ0aWVzLmRlc2NlbnQgfHwgYmJveFsxXSkpO1xuXG4gIGlmICh0eXBvRGVzY2VudCA+IDAgJiYgcHJvcGVydGllcy5kZXNjZW50ID4gMCAmJiBiYm94WzFdIDwgMCkge1xuICAgIHR5cG9EZXNjZW50ID0gLXR5cG9EZXNjZW50O1xuICB9XG5cbiAgY29uc3Qgd2luQXNjZW50ID0gb3ZlcnJpZGUueU1heCB8fCB0eXBvQXNjZW50O1xuICBjb25zdCB3aW5EZXNjZW50ID0gLW92ZXJyaWRlLnlNaW4gfHwgLXR5cG9EZXNjZW50O1xuICByZXR1cm4gXCJcXHgwMFxceDAzXCIgKyBcIlxceDAyXFx4MjRcIiArIFwiXFx4MDFcXHhGNFwiICsgXCJcXHgwMFxceDA1XCIgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4MDJcXHg4QVwiICsgXCJcXHgwMlxceEJCXCIgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHg4Q1wiICsgXCJcXHgwMlxceDhBXCIgKyBcIlxceDAyXFx4QkJcIiArIFwiXFx4MDBcXHgwMFwiICsgXCJcXHgwMVxceERGXCIgKyBcIlxceDAwXFx4MzFcIiArIFwiXFx4MDFcXHgwMlwiICsgXCJcXHgwMFxceDAwXCIgKyBcIlxceDAwXFx4MDBcXHgwNlwiICsgU3RyaW5nLmZyb21DaGFyQ29kZShwcm9wZXJ0aWVzLmZpeGVkUGl0Y2ggPyAweDA5IDogMHgwMCkgKyBcIlxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFwiICsgKDAsIF91dGlsLnN0cmluZzMyKSh1bFVuaWNvZGVSYW5nZTEpICsgKDAsIF91dGlsLnN0cmluZzMyKSh1bFVuaWNvZGVSYW5nZTIpICsgKDAsIF91dGlsLnN0cmluZzMyKSh1bFVuaWNvZGVSYW5nZTMpICsgKDAsIF91dGlsLnN0cmluZzMyKSh1bFVuaWNvZGVSYW5nZTQpICsgXCJcXHgyQVxceDMyXFx4MzFcXHgyQVwiICsgc3RyaW5nMTYocHJvcGVydGllcy5pdGFsaWNBbmdsZSA/IDEgOiAwKSArIHN0cmluZzE2KGZpcnN0Q2hhckluZGV4IHx8IHByb3BlcnRpZXMuZmlyc3RDaGFyKSArIHN0cmluZzE2KGxhc3RDaGFySW5kZXggfHwgcHJvcGVydGllcy5sYXN0Q2hhcikgKyBzdHJpbmcxNih0eXBvQXNjZW50KSArIHN0cmluZzE2KHR5cG9EZXNjZW50KSArIFwiXFx4MDBcXHg2NFwiICsgc3RyaW5nMTYod2luQXNjZW50KSArIHN0cmluZzE2KHdpbkRlc2NlbnQpICsgXCJcXHgwMFxceDAwXFx4MDBcXHgwMFwiICsgXCJcXHgwMFxceDAwXFx4MDBcXHgwMFwiICsgc3RyaW5nMTYocHJvcGVydGllcy54SGVpZ2h0KSArIHN0cmluZzE2KHByb3BlcnRpZXMuY2FwSGVpZ2h0KSArIHN0cmluZzE2KDApICsgc3RyaW5nMTYoZmlyc3RDaGFySW5kZXggfHwgcHJvcGVydGllcy5maXJzdENoYXIpICsgXCJcXHgwMFxceDAzXCI7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBvc3RUYWJsZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IGFuZ2xlID0gTWF0aC5mbG9vcihwcm9wZXJ0aWVzLml0YWxpY0FuZ2xlICogMiAqKiAxNik7XG4gIHJldHVybiBcIlxceDAwXFx4MDNcXHgwMFxceDAwXCIgKyAoMCwgX3V0aWwuc3RyaW5nMzIpKGFuZ2xlKSArIFwiXFx4MDBcXHgwMFwiICsgXCJcXHgwMFxceDAwXCIgKyAoMCwgX3V0aWwuc3RyaW5nMzIpKHByb3BlcnRpZXMuZml4ZWRQaXRjaCA/IDEgOiAwKSArIFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcIjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUG9zdHNjcmlwdE5hbWUobmFtZSkge1xuICByZXR1cm4gbmFtZS5yZXBsYWNlKC9bXlxceDIxLVxceDdFXXxbW1xcXSgpe308Pi8lXS9nLCBcIlwiKS5zbGljZSgwLCA2Myk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU5hbWVUYWJsZShuYW1lLCBwcm90bykge1xuICBpZiAoIXByb3RvKSB7XG4gICAgcHJvdG8gPSBbW10sIFtdXTtcbiAgfVxuXG4gIGNvbnN0IHN0cmluZ3MgPSBbcHJvdG9bMF1bMF0gfHwgXCJPcmlnaW5hbCBsaWNlbmNlXCIsIHByb3RvWzBdWzFdIHx8IG5hbWUsIHByb3RvWzBdWzJdIHx8IFwiVW5rbm93blwiLCBwcm90b1swXVszXSB8fCBcInVuaXF1ZUlEXCIsIHByb3RvWzBdWzRdIHx8IG5hbWUsIHByb3RvWzBdWzVdIHx8IFwiVmVyc2lvbiAwLjExXCIsIHByb3RvWzBdWzZdIHx8IGNyZWF0ZVBvc3RzY3JpcHROYW1lKG5hbWUpLCBwcm90b1swXVs3XSB8fCBcIlVua25vd25cIiwgcHJvdG9bMF1bOF0gfHwgXCJVbmtub3duXCIsIHByb3RvWzBdWzldIHx8IFwiVW5rbm93blwiXTtcbiAgY29uc3Qgc3RyaW5nc1VuaWNvZGUgPSBbXTtcbiAgbGV0IGksIGlpLCBqLCBqaiwgc3RyO1xuXG4gIGZvciAoaSA9IDAsIGlpID0gc3RyaW5ncy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgc3RyID0gcHJvdG9bMV1baV0gfHwgc3RyaW5nc1tpXTtcbiAgICBjb25zdCBzdHJCdWZVbmljb2RlID0gW107XG5cbiAgICBmb3IgKGogPSAwLCBqaiA9IHN0ci5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICBzdHJCdWZVbmljb2RlLnB1c2goc3RyaW5nMTYoc3RyLmNoYXJDb2RlQXQoaikpKTtcbiAgICB9XG5cbiAgICBzdHJpbmdzVW5pY29kZS5wdXNoKHN0ckJ1ZlVuaWNvZGUuam9pbihcIlwiKSk7XG4gIH1cblxuICBjb25zdCBuYW1lcyA9IFtzdHJpbmdzLCBzdHJpbmdzVW5pY29kZV07XG4gIGNvbnN0IHBsYXRmb3JtcyA9IFtcIlxceDAwXFx4MDFcIiwgXCJcXHgwMFxceDAzXCJdO1xuICBjb25zdCBlbmNvZGluZ3MgPSBbXCJcXHgwMFxceDAwXCIsIFwiXFx4MDBcXHgwMVwiXTtcbiAgY29uc3QgbGFuZ3VhZ2VzID0gW1wiXFx4MDBcXHgwMFwiLCBcIlxceDA0XFx4MDlcIl07XG4gIGNvbnN0IG5hbWVzUmVjb3JkQ291bnQgPSBzdHJpbmdzLmxlbmd0aCAqIHBsYXRmb3Jtcy5sZW5ndGg7XG4gIGxldCBuYW1lVGFibGUgPSBcIlxceDAwXFx4MDBcIiArIHN0cmluZzE2KG5hbWVzUmVjb3JkQ291bnQpICsgc3RyaW5nMTYobmFtZXNSZWNvcmRDb3VudCAqIDEyICsgNik7XG4gIGxldCBzdHJPZmZzZXQgPSAwO1xuXG4gIGZvciAoaSA9IDAsIGlpID0gcGxhdGZvcm1zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICBjb25zdCBzdHJzID0gbmFtZXNbaV07XG5cbiAgICBmb3IgKGogPSAwLCBqaiA9IHN0cnMubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgc3RyID0gc3Ryc1tqXTtcbiAgICAgIGNvbnN0IG5hbWVSZWNvcmQgPSBwbGF0Zm9ybXNbaV0gKyBlbmNvZGluZ3NbaV0gKyBsYW5ndWFnZXNbaV0gKyBzdHJpbmcxNihqKSArIHN0cmluZzE2KHN0ci5sZW5ndGgpICsgc3RyaW5nMTYoc3RyT2Zmc2V0KTtcbiAgICAgIG5hbWVUYWJsZSArPSBuYW1lUmVjb3JkO1xuICAgICAgc3RyT2Zmc2V0ICs9IHN0ci5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgbmFtZVRhYmxlICs9IHN0cmluZ3Muam9pbihcIlwiKSArIHN0cmluZ3NVbmljb2RlLmpvaW4oXCJcIik7XG4gIHJldHVybiBuYW1lVGFibGU7XG59XG5cbmNsYXNzIEZvbnQge1xuICBjb25zdHJ1Y3RvcihuYW1lLCBmaWxlLCBwcm9wZXJ0aWVzKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnBzTmFtZSA9IG51bGw7XG4gICAgdGhpcy5taW1ldHlwZSA9IG51bGw7XG4gICAgdGhpcy5kaXNhYmxlRm9udEZhY2UgPSBmYWxzZTtcbiAgICB0aGlzLmxvYWRlZE5hbWUgPSBwcm9wZXJ0aWVzLmxvYWRlZE5hbWU7XG4gICAgdGhpcy5pc1R5cGUzRm9udCA9IHByb3BlcnRpZXMuaXNUeXBlM0ZvbnQ7XG4gICAgdGhpcy5taXNzaW5nRmlsZSA9IGZhbHNlO1xuICAgIHRoaXMuY3NzRm9udEluZm8gPSBwcm9wZXJ0aWVzLmNzc0ZvbnRJbmZvO1xuICAgIHRoaXMuX2NoYXJzQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2dseXBoQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGxldCBpc1NlcmlmRm9udCA9ICEhKHByb3BlcnRpZXMuZmxhZ3MgJiBfZm9udHNfdXRpbHMuRm9udEZsYWdzLlNlcmlmKTtcblxuICAgIGlmICghaXNTZXJpZkZvbnQgJiYgIXByb3BlcnRpZXMuaXNTaW11bGF0ZWRGbGFncykge1xuICAgICAgY29uc3QgYmFzZU5hbWUgPSBuYW1lLnJlcGxhY2UoL1ssX10vZywgXCItXCIpLnNwbGl0KFwiLVwiKVswXSxcbiAgICAgICAgICAgIHNlcmlmRm9udHMgPSAoMCwgX3N0YW5kYXJkX2ZvbnRzLmdldFNlcmlmRm9udHMpKCk7XG5cbiAgICAgIGZvciAoY29uc3QgbmFtZVBhcnQgb2YgYmFzZU5hbWUuc3BsaXQoXCIrXCIpKSB7XG4gICAgICAgIGlmIChzZXJpZkZvbnRzW25hbWVQYXJ0XSkge1xuICAgICAgICAgIGlzU2VyaWZGb250ID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaXNTZXJpZkZvbnQgPSBpc1NlcmlmRm9udDtcbiAgICB0aGlzLmlzU3ltYm9saWNGb250ID0gISEocHJvcGVydGllcy5mbGFncyAmIF9mb250c191dGlscy5Gb250RmxhZ3MuU3ltYm9saWMpO1xuICAgIHRoaXMuaXNNb25vc3BhY2UgPSAhIShwcm9wZXJ0aWVzLmZsYWdzICYgX2ZvbnRzX3V0aWxzLkZvbnRGbGFncy5GaXhlZFBpdGNoKTtcbiAgICBsZXQgdHlwZSA9IHByb3BlcnRpZXMudHlwZTtcbiAgICBsZXQgc3VidHlwZSA9IHByb3BlcnRpZXMuc3VidHlwZTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuc3VidHlwZSA9IHN1YnR5cGU7XG4gICAgbGV0IGZhbGxiYWNrTmFtZSA9IFwic2Fucy1zZXJpZlwiO1xuXG4gICAgaWYgKHRoaXMuaXNNb25vc3BhY2UpIHtcbiAgICAgIGZhbGxiYWNrTmFtZSA9IFwibW9ub3NwYWNlXCI7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzU2VyaWZGb250KSB7XG4gICAgICBmYWxsYmFja05hbWUgPSBcInNlcmlmXCI7XG4gICAgfVxuXG4gICAgdGhpcy5mYWxsYmFja05hbWUgPSBmYWxsYmFja05hbWU7XG4gICAgdGhpcy5kaWZmZXJlbmNlcyA9IHByb3BlcnRpZXMuZGlmZmVyZW5jZXM7XG4gICAgdGhpcy53aWR0aHMgPSBwcm9wZXJ0aWVzLndpZHRocztcbiAgICB0aGlzLmRlZmF1bHRXaWR0aCA9IHByb3BlcnRpZXMuZGVmYXVsdFdpZHRoO1xuICAgIHRoaXMuY29tcG9zaXRlID0gcHJvcGVydGllcy5jb21wb3NpdGU7XG4gICAgdGhpcy5jTWFwID0gcHJvcGVydGllcy5jTWFwO1xuICAgIHRoaXMuY2FwSGVpZ2h0ID0gcHJvcGVydGllcy5jYXBIZWlnaHQgLyBQREZfR0xZUEhfU1BBQ0VfVU5JVFM7XG4gICAgdGhpcy5hc2NlbnQgPSBwcm9wZXJ0aWVzLmFzY2VudCAvIFBERl9HTFlQSF9TUEFDRV9VTklUUztcbiAgICB0aGlzLmRlc2NlbnQgPSBwcm9wZXJ0aWVzLmRlc2NlbnQgLyBQREZfR0xZUEhfU1BBQ0VfVU5JVFM7XG4gICAgdGhpcy5saW5lSGVpZ2h0ID0gdGhpcy5hc2NlbnQgLSB0aGlzLmRlc2NlbnQ7XG4gICAgdGhpcy5mb250TWF0cml4ID0gcHJvcGVydGllcy5mb250TWF0cml4O1xuICAgIHRoaXMuYmJveCA9IHByb3BlcnRpZXMuYmJveDtcbiAgICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IHByb3BlcnRpZXMuZGVmYXVsdEVuY29kaW5nO1xuICAgIHRoaXMudG9Vbmljb2RlID0gcHJvcGVydGllcy50b1VuaWNvZGU7XG4gICAgdGhpcy50b0ZvbnRDaGFyID0gW107XG5cbiAgICBpZiAocHJvcGVydGllcy50eXBlID09PSBcIlR5cGUzXCIpIHtcbiAgICAgIGZvciAobGV0IGNoYXJDb2RlID0gMDsgY2hhckNvZGUgPCAyNTY7IGNoYXJDb2RlKyspIHtcbiAgICAgICAgdGhpcy50b0ZvbnRDaGFyW2NoYXJDb2RlXSA9IHRoaXMuZGlmZmVyZW5jZXNbY2hhckNvZGVdIHx8IHByb3BlcnRpZXMuZGVmYXVsdEVuY29kaW5nW2NoYXJDb2RlXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5mb250VHlwZSA9IF91dGlsLkZvbnRUeXBlLlRZUEUzO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2lkRW5jb2RpbmcgPSBwcm9wZXJ0aWVzLmNpZEVuY29kaW5nIHx8IFwiXCI7XG4gICAgdGhpcy52ZXJ0aWNhbCA9ICEhcHJvcGVydGllcy52ZXJ0aWNhbDtcblxuICAgIGlmICh0aGlzLnZlcnRpY2FsKSB7XG4gICAgICB0aGlzLnZtZXRyaWNzID0gcHJvcGVydGllcy52bWV0cmljcztcbiAgICAgIHRoaXMuZGVmYXVsdFZNZXRyaWNzID0gcHJvcGVydGllcy5kZWZhdWx0Vk1ldHJpY3M7XG4gICAgfVxuXG4gICAgaWYgKCFmaWxlIHx8IGZpbGUuaXNFbXB0eSkge1xuICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKCdGb250IGZpbGUgaXMgZW1wdHkgaW4gXCInICsgbmFtZSArICdcIiAoJyArIHRoaXMubG9hZGVkTmFtZSArIFwiKVwiKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5mYWxsYmFja1RvU3lzdGVtRm9udChwcm9wZXJ0aWVzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBbdHlwZSwgc3VidHlwZV0gPSBnZXRGb250RmlsZVR5cGUoZmlsZSwgcHJvcGVydGllcyk7XG5cbiAgICBpZiAodHlwZSAhPT0gdGhpcy50eXBlIHx8IHN1YnR5cGUgIT09IHRoaXMuc3VidHlwZSkge1xuICAgICAgKDAsIF91dGlsLmluZm8pKFwiSW5jb25zaXN0ZW50IGZvbnQgZmlsZSBUeXBlL1N1YlR5cGUsIGV4cGVjdGVkOiBcIiArIGAke3RoaXMudHlwZX0vJHt0aGlzLnN1YnR5cGV9IGJ1dCBmb3VuZDogJHt0eXBlfS8ke3N1YnR5cGV9LmApO1xuICAgIH1cblxuICAgIGxldCBkYXRhO1xuXG4gICAgdHJ5IHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwiTU1UeXBlMVwiOlxuICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIk1NVHlwZTEgZm9udCAoXCIgKyBuYW1lICsgXCIpLCBmYWxsaW5nIGJhY2sgdG8gVHlwZTEuXCIpO1xuXG4gICAgICAgIGNhc2UgXCJUeXBlMVwiOlxuICAgICAgICBjYXNlIFwiQ0lERm9udFR5cGUwXCI6XG4gICAgICAgICAgdGhpcy5taW1ldHlwZSA9IFwiZm9udC9vcGVudHlwZVwiO1xuICAgICAgICAgIGNvbnN0IGNmZiA9IHN1YnR5cGUgPT09IFwiVHlwZTFDXCIgfHwgc3VidHlwZSA9PT0gXCJDSURGb250VHlwZTBDXCIgPyBuZXcgX2NmZl9mb250LkNGRkZvbnQoZmlsZSwgcHJvcGVydGllcykgOiBuZXcgX3R5cGUxX2ZvbnQuVHlwZTFGb250KG5hbWUsIGZpbGUsIHByb3BlcnRpZXMpO1xuICAgICAgICAgIGFkanVzdFdpZHRocyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgICBkYXRhID0gdGhpcy5jb252ZXJ0KG5hbWUsIGNmZiwgcHJvcGVydGllcyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIk9wZW5UeXBlXCI6XG4gICAgICAgIGNhc2UgXCJUcnVlVHlwZVwiOlxuICAgICAgICBjYXNlIFwiQ0lERm9udFR5cGUyXCI6XG4gICAgICAgICAgdGhpcy5taW1ldHlwZSA9IFwiZm9udC9vcGVudHlwZVwiO1xuICAgICAgICAgIGRhdGEgPSB0aGlzLmNoZWNrQW5kUmVwYWlyKG5hbWUsIGZpbGUsIHByb3BlcnRpZXMpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuaXNPcGVuVHlwZSkge1xuICAgICAgICAgICAgYWRqdXN0V2lkdGhzKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgdHlwZSA9IFwiT3BlblR5cGVcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgRm9udCAke3R5cGV9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoZSk7XG4gICAgICB0aGlzLmZhbGxiYWNrVG9TeXN0ZW1Gb250KHByb3BlcnRpZXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFtZW5kRmFsbGJhY2tUb1VuaWNvZGUocHJvcGVydGllcyk7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLmZvbnRUeXBlID0gKDAsIF9mb250c191dGlscy5nZXRGb250VHlwZSkodHlwZSwgc3VidHlwZSwgcHJvcGVydGllcy5pc1N0YW5kYXJkRm9udCk7XG4gICAgdGhpcy5mb250TWF0cml4ID0gcHJvcGVydGllcy5mb250TWF0cml4O1xuICAgIHRoaXMud2lkdGhzID0gcHJvcGVydGllcy53aWR0aHM7XG4gICAgdGhpcy5kZWZhdWx0V2lkdGggPSBwcm9wZXJ0aWVzLmRlZmF1bHRXaWR0aDtcbiAgICB0aGlzLnRvVW5pY29kZSA9IHByb3BlcnRpZXMudG9Vbmljb2RlO1xuICAgIHRoaXMuc2VhY01hcCA9IHByb3BlcnRpZXMuc2VhY01hcDtcbiAgfVxuXG4gIGdldCByZW5kZXJlcigpIHtcbiAgICBjb25zdCByZW5kZXJlciA9IF9mb250X3JlbmRlcmVyLkZvbnRSZW5kZXJlckZhY3RvcnkuY3JlYXRlKHRoaXMsIF9mb250c191dGlscy5TRUFDX0FOQUxZU0lTX0VOQUJMRUQpO1xuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwicmVuZGVyZXJcIiwgcmVuZGVyZXIpO1xuICB9XG5cbiAgZXhwb3J0RGF0YShleHRyYVByb3BlcnRpZXMgPSBmYWxzZSkge1xuICAgIGNvbnN0IGV4cG9ydERhdGFQcm9wZXJ0aWVzID0gZXh0cmFQcm9wZXJ0aWVzID8gWy4uLkVYUE9SVF9EQVRBX1BST1BFUlRJRVMsIC4uLkVYUE9SVF9EQVRBX0VYVFJBX1BST1BFUlRJRVNdIDogRVhQT1JUX0RBVEFfUFJPUEVSVElFUztcbiAgICBjb25zdCBkYXRhID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBsZXQgcHJvcGVydHksIHZhbHVlO1xuXG4gICAgZm9yIChwcm9wZXJ0eSBvZiBleHBvcnREYXRhUHJvcGVydGllcykge1xuICAgICAgdmFsdWUgPSB0aGlzW3Byb3BlcnR5XTtcblxuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGF0YVtwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGZhbGxiYWNrVG9TeXN0ZW1Gb250KHByb3BlcnRpZXMpIHtcbiAgICB0aGlzLm1pc3NpbmdGaWxlID0gdHJ1ZTtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1lO1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLnR5cGU7XG4gICAgY29uc3Qgc3VidHlwZSA9IHRoaXMuc3VidHlwZTtcbiAgICBsZXQgZm9udE5hbWUgPSAoMCwgX2ZvbnRzX3V0aWxzLm5vcm1hbGl6ZUZvbnROYW1lKShuYW1lKTtcbiAgICBjb25zdCBzdGRGb250TWFwID0gKDAsIF9zdGFuZGFyZF9mb250cy5nZXRTdGRGb250TWFwKSgpLFxuICAgICAgICAgIG5vblN0ZEZvbnRNYXAgPSAoMCwgX3N0YW5kYXJkX2ZvbnRzLmdldE5vblN0ZEZvbnRNYXApKCk7XG4gICAgY29uc3QgaXNTdGFuZGFyZEZvbnQgPSAhIXN0ZEZvbnRNYXBbZm9udE5hbWVdO1xuICAgIGNvbnN0IGlzTWFwcGVkVG9TdGFuZGFyZEZvbnQgPSAhIShub25TdGRGb250TWFwW2ZvbnROYW1lXSAmJiBzdGRGb250TWFwW25vblN0ZEZvbnRNYXBbZm9udE5hbWVdXSk7XG4gICAgZm9udE5hbWUgPSBzdGRGb250TWFwW2ZvbnROYW1lXSB8fCBub25TdGRGb250TWFwW2ZvbnROYW1lXSB8fCBmb250TmFtZTtcbiAgICB0aGlzLmJvbGQgPSBmb250TmFtZS5zZWFyY2goL2JvbGQvZ2kpICE9PSAtMTtcbiAgICB0aGlzLml0YWxpYyA9IGZvbnROYW1lLnNlYXJjaCgvb2JsaXF1ZS9naSkgIT09IC0xIHx8IGZvbnROYW1lLnNlYXJjaCgvaXRhbGljL2dpKSAhPT0gLTE7XG4gICAgdGhpcy5ibGFjayA9IG5hbWUuc2VhcmNoKC9CbGFjay9nKSAhPT0gLTE7XG4gICAgY29uc3QgaXNOYXJyb3cgPSBuYW1lLnNlYXJjaCgvTmFycm93L2cpICE9PSAtMTtcbiAgICB0aGlzLnJlbWVhc3VyZSA9ICghaXNTdGFuZGFyZEZvbnQgfHwgaXNOYXJyb3cpICYmIE9iamVjdC5rZXlzKHRoaXMud2lkdGhzKS5sZW5ndGggPiAwO1xuXG4gICAgaWYgKChpc1N0YW5kYXJkRm9udCB8fCBpc01hcHBlZFRvU3RhbmRhcmRGb250KSAmJiB0eXBlID09PSBcIkNJREZvbnRUeXBlMlwiICYmIHRoaXMuY2lkRW5jb2Rpbmcuc3RhcnRzV2l0aChcIklkZW50aXR5LVwiKSkge1xuICAgICAgY29uc3QgY2lkVG9HaWRNYXAgPSBwcm9wZXJ0aWVzLmNpZFRvR2lkTWFwO1xuICAgICAgY29uc3QgbWFwID0gW107XG4gICAgICBhcHBseVN0YW5kYXJkRm9udEdseXBoTWFwKG1hcCwgKDAsIF9zdGFuZGFyZF9mb250cy5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMpKCkpO1xuXG4gICAgICBpZiAoL0FyaWFsLT9CbGFjay9pLnRlc3QobmFtZSkpIHtcbiAgICAgICAgYXBwbHlTdGFuZGFyZEZvbnRHbHlwaE1hcChtYXAsICgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrKSgpKTtcbiAgICAgIH0gZWxzZSBpZiAoL0NhbGlicmkvaS50ZXN0KG5hbWUpKSB7XG4gICAgICAgIGFwcGx5U3RhbmRhcmRGb250R2x5cGhNYXAobWFwLCAoMCwgX3N0YW5kYXJkX2ZvbnRzLmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaSkoKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaWRUb0dpZE1hcCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNoYXJDb2RlIGluIG1hcCkge1xuICAgICAgICAgIGNvbnN0IGNpZCA9IG1hcFtjaGFyQ29kZV07XG5cbiAgICAgICAgICBpZiAoY2lkVG9HaWRNYXBbY2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBtYXBbK2NoYXJDb2RlXSA9IGNpZFRvR2lkTWFwW2NpZF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNpZFRvR2lkTWFwLmxlbmd0aCAhPT0gdGhpcy50b1VuaWNvZGUubGVuZ3RoICYmIHByb3BlcnRpZXMuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXAgJiYgdGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBfdG9fdW5pY29kZV9tYXAuSWRlbnRpdHlUb1VuaWNvZGVNYXApIHtcbiAgICAgICAgICB0aGlzLnRvVW5pY29kZS5mb3JFYWNoKGZ1bmN0aW9uIChjaGFyQ29kZSwgdW5pY29kZUNoYXJDb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBjaWQgPSBtYXBbY2hhckNvZGVdO1xuXG4gICAgICAgICAgICBpZiAoY2lkVG9HaWRNYXBbY2lkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIG1hcFsrY2hhckNvZGVdID0gdW5pY29kZUNoYXJDb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghKHRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgX3RvX3VuaWNvZGVfbWFwLklkZW50aXR5VG9Vbmljb2RlTWFwKSkge1xuICAgICAgICB0aGlzLnRvVW5pY29kZS5mb3JFYWNoKGZ1bmN0aW9uIChjaGFyQ29kZSwgdW5pY29kZUNoYXJDb2RlKSB7XG4gICAgICAgICAgbWFwWytjaGFyQ29kZV0gPSB1bmljb2RlQ2hhckNvZGU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRvRm9udENoYXIgPSBtYXA7XG4gICAgICB0aGlzLnRvVW5pY29kZSA9IG5ldyBfdG9fdW5pY29kZV9tYXAuVG9Vbmljb2RlTWFwKG1hcCk7XG4gICAgfSBlbHNlIGlmICgvU3ltYm9sL2kudGVzdChmb250TmFtZSkpIHtcbiAgICAgIHRoaXMudG9Gb250Q2hhciA9IGJ1aWxkVG9Gb250Q2hhcihfZW5jb2RpbmdzLlN5bWJvbFNldEVuY29kaW5nLCAoMCwgX2dseXBobGlzdC5nZXRHbHlwaHNVbmljb2RlKSgpLCB0aGlzLmRpZmZlcmVuY2VzKTtcbiAgICB9IGVsc2UgaWYgKC9EaW5nYmF0cy9pLnRlc3QoZm9udE5hbWUpKSB7XG4gICAgICBpZiAoL1dpbmdkaW5ncy9pLnRlc3QobmFtZSkpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiTm9uLWVtYmVkZGVkIFdpbmdkaW5ncyBmb250LCBmYWxsaW5nIGJhY2sgdG8gWmFwZkRpbmdiYXRzLlwiKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50b0ZvbnRDaGFyID0gYnVpbGRUb0ZvbnRDaGFyKF9lbmNvZGluZ3MuWmFwZkRpbmdiYXRzRW5jb2RpbmcsICgwLCBfZ2x5cGhsaXN0LmdldERpbmdiYXRzR2x5cGhzVW5pY29kZSkoKSwgdGhpcy5kaWZmZXJlbmNlcyk7XG4gICAgfSBlbHNlIGlmIChpc1N0YW5kYXJkRm9udCkge1xuICAgICAgY29uc3QgbWFwID0gYnVpbGRUb0ZvbnRDaGFyKHRoaXMuZGVmYXVsdEVuY29kaW5nLCAoMCwgX2dseXBobGlzdC5nZXRHbHlwaHNVbmljb2RlKSgpLCB0aGlzLmRpZmZlcmVuY2VzKTtcblxuICAgICAgaWYgKHR5cGUgPT09IFwiQ0lERm9udFR5cGUyXCIgJiYgIXRoaXMuY2lkRW5jb2Rpbmcuc3RhcnRzV2l0aChcIklkZW50aXR5LVwiKSAmJiAhKHRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgX3RvX3VuaWNvZGVfbWFwLklkZW50aXR5VG9Vbmljb2RlTWFwKSkge1xuICAgICAgICB0aGlzLnRvVW5pY29kZS5mb3JFYWNoKGZ1bmN0aW9uIChjaGFyQ29kZSwgdW5pY29kZUNoYXJDb2RlKSB7XG4gICAgICAgICAgbWFwWytjaGFyQ29kZV0gPSB1bmljb2RlQ2hhckNvZGU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRvRm9udENoYXIgPSBtYXA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGdseXBoc1VuaWNvZGVNYXAgPSAoMCwgX2dseXBobGlzdC5nZXRHbHlwaHNVbmljb2RlKSgpO1xuICAgICAgY29uc3QgbWFwID0gW107XG4gICAgICB0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChjaGFyQ29kZSwgdW5pY29kZUNoYXJDb2RlKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5jb21wb3NpdGUpIHtcbiAgICAgICAgICBjb25zdCBnbHlwaE5hbWUgPSB0aGlzLmRpZmZlcmVuY2VzW2NoYXJDb2RlXSB8fCB0aGlzLmRlZmF1bHRFbmNvZGluZ1tjaGFyQ29kZV07XG4gICAgICAgICAgY29uc3QgdW5pY29kZSA9ICgwLCBfdW5pY29kZS5nZXRVbmljb2RlRm9yR2x5cGgpKGdseXBoTmFtZSwgZ2x5cGhzVW5pY29kZU1hcCk7XG5cbiAgICAgICAgICBpZiAodW5pY29kZSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVuaWNvZGVDaGFyQ29kZSA9IHVuaWNvZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbWFwWytjaGFyQ29kZV0gPSB1bmljb2RlQ2hhckNvZGU7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMuY29tcG9zaXRlICYmIHRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgX3RvX3VuaWNvZGVfbWFwLklkZW50aXR5VG9Vbmljb2RlTWFwKSB7XG4gICAgICAgIGlmICgvVmVyZGFuYS9pLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICBhcHBseVN0YW5kYXJkRm9udEdseXBoTWFwKG1hcCwgKDAsIF9zdGFuZGFyZF9mb250cy5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMpKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMudG9Gb250Q2hhciA9IG1hcDtcbiAgICB9XG5cbiAgICBhbWVuZEZhbGxiYWNrVG9Vbmljb2RlKHByb3BlcnRpZXMpO1xuICAgIHRoaXMubG9hZGVkTmFtZSA9IGZvbnROYW1lLnNwbGl0KFwiLVwiKVswXTtcbiAgICB0aGlzLmZvbnRUeXBlID0gKDAsIF9mb250c191dGlscy5nZXRGb250VHlwZSkodHlwZSwgc3VidHlwZSwgcHJvcGVydGllcy5pc1N0YW5kYXJkRm9udCk7XG4gIH1cblxuICBjaGVja0FuZFJlcGFpcihuYW1lLCBmb250LCBwcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgVkFMSURfVEFCTEVTID0gW1wiT1MvMlwiLCBcImNtYXBcIiwgXCJoZWFkXCIsIFwiaGhlYVwiLCBcImhtdHhcIiwgXCJtYXhwXCIsIFwibmFtZVwiLCBcInBvc3RcIiwgXCJsb2NhXCIsIFwiZ2x5ZlwiLCBcImZwZ21cIiwgXCJwcmVwXCIsIFwiY3Z0IFwiLCBcIkNGRiBcIl07XG5cbiAgICBmdW5jdGlvbiByZWFkVGFibGVzKGZpbGUsIG51bVRhYmxlcykge1xuICAgICAgY29uc3QgdGFibGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIHRhYmxlc1tcIk9TLzJcIl0gPSBudWxsO1xuICAgICAgdGFibGVzLmNtYXAgPSBudWxsO1xuICAgICAgdGFibGVzLmhlYWQgPSBudWxsO1xuICAgICAgdGFibGVzLmhoZWEgPSBudWxsO1xuICAgICAgdGFibGVzLmhtdHggPSBudWxsO1xuICAgICAgdGFibGVzLm1heHAgPSBudWxsO1xuICAgICAgdGFibGVzLm5hbWUgPSBudWxsO1xuICAgICAgdGFibGVzLnBvc3QgPSBudWxsO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVRhYmxlczsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gcmVhZFRhYmxlRW50cnkoZmlsZSk7XG5cbiAgICAgICAgaWYgKCFWQUxJRF9UQUJMRVMuaW5jbHVkZXModGFibGUudGFnKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhYmxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFibGVzW3RhYmxlLnRhZ10gPSB0YWJsZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRhYmxlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkVGFibGVFbnRyeShmaWxlKSB7XG4gICAgICBjb25zdCB0YWcgPSBmaWxlLmdldFN0cmluZyg0KTtcbiAgICAgIGNvbnN0IGNoZWNrc3VtID0gZmlsZS5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZmlsZS5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgY29uc3QgbGVuZ3RoID0gZmlsZS5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgY29uc3QgcHJldmlvdXNQb3NpdGlvbiA9IGZpbGUucG9zO1xuICAgICAgZmlsZS5wb3MgPSBmaWxlLnN0YXJ0ID8gZmlsZS5zdGFydCA6IDA7XG4gICAgICBmaWxlLnNraXAob2Zmc2V0KTtcbiAgICAgIGNvbnN0IGRhdGEgPSBmaWxlLmdldEJ5dGVzKGxlbmd0aCk7XG4gICAgICBmaWxlLnBvcyA9IHByZXZpb3VzUG9zaXRpb247XG5cbiAgICAgIGlmICh0YWcgPT09IFwiaGVhZFwiKSB7XG4gICAgICAgIGRhdGFbOF0gPSBkYXRhWzldID0gZGF0YVsxMF0gPSBkYXRhWzExXSA9IDA7XG4gICAgICAgIGRhdGFbMTddIHw9IDB4MjA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhZyxcbiAgICAgICAgY2hlY2tzdW0sXG4gICAgICAgIGxlbmd0aCxcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICBkYXRhXG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRPcGVuVHlwZUhlYWRlcih0dGYpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZlcnNpb246IHR0Zi5nZXRTdHJpbmcoNCksXG4gICAgICAgIG51bVRhYmxlczogdHRmLmdldFVpbnQxNigpLFxuICAgICAgICBzZWFyY2hSYW5nZTogdHRmLmdldFVpbnQxNigpLFxuICAgICAgICBlbnRyeVNlbGVjdG9yOiB0dGYuZ2V0VWludDE2KCksXG4gICAgICAgIHJhbmdlU2hpZnQ6IHR0Zi5nZXRVaW50MTYoKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkVHJ1ZVR5cGVDb2xsZWN0aW9uSGVhZGVyKHR0Yykge1xuICAgICAgY29uc3QgdHRjVGFnID0gdHRjLmdldFN0cmluZyg0KTtcbiAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHR0Y1RhZyA9PT0gXCJ0dGNmXCIsIFwiTXVzdCBiZSBhIFRydWVUeXBlIENvbGxlY3Rpb24gZm9udC5cIik7XG4gICAgICBjb25zdCBtYWpvclZlcnNpb24gPSB0dGMuZ2V0VWludDE2KCk7XG4gICAgICBjb25zdCBtaW5vclZlcnNpb24gPSB0dGMuZ2V0VWludDE2KCk7XG4gICAgICBjb25zdCBudW1Gb250cyA9IHR0Yy5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgY29uc3Qgb2Zmc2V0VGFibGUgPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Gb250czsgaSsrKSB7XG4gICAgICAgIG9mZnNldFRhYmxlLnB1c2godHRjLmdldEludDMyKCkgPj4+IDApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBoZWFkZXIgPSB7XG4gICAgICAgIHR0Y1RhZyxcbiAgICAgICAgbWFqb3JWZXJzaW9uLFxuICAgICAgICBtaW5vclZlcnNpb24sXG4gICAgICAgIG51bUZvbnRzLFxuICAgICAgICBvZmZzZXRUYWJsZVxuICAgICAgfTtcblxuICAgICAgc3dpdGNoIChtYWpvclZlcnNpb24pIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBoZWFkZXI7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGhlYWRlci5kc2lnVGFnID0gdHRjLmdldEludDMyKCkgPj4+IDA7XG4gICAgICAgICAgaGVhZGVyLmRzaWdMZW5ndGggPSB0dGMuZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgICBoZWFkZXIuZHNpZ09mZnNldCA9IHR0Yy5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgICAgIHJldHVybiBoZWFkZXI7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSW52YWxpZCBUcnVlVHlwZSBDb2xsZWN0aW9uIG1ham9yVmVyc2lvbjogJHttYWpvclZlcnNpb259LmApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRUcnVlVHlwZUNvbGxlY3Rpb25EYXRhKHR0YywgZm9udE5hbWUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbnVtRm9udHMsXG4gICAgICAgIG9mZnNldFRhYmxlXG4gICAgICB9ID0gcmVhZFRydWVUeXBlQ29sbGVjdGlvbkhlYWRlcih0dGMpO1xuICAgICAgY29uc3QgZm9udE5hbWVQYXJ0cyA9IGZvbnROYW1lLnNwbGl0KFwiK1wiKTtcbiAgICAgIGxldCBmYWxsYmFja0RhdGE7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtRm9udHM7IGkrKykge1xuICAgICAgICB0dGMucG9zID0gKHR0Yy5zdGFydCB8fCAwKSArIG9mZnNldFRhYmxlW2ldO1xuICAgICAgICBjb25zdCBwb3RlbnRpYWxIZWFkZXIgPSByZWFkT3BlblR5cGVIZWFkZXIodHRjKTtcbiAgICAgICAgY29uc3QgcG90ZW50aWFsVGFibGVzID0gcmVhZFRhYmxlcyh0dGMsIHBvdGVudGlhbEhlYWRlci5udW1UYWJsZXMpO1xuXG4gICAgICAgIGlmICghcG90ZW50aWFsVGFibGVzLm5hbWUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1RydWVUeXBlIENvbGxlY3Rpb24gZm9udCBtdXN0IGNvbnRhaW4gYSBcIm5hbWVcIiB0YWJsZS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5hbWVUYWJsZSA9IHJlYWROYW1lVGFibGUocG90ZW50aWFsVGFibGVzLm5hbWUpO1xuXG4gICAgICAgIGZvciAobGV0IGogPSAwLCBqaiA9IG5hbWVUYWJsZS5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgZm9yIChsZXQgayA9IDAsIGtrID0gbmFtZVRhYmxlW2pdLmxlbmd0aDsgayA8IGtrOyBrKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWVFbnRyeSA9IG5hbWVUYWJsZVtqXVtrXSAmJiBuYW1lVGFibGVbal1ba10ucmVwbGFjZSgvXFxzL2csIFwiXCIpO1xuXG4gICAgICAgICAgICBpZiAoIW5hbWVFbnRyeSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5hbWVFbnRyeSA9PT0gZm9udE5hbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBoZWFkZXI6IHBvdGVudGlhbEhlYWRlcixcbiAgICAgICAgICAgICAgICB0YWJsZXM6IHBvdGVudGlhbFRhYmxlc1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZm9udE5hbWVQYXJ0cy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgZm9udE5hbWVQYXJ0cykge1xuICAgICAgICAgICAgICBpZiAobmFtZUVudHJ5ID09PSBwYXJ0KSB7XG4gICAgICAgICAgICAgICAgZmFsbGJhY2tEYXRhID0ge1xuICAgICAgICAgICAgICAgICAgbmFtZTogcGFydCxcbiAgICAgICAgICAgICAgICAgIGhlYWRlcjogcG90ZW50aWFsSGVhZGVyLFxuICAgICAgICAgICAgICAgICAgdGFibGVzOiBwb3RlbnRpYWxUYWJsZXNcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmYWxsYmFja0RhdGEpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGBUcnVlVHlwZSBDb2xsZWN0aW9uIGRvZXMgbm90IGNvbnRhaW4gXCIke2ZvbnROYW1lfVwiIGZvbnQsIGAgKyBgZmFsbGluZyBiYWNrIHRvIFwiJHtmYWxsYmFja0RhdGEubmFtZX1cIiBmb250IGluc3RlYWQuYCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaGVhZGVyOiBmYWxsYmFja0RhdGEuaGVhZGVyLFxuICAgICAgICAgIHRhYmxlczogZmFsbGJhY2tEYXRhLnRhYmxlc1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFRydWVUeXBlIENvbGxlY3Rpb24gZG9lcyBub3QgY29udGFpbiBcIiR7Zm9udE5hbWV9XCIgZm9udC5gKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkQ21hcFRhYmxlKGNtYXAsIGZpbGUsIGlzU3ltYm9saWNGb250LCBoYXNFbmNvZGluZykge1xuICAgICAgaWYgKCFjbWFwKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIk5vIGNtYXAgdGFibGUgYXZhaWxhYmxlLlwiKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGF0Zm9ybUlkOiAtMSxcbiAgICAgICAgICBlbmNvZGluZ0lkOiAtMSxcbiAgICAgICAgICBtYXBwaW5nczogW10sXG4gICAgICAgICAgaGFzU2hvcnRDbWFwOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBsZXQgc2VnbWVudDtcbiAgICAgIGxldCBzdGFydCA9IChmaWxlLnN0YXJ0ID8gZmlsZS5zdGFydCA6IDApICsgY21hcC5vZmZzZXQ7XG4gICAgICBmaWxlLnBvcyA9IHN0YXJ0O1xuICAgICAgZmlsZS5za2lwKDIpO1xuICAgICAgY29uc3QgbnVtVGFibGVzID0gZmlsZS5nZXRVaW50MTYoKTtcbiAgICAgIGxldCBwb3RlbnRpYWxUYWJsZTtcbiAgICAgIGxldCBjYW5CcmVhayA9IGZhbHNlO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVRhYmxlczsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBsYXRmb3JtSWQgPSBmaWxlLmdldFVpbnQxNigpO1xuICAgICAgICBjb25zdCBlbmNvZGluZ0lkID0gZmlsZS5nZXRVaW50MTYoKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gZmlsZS5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgICBsZXQgdXNlVGFibGUgPSBmYWxzZTtcblxuICAgICAgICBpZiAocG90ZW50aWFsVGFibGUgJiYgcG90ZW50aWFsVGFibGUucGxhdGZvcm1JZCA9PT0gcGxhdGZvcm1JZCAmJiBwb3RlbnRpYWxUYWJsZS5lbmNvZGluZ0lkID09PSBlbmNvZGluZ0lkKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGxhdGZvcm1JZCA9PT0gMCAmJiAoZW5jb2RpbmdJZCA9PT0gMCB8fCBlbmNvZGluZ0lkID09PSAxIHx8IGVuY29kaW5nSWQgPT09IDMpKSB7XG4gICAgICAgICAgdXNlVGFibGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHBsYXRmb3JtSWQgPT09IDEgJiYgZW5jb2RpbmdJZCA9PT0gMCkge1xuICAgICAgICAgIHVzZVRhYmxlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChwbGF0Zm9ybUlkID09PSAzICYmIGVuY29kaW5nSWQgPT09IDEgJiYgKGhhc0VuY29kaW5nIHx8ICFwb3RlbnRpYWxUYWJsZSkpIHtcbiAgICAgICAgICB1c2VUYWJsZSA9IHRydWU7XG5cbiAgICAgICAgICBpZiAoIWlzU3ltYm9saWNGb250KSB7XG4gICAgICAgICAgICBjYW5CcmVhayA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzU3ltYm9saWNGb250ICYmIHBsYXRmb3JtSWQgPT09IDMgJiYgZW5jb2RpbmdJZCA9PT0gMCkge1xuICAgICAgICAgIHVzZVRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICBsZXQgY29ycmVjdGx5U29ydGVkID0gdHJ1ZTtcblxuICAgICAgICAgIGlmIChpIDwgbnVtVGFibGVzIC0gMSkge1xuICAgICAgICAgICAgY29uc3QgbmV4dEJ5dGVzID0gZmlsZS5wZWVrQnl0ZXMoMiksXG4gICAgICAgICAgICAgICAgICBuZXh0UGxhdGZvcm1JZCA9IGludDE2KG5leHRCeXRlc1swXSwgbmV4dEJ5dGVzWzFdKTtcblxuICAgICAgICAgICAgaWYgKG5leHRQbGF0Zm9ybUlkIDwgcGxhdGZvcm1JZCkge1xuICAgICAgICAgICAgICBjb3JyZWN0bHlTb3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29ycmVjdGx5U29ydGVkKSB7XG4gICAgICAgICAgICBjYW5CcmVhayA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVzZVRhYmxlKSB7XG4gICAgICAgICAgcG90ZW50aWFsVGFibGUgPSB7XG4gICAgICAgICAgICBwbGF0Zm9ybUlkLFxuICAgICAgICAgICAgZW5jb2RpbmdJZCxcbiAgICAgICAgICAgIG9mZnNldFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FuQnJlYWspIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocG90ZW50aWFsVGFibGUpIHtcbiAgICAgICAgZmlsZS5wb3MgPSBzdGFydCArIHBvdGVudGlhbFRhYmxlLm9mZnNldDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFwb3RlbnRpYWxUYWJsZSB8fCBmaWxlLnBlZWtCeXRlKCkgPT09IC0xKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIkNvdWxkIG5vdCBmaW5kIGEgcHJlZmVycmVkIGNtYXAgdGFibGUuXCIpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBsYXRmb3JtSWQ6IC0xLFxuICAgICAgICAgIGVuY29kaW5nSWQ6IC0xLFxuICAgICAgICAgIG1hcHBpbmdzOiBbXSxcbiAgICAgICAgICBoYXNTaG9ydENtYXA6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdCA9IGZpbGUuZ2V0VWludDE2KCk7XG4gICAgICBmaWxlLnNraXAoMiArIDIpO1xuICAgICAgbGV0IGhhc1Nob3J0Q21hcCA9IGZhbHNlO1xuICAgICAgY29uc3QgbWFwcGluZ3MgPSBbXTtcbiAgICAgIGxldCBqLCBnbHlwaElkO1xuXG4gICAgICBpZiAoZm9ybWF0ID09PSAwKSB7XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCAyNTY7IGorKykge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gZmlsZS5nZXRCeXRlKCk7XG5cbiAgICAgICAgICBpZiAoIWluZGV4KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGNoYXJDb2RlOiBqLFxuICAgICAgICAgICAgZ2x5cGhJZDogaW5kZXhcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhhc1Nob3J0Q21hcCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gMikge1xuICAgICAgICBjb25zdCBzdWJIZWFkZXJLZXlzID0gW107XG4gICAgICAgIGxldCBtYXhTdWJIZWFkZXJLZXkgPSAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgICAgICAgICBjb25zdCBzdWJIZWFkZXJLZXkgPSBmaWxlLmdldFVpbnQxNigpID4+IDM7XG4gICAgICAgICAgc3ViSGVhZGVyS2V5cy5wdXNoKHN1YkhlYWRlcktleSk7XG4gICAgICAgICAgbWF4U3ViSGVhZGVyS2V5ID0gTWF0aC5tYXgoc3ViSGVhZGVyS2V5LCBtYXhTdWJIZWFkZXJLZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3ViSGVhZGVycyA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IG1heFN1YkhlYWRlcktleTsgaSsrKSB7XG4gICAgICAgICAgc3ViSGVhZGVycy5wdXNoKHtcbiAgICAgICAgICAgIGZpcnN0Q29kZTogZmlsZS5nZXRVaW50MTYoKSxcbiAgICAgICAgICAgIGVudHJ5Q291bnQ6IGZpbGUuZ2V0VWludDE2KCksXG4gICAgICAgICAgICBpZERlbHRhOiBzaWduZWRJbnQxNihmaWxlLmdldEJ5dGUoKSwgZmlsZS5nZXRCeXRlKCkpLFxuICAgICAgICAgICAgaWRSYW5nZVBvczogZmlsZS5wb3MgKyBmaWxlLmdldFVpbnQxNigpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gICAgICAgICAgaWYgKHN1YkhlYWRlcktleXNbaV0gPT09IDApIHtcbiAgICAgICAgICAgIGZpbGUucG9zID0gc3ViSGVhZGVyc1swXS5pZFJhbmdlUG9zICsgMiAqIGk7XG4gICAgICAgICAgICBnbHlwaElkID0gZmlsZS5nZXRVaW50MTYoKTtcbiAgICAgICAgICAgIG1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgICBjaGFyQ29kZTogaSxcbiAgICAgICAgICAgICAgZ2x5cGhJZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHMgPSBzdWJIZWFkZXJzW3N1YkhlYWRlcktleXNbaV1dO1xuXG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcy5lbnRyeUNvdW50OyBqKyspIHtcbiAgICAgICAgICAgICAgY29uc3QgY2hhckNvZGUgPSAoaSA8PCA4KSArIGogKyBzLmZpcnN0Q29kZTtcbiAgICAgICAgICAgICAgZmlsZS5wb3MgPSBzLmlkUmFuZ2VQb3MgKyAyICogajtcbiAgICAgICAgICAgICAgZ2x5cGhJZCA9IGZpbGUuZ2V0VWludDE2KCk7XG5cbiAgICAgICAgICAgICAgaWYgKGdseXBoSWQgIT09IDApIHtcbiAgICAgICAgICAgICAgICBnbHlwaElkID0gKGdseXBoSWQgKyBzLmlkRGVsdGEpICUgNjU1MzY7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjaGFyQ29kZSxcbiAgICAgICAgICAgICAgICBnbHlwaElkXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09IDQpIHtcbiAgICAgICAgY29uc3Qgc2VnQ291bnQgPSBmaWxlLmdldFVpbnQxNigpID4+IDE7XG4gICAgICAgIGZpbGUuc2tpcCg2KTtcbiAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBbXTtcbiAgICAgICAgbGV0IHNlZ0luZGV4O1xuXG4gICAgICAgIGZvciAoc2VnSW5kZXggPSAwOyBzZWdJbmRleCA8IHNlZ0NvdW50OyBzZWdJbmRleCsrKSB7XG4gICAgICAgICAgc2VnbWVudHMucHVzaCh7XG4gICAgICAgICAgICBlbmQ6IGZpbGUuZ2V0VWludDE2KClcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbGUuc2tpcCgyKTtcblxuICAgICAgICBmb3IgKHNlZ0luZGV4ID0gMDsgc2VnSW5kZXggPCBzZWdDb3VudDsgc2VnSW5kZXgrKykge1xuICAgICAgICAgIHNlZ21lbnRzW3NlZ0luZGV4XS5zdGFydCA9IGZpbGUuZ2V0VWludDE2KCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHNlZ0luZGV4ID0gMDsgc2VnSW5kZXggPCBzZWdDb3VudDsgc2VnSW5kZXgrKykge1xuICAgICAgICAgIHNlZ21lbnRzW3NlZ0luZGV4XS5kZWx0YSA9IGZpbGUuZ2V0VWludDE2KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgb2Zmc2V0c0NvdW50ID0gMCxcbiAgICAgICAgICAgIG9mZnNldEluZGV4O1xuXG4gICAgICAgIGZvciAoc2VnSW5kZXggPSAwOyBzZWdJbmRleCA8IHNlZ0NvdW50OyBzZWdJbmRleCsrKSB7XG4gICAgICAgICAgc2VnbWVudCA9IHNlZ21lbnRzW3NlZ0luZGV4XTtcbiAgICAgICAgICBjb25zdCByYW5nZU9mZnNldCA9IGZpbGUuZ2V0VWludDE2KCk7XG5cbiAgICAgICAgICBpZiAoIXJhbmdlT2Zmc2V0KSB7XG4gICAgICAgICAgICBzZWdtZW50Lm9mZnNldEluZGV4ID0gLTE7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvZmZzZXRJbmRleCA9IChyYW5nZU9mZnNldCA+PiAxKSAtIChzZWdDb3VudCAtIHNlZ0luZGV4KTtcbiAgICAgICAgICBzZWdtZW50Lm9mZnNldEluZGV4ID0gb2Zmc2V0SW5kZXg7XG4gICAgICAgICAgb2Zmc2V0c0NvdW50ID0gTWF0aC5tYXgob2Zmc2V0c0NvdW50LCBvZmZzZXRJbmRleCArIHNlZ21lbnQuZW5kIC0gc2VnbWVudC5zdGFydCArIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IFtdO1xuXG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBvZmZzZXRzQ291bnQ7IGorKykge1xuICAgICAgICAgIG9mZnNldHMucHVzaChmaWxlLmdldFVpbnQxNigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoc2VnSW5kZXggPSAwOyBzZWdJbmRleCA8IHNlZ0NvdW50OyBzZWdJbmRleCsrKSB7XG4gICAgICAgICAgc2VnbWVudCA9IHNlZ21lbnRzW3NlZ0luZGV4XTtcbiAgICAgICAgICBzdGFydCA9IHNlZ21lbnQuc3RhcnQ7XG4gICAgICAgICAgY29uc3QgZW5kID0gc2VnbWVudC5lbmQ7XG4gICAgICAgICAgY29uc3QgZGVsdGEgPSBzZWdtZW50LmRlbHRhO1xuICAgICAgICAgIG9mZnNldEluZGV4ID0gc2VnbWVudC5vZmZzZXRJbmRleDtcblxuICAgICAgICAgIGZvciAoaiA9IHN0YXJ0OyBqIDw9IGVuZDsgaisrKSB7XG4gICAgICAgICAgICBpZiAoaiA9PT0gMHhmZmZmKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbHlwaElkID0gb2Zmc2V0SW5kZXggPCAwID8gaiA6IG9mZnNldHNbb2Zmc2V0SW5kZXggKyBqIC0gc3RhcnRdO1xuICAgICAgICAgICAgZ2x5cGhJZCA9IGdseXBoSWQgKyBkZWx0YSAmIDB4ZmZmZjtcbiAgICAgICAgICAgIG1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgICBjaGFyQ29kZTogaixcbiAgICAgICAgICAgICAgZ2x5cGhJZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gNikge1xuICAgICAgICBjb25zdCBmaXJzdENvZGUgPSBmaWxlLmdldFVpbnQxNigpO1xuICAgICAgICBjb25zdCBlbnRyeUNvdW50ID0gZmlsZS5nZXRVaW50MTYoKTtcblxuICAgICAgICBmb3IgKGogPSAwOyBqIDwgZW50cnlDb3VudDsgaisrKSB7XG4gICAgICAgICAgZ2x5cGhJZCA9IGZpbGUuZ2V0VWludDE2KCk7XG4gICAgICAgICAgY29uc3QgY2hhckNvZGUgPSBmaXJzdENvZGUgKyBqO1xuICAgICAgICAgIG1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgY2hhckNvZGUsXG4gICAgICAgICAgICBnbHlwaElkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcImNtYXAgdGFibGUgaGFzIHVuc3VwcG9ydGVkIGZvcm1hdDogXCIgKyBmb3JtYXQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBsYXRmb3JtSWQ6IC0xLFxuICAgICAgICAgIGVuY29kaW5nSWQ6IC0xLFxuICAgICAgICAgIG1hcHBpbmdzOiBbXSxcbiAgICAgICAgICBoYXNTaG9ydENtYXA6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG1hcHBpbmdzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGEuY2hhckNvZGUgLSBiLmNoYXJDb2RlO1xuICAgICAgfSk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbWFwcGluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKG1hcHBpbmdzW2kgLSAxXS5jaGFyQ29kZSA9PT0gbWFwcGluZ3NbaV0uY2hhckNvZGUpIHtcbiAgICAgICAgICBtYXBwaW5ncy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBsYXRmb3JtSWQ6IHBvdGVudGlhbFRhYmxlLnBsYXRmb3JtSWQsXG4gICAgICAgIGVuY29kaW5nSWQ6IHBvdGVudGlhbFRhYmxlLmVuY29kaW5nSWQsXG4gICAgICAgIG1hcHBpbmdzLFxuICAgICAgICBoYXNTaG9ydENtYXBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2FuaXRpemVNZXRyaWNzKGZpbGUsIGhlYWRlciwgbWV0cmljcywgaGVhZFRhYmxlLCBudW1HbHlwaHMsIGR1cEZpcnN0RW50cnkpIHtcbiAgICAgIGlmICghaGVhZGVyKSB7XG4gICAgICAgIGlmIChtZXRyaWNzKSB7XG4gICAgICAgICAgbWV0cmljcy5kYXRhID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZmlsZS5wb3MgPSAoZmlsZS5zdGFydCA/IGZpbGUuc3RhcnQgOiAwKSArIGhlYWRlci5vZmZzZXQ7XG4gICAgICBmaWxlLnBvcyArPSA0O1xuICAgICAgZmlsZS5wb3MgKz0gMjtcbiAgICAgIGZpbGUucG9zICs9IDI7XG4gICAgICBmaWxlLnBvcyArPSAyO1xuICAgICAgZmlsZS5wb3MgKz0gMjtcbiAgICAgIGZpbGUucG9zICs9IDI7XG4gICAgICBmaWxlLnBvcyArPSAyO1xuICAgICAgZmlsZS5wb3MgKz0gMjtcbiAgICAgIGZpbGUucG9zICs9IDI7XG4gICAgICBmaWxlLnBvcyArPSAyO1xuICAgICAgY29uc3QgY2FyZXRPZmZzZXQgPSBmaWxlLmdldFVpbnQxNigpO1xuICAgICAgZmlsZS5wb3MgKz0gODtcbiAgICAgIGZpbGUucG9zICs9IDI7XG4gICAgICBsZXQgbnVtT2ZNZXRyaWNzID0gZmlsZS5nZXRVaW50MTYoKTtcblxuICAgICAgaWYgKGNhcmV0T2Zmc2V0ICE9PSAwKSB7XG4gICAgICAgIGNvbnN0IG1hY1N0eWxlID0gaW50MTYoaGVhZFRhYmxlLmRhdGFbNDRdLCBoZWFkVGFibGUuZGF0YVs0NV0pO1xuXG4gICAgICAgIGlmICghKG1hY1N0eWxlICYgMikpIHtcbiAgICAgICAgICBoZWFkZXIuZGF0YVsyMl0gPSAwO1xuICAgICAgICAgIGhlYWRlci5kYXRhWzIzXSA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG51bU9mTWV0cmljcyA+IG51bUdseXBocykge1xuICAgICAgICAoMCwgX3V0aWwuaW5mbykoYFRoZSBudW1PZk1ldHJpY3MgKCR7bnVtT2ZNZXRyaWNzfSkgc2hvdWxkIG5vdCBiZSBgICsgYGdyZWF0ZXIgdGhhbiB0aGUgbnVtR2x5cGhzICgke251bUdseXBoc30pLmApO1xuICAgICAgICBudW1PZk1ldHJpY3MgPSBudW1HbHlwaHM7XG4gICAgICAgIGhlYWRlci5kYXRhWzM0XSA9IChudW1PZk1ldHJpY3MgJiAweGZmMDApID4+IDg7XG4gICAgICAgIGhlYWRlci5kYXRhWzM1XSA9IG51bU9mTWV0cmljcyAmIDB4MDBmZjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbnVtT2ZTaWRlYmVhcmluZ3MgPSBudW1HbHlwaHMgLSBudW1PZk1ldHJpY3M7XG4gICAgICBjb25zdCBudW1NaXNzaW5nID0gbnVtT2ZTaWRlYmVhcmluZ3MgLSAobWV0cmljcy5sZW5ndGggLSBudW1PZk1ldHJpY3MgKiA0ID4+IDEpO1xuXG4gICAgICBpZiAobnVtTWlzc2luZyA+IDApIHtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IG5ldyBVaW50OEFycmF5KG1ldHJpY3MubGVuZ3RoICsgbnVtTWlzc2luZyAqIDIpO1xuICAgICAgICBlbnRyaWVzLnNldChtZXRyaWNzLmRhdGEpO1xuXG4gICAgICAgIGlmIChkdXBGaXJzdEVudHJ5KSB7XG4gICAgICAgICAgZW50cmllc1ttZXRyaWNzLmxlbmd0aF0gPSBtZXRyaWNzLmRhdGFbMl07XG4gICAgICAgICAgZW50cmllc1ttZXRyaWNzLmxlbmd0aCArIDFdID0gbWV0cmljcy5kYXRhWzNdO1xuICAgICAgICB9XG5cbiAgICAgICAgbWV0cmljcy5kYXRhID0gZW50cmllcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzYW5pdGl6ZUdseXBoKHNvdXJjZSwgc291cmNlU3RhcnQsIHNvdXJjZUVuZCwgZGVzdCwgZGVzdFN0YXJ0LCBoaW50c1ZhbGlkKSB7XG4gICAgICBjb25zdCBnbHlwaFByb2ZpbGUgPSB7XG4gICAgICAgIGxlbmd0aDogMCxcbiAgICAgICAgc2l6ZU9mSW5zdHJ1Y3Rpb25zOiAwXG4gICAgICB9O1xuXG4gICAgICBpZiAoc291cmNlRW5kIC0gc291cmNlU3RhcnQgPD0gMTIpIHtcbiAgICAgICAgcmV0dXJuIGdseXBoUHJvZmlsZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2x5ZiA9IHNvdXJjZS5zdWJhcnJheShzb3VyY2VTdGFydCwgc291cmNlRW5kKTtcbiAgICAgIGxldCBjb250b3Vyc0NvdW50ID0gc2lnbmVkSW50MTYoZ2x5ZlswXSwgZ2x5ZlsxXSk7XG5cbiAgICAgIGlmIChjb250b3Vyc0NvdW50IDwgMCkge1xuICAgICAgICBjb250b3Vyc0NvdW50ID0gLTE7XG4gICAgICAgIHdyaXRlU2lnbmVkSW50MTYoZ2x5ZiwgMCwgY29udG91cnNDb3VudCk7XG4gICAgICAgIGRlc3Quc2V0KGdseWYsIGRlc3RTdGFydCk7XG4gICAgICAgIGdseXBoUHJvZmlsZS5sZW5ndGggPSBnbHlmLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGdseXBoUHJvZmlsZTtcbiAgICAgIH1cblxuICAgICAgbGV0IGksXG4gICAgICAgICAgaiA9IDEwLFxuICAgICAgICAgIGZsYWdzQ291bnQgPSAwO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY29udG91cnNDb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGVuZFBvaW50ID0gZ2x5ZltqXSA8PCA4IHwgZ2x5ZltqICsgMV07XG4gICAgICAgIGZsYWdzQ291bnQgPSBlbmRQb2ludCArIDE7XG4gICAgICAgIGogKz0gMjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zU3RhcnQgPSBqO1xuICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zTGVuZ3RoID0gZ2x5ZltqXSA8PCA4IHwgZ2x5ZltqICsgMV07XG4gICAgICBnbHlwaFByb2ZpbGUuc2l6ZU9mSW5zdHJ1Y3Rpb25zID0gaW5zdHJ1Y3Rpb25zTGVuZ3RoO1xuICAgICAgaiArPSAyICsgaW5zdHJ1Y3Rpb25zTGVuZ3RoO1xuICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zRW5kID0gajtcbiAgICAgIGxldCBjb29yZGluYXRlc0xlbmd0aCA9IDA7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBmbGFnc0NvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgZmxhZyA9IGdseWZbaisrXTtcblxuICAgICAgICBpZiAoZmxhZyAmIDB4YzApIHtcbiAgICAgICAgICBnbHlmW2ogLSAxXSA9IGZsYWcgJiAweDNmO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHhMZW5ndGggPSAyO1xuXG4gICAgICAgIGlmIChmbGFnICYgMikge1xuICAgICAgICAgIHhMZW5ndGggPSAxO1xuICAgICAgICB9IGVsc2UgaWYgKGZsYWcgJiAxNikge1xuICAgICAgICAgIHhMZW5ndGggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHlMZW5ndGggPSAyO1xuXG4gICAgICAgIGlmIChmbGFnICYgNCkge1xuICAgICAgICAgIHlMZW5ndGggPSAxO1xuICAgICAgICB9IGVsc2UgaWYgKGZsYWcgJiAzMikge1xuICAgICAgICAgIHlMZW5ndGggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeHlMZW5ndGggPSB4TGVuZ3RoICsgeUxlbmd0aDtcbiAgICAgICAgY29vcmRpbmF0ZXNMZW5ndGggKz0geHlMZW5ndGg7XG5cbiAgICAgICAgaWYgKGZsYWcgJiA4KSB7XG4gICAgICAgICAgY29uc3QgcmVwZWF0ID0gZ2x5ZltqKytdO1xuICAgICAgICAgIGkgKz0gcmVwZWF0O1xuICAgICAgICAgIGNvb3JkaW5hdGVzTGVuZ3RoICs9IHJlcGVhdCAqIHh5TGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjb29yZGluYXRlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZ2x5cGhQcm9maWxlO1xuICAgICAgfVxuXG4gICAgICBsZXQgZ2x5cGhEYXRhTGVuZ3RoID0gaiArIGNvb3JkaW5hdGVzTGVuZ3RoO1xuXG4gICAgICBpZiAoZ2x5cGhEYXRhTGVuZ3RoID4gZ2x5Zi5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGdseXBoUHJvZmlsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFoaW50c1ZhbGlkICYmIGluc3RydWN0aW9uc0xlbmd0aCA+IDApIHtcbiAgICAgICAgZGVzdC5zZXQoZ2x5Zi5zdWJhcnJheSgwLCBpbnN0cnVjdGlvbnNTdGFydCksIGRlc3RTdGFydCk7XG4gICAgICAgIGRlc3Quc2V0KFswLCAwXSwgZGVzdFN0YXJ0ICsgaW5zdHJ1Y3Rpb25zU3RhcnQpO1xuICAgICAgICBkZXN0LnNldChnbHlmLnN1YmFycmF5KGluc3RydWN0aW9uc0VuZCwgZ2x5cGhEYXRhTGVuZ3RoKSwgZGVzdFN0YXJ0ICsgaW5zdHJ1Y3Rpb25zU3RhcnQgKyAyKTtcbiAgICAgICAgZ2x5cGhEYXRhTGVuZ3RoIC09IGluc3RydWN0aW9uc0xlbmd0aDtcblxuICAgICAgICBpZiAoZ2x5Zi5sZW5ndGggLSBnbHlwaERhdGFMZW5ndGggPiAzKSB7XG4gICAgICAgICAgZ2x5cGhEYXRhTGVuZ3RoID0gZ2x5cGhEYXRhTGVuZ3RoICsgMyAmIH4zO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2x5cGhQcm9maWxlLmxlbmd0aCA9IGdseXBoRGF0YUxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGdseXBoUHJvZmlsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGdseWYubGVuZ3RoIC0gZ2x5cGhEYXRhTGVuZ3RoID4gMykge1xuICAgICAgICBnbHlwaERhdGFMZW5ndGggPSBnbHlwaERhdGFMZW5ndGggKyAzICYgfjM7XG4gICAgICAgIGRlc3Quc2V0KGdseWYuc3ViYXJyYXkoMCwgZ2x5cGhEYXRhTGVuZ3RoKSwgZGVzdFN0YXJ0KTtcbiAgICAgICAgZ2x5cGhQcm9maWxlLmxlbmd0aCA9IGdseXBoRGF0YUxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGdseXBoUHJvZmlsZTtcbiAgICAgIH1cblxuICAgICAgZGVzdC5zZXQoZ2x5ZiwgZGVzdFN0YXJ0KTtcbiAgICAgIGdseXBoUHJvZmlsZS5sZW5ndGggPSBnbHlmLmxlbmd0aDtcbiAgICAgIHJldHVybiBnbHlwaFByb2ZpbGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2FuaXRpemVIZWFkKGhlYWQsIG51bUdseXBocywgbG9jYUxlbmd0aCkge1xuICAgICAgY29uc3QgZGF0YSA9IGhlYWQuZGF0YTtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSBpbnQzMihkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdKTtcblxuICAgICAgaWYgKHZlcnNpb24gPj4gMTYgIT09IDEpIHtcbiAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiQXR0ZW1wdGluZyB0byBmaXggaW52YWxpZCB2ZXJzaW9uIGluIGhlYWQgdGFibGU6IFwiICsgdmVyc2lvbik7XG4gICAgICAgIGRhdGFbMF0gPSAwO1xuICAgICAgICBkYXRhWzFdID0gMTtcbiAgICAgICAgZGF0YVsyXSA9IDA7XG4gICAgICAgIGRhdGFbM10gPSAwO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbmRleFRvTG9jRm9ybWF0ID0gaW50MTYoZGF0YVs1MF0sIGRhdGFbNTFdKTtcblxuICAgICAgaWYgKGluZGV4VG9Mb2NGb3JtYXQgPCAwIHx8IGluZGV4VG9Mb2NGb3JtYXQgPiAxKSB7XG4gICAgICAgICgwLCBfdXRpbC5pbmZvKShcIkF0dGVtcHRpbmcgdG8gZml4IGludmFsaWQgaW5kZXhUb0xvY0Zvcm1hdCBpbiBoZWFkIHRhYmxlOiBcIiArIGluZGV4VG9Mb2NGb3JtYXQpO1xuICAgICAgICBjb25zdCBudW1HbHlwaHNQbHVzT25lID0gbnVtR2x5cGhzICsgMTtcblxuICAgICAgICBpZiAobG9jYUxlbmd0aCA9PT0gbnVtR2x5cGhzUGx1c09uZSA8PCAxKSB7XG4gICAgICAgICAgZGF0YVs1MF0gPSAwO1xuICAgICAgICAgIGRhdGFbNTFdID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChsb2NhTGVuZ3RoID09PSBudW1HbHlwaHNQbHVzT25lIDw8IDIpIHtcbiAgICAgICAgICBkYXRhWzUwXSA9IDA7XG4gICAgICAgICAgZGF0YVs1MV0gPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkNvdWxkIG5vdCBmaXggaW5kZXhUb0xvY0Zvcm1hdDogXCIgKyBpbmRleFRvTG9jRm9ybWF0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNhbml0aXplR2x5cGhMb2NhdGlvbnMobG9jYSwgZ2x5ZiwgbnVtR2x5cGhzLCBpc0dseXBoTG9jYXRpb25zTG9uZywgaGludHNWYWxpZCwgZHVwRmlyc3RFbnRyeSwgbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBsZXQgaXRlbVNpemUsIGl0ZW1EZWNvZGUsIGl0ZW1FbmNvZGU7XG5cbiAgICAgIGlmIChpc0dseXBoTG9jYXRpb25zTG9uZykge1xuICAgICAgICBpdGVtU2l6ZSA9IDQ7XG5cbiAgICAgICAgaXRlbURlY29kZSA9IGZ1bmN0aW9uIGZvbnRJdGVtRGVjb2RlTG9uZyhkYXRhLCBvZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gZGF0YVtvZmZzZXRdIDw8IDI0IHwgZGF0YVtvZmZzZXQgKyAxXSA8PCAxNiB8IGRhdGFbb2Zmc2V0ICsgMl0gPDwgOCB8IGRhdGFbb2Zmc2V0ICsgM107XG4gICAgICAgIH07XG5cbiAgICAgICAgaXRlbUVuY29kZSA9IGZ1bmN0aW9uIGZvbnRJdGVtRW5jb2RlTG9uZyhkYXRhLCBvZmZzZXQsIHZhbHVlKSB7XG4gICAgICAgICAgZGF0YVtvZmZzZXRdID0gdmFsdWUgPj4+IDI0ICYgMHhmZjtcbiAgICAgICAgICBkYXRhW29mZnNldCArIDFdID0gdmFsdWUgPj4gMTYgJiAweGZmO1xuICAgICAgICAgIGRhdGFbb2Zmc2V0ICsgMl0gPSB2YWx1ZSA+PiA4ICYgMHhmZjtcbiAgICAgICAgICBkYXRhW29mZnNldCArIDNdID0gdmFsdWUgJiAweGZmO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbVNpemUgPSAyO1xuXG4gICAgICAgIGl0ZW1EZWNvZGUgPSBmdW5jdGlvbiBmb250SXRlbURlY29kZShkYXRhLCBvZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gZGF0YVtvZmZzZXRdIDw8IDkgfCBkYXRhW29mZnNldCArIDFdIDw8IDE7XG4gICAgICAgIH07XG5cbiAgICAgICAgaXRlbUVuY29kZSA9IGZ1bmN0aW9uIGZvbnRJdGVtRW5jb2RlKGRhdGEsIG9mZnNldCwgdmFsdWUpIHtcbiAgICAgICAgICBkYXRhW29mZnNldF0gPSB2YWx1ZSA+PiA5ICYgMHhmZjtcbiAgICAgICAgICBkYXRhW29mZnNldCArIDFdID0gdmFsdWUgPj4gMSAmIDB4ZmY7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG51bUdseXBoc091dCA9IGR1cEZpcnN0RW50cnkgPyBudW1HbHlwaHMgKyAxIDogbnVtR2x5cGhzO1xuICAgICAgY29uc3QgbG9jYURhdGFTaXplID0gaXRlbVNpemUgKiAoMSArIG51bUdseXBoc091dCk7XG4gICAgICBjb25zdCBsb2NhRGF0YSA9IG5ldyBVaW50OEFycmF5KGxvY2FEYXRhU2l6ZSk7XG4gICAgICBsb2NhRGF0YS5zZXQobG9jYS5kYXRhLnN1YmFycmF5KDAsIGxvY2FEYXRhU2l6ZSkpO1xuICAgICAgbG9jYS5kYXRhID0gbG9jYURhdGE7XG4gICAgICBjb25zdCBvbGRHbHlmRGF0YSA9IGdseWYuZGF0YTtcbiAgICAgIGNvbnN0IG9sZEdseWZEYXRhTGVuZ3RoID0gb2xkR2x5ZkRhdGEubGVuZ3RoO1xuICAgICAgY29uc3QgbmV3R2x5ZkRhdGEgPSBuZXcgVWludDhBcnJheShvbGRHbHlmRGF0YUxlbmd0aCk7XG4gICAgICBsZXQgaSwgajtcbiAgICAgIGNvbnN0IGxvY2FFbnRyaWVzID0gW107XG5cbiAgICAgIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbnVtR2x5cGhzICsgMTsgaSsrLCBqICs9IGl0ZW1TaXplKSB7XG4gICAgICAgIGxldCBvZmZzZXQgPSBpdGVtRGVjb2RlKGxvY2FEYXRhLCBqKTtcblxuICAgICAgICBpZiAob2Zmc2V0ID4gb2xkR2x5ZkRhdGFMZW5ndGgpIHtcbiAgICAgICAgICBvZmZzZXQgPSBvbGRHbHlmRGF0YUxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FFbnRyaWVzLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICBlbmRPZmZzZXQ6IDBcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGxvY2FFbnRyaWVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgcmV0dXJuIGEub2Zmc2V0IC0gYi5vZmZzZXQ7XG4gICAgICB9KTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG51bUdseXBoczsgaSsrKSB7XG4gICAgICAgIGxvY2FFbnRyaWVzW2ldLmVuZE9mZnNldCA9IGxvY2FFbnRyaWVzW2kgKyAxXS5vZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIGxvY2FFbnRyaWVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgfSk7XG4gICAgICBjb25zdCBtaXNzaW5nR2x5cGhzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIGxldCB3cml0ZU9mZnNldCA9IDA7XG4gICAgICBpdGVtRW5jb2RlKGxvY2FEYXRhLCAwLCB3cml0ZU9mZnNldCk7XG5cbiAgICAgIGZvciAoaSA9IDAsIGogPSBpdGVtU2l6ZTsgaSA8IG51bUdseXBoczsgaSsrLCBqICs9IGl0ZW1TaXplKSB7XG4gICAgICAgIGNvbnN0IGdseXBoUHJvZmlsZSA9IHNhbml0aXplR2x5cGgob2xkR2x5ZkRhdGEsIGxvY2FFbnRyaWVzW2ldLm9mZnNldCwgbG9jYUVudHJpZXNbaV0uZW5kT2Zmc2V0LCBuZXdHbHlmRGF0YSwgd3JpdGVPZmZzZXQsIGhpbnRzVmFsaWQpO1xuICAgICAgICBjb25zdCBuZXdMZW5ndGggPSBnbHlwaFByb2ZpbGUubGVuZ3RoO1xuXG4gICAgICAgIGlmIChuZXdMZW5ndGggPT09IDApIHtcbiAgICAgICAgICBtaXNzaW5nR2x5cGhzW2ldID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChnbHlwaFByb2ZpbGUuc2l6ZU9mSW5zdHJ1Y3Rpb25zID4gbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zKSB7XG4gICAgICAgICAgbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zID0gZ2x5cGhQcm9maWxlLnNpemVPZkluc3RydWN0aW9ucztcbiAgICAgICAgfVxuXG4gICAgICAgIHdyaXRlT2Zmc2V0ICs9IG5ld0xlbmd0aDtcbiAgICAgICAgaXRlbUVuY29kZShsb2NhRGF0YSwgaiwgd3JpdGVPZmZzZXQpO1xuICAgICAgfVxuXG4gICAgICBpZiAod3JpdGVPZmZzZXQgPT09IDApIHtcbiAgICAgICAgY29uc3Qgc2ltcGxlR2x5cGggPSBuZXcgVWludDhBcnJheShbMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDBdKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gaXRlbVNpemU7IGkgPCBudW1HbHlwaHNPdXQ7IGkrKywgaiArPSBpdGVtU2l6ZSkge1xuICAgICAgICAgIGl0ZW1FbmNvZGUobG9jYURhdGEsIGosIHNpbXBsZUdseXBoLmxlbmd0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBnbHlmLmRhdGEgPSBzaW1wbGVHbHlwaDtcbiAgICAgIH0gZWxzZSBpZiAoZHVwRmlyc3RFbnRyeSkge1xuICAgICAgICBjb25zdCBmaXJzdEVudHJ5TGVuZ3RoID0gaXRlbURlY29kZShsb2NhRGF0YSwgaXRlbVNpemUpO1xuXG4gICAgICAgIGlmIChuZXdHbHlmRGF0YS5sZW5ndGggPiBmaXJzdEVudHJ5TGVuZ3RoICsgd3JpdGVPZmZzZXQpIHtcbiAgICAgICAgICBnbHlmLmRhdGEgPSBuZXdHbHlmRGF0YS5zdWJhcnJheSgwLCBmaXJzdEVudHJ5TGVuZ3RoICsgd3JpdGVPZmZzZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdseWYuZGF0YSA9IG5ldyBVaW50OEFycmF5KGZpcnN0RW50cnlMZW5ndGggKyB3cml0ZU9mZnNldCk7XG4gICAgICAgICAgZ2x5Zi5kYXRhLnNldChuZXdHbHlmRGF0YS5zdWJhcnJheSgwLCB3cml0ZU9mZnNldCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2x5Zi5kYXRhLnNldChuZXdHbHlmRGF0YS5zdWJhcnJheSgwLCBmaXJzdEVudHJ5TGVuZ3RoKSwgd3JpdGVPZmZzZXQpO1xuICAgICAgICBpdGVtRW5jb2RlKGxvY2EuZGF0YSwgbG9jYURhdGEubGVuZ3RoIC0gaXRlbVNpemUsIHdyaXRlT2Zmc2V0ICsgZmlyc3RFbnRyeUxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnbHlmLmRhdGEgPSBuZXdHbHlmRGF0YS5zdWJhcnJheSgwLCB3cml0ZU9mZnNldCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1pc3NpbmdHbHlwaHMsXG4gICAgICAgIG1heFNpemVPZkluc3RydWN0aW9uc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkUG9zdFNjcmlwdFRhYmxlKHBvc3QsIHByb3BlcnRpZXNPYmosIG1heHBOdW1HbHlwaHMpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gKGZvbnQuc3RhcnQgPyBmb250LnN0YXJ0IDogMCkgKyBwb3N0Lm9mZnNldDtcbiAgICAgIGZvbnQucG9zID0gc3RhcnQ7XG4gICAgICBjb25zdCBsZW5ndGggPSBwb3N0Lmxlbmd0aCxcbiAgICAgICAgICAgIGVuZCA9IHN0YXJ0ICsgbGVuZ3RoO1xuICAgICAgY29uc3QgdmVyc2lvbiA9IGZvbnQuZ2V0SW50MzIoKTtcbiAgICAgIGZvbnQuc2tpcCgyOCk7XG4gICAgICBsZXQgZ2x5cGhOYW1lcztcbiAgICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgICBsZXQgaTtcblxuICAgICAgc3dpdGNoICh2ZXJzaW9uKSB7XG4gICAgICAgIGNhc2UgMHgwMDAxMDAwMDpcbiAgICAgICAgICBnbHlwaE5hbWVzID0gX2ZvbnRzX3V0aWxzLk1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDB4MDAwMjAwMDA6XG4gICAgICAgICAgY29uc3QgbnVtR2x5cGhzID0gZm9udC5nZXRVaW50MTYoKTtcblxuICAgICAgICAgIGlmIChudW1HbHlwaHMgIT09IG1heHBOdW1HbHlwaHMpIHtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBnbHlwaE5hbWVJbmRleGVzID0gW107XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZm9udC5nZXRVaW50MTYoKTtcblxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDMyNzY4KSB7XG4gICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbHlwaE5hbWVJbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGN1c3RvbU5hbWVzID0gW10sXG4gICAgICAgICAgICAgICAgc3RyQnVmID0gW107XG5cbiAgICAgICAgICB3aGlsZSAoZm9udC5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0cmluZ0xlbmd0aCA9IGZvbnQuZ2V0Qnl0ZSgpO1xuICAgICAgICAgICAgc3RyQnVmLmxlbmd0aCA9IHN0cmluZ0xlbmd0aDtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmluZ0xlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgIHN0ckJ1ZltpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZm9udC5nZXRCeXRlKCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXN0b21OYW1lcy5wdXNoKHN0ckJ1Zi5qb2luKFwiXCIpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBnbHlwaE5hbWVzID0gW107XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHtcbiAgICAgICAgICAgIGNvbnN0IGogPSBnbHlwaE5hbWVJbmRleGVzW2ldO1xuXG4gICAgICAgICAgICBpZiAoaiA8IDI1OCkge1xuICAgICAgICAgICAgICBnbHlwaE5hbWVzLnB1c2goX2ZvbnRzX3V0aWxzLk1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZ1tqXSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbHlwaE5hbWVzLnB1c2goY3VzdG9tTmFtZXNbaiAtIDI1OF0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMHgwMDAzMDAwMDpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlVua25vd24vdW5zdXBwb3J0ZWQgcG9zdCB0YWJsZSB2ZXJzaW9uIFwiICsgdmVyc2lvbik7XG4gICAgICAgICAgdmFsaWQgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChwcm9wZXJ0aWVzT2JqLmRlZmF1bHRFbmNvZGluZykge1xuICAgICAgICAgICAgZ2x5cGhOYW1lcyA9IHByb3BlcnRpZXNPYmouZGVmYXVsdEVuY29kaW5nO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBwcm9wZXJ0aWVzT2JqLmdseXBoTmFtZXMgPSBnbHlwaE5hbWVzO1xuICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWROYW1lVGFibGUobmFtZVRhYmxlKSB7XG4gICAgICBjb25zdCBzdGFydCA9IChmb250LnN0YXJ0ID8gZm9udC5zdGFydCA6IDApICsgbmFtZVRhYmxlLm9mZnNldDtcbiAgICAgIGZvbnQucG9zID0gc3RhcnQ7XG4gICAgICBjb25zdCBuYW1lcyA9IFtbXSwgW11dO1xuICAgICAgY29uc3QgbGVuZ3RoID0gbmFtZVRhYmxlLmxlbmd0aCxcbiAgICAgICAgICAgIGVuZCA9IHN0YXJ0ICsgbGVuZ3RoO1xuICAgICAgY29uc3QgZm9ybWF0ID0gZm9udC5nZXRVaW50MTYoKTtcbiAgICAgIGNvbnN0IEZPUk1BVF8wX0hFQURFUl9MRU5HVEggPSA2O1xuXG4gICAgICBpZiAoZm9ybWF0ICE9PSAwIHx8IGxlbmd0aCA8IEZPUk1BVF8wX0hFQURFUl9MRU5HVEgpIHtcbiAgICAgICAgcmV0dXJuIG5hbWVzO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBudW1SZWNvcmRzID0gZm9udC5nZXRVaW50MTYoKTtcbiAgICAgIGNvbnN0IHN0cmluZ3NTdGFydCA9IGZvbnQuZ2V0VWludDE2KCk7XG4gICAgICBjb25zdCByZWNvcmRzID0gW107XG4gICAgICBjb25zdCBOQU1FX1JFQ09SRF9MRU5HVEggPSAxMjtcbiAgICAgIGxldCBpLCBpaTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG51bVJlY29yZHMgJiYgZm9udC5wb3MgKyBOQU1FX1JFQ09SRF9MRU5HVEggPD0gZW5kOyBpKyspIHtcbiAgICAgICAgY29uc3QgciA9IHtcbiAgICAgICAgICBwbGF0Zm9ybTogZm9udC5nZXRVaW50MTYoKSxcbiAgICAgICAgICBlbmNvZGluZzogZm9udC5nZXRVaW50MTYoKSxcbiAgICAgICAgICBsYW5ndWFnZTogZm9udC5nZXRVaW50MTYoKSxcbiAgICAgICAgICBuYW1lOiBmb250LmdldFVpbnQxNigpLFxuICAgICAgICAgIGxlbmd0aDogZm9udC5nZXRVaW50MTYoKSxcbiAgICAgICAgICBvZmZzZXQ6IGZvbnQuZ2V0VWludDE2KClcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoci5wbGF0Zm9ybSA9PT0gMSAmJiByLmVuY29kaW5nID09PSAwICYmIHIubGFuZ3VhZ2UgPT09IDAgfHwgci5wbGF0Zm9ybSA9PT0gMyAmJiByLmVuY29kaW5nID09PSAxICYmIHIubGFuZ3VhZ2UgPT09IDB4NDA5KSB7XG4gICAgICAgICAgcmVjb3Jkcy5wdXNoKHIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDAsIGlpID0gcmVjb3Jkcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IHJlY29yZHNbaV07XG5cbiAgICAgICAgaWYgKHJlY29yZC5sZW5ndGggPD0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9zID0gc3RhcnQgKyBzdHJpbmdzU3RhcnQgKyByZWNvcmQub2Zmc2V0O1xuXG4gICAgICAgIGlmIChwb3MgKyByZWNvcmQubGVuZ3RoID4gZW5kKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb250LnBvcyA9IHBvcztcbiAgICAgICAgY29uc3QgbmFtZUluZGV4ID0gcmVjb3JkLm5hbWU7XG5cbiAgICAgICAgaWYgKHJlY29yZC5lbmNvZGluZykge1xuICAgICAgICAgIGxldCBzdHIgPSBcIlwiO1xuXG4gICAgICAgICAgZm9yIChsZXQgaiA9IDAsIGpqID0gcmVjb3JkLmxlbmd0aDsgaiA8IGpqOyBqICs9IDIpIHtcbiAgICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGZvbnQuZ2V0VWludDE2KCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5hbWVzWzFdW25hbWVJbmRleF0gPSBzdHI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmFtZXNbMF1bbmFtZUluZGV4XSA9IGZvbnQuZ2V0U3RyaW5nKHJlY29yZC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuYW1lcztcbiAgICB9XG5cbiAgICBjb25zdCBUVE9wc1N0YWNrRGVsdGFzID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIC0yLCAtMiwgLTIsIC0yLCAwLCAwLCAtMiwgLTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMCwgMCwgLTEsIDAsIC0xLCAtMSwgLTEsIC0xLCAxLCAtMSwgLTk5OSwgMCwgMSwgMCwgLTEsIC0yLCAwLCAtMSwgLTIsIC0xLCAtMSwgMCwgLTEsIC0xLCAwLCAwLCAtOTk5LCAtOTk5LCAtMSwgLTEsIC0xLCAtMSwgLTIsIC05OTksIC0yLCAtMiwgLTk5OSwgMCwgLTIsIC0yLCAwLCAwLCAtMiwgMCwgLTIsIDAsIDAsIDAsIC0yLCAtMSwgLTEsIDEsIDEsIDAsIDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAwLCAwLCAtMSwgMCwgLTEsIC0xLCAwLCAtOTk5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAtMiwgLTk5OSwgLTk5OSwgLTk5OSwgLTk5OSwgLTk5OSwgLTEsIC0xLCAtMiwgLTIsIDAsIDAsIDAsIDAsIC0xLCAtMSwgLTk5OSwgLTIsIC0yLCAwLCAwLCAtMSwgLTIsIC0yLCAwLCAwLCAwLCAtMSwgLTEsIC0xLCAtMl07XG5cbiAgICBmdW5jdGlvbiBzYW5pdGl6ZVRUUHJvZ3JhbSh0YWJsZSwgdHRDb250ZXh0KSB7XG4gICAgICBsZXQgZGF0YSA9IHRhYmxlLmRhdGE7XG4gICAgICBsZXQgaSA9IDAsXG4gICAgICAgICAgaixcbiAgICAgICAgICBuLFxuICAgICAgICAgIGIsXG4gICAgICAgICAgZnVuY0lkLFxuICAgICAgICAgIHBjLFxuICAgICAgICAgIGxhc3RFbmRmID0gMCxcbiAgICAgICAgICBsYXN0RGVmZiA9IDA7XG4gICAgICBjb25zdCBzdGFjayA9IFtdO1xuICAgICAgY29uc3QgY2FsbHN0YWNrID0gW107XG4gICAgICBjb25zdCBmdW5jdGlvbnNDYWxsZWQgPSBbXTtcbiAgICAgIGxldCB0b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMgPSB0dENvbnRleHQudG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zO1xuICAgICAgbGV0IGluRkRFRiA9IGZhbHNlLFxuICAgICAgICAgIGlmTGV2ZWwgPSAwLFxuICAgICAgICAgIGluRUxTRSA9IDA7XG5cbiAgICAgIGZvciAobGV0IGlpID0gZGF0YS5sZW5ndGg7IGkgPCBpaTspIHtcbiAgICAgICAgY29uc3Qgb3AgPSBkYXRhW2krK107XG5cbiAgICAgICAgaWYgKG9wID09PSAweDQwKSB7XG4gICAgICAgICAgbiA9IGRhdGFbaSsrXTtcblxuICAgICAgICAgIGlmIChpbkZERUYgfHwgaW5FTFNFKSB7XG4gICAgICAgICAgICBpICs9IG47XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICAgICAgc3RhY2sucHVzaChkYXRhW2krK10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gMHg0MSkge1xuICAgICAgICAgIG4gPSBkYXRhW2krK107XG5cbiAgICAgICAgICBpZiAoaW5GREVGIHx8IGluRUxTRSkge1xuICAgICAgICAgICAgaSArPSBuICogMjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICAgICAgICBiID0gZGF0YVtpKytdO1xuICAgICAgICAgICAgICBzdGFjay5wdXNoKGIgPDwgOCB8IGRhdGFbaSsrXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKChvcCAmIDB4ZjgpID09PSAweGIwKSB7XG4gICAgICAgICAgbiA9IG9wIC0gMHhiMCArIDE7XG5cbiAgICAgICAgICBpZiAoaW5GREVGIHx8IGluRUxTRSkge1xuICAgICAgICAgICAgaSArPSBuO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgICAgIHN0YWNrLnB1c2goZGF0YVtpKytdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoKG9wICYgMHhmOCkgPT09IDB4YjgpIHtcbiAgICAgICAgICBuID0gb3AgLSAweGI4ICsgMTtcblxuICAgICAgICAgIGlmIChpbkZERUYgfHwgaW5FTFNFKSB7XG4gICAgICAgICAgICBpICs9IG4gKiAyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgICAgIGIgPSBkYXRhW2krK107XG4gICAgICAgICAgICAgIHN0YWNrLnB1c2goYiA8PCA4IHwgZGF0YVtpKytdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAob3AgPT09IDB4MmIgJiYgIXRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucykge1xuICAgICAgICAgIGlmICghaW5GREVGICYmICFpbkVMU0UpIHtcbiAgICAgICAgICAgIGZ1bmNJZCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgICAgICBpZiAoaXNOYU4oZnVuY0lkKSkge1xuICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJUVDogQ0FMTCBlbXB0eSBzdGFjayAob3IgaW52YWxpZCBlbnRyeSkuXCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdHRDb250ZXh0LmZ1bmN0aW9uc1VzZWRbZnVuY0lkXSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgaWYgKGZ1bmNJZCBpbiB0dENvbnRleHQuZnVuY3Rpb25zU3RhY2tEZWx0YXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTdGFja0xlbmd0aCA9IHN0YWNrLmxlbmd0aCArIHR0Q29udGV4dC5mdW5jdGlvbnNTdGFja0RlbHRhc1tmdW5jSWRdO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5ld1N0YWNrTGVuZ3RoIDwgMCkge1xuICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVFQ6IENBTEwgaW52YWxpZCBmdW5jdGlvbnMgc3RhY2sgZGVsdGEuXCIpO1xuICAgICAgICAgICAgICAgICAgdHRDb250ZXh0LmhpbnRzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdGFjay5sZW5ndGggPSBuZXdTdGFja0xlbmd0aDtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChmdW5jSWQgaW4gdHRDb250ZXh0LmZ1bmN0aW9uc0RlZmluZWQgJiYgIWZ1bmN0aW9uc0NhbGxlZC5pbmNsdWRlcyhmdW5jSWQpKSB7XG4gICAgICAgICAgICAgICAgY2FsbHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICBzdGFja1RvcDogc3RhY2subGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uc0NhbGxlZC5wdXNoKGZ1bmNJZCk7XG4gICAgICAgICAgICAgICAgcGMgPSB0dENvbnRleHQuZnVuY3Rpb25zRGVmaW5lZFtmdW5jSWRdO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFwYykge1xuICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVFQ6IENBTEwgbm9uLWV4aXN0ZW50IGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgICAgICAgdHRDb250ZXh0LmhpbnRzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkYXRhID0gcGMuZGF0YTtcbiAgICAgICAgICAgICAgICBpID0gcGMuaTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gMHgyYyAmJiAhdG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zKSB7XG4gICAgICAgICAgaWYgKGluRkRFRiB8fCBpbkVMU0UpIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlRUOiBuZXN0ZWQgRkRFRnMgbm90IGFsbG93ZWRcIik7XG4gICAgICAgICAgICB0b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGluRkRFRiA9IHRydWU7XG4gICAgICAgICAgbGFzdERlZmYgPSBpO1xuICAgICAgICAgIGZ1bmNJZCA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIHR0Q29udGV4dC5mdW5jdGlvbnNEZWZpbmVkW2Z1bmNJZF0gPSB7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgaVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAob3AgPT09IDB4MmQpIHtcbiAgICAgICAgICBpZiAoaW5GREVGKSB7XG4gICAgICAgICAgICBpbkZERUYgPSBmYWxzZTtcbiAgICAgICAgICAgIGxhc3RFbmRmID0gaTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGMgPSBjYWxsc3RhY2sucG9wKCk7XG5cbiAgICAgICAgICAgIGlmICghcGMpIHtcbiAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVFQ6IEVOREYgYmFkIHN0YWNrXCIpO1xuICAgICAgICAgICAgICB0dENvbnRleHQuaGludHNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmNJZCA9IGZ1bmN0aW9uc0NhbGxlZC5wb3AoKTtcbiAgICAgICAgICAgIGRhdGEgPSBwYy5kYXRhO1xuICAgICAgICAgICAgaSA9IHBjLmk7XG4gICAgICAgICAgICB0dENvbnRleHQuZnVuY3Rpb25zU3RhY2tEZWx0YXNbZnVuY0lkXSA9IHN0YWNrLmxlbmd0aCAtIHBjLnN0YWNrVG9wO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gMHg4OSkge1xuICAgICAgICAgIGlmIChpbkZERUYgfHwgaW5FTFNFKSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJUVDogbmVzdGVkIElERUZzIG5vdCBhbGxvd2VkXCIpO1xuICAgICAgICAgICAgdG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpbkZERUYgPSB0cnVlO1xuICAgICAgICAgIGxhc3REZWZmID0gaTtcbiAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gMHg1OCkge1xuICAgICAgICAgICsraWZMZXZlbDtcbiAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gMHgxYikge1xuICAgICAgICAgIGluRUxTRSA9IGlmTGV2ZWw7XG4gICAgICAgIH0gZWxzZSBpZiAob3AgPT09IDB4NTkpIHtcbiAgICAgICAgICBpZiAoaW5FTFNFID09PSBpZkxldmVsKSB7XG4gICAgICAgICAgICBpbkVMU0UgPSAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC0taWZMZXZlbDtcbiAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gMHgxYykge1xuICAgICAgICAgIGlmICghaW5GREVGICYmICFpbkVMU0UpIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgICAgICBpZiAob2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgICBpICs9IG9mZnNldCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpbkZERUYgJiYgIWluRUxTRSkge1xuICAgICAgICAgIGxldCBzdGFja0RlbHRhID0gMDtcblxuICAgICAgICAgIGlmIChvcCA8PSAweDhlKSB7XG4gICAgICAgICAgICBzdGFja0RlbHRhID0gVFRPcHNTdGFja0RlbHRhc1tvcF07XG4gICAgICAgICAgfSBlbHNlIGlmIChvcCA+PSAweGMwICYmIG9wIDw9IDB4ZGYpIHtcbiAgICAgICAgICAgIHN0YWNrRGVsdGEgPSAtMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wID49IDB4ZTApIHtcbiAgICAgICAgICAgIHN0YWNrRGVsdGEgPSAtMjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAob3AgPj0gMHg3MSAmJiBvcCA8PSAweDc1KSB7XG4gICAgICAgICAgICBuID0gc3RhY2sucG9wKCk7XG5cbiAgICAgICAgICAgIGlmICghaXNOYU4obikpIHtcbiAgICAgICAgICAgICAgc3RhY2tEZWx0YSA9IC1uICogMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB3aGlsZSAoc3RhY2tEZWx0YSA8IDAgJiYgc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFja0RlbHRhKys7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgd2hpbGUgKHN0YWNrRGVsdGEgPiAwKSB7XG4gICAgICAgICAgICBzdGFjay5wdXNoKE5hTik7XG4gICAgICAgICAgICBzdGFja0RlbHRhLS07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHR0Q29udGV4dC50b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMgPSB0b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnM7XG4gICAgICBjb25zdCBjb250ZW50ID0gW2RhdGFdO1xuXG4gICAgICBpZiAoaSA+IGRhdGEubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRlbnQucHVzaChuZXcgVWludDhBcnJheShpIC0gZGF0YS5sZW5ndGgpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGxhc3REZWZmID4gbGFzdEVuZGYpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVFQ6IGNvbXBsZW1lbnRpbmcgYSBtaXNzaW5nIGZ1bmN0aW9uIHRhaWxcIik7XG4gICAgICAgIGNvbnRlbnQucHVzaChuZXcgVWludDhBcnJheShbMHgyMiwgMHgyZF0pKTtcbiAgICAgIH1cblxuICAgICAgZm9sZFRUVGFibGUodGFibGUsIGNvbnRlbnQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrSW52YWxpZEZ1bmN0aW9ucyh0dENvbnRleHQsIG1heEZ1bmN0aW9uRGVmcykge1xuICAgICAgaWYgKHR0Q29udGV4dC50b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodHRDb250ZXh0LmZ1bmN0aW9uc0RlZmluZWQubGVuZ3RoID4gbWF4RnVuY3Rpb25EZWZzKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIlRUOiBtb3JlIGZ1bmN0aW9ucyBkZWZpbmVkIHRoYW4gZXhwZWN0ZWRcIik7XG4gICAgICAgIHR0Q29udGV4dC5oaW50c1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaiA9IDAsIGpqID0gdHRDb250ZXh0LmZ1bmN0aW9uc1VzZWQubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICBpZiAoaiA+IG1heEZ1bmN0aW9uRGVmcykge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlRUOiBpbnZhbGlkIGZ1bmN0aW9uIGlkOiBcIiArIGopO1xuICAgICAgICAgIHR0Q29udGV4dC5oaW50c1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR0Q29udGV4dC5mdW5jdGlvbnNVc2VkW2pdICYmICF0dENvbnRleHQuZnVuY3Rpb25zRGVmaW5lZFtqXSkge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlRUOiB1bmRlZmluZWQgZnVuY3Rpb246IFwiICsgaik7XG4gICAgICAgICAgdHRDb250ZXh0LmhpbnRzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb2xkVFRUYWJsZSh0YWJsZSwgY29udGVudCkge1xuICAgICAgaWYgKGNvbnRlbnQubGVuZ3RoID4gMSkge1xuICAgICAgICBsZXQgbmV3TGVuZ3RoID0gMDtcbiAgICAgICAgbGV0IGosIGpqO1xuXG4gICAgICAgIGZvciAoaiA9IDAsIGpqID0gY29udGVudC5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgbmV3TGVuZ3RoICs9IGNvbnRlbnRbal0ubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3TGVuZ3RoID0gbmV3TGVuZ3RoICsgMyAmIH4zO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheShuZXdMZW5ndGgpO1xuICAgICAgICBsZXQgcG9zID0gMDtcblxuICAgICAgICBmb3IgKGogPSAwLCBqaiA9IGNvbnRlbnQubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICAgIHJlc3VsdC5zZXQoY29udGVudFtqXSwgcG9zKTtcbiAgICAgICAgICBwb3MgKz0gY29udGVudFtqXS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB0YWJsZS5kYXRhID0gcmVzdWx0O1xuICAgICAgICB0YWJsZS5sZW5ndGggPSBuZXdMZW5ndGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2FuaXRpemVUVFByb2dyYW1zKGZwZ20sIHByZXAsIGN2dCwgbWF4RnVuY3Rpb25EZWZzKSB7XG4gICAgICBjb25zdCB0dENvbnRleHQgPSB7XG4gICAgICAgIGZ1bmN0aW9uc0RlZmluZWQ6IFtdLFxuICAgICAgICBmdW5jdGlvbnNVc2VkOiBbXSxcbiAgICAgICAgZnVuY3Rpb25zU3RhY2tEZWx0YXM6IFtdLFxuICAgICAgICB0b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnM6IGZhbHNlLFxuICAgICAgICBoaW50c1ZhbGlkOiB0cnVlXG4gICAgICB9O1xuXG4gICAgICBpZiAoZnBnbSkge1xuICAgICAgICBzYW5pdGl6ZVRUUHJvZ3JhbShmcGdtLCB0dENvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJlcCkge1xuICAgICAgICBzYW5pdGl6ZVRUUHJvZ3JhbShwcmVwLCB0dENvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZnBnbSkge1xuICAgICAgICBjaGVja0ludmFsaWRGdW5jdGlvbnModHRDb250ZXh0LCBtYXhGdW5jdGlvbkRlZnMpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3Z0ICYmIGN2dC5sZW5ndGggJiAxKSB7XG4gICAgICAgIGNvbnN0IGN2dERhdGEgPSBuZXcgVWludDhBcnJheShjdnQubGVuZ3RoICsgMSk7XG4gICAgICAgIGN2dERhdGEuc2V0KGN2dC5kYXRhKTtcbiAgICAgICAgY3Z0LmRhdGEgPSBjdnREYXRhO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHRDb250ZXh0LmhpbnRzVmFsaWQ7XG4gICAgfVxuXG4gICAgZm9udCA9IG5ldyBfc3RyZWFtLlN0cmVhbShuZXcgVWludDhBcnJheShmb250LmdldEJ5dGVzKCkpKTtcbiAgICBsZXQgaGVhZGVyLCB0YWJsZXM7XG5cbiAgICBpZiAoaXNUcnVlVHlwZUNvbGxlY3Rpb25GaWxlKGZvbnQpKSB7XG4gICAgICBjb25zdCB0dGNEYXRhID0gcmVhZFRydWVUeXBlQ29sbGVjdGlvbkRhdGEoZm9udCwgdGhpcy5uYW1lKTtcbiAgICAgIGhlYWRlciA9IHR0Y0RhdGEuaGVhZGVyO1xuICAgICAgdGFibGVzID0gdHRjRGF0YS50YWJsZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlciA9IHJlYWRPcGVuVHlwZUhlYWRlcihmb250KTtcbiAgICAgIHRhYmxlcyA9IHJlYWRUYWJsZXMoZm9udCwgaGVhZGVyLm51bVRhYmxlcyk7XG4gICAgfVxuXG4gICAgbGV0IGNmZiwgY2ZmRmlsZTtcbiAgICBjb25zdCBpc1RydWVUeXBlID0gIXRhYmxlc1tcIkNGRiBcIl07XG5cbiAgICBpZiAoIWlzVHJ1ZVR5cGUpIHtcbiAgICAgIGNvbnN0IGlzQ29tcG9zaXRlID0gcHJvcGVydGllcy5jb21wb3NpdGUgJiYgKChwcm9wZXJ0aWVzLmNpZFRvR2lkTWFwIHx8IFtdKS5sZW5ndGggPiAwIHx8ICEocHJvcGVydGllcy5jTWFwIGluc3RhbmNlb2YgX2NtYXAuSWRlbnRpdHlDTWFwKSk7XG5cbiAgICAgIGlmIChoZWFkZXIudmVyc2lvbiA9PT0gXCJPVFRPXCIgJiYgIWlzQ29tcG9zaXRlIHx8ICF0YWJsZXMuaGVhZCB8fCAhdGFibGVzLmhoZWEgfHwgIXRhYmxlcy5tYXhwIHx8ICF0YWJsZXMucG9zdCkge1xuICAgICAgICBjZmZGaWxlID0gbmV3IF9zdHJlYW0uU3RyZWFtKHRhYmxlc1tcIkNGRiBcIl0uZGF0YSk7XG4gICAgICAgIGNmZiA9IG5ldyBfY2ZmX2ZvbnQuQ0ZGRm9udChjZmZGaWxlLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgYWRqdXN0V2lkdGhzKHByb3BlcnRpZXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0KG5hbWUsIGNmZiwgcHJvcGVydGllcyk7XG4gICAgICB9XG5cbiAgICAgIGRlbGV0ZSB0YWJsZXMuZ2x5ZjtcbiAgICAgIGRlbGV0ZSB0YWJsZXMubG9jYTtcbiAgICAgIGRlbGV0ZSB0YWJsZXMuZnBnbTtcbiAgICAgIGRlbGV0ZSB0YWJsZXMucHJlcDtcbiAgICAgIGRlbGV0ZSB0YWJsZXNbXCJjdnQgXCJdO1xuICAgICAgdGhpcy5pc09wZW5UeXBlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0YWJsZXMubG9jYSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1JlcXVpcmVkIFwibG9jYVwiIHRhYmxlIGlzIG5vdCBmb3VuZCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRhYmxlcy5nbHlmKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKSgnUmVxdWlyZWQgXCJnbHlmXCIgdGFibGUgaXMgbm90IGZvdW5kIC0tIHRyeWluZyB0byByZWNvdmVyLicpO1xuICAgICAgICB0YWJsZXMuZ2x5ZiA9IHtcbiAgICAgICAgICB0YWc6IFwiZ2x5ZlwiLFxuICAgICAgICAgIGRhdGE6IG5ldyBVaW50OEFycmF5KDApXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNPcGVuVHlwZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGFibGVzLm1heHApIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignUmVxdWlyZWQgXCJtYXhwXCIgdGFibGUgaXMgbm90IGZvdW5kJyk7XG4gICAgfVxuXG4gICAgZm9udC5wb3MgPSAoZm9udC5zdGFydCB8fCAwKSArIHRhYmxlcy5tYXhwLm9mZnNldDtcbiAgICBjb25zdCB2ZXJzaW9uID0gZm9udC5nZXRJbnQzMigpO1xuICAgIGNvbnN0IG51bUdseXBocyA9IGZvbnQuZ2V0VWludDE2KCk7XG5cbiAgICBpZiAocHJvcGVydGllcy5zY2FsZUZhY3RvcnMgJiYgcHJvcGVydGllcy5zY2FsZUZhY3RvcnMubGVuZ3RoID09PSBudW1HbHlwaHMgJiYgaXNUcnVlVHlwZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBzY2FsZUZhY3RvcnNcbiAgICAgIH0gPSBwcm9wZXJ0aWVzO1xuICAgICAgY29uc3QgaXNHbHlwaExvY2F0aW9uc0xvbmcgPSBpbnQxNih0YWJsZXMuaGVhZC5kYXRhWzUwXSwgdGFibGVzLmhlYWQuZGF0YVs1MV0pO1xuICAgICAgY29uc3QgZ2x5cGhzID0gbmV3IF9nbHlmLkdseWZUYWJsZSh7XG4gICAgICAgIGdseWZUYWJsZTogdGFibGVzLmdseWYuZGF0YSxcbiAgICAgICAgaXNHbHlwaExvY2F0aW9uc0xvbmcsXG4gICAgICAgIGxvY2FUYWJsZTogdGFibGVzLmxvY2EuZGF0YSxcbiAgICAgICAgbnVtR2x5cGhzXG4gICAgICB9KTtcbiAgICAgIGdseXBocy5zY2FsZShzY2FsZUZhY3RvcnMpO1xuICAgICAgY29uc3Qge1xuICAgICAgICBnbHlmLFxuICAgICAgICBsb2NhLFxuICAgICAgICBpc0xvY2F0aW9uTG9uZ1xuICAgICAgfSA9IGdseXBocy53cml0ZSgpO1xuICAgICAgdGFibGVzLmdseWYuZGF0YSA9IGdseWY7XG4gICAgICB0YWJsZXMubG9jYS5kYXRhID0gbG9jYTtcblxuICAgICAgaWYgKGlzTG9jYXRpb25Mb25nICE9PSAhIWlzR2x5cGhMb2NhdGlvbnNMb25nKSB7XG4gICAgICAgIHRhYmxlcy5oZWFkLmRhdGFbNTBdID0gMDtcbiAgICAgICAgdGFibGVzLmhlYWQuZGF0YVs1MV0gPSBpc0xvY2F0aW9uTG9uZyA/IDEgOiAwO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXRyaWNzID0gdGFibGVzLmhtdHguZGF0YTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykge1xuICAgICAgICBjb25zdCBqID0gNCAqIGk7XG4gICAgICAgIGNvbnN0IGFkdmFuY2VXaWR0aCA9IE1hdGgucm91bmQoc2NhbGVGYWN0b3JzW2ldICogaW50MTYobWV0cmljc1tqXSwgbWV0cmljc1tqICsgMV0pKTtcbiAgICAgICAgbWV0cmljc1tqXSA9IGFkdmFuY2VXaWR0aCA+PiA4ICYgMHhmZjtcbiAgICAgICAgbWV0cmljc1tqICsgMV0gPSBhZHZhbmNlV2lkdGggJiAweGZmO1xuICAgICAgICBjb25zdCBsc2IgPSBNYXRoLnJvdW5kKHNjYWxlRmFjdG9yc1tpXSAqIHNpZ25lZEludDE2KG1ldHJpY3NbaiArIDJdLCBtZXRyaWNzW2ogKyAzXSkpO1xuICAgICAgICB3cml0ZVNpZ25lZEludDE2KG1ldHJpY3MsIGogKyAyLCBsc2IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBudW1HbHlwaHNPdXQgPSBudW1HbHlwaHMgKyAxO1xuICAgIGxldCBkdXBGaXJzdEVudHJ5ID0gdHJ1ZTtcblxuICAgIGlmIChudW1HbHlwaHNPdXQgPiAweGZmZmYpIHtcbiAgICAgIGR1cEZpcnN0RW50cnkgPSBmYWxzZTtcbiAgICAgIG51bUdseXBoc091dCA9IG51bUdseXBocztcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIk5vdCBlbm91Z2ggc3BhY2UgaW4gZ2x5ZnMgdG8gZHVwbGljYXRlIGZpcnN0IGdseXBoLlwiKTtcbiAgICB9XG5cbiAgICBsZXQgbWF4RnVuY3Rpb25EZWZzID0gMDtcbiAgICBsZXQgbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zID0gMDtcblxuICAgIGlmICh2ZXJzaW9uID49IDB4MDAwMTAwMDAgJiYgdGFibGVzLm1heHAubGVuZ3RoID49IDIyKSB7XG4gICAgICBmb250LnBvcyArPSA4O1xuICAgICAgY29uc3QgbWF4Wm9uZXMgPSBmb250LmdldFVpbnQxNigpO1xuXG4gICAgICBpZiAobWF4Wm9uZXMgPiAyKSB7XG4gICAgICAgIHRhYmxlcy5tYXhwLmRhdGFbMTRdID0gMDtcbiAgICAgICAgdGFibGVzLm1heHAuZGF0YVsxNV0gPSAyO1xuICAgICAgfVxuXG4gICAgICBmb250LnBvcyArPSA0O1xuICAgICAgbWF4RnVuY3Rpb25EZWZzID0gZm9udC5nZXRVaW50MTYoKTtcbiAgICAgIGZvbnQucG9zICs9IDQ7XG4gICAgICBtYXhTaXplT2ZJbnN0cnVjdGlvbnMgPSBmb250LmdldFVpbnQxNigpO1xuICAgIH1cblxuICAgIHRhYmxlcy5tYXhwLmRhdGFbNF0gPSBudW1HbHlwaHNPdXQgPj4gODtcbiAgICB0YWJsZXMubWF4cC5kYXRhWzVdID0gbnVtR2x5cGhzT3V0ICYgMjU1O1xuICAgIGNvbnN0IGhpbnRzVmFsaWQgPSBzYW5pdGl6ZVRUUHJvZ3JhbXModGFibGVzLmZwZ20sIHRhYmxlcy5wcmVwLCB0YWJsZXNbXCJjdnQgXCJdLCBtYXhGdW5jdGlvbkRlZnMpO1xuXG4gICAgaWYgKCFoaW50c1ZhbGlkKSB7XG4gICAgICBkZWxldGUgdGFibGVzLmZwZ207XG4gICAgICBkZWxldGUgdGFibGVzLnByZXA7XG4gICAgICBkZWxldGUgdGFibGVzW1wiY3Z0IFwiXTtcbiAgICB9XG5cbiAgICBzYW5pdGl6ZU1ldHJpY3MoZm9udCwgdGFibGVzLmhoZWEsIHRhYmxlcy5obXR4LCB0YWJsZXMuaGVhZCwgbnVtR2x5cGhzT3V0LCBkdXBGaXJzdEVudHJ5KTtcblxuICAgIGlmICghdGFibGVzLmhlYWQpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignUmVxdWlyZWQgXCJoZWFkXCIgdGFibGUgaXMgbm90IGZvdW5kJyk7XG4gICAgfVxuXG4gICAgc2FuaXRpemVIZWFkKHRhYmxlcy5oZWFkLCBudW1HbHlwaHMsIGlzVHJ1ZVR5cGUgPyB0YWJsZXMubG9jYS5sZW5ndGggOiAwKTtcbiAgICBsZXQgbWlzc2luZ0dseXBocyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICBpZiAoaXNUcnVlVHlwZSkge1xuICAgICAgY29uc3QgaXNHbHlwaExvY2F0aW9uc0xvbmcgPSBpbnQxNih0YWJsZXMuaGVhZC5kYXRhWzUwXSwgdGFibGVzLmhlYWQuZGF0YVs1MV0pO1xuICAgICAgY29uc3QgZ2x5cGhzSW5mbyA9IHNhbml0aXplR2x5cGhMb2NhdGlvbnModGFibGVzLmxvY2EsIHRhYmxlcy5nbHlmLCBudW1HbHlwaHMsIGlzR2x5cGhMb2NhdGlvbnNMb25nLCBoaW50c1ZhbGlkLCBkdXBGaXJzdEVudHJ5LCBtYXhTaXplT2ZJbnN0cnVjdGlvbnMpO1xuICAgICAgbWlzc2luZ0dseXBocyA9IGdseXBoc0luZm8ubWlzc2luZ0dseXBocztcblxuICAgICAgaWYgKHZlcnNpb24gPj0gMHgwMDAxMDAwMCAmJiB0YWJsZXMubWF4cC5sZW5ndGggPj0gMjIpIHtcbiAgICAgICAgdGFibGVzLm1heHAuZGF0YVsyNl0gPSBnbHlwaHNJbmZvLm1heFNpemVPZkluc3RydWN0aW9ucyA+PiA4O1xuICAgICAgICB0YWJsZXMubWF4cC5kYXRhWzI3XSA9IGdseXBoc0luZm8ubWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zICYgMjU1O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGFibGVzLmhoZWEpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignUmVxdWlyZWQgXCJoaGVhXCIgdGFibGUgaXMgbm90IGZvdW5kJyk7XG4gICAgfVxuXG4gICAgaWYgKHRhYmxlcy5oaGVhLmRhdGFbMTBdID09PSAwICYmIHRhYmxlcy5oaGVhLmRhdGFbMTFdID09PSAwKSB7XG4gICAgICB0YWJsZXMuaGhlYS5kYXRhWzEwXSA9IDB4ZmY7XG4gICAgICB0YWJsZXMuaGhlYS5kYXRhWzExXSA9IDB4ZmY7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc092ZXJyaWRlID0ge1xuICAgICAgdW5pdHNQZXJFbTogaW50MTYodGFibGVzLmhlYWQuZGF0YVsxOF0sIHRhYmxlcy5oZWFkLmRhdGFbMTldKSxcbiAgICAgIHlNYXg6IGludDE2KHRhYmxlcy5oZWFkLmRhdGFbNDJdLCB0YWJsZXMuaGVhZC5kYXRhWzQzXSksXG4gICAgICB5TWluOiBzaWduZWRJbnQxNih0YWJsZXMuaGVhZC5kYXRhWzM4XSwgdGFibGVzLmhlYWQuZGF0YVszOV0pLFxuICAgICAgYXNjZW50OiBzaWduZWRJbnQxNih0YWJsZXMuaGhlYS5kYXRhWzRdLCB0YWJsZXMuaGhlYS5kYXRhWzVdKSxcbiAgICAgIGRlc2NlbnQ6IHNpZ25lZEludDE2KHRhYmxlcy5oaGVhLmRhdGFbNl0sIHRhYmxlcy5oaGVhLmRhdGFbN10pLFxuICAgICAgbGluZUdhcDogc2lnbmVkSW50MTYodGFibGVzLmhoZWEuZGF0YVs4XSwgdGFibGVzLmhoZWEuZGF0YVs5XSlcbiAgICB9O1xuICAgIHRoaXMuYXNjZW50ID0gbWV0cmljc092ZXJyaWRlLmFzY2VudCAvIG1ldHJpY3NPdmVycmlkZS51bml0c1BlckVtO1xuICAgIHRoaXMuZGVzY2VudCA9IG1ldHJpY3NPdmVycmlkZS5kZXNjZW50IC8gbWV0cmljc092ZXJyaWRlLnVuaXRzUGVyRW07XG4gICAgdGhpcy5saW5lR2FwID0gbWV0cmljc092ZXJyaWRlLmxpbmVHYXAgLyBtZXRyaWNzT3ZlcnJpZGUudW5pdHNQZXJFbTtcblxuICAgIGlmICh0aGlzLmNzc0ZvbnRJbmZvICYmIHRoaXMuY3NzRm9udEluZm8ubGluZUhlaWdodCkge1xuICAgICAgdGhpcy5saW5lSGVpZ2h0ID0gdGhpcy5jc3NGb250SW5mby5tZXRyaWNzLmxpbmVIZWlnaHQ7XG4gICAgICB0aGlzLmxpbmVHYXAgPSB0aGlzLmNzc0ZvbnRJbmZvLm1ldHJpY3MubGluZUdhcDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5saW5lSGVpZ2h0ID0gdGhpcy5hc2NlbnQgLSB0aGlzLmRlc2NlbnQgKyB0aGlzLmxpbmVHYXA7XG4gICAgfVxuXG4gICAgaWYgKHRhYmxlcy5wb3N0KSB7XG4gICAgICByZWFkUG9zdFNjcmlwdFRhYmxlKHRhYmxlcy5wb3N0LCBwcm9wZXJ0aWVzLCBudW1HbHlwaHMpO1xuICAgIH1cblxuICAgIHRhYmxlcy5wb3N0ID0ge1xuICAgICAgdGFnOiBcInBvc3RcIixcbiAgICAgIGRhdGE6IGNyZWF0ZVBvc3RUYWJsZShwcm9wZXJ0aWVzKVxuICAgIH07XG4gICAgY29uc3QgY2hhckNvZGVUb0dseXBoSWQgPSBbXTtcblxuICAgIGZ1bmN0aW9uIGhhc0dseXBoKGdseXBoSWQpIHtcbiAgICAgIHJldHVybiAhbWlzc2luZ0dseXBoc1tnbHlwaElkXTtcbiAgICB9XG5cbiAgICBpZiAocHJvcGVydGllcy5jb21wb3NpdGUpIHtcbiAgICAgIGNvbnN0IGNpZFRvR2lkTWFwID0gcHJvcGVydGllcy5jaWRUb0dpZE1hcCB8fCBbXTtcbiAgICAgIGNvbnN0IGlzQ2lkVG9HaWRNYXBFbXB0eSA9IGNpZFRvR2lkTWFwLmxlbmd0aCA9PT0gMDtcbiAgICAgIHByb3BlcnRpZXMuY01hcC5mb3JFYWNoKGZ1bmN0aW9uIChjaGFyQ29kZSwgY2lkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2lkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgY2lkID0gY29udmVydENpZFN0cmluZyhjaGFyQ29kZSwgY2lkLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaWQgPiAweGZmZmYpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJNYXggc2l6ZSBvZiBDSUQgaXMgNjUsNTM1XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGdseXBoSWQgPSAtMTtcblxuICAgICAgICBpZiAoaXNDaWRUb0dpZE1hcEVtcHR5KSB7XG4gICAgICAgICAgZ2x5cGhJZCA9IGNpZDtcbiAgICAgICAgfSBlbHNlIGlmIChjaWRUb0dpZE1hcFtjaWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBnbHlwaElkID0gY2lkVG9HaWRNYXBbY2lkXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChnbHlwaElkID49IDAgJiYgZ2x5cGhJZCA8IG51bUdseXBocyAmJiBoYXNHbHlwaChnbHlwaElkKSkge1xuICAgICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGdseXBoSWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjbWFwVGFibGUgPSByZWFkQ21hcFRhYmxlKHRhYmxlcy5jbWFwLCBmb250LCB0aGlzLmlzU3ltYm9saWNGb250LCBwcm9wZXJ0aWVzLmhhc0VuY29kaW5nKTtcbiAgICAgIGNvbnN0IGNtYXBQbGF0Zm9ybUlkID0gY21hcFRhYmxlLnBsYXRmb3JtSWQ7XG4gICAgICBjb25zdCBjbWFwRW5jb2RpbmdJZCA9IGNtYXBUYWJsZS5lbmNvZGluZ0lkO1xuICAgICAgY29uc3QgY21hcE1hcHBpbmdzID0gY21hcFRhYmxlLm1hcHBpbmdzO1xuICAgICAgY29uc3QgY21hcE1hcHBpbmdzTGVuZ3RoID0gY21hcE1hcHBpbmdzLmxlbmd0aDtcbiAgICAgIGxldCBiYXNlRW5jb2RpbmcgPSBbXSxcbiAgICAgICAgICBmb3JjZVBvc3RUYWJsZSA9IGZhbHNlO1xuXG4gICAgICBpZiAocHJvcGVydGllcy5oYXNFbmNvZGluZyAmJiAocHJvcGVydGllcy5iYXNlRW5jb2RpbmdOYW1lID09PSBcIk1hY1JvbWFuRW5jb2RpbmdcIiB8fCBwcm9wZXJ0aWVzLmJhc2VFbmNvZGluZ05hbWUgPT09IFwiV2luQW5zaUVuY29kaW5nXCIpKSB7XG4gICAgICAgIGJhc2VFbmNvZGluZyA9ICgwLCBfZW5jb2RpbmdzLmdldEVuY29kaW5nKShwcm9wZXJ0aWVzLmJhc2VFbmNvZGluZ05hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcGVydGllcy5oYXNFbmNvZGluZyAmJiAhdGhpcy5pc1N5bWJvbGljRm9udCAmJiAoY21hcFBsYXRmb3JtSWQgPT09IDMgJiYgY21hcEVuY29kaW5nSWQgPT09IDEgfHwgY21hcFBsYXRmb3JtSWQgPT09IDEgJiYgY21hcEVuY29kaW5nSWQgPT09IDApKSB7XG4gICAgICAgIGNvbnN0IGdseXBoc1VuaWNvZGVNYXAgPSAoMCwgX2dseXBobGlzdC5nZXRHbHlwaHNVbmljb2RlKSgpO1xuXG4gICAgICAgIGZvciAobGV0IGNoYXJDb2RlID0gMDsgY2hhckNvZGUgPCAyNTY7IGNoYXJDb2RlKyspIHtcbiAgICAgICAgICBsZXQgZ2x5cGhOYW1lO1xuXG4gICAgICAgICAgaWYgKHRoaXMuZGlmZmVyZW5jZXNbY2hhckNvZGVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGdseXBoTmFtZSA9IHRoaXMuZGlmZmVyZW5jZXNbY2hhckNvZGVdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYmFzZUVuY29kaW5nLmxlbmd0aCAmJiBiYXNlRW5jb2RpbmdbY2hhckNvZGVdICE9PSBcIlwiKSB7XG4gICAgICAgICAgICBnbHlwaE5hbWUgPSBiYXNlRW5jb2RpbmdbY2hhckNvZGVdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbHlwaE5hbWUgPSBfZW5jb2RpbmdzLlN0YW5kYXJkRW5jb2RpbmdbY2hhckNvZGVdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZ2x5cGhOYW1lKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzdGFuZGFyZEdseXBoTmFtZSA9ICgwLCBfZm9udHNfdXRpbHMucmVjb3ZlckdseXBoTmFtZSkoZ2x5cGhOYW1lLCBnbHlwaHNVbmljb2RlTWFwKTtcbiAgICAgICAgICBsZXQgdW5pY29kZU9yQ2hhckNvZGU7XG5cbiAgICAgICAgICBpZiAoY21hcFBsYXRmb3JtSWQgPT09IDMgJiYgY21hcEVuY29kaW5nSWQgPT09IDEpIHtcbiAgICAgICAgICAgIHVuaWNvZGVPckNoYXJDb2RlID0gZ2x5cGhzVW5pY29kZU1hcFtzdGFuZGFyZEdseXBoTmFtZV07XG4gICAgICAgICAgfSBlbHNlIGlmIChjbWFwUGxhdGZvcm1JZCA9PT0gMSAmJiBjbWFwRW5jb2RpbmdJZCA9PT0gMCkge1xuICAgICAgICAgICAgdW5pY29kZU9yQ2hhckNvZGUgPSBfZW5jb2RpbmdzLk1hY1JvbWFuRW5jb2RpbmcuaW5kZXhPZihzdGFuZGFyZEdseXBoTmFtZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHVuaWNvZGVPckNoYXJDb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICghcHJvcGVydGllcy5nbHlwaE5hbWVzICYmIHByb3BlcnRpZXMuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXAgJiYgISh0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIF90b191bmljb2RlX21hcC5JZGVudGl0eVRvVW5pY29kZU1hcCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgdW5pY29kZSA9IHRoaXMudG9Vbmljb2RlLmdldChjaGFyQ29kZSk7XG5cbiAgICAgICAgICAgICAgaWYgKHVuaWNvZGUpIHtcbiAgICAgICAgICAgICAgICB1bmljb2RlT3JDaGFyQ29kZSA9IHVuaWNvZGUuY29kZVBvaW50QXQoMCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHVuaWNvZGVPckNoYXJDb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbWFwTWFwcGluZ3NMZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKGNtYXBNYXBwaW5nc1tpXS5jaGFyQ29kZSAhPT0gdW5pY29kZU9yQ2hhckNvZGUpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGNtYXBNYXBwaW5nc1tpXS5nbHlwaElkO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNtYXBQbGF0Zm9ybUlkID09PSAwKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY21hcE1hcHBpbmdzTGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjbWFwTWFwcGluZ3NbaV0uY2hhckNvZGVdID0gY21hcE1hcHBpbmdzW2ldLmdseXBoSWQ7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JjZVBvc3RUYWJsZSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNtYXBNYXBwaW5nc0xlbmd0aDsgKytpKSB7XG4gICAgICAgICAgbGV0IGNoYXJDb2RlID0gY21hcE1hcHBpbmdzW2ldLmNoYXJDb2RlO1xuXG4gICAgICAgICAgaWYgKGNtYXBQbGF0Zm9ybUlkID09PSAzICYmIGNoYXJDb2RlID49IDB4ZjAwMCAmJiBjaGFyQ29kZSA8PSAweGYwZmYpIHtcbiAgICAgICAgICAgIGNoYXJDb2RlICY9IDB4ZmY7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gY21hcE1hcHBpbmdzW2ldLmdseXBoSWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BlcnRpZXMuZ2x5cGhOYW1lcyAmJiAoYmFzZUVuY29kaW5nLmxlbmd0aCB8fCB0aGlzLmRpZmZlcmVuY2VzLmxlbmd0aCkpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgICAgICAgIGlmICghZm9yY2VQb3N0VGFibGUgJiYgY2hhckNvZGVUb0dseXBoSWRbaV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZ2x5cGhOYW1lID0gdGhpcy5kaWZmZXJlbmNlc1tpXSB8fCBiYXNlRW5jb2RpbmdbaV07XG5cbiAgICAgICAgICBpZiAoIWdseXBoTmFtZSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZ2x5cGhJZCA9IHByb3BlcnRpZXMuZ2x5cGhOYW1lcy5pbmRleE9mKGdseXBoTmFtZSk7XG5cbiAgICAgICAgICBpZiAoZ2x5cGhJZCA+IDAgJiYgaGFzR2x5cGgoZ2x5cGhJZCkpIHtcbiAgICAgICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2ldID0gZ2x5cGhJZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhckNvZGVUb0dseXBoSWQubGVuZ3RoID09PSAwKSB7XG4gICAgICBjaGFyQ29kZVRvR2x5cGhJZFswXSA9IDA7XG4gICAgfVxuXG4gICAgbGV0IGdseXBoWmVyb0lkID0gbnVtR2x5cGhzT3V0IC0gMTtcblxuICAgIGlmICghZHVwRmlyc3RFbnRyeSkge1xuICAgICAgZ2x5cGhaZXJvSWQgPSAwO1xuICAgIH1cblxuICAgIGlmICghcHJvcGVydGllcy5jc3NGb250SW5mbykge1xuICAgICAgY29uc3QgbmV3TWFwcGluZyA9IGFkanVzdE1hcHBpbmcoY2hhckNvZGVUb0dseXBoSWQsIGhhc0dseXBoLCBnbHlwaFplcm9JZCk7XG4gICAgICB0aGlzLnRvRm9udENoYXIgPSBuZXdNYXBwaW5nLnRvRm9udENoYXI7XG4gICAgICB0YWJsZXMuY21hcCA9IHtcbiAgICAgICAgdGFnOiBcImNtYXBcIixcbiAgICAgICAgZGF0YTogY3JlYXRlQ21hcFRhYmxlKG5ld01hcHBpbmcuY2hhckNvZGVUb0dseXBoSWQsIG51bUdseXBoc091dClcbiAgICAgIH07XG5cbiAgICAgIGlmICghdGFibGVzW1wiT1MvMlwiXSB8fCAhdmFsaWRhdGVPUzJUYWJsZSh0YWJsZXNbXCJPUy8yXCJdLCBmb250KSkge1xuICAgICAgICB0YWJsZXNbXCJPUy8yXCJdID0ge1xuICAgICAgICAgIHRhZzogXCJPUy8yXCIsXG4gICAgICAgICAgZGF0YTogY3JlYXRlT1MyVGFibGUocHJvcGVydGllcywgbmV3TWFwcGluZy5jaGFyQ29kZVRvR2x5cGhJZCwgbWV0cmljc092ZXJyaWRlKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaXNUcnVlVHlwZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2ZmRmlsZSA9IG5ldyBfc3RyZWFtLlN0cmVhbSh0YWJsZXNbXCJDRkYgXCJdLmRhdGEpO1xuICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGUGFyc2VyKGNmZkZpbGUsIHByb3BlcnRpZXMsIF9mb250c191dGlscy5TRUFDX0FOQUxZU0lTX0VOQUJMRUQpO1xuICAgICAgICBjZmYgPSBwYXJzZXIucGFyc2UoKTtcbiAgICAgICAgY2ZmLmR1cGxpY2F0ZUZpcnN0R2x5cGgoKTtcbiAgICAgICAgY29uc3QgY29tcGlsZXIgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGQ29tcGlsZXIoY2ZmKTtcbiAgICAgICAgdGFibGVzW1wiQ0ZGIFwiXS5kYXRhID0gY29tcGlsZXIuY29tcGlsZSgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJGYWlsZWQgdG8gY29tcGlsZSBmb250IFwiICsgcHJvcGVydGllcy5sb2FkZWROYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRhYmxlcy5uYW1lKSB7XG4gICAgICB0YWJsZXMubmFtZSA9IHtcbiAgICAgICAgdGFnOiBcIm5hbWVcIixcbiAgICAgICAgZGF0YTogY3JlYXRlTmFtZVRhYmxlKHRoaXMubmFtZSlcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5hbWVQcm90b3R5cGUgPSByZWFkTmFtZVRhYmxlKHRhYmxlcy5uYW1lKTtcbiAgICAgIHRhYmxlcy5uYW1lLmRhdGEgPSBjcmVhdGVOYW1lVGFibGUobmFtZSwgbmFtZVByb3RvdHlwZSk7XG4gICAgICB0aGlzLnBzTmFtZSA9IG5hbWVQcm90b3R5cGVbMF1bNl0gfHwgbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IF9vcGVudHlwZV9maWxlX2J1aWxkZXIuT3BlblR5cGVGaWxlQnVpbGRlcihoZWFkZXIudmVyc2lvbik7XG5cbiAgICBmb3IgKGNvbnN0IHRhYmxlVGFnIGluIHRhYmxlcykge1xuICAgICAgYnVpbGRlci5hZGRUYWJsZSh0YWJsZVRhZywgdGFibGVzW3RhYmxlVGFnXS5kYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVpbGRlci50b0FycmF5KCk7XG4gIH1cblxuICBjb252ZXJ0KGZvbnROYW1lLCBmb250LCBwcm9wZXJ0aWVzKSB7XG4gICAgcHJvcGVydGllcy5maXhlZFBpdGNoID0gZmFsc2U7XG5cbiAgICBpZiAocHJvcGVydGllcy5idWlsdEluRW5jb2RpbmcpIHtcbiAgICAgIGFkanVzdFRvVW5pY29kZShwcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzLmJ1aWx0SW5FbmNvZGluZyk7XG4gICAgfVxuXG4gICAgbGV0IGdseXBoWmVyb0lkID0gMTtcblxuICAgIGlmIChmb250IGluc3RhbmNlb2YgX2NmZl9mb250LkNGRkZvbnQpIHtcbiAgICAgIGdseXBoWmVyb0lkID0gZm9udC5udW1HbHlwaHMgLSAxO1xuICAgIH1cblxuICAgIGNvbnN0IG1hcHBpbmcgPSBmb250LmdldEdseXBoTWFwcGluZyhwcm9wZXJ0aWVzKTtcbiAgICBsZXQgbmV3TWFwcGluZyA9IG51bGw7XG4gICAgbGV0IG5ld0NoYXJDb2RlVG9HbHlwaElkID0gbWFwcGluZztcblxuICAgIGlmICghcHJvcGVydGllcy5jc3NGb250SW5mbykge1xuICAgICAgbmV3TWFwcGluZyA9IGFkanVzdE1hcHBpbmcobWFwcGluZywgZm9udC5oYXNHbHlwaElkLmJpbmQoZm9udCksIGdseXBoWmVyb0lkKTtcbiAgICAgIHRoaXMudG9Gb250Q2hhciA9IG5ld01hcHBpbmcudG9Gb250Q2hhcjtcbiAgICAgIG5ld0NoYXJDb2RlVG9HbHlwaElkID0gbmV3TWFwcGluZy5jaGFyQ29kZVRvR2x5cGhJZDtcbiAgICB9XG5cbiAgICBjb25zdCBudW1HbHlwaHMgPSBmb250Lm51bUdseXBocztcblxuICAgIGZ1bmN0aW9uIGdldENoYXJDb2RlcyhjaGFyQ29kZVRvR2x5cGhJZCwgZ2x5cGhJZCkge1xuICAgICAgbGV0IGNoYXJDb2RlcyA9IG51bGw7XG5cbiAgICAgIGZvciAoY29uc3QgY2hhckNvZGUgaW4gY2hhckNvZGVUb0dseXBoSWQpIHtcbiAgICAgICAgaWYgKGdseXBoSWQgPT09IGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSkge1xuICAgICAgICAgIGlmICghY2hhckNvZGVzKSB7XG4gICAgICAgICAgICBjaGFyQ29kZXMgPSBbXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaGFyQ29kZXMucHVzaChjaGFyQ29kZSB8IDApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGFyQ29kZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQ2hhckNvZGUoY2hhckNvZGVUb0dseXBoSWQsIGdseXBoSWQpIHtcbiAgICAgIGZvciAoY29uc3QgY2hhckNvZGUgaW4gY2hhckNvZGVUb0dseXBoSWQpIHtcbiAgICAgICAgaWYgKGdseXBoSWQgPT09IGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSkge1xuICAgICAgICAgIHJldHVybiBjaGFyQ29kZSB8IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbmV3TWFwcGluZy5jaGFyQ29kZVRvR2x5cGhJZFtuZXdNYXBwaW5nLm5leHRBdmFpbGFibGVGb250Q2hhckNvZGVdID0gZ2x5cGhJZDtcbiAgICAgIHJldHVybiBuZXdNYXBwaW5nLm5leHRBdmFpbGFibGVGb250Q2hhckNvZGUrKztcbiAgICB9XG5cbiAgICBjb25zdCBzZWFjcyA9IGZvbnQuc2VhY3M7XG5cbiAgICBpZiAobmV3TWFwcGluZyAmJiBfZm9udHNfdXRpbHMuU0VBQ19BTkFMWVNJU19FTkFCTEVEICYmIHNlYWNzICYmIHNlYWNzLmxlbmd0aCkge1xuICAgICAgY29uc3QgbWF0cml4ID0gcHJvcGVydGllcy5mb250TWF0cml4IHx8IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYO1xuICAgICAgY29uc3QgY2hhcnNldCA9IGZvbnQuZ2V0Q2hhcnNldCgpO1xuICAgICAgY29uc3Qgc2VhY01hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgIGZvciAobGV0IGdseXBoSWQgaW4gc2VhY3MpIHtcbiAgICAgICAgZ2x5cGhJZCB8PSAwO1xuICAgICAgICBjb25zdCBzZWFjID0gc2VhY3NbZ2x5cGhJZF07XG4gICAgICAgIGNvbnN0IGJhc2VHbHlwaE5hbWUgPSBfZW5jb2RpbmdzLlN0YW5kYXJkRW5jb2Rpbmdbc2VhY1syXV07XG4gICAgICAgIGNvbnN0IGFjY2VudEdseXBoTmFtZSA9IF9lbmNvZGluZ3MuU3RhbmRhcmRFbmNvZGluZ1tzZWFjWzNdXTtcbiAgICAgICAgY29uc3QgYmFzZUdseXBoSWQgPSBjaGFyc2V0LmluZGV4T2YoYmFzZUdseXBoTmFtZSk7XG4gICAgICAgIGNvbnN0IGFjY2VudEdseXBoSWQgPSBjaGFyc2V0LmluZGV4T2YoYWNjZW50R2x5cGhOYW1lKTtcblxuICAgICAgICBpZiAoYmFzZUdseXBoSWQgPCAwIHx8IGFjY2VudEdseXBoSWQgPCAwKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhY2NlbnRPZmZzZXQgPSB7XG4gICAgICAgICAgeDogc2VhY1swXSAqIG1hdHJpeFswXSArIHNlYWNbMV0gKiBtYXRyaXhbMl0gKyBtYXRyaXhbNF0sXG4gICAgICAgICAgeTogc2VhY1swXSAqIG1hdHJpeFsxXSArIHNlYWNbMV0gKiBtYXRyaXhbM10gKyBtYXRyaXhbNV1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2hhckNvZGVzID0gZ2V0Q2hhckNvZGVzKG1hcHBpbmcsIGdseXBoSWQpO1xuXG4gICAgICAgIGlmICghY2hhckNvZGVzKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBjaGFyQ29kZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGNoYXJDb2RlID0gY2hhckNvZGVzW2ldO1xuICAgICAgICAgIGNvbnN0IGNoYXJDb2RlVG9HbHlwaElkID0gbmV3TWFwcGluZy5jaGFyQ29kZVRvR2x5cGhJZDtcbiAgICAgICAgICBjb25zdCBiYXNlRm9udENoYXJDb2RlID0gY3JlYXRlQ2hhckNvZGUoY2hhckNvZGVUb0dseXBoSWQsIGJhc2VHbHlwaElkKTtcbiAgICAgICAgICBjb25zdCBhY2NlbnRGb250Q2hhckNvZGUgPSBjcmVhdGVDaGFyQ29kZShjaGFyQ29kZVRvR2x5cGhJZCwgYWNjZW50R2x5cGhJZCk7XG4gICAgICAgICAgc2VhY01hcFtjaGFyQ29kZV0gPSB7XG4gICAgICAgICAgICBiYXNlRm9udENoYXJDb2RlLFxuICAgICAgICAgICAgYWNjZW50Rm9udENoYXJDb2RlLFxuICAgICAgICAgICAgYWNjZW50T2Zmc2V0XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcm9wZXJ0aWVzLnNlYWNNYXAgPSBzZWFjTWFwO1xuICAgIH1cblxuICAgIGNvbnN0IHVuaXRzUGVyRW0gPSAxIC8gKHByb3BlcnRpZXMuZm9udE1hdHJpeCB8fCBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWClbMF07XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBfb3BlbnR5cGVfZmlsZV9idWlsZGVyLk9wZW5UeXBlRmlsZUJ1aWxkZXIoXCJcXHg0RlxceDU0XFx4NTRcXHg0RlwiKTtcbiAgICBidWlsZGVyLmFkZFRhYmxlKFwiQ0ZGIFwiLCBmb250LmRhdGEpO1xuICAgIGJ1aWxkZXIuYWRkVGFibGUoXCJPUy8yXCIsIGNyZWF0ZU9TMlRhYmxlKHByb3BlcnRpZXMsIG5ld0NoYXJDb2RlVG9HbHlwaElkKSk7XG4gICAgYnVpbGRlci5hZGRUYWJsZShcImNtYXBcIiwgY3JlYXRlQ21hcFRhYmxlKG5ld0NoYXJDb2RlVG9HbHlwaElkLCBudW1HbHlwaHMpKTtcbiAgICBidWlsZGVyLmFkZFRhYmxlKFwiaGVhZFwiLCBcIlxceDAwXFx4MDFcXHgwMFxceDAwXCIgKyBcIlxceDAwXFx4MDBcXHgxMFxceDAwXCIgKyBcIlxceDAwXFx4MDBcXHgwMFxceDAwXCIgKyBcIlxceDVGXFx4MEZcXHgzQ1xceEY1XCIgKyBcIlxceDAwXFx4MDBcIiArIHNhZmVTdHJpbmcxNih1bml0c1BlckVtKSArIFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcXHg5ZVxceDBiXFx4N2VcXHgyN1wiICsgXCJcXHgwMFxceDAwXFx4MDBcXHgwMFxceDllXFx4MGJcXHg3ZVxceDI3XCIgKyBcIlxceDAwXFx4MDBcIiArIHNhZmVTdHJpbmcxNihwcm9wZXJ0aWVzLmRlc2NlbnQpICsgXCJcXHgwRlxceEZGXCIgKyBzYWZlU3RyaW5nMTYocHJvcGVydGllcy5hc2NlbnQpICsgc3RyaW5nMTYocHJvcGVydGllcy5pdGFsaWNBbmdsZSA/IDIgOiAwKSArIFwiXFx4MDBcXHgxMVwiICsgXCJcXHgwMFxceDAwXCIgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFwiKTtcbiAgICBidWlsZGVyLmFkZFRhYmxlKFwiaGhlYVwiLCBcIlxceDAwXFx4MDFcXHgwMFxceDAwXCIgKyBzYWZlU3RyaW5nMTYocHJvcGVydGllcy5hc2NlbnQpICsgc2FmZVN0cmluZzE2KHByb3BlcnRpZXMuZGVzY2VudCkgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4RkZcXHhGRlwiICsgXCJcXHgwMFxceDAwXCIgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFwiICsgc2FmZVN0cmluZzE2KHByb3BlcnRpZXMuY2FwSGVpZ2h0KSArIHNhZmVTdHJpbmcxNihNYXRoLnRhbihwcm9wZXJ0aWVzLml0YWxpY0FuZ2xlKSAqIHByb3BlcnRpZXMueEhlaWdodCkgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFwiICsgXCJcXHgwMFxceDAwXCIgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFwiICsgXCJcXHgwMFxceDAwXCIgKyBzdHJpbmcxNihudW1HbHlwaHMpKTtcbiAgICBidWlsZGVyLmFkZFRhYmxlKFwiaG10eFwiLCBmdW5jdGlvbiBmb250RmllbGRzSG10eCgpIHtcbiAgICAgIGNvbnN0IGNoYXJzdHJpbmdzID0gZm9udC5jaGFyc3RyaW5ncztcbiAgICAgIGNvbnN0IGNmZldpZHRocyA9IGZvbnQuY2ZmID8gZm9udC5jZmYud2lkdGhzIDogbnVsbDtcbiAgICAgIGxldCBobXR4ID0gXCJcXHgwMFxceDAwXFx4MDBcXHgwMFwiO1xuXG4gICAgICBmb3IgKGxldCBpID0gMSwgaWkgPSBudW1HbHlwaHM7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGxldCB3aWR0aCA9IDA7XG5cbiAgICAgICAgaWYgKGNoYXJzdHJpbmdzKSB7XG4gICAgICAgICAgY29uc3QgY2hhcnN0cmluZyA9IGNoYXJzdHJpbmdzW2kgLSAxXTtcbiAgICAgICAgICB3aWR0aCA9IFwid2lkdGhcIiBpbiBjaGFyc3RyaW5nID8gY2hhcnN0cmluZy53aWR0aCA6IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoY2ZmV2lkdGhzKSB7XG4gICAgICAgICAgd2lkdGggPSBNYXRoLmNlaWwoY2ZmV2lkdGhzW2ldIHx8IDApO1xuICAgICAgICB9XG5cbiAgICAgICAgaG10eCArPSBzdHJpbmcxNih3aWR0aCkgKyBzdHJpbmcxNigwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhtdHg7XG4gICAgfSgpKTtcbiAgICBidWlsZGVyLmFkZFRhYmxlKFwibWF4cFwiLCBcIlxceDAwXFx4MDBcXHg1MFxceDAwXCIgKyBzdHJpbmcxNihudW1HbHlwaHMpKTtcbiAgICBidWlsZGVyLmFkZFRhYmxlKFwibmFtZVwiLCBjcmVhdGVOYW1lVGFibGUoZm9udE5hbWUpKTtcbiAgICBidWlsZGVyLmFkZFRhYmxlKFwicG9zdFwiLCBjcmVhdGVQb3N0VGFibGUocHJvcGVydGllcykpO1xuICAgIHJldHVybiBidWlsZGVyLnRvQXJyYXkoKTtcbiAgfVxuXG4gIGdldCBzcGFjZVdpZHRoKCkge1xuICAgIGNvbnN0IHBvc3NpYmxlU3BhY2VSZXBsYWNlbWVudHMgPSBbXCJzcGFjZVwiLCBcIm1pbnVzXCIsIFwib25lXCIsIFwiaVwiLCBcIklcIl07XG4gICAgbGV0IHdpZHRoO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gcG9zc2libGVTcGFjZVJlcGxhY2VtZW50cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBjb25zdCBnbHlwaE5hbWUgPSBwb3NzaWJsZVNwYWNlUmVwbGFjZW1lbnRzW2ldO1xuXG4gICAgICBpZiAoZ2x5cGhOYW1lIGluIHRoaXMud2lkdGhzKSB7XG4gICAgICAgIHdpZHRoID0gdGhpcy53aWR0aHNbZ2x5cGhOYW1lXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdseXBoc1VuaWNvZGVNYXAgPSAoMCwgX2dseXBobGlzdC5nZXRHbHlwaHNVbmljb2RlKSgpO1xuICAgICAgY29uc3QgZ2x5cGhVbmljb2RlID0gZ2x5cGhzVW5pY29kZU1hcFtnbHlwaE5hbWVdO1xuICAgICAgbGV0IGNoYXJjb2RlID0gMDtcblxuICAgICAgaWYgKHRoaXMuY29tcG9zaXRlICYmIHRoaXMuY01hcC5jb250YWlucyhnbHlwaFVuaWNvZGUpKSB7XG4gICAgICAgIGNoYXJjb2RlID0gdGhpcy5jTWFwLmxvb2t1cChnbHlwaFVuaWNvZGUpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgY2hhcmNvZGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBjaGFyY29kZSA9IGNvbnZlcnRDaWRTdHJpbmcoZ2x5cGhVbmljb2RlLCBjaGFyY29kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFjaGFyY29kZSAmJiB0aGlzLnRvVW5pY29kZSkge1xuICAgICAgICBjaGFyY29kZSA9IHRoaXMudG9Vbmljb2RlLmNoYXJDb2RlT2YoZ2x5cGhVbmljb2RlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYXJjb2RlIDw9IDApIHtcbiAgICAgICAgY2hhcmNvZGUgPSBnbHlwaFVuaWNvZGU7XG4gICAgICB9XG5cbiAgICAgIHdpZHRoID0gdGhpcy53aWR0aHNbY2hhcmNvZGVdO1xuXG4gICAgICBpZiAod2lkdGgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgd2lkdGggPSB3aWR0aCB8fCB0aGlzLmRlZmF1bHRXaWR0aDtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJzcGFjZVdpZHRoXCIsIHdpZHRoKTtcbiAgfVxuXG4gIF9jaGFyVG9HbHlwaChjaGFyY29kZSwgaXNTcGFjZSA9IGZhbHNlKSB7XG4gICAgbGV0IGZvbnRDaGFyQ29kZSwgd2lkdGgsIG9wZXJhdG9yTGlzdElkO1xuICAgIGxldCB3aWR0aENvZGUgPSBjaGFyY29kZTtcblxuICAgIGlmICh0aGlzLmNNYXAgJiYgdGhpcy5jTWFwLmNvbnRhaW5zKGNoYXJjb2RlKSkge1xuICAgICAgd2lkdGhDb2RlID0gdGhpcy5jTWFwLmxvb2t1cChjaGFyY29kZSk7XG5cbiAgICAgIGlmICh0eXBlb2Ygd2lkdGhDb2RlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHdpZHRoQ29kZSA9IGNvbnZlcnRDaWRTdHJpbmcoY2hhcmNvZGUsIHdpZHRoQ29kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgd2lkdGggPSB0aGlzLndpZHRoc1t3aWR0aENvZGVdO1xuICAgIHdpZHRoID0gKDAsIF91dGlsLmlzTnVtKSh3aWR0aCkgPyB3aWR0aCA6IHRoaXMuZGVmYXVsdFdpZHRoO1xuICAgIGNvbnN0IHZtZXRyaWMgPSB0aGlzLnZtZXRyaWNzICYmIHRoaXMudm1ldHJpY3Nbd2lkdGhDb2RlXTtcbiAgICBsZXQgdW5pY29kZSA9IHRoaXMudG9Vbmljb2RlLmdldChjaGFyY29kZSkgfHwgY2hhcmNvZGU7XG5cbiAgICBpZiAodHlwZW9mIHVuaWNvZGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHVuaWNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHVuaWNvZGUpO1xuICAgIH1cblxuICAgIGxldCBpc0luRm9udCA9IHRoaXMudG9Gb250Q2hhcltjaGFyY29kZV0gIT09IHVuZGVmaW5lZDtcbiAgICBmb250Q2hhckNvZGUgPSB0aGlzLnRvRm9udENoYXJbY2hhcmNvZGVdIHx8IGNoYXJjb2RlO1xuXG4gICAgaWYgKHRoaXMubWlzc2luZ0ZpbGUpIHtcbiAgICAgIGNvbnN0IGdseXBoTmFtZSA9IHRoaXMuZGlmZmVyZW5jZXNbY2hhcmNvZGVdIHx8IHRoaXMuZGVmYXVsdEVuY29kaW5nW2NoYXJjb2RlXTtcblxuICAgICAgaWYgKChnbHlwaE5hbWUgPT09IFwiLm5vdGRlZlwiIHx8IGdseXBoTmFtZSA9PT0gXCJcIikgJiYgdGhpcy50eXBlID09PSBcIlR5cGUxXCIpIHtcbiAgICAgICAgZm9udENoYXJDb2RlID0gMHgyMDtcbiAgICAgIH1cblxuICAgICAgZm9udENoYXJDb2RlID0gKDAsIF91bmljb2RlLm1hcFNwZWNpYWxVbmljb2RlVmFsdWVzKShmb250Q2hhckNvZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzVHlwZTNGb250KSB7XG4gICAgICBvcGVyYXRvckxpc3RJZCA9IGZvbnRDaGFyQ29kZTtcbiAgICB9XG5cbiAgICBsZXQgYWNjZW50ID0gbnVsbDtcblxuICAgIGlmICh0aGlzLnNlYWNNYXAgJiYgdGhpcy5zZWFjTWFwW2NoYXJjb2RlXSkge1xuICAgICAgaXNJbkZvbnQgPSB0cnVlO1xuICAgICAgY29uc3Qgc2VhYyA9IHRoaXMuc2VhY01hcFtjaGFyY29kZV07XG4gICAgICBmb250Q2hhckNvZGUgPSBzZWFjLmJhc2VGb250Q2hhckNvZGU7XG4gICAgICBhY2NlbnQgPSB7XG4gICAgICAgIGZvbnRDaGFyOiBTdHJpbmcuZnJvbUNvZGVQb2ludChzZWFjLmFjY2VudEZvbnRDaGFyQ29kZSksXG4gICAgICAgIG9mZnNldDogc2VhYy5hY2NlbnRPZmZzZXRcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IGZvbnRDaGFyID0gXCJcIjtcblxuICAgIGlmICh0eXBlb2YgZm9udENoYXJDb2RlID09PSBcIm51bWJlclwiKSB7XG4gICAgICBpZiAoZm9udENoYXJDb2RlIDw9IDB4MTBmZmZmKSB7XG4gICAgICAgIGZvbnRDaGFyID0gU3RyaW5nLmZyb21Db2RlUG9pbnQoZm9udENoYXJDb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgY2hhclRvR2x5cGggLSBpbnZhbGlkIGZvbnRDaGFyQ29kZTogJHtmb250Q2hhckNvZGV9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGdseXBoID0gdGhpcy5fZ2x5cGhDYWNoZVtjaGFyY29kZV07XG5cbiAgICBpZiAoIWdseXBoIHx8ICFnbHlwaC5tYXRjaGVzRm9yQ2FjaGUoY2hhcmNvZGUsIGZvbnRDaGFyLCB1bmljb2RlLCBhY2NlbnQsIHdpZHRoLCB2bWV0cmljLCBvcGVyYXRvckxpc3RJZCwgaXNTcGFjZSwgaXNJbkZvbnQpKSB7XG4gICAgICBnbHlwaCA9IG5ldyBHbHlwaChjaGFyY29kZSwgZm9udENoYXIsIHVuaWNvZGUsIGFjY2VudCwgd2lkdGgsIHZtZXRyaWMsIG9wZXJhdG9yTGlzdElkLCBpc1NwYWNlLCBpc0luRm9udCk7XG4gICAgICB0aGlzLl9nbHlwaENhY2hlW2NoYXJjb2RlXSA9IGdseXBoO1xuICAgIH1cblxuICAgIHJldHVybiBnbHlwaDtcbiAgfVxuXG4gIGNoYXJzVG9HbHlwaHMoY2hhcnMpIHtcbiAgICBsZXQgZ2x5cGhzID0gdGhpcy5fY2hhcnNDYWNoZVtjaGFyc107XG5cbiAgICBpZiAoZ2x5cGhzKSB7XG4gICAgICByZXR1cm4gZ2x5cGhzO1xuICAgIH1cblxuICAgIGdseXBocyA9IFtdO1xuXG4gICAgaWYgKHRoaXMuY01hcCkge1xuICAgICAgY29uc3QgYyA9IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBpaSA9IGNoYXJzLmxlbmd0aDtcbiAgICAgIGxldCBpID0gMDtcblxuICAgICAgd2hpbGUgKGkgPCBpaSkge1xuICAgICAgICB0aGlzLmNNYXAucmVhZENoYXJDb2RlKGNoYXJzLCBpLCBjKTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGNoYXJjb2RlLFxuICAgICAgICAgIGxlbmd0aFxuICAgICAgICB9ID0gYztcbiAgICAgICAgaSArPSBsZW5ndGg7XG5cbiAgICAgICAgY29uc3QgZ2x5cGggPSB0aGlzLl9jaGFyVG9HbHlwaChjaGFyY29kZSwgbGVuZ3RoID09PSAxICYmIGNoYXJzLmNoYXJDb2RlQXQoaSAtIDEpID09PSAweDIwKTtcblxuICAgICAgICBnbHlwaHMucHVzaChnbHlwaCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGNoYXJzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgY29uc3QgY2hhcmNvZGUgPSBjaGFycy5jaGFyQ29kZUF0KGkpO1xuXG4gICAgICAgIGNvbnN0IGdseXBoID0gdGhpcy5fY2hhclRvR2x5cGgoY2hhcmNvZGUsIGNoYXJjb2RlID09PSAweDIwKTtcblxuICAgICAgICBnbHlwaHMucHVzaChnbHlwaCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2NoYXJzQ2FjaGVbY2hhcnNdID0gZ2x5cGhzO1xuICB9XG5cbiAgZ2V0Q2hhclBvc2l0aW9ucyhjaGFycykge1xuICAgIGNvbnN0IHBvc2l0aW9ucyA9IFtdO1xuXG4gICAgaWYgKHRoaXMuY01hcCkge1xuICAgICAgY29uc3QgYyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICBsZXQgaSA9IDA7XG5cbiAgICAgIHdoaWxlIChpIDwgY2hhcnMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuY01hcC5yZWFkQ2hhckNvZGUoY2hhcnMsIGksIGMpO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBjLmxlbmd0aDtcbiAgICAgICAgcG9zaXRpb25zLnB1c2goW2ksIGkgKyBsZW5ndGhdKTtcbiAgICAgICAgaSArPSBsZW5ndGg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGNoYXJzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgcG9zaXRpb25zLnB1c2goW2ksIGkgKyAxXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvc2l0aW9ucztcbiAgfVxuXG4gIGdldCBnbHlwaENhY2hlVmFsdWVzKCkge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2dseXBoQ2FjaGUpO1xuICB9XG5cbiAgZW5jb2RlU3RyaW5nKHN0cikge1xuICAgIGNvbnN0IGJ1ZmZlcnMgPSBbXTtcbiAgICBjb25zdCBjdXJyZW50QnVmID0gW107XG5cbiAgICBjb25zdCBoYXNDdXJyZW50QnVmRXJyb3JzID0gKCkgPT4gYnVmZmVycy5sZW5ndGggJSAyID09PSAxO1xuXG4gICAgY29uc3QgZ2V0Q2hhckNvZGUgPSB0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIF90b191bmljb2RlX21hcC5JZGVudGl0eVRvVW5pY29kZU1hcCA/IHVuaWNvZGUgPT4gdGhpcy50b1VuaWNvZGUuY2hhckNvZGVPZih1bmljb2RlKSA6IHVuaWNvZGUgPT4gdGhpcy50b1VuaWNvZGUuY2hhckNvZGVPZihTdHJpbmcuZnJvbUNvZGVQb2ludCh1bmljb2RlKSk7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBzdHIubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgY29uc3QgdW5pY29kZSA9IHN0ci5jb2RlUG9pbnRBdChpKTtcblxuICAgICAgaWYgKHVuaWNvZGUgPiAweGQ3ZmYgJiYgKHVuaWNvZGUgPCAweGUwMDAgfHwgdW5pY29kZSA+IDB4ZmZmZCkpIHtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy50b1VuaWNvZGUpIHtcbiAgICAgICAgY29uc3QgY2hhckNvZGUgPSBnZXRDaGFyQ29kZSh1bmljb2RlKTtcblxuICAgICAgICBpZiAoY2hhckNvZGUgIT09IC0xKSB7XG4gICAgICAgICAgaWYgKGhhc0N1cnJlbnRCdWZFcnJvcnMoKSkge1xuICAgICAgICAgICAgYnVmZmVycy5wdXNoKGN1cnJlbnRCdWYuam9pbihcIlwiKSk7XG4gICAgICAgICAgICBjdXJyZW50QnVmLmxlbmd0aCA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY2hhckNvZGVMZW5ndGggPSB0aGlzLmNNYXAgPyB0aGlzLmNNYXAuZ2V0Q2hhckNvZGVMZW5ndGgoY2hhckNvZGUpIDogMTtcblxuICAgICAgICAgIGZvciAobGV0IGogPSBjaGFyQ29kZUxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICAgICAgICBjdXJyZW50QnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSA+PiA4ICogaiAmIDB4ZmYpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWhhc0N1cnJlbnRCdWZFcnJvcnMoKSkge1xuICAgICAgICBidWZmZXJzLnB1c2goY3VycmVudEJ1Zi5qb2luKFwiXCIpKTtcbiAgICAgICAgY3VycmVudEJ1Zi5sZW5ndGggPSAwO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50QnVmLnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQodW5pY29kZSkpO1xuICAgIH1cblxuICAgIGJ1ZmZlcnMucHVzaChjdXJyZW50QnVmLmpvaW4oXCJcIikpO1xuICAgIHJldHVybiBidWZmZXJzO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Gb250ID0gRm9udDtcblxuY2xhc3MgRXJyb3JGb250IHtcbiAgY29uc3RydWN0b3IoZXJyb3IpIHtcbiAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgdGhpcy5sb2FkZWROYW1lID0gXCJnX2ZvbnRfZXJyb3JcIjtcbiAgICB0aGlzLm1pc3NpbmdGaWxlID0gdHJ1ZTtcbiAgfVxuXG4gIGNoYXJzVG9HbHlwaHMoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZW5jb2RlU3RyaW5nKGNoYXJzKSB7XG4gICAgcmV0dXJuIFtjaGFyc107XG4gIH1cblxuICBleHBvcnREYXRhKGV4dHJhUHJvcGVydGllcyA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiB0aGlzLmVycm9yXG4gICAgfTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuRXJyb3JGb250ID0gRXJyb3JGb250O1xuXG4vKioqLyB9KSxcbi8qIDQ1ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLkNGRlRvcERpY3QgPSBleHBvcnRzLkNGRlN0cmluZ3MgPSBleHBvcnRzLkNGRlN0YW5kYXJkU3RyaW5ncyA9IGV4cG9ydHMuQ0ZGUHJpdmF0ZURpY3QgPSBleHBvcnRzLkNGRlBhcnNlciA9IGV4cG9ydHMuQ0ZGSW5kZXggPSBleHBvcnRzLkNGRkhlYWRlciA9IGV4cG9ydHMuQ0ZGRkRTZWxlY3QgPSBleHBvcnRzLkNGRkNvbXBpbGVyID0gZXhwb3J0cy5DRkZDaGFyc2V0ID0gZXhwb3J0cy5DRkYgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfY2hhcnNldHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDQ2KTtcblxudmFyIF9lbmNvZGluZ3MgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE5KTtcblxuY29uc3QgTUFYX1NVQlJfTkVTVElORyA9IDEwO1xuY29uc3QgQ0ZGU3RhbmRhcmRTdHJpbmdzID0gW1wiLm5vdGRlZlwiLCBcInNwYWNlXCIsIFwiZXhjbGFtXCIsIFwicXVvdGVkYmxcIiwgXCJudW1iZXJzaWduXCIsIFwiZG9sbGFyXCIsIFwicGVyY2VudFwiLCBcImFtcGVyc2FuZFwiLCBcInF1b3RlcmlnaHRcIiwgXCJwYXJlbmxlZnRcIiwgXCJwYXJlbnJpZ2h0XCIsIFwiYXN0ZXJpc2tcIiwgXCJwbHVzXCIsIFwiY29tbWFcIiwgXCJoeXBoZW5cIiwgXCJwZXJpb2RcIiwgXCJzbGFzaFwiLCBcInplcm9cIiwgXCJvbmVcIiwgXCJ0d29cIiwgXCJ0aHJlZVwiLCBcImZvdXJcIiwgXCJmaXZlXCIsIFwic2l4XCIsIFwic2V2ZW5cIiwgXCJlaWdodFwiLCBcIm5pbmVcIiwgXCJjb2xvblwiLCBcInNlbWljb2xvblwiLCBcImxlc3NcIiwgXCJlcXVhbFwiLCBcImdyZWF0ZXJcIiwgXCJxdWVzdGlvblwiLCBcImF0XCIsIFwiQVwiLCBcIkJcIiwgXCJDXCIsIFwiRFwiLCBcIkVcIiwgXCJGXCIsIFwiR1wiLCBcIkhcIiwgXCJJXCIsIFwiSlwiLCBcIktcIiwgXCJMXCIsIFwiTVwiLCBcIk5cIiwgXCJPXCIsIFwiUFwiLCBcIlFcIiwgXCJSXCIsIFwiU1wiLCBcIlRcIiwgXCJVXCIsIFwiVlwiLCBcIldcIiwgXCJYXCIsIFwiWVwiLCBcIlpcIiwgXCJicmFja2V0bGVmdFwiLCBcImJhY2tzbGFzaFwiLCBcImJyYWNrZXRyaWdodFwiLCBcImFzY2lpY2lyY3VtXCIsIFwidW5kZXJzY29yZVwiLCBcInF1b3RlbGVmdFwiLCBcImFcIiwgXCJiXCIsIFwiY1wiLCBcImRcIiwgXCJlXCIsIFwiZlwiLCBcImdcIiwgXCJoXCIsIFwiaVwiLCBcImpcIiwgXCJrXCIsIFwibFwiLCBcIm1cIiwgXCJuXCIsIFwib1wiLCBcInBcIiwgXCJxXCIsIFwiclwiLCBcInNcIiwgXCJ0XCIsIFwidVwiLCBcInZcIiwgXCJ3XCIsIFwieFwiLCBcInlcIiwgXCJ6XCIsIFwiYnJhY2VsZWZ0XCIsIFwiYmFyXCIsIFwiYnJhY2VyaWdodFwiLCBcImFzY2lpdGlsZGVcIiwgXCJleGNsYW1kb3duXCIsIFwiY2VudFwiLCBcInN0ZXJsaW5nXCIsIFwiZnJhY3Rpb25cIiwgXCJ5ZW5cIiwgXCJmbG9yaW5cIiwgXCJzZWN0aW9uXCIsIFwiY3VycmVuY3lcIiwgXCJxdW90ZXNpbmdsZVwiLCBcInF1b3RlZGJsbGVmdFwiLCBcImd1aWxsZW1vdGxlZnRcIiwgXCJndWlsc2luZ2xsZWZ0XCIsIFwiZ3VpbHNpbmdscmlnaHRcIiwgXCJmaVwiLCBcImZsXCIsIFwiZW5kYXNoXCIsIFwiZGFnZ2VyXCIsIFwiZGFnZ2VyZGJsXCIsIFwicGVyaW9kY2VudGVyZWRcIiwgXCJwYXJhZ3JhcGhcIiwgXCJidWxsZXRcIiwgXCJxdW90ZXNpbmdsYmFzZVwiLCBcInF1b3RlZGJsYmFzZVwiLCBcInF1b3RlZGJscmlnaHRcIiwgXCJndWlsbGVtb3RyaWdodFwiLCBcImVsbGlwc2lzXCIsIFwicGVydGhvdXNhbmRcIiwgXCJxdWVzdGlvbmRvd25cIiwgXCJncmF2ZVwiLCBcImFjdXRlXCIsIFwiY2lyY3VtZmxleFwiLCBcInRpbGRlXCIsIFwibWFjcm9uXCIsIFwiYnJldmVcIiwgXCJkb3RhY2NlbnRcIiwgXCJkaWVyZXNpc1wiLCBcInJpbmdcIiwgXCJjZWRpbGxhXCIsIFwiaHVuZ2FydW1sYXV0XCIsIFwib2dvbmVrXCIsIFwiY2Fyb25cIiwgXCJlbWRhc2hcIiwgXCJBRVwiLCBcIm9yZGZlbWluaW5lXCIsIFwiTHNsYXNoXCIsIFwiT3NsYXNoXCIsIFwiT0VcIiwgXCJvcmRtYXNjdWxpbmVcIiwgXCJhZVwiLCBcImRvdGxlc3NpXCIsIFwibHNsYXNoXCIsIFwib3NsYXNoXCIsIFwib2VcIiwgXCJnZXJtYW5kYmxzXCIsIFwib25lc3VwZXJpb3JcIiwgXCJsb2dpY2Fsbm90XCIsIFwibXVcIiwgXCJ0cmFkZW1hcmtcIiwgXCJFdGhcIiwgXCJvbmVoYWxmXCIsIFwicGx1c21pbnVzXCIsIFwiVGhvcm5cIiwgXCJvbmVxdWFydGVyXCIsIFwiZGl2aWRlXCIsIFwiYnJva2VuYmFyXCIsIFwiZGVncmVlXCIsIFwidGhvcm5cIiwgXCJ0aHJlZXF1YXJ0ZXJzXCIsIFwidHdvc3VwZXJpb3JcIiwgXCJyZWdpc3RlcmVkXCIsIFwibWludXNcIiwgXCJldGhcIiwgXCJtdWx0aXBseVwiLCBcInRocmVlc3VwZXJpb3JcIiwgXCJjb3B5cmlnaHRcIiwgXCJBYWN1dGVcIiwgXCJBY2lyY3VtZmxleFwiLCBcIkFkaWVyZXNpc1wiLCBcIkFncmF2ZVwiLCBcIkFyaW5nXCIsIFwiQXRpbGRlXCIsIFwiQ2NlZGlsbGFcIiwgXCJFYWN1dGVcIiwgXCJFY2lyY3VtZmxleFwiLCBcIkVkaWVyZXNpc1wiLCBcIkVncmF2ZVwiLCBcIklhY3V0ZVwiLCBcIkljaXJjdW1mbGV4XCIsIFwiSWRpZXJlc2lzXCIsIFwiSWdyYXZlXCIsIFwiTnRpbGRlXCIsIFwiT2FjdXRlXCIsIFwiT2NpcmN1bWZsZXhcIiwgXCJPZGllcmVzaXNcIiwgXCJPZ3JhdmVcIiwgXCJPdGlsZGVcIiwgXCJTY2Fyb25cIiwgXCJVYWN1dGVcIiwgXCJVY2lyY3VtZmxleFwiLCBcIlVkaWVyZXNpc1wiLCBcIlVncmF2ZVwiLCBcIllhY3V0ZVwiLCBcIllkaWVyZXNpc1wiLCBcIlpjYXJvblwiLCBcImFhY3V0ZVwiLCBcImFjaXJjdW1mbGV4XCIsIFwiYWRpZXJlc2lzXCIsIFwiYWdyYXZlXCIsIFwiYXJpbmdcIiwgXCJhdGlsZGVcIiwgXCJjY2VkaWxsYVwiLCBcImVhY3V0ZVwiLCBcImVjaXJjdW1mbGV4XCIsIFwiZWRpZXJlc2lzXCIsIFwiZWdyYXZlXCIsIFwiaWFjdXRlXCIsIFwiaWNpcmN1bWZsZXhcIiwgXCJpZGllcmVzaXNcIiwgXCJpZ3JhdmVcIiwgXCJudGlsZGVcIiwgXCJvYWN1dGVcIiwgXCJvY2lyY3VtZmxleFwiLCBcIm9kaWVyZXNpc1wiLCBcIm9ncmF2ZVwiLCBcIm90aWxkZVwiLCBcInNjYXJvblwiLCBcInVhY3V0ZVwiLCBcInVjaXJjdW1mbGV4XCIsIFwidWRpZXJlc2lzXCIsIFwidWdyYXZlXCIsIFwieWFjdXRlXCIsIFwieWRpZXJlc2lzXCIsIFwiemNhcm9uXCIsIFwiZXhjbGFtc21hbGxcIiwgXCJIdW5nYXJ1bWxhdXRzbWFsbFwiLCBcImRvbGxhcm9sZHN0eWxlXCIsIFwiZG9sbGFyc3VwZXJpb3JcIiwgXCJhbXBlcnNhbmRzbWFsbFwiLCBcIkFjdXRlc21hbGxcIiwgXCJwYXJlbmxlZnRzdXBlcmlvclwiLCBcInBhcmVucmlnaHRzdXBlcmlvclwiLCBcInR3b2RvdGVubGVhZGVyXCIsIFwib25lZG90ZW5sZWFkZXJcIiwgXCJ6ZXJvb2xkc3R5bGVcIiwgXCJvbmVvbGRzdHlsZVwiLCBcInR3b29sZHN0eWxlXCIsIFwidGhyZWVvbGRzdHlsZVwiLCBcImZvdXJvbGRzdHlsZVwiLCBcImZpdmVvbGRzdHlsZVwiLCBcInNpeG9sZHN0eWxlXCIsIFwic2V2ZW5vbGRzdHlsZVwiLCBcImVpZ2h0b2xkc3R5bGVcIiwgXCJuaW5lb2xkc3R5bGVcIiwgXCJjb21tYXN1cGVyaW9yXCIsIFwidGhyZWVxdWFydGVyc2VtZGFzaFwiLCBcInBlcmlvZHN1cGVyaW9yXCIsIFwicXVlc3Rpb25zbWFsbFwiLCBcImFzdXBlcmlvclwiLCBcImJzdXBlcmlvclwiLCBcImNlbnRzdXBlcmlvclwiLCBcImRzdXBlcmlvclwiLCBcImVzdXBlcmlvclwiLCBcImlzdXBlcmlvclwiLCBcImxzdXBlcmlvclwiLCBcIm1zdXBlcmlvclwiLCBcIm5zdXBlcmlvclwiLCBcIm9zdXBlcmlvclwiLCBcInJzdXBlcmlvclwiLCBcInNzdXBlcmlvclwiLCBcInRzdXBlcmlvclwiLCBcImZmXCIsIFwiZmZpXCIsIFwiZmZsXCIsIFwicGFyZW5sZWZ0aW5mZXJpb3JcIiwgXCJwYXJlbnJpZ2h0aW5mZXJpb3JcIiwgXCJDaXJjdW1mbGV4c21hbGxcIiwgXCJoeXBoZW5zdXBlcmlvclwiLCBcIkdyYXZlc21hbGxcIiwgXCJBc21hbGxcIiwgXCJCc21hbGxcIiwgXCJDc21hbGxcIiwgXCJEc21hbGxcIiwgXCJFc21hbGxcIiwgXCJGc21hbGxcIiwgXCJHc21hbGxcIiwgXCJIc21hbGxcIiwgXCJJc21hbGxcIiwgXCJKc21hbGxcIiwgXCJLc21hbGxcIiwgXCJMc21hbGxcIiwgXCJNc21hbGxcIiwgXCJOc21hbGxcIiwgXCJPc21hbGxcIiwgXCJQc21hbGxcIiwgXCJRc21hbGxcIiwgXCJSc21hbGxcIiwgXCJTc21hbGxcIiwgXCJUc21hbGxcIiwgXCJVc21hbGxcIiwgXCJWc21hbGxcIiwgXCJXc21hbGxcIiwgXCJYc21hbGxcIiwgXCJZc21hbGxcIiwgXCJac21hbGxcIiwgXCJjb2xvbm1vbmV0YXJ5XCIsIFwib25lZml0dGVkXCIsIFwicnVwaWFoXCIsIFwiVGlsZGVzbWFsbFwiLCBcImV4Y2xhbWRvd25zbWFsbFwiLCBcImNlbnRvbGRzdHlsZVwiLCBcIkxzbGFzaHNtYWxsXCIsIFwiU2Nhcm9uc21hbGxcIiwgXCJaY2Fyb25zbWFsbFwiLCBcIkRpZXJlc2lzc21hbGxcIiwgXCJCcmV2ZXNtYWxsXCIsIFwiQ2Fyb25zbWFsbFwiLCBcIkRvdGFjY2VudHNtYWxsXCIsIFwiTWFjcm9uc21hbGxcIiwgXCJmaWd1cmVkYXNoXCIsIFwiaHlwaGVuaW5mZXJpb3JcIiwgXCJPZ29uZWtzbWFsbFwiLCBcIlJpbmdzbWFsbFwiLCBcIkNlZGlsbGFzbWFsbFwiLCBcInF1ZXN0aW9uZG93bnNtYWxsXCIsIFwib25lZWlnaHRoXCIsIFwidGhyZWVlaWdodGhzXCIsIFwiZml2ZWVpZ2h0aHNcIiwgXCJzZXZlbmVpZ2h0aHNcIiwgXCJvbmV0aGlyZFwiLCBcInR3b3RoaXJkc1wiLCBcInplcm9zdXBlcmlvclwiLCBcImZvdXJzdXBlcmlvclwiLCBcImZpdmVzdXBlcmlvclwiLCBcInNpeHN1cGVyaW9yXCIsIFwic2V2ZW5zdXBlcmlvclwiLCBcImVpZ2h0c3VwZXJpb3JcIiwgXCJuaW5lc3VwZXJpb3JcIiwgXCJ6ZXJvaW5mZXJpb3JcIiwgXCJvbmVpbmZlcmlvclwiLCBcInR3b2luZmVyaW9yXCIsIFwidGhyZWVpbmZlcmlvclwiLCBcImZvdXJpbmZlcmlvclwiLCBcImZpdmVpbmZlcmlvclwiLCBcInNpeGluZmVyaW9yXCIsIFwic2V2ZW5pbmZlcmlvclwiLCBcImVpZ2h0aW5mZXJpb3JcIiwgXCJuaW5laW5mZXJpb3JcIiwgXCJjZW50aW5mZXJpb3JcIiwgXCJkb2xsYXJpbmZlcmlvclwiLCBcInBlcmlvZGluZmVyaW9yXCIsIFwiY29tbWFpbmZlcmlvclwiLCBcIkFncmF2ZXNtYWxsXCIsIFwiQWFjdXRlc21hbGxcIiwgXCJBY2lyY3VtZmxleHNtYWxsXCIsIFwiQXRpbGRlc21hbGxcIiwgXCJBZGllcmVzaXNzbWFsbFwiLCBcIkFyaW5nc21hbGxcIiwgXCJBRXNtYWxsXCIsIFwiQ2NlZGlsbGFzbWFsbFwiLCBcIkVncmF2ZXNtYWxsXCIsIFwiRWFjdXRlc21hbGxcIiwgXCJFY2lyY3VtZmxleHNtYWxsXCIsIFwiRWRpZXJlc2lzc21hbGxcIiwgXCJJZ3JhdmVzbWFsbFwiLCBcIklhY3V0ZXNtYWxsXCIsIFwiSWNpcmN1bWZsZXhzbWFsbFwiLCBcIklkaWVyZXNpc3NtYWxsXCIsIFwiRXRoc21hbGxcIiwgXCJOdGlsZGVzbWFsbFwiLCBcIk9ncmF2ZXNtYWxsXCIsIFwiT2FjdXRlc21hbGxcIiwgXCJPY2lyY3VtZmxleHNtYWxsXCIsIFwiT3RpbGRlc21hbGxcIiwgXCJPZGllcmVzaXNzbWFsbFwiLCBcIk9Fc21hbGxcIiwgXCJPc2xhc2hzbWFsbFwiLCBcIlVncmF2ZXNtYWxsXCIsIFwiVWFjdXRlc21hbGxcIiwgXCJVY2lyY3VtZmxleHNtYWxsXCIsIFwiVWRpZXJlc2lzc21hbGxcIiwgXCJZYWN1dGVzbWFsbFwiLCBcIlRob3Juc21hbGxcIiwgXCJZZGllcmVzaXNzbWFsbFwiLCBcIjAwMS4wMDBcIiwgXCIwMDEuMDAxXCIsIFwiMDAxLjAwMlwiLCBcIjAwMS4wMDNcIiwgXCJCbGFja1wiLCBcIkJvbGRcIiwgXCJCb29rXCIsIFwiTGlnaHRcIiwgXCJNZWRpdW1cIiwgXCJSZWd1bGFyXCIsIFwiUm9tYW5cIiwgXCJTZW1pYm9sZFwiXTtcbmV4cG9ydHMuQ0ZGU3RhbmRhcmRTdHJpbmdzID0gQ0ZGU3RhbmRhcmRTdHJpbmdzO1xuY29uc3QgTlVNX1NUQU5EQVJEX0NGRl9TVFJJTkdTID0gMzkxO1xuXG5jb25zdCBDRkZQYXJzZXIgPSBmdW5jdGlvbiBDRkZQYXJzZXJDbG9zdXJlKCkge1xuICBjb25zdCBDaGFyc3RyaW5nVmFsaWRhdGlvbkRhdGEgPSBbbnVsbCwge1xuICAgIGlkOiBcImhzdGVtXCIsXG4gICAgbWluOiAyLFxuICAgIHN0YWNrQ2xlYXJpbmc6IHRydWUsXG4gICAgc3RlbTogdHJ1ZVxuICB9LCBudWxsLCB7XG4gICAgaWQ6IFwidnN0ZW1cIixcbiAgICBtaW46IDIsXG4gICAgc3RhY2tDbGVhcmluZzogdHJ1ZSxcbiAgICBzdGVtOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJ2bW92ZXRvXCIsXG4gICAgbWluOiAxLFxuICAgIHN0YWNrQ2xlYXJpbmc6IHRydWVcbiAgfSwge1xuICAgIGlkOiBcInJsaW5ldG9cIixcbiAgICBtaW46IDIsXG4gICAgcmVzZXRTdGFjazogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwiaGxpbmV0b1wiLFxuICAgIG1pbjogMSxcbiAgICByZXNldFN0YWNrOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJ2bGluZXRvXCIsXG4gICAgbWluOiAxLFxuICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgfSwge1xuICAgIGlkOiBcInJyY3VydmV0b1wiLFxuICAgIG1pbjogNixcbiAgICByZXNldFN0YWNrOiB0cnVlXG4gIH0sIG51bGwsIHtcbiAgICBpZDogXCJjYWxsc3ViclwiLFxuICAgIG1pbjogMSxcbiAgICB1bmRlZlN0YWNrOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJyZXR1cm5cIixcbiAgICBtaW46IDAsXG4gICAgdW5kZWZTdGFjazogdHJ1ZVxuICB9LCBudWxsLCBudWxsLCB7XG4gICAgaWQ6IFwiZW5kY2hhclwiLFxuICAgIG1pbjogMCxcbiAgICBzdGFja0NsZWFyaW5nOiB0cnVlXG4gIH0sIG51bGwsIG51bGwsIG51bGwsIHtcbiAgICBpZDogXCJoc3RlbWhtXCIsXG4gICAgbWluOiAyLFxuICAgIHN0YWNrQ2xlYXJpbmc6IHRydWUsXG4gICAgc3RlbTogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwiaGludG1hc2tcIixcbiAgICBtaW46IDAsXG4gICAgc3RhY2tDbGVhcmluZzogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwiY250cm1hc2tcIixcbiAgICBtaW46IDAsXG4gICAgc3RhY2tDbGVhcmluZzogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwicm1vdmV0b1wiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0NsZWFyaW5nOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJobW92ZXRvXCIsXG4gICAgbWluOiAxLFxuICAgIHN0YWNrQ2xlYXJpbmc6IHRydWVcbiAgfSwge1xuICAgIGlkOiBcInZzdGVtaG1cIixcbiAgICBtaW46IDIsXG4gICAgc3RhY2tDbGVhcmluZzogdHJ1ZSxcbiAgICBzdGVtOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJyY3VydmVsaW5lXCIsXG4gICAgbWluOiA4LFxuICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgfSwge1xuICAgIGlkOiBcInJsaW5lY3VydmVcIixcbiAgICBtaW46IDgsXG4gICAgcmVzZXRTdGFjazogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwidnZjdXJ2ZXRvXCIsXG4gICAgbWluOiA0LFxuICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgfSwge1xuICAgIGlkOiBcImhoY3VydmV0b1wiLFxuICAgIG1pbjogNCxcbiAgICByZXNldFN0YWNrOiB0cnVlXG4gIH0sIG51bGwsIHtcbiAgICBpZDogXCJjYWxsZ3N1YnJcIixcbiAgICBtaW46IDEsXG4gICAgdW5kZWZTdGFjazogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwidmhjdXJ2ZXRvXCIsXG4gICAgbWluOiA0LFxuICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgfSwge1xuICAgIGlkOiBcImh2Y3VydmV0b1wiLFxuICAgIG1pbjogNCxcbiAgICByZXNldFN0YWNrOiB0cnVlXG4gIH1dO1xuICBjb25zdCBDaGFyc3RyaW5nVmFsaWRhdGlvbkRhdGExMiA9IFtudWxsLCBudWxsLCBudWxsLCB7XG4gICAgaWQ6IFwiYW5kXCIsXG4gICAgbWluOiAyLFxuICAgIHN0YWNrRGVsdGE6IC0xXG4gIH0sIHtcbiAgICBpZDogXCJvclwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0RlbHRhOiAtMVxuICB9LCB7XG4gICAgaWQ6IFwibm90XCIsXG4gICAgbWluOiAxLFxuICAgIHN0YWNrRGVsdGE6IDBcbiAgfSwgbnVsbCwgbnVsbCwgbnVsbCwge1xuICAgIGlkOiBcImFic1wiLFxuICAgIG1pbjogMSxcbiAgICBzdGFja0RlbHRhOiAwXG4gIH0sIHtcbiAgICBpZDogXCJhZGRcIixcbiAgICBtaW46IDIsXG4gICAgc3RhY2tEZWx0YTogLTEsXG4gICAgc3RhY2tGbjogZnVuY3Rpb24gc3RhY2tfZGl2KHN0YWNrLCBpbmRleCkge1xuICAgICAgc3RhY2tbaW5kZXggLSAyXSA9IHN0YWNrW2luZGV4IC0gMl0gKyBzdGFja1tpbmRleCAtIDFdO1xuICAgIH1cbiAgfSwge1xuICAgIGlkOiBcInN1YlwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0RlbHRhOiAtMSxcbiAgICBzdGFja0ZuOiBmdW5jdGlvbiBzdGFja19kaXYoc3RhY2ssIGluZGV4KSB7XG4gICAgICBzdGFja1tpbmRleCAtIDJdID0gc3RhY2tbaW5kZXggLSAyXSAtIHN0YWNrW2luZGV4IC0gMV07XG4gICAgfVxuICB9LCB7XG4gICAgaWQ6IFwiZGl2XCIsXG4gICAgbWluOiAyLFxuICAgIHN0YWNrRGVsdGE6IC0xLFxuICAgIHN0YWNrRm46IGZ1bmN0aW9uIHN0YWNrX2RpdihzdGFjaywgaW5kZXgpIHtcbiAgICAgIHN0YWNrW2luZGV4IC0gMl0gPSBzdGFja1tpbmRleCAtIDJdIC8gc3RhY2tbaW5kZXggLSAxXTtcbiAgICB9XG4gIH0sIG51bGwsIHtcbiAgICBpZDogXCJuZWdcIixcbiAgICBtaW46IDEsXG4gICAgc3RhY2tEZWx0YTogMCxcbiAgICBzdGFja0ZuOiBmdW5jdGlvbiBzdGFja19kaXYoc3RhY2ssIGluZGV4KSB7XG4gICAgICBzdGFja1tpbmRleCAtIDFdID0gLXN0YWNrW2luZGV4IC0gMV07XG4gICAgfVxuICB9LCB7XG4gICAgaWQ6IFwiZXFcIixcbiAgICBtaW46IDIsXG4gICAgc3RhY2tEZWx0YTogLTFcbiAgfSwgbnVsbCwgbnVsbCwge1xuICAgIGlkOiBcImRyb3BcIixcbiAgICBtaW46IDEsXG4gICAgc3RhY2tEZWx0YTogLTFcbiAgfSwgbnVsbCwge1xuICAgIGlkOiBcInB1dFwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0RlbHRhOiAtMlxuICB9LCB7XG4gICAgaWQ6IFwiZ2V0XCIsXG4gICAgbWluOiAxLFxuICAgIHN0YWNrRGVsdGE6IDBcbiAgfSwge1xuICAgIGlkOiBcImlmZWxzZVwiLFxuICAgIG1pbjogNCxcbiAgICBzdGFja0RlbHRhOiAtM1xuICB9LCB7XG4gICAgaWQ6IFwicmFuZG9tXCIsXG4gICAgbWluOiAwLFxuICAgIHN0YWNrRGVsdGE6IDFcbiAgfSwge1xuICAgIGlkOiBcIm11bFwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0RlbHRhOiAtMSxcbiAgICBzdGFja0ZuOiBmdW5jdGlvbiBzdGFja19kaXYoc3RhY2ssIGluZGV4KSB7XG4gICAgICBzdGFja1tpbmRleCAtIDJdID0gc3RhY2tbaW5kZXggLSAyXSAqIHN0YWNrW2luZGV4IC0gMV07XG4gICAgfVxuICB9LCBudWxsLCB7XG4gICAgaWQ6IFwic3FydFwiLFxuICAgIG1pbjogMSxcbiAgICBzdGFja0RlbHRhOiAwXG4gIH0sIHtcbiAgICBpZDogXCJkdXBcIixcbiAgICBtaW46IDEsXG4gICAgc3RhY2tEZWx0YTogMVxuICB9LCB7XG4gICAgaWQ6IFwiZXhjaFwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0RlbHRhOiAwXG4gIH0sIHtcbiAgICBpZDogXCJpbmRleFwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0RlbHRhOiAwXG4gIH0sIHtcbiAgICBpZDogXCJyb2xsXCIsXG4gICAgbWluOiAzLFxuICAgIHN0YWNrRGVsdGE6IC0yXG4gIH0sIG51bGwsIG51bGwsIG51bGwsIHtcbiAgICBpZDogXCJoZmxleFwiLFxuICAgIG1pbjogNyxcbiAgICByZXNldFN0YWNrOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJmbGV4XCIsXG4gICAgbWluOiAxMyxcbiAgICByZXNldFN0YWNrOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJoZmxleDFcIixcbiAgICBtaW46IDksXG4gICAgcmVzZXRTdGFjazogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwiZmxleDFcIixcbiAgICBtaW46IDExLFxuICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgfV07XG5cbiAgY2xhc3MgQ0ZGUGFyc2VyIHtcbiAgICBjb25zdHJ1Y3RvcihmaWxlLCBwcm9wZXJ0aWVzLCBzZWFjQW5hbHlzaXNFbmFibGVkKSB7XG4gICAgICB0aGlzLmJ5dGVzID0gZmlsZS5nZXRCeXRlcygpO1xuICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICAgIHRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZCA9ICEhc2VhY0FuYWx5c2lzRW5hYmxlZDtcbiAgICB9XG5cbiAgICBwYXJzZSgpIHtcbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLnByb3BlcnRpZXM7XG4gICAgICBjb25zdCBjZmYgPSBuZXcgQ0ZGKCk7XG4gICAgICB0aGlzLmNmZiA9IGNmZjtcbiAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMucGFyc2VIZWFkZXIoKTtcbiAgICAgIGNvbnN0IG5hbWVJbmRleCA9IHRoaXMucGFyc2VJbmRleChoZWFkZXIuZW5kUG9zKTtcbiAgICAgIGNvbnN0IHRvcERpY3RJbmRleCA9IHRoaXMucGFyc2VJbmRleChuYW1lSW5kZXguZW5kUG9zKTtcbiAgICAgIGNvbnN0IHN0cmluZ0luZGV4ID0gdGhpcy5wYXJzZUluZGV4KHRvcERpY3RJbmRleC5lbmRQb3MpO1xuICAgICAgY29uc3QgZ2xvYmFsU3VickluZGV4ID0gdGhpcy5wYXJzZUluZGV4KHN0cmluZ0luZGV4LmVuZFBvcyk7XG4gICAgICBjb25zdCB0b3BEaWN0UGFyc2VkID0gdGhpcy5wYXJzZURpY3QodG9wRGljdEluZGV4Lm9iai5nZXQoMCkpO1xuICAgICAgY29uc3QgdG9wRGljdCA9IHRoaXMuY3JlYXRlRGljdChDRkZUb3BEaWN0LCB0b3BEaWN0UGFyc2VkLCBjZmYuc3RyaW5ncyk7XG4gICAgICBjZmYuaGVhZGVyID0gaGVhZGVyLm9iajtcbiAgICAgIGNmZi5uYW1lcyA9IHRoaXMucGFyc2VOYW1lSW5kZXgobmFtZUluZGV4Lm9iaik7XG4gICAgICBjZmYuc3RyaW5ncyA9IHRoaXMucGFyc2VTdHJpbmdJbmRleChzdHJpbmdJbmRleC5vYmopO1xuICAgICAgY2ZmLnRvcERpY3QgPSB0b3BEaWN0O1xuICAgICAgY2ZmLmdsb2JhbFN1YnJJbmRleCA9IGdsb2JhbFN1YnJJbmRleC5vYmo7XG4gICAgICB0aGlzLnBhcnNlUHJpdmF0ZURpY3QoY2ZmLnRvcERpY3QpO1xuICAgICAgY2ZmLmlzQ0lERm9udCA9IHRvcERpY3QuaGFzTmFtZShcIlJPU1wiKTtcbiAgICAgIGNvbnN0IGNoYXJTdHJpbmdPZmZzZXQgPSB0b3BEaWN0LmdldEJ5TmFtZShcIkNoYXJTdHJpbmdzXCIpO1xuICAgICAgY29uc3QgY2hhclN0cmluZ0luZGV4ID0gdGhpcy5wYXJzZUluZGV4KGNoYXJTdHJpbmdPZmZzZXQpLm9iajtcbiAgICAgIGNvbnN0IGZvbnRNYXRyaXggPSB0b3BEaWN0LmdldEJ5TmFtZShcIkZvbnRNYXRyaXhcIik7XG5cbiAgICAgIGlmIChmb250TWF0cml4KSB7XG4gICAgICAgIHByb3BlcnRpZXMuZm9udE1hdHJpeCA9IGZvbnRNYXRyaXg7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvbnRCQm94ID0gdG9wRGljdC5nZXRCeU5hbWUoXCJGb250QkJveFwiKTtcblxuICAgICAgaWYgKGZvbnRCQm94KSB7XG4gICAgICAgIHByb3BlcnRpZXMuYXNjZW50ID0gTWF0aC5tYXgoZm9udEJCb3hbM10sIGZvbnRCQm94WzFdKTtcbiAgICAgICAgcHJvcGVydGllcy5kZXNjZW50ID0gTWF0aC5taW4oZm9udEJCb3hbMV0sIGZvbnRCQm94WzNdKTtcbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnRTY2FsZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgY2hhcnNldCwgZW5jb2Rpbmc7XG5cbiAgICAgIGlmIChjZmYuaXNDSURGb250KSB7XG4gICAgICAgIGNvbnN0IGZkQXJyYXlJbmRleCA9IHRoaXMucGFyc2VJbmRleCh0b3BEaWN0LmdldEJ5TmFtZShcIkZEQXJyYXlcIikpLm9iajtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBmZEFycmF5SW5kZXguY291bnQ7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgY29uc3QgZGljdFJhdyA9IGZkQXJyYXlJbmRleC5nZXQoaSk7XG4gICAgICAgICAgY29uc3QgZm9udERpY3QgPSB0aGlzLmNyZWF0ZURpY3QoQ0ZGVG9wRGljdCwgdGhpcy5wYXJzZURpY3QoZGljdFJhdyksIGNmZi5zdHJpbmdzKTtcbiAgICAgICAgICB0aGlzLnBhcnNlUHJpdmF0ZURpY3QoZm9udERpY3QpO1xuICAgICAgICAgIGNmZi5mZEFycmF5LnB1c2goZm9udERpY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgZW5jb2RpbmcgPSBudWxsO1xuICAgICAgICBjaGFyc2V0ID0gdGhpcy5wYXJzZUNoYXJzZXRzKHRvcERpY3QuZ2V0QnlOYW1lKFwiY2hhcnNldFwiKSwgY2hhclN0cmluZ0luZGV4LmNvdW50LCBjZmYuc3RyaW5ncywgdHJ1ZSk7XG4gICAgICAgIGNmZi5mZFNlbGVjdCA9IHRoaXMucGFyc2VGRFNlbGVjdCh0b3BEaWN0LmdldEJ5TmFtZShcIkZEU2VsZWN0XCIpLCBjaGFyU3RyaW5nSW5kZXguY291bnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhcnNldCA9IHRoaXMucGFyc2VDaGFyc2V0cyh0b3BEaWN0LmdldEJ5TmFtZShcImNoYXJzZXRcIiksIGNoYXJTdHJpbmdJbmRleC5jb3VudCwgY2ZmLnN0cmluZ3MsIGZhbHNlKTtcbiAgICAgICAgZW5jb2RpbmcgPSB0aGlzLnBhcnNlRW5jb2RpbmcodG9wRGljdC5nZXRCeU5hbWUoXCJFbmNvZGluZ1wiKSwgcHJvcGVydGllcywgY2ZmLnN0cmluZ3MsIGNoYXJzZXQuY2hhcnNldCk7XG4gICAgICB9XG5cbiAgICAgIGNmZi5jaGFyc2V0ID0gY2hhcnNldDtcbiAgICAgIGNmZi5lbmNvZGluZyA9IGVuY29kaW5nO1xuICAgICAgY29uc3QgY2hhclN0cmluZ3NBbmRTZWFjcyA9IHRoaXMucGFyc2VDaGFyU3RyaW5ncyh7XG4gICAgICAgIGNoYXJTdHJpbmdzOiBjaGFyU3RyaW5nSW5kZXgsXG4gICAgICAgIGxvY2FsU3VickluZGV4OiB0b3BEaWN0LnByaXZhdGVEaWN0LnN1YnJzSW5kZXgsXG4gICAgICAgIGdsb2JhbFN1YnJJbmRleDogZ2xvYmFsU3VickluZGV4Lm9iaixcbiAgICAgICAgZmRTZWxlY3Q6IGNmZi5mZFNlbGVjdCxcbiAgICAgICAgZmRBcnJheTogY2ZmLmZkQXJyYXksXG4gICAgICAgIHByaXZhdGVEaWN0OiB0b3BEaWN0LnByaXZhdGVEaWN0XG4gICAgICB9KTtcbiAgICAgIGNmZi5jaGFyU3RyaW5ncyA9IGNoYXJTdHJpbmdzQW5kU2VhY3MuY2hhclN0cmluZ3M7XG4gICAgICBjZmYuc2VhY3MgPSBjaGFyU3RyaW5nc0FuZFNlYWNzLnNlYWNzO1xuICAgICAgY2ZmLndpZHRocyA9IGNoYXJTdHJpbmdzQW5kU2VhY3Mud2lkdGhzO1xuICAgICAgcmV0dXJuIGNmZjtcbiAgICB9XG5cbiAgICBwYXJzZUhlYWRlcigpIHtcbiAgICAgIGxldCBieXRlcyA9IHRoaXMuYnl0ZXM7XG4gICAgICBjb25zdCBieXRlc0xlbmd0aCA9IGJ5dGVzLmxlbmd0aDtcbiAgICAgIGxldCBvZmZzZXQgPSAwO1xuXG4gICAgICB3aGlsZSAob2Zmc2V0IDwgYnl0ZXNMZW5ndGggJiYgYnl0ZXNbb2Zmc2V0XSAhPT0gMSkge1xuICAgICAgICArK29mZnNldDtcbiAgICAgIH1cblxuICAgICAgaWYgKG9mZnNldCA+PSBieXRlc0xlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIENGRiBoZWFkZXJcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChvZmZzZXQgIT09IDApIHtcbiAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiY2ZmIGRhdGEgaXMgc2hpZnRlZFwiKTtcbiAgICAgICAgYnl0ZXMgPSBieXRlcy5zdWJhcnJheShvZmZzZXQpO1xuICAgICAgICB0aGlzLmJ5dGVzID0gYnl0ZXM7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1ham9yID0gYnl0ZXNbMF07XG4gICAgICBjb25zdCBtaW5vciA9IGJ5dGVzWzFdO1xuICAgICAgY29uc3QgaGRyU2l6ZSA9IGJ5dGVzWzJdO1xuICAgICAgY29uc3Qgb2ZmU2l6ZSA9IGJ5dGVzWzNdO1xuICAgICAgY29uc3QgaGVhZGVyID0gbmV3IENGRkhlYWRlcihtYWpvciwgbWlub3IsIGhkclNpemUsIG9mZlNpemUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb2JqOiBoZWFkZXIsXG4gICAgICAgIGVuZFBvczogaGRyU2l6ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBwYXJzZURpY3QoZGljdCkge1xuICAgICAgbGV0IHBvcyA9IDA7XG5cbiAgICAgIGZ1bmN0aW9uIHBhcnNlT3BlcmFuZCgpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gZGljdFtwb3MrK107XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSAzMCkge1xuICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0T3BlcmFuZCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAyOCkge1xuICAgICAgICAgIHZhbHVlID0gZGljdFtwb3MrK107XG4gICAgICAgICAgdmFsdWUgPSAodmFsdWUgPDwgMjQgfCBkaWN0W3BvcysrXSA8PCAxNikgPj4gMTY7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAyOSkge1xuICAgICAgICAgIHZhbHVlID0gZGljdFtwb3MrK107XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSA8PCA4IHwgZGljdFtwb3MrK107XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSA8PCA4IHwgZGljdFtwb3MrK107XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSA8PCA4IHwgZGljdFtwb3MrK107XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID49IDMyICYmIHZhbHVlIDw9IDI0Nikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZSAtIDEzOTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAyNDcgJiYgdmFsdWUgPD0gMjUwKSB7XG4gICAgICAgICAgcmV0dXJuICh2YWx1ZSAtIDI0NykgKiAyNTYgKyBkaWN0W3BvcysrXSArIDEwODtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAyNTEgJiYgdmFsdWUgPD0gMjU0KSB7XG4gICAgICAgICAgcmV0dXJuIC0oKHZhbHVlIC0gMjUxKSAqIDI1NikgLSBkaWN0W3BvcysrXSAtIDEwODtcbiAgICAgICAgfVxuXG4gICAgICAgICgwLCBfdXRpbC53YXJuKSgnQ0ZGUGFyc2VyX3BhcnNlRGljdDogXCInICsgdmFsdWUgKyAnXCIgaXMgYSByZXNlcnZlZCBjb21tYW5kLicpO1xuICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBwYXJzZUZsb2F0T3BlcmFuZCgpIHtcbiAgICAgICAgbGV0IHN0ciA9IFwiXCI7XG4gICAgICAgIGNvbnN0IGVvZiA9IDE1O1xuICAgICAgICBjb25zdCBsb29rdXAgPSBbXCIwXCIsIFwiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiLCBcIjVcIiwgXCI2XCIsIFwiN1wiLCBcIjhcIiwgXCI5XCIsIFwiLlwiLCBcIkVcIiwgXCJFLVwiLCBudWxsLCBcIi1cIl07XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGRpY3QubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlIChwb3MgPCBsZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBiID0gZGljdFtwb3MrK107XG4gICAgICAgICAgY29uc3QgYjEgPSBiID4+IDQ7XG4gICAgICAgICAgY29uc3QgYjIgPSBiICYgMTU7XG5cbiAgICAgICAgICBpZiAoYjEgPT09IGVvZikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RyICs9IGxvb2t1cFtiMV07XG5cbiAgICAgICAgICBpZiAoYjIgPT09IGVvZikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RyICs9IGxvb2t1cFtiMl07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChzdHIpO1xuICAgICAgfVxuXG4gICAgICBsZXQgb3BlcmFuZHMgPSBbXTtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBbXTtcbiAgICAgIHBvcyA9IDA7XG4gICAgICBjb25zdCBlbmQgPSBkaWN0Lmxlbmd0aDtcblxuICAgICAgd2hpbGUgKHBvcyA8IGVuZCkge1xuICAgICAgICBsZXQgYiA9IGRpY3RbcG9zXTtcblxuICAgICAgICBpZiAoYiA8PSAyMSkge1xuICAgICAgICAgIGlmIChiID09PSAxMikge1xuICAgICAgICAgICAgYiA9IGIgPDwgOCB8IGRpY3RbKytwb3NdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVudHJpZXMucHVzaChbYiwgb3BlcmFuZHNdKTtcbiAgICAgICAgICBvcGVyYW5kcyA9IFtdO1xuICAgICAgICAgICsrcG9zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wZXJhbmRzLnB1c2gocGFyc2VPcGVyYW5kKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbnRyaWVzO1xuICAgIH1cblxuICAgIHBhcnNlSW5kZXgocG9zKSB7XG4gICAgICBjb25zdCBjZmZJbmRleCA9IG5ldyBDRkZJbmRleCgpO1xuICAgICAgY29uc3QgYnl0ZXMgPSB0aGlzLmJ5dGVzO1xuICAgICAgY29uc3QgY291bnQgPSBieXRlc1twb3MrK10gPDwgOCB8IGJ5dGVzW3BvcysrXTtcbiAgICAgIGNvbnN0IG9mZnNldHMgPSBbXTtcbiAgICAgIGxldCBlbmQgPSBwb3M7XG4gICAgICBsZXQgaSwgaWk7XG5cbiAgICAgIGlmIChjb3VudCAhPT0gMCkge1xuICAgICAgICBjb25zdCBvZmZzZXRTaXplID0gYnl0ZXNbcG9zKytdO1xuICAgICAgICBjb25zdCBzdGFydFBvcyA9IHBvcyArIChjb3VudCArIDEpICogb2Zmc2V0U2l6ZSAtIDE7XG5cbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSBjb3VudCArIDE7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgbGV0IG9mZnNldCA9IDA7XG5cbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG9mZnNldFNpemU7ICsraikge1xuICAgICAgICAgICAgb2Zmc2V0IDw8PSA4O1xuICAgICAgICAgICAgb2Zmc2V0ICs9IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvZmZzZXRzLnB1c2goc3RhcnRQb3MgKyBvZmZzZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZW5kID0gb2Zmc2V0c1tjb3VudF07XG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDAsIGlpID0gb2Zmc2V0cy5sZW5ndGggLSAxOyBpIDwgaWk7ICsraSkge1xuICAgICAgICBjb25zdCBvZmZzZXRTdGFydCA9IG9mZnNldHNbaV07XG4gICAgICAgIGNvbnN0IG9mZnNldEVuZCA9IG9mZnNldHNbaSArIDFdO1xuICAgICAgICBjZmZJbmRleC5hZGQoYnl0ZXMuc3ViYXJyYXkob2Zmc2V0U3RhcnQsIG9mZnNldEVuZCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBvYmo6IGNmZkluZGV4LFxuICAgICAgICBlbmRQb3M6IGVuZFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBwYXJzZU5hbWVJbmRleChpbmRleCkge1xuICAgICAgY29uc3QgbmFtZXMgPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gaW5kZXguY291bnQ7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBpbmRleC5nZXQoaSk7XG4gICAgICAgIG5hbWVzLnB1c2goKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKG5hbWUpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5hbWVzO1xuICAgIH1cblxuICAgIHBhcnNlU3RyaW5nSW5kZXgoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHN0cmluZ3MgPSBuZXcgQ0ZGU3RyaW5ncygpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBpbmRleC5jb3VudDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGluZGV4LmdldChpKTtcbiAgICAgICAgc3RyaW5ncy5hZGQoKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGRhdGEpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0cmluZ3M7XG4gICAgfVxuXG4gICAgY3JlYXRlRGljdChUeXBlLCBkaWN0LCBzdHJpbmdzKSB7XG4gICAgICBjb25zdCBjZmZEaWN0ID0gbmV3IFR5cGUoc3RyaW5ncyk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGRpY3QubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICBjb25zdCBwYWlyID0gZGljdFtpXTtcbiAgICAgICAgY29uc3Qga2V5ID0gcGFpclswXTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwYWlyWzFdO1xuICAgICAgICBjZmZEaWN0LnNldEJ5S2V5KGtleSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2ZmRGljdDtcbiAgICB9XG5cbiAgICBwYXJzZUNoYXJTdHJpbmcoc3RhdGUsIGRhdGEsIGxvY2FsU3VickluZGV4LCBnbG9iYWxTdWJySW5kZXgpIHtcbiAgICAgIGlmICghZGF0YSB8fCBzdGF0ZS5jYWxsRGVwdGggPiBNQVhfU1VCUl9ORVNUSU5HKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgbGV0IHN0YWNrU2l6ZSA9IHN0YXRlLnN0YWNrU2l6ZTtcbiAgICAgIGNvbnN0IHN0YWNrID0gc3RhdGUuc3RhY2s7XG4gICAgICBjb25zdCBsZW5ndGggPSBkYXRhLmxlbmd0aDtcblxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZW5ndGg7KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVtqKytdO1xuICAgICAgICBsZXQgdmFsaWRhdGlvbkNvbW1hbmQgPSBudWxsO1xuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gMTIpIHtcbiAgICAgICAgICBjb25zdCBxID0gZGF0YVtqKytdO1xuXG4gICAgICAgICAgaWYgKHEgPT09IDApIHtcbiAgICAgICAgICAgIGRhdGFbaiAtIDJdID0gMTM5O1xuICAgICAgICAgICAgZGF0YVtqIC0gMV0gPSAyMjtcbiAgICAgICAgICAgIHN0YWNrU2l6ZSA9IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb25Db21tYW5kID0gQ2hhcnN0cmluZ1ZhbGlkYXRpb25EYXRhMTJbcV07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAyOCkge1xuICAgICAgICAgIHN0YWNrW3N0YWNrU2l6ZV0gPSAoZGF0YVtqXSA8PCAyNCB8IGRhdGFbaiArIDFdIDw8IDE2KSA+PiAxNjtcbiAgICAgICAgICBqICs9IDI7XG4gICAgICAgICAgc3RhY2tTaXplKys7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IDE0KSB7XG4gICAgICAgICAgaWYgKHN0YWNrU2l6ZSA+PSA0KSB7XG4gICAgICAgICAgICBzdGFja1NpemUgLT0gNDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZCkge1xuICAgICAgICAgICAgICBzdGF0ZS5zZWFjID0gc3RhY2suc2xpY2Uoc3RhY2tTaXplLCBzdGFja1NpemUgKyA0KTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhbGlkYXRpb25Db21tYW5kID0gQ2hhcnN0cmluZ1ZhbGlkYXRpb25EYXRhW3ZhbHVlXTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAzMiAmJiB2YWx1ZSA8PSAyNDYpIHtcbiAgICAgICAgICBzdGFja1tzdGFja1NpemVdID0gdmFsdWUgLSAxMzk7XG4gICAgICAgICAgc3RhY2tTaXplKys7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMjQ3ICYmIHZhbHVlIDw9IDI1NCkge1xuICAgICAgICAgIHN0YWNrW3N0YWNrU2l6ZV0gPSB2YWx1ZSA8IDI1MSA/ICh2YWx1ZSAtIDI0NyA8PCA4KSArIGRhdGFbal0gKyAxMDggOiAtKHZhbHVlIC0gMjUxIDw8IDgpIC0gZGF0YVtqXSAtIDEwODtcbiAgICAgICAgICBqKys7XG4gICAgICAgICAgc3RhY2tTaXplKys7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IDI1NSkge1xuICAgICAgICAgIHN0YWNrW3N0YWNrU2l6ZV0gPSAoZGF0YVtqXSA8PCAyNCB8IGRhdGFbaiArIDFdIDw8IDE2IHwgZGF0YVtqICsgMl0gPDwgOCB8IGRhdGFbaiArIDNdKSAvIDY1NTM2O1xuICAgICAgICAgIGogKz0gNDtcbiAgICAgICAgICBzdGFja1NpemUrKztcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gMTkgfHwgdmFsdWUgPT09IDIwKSB7XG4gICAgICAgICAgc3RhdGUuaGludHMgKz0gc3RhY2tTaXplID4+IDE7XG4gICAgICAgICAgaiArPSBzdGF0ZS5oaW50cyArIDcgPj4gMztcbiAgICAgICAgICBzdGFja1NpemUgJT0gMjtcbiAgICAgICAgICB2YWxpZGF0aW9uQ29tbWFuZCA9IENoYXJzdHJpbmdWYWxpZGF0aW9uRGF0YVt2YWx1ZV07XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IDEwIHx8IHZhbHVlID09PSAyOSkge1xuICAgICAgICAgIGxldCBzdWJyc0luZGV4O1xuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSAxMCkge1xuICAgICAgICAgICAgc3VicnNJbmRleCA9IGxvY2FsU3VickluZGV4O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdWJyc0luZGV4ID0gZ2xvYmFsU3VickluZGV4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghc3VicnNJbmRleCkge1xuICAgICAgICAgICAgdmFsaWRhdGlvbkNvbW1hbmQgPSBDaGFyc3RyaW5nVmFsaWRhdGlvbkRhdGFbdmFsdWVdO1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiTWlzc2luZyBzdWJyc0luZGV4IGZvciBcIiArIHZhbGlkYXRpb25Db21tYW5kLmlkKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgYmlhcyA9IDMyNzY4O1xuXG4gICAgICAgICAgaWYgKHN1YnJzSW5kZXguY291bnQgPCAxMjQwKSB7XG4gICAgICAgICAgICBiaWFzID0gMTA3O1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3VicnNJbmRleC5jb3VudCA8IDMzOTAwKSB7XG4gICAgICAgICAgICBiaWFzID0gMTEzMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzdWJyTnVtYmVyID0gc3RhY2tbLS1zdGFja1NpemVdICsgYmlhcztcblxuICAgICAgICAgIGlmIChzdWJyTnVtYmVyIDwgMCB8fCBzdWJyTnVtYmVyID49IHN1YnJzSW5kZXguY291bnQgfHwgaXNOYU4oc3Vick51bWJlcikpIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb25Db21tYW5kID0gQ2hhcnN0cmluZ1ZhbGlkYXRpb25EYXRhW3ZhbHVlXTtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIk91dCBvZiBib3VuZHMgc3VickluZGV4IGZvciBcIiArIHZhbGlkYXRpb25Db21tYW5kLmlkKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdGF0ZS5zdGFja1NpemUgPSBzdGFja1NpemU7XG4gICAgICAgICAgc3RhdGUuY2FsbERlcHRoKys7XG4gICAgICAgICAgY29uc3QgdmFsaWQgPSB0aGlzLnBhcnNlQ2hhclN0cmluZyhzdGF0ZSwgc3VicnNJbmRleC5nZXQoc3Vick51bWJlciksIGxvY2FsU3VickluZGV4LCBnbG9iYWxTdWJySW5kZXgpO1xuXG4gICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0YXRlLmNhbGxEZXB0aC0tO1xuICAgICAgICAgIHN0YWNrU2l6ZSA9IHN0YXRlLnN0YWNrU2l6ZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gMTEpIHtcbiAgICAgICAgICBzdGF0ZS5zdGFja1NpemUgPSBzdGFja1NpemU7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IDAgJiYgaiA9PT0gZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICBkYXRhW2ogLSAxXSA9IDE0O1xuICAgICAgICAgIHZhbGlkYXRpb25Db21tYW5kID0gQ2hhcnN0cmluZ1ZhbGlkYXRpb25EYXRhWzE0XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9uQ29tbWFuZCA9IENoYXJzdHJpbmdWYWxpZGF0aW9uRGF0YVt2YWx1ZV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGlvbkNvbW1hbmQpIHtcbiAgICAgICAgICBpZiAodmFsaWRhdGlvbkNvbW1hbmQuc3RlbSkge1xuICAgICAgICAgICAgc3RhdGUuaGludHMgKz0gc3RhY2tTaXplID4+IDE7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMyB8fCB2YWx1ZSA9PT0gMjMpIHtcbiAgICAgICAgICAgICAgc3RhdGUuaGFzVlN0ZW1zID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuaGFzVlN0ZW1zICYmICh2YWx1ZSA9PT0gMSB8fCB2YWx1ZSA9PT0gMTgpKSB7XG4gICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIkNGRiBzdGVtIGhpbnRzIGFyZSBpbiB3cm9uZyBvcmRlclwiKTtcbiAgICAgICAgICAgICAgZGF0YVtqIC0gMV0gPSB2YWx1ZSA9PT0gMSA/IDMgOiAyMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXCJtaW5cIiBpbiB2YWxpZGF0aW9uQ29tbWFuZCkge1xuICAgICAgICAgICAgaWYgKCFzdGF0ZS51bmRlZlN0YWNrICYmIHN0YWNrU2l6ZSA8IHZhbGlkYXRpb25Db21tYW5kLm1pbikge1xuICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJOb3QgZW5vdWdoIHBhcmFtZXRlcnMgZm9yIFwiICsgdmFsaWRhdGlvbkNvbW1hbmQuaWQgKyBcIjsgYWN0dWFsOiBcIiArIHN0YWNrU2l6ZSArIFwiLCBleHBlY3RlZDogXCIgKyB2YWxpZGF0aW9uQ29tbWFuZC5taW4pO1xuXG4gICAgICAgICAgICAgIGlmIChzdGFja1NpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICBkYXRhW2ogLSAxXSA9IDE0O1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdGF0ZS5maXJzdFN0YWNrQ2xlYXJpbmcgJiYgdmFsaWRhdGlvbkNvbW1hbmQuc3RhY2tDbGVhcmluZykge1xuICAgICAgICAgICAgc3RhdGUuZmlyc3RTdGFja0NsZWFyaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzdGFja1NpemUgLT0gdmFsaWRhdGlvbkNvbW1hbmQubWluO1xuXG4gICAgICAgICAgICBpZiAoc3RhY2tTaXplID49IDIgJiYgdmFsaWRhdGlvbkNvbW1hbmQuc3RlbSkge1xuICAgICAgICAgICAgICBzdGFja1NpemUgJT0gMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhY2tTaXplID4gMSkge1xuICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJGb3VuZCB0b28gbWFueSBwYXJhbWV0ZXJzIGZvciBzdGFjay1jbGVhcmluZyBjb21tYW5kXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3RhY2tTaXplID4gMCkge1xuICAgICAgICAgICAgICBzdGF0ZS53aWR0aCA9IHN0YWNrW3N0YWNrU2l6ZSAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcInN0YWNrRGVsdGFcIiBpbiB2YWxpZGF0aW9uQ29tbWFuZCkge1xuICAgICAgICAgICAgaWYgKFwic3RhY2tGblwiIGluIHZhbGlkYXRpb25Db21tYW5kKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRpb25Db21tYW5kLnN0YWNrRm4oc3RhY2ssIHN0YWNrU2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YWNrU2l6ZSArPSB2YWxpZGF0aW9uQ29tbWFuZC5zdGFja0RlbHRhO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbkNvbW1hbmQuc3RhY2tDbGVhcmluZykge1xuICAgICAgICAgICAgc3RhY2tTaXplID0gMDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25Db21tYW5kLnJlc2V0U3RhY2spIHtcbiAgICAgICAgICAgIHN0YWNrU2l6ZSA9IDA7XG4gICAgICAgICAgICBzdGF0ZS51bmRlZlN0YWNrID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uQ29tbWFuZC51bmRlZlN0YWNrKSB7XG4gICAgICAgICAgICBzdGFja1NpemUgPSAwO1xuICAgICAgICAgICAgc3RhdGUudW5kZWZTdGFjayA9IHRydWU7XG4gICAgICAgICAgICBzdGF0ZS5maXJzdFN0YWNrQ2xlYXJpbmcgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3RhdGUuc3RhY2tTaXplID0gc3RhY2tTaXplO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcGFyc2VDaGFyU3RyaW5ncyh7XG4gICAgICBjaGFyU3RyaW5ncyxcbiAgICAgIGxvY2FsU3VickluZGV4LFxuICAgICAgZ2xvYmFsU3VickluZGV4LFxuICAgICAgZmRTZWxlY3QsXG4gICAgICBmZEFycmF5LFxuICAgICAgcHJpdmF0ZURpY3RcbiAgICB9KSB7XG4gICAgICBjb25zdCBzZWFjcyA9IFtdO1xuICAgICAgY29uc3Qgd2lkdGhzID0gW107XG4gICAgICBjb25zdCBjb3VudCA9IGNoYXJTdHJpbmdzLmNvdW50O1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hhcnN0cmluZyA9IGNoYXJTdHJpbmdzLmdldChpKTtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICAgICAgY2FsbERlcHRoOiAwLFxuICAgICAgICAgIHN0YWNrU2l6ZTogMCxcbiAgICAgICAgICBzdGFjazogW10sXG4gICAgICAgICAgdW5kZWZTdGFjazogdHJ1ZSxcbiAgICAgICAgICBoaW50czogMCxcbiAgICAgICAgICBmaXJzdFN0YWNrQ2xlYXJpbmc6IHRydWUsXG4gICAgICAgICAgc2VhYzogbnVsbCxcbiAgICAgICAgICB3aWR0aDogbnVsbCxcbiAgICAgICAgICBoYXNWU3RlbXM6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgICAgIGxldCBsb2NhbFN1YnJUb1VzZSA9IG51bGw7XG4gICAgICAgIGxldCBwcml2YXRlRGljdFRvVXNlID0gcHJpdmF0ZURpY3Q7XG5cbiAgICAgICAgaWYgKGZkU2VsZWN0ICYmIGZkQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgZmRJbmRleCA9IGZkU2VsZWN0LmdldEZESW5kZXgoaSk7XG5cbiAgICAgICAgICBpZiAoZmRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIkdseXBoIGluZGV4IGlzIG5vdCBpbiBmZCBzZWxlY3QuXCIpO1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmRJbmRleCA+PSBmZEFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguXCIpO1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgICAgIHByaXZhdGVEaWN0VG9Vc2UgPSBmZEFycmF5W2ZkSW5kZXhdLnByaXZhdGVEaWN0O1xuICAgICAgICAgICAgbG9jYWxTdWJyVG9Vc2UgPSBwcml2YXRlRGljdFRvVXNlLnN1YnJzSW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGxvY2FsU3VickluZGV4KSB7XG4gICAgICAgICAgbG9jYWxTdWJyVG9Vc2UgPSBsb2NhbFN1YnJJbmRleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgIHZhbGlkID0gdGhpcy5wYXJzZUNoYXJTdHJpbmcoc3RhdGUsIGNoYXJzdHJpbmcsIGxvY2FsU3ViclRvVXNlLCBnbG9iYWxTdWJySW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlLndpZHRoICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3Qgbm9taW5hbFdpZHRoID0gcHJpdmF0ZURpY3RUb1VzZS5nZXRCeU5hbWUoXCJub21pbmFsV2lkdGhYXCIpO1xuICAgICAgICAgIHdpZHRoc1tpXSA9IG5vbWluYWxXaWR0aCArIHN0YXRlLndpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGRlZmF1bHRXaWR0aCA9IHByaXZhdGVEaWN0VG9Vc2UuZ2V0QnlOYW1lKFwiZGVmYXVsdFdpZHRoWFwiKTtcbiAgICAgICAgICB3aWR0aHNbaV0gPSBkZWZhdWx0V2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUuc2VhYyAhPT0gbnVsbCkge1xuICAgICAgICAgIHNlYWNzW2ldID0gc3RhdGUuc2VhYztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICBjaGFyU3RyaW5ncy5zZXQoaSwgbmV3IFVpbnQ4QXJyYXkoWzE0XSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoYXJTdHJpbmdzLFxuICAgICAgICBzZWFjcyxcbiAgICAgICAgd2lkdGhzXG4gICAgICB9O1xuICAgIH1cblxuICAgIGVtcHR5UHJpdmF0ZURpY3Rpb25hcnkocGFyZW50RGljdCkge1xuICAgICAgY29uc3QgcHJpdmF0ZURpY3QgPSB0aGlzLmNyZWF0ZURpY3QoQ0ZGUHJpdmF0ZURpY3QsIFtdLCBwYXJlbnREaWN0LnN0cmluZ3MpO1xuICAgICAgcGFyZW50RGljdC5zZXRCeUtleSgxOCwgWzAsIDBdKTtcbiAgICAgIHBhcmVudERpY3QucHJpdmF0ZURpY3QgPSBwcml2YXRlRGljdDtcbiAgICB9XG5cbiAgICBwYXJzZVByaXZhdGVEaWN0KHBhcmVudERpY3QpIHtcbiAgICAgIGlmICghcGFyZW50RGljdC5oYXNOYW1lKFwiUHJpdmF0ZVwiKSkge1xuICAgICAgICB0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkocGFyZW50RGljdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJpdmF0ZU9mZnNldCA9IHBhcmVudERpY3QuZ2V0QnlOYW1lKFwiUHJpdmF0ZVwiKTtcblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByaXZhdGVPZmZzZXQpIHx8IHByaXZhdGVPZmZzZXQubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHBhcmVudERpY3QucmVtb3ZlQnlOYW1lKFwiUHJpdmF0ZVwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzaXplID0gcHJpdmF0ZU9mZnNldFswXTtcbiAgICAgIGNvbnN0IG9mZnNldCA9IHByaXZhdGVPZmZzZXRbMV07XG5cbiAgICAgIGlmIChzaXplID09PSAwIHx8IG9mZnNldCA+PSB0aGlzLmJ5dGVzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkocGFyZW50RGljdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJpdmF0ZURpY3RFbmQgPSBvZmZzZXQgKyBzaXplO1xuICAgICAgY29uc3QgZGljdERhdGEgPSB0aGlzLmJ5dGVzLnN1YmFycmF5KG9mZnNldCwgcHJpdmF0ZURpY3RFbmQpO1xuICAgICAgY29uc3QgZGljdCA9IHRoaXMucGFyc2VEaWN0KGRpY3REYXRhKTtcbiAgICAgIGNvbnN0IHByaXZhdGVEaWN0ID0gdGhpcy5jcmVhdGVEaWN0KENGRlByaXZhdGVEaWN0LCBkaWN0LCBwYXJlbnREaWN0LnN0cmluZ3MpO1xuICAgICAgcGFyZW50RGljdC5wcml2YXRlRGljdCA9IHByaXZhdGVEaWN0O1xuXG4gICAgICBpZiAoIXByaXZhdGVEaWN0LmdldEJ5TmFtZShcIlN1YnJzXCIpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3VicnNPZmZzZXQgPSBwcml2YXRlRGljdC5nZXRCeU5hbWUoXCJTdWJyc1wiKTtcbiAgICAgIGNvbnN0IHJlbGF0aXZlT2Zmc2V0ID0gb2Zmc2V0ICsgc3VicnNPZmZzZXQ7XG5cbiAgICAgIGlmIChzdWJyc09mZnNldCA9PT0gMCB8fCByZWxhdGl2ZU9mZnNldCA+PSB0aGlzLmJ5dGVzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkocGFyZW50RGljdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3VicnNJbmRleCA9IHRoaXMucGFyc2VJbmRleChyZWxhdGl2ZU9mZnNldCk7XG4gICAgICBwcml2YXRlRGljdC5zdWJyc0luZGV4ID0gc3VicnNJbmRleC5vYmo7XG4gICAgfVxuXG4gICAgcGFyc2VDaGFyc2V0cyhwb3MsIGxlbmd0aCwgc3RyaW5ncywgY2lkKSB7XG4gICAgICBpZiAocG9zID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ0ZGQ2hhcnNldCh0cnVlLCBDRkZDaGFyc2V0UHJlZGVmaW5lZFR5cGVzLklTT19BRE9CRSwgX2NoYXJzZXRzLklTT0Fkb2JlQ2hhcnNldCk7XG4gICAgICB9IGVsc2UgaWYgKHBvcyA9PT0gMSkge1xuICAgICAgICByZXR1cm4gbmV3IENGRkNoYXJzZXQodHJ1ZSwgQ0ZGQ2hhcnNldFByZWRlZmluZWRUeXBlcy5FWFBFUlQsIF9jaGFyc2V0cy5FeHBlcnRDaGFyc2V0KTtcbiAgICAgIH0gZWxzZSBpZiAocG9zID09PSAyKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ0ZGQ2hhcnNldCh0cnVlLCBDRkZDaGFyc2V0UHJlZGVmaW5lZFR5cGVzLkVYUEVSVF9TVUJTRVQsIF9jaGFyc2V0cy5FeHBlcnRTdWJzZXRDaGFyc2V0KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYnl0ZXMgPSB0aGlzLmJ5dGVzO1xuICAgICAgY29uc3Qgc3RhcnQgPSBwb3M7XG4gICAgICBjb25zdCBmb3JtYXQgPSBieXRlc1twb3MrK107XG4gICAgICBjb25zdCBjaGFyc2V0ID0gW2NpZCA/IDAgOiBcIi5ub3RkZWZcIl07XG4gICAgICBsZXQgaWQsIGNvdW50LCBpO1xuICAgICAgbGVuZ3RoIC09IDE7XG5cbiAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlkID0gYnl0ZXNbcG9zKytdIDw8IDggfCBieXRlc1twb3MrK107XG4gICAgICAgICAgICBjaGFyc2V0LnB1c2goY2lkID8gaWQgOiBzdHJpbmdzLmdldChpZCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB3aGlsZSAoY2hhcnNldC5sZW5ndGggPD0gbGVuZ3RoKSB7XG4gICAgICAgICAgICBpZCA9IGJ5dGVzW3BvcysrXSA8PCA4IHwgYnl0ZXNbcG9zKytdO1xuICAgICAgICAgICAgY291bnQgPSBieXRlc1twb3MrK107XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICBjaGFyc2V0LnB1c2goY2lkID8gaWQrKyA6IHN0cmluZ3MuZ2V0KGlkKyspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgd2hpbGUgKGNoYXJzZXQubGVuZ3RoIDw9IGxlbmd0aCkge1xuICAgICAgICAgICAgaWQgPSBieXRlc1twb3MrK10gPDwgOCB8IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgICAgIGNvdW50ID0gYnl0ZXNbcG9zKytdIDw8IDggfCBieXRlc1twb3MrK107XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICBjaGFyc2V0LnB1c2goY2lkID8gaWQrKyA6IHN0cmluZ3MuZ2V0KGlkKyspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlVua25vd24gY2hhcnNldCBmb3JtYXRcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVuZCA9IHBvcztcbiAgICAgIGNvbnN0IHJhdyA9IGJ5dGVzLnN1YmFycmF5KHN0YXJ0LCBlbmQpO1xuICAgICAgcmV0dXJuIG5ldyBDRkZDaGFyc2V0KGZhbHNlLCBmb3JtYXQsIGNoYXJzZXQsIHJhdyk7XG4gICAgfVxuXG4gICAgcGFyc2VFbmNvZGluZyhwb3MsIHByb3BlcnRpZXMsIHN0cmluZ3MsIGNoYXJzZXQpIHtcbiAgICAgIGNvbnN0IGVuY29kaW5nID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIGNvbnN0IGJ5dGVzID0gdGhpcy5ieXRlcztcbiAgICAgIGxldCBwcmVkZWZpbmVkID0gZmFsc2U7XG4gICAgICBsZXQgZm9ybWF0LCBpLCBpaTtcbiAgICAgIGxldCByYXcgPSBudWxsO1xuXG4gICAgICBmdW5jdGlvbiByZWFkU3VwcGxlbWVudCgpIHtcbiAgICAgICAgY29uc3Qgc3VwcGxlbWVudHNDb3VudCA9IGJ5dGVzW3BvcysrXTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3VwcGxlbWVudHNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgY29kZSA9IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgICBjb25zdCBzaWQgPSAoYnl0ZXNbcG9zKytdIDw8IDgpICsgKGJ5dGVzW3BvcysrXSAmIDB4ZmYpO1xuICAgICAgICAgIGVuY29kaW5nW2NvZGVdID0gY2hhcnNldC5pbmRleE9mKHN0cmluZ3MuZ2V0KHNpZCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwb3MgPT09IDAgfHwgcG9zID09PSAxKSB7XG4gICAgICAgIHByZWRlZmluZWQgPSB0cnVlO1xuICAgICAgICBmb3JtYXQgPSBwb3M7XG4gICAgICAgIGNvbnN0IGJhc2VFbmNvZGluZyA9IHBvcyA/IF9lbmNvZGluZ3MuRXhwZXJ0RW5jb2RpbmcgOiBfZW5jb2RpbmdzLlN0YW5kYXJkRW5jb2Rpbmc7XG5cbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSBjaGFyc2V0Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGJhc2VFbmNvZGluZy5pbmRleE9mKGNoYXJzZXRbaV0pO1xuXG4gICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgZW5jb2RpbmdbaW5kZXhdID0gaTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRhdGFTdGFydCA9IHBvcztcbiAgICAgICAgZm9ybWF0ID0gYnl0ZXNbcG9zKytdO1xuXG4gICAgICAgIHN3aXRjaCAoZm9ybWF0ICYgMHg3Zikge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGNvbnN0IGdseXBoc0NvdW50ID0gYnl0ZXNbcG9zKytdO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IGdseXBoc0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgZW5jb2RpbmdbYnl0ZXNbcG9zKytdXSA9IGk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgY29uc3QgcmFuZ2VzQ291bnQgPSBieXRlc1twb3MrK107XG4gICAgICAgICAgICBsZXQgZ2lkID0gMTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJhbmdlc0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBieXRlc1twb3MrK107XG4gICAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBieXRlc1twb3MrK107XG5cbiAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IHN0YXJ0OyBqIDw9IHN0YXJ0ICsgbGVmdDsgaisrKSB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmdbal0gPSBnaWQrKztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFVua25vd24gZW5jb2RpbmcgZm9ybWF0OiAke2Zvcm1hdH0gaW4gQ0ZGYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhRW5kID0gcG9zO1xuXG4gICAgICAgIGlmIChmb3JtYXQgJiAweDgwKSB7XG4gICAgICAgICAgYnl0ZXNbZGF0YVN0YXJ0XSAmPSAweDdmO1xuICAgICAgICAgIHJlYWRTdXBwbGVtZW50KCk7XG4gICAgICAgIH1cblxuICAgICAgICByYXcgPSBieXRlcy5zdWJhcnJheShkYXRhU3RhcnQsIGRhdGFFbmQpO1xuICAgICAgfVxuXG4gICAgICBmb3JtYXQgJj0gMHg3ZjtcbiAgICAgIHJldHVybiBuZXcgQ0ZGRW5jb2RpbmcocHJlZGVmaW5lZCwgZm9ybWF0LCBlbmNvZGluZywgcmF3KTtcbiAgICB9XG5cbiAgICBwYXJzZUZEU2VsZWN0KHBvcywgbGVuZ3RoKSB7XG4gICAgICBjb25zdCBieXRlcyA9IHRoaXMuYnl0ZXM7XG4gICAgICBjb25zdCBmb3JtYXQgPSBieXRlc1twb3MrK107XG4gICAgICBjb25zdCBmZFNlbGVjdCA9IFtdO1xuICAgICAgbGV0IGk7XG5cbiAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gYnl0ZXNbcG9zKytdO1xuICAgICAgICAgICAgZmRTZWxlY3QucHVzaChpZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGNvbnN0IHJhbmdlc0NvdW50ID0gYnl0ZXNbcG9zKytdIDw8IDggfCBieXRlc1twb3MrK107XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmFuZ2VzQ291bnQ7ICsraSkge1xuICAgICAgICAgICAgbGV0IGZpcnN0ID0gYnl0ZXNbcG9zKytdIDw8IDggfCBieXRlc1twb3MrK107XG5cbiAgICAgICAgICAgIGlmIChpID09PSAwICYmIGZpcnN0ICE9PSAwKSB7XG4gICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcInBhcnNlRkRTZWxlY3Q6IFRoZSBmaXJzdCByYW5nZSBtdXN0IGhhdmUgYSBmaXJzdCBHSUQgb2YgMFwiICsgXCIgLS0gdHJ5aW5nIHRvIHJlY292ZXIuXCIpO1xuICAgICAgICAgICAgICBmaXJzdCA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZkSW5kZXggPSBieXRlc1twb3MrK107XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gYnl0ZXNbcG9zXSA8PCA4IHwgYnl0ZXNbcG9zICsgMV07XG5cbiAgICAgICAgICAgIGZvciAobGV0IGogPSBmaXJzdDsgaiA8IG5leHQ7ICsraikge1xuICAgICAgICAgICAgICBmZFNlbGVjdC5wdXNoKGZkSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHBvcyArPSAyO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBwYXJzZUZEU2VsZWN0OiBVbmtub3duIGZvcm1hdCBcIiR7Zm9ybWF0fVwiLmApO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmRTZWxlY3QubGVuZ3RoICE9PSBsZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwicGFyc2VGRFNlbGVjdDogSW52YWxpZCBmb250IGRhdGEuXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENGRkZEU2VsZWN0KGZvcm1hdCwgZmRTZWxlY3QpO1xuICAgIH1cblxuICB9XG5cbiAgcmV0dXJuIENGRlBhcnNlcjtcbn0oKTtcblxuZXhwb3J0cy5DRkZQYXJzZXIgPSBDRkZQYXJzZXI7XG5cbmNsYXNzIENGRiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGVhZGVyID0gbnVsbDtcbiAgICB0aGlzLm5hbWVzID0gW107XG4gICAgdGhpcy50b3BEaWN0ID0gbnVsbDtcbiAgICB0aGlzLnN0cmluZ3MgPSBuZXcgQ0ZGU3RyaW5ncygpO1xuICAgIHRoaXMuZ2xvYmFsU3VickluZGV4ID0gbnVsbDtcbiAgICB0aGlzLmVuY29kaW5nID0gbnVsbDtcbiAgICB0aGlzLmNoYXJzZXQgPSBudWxsO1xuICAgIHRoaXMuY2hhclN0cmluZ3MgPSBudWxsO1xuICAgIHRoaXMuZmRBcnJheSA9IFtdO1xuICAgIHRoaXMuZmRTZWxlY3QgPSBudWxsO1xuICAgIHRoaXMuaXNDSURGb250ID0gZmFsc2U7XG4gIH1cblxuICBkdXBsaWNhdGVGaXJzdEdseXBoKCkge1xuICAgIGlmICh0aGlzLmNoYXJTdHJpbmdzLmNvdW50ID49IDY1NTM1KSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJOb3QgZW5vdWdoIHNwYWNlIGluIGNoYXJzdHJpbmdzIHRvIGR1cGxpY2F0ZSBmaXJzdCBnbHlwaC5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZ2x5cGhaZXJvID0gdGhpcy5jaGFyU3RyaW5ncy5nZXQoMCk7XG4gICAgdGhpcy5jaGFyU3RyaW5ncy5hZGQoZ2x5cGhaZXJvKTtcblxuICAgIGlmICh0aGlzLmlzQ0lERm9udCkge1xuICAgICAgdGhpcy5mZFNlbGVjdC5mZFNlbGVjdC5wdXNoKHRoaXMuZmRTZWxlY3QuZmRTZWxlY3RbMF0pO1xuICAgIH1cbiAgfVxuXG4gIGhhc0dseXBoSWQoaWQpIHtcbiAgICBpZiAoaWQgPCAwIHx8IGlkID49IHRoaXMuY2hhclN0cmluZ3MuY291bnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBnbHlwaCA9IHRoaXMuY2hhclN0cmluZ3MuZ2V0KGlkKTtcbiAgICByZXR1cm4gZ2x5cGgubGVuZ3RoID4gMDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQ0ZGID0gQ0ZGO1xuXG5jbGFzcyBDRkZIZWFkZXIge1xuICBjb25zdHJ1Y3RvcihtYWpvciwgbWlub3IsIGhkclNpemUsIG9mZlNpemUpIHtcbiAgICB0aGlzLm1ham9yID0gbWFqb3I7XG4gICAgdGhpcy5taW5vciA9IG1pbm9yO1xuICAgIHRoaXMuaGRyU2l6ZSA9IGhkclNpemU7XG4gICAgdGhpcy5vZmZTaXplID0gb2ZmU2l6ZTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQ0ZGSGVhZGVyID0gQ0ZGSGVhZGVyO1xuXG5jbGFzcyBDRkZTdHJpbmdzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zdHJpbmdzID0gW107XG4gIH1cblxuICBnZXQoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8PSBOVU1fU1RBTkRBUkRfQ0ZGX1NUUklOR1MgLSAxKSB7XG4gICAgICByZXR1cm4gQ0ZGU3RhbmRhcmRTdHJpbmdzW2luZGV4XTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggLSBOVU1fU1RBTkRBUkRfQ0ZGX1NUUklOR1MgPD0gdGhpcy5zdHJpbmdzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nc1tpbmRleCAtIE5VTV9TVEFOREFSRF9DRkZfU1RSSU5HU107XG4gICAgfVxuXG4gICAgcmV0dXJuIENGRlN0YW5kYXJkU3RyaW5nc1swXTtcbiAgfVxuXG4gIGdldFNJRChzdHIpIHtcbiAgICBsZXQgaW5kZXggPSBDRkZTdGFuZGFyZFN0cmluZ3MuaW5kZXhPZihzdHIpO1xuXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIGluZGV4ID0gdGhpcy5zdHJpbmdzLmluZGV4T2Yoc3RyKTtcblxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBpbmRleCArIE5VTV9TVEFOREFSRF9DRkZfU1RSSU5HUztcbiAgICB9XG5cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBhZGQodmFsdWUpIHtcbiAgICB0aGlzLnN0cmluZ3MucHVzaCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgY291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5ncy5sZW5ndGg7XG4gIH1cblxufVxuXG5leHBvcnRzLkNGRlN0cmluZ3MgPSBDRkZTdHJpbmdzO1xuXG5jbGFzcyBDRkZJbmRleCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMub2JqZWN0cyA9IFtdO1xuICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgfVxuXG4gIGFkZChkYXRhKSB7XG4gICAgdGhpcy5sZW5ndGggKz0gZGF0YS5sZW5ndGg7XG4gICAgdGhpcy5vYmplY3RzLnB1c2goZGF0YSk7XG4gIH1cblxuICBzZXQoaW5kZXgsIGRhdGEpIHtcbiAgICB0aGlzLmxlbmd0aCArPSBkYXRhLmxlbmd0aCAtIHRoaXMub2JqZWN0c1tpbmRleF0ubGVuZ3RoO1xuICAgIHRoaXMub2JqZWN0c1tpbmRleF0gPSBkYXRhO1xuICB9XG5cbiAgZ2V0KGluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMub2JqZWN0c1tpbmRleF07XG4gIH1cblxuICBnZXQgY291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMub2JqZWN0cy5sZW5ndGg7XG4gIH1cblxufVxuXG5leHBvcnRzLkNGRkluZGV4ID0gQ0ZGSW5kZXg7XG5cbmNsYXNzIENGRkRpY3Qge1xuICBjb25zdHJ1Y3Rvcih0YWJsZXMsIHN0cmluZ3MpIHtcbiAgICB0aGlzLmtleVRvTmFtZU1hcCA9IHRhYmxlcy5rZXlUb05hbWVNYXA7XG4gICAgdGhpcy5uYW1lVG9LZXlNYXAgPSB0YWJsZXMubmFtZVRvS2V5TWFwO1xuICAgIHRoaXMuZGVmYXVsdHMgPSB0YWJsZXMuZGVmYXVsdHM7XG4gICAgdGhpcy50eXBlcyA9IHRhYmxlcy50eXBlcztcbiAgICB0aGlzLm9wY29kZXMgPSB0YWJsZXMub3Bjb2RlcztcbiAgICB0aGlzLm9yZGVyID0gdGFibGVzLm9yZGVyO1xuICAgIHRoaXMuc3RyaW5ncyA9IHN0cmluZ3M7XG4gICAgdGhpcy52YWx1ZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgc2V0QnlLZXkoa2V5LCB2YWx1ZSkge1xuICAgIGlmICghKGtleSBpbiB0aGlzLmtleVRvTmFtZU1hcCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZUxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcblxuICAgIGlmICh2YWx1ZUxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZUxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaXNOYU4odmFsdWVbaV0pKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKSgnSW52YWxpZCBDRkZEaWN0IHZhbHVlOiBcIicgKyB2YWx1ZSArICdcIiBmb3Iga2V5IFwiJyArIGtleSArICdcIi4nKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZSA9IHRoaXMudHlwZXNba2V5XTtcblxuICAgIGlmICh0eXBlID09PSBcIm51bVwiIHx8IHR5cGUgPT09IFwic2lkXCIgfHwgdHlwZSA9PT0gXCJvZmZzZXRcIikge1xuICAgICAgdmFsdWUgPSB2YWx1ZVswXTtcbiAgICB9XG5cbiAgICB0aGlzLnZhbHVlc1trZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzZXRCeU5hbWUobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAoIShuYW1lIGluIHRoaXMubmFtZVRvS2V5TWFwKSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIGRpY3Rpb25hcnkgbmFtZSBcIiR7bmFtZX1cImApO1xuICAgIH1cblxuICAgIHRoaXMudmFsdWVzW3RoaXMubmFtZVRvS2V5TWFwW25hbWVdXSA9IHZhbHVlO1xuICB9XG5cbiAgaGFzTmFtZShuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZVRvS2V5TWFwW25hbWVdIGluIHRoaXMudmFsdWVzO1xuICB9XG5cbiAgZ2V0QnlOYW1lKG5hbWUpIHtcbiAgICBpZiAoIShuYW1lIGluIHRoaXMubmFtZVRvS2V5TWFwKSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIGRpY3Rpb25hcnkgbmFtZSAke25hbWV9XCJgKTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSB0aGlzLm5hbWVUb0tleU1hcFtuYW1lXTtcblxuICAgIGlmICghKGtleSBpbiB0aGlzLnZhbHVlcykpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRzW2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudmFsdWVzW2tleV07XG4gIH1cblxuICByZW1vdmVCeU5hbWUobmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLnZhbHVlc1t0aGlzLm5hbWVUb0tleU1hcFtuYW1lXV07XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlVGFibGVzKGxheW91dCkge1xuICAgIGNvbnN0IHRhYmxlcyA9IHtcbiAgICAgIGtleVRvTmFtZU1hcDoge30sXG4gICAgICBuYW1lVG9LZXlNYXA6IHt9LFxuICAgICAgZGVmYXVsdHM6IHt9LFxuICAgICAgdHlwZXM6IHt9LFxuICAgICAgb3Bjb2Rlczoge30sXG4gICAgICBvcmRlcjogW11cbiAgICB9O1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gbGF5b3V0Lmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gbGF5b3V0W2ldO1xuICAgICAgY29uc3Qga2V5ID0gQXJyYXkuaXNBcnJheShlbnRyeVswXSkgPyAoZW50cnlbMF1bMF0gPDwgOCkgKyBlbnRyeVswXVsxXSA6IGVudHJ5WzBdO1xuICAgICAgdGFibGVzLmtleVRvTmFtZU1hcFtrZXldID0gZW50cnlbMV07XG4gICAgICB0YWJsZXMubmFtZVRvS2V5TWFwW2VudHJ5WzFdXSA9IGtleTtcbiAgICAgIHRhYmxlcy50eXBlc1trZXldID0gZW50cnlbMl07XG4gICAgICB0YWJsZXMuZGVmYXVsdHNba2V5XSA9IGVudHJ5WzNdO1xuICAgICAgdGFibGVzLm9wY29kZXNba2V5XSA9IEFycmF5LmlzQXJyYXkoZW50cnlbMF0pID8gZW50cnlbMF0gOiBbZW50cnlbMF1dO1xuICAgICAgdGFibGVzLm9yZGVyLnB1c2goa2V5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFibGVzO1xuICB9XG5cbn1cblxuY29uc3QgQ0ZGVG9wRGljdCA9IGZ1bmN0aW9uIENGRlRvcERpY3RDbG9zdXJlKCkge1xuICBjb25zdCBsYXlvdXQgPSBbW1sxMiwgMzBdLCBcIlJPU1wiLCBbXCJzaWRcIiwgXCJzaWRcIiwgXCJudW1cIl0sIG51bGxdLCBbWzEyLCAyMF0sIFwiU3ludGhldGljQmFzZVwiLCBcIm51bVwiLCBudWxsXSwgWzAsIFwidmVyc2lvblwiLCBcInNpZFwiLCBudWxsXSwgWzEsIFwiTm90aWNlXCIsIFwic2lkXCIsIG51bGxdLCBbWzEyLCAwXSwgXCJDb3B5cmlnaHRcIiwgXCJzaWRcIiwgbnVsbF0sIFsyLCBcIkZ1bGxOYW1lXCIsIFwic2lkXCIsIG51bGxdLCBbMywgXCJGYW1pbHlOYW1lXCIsIFwic2lkXCIsIG51bGxdLCBbNCwgXCJXZWlnaHRcIiwgXCJzaWRcIiwgbnVsbF0sIFtbMTIsIDFdLCBcImlzRml4ZWRQaXRjaFwiLCBcIm51bVwiLCAwXSwgW1sxMiwgMl0sIFwiSXRhbGljQW5nbGVcIiwgXCJudW1cIiwgMF0sIFtbMTIsIDNdLCBcIlVuZGVybGluZVBvc2l0aW9uXCIsIFwibnVtXCIsIC0xMDBdLCBbWzEyLCA0XSwgXCJVbmRlcmxpbmVUaGlja25lc3NcIiwgXCJudW1cIiwgNTBdLCBbWzEyLCA1XSwgXCJQYWludFR5cGVcIiwgXCJudW1cIiwgMF0sIFtbMTIsIDZdLCBcIkNoYXJzdHJpbmdUeXBlXCIsIFwibnVtXCIsIDJdLCBbWzEyLCA3XSwgXCJGb250TWF0cml4XCIsIFtcIm51bVwiLCBcIm51bVwiLCBcIm51bVwiLCBcIm51bVwiLCBcIm51bVwiLCBcIm51bVwiXSwgWzAuMDAxLCAwLCAwLCAwLjAwMSwgMCwgMF1dLCBbMTMsIFwiVW5pcXVlSURcIiwgXCJudW1cIiwgbnVsbF0sIFs1LCBcIkZvbnRCQm94XCIsIFtcIm51bVwiLCBcIm51bVwiLCBcIm51bVwiLCBcIm51bVwiXSwgWzAsIDAsIDAsIDBdXSwgW1sxMiwgOF0sIFwiU3Ryb2tlV2lkdGhcIiwgXCJudW1cIiwgMF0sIFsxNCwgXCJYVUlEXCIsIFwiYXJyYXlcIiwgbnVsbF0sIFsxNSwgXCJjaGFyc2V0XCIsIFwib2Zmc2V0XCIsIDBdLCBbMTYsIFwiRW5jb2RpbmdcIiwgXCJvZmZzZXRcIiwgMF0sIFsxNywgXCJDaGFyU3RyaW5nc1wiLCBcIm9mZnNldFwiLCAwXSwgWzE4LCBcIlByaXZhdGVcIiwgW1wib2Zmc2V0XCIsIFwib2Zmc2V0XCJdLCBudWxsXSwgW1sxMiwgMjFdLCBcIlBvc3RTY3JpcHRcIiwgXCJzaWRcIiwgbnVsbF0sIFtbMTIsIDIyXSwgXCJCYXNlRm9udE5hbWVcIiwgXCJzaWRcIiwgbnVsbF0sIFtbMTIsIDIzXSwgXCJCYXNlRm9udEJsZW5kXCIsIFwiZGVsdGFcIiwgbnVsbF0sIFtbMTIsIDMxXSwgXCJDSURGb250VmVyc2lvblwiLCBcIm51bVwiLCAwXSwgW1sxMiwgMzJdLCBcIkNJREZvbnRSZXZpc2lvblwiLCBcIm51bVwiLCAwXSwgW1sxMiwgMzNdLCBcIkNJREZvbnRUeXBlXCIsIFwibnVtXCIsIDBdLCBbWzEyLCAzNF0sIFwiQ0lEQ291bnRcIiwgXCJudW1cIiwgODcyMF0sIFtbMTIsIDM1XSwgXCJVSURCYXNlXCIsIFwibnVtXCIsIG51bGxdLCBbWzEyLCAzN10sIFwiRkRTZWxlY3RcIiwgXCJvZmZzZXRcIiwgbnVsbF0sIFtbMTIsIDM2XSwgXCJGREFycmF5XCIsIFwib2Zmc2V0XCIsIG51bGxdLCBbWzEyLCAzOF0sIFwiRm9udE5hbWVcIiwgXCJzaWRcIiwgbnVsbF1dO1xuICBsZXQgdGFibGVzID0gbnVsbDtcblxuICBjbGFzcyBDRkZUb3BEaWN0IGV4dGVuZHMgQ0ZGRGljdCB7XG4gICAgY29uc3RydWN0b3Ioc3RyaW5ncykge1xuICAgICAgaWYgKHRhYmxlcyA9PT0gbnVsbCkge1xuICAgICAgICB0YWJsZXMgPSBDRkZEaWN0LmNyZWF0ZVRhYmxlcyhsYXlvdXQpO1xuICAgICAgfVxuXG4gICAgICBzdXBlcih0YWJsZXMsIHN0cmluZ3MpO1xuICAgICAgdGhpcy5wcml2YXRlRGljdCA9IG51bGw7XG4gICAgfVxuXG4gIH1cblxuICByZXR1cm4gQ0ZGVG9wRGljdDtcbn0oKTtcblxuZXhwb3J0cy5DRkZUb3BEaWN0ID0gQ0ZGVG9wRGljdDtcblxuY29uc3QgQ0ZGUHJpdmF0ZURpY3QgPSBmdW5jdGlvbiBDRkZQcml2YXRlRGljdENsb3N1cmUoKSB7XG4gIGNvbnN0IGxheW91dCA9IFtbNiwgXCJCbHVlVmFsdWVzXCIsIFwiZGVsdGFcIiwgbnVsbF0sIFs3LCBcIk90aGVyQmx1ZXNcIiwgXCJkZWx0YVwiLCBudWxsXSwgWzgsIFwiRmFtaWx5Qmx1ZXNcIiwgXCJkZWx0YVwiLCBudWxsXSwgWzksIFwiRmFtaWx5T3RoZXJCbHVlc1wiLCBcImRlbHRhXCIsIG51bGxdLCBbWzEyLCA5XSwgXCJCbHVlU2NhbGVcIiwgXCJudW1cIiwgMC4wMzk2MjVdLCBbWzEyLCAxMF0sIFwiQmx1ZVNoaWZ0XCIsIFwibnVtXCIsIDddLCBbWzEyLCAxMV0sIFwiQmx1ZUZ1enpcIiwgXCJudW1cIiwgMV0sIFsxMCwgXCJTdGRIV1wiLCBcIm51bVwiLCBudWxsXSwgWzExLCBcIlN0ZFZXXCIsIFwibnVtXCIsIG51bGxdLCBbWzEyLCAxMl0sIFwiU3RlbVNuYXBIXCIsIFwiZGVsdGFcIiwgbnVsbF0sIFtbMTIsIDEzXSwgXCJTdGVtU25hcFZcIiwgXCJkZWx0YVwiLCBudWxsXSwgW1sxMiwgMTRdLCBcIkZvcmNlQm9sZFwiLCBcIm51bVwiLCAwXSwgW1sxMiwgMTddLCBcIkxhbmd1YWdlR3JvdXBcIiwgXCJudW1cIiwgMF0sIFtbMTIsIDE4XSwgXCJFeHBhbnNpb25GYWN0b3JcIiwgXCJudW1cIiwgMC4wNl0sIFtbMTIsIDE5XSwgXCJpbml0aWFsUmFuZG9tU2VlZFwiLCBcIm51bVwiLCAwXSwgWzIwLCBcImRlZmF1bHRXaWR0aFhcIiwgXCJudW1cIiwgMF0sIFsyMSwgXCJub21pbmFsV2lkdGhYXCIsIFwibnVtXCIsIDBdLCBbMTksIFwiU3VicnNcIiwgXCJvZmZzZXRcIiwgbnVsbF1dO1xuICBsZXQgdGFibGVzID0gbnVsbDtcblxuICBjbGFzcyBDRkZQcml2YXRlRGljdCBleHRlbmRzIENGRkRpY3Qge1xuICAgIGNvbnN0cnVjdG9yKHN0cmluZ3MpIHtcbiAgICAgIGlmICh0YWJsZXMgPT09IG51bGwpIHtcbiAgICAgICAgdGFibGVzID0gQ0ZGRGljdC5jcmVhdGVUYWJsZXMobGF5b3V0KTtcbiAgICAgIH1cblxuICAgICAgc3VwZXIodGFibGVzLCBzdHJpbmdzKTtcbiAgICAgIHRoaXMuc3VicnNJbmRleCA9IG51bGw7XG4gICAgfVxuXG4gIH1cblxuICByZXR1cm4gQ0ZGUHJpdmF0ZURpY3Q7XG59KCk7XG5cbmV4cG9ydHMuQ0ZGUHJpdmF0ZURpY3QgPSBDRkZQcml2YXRlRGljdDtcbmNvbnN0IENGRkNoYXJzZXRQcmVkZWZpbmVkVHlwZXMgPSB7XG4gIElTT19BRE9CRTogMCxcbiAgRVhQRVJUOiAxLFxuICBFWFBFUlRfU1VCU0VUOiAyXG59O1xuXG5jbGFzcyBDRkZDaGFyc2V0IHtcbiAgY29uc3RydWN0b3IocHJlZGVmaW5lZCwgZm9ybWF0LCBjaGFyc2V0LCByYXcpIHtcbiAgICB0aGlzLnByZWRlZmluZWQgPSBwcmVkZWZpbmVkO1xuICAgIHRoaXMuZm9ybWF0ID0gZm9ybWF0O1xuICAgIHRoaXMuY2hhcnNldCA9IGNoYXJzZXQ7XG4gICAgdGhpcy5yYXcgPSByYXc7XG4gIH1cblxufVxuXG5leHBvcnRzLkNGRkNoYXJzZXQgPSBDRkZDaGFyc2V0O1xuXG5jbGFzcyBDRkZFbmNvZGluZyB7XG4gIGNvbnN0cnVjdG9yKHByZWRlZmluZWQsIGZvcm1hdCwgZW5jb2RpbmcsIHJhdykge1xuICAgIHRoaXMucHJlZGVmaW5lZCA9IHByZWRlZmluZWQ7XG4gICAgdGhpcy5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgdGhpcy5lbmNvZGluZyA9IGVuY29kaW5nO1xuICAgIHRoaXMucmF3ID0gcmF3O1xuICB9XG5cbn1cblxuY2xhc3MgQ0ZGRkRTZWxlY3Qge1xuICBjb25zdHJ1Y3Rvcihmb3JtYXQsIGZkU2VsZWN0KSB7XG4gICAgdGhpcy5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgdGhpcy5mZFNlbGVjdCA9IGZkU2VsZWN0O1xuICB9XG5cbiAgZ2V0RkRJbmRleChnbHlwaEluZGV4KSB7XG4gICAgaWYgKGdseXBoSW5kZXggPCAwIHx8IGdseXBoSW5kZXggPj0gdGhpcy5mZFNlbGVjdC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mZFNlbGVjdFtnbHlwaEluZGV4XTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQ0ZGRkRTZWxlY3QgPSBDRkZGRFNlbGVjdDtcblxuY2xhc3MgQ0ZGT2Zmc2V0VHJhY2tlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMub2Zmc2V0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH1cblxuICBpc1RyYWNraW5nKGtleSkge1xuICAgIHJldHVybiBrZXkgaW4gdGhpcy5vZmZzZXRzO1xuICB9XG5cbiAgdHJhY2soa2V5LCBsb2NhdGlvbikge1xuICAgIGlmIChrZXkgaW4gdGhpcy5vZmZzZXRzKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEFscmVhZHkgdHJhY2tpbmcgbG9jYXRpb24gb2YgJHtrZXl9YCk7XG4gICAgfVxuXG4gICAgdGhpcy5vZmZzZXRzW2tleV0gPSBsb2NhdGlvbjtcbiAgfVxuXG4gIG9mZnNldCh2YWx1ZSkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMub2Zmc2V0cykge1xuICAgICAgdGhpcy5vZmZzZXRzW2tleV0gKz0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgc2V0RW50cnlMb2NhdGlvbihrZXksIHZhbHVlcywgb3V0cHV0KSB7XG4gICAgaWYgKCEoa2V5IGluIHRoaXMub2Zmc2V0cykpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgTm90IHRyYWNraW5nIGxvY2F0aW9uIG9mICR7a2V5fWApO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSBvdXRwdXQuZGF0YTtcbiAgICBjb25zdCBkYXRhT2Zmc2V0ID0gdGhpcy5vZmZzZXRzW2tleV07XG4gICAgY29uc3Qgc2l6ZSA9IDU7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSB2YWx1ZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgY29uc3Qgb2Zmc2V0MCA9IGkgKiBzaXplICsgZGF0YU9mZnNldDtcbiAgICAgIGNvbnN0IG9mZnNldDEgPSBvZmZzZXQwICsgMTtcbiAgICAgIGNvbnN0IG9mZnNldDIgPSBvZmZzZXQwICsgMjtcbiAgICAgIGNvbnN0IG9mZnNldDMgPSBvZmZzZXQwICsgMztcbiAgICAgIGNvbnN0IG9mZnNldDQgPSBvZmZzZXQwICsgNDtcblxuICAgICAgaWYgKGRhdGFbb2Zmc2V0MF0gIT09IDB4MWQgfHwgZGF0YVtvZmZzZXQxXSAhPT0gMCB8fCBkYXRhW29mZnNldDJdICE9PSAwIHx8IGRhdGFbb2Zmc2V0M10gIT09IDAgfHwgZGF0YVtvZmZzZXQ0XSAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJ3cml0aW5nIHRvIGFuIG9mZnNldCB0aGF0IGlzIG5vdCBlbXB0eVwiKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgICBkYXRhW29mZnNldDBdID0gMHgxZDtcbiAgICAgIGRhdGFbb2Zmc2V0MV0gPSB2YWx1ZSA+PiAyNCAmIDB4ZmY7XG4gICAgICBkYXRhW29mZnNldDJdID0gdmFsdWUgPj4gMTYgJiAweGZmO1xuICAgICAgZGF0YVtvZmZzZXQzXSA9IHZhbHVlID4+IDggJiAweGZmO1xuICAgICAgZGF0YVtvZmZzZXQ0XSA9IHZhbHVlICYgMHhmZjtcbiAgICB9XG4gIH1cblxufVxuXG5jbGFzcyBDRkZDb21waWxlciB7XG4gIGNvbnN0cnVjdG9yKGNmZikge1xuICAgIHRoaXMuY2ZmID0gY2ZmO1xuICB9XG5cbiAgY29tcGlsZSgpIHtcbiAgICBjb25zdCBjZmYgPSB0aGlzLmNmZjtcbiAgICBjb25zdCBvdXRwdXQgPSB7XG4gICAgICBkYXRhOiBbXSxcbiAgICAgIGxlbmd0aDogMCxcbiAgICAgIGFkZDogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfYWRkKGRhdGEpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLmNvbmNhdChkYXRhKTtcbiAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLmRhdGEubGVuZ3RoO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaGVhZGVyID0gdGhpcy5jb21waWxlSGVhZGVyKGNmZi5oZWFkZXIpO1xuICAgIG91dHB1dC5hZGQoaGVhZGVyKTtcbiAgICBjb25zdCBuYW1lSW5kZXggPSB0aGlzLmNvbXBpbGVOYW1lSW5kZXgoY2ZmLm5hbWVzKTtcbiAgICBvdXRwdXQuYWRkKG5hbWVJbmRleCk7XG5cbiAgICBpZiAoY2ZmLmlzQ0lERm9udCkge1xuICAgICAgaWYgKGNmZi50b3BEaWN0Lmhhc05hbWUoXCJGb250TWF0cml4XCIpKSB7XG4gICAgICAgIGNvbnN0IGJhc2UgPSBjZmYudG9wRGljdC5nZXRCeU5hbWUoXCJGb250TWF0cml4XCIpO1xuICAgICAgICBjZmYudG9wRGljdC5yZW1vdmVCeU5hbWUoXCJGb250TWF0cml4XCIpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGNmZi5mZEFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBzdWJEaWN0ID0gY2ZmLmZkQXJyYXlbaV07XG4gICAgICAgICAgbGV0IG1hdHJpeCA9IGJhc2Uuc2xpY2UoMCk7XG5cbiAgICAgICAgICBpZiAoc3ViRGljdC5oYXNOYW1lKFwiRm9udE1hdHJpeFwiKSkge1xuICAgICAgICAgICAgbWF0cml4ID0gX3V0aWwuVXRpbC50cmFuc2Zvcm0obWF0cml4LCBzdWJEaWN0LmdldEJ5TmFtZShcIkZvbnRNYXRyaXhcIikpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN1YkRpY3Quc2V0QnlOYW1lKFwiRm9udE1hdHJpeFwiLCBtYXRyaXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeHVpZCA9IGNmZi50b3BEaWN0LmdldEJ5TmFtZShcIlhVSURcIik7XG5cbiAgICBpZiAoeHVpZCAmJiB4dWlkLmxlbmd0aCA+IDE2KSB7XG4gICAgICBjZmYudG9wRGljdC5yZW1vdmVCeU5hbWUoXCJYVUlEXCIpO1xuICAgIH1cblxuICAgIGNmZi50b3BEaWN0LnNldEJ5TmFtZShcImNoYXJzZXRcIiwgMCk7XG4gICAgbGV0IGNvbXBpbGVkID0gdGhpcy5jb21waWxlVG9wRGljdHMoW2NmZi50b3BEaWN0XSwgb3V0cHV0Lmxlbmd0aCwgY2ZmLmlzQ0lERm9udCk7XG4gICAgb3V0cHV0LmFkZChjb21waWxlZC5vdXRwdXQpO1xuICAgIGNvbnN0IHRvcERpY3RUcmFja2VyID0gY29tcGlsZWQudHJhY2tlcnNbMF07XG4gICAgY29uc3Qgc3RyaW5nSW5kZXggPSB0aGlzLmNvbXBpbGVTdHJpbmdJbmRleChjZmYuc3RyaW5ncy5zdHJpbmdzKTtcbiAgICBvdXRwdXQuYWRkKHN0cmluZ0luZGV4KTtcbiAgICBjb25zdCBnbG9iYWxTdWJySW5kZXggPSB0aGlzLmNvbXBpbGVJbmRleChjZmYuZ2xvYmFsU3VickluZGV4KTtcbiAgICBvdXRwdXQuYWRkKGdsb2JhbFN1YnJJbmRleCk7XG5cbiAgICBpZiAoY2ZmLmVuY29kaW5nICYmIGNmZi50b3BEaWN0Lmhhc05hbWUoXCJFbmNvZGluZ1wiKSkge1xuICAgICAgaWYgKGNmZi5lbmNvZGluZy5wcmVkZWZpbmVkKSB7XG4gICAgICAgIHRvcERpY3RUcmFja2VyLnNldEVudHJ5TG9jYXRpb24oXCJFbmNvZGluZ1wiLCBbY2ZmLmVuY29kaW5nLmZvcm1hdF0sIG91dHB1dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlbmNvZGluZyA9IHRoaXMuY29tcGlsZUVuY29kaW5nKGNmZi5lbmNvZGluZyk7XG4gICAgICAgIHRvcERpY3RUcmFja2VyLnNldEVudHJ5TG9jYXRpb24oXCJFbmNvZGluZ1wiLCBbb3V0cHV0Lmxlbmd0aF0sIG91dHB1dCk7XG4gICAgICAgIG91dHB1dC5hZGQoZW5jb2RpbmcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNoYXJzZXQgPSB0aGlzLmNvbXBpbGVDaGFyc2V0KGNmZi5jaGFyc2V0LCBjZmYuY2hhclN0cmluZ3MuY291bnQsIGNmZi5zdHJpbmdzLCBjZmYuaXNDSURGb250KTtcbiAgICB0b3BEaWN0VHJhY2tlci5zZXRFbnRyeUxvY2F0aW9uKFwiY2hhcnNldFwiLCBbb3V0cHV0Lmxlbmd0aF0sIG91dHB1dCk7XG4gICAgb3V0cHV0LmFkZChjaGFyc2V0KTtcbiAgICBjb25zdCBjaGFyU3RyaW5ncyA9IHRoaXMuY29tcGlsZUNoYXJTdHJpbmdzKGNmZi5jaGFyU3RyaW5ncyk7XG4gICAgdG9wRGljdFRyYWNrZXIuc2V0RW50cnlMb2NhdGlvbihcIkNoYXJTdHJpbmdzXCIsIFtvdXRwdXQubGVuZ3RoXSwgb3V0cHV0KTtcbiAgICBvdXRwdXQuYWRkKGNoYXJTdHJpbmdzKTtcblxuICAgIGlmIChjZmYuaXNDSURGb250KSB7XG4gICAgICB0b3BEaWN0VHJhY2tlci5zZXRFbnRyeUxvY2F0aW9uKFwiRkRTZWxlY3RcIiwgW291dHB1dC5sZW5ndGhdLCBvdXRwdXQpO1xuICAgICAgY29uc3QgZmRTZWxlY3QgPSB0aGlzLmNvbXBpbGVGRFNlbGVjdChjZmYuZmRTZWxlY3QpO1xuICAgICAgb3V0cHV0LmFkZChmZFNlbGVjdCk7XG4gICAgICBjb21waWxlZCA9IHRoaXMuY29tcGlsZVRvcERpY3RzKGNmZi5mZEFycmF5LCBvdXRwdXQubGVuZ3RoLCB0cnVlKTtcbiAgICAgIHRvcERpY3RUcmFja2VyLnNldEVudHJ5TG9jYXRpb24oXCJGREFycmF5XCIsIFtvdXRwdXQubGVuZ3RoXSwgb3V0cHV0KTtcbiAgICAgIG91dHB1dC5hZGQoY29tcGlsZWQub3V0cHV0KTtcbiAgICAgIGNvbnN0IGZvbnREaWN0VHJhY2tlcnMgPSBjb21waWxlZC50cmFja2VycztcbiAgICAgIHRoaXMuY29tcGlsZVByaXZhdGVEaWN0cyhjZmYuZmRBcnJheSwgZm9udERpY3RUcmFja2Vycywgb3V0cHV0KTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBpbGVQcml2YXRlRGljdHMoW2NmZi50b3BEaWN0XSwgW3RvcERpY3RUcmFja2VyXSwgb3V0cHV0KTtcbiAgICBvdXRwdXQuYWRkKFswXSk7XG4gICAgcmV0dXJuIG91dHB1dC5kYXRhO1xuICB9XG5cbiAgZW5jb2RlTnVtYmVyKHZhbHVlKSB7XG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmNvZGVJbnRlZ2VyKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5lbmNvZGVGbG9hdCh2YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IEVuY29kZUZsb2F0UmVnRXhwKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIkVuY29kZUZsb2F0UmVnRXhwXCIsIC9cXC4oXFxkKj8pKD86OXs1LDIwfXwwezUsMjB9KVxcZHswLDJ9KD86ZSguKyl8JCkvKTtcbiAgfVxuXG4gIGVuY29kZUZsb2F0KG51bSkge1xuICAgIGxldCB2YWx1ZSA9IG51bS50b1N0cmluZygpO1xuICAgIGNvbnN0IG0gPSBDRkZDb21waWxlci5FbmNvZGVGbG9hdFJlZ0V4cC5leGVjKHZhbHVlKTtcblxuICAgIGlmIChtKSB7XG4gICAgICBjb25zdCBlcHNpbG9uID0gcGFyc2VGbG9hdChcIjFlXCIgKyAoKG1bMl0gPyArbVsyXSA6IDApICsgbVsxXS5sZW5ndGgpKTtcbiAgICAgIHZhbHVlID0gKE1hdGgucm91bmQobnVtICogZXBzaWxvbikgLyBlcHNpbG9uKS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCBuaWJibGVzID0gXCJcIjtcbiAgICBsZXQgaSwgaWk7XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IHZhbHVlLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIGNvbnN0IGEgPSB2YWx1ZVtpXTtcblxuICAgICAgaWYgKGEgPT09IFwiZVwiKSB7XG4gICAgICAgIG5pYmJsZXMgKz0gdmFsdWVbKytpXSA9PT0gXCItXCIgPyBcImNcIiA6IFwiYlwiO1xuICAgICAgfSBlbHNlIGlmIChhID09PSBcIi5cIikge1xuICAgICAgICBuaWJibGVzICs9IFwiYVwiO1xuICAgICAgfSBlbHNlIGlmIChhID09PSBcIi1cIikge1xuICAgICAgICBuaWJibGVzICs9IFwiZVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmliYmxlcyArPSBhO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5pYmJsZXMgKz0gbmliYmxlcy5sZW5ndGggJiAxID8gXCJmXCIgOiBcImZmXCI7XG4gICAgY29uc3Qgb3V0ID0gWzMwXTtcblxuICAgIGZvciAoaSA9IDAsIGlpID0gbmliYmxlcy5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7XG4gICAgICBvdXQucHVzaChwYXJzZUludChuaWJibGVzLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGVuY29kZUludGVnZXIodmFsdWUpIHtcbiAgICBsZXQgY29kZTtcblxuICAgIGlmICh2YWx1ZSA+PSAtMTA3ICYmIHZhbHVlIDw9IDEwNykge1xuICAgICAgY29kZSA9IFt2YWx1ZSArIDEzOV07XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAxMDggJiYgdmFsdWUgPD0gMTEzMSkge1xuICAgICAgdmFsdWUgLT0gMTA4O1xuICAgICAgY29kZSA9IFsodmFsdWUgPj4gOCkgKyAyNDcsIHZhbHVlICYgMHhmZl07XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAtMTEzMSAmJiB2YWx1ZSA8PSAtMTA4KSB7XG4gICAgICB2YWx1ZSA9IC12YWx1ZSAtIDEwODtcbiAgICAgIGNvZGUgPSBbKHZhbHVlID4+IDgpICsgMjUxLCB2YWx1ZSAmIDB4ZmZdO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gLTMyNzY4ICYmIHZhbHVlIDw9IDMyNzY3KSB7XG4gICAgICBjb2RlID0gWzB4MWMsIHZhbHVlID4+IDggJiAweGZmLCB2YWx1ZSAmIDB4ZmZdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2RlID0gWzB4MWQsIHZhbHVlID4+IDI0ICYgMHhmZiwgdmFsdWUgPj4gMTYgJiAweGZmLCB2YWx1ZSA+PiA4ICYgMHhmZiwgdmFsdWUgJiAweGZmXTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29kZTtcbiAgfVxuXG4gIGNvbXBpbGVIZWFkZXIoaGVhZGVyKSB7XG4gICAgcmV0dXJuIFtoZWFkZXIubWFqb3IsIGhlYWRlci5taW5vciwgNCwgaGVhZGVyLm9mZlNpemVdO1xuICB9XG5cbiAgY29tcGlsZU5hbWVJbmRleChuYW1lcykge1xuICAgIGNvbnN0IG5hbWVJbmRleCA9IG5ldyBDRkZJbmRleCgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gbmFtZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgY29uc3QgbmFtZSA9IG5hbWVzW2ldO1xuICAgICAgY29uc3QgbGVuZ3RoID0gTWF0aC5taW4obmFtZS5sZW5ndGgsIDEyNyk7XG4gICAgICBsZXQgc2FuaXRpemVkTmFtZSA9IG5ldyBBcnJheShsZW5ndGgpO1xuXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxlbmd0aDsgaisrKSB7XG4gICAgICAgIGxldCBjaGFyID0gbmFtZVtqXTtcblxuICAgICAgICBpZiAoY2hhciA8IFwiIVwiIHx8IGNoYXIgPiBcIn5cIiB8fCBjaGFyID09PSBcIltcIiB8fCBjaGFyID09PSBcIl1cIiB8fCBjaGFyID09PSBcIihcIiB8fCBjaGFyID09PSBcIilcIiB8fCBjaGFyID09PSBcIntcIiB8fCBjaGFyID09PSBcIn1cIiB8fCBjaGFyID09PSBcIjxcIiB8fCBjaGFyID09PSBcIj5cIiB8fCBjaGFyID09PSBcIi9cIiB8fCBjaGFyID09PSBcIiVcIikge1xuICAgICAgICAgIGNoYXIgPSBcIl9cIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNhbml0aXplZE5hbWVbal0gPSBjaGFyO1xuICAgICAgfVxuXG4gICAgICBzYW5pdGl6ZWROYW1lID0gc2FuaXRpemVkTmFtZS5qb2luKFwiXCIpO1xuXG4gICAgICBpZiAoc2FuaXRpemVkTmFtZSA9PT0gXCJcIikge1xuICAgICAgICBzYW5pdGl6ZWROYW1lID0gXCJCYWRfRm9udF9OYW1lXCI7XG4gICAgICB9XG5cbiAgICAgIG5hbWVJbmRleC5hZGQoKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKHNhbml0aXplZE5hbWUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb21waWxlSW5kZXgobmFtZUluZGV4KTtcbiAgfVxuXG4gIGNvbXBpbGVUb3BEaWN0cyhkaWN0cywgbGVuZ3RoLCByZW1vdmVDaWRLZXlzKSB7XG4gICAgY29uc3QgZm9udERpY3RUcmFja2VycyA9IFtdO1xuICAgIGxldCBmZEFycmF5SW5kZXggPSBuZXcgQ0ZGSW5kZXgoKTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGRpY3RzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIGNvbnN0IGZvbnREaWN0ID0gZGljdHNbaV07XG5cbiAgICAgIGlmIChyZW1vdmVDaWRLZXlzKSB7XG4gICAgICAgIGZvbnREaWN0LnJlbW92ZUJ5TmFtZShcIkNJREZvbnRWZXJzaW9uXCIpO1xuICAgICAgICBmb250RGljdC5yZW1vdmVCeU5hbWUoXCJDSURGb250UmV2aXNpb25cIik7XG4gICAgICAgIGZvbnREaWN0LnJlbW92ZUJ5TmFtZShcIkNJREZvbnRUeXBlXCIpO1xuICAgICAgICBmb250RGljdC5yZW1vdmVCeU5hbWUoXCJDSURDb3VudFwiKTtcbiAgICAgICAgZm9udERpY3QucmVtb3ZlQnlOYW1lKFwiVUlEQmFzZVwiKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9udERpY3RUcmFja2VyID0gbmV3IENGRk9mZnNldFRyYWNrZXIoKTtcbiAgICAgIGNvbnN0IGZvbnREaWN0RGF0YSA9IHRoaXMuY29tcGlsZURpY3QoZm9udERpY3QsIGZvbnREaWN0VHJhY2tlcik7XG4gICAgICBmb250RGljdFRyYWNrZXJzLnB1c2goZm9udERpY3RUcmFja2VyKTtcbiAgICAgIGZkQXJyYXlJbmRleC5hZGQoZm9udERpY3REYXRhKTtcbiAgICAgIGZvbnREaWN0VHJhY2tlci5vZmZzZXQobGVuZ3RoKTtcbiAgICB9XG5cbiAgICBmZEFycmF5SW5kZXggPSB0aGlzLmNvbXBpbGVJbmRleChmZEFycmF5SW5kZXgsIGZvbnREaWN0VHJhY2tlcnMpO1xuICAgIHJldHVybiB7XG4gICAgICB0cmFja2VyczogZm9udERpY3RUcmFja2VycyxcbiAgICAgIG91dHB1dDogZmRBcnJheUluZGV4XG4gICAgfTtcbiAgfVxuXG4gIGNvbXBpbGVQcml2YXRlRGljdHMoZGljdHMsIHRyYWNrZXJzLCBvdXRwdXQpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBkaWN0cy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICBjb25zdCBmb250RGljdCA9IGRpY3RzW2ldO1xuICAgICAgY29uc3QgcHJpdmF0ZURpY3QgPSBmb250RGljdC5wcml2YXRlRGljdDtcblxuICAgICAgaWYgKCFwcml2YXRlRGljdCB8fCAhZm9udERpY3QuaGFzTmFtZShcIlByaXZhdGVcIikpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVGhlcmUgbXVzdCBiZSBhIHByaXZhdGUgZGljdGlvbmFyeS5cIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByaXZhdGVEaWN0VHJhY2tlciA9IG5ldyBDRkZPZmZzZXRUcmFja2VyKCk7XG4gICAgICBjb25zdCBwcml2YXRlRGljdERhdGEgPSB0aGlzLmNvbXBpbGVEaWN0KHByaXZhdGVEaWN0LCBwcml2YXRlRGljdFRyYWNrZXIpO1xuICAgICAgbGV0IG91dHB1dExlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG4gICAgICBwcml2YXRlRGljdFRyYWNrZXIub2Zmc2V0KG91dHB1dExlbmd0aCk7XG5cbiAgICAgIGlmICghcHJpdmF0ZURpY3REYXRhLmxlbmd0aCkge1xuICAgICAgICBvdXRwdXRMZW5ndGggPSAwO1xuICAgICAgfVxuXG4gICAgICB0cmFja2Vyc1tpXS5zZXRFbnRyeUxvY2F0aW9uKFwiUHJpdmF0ZVwiLCBbcHJpdmF0ZURpY3REYXRhLmxlbmd0aCwgb3V0cHV0TGVuZ3RoXSwgb3V0cHV0KTtcbiAgICAgIG91dHB1dC5hZGQocHJpdmF0ZURpY3REYXRhKTtcblxuICAgICAgaWYgKHByaXZhdGVEaWN0LnN1YnJzSW5kZXggJiYgcHJpdmF0ZURpY3QuaGFzTmFtZShcIlN1YnJzXCIpKSB7XG4gICAgICAgIGNvbnN0IHN1YnJzID0gdGhpcy5jb21waWxlSW5kZXgocHJpdmF0ZURpY3Quc3VicnNJbmRleCk7XG4gICAgICAgIHByaXZhdGVEaWN0VHJhY2tlci5zZXRFbnRyeUxvY2F0aW9uKFwiU3VicnNcIiwgW3ByaXZhdGVEaWN0RGF0YS5sZW5ndGhdLCBvdXRwdXQpO1xuICAgICAgICBvdXRwdXQuYWRkKHN1YnJzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb21waWxlRGljdChkaWN0LCBvZmZzZXRUcmFja2VyKSB7XG4gICAgbGV0IG91dCA9IFtdO1xuICAgIGNvbnN0IG9yZGVyID0gZGljdC5vcmRlcjtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IGtleSA9IG9yZGVyW2ldO1xuXG4gICAgICBpZiAoIShrZXkgaW4gZGljdC52YWx1ZXMpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgdmFsdWVzID0gZGljdC52YWx1ZXNba2V5XTtcbiAgICAgIGxldCB0eXBlcyA9IGRpY3QudHlwZXNba2V5XTtcblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHR5cGVzKSkge1xuICAgICAgICB0eXBlcyA9IFt0eXBlc107XG4gICAgICB9XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICAgIHZhbHVlcyA9IFt2YWx1ZXNdO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaiA9IDAsIGpqID0gdHlwZXMubGVuZ3RoOyBqIDwgamo7ICsraikge1xuICAgICAgICBjb25zdCB0eXBlID0gdHlwZXNbal07XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2pdO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgXCJudW1cIjpcbiAgICAgICAgICBjYXNlIFwic2lkXCI6XG4gICAgICAgICAgICBvdXQgPSBvdXQuY29uY2F0KHRoaXMuZW5jb2RlTnVtYmVyKHZhbHVlKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJvZmZzZXRcIjpcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBkaWN0LmtleVRvTmFtZU1hcFtrZXldO1xuXG4gICAgICAgICAgICBpZiAoIW9mZnNldFRyYWNrZXIuaXNUcmFja2luZyhuYW1lKSkge1xuICAgICAgICAgICAgICBvZmZzZXRUcmFja2VyLnRyYWNrKG5hbWUsIG91dC5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvdXQgPSBvdXQuY29uY2F0KFsweDFkLCAwLCAwLCAwLCAwXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgIGNhc2UgXCJkZWx0YVwiOlxuICAgICAgICAgICAgb3V0ID0gb3V0LmNvbmNhdCh0aGlzLmVuY29kZU51bWJlcih2YWx1ZSkpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBrID0gMSwga2sgPSB2YWx1ZXMubGVuZ3RoOyBrIDwga2s7ICsraykge1xuICAgICAgICAgICAgICBvdXQgPSBvdXQuY29uY2F0KHRoaXMuZW5jb2RlTnVtYmVyKHZhbHVlc1trXSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFVua25vd24gZGF0YSB0eXBlIG9mICR7dHlwZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBvdXQgPSBvdXQuY29uY2F0KGRpY3Qub3Bjb2Rlc1trZXldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgY29tcGlsZVN0cmluZ0luZGV4KHN0cmluZ3MpIHtcbiAgICBjb25zdCBzdHJpbmdJbmRleCA9IG5ldyBDRkZJbmRleCgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gc3RyaW5ncy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICBzdHJpbmdJbmRleC5hZGQoKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKHN0cmluZ3NbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb21waWxlSW5kZXgoc3RyaW5nSW5kZXgpO1xuICB9XG5cbiAgY29tcGlsZUdsb2JhbFN1YnJJbmRleCgpIHtcbiAgICBjb25zdCBnbG9iYWxTdWJySW5kZXggPSB0aGlzLmNmZi5nbG9iYWxTdWJySW5kZXg7XG4gICAgdGhpcy5vdXQud3JpdGVCeXRlQXJyYXkodGhpcy5jb21waWxlSW5kZXgoZ2xvYmFsU3VickluZGV4KSk7XG4gIH1cblxuICBjb21waWxlQ2hhclN0cmluZ3MoY2hhclN0cmluZ3MpIHtcbiAgICBjb25zdCBjaGFyU3RyaW5nc0luZGV4ID0gbmV3IENGRkluZGV4KCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYXJTdHJpbmdzLmNvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IGdseXBoID0gY2hhclN0cmluZ3MuZ2V0KGkpO1xuXG4gICAgICBpZiAoZ2x5cGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNoYXJTdHJpbmdzSW5kZXguYWRkKG5ldyBVaW50OEFycmF5KFsweDhiLCAweDBlXSkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY2hhclN0cmluZ3NJbmRleC5hZGQoZ2x5cGgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbXBpbGVJbmRleChjaGFyU3RyaW5nc0luZGV4KTtcbiAgfVxuXG4gIGNvbXBpbGVDaGFyc2V0KGNoYXJzZXQsIG51bUdseXBocywgc3RyaW5ncywgaXNDSURGb250KSB7XG4gICAgbGV0IG91dDtcbiAgICBjb25zdCBudW1HbHlwaHNMZXNzTm90RGVmID0gbnVtR2x5cGhzIC0gMTtcblxuICAgIGlmIChpc0NJREZvbnQpIHtcbiAgICAgIG91dCA9IG5ldyBVaW50OEFycmF5KFsyLCAwLCAwLCBudW1HbHlwaHNMZXNzTm90RGVmID4+IDggJiAweGZmLCBudW1HbHlwaHNMZXNzTm90RGVmICYgMHhmZl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsZW5ndGggPSAxICsgbnVtR2x5cGhzTGVzc05vdERlZiAqIDI7XG4gICAgICBvdXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuICAgICAgb3V0WzBdID0gMDtcbiAgICAgIGxldCBjaGFyc2V0SW5kZXggPSAwO1xuICAgICAgY29uc3QgbnVtQ2hhcnNldHMgPSBjaGFyc2V0LmNoYXJzZXQubGVuZ3RoO1xuICAgICAgbGV0IHdhcm5lZCA9IGZhbHNlO1xuXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG91dC5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBsZXQgc2lkID0gMDtcblxuICAgICAgICBpZiAoY2hhcnNldEluZGV4IDwgbnVtQ2hhcnNldHMpIHtcbiAgICAgICAgICBjb25zdCBuYW1lID0gY2hhcnNldC5jaGFyc2V0W2NoYXJzZXRJbmRleCsrXTtcbiAgICAgICAgICBzaWQgPSBzdHJpbmdzLmdldFNJRChuYW1lKTtcblxuICAgICAgICAgIGlmIChzaWQgPT09IC0xKSB7XG4gICAgICAgICAgICBzaWQgPSAwO1xuXG4gICAgICAgICAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgICAgICAgICB3YXJuZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYENvdWxkbid0IGZpbmQgJHtuYW1lfSBpbiBDRkYgc3RyaW5nc2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG91dFtpXSA9IHNpZCA+PiA4ICYgMHhmZjtcbiAgICAgICAgb3V0W2kgKyAxXSA9IHNpZCAmIDB4ZmY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29tcGlsZVR5cGVkQXJyYXkob3V0KTtcbiAgfVxuXG4gIGNvbXBpbGVFbmNvZGluZyhlbmNvZGluZykge1xuICAgIHJldHVybiB0aGlzLmNvbXBpbGVUeXBlZEFycmF5KGVuY29kaW5nLnJhdyk7XG4gIH1cblxuICBjb21waWxlRkRTZWxlY3QoZmRTZWxlY3QpIHtcbiAgICBjb25zdCBmb3JtYXQgPSBmZFNlbGVjdC5mb3JtYXQ7XG4gICAgbGV0IG91dCwgaTtcblxuICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIG91dCA9IG5ldyBVaW50OEFycmF5KDEgKyBmZFNlbGVjdC5mZFNlbGVjdC5sZW5ndGgpO1xuICAgICAgICBvdXRbMF0gPSBmb3JtYXQ7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGZkU2VsZWN0LmZkU2VsZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgb3V0W2kgKyAxXSA9IGZkU2VsZWN0LmZkU2VsZWN0W2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMzpcbiAgICAgICAgY29uc3Qgc3RhcnQgPSAwO1xuICAgICAgICBsZXQgbGFzdEZEID0gZmRTZWxlY3QuZmRTZWxlY3RbMF07XG4gICAgICAgIGNvbnN0IHJhbmdlcyA9IFtmb3JtYXQsIDAsIDAsIHN0YXJ0ID4+IDggJiAweGZmLCBzdGFydCAmIDB4ZmYsIGxhc3RGRF07XG5cbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGZkU2VsZWN0LmZkU2VsZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudEZEID0gZmRTZWxlY3QuZmRTZWxlY3RbaV07XG5cbiAgICAgICAgICBpZiAoY3VycmVudEZEICE9PSBsYXN0RkQpIHtcbiAgICAgICAgICAgIHJhbmdlcy5wdXNoKGkgPj4gOCAmIDB4ZmYsIGkgJiAweGZmLCBjdXJyZW50RkQpO1xuICAgICAgICAgICAgbGFzdEZEID0gY3VycmVudEZEO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG51bVJhbmdlcyA9IChyYW5nZXMubGVuZ3RoIC0gMykgLyAzO1xuICAgICAgICByYW5nZXNbMV0gPSBudW1SYW5nZXMgPj4gOCAmIDB4ZmY7XG4gICAgICAgIHJhbmdlc1syXSA9IG51bVJhbmdlcyAmIDB4ZmY7XG4gICAgICAgIHJhbmdlcy5wdXNoKGkgPj4gOCAmIDB4ZmYsIGkgJiAweGZmKTtcbiAgICAgICAgb3V0ID0gbmV3IFVpbnQ4QXJyYXkocmFuZ2VzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29tcGlsZVR5cGVkQXJyYXkob3V0KTtcbiAgfVxuXG4gIGNvbXBpbGVUeXBlZEFycmF5KGRhdGEpIHtcbiAgICBjb25zdCBvdXQgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgb3V0W2ldID0gZGF0YVtpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgY29tcGlsZUluZGV4KGluZGV4LCB0cmFja2VycyA9IFtdKSB7XG4gICAgY29uc3Qgb2JqZWN0cyA9IGluZGV4Lm9iamVjdHM7XG4gICAgY29uc3QgY291bnQgPSBvYmplY3RzLmxlbmd0aDtcblxuICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFswLCAwLCAwXTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gW2NvdW50ID4+IDggJiAweGZmLCBjb3VudCAmIDB4ZmZdO1xuICAgIGxldCBsYXN0T2Zmc2V0ID0gMSxcbiAgICAgICAgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgICBsYXN0T2Zmc2V0ICs9IG9iamVjdHNbaV0ubGVuZ3RoO1xuICAgIH1cblxuICAgIGxldCBvZmZzZXRTaXplO1xuXG4gICAgaWYgKGxhc3RPZmZzZXQgPCAweDEwMCkge1xuICAgICAgb2Zmc2V0U2l6ZSA9IDE7XG4gICAgfSBlbHNlIGlmIChsYXN0T2Zmc2V0IDwgMHgxMDAwMCkge1xuICAgICAgb2Zmc2V0U2l6ZSA9IDI7XG4gICAgfSBlbHNlIGlmIChsYXN0T2Zmc2V0IDwgMHgxMDAwMDAwKSB7XG4gICAgICBvZmZzZXRTaXplID0gMztcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0U2l6ZSA9IDQ7XG4gICAgfVxuXG4gICAgZGF0YS5wdXNoKG9mZnNldFNpemUpO1xuICAgIGxldCByZWxhdGl2ZU9mZnNldCA9IDE7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQgKyAxOyBpKyspIHtcbiAgICAgIGlmIChvZmZzZXRTaXplID09PSAxKSB7XG4gICAgICAgIGRhdGEucHVzaChyZWxhdGl2ZU9mZnNldCAmIDB4ZmYpO1xuICAgICAgfSBlbHNlIGlmIChvZmZzZXRTaXplID09PSAyKSB7XG4gICAgICAgIGRhdGEucHVzaChyZWxhdGl2ZU9mZnNldCA+PiA4ICYgMHhmZiwgcmVsYXRpdmVPZmZzZXQgJiAweGZmKTtcbiAgICAgIH0gZWxzZSBpZiAob2Zmc2V0U2l6ZSA9PT0gMykge1xuICAgICAgICBkYXRhLnB1c2gocmVsYXRpdmVPZmZzZXQgPj4gMTYgJiAweGZmLCByZWxhdGl2ZU9mZnNldCA+PiA4ICYgMHhmZiwgcmVsYXRpdmVPZmZzZXQgJiAweGZmKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEucHVzaChyZWxhdGl2ZU9mZnNldCA+Pj4gMjQgJiAweGZmLCByZWxhdGl2ZU9mZnNldCA+PiAxNiAmIDB4ZmYsIHJlbGF0aXZlT2Zmc2V0ID4+IDggJiAweGZmLCByZWxhdGl2ZU9mZnNldCAmIDB4ZmYpO1xuICAgICAgfVxuXG4gICAgICBpZiAob2JqZWN0c1tpXSkge1xuICAgICAgICByZWxhdGl2ZU9mZnNldCArPSBvYmplY3RzW2ldLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgaWYgKHRyYWNrZXJzW2ldKSB7XG4gICAgICAgIHRyYWNrZXJzW2ldLm9mZnNldChkYXRhLmxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGogPSAwLCBqaiA9IG9iamVjdHNbaV0ubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICBkYXRhLnB1c2gob2JqZWN0c1tpXVtqXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxufVxuXG5leHBvcnRzLkNGRkNvbXBpbGVyID0gQ0ZGQ29tcGlsZXI7XG5cbi8qKiovIH0pLFxuLyogNDYgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuSVNPQWRvYmVDaGFyc2V0ID0gZXhwb3J0cy5FeHBlcnRTdWJzZXRDaGFyc2V0ID0gZXhwb3J0cy5FeHBlcnRDaGFyc2V0ID0gdm9pZCAwO1xuY29uc3QgSVNPQWRvYmVDaGFyc2V0ID0gW1wiLm5vdGRlZlwiLCBcInNwYWNlXCIsIFwiZXhjbGFtXCIsIFwicXVvdGVkYmxcIiwgXCJudW1iZXJzaWduXCIsIFwiZG9sbGFyXCIsIFwicGVyY2VudFwiLCBcImFtcGVyc2FuZFwiLCBcInF1b3RlcmlnaHRcIiwgXCJwYXJlbmxlZnRcIiwgXCJwYXJlbnJpZ2h0XCIsIFwiYXN0ZXJpc2tcIiwgXCJwbHVzXCIsIFwiY29tbWFcIiwgXCJoeXBoZW5cIiwgXCJwZXJpb2RcIiwgXCJzbGFzaFwiLCBcInplcm9cIiwgXCJvbmVcIiwgXCJ0d29cIiwgXCJ0aHJlZVwiLCBcImZvdXJcIiwgXCJmaXZlXCIsIFwic2l4XCIsIFwic2V2ZW5cIiwgXCJlaWdodFwiLCBcIm5pbmVcIiwgXCJjb2xvblwiLCBcInNlbWljb2xvblwiLCBcImxlc3NcIiwgXCJlcXVhbFwiLCBcImdyZWF0ZXJcIiwgXCJxdWVzdGlvblwiLCBcImF0XCIsIFwiQVwiLCBcIkJcIiwgXCJDXCIsIFwiRFwiLCBcIkVcIiwgXCJGXCIsIFwiR1wiLCBcIkhcIiwgXCJJXCIsIFwiSlwiLCBcIktcIiwgXCJMXCIsIFwiTVwiLCBcIk5cIiwgXCJPXCIsIFwiUFwiLCBcIlFcIiwgXCJSXCIsIFwiU1wiLCBcIlRcIiwgXCJVXCIsIFwiVlwiLCBcIldcIiwgXCJYXCIsIFwiWVwiLCBcIlpcIiwgXCJicmFja2V0bGVmdFwiLCBcImJhY2tzbGFzaFwiLCBcImJyYWNrZXRyaWdodFwiLCBcImFzY2lpY2lyY3VtXCIsIFwidW5kZXJzY29yZVwiLCBcInF1b3RlbGVmdFwiLCBcImFcIiwgXCJiXCIsIFwiY1wiLCBcImRcIiwgXCJlXCIsIFwiZlwiLCBcImdcIiwgXCJoXCIsIFwiaVwiLCBcImpcIiwgXCJrXCIsIFwibFwiLCBcIm1cIiwgXCJuXCIsIFwib1wiLCBcInBcIiwgXCJxXCIsIFwiclwiLCBcInNcIiwgXCJ0XCIsIFwidVwiLCBcInZcIiwgXCJ3XCIsIFwieFwiLCBcInlcIiwgXCJ6XCIsIFwiYnJhY2VsZWZ0XCIsIFwiYmFyXCIsIFwiYnJhY2VyaWdodFwiLCBcImFzY2lpdGlsZGVcIiwgXCJleGNsYW1kb3duXCIsIFwiY2VudFwiLCBcInN0ZXJsaW5nXCIsIFwiZnJhY3Rpb25cIiwgXCJ5ZW5cIiwgXCJmbG9yaW5cIiwgXCJzZWN0aW9uXCIsIFwiY3VycmVuY3lcIiwgXCJxdW90ZXNpbmdsZVwiLCBcInF1b3RlZGJsbGVmdFwiLCBcImd1aWxsZW1vdGxlZnRcIiwgXCJndWlsc2luZ2xsZWZ0XCIsIFwiZ3VpbHNpbmdscmlnaHRcIiwgXCJmaVwiLCBcImZsXCIsIFwiZW5kYXNoXCIsIFwiZGFnZ2VyXCIsIFwiZGFnZ2VyZGJsXCIsIFwicGVyaW9kY2VudGVyZWRcIiwgXCJwYXJhZ3JhcGhcIiwgXCJidWxsZXRcIiwgXCJxdW90ZXNpbmdsYmFzZVwiLCBcInF1b3RlZGJsYmFzZVwiLCBcInF1b3RlZGJscmlnaHRcIiwgXCJndWlsbGVtb3RyaWdodFwiLCBcImVsbGlwc2lzXCIsIFwicGVydGhvdXNhbmRcIiwgXCJxdWVzdGlvbmRvd25cIiwgXCJncmF2ZVwiLCBcImFjdXRlXCIsIFwiY2lyY3VtZmxleFwiLCBcInRpbGRlXCIsIFwibWFjcm9uXCIsIFwiYnJldmVcIiwgXCJkb3RhY2NlbnRcIiwgXCJkaWVyZXNpc1wiLCBcInJpbmdcIiwgXCJjZWRpbGxhXCIsIFwiaHVuZ2FydW1sYXV0XCIsIFwib2dvbmVrXCIsIFwiY2Fyb25cIiwgXCJlbWRhc2hcIiwgXCJBRVwiLCBcIm9yZGZlbWluaW5lXCIsIFwiTHNsYXNoXCIsIFwiT3NsYXNoXCIsIFwiT0VcIiwgXCJvcmRtYXNjdWxpbmVcIiwgXCJhZVwiLCBcImRvdGxlc3NpXCIsIFwibHNsYXNoXCIsIFwib3NsYXNoXCIsIFwib2VcIiwgXCJnZXJtYW5kYmxzXCIsIFwib25lc3VwZXJpb3JcIiwgXCJsb2dpY2Fsbm90XCIsIFwibXVcIiwgXCJ0cmFkZW1hcmtcIiwgXCJFdGhcIiwgXCJvbmVoYWxmXCIsIFwicGx1c21pbnVzXCIsIFwiVGhvcm5cIiwgXCJvbmVxdWFydGVyXCIsIFwiZGl2aWRlXCIsIFwiYnJva2VuYmFyXCIsIFwiZGVncmVlXCIsIFwidGhvcm5cIiwgXCJ0aHJlZXF1YXJ0ZXJzXCIsIFwidHdvc3VwZXJpb3JcIiwgXCJyZWdpc3RlcmVkXCIsIFwibWludXNcIiwgXCJldGhcIiwgXCJtdWx0aXBseVwiLCBcInRocmVlc3VwZXJpb3JcIiwgXCJjb3B5cmlnaHRcIiwgXCJBYWN1dGVcIiwgXCJBY2lyY3VtZmxleFwiLCBcIkFkaWVyZXNpc1wiLCBcIkFncmF2ZVwiLCBcIkFyaW5nXCIsIFwiQXRpbGRlXCIsIFwiQ2NlZGlsbGFcIiwgXCJFYWN1dGVcIiwgXCJFY2lyY3VtZmxleFwiLCBcIkVkaWVyZXNpc1wiLCBcIkVncmF2ZVwiLCBcIklhY3V0ZVwiLCBcIkljaXJjdW1mbGV4XCIsIFwiSWRpZXJlc2lzXCIsIFwiSWdyYXZlXCIsIFwiTnRpbGRlXCIsIFwiT2FjdXRlXCIsIFwiT2NpcmN1bWZsZXhcIiwgXCJPZGllcmVzaXNcIiwgXCJPZ3JhdmVcIiwgXCJPdGlsZGVcIiwgXCJTY2Fyb25cIiwgXCJVYWN1dGVcIiwgXCJVY2lyY3VtZmxleFwiLCBcIlVkaWVyZXNpc1wiLCBcIlVncmF2ZVwiLCBcIllhY3V0ZVwiLCBcIllkaWVyZXNpc1wiLCBcIlpjYXJvblwiLCBcImFhY3V0ZVwiLCBcImFjaXJjdW1mbGV4XCIsIFwiYWRpZXJlc2lzXCIsIFwiYWdyYXZlXCIsIFwiYXJpbmdcIiwgXCJhdGlsZGVcIiwgXCJjY2VkaWxsYVwiLCBcImVhY3V0ZVwiLCBcImVjaXJjdW1mbGV4XCIsIFwiZWRpZXJlc2lzXCIsIFwiZWdyYXZlXCIsIFwiaWFjdXRlXCIsIFwiaWNpcmN1bWZsZXhcIiwgXCJpZGllcmVzaXNcIiwgXCJpZ3JhdmVcIiwgXCJudGlsZGVcIiwgXCJvYWN1dGVcIiwgXCJvY2lyY3VtZmxleFwiLCBcIm9kaWVyZXNpc1wiLCBcIm9ncmF2ZVwiLCBcIm90aWxkZVwiLCBcInNjYXJvblwiLCBcInVhY3V0ZVwiLCBcInVjaXJjdW1mbGV4XCIsIFwidWRpZXJlc2lzXCIsIFwidWdyYXZlXCIsIFwieWFjdXRlXCIsIFwieWRpZXJlc2lzXCIsIFwiemNhcm9uXCJdO1xuZXhwb3J0cy5JU09BZG9iZUNoYXJzZXQgPSBJU09BZG9iZUNoYXJzZXQ7XG5jb25zdCBFeHBlcnRDaGFyc2V0ID0gW1wiLm5vdGRlZlwiLCBcInNwYWNlXCIsIFwiZXhjbGFtc21hbGxcIiwgXCJIdW5nYXJ1bWxhdXRzbWFsbFwiLCBcImRvbGxhcm9sZHN0eWxlXCIsIFwiZG9sbGFyc3VwZXJpb3JcIiwgXCJhbXBlcnNhbmRzbWFsbFwiLCBcIkFjdXRlc21hbGxcIiwgXCJwYXJlbmxlZnRzdXBlcmlvclwiLCBcInBhcmVucmlnaHRzdXBlcmlvclwiLCBcInR3b2RvdGVubGVhZGVyXCIsIFwib25lZG90ZW5sZWFkZXJcIiwgXCJjb21tYVwiLCBcImh5cGhlblwiLCBcInBlcmlvZFwiLCBcImZyYWN0aW9uXCIsIFwiemVyb29sZHN0eWxlXCIsIFwib25lb2xkc3R5bGVcIiwgXCJ0d29vbGRzdHlsZVwiLCBcInRocmVlb2xkc3R5bGVcIiwgXCJmb3Vyb2xkc3R5bGVcIiwgXCJmaXZlb2xkc3R5bGVcIiwgXCJzaXhvbGRzdHlsZVwiLCBcInNldmVub2xkc3R5bGVcIiwgXCJlaWdodG9sZHN0eWxlXCIsIFwibmluZW9sZHN0eWxlXCIsIFwiY29sb25cIiwgXCJzZW1pY29sb25cIiwgXCJjb21tYXN1cGVyaW9yXCIsIFwidGhyZWVxdWFydGVyc2VtZGFzaFwiLCBcInBlcmlvZHN1cGVyaW9yXCIsIFwicXVlc3Rpb25zbWFsbFwiLCBcImFzdXBlcmlvclwiLCBcImJzdXBlcmlvclwiLCBcImNlbnRzdXBlcmlvclwiLCBcImRzdXBlcmlvclwiLCBcImVzdXBlcmlvclwiLCBcImlzdXBlcmlvclwiLCBcImxzdXBlcmlvclwiLCBcIm1zdXBlcmlvclwiLCBcIm5zdXBlcmlvclwiLCBcIm9zdXBlcmlvclwiLCBcInJzdXBlcmlvclwiLCBcInNzdXBlcmlvclwiLCBcInRzdXBlcmlvclwiLCBcImZmXCIsIFwiZmlcIiwgXCJmbFwiLCBcImZmaVwiLCBcImZmbFwiLCBcInBhcmVubGVmdGluZmVyaW9yXCIsIFwicGFyZW5yaWdodGluZmVyaW9yXCIsIFwiQ2lyY3VtZmxleHNtYWxsXCIsIFwiaHlwaGVuc3VwZXJpb3JcIiwgXCJHcmF2ZXNtYWxsXCIsIFwiQXNtYWxsXCIsIFwiQnNtYWxsXCIsIFwiQ3NtYWxsXCIsIFwiRHNtYWxsXCIsIFwiRXNtYWxsXCIsIFwiRnNtYWxsXCIsIFwiR3NtYWxsXCIsIFwiSHNtYWxsXCIsIFwiSXNtYWxsXCIsIFwiSnNtYWxsXCIsIFwiS3NtYWxsXCIsIFwiTHNtYWxsXCIsIFwiTXNtYWxsXCIsIFwiTnNtYWxsXCIsIFwiT3NtYWxsXCIsIFwiUHNtYWxsXCIsIFwiUXNtYWxsXCIsIFwiUnNtYWxsXCIsIFwiU3NtYWxsXCIsIFwiVHNtYWxsXCIsIFwiVXNtYWxsXCIsIFwiVnNtYWxsXCIsIFwiV3NtYWxsXCIsIFwiWHNtYWxsXCIsIFwiWXNtYWxsXCIsIFwiWnNtYWxsXCIsIFwiY29sb25tb25ldGFyeVwiLCBcIm9uZWZpdHRlZFwiLCBcInJ1cGlhaFwiLCBcIlRpbGRlc21hbGxcIiwgXCJleGNsYW1kb3duc21hbGxcIiwgXCJjZW50b2xkc3R5bGVcIiwgXCJMc2xhc2hzbWFsbFwiLCBcIlNjYXJvbnNtYWxsXCIsIFwiWmNhcm9uc21hbGxcIiwgXCJEaWVyZXNpc3NtYWxsXCIsIFwiQnJldmVzbWFsbFwiLCBcIkNhcm9uc21hbGxcIiwgXCJEb3RhY2NlbnRzbWFsbFwiLCBcIk1hY3JvbnNtYWxsXCIsIFwiZmlndXJlZGFzaFwiLCBcImh5cGhlbmluZmVyaW9yXCIsIFwiT2dvbmVrc21hbGxcIiwgXCJSaW5nc21hbGxcIiwgXCJDZWRpbGxhc21hbGxcIiwgXCJvbmVxdWFydGVyXCIsIFwib25laGFsZlwiLCBcInRocmVlcXVhcnRlcnNcIiwgXCJxdWVzdGlvbmRvd25zbWFsbFwiLCBcIm9uZWVpZ2h0aFwiLCBcInRocmVlZWlnaHRoc1wiLCBcImZpdmVlaWdodGhzXCIsIFwic2V2ZW5laWdodGhzXCIsIFwib25ldGhpcmRcIiwgXCJ0d290aGlyZHNcIiwgXCJ6ZXJvc3VwZXJpb3JcIiwgXCJvbmVzdXBlcmlvclwiLCBcInR3b3N1cGVyaW9yXCIsIFwidGhyZWVzdXBlcmlvclwiLCBcImZvdXJzdXBlcmlvclwiLCBcImZpdmVzdXBlcmlvclwiLCBcInNpeHN1cGVyaW9yXCIsIFwic2V2ZW5zdXBlcmlvclwiLCBcImVpZ2h0c3VwZXJpb3JcIiwgXCJuaW5lc3VwZXJpb3JcIiwgXCJ6ZXJvaW5mZXJpb3JcIiwgXCJvbmVpbmZlcmlvclwiLCBcInR3b2luZmVyaW9yXCIsIFwidGhyZWVpbmZlcmlvclwiLCBcImZvdXJpbmZlcmlvclwiLCBcImZpdmVpbmZlcmlvclwiLCBcInNpeGluZmVyaW9yXCIsIFwic2V2ZW5pbmZlcmlvclwiLCBcImVpZ2h0aW5mZXJpb3JcIiwgXCJuaW5laW5mZXJpb3JcIiwgXCJjZW50aW5mZXJpb3JcIiwgXCJkb2xsYXJpbmZlcmlvclwiLCBcInBlcmlvZGluZmVyaW9yXCIsIFwiY29tbWFpbmZlcmlvclwiLCBcIkFncmF2ZXNtYWxsXCIsIFwiQWFjdXRlc21hbGxcIiwgXCJBY2lyY3VtZmxleHNtYWxsXCIsIFwiQXRpbGRlc21hbGxcIiwgXCJBZGllcmVzaXNzbWFsbFwiLCBcIkFyaW5nc21hbGxcIiwgXCJBRXNtYWxsXCIsIFwiQ2NlZGlsbGFzbWFsbFwiLCBcIkVncmF2ZXNtYWxsXCIsIFwiRWFjdXRlc21hbGxcIiwgXCJFY2lyY3VtZmxleHNtYWxsXCIsIFwiRWRpZXJlc2lzc21hbGxcIiwgXCJJZ3JhdmVzbWFsbFwiLCBcIklhY3V0ZXNtYWxsXCIsIFwiSWNpcmN1bWZsZXhzbWFsbFwiLCBcIklkaWVyZXNpc3NtYWxsXCIsIFwiRXRoc21hbGxcIiwgXCJOdGlsZGVzbWFsbFwiLCBcIk9ncmF2ZXNtYWxsXCIsIFwiT2FjdXRlc21hbGxcIiwgXCJPY2lyY3VtZmxleHNtYWxsXCIsIFwiT3RpbGRlc21hbGxcIiwgXCJPZGllcmVzaXNzbWFsbFwiLCBcIk9Fc21hbGxcIiwgXCJPc2xhc2hzbWFsbFwiLCBcIlVncmF2ZXNtYWxsXCIsIFwiVWFjdXRlc21hbGxcIiwgXCJVY2lyY3VtZmxleHNtYWxsXCIsIFwiVWRpZXJlc2lzc21hbGxcIiwgXCJZYWN1dGVzbWFsbFwiLCBcIlRob3Juc21hbGxcIiwgXCJZZGllcmVzaXNzbWFsbFwiXTtcbmV4cG9ydHMuRXhwZXJ0Q2hhcnNldCA9IEV4cGVydENoYXJzZXQ7XG5jb25zdCBFeHBlcnRTdWJzZXRDaGFyc2V0ID0gW1wiLm5vdGRlZlwiLCBcInNwYWNlXCIsIFwiZG9sbGFyb2xkc3R5bGVcIiwgXCJkb2xsYXJzdXBlcmlvclwiLCBcInBhcmVubGVmdHN1cGVyaW9yXCIsIFwicGFyZW5yaWdodHN1cGVyaW9yXCIsIFwidHdvZG90ZW5sZWFkZXJcIiwgXCJvbmVkb3RlbmxlYWRlclwiLCBcImNvbW1hXCIsIFwiaHlwaGVuXCIsIFwicGVyaW9kXCIsIFwiZnJhY3Rpb25cIiwgXCJ6ZXJvb2xkc3R5bGVcIiwgXCJvbmVvbGRzdHlsZVwiLCBcInR3b29sZHN0eWxlXCIsIFwidGhyZWVvbGRzdHlsZVwiLCBcImZvdXJvbGRzdHlsZVwiLCBcImZpdmVvbGRzdHlsZVwiLCBcInNpeG9sZHN0eWxlXCIsIFwic2V2ZW5vbGRzdHlsZVwiLCBcImVpZ2h0b2xkc3R5bGVcIiwgXCJuaW5lb2xkc3R5bGVcIiwgXCJjb2xvblwiLCBcInNlbWljb2xvblwiLCBcImNvbW1hc3VwZXJpb3JcIiwgXCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoXCIsIFwicGVyaW9kc3VwZXJpb3JcIiwgXCJhc3VwZXJpb3JcIiwgXCJic3VwZXJpb3JcIiwgXCJjZW50c3VwZXJpb3JcIiwgXCJkc3VwZXJpb3JcIiwgXCJlc3VwZXJpb3JcIiwgXCJpc3VwZXJpb3JcIiwgXCJsc3VwZXJpb3JcIiwgXCJtc3VwZXJpb3JcIiwgXCJuc3VwZXJpb3JcIiwgXCJvc3VwZXJpb3JcIiwgXCJyc3VwZXJpb3JcIiwgXCJzc3VwZXJpb3JcIiwgXCJ0c3VwZXJpb3JcIiwgXCJmZlwiLCBcImZpXCIsIFwiZmxcIiwgXCJmZmlcIiwgXCJmZmxcIiwgXCJwYXJlbmxlZnRpbmZlcmlvclwiLCBcInBhcmVucmlnaHRpbmZlcmlvclwiLCBcImh5cGhlbnN1cGVyaW9yXCIsIFwiY29sb25tb25ldGFyeVwiLCBcIm9uZWZpdHRlZFwiLCBcInJ1cGlhaFwiLCBcImNlbnRvbGRzdHlsZVwiLCBcImZpZ3VyZWRhc2hcIiwgXCJoeXBoZW5pbmZlcmlvclwiLCBcIm9uZXF1YXJ0ZXJcIiwgXCJvbmVoYWxmXCIsIFwidGhyZWVxdWFydGVyc1wiLCBcIm9uZWVpZ2h0aFwiLCBcInRocmVlZWlnaHRoc1wiLCBcImZpdmVlaWdodGhzXCIsIFwic2V2ZW5laWdodGhzXCIsIFwib25ldGhpcmRcIiwgXCJ0d290aGlyZHNcIiwgXCJ6ZXJvc3VwZXJpb3JcIiwgXCJvbmVzdXBlcmlvclwiLCBcInR3b3N1cGVyaW9yXCIsIFwidGhyZWVzdXBlcmlvclwiLCBcImZvdXJzdXBlcmlvclwiLCBcImZpdmVzdXBlcmlvclwiLCBcInNpeHN1cGVyaW9yXCIsIFwic2V2ZW5zdXBlcmlvclwiLCBcImVpZ2h0c3VwZXJpb3JcIiwgXCJuaW5lc3VwZXJpb3JcIiwgXCJ6ZXJvaW5mZXJpb3JcIiwgXCJvbmVpbmZlcmlvclwiLCBcInR3b2luZmVyaW9yXCIsIFwidGhyZWVpbmZlcmlvclwiLCBcImZvdXJpbmZlcmlvclwiLCBcImZpdmVpbmZlcmlvclwiLCBcInNpeGluZmVyaW9yXCIsIFwic2V2ZW5pbmZlcmlvclwiLCBcImVpZ2h0aW5mZXJpb3JcIiwgXCJuaW5laW5mZXJpb3JcIiwgXCJjZW50aW5mZXJpb3JcIiwgXCJkb2xsYXJpbmZlcmlvclwiLCBcInBlcmlvZGluZmVyaW9yXCIsIFwiY29tbWFpbmZlcmlvclwiXTtcbmV4cG9ydHMuRXhwZXJ0U3Vic2V0Q2hhcnNldCA9IEV4cGVydFN1YnNldENoYXJzZXQ7XG5cbi8qKiovIH0pLFxuLyogNDcgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuZ2V0U2VyaWZGb250cyA9IGV4cG9ydHMuZ2V0Tm9uU3RkRm9udE1hcCA9IGV4cG9ydHMuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzID0gZXhwb3J0cy5nZXRGb250TmFtZVRvRmlsZU1hcCA9IHZvaWQgMDtcbmV4cG9ydHMuZ2V0U3RhbmRhcmRGb250TmFtZSA9IGdldFN0YW5kYXJkRm9udE5hbWU7XG5leHBvcnRzLmdldFN5bWJvbHNGb250cyA9IGV4cG9ydHMuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpID0gZXhwb3J0cy5nZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckFyaWFsQmxhY2sgPSBleHBvcnRzLmdldFN0ZEZvbnRNYXAgPSB2b2lkIDA7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOSk7XG5cbnZhciBfZm9udHNfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE4KTtcblxuY29uc3QgZ2V0U3RkRm9udE1hcCA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gIHRbXCJUaW1lcy1Sb21hblwiXSA9IFwiVGltZXMtUm9tYW5cIjtcbiAgdC5IZWx2ZXRpY2EgPSBcIkhlbHZldGljYVwiO1xuICB0LkNvdXJpZXIgPSBcIkNvdXJpZXJcIjtcbiAgdC5TeW1ib2wgPSBcIlN5bWJvbFwiO1xuICB0W1wiVGltZXMtQm9sZFwiXSA9IFwiVGltZXMtQm9sZFwiO1xuICB0W1wiSGVsdmV0aWNhLUJvbGRcIl0gPSBcIkhlbHZldGljYS1Cb2xkXCI7XG4gIHRbXCJDb3VyaWVyLUJvbGRcIl0gPSBcIkNvdXJpZXItQm9sZFwiO1xuICB0LlphcGZEaW5nYmF0cyA9IFwiWmFwZkRpbmdiYXRzXCI7XG4gIHRbXCJUaW1lcy1JdGFsaWNcIl0gPSBcIlRpbWVzLUl0YWxpY1wiO1xuICB0W1wiSGVsdmV0aWNhLU9ibGlxdWVcIl0gPSBcIkhlbHZldGljYS1PYmxpcXVlXCI7XG4gIHRbXCJDb3VyaWVyLU9ibGlxdWVcIl0gPSBcIkNvdXJpZXItT2JsaXF1ZVwiO1xuICB0W1wiVGltZXMtQm9sZEl0YWxpY1wiXSA9IFwiVGltZXMtQm9sZEl0YWxpY1wiO1xuICB0W1wiSGVsdmV0aWNhLUJvbGRPYmxpcXVlXCJdID0gXCJIZWx2ZXRpY2EtQm9sZE9ibGlxdWVcIjtcbiAgdFtcIkNvdXJpZXItQm9sZE9ibGlxdWVcIl0gPSBcIkNvdXJpZXItQm9sZE9ibGlxdWVcIjtcbiAgdC5BcmlhbE5hcnJvdyA9IFwiSGVsdmV0aWNhXCI7XG4gIHRbXCJBcmlhbE5hcnJvdy1Cb2xkXCJdID0gXCJIZWx2ZXRpY2EtQm9sZFwiO1xuICB0W1wiQXJpYWxOYXJyb3ctQm9sZEl0YWxpY1wiXSA9IFwiSGVsdmV0aWNhLUJvbGRPYmxpcXVlXCI7XG4gIHRbXCJBcmlhbE5hcnJvdy1JdGFsaWNcIl0gPSBcIkhlbHZldGljYS1PYmxpcXVlXCI7XG4gIHQuQXJpYWxCbGFjayA9IFwiSGVsdmV0aWNhXCI7XG4gIHRbXCJBcmlhbEJsYWNrLUJvbGRcIl0gPSBcIkhlbHZldGljYS1Cb2xkXCI7XG4gIHRbXCJBcmlhbEJsYWNrLUJvbGRJdGFsaWNcIl0gPSBcIkhlbHZldGljYS1Cb2xkT2JsaXF1ZVwiO1xuICB0W1wiQXJpYWxCbGFjay1JdGFsaWNcIl0gPSBcIkhlbHZldGljYS1PYmxpcXVlXCI7XG4gIHRbXCJBcmlhbC1CbGFja1wiXSA9IFwiSGVsdmV0aWNhXCI7XG4gIHRbXCJBcmlhbC1CbGFjay1Cb2xkXCJdID0gXCJIZWx2ZXRpY2EtQm9sZFwiO1xuICB0W1wiQXJpYWwtQmxhY2stQm9sZEl0YWxpY1wiXSA9IFwiSGVsdmV0aWNhLUJvbGRPYmxpcXVlXCI7XG4gIHRbXCJBcmlhbC1CbGFjay1JdGFsaWNcIl0gPSBcIkhlbHZldGljYS1PYmxpcXVlXCI7XG4gIHQuQXJpYWwgPSBcIkhlbHZldGljYVwiO1xuICB0W1wiQXJpYWwtQm9sZFwiXSA9IFwiSGVsdmV0aWNhLUJvbGRcIjtcbiAgdFtcIkFyaWFsLUJvbGRJdGFsaWNcIl0gPSBcIkhlbHZldGljYS1Cb2xkT2JsaXF1ZVwiO1xuICB0W1wiQXJpYWwtSXRhbGljXCJdID0gXCJIZWx2ZXRpY2EtT2JsaXF1ZVwiO1xuICB0W1wiQXJpYWwtQm9sZEl0YWxpY01UXCJdID0gXCJIZWx2ZXRpY2EtQm9sZE9ibGlxdWVcIjtcbiAgdFtcIkFyaWFsLUJvbGRNVFwiXSA9IFwiSGVsdmV0aWNhLUJvbGRcIjtcbiAgdFtcIkFyaWFsLUl0YWxpY01UXCJdID0gXCJIZWx2ZXRpY2EtT2JsaXF1ZVwiO1xuICB0LkFyaWFsTVQgPSBcIkhlbHZldGljYVwiO1xuICB0W1wiQ291cmllci1Cb2xkSXRhbGljXCJdID0gXCJDb3VyaWVyLUJvbGRPYmxpcXVlXCI7XG4gIHRbXCJDb3VyaWVyLUl0YWxpY1wiXSA9IFwiQ291cmllci1PYmxpcXVlXCI7XG4gIHQuQ291cmllck5ldyA9IFwiQ291cmllclwiO1xuICB0W1wiQ291cmllck5ldy1Cb2xkXCJdID0gXCJDb3VyaWVyLUJvbGRcIjtcbiAgdFtcIkNvdXJpZXJOZXctQm9sZEl0YWxpY1wiXSA9IFwiQ291cmllci1Cb2xkT2JsaXF1ZVwiO1xuICB0W1wiQ291cmllck5ldy1JdGFsaWNcIl0gPSBcIkNvdXJpZXItT2JsaXF1ZVwiO1xuICB0W1wiQ291cmllck5ld1BTLUJvbGRJdGFsaWNNVFwiXSA9IFwiQ291cmllci1Cb2xkT2JsaXF1ZVwiO1xuICB0W1wiQ291cmllck5ld1BTLUJvbGRNVFwiXSA9IFwiQ291cmllci1Cb2xkXCI7XG4gIHRbXCJDb3VyaWVyTmV3UFMtSXRhbGljTVRcIl0gPSBcIkNvdXJpZXItT2JsaXF1ZVwiO1xuICB0LkNvdXJpZXJOZXdQU01UID0gXCJDb3VyaWVyXCI7XG4gIHRbXCJIZWx2ZXRpY2EtQm9sZEl0YWxpY1wiXSA9IFwiSGVsdmV0aWNhLUJvbGRPYmxpcXVlXCI7XG4gIHRbXCJIZWx2ZXRpY2EtSXRhbGljXCJdID0gXCJIZWx2ZXRpY2EtT2JsaXF1ZVwiO1xuICB0W1wiU3ltYm9sLUJvbGRcIl0gPSBcIlN5bWJvbFwiO1xuICB0W1wiU3ltYm9sLUJvbGRJdGFsaWNcIl0gPSBcIlN5bWJvbFwiO1xuICB0W1wiU3ltYm9sLUl0YWxpY1wiXSA9IFwiU3ltYm9sXCI7XG4gIHQuVGltZXNOZXdSb21hbiA9IFwiVGltZXMtUm9tYW5cIjtcbiAgdFtcIlRpbWVzTmV3Um9tYW4tQm9sZFwiXSA9IFwiVGltZXMtQm9sZFwiO1xuICB0W1wiVGltZXNOZXdSb21hbi1Cb2xkSXRhbGljXCJdID0gXCJUaW1lcy1Cb2xkSXRhbGljXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuLUl0YWxpY1wiXSA9IFwiVGltZXMtSXRhbGljXCI7XG4gIHQuVGltZXNOZXdSb21hblBTID0gXCJUaW1lcy1Sb21hblwiO1xuICB0W1wiVGltZXNOZXdSb21hblBTLUJvbGRcIl0gPSBcIlRpbWVzLUJvbGRcIjtcbiAgdFtcIlRpbWVzTmV3Um9tYW5QUy1Cb2xkSXRhbGljXCJdID0gXCJUaW1lcy1Cb2xkSXRhbGljXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuUFMtQm9sZEl0YWxpY01UXCJdID0gXCJUaW1lcy1Cb2xkSXRhbGljXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuUFMtQm9sZE1UXCJdID0gXCJUaW1lcy1Cb2xkXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuUFMtSXRhbGljXCJdID0gXCJUaW1lcy1JdGFsaWNcIjtcbiAgdFtcIlRpbWVzTmV3Um9tYW5QUy1JdGFsaWNNVFwiXSA9IFwiVGltZXMtSXRhbGljXCI7XG4gIHQuVGltZXNOZXdSb21hblBTTVQgPSBcIlRpbWVzLVJvbWFuXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuUFNNVC1Cb2xkXCJdID0gXCJUaW1lcy1Cb2xkXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuUFNNVC1Cb2xkSXRhbGljXCJdID0gXCJUaW1lcy1Cb2xkSXRhbGljXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuUFNNVC1JdGFsaWNcIl0gPSBcIlRpbWVzLUl0YWxpY1wiO1xufSk7XG5leHBvcnRzLmdldFN0ZEZvbnRNYXAgPSBnZXRTdGRGb250TWFwO1xuY29uc3QgZ2V0Rm9udE5hbWVUb0ZpbGVNYXAgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICB0LkNvdXJpZXIgPSBcIkZveGl0Rml4ZWQucGZiXCI7XG4gIHRbXCJDb3VyaWVyLUJvbGRcIl0gPSBcIkZveGl0Rml4ZWRCb2xkLnBmYlwiO1xuICB0W1wiQ291cmllci1Cb2xkT2JsaXF1ZVwiXSA9IFwiRm94aXRGaXhlZEJvbGRJdGFsaWMucGZiXCI7XG4gIHRbXCJDb3VyaWVyLU9ibGlxdWVcIl0gPSBcIkZveGl0Rml4ZWRJdGFsaWMucGZiXCI7XG4gIHQuSGVsdmV0aWNhID0gXCJGb3hpdFNhbnMucGZiXCI7XG4gIHRbXCJIZWx2ZXRpY2EtQm9sZFwiXSA9IFwiRm94aXRTYW5zQm9sZC5wZmJcIjtcbiAgdFtcIkhlbHZldGljYS1Cb2xkT2JsaXF1ZVwiXSA9IFwiRm94aXRTYW5zQm9sZEl0YWxpYy5wZmJcIjtcbiAgdFtcIkhlbHZldGljYS1PYmxpcXVlXCJdID0gXCJGb3hpdFNhbnNJdGFsaWMucGZiXCI7XG4gIHRbXCJUaW1lcy1Sb21hblwiXSA9IFwiRm94aXRTZXJpZi5wZmJcIjtcbiAgdFtcIlRpbWVzLUJvbGRcIl0gPSBcIkZveGl0U2VyaWZCb2xkLnBmYlwiO1xuICB0W1wiVGltZXMtQm9sZEl0YWxpY1wiXSA9IFwiRm94aXRTZXJpZkJvbGRJdGFsaWMucGZiXCI7XG4gIHRbXCJUaW1lcy1JdGFsaWNcIl0gPSBcIkZveGl0U2VyaWZJdGFsaWMucGZiXCI7XG4gIHQuU3ltYm9sID0gXCJGb3hpdFN5bWJvbC5wZmJcIjtcbiAgdC5aYXBmRGluZ2JhdHMgPSBcIkZveGl0RGluZ2JhdHMucGZiXCI7XG4gIHRbXCJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyXCJdID0gXCJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyLnR0ZlwiO1xuICB0W1wiTGliZXJhdGlvblNhbnMtQm9sZFwiXSA9IFwiTGliZXJhdGlvblNhbnMtQm9sZC50dGZcIjtcbiAgdFtcIkxpYmVyYXRpb25TYW5zLUl0YWxpY1wiXSA9IFwiTGliZXJhdGlvblNhbnMtSXRhbGljLnR0ZlwiO1xuICB0W1wiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpY1wiXSA9IFwiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYy50dGZcIjtcbn0pO1xuZXhwb3J0cy5nZXRGb250TmFtZVRvRmlsZU1hcCA9IGdldEZvbnROYW1lVG9GaWxlTWFwO1xuY29uc3QgZ2V0Tm9uU3RkRm9udE1hcCA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gIHQuQ2FsaWJyaSA9IFwiSGVsdmV0aWNhXCI7XG4gIHRbXCJDYWxpYnJpLUJvbGRcIl0gPSBcIkhlbHZldGljYS1Cb2xkXCI7XG4gIHRbXCJDYWxpYnJpLUJvbGRJdGFsaWNcIl0gPSBcIkhlbHZldGljYS1Cb2xkT2JsaXF1ZVwiO1xuICB0W1wiQ2FsaWJyaS1JdGFsaWNcIl0gPSBcIkhlbHZldGljYS1PYmxpcXVlXCI7XG4gIHQuQ2VudHVyeUdvdGhpYyA9IFwiSGVsdmV0aWNhXCI7XG4gIHRbXCJDZW50dXJ5R290aGljLUJvbGRcIl0gPSBcIkhlbHZldGljYS1Cb2xkXCI7XG4gIHRbXCJDZW50dXJ5R290aGljLUJvbGRJdGFsaWNcIl0gPSBcIkhlbHZldGljYS1Cb2xkT2JsaXF1ZVwiO1xuICB0W1wiQ2VudHVyeUdvdGhpYy1JdGFsaWNcIl0gPSBcIkhlbHZldGljYS1PYmxpcXVlXCI7XG4gIHQuQ29taWNTYW5zTVMgPSBcIkNvbWljIFNhbnMgTVNcIjtcbiAgdFtcIkNvbWljU2Fuc01TLUJvbGRcIl0gPSBcIkNvbWljIFNhbnMgTVMtQm9sZFwiO1xuICB0W1wiQ29taWNTYW5zTVMtQm9sZEl0YWxpY1wiXSA9IFwiQ29taWMgU2FucyBNUy1Cb2xkSXRhbGljXCI7XG4gIHRbXCJDb21pY1NhbnNNUy1JdGFsaWNcIl0gPSBcIkNvbWljIFNhbnMgTVMtSXRhbGljXCI7XG4gIHRbXCJJdGNTeW1ib2wtQm9sZFwiXSA9IFwiSGVsdmV0aWNhLUJvbGRcIjtcbiAgdFtcIkl0Y1N5bWJvbC1Cb2xkSXRhbGljXCJdID0gXCJIZWx2ZXRpY2EtQm9sZE9ibGlxdWVcIjtcbiAgdFtcIkl0Y1N5bWJvbC1Cb29rXCJdID0gXCJIZWx2ZXRpY2FcIjtcbiAgdFtcIkl0Y1N5bWJvbC1Cb29rSXRhbGljXCJdID0gXCJIZWx2ZXRpY2EtT2JsaXF1ZVwiO1xuICB0W1wiSXRjU3ltYm9sLU1lZGl1bVwiXSA9IFwiSGVsdmV0aWNhXCI7XG4gIHRbXCJJdGNTeW1ib2wtTWVkaXVtSXRhbGljXCJdID0gXCJIZWx2ZXRpY2EtT2JsaXF1ZVwiO1xuICB0Lkx1Y2lkYUNvbnNvbGUgPSBcIkNvdXJpZXJcIjtcbiAgdFtcIkx1Y2lkYUNvbnNvbGUtQm9sZFwiXSA9IFwiQ291cmllci1Cb2xkXCI7XG4gIHRbXCJMdWNpZGFDb25zb2xlLUJvbGRJdGFsaWNcIl0gPSBcIkNvdXJpZXItQm9sZE9ibGlxdWVcIjtcbiAgdFtcIkx1Y2lkYUNvbnNvbGUtSXRhbGljXCJdID0gXCJDb3VyaWVyLU9ibGlxdWVcIjtcbiAgdFtcIkx1Y2lkYVNhbnMtRGVtaVwiXSA9IFwiSGVsdmV0aWNhLUJvbGRcIjtcbiAgdFtcIk1TLUdvdGhpY1wiXSA9IFwiTVMgR290aGljXCI7XG4gIHRbXCJNUy1Hb3RoaWMtQm9sZFwiXSA9IFwiTVMgR290aGljLUJvbGRcIjtcbiAgdFtcIk1TLUdvdGhpYy1Cb2xkSXRhbGljXCJdID0gXCJNUyBHb3RoaWMtQm9sZEl0YWxpY1wiO1xuICB0W1wiTVMtR290aGljLUl0YWxpY1wiXSA9IFwiTVMgR290aGljLUl0YWxpY1wiO1xuICB0W1wiTVMtTWluY2hvXCJdID0gXCJNUyBNaW5jaG9cIjtcbiAgdFtcIk1TLU1pbmNoby1Cb2xkXCJdID0gXCJNUyBNaW5jaG8tQm9sZFwiO1xuICB0W1wiTVMtTWluY2hvLUJvbGRJdGFsaWNcIl0gPSBcIk1TIE1pbmNoby1Cb2xkSXRhbGljXCI7XG4gIHRbXCJNUy1NaW5jaG8tSXRhbGljXCJdID0gXCJNUyBNaW5jaG8tSXRhbGljXCI7XG4gIHRbXCJNUy1QR290aGljXCJdID0gXCJNUyBQR290aGljXCI7XG4gIHRbXCJNUy1QR290aGljLUJvbGRcIl0gPSBcIk1TIFBHb3RoaWMtQm9sZFwiO1xuICB0W1wiTVMtUEdvdGhpYy1Cb2xkSXRhbGljXCJdID0gXCJNUyBQR290aGljLUJvbGRJdGFsaWNcIjtcbiAgdFtcIk1TLVBHb3RoaWMtSXRhbGljXCJdID0gXCJNUyBQR290aGljLUl0YWxpY1wiO1xuICB0W1wiTVMtUE1pbmNob1wiXSA9IFwiTVMgUE1pbmNob1wiO1xuICB0W1wiTVMtUE1pbmNoby1Cb2xkXCJdID0gXCJNUyBQTWluY2hvLUJvbGRcIjtcbiAgdFtcIk1TLVBNaW5jaG8tQm9sZEl0YWxpY1wiXSA9IFwiTVMgUE1pbmNoby1Cb2xkSXRhbGljXCI7XG4gIHRbXCJNUy1QTWluY2hvLUl0YWxpY1wiXSA9IFwiTVMgUE1pbmNoby1JdGFsaWNcIjtcbiAgdC5OdXB0aWFsU2NyaXB0ID0gXCJUaW1lcy1JdGFsaWNcIjtcbiAgdC5TZWdvZVVJU3ltYm9sID0gXCJIZWx2ZXRpY2FcIjtcbiAgdC5XaW5nZGluZ3MgPSBcIlphcGZEaW5nYmF0c1wiO1xuICB0W1wiV2luZ2RpbmdzLVJlZ3VsYXJcIl0gPSBcIlphcGZEaW5nYmF0c1wiO1xufSk7XG5leHBvcnRzLmdldE5vblN0ZEZvbnRNYXAgPSBnZXROb25TdGRGb250TWFwO1xuY29uc3QgZ2V0U2VyaWZGb250cyA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gIHRbXCJBZG9iZSBKZW5zb25cIl0gPSB0cnVlO1xuICB0W1wiQWRvYmUgVGV4dFwiXSA9IHRydWU7XG4gIHQuQWxiZXJ0dXMgPSB0cnVlO1xuICB0LkFsZHVzID0gdHJ1ZTtcbiAgdC5BbGV4YW5kcmlhID0gdHJ1ZTtcbiAgdC5BbGdlcmlhbiA9IHRydWU7XG4gIHRbXCJBbWVyaWNhbiBUeXBld3JpdGVyXCJdID0gdHJ1ZTtcbiAgdC5BbnRpcXVhID0gdHJ1ZTtcbiAgdC5BcGV4ID0gdHJ1ZTtcbiAgdC5Bcm5vID0gdHJ1ZTtcbiAgdC5Bc3RlciA9IHRydWU7XG4gIHQuQXVyb3JhID0gdHJ1ZTtcbiAgdC5CYXNrZXJ2aWxsZSA9IHRydWU7XG4gIHQuQmVsbCA9IHRydWU7XG4gIHQuQmVtYm8gPSB0cnVlO1xuICB0W1wiQmVtYm8gU2Nob29sYm9va1wiXSA9IHRydWU7XG4gIHQuQmVuZ3VpYXQgPSB0cnVlO1xuICB0W1wiQmVya2VsZXkgT2xkIFN0eWxlXCJdID0gdHJ1ZTtcbiAgdFtcIkJlcm5oYXJkIE1vZGVyblwiXSA9IHRydWU7XG4gIHRbXCJCZXJ0aG9sZCBDaXR5XCJdID0gdHJ1ZTtcbiAgdC5Cb2RvbmkgPSB0cnVlO1xuICB0W1wiQmF1ZXIgQm9kb25pXCJdID0gdHJ1ZTtcbiAgdFtcIkJvb2sgQW50aXF1YVwiXSA9IHRydWU7XG4gIHQuQm9va21hbiA9IHRydWU7XG4gIHRbXCJCb3JkZWF1eCBSb21hblwiXSA9IHRydWU7XG4gIHRbXCJDYWxpZm9ybmlhbiBGQlwiXSA9IHRydWU7XG4gIHQuQ2FsaXN0byA9IHRydWU7XG4gIHQuQ2FsdmVydCA9IHRydWU7XG4gIHQuQ2FwaXRhbHMgPSB0cnVlO1xuICB0LkNhbWJyaWEgPSB0cnVlO1xuICB0LkNhcnRpZXIgPSB0cnVlO1xuICB0LkNhc2xvbiA9IHRydWU7XG4gIHQuQ2F0dWxsID0gdHJ1ZTtcbiAgdC5DZW50YXVyID0gdHJ1ZTtcbiAgdFtcIkNlbnR1cnkgT2xkIFN0eWxlXCJdID0gdHJ1ZTtcbiAgdFtcIkNlbnR1cnkgU2Nob29sYm9va1wiXSA9IHRydWU7XG4gIHQuQ2hhcGFycmFsID0gdHJ1ZTtcbiAgdFtcIkNoYXJpcyBTSUxcIl0gPSB0cnVlO1xuICB0LkNoZWx0ZW5oYW0gPSB0cnVlO1xuICB0W1wiQ2hvbGxhIFNsYWJcIl0gPSB0cnVlO1xuICB0LkNsYXJlbmRvbiA9IHRydWU7XG4gIHQuQ2xlYXJmYWNlID0gdHJ1ZTtcbiAgdC5Db2NoaW4gPSB0cnVlO1xuICB0LkNvbG9ubmEgPSB0cnVlO1xuICB0W1wiQ29tcHV0ZXIgTW9kZXJuXCJdID0gdHJ1ZTtcbiAgdFtcIkNvbmNyZXRlIFJvbWFuXCJdID0gdHJ1ZTtcbiAgdC5Db25zdGFudGlhID0gdHJ1ZTtcbiAgdFtcIkNvb3BlciBCbGFja1wiXSA9IHRydWU7XG4gIHQuQ29yb25hID0gdHJ1ZTtcbiAgdC5FY290eXBlID0gdHJ1ZTtcbiAgdC5FZ3lwdGllbm5lID0gdHJ1ZTtcbiAgdC5FbGVwaGFudCA9IHRydWU7XG4gIHQuRXhjZWxzaW9yID0gdHJ1ZTtcbiAgdC5GYWlyZmllbGQgPSB0cnVlO1xuICB0W1wiRkYgU2NhbGFcIl0gPSB0cnVlO1xuICB0LkZvbGthcmQgPSB0cnVlO1xuICB0LkZvb3RsaWdodCA9IHRydWU7XG4gIHQuRnJlZVNlcmlmID0gdHJ1ZTtcbiAgdFtcIkZyaXogUXVhZHJhdGFcIl0gPSB0cnVlO1xuICB0LkdhcmFtb25kID0gdHJ1ZTtcbiAgdC5HZW50aXVtID0gdHJ1ZTtcbiAgdC5HZW9yZ2lhID0gdHJ1ZTtcbiAgdC5HbG91Y2VzdGVyID0gdHJ1ZTtcbiAgdFtcIkdvdWR5IE9sZCBTdHlsZVwiXSA9IHRydWU7XG4gIHRbXCJHb3VkeSBTY2hvb2xib29rXCJdID0gdHJ1ZTtcbiAgdFtcIkdvdWR5IFBybyBGb250XCJdID0gdHJ1ZTtcbiAgdC5HcmFuam9uID0gdHJ1ZTtcbiAgdFtcIkd1YXJkaWFuIEVneXB0aWFuXCJdID0gdHJ1ZTtcbiAgdC5IZWF0aGVyID0gdHJ1ZTtcbiAgdC5IZXJjdWxlcyA9IHRydWU7XG4gIHRbXCJIaWdoIFRvd2VyIFRleHRcIl0gPSB0cnVlO1xuICB0Lkhpcm9zaGlnZSA9IHRydWU7XG4gIHRbXCJIb2VmbGVyIFRleHRcIl0gPSB0cnVlO1xuICB0W1wiSHVtYW5hIFNlcmlmXCJdID0gdHJ1ZTtcbiAgdC5JbXByaW50ID0gdHJ1ZTtcbiAgdFtcIklvbmljIE5vLiA1XCJdID0gdHJ1ZTtcbiAgdC5KYW5zb24gPSB0cnVlO1xuICB0LkpvYW5uYSA9IHRydWU7XG4gIHQuS29yaW5uYSA9IHRydWU7XG4gIHQuTGV4aWNvbiA9IHRydWU7XG4gIHQuTGliZXJhdGlvblNlcmlmID0gdHJ1ZTtcbiAgdFtcIkxpYmVyYXRpb24gU2VyaWZcIl0gPSB0cnVlO1xuICB0W1wiTGludXggTGliZXJ0aW5lXCJdID0gdHJ1ZTtcbiAgdC5MaXRlcmF0dXJuYXlhID0gdHJ1ZTtcbiAgdC5MdWNpZGEgPSB0cnVlO1xuICB0W1wiTHVjaWRhIEJyaWdodFwiXSA9IHRydWU7XG4gIHQuTWVsaW9yID0gdHJ1ZTtcbiAgdC5NZW1waGlzID0gdHJ1ZTtcbiAgdC5NaWxsZXIgPSB0cnVlO1xuICB0Lk1pbmlvbiA9IHRydWU7XG4gIHQuTW9kZXJuID0gdHJ1ZTtcbiAgdFtcIk1vbmEgTGlzYVwiXSA9IHRydWU7XG4gIHRbXCJNcnMgRWF2ZXNcIl0gPSB0cnVlO1xuICB0W1wiTVMgU2VyaWZcIl0gPSB0cnVlO1xuICB0W1wiTXVzZW8gU2xhYlwiXSA9IHRydWU7XG4gIHRbXCJOZXcgWW9ya1wiXSA9IHRydWU7XG4gIHRbXCJOaW1idXMgUm9tYW5cIl0gPSB0cnVlO1xuICB0W1wiTlBTIFJhd2xpbnNvbiBSb2Fkd2F5XCJdID0gdHJ1ZTtcbiAgdC5OdXB0aWFsU2NyaXB0ID0gdHJ1ZTtcbiAgdC5QYWxhdGlubyA9IHRydWU7XG4gIHQuUGVycGV0dWEgPSB0cnVlO1xuICB0LlBsYW50aW4gPSB0cnVlO1xuICB0W1wiUGxhbnRpbiBTY2hvb2xib29rXCJdID0gdHJ1ZTtcbiAgdC5QbGF5YmlsbCA9IHRydWU7XG4gIHRbXCJQb29yIFJpY2hhcmRcIl0gPSB0cnVlO1xuICB0W1wiUmF3bGluc29uIFJvYWR3YXlcIl0gPSB0cnVlO1xuICB0LlJlbmF1bHQgPSB0cnVlO1xuICB0LlJlcXVpZW0gPSB0cnVlO1xuICB0LlJvY2t3ZWxsID0gdHJ1ZTtcbiAgdC5Sb21hbiA9IHRydWU7XG4gIHRbXCJSb3RpcyBTZXJpZlwiXSA9IHRydWU7XG4gIHQuU2Fib24gPSB0cnVlO1xuICB0LlNjYWxhID0gdHJ1ZTtcbiAgdC5TZWFndWxsID0gdHJ1ZTtcbiAgdC5TaXN0aW5hID0gdHJ1ZTtcbiAgdC5Tb3V2ZW5pciA9IHRydWU7XG4gIHQuU1RJWCA9IHRydWU7XG4gIHRbXCJTdG9uZSBJbmZvcm1hbFwiXSA9IHRydWU7XG4gIHRbXCJTdG9uZSBTZXJpZlwiXSA9IHRydWU7XG4gIHQuU3lsZmFlbiA9IHRydWU7XG4gIHQuVGltZXMgPSB0cnVlO1xuICB0LlRyYWphbiA9IHRydWU7XG4gIHRbXCJUcmluaXTDqVwiXSA9IHRydWU7XG4gIHRbXCJUcnVtcCBNZWRpYWV2YWxcIl0gPSB0cnVlO1xuICB0LlV0b3BpYSA9IHRydWU7XG4gIHRbXCJWYWxlIFR5cGVcIl0gPSB0cnVlO1xuICB0W1wiQml0c3RyZWFtIFZlcmFcIl0gPSB0cnVlO1xuICB0W1wiVmVyYSBTZXJpZlwiXSA9IHRydWU7XG4gIHQuVmVyc2FpbGxlcyA9IHRydWU7XG4gIHQuV2FudGVkID0gdHJ1ZTtcbiAgdC5XZWlzcyA9IHRydWU7XG4gIHRbXCJXaWRlIExhdGluXCJdID0gdHJ1ZTtcbiAgdC5XaW5kc29yID0gdHJ1ZTtcbiAgdC5YSVRTID0gdHJ1ZTtcbn0pO1xuZXhwb3J0cy5nZXRTZXJpZkZvbnRzID0gZ2V0U2VyaWZGb250cztcbmNvbnN0IGdldFN5bWJvbHNGb250cyA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gIHQuRGluZ2JhdHMgPSB0cnVlO1xuICB0LlN5bWJvbCA9IHRydWU7XG4gIHQuWmFwZkRpbmdiYXRzID0gdHJ1ZTtcbn0pO1xuZXhwb3J0cy5nZXRTeW1ib2xzRm9udHMgPSBnZXRTeW1ib2xzRm9udHM7XG5jb25zdCBnZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICB0WzJdID0gMTA7XG4gIHRbM10gPSAzMjtcbiAgdFs0XSA9IDMzO1xuICB0WzVdID0gMzQ7XG4gIHRbNl0gPSAzNTtcbiAgdFs3XSA9IDM2O1xuICB0WzhdID0gMzc7XG4gIHRbOV0gPSAzODtcbiAgdFsxMF0gPSAzOTtcbiAgdFsxMV0gPSA0MDtcbiAgdFsxMl0gPSA0MTtcbiAgdFsxM10gPSA0MjtcbiAgdFsxNF0gPSA0MztcbiAgdFsxNV0gPSA0NDtcbiAgdFsxNl0gPSA0NTtcbiAgdFsxN10gPSA0NjtcbiAgdFsxOF0gPSA0NztcbiAgdFsxOV0gPSA0ODtcbiAgdFsyMF0gPSA0OTtcbiAgdFsyMV0gPSA1MDtcbiAgdFsyMl0gPSA1MTtcbiAgdFsyM10gPSA1MjtcbiAgdFsyNF0gPSA1MztcbiAgdFsyNV0gPSA1NDtcbiAgdFsyNl0gPSA1NTtcbiAgdFsyN10gPSA1NjtcbiAgdFsyOF0gPSA1NztcbiAgdFsyOV0gPSA1ODtcbiAgdFszMF0gPSA4OTQ7XG4gIHRbMzFdID0gNjA7XG4gIHRbMzJdID0gNjE7XG4gIHRbMzNdID0gNjI7XG4gIHRbMzRdID0gNjM7XG4gIHRbMzVdID0gNjQ7XG4gIHRbMzZdID0gNjU7XG4gIHRbMzddID0gNjY7XG4gIHRbMzhdID0gNjc7XG4gIHRbMzldID0gNjg7XG4gIHRbNDBdID0gNjk7XG4gIHRbNDFdID0gNzA7XG4gIHRbNDJdID0gNzE7XG4gIHRbNDNdID0gNzI7XG4gIHRbNDRdID0gNzM7XG4gIHRbNDVdID0gNzQ7XG4gIHRbNDZdID0gNzU7XG4gIHRbNDddID0gNzY7XG4gIHRbNDhdID0gNzc7XG4gIHRbNDldID0gNzg7XG4gIHRbNTBdID0gNzk7XG4gIHRbNTFdID0gODA7XG4gIHRbNTJdID0gODE7XG4gIHRbNTNdID0gODI7XG4gIHRbNTRdID0gODM7XG4gIHRbNTVdID0gODQ7XG4gIHRbNTZdID0gODU7XG4gIHRbNTddID0gODY7XG4gIHRbNThdID0gODc7XG4gIHRbNTldID0gODg7XG4gIHRbNjBdID0gODk7XG4gIHRbNjFdID0gOTA7XG4gIHRbNjJdID0gOTE7XG4gIHRbNjNdID0gOTI7XG4gIHRbNjRdID0gOTM7XG4gIHRbNjVdID0gOTQ7XG4gIHRbNjZdID0gOTU7XG4gIHRbNjddID0gOTY7XG4gIHRbNjhdID0gOTc7XG4gIHRbNjldID0gOTg7XG4gIHRbNzBdID0gOTk7XG4gIHRbNzFdID0gMTAwO1xuICB0WzcyXSA9IDEwMTtcbiAgdFs3M10gPSAxMDI7XG4gIHRbNzRdID0gMTAzO1xuICB0Wzc1XSA9IDEwNDtcbiAgdFs3Nl0gPSAxMDU7XG4gIHRbNzddID0gMTA2O1xuICB0Wzc4XSA9IDEwNztcbiAgdFs3OV0gPSAxMDg7XG4gIHRbODBdID0gMTA5O1xuICB0WzgxXSA9IDExMDtcbiAgdFs4Ml0gPSAxMTE7XG4gIHRbODNdID0gMTEyO1xuICB0Wzg0XSA9IDExMztcbiAgdFs4NV0gPSAxMTQ7XG4gIHRbODZdID0gMTE1O1xuICB0Wzg3XSA9IDExNjtcbiAgdFs4OF0gPSAxMTc7XG4gIHRbODldID0gMTE4O1xuICB0WzkwXSA9IDExOTtcbiAgdFs5MV0gPSAxMjA7XG4gIHRbOTJdID0gMTIxO1xuICB0WzkzXSA9IDEyMjtcbiAgdFs5NF0gPSAxMjM7XG4gIHRbOTVdID0gMTI0O1xuICB0Wzk2XSA9IDEyNTtcbiAgdFs5N10gPSAxMjY7XG4gIHRbOThdID0gMTk2O1xuICB0Wzk5XSA9IDE5NztcbiAgdFsxMDBdID0gMTk5O1xuICB0WzEwMV0gPSAyMDE7XG4gIHRbMTAyXSA9IDIwOTtcbiAgdFsxMDNdID0gMjE0O1xuICB0WzEwNF0gPSAyMjA7XG4gIHRbMTA1XSA9IDIyNTtcbiAgdFsxMDZdID0gMjI0O1xuICB0WzEwN10gPSAyMjY7XG4gIHRbMTA4XSA9IDIyODtcbiAgdFsxMDldID0gMjI3O1xuICB0WzExMF0gPSAyMjk7XG4gIHRbMTExXSA9IDIzMTtcbiAgdFsxMTJdID0gMjMzO1xuICB0WzExM10gPSAyMzI7XG4gIHRbMTE0XSA9IDIzNDtcbiAgdFsxMTVdID0gMjM1O1xuICB0WzExNl0gPSAyMzc7XG4gIHRbMTE3XSA9IDIzNjtcbiAgdFsxMThdID0gMjM4O1xuICB0WzExOV0gPSAyMzk7XG4gIHRbMTIwXSA9IDI0MTtcbiAgdFsxMjFdID0gMjQzO1xuICB0WzEyMl0gPSAyNDI7XG4gIHRbMTIzXSA9IDI0NDtcbiAgdFsxMjRdID0gMjQ2O1xuICB0WzEyNV0gPSAyNDU7XG4gIHRbMTI2XSA9IDI1MDtcbiAgdFsxMjddID0gMjQ5O1xuICB0WzEyOF0gPSAyNTE7XG4gIHRbMTI5XSA9IDI1MjtcbiAgdFsxMzBdID0gODIyNDtcbiAgdFsxMzFdID0gMTc2O1xuICB0WzEzMl0gPSAxNjI7XG4gIHRbMTMzXSA9IDE2MztcbiAgdFsxMzRdID0gMTY3O1xuICB0WzEzNV0gPSA4MjI2O1xuICB0WzEzNl0gPSAxODI7XG4gIHRbMTM3XSA9IDIyMztcbiAgdFsxMzhdID0gMTc0O1xuICB0WzEzOV0gPSAxNjk7XG4gIHRbMTQwXSA9IDg0ODI7XG4gIHRbMTQxXSA9IDE4MDtcbiAgdFsxNDJdID0gMTY4O1xuICB0WzE0M10gPSA4ODAwO1xuICB0WzE0NF0gPSAxOTg7XG4gIHRbMTQ1XSA9IDIxNjtcbiAgdFsxNDZdID0gODczNDtcbiAgdFsxNDddID0gMTc3O1xuICB0WzE0OF0gPSA4ODA0O1xuICB0WzE0OV0gPSA4ODA1O1xuICB0WzE1MF0gPSAxNjU7XG4gIHRbMTUxXSA9IDE4MTtcbiAgdFsxNTJdID0gODcwNjtcbiAgdFsxNTNdID0gODcyMTtcbiAgdFsxNTRdID0gODcxOTtcbiAgdFsxNTZdID0gODc0NztcbiAgdFsxNTddID0gMTcwO1xuICB0WzE1OF0gPSAxODY7XG4gIHRbMTU5XSA9IDg0ODY7XG4gIHRbMTYwXSA9IDIzMDtcbiAgdFsxNjFdID0gMjQ4O1xuICB0WzE2Ml0gPSAxOTE7XG4gIHRbMTYzXSA9IDE2MTtcbiAgdFsxNjRdID0gMTcyO1xuICB0WzE2NV0gPSA4NzMwO1xuICB0WzE2Nl0gPSA0MDI7XG4gIHRbMTY3XSA9IDg3NzY7XG4gIHRbMTY4XSA9IDg3MTA7XG4gIHRbMTY5XSA9IDE3MTtcbiAgdFsxNzBdID0gMTg3O1xuICB0WzE3MV0gPSA4MjMwO1xuICB0WzIwMF0gPSAxOTM7XG4gIHRbMjAzXSA9IDIwNTtcbiAgdFsyMTBdID0gMjE4O1xuICB0WzIyM10gPSA3MTE7XG4gIHRbMjI0XSA9IDMyMTtcbiAgdFsyMjVdID0gMzIyO1xuICB0WzIyNl0gPSAzNTI7XG4gIHRbMjI3XSA9IDM1MztcbiAgdFsyMjhdID0gMzgxO1xuICB0WzIyOV0gPSAzODI7XG4gIHRbMjMzXSA9IDIyMTtcbiAgdFsyMzRdID0gMjUzO1xuICB0WzI1Ml0gPSAyNjM7XG4gIHRbMjUzXSA9IDI2ODtcbiAgdFsyNTRdID0gMjY5O1xuICB0WzI1OF0gPSAyNTg7XG4gIHRbMjYwXSA9IDI2MDtcbiAgdFsyNjFdID0gMjYxO1xuICB0WzI2NV0gPSAyODA7XG4gIHRbMjY2XSA9IDI4MTtcbiAgdFsyNjddID0gMjgyO1xuICB0WzI2OF0gPSAyODM7XG4gIHRbMjY5XSA9IDMxMztcbiAgdFsyNzVdID0gMzIzO1xuICB0WzI3Nl0gPSAzMjQ7XG4gIHRbMjc4XSA9IDMyODtcbiAgdFsyODNdID0gMzQ0O1xuICB0WzI4NF0gPSAzNDU7XG4gIHRbMjg1XSA9IDM0NjtcbiAgdFsyODZdID0gMzQ3O1xuICB0WzI5Ml0gPSAzNjc7XG4gIHRbMjk1XSA9IDM3NztcbiAgdFsyOTZdID0gMzc4O1xuICB0WzI5OF0gPSAzODA7XG4gIHRbMzA1XSA9IDk2MztcbiAgdFszMDZdID0gOTY0O1xuICB0WzMwN10gPSA5NjY7XG4gIHRbMzA4XSA9IDgyMTU7XG4gIHRbMzA5XSA9IDgyNTI7XG4gIHRbMzEwXSA9IDgzMTk7XG4gIHRbMzExXSA9IDgzNTk7XG4gIHRbMzEyXSA9IDg1OTI7XG4gIHRbMzEzXSA9IDg1OTM7XG4gIHRbMzM3XSA9IDk1NTI7XG4gIHRbNDkzXSA9IDEwMzk7XG4gIHRbNDk0XSA9IDEwNDA7XG4gIHRbNzA1XSA9IDE1MjQ7XG4gIHRbNzA2XSA9IDgzNjI7XG4gIHRbNzEwXSA9IDY0Mjg4O1xuICB0WzcxMV0gPSA2NDI5ODtcbiAgdFs3NTldID0gMTYxNztcbiAgdFs3NjFdID0gMTc3NjtcbiAgdFs3NjNdID0gMTc3ODtcbiAgdFs3NzVdID0gMTY1MjtcbiAgdFs3NzddID0gMTc2NDtcbiAgdFs3NzhdID0gMTc4MDtcbiAgdFs3NzldID0gMTc4MTtcbiAgdFs3ODBdID0gMTc4MjtcbiAgdFs3ODJdID0gNzcxO1xuICB0Wzc4M10gPSA2NDcyNjtcbiAgdFs3ODZdID0gODM2MztcbiAgdFs3ODhdID0gODUzMjtcbiAgdFs3OTBdID0gNzY4O1xuICB0Wzc5MV0gPSA3Njk7XG4gIHRbNzkyXSA9IDc2ODtcbiAgdFs3OTVdID0gODAzO1xuICB0Wzc5N10gPSA2NDMzNjtcbiAgdFs3OThdID0gNjQzMzc7XG4gIHRbNzk5XSA9IDY0MzQyO1xuICB0WzgwMF0gPSA2NDM0MztcbiAgdFs4MDFdID0gNjQzNDQ7XG4gIHRbODAyXSA9IDY0MzQ1O1xuICB0WzgwM10gPSA2NDM2MjtcbiAgdFs4MDRdID0gNjQzNjM7XG4gIHRbODA1XSA9IDY0MzY0O1xuICB0WzI0MjRdID0gNzgyMTtcbiAgdFsyNDI1XSA9IDc4MjI7XG4gIHRbMjQyNl0gPSA3ODIzO1xuICB0WzI0MjddID0gNzgyNDtcbiAgdFsyNDI4XSA9IDc4MjU7XG4gIHRbMjQyOV0gPSA3ODI2O1xuICB0WzI0MzBdID0gNzgyNztcbiAgdFsyNDMzXSA9IDc2ODI7XG4gIHRbMjY3OF0gPSA4MDQ1O1xuICB0WzI2NzldID0gODA0NjtcbiAgdFsyODMwXSA9IDE1NTI7XG4gIHRbMjgzOF0gPSA2ODY7XG4gIHRbMjg0MF0gPSA3NTE7XG4gIHRbMjg0Ml0gPSA3NTM7XG4gIHRbMjg0M10gPSA3NTQ7XG4gIHRbMjg0NF0gPSA3NTU7XG4gIHRbMjg0Nl0gPSA3NTc7XG4gIHRbMjg1Nl0gPSA3Njc7XG4gIHRbMjg1N10gPSA4NDg7XG4gIHRbMjg1OF0gPSA4NDk7XG4gIHRbMjg2Ml0gPSA4NTM7XG4gIHRbMjg2M10gPSA4NTQ7XG4gIHRbMjg2NF0gPSA4NTU7XG4gIHRbMjg2NV0gPSA4NjE7XG4gIHRbMjg2Nl0gPSA4NjI7XG4gIHRbMjkwNl0gPSA3NDYwO1xuICB0WzI5MDhdID0gNzQ2MjtcbiAgdFsyOTA5XSA9IDc0NjM7XG4gIHRbMjkxMF0gPSA3NDY0O1xuICB0WzI5MTJdID0gNzQ2NjtcbiAgdFsyOTEzXSA9IDc0Njc7XG4gIHRbMjkxNF0gPSA3NDY4O1xuICB0WzI5MTZdID0gNzQ3MDtcbiAgdFsyOTE3XSA9IDc0NzE7XG4gIHRbMjkxOF0gPSA3NDcyO1xuICB0WzI5MjBdID0gNzQ3NDtcbiAgdFsyOTIxXSA9IDc0NzU7XG4gIHRbMjkyMl0gPSA3NDc2O1xuICB0WzI5MjRdID0gNzQ3ODtcbiAgdFsyOTI1XSA9IDc0Nzk7XG4gIHRbMjkyNl0gPSA3NDgwO1xuICB0WzI5MjhdID0gNzQ4MjtcbiAgdFsyOTI5XSA9IDc0ODM7XG4gIHRbMjkzMF0gPSA3NDg0O1xuICB0WzI5MzJdID0gNzQ4NjtcbiAgdFsyOTMzXSA9IDc0ODc7XG4gIHRbMjkzNF0gPSA3NDg4O1xuICB0WzI5MzZdID0gNzQ5MDtcbiAgdFsyOTM3XSA9IDc0OTE7XG4gIHRbMjkzOF0gPSA3NDkyO1xuICB0WzI5NDBdID0gNzQ5NDtcbiAgdFsyOTQxXSA9IDc0OTU7XG4gIHRbMjk0Ml0gPSA3NDk2O1xuICB0WzI5NDRdID0gNzQ5ODtcbiAgdFsyOTQ2XSA9IDc1MDA7XG4gIHRbMjk0OF0gPSA3NTAyO1xuICB0WzI5NTBdID0gNzUwNDtcbiAgdFsyOTUxXSA9IDc1MDU7XG4gIHRbMjk1Ml0gPSA3NTA2O1xuICB0WzI5NTRdID0gNzUwODtcbiAgdFsyOTU1XSA9IDc1MDk7XG4gIHRbMjk1Nl0gPSA3NTEwO1xuICB0WzI5NThdID0gNzUxMjtcbiAgdFsyOTU5XSA9IDc1MTM7XG4gIHRbMjk2MF0gPSA3NTE0O1xuICB0WzI5NjJdID0gNzUxNjtcbiAgdFsyOTYzXSA9IDc1MTc7XG4gIHRbMjk2NF0gPSA3NTE4O1xuICB0WzI5NjZdID0gNzUyMDtcbiAgdFsyOTY3XSA9IDc1MjE7XG4gIHRbMjk2OF0gPSA3NTIyO1xuICB0WzI5NzBdID0gNzUyNDtcbiAgdFsyOTcxXSA9IDc1MjU7XG4gIHRbMjk3Ml0gPSA3NTI2O1xuICB0WzI5NzRdID0gNzUyODtcbiAgdFsyOTc1XSA9IDc1Mjk7XG4gIHRbMjk3Nl0gPSA3NTMwO1xuICB0WzI5NzhdID0gMTUzNztcbiAgdFsyOTc5XSA9IDE1Mzg7XG4gIHRbMjk4MF0gPSAxNTM5O1xuICB0WzI5ODJdID0gMTU0OTtcbiAgdFsyOTgzXSA9IDE1NTE7XG4gIHRbMjk4NF0gPSAxNTUyO1xuICB0WzI5ODZdID0gMTU1NDtcbiAgdFsyOTg3XSA9IDE1NTU7XG4gIHRbMjk4OF0gPSAxNTU2O1xuICB0WzI5OTBdID0gMTYyMztcbiAgdFsyOTkxXSA9IDE2MjQ7XG4gIHRbMjk5NV0gPSAxNzc1O1xuICB0WzI5OTldID0gMTc5MTtcbiAgdFszMDAyXSA9IDY0MjkwO1xuICB0WzMwMDNdID0gNjQyOTE7XG4gIHRbMzAwNF0gPSA2NDI5MjtcbiAgdFszMDA2XSA9IDY0Mjk0O1xuICB0WzMwMDddID0gNjQyOTU7XG4gIHRbMzAwOF0gPSA2NDI5NjtcbiAgdFszMDExXSA9IDE5MDA7XG4gIHRbMzAxNF0gPSA4MjIzO1xuICB0WzMwMTVdID0gODI0NDtcbiAgdFszMDE3XSA9IDc1MzI7XG4gIHRbMzAxOF0gPSA3NTMzO1xuICB0WzMwMTldID0gNzUzNDtcbiAgdFszMDc1XSA9IDc1OTA7XG4gIHRbMzA3Nl0gPSA3NTkxO1xuICB0WzMwNzldID0gNzU5NDtcbiAgdFszMDgwXSA9IDc1OTU7XG4gIHRbMzA4M10gPSA3NTk4O1xuICB0WzMwODRdID0gNzU5OTtcbiAgdFszMDg3XSA9IDc2MDI7XG4gIHRbMzA4OF0gPSA3NjAzO1xuICB0WzMwOTFdID0gNzYwNjtcbiAgdFszMDkyXSA9IDc2MDc7XG4gIHRbMzA5NV0gPSA3NjEwO1xuICB0WzMwOTZdID0gNzYxMTtcbiAgdFszMDk5XSA9IDc2MTQ7XG4gIHRbMzEwMF0gPSA3NjE1O1xuICB0WzMxMDNdID0gNzYxODtcbiAgdFszMTA0XSA9IDc2MTk7XG4gIHRbMzEwN10gPSA4MzM3O1xuICB0WzMxMDhdID0gODMzODtcbiAgdFszMTE2XSA9IDE4ODQ7XG4gIHRbMzExOV0gPSAxODg1O1xuICB0WzMxMjBdID0gMTg4NTtcbiAgdFszMTIzXSA9IDE4ODY7XG4gIHRbMzEyNF0gPSAxODg2O1xuICB0WzMxMjddID0gMTg4NztcbiAgdFszMTI4XSA9IDE4ODc7XG4gIHRbMzEzMV0gPSAxODg4O1xuICB0WzMxMzJdID0gMTg4ODtcbiAgdFszMTM1XSA9IDE4ODk7XG4gIHRbMzEzNl0gPSAxODg5O1xuICB0WzMxMzldID0gMTg5MDtcbiAgdFszMTQwXSA9IDE4OTA7XG4gIHRbMzE0M10gPSAxODkxO1xuICB0WzMxNDRdID0gMTg5MTtcbiAgdFszMTQ3XSA9IDE4OTI7XG4gIHRbMzE0OF0gPSAxODkyO1xuICB0WzMxNTNdID0gNTgwO1xuICB0WzMxNTRdID0gNTgxO1xuICB0WzMxNTddID0gNTg0O1xuICB0WzMxNThdID0gNTg1O1xuICB0WzMxNjFdID0gNTg4O1xuICB0WzMxNjJdID0gNTg5O1xuICB0WzMxNjVdID0gODkxO1xuICB0WzMxNjZdID0gODkyO1xuICB0WzMxNjldID0gMTI3NDtcbiAgdFszMTcwXSA9IDEyNzU7XG4gIHRbMzE3M10gPSAxMjc4O1xuICB0WzMxNzRdID0gMTI3OTtcbiAgdFszMTgxXSA9IDc2MjI7XG4gIHRbMzE4Ml0gPSA3NjIzO1xuICB0WzMyODJdID0gMTE3OTk7XG4gIHRbMzMxNl0gPSA1Nzg7XG4gIHRbMzM3OV0gPSA0Mjc4NTtcbiAgdFszMzkzXSA9IDExNTk7XG4gIHRbMzQxNl0gPSA4Mzc3O1xufSk7XG5leHBvcnRzLmdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cyA9IGdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cztcbmNvbnN0IGdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjayA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gIHRbMjI3XSA9IDMyMjtcbiAgdFsyNjRdID0gMjYxO1xuICB0WzI5MV0gPSAzNDY7XG59KTtcbmV4cG9ydHMuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrID0gZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrO1xuY29uc3QgZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpID0gKDAsIF9jb3JlX3V0aWxzLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgdFsxXSA9IDMyO1xuICB0WzRdID0gNjU7XG4gIHRbNl0gPSAxOTM7XG4gIHRbMTddID0gNjY7XG4gIHRbMThdID0gNjc7XG4gIHRbMjFdID0gMjY4O1xuICB0WzI0XSA9IDY4O1xuICB0WzI4XSA9IDY5O1xuICB0WzMwXSA9IDIwMTtcbiAgdFszMl0gPSAyODI7XG4gIHRbMzhdID0gNzA7XG4gIHRbMzldID0gNzE7XG4gIHRbNDRdID0gNzI7XG4gIHRbNDddID0gNzM7XG4gIHRbNDldID0gMjA1O1xuICB0WzU4XSA9IDc0O1xuICB0WzYwXSA9IDc1O1xuICB0WzYyXSA9IDc2O1xuICB0WzY4XSA9IDc3O1xuICB0WzY5XSA9IDc4O1xuICB0Wzc1XSA9IDc5O1xuICB0Wzg3XSA9IDgwO1xuICB0Wzg5XSA9IDgxO1xuICB0WzkwXSA9IDgyO1xuICB0WzkyXSA9IDM0NDtcbiAgdFs5NF0gPSA4MztcbiAgdFs5N10gPSAzNTI7XG4gIHRbMTAwXSA9IDg0O1xuICB0WzEwNF0gPSA4NTtcbiAgdFsxMTVdID0gODY7XG4gIHRbMTE2XSA9IDg3O1xuICB0WzEyMV0gPSA4ODtcbiAgdFsxMjJdID0gODk7XG4gIHRbMTI0XSA9IDIyMTtcbiAgdFsxMjddID0gOTA7XG4gIHRbMTI5XSA9IDM4MTtcbiAgdFsyNThdID0gOTc7XG4gIHRbMjYwXSA9IDIyNTtcbiAgdFsyNjhdID0gMjYxO1xuICB0WzI3MV0gPSA5ODtcbiAgdFsyNzJdID0gOTk7XG4gIHRbMjczXSA9IDI2MztcbiAgdFsyNzVdID0gMjY5O1xuICB0WzI4Ml0gPSAxMDA7XG4gIHRbMjg2XSA9IDEwMTtcbiAgdFsyODhdID0gMjMzO1xuICB0WzI5MF0gPSAyODM7XG4gIHRbMjk1XSA9IDI4MTtcbiAgdFsyOTZdID0gMTAyO1xuICB0WzMzNl0gPSAxMDM7XG4gIHRbMzQ2XSA9IDEwNDtcbiAgdFszNDldID0gMTA1O1xuICB0WzM1MV0gPSAyMzc7XG4gIHRbMzYxXSA9IDEwNjtcbiAgdFszNjRdID0gMTA3O1xuICB0WzM2N10gPSAxMDg7XG4gIHRbMzcxXSA9IDMyMjtcbiAgdFszNzNdID0gMTA5O1xuICB0WzM3NF0gPSAxMTA7XG4gIHRbMzgxXSA9IDExMTtcbiAgdFszODNdID0gMjQzO1xuICB0WzM5M10gPSAxMTI7XG4gIHRbMzk1XSA9IDExMztcbiAgdFszOTZdID0gMTE0O1xuICB0WzM5OF0gPSAzNDU7XG4gIHRbNDAwXSA9IDExNTtcbiAgdFs0MDFdID0gMzQ3O1xuICB0WzQwM10gPSAzNTM7XG4gIHRbNDEwXSA9IDExNjtcbiAgdFs0MzddID0gMTE3O1xuICB0WzQ0OF0gPSAxMTg7XG4gIHRbNDQ5XSA9IDExOTtcbiAgdFs0NTRdID0gMTIwO1xuICB0WzQ1NV0gPSAxMjE7XG4gIHRbNDU3XSA9IDI1MztcbiAgdFs0NjBdID0gMTIyO1xuICB0WzQ2Ml0gPSAzODI7XG4gIHRbNDYzXSA9IDM4MDtcbiAgdFs4NTNdID0gNDQ7XG4gIHRbODU1XSA9IDU4O1xuICB0Wzg1Nl0gPSA0NjtcbiAgdFs4NzZdID0gNDc7XG4gIHRbODc4XSA9IDQ1O1xuICB0Wzg4Ml0gPSA0NTtcbiAgdFs4OTRdID0gNDA7XG4gIHRbODk1XSA9IDQxO1xuICB0Wzg5Nl0gPSA5MTtcbiAgdFs4OTddID0gOTM7XG4gIHRbOTIzXSA9IDY0O1xuICB0WzEwMDRdID0gNDg7XG4gIHRbMTAwNV0gPSA0OTtcbiAgdFsxMDA2XSA9IDUwO1xuICB0WzEwMDddID0gNTE7XG4gIHRbMTAwOF0gPSA1MjtcbiAgdFsxMDA5XSA9IDUzO1xuICB0WzEwMTBdID0gNTQ7XG4gIHRbMTAxMV0gPSA1NTtcbiAgdFsxMDEyXSA9IDU2O1xuICB0WzEwMTNdID0gNTc7XG4gIHRbMTA4MV0gPSAzNztcbiAgdFsxMDg1XSA9IDQzO1xuICB0WzEwODZdID0gNDU7XG59KTtcbmV4cG9ydHMuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpID0gZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpO1xuXG5mdW5jdGlvbiBnZXRTdGFuZGFyZEZvbnROYW1lKG5hbWUpIHtcbiAgY29uc3QgZm9udE5hbWUgPSAoMCwgX2ZvbnRzX3V0aWxzLm5vcm1hbGl6ZUZvbnROYW1lKShuYW1lKTtcbiAgY29uc3Qgc3RkRm9udE1hcCA9IGdldFN0ZEZvbnRNYXAoKTtcbiAgcmV0dXJuIHN0ZEZvbnRNYXBbZm9udE5hbWVdO1xufVxuXG4vKioqLyB9KSxcbi8qIDQ4ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlRvVW5pY29kZU1hcCA9IGV4cG9ydHMuSWRlbnRpdHlUb1VuaWNvZGVNYXAgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbmNsYXNzIFRvVW5pY29kZU1hcCB7XG4gIGNvbnN0cnVjdG9yKGNtYXAgPSBbXSkge1xuICAgIHRoaXMuX21hcCA9IGNtYXA7XG4gIH1cblxuICBnZXQgbGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl9tYXAubGVuZ3RoO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIGZvciAoY29uc3QgY2hhckNvZGUgaW4gdGhpcy5fbWFwKSB7XG4gICAgICBjYWxsYmFjayhjaGFyQ29kZSwgdGhpcy5fbWFwW2NoYXJDb2RlXS5jaGFyQ29kZUF0KDApKTtcbiAgICB9XG4gIH1cblxuICBoYXMoaSkge1xuICAgIHJldHVybiB0aGlzLl9tYXBbaV0gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldChpKSB7XG4gICAgcmV0dXJuIHRoaXMuX21hcFtpXTtcbiAgfVxuXG4gIGNoYXJDb2RlT2YodmFsdWUpIHtcbiAgICBjb25zdCBtYXAgPSB0aGlzLl9tYXA7XG5cbiAgICBpZiAobWFwLmxlbmd0aCA8PSAweDEwMDAwKSB7XG4gICAgICByZXR1cm4gbWFwLmluZGV4T2YodmFsdWUpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hhckNvZGUgaW4gbWFwKSB7XG4gICAgICBpZiAobWFwW2NoYXJDb2RlXSA9PT0gdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNoYXJDb2RlIHwgMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBhbWVuZChtYXApIHtcbiAgICBmb3IgKGNvbnN0IGNoYXJDb2RlIGluIG1hcCkge1xuICAgICAgdGhpcy5fbWFwW2NoYXJDb2RlXSA9IG1hcFtjaGFyQ29kZV07XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5Ub1VuaWNvZGVNYXAgPSBUb1VuaWNvZGVNYXA7XG5cbmNsYXNzIElkZW50aXR5VG9Vbmljb2RlTWFwIHtcbiAgY29uc3RydWN0b3IoZmlyc3RDaGFyLCBsYXN0Q2hhcikge1xuICAgIHRoaXMuZmlyc3RDaGFyID0gZmlyc3RDaGFyO1xuICAgIHRoaXMubGFzdENoYXIgPSBsYXN0Q2hhcjtcbiAgfVxuXG4gIGdldCBsZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMubGFzdENoYXIgKyAxIC0gdGhpcy5maXJzdENoYXI7XG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgZm9yIChsZXQgaSA9IHRoaXMuZmlyc3RDaGFyLCBpaSA9IHRoaXMubGFzdENoYXI7IGkgPD0gaWk7IGkrKykge1xuICAgICAgY2FsbGJhY2soaSwgaSk7XG4gICAgfVxuICB9XG5cbiAgaGFzKGkpIHtcbiAgICByZXR1cm4gdGhpcy5maXJzdENoYXIgPD0gaSAmJiBpIDw9IHRoaXMubGFzdENoYXI7XG4gIH1cblxuICBnZXQoaSkge1xuICAgIGlmICh0aGlzLmZpcnN0Q2hhciA8PSBpICYmIGkgPD0gdGhpcy5sYXN0Q2hhcikge1xuICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoaSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNoYXJDb2RlT2Yodikge1xuICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHYpICYmIHYgPj0gdGhpcy5maXJzdENoYXIgJiYgdiA8PSB0aGlzLmxhc3RDaGFyID8gdiA6IC0xO1xuICB9XG5cbiAgYW1lbmQobWFwKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIlNob3VsZCBub3QgY2FsbCBhbWVuZCgpXCIpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5JZGVudGl0eVRvVW5pY29kZU1hcCA9IElkZW50aXR5VG9Vbmljb2RlTWFwO1xuXG4vKioqLyB9KSxcbi8qIDQ5ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLkNGRkZvbnQgPSB2b2lkIDA7XG5cbnZhciBfY2ZmX3BhcnNlciA9IF9fd19wZGZqc19yZXF1aXJlX18oNDUpO1xuXG52YXIgX2ZvbnRzX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXygxOCk7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbmNsYXNzIENGRkZvbnQge1xuICBjb25zdHJ1Y3RvcihmaWxlLCBwcm9wZXJ0aWVzKSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGUGFyc2VyKGZpbGUsIHByb3BlcnRpZXMsIF9mb250c191dGlscy5TRUFDX0FOQUxZU0lTX0VOQUJMRUQpO1xuICAgIHRoaXMuY2ZmID0gcGFyc2VyLnBhcnNlKCk7XG4gICAgdGhpcy5jZmYuZHVwbGljYXRlRmlyc3RHbHlwaCgpO1xuICAgIGNvbnN0IGNvbXBpbGVyID0gbmV3IF9jZmZfcGFyc2VyLkNGRkNvbXBpbGVyKHRoaXMuY2ZmKTtcbiAgICB0aGlzLnNlYWNzID0gdGhpcy5jZmYuc2VhY3M7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5kYXRhID0gY29tcGlsZXIuY29tcGlsZSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIkZhaWxlZCB0byBjb21waWxlIGZvbnQgXCIgKyBwcm9wZXJ0aWVzLmxvYWRlZE5hbWUpO1xuICAgICAgdGhpcy5kYXRhID0gZmlsZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jcmVhdGVCdWlsdEluRW5jb2RpbmcoKTtcbiAgfVxuXG4gIGdldCBudW1HbHlwaHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2ZmLmNoYXJTdHJpbmdzLmNvdW50O1xuICB9XG5cbiAgZ2V0Q2hhcnNldCgpIHtcbiAgICByZXR1cm4gdGhpcy5jZmYuY2hhcnNldC5jaGFyc2V0O1xuICB9XG5cbiAgZ2V0R2x5cGhNYXBwaW5nKCkge1xuICAgIGNvbnN0IGNmZiA9IHRoaXMuY2ZmO1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLnByb3BlcnRpZXM7XG4gICAgY29uc3QgY2hhcnNldHMgPSBjZmYuY2hhcnNldC5jaGFyc2V0O1xuICAgIGxldCBjaGFyQ29kZVRvR2x5cGhJZDtcbiAgICBsZXQgZ2x5cGhJZDtcblxuICAgIGlmIChwcm9wZXJ0aWVzLmNvbXBvc2l0ZSkge1xuICAgICAgY2hhckNvZGVUb0dseXBoSWQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgbGV0IGNoYXJDb2RlO1xuXG4gICAgICBpZiAoY2ZmLmlzQ0lERm9udCkge1xuICAgICAgICBmb3IgKGdseXBoSWQgPSAwOyBnbHlwaElkIDwgY2hhcnNldHMubGVuZ3RoOyBnbHlwaElkKyspIHtcbiAgICAgICAgICBjb25zdCBjaWQgPSBjaGFyc2V0c1tnbHlwaElkXTtcbiAgICAgICAgICBjaGFyQ29kZSA9IHByb3BlcnRpZXMuY01hcC5jaGFyQ29kZU9mKGNpZCk7XG4gICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gZ2x5cGhJZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChnbHlwaElkID0gMDsgZ2x5cGhJZCA8IGNmZi5jaGFyU3RyaW5ncy5jb3VudDsgZ2x5cGhJZCsrKSB7XG4gICAgICAgICAgY2hhckNvZGUgPSBwcm9wZXJ0aWVzLmNNYXAuY2hhckNvZGVPZihnbHlwaElkKTtcbiAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gPSBnbHlwaElkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGFyQ29kZVRvR2x5cGhJZDtcbiAgICB9XG5cbiAgICBsZXQgZW5jb2RpbmcgPSBjZmYuZW5jb2RpbmcgPyBjZmYuZW5jb2RpbmcuZW5jb2RpbmcgOiBudWxsO1xuXG4gICAgaWYgKHByb3BlcnRpZXMuaXNJbnRlcm5hbEZvbnQpIHtcbiAgICAgIGVuY29kaW5nID0gcHJvcGVydGllcy5kZWZhdWx0RW5jb2Rpbmc7XG4gICAgfVxuXG4gICAgY2hhckNvZGVUb0dseXBoSWQgPSAoMCwgX2ZvbnRzX3V0aWxzLnR5cGUxRm9udEdseXBoTWFwcGluZykocHJvcGVydGllcywgZW5jb2RpbmcsIGNoYXJzZXRzKTtcbiAgICByZXR1cm4gY2hhckNvZGVUb0dseXBoSWQ7XG4gIH1cblxuICBoYXNHbHlwaElkKGlkKSB7XG4gICAgcmV0dXJuIHRoaXMuY2ZmLmhhc0dseXBoSWQoaWQpO1xuICB9XG5cbiAgX2NyZWF0ZUJ1aWx0SW5FbmNvZGluZygpIHtcbiAgICBjb25zdCB7XG4gICAgICBjaGFyc2V0LFxuICAgICAgZW5jb2RpbmdcbiAgICB9ID0gdGhpcy5jZmY7XG5cbiAgICBpZiAoIWNoYXJzZXQgfHwgIWVuY29kaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2hhcnNldHMgPSBjaGFyc2V0LmNoYXJzZXQsXG4gICAgICAgICAgZW5jb2RpbmdzID0gZW5jb2RpbmcuZW5jb2Rpbmc7XG4gICAgY29uc3QgbWFwID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNoYXJDb2RlIGluIGVuY29kaW5ncykge1xuICAgICAgY29uc3QgZ2x5cGhJZCA9IGVuY29kaW5nc1tjaGFyQ29kZV07XG5cbiAgICAgIGlmIChnbHlwaElkID49IDApIHtcbiAgICAgICAgY29uc3QgZ2x5cGhOYW1lID0gY2hhcnNldHNbZ2x5cGhJZF07XG5cbiAgICAgICAgaWYgKGdseXBoTmFtZSkge1xuICAgICAgICAgIG1hcFtjaGFyQ29kZV0gPSBnbHlwaE5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWFwLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucHJvcGVydGllcy5idWlsdEluRW5jb2RpbmcgPSBtYXA7XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5DRkZGb250ID0gQ0ZGRm9udDtcblxuLyoqKi8gfSksXG4vKiA1MCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5Gb250UmVuZGVyZXJGYWN0b3J5ID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX2NmZl9wYXJzZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDQ1KTtcblxudmFyIF9nbHlwaGxpc3QgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIwKTtcblxudmFyIF9lbmNvZGluZ3MgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE5KTtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEwKTtcblxuZnVuY3Rpb24gZ2V0TG9uZyhkYXRhLCBvZmZzZXQpIHtcbiAgcmV0dXJuIGRhdGFbb2Zmc2V0XSA8PCAyNCB8IGRhdGFbb2Zmc2V0ICsgMV0gPDwgMTYgfCBkYXRhW29mZnNldCArIDJdIDw8IDggfCBkYXRhW29mZnNldCArIDNdO1xufVxuXG5mdW5jdGlvbiBnZXRVc2hvcnQoZGF0YSwgb2Zmc2V0KSB7XG4gIHJldHVybiBkYXRhW29mZnNldF0gPDwgOCB8IGRhdGFbb2Zmc2V0ICsgMV07XG59XG5cbmZ1bmN0aW9uIGdldFN1YnJvdXRpbmVCaWFzKHN1YnJzKSB7XG4gIGNvbnN0IG51bVN1YnJzID0gc3VicnMubGVuZ3RoO1xuICBsZXQgYmlhcyA9IDMyNzY4O1xuXG4gIGlmIChudW1TdWJycyA8IDEyNDApIHtcbiAgICBiaWFzID0gMTA3O1xuICB9IGVsc2UgaWYgKG51bVN1YnJzIDwgMzM5MDApIHtcbiAgICBiaWFzID0gMTEzMTtcbiAgfVxuXG4gIHJldHVybiBiaWFzO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNtYXAoZGF0YSwgc3RhcnQsIGVuZCkge1xuICBjb25zdCBvZmZzZXQgPSBnZXRVc2hvcnQoZGF0YSwgc3RhcnQgKyAyKSA9PT0gMSA/IGdldExvbmcoZGF0YSwgc3RhcnQgKyA4KSA6IGdldExvbmcoZGF0YSwgc3RhcnQgKyAxNik7XG4gIGNvbnN0IGZvcm1hdCA9IGdldFVzaG9ydChkYXRhLCBzdGFydCArIG9mZnNldCk7XG4gIGxldCByYW5nZXMsIHAsIGk7XG5cbiAgaWYgKGZvcm1hdCA9PT0gNCkge1xuICAgIGdldFVzaG9ydChkYXRhLCBzdGFydCArIG9mZnNldCArIDIpO1xuICAgIGNvbnN0IHNlZ0NvdW50ID0gZ2V0VXNob3J0KGRhdGEsIHN0YXJ0ICsgb2Zmc2V0ICsgNikgPj4gMTtcbiAgICBwID0gc3RhcnQgKyBvZmZzZXQgKyAxNDtcbiAgICByYW5nZXMgPSBbXTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzZWdDb3VudDsgaSsrLCBwICs9IDIpIHtcbiAgICAgIHJhbmdlc1tpXSA9IHtcbiAgICAgICAgZW5kOiBnZXRVc2hvcnQoZGF0YSwgcClcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcCArPSAyO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNlZ0NvdW50OyBpKyssIHAgKz0gMikge1xuICAgICAgcmFuZ2VzW2ldLnN0YXJ0ID0gZ2V0VXNob3J0KGRhdGEsIHApO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBzZWdDb3VudDsgaSsrLCBwICs9IDIpIHtcbiAgICAgIHJhbmdlc1tpXS5pZERlbHRhID0gZ2V0VXNob3J0KGRhdGEsIHApO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBzZWdDb3VudDsgaSsrLCBwICs9IDIpIHtcbiAgICAgIGxldCBpZE9mZnNldCA9IGdldFVzaG9ydChkYXRhLCBwKTtcblxuICAgICAgaWYgKGlkT2Zmc2V0ID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICByYW5nZXNbaV0uaWRzID0gW107XG5cbiAgICAgIGZvciAobGV0IGogPSAwLCBqaiA9IHJhbmdlc1tpXS5lbmQgLSByYW5nZXNbaV0uc3RhcnQgKyAxOyBqIDwgamo7IGorKykge1xuICAgICAgICByYW5nZXNbaV0uaWRzW2pdID0gZ2V0VXNob3J0KGRhdGEsIHAgKyBpZE9mZnNldCk7XG4gICAgICAgIGlkT2Zmc2V0ICs9IDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhbmdlcztcbiAgfSBlbHNlIGlmIChmb3JtYXQgPT09IDEyKSB7XG4gICAgZ2V0TG9uZyhkYXRhLCBzdGFydCArIG9mZnNldCArIDQpO1xuICAgIGNvbnN0IGdyb3VwcyA9IGdldExvbmcoZGF0YSwgc3RhcnQgKyBvZmZzZXQgKyAxMik7XG4gICAgcCA9IHN0YXJ0ICsgb2Zmc2V0ICsgMTY7XG4gICAgcmFuZ2VzID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBzOyBpKyspIHtcbiAgICAgIHJhbmdlcy5wdXNoKHtcbiAgICAgICAgc3RhcnQ6IGdldExvbmcoZGF0YSwgcCksXG4gICAgICAgIGVuZDogZ2V0TG9uZyhkYXRhLCBwICsgNCksXG4gICAgICAgIGlkRGVsdGE6IGdldExvbmcoZGF0YSwgcCArIDgpIC0gZ2V0TG9uZyhkYXRhLCBwKVxuICAgICAgfSk7XG4gICAgICBwICs9IDEyO1xuICAgIH1cblxuICAgIHJldHVybiByYW5nZXM7XG4gIH1cblxuICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYHVuc3VwcG9ydGVkIGNtYXA6ICR7Zm9ybWF0fWApO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNmZihkYXRhLCBzdGFydCwgZW5kLCBzZWFjQW5hbHlzaXNFbmFibGVkKSB7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSB7fTtcbiAgY29uc3QgcGFyc2VyID0gbmV3IF9jZmZfcGFyc2VyLkNGRlBhcnNlcihuZXcgX3N0cmVhbS5TdHJlYW0oZGF0YSwgc3RhcnQsIGVuZCAtIHN0YXJ0KSwgcHJvcGVydGllcywgc2VhY0FuYWx5c2lzRW5hYmxlZCk7XG4gIGNvbnN0IGNmZiA9IHBhcnNlci5wYXJzZSgpO1xuICByZXR1cm4ge1xuICAgIGdseXBoczogY2ZmLmNoYXJTdHJpbmdzLm9iamVjdHMsXG4gICAgc3VicnM6IGNmZi50b3BEaWN0LnByaXZhdGVEaWN0ICYmIGNmZi50b3BEaWN0LnByaXZhdGVEaWN0LnN1YnJzSW5kZXggJiYgY2ZmLnRvcERpY3QucHJpdmF0ZURpY3Quc3VicnNJbmRleC5vYmplY3RzLFxuICAgIGdzdWJyczogY2ZmLmdsb2JhbFN1YnJJbmRleCAmJiBjZmYuZ2xvYmFsU3VickluZGV4Lm9iamVjdHMsXG4gICAgaXNDRkZDSURGb250OiBjZmYuaXNDSURGb250LFxuICAgIGZkU2VsZWN0OiBjZmYuZmRTZWxlY3QsXG4gICAgZmRBcnJheTogY2ZmLmZkQXJyYXlcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VHbHlmVGFibGUoZ2x5ZiwgbG9jYSwgaXNHbHlwaExvY2F0aW9uc0xvbmcpIHtcbiAgbGV0IGl0ZW1TaXplLCBpdGVtRGVjb2RlO1xuXG4gIGlmIChpc0dseXBoTG9jYXRpb25zTG9uZykge1xuICAgIGl0ZW1TaXplID0gNDtcblxuICAgIGl0ZW1EZWNvZGUgPSBmdW5jdGlvbiBmb250SXRlbURlY29kZUxvbmcoZGF0YSwgb2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZGF0YVtvZmZzZXRdIDw8IDI0IHwgZGF0YVtvZmZzZXQgKyAxXSA8PCAxNiB8IGRhdGFbb2Zmc2V0ICsgMl0gPDwgOCB8IGRhdGFbb2Zmc2V0ICsgM107XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpdGVtU2l6ZSA9IDI7XG5cbiAgICBpdGVtRGVjb2RlID0gZnVuY3Rpb24gZm9udEl0ZW1EZWNvZGUoZGF0YSwgb2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZGF0YVtvZmZzZXRdIDw8IDkgfCBkYXRhW29mZnNldCArIDFdIDw8IDE7XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGdseXBocyA9IFtdO1xuICBsZXQgc3RhcnRPZmZzZXQgPSBpdGVtRGVjb2RlKGxvY2EsIDApO1xuXG4gIGZvciAobGV0IGogPSBpdGVtU2l6ZTsgaiA8IGxvY2EubGVuZ3RoOyBqICs9IGl0ZW1TaXplKSB7XG4gICAgY29uc3QgZW5kT2Zmc2V0ID0gaXRlbURlY29kZShsb2NhLCBqKTtcbiAgICBnbHlwaHMucHVzaChnbHlmLnN1YmFycmF5KHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpKTtcbiAgICBzdGFydE9mZnNldCA9IGVuZE9mZnNldDtcbiAgfVxuXG4gIHJldHVybiBnbHlwaHM7XG59XG5cbmZ1bmN0aW9uIGxvb2t1cENtYXAocmFuZ2VzLCB1bmljb2RlKSB7XG4gIGNvbnN0IGNvZGUgPSB1bmljb2RlLmNvZGVQb2ludEF0KDApO1xuICBsZXQgZ2lkID0gMCxcbiAgICAgIGwgPSAwLFxuICAgICAgciA9IHJhbmdlcy5sZW5ndGggLSAxO1xuXG4gIHdoaWxlIChsIDwgcikge1xuICAgIGNvbnN0IGMgPSBsICsgciArIDEgPj4gMTtcblxuICAgIGlmIChjb2RlIDwgcmFuZ2VzW2NdLnN0YXJ0KSB7XG4gICAgICByID0gYyAtIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGwgPSBjO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyYW5nZXNbbF0uc3RhcnQgPD0gY29kZSAmJiBjb2RlIDw9IHJhbmdlc1tsXS5lbmQpIHtcbiAgICBnaWQgPSByYW5nZXNbbF0uaWREZWx0YSArIChyYW5nZXNbbF0uaWRzID8gcmFuZ2VzW2xdLmlkc1tjb2RlIC0gcmFuZ2VzW2xdLnN0YXJ0XSA6IGNvZGUpICYgMHhmZmZmO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjaGFyQ29kZTogY29kZSxcbiAgICBnbHlwaElkOiBnaWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcGlsZUdseWYoY29kZSwgY21kcywgZm9udCkge1xuICBmdW5jdGlvbiBtb3ZlVG8oeCwgeSkge1xuICAgIGNtZHMucHVzaCh7XG4gICAgICBjbWQ6IFwibW92ZVRvXCIsXG4gICAgICBhcmdzOiBbeCwgeV1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpbmVUbyh4LCB5KSB7XG4gICAgY21kcy5wdXNoKHtcbiAgICAgIGNtZDogXCJsaW5lVG9cIixcbiAgICAgIGFyZ3M6IFt4LCB5XVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcXVhZHJhdGljQ3VydmVUbyh4YSwgeWEsIHgsIHkpIHtcbiAgICBjbWRzLnB1c2goe1xuICAgICAgY21kOiBcInF1YWRyYXRpY0N1cnZlVG9cIixcbiAgICAgIGFyZ3M6IFt4YSwgeWEsIHgsIHldXG4gICAgfSk7XG4gIH1cblxuICBsZXQgaSA9IDA7XG4gIGNvbnN0IG51bWJlck9mQ29udG91cnMgPSAoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSA+PiAxNjtcbiAgbGV0IGZsYWdzO1xuICBsZXQgeCA9IDAsXG4gICAgICB5ID0gMDtcbiAgaSArPSAxMDtcblxuICBpZiAobnVtYmVyT2ZDb250b3VycyA8IDApIHtcbiAgICBkbyB7XG4gICAgICBmbGFncyA9IGNvZGVbaV0gPDwgOCB8IGNvZGVbaSArIDFdO1xuICAgICAgY29uc3QgZ2x5cGhJbmRleCA9IGNvZGVbaSArIDJdIDw8IDggfCBjb2RlW2kgKyAzXTtcbiAgICAgIGkgKz0gNDtcbiAgICAgIGxldCBhcmcxLCBhcmcyO1xuXG4gICAgICBpZiAoZmxhZ3MgJiAweDAxKSB7XG4gICAgICAgIGFyZzEgPSAoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSA+PiAxNjtcbiAgICAgICAgYXJnMiA9IChjb2RlW2kgKyAyXSA8PCAyNCB8IGNvZGVbaSArIDNdIDw8IDE2KSA+PiAxNjtcbiAgICAgICAgaSArPSA0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXJnMSA9IGNvZGVbaSsrXTtcbiAgICAgICAgYXJnMiA9IGNvZGVbaSsrXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZsYWdzICYgMHgwMikge1xuICAgICAgICB4ID0gYXJnMTtcbiAgICAgICAgeSA9IGFyZzI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB4ID0gMDtcbiAgICAgICAgeSA9IDA7XG4gICAgICB9XG5cbiAgICAgIGxldCBzY2FsZVggPSAxLFxuICAgICAgICAgIHNjYWxlWSA9IDEsXG4gICAgICAgICAgc2NhbGUwMSA9IDAsXG4gICAgICAgICAgc2NhbGUxMCA9IDA7XG5cbiAgICAgIGlmIChmbGFncyAmIDB4MDgpIHtcbiAgICAgICAgc2NhbGVYID0gc2NhbGVZID0gKGNvZGVbaV0gPDwgMjQgfCBjb2RlW2kgKyAxXSA8PCAxNikgLyAxMDczNzQxODI0O1xuICAgICAgICBpICs9IDI7XG4gICAgICB9IGVsc2UgaWYgKGZsYWdzICYgMHg0MCkge1xuICAgICAgICBzY2FsZVggPSAoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSAvIDEwNzM3NDE4MjQ7XG4gICAgICAgIHNjYWxlWSA9IChjb2RlW2kgKyAyXSA8PCAyNCB8IGNvZGVbaSArIDNdIDw8IDE2KSAvIDEwNzM3NDE4MjQ7XG4gICAgICAgIGkgKz0gNDtcbiAgICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiAweDgwKSB7XG4gICAgICAgIHNjYWxlWCA9IChjb2RlW2ldIDw8IDI0IHwgY29kZVtpICsgMV0gPDwgMTYpIC8gMTA3Mzc0MTgyNDtcbiAgICAgICAgc2NhbGUwMSA9IChjb2RlW2kgKyAyXSA8PCAyNCB8IGNvZGVbaSArIDNdIDw8IDE2KSAvIDEwNzM3NDE4MjQ7XG4gICAgICAgIHNjYWxlMTAgPSAoY29kZVtpICsgNF0gPDwgMjQgfCBjb2RlW2kgKyA1XSA8PCAxNikgLyAxMDczNzQxODI0O1xuICAgICAgICBzY2FsZVkgPSAoY29kZVtpICsgNl0gPDwgMjQgfCBjb2RlW2kgKyA3XSA8PCAxNikgLyAxMDczNzQxODI0O1xuICAgICAgICBpICs9IDg7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1YmdseXBoID0gZm9udC5nbHlwaHNbZ2x5cGhJbmRleF07XG5cbiAgICAgIGlmIChzdWJnbHlwaCkge1xuICAgICAgICBjbWRzLnB1c2goe1xuICAgICAgICAgIGNtZDogXCJzYXZlXCJcbiAgICAgICAgfSwge1xuICAgICAgICAgIGNtZDogXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICBhcmdzOiBbc2NhbGVYLCBzY2FsZTAxLCBzY2FsZTEwLCBzY2FsZVksIHgsIHldXG4gICAgICAgIH0pO1xuICAgICAgICBjb21waWxlR2x5ZihzdWJnbHlwaCwgY21kcywgZm9udCk7XG4gICAgICAgIGNtZHMucHVzaCh7XG4gICAgICAgICAgY21kOiBcInJlc3RvcmVcIlxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IHdoaWxlIChmbGFncyAmIDB4MjApO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGVuZFB0c09mQ29udG91cnMgPSBbXTtcbiAgICBsZXQgaiwgamo7XG5cbiAgICBmb3IgKGogPSAwOyBqIDwgbnVtYmVyT2ZDb250b3VyczsgaisrKSB7XG4gICAgICBlbmRQdHNPZkNvbnRvdXJzLnB1c2goY29kZVtpXSA8PCA4IHwgY29kZVtpICsgMV0pO1xuICAgICAgaSArPSAyO1xuICAgIH1cblxuICAgIGNvbnN0IGluc3RydWN0aW9uTGVuZ3RoID0gY29kZVtpXSA8PCA4IHwgY29kZVtpICsgMV07XG4gICAgaSArPSAyICsgaW5zdHJ1Y3Rpb25MZW5ndGg7XG4gICAgY29uc3QgbnVtYmVyT2ZQb2ludHMgPSBlbmRQdHNPZkNvbnRvdXJzW2VuZFB0c09mQ29udG91cnMubGVuZ3RoIC0gMV0gKyAxO1xuICAgIGNvbnN0IHBvaW50cyA9IFtdO1xuXG4gICAgd2hpbGUgKHBvaW50cy5sZW5ndGggPCBudW1iZXJPZlBvaW50cykge1xuICAgICAgZmxhZ3MgPSBjb2RlW2krK107XG4gICAgICBsZXQgcmVwZWF0ID0gMTtcblxuICAgICAgaWYgKGZsYWdzICYgMHgwOCkge1xuICAgICAgICByZXBlYXQgKz0gY29kZVtpKytdO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAocmVwZWF0LS0gPiAwKSB7XG4gICAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgICBmbGFnc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGogPSAwOyBqIDwgbnVtYmVyT2ZQb2ludHM7IGorKykge1xuICAgICAgc3dpdGNoIChwb2ludHNbal0uZmxhZ3MgJiAweDEyKSB7XG4gICAgICAgIGNhc2UgMHgwMDpcbiAgICAgICAgICB4ICs9IChjb2RlW2ldIDw8IDI0IHwgY29kZVtpICsgMV0gPDwgMTYpID4+IDE2O1xuICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDB4MDI6XG4gICAgICAgICAgeCAtPSBjb2RlW2krK107XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAweDEyOlxuICAgICAgICAgIHggKz0gY29kZVtpKytdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBwb2ludHNbal0ueCA9IHg7XG4gICAgfVxuXG4gICAgZm9yIChqID0gMDsgaiA8IG51bWJlck9mUG9pbnRzOyBqKyspIHtcbiAgICAgIHN3aXRjaCAocG9pbnRzW2pdLmZsYWdzICYgMHgyNCkge1xuICAgICAgICBjYXNlIDB4MDA6XG4gICAgICAgICAgeSArPSAoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSA+PiAxNjtcbiAgICAgICAgICBpICs9IDI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAweDA0OlxuICAgICAgICAgIHkgLT0gY29kZVtpKytdO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMHgyNDpcbiAgICAgICAgICB5ICs9IGNvZGVbaSsrXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcG9pbnRzW2pdLnkgPSB5O1xuICAgIH1cblxuICAgIGxldCBzdGFydFBvaW50ID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBudW1iZXJPZkNvbnRvdXJzOyBpKyspIHtcbiAgICAgIGNvbnN0IGVuZFBvaW50ID0gZW5kUHRzT2ZDb250b3Vyc1tpXTtcbiAgICAgIGNvbnN0IGNvbnRvdXIgPSBwb2ludHMuc2xpY2Uoc3RhcnRQb2ludCwgZW5kUG9pbnQgKyAxKTtcblxuICAgICAgaWYgKGNvbnRvdXJbMF0uZmxhZ3MgJiAxKSB7XG4gICAgICAgIGNvbnRvdXIucHVzaChjb250b3VyWzBdKTtcbiAgICAgIH0gZWxzZSBpZiAoY29udG91cltjb250b3VyLmxlbmd0aCAtIDFdLmZsYWdzICYgMSkge1xuICAgICAgICBjb250b3VyLnVuc2hpZnQoY29udG91cltjb250b3VyLmxlbmd0aCAtIDFdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHAgPSB7XG4gICAgICAgICAgZmxhZ3M6IDEsXG4gICAgICAgICAgeDogKGNvbnRvdXJbMF0ueCArIGNvbnRvdXJbY29udG91ci5sZW5ndGggLSAxXS54KSAvIDIsXG4gICAgICAgICAgeTogKGNvbnRvdXJbMF0ueSArIGNvbnRvdXJbY29udG91ci5sZW5ndGggLSAxXS55KSAvIDJcbiAgICAgICAgfTtcbiAgICAgICAgY29udG91ci51bnNoaWZ0KHApO1xuICAgICAgICBjb250b3VyLnB1c2gocCk7XG4gICAgICB9XG5cbiAgICAgIG1vdmVUbyhjb250b3VyWzBdLngsIGNvbnRvdXJbMF0ueSk7XG5cbiAgICAgIGZvciAoaiA9IDEsIGpqID0gY29udG91ci5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgIGlmIChjb250b3VyW2pdLmZsYWdzICYgMSkge1xuICAgICAgICAgIGxpbmVUbyhjb250b3VyW2pdLngsIGNvbnRvdXJbal0ueSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udG91cltqICsgMV0uZmxhZ3MgJiAxKSB7XG4gICAgICAgICAgcXVhZHJhdGljQ3VydmVUbyhjb250b3VyW2pdLngsIGNvbnRvdXJbal0ueSwgY29udG91cltqICsgMV0ueCwgY29udG91cltqICsgMV0ueSk7XG4gICAgICAgICAgaisrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHF1YWRyYXRpY0N1cnZlVG8oY29udG91cltqXS54LCBjb250b3VyW2pdLnksIChjb250b3VyW2pdLnggKyBjb250b3VyW2ogKyAxXS54KSAvIDIsIChjb250b3VyW2pdLnkgKyBjb250b3VyW2ogKyAxXS55KSAvIDIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0YXJ0UG9pbnQgPSBlbmRQb2ludCArIDE7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGVDaGFyU3RyaW5nKGNoYXJTdHJpbmdDb2RlLCBjbWRzLCBmb250LCBnbHlwaElkKSB7XG4gIGZ1bmN0aW9uIG1vdmVUbyh4LCB5KSB7XG4gICAgY21kcy5wdXNoKHtcbiAgICAgIGNtZDogXCJtb3ZlVG9cIixcbiAgICAgIGFyZ3M6IFt4LCB5XVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gbGluZVRvKHgsIHkpIHtcbiAgICBjbWRzLnB1c2goe1xuICAgICAgY21kOiBcImxpbmVUb1wiLFxuICAgICAgYXJnczogW3gsIHldXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBiZXppZXJDdXJ2ZVRvKHgxLCB5MSwgeDIsIHkyLCB4LCB5KSB7XG4gICAgY21kcy5wdXNoKHtcbiAgICAgIGNtZDogXCJiZXppZXJDdXJ2ZVRvXCIsXG4gICAgICBhcmdzOiBbeDEsIHkxLCB4MiwgeTIsIHgsIHldXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBzdGFjayA9IFtdO1xuICBsZXQgeCA9IDAsXG4gICAgICB5ID0gMDtcbiAgbGV0IHN0ZW1zID0gMDtcblxuICBmdW5jdGlvbiBwYXJzZShjb2RlKSB7XG4gICAgbGV0IGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBjb2RlLmxlbmd0aCkge1xuICAgICAgbGV0IHN0YWNrQ2xlYW4gPSBmYWxzZTtcbiAgICAgIGxldCB2ID0gY29kZVtpKytdO1xuICAgICAgbGV0IHhhLCB4YiwgeWEsIHliLCB5MSwgeTIsIHkzLCBuLCBzdWJyQ29kZTtcblxuICAgICAgc3dpdGNoICh2KSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBzdGVtcyArPSBzdGFjay5sZW5ndGggPj4gMTtcbiAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc3RlbXMgKz0gc3RhY2subGVuZ3RoID4+IDE7XG4gICAgICAgICAgc3RhY2tDbGVhbiA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHkgKz0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgbW92ZVRvKHgsIHkpO1xuICAgICAgICAgIHN0YWNrQ2xlYW4gPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgeCArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeSArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgbGluZVRvKHgsIHkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgeCArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgbGluZVRvKHgsIHkpO1xuXG4gICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB5ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICBsaW5lVG8oeCwgeSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB5ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICBsaW5lVG8oeCwgeSk7XG5cbiAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHggKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIGxpbmVUbyh4LCB5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeWEsIHhiLCB5YiwgeCwgeSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBuID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgc3VickNvZGUgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKGZvbnQuaXNDRkZDSURGb250KSB7XG4gICAgICAgICAgICBjb25zdCBmZEluZGV4ID0gZm9udC5mZFNlbGVjdC5nZXRGREluZGV4KGdseXBoSWQpO1xuXG4gICAgICAgICAgICBpZiAoZmRJbmRleCA+PSAwICYmIGZkSW5kZXggPCBmb250LmZkQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZvbnREaWN0ID0gZm9udC5mZEFycmF5W2ZkSW5kZXhdO1xuICAgICAgICAgICAgICBsZXQgc3VicnM7XG5cbiAgICAgICAgICAgICAgaWYgKGZvbnREaWN0LnByaXZhdGVEaWN0ICYmIGZvbnREaWN0LnByaXZhdGVEaWN0LnN1YnJzSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBzdWJycyA9IGZvbnREaWN0LnByaXZhdGVEaWN0LnN1YnJzSW5kZXgub2JqZWN0cztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChzdWJycykge1xuICAgICAgICAgICAgICAgIG4gKz0gZ2V0U3Vicm91dGluZUJpYXMoc3VicnMpO1xuICAgICAgICAgICAgICAgIHN1YnJDb2RlID0gc3VicnNbbl07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VickNvZGUgPSBmb250LnN1YnJzW24gKyBmb250LnN1YnJzQmlhc107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN1YnJDb2RlKSB7XG4gICAgICAgICAgICBwYXJzZShzdWJyQ29kZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICB2ID0gY29kZVtpKytdO1xuXG4gICAgICAgICAgc3dpdGNoICh2KSB7XG4gICAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeTEgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeSwgeGIsIHkxLCB4LCB5MSk7XG4gICAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5MSwgeGIsIHksIHgsIHkpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAzNTpcbiAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeWEgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHliID0geWEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTtcbiAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeWEgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHliID0geWEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTtcbiAgICAgICAgICAgICAgc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDM2OlxuICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5MSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeTIgPSB5MSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHkxLCB4YiwgeTIsIHgsIHkyKTtcbiAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHkzID0geTIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5MiwgeGIsIHkzLCB4LCB5KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgICAgIGNvbnN0IHgwID0geCxcbiAgICAgICAgICAgICAgICAgICAgeTAgPSB5O1xuICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHkgPSB5YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHggPSB4YjtcbiAgICAgICAgICAgICAgeSA9IHliO1xuXG4gICAgICAgICAgICAgIGlmIChNYXRoLmFicyh4IC0geDApID4gTWF0aC5hYnMoeSAtIHkwKSkge1xuICAgICAgICAgICAgICAgIHggKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB5ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgdW5rbm93biBvcGVyYXRvcjogMTIgJHt2fWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA+PSA0KSB7XG4gICAgICAgICAgICBjb25zdCBhY2hhciA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgY29uc3QgYmNoYXIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHkgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHggPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGNtZHMucHVzaCh7XG4gICAgICAgICAgICAgIGNtZDogXCJzYXZlXCJcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgY21kOiBcInRyYW5zbGF0ZVwiLFxuICAgICAgICAgICAgICBhcmdzOiBbeCwgeV1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGV0IGNtYXAgPSBsb29rdXBDbWFwKGZvbnQuY21hcCwgU3RyaW5nLmZyb21DaGFyQ29kZShmb250LmdseXBoTmFtZU1hcFtfZW5jb2RpbmdzLlN0YW5kYXJkRW5jb2RpbmdbYWNoYXJdXSkpO1xuICAgICAgICAgICAgY29tcGlsZUNoYXJTdHJpbmcoZm9udC5nbHlwaHNbY21hcC5nbHlwaElkXSwgY21kcywgZm9udCwgY21hcC5nbHlwaElkKTtcbiAgICAgICAgICAgIGNtZHMucHVzaCh7XG4gICAgICAgICAgICAgIGNtZDogXCJyZXN0b3JlXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY21hcCA9IGxvb2t1cENtYXAoZm9udC5jbWFwLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGZvbnQuZ2x5cGhOYW1lTWFwW19lbmNvZGluZ3MuU3RhbmRhcmRFbmNvZGluZ1tiY2hhcl1dKSk7XG4gICAgICAgICAgICBjb21waWxlQ2hhclN0cmluZyhmb250LmdseXBoc1tjbWFwLmdseXBoSWRdLCBjbWRzLCBmb250LCBjbWFwLmdseXBoSWQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgIHN0ZW1zICs9IHN0YWNrLmxlbmd0aCA+PiAxO1xuICAgICAgICAgIHN0YWNrQ2xlYW4gPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgc3RlbXMgKz0gc3RhY2subGVuZ3RoID4+IDE7XG4gICAgICAgICAgaSArPSBzdGVtcyArIDcgPj4gMztcbiAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgIHN0ZW1zICs9IHN0YWNrLmxlbmd0aCA+PiAxO1xuICAgICAgICAgIGkgKz0gc3RlbXMgKyA3ID4+IDM7XG4gICAgICAgICAgc3RhY2tDbGVhbiA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICB5ICs9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIHggKz0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgbW92ZVRvKHgsIHkpO1xuICAgICAgICAgIHN0YWNrQ2xlYW4gPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgeCArPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBtb3ZlVG8oeCwgeSk7XG4gICAgICAgICAgc3RhY2tDbGVhbiA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICBzdGVtcyArPSBzdGFjay5sZW5ndGggPj4gMTtcbiAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeWEgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeSA9IHliICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHggKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICB5ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgbGluZVRvKHgsIHkpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDYpIHtcbiAgICAgICAgICAgIHggKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIHkgKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIGxpbmVUbyh4LCB5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgIHlhID0geSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCAlIDIpIHtcbiAgICAgICAgICAgIHggKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgeGEgPSB4O1xuICAgICAgICAgICAgeWEgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB4ID0geGI7XG4gICAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeWEsIHhiLCB5YiwgeCwgeSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoICUgMikge1xuICAgICAgICAgICAgeSArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeWEgPSB5O1xuICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB5ID0geWI7XG4gICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI4OlxuICAgICAgICAgIHN0YWNrLnB1c2goKGNvZGVbaV0gPDwgMjQgfCBjb2RlW2kgKyAxXSA8PCAxNikgPj4gMTYpO1xuICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgIG4gPSBzdGFjay5wb3AoKSArIGZvbnQuZ3N1YnJzQmlhcztcbiAgICAgICAgICBzdWJyQ29kZSA9IGZvbnQuZ3N1YnJzW25dO1xuXG4gICAgICAgICAgaWYgKHN1YnJDb2RlKSB7XG4gICAgICAgICAgICBwYXJzZShzdWJyQ29kZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgeGEgPSB4O1xuICAgICAgICAgICAgeWEgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeSA9IHliICsgKHN0YWNrLmxlbmd0aCA9PT0gMSA/IHN0YWNrLnNoaWZ0KCkgOiAwKTtcbiAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuXG4gICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeWEgPSB5O1xuICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIHkgPSB5YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB4ID0geGIgKyAoc3RhY2subGVuZ3RoID09PSAxID8gc3RhY2suc2hpZnQoKSA6IDApO1xuICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeWEsIHhiLCB5YiwgeCwgeSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIHlhID0geTtcbiAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeCA9IHhiICsgKHN0YWNrLmxlbmd0aCA9PT0gMSA/IHN0YWNrLnNoaWZ0KCkgOiAwKTtcbiAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuXG4gICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB4YSA9IHg7XG4gICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB5ID0geWIgKyAoc3RhY2subGVuZ3RoID09PSAxID8gc3RhY2suc2hpZnQoKSA6IDApO1xuICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeWEsIHhiLCB5YiwgeCwgeSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAodiA8IDMyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYHVua25vd24gb3BlcmF0b3I6ICR7dn1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodiA8IDI0Nykge1xuICAgICAgICAgICAgc3RhY2sucHVzaCh2IC0gMTM5KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHYgPCAyNTEpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goKHYgLSAyNDcpICogMjU2ICsgY29kZVtpKytdICsgMTA4KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHYgPCAyNTUpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goLSh2IC0gMjUxKSAqIDI1NiAtIGNvZGVbaSsrXSAtIDEwOCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goKGNvZGVbaV0gPDwgMjQgfCBjb2RlW2kgKyAxXSA8PCAxNiB8IGNvZGVbaSArIDJdIDw8IDggfCBjb2RlW2kgKyAzXSkgLyA2NTUzNik7XG4gICAgICAgICAgICBpICs9IDQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGFja0NsZWFuKSB7XG4gICAgICAgIHN0YWNrLmxlbmd0aCA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcGFyc2UoY2hhclN0cmluZ0NvZGUpO1xufVxuXG5jb25zdCBOT09QID0gW107XG5cbmNsYXNzIENvbXBpbGVkRm9udCB7XG4gIGNvbnN0cnVjdG9yKGZvbnRNYXRyaXgpIHtcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gQ29tcGlsZWRGb250KSB7XG4gICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQ2Fubm90IGluaXRpYWxpemUgQ29tcGlsZWRGb250LlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmZvbnRNYXRyaXggPSBmb250TWF0cml4O1xuICAgIHRoaXMuY29tcGlsZWRHbHlwaHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH1cblxuICBnZXRQYXRoSnModW5pY29kZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNoYXJDb2RlLFxuICAgICAgZ2x5cGhJZFxuICAgIH0gPSBsb29rdXBDbWFwKHRoaXMuY21hcCwgdW5pY29kZSk7XG4gICAgbGV0IGZuID0gdGhpcy5jb21waWxlZEdseXBoc1tnbHlwaElkXTtcblxuICAgIGlmICghZm4pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuID0gdGhpcy5jb21waWxlR2x5cGgodGhpcy5nbHlwaHNbZ2x5cGhJZF0sIGdseXBoSWQpO1xuICAgICAgICB0aGlzLmNvbXBpbGVkR2x5cGhzW2dseXBoSWRdID0gZm47XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICB0aGlzLmNvbXBpbGVkR2x5cGhzW2dseXBoSWRdID0gTk9PUDtcblxuICAgICAgICBpZiAodGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGdseXBoSWQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gZ2x5cGhJZDtcbiAgICB9XG5cbiAgICByZXR1cm4gZm47XG4gIH1cblxuICBjb21waWxlR2x5cGgoY29kZSwgZ2x5cGhJZCkge1xuICAgIGlmICghY29kZSB8fCBjb2RlLmxlbmd0aCA9PT0gMCB8fCBjb2RlWzBdID09PSAxNCkge1xuICAgICAgcmV0dXJuIE5PT1A7XG4gICAgfVxuXG4gICAgbGV0IGZvbnRNYXRyaXggPSB0aGlzLmZvbnRNYXRyaXg7XG5cbiAgICBpZiAodGhpcy5pc0NGRkNJREZvbnQpIHtcbiAgICAgIGNvbnN0IGZkSW5kZXggPSB0aGlzLmZkU2VsZWN0LmdldEZESW5kZXgoZ2x5cGhJZCk7XG5cbiAgICAgIGlmIChmZEluZGV4ID49IDAgJiYgZmRJbmRleCA8IHRoaXMuZmRBcnJheS5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZm9udERpY3QgPSB0aGlzLmZkQXJyYXlbZmRJbmRleF07XG4gICAgICAgIGZvbnRNYXRyaXggPSBmb250RGljdC5nZXRCeU5hbWUoXCJGb250TWF0cml4XCIpIHx8IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNtZHMgPSBbe1xuICAgICAgY21kOiBcInNhdmVcIlxuICAgIH0sIHtcbiAgICAgIGNtZDogXCJ0cmFuc2Zvcm1cIixcbiAgICAgIGFyZ3M6IGZvbnRNYXRyaXguc2xpY2UoKVxuICAgIH0sIHtcbiAgICAgIGNtZDogXCJzY2FsZVwiLFxuICAgICAgYXJnczogW1wic2l6ZVwiLCBcIi1zaXplXCJdXG4gICAgfV07XG4gICAgdGhpcy5jb21waWxlR2x5cGhJbXBsKGNvZGUsIGNtZHMsIGdseXBoSWQpO1xuICAgIGNtZHMucHVzaCh7XG4gICAgICBjbWQ6IFwicmVzdG9yZVwiXG4gICAgfSk7XG4gICAgcmV0dXJuIGNtZHM7XG4gIH1cblxuICBjb21waWxlR2x5cGhJbXBsKCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDaGlsZHJlbiBjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgdGhpcy5cIik7XG4gIH1cblxuICBoYXNCdWlsdFBhdGgodW5pY29kZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNoYXJDb2RlLFxuICAgICAgZ2x5cGhJZFxuICAgIH0gPSBsb29rdXBDbWFwKHRoaXMuY21hcCwgdW5pY29kZSk7XG4gICAgcmV0dXJuIHRoaXMuY29tcGlsZWRHbHlwaHNbZ2x5cGhJZF0gIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdICE9PSB1bmRlZmluZWQ7XG4gIH1cblxufVxuXG5jbGFzcyBUcnVlVHlwZUNvbXBpbGVkIGV4dGVuZHMgQ29tcGlsZWRGb250IHtcbiAgY29uc3RydWN0b3IoZ2x5cGhzLCBjbWFwLCBmb250TWF0cml4KSB7XG4gICAgc3VwZXIoZm9udE1hdHJpeCB8fCBbMC4wMDA0ODgsIDAsIDAsIDAuMDAwNDg4LCAwLCAwXSk7XG4gICAgdGhpcy5nbHlwaHMgPSBnbHlwaHM7XG4gICAgdGhpcy5jbWFwID0gY21hcDtcbiAgfVxuXG4gIGNvbXBpbGVHbHlwaEltcGwoY29kZSwgY21kcykge1xuICAgIGNvbXBpbGVHbHlmKGNvZGUsIGNtZHMsIHRoaXMpO1xuICB9XG5cbn1cblxuY2xhc3MgVHlwZTJDb21waWxlZCBleHRlbmRzIENvbXBpbGVkRm9udCB7XG4gIGNvbnN0cnVjdG9yKGNmZkluZm8sIGNtYXAsIGZvbnRNYXRyaXgsIGdseXBoTmFtZU1hcCkge1xuICAgIHN1cGVyKGZvbnRNYXRyaXggfHwgWzAuMDAxLCAwLCAwLCAwLjAwMSwgMCwgMF0pO1xuICAgIHRoaXMuZ2x5cGhzID0gY2ZmSW5mby5nbHlwaHM7XG4gICAgdGhpcy5nc3VicnMgPSBjZmZJbmZvLmdzdWJycyB8fCBbXTtcbiAgICB0aGlzLnN1YnJzID0gY2ZmSW5mby5zdWJycyB8fCBbXTtcbiAgICB0aGlzLmNtYXAgPSBjbWFwO1xuICAgIHRoaXMuZ2x5cGhOYW1lTWFwID0gZ2x5cGhOYW1lTWFwIHx8ICgwLCBfZ2x5cGhsaXN0LmdldEdseXBoc1VuaWNvZGUpKCk7XG4gICAgdGhpcy5nc3VicnNCaWFzID0gZ2V0U3Vicm91dGluZUJpYXModGhpcy5nc3VicnMpO1xuICAgIHRoaXMuc3VicnNCaWFzID0gZ2V0U3Vicm91dGluZUJpYXModGhpcy5zdWJycyk7XG4gICAgdGhpcy5pc0NGRkNJREZvbnQgPSBjZmZJbmZvLmlzQ0ZGQ0lERm9udDtcbiAgICB0aGlzLmZkU2VsZWN0ID0gY2ZmSW5mby5mZFNlbGVjdDtcbiAgICB0aGlzLmZkQXJyYXkgPSBjZmZJbmZvLmZkQXJyYXk7XG4gIH1cblxuICBjb21waWxlR2x5cGhJbXBsKGNvZGUsIGNtZHMsIGdseXBoSWQpIHtcbiAgICBjb21waWxlQ2hhclN0cmluZyhjb2RlLCBjbWRzLCB0aGlzLCBnbHlwaElkKTtcbiAgfVxuXG59XG5cbmNsYXNzIEZvbnRSZW5kZXJlckZhY3Rvcnkge1xuICBzdGF0aWMgY3JlYXRlKGZvbnQsIHNlYWNBbmFseXNpc0VuYWJsZWQpIHtcbiAgICBjb25zdCBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoZm9udC5kYXRhKTtcbiAgICBsZXQgY21hcCwgZ2x5ZiwgbG9jYSwgY2ZmLCBpbmRleFRvTG9jRm9ybWF0LCB1bml0c1BlckVtO1xuICAgIGNvbnN0IG51bVRhYmxlcyA9IGdldFVzaG9ydChkYXRhLCA0KTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBwID0gMTI7IGkgPCBudW1UYWJsZXM7IGkrKywgcCArPSAxNikge1xuICAgICAgY29uc3QgdGFnID0gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGRhdGEuc3ViYXJyYXkocCwgcCArIDQpKTtcbiAgICAgIGNvbnN0IG9mZnNldCA9IGdldExvbmcoZGF0YSwgcCArIDgpO1xuICAgICAgY29uc3QgbGVuZ3RoID0gZ2V0TG9uZyhkYXRhLCBwICsgMTIpO1xuXG4gICAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgICBjYXNlIFwiY21hcFwiOlxuICAgICAgICAgIGNtYXAgPSBwYXJzZUNtYXAoZGF0YSwgb2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJnbHlmXCI6XG4gICAgICAgICAgZ2x5ZiA9IGRhdGEuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJsb2NhXCI6XG4gICAgICAgICAgbG9jYSA9IGRhdGEuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJoZWFkXCI6XG4gICAgICAgICAgdW5pdHNQZXJFbSA9IGdldFVzaG9ydChkYXRhLCBvZmZzZXQgKyAxOCk7XG4gICAgICAgICAgaW5kZXhUb0xvY0Zvcm1hdCA9IGdldFVzaG9ydChkYXRhLCBvZmZzZXQgKyA1MCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIkNGRiBcIjpcbiAgICAgICAgICBjZmYgPSBwYXJzZUNmZihkYXRhLCBvZmZzZXQsIG9mZnNldCArIGxlbmd0aCwgc2VhY0FuYWx5c2lzRW5hYmxlZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdseWYpIHtcbiAgICAgIGNvbnN0IGZvbnRNYXRyaXggPSAhdW5pdHNQZXJFbSA/IGZvbnQuZm9udE1hdHJpeCA6IFsxIC8gdW5pdHNQZXJFbSwgMCwgMCwgMSAvIHVuaXRzUGVyRW0sIDAsIDBdO1xuICAgICAgcmV0dXJuIG5ldyBUcnVlVHlwZUNvbXBpbGVkKHBhcnNlR2x5ZlRhYmxlKGdseWYsIGxvY2EsIGluZGV4VG9Mb2NGb3JtYXQpLCBjbWFwLCBmb250TWF0cml4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFR5cGUyQ29tcGlsZWQoY2ZmLCBjbWFwLCBmb250LmZvbnRNYXRyaXgsIGZvbnQuZ2x5cGhOYW1lTWFwKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuRm9udFJlbmRlcmVyRmFjdG9yeSA9IEZvbnRSZW5kZXJlckZhY3Rvcnk7XG5cbi8qKiovIH0pLFxuLyogNTEgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuR2x5ZlRhYmxlID0gdm9pZCAwO1xuY29uc3QgT05fQ1VSVkVfUE9JTlQgPSAxIDw8IDA7XG5jb25zdCBYX1NIT1JUX1ZFQ1RPUiA9IDEgPDwgMTtcbmNvbnN0IFlfU0hPUlRfVkVDVE9SID0gMSA8PCAyO1xuY29uc3QgUkVQRUFUX0ZMQUcgPSAxIDw8IDM7XG5jb25zdCBYX0lTX1NBTUVfT1JfUE9TSVRJVkVfWF9TSE9SVF9WRUNUT1IgPSAxIDw8IDQ7XG5jb25zdCBZX0lTX1NBTUVfT1JfUE9TSVRJVkVfWV9TSE9SVF9WRUNUT1IgPSAxIDw8IDU7XG5jb25zdCBPVkVSTEFQX1NJTVBMRSA9IDEgPDwgNjtcbmNvbnN0IEFSR18xX0FORF8yX0FSRV9XT1JEUyA9IDEgPDwgMDtcbmNvbnN0IEFSR1NfQVJFX1hZX1ZBTFVFUyA9IDEgPDwgMTtcbmNvbnN0IFdFX0hBVkVfQV9TQ0FMRSA9IDEgPDwgMztcbmNvbnN0IE1PUkVfQ09NUE9ORU5UUyA9IDEgPDwgNTtcbmNvbnN0IFdFX0hBVkVfQU5fWF9BTkRfWV9TQ0FMRSA9IDEgPDwgNjtcbmNvbnN0IFdFX0hBVkVfQV9UV09fQllfVFdPID0gMSA8PCA3O1xuY29uc3QgV0VfSEFWRV9JTlNUUlVDVElPTlMgPSAxIDw8IDg7XG5cbmNsYXNzIEdseWZUYWJsZSB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBnbHlmVGFibGUsXG4gICAgaXNHbHlwaExvY2F0aW9uc0xvbmcsXG4gICAgbG9jYVRhYmxlLFxuICAgIG51bUdseXBoc1xuICB9KSB7XG4gICAgdGhpcy5nbHlwaHMgPSBbXTtcbiAgICBjb25zdCBsb2NhID0gbmV3IERhdGFWaWV3KGxvY2FUYWJsZS5idWZmZXIsIGxvY2FUYWJsZS5ieXRlT2Zmc2V0LCBsb2NhVGFibGUuYnl0ZUxlbmd0aCk7XG4gICAgY29uc3QgZ2x5ZiA9IG5ldyBEYXRhVmlldyhnbHlmVGFibGUuYnVmZmVyLCBnbHlmVGFibGUuYnl0ZU9mZnNldCwgZ2x5ZlRhYmxlLmJ5dGVMZW5ndGgpO1xuICAgIGNvbnN0IG9mZnNldFNpemUgPSBpc0dseXBoTG9jYXRpb25zTG9uZyA/IDQgOiAyO1xuICAgIGxldCBwcmV2ID0gaXNHbHlwaExvY2F0aW9uc0xvbmcgPyBsb2NhLmdldFVpbnQzMigwKSA6IDIgKiBsb2NhLmdldFVpbnQxNigwKTtcbiAgICBsZXQgcG9zID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyBpKyspIHtcbiAgICAgIHBvcyArPSBvZmZzZXRTaXplO1xuICAgICAgY29uc3QgbmV4dCA9IGlzR2x5cGhMb2NhdGlvbnNMb25nID8gbG9jYS5nZXRVaW50MzIocG9zKSA6IDIgKiBsb2NhLmdldFVpbnQxNihwb3MpO1xuXG4gICAgICBpZiAobmV4dCA9PT0gcHJldikge1xuICAgICAgICB0aGlzLmdseXBocy5wdXNoKG5ldyBHbHlwaCh7fSkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2x5cGggPSBHbHlwaC5wYXJzZShwcmV2LCBnbHlmKTtcbiAgICAgIHRoaXMuZ2x5cGhzLnB1c2goZ2x5cGgpO1xuICAgICAgcHJldiA9IG5leHQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0U2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nbHlwaHMucmVkdWNlKChhLCBnKSA9PiB7XG4gICAgICBjb25zdCBzaXplID0gZy5nZXRTaXplKCk7XG4gICAgICByZXR1cm4gYSArIChzaXplICsgMyAmIH4zKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHdyaXRlKCkge1xuICAgIGNvbnN0IHRvdGFsU2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpO1xuICAgIGNvbnN0IGdseWZUYWJsZSA9IG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIodG90YWxTaXplKSk7XG4gICAgY29uc3QgaXNMb2NhdGlvbkxvbmcgPSB0b3RhbFNpemUgPiAweDFmZmZlO1xuICAgIGNvbnN0IG9mZnNldFNpemUgPSBpc0xvY2F0aW9uTG9uZyA/IDQgOiAyO1xuICAgIGNvbnN0IGxvY2FUYWJsZSA9IG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoKHRoaXMuZ2x5cGhzLmxlbmd0aCArIDEpICogb2Zmc2V0U2l6ZSkpO1xuXG4gICAgaWYgKGlzTG9jYXRpb25Mb25nKSB7XG4gICAgICBsb2NhVGFibGUuc2V0VWludDMyKDAsIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2NhVGFibGUuc2V0VWludDE2KDAsIDApO1xuICAgIH1cblxuICAgIGxldCBwb3MgPSAwO1xuICAgIGxldCBsb2NhSW5kZXggPSAwO1xuXG4gICAgZm9yIChjb25zdCBnbHlwaCBvZiB0aGlzLmdseXBocykge1xuICAgICAgcG9zICs9IGdseXBoLndyaXRlKHBvcywgZ2x5ZlRhYmxlKTtcbiAgICAgIHBvcyA9IHBvcyArIDMgJiB+MztcbiAgICAgIGxvY2FJbmRleCArPSBvZmZzZXRTaXplO1xuXG4gICAgICBpZiAoaXNMb2NhdGlvbkxvbmcpIHtcbiAgICAgICAgbG9jYVRhYmxlLnNldFVpbnQzMihsb2NhSW5kZXgsIHBvcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2NhVGFibGUuc2V0VWludDE2KGxvY2FJbmRleCwgcG9zID4+IDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpc0xvY2F0aW9uTG9uZyxcbiAgICAgIGxvY2E6IG5ldyBVaW50OEFycmF5KGxvY2FUYWJsZS5idWZmZXIpLFxuICAgICAgZ2x5ZjogbmV3IFVpbnQ4QXJyYXkoZ2x5ZlRhYmxlLmJ1ZmZlcilcbiAgICB9O1xuICB9XG5cbiAgc2NhbGUoZmFjdG9ycykge1xuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHRoaXMuZ2x5cGhzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHRoaXMuZ2x5cGhzW2ldLnNjYWxlKGZhY3RvcnNbaV0pO1xuICAgIH1cbiAgfVxuXG59XG5cbmV4cG9ydHMuR2x5ZlRhYmxlID0gR2x5ZlRhYmxlO1xuXG5jbGFzcyBHbHlwaCB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBoZWFkZXIgPSBudWxsLFxuICAgIHNpbXBsZSA9IG51bGwsXG4gICAgY29tcG9zaXRlcyA9IG51bGxcbiAgfSkge1xuICAgIHRoaXMuaGVhZGVyID0gaGVhZGVyO1xuICAgIHRoaXMuc2ltcGxlID0gc2ltcGxlO1xuICAgIHRoaXMuY29tcG9zaXRlcyA9IGNvbXBvc2l0ZXM7XG4gIH1cblxuICBzdGF0aWMgcGFyc2UocG9zLCBnbHlmKSB7XG4gICAgY29uc3QgW3JlYWQsIGhlYWRlcl0gPSBHbHlwaEhlYWRlci5wYXJzZShwb3MsIGdseWYpO1xuICAgIHBvcyArPSByZWFkO1xuXG4gICAgaWYgKGhlYWRlci5udW1iZXJPZkNvbnRvdXJzIDwgMCkge1xuICAgICAgY29uc3QgY29tcG9zaXRlcyA9IFtdO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCBbbiwgY29tcG9zaXRlXSA9IENvbXBvc2l0ZUdseXBoLnBhcnNlKHBvcywgZ2x5Zik7XG4gICAgICAgIHBvcyArPSBuO1xuICAgICAgICBjb21wb3NpdGVzLnB1c2goY29tcG9zaXRlKTtcblxuICAgICAgICBpZiAoIShjb21wb3NpdGUuZmxhZ3MgJiBNT1JFX0NPTVBPTkVOVFMpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBHbHlwaCh7XG4gICAgICAgIGhlYWRlcixcbiAgICAgICAgY29tcG9zaXRlc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2ltcGxlID0gU2ltcGxlR2x5cGgucGFyc2UocG9zLCBnbHlmLCBoZWFkZXIubnVtYmVyT2ZDb250b3Vycyk7XG4gICAgcmV0dXJuIG5ldyBHbHlwaCh7XG4gICAgICBoZWFkZXIsXG4gICAgICBzaW1wbGVcbiAgICB9KTtcbiAgfVxuXG4gIGdldFNpemUoKSB7XG4gICAgaWYgKCF0aGlzLmhlYWRlcikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3Qgc2l6ZSA9IHRoaXMuc2ltcGxlID8gdGhpcy5zaW1wbGUuZ2V0U2l6ZSgpIDogdGhpcy5jb21wb3NpdGVzLnJlZHVjZSgoYSwgYykgPT4gYSArIGMuZ2V0U2l6ZSgpLCAwKTtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXIuZ2V0U2l6ZSgpICsgc2l6ZTtcbiAgfVxuXG4gIHdyaXRlKHBvcywgYnVmKSB7XG4gICAgaWYgKCF0aGlzLmhlYWRlcikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3Qgc3BvcyA9IHBvcztcbiAgICBwb3MgKz0gdGhpcy5oZWFkZXIud3JpdGUocG9zLCBidWYpO1xuXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB7XG4gICAgICBwb3MgKz0gdGhpcy5zaW1wbGUud3JpdGUocG9zLCBidWYpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvc2l0ZSBvZiB0aGlzLmNvbXBvc2l0ZXMpIHtcbiAgICAgICAgcG9zICs9IGNvbXBvc2l0ZS53cml0ZShwb3MsIGJ1Zik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvcyAtIHNwb3M7XG4gIH1cblxuICBzY2FsZShmYWN0b3IpIHtcbiAgICBpZiAoIXRoaXMuaGVhZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeE1pZGRsZSA9ICh0aGlzLmhlYWRlci54TWluICsgdGhpcy5oZWFkZXIueE1heCkgLyAyO1xuICAgIHRoaXMuaGVhZGVyLnNjYWxlKHhNaWRkbGUsIGZhY3Rvcik7XG5cbiAgICBpZiAodGhpcy5zaW1wbGUpIHtcbiAgICAgIHRoaXMuc2ltcGxlLnNjYWxlKHhNaWRkbGUsIGZhY3Rvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9zaXRlIG9mIHRoaXMuY29tcG9zaXRlcykge1xuICAgICAgICBjb21wb3NpdGUuc2NhbGUoeE1pZGRsZSwgZmFjdG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuXG5jbGFzcyBHbHlwaEhlYWRlciB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBudW1iZXJPZkNvbnRvdXJzLFxuICAgIHhNaW4sXG4gICAgeU1pbixcbiAgICB4TWF4LFxuICAgIHlNYXhcbiAgfSkge1xuICAgIHRoaXMubnVtYmVyT2ZDb250b3VycyA9IG51bWJlck9mQ29udG91cnM7XG4gICAgdGhpcy54TWluID0geE1pbjtcbiAgICB0aGlzLnlNaW4gPSB5TWluO1xuICAgIHRoaXMueE1heCA9IHhNYXg7XG4gICAgdGhpcy55TWF4ID0geU1heDtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZShwb3MsIGdseWYpIHtcbiAgICByZXR1cm4gWzEwLCBuZXcgR2x5cGhIZWFkZXIoe1xuICAgICAgbnVtYmVyT2ZDb250b3VyczogZ2x5Zi5nZXRJbnQxNihwb3MpLFxuICAgICAgeE1pbjogZ2x5Zi5nZXRJbnQxNihwb3MgKyAyKSxcbiAgICAgIHlNaW46IGdseWYuZ2V0SW50MTYocG9zICsgNCksXG4gICAgICB4TWF4OiBnbHlmLmdldEludDE2KHBvcyArIDYpLFxuICAgICAgeU1heDogZ2x5Zi5nZXRJbnQxNihwb3MgKyA4KVxuICAgIH0pXTtcbiAgfVxuXG4gIGdldFNpemUoKSB7XG4gICAgcmV0dXJuIDEwO1xuICB9XG5cbiAgd3JpdGUocG9zLCBidWYpIHtcbiAgICBidWYuc2V0SW50MTYocG9zLCB0aGlzLm51bWJlck9mQ29udG91cnMpO1xuICAgIGJ1Zi5zZXRJbnQxNihwb3MgKyAyLCB0aGlzLnhNaW4pO1xuICAgIGJ1Zi5zZXRJbnQxNihwb3MgKyA0LCB0aGlzLnlNaW4pO1xuICAgIGJ1Zi5zZXRJbnQxNihwb3MgKyA2LCB0aGlzLnhNYXgpO1xuICAgIGJ1Zi5zZXRJbnQxNihwb3MgKyA4LCB0aGlzLnlNYXgpO1xuICAgIHJldHVybiAxMDtcbiAgfVxuXG4gIHNjYWxlKHgsIGZhY3Rvcikge1xuICAgIHRoaXMueE1pbiA9IE1hdGgucm91bmQoeCArICh0aGlzLnhNaW4gLSB4KSAqIGZhY3Rvcik7XG4gICAgdGhpcy54TWF4ID0gTWF0aC5yb3VuZCh4ICsgKHRoaXMueE1heCAtIHgpICogZmFjdG9yKTtcbiAgfVxuXG59XG5cbmNsYXNzIENvbnRvdXIge1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgZmxhZ3MsXG4gICAgeENvb3JkaW5hdGVzLFxuICAgIHlDb29yZGluYXRlc1xuICB9KSB7XG4gICAgdGhpcy54Q29vcmRpbmF0ZXMgPSB4Q29vcmRpbmF0ZXM7XG4gICAgdGhpcy55Q29vcmRpbmF0ZXMgPSB5Q29vcmRpbmF0ZXM7XG4gICAgdGhpcy5mbGFncyA9IGZsYWdzO1xuICB9XG5cbn1cblxuY2xhc3MgU2ltcGxlR2x5cGgge1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgY29udG91cnMsXG4gICAgaW5zdHJ1Y3Rpb25zXG4gIH0pIHtcbiAgICB0aGlzLmNvbnRvdXJzID0gY29udG91cnM7XG4gICAgdGhpcy5pbnN0cnVjdGlvbnMgPSBpbnN0cnVjdGlvbnM7XG4gIH1cblxuICBzdGF0aWMgcGFyc2UocG9zLCBnbHlmLCBudW1iZXJPZkNvbnRvdXJzKSB7XG4gICAgY29uc3QgZW5kUHRzT2ZDb250b3VycyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJPZkNvbnRvdXJzOyBpKyspIHtcbiAgICAgIGNvbnN0IGVuZFB0ID0gZ2x5Zi5nZXRVaW50MTYocG9zKTtcbiAgICAgIHBvcyArPSAyO1xuICAgICAgZW5kUHRzT2ZDb250b3Vycy5wdXNoKGVuZFB0KTtcbiAgICB9XG5cbiAgICBjb25zdCBudW1iZXJPZlB0ID0gZW5kUHRzT2ZDb250b3Vyc1tudW1iZXJPZkNvbnRvdXJzIC0gMV0gKyAxO1xuICAgIGNvbnN0IGluc3RydWN0aW9uTGVuZ3RoID0gZ2x5Zi5nZXRVaW50MTYocG9zKTtcbiAgICBwb3MgKz0gMjtcbiAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSBuZXcgVWludDhBcnJheShnbHlmKS5zbGljZShwb3MsIHBvcyArIGluc3RydWN0aW9uTGVuZ3RoKTtcbiAgICBwb3MgKz0gaW5zdHJ1Y3Rpb25MZW5ndGg7XG4gICAgY29uc3QgZmxhZ3MgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZQdDsgcG9zKyssIGkrKykge1xuICAgICAgbGV0IGZsYWcgPSBnbHlmLmdldFVpbnQ4KHBvcyk7XG4gICAgICBmbGFncy5wdXNoKGZsYWcpO1xuXG4gICAgICBpZiAoZmxhZyAmIFJFUEVBVF9GTEFHKSB7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gZ2x5Zi5nZXRVaW50OCgrK3Bvcyk7XG4gICAgICAgIGZsYWcgXj0gUkVQRUFUX0ZMQUc7XG5cbiAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBjb3VudDsgbSsrKSB7XG4gICAgICAgICAgZmxhZ3MucHVzaChmbGFnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGkgKz0gY291bnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYWxsWENvb3JkaW5hdGVzID0gW107XG4gICAgbGV0IHhDb29yZGluYXRlcyA9IFtdO1xuICAgIGxldCB5Q29vcmRpbmF0ZXMgPSBbXTtcbiAgICBsZXQgcG9pbnRGbGFncyA9IFtdO1xuICAgIGNvbnN0IGNvbnRvdXJzID0gW107XG4gICAgbGV0IGVuZFB0c09mQ29udG91cnNJbmRleCA9IDA7XG4gICAgbGV0IGxhc3RDb29yZGluYXRlID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZQdDsgaSsrKSB7XG4gICAgICBjb25zdCBmbGFnID0gZmxhZ3NbaV07XG5cbiAgICAgIGlmIChmbGFnICYgWF9TSE9SVF9WRUNUT1IpIHtcbiAgICAgICAgY29uc3QgeCA9IGdseWYuZ2V0VWludDgocG9zKyspO1xuICAgICAgICBsYXN0Q29vcmRpbmF0ZSArPSBmbGFnICYgWF9JU19TQU1FX09SX1BPU0lUSVZFX1hfU0hPUlRfVkVDVE9SID8geCA6IC14O1xuICAgICAgICB4Q29vcmRpbmF0ZXMucHVzaChsYXN0Q29vcmRpbmF0ZSk7XG4gICAgICB9IGVsc2UgaWYgKGZsYWcgJiBYX0lTX1NBTUVfT1JfUE9TSVRJVkVfWF9TSE9SVF9WRUNUT1IpIHtcbiAgICAgICAgeENvb3JkaW5hdGVzLnB1c2gobGFzdENvb3JkaW5hdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGFzdENvb3JkaW5hdGUgKz0gZ2x5Zi5nZXRJbnQxNihwb3MpO1xuICAgICAgICBwb3MgKz0gMjtcbiAgICAgICAgeENvb3JkaW5hdGVzLnB1c2gobGFzdENvb3JkaW5hdGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZW5kUHRzT2ZDb250b3Vyc1tlbmRQdHNPZkNvbnRvdXJzSW5kZXhdID09PSBpKSB7XG4gICAgICAgIGVuZFB0c09mQ29udG91cnNJbmRleCsrO1xuICAgICAgICBhbGxYQ29vcmRpbmF0ZXMucHVzaCh4Q29vcmRpbmF0ZXMpO1xuICAgICAgICB4Q29vcmRpbmF0ZXMgPSBbXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsYXN0Q29vcmRpbmF0ZSA9IDA7XG4gICAgZW5kUHRzT2ZDb250b3Vyc0luZGV4ID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZQdDsgaSsrKSB7XG4gICAgICBjb25zdCBmbGFnID0gZmxhZ3NbaV07XG5cbiAgICAgIGlmIChmbGFnICYgWV9TSE9SVF9WRUNUT1IpIHtcbiAgICAgICAgY29uc3QgeSA9IGdseWYuZ2V0VWludDgocG9zKyspO1xuICAgICAgICBsYXN0Q29vcmRpbmF0ZSArPSBmbGFnICYgWV9JU19TQU1FX09SX1BPU0lUSVZFX1lfU0hPUlRfVkVDVE9SID8geSA6IC15O1xuICAgICAgICB5Q29vcmRpbmF0ZXMucHVzaChsYXN0Q29vcmRpbmF0ZSk7XG4gICAgICB9IGVsc2UgaWYgKGZsYWcgJiBZX0lTX1NBTUVfT1JfUE9TSVRJVkVfWV9TSE9SVF9WRUNUT1IpIHtcbiAgICAgICAgeUNvb3JkaW5hdGVzLnB1c2gobGFzdENvb3JkaW5hdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGFzdENvb3JkaW5hdGUgKz0gZ2x5Zi5nZXRJbnQxNihwb3MpO1xuICAgICAgICBwb3MgKz0gMjtcbiAgICAgICAgeUNvb3JkaW5hdGVzLnB1c2gobGFzdENvb3JkaW5hdGUpO1xuICAgICAgfVxuXG4gICAgICBwb2ludEZsYWdzLnB1c2goZmxhZyAmIE9OX0NVUlZFX1BPSU5UIHwgZmxhZyAmIE9WRVJMQVBfU0lNUExFKTtcblxuICAgICAgaWYgKGVuZFB0c09mQ29udG91cnNbZW5kUHRzT2ZDb250b3Vyc0luZGV4XSA9PT0gaSkge1xuICAgICAgICB4Q29vcmRpbmF0ZXMgPSBhbGxYQ29vcmRpbmF0ZXNbZW5kUHRzT2ZDb250b3Vyc0luZGV4XTtcbiAgICAgICAgZW5kUHRzT2ZDb250b3Vyc0luZGV4Kys7XG4gICAgICAgIGNvbnRvdXJzLnB1c2gobmV3IENvbnRvdXIoe1xuICAgICAgICAgIGZsYWdzOiBwb2ludEZsYWdzLFxuICAgICAgICAgIHhDb29yZGluYXRlcyxcbiAgICAgICAgICB5Q29vcmRpbmF0ZXNcbiAgICAgICAgfSkpO1xuICAgICAgICB5Q29vcmRpbmF0ZXMgPSBbXTtcbiAgICAgICAgcG9pbnRGbGFncyA9IFtdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgU2ltcGxlR2x5cGgoe1xuICAgICAgY29udG91cnMsXG4gICAgICBpbnN0cnVjdGlvbnNcbiAgICB9KTtcbiAgfVxuXG4gIGdldFNpemUoKSB7XG4gICAgbGV0IHNpemUgPSB0aGlzLmNvbnRvdXJzLmxlbmd0aCAqIDIgKyAyICsgdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoO1xuICAgIGxldCBsYXN0WCA9IDA7XG4gICAgbGV0IGxhc3RZID0gMDtcblxuICAgIGZvciAoY29uc3QgY29udG91ciBvZiB0aGlzLmNvbnRvdXJzKSB7XG4gICAgICBzaXplICs9IGNvbnRvdXIuZmxhZ3MubGVuZ3RoO1xuXG4gICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBjb250b3VyLnhDb29yZGluYXRlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSBjb250b3VyLnhDb29yZGluYXRlc1tpXTtcbiAgICAgICAgY29uc3QgeSA9IGNvbnRvdXIueUNvb3JkaW5hdGVzW2ldO1xuICAgICAgICBsZXQgYWJzID0gTWF0aC5hYnMoeCAtIGxhc3RYKTtcblxuICAgICAgICBpZiAoYWJzID4gMjU1KSB7XG4gICAgICAgICAgc2l6ZSArPSAyO1xuICAgICAgICB9IGVsc2UgaWYgKGFicyA+IDApIHtcbiAgICAgICAgICBzaXplICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0WCA9IHg7XG4gICAgICAgIGFicyA9IE1hdGguYWJzKHkgLSBsYXN0WSk7XG5cbiAgICAgICAgaWYgKGFicyA+IDI1NSkge1xuICAgICAgICAgIHNpemUgKz0gMjtcbiAgICAgICAgfSBlbHNlIGlmIChhYnMgPiAwKSB7XG4gICAgICAgICAgc2l6ZSArPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFkgPSB5O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzaXplO1xuICB9XG5cbiAgd3JpdGUocG9zLCBidWYpIHtcbiAgICBjb25zdCBzcG9zID0gcG9zO1xuICAgIGNvbnN0IHhDb29yZGluYXRlcyA9IFtdO1xuICAgIGNvbnN0IHlDb29yZGluYXRlcyA9IFtdO1xuICAgIGNvbnN0IGZsYWdzID0gW107XG4gICAgbGV0IGxhc3RYID0gMDtcbiAgICBsZXQgbGFzdFkgPSAwO1xuXG4gICAgZm9yIChjb25zdCBjb250b3VyIG9mIHRoaXMuY29udG91cnMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGNvbnRvdXIueENvb3JkaW5hdGVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgbGV0IGZsYWcgPSBjb250b3VyLmZsYWdzW2ldO1xuICAgICAgICBjb25zdCB4ID0gY29udG91ci54Q29vcmRpbmF0ZXNbaV07XG4gICAgICAgIGxldCBkZWx0YSA9IHggLSBsYXN0WDtcblxuICAgICAgICBpZiAoZGVsdGEgPT09IDApIHtcbiAgICAgICAgICBmbGFnIHw9IFhfSVNfU0FNRV9PUl9QT1NJVElWRV9YX1NIT1JUX1ZFQ1RPUjtcbiAgICAgICAgICB4Q29vcmRpbmF0ZXMucHVzaCgwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBhYnMgPSBNYXRoLmFicyhkZWx0YSk7XG5cbiAgICAgICAgICBpZiAoYWJzIDw9IDI1NSkge1xuICAgICAgICAgICAgZmxhZyB8PSBkZWx0YSA+PSAwID8gWF9TSE9SVF9WRUNUT1IgfCBYX0lTX1NBTUVfT1JfUE9TSVRJVkVfWF9TSE9SVF9WRUNUT1IgOiBYX1NIT1JUX1ZFQ1RPUjtcbiAgICAgICAgICAgIHhDb29yZGluYXRlcy5wdXNoKGFicyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhDb29yZGluYXRlcy5wdXNoKGRlbHRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0WCA9IHg7XG4gICAgICAgIGNvbnN0IHkgPSBjb250b3VyLnlDb29yZGluYXRlc1tpXTtcbiAgICAgICAgZGVsdGEgPSB5IC0gbGFzdFk7XG5cbiAgICAgICAgaWYgKGRlbHRhID09PSAwKSB7XG4gICAgICAgICAgZmxhZyB8PSBZX0lTX1NBTUVfT1JfUE9TSVRJVkVfWV9TSE9SVF9WRUNUT1I7XG4gICAgICAgICAgeUNvb3JkaW5hdGVzLnB1c2goMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgYWJzID0gTWF0aC5hYnMoZGVsdGEpO1xuXG4gICAgICAgICAgaWYgKGFicyA8PSAyNTUpIHtcbiAgICAgICAgICAgIGZsYWcgfD0gZGVsdGEgPj0gMCA/IFlfU0hPUlRfVkVDVE9SIHwgWV9JU19TQU1FX09SX1BPU0lUSVZFX1lfU0hPUlRfVkVDVE9SIDogWV9TSE9SVF9WRUNUT1I7XG4gICAgICAgICAgICB5Q29vcmRpbmF0ZXMucHVzaChhYnMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB5Q29vcmRpbmF0ZXMucHVzaChkZWx0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFkgPSB5O1xuICAgICAgICBmbGFncy5wdXNoKGZsYWcpO1xuICAgICAgfVxuXG4gICAgICBidWYuc2V0VWludDE2KHBvcywgeENvb3JkaW5hdGVzLmxlbmd0aCAtIDEpO1xuICAgICAgcG9zICs9IDI7XG4gICAgfVxuXG4gICAgYnVmLnNldFVpbnQxNihwb3MsIHRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aCk7XG4gICAgcG9zICs9IDI7XG5cbiAgICBpZiAodGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKSB7XG4gICAgICBuZXcgVWludDhBcnJheShidWYuYnVmZmVyLCAwLCBidWYuYnVmZmVyLmJ5dGVMZW5ndGgpLnNldCh0aGlzLmluc3RydWN0aW9ucywgcG9zKTtcbiAgICAgIHBvcyArPSB0aGlzLmluc3RydWN0aW9ucy5sZW5ndGg7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBmbGFnIG9mIGZsYWdzKSB7XG4gICAgICBidWYuc2V0VWludDgocG9zKyssIGZsYWcpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHhDb29yZGluYXRlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBjb25zdCB4ID0geENvb3JkaW5hdGVzW2ldO1xuICAgICAgY29uc3QgZmxhZyA9IGZsYWdzW2ldO1xuXG4gICAgICBpZiAoZmxhZyAmIFhfU0hPUlRfVkVDVE9SKSB7XG4gICAgICAgIGJ1Zi5zZXRVaW50OChwb3MrKywgeCk7XG4gICAgICB9IGVsc2UgaWYgKCEoZmxhZyAmIFhfSVNfU0FNRV9PUl9QT1NJVElWRV9YX1NIT1JUX1ZFQ1RPUikpIHtcbiAgICAgICAgYnVmLnNldEludDE2KHBvcywgeCk7XG4gICAgICAgIHBvcyArPSAyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHlDb29yZGluYXRlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBjb25zdCB5ID0geUNvb3JkaW5hdGVzW2ldO1xuICAgICAgY29uc3QgZmxhZyA9IGZsYWdzW2ldO1xuXG4gICAgICBpZiAoZmxhZyAmIFlfU0hPUlRfVkVDVE9SKSB7XG4gICAgICAgIGJ1Zi5zZXRVaW50OChwb3MrKywgeSk7XG4gICAgICB9IGVsc2UgaWYgKCEoZmxhZyAmIFlfSVNfU0FNRV9PUl9QT1NJVElWRV9ZX1NIT1JUX1ZFQ1RPUikpIHtcbiAgICAgICAgYnVmLnNldEludDE2KHBvcywgeSk7XG4gICAgICAgIHBvcyArPSAyO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwb3MgLSBzcG9zO1xuICB9XG5cbiAgc2NhbGUoeCwgZmFjdG9yKSB7XG4gICAgZm9yIChjb25zdCBjb250b3VyIG9mIHRoaXMuY29udG91cnMpIHtcbiAgICAgIGlmIChjb250b3VyLnhDb29yZGluYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGNvbnRvdXIueENvb3JkaW5hdGVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29udG91ci54Q29vcmRpbmF0ZXNbaV0gPSBNYXRoLnJvdW5kKHggKyAoY29udG91ci54Q29vcmRpbmF0ZXNbaV0gLSB4KSAqIGZhY3Rvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgQ29tcG9zaXRlR2x5cGgge1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgZmxhZ3MsXG4gICAgZ2x5cGhJbmRleCxcbiAgICBhcmd1bWVudDEsXG4gICAgYXJndW1lbnQyLFxuICAgIHRyYW5zZixcbiAgICBpbnN0cnVjdGlvbnNcbiAgfSkge1xuICAgIHRoaXMuZmxhZ3MgPSBmbGFncztcbiAgICB0aGlzLmdseXBoSW5kZXggPSBnbHlwaEluZGV4O1xuICAgIHRoaXMuYXJndW1lbnQxID0gYXJndW1lbnQxO1xuICAgIHRoaXMuYXJndW1lbnQyID0gYXJndW1lbnQyO1xuICAgIHRoaXMudHJhbnNmID0gdHJhbnNmO1xuICAgIHRoaXMuaW5zdHJ1Y3Rpb25zID0gaW5zdHJ1Y3Rpb25zO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlKHBvcywgZ2x5Zikge1xuICAgIGNvbnN0IHNwb3MgPSBwb3M7XG4gICAgY29uc3QgdHJhbnNmID0gW107XG4gICAgbGV0IGZsYWdzID0gZ2x5Zi5nZXRVaW50MTYocG9zKTtcbiAgICBjb25zdCBnbHlwaEluZGV4ID0gZ2x5Zi5nZXRVaW50MTYocG9zICsgMik7XG4gICAgcG9zICs9IDQ7XG4gICAgbGV0IGFyZ3VtZW50MSwgYXJndW1lbnQyO1xuXG4gICAgaWYgKGZsYWdzICYgQVJHXzFfQU5EXzJfQVJFX1dPUkRTKSB7XG4gICAgICBpZiAoZmxhZ3MgJiBBUkdTX0FSRV9YWV9WQUxVRVMpIHtcbiAgICAgICAgYXJndW1lbnQxID0gZ2x5Zi5nZXRJbnQxNihwb3MpO1xuICAgICAgICBhcmd1bWVudDIgPSBnbHlmLmdldEludDE2KHBvcyArIDIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXJndW1lbnQxID0gZ2x5Zi5nZXRVaW50MTYocG9zKTtcbiAgICAgICAgYXJndW1lbnQyID0gZ2x5Zi5nZXRVaW50MTYocG9zICsgMik7XG4gICAgICB9XG5cbiAgICAgIHBvcyArPSA0O1xuICAgICAgZmxhZ3MgXj0gQVJHXzFfQU5EXzJfQVJFX1dPUkRTO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmd1bWVudDEgPSBnbHlmLmdldFVpbnQ4KHBvcyk7XG4gICAgICBhcmd1bWVudDIgPSBnbHlmLmdldFVpbnQ4KHBvcyArIDEpO1xuXG4gICAgICBpZiAoZmxhZ3MgJiBBUkdTX0FSRV9YWV9WQUxVRVMpIHtcbiAgICAgICAgY29uc3QgYWJzMSA9IGFyZ3VtZW50MSAmIDB4N2Y7XG4gICAgICAgIGFyZ3VtZW50MSA9IGFyZ3VtZW50MSAmIDB4ODAgPyAtYWJzMSA6IGFiczE7XG4gICAgICAgIGNvbnN0IGFiczIgPSBhcmd1bWVudDIgJiAweDdmO1xuICAgICAgICBhcmd1bWVudDIgPSBhcmd1bWVudDIgJiAweDgwID8gLWFiczIgOiBhYnMyO1xuICAgICAgfVxuXG4gICAgICBwb3MgKz0gMjtcbiAgICB9XG5cbiAgICBpZiAoZmxhZ3MgJiBXRV9IQVZFX0FfU0NBTEUpIHtcbiAgICAgIHRyYW5zZi5wdXNoKGdseWYuZ2V0VWludDE2KHBvcykpO1xuICAgICAgcG9zICs9IDI7XG4gICAgfSBlbHNlIGlmIChmbGFncyAmIFdFX0hBVkVfQU5fWF9BTkRfWV9TQ0FMRSkge1xuICAgICAgdHJhbnNmLnB1c2goZ2x5Zi5nZXRVaW50MTYocG9zKSwgZ2x5Zi5nZXRVaW50MTYocG9zICsgMikpO1xuICAgICAgcG9zICs9IDQ7XG4gICAgfSBlbHNlIGlmIChmbGFncyAmIFdFX0hBVkVfQV9UV09fQllfVFdPKSB7XG4gICAgICB0cmFuc2YucHVzaChnbHlmLmdldFVpbnQxNihwb3MpLCBnbHlmLmdldFVpbnQxNihwb3MgKyAyKSwgZ2x5Zi5nZXRVaW50MTYocG9zICsgNCksIGdseWYuZ2V0VWludDE2KHBvcyArIDYpKTtcbiAgICAgIHBvcyArPSA4O1xuICAgIH1cblxuICAgIGxldCBpbnN0cnVjdGlvbnMgPSBudWxsO1xuXG4gICAgaWYgKGZsYWdzICYgV0VfSEFWRV9JTlNUUlVDVElPTlMpIHtcbiAgICAgIGNvbnN0IGluc3RydWN0aW9uTGVuZ3RoID0gZ2x5Zi5nZXRVaW50MTYocG9zKTtcbiAgICAgIHBvcyArPSAyO1xuICAgICAgaW5zdHJ1Y3Rpb25zID0gbmV3IFVpbnQ4QXJyYXkoZ2x5Zikuc2xpY2UocG9zLCBwb3MgKyBpbnN0cnVjdGlvbkxlbmd0aCk7XG4gICAgICBwb3MgKz0gaW5zdHJ1Y3Rpb25MZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtwb3MgLSBzcG9zLCBuZXcgQ29tcG9zaXRlR2x5cGgoe1xuICAgICAgZmxhZ3MsXG4gICAgICBnbHlwaEluZGV4LFxuICAgICAgYXJndW1lbnQxLFxuICAgICAgYXJndW1lbnQyLFxuICAgICAgdHJhbnNmLFxuICAgICAgaW5zdHJ1Y3Rpb25zXG4gICAgfSldO1xuICB9XG5cbiAgZ2V0U2l6ZSgpIHtcbiAgICBsZXQgc2l6ZSA9IDIgKyAyICsgdGhpcy50cmFuc2YubGVuZ3RoICogMjtcblxuICAgIGlmICh0aGlzLmZsYWdzICYgV0VfSEFWRV9JTlNUUlVDVElPTlMpIHtcbiAgICAgIHNpemUgKz0gMiArIHRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aDtcbiAgICB9XG5cbiAgICBzaXplICs9IDI7XG5cbiAgICBpZiAodGhpcy5mbGFncyAmIDIpIHtcbiAgICAgIGlmICghKHRoaXMuYXJndW1lbnQxID49IC0xMjggJiYgdGhpcy5hcmd1bWVudDEgPD0gMTI3ICYmIHRoaXMuYXJndW1lbnQyID49IC0xMjggJiYgdGhpcy5hcmd1bWVudDIgPD0gMTI3KSkge1xuICAgICAgICBzaXplICs9IDI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghKHRoaXMuYXJndW1lbnQxID49IDAgJiYgdGhpcy5hcmd1bWVudDEgPD0gMjU1ICYmIHRoaXMuYXJndW1lbnQyID49IDAgJiYgdGhpcy5hcmd1bWVudDIgPD0gMjU1KSkge1xuICAgICAgICBzaXplICs9IDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpemU7XG4gIH1cblxuICB3cml0ZShwb3MsIGJ1Zikge1xuICAgIGNvbnN0IHNwb3MgPSBwb3M7XG5cbiAgICBpZiAodGhpcy5mbGFncyAmIEFSR1NfQVJFX1hZX1ZBTFVFUykge1xuICAgICAgaWYgKCEodGhpcy5hcmd1bWVudDEgPj0gLTEyOCAmJiB0aGlzLmFyZ3VtZW50MSA8PSAxMjcgJiYgdGhpcy5hcmd1bWVudDIgPj0gLTEyOCAmJiB0aGlzLmFyZ3VtZW50MiA8PSAxMjcpKSB7XG4gICAgICAgIHRoaXMuZmxhZ3MgfD0gQVJHXzFfQU5EXzJfQVJFX1dPUkRTO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoISh0aGlzLmFyZ3VtZW50MSA+PSAwICYmIHRoaXMuYXJndW1lbnQxIDw9IDI1NSAmJiB0aGlzLmFyZ3VtZW50MiA+PSAwICYmIHRoaXMuYXJndW1lbnQyIDw9IDI1NSkpIHtcbiAgICAgICAgdGhpcy5mbGFncyB8PSBBUkdfMV9BTkRfMl9BUkVfV09SRFM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYnVmLnNldFVpbnQxNihwb3MsIHRoaXMuZmxhZ3MpO1xuICAgIGJ1Zi5zZXRVaW50MTYocG9zICsgMiwgdGhpcy5nbHlwaEluZGV4KTtcbiAgICBwb3MgKz0gNDtcblxuICAgIGlmICh0aGlzLmZsYWdzICYgQVJHXzFfQU5EXzJfQVJFX1dPUkRTKSB7XG4gICAgICBpZiAodGhpcy5mbGFncyAmIEFSR1NfQVJFX1hZX1ZBTFVFUykge1xuICAgICAgICBidWYuc2V0SW50MTYocG9zLCB0aGlzLmFyZ3VtZW50MSk7XG4gICAgICAgIGJ1Zi5zZXRJbnQxNihwb3MgKyAyLCB0aGlzLmFyZ3VtZW50Mik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWYuc2V0VWludDE2KHBvcywgdGhpcy5hcmd1bWVudDEpO1xuICAgICAgICBidWYuc2V0VWludDE2KHBvcyArIDIsIHRoaXMuYXJndW1lbnQyKTtcbiAgICAgIH1cblxuICAgICAgcG9zICs9IDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5zZXRVaW50OChwb3MsIHRoaXMuYXJndW1lbnQxKTtcbiAgICAgIGJ1Zi5zZXRVaW50OChwb3MgKyAxLCB0aGlzLmFyZ3VtZW50Mik7XG4gICAgICBwb3MgKz0gMjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mbGFncyAmIFdFX0hBVkVfSU5TVFJVQ1RJT05TKSB7XG4gICAgICBidWYuc2V0VWludDE2KHBvcywgdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKTtcbiAgICAgIHBvcyArPSAyO1xuXG4gICAgICBpZiAodGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIG5ldyBVaW50OEFycmF5KGJ1Zi5idWZmZXIsIDAsIGJ1Zi5idWZmZXIuYnl0ZUxlbmd0aCkuc2V0KHRoaXMuaW5zdHJ1Y3Rpb25zLCBwb3MpO1xuICAgICAgICBwb3MgKz0gdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwb3MgLSBzcG9zO1xuICB9XG5cbiAgc2NhbGUoeCwgZmFjdG9yKSB7fVxuXG59XG5cbi8qKiovIH0pLFxuLyogNTIgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuT3BlblR5cGVGaWxlQnVpbGRlciA9IHZvaWQgMDtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg5KTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuZnVuY3Rpb24gd3JpdGVJbnQxNihkZXN0LCBvZmZzZXQsIG51bSkge1xuICBkZXN0W29mZnNldF0gPSBudW0gPj4gOCAmIDB4ZmY7XG4gIGRlc3Rbb2Zmc2V0ICsgMV0gPSBudW0gJiAweGZmO1xufVxuXG5mdW5jdGlvbiB3cml0ZUludDMyKGRlc3QsIG9mZnNldCwgbnVtKSB7XG4gIGRlc3Rbb2Zmc2V0XSA9IG51bSA+PiAyNCAmIDB4ZmY7XG4gIGRlc3Rbb2Zmc2V0ICsgMV0gPSBudW0gPj4gMTYgJiAweGZmO1xuICBkZXN0W29mZnNldCArIDJdID0gbnVtID4+IDggJiAweGZmO1xuICBkZXN0W29mZnNldCArIDNdID0gbnVtICYgMHhmZjtcbn1cblxuZnVuY3Rpb24gd3JpdGVEYXRhKGRlc3QsIG9mZnNldCwgZGF0YSkge1xuICBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICBkZXN0LnNldChkYXRhLCBvZmZzZXQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZGF0YS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBkZXN0W29mZnNldCsrXSA9IGRhdGEuY2hhckNvZGVBdChpKSAmIDB4ZmY7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgZGVzdFtvZmZzZXQrK10gPSBkYXRhW2ldICYgMHhmZjtcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgT1RGX0hFQURFUl9TSVpFID0gMTI7XG5jb25zdCBPVEZfVEFCTEVfRU5UUllfU0laRSA9IDE2O1xuXG5jbGFzcyBPcGVuVHlwZUZpbGVCdWlsZGVyIHtcbiAgY29uc3RydWN0b3Ioc2ZudCkge1xuICAgIHRoaXMuc2ZudCA9IHNmbnQ7XG4gICAgdGhpcy50YWJsZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgc3RhdGljIGdldFNlYXJjaFBhcmFtcyhlbnRyaWVzQ291bnQsIGVudHJ5U2l6ZSkge1xuICAgIGxldCBtYXhQb3dlcjIgPSAxLFxuICAgICAgICBsb2cyID0gMDtcblxuICAgIHdoaWxlICgobWF4UG93ZXIyIF4gZW50cmllc0NvdW50KSA+IG1heFBvd2VyMikge1xuICAgICAgbWF4UG93ZXIyIDw8PSAxO1xuICAgICAgbG9nMisrO1xuICAgIH1cblxuICAgIGNvbnN0IHNlYXJjaFJhbmdlID0gbWF4UG93ZXIyICogZW50cnlTaXplO1xuICAgIHJldHVybiB7XG4gICAgICByYW5nZTogc2VhcmNoUmFuZ2UsXG4gICAgICBlbnRyeTogbG9nMixcbiAgICAgIHJhbmdlU2hpZnQ6IGVudHJ5U2l6ZSAqIGVudHJpZXNDb3VudCAtIHNlYXJjaFJhbmdlXG4gICAgfTtcbiAgfVxuXG4gIHRvQXJyYXkoKSB7XG4gICAgbGV0IHNmbnQgPSB0aGlzLnNmbnQ7XG4gICAgY29uc3QgdGFibGVzID0gdGhpcy50YWJsZXM7XG4gICAgY29uc3QgdGFibGVzTmFtZXMgPSBPYmplY3Qua2V5cyh0YWJsZXMpO1xuICAgIHRhYmxlc05hbWVzLnNvcnQoKTtcbiAgICBjb25zdCBudW1UYWJsZXMgPSB0YWJsZXNOYW1lcy5sZW5ndGg7XG4gICAgbGV0IGksIGosIGpqLCB0YWJsZSwgdGFibGVOYW1lO1xuICAgIGxldCBvZmZzZXQgPSBPVEZfSEVBREVSX1NJWkUgKyBudW1UYWJsZXMgKiBPVEZfVEFCTEVfRU5UUllfU0laRTtcbiAgICBjb25zdCB0YWJsZU9mZnNldHMgPSBbb2Zmc2V0XTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBudW1UYWJsZXM7IGkrKykge1xuICAgICAgdGFibGUgPSB0YWJsZXNbdGFibGVzTmFtZXNbaV1dO1xuICAgICAgY29uc3QgcGFkZGVkTGVuZ3RoID0gKHRhYmxlLmxlbmd0aCArIDMgJiB+MykgPj4+IDA7XG4gICAgICBvZmZzZXQgKz0gcGFkZGVkTGVuZ3RoO1xuICAgICAgdGFibGVPZmZzZXRzLnB1c2gob2Zmc2V0KTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlID0gbmV3IFVpbnQ4QXJyYXkob2Zmc2V0KTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBudW1UYWJsZXM7IGkrKykge1xuICAgICAgdGFibGUgPSB0YWJsZXNbdGFibGVzTmFtZXNbaV1dO1xuICAgICAgd3JpdGVEYXRhKGZpbGUsIHRhYmxlT2Zmc2V0c1tpXSwgdGFibGUpO1xuICAgIH1cblxuICAgIGlmIChzZm50ID09PSBcInRydWVcIikge1xuICAgICAgc2ZudCA9ICgwLCBfdXRpbC5zdHJpbmczMikoMHgwMDAxMDAwMCk7XG4gICAgfVxuXG4gICAgZmlsZVswXSA9IHNmbnQuY2hhckNvZGVBdCgwKSAmIDB4ZmY7XG4gICAgZmlsZVsxXSA9IHNmbnQuY2hhckNvZGVBdCgxKSAmIDB4ZmY7XG4gICAgZmlsZVsyXSA9IHNmbnQuY2hhckNvZGVBdCgyKSAmIDB4ZmY7XG4gICAgZmlsZVszXSA9IHNmbnQuY2hhckNvZGVBdCgzKSAmIDB4ZmY7XG4gICAgd3JpdGVJbnQxNihmaWxlLCA0LCBudW1UYWJsZXMpO1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IE9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zKG51bVRhYmxlcywgMTYpO1xuICAgIHdyaXRlSW50MTYoZmlsZSwgNiwgc2VhcmNoUGFyYW1zLnJhbmdlKTtcbiAgICB3cml0ZUludDE2KGZpbGUsIDgsIHNlYXJjaFBhcmFtcy5lbnRyeSk7XG4gICAgd3JpdGVJbnQxNihmaWxlLCAxMCwgc2VhcmNoUGFyYW1zLnJhbmdlU2hpZnQpO1xuICAgIG9mZnNldCA9IE9URl9IRUFERVJfU0laRTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBudW1UYWJsZXM7IGkrKykge1xuICAgICAgdGFibGVOYW1lID0gdGFibGVzTmFtZXNbaV07XG4gICAgICBmaWxlW29mZnNldF0gPSB0YWJsZU5hbWUuY2hhckNvZGVBdCgwKSAmIDB4ZmY7XG4gICAgICBmaWxlW29mZnNldCArIDFdID0gdGFibGVOYW1lLmNoYXJDb2RlQXQoMSkgJiAweGZmO1xuICAgICAgZmlsZVtvZmZzZXQgKyAyXSA9IHRhYmxlTmFtZS5jaGFyQ29kZUF0KDIpICYgMHhmZjtcbiAgICAgIGZpbGVbb2Zmc2V0ICsgM10gPSB0YWJsZU5hbWUuY2hhckNvZGVBdCgzKSAmIDB4ZmY7XG4gICAgICBsZXQgY2hlY2tzdW0gPSAwO1xuXG4gICAgICBmb3IgKGogPSB0YWJsZU9mZnNldHNbaV0sIGpqID0gdGFibGVPZmZzZXRzW2kgKyAxXTsgaiA8IGpqOyBqICs9IDQpIHtcbiAgICAgICAgY29uc3QgcXVhZCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShmaWxlLCBqKTtcbiAgICAgICAgY2hlY2tzdW0gPSBjaGVja3N1bSArIHF1YWQgPj4+IDA7XG4gICAgICB9XG5cbiAgICAgIHdyaXRlSW50MzIoZmlsZSwgb2Zmc2V0ICsgNCwgY2hlY2tzdW0pO1xuICAgICAgd3JpdGVJbnQzMihmaWxlLCBvZmZzZXQgKyA4LCB0YWJsZU9mZnNldHNbaV0pO1xuICAgICAgd3JpdGVJbnQzMihmaWxlLCBvZmZzZXQgKyAxMiwgdGFibGVzW3RhYmxlTmFtZV0ubGVuZ3RoKTtcbiAgICAgIG9mZnNldCArPSBPVEZfVEFCTEVfRU5UUllfU0laRTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZTtcbiAgfVxuXG4gIGFkZFRhYmxlKHRhZywgZGF0YSkge1xuICAgIGlmICh0YWcgaW4gdGhpcy50YWJsZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRhYmxlIFwiICsgdGFnICsgXCIgYWxyZWFkeSBleGlzdHNcIik7XG4gICAgfVxuXG4gICAgdGhpcy50YWJsZXNbdGFnXSA9IGRhdGE7XG4gIH1cblxufVxuXG5leHBvcnRzLk9wZW5UeXBlRmlsZUJ1aWxkZXIgPSBPcGVuVHlwZUZpbGVCdWlsZGVyO1xuXG4vKioqLyB9KSxcbi8qIDUzICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlR5cGUxRm9udCA9IHZvaWQgMDtcblxudmFyIF9jZmZfcGFyc2VyID0gX193X3BkZmpzX3JlcXVpcmVfXyg0NSk7XG5cbnZhciBfZm9udHNfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE4KTtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg5KTtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEwKTtcblxudmFyIF90eXBlMV9wYXJzZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDU0KTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuZnVuY3Rpb24gZmluZEJsb2NrKHN0cmVhbUJ5dGVzLCBzaWduYXR1cmUsIHN0YXJ0SW5kZXgpIHtcbiAgY29uc3Qgc3RyZWFtQnl0ZXNMZW5ndGggPSBzdHJlYW1CeXRlcy5sZW5ndGg7XG4gIGNvbnN0IHNpZ25hdHVyZUxlbmd0aCA9IHNpZ25hdHVyZS5sZW5ndGg7XG4gIGNvbnN0IHNjYW5MZW5ndGggPSBzdHJlYW1CeXRlc0xlbmd0aCAtIHNpZ25hdHVyZUxlbmd0aDtcbiAgbGV0IGkgPSBzdGFydEluZGV4LFxuICAgICAgZm91bmQgPSBmYWxzZTtcblxuICB3aGlsZSAoaSA8IHNjYW5MZW5ndGgpIHtcbiAgICBsZXQgaiA9IDA7XG5cbiAgICB3aGlsZSAoaiA8IHNpZ25hdHVyZUxlbmd0aCAmJiBzdHJlYW1CeXRlc1tpICsgal0gPT09IHNpZ25hdHVyZVtqXSkge1xuICAgICAgaisrO1xuICAgIH1cblxuICAgIGlmIChqID49IHNpZ25hdHVyZUxlbmd0aCkge1xuICAgICAgaSArPSBqO1xuXG4gICAgICB3aGlsZSAoaSA8IHN0cmVhbUJ5dGVzTGVuZ3RoICYmICgwLCBfY29yZV91dGlscy5pc1doaXRlU3BhY2UpKHN0cmVhbUJ5dGVzW2ldKSkge1xuICAgICAgICBpKys7XG4gICAgICB9XG5cbiAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZm91bmQsXG4gICAgbGVuZ3RoOiBpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEhlYWRlckJsb2NrKHN0cmVhbSwgc3VnZ2VzdGVkTGVuZ3RoKSB7XG4gIGNvbnN0IEVFWEVDX1NJR05BVFVSRSA9IFsweDY1LCAweDY1LCAweDc4LCAweDY1LCAweDYzXTtcbiAgY29uc3Qgc3RyZWFtU3RhcnRQb3MgPSBzdHJlYW0ucG9zO1xuICBsZXQgaGVhZGVyQnl0ZXMsIGhlYWRlckJ5dGVzTGVuZ3RoLCBibG9jaztcblxuICB0cnkge1xuICAgIGhlYWRlckJ5dGVzID0gc3RyZWFtLmdldEJ5dGVzKHN1Z2dlc3RlZExlbmd0aCk7XG4gICAgaGVhZGVyQnl0ZXNMZW5ndGggPSBoZWFkZXJCeXRlcy5sZW5ndGg7XG4gIH0gY2F0Y2ggKGV4KSB7fVxuXG4gIGlmIChoZWFkZXJCeXRlc0xlbmd0aCA9PT0gc3VnZ2VzdGVkTGVuZ3RoKSB7XG4gICAgYmxvY2sgPSBmaW5kQmxvY2soaGVhZGVyQnl0ZXMsIEVFWEVDX1NJR05BVFVSRSwgc3VnZ2VzdGVkTGVuZ3RoIC0gMiAqIEVFWEVDX1NJR05BVFVSRS5sZW5ndGgpO1xuXG4gICAgaWYgKGJsb2NrLmZvdW5kICYmIGJsb2NrLmxlbmd0aCA9PT0gc3VnZ2VzdGVkTGVuZ3RoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdHJlYW06IG5ldyBfc3RyZWFtLlN0cmVhbShoZWFkZXJCeXRlcyksXG4gICAgICAgIGxlbmd0aDogc3VnZ2VzdGVkTGVuZ3RoXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gICgwLCBfdXRpbC53YXJuKSgnSW52YWxpZCBcIkxlbmd0aDFcIiBwcm9wZXJ0eSBpbiBUeXBlMSBmb250IC0tIHRyeWluZyB0byByZWNvdmVyLicpO1xuICBzdHJlYW0ucG9zID0gc3RyZWFtU3RhcnRQb3M7XG4gIGNvbnN0IFNDQU5fQkxPQ0tfTEVOR1RIID0gMjA0ODtcbiAgbGV0IGFjdHVhbExlbmd0aDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHNjYW5CeXRlcyA9IHN0cmVhbS5wZWVrQnl0ZXMoU0NBTl9CTE9DS19MRU5HVEgpO1xuICAgIGJsb2NrID0gZmluZEJsb2NrKHNjYW5CeXRlcywgRUVYRUNfU0lHTkFUVVJFLCAwKTtcblxuICAgIGlmIChibG9jay5sZW5ndGggPT09IDApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHN0cmVhbS5wb3MgKz0gYmxvY2subGVuZ3RoO1xuXG4gICAgaWYgKGJsb2NrLmZvdW5kKSB7XG4gICAgICBhY3R1YWxMZW5ndGggPSBzdHJlYW0ucG9zIC0gc3RyZWFtU3RhcnRQb3M7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzdHJlYW0ucG9zID0gc3RyZWFtU3RhcnRQb3M7XG5cbiAgaWYgKGFjdHVhbExlbmd0aCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdHJlYW06IG5ldyBfc3RyZWFtLlN0cmVhbShzdHJlYW0uZ2V0Qnl0ZXMoYWN0dWFsTGVuZ3RoKSksXG4gICAgICBsZW5ndGg6IGFjdHVhbExlbmd0aFxuICAgIH07XG4gIH1cblxuICAoMCwgX3V0aWwud2FybikoJ1VuYWJsZSB0byByZWNvdmVyIFwiTGVuZ3RoMVwiIHByb3BlcnR5IGluIFR5cGUxIGZvbnQgLS0gdXNpbmcgYXMgaXMuJyk7XG4gIHJldHVybiB7XG4gICAgc3RyZWFtOiBuZXcgX3N0cmVhbS5TdHJlYW0oc3RyZWFtLmdldEJ5dGVzKHN1Z2dlc3RlZExlbmd0aCkpLFxuICAgIGxlbmd0aDogc3VnZ2VzdGVkTGVuZ3RoXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEVleGVjQmxvY2soc3RyZWFtLCBzdWdnZXN0ZWRMZW5ndGgpIHtcbiAgY29uc3QgZWV4ZWNCeXRlcyA9IHN0cmVhbS5nZXRCeXRlcygpO1xuICByZXR1cm4ge1xuICAgIHN0cmVhbTogbmV3IF9zdHJlYW0uU3RyZWFtKGVleGVjQnl0ZXMpLFxuICAgIGxlbmd0aDogZWV4ZWNCeXRlcy5sZW5ndGhcbiAgfTtcbn1cblxuY2xhc3MgVHlwZTFGb250IHtcbiAgY29uc3RydWN0b3IobmFtZSwgZmlsZSwgcHJvcGVydGllcykge1xuICAgIGNvbnN0IFBGQl9IRUFERVJfU0laRSA9IDY7XG4gICAgbGV0IGhlYWRlckJsb2NrTGVuZ3RoID0gcHJvcGVydGllcy5sZW5ndGgxO1xuICAgIGxldCBlZXhlY0Jsb2NrTGVuZ3RoID0gcHJvcGVydGllcy5sZW5ndGgyO1xuICAgIGxldCBwZmJIZWFkZXIgPSBmaWxlLnBlZWtCeXRlcyhQRkJfSEVBREVSX1NJWkUpO1xuICAgIGNvbnN0IHBmYkhlYWRlclByZXNlbnQgPSBwZmJIZWFkZXJbMF0gPT09IDB4ODAgJiYgcGZiSGVhZGVyWzFdID09PSAweDAxO1xuXG4gICAgaWYgKHBmYkhlYWRlclByZXNlbnQpIHtcbiAgICAgIGZpbGUuc2tpcChQRkJfSEVBREVSX1NJWkUpO1xuICAgICAgaGVhZGVyQmxvY2tMZW5ndGggPSBwZmJIZWFkZXJbNV0gPDwgMjQgfCBwZmJIZWFkZXJbNF0gPDwgMTYgfCBwZmJIZWFkZXJbM10gPDwgOCB8IHBmYkhlYWRlclsyXTtcbiAgICB9XG5cbiAgICBjb25zdCBoZWFkZXJCbG9jayA9IGdldEhlYWRlckJsb2NrKGZpbGUsIGhlYWRlckJsb2NrTGVuZ3RoKTtcbiAgICBjb25zdCBoZWFkZXJCbG9ja1BhcnNlciA9IG5ldyBfdHlwZTFfcGFyc2VyLlR5cGUxUGFyc2VyKGhlYWRlckJsb2NrLnN0cmVhbSwgZmFsc2UsIF9mb250c191dGlscy5TRUFDX0FOQUxZU0lTX0VOQUJMRUQpO1xuICAgIGhlYWRlckJsb2NrUGFyc2VyLmV4dHJhY3RGb250SGVhZGVyKHByb3BlcnRpZXMpO1xuXG4gICAgaWYgKHBmYkhlYWRlclByZXNlbnQpIHtcbiAgICAgIHBmYkhlYWRlciA9IGZpbGUuZ2V0Qnl0ZXMoUEZCX0hFQURFUl9TSVpFKTtcbiAgICAgIGVleGVjQmxvY2tMZW5ndGggPSBwZmJIZWFkZXJbNV0gPDwgMjQgfCBwZmJIZWFkZXJbNF0gPDwgMTYgfCBwZmJIZWFkZXJbM10gPDwgOCB8IHBmYkhlYWRlclsyXTtcbiAgICB9XG5cbiAgICBjb25zdCBlZXhlY0Jsb2NrID0gZ2V0RWV4ZWNCbG9jayhmaWxlLCBlZXhlY0Jsb2NrTGVuZ3RoKTtcbiAgICBjb25zdCBlZXhlY0Jsb2NrUGFyc2VyID0gbmV3IF90eXBlMV9wYXJzZXIuVHlwZTFQYXJzZXIoZWV4ZWNCbG9jay5zdHJlYW0sIHRydWUsIF9mb250c191dGlscy5TRUFDX0FOQUxZU0lTX0VOQUJMRUQpO1xuICAgIGNvbnN0IGRhdGEgPSBlZXhlY0Jsb2NrUGFyc2VyLmV4dHJhY3RGb250UHJvZ3JhbShwcm9wZXJ0aWVzKTtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEucHJvcGVydGllcykge1xuICAgICAgcHJvcGVydGllc1trZXldID0gZGF0YS5wcm9wZXJ0aWVzW2tleV07XG4gICAgfVxuXG4gICAgY29uc3QgY2hhcnN0cmluZ3MgPSBkYXRhLmNoYXJzdHJpbmdzO1xuICAgIGNvbnN0IHR5cGUyQ2hhcnN0cmluZ3MgPSB0aGlzLmdldFR5cGUyQ2hhcnN0cmluZ3MoY2hhcnN0cmluZ3MpO1xuICAgIGNvbnN0IHN1YnJzID0gdGhpcy5nZXRUeXBlMlN1YnJzKGRhdGEuc3VicnMpO1xuICAgIHRoaXMuY2hhcnN0cmluZ3MgPSBjaGFyc3RyaW5ncztcbiAgICB0aGlzLmRhdGEgPSB0aGlzLndyYXAobmFtZSwgdHlwZTJDaGFyc3RyaW5ncywgdGhpcy5jaGFyc3RyaW5ncywgc3VicnMsIHByb3BlcnRpZXMpO1xuICAgIHRoaXMuc2VhY3MgPSB0aGlzLmdldFNlYWNzKGRhdGEuY2hhcnN0cmluZ3MpO1xuICB9XG5cbiAgZ2V0IG51bUdseXBocygpIHtcbiAgICByZXR1cm4gdGhpcy5jaGFyc3RyaW5ncy5sZW5ndGggKyAxO1xuICB9XG5cbiAgZ2V0Q2hhcnNldCgpIHtcbiAgICBjb25zdCBjaGFyc2V0ID0gW1wiLm5vdGRlZlwiXTtcbiAgICBjb25zdCBjaGFyc3RyaW5ncyA9IHRoaXMuY2hhcnN0cmluZ3M7XG5cbiAgICBmb3IgKGxldCBnbHlwaElkID0gMDsgZ2x5cGhJZCA8IGNoYXJzdHJpbmdzLmxlbmd0aDsgZ2x5cGhJZCsrKSB7XG4gICAgICBjaGFyc2V0LnB1c2goY2hhcnN0cmluZ3NbZ2x5cGhJZF0uZ2x5cGhOYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hhcnNldDtcbiAgfVxuXG4gIGdldEdseXBoTWFwcGluZyhwcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgY2hhcnN0cmluZ3MgPSB0aGlzLmNoYXJzdHJpbmdzO1xuXG4gICAgaWYgKHByb3BlcnRpZXMuY29tcG9zaXRlKSB7XG4gICAgICBjb25zdCBjaGFyQ29kZVRvR2x5cGhJZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgIGZvciAobGV0IGdseXBoSWQgPSAwLCBjaGFyc3RyaW5nc0xlbiA9IGNoYXJzdHJpbmdzLmxlbmd0aDsgZ2x5cGhJZCA8IGNoYXJzdHJpbmdzTGVuOyBnbHlwaElkKyspIHtcbiAgICAgICAgY29uc3QgY2hhckNvZGUgPSBwcm9wZXJ0aWVzLmNNYXAuY2hhckNvZGVPZihnbHlwaElkKTtcbiAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gZ2x5cGhJZCArIDE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGFyQ29kZVRvR2x5cGhJZDtcbiAgICB9XG5cbiAgICBjb25zdCBnbHlwaE5hbWVzID0gW1wiLm5vdGRlZlwiXTtcbiAgICBsZXQgYnVpbHRJbkVuY29kaW5nLCBnbHlwaElkO1xuXG4gICAgZm9yIChnbHlwaElkID0gMDsgZ2x5cGhJZCA8IGNoYXJzdHJpbmdzLmxlbmd0aDsgZ2x5cGhJZCsrKSB7XG4gICAgICBnbHlwaE5hbWVzLnB1c2goY2hhcnN0cmluZ3NbZ2x5cGhJZF0uZ2x5cGhOYW1lKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmNvZGluZyA9IHByb3BlcnRpZXMuYnVpbHRJbkVuY29kaW5nO1xuXG4gICAgaWYgKGVuY29kaW5nKSB7XG4gICAgICBidWlsdEluRW5jb2RpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICBmb3IgKGNvbnN0IGNoYXJDb2RlIGluIGVuY29kaW5nKSB7XG4gICAgICAgIGdseXBoSWQgPSBnbHlwaE5hbWVzLmluZGV4T2YoZW5jb2RpbmdbY2hhckNvZGVdKTtcblxuICAgICAgICBpZiAoZ2x5cGhJZCA+PSAwKSB7XG4gICAgICAgICAgYnVpbHRJbkVuY29kaW5nW2NoYXJDb2RlXSA9IGdseXBoSWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF9mb250c191dGlscy50eXBlMUZvbnRHbHlwaE1hcHBpbmcpKHByb3BlcnRpZXMsIGJ1aWx0SW5FbmNvZGluZywgZ2x5cGhOYW1lcyk7XG4gIH1cblxuICBoYXNHbHlwaElkKGlkKSB7XG4gICAgaWYgKGlkIDwgMCB8fCBpZCA+PSB0aGlzLm51bUdseXBocykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChpZCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgZ2x5cGggPSB0aGlzLmNoYXJzdHJpbmdzW2lkIC0gMV07XG4gICAgcmV0dXJuIGdseXBoLmNoYXJzdHJpbmcubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldFNlYWNzKGNoYXJzdHJpbmdzKSB7XG4gICAgY29uc3Qgc2VhY01hcCA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gY2hhcnN0cmluZ3MubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgY29uc3QgY2hhcnN0cmluZyA9IGNoYXJzdHJpbmdzW2ldO1xuXG4gICAgICBpZiAoY2hhcnN0cmluZy5zZWFjKSB7XG4gICAgICAgIHNlYWNNYXBbaSArIDFdID0gY2hhcnN0cmluZy5zZWFjO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzZWFjTWFwO1xuICB9XG5cbiAgZ2V0VHlwZTJDaGFyc3RyaW5ncyh0eXBlMUNoYXJzdHJpbmdzKSB7XG4gICAgY29uc3QgdHlwZTJDaGFyc3RyaW5ncyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gdHlwZTFDaGFyc3RyaW5ncy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB0eXBlMkNoYXJzdHJpbmdzLnB1c2godHlwZTFDaGFyc3RyaW5nc1tpXS5jaGFyc3RyaW5nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZTJDaGFyc3RyaW5ncztcbiAgfVxuXG4gIGdldFR5cGUyU3VicnModHlwZTFTdWJycykge1xuICAgIGxldCBiaWFzID0gMDtcbiAgICBjb25zdCBjb3VudCA9IHR5cGUxU3VicnMubGVuZ3RoO1xuXG4gICAgaWYgKGNvdW50IDwgMTEzMykge1xuICAgICAgYmlhcyA9IDEwNztcbiAgICB9IGVsc2UgaWYgKGNvdW50IDwgMzM3NjkpIHtcbiAgICAgIGJpYXMgPSAxMTMxO1xuICAgIH0gZWxzZSB7XG4gICAgICBiaWFzID0gMzI3Njg7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZTJTdWJycyA9IFtdO1xuICAgIGxldCBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGJpYXM7IGkrKykge1xuICAgICAgdHlwZTJTdWJycy5wdXNoKFsweDBiXSk7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgIHR5cGUyU3VicnMucHVzaCh0eXBlMVN1YnJzW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZTJTdWJycztcbiAgfVxuXG4gIHdyYXAobmFtZSwgZ2x5cGhzLCBjaGFyc3RyaW5ncywgc3VicnMsIHByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBjZmYgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGKCk7XG4gICAgY2ZmLmhlYWRlciA9IG5ldyBfY2ZmX3BhcnNlci5DRkZIZWFkZXIoMSwgMCwgNCwgNCk7XG4gICAgY2ZmLm5hbWVzID0gW25hbWVdO1xuICAgIGNvbnN0IHRvcERpY3QgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGVG9wRGljdCgpO1xuICAgIHRvcERpY3Quc2V0QnlOYW1lKFwidmVyc2lvblwiLCAzOTEpO1xuICAgIHRvcERpY3Quc2V0QnlOYW1lKFwiTm90aWNlXCIsIDM5Mik7XG4gICAgdG9wRGljdC5zZXRCeU5hbWUoXCJGdWxsTmFtZVwiLCAzOTMpO1xuICAgIHRvcERpY3Quc2V0QnlOYW1lKFwiRmFtaWx5TmFtZVwiLCAzOTQpO1xuICAgIHRvcERpY3Quc2V0QnlOYW1lKFwiV2VpZ2h0XCIsIDM5NSk7XG4gICAgdG9wRGljdC5zZXRCeU5hbWUoXCJFbmNvZGluZ1wiLCBudWxsKTtcbiAgICB0b3BEaWN0LnNldEJ5TmFtZShcIkZvbnRNYXRyaXhcIiwgcHJvcGVydGllcy5mb250TWF0cml4KTtcbiAgICB0b3BEaWN0LnNldEJ5TmFtZShcIkZvbnRCQm94XCIsIHByb3BlcnRpZXMuYmJveCk7XG4gICAgdG9wRGljdC5zZXRCeU5hbWUoXCJjaGFyc2V0XCIsIG51bGwpO1xuICAgIHRvcERpY3Quc2V0QnlOYW1lKFwiQ2hhclN0cmluZ3NcIiwgbnVsbCk7XG4gICAgdG9wRGljdC5zZXRCeU5hbWUoXCJQcml2YXRlXCIsIG51bGwpO1xuICAgIGNmZi50b3BEaWN0ID0gdG9wRGljdDtcbiAgICBjb25zdCBzdHJpbmdzID0gbmV3IF9jZmZfcGFyc2VyLkNGRlN0cmluZ3MoKTtcbiAgICBzdHJpbmdzLmFkZChcIlZlcnNpb24gMC4xMVwiKTtcbiAgICBzdHJpbmdzLmFkZChcIlNlZSBvcmlnaW5hbCBub3RpY2VcIik7XG4gICAgc3RyaW5ncy5hZGQobmFtZSk7XG4gICAgc3RyaW5ncy5hZGQobmFtZSk7XG4gICAgc3RyaW5ncy5hZGQoXCJNZWRpdW1cIik7XG4gICAgY2ZmLnN0cmluZ3MgPSBzdHJpbmdzO1xuICAgIGNmZi5nbG9iYWxTdWJySW5kZXggPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGSW5kZXgoKTtcbiAgICBjb25zdCBjb3VudCA9IGdseXBocy5sZW5ndGg7XG4gICAgY29uc3QgY2hhcnNldEFycmF5ID0gW1wiLm5vdGRlZlwiXTtcbiAgICBsZXQgaSwgaWk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgY29uc3QgZ2x5cGhOYW1lID0gY2hhcnN0cmluZ3NbaV0uZ2x5cGhOYW1lO1xuXG4gICAgICBjb25zdCBpbmRleCA9IF9jZmZfcGFyc2VyLkNGRlN0YW5kYXJkU3RyaW5ncy5pbmRleE9mKGdseXBoTmFtZSk7XG5cbiAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgc3RyaW5ncy5hZGQoZ2x5cGhOYW1lKTtcbiAgICAgIH1cblxuICAgICAgY2hhcnNldEFycmF5LnB1c2goZ2x5cGhOYW1lKTtcbiAgICB9XG5cbiAgICBjZmYuY2hhcnNldCA9IG5ldyBfY2ZmX3BhcnNlci5DRkZDaGFyc2V0KGZhbHNlLCAwLCBjaGFyc2V0QXJyYXkpO1xuICAgIGNvbnN0IGNoYXJTdHJpbmdzSW5kZXggPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGSW5kZXgoKTtcbiAgICBjaGFyU3RyaW5nc0luZGV4LmFkZChbMHg4YiwgMHgwZV0pO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgIGNoYXJTdHJpbmdzSW5kZXguYWRkKGdseXBoc1tpXSk7XG4gICAgfVxuXG4gICAgY2ZmLmNoYXJTdHJpbmdzID0gY2hhclN0cmluZ3NJbmRleDtcbiAgICBjb25zdCBwcml2YXRlRGljdCA9IG5ldyBfY2ZmX3BhcnNlci5DRkZQcml2YXRlRGljdCgpO1xuICAgIHByaXZhdGVEaWN0LnNldEJ5TmFtZShcIlN1YnJzXCIsIG51bGwpO1xuICAgIGNvbnN0IGZpZWxkcyA9IFtcIkJsdWVWYWx1ZXNcIiwgXCJPdGhlckJsdWVzXCIsIFwiRmFtaWx5Qmx1ZXNcIiwgXCJGYW1pbHlPdGhlckJsdWVzXCIsIFwiU3RlbVNuYXBIXCIsIFwiU3RlbVNuYXBWXCIsIFwiQmx1ZVNoaWZ0XCIsIFwiQmx1ZUZ1enpcIiwgXCJCbHVlU2NhbGVcIiwgXCJMYW5ndWFnZUdyb3VwXCIsIFwiRXhwYW5zaW9uRmFjdG9yXCIsIFwiRm9yY2VCb2xkXCIsIFwiU3RkSFdcIiwgXCJTdGRWV1wiXTtcblxuICAgIGZvciAoaSA9IDAsIGlpID0gZmllbGRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzW2ldO1xuXG4gICAgICBpZiAoIShmaWVsZCBpbiBwcm9wZXJ0aWVzLnByaXZhdGVEYXRhKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsdWUgPSBwcm9wZXJ0aWVzLnByaXZhdGVEYXRhW2ZpZWxkXTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSB2YWx1ZS5sZW5ndGggLSAxOyBqID4gMDsgai0tKSB7XG4gICAgICAgICAgdmFsdWVbal0gLT0gdmFsdWVbaiAtIDFdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByaXZhdGVEaWN0LnNldEJ5TmFtZShmaWVsZCwgdmFsdWUpO1xuICAgIH1cblxuICAgIGNmZi50b3BEaWN0LnByaXZhdGVEaWN0ID0gcHJpdmF0ZURpY3Q7XG4gICAgY29uc3Qgc3VickluZGV4ID0gbmV3IF9jZmZfcGFyc2VyLkNGRkluZGV4KCk7XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IHN1YnJzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHN1YnJJbmRleC5hZGQoc3VicnNbaV0pO1xuICAgIH1cblxuICAgIHByaXZhdGVEaWN0LnN1YnJzSW5kZXggPSBzdWJySW5kZXg7XG4gICAgY29uc3QgY29tcGlsZXIgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGQ29tcGlsZXIoY2ZmKTtcbiAgICByZXR1cm4gY29tcGlsZXIuY29tcGlsZSgpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5UeXBlMUZvbnQgPSBUeXBlMUZvbnQ7XG5cbi8qKiovIH0pLFxuLyogNTQgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuVHlwZTFQYXJzZXIgPSB2b2lkIDA7XG5cbnZhciBfZW5jb2RpbmdzID0gX193X3BkZmpzX3JlcXVpcmVfXygxOSk7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOSk7XG5cbnZhciBfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxMCk7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbmNvbnN0IEhJTlRJTkdfRU5BQkxFRCA9IGZhbHNlO1xuXG5jb25zdCBUeXBlMUNoYXJTdHJpbmcgPSBmdW5jdGlvbiBUeXBlMUNoYXJTdHJpbmdDbG9zdXJlKCkge1xuICBjb25zdCBDT01NQU5EX01BUCA9IHtcbiAgICBoc3RlbTogWzFdLFxuICAgIHZzdGVtOiBbM10sXG4gICAgdm1vdmV0bzogWzRdLFxuICAgIHJsaW5ldG86IFs1XSxcbiAgICBobGluZXRvOiBbNl0sXG4gICAgdmxpbmV0bzogWzddLFxuICAgIHJyY3VydmV0bzogWzhdLFxuICAgIGNhbGxzdWJyOiBbMTBdLFxuICAgIGZsZXg6IFsxMiwgMzVdLFxuICAgIGRyb3A6IFsxMiwgMThdLFxuICAgIGVuZGNoYXI6IFsxNF0sXG4gICAgcm1vdmV0bzogWzIxXSxcbiAgICBobW92ZXRvOiBbMjJdLFxuICAgIHZoY3VydmV0bzogWzMwXSxcbiAgICBodmN1cnZldG86IFszMV1cbiAgfTtcblxuICBjbGFzcyBUeXBlMUNoYXJTdHJpbmcge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgdGhpcy53aWR0aCA9IDA7XG4gICAgICB0aGlzLmxzYiA9IDA7XG4gICAgICB0aGlzLmZsZXhpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMub3V0cHV0ID0gW107XG4gICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgfVxuXG4gICAgY29udmVydChlbmNvZGVkLCBzdWJycywgc2VhY0FuYWx5c2lzRW5hYmxlZCkge1xuICAgICAgY29uc3QgY291bnQgPSBlbmNvZGVkLmxlbmd0aDtcbiAgICAgIGxldCBlcnJvciA9IGZhbHNlO1xuICAgICAgbGV0IHd4LCBzYngsIHN1YnJOdW1iZXI7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBsZXQgdmFsdWUgPSBlbmNvZGVkW2ldO1xuXG4gICAgICAgIGlmICh2YWx1ZSA8IDMyKSB7XG4gICAgICAgICAgaWYgKHZhbHVlID09PSAxMikge1xuICAgICAgICAgICAgdmFsdWUgPSAodmFsdWUgPDwgOCkgKyBlbmNvZGVkWysraV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBpZiAoIUhJTlRJTkdfRU5BQkxFRCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgyLCBDT01NQU5EX01BUC5oc3RlbSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIGlmICghSElOVElOR19FTkFCTEVEKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFjayA9IFtdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDIsIENPTU1BTkRfTUFQLnZzdGVtKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZmxleGluZykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGR5ID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goMCwgZHkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDEsIENPTU1BTkRfTUFQLnZtb3ZldG8pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMiwgQ09NTUFORF9NQVAucmxpbmV0byk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgxLCBDT01NQU5EX01BUC5obGluZXRvKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDEsIENPTU1BTkRfTUFQLnZsaW5ldG8pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoNiwgQ09NTUFORF9NQVAucnJjdXJ2ZXRvKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgdGhpcy5zdGFjayA9IFtdO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICAgIGVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHN1YnJOdW1iZXIgPSB0aGlzLnN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICAgIGlmICghc3VicnNbc3Vick51bWJlcl0pIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuY29udmVydChzdWJyc1tzdWJyTnVtYmVyXSwgc3VicnMsIHNlYWNBbmFseXNpc0VuYWJsZWQpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuXG4gICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgd3ggPSB0aGlzLnN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICBzYnggPSB0aGlzLnN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICB0aGlzLmxzYiA9IHNieDtcbiAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHd4O1xuICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2god3gsIHNieCk7XG4gICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgyLCBDT01NQU5EX01BUC5obW92ZXRvKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICAgIHRoaXMub3V0cHV0LnB1c2goQ09NTUFORF9NQVAuZW5kY2hhclswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgICBpZiAodGhpcy5mbGV4aW5nKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMiwgQ09NTUFORF9NQVAucm1vdmV0byk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgICBpZiAodGhpcy5mbGV4aW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKDApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDEsIENPTU1BTkRfTUFQLmhtb3ZldG8pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDQsIENPTU1BTkRfTUFQLnZoY3VydmV0byk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoNCwgQ09NTUFORF9NQVAuaHZjdXJ2ZXRvKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgMDpcbiAgICAgICAgICAgICAgdGhpcy5zdGFjayA9IFtdO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAoMTIgPDwgOCkgKyAxOlxuICAgICAgICAgICAgICBpZiAoIUhJTlRJTkdfRU5BQkxFRCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgyLCBDT01NQU5EX01BUC52c3RlbSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICgxMiA8PCA4KSArIDI6XG4gICAgICAgICAgICAgIGlmICghSElOVElOR19FTkFCTEVEKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFjayA9IFtdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDIsIENPTU1BTkRfTUFQLmhzdGVtKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgNjpcbiAgICAgICAgICAgICAgaWYgKHNlYWNBbmFseXNpc0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhc2IgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gNV07XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFjID0gdGhpcy5zdGFjay5zcGxpY2UoLTQsIDQpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhY1swXSArPSB0aGlzLmxzYiAtIGFzYjtcbiAgICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMCwgQ09NTUFORF9NQVAuZW5kY2hhcik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDQsIENPTU1BTkRfTUFQLmVuZGNoYXIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgNzpcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoIDwgNCkge1xuICAgICAgICAgICAgICAgIGVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIHd4ID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgY29uc3Qgc2J5ID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgc2J4ID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgdGhpcy5sc2IgPSBzYng7XG4gICAgICAgICAgICAgIHRoaXMud2lkdGggPSB3eDtcbiAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKHd4LCBzYngsIHNieSk7XG4gICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgzLCBDT01NQU5EX01BUC5ybW92ZXRvKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgMTI6XG4gICAgICAgICAgICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBudW0yID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgY29uc3QgbnVtMSA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaChudW0xIC8gbnVtMik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICgxMiA8PCA4KSArIDE2OlxuICAgICAgICAgICAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc3Vick51bWJlciA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIGNvbnN0IG51bUFyZ3MgPSB0aGlzLnN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICAgIGlmIChzdWJyTnVtYmVyID09PSAwICYmIG51bUFyZ3MgPT09IDMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmbGV4QXJncyA9IHRoaXMuc3RhY2suc3BsaWNlKHRoaXMuc3RhY2subGVuZ3RoIC0gMTcsIDE3KTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goZmxleEFyZ3NbMl0gKyBmbGV4QXJnc1swXSwgZmxleEFyZ3NbM10gKyBmbGV4QXJnc1sxXSwgZmxleEFyZ3NbNF0sIGZsZXhBcmdzWzVdLCBmbGV4QXJnc1s2XSwgZmxleEFyZ3NbN10sIGZsZXhBcmdzWzhdLCBmbGV4QXJnc1s5XSwgZmxleEFyZ3NbMTBdLCBmbGV4QXJnc1sxMV0sIGZsZXhBcmdzWzEyXSwgZmxleEFyZ3NbMTNdLCBmbGV4QXJnc1sxNF0pO1xuICAgICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgxMywgQ09NTUFORF9NQVAuZmxleCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mbGV4aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKGZsZXhBcmdzWzE1XSwgZmxleEFyZ3NbMTZdKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJyTnVtYmVyID09PSAxICYmIG51bUFyZ3MgPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZsZXhpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgMTc6XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICgxMiA8PCA4KSArIDMzOlxuICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1Vua25vd24gdHlwZSAxIGNoYXJzdHJpbmcgY29tbWFuZCBvZiBcIicgKyB2YWx1ZSArICdcIicpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIDw9IDI0Nikge1xuICAgICAgICAgIHZhbHVlIC09IDEzOTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA8PSAyNTApIHtcbiAgICAgICAgICB2YWx1ZSA9ICh2YWx1ZSAtIDI0NykgKiAyNTYgKyBlbmNvZGVkWysraV0gKyAxMDg7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPD0gMjU0KSB7XG4gICAgICAgICAgdmFsdWUgPSAtKCh2YWx1ZSAtIDI1MSkgKiAyNTYpIC0gZW5jb2RlZFsrK2ldIC0gMTA4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlID0gKGVuY29kZWRbKytpXSAmIDB4ZmYpIDw8IDI0IHwgKGVuY29kZWRbKytpXSAmIDB4ZmYpIDw8IDE2IHwgKGVuY29kZWRbKytpXSAmIDB4ZmYpIDw8IDggfCAoZW5jb2RlZFsrK2ldICYgMHhmZikgPDwgMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhY2sucHVzaCh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG5cbiAgICBleGVjdXRlQ29tbWFuZChob3dNYW55QXJncywgY29tbWFuZCwga2VlcFN0YWNrKSB7XG4gICAgICBjb25zdCBzdGFja0xlbmd0aCA9IHRoaXMuc3RhY2subGVuZ3RoO1xuXG4gICAgICBpZiAoaG93TWFueUFyZ3MgPiBzdGFja0xlbmd0aCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhcnQgPSBzdGFja0xlbmd0aCAtIGhvd01hbnlBcmdzO1xuXG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBzdGFja0xlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuc3RhY2tbaV07XG5cbiAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XG4gICAgICAgICAgdGhpcy5vdXRwdXQucHVzaCgyOCwgdmFsdWUgPj4gOCAmIDB4ZmYsIHZhbHVlICYgMHhmZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgPSA2NTUzNiAqIHZhbHVlIHwgMDtcbiAgICAgICAgICB0aGlzLm91dHB1dC5wdXNoKDI1NSwgdmFsdWUgPj4gMjQgJiAweGZmLCB2YWx1ZSA+PiAxNiAmIDB4ZmYsIHZhbHVlID4+IDggJiAweGZmLCB2YWx1ZSAmIDB4ZmYpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3V0cHV0LnB1c2guYXBwbHkodGhpcy5vdXRwdXQsIGNvbW1hbmQpO1xuXG4gICAgICBpZiAoa2VlcFN0YWNrKSB7XG4gICAgICAgIHRoaXMuc3RhY2suc3BsaWNlKHN0YXJ0LCBob3dNYW55QXJncyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YWNrLmxlbmd0aCA9IDA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBUeXBlMUNoYXJTdHJpbmc7XG59KCk7XG5cbmNvbnN0IFR5cGUxUGFyc2VyID0gZnVuY3Rpb24gVHlwZTFQYXJzZXJDbG9zdXJlKCkge1xuICBjb25zdCBFRVhFQ19FTkNSWVBUX0tFWSA9IDU1NjY1O1xuICBjb25zdCBDSEFSX1NUUlNfRU5DUllQVF9LRVkgPSA0MzMwO1xuXG4gIGZ1bmN0aW9uIGlzSGV4RGlnaXQoY29kZSkge1xuICAgIHJldHVybiBjb2RlID49IDQ4ICYmIGNvZGUgPD0gNTcgfHwgY29kZSA+PSA2NSAmJiBjb2RlIDw9IDcwIHx8IGNvZGUgPj0gOTcgJiYgY29kZSA8PSAxMDI7XG4gIH1cblxuICBmdW5jdGlvbiBkZWNyeXB0KGRhdGEsIGtleSwgZGlzY2FyZE51bWJlcikge1xuICAgIGlmIChkaXNjYXJkTnVtYmVyID49IGRhdGEubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7XG4gICAgfVxuXG4gICAgY29uc3QgYzEgPSA1Mjg0NSxcbiAgICAgICAgICBjMiA9IDIyNzE5O1xuICAgIGxldCByID0ga2V5IHwgMCxcbiAgICAgICAgaSxcbiAgICAgICAgajtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBkaXNjYXJkTnVtYmVyOyBpKyspIHtcbiAgICAgIHIgPSAoZGF0YVtpXSArIHIpICogYzEgKyBjMiAmICgxIDw8IDE2KSAtIDE7XG4gICAgfVxuXG4gICAgY29uc3QgY291bnQgPSBkYXRhLmxlbmd0aCAtIGRpc2NhcmROdW1iZXI7XG4gICAgY29uc3QgZGVjcnlwdGVkID0gbmV3IFVpbnQ4QXJyYXkoY291bnQpO1xuXG4gICAgZm9yIChpID0gZGlzY2FyZE51bWJlciwgaiA9IDA7IGogPCBjb3VudDsgaSsrLCBqKyspIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVtpXTtcbiAgICAgIGRlY3J5cHRlZFtqXSA9IHZhbHVlIF4gciA+PiA4O1xuICAgICAgciA9ICh2YWx1ZSArIHIpICogYzEgKyBjMiAmICgxIDw8IDE2KSAtIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlY3J5cHRlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY3J5cHRBc2NpaShkYXRhLCBrZXksIGRpc2NhcmROdW1iZXIpIHtcbiAgICBjb25zdCBjMSA9IDUyODQ1LFxuICAgICAgICAgIGMyID0gMjI3MTk7XG4gICAgbGV0IHIgPSBrZXkgfCAwO1xuICAgIGNvbnN0IGNvdW50ID0gZGF0YS5sZW5ndGgsXG4gICAgICAgICAgbWF5YmVMZW5ndGggPSBjb3VudCA+Pj4gMTtcbiAgICBjb25zdCBkZWNyeXB0ZWQgPSBuZXcgVWludDhBcnJheShtYXliZUxlbmd0aCk7XG4gICAgbGV0IGksIGo7XG5cbiAgICBmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IGRpZ2l0MSA9IGRhdGFbaV07XG5cbiAgICAgIGlmICghaXNIZXhEaWdpdChkaWdpdDEpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgICBsZXQgZGlnaXQyO1xuXG4gICAgICB3aGlsZSAoaSA8IGNvdW50ICYmICFpc0hleERpZ2l0KGRpZ2l0MiA9IGRhdGFbaV0pKSB7XG4gICAgICAgIGkrKztcbiAgICAgIH1cblxuICAgICAgaWYgKGkgPCBjb3VudCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KFN0cmluZy5mcm9tQ2hhckNvZGUoZGlnaXQxLCBkaWdpdDIpLCAxNik7XG4gICAgICAgIGRlY3J5cHRlZFtqKytdID0gdmFsdWUgXiByID4+IDg7XG4gICAgICAgIHIgPSAodmFsdWUgKyByKSAqIGMxICsgYzIgJiAoMSA8PCAxNikgLSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWNyeXB0ZWQuc2xpY2UoZGlzY2FyZE51bWJlciwgaik7XG4gIH1cblxuICBmdW5jdGlvbiBpc1NwZWNpYWwoYykge1xuICAgIHJldHVybiBjID09PSAweDJmIHx8IGMgPT09IDB4NWIgfHwgYyA9PT0gMHg1ZCB8fCBjID09PSAweDdiIHx8IGMgPT09IDB4N2QgfHwgYyA9PT0gMHgyOCB8fCBjID09PSAweDI5O1xuICB9XG5cbiAgY2xhc3MgVHlwZTFQYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKHN0cmVhbSwgZW5jcnlwdGVkLCBzZWFjQW5hbHlzaXNFbmFibGVkKSB7XG4gICAgICBpZiAoZW5jcnlwdGVkKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBzdHJlYW0uZ2V0Qnl0ZXMoKTtcbiAgICAgICAgY29uc3QgaXNCaW5hcnkgPSAhKChpc0hleERpZ2l0KGRhdGFbMF0pIHx8ICgwLCBfY29yZV91dGlscy5pc1doaXRlU3BhY2UpKGRhdGFbMF0pKSAmJiBpc0hleERpZ2l0KGRhdGFbMV0pICYmIGlzSGV4RGlnaXQoZGF0YVsyXSkgJiYgaXNIZXhEaWdpdChkYXRhWzNdKSAmJiBpc0hleERpZ2l0KGRhdGFbNF0pICYmIGlzSGV4RGlnaXQoZGF0YVs1XSkgJiYgaXNIZXhEaWdpdChkYXRhWzZdKSAmJiBpc0hleERpZ2l0KGRhdGFbN10pKTtcbiAgICAgICAgc3RyZWFtID0gbmV3IF9zdHJlYW0uU3RyZWFtKGlzQmluYXJ5ID8gZGVjcnlwdChkYXRhLCBFRVhFQ19FTkNSWVBUX0tFWSwgNCkgOiBkZWNyeXB0QXNjaWkoZGF0YSwgRUVYRUNfRU5DUllQVF9LRVksIDQpKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkID0gISFzZWFjQW5hbHlzaXNFbmFibGVkO1xuICAgICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgfVxuXG4gICAgcmVhZE51bWJlckFycmF5KCkge1xuICAgICAgdGhpcy5nZXRUb2tlbigpO1xuICAgICAgY29uc3QgYXJyYXkgPSBbXTtcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG5cbiAgICAgICAgaWYgKHRva2VuID09PSBudWxsIHx8IHRva2VuID09PSBcIl1cIiB8fCB0b2tlbiA9PT0gXCJ9XCIpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGFycmF5LnB1c2gocGFyc2VGbG9hdCh0b2tlbiB8fCAwKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICByZWFkTnVtYmVyKCkge1xuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG4gICAgICByZXR1cm4gcGFyc2VGbG9hdCh0b2tlbiB8fCAwKTtcbiAgICB9XG5cbiAgICByZWFkSW50KCkge1xuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG4gICAgICByZXR1cm4gcGFyc2VJbnQodG9rZW4gfHwgMCwgMTApIHwgMDtcbiAgICB9XG5cbiAgICByZWFkQm9vbGVhbigpIHtcbiAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuICAgICAgcmV0dXJuIHRva2VuID09PSBcInRydWVcIiA/IDEgOiAwO1xuICAgIH1cblxuICAgIG5leHRDaGFyKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudENoYXIgPSB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7XG4gICAgfVxuXG4gICAgZ2V0VG9rZW4oKSB7XG4gICAgICBsZXQgY29tbWVudCA9IGZhbHNlO1xuICAgICAgbGV0IGNoID0gdGhpcy5jdXJyZW50Q2hhcjtcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKGNoID09PSAtMSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbW1lbnQpIHtcbiAgICAgICAgICBpZiAoY2ggPT09IDB4MGEgfHwgY2ggPT09IDB4MGQpIHtcbiAgICAgICAgICAgIGNvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MjUpIHtcbiAgICAgICAgICBjb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICghKDAsIF9jb3JlX3V0aWxzLmlzV2hpdGVTcGFjZSkoY2gpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzU3BlY2lhbChjaCkpIHtcbiAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgICB9XG5cbiAgICAgIGxldCB0b2tlbiA9IFwiXCI7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgdG9rZW4gKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgfSB3aGlsZSAoY2ggPj0gMCAmJiAhKDAsIF9jb3JlX3V0aWxzLmlzV2hpdGVTcGFjZSkoY2gpICYmICFpc1NwZWNpYWwoY2gpKTtcblxuICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH1cblxuICAgIHJlYWRDaGFyU3RyaW5ncyhieXRlcywgbGVuSVYpIHtcbiAgICAgIGlmIChsZW5JViA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGJ5dGVzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVjcnlwdChieXRlcywgQ0hBUl9TVFJTX0VOQ1JZUFRfS0VZLCBsZW5JVik7XG4gICAgfVxuXG4gICAgZXh0cmFjdEZvbnRQcm9ncmFtKHByb3BlcnRpZXMpIHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtO1xuICAgICAgY29uc3Qgc3VicnMgPSBbXSxcbiAgICAgICAgICAgIGNoYXJzdHJpbmdzID0gW107XG4gICAgICBjb25zdCBwcml2YXRlRGF0YSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICBwcml2YXRlRGF0YS5sZW5JViA9IDQ7XG4gICAgICBjb25zdCBwcm9ncmFtID0ge1xuICAgICAgICBzdWJyczogW10sXG4gICAgICAgIGNoYXJzdHJpbmdzOiBbXSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIHByaXZhdGVEYXRhXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBsZXQgdG9rZW4sIGxlbmd0aCwgZGF0YSwgbGVuSVYsIGVuY29kZWQ7XG5cbiAgICAgIHdoaWxlICgodG9rZW4gPSB0aGlzLmdldFRva2VuKCkpICE9PSBudWxsKSB7XG4gICAgICAgIGlmICh0b2tlbiAhPT0gXCIvXCIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuXG4gICAgICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgICBjYXNlIFwiQ2hhclN0cmluZ3NcIjpcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG5cbiAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBudWxsIHx8IHRva2VuID09PSBcImVuZFwiKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IFwiL1wiKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBnbHlwaCA9IHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgbGVuZ3RoID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgZGF0YSA9IGxlbmd0aCA+IDAgPyBzdHJlYW0uZ2V0Qnl0ZXMobGVuZ3RoKSA6IG5ldyBVaW50OEFycmF5KDApO1xuICAgICAgICAgICAgICBsZW5JViA9IHByb2dyYW0ucHJvcGVydGllcy5wcml2YXRlRGF0YS5sZW5JVjtcbiAgICAgICAgICAgICAgZW5jb2RlZCA9IHRoaXMucmVhZENoYXJTdHJpbmdzKGRhdGEsIGxlbklWKTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IFwibm9hY2Nlc3NcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNoYXJzdHJpbmdzLnB1c2goe1xuICAgICAgICAgICAgICAgIGdseXBoLFxuICAgICAgICAgICAgICAgIGVuY29kZWRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIlN1YnJzXCI6XG4gICAgICAgICAgICB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICAgICAgd2hpbGUgKHRoaXMuZ2V0VG9rZW4oKSA9PT0gXCJkdXBcIikge1xuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAgICAgICBsZW5ndGggPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgICAgICBkYXRhID0gbGVuZ3RoID4gMCA/IHN0cmVhbS5nZXRCeXRlcyhsZW5ndGgpIDogbmV3IFVpbnQ4QXJyYXkoMCk7XG4gICAgICAgICAgICAgIGxlbklWID0gcHJvZ3JhbS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhLmxlbklWO1xuICAgICAgICAgICAgICBlbmNvZGVkID0gdGhpcy5yZWFkQ2hhclN0cmluZ3MoZGF0YSwgbGVuSVYpO1xuICAgICAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgIHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuXG4gICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gXCJub2FjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc3VicnNbaW5kZXhdID0gZW5jb2RlZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiQmx1ZVZhbHVlc1wiOlxuICAgICAgICAgIGNhc2UgXCJPdGhlckJsdWVzXCI6XG4gICAgICAgICAgY2FzZSBcIkZhbWlseUJsdWVzXCI6XG4gICAgICAgICAgY2FzZSBcIkZhbWlseU90aGVyQmx1ZXNcIjpcbiAgICAgICAgICAgIGNvbnN0IGJsdWVBcnJheSA9IHRoaXMucmVhZE51bWJlckFycmF5KCk7XG5cbiAgICAgICAgICAgIGlmIChibHVlQXJyYXkubGVuZ3RoID4gMCAmJiBibHVlQXJyYXkubGVuZ3RoICUgMiA9PT0gMCAmJiBISU5USU5HX0VOQUJMRUQpIHtcbiAgICAgICAgICAgICAgcHJvZ3JhbS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3Rva2VuXSA9IGJsdWVBcnJheTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiU3RlbVNuYXBIXCI6XG4gICAgICAgICAgY2FzZSBcIlN0ZW1TbmFwVlwiOlxuICAgICAgICAgICAgcHJvZ3JhbS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3Rva2VuXSA9IHRoaXMucmVhZE51bWJlckFycmF5KCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJTdGRIV1wiOlxuICAgICAgICAgIGNhc2UgXCJTdGRWV1wiOlxuICAgICAgICAgICAgcHJvZ3JhbS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3Rva2VuXSA9IHRoaXMucmVhZE51bWJlckFycmF5KClbMF07XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJCbHVlU2hpZnRcIjpcbiAgICAgICAgICBjYXNlIFwibGVuSVZcIjpcbiAgICAgICAgICBjYXNlIFwiQmx1ZUZ1enpcIjpcbiAgICAgICAgICBjYXNlIFwiQmx1ZVNjYWxlXCI6XG4gICAgICAgICAgY2FzZSBcIkxhbmd1YWdlR3JvdXBcIjpcbiAgICAgICAgICBjYXNlIFwiRXhwYW5zaW9uRmFjdG9yXCI6XG4gICAgICAgICAgICBwcm9ncmFtLnByb3BlcnRpZXMucHJpdmF0ZURhdGFbdG9rZW5dID0gdGhpcy5yZWFkTnVtYmVyKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJGb3JjZUJvbGRcIjpcbiAgICAgICAgICAgIHByb2dyYW0ucHJvcGVydGllcy5wcml2YXRlRGF0YVt0b2tlbl0gPSB0aGlzLnJlYWRCb29sZWFuKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYXJzdHJpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGdseXBoID0gY2hhcnN0cmluZ3NbaV0uZ2x5cGg7XG4gICAgICAgIGVuY29kZWQgPSBjaGFyc3RyaW5nc1tpXS5lbmNvZGVkO1xuICAgICAgICBjb25zdCBjaGFyU3RyaW5nID0gbmV3IFR5cGUxQ2hhclN0cmluZygpO1xuICAgICAgICBjb25zdCBlcnJvciA9IGNoYXJTdHJpbmcuY29udmVydChlbmNvZGVkLCBzdWJycywgdGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkKTtcbiAgICAgICAgbGV0IG91dHB1dCA9IGNoYXJTdHJpbmcub3V0cHV0O1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIG91dHB1dCA9IFsxNF07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGFyU3RyaW5nT2JqZWN0ID0ge1xuICAgICAgICAgIGdseXBoTmFtZTogZ2x5cGgsXG4gICAgICAgICAgY2hhcnN0cmluZzogb3V0cHV0LFxuICAgICAgICAgIHdpZHRoOiBjaGFyU3RyaW5nLndpZHRoLFxuICAgICAgICAgIGxzYjogY2hhclN0cmluZy5sc2IsXG4gICAgICAgICAgc2VhYzogY2hhclN0cmluZy5zZWFjXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGdseXBoID09PSBcIi5ub3RkZWZcIikge1xuICAgICAgICAgIHByb2dyYW0uY2hhcnN0cmluZ3MudW5zaGlmdChjaGFyU3RyaW5nT2JqZWN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9ncmFtLmNoYXJzdHJpbmdzLnB1c2goY2hhclN0cmluZ09iamVjdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcGVydGllcy5idWlsdEluRW5jb2RpbmcpIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHByb3BlcnRpZXMuYnVpbHRJbkVuY29kaW5nLmluZGV4T2YoZ2x5cGgpO1xuXG4gICAgICAgICAgaWYgKGluZGV4ID4gLTEgJiYgcHJvcGVydGllcy53aWR0aHNbaW5kZXhdID09PSB1bmRlZmluZWQgJiYgaW5kZXggPj0gcHJvcGVydGllcy5maXJzdENoYXIgJiYgaW5kZXggPD0gcHJvcGVydGllcy5sYXN0Q2hhcikge1xuICAgICAgICAgICAgcHJvcGVydGllcy53aWR0aHNbaW5kZXhdID0gY2hhclN0cmluZy53aWR0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb2dyYW07XG4gICAgfVxuXG4gICAgZXh0cmFjdEZvbnRIZWFkZXIocHJvcGVydGllcykge1xuICAgICAgbGV0IHRva2VuO1xuXG4gICAgICB3aGlsZSAoKHRva2VuID0gdGhpcy5nZXRUb2tlbigpKSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAodG9rZW4gIT09IFwiL1wiKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgICAgY2FzZSBcIkZvbnRNYXRyaXhcIjpcbiAgICAgICAgICAgIGNvbnN0IG1hdHJpeCA9IHRoaXMucmVhZE51bWJlckFycmF5KCk7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLmZvbnRNYXRyaXggPSBtYXRyaXg7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJFbmNvZGluZ1wiOlxuICAgICAgICAgICAgY29uc3QgZW5jb2RpbmdBcmcgPSB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICBsZXQgZW5jb2Rpbmc7XG5cbiAgICAgICAgICAgIGlmICghL15cXGQrJC8udGVzdChlbmNvZGluZ0FyZykpIHtcbiAgICAgICAgICAgICAgZW5jb2RpbmcgPSAoMCwgX2VuY29kaW5ncy5nZXRFbmNvZGluZykoZW5jb2RpbmdBcmcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5jb2RpbmcgPSBbXTtcbiAgICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IHBhcnNlSW50KGVuY29kaW5nQXJnLCAxMCkgfCAwO1xuICAgICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7XG5cbiAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzaXplOyBqKyspIHtcbiAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPT0gXCJkdXBcIiAmJiB0b2tlbiAhPT0gXCJkZWZcIikge1xuICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG5cbiAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBcImRlZlwiKSB7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgICBjb25zdCBnbHlwaCA9IHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgICBlbmNvZGluZ1tpbmRleF0gPSBnbHlwaDtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvcGVydGllcy5idWlsdEluRW5jb2RpbmcgPSBlbmNvZGluZztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIkZvbnRCQm94XCI6XG4gICAgICAgICAgICBjb25zdCBmb250QkJveCA9IHRoaXMucmVhZE51bWJlckFycmF5KCk7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLmFzY2VudCA9IE1hdGgubWF4KGZvbnRCQm94WzNdLCBmb250QkJveFsxXSk7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLmRlc2NlbnQgPSBNYXRoLm1pbihmb250QkJveFsxXSwgZm9udEJCb3hbM10pO1xuICAgICAgICAgICAgcHJvcGVydGllcy5hc2NlbnRTY2FsZWQgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBUeXBlMVBhcnNlcjtcbn0oKTtcblxuZXhwb3J0cy5UeXBlMVBhcnNlciA9IFR5cGUxUGFyc2VyO1xuXG4vKioqLyB9KSxcbi8qIDU1ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlBhdHRlcm4gPSB2b2lkIDA7XG5leHBvcnRzLmdldFRpbGluZ1BhdHRlcm5JUiA9IGdldFRpbGluZ1BhdHRlcm5JUjtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9jb2xvcnNwYWNlID0gX193X3BkZmpzX3JlcXVpcmVfXygyNCk7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOSk7XG5cbmNvbnN0IFNoYWRpbmdUeXBlID0ge1xuICBGVU5DVElPTl9CQVNFRDogMSxcbiAgQVhJQUw6IDIsXG4gIFJBRElBTDogMyxcbiAgRlJFRV9GT1JNX01FU0g6IDQsXG4gIExBVFRJQ0VfRk9STV9NRVNIOiA1LFxuICBDT09OU19QQVRDSF9NRVNIOiA2LFxuICBURU5TT1JfUEFUQ0hfTUVTSDogN1xufTtcblxuY2xhc3MgUGF0dGVybiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDYW5ub3QgaW5pdGlhbGl6ZSBQYXR0ZXJuLlwiKTtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZVNoYWRpbmcoc2hhZGluZywgeHJlZiwgcmVzLCBoYW5kbGVyLCBwZGZGdW5jdGlvbkZhY3RvcnksIGxvY2FsQ29sb3JTcGFjZUNhY2hlKSB7XG4gICAgY29uc3QgZGljdCA9ICgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoc2hhZGluZykgPyBzaGFkaW5nLmRpY3QgOiBzaGFkaW5nO1xuICAgIGNvbnN0IHR5cGUgPSBkaWN0LmdldChcIlNoYWRpbmdUeXBlXCIpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFNoYWRpbmdUeXBlLkFYSUFMOlxuICAgICAgICBjYXNlIFNoYWRpbmdUeXBlLlJBRElBTDpcbiAgICAgICAgICByZXR1cm4gbmV3IFJhZGlhbEF4aWFsU2hhZGluZyhkaWN0LCB4cmVmLCByZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSwgbG9jYWxDb2xvclNwYWNlQ2FjaGUpO1xuXG4gICAgICAgIGNhc2UgU2hhZGluZ1R5cGUuRlJFRV9GT1JNX01FU0g6XG4gICAgICAgIGNhc2UgU2hhZGluZ1R5cGUuTEFUVElDRV9GT1JNX01FU0g6XG4gICAgICAgIGNhc2UgU2hhZGluZ1R5cGUuQ09PTlNfUEFUQ0hfTUVTSDpcbiAgICAgICAgY2FzZSBTaGFkaW5nVHlwZS5URU5TT1JfUEFUQ0hfTUVTSDpcbiAgICAgICAgICByZXR1cm4gbmV3IE1lc2hTaGFkaW5nKHNoYWRpbmcsIHhyZWYsIHJlcywgcGRmRnVuY3Rpb25GYWN0b3J5LCBsb2NhbENvbG9yU3BhY2VDYWNoZSk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJVbnN1cHBvcnRlZCBTaGFkaW5nVHlwZTogXCIgKyB0eXBlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZXg7XG4gICAgICB9XG5cbiAgICAgIGhhbmRsZXIuc2VuZChcIlVuc3VwcG9ydGVkRmVhdHVyZVwiLCB7XG4gICAgICAgIGZlYXR1cmVJZDogX3V0aWwuVU5TVVBQT1JURURfRkVBVFVSRVMuc2hhZGluZ1BhdHRlcm5cbiAgICAgIH0pO1xuICAgICAgKDAsIF91dGlsLndhcm4pKGV4KTtcbiAgICAgIHJldHVybiBuZXcgRHVtbXlTaGFkaW5nKCk7XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5QYXR0ZXJuID0gUGF0dGVybjtcblxuY2xhc3MgQmFzZVNoYWRpbmcge1xuICBzdGF0aWMgZ2V0IFNNQUxMX05VTUJFUigpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJTTUFMTF9OVU1CRVJcIiwgMWUtNik7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gQmFzZVNoYWRpbmcpIHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlU2hhZGluZy5cIik7XG4gICAgfVxuICB9XG5cbiAgZ2V0SVIoKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgZ2V0SVJgIGNhbGxlZC5cIik7XG4gIH1cblxufVxuXG5jbGFzcyBSYWRpYWxBeGlhbFNoYWRpbmcgZXh0ZW5kcyBCYXNlU2hhZGluZyB7XG4gIGNvbnN0cnVjdG9yKGRpY3QsIHhyZWYsIHJlc291cmNlcywgcGRmRnVuY3Rpb25GYWN0b3J5LCBsb2NhbENvbG9yU3BhY2VDYWNoZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb29yZHNBcnIgPSBkaWN0LmdldEFycmF5KFwiQ29vcmRzXCIpO1xuICAgIHRoaXMuc2hhZGluZ1R5cGUgPSBkaWN0LmdldChcIlNoYWRpbmdUeXBlXCIpO1xuXG4gICAgY29uc3QgY3MgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnBhcnNlKHtcbiAgICAgIGNzOiBkaWN0LmdldFJhdyhcIkNTXCIpIHx8IGRpY3QuZ2V0UmF3KFwiQ29sb3JTcGFjZVwiKSxcbiAgICAgIHhyZWYsXG4gICAgICByZXNvdXJjZXMsXG4gICAgICBwZGZGdW5jdGlvbkZhY3RvcnksXG4gICAgICBsb2NhbENvbG9yU3BhY2VDYWNoZVxuICAgIH0pO1xuXG4gICAgY29uc3QgYmJveCA9IGRpY3QuZ2V0QXJyYXkoXCJCQm94XCIpO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYmJveCkgJiYgYmJveC5sZW5ndGggPT09IDQpIHtcbiAgICAgIHRoaXMuYmJveCA9IF91dGlsLlV0aWwubm9ybWFsaXplUmVjdChiYm94KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iYm94ID0gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgdDAgPSAwLjAsXG4gICAgICAgIHQxID0gMS4wO1xuXG4gICAgaWYgKGRpY3QuaGFzKFwiRG9tYWluXCIpKSB7XG4gICAgICBjb25zdCBkb21haW5BcnIgPSBkaWN0LmdldEFycmF5KFwiRG9tYWluXCIpO1xuICAgICAgdDAgPSBkb21haW5BcnJbMF07XG4gICAgICB0MSA9IGRvbWFpbkFyclsxXTtcbiAgICB9XG5cbiAgICBsZXQgZXh0ZW5kU3RhcnQgPSBmYWxzZSxcbiAgICAgICAgZXh0ZW5kRW5kID0gZmFsc2U7XG5cbiAgICBpZiAoZGljdC5oYXMoXCJFeHRlbmRcIikpIHtcbiAgICAgIGNvbnN0IGV4dGVuZEFyciA9IGRpY3QuZ2V0QXJyYXkoXCJFeHRlbmRcIik7XG4gICAgICBleHRlbmRTdGFydCA9IGV4dGVuZEFyclswXTtcbiAgICAgIGV4dGVuZEVuZCA9IGV4dGVuZEFyclsxXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaGFkaW5nVHlwZSA9PT0gU2hhZGluZ1R5cGUuUkFESUFMICYmICghZXh0ZW5kU3RhcnQgfHwgIWV4dGVuZEVuZCkpIHtcbiAgICAgIGNvbnN0IFt4MSwgeTEsIHIxLCB4MiwgeTIsIHIyXSA9IHRoaXMuY29vcmRzQXJyO1xuICAgICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLmh5cG90KHgxIC0geDIsIHkxIC0geTIpO1xuXG4gICAgICBpZiAocjEgPD0gcjIgKyBkaXN0YW5jZSAmJiByMiA8PSByMSArIGRpc3RhbmNlKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIlVuc3VwcG9ydGVkIHJhZGlhbCBncmFkaWVudC5cIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5leHRlbmRTdGFydCA9IGV4dGVuZFN0YXJ0O1xuICAgIHRoaXMuZXh0ZW5kRW5kID0gZXh0ZW5kRW5kO1xuICAgIGNvbnN0IGZuT2JqID0gZGljdC5nZXRSYXcoXCJGdW5jdGlvblwiKTtcbiAgICBjb25zdCBmbiA9IHBkZkZ1bmN0aW9uRmFjdG9yeS5jcmVhdGVGcm9tQXJyYXkoZm5PYmopO1xuICAgIGNvbnN0IE5VTUJFUl9PRl9TQU1QTEVTID0gMTA7XG4gICAgY29uc3Qgc3RlcCA9ICh0MSAtIHQwKSAvIE5VTUJFUl9PRl9TQU1QTEVTO1xuICAgIGNvbnN0IGNvbG9yU3RvcHMgPSB0aGlzLmNvbG9yU3RvcHMgPSBbXTtcblxuICAgIGlmICh0MCA+PSB0MSB8fCBzdGVwIDw9IDApIHtcbiAgICAgICgwLCBfdXRpbC5pbmZvKShcIkJhZCBzaGFkaW5nIGRvbWFpbi5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29sb3IgPSBuZXcgRmxvYXQzMkFycmF5KGNzLm51bUNvbXBzKSxcbiAgICAgICAgICByYXRpbyA9IG5ldyBGbG9hdDMyQXJyYXkoMSk7XG4gICAgbGV0IHJnYkNvbG9yO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gTlVNQkVSX09GX1NBTVBMRVM7IGkrKykge1xuICAgICAgcmF0aW9bMF0gPSB0MCArIGkgKiBzdGVwO1xuICAgICAgZm4ocmF0aW8sIDAsIGNvbG9yLCAwKTtcbiAgICAgIHJnYkNvbG9yID0gY3MuZ2V0UmdiKGNvbG9yLCAwKTtcblxuICAgICAgY29uc3QgY3NzQ29sb3IgPSBfdXRpbC5VdGlsLm1ha2VIZXhDb2xvcihyZ2JDb2xvclswXSwgcmdiQ29sb3JbMV0sIHJnYkNvbG9yWzJdKTtcblxuICAgICAgY29sb3JTdG9wcy5wdXNoKFtpIC8gTlVNQkVSX09GX1NBTVBMRVMsIGNzc0NvbG9yXSk7XG4gICAgfVxuXG4gICAgbGV0IGJhY2tncm91bmQgPSBcInRyYW5zcGFyZW50XCI7XG5cbiAgICBpZiAoZGljdC5oYXMoXCJCYWNrZ3JvdW5kXCIpKSB7XG4gICAgICByZ2JDb2xvciA9IGNzLmdldFJnYihkaWN0LmdldChcIkJhY2tncm91bmRcIiksIDApO1xuICAgICAgYmFja2dyb3VuZCA9IF91dGlsLlV0aWwubWFrZUhleENvbG9yKHJnYkNvbG9yWzBdLCByZ2JDb2xvclsxXSwgcmdiQ29sb3JbMl0pO1xuICAgIH1cblxuICAgIGlmICghZXh0ZW5kU3RhcnQpIHtcbiAgICAgIGNvbG9yU3RvcHMudW5zaGlmdChbMCwgYmFja2dyb3VuZF0pO1xuICAgICAgY29sb3JTdG9wc1sxXVswXSArPSBCYXNlU2hhZGluZy5TTUFMTF9OVU1CRVI7XG4gICAgfVxuXG4gICAgaWYgKCFleHRlbmRFbmQpIHtcbiAgICAgIGNvbG9yU3RvcHNbY29sb3JTdG9wcy5sZW5ndGggLSAxXVswXSAtPSBCYXNlU2hhZGluZy5TTUFMTF9OVU1CRVI7XG4gICAgICBjb2xvclN0b3BzLnB1c2goWzEsIGJhY2tncm91bmRdKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbG9yU3RvcHMgPSBjb2xvclN0b3BzO1xuICB9XG5cbiAgZ2V0SVIoKSB7XG4gICAgY29uc3QgY29vcmRzQXJyID0gdGhpcy5jb29yZHNBcnI7XG4gICAgY29uc3Qgc2hhZGluZ1R5cGUgPSB0aGlzLnNoYWRpbmdUeXBlO1xuICAgIGxldCB0eXBlLCBwMCwgcDEsIHIwLCByMTtcblxuICAgIGlmIChzaGFkaW5nVHlwZSA9PT0gU2hhZGluZ1R5cGUuQVhJQUwpIHtcbiAgICAgIHAwID0gW2Nvb3Jkc0FyclswXSwgY29vcmRzQXJyWzFdXTtcbiAgICAgIHAxID0gW2Nvb3Jkc0FyclsyXSwgY29vcmRzQXJyWzNdXTtcbiAgICAgIHIwID0gbnVsbDtcbiAgICAgIHIxID0gbnVsbDtcbiAgICAgIHR5cGUgPSBcImF4aWFsXCI7XG4gICAgfSBlbHNlIGlmIChzaGFkaW5nVHlwZSA9PT0gU2hhZGluZ1R5cGUuUkFESUFMKSB7XG4gICAgICBwMCA9IFtjb29yZHNBcnJbMF0sIGNvb3Jkc0FyclsxXV07XG4gICAgICBwMSA9IFtjb29yZHNBcnJbM10sIGNvb3Jkc0Fycls0XV07XG4gICAgICByMCA9IGNvb3Jkc0FyclsyXTtcbiAgICAgIHIxID0gY29vcmRzQXJyWzVdO1xuICAgICAgdHlwZSA9IFwicmFkaWFsXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoYGdldFBhdHRlcm4gdHlwZSB1bmtub3duOiAke3NoYWRpbmdUeXBlfWApO1xuICAgIH1cblxuICAgIHJldHVybiBbXCJSYWRpYWxBeGlhbFwiLCB0eXBlLCB0aGlzLmJib3gsIHRoaXMuY29sb3JTdG9wcywgcDAsIHAxLCByMCwgcjFdO1xuICB9XG5cbn1cblxuY2xhc3MgTWVzaFN0cmVhbVJlYWRlciB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSwgY29udGV4dCkge1xuICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy5idWZmZXIgPSAwO1xuICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gMDtcbiAgICBjb25zdCBudW1Db21wcyA9IGNvbnRleHQubnVtQ29tcHM7XG4gICAgdGhpcy50bXBDb21wc0J1ZiA9IG5ldyBGbG9hdDMyQXJyYXkobnVtQ29tcHMpO1xuICAgIGNvbnN0IGNzTnVtQ29tcHMgPSBjb250ZXh0LmNvbG9yU3BhY2UubnVtQ29tcHM7XG4gICAgdGhpcy50bXBDc0NvbXBzQnVmID0gY29udGV4dC5jb2xvckZuID8gbmV3IEZsb2F0MzJBcnJheShjc051bUNvbXBzKSA6IHRoaXMudG1wQ29tcHNCdWY7XG4gIH1cblxuICBnZXQgaGFzRGF0YSgpIHtcbiAgICBpZiAodGhpcy5zdHJlYW0uZW5kKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdHJlYW0ucG9zIDwgdGhpcy5zdHJlYW0uZW5kO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJ1ZmZlckxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRCeXRlID0gdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO1xuXG4gICAgaWYgKG5leHRCeXRlIDwgMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuYnVmZmVyID0gbmV4dEJ5dGU7XG4gICAgdGhpcy5idWZmZXJMZW5ndGggPSA4O1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmVhZEJpdHMobikge1xuICAgIGxldCBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcbiAgICBsZXQgYnVmZmVyTGVuZ3RoID0gdGhpcy5idWZmZXJMZW5ndGg7XG5cbiAgICBpZiAobiA9PT0gMzIpIHtcbiAgICAgIGlmIChidWZmZXJMZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnN0cmVhbS5nZXRCeXRlKCkgPDwgMjQgfCB0aGlzLnN0cmVhbS5nZXRCeXRlKCkgPDwgMTYgfCB0aGlzLnN0cmVhbS5nZXRCeXRlKCkgPDwgOCB8IHRoaXMuc3RyZWFtLmdldEJ5dGUoKSkgPj4+IDA7XG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlciA9IGJ1ZmZlciA8PCAyNCB8IHRoaXMuc3RyZWFtLmdldEJ5dGUoKSA8PCAxNiB8IHRoaXMuc3RyZWFtLmdldEJ5dGUoKSA8PCA4IHwgdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO1xuICAgICAgY29uc3QgbmV4dEJ5dGUgPSB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7XG4gICAgICB0aGlzLmJ1ZmZlciA9IG5leHRCeXRlICYgKDEgPDwgYnVmZmVyTGVuZ3RoKSAtIDE7XG4gICAgICByZXR1cm4gKGJ1ZmZlciA8PCA4IC0gYnVmZmVyTGVuZ3RoIHwgKG5leHRCeXRlICYgMHhmZikgPj4gYnVmZmVyTGVuZ3RoKSA+Pj4gMDtcbiAgICB9XG5cbiAgICBpZiAobiA9PT0gOCAmJiBidWZmZXJMZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7XG4gICAgfVxuXG4gICAgd2hpbGUgKGJ1ZmZlckxlbmd0aCA8IG4pIHtcbiAgICAgIGJ1ZmZlciA9IGJ1ZmZlciA8PCA4IHwgdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO1xuICAgICAgYnVmZmVyTGVuZ3RoICs9IDg7XG4gICAgfVxuXG4gICAgYnVmZmVyTGVuZ3RoIC09IG47XG4gICAgdGhpcy5idWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGg7XG4gICAgdGhpcy5idWZmZXIgPSBidWZmZXIgJiAoMSA8PCBidWZmZXJMZW5ndGgpIC0gMTtcbiAgICByZXR1cm4gYnVmZmVyID4+IGJ1ZmZlckxlbmd0aDtcbiAgfVxuXG4gIGFsaWduKCkge1xuICAgIHRoaXMuYnVmZmVyID0gMDtcbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IDA7XG4gIH1cblxuICByZWFkRmxhZygpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkQml0cyh0aGlzLmNvbnRleHQuYml0c1BlckZsYWcpO1xuICB9XG5cbiAgcmVhZENvb3JkaW5hdGUoKSB7XG4gICAgY29uc3QgYml0c1BlckNvb3JkaW5hdGUgPSB0aGlzLmNvbnRleHQuYml0c1BlckNvb3JkaW5hdGU7XG4gICAgY29uc3QgeGkgPSB0aGlzLnJlYWRCaXRzKGJpdHNQZXJDb29yZGluYXRlKTtcbiAgICBjb25zdCB5aSA9IHRoaXMucmVhZEJpdHMoYml0c1BlckNvb3JkaW5hdGUpO1xuICAgIGNvbnN0IGRlY29kZSA9IHRoaXMuY29udGV4dC5kZWNvZGU7XG4gICAgY29uc3Qgc2NhbGUgPSBiaXRzUGVyQ29vcmRpbmF0ZSA8IDMyID8gMSAvICgoMSA8PCBiaXRzUGVyQ29vcmRpbmF0ZSkgLSAxKSA6IDIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7XG4gICAgcmV0dXJuIFt4aSAqIHNjYWxlICogKGRlY29kZVsxXSAtIGRlY29kZVswXSkgKyBkZWNvZGVbMF0sIHlpICogc2NhbGUgKiAoZGVjb2RlWzNdIC0gZGVjb2RlWzJdKSArIGRlY29kZVsyXV07XG4gIH1cblxuICByZWFkQ29tcG9uZW50cygpIHtcbiAgICBjb25zdCBudW1Db21wcyA9IHRoaXMuY29udGV4dC5udW1Db21wcztcbiAgICBjb25zdCBiaXRzUGVyQ29tcG9uZW50ID0gdGhpcy5jb250ZXh0LmJpdHNQZXJDb21wb25lbnQ7XG4gICAgY29uc3Qgc2NhbGUgPSBiaXRzUGVyQ29tcG9uZW50IDwgMzIgPyAxIC8gKCgxIDw8IGJpdHNQZXJDb21wb25lbnQpIC0gMSkgOiAyLjMyODMwNjQzNjUzODY5NjNlLTEwO1xuICAgIGNvbnN0IGRlY29kZSA9IHRoaXMuY29udGV4dC5kZWNvZGU7XG4gICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMudG1wQ29tcHNCdWY7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaiA9IDQ7IGkgPCBudW1Db21wczsgaSsrLCBqICs9IDIpIHtcbiAgICAgIGNvbnN0IGNpID0gdGhpcy5yZWFkQml0cyhiaXRzUGVyQ29tcG9uZW50KTtcbiAgICAgIGNvbXBvbmVudHNbaV0gPSBjaSAqIHNjYWxlICogKGRlY29kZVtqICsgMV0gLSBkZWNvZGVbal0pICsgZGVjb2RlW2pdO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbG9yID0gdGhpcy50bXBDc0NvbXBzQnVmO1xuXG4gICAgaWYgKHRoaXMuY29udGV4dC5jb2xvckZuKSB7XG4gICAgICB0aGlzLmNvbnRleHQuY29sb3JGbihjb21wb25lbnRzLCAwLCBjb2xvciwgMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGV4dC5jb2xvclNwYWNlLmdldFJnYihjb2xvciwgMCk7XG4gIH1cblxufVxuXG5jb25zdCBnZXRCID0gZnVuY3Rpb24gZ2V0QkNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIGJ1aWxkQihjb3VudCkge1xuICAgIGNvbnN0IGx1dCA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gY291bnQ7IGkrKykge1xuICAgICAgY29uc3QgdCA9IGkgLyBjb3VudCxcbiAgICAgICAgICAgIHRfID0gMSAtIHQ7XG4gICAgICBsdXQucHVzaChuZXcgRmxvYXQzMkFycmF5KFt0XyAqIHRfICogdF8sIDMgKiB0ICogdF8gKiB0XywgMyAqIHQgKiB0ICogdF8sIHQgKiB0ICogdF0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbHV0O1xuICB9XG5cbiAgY29uc3QgY2FjaGUgPSBbXTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChjb3VudCkge1xuICAgIGlmICghY2FjaGVbY291bnRdKSB7XG4gICAgICBjYWNoZVtjb3VudF0gPSBidWlsZEIoY291bnQpO1xuICAgIH1cblxuICAgIHJldHVybiBjYWNoZVtjb3VudF07XG4gIH07XG59KCk7XG5cbmNsYXNzIE1lc2hTaGFkaW5nIGV4dGVuZHMgQmFzZVNoYWRpbmcge1xuICBzdGF0aWMgZ2V0IE1JTl9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5UKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIk1JTl9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5UXCIsIDMpO1xuICB9XG5cbiAgc3RhdGljIGdldCBNQVhfU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCgpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJNQVhfU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVFwiLCAyMCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IFRSSUFOR0xFX0RFTlNJVFkoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiVFJJQU5HTEVfREVOU0lUWVwiLCAyMCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzdHJlYW0sIHhyZWYsIHJlc291cmNlcywgcGRmRnVuY3Rpb25GYWN0b3J5LCBsb2NhbENvbG9yU3BhY2VDYWNoZSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoc3RyZWFtKSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiTWVzaCBkYXRhIGlzIG5vdCBhIHN0cmVhbVwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBkaWN0ID0gc3RyZWFtLmRpY3Q7XG4gICAgdGhpcy5zaGFkaW5nVHlwZSA9IGRpY3QuZ2V0KFwiU2hhZGluZ1R5cGVcIik7XG4gICAgY29uc3QgYmJveCA9IGRpY3QuZ2V0QXJyYXkoXCJCQm94XCIpO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYmJveCkgJiYgYmJveC5sZW5ndGggPT09IDQpIHtcbiAgICAgIHRoaXMuYmJveCA9IF91dGlsLlV0aWwubm9ybWFsaXplUmVjdChiYm94KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iYm94ID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjcyA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2UucGFyc2Uoe1xuICAgICAgY3M6IGRpY3QuZ2V0UmF3KFwiQ1NcIikgfHwgZGljdC5nZXRSYXcoXCJDb2xvclNwYWNlXCIpLFxuICAgICAgeHJlZixcbiAgICAgIHJlc291cmNlcyxcbiAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeSxcbiAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlXG4gICAgfSk7XG5cbiAgICB0aGlzLmJhY2tncm91bmQgPSBkaWN0LmhhcyhcIkJhY2tncm91bmRcIikgPyBjcy5nZXRSZ2IoZGljdC5nZXQoXCJCYWNrZ3JvdW5kXCIpLCAwKSA6IG51bGw7XG4gICAgY29uc3QgZm5PYmogPSBkaWN0LmdldFJhdyhcIkZ1bmN0aW9uXCIpO1xuICAgIGNvbnN0IGZuID0gZm5PYmogPyBwZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlRnJvbUFycmF5KGZuT2JqKSA6IG51bGw7XG4gICAgdGhpcy5jb29yZHMgPSBbXTtcbiAgICB0aGlzLmNvbG9ycyA9IFtdO1xuICAgIHRoaXMuZmlndXJlcyA9IFtdO1xuICAgIGNvbnN0IGRlY29kZUNvbnRleHQgPSB7XG4gICAgICBiaXRzUGVyQ29vcmRpbmF0ZTogZGljdC5nZXQoXCJCaXRzUGVyQ29vcmRpbmF0ZVwiKSxcbiAgICAgIGJpdHNQZXJDb21wb25lbnQ6IGRpY3QuZ2V0KFwiQml0c1BlckNvbXBvbmVudFwiKSxcbiAgICAgIGJpdHNQZXJGbGFnOiBkaWN0LmdldChcIkJpdHNQZXJGbGFnXCIpLFxuICAgICAgZGVjb2RlOiBkaWN0LmdldEFycmF5KFwiRGVjb2RlXCIpLFxuICAgICAgY29sb3JGbjogZm4sXG4gICAgICBjb2xvclNwYWNlOiBjcyxcbiAgICAgIG51bUNvbXBzOiBmbiA/IDEgOiBjcy5udW1Db21wc1xuICAgIH07XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IE1lc2hTdHJlYW1SZWFkZXIoc3RyZWFtLCBkZWNvZGVDb250ZXh0KTtcbiAgICBsZXQgcGF0Y2hNZXNoID0gZmFsc2U7XG5cbiAgICBzd2l0Y2ggKHRoaXMuc2hhZGluZ1R5cGUpIHtcbiAgICAgIGNhc2UgU2hhZGluZ1R5cGUuRlJFRV9GT1JNX01FU0g6XG4gICAgICAgIHRoaXMuX2RlY29kZVR5cGU0U2hhZGluZyhyZWFkZXIpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNoYWRpbmdUeXBlLkxBVFRJQ0VfRk9STV9NRVNIOlxuICAgICAgICBjb25zdCB2ZXJ0aWNlc1BlclJvdyA9IGRpY3QuZ2V0KFwiVmVydGljZXNQZXJSb3dcIikgfCAwO1xuXG4gICAgICAgIGlmICh2ZXJ0aWNlc1BlclJvdyA8IDIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIFZlcnRpY2VzUGVyUm93XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZGVjb2RlVHlwZTVTaGFkaW5nKHJlYWRlciwgdmVydGljZXNQZXJSb3cpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNoYWRpbmdUeXBlLkNPT05TX1BBVENIX01FU0g6XG4gICAgICAgIHRoaXMuX2RlY29kZVR5cGU2U2hhZGluZyhyZWFkZXIpO1xuXG4gICAgICAgIHBhdGNoTWVzaCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNoYWRpbmdUeXBlLlRFTlNPUl9QQVRDSF9NRVNIOlxuICAgICAgICB0aGlzLl9kZWNvZGVUeXBlN1NoYWRpbmcocmVhZGVyKTtcblxuICAgICAgICBwYXRjaE1lc2ggPSB0cnVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIlVuc3VwcG9ydGVkIG1lc2ggdHlwZS5cIik7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChwYXRjaE1lc2gpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUJvdW5kcygpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSB0aGlzLmZpZ3VyZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICB0aGlzLl9idWlsZEZpZ3VyZUZyb21QYXRjaChpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVCb3VuZHMoKTtcblxuICAgIHRoaXMuX3BhY2tEYXRhKCk7XG4gIH1cblxuICBfZGVjb2RlVHlwZTRTaGFkaW5nKHJlYWRlcikge1xuICAgIGNvbnN0IGNvb3JkcyA9IHRoaXMuY29vcmRzO1xuICAgIGNvbnN0IGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuICAgIGNvbnN0IG9wZXJhdG9ycyA9IFtdO1xuICAgIGNvbnN0IHBzID0gW107XG4gICAgbGV0IHZlcnRpY2VzTGVmdCA9IDA7XG5cbiAgICB3aGlsZSAocmVhZGVyLmhhc0RhdGEpIHtcbiAgICAgIGNvbnN0IGYgPSByZWFkZXIucmVhZEZsYWcoKTtcbiAgICAgIGNvbnN0IGNvb3JkID0gcmVhZGVyLnJlYWRDb29yZGluYXRlKCk7XG4gICAgICBjb25zdCBjb2xvciA9IHJlYWRlci5yZWFkQ29tcG9uZW50cygpO1xuXG4gICAgICBpZiAodmVydGljZXNMZWZ0ID09PSAwKSB7XG4gICAgICAgIGlmICghKDAgPD0gZiAmJiBmIDw9IDIpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVW5rbm93biB0eXBlNCBmbGFnXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChmKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgdmVydGljZXNMZWZ0ID0gMztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgcHMucHVzaChwc1twcy5sZW5ndGggLSAyXSwgcHNbcHMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgdmVydGljZXNMZWZ0ID0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcHMucHVzaChwc1twcy5sZW5ndGggLSAzXSwgcHNbcHMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgdmVydGljZXNMZWZ0ID0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgb3BlcmF0b3JzLnB1c2goZik7XG4gICAgICB9XG5cbiAgICAgIHBzLnB1c2goY29vcmRzLmxlbmd0aCk7XG4gICAgICBjb29yZHMucHVzaChjb29yZCk7XG4gICAgICBjb2xvcnMucHVzaChjb2xvcik7XG4gICAgICB2ZXJ0aWNlc0xlZnQtLTtcbiAgICAgIHJlYWRlci5hbGlnbigpO1xuICAgIH1cblxuICAgIHRoaXMuZmlndXJlcy5wdXNoKHtcbiAgICAgIHR5cGU6IFwidHJpYW5nbGVzXCIsXG4gICAgICBjb29yZHM6IG5ldyBJbnQzMkFycmF5KHBzKSxcbiAgICAgIGNvbG9yczogbmV3IEludDMyQXJyYXkocHMpXG4gICAgfSk7XG4gIH1cblxuICBfZGVjb2RlVHlwZTVTaGFkaW5nKHJlYWRlciwgdmVydGljZXNQZXJSb3cpIHtcbiAgICBjb25zdCBjb29yZHMgPSB0aGlzLmNvb3JkcztcbiAgICBjb25zdCBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICBjb25zdCBwcyA9IFtdO1xuXG4gICAgd2hpbGUgKHJlYWRlci5oYXNEYXRhKSB7XG4gICAgICBjb25zdCBjb29yZCA9IHJlYWRlci5yZWFkQ29vcmRpbmF0ZSgpO1xuICAgICAgY29uc3QgY29sb3IgPSByZWFkZXIucmVhZENvbXBvbmVudHMoKTtcbiAgICAgIHBzLnB1c2goY29vcmRzLmxlbmd0aCk7XG4gICAgICBjb29yZHMucHVzaChjb29yZCk7XG4gICAgICBjb2xvcnMucHVzaChjb2xvcik7XG4gICAgfVxuXG4gICAgdGhpcy5maWd1cmVzLnB1c2goe1xuICAgICAgdHlwZTogXCJsYXR0aWNlXCIsXG4gICAgICBjb29yZHM6IG5ldyBJbnQzMkFycmF5KHBzKSxcbiAgICAgIGNvbG9yczogbmV3IEludDMyQXJyYXkocHMpLFxuICAgICAgdmVydGljZXNQZXJSb3dcbiAgICB9KTtcbiAgfVxuXG4gIF9kZWNvZGVUeXBlNlNoYWRpbmcocmVhZGVyKSB7XG4gICAgY29uc3QgY29vcmRzID0gdGhpcy5jb29yZHM7XG4gICAgY29uc3QgY29sb3JzID0gdGhpcy5jb2xvcnM7XG4gICAgY29uc3QgcHMgPSBuZXcgSW50MzJBcnJheSgxNik7XG4gICAgY29uc3QgY3MgPSBuZXcgSW50MzJBcnJheSg0KTtcblxuICAgIHdoaWxlIChyZWFkZXIuaGFzRGF0YSkge1xuICAgICAgY29uc3QgZiA9IHJlYWRlci5yZWFkRmxhZygpO1xuXG4gICAgICBpZiAoISgwIDw9IGYgJiYgZiA8PSAzKSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJVbmtub3duIHR5cGU2IGZsYWdcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBpID0gY29vcmRzLmxlbmd0aDtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZiAhPT0gMCA/IDggOiAxMjsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29vcmRzLnB1c2gocmVhZGVyLnJlYWRDb29yZGluYXRlKCkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjaSA9IGNvbG9ycy5sZW5ndGg7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGYgIT09IDAgPyAyIDogNDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29sb3JzLnB1c2gocmVhZGVyLnJlYWRDb21wb25lbnRzKCkpO1xuICAgICAgfVxuXG4gICAgICBsZXQgdG1wMSwgdG1wMiwgdG1wMywgdG1wNDtcblxuICAgICAgc3dpdGNoIChmKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBwc1sxMl0gPSBwaSArIDM7XG4gICAgICAgICAgcHNbMTNdID0gcGkgKyA0O1xuICAgICAgICAgIHBzWzE0XSA9IHBpICsgNTtcbiAgICAgICAgICBwc1sxNV0gPSBwaSArIDY7XG4gICAgICAgICAgcHNbOF0gPSBwaSArIDI7XG4gICAgICAgICAgcHNbMTFdID0gcGkgKyA3O1xuICAgICAgICAgIHBzWzRdID0gcGkgKyAxO1xuICAgICAgICAgIHBzWzddID0gcGkgKyA4O1xuICAgICAgICAgIHBzWzBdID0gcGk7XG4gICAgICAgICAgcHNbMV0gPSBwaSArIDExO1xuICAgICAgICAgIHBzWzJdID0gcGkgKyAxMDtcbiAgICAgICAgICBwc1szXSA9IHBpICsgOTtcbiAgICAgICAgICBjc1syXSA9IGNpICsgMTtcbiAgICAgICAgICBjc1szXSA9IGNpICsgMjtcbiAgICAgICAgICBjc1swXSA9IGNpO1xuICAgICAgICAgIGNzWzFdID0gY2kgKyAzO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB0bXAxID0gcHNbMTJdO1xuICAgICAgICAgIHRtcDIgPSBwc1sxM107XG4gICAgICAgICAgdG1wMyA9IHBzWzE0XTtcbiAgICAgICAgICB0bXA0ID0gcHNbMTVdO1xuICAgICAgICAgIHBzWzEyXSA9IHRtcDQ7XG4gICAgICAgICAgcHNbMTNdID0gcGkgKyAwO1xuICAgICAgICAgIHBzWzE0XSA9IHBpICsgMTtcbiAgICAgICAgICBwc1sxNV0gPSBwaSArIDI7XG4gICAgICAgICAgcHNbOF0gPSB0bXAzO1xuICAgICAgICAgIHBzWzExXSA9IHBpICsgMztcbiAgICAgICAgICBwc1s0XSA9IHRtcDI7XG4gICAgICAgICAgcHNbN10gPSBwaSArIDQ7XG4gICAgICAgICAgcHNbMF0gPSB0bXAxO1xuICAgICAgICAgIHBzWzFdID0gcGkgKyA3O1xuICAgICAgICAgIHBzWzJdID0gcGkgKyA2O1xuICAgICAgICAgIHBzWzNdID0gcGkgKyA1O1xuICAgICAgICAgIHRtcDEgPSBjc1syXTtcbiAgICAgICAgICB0bXAyID0gY3NbM107XG4gICAgICAgICAgY3NbMl0gPSB0bXAyO1xuICAgICAgICAgIGNzWzNdID0gY2k7XG4gICAgICAgICAgY3NbMF0gPSB0bXAxO1xuICAgICAgICAgIGNzWzFdID0gY2kgKyAxO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICB0bXAxID0gcHNbMTVdO1xuICAgICAgICAgIHRtcDIgPSBwc1sxMV07XG4gICAgICAgICAgcHNbMTJdID0gcHNbM107XG4gICAgICAgICAgcHNbMTNdID0gcGkgKyAwO1xuICAgICAgICAgIHBzWzE0XSA9IHBpICsgMTtcbiAgICAgICAgICBwc1sxNV0gPSBwaSArIDI7XG4gICAgICAgICAgcHNbOF0gPSBwc1s3XTtcbiAgICAgICAgICBwc1sxMV0gPSBwaSArIDM7XG4gICAgICAgICAgcHNbNF0gPSB0bXAyO1xuICAgICAgICAgIHBzWzddID0gcGkgKyA0O1xuICAgICAgICAgIHBzWzBdID0gdG1wMTtcbiAgICAgICAgICBwc1sxXSA9IHBpICsgNztcbiAgICAgICAgICBwc1syXSA9IHBpICsgNjtcbiAgICAgICAgICBwc1szXSA9IHBpICsgNTtcbiAgICAgICAgICB0bXAxID0gY3NbM107XG4gICAgICAgICAgY3NbMl0gPSBjc1sxXTtcbiAgICAgICAgICBjc1szXSA9IGNpO1xuICAgICAgICAgIGNzWzBdID0gdG1wMTtcbiAgICAgICAgICBjc1sxXSA9IGNpICsgMTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcHNbMTJdID0gcHNbMF07XG4gICAgICAgICAgcHNbMTNdID0gcGkgKyAwO1xuICAgICAgICAgIHBzWzE0XSA9IHBpICsgMTtcbiAgICAgICAgICBwc1sxNV0gPSBwaSArIDI7XG4gICAgICAgICAgcHNbOF0gPSBwc1sxXTtcbiAgICAgICAgICBwc1sxMV0gPSBwaSArIDM7XG4gICAgICAgICAgcHNbNF0gPSBwc1syXTtcbiAgICAgICAgICBwc1s3XSA9IHBpICsgNDtcbiAgICAgICAgICBwc1swXSA9IHBzWzNdO1xuICAgICAgICAgIHBzWzFdID0gcGkgKyA3O1xuICAgICAgICAgIHBzWzJdID0gcGkgKyA2O1xuICAgICAgICAgIHBzWzNdID0gcGkgKyA1O1xuICAgICAgICAgIGNzWzJdID0gY3NbMF07XG4gICAgICAgICAgY3NbM10gPSBjaTtcbiAgICAgICAgICBjc1swXSA9IGNzWzFdO1xuICAgICAgICAgIGNzWzFdID0gY2kgKyAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBwc1s1XSA9IGNvb3Jkcy5sZW5ndGg7XG4gICAgICBjb29yZHMucHVzaChbKC00ICogY29vcmRzW3BzWzBdXVswXSAtIGNvb3Jkc1twc1sxNV1dWzBdICsgNiAqIChjb29yZHNbcHNbNF1dWzBdICsgY29vcmRzW3BzWzFdXVswXSkgLSAyICogKGNvb3Jkc1twc1sxMl1dWzBdICsgY29vcmRzW3BzWzNdXVswXSkgKyAzICogKGNvb3Jkc1twc1sxM11dWzBdICsgY29vcmRzW3BzWzddXVswXSkpIC8gOSwgKC00ICogY29vcmRzW3BzWzBdXVsxXSAtIGNvb3Jkc1twc1sxNV1dWzFdICsgNiAqIChjb29yZHNbcHNbNF1dWzFdICsgY29vcmRzW3BzWzFdXVsxXSkgLSAyICogKGNvb3Jkc1twc1sxMl1dWzFdICsgY29vcmRzW3BzWzNdXVsxXSkgKyAzICogKGNvb3Jkc1twc1sxM11dWzFdICsgY29vcmRzW3BzWzddXVsxXSkpIC8gOV0pO1xuICAgICAgcHNbNl0gPSBjb29yZHMubGVuZ3RoO1xuICAgICAgY29vcmRzLnB1c2goWygtNCAqIGNvb3Jkc1twc1szXV1bMF0gLSBjb29yZHNbcHNbMTJdXVswXSArIDYgKiAoY29vcmRzW3BzWzJdXVswXSArIGNvb3Jkc1twc1s3XV1bMF0pIC0gMiAqIChjb29yZHNbcHNbMF1dWzBdICsgY29vcmRzW3BzWzE1XV1bMF0pICsgMyAqIChjb29yZHNbcHNbNF1dWzBdICsgY29vcmRzW3BzWzE0XV1bMF0pKSAvIDksICgtNCAqIGNvb3Jkc1twc1szXV1bMV0gLSBjb29yZHNbcHNbMTJdXVsxXSArIDYgKiAoY29vcmRzW3BzWzJdXVsxXSArIGNvb3Jkc1twc1s3XV1bMV0pIC0gMiAqIChjb29yZHNbcHNbMF1dWzFdICsgY29vcmRzW3BzWzE1XV1bMV0pICsgMyAqIChjb29yZHNbcHNbNF1dWzFdICsgY29vcmRzW3BzWzE0XV1bMV0pKSAvIDldKTtcbiAgICAgIHBzWzldID0gY29vcmRzLmxlbmd0aDtcbiAgICAgIGNvb3Jkcy5wdXNoKFsoLTQgKiBjb29yZHNbcHNbMTJdXVswXSAtIGNvb3Jkc1twc1szXV1bMF0gKyA2ICogKGNvb3Jkc1twc1s4XV1bMF0gKyBjb29yZHNbcHNbMTNdXVswXSkgLSAyICogKGNvb3Jkc1twc1swXV1bMF0gKyBjb29yZHNbcHNbMTVdXVswXSkgKyAzICogKGNvb3Jkc1twc1sxMV1dWzBdICsgY29vcmRzW3BzWzFdXVswXSkpIC8gOSwgKC00ICogY29vcmRzW3BzWzEyXV1bMV0gLSBjb29yZHNbcHNbM11dWzFdICsgNiAqIChjb29yZHNbcHNbOF1dWzFdICsgY29vcmRzW3BzWzEzXV1bMV0pIC0gMiAqIChjb29yZHNbcHNbMF1dWzFdICsgY29vcmRzW3BzWzE1XV1bMV0pICsgMyAqIChjb29yZHNbcHNbMTFdXVsxXSArIGNvb3Jkc1twc1sxXV1bMV0pKSAvIDldKTtcbiAgICAgIHBzWzEwXSA9IGNvb3Jkcy5sZW5ndGg7XG4gICAgICBjb29yZHMucHVzaChbKC00ICogY29vcmRzW3BzWzE1XV1bMF0gLSBjb29yZHNbcHNbMF1dWzBdICsgNiAqIChjb29yZHNbcHNbMTFdXVswXSArIGNvb3Jkc1twc1sxNF1dWzBdKSAtIDIgKiAoY29vcmRzW3BzWzEyXV1bMF0gKyBjb29yZHNbcHNbM11dWzBdKSArIDMgKiAoY29vcmRzW3BzWzJdXVswXSArIGNvb3Jkc1twc1s4XV1bMF0pKSAvIDksICgtNCAqIGNvb3Jkc1twc1sxNV1dWzFdIC0gY29vcmRzW3BzWzBdXVsxXSArIDYgKiAoY29vcmRzW3BzWzExXV1bMV0gKyBjb29yZHNbcHNbMTRdXVsxXSkgLSAyICogKGNvb3Jkc1twc1sxMl1dWzFdICsgY29vcmRzW3BzWzNdXVsxXSkgKyAzICogKGNvb3Jkc1twc1syXV1bMV0gKyBjb29yZHNbcHNbOF1dWzFdKSkgLyA5XSk7XG4gICAgICB0aGlzLmZpZ3VyZXMucHVzaCh7XG4gICAgICAgIHR5cGU6IFwicGF0Y2hcIixcbiAgICAgICAgY29vcmRzOiBuZXcgSW50MzJBcnJheShwcyksXG4gICAgICAgIGNvbG9yczogbmV3IEludDMyQXJyYXkoY3MpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBfZGVjb2RlVHlwZTdTaGFkaW5nKHJlYWRlcikge1xuICAgIGNvbnN0IGNvb3JkcyA9IHRoaXMuY29vcmRzO1xuICAgIGNvbnN0IGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuICAgIGNvbnN0IHBzID0gbmV3IEludDMyQXJyYXkoMTYpO1xuICAgIGNvbnN0IGNzID0gbmV3IEludDMyQXJyYXkoNCk7XG5cbiAgICB3aGlsZSAocmVhZGVyLmhhc0RhdGEpIHtcbiAgICAgIGNvbnN0IGYgPSByZWFkZXIucmVhZEZsYWcoKTtcblxuICAgICAgaWYgKCEoMCA8PSBmICYmIGYgPD0gMykpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVW5rbm93biB0eXBlNyBmbGFnXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwaSA9IGNvb3Jkcy5sZW5ndGg7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGYgIT09IDAgPyAxMiA6IDE2OyBpIDwgaWk7IGkrKykge1xuICAgICAgICBjb29yZHMucHVzaChyZWFkZXIucmVhZENvb3JkaW5hdGUoKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNpID0gY29sb3JzLmxlbmd0aDtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZiAhPT0gMCA/IDIgOiA0OyBpIDwgaWk7IGkrKykge1xuICAgICAgICBjb2xvcnMucHVzaChyZWFkZXIucmVhZENvbXBvbmVudHMoKSk7XG4gICAgICB9XG5cbiAgICAgIGxldCB0bXAxLCB0bXAyLCB0bXAzLCB0bXA0O1xuXG4gICAgICBzd2l0Y2ggKGYpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHBzWzEyXSA9IHBpICsgMztcbiAgICAgICAgICBwc1sxM10gPSBwaSArIDQ7XG4gICAgICAgICAgcHNbMTRdID0gcGkgKyA1O1xuICAgICAgICAgIHBzWzE1XSA9IHBpICsgNjtcbiAgICAgICAgICBwc1s4XSA9IHBpICsgMjtcbiAgICAgICAgICBwc1s5XSA9IHBpICsgMTM7XG4gICAgICAgICAgcHNbMTBdID0gcGkgKyAxNDtcbiAgICAgICAgICBwc1sxMV0gPSBwaSArIDc7XG4gICAgICAgICAgcHNbNF0gPSBwaSArIDE7XG4gICAgICAgICAgcHNbNV0gPSBwaSArIDEyO1xuICAgICAgICAgIHBzWzZdID0gcGkgKyAxNTtcbiAgICAgICAgICBwc1s3XSA9IHBpICsgODtcbiAgICAgICAgICBwc1swXSA9IHBpO1xuICAgICAgICAgIHBzWzFdID0gcGkgKyAxMTtcbiAgICAgICAgICBwc1syXSA9IHBpICsgMTA7XG4gICAgICAgICAgcHNbM10gPSBwaSArIDk7XG4gICAgICAgICAgY3NbMl0gPSBjaSArIDE7XG4gICAgICAgICAgY3NbM10gPSBjaSArIDI7XG4gICAgICAgICAgY3NbMF0gPSBjaTtcbiAgICAgICAgICBjc1sxXSA9IGNpICsgMztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgdG1wMSA9IHBzWzEyXTtcbiAgICAgICAgICB0bXAyID0gcHNbMTNdO1xuICAgICAgICAgIHRtcDMgPSBwc1sxNF07XG4gICAgICAgICAgdG1wNCA9IHBzWzE1XTtcbiAgICAgICAgICBwc1sxMl0gPSB0bXA0O1xuICAgICAgICAgIHBzWzEzXSA9IHBpICsgMDtcbiAgICAgICAgICBwc1sxNF0gPSBwaSArIDE7XG4gICAgICAgICAgcHNbMTVdID0gcGkgKyAyO1xuICAgICAgICAgIHBzWzhdID0gdG1wMztcbiAgICAgICAgICBwc1s5XSA9IHBpICsgOTtcbiAgICAgICAgICBwc1sxMF0gPSBwaSArIDEwO1xuICAgICAgICAgIHBzWzExXSA9IHBpICsgMztcbiAgICAgICAgICBwc1s0XSA9IHRtcDI7XG4gICAgICAgICAgcHNbNV0gPSBwaSArIDg7XG4gICAgICAgICAgcHNbNl0gPSBwaSArIDExO1xuICAgICAgICAgIHBzWzddID0gcGkgKyA0O1xuICAgICAgICAgIHBzWzBdID0gdG1wMTtcbiAgICAgICAgICBwc1sxXSA9IHBpICsgNztcbiAgICAgICAgICBwc1syXSA9IHBpICsgNjtcbiAgICAgICAgICBwc1szXSA9IHBpICsgNTtcbiAgICAgICAgICB0bXAxID0gY3NbMl07XG4gICAgICAgICAgdG1wMiA9IGNzWzNdO1xuICAgICAgICAgIGNzWzJdID0gdG1wMjtcbiAgICAgICAgICBjc1szXSA9IGNpO1xuICAgICAgICAgIGNzWzBdID0gdG1wMTtcbiAgICAgICAgICBjc1sxXSA9IGNpICsgMTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgdG1wMSA9IHBzWzE1XTtcbiAgICAgICAgICB0bXAyID0gcHNbMTFdO1xuICAgICAgICAgIHBzWzEyXSA9IHBzWzNdO1xuICAgICAgICAgIHBzWzEzXSA9IHBpICsgMDtcbiAgICAgICAgICBwc1sxNF0gPSBwaSArIDE7XG4gICAgICAgICAgcHNbMTVdID0gcGkgKyAyO1xuICAgICAgICAgIHBzWzhdID0gcHNbN107XG4gICAgICAgICAgcHNbOV0gPSBwaSArIDk7XG4gICAgICAgICAgcHNbMTBdID0gcGkgKyAxMDtcbiAgICAgICAgICBwc1sxMV0gPSBwaSArIDM7XG4gICAgICAgICAgcHNbNF0gPSB0bXAyO1xuICAgICAgICAgIHBzWzVdID0gcGkgKyA4O1xuICAgICAgICAgIHBzWzZdID0gcGkgKyAxMTtcbiAgICAgICAgICBwc1s3XSA9IHBpICsgNDtcbiAgICAgICAgICBwc1swXSA9IHRtcDE7XG4gICAgICAgICAgcHNbMV0gPSBwaSArIDc7XG4gICAgICAgICAgcHNbMl0gPSBwaSArIDY7XG4gICAgICAgICAgcHNbM10gPSBwaSArIDU7XG4gICAgICAgICAgdG1wMSA9IGNzWzNdO1xuICAgICAgICAgIGNzWzJdID0gY3NbMV07XG4gICAgICAgICAgY3NbM10gPSBjaTtcbiAgICAgICAgICBjc1swXSA9IHRtcDE7XG4gICAgICAgICAgY3NbMV0gPSBjaSArIDE7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHBzWzEyXSA9IHBzWzBdO1xuICAgICAgICAgIHBzWzEzXSA9IHBpICsgMDtcbiAgICAgICAgICBwc1sxNF0gPSBwaSArIDE7XG4gICAgICAgICAgcHNbMTVdID0gcGkgKyAyO1xuICAgICAgICAgIHBzWzhdID0gcHNbMV07XG4gICAgICAgICAgcHNbOV0gPSBwaSArIDk7XG4gICAgICAgICAgcHNbMTBdID0gcGkgKyAxMDtcbiAgICAgICAgICBwc1sxMV0gPSBwaSArIDM7XG4gICAgICAgICAgcHNbNF0gPSBwc1syXTtcbiAgICAgICAgICBwc1s1XSA9IHBpICsgODtcbiAgICAgICAgICBwc1s2XSA9IHBpICsgMTE7XG4gICAgICAgICAgcHNbN10gPSBwaSArIDQ7XG4gICAgICAgICAgcHNbMF0gPSBwc1szXTtcbiAgICAgICAgICBwc1sxXSA9IHBpICsgNztcbiAgICAgICAgICBwc1syXSA9IHBpICsgNjtcbiAgICAgICAgICBwc1szXSA9IHBpICsgNTtcbiAgICAgICAgICBjc1syXSA9IGNzWzBdO1xuICAgICAgICAgIGNzWzNdID0gY2k7XG4gICAgICAgICAgY3NbMF0gPSBjc1sxXTtcbiAgICAgICAgICBjc1sxXSA9IGNpICsgMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdGhpcy5maWd1cmVzLnB1c2goe1xuICAgICAgICB0eXBlOiBcInBhdGNoXCIsXG4gICAgICAgIGNvb3JkczogbmV3IEludDMyQXJyYXkocHMpLFxuICAgICAgICBjb2xvcnM6IG5ldyBJbnQzMkFycmF5KGNzKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgX2J1aWxkRmlndXJlRnJvbVBhdGNoKGluZGV4KSB7XG4gICAgY29uc3QgZmlndXJlID0gdGhpcy5maWd1cmVzW2luZGV4XTtcbiAgICAoMCwgX3V0aWwuYXNzZXJ0KShmaWd1cmUudHlwZSA9PT0gXCJwYXRjaFwiLCBcIlVuZXhwZWN0ZWQgcGF0Y2ggbWVzaCBmaWd1cmVcIik7XG4gICAgY29uc3QgY29vcmRzID0gdGhpcy5jb29yZHMsXG4gICAgICAgICAgY29sb3JzID0gdGhpcy5jb2xvcnM7XG4gICAgY29uc3QgcGkgPSBmaWd1cmUuY29vcmRzO1xuICAgIGNvbnN0IGNpID0gZmlndXJlLmNvbG9ycztcbiAgICBjb25zdCBmaWd1cmVNaW5YID0gTWF0aC5taW4oY29vcmRzW3BpWzBdXVswXSwgY29vcmRzW3BpWzNdXVswXSwgY29vcmRzW3BpWzEyXV1bMF0sIGNvb3Jkc1twaVsxNV1dWzBdKTtcbiAgICBjb25zdCBmaWd1cmVNaW5ZID0gTWF0aC5taW4oY29vcmRzW3BpWzBdXVsxXSwgY29vcmRzW3BpWzNdXVsxXSwgY29vcmRzW3BpWzEyXV1bMV0sIGNvb3Jkc1twaVsxNV1dWzFdKTtcbiAgICBjb25zdCBmaWd1cmVNYXhYID0gTWF0aC5tYXgoY29vcmRzW3BpWzBdXVswXSwgY29vcmRzW3BpWzNdXVswXSwgY29vcmRzW3BpWzEyXV1bMF0sIGNvb3Jkc1twaVsxNV1dWzBdKTtcbiAgICBjb25zdCBmaWd1cmVNYXhZID0gTWF0aC5tYXgoY29vcmRzW3BpWzBdXVsxXSwgY29vcmRzW3BpWzNdXVsxXSwgY29vcmRzW3BpWzEyXV1bMV0sIGNvb3Jkc1twaVsxNV1dWzFdKTtcbiAgICBsZXQgc3BsaXRYQnkgPSBNYXRoLmNlaWwoKGZpZ3VyZU1heFggLSBmaWd1cmVNaW5YKSAqIE1lc2hTaGFkaW5nLlRSSUFOR0xFX0RFTlNJVFkgLyAodGhpcy5ib3VuZHNbMl0gLSB0aGlzLmJvdW5kc1swXSkpO1xuICAgIHNwbGl0WEJ5ID0gTWF0aC5tYXgoTWVzaFNoYWRpbmcuTUlOX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsIE1hdGgubWluKE1lc2hTaGFkaW5nLk1BWF9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5ULCBzcGxpdFhCeSkpO1xuICAgIGxldCBzcGxpdFlCeSA9IE1hdGguY2VpbCgoZmlndXJlTWF4WSAtIGZpZ3VyZU1pblkpICogTWVzaFNoYWRpbmcuVFJJQU5HTEVfREVOU0lUWSAvICh0aGlzLmJvdW5kc1szXSAtIHRoaXMuYm91bmRzWzFdKSk7XG4gICAgc3BsaXRZQnkgPSBNYXRoLm1heChNZXNoU2hhZGluZy5NSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCwgTWF0aC5taW4oTWVzaFNoYWRpbmcuTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsIHNwbGl0WUJ5KSk7XG4gICAgY29uc3QgdmVydGljZXNQZXJSb3cgPSBzcGxpdFhCeSArIDE7XG4gICAgY29uc3QgZmlndXJlQ29vcmRzID0gbmV3IEludDMyQXJyYXkoKHNwbGl0WUJ5ICsgMSkgKiB2ZXJ0aWNlc1BlclJvdyk7XG4gICAgY29uc3QgZmlndXJlQ29sb3JzID0gbmV3IEludDMyQXJyYXkoKHNwbGl0WUJ5ICsgMSkgKiB2ZXJ0aWNlc1BlclJvdyk7XG4gICAgbGV0IGsgPSAwO1xuICAgIGNvbnN0IGNsID0gbmV3IFVpbnQ4QXJyYXkoMyksXG4gICAgICAgICAgY3IgPSBuZXcgVWludDhBcnJheSgzKTtcbiAgICBjb25zdCBjMCA9IGNvbG9yc1tjaVswXV0sXG4gICAgICAgICAgYzEgPSBjb2xvcnNbY2lbMV1dLFxuICAgICAgICAgIGMyID0gY29sb3JzW2NpWzJdXSxcbiAgICAgICAgICBjMyA9IGNvbG9yc1tjaVszXV07XG4gICAgY29uc3QgYlJvdyA9IGdldEIoc3BsaXRZQnkpLFxuICAgICAgICAgIGJDb2wgPSBnZXRCKHNwbGl0WEJ5KTtcblxuICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8PSBzcGxpdFlCeTsgcm93KyspIHtcbiAgICAgIGNsWzBdID0gKGMwWzBdICogKHNwbGl0WUJ5IC0gcm93KSArIGMyWzBdICogcm93KSAvIHNwbGl0WUJ5IHwgMDtcbiAgICAgIGNsWzFdID0gKGMwWzFdICogKHNwbGl0WUJ5IC0gcm93KSArIGMyWzFdICogcm93KSAvIHNwbGl0WUJ5IHwgMDtcbiAgICAgIGNsWzJdID0gKGMwWzJdICogKHNwbGl0WUJ5IC0gcm93KSArIGMyWzJdICogcm93KSAvIHNwbGl0WUJ5IHwgMDtcbiAgICAgIGNyWzBdID0gKGMxWzBdICogKHNwbGl0WUJ5IC0gcm93KSArIGMzWzBdICogcm93KSAvIHNwbGl0WUJ5IHwgMDtcbiAgICAgIGNyWzFdID0gKGMxWzFdICogKHNwbGl0WUJ5IC0gcm93KSArIGMzWzFdICogcm93KSAvIHNwbGl0WUJ5IHwgMDtcbiAgICAgIGNyWzJdID0gKGMxWzJdICogKHNwbGl0WUJ5IC0gcm93KSArIGMzWzJdICogcm93KSAvIHNwbGl0WUJ5IHwgMDtcblxuICAgICAgZm9yIChsZXQgY29sID0gMDsgY29sIDw9IHNwbGl0WEJ5OyBjb2wrKywgaysrKSB7XG4gICAgICAgIGlmICgocm93ID09PSAwIHx8IHJvdyA9PT0gc3BsaXRZQnkpICYmIChjb2wgPT09IDAgfHwgY29sID09PSBzcGxpdFhCeSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB4ID0gMCxcbiAgICAgICAgICAgIHkgPSAwO1xuICAgICAgICBsZXQgcSA9IDA7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMzsgaSsrKSB7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPD0gMzsgaisrLCBxKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSBiUm93W3Jvd11baV0gKiBiQ29sW2NvbF1bal07XG4gICAgICAgICAgICB4ICs9IGNvb3Jkc1twaVtxXV1bMF0gKiBtO1xuICAgICAgICAgICAgeSArPSBjb29yZHNbcGlbcV1dWzFdICogbTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmaWd1cmVDb29yZHNba10gPSBjb29yZHMubGVuZ3RoO1xuICAgICAgICBjb29yZHMucHVzaChbeCwgeV0pO1xuICAgICAgICBmaWd1cmVDb2xvcnNba10gPSBjb2xvcnMubGVuZ3RoO1xuICAgICAgICBjb25zdCBuZXdDb2xvciA9IG5ldyBVaW50OEFycmF5KDMpO1xuICAgICAgICBuZXdDb2xvclswXSA9IChjbFswXSAqIChzcGxpdFhCeSAtIGNvbCkgKyBjclswXSAqIGNvbCkgLyBzcGxpdFhCeSB8IDA7XG4gICAgICAgIG5ld0NvbG9yWzFdID0gKGNsWzFdICogKHNwbGl0WEJ5IC0gY29sKSArIGNyWzFdICogY29sKSAvIHNwbGl0WEJ5IHwgMDtcbiAgICAgICAgbmV3Q29sb3JbMl0gPSAoY2xbMl0gKiAoc3BsaXRYQnkgLSBjb2wpICsgY3JbMl0gKiBjb2wpIC8gc3BsaXRYQnkgfCAwO1xuICAgICAgICBjb2xvcnMucHVzaChuZXdDb2xvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmlndXJlQ29vcmRzWzBdID0gcGlbMF07XG4gICAgZmlndXJlQ29sb3JzWzBdID0gY2lbMF07XG4gICAgZmlndXJlQ29vcmRzW3NwbGl0WEJ5XSA9IHBpWzNdO1xuICAgIGZpZ3VyZUNvbG9yc1tzcGxpdFhCeV0gPSBjaVsxXTtcbiAgICBmaWd1cmVDb29yZHNbdmVydGljZXNQZXJSb3cgKiBzcGxpdFlCeV0gPSBwaVsxMl07XG4gICAgZmlndXJlQ29sb3JzW3ZlcnRpY2VzUGVyUm93ICogc3BsaXRZQnldID0gY2lbMl07XG4gICAgZmlndXJlQ29vcmRzW3ZlcnRpY2VzUGVyUm93ICogc3BsaXRZQnkgKyBzcGxpdFhCeV0gPSBwaVsxNV07XG4gICAgZmlndXJlQ29sb3JzW3ZlcnRpY2VzUGVyUm93ICogc3BsaXRZQnkgKyBzcGxpdFhCeV0gPSBjaVszXTtcbiAgICB0aGlzLmZpZ3VyZXNbaW5kZXhdID0ge1xuICAgICAgdHlwZTogXCJsYXR0aWNlXCIsXG4gICAgICBjb29yZHM6IGZpZ3VyZUNvb3JkcyxcbiAgICAgIGNvbG9yczogZmlndXJlQ29sb3JzLFxuICAgICAgdmVydGljZXNQZXJSb3dcbiAgICB9O1xuICB9XG5cbiAgX3VwZGF0ZUJvdW5kcygpIHtcbiAgICBsZXQgbWluWCA9IHRoaXMuY29vcmRzWzBdWzBdLFxuICAgICAgICBtaW5ZID0gdGhpcy5jb29yZHNbMF1bMV0sXG4gICAgICAgIG1heFggPSBtaW5YLFxuICAgICAgICBtYXhZID0gbWluWTtcblxuICAgIGZvciAobGV0IGkgPSAxLCBpaSA9IHRoaXMuY29vcmRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNvbnN0IHggPSB0aGlzLmNvb3Jkc1tpXVswXSxcbiAgICAgICAgICAgIHkgPSB0aGlzLmNvb3Jkc1tpXVsxXTtcbiAgICAgIG1pblggPSBtaW5YID4geCA/IHggOiBtaW5YO1xuICAgICAgbWluWSA9IG1pblkgPiB5ID8geSA6IG1pblk7XG4gICAgICBtYXhYID0gbWF4WCA8IHggPyB4IDogbWF4WDtcbiAgICAgIG1heFkgPSBtYXhZIDwgeSA/IHkgOiBtYXhZO1xuICAgIH1cblxuICAgIHRoaXMuYm91bmRzID0gW21pblgsIG1pblksIG1heFgsIG1heFldO1xuICB9XG5cbiAgX3BhY2tEYXRhKCkge1xuICAgIGxldCBpLCBpaSwgaiwgamo7XG4gICAgY29uc3QgY29vcmRzID0gdGhpcy5jb29yZHM7XG4gICAgY29uc3QgY29vcmRzUGFja2VkID0gbmV3IEZsb2F0MzJBcnJheShjb29yZHMubGVuZ3RoICogMik7XG5cbiAgICBmb3IgKGkgPSAwLCBqID0gMCwgaWkgPSBjb29yZHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgY29uc3QgeHkgPSBjb29yZHNbaV07XG4gICAgICBjb29yZHNQYWNrZWRbaisrXSA9IHh5WzBdO1xuICAgICAgY29vcmRzUGFja2VkW2orK10gPSB4eVsxXTtcbiAgICB9XG5cbiAgICB0aGlzLmNvb3JkcyA9IGNvb3Jkc1BhY2tlZDtcbiAgICBjb25zdCBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICBjb25zdCBjb2xvcnNQYWNrZWQgPSBuZXcgVWludDhBcnJheShjb2xvcnMubGVuZ3RoICogMyk7XG5cbiAgICBmb3IgKGkgPSAwLCBqID0gMCwgaWkgPSBjb2xvcnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgY29uc3QgYyA9IGNvbG9yc1tpXTtcbiAgICAgIGNvbG9yc1BhY2tlZFtqKytdID0gY1swXTtcbiAgICAgIGNvbG9yc1BhY2tlZFtqKytdID0gY1sxXTtcbiAgICAgIGNvbG9yc1BhY2tlZFtqKytdID0gY1syXTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbG9ycyA9IGNvbG9yc1BhY2tlZDtcbiAgICBjb25zdCBmaWd1cmVzID0gdGhpcy5maWd1cmVzO1xuXG4gICAgZm9yIChpID0gMCwgaWkgPSBmaWd1cmVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNvbnN0IGZpZ3VyZSA9IGZpZ3VyZXNbaV0sXG4gICAgICAgICAgICBwcyA9IGZpZ3VyZS5jb29yZHMsXG4gICAgICAgICAgICBjcyA9IGZpZ3VyZS5jb2xvcnM7XG5cbiAgICAgIGZvciAoaiA9IDAsIGpqID0gcHMubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICBwc1tqXSAqPSAyO1xuICAgICAgICBjc1tqXSAqPSAzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldElSKCkge1xuICAgIHJldHVybiBbXCJNZXNoXCIsIHRoaXMuc2hhZGluZ1R5cGUsIHRoaXMuY29vcmRzLCB0aGlzLmNvbG9ycywgdGhpcy5maWd1cmVzLCB0aGlzLmJvdW5kcywgdGhpcy5iYm94LCB0aGlzLmJhY2tncm91bmRdO1xuICB9XG5cbn1cblxuY2xhc3MgRHVtbXlTaGFkaW5nIGV4dGVuZHMgQmFzZVNoYWRpbmcge1xuICBnZXRJUigpIHtcbiAgICByZXR1cm4gW1wiRHVtbXlcIl07XG4gIH1cblxufVxuXG5mdW5jdGlvbiBnZXRUaWxpbmdQYXR0ZXJuSVIob3BlcmF0b3JMaXN0LCBkaWN0LCBjb2xvcikge1xuICBjb25zdCBtYXRyaXggPSBkaWN0LmdldEFycmF5KFwiTWF0cml4XCIpO1xuXG4gIGNvbnN0IGJib3ggPSBfdXRpbC5VdGlsLm5vcm1hbGl6ZVJlY3QoZGljdC5nZXRBcnJheShcIkJCb3hcIikpO1xuXG4gIGNvbnN0IHhzdGVwID0gZGljdC5nZXQoXCJYU3RlcFwiKTtcbiAgY29uc3QgeXN0ZXAgPSBkaWN0LmdldChcIllTdGVwXCIpO1xuICBjb25zdCBwYWludFR5cGUgPSBkaWN0LmdldChcIlBhaW50VHlwZVwiKTtcbiAgY29uc3QgdGlsaW5nVHlwZSA9IGRpY3QuZ2V0KFwiVGlsaW5nVHlwZVwiKTtcblxuICBpZiAoYmJveFsyXSAtIGJib3hbMF0gPT09IDAgfHwgYmJveFszXSAtIGJib3hbMV0gPT09IDApIHtcbiAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEludmFsaWQgZ2V0VGlsaW5nUGF0dGVybklSIC9CQm94IGFycmF5OiBbJHtiYm94fV0uYCk7XG4gIH1cblxuICByZXR1cm4gW1wiVGlsaW5nUGF0dGVyblwiLCBjb2xvciwgb3BlcmF0b3JMaXN0LCBtYXRyaXgsIGJib3gsIHhzdGVwLCB5c3RlcCwgcGFpbnRUeXBlLCB0aWxpbmdUeXBlXTtcbn1cblxuLyoqKi8gfSksXG4vKiA1NiAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5Qb3N0U2NyaXB0RXZhbHVhdG9yID0gZXhwb3J0cy5Qb3N0U2NyaXB0Q29tcGlsZXIgPSBleHBvcnRzLlBERkZ1bmN0aW9uRmFjdG9yeSA9IHZvaWQgMDtcbmV4cG9ydHMuaXNQREZGdW5jdGlvbiA9IGlzUERGRnVuY3Rpb247XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfcHNfcGFyc2VyID0gX193X3BkZmpzX3JlcXVpcmVfXyg1Nyk7XG5cbnZhciBfaW1hZ2VfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDU4KTtcblxuY2xhc3MgUERGRnVuY3Rpb25GYWN0b3J5IHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIHhyZWYsXG4gICAgaXNFdmFsU3VwcG9ydGVkID0gdHJ1ZVxuICB9KSB7XG4gICAgdGhpcy54cmVmID0geHJlZjtcbiAgICB0aGlzLmlzRXZhbFN1cHBvcnRlZCA9IGlzRXZhbFN1cHBvcnRlZCAhPT0gZmFsc2U7XG4gIH1cblxuICBjcmVhdGUoZm4pIHtcbiAgICBjb25zdCBjYWNoZWRGdW5jdGlvbiA9IHRoaXMuZ2V0Q2FjaGVkKGZuKTtcblxuICAgIGlmIChjYWNoZWRGdW5jdGlvbikge1xuICAgICAgcmV0dXJuIGNhY2hlZEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZEZ1bmN0aW9uID0gUERGRnVuY3Rpb24ucGFyc2Uoe1xuICAgICAgeHJlZjogdGhpcy54cmVmLFxuICAgICAgaXNFdmFsU3VwcG9ydGVkOiB0aGlzLmlzRXZhbFN1cHBvcnRlZCxcbiAgICAgIGZuOiBmbiBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLlJlZiA/IHRoaXMueHJlZi5mZXRjaChmbikgOiBmblxuICAgIH0pO1xuXG4gICAgdGhpcy5fY2FjaGUoZm4sIHBhcnNlZEZ1bmN0aW9uKTtcblxuICAgIHJldHVybiBwYXJzZWRGdW5jdGlvbjtcbiAgfVxuXG4gIGNyZWF0ZUZyb21BcnJheShmbk9iaikge1xuICAgIGNvbnN0IGNhY2hlZEZ1bmN0aW9uID0gdGhpcy5nZXRDYWNoZWQoZm5PYmopO1xuXG4gICAgaWYgKGNhY2hlZEZ1bmN0aW9uKSB7XG4gICAgICByZXR1cm4gY2FjaGVkRnVuY3Rpb247XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkRnVuY3Rpb24gPSBQREZGdW5jdGlvbi5wYXJzZUFycmF5KHtcbiAgICAgIHhyZWY6IHRoaXMueHJlZixcbiAgICAgIGlzRXZhbFN1cHBvcnRlZDogdGhpcy5pc0V2YWxTdXBwb3J0ZWQsXG4gICAgICBmbk9iajogZm5PYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYgPyB0aGlzLnhyZWYuZmV0Y2goZm5PYmopIDogZm5PYmpcbiAgICB9KTtcblxuICAgIHRoaXMuX2NhY2hlKGZuT2JqLCBwYXJzZWRGdW5jdGlvbik7XG5cbiAgICByZXR1cm4gcGFyc2VkRnVuY3Rpb247XG4gIH1cblxuICBnZXRDYWNoZWQoY2FjaGVLZXkpIHtcbiAgICBsZXQgZm5SZWY7XG5cbiAgICBpZiAoY2FjaGVLZXkgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgIGZuUmVmID0gY2FjaGVLZXk7XG4gICAgfSBlbHNlIGlmIChjYWNoZUtleSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpIHtcbiAgICAgIGZuUmVmID0gY2FjaGVLZXkub2JqSWQ7XG4gICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKGNhY2hlS2V5KSkge1xuICAgICAgZm5SZWYgPSBjYWNoZUtleS5kaWN0ICYmIGNhY2hlS2V5LmRpY3Qub2JqSWQ7XG4gICAgfVxuXG4gICAgaWYgKGZuUmVmKSB7XG4gICAgICBjb25zdCBsb2NhbEZ1bmN0aW9uID0gdGhpcy5fbG9jYWxGdW5jdGlvbkNhY2hlLmdldEJ5UmVmKGZuUmVmKTtcblxuICAgICAgaWYgKGxvY2FsRnVuY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsRnVuY3Rpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBfY2FjaGUoY2FjaGVLZXksIHBhcnNlZEZ1bmN0aW9uKSB7XG4gICAgaWYgKCFwYXJzZWRGdW5jdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQREZGdW5jdGlvbkZhY3RvcnkuX2NhY2hlIC0gZXhwZWN0ZWQgXCJwYXJzZWRGdW5jdGlvblwiIGFyZ3VtZW50LicpO1xuICAgIH1cblxuICAgIGxldCBmblJlZjtcblxuICAgIGlmIChjYWNoZUtleSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLlJlZikge1xuICAgICAgZm5SZWYgPSBjYWNoZUtleTtcbiAgICB9IGVsc2UgaWYgKGNhY2hlS2V5IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkge1xuICAgICAgZm5SZWYgPSBjYWNoZUtleS5vYmpJZDtcbiAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoY2FjaGVLZXkpKSB7XG4gICAgICBmblJlZiA9IGNhY2hlS2V5LmRpY3QgJiYgY2FjaGVLZXkuZGljdC5vYmpJZDtcbiAgICB9XG5cbiAgICBpZiAoZm5SZWYpIHtcbiAgICAgIHRoaXMuX2xvY2FsRnVuY3Rpb25DYWNoZS5zZXQobnVsbCwgZm5SZWYsIHBhcnNlZEZ1bmN0aW9uKTtcbiAgICB9XG4gIH1cblxuICBnZXQgX2xvY2FsRnVuY3Rpb25DYWNoZSgpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJfbG9jYWxGdW5jdGlvbkNhY2hlXCIsIG5ldyBfaW1hZ2VfdXRpbHMuTG9jYWxGdW5jdGlvbkNhY2hlKCkpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QREZGdW5jdGlvbkZhY3RvcnkgPSBQREZGdW5jdGlvbkZhY3Rvcnk7XG5cbmZ1bmN0aW9uIHRvTnVtYmVyQXJyYXkoYXJyKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBpZiAodHlwZW9mIGFycltpXSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspIHtcbiAgICAgICAgcmVzdWx0W2pdID0gK2FycltqXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXJyO1xufVxuXG5jbGFzcyBQREZGdW5jdGlvbiB7XG4gIHN0YXRpYyBnZXRTYW1wbGVBcnJheShzaXplLCBvdXRwdXRTaXplLCBicHMsIHN0cmVhbSkge1xuICAgIGxldCBpLCBpaTtcbiAgICBsZXQgbGVuZ3RoID0gMTtcblxuICAgIGZvciAoaSA9IDAsIGlpID0gc2l6ZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBsZW5ndGggKj0gc2l6ZVtpXTtcbiAgICB9XG5cbiAgICBsZW5ndGggKj0gb3V0cHV0U2l6ZTtcbiAgICBjb25zdCBhcnJheSA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgIGxldCBjb2RlU2l6ZSA9IDA7XG4gICAgbGV0IGNvZGVCdWYgPSAwO1xuICAgIGNvbnN0IHNhbXBsZU11bCA9IDEuMCAvICgyLjAgKiogYnBzIC0gMSk7XG4gICAgY29uc3Qgc3RyQnl0ZXMgPSBzdHJlYW0uZ2V0Qnl0ZXMoKGxlbmd0aCAqIGJwcyArIDcpIC8gOCk7XG4gICAgbGV0IHN0cklkeCA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHdoaWxlIChjb2RlU2l6ZSA8IGJwcykge1xuICAgICAgICBjb2RlQnVmIDw8PSA4O1xuICAgICAgICBjb2RlQnVmIHw9IHN0ckJ5dGVzW3N0cklkeCsrXTtcbiAgICAgICAgY29kZVNpemUgKz0gODtcbiAgICAgIH1cblxuICAgICAgY29kZVNpemUgLT0gYnBzO1xuICAgICAgYXJyYXlbaV0gPSAoY29kZUJ1ZiA+PiBjb2RlU2l6ZSkgKiBzYW1wbGVNdWw7XG4gICAgICBjb2RlQnVmICY9ICgxIDw8IGNvZGVTaXplKSAtIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgc3RhdGljIHBhcnNlKHtcbiAgICB4cmVmLFxuICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICBmblxuICB9KSB7XG4gICAgY29uc3QgZGljdCA9IGZuLmRpY3QgfHwgZm47XG4gICAgY29uc3QgdHlwZU51bSA9IGRpY3QuZ2V0KFwiRnVuY3Rpb25UeXBlXCIpO1xuXG4gICAgc3dpdGNoICh0eXBlTnVtKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdFNhbXBsZWQoe1xuICAgICAgICAgIHhyZWYsXG4gICAgICAgICAgaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgIGZuLFxuICAgICAgICAgIGRpY3RcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgMTpcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0SW50ZXJwb2xhdGVkKHtcbiAgICAgICAgICB4cmVmLFxuICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgICBkaWN0XG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdFN0aWNoZWQoe1xuICAgICAgICAgIHhyZWYsXG4gICAgICAgICAgaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgIGRpY3RcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgNDpcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0UG9zdFNjcmlwdCh7XG4gICAgICAgICAgeHJlZixcbiAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgZm4sXG4gICAgICAgICAgZGljdFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJVbmtub3duIHR5cGUgb2YgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdGF0aWMgcGFyc2VBcnJheSh7XG4gICAgeHJlZixcbiAgICBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgZm5PYmpcbiAgfSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShmbk9iaikpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlKHtcbiAgICAgICAgeHJlZixcbiAgICAgICAgaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICBmbjogZm5PYmpcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGZuQXJyYXkgPSBbXTtcblxuICAgIGZvciAobGV0IGogPSAwLCBqaiA9IGZuT2JqLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgIGZuQXJyYXkucHVzaCh0aGlzLnBhcnNlKHtcbiAgICAgICAgeHJlZixcbiAgICAgICAgaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICBmbjogeHJlZi5mZXRjaElmUmVmKGZuT2JqW2pdKVxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGZuQXJyYXkubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBmbkFycmF5W2ldKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0ICsgaSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBjb25zdHJ1Y3RTYW1wbGVkKHtcbiAgICB4cmVmLFxuICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICBmbixcbiAgICBkaWN0XG4gIH0pIHtcbiAgICBmdW5jdGlvbiB0b011bHRpQXJyYXkoYXJyKSB7XG4gICAgICBjb25zdCBpbnB1dExlbmd0aCA9IGFyci5sZW5ndGg7XG4gICAgICBjb25zdCBvdXQgPSBbXTtcbiAgICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRMZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBvdXRbaW5kZXgrK10gPSBbYXJyW2ldLCBhcnJbaSArIDFdXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnRlcnBvbGF0ZSh4LCB4bWluLCB4bWF4LCB5bWluLCB5bWF4KSB7XG4gICAgICByZXR1cm4geW1pbiArICh4IC0geG1pbikgKiAoKHltYXggLSB5bWluKSAvICh4bWF4IC0geG1pbikpO1xuICAgIH1cblxuICAgIGxldCBkb21haW4gPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoXCJEb21haW5cIikpO1xuICAgIGxldCByYW5nZSA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheShcIlJhbmdlXCIpKTtcblxuICAgIGlmICghZG9tYWluIHx8ICFyYW5nZSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiTm8gZG9tYWluIG9yIHJhbmdlXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0U2l6ZSA9IGRvbWFpbi5sZW5ndGggLyAyO1xuICAgIGNvbnN0IG91dHB1dFNpemUgPSByYW5nZS5sZW5ndGggLyAyO1xuICAgIGRvbWFpbiA9IHRvTXVsdGlBcnJheShkb21haW4pO1xuICAgIHJhbmdlID0gdG9NdWx0aUFycmF5KHJhbmdlKTtcbiAgICBjb25zdCBzaXplID0gdG9OdW1iZXJBcnJheShkaWN0LmdldEFycmF5KFwiU2l6ZVwiKSk7XG4gICAgY29uc3QgYnBzID0gZGljdC5nZXQoXCJCaXRzUGVyU2FtcGxlXCIpO1xuICAgIGNvbnN0IG9yZGVyID0gZGljdC5nZXQoXCJPcmRlclwiKSB8fCAxO1xuXG4gICAgaWYgKG9yZGVyICE9PSAxKSB7XG4gICAgICAoMCwgX3V0aWwuaW5mbykoXCJObyBzdXBwb3J0IGZvciBjdWJpYyBzcGxpbmUgaW50ZXJwb2xhdGlvbjogXCIgKyBvcmRlcik7XG4gICAgfVxuXG4gICAgbGV0IGVuY29kZSA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheShcIkVuY29kZVwiKSk7XG5cbiAgICBpZiAoIWVuY29kZSkge1xuICAgICAgZW5jb2RlID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRTaXplOyArK2kpIHtcbiAgICAgICAgZW5jb2RlLnB1c2goWzAsIHNpemVbaV0gLSAxXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kZSA9IHRvTXVsdGlBcnJheShlbmNvZGUpO1xuICAgIH1cblxuICAgIGxldCBkZWNvZGUgPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoXCJEZWNvZGVcIikpO1xuXG4gICAgaWYgKCFkZWNvZGUpIHtcbiAgICAgIGRlY29kZSA9IHJhbmdlO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWNvZGUgPSB0b011bHRpQXJyYXkoZGVjb2RlKTtcbiAgICB9XG5cbiAgICBjb25zdCBzYW1wbGVzID0gdGhpcy5nZXRTYW1wbGVBcnJheShzaXplLCBvdXRwdXRTaXplLCBicHMsIGZuKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0U2FtcGxlZEZuKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICBjb25zdCBjdWJlVmVydGljZXMgPSAxIDw8IGlucHV0U2l6ZTtcbiAgICAgIGNvbnN0IGN1YmVOID0gbmV3IEZsb2F0NjRBcnJheShjdWJlVmVydGljZXMpO1xuICAgICAgY29uc3QgY3ViZVZlcnRleCA9IG5ldyBVaW50MzJBcnJheShjdWJlVmVydGljZXMpO1xuICAgICAgbGV0IGksIGo7XG5cbiAgICAgIGZvciAoaiA9IDA7IGogPCBjdWJlVmVydGljZXM7IGorKykge1xuICAgICAgICBjdWJlTltqXSA9IDE7XG4gICAgICB9XG5cbiAgICAgIGxldCBrID0gb3V0cHV0U2l6ZSxcbiAgICAgICAgICBwb3MgPSAxO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgaW5wdXRTaXplOyArK2kpIHtcbiAgICAgICAgY29uc3QgZG9tYWluXzJpID0gZG9tYWluW2ldWzBdO1xuICAgICAgICBjb25zdCBkb21haW5fMmlfMSA9IGRvbWFpbltpXVsxXTtcbiAgICAgICAgY29uc3QgeGkgPSBNYXRoLm1pbihNYXRoLm1heChzcmNbc3JjT2Zmc2V0ICsgaV0sIGRvbWFpbl8yaSksIGRvbWFpbl8yaV8xKTtcbiAgICAgICAgbGV0IGUgPSBpbnRlcnBvbGF0ZSh4aSwgZG9tYWluXzJpLCBkb21haW5fMmlfMSwgZW5jb2RlW2ldWzBdLCBlbmNvZGVbaV1bMV0pO1xuICAgICAgICBjb25zdCBzaXplX2kgPSBzaXplW2ldO1xuICAgICAgICBlID0gTWF0aC5taW4oTWF0aC5tYXgoZSwgMCksIHNpemVfaSAtIDEpO1xuICAgICAgICBjb25zdCBlMCA9IGUgPCBzaXplX2kgLSAxID8gTWF0aC5mbG9vcihlKSA6IGUgLSAxO1xuICAgICAgICBjb25zdCBuMCA9IGUwICsgMSAtIGU7XG4gICAgICAgIGNvbnN0IG4xID0gZSAtIGUwO1xuICAgICAgICBjb25zdCBvZmZzZXQwID0gZTAgKiBrO1xuICAgICAgICBjb25zdCBvZmZzZXQxID0gb2Zmc2V0MCArIGs7XG5cbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGN1YmVWZXJ0aWNlczsgaisrKSB7XG4gICAgICAgICAgaWYgKGogJiBwb3MpIHtcbiAgICAgICAgICAgIGN1YmVOW2pdICo9IG4xO1xuICAgICAgICAgICAgY3ViZVZlcnRleFtqXSArPSBvZmZzZXQxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdWJlTltqXSAqPSBuMDtcbiAgICAgICAgICAgIGN1YmVWZXJ0ZXhbal0gKz0gb2Zmc2V0MDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBrICo9IHNpemVfaTtcbiAgICAgICAgcG9zIDw8PSAxO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGogPSAwOyBqIDwgb3V0cHV0U2l6ZTsgKytqKSB7XG4gICAgICAgIGxldCByaiA9IDA7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGN1YmVWZXJ0aWNlczsgaSsrKSB7XG4gICAgICAgICAgcmogKz0gc2FtcGxlc1tjdWJlVmVydGV4W2ldICsgal0gKiBjdWJlTltpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJqID0gaW50ZXJwb2xhdGUocmosIDAsIDEsIGRlY29kZVtqXVswXSwgZGVjb2RlW2pdWzFdKTtcbiAgICAgICAgZGVzdFtkZXN0T2Zmc2V0ICsgal0gPSBNYXRoLm1pbihNYXRoLm1heChyaiwgcmFuZ2Vbal1bMF0pLCByYW5nZVtqXVsxXSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBjb25zdHJ1Y3RJbnRlcnBvbGF0ZWQoe1xuICAgIHhyZWYsXG4gICAgaXNFdmFsU3VwcG9ydGVkLFxuICAgIGRpY3RcbiAgfSkge1xuICAgIGNvbnN0IGMwID0gdG9OdW1iZXJBcnJheShkaWN0LmdldEFycmF5KFwiQzBcIikpIHx8IFswXTtcbiAgICBjb25zdCBjMSA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheShcIkMxXCIpKSB8fCBbMV07XG4gICAgY29uc3QgbiA9IGRpY3QuZ2V0KFwiTlwiKTtcbiAgICBjb25zdCBkaWZmID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBjMC5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICBkaWZmLnB1c2goYzFbaV0gLSBjMFtpXSk7XG4gICAgfVxuXG4gICAgY29uc3QgbGVuZ3RoID0gZGlmZi5sZW5ndGg7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdEludGVycG9sYXRlZEZuKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICBjb25zdCB4ID0gbiA9PT0gMSA/IHNyY1tzcmNPZmZzZXRdIDogc3JjW3NyY09mZnNldF0gKiogbjtcblxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZW5ndGg7ICsraikge1xuICAgICAgICBkZXN0W2Rlc3RPZmZzZXQgKyBqXSA9IGMwW2pdICsgeCAqIGRpZmZbal07XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBjb25zdHJ1Y3RTdGljaGVkKHtcbiAgICB4cmVmLFxuICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICBkaWN0XG4gIH0pIHtcbiAgICBjb25zdCBkb21haW4gPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoXCJEb21haW5cIikpO1xuXG4gICAgaWYgKCFkb21haW4pIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIk5vIGRvbWFpblwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dFNpemUgPSBkb21haW4ubGVuZ3RoIC8gMjtcblxuICAgIGlmIChpbnB1dFNpemUgIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkJhZCBkb21haW4gZm9yIHN0aWNoZWQgZnVuY3Rpb25cIik7XG4gICAgfVxuXG4gICAgY29uc3QgZm5SZWZzID0gZGljdC5nZXQoXCJGdW5jdGlvbnNcIik7XG4gICAgY29uc3QgZm5zID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBmblJlZnMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgZm5zLnB1c2godGhpcy5wYXJzZSh7XG4gICAgICAgIHhyZWYsXG4gICAgICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgZm46IHhyZWYuZmV0Y2hJZlJlZihmblJlZnNbaV0pXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgY29uc3QgYm91bmRzID0gdG9OdW1iZXJBcnJheShkaWN0LmdldEFycmF5KFwiQm91bmRzXCIpKTtcbiAgICBjb25zdCBlbmNvZGUgPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoXCJFbmNvZGVcIikpO1xuICAgIGNvbnN0IHRtcEJ1ZiA9IG5ldyBGbG9hdDMyQXJyYXkoMSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdFN0aWNoZWRGbihzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCkge1xuICAgICAgY29uc3QgY2xpcCA9IGZ1bmN0aW9uIGNvbnN0cnVjdFN0aWNoZWRGcm9tSVJDbGlwKHYsIG1pbiwgbWF4KSB7XG4gICAgICAgIGlmICh2ID4gbWF4KSB7XG4gICAgICAgICAgdiA9IG1heDtcbiAgICAgICAgfSBlbHNlIGlmICh2IDwgbWluKSB7XG4gICAgICAgICAgdiA9IG1pbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfTtcblxuICAgICAgY29uc3QgdiA9IGNsaXAoc3JjW3NyY09mZnNldF0sIGRvbWFpblswXSwgZG9tYWluWzFdKTtcbiAgICAgIGNvbnN0IGxlbmd0aCA9IGJvdW5kcy5sZW5ndGg7XG4gICAgICBsZXQgaTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh2IDwgYm91bmRzW2ldKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IGRtaW4gPSBkb21haW5bMF07XG5cbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICBkbWluID0gYm91bmRzW2kgLSAxXTtcbiAgICAgIH1cblxuICAgICAgbGV0IGRtYXggPSBkb21haW5bMV07XG5cbiAgICAgIGlmIChpIDwgYm91bmRzLmxlbmd0aCkge1xuICAgICAgICBkbWF4ID0gYm91bmRzW2ldO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBybWluID0gZW5jb2RlWzIgKiBpXTtcbiAgICAgIGNvbnN0IHJtYXggPSBlbmNvZGVbMiAqIGkgKyAxXTtcbiAgICAgIHRtcEJ1ZlswXSA9IGRtaW4gPT09IGRtYXggPyBybWluIDogcm1pbiArICh2IC0gZG1pbikgKiAocm1heCAtIHJtaW4pIC8gKGRtYXggLSBkbWluKTtcbiAgICAgIGZuc1tpXSh0bXBCdWYsIDAsIGRlc3QsIGRlc3RPZmZzZXQpO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgY29uc3RydWN0UG9zdFNjcmlwdCh7XG4gICAgeHJlZixcbiAgICBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgZm4sXG4gICAgZGljdFxuICB9KSB7XG4gICAgY29uc3QgZG9tYWluID0gdG9OdW1iZXJBcnJheShkaWN0LmdldEFycmF5KFwiRG9tYWluXCIpKTtcbiAgICBjb25zdCByYW5nZSA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheShcIlJhbmdlXCIpKTtcblxuICAgIGlmICghZG9tYWluKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJObyBkb21haW4uXCIpO1xuICAgIH1cblxuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIk5vIHJhbmdlLlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBsZXhlciA9IG5ldyBfcHNfcGFyc2VyLlBvc3RTY3JpcHRMZXhlcihmbik7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IF9wc19wYXJzZXIuUG9zdFNjcmlwdFBhcnNlcihsZXhlcik7XG4gICAgY29uc3QgY29kZSA9IHBhcnNlci5wYXJzZSgpO1xuXG4gICAgaWYgKGlzRXZhbFN1cHBvcnRlZCAmJiBfdXRpbC5Jc0V2YWxTdXBwb3J0ZWRDYWNoZWQudmFsdWUpIHtcbiAgICAgIGNvbnN0IGNvbXBpbGVkID0gbmV3IFBvc3RTY3JpcHRDb21waWxlcigpLmNvbXBpbGUoY29kZSwgZG9tYWluLCByYW5nZSk7XG5cbiAgICAgIGlmIChjb21waWxlZCkge1xuICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKFwic3JjXCIsIFwic3JjT2Zmc2V0XCIsIFwiZGVzdFwiLCBcImRlc3RPZmZzZXRcIiwgY29tcGlsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgICgwLCBfdXRpbC5pbmZvKShcIlVuYWJsZSB0byBjb21waWxlIFBTIGZ1bmN0aW9uXCIpO1xuICAgIGNvbnN0IG51bU91dHB1dHMgPSByYW5nZS5sZW5ndGggPj4gMTtcbiAgICBjb25zdCBudW1JbnB1dHMgPSBkb21haW4ubGVuZ3RoID4+IDE7XG4gICAgY29uc3QgZXZhbHVhdG9yID0gbmV3IFBvc3RTY3JpcHRFdmFsdWF0b3IoY29kZSk7XG4gICAgY29uc3QgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGNvbnN0IE1BWF9DQUNIRV9TSVpFID0gMjA0OCAqIDQ7XG4gICAgbGV0IGNhY2hlX2F2YWlsYWJsZSA9IE1BWF9DQUNIRV9TSVpFO1xuICAgIGNvbnN0IHRtcEJ1ZiA9IG5ldyBGbG9hdDMyQXJyYXkobnVtSW5wdXRzKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0UG9zdFNjcmlwdEZuKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICBsZXQgaSwgdmFsdWU7XG4gICAgICBsZXQga2V5ID0gXCJcIjtcbiAgICAgIGNvbnN0IGlucHV0ID0gdG1wQnVmO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtSW5wdXRzOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBzcmNbc3JjT2Zmc2V0ICsgaV07XG4gICAgICAgIGlucHV0W2ldID0gdmFsdWU7XG4gICAgICAgIGtleSArPSB2YWx1ZSArIFwiX1wiO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjYWNoZWRWYWx1ZSA9IGNhY2hlW2tleV07XG5cbiAgICAgIGlmIChjYWNoZWRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlc3Quc2V0KGNhY2hlZFZhbHVlLCBkZXN0T2Zmc2V0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvdXRwdXQgPSBuZXcgRmxvYXQzMkFycmF5KG51bU91dHB1dHMpO1xuICAgICAgY29uc3Qgc3RhY2sgPSBldmFsdWF0b3IuZXhlY3V0ZShpbnB1dCk7XG4gICAgICBjb25zdCBzdGFja0luZGV4ID0gc3RhY2subGVuZ3RoIC0gbnVtT3V0cHV0cztcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG51bU91dHB1dHM7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IHN0YWNrW3N0YWNrSW5kZXggKyBpXTtcbiAgICAgICAgbGV0IGJvdW5kID0gcmFuZ2VbaSAqIDJdO1xuXG4gICAgICAgIGlmICh2YWx1ZSA8IGJvdW5kKSB7XG4gICAgICAgICAgdmFsdWUgPSBib3VuZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBib3VuZCA9IHJhbmdlW2kgKiAyICsgMV07XG5cbiAgICAgICAgICBpZiAodmFsdWUgPiBib3VuZCkge1xuICAgICAgICAgICAgdmFsdWUgPSBib3VuZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBvdXRwdXRbaV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNhY2hlX2F2YWlsYWJsZSA+IDApIHtcbiAgICAgICAgY2FjaGVfYXZhaWxhYmxlLS07XG4gICAgICAgIGNhY2hlW2tleV0gPSBvdXRwdXQ7XG4gICAgICB9XG5cbiAgICAgIGRlc3Quc2V0KG91dHB1dCwgZGVzdE9mZnNldCk7XG4gICAgfTtcbiAgfVxuXG59XG5cbmZ1bmN0aW9uIGlzUERGRnVuY3Rpb24odikge1xuICBsZXQgZm5EaWN0O1xuXG4gIGlmICh0eXBlb2YgdiAhPT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KSh2KSkge1xuICAgIGZuRGljdCA9IHY7XG4gIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKSh2KSkge1xuICAgIGZuRGljdCA9IHYuZGljdDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZm5EaWN0LmhhcyhcIkZ1bmN0aW9uVHlwZVwiKTtcbn1cblxuY2xhc3MgUG9zdFNjcmlwdFN0YWNrIHtcbiAgc3RhdGljIGdldCBNQVhfU1RBQ0tfU0laRSgpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJNQVhfU1RBQ0tfU0laRVwiLCAxMDApO1xuICB9XG5cbiAgY29uc3RydWN0b3IoaW5pdGlhbFN0YWNrKSB7XG4gICAgdGhpcy5zdGFjayA9ICFpbml0aWFsU3RhY2sgPyBbXSA6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGluaXRpYWxTdGFjaywgMCk7XG4gIH1cblxuICBwdXNoKHZhbHVlKSB7XG4gICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoID49IFBvc3RTY3JpcHRTdGFjay5NQVhfU1RBQ0tfU0laRSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG9zdFNjcmlwdCBmdW5jdGlvbiBzdGFjayBvdmVyZmxvdy5cIik7XG4gICAgfVxuXG4gICAgdGhpcy5zdGFjay5wdXNoKHZhbHVlKTtcbiAgfVxuXG4gIHBvcCgpIHtcbiAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG9zdFNjcmlwdCBmdW5jdGlvbiBzdGFjayB1bmRlcmZsb3cuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YWNrLnBvcCgpO1xuICB9XG5cbiAgY29weShuKSB7XG4gICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoICsgbiA+PSBQb3N0U2NyaXB0U3RhY2suTUFYX1NUQUNLX1NJWkUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgb3ZlcmZsb3cuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YWNrID0gdGhpcy5zdGFjaztcblxuICAgIGZvciAobGV0IGkgPSBzdGFjay5sZW5ndGggLSBuLCBqID0gbiAtIDE7IGogPj0gMDsgai0tLCBpKyspIHtcbiAgICAgIHN0YWNrLnB1c2goc3RhY2tbaV0pO1xuICAgIH1cbiAgfVxuXG4gIGluZGV4KG4pIHtcbiAgICB0aGlzLnB1c2godGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIG4gLSAxXSk7XG4gIH1cblxuICByb2xsKG4sIHApIHtcbiAgICBjb25zdCBzdGFjayA9IHRoaXMuc3RhY2s7XG4gICAgY29uc3QgbCA9IHN0YWNrLmxlbmd0aCAtIG47XG4gICAgY29uc3QgciA9IHN0YWNrLmxlbmd0aCAtIDE7XG4gICAgY29uc3QgYyA9IGwgKyAocCAtIE1hdGguZmxvb3IocCAvIG4pICogbik7XG5cbiAgICBmb3IgKGxldCBpID0gbCwgaiA9IHI7IGkgPCBqOyBpKyssIGotLSkge1xuICAgICAgY29uc3QgdCA9IHN0YWNrW2ldO1xuICAgICAgc3RhY2tbaV0gPSBzdGFja1tqXTtcbiAgICAgIHN0YWNrW2pdID0gdDtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gbCwgaiA9IGMgLSAxOyBpIDwgajsgaSsrLCBqLS0pIHtcbiAgICAgIGNvbnN0IHQgPSBzdGFja1tpXTtcbiAgICAgIHN0YWNrW2ldID0gc3RhY2tbal07XG4gICAgICBzdGFja1tqXSA9IHQ7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IGMsIGogPSByOyBpIDwgajsgaSsrLCBqLS0pIHtcbiAgICAgIGNvbnN0IHQgPSBzdGFja1tpXTtcbiAgICAgIHN0YWNrW2ldID0gc3RhY2tbal07XG4gICAgICBzdGFja1tqXSA9IHQ7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgUG9zdFNjcmlwdEV2YWx1YXRvciB7XG4gIGNvbnN0cnVjdG9yKG9wZXJhdG9ycykge1xuICAgIHRoaXMub3BlcmF0b3JzID0gb3BlcmF0b3JzO1xuICB9XG5cbiAgZXhlY3V0ZShpbml0aWFsU3RhY2spIHtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBQb3N0U2NyaXB0U3RhY2soaW5pdGlhbFN0YWNrKTtcbiAgICBsZXQgY291bnRlciA9IDA7XG4gICAgY29uc3Qgb3BlcmF0b3JzID0gdGhpcy5vcGVyYXRvcnM7XG4gICAgY29uc3QgbGVuZ3RoID0gb3BlcmF0b3JzLmxlbmd0aDtcbiAgICBsZXQgb3BlcmF0b3IsIGEsIGI7XG5cbiAgICB3aGlsZSAoY291bnRlciA8IGxlbmd0aCkge1xuICAgICAgb3BlcmF0b3IgPSBvcGVyYXRvcnNbY291bnRlcisrXTtcblxuICAgICAgaWYgKHR5cGVvZiBvcGVyYXRvciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBzdGFjay5wdXNoKG9wZXJhdG9yKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICAgICAgY2FzZSBcImp6XCI6XG4gICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICAgIGlmICghYSkge1xuICAgICAgICAgICAgY291bnRlciA9IGI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImpcIjpcbiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgY291bnRlciA9IGE7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImFic1wiOlxuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBzdGFjay5wdXNoKE1hdGguYWJzKGEpKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiYWRkXCI6XG4gICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBzdGFjay5wdXNoKGEgKyBiKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiYW5kXCI6XG4gICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNCb29sKShhKSAmJiAoMCwgX3V0aWwuaXNCb29sKShiKSkge1xuICAgICAgICAgICAgc3RhY2sucHVzaChhICYmIGIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGEgJiBiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiYXRhblwiOlxuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBzdGFjay5wdXNoKE1hdGguYXRhbihhKSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImJpdHNoaWZ0XCI6XG4gICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICAgIGlmIChhID4gMCkge1xuICAgICAgICAgICAgc3RhY2sucHVzaChhIDw8IGIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGEgPj4gYik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImNlaWxpbmdcIjpcbiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgc3RhY2sucHVzaChNYXRoLmNlaWwoYSkpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJjb3B5XCI6XG4gICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIHN0YWNrLmNvcHkoYSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImNvc1wiOlxuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBzdGFjay5wdXNoKE1hdGguY29zKGEpKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiY3ZpXCI6XG4gICAgICAgICAgYSA9IHN0YWNrLnBvcCgpIHwgMDtcbiAgICAgICAgICBzdGFjay5wdXNoKGEpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJjdnJcIjpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiZGl2XCI6XG4gICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBzdGFjay5wdXNoKGEgLyBiKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiZHVwXCI6XG4gICAgICAgICAgc3RhY2suY29weSgxKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiZXFcIjpcbiAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIHN0YWNrLnB1c2goYSA9PT0gYik7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImV4Y2hcIjpcbiAgICAgICAgICBzdGFjay5yb2xsKDIsIDEpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJleHBcIjpcbiAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIHN0YWNrLnB1c2goYSAqKiBiKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiZmFsc2VcIjpcbiAgICAgICAgICBzdGFjay5wdXNoKGZhbHNlKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiZmxvb3JcIjpcbiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgc3RhY2sucHVzaChNYXRoLmZsb29yKGEpKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiZ2VcIjpcbiAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIHN0YWNrLnB1c2goYSA+PSBiKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiZ3RcIjpcbiAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIHN0YWNrLnB1c2goYSA+IGIpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJpZGl2XCI6XG4gICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBzdGFjay5wdXNoKGEgLyBiIHwgMCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImluZGV4XCI6XG4gICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIHN0YWNrLmluZGV4KGEpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJsZVwiOlxuICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgc3RhY2sucHVzaChhIDw9IGIpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJsblwiOlxuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBzdGFjay5wdXNoKE1hdGgubG9nKGEpKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwibG9nXCI6XG4gICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIHN0YWNrLnB1c2goTWF0aC5sb2coYSkgLyBNYXRoLkxOMTApO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJsdFwiOlxuICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgc3RhY2sucHVzaChhIDwgYik7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIm1vZFwiOlxuICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgc3RhY2sucHVzaChhICUgYik7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIm11bFwiOlxuICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgc3RhY2sucHVzaChhICogYik7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIm5lXCI6XG4gICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBzdGFjay5wdXNoKGEgIT09IGIpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJuZWdcIjpcbiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgc3RhY2sucHVzaCgtYSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIm5vdFwiOlxuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNCb29sKShhKSkge1xuICAgICAgICAgICAgc3RhY2sucHVzaCghYSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gofmEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJvclwiOlxuICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG5cbiAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzQm9vbCkoYSkgJiYgKDAsIF91dGlsLmlzQm9vbCkoYikpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYSB8fCBiKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhY2sucHVzaChhIHwgYik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcInBvcFwiOlxuICAgICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJyb2xsXCI6XG4gICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBzdGFjay5yb2xsKGEsIGIpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJyb3VuZFwiOlxuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBzdGFjay5wdXNoKE1hdGgucm91bmQoYSkpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJzaW5cIjpcbiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgc3RhY2sucHVzaChNYXRoLnNpbihhKSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcInNxcnRcIjpcbiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgc3RhY2sucHVzaChNYXRoLnNxcnQoYSkpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJzdWJcIjpcbiAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIHN0YWNrLnB1c2goYSAtIGIpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJ0cnVlXCI6XG4gICAgICAgICAgc3RhY2sucHVzaCh0cnVlKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwidHJ1bmNhdGVcIjpcbiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgYSA9IGEgPCAwID8gTWF0aC5jZWlsKGEpIDogTWF0aC5mbG9vcihhKTtcbiAgICAgICAgICBzdGFjay5wdXNoKGEpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJ4b3JcIjpcbiAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc0Jvb2wpKGEpICYmICgwLCBfdXRpbC5pc0Jvb2wpKGIpKSB7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGEgIT09IGIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGEgXiBiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgVW5rbm93biBvcGVyYXRvciAke29wZXJhdG9yfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdGFjay5zdGFjaztcbiAgfVxuXG59XG5cbmV4cG9ydHMuUG9zdFNjcmlwdEV2YWx1YXRvciA9IFBvc3RTY3JpcHRFdmFsdWF0b3I7XG5cbmNvbnN0IFBvc3RTY3JpcHRDb21waWxlciA9IGZ1bmN0aW9uIFBvc3RTY3JpcHRDb21waWxlckNsb3N1cmUoKSB7XG4gIGNsYXNzIEFzdE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKHR5cGUpIHtcbiAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgfVxuXG4gICAgdmlzaXQodmlzaXRvcikge1xuICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcImFic3RyYWN0IG1ldGhvZFwiKTtcbiAgICB9XG5cbiAgfVxuXG4gIGNsYXNzIEFzdEFyZ3VtZW50IGV4dGVuZHMgQXN0Tm9kZSB7XG4gICAgY29uc3RydWN0b3IoaW5kZXgsIG1pbiwgbWF4KSB7XG4gICAgICBzdXBlcihcImFyZ3NcIik7XG4gICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICB0aGlzLm1pbiA9IG1pbjtcbiAgICAgIHRoaXMubWF4ID0gbWF4O1xuICAgIH1cblxuICAgIHZpc2l0KHZpc2l0b3IpIHtcbiAgICAgIHZpc2l0b3IudmlzaXRBcmd1bWVudCh0aGlzKTtcbiAgICB9XG5cbiAgfVxuXG4gIGNsYXNzIEFzdExpdGVyYWwgZXh0ZW5kcyBBc3ROb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihudW1iZXIpIHtcbiAgICAgIHN1cGVyKFwibGl0ZXJhbFwiKTtcbiAgICAgIHRoaXMubnVtYmVyID0gbnVtYmVyO1xuICAgICAgdGhpcy5taW4gPSBudW1iZXI7XG4gICAgICB0aGlzLm1heCA9IG51bWJlcjtcbiAgICB9XG5cbiAgICB2aXNpdCh2aXNpdG9yKSB7XG4gICAgICB2aXNpdG9yLnZpc2l0TGl0ZXJhbCh0aGlzKTtcbiAgICB9XG5cbiAgfVxuXG4gIGNsYXNzIEFzdEJpbmFyeU9wZXJhdGlvbiBleHRlbmRzIEFzdE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKG9wLCBhcmcxLCBhcmcyLCBtaW4sIG1heCkge1xuICAgICAgc3VwZXIoXCJiaW5hcnlcIik7XG4gICAgICB0aGlzLm9wID0gb3A7XG4gICAgICB0aGlzLmFyZzEgPSBhcmcxO1xuICAgICAgdGhpcy5hcmcyID0gYXJnMjtcbiAgICAgIHRoaXMubWluID0gbWluO1xuICAgICAgdGhpcy5tYXggPSBtYXg7XG4gICAgfVxuXG4gICAgdmlzaXQodmlzaXRvcikge1xuICAgICAgdmlzaXRvci52aXNpdEJpbmFyeU9wZXJhdGlvbih0aGlzKTtcbiAgICB9XG5cbiAgfVxuXG4gIGNsYXNzIEFzdE1pbiBleHRlbmRzIEFzdE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKGFyZywgbWF4KSB7XG4gICAgICBzdXBlcihcIm1heFwiKTtcbiAgICAgIHRoaXMuYXJnID0gYXJnO1xuICAgICAgdGhpcy5taW4gPSBhcmcubWluO1xuICAgICAgdGhpcy5tYXggPSBtYXg7XG4gICAgfVxuXG4gICAgdmlzaXQodmlzaXRvcikge1xuICAgICAgdmlzaXRvci52aXNpdE1pbih0aGlzKTtcbiAgICB9XG5cbiAgfVxuXG4gIGNsYXNzIEFzdFZhcmlhYmxlIGV4dGVuZHMgQXN0Tm9kZSB7XG4gICAgY29uc3RydWN0b3IoaW5kZXgsIG1pbiwgbWF4KSB7XG4gICAgICBzdXBlcihcInZhclwiKTtcbiAgICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICAgIHRoaXMubWluID0gbWluO1xuICAgICAgdGhpcy5tYXggPSBtYXg7XG4gICAgfVxuXG4gICAgdmlzaXQodmlzaXRvcikge1xuICAgICAgdmlzaXRvci52aXNpdFZhcmlhYmxlKHRoaXMpO1xuICAgIH1cblxuICB9XG5cbiAgY2xhc3MgQXN0VmFyaWFibGVEZWZpbml0aW9uIGV4dGVuZHMgQXN0Tm9kZSB7XG4gICAgY29uc3RydWN0b3IodmFyaWFibGUsIGFyZykge1xuICAgICAgc3VwZXIoXCJkZWZpbml0aW9uXCIpO1xuICAgICAgdGhpcy52YXJpYWJsZSA9IHZhcmlhYmxlO1xuICAgICAgdGhpcy5hcmcgPSBhcmc7XG4gICAgfVxuXG4gICAgdmlzaXQodmlzaXRvcikge1xuICAgICAgdmlzaXRvci52aXNpdFZhcmlhYmxlRGVmaW5pdGlvbih0aGlzKTtcbiAgICB9XG5cbiAgfVxuXG4gIGNsYXNzIEV4cHJlc3Npb25CdWlsZGVyVmlzaXRvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aGlzLnBhcnRzID0gW107XG4gICAgfVxuXG4gICAgdmlzaXRBcmd1bWVudChhcmcpIHtcbiAgICAgIHRoaXMucGFydHMucHVzaChcIk1hdGgubWF4KFwiLCBhcmcubWluLCBcIiwgTWF0aC5taW4oXCIsIGFyZy5tYXgsIFwiLCBzcmNbc3JjT2Zmc2V0ICsgXCIsIGFyZy5pbmRleCwgXCJdKSlcIik7XG4gICAgfVxuXG4gICAgdmlzaXRWYXJpYWJsZSh2YXJpYWJsZSkge1xuICAgICAgdGhpcy5wYXJ0cy5wdXNoKFwidlwiLCB2YXJpYWJsZS5pbmRleCk7XG4gICAgfVxuXG4gICAgdmlzaXRMaXRlcmFsKGxpdGVyYWwpIHtcbiAgICAgIHRoaXMucGFydHMucHVzaChsaXRlcmFsLm51bWJlcik7XG4gICAgfVxuXG4gICAgdmlzaXRCaW5hcnlPcGVyYXRpb24ob3BlcmF0aW9uKSB7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goXCIoXCIpO1xuICAgICAgb3BlcmF0aW9uLmFyZzEudmlzaXQodGhpcyk7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goXCIgXCIsIG9wZXJhdGlvbi5vcCwgXCIgXCIpO1xuICAgICAgb3BlcmF0aW9uLmFyZzIudmlzaXQodGhpcyk7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goXCIpXCIpO1xuICAgIH1cblxuICAgIHZpc2l0VmFyaWFibGVEZWZpbml0aW9uKGRlZmluaXRpb24pIHtcbiAgICAgIHRoaXMucGFydHMucHVzaChcInZhciBcIik7XG4gICAgICBkZWZpbml0aW9uLnZhcmlhYmxlLnZpc2l0KHRoaXMpO1xuICAgICAgdGhpcy5wYXJ0cy5wdXNoKFwiID0gXCIpO1xuICAgICAgZGVmaW5pdGlvbi5hcmcudmlzaXQodGhpcyk7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goXCI7XCIpO1xuICAgIH1cblxuICAgIHZpc2l0TWluKG1heCkge1xuICAgICAgdGhpcy5wYXJ0cy5wdXNoKFwiTWF0aC5taW4oXCIpO1xuICAgICAgbWF4LmFyZy52aXNpdCh0aGlzKTtcbiAgICAgIHRoaXMucGFydHMucHVzaChcIiwgXCIsIG1heC5tYXgsIFwiKVwiKTtcbiAgICB9XG5cbiAgICB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcnRzLmpvaW4oXCJcIik7XG4gICAgfVxuXG4gIH1cblxuICBmdW5jdGlvbiBidWlsZEFkZE9wZXJhdGlvbihudW0xLCBudW0yKSB7XG4gICAgaWYgKG51bTIudHlwZSA9PT0gXCJsaXRlcmFsXCIgJiYgbnVtMi5udW1iZXIgPT09IDApIHtcbiAgICAgIHJldHVybiBudW0xO1xuICAgIH1cblxuICAgIGlmIChudW0xLnR5cGUgPT09IFwibGl0ZXJhbFwiICYmIG51bTEubnVtYmVyID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVtMjtcbiAgICB9XG5cbiAgICBpZiAobnVtMi50eXBlID09PSBcImxpdGVyYWxcIiAmJiBudW0xLnR5cGUgPT09IFwibGl0ZXJhbFwiKSB7XG4gICAgICByZXR1cm4gbmV3IEFzdExpdGVyYWwobnVtMS5udW1iZXIgKyBudW0yLm51bWJlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBBc3RCaW5hcnlPcGVyYXRpb24oXCIrXCIsIG51bTEsIG51bTIsIG51bTEubWluICsgbnVtMi5taW4sIG51bTEubWF4ICsgbnVtMi5tYXgpO1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGRNdWxPcGVyYXRpb24obnVtMSwgbnVtMikge1xuICAgIGlmIChudW0yLnR5cGUgPT09IFwibGl0ZXJhbFwiKSB7XG4gICAgICBpZiAobnVtMi5udW1iZXIgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBc3RMaXRlcmFsKDApO1xuICAgICAgfSBlbHNlIGlmIChudW0yLm51bWJlciA9PT0gMSkge1xuICAgICAgICByZXR1cm4gbnVtMTtcbiAgICAgIH0gZWxzZSBpZiAobnVtMS50eXBlID09PSBcImxpdGVyYWxcIikge1xuICAgICAgICByZXR1cm4gbmV3IEFzdExpdGVyYWwobnVtMS5udW1iZXIgKiBudW0yLm51bWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG51bTEudHlwZSA9PT0gXCJsaXRlcmFsXCIpIHtcbiAgICAgIGlmIChudW0xLm51bWJlciA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IEFzdExpdGVyYWwoMCk7XG4gICAgICB9IGVsc2UgaWYgKG51bTEubnVtYmVyID09PSAxKSB7XG4gICAgICAgIHJldHVybiBudW0yO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1pbiA9IE1hdGgubWluKG51bTEubWluICogbnVtMi5taW4sIG51bTEubWluICogbnVtMi5tYXgsIG51bTEubWF4ICogbnVtMi5taW4sIG51bTEubWF4ICogbnVtMi5tYXgpO1xuICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KG51bTEubWluICogbnVtMi5taW4sIG51bTEubWluICogbnVtMi5tYXgsIG51bTEubWF4ICogbnVtMi5taW4sIG51bTEubWF4ICogbnVtMi5tYXgpO1xuICAgIHJldHVybiBuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKFwiKlwiLCBudW0xLCBudW0yLCBtaW4sIG1heCk7XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZFN1Yk9wZXJhdGlvbihudW0xLCBudW0yKSB7XG4gICAgaWYgKG51bTIudHlwZSA9PT0gXCJsaXRlcmFsXCIpIHtcbiAgICAgIGlmIChudW0yLm51bWJlciA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbnVtMTtcbiAgICAgIH0gZWxzZSBpZiAobnVtMS50eXBlID09PSBcImxpdGVyYWxcIikge1xuICAgICAgICByZXR1cm4gbmV3IEFzdExpdGVyYWwobnVtMS5udW1iZXIgLSBudW0yLm51bWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG51bTIudHlwZSA9PT0gXCJiaW5hcnlcIiAmJiBudW0yLm9wID09PSBcIi1cIiAmJiBudW0xLnR5cGUgPT09IFwibGl0ZXJhbFwiICYmIG51bTEubnVtYmVyID09PSAxICYmIG51bTIuYXJnMS50eXBlID09PSBcImxpdGVyYWxcIiAmJiBudW0yLmFyZzEubnVtYmVyID09PSAxKSB7XG4gICAgICByZXR1cm4gbnVtMi5hcmcyO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKFwiLVwiLCBudW0xLCBudW0yLCBudW0xLm1pbiAtIG51bTIubWF4LCBudW0xLm1heCAtIG51bTIubWluKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1aWxkTWluT3BlcmF0aW9uKG51bTEsIG1heCkge1xuICAgIGlmIChudW0xLm1pbiA+PSBtYXgpIHtcbiAgICAgIHJldHVybiBuZXcgQXN0TGl0ZXJhbChtYXgpO1xuICAgIH0gZWxzZSBpZiAobnVtMS5tYXggPD0gbWF4KSB7XG4gICAgICByZXR1cm4gbnVtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFzdE1pbihudW0xLCBtYXgpO1xuICB9XG5cbiAgY2xhc3MgUG9zdFNjcmlwdENvbXBpbGVyIHtcbiAgICBjb21waWxlKGNvZGUsIGRvbWFpbiwgcmFuZ2UpIHtcbiAgICAgIGNvbnN0IHN0YWNrID0gW107XG4gICAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSBbXTtcbiAgICAgIGNvbnN0IGlucHV0U2l6ZSA9IGRvbWFpbi5sZW5ndGggPj4gMSxcbiAgICAgICAgICAgIG91dHB1dFNpemUgPSByYW5nZS5sZW5ndGggPj4gMTtcbiAgICAgIGxldCBsYXN0UmVnaXN0ZXIgPSAwO1xuICAgICAgbGV0IG4sIGo7XG4gICAgICBsZXQgbnVtMSwgbnVtMiwgYXN0MSwgYXN0MiwgdG1wVmFyLCBpdGVtO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0U2l6ZTsgaSsrKSB7XG4gICAgICAgIHN0YWNrLnB1c2gobmV3IEFzdEFyZ3VtZW50KGksIGRvbWFpbltpICogMl0sIGRvbWFpbltpICogMiArIDFdKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGNvZGUubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBpdGVtID0gY29kZVtpXTtcblxuICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBzdGFjay5wdXNoKG5ldyBBc3RMaXRlcmFsKGl0ZW0pKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoaXRlbSkge1xuICAgICAgICAgIGNhc2UgXCJhZGRcIjpcbiAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBudW0yID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBudW0xID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGJ1aWxkQWRkT3BlcmF0aW9uKG51bTEsIG51bTIpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImN2clwiOlxuICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIm11bFwiOlxuICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG51bTIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIG51bTEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYnVpbGRNdWxPcGVyYXRpb24obnVtMSwgbnVtMikpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwic3ViXCI6XG4gICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbnVtMiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgbnVtMSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChidWlsZFN1Yk9wZXJhdGlvbihudW0xLCBudW0yKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJleGNoXCI6XG4gICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXN0MSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgYXN0MiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhc3QxLCBhc3QyKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcInBvcFwiOlxuICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiaW5kZXhcIjpcbiAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBudW0xID0gc3RhY2sucG9wKCk7XG5cbiAgICAgICAgICAgIGlmIChudW0xLnR5cGUgIT09IFwibGl0ZXJhbFwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuID0gbnVtMS5udW1iZXI7XG5cbiAgICAgICAgICAgIGlmIChuIDwgMCB8fCAhTnVtYmVyLmlzSW50ZWdlcihuKSB8fCBzdGFjay5sZW5ndGggPCBuKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3QxID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gbiAtIDFdO1xuXG4gICAgICAgICAgICBpZiAoYXN0MS50eXBlID09PSBcImxpdGVyYWxcIiB8fCBhc3QxLnR5cGUgPT09IFwidmFyXCIpIHtcbiAgICAgICAgICAgICAgc3RhY2sucHVzaChhc3QxKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRtcFZhciA9IG5ldyBBc3RWYXJpYWJsZShsYXN0UmVnaXN0ZXIrKywgYXN0MS5taW4sIGFzdDEubWF4KTtcbiAgICAgICAgICAgIHN0YWNrW3N0YWNrLmxlbmd0aCAtIG4gLSAxXSA9IHRtcFZhcjtcbiAgICAgICAgICAgIHN0YWNrLnB1c2godG1wVmFyKTtcbiAgICAgICAgICAgIGluc3RydWN0aW9ucy5wdXNoKG5ldyBBc3RWYXJpYWJsZURlZmluaXRpb24odG1wVmFyLCBhc3QxKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJkdXBcIjpcbiAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvZGVbaSArIDFdID09PSBcIm51bWJlclwiICYmIGNvZGVbaSArIDJdID09PSBcImd0XCIgJiYgY29kZVtpICsgM10gPT09IGkgKyA3ICYmIGNvZGVbaSArIDRdID09PSBcImp6XCIgJiYgY29kZVtpICsgNV0gPT09IFwicG9wXCIgJiYgY29kZVtpICsgNl0gPT09IGNvZGVbaSArIDFdKSB7XG4gICAgICAgICAgICAgIG51bTEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgc3RhY2sucHVzaChidWlsZE1pbk9wZXJhdGlvbihudW0xLCBjb2RlW2kgKyAxXSkpO1xuICAgICAgICAgICAgICBpICs9IDY7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3QxID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG5cbiAgICAgICAgICAgIGlmIChhc3QxLnR5cGUgPT09IFwibGl0ZXJhbFwiIHx8IGFzdDEudHlwZSA9PT0gXCJ2YXJcIikge1xuICAgICAgICAgICAgICBzdGFjay5wdXNoKGFzdDEpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdG1wVmFyID0gbmV3IEFzdFZhcmlhYmxlKGxhc3RSZWdpc3RlcisrLCBhc3QxLm1pbiwgYXN0MS5tYXgpO1xuICAgICAgICAgICAgc3RhY2tbc3RhY2subGVuZ3RoIC0gMV0gPSB0bXBWYXI7XG4gICAgICAgICAgICBzdGFjay5wdXNoKHRtcFZhcik7XG4gICAgICAgICAgICBpbnN0cnVjdGlvbnMucHVzaChuZXcgQXN0VmFyaWFibGVEZWZpbml0aW9uKHRtcFZhciwgYXN0MSkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwicm9sbFwiOlxuICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG51bTIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIG51bTEgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICAgICAgaWYgKG51bTIudHlwZSAhPT0gXCJsaXRlcmFsXCIgfHwgbnVtMS50eXBlICE9PSBcImxpdGVyYWxcIikge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaiA9IG51bTIubnVtYmVyO1xuICAgICAgICAgICAgbiA9IG51bTEubnVtYmVyO1xuXG4gICAgICAgICAgICBpZiAobiA8PSAwIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG4pIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGopIHx8IHN0YWNrLmxlbmd0aCA8IG4pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGogPSAoaiAlIG4gKyBuKSAlIG47XG5cbiAgICAgICAgICAgIGlmIChqID09PSAwKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShzdGFjaywgc3RhY2suc3BsaWNlKHN0YWNrLmxlbmd0aCAtIG4sIG4gLSBqKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3RhY2subGVuZ3RoICE9PSBvdXRwdXRTaXplKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBpbnN0cnVjdGlvbiBvZiBpbnN0cnVjdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgc3RhdGVtZW50QnVpbGRlciA9IG5ldyBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3IoKTtcbiAgICAgICAgaW5zdHJ1Y3Rpb24udmlzaXQoc3RhdGVtZW50QnVpbGRlcik7XG4gICAgICAgIHJlc3VsdC5wdXNoKHN0YXRlbWVudEJ1aWxkZXIudG9TdHJpbmcoKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHN0YWNrLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29uc3QgZXhwciA9IHN0YWNrW2ldLFxuICAgICAgICAgICAgICBzdGF0ZW1lbnRCdWlsZGVyID0gbmV3IEV4cHJlc3Npb25CdWlsZGVyVmlzaXRvcigpO1xuICAgICAgICBleHByLnZpc2l0KHN0YXRlbWVudEJ1aWxkZXIpO1xuICAgICAgICBjb25zdCBtaW4gPSByYW5nZVtpICogMl0sXG4gICAgICAgICAgICAgIG1heCA9IHJhbmdlW2kgKiAyICsgMV07XG4gICAgICAgIGNvbnN0IG91dCA9IFtzdGF0ZW1lbnRCdWlsZGVyLnRvU3RyaW5nKCldO1xuXG4gICAgICAgIGlmIChtaW4gPiBleHByLm1pbikge1xuICAgICAgICAgIG91dC51bnNoaWZ0KFwiTWF0aC5tYXgoXCIsIG1pbiwgXCIsIFwiKTtcbiAgICAgICAgICBvdXQucHVzaChcIilcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF4IDwgZXhwci5tYXgpIHtcbiAgICAgICAgICBvdXQudW5zaGlmdChcIk1hdGgubWluKFwiLCBtYXgsIFwiLCBcIik7XG4gICAgICAgICAgb3V0LnB1c2goXCIpXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgb3V0LnVuc2hpZnQoXCJkZXN0W2Rlc3RPZmZzZXQgKyBcIiwgaSwgXCJdID0gXCIpO1xuICAgICAgICBvdXQucHVzaChcIjtcIik7XG4gICAgICAgIHJlc3VsdC5wdXNoKG91dC5qb2luKFwiXCIpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKFwiXFxuXCIpO1xuICAgIH1cblxuICB9XG5cbiAgcmV0dXJuIFBvc3RTY3JpcHRDb21waWxlcjtcbn0oKTtcblxuZXhwb3J0cy5Qb3N0U2NyaXB0Q29tcGlsZXIgPSBQb3N0U2NyaXB0Q29tcGlsZXI7XG5cbi8qKiovIH0pLFxuLyogNTcgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuUG9zdFNjcmlwdFBhcnNlciA9IGV4cG9ydHMuUG9zdFNjcmlwdExleGVyID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG5jbGFzcyBQb3N0U2NyaXB0UGFyc2VyIHtcbiAgY29uc3RydWN0b3IobGV4ZXIpIHtcbiAgICB0aGlzLmxleGVyID0gbGV4ZXI7XG4gICAgdGhpcy5vcGVyYXRvcnMgPSBbXTtcbiAgICB0aGlzLnRva2VuID0gbnVsbDtcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICB9XG5cbiAgbmV4dFRva2VuKCkge1xuICAgIHRoaXMucHJldiA9IHRoaXMudG9rZW47XG4gICAgdGhpcy50b2tlbiA9IHRoaXMubGV4ZXIuZ2V0VG9rZW4oKTtcbiAgfVxuXG4gIGFjY2VwdCh0eXBlKSB7XG4gICAgaWYgKHRoaXMudG9rZW4udHlwZSA9PT0gdHlwZSkge1xuICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGV4cGVjdCh0eXBlKSB7XG4gICAgaWYgKHRoaXMuYWNjZXB0KHR5cGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFVuZXhwZWN0ZWQgc3ltYm9sOiBmb3VuZCAke3RoaXMudG9rZW4udHlwZX0gZXhwZWN0ZWQgJHt0eXBlfS5gKTtcbiAgfVxuXG4gIHBhcnNlKCkge1xuICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgdGhpcy5leHBlY3QoUG9zdFNjcmlwdFRva2VuVHlwZXMuTEJSQUNFKTtcbiAgICB0aGlzLnBhcnNlQmxvY2soKTtcbiAgICB0aGlzLmV4cGVjdChQb3N0U2NyaXB0VG9rZW5UeXBlcy5SQlJBQ0UpO1xuICAgIHJldHVybiB0aGlzLm9wZXJhdG9ycztcbiAgfVxuXG4gIHBhcnNlQmxvY2soKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmICh0aGlzLmFjY2VwdChQb3N0U2NyaXB0VG9rZW5UeXBlcy5OVU1CRVIpKSB7XG4gICAgICAgIHRoaXMub3BlcmF0b3JzLnB1c2godGhpcy5wcmV2LnZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hY2NlcHQoUG9zdFNjcmlwdFRva2VuVHlwZXMuT1BFUkFUT1IpKSB7XG4gICAgICAgIHRoaXMub3BlcmF0b3JzLnB1c2godGhpcy5wcmV2LnZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hY2NlcHQoUG9zdFNjcmlwdFRva2VuVHlwZXMuTEJSQUNFKSkge1xuICAgICAgICB0aGlzLnBhcnNlQ29uZGl0aW9uKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcGFyc2VDb25kaXRpb24oKSB7XG4gICAgY29uc3QgY29uZGl0aW9uTG9jYXRpb24gPSB0aGlzLm9wZXJhdG9ycy5sZW5ndGg7XG4gICAgdGhpcy5vcGVyYXRvcnMucHVzaChudWxsLCBudWxsKTtcbiAgICB0aGlzLnBhcnNlQmxvY2soKTtcbiAgICB0aGlzLmV4cGVjdChQb3N0U2NyaXB0VG9rZW5UeXBlcy5SQlJBQ0UpO1xuXG4gICAgaWYgKHRoaXMuYWNjZXB0KFBvc3RTY3JpcHRUb2tlblR5cGVzLklGKSkge1xuICAgICAgdGhpcy5vcGVyYXRvcnNbY29uZGl0aW9uTG9jYXRpb25dID0gdGhpcy5vcGVyYXRvcnMubGVuZ3RoO1xuICAgICAgdGhpcy5vcGVyYXRvcnNbY29uZGl0aW9uTG9jYXRpb24gKyAxXSA9IFwianpcIjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWNjZXB0KFBvc3RTY3JpcHRUb2tlblR5cGVzLkxCUkFDRSkpIHtcbiAgICAgIGNvbnN0IGp1bXBMb2NhdGlvbiA9IHRoaXMub3BlcmF0b3JzLmxlbmd0aDtcbiAgICAgIHRoaXMub3BlcmF0b3JzLnB1c2gobnVsbCwgbnVsbCk7XG4gICAgICBjb25zdCBlbmRPZlRydWUgPSB0aGlzLm9wZXJhdG9ycy5sZW5ndGg7XG4gICAgICB0aGlzLnBhcnNlQmxvY2soKTtcbiAgICAgIHRoaXMuZXhwZWN0KFBvc3RTY3JpcHRUb2tlblR5cGVzLlJCUkFDRSk7XG4gICAgICB0aGlzLmV4cGVjdChQb3N0U2NyaXB0VG9rZW5UeXBlcy5JRkVMU0UpO1xuICAgICAgdGhpcy5vcGVyYXRvcnNbanVtcExvY2F0aW9uXSA9IHRoaXMub3BlcmF0b3JzLmxlbmd0aDtcbiAgICAgIHRoaXMub3BlcmF0b3JzW2p1bXBMb2NhdGlvbiArIDFdID0gXCJqXCI7XG4gICAgICB0aGlzLm9wZXJhdG9yc1tjb25kaXRpb25Mb2NhdGlvbl0gPSBlbmRPZlRydWU7XG4gICAgICB0aGlzLm9wZXJhdG9yc1tjb25kaXRpb25Mb2NhdGlvbiArIDFdID0gXCJqelwiO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJQUyBGdW5jdGlvbjogZXJyb3IgcGFyc2luZyBjb25kaXRpb25hbC5cIik7XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5Qb3N0U2NyaXB0UGFyc2VyID0gUG9zdFNjcmlwdFBhcnNlcjtcbmNvbnN0IFBvc3RTY3JpcHRUb2tlblR5cGVzID0ge1xuICBMQlJBQ0U6IDAsXG4gIFJCUkFDRTogMSxcbiAgTlVNQkVSOiAyLFxuICBPUEVSQVRPUjogMyxcbiAgSUY6IDQsXG4gIElGRUxTRTogNVxufTtcblxuY2xhc3MgUG9zdFNjcmlwdFRva2VuIHtcbiAgc3RhdGljIGdldCBvcENhY2hlKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIm9wQ2FjaGVcIiwgT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih0eXBlLCB2YWx1ZSkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgc3RhdGljIGdldE9wZXJhdG9yKG9wKSB7XG4gICAgY29uc3Qgb3BWYWx1ZSA9IFBvc3RTY3JpcHRUb2tlbi5vcENhY2hlW29wXTtcblxuICAgIGlmIChvcFZhbHVlKSB7XG4gICAgICByZXR1cm4gb3BWYWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gUG9zdFNjcmlwdFRva2VuLm9wQ2FjaGVbb3BdID0gbmV3IFBvc3RTY3JpcHRUb2tlbihQb3N0U2NyaXB0VG9rZW5UeXBlcy5PUEVSQVRPUiwgb3ApO1xuICB9XG5cbiAgc3RhdGljIGdldCBMQlJBQ0UoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiTEJSQUNFXCIsIG5ldyBQb3N0U2NyaXB0VG9rZW4oUG9zdFNjcmlwdFRva2VuVHlwZXMuTEJSQUNFLCBcIntcIikpO1xuICB9XG5cbiAgc3RhdGljIGdldCBSQlJBQ0UoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiUkJSQUNFXCIsIG5ldyBQb3N0U2NyaXB0VG9rZW4oUG9zdFNjcmlwdFRva2VuVHlwZXMuUkJSQUNFLCBcIn1cIikpO1xuICB9XG5cbiAgc3RhdGljIGdldCBJRigpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJJRlwiLCBuZXcgUG9zdFNjcmlwdFRva2VuKFBvc3RTY3JpcHRUb2tlblR5cGVzLklGLCBcIklGXCIpKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgSUZFTFNFKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIklGRUxTRVwiLCBuZXcgUG9zdFNjcmlwdFRva2VuKFBvc3RTY3JpcHRUb2tlblR5cGVzLklGRUxTRSwgXCJJRkVMU0VcIikpO1xuICB9XG5cbn1cblxuY2xhc3MgUG9zdFNjcmlwdExleGVyIHtcbiAgY29uc3RydWN0b3Ioc3RyZWFtKSB7XG4gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgIHRoaXMuc3RyQnVmID0gW107XG4gIH1cblxuICBuZXh0Q2hhcigpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50Q2hhciA9IHRoaXMuc3RyZWFtLmdldEJ5dGUoKTtcbiAgfVxuXG4gIGdldFRva2VuKCkge1xuICAgIGxldCBjb21tZW50ID0gZmFsc2U7XG4gICAgbGV0IGNoID0gdGhpcy5jdXJyZW50Q2hhcjtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoY2ggPCAwKSB7XG4gICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5FT0Y7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21tZW50KSB7XG4gICAgICAgIGlmIChjaCA9PT0gMHgwYSB8fCBjaCA9PT0gMHgwZCkge1xuICAgICAgICAgIGNvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyNSkge1xuICAgICAgICBjb21tZW50ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoISgwLCBfY29yZV91dGlscy5pc1doaXRlU3BhY2UpKGNoKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChjaCB8IDApIHtcbiAgICAgIGNhc2UgMHgzMDpcbiAgICAgIGNhc2UgMHgzMTpcbiAgICAgIGNhc2UgMHgzMjpcbiAgICAgIGNhc2UgMHgzMzpcbiAgICAgIGNhc2UgMHgzNDpcbiAgICAgIGNhc2UgMHgzNTpcbiAgICAgIGNhc2UgMHgzNjpcbiAgICAgIGNhc2UgMHgzNzpcbiAgICAgIGNhc2UgMHgzODpcbiAgICAgIGNhc2UgMHgzOTpcbiAgICAgIGNhc2UgMHgyYjpcbiAgICAgIGNhc2UgMHgyZDpcbiAgICAgIGNhc2UgMHgyZTpcbiAgICAgICAgcmV0dXJuIG5ldyBQb3N0U2NyaXB0VG9rZW4oUG9zdFNjcmlwdFRva2VuVHlwZXMuTlVNQkVSLCB0aGlzLmdldE51bWJlcigpKTtcblxuICAgICAgY2FzZSAweDdiOlxuICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgIHJldHVybiBQb3N0U2NyaXB0VG9rZW4uTEJSQUNFO1xuXG4gICAgICBjYXNlIDB4N2Q6XG4gICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgcmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5SQlJBQ0U7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyQnVmID0gdGhpcy5zdHJCdWY7XG4gICAgc3RyQnVmLmxlbmd0aCA9IDA7XG4gICAgc3RyQnVmWzBdID0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG5cbiAgICB3aGlsZSAoKGNoID0gdGhpcy5uZXh0Q2hhcigpKSA+PSAwICYmIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NWEgfHwgY2ggPj0gMHg2MSAmJiBjaCA8PSAweDdhKSkge1xuICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0ciA9IHN0ckJ1Zi5qb2luKFwiXCIpO1xuXG4gICAgc3dpdGNoIChzdHIudG9Mb3dlckNhc2UoKSkge1xuICAgICAgY2FzZSBcImlmXCI6XG4gICAgICAgIHJldHVybiBQb3N0U2NyaXB0VG9rZW4uSUY7XG5cbiAgICAgIGNhc2UgXCJpZmVsc2VcIjpcbiAgICAgICAgcmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5JRkVMU0U7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBQb3N0U2NyaXB0VG9rZW4uZ2V0T3BlcmF0b3Ioc3RyKTtcbiAgICB9XG4gIH1cblxuICBnZXROdW1iZXIoKSB7XG4gICAgbGV0IGNoID0gdGhpcy5jdXJyZW50Q2hhcjtcbiAgICBjb25zdCBzdHJCdWYgPSB0aGlzLnN0ckJ1ZjtcbiAgICBzdHJCdWYubGVuZ3RoID0gMDtcbiAgICBzdHJCdWZbMF0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcblxuICAgIHdoaWxlICgoY2ggPSB0aGlzLm5leHRDaGFyKCkpID49IDApIHtcbiAgICAgIGlmIChjaCA+PSAweDMwICYmIGNoIDw9IDB4MzkgfHwgY2ggPT09IDB4MmQgfHwgY2ggPT09IDB4MmUpIHtcbiAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUZsb2F0KHN0ckJ1Zi5qb2luKFwiXCIpKTtcblxuICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSW52YWxpZCBmbG9hdGluZyBwb2ludCBudW1iZXI6ICR7dmFsdWV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Qb3N0U2NyaXB0TGV4ZXIgPSBQb3N0U2NyaXB0TGV4ZXI7XG5cbi8qKiovIH0pLFxuLyogNTggKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuTG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUgPSBleHBvcnRzLkxvY2FsSW1hZ2VDYWNoZSA9IGV4cG9ydHMuTG9jYWxHU3RhdGVDYWNoZSA9IGV4cG9ydHMuTG9jYWxGdW5jdGlvbkNhY2hlID0gZXhwb3J0cy5Mb2NhbENvbG9yU3BhY2VDYWNoZSA9IGV4cG9ydHMuR2xvYmFsSW1hZ2VDYWNoZSA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxuY2xhc3MgQmFzZUxvY2FsQ2FjaGUge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IEJhc2VMb2NhbENhY2hlKSB7XG4gICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQ2Fubm90IGluaXRpYWxpemUgQmFzZUxvY2FsQ2FjaGUuXCIpO1xuICAgIH1cblxuICAgIHRoaXMuX29ubHlSZWZzID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5vbmx5UmVmcykgPT09IHRydWU7XG5cbiAgICBpZiAoIXRoaXMuX29ubHlSZWZzKSB7XG4gICAgICB0aGlzLl9uYW1lUmVmTWFwID0gbmV3IE1hcCgpO1xuICAgICAgdGhpcy5faW1hZ2VNYXAgPSBuZXcgTWFwKCk7XG4gICAgfVxuXG4gICAgdGhpcy5faW1hZ2VDYWNoZSA9IG5ldyBfcHJpbWl0aXZlcy5SZWZTZXRDYWNoZSgpO1xuICB9XG5cbiAgZ2V0QnlOYW1lKG5hbWUpIHtcbiAgICBpZiAodGhpcy5fb25seVJlZnMpIHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJTaG91bGQgbm90IGNhbGwgYGdldEJ5TmFtZWAgbWV0aG9kLlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWYgPSB0aGlzLl9uYW1lUmVmTWFwLmdldChuYW1lKTtcblxuICAgIGlmIChyZWYpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ5UmVmKHJlZik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2ltYWdlTWFwLmdldChuYW1lKSB8fCBudWxsO1xuICB9XG5cbiAgZ2V0QnlSZWYocmVmKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ltYWdlQ2FjaGUuZ2V0KHJlZikgfHwgbnVsbDtcbiAgfVxuXG4gIHNldChuYW1lLCByZWYsIGRhdGEpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIGBzZXRgIGNhbGxlZC5cIik7XG4gIH1cblxufVxuXG5jbGFzcyBMb2NhbEltYWdlQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZSB7XG4gIHNldChuYW1lLCByZWYgPSBudWxsLCBkYXRhKSB7XG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsSW1hZ2VDYWNoZS5zZXQgLSBleHBlY3RlZCBcIm5hbWVcIiBhcmd1bWVudC4nKTtcbiAgICB9XG5cbiAgICBpZiAocmVmKSB7XG4gICAgICBpZiAodGhpcy5faW1hZ2VDYWNoZS5oYXMocmVmKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX25hbWVSZWZNYXAuc2V0KG5hbWUsIHJlZik7XG5cbiAgICAgIHRoaXMuX2ltYWdlQ2FjaGUucHV0KHJlZiwgZGF0YSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faW1hZ2VNYXAuaGFzKG5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW1hZ2VNYXAuc2V0KG5hbWUsIGRhdGEpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Mb2NhbEltYWdlQ2FjaGUgPSBMb2NhbEltYWdlQ2FjaGU7XG5cbmNsYXNzIExvY2FsQ29sb3JTcGFjZUNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGUge1xuICBzZXQobmFtZSA9IG51bGwsIHJlZiA9IG51bGwsIGRhdGEpIHtcbiAgICBpZiAodHlwZW9mIG5hbWUgIT09IFwic3RyaW5nXCIgJiYgIXJlZikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2NhbENvbG9yU3BhY2VDYWNoZS5zZXQgLSBleHBlY3RlZCBcIm5hbWVcIiBhbmQvb3IgXCJyZWZcIiBhcmd1bWVudC4nKTtcbiAgICB9XG5cbiAgICBpZiAocmVmKSB7XG4gICAgICBpZiAodGhpcy5faW1hZ2VDYWNoZS5oYXMocmVmKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX25hbWVSZWZNYXAuc2V0KG5hbWUsIHJlZik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2ltYWdlQ2FjaGUucHV0KHJlZiwgZGF0YSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faW1hZ2VNYXAuaGFzKG5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW1hZ2VNYXAuc2V0KG5hbWUsIGRhdGEpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Mb2NhbENvbG9yU3BhY2VDYWNoZSA9IExvY2FsQ29sb3JTcGFjZUNhY2hlO1xuXG5jbGFzcyBMb2NhbEZ1bmN0aW9uQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZSB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBzdXBlcih7XG4gICAgICBvbmx5UmVmczogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgc2V0KG5hbWUgPSBudWxsLCByZWYsIGRhdGEpIHtcbiAgICBpZiAoIXJlZikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2NhbEZ1bmN0aW9uQ2FjaGUuc2V0IC0gZXhwZWN0ZWQgXCJyZWZcIiBhcmd1bWVudC4nKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faW1hZ2VDYWNoZS5oYXMocmVmKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2ltYWdlQ2FjaGUucHV0KHJlZiwgZGF0YSk7XG4gIH1cblxufVxuXG5leHBvcnRzLkxvY2FsRnVuY3Rpb25DYWNoZSA9IExvY2FsRnVuY3Rpb25DYWNoZTtcblxuY2xhc3MgTG9jYWxHU3RhdGVDYWNoZSBleHRlbmRzIEJhc2VMb2NhbENhY2hlIHtcbiAgc2V0KG5hbWUsIHJlZiA9IG51bGwsIGRhdGEpIHtcbiAgICBpZiAodHlwZW9mIG5hbWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTG9jYWxHU3RhdGVDYWNoZS5zZXQgLSBleHBlY3RlZCBcIm5hbWVcIiBhcmd1bWVudC4nKTtcbiAgICB9XG5cbiAgICBpZiAocmVmKSB7XG4gICAgICBpZiAodGhpcy5faW1hZ2VDYWNoZS5oYXMocmVmKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX25hbWVSZWZNYXAuc2V0KG5hbWUsIHJlZik7XG5cbiAgICAgIHRoaXMuX2ltYWdlQ2FjaGUucHV0KHJlZiwgZGF0YSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faW1hZ2VNYXAuaGFzKG5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW1hZ2VNYXAuc2V0KG5hbWUsIGRhdGEpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Mb2NhbEdTdGF0ZUNhY2hlID0gTG9jYWxHU3RhdGVDYWNoZTtcblxuY2xhc3MgTG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZSB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBzdXBlcih7XG4gICAgICBvbmx5UmVmczogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgc2V0KG5hbWUgPSBudWxsLCByZWYsIGRhdGEpIHtcbiAgICBpZiAoIXJlZikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2NhbFRpbGluZ1BhdHRlcm5DYWNoZS5zZXQgLSBleHBlY3RlZCBcInJlZlwiIGFyZ3VtZW50LicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9pbWFnZUNhY2hlLmhhcyhyZWYpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW1hZ2VDYWNoZS5wdXQocmVmLCBkYXRhKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuTG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUgPSBMb2NhbFRpbGluZ1BhdHRlcm5DYWNoZTtcblxuY2xhc3MgR2xvYmFsSW1hZ2VDYWNoZSB7XG4gIHN0YXRpYyBnZXQgTlVNX1BBR0VTX1RIUkVTSE9MRCgpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJOVU1fUEFHRVNfVEhSRVNIT0xEXCIsIDIpO1xuICB9XG5cbiAgc3RhdGljIGdldCBNSU5fSU1BR0VTX1RPX0NBQ0hFKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIk1JTl9JTUFHRVNfVE9fQ0FDSEVcIiwgMTApO1xuICB9XG5cbiAgc3RhdGljIGdldCBNQVhfQllURV9TSVpFKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIk1BWF9CWVRFX1NJWkVcIiwgNDBlNik7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9yZWZDYWNoZSA9IG5ldyBfcHJpbWl0aXZlcy5SZWZTZXRDYWNoZSgpO1xuICAgIHRoaXMuX2ltYWdlQ2FjaGUgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0Q2FjaGUoKTtcbiAgfVxuXG4gIGdldCBfYnl0ZVNpemUoKSB7XG4gICAgbGV0IGJ5dGVTaXplID0gMDtcblxuICAgIHRoaXMuX2ltYWdlQ2FjaGUuZm9yRWFjaChpbWFnZURhdGEgPT4ge1xuICAgICAgYnl0ZVNpemUgKz0gaW1hZ2VEYXRhLmJ5dGVTaXplO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJ5dGVTaXplO1xuICB9XG5cbiAgZ2V0IF9jYWNoZUxpbWl0UmVhY2hlZCgpIHtcbiAgICBpZiAodGhpcy5faW1hZ2VDYWNoZS5zaXplIDwgR2xvYmFsSW1hZ2VDYWNoZS5NSU5fSU1BR0VTX1RPX0NBQ0hFKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2J5dGVTaXplIDwgR2xvYmFsSW1hZ2VDYWNoZS5NQVhfQllURV9TSVpFKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzaG91bGRDYWNoZShyZWYsIHBhZ2VJbmRleCkge1xuICAgIGNvbnN0IHBhZ2VJbmRleFNldCA9IHRoaXMuX3JlZkNhY2hlLmdldChyZWYpO1xuXG4gICAgY29uc3QgbnVtUGFnZXMgPSBwYWdlSW5kZXhTZXQgPyBwYWdlSW5kZXhTZXQuc2l6ZSArIChwYWdlSW5kZXhTZXQuaGFzKHBhZ2VJbmRleCkgPyAwIDogMSkgOiAxO1xuXG4gICAgaWYgKG51bVBhZ2VzIDwgR2xvYmFsSW1hZ2VDYWNoZS5OVU1fUEFHRVNfVEhSRVNIT0xEKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9pbWFnZUNhY2hlLmhhcyhyZWYpICYmIHRoaXMuX2NhY2hlTGltaXRSZWFjaGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhZGRQYWdlSW5kZXgocmVmLCBwYWdlSW5kZXgpIHtcbiAgICBsZXQgcGFnZUluZGV4U2V0ID0gdGhpcy5fcmVmQ2FjaGUuZ2V0KHJlZik7XG5cbiAgICBpZiAoIXBhZ2VJbmRleFNldCkge1xuICAgICAgcGFnZUluZGV4U2V0ID0gbmV3IFNldCgpO1xuXG4gICAgICB0aGlzLl9yZWZDYWNoZS5wdXQocmVmLCBwYWdlSW5kZXhTZXQpO1xuICAgIH1cblxuICAgIHBhZ2VJbmRleFNldC5hZGQocGFnZUluZGV4KTtcbiAgfVxuXG4gIGFkZEJ5dGVTaXplKHJlZiwgYnl0ZVNpemUpIHtcbiAgICBjb25zdCBpbWFnZURhdGEgPSB0aGlzLl9pbWFnZUNhY2hlLmdldChyZWYpO1xuXG4gICAgaWYgKCFpbWFnZURhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaW1hZ2VEYXRhLmJ5dGVTaXplKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW1hZ2VEYXRhLmJ5dGVTaXplID0gYnl0ZVNpemU7XG4gIH1cblxuICBnZXREYXRhKHJlZiwgcGFnZUluZGV4KSB7XG4gICAgY29uc3QgcGFnZUluZGV4U2V0ID0gdGhpcy5fcmVmQ2FjaGUuZ2V0KHJlZik7XG5cbiAgICBpZiAoIXBhZ2VJbmRleFNldCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHBhZ2VJbmRleFNldC5zaXplIDwgR2xvYmFsSW1hZ2VDYWNoZS5OVU1fUEFHRVNfVEhSRVNIT0xEKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBpbWFnZURhdGEgPSB0aGlzLl9pbWFnZUNhY2hlLmdldChyZWYpO1xuXG4gICAgaWYgKCFpbWFnZURhdGEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHBhZ2VJbmRleFNldC5hZGQocGFnZUluZGV4KTtcbiAgICByZXR1cm4gaW1hZ2VEYXRhO1xuICB9XG5cbiAgc2V0RGF0YShyZWYsIGRhdGEpIHtcbiAgICBpZiAoIXRoaXMuX3JlZkNhY2hlLmhhcyhyZWYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YSAtIGV4cGVjdGVkIFwiYWRkUGFnZUluZGV4XCIgdG8gaGF2ZSBiZWVuIGNhbGxlZC4nKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faW1hZ2VDYWNoZS5oYXMocmVmKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jYWNoZUxpbWl0UmVhY2hlZCkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiR2xvYmFsSW1hZ2VDYWNoZS5zZXREYXRhIC0gY2FjaGUgbGltaXQgcmVhY2hlZC5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW1hZ2VDYWNoZS5wdXQocmVmLCBkYXRhKTtcbiAgfVxuXG4gIGNsZWFyKG9ubHlEYXRhID0gZmFsc2UpIHtcbiAgICBpZiAoIW9ubHlEYXRhKSB7XG4gICAgICB0aGlzLl9yZWZDYWNoZS5jbGVhcigpO1xuICAgIH1cblxuICAgIHRoaXMuX2ltYWdlQ2FjaGUuY2xlYXIoKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuR2xvYmFsSW1hZ2VDYWNoZSA9IEdsb2JhbEltYWdlQ2FjaGU7XG5cbi8qKiovIH0pLFxuLyogNTkgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuYmlkaSA9IGJpZGk7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbmNvbnN0IGJhc2VUeXBlcyA9IFtcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIlNcIiwgXCJCXCIsIFwiU1wiLCBcIldTXCIsIFwiQlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCXCIsIFwiQlwiLCBcIkJcIiwgXCJTXCIsIFwiV1NcIiwgXCJPTlwiLCBcIk9OXCIsIFwiRVRcIiwgXCJFVFwiLCBcIkVUXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJPTlwiLCBcIkVTXCIsIFwiQ1NcIiwgXCJFU1wiLCBcIkNTXCIsIFwiQ1NcIiwgXCJFTlwiLCBcIkVOXCIsIFwiRU5cIiwgXCJFTlwiLCBcIkVOXCIsIFwiRU5cIiwgXCJFTlwiLCBcIkVOXCIsIFwiRU5cIiwgXCJFTlwiLCBcIkNTXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIk9OXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJDU1wiLCBcIk9OXCIsIFwiRVRcIiwgXCJFVFwiLCBcIkVUXCIsIFwiRVRcIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJPTlwiLCBcIkxcIiwgXCJPTlwiLCBcIk9OXCIsIFwiQk5cIiwgXCJPTlwiLCBcIk9OXCIsIFwiRVRcIiwgXCJFVFwiLCBcIkVOXCIsIFwiRU5cIiwgXCJPTlwiLCBcIkxcIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJFTlwiLCBcIkxcIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJPTlwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJPTlwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCJdO1xuY29uc3QgYXJhYmljVHlwZXMgPSBbXCJBTlwiLCBcIkFOXCIsIFwiQU5cIiwgXCJBTlwiLCBcIkFOXCIsIFwiQU5cIiwgXCJPTlwiLCBcIk9OXCIsIFwiQUxcIiwgXCJFVFwiLCBcIkVUXCIsIFwiQUxcIiwgXCJDU1wiLCBcIkFMXCIsIFwiT05cIiwgXCJPTlwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIkFMXCIsIFwiQUxcIiwgXCJcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJBTlwiLCBcIkFOXCIsIFwiQU5cIiwgXCJBTlwiLCBcIkFOXCIsIFwiQU5cIiwgXCJBTlwiLCBcIkFOXCIsIFwiQU5cIiwgXCJBTlwiLCBcIkVUXCIsIFwiQU5cIiwgXCJBTlwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIk5TTVwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJBTlwiLCBcIk9OXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiQUxcIiwgXCJBTFwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk9OXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkVOXCIsIFwiRU5cIiwgXCJFTlwiLCBcIkVOXCIsIFwiRU5cIiwgXCJFTlwiLCBcIkVOXCIsIFwiRU5cIiwgXCJFTlwiLCBcIkVOXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCJdO1xuXG5mdW5jdGlvbiBpc09kZChpKSB7XG4gIHJldHVybiAoaSAmIDEpICE9PSAwO1xufVxuXG5mdW5jdGlvbiBpc0V2ZW4oaSkge1xuICByZXR1cm4gKGkgJiAxKSA9PT0gMDtcbn1cblxuZnVuY3Rpb24gZmluZFVuZXF1YWwoYXJyLCBzdGFydCwgdmFsdWUpIHtcbiAgbGV0IGosIGpqO1xuXG4gIGZvciAoaiA9IHN0YXJ0LCBqaiA9IGFyci5sZW5ndGg7IGogPCBqajsgKytqKSB7XG4gICAgaWYgKGFycltqXSAhPT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBqO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBqO1xufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZXMoYXJyLCBzdGFydCwgZW5kLCB2YWx1ZSkge1xuICBmb3IgKGxldCBqID0gc3RhcnQ7IGogPCBlbmQ7ICsraikge1xuICAgIGFycltqXSA9IHZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJldmVyc2VWYWx1ZXMoYXJyLCBzdGFydCwgZW5kKSB7XG4gIGZvciAobGV0IGkgPSBzdGFydCwgaiA9IGVuZCAtIDE7IGkgPCBqOyArK2ksIC0taikge1xuICAgIGNvbnN0IHRlbXAgPSBhcnJbaV07XG4gICAgYXJyW2ldID0gYXJyW2pdO1xuICAgIGFycltqXSA9IHRlbXA7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmlkaVRleHQoc3RyLCBpc0xUUiwgdmVydGljYWwgPSBmYWxzZSkge1xuICBsZXQgZGlyID0gXCJsdHJcIjtcblxuICBpZiAodmVydGljYWwpIHtcbiAgICBkaXIgPSBcInR0YlwiO1xuICB9IGVsc2UgaWYgKCFpc0xUUikge1xuICAgIGRpciA9IFwicnRsXCI7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0cixcbiAgICBkaXJcbiAgfTtcbn1cblxuY29uc3QgY2hhcnMgPSBbXTtcbmNvbnN0IHR5cGVzID0gW107XG5cbmZ1bmN0aW9uIGJpZGkoc3RyLCBzdGFydExldmVsID0gLTEsIHZlcnRpY2FsID0gZmFsc2UpIHtcbiAgbGV0IGlzTFRSID0gdHJ1ZTtcbiAgY29uc3Qgc3RyTGVuZ3RoID0gc3RyLmxlbmd0aDtcblxuICBpZiAoc3RyTGVuZ3RoID09PSAwIHx8IHZlcnRpY2FsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJpZGlUZXh0KHN0ciwgaXNMVFIsIHZlcnRpY2FsKTtcbiAgfVxuXG4gIGNoYXJzLmxlbmd0aCA9IHN0ckxlbmd0aDtcbiAgdHlwZXMubGVuZ3RoID0gc3RyTGVuZ3RoO1xuICBsZXQgbnVtQmlkaSA9IDA7XG4gIGxldCBpLCBpaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICBjaGFyc1tpXSA9IHN0ci5jaGFyQXQoaSk7XG4gICAgY29uc3QgY2hhckNvZGUgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICBsZXQgY2hhclR5cGUgPSBcIkxcIjtcblxuICAgIGlmIChjaGFyQ29kZSA8PSAweDAwZmYpIHtcbiAgICAgIGNoYXJUeXBlID0gYmFzZVR5cGVzW2NoYXJDb2RlXTtcbiAgICB9IGVsc2UgaWYgKDB4MDU5MCA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSAweDA1ZjQpIHtcbiAgICAgIGNoYXJUeXBlID0gXCJSXCI7XG4gICAgfSBlbHNlIGlmICgweDA2MDAgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gMHgwNmZmKSB7XG4gICAgICBjaGFyVHlwZSA9IGFyYWJpY1R5cGVzW2NoYXJDb2RlICYgMHhmZl07XG5cbiAgICAgIGlmICghY2hhclR5cGUpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiQmlkaTogaW52YWxpZCBVbmljb2RlIGNoYXJhY3RlciBcIiArIGNoYXJDb2RlLnRvU3RyaW5nKDE2KSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgweDA3MDAgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gMHgwOGFjKSB7XG4gICAgICBjaGFyVHlwZSA9IFwiQUxcIjtcbiAgICB9XG5cbiAgICBpZiAoY2hhclR5cGUgPT09IFwiUlwiIHx8IGNoYXJUeXBlID09PSBcIkFMXCIgfHwgY2hhclR5cGUgPT09IFwiQU5cIikge1xuICAgICAgbnVtQmlkaSsrO1xuICAgIH1cblxuICAgIHR5cGVzW2ldID0gY2hhclR5cGU7XG4gIH1cblxuICBpZiAobnVtQmlkaSA9PT0gMCkge1xuICAgIGlzTFRSID0gdHJ1ZTtcbiAgICByZXR1cm4gY3JlYXRlQmlkaVRleHQoc3RyLCBpc0xUUik7XG4gIH1cblxuICBpZiAoc3RhcnRMZXZlbCA9PT0gLTEpIHtcbiAgICBpZiAobnVtQmlkaSAvIHN0ckxlbmd0aCA8IDAuMyAmJiBzdHJMZW5ndGggPiA0KSB7XG4gICAgICBpc0xUUiA9IHRydWU7XG4gICAgICBzdGFydExldmVsID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgaXNMVFIgPSBmYWxzZTtcbiAgICAgIHN0YXJ0TGV2ZWwgPSAxO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGxldmVscyA9IFtdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBzdHJMZW5ndGg7ICsraSkge1xuICAgIGxldmVsc1tpXSA9IHN0YXJ0TGV2ZWw7XG4gIH1cblxuICBjb25zdCBlID0gaXNPZGQoc3RhcnRMZXZlbCkgPyBcIlJcIiA6IFwiTFwiO1xuICBjb25zdCBzb3IgPSBlO1xuICBjb25zdCBlb3IgPSBzb3I7XG4gIGxldCBsYXN0VHlwZSA9IHNvcjtcblxuICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAodHlwZXNbaV0gPT09IFwiTlNNXCIpIHtcbiAgICAgIHR5cGVzW2ldID0gbGFzdFR5cGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RUeXBlID0gdHlwZXNbaV07XG4gICAgfVxuICB9XG5cbiAgbGFzdFR5cGUgPSBzb3I7XG4gIGxldCB0O1xuXG4gIGZvciAoaSA9IDA7IGkgPCBzdHJMZW5ndGg7ICsraSkge1xuICAgIHQgPSB0eXBlc1tpXTtcblxuICAgIGlmICh0ID09PSBcIkVOXCIpIHtcbiAgICAgIHR5cGVzW2ldID0gbGFzdFR5cGUgPT09IFwiQUxcIiA/IFwiQU5cIiA6IFwiRU5cIjtcbiAgICB9IGVsc2UgaWYgKHQgPT09IFwiUlwiIHx8IHQgPT09IFwiTFwiIHx8IHQgPT09IFwiQUxcIikge1xuICAgICAgbGFzdFR5cGUgPSB0O1xuICAgIH1cbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCBzdHJMZW5ndGg7ICsraSkge1xuICAgIHQgPSB0eXBlc1tpXTtcblxuICAgIGlmICh0ID09PSBcIkFMXCIpIHtcbiAgICAgIHR5cGVzW2ldID0gXCJSXCI7XG4gICAgfVxuICB9XG5cbiAgZm9yIChpID0gMTsgaSA8IHN0ckxlbmd0aCAtIDE7ICsraSkge1xuICAgIGlmICh0eXBlc1tpXSA9PT0gXCJFU1wiICYmIHR5cGVzW2kgLSAxXSA9PT0gXCJFTlwiICYmIHR5cGVzW2kgKyAxXSA9PT0gXCJFTlwiKSB7XG4gICAgICB0eXBlc1tpXSA9IFwiRU5cIjtcbiAgICB9XG5cbiAgICBpZiAodHlwZXNbaV0gPT09IFwiQ1NcIiAmJiAodHlwZXNbaSAtIDFdID09PSBcIkVOXCIgfHwgdHlwZXNbaSAtIDFdID09PSBcIkFOXCIpICYmIHR5cGVzW2kgKyAxXSA9PT0gdHlwZXNbaSAtIDFdKSB7XG4gICAgICB0eXBlc1tpXSA9IHR5cGVzW2kgLSAxXTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAodHlwZXNbaV0gPT09IFwiRU5cIikge1xuICAgICAgZm9yIChsZXQgaiA9IGkgLSAxOyBqID49IDA7IC0taikge1xuICAgICAgICBpZiAodHlwZXNbal0gIT09IFwiRVRcIikge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdHlwZXNbal0gPSBcIkVOXCI7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHN0ckxlbmd0aDsgKytqKSB7XG4gICAgICAgIGlmICh0eXBlc1tqXSAhPT0gXCJFVFwiKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0eXBlc1tqXSA9IFwiRU5cIjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICB0ID0gdHlwZXNbaV07XG5cbiAgICBpZiAodCA9PT0gXCJXU1wiIHx8IHQgPT09IFwiRVNcIiB8fCB0ID09PSBcIkVUXCIgfHwgdCA9PT0gXCJDU1wiKSB7XG4gICAgICB0eXBlc1tpXSA9IFwiT05cIjtcbiAgICB9XG4gIH1cblxuICBsYXN0VHlwZSA9IHNvcjtcblxuICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICB0ID0gdHlwZXNbaV07XG5cbiAgICBpZiAodCA9PT0gXCJFTlwiKSB7XG4gICAgICB0eXBlc1tpXSA9IGxhc3RUeXBlID09PSBcIkxcIiA/IFwiTFwiIDogXCJFTlwiO1xuICAgIH0gZWxzZSBpZiAodCA9PT0gXCJSXCIgfHwgdCA9PT0gXCJMXCIpIHtcbiAgICAgIGxhc3RUeXBlID0gdDtcbiAgICB9XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAodHlwZXNbaV0gPT09IFwiT05cIikge1xuICAgICAgY29uc3QgZW5kID0gZmluZFVuZXF1YWwodHlwZXMsIGkgKyAxLCBcIk9OXCIpO1xuICAgICAgbGV0IGJlZm9yZSA9IHNvcjtcblxuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIGJlZm9yZSA9IHR5cGVzW2kgLSAxXTtcbiAgICAgIH1cblxuICAgICAgbGV0IGFmdGVyID0gZW9yO1xuXG4gICAgICBpZiAoZW5kICsgMSA8IHN0ckxlbmd0aCkge1xuICAgICAgICBhZnRlciA9IHR5cGVzW2VuZCArIDFdO1xuICAgICAgfVxuXG4gICAgICBpZiAoYmVmb3JlICE9PSBcIkxcIikge1xuICAgICAgICBiZWZvcmUgPSBcIlJcIjtcbiAgICAgIH1cblxuICAgICAgaWYgKGFmdGVyICE9PSBcIkxcIikge1xuICAgICAgICBhZnRlciA9IFwiUlwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoYmVmb3JlID09PSBhZnRlcikge1xuICAgICAgICBzZXRWYWx1ZXModHlwZXMsIGksIGVuZCwgYmVmb3JlKTtcbiAgICAgIH1cblxuICAgICAgaSA9IGVuZCAtIDE7XG4gICAgfVxuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IHN0ckxlbmd0aDsgKytpKSB7XG4gICAgaWYgKHR5cGVzW2ldID09PSBcIk9OXCIpIHtcbiAgICAgIHR5cGVzW2ldID0gZTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICB0ID0gdHlwZXNbaV07XG5cbiAgICBpZiAoaXNFdmVuKGxldmVsc1tpXSkpIHtcbiAgICAgIGlmICh0ID09PSBcIlJcIikge1xuICAgICAgICBsZXZlbHNbaV0gKz0gMTtcbiAgICAgIH0gZWxzZSBpZiAodCA9PT0gXCJBTlwiIHx8IHQgPT09IFwiRU5cIikge1xuICAgICAgICBsZXZlbHNbaV0gKz0gMjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHQgPT09IFwiTFwiIHx8IHQgPT09IFwiQU5cIiB8fCB0ID09PSBcIkVOXCIpIHtcbiAgICAgICAgbGV2ZWxzW2ldICs9IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IGhpZ2hlc3RMZXZlbCA9IC0xO1xuICBsZXQgbG93ZXN0T2RkTGV2ZWwgPSA5OTtcbiAgbGV0IGxldmVsO1xuXG4gIGZvciAoaSA9IDAsIGlpID0gbGV2ZWxzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICBsZXZlbCA9IGxldmVsc1tpXTtcblxuICAgIGlmIChoaWdoZXN0TGV2ZWwgPCBsZXZlbCkge1xuICAgICAgaGlnaGVzdExldmVsID0gbGV2ZWw7XG4gICAgfVxuXG4gICAgaWYgKGxvd2VzdE9kZExldmVsID4gbGV2ZWwgJiYgaXNPZGQobGV2ZWwpKSB7XG4gICAgICBsb3dlc3RPZGRMZXZlbCA9IGxldmVsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAobGV2ZWwgPSBoaWdoZXN0TGV2ZWw7IGxldmVsID49IGxvd2VzdE9kZExldmVsOyAtLWxldmVsKSB7XG4gICAgbGV0IHN0YXJ0ID0gLTE7XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IGxldmVscy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICBpZiAobGV2ZWxzW2ldIDwgbGV2ZWwpIHtcbiAgICAgICAgaWYgKHN0YXJ0ID49IDApIHtcbiAgICAgICAgICByZXZlcnNlVmFsdWVzKGNoYXJzLCBzdGFydCwgaSk7XG4gICAgICAgICAgc3RhcnQgPSAtMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgc3RhcnQgPSBpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICByZXZlcnNlVmFsdWVzKGNoYXJzLCBzdGFydCwgbGV2ZWxzLmxlbmd0aCk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChpID0gMCwgaWkgPSBjaGFycy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgY29uc3QgY2ggPSBjaGFyc1tpXTtcblxuICAgIGlmIChjaCA9PT0gXCI8XCIgfHwgY2ggPT09IFwiPlwiKSB7XG4gICAgICBjaGFyc1tpXSA9IFwiXCI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUJpZGlUZXh0KGNoYXJzLmpvaW4oXCJcIiksIGlzTFRSKTtcbn1cblxuLyoqKi8gfSksXG4vKiA2MCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5nZXRNZXRyaWNzID0gdm9pZCAwO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG5jb25zdCBnZXRNZXRyaWNzID0gKDAsIF9jb3JlX3V0aWxzLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgdC5Db3VyaWVyID0gNjAwO1xuICB0W1wiQ291cmllci1Cb2xkXCJdID0gNjAwO1xuICB0W1wiQ291cmllci1Cb2xkT2JsaXF1ZVwiXSA9IDYwMDtcbiAgdFtcIkNvdXJpZXItT2JsaXF1ZVwiXSA9IDYwMDtcbiAgdC5IZWx2ZXRpY2EgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgIHQuc3BhY2UgPSAyNzg7XG4gICAgdC5leGNsYW0gPSAyNzg7XG4gICAgdC5xdW90ZWRibCA9IDM1NTtcbiAgICB0Lm51bWJlcnNpZ24gPSA1NTY7XG4gICAgdC5kb2xsYXIgPSA1NTY7XG4gICAgdC5wZXJjZW50ID0gODg5O1xuICAgIHQuYW1wZXJzYW5kID0gNjY3O1xuICAgIHQucXVvdGVyaWdodCA9IDIyMjtcbiAgICB0LnBhcmVubGVmdCA9IDMzMztcbiAgICB0LnBhcmVucmlnaHQgPSAzMzM7XG4gICAgdC5hc3RlcmlzayA9IDM4OTtcbiAgICB0LnBsdXMgPSA1ODQ7XG4gICAgdC5jb21tYSA9IDI3ODtcbiAgICB0Lmh5cGhlbiA9IDMzMztcbiAgICB0LnBlcmlvZCA9IDI3ODtcbiAgICB0LnNsYXNoID0gMjc4O1xuICAgIHQuemVybyA9IDU1NjtcbiAgICB0Lm9uZSA9IDU1NjtcbiAgICB0LnR3byA9IDU1NjtcbiAgICB0LnRocmVlID0gNTU2O1xuICAgIHQuZm91ciA9IDU1NjtcbiAgICB0LmZpdmUgPSA1NTY7XG4gICAgdC5zaXggPSA1NTY7XG4gICAgdC5zZXZlbiA9IDU1NjtcbiAgICB0LmVpZ2h0ID0gNTU2O1xuICAgIHQubmluZSA9IDU1NjtcbiAgICB0LmNvbG9uID0gMjc4O1xuICAgIHQuc2VtaWNvbG9uID0gMjc4O1xuICAgIHQubGVzcyA9IDU4NDtcbiAgICB0LmVxdWFsID0gNTg0O1xuICAgIHQuZ3JlYXRlciA9IDU4NDtcbiAgICB0LnF1ZXN0aW9uID0gNTU2O1xuICAgIHQuYXQgPSAxMDE1O1xuICAgIHQuQSA9IDY2NztcbiAgICB0LkIgPSA2Njc7XG4gICAgdC5DID0gNzIyO1xuICAgIHQuRCA9IDcyMjtcbiAgICB0LkUgPSA2Njc7XG4gICAgdC5GID0gNjExO1xuICAgIHQuRyA9IDc3ODtcbiAgICB0LkggPSA3MjI7XG4gICAgdC5JID0gMjc4O1xuICAgIHQuSiA9IDUwMDtcbiAgICB0LksgPSA2Njc7XG4gICAgdC5MID0gNTU2O1xuICAgIHQuTSA9IDgzMztcbiAgICB0Lk4gPSA3MjI7XG4gICAgdC5PID0gNzc4O1xuICAgIHQuUCA9IDY2NztcbiAgICB0LlEgPSA3Nzg7XG4gICAgdC5SID0gNzIyO1xuICAgIHQuUyA9IDY2NztcbiAgICB0LlQgPSA2MTE7XG4gICAgdC5VID0gNzIyO1xuICAgIHQuViA9IDY2NztcbiAgICB0LlcgPSA5NDQ7XG4gICAgdC5YID0gNjY3O1xuICAgIHQuWSA9IDY2NztcbiAgICB0LlogPSA2MTE7XG4gICAgdC5icmFja2V0bGVmdCA9IDI3ODtcbiAgICB0LmJhY2tzbGFzaCA9IDI3ODtcbiAgICB0LmJyYWNrZXRyaWdodCA9IDI3ODtcbiAgICB0LmFzY2lpY2lyY3VtID0gNDY5O1xuICAgIHQudW5kZXJzY29yZSA9IDU1NjtcbiAgICB0LnF1b3RlbGVmdCA9IDIyMjtcbiAgICB0LmEgPSA1NTY7XG4gICAgdC5iID0gNTU2O1xuICAgIHQuYyA9IDUwMDtcbiAgICB0LmQgPSA1NTY7XG4gICAgdC5lID0gNTU2O1xuICAgIHQuZiA9IDI3ODtcbiAgICB0LmcgPSA1NTY7XG4gICAgdC5oID0gNTU2O1xuICAgIHQuaSA9IDIyMjtcbiAgICB0LmogPSAyMjI7XG4gICAgdC5rID0gNTAwO1xuICAgIHQubCA9IDIyMjtcbiAgICB0Lm0gPSA4MzM7XG4gICAgdC5uID0gNTU2O1xuICAgIHQubyA9IDU1NjtcbiAgICB0LnAgPSA1NTY7XG4gICAgdC5xID0gNTU2O1xuICAgIHQuciA9IDMzMztcbiAgICB0LnMgPSA1MDA7XG4gICAgdC50ID0gMjc4O1xuICAgIHQudSA9IDU1NjtcbiAgICB0LnYgPSA1MDA7XG4gICAgdC53ID0gNzIyO1xuICAgIHQueCA9IDUwMDtcbiAgICB0LnkgPSA1MDA7XG4gICAgdC56ID0gNTAwO1xuICAgIHQuYnJhY2VsZWZ0ID0gMzM0O1xuICAgIHQuYmFyID0gMjYwO1xuICAgIHQuYnJhY2VyaWdodCA9IDMzNDtcbiAgICB0LmFzY2lpdGlsZGUgPSA1ODQ7XG4gICAgdC5leGNsYW1kb3duID0gMzMzO1xuICAgIHQuY2VudCA9IDU1NjtcbiAgICB0LnN0ZXJsaW5nID0gNTU2O1xuICAgIHQuZnJhY3Rpb24gPSAxNjc7XG4gICAgdC55ZW4gPSA1NTY7XG4gICAgdC5mbG9yaW4gPSA1NTY7XG4gICAgdC5zZWN0aW9uID0gNTU2O1xuICAgIHQuY3VycmVuY3kgPSA1NTY7XG4gICAgdC5xdW90ZXNpbmdsZSA9IDE5MTtcbiAgICB0LnF1b3RlZGJsbGVmdCA9IDMzMztcbiAgICB0Lmd1aWxsZW1vdGxlZnQgPSA1NTY7XG4gICAgdC5ndWlsc2luZ2xsZWZ0ID0gMzMzO1xuICAgIHQuZ3VpbHNpbmdscmlnaHQgPSAzMzM7XG4gICAgdC5maSA9IDUwMDtcbiAgICB0LmZsID0gNTAwO1xuICAgIHQuZW5kYXNoID0gNTU2O1xuICAgIHQuZGFnZ2VyID0gNTU2O1xuICAgIHQuZGFnZ2VyZGJsID0gNTU2O1xuICAgIHQucGVyaW9kY2VudGVyZWQgPSAyNzg7XG4gICAgdC5wYXJhZ3JhcGggPSA1Mzc7XG4gICAgdC5idWxsZXQgPSAzNTA7XG4gICAgdC5xdW90ZXNpbmdsYmFzZSA9IDIyMjtcbiAgICB0LnF1b3RlZGJsYmFzZSA9IDMzMztcbiAgICB0LnF1b3RlZGJscmlnaHQgPSAzMzM7XG4gICAgdC5ndWlsbGVtb3RyaWdodCA9IDU1NjtcbiAgICB0LmVsbGlwc2lzID0gMTAwMDtcbiAgICB0LnBlcnRob3VzYW5kID0gMTAwMDtcbiAgICB0LnF1ZXN0aW9uZG93biA9IDYxMTtcbiAgICB0LmdyYXZlID0gMzMzO1xuICAgIHQuYWN1dGUgPSAzMzM7XG4gICAgdC5jaXJjdW1mbGV4ID0gMzMzO1xuICAgIHQudGlsZGUgPSAzMzM7XG4gICAgdC5tYWNyb24gPSAzMzM7XG4gICAgdC5icmV2ZSA9IDMzMztcbiAgICB0LmRvdGFjY2VudCA9IDMzMztcbiAgICB0LmRpZXJlc2lzID0gMzMzO1xuICAgIHQucmluZyA9IDMzMztcbiAgICB0LmNlZGlsbGEgPSAzMzM7XG4gICAgdC5odW5nYXJ1bWxhdXQgPSAzMzM7XG4gICAgdC5vZ29uZWsgPSAzMzM7XG4gICAgdC5jYXJvbiA9IDMzMztcbiAgICB0LmVtZGFzaCA9IDEwMDA7XG4gICAgdC5BRSA9IDEwMDA7XG4gICAgdC5vcmRmZW1pbmluZSA9IDM3MDtcbiAgICB0LkxzbGFzaCA9IDU1NjtcbiAgICB0Lk9zbGFzaCA9IDc3ODtcbiAgICB0Lk9FID0gMTAwMDtcbiAgICB0Lm9yZG1hc2N1bGluZSA9IDM2NTtcbiAgICB0LmFlID0gODg5O1xuICAgIHQuZG90bGVzc2kgPSAyNzg7XG4gICAgdC5sc2xhc2ggPSAyMjI7XG4gICAgdC5vc2xhc2ggPSA2MTE7XG4gICAgdC5vZSA9IDk0NDtcbiAgICB0Lmdlcm1hbmRibHMgPSA2MTE7XG4gICAgdC5JZGllcmVzaXMgPSAyNzg7XG4gICAgdC5lYWN1dGUgPSA1NTY7XG4gICAgdC5hYnJldmUgPSA1NTY7XG4gICAgdC51aHVuZ2FydW1sYXV0ID0gNTU2O1xuICAgIHQuZWNhcm9uID0gNTU2O1xuICAgIHQuWWRpZXJlc2lzID0gNjY3O1xuICAgIHQuZGl2aWRlID0gNTg0O1xuICAgIHQuWWFjdXRlID0gNjY3O1xuICAgIHQuQWNpcmN1bWZsZXggPSA2Njc7XG4gICAgdC5hYWN1dGUgPSA1NTY7XG4gICAgdC5VY2lyY3VtZmxleCA9IDcyMjtcbiAgICB0LnlhY3V0ZSA9IDUwMDtcbiAgICB0LnNjb21tYWFjY2VudCA9IDUwMDtcbiAgICB0LmVjaXJjdW1mbGV4ID0gNTU2O1xuICAgIHQuVXJpbmcgPSA3MjI7XG4gICAgdC5VZGllcmVzaXMgPSA3MjI7XG4gICAgdC5hb2dvbmVrID0gNTU2O1xuICAgIHQuVWFjdXRlID0gNzIyO1xuICAgIHQudW9nb25layA9IDU1NjtcbiAgICB0LkVkaWVyZXNpcyA9IDY2NztcbiAgICB0LkRjcm9hdCA9IDcyMjtcbiAgICB0LmNvbW1hYWNjZW50ID0gMjUwO1xuICAgIHQuY29weXJpZ2h0ID0gNzM3O1xuICAgIHQuRW1hY3JvbiA9IDY2NztcbiAgICB0LmNjYXJvbiA9IDUwMDtcbiAgICB0LmFyaW5nID0gNTU2O1xuICAgIHQuTmNvbW1hYWNjZW50ID0gNzIyO1xuICAgIHQubGFjdXRlID0gMjIyO1xuICAgIHQuYWdyYXZlID0gNTU2O1xuICAgIHQuVGNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuQ2FjdXRlID0gNzIyO1xuICAgIHQuYXRpbGRlID0gNTU2O1xuICAgIHQuRWRvdGFjY2VudCA9IDY2NztcbiAgICB0LnNjYXJvbiA9IDUwMDtcbiAgICB0LnNjZWRpbGxhID0gNTAwO1xuICAgIHQuaWFjdXRlID0gMjc4O1xuICAgIHQubG96ZW5nZSA9IDQ3MTtcbiAgICB0LlJjYXJvbiA9IDcyMjtcbiAgICB0Lkdjb21tYWFjY2VudCA9IDc3ODtcbiAgICB0LnVjaXJjdW1mbGV4ID0gNTU2O1xuICAgIHQuYWNpcmN1bWZsZXggPSA1NTY7XG4gICAgdC5BbWFjcm9uID0gNjY3O1xuICAgIHQucmNhcm9uID0gMzMzO1xuICAgIHQuY2NlZGlsbGEgPSA1MDA7XG4gICAgdC5aZG90YWNjZW50ID0gNjExO1xuICAgIHQuVGhvcm4gPSA2Njc7XG4gICAgdC5PbWFjcm9uID0gNzc4O1xuICAgIHQuUmFjdXRlID0gNzIyO1xuICAgIHQuU2FjdXRlID0gNjY3O1xuICAgIHQuZGNhcm9uID0gNjQzO1xuICAgIHQuVW1hY3JvbiA9IDcyMjtcbiAgICB0LnVyaW5nID0gNTU2O1xuICAgIHQudGhyZWVzdXBlcmlvciA9IDMzMztcbiAgICB0Lk9ncmF2ZSA9IDc3ODtcbiAgICB0LkFncmF2ZSA9IDY2NztcbiAgICB0LkFicmV2ZSA9IDY2NztcbiAgICB0Lm11bHRpcGx5ID0gNTg0O1xuICAgIHQudWFjdXRlID0gNTU2O1xuICAgIHQuVGNhcm9uID0gNjExO1xuICAgIHQucGFydGlhbGRpZmYgPSA0NzY7XG4gICAgdC55ZGllcmVzaXMgPSA1MDA7XG4gICAgdC5OYWN1dGUgPSA3MjI7XG4gICAgdC5pY2lyY3VtZmxleCA9IDI3ODtcbiAgICB0LkVjaXJjdW1mbGV4ID0gNjY3O1xuICAgIHQuYWRpZXJlc2lzID0gNTU2O1xuICAgIHQuZWRpZXJlc2lzID0gNTU2O1xuICAgIHQuY2FjdXRlID0gNTAwO1xuICAgIHQubmFjdXRlID0gNTU2O1xuICAgIHQudW1hY3JvbiA9IDU1NjtcbiAgICB0Lk5jYXJvbiA9IDcyMjtcbiAgICB0LklhY3V0ZSA9IDI3ODtcbiAgICB0LnBsdXNtaW51cyA9IDU4NDtcbiAgICB0LmJyb2tlbmJhciA9IDI2MDtcbiAgICB0LnJlZ2lzdGVyZWQgPSA3Mzc7XG4gICAgdC5HYnJldmUgPSA3Nzg7XG4gICAgdC5JZG90YWNjZW50ID0gMjc4O1xuICAgIHQuc3VtbWF0aW9uID0gNjAwO1xuICAgIHQuRWdyYXZlID0gNjY3O1xuICAgIHQucmFjdXRlID0gMzMzO1xuICAgIHQub21hY3JvbiA9IDU1NjtcbiAgICB0LlphY3V0ZSA9IDYxMTtcbiAgICB0LlpjYXJvbiA9IDYxMTtcbiAgICB0LmdyZWF0ZXJlcXVhbCA9IDU0OTtcbiAgICB0LkV0aCA9IDcyMjtcbiAgICB0LkNjZWRpbGxhID0gNzIyO1xuICAgIHQubGNvbW1hYWNjZW50ID0gMjIyO1xuICAgIHQudGNhcm9uID0gMzE3O1xuICAgIHQuZW9nb25layA9IDU1NjtcbiAgICB0LlVvZ29uZWsgPSA3MjI7XG4gICAgdC5BYWN1dGUgPSA2Njc7XG4gICAgdC5BZGllcmVzaXMgPSA2Njc7XG4gICAgdC5lZ3JhdmUgPSA1NTY7XG4gICAgdC56YWN1dGUgPSA1MDA7XG4gICAgdC5pb2dvbmVrID0gMjIyO1xuICAgIHQuT2FjdXRlID0gNzc4O1xuICAgIHQub2FjdXRlID0gNTU2O1xuICAgIHQuYW1hY3JvbiA9IDU1NjtcbiAgICB0LnNhY3V0ZSA9IDUwMDtcbiAgICB0LmlkaWVyZXNpcyA9IDI3ODtcbiAgICB0Lk9jaXJjdW1mbGV4ID0gNzc4O1xuICAgIHQuVWdyYXZlID0gNzIyO1xuICAgIHQuRGVsdGEgPSA2MTI7XG4gICAgdC50aG9ybiA9IDU1NjtcbiAgICB0LnR3b3N1cGVyaW9yID0gMzMzO1xuICAgIHQuT2RpZXJlc2lzID0gNzc4O1xuICAgIHQubXUgPSA1NTY7XG4gICAgdC5pZ3JhdmUgPSAyNzg7XG4gICAgdC5vaHVuZ2FydW1sYXV0ID0gNTU2O1xuICAgIHQuRW9nb25layA9IDY2NztcbiAgICB0LmRjcm9hdCA9IDU1NjtcbiAgICB0LnRocmVlcXVhcnRlcnMgPSA4MzQ7XG4gICAgdC5TY2VkaWxsYSA9IDY2NztcbiAgICB0LmxjYXJvbiA9IDI5OTtcbiAgICB0Lktjb21tYWFjY2VudCA9IDY2NztcbiAgICB0LkxhY3V0ZSA9IDU1NjtcbiAgICB0LnRyYWRlbWFyayA9IDEwMDA7XG4gICAgdC5lZG90YWNjZW50ID0gNTU2O1xuICAgIHQuSWdyYXZlID0gMjc4O1xuICAgIHQuSW1hY3JvbiA9IDI3ODtcbiAgICB0LkxjYXJvbiA9IDU1NjtcbiAgICB0Lm9uZWhhbGYgPSA4MzQ7XG4gICAgdC5sZXNzZXF1YWwgPSA1NDk7XG4gICAgdC5vY2lyY3VtZmxleCA9IDU1NjtcbiAgICB0Lm50aWxkZSA9IDU1NjtcbiAgICB0LlVodW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5FYWN1dGUgPSA2Njc7XG4gICAgdC5lbWFjcm9uID0gNTU2O1xuICAgIHQuZ2JyZXZlID0gNTU2O1xuICAgIHQub25lcXVhcnRlciA9IDgzNDtcbiAgICB0LlNjYXJvbiA9IDY2NztcbiAgICB0LlNjb21tYWFjY2VudCA9IDY2NztcbiAgICB0Lk9odW5nYXJ1bWxhdXQgPSA3Nzg7XG4gICAgdC5kZWdyZWUgPSA0MDA7XG4gICAgdC5vZ3JhdmUgPSA1NTY7XG4gICAgdC5DY2Fyb24gPSA3MjI7XG4gICAgdC51Z3JhdmUgPSA1NTY7XG4gICAgdC5yYWRpY2FsID0gNDUzO1xuICAgIHQuRGNhcm9uID0gNzIyO1xuICAgIHQucmNvbW1hYWNjZW50ID0gMzMzO1xuICAgIHQuTnRpbGRlID0gNzIyO1xuICAgIHQub3RpbGRlID0gNTU2O1xuICAgIHQuUmNvbW1hYWNjZW50ID0gNzIyO1xuICAgIHQuTGNvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQuQXRpbGRlID0gNjY3O1xuICAgIHQuQW9nb25layA9IDY2NztcbiAgICB0LkFyaW5nID0gNjY3O1xuICAgIHQuT3RpbGRlID0gNzc4O1xuICAgIHQuemRvdGFjY2VudCA9IDUwMDtcbiAgICB0LkVjYXJvbiA9IDY2NztcbiAgICB0LklvZ29uZWsgPSAyNzg7XG4gICAgdC5rY29tbWFhY2NlbnQgPSA1MDA7XG4gICAgdC5taW51cyA9IDU4NDtcbiAgICB0LkljaXJjdW1mbGV4ID0gMjc4O1xuICAgIHQubmNhcm9uID0gNTU2O1xuICAgIHQudGNvbW1hYWNjZW50ID0gMjc4O1xuICAgIHQubG9naWNhbG5vdCA9IDU4NDtcbiAgICB0Lm9kaWVyZXNpcyA9IDU1NjtcbiAgICB0LnVkaWVyZXNpcyA9IDU1NjtcbiAgICB0Lm5vdGVxdWFsID0gNTQ5O1xuICAgIHQuZ2NvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQuZXRoID0gNTU2O1xuICAgIHQuemNhcm9uID0gNTAwO1xuICAgIHQubmNvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQub25lc3VwZXJpb3IgPSAzMzM7XG4gICAgdC5pbWFjcm9uID0gMjc4O1xuICAgIHQuRXVybyA9IDU1NjtcbiAgfSk7XG4gIHRbXCJIZWx2ZXRpY2EtQm9sZFwiXSA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gICAgdC5zcGFjZSA9IDI3ODtcbiAgICB0LmV4Y2xhbSA9IDMzMztcbiAgICB0LnF1b3RlZGJsID0gNDc0O1xuICAgIHQubnVtYmVyc2lnbiA9IDU1NjtcbiAgICB0LmRvbGxhciA9IDU1NjtcbiAgICB0LnBlcmNlbnQgPSA4ODk7XG4gICAgdC5hbXBlcnNhbmQgPSA3MjI7XG4gICAgdC5xdW90ZXJpZ2h0ID0gMjc4O1xuICAgIHQucGFyZW5sZWZ0ID0gMzMzO1xuICAgIHQucGFyZW5yaWdodCA9IDMzMztcbiAgICB0LmFzdGVyaXNrID0gMzg5O1xuICAgIHQucGx1cyA9IDU4NDtcbiAgICB0LmNvbW1hID0gMjc4O1xuICAgIHQuaHlwaGVuID0gMzMzO1xuICAgIHQucGVyaW9kID0gMjc4O1xuICAgIHQuc2xhc2ggPSAyNzg7XG4gICAgdC56ZXJvID0gNTU2O1xuICAgIHQub25lID0gNTU2O1xuICAgIHQudHdvID0gNTU2O1xuICAgIHQudGhyZWUgPSA1NTY7XG4gICAgdC5mb3VyID0gNTU2O1xuICAgIHQuZml2ZSA9IDU1NjtcbiAgICB0LnNpeCA9IDU1NjtcbiAgICB0LnNldmVuID0gNTU2O1xuICAgIHQuZWlnaHQgPSA1NTY7XG4gICAgdC5uaW5lID0gNTU2O1xuICAgIHQuY29sb24gPSAzMzM7XG4gICAgdC5zZW1pY29sb24gPSAzMzM7XG4gICAgdC5sZXNzID0gNTg0O1xuICAgIHQuZXF1YWwgPSA1ODQ7XG4gICAgdC5ncmVhdGVyID0gNTg0O1xuICAgIHQucXVlc3Rpb24gPSA2MTE7XG4gICAgdC5hdCA9IDk3NTtcbiAgICB0LkEgPSA3MjI7XG4gICAgdC5CID0gNzIyO1xuICAgIHQuQyA9IDcyMjtcbiAgICB0LkQgPSA3MjI7XG4gICAgdC5FID0gNjY3O1xuICAgIHQuRiA9IDYxMTtcbiAgICB0LkcgPSA3Nzg7XG4gICAgdC5IID0gNzIyO1xuICAgIHQuSSA9IDI3ODtcbiAgICB0LkogPSA1NTY7XG4gICAgdC5LID0gNzIyO1xuICAgIHQuTCA9IDYxMTtcbiAgICB0Lk0gPSA4MzM7XG4gICAgdC5OID0gNzIyO1xuICAgIHQuTyA9IDc3ODtcbiAgICB0LlAgPSA2Njc7XG4gICAgdC5RID0gNzc4O1xuICAgIHQuUiA9IDcyMjtcbiAgICB0LlMgPSA2Njc7XG4gICAgdC5UID0gNjExO1xuICAgIHQuVSA9IDcyMjtcbiAgICB0LlYgPSA2Njc7XG4gICAgdC5XID0gOTQ0O1xuICAgIHQuWCA9IDY2NztcbiAgICB0LlkgPSA2Njc7XG4gICAgdC5aID0gNjExO1xuICAgIHQuYnJhY2tldGxlZnQgPSAzMzM7XG4gICAgdC5iYWNrc2xhc2ggPSAyNzg7XG4gICAgdC5icmFja2V0cmlnaHQgPSAzMzM7XG4gICAgdC5hc2NpaWNpcmN1bSA9IDU4NDtcbiAgICB0LnVuZGVyc2NvcmUgPSA1NTY7XG4gICAgdC5xdW90ZWxlZnQgPSAyNzg7XG4gICAgdC5hID0gNTU2O1xuICAgIHQuYiA9IDYxMTtcbiAgICB0LmMgPSA1NTY7XG4gICAgdC5kID0gNjExO1xuICAgIHQuZSA9IDU1NjtcbiAgICB0LmYgPSAzMzM7XG4gICAgdC5nID0gNjExO1xuICAgIHQuaCA9IDYxMTtcbiAgICB0LmkgPSAyNzg7XG4gICAgdC5qID0gMjc4O1xuICAgIHQuayA9IDU1NjtcbiAgICB0LmwgPSAyNzg7XG4gICAgdC5tID0gODg5O1xuICAgIHQubiA9IDYxMTtcbiAgICB0Lm8gPSA2MTE7XG4gICAgdC5wID0gNjExO1xuICAgIHQucSA9IDYxMTtcbiAgICB0LnIgPSAzODk7XG4gICAgdC5zID0gNTU2O1xuICAgIHQudCA9IDMzMztcbiAgICB0LnUgPSA2MTE7XG4gICAgdC52ID0gNTU2O1xuICAgIHQudyA9IDc3ODtcbiAgICB0LnggPSA1NTY7XG4gICAgdC55ID0gNTU2O1xuICAgIHQueiA9IDUwMDtcbiAgICB0LmJyYWNlbGVmdCA9IDM4OTtcbiAgICB0LmJhciA9IDI4MDtcbiAgICB0LmJyYWNlcmlnaHQgPSAzODk7XG4gICAgdC5hc2NpaXRpbGRlID0gNTg0O1xuICAgIHQuZXhjbGFtZG93biA9IDMzMztcbiAgICB0LmNlbnQgPSA1NTY7XG4gICAgdC5zdGVybGluZyA9IDU1NjtcbiAgICB0LmZyYWN0aW9uID0gMTY3O1xuICAgIHQueWVuID0gNTU2O1xuICAgIHQuZmxvcmluID0gNTU2O1xuICAgIHQuc2VjdGlvbiA9IDU1NjtcbiAgICB0LmN1cnJlbmN5ID0gNTU2O1xuICAgIHQucXVvdGVzaW5nbGUgPSAyMzg7XG4gICAgdC5xdW90ZWRibGxlZnQgPSA1MDA7XG4gICAgdC5ndWlsbGVtb3RsZWZ0ID0gNTU2O1xuICAgIHQuZ3VpbHNpbmdsbGVmdCA9IDMzMztcbiAgICB0Lmd1aWxzaW5nbHJpZ2h0ID0gMzMzO1xuICAgIHQuZmkgPSA2MTE7XG4gICAgdC5mbCA9IDYxMTtcbiAgICB0LmVuZGFzaCA9IDU1NjtcbiAgICB0LmRhZ2dlciA9IDU1NjtcbiAgICB0LmRhZ2dlcmRibCA9IDU1NjtcbiAgICB0LnBlcmlvZGNlbnRlcmVkID0gMjc4O1xuICAgIHQucGFyYWdyYXBoID0gNTU2O1xuICAgIHQuYnVsbGV0ID0gMzUwO1xuICAgIHQucXVvdGVzaW5nbGJhc2UgPSAyNzg7XG4gICAgdC5xdW90ZWRibGJhc2UgPSA1MDA7XG4gICAgdC5xdW90ZWRibHJpZ2h0ID0gNTAwO1xuICAgIHQuZ3VpbGxlbW90cmlnaHQgPSA1NTY7XG4gICAgdC5lbGxpcHNpcyA9IDEwMDA7XG4gICAgdC5wZXJ0aG91c2FuZCA9IDEwMDA7XG4gICAgdC5xdWVzdGlvbmRvd24gPSA2MTE7XG4gICAgdC5ncmF2ZSA9IDMzMztcbiAgICB0LmFjdXRlID0gMzMzO1xuICAgIHQuY2lyY3VtZmxleCA9IDMzMztcbiAgICB0LnRpbGRlID0gMzMzO1xuICAgIHQubWFjcm9uID0gMzMzO1xuICAgIHQuYnJldmUgPSAzMzM7XG4gICAgdC5kb3RhY2NlbnQgPSAzMzM7XG4gICAgdC5kaWVyZXNpcyA9IDMzMztcbiAgICB0LnJpbmcgPSAzMzM7XG4gICAgdC5jZWRpbGxhID0gMzMzO1xuICAgIHQuaHVuZ2FydW1sYXV0ID0gMzMzO1xuICAgIHQub2dvbmVrID0gMzMzO1xuICAgIHQuY2Fyb24gPSAzMzM7XG4gICAgdC5lbWRhc2ggPSAxMDAwO1xuICAgIHQuQUUgPSAxMDAwO1xuICAgIHQub3JkZmVtaW5pbmUgPSAzNzA7XG4gICAgdC5Mc2xhc2ggPSA2MTE7XG4gICAgdC5Pc2xhc2ggPSA3Nzg7XG4gICAgdC5PRSA9IDEwMDA7XG4gICAgdC5vcmRtYXNjdWxpbmUgPSAzNjU7XG4gICAgdC5hZSA9IDg4OTtcbiAgICB0LmRvdGxlc3NpID0gMjc4O1xuICAgIHQubHNsYXNoID0gMjc4O1xuICAgIHQub3NsYXNoID0gNjExO1xuICAgIHQub2UgPSA5NDQ7XG4gICAgdC5nZXJtYW5kYmxzID0gNjExO1xuICAgIHQuSWRpZXJlc2lzID0gMjc4O1xuICAgIHQuZWFjdXRlID0gNTU2O1xuICAgIHQuYWJyZXZlID0gNTU2O1xuICAgIHQudWh1bmdhcnVtbGF1dCA9IDYxMTtcbiAgICB0LmVjYXJvbiA9IDU1NjtcbiAgICB0LllkaWVyZXNpcyA9IDY2NztcbiAgICB0LmRpdmlkZSA9IDU4NDtcbiAgICB0LllhY3V0ZSA9IDY2NztcbiAgICB0LkFjaXJjdW1mbGV4ID0gNzIyO1xuICAgIHQuYWFjdXRlID0gNTU2O1xuICAgIHQuVWNpcmN1bWZsZXggPSA3MjI7XG4gICAgdC55YWN1dGUgPSA1NTY7XG4gICAgdC5zY29tbWFhY2NlbnQgPSA1NTY7XG4gICAgdC5lY2lyY3VtZmxleCA9IDU1NjtcbiAgICB0LlVyaW5nID0gNzIyO1xuICAgIHQuVWRpZXJlc2lzID0gNzIyO1xuICAgIHQuYW9nb25layA9IDU1NjtcbiAgICB0LlVhY3V0ZSA9IDcyMjtcbiAgICB0LnVvZ29uZWsgPSA2MTE7XG4gICAgdC5FZGllcmVzaXMgPSA2Njc7XG4gICAgdC5EY3JvYXQgPSA3MjI7XG4gICAgdC5jb21tYWFjY2VudCA9IDI1MDtcbiAgICB0LmNvcHlyaWdodCA9IDczNztcbiAgICB0LkVtYWNyb24gPSA2Njc7XG4gICAgdC5jY2Fyb24gPSA1NTY7XG4gICAgdC5hcmluZyA9IDU1NjtcbiAgICB0Lk5jb21tYWFjY2VudCA9IDcyMjtcbiAgICB0LmxhY3V0ZSA9IDI3ODtcbiAgICB0LmFncmF2ZSA9IDU1NjtcbiAgICB0LlRjb21tYWFjY2VudCA9IDYxMTtcbiAgICB0LkNhY3V0ZSA9IDcyMjtcbiAgICB0LmF0aWxkZSA9IDU1NjtcbiAgICB0LkVkb3RhY2NlbnQgPSA2Njc7XG4gICAgdC5zY2Fyb24gPSA1NTY7XG4gICAgdC5zY2VkaWxsYSA9IDU1NjtcbiAgICB0LmlhY3V0ZSA9IDI3ODtcbiAgICB0LmxvemVuZ2UgPSA0OTQ7XG4gICAgdC5SY2Fyb24gPSA3MjI7XG4gICAgdC5HY29tbWFhY2NlbnQgPSA3Nzg7XG4gICAgdC51Y2lyY3VtZmxleCA9IDYxMTtcbiAgICB0LmFjaXJjdW1mbGV4ID0gNTU2O1xuICAgIHQuQW1hY3JvbiA9IDcyMjtcbiAgICB0LnJjYXJvbiA9IDM4OTtcbiAgICB0LmNjZWRpbGxhID0gNTU2O1xuICAgIHQuWmRvdGFjY2VudCA9IDYxMTtcbiAgICB0LlRob3JuID0gNjY3O1xuICAgIHQuT21hY3JvbiA9IDc3ODtcbiAgICB0LlJhY3V0ZSA9IDcyMjtcbiAgICB0LlNhY3V0ZSA9IDY2NztcbiAgICB0LmRjYXJvbiA9IDc0MztcbiAgICB0LlVtYWNyb24gPSA3MjI7XG4gICAgdC51cmluZyA9IDYxMTtcbiAgICB0LnRocmVlc3VwZXJpb3IgPSAzMzM7XG4gICAgdC5PZ3JhdmUgPSA3Nzg7XG4gICAgdC5BZ3JhdmUgPSA3MjI7XG4gICAgdC5BYnJldmUgPSA3MjI7XG4gICAgdC5tdWx0aXBseSA9IDU4NDtcbiAgICB0LnVhY3V0ZSA9IDYxMTtcbiAgICB0LlRjYXJvbiA9IDYxMTtcbiAgICB0LnBhcnRpYWxkaWZmID0gNDk0O1xuICAgIHQueWRpZXJlc2lzID0gNTU2O1xuICAgIHQuTmFjdXRlID0gNzIyO1xuICAgIHQuaWNpcmN1bWZsZXggPSAyNzg7XG4gICAgdC5FY2lyY3VtZmxleCA9IDY2NztcbiAgICB0LmFkaWVyZXNpcyA9IDU1NjtcbiAgICB0LmVkaWVyZXNpcyA9IDU1NjtcbiAgICB0LmNhY3V0ZSA9IDU1NjtcbiAgICB0Lm5hY3V0ZSA9IDYxMTtcbiAgICB0LnVtYWNyb24gPSA2MTE7XG4gICAgdC5OY2Fyb24gPSA3MjI7XG4gICAgdC5JYWN1dGUgPSAyNzg7XG4gICAgdC5wbHVzbWludXMgPSA1ODQ7XG4gICAgdC5icm9rZW5iYXIgPSAyODA7XG4gICAgdC5yZWdpc3RlcmVkID0gNzM3O1xuICAgIHQuR2JyZXZlID0gNzc4O1xuICAgIHQuSWRvdGFjY2VudCA9IDI3ODtcbiAgICB0LnN1bW1hdGlvbiA9IDYwMDtcbiAgICB0LkVncmF2ZSA9IDY2NztcbiAgICB0LnJhY3V0ZSA9IDM4OTtcbiAgICB0Lm9tYWNyb24gPSA2MTE7XG4gICAgdC5aYWN1dGUgPSA2MTE7XG4gICAgdC5aY2Fyb24gPSA2MTE7XG4gICAgdC5ncmVhdGVyZXF1YWwgPSA1NDk7XG4gICAgdC5FdGggPSA3MjI7XG4gICAgdC5DY2VkaWxsYSA9IDcyMjtcbiAgICB0Lmxjb21tYWFjY2VudCA9IDI3ODtcbiAgICB0LnRjYXJvbiA9IDM4OTtcbiAgICB0LmVvZ29uZWsgPSA1NTY7XG4gICAgdC5Vb2dvbmVrID0gNzIyO1xuICAgIHQuQWFjdXRlID0gNzIyO1xuICAgIHQuQWRpZXJlc2lzID0gNzIyO1xuICAgIHQuZWdyYXZlID0gNTU2O1xuICAgIHQuemFjdXRlID0gNTAwO1xuICAgIHQuaW9nb25layA9IDI3ODtcbiAgICB0Lk9hY3V0ZSA9IDc3ODtcbiAgICB0Lm9hY3V0ZSA9IDYxMTtcbiAgICB0LmFtYWNyb24gPSA1NTY7XG4gICAgdC5zYWN1dGUgPSA1NTY7XG4gICAgdC5pZGllcmVzaXMgPSAyNzg7XG4gICAgdC5PY2lyY3VtZmxleCA9IDc3ODtcbiAgICB0LlVncmF2ZSA9IDcyMjtcbiAgICB0LkRlbHRhID0gNjEyO1xuICAgIHQudGhvcm4gPSA2MTE7XG4gICAgdC50d29zdXBlcmlvciA9IDMzMztcbiAgICB0Lk9kaWVyZXNpcyA9IDc3ODtcbiAgICB0Lm11ID0gNjExO1xuICAgIHQuaWdyYXZlID0gMjc4O1xuICAgIHQub2h1bmdhcnVtbGF1dCA9IDYxMTtcbiAgICB0LkVvZ29uZWsgPSA2Njc7XG4gICAgdC5kY3JvYXQgPSA2MTE7XG4gICAgdC50aHJlZXF1YXJ0ZXJzID0gODM0O1xuICAgIHQuU2NlZGlsbGEgPSA2Njc7XG4gICAgdC5sY2Fyb24gPSA0MDA7XG4gICAgdC5LY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC5MYWN1dGUgPSA2MTE7XG4gICAgdC50cmFkZW1hcmsgPSAxMDAwO1xuICAgIHQuZWRvdGFjY2VudCA9IDU1NjtcbiAgICB0LklncmF2ZSA9IDI3ODtcbiAgICB0LkltYWNyb24gPSAyNzg7XG4gICAgdC5MY2Fyb24gPSA2MTE7XG4gICAgdC5vbmVoYWxmID0gODM0O1xuICAgIHQubGVzc2VxdWFsID0gNTQ5O1xuICAgIHQub2NpcmN1bWZsZXggPSA2MTE7XG4gICAgdC5udGlsZGUgPSA2MTE7XG4gICAgdC5VaHVuZ2FydW1sYXV0ID0gNzIyO1xuICAgIHQuRWFjdXRlID0gNjY3O1xuICAgIHQuZW1hY3JvbiA9IDU1NjtcbiAgICB0LmdicmV2ZSA9IDYxMTtcbiAgICB0Lm9uZXF1YXJ0ZXIgPSA4MzQ7XG4gICAgdC5TY2Fyb24gPSA2Njc7XG4gICAgdC5TY29tbWFhY2NlbnQgPSA2Njc7XG4gICAgdC5PaHVuZ2FydW1sYXV0ID0gNzc4O1xuICAgIHQuZGVncmVlID0gNDAwO1xuICAgIHQub2dyYXZlID0gNjExO1xuICAgIHQuQ2Nhcm9uID0gNzIyO1xuICAgIHQudWdyYXZlID0gNjExO1xuICAgIHQucmFkaWNhbCA9IDU0OTtcbiAgICB0LkRjYXJvbiA9IDcyMjtcbiAgICB0LnJjb21tYWFjY2VudCA9IDM4OTtcbiAgICB0Lk50aWxkZSA9IDcyMjtcbiAgICB0Lm90aWxkZSA9IDYxMTtcbiAgICB0LlJjb21tYWFjY2VudCA9IDcyMjtcbiAgICB0Lkxjb21tYWFjY2VudCA9IDYxMTtcbiAgICB0LkF0aWxkZSA9IDcyMjtcbiAgICB0LkFvZ29uZWsgPSA3MjI7XG4gICAgdC5BcmluZyA9IDcyMjtcbiAgICB0Lk90aWxkZSA9IDc3ODtcbiAgICB0Lnpkb3RhY2NlbnQgPSA1MDA7XG4gICAgdC5FY2Fyb24gPSA2Njc7XG4gICAgdC5Jb2dvbmVrID0gMjc4O1xuICAgIHQua2NvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQubWludXMgPSA1ODQ7XG4gICAgdC5JY2lyY3VtZmxleCA9IDI3ODtcbiAgICB0Lm5jYXJvbiA9IDYxMTtcbiAgICB0LnRjb21tYWFjY2VudCA9IDMzMztcbiAgICB0LmxvZ2ljYWxub3QgPSA1ODQ7XG4gICAgdC5vZGllcmVzaXMgPSA2MTE7XG4gICAgdC51ZGllcmVzaXMgPSA2MTE7XG4gICAgdC5ub3RlcXVhbCA9IDU0OTtcbiAgICB0Lmdjb21tYWFjY2VudCA9IDYxMTtcbiAgICB0LmV0aCA9IDYxMTtcbiAgICB0LnpjYXJvbiA9IDUwMDtcbiAgICB0Lm5jb21tYWFjY2VudCA9IDYxMTtcbiAgICB0Lm9uZXN1cGVyaW9yID0gMzMzO1xuICAgIHQuaW1hY3JvbiA9IDI3ODtcbiAgICB0LkV1cm8gPSA1NTY7XG4gIH0pO1xuICB0W1wiSGVsdmV0aWNhLUJvbGRPYmxpcXVlXCJdID0gKDAsIF9jb3JlX3V0aWxzLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICB0LnNwYWNlID0gMjc4O1xuICAgIHQuZXhjbGFtID0gMzMzO1xuICAgIHQucXVvdGVkYmwgPSA0NzQ7XG4gICAgdC5udW1iZXJzaWduID0gNTU2O1xuICAgIHQuZG9sbGFyID0gNTU2O1xuICAgIHQucGVyY2VudCA9IDg4OTtcbiAgICB0LmFtcGVyc2FuZCA9IDcyMjtcbiAgICB0LnF1b3RlcmlnaHQgPSAyNzg7XG4gICAgdC5wYXJlbmxlZnQgPSAzMzM7XG4gICAgdC5wYXJlbnJpZ2h0ID0gMzMzO1xuICAgIHQuYXN0ZXJpc2sgPSAzODk7XG4gICAgdC5wbHVzID0gNTg0O1xuICAgIHQuY29tbWEgPSAyNzg7XG4gICAgdC5oeXBoZW4gPSAzMzM7XG4gICAgdC5wZXJpb2QgPSAyNzg7XG4gICAgdC5zbGFzaCA9IDI3ODtcbiAgICB0Lnplcm8gPSA1NTY7XG4gICAgdC5vbmUgPSA1NTY7XG4gICAgdC50d28gPSA1NTY7XG4gICAgdC50aHJlZSA9IDU1NjtcbiAgICB0LmZvdXIgPSA1NTY7XG4gICAgdC5maXZlID0gNTU2O1xuICAgIHQuc2l4ID0gNTU2O1xuICAgIHQuc2V2ZW4gPSA1NTY7XG4gICAgdC5laWdodCA9IDU1NjtcbiAgICB0Lm5pbmUgPSA1NTY7XG4gICAgdC5jb2xvbiA9IDMzMztcbiAgICB0LnNlbWljb2xvbiA9IDMzMztcbiAgICB0Lmxlc3MgPSA1ODQ7XG4gICAgdC5lcXVhbCA9IDU4NDtcbiAgICB0LmdyZWF0ZXIgPSA1ODQ7XG4gICAgdC5xdWVzdGlvbiA9IDYxMTtcbiAgICB0LmF0ID0gOTc1O1xuICAgIHQuQSA9IDcyMjtcbiAgICB0LkIgPSA3MjI7XG4gICAgdC5DID0gNzIyO1xuICAgIHQuRCA9IDcyMjtcbiAgICB0LkUgPSA2Njc7XG4gICAgdC5GID0gNjExO1xuICAgIHQuRyA9IDc3ODtcbiAgICB0LkggPSA3MjI7XG4gICAgdC5JID0gMjc4O1xuICAgIHQuSiA9IDU1NjtcbiAgICB0LksgPSA3MjI7XG4gICAgdC5MID0gNjExO1xuICAgIHQuTSA9IDgzMztcbiAgICB0Lk4gPSA3MjI7XG4gICAgdC5PID0gNzc4O1xuICAgIHQuUCA9IDY2NztcbiAgICB0LlEgPSA3Nzg7XG4gICAgdC5SID0gNzIyO1xuICAgIHQuUyA9IDY2NztcbiAgICB0LlQgPSA2MTE7XG4gICAgdC5VID0gNzIyO1xuICAgIHQuViA9IDY2NztcbiAgICB0LlcgPSA5NDQ7XG4gICAgdC5YID0gNjY3O1xuICAgIHQuWSA9IDY2NztcbiAgICB0LlogPSA2MTE7XG4gICAgdC5icmFja2V0bGVmdCA9IDMzMztcbiAgICB0LmJhY2tzbGFzaCA9IDI3ODtcbiAgICB0LmJyYWNrZXRyaWdodCA9IDMzMztcbiAgICB0LmFzY2lpY2lyY3VtID0gNTg0O1xuICAgIHQudW5kZXJzY29yZSA9IDU1NjtcbiAgICB0LnF1b3RlbGVmdCA9IDI3ODtcbiAgICB0LmEgPSA1NTY7XG4gICAgdC5iID0gNjExO1xuICAgIHQuYyA9IDU1NjtcbiAgICB0LmQgPSA2MTE7XG4gICAgdC5lID0gNTU2O1xuICAgIHQuZiA9IDMzMztcbiAgICB0LmcgPSA2MTE7XG4gICAgdC5oID0gNjExO1xuICAgIHQuaSA9IDI3ODtcbiAgICB0LmogPSAyNzg7XG4gICAgdC5rID0gNTU2O1xuICAgIHQubCA9IDI3ODtcbiAgICB0Lm0gPSA4ODk7XG4gICAgdC5uID0gNjExO1xuICAgIHQubyA9IDYxMTtcbiAgICB0LnAgPSA2MTE7XG4gICAgdC5xID0gNjExO1xuICAgIHQuciA9IDM4OTtcbiAgICB0LnMgPSA1NTY7XG4gICAgdC50ID0gMzMzO1xuICAgIHQudSA9IDYxMTtcbiAgICB0LnYgPSA1NTY7XG4gICAgdC53ID0gNzc4O1xuICAgIHQueCA9IDU1NjtcbiAgICB0LnkgPSA1NTY7XG4gICAgdC56ID0gNTAwO1xuICAgIHQuYnJhY2VsZWZ0ID0gMzg5O1xuICAgIHQuYmFyID0gMjgwO1xuICAgIHQuYnJhY2VyaWdodCA9IDM4OTtcbiAgICB0LmFzY2lpdGlsZGUgPSA1ODQ7XG4gICAgdC5leGNsYW1kb3duID0gMzMzO1xuICAgIHQuY2VudCA9IDU1NjtcbiAgICB0LnN0ZXJsaW5nID0gNTU2O1xuICAgIHQuZnJhY3Rpb24gPSAxNjc7XG4gICAgdC55ZW4gPSA1NTY7XG4gICAgdC5mbG9yaW4gPSA1NTY7XG4gICAgdC5zZWN0aW9uID0gNTU2O1xuICAgIHQuY3VycmVuY3kgPSA1NTY7XG4gICAgdC5xdW90ZXNpbmdsZSA9IDIzODtcbiAgICB0LnF1b3RlZGJsbGVmdCA9IDUwMDtcbiAgICB0Lmd1aWxsZW1vdGxlZnQgPSA1NTY7XG4gICAgdC5ndWlsc2luZ2xsZWZ0ID0gMzMzO1xuICAgIHQuZ3VpbHNpbmdscmlnaHQgPSAzMzM7XG4gICAgdC5maSA9IDYxMTtcbiAgICB0LmZsID0gNjExO1xuICAgIHQuZW5kYXNoID0gNTU2O1xuICAgIHQuZGFnZ2VyID0gNTU2O1xuICAgIHQuZGFnZ2VyZGJsID0gNTU2O1xuICAgIHQucGVyaW9kY2VudGVyZWQgPSAyNzg7XG4gICAgdC5wYXJhZ3JhcGggPSA1NTY7XG4gICAgdC5idWxsZXQgPSAzNTA7XG4gICAgdC5xdW90ZXNpbmdsYmFzZSA9IDI3ODtcbiAgICB0LnF1b3RlZGJsYmFzZSA9IDUwMDtcbiAgICB0LnF1b3RlZGJscmlnaHQgPSA1MDA7XG4gICAgdC5ndWlsbGVtb3RyaWdodCA9IDU1NjtcbiAgICB0LmVsbGlwc2lzID0gMTAwMDtcbiAgICB0LnBlcnRob3VzYW5kID0gMTAwMDtcbiAgICB0LnF1ZXN0aW9uZG93biA9IDYxMTtcbiAgICB0LmdyYXZlID0gMzMzO1xuICAgIHQuYWN1dGUgPSAzMzM7XG4gICAgdC5jaXJjdW1mbGV4ID0gMzMzO1xuICAgIHQudGlsZGUgPSAzMzM7XG4gICAgdC5tYWNyb24gPSAzMzM7XG4gICAgdC5icmV2ZSA9IDMzMztcbiAgICB0LmRvdGFjY2VudCA9IDMzMztcbiAgICB0LmRpZXJlc2lzID0gMzMzO1xuICAgIHQucmluZyA9IDMzMztcbiAgICB0LmNlZGlsbGEgPSAzMzM7XG4gICAgdC5odW5nYXJ1bWxhdXQgPSAzMzM7XG4gICAgdC5vZ29uZWsgPSAzMzM7XG4gICAgdC5jYXJvbiA9IDMzMztcbiAgICB0LmVtZGFzaCA9IDEwMDA7XG4gICAgdC5BRSA9IDEwMDA7XG4gICAgdC5vcmRmZW1pbmluZSA9IDM3MDtcbiAgICB0LkxzbGFzaCA9IDYxMTtcbiAgICB0Lk9zbGFzaCA9IDc3ODtcbiAgICB0Lk9FID0gMTAwMDtcbiAgICB0Lm9yZG1hc2N1bGluZSA9IDM2NTtcbiAgICB0LmFlID0gODg5O1xuICAgIHQuZG90bGVzc2kgPSAyNzg7XG4gICAgdC5sc2xhc2ggPSAyNzg7XG4gICAgdC5vc2xhc2ggPSA2MTE7XG4gICAgdC5vZSA9IDk0NDtcbiAgICB0Lmdlcm1hbmRibHMgPSA2MTE7XG4gICAgdC5JZGllcmVzaXMgPSAyNzg7XG4gICAgdC5lYWN1dGUgPSA1NTY7XG4gICAgdC5hYnJldmUgPSA1NTY7XG4gICAgdC51aHVuZ2FydW1sYXV0ID0gNjExO1xuICAgIHQuZWNhcm9uID0gNTU2O1xuICAgIHQuWWRpZXJlc2lzID0gNjY3O1xuICAgIHQuZGl2aWRlID0gNTg0O1xuICAgIHQuWWFjdXRlID0gNjY3O1xuICAgIHQuQWNpcmN1bWZsZXggPSA3MjI7XG4gICAgdC5hYWN1dGUgPSA1NTY7XG4gICAgdC5VY2lyY3VtZmxleCA9IDcyMjtcbiAgICB0LnlhY3V0ZSA9IDU1NjtcbiAgICB0LnNjb21tYWFjY2VudCA9IDU1NjtcbiAgICB0LmVjaXJjdW1mbGV4ID0gNTU2O1xuICAgIHQuVXJpbmcgPSA3MjI7XG4gICAgdC5VZGllcmVzaXMgPSA3MjI7XG4gICAgdC5hb2dvbmVrID0gNTU2O1xuICAgIHQuVWFjdXRlID0gNzIyO1xuICAgIHQudW9nb25layA9IDYxMTtcbiAgICB0LkVkaWVyZXNpcyA9IDY2NztcbiAgICB0LkRjcm9hdCA9IDcyMjtcbiAgICB0LmNvbW1hYWNjZW50ID0gMjUwO1xuICAgIHQuY29weXJpZ2h0ID0gNzM3O1xuICAgIHQuRW1hY3JvbiA9IDY2NztcbiAgICB0LmNjYXJvbiA9IDU1NjtcbiAgICB0LmFyaW5nID0gNTU2O1xuICAgIHQuTmNvbW1hYWNjZW50ID0gNzIyO1xuICAgIHQubGFjdXRlID0gMjc4O1xuICAgIHQuYWdyYXZlID0gNTU2O1xuICAgIHQuVGNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuQ2FjdXRlID0gNzIyO1xuICAgIHQuYXRpbGRlID0gNTU2O1xuICAgIHQuRWRvdGFjY2VudCA9IDY2NztcbiAgICB0LnNjYXJvbiA9IDU1NjtcbiAgICB0LnNjZWRpbGxhID0gNTU2O1xuICAgIHQuaWFjdXRlID0gMjc4O1xuICAgIHQubG96ZW5nZSA9IDQ5NDtcbiAgICB0LlJjYXJvbiA9IDcyMjtcbiAgICB0Lkdjb21tYWFjY2VudCA9IDc3ODtcbiAgICB0LnVjaXJjdW1mbGV4ID0gNjExO1xuICAgIHQuYWNpcmN1bWZsZXggPSA1NTY7XG4gICAgdC5BbWFjcm9uID0gNzIyO1xuICAgIHQucmNhcm9uID0gMzg5O1xuICAgIHQuY2NlZGlsbGEgPSA1NTY7XG4gICAgdC5aZG90YWNjZW50ID0gNjExO1xuICAgIHQuVGhvcm4gPSA2Njc7XG4gICAgdC5PbWFjcm9uID0gNzc4O1xuICAgIHQuUmFjdXRlID0gNzIyO1xuICAgIHQuU2FjdXRlID0gNjY3O1xuICAgIHQuZGNhcm9uID0gNzQzO1xuICAgIHQuVW1hY3JvbiA9IDcyMjtcbiAgICB0LnVyaW5nID0gNjExO1xuICAgIHQudGhyZWVzdXBlcmlvciA9IDMzMztcbiAgICB0Lk9ncmF2ZSA9IDc3ODtcbiAgICB0LkFncmF2ZSA9IDcyMjtcbiAgICB0LkFicmV2ZSA9IDcyMjtcbiAgICB0Lm11bHRpcGx5ID0gNTg0O1xuICAgIHQudWFjdXRlID0gNjExO1xuICAgIHQuVGNhcm9uID0gNjExO1xuICAgIHQucGFydGlhbGRpZmYgPSA0OTQ7XG4gICAgdC55ZGllcmVzaXMgPSA1NTY7XG4gICAgdC5OYWN1dGUgPSA3MjI7XG4gICAgdC5pY2lyY3VtZmxleCA9IDI3ODtcbiAgICB0LkVjaXJjdW1mbGV4ID0gNjY3O1xuICAgIHQuYWRpZXJlc2lzID0gNTU2O1xuICAgIHQuZWRpZXJlc2lzID0gNTU2O1xuICAgIHQuY2FjdXRlID0gNTU2O1xuICAgIHQubmFjdXRlID0gNjExO1xuICAgIHQudW1hY3JvbiA9IDYxMTtcbiAgICB0Lk5jYXJvbiA9IDcyMjtcbiAgICB0LklhY3V0ZSA9IDI3ODtcbiAgICB0LnBsdXNtaW51cyA9IDU4NDtcbiAgICB0LmJyb2tlbmJhciA9IDI4MDtcbiAgICB0LnJlZ2lzdGVyZWQgPSA3Mzc7XG4gICAgdC5HYnJldmUgPSA3Nzg7XG4gICAgdC5JZG90YWNjZW50ID0gMjc4O1xuICAgIHQuc3VtbWF0aW9uID0gNjAwO1xuICAgIHQuRWdyYXZlID0gNjY3O1xuICAgIHQucmFjdXRlID0gMzg5O1xuICAgIHQub21hY3JvbiA9IDYxMTtcbiAgICB0LlphY3V0ZSA9IDYxMTtcbiAgICB0LlpjYXJvbiA9IDYxMTtcbiAgICB0LmdyZWF0ZXJlcXVhbCA9IDU0OTtcbiAgICB0LkV0aCA9IDcyMjtcbiAgICB0LkNjZWRpbGxhID0gNzIyO1xuICAgIHQubGNvbW1hYWNjZW50ID0gMjc4O1xuICAgIHQudGNhcm9uID0gMzg5O1xuICAgIHQuZW9nb25layA9IDU1NjtcbiAgICB0LlVvZ29uZWsgPSA3MjI7XG4gICAgdC5BYWN1dGUgPSA3MjI7XG4gICAgdC5BZGllcmVzaXMgPSA3MjI7XG4gICAgdC5lZ3JhdmUgPSA1NTY7XG4gICAgdC56YWN1dGUgPSA1MDA7XG4gICAgdC5pb2dvbmVrID0gMjc4O1xuICAgIHQuT2FjdXRlID0gNzc4O1xuICAgIHQub2FjdXRlID0gNjExO1xuICAgIHQuYW1hY3JvbiA9IDU1NjtcbiAgICB0LnNhY3V0ZSA9IDU1NjtcbiAgICB0LmlkaWVyZXNpcyA9IDI3ODtcbiAgICB0Lk9jaXJjdW1mbGV4ID0gNzc4O1xuICAgIHQuVWdyYXZlID0gNzIyO1xuICAgIHQuRGVsdGEgPSA2MTI7XG4gICAgdC50aG9ybiA9IDYxMTtcbiAgICB0LnR3b3N1cGVyaW9yID0gMzMzO1xuICAgIHQuT2RpZXJlc2lzID0gNzc4O1xuICAgIHQubXUgPSA2MTE7XG4gICAgdC5pZ3JhdmUgPSAyNzg7XG4gICAgdC5vaHVuZ2FydW1sYXV0ID0gNjExO1xuICAgIHQuRW9nb25layA9IDY2NztcbiAgICB0LmRjcm9hdCA9IDYxMTtcbiAgICB0LnRocmVlcXVhcnRlcnMgPSA4MzQ7XG4gICAgdC5TY2VkaWxsYSA9IDY2NztcbiAgICB0LmxjYXJvbiA9IDQwMDtcbiAgICB0Lktjb21tYWFjY2VudCA9IDcyMjtcbiAgICB0LkxhY3V0ZSA9IDYxMTtcbiAgICB0LnRyYWRlbWFyayA9IDEwMDA7XG4gICAgdC5lZG90YWNjZW50ID0gNTU2O1xuICAgIHQuSWdyYXZlID0gMjc4O1xuICAgIHQuSW1hY3JvbiA9IDI3ODtcbiAgICB0LkxjYXJvbiA9IDYxMTtcbiAgICB0Lm9uZWhhbGYgPSA4MzQ7XG4gICAgdC5sZXNzZXF1YWwgPSA1NDk7XG4gICAgdC5vY2lyY3VtZmxleCA9IDYxMTtcbiAgICB0Lm50aWxkZSA9IDYxMTtcbiAgICB0LlVodW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5FYWN1dGUgPSA2Njc7XG4gICAgdC5lbWFjcm9uID0gNTU2O1xuICAgIHQuZ2JyZXZlID0gNjExO1xuICAgIHQub25lcXVhcnRlciA9IDgzNDtcbiAgICB0LlNjYXJvbiA9IDY2NztcbiAgICB0LlNjb21tYWFjY2VudCA9IDY2NztcbiAgICB0Lk9odW5nYXJ1bWxhdXQgPSA3Nzg7XG4gICAgdC5kZWdyZWUgPSA0MDA7XG4gICAgdC5vZ3JhdmUgPSA2MTE7XG4gICAgdC5DY2Fyb24gPSA3MjI7XG4gICAgdC51Z3JhdmUgPSA2MTE7XG4gICAgdC5yYWRpY2FsID0gNTQ5O1xuICAgIHQuRGNhcm9uID0gNzIyO1xuICAgIHQucmNvbW1hYWNjZW50ID0gMzg5O1xuICAgIHQuTnRpbGRlID0gNzIyO1xuICAgIHQub3RpbGRlID0gNjExO1xuICAgIHQuUmNvbW1hYWNjZW50ID0gNzIyO1xuICAgIHQuTGNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuQXRpbGRlID0gNzIyO1xuICAgIHQuQW9nb25layA9IDcyMjtcbiAgICB0LkFyaW5nID0gNzIyO1xuICAgIHQuT3RpbGRlID0gNzc4O1xuICAgIHQuemRvdGFjY2VudCA9IDUwMDtcbiAgICB0LkVjYXJvbiA9IDY2NztcbiAgICB0LklvZ29uZWsgPSAyNzg7XG4gICAgdC5rY29tbWFhY2NlbnQgPSA1NTY7XG4gICAgdC5taW51cyA9IDU4NDtcbiAgICB0LkljaXJjdW1mbGV4ID0gMjc4O1xuICAgIHQubmNhcm9uID0gNjExO1xuICAgIHQudGNvbW1hYWNjZW50ID0gMzMzO1xuICAgIHQubG9naWNhbG5vdCA9IDU4NDtcbiAgICB0Lm9kaWVyZXNpcyA9IDYxMTtcbiAgICB0LnVkaWVyZXNpcyA9IDYxMTtcbiAgICB0Lm5vdGVxdWFsID0gNTQ5O1xuICAgIHQuZ2NvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuZXRoID0gNjExO1xuICAgIHQuemNhcm9uID0gNTAwO1xuICAgIHQubmNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQub25lc3VwZXJpb3IgPSAzMzM7XG4gICAgdC5pbWFjcm9uID0gMjc4O1xuICAgIHQuRXVybyA9IDU1NjtcbiAgfSk7XG4gIHRbXCJIZWx2ZXRpY2EtT2JsaXF1ZVwiXSA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gICAgdC5zcGFjZSA9IDI3ODtcbiAgICB0LmV4Y2xhbSA9IDI3ODtcbiAgICB0LnF1b3RlZGJsID0gMzU1O1xuICAgIHQubnVtYmVyc2lnbiA9IDU1NjtcbiAgICB0LmRvbGxhciA9IDU1NjtcbiAgICB0LnBlcmNlbnQgPSA4ODk7XG4gICAgdC5hbXBlcnNhbmQgPSA2Njc7XG4gICAgdC5xdW90ZXJpZ2h0ID0gMjIyO1xuICAgIHQucGFyZW5sZWZ0ID0gMzMzO1xuICAgIHQucGFyZW5yaWdodCA9IDMzMztcbiAgICB0LmFzdGVyaXNrID0gMzg5O1xuICAgIHQucGx1cyA9IDU4NDtcbiAgICB0LmNvbW1hID0gMjc4O1xuICAgIHQuaHlwaGVuID0gMzMzO1xuICAgIHQucGVyaW9kID0gMjc4O1xuICAgIHQuc2xhc2ggPSAyNzg7XG4gICAgdC56ZXJvID0gNTU2O1xuICAgIHQub25lID0gNTU2O1xuICAgIHQudHdvID0gNTU2O1xuICAgIHQudGhyZWUgPSA1NTY7XG4gICAgdC5mb3VyID0gNTU2O1xuICAgIHQuZml2ZSA9IDU1NjtcbiAgICB0LnNpeCA9IDU1NjtcbiAgICB0LnNldmVuID0gNTU2O1xuICAgIHQuZWlnaHQgPSA1NTY7XG4gICAgdC5uaW5lID0gNTU2O1xuICAgIHQuY29sb24gPSAyNzg7XG4gICAgdC5zZW1pY29sb24gPSAyNzg7XG4gICAgdC5sZXNzID0gNTg0O1xuICAgIHQuZXF1YWwgPSA1ODQ7XG4gICAgdC5ncmVhdGVyID0gNTg0O1xuICAgIHQucXVlc3Rpb24gPSA1NTY7XG4gICAgdC5hdCA9IDEwMTU7XG4gICAgdC5BID0gNjY3O1xuICAgIHQuQiA9IDY2NztcbiAgICB0LkMgPSA3MjI7XG4gICAgdC5EID0gNzIyO1xuICAgIHQuRSA9IDY2NztcbiAgICB0LkYgPSA2MTE7XG4gICAgdC5HID0gNzc4O1xuICAgIHQuSCA9IDcyMjtcbiAgICB0LkkgPSAyNzg7XG4gICAgdC5KID0gNTAwO1xuICAgIHQuSyA9IDY2NztcbiAgICB0LkwgPSA1NTY7XG4gICAgdC5NID0gODMzO1xuICAgIHQuTiA9IDcyMjtcbiAgICB0Lk8gPSA3Nzg7XG4gICAgdC5QID0gNjY3O1xuICAgIHQuUSA9IDc3ODtcbiAgICB0LlIgPSA3MjI7XG4gICAgdC5TID0gNjY3O1xuICAgIHQuVCA9IDYxMTtcbiAgICB0LlUgPSA3MjI7XG4gICAgdC5WID0gNjY3O1xuICAgIHQuVyA9IDk0NDtcbiAgICB0LlggPSA2Njc7XG4gICAgdC5ZID0gNjY3O1xuICAgIHQuWiA9IDYxMTtcbiAgICB0LmJyYWNrZXRsZWZ0ID0gMjc4O1xuICAgIHQuYmFja3NsYXNoID0gMjc4O1xuICAgIHQuYnJhY2tldHJpZ2h0ID0gMjc4O1xuICAgIHQuYXNjaWljaXJjdW0gPSA0Njk7XG4gICAgdC51bmRlcnNjb3JlID0gNTU2O1xuICAgIHQucXVvdGVsZWZ0ID0gMjIyO1xuICAgIHQuYSA9IDU1NjtcbiAgICB0LmIgPSA1NTY7XG4gICAgdC5jID0gNTAwO1xuICAgIHQuZCA9IDU1NjtcbiAgICB0LmUgPSA1NTY7XG4gICAgdC5mID0gMjc4O1xuICAgIHQuZyA9IDU1NjtcbiAgICB0LmggPSA1NTY7XG4gICAgdC5pID0gMjIyO1xuICAgIHQuaiA9IDIyMjtcbiAgICB0LmsgPSA1MDA7XG4gICAgdC5sID0gMjIyO1xuICAgIHQubSA9IDgzMztcbiAgICB0Lm4gPSA1NTY7XG4gICAgdC5vID0gNTU2O1xuICAgIHQucCA9IDU1NjtcbiAgICB0LnEgPSA1NTY7XG4gICAgdC5yID0gMzMzO1xuICAgIHQucyA9IDUwMDtcbiAgICB0LnQgPSAyNzg7XG4gICAgdC51ID0gNTU2O1xuICAgIHQudiA9IDUwMDtcbiAgICB0LncgPSA3MjI7XG4gICAgdC54ID0gNTAwO1xuICAgIHQueSA9IDUwMDtcbiAgICB0LnogPSA1MDA7XG4gICAgdC5icmFjZWxlZnQgPSAzMzQ7XG4gICAgdC5iYXIgPSAyNjA7XG4gICAgdC5icmFjZXJpZ2h0ID0gMzM0O1xuICAgIHQuYXNjaWl0aWxkZSA9IDU4NDtcbiAgICB0LmV4Y2xhbWRvd24gPSAzMzM7XG4gICAgdC5jZW50ID0gNTU2O1xuICAgIHQuc3RlcmxpbmcgPSA1NTY7XG4gICAgdC5mcmFjdGlvbiA9IDE2NztcbiAgICB0LnllbiA9IDU1NjtcbiAgICB0LmZsb3JpbiA9IDU1NjtcbiAgICB0LnNlY3Rpb24gPSA1NTY7XG4gICAgdC5jdXJyZW5jeSA9IDU1NjtcbiAgICB0LnF1b3Rlc2luZ2xlID0gMTkxO1xuICAgIHQucXVvdGVkYmxsZWZ0ID0gMzMzO1xuICAgIHQuZ3VpbGxlbW90bGVmdCA9IDU1NjtcbiAgICB0Lmd1aWxzaW5nbGxlZnQgPSAzMzM7XG4gICAgdC5ndWlsc2luZ2xyaWdodCA9IDMzMztcbiAgICB0LmZpID0gNTAwO1xuICAgIHQuZmwgPSA1MDA7XG4gICAgdC5lbmRhc2ggPSA1NTY7XG4gICAgdC5kYWdnZXIgPSA1NTY7XG4gICAgdC5kYWdnZXJkYmwgPSA1NTY7XG4gICAgdC5wZXJpb2RjZW50ZXJlZCA9IDI3ODtcbiAgICB0LnBhcmFncmFwaCA9IDUzNztcbiAgICB0LmJ1bGxldCA9IDM1MDtcbiAgICB0LnF1b3Rlc2luZ2xiYXNlID0gMjIyO1xuICAgIHQucXVvdGVkYmxiYXNlID0gMzMzO1xuICAgIHQucXVvdGVkYmxyaWdodCA9IDMzMztcbiAgICB0Lmd1aWxsZW1vdHJpZ2h0ID0gNTU2O1xuICAgIHQuZWxsaXBzaXMgPSAxMDAwO1xuICAgIHQucGVydGhvdXNhbmQgPSAxMDAwO1xuICAgIHQucXVlc3Rpb25kb3duID0gNjExO1xuICAgIHQuZ3JhdmUgPSAzMzM7XG4gICAgdC5hY3V0ZSA9IDMzMztcbiAgICB0LmNpcmN1bWZsZXggPSAzMzM7XG4gICAgdC50aWxkZSA9IDMzMztcbiAgICB0Lm1hY3JvbiA9IDMzMztcbiAgICB0LmJyZXZlID0gMzMzO1xuICAgIHQuZG90YWNjZW50ID0gMzMzO1xuICAgIHQuZGllcmVzaXMgPSAzMzM7XG4gICAgdC5yaW5nID0gMzMzO1xuICAgIHQuY2VkaWxsYSA9IDMzMztcbiAgICB0Lmh1bmdhcnVtbGF1dCA9IDMzMztcbiAgICB0Lm9nb25layA9IDMzMztcbiAgICB0LmNhcm9uID0gMzMzO1xuICAgIHQuZW1kYXNoID0gMTAwMDtcbiAgICB0LkFFID0gMTAwMDtcbiAgICB0Lm9yZGZlbWluaW5lID0gMzcwO1xuICAgIHQuTHNsYXNoID0gNTU2O1xuICAgIHQuT3NsYXNoID0gNzc4O1xuICAgIHQuT0UgPSAxMDAwO1xuICAgIHQub3JkbWFzY3VsaW5lID0gMzY1O1xuICAgIHQuYWUgPSA4ODk7XG4gICAgdC5kb3RsZXNzaSA9IDI3ODtcbiAgICB0LmxzbGFzaCA9IDIyMjtcbiAgICB0Lm9zbGFzaCA9IDYxMTtcbiAgICB0Lm9lID0gOTQ0O1xuICAgIHQuZ2VybWFuZGJscyA9IDYxMTtcbiAgICB0LklkaWVyZXNpcyA9IDI3ODtcbiAgICB0LmVhY3V0ZSA9IDU1NjtcbiAgICB0LmFicmV2ZSA9IDU1NjtcbiAgICB0LnVodW5nYXJ1bWxhdXQgPSA1NTY7XG4gICAgdC5lY2Fyb24gPSA1NTY7XG4gICAgdC5ZZGllcmVzaXMgPSA2Njc7XG4gICAgdC5kaXZpZGUgPSA1ODQ7XG4gICAgdC5ZYWN1dGUgPSA2Njc7XG4gICAgdC5BY2lyY3VtZmxleCA9IDY2NztcbiAgICB0LmFhY3V0ZSA9IDU1NjtcbiAgICB0LlVjaXJjdW1mbGV4ID0gNzIyO1xuICAgIHQueWFjdXRlID0gNTAwO1xuICAgIHQuc2NvbW1hYWNjZW50ID0gNTAwO1xuICAgIHQuZWNpcmN1bWZsZXggPSA1NTY7XG4gICAgdC5VcmluZyA9IDcyMjtcbiAgICB0LlVkaWVyZXNpcyA9IDcyMjtcbiAgICB0LmFvZ29uZWsgPSA1NTY7XG4gICAgdC5VYWN1dGUgPSA3MjI7XG4gICAgdC51b2dvbmVrID0gNTU2O1xuICAgIHQuRWRpZXJlc2lzID0gNjY3O1xuICAgIHQuRGNyb2F0ID0gNzIyO1xuICAgIHQuY29tbWFhY2NlbnQgPSAyNTA7XG4gICAgdC5jb3B5cmlnaHQgPSA3Mzc7XG4gICAgdC5FbWFjcm9uID0gNjY3O1xuICAgIHQuY2Nhcm9uID0gNTAwO1xuICAgIHQuYXJpbmcgPSA1NTY7XG4gICAgdC5OY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC5sYWN1dGUgPSAyMjI7XG4gICAgdC5hZ3JhdmUgPSA1NTY7XG4gICAgdC5UY29tbWFhY2NlbnQgPSA2MTE7XG4gICAgdC5DYWN1dGUgPSA3MjI7XG4gICAgdC5hdGlsZGUgPSA1NTY7XG4gICAgdC5FZG90YWNjZW50ID0gNjY3O1xuICAgIHQuc2Nhcm9uID0gNTAwO1xuICAgIHQuc2NlZGlsbGEgPSA1MDA7XG4gICAgdC5pYWN1dGUgPSAyNzg7XG4gICAgdC5sb3plbmdlID0gNDcxO1xuICAgIHQuUmNhcm9uID0gNzIyO1xuICAgIHQuR2NvbW1hYWNjZW50ID0gNzc4O1xuICAgIHQudWNpcmN1bWZsZXggPSA1NTY7XG4gICAgdC5hY2lyY3VtZmxleCA9IDU1NjtcbiAgICB0LkFtYWNyb24gPSA2Njc7XG4gICAgdC5yY2Fyb24gPSAzMzM7XG4gICAgdC5jY2VkaWxsYSA9IDUwMDtcbiAgICB0Llpkb3RhY2NlbnQgPSA2MTE7XG4gICAgdC5UaG9ybiA9IDY2NztcbiAgICB0Lk9tYWNyb24gPSA3Nzg7XG4gICAgdC5SYWN1dGUgPSA3MjI7XG4gICAgdC5TYWN1dGUgPSA2Njc7XG4gICAgdC5kY2Fyb24gPSA2NDM7XG4gICAgdC5VbWFjcm9uID0gNzIyO1xuICAgIHQudXJpbmcgPSA1NTY7XG4gICAgdC50aHJlZXN1cGVyaW9yID0gMzMzO1xuICAgIHQuT2dyYXZlID0gNzc4O1xuICAgIHQuQWdyYXZlID0gNjY3O1xuICAgIHQuQWJyZXZlID0gNjY3O1xuICAgIHQubXVsdGlwbHkgPSA1ODQ7XG4gICAgdC51YWN1dGUgPSA1NTY7XG4gICAgdC5UY2Fyb24gPSA2MTE7XG4gICAgdC5wYXJ0aWFsZGlmZiA9IDQ3NjtcbiAgICB0LnlkaWVyZXNpcyA9IDUwMDtcbiAgICB0Lk5hY3V0ZSA9IDcyMjtcbiAgICB0LmljaXJjdW1mbGV4ID0gMjc4O1xuICAgIHQuRWNpcmN1bWZsZXggPSA2Njc7XG4gICAgdC5hZGllcmVzaXMgPSA1NTY7XG4gICAgdC5lZGllcmVzaXMgPSA1NTY7XG4gICAgdC5jYWN1dGUgPSA1MDA7XG4gICAgdC5uYWN1dGUgPSA1NTY7XG4gICAgdC51bWFjcm9uID0gNTU2O1xuICAgIHQuTmNhcm9uID0gNzIyO1xuICAgIHQuSWFjdXRlID0gMjc4O1xuICAgIHQucGx1c21pbnVzID0gNTg0O1xuICAgIHQuYnJva2VuYmFyID0gMjYwO1xuICAgIHQucmVnaXN0ZXJlZCA9IDczNztcbiAgICB0LkdicmV2ZSA9IDc3ODtcbiAgICB0Lklkb3RhY2NlbnQgPSAyNzg7XG4gICAgdC5zdW1tYXRpb24gPSA2MDA7XG4gICAgdC5FZ3JhdmUgPSA2Njc7XG4gICAgdC5yYWN1dGUgPSAzMzM7XG4gICAgdC5vbWFjcm9uID0gNTU2O1xuICAgIHQuWmFjdXRlID0gNjExO1xuICAgIHQuWmNhcm9uID0gNjExO1xuICAgIHQuZ3JlYXRlcmVxdWFsID0gNTQ5O1xuICAgIHQuRXRoID0gNzIyO1xuICAgIHQuQ2NlZGlsbGEgPSA3MjI7XG4gICAgdC5sY29tbWFhY2NlbnQgPSAyMjI7XG4gICAgdC50Y2Fyb24gPSAzMTc7XG4gICAgdC5lb2dvbmVrID0gNTU2O1xuICAgIHQuVW9nb25layA9IDcyMjtcbiAgICB0LkFhY3V0ZSA9IDY2NztcbiAgICB0LkFkaWVyZXNpcyA9IDY2NztcbiAgICB0LmVncmF2ZSA9IDU1NjtcbiAgICB0LnphY3V0ZSA9IDUwMDtcbiAgICB0LmlvZ29uZWsgPSAyMjI7XG4gICAgdC5PYWN1dGUgPSA3Nzg7XG4gICAgdC5vYWN1dGUgPSA1NTY7XG4gICAgdC5hbWFjcm9uID0gNTU2O1xuICAgIHQuc2FjdXRlID0gNTAwO1xuICAgIHQuaWRpZXJlc2lzID0gMjc4O1xuICAgIHQuT2NpcmN1bWZsZXggPSA3Nzg7XG4gICAgdC5VZ3JhdmUgPSA3MjI7XG4gICAgdC5EZWx0YSA9IDYxMjtcbiAgICB0LnRob3JuID0gNTU2O1xuICAgIHQudHdvc3VwZXJpb3IgPSAzMzM7XG4gICAgdC5PZGllcmVzaXMgPSA3Nzg7XG4gICAgdC5tdSA9IDU1NjtcbiAgICB0LmlncmF2ZSA9IDI3ODtcbiAgICB0Lm9odW5nYXJ1bWxhdXQgPSA1NTY7XG4gICAgdC5Fb2dvbmVrID0gNjY3O1xuICAgIHQuZGNyb2F0ID0gNTU2O1xuICAgIHQudGhyZWVxdWFydGVycyA9IDgzNDtcbiAgICB0LlNjZWRpbGxhID0gNjY3O1xuICAgIHQubGNhcm9uID0gMjk5O1xuICAgIHQuS2NvbW1hYWNjZW50ID0gNjY3O1xuICAgIHQuTGFjdXRlID0gNTU2O1xuICAgIHQudHJhZGVtYXJrID0gMTAwMDtcbiAgICB0LmVkb3RhY2NlbnQgPSA1NTY7XG4gICAgdC5JZ3JhdmUgPSAyNzg7XG4gICAgdC5JbWFjcm9uID0gMjc4O1xuICAgIHQuTGNhcm9uID0gNTU2O1xuICAgIHQub25laGFsZiA9IDgzNDtcbiAgICB0Lmxlc3NlcXVhbCA9IDU0OTtcbiAgICB0Lm9jaXJjdW1mbGV4ID0gNTU2O1xuICAgIHQubnRpbGRlID0gNTU2O1xuICAgIHQuVWh1bmdhcnVtbGF1dCA9IDcyMjtcbiAgICB0LkVhY3V0ZSA9IDY2NztcbiAgICB0LmVtYWNyb24gPSA1NTY7XG4gICAgdC5nYnJldmUgPSA1NTY7XG4gICAgdC5vbmVxdWFydGVyID0gODM0O1xuICAgIHQuU2Nhcm9uID0gNjY3O1xuICAgIHQuU2NvbW1hYWNjZW50ID0gNjY3O1xuICAgIHQuT2h1bmdhcnVtbGF1dCA9IDc3ODtcbiAgICB0LmRlZ3JlZSA9IDQwMDtcbiAgICB0Lm9ncmF2ZSA9IDU1NjtcbiAgICB0LkNjYXJvbiA9IDcyMjtcbiAgICB0LnVncmF2ZSA9IDU1NjtcbiAgICB0LnJhZGljYWwgPSA0NTM7XG4gICAgdC5EY2Fyb24gPSA3MjI7XG4gICAgdC5yY29tbWFhY2NlbnQgPSAzMzM7XG4gICAgdC5OdGlsZGUgPSA3MjI7XG4gICAgdC5vdGlsZGUgPSA1NTY7XG4gICAgdC5SY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC5MY29tbWFhY2NlbnQgPSA1NTY7XG4gICAgdC5BdGlsZGUgPSA2Njc7XG4gICAgdC5Bb2dvbmVrID0gNjY3O1xuICAgIHQuQXJpbmcgPSA2Njc7XG4gICAgdC5PdGlsZGUgPSA3Nzg7XG4gICAgdC56ZG90YWNjZW50ID0gNTAwO1xuICAgIHQuRWNhcm9uID0gNjY3O1xuICAgIHQuSW9nb25layA9IDI3ODtcbiAgICB0Lmtjb21tYWFjY2VudCA9IDUwMDtcbiAgICB0Lm1pbnVzID0gNTg0O1xuICAgIHQuSWNpcmN1bWZsZXggPSAyNzg7XG4gICAgdC5uY2Fyb24gPSA1NTY7XG4gICAgdC50Y29tbWFhY2NlbnQgPSAyNzg7XG4gICAgdC5sb2dpY2Fsbm90ID0gNTg0O1xuICAgIHQub2RpZXJlc2lzID0gNTU2O1xuICAgIHQudWRpZXJlc2lzID0gNTU2O1xuICAgIHQubm90ZXF1YWwgPSA1NDk7XG4gICAgdC5nY29tbWFhY2NlbnQgPSA1NTY7XG4gICAgdC5ldGggPSA1NTY7XG4gICAgdC56Y2Fyb24gPSA1MDA7XG4gICAgdC5uY29tbWFhY2NlbnQgPSA1NTY7XG4gICAgdC5vbmVzdXBlcmlvciA9IDMzMztcbiAgICB0LmltYWNyb24gPSAyNzg7XG4gICAgdC5FdXJvID0gNTU2O1xuICB9KTtcbiAgdC5TeW1ib2wgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgIHQuc3BhY2UgPSAyNTA7XG4gICAgdC5leGNsYW0gPSAzMzM7XG4gICAgdC51bml2ZXJzYWwgPSA3MTM7XG4gICAgdC5udW1iZXJzaWduID0gNTAwO1xuICAgIHQuZXhpc3RlbnRpYWwgPSA1NDk7XG4gICAgdC5wZXJjZW50ID0gODMzO1xuICAgIHQuYW1wZXJzYW5kID0gNzc4O1xuICAgIHQuc3VjaHRoYXQgPSA0Mzk7XG4gICAgdC5wYXJlbmxlZnQgPSAzMzM7XG4gICAgdC5wYXJlbnJpZ2h0ID0gMzMzO1xuICAgIHQuYXN0ZXJpc2ttYXRoID0gNTAwO1xuICAgIHQucGx1cyA9IDU0OTtcbiAgICB0LmNvbW1hID0gMjUwO1xuICAgIHQubWludXMgPSA1NDk7XG4gICAgdC5wZXJpb2QgPSAyNTA7XG4gICAgdC5zbGFzaCA9IDI3ODtcbiAgICB0Lnplcm8gPSA1MDA7XG4gICAgdC5vbmUgPSA1MDA7XG4gICAgdC50d28gPSA1MDA7XG4gICAgdC50aHJlZSA9IDUwMDtcbiAgICB0LmZvdXIgPSA1MDA7XG4gICAgdC5maXZlID0gNTAwO1xuICAgIHQuc2l4ID0gNTAwO1xuICAgIHQuc2V2ZW4gPSA1MDA7XG4gICAgdC5laWdodCA9IDUwMDtcbiAgICB0Lm5pbmUgPSA1MDA7XG4gICAgdC5jb2xvbiA9IDI3ODtcbiAgICB0LnNlbWljb2xvbiA9IDI3ODtcbiAgICB0Lmxlc3MgPSA1NDk7XG4gICAgdC5lcXVhbCA9IDU0OTtcbiAgICB0LmdyZWF0ZXIgPSA1NDk7XG4gICAgdC5xdWVzdGlvbiA9IDQ0NDtcbiAgICB0LmNvbmdydWVudCA9IDU0OTtcbiAgICB0LkFscGhhID0gNzIyO1xuICAgIHQuQmV0YSA9IDY2NztcbiAgICB0LkNoaSA9IDcyMjtcbiAgICB0LkRlbHRhID0gNjEyO1xuICAgIHQuRXBzaWxvbiA9IDYxMTtcbiAgICB0LlBoaSA9IDc2MztcbiAgICB0LkdhbW1hID0gNjAzO1xuICAgIHQuRXRhID0gNzIyO1xuICAgIHQuSW90YSA9IDMzMztcbiAgICB0LnRoZXRhMSA9IDYzMTtcbiAgICB0LkthcHBhID0gNzIyO1xuICAgIHQuTGFtYmRhID0gNjg2O1xuICAgIHQuTXUgPSA4ODk7XG4gICAgdC5OdSA9IDcyMjtcbiAgICB0Lk9taWNyb24gPSA3MjI7XG4gICAgdC5QaSA9IDc2ODtcbiAgICB0LlRoZXRhID0gNzQxO1xuICAgIHQuUmhvID0gNTU2O1xuICAgIHQuU2lnbWEgPSA1OTI7XG4gICAgdC5UYXUgPSA2MTE7XG4gICAgdC5VcHNpbG9uID0gNjkwO1xuICAgIHQuc2lnbWExID0gNDM5O1xuICAgIHQuT21lZ2EgPSA3Njg7XG4gICAgdC5YaSA9IDY0NTtcbiAgICB0LlBzaSA9IDc5NTtcbiAgICB0LlpldGEgPSA2MTE7XG4gICAgdC5icmFja2V0bGVmdCA9IDMzMztcbiAgICB0LnRoZXJlZm9yZSA9IDg2MztcbiAgICB0LmJyYWNrZXRyaWdodCA9IDMzMztcbiAgICB0LnBlcnBlbmRpY3VsYXIgPSA2NTg7XG4gICAgdC51bmRlcnNjb3JlID0gNTAwO1xuICAgIHQucmFkaWNhbGV4ID0gNTAwO1xuICAgIHQuYWxwaGEgPSA2MzE7XG4gICAgdC5iZXRhID0gNTQ5O1xuICAgIHQuY2hpID0gNTQ5O1xuICAgIHQuZGVsdGEgPSA0OTQ7XG4gICAgdC5lcHNpbG9uID0gNDM5O1xuICAgIHQucGhpID0gNTIxO1xuICAgIHQuZ2FtbWEgPSA0MTE7XG4gICAgdC5ldGEgPSA2MDM7XG4gICAgdC5pb3RhID0gMzI5O1xuICAgIHQucGhpMSA9IDYwMztcbiAgICB0LmthcHBhID0gNTQ5O1xuICAgIHQubGFtYmRhID0gNTQ5O1xuICAgIHQubXUgPSA1NzY7XG4gICAgdC5udSA9IDUyMTtcbiAgICB0Lm9taWNyb24gPSA1NDk7XG4gICAgdC5waSA9IDU0OTtcbiAgICB0LnRoZXRhID0gNTIxO1xuICAgIHQucmhvID0gNTQ5O1xuICAgIHQuc2lnbWEgPSA2MDM7XG4gICAgdC50YXUgPSA0Mzk7XG4gICAgdC51cHNpbG9uID0gNTc2O1xuICAgIHQub21lZ2ExID0gNzEzO1xuICAgIHQub21lZ2EgPSA2ODY7XG4gICAgdC54aSA9IDQ5MztcbiAgICB0LnBzaSA9IDY4NjtcbiAgICB0LnpldGEgPSA0OTQ7XG4gICAgdC5icmFjZWxlZnQgPSA0ODA7XG4gICAgdC5iYXIgPSAyMDA7XG4gICAgdC5icmFjZXJpZ2h0ID0gNDgwO1xuICAgIHQuc2ltaWxhciA9IDU0OTtcbiAgICB0LkV1cm8gPSA3NTA7XG4gICAgdC5VcHNpbG9uMSA9IDYyMDtcbiAgICB0Lm1pbnV0ZSA9IDI0NztcbiAgICB0Lmxlc3NlcXVhbCA9IDU0OTtcbiAgICB0LmZyYWN0aW9uID0gMTY3O1xuICAgIHQuaW5maW5pdHkgPSA3MTM7XG4gICAgdC5mbG9yaW4gPSA1MDA7XG4gICAgdC5jbHViID0gNzUzO1xuICAgIHQuZGlhbW9uZCA9IDc1MztcbiAgICB0LmhlYXJ0ID0gNzUzO1xuICAgIHQuc3BhZGUgPSA3NTM7XG4gICAgdC5hcnJvd2JvdGggPSAxMDQyO1xuICAgIHQuYXJyb3dsZWZ0ID0gOTg3O1xuICAgIHQuYXJyb3d1cCA9IDYwMztcbiAgICB0LmFycm93cmlnaHQgPSA5ODc7XG4gICAgdC5hcnJvd2Rvd24gPSA2MDM7XG4gICAgdC5kZWdyZWUgPSA0MDA7XG4gICAgdC5wbHVzbWludXMgPSA1NDk7XG4gICAgdC5zZWNvbmQgPSA0MTE7XG4gICAgdC5ncmVhdGVyZXF1YWwgPSA1NDk7XG4gICAgdC5tdWx0aXBseSA9IDU0OTtcbiAgICB0LnByb3BvcnRpb25hbCA9IDcxMztcbiAgICB0LnBhcnRpYWxkaWZmID0gNDk0O1xuICAgIHQuYnVsbGV0ID0gNDYwO1xuICAgIHQuZGl2aWRlID0gNTQ5O1xuICAgIHQubm90ZXF1YWwgPSA1NDk7XG4gICAgdC5lcXVpdmFsZW5jZSA9IDU0OTtcbiAgICB0LmFwcHJveGVxdWFsID0gNTQ5O1xuICAgIHQuZWxsaXBzaXMgPSAxMDAwO1xuICAgIHQuYXJyb3d2ZXJ0ZXggPSA2MDM7XG4gICAgdC5hcnJvd2hvcml6ZXggPSAxMDAwO1xuICAgIHQuY2FycmlhZ2VyZXR1cm4gPSA2NTg7XG4gICAgdC5hbGVwaCA9IDgyMztcbiAgICB0LklmcmFrdHVyID0gNjg2O1xuICAgIHQuUmZyYWt0dXIgPSA3OTU7XG4gICAgdC53ZWllcnN0cmFzcyA9IDk4NztcbiAgICB0LmNpcmNsZW11bHRpcGx5ID0gNzY4O1xuICAgIHQuY2lyY2xlcGx1cyA9IDc2ODtcbiAgICB0LmVtcHR5c2V0ID0gODIzO1xuICAgIHQuaW50ZXJzZWN0aW9uID0gNzY4O1xuICAgIHQudW5pb24gPSA3Njg7XG4gICAgdC5wcm9wZXJzdXBlcnNldCA9IDcxMztcbiAgICB0LnJlZmxleHN1cGVyc2V0ID0gNzEzO1xuICAgIHQubm90c3Vic2V0ID0gNzEzO1xuICAgIHQucHJvcGVyc3Vic2V0ID0gNzEzO1xuICAgIHQucmVmbGV4c3Vic2V0ID0gNzEzO1xuICAgIHQuZWxlbWVudCA9IDcxMztcbiAgICB0Lm5vdGVsZW1lbnQgPSA3MTM7XG4gICAgdC5hbmdsZSA9IDc2ODtcbiAgICB0LmdyYWRpZW50ID0gNzEzO1xuICAgIHQucmVnaXN0ZXJzZXJpZiA9IDc5MDtcbiAgICB0LmNvcHlyaWdodHNlcmlmID0gNzkwO1xuICAgIHQudHJhZGVtYXJrc2VyaWYgPSA4OTA7XG4gICAgdC5wcm9kdWN0ID0gODIzO1xuICAgIHQucmFkaWNhbCA9IDU0OTtcbiAgICB0LmRvdG1hdGggPSAyNTA7XG4gICAgdC5sb2dpY2Fsbm90ID0gNzEzO1xuICAgIHQubG9naWNhbGFuZCA9IDYwMztcbiAgICB0LmxvZ2ljYWxvciA9IDYwMztcbiAgICB0LmFycm93ZGJsYm90aCA9IDEwNDI7XG4gICAgdC5hcnJvd2RibGxlZnQgPSA5ODc7XG4gICAgdC5hcnJvd2RibHVwID0gNjAzO1xuICAgIHQuYXJyb3dkYmxyaWdodCA9IDk4NztcbiAgICB0LmFycm93ZGJsZG93biA9IDYwMztcbiAgICB0LmxvemVuZ2UgPSA0OTQ7XG4gICAgdC5hbmdsZWxlZnQgPSAzMjk7XG4gICAgdC5yZWdpc3RlcnNhbnMgPSA3OTA7XG4gICAgdC5jb3B5cmlnaHRzYW5zID0gNzkwO1xuICAgIHQudHJhZGVtYXJrc2FucyA9IDc4NjtcbiAgICB0LnN1bW1hdGlvbiA9IDcxMztcbiAgICB0LnBhcmVubGVmdHRwID0gMzg0O1xuICAgIHQucGFyZW5sZWZ0ZXggPSAzODQ7XG4gICAgdC5wYXJlbmxlZnRidCA9IDM4NDtcbiAgICB0LmJyYWNrZXRsZWZ0dHAgPSAzODQ7XG4gICAgdC5icmFja2V0bGVmdGV4ID0gMzg0O1xuICAgIHQuYnJhY2tldGxlZnRidCA9IDM4NDtcbiAgICB0LmJyYWNlbGVmdHRwID0gNDk0O1xuICAgIHQuYnJhY2VsZWZ0bWlkID0gNDk0O1xuICAgIHQuYnJhY2VsZWZ0YnQgPSA0OTQ7XG4gICAgdC5icmFjZWV4ID0gNDk0O1xuICAgIHQuYW5nbGVyaWdodCA9IDMyOTtcbiAgICB0LmludGVncmFsID0gMjc0O1xuICAgIHQuaW50ZWdyYWx0cCA9IDY4NjtcbiAgICB0LmludGVncmFsZXggPSA2ODY7XG4gICAgdC5pbnRlZ3JhbGJ0ID0gNjg2O1xuICAgIHQucGFyZW5yaWdodHRwID0gMzg0O1xuICAgIHQucGFyZW5yaWdodGV4ID0gMzg0O1xuICAgIHQucGFyZW5yaWdodGJ0ID0gMzg0O1xuICAgIHQuYnJhY2tldHJpZ2h0dHAgPSAzODQ7XG4gICAgdC5icmFja2V0cmlnaHRleCA9IDM4NDtcbiAgICB0LmJyYWNrZXRyaWdodGJ0ID0gMzg0O1xuICAgIHQuYnJhY2VyaWdodHRwID0gNDk0O1xuICAgIHQuYnJhY2VyaWdodG1pZCA9IDQ5NDtcbiAgICB0LmJyYWNlcmlnaHRidCA9IDQ5NDtcbiAgICB0LmFwcGxlID0gNzkwO1xuICB9KTtcbiAgdFtcIlRpbWVzLVJvbWFuXCJdID0gKDAsIF9jb3JlX3V0aWxzLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICB0LnNwYWNlID0gMjUwO1xuICAgIHQuZXhjbGFtID0gMzMzO1xuICAgIHQucXVvdGVkYmwgPSA0MDg7XG4gICAgdC5udW1iZXJzaWduID0gNTAwO1xuICAgIHQuZG9sbGFyID0gNTAwO1xuICAgIHQucGVyY2VudCA9IDgzMztcbiAgICB0LmFtcGVyc2FuZCA9IDc3ODtcbiAgICB0LnF1b3RlcmlnaHQgPSAzMzM7XG4gICAgdC5wYXJlbmxlZnQgPSAzMzM7XG4gICAgdC5wYXJlbnJpZ2h0ID0gMzMzO1xuICAgIHQuYXN0ZXJpc2sgPSA1MDA7XG4gICAgdC5wbHVzID0gNTY0O1xuICAgIHQuY29tbWEgPSAyNTA7XG4gICAgdC5oeXBoZW4gPSAzMzM7XG4gICAgdC5wZXJpb2QgPSAyNTA7XG4gICAgdC5zbGFzaCA9IDI3ODtcbiAgICB0Lnplcm8gPSA1MDA7XG4gICAgdC5vbmUgPSA1MDA7XG4gICAgdC50d28gPSA1MDA7XG4gICAgdC50aHJlZSA9IDUwMDtcbiAgICB0LmZvdXIgPSA1MDA7XG4gICAgdC5maXZlID0gNTAwO1xuICAgIHQuc2l4ID0gNTAwO1xuICAgIHQuc2V2ZW4gPSA1MDA7XG4gICAgdC5laWdodCA9IDUwMDtcbiAgICB0Lm5pbmUgPSA1MDA7XG4gICAgdC5jb2xvbiA9IDI3ODtcbiAgICB0LnNlbWljb2xvbiA9IDI3ODtcbiAgICB0Lmxlc3MgPSA1NjQ7XG4gICAgdC5lcXVhbCA9IDU2NDtcbiAgICB0LmdyZWF0ZXIgPSA1NjQ7XG4gICAgdC5xdWVzdGlvbiA9IDQ0NDtcbiAgICB0LmF0ID0gOTIxO1xuICAgIHQuQSA9IDcyMjtcbiAgICB0LkIgPSA2Njc7XG4gICAgdC5DID0gNjY3O1xuICAgIHQuRCA9IDcyMjtcbiAgICB0LkUgPSA2MTE7XG4gICAgdC5GID0gNTU2O1xuICAgIHQuRyA9IDcyMjtcbiAgICB0LkggPSA3MjI7XG4gICAgdC5JID0gMzMzO1xuICAgIHQuSiA9IDM4OTtcbiAgICB0LksgPSA3MjI7XG4gICAgdC5MID0gNjExO1xuICAgIHQuTSA9IDg4OTtcbiAgICB0Lk4gPSA3MjI7XG4gICAgdC5PID0gNzIyO1xuICAgIHQuUCA9IDU1NjtcbiAgICB0LlEgPSA3MjI7XG4gICAgdC5SID0gNjY3O1xuICAgIHQuUyA9IDU1NjtcbiAgICB0LlQgPSA2MTE7XG4gICAgdC5VID0gNzIyO1xuICAgIHQuViA9IDcyMjtcbiAgICB0LlcgPSA5NDQ7XG4gICAgdC5YID0gNzIyO1xuICAgIHQuWSA9IDcyMjtcbiAgICB0LlogPSA2MTE7XG4gICAgdC5icmFja2V0bGVmdCA9IDMzMztcbiAgICB0LmJhY2tzbGFzaCA9IDI3ODtcbiAgICB0LmJyYWNrZXRyaWdodCA9IDMzMztcbiAgICB0LmFzY2lpY2lyY3VtID0gNDY5O1xuICAgIHQudW5kZXJzY29yZSA9IDUwMDtcbiAgICB0LnF1b3RlbGVmdCA9IDMzMztcbiAgICB0LmEgPSA0NDQ7XG4gICAgdC5iID0gNTAwO1xuICAgIHQuYyA9IDQ0NDtcbiAgICB0LmQgPSA1MDA7XG4gICAgdC5lID0gNDQ0O1xuICAgIHQuZiA9IDMzMztcbiAgICB0LmcgPSA1MDA7XG4gICAgdC5oID0gNTAwO1xuICAgIHQuaSA9IDI3ODtcbiAgICB0LmogPSAyNzg7XG4gICAgdC5rID0gNTAwO1xuICAgIHQubCA9IDI3ODtcbiAgICB0Lm0gPSA3Nzg7XG4gICAgdC5uID0gNTAwO1xuICAgIHQubyA9IDUwMDtcbiAgICB0LnAgPSA1MDA7XG4gICAgdC5xID0gNTAwO1xuICAgIHQuciA9IDMzMztcbiAgICB0LnMgPSAzODk7XG4gICAgdC50ID0gMjc4O1xuICAgIHQudSA9IDUwMDtcbiAgICB0LnYgPSA1MDA7XG4gICAgdC53ID0gNzIyO1xuICAgIHQueCA9IDUwMDtcbiAgICB0LnkgPSA1MDA7XG4gICAgdC56ID0gNDQ0O1xuICAgIHQuYnJhY2VsZWZ0ID0gNDgwO1xuICAgIHQuYmFyID0gMjAwO1xuICAgIHQuYnJhY2VyaWdodCA9IDQ4MDtcbiAgICB0LmFzY2lpdGlsZGUgPSA1NDE7XG4gICAgdC5leGNsYW1kb3duID0gMzMzO1xuICAgIHQuY2VudCA9IDUwMDtcbiAgICB0LnN0ZXJsaW5nID0gNTAwO1xuICAgIHQuZnJhY3Rpb24gPSAxNjc7XG4gICAgdC55ZW4gPSA1MDA7XG4gICAgdC5mbG9yaW4gPSA1MDA7XG4gICAgdC5zZWN0aW9uID0gNTAwO1xuICAgIHQuY3VycmVuY3kgPSA1MDA7XG4gICAgdC5xdW90ZXNpbmdsZSA9IDE4MDtcbiAgICB0LnF1b3RlZGJsbGVmdCA9IDQ0NDtcbiAgICB0Lmd1aWxsZW1vdGxlZnQgPSA1MDA7XG4gICAgdC5ndWlsc2luZ2xsZWZ0ID0gMzMzO1xuICAgIHQuZ3VpbHNpbmdscmlnaHQgPSAzMzM7XG4gICAgdC5maSA9IDU1NjtcbiAgICB0LmZsID0gNTU2O1xuICAgIHQuZW5kYXNoID0gNTAwO1xuICAgIHQuZGFnZ2VyID0gNTAwO1xuICAgIHQuZGFnZ2VyZGJsID0gNTAwO1xuICAgIHQucGVyaW9kY2VudGVyZWQgPSAyNTA7XG4gICAgdC5wYXJhZ3JhcGggPSA0NTM7XG4gICAgdC5idWxsZXQgPSAzNTA7XG4gICAgdC5xdW90ZXNpbmdsYmFzZSA9IDMzMztcbiAgICB0LnF1b3RlZGJsYmFzZSA9IDQ0NDtcbiAgICB0LnF1b3RlZGJscmlnaHQgPSA0NDQ7XG4gICAgdC5ndWlsbGVtb3RyaWdodCA9IDUwMDtcbiAgICB0LmVsbGlwc2lzID0gMTAwMDtcbiAgICB0LnBlcnRob3VzYW5kID0gMTAwMDtcbiAgICB0LnF1ZXN0aW9uZG93biA9IDQ0NDtcbiAgICB0LmdyYXZlID0gMzMzO1xuICAgIHQuYWN1dGUgPSAzMzM7XG4gICAgdC5jaXJjdW1mbGV4ID0gMzMzO1xuICAgIHQudGlsZGUgPSAzMzM7XG4gICAgdC5tYWNyb24gPSAzMzM7XG4gICAgdC5icmV2ZSA9IDMzMztcbiAgICB0LmRvdGFjY2VudCA9IDMzMztcbiAgICB0LmRpZXJlc2lzID0gMzMzO1xuICAgIHQucmluZyA9IDMzMztcbiAgICB0LmNlZGlsbGEgPSAzMzM7XG4gICAgdC5odW5nYXJ1bWxhdXQgPSAzMzM7XG4gICAgdC5vZ29uZWsgPSAzMzM7XG4gICAgdC5jYXJvbiA9IDMzMztcbiAgICB0LmVtZGFzaCA9IDEwMDA7XG4gICAgdC5BRSA9IDg4OTtcbiAgICB0Lm9yZGZlbWluaW5lID0gMjc2O1xuICAgIHQuTHNsYXNoID0gNjExO1xuICAgIHQuT3NsYXNoID0gNzIyO1xuICAgIHQuT0UgPSA4ODk7XG4gICAgdC5vcmRtYXNjdWxpbmUgPSAzMTA7XG4gICAgdC5hZSA9IDY2NztcbiAgICB0LmRvdGxlc3NpID0gMjc4O1xuICAgIHQubHNsYXNoID0gMjc4O1xuICAgIHQub3NsYXNoID0gNTAwO1xuICAgIHQub2UgPSA3MjI7XG4gICAgdC5nZXJtYW5kYmxzID0gNTAwO1xuICAgIHQuSWRpZXJlc2lzID0gMzMzO1xuICAgIHQuZWFjdXRlID0gNDQ0O1xuICAgIHQuYWJyZXZlID0gNDQ0O1xuICAgIHQudWh1bmdhcnVtbGF1dCA9IDUwMDtcbiAgICB0LmVjYXJvbiA9IDQ0NDtcbiAgICB0LllkaWVyZXNpcyA9IDcyMjtcbiAgICB0LmRpdmlkZSA9IDU2NDtcbiAgICB0LllhY3V0ZSA9IDcyMjtcbiAgICB0LkFjaXJjdW1mbGV4ID0gNzIyO1xuICAgIHQuYWFjdXRlID0gNDQ0O1xuICAgIHQuVWNpcmN1bWZsZXggPSA3MjI7XG4gICAgdC55YWN1dGUgPSA1MDA7XG4gICAgdC5zY29tbWFhY2NlbnQgPSAzODk7XG4gICAgdC5lY2lyY3VtZmxleCA9IDQ0NDtcbiAgICB0LlVyaW5nID0gNzIyO1xuICAgIHQuVWRpZXJlc2lzID0gNzIyO1xuICAgIHQuYW9nb25layA9IDQ0NDtcbiAgICB0LlVhY3V0ZSA9IDcyMjtcbiAgICB0LnVvZ29uZWsgPSA1MDA7XG4gICAgdC5FZGllcmVzaXMgPSA2MTE7XG4gICAgdC5EY3JvYXQgPSA3MjI7XG4gICAgdC5jb21tYWFjY2VudCA9IDI1MDtcbiAgICB0LmNvcHlyaWdodCA9IDc2MDtcbiAgICB0LkVtYWNyb24gPSA2MTE7XG4gICAgdC5jY2Fyb24gPSA0NDQ7XG4gICAgdC5hcmluZyA9IDQ0NDtcbiAgICB0Lk5jb21tYWFjY2VudCA9IDcyMjtcbiAgICB0LmxhY3V0ZSA9IDI3ODtcbiAgICB0LmFncmF2ZSA9IDQ0NDtcbiAgICB0LlRjb21tYWFjY2VudCA9IDYxMTtcbiAgICB0LkNhY3V0ZSA9IDY2NztcbiAgICB0LmF0aWxkZSA9IDQ0NDtcbiAgICB0LkVkb3RhY2NlbnQgPSA2MTE7XG4gICAgdC5zY2Fyb24gPSAzODk7XG4gICAgdC5zY2VkaWxsYSA9IDM4OTtcbiAgICB0LmlhY3V0ZSA9IDI3ODtcbiAgICB0LmxvemVuZ2UgPSA0NzE7XG4gICAgdC5SY2Fyb24gPSA2Njc7XG4gICAgdC5HY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC51Y2lyY3VtZmxleCA9IDUwMDtcbiAgICB0LmFjaXJjdW1mbGV4ID0gNDQ0O1xuICAgIHQuQW1hY3JvbiA9IDcyMjtcbiAgICB0LnJjYXJvbiA9IDMzMztcbiAgICB0LmNjZWRpbGxhID0gNDQ0O1xuICAgIHQuWmRvdGFjY2VudCA9IDYxMTtcbiAgICB0LlRob3JuID0gNTU2O1xuICAgIHQuT21hY3JvbiA9IDcyMjtcbiAgICB0LlJhY3V0ZSA9IDY2NztcbiAgICB0LlNhY3V0ZSA9IDU1NjtcbiAgICB0LmRjYXJvbiA9IDU4ODtcbiAgICB0LlVtYWNyb24gPSA3MjI7XG4gICAgdC51cmluZyA9IDUwMDtcbiAgICB0LnRocmVlc3VwZXJpb3IgPSAzMDA7XG4gICAgdC5PZ3JhdmUgPSA3MjI7XG4gICAgdC5BZ3JhdmUgPSA3MjI7XG4gICAgdC5BYnJldmUgPSA3MjI7XG4gICAgdC5tdWx0aXBseSA9IDU2NDtcbiAgICB0LnVhY3V0ZSA9IDUwMDtcbiAgICB0LlRjYXJvbiA9IDYxMTtcbiAgICB0LnBhcnRpYWxkaWZmID0gNDc2O1xuICAgIHQueWRpZXJlc2lzID0gNTAwO1xuICAgIHQuTmFjdXRlID0gNzIyO1xuICAgIHQuaWNpcmN1bWZsZXggPSAyNzg7XG4gICAgdC5FY2lyY3VtZmxleCA9IDYxMTtcbiAgICB0LmFkaWVyZXNpcyA9IDQ0NDtcbiAgICB0LmVkaWVyZXNpcyA9IDQ0NDtcbiAgICB0LmNhY3V0ZSA9IDQ0NDtcbiAgICB0Lm5hY3V0ZSA9IDUwMDtcbiAgICB0LnVtYWNyb24gPSA1MDA7XG4gICAgdC5OY2Fyb24gPSA3MjI7XG4gICAgdC5JYWN1dGUgPSAzMzM7XG4gICAgdC5wbHVzbWludXMgPSA1NjQ7XG4gICAgdC5icm9rZW5iYXIgPSAyMDA7XG4gICAgdC5yZWdpc3RlcmVkID0gNzYwO1xuICAgIHQuR2JyZXZlID0gNzIyO1xuICAgIHQuSWRvdGFjY2VudCA9IDMzMztcbiAgICB0LnN1bW1hdGlvbiA9IDYwMDtcbiAgICB0LkVncmF2ZSA9IDYxMTtcbiAgICB0LnJhY3V0ZSA9IDMzMztcbiAgICB0Lm9tYWNyb24gPSA1MDA7XG4gICAgdC5aYWN1dGUgPSA2MTE7XG4gICAgdC5aY2Fyb24gPSA2MTE7XG4gICAgdC5ncmVhdGVyZXF1YWwgPSA1NDk7XG4gICAgdC5FdGggPSA3MjI7XG4gICAgdC5DY2VkaWxsYSA9IDY2NztcbiAgICB0Lmxjb21tYWFjY2VudCA9IDI3ODtcbiAgICB0LnRjYXJvbiA9IDMyNjtcbiAgICB0LmVvZ29uZWsgPSA0NDQ7XG4gICAgdC5Vb2dvbmVrID0gNzIyO1xuICAgIHQuQWFjdXRlID0gNzIyO1xuICAgIHQuQWRpZXJlc2lzID0gNzIyO1xuICAgIHQuZWdyYXZlID0gNDQ0O1xuICAgIHQuemFjdXRlID0gNDQ0O1xuICAgIHQuaW9nb25layA9IDI3ODtcbiAgICB0Lk9hY3V0ZSA9IDcyMjtcbiAgICB0Lm9hY3V0ZSA9IDUwMDtcbiAgICB0LmFtYWNyb24gPSA0NDQ7XG4gICAgdC5zYWN1dGUgPSAzODk7XG4gICAgdC5pZGllcmVzaXMgPSAyNzg7XG4gICAgdC5PY2lyY3VtZmxleCA9IDcyMjtcbiAgICB0LlVncmF2ZSA9IDcyMjtcbiAgICB0LkRlbHRhID0gNjEyO1xuICAgIHQudGhvcm4gPSA1MDA7XG4gICAgdC50d29zdXBlcmlvciA9IDMwMDtcbiAgICB0Lk9kaWVyZXNpcyA9IDcyMjtcbiAgICB0Lm11ID0gNTAwO1xuICAgIHQuaWdyYXZlID0gMjc4O1xuICAgIHQub2h1bmdhcnVtbGF1dCA9IDUwMDtcbiAgICB0LkVvZ29uZWsgPSA2MTE7XG4gICAgdC5kY3JvYXQgPSA1MDA7XG4gICAgdC50aHJlZXF1YXJ0ZXJzID0gNzUwO1xuICAgIHQuU2NlZGlsbGEgPSA1NTY7XG4gICAgdC5sY2Fyb24gPSAzNDQ7XG4gICAgdC5LY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC5MYWN1dGUgPSA2MTE7XG4gICAgdC50cmFkZW1hcmsgPSA5ODA7XG4gICAgdC5lZG90YWNjZW50ID0gNDQ0O1xuICAgIHQuSWdyYXZlID0gMzMzO1xuICAgIHQuSW1hY3JvbiA9IDMzMztcbiAgICB0LkxjYXJvbiA9IDYxMTtcbiAgICB0Lm9uZWhhbGYgPSA3NTA7XG4gICAgdC5sZXNzZXF1YWwgPSA1NDk7XG4gICAgdC5vY2lyY3VtZmxleCA9IDUwMDtcbiAgICB0Lm50aWxkZSA9IDUwMDtcbiAgICB0LlVodW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5FYWN1dGUgPSA2MTE7XG4gICAgdC5lbWFjcm9uID0gNDQ0O1xuICAgIHQuZ2JyZXZlID0gNTAwO1xuICAgIHQub25lcXVhcnRlciA9IDc1MDtcbiAgICB0LlNjYXJvbiA9IDU1NjtcbiAgICB0LlNjb21tYWFjY2VudCA9IDU1NjtcbiAgICB0Lk9odW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5kZWdyZWUgPSA0MDA7XG4gICAgdC5vZ3JhdmUgPSA1MDA7XG4gICAgdC5DY2Fyb24gPSA2Njc7XG4gICAgdC51Z3JhdmUgPSA1MDA7XG4gICAgdC5yYWRpY2FsID0gNDUzO1xuICAgIHQuRGNhcm9uID0gNzIyO1xuICAgIHQucmNvbW1hYWNjZW50ID0gMzMzO1xuICAgIHQuTnRpbGRlID0gNzIyO1xuICAgIHQub3RpbGRlID0gNTAwO1xuICAgIHQuUmNvbW1hYWNjZW50ID0gNjY3O1xuICAgIHQuTGNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuQXRpbGRlID0gNzIyO1xuICAgIHQuQW9nb25layA9IDcyMjtcbiAgICB0LkFyaW5nID0gNzIyO1xuICAgIHQuT3RpbGRlID0gNzIyO1xuICAgIHQuemRvdGFjY2VudCA9IDQ0NDtcbiAgICB0LkVjYXJvbiA9IDYxMTtcbiAgICB0LklvZ29uZWsgPSAzMzM7XG4gICAgdC5rY29tbWFhY2NlbnQgPSA1MDA7XG4gICAgdC5taW51cyA9IDU2NDtcbiAgICB0LkljaXJjdW1mbGV4ID0gMzMzO1xuICAgIHQubmNhcm9uID0gNTAwO1xuICAgIHQudGNvbW1hYWNjZW50ID0gMjc4O1xuICAgIHQubG9naWNhbG5vdCA9IDU2NDtcbiAgICB0Lm9kaWVyZXNpcyA9IDUwMDtcbiAgICB0LnVkaWVyZXNpcyA9IDUwMDtcbiAgICB0Lm5vdGVxdWFsID0gNTQ5O1xuICAgIHQuZ2NvbW1hYWNjZW50ID0gNTAwO1xuICAgIHQuZXRoID0gNTAwO1xuICAgIHQuemNhcm9uID0gNDQ0O1xuICAgIHQubmNvbW1hYWNjZW50ID0gNTAwO1xuICAgIHQub25lc3VwZXJpb3IgPSAzMDA7XG4gICAgdC5pbWFjcm9uID0gMjc4O1xuICAgIHQuRXVybyA9IDUwMDtcbiAgfSk7XG4gIHRbXCJUaW1lcy1Cb2xkXCJdID0gKDAsIF9jb3JlX3V0aWxzLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICB0LnNwYWNlID0gMjUwO1xuICAgIHQuZXhjbGFtID0gMzMzO1xuICAgIHQucXVvdGVkYmwgPSA1NTU7XG4gICAgdC5udW1iZXJzaWduID0gNTAwO1xuICAgIHQuZG9sbGFyID0gNTAwO1xuICAgIHQucGVyY2VudCA9IDEwMDA7XG4gICAgdC5hbXBlcnNhbmQgPSA4MzM7XG4gICAgdC5xdW90ZXJpZ2h0ID0gMzMzO1xuICAgIHQucGFyZW5sZWZ0ID0gMzMzO1xuICAgIHQucGFyZW5yaWdodCA9IDMzMztcbiAgICB0LmFzdGVyaXNrID0gNTAwO1xuICAgIHQucGx1cyA9IDU3MDtcbiAgICB0LmNvbW1hID0gMjUwO1xuICAgIHQuaHlwaGVuID0gMzMzO1xuICAgIHQucGVyaW9kID0gMjUwO1xuICAgIHQuc2xhc2ggPSAyNzg7XG4gICAgdC56ZXJvID0gNTAwO1xuICAgIHQub25lID0gNTAwO1xuICAgIHQudHdvID0gNTAwO1xuICAgIHQudGhyZWUgPSA1MDA7XG4gICAgdC5mb3VyID0gNTAwO1xuICAgIHQuZml2ZSA9IDUwMDtcbiAgICB0LnNpeCA9IDUwMDtcbiAgICB0LnNldmVuID0gNTAwO1xuICAgIHQuZWlnaHQgPSA1MDA7XG4gICAgdC5uaW5lID0gNTAwO1xuICAgIHQuY29sb24gPSAzMzM7XG4gICAgdC5zZW1pY29sb24gPSAzMzM7XG4gICAgdC5sZXNzID0gNTcwO1xuICAgIHQuZXF1YWwgPSA1NzA7XG4gICAgdC5ncmVhdGVyID0gNTcwO1xuICAgIHQucXVlc3Rpb24gPSA1MDA7XG4gICAgdC5hdCA9IDkzMDtcbiAgICB0LkEgPSA3MjI7XG4gICAgdC5CID0gNjY3O1xuICAgIHQuQyA9IDcyMjtcbiAgICB0LkQgPSA3MjI7XG4gICAgdC5FID0gNjY3O1xuICAgIHQuRiA9IDYxMTtcbiAgICB0LkcgPSA3Nzg7XG4gICAgdC5IID0gNzc4O1xuICAgIHQuSSA9IDM4OTtcbiAgICB0LkogPSA1MDA7XG4gICAgdC5LID0gNzc4O1xuICAgIHQuTCA9IDY2NztcbiAgICB0Lk0gPSA5NDQ7XG4gICAgdC5OID0gNzIyO1xuICAgIHQuTyA9IDc3ODtcbiAgICB0LlAgPSA2MTE7XG4gICAgdC5RID0gNzc4O1xuICAgIHQuUiA9IDcyMjtcbiAgICB0LlMgPSA1NTY7XG4gICAgdC5UID0gNjY3O1xuICAgIHQuVSA9IDcyMjtcbiAgICB0LlYgPSA3MjI7XG4gICAgdC5XID0gMTAwMDtcbiAgICB0LlggPSA3MjI7XG4gICAgdC5ZID0gNzIyO1xuICAgIHQuWiA9IDY2NztcbiAgICB0LmJyYWNrZXRsZWZ0ID0gMzMzO1xuICAgIHQuYmFja3NsYXNoID0gMjc4O1xuICAgIHQuYnJhY2tldHJpZ2h0ID0gMzMzO1xuICAgIHQuYXNjaWljaXJjdW0gPSA1ODE7XG4gICAgdC51bmRlcnNjb3JlID0gNTAwO1xuICAgIHQucXVvdGVsZWZ0ID0gMzMzO1xuICAgIHQuYSA9IDUwMDtcbiAgICB0LmIgPSA1NTY7XG4gICAgdC5jID0gNDQ0O1xuICAgIHQuZCA9IDU1NjtcbiAgICB0LmUgPSA0NDQ7XG4gICAgdC5mID0gMzMzO1xuICAgIHQuZyA9IDUwMDtcbiAgICB0LmggPSA1NTY7XG4gICAgdC5pID0gMjc4O1xuICAgIHQuaiA9IDMzMztcbiAgICB0LmsgPSA1NTY7XG4gICAgdC5sID0gMjc4O1xuICAgIHQubSA9IDgzMztcbiAgICB0Lm4gPSA1NTY7XG4gICAgdC5vID0gNTAwO1xuICAgIHQucCA9IDU1NjtcbiAgICB0LnEgPSA1NTY7XG4gICAgdC5yID0gNDQ0O1xuICAgIHQucyA9IDM4OTtcbiAgICB0LnQgPSAzMzM7XG4gICAgdC51ID0gNTU2O1xuICAgIHQudiA9IDUwMDtcbiAgICB0LncgPSA3MjI7XG4gICAgdC54ID0gNTAwO1xuICAgIHQueSA9IDUwMDtcbiAgICB0LnogPSA0NDQ7XG4gICAgdC5icmFjZWxlZnQgPSAzOTQ7XG4gICAgdC5iYXIgPSAyMjA7XG4gICAgdC5icmFjZXJpZ2h0ID0gMzk0O1xuICAgIHQuYXNjaWl0aWxkZSA9IDUyMDtcbiAgICB0LmV4Y2xhbWRvd24gPSAzMzM7XG4gICAgdC5jZW50ID0gNTAwO1xuICAgIHQuc3RlcmxpbmcgPSA1MDA7XG4gICAgdC5mcmFjdGlvbiA9IDE2NztcbiAgICB0LnllbiA9IDUwMDtcbiAgICB0LmZsb3JpbiA9IDUwMDtcbiAgICB0LnNlY3Rpb24gPSA1MDA7XG4gICAgdC5jdXJyZW5jeSA9IDUwMDtcbiAgICB0LnF1b3Rlc2luZ2xlID0gMjc4O1xuICAgIHQucXVvdGVkYmxsZWZ0ID0gNTAwO1xuICAgIHQuZ3VpbGxlbW90bGVmdCA9IDUwMDtcbiAgICB0Lmd1aWxzaW5nbGxlZnQgPSAzMzM7XG4gICAgdC5ndWlsc2luZ2xyaWdodCA9IDMzMztcbiAgICB0LmZpID0gNTU2O1xuICAgIHQuZmwgPSA1NTY7XG4gICAgdC5lbmRhc2ggPSA1MDA7XG4gICAgdC5kYWdnZXIgPSA1MDA7XG4gICAgdC5kYWdnZXJkYmwgPSA1MDA7XG4gICAgdC5wZXJpb2RjZW50ZXJlZCA9IDI1MDtcbiAgICB0LnBhcmFncmFwaCA9IDU0MDtcbiAgICB0LmJ1bGxldCA9IDM1MDtcbiAgICB0LnF1b3Rlc2luZ2xiYXNlID0gMzMzO1xuICAgIHQucXVvdGVkYmxiYXNlID0gNTAwO1xuICAgIHQucXVvdGVkYmxyaWdodCA9IDUwMDtcbiAgICB0Lmd1aWxsZW1vdHJpZ2h0ID0gNTAwO1xuICAgIHQuZWxsaXBzaXMgPSAxMDAwO1xuICAgIHQucGVydGhvdXNhbmQgPSAxMDAwO1xuICAgIHQucXVlc3Rpb25kb3duID0gNTAwO1xuICAgIHQuZ3JhdmUgPSAzMzM7XG4gICAgdC5hY3V0ZSA9IDMzMztcbiAgICB0LmNpcmN1bWZsZXggPSAzMzM7XG4gICAgdC50aWxkZSA9IDMzMztcbiAgICB0Lm1hY3JvbiA9IDMzMztcbiAgICB0LmJyZXZlID0gMzMzO1xuICAgIHQuZG90YWNjZW50ID0gMzMzO1xuICAgIHQuZGllcmVzaXMgPSAzMzM7XG4gICAgdC5yaW5nID0gMzMzO1xuICAgIHQuY2VkaWxsYSA9IDMzMztcbiAgICB0Lmh1bmdhcnVtbGF1dCA9IDMzMztcbiAgICB0Lm9nb25layA9IDMzMztcbiAgICB0LmNhcm9uID0gMzMzO1xuICAgIHQuZW1kYXNoID0gMTAwMDtcbiAgICB0LkFFID0gMTAwMDtcbiAgICB0Lm9yZGZlbWluaW5lID0gMzAwO1xuICAgIHQuTHNsYXNoID0gNjY3O1xuICAgIHQuT3NsYXNoID0gNzc4O1xuICAgIHQuT0UgPSAxMDAwO1xuICAgIHQub3JkbWFzY3VsaW5lID0gMzMwO1xuICAgIHQuYWUgPSA3MjI7XG4gICAgdC5kb3RsZXNzaSA9IDI3ODtcbiAgICB0LmxzbGFzaCA9IDI3ODtcbiAgICB0Lm9zbGFzaCA9IDUwMDtcbiAgICB0Lm9lID0gNzIyO1xuICAgIHQuZ2VybWFuZGJscyA9IDU1NjtcbiAgICB0LklkaWVyZXNpcyA9IDM4OTtcbiAgICB0LmVhY3V0ZSA9IDQ0NDtcbiAgICB0LmFicmV2ZSA9IDUwMDtcbiAgICB0LnVodW5nYXJ1bWxhdXQgPSA1NTY7XG4gICAgdC5lY2Fyb24gPSA0NDQ7XG4gICAgdC5ZZGllcmVzaXMgPSA3MjI7XG4gICAgdC5kaXZpZGUgPSA1NzA7XG4gICAgdC5ZYWN1dGUgPSA3MjI7XG4gICAgdC5BY2lyY3VtZmxleCA9IDcyMjtcbiAgICB0LmFhY3V0ZSA9IDUwMDtcbiAgICB0LlVjaXJjdW1mbGV4ID0gNzIyO1xuICAgIHQueWFjdXRlID0gNTAwO1xuICAgIHQuc2NvbW1hYWNjZW50ID0gMzg5O1xuICAgIHQuZWNpcmN1bWZsZXggPSA0NDQ7XG4gICAgdC5VcmluZyA9IDcyMjtcbiAgICB0LlVkaWVyZXNpcyA9IDcyMjtcbiAgICB0LmFvZ29uZWsgPSA1MDA7XG4gICAgdC5VYWN1dGUgPSA3MjI7XG4gICAgdC51b2dvbmVrID0gNTU2O1xuICAgIHQuRWRpZXJlc2lzID0gNjY3O1xuICAgIHQuRGNyb2F0ID0gNzIyO1xuICAgIHQuY29tbWFhY2NlbnQgPSAyNTA7XG4gICAgdC5jb3B5cmlnaHQgPSA3NDc7XG4gICAgdC5FbWFjcm9uID0gNjY3O1xuICAgIHQuY2Nhcm9uID0gNDQ0O1xuICAgIHQuYXJpbmcgPSA1MDA7XG4gICAgdC5OY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC5sYWN1dGUgPSAyNzg7XG4gICAgdC5hZ3JhdmUgPSA1MDA7XG4gICAgdC5UY29tbWFhY2NlbnQgPSA2Njc7XG4gICAgdC5DYWN1dGUgPSA3MjI7XG4gICAgdC5hdGlsZGUgPSA1MDA7XG4gICAgdC5FZG90YWNjZW50ID0gNjY3O1xuICAgIHQuc2Nhcm9uID0gMzg5O1xuICAgIHQuc2NlZGlsbGEgPSAzODk7XG4gICAgdC5pYWN1dGUgPSAyNzg7XG4gICAgdC5sb3plbmdlID0gNDk0O1xuICAgIHQuUmNhcm9uID0gNzIyO1xuICAgIHQuR2NvbW1hYWNjZW50ID0gNzc4O1xuICAgIHQudWNpcmN1bWZsZXggPSA1NTY7XG4gICAgdC5hY2lyY3VtZmxleCA9IDUwMDtcbiAgICB0LkFtYWNyb24gPSA3MjI7XG4gICAgdC5yY2Fyb24gPSA0NDQ7XG4gICAgdC5jY2VkaWxsYSA9IDQ0NDtcbiAgICB0Llpkb3RhY2NlbnQgPSA2Njc7XG4gICAgdC5UaG9ybiA9IDYxMTtcbiAgICB0Lk9tYWNyb24gPSA3Nzg7XG4gICAgdC5SYWN1dGUgPSA3MjI7XG4gICAgdC5TYWN1dGUgPSA1NTY7XG4gICAgdC5kY2Fyb24gPSA2NzI7XG4gICAgdC5VbWFjcm9uID0gNzIyO1xuICAgIHQudXJpbmcgPSA1NTY7XG4gICAgdC50aHJlZXN1cGVyaW9yID0gMzAwO1xuICAgIHQuT2dyYXZlID0gNzc4O1xuICAgIHQuQWdyYXZlID0gNzIyO1xuICAgIHQuQWJyZXZlID0gNzIyO1xuICAgIHQubXVsdGlwbHkgPSA1NzA7XG4gICAgdC51YWN1dGUgPSA1NTY7XG4gICAgdC5UY2Fyb24gPSA2Njc7XG4gICAgdC5wYXJ0aWFsZGlmZiA9IDQ5NDtcbiAgICB0LnlkaWVyZXNpcyA9IDUwMDtcbiAgICB0Lk5hY3V0ZSA9IDcyMjtcbiAgICB0LmljaXJjdW1mbGV4ID0gMjc4O1xuICAgIHQuRWNpcmN1bWZsZXggPSA2Njc7XG4gICAgdC5hZGllcmVzaXMgPSA1MDA7XG4gICAgdC5lZGllcmVzaXMgPSA0NDQ7XG4gICAgdC5jYWN1dGUgPSA0NDQ7XG4gICAgdC5uYWN1dGUgPSA1NTY7XG4gICAgdC51bWFjcm9uID0gNTU2O1xuICAgIHQuTmNhcm9uID0gNzIyO1xuICAgIHQuSWFjdXRlID0gMzg5O1xuICAgIHQucGx1c21pbnVzID0gNTcwO1xuICAgIHQuYnJva2VuYmFyID0gMjIwO1xuICAgIHQucmVnaXN0ZXJlZCA9IDc0NztcbiAgICB0LkdicmV2ZSA9IDc3ODtcbiAgICB0Lklkb3RhY2NlbnQgPSAzODk7XG4gICAgdC5zdW1tYXRpb24gPSA2MDA7XG4gICAgdC5FZ3JhdmUgPSA2Njc7XG4gICAgdC5yYWN1dGUgPSA0NDQ7XG4gICAgdC5vbWFjcm9uID0gNTAwO1xuICAgIHQuWmFjdXRlID0gNjY3O1xuICAgIHQuWmNhcm9uID0gNjY3O1xuICAgIHQuZ3JlYXRlcmVxdWFsID0gNTQ5O1xuICAgIHQuRXRoID0gNzIyO1xuICAgIHQuQ2NlZGlsbGEgPSA3MjI7XG4gICAgdC5sY29tbWFhY2NlbnQgPSAyNzg7XG4gICAgdC50Y2Fyb24gPSA0MTY7XG4gICAgdC5lb2dvbmVrID0gNDQ0O1xuICAgIHQuVW9nb25layA9IDcyMjtcbiAgICB0LkFhY3V0ZSA9IDcyMjtcbiAgICB0LkFkaWVyZXNpcyA9IDcyMjtcbiAgICB0LmVncmF2ZSA9IDQ0NDtcbiAgICB0LnphY3V0ZSA9IDQ0NDtcbiAgICB0LmlvZ29uZWsgPSAyNzg7XG4gICAgdC5PYWN1dGUgPSA3Nzg7XG4gICAgdC5vYWN1dGUgPSA1MDA7XG4gICAgdC5hbWFjcm9uID0gNTAwO1xuICAgIHQuc2FjdXRlID0gMzg5O1xuICAgIHQuaWRpZXJlc2lzID0gMjc4O1xuICAgIHQuT2NpcmN1bWZsZXggPSA3Nzg7XG4gICAgdC5VZ3JhdmUgPSA3MjI7XG4gICAgdC5EZWx0YSA9IDYxMjtcbiAgICB0LnRob3JuID0gNTU2O1xuICAgIHQudHdvc3VwZXJpb3IgPSAzMDA7XG4gICAgdC5PZGllcmVzaXMgPSA3Nzg7XG4gICAgdC5tdSA9IDU1NjtcbiAgICB0LmlncmF2ZSA9IDI3ODtcbiAgICB0Lm9odW5nYXJ1bWxhdXQgPSA1MDA7XG4gICAgdC5Fb2dvbmVrID0gNjY3O1xuICAgIHQuZGNyb2F0ID0gNTU2O1xuICAgIHQudGhyZWVxdWFydGVycyA9IDc1MDtcbiAgICB0LlNjZWRpbGxhID0gNTU2O1xuICAgIHQubGNhcm9uID0gMzk0O1xuICAgIHQuS2NvbW1hYWNjZW50ID0gNzc4O1xuICAgIHQuTGFjdXRlID0gNjY3O1xuICAgIHQudHJhZGVtYXJrID0gMTAwMDtcbiAgICB0LmVkb3RhY2NlbnQgPSA0NDQ7XG4gICAgdC5JZ3JhdmUgPSAzODk7XG4gICAgdC5JbWFjcm9uID0gMzg5O1xuICAgIHQuTGNhcm9uID0gNjY3O1xuICAgIHQub25laGFsZiA9IDc1MDtcbiAgICB0Lmxlc3NlcXVhbCA9IDU0OTtcbiAgICB0Lm9jaXJjdW1mbGV4ID0gNTAwO1xuICAgIHQubnRpbGRlID0gNTU2O1xuICAgIHQuVWh1bmdhcnVtbGF1dCA9IDcyMjtcbiAgICB0LkVhY3V0ZSA9IDY2NztcbiAgICB0LmVtYWNyb24gPSA0NDQ7XG4gICAgdC5nYnJldmUgPSA1MDA7XG4gICAgdC5vbmVxdWFydGVyID0gNzUwO1xuICAgIHQuU2Nhcm9uID0gNTU2O1xuICAgIHQuU2NvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQuT2h1bmdhcnVtbGF1dCA9IDc3ODtcbiAgICB0LmRlZ3JlZSA9IDQwMDtcbiAgICB0Lm9ncmF2ZSA9IDUwMDtcbiAgICB0LkNjYXJvbiA9IDcyMjtcbiAgICB0LnVncmF2ZSA9IDU1NjtcbiAgICB0LnJhZGljYWwgPSA1NDk7XG4gICAgdC5EY2Fyb24gPSA3MjI7XG4gICAgdC5yY29tbWFhY2NlbnQgPSA0NDQ7XG4gICAgdC5OdGlsZGUgPSA3MjI7XG4gICAgdC5vdGlsZGUgPSA1MDA7XG4gICAgdC5SY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC5MY29tbWFhY2NlbnQgPSA2Njc7XG4gICAgdC5BdGlsZGUgPSA3MjI7XG4gICAgdC5Bb2dvbmVrID0gNzIyO1xuICAgIHQuQXJpbmcgPSA3MjI7XG4gICAgdC5PdGlsZGUgPSA3Nzg7XG4gICAgdC56ZG90YWNjZW50ID0gNDQ0O1xuICAgIHQuRWNhcm9uID0gNjY3O1xuICAgIHQuSW9nb25layA9IDM4OTtcbiAgICB0Lmtjb21tYWFjY2VudCA9IDU1NjtcbiAgICB0Lm1pbnVzID0gNTcwO1xuICAgIHQuSWNpcmN1bWZsZXggPSAzODk7XG4gICAgdC5uY2Fyb24gPSA1NTY7XG4gICAgdC50Y29tbWFhY2NlbnQgPSAzMzM7XG4gICAgdC5sb2dpY2Fsbm90ID0gNTcwO1xuICAgIHQub2RpZXJlc2lzID0gNTAwO1xuICAgIHQudWRpZXJlc2lzID0gNTU2O1xuICAgIHQubm90ZXF1YWwgPSA1NDk7XG4gICAgdC5nY29tbWFhY2NlbnQgPSA1MDA7XG4gICAgdC5ldGggPSA1MDA7XG4gICAgdC56Y2Fyb24gPSA0NDQ7XG4gICAgdC5uY29tbWFhY2NlbnQgPSA1NTY7XG4gICAgdC5vbmVzdXBlcmlvciA9IDMwMDtcbiAgICB0LmltYWNyb24gPSAyNzg7XG4gICAgdC5FdXJvID0gNTAwO1xuICB9KTtcbiAgdFtcIlRpbWVzLUJvbGRJdGFsaWNcIl0gPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgIHQuc3BhY2UgPSAyNTA7XG4gICAgdC5leGNsYW0gPSAzODk7XG4gICAgdC5xdW90ZWRibCA9IDU1NTtcbiAgICB0Lm51bWJlcnNpZ24gPSA1MDA7XG4gICAgdC5kb2xsYXIgPSA1MDA7XG4gICAgdC5wZXJjZW50ID0gODMzO1xuICAgIHQuYW1wZXJzYW5kID0gNzc4O1xuICAgIHQucXVvdGVyaWdodCA9IDMzMztcbiAgICB0LnBhcmVubGVmdCA9IDMzMztcbiAgICB0LnBhcmVucmlnaHQgPSAzMzM7XG4gICAgdC5hc3RlcmlzayA9IDUwMDtcbiAgICB0LnBsdXMgPSA1NzA7XG4gICAgdC5jb21tYSA9IDI1MDtcbiAgICB0Lmh5cGhlbiA9IDMzMztcbiAgICB0LnBlcmlvZCA9IDI1MDtcbiAgICB0LnNsYXNoID0gMjc4O1xuICAgIHQuemVybyA9IDUwMDtcbiAgICB0Lm9uZSA9IDUwMDtcbiAgICB0LnR3byA9IDUwMDtcbiAgICB0LnRocmVlID0gNTAwO1xuICAgIHQuZm91ciA9IDUwMDtcbiAgICB0LmZpdmUgPSA1MDA7XG4gICAgdC5zaXggPSA1MDA7XG4gICAgdC5zZXZlbiA9IDUwMDtcbiAgICB0LmVpZ2h0ID0gNTAwO1xuICAgIHQubmluZSA9IDUwMDtcbiAgICB0LmNvbG9uID0gMzMzO1xuICAgIHQuc2VtaWNvbG9uID0gMzMzO1xuICAgIHQubGVzcyA9IDU3MDtcbiAgICB0LmVxdWFsID0gNTcwO1xuICAgIHQuZ3JlYXRlciA9IDU3MDtcbiAgICB0LnF1ZXN0aW9uID0gNTAwO1xuICAgIHQuYXQgPSA4MzI7XG4gICAgdC5BID0gNjY3O1xuICAgIHQuQiA9IDY2NztcbiAgICB0LkMgPSA2Njc7XG4gICAgdC5EID0gNzIyO1xuICAgIHQuRSA9IDY2NztcbiAgICB0LkYgPSA2Njc7XG4gICAgdC5HID0gNzIyO1xuICAgIHQuSCA9IDc3ODtcbiAgICB0LkkgPSAzODk7XG4gICAgdC5KID0gNTAwO1xuICAgIHQuSyA9IDY2NztcbiAgICB0LkwgPSA2MTE7XG4gICAgdC5NID0gODg5O1xuICAgIHQuTiA9IDcyMjtcbiAgICB0Lk8gPSA3MjI7XG4gICAgdC5QID0gNjExO1xuICAgIHQuUSA9IDcyMjtcbiAgICB0LlIgPSA2Njc7XG4gICAgdC5TID0gNTU2O1xuICAgIHQuVCA9IDYxMTtcbiAgICB0LlUgPSA3MjI7XG4gICAgdC5WID0gNjY3O1xuICAgIHQuVyA9IDg4OTtcbiAgICB0LlggPSA2Njc7XG4gICAgdC5ZID0gNjExO1xuICAgIHQuWiA9IDYxMTtcbiAgICB0LmJyYWNrZXRsZWZ0ID0gMzMzO1xuICAgIHQuYmFja3NsYXNoID0gMjc4O1xuICAgIHQuYnJhY2tldHJpZ2h0ID0gMzMzO1xuICAgIHQuYXNjaWljaXJjdW0gPSA1NzA7XG4gICAgdC51bmRlcnNjb3JlID0gNTAwO1xuICAgIHQucXVvdGVsZWZ0ID0gMzMzO1xuICAgIHQuYSA9IDUwMDtcbiAgICB0LmIgPSA1MDA7XG4gICAgdC5jID0gNDQ0O1xuICAgIHQuZCA9IDUwMDtcbiAgICB0LmUgPSA0NDQ7XG4gICAgdC5mID0gMzMzO1xuICAgIHQuZyA9IDUwMDtcbiAgICB0LmggPSA1NTY7XG4gICAgdC5pID0gMjc4O1xuICAgIHQuaiA9IDI3ODtcbiAgICB0LmsgPSA1MDA7XG4gICAgdC5sID0gMjc4O1xuICAgIHQubSA9IDc3ODtcbiAgICB0Lm4gPSA1NTY7XG4gICAgdC5vID0gNTAwO1xuICAgIHQucCA9IDUwMDtcbiAgICB0LnEgPSA1MDA7XG4gICAgdC5yID0gMzg5O1xuICAgIHQucyA9IDM4OTtcbiAgICB0LnQgPSAyNzg7XG4gICAgdC51ID0gNTU2O1xuICAgIHQudiA9IDQ0NDtcbiAgICB0LncgPSA2Njc7XG4gICAgdC54ID0gNTAwO1xuICAgIHQueSA9IDQ0NDtcbiAgICB0LnogPSAzODk7XG4gICAgdC5icmFjZWxlZnQgPSAzNDg7XG4gICAgdC5iYXIgPSAyMjA7XG4gICAgdC5icmFjZXJpZ2h0ID0gMzQ4O1xuICAgIHQuYXNjaWl0aWxkZSA9IDU3MDtcbiAgICB0LmV4Y2xhbWRvd24gPSAzODk7XG4gICAgdC5jZW50ID0gNTAwO1xuICAgIHQuc3RlcmxpbmcgPSA1MDA7XG4gICAgdC5mcmFjdGlvbiA9IDE2NztcbiAgICB0LnllbiA9IDUwMDtcbiAgICB0LmZsb3JpbiA9IDUwMDtcbiAgICB0LnNlY3Rpb24gPSA1MDA7XG4gICAgdC5jdXJyZW5jeSA9IDUwMDtcbiAgICB0LnF1b3Rlc2luZ2xlID0gMjc4O1xuICAgIHQucXVvdGVkYmxsZWZ0ID0gNTAwO1xuICAgIHQuZ3VpbGxlbW90bGVmdCA9IDUwMDtcbiAgICB0Lmd1aWxzaW5nbGxlZnQgPSAzMzM7XG4gICAgdC5ndWlsc2luZ2xyaWdodCA9IDMzMztcbiAgICB0LmZpID0gNTU2O1xuICAgIHQuZmwgPSA1NTY7XG4gICAgdC5lbmRhc2ggPSA1MDA7XG4gICAgdC5kYWdnZXIgPSA1MDA7XG4gICAgdC5kYWdnZXJkYmwgPSA1MDA7XG4gICAgdC5wZXJpb2RjZW50ZXJlZCA9IDI1MDtcbiAgICB0LnBhcmFncmFwaCA9IDUwMDtcbiAgICB0LmJ1bGxldCA9IDM1MDtcbiAgICB0LnF1b3Rlc2luZ2xiYXNlID0gMzMzO1xuICAgIHQucXVvdGVkYmxiYXNlID0gNTAwO1xuICAgIHQucXVvdGVkYmxyaWdodCA9IDUwMDtcbiAgICB0Lmd1aWxsZW1vdHJpZ2h0ID0gNTAwO1xuICAgIHQuZWxsaXBzaXMgPSAxMDAwO1xuICAgIHQucGVydGhvdXNhbmQgPSAxMDAwO1xuICAgIHQucXVlc3Rpb25kb3duID0gNTAwO1xuICAgIHQuZ3JhdmUgPSAzMzM7XG4gICAgdC5hY3V0ZSA9IDMzMztcbiAgICB0LmNpcmN1bWZsZXggPSAzMzM7XG4gICAgdC50aWxkZSA9IDMzMztcbiAgICB0Lm1hY3JvbiA9IDMzMztcbiAgICB0LmJyZXZlID0gMzMzO1xuICAgIHQuZG90YWNjZW50ID0gMzMzO1xuICAgIHQuZGllcmVzaXMgPSAzMzM7XG4gICAgdC5yaW5nID0gMzMzO1xuICAgIHQuY2VkaWxsYSA9IDMzMztcbiAgICB0Lmh1bmdhcnVtbGF1dCA9IDMzMztcbiAgICB0Lm9nb25layA9IDMzMztcbiAgICB0LmNhcm9uID0gMzMzO1xuICAgIHQuZW1kYXNoID0gMTAwMDtcbiAgICB0LkFFID0gOTQ0O1xuICAgIHQub3JkZmVtaW5pbmUgPSAyNjY7XG4gICAgdC5Mc2xhc2ggPSA2MTE7XG4gICAgdC5Pc2xhc2ggPSA3MjI7XG4gICAgdC5PRSA9IDk0NDtcbiAgICB0Lm9yZG1hc2N1bGluZSA9IDMwMDtcbiAgICB0LmFlID0gNzIyO1xuICAgIHQuZG90bGVzc2kgPSAyNzg7XG4gICAgdC5sc2xhc2ggPSAyNzg7XG4gICAgdC5vc2xhc2ggPSA1MDA7XG4gICAgdC5vZSA9IDcyMjtcbiAgICB0Lmdlcm1hbmRibHMgPSA1MDA7XG4gICAgdC5JZGllcmVzaXMgPSAzODk7XG4gICAgdC5lYWN1dGUgPSA0NDQ7XG4gICAgdC5hYnJldmUgPSA1MDA7XG4gICAgdC51aHVuZ2FydW1sYXV0ID0gNTU2O1xuICAgIHQuZWNhcm9uID0gNDQ0O1xuICAgIHQuWWRpZXJlc2lzID0gNjExO1xuICAgIHQuZGl2aWRlID0gNTcwO1xuICAgIHQuWWFjdXRlID0gNjExO1xuICAgIHQuQWNpcmN1bWZsZXggPSA2Njc7XG4gICAgdC5hYWN1dGUgPSA1MDA7XG4gICAgdC5VY2lyY3VtZmxleCA9IDcyMjtcbiAgICB0LnlhY3V0ZSA9IDQ0NDtcbiAgICB0LnNjb21tYWFjY2VudCA9IDM4OTtcbiAgICB0LmVjaXJjdW1mbGV4ID0gNDQ0O1xuICAgIHQuVXJpbmcgPSA3MjI7XG4gICAgdC5VZGllcmVzaXMgPSA3MjI7XG4gICAgdC5hb2dvbmVrID0gNTAwO1xuICAgIHQuVWFjdXRlID0gNzIyO1xuICAgIHQudW9nb25layA9IDU1NjtcbiAgICB0LkVkaWVyZXNpcyA9IDY2NztcbiAgICB0LkRjcm9hdCA9IDcyMjtcbiAgICB0LmNvbW1hYWNjZW50ID0gMjUwO1xuICAgIHQuY29weXJpZ2h0ID0gNzQ3O1xuICAgIHQuRW1hY3JvbiA9IDY2NztcbiAgICB0LmNjYXJvbiA9IDQ0NDtcbiAgICB0LmFyaW5nID0gNTAwO1xuICAgIHQuTmNvbW1hYWNjZW50ID0gNzIyO1xuICAgIHQubGFjdXRlID0gMjc4O1xuICAgIHQuYWdyYXZlID0gNTAwO1xuICAgIHQuVGNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuQ2FjdXRlID0gNjY3O1xuICAgIHQuYXRpbGRlID0gNTAwO1xuICAgIHQuRWRvdGFjY2VudCA9IDY2NztcbiAgICB0LnNjYXJvbiA9IDM4OTtcbiAgICB0LnNjZWRpbGxhID0gMzg5O1xuICAgIHQuaWFjdXRlID0gMjc4O1xuICAgIHQubG96ZW5nZSA9IDQ5NDtcbiAgICB0LlJjYXJvbiA9IDY2NztcbiAgICB0Lkdjb21tYWFjY2VudCA9IDcyMjtcbiAgICB0LnVjaXJjdW1mbGV4ID0gNTU2O1xuICAgIHQuYWNpcmN1bWZsZXggPSA1MDA7XG4gICAgdC5BbWFjcm9uID0gNjY3O1xuICAgIHQucmNhcm9uID0gMzg5O1xuICAgIHQuY2NlZGlsbGEgPSA0NDQ7XG4gICAgdC5aZG90YWNjZW50ID0gNjExO1xuICAgIHQuVGhvcm4gPSA2MTE7XG4gICAgdC5PbWFjcm9uID0gNzIyO1xuICAgIHQuUmFjdXRlID0gNjY3O1xuICAgIHQuU2FjdXRlID0gNTU2O1xuICAgIHQuZGNhcm9uID0gNjA4O1xuICAgIHQuVW1hY3JvbiA9IDcyMjtcbiAgICB0LnVyaW5nID0gNTU2O1xuICAgIHQudGhyZWVzdXBlcmlvciA9IDMwMDtcbiAgICB0Lk9ncmF2ZSA9IDcyMjtcbiAgICB0LkFncmF2ZSA9IDY2NztcbiAgICB0LkFicmV2ZSA9IDY2NztcbiAgICB0Lm11bHRpcGx5ID0gNTcwO1xuICAgIHQudWFjdXRlID0gNTU2O1xuICAgIHQuVGNhcm9uID0gNjExO1xuICAgIHQucGFydGlhbGRpZmYgPSA0OTQ7XG4gICAgdC55ZGllcmVzaXMgPSA0NDQ7XG4gICAgdC5OYWN1dGUgPSA3MjI7XG4gICAgdC5pY2lyY3VtZmxleCA9IDI3ODtcbiAgICB0LkVjaXJjdW1mbGV4ID0gNjY3O1xuICAgIHQuYWRpZXJlc2lzID0gNTAwO1xuICAgIHQuZWRpZXJlc2lzID0gNDQ0O1xuICAgIHQuY2FjdXRlID0gNDQ0O1xuICAgIHQubmFjdXRlID0gNTU2O1xuICAgIHQudW1hY3JvbiA9IDU1NjtcbiAgICB0Lk5jYXJvbiA9IDcyMjtcbiAgICB0LklhY3V0ZSA9IDM4OTtcbiAgICB0LnBsdXNtaW51cyA9IDU3MDtcbiAgICB0LmJyb2tlbmJhciA9IDIyMDtcbiAgICB0LnJlZ2lzdGVyZWQgPSA3NDc7XG4gICAgdC5HYnJldmUgPSA3MjI7XG4gICAgdC5JZG90YWNjZW50ID0gMzg5O1xuICAgIHQuc3VtbWF0aW9uID0gNjAwO1xuICAgIHQuRWdyYXZlID0gNjY3O1xuICAgIHQucmFjdXRlID0gMzg5O1xuICAgIHQub21hY3JvbiA9IDUwMDtcbiAgICB0LlphY3V0ZSA9IDYxMTtcbiAgICB0LlpjYXJvbiA9IDYxMTtcbiAgICB0LmdyZWF0ZXJlcXVhbCA9IDU0OTtcbiAgICB0LkV0aCA9IDcyMjtcbiAgICB0LkNjZWRpbGxhID0gNjY3O1xuICAgIHQubGNvbW1hYWNjZW50ID0gMjc4O1xuICAgIHQudGNhcm9uID0gMzY2O1xuICAgIHQuZW9nb25layA9IDQ0NDtcbiAgICB0LlVvZ29uZWsgPSA3MjI7XG4gICAgdC5BYWN1dGUgPSA2Njc7XG4gICAgdC5BZGllcmVzaXMgPSA2Njc7XG4gICAgdC5lZ3JhdmUgPSA0NDQ7XG4gICAgdC56YWN1dGUgPSAzODk7XG4gICAgdC5pb2dvbmVrID0gMjc4O1xuICAgIHQuT2FjdXRlID0gNzIyO1xuICAgIHQub2FjdXRlID0gNTAwO1xuICAgIHQuYW1hY3JvbiA9IDUwMDtcbiAgICB0LnNhY3V0ZSA9IDM4OTtcbiAgICB0LmlkaWVyZXNpcyA9IDI3ODtcbiAgICB0Lk9jaXJjdW1mbGV4ID0gNzIyO1xuICAgIHQuVWdyYXZlID0gNzIyO1xuICAgIHQuRGVsdGEgPSA2MTI7XG4gICAgdC50aG9ybiA9IDUwMDtcbiAgICB0LnR3b3N1cGVyaW9yID0gMzAwO1xuICAgIHQuT2RpZXJlc2lzID0gNzIyO1xuICAgIHQubXUgPSA1NzY7XG4gICAgdC5pZ3JhdmUgPSAyNzg7XG4gICAgdC5vaHVuZ2FydW1sYXV0ID0gNTAwO1xuICAgIHQuRW9nb25layA9IDY2NztcbiAgICB0LmRjcm9hdCA9IDUwMDtcbiAgICB0LnRocmVlcXVhcnRlcnMgPSA3NTA7XG4gICAgdC5TY2VkaWxsYSA9IDU1NjtcbiAgICB0LmxjYXJvbiA9IDM4MjtcbiAgICB0Lktjb21tYWFjY2VudCA9IDY2NztcbiAgICB0LkxhY3V0ZSA9IDYxMTtcbiAgICB0LnRyYWRlbWFyayA9IDEwMDA7XG4gICAgdC5lZG90YWNjZW50ID0gNDQ0O1xuICAgIHQuSWdyYXZlID0gMzg5O1xuICAgIHQuSW1hY3JvbiA9IDM4OTtcbiAgICB0LkxjYXJvbiA9IDYxMTtcbiAgICB0Lm9uZWhhbGYgPSA3NTA7XG4gICAgdC5sZXNzZXF1YWwgPSA1NDk7XG4gICAgdC5vY2lyY3VtZmxleCA9IDUwMDtcbiAgICB0Lm50aWxkZSA9IDU1NjtcbiAgICB0LlVodW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5FYWN1dGUgPSA2Njc7XG4gICAgdC5lbWFjcm9uID0gNDQ0O1xuICAgIHQuZ2JyZXZlID0gNTAwO1xuICAgIHQub25lcXVhcnRlciA9IDc1MDtcbiAgICB0LlNjYXJvbiA9IDU1NjtcbiAgICB0LlNjb21tYWFjY2VudCA9IDU1NjtcbiAgICB0Lk9odW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5kZWdyZWUgPSA0MDA7XG4gICAgdC5vZ3JhdmUgPSA1MDA7XG4gICAgdC5DY2Fyb24gPSA2Njc7XG4gICAgdC51Z3JhdmUgPSA1NTY7XG4gICAgdC5yYWRpY2FsID0gNTQ5O1xuICAgIHQuRGNhcm9uID0gNzIyO1xuICAgIHQucmNvbW1hYWNjZW50ID0gMzg5O1xuICAgIHQuTnRpbGRlID0gNzIyO1xuICAgIHQub3RpbGRlID0gNTAwO1xuICAgIHQuUmNvbW1hYWNjZW50ID0gNjY3O1xuICAgIHQuTGNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuQXRpbGRlID0gNjY3O1xuICAgIHQuQW9nb25layA9IDY2NztcbiAgICB0LkFyaW5nID0gNjY3O1xuICAgIHQuT3RpbGRlID0gNzIyO1xuICAgIHQuemRvdGFjY2VudCA9IDM4OTtcbiAgICB0LkVjYXJvbiA9IDY2NztcbiAgICB0LklvZ29uZWsgPSAzODk7XG4gICAgdC5rY29tbWFhY2NlbnQgPSA1MDA7XG4gICAgdC5taW51cyA9IDYwNjtcbiAgICB0LkljaXJjdW1mbGV4ID0gMzg5O1xuICAgIHQubmNhcm9uID0gNTU2O1xuICAgIHQudGNvbW1hYWNjZW50ID0gMjc4O1xuICAgIHQubG9naWNhbG5vdCA9IDYwNjtcbiAgICB0Lm9kaWVyZXNpcyA9IDUwMDtcbiAgICB0LnVkaWVyZXNpcyA9IDU1NjtcbiAgICB0Lm5vdGVxdWFsID0gNTQ5O1xuICAgIHQuZ2NvbW1hYWNjZW50ID0gNTAwO1xuICAgIHQuZXRoID0gNTAwO1xuICAgIHQuemNhcm9uID0gMzg5O1xuICAgIHQubmNvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQub25lc3VwZXJpb3IgPSAzMDA7XG4gICAgdC5pbWFjcm9uID0gMjc4O1xuICAgIHQuRXVybyA9IDUwMDtcbiAgfSk7XG4gIHRbXCJUaW1lcy1JdGFsaWNcIl0gPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgIHQuc3BhY2UgPSAyNTA7XG4gICAgdC5leGNsYW0gPSAzMzM7XG4gICAgdC5xdW90ZWRibCA9IDQyMDtcbiAgICB0Lm51bWJlcnNpZ24gPSA1MDA7XG4gICAgdC5kb2xsYXIgPSA1MDA7XG4gICAgdC5wZXJjZW50ID0gODMzO1xuICAgIHQuYW1wZXJzYW5kID0gNzc4O1xuICAgIHQucXVvdGVyaWdodCA9IDMzMztcbiAgICB0LnBhcmVubGVmdCA9IDMzMztcbiAgICB0LnBhcmVucmlnaHQgPSAzMzM7XG4gICAgdC5hc3RlcmlzayA9IDUwMDtcbiAgICB0LnBsdXMgPSA2NzU7XG4gICAgdC5jb21tYSA9IDI1MDtcbiAgICB0Lmh5cGhlbiA9IDMzMztcbiAgICB0LnBlcmlvZCA9IDI1MDtcbiAgICB0LnNsYXNoID0gMjc4O1xuICAgIHQuemVybyA9IDUwMDtcbiAgICB0Lm9uZSA9IDUwMDtcbiAgICB0LnR3byA9IDUwMDtcbiAgICB0LnRocmVlID0gNTAwO1xuICAgIHQuZm91ciA9IDUwMDtcbiAgICB0LmZpdmUgPSA1MDA7XG4gICAgdC5zaXggPSA1MDA7XG4gICAgdC5zZXZlbiA9IDUwMDtcbiAgICB0LmVpZ2h0ID0gNTAwO1xuICAgIHQubmluZSA9IDUwMDtcbiAgICB0LmNvbG9uID0gMzMzO1xuICAgIHQuc2VtaWNvbG9uID0gMzMzO1xuICAgIHQubGVzcyA9IDY3NTtcbiAgICB0LmVxdWFsID0gNjc1O1xuICAgIHQuZ3JlYXRlciA9IDY3NTtcbiAgICB0LnF1ZXN0aW9uID0gNTAwO1xuICAgIHQuYXQgPSA5MjA7XG4gICAgdC5BID0gNjExO1xuICAgIHQuQiA9IDYxMTtcbiAgICB0LkMgPSA2Njc7XG4gICAgdC5EID0gNzIyO1xuICAgIHQuRSA9IDYxMTtcbiAgICB0LkYgPSA2MTE7XG4gICAgdC5HID0gNzIyO1xuICAgIHQuSCA9IDcyMjtcbiAgICB0LkkgPSAzMzM7XG4gICAgdC5KID0gNDQ0O1xuICAgIHQuSyA9IDY2NztcbiAgICB0LkwgPSA1NTY7XG4gICAgdC5NID0gODMzO1xuICAgIHQuTiA9IDY2NztcbiAgICB0Lk8gPSA3MjI7XG4gICAgdC5QID0gNjExO1xuICAgIHQuUSA9IDcyMjtcbiAgICB0LlIgPSA2MTE7XG4gICAgdC5TID0gNTAwO1xuICAgIHQuVCA9IDU1NjtcbiAgICB0LlUgPSA3MjI7XG4gICAgdC5WID0gNjExO1xuICAgIHQuVyA9IDgzMztcbiAgICB0LlggPSA2MTE7XG4gICAgdC5ZID0gNTU2O1xuICAgIHQuWiA9IDU1NjtcbiAgICB0LmJyYWNrZXRsZWZ0ID0gMzg5O1xuICAgIHQuYmFja3NsYXNoID0gMjc4O1xuICAgIHQuYnJhY2tldHJpZ2h0ID0gMzg5O1xuICAgIHQuYXNjaWljaXJjdW0gPSA0MjI7XG4gICAgdC51bmRlcnNjb3JlID0gNTAwO1xuICAgIHQucXVvdGVsZWZ0ID0gMzMzO1xuICAgIHQuYSA9IDUwMDtcbiAgICB0LmIgPSA1MDA7XG4gICAgdC5jID0gNDQ0O1xuICAgIHQuZCA9IDUwMDtcbiAgICB0LmUgPSA0NDQ7XG4gICAgdC5mID0gMjc4O1xuICAgIHQuZyA9IDUwMDtcbiAgICB0LmggPSA1MDA7XG4gICAgdC5pID0gMjc4O1xuICAgIHQuaiA9IDI3ODtcbiAgICB0LmsgPSA0NDQ7XG4gICAgdC5sID0gMjc4O1xuICAgIHQubSA9IDcyMjtcbiAgICB0Lm4gPSA1MDA7XG4gICAgdC5vID0gNTAwO1xuICAgIHQucCA9IDUwMDtcbiAgICB0LnEgPSA1MDA7XG4gICAgdC5yID0gMzg5O1xuICAgIHQucyA9IDM4OTtcbiAgICB0LnQgPSAyNzg7XG4gICAgdC51ID0gNTAwO1xuICAgIHQudiA9IDQ0NDtcbiAgICB0LncgPSA2Njc7XG4gICAgdC54ID0gNDQ0O1xuICAgIHQueSA9IDQ0NDtcbiAgICB0LnogPSAzODk7XG4gICAgdC5icmFjZWxlZnQgPSA0MDA7XG4gICAgdC5iYXIgPSAyNzU7XG4gICAgdC5icmFjZXJpZ2h0ID0gNDAwO1xuICAgIHQuYXNjaWl0aWxkZSA9IDU0MTtcbiAgICB0LmV4Y2xhbWRvd24gPSAzODk7XG4gICAgdC5jZW50ID0gNTAwO1xuICAgIHQuc3RlcmxpbmcgPSA1MDA7XG4gICAgdC5mcmFjdGlvbiA9IDE2NztcbiAgICB0LnllbiA9IDUwMDtcbiAgICB0LmZsb3JpbiA9IDUwMDtcbiAgICB0LnNlY3Rpb24gPSA1MDA7XG4gICAgdC5jdXJyZW5jeSA9IDUwMDtcbiAgICB0LnF1b3Rlc2luZ2xlID0gMjE0O1xuICAgIHQucXVvdGVkYmxsZWZ0ID0gNTU2O1xuICAgIHQuZ3VpbGxlbW90bGVmdCA9IDUwMDtcbiAgICB0Lmd1aWxzaW5nbGxlZnQgPSAzMzM7XG4gICAgdC5ndWlsc2luZ2xyaWdodCA9IDMzMztcbiAgICB0LmZpID0gNTAwO1xuICAgIHQuZmwgPSA1MDA7XG4gICAgdC5lbmRhc2ggPSA1MDA7XG4gICAgdC5kYWdnZXIgPSA1MDA7XG4gICAgdC5kYWdnZXJkYmwgPSA1MDA7XG4gICAgdC5wZXJpb2RjZW50ZXJlZCA9IDI1MDtcbiAgICB0LnBhcmFncmFwaCA9IDUyMztcbiAgICB0LmJ1bGxldCA9IDM1MDtcbiAgICB0LnF1b3Rlc2luZ2xiYXNlID0gMzMzO1xuICAgIHQucXVvdGVkYmxiYXNlID0gNTU2O1xuICAgIHQucXVvdGVkYmxyaWdodCA9IDU1NjtcbiAgICB0Lmd1aWxsZW1vdHJpZ2h0ID0gNTAwO1xuICAgIHQuZWxsaXBzaXMgPSA4ODk7XG4gICAgdC5wZXJ0aG91c2FuZCA9IDEwMDA7XG4gICAgdC5xdWVzdGlvbmRvd24gPSA1MDA7XG4gICAgdC5ncmF2ZSA9IDMzMztcbiAgICB0LmFjdXRlID0gMzMzO1xuICAgIHQuY2lyY3VtZmxleCA9IDMzMztcbiAgICB0LnRpbGRlID0gMzMzO1xuICAgIHQubWFjcm9uID0gMzMzO1xuICAgIHQuYnJldmUgPSAzMzM7XG4gICAgdC5kb3RhY2NlbnQgPSAzMzM7XG4gICAgdC5kaWVyZXNpcyA9IDMzMztcbiAgICB0LnJpbmcgPSAzMzM7XG4gICAgdC5jZWRpbGxhID0gMzMzO1xuICAgIHQuaHVuZ2FydW1sYXV0ID0gMzMzO1xuICAgIHQub2dvbmVrID0gMzMzO1xuICAgIHQuY2Fyb24gPSAzMzM7XG4gICAgdC5lbWRhc2ggPSA4ODk7XG4gICAgdC5BRSA9IDg4OTtcbiAgICB0Lm9yZGZlbWluaW5lID0gMjc2O1xuICAgIHQuTHNsYXNoID0gNTU2O1xuICAgIHQuT3NsYXNoID0gNzIyO1xuICAgIHQuT0UgPSA5NDQ7XG4gICAgdC5vcmRtYXNjdWxpbmUgPSAzMTA7XG4gICAgdC5hZSA9IDY2NztcbiAgICB0LmRvdGxlc3NpID0gMjc4O1xuICAgIHQubHNsYXNoID0gMjc4O1xuICAgIHQub3NsYXNoID0gNTAwO1xuICAgIHQub2UgPSA2Njc7XG4gICAgdC5nZXJtYW5kYmxzID0gNTAwO1xuICAgIHQuSWRpZXJlc2lzID0gMzMzO1xuICAgIHQuZWFjdXRlID0gNDQ0O1xuICAgIHQuYWJyZXZlID0gNTAwO1xuICAgIHQudWh1bmdhcnVtbGF1dCA9IDUwMDtcbiAgICB0LmVjYXJvbiA9IDQ0NDtcbiAgICB0LllkaWVyZXNpcyA9IDU1NjtcbiAgICB0LmRpdmlkZSA9IDY3NTtcbiAgICB0LllhY3V0ZSA9IDU1NjtcbiAgICB0LkFjaXJjdW1mbGV4ID0gNjExO1xuICAgIHQuYWFjdXRlID0gNTAwO1xuICAgIHQuVWNpcmN1bWZsZXggPSA3MjI7XG4gICAgdC55YWN1dGUgPSA0NDQ7XG4gICAgdC5zY29tbWFhY2NlbnQgPSAzODk7XG4gICAgdC5lY2lyY3VtZmxleCA9IDQ0NDtcbiAgICB0LlVyaW5nID0gNzIyO1xuICAgIHQuVWRpZXJlc2lzID0gNzIyO1xuICAgIHQuYW9nb25layA9IDUwMDtcbiAgICB0LlVhY3V0ZSA9IDcyMjtcbiAgICB0LnVvZ29uZWsgPSA1MDA7XG4gICAgdC5FZGllcmVzaXMgPSA2MTE7XG4gICAgdC5EY3JvYXQgPSA3MjI7XG4gICAgdC5jb21tYWFjY2VudCA9IDI1MDtcbiAgICB0LmNvcHlyaWdodCA9IDc2MDtcbiAgICB0LkVtYWNyb24gPSA2MTE7XG4gICAgdC5jY2Fyb24gPSA0NDQ7XG4gICAgdC5hcmluZyA9IDUwMDtcbiAgICB0Lk5jb21tYWFjY2VudCA9IDY2NztcbiAgICB0LmxhY3V0ZSA9IDI3ODtcbiAgICB0LmFncmF2ZSA9IDUwMDtcbiAgICB0LlRjb21tYWFjY2VudCA9IDU1NjtcbiAgICB0LkNhY3V0ZSA9IDY2NztcbiAgICB0LmF0aWxkZSA9IDUwMDtcbiAgICB0LkVkb3RhY2NlbnQgPSA2MTE7XG4gICAgdC5zY2Fyb24gPSAzODk7XG4gICAgdC5zY2VkaWxsYSA9IDM4OTtcbiAgICB0LmlhY3V0ZSA9IDI3ODtcbiAgICB0LmxvemVuZ2UgPSA0NzE7XG4gICAgdC5SY2Fyb24gPSA2MTE7XG4gICAgdC5HY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC51Y2lyY3VtZmxleCA9IDUwMDtcbiAgICB0LmFjaXJjdW1mbGV4ID0gNTAwO1xuICAgIHQuQW1hY3JvbiA9IDYxMTtcbiAgICB0LnJjYXJvbiA9IDM4OTtcbiAgICB0LmNjZWRpbGxhID0gNDQ0O1xuICAgIHQuWmRvdGFjY2VudCA9IDU1NjtcbiAgICB0LlRob3JuID0gNjExO1xuICAgIHQuT21hY3JvbiA9IDcyMjtcbiAgICB0LlJhY3V0ZSA9IDYxMTtcbiAgICB0LlNhY3V0ZSA9IDUwMDtcbiAgICB0LmRjYXJvbiA9IDU0NDtcbiAgICB0LlVtYWNyb24gPSA3MjI7XG4gICAgdC51cmluZyA9IDUwMDtcbiAgICB0LnRocmVlc3VwZXJpb3IgPSAzMDA7XG4gICAgdC5PZ3JhdmUgPSA3MjI7XG4gICAgdC5BZ3JhdmUgPSA2MTE7XG4gICAgdC5BYnJldmUgPSA2MTE7XG4gICAgdC5tdWx0aXBseSA9IDY3NTtcbiAgICB0LnVhY3V0ZSA9IDUwMDtcbiAgICB0LlRjYXJvbiA9IDU1NjtcbiAgICB0LnBhcnRpYWxkaWZmID0gNDc2O1xuICAgIHQueWRpZXJlc2lzID0gNDQ0O1xuICAgIHQuTmFjdXRlID0gNjY3O1xuICAgIHQuaWNpcmN1bWZsZXggPSAyNzg7XG4gICAgdC5FY2lyY3VtZmxleCA9IDYxMTtcbiAgICB0LmFkaWVyZXNpcyA9IDUwMDtcbiAgICB0LmVkaWVyZXNpcyA9IDQ0NDtcbiAgICB0LmNhY3V0ZSA9IDQ0NDtcbiAgICB0Lm5hY3V0ZSA9IDUwMDtcbiAgICB0LnVtYWNyb24gPSA1MDA7XG4gICAgdC5OY2Fyb24gPSA2Njc7XG4gICAgdC5JYWN1dGUgPSAzMzM7XG4gICAgdC5wbHVzbWludXMgPSA2NzU7XG4gICAgdC5icm9rZW5iYXIgPSAyNzU7XG4gICAgdC5yZWdpc3RlcmVkID0gNzYwO1xuICAgIHQuR2JyZXZlID0gNzIyO1xuICAgIHQuSWRvdGFjY2VudCA9IDMzMztcbiAgICB0LnN1bW1hdGlvbiA9IDYwMDtcbiAgICB0LkVncmF2ZSA9IDYxMTtcbiAgICB0LnJhY3V0ZSA9IDM4OTtcbiAgICB0Lm9tYWNyb24gPSA1MDA7XG4gICAgdC5aYWN1dGUgPSA1NTY7XG4gICAgdC5aY2Fyb24gPSA1NTY7XG4gICAgdC5ncmVhdGVyZXF1YWwgPSA1NDk7XG4gICAgdC5FdGggPSA3MjI7XG4gICAgdC5DY2VkaWxsYSA9IDY2NztcbiAgICB0Lmxjb21tYWFjY2VudCA9IDI3ODtcbiAgICB0LnRjYXJvbiA9IDMwMDtcbiAgICB0LmVvZ29uZWsgPSA0NDQ7XG4gICAgdC5Vb2dvbmVrID0gNzIyO1xuICAgIHQuQWFjdXRlID0gNjExO1xuICAgIHQuQWRpZXJlc2lzID0gNjExO1xuICAgIHQuZWdyYXZlID0gNDQ0O1xuICAgIHQuemFjdXRlID0gMzg5O1xuICAgIHQuaW9nb25layA9IDI3ODtcbiAgICB0Lk9hY3V0ZSA9IDcyMjtcbiAgICB0Lm9hY3V0ZSA9IDUwMDtcbiAgICB0LmFtYWNyb24gPSA1MDA7XG4gICAgdC5zYWN1dGUgPSAzODk7XG4gICAgdC5pZGllcmVzaXMgPSAyNzg7XG4gICAgdC5PY2lyY3VtZmxleCA9IDcyMjtcbiAgICB0LlVncmF2ZSA9IDcyMjtcbiAgICB0LkRlbHRhID0gNjEyO1xuICAgIHQudGhvcm4gPSA1MDA7XG4gICAgdC50d29zdXBlcmlvciA9IDMwMDtcbiAgICB0Lk9kaWVyZXNpcyA9IDcyMjtcbiAgICB0Lm11ID0gNTAwO1xuICAgIHQuaWdyYXZlID0gMjc4O1xuICAgIHQub2h1bmdhcnVtbGF1dCA9IDUwMDtcbiAgICB0LkVvZ29uZWsgPSA2MTE7XG4gICAgdC5kY3JvYXQgPSA1MDA7XG4gICAgdC50aHJlZXF1YXJ0ZXJzID0gNzUwO1xuICAgIHQuU2NlZGlsbGEgPSA1MDA7XG4gICAgdC5sY2Fyb24gPSAzMDA7XG4gICAgdC5LY29tbWFhY2NlbnQgPSA2Njc7XG4gICAgdC5MYWN1dGUgPSA1NTY7XG4gICAgdC50cmFkZW1hcmsgPSA5ODA7XG4gICAgdC5lZG90YWNjZW50ID0gNDQ0O1xuICAgIHQuSWdyYXZlID0gMzMzO1xuICAgIHQuSW1hY3JvbiA9IDMzMztcbiAgICB0LkxjYXJvbiA9IDYxMTtcbiAgICB0Lm9uZWhhbGYgPSA3NTA7XG4gICAgdC5sZXNzZXF1YWwgPSA1NDk7XG4gICAgdC5vY2lyY3VtZmxleCA9IDUwMDtcbiAgICB0Lm50aWxkZSA9IDUwMDtcbiAgICB0LlVodW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5FYWN1dGUgPSA2MTE7XG4gICAgdC5lbWFjcm9uID0gNDQ0O1xuICAgIHQuZ2JyZXZlID0gNTAwO1xuICAgIHQub25lcXVhcnRlciA9IDc1MDtcbiAgICB0LlNjYXJvbiA9IDUwMDtcbiAgICB0LlNjb21tYWFjY2VudCA9IDUwMDtcbiAgICB0Lk9odW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5kZWdyZWUgPSA0MDA7XG4gICAgdC5vZ3JhdmUgPSA1MDA7XG4gICAgdC5DY2Fyb24gPSA2Njc7XG4gICAgdC51Z3JhdmUgPSA1MDA7XG4gICAgdC5yYWRpY2FsID0gNDUzO1xuICAgIHQuRGNhcm9uID0gNzIyO1xuICAgIHQucmNvbW1hYWNjZW50ID0gMzg5O1xuICAgIHQuTnRpbGRlID0gNjY3O1xuICAgIHQub3RpbGRlID0gNTAwO1xuICAgIHQuUmNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuTGNvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQuQXRpbGRlID0gNjExO1xuICAgIHQuQW9nb25layA9IDYxMTtcbiAgICB0LkFyaW5nID0gNjExO1xuICAgIHQuT3RpbGRlID0gNzIyO1xuICAgIHQuemRvdGFjY2VudCA9IDM4OTtcbiAgICB0LkVjYXJvbiA9IDYxMTtcbiAgICB0LklvZ29uZWsgPSAzMzM7XG4gICAgdC5rY29tbWFhY2NlbnQgPSA0NDQ7XG4gICAgdC5taW51cyA9IDY3NTtcbiAgICB0LkljaXJjdW1mbGV4ID0gMzMzO1xuICAgIHQubmNhcm9uID0gNTAwO1xuICAgIHQudGNvbW1hYWNjZW50ID0gMjc4O1xuICAgIHQubG9naWNhbG5vdCA9IDY3NTtcbiAgICB0Lm9kaWVyZXNpcyA9IDUwMDtcbiAgICB0LnVkaWVyZXNpcyA9IDUwMDtcbiAgICB0Lm5vdGVxdWFsID0gNTQ5O1xuICAgIHQuZ2NvbW1hYWNjZW50ID0gNTAwO1xuICAgIHQuZXRoID0gNTAwO1xuICAgIHQuemNhcm9uID0gMzg5O1xuICAgIHQubmNvbW1hYWNjZW50ID0gNTAwO1xuICAgIHQub25lc3VwZXJpb3IgPSAzMDA7XG4gICAgdC5pbWFjcm9uID0gMjc4O1xuICAgIHQuRXVybyA9IDUwMDtcbiAgfSk7XG4gIHQuWmFwZkRpbmdiYXRzID0gKDAsIF9jb3JlX3V0aWxzLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICB0LnNwYWNlID0gMjc4O1xuICAgIHQuYTEgPSA5NzQ7XG4gICAgdC5hMiA9IDk2MTtcbiAgICB0LmEyMDIgPSA5NzQ7XG4gICAgdC5hMyA9IDk4MDtcbiAgICB0LmE0ID0gNzE5O1xuICAgIHQuYTUgPSA3ODk7XG4gICAgdC5hMTE5ID0gNzkwO1xuICAgIHQuYTExOCA9IDc5MTtcbiAgICB0LmExMTcgPSA2OTA7XG4gICAgdC5hMTEgPSA5NjA7XG4gICAgdC5hMTIgPSA5Mzk7XG4gICAgdC5hMTMgPSA1NDk7XG4gICAgdC5hMTQgPSA4NTU7XG4gICAgdC5hMTUgPSA5MTE7XG4gICAgdC5hMTYgPSA5MzM7XG4gICAgdC5hMTA1ID0gOTExO1xuICAgIHQuYTE3ID0gOTQ1O1xuICAgIHQuYTE4ID0gOTc0O1xuICAgIHQuYTE5ID0gNzU1O1xuICAgIHQuYTIwID0gODQ2O1xuICAgIHQuYTIxID0gNzYyO1xuICAgIHQuYTIyID0gNzYxO1xuICAgIHQuYTIzID0gNTcxO1xuICAgIHQuYTI0ID0gNjc3O1xuICAgIHQuYTI1ID0gNzYzO1xuICAgIHQuYTI2ID0gNzYwO1xuICAgIHQuYTI3ID0gNzU5O1xuICAgIHQuYTI4ID0gNzU0O1xuICAgIHQuYTYgPSA0OTQ7XG4gICAgdC5hNyA9IDU1MjtcbiAgICB0LmE4ID0gNTM3O1xuICAgIHQuYTkgPSA1Nzc7XG4gICAgdC5hMTAgPSA2OTI7XG4gICAgdC5hMjkgPSA3ODY7XG4gICAgdC5hMzAgPSA3ODg7XG4gICAgdC5hMzEgPSA3ODg7XG4gICAgdC5hMzIgPSA3OTA7XG4gICAgdC5hMzMgPSA3OTM7XG4gICAgdC5hMzQgPSA3OTQ7XG4gICAgdC5hMzUgPSA4MTY7XG4gICAgdC5hMzYgPSA4MjM7XG4gICAgdC5hMzcgPSA3ODk7XG4gICAgdC5hMzggPSA4NDE7XG4gICAgdC5hMzkgPSA4MjM7XG4gICAgdC5hNDAgPSA4MzM7XG4gICAgdC5hNDEgPSA4MTY7XG4gICAgdC5hNDIgPSA4MzE7XG4gICAgdC5hNDMgPSA5MjM7XG4gICAgdC5hNDQgPSA3NDQ7XG4gICAgdC5hNDUgPSA3MjM7XG4gICAgdC5hNDYgPSA3NDk7XG4gICAgdC5hNDcgPSA3OTA7XG4gICAgdC5hNDggPSA3OTI7XG4gICAgdC5hNDkgPSA2OTU7XG4gICAgdC5hNTAgPSA3NzY7XG4gICAgdC5hNTEgPSA3Njg7XG4gICAgdC5hNTIgPSA3OTI7XG4gICAgdC5hNTMgPSA3NTk7XG4gICAgdC5hNTQgPSA3MDc7XG4gICAgdC5hNTUgPSA3MDg7XG4gICAgdC5hNTYgPSA2ODI7XG4gICAgdC5hNTcgPSA3MDE7XG4gICAgdC5hNTggPSA4MjY7XG4gICAgdC5hNTkgPSA4MTU7XG4gICAgdC5hNjAgPSA3ODk7XG4gICAgdC5hNjEgPSA3ODk7XG4gICAgdC5hNjIgPSA3MDc7XG4gICAgdC5hNjMgPSA2ODc7XG4gICAgdC5hNjQgPSA2OTY7XG4gICAgdC5hNjUgPSA2ODk7XG4gICAgdC5hNjYgPSA3ODY7XG4gICAgdC5hNjcgPSA3ODc7XG4gICAgdC5hNjggPSA3MTM7XG4gICAgdC5hNjkgPSA3OTE7XG4gICAgdC5hNzAgPSA3ODU7XG4gICAgdC5hNzEgPSA3OTE7XG4gICAgdC5hNzIgPSA4NzM7XG4gICAgdC5hNzMgPSA3NjE7XG4gICAgdC5hNzQgPSA3NjI7XG4gICAgdC5hMjAzID0gNzYyO1xuICAgIHQuYTc1ID0gNzU5O1xuICAgIHQuYTIwNCA9IDc1OTtcbiAgICB0LmE3NiA9IDg5MjtcbiAgICB0LmE3NyA9IDg5MjtcbiAgICB0LmE3OCA9IDc4ODtcbiAgICB0LmE3OSA9IDc4NDtcbiAgICB0LmE4MSA9IDQzODtcbiAgICB0LmE4MiA9IDEzODtcbiAgICB0LmE4MyA9IDI3NztcbiAgICB0LmE4NCA9IDQxNTtcbiAgICB0LmE5NyA9IDM5MjtcbiAgICB0LmE5OCA9IDM5MjtcbiAgICB0LmE5OSA9IDY2ODtcbiAgICB0LmExMDAgPSA2Njg7XG4gICAgdC5hODkgPSAzOTA7XG4gICAgdC5hOTAgPSAzOTA7XG4gICAgdC5hOTMgPSAzMTc7XG4gICAgdC5hOTQgPSAzMTc7XG4gICAgdC5hOTEgPSAyNzY7XG4gICAgdC5hOTIgPSAyNzY7XG4gICAgdC5hMjA1ID0gNTA5O1xuICAgIHQuYTg1ID0gNTA5O1xuICAgIHQuYTIwNiA9IDQxMDtcbiAgICB0LmE4NiA9IDQxMDtcbiAgICB0LmE4NyA9IDIzNDtcbiAgICB0LmE4OCA9IDIzNDtcbiAgICB0LmE5NSA9IDMzNDtcbiAgICB0LmE5NiA9IDMzNDtcbiAgICB0LmExMDEgPSA3MzI7XG4gICAgdC5hMTAyID0gNTQ0O1xuICAgIHQuYTEwMyA9IDU0NDtcbiAgICB0LmExMDQgPSA5MTA7XG4gICAgdC5hMTA2ID0gNjY3O1xuICAgIHQuYTEwNyA9IDc2MDtcbiAgICB0LmExMDggPSA3NjA7XG4gICAgdC5hMTEyID0gNzc2O1xuICAgIHQuYTExMSA9IDU5NTtcbiAgICB0LmExMTAgPSA2OTQ7XG4gICAgdC5hMTA5ID0gNjI2O1xuICAgIHQuYTEyMCA9IDc4ODtcbiAgICB0LmExMjEgPSA3ODg7XG4gICAgdC5hMTIyID0gNzg4O1xuICAgIHQuYTEyMyA9IDc4ODtcbiAgICB0LmExMjQgPSA3ODg7XG4gICAgdC5hMTI1ID0gNzg4O1xuICAgIHQuYTEyNiA9IDc4ODtcbiAgICB0LmExMjcgPSA3ODg7XG4gICAgdC5hMTI4ID0gNzg4O1xuICAgIHQuYTEyOSA9IDc4ODtcbiAgICB0LmExMzAgPSA3ODg7XG4gICAgdC5hMTMxID0gNzg4O1xuICAgIHQuYTEzMiA9IDc4ODtcbiAgICB0LmExMzMgPSA3ODg7XG4gICAgdC5hMTM0ID0gNzg4O1xuICAgIHQuYTEzNSA9IDc4ODtcbiAgICB0LmExMzYgPSA3ODg7XG4gICAgdC5hMTM3ID0gNzg4O1xuICAgIHQuYTEzOCA9IDc4ODtcbiAgICB0LmExMzkgPSA3ODg7XG4gICAgdC5hMTQwID0gNzg4O1xuICAgIHQuYTE0MSA9IDc4ODtcbiAgICB0LmExNDIgPSA3ODg7XG4gICAgdC5hMTQzID0gNzg4O1xuICAgIHQuYTE0NCA9IDc4ODtcbiAgICB0LmExNDUgPSA3ODg7XG4gICAgdC5hMTQ2ID0gNzg4O1xuICAgIHQuYTE0NyA9IDc4ODtcbiAgICB0LmExNDggPSA3ODg7XG4gICAgdC5hMTQ5ID0gNzg4O1xuICAgIHQuYTE1MCA9IDc4ODtcbiAgICB0LmExNTEgPSA3ODg7XG4gICAgdC5hMTUyID0gNzg4O1xuICAgIHQuYTE1MyA9IDc4ODtcbiAgICB0LmExNTQgPSA3ODg7XG4gICAgdC5hMTU1ID0gNzg4O1xuICAgIHQuYTE1NiA9IDc4ODtcbiAgICB0LmExNTcgPSA3ODg7XG4gICAgdC5hMTU4ID0gNzg4O1xuICAgIHQuYTE1OSA9IDc4ODtcbiAgICB0LmExNjAgPSA4OTQ7XG4gICAgdC5hMTYxID0gODM4O1xuICAgIHQuYTE2MyA9IDEwMTY7XG4gICAgdC5hMTY0ID0gNDU4O1xuICAgIHQuYTE5NiA9IDc0ODtcbiAgICB0LmExNjUgPSA5MjQ7XG4gICAgdC5hMTkyID0gNzQ4O1xuICAgIHQuYTE2NiA9IDkxODtcbiAgICB0LmExNjcgPSA5Mjc7XG4gICAgdC5hMTY4ID0gOTI4O1xuICAgIHQuYTE2OSA9IDkyODtcbiAgICB0LmExNzAgPSA4MzQ7XG4gICAgdC5hMTcxID0gODczO1xuICAgIHQuYTE3MiA9IDgyODtcbiAgICB0LmExNzMgPSA5MjQ7XG4gICAgdC5hMTYyID0gOTI0O1xuICAgIHQuYTE3NCA9IDkxNztcbiAgICB0LmExNzUgPSA5MzA7XG4gICAgdC5hMTc2ID0gOTMxO1xuICAgIHQuYTE3NyA9IDQ2MztcbiAgICB0LmExNzggPSA4ODM7XG4gICAgdC5hMTc5ID0gODM2O1xuICAgIHQuYTE5MyA9IDgzNjtcbiAgICB0LmExODAgPSA4Njc7XG4gICAgdC5hMTk5ID0gODY3O1xuICAgIHQuYTE4MSA9IDY5NjtcbiAgICB0LmEyMDAgPSA2OTY7XG4gICAgdC5hMTgyID0gODc0O1xuICAgIHQuYTIwMSA9IDg3NDtcbiAgICB0LmExODMgPSA3NjA7XG4gICAgdC5hMTg0ID0gOTQ2O1xuICAgIHQuYTE5NyA9IDc3MTtcbiAgICB0LmExODUgPSA4NjU7XG4gICAgdC5hMTk0ID0gNzcxO1xuICAgIHQuYTE5OCA9IDg4ODtcbiAgICB0LmExODYgPSA5Njc7XG4gICAgdC5hMTk1ID0gODg4O1xuICAgIHQuYTE4NyA9IDgzMTtcbiAgICB0LmExODggPSA4NzM7XG4gICAgdC5hMTg5ID0gOTI3O1xuICAgIHQuYTE5MCA9IDk3MDtcbiAgICB0LmExOTEgPSA5MTg7XG4gIH0pO1xufSk7XG5leHBvcnRzLmdldE1ldHJpY3MgPSBnZXRNZXRyaWNzO1xuXG4vKioqLyB9KSxcbi8qIDYxICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLk11cm11ckhhc2gzXzY0ID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jb25zdCBTRUVEID0gMHhjM2QyZTFmMDtcbmNvbnN0IE1BU0tfSElHSCA9IDB4ZmZmZjAwMDA7XG5jb25zdCBNQVNLX0xPVyA9IDB4ZmZmZjtcblxuY2xhc3MgTXVybXVySGFzaDNfNjQge1xuICBjb25zdHJ1Y3RvcihzZWVkKSB7XG4gICAgdGhpcy5oMSA9IHNlZWQgPyBzZWVkICYgMHhmZmZmZmZmZiA6IFNFRUQ7XG4gICAgdGhpcy5oMiA9IHNlZWQgPyBzZWVkICYgMHhmZmZmZmZmZiA6IFNFRUQ7XG4gIH1cblxuICB1cGRhdGUoaW5wdXQpIHtcbiAgICBsZXQgZGF0YSwgbGVuZ3RoO1xuXG4gICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykoaW5wdXQpKSB7XG4gICAgICBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXQubGVuZ3RoICogMik7XG4gICAgICBsZW5ndGggPSAwO1xuXG4gICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBpbnB1dC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNvZGUgPSBpbnB1dC5jaGFyQ29kZUF0KGkpO1xuXG4gICAgICAgIGlmIChjb2RlIDw9IDB4ZmYpIHtcbiAgICAgICAgICBkYXRhW2xlbmd0aCsrXSA9IGNvZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGF0YVtsZW5ndGgrK10gPSBjb2RlID4+PiA4O1xuICAgICAgICAgIGRhdGFbbGVuZ3RoKytdID0gY29kZSAmIDB4ZmY7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc0FycmF5QnVmZmVyKShpbnB1dCkpIHtcbiAgICAgIGRhdGEgPSBpbnB1dC5zbGljZSgpO1xuICAgICAgbGVuZ3RoID0gZGF0YS5ieXRlTGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBkYXRhIGZvcm1hdCBpbiBNdXJtdXJIYXNoM182NF91cGRhdGUuIFwiICsgXCJJbnB1dCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFycmF5LlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBibG9ja0NvdW50cyA9IGxlbmd0aCA+PiAyO1xuICAgIGNvbnN0IHRhaWxMZW5ndGggPSBsZW5ndGggLSBibG9ja0NvdW50cyAqIDQ7XG4gICAgY29uc3QgZGF0YVVpbnQzMiA9IG5ldyBVaW50MzJBcnJheShkYXRhLmJ1ZmZlciwgMCwgYmxvY2tDb3VudHMpO1xuICAgIGxldCBrMSA9IDAsXG4gICAgICAgIGsyID0gMDtcbiAgICBsZXQgaDEgPSB0aGlzLmgxLFxuICAgICAgICBoMiA9IHRoaXMuaDI7XG4gICAgY29uc3QgQzEgPSAweGNjOWUyZDUxLFxuICAgICAgICAgIEMyID0gMHgxYjg3MzU5MztcbiAgICBjb25zdCBDMV9MT1cgPSBDMSAmIE1BU0tfTE9XLFxuICAgICAgICAgIEMyX0xPVyA9IEMyICYgTUFTS19MT1c7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJsb2NrQ291bnRzOyBpKyspIHtcbiAgICAgIGlmIChpICYgMSkge1xuICAgICAgICBrMSA9IGRhdGFVaW50MzJbaV07XG4gICAgICAgIGsxID0gazEgKiBDMSAmIE1BU0tfSElHSCB8IGsxICogQzFfTE9XICYgTUFTS19MT1c7XG4gICAgICAgIGsxID0gazEgPDwgMTUgfCBrMSA+Pj4gMTc7XG4gICAgICAgIGsxID0gazEgKiBDMiAmIE1BU0tfSElHSCB8IGsxICogQzJfTE9XICYgTUFTS19MT1c7XG4gICAgICAgIGgxIF49IGsxO1xuICAgICAgICBoMSA9IGgxIDw8IDEzIHwgaDEgPj4+IDE5O1xuICAgICAgICBoMSA9IGgxICogNSArIDB4ZTY1NDZiNjQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrMiA9IGRhdGFVaW50MzJbaV07XG4gICAgICAgIGsyID0gazIgKiBDMSAmIE1BU0tfSElHSCB8IGsyICogQzFfTE9XICYgTUFTS19MT1c7XG4gICAgICAgIGsyID0gazIgPDwgMTUgfCBrMiA+Pj4gMTc7XG4gICAgICAgIGsyID0gazIgKiBDMiAmIE1BU0tfSElHSCB8IGsyICogQzJfTE9XICYgTUFTS19MT1c7XG4gICAgICAgIGgyIF49IGsyO1xuICAgICAgICBoMiA9IGgyIDw8IDEzIHwgaDIgPj4+IDE5O1xuICAgICAgICBoMiA9IGgyICogNSArIDB4ZTY1NDZiNjQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgazEgPSAwO1xuXG4gICAgc3dpdGNoICh0YWlsTGVuZ3RoKSB7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGsxIF49IGRhdGFbYmxvY2tDb3VudHMgKiA0ICsgMl0gPDwgMTY7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgazEgXj0gZGF0YVtibG9ja0NvdW50cyAqIDQgKyAxXSA8PCA4O1xuXG4gICAgICBjYXNlIDE6XG4gICAgICAgIGsxIF49IGRhdGFbYmxvY2tDb3VudHMgKiA0XTtcbiAgICAgICAgazEgPSBrMSAqIEMxICYgTUFTS19ISUdIIHwgazEgKiBDMV9MT1cgJiBNQVNLX0xPVztcbiAgICAgICAgazEgPSBrMSA8PCAxNSB8IGsxID4+PiAxNztcbiAgICAgICAgazEgPSBrMSAqIEMyICYgTUFTS19ISUdIIHwgazEgKiBDMl9MT1cgJiBNQVNLX0xPVztcblxuICAgICAgICBpZiAoYmxvY2tDb3VudHMgJiAxKSB7XG4gICAgICAgICAgaDEgXj0gazE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaDIgXj0gazE7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHRoaXMuaDEgPSBoMTtcbiAgICB0aGlzLmgyID0gaDI7XG4gIH1cblxuICBoZXhkaWdlc3QoKSB7XG4gICAgbGV0IGgxID0gdGhpcy5oMSxcbiAgICAgICAgaDIgPSB0aGlzLmgyO1xuICAgIGgxIF49IGgyID4+PiAxO1xuICAgIGgxID0gaDEgKiAweGVkNTU4Y2NkICYgTUFTS19ISUdIIHwgaDEgKiAweDhjY2QgJiBNQVNLX0xPVztcbiAgICBoMiA9IGgyICogMHhmZjUxYWZkNyAmIE1BU0tfSElHSCB8ICgoaDIgPDwgMTYgfCBoMSA+Pj4gMTYpICogMHhhZmQ3ZWQ1NSAmIE1BU0tfSElHSCkgPj4+IDE2O1xuICAgIGgxIF49IGgyID4+PiAxO1xuICAgIGgxID0gaDEgKiAweDFhODVlYzUzICYgTUFTS19ISUdIIHwgaDEgKiAweGVjNTMgJiBNQVNLX0xPVztcbiAgICBoMiA9IGgyICogMHhjNGNlYjlmZSAmIE1BU0tfSElHSCB8ICgoaDIgPDwgMTYgfCBoMSA+Pj4gMTYpICogMHhiOWZlMWE4NSAmIE1BU0tfSElHSCkgPj4+IDE2O1xuICAgIGgxIF49IGgyID4+PiAxO1xuICAgIGNvbnN0IGhleDEgPSAoaDEgPj4+IDApLnRvU3RyaW5nKDE2KSxcbiAgICAgICAgICBoZXgyID0gKGgyID4+PiAwKS50b1N0cmluZygxNik7XG4gICAgcmV0dXJuIGhleDEucGFkU3RhcnQoOCwgXCIwXCIpICsgaGV4Mi5wYWRTdGFydCg4LCBcIjBcIik7XG4gIH1cblxufVxuXG5leHBvcnRzLk11cm11ckhhc2gzXzY0ID0gTXVybXVySGFzaDNfNjQ7XG5cbi8qKiovIH0pLFxuLyogNjIgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuT3BlcmF0b3JMaXN0ID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5mdW5jdGlvbiBhZGRTdGF0ZShwYXJlbnRTdGF0ZSwgcGF0dGVybiwgY2hlY2tGbiwgaXRlcmF0ZUZuLCBwcm9jZXNzRm4pIHtcbiAgbGV0IHN0YXRlID0gcGFyZW50U3RhdGU7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGlpID0gcGF0dGVybi5sZW5ndGggLSAxOyBpIDwgaWk7IGkrKykge1xuICAgIGNvbnN0IGl0ZW0gPSBwYXR0ZXJuW2ldO1xuICAgIHN0YXRlID0gc3RhdGVbaXRlbV0gfHwgKHN0YXRlW2l0ZW1dID0gW10pO1xuICB9XG5cbiAgc3RhdGVbcGF0dGVybltwYXR0ZXJuLmxlbmd0aCAtIDFdXSA9IHtcbiAgICBjaGVja0ZuLFxuICAgIGl0ZXJhdGVGbixcbiAgICBwcm9jZXNzRm5cbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlUGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrKGlGaXJzdFNhdmUsIGNvdW50LCBmbkFycmF5LCBhcmdzQXJyYXkpIHtcbiAgY29uc3QgaUZpcnN0UElNWE8gPSBpRmlyc3RTYXZlICsgMjtcbiAgbGV0IGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBjb25zdCBhcmcgPSBhcmdzQXJyYXlbaUZpcnN0UElNWE8gKyA0ICogaV07XG4gICAgY29uc3QgaW1hZ2VNYXNrID0gYXJnLmxlbmd0aCA9PT0gMSAmJiBhcmdbMF07XG5cbiAgICBpZiAoaW1hZ2VNYXNrICYmIGltYWdlTWFzay53aWR0aCA9PT0gMSAmJiBpbWFnZU1hc2suaGVpZ2h0ID09PSAxICYmICghaW1hZ2VNYXNrLmRhdGEubGVuZ3RoIHx8IGltYWdlTWFzay5kYXRhLmxlbmd0aCA9PT0gMSAmJiBpbWFnZU1hc2suZGF0YVswXSA9PT0gMCkpIHtcbiAgICAgIGZuQXJyYXlbaUZpcnN0UElNWE8gKyA0ICogaV0gPSBfdXRpbC5PUFMucGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gY291bnQgLSBpO1xufVxuXG5jb25zdCBJbml0aWFsU3RhdGUgPSBbXTtcbmFkZFN0YXRlKEluaXRpYWxTdGF0ZSwgW191dGlsLk9QUy5zYXZlLCBfdXRpbC5PUFMudHJhbnNmb3JtLCBfdXRpbC5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QsIF91dGlsLk9QUy5yZXN0b3JlXSwgbnVsbCwgZnVuY3Rpb24gaXRlcmF0ZUlubGluZUltYWdlR3JvdXAoY29udGV4dCwgaSkge1xuICBjb25zdCBmbkFycmF5ID0gY29udGV4dC5mbkFycmF5O1xuICBjb25zdCBpRmlyc3RTYXZlID0gY29udGV4dC5pQ3VyciAtIDM7XG4gIGNvbnN0IHBvcyA9IChpIC0gaUZpcnN0U2F2ZSkgJSA0O1xuXG4gIHN3aXRjaCAocG9zKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5zYXZlO1xuXG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy50cmFuc2Zvcm07XG5cbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0O1xuXG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5yZXN0b3JlO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlSW5saW5lSW1hZ2VHcm91cCAtIGludmFsaWQgcG9zOiAke3Bvc31gKTtcbn0sIGZ1bmN0aW9uIGZvdW5kSW5saW5lSW1hZ2VHcm91cChjb250ZXh0LCBpKSB7XG4gIGNvbnN0IE1JTl9JTUFHRVNfSU5fSU5MSU5FX0lNQUdFU19CTE9DSyA9IDEwO1xuICBjb25zdCBNQVhfSU1BR0VTX0lOX0lOTElORV9JTUFHRVNfQkxPQ0sgPSAyMDA7XG4gIGNvbnN0IE1BWF9XSURUSCA9IDEwMDA7XG4gIGNvbnN0IElNQUdFX1BBRERJTkcgPSAxO1xuICBjb25zdCBmbkFycmF5ID0gY29udGV4dC5mbkFycmF5LFxuICAgICAgICBhcmdzQXJyYXkgPSBjb250ZXh0LmFyZ3NBcnJheTtcbiAgY29uc3QgY3VyciA9IGNvbnRleHQuaUN1cnI7XG4gIGNvbnN0IGlGaXJzdFNhdmUgPSBjdXJyIC0gMztcbiAgY29uc3QgaUZpcnN0VHJhbnNmb3JtID0gY3VyciAtIDI7XG4gIGNvbnN0IGlGaXJzdFBJSVhPID0gY3VyciAtIDE7XG4gIGNvbnN0IGNvdW50ID0gTWF0aC5taW4oTWF0aC5mbG9vcigoaSAtIGlGaXJzdFNhdmUpIC8gNCksIE1BWF9JTUFHRVNfSU5fSU5MSU5FX0lNQUdFU19CTE9DSyk7XG5cbiAgaWYgKGNvdW50IDwgTUlOX0lNQUdFU19JTl9JTkxJTkVfSU1BR0VTX0JMT0NLKSB7XG4gICAgcmV0dXJuIGkgLSAoaSAtIGlGaXJzdFNhdmUpICUgNDtcbiAgfVxuXG4gIGxldCBtYXhYID0gMDtcbiAgY29uc3QgbWFwID0gW107XG4gIGxldCBtYXhMaW5lSGVpZ2h0ID0gMDtcbiAgbGV0IGN1cnJlbnRYID0gSU1BR0VfUEFERElORyxcbiAgICAgIGN1cnJlbnRZID0gSU1BR0VfUEFERElORztcblxuICBmb3IgKGxldCBxID0gMDsgcSA8IGNvdW50OyBxKyspIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBhcmdzQXJyYXlbaUZpcnN0VHJhbnNmb3JtICsgKHEgPDwgMildO1xuICAgIGNvbnN0IGltZyA9IGFyZ3NBcnJheVtpRmlyc3RQSUlYTyArIChxIDw8IDIpXVswXTtcblxuICAgIGlmIChjdXJyZW50WCArIGltZy53aWR0aCA+IE1BWF9XSURUSCkge1xuICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIGN1cnJlbnRYKTtcbiAgICAgIGN1cnJlbnRZICs9IG1heExpbmVIZWlnaHQgKyAyICogSU1BR0VfUEFERElORztcbiAgICAgIGN1cnJlbnRYID0gMDtcbiAgICAgIG1heExpbmVIZWlnaHQgPSAwO1xuICAgIH1cblxuICAgIG1hcC5wdXNoKHtcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIHg6IGN1cnJlbnRYLFxuICAgICAgeTogY3VycmVudFksXG4gICAgICB3OiBpbWcud2lkdGgsXG4gICAgICBoOiBpbWcuaGVpZ2h0XG4gICAgfSk7XG4gICAgY3VycmVudFggKz0gaW1nLndpZHRoICsgMiAqIElNQUdFX1BBRERJTkc7XG4gICAgbWF4TGluZUhlaWdodCA9IE1hdGgubWF4KG1heExpbmVIZWlnaHQsIGltZy5oZWlnaHQpO1xuICB9XG5cbiAgY29uc3QgaW1nV2lkdGggPSBNYXRoLm1heChtYXhYLCBjdXJyZW50WCkgKyBJTUFHRV9QQURESU5HO1xuICBjb25zdCBpbWdIZWlnaHQgPSBjdXJyZW50WSArIG1heExpbmVIZWlnaHQgKyBJTUFHRV9QQURESU5HO1xuICBjb25zdCBpbWdEYXRhID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGltZ1dpZHRoICogaW1nSGVpZ2h0ICogNCk7XG4gIGNvbnN0IGltZ1Jvd1NpemUgPSBpbWdXaWR0aCA8PCAyO1xuXG4gIGZvciAobGV0IHEgPSAwOyBxIDwgY291bnQ7IHErKykge1xuICAgIGNvbnN0IGRhdGEgPSBhcmdzQXJyYXlbaUZpcnN0UElJWE8gKyAocSA8PCAyKV1bMF0uZGF0YTtcbiAgICBjb25zdCByb3dTaXplID0gbWFwW3FdLncgPDwgMjtcbiAgICBsZXQgZGF0YU9mZnNldCA9IDA7XG4gICAgbGV0IG9mZnNldCA9IG1hcFtxXS54ICsgbWFwW3FdLnkgKiBpbWdXaWR0aCA8PCAyO1xuICAgIGltZ0RhdGEuc2V0KGRhdGEuc3ViYXJyYXkoMCwgcm93U2l6ZSksIG9mZnNldCAtIGltZ1Jvd1NpemUpO1xuXG4gICAgZm9yIChsZXQgayA9IDAsIGtrID0gbWFwW3FdLmg7IGsgPCBrazsgaysrKSB7XG4gICAgICBpbWdEYXRhLnNldChkYXRhLnN1YmFycmF5KGRhdGFPZmZzZXQsIGRhdGFPZmZzZXQgKyByb3dTaXplKSwgb2Zmc2V0KTtcbiAgICAgIGRhdGFPZmZzZXQgKz0gcm93U2l6ZTtcbiAgICAgIG9mZnNldCArPSBpbWdSb3dTaXplO1xuICAgIH1cblxuICAgIGltZ0RhdGEuc2V0KGRhdGEuc3ViYXJyYXkoZGF0YU9mZnNldCAtIHJvd1NpemUsIGRhdGFPZmZzZXQpLCBvZmZzZXQpO1xuXG4gICAgd2hpbGUgKG9mZnNldCA+PSAwKSB7XG4gICAgICBkYXRhW29mZnNldCAtIDRdID0gZGF0YVtvZmZzZXRdO1xuICAgICAgZGF0YVtvZmZzZXQgLSAzXSA9IGRhdGFbb2Zmc2V0ICsgMV07XG4gICAgICBkYXRhW29mZnNldCAtIDJdID0gZGF0YVtvZmZzZXQgKyAyXTtcbiAgICAgIGRhdGFbb2Zmc2V0IC0gMV0gPSBkYXRhW29mZnNldCArIDNdO1xuICAgICAgZGF0YVtvZmZzZXQgKyByb3dTaXplXSA9IGRhdGFbb2Zmc2V0ICsgcm93U2l6ZSAtIDRdO1xuICAgICAgZGF0YVtvZmZzZXQgKyByb3dTaXplICsgMV0gPSBkYXRhW29mZnNldCArIHJvd1NpemUgLSAzXTtcbiAgICAgIGRhdGFbb2Zmc2V0ICsgcm93U2l6ZSArIDJdID0gZGF0YVtvZmZzZXQgKyByb3dTaXplIC0gMl07XG4gICAgICBkYXRhW29mZnNldCArIHJvd1NpemUgKyAzXSA9IGRhdGFbb2Zmc2V0ICsgcm93U2l6ZSAtIDFdO1xuICAgICAgb2Zmc2V0IC09IGltZ1Jvd1NpemU7XG4gICAgfVxuICB9XG5cbiAgZm5BcnJheS5zcGxpY2UoaUZpcnN0U2F2ZSwgY291bnQgKiA0LCBfdXRpbC5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cCk7XG4gIGFyZ3NBcnJheS5zcGxpY2UoaUZpcnN0U2F2ZSwgY291bnQgKiA0LCBbe1xuICAgIHdpZHRoOiBpbWdXaWR0aCxcbiAgICBoZWlnaHQ6IGltZ0hlaWdodCxcbiAgICBraW5kOiBfdXRpbC5JbWFnZUtpbmQuUkdCQV8zMkJQUCxcbiAgICBkYXRhOiBpbWdEYXRhXG4gIH0sIG1hcF0pO1xuICByZXR1cm4gaUZpcnN0U2F2ZSArIDE7XG59KTtcbmFkZFN0YXRlKEluaXRpYWxTdGF0ZSwgW191dGlsLk9QUy5zYXZlLCBfdXRpbC5PUFMudHJhbnNmb3JtLCBfdXRpbC5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LCBfdXRpbC5PUFMucmVzdG9yZV0sIG51bGwsIGZ1bmN0aW9uIGl0ZXJhdGVJbWFnZU1hc2tHcm91cChjb250ZXh0LCBpKSB7XG4gIGNvbnN0IGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXk7XG4gIGNvbnN0IGlGaXJzdFNhdmUgPSBjb250ZXh0LmlDdXJyIC0gMztcbiAgY29uc3QgcG9zID0gKGkgLSBpRmlyc3RTYXZlKSAlIDQ7XG5cbiAgc3dpdGNoIChwb3MpIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnNhdmU7XG5cbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnRyYW5zZm9ybTtcblxuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiBmbkFycmF5W2ldID09PSBfdXRpbC5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0O1xuXG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5yZXN0b3JlO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlSW1hZ2VNYXNrR3JvdXAgLSBpbnZhbGlkIHBvczogJHtwb3N9YCk7XG59LCBmdW5jdGlvbiBmb3VuZEltYWdlTWFza0dyb3VwKGNvbnRleHQsIGkpIHtcbiAgY29uc3QgTUlOX0lNQUdFU19JTl9NQVNLU19CTE9DSyA9IDEwO1xuICBjb25zdCBNQVhfSU1BR0VTX0lOX01BU0tTX0JMT0NLID0gMTAwO1xuICBjb25zdCBNQVhfU0FNRV9JTUFHRVNfSU5fTUFTS1NfQkxPQ0sgPSAxMDAwO1xuICBjb25zdCBmbkFycmF5ID0gY29udGV4dC5mbkFycmF5LFxuICAgICAgICBhcmdzQXJyYXkgPSBjb250ZXh0LmFyZ3NBcnJheTtcbiAgY29uc3QgY3VyciA9IGNvbnRleHQuaUN1cnI7XG4gIGNvbnN0IGlGaXJzdFNhdmUgPSBjdXJyIC0gMztcbiAgY29uc3QgaUZpcnN0VHJhbnNmb3JtID0gY3VyciAtIDI7XG4gIGNvbnN0IGlGaXJzdFBJTVhPID0gY3VyciAtIDE7XG4gIGxldCBjb3VudCA9IE1hdGguZmxvb3IoKGkgLSBpRmlyc3RTYXZlKSAvIDQpO1xuICBjb3VudCA9IGhhbmRsZVBhaW50U29saWRDb2xvckltYWdlTWFzayhpRmlyc3RTYXZlLCBjb3VudCwgZm5BcnJheSwgYXJnc0FycmF5KTtcblxuICBpZiAoY291bnQgPCBNSU5fSU1BR0VTX0lOX01BU0tTX0JMT0NLKSB7XG4gICAgcmV0dXJuIGkgLSAoaSAtIGlGaXJzdFNhdmUpICUgNDtcbiAgfVxuXG4gIGxldCBpc1NhbWVJbWFnZSA9IGZhbHNlO1xuICBsZXQgaVRyYW5zZm9ybSwgdHJhbnNmb3JtQXJncztcbiAgY29uc3QgZmlyc3RQSU1YT0FyZzAgPSBhcmdzQXJyYXlbaUZpcnN0UElNWE9dWzBdO1xuICBjb25zdCBmaXJzdFRyYW5zZm9ybUFyZzAgPSBhcmdzQXJyYXlbaUZpcnN0VHJhbnNmb3JtXVswXSxcbiAgICAgICAgZmlyc3RUcmFuc2Zvcm1BcmcxID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bMV0sXG4gICAgICAgIGZpcnN0VHJhbnNmb3JtQXJnMiA9IGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzJdLFxuICAgICAgICBmaXJzdFRyYW5zZm9ybUFyZzMgPSBhcmdzQXJyYXlbaUZpcnN0VHJhbnNmb3JtXVszXTtcblxuICBpZiAoZmlyc3RUcmFuc2Zvcm1BcmcxID09PSBmaXJzdFRyYW5zZm9ybUFyZzIpIHtcbiAgICBpc1NhbWVJbWFnZSA9IHRydWU7XG4gICAgaVRyYW5zZm9ybSA9IGlGaXJzdFRyYW5zZm9ybSArIDQ7XG4gICAgbGV0IGlQSU1YTyA9IGlGaXJzdFBJTVhPICsgNDtcblxuICAgIGZvciAobGV0IHEgPSAxOyBxIDwgY291bnQ7IHErKywgaVRyYW5zZm9ybSArPSA0LCBpUElNWE8gKz0gNCkge1xuICAgICAgdHJhbnNmb3JtQXJncyA9IGFyZ3NBcnJheVtpVHJhbnNmb3JtXTtcblxuICAgICAgaWYgKGFyZ3NBcnJheVtpUElNWE9dWzBdICE9PSBmaXJzdFBJTVhPQXJnMCB8fCB0cmFuc2Zvcm1BcmdzWzBdICE9PSBmaXJzdFRyYW5zZm9ybUFyZzAgfHwgdHJhbnNmb3JtQXJnc1sxXSAhPT0gZmlyc3RUcmFuc2Zvcm1BcmcxIHx8IHRyYW5zZm9ybUFyZ3NbMl0gIT09IGZpcnN0VHJhbnNmb3JtQXJnMiB8fCB0cmFuc2Zvcm1BcmdzWzNdICE9PSBmaXJzdFRyYW5zZm9ybUFyZzMpIHtcbiAgICAgICAgaWYgKHEgPCBNSU5fSU1BR0VTX0lOX01BU0tTX0JMT0NLKSB7XG4gICAgICAgICAgaXNTYW1lSW1hZ2UgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb3VudCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoaXNTYW1lSW1hZ2UpIHtcbiAgICBjb3VudCA9IE1hdGgubWluKGNvdW50LCBNQVhfU0FNRV9JTUFHRVNfSU5fTUFTS1NfQkxPQ0spO1xuICAgIGNvbnN0IHBvc2l0aW9ucyA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQgKiAyKTtcbiAgICBpVHJhbnNmb3JtID0gaUZpcnN0VHJhbnNmb3JtO1xuXG4gICAgZm9yIChsZXQgcSA9IDA7IHEgPCBjb3VudDsgcSsrLCBpVHJhbnNmb3JtICs9IDQpIHtcbiAgICAgIHRyYW5zZm9ybUFyZ3MgPSBhcmdzQXJyYXlbaVRyYW5zZm9ybV07XG4gICAgICBwb3NpdGlvbnNbcSA8PCAxXSA9IHRyYW5zZm9ybUFyZ3NbNF07XG4gICAgICBwb3NpdGlvbnNbKHEgPDwgMSkgKyAxXSA9IHRyYW5zZm9ybUFyZ3NbNV07XG4gICAgfVxuXG4gICAgZm5BcnJheS5zcGxpY2UoaUZpcnN0U2F2ZSwgY291bnQgKiA0LCBfdXRpbC5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0KTtcbiAgICBhcmdzQXJyYXkuc3BsaWNlKGlGaXJzdFNhdmUsIGNvdW50ICogNCwgW2ZpcnN0UElNWE9BcmcwLCBmaXJzdFRyYW5zZm9ybUFyZzAsIGZpcnN0VHJhbnNmb3JtQXJnMSwgZmlyc3RUcmFuc2Zvcm1BcmcyLCBmaXJzdFRyYW5zZm9ybUFyZzMsIHBvc2l0aW9uc10pO1xuICB9IGVsc2Uge1xuICAgIGNvdW50ID0gTWF0aC5taW4oY291bnQsIE1BWF9JTUFHRVNfSU5fTUFTS1NfQkxPQ0spO1xuICAgIGNvbnN0IGltYWdlcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgcSA9IDA7IHEgPCBjb3VudDsgcSsrKSB7XG4gICAgICB0cmFuc2Zvcm1BcmdzID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybSArIChxIDw8IDIpXTtcbiAgICAgIGNvbnN0IG1hc2tQYXJhbXMgPSBhcmdzQXJyYXlbaUZpcnN0UElNWE8gKyAocSA8PCAyKV1bMF07XG4gICAgICBpbWFnZXMucHVzaCh7XG4gICAgICAgIGRhdGE6IG1hc2tQYXJhbXMuZGF0YSxcbiAgICAgICAgd2lkdGg6IG1hc2tQYXJhbXMud2lkdGgsXG4gICAgICAgIGhlaWdodDogbWFza1BhcmFtcy5oZWlnaHQsXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtQXJnc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm5BcnJheS5zcGxpY2UoaUZpcnN0U2F2ZSwgY291bnQgKiA0LCBfdXRpbC5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0R3JvdXApO1xuICAgIGFyZ3NBcnJheS5zcGxpY2UoaUZpcnN0U2F2ZSwgY291bnQgKiA0LCBbaW1hZ2VzXSk7XG4gIH1cblxuICByZXR1cm4gaUZpcnN0U2F2ZSArIDE7XG59KTtcbmFkZFN0YXRlKEluaXRpYWxTdGF0ZSwgW191dGlsLk9QUy5zYXZlLCBfdXRpbC5PUFMudHJhbnNmb3JtLCBfdXRpbC5PUFMucGFpbnRJbWFnZVhPYmplY3QsIF91dGlsLk9QUy5yZXN0b3JlXSwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgY29uc3QgYXJnc0FycmF5ID0gY29udGV4dC5hcmdzQXJyYXk7XG4gIGNvbnN0IGlGaXJzdFRyYW5zZm9ybSA9IGNvbnRleHQuaUN1cnIgLSAyO1xuICByZXR1cm4gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bMV0gPT09IDAgJiYgYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bMl0gPT09IDA7XG59LCBmdW5jdGlvbiBpdGVyYXRlSW1hZ2VHcm91cChjb250ZXh0LCBpKSB7XG4gIGNvbnN0IGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXksXG4gICAgICAgIGFyZ3NBcnJheSA9IGNvbnRleHQuYXJnc0FycmF5O1xuICBjb25zdCBpRmlyc3RTYXZlID0gY29udGV4dC5pQ3VyciAtIDM7XG4gIGNvbnN0IHBvcyA9IChpIC0gaUZpcnN0U2F2ZSkgJSA0O1xuXG4gIHN3aXRjaCAocG9zKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5zYXZlO1xuXG4gICAgY2FzZSAxOlxuICAgICAgaWYgKGZuQXJyYXlbaV0gIT09IF91dGlsLk9QUy50cmFuc2Zvcm0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpRmlyc3RUcmFuc2Zvcm0gPSBjb250ZXh0LmlDdXJyIC0gMjtcbiAgICAgIGNvbnN0IGZpcnN0VHJhbnNmb3JtQXJnMCA9IGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzBdO1xuICAgICAgY29uc3QgZmlyc3RUcmFuc2Zvcm1BcmczID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bM107XG5cbiAgICAgIGlmIChhcmdzQXJyYXlbaV1bMF0gIT09IGZpcnN0VHJhbnNmb3JtQXJnMCB8fCBhcmdzQXJyYXlbaV1bMV0gIT09IDAgfHwgYXJnc0FycmF5W2ldWzJdICE9PSAwIHx8IGFyZ3NBcnJheVtpXVszXSAhPT0gZmlyc3RUcmFuc2Zvcm1BcmczKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlIDI6XG4gICAgICBpZiAoZm5BcnJheVtpXSAhPT0gX3V0aWwuT1BTLnBhaW50SW1hZ2VYT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaUZpcnN0UElYTyA9IGNvbnRleHQuaUN1cnIgLSAxO1xuICAgICAgY29uc3QgZmlyc3RQSVhPQXJnMCA9IGFyZ3NBcnJheVtpRmlyc3RQSVhPXVswXTtcblxuICAgICAgaWYgKGFyZ3NBcnJheVtpXVswXSAhPT0gZmlyc3RQSVhPQXJnMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5yZXN0b3JlO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlSW1hZ2VHcm91cCAtIGludmFsaWQgcG9zOiAke3Bvc31gKTtcbn0sIGZ1bmN0aW9uIChjb250ZXh0LCBpKSB7XG4gIGNvbnN0IE1JTl9JTUFHRVNfSU5fQkxPQ0sgPSAzO1xuICBjb25zdCBNQVhfSU1BR0VTX0lOX0JMT0NLID0gMTAwMDtcbiAgY29uc3QgZm5BcnJheSA9IGNvbnRleHQuZm5BcnJheSxcbiAgICAgICAgYXJnc0FycmF5ID0gY29udGV4dC5hcmdzQXJyYXk7XG4gIGNvbnN0IGN1cnIgPSBjb250ZXh0LmlDdXJyO1xuICBjb25zdCBpRmlyc3RTYXZlID0gY3VyciAtIDM7XG4gIGNvbnN0IGlGaXJzdFRyYW5zZm9ybSA9IGN1cnIgLSAyO1xuICBjb25zdCBpRmlyc3RQSVhPID0gY3VyciAtIDE7XG4gIGNvbnN0IGZpcnN0UElYT0FyZzAgPSBhcmdzQXJyYXlbaUZpcnN0UElYT11bMF07XG4gIGNvbnN0IGZpcnN0VHJhbnNmb3JtQXJnMCA9IGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzBdO1xuICBjb25zdCBmaXJzdFRyYW5zZm9ybUFyZzMgPSBhcmdzQXJyYXlbaUZpcnN0VHJhbnNmb3JtXVszXTtcbiAgY29uc3QgY291bnQgPSBNYXRoLm1pbihNYXRoLmZsb29yKChpIC0gaUZpcnN0U2F2ZSkgLyA0KSwgTUFYX0lNQUdFU19JTl9CTE9DSyk7XG5cbiAgaWYgKGNvdW50IDwgTUlOX0lNQUdFU19JTl9CTE9DSykge1xuICAgIHJldHVybiBpIC0gKGkgLSBpRmlyc3RTYXZlKSAlIDQ7XG4gIH1cblxuICBjb25zdCBwb3NpdGlvbnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvdW50ICogMik7XG4gIGxldCBpVHJhbnNmb3JtID0gaUZpcnN0VHJhbnNmb3JtO1xuXG4gIGZvciAobGV0IHEgPSAwOyBxIDwgY291bnQ7IHErKywgaVRyYW5zZm9ybSArPSA0KSB7XG4gICAgY29uc3QgdHJhbnNmb3JtQXJncyA9IGFyZ3NBcnJheVtpVHJhbnNmb3JtXTtcbiAgICBwb3NpdGlvbnNbcSA8PCAxXSA9IHRyYW5zZm9ybUFyZ3NbNF07XG4gICAgcG9zaXRpb25zWyhxIDw8IDEpICsgMV0gPSB0cmFuc2Zvcm1BcmdzWzVdO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtmaXJzdFBJWE9BcmcwLCBmaXJzdFRyYW5zZm9ybUFyZzAsIGZpcnN0VHJhbnNmb3JtQXJnMywgcG9zaXRpb25zXTtcbiAgZm5BcnJheS5zcGxpY2UoaUZpcnN0U2F2ZSwgY291bnQgKiA0LCBfdXRpbC5PUFMucGFpbnRJbWFnZVhPYmplY3RSZXBlYXQpO1xuICBhcmdzQXJyYXkuc3BsaWNlKGlGaXJzdFNhdmUsIGNvdW50ICogNCwgYXJncyk7XG4gIHJldHVybiBpRmlyc3RTYXZlICsgMTtcbn0pO1xuYWRkU3RhdGUoSW5pdGlhbFN0YXRlLCBbX3V0aWwuT1BTLmJlZ2luVGV4dCwgX3V0aWwuT1BTLnNldEZvbnQsIF91dGlsLk9QUy5zZXRUZXh0TWF0cml4LCBfdXRpbC5PUFMuc2hvd1RleHQsIF91dGlsLk9QUy5lbmRUZXh0XSwgbnVsbCwgZnVuY3Rpb24gaXRlcmF0ZVNob3dUZXh0R3JvdXAoY29udGV4dCwgaSkge1xuICBjb25zdCBmbkFycmF5ID0gY29udGV4dC5mbkFycmF5LFxuICAgICAgICBhcmdzQXJyYXkgPSBjb250ZXh0LmFyZ3NBcnJheTtcbiAgY29uc3QgaUZpcnN0U2F2ZSA9IGNvbnRleHQuaUN1cnIgLSA0O1xuICBjb25zdCBwb3MgPSAoaSAtIGlGaXJzdFNhdmUpICUgNTtcblxuICBzd2l0Y2ggKHBvcykge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBmbkFycmF5W2ldID09PSBfdXRpbC5PUFMuYmVnaW5UZXh0O1xuXG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5zZXRGb250O1xuXG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5zZXRUZXh0TWF0cml4O1xuXG4gICAgY2FzZSAzOlxuICAgICAgaWYgKGZuQXJyYXlbaV0gIT09IF91dGlsLk9QUy5zaG93VGV4dCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlGaXJzdFNldEZvbnQgPSBjb250ZXh0LmlDdXJyIC0gMztcbiAgICAgIGNvbnN0IGZpcnN0U2V0Rm9udEFyZzAgPSBhcmdzQXJyYXlbaUZpcnN0U2V0Rm9udF1bMF07XG4gICAgICBjb25zdCBmaXJzdFNldEZvbnRBcmcxID0gYXJnc0FycmF5W2lGaXJzdFNldEZvbnRdWzFdO1xuXG4gICAgICBpZiAoYXJnc0FycmF5W2ldWzBdICE9PSBmaXJzdFNldEZvbnRBcmcwIHx8IGFyZ3NBcnJheVtpXVsxXSAhPT0gZmlyc3RTZXRGb250QXJnMSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5lbmRUZXh0O1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlU2hvd1RleHRHcm91cCAtIGludmFsaWQgcG9zOiAke3Bvc31gKTtcbn0sIGZ1bmN0aW9uIChjb250ZXh0LCBpKSB7XG4gIGNvbnN0IE1JTl9DSEFSU19JTl9CTE9DSyA9IDM7XG4gIGNvbnN0IE1BWF9DSEFSU19JTl9CTE9DSyA9IDEwMDA7XG4gIGNvbnN0IGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXksXG4gICAgICAgIGFyZ3NBcnJheSA9IGNvbnRleHQuYXJnc0FycmF5O1xuICBjb25zdCBjdXJyID0gY29udGV4dC5pQ3VycjtcbiAgY29uc3QgaUZpcnN0QmVnaW5UZXh0ID0gY3VyciAtIDQ7XG4gIGNvbnN0IGlGaXJzdFNldEZvbnQgPSBjdXJyIC0gMztcbiAgY29uc3QgaUZpcnN0U2V0VGV4dE1hdHJpeCA9IGN1cnIgLSAyO1xuICBjb25zdCBpRmlyc3RTaG93VGV4dCA9IGN1cnIgLSAxO1xuICBjb25zdCBpRmlyc3RFbmRUZXh0ID0gY3VycjtcbiAgY29uc3QgZmlyc3RTZXRGb250QXJnMCA9IGFyZ3NBcnJheVtpRmlyc3RTZXRGb250XVswXTtcbiAgY29uc3QgZmlyc3RTZXRGb250QXJnMSA9IGFyZ3NBcnJheVtpRmlyc3RTZXRGb250XVsxXTtcbiAgbGV0IGNvdW50ID0gTWF0aC5taW4oTWF0aC5mbG9vcigoaSAtIGlGaXJzdEJlZ2luVGV4dCkgLyA1KSwgTUFYX0NIQVJTX0lOX0JMT0NLKTtcblxuICBpZiAoY291bnQgPCBNSU5fQ0hBUlNfSU5fQkxPQ0spIHtcbiAgICByZXR1cm4gaSAtIChpIC0gaUZpcnN0QmVnaW5UZXh0KSAlIDU7XG4gIH1cblxuICBsZXQgaUZpcnN0ID0gaUZpcnN0QmVnaW5UZXh0O1xuXG4gIGlmIChpRmlyc3RCZWdpblRleHQgPj0gNCAmJiBmbkFycmF5W2lGaXJzdEJlZ2luVGV4dCAtIDRdID09PSBmbkFycmF5W2lGaXJzdFNldEZvbnRdICYmIGZuQXJyYXlbaUZpcnN0QmVnaW5UZXh0IC0gM10gPT09IGZuQXJyYXlbaUZpcnN0U2V0VGV4dE1hdHJpeF0gJiYgZm5BcnJheVtpRmlyc3RCZWdpblRleHQgLSAyXSA9PT0gZm5BcnJheVtpRmlyc3RTaG93VGV4dF0gJiYgZm5BcnJheVtpRmlyc3RCZWdpblRleHQgLSAxXSA9PT0gZm5BcnJheVtpRmlyc3RFbmRUZXh0XSAmJiBhcmdzQXJyYXlbaUZpcnN0QmVnaW5UZXh0IC0gNF1bMF0gPT09IGZpcnN0U2V0Rm9udEFyZzAgJiYgYXJnc0FycmF5W2lGaXJzdEJlZ2luVGV4dCAtIDRdWzFdID09PSBmaXJzdFNldEZvbnRBcmcxKSB7XG4gICAgY291bnQrKztcbiAgICBpRmlyc3QgLT0gNTtcbiAgfVxuXG4gIGxldCBpRW5kVGV4dCA9IGlGaXJzdCArIDQ7XG5cbiAgZm9yIChsZXQgcSA9IDE7IHEgPCBjb3VudDsgcSsrKSB7XG4gICAgZm5BcnJheS5zcGxpY2UoaUVuZFRleHQsIDMpO1xuICAgIGFyZ3NBcnJheS5zcGxpY2UoaUVuZFRleHQsIDMpO1xuICAgIGlFbmRUZXh0ICs9IDI7XG4gIH1cblxuICByZXR1cm4gaUVuZFRleHQgKyAxO1xufSk7XG5cbmNsYXNzIE51bGxPcHRpbWl6ZXIge1xuICBjb25zdHJ1Y3RvcihxdWV1ZSkge1xuICAgIHRoaXMucXVldWUgPSBxdWV1ZTtcbiAgfVxuXG4gIF9vcHRpbWl6ZSgpIHt9XG5cbiAgcHVzaChmbiwgYXJncykge1xuICAgIHRoaXMucXVldWUuZm5BcnJheS5wdXNoKGZuKTtcbiAgICB0aGlzLnF1ZXVlLmFyZ3NBcnJheS5wdXNoKGFyZ3MpO1xuXG4gICAgdGhpcy5fb3B0aW1pemUoKTtcbiAgfVxuXG4gIGZsdXNoKCkge31cblxuICByZXNldCgpIHt9XG5cbn1cblxuY2xhc3MgUXVldWVPcHRpbWl6ZXIgZXh0ZW5kcyBOdWxsT3B0aW1pemVyIHtcbiAgY29uc3RydWN0b3IocXVldWUpIHtcbiAgICBzdXBlcihxdWV1ZSk7XG4gICAgdGhpcy5zdGF0ZSA9IG51bGw7XG4gICAgdGhpcy5jb250ZXh0ID0ge1xuICAgICAgaUN1cnI6IDAsXG4gICAgICBmbkFycmF5OiBxdWV1ZS5mbkFycmF5LFxuICAgICAgYXJnc0FycmF5OiBxdWV1ZS5hcmdzQXJyYXlcbiAgICB9O1xuICAgIHRoaXMubWF0Y2ggPSBudWxsO1xuICAgIHRoaXMubGFzdFByb2Nlc3NlZCA9IDA7XG4gIH1cblxuICBfb3B0aW1pemUoKSB7XG4gICAgY29uc3QgZm5BcnJheSA9IHRoaXMucXVldWUuZm5BcnJheTtcbiAgICBsZXQgaSA9IHRoaXMubGFzdFByb2Nlc3NlZCxcbiAgICAgICAgaWkgPSBmbkFycmF5Lmxlbmd0aDtcbiAgICBsZXQgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgIGxldCBtYXRjaCA9IHRoaXMubWF0Y2g7XG5cbiAgICBpZiAoIXN0YXRlICYmICFtYXRjaCAmJiBpICsgMSA9PT0gaWkgJiYgIUluaXRpYWxTdGF0ZVtmbkFycmF5W2ldXSkge1xuICAgICAgdGhpcy5sYXN0UHJvY2Vzc2VkID0gaWk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgIHdoaWxlIChpIDwgaWkpIHtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBpdGVyYXRlID0gKDAsIG1hdGNoLml0ZXJhdGVGbikoY29udGV4dCwgaSk7XG5cbiAgICAgICAgaWYgKGl0ZXJhdGUpIHtcbiAgICAgICAgICBpKys7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpID0gKDAsIG1hdGNoLnByb2Nlc3NGbikoY29udGV4dCwgaSArIDEpO1xuICAgICAgICBpaSA9IGZuQXJyYXkubGVuZ3RoO1xuICAgICAgICBtYXRjaCA9IG51bGw7XG4gICAgICAgIHN0YXRlID0gbnVsbDtcblxuICAgICAgICBpZiAoaSA+PSBpaSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0YXRlID0gKHN0YXRlIHx8IEluaXRpYWxTdGF0ZSlbZm5BcnJheVtpXV07XG5cbiAgICAgIGlmICghc3RhdGUgfHwgQXJyYXkuaXNBcnJheShzdGF0ZSkpIHtcbiAgICAgICAgaSsrO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5pQ3VyciA9IGk7XG4gICAgICBpKys7XG5cbiAgICAgIGlmIChzdGF0ZS5jaGVja0ZuICYmICEoMCwgc3RhdGUuY2hlY2tGbikoY29udGV4dCkpIHtcbiAgICAgICAgc3RhdGUgPSBudWxsO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbWF0Y2ggPSBzdGF0ZTtcbiAgICAgIHN0YXRlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgdGhpcy5tYXRjaCA9IG1hdGNoO1xuICAgIHRoaXMubGFzdFByb2Nlc3NlZCA9IGk7XG4gIH1cblxuICBmbHVzaCgpIHtcbiAgICB3aGlsZSAodGhpcy5tYXRjaCkge1xuICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5xdWV1ZS5mbkFycmF5Lmxlbmd0aDtcbiAgICAgIHRoaXMubGFzdFByb2Nlc3NlZCA9ICgwLCB0aGlzLm1hdGNoLnByb2Nlc3NGbikodGhpcy5jb250ZXh0LCBsZW5ndGgpO1xuICAgICAgdGhpcy5tYXRjaCA9IG51bGw7XG4gICAgICB0aGlzLnN0YXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5fb3B0aW1pemUoKTtcbiAgICB9XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnN0YXRlID0gbnVsbDtcbiAgICB0aGlzLm1hdGNoID0gbnVsbDtcbiAgICB0aGlzLmxhc3RQcm9jZXNzZWQgPSAwO1xuICB9XG5cbn1cblxuY2xhc3MgT3BlcmF0b3JMaXN0IHtcbiAgc3RhdGljIGdldCBDSFVOS19TSVpFKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIkNIVU5LX1NJWkVcIiwgMTAwMCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IENIVU5LX1NJWkVfQUJPVVQoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiQ0hVTktfU0laRV9BQk9VVFwiLCB0aGlzLkNIVU5LX1NJWkUgLSA1KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGludGVudCA9IDAsIHN0cmVhbVNpbmspIHtcbiAgICB0aGlzLl9zdHJlYW1TaW5rID0gc3RyZWFtU2luaztcbiAgICB0aGlzLmZuQXJyYXkgPSBbXTtcbiAgICB0aGlzLmFyZ3NBcnJheSA9IFtdO1xuXG4gICAgaWYgKHN0cmVhbVNpbmsgJiYgIShpbnRlbnQgJiBfdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLk9QTElTVCkpIHtcbiAgICAgIHRoaXMub3B0aW1pemVyID0gbmV3IFF1ZXVlT3B0aW1pemVyKHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wdGltaXplciA9IG5ldyBOdWxsT3B0aW1pemVyKHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gbmV3IFNldCgpO1xuICAgIHRoaXMuX3RvdGFsTGVuZ3RoID0gMDtcbiAgICB0aGlzLndlaWdodCA9IDA7XG4gICAgdGhpcy5fcmVzb2x2ZWQgPSBzdHJlYW1TaW5rID8gbnVsbCA6IFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgZ2V0IGxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5hcmdzQXJyYXkubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHJlYWR5KCkge1xuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlZCB8fCB0aGlzLl9zdHJlYW1TaW5rLnJlYWR5O1xuICB9XG5cbiAgZ2V0IHRvdGFsTGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl90b3RhbExlbmd0aCArIHRoaXMubGVuZ3RoO1xuICB9XG5cbiAgYWRkT3AoZm4sIGFyZ3MpIHtcbiAgICB0aGlzLm9wdGltaXplci5wdXNoKGZuLCBhcmdzKTtcbiAgICB0aGlzLndlaWdodCsrO1xuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVNpbmspIHtcbiAgICAgIGlmICh0aGlzLndlaWdodCA+PSBPcGVyYXRvckxpc3QuQ0hVTktfU0laRSkge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMud2VpZ2h0ID49IE9wZXJhdG9yTGlzdC5DSFVOS19TSVpFX0FCT1VUICYmIChmbiA9PT0gX3V0aWwuT1BTLnJlc3RvcmUgfHwgZm4gPT09IF91dGlsLk9QUy5lbmRUZXh0KSkge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkRGVwZW5kZW5jeShkZXBlbmRlbmN5KSB7XG4gICAgaWYgKHRoaXMuZGVwZW5kZW5jaWVzLmhhcyhkZXBlbmRlbmN5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGVwZW5kZW5jaWVzLmFkZChkZXBlbmRlbmN5KTtcbiAgICB0aGlzLmFkZE9wKF91dGlsLk9QUy5kZXBlbmRlbmN5LCBbZGVwZW5kZW5jeV0pO1xuICB9XG5cbiAgYWRkRGVwZW5kZW5jaWVzKGRlcGVuZGVuY2llcykge1xuICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiBkZXBlbmRlbmNpZXMpIHtcbiAgICAgIHRoaXMuYWRkRGVwZW5kZW5jeShkZXBlbmRlbmN5KTtcbiAgICB9XG4gIH1cblxuICBhZGRPcExpc3Qob3BMaXN0KSB7XG4gICAgaWYgKCEob3BMaXN0IGluc3RhbmNlb2YgT3BlcmF0b3JMaXN0KSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKCdhZGRPcExpc3QgLSBpZ25vcmluZyBpbnZhbGlkIFwib3BMaXN0XCIgcGFyYW1ldGVyLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiBvcExpc3QuZGVwZW5kZW5jaWVzKSB7XG4gICAgICB0aGlzLmRlcGVuZGVuY2llcy5hZGQoZGVwZW5kZW5jeSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gb3BMaXN0Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHRoaXMuYWRkT3Aob3BMaXN0LmZuQXJyYXlbaV0sIG9wTGlzdC5hcmdzQXJyYXlbaV0pO1xuICAgIH1cbiAgfVxuXG4gIGdldElSKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmbkFycmF5OiB0aGlzLmZuQXJyYXksXG4gICAgICBhcmdzQXJyYXk6IHRoaXMuYXJnc0FycmF5LFxuICAgICAgbGVuZ3RoOiB0aGlzLmxlbmd0aFxuICAgIH07XG4gIH1cblxuICBnZXQgX3RyYW5zZmVycygpIHtcbiAgICBjb25zdCB0cmFuc2ZlcnMgPSBbXTtcbiAgICBjb25zdCB7XG4gICAgICBmbkFycmF5LFxuICAgICAgYXJnc0FycmF5LFxuICAgICAgbGVuZ3RoXG4gICAgfSA9IHRoaXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBzd2l0Y2ggKGZuQXJyYXlbaV0pIHtcbiAgICAgICAgY2FzZSBfdXRpbC5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3Q6XG4gICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6XG4gICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdDpcbiAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzQXJyYXlbaV1bMF07XG4gICAgICAgICAgO1xuXG4gICAgICAgICAgaWYgKCFhcmcuY2FjaGVkKSB7XG4gICAgICAgICAgICB0cmFuc2ZlcnMucHVzaChhcmcuZGF0YS5idWZmZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cmFuc2ZlcnM7XG4gIH1cblxuICBmbHVzaChsYXN0Q2h1bmsgPSBmYWxzZSkge1xuICAgIHRoaXMub3B0aW1pemVyLmZsdXNoKCk7XG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgdGhpcy5fdG90YWxMZW5ndGggKz0gbGVuZ3RoO1xuXG4gICAgdGhpcy5fc3RyZWFtU2luay5lbnF1ZXVlKHtcbiAgICAgIGZuQXJyYXk6IHRoaXMuZm5BcnJheSxcbiAgICAgIGFyZ3NBcnJheTogdGhpcy5hcmdzQXJyYXksXG4gICAgICBsYXN0Q2h1bmssXG4gICAgICBsZW5ndGhcbiAgICB9LCAxLCB0aGlzLl90cmFuc2ZlcnMpO1xuXG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuY2xlYXIoKTtcbiAgICB0aGlzLmZuQXJyYXkubGVuZ3RoID0gMDtcbiAgICB0aGlzLmFyZ3NBcnJheS5sZW5ndGggPSAwO1xuICAgIHRoaXMud2VpZ2h0ID0gMDtcbiAgICB0aGlzLm9wdGltaXplci5yZXNldCgpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5PcGVyYXRvckxpc3QgPSBPcGVyYXRvckxpc3Q7XG5cbi8qKiovIH0pLFxuLyogNjMgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuUERGSW1hZ2UgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfY29sb3JzcGFjZSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjQpO1xuXG52YXIgX2RlY29kZV9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI5KTtcblxudmFyIF9qcGVnX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMzcpO1xuXG52YXIgX2pweCA9IF9fd19wZGZqc19yZXF1aXJlX18oNDApO1xuXG5mdW5jdGlvbiBkZWNvZGVBbmRDbGFtcCh2YWx1ZSwgYWRkZW5kLCBjb2VmZmljaWVudCwgbWF4KSB7XG4gIHZhbHVlID0gYWRkZW5kICsgdmFsdWUgKiBjb2VmZmljaWVudDtcblxuICBpZiAodmFsdWUgPCAwKSB7XG4gICAgdmFsdWUgPSAwO1xuICB9IGVsc2UgaWYgKHZhbHVlID4gbWF4KSB7XG4gICAgdmFsdWUgPSBtYXg7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHJlc2l6ZUltYWdlTWFzayhzcmMsIGJwYywgdzEsIGgxLCB3MiwgaDIpIHtcbiAgY29uc3QgbGVuZ3RoID0gdzIgKiBoMjtcbiAgbGV0IGRlc3Q7XG5cbiAgaWYgKGJwYyA8PSA4KSB7XG4gICAgZGVzdCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gIH0gZWxzZSBpZiAoYnBjIDw9IDE2KSB7XG4gICAgZGVzdCA9IG5ldyBVaW50MTZBcnJheShsZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIGRlc3QgPSBuZXcgVWludDMyQXJyYXkobGVuZ3RoKTtcbiAgfVxuXG4gIGNvbnN0IHhSYXRpbyA9IHcxIC8gdzI7XG4gIGNvbnN0IHlSYXRpbyA9IGgxIC8gaDI7XG4gIGxldCBpLFxuICAgICAgaixcbiAgICAgIHB5LFxuICAgICAgbmV3SW5kZXggPSAwLFxuICAgICAgb2xkSW5kZXg7XG4gIGNvbnN0IHhTY2FsZWQgPSBuZXcgVWludDE2QXJyYXkodzIpO1xuICBjb25zdCB3MVNjYW5saW5lID0gdzE7XG5cbiAgZm9yIChpID0gMDsgaSA8IHcyOyBpKyspIHtcbiAgICB4U2NhbGVkW2ldID0gTWF0aC5mbG9vcihpICogeFJhdGlvKTtcbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCBoMjsgaSsrKSB7XG4gICAgcHkgPSBNYXRoLmZsb29yKGkgKiB5UmF0aW8pICogdzFTY2FubGluZTtcblxuICAgIGZvciAoaiA9IDA7IGogPCB3MjsgaisrKSB7XG4gICAgICBvbGRJbmRleCA9IHB5ICsgeFNjYWxlZFtqXTtcbiAgICAgIGRlc3RbbmV3SW5kZXgrK10gPSBzcmNbb2xkSW5kZXhdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufVxuXG5jbGFzcyBQREZJbWFnZSB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICB4cmVmLFxuICAgIHJlcyxcbiAgICBpbWFnZSxcbiAgICBpc0lubGluZSA9IGZhbHNlLFxuICAgIHNtYXNrID0gbnVsbCxcbiAgICBtYXNrID0gbnVsbCxcbiAgICBpc01hc2sgPSBmYWxzZSxcbiAgICBwZGZGdW5jdGlvbkZhY3RvcnksXG4gICAgbG9jYWxDb2xvclNwYWNlQ2FjaGVcbiAgfSkge1xuICAgIHRoaXMuaW1hZ2UgPSBpbWFnZTtcbiAgICBjb25zdCBkaWN0ID0gaW1hZ2UuZGljdDtcbiAgICBjb25zdCBmaWx0ZXIgPSBkaWN0LmdldChcIkZcIiwgXCJGaWx0ZXJcIik7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZmlsdGVyKSkge1xuICAgICAgc3dpdGNoIChmaWx0ZXIubmFtZSkge1xuICAgICAgICBjYXNlIFwiSlBYRGVjb2RlXCI6XG4gICAgICAgICAgY29uc3QganB4SW1hZ2UgPSBuZXcgX2pweC5KcHhJbWFnZSgpO1xuICAgICAgICAgIGpweEltYWdlLnBhcnNlSW1hZ2VQcm9wZXJ0aWVzKGltYWdlLnN0cmVhbSk7XG4gICAgICAgICAgaW1hZ2Uuc3RyZWFtLnJlc2V0KCk7XG4gICAgICAgICAgaW1hZ2Uud2lkdGggPSBqcHhJbWFnZS53aWR0aDtcbiAgICAgICAgICBpbWFnZS5oZWlnaHQgPSBqcHhJbWFnZS5oZWlnaHQ7XG4gICAgICAgICAgaW1hZ2UuYml0c1BlckNvbXBvbmVudCA9IGpweEltYWdlLmJpdHNQZXJDb21wb25lbnQ7XG4gICAgICAgICAgaW1hZ2UubnVtQ29tcHMgPSBqcHhJbWFnZS5jb21wb25lbnRzQ291bnQ7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIkpCSUcyRGVjb2RlXCI6XG4gICAgICAgICAgaW1hZ2UuYml0c1BlckNvbXBvbmVudCA9IDE7XG4gICAgICAgICAgaW1hZ2UubnVtQ29tcHMgPSAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB3aWR0aCA9IGRpY3QuZ2V0KFwiV1wiLCBcIldpZHRoXCIpO1xuICAgIGxldCBoZWlnaHQgPSBkaWN0LmdldChcIkhcIiwgXCJIZWlnaHRcIik7XG5cbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihpbWFnZS53aWR0aCkgJiYgaW1hZ2Uud2lkdGggPiAwICYmIE51bWJlci5pc0ludGVnZXIoaW1hZ2UuaGVpZ2h0KSAmJiBpbWFnZS5oZWlnaHQgPiAwICYmIChpbWFnZS53aWR0aCAhPT0gd2lkdGggfHwgaW1hZ2UuaGVpZ2h0ICE9PSBoZWlnaHQpKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJQREZJbWFnZSAtIHVzaW5nIHRoZSBXaWR0aC9IZWlnaHQgb2YgdGhlIGltYWdlIGRhdGEsIFwiICsgXCJyYXRoZXIgdGhhbiB0aGUgaW1hZ2UgZGljdGlvbmFyeS5cIik7XG4gICAgICB3aWR0aCA9IGltYWdlLndpZHRoO1xuICAgICAgaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0O1xuICAgIH1cblxuICAgIGlmICh3aWR0aCA8IDEgfHwgaGVpZ2h0IDwgMSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIGltYWdlIHdpZHRoOiAke3dpZHRofSBvciBoZWlnaHQ6ICR7aGVpZ2h0fWApO1xuICAgIH1cblxuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICB0aGlzLmludGVycG9sYXRlID0gZGljdC5nZXQoXCJJXCIsIFwiSW50ZXJwb2xhdGVcIik7XG4gICAgdGhpcy5pbWFnZU1hc2sgPSBkaWN0LmdldChcIklNXCIsIFwiSW1hZ2VNYXNrXCIpIHx8IGZhbHNlO1xuICAgIHRoaXMubWF0dGUgPSBkaWN0LmdldChcIk1hdHRlXCIpIHx8IGZhbHNlO1xuICAgIGxldCBiaXRzUGVyQ29tcG9uZW50ID0gaW1hZ2UuYml0c1BlckNvbXBvbmVudDtcblxuICAgIGlmICghYml0c1BlckNvbXBvbmVudCkge1xuICAgICAgYml0c1BlckNvbXBvbmVudCA9IGRpY3QuZ2V0KFwiQlBDXCIsIFwiQml0c1BlckNvbXBvbmVudFwiKTtcblxuICAgICAgaWYgKCFiaXRzUGVyQ29tcG9uZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlTWFzaykge1xuICAgICAgICAgIGJpdHNQZXJDb21wb25lbnQgPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgQml0cyBwZXIgY29tcG9uZW50IG1pc3NpbmcgaW4gaW1hZ2U6ICR7dGhpcy5pbWFnZU1hc2t9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmJwYyA9IGJpdHNQZXJDb21wb25lbnQ7XG5cbiAgICBpZiAoIXRoaXMuaW1hZ2VNYXNrKSB7XG4gICAgICBsZXQgY29sb3JTcGFjZSA9IGRpY3QuZ2V0UmF3KFwiQ1NcIikgfHwgZGljdC5nZXRSYXcoXCJDb2xvclNwYWNlXCIpO1xuXG4gICAgICBpZiAoIWNvbG9yU3BhY2UpIHtcbiAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiSlBYIGltYWdlcyAod2hpY2ggZG8gbm90IHJlcXVpcmUgY29sb3Igc3BhY2VzKVwiKTtcblxuICAgICAgICBzd2l0Y2ggKGltYWdlLm51bUNvbXBzKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgY29sb3JTcGFjZSA9IF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiRGV2aWNlR3JheVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgY29sb3JTcGFjZSA9IF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiRGV2aWNlUkdCXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBjb2xvclNwYWNlID0gX3ByaW1pdGl2ZXMuTmFtZS5nZXQoXCJEZXZpY2VDTVlLXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBKUFggaW1hZ2VzIHdpdGggJHtpbWFnZS5udW1Db21wc30gY29sb3IgY29tcG9uZW50cyBub3Qgc3VwcG9ydGVkLmApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29sb3JTcGFjZSA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2UucGFyc2Uoe1xuICAgICAgICBjczogY29sb3JTcGFjZSxcbiAgICAgICAgeHJlZixcbiAgICAgICAgcmVzb3VyY2VzOiBpc0lubGluZSA/IHJlcyA6IG51bGwsXG4gICAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeSxcbiAgICAgICAgbG9jYWxDb2xvclNwYWNlQ2FjaGVcbiAgICAgIH0pO1xuICAgICAgdGhpcy5udW1Db21wcyA9IHRoaXMuY29sb3JTcGFjZS5udW1Db21wcztcbiAgICB9XG5cbiAgICB0aGlzLmRlY29kZSA9IGRpY3QuZ2V0QXJyYXkoXCJEXCIsIFwiRGVjb2RlXCIpO1xuICAgIHRoaXMubmVlZHNEZWNvZGUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmRlY29kZSAmJiAodGhpcy5jb2xvclNwYWNlICYmICF0aGlzLmNvbG9yU3BhY2UuaXNEZWZhdWx0RGVjb2RlKHRoaXMuZGVjb2RlLCBiaXRzUGVyQ29tcG9uZW50KSB8fCBpc01hc2sgJiYgIV9jb2xvcnNwYWNlLkNvbG9yU3BhY2UuaXNEZWZhdWx0RGVjb2RlKHRoaXMuZGVjb2RlLCAxKSkpIHtcbiAgICAgIHRoaXMubmVlZHNEZWNvZGUgPSB0cnVlO1xuICAgICAgY29uc3QgbWF4ID0gKDEgPDwgYml0c1BlckNvbXBvbmVudCkgLSAxO1xuICAgICAgdGhpcy5kZWNvZGVDb2VmZmljaWVudHMgPSBbXTtcbiAgICAgIHRoaXMuZGVjb2RlQWRkZW5kcyA9IFtdO1xuICAgICAgY29uc3QgaXNJbmRleGVkID0gdGhpcy5jb2xvclNwYWNlICYmIHRoaXMuY29sb3JTcGFjZS5uYW1lID09PSBcIkluZGV4ZWRcIjtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGogPSAwOyBpIDwgdGhpcy5kZWNvZGUubGVuZ3RoOyBpICs9IDIsICsraikge1xuICAgICAgICBjb25zdCBkbWluID0gdGhpcy5kZWNvZGVbaV07XG4gICAgICAgIGNvbnN0IGRtYXggPSB0aGlzLmRlY29kZVtpICsgMV07XG4gICAgICAgIHRoaXMuZGVjb2RlQ29lZmZpY2llbnRzW2pdID0gaXNJbmRleGVkID8gKGRtYXggLSBkbWluKSAvIG1heCA6IGRtYXggLSBkbWluO1xuICAgICAgICB0aGlzLmRlY29kZUFkZGVuZHNbal0gPSBpc0luZGV4ZWQgPyBkbWluIDogbWF4ICogZG1pbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc21hc2spIHtcbiAgICAgIHRoaXMuc21hc2sgPSBuZXcgUERGSW1hZ2Uoe1xuICAgICAgICB4cmVmLFxuICAgICAgICByZXMsXG4gICAgICAgIGltYWdlOiBzbWFzayxcbiAgICAgICAgaXNJbmxpbmUsXG4gICAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeSxcbiAgICAgICAgbG9jYWxDb2xvclNwYWNlQ2FjaGVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAobWFzaykge1xuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkobWFzaykpIHtcbiAgICAgICAgY29uc3QgbWFza0RpY3QgPSBtYXNrLmRpY3QsXG4gICAgICAgICAgICAgIGltYWdlTWFzayA9IG1hc2tEaWN0LmdldChcIklNXCIsIFwiSW1hZ2VNYXNrXCIpO1xuXG4gICAgICAgIGlmICghaW1hZ2VNYXNrKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiSWdub3JpbmcgL01hc2sgaW4gaW1hZ2Ugd2l0aG91dCAvSW1hZ2VNYXNrLlwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1hc2sgPSBuZXcgUERGSW1hZ2Uoe1xuICAgICAgICAgICAgeHJlZixcbiAgICAgICAgICAgIHJlcyxcbiAgICAgICAgICAgIGltYWdlOiBtYXNrLFxuICAgICAgICAgICAgaXNJbmxpbmUsXG4gICAgICAgICAgICBpc01hc2s6IHRydWUsXG4gICAgICAgICAgICBwZGZGdW5jdGlvbkZhY3RvcnksXG4gICAgICAgICAgICBsb2NhbENvbG9yU3BhY2VDYWNoZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1hc2sgPSBtYXNrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBidWlsZEltYWdlKHtcbiAgICB4cmVmLFxuICAgIHJlcyxcbiAgICBpbWFnZSxcbiAgICBpc0lubGluZSA9IGZhbHNlLFxuICAgIHBkZkZ1bmN0aW9uRmFjdG9yeSxcbiAgICBsb2NhbENvbG9yU3BhY2VDYWNoZVxuICB9KSB7XG4gICAgY29uc3QgaW1hZ2VEYXRhID0gaW1hZ2U7XG4gICAgbGV0IHNtYXNrRGF0YSA9IG51bGw7XG4gICAgbGV0IG1hc2tEYXRhID0gbnVsbDtcbiAgICBjb25zdCBzbWFzayA9IGltYWdlLmRpY3QuZ2V0KFwiU01hc2tcIik7XG4gICAgY29uc3QgbWFzayA9IGltYWdlLmRpY3QuZ2V0KFwiTWFza1wiKTtcblxuICAgIGlmIChzbWFzaykge1xuICAgICAgc21hc2tEYXRhID0gc21hc2s7XG4gICAgfSBlbHNlIGlmIChtYXNrKSB7XG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShtYXNrKSB8fCBBcnJheS5pc0FycmF5KG1hc2spKSB7XG4gICAgICAgIG1hc2tEYXRhID0gbWFzaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIlVuc3VwcG9ydGVkIG1hc2sgZm9ybWF0LlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFBERkltYWdlKHtcbiAgICAgIHhyZWYsXG4gICAgICByZXMsXG4gICAgICBpbWFnZTogaW1hZ2VEYXRhLFxuICAgICAgaXNJbmxpbmUsXG4gICAgICBzbWFzazogc21hc2tEYXRhLFxuICAgICAgbWFzazogbWFza0RhdGEsXG4gICAgICBwZGZGdW5jdGlvbkZhY3RvcnksXG4gICAgICBsb2NhbENvbG9yU3BhY2VDYWNoZVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZU1hc2soe1xuICAgIGltZ0FycmF5LFxuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBpbWFnZUlzRnJvbURlY29kZVN0cmVhbSxcbiAgICBpbnZlcnNlRGVjb2RlLFxuICAgIGludGVycG9sYXRlXG4gIH0pIHtcbiAgICBjb25zdCBjb21wdXRlZExlbmd0aCA9ICh3aWR0aCArIDcgPj4gMykgKiBoZWlnaHQ7XG4gICAgY29uc3QgYWN0dWFsTGVuZ3RoID0gaW1nQXJyYXkuYnl0ZUxlbmd0aDtcbiAgICBjb25zdCBoYXZlRnVsbERhdGEgPSBjb21wdXRlZExlbmd0aCA9PT0gYWN0dWFsTGVuZ3RoO1xuICAgIGxldCBkYXRhLCBpO1xuXG4gICAgaWYgKGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtICYmICghaW52ZXJzZURlY29kZSB8fCBoYXZlRnVsbERhdGEpKSB7XG4gICAgICBkYXRhID0gaW1nQXJyYXk7XG4gICAgfSBlbHNlIGlmICghaW52ZXJzZURlY29kZSkge1xuICAgICAgZGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShhY3R1YWxMZW5ndGgpO1xuICAgICAgZGF0YS5zZXQoaW1nQXJyYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGNvbXB1dGVkTGVuZ3RoKTtcbiAgICAgIGRhdGEuc2V0KGltZ0FycmF5KTtcblxuICAgICAgZm9yIChpID0gYWN0dWFsTGVuZ3RoOyBpIDwgY29tcHV0ZWRMZW5ndGg7IGkrKykge1xuICAgICAgICBkYXRhW2ldID0gMHhmZjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW52ZXJzZURlY29kZSkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IGFjdHVhbExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGRhdGFbaV0gXj0gMHhmZjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YSxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgaW50ZXJwb2xhdGVcbiAgICB9O1xuICB9XG5cbiAgZ2V0IGRyYXdXaWR0aCgpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgodGhpcy53aWR0aCwgdGhpcy5zbWFzayAmJiB0aGlzLnNtYXNrLndpZHRoIHx8IDAsIHRoaXMubWFzayAmJiB0aGlzLm1hc2sud2lkdGggfHwgMCk7XG4gIH1cblxuICBnZXQgZHJhd0hlaWdodCgpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgodGhpcy5oZWlnaHQsIHRoaXMuc21hc2sgJiYgdGhpcy5zbWFzay5oZWlnaHQgfHwgMCwgdGhpcy5tYXNrICYmIHRoaXMubWFzay5oZWlnaHQgfHwgMCk7XG4gIH1cblxuICBkZWNvZGVCdWZmZXIoYnVmZmVyKSB7XG4gICAgY29uc3QgYnBjID0gdGhpcy5icGM7XG4gICAgY29uc3QgbnVtQ29tcHMgPSB0aGlzLm51bUNvbXBzO1xuICAgIGNvbnN0IGRlY29kZUFkZGVuZHMgPSB0aGlzLmRlY29kZUFkZGVuZHM7XG4gICAgY29uc3QgZGVjb2RlQ29lZmZpY2llbnRzID0gdGhpcy5kZWNvZGVDb2VmZmljaWVudHM7XG4gICAgY29uc3QgbWF4ID0gKDEgPDwgYnBjKSAtIDE7XG4gICAgbGV0IGksIGlpO1xuXG4gICAgaWYgKGJwYyA9PT0gMSkge1xuICAgICAgZm9yIChpID0gMCwgaWkgPSBidWZmZXIubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBidWZmZXJbaV0gPSArIWJ1ZmZlcltpXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IHRoaXMud2lkdGggKiB0aGlzLmhlaWdodDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtQ29tcHM7IGorKykge1xuICAgICAgICBidWZmZXJbaW5kZXhdID0gZGVjb2RlQW5kQ2xhbXAoYnVmZmVyW2luZGV4XSwgZGVjb2RlQWRkZW5kc1tqXSwgZGVjb2RlQ29lZmZpY2llbnRzW2pdLCBtYXgpO1xuICAgICAgICBpbmRleCsrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldENvbXBvbmVudHMoYnVmZmVyKSB7XG4gICAgY29uc3QgYnBjID0gdGhpcy5icGM7XG5cbiAgICBpZiAoYnBjID09PSA4KSB7XG4gICAgICByZXR1cm4gYnVmZmVyO1xuICAgIH1cblxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy53aWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICBjb25zdCBudW1Db21wcyA9IHRoaXMubnVtQ29tcHM7XG4gICAgY29uc3QgbGVuZ3RoID0gd2lkdGggKiBoZWlnaHQgKiBudW1Db21wcztcbiAgICBsZXQgYnVmZmVyUG9zID0gMDtcbiAgICBsZXQgb3V0cHV0O1xuXG4gICAgaWYgKGJwYyA8PSA4KSB7XG4gICAgICBvdXRwdXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuICAgIH0gZWxzZSBpZiAoYnBjIDw9IDE2KSB7XG4gICAgICBvdXRwdXQgPSBuZXcgVWludDE2QXJyYXkobGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0ID0gbmV3IFVpbnQzMkFycmF5KGxlbmd0aCk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm93Q29tcHMgPSB3aWR0aCAqIG51bUNvbXBzO1xuICAgIGNvbnN0IG1heCA9ICgxIDw8IGJwYykgLSAxO1xuICAgIGxldCBpID0gMCxcbiAgICAgICAgaWksXG4gICAgICAgIGJ1ZjtcblxuICAgIGlmIChicGMgPT09IDEpIHtcbiAgICAgIGxldCBtYXNrLCBsb29wMUVuZCwgbG9vcDJFbmQ7XG5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaGVpZ2h0OyBqKyspIHtcbiAgICAgICAgbG9vcDFFbmQgPSBpICsgKHJvd0NvbXBzICYgfjcpO1xuICAgICAgICBsb29wMkVuZCA9IGkgKyByb3dDb21wcztcblxuICAgICAgICB3aGlsZSAoaSA8IGxvb3AxRW5kKSB7XG4gICAgICAgICAgYnVmID0gYnVmZmVyW2J1ZmZlclBvcysrXTtcbiAgICAgICAgICBvdXRwdXRbaV0gPSBidWYgPj4gNyAmIDE7XG4gICAgICAgICAgb3V0cHV0W2kgKyAxXSA9IGJ1ZiA+PiA2ICYgMTtcbiAgICAgICAgICBvdXRwdXRbaSArIDJdID0gYnVmID4+IDUgJiAxO1xuICAgICAgICAgIG91dHB1dFtpICsgM10gPSBidWYgPj4gNCAmIDE7XG4gICAgICAgICAgb3V0cHV0W2kgKyA0XSA9IGJ1ZiA+PiAzICYgMTtcbiAgICAgICAgICBvdXRwdXRbaSArIDVdID0gYnVmID4+IDIgJiAxO1xuICAgICAgICAgIG91dHB1dFtpICsgNl0gPSBidWYgPj4gMSAmIDE7XG4gICAgICAgICAgb3V0cHV0W2kgKyA3XSA9IGJ1ZiAmIDE7XG4gICAgICAgICAgaSArPSA4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGkgPCBsb29wMkVuZCkge1xuICAgICAgICAgIGJ1ZiA9IGJ1ZmZlcltidWZmZXJQb3MrK107XG4gICAgICAgICAgbWFzayA9IDEyODtcblxuICAgICAgICAgIHdoaWxlIChpIDwgbG9vcDJFbmQpIHtcbiAgICAgICAgICAgIG91dHB1dFtpKytdID0gKyEhKGJ1ZiAmIG1hc2spO1xuICAgICAgICAgICAgbWFzayA+Pj0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGJpdHMgPSAwO1xuICAgICAgYnVmID0gMDtcblxuICAgICAgZm9yIChpID0gMCwgaWkgPSBsZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgIGlmIChpICUgcm93Q29tcHMgPT09IDApIHtcbiAgICAgICAgICBidWYgPSAwO1xuICAgICAgICAgIGJpdHMgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKGJpdHMgPCBicGMpIHtcbiAgICAgICAgICBidWYgPSBidWYgPDwgOCB8IGJ1ZmZlcltidWZmZXJQb3MrK107XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVtYWluaW5nQml0cyA9IGJpdHMgLSBicGM7XG4gICAgICAgIGxldCB2YWx1ZSA9IGJ1ZiA+PiByZW1haW5pbmdCaXRzO1xuXG4gICAgICAgIGlmICh2YWx1ZSA8IDApIHtcbiAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPiBtYXgpIHtcbiAgICAgICAgICB2YWx1ZSA9IG1heDtcbiAgICAgICAgfVxuXG4gICAgICAgIG91dHB1dFtpXSA9IHZhbHVlO1xuICAgICAgICBidWYgJj0gKDEgPDwgcmVtYWluaW5nQml0cykgLSAxO1xuICAgICAgICBiaXRzID0gcmVtYWluaW5nQml0cztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgZmlsbE9wYWNpdHkocmdiYUJ1Ziwgd2lkdGgsIGhlaWdodCwgYWN0dWFsSGVpZ2h0LCBpbWFnZSkge1xuICAgIGNvbnN0IHNtYXNrID0gdGhpcy5zbWFzaztcbiAgICBjb25zdCBtYXNrID0gdGhpcy5tYXNrO1xuICAgIGxldCBhbHBoYUJ1Ziwgc3csIHNoLCBpLCBpaSwgajtcblxuICAgIGlmIChzbWFzaykge1xuICAgICAgc3cgPSBzbWFzay53aWR0aDtcbiAgICAgIHNoID0gc21hc2suaGVpZ2h0O1xuICAgICAgYWxwaGFCdWYgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoc3cgKiBzaCk7XG4gICAgICBzbWFzay5maWxsR3JheUJ1ZmZlcihhbHBoYUJ1Zik7XG5cbiAgICAgIGlmIChzdyAhPT0gd2lkdGggfHwgc2ggIT09IGhlaWdodCkge1xuICAgICAgICBhbHBoYUJ1ZiA9IHJlc2l6ZUltYWdlTWFzayhhbHBoYUJ1Ziwgc21hc2suYnBjLCBzdywgc2gsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobWFzaykge1xuICAgICAgaWYgKG1hc2sgaW5zdGFuY2VvZiBQREZJbWFnZSkge1xuICAgICAgICBzdyA9IG1hc2sud2lkdGg7XG4gICAgICAgIHNoID0gbWFzay5oZWlnaHQ7XG4gICAgICAgIGFscGhhQnVmID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHN3ICogc2gpO1xuICAgICAgICBtYXNrLm51bUNvbXBzID0gMTtcbiAgICAgICAgbWFzay5maWxsR3JheUJ1ZmZlcihhbHBoYUJ1Zik7XG5cbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSBzdyAqIHNoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgIGFscGhhQnVmW2ldID0gMjU1IC0gYWxwaGFCdWZbaV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3cgIT09IHdpZHRoIHx8IHNoICE9PSBoZWlnaHQpIHtcbiAgICAgICAgICBhbHBoYUJ1ZiA9IHJlc2l6ZUltYWdlTWFzayhhbHBoYUJ1ZiwgbWFzay5icGMsIHN3LCBzaCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShtYXNrKSkge1xuICAgICAgICBhbHBoYUJ1ZiA9IG5ldyBVaW50OENsYW1wZWRBcnJheSh3aWR0aCAqIGhlaWdodCk7XG4gICAgICAgIGNvbnN0IG51bUNvbXBzID0gdGhpcy5udW1Db21wcztcblxuICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHdpZHRoICogaGVpZ2h0OyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgIGxldCBvcGFjaXR5ID0gMDtcbiAgICAgICAgICBjb25zdCBpbWFnZU9mZnNldCA9IGkgKiBudW1Db21wcztcblxuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBudW1Db21wczsgKytqKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IGltYWdlW2ltYWdlT2Zmc2V0ICsgal07XG4gICAgICAgICAgICBjb25zdCBtYXNrT2Zmc2V0ID0gaiAqIDI7XG5cbiAgICAgICAgICAgIGlmIChjb2xvciA8IG1hc2tbbWFza09mZnNldF0gfHwgY29sb3IgPiBtYXNrW21hc2tPZmZzZXQgKyAxXSkge1xuICAgICAgICAgICAgICBvcGFjaXR5ID0gMjU1O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhbHBoYUJ1ZltpXSA9IG9wYWNpdHk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlVua25vd24gbWFzayBmb3JtYXQuXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhbHBoYUJ1Zikge1xuICAgICAgZm9yIChpID0gMCwgaiA9IDMsIGlpID0gd2lkdGggKiBhY3R1YWxIZWlnaHQ7IGkgPCBpaTsgKytpLCBqICs9IDQpIHtcbiAgICAgICAgcmdiYUJ1ZltqXSA9IGFscGhhQnVmW2ldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGkgPSAwLCBqID0gMywgaWkgPSB3aWR0aCAqIGFjdHVhbEhlaWdodDsgaSA8IGlpOyArK2ksIGogKz0gNCkge1xuICAgICAgICByZ2JhQnVmW2pdID0gMjU1O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVuZG9QcmVibGVuZChidWZmZXIsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBjb25zdCBtYXR0ZSA9IHRoaXMuc21hc2sgJiYgdGhpcy5zbWFzay5tYXR0ZTtcblxuICAgIGlmICghbWF0dGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtYXR0ZVJnYiA9IHRoaXMuY29sb3JTcGFjZS5nZXRSZ2IobWF0dGUsIDApO1xuICAgIGNvbnN0IG1hdHRlUiA9IG1hdHRlUmdiWzBdO1xuICAgIGNvbnN0IG1hdHRlRyA9IG1hdHRlUmdiWzFdO1xuICAgIGNvbnN0IG1hdHRlQiA9IG1hdHRlUmdiWzJdO1xuICAgIGNvbnN0IGxlbmd0aCA9IHdpZHRoICogaGVpZ2h0ICogNDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDQpIHtcbiAgICAgIGNvbnN0IGFscGhhID0gYnVmZmVyW2kgKyAzXTtcblxuICAgICAgaWYgKGFscGhhID09PSAwKSB7XG4gICAgICAgIGJ1ZmZlcltpXSA9IDI1NTtcbiAgICAgICAgYnVmZmVyW2kgKyAxXSA9IDI1NTtcbiAgICAgICAgYnVmZmVyW2kgKyAyXSA9IDI1NTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGsgPSAyNTUgLyBhbHBoYTtcbiAgICAgIGJ1ZmZlcltpXSA9IChidWZmZXJbaV0gLSBtYXR0ZVIpICogayArIG1hdHRlUjtcbiAgICAgIGJ1ZmZlcltpICsgMV0gPSAoYnVmZmVyW2kgKyAxXSAtIG1hdHRlRykgKiBrICsgbWF0dGVHO1xuICAgICAgYnVmZmVyW2kgKyAyXSA9IChidWZmZXJbaSArIDJdIC0gbWF0dGVCKSAqIGsgKyBtYXR0ZUI7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlSW1hZ2VEYXRhKGZvcmNlUkdCQSA9IGZhbHNlKSB7XG4gICAgY29uc3QgZHJhd1dpZHRoID0gdGhpcy5kcmF3V2lkdGg7XG4gICAgY29uc3QgZHJhd0hlaWdodCA9IHRoaXMuZHJhd0hlaWdodDtcbiAgICBjb25zdCBpbWdEYXRhID0ge1xuICAgICAgd2lkdGg6IGRyYXdXaWR0aCxcbiAgICAgIGhlaWdodDogZHJhd0hlaWdodCxcbiAgICAgIGludGVycG9sYXRlOiB0aGlzLmludGVycG9sYXRlLFxuICAgICAga2luZDogMCxcbiAgICAgIGRhdGE6IG51bGxcbiAgICB9O1xuICAgIGNvbnN0IG51bUNvbXBzID0gdGhpcy5udW1Db21wcztcbiAgICBjb25zdCBvcmlnaW5hbFdpZHRoID0gdGhpcy53aWR0aDtcbiAgICBjb25zdCBvcmlnaW5hbEhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgIGNvbnN0IGJwYyA9IHRoaXMuYnBjO1xuICAgIGNvbnN0IHJvd0J5dGVzID0gb3JpZ2luYWxXaWR0aCAqIG51bUNvbXBzICogYnBjICsgNyA+PiAzO1xuICAgIGxldCBpbWdBcnJheTtcblxuICAgIGlmICghZm9yY2VSR0JBKSB7XG4gICAgICBsZXQga2luZDtcblxuICAgICAgaWYgKHRoaXMuY29sb3JTcGFjZS5uYW1lID09PSBcIkRldmljZUdyYXlcIiAmJiBicGMgPT09IDEpIHtcbiAgICAgICAga2luZCA9IF91dGlsLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb2xvclNwYWNlLm5hbWUgPT09IFwiRGV2aWNlUkdCXCIgJiYgYnBjID09PSA4ICYmICF0aGlzLm5lZWRzRGVjb2RlKSB7XG4gICAgICAgIGtpbmQgPSBfdXRpbC5JbWFnZUtpbmQuUkdCXzI0QlBQO1xuICAgICAgfVxuXG4gICAgICBpZiAoa2luZCAmJiAhdGhpcy5zbWFzayAmJiAhdGhpcy5tYXNrICYmIGRyYXdXaWR0aCA9PT0gb3JpZ2luYWxXaWR0aCAmJiBkcmF3SGVpZ2h0ID09PSBvcmlnaW5hbEhlaWdodCkge1xuICAgICAgICBpbWdEYXRhLmtpbmQgPSBraW5kO1xuICAgICAgICBpbWdBcnJheSA9IHRoaXMuZ2V0SW1hZ2VCeXRlcyhvcmlnaW5hbEhlaWdodCAqIHJvd0J5dGVzKTtcblxuICAgICAgICBpZiAodGhpcy5pbWFnZSBpbnN0YW5jZW9mIF9kZWNvZGVfc3RyZWFtLkRlY29kZVN0cmVhbSkge1xuICAgICAgICAgIGltZ0RhdGEuZGF0YSA9IGltZ0FycmF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG5ld0FycmF5ID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGltZ0FycmF5Lmxlbmd0aCk7XG4gICAgICAgICAgbmV3QXJyYXkuc2V0KGltZ0FycmF5KTtcbiAgICAgICAgICBpbWdEYXRhLmRhdGEgPSBuZXdBcnJheTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm5lZWRzRGVjb2RlKSB7XG4gICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoa2luZCA9PT0gX3V0aWwuSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQLCBcIlBERkltYWdlLmNyZWF0ZUltYWdlRGF0YTogVGhlIGltYWdlIG11c3QgYmUgZ3JheXNjYWxlLlwiKTtcbiAgICAgICAgICBjb25zdCBidWZmZXIgPSBpbWdEYXRhLmRhdGE7XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBidWZmZXIubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgYnVmZmVyW2ldIF49IDB4ZmY7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGltZ0RhdGE7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmltYWdlIGluc3RhbmNlb2YgX2pwZWdfc3RyZWFtLkpwZWdTdHJlYW0gJiYgIXRoaXMuc21hc2sgJiYgIXRoaXMubWFzaykge1xuICAgICAgICBsZXQgaW1hZ2VMZW5ndGggPSBvcmlnaW5hbEhlaWdodCAqIHJvd0J5dGVzO1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy5jb2xvclNwYWNlLm5hbWUpIHtcbiAgICAgICAgICBjYXNlIFwiRGV2aWNlR3JheVwiOlxuICAgICAgICAgICAgaW1hZ2VMZW5ndGggKj0gMztcblxuICAgICAgICAgIGNhc2UgXCJEZXZpY2VSR0JcIjpcbiAgICAgICAgICBjYXNlIFwiRGV2aWNlQ01ZS1wiOlxuICAgICAgICAgICAgaW1nRGF0YS5raW5kID0gX3V0aWwuSW1hZ2VLaW5kLlJHQl8yNEJQUDtcbiAgICAgICAgICAgIGltZ0RhdGEuZGF0YSA9IHRoaXMuZ2V0SW1hZ2VCeXRlcyhpbWFnZUxlbmd0aCwgZHJhd1dpZHRoLCBkcmF3SGVpZ2h0LCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiBpbWdEYXRhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW1nQXJyYXkgPSB0aGlzLmdldEltYWdlQnl0ZXMob3JpZ2luYWxIZWlnaHQgKiByb3dCeXRlcyk7XG4gICAgY29uc3QgYWN0dWFsSGVpZ2h0ID0gMCB8IGltZ0FycmF5Lmxlbmd0aCAvIHJvd0J5dGVzICogZHJhd0hlaWdodCAvIG9yaWdpbmFsSGVpZ2h0O1xuICAgIGNvbnN0IGNvbXBzID0gdGhpcy5nZXRDb21wb25lbnRzKGltZ0FycmF5KTtcbiAgICBsZXQgYWxwaGEwMSwgbWF5YmVVbmRvUHJlYmxlbmQ7XG5cbiAgICBpZiAoIWZvcmNlUkdCQSAmJiAhdGhpcy5zbWFzayAmJiAhdGhpcy5tYXNrKSB7XG4gICAgICBpbWdEYXRhLmtpbmQgPSBfdXRpbC5JbWFnZUtpbmQuUkdCXzI0QlBQO1xuICAgICAgaW1nRGF0YS5kYXRhID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGRyYXdXaWR0aCAqIGRyYXdIZWlnaHQgKiAzKTtcbiAgICAgIGFscGhhMDEgPSAwO1xuICAgICAgbWF5YmVVbmRvUHJlYmxlbmQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW1nRGF0YS5raW5kID0gX3V0aWwuSW1hZ2VLaW5kLlJHQkFfMzJCUFA7XG4gICAgICBpbWdEYXRhLmRhdGEgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoZHJhd1dpZHRoICogZHJhd0hlaWdodCAqIDQpO1xuICAgICAgYWxwaGEwMSA9IDE7XG4gICAgICBtYXliZVVuZG9QcmVibGVuZCA9IHRydWU7XG4gICAgICB0aGlzLmZpbGxPcGFjaXR5KGltZ0RhdGEuZGF0YSwgZHJhd1dpZHRoLCBkcmF3SGVpZ2h0LCBhY3R1YWxIZWlnaHQsIGNvbXBzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5uZWVkc0RlY29kZSkge1xuICAgICAgdGhpcy5kZWNvZGVCdWZmZXIoY29tcHMpO1xuICAgIH1cblxuICAgIHRoaXMuY29sb3JTcGFjZS5maWxsUmdiKGltZ0RhdGEuZGF0YSwgb3JpZ2luYWxXaWR0aCwgb3JpZ2luYWxIZWlnaHQsIGRyYXdXaWR0aCwgZHJhd0hlaWdodCwgYWN0dWFsSGVpZ2h0LCBicGMsIGNvbXBzLCBhbHBoYTAxKTtcblxuICAgIGlmIChtYXliZVVuZG9QcmVibGVuZCkge1xuICAgICAgdGhpcy51bmRvUHJlYmxlbmQoaW1nRGF0YS5kYXRhLCBkcmF3V2lkdGgsIGFjdHVhbEhlaWdodCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGltZ0RhdGE7XG4gIH1cblxuICBmaWxsR3JheUJ1ZmZlcihidWZmZXIpIHtcbiAgICBjb25zdCBudW1Db21wcyA9IHRoaXMubnVtQ29tcHM7XG5cbiAgICBpZiAobnVtQ29tcHMgIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgUmVhZGluZyBncmF5IHNjYWxlIGZyb20gYSBjb2xvciBpbWFnZTogJHtudW1Db21wc31gKTtcbiAgICB9XG5cbiAgICBjb25zdCB3aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgY29uc3QgYnBjID0gdGhpcy5icGM7XG4gICAgY29uc3Qgcm93Qnl0ZXMgPSB3aWR0aCAqIG51bUNvbXBzICogYnBjICsgNyA+PiAzO1xuICAgIGNvbnN0IGltZ0FycmF5ID0gdGhpcy5nZXRJbWFnZUJ5dGVzKGhlaWdodCAqIHJvd0J5dGVzKTtcbiAgICBjb25zdCBjb21wcyA9IHRoaXMuZ2V0Q29tcG9uZW50cyhpbWdBcnJheSk7XG4gICAgbGV0IGksIGxlbmd0aDtcblxuICAgIGlmIChicGMgPT09IDEpIHtcbiAgICAgIGxlbmd0aCA9IHdpZHRoICogaGVpZ2h0O1xuXG4gICAgICBpZiAodGhpcy5uZWVkc0RlY29kZSkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBidWZmZXJbaV0gPSBjb21wc1tpXSAtIDEgJiAyNTU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICAgIGJ1ZmZlcltpXSA9IC1jb21wc1tpXSAmIDI1NTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubmVlZHNEZWNvZGUpIHtcbiAgICAgIHRoaXMuZGVjb2RlQnVmZmVyKGNvbXBzKTtcbiAgICB9XG5cbiAgICBsZW5ndGggPSB3aWR0aCAqIGhlaWdodDtcbiAgICBjb25zdCBzY2FsZSA9IDI1NSAvICgoMSA8PCBicGMpIC0gMSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIGJ1ZmZlcltpXSA9IHNjYWxlICogY29tcHNbaV07XG4gICAgfVxuICB9XG5cbiAgZ2V0SW1hZ2VCeXRlcyhsZW5ndGgsIGRyYXdXaWR0aCwgZHJhd0hlaWdodCwgZm9yY2VSR0IgPSBmYWxzZSkge1xuICAgIHRoaXMuaW1hZ2UucmVzZXQoKTtcbiAgICB0aGlzLmltYWdlLmRyYXdXaWR0aCA9IGRyYXdXaWR0aCB8fCB0aGlzLndpZHRoO1xuICAgIHRoaXMuaW1hZ2UuZHJhd0hlaWdodCA9IGRyYXdIZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG4gICAgdGhpcy5pbWFnZS5mb3JjZVJHQiA9ICEhZm9yY2VSR0I7XG4gICAgcmV0dXJuIHRoaXMuaW1hZ2UuZ2V0Qnl0ZXMobGVuZ3RoLCB0cnVlKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUERGSW1hZ2UgPSBQREZJbWFnZTtcblxuLyoqKi8gfSksXG4vKiA2NCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5DYXRhbG9nID0gdm9pZCAwO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX25hbWVfbnVtYmVyX3RyZWUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDY1KTtcblxudmFyIF9iYXNlX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oNik7XG5cbnZhciBfY29sb3JzcGFjZSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjQpO1xuXG52YXIgX2ZpbGVfc3BlYyA9IF9fd19wZGZqc19yZXF1aXJlX18oNjYpO1xuXG52YXIgX2ltYWdlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1OCk7XG5cbnZhciBfbWV0YWRhdGFfcGFyc2VyID0gX193X3BkZmpzX3JlcXVpcmVfXyg2Nyk7XG5cbnZhciBfc3RydWN0X3RyZWUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDY5KTtcblxuZnVuY3Rpb24gZmV0Y2hEZXN0aW5hdGlvbihkZXN0KSB7XG4gIGlmIChkZXN0IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkge1xuICAgIGRlc3QgPSBkZXN0LmdldChcIkRcIik7XG4gIH1cblxuICByZXR1cm4gQXJyYXkuaXNBcnJheShkZXN0KSA/IGRlc3QgOiBudWxsO1xufVxuXG5jbGFzcyBDYXRhbG9nIHtcbiAgY29uc3RydWN0b3IocGRmTWFuYWdlciwgeHJlZikge1xuICAgIHRoaXMucGRmTWFuYWdlciA9IHBkZk1hbmFnZXI7XG4gICAgdGhpcy54cmVmID0geHJlZjtcbiAgICB0aGlzLl9jYXREaWN0ID0geHJlZi5nZXRDYXRhbG9nT2JqKCk7XG5cbiAgICBpZiAoISh0aGlzLl9jYXREaWN0IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkNhdGFsb2cgb2JqZWN0IGlzIG5vdCBhIGRpY3Rpb25hcnkuXCIpO1xuICAgIH1cblxuICAgIHRoaXMudG9wbGV2ZWxQYWdlc0RpY3Q7XG4gICAgdGhpcy5fYWN0dWFsTnVtUGFnZXMgPSBudWxsO1xuICAgIHRoaXMuZm9udENhY2hlID0gbmV3IF9wcmltaXRpdmVzLlJlZlNldENhY2hlKCk7XG4gICAgdGhpcy5idWlsdEluQ01hcENhY2hlID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZSA9IG5ldyBfaW1hZ2VfdXRpbHMuR2xvYmFsSW1hZ2VDYWNoZSgpO1xuICAgIHRoaXMucGFnZUtpZHNDb3VudENhY2hlID0gbmV3IF9wcmltaXRpdmVzLlJlZlNldENhY2hlKCk7XG4gICAgdGhpcy5wYWdlSW5kZXhDYWNoZSA9IG5ldyBfcHJpbWl0aXZlcy5SZWZTZXRDYWNoZSgpO1xuICAgIHRoaXMubm9uQmxlbmRNb2Rlc1NldCA9IG5ldyBfcHJpbWl0aXZlcy5SZWZTZXQoKTtcbiAgfVxuXG4gIGdldCB2ZXJzaW9uKCkge1xuICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLl9jYXREaWN0LmdldChcIlZlcnNpb25cIik7XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJ2ZXJzaW9uXCIsIHZlcnNpb24gaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5OYW1lID8gdmVyc2lvbi5uYW1lIDogbnVsbCk7XG4gIH1cblxuICBnZXQgbGFuZygpIHtcbiAgICBjb25zdCBsYW5nID0gdGhpcy5fY2F0RGljdC5nZXQoXCJMYW5nXCIpO1xuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwibGFuZ1wiLCB0eXBlb2YgbGFuZyA9PT0gXCJzdHJpbmdcIiA/ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykobGFuZykgOiBudWxsKTtcbiAgfVxuXG4gIGdldCBuZWVkc1JlbmRlcmluZygpIHtcbiAgICBjb25zdCBuZWVkc1JlbmRlcmluZyA9IHRoaXMuX2NhdERpY3QuZ2V0KFwiTmVlZHNSZW5kZXJpbmdcIik7XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJuZWVkc1JlbmRlcmluZ1wiLCB0eXBlb2YgbmVlZHNSZW5kZXJpbmcgPT09IFwiYm9vbGVhblwiID8gbmVlZHNSZW5kZXJpbmcgOiBmYWxzZSk7XG4gIH1cblxuICBnZXQgY29sbGVjdGlvbigpIHtcbiAgICBsZXQgY29sbGVjdGlvbiA9IG51bGw7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgb2JqID0gdGhpcy5fY2F0RGljdC5nZXQoXCJDb2xsZWN0aW9uXCIpO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqKSAmJiBvYmouc2l6ZSA+IDApIHtcbiAgICAgICAgY29sbGVjdGlvbiA9IG9iajtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZXg7XG4gICAgICB9XG5cbiAgICAgICgwLCBfdXRpbC5pbmZvKShcIkNhbm5vdCBmZXRjaCBDb2xsZWN0aW9uIGVudHJ5OyBhc3N1bWluZyBubyBjb2xsZWN0aW9uIGlzIHByZXNlbnQuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImNvbGxlY3Rpb25cIiwgY29sbGVjdGlvbik7XG4gIH1cblxuICBnZXQgYWNyb0Zvcm0oKSB7XG4gICAgbGV0IGFjcm9Gb3JtID0gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBvYmogPSB0aGlzLl9jYXREaWN0LmdldChcIkFjcm9Gb3JtXCIpO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqKSAmJiBvYmouc2l6ZSA+IDApIHtcbiAgICAgICAgYWNyb0Zvcm0gPSBvYmo7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwuaW5mbykoXCJDYW5ub3QgZmV0Y2ggQWNyb0Zvcm0gZW50cnk7IGFzc3VtaW5nIG5vIGZvcm1zIGFyZSBwcmVzZW50LlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJhY3JvRm9ybVwiLCBhY3JvRm9ybSk7XG4gIH1cblxuICBnZXQgYWNyb0Zvcm1SZWYoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9jYXREaWN0LmdldFJhdyhcIkFjcm9Gb3JtXCIpO1xuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiYWNyb0Zvcm1SZWZcIiwgKDAsIF9wcmltaXRpdmVzLmlzUmVmKSh2YWx1ZSkgPyB2YWx1ZSA6IG51bGwpO1xuICB9XG5cbiAgZ2V0IG1ldGFkYXRhKCkge1xuICAgIGNvbnN0IHN0cmVhbVJlZiA9IHRoaXMuX2NhdERpY3QuZ2V0UmF3KFwiTWV0YWRhdGFcIik7XG5cbiAgICBpZiAoIShzdHJlYW1SZWYgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpKSB7XG4gICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJtZXRhZGF0YVwiLCBudWxsKTtcbiAgICB9XG5cbiAgICBsZXQgbWV0YWRhdGEgPSBudWxsO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN1cHByZXNzRW5jcnlwdGlvbiA9ICEodGhpcy54cmVmLmVuY3J5cHQgJiYgdGhpcy54cmVmLmVuY3J5cHQuZW5jcnlwdE1ldGFkYXRhKTtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMueHJlZi5mZXRjaChzdHJlYW1SZWYsIHN1cHByZXNzRW5jcnlwdGlvbik7XG5cbiAgICAgIGlmIChzdHJlYW0gaW5zdGFuY2VvZiBfYmFzZV9zdHJlYW0uQmFzZVN0cmVhbSAmJiBzdHJlYW0uZGljdCBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHN0cmVhbS5kaWN0LmdldChcIlR5cGVcIik7XG4gICAgICAgIGNvbnN0IHN1YnR5cGUgPSBzdHJlYW0uZGljdC5nZXQoXCJTdWJ0eXBlXCIpO1xuXG4gICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0eXBlLCBcIk1ldGFkYXRhXCIpICYmICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHN1YnR5cGUsIFwiWE1MXCIpKSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9ICgwLCBfdXRpbC5zdHJpbmdUb1VURjhTdHJpbmcpKHN0cmVhbS5nZXRTdHJpbmcoKSk7XG5cbiAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgbWV0YWRhdGEgPSBuZXcgX21ldGFkYXRhX3BhcnNlci5NZXRhZGF0YVBhcnNlcihkYXRhKS5zZXJpYWxpemFibGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwuaW5mbykoYFNraXBwaW5nIGludmFsaWQgTWV0YWRhdGE6IFwiJHtleH1cIi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJtZXRhZGF0YVwiLCBtZXRhZGF0YSk7XG4gIH1cblxuICBnZXQgbWFya0luZm8oKSB7XG4gICAgbGV0IG1hcmtJbmZvID0gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICBtYXJrSW5mbyA9IHRoaXMuX3JlYWRNYXJrSW5mbygpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5hYmxlIHRvIHJlYWQgbWFyayBpbmZvLlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJtYXJrSW5mb1wiLCBtYXJrSW5mbyk7XG4gIH1cblxuICBfcmVhZE1hcmtJbmZvKCkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuX2NhdERpY3QuZ2V0KFwiTWFya0luZm9cIik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG1hcmtJbmZvID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLCB7XG4gICAgICBNYXJrZWQ6IGZhbHNlLFxuICAgICAgVXNlclByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgU3VzcGVjdHM6IGZhbHNlXG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBtYXJrSW5mbykge1xuICAgICAgaWYgKCFvYmouaGFzKGtleSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gb2JqLmdldChrZXkpO1xuXG4gICAgICBpZiAoISgwLCBfdXRpbC5pc0Jvb2wpKHZhbHVlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbWFya0luZm9ba2V5XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrSW5mbztcbiAgfVxuXG4gIGdldCBzdHJ1Y3RUcmVlUm9vdCgpIHtcbiAgICBsZXQgc3RydWN0VHJlZSA9IG51bGw7XG5cbiAgICB0cnkge1xuICAgICAgc3RydWN0VHJlZSA9IHRoaXMuX3JlYWRTdHJ1Y3RUcmVlUm9vdCgpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5hYmxlIHJlYWQgdG8gc3RydWN0VHJlZVJvb3QgaW5mby5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwic3RydWN0VHJlZVJvb3RcIiwgc3RydWN0VHJlZSk7XG4gIH1cblxuICBfcmVhZFN0cnVjdFRyZWVSb290KCkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuX2NhdERpY3QuZ2V0KFwiU3RydWN0VHJlZVJvb3RcIik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJvb3QgPSBuZXcgX3N0cnVjdF90cmVlLlN0cnVjdFRyZWVSb290KG9iaik7XG4gICAgcm9vdC5pbml0KCk7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH1cblxuICBnZXQgdG9wbGV2ZWxQYWdlc0RpY3QoKSB7XG4gICAgY29uc3QgcGFnZXNPYmogPSB0aGlzLl9jYXREaWN0LmdldChcIlBhZ2VzXCIpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShwYWdlc09iaikpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgdG9wLWxldmVsIHBhZ2VzIGRpY3Rpb25hcnkuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInRvcGxldmVsUGFnZXNEaWN0XCIsIHBhZ2VzT2JqKTtcbiAgfVxuXG4gIGdldCBkb2N1bWVudE91dGxpbmUoKSB7XG4gICAgbGV0IG9iaiA9IG51bGw7XG5cbiAgICB0cnkge1xuICAgICAgb2JqID0gdGhpcy5fcmVhZERvY3VtZW50T3V0bGluZSgpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5hYmxlIHRvIHJlYWQgZG9jdW1lbnQgb3V0bGluZS5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiZG9jdW1lbnRPdXRsaW5lXCIsIG9iaik7XG4gIH1cblxuICBfcmVhZERvY3VtZW50T3V0bGluZSgpIHtcbiAgICBsZXQgb2JqID0gdGhpcy5fY2F0RGljdC5nZXQoXCJPdXRsaW5lc1wiKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgb2JqID0gb2JqLmdldFJhdyhcIkZpcnN0XCIpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKG9iaikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJvb3QgPSB7XG4gICAgICBpdGVtczogW11cbiAgICB9O1xuICAgIGNvbnN0IHF1ZXVlID0gW3tcbiAgICAgIG9iaixcbiAgICAgIHBhcmVudDogcm9vdFxuICAgIH1dO1xuICAgIGNvbnN0IHByb2Nlc3NlZCA9IG5ldyBfcHJpbWl0aXZlcy5SZWZTZXQoKTtcbiAgICBwcm9jZXNzZWQucHV0KG9iaik7XG4gICAgY29uc3QgeHJlZiA9IHRoaXMueHJlZixcbiAgICAgICAgICBibGFja0NvbG9yID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO1xuXG4gICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGkgPSBxdWV1ZS5zaGlmdCgpO1xuICAgICAgY29uc3Qgb3V0bGluZURpY3QgPSB4cmVmLmZldGNoSWZSZWYoaS5vYmopO1xuXG4gICAgICBpZiAob3V0bGluZURpY3QgPT09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghb3V0bGluZURpY3QuaGFzKFwiVGl0bGVcIikpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSW52YWxpZCBvdXRsaW5lIGl0ZW0gZW5jb3VudGVyZWQuXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICB1cmw6IG51bGwsXG4gICAgICAgIGRlc3Q6IG51bGxcbiAgICAgIH07XG4gICAgICBDYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe1xuICAgICAgICBkZXN0RGljdDogb3V0bGluZURpY3QsXG4gICAgICAgIHJlc3VsdE9iajogZGF0YSxcbiAgICAgICAgZG9jQmFzZVVybDogdGhpcy5wZGZNYW5hZ2VyLmRvY0Jhc2VVcmxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdGl0bGUgPSBvdXRsaW5lRGljdC5nZXQoXCJUaXRsZVwiKTtcbiAgICAgIGNvbnN0IGZsYWdzID0gb3V0bGluZURpY3QuZ2V0KFwiRlwiKSB8fCAwO1xuICAgICAgY29uc3QgY29sb3IgPSBvdXRsaW5lRGljdC5nZXRBcnJheShcIkNcIik7XG4gICAgICBjb25zdCBjb3VudCA9IG91dGxpbmVEaWN0LmdldChcIkNvdW50XCIpO1xuICAgICAgbGV0IHJnYkNvbG9yID0gYmxhY2tDb2xvcjtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sb3IpICYmIGNvbG9yLmxlbmd0aCA9PT0gMyAmJiAoY29sb3JbMF0gIT09IDAgfHwgY29sb3JbMV0gIT09IDAgfHwgY29sb3JbMl0gIT09IDApKSB7XG4gICAgICAgIHJnYkNvbG9yID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2IoY29sb3IsIDApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvdXRsaW5lSXRlbSA9IHtcbiAgICAgICAgZGVzdDogZGF0YS5kZXN0LFxuICAgICAgICB1cmw6IGRhdGEudXJsLFxuICAgICAgICB1bnNhZmVVcmw6IGRhdGEudW5zYWZlVXJsLFxuICAgICAgICBuZXdXaW5kb3c6IGRhdGEubmV3V2luZG93LFxuICAgICAgICB0aXRsZTogKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKSh0aXRsZSksXG4gICAgICAgIGNvbG9yOiByZ2JDb2xvcixcbiAgICAgICAgY291bnQ6IE51bWJlci5pc0ludGVnZXIoY291bnQpID8gY291bnQgOiB1bmRlZmluZWQsXG4gICAgICAgIGJvbGQ6ICEhKGZsYWdzICYgMiksXG4gICAgICAgIGl0YWxpYzogISEoZmxhZ3MgJiAxKSxcbiAgICAgICAgaXRlbXM6IFtdXG4gICAgICB9O1xuICAgICAgaS5wYXJlbnQuaXRlbXMucHVzaChvdXRsaW5lSXRlbSk7XG4gICAgICBvYmogPSBvdXRsaW5lRGljdC5nZXRSYXcoXCJGaXJzdFwiKTtcblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikob2JqKSAmJiAhcHJvY2Vzc2VkLmhhcyhvYmopKSB7XG4gICAgICAgIHF1ZXVlLnB1c2goe1xuICAgICAgICAgIG9iaixcbiAgICAgICAgICBwYXJlbnQ6IG91dGxpbmVJdGVtXG4gICAgICAgIH0pO1xuICAgICAgICBwcm9jZXNzZWQucHV0KG9iaik7XG4gICAgICB9XG5cbiAgICAgIG9iaiA9IG91dGxpbmVEaWN0LmdldFJhdyhcIk5leHRcIik7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKG9iaikgJiYgIXByb2Nlc3NlZC5oYXMob2JqKSkge1xuICAgICAgICBxdWV1ZS5wdXNoKHtcbiAgICAgICAgICBvYmosXG4gICAgICAgICAgcGFyZW50OiBpLnBhcmVudFxuICAgICAgICB9KTtcbiAgICAgICAgcHJvY2Vzc2VkLnB1dChvYmopO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByb290Lml0ZW1zLmxlbmd0aCA+IDAgPyByb290Lml0ZW1zIDogbnVsbDtcbiAgfVxuXG4gIGdldCBwZXJtaXNzaW9ucygpIHtcbiAgICBsZXQgcGVybWlzc2lvbnMgPSBudWxsO1xuXG4gICAgdHJ5IHtcbiAgICAgIHBlcm1pc3Npb25zID0gdGhpcy5fcmVhZFBlcm1pc3Npb25zKCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwud2FybikoXCJVbmFibGUgdG8gcmVhZCBwZXJtaXNzaW9ucy5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwicGVybWlzc2lvbnNcIiwgcGVybWlzc2lvbnMpO1xuICB9XG5cbiAgX3JlYWRQZXJtaXNzaW9ucygpIHtcbiAgICBjb25zdCBlbmNyeXB0ID0gdGhpcy54cmVmLnRyYWlsZXIuZ2V0KFwiRW5jcnlwdFwiKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZW5jcnlwdCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBmbGFncyA9IGVuY3J5cHQuZ2V0KFwiUFwiKTtcblxuICAgIGlmICghKDAsIF91dGlsLmlzTnVtKShmbGFncykpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZsYWdzICs9IDIgKiogMzI7XG4gICAgY29uc3QgcGVybWlzc2lvbnMgPSBbXTtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIF91dGlsLlBlcm1pc3Npb25GbGFnKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IF91dGlsLlBlcm1pc3Npb25GbGFnW2tleV07XG5cbiAgICAgIGlmIChmbGFncyAmIHZhbHVlKSB7XG4gICAgICAgIHBlcm1pc3Npb25zLnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwZXJtaXNzaW9ucztcbiAgfVxuXG4gIGdldCBvcHRpb25hbENvbnRlbnRDb25maWcoKSB7XG4gICAgbGV0IGNvbmZpZyA9IG51bGw7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuX2NhdERpY3QuZ2V0KFwiT0NQcm9wZXJ0aWVzXCIpO1xuXG4gICAgICBpZiAoIXByb3BlcnRpZXMpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwib3B0aW9uYWxDb250ZW50Q29uZmlnXCIsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWZhdWx0Q29uZmlnID0gcHJvcGVydGllcy5nZXQoXCJEXCIpO1xuXG4gICAgICBpZiAoIWRlZmF1bHRDb25maWcpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwib3B0aW9uYWxDb250ZW50Q29uZmlnXCIsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBncm91cHNEYXRhID0gcHJvcGVydGllcy5nZXQoXCJPQ0dzXCIpO1xuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZ3JvdXBzRGF0YSkpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwib3B0aW9uYWxDb250ZW50Q29uZmlnXCIsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBncm91cHMgPSBbXTtcbiAgICAgIGNvbnN0IGdyb3VwUmVmcyA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGdyb3VwUmVmIG9mIGdyb3Vwc0RhdGEpIHtcbiAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKGdyb3VwUmVmKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3JvdXBSZWZzLnB1c2goZ3JvdXBSZWYpO1xuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMueHJlZi5mZXRjaElmUmVmKGdyb3VwUmVmKTtcbiAgICAgICAgZ3JvdXBzLnB1c2goe1xuICAgICAgICAgIGlkOiBncm91cFJlZi50b1N0cmluZygpLFxuICAgICAgICAgIG5hbWU6ICgwLCBfdXRpbC5pc1N0cmluZykoZ3JvdXAuZ2V0KFwiTmFtZVwiKSkgPyAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGdyb3VwLmdldChcIk5hbWVcIikpIDogbnVsbCxcbiAgICAgICAgICBpbnRlbnQ6ICgwLCBfdXRpbC5pc1N0cmluZykoZ3JvdXAuZ2V0KFwiSW50ZW50XCIpKSA/ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoZ3JvdXAuZ2V0KFwiSW50ZW50XCIpKSA6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbmZpZyA9IHRoaXMuX3JlYWRPcHRpb25hbENvbnRlbnRDb25maWcoZGVmYXVsdENvbmZpZywgZ3JvdXBSZWZzKTtcbiAgICAgIGNvbmZpZy5ncm91cHMgPSBncm91cHM7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwud2FybikoYFVuYWJsZSB0byByZWFkIG9wdGlvbmFsIGNvbnRlbnQgY29uZmlnOiAke2V4fWApO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIm9wdGlvbmFsQ29udGVudENvbmZpZ1wiLCBjb25maWcpO1xuICB9XG5cbiAgX3JlYWRPcHRpb25hbENvbnRlbnRDb25maWcoY29uZmlnLCBjb250ZW50R3JvdXBSZWZzKSB7XG4gICAgZnVuY3Rpb24gcGFyc2VPbk9mZihyZWZzKSB7XG4gICAgICBjb25zdCBvblBhcnNlZCA9IFtdO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZWZzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHJlZnMpIHtcbiAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1JlZikodmFsdWUpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29udGVudEdyb3VwUmVmcy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIG9uUGFyc2VkLnB1c2godmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvblBhcnNlZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU9yZGVyKHJlZnMsIG5lc3RlZExldmVscyA9IDApIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZWZzKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb3JkZXIgPSBbXTtcblxuICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiByZWZzKSB7XG4gICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKHZhbHVlKSAmJiBjb250ZW50R3JvdXBSZWZzLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgIHBhcnNlZE9yZGVyUmVmcy5wdXQodmFsdWUpO1xuICAgICAgICAgIG9yZGVyLnB1c2godmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXN0ZWRPcmRlciA9IHBhcnNlTmVzdGVkT3JkZXIodmFsdWUsIG5lc3RlZExldmVscyk7XG5cbiAgICAgICAgaWYgKG5lc3RlZE9yZGVyKSB7XG4gICAgICAgICAgb3JkZXIucHVzaChuZXN0ZWRPcmRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5lc3RlZExldmVscyA+IDApIHtcbiAgICAgICAgcmV0dXJuIG9yZGVyO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBoaWRkZW5Hcm91cHMgPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBncm91cFJlZiBvZiBjb250ZW50R3JvdXBSZWZzKSB7XG4gICAgICAgIGlmIChwYXJzZWRPcmRlclJlZnMuaGFzKGdyb3VwUmVmKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaGlkZGVuR3JvdXBzLnB1c2goZ3JvdXBSZWYudG9TdHJpbmcoKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoaWRkZW5Hcm91cHMubGVuZ3RoKSB7XG4gICAgICAgIG9yZGVyLnB1c2goe1xuICAgICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgICAgb3JkZXI6IGhpZGRlbkdyb3Vwc1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9yZGVyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTmVzdGVkT3JkZXIocmVmLCBuZXN0ZWRMZXZlbHMpIHtcbiAgICAgIGlmICgrK25lc3RlZExldmVscyA+IE1BWF9ORVNURURfTEVWRUxTKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcInBhcnNlTmVzdGVkT3JkZXIgLSByZWFjaGVkIE1BWF9ORVNURURfTEVWRUxTLlwiKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlID0geHJlZi5mZXRjaElmUmVmKHJlZik7XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5lc3RlZE5hbWUgPSB4cmVmLmZldGNoSWZSZWYodmFsdWVbMF0pO1xuXG4gICAgICBpZiAodHlwZW9mIG5lc3RlZE5hbWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5lc3RlZE9yZGVyID0gcGFyc2VPcmRlcih2YWx1ZS5zbGljZSgxKSwgbmVzdGVkTGV2ZWxzKTtcblxuICAgICAgaWYgKCFuZXN0ZWRPcmRlciB8fCAhbmVzdGVkT3JkZXIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKG5lc3RlZE5hbWUpLFxuICAgICAgICBvcmRlcjogbmVzdGVkT3JkZXJcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgeHJlZiA9IHRoaXMueHJlZixcbiAgICAgICAgICBwYXJzZWRPcmRlclJlZnMgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0KCksXG4gICAgICAgICAgTUFYX05FU1RFRF9MRVZFTFMgPSAxMDtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogKDAsIF91dGlsLmlzU3RyaW5nKShjb25maWcuZ2V0KFwiTmFtZVwiKSkgPyAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGNvbmZpZy5nZXQoXCJOYW1lXCIpKSA6IG51bGwsXG4gICAgICBjcmVhdG9yOiAoMCwgX3V0aWwuaXNTdHJpbmcpKGNvbmZpZy5nZXQoXCJDcmVhdG9yXCIpKSA/ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoY29uZmlnLmdldChcIkNyZWF0b3JcIikpIDogbnVsbCxcbiAgICAgIGJhc2VTdGF0ZTogKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoY29uZmlnLmdldChcIkJhc2VTdGF0ZVwiKSkgPyBjb25maWcuZ2V0KFwiQmFzZVN0YXRlXCIpLm5hbWUgOiBudWxsLFxuICAgICAgb246IHBhcnNlT25PZmYoY29uZmlnLmdldChcIk9OXCIpKSxcbiAgICAgIG9mZjogcGFyc2VPbk9mZihjb25maWcuZ2V0KFwiT0ZGXCIpKSxcbiAgICAgIG9yZGVyOiBwYXJzZU9yZGVyKGNvbmZpZy5nZXQoXCJPcmRlclwiKSksXG4gICAgICBncm91cHM6IG51bGxcbiAgICB9O1xuICB9XG5cbiAgc2V0QWN0dWFsTnVtUGFnZXMobnVtID0gbnVsbCkge1xuICAgIHRoaXMuX2FjdHVhbE51bVBhZ2VzID0gbnVtO1xuICB9XG5cbiAgZ2V0IGhhc0FjdHVhbE51bVBhZ2VzKCkge1xuICAgIHJldHVybiB0aGlzLl9hY3R1YWxOdW1QYWdlcyAhPT0gbnVsbDtcbiAgfVxuXG4gIGdldCBfcGFnZXNDb3VudCgpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzLnRvcGxldmVsUGFnZXNEaWN0LmdldChcIkNvdW50XCIpO1xuXG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG9iaikpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlBhZ2UgY291bnQgaW4gdG9wLWxldmVsIHBhZ2VzIGRpY3Rpb25hcnkgaXMgbm90IGFuIGludGVnZXIuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIl9wYWdlc0NvdW50XCIsIG9iaik7XG4gIH1cblxuICBnZXQgbnVtUGFnZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQWN0dWFsTnVtUGFnZXMgPyB0aGlzLl9hY3R1YWxOdW1QYWdlcyA6IHRoaXMuX3BhZ2VzQ291bnQ7XG4gIH1cblxuICBnZXQgZGVzdGluYXRpb25zKCkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuX3JlYWREZXN0cygpLFxuICAgICAgICAgIGRlc3RzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBfbmFtZV9udW1iZXJfdHJlZS5OYW1lVHJlZSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2Ygb2JqLmdldEFsbCgpKSB7XG4gICAgICAgIGNvbnN0IGRlc3QgPSBmZXRjaERlc3RpbmF0aW9uKHZhbHVlKTtcblxuICAgICAgICBpZiAoZGVzdCkge1xuICAgICAgICAgIGRlc3RzW2tleV0gPSBkZXN0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSB7XG4gICAgICBvYmouZm9yRWFjaChmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBkZXN0ID0gZmV0Y2hEZXN0aW5hdGlvbih2YWx1ZSk7XG5cbiAgICAgICAgaWYgKGRlc3QpIHtcbiAgICAgICAgICBkZXN0c1trZXldID0gZGVzdDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiZGVzdGluYXRpb25zXCIsIGRlc3RzKTtcbiAgfVxuXG4gIGdldERlc3RpbmF0aW9uKGlkKSB7XG4gICAgY29uc3Qgb2JqID0gdGhpcy5fcmVhZERlc3RzKCk7XG5cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgX25hbWVfbnVtYmVyX3RyZWUuTmFtZVRyZWUpIHtcbiAgICAgIGNvbnN0IGRlc3QgPSBmZXRjaERlc3RpbmF0aW9uKG9iai5nZXQoaWQpKTtcblxuICAgICAgaWYgKGRlc3QpIHtcbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFsbERlc3QgPSB0aGlzLmRlc3RpbmF0aW9uc1tpZF07XG5cbiAgICAgIGlmIChhbGxEZXN0KSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgRm91bmQgXCIke2lkfVwiIGF0IGFuIGluY29ycmVjdCBwb3NpdGlvbiBpbiB0aGUgTmFtZVRyZWUuYCk7XG4gICAgICAgIHJldHVybiBhbGxEZXN0O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkge1xuICAgICAgY29uc3QgZGVzdCA9IGZldGNoRGVzdGluYXRpb24ob2JqLmdldChpZCkpO1xuXG4gICAgICBpZiAoZGVzdCkge1xuICAgICAgICByZXR1cm4gZGVzdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIF9yZWFkRGVzdHMoKSB7XG4gICAgY29uc3Qgb2JqID0gdGhpcy5fY2F0RGljdC5nZXQoXCJOYW1lc1wiKTtcblxuICAgIGlmIChvYmogJiYgb2JqLmhhcyhcIkRlc3RzXCIpKSB7XG4gICAgICByZXR1cm4gbmV3IF9uYW1lX251bWJlcl90cmVlLk5hbWVUcmVlKG9iai5nZXRSYXcoXCJEZXN0c1wiKSwgdGhpcy54cmVmKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2NhdERpY3QuaGFzKFwiRGVzdHNcIikpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jYXREaWN0LmdldChcIkRlc3RzXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgcGFnZUxhYmVscygpIHtcbiAgICBsZXQgb2JqID0gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICBvYmogPSB0aGlzLl9yZWFkUGFnZUxhYmVscygpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5hYmxlIHRvIHJlYWQgcGFnZSBsYWJlbHMuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInBhZ2VMYWJlbHNcIiwgb2JqKTtcbiAgfVxuXG4gIF9yZWFkUGFnZUxhYmVscygpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzLl9jYXREaWN0LmdldFJhdyhcIlBhZ2VMYWJlbHNcIik7XG5cbiAgICBpZiAoIW9iaikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcGFnZUxhYmVscyA9IG5ldyBBcnJheSh0aGlzLm51bVBhZ2VzKTtcbiAgICBsZXQgc3R5bGUgPSBudWxsLFxuICAgICAgICBwcmVmaXggPSBcIlwiO1xuICAgIGNvbnN0IG51bWJlclRyZWUgPSBuZXcgX25hbWVfbnVtYmVyX3RyZWUuTnVtYmVyVHJlZShvYmosIHRoaXMueHJlZik7XG4gICAgY29uc3QgbnVtcyA9IG51bWJlclRyZWUuZ2V0QWxsKCk7XG4gICAgbGV0IGN1cnJlbnRMYWJlbCA9IFwiXCIsXG4gICAgICAgIGN1cnJlbnRJbmRleCA9IDE7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSB0aGlzLm51bVBhZ2VzOyBpIDwgaWk7IGkrKykge1xuICAgICAgY29uc3QgbGFiZWxEaWN0ID0gbnVtcy5nZXQoaSk7XG5cbiAgICAgIGlmIChsYWJlbERpY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGxhYmVsRGljdCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJQYWdlTGFiZWwgaXMgbm90IGEgZGljdGlvbmFyeS5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFiZWxEaWN0LmhhcyhcIlR5cGVcIikgJiYgISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGxhYmVsRGljdC5nZXQoXCJUeXBlXCIpLCBcIlBhZ2VMYWJlbFwiKSkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgdHlwZSBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFiZWxEaWN0LmhhcyhcIlNcIikpIHtcbiAgICAgICAgICBjb25zdCBzID0gbGFiZWxEaWN0LmdldChcIlNcIik7XG5cbiAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIHN0eWxlIGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdHlsZSA9IHMubmFtZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHlsZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFiZWxEaWN0LmhhcyhcIlBcIikpIHtcbiAgICAgICAgICBjb25zdCBwID0gbGFiZWxEaWN0LmdldChcIlBcIik7XG5cbiAgICAgICAgICBpZiAoISgwLCBfdXRpbC5pc1N0cmluZykocCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgcHJlZml4IGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcmVmaXggPSAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKHApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZWZpeCA9IFwiXCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFiZWxEaWN0LmhhcyhcIlN0XCIpKSB7XG4gICAgICAgICAgY29uc3Qgc3QgPSBsYWJlbERpY3QuZ2V0KFwiU3RcIik7XG5cbiAgICAgICAgICBpZiAoIShOdW1iZXIuaXNJbnRlZ2VyKHN0KSAmJiBzdCA+PSAxKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSW52YWxpZCBzdGFydCBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS5cIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3VycmVudEluZGV4ID0gc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudEluZGV4ID0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICAgIGNhc2UgXCJEXCI6XG4gICAgICAgICAgY3VycmVudExhYmVsID0gY3VycmVudEluZGV4O1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJSXCI6XG4gICAgICAgIGNhc2UgXCJyXCI6XG4gICAgICAgICAgY3VycmVudExhYmVsID0gKDAsIF9jb3JlX3V0aWxzLnRvUm9tYW5OdW1lcmFscykoY3VycmVudEluZGV4LCBzdHlsZSA9PT0gXCJyXCIpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJBXCI6XG4gICAgICAgIGNhc2UgXCJhXCI6XG4gICAgICAgICAgY29uc3QgTElNSVQgPSAyNjtcbiAgICAgICAgICBjb25zdCBBX1VQUEVSX0NBU0UgPSAweDQxLFxuICAgICAgICAgICAgICAgIEFfTE9XRVJfQ0FTRSA9IDB4NjE7XG4gICAgICAgICAgY29uc3QgYmFzZUNoYXJDb2RlID0gc3R5bGUgPT09IFwiYVwiID8gQV9MT1dFUl9DQVNFIDogQV9VUFBFUl9DQVNFO1xuICAgICAgICAgIGNvbnN0IGxldHRlckluZGV4ID0gY3VycmVudEluZGV4IC0gMTtcbiAgICAgICAgICBjb25zdCBjaGFyYWN0ZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJhc2VDaGFyQ29kZSArIGxldHRlckluZGV4ICUgTElNSVQpO1xuICAgICAgICAgIGNvbnN0IGNoYXJCdWYgPSBbXTtcblxuICAgICAgICAgIGZvciAobGV0IGogPSAwLCBqaiA9IGxldHRlckluZGV4IC8gTElNSVQgfCAwOyBqIDw9IGpqOyBqKyspIHtcbiAgICAgICAgICAgIGNoYXJCdWYucHVzaChjaGFyYWN0ZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGN1cnJlbnRMYWJlbCA9IGNoYXJCdWYuam9pbihcIlwiKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChzdHlsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIHN0eWxlIFwiJHtzdHlsZX1cIiBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS5gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50TGFiZWwgPSBcIlwiO1xuICAgICAgfVxuXG4gICAgICBwYWdlTGFiZWxzW2ldID0gcHJlZml4ICsgY3VycmVudExhYmVsO1xuICAgICAgY3VycmVudEluZGV4Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZ2VMYWJlbHM7XG4gIH1cblxuICBnZXQgcGFnZUxheW91dCgpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzLl9jYXREaWN0LmdldChcIlBhZ2VMYXlvdXRcIik7XG5cbiAgICBsZXQgcGFnZUxheW91dCA9IFwiXCI7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkob2JqKSkge1xuICAgICAgc3dpdGNoIChvYmoubmFtZSkge1xuICAgICAgICBjYXNlIFwiU2luZ2xlUGFnZVwiOlxuICAgICAgICBjYXNlIFwiT25lQ29sdW1uXCI6XG4gICAgICAgIGNhc2UgXCJUd29Db2x1bW5MZWZ0XCI6XG4gICAgICAgIGNhc2UgXCJUd29Db2x1bW5SaWdodFwiOlxuICAgICAgICBjYXNlIFwiVHdvUGFnZUxlZnRcIjpcbiAgICAgICAgY2FzZSBcIlR3b1BhZ2VSaWdodFwiOlxuICAgICAgICAgIHBhZ2VMYXlvdXQgPSBvYmoubmFtZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJwYWdlTGF5b3V0XCIsIHBhZ2VMYXlvdXQpO1xuICB9XG5cbiAgZ2V0IHBhZ2VNb2RlKCkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuX2NhdERpY3QuZ2V0KFwiUGFnZU1vZGVcIik7XG5cbiAgICBsZXQgcGFnZU1vZGUgPSBcIlVzZU5vbmVcIjtcblxuICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShvYmopKSB7XG4gICAgICBzd2l0Y2ggKG9iai5uYW1lKSB7XG4gICAgICAgIGNhc2UgXCJVc2VOb25lXCI6XG4gICAgICAgIGNhc2UgXCJVc2VPdXRsaW5lc1wiOlxuICAgICAgICBjYXNlIFwiVXNlVGh1bWJzXCI6XG4gICAgICAgIGNhc2UgXCJGdWxsU2NyZWVuXCI6XG4gICAgICAgIGNhc2UgXCJVc2VPQ1wiOlxuICAgICAgICBjYXNlIFwiVXNlQXR0YWNobWVudHNcIjpcbiAgICAgICAgICBwYWdlTW9kZSA9IG9iai5uYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInBhZ2VNb2RlXCIsIHBhZ2VNb2RlKTtcbiAgfVxuXG4gIGdldCB2aWV3ZXJQcmVmZXJlbmNlcygpIHtcbiAgICBjb25zdCBWaWV3ZXJQcmVmZXJlbmNlc1ZhbGlkYXRvcnMgPSB7XG4gICAgICBIaWRlVG9vbGJhcjogX3V0aWwuaXNCb29sLFxuICAgICAgSGlkZU1lbnViYXI6IF91dGlsLmlzQm9vbCxcbiAgICAgIEhpZGVXaW5kb3dVSTogX3V0aWwuaXNCb29sLFxuICAgICAgRml0V2luZG93OiBfdXRpbC5pc0Jvb2wsXG4gICAgICBDZW50ZXJXaW5kb3c6IF91dGlsLmlzQm9vbCxcbiAgICAgIERpc3BsYXlEb2NUaXRsZTogX3V0aWwuaXNCb29sLFxuICAgICAgTm9uRnVsbFNjcmVlblBhZ2VNb2RlOiBfcHJpbWl0aXZlcy5pc05hbWUsXG4gICAgICBEaXJlY3Rpb246IF9wcmltaXRpdmVzLmlzTmFtZSxcbiAgICAgIFZpZXdBcmVhOiBfcHJpbWl0aXZlcy5pc05hbWUsXG4gICAgICBWaWV3Q2xpcDogX3ByaW1pdGl2ZXMuaXNOYW1lLFxuICAgICAgUHJpbnRBcmVhOiBfcHJpbWl0aXZlcy5pc05hbWUsXG4gICAgICBQcmludENsaXA6IF9wcmltaXRpdmVzLmlzTmFtZSxcbiAgICAgIFByaW50U2NhbGluZzogX3ByaW1pdGl2ZXMuaXNOYW1lLFxuICAgICAgRHVwbGV4OiBfcHJpbWl0aXZlcy5pc05hbWUsXG4gICAgICBQaWNrVHJheUJ5UERGU2l6ZTogX3V0aWwuaXNCb29sLFxuICAgICAgUHJpbnRQYWdlUmFuZ2U6IEFycmF5LmlzQXJyYXksXG4gICAgICBOdW1Db3BpZXM6IE51bWJlci5pc0ludGVnZXJcbiAgICB9O1xuXG4gICAgY29uc3Qgb2JqID0gdGhpcy5fY2F0RGljdC5nZXQoXCJWaWV3ZXJQcmVmZXJlbmNlc1wiKTtcblxuICAgIGxldCBwcmVmcyA9IG51bGw7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqKSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gVmlld2VyUHJlZmVyZW5jZXNWYWxpZGF0b3JzKSB7XG4gICAgICAgIGlmICghb2JqLmhhcyhrZXkpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZSA9IG9iai5nZXQoa2V5KTtcblxuICAgICAgICBpZiAoIVZpZXdlclByZWZlcmVuY2VzVmFsaWRhdG9yc1trZXldKHZhbHVlKSkge1xuICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShgQmFkIHZhbHVlIGluIFZpZXdlclByZWZlcmVuY2VzIGZvciBcIiR7a2V5fVwiLmApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByZWZWYWx1ZTtcblxuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgIGNhc2UgXCJOb25GdWxsU2NyZWVuUGFnZU1vZGVcIjpcbiAgICAgICAgICAgIHN3aXRjaCAodmFsdWUubmFtZSkge1xuICAgICAgICAgICAgICBjYXNlIFwiVXNlTm9uZVwiOlxuICAgICAgICAgICAgICBjYXNlIFwiVXNlT3V0bGluZXNcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIlVzZVRodW1ic1wiOlxuICAgICAgICAgICAgICBjYXNlIFwiVXNlT0NcIjpcbiAgICAgICAgICAgICAgICBwcmVmVmFsdWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcHJlZlZhbHVlID0gXCJVc2VOb25lXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIkRpcmVjdGlvblwiOlxuICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5uYW1lKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJMMlJcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIlIyTFwiOlxuICAgICAgICAgICAgICAgIHByZWZWYWx1ZSA9IHZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBwcmVmVmFsdWUgPSBcIkwyUlwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJWaWV3QXJlYVwiOlxuICAgICAgICAgIGNhc2UgXCJWaWV3Q2xpcFwiOlxuICAgICAgICAgIGNhc2UgXCJQcmludEFyZWFcIjpcbiAgICAgICAgICBjYXNlIFwiUHJpbnRDbGlwXCI6XG4gICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLm5hbWUpIHtcbiAgICAgICAgICAgICAgY2FzZSBcIk1lZGlhQm94XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJDcm9wQm94XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJCbGVlZEJveFwiOlxuICAgICAgICAgICAgICBjYXNlIFwiVHJpbUJveFwiOlxuICAgICAgICAgICAgICBjYXNlIFwiQXJ0Qm94XCI6XG4gICAgICAgICAgICAgICAgcHJlZlZhbHVlID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHByZWZWYWx1ZSA9IFwiQ3JvcEJveFwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJQcmludFNjYWxpbmdcIjpcbiAgICAgICAgICAgIHN3aXRjaCAodmFsdWUubmFtZSkge1xuICAgICAgICAgICAgICBjYXNlIFwiTm9uZVwiOlxuICAgICAgICAgICAgICBjYXNlIFwiQXBwRGVmYXVsdFwiOlxuICAgICAgICAgICAgICAgIHByZWZWYWx1ZSA9IHZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBwcmVmVmFsdWUgPSBcIkFwcERlZmF1bHRcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiRHVwbGV4XCI6XG4gICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLm5hbWUpIHtcbiAgICAgICAgICAgICAgY2FzZSBcIlNpbXBsZXhcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIkR1cGxleEZsaXBTaG9ydEVkZ2VcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIkR1cGxleEZsaXBMb25nRWRnZVwiOlxuICAgICAgICAgICAgICAgIHByZWZWYWx1ZSA9IHZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBwcmVmVmFsdWUgPSBcIk5vbmVcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiUHJpbnRQYWdlUmFuZ2VcIjpcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcblxuICAgICAgICAgICAgaWYgKGxlbmd0aCAlIDIgIT09IDApIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGlzVmFsaWQgPSB2YWx1ZS5ldmVyeSgocGFnZSwgaSwgYXJyKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHBhZ2UpICYmIHBhZ2UgPiAwICYmIChpID09PSAwIHx8IHBhZ2UgPj0gYXJyW2kgLSAxXSkgJiYgcGFnZSA8PSB0aGlzLm51bVBhZ2VzO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgIHByZWZWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJOdW1Db3BpZXNcIjpcbiAgICAgICAgICAgIGlmICh2YWx1ZSA+IDApIHtcbiAgICAgICAgICAgICAgcHJlZlZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgdmlld2VyUHJlZmVyZW5jZXMgLSBleHBlY3RlZCBhIGJvb2xlYW4gdmFsdWUgZm9yOiAke2tleX1gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJlZlZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJlZlZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoIXByZWZzKSB7XG4gICAgICAgICAgICBwcmVmcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJlZnNba2V5XSA9IHByZWZWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoYEJhZCB2YWx1ZSBpbiBWaWV3ZXJQcmVmZXJlbmNlcyBmb3IgXCIke2tleX1cIi5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInZpZXdlclByZWZlcmVuY2VzXCIsIHByZWZzKTtcbiAgfVxuXG4gIGdldCBvcGVuQWN0aW9uKCkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuX2NhdERpY3QuZ2V0KFwiT3BlbkFjdGlvblwiKTtcblxuICAgIGNvbnN0IG9wZW5BY3Rpb24gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaikpIHtcbiAgICAgIGNvbnN0IGRlc3REaWN0ID0gbmV3IF9wcmltaXRpdmVzLkRpY3QodGhpcy54cmVmKTtcbiAgICAgIGRlc3REaWN0LnNldChcIkFcIiwgb2JqKTtcbiAgICAgIGNvbnN0IHJlc3VsdE9iaiA9IHtcbiAgICAgICAgdXJsOiBudWxsLFxuICAgICAgICBkZXN0OiBudWxsLFxuICAgICAgICBhY3Rpb246IG51bGxcbiAgICAgIH07XG4gICAgICBDYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe1xuICAgICAgICBkZXN0RGljdCxcbiAgICAgICAgcmVzdWx0T2JqXG4gICAgICB9KTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0T2JqLmRlc3QpKSB7XG4gICAgICAgIG9wZW5BY3Rpb24uZGVzdCA9IHJlc3VsdE9iai5kZXN0O1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHRPYmouYWN0aW9uKSB7XG4gICAgICAgIG9wZW5BY3Rpb24uYWN0aW9uID0gcmVzdWx0T2JqLmFjdGlvbjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgb3BlbkFjdGlvbi5kZXN0ID0gb2JqO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIm9wZW5BY3Rpb25cIiwgKDAsIF91dGlsLm9iamVjdFNpemUpKG9wZW5BY3Rpb24pID4gMCA/IG9wZW5BY3Rpb24gOiBudWxsKTtcbiAgfVxuXG4gIGdldCBhdHRhY2htZW50cygpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzLl9jYXREaWN0LmdldChcIk5hbWVzXCIpO1xuXG4gICAgbGV0IGF0dGFjaG1lbnRzID0gbnVsbDtcblxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0ICYmIG9iai5oYXMoXCJFbWJlZGRlZEZpbGVzXCIpKSB7XG4gICAgICBjb25zdCBuYW1lVHJlZSA9IG5ldyBfbmFtZV9udW1iZXJfdHJlZS5OYW1lVHJlZShvYmouZ2V0UmF3KFwiRW1iZWRkZWRGaWxlc1wiKSwgdGhpcy54cmVmKTtcblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgbmFtZVRyZWUuZ2V0QWxsKCkpIHtcbiAgICAgICAgY29uc3QgZnMgPSBuZXcgX2ZpbGVfc3BlYy5GaWxlU3BlYyh2YWx1ZSwgdGhpcy54cmVmKTtcblxuICAgICAgICBpZiAoIWF0dGFjaG1lbnRzKSB7XG4gICAgICAgICAgYXR0YWNobWVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXR0YWNobWVudHNbKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShrZXkpXSA9IGZzLnNlcmlhbGl6YWJsZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJhdHRhY2htZW50c1wiLCBhdHRhY2htZW50cyk7XG4gIH1cblxuICBnZXQgeGZhSW1hZ2VzKCkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuX2NhdERpY3QuZ2V0KFwiTmFtZXNcIik7XG5cbiAgICBsZXQgeGZhSW1hZ2VzID0gbnVsbDtcblxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0ICYmIG9iai5oYXMoXCJYRkFJbWFnZXNcIikpIHtcbiAgICAgIGNvbnN0IG5hbWVUcmVlID0gbmV3IF9uYW1lX251bWJlcl90cmVlLk5hbWVUcmVlKG9iai5nZXRSYXcoXCJYRkFJbWFnZXNcIiksIHRoaXMueHJlZik7XG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIG5hbWVUcmVlLmdldEFsbCgpKSB7XG4gICAgICAgIGlmICgheGZhSW1hZ2VzKSB7XG4gICAgICAgICAgeGZhSW1hZ2VzID0gbmV3IF9wcmltaXRpdmVzLkRpY3QodGhpcy54cmVmKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHhmYUltYWdlcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwieGZhSW1hZ2VzXCIsIHhmYUltYWdlcyk7XG4gIH1cblxuICBfY29sbGVjdEphdmFTY3JpcHQoKSB7XG4gICAgY29uc3Qgb2JqID0gdGhpcy5fY2F0RGljdC5nZXQoXCJOYW1lc1wiKTtcblxuICAgIGxldCBqYXZhU2NyaXB0ID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIGFwcGVuZElmSmF2YVNjcmlwdERpY3QobmFtZSwganNEaWN0KSB7XG4gICAgICBpZiAoIShqc0RpY3QgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoanNEaWN0LmdldChcIlNcIiksIFwiSmF2YVNjcmlwdFwiKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBqcyA9IGpzRGljdC5nZXQoXCJKU1wiKTtcblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoanMpKSB7XG4gICAgICAgIGpzID0ganMuZ2V0U3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBqcyAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChqYXZhU2NyaXB0ID09PSBudWxsKSB7XG4gICAgICAgIGphdmFTY3JpcHQgPSBuZXcgTWFwKCk7XG4gICAgICB9XG5cbiAgICAgIGphdmFTY3JpcHQuc2V0KG5hbWUsICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoanMpKTtcbiAgICB9XG5cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCAmJiBvYmouaGFzKFwiSmF2YVNjcmlwdFwiKSkge1xuICAgICAgY29uc3QgbmFtZVRyZWUgPSBuZXcgX25hbWVfbnVtYmVyX3RyZWUuTmFtZVRyZWUob2JqLmdldFJhdyhcIkphdmFTY3JpcHRcIiksIHRoaXMueHJlZik7XG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIG5hbWVUcmVlLmdldEFsbCgpKSB7XG4gICAgICAgIGFwcGVuZElmSmF2YVNjcmlwdERpY3Qoa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb3BlbkFjdGlvbiA9IHRoaXMuX2NhdERpY3QuZ2V0KFwiT3BlbkFjdGlvblwiKTtcblxuICAgIGlmIChvcGVuQWN0aW9uKSB7XG4gICAgICBhcHBlbmRJZkphdmFTY3JpcHREaWN0KFwiT3BlbkFjdGlvblwiLCBvcGVuQWN0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gamF2YVNjcmlwdDtcbiAgfVxuXG4gIGdldCBqYXZhU2NyaXB0KCkge1xuICAgIGNvbnN0IGphdmFTY3JpcHQgPSB0aGlzLl9jb2xsZWN0SmF2YVNjcmlwdCgpO1xuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiamF2YVNjcmlwdFwiLCBqYXZhU2NyaXB0ID8gWy4uLmphdmFTY3JpcHQudmFsdWVzKCldIDogbnVsbCk7XG4gIH1cblxuICBnZXQganNBY3Rpb25zKCkge1xuICAgIGNvbnN0IGphdmFTY3JpcHQgPSB0aGlzLl9jb2xsZWN0SmF2YVNjcmlwdCgpO1xuXG4gICAgbGV0IGFjdGlvbnMgPSAoMCwgX2NvcmVfdXRpbHMuY29sbGVjdEFjdGlvbnMpKHRoaXMueHJlZiwgdGhpcy5fY2F0RGljdCwgX3V0aWwuRG9jdW1lbnRBY3Rpb25FdmVudFR5cGUpO1xuXG4gICAgaWYgKGphdmFTY3JpcHQpIHtcbiAgICAgIGlmICghYWN0aW9ucykge1xuICAgICAgICBhY3Rpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIGphdmFTY3JpcHQpIHtcbiAgICAgICAgaWYgKGtleSBpbiBhY3Rpb25zKSB7XG4gICAgICAgICAgYWN0aW9uc1trZXldLnB1c2godmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhY3Rpb25zW2tleV0gPSBbdmFsXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImpzQWN0aW9uc1wiLCBhY3Rpb25zKTtcbiAgfVxuXG4gIGZvbnRGYWxsYmFjayhpZCwgaGFuZGxlcikge1xuICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgdGhpcy5mb250Q2FjaGUuZm9yRWFjaChmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgcHJvbWlzZXMucHVzaChwcm9taXNlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4odHJhbnNsYXRlZEZvbnRzID0+IHtcbiAgICAgIGZvciAoY29uc3QgdHJhbnNsYXRlZEZvbnQgb2YgdHJhbnNsYXRlZEZvbnRzKSB7XG4gICAgICAgIGlmICh0cmFuc2xhdGVkRm9udC5sb2FkZWROYW1lID09PSBpZCkge1xuICAgICAgICAgIHRyYW5zbGF0ZWRGb250LmZhbGxiYWNrKGhhbmRsZXIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2xlYW51cChtYW51YWxseVRyaWdnZXJlZCA9IGZhbHNlKSB7XG4gICAgKDAsIF9wcmltaXRpdmVzLmNsZWFyUHJpbWl0aXZlQ2FjaGVzKSgpO1xuICAgIHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5jbGVhcihtYW51YWxseVRyaWdnZXJlZCk7XG4gICAgdGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUuY2xlYXIoKTtcbiAgICB0aGlzLnBhZ2VJbmRleENhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5ub25CbGVuZE1vZGVzU2V0LmNsZWFyKCk7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICB0aGlzLmZvbnRDYWNoZS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbih0cmFuc2xhdGVkRm9udHMgPT4ge1xuICAgICAgZm9yIChjb25zdCB7XG4gICAgICAgIGRpY3RcbiAgICAgIH0gb2YgdHJhbnNsYXRlZEZvbnRzKSB7XG4gICAgICAgIGRlbGV0ZSBkaWN0LmNhY2hlS2V5O1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZvbnRDYWNoZS5jbGVhcigpO1xuICAgICAgdGhpcy5idWlsdEluQ01hcENhY2hlLmNsZWFyKCk7XG4gICAgICB0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5jbGVhcigpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0UGFnZURpY3QocGFnZUluZGV4KSB7XG4gICAgY29uc3QgY2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICBjb25zdCBub2Rlc1RvVmlzaXQgPSBbdGhpcy50b3BsZXZlbFBhZ2VzRGljdF07XG4gICAgY29uc3QgdmlzaXRlZE5vZGVzID0gbmV3IF9wcmltaXRpdmVzLlJlZlNldCgpO1xuXG4gICAgY29uc3QgcGFnZXNSZWYgPSB0aGlzLl9jYXREaWN0LmdldFJhdyhcIlBhZ2VzXCIpO1xuXG4gICAgaWYgKHBhZ2VzUmVmIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmKSB7XG4gICAgICB2aXNpdGVkTm9kZXMucHV0KHBhZ2VzUmVmKTtcbiAgICB9XG5cbiAgICBjb25zdCB4cmVmID0gdGhpcy54cmVmLFxuICAgICAgICAgIHBhZ2VLaWRzQ291bnRDYWNoZSA9IHRoaXMucGFnZUtpZHNDb3VudENhY2hlO1xuICAgIGxldCBjdXJyZW50UGFnZUluZGV4ID0gMDtcblxuICAgIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICB3aGlsZSAobm9kZXNUb1Zpc2l0Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IG5vZGVzVG9WaXNpdC5wb3AoKTtcblxuICAgICAgICBpZiAoY3VycmVudE5vZGUgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgICAgICBjb25zdCBjb3VudCA9IHBhZ2VLaWRzQ291bnRDYWNoZS5nZXQoY3VycmVudE5vZGUpO1xuXG4gICAgICAgICAgaWYgKGNvdW50ID49IDAgJiYgY3VycmVudFBhZ2VJbmRleCArIGNvdW50IDw9IHBhZ2VJbmRleCkge1xuICAgICAgICAgICAgY3VycmVudFBhZ2VJbmRleCArPSBjb3VudDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2aXNpdGVkTm9kZXMuaGFzKGN1cnJlbnROb2RlKSkge1xuICAgICAgICAgICAgY2FwYWJpbGl0eS5yZWplY3QobmV3IF91dGlsLkZvcm1hdEVycm9yKFwiUGFnZXMgdHJlZSBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2UuXCIpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2aXNpdGVkTm9kZXMucHV0KGN1cnJlbnROb2RlKTtcbiAgICAgICAgICB4cmVmLmZldGNoQXN5bmMoY3VycmVudE5vZGUpLnRoZW4oZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaiwgXCJQYWdlXCIpIHx8ICgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaikgJiYgIW9iai5oYXMoXCJLaWRzXCIpKSB7XG4gICAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZSAmJiAhcGFnZUtpZHNDb3VudENhY2hlLmhhcyhjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICBwYWdlS2lkc0NvdW50Q2FjaGUucHV0KGN1cnJlbnROb2RlLCAxKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChwYWdlSW5kZXggPT09IGN1cnJlbnRQYWdlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlc29sdmUoW29iaiwgY3VycmVudE5vZGVdKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZUluZGV4Kys7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBub2Rlc1RvVmlzaXQucHVzaChvYmopO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIH0sIGNhcGFiaWxpdHkucmVqZWN0KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIShjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgICAgY2FwYWJpbGl0eS5yZWplY3QobmV3IF91dGlsLkZvcm1hdEVycm9yKFwiUGFnZSBkaWN0aW9uYXJ5IGtpZCByZWZlcmVuY2UgcG9pbnRzIHRvIHdyb25nIHR5cGUgb2Ygb2JqZWN0LlwiKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvdW50O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY291bnQgPSBjdXJyZW50Tm9kZS5nZXQoXCJDb3VudFwiKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoY291bnQpICYmIGNvdW50ID49IDApIHtcbiAgICAgICAgICBjb25zdCBvYmpJZCA9IGN1cnJlbnROb2RlLm9iaklkO1xuXG4gICAgICAgICAgaWYgKG9iaklkICYmICFwYWdlS2lkc0NvdW50Q2FjaGUuaGFzKG9iaklkKSkge1xuICAgICAgICAgICAgcGFnZUtpZHNDb3VudENhY2hlLnB1dChvYmpJZCwgY291bnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjdXJyZW50UGFnZUluZGV4ICsgY291bnQgPD0gcGFnZUluZGV4KSB7XG4gICAgICAgICAgICBjdXJyZW50UGFnZUluZGV4ICs9IGNvdW50O1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGtpZHM7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBraWRzID0gY3VycmVudE5vZGUuZ2V0KFwiS2lkc1wiKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGtpZHMpKSB7XG4gICAgICAgICAgbGV0IHR5cGU7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdHlwZSA9IGN1cnJlbnROb2RlLmdldChcIlR5cGVcIik7XG4gICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0eXBlLCBcIlBhZ2VcIikgfHwgIWN1cnJlbnROb2RlLmhhcyhcIlR5cGVcIikgJiYgY3VycmVudE5vZGUuaGFzKFwiQ29udGVudHNcIikpIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UGFnZUluZGV4ID09PSBwYWdlSW5kZXgpIHtcbiAgICAgICAgICAgICAgY2FwYWJpbGl0eS5yZXNvbHZlKFtjdXJyZW50Tm9kZSwgbnVsbF0pO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRQYWdlSW5kZXgrKztcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhcGFiaWxpdHkucmVqZWN0KG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlBhZ2UgZGljdGlvbmFyeSBraWRzIG9iamVjdCBpcyBub3QgYW4gYXJyYXkuXCIpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBsYXN0ID0ga2lkcy5sZW5ndGggLSAxOyBsYXN0ID49IDA7IGxhc3QtLSkge1xuICAgICAgICAgIG5vZGVzVG9WaXNpdC5wdXNoKGtpZHNbbGFzdF0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNhcGFiaWxpdHkucmVqZWN0KG5ldyBFcnJvcihgUGFnZSBpbmRleCAke3BhZ2VJbmRleH0gbm90IGZvdW5kLmApKTtcbiAgICB9XG5cbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIGdldEFsbFBhZ2VEaWN0cyhyZWNvdmVyeU1vZGUgPSBmYWxzZSkge1xuICAgIGNvbnN0IHF1ZXVlID0gW3tcbiAgICAgIGN1cnJlbnROb2RlOiB0aGlzLnRvcGxldmVsUGFnZXNEaWN0LFxuICAgICAgcG9zSW5LaWRzOiAwXG4gICAgfV07XG4gICAgY29uc3QgdmlzaXRlZE5vZGVzID0gbmV3IF9wcmltaXRpdmVzLlJlZlNldCgpO1xuXG4gICAgY29uc3QgcGFnZXNSZWYgPSB0aGlzLl9jYXREaWN0LmdldFJhdyhcIlBhZ2VzXCIpO1xuXG4gICAgaWYgKHBhZ2VzUmVmIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmKSB7XG4gICAgICB2aXNpdGVkTm9kZXMucHV0KHBhZ2VzUmVmKTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwKCk7XG4gICAgbGV0IHBhZ2VJbmRleCA9IDA7XG5cbiAgICBmdW5jdGlvbiBhZGRQYWdlRGljdChwYWdlRGljdCwgcGFnZVJlZikge1xuICAgICAgbWFwLnNldChwYWdlSW5kZXgrKywgW3BhZ2VEaWN0LCBwYWdlUmVmXSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkUGFnZUVycm9yKGVycm9yKSB7XG4gICAgICBtYXAuc2V0KHBhZ2VJbmRleCsrLCBbZXJyb3IsIG51bGxdKTtcbiAgICB9XG5cbiAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcXVldWVJdGVtID0gcXVldWVbcXVldWUubGVuZ3RoIC0gMV07XG4gICAgICBjb25zdCB7XG4gICAgICAgIGN1cnJlbnROb2RlLFxuICAgICAgICBwb3NJbktpZHNcbiAgICAgIH0gPSBxdWV1ZUl0ZW07XG4gICAgICBsZXQga2lkcztcblxuICAgICAgdHJ5IHtcbiAgICAgICAga2lkcyA9IGN1cnJlbnROb2RlLmdldChcIktpZHNcIik7XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuWFJlZkVudHJ5RXhjZXB0aW9uICYmICFyZWNvdmVyeU1vZGUpIHtcbiAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZFBhZ2VFcnJvcihleCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoa2lkcykpIHtcbiAgICAgICAgYWRkUGFnZUVycm9yKG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlBhZ2UgZGljdGlvbmFyeSBraWRzIG9iamVjdCBpcyBub3QgYW4gYXJyYXkuXCIpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChwb3NJbktpZHMgPj0ga2lkcy5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUucG9wKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBraWRPYmogPSBraWRzW3Bvc0luS2lkc107XG4gICAgICBsZXQgb2JqO1xuXG4gICAgICBpZiAoa2lkT2JqIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgb2JqID0gdGhpcy54cmVmLmZldGNoKGtpZE9iaik7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLlhSZWZFbnRyeUV4Y2VwdGlvbiAmJiAhcmVjb3ZlcnlNb2RlKSB7XG4gICAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhZGRQYWdlRXJyb3IoZXgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZpc2l0ZWROb2Rlcy5oYXMoa2lkT2JqKSkge1xuICAgICAgICAgIGFkZFBhZ2VFcnJvcihuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJQYWdlcyB0cmVlIGNvbnRhaW5zIGNpcmN1bGFyIHJlZmVyZW5jZS5cIikpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdmlzaXRlZE5vZGVzLnB1dChraWRPYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqID0ga2lkT2JqO1xuICAgICAgfVxuXG4gICAgICBpZiAoIShvYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSkge1xuICAgICAgICBhZGRQYWdlRXJyb3IobmV3IF91dGlsLkZvcm1hdEVycm9yKFwiUGFnZSBkaWN0aW9uYXJ5IGtpZCByZWZlcmVuY2UgcG9pbnRzIHRvIHdyb25nIHR5cGUgb2Ygb2JqZWN0LlwiKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqLCBcIlBhZ2VcIikgfHwgIW9iai5oYXMoXCJLaWRzXCIpKSB7XG4gICAgICAgIGFkZFBhZ2VEaWN0KG9iaiwga2lkT2JqIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmID8ga2lkT2JqIDogbnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZS5wdXNoKHtcbiAgICAgICAgICBjdXJyZW50Tm9kZTogb2JqLFxuICAgICAgICAgIHBvc0luS2lkczogMFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcXVldWVJdGVtLnBvc0luS2lkcysrO1xuICAgIH1cblxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICBnZXRQYWdlSW5kZXgocGFnZVJlZikge1xuICAgIGNvbnN0IGNhY2hlZFBhZ2VJbmRleCA9IHRoaXMucGFnZUluZGV4Q2FjaGUuZ2V0KHBhZ2VSZWYpO1xuXG4gICAgaWYgKGNhY2hlZFBhZ2VJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNhY2hlZFBhZ2VJbmRleCk7XG4gICAgfVxuXG4gICAgY29uc3QgeHJlZiA9IHRoaXMueHJlZjtcblxuICAgIGZ1bmN0aW9uIHBhZ2VzQmVmb3JlUmVmKGtpZFJlZikge1xuICAgICAgbGV0IHRvdGFsID0gMCxcbiAgICAgICAgICBwYXJlbnRSZWY7XG4gICAgICByZXR1cm4geHJlZi5mZXRjaEFzeW5jKGtpZFJlZikudGhlbihmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzUmVmc0VxdWFsKShraWRSZWYsIHBhZ2VSZWYpICYmICEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShub2RlLCBcIlBhZ2VcIikgJiYgISgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShub2RlKSAmJiAhbm9kZS5oYXMoXCJUeXBlXCIpICYmIG5vZGUuaGFzKFwiQ29udGVudHNcIikpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVGhlIHJlZmVyZW5jZSBkb2VzIG5vdCBwb2ludCB0byBhIC9QYWdlIGRpY3Rpb25hcnkuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG5vZGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiTm9kZSBtdXN0IGJlIGEgZGljdGlvbmFyeS5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJlbnRSZWYgPSBub2RlLmdldFJhdyhcIlBhcmVudFwiKTtcbiAgICAgICAgcmV0dXJuIG5vZGUuZ2V0QXN5bmMoXCJQYXJlbnRcIik7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkocGFyZW50KSkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlBhcmVudCBtdXN0IGJlIGEgZGljdGlvbmFyeS5cIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyZW50LmdldEFzeW5jKFwiS2lkc1wiKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGtpZHMpIHtcbiAgICAgICAgaWYgKCFraWRzKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBraWRQcm9taXNlcyA9IFtdO1xuICAgICAgICBsZXQgZm91bmQgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBraWRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBraWQgPSBraWRzW2ldO1xuXG4gICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKGtpZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIktpZCBtdXN0IGJlIGEgcmVmZXJlbmNlLlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzUmVmc0VxdWFsKShraWQsIGtpZFJlZikpIHtcbiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGtpZFByb21pc2VzLnB1c2goeHJlZi5mZXRjaEFzeW5jKGtpZCkudGhlbihmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaikpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiS2lkIG5vZGUgbXVzdCBiZSBhIGRpY3Rpb25hcnkuXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob2JqLmhhcyhcIkNvdW50XCIpKSB7XG4gICAgICAgICAgICAgIHRvdGFsICs9IG9iai5nZXQoXCJDb3VudFwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRvdGFsKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIktpZCByZWZlcmVuY2Ugbm90IGZvdW5kIGluIHBhcmVudCdzIGtpZHMuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGtpZFByb21pc2VzKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gW3RvdGFsLCBwYXJlbnRSZWZdO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCB0b3RhbCA9IDA7XG5cbiAgICBjb25zdCBuZXh0ID0gcmVmID0+IHBhZ2VzQmVmb3JlUmVmKHJlZikudGhlbihhcmdzID0+IHtcbiAgICAgIGlmICghYXJncykge1xuICAgICAgICB0aGlzLnBhZ2VJbmRleENhY2hlLnB1dChwYWdlUmVmLCB0b3RhbCk7XG4gICAgICAgIHJldHVybiB0b3RhbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW2NvdW50LCBwYXJlbnRSZWZdID0gYXJncztcbiAgICAgIHRvdGFsICs9IGNvdW50O1xuICAgICAgcmV0dXJuIG5leHQocGFyZW50UmVmKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXh0KHBhZ2VSZWYpO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlRGVzdERpY3Rpb25hcnkocGFyYW1zKSB7XG4gICAgY29uc3QgZGVzdERpY3QgPSBwYXJhbXMuZGVzdERpY3Q7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGRlc3REaWN0KSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwicGFyc2VEZXN0RGljdGlvbmFyeTogYGRlc3REaWN0YCBtdXN0IGJlIGEgZGljdGlvbmFyeS5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0T2JqID0gcGFyYW1zLnJlc3VsdE9iajtcblxuICAgIGlmICh0eXBlb2YgcmVzdWx0T2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJwYXJzZURlc3REaWN0aW9uYXJ5OiBgcmVzdWx0T2JqYCBtdXN0IGJlIGFuIG9iamVjdC5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZG9jQmFzZVVybCA9IHBhcmFtcy5kb2NCYXNlVXJsIHx8IG51bGw7XG4gICAgbGV0IGFjdGlvbiA9IGRlc3REaWN0LmdldChcIkFcIiksXG4gICAgICAgIHVybCxcbiAgICAgICAgZGVzdDtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoYWN0aW9uKSkge1xuICAgICAgaWYgKGRlc3REaWN0LmhhcyhcIkRlc3RcIikpIHtcbiAgICAgICAgYWN0aW9uID0gZGVzdERpY3QuZ2V0KFwiRGVzdFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGlvbiA9IGRlc3REaWN0LmdldChcIkFBXCIpO1xuXG4gICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShhY3Rpb24pKSB7XG4gICAgICAgICAgaWYgKGFjdGlvbi5oYXMoXCJEXCIpKSB7XG4gICAgICAgICAgICBhY3Rpb24gPSBhY3Rpb24uZ2V0KFwiRFwiKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi5oYXMoXCJVXCIpKSB7XG4gICAgICAgICAgICBhY3Rpb24gPSBhY3Rpb24uZ2V0KFwiVVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoYWN0aW9uKSkge1xuICAgICAgY29uc3QgYWN0aW9uVHlwZSA9IGFjdGlvbi5nZXQoXCJTXCIpO1xuXG4gICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGFjdGlvblR5cGUpKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcInBhcnNlRGVzdERpY3Rpb25hcnk6IEludmFsaWQgdHlwZSBpbiBBY3Rpb24gZGljdGlvbmFyeS5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWN0aW9uTmFtZSA9IGFjdGlvblR5cGUubmFtZTtcblxuICAgICAgc3dpdGNoIChhY3Rpb25OYW1lKSB7XG4gICAgICAgIGNhc2UgXCJSZXNldEZvcm1cIjpcbiAgICAgICAgICBjb25zdCBmbGFncyA9IGFjdGlvbi5nZXQoXCJGbGFnc1wiKTtcbiAgICAgICAgICBjb25zdCBpbmNsdWRlID0gKCgoMCwgX3V0aWwuaXNOdW0pKGZsYWdzKSA/IGZsYWdzIDogMCkgJiAxKSA9PT0gMDtcbiAgICAgICAgICBjb25zdCBmaWVsZHMgPSBbXTtcbiAgICAgICAgICBjb25zdCByZWZzID0gW107XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IG9iaiBvZiBhY3Rpb24uZ2V0KFwiRmllbGRzXCIpIHx8IFtdKSB7XG4gICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzUmVmKShvYmopKSB7XG4gICAgICAgICAgICAgIHJlZnMucHVzaChvYmoudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykob2JqKSkge1xuICAgICAgICAgICAgICBmaWVsZHMucHVzaCgoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKG9iaikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc3VsdE9iai5yZXNldEZvcm0gPSB7XG4gICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICByZWZzLFxuICAgICAgICAgICAgaW5jbHVkZVxuICAgICAgICAgIH07XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIlVSSVwiOlxuICAgICAgICAgIHVybCA9IGFjdGlvbi5nZXQoXCJVUklcIik7XG5cbiAgICAgICAgICBpZiAodXJsIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuTmFtZSkge1xuICAgICAgICAgICAgdXJsID0gXCIvXCIgKyB1cmwubmFtZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiR29Ub1wiOlxuICAgICAgICAgIGRlc3QgPSBhY3Rpb24uZ2V0KFwiRFwiKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiTGF1bmNoXCI6XG4gICAgICAgIGNhc2UgXCJHb1RvUlwiOlxuICAgICAgICAgIGNvbnN0IHVybERpY3QgPSBhY3Rpb24uZ2V0KFwiRlwiKTtcblxuICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KSh1cmxEaWN0KSkge1xuICAgICAgICAgICAgdXJsID0gdXJsRGljdC5nZXQoXCJGXCIpIHx8IG51bGw7XG4gICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKHVybERpY3QpKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmxEaWN0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCByZW1vdGVEZXN0ID0gYWN0aW9uLmdldChcIkRcIik7XG5cbiAgICAgICAgICBpZiAocmVtb3RlRGVzdCkge1xuICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHJlbW90ZURlc3QpKSB7XG4gICAgICAgICAgICAgIHJlbW90ZURlc3QgPSByZW1vdGVEZXN0Lm5hbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKHVybCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYmFzZVVybCA9IHVybC5zcGxpdChcIiNcIilbMF07XG5cbiAgICAgICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykocmVtb3RlRGVzdCkpIHtcbiAgICAgICAgICAgICAgICB1cmwgPSBiYXNlVXJsICsgXCIjXCIgKyByZW1vdGVEZXN0O1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVtb3RlRGVzdCkpIHtcbiAgICAgICAgICAgICAgICB1cmwgPSBiYXNlVXJsICsgXCIjXCIgKyBKU09OLnN0cmluZ2lmeShyZW1vdGVEZXN0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG5ld1dpbmRvdyA9IGFjdGlvbi5nZXQoXCJOZXdXaW5kb3dcIik7XG5cbiAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzQm9vbCkobmV3V2luZG93KSkge1xuICAgICAgICAgICAgcmVzdWx0T2JqLm5ld1dpbmRvdyA9IG5ld1dpbmRvdztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiTmFtZWRcIjpcbiAgICAgICAgICBjb25zdCBuYW1lZEFjdGlvbiA9IGFjdGlvbi5nZXQoXCJOXCIpO1xuXG4gICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKG5hbWVkQWN0aW9uKSkge1xuICAgICAgICAgICAgcmVzdWx0T2JqLmFjdGlvbiA9IG5hbWVkQWN0aW9uLm5hbWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIkphdmFTY3JpcHRcIjpcbiAgICAgICAgICBjb25zdCBqc0FjdGlvbiA9IGFjdGlvbi5nZXQoXCJKU1wiKTtcbiAgICAgICAgICBsZXQganM7XG5cbiAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShqc0FjdGlvbikpIHtcbiAgICAgICAgICAgIGpzID0ganNBY3Rpb24uZ2V0U3RyaW5nKCk7XG4gICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKGpzQWN0aW9uKSkge1xuICAgICAgICAgICAganMgPSBqc0FjdGlvbjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBqc1VSTCA9IGpzICYmICgwLCBfY29yZV91dGlscy5yZWNvdmVySnNVUkwpKCgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoanMpKTtcblxuICAgICAgICAgIGlmIChqc1VSTCkge1xuICAgICAgICAgICAgdXJsID0ganNVUkwudXJsO1xuICAgICAgICAgICAgcmVzdWx0T2JqLm5ld1dpbmRvdyA9IGpzVVJMLm5ld1dpbmRvdztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChhY3Rpb25OYW1lID09PSBcIkphdmFTY3JpcHRcIiB8fCBhY3Rpb25OYW1lID09PSBcIlN1Ym1pdEZvcm1cIikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBwYXJzZURlc3REaWN0aW9uYXJ5IC0gdW5zdXBwb3J0ZWQgYWN0aW9uOiBcIiR7YWN0aW9uTmFtZX1cIi5gKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRlc3REaWN0LmhhcyhcIkRlc3RcIikpIHtcbiAgICAgIGRlc3QgPSBkZXN0RGljdC5nZXQoXCJEZXN0XCIpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKHVybCkpIHtcbiAgICAgIGNvbnN0IGFic29sdXRlVXJsID0gKDAsIF91dGlsLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKHVybCwgZG9jQmFzZVVybCwge1xuICAgICAgICBhZGREZWZhdWx0UHJvdG9jb2w6IHRydWUsXG4gICAgICAgIHRyeUNvbnZlcnRFbmNvZGluZzogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChhYnNvbHV0ZVVybCkge1xuICAgICAgICByZXN1bHRPYmoudXJsID0gYWJzb2x1dGVVcmwuaHJlZjtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0T2JqLnVuc2FmZVVybCA9IHVybDtcbiAgICB9XG5cbiAgICBpZiAoZGVzdCkge1xuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGRlc3QpKSB7XG4gICAgICAgIGRlc3QgPSBkZXN0Lm5hbWU7XG4gICAgICB9XG5cbiAgICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKGRlc3QpIHx8IEFycmF5LmlzQXJyYXkoZGVzdCkpIHtcbiAgICAgICAgcmVzdWx0T2JqLmRlc3QgPSBkZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG5cbmV4cG9ydHMuQ2F0YWxvZyA9IENhdGFsb2c7XG5cbi8qKiovIH0pLFxuLyogNjUgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuTnVtYmVyVHJlZSA9IGV4cG9ydHMuTmFtZVRyZWUgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbmNsYXNzIE5hbWVPck51bWJlclRyZWUge1xuICBjb25zdHJ1Y3Rvcihyb290LCB4cmVmLCB0eXBlKSB7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IE5hbWVPck51bWJlclRyZWUpIHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDYW5ub3QgaW5pdGlhbGl6ZSBOYW1lT3JOdW1iZXJUcmVlLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgdGhpcy5fdHlwZSA9IHR5cGU7XG4gIH1cblxuICBnZXRBbGwoKSB7XG4gICAgY29uc3QgbWFwID0gbmV3IE1hcCgpO1xuXG4gICAgaWYgKCF0aGlzLnJvb3QpIHtcbiAgICAgIHJldHVybiBtYXA7XG4gICAgfVxuXG4gICAgY29uc3QgeHJlZiA9IHRoaXMueHJlZjtcbiAgICBjb25zdCBwcm9jZXNzZWQgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0KCk7XG4gICAgcHJvY2Vzc2VkLnB1dCh0aGlzLnJvb3QpO1xuICAgIGNvbnN0IHF1ZXVlID0gW3RoaXMucm9vdF07XG5cbiAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgb2JqID0geHJlZi5mZXRjaElmUmVmKHF1ZXVlLnNoaWZ0KCkpO1xuXG4gICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChvYmouaGFzKFwiS2lkc1wiKSkge1xuICAgICAgICBjb25zdCBraWRzID0gb2JqLmdldChcIktpZHNcIik7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0ga2lkcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgY29uc3Qga2lkID0ga2lkc1tpXTtcblxuICAgICAgICAgIGlmIChwcm9jZXNzZWQuaGFzKGtpZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgRHVwbGljYXRlIGVudHJ5IGluIFwiJHt0aGlzLl90eXBlfVwiIHRyZWUuYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcXVldWUucHVzaChraWQpO1xuICAgICAgICAgIHByb2Nlc3NlZC5wdXQoa2lkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlbnRyaWVzID0gb2JqLmdldCh0aGlzLl90eXBlKTtcblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGVudHJpZXMpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBlbnRyaWVzLmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHtcbiAgICAgICAgbWFwLnNldCh4cmVmLmZldGNoSWZSZWYoZW50cmllc1tpXSksIHhyZWYuZmV0Y2hJZlJlZihlbnRyaWVzW2kgKyAxXSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICBnZXQoa2V5KSB7XG4gICAgaWYgKCF0aGlzLnJvb3QpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHhyZWYgPSB0aGlzLnhyZWY7XG4gICAgbGV0IGtpZHNPckVudHJpZXMgPSB4cmVmLmZldGNoSWZSZWYodGhpcy5yb290KTtcbiAgICBsZXQgbG9vcENvdW50ID0gMDtcbiAgICBjb25zdCBNQVhfTEVWRUxTID0gMTA7XG5cbiAgICB3aGlsZSAoa2lkc09yRW50cmllcy5oYXMoXCJLaWRzXCIpKSB7XG4gICAgICBpZiAoKytsb29wQ291bnQgPiBNQVhfTEVWRUxTKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgU2VhcmNoIGRlcHRoIGxpbWl0IHJlYWNoZWQgZm9yIFwiJHt0aGlzLl90eXBlfVwiIHRyZWUuYCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBraWRzID0ga2lkc09yRW50cmllcy5nZXQoXCJLaWRzXCIpO1xuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoa2lkcykpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGxldCBsID0gMCxcbiAgICAgICAgICByID0ga2lkcy5sZW5ndGggLSAxO1xuXG4gICAgICB3aGlsZSAobCA8PSByKSB7XG4gICAgICAgIGNvbnN0IG0gPSBsICsgciA+PiAxO1xuICAgICAgICBjb25zdCBraWQgPSB4cmVmLmZldGNoSWZSZWYoa2lkc1ttXSk7XG4gICAgICAgIGNvbnN0IGxpbWl0cyA9IGtpZC5nZXQoXCJMaW1pdHNcIik7XG5cbiAgICAgICAgaWYgKGtleSA8IHhyZWYuZmV0Y2hJZlJlZihsaW1pdHNbMF0pKSB7XG4gICAgICAgICAgciA9IG0gLSAxO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA+IHhyZWYuZmV0Y2hJZlJlZihsaW1pdHNbMV0pKSB7XG4gICAgICAgICAgbCA9IG0gKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGtpZHNPckVudHJpZXMgPSB4cmVmLmZldGNoSWZSZWYoa2lkc1ttXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGwgPiByKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVudHJpZXMgPSBraWRzT3JFbnRyaWVzLmdldCh0aGlzLl90eXBlKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGVudHJpZXMpKSB7XG4gICAgICBsZXQgbCA9IDAsXG4gICAgICAgICAgciA9IGVudHJpZXMubGVuZ3RoIC0gMjtcblxuICAgICAgd2hpbGUgKGwgPD0gcikge1xuICAgICAgICBjb25zdCB0bXAgPSBsICsgciA+PiAxLFxuICAgICAgICAgICAgICBtID0gdG1wICsgKHRtcCAmIDEpO1xuICAgICAgICBjb25zdCBjdXJyZW50S2V5ID0geHJlZi5mZXRjaElmUmVmKGVudHJpZXNbbV0pO1xuXG4gICAgICAgIGlmIChrZXkgPCBjdXJyZW50S2V5KSB7XG4gICAgICAgICAgciA9IG0gLSAyO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA+IGN1cnJlbnRLZXkpIHtcbiAgICAgICAgICBsID0gbSArIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHhyZWYuZmV0Y2hJZlJlZihlbnRyaWVzW20gKyAxXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIE5hbWVUcmVlIGV4dGVuZHMgTmFtZU9yTnVtYmVyVHJlZSB7XG4gIGNvbnN0cnVjdG9yKHJvb3QsIHhyZWYpIHtcbiAgICBzdXBlcihyb290LCB4cmVmLCBcIk5hbWVzXCIpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5OYW1lVHJlZSA9IE5hbWVUcmVlO1xuXG5jbGFzcyBOdW1iZXJUcmVlIGV4dGVuZHMgTmFtZU9yTnVtYmVyVHJlZSB7XG4gIGNvbnN0cnVjdG9yKHJvb3QsIHhyZWYpIHtcbiAgICBzdXBlcihyb290LCB4cmVmLCBcIk51bXNcIik7XG4gIH1cblxufVxuXG5leHBvcnRzLk51bWJlclRyZWUgPSBOdW1iZXJUcmVlO1xuXG4vKioqLyB9KSxcbi8qIDY2ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLkZpbGVTcGVjID0gdm9pZCAwO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5mdW5jdGlvbiBwaWNrUGxhdGZvcm1JdGVtKGRpY3QpIHtcbiAgaWYgKGRpY3QuaGFzKFwiVUZcIikpIHtcbiAgICByZXR1cm4gZGljdC5nZXQoXCJVRlwiKTtcbiAgfSBlbHNlIGlmIChkaWN0LmhhcyhcIkZcIikpIHtcbiAgICByZXR1cm4gZGljdC5nZXQoXCJGXCIpO1xuICB9IGVsc2UgaWYgKGRpY3QuaGFzKFwiVW5peFwiKSkge1xuICAgIHJldHVybiBkaWN0LmdldChcIlVuaXhcIik7XG4gIH0gZWxzZSBpZiAoZGljdC5oYXMoXCJNYWNcIikpIHtcbiAgICByZXR1cm4gZGljdC5nZXQoXCJNYWNcIik7XG4gIH0gZWxzZSBpZiAoZGljdC5oYXMoXCJET1NcIikpIHtcbiAgICByZXR1cm4gZGljdC5nZXQoXCJET1NcIik7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuY2xhc3MgRmlsZVNwZWMge1xuICBjb25zdHJ1Y3Rvcihyb290LCB4cmVmKSB7XG4gICAgaWYgKCFyb290IHx8ICEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShyb290KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIGlmIChyb290LmhhcyhcIkZTXCIpKSB7XG4gICAgICB0aGlzLmZzID0gcm9vdC5nZXQoXCJGU1wiKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gcm9vdC5oYXMoXCJEZXNjXCIpID8gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShyb290LmdldChcIkRlc2NcIikpIDogXCJcIjtcblxuICAgIGlmIChyb290LmhhcyhcIlJGXCIpKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJSZWxhdGVkIGZpbGUgc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxuXG4gICAgdGhpcy5jb250ZW50QXZhaWxhYmxlID0gdHJ1ZTtcblxuICAgIGlmICghcm9vdC5oYXMoXCJFRlwiKSkge1xuICAgICAgdGhpcy5jb250ZW50QXZhaWxhYmxlID0gZmFsc2U7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJOb24tZW1iZWRkZWQgZmlsZSBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZmlsZW5hbWUoKSB7XG4gICAgaWYgKCF0aGlzLl9maWxlbmFtZSAmJiB0aGlzLnJvb3QpIHtcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gcGlja1BsYXRmb3JtSXRlbSh0aGlzLnJvb3QpIHx8IFwidW5uYW1lZFwiO1xuICAgICAgdGhpcy5fZmlsZW5hbWUgPSAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGZpbGVuYW1lKS5yZXBsYWNlKC9cXFxcXFxcXC9nLCBcIlxcXFxcIikucmVwbGFjZSgvXFxcXFxcLy9nLCBcIi9cIikucmVwbGFjZSgvXFxcXC9nLCBcIi9cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVuYW1lO1xuICB9XG5cbiAgZ2V0IGNvbnRlbnQoKSB7XG4gICAgaWYgKCF0aGlzLmNvbnRlbnRBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb250ZW50UmVmICYmIHRoaXMucm9vdCkge1xuICAgICAgdGhpcy5jb250ZW50UmVmID0gcGlja1BsYXRmb3JtSXRlbSh0aGlzLnJvb3QuZ2V0KFwiRUZcIikpO1xuICAgIH1cblxuICAgIGxldCBjb250ZW50ID0gbnVsbDtcblxuICAgIGlmICh0aGlzLmNvbnRlbnRSZWYpIHtcbiAgICAgIGNvbnN0IGZpbGVPYmogPSB0aGlzLnhyZWYuZmV0Y2hJZlJlZih0aGlzLmNvbnRlbnRSZWYpO1xuXG4gICAgICBpZiAoZmlsZU9iaiAmJiAoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKGZpbGVPYmopKSB7XG4gICAgICAgIGNvbnRlbnQgPSBmaWxlT2JqLmdldEJ5dGVzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJFbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb24gcG9pbnRzIHRvIG5vbi1leGlzdGluZy9pbnZhbGlkIGNvbnRlbnRcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIkVtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGEgY29udGVudFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGdldCBzZXJpYWxpemFibGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbGVuYW1lOiB0aGlzLmZpbGVuYW1lLFxuICAgICAgY29udGVudDogdGhpcy5jb250ZW50XG4gICAgfTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuRmlsZVNwZWMgPSBGaWxlU3BlYztcblxuLyoqKi8gfSksXG4vKiA2NyAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5NZXRhZGF0YVBhcnNlciA9IHZvaWQgMDtcblxudmFyIF94bWxfcGFyc2VyID0gX193X3BkZmpzX3JlcXVpcmVfXyg2OCk7XG5cbmNsYXNzIE1ldGFkYXRhUGFyc2VyIHtcbiAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgIGRhdGEgPSB0aGlzLl9yZXBhaXIoZGF0YSk7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IF94bWxfcGFyc2VyLlNpbXBsZVhNTFBhcnNlcih7XG4gICAgICBsb3dlckNhc2VOYW1lOiB0cnVlXG4gICAgfSk7XG4gICAgY29uc3QgeG1sRG9jdW1lbnQgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKGRhdGEpO1xuICAgIHRoaXMuX21ldGFkYXRhTWFwID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuXG4gICAgaWYgKHhtbERvY3VtZW50KSB7XG4gICAgICB0aGlzLl9wYXJzZSh4bWxEb2N1bWVudCk7XG4gICAgfVxuICB9XG5cbiAgX3JlcGFpcihkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEucmVwbGFjZSgvXltePF0rLywgXCJcIikucmVwbGFjZSgvPlxcXFwzNzZcXFxcMzc3KFtePF0rKS9nLCBmdW5jdGlvbiAoYWxsLCBjb2Rlcykge1xuICAgICAgY29uc3QgYnl0ZXMgPSBjb2Rlcy5yZXBsYWNlKC9cXFxcKFswLTNdKShbMC03XSkoWzAtN10pL2csIGZ1bmN0aW9uIChjb2RlLCBkMSwgZDIsIGQzKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGQxICogNjQgKyBkMiAqIDggKyBkMyAqIDEpO1xuICAgICAgfSkucmVwbGFjZSgvJihhbXB8YXBvc3xndHxsdHxxdW90KTsvZywgZnVuY3Rpb24gKHN0ciwgbmFtZSkge1xuICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgICBjYXNlIFwiYW1wXCI6XG4gICAgICAgICAgICByZXR1cm4gXCImXCI7XG5cbiAgICAgICAgICBjYXNlIFwiYXBvc1wiOlxuICAgICAgICAgICAgcmV0dXJuIFwiJ1wiO1xuXG4gICAgICAgICAgY2FzZSBcImd0XCI6XG4gICAgICAgICAgICByZXR1cm4gXCI+XCI7XG5cbiAgICAgICAgICBjYXNlIFwibHRcIjpcbiAgICAgICAgICAgIHJldHVybiBcIjxcIjtcblxuICAgICAgICAgIGNhc2UgXCJxdW90XCI6XG4gICAgICAgICAgICByZXR1cm4gJ1wiJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgX3JlcGFpcjogJHtuYW1lfSBpc24ndCBkZWZpbmVkLmApO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjaGFyQnVmID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGJ5dGVzLmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHtcbiAgICAgICAgY29uc3QgY29kZSA9IGJ5dGVzLmNoYXJDb2RlQXQoaSkgKiAyNTYgKyBieXRlcy5jaGFyQ29kZUF0KGkgKyAxKTtcblxuICAgICAgICBpZiAoY29kZSA+PSAzMiAmJiBjb2RlIDwgMTI3ICYmIGNvZGUgIT09IDYwICYmIGNvZGUgIT09IDYyICYmIGNvZGUgIT09IDM4KSB7XG4gICAgICAgICAgY2hhckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoYXJCdWYucHVzaChcIiYjeFwiICsgKDB4MTAwMDAgKyBjb2RlKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpICsgXCI7XCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBcIj5cIiArIGNoYXJCdWYuam9pbihcIlwiKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9nZXRTZXF1ZW5jZShlbnRyeSkge1xuICAgIGNvbnN0IG5hbWUgPSBlbnRyeS5ub2RlTmFtZTtcblxuICAgIGlmIChuYW1lICE9PSBcInJkZjpiYWdcIiAmJiBuYW1lICE9PSBcInJkZjpzZXFcIiAmJiBuYW1lICE9PSBcInJkZjphbHRcIikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudHJ5LmNoaWxkTm9kZXMuZmlsdGVyKG5vZGUgPT4gbm9kZS5ub2RlTmFtZSA9PT0gXCJyZGY6bGlcIik7XG4gIH1cblxuICBfcGFyc2VBcnJheShlbnRyeSkge1xuICAgIGlmICghZW50cnkuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgW3NlcU5vZGVdID0gZW50cnkuY2hpbGROb2RlcztcbiAgICBjb25zdCBzZXF1ZW5jZSA9IHRoaXMuX2dldFNlcXVlbmNlKHNlcU5vZGUpIHx8IFtdO1xuXG4gICAgdGhpcy5fbWV0YWRhdGFNYXAuc2V0KGVudHJ5Lm5vZGVOYW1lLCBzZXF1ZW5jZS5tYXAobm9kZSA9PiBub2RlLnRleHRDb250ZW50LnRyaW0oKSkpO1xuICB9XG5cbiAgX3BhcnNlKHhtbERvY3VtZW50KSB7XG4gICAgbGV0IHJkZiA9IHhtbERvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICAgIGlmIChyZGYubm9kZU5hbWUgIT09IFwicmRmOnJkZlwiKSB7XG4gICAgICByZGYgPSByZGYuZmlyc3RDaGlsZDtcblxuICAgICAgd2hpbGUgKHJkZiAmJiByZGYubm9kZU5hbWUgIT09IFwicmRmOnJkZlwiKSB7XG4gICAgICAgIHJkZiA9IHJkZi5uZXh0U2libGluZztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXJkZiB8fCByZGYubm9kZU5hbWUgIT09IFwicmRmOnJkZlwiIHx8ICFyZGYuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBkZXNjIG9mIHJkZi5jaGlsZE5vZGVzKSB7XG4gICAgICBpZiAoZGVzYy5ub2RlTmFtZSAhPT0gXCJyZGY6ZGVzY3JpcHRpb25cIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBkZXNjLmNoaWxkTm9kZXMpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGVudHJ5Lm5vZGVOYW1lO1xuXG4gICAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAgIGNhc2UgXCIjdGV4dFwiOlxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICBjYXNlIFwiZGM6Y3JlYXRvclwiOlxuICAgICAgICAgIGNhc2UgXCJkYzpzdWJqZWN0XCI6XG4gICAgICAgICAgICB0aGlzLl9wYXJzZUFycmF5KGVudHJ5KTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tZXRhZGF0YU1hcC5zZXQobmFtZSwgZW50cnkudGV4dENvbnRlbnQudHJpbSgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgc2VyaWFsaXphYmxlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZWREYXRhOiB0aGlzLl9tZXRhZGF0YU1hcCxcbiAgICAgIHJhd0RhdGE6IHRoaXMuX2RhdGFcbiAgICB9O1xuICB9XG5cbn1cblxuZXhwb3J0cy5NZXRhZGF0YVBhcnNlciA9IE1ldGFkYXRhUGFyc2VyO1xuXG4vKioqLyB9KSxcbi8qIDY4ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlhNTFBhcnNlckVycm9yQ29kZSA9IGV4cG9ydHMuWE1MUGFyc2VyQmFzZSA9IGV4cG9ydHMuU2ltcGxlWE1MUGFyc2VyID0gZXhwb3J0cy5TaW1wbGVET01Ob2RlID0gdm9pZCAwO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG5jb25zdCBYTUxQYXJzZXJFcnJvckNvZGUgPSB7XG4gIE5vRXJyb3I6IDAsXG4gIEVuZE9mRG9jdW1lbnQ6IC0xLFxuICBVbnRlcm1pbmF0ZWRDZGF0OiAtMixcbiAgVW50ZXJtaW5hdGVkWG1sRGVjbGFyYXRpb246IC0zLFxuICBVbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb246IC00LFxuICBVbnRlcm1pbmF0ZWRDb21tZW50OiAtNSxcbiAgTWFsZm9ybWVkRWxlbWVudDogLTYsXG4gIE91dE9mTWVtb3J5OiAtNyxcbiAgVW50ZXJtaW5hdGVkQXR0cmlidXRlVmFsdWU6IC04LFxuICBVbnRlcm1pbmF0ZWRFbGVtZW50OiAtOSxcbiAgRWxlbWVudE5ldmVyQmVndW46IC0xMFxufTtcbmV4cG9ydHMuWE1MUGFyc2VyRXJyb3JDb2RlID0gWE1MUGFyc2VyRXJyb3JDb2RlO1xuXG5mdW5jdGlvbiBpc1doaXRlc3BhY2UocywgaW5kZXgpIHtcbiAgY29uc3QgY2ggPSBzW2luZGV4XTtcbiAgcmV0dXJuIGNoID09PSBcIiBcIiB8fCBjaCA9PT0gXCJcXG5cIiB8fCBjaCA9PT0gXCJcXHJcIiB8fCBjaCA9PT0gXCJcXHRcIjtcbn1cblxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlU3RyaW5nKHMpIHtcbiAgZm9yIChsZXQgaSA9IDAsIGlpID0gcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgaWYgKCFpc1doaXRlc3BhY2UocywgaSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuY2xhc3MgWE1MUGFyc2VyQmFzZSB7XG4gIF9yZXNvbHZlRW50aXRpZXMocykge1xuICAgIHJldHVybiBzLnJlcGxhY2UoLyYoW147XSspOy9nLCAoYWxsLCBlbnRpdHkpID0+IHtcbiAgICAgIGlmIChlbnRpdHkuc3Vic3RyaW5nKDAsIDIpID09PSBcIiN4XCIpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KGVudGl0eS5zdWJzdHJpbmcoMiksIDE2KSk7XG4gICAgICB9IGVsc2UgaWYgKGVudGl0eS5zdWJzdHJpbmcoMCwgMSkgPT09IFwiI1wiKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludChwYXJzZUludChlbnRpdHkuc3Vic3RyaW5nKDEpLCAxMCkpO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGVudGl0eSkge1xuICAgICAgICBjYXNlIFwibHRcIjpcbiAgICAgICAgICByZXR1cm4gXCI8XCI7XG5cbiAgICAgICAgY2FzZSBcImd0XCI6XG4gICAgICAgICAgcmV0dXJuIFwiPlwiO1xuXG4gICAgICAgIGNhc2UgXCJhbXBcIjpcbiAgICAgICAgICByZXR1cm4gXCImXCI7XG5cbiAgICAgICAgY2FzZSBcInF1b3RcIjpcbiAgICAgICAgICByZXR1cm4gJ1wiJztcblxuICAgICAgICBjYXNlIFwiYXBvc1wiOlxuICAgICAgICAgIHJldHVybiBcIidcIjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMub25SZXNvbHZlRW50aXR5KGVudGl0eSk7XG4gICAgfSk7XG4gIH1cblxuICBfcGFyc2VDb250ZW50KHMsIHN0YXJ0KSB7XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IFtdO1xuICAgIGxldCBwb3MgPSBzdGFydDtcblxuICAgIGZ1bmN0aW9uIHNraXBXcygpIHtcbiAgICAgIHdoaWxlIChwb3MgPCBzLmxlbmd0aCAmJiBpc1doaXRlc3BhY2UocywgcG9zKSkge1xuICAgICAgICArK3BvcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3aGlsZSAocG9zIDwgcy5sZW5ndGggJiYgIWlzV2hpdGVzcGFjZShzLCBwb3MpICYmIHNbcG9zXSAhPT0gXCI+XCIgJiYgc1twb3NdICE9PSBcIi9cIikge1xuICAgICAgKytwb3M7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZSA9IHMuc3Vic3RyaW5nKHN0YXJ0LCBwb3MpO1xuICAgIHNraXBXcygpO1xuXG4gICAgd2hpbGUgKHBvcyA8IHMubGVuZ3RoICYmIHNbcG9zXSAhPT0gXCI+XCIgJiYgc1twb3NdICE9PSBcIi9cIiAmJiBzW3Bvc10gIT09IFwiP1wiKSB7XG4gICAgICBza2lwV3MoKTtcbiAgICAgIGxldCBhdHRyTmFtZSA9IFwiXCIsXG4gICAgICAgICAgYXR0clZhbHVlID0gXCJcIjtcblxuICAgICAgd2hpbGUgKHBvcyA8IHMubGVuZ3RoICYmICFpc1doaXRlc3BhY2UocywgcG9zKSAmJiBzW3Bvc10gIT09IFwiPVwiKSB7XG4gICAgICAgIGF0dHJOYW1lICs9IHNbcG9zXTtcbiAgICAgICAgKytwb3M7XG4gICAgICB9XG5cbiAgICAgIHNraXBXcygpO1xuXG4gICAgICBpZiAoc1twb3NdICE9PSBcIj1cIikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgKytwb3M7XG4gICAgICBza2lwV3MoKTtcbiAgICAgIGNvbnN0IGF0dHJFbmRDaGFyID0gc1twb3NdO1xuXG4gICAgICBpZiAoYXR0ckVuZENoYXIgIT09ICdcIicgJiYgYXR0ckVuZENoYXIgIT09IFwiJ1wiKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhdHRyRW5kSW5kZXggPSBzLmluZGV4T2YoYXR0ckVuZENoYXIsICsrcG9zKTtcblxuICAgICAgaWYgKGF0dHJFbmRJbmRleCA8IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGF0dHJWYWx1ZSA9IHMuc3Vic3RyaW5nKHBvcywgYXR0ckVuZEluZGV4KTtcbiAgICAgIGF0dHJpYnV0ZXMucHVzaCh7XG4gICAgICAgIG5hbWU6IGF0dHJOYW1lLFxuICAgICAgICB2YWx1ZTogdGhpcy5fcmVzb2x2ZUVudGl0aWVzKGF0dHJWYWx1ZSlcbiAgICAgIH0pO1xuICAgICAgcG9zID0gYXR0ckVuZEluZGV4ICsgMTtcbiAgICAgIHNraXBXcygpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBuYW1lLFxuICAgICAgYXR0cmlidXRlcyxcbiAgICAgIHBhcnNlZDogcG9zIC0gc3RhcnRcbiAgICB9O1xuICB9XG5cbiAgX3BhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKHMsIHN0YXJ0KSB7XG4gICAgbGV0IHBvcyA9IHN0YXJ0O1xuXG4gICAgZnVuY3Rpb24gc2tpcFdzKCkge1xuICAgICAgd2hpbGUgKHBvcyA8IHMubGVuZ3RoICYmIGlzV2hpdGVzcGFjZShzLCBwb3MpKSB7XG4gICAgICAgICsrcG9zO1xuICAgICAgfVxuICAgIH1cblxuICAgIHdoaWxlIChwb3MgPCBzLmxlbmd0aCAmJiAhaXNXaGl0ZXNwYWNlKHMsIHBvcykgJiYgc1twb3NdICE9PSBcIj5cIiAmJiBzW3Bvc10gIT09IFwiP1wiICYmIHNbcG9zXSAhPT0gXCIvXCIpIHtcbiAgICAgICsrcG9zO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWUgPSBzLnN1YnN0cmluZyhzdGFydCwgcG9zKTtcbiAgICBza2lwV3MoKTtcbiAgICBjb25zdCBhdHRyU3RhcnQgPSBwb3M7XG5cbiAgICB3aGlsZSAocG9zIDwgcy5sZW5ndGggJiYgKHNbcG9zXSAhPT0gXCI/XCIgfHwgc1twb3MgKyAxXSAhPT0gXCI+XCIpKSB7XG4gICAgICArK3BvcztcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IHMuc3Vic3RyaW5nKGF0dHJTdGFydCwgcG9zKTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgcGFyc2VkOiBwb3MgLSBzdGFydFxuICAgIH07XG4gIH1cblxuICBwYXJzZVhtbChzKSB7XG4gICAgbGV0IGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBzLmxlbmd0aCkge1xuICAgICAgY29uc3QgY2ggPSBzW2ldO1xuICAgICAgbGV0IGogPSBpO1xuXG4gICAgICBpZiAoY2ggPT09IFwiPFwiKSB7XG4gICAgICAgICsrajtcbiAgICAgICAgY29uc3QgY2gyID0gc1tqXTtcbiAgICAgICAgbGV0IHE7XG5cbiAgICAgICAgc3dpdGNoIChjaDIpIHtcbiAgICAgICAgICBjYXNlIFwiL1wiOlxuICAgICAgICAgICAgKytqO1xuICAgICAgICAgICAgcSA9IHMuaW5kZXhPZihcIj5cIiwgaik7XG5cbiAgICAgICAgICAgIGlmIChxIDwgMCkge1xuICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoWE1MUGFyc2VyRXJyb3JDb2RlLlVudGVybWluYXRlZEVsZW1lbnQpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub25FbmRFbGVtZW50KHMuc3Vic3RyaW5nKGosIHEpKTtcbiAgICAgICAgICAgIGogPSBxICsgMTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIj9cIjpcbiAgICAgICAgICAgICsrajtcblxuICAgICAgICAgICAgY29uc3QgcGkgPSB0aGlzLl9wYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihzLCBqKTtcblxuICAgICAgICAgICAgaWYgKHMuc3Vic3RyaW5nKGogKyBwaS5wYXJzZWQsIGogKyBwaS5wYXJzZWQgKyAyKSAhPT0gXCI/PlwiKSB7XG4gICAgICAgICAgICAgIHRoaXMub25FcnJvcihYTUxQYXJzZXJFcnJvckNvZGUuVW50ZXJtaW5hdGVkWG1sRGVjbGFyYXRpb24pO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub25QaShwaS5uYW1lLCBwaS52YWx1ZSk7XG4gICAgICAgICAgICBqICs9IHBpLnBhcnNlZCArIDI7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCIhXCI6XG4gICAgICAgICAgICBpZiAocy5zdWJzdHJpbmcoaiArIDEsIGogKyAzKSA9PT0gXCItLVwiKSB7XG4gICAgICAgICAgICAgIHEgPSBzLmluZGV4T2YoXCItLT5cIiwgaiArIDMpO1xuXG4gICAgICAgICAgICAgIGlmIChxIDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMub25FcnJvcihYTUxQYXJzZXJFcnJvckNvZGUuVW50ZXJtaW5hdGVkQ29tbWVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5vbkNvbW1lbnQocy5zdWJzdHJpbmcoaiArIDMsIHEpKTtcbiAgICAgICAgICAgICAgaiA9IHEgKyAzO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzLnN1YnN0cmluZyhqICsgMSwgaiArIDgpID09PSBcIltDREFUQVtcIikge1xuICAgICAgICAgICAgICBxID0gcy5pbmRleE9mKFwiXV0+XCIsIGogKyA4KTtcblxuICAgICAgICAgICAgICBpZiAocSA8IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoWE1MUGFyc2VyRXJyb3JDb2RlLlVudGVybWluYXRlZENkYXQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMub25DZGF0YShzLnN1YnN0cmluZyhqICsgOCwgcSkpO1xuICAgICAgICAgICAgICBqID0gcSArIDM7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHMuc3Vic3RyaW5nKGogKyAxLCBqICsgOCkgPT09IFwiRE9DVFlQRVwiKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHEyID0gcy5pbmRleE9mKFwiW1wiLCBqICsgOCk7XG4gICAgICAgICAgICAgIGxldCBjb21wbGV4RG9jdHlwZSA9IGZhbHNlO1xuICAgICAgICAgICAgICBxID0gcy5pbmRleE9mKFwiPlwiLCBqICsgOCk7XG5cbiAgICAgICAgICAgICAgaWYgKHEgPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5VbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb24pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxMiA+IDAgJiYgcSA+IHEyKSB7XG4gICAgICAgICAgICAgICAgcSA9IHMuaW5kZXhPZihcIl0+XCIsIGogKyA4KTtcblxuICAgICAgICAgICAgICAgIGlmIChxIDwgMCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5VbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbXBsZXhEb2N0eXBlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGRvY3R5cGVDb250ZW50ID0gcy5zdWJzdHJpbmcoaiArIDgsIHEgKyAoY29tcGxleERvY3R5cGUgPyAxIDogMCkpO1xuICAgICAgICAgICAgICB0aGlzLm9uRG9jdHlwZShkb2N0eXBlQ29udGVudCk7XG4gICAgICAgICAgICAgIGogPSBxICsgKGNvbXBsZXhEb2N0eXBlID8gMiA6IDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5NYWxmb3JtZWRFbGVtZW50KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5fcGFyc2VDb250ZW50KHMsIGopO1xuXG4gICAgICAgICAgICBpZiAoY29udGVudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoWE1MUGFyc2VyRXJyb3JDb2RlLk1hbGZvcm1lZEVsZW1lbnQpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBpc0Nsb3NlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAocy5zdWJzdHJpbmcoaiArIGNvbnRlbnQucGFyc2VkLCBqICsgY29udGVudC5wYXJzZWQgKyAyKSA9PT0gXCIvPlwiKSB7XG4gICAgICAgICAgICAgIGlzQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocy5zdWJzdHJpbmcoaiArIGNvbnRlbnQucGFyc2VkLCBqICsgY29udGVudC5wYXJzZWQgKyAxKSAhPT0gXCI+XCIpIHtcbiAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5VbnRlcm1pbmF0ZWRFbGVtZW50KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm9uQmVnaW5FbGVtZW50KGNvbnRlbnQubmFtZSwgY29udGVudC5hdHRyaWJ1dGVzLCBpc0Nsb3NlZCk7XG4gICAgICAgICAgICBqICs9IGNvbnRlbnQucGFyc2VkICsgKGlzQ2xvc2VkID8gMiA6IDEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdoaWxlIChqIDwgcy5sZW5ndGggJiYgc1tqXSAhPT0gXCI8XCIpIHtcbiAgICAgICAgICBqKys7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZXh0ID0gcy5zdWJzdHJpbmcoaSwgaik7XG4gICAgICAgIHRoaXMub25UZXh0KHRoaXMuX3Jlc29sdmVFbnRpdGllcyh0ZXh0KSk7XG4gICAgICB9XG5cbiAgICAgIGkgPSBqO1xuICAgIH1cbiAgfVxuXG4gIG9uUmVzb2x2ZUVudGl0eShuYW1lKSB7XG4gICAgcmV0dXJuIGAmJHtuYW1lfTtgO1xuICB9XG5cbiAgb25QaShuYW1lLCB2YWx1ZSkge31cblxuICBvbkNvbW1lbnQodGV4dCkge31cblxuICBvbkNkYXRhKHRleHQpIHt9XG5cbiAgb25Eb2N0eXBlKGRvY3R5cGVDb250ZW50KSB7fVxuXG4gIG9uVGV4dCh0ZXh0KSB7fVxuXG4gIG9uQmVnaW5FbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMsIGlzRW1wdHkpIHt9XG5cbiAgb25FbmRFbGVtZW50KG5hbWUpIHt9XG5cbiAgb25FcnJvcihjb2RlKSB7fVxuXG59XG5cbmV4cG9ydHMuWE1MUGFyc2VyQmFzZSA9IFhNTFBhcnNlckJhc2U7XG5cbmNsYXNzIFNpbXBsZURPTU5vZGUge1xuICBjb25zdHJ1Y3Rvcihub2RlTmFtZSwgbm9kZVZhbHVlKSB7XG4gICAgdGhpcy5ub2RlTmFtZSA9IG5vZGVOYW1lO1xuICAgIHRoaXMubm9kZVZhbHVlID0gbm9kZVZhbHVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInBhcmVudE5vZGVcIiwge1xuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGZpcnN0Q2hpbGQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGROb2RlcyAmJiB0aGlzLmNoaWxkTm9kZXNbMF07XG4gIH1cblxuICBnZXQgbmV4dFNpYmxpbmcoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMucGFyZW50Tm9kZS5jaGlsZE5vZGVzO1xuXG4gICAgaWYgKCFjaGlsZE5vZGVzKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gY2hpbGROb2Rlcy5pbmRleE9mKHRoaXMpO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGROb2Rlc1tpbmRleCArIDFdO1xuICB9XG5cbiAgZ2V0IHRleHRDb250ZW50KCkge1xuICAgIGlmICghdGhpcy5jaGlsZE5vZGVzKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlVmFsdWUgfHwgXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzLm1hcChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIHJldHVybiBjaGlsZC50ZXh0Q29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9XG5cbiAgaGFzQ2hpbGROb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzICYmIHRoaXMuY2hpbGROb2Rlcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgc2VhcmNoTm9kZShwYXRocywgcG9zKSB7XG4gICAgaWYgKHBvcyA+PSBwYXRocy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBvbmVudCA9IHBhdGhzW3Bvc107XG4gICAgY29uc3Qgc3RhY2sgPSBbXTtcbiAgICBsZXQgbm9kZSA9IHRoaXM7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGNvbXBvbmVudC5uYW1lID09PSBub2RlLm5vZGVOYW1lKSB7XG4gICAgICAgIGlmIChjb21wb25lbnQucG9zID09PSAwKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gbm9kZS5zZWFyY2hOb2RlKHBhdGhzLCBwb3MgKyAxKTtcblxuICAgICAgICAgIGlmIChyZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IFtwYXJlbnRdID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgbGV0IHNpYmxpbmdQb3MgPSAwO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBwYXJlbnQuY2hpbGROb2Rlcykge1xuICAgICAgICAgICAgaWYgKGNvbXBvbmVudC5uYW1lID09PSBjaGlsZC5ub2RlTmFtZSkge1xuICAgICAgICAgICAgICBpZiAoc2libGluZ1BvcyA9PT0gY29tcG9uZW50LnBvcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZC5zZWFyY2hOb2RlKHBhdGhzLCBwb3MgKyAxKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHNpYmxpbmdQb3MrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbm9kZS5zZWFyY2hOb2RlKHBhdGhzLCBwb3MgKyAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5jaGlsZE5vZGVzICYmIG5vZGUuY2hpbGROb2Rlcy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgc3RhY2sucHVzaChbbm9kZSwgMF0pO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZE5vZGVzWzBdO1xuICAgICAgfSBlbHNlIGlmIChzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgY29uc3QgW3BhcmVudCwgY3VycmVudFBvc10gPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBjb25zdCBuZXdQb3MgPSBjdXJyZW50UG9zICsgMTtcblxuICAgICAgICAgIGlmIChuZXdQb3MgPCBwYXJlbnQuY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goW3BhcmVudCwgbmV3UG9zXSk7XG4gICAgICAgICAgICBub2RlID0gcGFyZW50LmNoaWxkTm9kZXNbbmV3UG9zXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGR1bXAoYnVmZmVyKSB7XG4gICAgaWYgKHRoaXMubm9kZU5hbWUgPT09IFwiI3RleHRcIikge1xuICAgICAgYnVmZmVyLnB1c2goKDAsIF9jb3JlX3V0aWxzLmVuY29kZVRvWG1sU3RyaW5nKSh0aGlzLm5vZGVWYWx1ZSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGJ1ZmZlci5wdXNoKGA8JHt0aGlzLm5vZGVOYW1lfWApO1xuXG4gICAgaWYgKHRoaXMuYXR0cmlidXRlcykge1xuICAgICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgICAgIGJ1ZmZlci5wdXNoKGAgJHthdHRyaWJ1dGUubmFtZX09XCIkeygwLCBfY29yZV91dGlscy5lbmNvZGVUb1htbFN0cmluZykoYXR0cmlidXRlLnZhbHVlKX1cImApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgYnVmZmVyLnB1c2goXCI+XCIpO1xuXG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuY2hpbGROb2Rlcykge1xuICAgICAgICBjaGlsZC5kdW1wKGJ1ZmZlcik7XG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlci5wdXNoKGA8LyR7dGhpcy5ub2RlTmFtZX0+YCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm5vZGVWYWx1ZSkge1xuICAgICAgYnVmZmVyLnB1c2goYD4keygwLCBfY29yZV91dGlscy5lbmNvZGVUb1htbFN0cmluZykodGhpcy5ub2RlVmFsdWUpfTwvJHt0aGlzLm5vZGVOYW1lfT5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmZmVyLnB1c2goXCIvPlwiKTtcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnRzLlNpbXBsZURPTU5vZGUgPSBTaW1wbGVET01Ob2RlO1xuXG5jbGFzcyBTaW1wbGVYTUxQYXJzZXIgZXh0ZW5kcyBYTUxQYXJzZXJCYXNlIHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIGhhc0F0dHJpYnV0ZXMgPSBmYWxzZSxcbiAgICBsb3dlckNhc2VOYW1lID0gZmFsc2VcbiAgfSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fY3VycmVudEZyYWdtZW50ID0gbnVsbDtcbiAgICB0aGlzLl9zdGFjayA9IG51bGw7XG4gICAgdGhpcy5fZXJyb3JDb2RlID0gWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3I7XG4gICAgdGhpcy5faGFzQXR0cmlidXRlcyA9IGhhc0F0dHJpYnV0ZXM7XG4gICAgdGhpcy5fbG93ZXJDYXNlTmFtZSA9IGxvd2VyQ2FzZU5hbWU7XG4gIH1cblxuICBwYXJzZUZyb21TdHJpbmcoZGF0YSkge1xuICAgIHRoaXMuX2N1cnJlbnRGcmFnbWVudCA9IFtdO1xuICAgIHRoaXMuX3N0YWNrID0gW107XG4gICAgdGhpcy5fZXJyb3JDb2RlID0gWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3I7XG4gICAgdGhpcy5wYXJzZVhtbChkYXRhKTtcblxuICAgIGlmICh0aGlzLl9lcnJvckNvZGUgIT09IFhNTFBhcnNlckVycm9yQ29kZS5Ob0Vycm9yKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IFtkb2N1bWVudEVsZW1lbnRdID0gdGhpcy5fY3VycmVudEZyYWdtZW50O1xuXG4gICAgaWYgKCFkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRvY3VtZW50RWxlbWVudFxuICAgIH07XG4gIH1cblxuICBvblRleHQodGV4dCkge1xuICAgIGlmIChpc1doaXRlc3BhY2VTdHJpbmcodGV4dCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlID0gbmV3IFNpbXBsZURPTU5vZGUoXCIjdGV4dFwiLCB0ZXh0KTtcblxuICAgIHRoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKG5vZGUpO1xuICB9XG5cbiAgb25DZGF0YSh0ZXh0KSB7XG4gICAgY29uc3Qgbm9kZSA9IG5ldyBTaW1wbGVET01Ob2RlKFwiI3RleHRcIiwgdGV4dCk7XG5cbiAgICB0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaChub2RlKTtcbiAgfVxuXG4gIG9uQmVnaW5FbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMsIGlzRW1wdHkpIHtcbiAgICBpZiAodGhpcy5fbG93ZXJDYXNlTmFtZSkge1xuICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlID0gbmV3IFNpbXBsZURPTU5vZGUobmFtZSk7XG4gICAgbm9kZS5jaGlsZE5vZGVzID0gW107XG5cbiAgICBpZiAodGhpcy5faGFzQXR0cmlidXRlcykge1xuICAgICAgbm9kZS5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcztcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaChub2RlKTtcblxuICAgIGlmIChpc0VtcHR5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhY2sucHVzaCh0aGlzLl9jdXJyZW50RnJhZ21lbnQpO1xuXG4gICAgdGhpcy5fY3VycmVudEZyYWdtZW50ID0gbm9kZS5jaGlsZE5vZGVzO1xuICB9XG5cbiAgb25FbmRFbGVtZW50KG5hbWUpIHtcbiAgICB0aGlzLl9jdXJyZW50RnJhZ21lbnQgPSB0aGlzLl9zdGFjay5wb3AoKSB8fCBbXTtcbiAgICBjb25zdCBsYXN0RWxlbWVudCA9IHRoaXMuX2N1cnJlbnRGcmFnbWVudFt0aGlzLl9jdXJyZW50RnJhZ21lbnQubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAoIWxhc3RFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gbGFzdEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBsYXN0RWxlbWVudC5jaGlsZE5vZGVzW2ldLnBhcmVudE5vZGUgPSBsYXN0RWxlbWVudDtcbiAgICB9XG4gIH1cblxuICBvbkVycm9yKGNvZGUpIHtcbiAgICB0aGlzLl9lcnJvckNvZGUgPSBjb2RlO1xuICB9XG5cbn1cblxuZXhwb3J0cy5TaW1wbGVYTUxQYXJzZXIgPSBTaW1wbGVYTUxQYXJzZXI7XG5cbi8qKiovIH0pLFxuLyogNjkgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuU3RydWN0VHJlZVJvb3QgPSBleHBvcnRzLlN0cnVjdFRyZWVQYWdlID0gdm9pZCAwO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX25hbWVfbnVtYmVyX3RyZWUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDY1KTtcblxuY29uc3QgTUFYX0RFUFRIID0gNDA7XG5jb25zdCBTdHJ1Y3RFbGVtZW50VHlwZSA9IHtcbiAgUEFHRV9DT05URU5UOiBcIlBBR0VfQ09OVEVOVFwiLFxuICBTVFJFQU1fQ09OVEVOVDogXCJTVFJFQU1fQ09OVEVOVFwiLFxuICBPQkpFQ1Q6IFwiT0JKRUNUXCIsXG4gIEVMRU1FTlQ6IFwiRUxFTUVOVFwiXG59O1xuXG5jbGFzcyBTdHJ1Y3RUcmVlUm9vdCB7XG4gIGNvbnN0cnVjdG9yKHJvb3REaWN0KSB7XG4gICAgdGhpcy5kaWN0ID0gcm9vdERpY3Q7XG4gICAgdGhpcy5yb2xlTWFwID0gbmV3IE1hcCgpO1xuICB9XG5cbiAgaW5pdCgpIHtcbiAgICB0aGlzLnJlYWRSb2xlTWFwKCk7XG4gIH1cblxuICByZWFkUm9sZU1hcCgpIHtcbiAgICBjb25zdCByb2xlTWFwRGljdCA9IHRoaXMuZGljdC5nZXQoXCJSb2xlTWFwXCIpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShyb2xlTWFwRGljdCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByb2xlTWFwRGljdC5mb3JFYWNoKChrZXksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHZhbHVlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMucm9sZU1hcC5zZXQoa2V5LCB2YWx1ZS5uYW1lKTtcbiAgICB9KTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuU3RydWN0VHJlZVJvb3QgPSBTdHJ1Y3RUcmVlUm9vdDtcblxuY2xhc3MgU3RydWN0RWxlbWVudE5vZGUge1xuICBjb25zdHJ1Y3Rvcih0cmVlLCBkaWN0KSB7XG4gICAgdGhpcy50cmVlID0gdHJlZTtcbiAgICB0aGlzLmRpY3QgPSBkaWN0O1xuICAgIHRoaXMua2lkcyA9IFtdO1xuICAgIHRoaXMucGFyc2VLaWRzKCk7XG4gIH1cblxuICBnZXQgcm9sZSgpIHtcbiAgICBjb25zdCBuYW1lT2JqID0gdGhpcy5kaWN0LmdldChcIlNcIik7XG4gICAgY29uc3QgbmFtZSA9ICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKG5hbWVPYmopID8gbmFtZU9iai5uYW1lIDogXCJcIjtcbiAgICBjb25zdCB7XG4gICAgICByb290XG4gICAgfSA9IHRoaXMudHJlZTtcblxuICAgIGlmIChyb290LnJvbGVNYXAuaGFzKG5hbWUpKSB7XG4gICAgICByZXR1cm4gcm9vdC5yb2xlTWFwLmdldChuYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuXG4gIHBhcnNlS2lkcygpIHtcbiAgICBsZXQgcGFnZU9iaklkID0gbnVsbDtcbiAgICBjb25zdCBvYmpSZWYgPSB0aGlzLmRpY3QuZ2V0UmF3KFwiUGdcIik7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzUmVmKShvYmpSZWYpKSB7XG4gICAgICBwYWdlT2JqSWQgPSBvYmpSZWYudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBjb25zdCBraWRzID0gdGhpcy5kaWN0LmdldChcIktcIik7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShraWRzKSkge1xuICAgICAgZm9yIChjb25zdCBraWQgb2Yga2lkcykge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5wYXJzZUtpZChwYWdlT2JqSWQsIGtpZCk7XG5cbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLmtpZHMucHVzaChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5wYXJzZUtpZChwYWdlT2JqSWQsIGtpZHMpO1xuXG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICB0aGlzLmtpZHMucHVzaChlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwYXJzZUtpZChwYWdlT2JqSWQsIGtpZCkge1xuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGtpZCkpIHtcbiAgICAgIGlmICh0aGlzLnRyZWUucGFnZURpY3Qub2JqSWQgIT09IHBhZ2VPYmpJZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBTdHJ1Y3RFbGVtZW50KHtcbiAgICAgICAgdHlwZTogU3RydWN0RWxlbWVudFR5cGUuUEFHRV9DT05URU5ULFxuICAgICAgICBtY2lkOiBraWQsXG4gICAgICAgIHBhZ2VPYmpJZFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IGtpZERpY3QgPSBudWxsO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikoa2lkKSkge1xuICAgICAga2lkRGljdCA9IHRoaXMuZGljdC54cmVmLmZldGNoKGtpZCk7XG4gICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShraWQpKSB7XG4gICAgICBraWREaWN0ID0ga2lkO1xuICAgIH1cblxuICAgIGlmICgha2lkRGljdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcGFnZVJlZiA9IGtpZERpY3QuZ2V0UmF3KFwiUGdcIik7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzUmVmKShwYWdlUmVmKSkge1xuICAgICAgcGFnZU9iaklkID0gcGFnZVJlZi50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGUgPSAoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShraWREaWN0LmdldChcIlR5cGVcIikpID8ga2lkRGljdC5nZXQoXCJUeXBlXCIpLm5hbWUgOiBudWxsO1xuXG4gICAgaWYgKHR5cGUgPT09IFwiTUNSXCIpIHtcbiAgICAgIGlmICh0aGlzLnRyZWUucGFnZURpY3Qub2JqSWQgIT09IHBhZ2VPYmpJZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBTdHJ1Y3RFbGVtZW50KHtcbiAgICAgICAgdHlwZTogU3RydWN0RWxlbWVudFR5cGUuU1RSRUFNX0NPTlRFTlQsXG4gICAgICAgIHJlZk9iaklkOiAoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKGtpZERpY3QuZ2V0UmF3KFwiU3RtXCIpKSA/IGtpZERpY3QuZ2V0UmF3KFwiU3RtXCIpLnRvU3RyaW5nKCkgOiBudWxsLFxuICAgICAgICBwYWdlT2JqSWQsXG4gICAgICAgIG1jaWQ6IGtpZERpY3QuZ2V0KFwiTUNJRFwiKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IFwiT0JKUlwiKSB7XG4gICAgICBpZiAodGhpcy50cmVlLnBhZ2VEaWN0Lm9iaklkICE9PSBwYWdlT2JqSWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgU3RydWN0RWxlbWVudCh7XG4gICAgICAgIHR5cGU6IFN0cnVjdEVsZW1lbnRUeXBlLk9CSkVDVCxcbiAgICAgICAgcmVmT2JqSWQ6ICgwLCBfcHJpbWl0aXZlcy5pc1JlZikoa2lkRGljdC5nZXRSYXcoXCJPYmpcIikpID8ga2lkRGljdC5nZXRSYXcoXCJPYmpcIikudG9TdHJpbmcoKSA6IG51bGwsXG4gICAgICAgIHBhZ2VPYmpJZFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTdHJ1Y3RFbGVtZW50KHtcbiAgICAgIHR5cGU6IFN0cnVjdEVsZW1lbnRUeXBlLkVMRU1FTlQsXG4gICAgICBkaWN0OiBraWREaWN0XG4gICAgfSk7XG4gIH1cblxufVxuXG5jbGFzcyBTdHJ1Y3RFbGVtZW50IHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIHR5cGUsXG4gICAgZGljdCA9IG51bGwsXG4gICAgbWNpZCA9IG51bGwsXG4gICAgcGFnZU9iaklkID0gbnVsbCxcbiAgICByZWZPYmpJZCA9IG51bGxcbiAgfSkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5kaWN0ID0gZGljdDtcbiAgICB0aGlzLm1jaWQgPSBtY2lkO1xuICAgIHRoaXMucGFnZU9iaklkID0gcGFnZU9iaklkO1xuICAgIHRoaXMucmVmT2JqSWQgPSByZWZPYmpJZDtcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgU3RydWN0VHJlZVBhZ2Uge1xuICBjb25zdHJ1Y3RvcihzdHJ1Y3RUcmVlUm9vdCwgcGFnZURpY3QpIHtcbiAgICB0aGlzLnJvb3QgPSBzdHJ1Y3RUcmVlUm9vdDtcbiAgICB0aGlzLnJvb3REaWN0ID0gc3RydWN0VHJlZVJvb3QgPyBzdHJ1Y3RUcmVlUm9vdC5kaWN0IDogbnVsbDtcbiAgICB0aGlzLnBhZ2VEaWN0ID0gcGFnZURpY3Q7XG4gICAgdGhpcy5ub2RlcyA9IFtdO1xuICB9XG5cbiAgcGFyc2UoKSB7XG4gICAgaWYgKCF0aGlzLnJvb3QgfHwgIXRoaXMucm9vdERpY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnRUcmVlID0gdGhpcy5yb290RGljdC5nZXQoXCJQYXJlbnRUcmVlXCIpO1xuXG4gICAgaWYgKCFwYXJlbnRUcmVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaWQgPSB0aGlzLnBhZ2VEaWN0LmdldChcIlN0cnVjdFBhcmVudHNcIik7XG5cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoaWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbnVtYmVyVHJlZSA9IG5ldyBfbmFtZV9udW1iZXJfdHJlZS5OdW1iZXJUcmVlKHBhcmVudFRyZWUsIHRoaXMucm9vdERpY3QueHJlZik7XG4gICAgY29uc3QgcGFyZW50QXJyYXkgPSBudW1iZXJUcmVlLmdldChpZCk7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFyZW50QXJyYXkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWFwID0gbmV3IE1hcCgpO1xuXG4gICAgZm9yIChjb25zdCByZWYgb2YgcGFyZW50QXJyYXkpIHtcbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKHJlZikpIHtcbiAgICAgICAgdGhpcy5hZGROb2RlKHRoaXMucm9vdERpY3QueHJlZi5mZXRjaChyZWYpLCBtYXApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFkZE5vZGUoZGljdCwgbWFwLCBsZXZlbCA9IDApIHtcbiAgICBpZiAobGV2ZWwgPiBNQVhfREVQVEgpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIlN0cnVjdFRyZWUgTUFYX0RFUFRIIHJlYWNoZWQuXCIpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG1hcC5oYXMoZGljdCkpIHtcbiAgICAgIHJldHVybiBtYXAuZ2V0KGRpY3QpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBuZXcgU3RydWN0RWxlbWVudE5vZGUodGhpcywgZGljdCk7XG4gICAgbWFwLnNldChkaWN0LCBlbGVtZW50KTtcbiAgICBjb25zdCBwYXJlbnQgPSBkaWN0LmdldChcIlBcIik7XG5cbiAgICBpZiAoIXBhcmVudCB8fCAoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShwYXJlbnQuZ2V0KFwiVHlwZVwiKSwgXCJTdHJ1Y3RUcmVlUm9vdFwiKSkge1xuICAgICAgaWYgKCF0aGlzLmFkZFRvcExldmVsTm9kZShkaWN0LCBlbGVtZW50KSkge1xuICAgICAgICBtYXAuZGVsZXRlKGRpY3QpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5hZGROb2RlKHBhcmVudCwgbWFwLCBsZXZlbCArIDEpO1xuXG4gICAgaWYgKCFwYXJlbnROb2RlKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICBsZXQgc2F2ZSA9IGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCBraWQgb2YgcGFyZW50Tm9kZS5raWRzKSB7XG4gICAgICBpZiAoa2lkLnR5cGUgPT09IFN0cnVjdEVsZW1lbnRUeXBlLkVMRU1FTlQgJiYga2lkLmRpY3QgPT09IGRpY3QpIHtcbiAgICAgICAga2lkLnBhcmVudE5vZGUgPSBlbGVtZW50O1xuICAgICAgICBzYXZlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXNhdmUpIHtcbiAgICAgIG1hcC5kZWxldGUoZGljdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBhZGRUb3BMZXZlbE5vZGUoZGljdCwgZWxlbWVudCkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMucm9vdERpY3QuZ2V0KFwiS1wiKTtcblxuICAgIGlmICghb2JqKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaikpIHtcbiAgICAgIGlmIChvYmoub2JqSWQgIT09IGRpY3Qub2JqSWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5vZGVzWzBdID0gZWxlbWVudDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgc2F2ZSA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGtpZFJlZiA9IG9ialtpXTtcblxuICAgICAgaWYgKGtpZFJlZiAmJiBraWRSZWYudG9TdHJpbmcoKSA9PT0gZGljdC5vYmpJZCkge1xuICAgICAgICB0aGlzLm5vZGVzW2ldID0gZWxlbWVudDtcbiAgICAgICAgc2F2ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNhdmU7XG4gIH1cblxuICBnZXQgc2VyaWFsaXphYmxlKCkge1xuICAgIGZ1bmN0aW9uIG5vZGVUb1NlcmlhbGl6YWJsZShub2RlLCBwYXJlbnQsIGxldmVsID0gMCkge1xuICAgICAgaWYgKGxldmVsID4gTUFYX0RFUFRIKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIlN0cnVjdFRyZWUgdG9vIGRlZXAgdG8gYmUgZnVsbHkgc2VyaWFsaXplZC5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIG9iai5yb2xlID0gbm9kZS5yb2xlO1xuICAgICAgb2JqLmNoaWxkcmVuID0gW107XG4gICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChvYmopO1xuICAgICAgY29uc3QgYWx0ID0gbm9kZS5kaWN0LmdldChcIkFsdFwiKTtcblxuICAgICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykoYWx0KSkge1xuICAgICAgICBvYmouYWx0ID0gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShhbHQpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsYW5nID0gbm9kZS5kaWN0LmdldChcIkxhbmdcIik7XG5cbiAgICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKGxhbmcpKSB7XG4gICAgICAgIG9iai5sYW5nID0gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShsYW5nKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBraWQgb2Ygbm9kZS5raWRzKSB7XG4gICAgICAgIGNvbnN0IGtpZEVsZW1lbnQgPSBraWQudHlwZSA9PT0gU3RydWN0RWxlbWVudFR5cGUuRUxFTUVOVCA/IGtpZC5wYXJlbnROb2RlIDogbnVsbDtcblxuICAgICAgICBpZiAoa2lkRWxlbWVudCkge1xuICAgICAgICAgIG5vZGVUb1NlcmlhbGl6YWJsZShraWRFbGVtZW50LCBvYmosIGxldmVsICsgMSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAoa2lkLnR5cGUgPT09IFN0cnVjdEVsZW1lbnRUeXBlLlBBR0VfQ09OVEVOVCB8fCBraWQudHlwZSA9PT0gU3RydWN0RWxlbWVudFR5cGUuU1RSRUFNX0NPTlRFTlQpIHtcbiAgICAgICAgICBvYmouY2hpbGRyZW4ucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiBcImNvbnRlbnRcIixcbiAgICAgICAgICAgIGlkOiBgcGFnZSR7a2lkLnBhZ2VPYmpJZH1fbWNpZCR7a2lkLm1jaWR9YFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGtpZC50eXBlID09PSBTdHJ1Y3RFbGVtZW50VHlwZS5PQkpFQ1QpIHtcbiAgICAgICAgICBvYmouY2hpbGRyZW4ucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgaWQ6IGtpZC5yZWZPYmpJZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgcm9vdC5jaGlsZHJlbiA9IFtdO1xuICAgIHJvb3Qucm9sZSA9IFwiUm9vdFwiO1xuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLm5vZGVzKSB7XG4gICAgICBpZiAoIWNoaWxkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBub2RlVG9TZXJpYWxpemFibGUoY2hpbGQsIHJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiByb290O1xuICB9XG5cbn1cblxuZXhwb3J0cy5TdHJ1Y3RUcmVlUGFnZSA9IFN0cnVjdFRyZWVQYWdlO1xuXG4vKioqLyB9KSxcbi8qIDcwICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLk9iamVjdExvYWRlciA9IHZvaWQgMDtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg5KTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuZnVuY3Rpb24gbWF5SGF2ZUNoaWxkcmVuKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLlJlZiB8fCB2YWx1ZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGFkZENoaWxkcmVuKG5vZGUsIG5vZGVzVG9WaXNpdCkge1xuICBpZiAobm9kZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpIHtcbiAgICBub2RlID0gbm9kZS5nZXRSYXdWYWx1ZXMoKTtcbiAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKG5vZGUpKSB7XG4gICAgbm9kZSA9IG5vZGUuZGljdC5nZXRSYXdWYWx1ZXMoKTtcbiAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShub2RlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3QgcmF3VmFsdWUgb2Ygbm9kZSkge1xuICAgIGlmIChtYXlIYXZlQ2hpbGRyZW4ocmF3VmFsdWUpKSB7XG4gICAgICBub2Rlc1RvVmlzaXQucHVzaChyYXdWYWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIE9iamVjdExvYWRlciB7XG4gIGNvbnN0cnVjdG9yKGRpY3QsIGtleXMsIHhyZWYpIHtcbiAgICB0aGlzLmRpY3QgPSBkaWN0O1xuICAgIHRoaXMua2V5cyA9IGtleXM7XG4gICAgdGhpcy54cmVmID0geHJlZjtcbiAgICB0aGlzLnJlZlNldCA9IG51bGw7XG4gIH1cblxuICBhc3luYyBsb2FkKCkge1xuICAgIGlmICh0aGlzLnhyZWYuc3RyZWFtLmlzRGF0YUxvYWRlZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBrZXlzLFxuICAgICAgZGljdFxuICAgIH0gPSB0aGlzO1xuICAgIHRoaXMucmVmU2V0ID0gbmV3IF9wcmltaXRpdmVzLlJlZlNldCgpO1xuICAgIGNvbnN0IG5vZGVzVG9WaXNpdCA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0ga2V5cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBjb25zdCByYXdWYWx1ZSA9IGRpY3QuZ2V0UmF3KGtleXNbaV0pO1xuXG4gICAgICBpZiAocmF3VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBub2Rlc1RvVmlzaXQucHVzaChyYXdWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3dhbGsobm9kZXNUb1Zpc2l0KTtcbiAgfVxuXG4gIGFzeW5jIF93YWxrKG5vZGVzVG9WaXNpdCkge1xuICAgIGNvbnN0IG5vZGVzVG9SZXZpc2l0ID0gW107XG4gICAgY29uc3QgcGVuZGluZ1JlcXVlc3RzID0gW107XG5cbiAgICB3aGlsZSAobm9kZXNUb1Zpc2l0Lmxlbmd0aCkge1xuICAgICAgbGV0IGN1cnJlbnROb2RlID0gbm9kZXNUb1Zpc2l0LnBvcCgpO1xuXG4gICAgICBpZiAoY3VycmVudE5vZGUgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgICAgaWYgKHRoaXMucmVmU2V0LmhhcyhjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5yZWZTZXQucHV0KGN1cnJlbnROb2RlKTtcbiAgICAgICAgICBjdXJyZW50Tm9kZSA9IHRoaXMueHJlZi5mZXRjaChjdXJyZW50Tm9kZSk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgaWYgKCEoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikpIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgT2JqZWN0TG9hZGVyLl93YWxrIC0gcmVxdWVzdGluZyBhbGwgZGF0YTogXCIke2V4fVwiLmApO1xuICAgICAgICAgICAgdGhpcy5yZWZTZXQgPSBudWxsO1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBtYW5hZ2VyXG4gICAgICAgICAgICB9ID0gdGhpcy54cmVmLnN0cmVhbTtcbiAgICAgICAgICAgIHJldHVybiBtYW5hZ2VyLnJlcXVlc3RBbGxDaHVua3MoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBub2Rlc1RvUmV2aXNpdC5wdXNoKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICBwZW5kaW5nUmVxdWVzdHMucHVzaCh7XG4gICAgICAgICAgICBiZWdpbjogZXguYmVnaW4sXG4gICAgICAgICAgICBlbmQ6IGV4LmVuZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKGN1cnJlbnROb2RlKSkge1xuICAgICAgICBjb25zdCBiYXNlU3RyZWFtcyA9IGN1cnJlbnROb2RlLmdldEJhc2VTdHJlYW1zKCk7XG5cbiAgICAgICAgaWYgKGJhc2VTdHJlYW1zKSB7XG4gICAgICAgICAgbGV0IGZvdW5kTWlzc2luZ0RhdGEgPSBmYWxzZTtcblxuICAgICAgICAgIGZvciAoY29uc3Qgc3RyZWFtIG9mIGJhc2VTdHJlYW1zKSB7XG4gICAgICAgICAgICBpZiAoc3RyZWFtLmlzRGF0YUxvYWRlZCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm91bmRNaXNzaW5nRGF0YSA9IHRydWU7XG4gICAgICAgICAgICBwZW5kaW5nUmVxdWVzdHMucHVzaCh7XG4gICAgICAgICAgICAgIGJlZ2luOiBzdHJlYW0uc3RhcnQsXG4gICAgICAgICAgICAgIGVuZDogc3RyZWFtLmVuZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZvdW5kTWlzc2luZ0RhdGEpIHtcbiAgICAgICAgICAgIG5vZGVzVG9SZXZpc2l0LnB1c2goY3VycmVudE5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZGRDaGlsZHJlbihjdXJyZW50Tm9kZSwgbm9kZXNUb1Zpc2l0KTtcbiAgICB9XG5cbiAgICBpZiAocGVuZGluZ1JlcXVlc3RzLmxlbmd0aCkge1xuICAgICAgYXdhaXQgdGhpcy54cmVmLnN0cmVhbS5tYW5hZ2VyLnJlcXVlc3RSYW5nZXMocGVuZGluZ1JlcXVlc3RzKTtcblxuICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzVG9SZXZpc2l0KSB7XG4gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmKSB7XG4gICAgICAgICAgdGhpcy5yZWZTZXQucmVtb3ZlKG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl93YWxrKG5vZGVzVG9SZXZpc2l0KTtcbiAgICB9XG5cbiAgICB0aGlzLnJlZlNldCA9IG51bGw7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuT2JqZWN0TG9hZGVyID0gT2JqZWN0TG9hZGVyO1xuXG4vKioqLyB9KSxcbi8qIDcxICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLmluY3JlbWVudGFsVXBkYXRlID0gaW5jcmVtZW50YWxVcGRhdGU7XG5leHBvcnRzLndyaXRlRGljdCA9IHdyaXRlRGljdDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg5KTtcblxudmFyIF94bWxfcGFyc2VyID0gX193X3BkZmpzX3JlcXVpcmVfXyg2OCk7XG5cbnZhciBfY3J5cHRvID0gX193X3BkZmpzX3JlcXVpcmVfXyg3Mik7XG5cbmZ1bmN0aW9uIHdyaXRlRGljdChkaWN0LCBidWZmZXIsIHRyYW5zZm9ybSkge1xuICBidWZmZXIucHVzaChcIjw8XCIpO1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIGRpY3QuZ2V0S2V5cygpKSB7XG4gICAgYnVmZmVyLnB1c2goYCAvJHsoMCwgX2NvcmVfdXRpbHMuZXNjYXBlUERGTmFtZSkoa2V5KX0gYCk7XG4gICAgd3JpdGVWYWx1ZShkaWN0LmdldFJhdyhrZXkpLCBidWZmZXIsIHRyYW5zZm9ybSk7XG4gIH1cblxuICBidWZmZXIucHVzaChcIj4+XCIpO1xufVxuXG5mdW5jdGlvbiB3cml0ZVN0cmVhbShzdHJlYW0sIGJ1ZmZlciwgdHJhbnNmb3JtKSB7XG4gIHdyaXRlRGljdChzdHJlYW0uZGljdCwgYnVmZmVyLCB0cmFuc2Zvcm0pO1xuICBidWZmZXIucHVzaChcIiBzdHJlYW1cXG5cIik7XG4gIGxldCBzdHJpbmcgPSBzdHJlYW0uZ2V0U3RyaW5nKCk7XG5cbiAgaWYgKHRyYW5zZm9ybSAhPT0gbnVsbCkge1xuICAgIHN0cmluZyA9IHRyYW5zZm9ybS5lbmNyeXB0U3RyaW5nKHN0cmluZyk7XG4gIH1cblxuICBidWZmZXIucHVzaChzdHJpbmcsIFwiXFxuZW5kc3RyZWFtXFxuXCIpO1xufVxuXG5mdW5jdGlvbiB3cml0ZUFycmF5KGFycmF5LCBidWZmZXIsIHRyYW5zZm9ybSkge1xuICBidWZmZXIucHVzaChcIltcIik7XG4gIGxldCBmaXJzdCA9IHRydWU7XG5cbiAgZm9yIChjb25zdCB2YWwgb2YgYXJyYXkpIHtcbiAgICBpZiAoIWZpcnN0KSB7XG4gICAgICBidWZmZXIucHVzaChcIiBcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpcnN0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWwsIGJ1ZmZlciwgdHJhbnNmb3JtKTtcbiAgfVxuXG4gIGJ1ZmZlci5wdXNoKFwiXVwiKTtcbn1cblxuZnVuY3Rpb24gbnVtYmVyVG9TdHJpbmcodmFsdWUpIHtcbiAgaWYgKE51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gIH1cblxuICBjb25zdCByb3VuZGVkVmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlICogMTAwKTtcblxuICBpZiAocm91bmRlZFZhbHVlICUgMTAwID09PSAwKSB7XG4gICAgcmV0dXJuIChyb3VuZGVkVmFsdWUgLyAxMDApLnRvU3RyaW5nKCk7XG4gIH1cblxuICBpZiAocm91bmRlZFZhbHVlICUgMTAgPT09IDApIHtcbiAgICByZXR1cm4gdmFsdWUudG9GaXhlZCgxKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZS50b0ZpeGVkKDIpO1xufVxuXG5mdW5jdGlvbiB3cml0ZVZhbHVlKHZhbHVlLCBidWZmZXIsIHRyYW5zZm9ybSkge1xuICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodmFsdWUpKSB7XG4gICAgYnVmZmVyLnB1c2goYC8keygwLCBfY29yZV91dGlscy5lc2NhcGVQREZOYW1lKSh2YWx1ZS5uYW1lKX1gKTtcbiAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKHZhbHVlKSkge1xuICAgIGJ1ZmZlci5wdXNoKGAke3ZhbHVlLm51bX0gJHt2YWx1ZS5nZW59IFJgKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHdyaXRlQXJyYXkodmFsdWUsIGJ1ZmZlciwgdHJhbnNmb3JtKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBpZiAodHJhbnNmb3JtICE9PSBudWxsKSB7XG4gICAgICB2YWx1ZSA9IHRyYW5zZm9ybS5lbmNyeXB0U3RyaW5nKHZhbHVlKTtcbiAgICB9XG5cbiAgICBidWZmZXIucHVzaChgKCR7KDAsIF91dGlsLmVzY2FwZVN0cmluZykodmFsdWUpfSlgKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICBidWZmZXIucHVzaChudW1iZXJUb1N0cmluZyh2YWx1ZSkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICBidWZmZXIucHVzaCh2YWx1ZS50b1N0cmluZygpKTtcbiAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KSh2YWx1ZSkpIHtcbiAgICB3cml0ZURpY3QodmFsdWUsIGJ1ZmZlciwgdHJhbnNmb3JtKTtcbiAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKHZhbHVlKSkge1xuICAgIHdyaXRlU3RyZWFtKHZhbHVlLCBidWZmZXIsIHRyYW5zZm9ybSk7XG4gIH0gZWxzZSBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICBidWZmZXIucHVzaChcIm51bGxcIik7XG4gIH0gZWxzZSB7XG4gICAgKDAsIF91dGlsLndhcm4pKGBVbmhhbmRsZWQgdmFsdWUgaW4gd3JpdGVyOiAke3R5cGVvZiB2YWx1ZX0sIHBsZWFzZSBmaWxlIGEgYnVnLmApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlSW50KG51bWJlciwgc2l6ZSwgb2Zmc2V0LCBidWZmZXIpIHtcbiAgZm9yIChsZXQgaSA9IHNpemUgKyBvZmZzZXQgLSAxOyBpID4gb2Zmc2V0IC0gMTsgaS0tKSB7XG4gICAgYnVmZmVyW2ldID0gbnVtYmVyICYgMHhmZjtcbiAgICBudW1iZXIgPj49IDg7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgc2l6ZTtcbn1cblxuZnVuY3Rpb24gd3JpdGVTdHJpbmcoc3RyaW5nLCBvZmZzZXQsIGJ1ZmZlcikge1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gc3RyaW5nLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYnVmZmVyW29mZnNldCArIGldID0gc3RyaW5nLmNoYXJDb2RlQXQoaSkgJiAweGZmO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVNRDUoZmlsZXNpemUsIHhyZWZJbmZvKSB7XG4gIGNvbnN0IHRpbWUgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcbiAgY29uc3QgZmlsZW5hbWUgPSB4cmVmSW5mby5maWxlbmFtZSB8fCBcIlwiO1xuICBjb25zdCBtZDVCdWZmZXIgPSBbdGltZS50b1N0cmluZygpLCBmaWxlbmFtZSwgZmlsZXNpemUudG9TdHJpbmcoKV07XG4gIGxldCBtZDVCdWZmZXJMZW4gPSBtZDVCdWZmZXIucmVkdWNlKChhLCBzdHIpID0+IGEgKyBzdHIubGVuZ3RoLCAwKTtcblxuICBmb3IgKGNvbnN0IHZhbHVlIG9mIE9iamVjdC52YWx1ZXMoeHJlZkluZm8uaW5mbykpIHtcbiAgICBtZDVCdWZmZXIucHVzaCh2YWx1ZSk7XG4gICAgbWQ1QnVmZmVyTGVuICs9IHZhbHVlLmxlbmd0aDtcbiAgfVxuXG4gIGNvbnN0IGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkobWQ1QnVmZmVyTGVuKTtcbiAgbGV0IG9mZnNldCA9IDA7XG5cbiAgZm9yIChjb25zdCBzdHIgb2YgbWQ1QnVmZmVyKSB7XG4gICAgd3JpdGVTdHJpbmcoc3RyLCBvZmZzZXQsIGFycmF5KTtcbiAgICBvZmZzZXQgKz0gc3RyLmxlbmd0aDtcbiAgfVxuXG4gIHJldHVybiAoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykoKDAsIF9jcnlwdG8uY2FsY3VsYXRlTUQ1KShhcnJheSkpO1xufVxuXG5mdW5jdGlvbiB3cml0ZVhGQURhdGFGb3JBY3JvZm9ybShzdHIsIG5ld1JlZnMpIHtcbiAgY29uc3QgeG1sID0gbmV3IF94bWxfcGFyc2VyLlNpbXBsZVhNTFBhcnNlcih7XG4gICAgaGFzQXR0cmlidXRlczogdHJ1ZVxuICB9KS5wYXJzZUZyb21TdHJpbmcoc3RyKTtcblxuICBmb3IgKGNvbnN0IHtcbiAgICB4ZmFcbiAgfSBvZiBuZXdSZWZzKSB7XG4gICAgaWYgKCF4ZmEpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIHBhdGgsXG4gICAgICB2YWx1ZVxuICAgIH0gPSB4ZmE7XG5cbiAgICBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSB4bWwuZG9jdW1lbnRFbGVtZW50LnNlYXJjaE5vZGUoKDAsIF9jb3JlX3V0aWxzLnBhcnNlWEZBUGF0aCkocGF0aCksIDApO1xuXG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIG5vZGUuY2hpbGROb2RlcyA9IFtuZXcgX3htbF9wYXJzZXIuU2ltcGxlRE9NTm9kZShcIiN0ZXh0XCIsIHZhbHVlKV07XG4gICAgfSBlbHNlIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShgTm9kZSBub3QgZm91bmQgZm9yIHBhdGg6ICR7cGF0aH1gKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBidWZmZXIgPSBbXTtcbiAgeG1sLmRvY3VtZW50RWxlbWVudC5kdW1wKGJ1ZmZlcik7XG4gIHJldHVybiBidWZmZXIuam9pbihcIlwiKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlWEZBKHtcbiAgeGZhRGF0YSxcbiAgeGZhRGF0YXNldHNSZWYsXG4gIGhhc1hmYURhdGFzZXRzRW50cnksXG4gIGFjcm9Gb3JtUmVmLFxuICBhY3JvRm9ybSxcbiAgbmV3UmVmcyxcbiAgeHJlZixcbiAgeHJlZkluZm9cbn0pIHtcbiAgaWYgKHhyZWYgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIWhhc1hmYURhdGFzZXRzRW50cnkpIHtcbiAgICBpZiAoIWFjcm9Gb3JtUmVmKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJYRkEgLSBDYW5ub3Qgc2F2ZSBpdFwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvbGRYZmEgPSBhY3JvRm9ybS5nZXQoXCJYRkFcIik7XG4gICAgY29uc3QgbmV3WGZhID0gb2xkWGZhLnNsaWNlKCk7XG4gICAgbmV3WGZhLnNwbGljZSgyLCAwLCBcImRhdGFzZXRzXCIpO1xuICAgIG5ld1hmYS5zcGxpY2UoMywgMCwgeGZhRGF0YXNldHNSZWYpO1xuICAgIGFjcm9Gb3JtLnNldChcIlhGQVwiLCBuZXdYZmEpO1xuICAgIGNvbnN0IGVuY3J5cHQgPSB4cmVmLmVuY3J5cHQ7XG4gICAgbGV0IHRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICBpZiAoZW5jcnlwdCkge1xuICAgICAgdHJhbnNmb3JtID0gZW5jcnlwdC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0oYWNyb0Zvcm1SZWYubnVtLCBhY3JvRm9ybVJlZi5nZW4pO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IFtgJHthY3JvRm9ybVJlZi5udW19ICR7YWNyb0Zvcm1SZWYuZ2VufSBvYmpcXG5gXTtcbiAgICB3cml0ZURpY3QoYWNyb0Zvcm0sIGJ1ZmZlciwgdHJhbnNmb3JtKTtcbiAgICBidWZmZXIucHVzaChcIlxcblwiKTtcbiAgICBhY3JvRm9ybS5zZXQoXCJYRkFcIiwgb2xkWGZhKTtcbiAgICBuZXdSZWZzLnB1c2goe1xuICAgICAgcmVmOiBhY3JvRm9ybVJlZixcbiAgICAgIGRhdGE6IGJ1ZmZlci5qb2luKFwiXCIpXG4gICAgfSk7XG4gIH1cblxuICBpZiAoeGZhRGF0YSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IGRhdGFzZXRzID0geHJlZi5mZXRjaElmUmVmKHhmYURhdGFzZXRzUmVmKTtcbiAgICB4ZmFEYXRhID0gd3JpdGVYRkFEYXRhRm9yQWNyb2Zvcm0oZGF0YXNldHMuZ2V0U3RyaW5nKCksIG5ld1JlZnMpO1xuICB9XG5cbiAgY29uc3QgZW5jcnlwdCA9IHhyZWYuZW5jcnlwdDtcblxuICBpZiAoZW5jcnlwdCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IGVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKHhmYURhdGFzZXRzUmVmLm51bSwgeGZhRGF0YXNldHNSZWYuZ2VuKTtcbiAgICB4ZmFEYXRhID0gdHJhbnNmb3JtLmVuY3J5cHRTdHJpbmcoeGZhRGF0YSk7XG4gIH1cblxuICBjb25zdCBkYXRhID0gYCR7eGZhRGF0YXNldHNSZWYubnVtfSAke3hmYURhdGFzZXRzUmVmLmdlbn0gb2JqXFxuYCArIGA8PCAvVHlwZSAvRW1iZWRkZWRGaWxlIC9MZW5ndGggJHt4ZmFEYXRhLmxlbmd0aH0+PlxcbnN0cmVhbVxcbmAgKyB4ZmFEYXRhICsgXCJcXG5lbmRzdHJlYW1cXG5lbmRvYmpcXG5cIjtcbiAgbmV3UmVmcy5wdXNoKHtcbiAgICByZWY6IHhmYURhdGFzZXRzUmVmLFxuICAgIGRhdGFcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGluY3JlbWVudGFsVXBkYXRlKHtcbiAgb3JpZ2luYWxEYXRhLFxuICB4cmVmSW5mbyxcbiAgbmV3UmVmcyxcbiAgeHJlZiA9IG51bGwsXG4gIGhhc1hmYSA9IGZhbHNlLFxuICB4ZmFEYXRhc2V0c1JlZiA9IG51bGwsXG4gIGhhc1hmYURhdGFzZXRzRW50cnkgPSBmYWxzZSxcbiAgYWNyb0Zvcm1SZWYgPSBudWxsLFxuICBhY3JvRm9ybSA9IG51bGwsXG4gIHhmYURhdGEgPSBudWxsXG59KSB7XG4gIGlmIChoYXNYZmEpIHtcbiAgICB1cGRhdGVYRkEoe1xuICAgICAgeGZhRGF0YSxcbiAgICAgIHhmYURhdGFzZXRzUmVmLFxuICAgICAgaGFzWGZhRGF0YXNldHNFbnRyeSxcbiAgICAgIGFjcm9Gb3JtUmVmLFxuICAgICAgYWNyb0Zvcm0sXG4gICAgICBuZXdSZWZzLFxuICAgICAgeHJlZixcbiAgICAgIHhyZWZJbmZvXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdYcmVmID0gbmV3IF9wcmltaXRpdmVzLkRpY3QobnVsbCk7XG4gIGNvbnN0IHJlZkZvclhyZWZUYWJsZSA9IHhyZWZJbmZvLm5ld1JlZjtcbiAgbGV0IGJ1ZmZlciwgYmFzZU9mZnNldDtcbiAgY29uc3QgbGFzdEJ5dGUgPSBvcmlnaW5hbERhdGFbb3JpZ2luYWxEYXRhLmxlbmd0aCAtIDFdO1xuXG4gIGlmIChsYXN0Qnl0ZSA9PT0gMHgwYSB8fCBsYXN0Qnl0ZSA9PT0gMHgwZCkge1xuICAgIGJ1ZmZlciA9IFtdO1xuICAgIGJhc2VPZmZzZXQgPSBvcmlnaW5hbERhdGEubGVuZ3RoO1xuICB9IGVsc2Uge1xuICAgIGJ1ZmZlciA9IFtcIlxcblwiXTtcbiAgICBiYXNlT2Zmc2V0ID0gb3JpZ2luYWxEYXRhLmxlbmd0aCArIDE7XG4gIH1cblxuICBuZXdYcmVmLnNldChcIlNpemVcIiwgcmVmRm9yWHJlZlRhYmxlLm51bSArIDEpO1xuICBuZXdYcmVmLnNldChcIlByZXZcIiwgeHJlZkluZm8uc3RhcnRYUmVmKTtcbiAgbmV3WHJlZi5zZXQoXCJUeXBlXCIsIF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiWFJlZlwiKSk7XG5cbiAgaWYgKHhyZWZJbmZvLnJvb3RSZWYgIT09IG51bGwpIHtcbiAgICBuZXdYcmVmLnNldChcIlJvb3RcIiwgeHJlZkluZm8ucm9vdFJlZik7XG4gIH1cblxuICBpZiAoeHJlZkluZm8uaW5mb1JlZiAhPT0gbnVsbCkge1xuICAgIG5ld1hyZWYuc2V0KFwiSW5mb1wiLCB4cmVmSW5mby5pbmZvUmVmKTtcbiAgfVxuXG4gIGlmICh4cmVmSW5mby5lbmNyeXB0UmVmICE9PSBudWxsKSB7XG4gICAgbmV3WHJlZi5zZXQoXCJFbmNyeXB0XCIsIHhyZWZJbmZvLmVuY3J5cHRSZWYpO1xuICB9XG5cbiAgbmV3UmVmcy5wdXNoKHtcbiAgICByZWY6IHJlZkZvclhyZWZUYWJsZSxcbiAgICBkYXRhOiBcIlwiXG4gIH0pO1xuICBuZXdSZWZzID0gbmV3UmVmcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIGEucmVmLm51bSAtIGIucmVmLm51bTtcbiAgfSk7XG4gIGNvbnN0IHhyZWZUYWJsZURhdGEgPSBbWzAsIDEsIDB4ZmZmZl1dO1xuICBjb25zdCBpbmRleGVzID0gWzAsIDFdO1xuICBsZXQgbWF4T2Zmc2V0ID0gMDtcblxuICBmb3IgKGNvbnN0IHtcbiAgICByZWYsXG4gICAgZGF0YVxuICB9IG9mIG5ld1JlZnMpIHtcbiAgICBtYXhPZmZzZXQgPSBNYXRoLm1heChtYXhPZmZzZXQsIGJhc2VPZmZzZXQpO1xuICAgIHhyZWZUYWJsZURhdGEucHVzaChbMSwgYmFzZU9mZnNldCwgTWF0aC5taW4ocmVmLmdlbiwgMHhmZmZmKV0pO1xuICAgIGJhc2VPZmZzZXQgKz0gZGF0YS5sZW5ndGg7XG4gICAgaW5kZXhlcy5wdXNoKHJlZi5udW0sIDEpO1xuICAgIGJ1ZmZlci5wdXNoKGRhdGEpO1xuICB9XG5cbiAgbmV3WHJlZi5zZXQoXCJJbmRleFwiLCBpbmRleGVzKTtcblxuICBpZiAoQXJyYXkuaXNBcnJheSh4cmVmSW5mby5maWxlSWRzKSAmJiB4cmVmSW5mby5maWxlSWRzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBtZDUgPSBjb21wdXRlTUQ1KGJhc2VPZmZzZXQsIHhyZWZJbmZvKTtcbiAgICBuZXdYcmVmLnNldChcIklEXCIsIFt4cmVmSW5mby5maWxlSWRzWzBdLCBtZDVdKTtcbiAgfVxuXG4gIGNvbnN0IG9mZnNldFNpemUgPSBNYXRoLmNlaWwoTWF0aC5sb2cyKG1heE9mZnNldCkgLyA4KTtcbiAgY29uc3Qgc2l6ZXMgPSBbMSwgb2Zmc2V0U2l6ZSwgMl07XG4gIGNvbnN0IHN0cnVjdFNpemUgPSBzaXplc1swXSArIHNpemVzWzFdICsgc2l6ZXNbMl07XG4gIGNvbnN0IHRhYmxlTGVuZ3RoID0gc3RydWN0U2l6ZSAqIHhyZWZUYWJsZURhdGEubGVuZ3RoO1xuICBuZXdYcmVmLnNldChcIldcIiwgc2l6ZXMpO1xuICBuZXdYcmVmLnNldChcIkxlbmd0aFwiLCB0YWJsZUxlbmd0aCk7XG4gIGJ1ZmZlci5wdXNoKGAke3JlZkZvclhyZWZUYWJsZS5udW19ICR7cmVmRm9yWHJlZlRhYmxlLmdlbn0gb2JqXFxuYCk7XG4gIHdyaXRlRGljdChuZXdYcmVmLCBidWZmZXIsIG51bGwpO1xuICBidWZmZXIucHVzaChcIiBzdHJlYW1cXG5cIik7XG4gIGNvbnN0IGJ1ZmZlckxlbiA9IGJ1ZmZlci5yZWR1Y2UoKGEsIHN0cikgPT4gYSArIHN0ci5sZW5ndGgsIDApO1xuICBjb25zdCBmb290ZXIgPSBgXFxuZW5kc3RyZWFtXFxuZW5kb2JqXFxuc3RhcnR4cmVmXFxuJHtiYXNlT2Zmc2V0fVxcbiUlRU9GXFxuYDtcbiAgY29uc3QgYXJyYXkgPSBuZXcgVWludDhBcnJheShvcmlnaW5hbERhdGEubGVuZ3RoICsgYnVmZmVyTGVuICsgdGFibGVMZW5ndGggKyBmb290ZXIubGVuZ3RoKTtcbiAgYXJyYXkuc2V0KG9yaWdpbmFsRGF0YSk7XG4gIGxldCBvZmZzZXQgPSBvcmlnaW5hbERhdGEubGVuZ3RoO1xuXG4gIGZvciAoY29uc3Qgc3RyIG9mIGJ1ZmZlcikge1xuICAgIHdyaXRlU3RyaW5nKHN0ciwgb2Zmc2V0LCBhcnJheSk7XG4gICAgb2Zmc2V0ICs9IHN0ci5sZW5ndGg7XG4gIH1cblxuICBmb3IgKGNvbnN0IFt0eXBlLCBvYmpPZmZzZXQsIGdlbl0gb2YgeHJlZlRhYmxlRGF0YSkge1xuICAgIG9mZnNldCA9IHdyaXRlSW50KHR5cGUsIHNpemVzWzBdLCBvZmZzZXQsIGFycmF5KTtcbiAgICBvZmZzZXQgPSB3cml0ZUludChvYmpPZmZzZXQsIHNpemVzWzFdLCBvZmZzZXQsIGFycmF5KTtcbiAgICBvZmZzZXQgPSB3cml0ZUludChnZW4sIHNpemVzWzJdLCBvZmZzZXQsIGFycmF5KTtcbiAgfVxuXG4gIHdyaXRlU3RyaW5nKGZvb3Rlciwgb2Zmc2V0LCBhcnJheSk7XG4gIHJldHVybiBhcnJheTtcbn1cblxuLyoqKi8gfSksXG4vKiA3MiAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5jYWxjdWxhdGVTSEEyNTYgPSBleHBvcnRzLmNhbGN1bGF0ZU1ENSA9IGV4cG9ydHMuUERGMjAgPSBleHBvcnRzLlBERjE3ID0gZXhwb3J0cy5DaXBoZXJUcmFuc2Zvcm1GYWN0b3J5ID0gZXhwb3J0cy5BUkNGb3VyQ2lwaGVyID0gZXhwb3J0cy5BRVMyNTZDaXBoZXIgPSBleHBvcnRzLkFFUzEyOENpcGhlciA9IHZvaWQgMDtcbmV4cG9ydHMuY2FsY3VsYXRlU0hBMzg0ID0gY2FsY3VsYXRlU0hBMzg0O1xuZXhwb3J0cy5jYWxjdWxhdGVTSEE1MTIgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfZGVjcnlwdF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDczKTtcblxuY2xhc3MgQVJDRm91ckNpcGhlciB7XG4gIGNvbnN0cnVjdG9yKGtleSkge1xuICAgIHRoaXMuYSA9IDA7XG4gICAgdGhpcy5iID0gMDtcbiAgICBjb25zdCBzID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTtcbiAgICBjb25zdCBrZXlMZW5ndGggPSBrZXkubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgICAgc1tpXSA9IGk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGogPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgICAgIGNvbnN0IHRtcCA9IHNbaV07XG4gICAgICBqID0gaiArIHRtcCArIGtleVtpICUga2V5TGVuZ3RoXSAmIDB4ZmY7XG4gICAgICBzW2ldID0gc1tqXTtcbiAgICAgIHNbal0gPSB0bXA7XG4gICAgfVxuXG4gICAgdGhpcy5zID0gcztcbiAgfVxuXG4gIGVuY3J5cHRCbG9jayhkYXRhKSB7XG4gICAgbGV0IGEgPSB0aGlzLmEsXG4gICAgICAgIGIgPSB0aGlzLmI7XG4gICAgY29uc3QgcyA9IHRoaXMucztcbiAgICBjb25zdCBuID0gZGF0YS5sZW5ndGg7XG4gICAgY29uc3Qgb3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkobik7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgYSA9IGEgKyAxICYgMHhmZjtcbiAgICAgIGNvbnN0IHRtcCA9IHNbYV07XG4gICAgICBiID0gYiArIHRtcCAmIDB4ZmY7XG4gICAgICBjb25zdCB0bXAyID0gc1tiXTtcbiAgICAgIHNbYV0gPSB0bXAyO1xuICAgICAgc1tiXSA9IHRtcDtcbiAgICAgIG91dHB1dFtpXSA9IGRhdGFbaV0gXiBzW3RtcCArIHRtcDIgJiAweGZmXTtcbiAgICB9XG5cbiAgICB0aGlzLmEgPSBhO1xuICAgIHRoaXMuYiA9IGI7XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIGRlY3J5cHRCbG9jayhkYXRhKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5jcnlwdEJsb2NrKGRhdGEpO1xuICB9XG5cbiAgZW5jcnlwdChkYXRhKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5jcnlwdEJsb2NrKGRhdGEpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5BUkNGb3VyQ2lwaGVyID0gQVJDRm91ckNpcGhlcjtcblxuY29uc3QgY2FsY3VsYXRlTUQ1ID0gZnVuY3Rpb24gY2FsY3VsYXRlTUQ1Q2xvc3VyZSgpIHtcbiAgY29uc3QgciA9IG5ldyBVaW50OEFycmF5KFs3LCAxMiwgMTcsIDIyLCA3LCAxMiwgMTcsIDIyLCA3LCAxMiwgMTcsIDIyLCA3LCAxMiwgMTcsIDIyLCA1LCA5LCAxNCwgMjAsIDUsIDksIDE0LCAyMCwgNSwgOSwgMTQsIDIwLCA1LCA5LCAxNCwgMjAsIDQsIDExLCAxNiwgMjMsIDQsIDExLCAxNiwgMjMsIDQsIDExLCAxNiwgMjMsIDQsIDExLCAxNiwgMjMsIDYsIDEwLCAxNSwgMjEsIDYsIDEwLCAxNSwgMjEsIDYsIDEwLCAxNSwgMjEsIDYsIDEwLCAxNSwgMjFdKTtcbiAgY29uc3QgayA9IG5ldyBJbnQzMkFycmF5KFstNjgwODc2OTM2LCAtMzg5NTY0NTg2LCA2MDYxMDU4MTksIC0xMDQ0NTI1MzMwLCAtMTc2NDE4ODk3LCAxMjAwMDgwNDI2LCAtMTQ3MzIzMTM0MSwgLTQ1NzA1OTgzLCAxNzcwMDM1NDE2LCAtMTk1ODQxNDQxNywgLTQyMDYzLCAtMTk5MDQwNDE2MiwgMTgwNDYwMzY4MiwgLTQwMzQxMTAxLCAtMTUwMjAwMjI5MCwgMTIzNjUzNTMyOSwgLTE2NTc5NjUxMCwgLTEwNjk1MDE2MzIsIDY0MzcxNzcxMywgLTM3Mzg5NzMwMiwgLTcwMTU1ODY5MSwgMzgwMTYwODMsIC02NjA0NzgzMzUsIC00MDU1Mzc4NDgsIDU2ODQ0NjQzOCwgLTEwMTk4MDM2OTAsIC0xODczNjM5NjEsIDExNjM1MzE1MDEsIC0xNDQ0NjgxNDY3LCAtNTE0MDM3ODQsIDE3MzUzMjg0NzMsIC0xOTI2NjA3NzM0LCAtMzc4NTU4LCAtMjAyMjU3NDQ2MywgMTgzOTAzMDU2MiwgLTM1MzA5NTU2LCAtMTUzMDk5MjA2MCwgMTI3Mjg5MzM1MywgLTE1NTQ5NzYzMiwgLTEwOTQ3MzA2NDAsIDY4MTI3OTE3NCwgLTM1ODUzNzIyMiwgLTcyMjUyMTk3OSwgNzYwMjkxODksIC02NDAzNjQ0ODcsIC00MjE4MTU4MzUsIDUzMDc0MjUyMCwgLTk5NTMzODY1MSwgLTE5ODYzMDg0NCwgMTEyNjg5MTQxNSwgLTE0MTYzNTQ5MDUsIC01NzQzNDA1NSwgMTcwMDQ4NTU3MSwgLTE4OTQ5ODY2MDYsIC0xMDUxNTIzLCAtMjA1NDkyMjc5OSwgMTg3MzMxMzM1OSwgLTMwNjExNzQ0LCAtMTU2MDE5ODM4MCwgMTMwOTE1MTY0OSwgLTE0NTUyMzA3MCwgLTExMjAyMTAzNzksIDcxODc4NzI1OSwgLTM0MzQ4NTU1MV0pO1xuXG4gIGZ1bmN0aW9uIGhhc2goZGF0YSwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgICBsZXQgaDAgPSAxNzMyNTg0MTkzLFxuICAgICAgICBoMSA9IC0yNzE3MzM4NzksXG4gICAgICAgIGgyID0gLTE3MzI1ODQxOTQsXG4gICAgICAgIGgzID0gMjcxNzMzODc4O1xuICAgIGNvbnN0IHBhZGRlZExlbmd0aCA9IGxlbmd0aCArIDcyICYgfjYzO1xuICAgIGNvbnN0IHBhZGRlZCA9IG5ldyBVaW50OEFycmF5KHBhZGRlZExlbmd0aCk7XG4gICAgbGV0IGksIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIHBhZGRlZFtpXSA9IGRhdGFbb2Zmc2V0KytdO1xuICAgIH1cblxuICAgIHBhZGRlZFtpKytdID0gMHg4MDtcbiAgICBjb25zdCBuID0gcGFkZGVkTGVuZ3RoIC0gODtcblxuICAgIHdoaWxlIChpIDwgbikge1xuICAgICAgcGFkZGVkW2krK10gPSAwO1xuICAgIH1cblxuICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoIDw8IDMgJiAweGZmO1xuICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+IDUgJiAweGZmO1xuICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+IDEzICYgMHhmZjtcbiAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+PiAyMSAmIDB4ZmY7XG4gICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4+IDI5ICYgMHhmZjtcbiAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgcGFkZGVkW2krK10gPSAwO1xuICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICBjb25zdCB3ID0gbmV3IEludDMyQXJyYXkoMTYpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHBhZGRlZExlbmd0aDspIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCAxNjsgKytqLCBpICs9IDQpIHtcbiAgICAgICAgd1tqXSA9IHBhZGRlZFtpXSB8IHBhZGRlZFtpICsgMV0gPDwgOCB8IHBhZGRlZFtpICsgMl0gPDwgMTYgfCBwYWRkZWRbaSArIDNdIDw8IDI0O1xuICAgICAgfVxuXG4gICAgICBsZXQgYSA9IGgwLFxuICAgICAgICAgIGIgPSBoMSxcbiAgICAgICAgICBjID0gaDIsXG4gICAgICAgICAgZCA9IGgzLFxuICAgICAgICAgIGYsXG4gICAgICAgICAgZztcblxuICAgICAgZm9yIChqID0gMDsgaiA8IDY0OyArK2opIHtcbiAgICAgICAgaWYgKGogPCAxNikge1xuICAgICAgICAgIGYgPSBiICYgYyB8IH5iICYgZDtcbiAgICAgICAgICBnID0gajtcbiAgICAgICAgfSBlbHNlIGlmIChqIDwgMzIpIHtcbiAgICAgICAgICBmID0gZCAmIGIgfCB+ZCAmIGM7XG4gICAgICAgICAgZyA9IDUgKiBqICsgMSAmIDE1O1xuICAgICAgICB9IGVsc2UgaWYgKGogPCA0OCkge1xuICAgICAgICAgIGYgPSBiIF4gYyBeIGQ7XG4gICAgICAgICAgZyA9IDMgKiBqICsgNSAmIDE1O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGYgPSBjIF4gKGIgfCB+ZCk7XG4gICAgICAgICAgZyA9IDcgKiBqICYgMTU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0bXAgPSBkLFxuICAgICAgICAgICAgICByb3RhdGVBcmcgPSBhICsgZiArIGtbal0gKyB3W2ddIHwgMCxcbiAgICAgICAgICAgICAgcm90YXRlID0gcltqXTtcbiAgICAgICAgZCA9IGM7XG4gICAgICAgIGMgPSBiO1xuICAgICAgICBiID0gYiArIChyb3RhdGVBcmcgPDwgcm90YXRlIHwgcm90YXRlQXJnID4+PiAzMiAtIHJvdGF0ZSkgfCAwO1xuICAgICAgICBhID0gdG1wO1xuICAgICAgfVxuXG4gICAgICBoMCA9IGgwICsgYSB8IDA7XG4gICAgICBoMSA9IGgxICsgYiB8IDA7XG4gICAgICBoMiA9IGgyICsgYyB8IDA7XG4gICAgICBoMyA9IGgzICsgZCB8IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFtoMCAmIDB4RkYsIGgwID4+IDggJiAweEZGLCBoMCA+PiAxNiAmIDB4RkYsIGgwID4+PiAyNCAmIDB4RkYsIGgxICYgMHhGRiwgaDEgPj4gOCAmIDB4RkYsIGgxID4+IDE2ICYgMHhGRiwgaDEgPj4+IDI0ICYgMHhGRiwgaDIgJiAweEZGLCBoMiA+PiA4ICYgMHhGRiwgaDIgPj4gMTYgJiAweEZGLCBoMiA+Pj4gMjQgJiAweEZGLCBoMyAmIDB4RkYsIGgzID4+IDggJiAweEZGLCBoMyA+PiAxNiAmIDB4RkYsIGgzID4+PiAyNCAmIDB4RkZdKTtcbiAgfVxuXG4gIHJldHVybiBoYXNoO1xufSgpO1xuXG5leHBvcnRzLmNhbGN1bGF0ZU1ENSA9IGNhbGN1bGF0ZU1ENTtcblxuY2xhc3MgV29yZDY0IHtcbiAgY29uc3RydWN0b3IoaGlnaEludGVnZXIsIGxvd0ludGVnZXIpIHtcbiAgICB0aGlzLmhpZ2ggPSBoaWdoSW50ZWdlciB8IDA7XG4gICAgdGhpcy5sb3cgPSBsb3dJbnRlZ2VyIHwgMDtcbiAgfVxuXG4gIGFuZCh3b3JkKSB7XG4gICAgdGhpcy5oaWdoICY9IHdvcmQuaGlnaDtcbiAgICB0aGlzLmxvdyAmPSB3b3JkLmxvdztcbiAgfVxuXG4gIHhvcih3b3JkKSB7XG4gICAgdGhpcy5oaWdoIF49IHdvcmQuaGlnaDtcbiAgICB0aGlzLmxvdyBePSB3b3JkLmxvdztcbiAgfVxuXG4gIG9yKHdvcmQpIHtcbiAgICB0aGlzLmhpZ2ggfD0gd29yZC5oaWdoO1xuICAgIHRoaXMubG93IHw9IHdvcmQubG93O1xuICB9XG5cbiAgc2hpZnRSaWdodChwbGFjZXMpIHtcbiAgICBpZiAocGxhY2VzID49IDMyKSB7XG4gICAgICB0aGlzLmxvdyA9IHRoaXMuaGlnaCA+Pj4gcGxhY2VzIC0gMzIgfCAwO1xuICAgICAgdGhpcy5oaWdoID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb3cgPSB0aGlzLmxvdyA+Pj4gcGxhY2VzIHwgdGhpcy5oaWdoIDw8IDMyIC0gcGxhY2VzO1xuICAgICAgdGhpcy5oaWdoID0gdGhpcy5oaWdoID4+PiBwbGFjZXMgfCAwO1xuICAgIH1cbiAgfVxuXG4gIHNoaWZ0TGVmdChwbGFjZXMpIHtcbiAgICBpZiAocGxhY2VzID49IDMyKSB7XG4gICAgICB0aGlzLmhpZ2ggPSB0aGlzLmxvdyA8PCBwbGFjZXMgLSAzMjtcbiAgICAgIHRoaXMubG93ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oaWdoID0gdGhpcy5oaWdoIDw8IHBsYWNlcyB8IHRoaXMubG93ID4+PiAzMiAtIHBsYWNlcztcbiAgICAgIHRoaXMubG93IDw8PSBwbGFjZXM7XG4gICAgfVxuICB9XG5cbiAgcm90YXRlUmlnaHQocGxhY2VzKSB7XG4gICAgbGV0IGxvdywgaGlnaDtcblxuICAgIGlmIChwbGFjZXMgJiAzMikge1xuICAgICAgaGlnaCA9IHRoaXMubG93O1xuICAgICAgbG93ID0gdGhpcy5oaWdoO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb3cgPSB0aGlzLmxvdztcbiAgICAgIGhpZ2ggPSB0aGlzLmhpZ2g7XG4gICAgfVxuXG4gICAgcGxhY2VzICY9IDMxO1xuICAgIHRoaXMubG93ID0gbG93ID4+PiBwbGFjZXMgfCBoaWdoIDw8IDMyIC0gcGxhY2VzO1xuICAgIHRoaXMuaGlnaCA9IGhpZ2ggPj4+IHBsYWNlcyB8IGxvdyA8PCAzMiAtIHBsYWNlcztcbiAgfVxuXG4gIG5vdCgpIHtcbiAgICB0aGlzLmhpZ2ggPSB+dGhpcy5oaWdoO1xuICAgIHRoaXMubG93ID0gfnRoaXMubG93O1xuICB9XG5cbiAgYWRkKHdvcmQpIHtcbiAgICBjb25zdCBsb3dBZGQgPSAodGhpcy5sb3cgPj4+IDApICsgKHdvcmQubG93ID4+PiAwKTtcbiAgICBsZXQgaGlnaEFkZCA9ICh0aGlzLmhpZ2ggPj4+IDApICsgKHdvcmQuaGlnaCA+Pj4gMCk7XG5cbiAgICBpZiAobG93QWRkID4gMHhmZmZmZmZmZikge1xuICAgICAgaGlnaEFkZCArPSAxO1xuICAgIH1cblxuICAgIHRoaXMubG93ID0gbG93QWRkIHwgMDtcbiAgICB0aGlzLmhpZ2ggPSBoaWdoQWRkIHwgMDtcbiAgfVxuXG4gIGNvcHlUbyhieXRlcywgb2Zmc2V0KSB7XG4gICAgYnl0ZXNbb2Zmc2V0XSA9IHRoaXMuaGlnaCA+Pj4gMjQgJiAweGZmO1xuICAgIGJ5dGVzW29mZnNldCArIDFdID0gdGhpcy5oaWdoID4+IDE2ICYgMHhmZjtcbiAgICBieXRlc1tvZmZzZXQgKyAyXSA9IHRoaXMuaGlnaCA+PiA4ICYgMHhmZjtcbiAgICBieXRlc1tvZmZzZXQgKyAzXSA9IHRoaXMuaGlnaCAmIDB4ZmY7XG4gICAgYnl0ZXNbb2Zmc2V0ICsgNF0gPSB0aGlzLmxvdyA+Pj4gMjQgJiAweGZmO1xuICAgIGJ5dGVzW29mZnNldCArIDVdID0gdGhpcy5sb3cgPj4gMTYgJiAweGZmO1xuICAgIGJ5dGVzW29mZnNldCArIDZdID0gdGhpcy5sb3cgPj4gOCAmIDB4ZmY7XG4gICAgYnl0ZXNbb2Zmc2V0ICsgN10gPSB0aGlzLmxvdyAmIDB4ZmY7XG4gIH1cblxuICBhc3NpZ24od29yZCkge1xuICAgIHRoaXMuaGlnaCA9IHdvcmQuaGlnaDtcbiAgICB0aGlzLmxvdyA9IHdvcmQubG93O1xuICB9XG5cbn1cblxuY29uc3QgY2FsY3VsYXRlU0hBMjU2ID0gZnVuY3Rpb24gY2FsY3VsYXRlU0hBMjU2Q2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gcm90cih4LCBuKSB7XG4gICAgcmV0dXJuIHggPj4+IG4gfCB4IDw8IDMyIC0gbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoKHgsIHksIHopIHtcbiAgICByZXR1cm4geCAmIHkgXiB+eCAmIHo7XG4gIH1cblxuICBmdW5jdGlvbiBtYWooeCwgeSwgeikge1xuICAgIHJldHVybiB4ICYgeSBeIHggJiB6IF4geSAmIHo7XG4gIH1cblxuICBmdW5jdGlvbiBzaWdtYSh4KSB7XG4gICAgcmV0dXJuIHJvdHIoeCwgMikgXiByb3RyKHgsIDEzKSBeIHJvdHIoeCwgMjIpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2lnbWFQcmltZSh4KSB7XG4gICAgcmV0dXJuIHJvdHIoeCwgNikgXiByb3RyKHgsIDExKSBeIHJvdHIoeCwgMjUpO1xuICB9XG5cbiAgZnVuY3Rpb24gbGl0dGxlU2lnbWEoeCkge1xuICAgIHJldHVybiByb3RyKHgsIDcpIF4gcm90cih4LCAxOCkgXiB4ID4+PiAzO1xuICB9XG5cbiAgZnVuY3Rpb24gbGl0dGxlU2lnbWFQcmltZSh4KSB7XG4gICAgcmV0dXJuIHJvdHIoeCwgMTcpIF4gcm90cih4LCAxOSkgXiB4ID4+PiAxMDtcbiAgfVxuXG4gIGNvbnN0IGsgPSBbMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSwgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSwgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMywgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCwgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYywgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSwgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNywgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NywgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMywgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSwgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMywgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCwgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSwgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMywgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCwgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMl07XG5cbiAgZnVuY3Rpb24gaGFzaChkYXRhLCBvZmZzZXQsIGxlbmd0aCkge1xuICAgIGxldCBoMCA9IDB4NmEwOWU2NjcsXG4gICAgICAgIGgxID0gMHhiYjY3YWU4NSxcbiAgICAgICAgaDIgPSAweDNjNmVmMzcyLFxuICAgICAgICBoMyA9IDB4YTU0ZmY1M2EsXG4gICAgICAgIGg0ID0gMHg1MTBlNTI3ZixcbiAgICAgICAgaDUgPSAweDliMDU2ODhjLFxuICAgICAgICBoNiA9IDB4MWY4M2Q5YWIsXG4gICAgICAgIGg3ID0gMHg1YmUwY2QxOTtcbiAgICBjb25zdCBwYWRkZWRMZW5ndGggPSBNYXRoLmNlaWwoKGxlbmd0aCArIDkpIC8gNjQpICogNjQ7XG4gICAgY29uc3QgcGFkZGVkID0gbmV3IFVpbnQ4QXJyYXkocGFkZGVkTGVuZ3RoKTtcbiAgICBsZXQgaSwgajtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgcGFkZGVkW2ldID0gZGF0YVtvZmZzZXQrK107XG4gICAgfVxuXG4gICAgcGFkZGVkW2krK10gPSAweDgwO1xuICAgIGNvbnN0IG4gPSBwYWRkZWRMZW5ndGggLSA4O1xuXG4gICAgd2hpbGUgKGkgPCBuKSB7XG4gICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgfVxuXG4gICAgcGFkZGVkW2krK10gPSAwO1xuICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4+IDI5ICYgMHhmZjtcbiAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+PiAyMSAmIDB4ZmY7XG4gICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4gMTMgJiAweGZmO1xuICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+IDUgJiAweGZmO1xuICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoIDw8IDMgJiAweGZmO1xuICAgIGNvbnN0IHcgPSBuZXcgVWludDMyQXJyYXkoNjQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHBhZGRlZExlbmd0aDspIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICAgIHdbal0gPSBwYWRkZWRbaV0gPDwgMjQgfCBwYWRkZWRbaSArIDFdIDw8IDE2IHwgcGFkZGVkW2kgKyAyXSA8PCA4IHwgcGFkZGVkW2kgKyAzXTtcbiAgICAgICAgaSArPSA0O1xuICAgICAgfVxuXG4gICAgICBmb3IgKGogPSAxNjsgaiA8IDY0OyArK2opIHtcbiAgICAgICAgd1tqXSA9IGxpdHRsZVNpZ21hUHJpbWUod1tqIC0gMl0pICsgd1tqIC0gN10gKyBsaXR0bGVTaWdtYSh3W2ogLSAxNV0pICsgd1tqIC0gMTZdIHwgMDtcbiAgICAgIH1cblxuICAgICAgbGV0IGEgPSBoMCxcbiAgICAgICAgICBiID0gaDEsXG4gICAgICAgICAgYyA9IGgyLFxuICAgICAgICAgIGQgPSBoMyxcbiAgICAgICAgICBlID0gaDQsXG4gICAgICAgICAgZiA9IGg1LFxuICAgICAgICAgIGcgPSBoNixcbiAgICAgICAgICBoID0gaDcsXG4gICAgICAgICAgdDEsXG4gICAgICAgICAgdDI7XG5cbiAgICAgIGZvciAoaiA9IDA7IGogPCA2NDsgKytqKSB7XG4gICAgICAgIHQxID0gaCArIHNpZ21hUHJpbWUoZSkgKyBjaChlLCBmLCBnKSArIGtbal0gKyB3W2pdO1xuICAgICAgICB0MiA9IHNpZ21hKGEpICsgbWFqKGEsIGIsIGMpO1xuICAgICAgICBoID0gZztcbiAgICAgICAgZyA9IGY7XG4gICAgICAgIGYgPSBlO1xuICAgICAgICBlID0gZCArIHQxIHwgMDtcbiAgICAgICAgZCA9IGM7XG4gICAgICAgIGMgPSBiO1xuICAgICAgICBiID0gYTtcbiAgICAgICAgYSA9IHQxICsgdDIgfCAwO1xuICAgICAgfVxuXG4gICAgICBoMCA9IGgwICsgYSB8IDA7XG4gICAgICBoMSA9IGgxICsgYiB8IDA7XG4gICAgICBoMiA9IGgyICsgYyB8IDA7XG4gICAgICBoMyA9IGgzICsgZCB8IDA7XG4gICAgICBoNCA9IGg0ICsgZSB8IDA7XG4gICAgICBoNSA9IGg1ICsgZiB8IDA7XG4gICAgICBoNiA9IGg2ICsgZyB8IDA7XG4gICAgICBoNyA9IGg3ICsgaCB8IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFtoMCA+PiAyNCAmIDB4RkYsIGgwID4+IDE2ICYgMHhGRiwgaDAgPj4gOCAmIDB4RkYsIGgwICYgMHhGRiwgaDEgPj4gMjQgJiAweEZGLCBoMSA+PiAxNiAmIDB4RkYsIGgxID4+IDggJiAweEZGLCBoMSAmIDB4RkYsIGgyID4+IDI0ICYgMHhGRiwgaDIgPj4gMTYgJiAweEZGLCBoMiA+PiA4ICYgMHhGRiwgaDIgJiAweEZGLCBoMyA+PiAyNCAmIDB4RkYsIGgzID4+IDE2ICYgMHhGRiwgaDMgPj4gOCAmIDB4RkYsIGgzICYgMHhGRiwgaDQgPj4gMjQgJiAweEZGLCBoNCA+PiAxNiAmIDB4RkYsIGg0ID4+IDggJiAweEZGLCBoNCAmIDB4RkYsIGg1ID4+IDI0ICYgMHhGRiwgaDUgPj4gMTYgJiAweEZGLCBoNSA+PiA4ICYgMHhGRiwgaDUgJiAweEZGLCBoNiA+PiAyNCAmIDB4RkYsIGg2ID4+IDE2ICYgMHhGRiwgaDYgPj4gOCAmIDB4RkYsIGg2ICYgMHhGRiwgaDcgPj4gMjQgJiAweEZGLCBoNyA+PiAxNiAmIDB4RkYsIGg3ID4+IDggJiAweEZGLCBoNyAmIDB4RkZdKTtcbiAgfVxuXG4gIHJldHVybiBoYXNoO1xufSgpO1xuXG5leHBvcnRzLmNhbGN1bGF0ZVNIQTI1NiA9IGNhbGN1bGF0ZVNIQTI1NjtcblxuY29uc3QgY2FsY3VsYXRlU0hBNTEyID0gZnVuY3Rpb24gY2FsY3VsYXRlU0hBNTEyQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gY2gocmVzdWx0LCB4LCB5LCB6LCB0bXApIHtcbiAgICByZXN1bHQuYXNzaWduKHgpO1xuICAgIHJlc3VsdC5hbmQoeSk7XG4gICAgdG1wLmFzc2lnbih4KTtcbiAgICB0bXAubm90KCk7XG4gICAgdG1wLmFuZCh6KTtcbiAgICByZXN1bHQueG9yKHRtcCk7XG4gIH1cblxuICBmdW5jdGlvbiBtYWoocmVzdWx0LCB4LCB5LCB6LCB0bXApIHtcbiAgICByZXN1bHQuYXNzaWduKHgpO1xuICAgIHJlc3VsdC5hbmQoeSk7XG4gICAgdG1wLmFzc2lnbih4KTtcbiAgICB0bXAuYW5kKHopO1xuICAgIHJlc3VsdC54b3IodG1wKTtcbiAgICB0bXAuYXNzaWduKHkpO1xuICAgIHRtcC5hbmQoeik7XG4gICAgcmVzdWx0Lnhvcih0bXApO1xuICB9XG5cbiAgZnVuY3Rpb24gc2lnbWEocmVzdWx0LCB4LCB0bXApIHtcbiAgICByZXN1bHQuYXNzaWduKHgpO1xuICAgIHJlc3VsdC5yb3RhdGVSaWdodCgyOCk7XG4gICAgdG1wLmFzc2lnbih4KTtcbiAgICB0bXAucm90YXRlUmlnaHQoMzQpO1xuICAgIHJlc3VsdC54b3IodG1wKTtcbiAgICB0bXAuYXNzaWduKHgpO1xuICAgIHRtcC5yb3RhdGVSaWdodCgzOSk7XG4gICAgcmVzdWx0Lnhvcih0bXApO1xuICB9XG5cbiAgZnVuY3Rpb24gc2lnbWFQcmltZShyZXN1bHQsIHgsIHRtcCkge1xuICAgIHJlc3VsdC5hc3NpZ24oeCk7XG4gICAgcmVzdWx0LnJvdGF0ZVJpZ2h0KDE0KTtcbiAgICB0bXAuYXNzaWduKHgpO1xuICAgIHRtcC5yb3RhdGVSaWdodCgxOCk7XG4gICAgcmVzdWx0Lnhvcih0bXApO1xuICAgIHRtcC5hc3NpZ24oeCk7XG4gICAgdG1wLnJvdGF0ZVJpZ2h0KDQxKTtcbiAgICByZXN1bHQueG9yKHRtcCk7XG4gIH1cblxuICBmdW5jdGlvbiBsaXR0bGVTaWdtYShyZXN1bHQsIHgsIHRtcCkge1xuICAgIHJlc3VsdC5hc3NpZ24oeCk7XG4gICAgcmVzdWx0LnJvdGF0ZVJpZ2h0KDEpO1xuICAgIHRtcC5hc3NpZ24oeCk7XG4gICAgdG1wLnJvdGF0ZVJpZ2h0KDgpO1xuICAgIHJlc3VsdC54b3IodG1wKTtcbiAgICB0bXAuYXNzaWduKHgpO1xuICAgIHRtcC5zaGlmdFJpZ2h0KDcpO1xuICAgIHJlc3VsdC54b3IodG1wKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpdHRsZVNpZ21hUHJpbWUocmVzdWx0LCB4LCB0bXApIHtcbiAgICByZXN1bHQuYXNzaWduKHgpO1xuICAgIHJlc3VsdC5yb3RhdGVSaWdodCgxOSk7XG4gICAgdG1wLmFzc2lnbih4KTtcbiAgICB0bXAucm90YXRlUmlnaHQoNjEpO1xuICAgIHJlc3VsdC54b3IodG1wKTtcbiAgICB0bXAuYXNzaWduKHgpO1xuICAgIHRtcC5zaGlmdFJpZ2h0KDYpO1xuICAgIHJlc3VsdC54b3IodG1wKTtcbiAgfVxuXG4gIGNvbnN0IGsgPSBbbmV3IFdvcmQ2NCgweDQyOGEyZjk4LCAweGQ3MjhhZTIyKSwgbmV3IFdvcmQ2NCgweDcxMzc0NDkxLCAweDIzZWY2NWNkKSwgbmV3IFdvcmQ2NCgweGI1YzBmYmNmLCAweGVjNGQzYjJmKSwgbmV3IFdvcmQ2NCgweGU5YjVkYmE1LCAweDgxODlkYmJjKSwgbmV3IFdvcmQ2NCgweDM5NTZjMjViLCAweGYzNDhiNTM4KSwgbmV3IFdvcmQ2NCgweDU5ZjExMWYxLCAweGI2MDVkMDE5KSwgbmV3IFdvcmQ2NCgweDkyM2Y4MmE0LCAweGFmMTk0ZjliKSwgbmV3IFdvcmQ2NCgweGFiMWM1ZWQ1LCAweGRhNmQ4MTE4KSwgbmV3IFdvcmQ2NCgweGQ4MDdhYTk4LCAweGEzMDMwMjQyKSwgbmV3IFdvcmQ2NCgweDEyODM1YjAxLCAweDQ1NzA2ZmJlKSwgbmV3IFdvcmQ2NCgweDI0MzE4NWJlLCAweDRlZTRiMjhjKSwgbmV3IFdvcmQ2NCgweDU1MGM3ZGMzLCAweGQ1ZmZiNGUyKSwgbmV3IFdvcmQ2NCgweDcyYmU1ZDc0LCAweGYyN2I4OTZmKSwgbmV3IFdvcmQ2NCgweDgwZGViMWZlLCAweDNiMTY5NmIxKSwgbmV3IFdvcmQ2NCgweDliZGMwNmE3LCAweDI1YzcxMjM1KSwgbmV3IFdvcmQ2NCgweGMxOWJmMTc0LCAweGNmNjkyNjk0KSwgbmV3IFdvcmQ2NCgweGU0OWI2OWMxLCAweDllZjE0YWQyKSwgbmV3IFdvcmQ2NCgweGVmYmU0Nzg2LCAweDM4NGYyNWUzKSwgbmV3IFdvcmQ2NCgweDBmYzE5ZGM2LCAweDhiOGNkNWI1KSwgbmV3IFdvcmQ2NCgweDI0MGNhMWNjLCAweDc3YWM5YzY1KSwgbmV3IFdvcmQ2NCgweDJkZTkyYzZmLCAweDU5MmIwMjc1KSwgbmV3IFdvcmQ2NCgweDRhNzQ4NGFhLCAweDZlYTZlNDgzKSwgbmV3IFdvcmQ2NCgweDVjYjBhOWRjLCAweGJkNDFmYmQ0KSwgbmV3IFdvcmQ2NCgweDc2Zjk4OGRhLCAweDgzMTE1M2I1KSwgbmV3IFdvcmQ2NCgweDk4M2U1MTUyLCAweGVlNjZkZmFiKSwgbmV3IFdvcmQ2NCgweGE4MzFjNjZkLCAweDJkYjQzMjEwKSwgbmV3IFdvcmQ2NCgweGIwMDMyN2M4LCAweDk4ZmIyMTNmKSwgbmV3IFdvcmQ2NCgweGJmNTk3ZmM3LCAweGJlZWYwZWU0KSwgbmV3IFdvcmQ2NCgweGM2ZTAwYmYzLCAweDNkYTg4ZmMyKSwgbmV3IFdvcmQ2NCgweGQ1YTc5MTQ3LCAweDkzMGFhNzI1KSwgbmV3IFdvcmQ2NCgweDA2Y2E2MzUxLCAweGUwMDM4MjZmKSwgbmV3IFdvcmQ2NCgweDE0MjkyOTY3LCAweDBhMGU2ZTcwKSwgbmV3IFdvcmQ2NCgweDI3YjcwYTg1LCAweDQ2ZDIyZmZjKSwgbmV3IFdvcmQ2NCgweDJlMWIyMTM4LCAweDVjMjZjOTI2KSwgbmV3IFdvcmQ2NCgweDRkMmM2ZGZjLCAweDVhYzQyYWVkKSwgbmV3IFdvcmQ2NCgweDUzMzgwZDEzLCAweDlkOTViM2RmKSwgbmV3IFdvcmQ2NCgweDY1MGE3MzU0LCAweDhiYWY2M2RlKSwgbmV3IFdvcmQ2NCgweDc2NmEwYWJiLCAweDNjNzdiMmE4KSwgbmV3IFdvcmQ2NCgweDgxYzJjOTJlLCAweDQ3ZWRhZWU2KSwgbmV3IFdvcmQ2NCgweDkyNzIyYzg1LCAweDE0ODIzNTNiKSwgbmV3IFdvcmQ2NCgweGEyYmZlOGExLCAweDRjZjEwMzY0KSwgbmV3IFdvcmQ2NCgweGE4MWE2NjRiLCAweGJjNDIzMDAxKSwgbmV3IFdvcmQ2NCgweGMyNGI4YjcwLCAweGQwZjg5NzkxKSwgbmV3IFdvcmQ2NCgweGM3NmM1MWEzLCAweDA2NTRiZTMwKSwgbmV3IFdvcmQ2NCgweGQxOTJlODE5LCAweGQ2ZWY1MjE4KSwgbmV3IFdvcmQ2NCgweGQ2OTkwNjI0LCAweDU1NjVhOTEwKSwgbmV3IFdvcmQ2NCgweGY0MGUzNTg1LCAweDU3NzEyMDJhKSwgbmV3IFdvcmQ2NCgweDEwNmFhMDcwLCAweDMyYmJkMWI4KSwgbmV3IFdvcmQ2NCgweDE5YTRjMTE2LCAweGI4ZDJkMGM4KSwgbmV3IFdvcmQ2NCgweDFlMzc2YzA4LCAweDUxNDFhYjUzKSwgbmV3IFdvcmQ2NCgweDI3NDg3NzRjLCAweGRmOGVlYjk5KSwgbmV3IFdvcmQ2NCgweDM0YjBiY2I1LCAweGUxOWI0OGE4KSwgbmV3IFdvcmQ2NCgweDM5MWMwY2IzLCAweGM1Yzk1YTYzKSwgbmV3IFdvcmQ2NCgweDRlZDhhYTRhLCAweGUzNDE4YWNiKSwgbmV3IFdvcmQ2NCgweDViOWNjYTRmLCAweDc3NjNlMzczKSwgbmV3IFdvcmQ2NCgweDY4MmU2ZmYzLCAweGQ2YjJiOGEzKSwgbmV3IFdvcmQ2NCgweDc0OGY4MmVlLCAweDVkZWZiMmZjKSwgbmV3IFdvcmQ2NCgweDc4YTU2MzZmLCAweDQzMTcyZjYwKSwgbmV3IFdvcmQ2NCgweDg0Yzg3ODE0LCAweGExZjBhYjcyKSwgbmV3IFdvcmQ2NCgweDhjYzcwMjA4LCAweDFhNjQzOWVjKSwgbmV3IFdvcmQ2NCgweDkwYmVmZmZhLCAweDIzNjMxZTI4KSwgbmV3IFdvcmQ2NCgweGE0NTA2Y2ViLCAweGRlODJiZGU5KSwgbmV3IFdvcmQ2NCgweGJlZjlhM2Y3LCAweGIyYzY3OTE1KSwgbmV3IFdvcmQ2NCgweGM2NzE3OGYyLCAweGUzNzI1MzJiKSwgbmV3IFdvcmQ2NCgweGNhMjczZWNlLCAweGVhMjY2MTljKSwgbmV3IFdvcmQ2NCgweGQxODZiOGM3LCAweDIxYzBjMjA3KSwgbmV3IFdvcmQ2NCgweGVhZGE3ZGQ2LCAweGNkZTBlYjFlKSwgbmV3IFdvcmQ2NCgweGY1N2Q0ZjdmLCAweGVlNmVkMTc4KSwgbmV3IFdvcmQ2NCgweDA2ZjA2N2FhLCAweDcyMTc2ZmJhKSwgbmV3IFdvcmQ2NCgweDBhNjM3ZGM1LCAweGEyYzg5OGE2KSwgbmV3IFdvcmQ2NCgweDExM2Y5ODA0LCAweGJlZjkwZGFlKSwgbmV3IFdvcmQ2NCgweDFiNzEwYjM1LCAweDEzMWM0NzFiKSwgbmV3IFdvcmQ2NCgweDI4ZGI3N2Y1LCAweDIzMDQ3ZDg0KSwgbmV3IFdvcmQ2NCgweDMyY2FhYjdiLCAweDQwYzcyNDkzKSwgbmV3IFdvcmQ2NCgweDNjOWViZTBhLCAweDE1YzliZWJjKSwgbmV3IFdvcmQ2NCgweDQzMWQ2N2M0LCAweDljMTAwZDRjKSwgbmV3IFdvcmQ2NCgweDRjYzVkNGJlLCAweGNiM2U0MmI2KSwgbmV3IFdvcmQ2NCgweDU5N2YyOTljLCAweGZjNjU3ZTJhKSwgbmV3IFdvcmQ2NCgweDVmY2I2ZmFiLCAweDNhZDZmYWVjKSwgbmV3IFdvcmQ2NCgweDZjNDQxOThjLCAweDRhNDc1ODE3KV07XG5cbiAgZnVuY3Rpb24gaGFzaChkYXRhLCBvZmZzZXQsIGxlbmd0aCwgbW9kZTM4NCA9IGZhbHNlKSB7XG4gICAgbGV0IGgwLCBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBoNztcblxuICAgIGlmICghbW9kZTM4NCkge1xuICAgICAgaDAgPSBuZXcgV29yZDY0KDB4NmEwOWU2NjcsIDB4ZjNiY2M5MDgpO1xuICAgICAgaDEgPSBuZXcgV29yZDY0KDB4YmI2N2FlODUsIDB4ODRjYWE3M2IpO1xuICAgICAgaDIgPSBuZXcgV29yZDY0KDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIpO1xuICAgICAgaDMgPSBuZXcgV29yZDY0KDB4YTU0ZmY1M2EsIDB4NWYxZDM2ZjEpO1xuICAgICAgaDQgPSBuZXcgV29yZDY0KDB4NTEwZTUyN2YsIDB4YWRlNjgyZDEpO1xuICAgICAgaDUgPSBuZXcgV29yZDY0KDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYpO1xuICAgICAgaDYgPSBuZXcgV29yZDY0KDB4MWY4M2Q5YWIsIDB4ZmI0MWJkNmIpO1xuICAgICAgaDcgPSBuZXcgV29yZDY0KDB4NWJlMGNkMTksIDB4MTM3ZTIxNzkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoMCA9IG5ldyBXb3JkNjQoMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCk7XG4gICAgICBoMSA9IG5ldyBXb3JkNjQoMHg2MjlhMjkyYSwgMHgzNjdjZDUwNyk7XG4gICAgICBoMiA9IG5ldyBXb3JkNjQoMHg5MTU5MDE1YSwgMHgzMDcwZGQxNyk7XG4gICAgICBoMyA9IG5ldyBXb3JkNjQoMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSk7XG4gICAgICBoNCA9IG5ldyBXb3JkNjQoMHg2NzMzMjY2NywgMHhmZmMwMGIzMSk7XG4gICAgICBoNSA9IG5ldyBXb3JkNjQoMHg4ZWI0NGE4NywgMHg2ODU4MTUxMSk7XG4gICAgICBoNiA9IG5ldyBXb3JkNjQoMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyk7XG4gICAgICBoNyA9IG5ldyBXb3JkNjQoMHg0N2I1NDgxZCwgMHhiZWZhNGZhNCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFkZGVkTGVuZ3RoID0gTWF0aC5jZWlsKChsZW5ndGggKyAxNykgLyAxMjgpICogMTI4O1xuICAgIGNvbnN0IHBhZGRlZCA9IG5ldyBVaW50OEFycmF5KHBhZGRlZExlbmd0aCk7XG4gICAgbGV0IGksIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIHBhZGRlZFtpXSA9IGRhdGFbb2Zmc2V0KytdO1xuICAgIH1cblxuICAgIHBhZGRlZFtpKytdID0gMHg4MDtcbiAgICBjb25zdCBuID0gcGFkZGVkTGVuZ3RoIC0gMTY7XG5cbiAgICB3aGlsZSAoaSA8IG4pIHtcbiAgICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICB9XG5cbiAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgcGFkZGVkW2krK10gPSAwO1xuICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgcGFkZGVkW2krK10gPSAwO1xuICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgcGFkZGVkW2krK10gPSAwO1xuICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgcGFkZGVkW2krK10gPSAwO1xuICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+PiAyOSAmIDB4ZmY7XG4gICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4gMjEgJiAweGZmO1xuICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+IDEzICYgMHhmZjtcbiAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+PiA1ICYgMHhmZjtcbiAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA8PCAzICYgMHhmZjtcbiAgICBjb25zdCB3ID0gbmV3IEFycmF5KDgwKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCA4MDsgaSsrKSB7XG4gICAgICB3W2ldID0gbmV3IFdvcmQ2NCgwLCAwKTtcbiAgICB9XG5cbiAgICBsZXQgYSA9IG5ldyBXb3JkNjQoMCwgMCksXG4gICAgICAgIGIgPSBuZXcgV29yZDY0KDAsIDApLFxuICAgICAgICBjID0gbmV3IFdvcmQ2NCgwLCAwKTtcbiAgICBsZXQgZCA9IG5ldyBXb3JkNjQoMCwgMCksXG4gICAgICAgIGUgPSBuZXcgV29yZDY0KDAsIDApLFxuICAgICAgICBmID0gbmV3IFdvcmQ2NCgwLCAwKTtcbiAgICBsZXQgZyA9IG5ldyBXb3JkNjQoMCwgMCksXG4gICAgICAgIGggPSBuZXcgV29yZDY0KDAsIDApO1xuICAgIGNvbnN0IHQxID0gbmV3IFdvcmQ2NCgwLCAwKSxcbiAgICAgICAgICB0MiA9IG5ldyBXb3JkNjQoMCwgMCk7XG4gICAgY29uc3QgdG1wMSA9IG5ldyBXb3JkNjQoMCwgMCksXG4gICAgICAgICAgdG1wMiA9IG5ldyBXb3JkNjQoMCwgMCk7XG4gICAgbGV0IHRtcDM7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcGFkZGVkTGVuZ3RoOykge1xuICAgICAgZm9yIChqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgICAgd1tqXS5oaWdoID0gcGFkZGVkW2ldIDw8IDI0IHwgcGFkZGVkW2kgKyAxXSA8PCAxNiB8IHBhZGRlZFtpICsgMl0gPDwgOCB8IHBhZGRlZFtpICsgM107XG4gICAgICAgIHdbal0ubG93ID0gcGFkZGVkW2kgKyA0XSA8PCAyNCB8IHBhZGRlZFtpICsgNV0gPDwgMTYgfCBwYWRkZWRbaSArIDZdIDw8IDggfCBwYWRkZWRbaSArIDddO1xuICAgICAgICBpICs9IDg7XG4gICAgICB9XG5cbiAgICAgIGZvciAoaiA9IDE2OyBqIDwgODA7ICsraikge1xuICAgICAgICB0bXAzID0gd1tqXTtcbiAgICAgICAgbGl0dGxlU2lnbWFQcmltZSh0bXAzLCB3W2ogLSAyXSwgdG1wMik7XG4gICAgICAgIHRtcDMuYWRkKHdbaiAtIDddKTtcbiAgICAgICAgbGl0dGxlU2lnbWEodG1wMSwgd1tqIC0gMTVdLCB0bXAyKTtcbiAgICAgICAgdG1wMy5hZGQodG1wMSk7XG4gICAgICAgIHRtcDMuYWRkKHdbaiAtIDE2XSk7XG4gICAgICB9XG5cbiAgICAgIGEuYXNzaWduKGgwKTtcbiAgICAgIGIuYXNzaWduKGgxKTtcbiAgICAgIGMuYXNzaWduKGgyKTtcbiAgICAgIGQuYXNzaWduKGgzKTtcbiAgICAgIGUuYXNzaWduKGg0KTtcbiAgICAgIGYuYXNzaWduKGg1KTtcbiAgICAgIGcuYXNzaWduKGg2KTtcbiAgICAgIGguYXNzaWduKGg3KTtcblxuICAgICAgZm9yIChqID0gMDsgaiA8IDgwOyArK2opIHtcbiAgICAgICAgdDEuYXNzaWduKGgpO1xuICAgICAgICBzaWdtYVByaW1lKHRtcDEsIGUsIHRtcDIpO1xuICAgICAgICB0MS5hZGQodG1wMSk7XG4gICAgICAgIGNoKHRtcDEsIGUsIGYsIGcsIHRtcDIpO1xuICAgICAgICB0MS5hZGQodG1wMSk7XG4gICAgICAgIHQxLmFkZChrW2pdKTtcbiAgICAgICAgdDEuYWRkKHdbal0pO1xuICAgICAgICBzaWdtYSh0MiwgYSwgdG1wMik7XG4gICAgICAgIG1haih0bXAxLCBhLCBiLCBjLCB0bXAyKTtcbiAgICAgICAgdDIuYWRkKHRtcDEpO1xuICAgICAgICB0bXAzID0gaDtcbiAgICAgICAgaCA9IGc7XG4gICAgICAgIGcgPSBmO1xuICAgICAgICBmID0gZTtcbiAgICAgICAgZC5hZGQodDEpO1xuICAgICAgICBlID0gZDtcbiAgICAgICAgZCA9IGM7XG4gICAgICAgIGMgPSBiO1xuICAgICAgICBiID0gYTtcbiAgICAgICAgdG1wMy5hc3NpZ24odDEpO1xuICAgICAgICB0bXAzLmFkZCh0Mik7XG4gICAgICAgIGEgPSB0bXAzO1xuICAgICAgfVxuXG4gICAgICBoMC5hZGQoYSk7XG4gICAgICBoMS5hZGQoYik7XG4gICAgICBoMi5hZGQoYyk7XG4gICAgICBoMy5hZGQoZCk7XG4gICAgICBoNC5hZGQoZSk7XG4gICAgICBoNS5hZGQoZik7XG4gICAgICBoNi5hZGQoZyk7XG4gICAgICBoNy5hZGQoaCk7XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdDtcblxuICAgIGlmICghbW9kZTM4NCkge1xuICAgICAgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICAgICAgaDAuY29weVRvKHJlc3VsdCwgMCk7XG4gICAgICBoMS5jb3B5VG8ocmVzdWx0LCA4KTtcbiAgICAgIGgyLmNvcHlUbyhyZXN1bHQsIDE2KTtcbiAgICAgIGgzLmNvcHlUbyhyZXN1bHQsIDI0KTtcbiAgICAgIGg0LmNvcHlUbyhyZXN1bHQsIDMyKTtcbiAgICAgIGg1LmNvcHlUbyhyZXN1bHQsIDQwKTtcbiAgICAgIGg2LmNvcHlUbyhyZXN1bHQsIDQ4KTtcbiAgICAgIGg3LmNvcHlUbyhyZXN1bHQsIDU2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoNDgpO1xuICAgICAgaDAuY29weVRvKHJlc3VsdCwgMCk7XG4gICAgICBoMS5jb3B5VG8ocmVzdWx0LCA4KTtcbiAgICAgIGgyLmNvcHlUbyhyZXN1bHQsIDE2KTtcbiAgICAgIGgzLmNvcHlUbyhyZXN1bHQsIDI0KTtcbiAgICAgIGg0LmNvcHlUbyhyZXN1bHQsIDMyKTtcbiAgICAgIGg1LmNvcHlUbyhyZXN1bHQsIDQwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIGhhc2g7XG59KCk7XG5cbmV4cG9ydHMuY2FsY3VsYXRlU0hBNTEyID0gY2FsY3VsYXRlU0hBNTEyO1xuXG5mdW5jdGlvbiBjYWxjdWxhdGVTSEEzODQoZGF0YSwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGNhbGN1bGF0ZVNIQTUxMihkYXRhLCBvZmZzZXQsIGxlbmd0aCwgdHJ1ZSk7XG59XG5cbmNsYXNzIE51bGxDaXBoZXIge1xuICBkZWNyeXB0QmxvY2soZGF0YSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgZW5jcnlwdChkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxufVxuXG5jbGFzcyBBRVNCYXNlQ2lwaGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IEFFU0Jhc2VDaXBoZXIpIHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDYW5ub3QgaW5pdGlhbGl6ZSBBRVNCYXNlQ2lwaGVyLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zID0gbmV3IFVpbnQ4QXJyYXkoWzB4NjMsIDB4N2MsIDB4NzcsIDB4N2IsIDB4ZjIsIDB4NmIsIDB4NmYsIDB4YzUsIDB4MzAsIDB4MDEsIDB4NjcsIDB4MmIsIDB4ZmUsIDB4ZDcsIDB4YWIsIDB4NzYsIDB4Y2EsIDB4ODIsIDB4YzksIDB4N2QsIDB4ZmEsIDB4NTksIDB4NDcsIDB4ZjAsIDB4YWQsIDB4ZDQsIDB4YTIsIDB4YWYsIDB4OWMsIDB4YTQsIDB4NzIsIDB4YzAsIDB4YjcsIDB4ZmQsIDB4OTMsIDB4MjYsIDB4MzYsIDB4M2YsIDB4ZjcsIDB4Y2MsIDB4MzQsIDB4YTUsIDB4ZTUsIDB4ZjEsIDB4NzEsIDB4ZDgsIDB4MzEsIDB4MTUsIDB4MDQsIDB4YzcsIDB4MjMsIDB4YzMsIDB4MTgsIDB4OTYsIDB4MDUsIDB4OWEsIDB4MDcsIDB4MTIsIDB4ODAsIDB4ZTIsIDB4ZWIsIDB4MjcsIDB4YjIsIDB4NzUsIDB4MDksIDB4ODMsIDB4MmMsIDB4MWEsIDB4MWIsIDB4NmUsIDB4NWEsIDB4YTAsIDB4NTIsIDB4M2IsIDB4ZDYsIDB4YjMsIDB4MjksIDB4ZTMsIDB4MmYsIDB4ODQsIDB4NTMsIDB4ZDEsIDB4MDAsIDB4ZWQsIDB4MjAsIDB4ZmMsIDB4YjEsIDB4NWIsIDB4NmEsIDB4Y2IsIDB4YmUsIDB4MzksIDB4NGEsIDB4NGMsIDB4NTgsIDB4Y2YsIDB4ZDAsIDB4ZWYsIDB4YWEsIDB4ZmIsIDB4NDMsIDB4NGQsIDB4MzMsIDB4ODUsIDB4NDUsIDB4ZjksIDB4MDIsIDB4N2YsIDB4NTAsIDB4M2MsIDB4OWYsIDB4YTgsIDB4NTEsIDB4YTMsIDB4NDAsIDB4OGYsIDB4OTIsIDB4OWQsIDB4MzgsIDB4ZjUsIDB4YmMsIDB4YjYsIDB4ZGEsIDB4MjEsIDB4MTAsIDB4ZmYsIDB4ZjMsIDB4ZDIsIDB4Y2QsIDB4MGMsIDB4MTMsIDB4ZWMsIDB4NWYsIDB4OTcsIDB4NDQsIDB4MTcsIDB4YzQsIDB4YTcsIDB4N2UsIDB4M2QsIDB4NjQsIDB4NWQsIDB4MTksIDB4NzMsIDB4NjAsIDB4ODEsIDB4NGYsIDB4ZGMsIDB4MjIsIDB4MmEsIDB4OTAsIDB4ODgsIDB4NDYsIDB4ZWUsIDB4YjgsIDB4MTQsIDB4ZGUsIDB4NWUsIDB4MGIsIDB4ZGIsIDB4ZTAsIDB4MzIsIDB4M2EsIDB4MGEsIDB4NDksIDB4MDYsIDB4MjQsIDB4NWMsIDB4YzIsIDB4ZDMsIDB4YWMsIDB4NjIsIDB4OTEsIDB4OTUsIDB4ZTQsIDB4NzksIDB4ZTcsIDB4YzgsIDB4MzcsIDB4NmQsIDB4OGQsIDB4ZDUsIDB4NGUsIDB4YTksIDB4NmMsIDB4NTYsIDB4ZjQsIDB4ZWEsIDB4NjUsIDB4N2EsIDB4YWUsIDB4MDgsIDB4YmEsIDB4NzgsIDB4MjUsIDB4MmUsIDB4MWMsIDB4YTYsIDB4YjQsIDB4YzYsIDB4ZTgsIDB4ZGQsIDB4NzQsIDB4MWYsIDB4NGIsIDB4YmQsIDB4OGIsIDB4OGEsIDB4NzAsIDB4M2UsIDB4YjUsIDB4NjYsIDB4NDgsIDB4MDMsIDB4ZjYsIDB4MGUsIDB4NjEsIDB4MzUsIDB4NTcsIDB4YjksIDB4ODYsIDB4YzEsIDB4MWQsIDB4OWUsIDB4ZTEsIDB4ZjgsIDB4OTgsIDB4MTEsIDB4NjksIDB4ZDksIDB4OGUsIDB4OTQsIDB4OWIsIDB4MWUsIDB4ODcsIDB4ZTksIDB4Y2UsIDB4NTUsIDB4MjgsIDB4ZGYsIDB4OGMsIDB4YTEsIDB4ODksIDB4MGQsIDB4YmYsIDB4ZTYsIDB4NDIsIDB4NjgsIDB4NDEsIDB4OTksIDB4MmQsIDB4MGYsIDB4YjAsIDB4NTQsIDB4YmIsIDB4MTZdKTtcbiAgICB0aGlzLl9pbnZfcyA9IG5ldyBVaW50OEFycmF5KFsweDUyLCAweDA5LCAweDZhLCAweGQ1LCAweDMwLCAweDM2LCAweGE1LCAweDM4LCAweGJmLCAweDQwLCAweGEzLCAweDllLCAweDgxLCAweGYzLCAweGQ3LCAweGZiLCAweDdjLCAweGUzLCAweDM5LCAweDgyLCAweDliLCAweDJmLCAweGZmLCAweDg3LCAweDM0LCAweDhlLCAweDQzLCAweDQ0LCAweGM0LCAweGRlLCAweGU5LCAweGNiLCAweDU0LCAweDdiLCAweDk0LCAweDMyLCAweGE2LCAweGMyLCAweDIzLCAweDNkLCAweGVlLCAweDRjLCAweDk1LCAweDBiLCAweDQyLCAweGZhLCAweGMzLCAweDRlLCAweDA4LCAweDJlLCAweGExLCAweDY2LCAweDI4LCAweGQ5LCAweDI0LCAweGIyLCAweDc2LCAweDViLCAweGEyLCAweDQ5LCAweDZkLCAweDhiLCAweGQxLCAweDI1LCAweDcyLCAweGY4LCAweGY2LCAweDY0LCAweDg2LCAweDY4LCAweDk4LCAweDE2LCAweGQ0LCAweGE0LCAweDVjLCAweGNjLCAweDVkLCAweDY1LCAweGI2LCAweDkyLCAweDZjLCAweDcwLCAweDQ4LCAweDUwLCAweGZkLCAweGVkLCAweGI5LCAweGRhLCAweDVlLCAweDE1LCAweDQ2LCAweDU3LCAweGE3LCAweDhkLCAweDlkLCAweDg0LCAweDkwLCAweGQ4LCAweGFiLCAweDAwLCAweDhjLCAweGJjLCAweGQzLCAweDBhLCAweGY3LCAweGU0LCAweDU4LCAweDA1LCAweGI4LCAweGIzLCAweDQ1LCAweDA2LCAweGQwLCAweDJjLCAweDFlLCAweDhmLCAweGNhLCAweDNmLCAweDBmLCAweDAyLCAweGMxLCAweGFmLCAweGJkLCAweDAzLCAweDAxLCAweDEzLCAweDhhLCAweDZiLCAweDNhLCAweDkxLCAweDExLCAweDQxLCAweDRmLCAweDY3LCAweGRjLCAweGVhLCAweDk3LCAweGYyLCAweGNmLCAweGNlLCAweGYwLCAweGI0LCAweGU2LCAweDczLCAweDk2LCAweGFjLCAweDc0LCAweDIyLCAweGU3LCAweGFkLCAweDM1LCAweDg1LCAweGUyLCAweGY5LCAweDM3LCAweGU4LCAweDFjLCAweDc1LCAweGRmLCAweDZlLCAweDQ3LCAweGYxLCAweDFhLCAweDcxLCAweDFkLCAweDI5LCAweGM1LCAweDg5LCAweDZmLCAweGI3LCAweDYyLCAweDBlLCAweGFhLCAweDE4LCAweGJlLCAweDFiLCAweGZjLCAweDU2LCAweDNlLCAweDRiLCAweGM2LCAweGQyLCAweDc5LCAweDIwLCAweDlhLCAweGRiLCAweGMwLCAweGZlLCAweDc4LCAweGNkLCAweDVhLCAweGY0LCAweDFmLCAweGRkLCAweGE4LCAweDMzLCAweDg4LCAweDA3LCAweGM3LCAweDMxLCAweGIxLCAweDEyLCAweDEwLCAweDU5LCAweDI3LCAweDgwLCAweGVjLCAweDVmLCAweDYwLCAweDUxLCAweDdmLCAweGE5LCAweDE5LCAweGI1LCAweDRhLCAweDBkLCAweDJkLCAweGU1LCAweDdhLCAweDlmLCAweDkzLCAweGM5LCAweDljLCAweGVmLCAweGEwLCAweGUwLCAweDNiLCAweDRkLCAweGFlLCAweDJhLCAweGY1LCAweGIwLCAweGM4LCAweGViLCAweGJiLCAweDNjLCAweDgzLCAweDUzLCAweDk5LCAweDYxLCAweDE3LCAweDJiLCAweDA0LCAweDdlLCAweGJhLCAweDc3LCAweGQ2LCAweDI2LCAweGUxLCAweDY5LCAweDE0LCAweDYzLCAweDU1LCAweDIxLCAweDBjLCAweDdkXSk7XG4gICAgdGhpcy5fbWl4ID0gbmV3IFVpbnQzMkFycmF5KFsweDAwMDAwMDAwLCAweDBlMDkwZDBiLCAweDFjMTIxYTE2LCAweDEyMWIxNzFkLCAweDM4MjQzNDJjLCAweDM2MmQzOTI3LCAweDI0MzYyZTNhLCAweDJhM2YyMzMxLCAweDcwNDg2ODU4LCAweDdlNDE2NTUzLCAweDZjNWE3MjRlLCAweDYyNTM3ZjQ1LCAweDQ4NmM1Yzc0LCAweDQ2NjU1MTdmLCAweDU0N2U0NjYyLCAweDVhNzc0YjY5LCAweGUwOTBkMGIwLCAweGVlOTlkZGJiLCAweGZjODJjYWE2LCAweGYyOGJjN2FkLCAweGQ4YjRlNDljLCAweGQ2YmRlOTk3LCAweGM0YTZmZThhLCAweGNhYWZmMzgxLCAweDkwZDhiOGU4LCAweDllZDFiNWUzLCAweDhjY2FhMmZlLCAweDgyYzNhZmY1LCAweGE4ZmM4Y2M0LCAweGE2ZjU4MWNmLCAweGI0ZWU5NmQyLCAweGJhZTc5YmQ5LCAweGRiM2JiYjdiLCAweGQ1MzJiNjcwLCAweGM3MjlhMTZkLCAweGM5MjBhYzY2LCAweGUzMWY4ZjU3LCAweGVkMTY4MjVjLCAweGZmMGQ5NTQxLCAweGYxMDQ5ODRhLCAweGFiNzNkMzIzLCAweGE1N2FkZTI4LCAweGI3NjFjOTM1LCAweGI5NjhjNDNlLCAweDkzNTdlNzBmLCAweDlkNWVlYTA0LCAweDhmNDVmZDE5LCAweDgxNGNmMDEyLCAweDNiYWI2YmNiLCAweDM1YTI2NmMwLCAweDI3Yjk3MWRkLCAweDI5YjA3Y2Q2LCAweDAzOGY1ZmU3LCAweDBkODY1MmVjLCAweDFmOWQ0NWYxLCAweDExOTQ0OGZhLCAweDRiZTMwMzkzLCAweDQ1ZWEwZTk4LCAweDU3ZjExOTg1LCAweDU5ZjgxNDhlLCAweDczYzczN2JmLCAweDdkY2UzYWI0LCAweDZmZDUyZGE5LCAweDYxZGMyMGEyLCAweGFkNzY2ZGY2LCAweGEzN2Y2MGZkLCAweGIxNjQ3N2UwLCAweGJmNmQ3YWViLCAweDk1NTI1OWRhLCAweDliNWI1NGQxLCAweDg5NDA0M2NjLCAweDg3NDk0ZWM3LCAweGRkM2UwNWFlLCAweGQzMzcwOGE1LCAweGMxMmMxZmI4LCAweGNmMjUxMmIzLCAweGU1MWEzMTgyLCAweGViMTMzYzg5LCAweGY5MDgyYjk0LCAweGY3MDEyNjlmLCAweDRkZTZiZDQ2LCAweDQzZWZiMDRkLCAweDUxZjRhNzUwLCAweDVmZmRhYTViLCAweDc1YzI4OTZhLCAweDdiY2I4NDYxLCAweDY5ZDA5MzdjLCAweDY3ZDk5ZTc3LCAweDNkYWVkNTFlLCAweDMzYTdkODE1LCAweDIxYmNjZjA4LCAweDJmYjVjMjAzLCAweDA1OGFlMTMyLCAweDBiODNlYzM5LCAweDE5OThmYjI0LCAweDE3OTFmNjJmLCAweDc2NGRkNjhkLCAweDc4NDRkYjg2LCAweDZhNWZjYzliLCAweDY0NTZjMTkwLCAweDRlNjllMmExLCAweDQwNjBlZmFhLCAweDUyN2JmOGI3LCAweDVjNzJmNWJjLCAweDA2MDViZWQ1LCAweDA4MGNiM2RlLCAweDFhMTdhNGMzLCAweDE0MWVhOWM4LCAweDNlMjE4YWY5LCAweDMwMjg4N2YyLCAweDIyMzM5MGVmLCAweDJjM2E5ZGU0LCAweDk2ZGQwNjNkLCAweDk4ZDQwYjM2LCAweDhhY2YxYzJiLCAweDg0YzYxMTIwLCAweGFlZjkzMjExLCAweGEwZjAzZjFhLCAweGIyZWIyODA3LCAweGJjZTIyNTBjLCAweGU2OTU2ZTY1LCAweGU4OWM2MzZlLCAweGZhODc3NDczLCAweGY0OGU3OTc4LCAweGRlYjE1YTQ5LCAweGQwYjg1NzQyLCAweGMyYTM0MDVmLCAweGNjYWE0ZDU0LCAweDQxZWNkYWY3LCAweDRmZTVkN2ZjLCAweDVkZmVjMGUxLCAweDUzZjdjZGVhLCAweDc5YzhlZWRiLCAweDc3YzFlM2QwLCAweDY1ZGFmNGNkLCAweDZiZDNmOWM2LCAweDMxYTRiMmFmLCAweDNmYWRiZmE0LCAweDJkYjZhOGI5LCAweDIzYmZhNWIyLCAweDA5ODA4NjgzLCAweDA3ODk4Yjg4LCAweDE1OTI5Yzk1LCAweDFiOWI5MTllLCAweGExN2MwYTQ3LCAweGFmNzUwNzRjLCAweGJkNmUxMDUxLCAweGIzNjcxZDVhLCAweDk5NTgzZTZiLCAweDk3NTEzMzYwLCAweDg1NGEyNDdkLCAweDhiNDMyOTc2LCAweGQxMzQ2MjFmLCAweGRmM2Q2ZjE0LCAweGNkMjY3ODA5LCAweGMzMmY3NTAyLCAweGU5MTA1NjMzLCAweGU3MTk1YjM4LCAweGY1MDI0YzI1LCAweGZiMGI0MTJlLCAweDlhZDc2MThjLCAweDk0ZGU2Yzg3LCAweDg2YzU3YjlhLCAweDg4Y2M3NjkxLCAweGEyZjM1NWEwLCAweGFjZmE1OGFiLCAweGJlZTE0ZmI2LCAweGIwZTg0MmJkLCAweGVhOWYwOWQ0LCAweGU0OTYwNGRmLCAweGY2OGQxM2MyLCAweGY4ODQxZWM5LCAweGQyYmIzZGY4LCAweGRjYjIzMGYzLCAweGNlYTkyN2VlLCAweGMwYTAyYWU1LCAweDdhNDdiMTNjLCAweDc0NGViYzM3LCAweDY2NTVhYjJhLCAweDY4NWNhNjIxLCAweDQyNjM4NTEwLCAweDRjNmE4ODFiLCAweDVlNzE5ZjA2LCAweDUwNzg5MjBkLCAweDBhMGZkOTY0LCAweDA0MDZkNDZmLCAweDE2MWRjMzcyLCAweDE4MTRjZTc5LCAweDMyMmJlZDQ4LCAweDNjMjJlMDQzLCAweDJlMzlmNzVlLCAweDIwMzBmYTU1LCAweGVjOWFiNzAxLCAweGUyOTNiYTBhLCAweGYwODhhZDE3LCAweGZlODFhMDFjLCAweGQ0YmU4MzJkLCAweGRhYjc4ZTI2LCAweGM4YWM5OTNiLCAweGM2YTU5NDMwLCAweDljZDJkZjU5LCAweDkyZGJkMjUyLCAweDgwYzBjNTRmLCAweDhlYzljODQ0LCAweGE0ZjZlYjc1LCAweGFhZmZlNjdlLCAweGI4ZTRmMTYzLCAweGI2ZWRmYzY4LCAweDBjMGE2N2IxLCAweDAyMDM2YWJhLCAweDEwMTg3ZGE3LCAweDFlMTE3MGFjLCAweDM0MmU1MzlkLCAweDNhMjc1ZTk2LCAweDI4M2M0OThiLCAweDI2MzU0NDgwLCAweDdjNDIwZmU5LCAweDcyNGIwMmUyLCAweDYwNTAxNWZmLCAweDZlNTkxOGY0LCAweDQ0NjYzYmM1LCAweDRhNmYzNmNlLCAweDU4NzQyMWQzLCAweDU2N2QyY2Q4LCAweDM3YTEwYzdhLCAweDM5YTgwMTcxLCAweDJiYjMxNjZjLCAweDI1YmExYjY3LCAweDBmODUzODU2LCAweDAxOGMzNTVkLCAweDEzOTcyMjQwLCAweDFkOWUyZjRiLCAweDQ3ZTk2NDIyLCAweDQ5ZTA2OTI5LCAweDViZmI3ZTM0LCAweDU1ZjI3MzNmLCAweDdmY2Q1MDBlLCAweDcxYzQ1ZDA1LCAweDYzZGY0YTE4LCAweDZkZDY0NzEzLCAweGQ3MzFkY2NhLCAweGQ5MzhkMWMxLCAweGNiMjNjNmRjLCAweGM1MmFjYmQ3LCAweGVmMTVlOGU2LCAweGUxMWNlNWVkLCAweGYzMDdmMmYwLCAweGZkMGVmZmZiLCAweGE3NzliNDkyLCAweGE5NzBiOTk5LCAweGJiNmJhZTg0LCAweGI1NjJhMzhmLCAweDlmNWQ4MGJlLCAweDkxNTQ4ZGI1LCAweDgzNGY5YWE4LCAweDhkNDY5N2EzXSk7XG4gICAgdGhpcy5fbWl4Q29sID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgICAgIGlmIChpIDwgMTI4KSB7XG4gICAgICAgIHRoaXMuX21peENvbFtpXSA9IGkgPDwgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX21peENvbFtpXSA9IGkgPDwgMSBeIDB4MWI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5idWZmZXIgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgdGhpcy5idWZmZXJQb3NpdGlvbiA9IDA7XG4gIH1cblxuICBfZXhwYW5kS2V5KGNpcGhlcktleSkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDYW5ub3QgY2FsbCBgX2V4cGFuZEtleWAgb24gdGhlIGJhc2UgY2xhc3NcIik7XG4gIH1cblxuICBfZGVjcnlwdChpbnB1dCwga2V5KSB7XG4gICAgbGV0IHQsIHUsIHY7XG4gICAgY29uc3Qgc3RhdGUgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgc3RhdGUuc2V0KGlucHV0KTtcblxuICAgIGZvciAobGV0IGogPSAwLCBrID0gdGhpcy5fa2V5U2l6ZTsgaiA8IDE2OyArK2osICsraykge1xuICAgICAgc3RhdGVbal0gXj0ga2V5W2tdO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSB0aGlzLl9jeWNsZXNPZlJlcGV0aXRpb24gLSAxOyBpID49IDE7IC0taSkge1xuICAgICAgdCA9IHN0YXRlWzEzXTtcbiAgICAgIHN0YXRlWzEzXSA9IHN0YXRlWzldO1xuICAgICAgc3RhdGVbOV0gPSBzdGF0ZVs1XTtcbiAgICAgIHN0YXRlWzVdID0gc3RhdGVbMV07XG4gICAgICBzdGF0ZVsxXSA9IHQ7XG4gICAgICB0ID0gc3RhdGVbMTRdO1xuICAgICAgdSA9IHN0YXRlWzEwXTtcbiAgICAgIHN0YXRlWzE0XSA9IHN0YXRlWzZdO1xuICAgICAgc3RhdGVbMTBdID0gc3RhdGVbMl07XG4gICAgICBzdGF0ZVs2XSA9IHQ7XG4gICAgICBzdGF0ZVsyXSA9IHU7XG4gICAgICB0ID0gc3RhdGVbMTVdO1xuICAgICAgdSA9IHN0YXRlWzExXTtcbiAgICAgIHYgPSBzdGF0ZVs3XTtcbiAgICAgIHN0YXRlWzE1XSA9IHN0YXRlWzNdO1xuICAgICAgc3RhdGVbMTFdID0gdDtcbiAgICAgIHN0YXRlWzddID0gdTtcbiAgICAgIHN0YXRlWzNdID0gdjtcblxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICAgIHN0YXRlW2pdID0gdGhpcy5faW52X3Nbc3RhdGVbal1dO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBqID0gMCwgayA9IGkgKiAxNjsgaiA8IDE2OyArK2osICsraykge1xuICAgICAgICBzdGF0ZVtqXSBePSBrZXlba107XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7IGogKz0gNCkge1xuICAgICAgICBjb25zdCBzMCA9IHRoaXMuX21peFtzdGF0ZVtqXV07XG4gICAgICAgIGNvbnN0IHMxID0gdGhpcy5fbWl4W3N0YXRlW2ogKyAxXV07XG4gICAgICAgIGNvbnN0IHMyID0gdGhpcy5fbWl4W3N0YXRlW2ogKyAyXV07XG4gICAgICAgIGNvbnN0IHMzID0gdGhpcy5fbWl4W3N0YXRlW2ogKyAzXV07XG4gICAgICAgIHQgPSBzMCBeIHMxID4+PiA4IF4gczEgPDwgMjQgXiBzMiA+Pj4gMTYgXiBzMiA8PCAxNiBeIHMzID4+PiAyNCBeIHMzIDw8IDg7XG4gICAgICAgIHN0YXRlW2pdID0gdCA+Pj4gMjQgJiAweGZmO1xuICAgICAgICBzdGF0ZVtqICsgMV0gPSB0ID4+IDE2ICYgMHhmZjtcbiAgICAgICAgc3RhdGVbaiArIDJdID0gdCA+PiA4ICYgMHhmZjtcbiAgICAgICAgc3RhdGVbaiArIDNdID0gdCAmIDB4ZmY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdCA9IHN0YXRlWzEzXTtcbiAgICBzdGF0ZVsxM10gPSBzdGF0ZVs5XTtcbiAgICBzdGF0ZVs5XSA9IHN0YXRlWzVdO1xuICAgIHN0YXRlWzVdID0gc3RhdGVbMV07XG4gICAgc3RhdGVbMV0gPSB0O1xuICAgIHQgPSBzdGF0ZVsxNF07XG4gICAgdSA9IHN0YXRlWzEwXTtcbiAgICBzdGF0ZVsxNF0gPSBzdGF0ZVs2XTtcbiAgICBzdGF0ZVsxMF0gPSBzdGF0ZVsyXTtcbiAgICBzdGF0ZVs2XSA9IHQ7XG4gICAgc3RhdGVbMl0gPSB1O1xuICAgIHQgPSBzdGF0ZVsxNV07XG4gICAgdSA9IHN0YXRlWzExXTtcbiAgICB2ID0gc3RhdGVbN107XG4gICAgc3RhdGVbMTVdID0gc3RhdGVbM107XG4gICAgc3RhdGVbMTFdID0gdDtcbiAgICBzdGF0ZVs3XSA9IHU7XG4gICAgc3RhdGVbM10gPSB2O1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICBzdGF0ZVtqXSA9IHRoaXMuX2ludl9zW3N0YXRlW2pdXTtcbiAgICAgIHN0YXRlW2pdIF49IGtleVtqXTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBfZW5jcnlwdChpbnB1dCwga2V5KSB7XG4gICAgY29uc3QgcyA9IHRoaXMuX3M7XG4gICAgbGV0IHQsIHUsIHY7XG4gICAgY29uc3Qgc3RhdGUgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgc3RhdGUuc2V0KGlucHV0KTtcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgc3RhdGVbal0gXj0ga2V5W2pdO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgICBzdGF0ZVtqXSA9IHNbc3RhdGVbal1dO1xuICAgICAgfVxuXG4gICAgICB2ID0gc3RhdGVbMV07XG4gICAgICBzdGF0ZVsxXSA9IHN0YXRlWzVdO1xuICAgICAgc3RhdGVbNV0gPSBzdGF0ZVs5XTtcbiAgICAgIHN0YXRlWzldID0gc3RhdGVbMTNdO1xuICAgICAgc3RhdGVbMTNdID0gdjtcbiAgICAgIHYgPSBzdGF0ZVsyXTtcbiAgICAgIHUgPSBzdGF0ZVs2XTtcbiAgICAgIHN0YXRlWzJdID0gc3RhdGVbMTBdO1xuICAgICAgc3RhdGVbNl0gPSBzdGF0ZVsxNF07XG4gICAgICBzdGF0ZVsxMF0gPSB2O1xuICAgICAgc3RhdGVbMTRdID0gdTtcbiAgICAgIHYgPSBzdGF0ZVszXTtcbiAgICAgIHUgPSBzdGF0ZVs3XTtcbiAgICAgIHQgPSBzdGF0ZVsxMV07XG4gICAgICBzdGF0ZVszXSA9IHN0YXRlWzE1XTtcbiAgICAgIHN0YXRlWzddID0gdjtcbiAgICAgIHN0YXRlWzExXSA9IHU7XG4gICAgICBzdGF0ZVsxNV0gPSB0O1xuXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyBqICs9IDQpIHtcbiAgICAgICAgY29uc3QgczAgPSBzdGF0ZVtqICsgMF07XG4gICAgICAgIGNvbnN0IHMxID0gc3RhdGVbaiArIDFdO1xuICAgICAgICBjb25zdCBzMiA9IHN0YXRlW2ogKyAyXTtcbiAgICAgICAgY29uc3QgczMgPSBzdGF0ZVtqICsgM107XG4gICAgICAgIHQgPSBzMCBeIHMxIF4gczIgXiBzMztcbiAgICAgICAgc3RhdGVbaiArIDBdIF49IHQgXiB0aGlzLl9taXhDb2xbczAgXiBzMV07XG4gICAgICAgIHN0YXRlW2ogKyAxXSBePSB0IF4gdGhpcy5fbWl4Q29sW3MxIF4gczJdO1xuICAgICAgICBzdGF0ZVtqICsgMl0gXj0gdCBeIHRoaXMuX21peENvbFtzMiBeIHMzXTtcbiAgICAgICAgc3RhdGVbaiArIDNdIF49IHQgXiB0aGlzLl9taXhDb2xbczMgXiBzMF07XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGogPSAwLCBrID0gaSAqIDE2OyBqIDwgMTY7ICsraiwgKytrKSB7XG4gICAgICAgIHN0YXRlW2pdIF49IGtleVtrXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgIHN0YXRlW2pdID0gc1tzdGF0ZVtqXV07XG4gICAgfVxuXG4gICAgdiA9IHN0YXRlWzFdO1xuICAgIHN0YXRlWzFdID0gc3RhdGVbNV07XG4gICAgc3RhdGVbNV0gPSBzdGF0ZVs5XTtcbiAgICBzdGF0ZVs5XSA9IHN0YXRlWzEzXTtcbiAgICBzdGF0ZVsxM10gPSB2O1xuICAgIHYgPSBzdGF0ZVsyXTtcbiAgICB1ID0gc3RhdGVbNl07XG4gICAgc3RhdGVbMl0gPSBzdGF0ZVsxMF07XG4gICAgc3RhdGVbNl0gPSBzdGF0ZVsxNF07XG4gICAgc3RhdGVbMTBdID0gdjtcbiAgICBzdGF0ZVsxNF0gPSB1O1xuICAgIHYgPSBzdGF0ZVszXTtcbiAgICB1ID0gc3RhdGVbN107XG4gICAgdCA9IHN0YXRlWzExXTtcbiAgICBzdGF0ZVszXSA9IHN0YXRlWzE1XTtcbiAgICBzdGF0ZVs3XSA9IHY7XG4gICAgc3RhdGVbMTFdID0gdTtcbiAgICBzdGF0ZVsxNV0gPSB0O1xuXG4gICAgZm9yIChsZXQgaiA9IDAsIGsgPSB0aGlzLl9rZXlTaXplOyBqIDwgMTY7ICsraiwgKytrKSB7XG4gICAgICBzdGF0ZVtqXSBePSBrZXlba107XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgX2RlY3J5cHRCbG9jazIoZGF0YSwgZmluYWxpemUpIHtcbiAgICBjb25zdCBzb3VyY2VMZW5ndGggPSBkYXRhLmxlbmd0aDtcbiAgICBsZXQgYnVmZmVyID0gdGhpcy5idWZmZXIsXG4gICAgICAgIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyUG9zaXRpb247XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgbGV0IGl2ID0gdGhpcy5pdjtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpIHtcbiAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGhdID0gZGF0YVtpXTtcbiAgICAgICsrYnVmZmVyTGVuZ3RoO1xuXG4gICAgICBpZiAoYnVmZmVyTGVuZ3RoIDwgMTYpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBsYWluID0gdGhpcy5fZGVjcnlwdChidWZmZXIsIHRoaXMuX2tleSk7XG5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgICBwbGFpbltqXSBePSBpdltqXTtcbiAgICAgIH1cblxuICAgICAgaXYgPSBidWZmZXI7XG4gICAgICByZXN1bHQucHVzaChwbGFpbik7XG4gICAgICBidWZmZXIgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgICBidWZmZXJMZW5ndGggPSAwO1xuICAgIH1cblxuICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyO1xuICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gYnVmZmVyTGVuZ3RoO1xuICAgIHRoaXMuaXYgPSBpdjtcblxuICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7XG4gICAgfVxuXG4gICAgbGV0IG91dHB1dExlbmd0aCA9IDE2ICogcmVzdWx0Lmxlbmd0aDtcblxuICAgIGlmIChmaW5hbGl6ZSkge1xuICAgICAgY29uc3QgbGFzdEJsb2NrID0gcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXTtcbiAgICAgIGxldCBwc0xlbiA9IGxhc3RCbG9ja1sxNV07XG5cbiAgICAgIGlmIChwc0xlbiA8PSAxNikge1xuICAgICAgICBmb3IgKGxldCBpID0gMTUsIGlpID0gMTYgLSBwc0xlbjsgaSA+PSBpaTsgLS1pKSB7XG4gICAgICAgICAgaWYgKGxhc3RCbG9ja1tpXSAhPT0gcHNMZW4pIHtcbiAgICAgICAgICAgIHBzTGVuID0gMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG91dHB1dExlbmd0aCAtPSBwc0xlbjtcbiAgICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSA9IGxhc3RCbG9jay5zdWJhcnJheSgwLCAxNiAtIHBzTGVuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBuZXcgVWludDhBcnJheShvdXRwdXRMZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGogPSAwLCBpaSA9IHJlc3VsdC5sZW5ndGg7IGkgPCBpaTsgKytpLCBqICs9IDE2KSB7XG4gICAgICBvdXRwdXQuc2V0KHJlc3VsdFtpXSwgaik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIGRlY3J5cHRCbG9jayhkYXRhLCBmaW5hbGl6ZSwgaXYgPSBudWxsKSB7XG4gICAgY29uc3Qgc291cmNlTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgY29uc3QgYnVmZmVyID0gdGhpcy5idWZmZXI7XG4gICAgbGV0IGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyUG9zaXRpb247XG5cbiAgICBpZiAoaXYpIHtcbiAgICAgIHRoaXMuaXYgPSBpdjtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGJ1ZmZlckxlbmd0aCA8IDE2ICYmIGkgPCBzb3VyY2VMZW5ndGg7ICsraSwgKytidWZmZXJMZW5ndGgpIHtcbiAgICAgICAgYnVmZmVyW2J1ZmZlckxlbmd0aF0gPSBkYXRhW2ldO1xuICAgICAgfVxuXG4gICAgICBpZiAoYnVmZmVyTGVuZ3RoIDwgMTYpIHtcbiAgICAgICAgdGhpcy5idWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGg7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgwKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pdiA9IGJ1ZmZlcjtcbiAgICAgIGRhdGEgPSBkYXRhLnN1YmFycmF5KDE2KTtcbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IDA7XG4gICAgdGhpcy5kZWNyeXB0QmxvY2sgPSB0aGlzLl9kZWNyeXB0QmxvY2syO1xuICAgIHJldHVybiB0aGlzLmRlY3J5cHRCbG9jayhkYXRhLCBmaW5hbGl6ZSk7XG4gIH1cblxuICBlbmNyeXB0KGRhdGEsIGl2KSB7XG4gICAgY29uc3Qgc291cmNlTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgbGV0IGJ1ZmZlciA9IHRoaXMuYnVmZmVyLFxuICAgICAgICBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlclBvc2l0aW9uO1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgaWYgKCFpdikge1xuICAgICAgaXYgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkge1xuICAgICAgYnVmZmVyW2J1ZmZlckxlbmd0aF0gPSBkYXRhW2ldO1xuICAgICAgKytidWZmZXJMZW5ndGg7XG5cbiAgICAgIGlmIChidWZmZXJMZW5ndGggPCAxNikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICAgIGJ1ZmZlcltqXSBePSBpdltqXTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2lwaGVyID0gdGhpcy5fZW5jcnlwdChidWZmZXIsIHRoaXMuX2tleSk7XG5cbiAgICAgIGl2ID0gY2lwaGVyO1xuICAgICAgcmVzdWx0LnB1c2goY2lwaGVyKTtcbiAgICAgIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgICAgIGJ1ZmZlckxlbmd0aCA9IDA7XG4gICAgfVxuXG4gICAgdGhpcy5idWZmZXIgPSBidWZmZXI7XG4gICAgdGhpcy5idWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGg7XG4gICAgdGhpcy5pdiA9IGl2O1xuXG4gICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgwKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXRMZW5ndGggPSAxNiAqIHJlc3VsdC5sZW5ndGg7XG4gICAgY29uc3Qgb3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkob3V0cHV0TGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBqID0gMCwgaWkgPSByZXN1bHQubGVuZ3RoOyBpIDwgaWk7ICsraSwgaiArPSAxNikge1xuICAgICAgb3V0cHV0LnNldChyZXN1bHRbaV0sIGopO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxufVxuXG5jbGFzcyBBRVMxMjhDaXBoZXIgZXh0ZW5kcyBBRVNCYXNlQ2lwaGVyIHtcbiAgY29uc3RydWN0b3Ioa2V5KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9jeWNsZXNPZlJlcGV0aXRpb24gPSAxMDtcbiAgICB0aGlzLl9rZXlTaXplID0gMTYwO1xuICAgIHRoaXMuX3Jjb24gPSBuZXcgVWludDhBcnJheShbMHg4ZCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgxYiwgMHgzNiwgMHg2YywgMHhkOCwgMHhhYiwgMHg0ZCwgMHg5YSwgMHgyZiwgMHg1ZSwgMHhiYywgMHg2MywgMHhjNiwgMHg5NywgMHgzNSwgMHg2YSwgMHhkNCwgMHhiMywgMHg3ZCwgMHhmYSwgMHhlZiwgMHhjNSwgMHg5MSwgMHgzOSwgMHg3MiwgMHhlNCwgMHhkMywgMHhiZCwgMHg2MSwgMHhjMiwgMHg5ZiwgMHgyNSwgMHg0YSwgMHg5NCwgMHgzMywgMHg2NiwgMHhjYywgMHg4MywgMHgxZCwgMHgzYSwgMHg3NCwgMHhlOCwgMHhjYiwgMHg4ZCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgxYiwgMHgzNiwgMHg2YywgMHhkOCwgMHhhYiwgMHg0ZCwgMHg5YSwgMHgyZiwgMHg1ZSwgMHhiYywgMHg2MywgMHhjNiwgMHg5NywgMHgzNSwgMHg2YSwgMHhkNCwgMHhiMywgMHg3ZCwgMHhmYSwgMHhlZiwgMHhjNSwgMHg5MSwgMHgzOSwgMHg3MiwgMHhlNCwgMHhkMywgMHhiZCwgMHg2MSwgMHhjMiwgMHg5ZiwgMHgyNSwgMHg0YSwgMHg5NCwgMHgzMywgMHg2NiwgMHhjYywgMHg4MywgMHgxZCwgMHgzYSwgMHg3NCwgMHhlOCwgMHhjYiwgMHg4ZCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgxYiwgMHgzNiwgMHg2YywgMHhkOCwgMHhhYiwgMHg0ZCwgMHg5YSwgMHgyZiwgMHg1ZSwgMHhiYywgMHg2MywgMHhjNiwgMHg5NywgMHgzNSwgMHg2YSwgMHhkNCwgMHhiMywgMHg3ZCwgMHhmYSwgMHhlZiwgMHhjNSwgMHg5MSwgMHgzOSwgMHg3MiwgMHhlNCwgMHhkMywgMHhiZCwgMHg2MSwgMHhjMiwgMHg5ZiwgMHgyNSwgMHg0YSwgMHg5NCwgMHgzMywgMHg2NiwgMHhjYywgMHg4MywgMHgxZCwgMHgzYSwgMHg3NCwgMHhlOCwgMHhjYiwgMHg4ZCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgxYiwgMHgzNiwgMHg2YywgMHhkOCwgMHhhYiwgMHg0ZCwgMHg5YSwgMHgyZiwgMHg1ZSwgMHhiYywgMHg2MywgMHhjNiwgMHg5NywgMHgzNSwgMHg2YSwgMHhkNCwgMHhiMywgMHg3ZCwgMHhmYSwgMHhlZiwgMHhjNSwgMHg5MSwgMHgzOSwgMHg3MiwgMHhlNCwgMHhkMywgMHhiZCwgMHg2MSwgMHhjMiwgMHg5ZiwgMHgyNSwgMHg0YSwgMHg5NCwgMHgzMywgMHg2NiwgMHhjYywgMHg4MywgMHgxZCwgMHgzYSwgMHg3NCwgMHhlOCwgMHhjYiwgMHg4ZCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgxYiwgMHgzNiwgMHg2YywgMHhkOCwgMHhhYiwgMHg0ZCwgMHg5YSwgMHgyZiwgMHg1ZSwgMHhiYywgMHg2MywgMHhjNiwgMHg5NywgMHgzNSwgMHg2YSwgMHhkNCwgMHhiMywgMHg3ZCwgMHhmYSwgMHhlZiwgMHhjNSwgMHg5MSwgMHgzOSwgMHg3MiwgMHhlNCwgMHhkMywgMHhiZCwgMHg2MSwgMHhjMiwgMHg5ZiwgMHgyNSwgMHg0YSwgMHg5NCwgMHgzMywgMHg2NiwgMHhjYywgMHg4MywgMHgxZCwgMHgzYSwgMHg3NCwgMHhlOCwgMHhjYiwgMHg4ZF0pO1xuICAgIHRoaXMuX2tleSA9IHRoaXMuX2V4cGFuZEtleShrZXkpO1xuICB9XG5cbiAgX2V4cGFuZEtleShjaXBoZXJLZXkpIHtcbiAgICBjb25zdCBiID0gMTc2O1xuICAgIGNvbnN0IHMgPSB0aGlzLl9zO1xuICAgIGNvbnN0IHJjb24gPSB0aGlzLl9yY29uO1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGIpO1xuICAgIHJlc3VsdC5zZXQoY2lwaGVyS2V5KTtcblxuICAgIGZvciAobGV0IGogPSAxNiwgaSA9IDE7IGogPCBiOyArK2kpIHtcbiAgICAgIGxldCB0MSA9IHJlc3VsdFtqIC0gM107XG4gICAgICBsZXQgdDIgPSByZXN1bHRbaiAtIDJdO1xuICAgICAgbGV0IHQzID0gcmVzdWx0W2ogLSAxXTtcbiAgICAgIGxldCB0NCA9IHJlc3VsdFtqIC0gNF07XG4gICAgICB0MSA9IHNbdDFdO1xuICAgICAgdDIgPSBzW3QyXTtcbiAgICAgIHQzID0gc1t0M107XG4gICAgICB0NCA9IHNbdDRdO1xuICAgICAgdDEgXj0gcmNvbltpXTtcblxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCA0OyArK24pIHtcbiAgICAgICAgcmVzdWx0W2pdID0gdDEgXj0gcmVzdWx0W2ogLSAxNl07XG4gICAgICAgIGorKztcbiAgICAgICAgcmVzdWx0W2pdID0gdDIgXj0gcmVzdWx0W2ogLSAxNl07XG4gICAgICAgIGorKztcbiAgICAgICAgcmVzdWx0W2pdID0gdDMgXj0gcmVzdWx0W2ogLSAxNl07XG4gICAgICAgIGorKztcbiAgICAgICAgcmVzdWx0W2pdID0gdDQgXj0gcmVzdWx0W2ogLSAxNl07XG4gICAgICAgIGorKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbn1cblxuZXhwb3J0cy5BRVMxMjhDaXBoZXIgPSBBRVMxMjhDaXBoZXI7XG5cbmNsYXNzIEFFUzI1NkNpcGhlciBleHRlbmRzIEFFU0Jhc2VDaXBoZXIge1xuICBjb25zdHJ1Y3RvcihrZXkpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2N5Y2xlc09mUmVwZXRpdGlvbiA9IDE0O1xuICAgIHRoaXMuX2tleVNpemUgPSAyMjQ7XG4gICAgdGhpcy5fa2V5ID0gdGhpcy5fZXhwYW5kS2V5KGtleSk7XG4gIH1cblxuICBfZXhwYW5kS2V5KGNpcGhlcktleSkge1xuICAgIGNvbnN0IGIgPSAyNDA7XG4gICAgY29uc3QgcyA9IHRoaXMuX3M7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoYik7XG4gICAgcmVzdWx0LnNldChjaXBoZXJLZXkpO1xuICAgIGxldCByID0gMTtcbiAgICBsZXQgdDEsIHQyLCB0MywgdDQ7XG5cbiAgICBmb3IgKGxldCBqID0gMzIsIGkgPSAxOyBqIDwgYjsgKytpKSB7XG4gICAgICBpZiAoaiAlIDMyID09PSAxNikge1xuICAgICAgICB0MSA9IHNbdDFdO1xuICAgICAgICB0MiA9IHNbdDJdO1xuICAgICAgICB0MyA9IHNbdDNdO1xuICAgICAgICB0NCA9IHNbdDRdO1xuICAgICAgfSBlbHNlIGlmIChqICUgMzIgPT09IDApIHtcbiAgICAgICAgdDEgPSByZXN1bHRbaiAtIDNdO1xuICAgICAgICB0MiA9IHJlc3VsdFtqIC0gMl07XG4gICAgICAgIHQzID0gcmVzdWx0W2ogLSAxXTtcbiAgICAgICAgdDQgPSByZXN1bHRbaiAtIDRdO1xuICAgICAgICB0MSA9IHNbdDFdO1xuICAgICAgICB0MiA9IHNbdDJdO1xuICAgICAgICB0MyA9IHNbdDNdO1xuICAgICAgICB0NCA9IHNbdDRdO1xuICAgICAgICB0MSBePSByO1xuXG4gICAgICAgIGlmICgociA8PD0gMSkgPj0gMjU2KSB7XG4gICAgICAgICAgciA9IChyIF4gMHgxYikgJiAweGZmO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgNDsgKytuKSB7XG4gICAgICAgIHJlc3VsdFtqXSA9IHQxIF49IHJlc3VsdFtqIC0gMzJdO1xuICAgICAgICBqKys7XG4gICAgICAgIHJlc3VsdFtqXSA9IHQyIF49IHJlc3VsdFtqIC0gMzJdO1xuICAgICAgICBqKys7XG4gICAgICAgIHJlc3VsdFtqXSA9IHQzIF49IHJlc3VsdFtqIC0gMzJdO1xuICAgICAgICBqKys7XG4gICAgICAgIHJlc3VsdFtqXSA9IHQ0IF49IHJlc3VsdFtqIC0gMzJdO1xuICAgICAgICBqKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQUVTMjU2Q2lwaGVyID0gQUVTMjU2Q2lwaGVyO1xuXG5jbGFzcyBQREYxNyB7XG4gIGNoZWNrT3duZXJQYXNzd29yZChwYXNzd29yZCwgb3duZXJWYWxpZGF0aW9uU2FsdCwgdXNlckJ5dGVzLCBvd25lclBhc3N3b3JkKSB7XG4gICAgY29uc3QgaGFzaERhdGEgPSBuZXcgVWludDhBcnJheShwYXNzd29yZC5sZW5ndGggKyA1Nik7XG4gICAgaGFzaERhdGEuc2V0KHBhc3N3b3JkLCAwKTtcbiAgICBoYXNoRGF0YS5zZXQob3duZXJWYWxpZGF0aW9uU2FsdCwgcGFzc3dvcmQubGVuZ3RoKTtcbiAgICBoYXNoRGF0YS5zZXQodXNlckJ5dGVzLCBwYXNzd29yZC5sZW5ndGggKyBvd25lclZhbGlkYXRpb25TYWx0Lmxlbmd0aCk7XG4gICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlU0hBMjU2KGhhc2hEYXRhLCAwLCBoYXNoRGF0YS5sZW5ndGgpO1xuICAgIHJldHVybiAoMCwgX3V0aWwuaXNBcnJheUVxdWFsKShyZXN1bHQsIG93bmVyUGFzc3dvcmQpO1xuICB9XG5cbiAgY2hlY2tVc2VyUGFzc3dvcmQocGFzc3dvcmQsIHVzZXJWYWxpZGF0aW9uU2FsdCwgdXNlclBhc3N3b3JkKSB7XG4gICAgY29uc3QgaGFzaERhdGEgPSBuZXcgVWludDhBcnJheShwYXNzd29yZC5sZW5ndGggKyA4KTtcbiAgICBoYXNoRGF0YS5zZXQocGFzc3dvcmQsIDApO1xuICAgIGhhc2hEYXRhLnNldCh1c2VyVmFsaWRhdGlvblNhbHQsIHBhc3N3b3JkLmxlbmd0aCk7XG4gICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlU0hBMjU2KGhhc2hEYXRhLCAwLCBoYXNoRGF0YS5sZW5ndGgpO1xuICAgIHJldHVybiAoMCwgX3V0aWwuaXNBcnJheUVxdWFsKShyZXN1bHQsIHVzZXJQYXNzd29yZCk7XG4gIH1cblxuICBnZXRPd25lcktleShwYXNzd29yZCwgb3duZXJLZXlTYWx0LCB1c2VyQnl0ZXMsIG93bmVyRW5jcnlwdGlvbikge1xuICAgIGNvbnN0IGhhc2hEYXRhID0gbmV3IFVpbnQ4QXJyYXkocGFzc3dvcmQubGVuZ3RoICsgNTYpO1xuICAgIGhhc2hEYXRhLnNldChwYXNzd29yZCwgMCk7XG4gICAgaGFzaERhdGEuc2V0KG93bmVyS2V5U2FsdCwgcGFzc3dvcmQubGVuZ3RoKTtcbiAgICBoYXNoRGF0YS5zZXQodXNlckJ5dGVzLCBwYXNzd29yZC5sZW5ndGggKyBvd25lcktleVNhbHQubGVuZ3RoKTtcbiAgICBjb25zdCBrZXkgPSBjYWxjdWxhdGVTSEEyNTYoaGFzaERhdGEsIDAsIGhhc2hEYXRhLmxlbmd0aCk7XG4gICAgY29uc3QgY2lwaGVyID0gbmV3IEFFUzI1NkNpcGhlcihrZXkpO1xuICAgIHJldHVybiBjaXBoZXIuZGVjcnlwdEJsb2NrKG93bmVyRW5jcnlwdGlvbiwgZmFsc2UsIG5ldyBVaW50OEFycmF5KDE2KSk7XG4gIH1cblxuICBnZXRVc2VyS2V5KHBhc3N3b3JkLCB1c2VyS2V5U2FsdCwgdXNlckVuY3J5cHRpb24pIHtcbiAgICBjb25zdCBoYXNoRGF0YSA9IG5ldyBVaW50OEFycmF5KHBhc3N3b3JkLmxlbmd0aCArIDgpO1xuICAgIGhhc2hEYXRhLnNldChwYXNzd29yZCwgMCk7XG4gICAgaGFzaERhdGEuc2V0KHVzZXJLZXlTYWx0LCBwYXNzd29yZC5sZW5ndGgpO1xuICAgIGNvbnN0IGtleSA9IGNhbGN1bGF0ZVNIQTI1NihoYXNoRGF0YSwgMCwgaGFzaERhdGEubGVuZ3RoKTtcbiAgICBjb25zdCBjaXBoZXIgPSBuZXcgQUVTMjU2Q2lwaGVyKGtleSk7XG4gICAgcmV0dXJuIGNpcGhlci5kZWNyeXB0QmxvY2sodXNlckVuY3J5cHRpb24sIGZhbHNlLCBuZXcgVWludDhBcnJheSgxNikpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QREYxNyA9IFBERjE3O1xuXG5jb25zdCBQREYyMCA9IGZ1bmN0aW9uIFBERjIwQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gY2FsY3VsYXRlUERGMjBIYXNoKHBhc3N3b3JkLCBpbnB1dCwgdXNlckJ5dGVzKSB7XG4gICAgbGV0IGsgPSBjYWxjdWxhdGVTSEEyNTYoaW5wdXQsIDAsIGlucHV0Lmxlbmd0aCkuc3ViYXJyYXkoMCwgMzIpO1xuICAgIGxldCBlID0gWzBdO1xuICAgIGxldCBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgNjQgfHwgZVtlLmxlbmd0aCAtIDFdID4gaSAtIDMyKSB7XG4gICAgICBjb25zdCBjb21iaW5lZExlbmd0aCA9IHBhc3N3b3JkLmxlbmd0aCArIGsubGVuZ3RoICsgdXNlckJ5dGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGNvbWJpbmVkQXJyYXkgPSBuZXcgVWludDhBcnJheShjb21iaW5lZExlbmd0aCk7XG4gICAgICBsZXQgd3JpdGVPZmZzZXQgPSAwO1xuICAgICAgY29tYmluZWRBcnJheS5zZXQocGFzc3dvcmQsIHdyaXRlT2Zmc2V0KTtcbiAgICAgIHdyaXRlT2Zmc2V0ICs9IHBhc3N3b3JkLmxlbmd0aDtcbiAgICAgIGNvbWJpbmVkQXJyYXkuc2V0KGssIHdyaXRlT2Zmc2V0KTtcbiAgICAgIHdyaXRlT2Zmc2V0ICs9IGsubGVuZ3RoO1xuICAgICAgY29tYmluZWRBcnJheS5zZXQodXNlckJ5dGVzLCB3cml0ZU9mZnNldCk7XG4gICAgICBjb25zdCBrMSA9IG5ldyBVaW50OEFycmF5KGNvbWJpbmVkTGVuZ3RoICogNjQpO1xuXG4gICAgICBmb3IgKGxldCBqID0gMCwgcG9zID0gMDsgaiA8IDY0OyBqKyssIHBvcyArPSBjb21iaW5lZExlbmd0aCkge1xuICAgICAgICBrMS5zZXQoY29tYmluZWRBcnJheSwgcG9zKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2lwaGVyID0gbmV3IEFFUzEyOENpcGhlcihrLnN1YmFycmF5KDAsIDE2KSk7XG4gICAgICBlID0gY2lwaGVyLmVuY3J5cHQoazEsIGsuc3ViYXJyYXkoMTYsIDMyKSk7XG4gICAgICBsZXQgcmVtYWluZGVyID0gMDtcblxuICAgICAgZm9yIChsZXQgeiA9IDA7IHogPCAxNjsgeisrKSB7XG4gICAgICAgIHJlbWFpbmRlciAqPSAyNTYgJSAzO1xuICAgICAgICByZW1haW5kZXIgJT0gMztcbiAgICAgICAgcmVtYWluZGVyICs9IChlW3pdID4+PiAwKSAlIDM7XG4gICAgICAgIHJlbWFpbmRlciAlPSAzO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVtYWluZGVyID09PSAwKSB7XG4gICAgICAgIGsgPSBjYWxjdWxhdGVTSEEyNTYoZSwgMCwgZS5sZW5ndGgpO1xuICAgICAgfSBlbHNlIGlmIChyZW1haW5kZXIgPT09IDEpIHtcbiAgICAgICAgayA9IGNhbGN1bGF0ZVNIQTM4NChlLCAwLCBlLmxlbmd0aCk7XG4gICAgICB9IGVsc2UgaWYgKHJlbWFpbmRlciA9PT0gMikge1xuICAgICAgICBrID0gY2FsY3VsYXRlU0hBNTEyKGUsIDAsIGUubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiBrLnN1YmFycmF5KDAsIDMyKTtcbiAgfVxuXG4gIGNsYXNzIFBERjIwIHtcbiAgICBoYXNoKHBhc3N3b3JkLCBjb25jYXRCeXRlcywgdXNlckJ5dGVzKSB7XG4gICAgICByZXR1cm4gY2FsY3VsYXRlUERGMjBIYXNoKHBhc3N3b3JkLCBjb25jYXRCeXRlcywgdXNlckJ5dGVzKTtcbiAgICB9XG5cbiAgICBjaGVja093bmVyUGFzc3dvcmQocGFzc3dvcmQsIG93bmVyVmFsaWRhdGlvblNhbHQsIHVzZXJCeXRlcywgb3duZXJQYXNzd29yZCkge1xuICAgICAgY29uc3QgaGFzaERhdGEgPSBuZXcgVWludDhBcnJheShwYXNzd29yZC5sZW5ndGggKyA1Nik7XG4gICAgICBoYXNoRGF0YS5zZXQocGFzc3dvcmQsIDApO1xuICAgICAgaGFzaERhdGEuc2V0KG93bmVyVmFsaWRhdGlvblNhbHQsIHBhc3N3b3JkLmxlbmd0aCk7XG4gICAgICBoYXNoRGF0YS5zZXQodXNlckJ5dGVzLCBwYXNzd29yZC5sZW5ndGggKyBvd25lclZhbGlkYXRpb25TYWx0Lmxlbmd0aCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBjYWxjdWxhdGVQREYyMEhhc2gocGFzc3dvcmQsIGhhc2hEYXRhLCB1c2VyQnl0ZXMpO1xuICAgICAgcmV0dXJuICgwLCBfdXRpbC5pc0FycmF5RXF1YWwpKHJlc3VsdCwgb3duZXJQYXNzd29yZCk7XG4gICAgfVxuXG4gICAgY2hlY2tVc2VyUGFzc3dvcmQocGFzc3dvcmQsIHVzZXJWYWxpZGF0aW9uU2FsdCwgdXNlclBhc3N3b3JkKSB7XG4gICAgICBjb25zdCBoYXNoRGF0YSA9IG5ldyBVaW50OEFycmF5KHBhc3N3b3JkLmxlbmd0aCArIDgpO1xuICAgICAgaGFzaERhdGEuc2V0KHBhc3N3b3JkLCAwKTtcbiAgICAgIGhhc2hEYXRhLnNldCh1c2VyVmFsaWRhdGlvblNhbHQsIHBhc3N3b3JkLmxlbmd0aCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBjYWxjdWxhdGVQREYyMEhhc2gocGFzc3dvcmQsIGhhc2hEYXRhLCBbXSk7XG4gICAgICByZXR1cm4gKDAsIF91dGlsLmlzQXJyYXlFcXVhbCkocmVzdWx0LCB1c2VyUGFzc3dvcmQpO1xuICAgIH1cblxuICAgIGdldE93bmVyS2V5KHBhc3N3b3JkLCBvd25lcktleVNhbHQsIHVzZXJCeXRlcywgb3duZXJFbmNyeXB0aW9uKSB7XG4gICAgICBjb25zdCBoYXNoRGF0YSA9IG5ldyBVaW50OEFycmF5KHBhc3N3b3JkLmxlbmd0aCArIDU2KTtcbiAgICAgIGhhc2hEYXRhLnNldChwYXNzd29yZCwgMCk7XG4gICAgICBoYXNoRGF0YS5zZXQob3duZXJLZXlTYWx0LCBwYXNzd29yZC5sZW5ndGgpO1xuICAgICAgaGFzaERhdGEuc2V0KHVzZXJCeXRlcywgcGFzc3dvcmQubGVuZ3RoICsgb3duZXJLZXlTYWx0Lmxlbmd0aCk7XG4gICAgICBjb25zdCBrZXkgPSBjYWxjdWxhdGVQREYyMEhhc2gocGFzc3dvcmQsIGhhc2hEYXRhLCB1c2VyQnl0ZXMpO1xuICAgICAgY29uc3QgY2lwaGVyID0gbmV3IEFFUzI1NkNpcGhlcihrZXkpO1xuICAgICAgcmV0dXJuIGNpcGhlci5kZWNyeXB0QmxvY2sob3duZXJFbmNyeXB0aW9uLCBmYWxzZSwgbmV3IFVpbnQ4QXJyYXkoMTYpKTtcbiAgICB9XG5cbiAgICBnZXRVc2VyS2V5KHBhc3N3b3JkLCB1c2VyS2V5U2FsdCwgdXNlckVuY3J5cHRpb24pIHtcbiAgICAgIGNvbnN0IGhhc2hEYXRhID0gbmV3IFVpbnQ4QXJyYXkocGFzc3dvcmQubGVuZ3RoICsgOCk7XG4gICAgICBoYXNoRGF0YS5zZXQocGFzc3dvcmQsIDApO1xuICAgICAgaGFzaERhdGEuc2V0KHVzZXJLZXlTYWx0LCBwYXNzd29yZC5sZW5ndGgpO1xuICAgICAgY29uc3Qga2V5ID0gY2FsY3VsYXRlUERGMjBIYXNoKHBhc3N3b3JkLCBoYXNoRGF0YSwgW10pO1xuICAgICAgY29uc3QgY2lwaGVyID0gbmV3IEFFUzI1NkNpcGhlcihrZXkpO1xuICAgICAgcmV0dXJuIGNpcGhlci5kZWNyeXB0QmxvY2sodXNlckVuY3J5cHRpb24sIGZhbHNlLCBuZXcgVWludDhBcnJheSgxNikpO1xuICAgIH1cblxuICB9XG5cbiAgcmV0dXJuIFBERjIwO1xufSgpO1xuXG5leHBvcnRzLlBERjIwID0gUERGMjA7XG5cbmNsYXNzIENpcGhlclRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKHN0cmluZ0NpcGhlckNvbnN0cnVjdG9yLCBzdHJlYW1DaXBoZXJDb25zdHJ1Y3Rvcikge1xuICAgIHRoaXMuU3RyaW5nQ2lwaGVyQ29uc3RydWN0b3IgPSBzdHJpbmdDaXBoZXJDb25zdHJ1Y3RvcjtcbiAgICB0aGlzLlN0cmVhbUNpcGhlckNvbnN0cnVjdG9yID0gc3RyZWFtQ2lwaGVyQ29uc3RydWN0b3I7XG4gIH1cblxuICBjcmVhdGVTdHJlYW0oc3RyZWFtLCBsZW5ndGgpIHtcbiAgICBjb25zdCBjaXBoZXIgPSBuZXcgdGhpcy5TdHJlYW1DaXBoZXJDb25zdHJ1Y3RvcigpO1xuICAgIHJldHVybiBuZXcgX2RlY3J5cHRfc3RyZWFtLkRlY3J5cHRTdHJlYW0oc3RyZWFtLCBsZW5ndGgsIGZ1bmN0aW9uIGNpcGhlclRyYW5zZm9ybURlY3J5cHRTdHJlYW0oZGF0YSwgZmluYWxpemUpIHtcbiAgICAgIHJldHVybiBjaXBoZXIuZGVjcnlwdEJsb2NrKGRhdGEsIGZpbmFsaXplKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRlY3J5cHRTdHJpbmcocykge1xuICAgIGNvbnN0IGNpcGhlciA9IG5ldyB0aGlzLlN0cmluZ0NpcGhlckNvbnN0cnVjdG9yKCk7XG4gICAgbGV0IGRhdGEgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykocyk7XG4gICAgZGF0YSA9IGNpcGhlci5kZWNyeXB0QmxvY2soZGF0YSwgdHJ1ZSk7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKShkYXRhKTtcbiAgfVxuXG4gIGVuY3J5cHRTdHJpbmcocykge1xuICAgIGNvbnN0IGNpcGhlciA9IG5ldyB0aGlzLlN0cmluZ0NpcGhlckNvbnN0cnVjdG9yKCk7XG5cbiAgICBpZiAoY2lwaGVyIGluc3RhbmNlb2YgQUVTQmFzZUNpcGhlcikge1xuICAgICAgY29uc3Qgc3RyTGVuID0gcy5sZW5ndGg7XG4gICAgICBjb25zdCBwYWQgPSAxNiAtIHN0ckxlbiAlIDE2O1xuICAgICAgcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhZCkucmVwZWF0KHBhZCk7XG4gICAgICBjb25zdCBpdiA9IG5ldyBVaW50OEFycmF5KDE2KTtcblxuICAgICAgaWYgKHR5cGVvZiBjcnlwdG8gIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhpdik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICAgICAgICBpdltpXSA9IE1hdGguZmxvb3IoMjU2ICogTWF0aC5yYW5kb20oKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IGRhdGEgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykocyk7XG4gICAgICBkYXRhID0gY2lwaGVyLmVuY3J5cHQoZGF0YSwgaXYpO1xuICAgICAgY29uc3QgYnVmID0gbmV3IFVpbnQ4QXJyYXkoMTYgKyBkYXRhLmxlbmd0aCk7XG4gICAgICBidWYuc2V0KGl2KTtcbiAgICAgIGJ1Zi5zZXQoZGF0YSwgMTYpO1xuICAgICAgcmV0dXJuICgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKShidWYpO1xuICAgIH1cblxuICAgIGxldCBkYXRhID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKHMpO1xuICAgIGRhdGEgPSBjaXBoZXIuZW5jcnlwdChkYXRhKTtcbiAgICByZXR1cm4gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGRhdGEpO1xuICB9XG5cbn1cblxuY29uc3QgQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeSA9IGZ1bmN0aW9uIENpcGhlclRyYW5zZm9ybUZhY3RvcnlDbG9zdXJlKCkge1xuICBjb25zdCBkZWZhdWx0UGFzc3dvcmRCeXRlcyA9IG5ldyBVaW50OEFycmF5KFsweDI4LCAweGJmLCAweDRlLCAweDVlLCAweDRlLCAweDc1LCAweDhhLCAweDQxLCAweDY0LCAweDAwLCAweDRlLCAweDU2LCAweGZmLCAweGZhLCAweDAxLCAweDA4LCAweDJlLCAweDJlLCAweDAwLCAweGI2LCAweGQwLCAweDY4LCAweDNlLCAweDgwLCAweDJmLCAweDBjLCAweGE5LCAweGZlLCAweDY0LCAweDUzLCAweDY5LCAweDdhXSk7XG5cbiAgZnVuY3Rpb24gY3JlYXRlRW5jcnlwdGlvbktleTIwKHJldmlzaW9uLCBwYXNzd29yZCwgb3duZXJQYXNzd29yZCwgb3duZXJWYWxpZGF0aW9uU2FsdCwgb3duZXJLZXlTYWx0LCB1Qnl0ZXMsIHVzZXJQYXNzd29yZCwgdXNlclZhbGlkYXRpb25TYWx0LCB1c2VyS2V5U2FsdCwgb3duZXJFbmNyeXB0aW9uLCB1c2VyRW5jcnlwdGlvbiwgcGVybXMpIHtcbiAgICBpZiAocGFzc3dvcmQpIHtcbiAgICAgIGNvbnN0IHBhc3N3b3JkTGVuZ3RoID0gTWF0aC5taW4oMTI3LCBwYXNzd29yZC5sZW5ndGgpO1xuICAgICAgcGFzc3dvcmQgPSBwYXNzd29yZC5zdWJhcnJheSgwLCBwYXNzd29yZExlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhc3N3b3JkID0gW107XG4gICAgfVxuXG4gICAgbGV0IHBkZkFsZ29yaXRobTtcblxuICAgIGlmIChyZXZpc2lvbiA9PT0gNikge1xuICAgICAgcGRmQWxnb3JpdGhtID0gbmV3IFBERjIwKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBkZkFsZ29yaXRobSA9IG5ldyBQREYxNygpO1xuICAgIH1cblxuICAgIGlmIChwZGZBbGdvcml0aG0uY2hlY2tVc2VyUGFzc3dvcmQocGFzc3dvcmQsIHVzZXJWYWxpZGF0aW9uU2FsdCwgdXNlclBhc3N3b3JkKSkge1xuICAgICAgcmV0dXJuIHBkZkFsZ29yaXRobS5nZXRVc2VyS2V5KHBhc3N3b3JkLCB1c2VyS2V5U2FsdCwgdXNlckVuY3J5cHRpb24pO1xuICAgIH0gZWxzZSBpZiAocGFzc3dvcmQubGVuZ3RoICYmIHBkZkFsZ29yaXRobS5jaGVja093bmVyUGFzc3dvcmQocGFzc3dvcmQsIG93bmVyVmFsaWRhdGlvblNhbHQsIHVCeXRlcywgb3duZXJQYXNzd29yZCkpIHtcbiAgICAgIHJldHVybiBwZGZBbGdvcml0aG0uZ2V0T3duZXJLZXkocGFzc3dvcmQsIG93bmVyS2V5U2FsdCwgdUJ5dGVzLCBvd25lckVuY3J5cHRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gcHJlcGFyZUtleURhdGEoZmlsZUlkLCBwYXNzd29yZCwgb3duZXJQYXNzd29yZCwgdXNlclBhc3N3b3JkLCBmbGFncywgcmV2aXNpb24sIGtleUxlbmd0aCwgZW5jcnlwdE1ldGFkYXRhKSB7XG4gICAgY29uc3QgaGFzaERhdGFTaXplID0gNDAgKyBvd25lclBhc3N3b3JkLmxlbmd0aCArIGZpbGVJZC5sZW5ndGg7XG4gICAgY29uc3QgaGFzaERhdGEgPSBuZXcgVWludDhBcnJheShoYXNoRGF0YVNpemUpO1xuICAgIGxldCBpID0gMCxcbiAgICAgICAgaixcbiAgICAgICAgbjtcblxuICAgIGlmIChwYXNzd29yZCkge1xuICAgICAgbiA9IE1hdGgubWluKDMyLCBwYXNzd29yZC5sZW5ndGgpO1xuXG4gICAgICBmb3IgKDsgaSA8IG47ICsraSkge1xuICAgICAgICBoYXNoRGF0YVtpXSA9IHBhc3N3b3JkW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIGogPSAwO1xuXG4gICAgd2hpbGUgKGkgPCAzMikge1xuICAgICAgaGFzaERhdGFbaSsrXSA9IGRlZmF1bHRQYXNzd29yZEJ5dGVzW2orK107XG4gICAgfVxuXG4gICAgZm9yIChqID0gMCwgbiA9IG93bmVyUGFzc3dvcmQubGVuZ3RoOyBqIDwgbjsgKytqKSB7XG4gICAgICBoYXNoRGF0YVtpKytdID0gb3duZXJQYXNzd29yZFtqXTtcbiAgICB9XG5cbiAgICBoYXNoRGF0YVtpKytdID0gZmxhZ3MgJiAweGZmO1xuICAgIGhhc2hEYXRhW2krK10gPSBmbGFncyA+PiA4ICYgMHhmZjtcbiAgICBoYXNoRGF0YVtpKytdID0gZmxhZ3MgPj4gMTYgJiAweGZmO1xuICAgIGhhc2hEYXRhW2krK10gPSBmbGFncyA+Pj4gMjQgJiAweGZmO1xuXG4gICAgZm9yIChqID0gMCwgbiA9IGZpbGVJZC5sZW5ndGg7IGogPCBuOyArK2opIHtcbiAgICAgIGhhc2hEYXRhW2krK10gPSBmaWxlSWRbal07XG4gICAgfVxuXG4gICAgaWYgKHJldmlzaW9uID49IDQgJiYgIWVuY3J5cHRNZXRhZGF0YSkge1xuICAgICAgaGFzaERhdGFbaSsrXSA9IDB4ZmY7XG4gICAgICBoYXNoRGF0YVtpKytdID0gMHhmZjtcbiAgICAgIGhhc2hEYXRhW2krK10gPSAweGZmO1xuICAgICAgaGFzaERhdGFbaSsrXSA9IDB4ZmY7XG4gICAgfVxuXG4gICAgbGV0IGhhc2ggPSBjYWxjdWxhdGVNRDUoaGFzaERhdGEsIDAsIGkpO1xuICAgIGNvbnN0IGtleUxlbmd0aEluQnl0ZXMgPSBrZXlMZW5ndGggPj4gMztcblxuICAgIGlmIChyZXZpc2lvbiA+PSAzKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgNTA7ICsraikge1xuICAgICAgICBoYXNoID0gY2FsY3VsYXRlTUQ1KGhhc2gsIDAsIGtleUxlbmd0aEluQnl0ZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSBoYXNoLnN1YmFycmF5KDAsIGtleUxlbmd0aEluQnl0ZXMpO1xuICAgIGxldCBjaXBoZXIsIGNoZWNrRGF0YTtcblxuICAgIGlmIChyZXZpc2lvbiA+PSAzKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgMzI7ICsraSkge1xuICAgICAgICBoYXNoRGF0YVtpXSA9IGRlZmF1bHRQYXNzd29yZEJ5dGVzW2ldO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGogPSAwLCBuID0gZmlsZUlkLmxlbmd0aDsgaiA8IG47ICsraikge1xuICAgICAgICBoYXNoRGF0YVtpKytdID0gZmlsZUlkW2pdO1xuICAgICAgfVxuXG4gICAgICBjaXBoZXIgPSBuZXcgQVJDRm91ckNpcGhlcihlbmNyeXB0aW9uS2V5KTtcbiAgICAgIGNoZWNrRGF0YSA9IGNpcGhlci5lbmNyeXB0QmxvY2soY2FsY3VsYXRlTUQ1KGhhc2hEYXRhLCAwLCBpKSk7XG4gICAgICBuID0gZW5jcnlwdGlvbktleS5sZW5ndGg7XG4gICAgICBjb25zdCBkZXJpdmVkS2V5ID0gbmV3IFVpbnQ4QXJyYXkobik7XG5cbiAgICAgIGZvciAoaiA9IDE7IGogPD0gMTk7ICsraikge1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IG47ICsraykge1xuICAgICAgICAgIGRlcml2ZWRLZXlba10gPSBlbmNyeXB0aW9uS2V5W2tdIF4gajtcbiAgICAgICAgfVxuXG4gICAgICAgIGNpcGhlciA9IG5ldyBBUkNGb3VyQ2lwaGVyKGRlcml2ZWRLZXkpO1xuICAgICAgICBjaGVja0RhdGEgPSBjaXBoZXIuZW5jcnlwdEJsb2NrKGNoZWNrRGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoaiA9IDAsIG4gPSBjaGVja0RhdGEubGVuZ3RoOyBqIDwgbjsgKytqKSB7XG4gICAgICAgIGlmICh1c2VyUGFzc3dvcmRbal0gIT09IGNoZWNrRGF0YVtqXSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNpcGhlciA9IG5ldyBBUkNGb3VyQ2lwaGVyKGVuY3J5cHRpb25LZXkpO1xuICAgICAgY2hlY2tEYXRhID0gY2lwaGVyLmVuY3J5cHRCbG9jayhkZWZhdWx0UGFzc3dvcmRCeXRlcyk7XG5cbiAgICAgIGZvciAoaiA9IDAsIG4gPSBjaGVja0RhdGEubGVuZ3RoOyBqIDwgbjsgKytqKSB7XG4gICAgICAgIGlmICh1c2VyUGFzc3dvcmRbal0gIT09IGNoZWNrRGF0YVtqXSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuY3J5cHRpb25LZXk7XG4gIH1cblxuICBmdW5jdGlvbiBkZWNvZGVVc2VyUGFzc3dvcmQocGFzc3dvcmQsIG93bmVyUGFzc3dvcmQsIHJldmlzaW9uLCBrZXlMZW5ndGgpIHtcbiAgICBjb25zdCBoYXNoRGF0YSA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgICBsZXQgaSA9IDA7XG4gICAgY29uc3QgbiA9IE1hdGgubWluKDMyLCBwYXNzd29yZC5sZW5ndGgpO1xuXG4gICAgZm9yICg7IGkgPCBuOyArK2kpIHtcbiAgICAgIGhhc2hEYXRhW2ldID0gcGFzc3dvcmRbaV07XG4gICAgfVxuXG4gICAgbGV0IGogPSAwO1xuXG4gICAgd2hpbGUgKGkgPCAzMikge1xuICAgICAgaGFzaERhdGFbaSsrXSA9IGRlZmF1bHRQYXNzd29yZEJ5dGVzW2orK107XG4gICAgfVxuXG4gICAgbGV0IGhhc2ggPSBjYWxjdWxhdGVNRDUoaGFzaERhdGEsIDAsIGkpO1xuICAgIGNvbnN0IGtleUxlbmd0aEluQnl0ZXMgPSBrZXlMZW5ndGggPj4gMztcblxuICAgIGlmIChyZXZpc2lvbiA+PSAzKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgNTA7ICsraikge1xuICAgICAgICBoYXNoID0gY2FsY3VsYXRlTUQ1KGhhc2gsIDAsIGhhc2gubGVuZ3RoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgY2lwaGVyLCB1c2VyUGFzc3dvcmQ7XG5cbiAgICBpZiAocmV2aXNpb24gPj0gMykge1xuICAgICAgdXNlclBhc3N3b3JkID0gb3duZXJQYXNzd29yZDtcbiAgICAgIGNvbnN0IGRlcml2ZWRLZXkgPSBuZXcgVWludDhBcnJheShrZXlMZW5ndGhJbkJ5dGVzKTtcblxuICAgICAgZm9yIChqID0gMTk7IGogPj0gMDsgai0tKSB7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwga2V5TGVuZ3RoSW5CeXRlczsgKytrKSB7XG4gICAgICAgICAgZGVyaXZlZEtleVtrXSA9IGhhc2hba10gXiBqO1xuICAgICAgICB9XG5cbiAgICAgICAgY2lwaGVyID0gbmV3IEFSQ0ZvdXJDaXBoZXIoZGVyaXZlZEtleSk7XG4gICAgICAgIHVzZXJQYXNzd29yZCA9IGNpcGhlci5lbmNyeXB0QmxvY2sodXNlclBhc3N3b3JkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY2lwaGVyID0gbmV3IEFSQ0ZvdXJDaXBoZXIoaGFzaC5zdWJhcnJheSgwLCBrZXlMZW5ndGhJbkJ5dGVzKSk7XG4gICAgICB1c2VyUGFzc3dvcmQgPSBjaXBoZXIuZW5jcnlwdEJsb2NrKG93bmVyUGFzc3dvcmQpO1xuICAgIH1cblxuICAgIHJldHVybiB1c2VyUGFzc3dvcmQ7XG4gIH1cblxuICBjb25zdCBpZGVudGl0eU5hbWUgPSBfcHJpbWl0aXZlcy5OYW1lLmdldChcIklkZW50aXR5XCIpO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkT2JqZWN0S2V5KG51bSwgZ2VuLCBlbmNyeXB0aW9uS2V5LCBpc0FlcyA9IGZhbHNlKSB7XG4gICAgY29uc3Qga2V5ID0gbmV3IFVpbnQ4QXJyYXkoZW5jcnlwdGlvbktleS5sZW5ndGggKyA5KTtcbiAgICBjb25zdCBuID0gZW5jcnlwdGlvbktleS5sZW5ndGg7XG4gICAgbGV0IGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBrZXlbaV0gPSBlbmNyeXB0aW9uS2V5W2ldO1xuICAgIH1cblxuICAgIGtleVtpKytdID0gbnVtICYgMHhmZjtcbiAgICBrZXlbaSsrXSA9IG51bSA+PiA4ICYgMHhmZjtcbiAgICBrZXlbaSsrXSA9IG51bSA+PiAxNiAmIDB4ZmY7XG4gICAga2V5W2krK10gPSBnZW4gJiAweGZmO1xuICAgIGtleVtpKytdID0gZ2VuID4+IDggJiAweGZmO1xuXG4gICAgaWYgKGlzQWVzKSB7XG4gICAgICBrZXlbaSsrXSA9IDB4NzM7XG4gICAgICBrZXlbaSsrXSA9IDB4NDE7XG4gICAgICBrZXlbaSsrXSA9IDB4NmM7XG4gICAgICBrZXlbaSsrXSA9IDB4NTQ7XG4gICAgfVxuXG4gICAgY29uc3QgaGFzaCA9IGNhbGN1bGF0ZU1ENShrZXksIDAsIGkpO1xuICAgIHJldHVybiBoYXNoLnN1YmFycmF5KDAsIE1hdGgubWluKGVuY3J5cHRpb25LZXkubGVuZ3RoICsgNSwgMTYpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1aWxkQ2lwaGVyQ29uc3RydWN0b3IoY2YsIG5hbWUsIG51bSwgZ2VuLCBrZXkpIHtcbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIGNyeXB0IGZpbHRlciBuYW1lLlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBjcnlwdEZpbHRlciA9IGNmLmdldChuYW1lLm5hbWUpO1xuICAgIGxldCBjZm07XG5cbiAgICBpZiAoY3J5cHRGaWx0ZXIgIT09IG51bGwgJiYgY3J5cHRGaWx0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2ZtID0gY3J5cHRGaWx0ZXIuZ2V0KFwiQ0ZNXCIpO1xuICAgIH1cblxuICAgIGlmICghY2ZtIHx8IGNmbS5uYW1lID09PSBcIk5vbmVcIikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNpcGhlclRyYW5zZm9ybUZhY3RvcnlCdWlsZENpcGhlckNvbnN0cnVjdG9yTm9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOdWxsQ2lwaGVyKCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjZm0ubmFtZSA9PT0gXCJWMlwiKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gY2lwaGVyVHJhbnNmb3JtRmFjdG9yeUJ1aWxkQ2lwaGVyQ29uc3RydWN0b3JWMigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBUkNGb3VyQ2lwaGVyKGJ1aWxkT2JqZWN0S2V5KG51bSwgZ2VuLCBrZXksIGZhbHNlKSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjZm0ubmFtZSA9PT0gXCJBRVNWMlwiKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gY2lwaGVyVHJhbnNmb3JtRmFjdG9yeUJ1aWxkQ2lwaGVyQ29uc3RydWN0b3JBRVNWMigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBRVMxMjhDaXBoZXIoYnVpbGRPYmplY3RLZXkobnVtLCBnZW4sIGtleSwgdHJ1ZSkpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoY2ZtLm5hbWUgPT09IFwiQUVTVjNcIikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNpcGhlclRyYW5zZm9ybUZhY3RvcnlCdWlsZENpcGhlckNvbnN0cnVjdG9yQUVTVjMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQUVTMjU2Q2lwaGVyKGtleSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlVua25vd24gY3J5cHRvIG1ldGhvZFwiKTtcbiAgfVxuXG4gIGNsYXNzIENpcGhlclRyYW5zZm9ybUZhY3Rvcnkge1xuICAgIGNvbnN0cnVjdG9yKGRpY3QsIGZpbGVJZCwgcGFzc3dvcmQpIHtcbiAgICAgIGNvbnN0IGZpbHRlciA9IGRpY3QuZ2V0KFwiRmlsdGVyXCIpO1xuXG4gICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZpbHRlciwgXCJTdGFuZGFyZFwiKSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJ1bmtub3duIGVuY3J5cHRpb24gbWV0aG9kXCIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZpbHRlck5hbWUgPSBmaWx0ZXIubmFtZTtcbiAgICAgIHRoaXMuZGljdCA9IGRpY3Q7XG4gICAgICBjb25zdCBhbGdvcml0aG0gPSBkaWN0LmdldChcIlZcIik7XG5cbiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihhbGdvcml0aG0pIHx8IGFsZ29yaXRobSAhPT0gMSAmJiBhbGdvcml0aG0gIT09IDIgJiYgYWxnb3JpdGhtICE9PSA0ICYmIGFsZ29yaXRobSAhPT0gNSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJ1bnN1cHBvcnRlZCBlbmNyeXB0aW9uIGFsZ29yaXRobVwiKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICBsZXQga2V5TGVuZ3RoID0gZGljdC5nZXQoXCJMZW5ndGhcIik7XG5cbiAgICAgIGlmICgha2V5TGVuZ3RoKSB7XG4gICAgICAgIGlmIChhbGdvcml0aG0gPD0gMykge1xuICAgICAgICAgIGtleUxlbmd0aCA9IDQwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmRGljdCA9IGRpY3QuZ2V0KFwiQ0ZcIik7XG4gICAgICAgICAgY29uc3Qgc3RyZWFtQ3J5cHRvTmFtZSA9IGRpY3QuZ2V0KFwiU3RtRlwiKTtcblxuICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShjZkRpY3QpICYmICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHN0cmVhbUNyeXB0b05hbWUpKSB7XG4gICAgICAgICAgICBjZkRpY3Quc3VwcHJlc3NFbmNyeXB0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJEaWN0ID0gY2ZEaWN0LmdldChzdHJlYW1DcnlwdG9OYW1lLm5hbWUpO1xuICAgICAgICAgICAga2V5TGVuZ3RoID0gaGFuZGxlckRpY3QgJiYgaGFuZGxlckRpY3QuZ2V0KFwiTGVuZ3RoXCIpIHx8IDEyODtcblxuICAgICAgICAgICAgaWYgKGtleUxlbmd0aCA8IDQwKSB7XG4gICAgICAgICAgICAgIGtleUxlbmd0aCA8PD0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGtleUxlbmd0aCkgfHwga2V5TGVuZ3RoIDwgNDAgfHwga2V5TGVuZ3RoICUgOCAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJpbnZhbGlkIGtleSBsZW5ndGhcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG93bmVyUGFzc3dvcmQgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZGljdC5nZXQoXCJPXCIpKS5zdWJhcnJheSgwLCAzMik7XG4gICAgICBjb25zdCB1c2VyUGFzc3dvcmQgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZGljdC5nZXQoXCJVXCIpKS5zdWJhcnJheSgwLCAzMik7XG4gICAgICBjb25zdCBmbGFncyA9IGRpY3QuZ2V0KFwiUFwiKTtcbiAgICAgIGNvbnN0IHJldmlzaW9uID0gZGljdC5nZXQoXCJSXCIpO1xuICAgICAgY29uc3QgZW5jcnlwdE1ldGFkYXRhID0gKGFsZ29yaXRobSA9PT0gNCB8fCBhbGdvcml0aG0gPT09IDUpICYmIGRpY3QuZ2V0KFwiRW5jcnlwdE1ldGFkYXRhXCIpICE9PSBmYWxzZTtcbiAgICAgIHRoaXMuZW5jcnlwdE1ldGFkYXRhID0gZW5jcnlwdE1ldGFkYXRhO1xuICAgICAgY29uc3QgZmlsZUlkQnl0ZXMgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZmlsZUlkKTtcbiAgICAgIGxldCBwYXNzd29yZEJ5dGVzO1xuXG4gICAgICBpZiAocGFzc3dvcmQpIHtcbiAgICAgICAgaWYgKHJldmlzaW9uID09PSA2KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHBhc3N3b3JkID0gKDAsIF91dGlsLnV0ZjhTdHJpbmdUb1N0cmluZykocGFzc3dvcmQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5OiBcIiArIFwiVW5hYmxlIHRvIGNvbnZlcnQgVVRGOCBlbmNvZGVkIHBhc3N3b3JkLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwYXNzd29yZEJ5dGVzID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKHBhc3N3b3JkKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGVuY3J5cHRpb25LZXk7XG5cbiAgICAgIGlmIChhbGdvcml0aG0gIT09IDUpIHtcbiAgICAgICAgZW5jcnlwdGlvbktleSA9IHByZXBhcmVLZXlEYXRhKGZpbGVJZEJ5dGVzLCBwYXNzd29yZEJ5dGVzLCBvd25lclBhc3N3b3JkLCB1c2VyUGFzc3dvcmQsIGZsYWdzLCByZXZpc2lvbiwga2V5TGVuZ3RoLCBlbmNyeXB0TWV0YWRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgb3duZXJWYWxpZGF0aW9uU2FsdCA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkaWN0LmdldChcIk9cIikpLnN1YmFycmF5KDMyLCA0MCk7XG4gICAgICAgIGNvbnN0IG93bmVyS2V5U2FsdCA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkaWN0LmdldChcIk9cIikpLnN1YmFycmF5KDQwLCA0OCk7XG4gICAgICAgIGNvbnN0IHVCeXRlcyA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkaWN0LmdldChcIlVcIikpLnN1YmFycmF5KDAsIDQ4KTtcbiAgICAgICAgY29uc3QgdXNlclZhbGlkYXRpb25TYWx0ID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGRpY3QuZ2V0KFwiVVwiKSkuc3ViYXJyYXkoMzIsIDQwKTtcbiAgICAgICAgY29uc3QgdXNlcktleVNhbHQgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZGljdC5nZXQoXCJVXCIpKS5zdWJhcnJheSg0MCwgNDgpO1xuICAgICAgICBjb25zdCBvd25lckVuY3J5cHRpb24gPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZGljdC5nZXQoXCJPRVwiKSk7XG4gICAgICAgIGNvbnN0IHVzZXJFbmNyeXB0aW9uID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGRpY3QuZ2V0KFwiVUVcIikpO1xuICAgICAgICBjb25zdCBwZXJtcyA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkaWN0LmdldChcIlBlcm1zXCIpKTtcbiAgICAgICAgZW5jcnlwdGlvbktleSA9IGNyZWF0ZUVuY3J5cHRpb25LZXkyMChyZXZpc2lvbiwgcGFzc3dvcmRCeXRlcywgb3duZXJQYXNzd29yZCwgb3duZXJWYWxpZGF0aW9uU2FsdCwgb3duZXJLZXlTYWx0LCB1Qnl0ZXMsIHVzZXJQYXNzd29yZCwgdXNlclZhbGlkYXRpb25TYWx0LCB1c2VyS2V5U2FsdCwgb3duZXJFbmNyeXB0aW9uLCB1c2VyRW5jcnlwdGlvbiwgcGVybXMpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWVuY3J5cHRpb25LZXkgJiYgIXBhc3N3b3JkKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5QYXNzd29yZEV4Y2VwdGlvbihcIk5vIHBhc3N3b3JkIGdpdmVuXCIsIF91dGlsLlBhc3N3b3JkUmVzcG9uc2VzLk5FRURfUEFTU1dPUkQpO1xuICAgICAgfSBlbHNlIGlmICghZW5jcnlwdGlvbktleSAmJiBwYXNzd29yZCkge1xuICAgICAgICBjb25zdCBkZWNvZGVkUGFzc3dvcmQgPSBkZWNvZGVVc2VyUGFzc3dvcmQocGFzc3dvcmRCeXRlcywgb3duZXJQYXNzd29yZCwgcmV2aXNpb24sIGtleUxlbmd0aCk7XG4gICAgICAgIGVuY3J5cHRpb25LZXkgPSBwcmVwYXJlS2V5RGF0YShmaWxlSWRCeXRlcywgZGVjb2RlZFBhc3N3b3JkLCBvd25lclBhc3N3b3JkLCB1c2VyUGFzc3dvcmQsIGZsYWdzLCByZXZpc2lvbiwga2V5TGVuZ3RoLCBlbmNyeXB0TWV0YWRhdGEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWVuY3J5cHRpb25LZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKFwiSW5jb3JyZWN0IFBhc3N3b3JkXCIsIF91dGlsLlBhc3N3b3JkUmVzcG9uc2VzLklOQ09SUkVDVF9QQVNTV09SRCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZW5jcnlwdGlvbktleSA9IGVuY3J5cHRpb25LZXk7XG5cbiAgICAgIGlmIChhbGdvcml0aG0gPj0gNCkge1xuICAgICAgICBjb25zdCBjZiA9IGRpY3QuZ2V0KFwiQ0ZcIik7XG5cbiAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGNmKSkge1xuICAgICAgICAgIGNmLnN1cHByZXNzRW5jcnlwdGlvbiA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNmID0gY2Y7XG4gICAgICAgIHRoaXMuc3RtZiA9IGRpY3QuZ2V0KFwiU3RtRlwiKSB8fCBpZGVudGl0eU5hbWU7XG4gICAgICAgIHRoaXMuc3RyZiA9IGRpY3QuZ2V0KFwiU3RyRlwiKSB8fCBpZGVudGl0eU5hbWU7XG4gICAgICAgIHRoaXMuZWZmID0gZGljdC5nZXQoXCJFRkZcIikgfHwgdGhpcy5zdG1mO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZUNpcGhlclRyYW5zZm9ybShudW0sIGdlbikge1xuICAgICAgaWYgKHRoaXMuYWxnb3JpdGhtID09PSA0IHx8IHRoaXMuYWxnb3JpdGhtID09PSA1KSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2lwaGVyVHJhbnNmb3JtKGJ1aWxkQ2lwaGVyQ29uc3RydWN0b3IodGhpcy5jZiwgdGhpcy5zdG1mLCBudW0sIGdlbiwgdGhpcy5lbmNyeXB0aW9uS2V5KSwgYnVpbGRDaXBoZXJDb25zdHJ1Y3Rvcih0aGlzLmNmLCB0aGlzLnN0cmYsIG51bSwgZ2VuLCB0aGlzLmVuY3J5cHRpb25LZXkpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gYnVpbGRPYmplY3RLZXkobnVtLCBnZW4sIHRoaXMuZW5jcnlwdGlvbktleSwgZmFsc2UpO1xuXG4gICAgICBjb25zdCBjaXBoZXJDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIGJ1aWxkQ2lwaGVyQ2lwaGVyQ29uc3RydWN0b3IoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQVJDRm91ckNpcGhlcihrZXkpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIG5ldyBDaXBoZXJUcmFuc2Zvcm0oY2lwaGVyQ29uc3RydWN0b3IsIGNpcGhlckNvbnN0cnVjdG9yKTtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5O1xufSgpO1xuXG5leHBvcnRzLkNpcGhlclRyYW5zZm9ybUZhY3RvcnkgPSBDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5O1xuXG4vKioqLyB9KSxcbi8qIDczICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLkRlY3J5cHRTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfZGVjb2RlX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjkpO1xuXG5jb25zdCBjaHVua1NpemUgPSA1MTI7XG5cbmNsYXNzIERlY3J5cHRTdHJlYW0gZXh0ZW5kcyBfZGVjb2RlX3N0cmVhbS5EZWNvZGVTdHJlYW0ge1xuICBjb25zdHJ1Y3RvcihzdHIsIG1heWJlTGVuZ3RoLCBkZWNyeXB0KSB7XG4gICAgc3VwZXIobWF5YmVMZW5ndGgpO1xuICAgIHRoaXMuc3RyID0gc3RyO1xuICAgIHRoaXMuZGljdCA9IHN0ci5kaWN0O1xuICAgIHRoaXMuZGVjcnlwdCA9IGRlY3J5cHQ7XG4gICAgdGhpcy5uZXh0Q2h1bmsgPSBudWxsO1xuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHJlYWRCbG9jaygpIHtcbiAgICBsZXQgY2h1bms7XG5cbiAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgY2h1bmsgPSB0aGlzLm5leHRDaHVuaztcbiAgICB9IGVsc2Uge1xuICAgICAgY2h1bmsgPSB0aGlzLnN0ci5nZXRCeXRlcyhjaHVua1NpemUpO1xuICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFjaHVuayB8fCBjaHVuay5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm5leHRDaHVuayA9IHRoaXMuc3RyLmdldEJ5dGVzKGNodW5rU2l6ZSk7XG4gICAgY29uc3QgaGFzTW9yZURhdGEgPSB0aGlzLm5leHRDaHVuayAmJiB0aGlzLm5leHRDaHVuay5sZW5ndGggPiAwO1xuICAgIGNvbnN0IGRlY3J5cHQgPSB0aGlzLmRlY3J5cHQ7XG4gICAgY2h1bmsgPSBkZWNyeXB0KGNodW5rLCAhaGFzTW9yZURhdGEpO1xuICAgIGxldCBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlckxlbmd0aDtcbiAgICBjb25zdCBuID0gY2h1bmsubGVuZ3RoLFxuICAgICAgICAgIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKGJ1ZmZlckxlbmd0aCArIG4pO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGgrK10gPSBjaHVua1tpXTtcbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IGJ1ZmZlckxlbmd0aDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuRGVjcnlwdFN0cmVhbSA9IERlY3J5cHRTdHJlYW07XG5cbi8qKiovIH0pLFxuLyogNzQgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuWEZBRmFjdG9yeSA9IHZvaWQgMDtcblxudmFyIF94ZmFfb2JqZWN0ID0gX193X3BkZmpzX3JlcXVpcmVfXyg3NSk7XG5cbnZhciBfYmluZCA9IF9fd19wZGZqc19yZXF1aXJlX18oNzkpO1xuXG52YXIgX2RhdGEgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDg1KTtcblxudmFyIF9mb250cyA9IF9fd19wZGZqc19yZXF1aXJlX18oODMpO1xuXG52YXIgX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg3Nik7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfcGFyc2VyID0gX193X3BkZmpzX3JlcXVpcmVfXyg4Nik7XG5cbnZhciBfeGh0bWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDk2KTtcblxuY2xhc3MgWEZBRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5yb290ID0gbmV3IF9wYXJzZXIuWEZBUGFyc2VyKCkucGFyc2UoWEZBRmFjdG9yeS5fY3JlYXRlRG9jdW1lbnQoZGF0YSkpO1xuICAgICAgY29uc3QgYmluZGVyID0gbmV3IF9iaW5kLkJpbmRlcih0aGlzLnJvb3QpO1xuICAgICAgdGhpcy5mb3JtID0gYmluZGVyLmJpbmQoKTtcbiAgICAgIHRoaXMuZGF0YUhhbmRsZXIgPSBuZXcgX2RhdGEuRGF0YUhhbmRsZXIodGhpcy5yb290LCBiaW5kZXIuZ2V0RGF0YSgpKTtcbiAgICAgIHRoaXMuZm9ybVtfeGZhX29iamVjdC4kZ2xvYmFsRGF0YV0udGVtcGxhdGUgPSB0aGlzLmZvcm07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZyBhbmQgYmluZGluZzogJHtlfWApO1xuICAgIH1cbiAgfVxuXG4gIGlzVmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMucm9vdCAmJiB0aGlzLmZvcm07XG4gIH1cblxuICBfY3JlYXRlUGFnZXNIZWxwZXIoKSB7XG4gICAgY29uc3QgaXRlcmF0b3IgPSB0aGlzLmZvcm1bX3hmYV9vYmplY3QuJHRvUGFnZXNdKCk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgbmV4dEl0ZXJhdGlvbiA9ICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZXJhdG9yLm5leHQoKTtcblxuICAgICAgICAgIGlmICh2YWx1ZS5kb25lKSB7XG4gICAgICAgICAgICByZXNvbHZlKHZhbHVlLnZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0VGltZW91dChuZXh0SXRlcmF0aW9uLCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHNldFRpbWVvdXQobmV4dEl0ZXJhdGlvbiwgMCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBfY3JlYXRlUGFnZXMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucGFnZXMgPSBhd2FpdCB0aGlzLl9jcmVhdGVQYWdlc0hlbHBlcigpO1xuICAgICAgdGhpcy5kaW1zID0gdGhpcy5wYWdlcy5jaGlsZHJlbi5tYXAoYyA9PiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHRcbiAgICAgICAgfSA9IGMuYXR0cmlidXRlcy5zdHlsZTtcbiAgICAgICAgcmV0dXJuIFswLCAwLCBwYXJzZUludCh3aWR0aCksIHBhcnNlSW50KGhlaWdodCldO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgbGF5b3V0OiAke2V9YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Qm91bmRpbmdCb3gocGFnZUluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMuZGltc1twYWdlSW5kZXhdO1xuICB9XG5cbiAgYXN5bmMgZ2V0TnVtUGFnZXMoKSB7XG4gICAgaWYgKCF0aGlzLnBhZ2VzKSB7XG4gICAgICBhd2FpdCB0aGlzLl9jcmVhdGVQYWdlcygpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRpbXMubGVuZ3RoO1xuICB9XG5cbiAgc2V0SW1hZ2VzKGltYWdlcykge1xuICAgIHRoaXMuZm9ybVtfeGZhX29iamVjdC4kZ2xvYmFsRGF0YV0uaW1hZ2VzID0gaW1hZ2VzO1xuICB9XG5cbiAgc2V0Rm9udHMoZm9udHMpIHtcbiAgICB0aGlzLmZvcm1bX3hmYV9vYmplY3QuJGdsb2JhbERhdGFdLmZvbnRGaW5kZXIgPSBuZXcgX2ZvbnRzLkZvbnRGaW5kZXIoZm9udHMpO1xuICAgIGNvbnN0IG1pc3NpbmdGb250cyA9IFtdO1xuXG4gICAgZm9yIChsZXQgdHlwZWZhY2Ugb2YgdGhpcy5mb3JtW194ZmFfb2JqZWN0LiRnbG9iYWxEYXRhXS51c2VkVHlwZWZhY2VzKSB7XG4gICAgICB0eXBlZmFjZSA9ICgwLCBfdXRpbHMuc3RyaXBRdW90ZXMpKHR5cGVmYWNlKTtcblxuICAgICAgY29uc3QgZm9udCA9IHRoaXMuZm9ybVtfeGZhX29iamVjdC4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlci5maW5kKHR5cGVmYWNlKTtcblxuICAgICAgaWYgKCFmb250KSB7XG4gICAgICAgIG1pc3NpbmdGb250cy5wdXNoKHR5cGVmYWNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWlzc2luZ0ZvbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBtaXNzaW5nRm9udHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBhcHBlbmRGb250cyhmb250cywgcmVhbGx5TWlzc2luZ0ZvbnRzKSB7XG4gICAgdGhpcy5mb3JtW194ZmFfb2JqZWN0LiRnbG9iYWxEYXRhXS5mb250RmluZGVyLmFkZChmb250cywgcmVhbGx5TWlzc2luZ0ZvbnRzKTtcbiAgfVxuXG4gIGFzeW5jIGdldFBhZ2VzKCkge1xuICAgIGlmICghdGhpcy5wYWdlcykge1xuICAgICAgYXdhaXQgdGhpcy5fY3JlYXRlUGFnZXMoKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYWdlcyA9IHRoaXMucGFnZXM7XG4gICAgdGhpcy5wYWdlcyA9IG51bGw7XG4gICAgcmV0dXJuIHBhZ2VzO1xuICB9XG5cbiAgc2VyaWFsaXplRGF0YShzdG9yYWdlKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YUhhbmRsZXIuc2VyaWFsaXplKHN0b3JhZ2UpO1xuICB9XG5cbiAgc3RhdGljIF9jcmVhdGVEb2N1bWVudChkYXRhKSB7XG4gICAgaWYgKCFkYXRhW1wiL3hkcDp4ZHBcIl0pIHtcbiAgICAgIHJldHVybiBkYXRhW1wieGRwOnhkcFwiXTtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhkYXRhKS5qb2luKFwiXCIpO1xuICB9XG5cbiAgc3RhdGljIGdldFJpY2hUZXh0QXNIdG1sKHJjKSB7XG4gICAgaWYgKCFyYyB8fCB0eXBlb2YgcmMgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBsZXQgcm9vdCA9IG5ldyBfcGFyc2VyLlhGQVBhcnNlcihfeGh0bWwuWGh0bWxOYW1lc3BhY2UsIHRydWUpLnBhcnNlKHJjKTtcblxuICAgICAgaWYgKCFbXCJib2R5XCIsIFwieGh0bWxcIl0uaW5jbHVkZXMocm9vdFtfeGZhX29iamVjdC4kbm9kZU5hbWVdKSkge1xuICAgICAgICBjb25zdCBuZXdSb290ID0gX3hodG1sLlhodG1sTmFtZXNwYWNlLmJvZHkoe30pO1xuXG4gICAgICAgIG5ld1Jvb3RbX3hmYV9vYmplY3QuJGFwcGVuZENoaWxkXShyb290KTtcblxuICAgICAgICByb290ID0gbmV3Um9vdDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gcm9vdFtfeGZhX29iamVjdC4kdG9IVE1MXSgpO1xuXG4gICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGh0bWxcbiAgICAgIH0gPSByZXN1bHQ7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGF0dHJpYnV0ZXNcbiAgICAgIH0gPSBodG1sO1xuXG4gICAgICBpZiAoYXR0cmlidXRlcykge1xuICAgICAgICBpZiAoYXR0cmlidXRlcy5jbGFzcykge1xuICAgICAgICAgIGF0dHJpYnV0ZXMuY2xhc3MgPSBhdHRyaWJ1dGVzLmNsYXNzLmZpbHRlcihhdHRyID0+ICFhdHRyLnN0YXJ0c1dpdGgoXCJ4ZmFcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXR0cmlidXRlcy5kaXIgPSBcImF1dG9cIjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaHRtbCxcbiAgICAgICAgc3RyOiByb290W194ZmFfb2JqZWN0LiR0ZXh0XSgpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShgWEZBIC0gYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHBhcnNpbmcgb2YgcmljaCB0ZXh0OiAke2V9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxufVxuXG5leHBvcnRzLlhGQUZhY3RvcnkgPSBYRkFGYWN0b3J5O1xuXG4vKioqLyB9KSxcbi8qIDc1ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlhtbE9iamVjdCA9IGV4cG9ydHMuWEZBT2JqZWN0QXJyYXkgPSBleHBvcnRzLlhGQU9iamVjdCA9IGV4cG9ydHMuWEZBQXR0cmlidXRlID0gZXhwb3J0cy5TdHJpbmdPYmplY3QgPSBleHBvcnRzLk9wdGlvbk9iamVjdCA9IGV4cG9ydHMuT3B0aW9uMTAgPSBleHBvcnRzLk9wdGlvbjAxID0gZXhwb3J0cy5JbnRlZ2VyT2JqZWN0ID0gZXhwb3J0cy5Db250ZW50T2JqZWN0ID0gZXhwb3J0cy4kdWlkID0gZXhwb3J0cy4kdG9TdHlsZSA9IGV4cG9ydHMuJHRvU3RyaW5nID0gZXhwb3J0cy4kdG9QYWdlcyA9IGV4cG9ydHMuJHRvSFRNTCA9IGV4cG9ydHMuJHRleHQgPSBleHBvcnRzLiR0YWJJbmRleCA9IGV4cG9ydHMuJHNldFZhbHVlID0gZXhwb3J0cy4kc2V0U2V0QXR0cmlidXRlcyA9IGV4cG9ydHMuJHNldElkID0gZXhwb3J0cy4kc2VhcmNoTm9kZSA9IGV4cG9ydHMuJHJvb3QgPSBleHBvcnRzLiRyZXNvbHZlUHJvdG90eXBlcyA9IGV4cG9ydHMuJHJlbW92ZUNoaWxkID0gZXhwb3J0cy4kcHVzaFBhcmEgPSBleHBvcnRzLiRwdXNoR2x5cGhzID0gZXhwb3J0cy4kcG9wUGFyYSA9IGV4cG9ydHMuJG9uVGV4dCA9IGV4cG9ydHMuJG9uQ2hpbGRDaGVjayA9IGV4cG9ydHMuJG9uQ2hpbGQgPSBleHBvcnRzLiRuc0F0dHJpYnV0ZXMgPSBleHBvcnRzLiRub2RlTmFtZSA9IGV4cG9ydHMuJG5hbWVzcGFjZUlkID0gZXhwb3J0cy4kaXNVc2FibGUgPSBleHBvcnRzLiRpc1RyYW5zcGFyZW50ID0gZXhwb3J0cy4kaXNUaGVyZU1vcmVXaWR0aCA9IGV4cG9ydHMuJGlzU3BsaXR0YWJsZSA9IGV4cG9ydHMuJGlzTnNBZ25vc3RpYyA9IGV4cG9ydHMuJGlzRGVzY2VuZGVudCA9IGV4cG9ydHMuJGlzRGF0YVZhbHVlID0gZXhwb3J0cy4kaXNDREFUQVhtbCA9IGV4cG9ydHMuJGlzQmluZGFibGUgPSBleHBvcnRzLiRpbnNlcnRBdCA9IGV4cG9ydHMuJGluZGV4T2YgPSBleHBvcnRzLiRpZHMgPSBleHBvcnRzLiRoYXNTZXR0YWJsZVZhbHVlID0gZXhwb3J0cy4kZ2xvYmFsRGF0YSA9IGV4cG9ydHMuJGdldFRlbXBsYXRlUm9vdCA9IGV4cG9ydHMuJGdldFN1YmZvcm1QYXJlbnQgPSBleHBvcnRzLiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdCA9IGV4cG9ydHMuJGdldFBhcmVudCA9IGV4cG9ydHMuJGdldE5leHRQYWdlID0gZXhwb3J0cy4kZ2V0RXh0cmEgPSBleHBvcnRzLiRnZXREYXRhVmFsdWUgPSBleHBvcnRzLiRnZXRDb250YWluZWRDaGlsZHJlbiA9IGV4cG9ydHMuJGdldENoaWxkcmVuQnlOYW1lSXQgPSBleHBvcnRzLiRnZXRDaGlsZHJlbkJ5TmFtZSA9IGV4cG9ydHMuJGdldENoaWxkcmVuQnlDbGFzcyA9IGV4cG9ydHMuJGdldENoaWxkcmVuID0gZXhwb3J0cy4kZ2V0QXZhaWxhYmxlU3BhY2UgPSBleHBvcnRzLiRnZXRBdHRyaWJ1dGVzID0gZXhwb3J0cy4kZ2V0QXR0cmlidXRlSXQgPSBleHBvcnRzLiRmbHVzaEhUTUwgPSBleHBvcnRzLiRmaW5hbGl6ZSA9IGV4cG9ydHMuJGV4dHJhID0gZXhwb3J0cy4kZHVtcCA9IGV4cG9ydHMuJGRhdGEgPSBleHBvcnRzLiRjb250ZW50ID0gZXhwb3J0cy4kY29uc3VtZWQgPSBleHBvcnRzLiRjbG9uZSA9IGV4cG9ydHMuJGNsZWFudXAgPSBleHBvcnRzLiRjbGVhblBhZ2UgPSBleHBvcnRzLiRjbGVhbiA9IGV4cG9ydHMuJGNoaWxkcmVuVG9IVE1MID0gZXhwb3J0cy4kYXBwZW5kQ2hpbGQgPSBleHBvcnRzLiRhZGRIVE1MID0gZXhwb3J0cy4kYWNjZXB0V2hpdGVzcGFjZSA9IHZvaWQgMDtcblxudmFyIF91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oNzYpO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG52YXIgX25hbWVzcGFjZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc3KTtcblxudmFyIF9zb20gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc4KTtcblxuY29uc3QgJGFjY2VwdFdoaXRlc3BhY2UgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGFjY2VwdFdoaXRlc3BhY2UgPSAkYWNjZXB0V2hpdGVzcGFjZTtcbmNvbnN0ICRhZGRIVE1MID0gU3ltYm9sKCk7XG5leHBvcnRzLiRhZGRIVE1MID0gJGFkZEhUTUw7XG5jb25zdCAkYXBwZW5kQ2hpbGQgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGFwcGVuZENoaWxkID0gJGFwcGVuZENoaWxkO1xuY29uc3QgJGNoaWxkcmVuVG9IVE1MID0gU3ltYm9sKCk7XG5leHBvcnRzLiRjaGlsZHJlblRvSFRNTCA9ICRjaGlsZHJlblRvSFRNTDtcbmNvbnN0ICRjbGVhbiA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kY2xlYW4gPSAkY2xlYW47XG5jb25zdCAkY2xlYW5QYWdlID0gU3ltYm9sKCk7XG5leHBvcnRzLiRjbGVhblBhZ2UgPSAkY2xlYW5QYWdlO1xuY29uc3QgJGNsZWFudXAgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGNsZWFudXAgPSAkY2xlYW51cDtcbmNvbnN0ICRjbG9uZSA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kY2xvbmUgPSAkY2xvbmU7XG5jb25zdCAkY29uc3VtZWQgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGNvbnN1bWVkID0gJGNvbnN1bWVkO1xuY29uc3QgJGNvbnRlbnQgPSBTeW1ib2woXCJjb250ZW50XCIpO1xuZXhwb3J0cy4kY29udGVudCA9ICRjb250ZW50O1xuY29uc3QgJGRhdGEgPSBTeW1ib2woXCJkYXRhXCIpO1xuZXhwb3J0cy4kZGF0YSA9ICRkYXRhO1xuY29uc3QgJGR1bXAgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGR1bXAgPSAkZHVtcDtcbmNvbnN0ICRleHRyYSA9IFN5bWJvbChcImV4dHJhXCIpO1xuZXhwb3J0cy4kZXh0cmEgPSAkZXh0cmE7XG5jb25zdCAkZmluYWxpemUgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGZpbmFsaXplID0gJGZpbmFsaXplO1xuY29uc3QgJGZsdXNoSFRNTCA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kZmx1c2hIVE1MID0gJGZsdXNoSFRNTDtcbmNvbnN0ICRnZXRBdHRyaWJ1dGVJdCA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kZ2V0QXR0cmlidXRlSXQgPSAkZ2V0QXR0cmlidXRlSXQ7XG5jb25zdCAkZ2V0QXR0cmlidXRlcyA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kZ2V0QXR0cmlidXRlcyA9ICRnZXRBdHRyaWJ1dGVzO1xuY29uc3QgJGdldEF2YWlsYWJsZVNwYWNlID0gU3ltYm9sKCk7XG5leHBvcnRzLiRnZXRBdmFpbGFibGVTcGFjZSA9ICRnZXRBdmFpbGFibGVTcGFjZTtcbmNvbnN0ICRnZXRDaGlsZHJlbkJ5Q2xhc3MgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGdldENoaWxkcmVuQnlDbGFzcyA9ICRnZXRDaGlsZHJlbkJ5Q2xhc3M7XG5jb25zdCAkZ2V0Q2hpbGRyZW5CeU5hbWUgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGdldENoaWxkcmVuQnlOYW1lID0gJGdldENoaWxkcmVuQnlOYW1lO1xuY29uc3QgJGdldENoaWxkcmVuQnlOYW1lSXQgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGdldENoaWxkcmVuQnlOYW1lSXQgPSAkZ2V0Q2hpbGRyZW5CeU5hbWVJdDtcbmNvbnN0ICRnZXREYXRhVmFsdWUgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGdldERhdGFWYWx1ZSA9ICRnZXREYXRhVmFsdWU7XG5jb25zdCAkZ2V0RXh0cmEgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGdldEV4dHJhID0gJGdldEV4dHJhO1xuY29uc3QgJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0ID0gU3ltYm9sKCk7XG5leHBvcnRzLiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdCA9ICRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdDtcbmNvbnN0ICRnZXRDaGlsZHJlbiA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kZ2V0Q2hpbGRyZW4gPSAkZ2V0Q2hpbGRyZW47XG5jb25zdCAkZ2V0Q29udGFpbmVkQ2hpbGRyZW4gPSBTeW1ib2woKTtcbmV4cG9ydHMuJGdldENvbnRhaW5lZENoaWxkcmVuID0gJGdldENvbnRhaW5lZENoaWxkcmVuO1xuY29uc3QgJGdldE5leHRQYWdlID0gU3ltYm9sKCk7XG5leHBvcnRzLiRnZXROZXh0UGFnZSA9ICRnZXROZXh0UGFnZTtcbmNvbnN0ICRnZXRTdWJmb3JtUGFyZW50ID0gU3ltYm9sKCk7XG5leHBvcnRzLiRnZXRTdWJmb3JtUGFyZW50ID0gJGdldFN1YmZvcm1QYXJlbnQ7XG5jb25zdCAkZ2V0UGFyZW50ID0gU3ltYm9sKCk7XG5leHBvcnRzLiRnZXRQYXJlbnQgPSAkZ2V0UGFyZW50O1xuY29uc3QgJGdldFRlbXBsYXRlUm9vdCA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kZ2V0VGVtcGxhdGVSb290ID0gJGdldFRlbXBsYXRlUm9vdDtcbmNvbnN0ICRnbG9iYWxEYXRhID0gU3ltYm9sKCk7XG5leHBvcnRzLiRnbG9iYWxEYXRhID0gJGdsb2JhbERhdGE7XG5jb25zdCAkaGFzU2V0dGFibGVWYWx1ZSA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kaGFzU2V0dGFibGVWYWx1ZSA9ICRoYXNTZXR0YWJsZVZhbHVlO1xuY29uc3QgJGlkcyA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kaWRzID0gJGlkcztcbmNvbnN0ICRpbmRleE9mID0gU3ltYm9sKCk7XG5leHBvcnRzLiRpbmRleE9mID0gJGluZGV4T2Y7XG5jb25zdCAkaW5zZXJ0QXQgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGluc2VydEF0ID0gJGluc2VydEF0O1xuY29uc3QgJGlzQ0RBVEFYbWwgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGlzQ0RBVEFYbWwgPSAkaXNDREFUQVhtbDtcbmNvbnN0ICRpc0JpbmRhYmxlID0gU3ltYm9sKCk7XG5leHBvcnRzLiRpc0JpbmRhYmxlID0gJGlzQmluZGFibGU7XG5jb25zdCAkaXNEYXRhVmFsdWUgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGlzRGF0YVZhbHVlID0gJGlzRGF0YVZhbHVlO1xuY29uc3QgJGlzRGVzY2VuZGVudCA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kaXNEZXNjZW5kZW50ID0gJGlzRGVzY2VuZGVudDtcbmNvbnN0ICRpc05zQWdub3N0aWMgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGlzTnNBZ25vc3RpYyA9ICRpc05zQWdub3N0aWM7XG5jb25zdCAkaXNTcGxpdHRhYmxlID0gU3ltYm9sKCk7XG5leHBvcnRzLiRpc1NwbGl0dGFibGUgPSAkaXNTcGxpdHRhYmxlO1xuY29uc3QgJGlzVGhlcmVNb3JlV2lkdGggPSBTeW1ib2woKTtcbmV4cG9ydHMuJGlzVGhlcmVNb3JlV2lkdGggPSAkaXNUaGVyZU1vcmVXaWR0aDtcbmNvbnN0ICRpc1RyYW5zcGFyZW50ID0gU3ltYm9sKCk7XG5leHBvcnRzLiRpc1RyYW5zcGFyZW50ID0gJGlzVHJhbnNwYXJlbnQ7XG5jb25zdCAkaXNVc2FibGUgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGlzVXNhYmxlID0gJGlzVXNhYmxlO1xuY29uc3QgJGxhc3RBdHRyaWJ1dGUgPSBTeW1ib2woKTtcbmNvbnN0ICRuYW1lc3BhY2VJZCA9IFN5bWJvbChcIm5hbWVzcGFjZUlkXCIpO1xuZXhwb3J0cy4kbmFtZXNwYWNlSWQgPSAkbmFtZXNwYWNlSWQ7XG5jb25zdCAkbm9kZU5hbWUgPSBTeW1ib2woXCJub2RlTmFtZVwiKTtcbmV4cG9ydHMuJG5vZGVOYW1lID0gJG5vZGVOYW1lO1xuY29uc3QgJG5zQXR0cmlidXRlcyA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kbnNBdHRyaWJ1dGVzID0gJG5zQXR0cmlidXRlcztcbmNvbnN0ICRvbkNoaWxkID0gU3ltYm9sKCk7XG5leHBvcnRzLiRvbkNoaWxkID0gJG9uQ2hpbGQ7XG5jb25zdCAkb25DaGlsZENoZWNrID0gU3ltYm9sKCk7XG5leHBvcnRzLiRvbkNoaWxkQ2hlY2sgPSAkb25DaGlsZENoZWNrO1xuY29uc3QgJG9uVGV4dCA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kb25UZXh0ID0gJG9uVGV4dDtcbmNvbnN0ICRwdXNoR2x5cGhzID0gU3ltYm9sKCk7XG5leHBvcnRzLiRwdXNoR2x5cGhzID0gJHB1c2hHbHlwaHM7XG5jb25zdCAkcG9wUGFyYSA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kcG9wUGFyYSA9ICRwb3BQYXJhO1xuY29uc3QgJHB1c2hQYXJhID0gU3ltYm9sKCk7XG5leHBvcnRzLiRwdXNoUGFyYSA9ICRwdXNoUGFyYTtcbmNvbnN0ICRyZW1vdmVDaGlsZCA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kcmVtb3ZlQ2hpbGQgPSAkcmVtb3ZlQ2hpbGQ7XG5jb25zdCAkcm9vdCA9IFN5bWJvbChcInJvb3RcIik7XG5leHBvcnRzLiRyb290ID0gJHJvb3Q7XG5jb25zdCAkcmVzb2x2ZVByb3RvdHlwZXMgPSBTeW1ib2woKTtcbmV4cG9ydHMuJHJlc29sdmVQcm90b3R5cGVzID0gJHJlc29sdmVQcm90b3R5cGVzO1xuY29uc3QgJHNlYXJjaE5vZGUgPSBTeW1ib2woKTtcbmV4cG9ydHMuJHNlYXJjaE5vZGUgPSAkc2VhcmNoTm9kZTtcbmNvbnN0ICRzZXRJZCA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kc2V0SWQgPSAkc2V0SWQ7XG5jb25zdCAkc2V0U2V0QXR0cmlidXRlcyA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kc2V0U2V0QXR0cmlidXRlcyA9ICRzZXRTZXRBdHRyaWJ1dGVzO1xuY29uc3QgJHNldFZhbHVlID0gU3ltYm9sKCk7XG5leHBvcnRzLiRzZXRWYWx1ZSA9ICRzZXRWYWx1ZTtcbmNvbnN0ICR0YWJJbmRleCA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kdGFiSW5kZXggPSAkdGFiSW5kZXg7XG5jb25zdCAkdGV4dCA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kdGV4dCA9ICR0ZXh0O1xuY29uc3QgJHRvUGFnZXMgPSBTeW1ib2woKTtcbmV4cG9ydHMuJHRvUGFnZXMgPSAkdG9QYWdlcztcbmNvbnN0ICR0b0hUTUwgPSBTeW1ib2woKTtcbmV4cG9ydHMuJHRvSFRNTCA9ICR0b0hUTUw7XG5jb25zdCAkdG9TdHJpbmcgPSBTeW1ib2woKTtcbmV4cG9ydHMuJHRvU3RyaW5nID0gJHRvU3RyaW5nO1xuY29uc3QgJHRvU3R5bGUgPSBTeW1ib2woKTtcbmV4cG9ydHMuJHRvU3R5bGUgPSAkdG9TdHlsZTtcbmNvbnN0ICR1aWQgPSBTeW1ib2woXCJ1aWRcIik7XG5leHBvcnRzLiR1aWQgPSAkdWlkO1xuXG5jb25zdCBfYXBwbHlQcm90b3R5cGUgPSBTeW1ib2woKTtcblxuY29uc3QgX2F0dHJpYnV0ZXMgPSBTeW1ib2woKTtcblxuY29uc3QgX2F0dHJpYnV0ZU5hbWVzID0gU3ltYm9sKCk7XG5cbmNvbnN0IF9jaGlsZHJlbiA9IFN5bWJvbChcIl9jaGlsZHJlblwiKTtcblxuY29uc3QgX2Nsb25lQXR0cmlidXRlID0gU3ltYm9sKCk7XG5cbmNvbnN0IF9kYXRhVmFsdWUgPSBTeW1ib2woKTtcblxuY29uc3QgX2RlZmF1bHRWYWx1ZSA9IFN5bWJvbCgpO1xuXG5jb25zdCBfZmlsdGVyZWRDaGlsZHJlbkdlbmVyYXRvciA9IFN5bWJvbCgpO1xuXG5jb25zdCBfZ2V0UHJvdG90eXBlID0gU3ltYm9sKCk7XG5cbmNvbnN0IF9nZXRVbnNldEF0dHJpYnV0ZXMgPSBTeW1ib2woKTtcblxuY29uc3QgX2hhc0NoaWxkcmVuID0gU3ltYm9sKCk7XG5cbmNvbnN0IF9tYXggPSBTeW1ib2woKTtcblxuY29uc3QgX29wdGlvbnMgPSBTeW1ib2woKTtcblxuY29uc3QgX3BhcmVudCA9IFN5bWJvbChcInBhcmVudFwiKTtcblxuY29uc3QgX3Jlc29sdmVQcm90b3R5cGVzSGVscGVyID0gU3ltYm9sKCk7XG5cbmNvbnN0IF9zZXRBdHRyaWJ1dGVzID0gU3ltYm9sKCk7XG5cbmNvbnN0IF92YWxpZGF0b3IgPSBTeW1ib2woKTtcblxubGV0IHVpZCA9IDA7XG5jb25zdCBOU19EQVRBU0VUUyA9IF9uYW1lc3BhY2VzLk5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZDtcblxuY2xhc3MgWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IobnNJZCwgbmFtZSwgaGFzQ2hpbGRyZW4gPSBmYWxzZSkge1xuICAgIHRoaXNbJG5hbWVzcGFjZUlkXSA9IG5zSWQ7XG4gICAgdGhpc1skbm9kZU5hbWVdID0gbmFtZTtcbiAgICB0aGlzW19oYXNDaGlsZHJlbl0gPSBoYXNDaGlsZHJlbjtcbiAgICB0aGlzW19wYXJlbnRdID0gbnVsbDtcbiAgICB0aGlzW19jaGlsZHJlbl0gPSBbXTtcbiAgICB0aGlzWyR1aWRdID0gYCR7bmFtZX0ke3VpZCsrfWA7XG4gICAgdGhpc1skZ2xvYmFsRGF0YV0gPSBudWxsO1xuICB9XG5cbiAgWyRvbkNoaWxkXShjaGlsZCkge1xuICAgIGlmICghdGhpc1tfaGFzQ2hpbGRyZW5dIHx8ICF0aGlzWyRvbkNoaWxkQ2hlY2tdKGNoaWxkKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWUgPSBjaGlsZFskbm9kZU5hbWVdO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzW25hbWVdO1xuXG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBYRkFPYmplY3RBcnJheSkge1xuICAgICAgaWYgKG5vZGUucHVzaChjaGlsZCkpIHtcbiAgICAgICAgdGhpc1skYXBwZW5kQ2hpbGRdKGNoaWxkKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChub2RlICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXNbJHJlbW92ZUNoaWxkXShub2RlKTtcbiAgICAgIH1cblxuICAgICAgdGhpc1tuYW1lXSA9IGNoaWxkO1xuICAgICAgdGhpc1skYXBwZW5kQ2hpbGRdKGNoaWxkKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGxldCBpZCA9IFwiXCI7XG5cbiAgICBpZiAodGhpcy5pZCkge1xuICAgICAgaWQgPSBgIChpZDogJHt0aGlzLmlkfSlgO1xuICAgIH0gZWxzZSBpZiAodGhpcy5uYW1lKSB7XG4gICAgICBpZCA9IGAgKG5hbWU6ICR7dGhpcy5uYW1lfSAke3RoaXMuaC52YWx1ZX0pYDtcbiAgICB9XG5cbiAgICAoMCwgX3V0aWwud2FybikoYFhGQSAtIG5vZGUgXCIke3RoaXNbJG5vZGVOYW1lXX1cIiR7aWR9IGhhcyBhbHJlYWR5IGVub3VnaCBcIiR7bmFtZX1cIiFgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBbJG9uQ2hpbGRDaGVja10oY2hpbGQpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNPd25Qcm9wZXJ0eShjaGlsZFskbm9kZU5hbWVdKSAmJiBjaGlsZFskbmFtZXNwYWNlSWRdID09PSB0aGlzWyRuYW1lc3BhY2VJZF07XG4gIH1cblxuICBbJGlzTnNBZ25vc3RpY10oKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgWyRhY2NlcHRXaGl0ZXNwYWNlXSgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBbJGlzQ0RBVEFYbWxdKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIFskaXNCaW5kYWJsZV0oKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgWyRwb3BQYXJhXSgpIHtcbiAgICBpZiAodGhpcy5wYXJhKSB7XG4gICAgICB0aGlzWyRnZXRUZW1wbGF0ZVJvb3RdKClbJGV4dHJhXS5wYXJhU3RhY2sucG9wKCk7XG4gICAgfVxuICB9XG5cbiAgWyRwdXNoUGFyYV0oKSB7XG4gICAgdGhpc1skZ2V0VGVtcGxhdGVSb290XSgpWyRleHRyYV0ucGFyYVN0YWNrLnB1c2godGhpcy5wYXJhKTtcbiAgfVxuXG4gIFskc2V0SWRdKGlkcykge1xuICAgIGlmICh0aGlzLmlkICYmIHRoaXNbJG5hbWVzcGFjZUlkXSA9PT0gX25hbWVzcGFjZXMuTmFtZXNwYWNlSWRzLnRlbXBsYXRlLmlkKSB7XG4gICAgICBpZHMuc2V0KHRoaXMuaWQsIHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIFskZ2V0VGVtcGxhdGVSb290XSgpIHtcbiAgICByZXR1cm4gdGhpc1skZ2xvYmFsRGF0YV0udGVtcGxhdGU7XG4gIH1cblxuICBbJGlzU3BsaXR0YWJsZV0oKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgWyRpc1RoZXJlTW9yZVdpZHRoXSgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBbJGFwcGVuZENoaWxkXShjaGlsZCkge1xuICAgIGNoaWxkW19wYXJlbnRdID0gdGhpcztcblxuICAgIHRoaXNbX2NoaWxkcmVuXS5wdXNoKGNoaWxkKTtcblxuICAgIGlmICghY2hpbGRbJGdsb2JhbERhdGFdICYmIHRoaXNbJGdsb2JhbERhdGFdKSB7XG4gICAgICBjaGlsZFskZ2xvYmFsRGF0YV0gPSB0aGlzWyRnbG9iYWxEYXRhXTtcbiAgICB9XG4gIH1cblxuICBbJHJlbW92ZUNoaWxkXShjaGlsZCkge1xuICAgIGNvbnN0IGkgPSB0aGlzW19jaGlsZHJlbl0uaW5kZXhPZihjaGlsZCk7XG5cbiAgICB0aGlzW19jaGlsZHJlbl0uc3BsaWNlKGksIDEpO1xuICB9XG5cbiAgWyRoYXNTZXR0YWJsZVZhbHVlXSgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNPd25Qcm9wZXJ0eShcInZhbHVlXCIpO1xuICB9XG5cbiAgWyRzZXRWYWx1ZV0oXykge31cblxuICBbJG9uVGV4dF0oXykge31cblxuICBbJGZpbmFsaXplXSgpIHt9XG5cbiAgWyRjbGVhbl0oYnVpbGRlcikge1xuICAgIGRlbGV0ZSB0aGlzW19oYXNDaGlsZHJlbl07XG5cbiAgICBpZiAodGhpc1skY2xlYW51cF0pIHtcbiAgICAgIGJ1aWxkZXIuY2xlYW4odGhpc1skY2xlYW51cF0pO1xuICAgICAgZGVsZXRlIHRoaXNbJGNsZWFudXBdO1xuICAgIH1cbiAgfVxuXG4gIFskaW5kZXhPZl0oY2hpbGQpIHtcbiAgICByZXR1cm4gdGhpc1tfY2hpbGRyZW5dLmluZGV4T2YoY2hpbGQpO1xuICB9XG5cbiAgWyRpbnNlcnRBdF0oaSwgY2hpbGQpIHtcbiAgICBjaGlsZFtfcGFyZW50XSA9IHRoaXM7XG5cbiAgICB0aGlzW19jaGlsZHJlbl0uc3BsaWNlKGksIDAsIGNoaWxkKTtcblxuICAgIGlmICghY2hpbGRbJGdsb2JhbERhdGFdICYmIHRoaXNbJGdsb2JhbERhdGFdKSB7XG4gICAgICBjaGlsZFskZ2xvYmFsRGF0YV0gPSB0aGlzWyRnbG9iYWxEYXRhXTtcbiAgICB9XG4gIH1cblxuICBbJGlzVHJhbnNwYXJlbnRdKCkge1xuICAgIHJldHVybiAhdGhpcy5uYW1lO1xuICB9XG5cbiAgWyRsYXN0QXR0cmlidXRlXSgpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIFskdGV4dF0oKSB7XG4gICAgaWYgKHRoaXNbX2NoaWxkcmVuXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzWyRjb250ZW50XTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1tfY2hpbGRyZW5dLm1hcChjID0+IGNbJHRleHRdKCkpLmpvaW4oXCJcIik7XG4gIH1cblxuICBnZXQgW19hdHRyaWJ1dGVOYW1lc10oKSB7XG4gICAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7XG5cbiAgICBpZiAoIXByb3RvLl9hdHRyaWJ1dGVzKSB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0gcHJvdG8uX2F0dHJpYnV0ZXMgPSBuZXcgU2V0KCk7XG5cbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkge1xuICAgICAgICBpZiAodGhpc1tuYW1lXSA9PT0gbnVsbCB8fCB0aGlzW25hbWVdIGluc3RhbmNlb2YgWEZBT2JqZWN0IHx8IHRoaXNbbmFtZV0gaW5zdGFuY2VvZiBYRkFPYmplY3RBcnJheSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgYXR0cmlidXRlcy5hZGQobmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIF9hdHRyaWJ1dGVOYW1lcywgcHJvdG8uX2F0dHJpYnV0ZXMpO1xuICB9XG5cbiAgWyRpc0Rlc2NlbmRlbnRdKHBhcmVudCkge1xuICAgIGxldCBub2RlID0gdGhpcztcblxuICAgIHdoaWxlIChub2RlKSB7XG4gICAgICBpZiAobm9kZSA9PT0gcGFyZW50KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZVskZ2V0UGFyZW50XSgpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIFskZ2V0UGFyZW50XSgpIHtcbiAgICByZXR1cm4gdGhpc1tfcGFyZW50XTtcbiAgfVxuXG4gIFskZ2V0U3ViZm9ybVBhcmVudF0oKSB7XG4gICAgcmV0dXJuIHRoaXNbJGdldFBhcmVudF0oKTtcbiAgfVxuXG4gIFskZ2V0Q2hpbGRyZW5dKG5hbWUgPSBudWxsKSB7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICByZXR1cm4gdGhpc1tfY2hpbGRyZW5dO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzW25hbWVdO1xuICB9XG5cbiAgWyRkdW1wXSgpIHtcbiAgICBjb25zdCBkdW1wZWQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgaWYgKHRoaXNbJGNvbnRlbnRdKSB7XG4gICAgICBkdW1wZWQuJGNvbnRlbnQgPSB0aGlzWyRjb250ZW50XTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1tuYW1lXTtcblxuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBYRkFPYmplY3QpIHtcbiAgICAgICAgZHVtcGVkW25hbWVdID0gdmFsdWVbJGR1bXBdKCk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgWEZBT2JqZWN0QXJyYXkpIHtcbiAgICAgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpIHtcbiAgICAgICAgICBkdW1wZWRbbmFtZV0gPSB2YWx1ZS5kdW1wKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGR1bXBlZFtuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkdW1wZWQ7XG4gIH1cblxuICBbJHRvU3R5bGVdKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgWyR0b0hUTUxdKCkge1xuICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5FTVBUWTtcbiAgfVxuXG4gICpbJGdldENvbnRhaW5lZENoaWxkcmVuXSgpIHtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpc1skZ2V0Q2hpbGRyZW5dKCkpIHtcbiAgICAgIHlpZWxkIG5vZGU7XG4gICAgfVxuICB9XG5cbiAgKltfZmlsdGVyZWRDaGlsZHJlbkdlbmVyYXRvcl0oZmlsdGVyLCBpbmNsdWRlKSB7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIHRoaXNbJGdldENvbnRhaW5lZENoaWxkcmVuXSgpKSB7XG4gICAgICBpZiAoIWZpbHRlciB8fCBpbmNsdWRlID09PSBmaWx0ZXIuaGFzKG5vZGVbJG5vZGVOYW1lXSkpIHtcbiAgICAgICAgY29uc3QgYXZhaWxhYmxlU3BhY2UgPSB0aGlzWyRnZXRBdmFpbGFibGVTcGFjZV0oKTtcbiAgICAgICAgY29uc3QgcmVzID0gbm9kZVskdG9IVE1MXShhdmFpbGFibGVTcGFjZSk7XG5cbiAgICAgICAgaWYgKCFyZXMuc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXNbJGV4dHJhXS5mYWlsaW5nTm9kZSA9IG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICB5aWVsZCByZXM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgWyRmbHVzaEhUTUxdKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgWyRhZGRIVE1MXShodG1sLCBiYm94KSB7XG4gICAgdGhpc1skZXh0cmFdLmNoaWxkcmVuLnB1c2goaHRtbCk7XG4gIH1cblxuICBbJGdldEF2YWlsYWJsZVNwYWNlXSgpIHt9XG5cbiAgWyRjaGlsZHJlblRvSFRNTF0oe1xuICAgIGZpbHRlciA9IG51bGwsXG4gICAgaW5jbHVkZSA9IHRydWVcbiAgfSkge1xuICAgIGlmICghdGhpc1skZXh0cmFdLmdlbmVyYXRvcikge1xuICAgICAgdGhpc1skZXh0cmFdLmdlbmVyYXRvciA9IHRoaXNbX2ZpbHRlcmVkQ2hpbGRyZW5HZW5lcmF0b3JdKGZpbHRlciwgaW5jbHVkZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGF2YWlsYWJsZVNwYWNlID0gdGhpc1skZ2V0QXZhaWxhYmxlU3BhY2VdKCk7XG4gICAgICBjb25zdCByZXMgPSB0aGlzWyRleHRyYV0uZmFpbGluZ05vZGVbJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpO1xuXG4gICAgICBpZiAoIXJlcy5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXMuaHRtbCkge1xuICAgICAgICB0aGlzWyRhZGRIVE1MXShyZXMuaHRtbCwgcmVzLmJib3gpO1xuICAgICAgfVxuXG4gICAgICBkZWxldGUgdGhpc1skZXh0cmFdLmZhaWxpbmdOb2RlO1xuICAgIH1cblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBnZW4gPSB0aGlzWyRleHRyYV0uZ2VuZXJhdG9yLm5leHQoKTtcblxuICAgICAgaWYgKGdlbi5kb25lKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXMgPSBnZW4udmFsdWU7XG5cbiAgICAgIGlmICghcmVzLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlcy5odG1sKSB7XG4gICAgICAgIHRoaXNbJGFkZEhUTUxdKHJlcy5odG1sLCByZXMuYmJveCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1skZXh0cmFdLmdlbmVyYXRvciA9IG51bGw7XG4gICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LkVNUFRZO1xuICB9XG5cbiAgWyRzZXRTZXRBdHRyaWJ1dGVzXShhdHRyaWJ1dGVzKSB7XG4gICAgdGhpc1tfc2V0QXR0cmlidXRlc10gPSBuZXcgU2V0KE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpKTtcbiAgfVxuXG4gIFtfZ2V0VW5zZXRBdHRyaWJ1dGVzXShwcm90b0F0dHJpYnV0ZXMpIHtcbiAgICBjb25zdCBhbGxBdHRyID0gdGhpc1tfYXR0cmlidXRlTmFtZXNdO1xuICAgIGNvbnN0IHNldEF0dHIgPSB0aGlzW19zZXRBdHRyaWJ1dGVzXTtcbiAgICByZXR1cm4gWy4uLnByb3RvQXR0cmlidXRlc10uZmlsdGVyKHggPT4gYWxsQXR0ci5oYXMoeCkgJiYgIXNldEF0dHIuaGFzKHgpKTtcbiAgfVxuXG4gIFskcmVzb2x2ZVByb3RvdHlwZXNdKGlkcywgYW5jZXN0b3JzID0gbmV3IFNldCgpKSB7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzW19jaGlsZHJlbl0pIHtcbiAgICAgIGNoaWxkW19yZXNvbHZlUHJvdG90eXBlc0hlbHBlcl0oaWRzLCBhbmNlc3RvcnMpO1xuICAgIH1cbiAgfVxuXG4gIFtfcmVzb2x2ZVByb3RvdHlwZXNIZWxwZXJdKGlkcywgYW5jZXN0b3JzKSB7XG4gICAgY29uc3QgcHJvdG8gPSB0aGlzW19nZXRQcm90b3R5cGVdKGlkcywgYW5jZXN0b3JzKTtcblxuICAgIGlmIChwcm90bykge1xuICAgICAgdGhpc1tfYXBwbHlQcm90b3R5cGVdKHByb3RvLCBpZHMsIGFuY2VzdG9ycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNbJHJlc29sdmVQcm90b3R5cGVzXShpZHMsIGFuY2VzdG9ycyk7XG4gICAgfVxuICB9XG5cbiAgW19nZXRQcm90b3R5cGVdKGlkcywgYW5jZXN0b3JzKSB7XG4gICAgY29uc3Qge1xuICAgICAgdXNlLFxuICAgICAgdXNlaHJlZlxuICAgIH0gPSB0aGlzO1xuXG4gICAgaWYgKCF1c2UgJiYgIXVzZWhyZWYpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBwcm90byA9IG51bGw7XG4gICAgbGV0IHNvbUV4cHJlc3Npb24gPSBudWxsO1xuICAgIGxldCBpZCA9IG51bGw7XG4gICAgbGV0IHJlZiA9IHVzZTtcblxuICAgIGlmICh1c2VocmVmKSB7XG4gICAgICByZWYgPSB1c2VocmVmO1xuXG4gICAgICBpZiAodXNlaHJlZi5zdGFydHNXaXRoKFwiI3NvbShcIikgJiYgdXNlaHJlZi5lbmRzV2l0aChcIilcIikpIHtcbiAgICAgICAgc29tRXhwcmVzc2lvbiA9IHVzZWhyZWYuc2xpY2UoXCIjc29tKFwiLmxlbmd0aCwgdXNlaHJlZi5sZW5ndGggLSAxKTtcbiAgICAgIH0gZWxzZSBpZiAodXNlaHJlZi5zdGFydHNXaXRoKFwiLiNzb20oXCIpICYmIHVzZWhyZWYuZW5kc1dpdGgoXCIpXCIpKSB7XG4gICAgICAgIHNvbUV4cHJlc3Npb24gPSB1c2VocmVmLnNsaWNlKFwiLiNzb20oXCIubGVuZ3RoLCB1c2VocmVmLmxlbmd0aCAtIDEpO1xuICAgICAgfSBlbHNlIGlmICh1c2VocmVmLnN0YXJ0c1dpdGgoXCIjXCIpKSB7XG4gICAgICAgIGlkID0gdXNlaHJlZi5zbGljZSgxKTtcbiAgICAgIH0gZWxzZSBpZiAodXNlaHJlZi5zdGFydHNXaXRoKFwiLiNcIikpIHtcbiAgICAgICAgaWQgPSB1c2VocmVmLnNsaWNlKDIpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodXNlLnN0YXJ0c1dpdGgoXCIjXCIpKSB7XG4gICAgICBpZCA9IHVzZS5zbGljZSgxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc29tRXhwcmVzc2lvbiA9IHVzZTtcbiAgICB9XG5cbiAgICB0aGlzLnVzZSA9IHRoaXMudXNlaHJlZiA9IFwiXCI7XG5cbiAgICBpZiAoaWQpIHtcbiAgICAgIHByb3RvID0gaWRzLmdldChpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb3RvID0gKDAsIF9zb20uc2VhcmNoTm9kZSkoaWRzLmdldCgkcm9vdCksIHRoaXMsIHNvbUV4cHJlc3Npb24sIHRydWUsIGZhbHNlKTtcblxuICAgICAgaWYgKHByb3RvKSB7XG4gICAgICAgIHByb3RvID0gcHJvdG9bMF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwcm90bykge1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBJbnZhbGlkIHByb3RvdHlwZSByZWZlcmVuY2U6ICR7cmVmfS5gKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChwcm90b1skbm9kZU5hbWVdICE9PSB0aGlzWyRub2RlTmFtZV0pIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShgWEZBIC0gSW5jb21wYXRpYmxlIHByb3RvdHlwZTogJHtwcm90b1skbm9kZU5hbWVdfSAhPT0gJHt0aGlzWyRub2RlTmFtZV19LmApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGFuY2VzdG9ycy5oYXMocHJvdG8pKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoYFhGQSAtIEN5Y2xlIGRldGVjdGVkIGluIHByb3RvdHlwZXMgdXNlLmApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYW5jZXN0b3JzLmFkZChwcm90byk7XG5cbiAgICBjb25zdCBwcm90b1Byb3RvID0gcHJvdG9bX2dldFByb3RvdHlwZV0oaWRzLCBhbmNlc3RvcnMpO1xuXG4gICAgaWYgKHByb3RvUHJvdG8pIHtcbiAgICAgIHByb3RvW19hcHBseVByb3RvdHlwZV0ocHJvdG9Qcm90bywgaWRzLCBhbmNlc3RvcnMpO1xuICAgIH1cblxuICAgIHByb3RvWyRyZXNvbHZlUHJvdG90eXBlc10oaWRzLCBhbmNlc3RvcnMpO1xuICAgIGFuY2VzdG9ycy5kZWxldGUocHJvdG8pO1xuICAgIHJldHVybiBwcm90bztcbiAgfVxuXG4gIFtfYXBwbHlQcm90b3R5cGVdKHByb3RvLCBpZHMsIGFuY2VzdG9ycykge1xuICAgIGlmIChhbmNlc3RvcnMuaGFzKHByb3RvKSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBDeWNsZSBkZXRlY3RlZCBpbiBwcm90b3R5cGVzIHVzZS5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXNbJGNvbnRlbnRdICYmIHByb3RvWyRjb250ZW50XSkge1xuICAgICAgdGhpc1skY29udGVudF0gPSBwcm90b1skY29udGVudF07XG4gICAgfVxuXG4gICAgY29uc3QgbmV3QW5jZXN0b3JzID0gbmV3IFNldChhbmNlc3RvcnMpO1xuICAgIG5ld0FuY2VzdG9ycy5hZGQocHJvdG8pO1xuXG4gICAgZm9yIChjb25zdCB1bnNldEF0dHJOYW1lIG9mIHRoaXNbX2dldFVuc2V0QXR0cmlidXRlc10ocHJvdG9bX3NldEF0dHJpYnV0ZXNdKSkge1xuICAgICAgdGhpc1t1bnNldEF0dHJOYW1lXSA9IHByb3RvW3Vuc2V0QXR0ck5hbWVdO1xuXG4gICAgICBpZiAodGhpc1tfc2V0QXR0cmlidXRlc10pIHtcbiAgICAgICAgdGhpc1tfc2V0QXR0cmlidXRlc10uYWRkKHVuc2V0QXR0ck5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkge1xuICAgICAgaWYgKHRoaXNbX2F0dHJpYnV0ZU5hbWVzXS5oYXMobmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1tuYW1lXTtcbiAgICAgIGNvbnN0IHByb3RvVmFsdWUgPSBwcm90b1tuYW1lXTtcblxuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgWEZBT2JqZWN0QXJyYXkpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB2YWx1ZVtfY2hpbGRyZW5dKSB7XG4gICAgICAgICAgY2hpbGRbX3Jlc29sdmVQcm90b3R5cGVzSGVscGVyXShpZHMsIGFuY2VzdG9ycyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gdmFsdWVbX2NoaWxkcmVuXS5sZW5ndGgsIGlpID0gcHJvdG9WYWx1ZVtfY2hpbGRyZW5dLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjaGlsZCA9IHByb3RvW19jaGlsZHJlbl1baV1bJGNsb25lXSgpO1xuXG4gICAgICAgICAgaWYgKHZhbHVlLnB1c2goY2hpbGQpKSB7XG4gICAgICAgICAgICBjaGlsZFtfcGFyZW50XSA9IHRoaXM7XG5cbiAgICAgICAgICAgIHRoaXNbX2NoaWxkcmVuXS5wdXNoKGNoaWxkKTtcblxuICAgICAgICAgICAgY2hpbGRbX3Jlc29sdmVQcm90b3R5cGVzSGVscGVyXShpZHMsIGFuY2VzdG9ycyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgdmFsdWVbJHJlc29sdmVQcm90b3R5cGVzXShpZHMsIGFuY2VzdG9ycyk7XG5cbiAgICAgICAgaWYgKHByb3RvVmFsdWUpIHtcbiAgICAgICAgICB2YWx1ZVtfYXBwbHlQcm90b3R5cGVdKHByb3RvVmFsdWUsIGlkcywgYW5jZXN0b3JzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvdG9WYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjaGlsZCA9IHByb3RvVmFsdWVbJGNsb25lXSgpO1xuICAgICAgICBjaGlsZFtfcGFyZW50XSA9IHRoaXM7XG4gICAgICAgIHRoaXNbbmFtZV0gPSBjaGlsZDtcblxuICAgICAgICB0aGlzW19jaGlsZHJlbl0ucHVzaChjaGlsZCk7XG5cbiAgICAgICAgY2hpbGRbX3Jlc29sdmVQcm90b3R5cGVzSGVscGVyXShpZHMsIGFuY2VzdG9ycyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIFtfY2xvbmVBdHRyaWJ1dGVdKG9iaikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgIHJldHVybiBvYmoubWFwKHggPT4gWEZBT2JqZWN0W19jbG9uZUF0dHJpYnV0ZV0oeCkpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiICYmIG9iaiAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIG9iaik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIFskY2xvbmVdKCkge1xuICAgIGNvbnN0IGNsb25lID0gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykpO1xuXG4gICAgZm9yIChjb25zdCAkc3ltYm9sIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGhpcykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNsb25lWyRzeW1ib2xdID0gdGhpc1skc3ltYm9sXTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgKDAsIF91dGlsLnNoYWRvdykoY2xvbmUsICRzeW1ib2wsIHRoaXNbJHN5bWJvbF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lWyR1aWRdID0gYCR7Y2xvbmVbJG5vZGVOYW1lXX0ke3VpZCsrfWA7XG4gICAgY2xvbmVbX2NoaWxkcmVuXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSB7XG4gICAgICBpZiAodGhpc1tfYXR0cmlidXRlTmFtZXNdLmhhcyhuYW1lKSkge1xuICAgICAgICBjbG9uZVtuYW1lXSA9IFhGQU9iamVjdFtfY2xvbmVBdHRyaWJ1dGVdKHRoaXNbbmFtZV0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW25hbWVdO1xuXG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBYRkFPYmplY3RBcnJheSkge1xuICAgICAgICBjbG9uZVtuYW1lXSA9IG5ldyBYRkFPYmplY3RBcnJheSh2YWx1ZVtfbWF4XSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbG9uZVtuYW1lXSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzW19jaGlsZHJlbl0pIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBjaGlsZFskbm9kZU5hbWVdO1xuICAgICAgY29uc3QgY2xvbmVkQ2hpbGQgPSBjaGlsZFskY2xvbmVdKCk7XG5cbiAgICAgIGNsb25lW19jaGlsZHJlbl0ucHVzaChjbG9uZWRDaGlsZCk7XG5cbiAgICAgIGNsb25lZENoaWxkW19wYXJlbnRdID0gY2xvbmU7XG5cbiAgICAgIGlmIChjbG9uZVtuYW1lXSA9PT0gbnVsbCkge1xuICAgICAgICBjbG9uZVtuYW1lXSA9IGNsb25lZENoaWxkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xvbmVbbmFtZV1bX2NoaWxkcmVuXS5wdXNoKGNsb25lZENoaWxkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cblxuICBbJGdldENoaWxkcmVuXShuYW1lID0gbnVsbCkge1xuICAgIGlmICghbmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXNbX2NoaWxkcmVuXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1tfY2hpbGRyZW5dLmZpbHRlcihjID0+IGNbJG5vZGVOYW1lXSA9PT0gbmFtZSk7XG4gIH1cblxuICBbJGdldENoaWxkcmVuQnlDbGFzc10obmFtZSkge1xuICAgIHJldHVybiB0aGlzW25hbWVdO1xuICB9XG5cbiAgWyRnZXRDaGlsZHJlbkJ5TmFtZV0obmFtZSwgYWxsVHJhbnNwYXJlbnQsIGZpcnN0ID0gdHJ1ZSkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXNbJGdldENoaWxkcmVuQnlOYW1lSXRdKG5hbWUsIGFsbFRyYW5zcGFyZW50LCBmaXJzdCkpO1xuICB9XG5cbiAgKlskZ2V0Q2hpbGRyZW5CeU5hbWVJdF0obmFtZSwgYWxsVHJhbnNwYXJlbnQsIGZpcnN0ID0gdHJ1ZSkge1xuICAgIGlmIChuYW1lID09PSBcInBhcmVudFwiKSB7XG4gICAgICB5aWVsZCB0aGlzW19wYXJlbnRdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpc1tfY2hpbGRyZW5dKSB7XG4gICAgICBpZiAoY2hpbGRbJG5vZGVOYW1lXSA9PT0gbmFtZSkge1xuICAgICAgICB5aWVsZCBjaGlsZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoaWxkLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgeWllbGQgY2hpbGQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChhbGxUcmFuc3BhcmVudCB8fCBjaGlsZFskaXNUcmFuc3BhcmVudF0oKSkge1xuICAgICAgICB5aWVsZCogY2hpbGRbJGdldENoaWxkcmVuQnlOYW1lSXRdKG5hbWUsIGFsbFRyYW5zcGFyZW50LCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZpcnN0ICYmIHRoaXNbX2F0dHJpYnV0ZU5hbWVzXS5oYXMobmFtZSkpIHtcbiAgICAgIHlpZWxkIG5ldyBYRkFBdHRyaWJ1dGUodGhpcywgbmFtZSwgdGhpc1tuYW1lXSk7XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5YRkFPYmplY3QgPSBYRkFPYmplY3Q7XG5cbmNsYXNzIFhGQU9iamVjdEFycmF5IHtcbiAgY29uc3RydWN0b3IobWF4ID0gSW5maW5pdHkpIHtcbiAgICB0aGlzW19tYXhdID0gbWF4O1xuICAgIHRoaXNbX2NoaWxkcmVuXSA9IFtdO1xuICB9XG5cbiAgcHVzaChjaGlsZCkge1xuICAgIGNvbnN0IGxlbiA9IHRoaXNbX2NoaWxkcmVuXS5sZW5ndGg7XG5cbiAgICBpZiAobGVuIDw9IHRoaXNbX21heF0pIHtcbiAgICAgIHRoaXNbX2NoaWxkcmVuXS5wdXNoKGNoaWxkKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBub2RlIFwiJHtjaGlsZFskbm9kZU5hbWVdfVwiIGFjY2VwdHMgbm8gbW9yZSB0aGFuICR7dGhpc1tfbWF4XX0gY2hpbGRyZW5gKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzW19jaGlsZHJlbl0ubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgZHVtcCgpIHtcbiAgICByZXR1cm4gdGhpc1tfY2hpbGRyZW5dLmxlbmd0aCA9PT0gMSA/IHRoaXNbX2NoaWxkcmVuXVswXVskZHVtcF0oKSA6IHRoaXNbX2NoaWxkcmVuXS5tYXAoeCA9PiB4WyRkdW1wXSgpKTtcbiAgfVxuXG4gIFskY2xvbmVdKCkge1xuICAgIGNvbnN0IGNsb25lID0gbmV3IFhGQU9iamVjdEFycmF5KHRoaXNbX21heF0pO1xuICAgIGNsb25lW19jaGlsZHJlbl0gPSB0aGlzW19jaGlsZHJlbl0ubWFwKGMgPT4gY1skY2xvbmVdKCkpO1xuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIGdldCBjaGlsZHJlbigpIHtcbiAgICByZXR1cm4gdGhpc1tfY2hpbGRyZW5dO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpc1tfY2hpbGRyZW5dLmxlbmd0aCA9IDA7XG4gIH1cblxufVxuXG5leHBvcnRzLlhGQU9iamVjdEFycmF5ID0gWEZBT2JqZWN0QXJyYXk7XG5cbmNsYXNzIFhGQUF0dHJpYnV0ZSB7XG4gIGNvbnN0cnVjdG9yKG5vZGUsIG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpc1tfcGFyZW50XSA9IG5vZGU7XG4gICAgdGhpc1skbm9kZU5hbWVdID0gbmFtZTtcbiAgICB0aGlzWyRjb250ZW50XSA9IHZhbHVlO1xuICAgIHRoaXNbJGNvbnN1bWVkXSA9IGZhbHNlO1xuICAgIHRoaXNbJHVpZF0gPSBgYXR0cmlidXRlJHt1aWQrK31gO1xuICB9XG5cbiAgWyRnZXRQYXJlbnRdKCkge1xuICAgIHJldHVybiB0aGlzW19wYXJlbnRdO1xuICB9XG5cbiAgWyRpc0RhdGFWYWx1ZV0oKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBbJGdldERhdGFWYWx1ZV0oKSB7XG4gICAgcmV0dXJuIHRoaXNbJGNvbnRlbnRdLnRyaW0oKTtcbiAgfVxuXG4gIFskc2V0VmFsdWVdKHZhbHVlKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS52YWx1ZSB8fCBcIlwiO1xuICAgIHRoaXNbJGNvbnRlbnRdID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuXG4gIFskdGV4dF0oKSB7XG4gICAgcmV0dXJuIHRoaXNbJGNvbnRlbnRdO1xuICB9XG5cbiAgWyRpc0Rlc2NlbmRlbnRdKHBhcmVudCkge1xuICAgIHJldHVybiB0aGlzW19wYXJlbnRdID09PSBwYXJlbnQgfHwgdGhpc1tfcGFyZW50XVskaXNEZXNjZW5kZW50XShwYXJlbnQpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5YRkFBdHRyaWJ1dGUgPSBYRkFBdHRyaWJ1dGU7XG5cbmNsYXNzIFhtbE9iamVjdCBleHRlbmRzIFhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKG5zSWQsIG5hbWUsIGF0dHJpYnV0ZXMgPSB7fSkge1xuICAgIHN1cGVyKG5zSWQsIG5hbWUpO1xuICAgIHRoaXNbJGNvbnRlbnRdID0gXCJcIjtcbiAgICB0aGlzW19kYXRhVmFsdWVdID0gbnVsbDtcblxuICAgIGlmIChuYW1lICE9PSBcIiN0ZXh0XCIpIHtcbiAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgICAgIHRoaXNbX2F0dHJpYnV0ZXNdID0gbWFwO1xuXG4gICAgICBmb3IgKGNvbnN0IFthdHRyTmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIG1hcC5zZXQoYXR0ck5hbWUsIG5ldyBYRkFBdHRyaWJ1dGUodGhpcywgYXR0ck5hbWUsIHZhbHVlKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KCRuc0F0dHJpYnV0ZXMpKSB7XG4gICAgICAgIGNvbnN0IGRhdGFOb2RlID0gYXR0cmlidXRlc1skbnNBdHRyaWJ1dGVzXS54ZmEuZGF0YU5vZGU7XG5cbiAgICAgICAgaWYgKGRhdGFOb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoZGF0YU5vZGUgPT09IFwiZGF0YUdyb3VwXCIpIHtcbiAgICAgICAgICAgIHRoaXNbX2RhdGFWYWx1ZV0gPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFOb2RlID09PSBcImRhdGFWYWx1ZVwiKSB7XG4gICAgICAgICAgICB0aGlzW19kYXRhVmFsdWVdID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWyRjb25zdW1lZF0gPSBmYWxzZTtcbiAgfVxuXG4gIFskdG9TdHJpbmddKGJ1Zikge1xuICAgIGNvbnN0IHRhZ05hbWUgPSB0aGlzWyRub2RlTmFtZV07XG5cbiAgICBpZiAodGFnTmFtZSA9PT0gXCIjdGV4dFwiKSB7XG4gICAgICBidWYucHVzaCgoMCwgX2NvcmVfdXRpbHMuZW5jb2RlVG9YbWxTdHJpbmcpKHRoaXNbJGNvbnRlbnRdKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdXRmOFRhZ05hbWUgPSAoMCwgX3V0aWwudXRmOFN0cmluZ1RvU3RyaW5nKSh0YWdOYW1lKTtcbiAgICBjb25zdCBwcmVmaXggPSB0aGlzWyRuYW1lc3BhY2VJZF0gPT09IE5TX0RBVEFTRVRTID8gXCJ4ZmE6XCIgOiBcIlwiO1xuICAgIGJ1Zi5wdXNoKGA8JHtwcmVmaXh9JHt1dGY4VGFnTmFtZX1gKTtcblxuICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiB0aGlzW19hdHRyaWJ1dGVzXS5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IHV0ZjhOYW1lID0gKDAsIF91dGlsLnV0ZjhTdHJpbmdUb1N0cmluZykobmFtZSk7XG4gICAgICBidWYucHVzaChgICR7dXRmOE5hbWV9PVwiJHsoMCwgX2NvcmVfdXRpbHMuZW5jb2RlVG9YbWxTdHJpbmcpKHZhbHVlWyRjb250ZW50XSl9XCJgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpc1tfZGF0YVZhbHVlXSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXNbX2RhdGFWYWx1ZV0pIHtcbiAgICAgICAgYnVmLnB1c2goYCB4ZmE6ZGF0YU5vZGU9XCJkYXRhVmFsdWVcImApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVmLnB1c2goYCB4ZmE6ZGF0YU5vZGU9XCJkYXRhR3JvdXBcImApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpc1skY29udGVudF0gJiYgdGhpc1tfY2hpbGRyZW5dLmxlbmd0aCA9PT0gMCkge1xuICAgICAgYnVmLnB1c2goXCIvPlwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBidWYucHVzaChcIj5cIik7XG5cbiAgICBpZiAodGhpc1skY29udGVudF0pIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpc1skY29udGVudF0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgYnVmLnB1c2goKDAsIF9jb3JlX3V0aWxzLmVuY29kZVRvWG1sU3RyaW5nKSh0aGlzWyRjb250ZW50XSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1skY29udGVudF1bJHRvU3RyaW5nXShidWYpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXNbX2NoaWxkcmVuXSkge1xuICAgICAgICBjaGlsZFskdG9TdHJpbmddKGJ1Zik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYnVmLnB1c2goYDwvJHtwcmVmaXh9JHt1dGY4VGFnTmFtZX0+YCk7XG4gIH1cblxuICBbJG9uQ2hpbGRdKGNoaWxkKSB7XG4gICAgaWYgKHRoaXNbJGNvbnRlbnRdKSB7XG4gICAgICBjb25zdCBub2RlID0gbmV3IFhtbE9iamVjdCh0aGlzWyRuYW1lc3BhY2VJZF0sIFwiI3RleHRcIik7XG4gICAgICB0aGlzWyRhcHBlbmRDaGlsZF0obm9kZSk7XG4gICAgICBub2RlWyRjb250ZW50XSA9IHRoaXNbJGNvbnRlbnRdO1xuICAgICAgdGhpc1skY29udGVudF0gPSBcIlwiO1xuICAgIH1cblxuICAgIHRoaXNbJGFwcGVuZENoaWxkXShjaGlsZCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBbJG9uVGV4dF0oc3RyKSB7XG4gICAgdGhpc1skY29udGVudF0gKz0gc3RyO1xuICB9XG5cbiAgWyRmaW5hbGl6ZV0oKSB7XG4gICAgaWYgKHRoaXNbJGNvbnRlbnRdICYmIHRoaXNbX2NoaWxkcmVuXS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBub2RlID0gbmV3IFhtbE9iamVjdCh0aGlzWyRuYW1lc3BhY2VJZF0sIFwiI3RleHRcIik7XG4gICAgICB0aGlzWyRhcHBlbmRDaGlsZF0obm9kZSk7XG4gICAgICBub2RlWyRjb250ZW50XSA9IHRoaXNbJGNvbnRlbnRdO1xuICAgICAgZGVsZXRlIHRoaXNbJGNvbnRlbnRdO1xuICAgIH1cbiAgfVxuXG4gIFskdG9IVE1MXSgpIHtcbiAgICBpZiAodGhpc1skbm9kZU5hbWVdID09PSBcIiN0ZXh0XCIpIHtcbiAgICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtcbiAgICAgICAgbmFtZTogXCIjdGV4dFwiLFxuICAgICAgICB2YWx1ZTogdGhpc1skY29udGVudF1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5FTVBUWTtcbiAgfVxuXG4gIFskZ2V0Q2hpbGRyZW5dKG5hbWUgPSBudWxsKSB7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICByZXR1cm4gdGhpc1tfY2hpbGRyZW5dO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzW19jaGlsZHJlbl0uZmlsdGVyKGMgPT4gY1skbm9kZU5hbWVdID09PSBuYW1lKTtcbiAgfVxuXG4gIFskZ2V0QXR0cmlidXRlc10oKSB7XG4gICAgcmV0dXJuIHRoaXNbX2F0dHJpYnV0ZXNdO1xuICB9XG5cbiAgWyRnZXRDaGlsZHJlbkJ5Q2xhc3NdKG5hbWUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXNbX2F0dHJpYnV0ZXNdLmdldChuYW1lKTtcblxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNbJGdldENoaWxkcmVuXShuYW1lKTtcbiAgfVxuXG4gICpbJGdldENoaWxkcmVuQnlOYW1lSXRdKG5hbWUsIGFsbFRyYW5zcGFyZW50KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzW19hdHRyaWJ1dGVzXS5nZXQobmFtZSk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHlpZWxkIHZhbHVlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpc1tfY2hpbGRyZW5dKSB7XG4gICAgICBpZiAoY2hpbGRbJG5vZGVOYW1lXSA9PT0gbmFtZSkge1xuICAgICAgICB5aWVsZCBjaGlsZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGFsbFRyYW5zcGFyZW50KSB7XG4gICAgICAgIHlpZWxkKiBjaGlsZFskZ2V0Q2hpbGRyZW5CeU5hbWVJdF0obmFtZSwgYWxsVHJhbnNwYXJlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICpbJGdldEF0dHJpYnV0ZUl0XShuYW1lLCBza2lwQ29uc3VtZWQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXNbX2F0dHJpYnV0ZXNdLmdldChuYW1lKTtcblxuICAgIGlmICh2YWx1ZSAmJiAoIXNraXBDb25zdW1lZCB8fCAhdmFsdWVbJGNvbnN1bWVkXSkpIHtcbiAgICAgIHlpZWxkIHZhbHVlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpc1tfY2hpbGRyZW5dKSB7XG4gICAgICB5aWVsZCogY2hpbGRbJGdldEF0dHJpYnV0ZUl0XShuYW1lLCBza2lwQ29uc3VtZWQpO1xuICAgIH1cbiAgfVxuXG4gICpbJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0XShuYW1lLCBhbGxUcmFuc3BhcmVudCwgc2tpcENvbnN1bWVkKSB7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzW19jaGlsZHJlbl0pIHtcbiAgICAgIGlmIChjaGlsZFskbm9kZU5hbWVdID09PSBuYW1lICYmICghc2tpcENvbnN1bWVkIHx8ICFjaGlsZFskY29uc3VtZWRdKSkge1xuICAgICAgICB5aWVsZCBjaGlsZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGFsbFRyYW5zcGFyZW50KSB7XG4gICAgICAgIHlpZWxkKiBjaGlsZFskZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXRdKG5hbWUsIGFsbFRyYW5zcGFyZW50LCBza2lwQ29uc3VtZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFskaXNEYXRhVmFsdWVdKCkge1xuICAgIGlmICh0aGlzW19kYXRhVmFsdWVdID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpc1tfY2hpbGRyZW5dLmxlbmd0aCA9PT0gMCB8fCB0aGlzW19jaGlsZHJlbl1bMF1bJG5hbWVzcGFjZUlkXSA9PT0gX25hbWVzcGFjZXMuTmFtZXNwYWNlSWRzLnhodG1sLmlkO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzW19kYXRhVmFsdWVdO1xuICB9XG5cbiAgWyRnZXREYXRhVmFsdWVdKCkge1xuICAgIGlmICh0aGlzW19kYXRhVmFsdWVdID09PSBudWxsKSB7XG4gICAgICBpZiAodGhpc1tfY2hpbGRyZW5dLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdGhpc1skY29udGVudF0udHJpbSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1tfY2hpbGRyZW5dWzBdWyRuYW1lc3BhY2VJZF0gPT09IF9uYW1lc3BhY2VzLk5hbWVzcGFjZUlkcy54aHRtbC5pZCkge1xuICAgICAgICByZXR1cm4gdGhpc1tfY2hpbGRyZW5dWzBdWyR0ZXh0XSgpLnRyaW0oKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNbJGNvbnRlbnRdLnRyaW0oKTtcbiAgfVxuXG4gIFskc2V0VmFsdWVdKHZhbHVlKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS52YWx1ZSB8fCBcIlwiO1xuICAgIHRoaXNbJGNvbnRlbnRdID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuXG4gIFskZHVtcF0oaGFzTlMgPSBmYWxzZSkge1xuICAgIGNvbnN0IGR1bXBlZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICBpZiAoaGFzTlMpIHtcbiAgICAgIGR1bXBlZC4kbnMgPSB0aGlzWyRuYW1lc3BhY2VJZF07XG4gICAgfVxuXG4gICAgaWYgKHRoaXNbJGNvbnRlbnRdKSB7XG4gICAgICBkdW1wZWQuJGNvbnRlbnQgPSB0aGlzWyRjb250ZW50XTtcbiAgICB9XG5cbiAgICBkdW1wZWQuJG5hbWUgPSB0aGlzWyRub2RlTmFtZV07XG4gICAgZHVtcGVkLmNoaWxkcmVuID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXNbX2NoaWxkcmVuXSkge1xuICAgICAgZHVtcGVkLmNoaWxkcmVuLnB1c2goY2hpbGRbJGR1bXBdKGhhc05TKSk7XG4gICAgfVxuXG4gICAgZHVtcGVkLmF0dHJpYnV0ZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIHRoaXNbX2F0dHJpYnV0ZXNdKSB7XG4gICAgICBkdW1wZWQuYXR0cmlidXRlc1tuYW1lXSA9IHZhbHVlWyRjb250ZW50XTtcbiAgICB9XG5cbiAgICByZXR1cm4gZHVtcGVkO1xuICB9XG5cbn1cblxuZXhwb3J0cy5YbWxPYmplY3QgPSBYbWxPYmplY3Q7XG5cbmNsYXNzIENvbnRlbnRPYmplY3QgZXh0ZW5kcyBYRkFPYmplY3Qge1xuICBjb25zdHJ1Y3Rvcihuc0lkLCBuYW1lKSB7XG4gICAgc3VwZXIobnNJZCwgbmFtZSk7XG4gICAgdGhpc1skY29udGVudF0gPSBcIlwiO1xuICB9XG5cbiAgWyRvblRleHRdKHRleHQpIHtcbiAgICB0aGlzWyRjb250ZW50XSArPSB0ZXh0O1xuICB9XG5cbiAgWyRmaW5hbGl6ZV0oKSB7fVxuXG59XG5cbmV4cG9ydHMuQ29udGVudE9iamVjdCA9IENvbnRlbnRPYmplY3Q7XG5cbmNsYXNzIE9wdGlvbk9iamVjdCBleHRlbmRzIENvbnRlbnRPYmplY3Qge1xuICBjb25zdHJ1Y3Rvcihuc0lkLCBuYW1lLCBvcHRpb25zKSB7XG4gICAgc3VwZXIobnNJZCwgbmFtZSk7XG4gICAgdGhpc1tfb3B0aW9uc10gPSBvcHRpb25zO1xuICB9XG5cbiAgWyRmaW5hbGl6ZV0oKSB7XG4gICAgdGhpc1skY29udGVudF0gPSAoMCwgX3V0aWxzLmdldEtleXdvcmQpKHtcbiAgICAgIGRhdGE6IHRoaXNbJGNvbnRlbnRdLFxuICAgICAgZGVmYXVsdFZhbHVlOiB0aGlzW19vcHRpb25zXVswXSxcbiAgICAgIHZhbGlkYXRlOiBrID0+IHRoaXNbX29wdGlvbnNdLmluY2x1ZGVzKGspXG4gICAgfSk7XG4gIH1cblxuICBbJGNsZWFuXShidWlsZGVyKSB7XG4gICAgc3VwZXJbJGNsZWFuXShidWlsZGVyKTtcbiAgICBkZWxldGUgdGhpc1tfb3B0aW9uc107XG4gIH1cblxufVxuXG5leHBvcnRzLk9wdGlvbk9iamVjdCA9IE9wdGlvbk9iamVjdDtcblxuY2xhc3MgU3RyaW5nT2JqZWN0IGV4dGVuZHMgQ29udGVudE9iamVjdCB7XG4gIFskZmluYWxpemVdKCkge1xuICAgIHRoaXNbJGNvbnRlbnRdID0gdGhpc1skY29udGVudF0udHJpbSgpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5TdHJpbmdPYmplY3QgPSBTdHJpbmdPYmplY3Q7XG5cbmNsYXNzIEludGVnZXJPYmplY3QgZXh0ZW5kcyBDb250ZW50T2JqZWN0IHtcbiAgY29uc3RydWN0b3IobnNJZCwgbmFtZSwgZGVmYXVsdFZhbHVlLCB2YWxpZGF0b3IpIHtcbiAgICBzdXBlcihuc0lkLCBuYW1lKTtcbiAgICB0aGlzW19kZWZhdWx0VmFsdWVdID0gZGVmYXVsdFZhbHVlO1xuICAgIHRoaXNbX3ZhbGlkYXRvcl0gPSB2YWxpZGF0b3I7XG4gIH1cblxuICBbJGZpbmFsaXplXSgpIHtcbiAgICB0aGlzWyRjb250ZW50XSA9ICgwLCBfdXRpbHMuZ2V0SW50ZWdlcikoe1xuICAgICAgZGF0YTogdGhpc1skY29udGVudF0sXG4gICAgICBkZWZhdWx0VmFsdWU6IHRoaXNbX2RlZmF1bHRWYWx1ZV0sXG4gICAgICB2YWxpZGF0ZTogdGhpc1tfdmFsaWRhdG9yXVxuICAgIH0pO1xuICB9XG5cbiAgWyRjbGVhbl0oYnVpbGRlcikge1xuICAgIHN1cGVyWyRjbGVhbl0oYnVpbGRlcik7XG4gICAgZGVsZXRlIHRoaXNbX2RlZmF1bHRWYWx1ZV07XG4gICAgZGVsZXRlIHRoaXNbX3ZhbGlkYXRvcl07XG4gIH1cblxufVxuXG5leHBvcnRzLkludGVnZXJPYmplY3QgPSBJbnRlZ2VyT2JqZWN0O1xuXG5jbGFzcyBPcHRpb24wMSBleHRlbmRzIEludGVnZXJPYmplY3Qge1xuICBjb25zdHJ1Y3Rvcihuc0lkLCBuYW1lKSB7XG4gICAgc3VwZXIobnNJZCwgbmFtZSwgMCwgbiA9PiBuID09PSAxKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuT3B0aW9uMDEgPSBPcHRpb24wMTtcblxuY2xhc3MgT3B0aW9uMTAgZXh0ZW5kcyBJbnRlZ2VyT2JqZWN0IHtcbiAgY29uc3RydWN0b3IobnNJZCwgbmFtZSkge1xuICAgIHN1cGVyKG5zSWQsIG5hbWUsIDEsIG4gPT4gbiA9PT0gMCk7XG4gIH1cblxufVxuXG5leHBvcnRzLk9wdGlvbjEwID0gT3B0aW9uMTA7XG5cbi8qKiovIH0pLFxuLyogNzYgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuSFRNTFJlc3VsdCA9IHZvaWQgMDtcbmV4cG9ydHMuZ2V0QkJveCA9IGdldEJCb3g7XG5leHBvcnRzLmdldENvbG9yID0gZ2V0Q29sb3I7XG5leHBvcnRzLmdldEZsb2F0ID0gZ2V0RmxvYXQ7XG5leHBvcnRzLmdldEludGVnZXIgPSBnZXRJbnRlZ2VyO1xuZXhwb3J0cy5nZXRLZXl3b3JkID0gZ2V0S2V5d29yZDtcbmV4cG9ydHMuZ2V0TWVhc3VyZW1lbnQgPSBnZXRNZWFzdXJlbWVudDtcbmV4cG9ydHMuZ2V0UmF0aW8gPSBnZXRSYXRpbztcbmV4cG9ydHMuZ2V0UmVsZXZhbnQgPSBnZXRSZWxldmFudDtcbmV4cG9ydHMuZ2V0U3RyaW5nT3B0aW9uID0gZ2V0U3RyaW5nT3B0aW9uO1xuZXhwb3J0cy5zdHJpcFF1b3RlcyA9IHN0cmlwUXVvdGVzO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jb25zdCBkaW1Db252ZXJ0ZXJzID0ge1xuICBwdDogeCA9PiB4LFxuICBjbTogeCA9PiB4IC8gMi41NCAqIDcyLFxuICBtbTogeCA9PiB4IC8gKDEwICogMi41NCkgKiA3MixcbiAgaW46IHggPT4geCAqIDcyLFxuICBweDogeCA9PiB4XG59O1xuY29uc3QgbWVhc3VyZW1lbnRQYXR0ZXJuID0gLyhbKy1dP1xcZCtcXC4/XFxkKikoLiopLztcblxuZnVuY3Rpb24gc3RyaXBRdW90ZXMoc3RyKSB7XG4gIGlmIChzdHIuc3RhcnRzV2l0aChcIidcIikgfHwgc3RyLnN0YXJ0c1dpdGgoJ1wiJykpIHtcbiAgICByZXR1cm4gc3RyLnNsaWNlKDEsIHN0ci5sZW5ndGggLSAxKTtcbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cbmZ1bmN0aW9uIGdldEludGVnZXIoe1xuICBkYXRhLFxuICBkZWZhdWx0VmFsdWUsXG4gIHZhbGlkYXRlXG59KSB7XG4gIGlmICghZGF0YSkge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBkYXRhID0gZGF0YS50cmltKCk7XG4gIGNvbnN0IG4gPSBwYXJzZUludChkYXRhLCAxMCk7XG5cbiAgaWYgKCFpc05hTihuKSAmJiB2YWxpZGF0ZShuKSkge1xuICAgIHJldHVybiBuO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0RmxvYXQoe1xuICBkYXRhLFxuICBkZWZhdWx0VmFsdWUsXG4gIHZhbGlkYXRlXG59KSB7XG4gIGlmICghZGF0YSkge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBkYXRhID0gZGF0YS50cmltKCk7XG4gIGNvbnN0IG4gPSBwYXJzZUZsb2F0KGRhdGEpO1xuXG4gIGlmICghaXNOYU4obikgJiYgdmFsaWRhdGUobikpIHtcbiAgICByZXR1cm4gbjtcbiAgfVxuXG4gIHJldHVybiBkZWZhdWx0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIGdldEtleXdvcmQoe1xuICBkYXRhLFxuICBkZWZhdWx0VmFsdWUsXG4gIHZhbGlkYXRlXG59KSB7XG4gIGlmICghZGF0YSkge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBkYXRhID0gZGF0YS50cmltKCk7XG5cbiAgaWYgKHZhbGlkYXRlKGRhdGEpKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICByZXR1cm4gZGVmYXVsdFZhbHVlO1xufVxuXG5mdW5jdGlvbiBnZXRTdHJpbmdPcHRpb24oZGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gZ2V0S2V5d29yZCh7XG4gICAgZGF0YSxcbiAgICBkZWZhdWx0VmFsdWU6IG9wdGlvbnNbMF0sXG4gICAgdmFsaWRhdGU6IGsgPT4gb3B0aW9ucy5pbmNsdWRlcyhrKVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0TWVhc3VyZW1lbnQoc3RyLCBkZWYgPSBcIjBcIikge1xuICBkZWYgPSBkZWYgfHwgXCIwXCI7XG5cbiAgaWYgKCFzdHIpIHtcbiAgICByZXR1cm4gZ2V0TWVhc3VyZW1lbnQoZGVmKTtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoID0gc3RyLnRyaW0oKS5tYXRjaChtZWFzdXJlbWVudFBhdHRlcm4pO1xuXG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gZ2V0TWVhc3VyZW1lbnQoZGVmKTtcbiAgfVxuXG4gIGNvbnN0IFssIHZhbHVlU3RyLCB1bml0XSA9IG1hdGNoO1xuICBjb25zdCB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWVTdHIpO1xuXG4gIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICByZXR1cm4gZ2V0TWVhc3VyZW1lbnQoZGVmKTtcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY29uc3QgY29udiA9IGRpbUNvbnZlcnRlcnNbdW5pdF07XG5cbiAgaWYgKGNvbnYpIHtcbiAgICByZXR1cm4gY29udih2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGdldFJhdGlvKGRhdGEpIHtcbiAgaWYgKCFkYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG51bTogMSxcbiAgICAgIGRlbjogMVxuICAgIH07XG4gIH1cblxuICBjb25zdCByYXRpbyA9IGRhdGEudHJpbSgpLnNwbGl0KC9cXHMqOlxccyovKS5tYXAoeCA9PiBwYXJzZUZsb2F0KHgpKS5maWx0ZXIoeCA9PiAhaXNOYU4oeCkpO1xuXG4gIGlmIChyYXRpby5sZW5ndGggPT09IDEpIHtcbiAgICByYXRpby5wdXNoKDEpO1xuICB9XG5cbiAgaWYgKHJhdGlvLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7XG4gICAgICBudW06IDEsXG4gICAgICBkZW46IDFcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgW251bSwgZGVuXSA9IHJhdGlvO1xuICByZXR1cm4ge1xuICAgIG51bSxcbiAgICBkZW5cbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVsZXZhbnQoZGF0YSkge1xuICBpZiAoIWRhdGEpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gZGF0YS50cmltKCkuc3BsaXQoL1xccysvKS5tYXAoZSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV4Y2x1ZGVkOiBlWzBdID09PSBcIi1cIixcbiAgICAgIHZpZXduYW1lOiBlLnN1YnN0cmluZygxKVxuICAgIH07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRDb2xvcihkYXRhLCBkZWYgPSBbMCwgMCwgMF0pIHtcbiAgbGV0IFtyLCBnLCBiXSA9IGRlZjtcblxuICBpZiAoIWRhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcixcbiAgICAgIGcsXG4gICAgICBiXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGNvbG9yID0gZGF0YS50cmltKCkuc3BsaXQoL1xccyosXFxzKi8pLm1hcChjID0+IE1hdGgubWluKE1hdGgubWF4KDAsIHBhcnNlSW50KGMudHJpbSgpLCAxMCkpLCAyNTUpKS5tYXAoYyA9PiBpc05hTihjKSA/IDAgOiBjKTtcblxuICBpZiAoY29sb3IubGVuZ3RoIDwgMykge1xuICAgIHJldHVybiB7XG4gICAgICByLFxuICAgICAgZyxcbiAgICAgIGJcbiAgICB9O1xuICB9XG5cbiAgW3IsIGcsIGJdID0gY29sb3I7XG4gIHJldHVybiB7XG4gICAgcixcbiAgICBnLFxuICAgIGJcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0QkJveChkYXRhKSB7XG4gIGNvbnN0IGRlZiA9IC0xO1xuXG4gIGlmICghZGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiBkZWYsXG4gICAgICB5OiBkZWYsXG4gICAgICB3aWR0aDogZGVmLFxuICAgICAgaGVpZ2h0OiBkZWZcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgYmJveCA9IGRhdGEudHJpbSgpLnNwbGl0KC9cXHMqLFxccyovKS5tYXAobSA9PiBnZXRNZWFzdXJlbWVudChtLCBcIi0xXCIpKTtcblxuICBpZiAoYmJveC5sZW5ndGggPCA0IHx8IGJib3hbMl0gPCAwIHx8IGJib3hbM10gPCAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IGRlZixcbiAgICAgIHk6IGRlZixcbiAgICAgIHdpZHRoOiBkZWYsXG4gICAgICBoZWlnaHQ6IGRlZlxuICAgIH07XG4gIH1cblxuICBjb25zdCBbeCwgeSwgd2lkdGgsIGhlaWdodF0gPSBiYm94O1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfTtcbn1cblxuY2xhc3MgSFRNTFJlc3VsdCB7XG4gIHN0YXRpYyBnZXQgRkFJTFVSRSgpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJGQUlMVVJFXCIsIG5ldyBIVE1MUmVzdWx0KGZhbHNlLCBudWxsLCBudWxsLCBudWxsKSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IEVNUFRZKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIkVNUFRZXCIsIG5ldyBIVE1MUmVzdWx0KHRydWUsIG51bGwsIG51bGwsIG51bGwpKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHN1Y2Nlc3MsIGh0bWwsIGJib3gsIGJyZWFrTm9kZSkge1xuICAgIHRoaXMuc3VjY2VzcyA9IHN1Y2Nlc3M7XG4gICAgdGhpcy5odG1sID0gaHRtbDtcbiAgICB0aGlzLmJib3ggPSBiYm94O1xuICAgIHRoaXMuYnJlYWtOb2RlID0gYnJlYWtOb2RlO1xuICB9XG5cbiAgaXNCcmVhaygpIHtcbiAgICByZXR1cm4gISF0aGlzLmJyZWFrTm9kZTtcbiAgfVxuXG4gIHN0YXRpYyBicmVha05vZGUobm9kZSkge1xuICAgIHJldHVybiBuZXcgSFRNTFJlc3VsdChmYWxzZSwgbnVsbCwgbnVsbCwgbm9kZSk7XG4gIH1cblxuICBzdGF0aWMgc3VjY2VzcyhodG1sLCBiYm94ID0gbnVsbCkge1xuICAgIHJldHVybiBuZXcgSFRNTFJlc3VsdCh0cnVlLCBodG1sLCBiYm94LCBudWxsKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuSFRNTFJlc3VsdCA9IEhUTUxSZXN1bHQ7XG5cbi8qKiovIH0pLFxuLyogNzcgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuTmFtZXNwYWNlSWRzID0gZXhwb3J0cy4kYnVpbGRYRkFPYmplY3QgPSB2b2lkIDA7XG5jb25zdCAkYnVpbGRYRkFPYmplY3QgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGJ1aWxkWEZBT2JqZWN0ID0gJGJ1aWxkWEZBT2JqZWN0O1xuY29uc3QgTmFtZXNwYWNlSWRzID0ge1xuICBjb25maWc6IHtcbiAgICBpZDogMCxcbiAgICBjaGVjazogbnMgPT4gbnMuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGNpL1wiKVxuICB9LFxuICBjb25uZWN0aW9uU2V0OiB7XG4gICAgaWQ6IDEsXG4gICAgY2hlY2s6IG5zID0+IG5zLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1jb25uZWN0aW9uLXNldC9cIilcbiAgfSxcbiAgZGF0YXNldHM6IHtcbiAgICBpZDogMixcbiAgICBjaGVjazogbnMgPT4gbnMuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWRhdGEvXCIpXG4gIH0sXG4gIGZvcm06IHtcbiAgICBpZDogMyxcbiAgICBjaGVjazogbnMgPT4gbnMuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWZvcm0vXCIpXG4gIH0sXG4gIGxvY2FsZVNldDoge1xuICAgIGlkOiA0LFxuICAgIGNoZWNrOiBucyA9PiBucy5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtbG9jYWxlLXNldC9cIilcbiAgfSxcbiAgcGRmOiB7XG4gICAgaWQ6IDUsXG4gICAgY2hlY2s6IG5zID0+IG5zID09PSBcImh0dHA6Ly9ucy5hZG9iZS5jb20veGRwL3BkZi9cIlxuICB9LFxuICBzaWduYXR1cmU6IHtcbiAgICBpZDogNixcbiAgICBjaGVjazogbnMgPT4gbnMgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI1wiXG4gIH0sXG4gIHNvdXJjZVNldDoge1xuICAgIGlkOiA3LFxuICAgIGNoZWNrOiBucyA9PiBucy5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtc291cmNlLXNldC9cIilcbiAgfSxcbiAgc3R5bGVzaGVldDoge1xuICAgIGlkOiA4LFxuICAgIGNoZWNrOiBucyA9PiBucyA9PT0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm1cIlxuICB9LFxuICB0ZW1wbGF0ZToge1xuICAgIGlkOiA5LFxuICAgIGNoZWNrOiBucyA9PiBucy5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtdGVtcGxhdGUvXCIpXG4gIH0sXG4gIHhkYzoge1xuICAgIGlkOiAxMCxcbiAgICBjaGVjazogbnMgPT4gbnMuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGRjL1wiKVxuICB9LFxuICB4ZHA6IHtcbiAgICBpZDogMTEsXG4gICAgY2hlY2s6IG5zID0+IG5zID09PSBcImh0dHA6Ly9ucy5hZG9iZS5jb20veGRwL1wiXG4gIH0sXG4gIHhmZGY6IHtcbiAgICBpZDogMTIsXG4gICAgY2hlY2s6IG5zID0+IG5zID09PSBcImh0dHA6Ly9ucy5hZG9iZS5jb20veGZkZi9cIlxuICB9LFxuICB4aHRtbDoge1xuICAgIGlkOiAxMyxcbiAgICBjaGVjazogbnMgPT4gbnMgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiXG4gIH0sXG4gIHhtcG1ldGE6IHtcbiAgICBpZDogMTQsXG4gICAgY2hlY2s6IG5zID0+IG5zID09PSBcImh0dHA6Ly9ucy5hZG9iZS5jb20veG1wbWV0YS9cIlxuICB9XG59O1xuZXhwb3J0cy5OYW1lc3BhY2VJZHMgPSBOYW1lc3BhY2VJZHM7XG5cbi8qKiovIH0pLFxuLyogNzggKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuY3JlYXRlRGF0YU5vZGUgPSBjcmVhdGVEYXRhTm9kZTtcbmV4cG9ydHMuc2VhcmNoTm9kZSA9IHNlYXJjaE5vZGU7XG5cbnZhciBfeGZhX29iamVjdCA9IF9fd19wZGZqc19yZXF1aXJlX18oNzUpO1xuXG52YXIgX25hbWVzcGFjZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc3KTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuY29uc3QgbmFtZVBhdHRlcm4gPSAvXlteLltdKy87XG5jb25zdCBpbmRleFBhdHRlcm4gPSAvXlteXFxdXSsvO1xuY29uc3Qgb3BlcmF0b3JzID0ge1xuICBkb3Q6IDAsXG4gIGRvdERvdDogMSxcbiAgZG90SGFzaDogMixcbiAgZG90QnJhY2tldDogMyxcbiAgZG90UGFyZW46IDRcbn07XG5jb25zdCBzaG9ydGN1dHMgPSBuZXcgTWFwKFtbXCIkZGF0YVwiLCAocm9vdCwgY3VycmVudCkgPT4gcm9vdC5kYXRhc2V0cyA/IHJvb3QuZGF0YXNldHMuZGF0YSA6IHJvb3RdLCBbXCIkcmVjb3JkXCIsIChyb290LCBjdXJyZW50KSA9PiAocm9vdC5kYXRhc2V0cyA/IHJvb3QuZGF0YXNldHMuZGF0YSA6IHJvb3QpW194ZmFfb2JqZWN0LiRnZXRDaGlsZHJlbl0oKVswXV0sIFtcIiR0ZW1wbGF0ZVwiLCAocm9vdCwgY3VycmVudCkgPT4gcm9vdC50ZW1wbGF0ZV0sIFtcIiRjb25uZWN0aW9uU2V0XCIsIChyb290LCBjdXJyZW50KSA9PiByb290LmNvbm5lY3Rpb25TZXRdLCBbXCIkZm9ybVwiLCAocm9vdCwgY3VycmVudCkgPT4gcm9vdC5mb3JtXSwgW1wiJGxheW91dFwiLCAocm9vdCwgY3VycmVudCkgPT4gcm9vdC5sYXlvdXRdLCBbXCIkaG9zdFwiLCAocm9vdCwgY3VycmVudCkgPT4gcm9vdC5ob3N0XSwgW1wiJGRhdGFXaW5kb3dcIiwgKHJvb3QsIGN1cnJlbnQpID0+IHJvb3QuZGF0YVdpbmRvd10sIFtcIiRldmVudFwiLCAocm9vdCwgY3VycmVudCkgPT4gcm9vdC5ldmVudF0sIFtcIiFcIiwgKHJvb3QsIGN1cnJlbnQpID0+IHJvb3QuZGF0YXNldHNdLCBbXCIkeGZhXCIsIChyb290LCBjdXJyZW50KSA9PiByb290XSwgW1wieGZhXCIsIChyb290LCBjdXJyZW50KSA9PiByb290XSwgW1wiJFwiLCAocm9vdCwgY3VycmVudCkgPT4gY3VycmVudF1dKTtcbmNvbnN0IHNvbUNhY2hlID0gbmV3IFdlYWtNYXAoKTtcbmNvbnN0IE5TX0RBVEFTRVRTID0gX25hbWVzcGFjZXMuTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkO1xuXG5mdW5jdGlvbiBwYXJzZUluZGV4KGluZGV4KSB7XG4gIGluZGV4ID0gaW5kZXgudHJpbSgpO1xuXG4gIGlmIChpbmRleCA9PT0gXCIqXCIpIHtcbiAgICByZXR1cm4gSW5maW5pdHk7XG4gIH1cblxuICByZXR1cm4gcGFyc2VJbnQoaW5kZXgsIDEwKSB8fCAwO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV4cHJlc3Npb24oZXhwciwgZG90RG90QWxsb3dlZCwgbm9FeHByID0gdHJ1ZSkge1xuICBsZXQgbWF0Y2ggPSBleHByLm1hdGNoKG5hbWVQYXR0ZXJuKTtcblxuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgW25hbWVdID0gbWF0Y2g7XG4gIGNvbnN0IHBhcnNlZCA9IFt7XG4gICAgbmFtZSxcbiAgICBjYWNoZU5hbWU6IFwiLlwiICsgbmFtZSxcbiAgICBpbmRleDogMCxcbiAgICBqczogbnVsbCxcbiAgICBmb3JtQ2FsYzogbnVsbCxcbiAgICBvcGVyYXRvcjogb3BlcmF0b3JzLmRvdFxuICB9XTtcbiAgbGV0IHBvcyA9IG5hbWUubGVuZ3RoO1xuXG4gIHdoaWxlIChwb3MgPCBleHByLmxlbmd0aCkge1xuICAgIGNvbnN0IHNwb3MgPSBwb3M7XG4gICAgY29uc3QgY2hhciA9IGV4cHIuY2hhckF0KHBvcysrKTtcblxuICAgIGlmIChjaGFyID09PSBcIltcIikge1xuICAgICAgbWF0Y2ggPSBleHByLnNsaWNlKHBvcykubWF0Y2goaW5kZXhQYXR0ZXJuKTtcblxuICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJYRkEgLSBJbnZhbGlkIGluZGV4IGluIFNPTSBleHByZXNzaW9uXCIpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcGFyc2VkW3BhcnNlZC5sZW5ndGggLSAxXS5pbmRleCA9IHBhcnNlSW5kZXgobWF0Y2hbMF0pO1xuICAgICAgcG9zICs9IG1hdGNoWzBdLmxlbmd0aCArIDE7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsZXQgb3BlcmF0b3I7XG5cbiAgICBzd2l0Y2ggKGV4cHIuY2hhckF0KHBvcykpIHtcbiAgICAgIGNhc2UgXCIuXCI6XG4gICAgICAgIGlmICghZG90RG90QWxsb3dlZCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9zKys7XG4gICAgICAgIG9wZXJhdG9yID0gb3BlcmF0b3JzLmRvdERvdDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCIjXCI6XG4gICAgICAgIHBvcysrO1xuICAgICAgICBvcGVyYXRvciA9IG9wZXJhdG9ycy5kb3RIYXNoO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIltcIjpcbiAgICAgICAgaWYgKG5vRXhwcikge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlhGQSAtIFNPTSBleHByZXNzaW9uIGNvbnRhaW5zIGEgRm9ybUNhbGMgc3ViZXhwcmVzc2lvbiB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGZvciBub3cuXCIpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgb3BlcmF0b3IgPSBvcGVyYXRvcnMuZG90QnJhY2tldDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCIoXCI6XG4gICAgICAgIGlmIChub0V4cHIpIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJYRkEgLSBTT00gZXhwcmVzc2lvbiBjb250YWlucyBhIEphdmFTY3JpcHQgc3ViZXhwcmVzc2lvbiB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGZvciBub3cuXCIpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgb3BlcmF0b3IgPSBvcGVyYXRvcnMuZG90UGFyZW47XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBvcGVyYXRvciA9IG9wZXJhdG9ycy5kb3Q7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIG1hdGNoID0gZXhwci5zbGljZShwb3MpLm1hdGNoKG5hbWVQYXR0ZXJuKTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIFtuYW1lXSA9IG1hdGNoO1xuICAgIHBvcyArPSBuYW1lLmxlbmd0aDtcbiAgICBwYXJzZWQucHVzaCh7XG4gICAgICBuYW1lLFxuICAgICAgY2FjaGVOYW1lOiBleHByLnNsaWNlKHNwb3MsIHBvcyksXG4gICAgICBvcGVyYXRvcixcbiAgICAgIGluZGV4OiAwLFxuICAgICAganM6IG51bGwsXG4gICAgICBmb3JtQ2FsYzogbnVsbFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cblxuZnVuY3Rpb24gc2VhcmNoTm9kZShyb290LCBjb250YWluZXIsIGV4cHIsIGRvdERvdEFsbG93ZWQgPSB0cnVlLCB1c2VDYWNoZSA9IHRydWUpIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VFeHByZXNzaW9uKGV4cHIsIGRvdERvdEFsbG93ZWQpO1xuXG4gIGlmICghcGFyc2VkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBmbiA9IHNob3J0Y3V0cy5nZXQocGFyc2VkWzBdLm5hbWUpO1xuICBsZXQgaSA9IDA7XG4gIGxldCBpc1F1YWxpZmllZDtcblxuICBpZiAoZm4pIHtcbiAgICBpc1F1YWxpZmllZCA9IHRydWU7XG4gICAgcm9vdCA9IFtmbihyb290LCBjb250YWluZXIpXTtcbiAgICBpID0gMTtcbiAgfSBlbHNlIHtcbiAgICBpc1F1YWxpZmllZCA9IGNvbnRhaW5lciA9PT0gbnVsbDtcbiAgICByb290ID0gW2NvbnRhaW5lciB8fCByb290XTtcbiAgfVxuXG4gIGZvciAobGV0IGlpID0gcGFyc2VkLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICBjb25zdCB7XG4gICAgICBuYW1lLFxuICAgICAgY2FjaGVOYW1lLFxuICAgICAgb3BlcmF0b3IsXG4gICAgICBpbmRleFxuICAgIH0gPSBwYXJzZWRbaV07XG4gICAgY29uc3Qgbm9kZXMgPSBbXTtcblxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiByb290KSB7XG4gICAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgX3hmYV9vYmplY3QuWEZBT2JqZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IGNoaWxkcmVuLCBjYWNoZWQ7XG5cbiAgICAgIGlmICh1c2VDYWNoZSkge1xuICAgICAgICBjYWNoZWQgPSBzb21DYWNoZS5nZXQobm9kZSk7XG5cbiAgICAgICAgaWYgKCFjYWNoZWQpIHtcbiAgICAgICAgICBjYWNoZWQgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgc29tQ2FjaGUuc2V0KG5vZGUsIGNhY2hlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZHJlbiA9IGNhY2hlZC5nZXQoY2FjaGVOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFjaGlsZHJlbikge1xuICAgICAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XG4gICAgICAgICAgY2FzZSBvcGVyYXRvcnMuZG90OlxuICAgICAgICAgICAgY2hpbGRyZW4gPSBub2RlW194ZmFfb2JqZWN0LiRnZXRDaGlsZHJlbkJ5TmFtZV0obmFtZSwgZmFsc2UpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIG9wZXJhdG9ycy5kb3REb3Q6XG4gICAgICAgICAgICBjaGlsZHJlbiA9IG5vZGVbX3hmYV9vYmplY3QuJGdldENoaWxkcmVuQnlOYW1lXShuYW1lLCB0cnVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBvcGVyYXRvcnMuZG90SGFzaDpcbiAgICAgICAgICAgIGNoaWxkcmVuID0gbm9kZVtfeGZhX29iamVjdC4kZ2V0Q2hpbGRyZW5CeUNsYXNzXShuYW1lKTtcblxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuIGluc3RhbmNlb2YgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkpIHtcbiAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5jaGlsZHJlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuID0gW2NoaWxkcmVuXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXNlQ2FjaGUpIHtcbiAgICAgICAgICBjYWNoZWQuc2V0KGNhY2hlTmFtZSwgY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIG5vZGVzLnB1c2goY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChub2Rlcy5sZW5ndGggPT09IDAgJiYgIWlzUXVhbGlmaWVkICYmIGkgPT09IDApIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGNvbnRhaW5lcltfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpO1xuXG4gICAgICBjb250YWluZXIgPSBwYXJlbnQ7XG5cbiAgICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpID0gLTE7XG4gICAgICByb290ID0gW2NvbnRhaW5lcl07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNGaW5pdGUoaW5kZXgpKSB7XG4gICAgICByb290ID0gbm9kZXMuZmlsdGVyKG5vZGUgPT4gaW5kZXggPCBub2RlLmxlbmd0aCkubWFwKG5vZGUgPT4gbm9kZVtpbmRleF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByb290ID0gbm9kZXMucmVkdWNlKChhY2MsIG5vZGUpID0+IGFjYy5jb25jYXQobm9kZSksIFtdKTtcbiAgICB9XG4gIH1cblxuICBpZiAocm9vdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiByb290O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVOb2Rlcyhyb290LCBwYXRoKSB7XG4gIGxldCBub2RlID0gbnVsbDtcblxuICBmb3IgKGNvbnN0IHtcbiAgICBuYW1lLFxuICAgIGluZGV4XG4gIH0gb2YgcGF0aCkge1xuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9ICFpc0Zpbml0ZShpbmRleCkgPyAwIDogaW5kZXg7IGkgPD0gaWk7IGkrKykge1xuICAgICAgY29uc3QgbnNJZCA9IHJvb3RbX3hmYV9vYmplY3QuJG5hbWVzcGFjZUlkXSA9PT0gTlNfREFUQVNFVFMgPyAtMSA6IHJvb3RbX3hmYV9vYmplY3QuJG5hbWVzcGFjZUlkXTtcbiAgICAgIG5vZGUgPSBuZXcgX3hmYV9vYmplY3QuWG1sT2JqZWN0KG5zSWQsIG5hbWUpO1xuXG4gICAgICByb290W194ZmFfb2JqZWN0LiRhcHBlbmRDaGlsZF0obm9kZSk7XG4gICAgfVxuXG4gICAgcm9vdCA9IG5vZGU7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGF0YU5vZGUocm9vdCwgY29udGFpbmVyLCBleHByKSB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlRXhwcmVzc2lvbihleHByKTtcblxuICBpZiAoIXBhcnNlZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHBhcnNlZC5zb21lKHggPT4geC5vcGVyYXRvciA9PT0gb3BlcmF0b3JzLmRvdERvdCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGZuID0gc2hvcnRjdXRzLmdldChwYXJzZWRbMF0ubmFtZSk7XG4gIGxldCBpID0gMDtcblxuICBpZiAoZm4pIHtcbiAgICByb290ID0gZm4ocm9vdCwgY29udGFpbmVyKTtcbiAgICBpID0gMTtcbiAgfSBlbHNlIHtcbiAgICByb290ID0gY29udGFpbmVyIHx8IHJvb3Q7XG4gIH1cblxuICBmb3IgKGxldCBpaSA9IHBhcnNlZC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgY29uc3Qge1xuICAgICAgbmFtZSxcbiAgICAgIG9wZXJhdG9yLFxuICAgICAgaW5kZXhcbiAgICB9ID0gcGFyc2VkW2ldO1xuXG4gICAgaWYgKCFpc0Zpbml0ZShpbmRleCkpIHtcbiAgICAgIHBhcnNlZFtpXS5pbmRleCA9IDA7XG4gICAgICByZXR1cm4gY3JlYXRlTm9kZXMocm9vdCwgcGFyc2VkLnNsaWNlKGkpKTtcbiAgICB9XG5cbiAgICBsZXQgY2hpbGRyZW47XG5cbiAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XG4gICAgICBjYXNlIG9wZXJhdG9ycy5kb3Q6XG4gICAgICAgIGNoaWxkcmVuID0gcm9vdFtfeGZhX29iamVjdC4kZ2V0Q2hpbGRyZW5CeU5hbWVdKG5hbWUsIGZhbHNlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2Ugb3BlcmF0b3JzLmRvdERvdDpcbiAgICAgICAgY2hpbGRyZW4gPSByb290W194ZmFfb2JqZWN0LiRnZXRDaGlsZHJlbkJ5TmFtZV0obmFtZSwgdHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIG9wZXJhdG9ycy5kb3RIYXNoOlxuICAgICAgICBjaGlsZHJlbiA9IHJvb3RbX3hmYV9vYmplY3QuJGdldENoaWxkcmVuQnlDbGFzc10obmFtZSk7XG5cbiAgICAgICAgaWYgKGNoaWxkcmVuIGluc3RhbmNlb2YgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkpIHtcbiAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLmNoaWxkcmVuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoaWxkcmVuID0gW2NoaWxkcmVuXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY3JlYXRlTm9kZXMocm9vdCwgcGFyc2VkLnNsaWNlKGkpKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggPCBjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baW5kZXhdO1xuXG4gICAgICBpZiAoIShjaGlsZCBpbnN0YW5jZW9mIF94ZmFfb2JqZWN0LlhGQU9iamVjdCkpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBDYW5ub3QgY3JlYXRlIGEgbm9kZS5gKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJvb3QgPSBjaGlsZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkW2ldLmluZGV4ID0gaW5kZXggLSBjaGlsZHJlbi5sZW5ndGg7XG4gICAgICByZXR1cm4gY3JlYXRlTm9kZXMocm9vdCwgcGFyc2VkLnNsaWNlKGkpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqKi8gfSksXG4vKiA3OSAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5CaW5kZXIgPSB2b2lkIDA7XG5cbnZhciBfeGZhX29iamVjdCA9IF9fd19wZGZqc19yZXF1aXJlX18oNzUpO1xuXG52YXIgX3RlbXBsYXRlID0gX193X3BkZmpzX3JlcXVpcmVfXyg4MCk7XG5cbnZhciBfc29tID0gX193X3BkZmpzX3JlcXVpcmVfXyg3OCk7XG5cbnZhciBfbmFtZXNwYWNlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNzcpO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jb25zdCBOU19EQVRBU0VUUyA9IF9uYW1lc3BhY2VzLk5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZDtcblxuZnVuY3Rpb24gY3JlYXRlVGV4dChjb250ZW50KSB7XG4gIGNvbnN0IG5vZGUgPSBuZXcgX3RlbXBsYXRlLlRleHQoe30pO1xuICBub2RlW194ZmFfb2JqZWN0LiRjb250ZW50XSA9IGNvbnRlbnQ7XG4gIHJldHVybiBub2RlO1xufVxuXG5jbGFzcyBCaW5kZXIge1xuICBjb25zdHJ1Y3Rvcihyb290KSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLmRhdGFzZXRzID0gcm9vdC5kYXRhc2V0cztcblxuICAgIGlmIChyb290LmRhdGFzZXRzICYmIHJvb3QuZGF0YXNldHMuZGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gcm9vdC5kYXRhc2V0cy5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGEgPSBuZXcgX3hmYV9vYmplY3QuWG1sT2JqZWN0KF9uYW1lc3BhY2VzLk5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZCwgXCJkYXRhXCIpO1xuICAgIH1cblxuICAgIHRoaXMuZW1wdHlNZXJnZSA9IHRoaXMuZGF0YVtfeGZhX29iamVjdC4kZ2V0Q2hpbGRyZW5dKCkubGVuZ3RoID09PSAwO1xuICAgIHRoaXMucm9vdC5mb3JtID0gdGhpcy5mb3JtID0gcm9vdC50ZW1wbGF0ZVtfeGZhX29iamVjdC4kY2xvbmVdKCk7XG4gIH1cblxuICBfaXNDb25zdW1lRGF0YSgpIHtcbiAgICByZXR1cm4gIXRoaXMuZW1wdHlNZXJnZSAmJiB0aGlzLl9tZXJnZU1vZGU7XG4gIH1cblxuICBfaXNNYXRjaFRlbXBsYXRlKCkge1xuICAgIHJldHVybiAhdGhpcy5faXNDb25zdW1lRGF0YSgpO1xuICB9XG5cbiAgYmluZCgpIHtcbiAgICB0aGlzLl9iaW5kRWxlbWVudCh0aGlzLmZvcm0sIHRoaXMuZGF0YSk7XG5cbiAgICByZXR1cm4gdGhpcy5mb3JtO1xuICB9XG5cbiAgZ2V0RGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG5cbiAgX2JpbmRWYWx1ZShmb3JtTm9kZSwgZGF0YSwgcGljdHVyZSkge1xuICAgIGZvcm1Ob2RlW194ZmFfb2JqZWN0LiRkYXRhXSA9IGRhdGE7XG5cbiAgICBpZiAoZm9ybU5vZGVbX3hmYV9vYmplY3QuJGhhc1NldHRhYmxlVmFsdWVdKCkpIHtcbiAgICAgIGlmIChkYXRhW194ZmFfb2JqZWN0LiRpc0RhdGFWYWx1ZV0oKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGFbX3hmYV9vYmplY3QuJGdldERhdGFWYWx1ZV0oKTtcblxuICAgICAgICBmb3JtTm9kZVtfeGZhX29iamVjdC4kc2V0VmFsdWVdKGNyZWF0ZVRleHQodmFsdWUpKTtcbiAgICAgIH0gZWxzZSBpZiAoZm9ybU5vZGUgaW5zdGFuY2VvZiBfdGVtcGxhdGUuRmllbGQgJiYgZm9ybU5vZGUudWkgJiYgZm9ybU5vZGUudWkuY2hvaWNlTGlzdCAmJiBmb3JtTm9kZS51aS5jaG9pY2VMaXN0Lm9wZW4gPT09IFwibXVsdGlTZWxlY3RcIikge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGFbX3hmYV9vYmplY3QuJGdldENoaWxkcmVuXSgpLm1hcChjaGlsZCA9PiBjaGlsZFtfeGZhX29iamVjdC4kY29udGVudF0udHJpbSgpKS5qb2luKFwiXFxuXCIpO1xuXG4gICAgICAgIGZvcm1Ob2RlW194ZmFfb2JqZWN0LiRzZXRWYWx1ZV0oY3JlYXRlVGV4dCh2YWx1ZSkpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9pc0NvbnN1bWVEYXRhKCkpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBOb2RlcyBoYXZlbid0IHRoZSBzYW1lIHR5cGUuYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghZGF0YVtfeGZhX29iamVjdC4kaXNEYXRhVmFsdWVdKCkgfHwgdGhpcy5faXNNYXRjaFRlbXBsYXRlKCkpIHtcbiAgICAgIHRoaXMuX2JpbmRFbGVtZW50KGZvcm1Ob2RlLCBkYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBOb2RlcyBoYXZlbid0IHRoZSBzYW1lIHR5cGUuYCk7XG4gICAgfVxuICB9XG5cbiAgX2ZpbmREYXRhQnlOYW1lVG9Db25zdW1lKG5hbWUsIGlzVmFsdWUsIGRhdGFOb2RlLCBnbG9iYWwpIHtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBnZW5lcmF0b3IsIG1hdGNoO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgIGdlbmVyYXRvciA9IGRhdGFOb2RlW194ZmFfb2JqZWN0LiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdF0obmFtZSwgZmFsc2UsIHRydWUpO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBtYXRjaCA9IGdlbmVyYXRvci5uZXh0KCkudmFsdWU7XG5cbiAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzVmFsdWUgPT09IG1hdGNoW194ZmFfb2JqZWN0LiRpc0RhdGFWYWx1ZV0oKSkge1xuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YU5vZGVbX3hmYV9vYmplY3QuJG5hbWVzcGFjZUlkXSA9PT0gX25hbWVzcGFjZXMuTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkICYmIGRhdGFOb2RlW194ZmFfb2JqZWN0LiRub2RlTmFtZV0gPT09IFwiZGF0YVwiKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBkYXRhTm9kZSA9IGRhdGFOb2RlW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCk7XG4gICAgfVxuXG4gICAgaWYgKCFnbG9iYWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGdlbmVyYXRvciA9IHRoaXMuZGF0YVtfeGZhX29iamVjdC4kZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXRdKG5hbWUsIHRydWUsIGZhbHNlKTtcbiAgICBtYXRjaCA9IGdlbmVyYXRvci5uZXh0KCkudmFsdWU7XG5cbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9XG5cbiAgICBnZW5lcmF0b3IgPSB0aGlzLmRhdGFbX3hmYV9vYmplY3QuJGdldEF0dHJpYnV0ZUl0XShuYW1lLCB0cnVlKTtcbiAgICBtYXRjaCA9IGdlbmVyYXRvci5uZXh0KCkudmFsdWU7XG5cbiAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbX3hmYV9vYmplY3QuJGlzRGF0YVZhbHVlXSgpKSB7XG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBfc2V0UHJvcGVydGllcyhmb3JtTm9kZSwgZGF0YU5vZGUpIHtcbiAgICBpZiAoIWZvcm1Ob2RlLmhhc093blByb3BlcnR5KFwic2V0UHJvcGVydHlcIikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHtcbiAgICAgIHJlZixcbiAgICAgIHRhcmdldCxcbiAgICAgIGNvbm5lY3Rpb25cbiAgICB9IG9mIGZvcm1Ob2RlLnNldFByb3BlcnR5LmNoaWxkcmVuKSB7XG4gICAgICBpZiAoY29ubmVjdGlvbikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZWYpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vZGVzID0gKDAsIF9zb20uc2VhcmNoTm9kZSkodGhpcy5yb290LCBkYXRhTm9kZSwgcmVmLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgICBpZiAoIW5vZGVzKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgWEZBIC0gSW52YWxpZCByZWZlcmVuY2U6ICR7cmVmfS5gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFtub2RlXSA9IG5vZGVzO1xuXG4gICAgICBpZiAoIW5vZGVbX3hmYV9vYmplY3QuJGlzRGVzY2VuZGVudF0odGhpcy5kYXRhKSkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYFhGQSAtIEludmFsaWQgbm9kZTogbXVzdCBiZSBhIGRhdGEgbm9kZS5gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldE5vZGVzID0gKDAsIF9zb20uc2VhcmNoTm9kZSkodGhpcy5yb290LCBmb3JtTm9kZSwgdGFyZ2V0LCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgICBpZiAoIXRhcmdldE5vZGVzKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgWEZBIC0gSW52YWxpZCB0YXJnZXQ6ICR7dGFyZ2V0fS5gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFt0YXJnZXROb2RlXSA9IHRhcmdldE5vZGVzO1xuXG4gICAgICBpZiAoIXRhcmdldE5vZGVbX3hmYV9vYmplY3QuJGlzRGVzY2VuZGVudF0oZm9ybU5vZGUpKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgWEZBIC0gSW52YWxpZCB0YXJnZXQ6IG11c3QgYmUgYSBwcm9wZXJ0eSBvciBzdWJwcm9wZXJ0eS5gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldFBhcmVudCA9IHRhcmdldE5vZGVbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgICAgaWYgKHRhcmdldE5vZGUgaW5zdGFuY2VvZiBfdGVtcGxhdGUuU2V0UHJvcGVydHkgfHwgdGFyZ2V0UGFyZW50IGluc3RhbmNlb2YgX3RlbXBsYXRlLlNldFByb3BlcnR5KSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgWEZBIC0gSW52YWxpZCB0YXJnZXQ6IGNhbm5vdCBiZSBhIHNldFByb3BlcnR5IG9yIG9uZSBvZiBpdHMgcHJvcGVydGllcy5gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0YXJnZXROb2RlIGluc3RhbmNlb2YgX3RlbXBsYXRlLkJpbmRJdGVtcyB8fCB0YXJnZXRQYXJlbnQgaW5zdGFuY2VvZiBfdGVtcGxhdGUuQmluZEl0ZW1zKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgWEZBIC0gSW52YWxpZCB0YXJnZXQ6IGNhbm5vdCBiZSBhIGJpbmRJdGVtcyBvciBvbmUgb2YgaXRzIHByb3BlcnRpZXMuYCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50ID0gbm9kZVtfeGZhX29iamVjdC4kdGV4dF0oKTtcblxuICAgICAgY29uc3QgbmFtZSA9IHRhcmdldE5vZGVbX3hmYV9vYmplY3QuJG5vZGVOYW1lXTtcblxuICAgICAgaWYgKHRhcmdldE5vZGUgaW5zdGFuY2VvZiBfeGZhX29iamVjdC5YRkFBdHRyaWJ1dGUpIHtcbiAgICAgICAgY29uc3QgYXR0cnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBhdHRyc1tuYW1lXSA9IGNvbnRlbnQ7XG4gICAgICAgIGNvbnN0IG9iaiA9IFJlZmxlY3QuY29uc3RydWN0KE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXRQYXJlbnQpLmNvbnN0cnVjdG9yLCBbYXR0cnNdKTtcbiAgICAgICAgdGFyZ2V0UGFyZW50W25hbWVdID0gb2JqW25hbWVdO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0YXJnZXROb2RlLmhhc093blByb3BlcnR5KF94ZmFfb2JqZWN0LiRjb250ZW50KSkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYFhGQSAtIEludmFsaWQgbm9kZSB0byB1c2UgaW4gc2V0UHJvcGVydHlgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHRhcmdldE5vZGVbX3hmYV9vYmplY3QuJGRhdGFdID0gbm9kZTtcbiAgICAgIHRhcmdldE5vZGVbX3hmYV9vYmplY3QuJGNvbnRlbnRdID0gY29udGVudDtcblxuICAgICAgdGFyZ2V0Tm9kZVtfeGZhX29iamVjdC4kZmluYWxpemVdKCk7XG4gICAgfVxuICB9XG5cbiAgX2JpbmRJdGVtcyhmb3JtTm9kZSwgZGF0YU5vZGUpIHtcbiAgICBpZiAoIWZvcm1Ob2RlLmhhc093blByb3BlcnR5KFwiaXRlbXNcIikgfHwgIWZvcm1Ob2RlLmhhc093blByb3BlcnR5KFwiYmluZEl0ZW1zXCIpIHx8IGZvcm1Ob2RlLmJpbmRJdGVtcy5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZm9ybU5vZGUuaXRlbXMuY2hpbGRyZW4pIHtcbiAgICAgIGZvcm1Ob2RlW194ZmFfb2JqZWN0LiRyZW1vdmVDaGlsZF0oaXRlbSk7XG4gICAgfVxuXG4gICAgZm9ybU5vZGUuaXRlbXMuY2xlYXIoKTtcbiAgICBjb25zdCBsYWJlbHMgPSBuZXcgX3RlbXBsYXRlLkl0ZW1zKHt9KTtcbiAgICBjb25zdCB2YWx1ZXMgPSBuZXcgX3RlbXBsYXRlLkl0ZW1zKHt9KTtcblxuICAgIGZvcm1Ob2RlW194ZmFfb2JqZWN0LiRhcHBlbmRDaGlsZF0obGFiZWxzKTtcblxuICAgIGZvcm1Ob2RlLml0ZW1zLnB1c2gobGFiZWxzKTtcblxuICAgIGZvcm1Ob2RlW194ZmFfb2JqZWN0LiRhcHBlbmRDaGlsZF0odmFsdWVzKTtcblxuICAgIGZvcm1Ob2RlLml0ZW1zLnB1c2godmFsdWVzKTtcblxuICAgIGZvciAoY29uc3Qge1xuICAgICAgcmVmLFxuICAgICAgbGFiZWxSZWYsXG4gICAgICB2YWx1ZVJlZixcbiAgICAgIGNvbm5lY3Rpb25cbiAgICB9IG9mIGZvcm1Ob2RlLmJpbmRJdGVtcy5jaGlsZHJlbikge1xuICAgICAgaWYgKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghcmVmKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub2RlcyA9ICgwLCBfc29tLnNlYXJjaE5vZGUpKHRoaXMucm9vdCwgZGF0YU5vZGUsIHJlZiwgZmFsc2UsIGZhbHNlKTtcblxuICAgICAgaWYgKCFub2Rlcykge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYFhGQSAtIEludmFsaWQgcmVmZXJlbmNlOiAke3JlZn0uYCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgICAgaWYgKCFub2RlW194ZmFfb2JqZWN0LiRpc0Rlc2NlbmRlbnRdKHRoaXMuZGF0YXNldHMpKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBJbnZhbGlkIHJlZiAoJHtyZWZ9KTogbXVzdCBiZSBhIGRhdGFzZXRzIGNoaWxkLmApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGFiZWxOb2RlcyA9ICgwLCBfc29tLnNlYXJjaE5vZGUpKHRoaXMucm9vdCwgbm9kZSwgbGFiZWxSZWYsIHRydWUsIGZhbHNlKTtcblxuICAgICAgICBpZiAoIWxhYmVsTm9kZXMpIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoYFhGQSAtIEludmFsaWQgbGFiZWw6ICR7bGFiZWxSZWZ9LmApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgW2xhYmVsTm9kZV0gPSBsYWJlbE5vZGVzO1xuXG4gICAgICAgIGlmICghbGFiZWxOb2RlW194ZmFfb2JqZWN0LiRpc0Rlc2NlbmRlbnRdKHRoaXMuZGF0YXNldHMpKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBJbnZhbGlkIGxhYmVsOiBtdXN0IGJlIGEgZGF0YXNldHMgY2hpbGQuYCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZU5vZGVzID0gKDAsIF9zb20uc2VhcmNoTm9kZSkodGhpcy5yb290LCBub2RlLCB2YWx1ZVJlZiwgdHJ1ZSwgZmFsc2UpO1xuXG4gICAgICAgIGlmICghdmFsdWVOb2Rlcykge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgWEZBIC0gSW52YWxpZCB2YWx1ZTogJHt2YWx1ZVJlZn0uYCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbdmFsdWVOb2RlXSA9IHZhbHVlTm9kZXM7XG5cbiAgICAgICAgaWYgKCF2YWx1ZU5vZGVbX3hmYV9vYmplY3QuJGlzRGVzY2VuZGVudF0odGhpcy5kYXRhc2V0cykpIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoYFhGQSAtIEludmFsaWQgdmFsdWU6IG11c3QgYmUgYSBkYXRhc2V0cyBjaGlsZC5gKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxhYmVsID0gY3JlYXRlVGV4dChsYWJlbE5vZGVbX3hmYV9vYmplY3QuJHRleHRdKCkpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNyZWF0ZVRleHQodmFsdWVOb2RlW194ZmFfb2JqZWN0LiR0ZXh0XSgpKTtcblxuICAgICAgICBsYWJlbHNbX3hmYV9vYmplY3QuJGFwcGVuZENoaWxkXShsYWJlbCk7XG5cbiAgICAgICAgbGFiZWxzLnRleHQucHVzaChsYWJlbCk7XG5cbiAgICAgICAgdmFsdWVzW194ZmFfb2JqZWN0LiRhcHBlbmRDaGlsZF0odmFsdWUpO1xuXG4gICAgICAgIHZhbHVlcy50ZXh0LnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9iaW5kT2NjdXJyZW5jZXMoZm9ybU5vZGUsIG1hdGNoZXMsIHBpY3R1cmUpIHtcbiAgICBsZXQgYmFzZUNsb25lO1xuXG4gICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMSkge1xuICAgICAgYmFzZUNsb25lID0gZm9ybU5vZGVbX3hmYV9vYmplY3QuJGNsb25lXSgpO1xuXG4gICAgICBiYXNlQ2xvbmVbX3hmYV9vYmplY3QuJHJlbW92ZUNoaWxkXShiYXNlQ2xvbmUub2NjdXIpO1xuXG4gICAgICBiYXNlQ2xvbmUub2NjdXIgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2JpbmRWYWx1ZShmb3JtTm9kZSwgbWF0Y2hlc1swXSwgcGljdHVyZSk7XG5cbiAgICB0aGlzLl9zZXRQcm9wZXJ0aWVzKGZvcm1Ob2RlLCBtYXRjaGVzWzBdKTtcblxuICAgIHRoaXMuX2JpbmRJdGVtcyhmb3JtTm9kZSwgbWF0Y2hlc1swXSk7XG5cbiAgICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnQgPSBmb3JtTm9kZVtfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpO1xuXG4gICAgY29uc3QgbmFtZSA9IGZvcm1Ob2RlW194ZmFfb2JqZWN0LiRub2RlTmFtZV07XG5cbiAgICBjb25zdCBwb3MgPSBwYXJlbnRbX3hmYV9vYmplY3QuJGluZGV4T2ZdKGZvcm1Ob2RlKTtcblxuICAgIGZvciAobGV0IGkgPSAxLCBpaSA9IG1hdGNoZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgY29uc3QgbWF0Y2ggPSBtYXRjaGVzW2ldO1xuXG4gICAgICBjb25zdCBjbG9uZSA9IGJhc2VDbG9uZVtfeGZhX29iamVjdC4kY2xvbmVdKCk7XG5cbiAgICAgIHBhcmVudFtuYW1lXS5wdXNoKGNsb25lKTtcblxuICAgICAgcGFyZW50W194ZmFfb2JqZWN0LiRpbnNlcnRBdF0ocG9zICsgaSwgY2xvbmUpO1xuXG4gICAgICB0aGlzLl9iaW5kVmFsdWUoY2xvbmUsIG1hdGNoLCBwaWN0dXJlKTtcblxuICAgICAgdGhpcy5fc2V0UHJvcGVydGllcyhjbG9uZSwgbWF0Y2gpO1xuXG4gICAgICB0aGlzLl9iaW5kSXRlbXMoY2xvbmUsIG1hdGNoKTtcbiAgICB9XG4gIH1cblxuICBfY3JlYXRlT2NjdXJyZW5jZXMoZm9ybU5vZGUpIHtcbiAgICBpZiAoIXRoaXMuZW1wdHlNZXJnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIG9jY3VyXG4gICAgfSA9IGZvcm1Ob2RlO1xuXG4gICAgaWYgKCFvY2N1ciB8fCBvY2N1ci5pbml0aWFsIDw9IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnQgPSBmb3JtTm9kZVtfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpO1xuXG4gICAgY29uc3QgbmFtZSA9IGZvcm1Ob2RlW194ZmFfb2JqZWN0LiRub2RlTmFtZV07XG5cbiAgICBpZiAoIShwYXJlbnRbbmFtZV0gaW5zdGFuY2VvZiBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgY3VycmVudE51bWJlcjtcblxuICAgIGlmIChmb3JtTm9kZS5uYW1lKSB7XG4gICAgICBjdXJyZW50TnVtYmVyID0gcGFyZW50W25hbWVdLmNoaWxkcmVuLmZpbHRlcihlID0+IGUubmFtZSA9PT0gZm9ybU5vZGUubmFtZSkubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50TnVtYmVyID0gcGFyZW50W25hbWVdLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb25zdCBwb3MgPSBwYXJlbnRbX3hmYV9vYmplY3QuJGluZGV4T2ZdKGZvcm1Ob2RlKSArIDE7XG4gICAgY29uc3QgaWkgPSBvY2N1ci5pbml0aWFsIC0gY3VycmVudE51bWJlcjtcblxuICAgIGlmIChpaSkge1xuICAgICAgY29uc3Qgbm9kZUNsb25lID0gZm9ybU5vZGVbX3hmYV9vYmplY3QuJGNsb25lXSgpO1xuXG4gICAgICBub2RlQ2xvbmVbX3hmYV9vYmplY3QuJHJlbW92ZUNoaWxkXShub2RlQ2xvbmUub2NjdXIpO1xuXG4gICAgICBub2RlQ2xvbmUub2NjdXIgPSBudWxsO1xuICAgICAgcGFyZW50W25hbWVdLnB1c2gobm9kZUNsb25lKTtcblxuICAgICAgcGFyZW50W194ZmFfb2JqZWN0LiRpbnNlcnRBdF0ocG9zLCBub2RlQ2xvbmUpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBub2RlQ2xvbmVbX3hmYV9vYmplY3QuJGNsb25lXSgpO1xuXG4gICAgICAgIHBhcmVudFtuYW1lXS5wdXNoKGNsb25lKTtcblxuICAgICAgICBwYXJlbnRbX3hmYV9vYmplY3QuJGluc2VydEF0XShwb3MgKyBpLCBjbG9uZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX2dldE9jY3VySW5mbyhmb3JtTm9kZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIG5hbWUsXG4gICAgICBvY2N1clxuICAgIH0gPSBmb3JtTm9kZTtcblxuICAgIGlmICghb2NjdXIgfHwgIW5hbWUpIHtcbiAgICAgIHJldHVybiBbMSwgMV07XG4gICAgfVxuXG4gICAgY29uc3QgbWF4ID0gb2NjdXIubWF4ID09PSAtMSA/IEluZmluaXR5IDogb2NjdXIubWF4O1xuICAgIHJldHVybiBbb2NjdXIubWluLCBtYXhdO1xuICB9XG5cbiAgX3NldEFuZEJpbmQoZm9ybU5vZGUsIGRhdGFOb2RlKSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydGllcyhmb3JtTm9kZSwgZGF0YU5vZGUpO1xuXG4gICAgdGhpcy5fYmluZEl0ZW1zKGZvcm1Ob2RlLCBkYXRhTm9kZSk7XG5cbiAgICB0aGlzLl9iaW5kRWxlbWVudChmb3JtTm9kZSwgZGF0YU5vZGUpO1xuICB9XG5cbiAgX2JpbmRFbGVtZW50KGZvcm1Ob2RlLCBkYXRhTm9kZSkge1xuICAgIGNvbnN0IHVzZWxlc3NOb2RlcyA9IFtdO1xuXG4gICAgdGhpcy5fY3JlYXRlT2NjdXJyZW5jZXMoZm9ybU5vZGUpO1xuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBmb3JtTm9kZVtfeGZhX29iamVjdC4kZ2V0Q2hpbGRyZW5dKCkpIHtcbiAgICAgIGlmIChjaGlsZFtfeGZhX29iamVjdC4kZGF0YV0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9tZXJnZU1vZGUgPT09IHVuZGVmaW5lZCAmJiBjaGlsZFtfeGZhX29iamVjdC4kbm9kZU5hbWVdID09PSBcInN1YmZvcm1cIikge1xuICAgICAgICB0aGlzLl9tZXJnZU1vZGUgPSBjaGlsZC5tZXJnZU1vZGUgPT09IFwiY29uc3VtZURhdGFcIjtcblxuICAgICAgICBjb25zdCBkYXRhQ2hpbGRyZW4gPSBkYXRhTm9kZVtfeGZhX29iamVjdC4kZ2V0Q2hpbGRyZW5dKCk7XG5cbiAgICAgICAgaWYgKGRhdGFDaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5fYmluZE9jY3VycmVuY2VzKGNoaWxkLCBbZGF0YUNoaWxkcmVuWzBdXSwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5lbXB0eU1lcmdlKSB7XG4gICAgICAgICAgY29uc3QgbnNJZCA9IGRhdGFOb2RlW194ZmFfb2JqZWN0LiRuYW1lc3BhY2VJZF0gPT09IE5TX0RBVEFTRVRTID8gLTEgOiBkYXRhTm9kZVtfeGZhX29iamVjdC4kbmFtZXNwYWNlSWRdO1xuICAgICAgICAgIGNvbnN0IGRhdGFDaGlsZCA9IGNoaWxkW194ZmFfb2JqZWN0LiRkYXRhXSA9IG5ldyBfeGZhX29iamVjdC5YbWxPYmplY3QobnNJZCwgY2hpbGQubmFtZSB8fCBcInJvb3RcIik7XG5cbiAgICAgICAgICBkYXRhTm9kZVtfeGZhX29iamVjdC4kYXBwZW5kQ2hpbGRdKGRhdGFDaGlsZCk7XG5cbiAgICAgICAgICB0aGlzLl9iaW5kRWxlbWVudChjaGlsZCwgZGF0YUNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWNoaWxkW194ZmFfb2JqZWN0LiRpc0JpbmRhYmxlXSgpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgZ2xvYmFsID0gZmFsc2U7XG4gICAgICBsZXQgcGljdHVyZSA9IG51bGw7XG4gICAgICBsZXQgcmVmID0gbnVsbDtcbiAgICAgIGxldCBtYXRjaCA9IG51bGw7XG5cbiAgICAgIGlmIChjaGlsZC5iaW5kKSB7XG4gICAgICAgIHN3aXRjaCAoY2hpbGQuYmluZC5tYXRjaCkge1xuICAgICAgICAgIGNhc2UgXCJub25lXCI6XG4gICAgICAgICAgICB0aGlzLl9zZXRBbmRCaW5kKGNoaWxkLCBkYXRhTm9kZSk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgY2FzZSBcImdsb2JhbFwiOlxuICAgICAgICAgICAgZ2xvYmFsID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImRhdGFSZWZcIjpcbiAgICAgICAgICAgIGlmICghY2hpbGQuYmluZC5yZWYpIHtcbiAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSByZWYgaXMgZW1wdHkgaW4gbm9kZSAke2NoaWxkW194ZmFfb2JqZWN0LiRub2RlTmFtZV19LmApO1xuXG4gICAgICAgICAgICAgIHRoaXMuX3NldEFuZEJpbmQoY2hpbGQsIGRhdGFOb2RlKTtcblxuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVmID0gY2hpbGQuYmluZC5yZWY7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGlsZC5iaW5kLnBpY3R1cmUpIHtcbiAgICAgICAgICBwaWN0dXJlID0gY2hpbGQuYmluZC5waWN0dXJlW194ZmFfb2JqZWN0LiRjb250ZW50XTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBbbWluLCBtYXhdID0gdGhpcy5fZ2V0T2NjdXJJbmZvKGNoaWxkKTtcblxuICAgICAgaWYgKHJlZikge1xuICAgICAgICBtYXRjaCA9ICgwLCBfc29tLnNlYXJjaE5vZGUpKHRoaXMucm9vdCwgZGF0YU5vZGUsIHJlZiwgdHJ1ZSwgZmFsc2UpO1xuXG4gICAgICAgIGlmIChtYXRjaCA9PT0gbnVsbCkge1xuICAgICAgICAgIG1hdGNoID0gKDAsIF9zb20uY3JlYXRlRGF0YU5vZGUpKHRoaXMuZGF0YSwgZGF0YU5vZGUsIHJlZik7XG5cbiAgICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5faXNDb25zdW1lRGF0YSgpKSB7XG4gICAgICAgICAgICBtYXRjaFtfeGZhX29iamVjdC4kY29uc3VtZWRdID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9zZXRBbmRCaW5kKGNoaWxkLCBtYXRjaCk7XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5faXNDb25zdW1lRGF0YSgpKSB7XG4gICAgICAgICAgICBtYXRjaCA9IG1hdGNoLmZpbHRlcihub2RlID0+ICFub2RlW194ZmFfb2JqZWN0LiRjb25zdW1lZF0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChtYXRjaC5sZW5ndGggPiBtYXgpIHtcbiAgICAgICAgICAgIG1hdGNoID0gbWF0Y2guc2xpY2UoMCwgbWF4KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgbWF0Y2ggPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChtYXRjaCAmJiB0aGlzLl9pc0NvbnN1bWVEYXRhKCkpIHtcbiAgICAgICAgICAgIG1hdGNoLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICAgIG5vZGVbX3hmYV9vYmplY3QuJGNvbnN1bWVkXSA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghY2hpbGQubmFtZSkge1xuICAgICAgICAgIHRoaXMuX3NldEFuZEJpbmQoY2hpbGQsIGRhdGFOb2RlKTtcblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2lzQ29uc3VtZURhdGEoKSkge1xuICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSBbXTtcblxuICAgICAgICAgIHdoaWxlIChtYXRjaGVzLmxlbmd0aCA8IG1heCkge1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLl9maW5kRGF0YUJ5TmFtZVRvQ29uc3VtZShjaGlsZC5uYW1lLCBjaGlsZFtfeGZhX29iamVjdC4kaGFzU2V0dGFibGVWYWx1ZV0oKSwgZGF0YU5vZGUsIGdsb2JhbCk7XG5cbiAgICAgICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvdW5kW194ZmFfb2JqZWN0LiRjb25zdW1lZF0gPSB0cnVlO1xuICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKGZvdW5kKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtYXRjaCA9IG1hdGNoZXMubGVuZ3RoID4gMCA/IG1hdGNoZXMgOiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1hdGNoID0gZGF0YU5vZGVbX3hmYV9vYmplY3QuJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0XShjaGlsZC5uYW1lLCBmYWxzZSwgdGhpcy5lbXB0eU1lcmdlKS5uZXh0KCkudmFsdWU7XG5cbiAgICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICBpZiAobWluID09PSAwKSB7XG4gICAgICAgICAgICAgIHVzZWxlc3NOb2Rlcy5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5zSWQgPSBkYXRhTm9kZVtfeGZhX29iamVjdC4kbmFtZXNwYWNlSWRdID09PSBOU19EQVRBU0VUUyA/IC0xIDogZGF0YU5vZGVbX3hmYV9vYmplY3QuJG5hbWVzcGFjZUlkXTtcbiAgICAgICAgICAgIG1hdGNoID0gY2hpbGRbX3hmYV9vYmplY3QuJGRhdGFdID0gbmV3IF94ZmFfb2JqZWN0LlhtbE9iamVjdChuc0lkLCBjaGlsZC5uYW1lKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZW1wdHlNZXJnZSkge1xuICAgICAgICAgICAgICBtYXRjaFtfeGZhX29iamVjdC4kY29uc3VtZWRdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0YU5vZGVbX3hmYV9vYmplY3QuJGFwcGVuZENoaWxkXShtYXRjaCk7XG5cbiAgICAgICAgICAgIHRoaXMuX3NldEFuZEJpbmQoY2hpbGQsIG1hdGNoKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMuZW1wdHlNZXJnZSkge1xuICAgICAgICAgICAgbWF0Y2hbX3hmYV9vYmplY3QuJGNvbnN1bWVkXSA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWF0Y2ggPSBbbWF0Y2hdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICB0aGlzLl9iaW5kT2NjdXJyZW5jZXMoY2hpbGQsIG1hdGNoLCBwaWN0dXJlKTtcbiAgICAgIH0gZWxzZSBpZiAobWluID4gMCkge1xuICAgICAgICB0aGlzLl9zZXRBbmRCaW5kKGNoaWxkLCBkYXRhTm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1c2VsZXNzTm9kZXMucHVzaChjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXNlbGVzc05vZGVzLmZvckVhY2gobm9kZSA9PiBub2RlW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKClbX3hmYV9vYmplY3QuJHJlbW92ZUNoaWxkXShub2RlKSk7XG4gIH1cblxufVxuXG5leHBvcnRzLkJpbmRlciA9IEJpbmRlcjtcblxuLyoqKi8gfSksXG4vKiA4MCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5WYWx1ZSA9IGV4cG9ydHMuVGV4dCA9IGV4cG9ydHMuVGVtcGxhdGVOYW1lc3BhY2UgPSBleHBvcnRzLlRlbXBsYXRlID0gZXhwb3J0cy5TZXRQcm9wZXJ0eSA9IGV4cG9ydHMuSXRlbXMgPSBleHBvcnRzLkZpZWxkID0gZXhwb3J0cy5CaW5kSXRlbXMgPSB2b2lkIDA7XG5cbnZhciBfeGZhX29iamVjdCA9IF9fd19wZGZqc19yZXF1aXJlX18oNzUpO1xuXG52YXIgX25hbWVzcGFjZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc3KTtcblxudmFyIF9sYXlvdXQgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDgxKTtcblxudmFyIF9odG1sX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg4Mik7XG5cbnZhciBfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc2KTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9mb250cyA9IF9fd19wZGZqc19yZXF1aXJlX18oODMpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG52YXIgX3NvbSA9IF9fd19wZGZqc19yZXF1aXJlX18oNzgpO1xuXG5jb25zdCBURU1QTEFURV9OU19JRCA9IF9uYW1lc3BhY2VzLk5hbWVzcGFjZUlkcy50ZW1wbGF0ZS5pZDtcbmNvbnN0IFNWR19OUyA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcbmNvbnN0IE1BWF9BVFRFTVBUU19GT1JfTFJUQl9MQVlPVVQgPSAyO1xuY29uc3QgTUFYX0VNUFRZX1BBR0VTID0gMztcbmNvbnN0IERFRkFVTFRfVEFCX0lOREVYID0gNTAwMDtcbmNvbnN0IEhFQURJTkdfUEFUVEVSTiA9IC9eSChcXGQrKSQvO1xuY29uc3QgTUlNRVMgPSBuZXcgU2V0KFtcImltYWdlL2dpZlwiLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9wanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2FwbmdcIiwgXCJpbWFnZS94LXBuZ1wiLCBcImltYWdlL2JtcFwiLCBcImltYWdlL3gtbXMtYm1wXCIsIFwiaW1hZ2UvdGlmZlwiLCBcImltYWdlL3RpZlwiLCBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiXSk7XG5jb25zdCBJTUFHRVNfSEVBREVSUyA9IFtbWzB4NDIsIDB4NGRdLCBcImltYWdlL2JtcFwiXSwgW1sweGZmLCAweGQ4LCAweGZmXSwgXCJpbWFnZS9qcGVnXCJdLCBbWzB4NDksIDB4NDksIDB4MmEsIDB4MDBdLCBcImltYWdlL3RpZmZcIl0sIFtbMHg0ZCwgMHg0ZCwgMHgwMCwgMHgyYV0sIFwiaW1hZ2UvdGlmZlwiXSwgW1sweDQ3LCAweDQ5LCAweDQ2LCAweDM4LCAweDM5LCAweDYxXSwgXCJpbWFnZS9naWZcIl0sIFtbMHg4OSwgMHg1MCwgMHg0ZSwgMHg0NywgMHgwZCwgMHgwYSwgMHgxYSwgMHgwYV0sIFwiaW1hZ2UvcG5nXCJdXTtcblxuZnVuY3Rpb24gZ2V0Qm9yZGVyRGltcyhub2RlKSB7XG4gIGlmICghbm9kZSB8fCAhbm9kZS5ib3JkZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdzogMCxcbiAgICAgIGg6IDBcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgYm9yZGVyRXh0cmEgPSBub2RlLmJvcmRlcltfeGZhX29iamVjdC4kZ2V0RXh0cmFdKCk7XG5cbiAgaWYgKCFib3JkZXJFeHRyYSkge1xuICAgIHJldHVybiB7XG4gICAgICB3OiAwLFxuICAgICAgaDogMFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHc6IGJvcmRlckV4dHJhLndpZHRoc1swXSArIGJvcmRlckV4dHJhLndpZHRoc1syXSArIGJvcmRlckV4dHJhLmluc2V0c1swXSArIGJvcmRlckV4dHJhLmluc2V0c1syXSxcbiAgICBoOiBib3JkZXJFeHRyYS53aWR0aHNbMV0gKyBib3JkZXJFeHRyYS53aWR0aHNbM10gKyBib3JkZXJFeHRyYS5pbnNldHNbMV0gKyBib3JkZXJFeHRyYS5pbnNldHNbM11cbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFzTWFyZ2luKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubWFyZ2luICYmIChub2RlLm1hcmdpbi50b3BJbnNldCB8fCBub2RlLm1hcmdpbi5yaWdodEluc2V0IHx8IG5vZGUubWFyZ2luLmJvdHRvbUluc2V0IHx8IG5vZGUubWFyZ2luLmxlZnRJbnNldCk7XG59XG5cbmZ1bmN0aW9uIF9zZXRWYWx1ZSh0ZW1wbGF0ZU5vZGUsIHZhbHVlKSB7XG4gIGlmICghdGVtcGxhdGVOb2RlLnZhbHVlKSB7XG4gICAgY29uc3Qgbm9kZVZhbHVlID0gbmV3IFZhbHVlKHt9KTtcblxuICAgIHRlbXBsYXRlTm9kZVtfeGZhX29iamVjdC4kYXBwZW5kQ2hpbGRdKG5vZGVWYWx1ZSk7XG5cbiAgICB0ZW1wbGF0ZU5vZGUudmFsdWUgPSBub2RlVmFsdWU7XG4gIH1cblxuICB0ZW1wbGF0ZU5vZGUudmFsdWVbX3hmYV9vYmplY3QuJHNldFZhbHVlXSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uKiBnZXRDb250YWluZWRDaGlsZHJlbihub2RlKSB7XG4gIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZVtfeGZhX29iamVjdC4kZ2V0Q2hpbGRyZW5dKCkpIHtcbiAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBTdWJmb3JtU2V0KSB7XG4gICAgICB5aWVsZCogY2hpbGRbX3hmYV9vYmplY3QuJGdldENvbnRhaW5lZENoaWxkcmVuXSgpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgeWllbGQgY2hpbGQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0VGFiSW5kZXgobm9kZSkge1xuICB3aGlsZSAobm9kZSkge1xuICAgIGlmICghbm9kZS50cmF2ZXJzYWwpIHtcbiAgICAgIG5vZGVbX3hmYV9vYmplY3QuJHRhYkluZGV4XSA9IG5vZGVbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKVtfeGZhX29iamVjdC4kdGFiSW5kZXhdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChub2RlW194ZmFfb2JqZWN0LiR0YWJJbmRleF0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbmV4dCA9IG51bGw7XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUudHJhdmVyc2FsW194ZmFfb2JqZWN0LiRnZXRDaGlsZHJlbl0oKSkge1xuICAgICAgaWYgKGNoaWxkLm9wZXJhdGlvbiA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgbmV4dCA9IGNoaWxkO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIW5leHQgfHwgIW5leHQucmVmKSB7XG4gICAgICBub2RlW194ZmFfb2JqZWN0LiR0YWJJbmRleF0gPSBub2RlW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKClbX3hmYV9vYmplY3QuJHRhYkluZGV4XTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByb290ID0gbm9kZVtfeGZhX29iamVjdC4kZ2V0VGVtcGxhdGVSb290XSgpO1xuXG4gICAgbm9kZVtfeGZhX29iamVjdC4kdGFiSW5kZXhdID0gKytyb290W194ZmFfb2JqZWN0LiR0YWJJbmRleF07XG5cbiAgICBjb25zdCByZWYgPSByb290W194ZmFfb2JqZWN0LiRzZWFyY2hOb2RlXShuZXh0LnJlZiwgbm9kZSk7XG5cbiAgICBpZiAoIXJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUgPSByZWZbMF07XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlBc3Npc3Qob2JqLCBhdHRyaWJ1dGVzKSB7XG4gIGNvbnN0IGFzc2lzdCA9IG9iai5hc3Npc3Q7XG5cbiAgaWYgKGFzc2lzdCkge1xuICAgIGNvbnN0IGFzc2lzdFRpdGxlID0gYXNzaXN0W194ZmFfb2JqZWN0LiR0b0hUTUxdKCk7XG5cbiAgICBpZiAoYXNzaXN0VGl0bGUpIHtcbiAgICAgIGF0dHJpYnV0ZXMudGl0bGUgPSBhc3Npc3RUaXRsZTtcbiAgICB9XG5cbiAgICBjb25zdCByb2xlID0gYXNzaXN0LnJvbGU7XG4gICAgY29uc3QgbWF0Y2ggPSByb2xlLm1hdGNoKEhFQURJTkdfUEFUVEVSTik7XG5cbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIGNvbnN0IGFyaWFSb2xlID0gXCJoZWFkaW5nXCI7XG4gICAgICBjb25zdCBhcmlhTGV2ZWwgPSBtYXRjaFsxXTtcbiAgICAgIGF0dHJpYnV0ZXMucm9sZSA9IGFyaWFSb2xlO1xuICAgICAgYXR0cmlidXRlc1tcImFyaWEtbGV2ZWxcIl0gPSBhcmlhTGV2ZWw7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9iai5sYXlvdXQgPT09IFwidGFibGVcIikge1xuICAgIGF0dHJpYnV0ZXMucm9sZSA9IFwidGFibGVcIjtcbiAgfSBlbHNlIGlmIChvYmoubGF5b3V0ID09PSBcInJvd1wiKSB7XG4gICAgYXR0cmlidXRlcy5yb2xlID0gXCJyb3dcIjtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwYXJlbnQgPSBvYmpbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgIGlmIChwYXJlbnQubGF5b3V0ID09PSBcInJvd1wiKSB7XG4gICAgICBpZiAocGFyZW50LmFzc2lzdCAmJiBwYXJlbnQuYXNzaXN0LnJvbGUgPT09IFwiVEhcIikge1xuICAgICAgICBhdHRyaWJ1dGVzLnJvbGUgPSBcImNvbHVtbmhlYWRlclwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXR0cmlidXRlcy5yb2xlID0gXCJjZWxsXCI7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFyaWFMYWJlbChvYmopIHtcbiAgaWYgKCFvYmouYXNzaXN0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBhc3Npc3QgPSBvYmouYXNzaXN0O1xuXG4gIGlmIChhc3Npc3Quc3BlYWsgJiYgYXNzaXN0LnNwZWFrW194ZmFfb2JqZWN0LiRjb250ZW50XSAhPT0gXCJcIikge1xuICAgIHJldHVybiBhc3Npc3Quc3BlYWtbX3hmYV9vYmplY3QuJGNvbnRlbnRdO1xuICB9XG5cbiAgaWYgKGFzc2lzdC50b29sVGlwKSB7XG4gICAgcmV0dXJuIGFzc2lzdC50b29sVGlwW194ZmFfb2JqZWN0LiRjb250ZW50XTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiB2YWx1ZVRvSHRtbCh2YWx1ZSkge1xuICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7XG4gICAgbmFtZTogXCJkaXZcIixcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICBjbGFzczogW1wieGZhUmljaFwiXSxcbiAgICAgIHN0eWxlOiBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgfSxcbiAgICBjaGlsZHJlbjogW3tcbiAgICAgIG5hbWU6IFwic3BhblwiLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBzdHlsZTogT2JqZWN0LmNyZWF0ZShudWxsKVxuICAgICAgfSxcbiAgICAgIHZhbHVlXG4gICAgfV1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNldEZpcnN0VW5zcGxpdHRhYmxlKG5vZGUpIHtcbiAgY29uc3Qgcm9vdCA9IG5vZGVbX3hmYV9vYmplY3QuJGdldFRlbXBsYXRlUm9vdF0oKTtcblxuICBpZiAocm9vdFtfeGZhX29iamVjdC4kZXh0cmFdLmZpcnN0VW5zcGxpdHRhYmxlID09PSBudWxsKSB7XG4gICAgcm9vdFtfeGZhX29iamVjdC4kZXh0cmFdLmZpcnN0VW5zcGxpdHRhYmxlID0gbm9kZTtcbiAgICByb290W194ZmFfb2JqZWN0LiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlID0gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnNldEZpcnN0VW5zcGxpdHRhYmxlKG5vZGUpIHtcbiAgY29uc3Qgcm9vdCA9IG5vZGVbX3hmYV9vYmplY3QuJGdldFRlbXBsYXRlUm9vdF0oKTtcblxuICBpZiAocm9vdFtfeGZhX29iamVjdC4kZXh0cmFdLmZpcnN0VW5zcGxpdHRhYmxlID09PSBub2RlKSB7XG4gICAgcm9vdFtfeGZhX29iamVjdC4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSA9IGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUJyZWFrKG5vZGUpIHtcbiAgaWYgKG5vZGVbX3hmYV9vYmplY3QuJGV4dHJhXSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIG5vZGVbX3hmYV9vYmplY3QuJGV4dHJhXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgaWYgKG5vZGUudGFyZ2V0VHlwZSA9PT0gXCJhdXRvXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCByb290ID0gbm9kZVtfeGZhX29iamVjdC4kZ2V0VGVtcGxhdGVSb290XSgpO1xuXG4gIGxldCB0YXJnZXQgPSBudWxsO1xuXG4gIGlmIChub2RlLnRhcmdldCkge1xuICAgIHRhcmdldCA9IHJvb3RbX3hmYV9vYmplY3QuJHNlYXJjaE5vZGVdKG5vZGUudGFyZ2V0LCBub2RlW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCkpO1xuXG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0YXJnZXQgPSB0YXJnZXRbMF07XG4gIH1cblxuICBjb25zdCB7XG4gICAgY3VycmVudFBhZ2VBcmVhLFxuICAgIGN1cnJlbnRDb250ZW50QXJlYVxuICB9ID0gcm9vdFtfeGZhX29iamVjdC4kZXh0cmFdO1xuXG4gIGlmIChub2RlLnRhcmdldFR5cGUgPT09IFwicGFnZUFyZWFcIikge1xuICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIFBhZ2VBcmVhKSkge1xuICAgICAgdGFyZ2V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5zdGFydE5ldykge1xuICAgICAgbm9kZVtfeGZhX29iamVjdC4kZXh0cmFdLnRhcmdldCA9IHRhcmdldCB8fCBjdXJyZW50UGFnZUFyZWE7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRhcmdldCAmJiB0YXJnZXQgIT09IGN1cnJlbnRQYWdlQXJlYSkge1xuICAgICAgbm9kZVtfeGZhX29iamVjdC4kZXh0cmFdLnRhcmdldCA9IHRhcmdldDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIENvbnRlbnRBcmVhKSkge1xuICAgIHRhcmdldCA9IG51bGw7XG4gIH1cblxuICBjb25zdCBwYWdlQXJlYSA9IHRhcmdldCAmJiB0YXJnZXRbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICBsZXQgaW5kZXg7XG4gIGxldCBuZXh0UGFnZUFyZWEgPSBwYWdlQXJlYTtcblxuICBpZiAobm9kZS5zdGFydE5ldykge1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnRBcmVhcyA9IHBhZ2VBcmVhLmNvbnRlbnRBcmVhLmNoaWxkcmVuO1xuICAgICAgY29uc3QgaW5kZXhGb3JDdXJyZW50ID0gY29udGVudEFyZWFzLmluZGV4T2YoY3VycmVudENvbnRlbnRBcmVhKTtcbiAgICAgIGNvbnN0IGluZGV4Rm9yVGFyZ2V0ID0gY29udGVudEFyZWFzLmluZGV4T2YodGFyZ2V0KTtcblxuICAgICAgaWYgKGluZGV4Rm9yQ3VycmVudCAhPT0gLTEgJiYgaW5kZXhGb3JDdXJyZW50IDwgaW5kZXhGb3JUYXJnZXQpIHtcbiAgICAgICAgbmV4dFBhZ2VBcmVhID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaW5kZXggPSBpbmRleEZvclRhcmdldCAtIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4ID0gY3VycmVudFBhZ2VBcmVhLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2YoY3VycmVudENvbnRlbnRBcmVhKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodGFyZ2V0ICYmIHRhcmdldCAhPT0gY3VycmVudENvbnRlbnRBcmVhKSB7XG4gICAgY29uc3QgY29udGVudEFyZWFzID0gcGFnZUFyZWEuY29udGVudEFyZWEuY2hpbGRyZW47XG4gICAgaW5kZXggPSBjb250ZW50QXJlYXMuaW5kZXhPZih0YXJnZXQpIC0gMTtcbiAgICBuZXh0UGFnZUFyZWEgPSBwYWdlQXJlYSA9PT0gY3VycmVudFBhZ2VBcmVhID8gbnVsbCA6IHBhZ2VBcmVhO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIG5vZGVbX3hmYV9vYmplY3QuJGV4dHJhXS50YXJnZXQgPSBuZXh0UGFnZUFyZWE7XG4gIG5vZGVbX3hmYV9vYmplY3QuJGV4dHJhXS5pbmRleCA9IGluZGV4O1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlT3ZlcmZsb3cobm9kZSwgZXh0cmFOb2RlLCBzcGFjZSkge1xuICBjb25zdCByb290ID0gbm9kZVtfeGZhX29iamVjdC4kZ2V0VGVtcGxhdGVSb290XSgpO1xuXG4gIGNvbnN0IHNhdmVkID0gcm9vdFtfeGZhX29iamVjdC4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZTtcbiAgY29uc3Qgc2F2ZWRNZXRob2QgPSBleHRyYU5vZGVbX3hmYV9vYmplY3QuJGdldFN1YmZvcm1QYXJlbnRdO1xuXG4gIGV4dHJhTm9kZVtfeGZhX29iamVjdC4kZ2V0U3ViZm9ybVBhcmVudF0gPSAoKSA9PiBub2RlO1xuXG4gIHJvb3RbX3hmYV9vYmplY3QuJGV4dHJhXS5ub0xheW91dEZhaWx1cmUgPSB0cnVlO1xuXG4gIGNvbnN0IHJlcyA9IGV4dHJhTm9kZVtfeGZhX29iamVjdC4kdG9IVE1MXShzcGFjZSk7XG5cbiAgbm9kZVtfeGZhX29iamVjdC4kYWRkSFRNTF0ocmVzLmh0bWwsIHJlcy5iYm94KTtcblxuICByb290W194ZmFfb2JqZWN0LiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlID0gc2F2ZWQ7XG4gIGV4dHJhTm9kZVtfeGZhX29iamVjdC4kZ2V0U3ViZm9ybVBhcmVudF0gPSBzYXZlZE1ldGhvZDtcbn1cblxuY2xhc3MgQXBwZWFyYW5jZUZpbHRlciBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJhcHBlYXJhbmNlRmlsdGVyXCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy50eXBlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMudHlwZSwgW1wib3B0aW9uYWxcIiwgXCJyZXF1aXJlZFwiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbn1cblxuY2xhc3MgQXJjIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImFyY1wiLCB0cnVlKTtcbiAgICB0aGlzLmNpcmN1bGFyID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLmNpcmN1bGFyLFxuICAgICAgZGVmYXVsdFZhbHVlOiAwLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMVxuICAgIH0pO1xuICAgIHRoaXMuaGFuZCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmhhbmQsIFtcImV2ZW5cIiwgXCJsZWZ0XCIsIFwicmlnaHRcIl0pO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5zdGFydEFuZ2xlID0gKDAsIF91dGlscy5nZXRGbG9hdCkoe1xuICAgICAgZGF0YTogYXR0cmlidXRlcy5zdGFydEFuZ2xlLFxuICAgICAgZGVmYXVsdFZhbHVlOiAwLFxuICAgICAgdmFsaWRhdGU6IHggPT4gdHJ1ZVxuICAgIH0pO1xuICAgIHRoaXMuc3dlZXBBbmdsZSA9ICgwLCBfdXRpbHMuZ2V0RmxvYXQpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuc3dlZXBBbmdsZSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMzYwLFxuICAgICAgdmFsaWRhdGU6IHggPT4gdHJ1ZVxuICAgIH0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmVkZ2UgPSBudWxsO1xuICAgIHRoaXMuZmlsbCA9IG51bGw7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvSFRNTF0oKSB7XG4gICAgY29uc3QgZWRnZSA9IHRoaXMuZWRnZSA/IHRoaXMuZWRnZSA6IG5ldyBFZGdlKHt9KTtcblxuICAgIGNvbnN0IGVkZ2VTdHlsZSA9IGVkZ2VbX3hmYV9vYmplY3QuJHRvU3R5bGVdKCk7XG5cbiAgICBjb25zdCBzdHlsZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICBpZiAodGhpcy5maWxsICYmIHRoaXMuZmlsbC5wcmVzZW5jZSA9PT0gXCJ2aXNpYmxlXCIpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oc3R5bGUsIHRoaXMuZmlsbFtfeGZhX29iamVjdC4kdG9TdHlsZV0oKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlLmZpbGwgPSBcInRyYW5zcGFyZW50XCI7XG4gICAgfVxuXG4gICAgc3R5bGUuc3Ryb2tlV2lkdGggPSAoMCwgX2h0bWxfdXRpbHMubWVhc3VyZVRvU3RyaW5nKShlZGdlLnByZXNlbmNlID09PSBcInZpc2libGVcIiA/IGVkZ2UudGhpY2tuZXNzIDogMCk7XG4gICAgc3R5bGUuc3Ryb2tlID0gZWRnZVN0eWxlLmNvbG9yO1xuICAgIGxldCBhcmM7XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgIHhtbG5zOiBTVkdfTlMsXG4gICAgICBzdHlsZToge1xuICAgICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICAgIG92ZXJmbG93OiBcInZpc2libGVcIlxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zd2VlcEFuZ2xlID09PSAzNjApIHtcbiAgICAgIGFyYyA9IHtcbiAgICAgICAgbmFtZTogXCJlbGxpcHNlXCIsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICB4bWxuczogU1ZHX05TLFxuICAgICAgICAgIGN4OiBcIjUwJVwiLFxuICAgICAgICAgIGN5OiBcIjUwJVwiLFxuICAgICAgICAgIHJ4OiBcIjUwJVwiLFxuICAgICAgICAgIHJ5OiBcIjUwJVwiLFxuICAgICAgICAgIHN0eWxlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0YXJ0QW5nbGUgPSB0aGlzLnN0YXJ0QW5nbGUgKiBNYXRoLlBJIC8gMTgwO1xuICAgICAgY29uc3Qgc3dlZXBBbmdsZSA9IHRoaXMuc3dlZXBBbmdsZSAqIE1hdGguUEkgLyAxODA7XG4gICAgICBjb25zdCBsYXJnZUFyYyA9IHRoaXMuc3dlZXBBbmdsZSA+IDE4MCA/IDEgOiAwO1xuICAgICAgY29uc3QgW3gxLCB5MSwgeDIsIHkyXSA9IFs1MCAqICgxICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkpLCA1MCAqICgxIC0gTWF0aC5zaW4oc3RhcnRBbmdsZSkpLCA1MCAqICgxICsgTWF0aC5jb3Moc3RhcnRBbmdsZSArIHN3ZWVwQW5nbGUpKSwgNTAgKiAoMSAtIE1hdGguc2luKHN0YXJ0QW5nbGUgKyBzd2VlcEFuZ2xlKSldO1xuICAgICAgYXJjID0ge1xuICAgICAgICBuYW1lOiBcInBhdGhcIixcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIHhtbG5zOiBTVkdfTlMsXG4gICAgICAgICAgZDogYE0gJHt4MX0gJHt5MX0gQSA1MCA1MCAwICR7bGFyZ2VBcmN9IDAgJHt4Mn0gJHt5Mn1gLFxuICAgICAgICAgIHZlY3RvckVmZmVjdDogXCJub24tc2NhbGluZy1zdHJva2VcIixcbiAgICAgICAgICBzdHlsZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgT2JqZWN0LmFzc2lnbihhdHRyaWJ1dGVzLCB7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMCAxMDBcIixcbiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbzogXCJub25lXCJcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHN2ZyA9IHtcbiAgICAgIG5hbWU6IFwic3ZnXCIsXG4gICAgICBjaGlsZHJlbjogW2FyY10sXG4gICAgICBhdHRyaWJ1dGVzXG4gICAgfTtcblxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXNbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKVtfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpO1xuXG4gICAgaWYgKGhhc01hcmdpbihwYXJlbnQpKSB7XG4gICAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7XG4gICAgICAgIG5hbWU6IFwiZGl2XCIsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgZGlzcGxheTogXCJpbmxpbmVcIixcbiAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgICAgIGhlaWdodDogXCIxMDAlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNoaWxkcmVuOiBbc3ZnXVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3ZnLmF0dHJpYnV0ZXMuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moc3ZnKTtcbiAgfVxuXG59XG5cbmNsYXNzIEFyZWEgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiYXJlYVwiLCB0cnVlKTtcbiAgICB0aGlzLmNvbFNwYW4gPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuY29sU3BhbixcbiAgICAgIGRlZmF1bHRWYWx1ZTogMSxcbiAgICAgIHZhbGlkYXRlOiBuID0+IG4gPj0gMSB8fCBuID09PSAtMVxuICAgIH0pO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy5yZWxldmFudCA9ICgwLCBfdXRpbHMuZ2V0UmVsZXZhbnQpKGF0dHJpYnV0ZXMucmVsZXZhbnQpO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLnggPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLngsIFwiMHB0XCIpO1xuICAgIHRoaXMueSA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMueSwgXCIwcHRcIik7XG4gICAgdGhpcy5kZXNjID0gbnVsbDtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5hcmVhID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5kcmF3ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5leE9iamVjdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZXhjbEdyb3VwID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5maWVsZCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuc3ViZm9ybSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuc3ViZm9ybVNldCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbiAgKltfeGZhX29iamVjdC4kZ2V0Q29udGFpbmVkQ2hpbGRyZW5dKCkge1xuICAgIHlpZWxkKiBnZXRDb250YWluZWRDaGlsZHJlbih0aGlzKTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kaXNUcmFuc3BhcmVudF0oKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGlzQmluZGFibGVdKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRhZGRIVE1MXShodG1sLCBiYm94KSB7XG4gICAgY29uc3QgW3gsIHksIHcsIGhdID0gYmJveDtcbiAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0ud2lkdGggPSBNYXRoLm1heCh0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0ud2lkdGgsIHggKyB3KTtcbiAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uaGVpZ2h0ID0gTWF0aC5tYXgodGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmhlaWdodCwgeSArIGgpO1xuXG4gICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmNoaWxkcmVuLnB1c2goaHRtbCk7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGdldEF2YWlsYWJsZVNwYWNlXSgpIHtcbiAgICByZXR1cm4gdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmF2YWlsYWJsZVNwYWNlO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgY29uc3Qgc3R5bGUgPSAoMCwgX2h0bWxfdXRpbHMudG9TdHlsZSkodGhpcywgXCJwb3NpdGlvblwiKTtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgICAgc3R5bGUsXG4gICAgICBpZDogdGhpc1tfeGZhX29iamVjdC4kdWlkXSxcbiAgICAgIGNsYXNzOiBbXCJ4ZmFBcmVhXCJdXG4gICAgfTtcblxuICAgIGlmICgoMCwgX2h0bWxfdXRpbHMuaXNQcmludE9ubHkpKHRoaXMpKSB7XG4gICAgICBhdHRyaWJ1dGVzLmNsYXNzLnB1c2goXCJ4ZmFQcmludE9ubHlcIik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubmFtZSkge1xuICAgICAgYXR0cmlidXRlcy54ZmFOYW1lID0gdGhpcy5uYW1lO1xuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkcmVuID0gW107XG4gICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdID0ge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGF2YWlsYWJsZVNwYWNlXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXNbX3hmYV9vYmplY3QuJGNoaWxkcmVuVG9IVE1MXSh7XG4gICAgICBmaWx0ZXI6IG5ldyBTZXQoW1wiYXJlYVwiLCBcImRyYXdcIiwgXCJmaWVsZFwiLCBcImV4Y2xHcm91cFwiLCBcInN1YmZvcm1cIiwgXCJzdWJmb3JtU2V0XCJdKSxcbiAgICAgIGluY2x1ZGU6IHRydWVcbiAgICB9KTtcblxuICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIGlmIChyZXN1bHQuaXNCcmVhaygpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGRlbGV0ZSB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV07XG4gICAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuRkFJTFVSRTtcbiAgICB9XG5cbiAgICBzdHlsZS53aWR0aCA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS53aWR0aCk7XG4gICAgc3R5bGUuaGVpZ2h0ID0gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykodGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmhlaWdodCk7XG4gICAgY29uc3QgaHRtbCA9IHtcbiAgICAgIG5hbWU6IFwiZGl2XCIsXG4gICAgICBhdHRyaWJ1dGVzLFxuICAgICAgY2hpbGRyZW5cbiAgICB9O1xuICAgIGNvbnN0IGJib3ggPSBbdGhpcy54LCB0aGlzLnksIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS53aWR0aCwgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmhlaWdodF07XG4gICAgZGVsZXRlIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXTtcbiAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2VzcyhodG1sLCBiYm94KTtcbiAgfVxuXG59XG5cbmNsYXNzIEFzc2lzdCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJhc3Npc3RcIiwgdHJ1ZSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnJvbGUgPSBhdHRyaWJ1dGVzLnJvbGUgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5zcGVhayA9IG51bGw7XG4gICAgdGhpcy50b29sVGlwID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXSgpIHtcbiAgICByZXR1cm4gdGhpcy50b29sVGlwICYmIHRoaXMudG9vbFRpcFtfeGZhX29iamVjdC4kY29udGVudF0gPyB0aGlzLnRvb2xUaXBbX3hmYV9vYmplY3QuJGNvbnRlbnRdIDogbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIEJhcmNvZGUgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiYmFyY29kZVwiLCB0cnVlKTtcbiAgICB0aGlzLmNoYXJFbmNvZGluZyA9ICgwLCBfdXRpbHMuZ2V0S2V5d29yZCkoe1xuICAgICAgZGF0YTogYXR0cmlidXRlcy5jaGFyRW5jb2RpbmcgPyBhdHRyaWJ1dGVzLmNoYXJFbmNvZGluZy50b0xvd2VyQ2FzZSgpIDogXCJcIixcbiAgICAgIGRlZmF1bHRWYWx1ZTogXCJcIixcbiAgICAgIHZhbGlkYXRlOiBrID0+IFtcInV0Zi04XCIsIFwiYmlnLWZpdmVcIiwgXCJmb250c3BlY2lmaWNcIiwgXCJnYmtcIiwgXCJnYi0xODAzMFwiLCBcImdiLTIzMTJcIiwgXCJrc2MtNTYwMVwiLCBcIm5vbmVcIiwgXCJzaGlmdC1qaXNcIiwgXCJ1Y3MtMlwiLCBcInV0Zi0xNlwiXS5pbmNsdWRlcyhrKSB8fCBrLm1hdGNoKC9pc28tODg1OS1cXGR7Mn0vKVxuICAgIH0pO1xuICAgIHRoaXMuY2hlY2tzdW0gPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5jaGVja3N1bSwgW1wibm9uZVwiLCBcIjFtb2QxMFwiLCBcIjFtb2QxMF8xbW9kMTFcIiwgXCIybW9kMTBcIiwgXCJhdXRvXCJdKTtcbiAgICB0aGlzLmRhdGFDb2x1bW5Db3VudCA9ICgwLCBfdXRpbHMuZ2V0SW50ZWdlcikoe1xuICAgICAgZGF0YTogYXR0cmlidXRlcy5kYXRhQ29sdW1uQ291bnQsXG4gICAgICBkZWZhdWx0VmFsdWU6IC0xLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA+PSAwXG4gICAgfSk7XG4gICAgdGhpcy5kYXRhTGVuZ3RoID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLmRhdGFMZW5ndGgsXG4gICAgICBkZWZhdWx0VmFsdWU6IC0xLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA+PSAwXG4gICAgfSk7XG4gICAgdGhpcy5kYXRhUHJlcCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmRhdGFQcmVwLCBbXCJub25lXCIsIFwiZmxhdGVDb21wcmVzc1wiXSk7XG4gICAgdGhpcy5kYXRhUm93Q291bnQgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuZGF0YVJvd0NvdW50LFxuICAgICAgZGVmYXVsdFZhbHVlOiAtMSxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPj0gMFxuICAgIH0pO1xuICAgIHRoaXMuZW5kQ2hhciA9IGF0dHJpYnV0ZXMuZW5kQ2hhciB8fCBcIlwiO1xuICAgIHRoaXMuZXJyb3JDb3JyZWN0aW9uTGV2ZWwgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuZXJyb3JDb3JyZWN0aW9uTGV2ZWwsXG4gICAgICBkZWZhdWx0VmFsdWU6IC0xLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA+PSAwICYmIHggPD0gOFxuICAgIH0pO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5tb2R1bGVIZWlnaHQgPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLm1vZHVsZUhlaWdodCwgXCI1bW1cIik7XG4gICAgdGhpcy5tb2R1bGVXaWR0aCA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMubW9kdWxlV2lkdGgsIFwiMC4yNW1tXCIpO1xuICAgIHRoaXMucHJpbnRDaGVja0RpZ2l0ID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLnByaW50Q2hlY2tEaWdpdCxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDFcbiAgICB9KTtcbiAgICB0aGlzLnJvd0NvbHVtblJhdGlvID0gKDAsIF91dGlscy5nZXRSYXRpbykoYXR0cmlidXRlcy5yb3dDb2x1bW5SYXRpbyk7XG4gICAgdGhpcy5zdGFydENoYXIgPSBhdHRyaWJ1dGVzLnN0YXJ0Q2hhciB8fCBcIlwiO1xuICAgIHRoaXMudGV4dExvY2F0aW9uID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMudGV4dExvY2F0aW9uLCBbXCJiZWxvd1wiLCBcImFib3ZlXCIsIFwiYWJvdmVFbWJlZGRlZFwiLCBcImJlbG93RW1iZWRkZWRcIiwgXCJub25lXCJdKTtcbiAgICB0aGlzLnRydW5jYXRlID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLnRydW5jYXRlLFxuICAgICAgZGVmYXVsdFZhbHVlOiAwLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMVxuICAgIH0pO1xuICAgIHRoaXMudHlwZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnR5cGUgPyBhdHRyaWJ1dGVzLnR5cGUudG9Mb3dlckNhc2UoKSA6IFwiXCIsIFtcImF6dGVjXCIsIFwiY29kYWJhclwiLCBcImNvZGUyb2Y1aW5kdXN0cmlhbFwiLCBcImNvZGUyb2Y1aW50ZXJsZWF2ZWRcIiwgXCJjb2RlMm9mNW1hdHJpeFwiLCBcImNvZGUyb2Y1c3RhbmRhcmRcIiwgXCJjb2RlM29mOVwiLCBcImNvZGUzb2Y5ZXh0ZW5kZWRcIiwgXCJjb2RlMTFcIiwgXCJjb2RlNDlcIiwgXCJjb2RlOTNcIiwgXCJjb2RlMTI4XCIsIFwiY29kZTEyOGFcIiwgXCJjb2RlMTI4YlwiLCBcImNvZGUxMjhjXCIsIFwiY29kZTEyOHNzY2NcIiwgXCJkYXRhbWF0cml4XCIsIFwiZWFuOFwiLCBcImVhbjhhZGQyXCIsIFwiZWFuOGFkZDVcIiwgXCJlYW4xM1wiLCBcImVhbjEzYWRkMlwiLCBcImVhbjEzYWRkNVwiLCBcImVhbjEzcHdjZFwiLCBcImZpbVwiLCBcImxvZ21hcnNcIiwgXCJtYXhpY29kZVwiLCBcIm1zaVwiLCBcInBkZjQxN1wiLCBcInBkZjQxN21hY3JvXCIsIFwicGxlc3NleVwiLCBcInBvc3RhdXNjdXN0MlwiLCBcInBvc3RhdXNjdXN0M1wiLCBcInBvc3RhdXNyZXBseXBhaWRcIiwgXCJwb3N0YXVzc3RhbmRhcmRcIiwgXCJwb3N0dWtybTRzY2NcIiwgXCJwb3N0dXNkcGJjXCIsIFwicG9zdHVzaW1iXCIsIFwicG9zdHVzc3RhbmRhcmRcIiwgXCJwb3N0dXM1emlwXCIsIFwicXJjb2RlXCIsIFwicmZpZFwiLCBcInJzczE0XCIsIFwicnNzMTRleHBhbmRlZFwiLCBcInJzczE0bGltaXRlZFwiLCBcInJzczE0c3RhY2tlZFwiLCBcInJzczE0c3RhY2tlZG9tbmlcIiwgXCJyc3MxNHRydW5jYXRlZFwiLCBcInRlbGVwZW5cIiwgXCJ1Y2MxMjhcIiwgXCJ1Y2MxMjhyYW5kb21cIiwgXCJ1Y2MxMjhzc2NjXCIsIFwidXBjYVwiLCBcInVwY2FhZGQyXCIsIFwidXBjYWFkZDVcIiwgXCJ1cGNhcHdjZFwiLCBcInVwY2VcIiwgXCJ1cGNlYWRkMlwiLCBcInVwY2VhZGQ1XCIsIFwidXBjZWFuMlwiLCBcInVwY2VhbjVcIiwgXCJ1cHNtYXhpY29kZVwiXSk7XG4gICAgdGhpcy51cHNNb2RlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMudXBzTW9kZSwgW1widXNDYXJyaWVyXCIsIFwiaW50ZXJuYXRpb25hbENhcnJpZXJcIiwgXCJzZWN1cmVTeW1ib2xcIiwgXCJzdGFuZGFyZFN5bWJvbFwiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMud2lkZU5hcnJvd1JhdGlvID0gKDAsIF91dGlscy5nZXRSYXRpbykoYXR0cmlidXRlcy53aWRlTmFycm93UmF0aW8pO1xuICAgIHRoaXMuZW5jcnlwdCA9IG51bGw7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgQmluZCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJiaW5kXCIsIHRydWUpO1xuICAgIHRoaXMubWF0Y2ggPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5tYXRjaCwgW1wib25jZVwiLCBcImRhdGFSZWZcIiwgXCJnbG9iYWxcIiwgXCJub25lXCJdKTtcbiAgICB0aGlzLnJlZiA9IGF0dHJpYnV0ZXMucmVmIHx8IFwiXCI7XG4gICAgdGhpcy5waWN0dXJlID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIEJpbmRJdGVtcyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJiaW5kSXRlbXNcIik7XG4gICAgdGhpcy5jb25uZWN0aW9uID0gYXR0cmlidXRlcy5jb25uZWN0aW9uIHx8IFwiXCI7XG4gICAgdGhpcy5sYWJlbFJlZiA9IGF0dHJpYnV0ZXMubGFiZWxSZWYgfHwgXCJcIjtcbiAgICB0aGlzLnJlZiA9IGF0dHJpYnV0ZXMucmVmIHx8IFwiXCI7XG4gICAgdGhpcy52YWx1ZVJlZiA9IGF0dHJpYnV0ZXMudmFsdWVSZWYgfHwgXCJcIjtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQmluZEl0ZW1zID0gQmluZEl0ZW1zO1xuXG5jbGFzcyBCb29rZW5kIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImJvb2tlbmRcIik7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLmxlYWRlciA9IGF0dHJpYnV0ZXMubGVhZGVyIHx8IFwiXCI7XG4gICAgdGhpcy50cmFpbGVyID0gYXR0cmlidXRlcy50cmFpbGVyIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbn1cblxuY2xhc3MgQm9vbGVhbkVsZW1lbnQgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb24wMSB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJib29sZWFuXCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgcmV0dXJuIHZhbHVlVG9IdG1sKHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID09PSAxID8gXCIxXCIgOiBcIjBcIik7XG4gIH1cblxufVxuXG5jbGFzcyBCb3JkZXIgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiYm9yZGVyXCIsIHRydWUpO1xuICAgIHRoaXMuYnJlYWsgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5icmVhaywgW1wiY2xvc2VcIiwgXCJvcGVuXCJdKTtcbiAgICB0aGlzLmhhbmQgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5oYW5kLCBbXCJldmVuXCIsIFwibGVmdFwiLCBcInJpZ2h0XCJdKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMucHJlc2VuY2UgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5wcmVzZW5jZSwgW1widmlzaWJsZVwiLCBcImhpZGRlblwiLCBcImluYWN0aXZlXCIsIFwiaW52aXNpYmxlXCJdKTtcbiAgICB0aGlzLnJlbGV2YW50ID0gKDAsIF91dGlscy5nZXRSZWxldmFudCkoYXR0cmlidXRlcy5yZWxldmFudCk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuY29ybmVyID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KDQpO1xuICAgIHRoaXMuZWRnZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSg0KTtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5maWxsID0gbnVsbDtcbiAgICB0aGlzLm1hcmdpbiA9IG51bGw7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGdldEV4dHJhXSgpIHtcbiAgICBpZiAoIXRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXSkge1xuICAgICAgY29uc3QgZWRnZXMgPSB0aGlzLmVkZ2UuY2hpbGRyZW4uc2xpY2UoKTtcblxuICAgICAgaWYgKGVkZ2VzLmxlbmd0aCA8IDQpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdEVkZ2UgPSBlZGdlc1tlZGdlcy5sZW5ndGggLSAxXSB8fCBuZXcgRWRnZSh7fSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IGVkZ2VzLmxlbmd0aDsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgIGVkZ2VzLnB1c2goZGVmYXVsdEVkZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdpZHRocyA9IGVkZ2VzLm1hcChlZGdlID0+IGVkZ2UudGhpY2tuZXNzKTtcbiAgICAgIGNvbnN0IGluc2V0cyA9IFswLCAwLCAwLCAwXTtcblxuICAgICAgaWYgKHRoaXMubWFyZ2luKSB7XG4gICAgICAgIGluc2V0c1swXSA9IHRoaXMubWFyZ2luLnRvcEluc2V0O1xuICAgICAgICBpbnNldHNbMV0gPSB0aGlzLm1hcmdpbi5yaWdodEluc2V0O1xuICAgICAgICBpbnNldHNbMl0gPSB0aGlzLm1hcmdpbi5ib3R0b21JbnNldDtcbiAgICAgICAgaW5zZXRzWzNdID0gdGhpcy5tYXJnaW4ubGVmdEluc2V0O1xuICAgICAgfVxuXG4gICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0gPSB7XG4gICAgICAgIHdpZHRocyxcbiAgICAgICAgaW5zZXRzLFxuICAgICAgICBlZGdlc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b1N0eWxlXSgpIHtcbiAgICBjb25zdCB7XG4gICAgICBlZGdlc1xuICAgIH0gPSB0aGlzW194ZmFfb2JqZWN0LiRnZXRFeHRyYV0oKTtcblxuICAgIGNvbnN0IGVkZ2VTdHlsZXMgPSBlZGdlcy5tYXAobm9kZSA9PiB7XG4gICAgICBjb25zdCBzdHlsZSA9IG5vZGVbX3hmYV9vYmplY3QuJHRvU3R5bGVdKCk7XG5cbiAgICAgIHN0eWxlLmNvbG9yID0gc3R5bGUuY29sb3IgfHwgXCIjMDAwMDAwXCI7XG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfSk7XG4gICAgY29uc3Qgc3R5bGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgaWYgKHRoaXMubWFyZ2luKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHN0eWxlLCB0aGlzLm1hcmdpbltfeGZhX29iamVjdC4kdG9TdHlsZV0oKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmlsbCAmJiB0aGlzLmZpbGwucHJlc2VuY2UgPT09IFwidmlzaWJsZVwiKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHN0eWxlLCB0aGlzLmZpbGxbX3hmYV9vYmplY3QuJHRvU3R5bGVdKCkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvcm5lci5jaGlsZHJlbi5zb21lKG5vZGUgPT4gbm9kZS5yYWRpdXMgIT09IDApKSB7XG4gICAgICBjb25zdCBjb3JuZXJTdHlsZXMgPSB0aGlzLmNvcm5lci5jaGlsZHJlbi5tYXAobm9kZSA9PiBub2RlW194ZmFfb2JqZWN0LiR0b1N0eWxlXSgpKTtcblxuICAgICAgaWYgKGNvcm5lclN0eWxlcy5sZW5ndGggPT09IDIgfHwgY29ybmVyU3R5bGVzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICBjb25zdCBsYXN0ID0gY29ybmVyU3R5bGVzW2Nvcm5lclN0eWxlcy5sZW5ndGggLSAxXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gY29ybmVyU3R5bGVzLmxlbmd0aDsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgIGNvcm5lclN0eWxlcy5wdXNoKGxhc3QpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0eWxlLmJvcmRlclJhZGl1cyA9IGNvcm5lclN0eWxlcy5tYXAocyA9PiBzLnJhZGl1cykuam9pbihcIiBcIik7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLnByZXNlbmNlKSB7XG4gICAgICBjYXNlIFwiaW52aXNpYmxlXCI6XG4gICAgICBjYXNlIFwiaGlkZGVuXCI6XG4gICAgICAgIHN0eWxlLmJvcmRlclN0eWxlID0gXCJcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJpbmFjdGl2ZVwiOlxuICAgICAgICBzdHlsZS5ib3JkZXJTdHlsZSA9IFwibm9uZVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc3R5bGUuYm9yZGVyU3R5bGUgPSBlZGdlU3R5bGVzLm1hcChzID0+IHMuc3R5bGUpLmpvaW4oXCIgXCIpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBzdHlsZS5ib3JkZXJXaWR0aCA9IGVkZ2VTdHlsZXMubWFwKHMgPT4gcy53aWR0aCkuam9pbihcIiBcIik7XG4gICAgc3R5bGUuYm9yZGVyQ29sb3IgPSBlZGdlU3R5bGVzLm1hcChzID0+IHMuY29sb3IpLmpvaW4oXCIgXCIpO1xuICAgIHJldHVybiBzdHlsZTtcbiAgfVxuXG59XG5cbmNsYXNzIEJyZWFrIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImJyZWFrXCIsIHRydWUpO1xuICAgIHRoaXMuYWZ0ZXIgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5hZnRlciwgW1wiYXV0b1wiLCBcImNvbnRlbnRBcmVhXCIsIFwicGFnZUFyZWFcIiwgXCJwYWdlRXZlblwiLCBcInBhZ2VPZGRcIl0pO1xuICAgIHRoaXMuYWZ0ZXJUYXJnZXQgPSBhdHRyaWJ1dGVzLmFmdGVyVGFyZ2V0IHx8IFwiXCI7XG4gICAgdGhpcy5iZWZvcmUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5iZWZvcmUsIFtcImF1dG9cIiwgXCJjb250ZW50QXJlYVwiLCBcInBhZ2VBcmVhXCIsIFwicGFnZUV2ZW5cIiwgXCJwYWdlT2RkXCJdKTtcbiAgICB0aGlzLmJlZm9yZVRhcmdldCA9IGF0dHJpYnV0ZXMuYmVmb3JlVGFyZ2V0IHx8IFwiXCI7XG4gICAgdGhpcy5ib29rZW5kTGVhZGVyID0gYXR0cmlidXRlcy5ib29rZW5kTGVhZGVyIHx8IFwiXCI7XG4gICAgdGhpcy5ib29rZW5kVHJhaWxlciA9IGF0dHJpYnV0ZXMuYm9va2VuZFRyYWlsZXIgfHwgXCJcIjtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMub3ZlcmZsb3dMZWFkZXIgPSBhdHRyaWJ1dGVzLm92ZXJmbG93TGVhZGVyIHx8IFwiXCI7XG4gICAgdGhpcy5vdmVyZmxvd1RhcmdldCA9IGF0dHJpYnV0ZXMub3ZlcmZsb3dUYXJnZXQgfHwgXCJcIjtcbiAgICB0aGlzLm92ZXJmbG93VHJhaWxlciA9IGF0dHJpYnV0ZXMub3ZlcmZsb3dUcmFpbGVyIHx8IFwiXCI7XG4gICAgdGhpcy5zdGFydE5ldyA9ICgwLCBfdXRpbHMuZ2V0SW50ZWdlcikoe1xuICAgICAgZGF0YTogYXR0cmlidXRlcy5zdGFydE5ldyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDFcbiAgICB9KTtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgQnJlYWtBZnRlciBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJicmVha0FmdGVyXCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5sZWFkZXIgPSBhdHRyaWJ1dGVzLmxlYWRlciB8fCBcIlwiO1xuICAgIHRoaXMuc3RhcnROZXcgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuc3RhcnROZXcsXG4gICAgICBkZWZhdWx0VmFsdWU6IDAsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID09PSAxXG4gICAgfSk7XG4gICAgdGhpcy50YXJnZXQgPSBhdHRyaWJ1dGVzLnRhcmdldCB8fCBcIlwiO1xuICAgIHRoaXMudGFyZ2V0VHlwZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnRhcmdldFR5cGUsIFtcImF1dG9cIiwgXCJjb250ZW50QXJlYVwiLCBcInBhZ2VBcmVhXCJdKTtcbiAgICB0aGlzLnRyYWlsZXIgPSBhdHRyaWJ1dGVzLnRyYWlsZXIgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5zY3JpcHQgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgQnJlYWtCZWZvcmUgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiYnJlYWtCZWZvcmVcIiwgdHJ1ZSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLmxlYWRlciA9IGF0dHJpYnV0ZXMubGVhZGVyIHx8IFwiXCI7XG4gICAgdGhpcy5zdGFydE5ldyA9ICgwLCBfdXRpbHMuZ2V0SW50ZWdlcikoe1xuICAgICAgZGF0YTogYXR0cmlidXRlcy5zdGFydE5ldyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDFcbiAgICB9KTtcbiAgICB0aGlzLnRhcmdldCA9IGF0dHJpYnV0ZXMudGFyZ2V0IHx8IFwiXCI7XG4gICAgdGhpcy50YXJnZXRUeXBlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMudGFyZ2V0VHlwZSwgW1wiYXV0b1wiLCBcImNvbnRlbnRBcmVhXCIsIFwicGFnZUFyZWFcIl0pO1xuICAgIHRoaXMudHJhaWxlciA9IGF0dHJpYnV0ZXMudHJhaWxlciB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLnNjcmlwdCA9IG51bGw7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHtcbiAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0gPSB7fTtcbiAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuRkFJTFVSRTtcbiAgfVxuXG59XG5cbmNsYXNzIEJ1dHRvbiBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJidXR0b25cIiwgdHJ1ZSk7XG4gICAgdGhpcy5oaWdobGlnaHQgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5oaWdobGlnaHQsIFtcImludmVydGVkXCIsIFwibm9uZVwiLCBcIm91dGxpbmVcIiwgXCJwdXNoXCJdKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCk7XG5cbiAgICBjb25zdCBncmFuZHBhID0gcGFyZW50W194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCk7XG5cbiAgICBjb25zdCBodG1sQnV0dG9uID0ge1xuICAgICAgbmFtZTogXCJidXR0b25cIixcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgaWQ6IHRoaXNbX3hmYV9vYmplY3QuJHVpZF0sXG4gICAgICAgIGNsYXNzOiBbXCJ4ZmFCdXR0b25cIl0sXG4gICAgICAgIHN0eWxlOiB7fVxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGdyYW5kcGEuZXZlbnQuY2hpbGRyZW4pIHtcbiAgICAgIGlmIChldmVudC5hY3Rpdml0eSAhPT0gXCJjbGlja1wiIHx8ICFldmVudC5zY3JpcHQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGpzVVJMID0gKDAsIF9jb3JlX3V0aWxzLnJlY292ZXJKc1VSTCkoZXZlbnQuc2NyaXB0W194ZmFfb2JqZWN0LiRjb250ZW50XSk7XG5cbiAgICAgIGlmICghanNVUkwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhyZWYgPSAoMCwgX2h0bWxfdXRpbHMuZml4VVJMKShqc1VSTC51cmwpO1xuXG4gICAgICBpZiAoIWhyZWYpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGh0bWxCdXR0b24uY2hpbGRyZW4ucHVzaCh7XG4gICAgICAgIG5hbWU6IFwiYVwiLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgaWQ6IFwibGlua1wiICsgdGhpc1tfeGZhX29iamVjdC4kdWlkXSxcbiAgICAgICAgICBocmVmLFxuICAgICAgICAgIG5ld1dpbmRvdzoganNVUkwubmV3V2luZG93LFxuICAgICAgICAgIGNsYXNzOiBbXCJ4ZmFMaW5rXCJdLFxuICAgICAgICAgIHN0eWxlOiB7fVxuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogW11cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5zdWNjZXNzKGh0bWxCdXR0b24pO1xuICB9XG5cbn1cblxuY2xhc3MgQ2FsY3VsYXRlIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImNhbGN1bGF0ZVwiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMub3ZlcnJpZGUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5vdmVycmlkZSwgW1wiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcImlnbm9yZVwiLCBcIndhcm5pbmdcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5tZXNzYWdlID0gbnVsbDtcbiAgICB0aGlzLnNjcmlwdCA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBDYXB0aW9uIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImNhcHRpb25cIiwgdHJ1ZSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnBsYWNlbWVudCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnBsYWNlbWVudCwgW1wibGVmdFwiLCBcImJvdHRvbVwiLCBcImlubGluZVwiLCBcInJpZ2h0XCIsIFwidG9wXCJdKTtcbiAgICB0aGlzLnByZXNlbmNlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMucHJlc2VuY2UsIFtcInZpc2libGVcIiwgXCJoaWRkZW5cIiwgXCJpbmFjdGl2ZVwiLCBcImludmlzaWJsZVwiXSk7XG4gICAgdGhpcy5yZXNlcnZlID0gTWF0aC5jZWlsKCgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMucmVzZXJ2ZSkpO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5mb250ID0gbnVsbDtcbiAgICB0aGlzLm1hcmdpbiA9IG51bGw7XG4gICAgdGhpcy5wYXJhID0gbnVsbDtcbiAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kc2V0VmFsdWVdKHZhbHVlKSB7XG4gICAgX3NldFZhbHVlKHRoaXMsIHZhbHVlKTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kZ2V0RXh0cmFdKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgaWYgKCF0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0pIHtcbiAgICAgIGxldCB7XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHRcbiAgICAgIH0gPSBhdmFpbGFibGVTcGFjZTtcblxuICAgICAgc3dpdGNoICh0aGlzLnBsYWNlbWVudCkge1xuICAgICAgICBjYXNlIFwibGVmdFwiOlxuICAgICAgICBjYXNlIFwicmlnaHRcIjpcbiAgICAgICAgY2FzZSBcImlubGluZVwiOlxuICAgICAgICAgIHdpZHRoID0gdGhpcy5yZXNlcnZlIDw9IDAgPyB3aWR0aCA6IHRoaXMucmVzZXJ2ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwidG9wXCI6XG4gICAgICAgIGNhc2UgXCJib3R0b21cIjpcbiAgICAgICAgICBoZWlnaHQgPSB0aGlzLnJlc2VydmUgPD0gMCA/IGhlaWdodCA6IHRoaXMucmVzZXJ2ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdID0gKDAsIF9odG1sX3V0aWxzLmxheW91dE5vZGUpKHRoaXMsIHtcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXShhdmFpbGFibGVTcGFjZSkge1xuICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LkVNUFRZO1xuICAgIH1cblxuICAgIHRoaXNbX3hmYV9vYmplY3QuJHB1c2hQYXJhXSgpO1xuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlW194ZmFfb2JqZWN0LiR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKS5odG1sO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpc1tfeGZhX29iamVjdC4kcG9wUGFyYV0oKTtcblxuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LkVNUFRZO1xuICAgIH1cblxuICAgIGNvbnN0IHNhdmVkUmVzZXJ2ZSA9IHRoaXMucmVzZXJ2ZTtcblxuICAgIGlmICh0aGlzLnJlc2VydmUgPD0gMCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB3LFxuICAgICAgICBoXG4gICAgICB9ID0gdGhpc1tfeGZhX29iamVjdC4kZ2V0RXh0cmFdKGF2YWlsYWJsZVNwYWNlKTtcblxuICAgICAgc3dpdGNoICh0aGlzLnBsYWNlbWVudCkge1xuICAgICAgICBjYXNlIFwibGVmdFwiOlxuICAgICAgICBjYXNlIFwicmlnaHRcIjpcbiAgICAgICAgY2FzZSBcImlubGluZVwiOlxuICAgICAgICAgIHRoaXMucmVzZXJ2ZSA9IHc7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcInRvcFwiOlxuICAgICAgICBjYXNlIFwiYm90dG9tXCI6XG4gICAgICAgICAgdGhpcy5yZXNlcnZlID0gaDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZHJlbiA9IFtdO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgY2hpbGRyZW4ucHVzaCh7XG4gICAgICAgIG5hbWU6IFwiI3RleHRcIixcbiAgICAgICAgdmFsdWVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGlsZHJlbi5wdXNoKHZhbHVlKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdHlsZSA9ICgwLCBfaHRtbF91dGlscy50b1N0eWxlKSh0aGlzLCBcImZvbnRcIiwgXCJtYXJnaW5cIiwgXCJ2aXNpYmlsaXR5XCIpO1xuXG4gICAgc3dpdGNoICh0aGlzLnBsYWNlbWVudCkge1xuICAgICAgY2FzZSBcImxlZnRcIjpcbiAgICAgIGNhc2UgXCJyaWdodFwiOlxuICAgICAgICBpZiAodGhpcy5yZXNlcnZlID4gMCkge1xuICAgICAgICAgIHN0eWxlLndpZHRoID0gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5yZXNlcnZlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwidG9wXCI6XG4gICAgICBjYXNlIFwiYm90dG9tXCI6XG4gICAgICAgIGlmICh0aGlzLnJlc2VydmUgPiAwKSB7XG4gICAgICAgICAgc3R5bGUuaGVpZ2h0ID0gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5yZXNlcnZlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgICgwLCBfaHRtbF91dGlscy5zZXRQYXJhKSh0aGlzLCBudWxsLCB2YWx1ZSk7XG5cbiAgICB0aGlzW194ZmFfb2JqZWN0LiRwb3BQYXJhXSgpO1xuXG4gICAgdGhpcy5yZXNlcnZlID0gc2F2ZWRSZXNlcnZlO1xuICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtcbiAgICAgIG5hbWU6IFwiZGl2XCIsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIHN0eWxlLFxuICAgICAgICBjbGFzczogW1wieGZhQ2FwdGlvblwiXVxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuXG4gICAgfSk7XG4gIH1cblxufVxuXG5jbGFzcyBDZXJ0aWZpY2F0ZSBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJjZXJ0aWZpY2F0ZVwiKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgfVxuXG59XG5cbmNsYXNzIENlcnRpZmljYXRlcyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJjZXJ0aWZpY2F0ZXNcIiwgdHJ1ZSk7XG4gICAgdGhpcy5jcmVkZW50aWFsU2VydmVyUG9saWN5ID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMuY3JlZGVudGlhbFNlcnZlclBvbGljeSwgW1wib3B0aW9uYWxcIiwgXCJyZXF1aXJlZFwiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnVybCA9IGF0dHJpYnV0ZXMudXJsIHx8IFwiXCI7XG4gICAgdGhpcy51cmxQb2xpY3kgPSBhdHRyaWJ1dGVzLnVybFBvbGljeSB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmVuY3J5cHRpb24gPSBudWxsO1xuICAgIHRoaXMuaXNzdWVycyA9IG51bGw7XG4gICAgdGhpcy5rZXlVc2FnZSA9IG51bGw7XG4gICAgdGhpcy5vaWRzID0gbnVsbDtcbiAgICB0aGlzLnNpZ25pbmcgPSBudWxsO1xuICAgIHRoaXMuc3ViamVjdEROcyA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBDaGVja0J1dHRvbiBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJjaGVja0J1dHRvblwiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMubWFyayA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLm1hcmssIFtcImRlZmF1bHRcIiwgXCJjaGVja1wiLCBcImNpcmNsZVwiLCBcImNyb3NzXCIsIFwiZGlhbW9uZFwiLCBcInNxdWFyZVwiLCBcInN0YXJcIl0pO1xuICAgIHRoaXMuc2hhcGUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5zaGFwZSwgW1wic3F1YXJlXCIsIFwicm91bmRcIl0pO1xuICAgIHRoaXMuc2l6ZSA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMuc2l6ZSwgXCIxMHB0XCIpO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmJvcmRlciA9IG51bGw7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICAgIHRoaXMubWFyZ2luID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXShhdmFpbGFibGVTcGFjZSkge1xuICAgIGNvbnN0IHN0eWxlID0gKDAsIF9odG1sX3V0aWxzLnRvU3R5bGUpKFwibWFyZ2luXCIpO1xuICAgIGNvbnN0IHNpemUgPSAoMCwgX2h0bWxfdXRpbHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnNpemUpO1xuICAgIHN0eWxlLndpZHRoID0gc3R5bGUuaGVpZ2h0ID0gc2l6ZTtcbiAgICBsZXQgdHlwZTtcbiAgICBsZXQgY2xhc3NOYW1lO1xuICAgIGxldCBncm91cElkO1xuXG4gICAgY29uc3QgZmllbGQgPSB0aGlzW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKClbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgIGNvbnN0IGl0ZW1zID0gZmllbGQuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoICYmIGZpZWxkLml0ZW1zLmNoaWxkcmVuWzBdW194ZmFfb2JqZWN0LiR0b0hUTUxdKCkuaHRtbCB8fCBbXTtcbiAgICBjb25zdCBleHBvcnRlZFZhbHVlID0ge1xuICAgICAgb246IChpdGVtc1swXSAhPT0gdW5kZWZpbmVkID8gaXRlbXNbMF0gOiBcIm9uXCIpLnRvU3RyaW5nKCksXG4gICAgICBvZmY6IChpdGVtc1sxXSAhPT0gdW5kZWZpbmVkID8gaXRlbXNbMV0gOiBcIm9mZlwiKS50b1N0cmluZygpXG4gICAgfTtcbiAgICBjb25zdCB2YWx1ZSA9IGZpZWxkLnZhbHVlICYmIGZpZWxkLnZhbHVlW194ZmFfb2JqZWN0LiR0ZXh0XSgpIHx8IFwib2ZmXCI7XG4gICAgY29uc3QgY2hlY2tlZCA9IHZhbHVlID09PSBleHBvcnRlZFZhbHVlLm9uIHx8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IGZpZWxkW194ZmFfb2JqZWN0LiRnZXRTdWJmb3JtUGFyZW50XSgpO1xuXG4gICAgY29uc3QgZmllbGRJZCA9IGZpZWxkW194ZmFfb2JqZWN0LiR1aWRdO1xuICAgIGxldCBkYXRhSWQ7XG5cbiAgICBpZiAoY29udGFpbmVyIGluc3RhbmNlb2YgRXhjbEdyb3VwKSB7XG4gICAgICBncm91cElkID0gY29udGFpbmVyW194ZmFfb2JqZWN0LiR1aWRdO1xuICAgICAgdHlwZSA9IFwicmFkaW9cIjtcbiAgICAgIGNsYXNzTmFtZSA9IFwieGZhUmFkaW9cIjtcbiAgICAgIGRhdGFJZCA9IGNvbnRhaW5lcltfeGZhX29iamVjdC4kZGF0YV0gJiYgY29udGFpbmVyW194ZmFfb2JqZWN0LiRkYXRhXVtfeGZhX29iamVjdC4kdWlkXSB8fCBjb250YWluZXJbX3hmYV9vYmplY3QuJHVpZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGUgPSBcImNoZWNrYm94XCI7XG4gICAgICBjbGFzc05hbWUgPSBcInhmYUNoZWNrYm94XCI7XG4gICAgICBkYXRhSWQgPSBmaWVsZFtfeGZhX29iamVjdC4kZGF0YV0gJiYgZmllbGRbX3hmYV9vYmplY3QuJGRhdGFdW194ZmFfb2JqZWN0LiR1aWRdIHx8IGZpZWxkW194ZmFfb2JqZWN0LiR1aWRdO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0ge1xuICAgICAgbmFtZTogXCJpbnB1dFwiLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBjbGFzczogW2NsYXNzTmFtZV0sXG4gICAgICAgIHN0eWxlLFxuICAgICAgICBmaWVsZElkLFxuICAgICAgICBkYXRhSWQsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGNoZWNrZWQsXG4gICAgICAgIHhmYU9uOiBleHBvcnRlZFZhbHVlLm9uLFxuICAgICAgICB4ZmFPZmY6IGV4cG9ydGVkVmFsdWUub2ZmLFxuICAgICAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsKGZpZWxkKVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoZ3JvdXBJZCkge1xuICAgICAgaW5wdXQuYXR0cmlidXRlcy5uYW1lID0gZ3JvdXBJZDtcbiAgICB9XG5cbiAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7XG4gICAgICBuYW1lOiBcImxhYmVsXCIsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNsYXNzOiBbXCJ4ZmFMYWJlbFwiXVxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBbaW5wdXRdXG4gICAgfSk7XG4gIH1cblxufVxuXG5jbGFzcyBDaG9pY2VMaXN0IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImNob2ljZUxpc3RcIiwgdHJ1ZSk7XG4gICAgdGhpcy5jb21taXRPbiA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmNvbW1pdE9uLCBbXCJzZWxlY3RcIiwgXCJleGl0XCJdKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMub3BlbiA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLm9wZW4sIFtcInVzZXJDb250cm9sXCIsIFwiYWx3YXlzXCIsIFwibXVsdGlTZWxlY3RcIiwgXCJvbkVudHJ5XCJdKTtcbiAgICB0aGlzLnRleHRFbnRyeSA9ICgwLCBfdXRpbHMuZ2V0SW50ZWdlcikoe1xuICAgICAgZGF0YTogYXR0cmlidXRlcy50ZXh0RW50cnksXG4gICAgICBkZWZhdWx0VmFsdWU6IDAsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID09PSAxXG4gICAgfSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuYm9yZGVyID0gbnVsbDtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5tYXJnaW4gPSBudWxsO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgY29uc3Qgc3R5bGUgPSAoMCwgX2h0bWxfdXRpbHMudG9TdHlsZSkodGhpcywgXCJib3JkZXJcIiwgXCJtYXJnaW5cIik7XG5cbiAgICBjb25zdCB1aSA9IHRoaXNbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgIGNvbnN0IGZpZWxkID0gdWlbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgIGNvbnN0IGZvbnRTaXplID0gZmllbGQuZm9udCAmJiBmaWVsZC5mb250LnNpemUgfHwgMTA7XG4gICAgY29uc3Qgb3B0aW9uU3R5bGUgPSB7XG4gICAgICBmb250U2l6ZTogYGNhbGMoJHtmb250U2l6ZX1weCAqIHZhcigtLXpvb20tZmFjdG9yKSlgXG4gICAgfTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IFtdO1xuXG4gICAgaWYgKGZpZWxkLml0ZW1zLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gZmllbGQuaXRlbXM7XG4gICAgICBsZXQgZGlzcGxheWVkSW5kZXggPSAwO1xuICAgICAgbGV0IHNhdmVJbmRleCA9IDA7XG5cbiAgICAgIGlmIChpdGVtcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgZGlzcGxheWVkSW5kZXggPSBpdGVtcy5jaGlsZHJlblswXS5zYXZlO1xuICAgICAgICBzYXZlSW5kZXggPSAxIC0gZGlzcGxheWVkSW5kZXg7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRpc3BsYXllZCA9IGl0ZW1zLmNoaWxkcmVuW2Rpc3BsYXllZEluZGV4XVtfeGZhX29iamVjdC4kdG9IVE1MXSgpLmh0bWw7XG5cbiAgICAgIGNvbnN0IHZhbHVlcyA9IGl0ZW1zLmNoaWxkcmVuW3NhdmVJbmRleF1bX3hmYV9vYmplY3QuJHRvSFRNTF0oKS5odG1sO1xuXG4gICAgICBsZXQgc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQudmFsdWUgJiYgZmllbGQudmFsdWVbX3hmYV9vYmplY3QuJHRleHRdKCkgfHwgXCJcIjtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZGlzcGxheWVkLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0ge1xuICAgICAgICAgIG5hbWU6IFwib3B0aW9uXCIsXG4gICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgdmFsdWU6IHZhbHVlc1tpXSB8fCBkaXNwbGF5ZWRbaV0sXG4gICAgICAgICAgICBzdHlsZTogb3B0aW9uU3R5bGVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHZhbHVlOiBkaXNwbGF5ZWRbaV1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodmFsdWVzW2ldID09PSB2YWx1ZSkge1xuICAgICAgICAgIG9wdGlvbi5hdHRyaWJ1dGVzLnNlbGVjdGVkID0gc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGRyZW4ucHVzaChvcHRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICAgIGNoaWxkcmVuLnNwbGljZSgwLCAwLCB7XG4gICAgICAgICAgbmFtZTogXCJvcHRpb25cIixcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICBoaWRkZW46IHRydWUsXG4gICAgICAgICAgICBzZWxlY3RlZDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdmFsdWU6IFwiIFwiXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdEF0dHJpYnV0ZXMgPSB7XG4gICAgICBjbGFzczogW1wieGZhU2VsZWN0XCJdLFxuICAgICAgZmllbGRJZDogZmllbGRbX3hmYV9vYmplY3QuJHVpZF0sXG4gICAgICBkYXRhSWQ6IGZpZWxkW194ZmFfb2JqZWN0LiRkYXRhXSAmJiBmaWVsZFtfeGZhX29iamVjdC4kZGF0YV1bX3hmYV9vYmplY3QuJHVpZF0gfHwgZmllbGRbX3hmYV9vYmplY3QuJHVpZF0sXG4gICAgICBzdHlsZSxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwoZmllbGQpXG4gICAgfTtcblxuICAgIGlmICh0aGlzLm9wZW4gPT09IFwibXVsdGlTZWxlY3RcIikge1xuICAgICAgc2VsZWN0QXR0cmlidXRlcy5tdWx0aXBsZSA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe1xuICAgICAgbmFtZTogXCJsYWJlbFwiLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBjbGFzczogW1wieGZhTGFiZWxcIl1cbiAgICAgIH0sXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgbmFtZTogXCJzZWxlY3RcIixcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIGF0dHJpYnV0ZXM6IHNlbGVjdEF0dHJpYnV0ZXNcbiAgICAgIH1dXG4gICAgfSk7XG4gIH1cblxufVxuXG5jbGFzcyBDb2xvciBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJjb2xvclwiLCB0cnVlKTtcbiAgICB0aGlzLmNTcGFjZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmNTcGFjZSwgW1wiU1JHQlwiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy52YWx1ZSA9IGF0dHJpYnV0ZXMudmFsdWUgPyAoMCwgX3V0aWxzLmdldENvbG9yKShhdHRyaWJ1dGVzLnZhbHVlKSA6IFwiXCI7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRoYXNTZXR0YWJsZVZhbHVlXSgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvU3R5bGVdKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlID8gX3V0aWwuVXRpbC5tYWtlSGV4Q29sb3IodGhpcy52YWx1ZS5yLCB0aGlzLnZhbHVlLmcsIHRoaXMudmFsdWUuYikgOiBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgQ29tYiBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJjb21iXCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5udW1iZXJPZkNlbGxzID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLm51bWJlck9mQ2VsbHMsXG4gICAgICBkZWZhdWx0VmFsdWU6IDAsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID49IDBcbiAgICB9KTtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxufVxuXG5jbGFzcyBDb25uZWN0IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImNvbm5lY3RcIiwgdHJ1ZSk7XG4gICAgdGhpcy5jb25uZWN0aW9uID0gYXR0cmlidXRlcy5jb25uZWN0aW9uIHx8IFwiXCI7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnJlZiA9IGF0dHJpYnV0ZXMucmVmIHx8IFwiXCI7XG4gICAgdGhpcy51c2FnZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnVzYWdlLCBbXCJleHBvcnRBbmRJbXBvcnRcIiwgXCJleHBvcnRPbmx5XCIsIFwiaW1wb3J0T25seVwiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMucGljdHVyZSA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBDb250ZW50QXJlYSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJjb250ZW50QXJlYVwiLCB0cnVlKTtcbiAgICB0aGlzLmggPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLmgpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy5yZWxldmFudCA9ICgwLCBfdXRpbHMuZ2V0UmVsZXZhbnQpKGF0dHJpYnV0ZXMucmVsZXZhbnQpO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLncgPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLncpO1xuICAgIHRoaXMueCA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMueCwgXCIwcHRcIik7XG4gICAgdGhpcy55ID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy55LCBcIjBwdFwiKTtcbiAgICB0aGlzLmRlc2MgPSBudWxsO1xuICAgIHRoaXMuZXh0cmFzID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXShhdmFpbGFibGVTcGFjZSkge1xuICAgIGNvbnN0IGxlZnQgPSAoMCwgX2h0bWxfdXRpbHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLngpO1xuICAgIGNvbnN0IHRvcCA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMueSk7XG4gICAgY29uc3Qgc3R5bGUgPSB7XG4gICAgICBsZWZ0LFxuICAgICAgdG9wLFxuICAgICAgd2lkdGg6ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMudyksXG4gICAgICBoZWlnaHQ6ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMuaClcbiAgICB9O1xuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBbXCJ4ZmFDb250ZW50YXJlYVwiXTtcblxuICAgIGlmICgoMCwgX2h0bWxfdXRpbHMuaXNQcmludE9ubHkpKHRoaXMpKSB7XG4gICAgICBjbGFzc05hbWVzLnB1c2goXCJ4ZmFQcmludE9ubHlcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe1xuICAgICAgbmFtZTogXCJkaXZcIixcbiAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIGNsYXNzOiBjbGFzc05hbWVzLFxuICAgICAgICBpZDogdGhpc1tfeGZhX29iamVjdC4kdWlkXVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbn1cblxuY2xhc3MgQ29ybmVyIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImNvcm5lclwiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMuaW52ZXJ0ZWQgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuaW52ZXJ0ZWQsXG4gICAgICBkZWZhdWx0VmFsdWU6IDAsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID09PSAxXG4gICAgfSk7XG4gICAgdGhpcy5qb2luID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMuam9pbiwgW1wic3F1YXJlXCIsIFwicm91bmRcIl0pO1xuICAgIHRoaXMucHJlc2VuY2UgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5wcmVzZW5jZSwgW1widmlzaWJsZVwiLCBcImhpZGRlblwiLCBcImluYWN0aXZlXCIsIFwiaW52aXNpYmxlXCJdKTtcbiAgICB0aGlzLnJhZGl1cyA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMucmFkaXVzKTtcbiAgICB0aGlzLnN0cm9rZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnN0cm9rZSwgW1wic29saWRcIiwgXCJkYXNoRG90XCIsIFwiZGFzaERvdERvdFwiLCBcImRhc2hlZFwiLCBcImRvdHRlZFwiLCBcImVtYm9zc2VkXCIsIFwiZXRjaGVkXCIsIFwibG93ZXJlZFwiLCBcInJhaXNlZFwiXSk7XG4gICAgdGhpcy50aGlja25lc3MgPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLnRoaWNrbmVzcywgXCIwLjVwdFwiKTtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5jb2xvciA9IG51bGw7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b1N0eWxlXSgpIHtcbiAgICBjb25zdCBzdHlsZSA9ICgwLCBfaHRtbF91dGlscy50b1N0eWxlKSh0aGlzLCBcInZpc2liaWxpdHlcIik7XG4gICAgc3R5bGUucmFkaXVzID0gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5qb2luID09PSBcInNxdWFyZVwiID8gMCA6IHRoaXMucmFkaXVzKTtcbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cblxufVxuXG5jbGFzcyBEYXRlRWxlbWVudCBleHRlbmRzIF94ZmFfb2JqZWN0LkNvbnRlbnRPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiZGF0ZVwiKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kZmluYWxpemVdKCkge1xuICAgIGNvbnN0IGRhdGUgPSB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XS50cmltKCk7XG5cbiAgICB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSA9IGRhdGUgPyBuZXcgRGF0ZShkYXRlKSA6IG51bGw7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHtcbiAgICByZXR1cm4gdmFsdWVUb0h0bWwodGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gPyB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XS50b1N0cmluZygpIDogXCJcIik7XG4gIH1cblxufVxuXG5jbGFzcyBEYXRlVGltZSBleHRlbmRzIF94ZmFfb2JqZWN0LkNvbnRlbnRPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiZGF0ZVRpbWVcIik7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGZpbmFsaXplXSgpIHtcbiAgICBjb25zdCBkYXRlID0gdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0udHJpbSgpO1xuXG4gICAgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gPSBkYXRlID8gbmV3IERhdGUoZGF0ZSkgOiBudWxsO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgcmV0dXJuIHZhbHVlVG9IdG1sKHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID8gdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0udG9TdHJpbmcoKSA6IFwiXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgRGF0ZVRpbWVFZGl0IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImRhdGVUaW1lRWRpdFwiLCB0cnVlKTtcbiAgICB0aGlzLmhTY3JvbGxQb2xpY3kgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5oU2Nyb2xsUG9saWN5LCBbXCJhdXRvXCIsIFwib2ZmXCIsIFwib25cIl0pO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5waWNrZXIgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5waWNrZXIsIFtcImhvc3RcIiwgXCJub25lXCJdKTtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5ib3JkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tYiA9IG51bGw7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICAgIHRoaXMubWFyZ2luID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXShhdmFpbGFibGVTcGFjZSkge1xuICAgIGNvbnN0IHN0eWxlID0gKDAsIF9odG1sX3V0aWxzLnRvU3R5bGUpKHRoaXMsIFwiYm9yZGVyXCIsIFwiZm9udFwiLCBcIm1hcmdpblwiKTtcblxuICAgIGNvbnN0IGZpZWxkID0gdGhpc1tfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCk7XG5cbiAgICBjb25zdCBodG1sID0ge1xuICAgICAgbmFtZTogXCJpbnB1dFwiLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgZmllbGRJZDogZmllbGRbX3hmYV9vYmplY3QuJHVpZF0sXG4gICAgICAgIGRhdGFJZDogZmllbGRbX3hmYV9vYmplY3QuJGRhdGFdICYmIGZpZWxkW194ZmFfb2JqZWN0LiRkYXRhXVtfeGZhX29iamVjdC4kdWlkXSB8fCBmaWVsZFtfeGZhX29iamVjdC4kdWlkXSxcbiAgICAgICAgY2xhc3M6IFtcInhmYVRleHRmaWVsZFwiXSxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwoZmllbGQpXG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7XG4gICAgICBuYW1lOiBcImxhYmVsXCIsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNsYXNzOiBbXCJ4ZmFMYWJlbFwiXVxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBbaHRtbF1cbiAgICB9KTtcbiAgfVxuXG59XG5cbmNsYXNzIERlY2ltYWwgZXh0ZW5kcyBfeGZhX29iamVjdC5Db250ZW50T2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImRlY2ltYWxcIik7XG4gICAgdGhpcy5mcmFjRGlnaXRzID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLmZyYWNEaWdpdHMsXG4gICAgICBkZWZhdWx0VmFsdWU6IDIsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLmxlYWREaWdpdHMgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMubGVhZERpZ2l0cyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogLTEsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRmaW5hbGl6ZV0oKSB7XG4gICAgY29uc3QgbnVtYmVyID0gcGFyc2VGbG9hdCh0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XS50cmltKCkpO1xuICAgIHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID0gaXNOYU4obnVtYmVyKSA/IG51bGwgOiBudW1iZXI7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHtcbiAgICByZXR1cm4gdmFsdWVUb0h0bWwodGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gIT09IG51bGwgPyB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XS50b1N0cmluZygpIDogXCJcIik7XG4gIH1cblxufVxuXG5jbGFzcyBEZWZhdWx0VWkgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiZGVmYXVsdFVpXCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuZXh0cmFzID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIERlc2MgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiZGVzY1wiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmJvb2xlYW4gPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmRhdGUgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmRhdGVUaW1lID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5kZWNpbWFsID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5leERhdGEgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmZsb2F0ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5pbWFnZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuaW50ZWdlciA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMudGV4dCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMudGltZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgRGlnZXN0TWV0aG9kIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImRpZ2VzdE1ldGhvZFwiLCBbXCJcIiwgXCJTSEExXCIsIFwiU0hBMjU2XCIsIFwiU0hBNTEyXCIsIFwiUklQRU1EMTYwXCJdKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgfVxuXG59XG5cbmNsYXNzIERpZ2VzdE1ldGhvZHMgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiZGlnZXN0TWV0aG9kc1wiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMudHlwZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnR5cGUsIFtcIm9wdGlvbmFsXCIsIFwicmVxdWlyZWRcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmRpZ2VzdE1ldGhvZCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgRHJhdyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJkcmF3XCIsIHRydWUpO1xuICAgIHRoaXMuYW5jaG9yVHlwZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmFuY2hvclR5cGUsIFtcInRvcExlZnRcIiwgXCJib3R0b21DZW50ZXJcIiwgXCJib3R0b21MZWZ0XCIsIFwiYm90dG9tUmlnaHRcIiwgXCJtaWRkbGVDZW50ZXJcIiwgXCJtaWRkbGVMZWZ0XCIsIFwibWlkZGxlUmlnaHRcIiwgXCJ0b3BDZW50ZXJcIiwgXCJ0b3BSaWdodFwiXSk7XG4gICAgdGhpcy5jb2xTcGFuID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLmNvbFNwYW4sXG4gICAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgICB2YWxpZGF0ZTogbiA9PiBuID49IDEgfHwgbiA9PT0gLTFcbiAgICB9KTtcbiAgICB0aGlzLmggPSBhdHRyaWJ1dGVzLmggPyAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLmgpIDogXCJcIjtcbiAgICB0aGlzLmhBbGlnbiA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmhBbGlnbiwgW1wibGVmdFwiLCBcImNlbnRlclwiLCBcImp1c3RpZnlcIiwgXCJqdXN0aWZ5QWxsXCIsIFwicmFkaXhcIiwgXCJyaWdodFwiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLmxvY2FsZSA9IGF0dHJpYnV0ZXMubG9jYWxlIHx8IFwiXCI7XG4gICAgdGhpcy5tYXhIID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy5tYXhILCBcIjBwdFwiKTtcbiAgICB0aGlzLm1heFcgPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLm1heFcsIFwiMHB0XCIpO1xuICAgIHRoaXMubWluSCA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMubWluSCwgXCIwcHRcIik7XG4gICAgdGhpcy5taW5XID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy5taW5XLCBcIjBwdFwiKTtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLnByZXNlbmNlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMucHJlc2VuY2UsIFtcInZpc2libGVcIiwgXCJoaWRkZW5cIiwgXCJpbmFjdGl2ZVwiLCBcImludmlzaWJsZVwiXSk7XG4gICAgdGhpcy5yZWxldmFudCA9ICgwLCBfdXRpbHMuZ2V0UmVsZXZhbnQpKGF0dHJpYnV0ZXMucmVsZXZhbnQpO1xuICAgIHRoaXMucm90YXRlID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLnJvdGF0ZSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggJSA5MCA9PT0gMFxuICAgIH0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLncgPSBhdHRyaWJ1dGVzLncgPyAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLncpIDogXCJcIjtcbiAgICB0aGlzLnggPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLngsIFwiMHB0XCIpO1xuICAgIHRoaXMueSA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMueSwgXCIwcHRcIik7XG4gICAgdGhpcy5hc3Npc3QgPSBudWxsO1xuICAgIHRoaXMuYm9yZGVyID0gbnVsbDtcbiAgICB0aGlzLmNhcHRpb24gPSBudWxsO1xuICAgIHRoaXMuZGVzYyA9IG51bGw7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICAgIHRoaXMuZm9udCA9IG51bGw7XG4gICAgdGhpcy5rZWVwID0gbnVsbDtcbiAgICB0aGlzLm1hcmdpbiA9IG51bGw7XG4gICAgdGhpcy5wYXJhID0gbnVsbDtcbiAgICB0aGlzLnRyYXZlcnNhbCA9IG51bGw7XG4gICAgdGhpcy51aSA9IG51bGw7XG4gICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRzZXRWYWx1ZV0odmFsdWUpIHtcbiAgICBfc2V0VmFsdWUodGhpcywgdmFsdWUpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgc2V0VGFiSW5kZXgodGhpcyk7XG5cbiAgICBpZiAodGhpcy5wcmVzZW5jZSA9PT0gXCJoaWRkZW5cIiB8fCB0aGlzLnByZXNlbmNlID09PSBcImluYWN0aXZlXCIpIHtcbiAgICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5FTVBUWTtcbiAgICB9XG5cbiAgICAoMCwgX2h0bWxfdXRpbHMuZml4RGltZW5zaW9ucykodGhpcyk7XG5cbiAgICB0aGlzW194ZmFfb2JqZWN0LiRwdXNoUGFyYV0oKTtcblxuICAgIGNvbnN0IHNhdmVkVyA9IHRoaXMudztcbiAgICBjb25zdCBzYXZlZEggPSB0aGlzLmg7XG4gICAgY29uc3Qge1xuICAgICAgdyxcbiAgICAgIGgsXG4gICAgICBpc0Jyb2tlblxuICAgIH0gPSAoMCwgX2h0bWxfdXRpbHMubGF5b3V0Tm9kZSkodGhpcywgYXZhaWxhYmxlU3BhY2UpO1xuXG4gICAgaWYgKHcgJiYgdGhpcy53ID09PSBcIlwiKSB7XG4gICAgICBpZiAoaXNCcm9rZW4gJiYgdGhpc1tfeGZhX29iamVjdC4kZ2V0U3ViZm9ybVBhcmVudF0oKVtfeGZhX29iamVjdC4kaXNUaGVyZU1vcmVXaWR0aF0oKSkge1xuICAgICAgICB0aGlzW194ZmFfb2JqZWN0LiRwb3BQYXJhXSgpO1xuXG4gICAgICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5GQUlMVVJFO1xuICAgICAgfVxuXG4gICAgICB0aGlzLncgPSB3O1xuICAgIH1cblxuICAgIGlmIChoICYmIHRoaXMuaCA9PT0gXCJcIikge1xuICAgICAgdGhpcy5oID0gaDtcbiAgICB9XG5cbiAgICBzZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtcblxuICAgIGlmICghKDAsIF9sYXlvdXQuY2hlY2tEaW1lbnNpb25zKSh0aGlzLCBhdmFpbGFibGVTcGFjZSkpIHtcbiAgICAgIHRoaXMudyA9IHNhdmVkVztcbiAgICAgIHRoaXMuaCA9IHNhdmVkSDtcblxuICAgICAgdGhpc1tfeGZhX29iamVjdC4kcG9wUGFyYV0oKTtcblxuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LkZBSUxVUkU7XG4gICAgfVxuXG4gICAgdW5zZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtcbiAgICBjb25zdCBzdHlsZSA9ICgwLCBfaHRtbF91dGlscy50b1N0eWxlKSh0aGlzLCBcImZvbnRcIiwgXCJoQWxpZ25cIiwgXCJkaW1lbnNpb25zXCIsIFwicG9zaXRpb25cIiwgXCJwcmVzZW5jZVwiLCBcInJvdGF0ZVwiLCBcImFuY2hvclR5cGVcIiwgXCJib3JkZXJcIiwgXCJtYXJnaW5cIik7XG4gICAgKDAsIF9odG1sX3V0aWxzLnNldE1pbk1heERpbWVuc2lvbnMpKHRoaXMsIHN0eWxlKTtcblxuICAgIGlmIChzdHlsZS5tYXJnaW4pIHtcbiAgICAgIHN0eWxlLnBhZGRpbmcgPSBzdHlsZS5tYXJnaW47XG4gICAgICBkZWxldGUgc3R5bGUubWFyZ2luO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBbXCJ4ZmFEcmF3XCJdO1xuXG4gICAgaWYgKHRoaXMuZm9udCkge1xuICAgICAgY2xhc3NOYW1lcy5wdXNoKFwieGZhRm9udFwiKTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9odG1sX3V0aWxzLmlzUHJpbnRPbmx5KSh0aGlzKSkge1xuICAgICAgY2xhc3NOYW1lcy5wdXNoKFwieGZhUHJpbnRPbmx5XCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICBzdHlsZSxcbiAgICAgIGlkOiB0aGlzW194ZmFfb2JqZWN0LiR1aWRdLFxuICAgICAgY2xhc3M6IGNsYXNzTmFtZXNcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMubmFtZSkge1xuICAgICAgYXR0cmlidXRlcy54ZmFOYW1lID0gdGhpcy5uYW1lO1xuICAgIH1cblxuICAgIGNvbnN0IGh0bWwgPSB7XG4gICAgICBuYW1lOiBcImRpdlwiLFxuICAgICAgYXR0cmlidXRlcyxcbiAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH07XG4gICAgYXBwbHlBc3Npc3QodGhpcywgYXR0cmlidXRlcyk7XG4gICAgY29uc3QgYmJveCA9ICgwLCBfaHRtbF91dGlscy5jb21wdXRlQmJveCkodGhpcywgaHRtbCwgYXZhaWxhYmxlU3BhY2UpO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWVbX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpLmh0bWwgOiBudWxsO1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICB0aGlzLncgPSBzYXZlZFc7XG4gICAgICB0aGlzLmggPSBzYXZlZEg7XG5cbiAgICAgIHRoaXNbX3hmYV9vYmplY3QuJHBvcFBhcmFdKCk7XG5cbiAgICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLCBfaHRtbF91dGlscy5jcmVhdGVXcmFwcGVyKSh0aGlzLCBodG1sKSwgYmJveCk7XG4gICAgfVxuXG4gICAgaHRtbC5jaGlsZHJlbi5wdXNoKHZhbHVlKTtcbiAgICAoMCwgX2h0bWxfdXRpbHMuc2V0UGFyYSkodGhpcywgc3R5bGUsIHZhbHVlKTtcbiAgICB0aGlzLncgPSBzYXZlZFc7XG4gICAgdGhpcy5oID0gc2F2ZWRIO1xuXG4gICAgdGhpc1tfeGZhX29iamVjdC4kcG9wUGFyYV0oKTtcblxuICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLCBfaHRtbF91dGlscy5jcmVhdGVXcmFwcGVyKSh0aGlzLCBodG1sKSwgYmJveCk7XG4gIH1cblxufVxuXG5jbGFzcyBFZGdlIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImVkZ2VcIiwgdHJ1ZSk7XG4gICAgdGhpcy5jYXAgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5jYXAsIFtcInNxdWFyZVwiLCBcImJ1dHRcIiwgXCJyb3VuZFwiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnByZXNlbmNlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMucHJlc2VuY2UsIFtcInZpc2libGVcIiwgXCJoaWRkZW5cIiwgXCJpbmFjdGl2ZVwiLCBcImludmlzaWJsZVwiXSk7XG4gICAgdGhpcy5zdHJva2UgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5zdHJva2UsIFtcInNvbGlkXCIsIFwiZGFzaERvdFwiLCBcImRhc2hEb3REb3RcIiwgXCJkYXNoZWRcIiwgXCJkb3R0ZWRcIiwgXCJlbWJvc3NlZFwiLCBcImV0Y2hlZFwiLCBcImxvd2VyZWRcIiwgXCJyYWlzZWRcIl0pO1xuICAgIHRoaXMudGhpY2tuZXNzID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy50aGlja25lc3MsIFwiMC41cHRcIik7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuY29sb3IgPSBudWxsO1xuICAgIHRoaXMuZXh0cmFzID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9TdHlsZV0oKSB7XG4gICAgY29uc3Qgc3R5bGUgPSAoMCwgX2h0bWxfdXRpbHMudG9TdHlsZSkodGhpcywgXCJ2aXNpYmlsaXR5XCIpO1xuICAgIE9iamVjdC5hc3NpZ24oc3R5bGUsIHtcbiAgICAgIGxpbmVjYXA6IHRoaXMuY2FwLFxuICAgICAgd2lkdGg6ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMudGhpY2tuZXNzKSxcbiAgICAgIGNvbG9yOiB0aGlzLmNvbG9yID8gdGhpcy5jb2xvcltfeGZhX29iamVjdC4kdG9TdHlsZV0oKSA6IFwiIzAwMDAwMFwiLFxuICAgICAgc3R5bGU6IFwiXCJcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnByZXNlbmNlICE9PSBcInZpc2libGVcIikge1xuICAgICAgc3R5bGUuc3R5bGUgPSBcIm5vbmVcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpdGNoICh0aGlzLnN0cm9rZSkge1xuICAgICAgICBjYXNlIFwic29saWRcIjpcbiAgICAgICAgICBzdHlsZS5zdHlsZSA9IFwic29saWRcIjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiZGFzaERvdFwiOlxuICAgICAgICAgIHN0eWxlLnN0eWxlID0gXCJkYXNoZWRcIjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiZGFzaERvdERvdFwiOlxuICAgICAgICAgIHN0eWxlLnN0eWxlID0gXCJkYXNoZWRcIjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiZGFzaGVkXCI6XG4gICAgICAgICAgc3R5bGUuc3R5bGUgPSBcImRhc2hlZFwiO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJkb3R0ZWRcIjpcbiAgICAgICAgICBzdHlsZS5zdHlsZSA9IFwiZG90dGVkXCI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImVtYm9zc2VkXCI6XG4gICAgICAgICAgc3R5bGUuc3R5bGUgPSBcInJpZGdlXCI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImV0Y2hlZFwiOlxuICAgICAgICAgIHN0eWxlLnN0eWxlID0gXCJncm9vdmVcIjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwibG93ZXJlZFwiOlxuICAgICAgICAgIHN0eWxlLnN0eWxlID0gXCJpbnNldFwiO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJyYWlzZWRcIjpcbiAgICAgICAgICBzdHlsZS5zdHlsZSA9IFwib3V0c2V0XCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG5cbn1cblxuY2xhc3MgRW5jb2RpbmcgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb25PYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiZW5jb2RpbmdcIiwgW1wiYWRiZS54NTA5LnJzYV9zaGExXCIsIFwiYWRiZS5wa2NzNy5kZXRhY2hlZFwiLCBcImFkYmUucGtjczcuc2hhMVwiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxufVxuXG5jbGFzcyBFbmNvZGluZ3MgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiZW5jb2RpbmdzXCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy50eXBlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMudHlwZSwgW1wib3B0aW9uYWxcIiwgXCJyZXF1aXJlZFwiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuZW5jb2RpbmcgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG59XG5cbmNsYXNzIEVuY3J5cHQgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiZW5jcnlwdFwiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmNlcnRpZmljYXRlID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIEVuY3J5cHREYXRhIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImVuY3J5cHREYXRhXCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5vcGVyYXRpb24gPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5vcGVyYXRpb24sIFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCJdKTtcbiAgICB0aGlzLnRhcmdldCA9IGF0dHJpYnV0ZXMudGFyZ2V0IHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuZmlsdGVyID0gbnVsbDtcbiAgICB0aGlzLm1hbmlmZXN0ID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIEVuY3J5cHRpb24gZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiZW5jcnlwdGlvblwiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMudHlwZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnR5cGUsIFtcIm9wdGlvbmFsXCIsIFwicmVxdWlyZWRcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmNlcnRpZmljYXRlID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gIH1cblxufVxuXG5jbGFzcyBFbmNyeXB0aW9uTWV0aG9kIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImVuY3J5cHRpb25NZXRob2RcIiwgW1wiXCIsIFwiQUVTMjU2LUNCQ1wiLCBcIlRSSVBMRURFUy1DQkNcIiwgXCJBRVMxMjgtQ0JDXCIsIFwiQUVTMTkyLUNCQ1wiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxufVxuXG5jbGFzcyBFbmNyeXB0aW9uTWV0aG9kcyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJlbmNyeXB0aW9uTWV0aG9kc1wiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMudHlwZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnR5cGUsIFtcIm9wdGlvbmFsXCIsIFwicmVxdWlyZWRcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmVuY3J5cHRpb25NZXRob2QgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG59XG5cbmNsYXNzIEV2ZW50IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImV2ZW50XCIsIHRydWUpO1xuICAgIHRoaXMuYWN0aXZpdHkgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5hY3Rpdml0eSwgW1wiY2xpY2tcIiwgXCJjaGFuZ2VcIiwgXCJkb2NDbG9zZVwiLCBcImRvY1JlYWR5XCIsIFwiZW50ZXJcIiwgXCJleGl0XCIsIFwiZnVsbFwiLCBcImluZGV4Q2hhbmdlXCIsIFwiaW5pdGlhbGl6ZVwiLCBcIm1vdXNlRG93blwiLCBcIm1vdXNlRW50ZXJcIiwgXCJtb3VzZUV4aXRcIiwgXCJtb3VzZVVwXCIsIFwicG9zdEV4ZWN1dGVcIiwgXCJwb3N0T3BlblwiLCBcInBvc3RQcmludFwiLCBcInBvc3RTYXZlXCIsIFwicG9zdFNpZ25cIiwgXCJwb3N0U3VibWl0XCIsIFwicHJlRXhlY3V0ZVwiLCBcInByZU9wZW5cIiwgXCJwcmVQcmludFwiLCBcInByZVNhdmVcIiwgXCJwcmVTaWduXCIsIFwicHJlU3VibWl0XCIsIFwicmVhZHlcIiwgXCJ2YWxpZGF0aW9uU3RhdGVcIl0pO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5saXN0ZW4gPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5saXN0ZW4sIFtcInJlZk9ubHlcIiwgXCJyZWZBbmREZXNjZW5kZW50c1wiXSk7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy5yZWYgPSBhdHRyaWJ1dGVzLnJlZiB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5lbmNyeXB0RGF0YSA9IG51bGw7XG4gICAgdGhpcy5leGVjdXRlID0gbnVsbDtcbiAgICB0aGlzLnNjcmlwdCA9IG51bGw7XG4gICAgdGhpcy5zaWduRGF0YSA9IG51bGw7XG4gICAgdGhpcy5zdWJtaXQgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgRXhEYXRhIGV4dGVuZHMgX3hmYV9vYmplY3QuQ29udGVudE9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJleERhdGFcIik7XG4gICAgdGhpcy5jb250ZW50VHlwZSA9IGF0dHJpYnV0ZXMuY29udGVudFR5cGUgfHwgXCJcIjtcbiAgICB0aGlzLmhyZWYgPSBhdHRyaWJ1dGVzLmhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMubWF4TGVuZ3RoID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLm1heExlbmd0aCxcbiAgICAgIGRlZmF1bHRWYWx1ZTogLTEsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID49IC0xXG4gICAgfSk7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy5yaWQgPSBhdHRyaWJ1dGVzLnJpZCB8fCBcIlwiO1xuICAgIHRoaXMudHJhbnNmZXJFbmNvZGluZyA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnRyYW5zZmVyRW5jb2RpbmcsIFtcIm5vbmVcIiwgXCJiYXNlNjRcIiwgXCJwYWNrYWdlXCJdKTtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGlzQ0RBVEFYbWxdKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnRUeXBlID09PSBcInRleHQvaHRtbFwiO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRvbkNoaWxkXShjaGlsZCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnRUeXBlID09PSBcInRleHQvaHRtbFwiICYmIGNoaWxkW194ZmFfb2JqZWN0LiRuYW1lc3BhY2VJZF0gPT09IF9uYW1lc3BhY2VzLk5hbWVzcGFjZUlkcy54aHRtbC5pZCkge1xuICAgICAgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gPSBjaGlsZDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbnRlbnRUeXBlID09PSBcInRleHQveG1sXCIpIHtcbiAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID0gY2hpbGQ7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHtcbiAgICBpZiAodGhpcy5jb250ZW50VHlwZSAhPT0gXCJ0ZXh0L2h0bWxcIiB8fCAhdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0pIHtcbiAgICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5FTVBUWTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1tfeGZhX29iamVjdC4kY29udGVudF1bX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpO1xuICB9XG5cbn1cblxuY2xhc3MgRXhPYmplY3QgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiZXhPYmplY3RcIiwgdHJ1ZSk7XG4gICAgdGhpcy5hcmNoaXZlID0gYXR0cmlidXRlcy5hcmNoaXZlIHx8IFwiXCI7XG4gICAgdGhpcy5jbGFzc0lkID0gYXR0cmlidXRlcy5jbGFzc0lkIHx8IFwiXCI7XG4gICAgdGhpcy5jb2RlQmFzZSA9IGF0dHJpYnV0ZXMuY29kZUJhc2UgfHwgXCJcIjtcbiAgICB0aGlzLmNvZGVUeXBlID0gYXR0cmlidXRlcy5jb2RlVHlwZSB8fCBcIlwiO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuZXh0cmFzID0gbnVsbDtcbiAgICB0aGlzLmJvb2xlYW4gPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmRhdGUgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmRhdGVUaW1lID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5kZWNpbWFsID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5leERhdGEgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmV4T2JqZWN0ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5mbG9hdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuaW1hZ2UgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmludGVnZXIgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnRleHQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnRpbWUgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG59XG5cbmNsYXNzIEV4Y2xHcm91cCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJleGNsR3JvdXBcIiwgdHJ1ZSk7XG4gICAgdGhpcy5hY2Nlc3MgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5hY2Nlc3MsIFtcIm9wZW5cIiwgXCJub25JbnRlcmFjdGl2ZVwiLCBcInByb3RlY3RlZFwiLCBcInJlYWRPbmx5XCJdKTtcbiAgICB0aGlzLmFjY2Vzc0tleSA9IGF0dHJpYnV0ZXMuYWNjZXNzS2V5IHx8IFwiXCI7XG4gICAgdGhpcy5hbmNob3JUeXBlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMuYW5jaG9yVHlwZSwgW1widG9wTGVmdFwiLCBcImJvdHRvbUNlbnRlclwiLCBcImJvdHRvbUxlZnRcIiwgXCJib3R0b21SaWdodFwiLCBcIm1pZGRsZUNlbnRlclwiLCBcIm1pZGRsZUxlZnRcIiwgXCJtaWRkbGVSaWdodFwiLCBcInRvcENlbnRlclwiLCBcInRvcFJpZ2h0XCJdKTtcbiAgICB0aGlzLmNvbFNwYW4gPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuY29sU3BhbixcbiAgICAgIGRlZmF1bHRWYWx1ZTogMSxcbiAgICAgIHZhbGlkYXRlOiBuID0+IG4gPj0gMSB8fCBuID09PSAtMVxuICAgIH0pO1xuICAgIHRoaXMuaCA9IGF0dHJpYnV0ZXMuaCA/ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMuaCkgOiBcIlwiO1xuICAgIHRoaXMuaEFsaWduID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMuaEFsaWduLCBbXCJsZWZ0XCIsIFwiY2VudGVyXCIsIFwianVzdGlmeVwiLCBcImp1c3RpZnlBbGxcIiwgXCJyYWRpeFwiLCBcInJpZ2h0XCJdKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMubGF5b3V0ID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMubGF5b3V0LCBbXCJwb3NpdGlvblwiLCBcImxyLXRiXCIsIFwicmwtcm93XCIsIFwicmwtdGJcIiwgXCJyb3dcIiwgXCJ0YWJsZVwiLCBcInRiXCJdKTtcbiAgICB0aGlzLm1heEggPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLm1heEgsIFwiMHB0XCIpO1xuICAgIHRoaXMubWF4VyA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMubWF4VywgXCIwcHRcIik7XG4gICAgdGhpcy5taW5IID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy5taW5ILCBcIjBwdFwiKTtcbiAgICB0aGlzLm1pblcgPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLm1pblcsIFwiMHB0XCIpO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCBcIlwiO1xuICAgIHRoaXMucHJlc2VuY2UgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5wcmVzZW5jZSwgW1widmlzaWJsZVwiLCBcImhpZGRlblwiLCBcImluYWN0aXZlXCIsIFwiaW52aXNpYmxlXCJdKTtcbiAgICB0aGlzLnJlbGV2YW50ID0gKDAsIF91dGlscy5nZXRSZWxldmFudCkoYXR0cmlidXRlcy5yZWxldmFudCk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMudyA9IGF0dHJpYnV0ZXMudyA/ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMudykgOiBcIlwiO1xuICAgIHRoaXMueCA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMueCwgXCIwcHRcIik7XG4gICAgdGhpcy55ID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy55LCBcIjBwdFwiKTtcbiAgICB0aGlzLmFzc2lzdCA9IG51bGw7XG4gICAgdGhpcy5iaW5kID0gbnVsbDtcbiAgICB0aGlzLmJvcmRlciA9IG51bGw7XG4gICAgdGhpcy5jYWxjdWxhdGUgPSBudWxsO1xuICAgIHRoaXMuY2FwdGlvbiA9IG51bGw7XG4gICAgdGhpcy5kZXNjID0gbnVsbDtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5tYXJnaW4gPSBudWxsO1xuICAgIHRoaXMucGFyYSA9IG51bGw7XG4gICAgdGhpcy50cmF2ZXJzYWwgPSBudWxsO1xuICAgIHRoaXMudmFsaWRhdGUgPSBudWxsO1xuICAgIHRoaXMuY29ubmVjdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZXZlbnQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmZpZWxkID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRpc0JpbmRhYmxlXSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kaGFzU2V0dGFibGVWYWx1ZV0oKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHNldFZhbHVlXSh2YWx1ZSkge1xuICAgIGZvciAoY29uc3QgZmllbGQgb2YgdGhpcy5maWVsZC5jaGlsZHJlbikge1xuICAgICAgaWYgKCFmaWVsZC52YWx1ZSkge1xuICAgICAgICBjb25zdCBub2RlVmFsdWUgPSBuZXcgVmFsdWUoe30pO1xuXG4gICAgICAgIGZpZWxkW194ZmFfb2JqZWN0LiRhcHBlbmRDaGlsZF0obm9kZVZhbHVlKTtcblxuICAgICAgICBmaWVsZC52YWx1ZSA9IG5vZGVWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgZmllbGQudmFsdWVbX3hmYV9vYmplY3QuJHNldFZhbHVlXSh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRpc1RoZXJlTW9yZVdpZHRoXSgpIHtcbiAgICByZXR1cm4gdGhpcy5sYXlvdXQuZW5kc1dpdGgoXCItdGJcIikgJiYgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmF0dGVtcHQgPT09IDAgJiYgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLm51bWJlckluTGluZSA+IDAgfHwgdGhpc1tfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpW194ZmFfb2JqZWN0LiRpc1RoZXJlTW9yZVdpZHRoXSgpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRpc1NwbGl0dGFibGVdKCkge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXNbX3hmYV9vYmplY3QuJGdldFN1YmZvcm1QYXJlbnRdKCk7XG5cbiAgICBpZiAoIXBhcmVudFtfeGZhX29iamVjdC4kaXNTcGxpdHRhYmxlXSgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5faXNTcGxpdHRhYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uX2lzU3BsaXR0YWJsZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sYXlvdXQgPT09IFwicG9zaXRpb25cIiB8fCB0aGlzLmxheW91dC5pbmNsdWRlcyhcInJvd1wiKSkge1xuICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLl9pc1NwbGl0dGFibGUgPSBmYWxzZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAocGFyZW50LmxheW91dCAmJiBwYXJlbnQubGF5b3V0LmVuZHNXaXRoKFwiLXRiXCIpICYmIHBhcmVudFtfeGZhX29iamVjdC4kZXh0cmFdLm51bWJlckluTGluZSAhPT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5faXNTcGxpdHRhYmxlID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kZmx1c2hIVE1MXSgpIHtcbiAgICByZXR1cm4gKDAsIF9sYXlvdXQuZmx1c2hIVE1MKSh0aGlzKTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kYWRkSFRNTF0oaHRtbCwgYmJveCkge1xuICAgICgwLCBfbGF5b3V0LmFkZEhUTUwpKHRoaXMsIGh0bWwsIGJib3gpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRnZXRBdmFpbGFibGVTcGFjZV0oKSB7XG4gICAgcmV0dXJuICgwLCBfbGF5b3V0LmdldEF2YWlsYWJsZVNwYWNlKSh0aGlzKTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXShhdmFpbGFibGVTcGFjZSkge1xuICAgIHNldFRhYkluZGV4KHRoaXMpO1xuXG4gICAgaWYgKHRoaXMucHJlc2VuY2UgPT09IFwiaGlkZGVuXCIgfHwgdGhpcy5wcmVzZW5jZSA9PT0gXCJpbmFjdGl2ZVwiIHx8IHRoaXMuaCA9PT0gMCB8fCB0aGlzLncgPT09IDApIHtcbiAgICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5FTVBUWTtcbiAgICB9XG5cbiAgICAoMCwgX2h0bWxfdXRpbHMuZml4RGltZW5zaW9ucykodGhpcyk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBbXTtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgICAgaWQ6IHRoaXNbX3hmYV9vYmplY3QuJHVpZF0sXG4gICAgICBjbGFzczogW11cbiAgICB9O1xuICAgICgwLCBfaHRtbF91dGlscy5zZXRBY2Nlc3MpKHRoaXMsIGF0dHJpYnV0ZXMuY2xhc3MpO1xuXG4gICAgaWYgKCF0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0pIHtcbiAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0sIHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgYXR0cmlidXRlcyxcbiAgICAgIGF0dGVtcHQ6IDAsXG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgbnVtYmVySW5MaW5lOiAwLFxuICAgICAgYXZhaWxhYmxlU3BhY2U6IHtcbiAgICAgICAgd2lkdGg6IE1hdGgubWluKHRoaXMudyB8fCBJbmZpbml0eSwgYXZhaWxhYmxlU3BhY2Uud2lkdGgpLFxuICAgICAgICBoZWlnaHQ6IE1hdGgubWluKHRoaXMuaCB8fCBJbmZpbml0eSwgYXZhaWxhYmxlU3BhY2UuaGVpZ2h0KVxuICAgICAgfSxcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgcHJldkhlaWdodDogMCxcbiAgICAgIGN1cnJlbnRXaWR0aDogMFxuICAgIH0pO1xuXG4gICAgY29uc3QgaXNTcGxpdHRhYmxlID0gdGhpc1tfeGZhX29iamVjdC4kaXNTcGxpdHRhYmxlXSgpO1xuXG4gICAgaWYgKCFpc1NwbGl0dGFibGUpIHtcbiAgICAgIHNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO1xuICAgIH1cblxuICAgIGlmICghKDAsIF9sYXlvdXQuY2hlY2tEaW1lbnNpb25zKSh0aGlzLCBhdmFpbGFibGVTcGFjZSkpIHtcbiAgICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5GQUlMVVJFO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlciA9IG5ldyBTZXQoW1wiZmllbGRcIl0pO1xuXG4gICAgaWYgKHRoaXMubGF5b3V0LmluY2x1ZGVzKFwicm93XCIpKSB7XG4gICAgICBjb25zdCBjb2x1bW5XaWR0aHMgPSB0aGlzW194ZmFfb2JqZWN0LiRnZXRTdWJmb3JtUGFyZW50XSgpLmNvbHVtbldpZHRocztcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sdW1uV2lkdGhzKSAmJiBjb2x1bW5XaWR0aHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uY29sdW1uV2lkdGhzID0gY29sdW1uV2lkdGhzO1xuICAgICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uY3VycmVudENvbHVtbiA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3R5bGUgPSAoMCwgX2h0bWxfdXRpbHMudG9TdHlsZSkodGhpcywgXCJhbmNob3JUeXBlXCIsIFwiZGltZW5zaW9uc1wiLCBcInBvc2l0aW9uXCIsIFwicHJlc2VuY2VcIiwgXCJib3JkZXJcIiwgXCJtYXJnaW5cIiwgXCJoQWxpZ25cIik7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IFtcInhmYUV4Y2xncm91cFwiXTtcbiAgICBjb25zdCBjbCA9ICgwLCBfaHRtbF91dGlscy5sYXlvdXRDbGFzcykodGhpcyk7XG5cbiAgICBpZiAoY2wpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaChjbCk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaHRtbF91dGlscy5pc1ByaW50T25seSkodGhpcykpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaChcInhmYVByaW50T25seVwiKTtcbiAgICB9XG5cbiAgICBhdHRyaWJ1dGVzLnN0eWxlID0gc3R5bGU7XG4gICAgYXR0cmlidXRlcy5jbGFzcyA9IGNsYXNzTmFtZXM7XG5cbiAgICBpZiAodGhpcy5uYW1lKSB7XG4gICAgICBhdHRyaWJ1dGVzLnhmYU5hbWUgPSB0aGlzLm5hbWU7XG4gICAgfVxuXG4gICAgdGhpc1tfeGZhX29iamVjdC4kcHVzaFBhcmFdKCk7XG5cbiAgICBjb25zdCBpc0xyVGIgPSB0aGlzLmxheW91dCA9PT0gXCJsci10YlwiIHx8IHRoaXMubGF5b3V0ID09PSBcInJsLXRiXCI7XG4gICAgY29uc3QgbWF4UnVuID0gaXNMclRiID8gTUFYX0FUVEVNUFRTX0ZPUl9MUlRCX0xBWU9VVCA6IDE7XG5cbiAgICBmb3IgKDsgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmF0dGVtcHQgPCBtYXhSdW47IHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5hdHRlbXB0KyspIHtcbiAgICAgIGlmIChpc0xyVGIgJiYgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmF0dGVtcHQgPT09IE1BWF9BVFRFTVBUU19GT1JfTFJUQl9MQVlPVVQgLSAxKSB7XG4gICAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5udW1iZXJJbkxpbmUgPSAwO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzW194ZmFfb2JqZWN0LiRjaGlsZHJlblRvSFRNTF0oe1xuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIGluY2x1ZGU6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQuaXNCcmVhaygpKSB7XG4gICAgICAgIHRoaXNbX3hmYV9vYmplY3QuJHBvcFBhcmFdKCk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTHJUYiAmJiB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uYXR0ZW1wdCA9PT0gMCAmJiB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0ubnVtYmVySW5MaW5lID09PSAwICYmICF0aGlzW194ZmFfb2JqZWN0LiRnZXRUZW1wbGF0ZVJvb3RdKClbX3hmYV9vYmplY3QuJGV4dHJhXS5ub0xheW91dEZhaWx1cmUpIHtcbiAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmF0dGVtcHQgPSBtYXhSdW47XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNbX3hmYV9vYmplY3QuJHBvcFBhcmFdKCk7XG5cbiAgICBpZiAoIWlzU3BsaXR0YWJsZSkge1xuICAgICAgdW5zZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmF0dGVtcHQgPT09IG1heFJ1bikge1xuICAgICAgaWYgKCFpc1NwbGl0dGFibGUpIHtcbiAgICAgICAgZGVsZXRlIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LkZBSUxVUkU7XG4gICAgfVxuXG4gICAgbGV0IG1hcmdpbkggPSAwO1xuICAgIGxldCBtYXJnaW5WID0gMDtcblxuICAgIGlmICh0aGlzLm1hcmdpbikge1xuICAgICAgbWFyZ2luSCA9IHRoaXMubWFyZ2luLmxlZnRJbnNldCArIHRoaXMubWFyZ2luLnJpZ2h0SW5zZXQ7XG4gICAgICBtYXJnaW5WID0gdGhpcy5tYXJnaW4udG9wSW5zZXQgKyB0aGlzLm1hcmdpbi5ib3R0b21JbnNldDtcbiAgICB9XG5cbiAgICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS53aWR0aCArIG1hcmdpbkgsIHRoaXMudyB8fCAwKTtcbiAgICBjb25zdCBoZWlnaHQgPSBNYXRoLm1heCh0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uaGVpZ2h0ICsgbWFyZ2luViwgdGhpcy5oIHx8IDApO1xuICAgIGNvbnN0IGJib3ggPSBbdGhpcy54LCB0aGlzLnksIHdpZHRoLCBoZWlnaHRdO1xuXG4gICAgaWYgKHRoaXMudyA9PT0gXCJcIikge1xuICAgICAgc3R5bGUud2lkdGggPSAoMCwgX2h0bWxfdXRpbHMubWVhc3VyZVRvU3RyaW5nKSh3aWR0aCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaCA9PT0gXCJcIikge1xuICAgICAgc3R5bGUuaGVpZ2h0ID0gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykoaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBjb25zdCBodG1sID0ge1xuICAgICAgbmFtZTogXCJkaXZcIixcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICBjaGlsZHJlblxuICAgIH07XG4gICAgYXBwbHlBc3Npc3QodGhpcywgYXR0cmlidXRlcyk7XG4gICAgZGVsZXRlIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXTtcbiAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2VzcygoMCwgX2h0bWxfdXRpbHMuY3JlYXRlV3JhcHBlcikodGhpcywgaHRtbCksIGJib3gpO1xuICB9XG5cbn1cblxuY2xhc3MgRXhlY3V0ZSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJleGVjdXRlXCIpO1xuICAgIHRoaXMuY29ubmVjdGlvbiA9IGF0dHJpYnV0ZXMuY29ubmVjdGlvbiB8fCBcIlwiO1xuICAgIHRoaXMuZXhlY3V0ZVR5cGUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5leGVjdXRlVHlwZSwgW1wiaW1wb3J0XCIsIFwicmVtZXJnZVwiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnJ1bkF0ID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMucnVuQXQsIFtcImNsaWVudFwiLCBcImJvdGhcIiwgXCJzZXJ2ZXJcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgfVxuXG59XG5cbmNsYXNzIEV4dHJhcyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJleHRyYXNcIiwgdHJ1ZSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5ib29sZWFuID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5kYXRlID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5kYXRlVGltZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZGVjaW1hbCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZXhEYXRhID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5leHRyYXMgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmZsb2F0ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5pbWFnZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuaW50ZWdlciA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMudGV4dCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMudGltZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgRmllbGQgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiZmllbGRcIiwgdHJ1ZSk7XG4gICAgdGhpcy5hY2Nlc3MgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5hY2Nlc3MsIFtcIm9wZW5cIiwgXCJub25JbnRlcmFjdGl2ZVwiLCBcInByb3RlY3RlZFwiLCBcInJlYWRPbmx5XCJdKTtcbiAgICB0aGlzLmFjY2Vzc0tleSA9IGF0dHJpYnV0ZXMuYWNjZXNzS2V5IHx8IFwiXCI7XG4gICAgdGhpcy5hbmNob3JUeXBlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMuYW5jaG9yVHlwZSwgW1widG9wTGVmdFwiLCBcImJvdHRvbUNlbnRlclwiLCBcImJvdHRvbUxlZnRcIiwgXCJib3R0b21SaWdodFwiLCBcIm1pZGRsZUNlbnRlclwiLCBcIm1pZGRsZUxlZnRcIiwgXCJtaWRkbGVSaWdodFwiLCBcInRvcENlbnRlclwiLCBcInRvcFJpZ2h0XCJdKTtcbiAgICB0aGlzLmNvbFNwYW4gPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuY29sU3BhbixcbiAgICAgIGRlZmF1bHRWYWx1ZTogMSxcbiAgICAgIHZhbGlkYXRlOiBuID0+IG4gPj0gMSB8fCBuID09PSAtMVxuICAgIH0pO1xuICAgIHRoaXMuaCA9IGF0dHJpYnV0ZXMuaCA/ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMuaCkgOiBcIlwiO1xuICAgIHRoaXMuaEFsaWduID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMuaEFsaWduLCBbXCJsZWZ0XCIsIFwiY2VudGVyXCIsIFwianVzdGlmeVwiLCBcImp1c3RpZnlBbGxcIiwgXCJyYWRpeFwiLCBcInJpZ2h0XCJdKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMubG9jYWxlID0gYXR0cmlidXRlcy5sb2NhbGUgfHwgXCJcIjtcbiAgICB0aGlzLm1heEggPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLm1heEgsIFwiMHB0XCIpO1xuICAgIHRoaXMubWF4VyA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMubWF4VywgXCIwcHRcIik7XG4gICAgdGhpcy5taW5IID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy5taW5ILCBcIjBwdFwiKTtcbiAgICB0aGlzLm1pblcgPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLm1pblcsIFwiMHB0XCIpO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCBcIlwiO1xuICAgIHRoaXMucHJlc2VuY2UgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5wcmVzZW5jZSwgW1widmlzaWJsZVwiLCBcImhpZGRlblwiLCBcImluYWN0aXZlXCIsIFwiaW52aXNpYmxlXCJdKTtcbiAgICB0aGlzLnJlbGV2YW50ID0gKDAsIF91dGlscy5nZXRSZWxldmFudCkoYXR0cmlidXRlcy5yZWxldmFudCk7XG4gICAgdGhpcy5yb3RhdGUgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMucm90YXRlLFxuICAgICAgZGVmYXVsdFZhbHVlOiAwLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCAlIDkwID09PSAwXG4gICAgfSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMudyA9IGF0dHJpYnV0ZXMudyA/ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMudykgOiBcIlwiO1xuICAgIHRoaXMueCA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMueCwgXCIwcHRcIik7XG4gICAgdGhpcy55ID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy55LCBcIjBwdFwiKTtcbiAgICB0aGlzLmFzc2lzdCA9IG51bGw7XG4gICAgdGhpcy5iaW5kID0gbnVsbDtcbiAgICB0aGlzLmJvcmRlciA9IG51bGw7XG4gICAgdGhpcy5jYWxjdWxhdGUgPSBudWxsO1xuICAgIHRoaXMuY2FwdGlvbiA9IG51bGw7XG4gICAgdGhpcy5kZXNjID0gbnVsbDtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5mb250ID0gbnVsbDtcbiAgICB0aGlzLmZvcm1hdCA9IG51bGw7XG4gICAgdGhpcy5pdGVtcyA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgyKTtcbiAgICB0aGlzLmtlZXAgPSBudWxsO1xuICAgIHRoaXMubWFyZ2luID0gbnVsbDtcbiAgICB0aGlzLnBhcmEgPSBudWxsO1xuICAgIHRoaXMudHJhdmVyc2FsID0gbnVsbDtcbiAgICB0aGlzLnVpID0gbnVsbDtcbiAgICB0aGlzLnZhbGlkYXRlID0gbnVsbDtcbiAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLmJpbmRJdGVtcyA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuY29ubmVjdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZXZlbnQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnNldFByb3BlcnR5ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGlzQmluZGFibGVdKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRzZXRWYWx1ZV0odmFsdWUpIHtcbiAgICBfc2V0VmFsdWUodGhpcywgdmFsdWUpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgc2V0VGFiSW5kZXgodGhpcyk7XG5cbiAgICBpZiAoIXRoaXMudWkpIHtcbiAgICAgIHRoaXMudWkgPSBuZXcgVWkoe30pO1xuICAgICAgdGhpcy51aVtfeGZhX29iamVjdC4kZ2xvYmFsRGF0YV0gPSB0aGlzW194ZmFfb2JqZWN0LiRnbG9iYWxEYXRhXTtcblxuICAgICAgdGhpc1tfeGZhX29iamVjdC4kYXBwZW5kQ2hpbGRdKHRoaXMudWkpO1xuXG4gICAgICBsZXQgbm9kZTtcblxuICAgICAgc3dpdGNoICh0aGlzLml0ZW1zLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgbm9kZSA9IG5ldyBUZXh0RWRpdCh7fSk7XG4gICAgICAgICAgdGhpcy51aS50ZXh0RWRpdCA9IG5vZGU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG5vZGUgPSBuZXcgQ2hlY2tCdXR0b24oe30pO1xuICAgICAgICAgIHRoaXMudWkuY2hlY2tCdXR0b24gPSBub2RlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBub2RlID0gbmV3IENob2ljZUxpc3Qoe30pO1xuICAgICAgICAgIHRoaXMudWkuY2hvaWNlTGlzdCA9IG5vZGU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudWlbX3hmYV9vYmplY3QuJGFwcGVuZENoaWxkXShub2RlKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudWkgfHwgdGhpcy5wcmVzZW5jZSA9PT0gXCJoaWRkZW5cIiB8fCB0aGlzLnByZXNlbmNlID09PSBcImluYWN0aXZlXCIgfHwgdGhpcy5oID09PSAwIHx8IHRoaXMudyA9PT0gMCkge1xuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LkVNUFRZO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNhcHRpb24pIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmNhcHRpb25bX3hmYV9vYmplY3QuJGV4dHJhXTtcbiAgICB9XG5cbiAgICB0aGlzW194ZmFfb2JqZWN0LiRwdXNoUGFyYV0oKTtcblxuICAgIGNvbnN0IGNhcHRpb24gPSB0aGlzLmNhcHRpb24gPyB0aGlzLmNhcHRpb25bX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpLmh0bWwgOiBudWxsO1xuICAgIGNvbnN0IHNhdmVkVyA9IHRoaXMudztcbiAgICBjb25zdCBzYXZlZEggPSB0aGlzLmg7XG4gICAgbGV0IG1hcmdpbkggPSAwO1xuICAgIGxldCBtYXJnaW5WID0gMDtcblxuICAgIGlmICh0aGlzLm1hcmdpbikge1xuICAgICAgbWFyZ2luSCA9IHRoaXMubWFyZ2luLmxlZnRJbnNldCArIHRoaXMubWFyZ2luLnJpZ2h0SW5zZXQ7XG4gICAgICBtYXJnaW5WID0gdGhpcy5tYXJnaW4udG9wSW5zZXQgKyB0aGlzLm1hcmdpbi5ib3R0b21JbnNldDtcbiAgICB9XG5cbiAgICBsZXQgYm9yZGVyRGltcyA9IG51bGw7XG5cbiAgICBpZiAodGhpcy53ID09PSBcIlwiIHx8IHRoaXMuaCA9PT0gXCJcIikge1xuICAgICAgbGV0IHdpZHRoID0gbnVsbDtcbiAgICAgIGxldCBoZWlnaHQgPSBudWxsO1xuICAgICAgbGV0IHVpVyA9IDA7XG4gICAgICBsZXQgdWlIID0gMDtcblxuICAgICAgaWYgKHRoaXMudWkuY2hlY2tCdXR0b24pIHtcbiAgICAgICAgdWlXID0gdWlIID0gdGhpcy51aS5jaGVja0J1dHRvbi5zaXplO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHcsXG4gICAgICAgICAgaFxuICAgICAgICB9ID0gKDAsIF9odG1sX3V0aWxzLmxheW91dE5vZGUpKHRoaXMsIGF2YWlsYWJsZVNwYWNlKTtcblxuICAgICAgICBpZiAodyAhPT0gbnVsbCkge1xuICAgICAgICAgIHVpVyA9IHc7XG4gICAgICAgICAgdWlIID0gaDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1aUggPSAoMCwgX2ZvbnRzLmdldE1ldHJpY3MpKHRoaXMuZm9udCwgdHJ1ZSkubGluZU5vR2FwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGJvcmRlckRpbXMgPSBnZXRCb3JkZXJEaW1zKHRoaXMudWlbX3hmYV9vYmplY3QuJGdldEV4dHJhXSgpKTtcbiAgICAgIHVpVyArPSBib3JkZXJEaW1zLnc7XG4gICAgICB1aUggKz0gYm9yZGVyRGltcy5oO1xuXG4gICAgICBpZiAodGhpcy5jYXB0aW9uKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICB3LFxuICAgICAgICAgIGgsXG4gICAgICAgICAgaXNCcm9rZW5cbiAgICAgICAgfSA9IHRoaXMuY2FwdGlvbltfeGZhX29iamVjdC4kZ2V0RXh0cmFdKGF2YWlsYWJsZVNwYWNlKTtcblxuICAgICAgICBpZiAoaXNCcm9rZW4gJiYgdGhpc1tfeGZhX29iamVjdC4kZ2V0U3ViZm9ybVBhcmVudF0oKVtfeGZhX29iamVjdC4kaXNUaGVyZU1vcmVXaWR0aF0oKSkge1xuICAgICAgICAgIHRoaXNbX3hmYV9vYmplY3QuJHBvcFBhcmFdKCk7XG5cbiAgICAgICAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuRkFJTFVSRTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdpZHRoID0gdztcbiAgICAgICAgaGVpZ2h0ID0gaDtcblxuICAgICAgICBzd2l0Y2ggKHRoaXMuY2FwdGlvbi5wbGFjZW1lbnQpIHtcbiAgICAgICAgICBjYXNlIFwibGVmdFwiOlxuICAgICAgICAgIGNhc2UgXCJyaWdodFwiOlxuICAgICAgICAgIGNhc2UgXCJpbmxpbmVcIjpcbiAgICAgICAgICAgIHdpZHRoICs9IHVpVztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcInRvcFwiOlxuICAgICAgICAgIGNhc2UgXCJib3R0b21cIjpcbiAgICAgICAgICAgIGhlaWdodCArPSB1aUg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2lkdGggPSB1aVc7XG4gICAgICAgIGhlaWdodCA9IHVpSDtcbiAgICAgIH1cblxuICAgICAgaWYgKHdpZHRoICYmIHRoaXMudyA9PT0gXCJcIikge1xuICAgICAgICB3aWR0aCArPSBtYXJnaW5IO1xuICAgICAgICB0aGlzLncgPSBNYXRoLm1pbih0aGlzLm1heFcgPD0gMCA/IEluZmluaXR5IDogdGhpcy5tYXhXLCB0aGlzLm1pblcgKyAxIDwgd2lkdGggPyB3aWR0aCA6IHRoaXMubWluVyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoZWlnaHQgJiYgdGhpcy5oID09PSBcIlwiKSB7XG4gICAgICAgIGhlaWdodCArPSBtYXJnaW5WO1xuICAgICAgICB0aGlzLmggPSBNYXRoLm1pbih0aGlzLm1heEggPD0gMCA/IEluZmluaXR5IDogdGhpcy5tYXhILCB0aGlzLm1pbkggKyAxIDwgaGVpZ2h0ID8gaGVpZ2h0IDogdGhpcy5taW5IKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW194ZmFfb2JqZWN0LiRwb3BQYXJhXSgpO1xuXG4gICAgKDAsIF9odG1sX3V0aWxzLmZpeERpbWVuc2lvbnMpKHRoaXMpO1xuICAgIHNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO1xuXG4gICAgaWYgKCEoMCwgX2xheW91dC5jaGVja0RpbWVuc2lvbnMpKHRoaXMsIGF2YWlsYWJsZVNwYWNlKSkge1xuICAgICAgdGhpcy53ID0gc2F2ZWRXO1xuICAgICAgdGhpcy5oID0gc2F2ZWRIO1xuXG4gICAgICB0aGlzW194ZmFfb2JqZWN0LiRwb3BQYXJhXSgpO1xuXG4gICAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuRkFJTFVSRTtcbiAgICB9XG5cbiAgICB1bnNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO1xuICAgIGNvbnN0IHN0eWxlID0gKDAsIF9odG1sX3V0aWxzLnRvU3R5bGUpKHRoaXMsIFwiZm9udFwiLCBcImRpbWVuc2lvbnNcIiwgXCJwb3NpdGlvblwiLCBcInJvdGF0ZVwiLCBcImFuY2hvclR5cGVcIiwgXCJwcmVzZW5jZVwiLCBcIm1hcmdpblwiLCBcImhBbGlnblwiKTtcbiAgICAoMCwgX2h0bWxfdXRpbHMuc2V0TWluTWF4RGltZW5zaW9ucykodGhpcywgc3R5bGUpO1xuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBbXCJ4ZmFGaWVsZFwiXTtcblxuICAgIGlmICh0aGlzLmZvbnQpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaChcInhmYUZvbnRcIik7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaHRtbF91dGlscy5pc1ByaW50T25seSkodGhpcykpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaChcInhmYVByaW50T25seVwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgICAgc3R5bGUsXG4gICAgICBpZDogdGhpc1tfeGZhX29iamVjdC4kdWlkXSxcbiAgICAgIGNsYXNzOiBjbGFzc05hbWVzXG4gICAgfTtcblxuICAgIGlmIChzdHlsZS5tYXJnaW4pIHtcbiAgICAgIHN0eWxlLnBhZGRpbmcgPSBzdHlsZS5tYXJnaW47XG4gICAgICBkZWxldGUgc3R5bGUubWFyZ2luO1xuICAgIH1cblxuICAgICgwLCBfaHRtbF91dGlscy5zZXRBY2Nlc3MpKHRoaXMsIGNsYXNzTmFtZXMpO1xuXG4gICAgaWYgKHRoaXMubmFtZSkge1xuICAgICAgYXR0cmlidXRlcy54ZmFOYW1lID0gdGhpcy5uYW1lO1xuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkcmVuID0gW107XG4gICAgY29uc3QgaHRtbCA9IHtcbiAgICAgIG5hbWU6IFwiZGl2XCIsXG4gICAgICBhdHRyaWJ1dGVzLFxuICAgICAgY2hpbGRyZW5cbiAgICB9O1xuICAgIGFwcGx5QXNzaXN0KHRoaXMsIGF0dHJpYnV0ZXMpO1xuICAgIGNvbnN0IGJvcmRlclN0eWxlID0gdGhpcy5ib3JkZXIgPyB0aGlzLmJvcmRlcltfeGZhX29iamVjdC4kdG9TdHlsZV0oKSA6IG51bGw7XG4gICAgY29uc3QgYmJveCA9ICgwLCBfaHRtbF91dGlscy5jb21wdXRlQmJveCkodGhpcywgaHRtbCwgYXZhaWxhYmxlU3BhY2UpO1xuXG4gICAgY29uc3QgdWkgPSB0aGlzLnVpW194ZmFfb2JqZWN0LiR0b0hUTUxdKCkuaHRtbDtcblxuICAgIGlmICghdWkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oc3R5bGUsIGJvcmRlclN0eWxlKTtcbiAgICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLCBfaHRtbF91dGlscy5jcmVhdGVXcmFwcGVyKSh0aGlzLCBodG1sKSwgYmJveCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXNbX3hmYV9vYmplY3QuJHRhYkluZGV4XSkge1xuICAgICAgaWYgKHVpLmNoaWxkcmVuICYmIHVpLmNoaWxkcmVuWzBdKSB7XG4gICAgICAgIHVpLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMudGFiaW5kZXggPSB0aGlzW194ZmFfb2JqZWN0LiR0YWJJbmRleF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1aS5hdHRyaWJ1dGVzLnRhYmluZGV4ID0gdGhpc1tfeGZhX29iamVjdC4kdGFiSW5kZXhdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdWkuYXR0cmlidXRlcy5zdHlsZSkge1xuICAgICAgdWkuYXR0cmlidXRlcy5zdHlsZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfVxuXG4gICAgbGV0IGFFbGVtZW50ID0gbnVsbDtcblxuICAgIGlmICh0aGlzLnVpLmJ1dHRvbikge1xuICAgICAgaWYgKHVpLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBbYUVsZW1lbnRdID0gdWkuY2hpbGRyZW4uc3BsaWNlKDAsIDEpO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuYXNzaWduKHVpLmF0dHJpYnV0ZXMuc3R5bGUsIGJvcmRlclN0eWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmFzc2lnbihzdHlsZSwgYm9yZGVyU3R5bGUpO1xuICAgIH1cblxuICAgIGNoaWxkcmVuLnB1c2godWkpO1xuXG4gICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLnVpLmltYWdlRWRpdCkge1xuICAgICAgICB1aS5jaGlsZHJlbi5wdXNoKHRoaXMudmFsdWVbX3hmYV9vYmplY3QuJHRvSFRNTF0oKS5odG1sKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMudWkuYnV0dG9uKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IFwiXCI7XG5cbiAgICAgICAgaWYgKHRoaXMudmFsdWUuZXhEYXRhKSB7XG4gICAgICAgICAgdmFsdWUgPSB0aGlzLnZhbHVlLmV4RGF0YVtfeGZhX29iamVjdC4kdGV4dF0oKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbHVlLnRleHQpIHtcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMudmFsdWUudGV4dFtfeGZhX29iamVjdC4kZ2V0RXh0cmFdKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgaHRtbFZhbHVlID0gdGhpcy52YWx1ZVtfeGZhX29iamVjdC4kdG9IVE1MXSgpLmh0bWw7XG5cbiAgICAgICAgICBpZiAoaHRtbFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGh0bWxWYWx1ZS5jaGlsZHJlblswXS52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy51aS50ZXh0RWRpdCAmJiB0aGlzLnZhbHVlLnRleHQgJiYgdGhpcy52YWx1ZS50ZXh0Lm1heENoYXJzKSB7XG4gICAgICAgICAgdWkuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy5tYXhMZW5ndGggPSB0aGlzLnZhbHVlLnRleHQubWF4Q2hhcnM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAodGhpcy51aS5udW1lcmljRWRpdCkge1xuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgICAgICAgIHZhbHVlID0gaXNOYU4odmFsdWUpID8gXCJcIiA6IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHVpLmNoaWxkcmVuWzBdLm5hbWUgPT09IFwidGV4dGFyZWFcIikge1xuICAgICAgICAgICAgdWkuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1aS5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnVpLmltYWdlRWRpdCAmJiB1aS5jaGlsZHJlbiAmJiB1aS5jaGlsZHJlblswXSAmJiB0aGlzLmgpIHtcbiAgICAgIGJvcmRlckRpbXMgPSBib3JkZXJEaW1zIHx8IGdldEJvcmRlckRpbXModGhpcy51aVtfeGZhX29iamVjdC4kZ2V0RXh0cmFdKCkpO1xuICAgICAgbGV0IGNhcHRpb25IZWlnaHQgPSAwO1xuXG4gICAgICBpZiAodGhpcy5jYXB0aW9uICYmIFtcInRvcFwiLCBcImJvdHRvbVwiXS5pbmNsdWRlcyh0aGlzLmNhcHRpb24ucGxhY2VtZW50KSkge1xuICAgICAgICBjYXB0aW9uSGVpZ2h0ID0gdGhpcy5jYXB0aW9uLnJlc2VydmU7XG5cbiAgICAgICAgaWYgKGNhcHRpb25IZWlnaHQgPD0gMCkge1xuICAgICAgICAgIGNhcHRpb25IZWlnaHQgPSB0aGlzLmNhcHRpb25bX3hmYV9vYmplY3QuJGdldEV4dHJhXShhdmFpbGFibGVTcGFjZSkuaDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlucHV0SGVpZ2h0ID0gdGhpcy5oIC0gY2FwdGlvbkhlaWdodCAtIG1hcmdpblYgLSBib3JkZXJEaW1zLmg7XG4gICAgICAgIHVpLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMuc3R5bGUuaGVpZ2h0ID0gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykoaW5wdXRIZWlnaHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdWkuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy5zdHlsZS5oZWlnaHQgPSBcIjEwMCVcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYUVsZW1lbnQpIHtcbiAgICAgIHVpLmNoaWxkcmVuLnB1c2goYUVsZW1lbnQpO1xuICAgIH1cblxuICAgIGlmICghY2FwdGlvbikge1xuICAgICAgaWYgKHVpLmF0dHJpYnV0ZXMuY2xhc3MpIHtcbiAgICAgICAgdWkuYXR0cmlidXRlcy5jbGFzcy5wdXNoKFwieGZhTGVmdFwiKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy53ID0gc2F2ZWRXO1xuICAgICAgdGhpcy5oID0gc2F2ZWRIO1xuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAsIF9odG1sX3V0aWxzLmNyZWF0ZVdyYXBwZXIpKHRoaXMsIGh0bWwpLCBiYm94KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy51aS5idXR0b24pIHtcbiAgICAgIGlmIChzdHlsZS5wYWRkaW5nKSB7XG4gICAgICAgIGRlbGV0ZSBzdHlsZS5wYWRkaW5nO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2FwdGlvbi5uYW1lID09PSBcImRpdlwiKSB7XG4gICAgICAgIGNhcHRpb24ubmFtZSA9IFwic3BhblwiO1xuICAgICAgfVxuXG4gICAgICB1aS5jaGlsZHJlbi5wdXNoKGNhcHRpb24pO1xuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoaHRtbCwgYmJveCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnVpLmNoZWNrQnV0dG9uKSB7XG4gICAgICBjYXB0aW9uLmF0dHJpYnV0ZXMuY2xhc3NbMF0gPSBcInhmYUNhcHRpb25Gb3JDaGVja0J1dHRvblwiO1xuICAgIH1cblxuICAgIGlmICghdWkuYXR0cmlidXRlcy5jbGFzcykge1xuICAgICAgdWkuYXR0cmlidXRlcy5jbGFzcyA9IFtdO1xuICAgIH1cblxuICAgIHVpLmNoaWxkcmVuLnNwbGljZSgwLCAwLCBjYXB0aW9uKTtcblxuICAgIHN3aXRjaCAodGhpcy5jYXB0aW9uLnBsYWNlbWVudCkge1xuICAgICAgY2FzZSBcImxlZnRcIjpcbiAgICAgICAgdWkuYXR0cmlidXRlcy5jbGFzcy5wdXNoKFwieGZhTGVmdFwiKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJyaWdodFwiOlxuICAgICAgICB1aS5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goXCJ4ZmFSaWdodFwiKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJ0b3BcIjpcbiAgICAgICAgdWkuYXR0cmlidXRlcy5jbGFzcy5wdXNoKFwieGZhVG9wXCIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxuICAgICAgICB1aS5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goXCJ4ZmFCb3R0b21cIik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiaW5saW5lXCI6XG4gICAgICAgIHVpLmF0dHJpYnV0ZXMuY2xhc3MucHVzaChcInhmYUxlZnRcIik7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMudyA9IHNhdmVkVztcbiAgICB0aGlzLmggPSBzYXZlZEg7XG4gICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAsIF9odG1sX3V0aWxzLmNyZWF0ZVdyYXBwZXIpKHRoaXMsIGh0bWwpLCBiYm94KTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuRmllbGQgPSBGaWVsZDtcblxuY2xhc3MgRmlsbCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJmaWxsXCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5wcmVzZW5jZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnByZXNlbmNlLCBbXCJ2aXNpYmxlXCIsIFwiaGlkZGVuXCIsIFwiaW5hY3RpdmVcIiwgXCJpbnZpc2libGVcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5saW5lYXIgPSBudWxsO1xuICAgIHRoaXMucGF0dGVybiA9IG51bGw7XG4gICAgdGhpcy5yYWRpYWwgPSBudWxsO1xuICAgIHRoaXMuc29saWQgPSBudWxsO1xuICAgIHRoaXMuc3RpcHBsZSA9IG51bGw7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvU3R5bGVdKCkge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXNbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgIGNvbnN0IGdyYW5kcGEgPSBwYXJlbnRbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgIGNvbnN0IGdncmFuZHBhID0gZ3JhbmRwYVtfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpO1xuXG4gICAgY29uc3Qgc3R5bGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGxldCBwcm9wTmFtZSA9IFwiY29sb3JcIjtcbiAgICBsZXQgYWx0UHJvcE5hbWUgPSBwcm9wTmFtZTtcblxuICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBCb3JkZXIpIHtcbiAgICAgIHByb3BOYW1lID0gXCJiYWNrZ3JvdW5kLWNvbG9yXCI7XG4gICAgICBhbHRQcm9wTmFtZSA9IFwiYmFja2dyb3VuZFwiO1xuXG4gICAgICBpZiAoZ2dyYW5kcGEgaW5zdGFuY2VvZiBVaSkge1xuICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcIndoaXRlXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFJlY3RhbmdsZSB8fCBwYXJlbnQgaW5zdGFuY2VvZiBBcmMpIHtcbiAgICAgIHByb3BOYW1lID0gYWx0UHJvcE5hbWUgPSBcImZpbGxcIjtcbiAgICAgIHN0eWxlLmZpbGwgPSBcIndoaXRlXCI7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSB7XG4gICAgICBpZiAobmFtZSA9PT0gXCJleHRyYXNcIiB8fCBuYW1lID09PSBcImNvbG9yXCIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9iaiA9IHRoaXNbbmFtZV07XG5cbiAgICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIF94ZmFfb2JqZWN0LlhGQU9iamVjdCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbG9yID0gb2JqW194ZmFfb2JqZWN0LiR0b1N0eWxlXSh0aGlzLmNvbG9yKTtcblxuICAgICAgaWYgKGNvbG9yKSB7XG4gICAgICAgIHN0eWxlW2NvbG9yLnN0YXJ0c1dpdGgoXCIjXCIpID8gcHJvcE5hbWUgOiBhbHRQcm9wTmFtZV0gPSBjb2xvcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbG9yICYmIHRoaXMuY29sb3IudmFsdWUpIHtcbiAgICAgIGNvbnN0IGNvbG9yID0gdGhpcy5jb2xvcltfeGZhX29iamVjdC4kdG9TdHlsZV0oKTtcblxuICAgICAgc3R5bGVbY29sb3Iuc3RhcnRzV2l0aChcIiNcIikgPyBwcm9wTmFtZSA6IGFsdFByb3BOYW1lXSA9IGNvbG9yO1xuICAgIH1cblxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxuXG59XG5cbmNsYXNzIEZpbHRlciBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJmaWx0ZXJcIiwgdHJ1ZSk7XG4gICAgdGhpcy5hZGRSZXZvY2F0aW9uSW5mbyA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmFkZFJldm9jYXRpb25JbmZvLCBbXCJcIiwgXCJyZXF1aXJlZFwiLCBcIm9wdGlvbmFsXCIsIFwibm9uZVwiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy52ZXJzaW9uID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiB0aGlzLnZlcnNpb24sXG4gICAgICBkZWZhdWx0VmFsdWU6IDUsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID49IDEgJiYgeCA8PSA1XG4gICAgfSk7XG4gICAgdGhpcy5hcHBlYXJhbmNlRmlsdGVyID0gbnVsbDtcbiAgICB0aGlzLmNlcnRpZmljYXRlcyA9IG51bGw7XG4gICAgdGhpcy5kaWdlc3RNZXRob2RzID0gbnVsbDtcbiAgICB0aGlzLmVuY29kaW5ncyA9IG51bGw7XG4gICAgdGhpcy5lbmNyeXB0aW9uTWV0aG9kcyA9IG51bGw7XG4gICAgdGhpcy5oYW5kbGVyID0gbnVsbDtcbiAgICB0aGlzLmxvY2tEb2N1bWVudCA9IG51bGw7XG4gICAgdGhpcy5tZHAgPSBudWxsO1xuICAgIHRoaXMucmVhc29ucyA9IG51bGw7XG4gICAgdGhpcy50aW1lU3RhbXAgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgRmxvYXQgZXh0ZW5kcyBfeGZhX29iamVjdC5Db250ZW50T2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImZsb2F0XCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRmaW5hbGl6ZV0oKSB7XG4gICAgY29uc3QgbnVtYmVyID0gcGFyc2VGbG9hdCh0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XS50cmltKCkpO1xuICAgIHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID0gaXNOYU4obnVtYmVyKSA/IG51bGwgOiBudW1iZXI7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHtcbiAgICByZXR1cm4gdmFsdWVUb0h0bWwodGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gIT09IG51bGwgPyB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XS50b1N0cmluZygpIDogXCJcIik7XG4gIH1cblxufVxuXG5jbGFzcyBGb250IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImZvbnRcIiwgdHJ1ZSk7XG4gICAgdGhpcy5iYXNlbGluZVNoaWZ0ID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy5iYXNlbGluZVNoaWZ0KTtcbiAgICB0aGlzLmZvbnRIb3Jpem9udGFsU2NhbGUgPSAoMCwgX3V0aWxzLmdldEZsb2F0KSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLmZvbnRIb3Jpem9udGFsU2NhbGUsXG4gICAgICBkZWZhdWx0VmFsdWU6IDEwMCxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPj0gMFxuICAgIH0pO1xuICAgIHRoaXMuZm9udFZlcnRpY2FsU2NhbGUgPSAoMCwgX3V0aWxzLmdldEZsb2F0KSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLmZvbnRWZXJ0aWNhbFNjYWxlLFxuICAgICAgZGVmYXVsdFZhbHVlOiAxMDAsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID49IDBcbiAgICB9KTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMua2VybmluZ01vZGUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5rZXJuaW5nTW9kZSwgW1wibm9uZVwiLCBcInBhaXJcIl0pO1xuICAgIHRoaXMubGV0dGVyU3BhY2luZyA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMubGV0dGVyU3BhY2luZywgXCIwXCIpO1xuICAgIHRoaXMubGluZVRocm91Z2ggPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMubGluZVRocm91Z2gsXG4gICAgICBkZWZhdWx0VmFsdWU6IDAsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID09PSAxIHx8IHggPT09IDJcbiAgICB9KTtcbiAgICB0aGlzLmxpbmVUaHJvdWdoUGVyaW9kID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMubGluZVRocm91Z2hQZXJpb2QsIFtcImFsbFwiLCBcIndvcmRcIl0pO1xuICAgIHRoaXMub3ZlcmxpbmUgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMub3ZlcmxpbmUsXG4gICAgICBkZWZhdWx0VmFsdWU6IDAsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID09PSAxIHx8IHggPT09IDJcbiAgICB9KTtcbiAgICB0aGlzLm92ZXJsaW5lUGVyaW9kID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMub3ZlcmxpbmVQZXJpb2QsIFtcImFsbFwiLCBcIndvcmRcIl0pO1xuICAgIHRoaXMucG9zdHVyZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnBvc3R1cmUsIFtcIm5vcm1hbFwiLCBcIml0YWxpY1wiXSk7XG4gICAgdGhpcy5zaXplID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy5zaXplLCBcIjEwcHRcIik7XG4gICAgdGhpcy50eXBlZmFjZSA9IGF0dHJpYnV0ZXMudHlwZWZhY2UgfHwgXCJDb3VyaWVyXCI7XG4gICAgdGhpcy51bmRlcmxpbmUgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMudW5kZXJsaW5lLFxuICAgICAgZGVmYXVsdFZhbHVlOiAwLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMSB8fCB4ID09PSAyXG4gICAgfSk7XG4gICAgdGhpcy51bmRlcmxpbmVQZXJpb2QgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy51bmRlcmxpbmVQZXJpb2QsIFtcImFsbFwiLCBcIndvcmRcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLndlaWdodCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLndlaWdodCwgW1wibm9ybWFsXCIsIFwiYm9sZFwiXSk7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICAgIHRoaXMuZmlsbCA9IG51bGw7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGNsZWFuXShidWlsZGVyKSB7XG4gICAgc3VwZXJbX3hmYV9vYmplY3QuJGNsZWFuXShidWlsZGVyKTtcblxuICAgIHRoaXNbX3hmYV9vYmplY3QuJGdsb2JhbERhdGFdLnVzZWRUeXBlZmFjZXMuYWRkKHRoaXMudHlwZWZhY2UpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b1N0eWxlXSgpIHtcbiAgICBjb25zdCBzdHlsZSA9ICgwLCBfaHRtbF91dGlscy50b1N0eWxlKSh0aGlzLCBcImZpbGxcIik7XG4gICAgY29uc3QgY29sb3IgPSBzdHlsZS5jb2xvcjtcblxuICAgIGlmIChjb2xvcikge1xuICAgICAgaWYgKGNvbG9yID09PSBcIiMwMDAwMDBcIikge1xuICAgICAgICBkZWxldGUgc3R5bGUuY29sb3I7XG4gICAgICB9IGVsc2UgaWYgKCFjb2xvci5zdGFydHNXaXRoKFwiI1wiKSkge1xuICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kID0gY29sb3I7XG4gICAgICAgIHN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJ0ZXh0XCI7XG4gICAgICAgIHN0eWxlLmNvbG9yID0gXCJ0cmFuc3BhcmVudFwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmJhc2VsaW5lU2hpZnQpIHtcbiAgICAgIHN0eWxlLnZlcnRpY2FsQWxpZ24gPSAoMCwgX2h0bWxfdXRpbHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmJhc2VsaW5lU2hpZnQpO1xuICAgIH1cblxuICAgIHN0eWxlLmZvbnRLZXJuaW5nID0gdGhpcy5rZXJuaW5nTW9kZSA9PT0gXCJub25lXCIgPyBcIm5vbmVcIiA6IFwibm9ybWFsXCI7XG4gICAgc3R5bGUubGV0dGVyU3BhY2luZyA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubGV0dGVyU3BhY2luZyk7XG5cbiAgICBpZiAodGhpcy5saW5lVGhyb3VnaCAhPT0gMCkge1xuICAgICAgc3R5bGUudGV4dERlY29yYXRpb24gPSBcImxpbmUtdGhyb3VnaFwiO1xuXG4gICAgICBpZiAodGhpcy5saW5lVGhyb3VnaCA9PT0gMikge1xuICAgICAgICBzdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlID0gXCJkb3VibGVcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5vdmVybGluZSAhPT0gMCkge1xuICAgICAgc3R5bGUudGV4dERlY29yYXRpb24gPSBcIm92ZXJsaW5lXCI7XG5cbiAgICAgIGlmICh0aGlzLm92ZXJsaW5lID09PSAyKSB7XG4gICAgICAgIHN0eWxlLnRleHREZWNvcmF0aW9uU3R5bGUgPSBcImRvdWJsZVwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN0eWxlLmZvbnRTdHlsZSA9IHRoaXMucG9zdHVyZTtcbiAgICBzdHlsZS5mb250U2l6ZSA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKDAuOTkgKiB0aGlzLnNpemUpO1xuICAgICgwLCBfaHRtbF91dGlscy5zZXRGb250RmFtaWx5KSh0aGlzLCB0aGlzLCB0aGlzW194ZmFfb2JqZWN0LiRnbG9iYWxEYXRhXS5mb250RmluZGVyLCBzdHlsZSk7XG5cbiAgICBpZiAodGhpcy51bmRlcmxpbmUgIT09IDApIHtcbiAgICAgIHN0eWxlLnRleHREZWNvcmF0aW9uID0gXCJ1bmRlcmxpbmVcIjtcblxuICAgICAgaWYgKHRoaXMudW5kZXJsaW5lID09PSAyKSB7XG4gICAgICAgIHN0eWxlLnRleHREZWNvcmF0aW9uU3R5bGUgPSBcImRvdWJsZVwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN0eWxlLmZvbnRXZWlnaHQgPSB0aGlzLndlaWdodDtcbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cblxufVxuXG5jbGFzcyBGb3JtYXQgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiZm9ybWF0XCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuZXh0cmFzID0gbnVsbDtcbiAgICB0aGlzLnBpY3R1cmUgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgSGFuZGxlciBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJoYW5kbGVyXCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy50eXBlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMudHlwZSwgW1wib3B0aW9uYWxcIiwgXCJyZXF1aXJlZFwiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbn1cblxuY2xhc3MgSHlwaGVuYXRpb24gZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiaHlwaGVuYXRpb25cIik7XG4gICAgdGhpcy5leGNsdWRlQWxsQ2FwcyA9ICgwLCBfdXRpbHMuZ2V0SW50ZWdlcikoe1xuICAgICAgZGF0YTogYXR0cmlidXRlcy5leGNsdWRlQWxsQ2FwcyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDFcbiAgICB9KTtcbiAgICB0aGlzLmV4Y2x1ZGVJbml0aWFsQ2FwID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLmV4Y2x1ZGVJbml0aWFsQ2FwLFxuICAgICAgZGVmYXVsdFZhbHVlOiAwLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMVxuICAgIH0pO1xuICAgIHRoaXMuaHlwaGVuYXRlID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLmh5cGhlbmF0ZSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDFcbiAgICB9KTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMucHVzaENoYXJhY3RlckNvdW50ID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLnB1c2hDaGFyYWN0ZXJDb3VudCxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMyxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPj0gMFxuICAgIH0pO1xuICAgIHRoaXMucmVtYWluQ2hhcmFjdGVyQ291bnQgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMucmVtYWluQ2hhcmFjdGVyQ291bnQsXG4gICAgICBkZWZhdWx0VmFsdWU6IDMsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID49IDBcbiAgICB9KTtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy53b3JkQ2hhcmFjdGVyQ291bnQgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMud29yZENoYXJhY3RlckNvdW50LFxuICAgICAgZGVmYXVsdFZhbHVlOiA3LFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA+PSAwXG4gICAgfSk7XG4gIH1cblxufVxuXG5jbGFzcyBJbWFnZSBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJpbWFnZVwiKTtcbiAgICB0aGlzLmFzcGVjdCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmFzcGVjdCwgW1wiZml0XCIsIFwiYWN0dWFsXCIsIFwiaGVpZ2h0XCIsIFwibm9uZVwiLCBcIndpZHRoXCJdKTtcbiAgICB0aGlzLmNvbnRlbnRUeXBlID0gYXR0cmlidXRlcy5jb250ZW50VHlwZSB8fCBcIlwiO1xuICAgIHRoaXMuaHJlZiA9IGF0dHJpYnV0ZXMuaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy50cmFuc2ZlckVuY29kaW5nID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMudHJhbnNmZXJFbmNvZGluZywgW1wiYmFzZTY0XCIsIFwibm9uZVwiLCBcInBhY2thZ2VcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXSgpIHtcbiAgICBpZiAodGhpcy5jb250ZW50VHlwZSAmJiAhTUlNRVMuaGFzKHRoaXMuY29udGVudFR5cGUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5FTVBUWTtcbiAgICB9XG5cbiAgICBsZXQgYnVmZmVyID0gdGhpc1tfeGZhX29iamVjdC4kZ2xvYmFsRGF0YV0uaW1hZ2VzICYmIHRoaXNbX3hmYV9vYmplY3QuJGdsb2JhbERhdGFdLmltYWdlcy5nZXQodGhpcy5ocmVmKTtcblxuICAgIGlmICghYnVmZmVyICYmICh0aGlzLmhyZWYgfHwgIXRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdKSkge1xuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LkVNUFRZO1xuICAgIH1cblxuICAgIGlmICghYnVmZmVyICYmIHRoaXMudHJhbnNmZXJFbmNvZGluZyA9PT0gXCJiYXNlNjRcIikge1xuICAgICAgYnVmZmVyID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGF0b2IodGhpc1tfeGZhX29iamVjdC4kY29udGVudF0pKTtcbiAgICB9XG5cbiAgICBpZiAoIWJ1ZmZlcikge1xuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LkVNUFRZO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb250ZW50VHlwZSkge1xuICAgICAgZm9yIChjb25zdCBbaGVhZGVyLCB0eXBlXSBvZiBJTUFHRVNfSEVBREVSUykge1xuICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA+IGhlYWRlci5sZW5ndGggJiYgaGVhZGVyLmV2ZXJ5KCh4LCBpKSA9PiB4ID09PSBidWZmZXJbaV0pKSB7XG4gICAgICAgICAgdGhpcy5jb250ZW50VHlwZSA9IHR5cGU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLmNvbnRlbnRUeXBlKSB7XG4gICAgICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5FTVBUWTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHtcbiAgICAgIHR5cGU6IHRoaXMuY29udGVudFR5cGVcbiAgICB9KTtcbiAgICBsZXQgc3R5bGU7XG5cbiAgICBzd2l0Y2ggKHRoaXMuYXNwZWN0KSB7XG4gICAgICBjYXNlIFwiZml0XCI6XG4gICAgICBjYXNlIFwiYWN0dWFsXCI6XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiaGVpZ2h0XCI6XG4gICAgICAgIHN0eWxlID0ge1xuICAgICAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICAgICAgb2JqZWN0Rml0OiBcImZpbGxcIlxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIm5vbmVcIjpcbiAgICAgICAgc3R5bGUgPSB7XG4gICAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICAgICAgb2JqZWN0Rml0OiBcImZpbGxcIlxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIndpZHRoXCI6XG4gICAgICAgIHN0eWxlID0ge1xuICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgICBvYmplY3RGaXQ6IFwiZmlsbFwiXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXNbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtcbiAgICAgIG5hbWU6IFwiaW1nXCIsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNsYXNzOiBbXCJ4ZmFJbWFnZVwiXSxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIHNyYzogVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSxcbiAgICAgICAgYWx0OiBwYXJlbnQgPyBhcmlhTGFiZWwocGFyZW50W194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCkpIDogbnVsbFxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbn1cblxuY2xhc3MgSW1hZ2VFZGl0IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImltYWdlRWRpdFwiLCB0cnVlKTtcbiAgICB0aGlzLmRhdGEgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5kYXRhLCBbXCJsaW5rXCIsIFwiZW1iZWRcIl0pO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuYm9yZGVyID0gbnVsbDtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5tYXJnaW4gPSBudWxsO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gXCJlbWJlZFwiKSB7XG4gICAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7XG4gICAgICAgIG5hbWU6IFwiZGl2XCIsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgYXR0cmlidXRlczoge31cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5FTVBUWTtcbiAgfVxuXG59XG5cbmNsYXNzIEludGVnZXIgZXh0ZW5kcyBfeGZhX29iamVjdC5Db250ZW50T2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImludGVnZXJcIik7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGZpbmFsaXplXSgpIHtcbiAgICBjb25zdCBudW1iZXIgPSBwYXJzZUludCh0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XS50cmltKCksIDEwKTtcbiAgICB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSA9IGlzTmFOKG51bWJlcikgPyBudWxsIDogbnVtYmVyO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgcmV0dXJuIHZhbHVlVG9IdG1sKHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdICE9PSBudWxsID8gdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0udG9TdHJpbmcoKSA6IFwiXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgSXNzdWVycyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJpc3N1ZXJzXCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy50eXBlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMudHlwZSwgW1wib3B0aW9uYWxcIiwgXCJyZXF1aXJlZFwiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuY2VydGlmaWNhdGUgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG59XG5cbmNsYXNzIEl0ZW1zIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcIml0ZW1zXCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy5wcmVzZW5jZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnByZXNlbmNlLCBbXCJ2aXNpYmxlXCIsIFwiaGlkZGVuXCIsIFwiaW5hY3RpdmVcIiwgXCJpbnZpc2libGVcIl0pO1xuICAgIHRoaXMucmVmID0gYXR0cmlidXRlcy5yZWYgfHwgXCJcIjtcbiAgICB0aGlzLnNhdmUgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuc2F2ZSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDFcbiAgICB9KTtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5ib29sZWFuID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5kYXRlID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5kYXRlVGltZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZGVjaW1hbCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZXhEYXRhID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5mbG9hdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuaW1hZ2UgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmludGVnZXIgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnRleHQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnRpbWUgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXSgpIHtcbiAgICBjb25zdCBvdXRwdXQgPSBbXTtcblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpc1tfeGZhX29iamVjdC4kZ2V0Q2hpbGRyZW5dKCkpIHtcbiAgICAgIG91dHB1dC5wdXNoKGNoaWxkW194ZmFfb2JqZWN0LiR0ZXh0XSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2VzcyhvdXRwdXQpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5JdGVtcyA9IEl0ZW1zO1xuXG5jbGFzcyBLZWVwIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImtlZXBcIiwgdHJ1ZSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICBjb25zdCBvcHRpb25zID0gW1wibm9uZVwiLCBcImNvbnRlbnRBcmVhXCIsIFwicGFnZUFyZWFcIl07XG4gICAgdGhpcy5pbnRhY3QgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5pbnRhY3QsIG9wdGlvbnMpO1xuICAgIHRoaXMubmV4dCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLm5leHQsIG9wdGlvbnMpO1xuICAgIHRoaXMucHJldmlvdXMgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5wcmV2aW91cywgb3B0aW9ucyk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuZXh0cmFzID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIEtleVVzYWdlIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImtleVVzYWdlXCIpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBbXCJcIiwgXCJ5ZXNcIiwgXCJub1wiXTtcbiAgICB0aGlzLmNybFNpZ24gPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5jcmxTaWduLCBvcHRpb25zKTtcbiAgICB0aGlzLmRhdGFFbmNpcGhlcm1lbnQgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5kYXRhRW5jaXBoZXJtZW50LCBvcHRpb25zKTtcbiAgICB0aGlzLmRlY2lwaGVyT25seSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmRlY2lwaGVyT25seSwgb3B0aW9ucyk7XG4gICAgdGhpcy5kaWdpdGFsU2lnbmF0dXJlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMuZGlnaXRhbFNpZ25hdHVyZSwgb3B0aW9ucyk7XG4gICAgdGhpcy5lbmNpcGhlck9ubHkgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5lbmNpcGhlck9ubHksIG9wdGlvbnMpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5rZXlBZ3JlZW1lbnQgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5rZXlBZ3JlZW1lbnQsIG9wdGlvbnMpO1xuICAgIHRoaXMua2V5Q2VydFNpZ24gPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5rZXlDZXJ0U2lnbiwgb3B0aW9ucyk7XG4gICAgdGhpcy5rZXlFbmNpcGhlcm1lbnQgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5rZXlFbmNpcGhlcm1lbnQsIG9wdGlvbnMpO1xuICAgIHRoaXMubm9uUmVwdWRpYXRpb24gPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5ub25SZXB1ZGlhdGlvbiwgb3B0aW9ucyk7XG4gICAgdGhpcy50eXBlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMudHlwZSwgW1wib3B0aW9uYWxcIiwgXCJyZXF1aXJlZFwiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbn1cblxuY2xhc3MgTGluZSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJsaW5lXCIsIHRydWUpO1xuICAgIHRoaXMuaGFuZCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmhhbmQsIFtcImV2ZW5cIiwgXCJsZWZ0XCIsIFwicmlnaHRcIl0pO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5zbG9wZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnNsb3BlLCBbXCJcXFxcXCIsIFwiL1wiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuZWRnZSA9IG51bGw7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvSFRNTF0oKSB7XG4gICAgY29uc3QgcGFyZW50ID0gdGhpc1tfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCk7XG5cbiAgICBjb25zdCBlZGdlID0gdGhpcy5lZGdlID8gdGhpcy5lZGdlIDogbmV3IEVkZ2Uoe30pO1xuXG4gICAgY29uc3QgZWRnZVN0eWxlID0gZWRnZVtfeGZhX29iamVjdC4kdG9TdHlsZV0oKTtcblxuICAgIGNvbnN0IHN0eWxlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBjb25zdCB0aGlja25lc3MgPSBlZGdlLnByZXNlbmNlID09PSBcInZpc2libGVcIiA/IGVkZ2UudGhpY2tuZXNzIDogMDtcbiAgICBzdHlsZS5zdHJva2VXaWR0aCA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaWNrbmVzcyk7XG4gICAgc3R5bGUuc3Ryb2tlID0gZWRnZVN0eWxlLmNvbG9yO1xuICAgIGxldCB4MSwgeTEsIHgyLCB5MjtcbiAgICBsZXQgd2lkdGggPSBcIjEwMCVcIjtcbiAgICBsZXQgaGVpZ2h0ID0gXCIxMDAlXCI7XG5cbiAgICBpZiAocGFyZW50LncgPD0gdGhpY2tuZXNzKSB7XG4gICAgICBbeDEsIHkxLCB4MiwgeTJdID0gW1wiNTAlXCIsIDAsIFwiNTAlXCIsIFwiMTAwJVwiXTtcbiAgICAgIHdpZHRoID0gc3R5bGUuc3Ryb2tlV2lkdGg7XG4gICAgfSBlbHNlIGlmIChwYXJlbnQuaCA8PSB0aGlja25lc3MpIHtcbiAgICAgIFt4MSwgeTEsIHgyLCB5Ml0gPSBbMCwgXCI1MCVcIiwgXCIxMDAlXCIsIFwiNTAlXCJdO1xuICAgICAgaGVpZ2h0ID0gc3R5bGUuc3Ryb2tlV2lkdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnNsb3BlID09PSBcIlxcXFxcIikge1xuICAgICAgICBbeDEsIHkxLCB4MiwgeTJdID0gWzAsIDAsIFwiMTAwJVwiLCBcIjEwMCVcIl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBbeDEsIHkxLCB4MiwgeTJdID0gWzAsIFwiMTAwJVwiLCBcIjEwMCVcIiwgMF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbGluZSA9IHtcbiAgICAgIG5hbWU6IFwibGluZVwiLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICB4bWxuczogU1ZHX05TLFxuICAgICAgICB4MSxcbiAgICAgICAgeTEsXG4gICAgICAgIHgyLFxuICAgICAgICB5MixcbiAgICAgICAgc3R5bGVcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHN2ZyA9IHtcbiAgICAgIG5hbWU6IFwic3ZnXCIsXG4gICAgICBjaGlsZHJlbjogW2xpbmVdLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICB4bWxuczogU1ZHX05TLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIG92ZXJmbG93OiBcInZpc2libGVcIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChoYXNNYXJnaW4ocGFyZW50KSkge1xuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe1xuICAgICAgICBuYW1lOiBcImRpdlwiLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5saW5lXCIsXG4gICAgICAgICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICAgICAgICBoZWlnaHQ6IFwiMTAwJVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogW3N2Z11cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHN2Zy5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5zdWNjZXNzKHN2Zyk7XG4gIH1cblxufVxuXG5jbGFzcyBMaW5lYXIgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwibGluZWFyXCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy50eXBlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMudHlwZSwgW1widG9SaWdodFwiLCBcInRvQm90dG9tXCIsIFwidG9MZWZ0XCIsIFwidG9Ub3BcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvU3R5bGVdKHN0YXJ0Q29sb3IpIHtcbiAgICBzdGFydENvbG9yID0gc3RhcnRDb2xvciA/IHN0YXJ0Q29sb3JbX3hmYV9vYmplY3QuJHRvU3R5bGVdKCkgOiBcIiNGRkZGRkZcIjtcbiAgICBjb25zdCB0cmFuc2YgPSB0aGlzLnR5cGUucmVwbGFjZSgvKFtSQkxUXSkvLCBcIiAkMVwiKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGVuZENvbG9yID0gdGhpcy5jb2xvciA/IHRoaXMuY29sb3JbX3hmYV9vYmplY3QuJHRvU3R5bGVdKCkgOiBcIiMwMDAwMDBcIjtcbiAgICByZXR1cm4gYGxpbmVhci1ncmFkaWVudCgke3RyYW5zZn0sICR7c3RhcnRDb2xvcn0sICR7ZW5kQ29sb3J9KWA7XG4gIH1cblxufVxuXG5jbGFzcyBMb2NrRG9jdW1lbnQgZXh0ZW5kcyBfeGZhX29iamVjdC5Db250ZW50T2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImxvY2tEb2N1bWVudFwiKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMudHlwZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnR5cGUsIFtcIm9wdGlvbmFsXCIsIFwicmVxdWlyZWRcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kZmluYWxpemVdKCkge1xuICAgIHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdLCBbXCJhdXRvXCIsIFwiMFwiLCBcIjFcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgTWFuaWZlc3QgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwibWFuaWZlc3RcIiwgdHJ1ZSk7XG4gICAgdGhpcy5hY3Rpb24gPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5hY3Rpb24sIFtcImluY2x1ZGVcIiwgXCJhbGxcIiwgXCJleGNsdWRlXCJdKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5yZWYgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG59XG5cbmNsYXNzIE1hcmdpbiBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJtYXJnaW5cIiwgdHJ1ZSk7XG4gICAgdGhpcy5ib3R0b21JbnNldCA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMuYm90dG9tSW5zZXQsIFwiMFwiKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMubGVmdEluc2V0ID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy5sZWZ0SW5zZXQsIFwiMFwiKTtcbiAgICB0aGlzLnJpZ2h0SW5zZXQgPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLnJpZ2h0SW5zZXQsIFwiMFwiKTtcbiAgICB0aGlzLnRvcEluc2V0ID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy50b3BJbnNldCwgXCIwXCIpO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvU3R5bGVdKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXJnaW46ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMudG9wSW5zZXQpICsgXCIgXCIgKyAoMCwgX2h0bWxfdXRpbHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnJpZ2h0SW5zZXQpICsgXCIgXCIgKyAoMCwgX2h0bWxfdXRpbHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmJvdHRvbUluc2V0KSArIFwiIFwiICsgKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5sZWZ0SW5zZXQpXG4gICAgfTtcbiAgfVxuXG59XG5cbmNsYXNzIE1kcCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJtZHBcIik7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnBlcm1pc3Npb25zID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLnBlcm1pc3Npb25zLFxuICAgICAgZGVmYXVsdFZhbHVlOiAyLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMSB8fCB4ID09PSAzXG4gICAgfSk7XG4gICAgdGhpcy5zaWduYXR1cmVUeXBlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMuc2lnbmF0dXJlVHlwZSwgW1wiZmlsbGVyXCIsIFwiYXV0aG9yXCJdKTtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxufVxuXG5jbGFzcyBNZWRpdW0gZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwibWVkaXVtXCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5pbWFnaW5nQkJveCA9ICgwLCBfdXRpbHMuZ2V0QkJveCkoYXR0cmlidXRlcy5pbWFnaW5nQkJveCk7XG4gICAgdGhpcy5sb25nID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy5sb25nKTtcbiAgICB0aGlzLm9yaWVudGF0aW9uID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMub3JpZW50YXRpb24sIFtcInBvcnRyYWl0XCIsIFwibGFuZHNjYXBlXCJdKTtcbiAgICB0aGlzLnNob3J0ID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy5zaG9ydCk7XG4gICAgdGhpcy5zdG9jayA9IGF0dHJpYnV0ZXMuc3RvY2sgfHwgXCJcIjtcbiAgICB0aGlzLnRyYXlJbiA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnRyYXlJbiwgW1wiYXV0b1wiLCBcImRlbGVnYXRlXCIsIFwicGFnZUZyb250XCJdKTtcbiAgICB0aGlzLnRyYXlPdXQgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy50cmF5T3V0LCBbXCJhdXRvXCIsIFwiZGVsZWdhdGVcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgfVxuXG59XG5cbmNsYXNzIE1lc3NhZ2UgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwibWVzc2FnZVwiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLnRleHQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG59XG5cbmNsYXNzIE51bWVyaWNFZGl0IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcIm51bWVyaWNFZGl0XCIsIHRydWUpO1xuICAgIHRoaXMuaFNjcm9sbFBvbGljeSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmhTY3JvbGxQb2xpY3ksIFtcImF1dG9cIiwgXCJvZmZcIiwgXCJvblwiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5ib3JkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tYiA9IG51bGw7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICAgIHRoaXMubWFyZ2luID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXShhdmFpbGFibGVTcGFjZSkge1xuICAgIGNvbnN0IHN0eWxlID0gKDAsIF9odG1sX3V0aWxzLnRvU3R5bGUpKHRoaXMsIFwiYm9yZGVyXCIsIFwiZm9udFwiLCBcIm1hcmdpblwiKTtcblxuICAgIGNvbnN0IGZpZWxkID0gdGhpc1tfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCk7XG5cbiAgICBjb25zdCBodG1sID0ge1xuICAgICAgbmFtZTogXCJpbnB1dFwiLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgZmllbGRJZDogZmllbGRbX3hmYV9vYmplY3QuJHVpZF0sXG4gICAgICAgIGRhdGFJZDogZmllbGRbX3hmYV9vYmplY3QuJGRhdGFdICYmIGZpZWxkW194ZmFfb2JqZWN0LiRkYXRhXVtfeGZhX29iamVjdC4kdWlkXSB8fCBmaWVsZFtfeGZhX29iamVjdC4kdWlkXSxcbiAgICAgICAgY2xhc3M6IFtcInhmYVRleHRmaWVsZFwiXSxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwoZmllbGQpXG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7XG4gICAgICBuYW1lOiBcImxhYmVsXCIsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNsYXNzOiBbXCJ4ZmFMYWJlbFwiXVxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBbaHRtbF1cbiAgICB9KTtcbiAgfVxuXG59XG5cbmNsYXNzIE9jY3VyIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcIm9jY3VyXCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5pbml0aWFsID0gYXR0cmlidXRlcy5pbml0aWFsICE9PSBcIlwiID8gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLmluaXRpYWwsXG4gICAgICBkZWZhdWx0VmFsdWU6IFwiXCIsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB0cnVlXG4gICAgfSkgOiBcIlwiO1xuICAgIHRoaXMubWF4ID0gYXR0cmlidXRlcy5tYXggIT09IFwiXCIgPyAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMubWF4LFxuICAgICAgZGVmYXVsdFZhbHVlOiAxLFxuICAgICAgdmFsaWRhdGU6IHggPT4gdHJ1ZVxuICAgIH0pIDogXCJcIjtcbiAgICB0aGlzLm1pbiA9IGF0dHJpYnV0ZXMubWluICE9PSBcIlwiID8gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLm1pbixcbiAgICAgIGRlZmF1bHRWYWx1ZTogMSxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHRydWVcbiAgICB9KSA6IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuZXh0cmFzID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kY2xlYW5dKCkge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXNbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgIGNvbnN0IG9yaWdpbmFsTWluID0gdGhpcy5taW47XG5cbiAgICBpZiAodGhpcy5taW4gPT09IFwiXCIpIHtcbiAgICAgIHRoaXMubWluID0gcGFyZW50IGluc3RhbmNlb2YgUGFnZUFyZWEgfHwgcGFyZW50IGluc3RhbmNlb2YgUGFnZVNldCA/IDAgOiAxO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1heCA9PT0gXCJcIikge1xuICAgICAgaWYgKG9yaWdpbmFsTWluID09PSBcIlwiKSB7XG4gICAgICAgIHRoaXMubWF4ID0gcGFyZW50IGluc3RhbmNlb2YgUGFnZUFyZWEgfHwgcGFyZW50IGluc3RhbmNlb2YgUGFnZVNldCA/IC0xIDogMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWF4ID0gdGhpcy5taW47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWF4ICE9PSAtMSAmJiB0aGlzLm1heCA8IHRoaXMubWluKSB7XG4gICAgICB0aGlzLm1heCA9IHRoaXMubWluO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluaXRpYWwgPT09IFwiXCIpIHtcbiAgICAgIHRoaXMuaW5pdGlhbCA9IHBhcmVudCBpbnN0YW5jZW9mIFRlbXBsYXRlID8gMSA6IHRoaXMubWluO1xuICAgIH1cbiAgfVxuXG59XG5cbmNsYXNzIE9pZCBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJvaWRcIik7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxufVxuXG5jbGFzcyBPaWRzIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcIm9pZHNcIiwgdHJ1ZSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnR5cGUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy50eXBlLCBbXCJvcHRpb25hbFwiLCBcInJlcXVpcmVkXCJdKTtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5vaWQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG59XG5cbmNsYXNzIE92ZXJmbG93IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcIm92ZXJmbG93XCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5sZWFkZXIgPSBhdHRyaWJ1dGVzLmxlYWRlciB8fCBcIlwiO1xuICAgIHRoaXMudGFyZ2V0ID0gYXR0cmlidXRlcy50YXJnZXQgfHwgXCJcIjtcbiAgICB0aGlzLnRyYWlsZXIgPSBhdHRyaWJ1dGVzLnRyYWlsZXIgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGdldEV4dHJhXSgpIHtcbiAgICBpZiAoIXRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXSkge1xuICAgICAgY29uc3QgcGFyZW50ID0gdGhpc1tfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpO1xuXG4gICAgICBjb25zdCByb290ID0gdGhpc1tfeGZhX29iamVjdC4kZ2V0VGVtcGxhdGVSb290XSgpO1xuXG4gICAgICBjb25zdCB0YXJnZXQgPSByb290W194ZmFfb2JqZWN0LiRzZWFyY2hOb2RlXSh0aGlzLnRhcmdldCwgcGFyZW50KTtcblxuICAgICAgY29uc3QgbGVhZGVyID0gcm9vdFtfeGZhX29iamVjdC4kc2VhcmNoTm9kZV0odGhpcy5sZWFkZXIsIHBhcmVudCk7XG5cbiAgICAgIGNvbnN0IHRyYWlsZXIgPSByb290W194ZmFfb2JqZWN0LiRzZWFyY2hOb2RlXSh0aGlzLnRyYWlsZXIsIHBhcmVudCk7XG5cbiAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXSA9IHtcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXQgJiYgdGFyZ2V0WzBdIHx8IG51bGwsXG4gICAgICAgIGxlYWRlcjogbGVhZGVyICYmIGxlYWRlclswXSB8fCBudWxsLFxuICAgICAgICB0cmFpbGVyOiB0cmFpbGVyICYmIHRyYWlsZXJbMF0gfHwgbnVsbCxcbiAgICAgICAgYWRkTGVhZGVyOiBmYWxzZSxcbiAgICAgICAgYWRkVHJhaWxlcjogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXTtcbiAgfVxuXG59XG5cbmNsYXNzIFBhZ2VBcmVhIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcInBhZ2VBcmVhXCIsIHRydWUpO1xuICAgIHRoaXMuYmxhbmtPck5vdEJsYW5rID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMuYmxhbmtPck5vdEJsYW5rLCBbXCJhbnlcIiwgXCJibGFua1wiLCBcIm5vdEJsYW5rXCJdKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMuaW5pdGlhbE51bWJlciA9ICgwLCBfdXRpbHMuZ2V0SW50ZWdlcikoe1xuICAgICAgZGF0YTogYXR0cmlidXRlcy5pbml0aWFsTnVtYmVyLFxuICAgICAgZGVmYXVsdFZhbHVlOiAxLFxuICAgICAgdmFsaWRhdGU6IHggPT4gdHJ1ZVxuICAgIH0pO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCBcIlwiO1xuICAgIHRoaXMubnVtYmVyZWQgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMubnVtYmVyZWQsXG4gICAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy5vZGRPckV2ZW4gPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5vZGRPckV2ZW4sIFtcImFueVwiLCBcImV2ZW5cIiwgXCJvZGRcIl0pO1xuICAgIHRoaXMucGFnZVBvc2l0aW9uID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMucGFnZVBvc2l0aW9uLCBbXCJhbnlcIiwgXCJmaXJzdFwiLCBcImxhc3RcIiwgXCJvbmx5XCIsIFwicmVzdFwiXSk7XG4gICAgdGhpcy5yZWxldmFudCA9ICgwLCBfdXRpbHMuZ2V0UmVsZXZhbnQpKGF0dHJpYnV0ZXMucmVsZXZhbnQpO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmRlc2MgPSBudWxsO1xuICAgIHRoaXMuZXh0cmFzID0gbnVsbDtcbiAgICB0aGlzLm1lZGl1bSA9IG51bGw7XG4gICAgdGhpcy5vY2N1ciA9IG51bGw7XG4gICAgdGhpcy5hcmVhID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5jb250ZW50QXJlYSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZHJhdyA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZXhjbEdyb3VwID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5maWVsZCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuc3ViZm9ybSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRpc1VzYWJsZV0oKSB7XG4gICAgaWYgKCF0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0pIHtcbiAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXSA9IHtcbiAgICAgICAgbnVtYmVyT2ZVc2U6IDBcbiAgICAgIH07XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gIXRoaXMub2NjdXIgfHwgdGhpcy5vY2N1ci5tYXggPT09IC0xIHx8IHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5udW1iZXJPZlVzZSA8IHRoaXMub2NjdXIubWF4O1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRjbGVhblBhZ2VdKCkge1xuICAgIGRlbGV0ZSB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV07XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGdldE5leHRQYWdlXSgpIHtcbiAgICBpZiAoIXRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXSkge1xuICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdID0ge1xuICAgICAgICBudW1iZXJPZlVzZTogMFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCk7XG5cbiAgICBpZiAocGFyZW50LnJlbGF0aW9uID09PSBcIm9yZGVyZWRPY2N1cnJlbmNlXCIpIHtcbiAgICAgIGlmICh0aGlzW194ZmFfb2JqZWN0LiRpc1VzYWJsZV0oKSkge1xuICAgICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0ubnVtYmVyT2ZVc2UgKz0gMTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudFtfeGZhX29iamVjdC4kZ2V0TmV4dFBhZ2VdKCk7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGdldEF2YWlsYWJsZVNwYWNlXSgpIHtcbiAgICByZXR1cm4gdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLnNwYWNlIHx8IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXSgpIHtcbiAgICBpZiAoIXRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXSkge1xuICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdID0ge1xuICAgICAgICBudW1iZXJPZlVzZTogMVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZHJlbiA9IFtdO1xuICAgIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIGNvbnN0IHN0eWxlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIGlmICh0aGlzLm1lZGl1bSAmJiB0aGlzLm1lZGl1bS5zaG9ydCAmJiB0aGlzLm1lZGl1bS5sb25nKSB7XG4gICAgICBzdHlsZS53aWR0aCA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubWVkaXVtLnNob3J0KTtcbiAgICAgIHN0eWxlLmhlaWdodCA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubWVkaXVtLmxvbmcpO1xuICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLnNwYWNlID0ge1xuICAgICAgICB3aWR0aDogdGhpcy5tZWRpdW0uc2hvcnQsXG4gICAgICAgIGhlaWdodDogdGhpcy5tZWRpdW0ubG9uZ1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMubWVkaXVtLm9yaWVudGF0aW9uID09PSBcImxhbmRzY2FwZVwiKSB7XG4gICAgICAgIGNvbnN0IHggPSBzdHlsZS53aWR0aDtcbiAgICAgICAgc3R5bGUud2lkdGggPSBzdHlsZS5oZWlnaHQ7XG4gICAgICAgIHN0eWxlLmhlaWdodCA9IHg7XG4gICAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5zcGFjZSA9IHtcbiAgICAgICAgICB3aWR0aDogdGhpcy5tZWRpdW0ubG9uZyxcbiAgICAgICAgICBoZWlnaHQ6IHRoaXMubWVkaXVtLnNob3J0XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIlhGQSAtIE5vIG1lZGl1bSBzcGVjaWZpZWQgaW4gcGFnZUFyZWE6IHBsZWFzZSBmaWxlIGEgYnVnLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzW194ZmFfb2JqZWN0LiRjaGlsZHJlblRvSFRNTF0oe1xuICAgICAgZmlsdGVyOiBuZXcgU2V0KFtcImFyZWFcIiwgXCJkcmF3XCIsIFwiZmllbGRcIiwgXCJzdWJmb3JtXCJdKSxcbiAgICAgIGluY2x1ZGU6IHRydWVcbiAgICB9KTtcblxuICAgIHRoaXNbX3hmYV9vYmplY3QuJGNoaWxkcmVuVG9IVE1MXSh7XG4gICAgICBmaWx0ZXI6IG5ldyBTZXQoW1wiY29udGVudEFyZWFcIl0pLFxuICAgICAgaW5jbHVkZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe1xuICAgICAgbmFtZTogXCJkaXZcIixcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBjbGFzczogW1wieGZhUGFnZVwiXSxcbiAgICAgICAgaWQ6IHRoaXNbX3hmYV9vYmplY3QuJHVpZF0sXG4gICAgICAgIHN0eWxlLFxuICAgICAgICB4ZmFOYW1lOiB0aGlzLm5hbWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG59XG5cbmNsYXNzIFBhZ2VTZXQgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwicGFnZVNldFwiLCB0cnVlKTtcbiAgICB0aGlzLmR1cGxleEltcG9zaXRpb24gPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5kdXBsZXhJbXBvc2l0aW9uLCBbXCJsb25nRWRnZVwiLCBcInNob3J0RWRnZVwiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLnJlbGF0aW9uID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMucmVsYXRpb24sIFtcIm9yZGVyZWRPY2N1cnJlbmNlXCIsIFwiZHVwbGV4UGFnaW5hdGVkXCIsIFwic2ltcGxleFBhZ2luYXRlZFwiXSk7XG4gICAgdGhpcy5yZWxldmFudCA9ICgwLCBfdXRpbHMuZ2V0UmVsZXZhbnQpKGF0dHJpYnV0ZXMucmVsZXZhbnQpO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5vY2N1ciA9IG51bGw7XG4gICAgdGhpcy5wYWdlQXJlYSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMucGFnZVNldCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRjbGVhblBhZ2VdKCkge1xuICAgIGZvciAoY29uc3QgcGFnZSBvZiB0aGlzLnBhZ2VBcmVhLmNoaWxkcmVuKSB7XG4gICAgICBwYWdlW194ZmFfb2JqZWN0LiRjbGVhblBhZ2VdKCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwYWdlIG9mIHRoaXMucGFnZVNldC5jaGlsZHJlbikge1xuICAgICAgcGFnZVtfeGZhX29iamVjdC4kY2xlYW5QYWdlXSgpO1xuICAgIH1cbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kaXNVc2FibGVdKCkge1xuICAgIHJldHVybiAhdGhpcy5vY2N1ciB8fCB0aGlzLm9jY3VyLm1heCA9PT0gLTEgfHwgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLm51bWJlck9mVXNlIDwgdGhpcy5vY2N1ci5tYXg7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGdldE5leHRQYWdlXSgpIHtcbiAgICBpZiAoIXRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXSkge1xuICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdID0ge1xuICAgICAgICBudW1iZXJPZlVzZTogMSxcbiAgICAgICAgcGFnZUluZGV4OiAtMSxcbiAgICAgICAgcGFnZVNldEluZGV4OiAtMVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWxhdGlvbiA9PT0gXCJvcmRlcmVkT2NjdXJyZW5jZVwiKSB7XG4gICAgICBpZiAodGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLnBhZ2VJbmRleCArIDEgPCB0aGlzLnBhZ2VBcmVhLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0ucGFnZUluZGV4ICs9IDE7XG4gICAgICAgIGNvbnN0IHBhZ2VBcmVhID0gdGhpcy5wYWdlQXJlYS5jaGlsZHJlblt0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0ucGFnZUluZGV4XTtcbiAgICAgICAgcmV0dXJuIHBhZ2VBcmVhW194ZmFfb2JqZWN0LiRnZXROZXh0UGFnZV0oKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5wYWdlU2V0SW5kZXggKyAxIDwgdGhpcy5wYWdlU2V0LmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0ucGFnZVNldEluZGV4ICs9IDE7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VTZXQuY2hpbGRyZW5bdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLnBhZ2VTZXRJbmRleF1bX3hmYV9vYmplY3QuJGdldE5leHRQYWdlXSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1tfeGZhX29iamVjdC4kaXNVc2FibGVdKCkpIHtcbiAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLm51bWJlck9mVXNlICs9IDE7XG4gICAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5wYWdlSW5kZXggPSAtMTtcbiAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLnBhZ2VTZXRJbmRleCA9IC0xO1xuICAgICAgICByZXR1cm4gdGhpc1tfeGZhX29iamVjdC4kZ2V0TmV4dFBhZ2VdKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXNbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFBhZ2VTZXQpIHtcbiAgICAgICAgcmV0dXJuIHBhcmVudFtfeGZhX29iamVjdC4kZ2V0TmV4dFBhZ2VdKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGNsZWFuUGFnZV0oKTtcblxuICAgICAgcmV0dXJuIHRoaXNbX3hmYV9vYmplY3QuJGdldE5leHRQYWdlXSgpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSB0aGlzW194ZmFfb2JqZWN0LiRnZXRUZW1wbGF0ZVJvb3RdKClbX3hmYV9vYmplY3QuJGV4dHJhXS5wYWdlTnVtYmVyO1xuXG4gICAgY29uc3QgcGFyaXR5ID0gcGFnZU51bWJlciAlIDIgPT09IDAgPyBcImV2ZW5cIiA6IFwib2RkXCI7XG4gICAgY29uc3QgcG9zaXRpb24gPSBwYWdlTnVtYmVyID09PSAwID8gXCJmaXJzdFwiIDogXCJyZXN0XCI7XG4gICAgbGV0IHBhZ2UgPSB0aGlzLnBhZ2VBcmVhLmNoaWxkcmVuLmZpbmQocCA9PiBwLm9kZE9yRXZlbiA9PT0gcGFyaXR5ICYmIHAucGFnZVBvc2l0aW9uID09PSBwb3NpdGlvbik7XG5cbiAgICBpZiAocGFnZSkge1xuICAgICAgcmV0dXJuIHBhZ2U7XG4gICAgfVxuXG4gICAgcGFnZSA9IHRoaXMucGFnZUFyZWEuY2hpbGRyZW4uZmluZChwID0+IHAub2RkT3JFdmVuID09PSBcImFueVwiICYmIHAucGFnZVBvc2l0aW9uID09PSBwb3NpdGlvbik7XG5cbiAgICBpZiAocGFnZSkge1xuICAgICAgcmV0dXJuIHBhZ2U7XG4gICAgfVxuXG4gICAgcGFnZSA9IHRoaXMucGFnZUFyZWEuY2hpbGRyZW4uZmluZChwID0+IHAub2RkT3JFdmVuID09PSBcImFueVwiICYmIHAucGFnZVBvc2l0aW9uID09PSBcImFueVwiKTtcblxuICAgIGlmIChwYWdlKSB7XG4gICAgICByZXR1cm4gcGFnZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wYWdlQXJlYS5jaGlsZHJlblswXTtcbiAgfVxuXG59XG5cbmNsYXNzIFBhcmEgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwicGFyYVwiLCB0cnVlKTtcbiAgICB0aGlzLmhBbGlnbiA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmhBbGlnbiwgW1wibGVmdFwiLCBcImNlbnRlclwiLCBcImp1c3RpZnlcIiwgXCJqdXN0aWZ5QWxsXCIsIFwicmFkaXhcIiwgXCJyaWdodFwiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLmxpbmVIZWlnaHQgPSBhdHRyaWJ1dGVzLmxpbmVIZWlnaHQgPyAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLmxpbmVIZWlnaHQsIFwiMHB0XCIpIDogXCJcIjtcbiAgICB0aGlzLm1hcmdpbkxlZnQgPSBhdHRyaWJ1dGVzLm1hcmdpbkxlZnQgPyAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLm1hcmdpbkxlZnQsIFwiMHB0XCIpIDogXCJcIjtcbiAgICB0aGlzLm1hcmdpblJpZ2h0ID0gYXR0cmlidXRlcy5tYXJnaW5SaWdodCA/ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMubWFyZ2luUmlnaHQsIFwiMHB0XCIpIDogXCJcIjtcbiAgICB0aGlzLm9ycGhhbnMgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMub3JwaGFucyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPj0gMFxuICAgIH0pO1xuICAgIHRoaXMucHJlc2VydmUgPSBhdHRyaWJ1dGVzLnByZXNlcnZlIHx8IFwiXCI7XG4gICAgdGhpcy5yYWRpeE9mZnNldCA9IGF0dHJpYnV0ZXMucmFkaXhPZmZzZXQgPyAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLnJhZGl4T2Zmc2V0LCBcIjBwdFwiKSA6IFwiXCI7XG4gICAgdGhpcy5zcGFjZUFib3ZlID0gYXR0cmlidXRlcy5zcGFjZUFib3ZlID8gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy5zcGFjZUFib3ZlLCBcIjBwdFwiKSA6IFwiXCI7XG4gICAgdGhpcy5zcGFjZUJlbG93ID0gYXR0cmlidXRlcy5zcGFjZUJlbG93ID8gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy5zcGFjZUJlbG93LCBcIjBwdFwiKSA6IFwiXCI7XG4gICAgdGhpcy50YWJEZWZhdWx0ID0gYXR0cmlidXRlcy50YWJEZWZhdWx0ID8gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkodGhpcy50YWJEZWZhdWx0KSA6IFwiXCI7XG4gICAgdGhpcy50YWJTdG9wcyA9IChhdHRyaWJ1dGVzLnRhYlN0b3BzIHx8IFwiXCIpLnRyaW0oKS5zcGxpdCgvXFxzKy8pLm1hcCgoeCwgaSkgPT4gaSAlIDIgPT09IDEgPyAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KSh4KSA6IHgpO1xuICAgIHRoaXMudGV4dEluZGVudCA9IGF0dHJpYnV0ZXMudGV4dEluZGVudCA/ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMudGV4dEluZGVudCwgXCIwcHRcIikgOiBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLnZBbGlnbiA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnZBbGlnbiwgW1widG9wXCIsIFwiYm90dG9tXCIsIFwibWlkZGxlXCJdKTtcbiAgICB0aGlzLndpZG93cyA9ICgwLCBfdXRpbHMuZ2V0SW50ZWdlcikoe1xuICAgICAgZGF0YTogYXR0cmlidXRlcy53aWRvd3MsXG4gICAgICBkZWZhdWx0VmFsdWU6IDAsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID49IDBcbiAgICB9KTtcbiAgICB0aGlzLmh5cGhlbmF0aW9uID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9TdHlsZV0oKSB7XG4gICAgY29uc3Qgc3R5bGUgPSAoMCwgX2h0bWxfdXRpbHMudG9TdHlsZSkodGhpcywgXCJoQWxpZ25cIik7XG5cbiAgICBpZiAodGhpcy5tYXJnaW5MZWZ0ICE9PSBcIlwiKSB7XG4gICAgICBzdHlsZS5wYWRkaW5nTGVmdCA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubWFyZ2luTGVmdCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWFyZ2luUmlnaHQgIT09IFwiXCIpIHtcbiAgICAgIHN0eWxlLnBhZGRpbmdpZ2h0ID0gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5tYXJnaW5SaWdodCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3BhY2VBYm92ZSAhPT0gXCJcIikge1xuICAgICAgc3R5bGUucGFkZGluZ1RvcCA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMuc3BhY2VBYm92ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3BhY2VCZWxvdyAhPT0gXCJcIikge1xuICAgICAgc3R5bGUucGFkZGluZ0JvdHRvbSA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMuc3BhY2VCZWxvdyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGV4dEluZGVudCAhPT0gXCJcIikge1xuICAgICAgc3R5bGUudGV4dEluZGVudCA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMudGV4dEluZGVudCk7XG4gICAgICAoMCwgX2h0bWxfdXRpbHMuZml4VGV4dEluZGVudCkoc3R5bGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxpbmVIZWlnaHQgPiAwKSB7XG4gICAgICBzdHlsZS5saW5lSGVpZ2h0ID0gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5saW5lSGVpZ2h0KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50YWJEZWZhdWx0ICE9PSBcIlwiKSB7XG4gICAgICBzdHlsZS50YWJTaXplID0gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykodGhpcy50YWJEZWZhdWx0KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50YWJTdG9wcy5sZW5ndGggPiAwKSB7fVxuXG4gICAgaWYgKHRoaXMuaHlwaGVuYXRhdGlvbikge1xuICAgICAgT2JqZWN0LmFzc2lnbihzdHlsZSwgdGhpcy5oeXBoZW5hdGF0aW9uW194ZmFfb2JqZWN0LiR0b1N0eWxlXSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cblxufVxuXG5jbGFzcyBQYXNzd29yZEVkaXQgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwicGFzc3dvcmRFZGl0XCIsIHRydWUpO1xuICAgIHRoaXMuaFNjcm9sbFBvbGljeSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmhTY3JvbGxQb2xpY3ksIFtcImF1dG9cIiwgXCJvZmZcIiwgXCJvblwiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnBhc3N3b3JkQ2hhciA9IGF0dHJpYnV0ZXMucGFzc3dvcmRDaGFyIHx8IFwiKlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmJvcmRlciA9IG51bGw7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICAgIHRoaXMubWFyZ2luID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFBhdHRlcm4gZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwicGF0dGVyblwiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMudHlwZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnR5cGUsIFtcImNyb3NzSGF0Y2hcIiwgXCJjcm9zc0RpYWdvbmFsXCIsIFwiZGlhZ29uYWxMZWZ0XCIsIFwiZGlhZ29uYWxSaWdodFwiLCBcImhvcml6b250YWxcIiwgXCJ2ZXJ0aWNhbFwiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuY29sb3IgPSBudWxsO1xuICAgIHRoaXMuZXh0cmFzID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9TdHlsZV0oc3RhcnRDb2xvcikge1xuICAgIHN0YXJ0Q29sb3IgPSBzdGFydENvbG9yID8gc3RhcnRDb2xvcltfeGZhX29iamVjdC4kdG9TdHlsZV0oKSA6IFwiI0ZGRkZGRlwiO1xuICAgIGNvbnN0IGVuZENvbG9yID0gdGhpcy5jb2xvciA/IHRoaXMuY29sb3JbX3hmYV9vYmplY3QuJHRvU3R5bGVdKCkgOiBcIiMwMDAwMDBcIjtcbiAgICBjb25zdCB3aWR0aCA9IDU7XG4gICAgY29uc3QgY21kID0gXCJyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50XCI7XG4gICAgY29uc3QgY29sb3JzID0gYCR7c3RhcnRDb2xvcn0sJHtzdGFydENvbG9yfSAke3dpZHRofXB4LCR7ZW5kQ29sb3J9ICR7d2lkdGh9cHgsJHtlbmRDb2xvcn0gJHsyICogd2lkdGh9cHhgO1xuXG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJjcm9zc0hhdGNoXCI6XG4gICAgICAgIHJldHVybiBgJHtjbWR9KHRvIHRvcCwke2NvbG9yc30pICR7Y21kfSh0byByaWdodCwke2NvbG9yc30pYDtcblxuICAgICAgY2FzZSBcImNyb3NzRGlhZ29uYWxcIjpcbiAgICAgICAgcmV0dXJuIGAke2NtZH0oNDVkZWcsJHtjb2xvcnN9KSAke2NtZH0oLTQ1ZGVnLCR7Y29sb3JzfSlgO1xuXG4gICAgICBjYXNlIFwiZGlhZ29uYWxMZWZ0XCI6XG4gICAgICAgIHJldHVybiBgJHtjbWR9KDQ1ZGVnLCR7Y29sb3JzfSlgO1xuXG4gICAgICBjYXNlIFwiZGlhZ29uYWxSaWdodFwiOlxuICAgICAgICByZXR1cm4gYCR7Y21kfSgtNDVkZWcsJHtjb2xvcnN9KWA7XG5cbiAgICAgIGNhc2UgXCJob3Jpem9udGFsXCI6XG4gICAgICAgIHJldHVybiBgJHtjbWR9KHRvIHRvcCwke2NvbG9yc30pYDtcblxuICAgICAgY2FzZSBcInZlcnRpY2FsXCI6XG4gICAgICAgIHJldHVybiBgJHtjbWR9KHRvIHJpZ2h0LCR7Y29sb3JzfSlgO1xuICAgIH1cblxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbn1cblxuY2xhc3MgUGljdHVyZSBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJwaWN0dXJlXCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbn1cblxuY2xhc3MgUHJvdG8gZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwicHJvdG9cIiwgdHJ1ZSk7XG4gICAgdGhpcy5hcHBlYXJhbmNlRmlsdGVyID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5hcmMgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmFyZWEgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmFzc2lzdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuYmFyY29kZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuYmluZEl0ZW1zID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5ib29rZW5kID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5ib29sZWFuID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5ib3JkZXIgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmJyZWFrID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5icmVha0FmdGVyID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5icmVha0JlZm9yZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuYnV0dG9uID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5jYWxjdWxhdGUgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmNhcHRpb24gPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmNlcnRpZmljYXRlID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5jZXJ0aWZpY2F0ZXMgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmNoZWNrQnV0dG9uID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5jaG9pY2VMaXN0ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5jb2xvciA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuY29tYiA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuY29ubmVjdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuY29udGVudEFyZWEgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmNvcm5lciA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZGF0ZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZGF0ZVRpbWUgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmRhdGVUaW1lRWRpdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZGVjaW1hbCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZGVmYXVsdFVpID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5kZXNjID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5kaWdlc3RNZXRob2QgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmRpZ2VzdE1ldGhvZHMgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmRyYXcgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmVkZ2UgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmVuY29kaW5nID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5lbmNvZGluZ3MgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmVuY3J5cHQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmVuY3J5cHREYXRhID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5lbmNyeXB0aW9uID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5lbmNyeXB0aW9uTWV0aG9kID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5lbmNyeXB0aW9uTWV0aG9kcyA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZXZlbnQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmV4RGF0YSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZXhPYmplY3QgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmV4Y2xHcm91cCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZXhlY3V0ZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZXh0cmFzID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5maWVsZCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZmlsbCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZmlsdGVyID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5mbG9hdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZm9udCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZm9ybWF0ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5oYW5kbGVyID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5oeXBoZW5hdGlvbiA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuaW1hZ2UgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmltYWdlRWRpdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuaW50ZWdlciA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuaXNzdWVycyA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuaXRlbXMgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmtlZXAgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmtleVVzYWdlID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5saW5lID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5saW5lYXIgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmxvY2tEb2N1bWVudCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMubWFuaWZlc3QgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLm1hcmdpbiA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMubWRwID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5tZWRpdW0gPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLm1lc3NhZ2UgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLm51bWVyaWNFZGl0ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5vY2N1ciA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMub2lkID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5vaWRzID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5vdmVyZmxvdyA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMucGFnZUFyZWEgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnBhZ2VTZXQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnBhcmEgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnBhc3N3b3JkRWRpdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMucGF0dGVybiA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMucGljdHVyZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMucmFkaWFsID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5yZWFzb24gPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnJlYXNvbnMgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnJlY3RhbmdsZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMucmVmID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5zY3JpcHQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnNldFByb3BlcnR5ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5zaWduRGF0YSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuc2lnbmF0dXJlID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5zaWduaW5nID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5zb2xpZCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuc3BlYWsgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnN0aXBwbGUgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnN1YmZvcm0gPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnN1YmZvcm1TZXQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnN1YmplY3RETiA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuc3ViamVjdEROcyA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuc3VibWl0ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy50ZXh0ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy50ZXh0RWRpdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMudGltZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMudGltZVN0YW1wID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy50b29sVGlwID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy50cmF2ZXJzYWwgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnRyYXZlcnNlID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy51aSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMudmFsaWRhdGUgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnZhbHVlID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy52YXJpYWJsZXMgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG59XG5cbmNsYXNzIFJhZGlhbCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJyYWRpYWxcIiwgdHJ1ZSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnR5cGUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy50eXBlLCBbXCJ0b0VkZ2VcIiwgXCJ0b0NlbnRlclwiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuY29sb3IgPSBudWxsO1xuICAgIHRoaXMuZXh0cmFzID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9TdHlsZV0oc3RhcnRDb2xvcikge1xuICAgIHN0YXJ0Q29sb3IgPSBzdGFydENvbG9yID8gc3RhcnRDb2xvcltfeGZhX29iamVjdC4kdG9TdHlsZV0oKSA6IFwiI0ZGRkZGRlwiO1xuICAgIGNvbnN0IGVuZENvbG9yID0gdGhpcy5jb2xvciA/IHRoaXMuY29sb3JbX3hmYV9vYmplY3QuJHRvU3R5bGVdKCkgOiBcIiMwMDAwMDBcIjtcbiAgICBjb25zdCBjb2xvcnMgPSB0aGlzLnR5cGUgPT09IFwidG9FZGdlXCIgPyBgJHtzdGFydENvbG9yfSwke2VuZENvbG9yfWAgOiBgJHtlbmRDb2xvcn0sJHtzdGFydENvbG9yfWA7XG4gICAgcmV0dXJuIGByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IGNlbnRlciwgJHtjb2xvcnN9KWA7XG4gIH1cblxufVxuXG5jbGFzcyBSZWFzb24gZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwicmVhc29uXCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbn1cblxuY2xhc3MgUmVhc29ucyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJyZWFzb25zXCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy50eXBlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMudHlwZSwgW1wib3B0aW9uYWxcIiwgXCJyZXF1aXJlZFwiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMucmVhc29uID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gIH1cblxufVxuXG5jbGFzcyBSZWN0YW5nbGUgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwicmVjdGFuZ2xlXCIsIHRydWUpO1xuICAgIHRoaXMuaGFuZCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmhhbmQsIFtcImV2ZW5cIiwgXCJsZWZ0XCIsIFwicmlnaHRcIl0pO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuY29ybmVyID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KDQpO1xuICAgIHRoaXMuZWRnZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSg0KTtcbiAgICB0aGlzLmZpbGwgPSBudWxsO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b0hUTUxdKCkge1xuICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmVkZ2UuY2hpbGRyZW4ubGVuZ3RoID8gdGhpcy5lZGdlLmNoaWxkcmVuWzBdIDogbmV3IEVkZ2Uoe30pO1xuXG4gICAgY29uc3QgZWRnZVN0eWxlID0gZWRnZVtfeGZhX29iamVjdC4kdG9TdHlsZV0oKTtcblxuICAgIGNvbnN0IHN0eWxlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIGlmICh0aGlzLmZpbGwgJiYgdGhpcy5maWxsLnByZXNlbmNlID09PSBcInZpc2libGVcIikge1xuICAgICAgT2JqZWN0LmFzc2lnbihzdHlsZSwgdGhpcy5maWxsW194ZmFfb2JqZWN0LiR0b1N0eWxlXSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGUuZmlsbCA9IFwidHJhbnNwYXJlbnRcIjtcbiAgICB9XG5cbiAgICBzdHlsZS5zdHJva2VXaWR0aCA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKGVkZ2UucHJlc2VuY2UgPT09IFwidmlzaWJsZVwiID8gZWRnZS50aGlja25lc3MgOiAwKTtcbiAgICBzdHlsZS5zdHJva2UgPSBlZGdlU3R5bGUuY29sb3I7XG4gICAgY29uc3QgY29ybmVyID0gdGhpcy5jb3JuZXIuY2hpbGRyZW4ubGVuZ3RoID8gdGhpcy5jb3JuZXIuY2hpbGRyZW5bMF0gOiBuZXcgQ29ybmVyKHt9KTtcblxuICAgIGNvbnN0IGNvcm5lclN0eWxlID0gY29ybmVyW194ZmFfb2JqZWN0LiR0b1N0eWxlXSgpO1xuXG4gICAgY29uc3QgcmVjdCA9IHtcbiAgICAgIG5hbWU6IFwicmVjdFwiLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICB4bWxuczogU1ZHX05TLFxuICAgICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICAgIHg6IDAsXG4gICAgICAgIHk6IDAsXG4gICAgICAgIHJ4OiBjb3JuZXJTdHlsZS5yYWRpdXMsXG4gICAgICAgIHJ5OiBjb3JuZXJTdHlsZS5yYWRpdXMsXG4gICAgICAgIHN0eWxlXG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzdmcgPSB7XG4gICAgICBuYW1lOiBcInN2Z1wiLFxuICAgICAgY2hpbGRyZW46IFtyZWN0XSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgeG1sbnM6IFNWR19OUyxcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBvdmVyZmxvdzogXCJ2aXNpYmxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTAwJVwiXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXNbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKVtfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpO1xuXG4gICAgaWYgKGhhc01hcmdpbihwYXJlbnQpKSB7XG4gICAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7XG4gICAgICAgIG5hbWU6IFwiZGl2XCIsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgZGlzcGxheTogXCJpbmxpbmVcIixcbiAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgICAgIGhlaWdodDogXCIxMDAlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNoaWxkcmVuOiBbc3ZnXVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3ZnLmF0dHJpYnV0ZXMuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moc3ZnKTtcbiAgfVxuXG59XG5cbmNsYXNzIFJlZkVsZW1lbnQgZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwicmVmXCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbn1cblxuY2xhc3MgU2NyaXB0IGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcInNjcmlwdFwiKTtcbiAgICB0aGlzLmJpbmRpbmcgPSBhdHRyaWJ1dGVzLmJpbmRpbmcgfHwgXCJcIjtcbiAgICB0aGlzLmNvbnRlbnRUeXBlID0gYXR0cmlidXRlcy5jb250ZW50VHlwZSB8fCBcIlwiO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy5ydW5BdCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnJ1bkF0LCBbXCJjbGllbnRcIiwgXCJib3RoXCIsIFwic2VydmVyXCJdKTtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxufVxuXG5jbGFzcyBTZXRQcm9wZXJ0eSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJzZXRQcm9wZXJ0eVwiKTtcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBhdHRyaWJ1dGVzLmNvbm5lY3Rpb24gfHwgXCJcIjtcbiAgICB0aGlzLnJlZiA9IGF0dHJpYnV0ZXMucmVmIHx8IFwiXCI7XG4gICAgdGhpcy50YXJnZXQgPSBhdHRyaWJ1dGVzLnRhcmdldCB8fCBcIlwiO1xuICB9XG5cbn1cblxuZXhwb3J0cy5TZXRQcm9wZXJ0eSA9IFNldFByb3BlcnR5O1xuXG5jbGFzcyBTaWduRGF0YSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJzaWduRGF0YVwiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMub3BlcmF0aW9uID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMub3BlcmF0aW9uLCBbXCJzaWduXCIsIFwiY2xlYXJcIiwgXCJ2ZXJpZnlcIl0pO1xuICAgIHRoaXMucmVmID0gYXR0cmlidXRlcy5yZWYgfHwgXCJcIjtcbiAgICB0aGlzLnRhcmdldCA9IGF0dHJpYnV0ZXMudGFyZ2V0IHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuZmlsdGVyID0gbnVsbDtcbiAgICB0aGlzLm1hbmlmZXN0ID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFNpZ25hdHVyZSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJzaWduYXR1cmVcIiwgdHJ1ZSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnR5cGUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy50eXBlLCBbXCJQREYxLjNcIiwgXCJQREYxLjZcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmJvcmRlciA9IG51bGw7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyID0gbnVsbDtcbiAgICB0aGlzLm1hbmlmZXN0ID0gbnVsbDtcbiAgICB0aGlzLm1hcmdpbiA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBTaWduaW5nIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcInNpZ25pbmdcIiwgdHJ1ZSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnR5cGUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy50eXBlLCBbXCJvcHRpb25hbFwiLCBcInJlcXVpcmVkXCJdKTtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5jZXJ0aWZpY2F0ZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgU29saWQgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwic29saWRcIiwgdHJ1ZSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b1N0eWxlXShzdGFydENvbG9yKSB7XG4gICAgcmV0dXJuIHN0YXJ0Q29sb3IgPyBzdGFydENvbG9yW194ZmFfb2JqZWN0LiR0b1N0eWxlXSgpIDogXCIjRkZGRkZGXCI7XG4gIH1cblxufVxuXG5jbGFzcyBTcGVhayBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJzcGVha1wiKTtcbiAgICB0aGlzLmRpc2FibGUgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuZGlzYWJsZSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDFcbiAgICB9KTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMucHJpb3JpdHkgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5wcmlvcml0eSwgW1wiY3VzdG9tXCIsIFwiY2FwdGlvblwiLCBcIm5hbWVcIiwgXCJ0b29sVGlwXCJdKTtcbiAgICB0aGlzLnJpZCA9IGF0dHJpYnV0ZXMucmlkIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbn1cblxuY2xhc3MgU3RpcHBsZSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJzdGlwcGxlXCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5yYXRlID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLnJhdGUsXG4gICAgICBkZWZhdWx0VmFsdWU6IDUwLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA+PSAwICYmIHggPD0gMTAwXG4gICAgfSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuY29sb3IgPSBudWxsO1xuICAgIHRoaXMuZXh0cmFzID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9TdHlsZV0oYmdDb2xvcikge1xuICAgIGNvbnN0IGFscGhhID0gdGhpcy5yYXRlIC8gMTAwO1xuICAgIHJldHVybiBfdXRpbC5VdGlsLm1ha2VIZXhDb2xvcihNYXRoLnJvdW5kKGJnQ29sb3IudmFsdWUuciAqICgxIC0gYWxwaGEpICsgdGhpcy52YWx1ZS5yICogYWxwaGEpLCBNYXRoLnJvdW5kKGJnQ29sb3IudmFsdWUuZyAqICgxIC0gYWxwaGEpICsgdGhpcy52YWx1ZS5nICogYWxwaGEpLCBNYXRoLnJvdW5kKGJnQ29sb3IudmFsdWUuYiAqICgxIC0gYWxwaGEpICsgdGhpcy52YWx1ZS5iICogYWxwaGEpKTtcbiAgfVxuXG59XG5cbmNsYXNzIFN1YmZvcm0gZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwic3ViZm9ybVwiLCB0cnVlKTtcbiAgICB0aGlzLmFjY2VzcyA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmFjY2VzcywgW1wib3BlblwiLCBcIm5vbkludGVyYWN0aXZlXCIsIFwicHJvdGVjdGVkXCIsIFwicmVhZE9ubHlcIl0pO1xuICAgIHRoaXMuYWxsb3dNYWNybyA9ICgwLCBfdXRpbHMuZ2V0SW50ZWdlcikoe1xuICAgICAgZGF0YTogYXR0cmlidXRlcy5hbGxvd01hY3JvLFxuICAgICAgZGVmYXVsdFZhbHVlOiAwLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMVxuICAgIH0pO1xuICAgIHRoaXMuYW5jaG9yVHlwZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmFuY2hvclR5cGUsIFtcInRvcExlZnRcIiwgXCJib3R0b21DZW50ZXJcIiwgXCJib3R0b21MZWZ0XCIsIFwiYm90dG9tUmlnaHRcIiwgXCJtaWRkbGVDZW50ZXJcIiwgXCJtaWRkbGVMZWZ0XCIsIFwibWlkZGxlUmlnaHRcIiwgXCJ0b3BDZW50ZXJcIiwgXCJ0b3BSaWdodFwiXSk7XG4gICAgdGhpcy5jb2xTcGFuID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLmNvbFNwYW4sXG4gICAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgICB2YWxpZGF0ZTogbiA9PiBuID49IDEgfHwgbiA9PT0gLTFcbiAgICB9KTtcbiAgICB0aGlzLmNvbHVtbldpZHRocyA9IChhdHRyaWJ1dGVzLmNvbHVtbldpZHRocyB8fCBcIlwiKS50cmltKCkuc3BsaXQoL1xccysvKS5tYXAoeCA9PiB4ID09PSBcIi0xXCIgPyAtMSA6ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKHgpKTtcbiAgICB0aGlzLmggPSBhdHRyaWJ1dGVzLmggPyAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLmgpIDogXCJcIjtcbiAgICB0aGlzLmhBbGlnbiA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmhBbGlnbiwgW1wibGVmdFwiLCBcImNlbnRlclwiLCBcImp1c3RpZnlcIiwgXCJqdXN0aWZ5QWxsXCIsIFwicmFkaXhcIiwgXCJyaWdodFwiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLmxheW91dCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmxheW91dCwgW1wicG9zaXRpb25cIiwgXCJsci10YlwiLCBcInJsLXJvd1wiLCBcInJsLXRiXCIsIFwicm93XCIsIFwidGFibGVcIiwgXCJ0YlwiXSk7XG4gICAgdGhpcy5sb2NhbGUgPSBhdHRyaWJ1dGVzLmxvY2FsZSB8fCBcIlwiO1xuICAgIHRoaXMubWF4SCA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMubWF4SCwgXCIwcHRcIik7XG4gICAgdGhpcy5tYXhXID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy5tYXhXLCBcIjBwdFwiKTtcbiAgICB0aGlzLm1lcmdlTW9kZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLm1lcmdlTW9kZSwgW1wiY29uc3VtZURhdGFcIiwgXCJtYXRjaFRlbXBsYXRlXCJdKTtcbiAgICB0aGlzLm1pbkggPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLm1pbkgsIFwiMHB0XCIpO1xuICAgIHRoaXMubWluVyA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMubWluVywgXCIwcHRcIik7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy5wcmVzZW5jZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnByZXNlbmNlLCBbXCJ2aXNpYmxlXCIsIFwiaGlkZGVuXCIsIFwiaW5hY3RpdmVcIiwgXCJpbnZpc2libGVcIl0pO1xuICAgIHRoaXMucmVsZXZhbnQgPSAoMCwgX3V0aWxzLmdldFJlbGV2YW50KShhdHRyaWJ1dGVzLnJlbGV2YW50KTtcbiAgICB0aGlzLnJlc3RvcmVTdGF0ZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnJlc3RvcmVTdGF0ZSwgW1wibWFudWFsXCIsIFwiYXV0b1wiXSk7XG4gICAgdGhpcy5zY29wZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnNjb3BlLCBbXCJuYW1lXCIsIFwibm9uZVwiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMudyA9IGF0dHJpYnV0ZXMudyA/ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMudykgOiBcIlwiO1xuICAgIHRoaXMueCA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMueCwgXCIwcHRcIik7XG4gICAgdGhpcy55ID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy55LCBcIjBwdFwiKTtcbiAgICB0aGlzLmFzc2lzdCA9IG51bGw7XG4gICAgdGhpcy5iaW5kID0gbnVsbDtcbiAgICB0aGlzLmJvb2tlbmQgPSBudWxsO1xuICAgIHRoaXMuYm9yZGVyID0gbnVsbDtcbiAgICB0aGlzLmJyZWFrID0gbnVsbDtcbiAgICB0aGlzLmNhbGN1bGF0ZSA9IG51bGw7XG4gICAgdGhpcy5kZXNjID0gbnVsbDtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5rZWVwID0gbnVsbDtcbiAgICB0aGlzLm1hcmdpbiA9IG51bGw7XG4gICAgdGhpcy5vY2N1ciA9IG51bGw7XG4gICAgdGhpcy5vdmVyZmxvdyA9IG51bGw7XG4gICAgdGhpcy5wYWdlU2V0ID0gbnVsbDtcbiAgICB0aGlzLnBhcmEgPSBudWxsO1xuICAgIHRoaXMudHJhdmVyc2FsID0gbnVsbDtcbiAgICB0aGlzLnZhbGlkYXRlID0gbnVsbDtcbiAgICB0aGlzLnZhcmlhYmxlcyA9IG51bGw7XG4gICAgdGhpcy5hcmVhID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5icmVha0FmdGVyID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5icmVha0JlZm9yZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuY29ubmVjdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZHJhdyA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZXZlbnQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmV4T2JqZWN0ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5leGNsR3JvdXAgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmZpZWxkID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5wcm90byA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuc2V0UHJvcGVydHkgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnN1YmZvcm0gPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnN1YmZvcm1TZXQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kZ2V0U3ViZm9ybVBhcmVudF0oKSB7XG4gICAgY29uc3QgcGFyZW50ID0gdGhpc1tfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpO1xuXG4gICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFN1YmZvcm1TZXQpIHtcbiAgICAgIHJldHVybiBwYXJlbnRbX3hmYV9vYmplY3QuJGdldFN1YmZvcm1QYXJlbnRdKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kaXNCaW5kYWJsZV0oKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGlzVGhlcmVNb3JlV2lkdGhdKCkge1xuICAgIHJldHVybiB0aGlzLmxheW91dC5lbmRzV2l0aChcIi10YlwiKSAmJiB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uYXR0ZW1wdCA9PT0gMCAmJiB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0ubnVtYmVySW5MaW5lID4gMCB8fCB0aGlzW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKClbX3hmYV9vYmplY3QuJGlzVGhlcmVNb3JlV2lkdGhdKCk7XG4gIH1cblxuICAqW194ZmFfb2JqZWN0LiRnZXRDb250YWluZWRDaGlsZHJlbl0oKSB7XG4gICAgeWllbGQqIGdldENvbnRhaW5lZENoaWxkcmVuKHRoaXMpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRmbHVzaEhUTUxdKCkge1xuICAgIHJldHVybiAoMCwgX2xheW91dC5mbHVzaEhUTUwpKHRoaXMpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRhZGRIVE1MXShodG1sLCBiYm94KSB7XG4gICAgKDAsIF9sYXlvdXQuYWRkSFRNTCkodGhpcywgaHRtbCwgYmJveCk7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGdldEF2YWlsYWJsZVNwYWNlXSgpIHtcbiAgICByZXR1cm4gKDAsIF9sYXlvdXQuZ2V0QXZhaWxhYmxlU3BhY2UpKHRoaXMpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRpc1NwbGl0dGFibGVdKCkge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXNbX3hmYV9vYmplY3QuJGdldFN1YmZvcm1QYXJlbnRdKCk7XG5cbiAgICBpZiAoIXBhcmVudFtfeGZhX29iamVjdC4kaXNTcGxpdHRhYmxlXSgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5faXNTcGxpdHRhYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uX2lzU3BsaXR0YWJsZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sYXlvdXQgPT09IFwicG9zaXRpb25cIiB8fCB0aGlzLmxheW91dC5pbmNsdWRlcyhcInJvd1wiKSkge1xuICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLl9pc1NwbGl0dGFibGUgPSBmYWxzZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5rZWVwICYmIHRoaXMua2VlcC5pbnRhY3QgIT09IFwibm9uZVwiKSB7XG4gICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uX2lzU3BsaXR0YWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChwYXJlbnQubGF5b3V0ICYmIHBhcmVudC5sYXlvdXQuZW5kc1dpdGgoXCItdGJcIikgJiYgcGFyZW50W194ZmFfb2JqZWN0LiRleHRyYV0ubnVtYmVySW5MaW5lICE9PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLl9pc1NwbGl0dGFibGUgPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgc2V0VGFiSW5kZXgodGhpcyk7XG5cbiAgICBpZiAodGhpcy5icmVhaykge1xuICAgICAgaWYgKHRoaXMuYnJlYWsuYWZ0ZXIgIT09IFwiYXV0b1wiIHx8IHRoaXMuYnJlYWsuYWZ0ZXJUYXJnZXQgIT09IFwiXCIpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBCcmVha0FmdGVyKHtcbiAgICAgICAgICB0YXJnZXRUeXBlOiB0aGlzLmJyZWFrLmFmdGVyLFxuICAgICAgICAgIHRhcmdldDogdGhpcy5icmVhay5hZnRlclRhcmdldCxcbiAgICAgICAgICBzdGFydE5ldzogdGhpcy5icmVhay5zdGFydE5ldy50b1N0cmluZygpXG4gICAgICAgIH0pO1xuICAgICAgICBub2RlW194ZmFfb2JqZWN0LiRnbG9iYWxEYXRhXSA9IHRoaXNbX3hmYV9vYmplY3QuJGdsb2JhbERhdGFdO1xuXG4gICAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGFwcGVuZENoaWxkXShub2RlKTtcblxuICAgICAgICB0aGlzLmJyZWFrQWZ0ZXIucHVzaChub2RlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuYnJlYWsuYmVmb3JlICE9PSBcImF1dG9cIiB8fCB0aGlzLmJyZWFrLmJlZm9yZVRhcmdldCAhPT0gXCJcIikge1xuICAgICAgICBjb25zdCBub2RlID0gbmV3IEJyZWFrQmVmb3JlKHtcbiAgICAgICAgICB0YXJnZXRUeXBlOiB0aGlzLmJyZWFrLmJlZm9yZSxcbiAgICAgICAgICB0YXJnZXQ6IHRoaXMuYnJlYWsuYmVmb3JlVGFyZ2V0LFxuICAgICAgICAgIHN0YXJ0TmV3OiB0aGlzLmJyZWFrLnN0YXJ0TmV3LnRvU3RyaW5nKClcbiAgICAgICAgfSk7XG4gICAgICAgIG5vZGVbX3hmYV9vYmplY3QuJGdsb2JhbERhdGFdID0gdGhpc1tfeGZhX29iamVjdC4kZ2xvYmFsRGF0YV07XG5cbiAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kYXBwZW5kQ2hpbGRdKG5vZGUpO1xuXG4gICAgICAgIHRoaXMuYnJlYWtCZWZvcmUucHVzaChub2RlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuYnJlYWsub3ZlcmZsb3dUYXJnZXQgIT09IFwiXCIpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBPdmVyZmxvdyh7XG4gICAgICAgICAgdGFyZ2V0OiB0aGlzLmJyZWFrLm92ZXJmbG93VGFyZ2V0LFxuICAgICAgICAgIGxlYWRlcjogdGhpcy5icmVhay5vdmVyZmxvd0xlYWRlcixcbiAgICAgICAgICB0cmFpbGVyOiB0aGlzLmJyZWFrLm92ZXJmbG93VHJhaWxlclxuICAgICAgICB9KTtcbiAgICAgICAgbm9kZVtfeGZhX29iamVjdC4kZ2xvYmFsRGF0YV0gPSB0aGlzW194ZmFfb2JqZWN0LiRnbG9iYWxEYXRhXTtcblxuICAgICAgICB0aGlzW194ZmFfb2JqZWN0LiRhcHBlbmRDaGlsZF0obm9kZSk7XG5cbiAgICAgICAgdGhpcy5vdmVyZmxvdy5wdXNoKG5vZGUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzW194ZmFfb2JqZWN0LiRyZW1vdmVDaGlsZF0odGhpcy5icmVhayk7XG5cbiAgICAgIHRoaXMuYnJlYWsgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByZXNlbmNlID09PSBcImhpZGRlblwiIHx8IHRoaXMucHJlc2VuY2UgPT09IFwiaW5hY3RpdmVcIikge1xuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LkVNUFRZO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJyZWFrQmVmb3JlLmNoaWxkcmVuLmxlbmd0aCA+IDEgfHwgdGhpcy5icmVha0FmdGVyLmNoaWxkcmVuLmxlbmd0aCA+IDEpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIlhGQSAtIFNldmVyYWwgYnJlYWtCZWZvcmUgb3IgYnJlYWtBZnRlciBpbiBzdWJmb3JtczogcGxlYXNlIGZpbGUgYSBidWcuXCIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJyZWFrQmVmb3JlLmNoaWxkcmVuLmxlbmd0aCA+PSAxKSB7XG4gICAgICBjb25zdCBicmVha0JlZm9yZSA9IHRoaXMuYnJlYWtCZWZvcmUuY2hpbGRyZW5bMF07XG5cbiAgICAgIGlmIChoYW5kbGVCcmVhayhicmVha0JlZm9yZSkpIHtcbiAgICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LmJyZWFrTm9kZShicmVha0JlZm9yZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXSAmJiB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uYWZ0ZXJCcmVha0FmdGVyKSB7XG4gICAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuRU1QVFk7XG4gICAgfVxuXG4gICAgKDAsIF9odG1sX3V0aWxzLmZpeERpbWVuc2lvbnMpKHRoaXMpO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gW107XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgIGlkOiB0aGlzW194ZmFfb2JqZWN0LiR1aWRdLFxuICAgICAgY2xhc3M6IFtdXG4gICAgfTtcbiAgICAoMCwgX2h0bWxfdXRpbHMuc2V0QWNjZXNzKSh0aGlzLCBhdHRyaWJ1dGVzLmNsYXNzKTtcblxuICAgIGlmICghdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdKSB7XG4gICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIH1cblxuICAgIE9iamVjdC5hc3NpZ24odGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLCB7XG4gICAgICBjaGlsZHJlbixcbiAgICAgIGxpbmU6IG51bGwsXG4gICAgICBhdHRyaWJ1dGVzLFxuICAgICAgYXR0ZW1wdDogMCxcbiAgICAgIG51bWJlckluTGluZTogMCxcbiAgICAgIGF2YWlsYWJsZVNwYWNlOiB7XG4gICAgICAgIHdpZHRoOiBNYXRoLm1pbih0aGlzLncgfHwgSW5maW5pdHksIGF2YWlsYWJsZVNwYWNlLndpZHRoKSxcbiAgICAgICAgaGVpZ2h0OiBNYXRoLm1pbih0aGlzLmggfHwgSW5maW5pdHksIGF2YWlsYWJsZVNwYWNlLmhlaWdodClcbiAgICAgIH0sXG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIHByZXZIZWlnaHQ6IDAsXG4gICAgICBjdXJyZW50V2lkdGg6IDBcbiAgICB9KTtcblxuICAgIGNvbnN0IHJvb3QgPSB0aGlzW194ZmFfb2JqZWN0LiRnZXRUZW1wbGF0ZVJvb3RdKCk7XG5cbiAgICBjb25zdCBzYXZlZE5vTGF5b3V0RmFpbHVyZSA9IHJvb3RbX3hmYV9vYmplY3QuJGV4dHJhXS5ub0xheW91dEZhaWx1cmU7XG5cbiAgICBjb25zdCBpc1NwbGl0dGFibGUgPSB0aGlzW194ZmFfb2JqZWN0LiRpc1NwbGl0dGFibGVdKCk7XG5cbiAgICBpZiAoIWlzU3BsaXR0YWJsZSkge1xuICAgICAgc2V0Rmlyc3RVbnNwbGl0dGFibGUodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKCEoMCwgX2xheW91dC5jaGVja0RpbWVuc2lvbnMpKHRoaXMsIGF2YWlsYWJsZVNwYWNlKSkge1xuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LkZBSUxVUkU7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyID0gbmV3IFNldChbXCJhcmVhXCIsIFwiZHJhd1wiLCBcImV4Y2xHcm91cFwiLCBcImZpZWxkXCIsIFwic3ViZm9ybVwiLCBcInN1YmZvcm1TZXRcIl0pO1xuXG4gICAgaWYgKHRoaXMubGF5b3V0LmluY2x1ZGVzKFwicm93XCIpKSB7XG4gICAgICBjb25zdCBjb2x1bW5XaWR0aHMgPSB0aGlzW194ZmFfb2JqZWN0LiRnZXRTdWJmb3JtUGFyZW50XSgpLmNvbHVtbldpZHRocztcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sdW1uV2lkdGhzKSAmJiBjb2x1bW5XaWR0aHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uY29sdW1uV2lkdGhzID0gY29sdW1uV2lkdGhzO1xuICAgICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uY3VycmVudENvbHVtbiA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3R5bGUgPSAoMCwgX2h0bWxfdXRpbHMudG9TdHlsZSkodGhpcywgXCJhbmNob3JUeXBlXCIsIFwiZGltZW5zaW9uc1wiLCBcInBvc2l0aW9uXCIsIFwicHJlc2VuY2VcIiwgXCJib3JkZXJcIiwgXCJtYXJnaW5cIiwgXCJoQWxpZ25cIik7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IFtcInhmYVN1YmZvcm1cIl07XG4gICAgY29uc3QgY2wgPSAoMCwgX2h0bWxfdXRpbHMubGF5b3V0Q2xhc3MpKHRoaXMpO1xuXG4gICAgaWYgKGNsKSB7XG4gICAgICBjbGFzc05hbWVzLnB1c2goY2wpO1xuICAgIH1cblxuICAgIGF0dHJpYnV0ZXMuc3R5bGUgPSBzdHlsZTtcbiAgICBhdHRyaWJ1dGVzLmNsYXNzID0gY2xhc3NOYW1lcztcblxuICAgIGlmICh0aGlzLm5hbWUpIHtcbiAgICAgIGF0dHJpYnV0ZXMueGZhTmFtZSA9IHRoaXMubmFtZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vdmVyZmxvdykge1xuICAgICAgY29uc3Qgb3ZlcmZsb3dFeHRyYSA9IHRoaXMub3ZlcmZsb3dbX3hmYV9vYmplY3QuJGdldEV4dHJhXSgpO1xuXG4gICAgICBpZiAob3ZlcmZsb3dFeHRyYS5hZGRMZWFkZXIpIHtcbiAgICAgICAgb3ZlcmZsb3dFeHRyYS5hZGRMZWFkZXIgPSBmYWxzZTtcbiAgICAgICAgaGFuZGxlT3ZlcmZsb3codGhpcywgb3ZlcmZsb3dFeHRyYS5sZWFkZXIsIGF2YWlsYWJsZVNwYWNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW194ZmFfb2JqZWN0LiRwdXNoUGFyYV0oKTtcblxuICAgIGNvbnN0IGlzTHJUYiA9IHRoaXMubGF5b3V0ID09PSBcImxyLXRiXCIgfHwgdGhpcy5sYXlvdXQgPT09IFwicmwtdGJcIjtcbiAgICBjb25zdCBtYXhSdW4gPSBpc0xyVGIgPyBNQVhfQVRURU1QVFNfRk9SX0xSVEJfTEFZT1VUIDogMTtcblxuICAgIGZvciAoOyB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uYXR0ZW1wdCA8IG1heFJ1bjsgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmF0dGVtcHQrKykge1xuICAgICAgaWYgKGlzTHJUYiAmJiB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uYXR0ZW1wdCA9PT0gTUFYX0FUVEVNUFRTX0ZPUl9MUlRCX0xBWU9VVCAtIDEpIHtcbiAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLm51bWJlckluTGluZSA9IDA7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXNbX3hmYV9vYmplY3QuJGNoaWxkcmVuVG9IVE1MXSh7XG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgaW5jbHVkZTogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdC5pc0JyZWFrKCkpIHtcbiAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kcG9wUGFyYV0oKTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNMclRiICYmIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5hdHRlbXB0ID09PSAwICYmIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5udW1iZXJJbkxpbmUgPT09IDAgJiYgIXJvb3RbX3hmYV9vYmplY3QuJGV4dHJhXS5ub0xheW91dEZhaWx1cmUpIHtcbiAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmF0dGVtcHQgPSBtYXhSdW47XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNbX3hmYV9vYmplY3QuJHBvcFBhcmFdKCk7XG5cbiAgICBpZiAoIWlzU3BsaXR0YWJsZSkge1xuICAgICAgdW5zZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtcbiAgICB9XG5cbiAgICByb290W194ZmFfb2JqZWN0LiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlID0gc2F2ZWROb0xheW91dEZhaWx1cmU7XG5cbiAgICBpZiAodGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmF0dGVtcHQgPT09IG1heFJ1bikge1xuICAgICAgaWYgKHRoaXMub3ZlcmZsb3cpIHtcbiAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kZ2V0VGVtcGxhdGVSb290XSgpW194ZmFfb2JqZWN0LiRleHRyYV0ub3ZlcmZsb3dOb2RlID0gdGhpcy5vdmVyZmxvdztcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc1NwbGl0dGFibGUpIHtcbiAgICAgICAgZGVsZXRlIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LkZBSUxVUkU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3ZlcmZsb3cpIHtcbiAgICAgIGNvbnN0IG92ZXJmbG93RXh0cmEgPSB0aGlzLm92ZXJmbG93W194ZmFfb2JqZWN0LiRnZXRFeHRyYV0oKTtcblxuICAgICAgaWYgKG92ZXJmbG93RXh0cmEuYWRkVHJhaWxlcikge1xuICAgICAgICBvdmVyZmxvd0V4dHJhLmFkZFRyYWlsZXIgPSBmYWxzZTtcbiAgICAgICAgaGFuZGxlT3ZlcmZsb3codGhpcywgb3ZlcmZsb3dFeHRyYS50cmFpbGVyLCBhdmFpbGFibGVTcGFjZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IG1hcmdpbkggPSAwO1xuICAgIGxldCBtYXJnaW5WID0gMDtcblxuICAgIGlmICh0aGlzLm1hcmdpbikge1xuICAgICAgbWFyZ2luSCA9IHRoaXMubWFyZ2luLmxlZnRJbnNldCArIHRoaXMubWFyZ2luLnJpZ2h0SW5zZXQ7XG4gICAgICBtYXJnaW5WID0gdGhpcy5tYXJnaW4udG9wSW5zZXQgKyB0aGlzLm1hcmdpbi5ib3R0b21JbnNldDtcbiAgICB9XG5cbiAgICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS53aWR0aCArIG1hcmdpbkgsIHRoaXMudyB8fCAwKTtcbiAgICBjb25zdCBoZWlnaHQgPSBNYXRoLm1heCh0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uaGVpZ2h0ICsgbWFyZ2luViwgdGhpcy5oIHx8IDApO1xuICAgIGNvbnN0IGJib3ggPSBbdGhpcy54LCB0aGlzLnksIHdpZHRoLCBoZWlnaHRdO1xuXG4gICAgaWYgKHRoaXMudyA9PT0gXCJcIikge1xuICAgICAgc3R5bGUud2lkdGggPSAoMCwgX2h0bWxfdXRpbHMubWVhc3VyZVRvU3RyaW5nKSh3aWR0aCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaCA9PT0gXCJcIikge1xuICAgICAgc3R5bGUuaGVpZ2h0ID0gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykoaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBpZiAoKHN0eWxlLndpZHRoID09PSBcIjBweFwiIHx8IHN0eWxlLmhlaWdodCA9PT0gXCIwcHhcIikgJiYgY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuRU1QVFk7XG4gICAgfVxuXG4gICAgY29uc3QgaHRtbCA9IHtcbiAgICAgIG5hbWU6IFwiZGl2XCIsXG4gICAgICBhdHRyaWJ1dGVzLFxuICAgICAgY2hpbGRyZW5cbiAgICB9O1xuICAgIGFwcGx5QXNzaXN0KHRoaXMsIGF0dHJpYnV0ZXMpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2VzcygoMCwgX2h0bWxfdXRpbHMuY3JlYXRlV3JhcHBlcikodGhpcywgaHRtbCksIGJib3gpO1xuXG4gICAgaWYgKHRoaXMuYnJlYWtBZnRlci5jaGlsZHJlbi5sZW5ndGggPj0gMSkge1xuICAgICAgY29uc3QgYnJlYWtBZnRlciA9IHRoaXMuYnJlYWtBZnRlci5jaGlsZHJlblswXTtcblxuICAgICAgaWYgKGhhbmRsZUJyZWFrKGJyZWFrQWZ0ZXIpKSB7XG4gICAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5hZnRlckJyZWFrQWZ0ZXIgPSByZXN1bHQ7XG4gICAgICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5icmVha05vZGUoYnJlYWtBZnRlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZGVsZXRlIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbn1cblxuY2xhc3MgU3ViZm9ybVNldCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJzdWJmb3JtU2V0XCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy5yZWxhdGlvbiA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnJlbGF0aW9uLCBbXCJvcmRlcmVkXCIsIFwiY2hvaWNlXCIsIFwidW5vcmRlcmVkXCJdKTtcbiAgICB0aGlzLnJlbGV2YW50ID0gKDAsIF91dGlscy5nZXRSZWxldmFudCkoYXR0cmlidXRlcy5yZWxldmFudCk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuYm9va2VuZCA9IG51bGw7XG4gICAgdGhpcy5icmVhayA9IG51bGw7XG4gICAgdGhpcy5kZXNjID0gbnVsbDtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5vY2N1ciA9IG51bGw7XG4gICAgdGhpcy5vdmVyZmxvdyA9IG51bGw7XG4gICAgdGhpcy5icmVha0FmdGVyID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5icmVha0JlZm9yZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuc3ViZm9ybSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuc3ViZm9ybVNldCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbiAgKltfeGZhX29iamVjdC4kZ2V0Q29udGFpbmVkQ2hpbGRyZW5dKCkge1xuICAgIHlpZWxkKiBnZXRDb250YWluZWRDaGlsZHJlbih0aGlzKTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kZ2V0U3ViZm9ybVBhcmVudF0oKSB7XG4gICAgbGV0IHBhcmVudCA9IHRoaXNbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgIHdoaWxlICghKHBhcmVudCBpbnN0YW5jZW9mIFN1YmZvcm0pKSB7XG4gICAgICBwYXJlbnQgPSBwYXJlbnRbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyZW50O1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRpc0JpbmRhYmxlXSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG59XG5cbmNsYXNzIFN1YmplY3RETiBleHRlbmRzIF94ZmFfb2JqZWN0LkNvbnRlbnRPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwic3ViamVjdEROXCIpO1xuICAgIHRoaXMuZGVsaW1pdGVyID0gYXR0cmlidXRlcy5kZWxpbWl0ZXIgfHwgXCIsXCI7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGZpbmFsaXplXSgpIHtcbiAgICB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSA9IG5ldyBNYXAodGhpc1tfeGZhX29iamVjdC4kY29udGVudF0uc3BsaXQodGhpcy5kZWxpbWl0ZXIpLm1hcChrdiA9PiB7XG4gICAgICBrdiA9IGt2LnNwbGl0KFwiPVwiLCAyKTtcbiAgICAgIGt2WzBdID0ga3ZbMF0udHJpbSgpO1xuICAgICAgcmV0dXJuIGt2O1xuICAgIH0pKTtcbiAgfVxuXG59XG5cbmNsYXNzIFN1YmplY3RETnMgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwic3ViamVjdEROc1wiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMudHlwZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnR5cGUsIFtcIm9wdGlvbmFsXCIsIFwicmVxdWlyZWRcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLnN1YmplY3RETiA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgU3VibWl0IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcInN1Ym1pdFwiLCB0cnVlKTtcbiAgICB0aGlzLmVtYmVkUERGID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLmVtYmVkUERGLFxuICAgICAgZGVmYXVsdFZhbHVlOiAwLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMVxuICAgIH0pO1xuICAgIHRoaXMuZm9ybWF0ID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMuZm9ybWF0LCBbXCJ4ZHBcIiwgXCJmb3JtZGF0YVwiLCBcInBkZlwiLCBcInVybGVuY29kZWRcIiwgXCJ4ZmRcIiwgXCJ4bWxcIl0pO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy50YXJnZXQgPSBhdHRyaWJ1dGVzLnRhcmdldCB8fCBcIlwiO1xuICAgIHRoaXMudGV4dEVuY29kaW5nID0gKDAsIF91dGlscy5nZXRLZXl3b3JkKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLnRleHRFbmNvZGluZyA/IGF0dHJpYnV0ZXMudGV4dEVuY29kaW5nLnRvTG93ZXJDYXNlKCkgOiBcIlwiLFxuICAgICAgZGVmYXVsdFZhbHVlOiBcIlwiLFxuICAgICAgdmFsaWRhdGU6IGsgPT4gW1widXRmLThcIiwgXCJiaWctZml2ZVwiLCBcImZvbnRzcGVjaWZpY1wiLCBcImdia1wiLCBcImdiLTE4MDMwXCIsIFwiZ2ItMjMxMlwiLCBcImtzYy01NjAxXCIsIFwibm9uZVwiLCBcInNoaWZ0LWppc1wiLCBcInVjcy0yXCIsIFwidXRmLTE2XCJdLmluY2x1ZGVzKGspIHx8IGsubWF0Y2goL2lzby04ODU5LVxcZHsyfS8pXG4gICAgfSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMueGRwQ29udGVudCA9IGF0dHJpYnV0ZXMueGRwQ29udGVudCB8fCBcIlwiO1xuICAgIHRoaXMuZW5jcnlwdCA9IG51bGw7XG4gICAgdGhpcy5lbmNyeXB0RGF0YSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuc2lnbkRhdGEgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG59XG5cbmNsYXNzIFRlbXBsYXRlIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcInRlbXBsYXRlXCIsIHRydWUpO1xuICAgIHRoaXMuYmFzZVByb2ZpbGUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5iYXNlUHJvZmlsZSwgW1wiZnVsbFwiLCBcImludGVyYWN0aXZlRm9ybXNcIl0pO1xuICAgIHRoaXMuZXh0cmFzID0gbnVsbDtcbiAgICB0aGlzLnN1YmZvcm0gPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kZmluYWxpemVdKCkge1xuICAgIGlmICh0aGlzLnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJYRkEgLSBObyBzdWJmb3JtcyBpbiB0ZW1wbGF0ZSBub2RlLlwiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aCA+PSAyKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJYRkEgLSBTZXZlcmFsIHN1YmZvcm1zIGluIHRlbXBsYXRlIG5vZGU6IHBsZWFzZSBmaWxlIGEgYnVnLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzW194ZmFfb2JqZWN0LiR0YWJJbmRleF0gPSBERUZBVUxUX1RBQl9JTkRFWDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kaXNTcGxpdHRhYmxlXSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kc2VhcmNoTm9kZV0oZXhwciwgY29udGFpbmVyKSB7XG4gICAgaWYgKGV4cHIuc3RhcnRzV2l0aChcIiNcIikpIHtcbiAgICAgIHJldHVybiBbdGhpc1tfeGZhX29iamVjdC4kaWRzXS5nZXQoZXhwci5zbGljZSgxKSldO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3NvbS5zZWFyY2hOb2RlKSh0aGlzLCBjb250YWluZXIsIGV4cHIsIHRydWUsIHRydWUpO1xuICB9XG5cbiAgKltfeGZhX29iamVjdC4kdG9QYWdlc10oKSB7XG4gICAgaWYgKCF0aGlzLnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7XG4gICAgICAgIG5hbWU6IFwiZGl2XCIsXG4gICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdID0ge1xuICAgICAgb3ZlcmZsb3dOb2RlOiBudWxsLFxuICAgICAgZmlyc3RVbnNwbGl0dGFibGU6IG51bGwsXG4gICAgICBjdXJyZW50Q29udGVudEFyZWE6IG51bGwsXG4gICAgICBjdXJyZW50UGFnZUFyZWE6IG51bGwsXG4gICAgICBub0xheW91dEZhaWx1cmU6IGZhbHNlLFxuICAgICAgcGFnZU51bWJlcjogMSxcbiAgICAgIHBhZ2VQb3NpdGlvbjogXCJmaXJzdFwiLFxuICAgICAgb2RkT3JFdmVuOiBcIm9kZFwiLFxuICAgICAgYmxhbmtPck5vdEJsYW5rOiBcIm5vbkJsYW5rXCIsXG4gICAgICBwYXJhU3RhY2s6IFtdXG4gICAgfTtcbiAgICBjb25zdCByb290ID0gdGhpcy5zdWJmb3JtLmNoaWxkcmVuWzBdO1xuXG4gICAgcm9vdC5wYWdlU2V0W194ZmFfb2JqZWN0LiRjbGVhblBhZ2VdKCk7XG5cbiAgICBjb25zdCBwYWdlQXJlYXMgPSByb290LnBhZ2VTZXQucGFnZUFyZWEuY2hpbGRyZW47XG4gICAgY29uc3QgbWFpbkh0bWwgPSB7XG4gICAgICBuYW1lOiBcImRpdlwiLFxuICAgICAgY2hpbGRyZW46IFtdXG4gICAgfTtcbiAgICBsZXQgcGFnZUFyZWEgPSBudWxsO1xuICAgIGxldCBicmVha0JlZm9yZSA9IG51bGw7XG4gICAgbGV0IGJyZWFrQmVmb3JlVGFyZ2V0ID0gbnVsbDtcblxuICAgIGlmIChyb290LmJyZWFrQmVmb3JlLmNoaWxkcmVuLmxlbmd0aCA+PSAxKSB7XG4gICAgICBicmVha0JlZm9yZSA9IHJvb3QuYnJlYWtCZWZvcmUuY2hpbGRyZW5bMF07XG4gICAgICBicmVha0JlZm9yZVRhcmdldCA9IGJyZWFrQmVmb3JlLnRhcmdldDtcbiAgICB9IGVsc2UgaWYgKHJvb3Quc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGggPj0gMSAmJiByb290LnN1YmZvcm0uY2hpbGRyZW5bMF0uYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoID49IDEpIHtcbiAgICAgIGJyZWFrQmVmb3JlID0gcm9vdC5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrQmVmb3JlLmNoaWxkcmVuWzBdO1xuICAgICAgYnJlYWtCZWZvcmVUYXJnZXQgPSBicmVha0JlZm9yZS50YXJnZXQ7XG4gICAgfSBlbHNlIGlmIChyb290LmJyZWFrICYmIHJvb3QuYnJlYWsuYmVmb3JlVGFyZ2V0KSB7XG4gICAgICBicmVha0JlZm9yZSA9IHJvb3QuYnJlYWs7XG4gICAgICBicmVha0JlZm9yZVRhcmdldCA9IGJyZWFrQmVmb3JlLmJlZm9yZVRhcmdldDtcbiAgICB9IGVsc2UgaWYgKHJvb3Quc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGggPj0gMSAmJiByb290LnN1YmZvcm0uY2hpbGRyZW5bMF0uYnJlYWsgJiYgcm9vdC5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrLmJlZm9yZVRhcmdldCkge1xuICAgICAgYnJlYWtCZWZvcmUgPSByb290LnN1YmZvcm0uY2hpbGRyZW5bMF0uYnJlYWs7XG4gICAgICBicmVha0JlZm9yZVRhcmdldCA9IGJyZWFrQmVmb3JlLmJlZm9yZVRhcmdldDtcbiAgICB9XG5cbiAgICBpZiAoYnJlYWtCZWZvcmUpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXNbX3hmYV9vYmplY3QuJHNlYXJjaE5vZGVdKGJyZWFrQmVmb3JlVGFyZ2V0LCBicmVha0JlZm9yZVtfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpKTtcblxuICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFBhZ2VBcmVhKSB7XG4gICAgICAgIHBhZ2VBcmVhID0gdGFyZ2V0O1xuICAgICAgICBicmVha0JlZm9yZVtfeGZhX29iamVjdC4kZXh0cmFdID0ge307XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYWdlQXJlYSkge1xuICAgICAgcGFnZUFyZWEgPSBwYWdlQXJlYXNbMF07XG4gICAgfVxuXG4gICAgcGFnZUFyZWFbX3hmYV9vYmplY3QuJGV4dHJhXSA9IHtcbiAgICAgIG51bWJlck9mVXNlOiAxXG4gICAgfTtcblxuICAgIGNvbnN0IHBhZ2VBcmVhUGFyZW50ID0gcGFnZUFyZWFbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgIHBhZ2VBcmVhUGFyZW50W194ZmFfb2JqZWN0LiRleHRyYV0gPSB7XG4gICAgICBudW1iZXJPZlVzZTogMSxcbiAgICAgIHBhZ2VJbmRleDogcGFnZUFyZWFQYXJlbnQucGFnZUFyZWEuY2hpbGRyZW4uaW5kZXhPZihwYWdlQXJlYSksXG4gICAgICBwYWdlU2V0SW5kZXg6IDBcbiAgICB9O1xuICAgIGxldCB0YXJnZXRQYWdlQXJlYTtcbiAgICBsZXQgbGVhZGVyID0gbnVsbDtcbiAgICBsZXQgdHJhaWxlciA9IG51bGw7XG4gICAgbGV0IGhhc1NvbWV0aGluZyA9IHRydWU7XG4gICAgbGV0IGhhc1NvbWV0aGluZ0NvdW50ZXIgPSAwO1xuICAgIGxldCBzdGFydEluZGV4ID0gMDtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoIWhhc1NvbWV0aGluZykge1xuICAgICAgICBtYWluSHRtbC5jaGlsZHJlbi5wb3AoKTtcblxuICAgICAgICBpZiAoKytoYXNTb21ldGhpbmdDb3VudGVyID09PSBNQVhfRU1QVFlfUEFHRVMpIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJYRkEgLSBTb21ldGhpbmcgZ29lcyB3cm9uZzogcGxlYXNlIGZpbGUgYSBidWcuXCIpO1xuICAgICAgICAgIHJldHVybiBtYWluSHRtbDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFzU29tZXRoaW5nQ291bnRlciA9IDA7XG4gICAgICB9XG5cbiAgICAgIHRhcmdldFBhZ2VBcmVhID0gbnVsbDtcbiAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5jdXJyZW50UGFnZUFyZWEgPSBwYWdlQXJlYTtcblxuICAgICAgY29uc3QgcGFnZSA9IHBhZ2VBcmVhW194ZmFfb2JqZWN0LiR0b0hUTUxdKCkuaHRtbDtcblxuICAgICAgbWFpbkh0bWwuY2hpbGRyZW4ucHVzaChwYWdlKTtcblxuICAgICAgaWYgKGxlYWRlcikge1xuICAgICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlID0gdHJ1ZTtcbiAgICAgICAgcGFnZS5jaGlsZHJlbi5wdXNoKGxlYWRlcltfeGZhX29iamVjdC4kdG9IVE1MXShwYWdlQXJlYVtfeGZhX29iamVjdC4kZXh0cmFdLnNwYWNlKS5odG1sKTtcbiAgICAgICAgbGVhZGVyID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRyYWlsZXIpIHtcbiAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSA9IHRydWU7XG4gICAgICAgIHBhZ2UuY2hpbGRyZW4ucHVzaCh0cmFpbGVyW194ZmFfb2JqZWN0LiR0b0hUTUxdKHBhZ2VBcmVhW194ZmFfb2JqZWN0LiRleHRyYV0uc3BhY2UpLmh0bWwpO1xuICAgICAgICB0cmFpbGVyID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudEFyZWFzID0gcGFnZUFyZWEuY29udGVudEFyZWEuY2hpbGRyZW47XG4gICAgICBjb25zdCBodG1sQ29udGVudEFyZWFzID0gcGFnZS5jaGlsZHJlbi5maWx0ZXIobm9kZSA9PiBub2RlLmF0dHJpYnV0ZXMuY2xhc3MuaW5jbHVkZXMoXCJ4ZmFDb250ZW50YXJlYVwiKSk7XG4gICAgICBoYXNTb21ldGhpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZSA9IG51bGw7XG4gICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGZsdXNoID0gaW5kZXggPT4ge1xuICAgICAgICBjb25zdCBodG1sID0gcm9vdFtfeGZhX29iamVjdC4kZmx1c2hIVE1MXSgpO1xuXG4gICAgICAgIGlmIChodG1sKSB7XG4gICAgICAgICAgaGFzU29tZXRoaW5nID0gaGFzU29tZXRoaW5nIHx8IGh0bWwuY2hpbGRyZW4gJiYgaHRtbC5jaGlsZHJlbi5sZW5ndGggIT09IDA7XG4gICAgICAgICAgaHRtbENvbnRlbnRBcmVhc1tpbmRleF0uY2hpbGRyZW4ucHVzaChodG1sKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXgsIGlpID0gY29udGVudEFyZWFzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29uc3QgY29udGVudEFyZWEgPSB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uY3VycmVudENvbnRlbnRBcmVhID0gY29udGVudEFyZWFzW2ldO1xuICAgICAgICBjb25zdCBzcGFjZSA9IHtcbiAgICAgICAgICB3aWR0aDogY29udGVudEFyZWEudyxcbiAgICAgICAgICBoZWlnaHQ6IGNvbnRlbnRBcmVhLmhcbiAgICAgICAgfTtcbiAgICAgICAgc3RhcnRJbmRleCA9IDA7XG5cbiAgICAgICAgaWYgKGxlYWRlcikge1xuICAgICAgICAgIGh0bWxDb250ZW50QXJlYXNbaV0uY2hpbGRyZW4ucHVzaChsZWFkZXJbX3hmYV9vYmplY3QuJHRvSFRNTF0oc3BhY2UpLmh0bWwpO1xuICAgICAgICAgIGxlYWRlciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHJhaWxlcikge1xuICAgICAgICAgIGh0bWxDb250ZW50QXJlYXNbaV0uY2hpbGRyZW4ucHVzaCh0cmFpbGVyW194ZmFfb2JqZWN0LiR0b0hUTUxdKHNwYWNlKS5odG1sKTtcbiAgICAgICAgICB0cmFpbGVyID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGh0bWwgPSByb290W194ZmFfb2JqZWN0LiR0b0hUTUxdKHNwYWNlKTtcblxuICAgICAgICBpZiAoaHRtbC5zdWNjZXNzKSB7XG4gICAgICAgICAgaWYgKGh0bWwuaHRtbCkge1xuICAgICAgICAgICAgaGFzU29tZXRoaW5nID0gaGFzU29tZXRoaW5nIHx8IGh0bWwuaHRtbC5jaGlsZHJlbiAmJiBodG1sLmh0bWwuY2hpbGRyZW4ubGVuZ3RoICE9PSAwO1xuICAgICAgICAgICAgaHRtbENvbnRlbnRBcmVhc1tpXS5jaGlsZHJlbi5wdXNoKGh0bWwuaHRtbCk7XG4gICAgICAgICAgfSBlbHNlIGlmICghaGFzU29tZXRoaW5nICYmIG1haW5IdG1sLmNoaWxkcmVuLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIG1haW5IdG1sLmNoaWxkcmVuLnBvcCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBtYWluSHRtbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChodG1sLmlzQnJlYWsoKSkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBodG1sLmJyZWFrTm9kZTtcbiAgICAgICAgICBmbHVzaChpKTtcblxuICAgICAgICAgIGlmIChub2RlLnRhcmdldFR5cGUgPT09IFwiYXV0b1wiKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobm9kZS5sZWFkZXIpIHtcbiAgICAgICAgICAgIGxlYWRlciA9IHRoaXNbX3hmYV9vYmplY3QuJHNlYXJjaE5vZGVdKG5vZGUubGVhZGVyLCBub2RlW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCkpO1xuICAgICAgICAgICAgbGVhZGVyID0gbGVhZGVyID8gbGVhZGVyWzBdIDogbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobm9kZS50cmFpbGVyKSB7XG4gICAgICAgICAgICB0cmFpbGVyID0gdGhpc1tfeGZhX29iamVjdC4kc2VhcmNoTm9kZV0obm9kZS50cmFpbGVyLCBub2RlW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCkpO1xuICAgICAgICAgICAgdHJhaWxlciA9IHRyYWlsZXIgPyB0cmFpbGVyWzBdIDogbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobm9kZS50YXJnZXRUeXBlID09PSBcInBhZ2VBcmVhXCIpIHtcbiAgICAgICAgICAgIHRhcmdldFBhZ2VBcmVhID0gbm9kZVtfeGZhX29iamVjdC4kZXh0cmFdLnRhcmdldDtcbiAgICAgICAgICAgIGkgPSBJbmZpbml0eTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFub2RlW194ZmFfb2JqZWN0LiRleHRyYV0udGFyZ2V0KSB7XG4gICAgICAgICAgICBpID0gbm9kZVtfeGZhX29iamVjdC4kZXh0cmFdLmluZGV4O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRQYWdlQXJlYSA9IG5vZGVbX3hmYV9vYmplY3QuJGV4dHJhXS50YXJnZXQ7XG4gICAgICAgICAgICBzdGFydEluZGV4ID0gbm9kZVtfeGZhX29iamVjdC4kZXh0cmFdLmluZGV4ICsgMTtcbiAgICAgICAgICAgIGkgPSBJbmZpbml0eTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0ub3ZlcmZsb3dOb2RlKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5vdmVyZmxvd05vZGU7XG4gICAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLm92ZXJmbG93Tm9kZSA9IG51bGw7XG5cbiAgICAgICAgICBjb25zdCBvdmVyZmxvd0V4dHJhID0gbm9kZVtfeGZhX29iamVjdC4kZ2V0RXh0cmFdKCk7XG5cbiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBvdmVyZmxvd0V4dHJhLnRhcmdldDtcbiAgICAgICAgICBvdmVyZmxvd0V4dHJhLmFkZExlYWRlciA9IG92ZXJmbG93RXh0cmEubGVhZGVyICE9PSBudWxsO1xuICAgICAgICAgIG92ZXJmbG93RXh0cmEuYWRkVHJhaWxlciA9IG92ZXJmbG93RXh0cmEudHJhaWxlciAhPT0gbnVsbDtcbiAgICAgICAgICBmbHVzaChpKTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBpO1xuICAgICAgICAgIGkgPSBJbmZpbml0eTtcblxuICAgICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBQYWdlQXJlYSkge1xuICAgICAgICAgICAgdGFyZ2V0UGFnZUFyZWEgPSB0YXJnZXQ7XG4gICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBDb250ZW50QXJlYSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjb250ZW50QXJlYXMuZmluZEluZGV4KGUgPT4gZSA9PT0gdGFyZ2V0KTtcblxuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICBpZiAoaW5kZXggPiBjdXJyZW50SW5kZXgpIHtcbiAgICAgICAgICAgICAgICBpID0gaW5kZXggLSAxO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGFyZ2V0UGFnZUFyZWEgPSB0YXJnZXRbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcbiAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IHRhcmdldFBhZ2VBcmVhLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmZpbmRJbmRleChlID0+IGUgPT09IHRhcmdldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBmbHVzaChpKTtcbiAgICAgIH1cblxuICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLnBhZ2VOdW1iZXIgKz0gMTtcblxuICAgICAgaWYgKHRhcmdldFBhZ2VBcmVhKSB7XG4gICAgICAgIGlmICh0YXJnZXRQYWdlQXJlYVtfeGZhX29iamVjdC4kaXNVc2FibGVdKCkpIHtcbiAgICAgICAgICB0YXJnZXRQYWdlQXJlYVtfeGZhX29iamVjdC4kZXh0cmFdLm51bWJlck9mVXNlICs9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0UGFnZUFyZWEgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHBhZ2VBcmVhID0gdGFyZ2V0UGFnZUFyZWEgfHwgcGFnZUFyZWFbX3hmYV9vYmplY3QuJGdldE5leHRQYWdlXSgpO1xuICAgICAgeWllbGQgbnVsbDtcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnRzLlRlbXBsYXRlID0gVGVtcGxhdGU7XG5cbmNsYXNzIFRleHQgZXh0ZW5kcyBfeGZhX29iamVjdC5Db250ZW50T2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcInRleHRcIik7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLm1heENoYXJzID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLm1heENoYXJzLFxuICAgICAgZGVmYXVsdFZhbHVlOiAwLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA+PSAwXG4gICAgfSk7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy5yaWQgPSBhdHRyaWJ1dGVzLnJpZCB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kYWNjZXB0V2hpdGVzcGFjZV0oKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJG9uQ2hpbGRdKGNoaWxkKSB7XG4gICAgaWYgKGNoaWxkW194ZmFfb2JqZWN0LiRuYW1lc3BhY2VJZF0gPT09IF9uYW1lc3BhY2VzLk5hbWVzcGFjZUlkcy54aHRtbC5pZCkge1xuICAgICAgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gPSBjaGlsZDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgICgwLCBfdXRpbC53YXJuKShgWEZBIC0gSW52YWxpZCBjb250ZW50IGluIFRleHQ6ICR7Y2hpbGRbX3hmYV9vYmplY3QuJG5vZGVOYW1lXX0uYCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRvblRleHRdKHN0cikge1xuICAgIGlmICh0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSBpbnN0YW5jZW9mIF94ZmFfb2JqZWN0LlhGQU9iamVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1cGVyW194ZmFfb2JqZWN0LiRvblRleHRdKHN0cik7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGZpbmFsaXplXSgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSA9IHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdLnJlcGxhY2UoL1xcclxcbi9nLCBcIlxcblwiKTtcbiAgICB9XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGdldEV4dHJhXSgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0uc3BsaXQoL1tcXHUyMDI5XFx1MjAyOFxcbl0vKS5yZWR1Y2UoKGFjYywgbGluZSkgPT4ge1xuICAgICAgICBpZiAobGluZSkge1xuICAgICAgICAgIGFjYy5wdXNoKGxpbmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIFtdKS5qb2luKFwiXFxuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XVtfeGZhX29iamVjdC4kdGV4dF0oKTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXShhdmFpbGFibGVTcGFjZSkge1xuICAgIGlmICh0eXBlb2YgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvbnN0IGh0bWwgPSB2YWx1ZVRvSHRtbCh0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSkuaHRtbDtcblxuICAgICAgaWYgKHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdLmluY2x1ZGVzKFwiXFx1MjAyOVwiKSkge1xuICAgICAgICBodG1sLm5hbWUgPSBcImRpdlwiO1xuICAgICAgICBodG1sLmNoaWxkcmVuID0gW107XG5cbiAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0uc3BsaXQoXCJcXHUyMDI5XCIpLm1hcChwYXJhID0+IHBhcmEuc3BsaXQoL1tcXHUyMDI4XFxuXS8pLnJlZHVjZSgoYWNjLCBsaW5lKSA9PiB7XG4gICAgICAgICAgYWNjLnB1c2goe1xuICAgICAgICAgICAgbmFtZTogXCJzcGFuXCIsXG4gICAgICAgICAgICB2YWx1ZTogbGluZVxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6IFwiYnJcIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIFtdKSkuZm9yRWFjaChsaW5lcyA9PiB7XG4gICAgICAgICAgaHRtbC5jaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IFwicFwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IGxpbmVzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICgvW1xcdTIwMjhcXG5dLy50ZXN0KHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdKSkge1xuICAgICAgICBodG1sLm5hbWUgPSBcImRpdlwiO1xuICAgICAgICBodG1sLmNoaWxkcmVuID0gW107XG5cbiAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0uc3BsaXQoL1tcXHUyMDI4XFxuXS8pLmZvckVhY2gobGluZSA9PiB7XG4gICAgICAgICAgaHRtbC5jaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IFwic3BhblwiLFxuICAgICAgICAgICAgdmFsdWU6IGxpbmVcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiBcImJyXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5zdWNjZXNzKGh0bWwpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XVtfeGZhX29iamVjdC4kdG9IVE1MXShhdmFpbGFibGVTcGFjZSk7XG4gIH1cblxufVxuXG5leHBvcnRzLlRleHQgPSBUZXh0O1xuXG5jbGFzcyBUZXh0RWRpdCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJ0ZXh0RWRpdFwiLCB0cnVlKTtcbiAgICB0aGlzLmFsbG93UmljaFRleHQgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuYWxsb3dSaWNoVGV4dCxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDFcbiAgICB9KTtcbiAgICB0aGlzLmhTY3JvbGxQb2xpY3kgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5oU2Nyb2xsUG9saWN5LCBbXCJhdXRvXCIsIFwib2ZmXCIsIFwib25cIl0pO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5tdWx0aUxpbmUgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMubXVsdGlMaW5lLFxuICAgICAgZGVmYXVsdFZhbHVlOiBcIlwiLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMCB8fCB4ID09PSAxXG4gICAgfSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMudlNjcm9sbFBvbGljeSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnZTY3JvbGxQb2xpY3ksIFtcImF1dG9cIiwgXCJvZmZcIiwgXCJvblwiXSk7XG4gICAgdGhpcy5ib3JkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tYiA9IG51bGw7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICAgIHRoaXMubWFyZ2luID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXShhdmFpbGFibGVTcGFjZSkge1xuICAgIGNvbnN0IHN0eWxlID0gKDAsIF9odG1sX3V0aWxzLnRvU3R5bGUpKHRoaXMsIFwiYm9yZGVyXCIsIFwiZm9udFwiLCBcIm1hcmdpblwiKTtcbiAgICBsZXQgaHRtbDtcblxuICAgIGNvbnN0IGZpZWxkID0gdGhpc1tfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCk7XG5cbiAgICBpZiAodGhpcy5tdWx0aUxpbmUgPT09IFwiXCIpIHtcbiAgICAgIHRoaXMubXVsdGlMaW5lID0gZmllbGQgaW5zdGFuY2VvZiBEcmF3ID8gMSA6IDA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubXVsdGlMaW5lID09PSAxKSB7XG4gICAgICBodG1sID0ge1xuICAgICAgICBuYW1lOiBcInRleHRhcmVhXCIsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBkYXRhSWQ6IGZpZWxkW194ZmFfb2JqZWN0LiRkYXRhXSAmJiBmaWVsZFtfeGZhX29iamVjdC4kZGF0YV1bX3hmYV9vYmplY3QuJHVpZF0gfHwgZmllbGRbX3hmYV9vYmplY3QuJHVpZF0sXG4gICAgICAgICAgZmllbGRJZDogZmllbGRbX3hmYV9vYmplY3QuJHVpZF0sXG4gICAgICAgICAgY2xhc3M6IFtcInhmYVRleHRmaWVsZFwiXSxcbiAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsKGZpZWxkKVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBodG1sID0ge1xuICAgICAgICBuYW1lOiBcImlucHV0XCIsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICBkYXRhSWQ6IGZpZWxkW194ZmFfb2JqZWN0LiRkYXRhXSAmJiBmaWVsZFtfeGZhX29iamVjdC4kZGF0YV1bX3hmYV9vYmplY3QuJHVpZF0gfHwgZmllbGRbX3hmYV9vYmplY3QuJHVpZF0sXG4gICAgICAgICAgZmllbGRJZDogZmllbGRbX3hmYV9vYmplY3QuJHVpZF0sXG4gICAgICAgICAgY2xhc3M6IFtcInhmYVRleHRmaWVsZFwiXSxcbiAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsKGZpZWxkKVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtcbiAgICAgIG5hbWU6IFwibGFiZWxcIixcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2xhc3M6IFtcInhmYUxhYmVsXCJdXG4gICAgICB9LFxuICAgICAgY2hpbGRyZW46IFtodG1sXVxuICAgIH0pO1xuICB9XG5cbn1cblxuY2xhc3MgVGltZSBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJ0aW1lXCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRmaW5hbGl6ZV0oKSB7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdLnRyaW0oKTtcblxuICAgIHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID0gZGF0ZSA/IG5ldyBEYXRlKGRhdGUpIDogbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXShhdmFpbGFibGVTcGFjZSkge1xuICAgIHJldHVybiB2YWx1ZVRvSHRtbCh0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSA/IHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdLnRvU3RyaW5nKCkgOiBcIlwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIFRpbWVTdGFtcCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJ0aW1lU3RhbXBcIik7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnNlcnZlciA9IGF0dHJpYnV0ZXMuc2VydmVyIHx8IFwiXCI7XG4gICAgdGhpcy50eXBlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMudHlwZSwgW1wib3B0aW9uYWxcIiwgXCJyZXF1aXJlZFwiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbn1cblxuY2xhc3MgVG9vbFRpcCBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJ0b29sVGlwXCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5yaWQgPSBhdHRyaWJ1dGVzLnJpZCB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgfVxuXG59XG5cbmNsYXNzIFRyYXZlcnNhbCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJ0cmF2ZXJzYWxcIiwgdHJ1ZSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICAgIHRoaXMudHJhdmVyc2UgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG59XG5cbmNsYXNzIFRyYXZlcnNlIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcInRyYXZlcnNlXCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5vcGVyYXRpb24gPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5vcGVyYXRpb24sIFtcIm5leHRcIiwgXCJiYWNrXCIsIFwiZG93blwiLCBcImZpcnN0XCIsIFwibGVmdFwiLCBcInJpZ2h0XCIsIFwidXBcIl0pO1xuICAgIHRoaXMucmVmID0gYXR0cmlidXRlcy5yZWYgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICAgIHRoaXMuc2NyaXB0ID0gbnVsbDtcbiAgfVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm9wZXJhdGlvbjtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kaXNUcmFuc3BhcmVudF0oKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbn1cblxuY2xhc3MgVWkgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwidWlcIiwgdHJ1ZSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICAgIHRoaXMucGljdHVyZSA9IG51bGw7XG4gICAgdGhpcy5iYXJjb2RlID0gbnVsbDtcbiAgICB0aGlzLmJ1dHRvbiA9IG51bGw7XG4gICAgdGhpcy5jaGVja0J1dHRvbiA9IG51bGw7XG4gICAgdGhpcy5jaG9pY2VMaXN0ID0gbnVsbDtcbiAgICB0aGlzLmRhdGVUaW1lRWRpdCA9IG51bGw7XG4gICAgdGhpcy5kZWZhdWx0VWkgPSBudWxsO1xuICAgIHRoaXMuaW1hZ2VFZGl0ID0gbnVsbDtcbiAgICB0aGlzLm51bWVyaWNFZGl0ID0gbnVsbDtcbiAgICB0aGlzLnBhc3N3b3JkRWRpdCA9IG51bGw7XG4gICAgdGhpcy5zaWduYXR1cmUgPSBudWxsO1xuICAgIHRoaXMudGV4dEVkaXQgPSBudWxsO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRnZXRFeHRyYV0oKSB7XG4gICAgaWYgKHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09IFwiZXh0cmFzXCIgfHwgbmFtZSA9PT0gXCJwaWN0dXJlXCIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9iaiA9IHRoaXNbbmFtZV07XG5cbiAgICAgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgX3hmYV9vYmplY3QuWEZBT2JqZWN0KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdID0gb2JqO1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgfVxuXG4gICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0gPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV07XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzW194ZmFfb2JqZWN0LiRnZXRFeHRyYV0oKTtcblxuICAgIGlmIChvYmopIHtcbiAgICAgIHJldHVybiBvYmpbX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpO1xuICAgIH1cblxuICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5FTVBUWTtcbiAgfVxuXG59XG5cbmNsYXNzIFZhbGlkYXRlIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcInZhbGlkYXRlXCIsIHRydWUpO1xuICAgIHRoaXMuZm9ybWF0VGVzdCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmZvcm1hdFRlc3QsIFtcIndhcm5pbmdcIiwgXCJkaXNhYmxlZFwiLCBcImVycm9yXCJdKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMubnVsbFRlc3QgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5udWxsVGVzdCwgW1wiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcIndhcm5pbmdcIl0pO1xuICAgIHRoaXMuc2NyaXB0VGVzdCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnNjcmlwdFRlc3QsIFtcImVycm9yXCIsIFwiZGlzYWJsZWRcIiwgXCJ3YXJuaW5nXCJdKTtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICAgIHRoaXMubWVzc2FnZSA9IG51bGw7XG4gICAgdGhpcy5waWN0dXJlID0gbnVsbDtcbiAgICB0aGlzLnNjcmlwdCA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBWYWx1ZSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJ2YWx1ZVwiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMub3ZlcnJpZGUgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMub3ZlcnJpZGUsXG4gICAgICBkZWZhdWx0VmFsdWU6IDAsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID09PSAxXG4gICAgfSk7XG4gICAgdGhpcy5yZWxldmFudCA9ICgwLCBfdXRpbHMuZ2V0UmVsZXZhbnQpKGF0dHJpYnV0ZXMucmVsZXZhbnQpO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmFyYyA9IG51bGw7XG4gICAgdGhpcy5ib29sZWFuID0gbnVsbDtcbiAgICB0aGlzLmRhdGUgPSBudWxsO1xuICAgIHRoaXMuZGF0ZVRpbWUgPSBudWxsO1xuICAgIHRoaXMuZGVjaW1hbCA9IG51bGw7XG4gICAgdGhpcy5leERhdGEgPSBudWxsO1xuICAgIHRoaXMuZmxvYXQgPSBudWxsO1xuICAgIHRoaXMuaW1hZ2UgPSBudWxsO1xuICAgIHRoaXMuaW50ZWdlciA9IG51bGw7XG4gICAgdGhpcy5saW5lID0gbnVsbDtcbiAgICB0aGlzLnJlY3RhbmdsZSA9IG51bGw7XG4gICAgdGhpcy50ZXh0ID0gbnVsbDtcbiAgICB0aGlzLnRpbWUgPSBudWxsO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRzZXRWYWx1ZV0odmFsdWUpIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCk7XG5cbiAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgRmllbGQpIHtcbiAgICAgIGlmIChwYXJlbnQudWkgJiYgcGFyZW50LnVpLmltYWdlRWRpdCkge1xuICAgICAgICBpZiAoIXRoaXMuaW1hZ2UpIHtcbiAgICAgICAgICB0aGlzLmltYWdlID0gbmV3IEltYWdlKHt9KTtcblxuICAgICAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGFwcGVuZENoaWxkXSh0aGlzLmltYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW1hZ2VbX3hmYV9vYmplY3QuJGNvbnRlbnRdID0gdmFsdWVbX3hmYV9vYmplY3QuJGNvbnRlbnRdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWVOYW1lID0gdmFsdWVbX3hmYV9vYmplY3QuJG5vZGVOYW1lXTtcblxuICAgIGlmICh0aGlzW3ZhbHVlTmFtZV0gIT09IG51bGwpIHtcbiAgICAgIHRoaXNbdmFsdWVOYW1lXVtfeGZhX29iamVjdC4kY29udGVudF0gPSB2YWx1ZVtfeGZhX29iamVjdC4kY29udGVudF07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSB7XG4gICAgICBjb25zdCBvYmogPSB0aGlzW25hbWVdO1xuXG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgX3hmYV9vYmplY3QuWEZBT2JqZWN0KSB7XG4gICAgICAgIHRoaXNbbmFtZV0gPSBudWxsO1xuXG4gICAgICAgIHRoaXNbX3hmYV9vYmplY3QuJHJlbW92ZUNoaWxkXShvYmopO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNbdmFsdWVbX3hmYV9vYmplY3QuJG5vZGVOYW1lXV0gPSB2YWx1ZTtcblxuICAgIHRoaXNbX3hmYV9vYmplY3QuJGFwcGVuZENoaWxkXSh2YWx1ZSk7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRleHRdKCkge1xuICAgIGlmICh0aGlzLmV4RGF0YSkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmV4RGF0YVtfeGZhX29iamVjdC4kY29udGVudF0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhEYXRhW194ZmFfb2JqZWN0LiRjb250ZW50XS50cmltKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmV4RGF0YVtfeGZhX29iamVjdC4kY29udGVudF1bX3hmYV9vYmplY3QuJHRleHRdKCkudHJpbSgpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkge1xuICAgICAgaWYgKG5hbWUgPT09IFwiaW1hZ2VcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2JqID0gdGhpc1tuYW1lXTtcblxuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIF94ZmFfb2JqZWN0LlhGQU9iamVjdCkge1xuICAgICAgICByZXR1cm4gKG9ialtfeGZhX29iamVjdC4kY29udGVudF0gfHwgXCJcIikudG9TdHJpbmcoKS50cmltKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIHtcbiAgICAgIGNvbnN0IG9iaiA9IHRoaXNbbmFtZV07XG5cbiAgICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIF94ZmFfb2JqZWN0LlhGQU9iamVjdCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmpbX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpO1xuICAgIH1cblxuICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5FTVBUWTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuVmFsdWUgPSBWYWx1ZTtcblxuY2xhc3MgVmFyaWFibGVzIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcInZhcmlhYmxlc1wiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmJvb2xlYW4gPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmRhdGUgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmRhdGVUaW1lID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5kZWNpbWFsID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5leERhdGEgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmZsb2F0ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5pbWFnZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuaW50ZWdlciA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMubWFuaWZlc3QgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnNjcmlwdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMudGV4dCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMudGltZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRpc1RyYW5zcGFyZW50XSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG59XG5cbmNsYXNzIFRlbXBsYXRlTmFtZXNwYWNlIHtcbiAgc3RhdGljIFtfbmFtZXNwYWNlcy4kYnVpbGRYRkFPYmplY3RdKG5hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgICBpZiAoVGVtcGxhdGVOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBUZW1wbGF0ZU5hbWVzcGFjZVtuYW1lXShhdHRyaWJ1dGVzKTtcblxuICAgICAgbm9kZVtfeGZhX29iamVjdC4kc2V0U2V0QXR0cmlidXRlc10oYXR0cmlidXRlcyk7XG5cbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBzdGF0aWMgYXBwZWFyYW5jZUZpbHRlcihhdHRycykge1xuICAgIHJldHVybiBuZXcgQXBwZWFyYW5jZUZpbHRlcihhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgYXJjKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBBcmMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGFyZWEoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEFyZWEoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGFzc2lzdChhdHRycykge1xuICAgIHJldHVybiBuZXcgQXNzaXN0KGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBiYXJjb2RlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBCYXJjb2RlKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBiaW5kKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBCaW5kKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBiaW5kSXRlbXMoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEJpbmRJdGVtcyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgYm9va2VuZChhdHRycykge1xuICAgIHJldHVybiBuZXcgQm9va2VuZChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgYm9vbGVhbihhdHRycykge1xuICAgIHJldHVybiBuZXcgQm9vbGVhbkVsZW1lbnQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGJvcmRlcihhdHRycykge1xuICAgIHJldHVybiBuZXcgQm9yZGVyKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBicmVhayhhdHRycykge1xuICAgIHJldHVybiBuZXcgQnJlYWsoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGJyZWFrQWZ0ZXIoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEJyZWFrQWZ0ZXIoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGJyZWFrQmVmb3JlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBCcmVha0JlZm9yZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgYnV0dG9uKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBCdXR0b24oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGNhbGN1bGF0ZShhdHRycykge1xuICAgIHJldHVybiBuZXcgQ2FsY3VsYXRlKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBjYXB0aW9uKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBDYXB0aW9uKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBjZXJ0aWZpY2F0ZShhdHRycykge1xuICAgIHJldHVybiBuZXcgQ2VydGlmaWNhdGUoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGNlcnRpZmljYXRlcyhhdHRycykge1xuICAgIHJldHVybiBuZXcgQ2VydGlmaWNhdGVzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBjaGVja0J1dHRvbihhdHRycykge1xuICAgIHJldHVybiBuZXcgQ2hlY2tCdXR0b24oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGNob2ljZUxpc3QoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IENob2ljZUxpc3QoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGNvbG9yKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgY29tYihhdHRycykge1xuICAgIHJldHVybiBuZXcgQ29tYihhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgY29ubmVjdChhdHRycykge1xuICAgIHJldHVybiBuZXcgQ29ubmVjdChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgY29udGVudEFyZWEoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IENvbnRlbnRBcmVhKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBjb3JuZXIoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IENvcm5lcihhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZGF0ZShhdHRycykge1xuICAgIHJldHVybiBuZXcgRGF0ZUVsZW1lbnQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGRhdGVUaW1lKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlVGltZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZGF0ZVRpbWVFZGl0KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlVGltZUVkaXQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGRlY2ltYWwoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IERlY2ltYWwoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRVaShhdHRycykge1xuICAgIHJldHVybiBuZXcgRGVmYXVsdFVpKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBkZXNjKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBEZXNjKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBkaWdlc3RNZXRob2QoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IERpZ2VzdE1ldGhvZChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZGlnZXN0TWV0aG9kcyhhdHRycykge1xuICAgIHJldHVybiBuZXcgRGlnZXN0TWV0aG9kcyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZHJhdyhhdHRycykge1xuICAgIHJldHVybiBuZXcgRHJhdyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZWRnZShhdHRycykge1xuICAgIHJldHVybiBuZXcgRWRnZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZW5jb2RpbmcoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEVuY29kaW5nKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBlbmNvZGluZ3MoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEVuY29kaW5ncyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZW5jcnlwdChhdHRycykge1xuICAgIHJldHVybiBuZXcgRW5jcnlwdChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZW5jcnlwdERhdGEoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEVuY3J5cHREYXRhKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBlbmNyeXB0aW9uKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBFbmNyeXB0aW9uKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBlbmNyeXB0aW9uTWV0aG9kKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBFbmNyeXB0aW9uTWV0aG9kKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBlbmNyeXB0aW9uTWV0aG9kcyhhdHRycykge1xuICAgIHJldHVybiBuZXcgRW5jcnlwdGlvbk1ldGhvZHMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGV2ZW50KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBFdmVudChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZXhEYXRhKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBFeERhdGEoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGV4T2JqZWN0KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBFeE9iamVjdChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZXhjbEdyb3VwKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBFeGNsR3JvdXAoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGV4ZWN1dGUoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEV4ZWN1dGUoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGV4dHJhcyhhdHRycykge1xuICAgIHJldHVybiBuZXcgRXh0cmFzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBmaWVsZChhdHRycykge1xuICAgIHJldHVybiBuZXcgRmllbGQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGZpbGwoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEZpbGwoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGZpbHRlcihhdHRycykge1xuICAgIHJldHVybiBuZXcgRmlsdGVyKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBmbG9hdChhdHRycykge1xuICAgIHJldHVybiBuZXcgRmxvYXQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGZvbnQoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEZvbnQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGZvcm1hdChhdHRycykge1xuICAgIHJldHVybiBuZXcgRm9ybWF0KGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBoYW5kbGVyKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBIYW5kbGVyKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBoeXBoZW5hdGlvbihhdHRycykge1xuICAgIHJldHVybiBuZXcgSHlwaGVuYXRpb24oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGltYWdlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBJbWFnZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgaW1hZ2VFZGl0KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBJbWFnZUVkaXQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGludGVnZXIoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEludGVnZXIoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGlzc3VlcnMoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IElzc3VlcnMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGl0ZW1zKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBJdGVtcyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMga2VlcChhdHRycykge1xuICAgIHJldHVybiBuZXcgS2VlcChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMga2V5VXNhZ2UoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEtleVVzYWdlKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBsaW5lKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBMaW5lKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBsaW5lYXIoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IExpbmVhcihhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgbG9ja0RvY3VtZW50KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBMb2NrRG9jdW1lbnQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIG1hbmlmZXN0KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBNYW5pZmVzdChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgbWFyZ2luKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBNYXJnaW4oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIG1kcChhdHRycykge1xuICAgIHJldHVybiBuZXcgTWRwKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBtZWRpdW0oYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IE1lZGl1bShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgbWVzc2FnZShhdHRycykge1xuICAgIHJldHVybiBuZXcgTWVzc2FnZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgbnVtZXJpY0VkaXQoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IE51bWVyaWNFZGl0KGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBvY2N1cihhdHRycykge1xuICAgIHJldHVybiBuZXcgT2NjdXIoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIG9pZChhdHRycykge1xuICAgIHJldHVybiBuZXcgT2lkKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBvaWRzKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBPaWRzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBvdmVyZmxvdyhhdHRycykge1xuICAgIHJldHVybiBuZXcgT3ZlcmZsb3coYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHBhZ2VBcmVhKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBQYWdlQXJlYShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcGFnZVNldChhdHRycykge1xuICAgIHJldHVybiBuZXcgUGFnZVNldChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcGFyYShhdHRycykge1xuICAgIHJldHVybiBuZXcgUGFyYShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcGFzc3dvcmRFZGl0KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBQYXNzd29yZEVkaXQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHBhdHRlcm4oYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFBhdHRlcm4oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHBpY3R1cmUoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFBpY3R1cmUoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHByb3RvKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBQcm90byhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcmFkaWFsKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBSYWRpYWwoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHJlYXNvbihhdHRycykge1xuICAgIHJldHVybiBuZXcgUmVhc29uKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyByZWFzb25zKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBSZWFzb25zKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyByZWN0YW5nbGUoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcmVmKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBSZWZFbGVtZW50KGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBzY3JpcHQoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFNjcmlwdChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgc2V0UHJvcGVydHkoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFNldFByb3BlcnR5KGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBzaWduRGF0YShhdHRycykge1xuICAgIHJldHVybiBuZXcgU2lnbkRhdGEoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHNpZ25hdHVyZShhdHRycykge1xuICAgIHJldHVybiBuZXcgU2lnbmF0dXJlKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBzaWduaW5nKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBTaWduaW5nKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBzb2xpZChhdHRycykge1xuICAgIHJldHVybiBuZXcgU29saWQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHNwZWFrKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBTcGVhayhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgc3RpcHBsZShhdHRycykge1xuICAgIHJldHVybiBuZXcgU3RpcHBsZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgc3ViZm9ybShhdHRycykge1xuICAgIHJldHVybiBuZXcgU3ViZm9ybShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgc3ViZm9ybVNldChhdHRycykge1xuICAgIHJldHVybiBuZXcgU3ViZm9ybVNldChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgc3ViamVjdEROKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBTdWJqZWN0RE4oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHN1YmplY3RETnMoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFN1YmplY3RETnMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHN1Ym1pdChhdHRycykge1xuICAgIHJldHVybiBuZXcgU3VibWl0KGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB0ZW1wbGF0ZShhdHRycykge1xuICAgIHJldHVybiBuZXcgVGVtcGxhdGUoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHRleHQoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFRleHQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHRleHRFZGl0KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0RWRpdChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgdGltZShhdHRycykge1xuICAgIHJldHVybiBuZXcgVGltZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgdGltZVN0YW1wKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBUaW1lU3RhbXAoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHRvb2xUaXAoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFRvb2xUaXAoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHRyYXZlcnNhbChhdHRycykge1xuICAgIHJldHVybiBuZXcgVHJhdmVyc2FsKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB0cmF2ZXJzZShhdHRycykge1xuICAgIHJldHVybiBuZXcgVHJhdmVyc2UoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHVpKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBVaShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGUoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFZhbGlkYXRlKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB2YWx1ZShhdHRycykge1xuICAgIHJldHVybiBuZXcgVmFsdWUoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHZhcmlhYmxlcyhhdHRycykge1xuICAgIHJldHVybiBuZXcgVmFyaWFibGVzKGF0dHJzKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuVGVtcGxhdGVOYW1lc3BhY2UgPSBUZW1wbGF0ZU5hbWVzcGFjZTtcblxuLyoqKi8gfSksXG4vKiA4MSAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5hZGRIVE1MID0gYWRkSFRNTDtcbmV4cG9ydHMuY2hlY2tEaW1lbnNpb25zID0gY2hlY2tEaW1lbnNpb25zO1xuZXhwb3J0cy5mbHVzaEhUTUwgPSBmbHVzaEhUTUw7XG5leHBvcnRzLmdldEF2YWlsYWJsZVNwYWNlID0gZ2V0QXZhaWxhYmxlU3BhY2U7XG5cbnZhciBfeGZhX29iamVjdCA9IF9fd19wZGZqc19yZXF1aXJlX18oNzUpO1xuXG52YXIgX2h0bWxfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDgyKTtcblxuZnVuY3Rpb24gY3JlYXRlTGluZShub2RlLCBjaGlsZHJlbikge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IFwiZGl2XCIsXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgY2xhc3M6IFtub2RlLmxheW91dCA9PT0gXCJsci10YlwiID8gXCJ4ZmFMclwiIDogXCJ4ZmFSbFwiXVxuICAgIH0sXG4gICAgY2hpbGRyZW5cbiAgfTtcbn1cblxuZnVuY3Rpb24gZmx1c2hIVE1MKG5vZGUpIHtcbiAgaWYgKCFub2RlW194ZmFfb2JqZWN0LiRleHRyYV0pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGF0dHJpYnV0ZXMgPSBub2RlW194ZmFfb2JqZWN0LiRleHRyYV0uYXR0cmlidXRlcztcbiAgY29uc3QgaHRtbCA9IHtcbiAgICBuYW1lOiBcImRpdlwiLFxuICAgIGF0dHJpYnV0ZXMsXG4gICAgY2hpbGRyZW46IG5vZGVbX3hmYV9vYmplY3QuJGV4dHJhXS5jaGlsZHJlblxuICB9O1xuXG4gIGlmIChub2RlW194ZmFfb2JqZWN0LiRleHRyYV0uZmFpbGluZ05vZGUpIHtcbiAgICBjb25zdCBodG1sRnJvbUZhaWxpbmcgPSBub2RlW194ZmFfb2JqZWN0LiRleHRyYV0uZmFpbGluZ05vZGVbX3hmYV9vYmplY3QuJGZsdXNoSFRNTF0oKTtcblxuICAgIGlmIChodG1sRnJvbUZhaWxpbmcpIHtcbiAgICAgIGlmIChub2RlLmxheW91dC5lbmRzV2l0aChcIi10YlwiKSkge1xuICAgICAgICBodG1sLmNoaWxkcmVuLnB1c2goY3JlYXRlTGluZShub2RlLCBbaHRtbEZyb21GYWlsaW5nXSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaHRtbC5jaGlsZHJlbi5wdXNoKGh0bWxGcm9tRmFpbGluZyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGh0bWwuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gaHRtbDtcbn1cblxuZnVuY3Rpb24gYWRkSFRNTChub2RlLCBodG1sLCBiYm94KSB7XG4gIGNvbnN0IGV4dHJhID0gbm9kZVtfeGZhX29iamVjdC4kZXh0cmFdO1xuICBjb25zdCBhdmFpbGFibGVTcGFjZSA9IGV4dHJhLmF2YWlsYWJsZVNwYWNlO1xuICBjb25zdCBbeCwgeSwgdywgaF0gPSBiYm94O1xuXG4gIHN3aXRjaCAobm9kZS5sYXlvdXQpIHtcbiAgICBjYXNlIFwicG9zaXRpb25cIjpcbiAgICAgIHtcbiAgICAgICAgZXh0cmEud2lkdGggPSBNYXRoLm1heChleHRyYS53aWR0aCwgeCArIHcpO1xuICAgICAgICBleHRyYS5oZWlnaHQgPSBNYXRoLm1heChleHRyYS5oZWlnaHQsIHkgKyBoKTtcbiAgICAgICAgZXh0cmEuY2hpbGRyZW4ucHVzaChodG1sKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFwibHItdGJcIjpcbiAgICBjYXNlIFwicmwtdGJcIjpcbiAgICAgIGlmICghZXh0cmEubGluZSB8fCBleHRyYS5hdHRlbXB0ID09PSAxKSB7XG4gICAgICAgIGV4dHJhLmxpbmUgPSBjcmVhdGVMaW5lKG5vZGUsIFtdKTtcbiAgICAgICAgZXh0cmEuY2hpbGRyZW4ucHVzaChleHRyYS5saW5lKTtcbiAgICAgICAgZXh0cmEubnVtYmVySW5MaW5lID0gMDtcbiAgICAgIH1cblxuICAgICAgZXh0cmEubnVtYmVySW5MaW5lICs9IDE7XG4gICAgICBleHRyYS5saW5lLmNoaWxkcmVuLnB1c2goaHRtbCk7XG5cbiAgICAgIGlmIChleHRyYS5hdHRlbXB0ID09PSAwKSB7XG4gICAgICAgIGV4dHJhLmN1cnJlbnRXaWR0aCArPSB3O1xuICAgICAgICBleHRyYS5oZWlnaHQgPSBNYXRoLm1heChleHRyYS5oZWlnaHQsIGV4dHJhLnByZXZIZWlnaHQgKyBoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4dHJhLmN1cnJlbnRXaWR0aCA9IHc7XG4gICAgICAgIGV4dHJhLnByZXZIZWlnaHQgPSBleHRyYS5oZWlnaHQ7XG4gICAgICAgIGV4dHJhLmhlaWdodCArPSBoO1xuICAgICAgICBleHRyYS5hdHRlbXB0ID0gMDtcbiAgICAgIH1cblxuICAgICAgZXh0cmEud2lkdGggPSBNYXRoLm1heChleHRyYS53aWR0aCwgZXh0cmEuY3VycmVudFdpZHRoKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInJsLXJvd1wiOlxuICAgIGNhc2UgXCJyb3dcIjpcbiAgICAgIHtcbiAgICAgICAgZXh0cmEuY2hpbGRyZW4ucHVzaChodG1sKTtcbiAgICAgICAgZXh0cmEud2lkdGggKz0gdztcbiAgICAgICAgZXh0cmEuaGVpZ2h0ID0gTWF0aC5tYXgoZXh0cmEuaGVpZ2h0LCBoKTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykoZXh0cmEuaGVpZ2h0KTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGV4dHJhLmNoaWxkcmVuKSB7XG4gICAgICAgICAgY2hpbGQuYXR0cmlidXRlcy5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgXCJ0YWJsZVwiOlxuICAgICAge1xuICAgICAgICBleHRyYS53aWR0aCA9IE1hdGgubWluKGF2YWlsYWJsZVNwYWNlLndpZHRoLCBNYXRoLm1heChleHRyYS53aWR0aCwgdykpO1xuICAgICAgICBleHRyYS5oZWlnaHQgKz0gaDtcbiAgICAgICAgZXh0cmEuY2hpbGRyZW4ucHVzaChodG1sKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFwidGJcIjpcbiAgICAgIHtcbiAgICAgICAgZXh0cmEud2lkdGggPSBNYXRoLm1pbihhdmFpbGFibGVTcGFjZS53aWR0aCwgTWF0aC5tYXgoZXh0cmEud2lkdGgsIHcpKTtcbiAgICAgICAgZXh0cmEuaGVpZ2h0ICs9IGg7XG4gICAgICAgIGV4dHJhLmNoaWxkcmVuLnB1c2goaHRtbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldEF2YWlsYWJsZVNwYWNlKG5vZGUpIHtcbiAgY29uc3QgYXZhaWxhYmxlU3BhY2UgPSBub2RlW194ZmFfb2JqZWN0LiRleHRyYV0uYXZhaWxhYmxlU3BhY2U7XG4gIGNvbnN0IG1hcmdpblYgPSBub2RlLm1hcmdpbiA/IG5vZGUubWFyZ2luLnRvcEluc2V0ICsgbm9kZS5tYXJnaW4uYm90dG9tSW5zZXQgOiAwO1xuICBjb25zdCBtYXJnaW5IID0gbm9kZS5tYXJnaW4gPyBub2RlLm1hcmdpbi5sZWZ0SW5zZXQgKyBub2RlLm1hcmdpbi5yaWdodEluc2V0IDogMDtcblxuICBzd2l0Y2ggKG5vZGUubGF5b3V0KSB7XG4gICAgY2FzZSBcImxyLXRiXCI6XG4gICAgY2FzZSBcInJsLXRiXCI6XG4gICAgICBpZiAobm9kZVtfeGZhX29iamVjdC4kZXh0cmFdLmF0dGVtcHQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB3aWR0aDogYXZhaWxhYmxlU3BhY2Uud2lkdGggLSBtYXJnaW5IIC0gbm9kZVtfeGZhX29iamVjdC4kZXh0cmFdLmN1cnJlbnRXaWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IGF2YWlsYWJsZVNwYWNlLmhlaWdodCAtIG1hcmdpblYgLSBub2RlW194ZmFfb2JqZWN0LiRleHRyYV0ucHJldkhlaWdodFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogYXZhaWxhYmxlU3BhY2Uud2lkdGggLSBtYXJnaW5ILFxuICAgICAgICBoZWlnaHQ6IGF2YWlsYWJsZVNwYWNlLmhlaWdodCAtIG1hcmdpblYgLSBub2RlW194ZmFfb2JqZWN0LiRleHRyYV0uaGVpZ2h0XG4gICAgICB9O1xuXG4gICAgY2FzZSBcInJsLXJvd1wiOlxuICAgIGNhc2UgXCJyb3dcIjpcbiAgICAgIGNvbnN0IHdpZHRoID0gbm9kZVtfeGZhX29iamVjdC4kZXh0cmFdLmNvbHVtbldpZHRocy5zbGljZShub2RlW194ZmFfb2JqZWN0LiRleHRyYV0uY3VycmVudENvbHVtbikucmVkdWNlKChhLCB4KSA9PiBhICsgeCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQ6IGF2YWlsYWJsZVNwYWNlLmhlaWdodCAtIG1hcmdpbkhcbiAgICAgIH07XG5cbiAgICBjYXNlIFwidGFibGVcIjpcbiAgICBjYXNlIFwidGJcIjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiBhdmFpbGFibGVTcGFjZS53aWR0aCAtIG1hcmdpbkgsXG4gICAgICAgIGhlaWdodDogYXZhaWxhYmxlU3BhY2UuaGVpZ2h0IC0gbWFyZ2luViAtIG5vZGVbX3hmYV9vYmplY3QuJGV4dHJhXS5oZWlnaHRcbiAgICAgIH07XG5cbiAgICBjYXNlIFwicG9zaXRpb25cIjpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGF2YWlsYWJsZVNwYWNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zZm9ybWVkQkJveChub2RlKSB7XG4gIGxldCB3ID0gbm9kZS53ID09PSBcIlwiID8gTmFOIDogbm9kZS53O1xuICBsZXQgaCA9IG5vZGUuaCA9PT0gXCJcIiA/IE5hTiA6IG5vZGUuaDtcbiAgbGV0IFtjZW50ZXJYLCBjZW50ZXJZXSA9IFswLCAwXTtcblxuICBzd2l0Y2ggKG5vZGUuYW5jaG9yVHlwZSB8fCBcIlwiKSB7XG4gICAgY2FzZSBcImJvdHRvbUNlbnRlclwiOlxuICAgICAgW2NlbnRlclgsIGNlbnRlclldID0gW3cgLyAyLCBoXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcImJvdHRvbUxlZnRcIjpcbiAgICAgIFtjZW50ZXJYLCBjZW50ZXJZXSA9IFswLCBoXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcImJvdHRvbVJpZ2h0XCI6XG4gICAgICBbY2VudGVyWCwgY2VudGVyWV0gPSBbdywgaF07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJtaWRkbGVDZW50ZXJcIjpcbiAgICAgIFtjZW50ZXJYLCBjZW50ZXJZXSA9IFt3IC8gMiwgaCAvIDJdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwibWlkZGxlTGVmdFwiOlxuICAgICAgW2NlbnRlclgsIGNlbnRlclldID0gWzAsIGggLyAyXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIm1pZGRsZVJpZ2h0XCI6XG4gICAgICBbY2VudGVyWCwgY2VudGVyWV0gPSBbdywgaCAvIDJdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwidG9wQ2VudGVyXCI6XG4gICAgICBbY2VudGVyWCwgY2VudGVyWV0gPSBbdyAvIDIsIDBdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwidG9wUmlnaHRcIjpcbiAgICAgIFtjZW50ZXJYLCBjZW50ZXJZXSA9IFt3LCAwXTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgbGV0IHgsIHk7XG5cbiAgc3dpdGNoIChub2RlLnJvdGF0ZSB8fCAwKSB7XG4gICAgY2FzZSAwOlxuICAgICAgW3gsIHldID0gWy1jZW50ZXJYLCAtY2VudGVyWV07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgOTA6XG4gICAgICBbeCwgeV0gPSBbLWNlbnRlclksIGNlbnRlclhdO1xuICAgICAgW3csIGhdID0gW2gsIC13XTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAxODA6XG4gICAgICBbeCwgeV0gPSBbY2VudGVyWCwgY2VudGVyWV07XG4gICAgICBbdywgaF0gPSBbLXcsIC1oXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAyNzA6XG4gICAgICBbeCwgeV0gPSBbY2VudGVyWSwgLWNlbnRlclhdO1xuICAgICAgW3csIGhdID0gWy1oLCB3XTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIFtub2RlLnggKyB4ICsgTWF0aC5taW4oMCwgdyksIG5vZGUueSArIHkgKyBNYXRoLm1pbigwLCBoKSwgTWF0aC5hYnModyksIE1hdGguYWJzKGgpXTtcbn1cblxuZnVuY3Rpb24gY2hlY2tEaW1lbnNpb25zKG5vZGUsIHNwYWNlKSB7XG4gIGlmIChub2RlW194ZmFfb2JqZWN0LiRnZXRUZW1wbGF0ZVJvb3RdKClbX3hmYV9vYmplY3QuJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKG5vZGUudyA9PT0gMCB8fCBub2RlLmggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IEVSUk9SID0gMjtcblxuICBjb25zdCBwYXJlbnQgPSBub2RlW194ZmFfb2JqZWN0LiRnZXRTdWJmb3JtUGFyZW50XSgpO1xuXG4gIGNvbnN0IGF0dGVtcHQgPSBwYXJlbnRbX3hmYV9vYmplY3QuJGV4dHJhXSAmJiBwYXJlbnRbX3hmYV9vYmplY3QuJGV4dHJhXS5hdHRlbXB0IHx8IDA7XG4gIGNvbnN0IFssIHksIHcsIGhdID0gZ2V0VHJhbnNmb3JtZWRCQm94KG5vZGUpO1xuXG4gIHN3aXRjaCAocGFyZW50LmxheW91dCkge1xuICAgIGNhc2UgXCJsci10YlwiOlxuICAgIGNhc2UgXCJybC10YlwiOlxuICAgICAgaWYgKGF0dGVtcHQgPT09IDApIHtcbiAgICAgICAgaWYgKCFub2RlW194ZmFfb2JqZWN0LiRnZXRUZW1wbGF0ZVJvb3RdKClbX3hmYV9vYmplY3QuJGV4dHJhXS5ub0xheW91dEZhaWx1cmUpIHtcbiAgICAgICAgICBpZiAobm9kZS5oICE9PSBcIlwiICYmIE1hdGgucm91bmQoaCAtIHNwYWNlLmhlaWdodCkgPiBFUlJPUikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChub2RlLncgIT09IFwiXCIpIHtcbiAgICAgICAgICAgIGlmIChNYXRoLnJvdW5kKHcgLSBzcGFjZS53aWR0aCkgPD0gRVJST1IpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnRbX3hmYV9vYmplY3QuJGV4dHJhXS5udW1iZXJJbkxpbmUgPT09IDApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNwYWNlLmhlaWdodCA+IEVSUk9SO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHNwYWNlLndpZHRoID4gRVJST1I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS53ICE9PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQodyAtIHNwYWNlLndpZHRoKSA8PSBFUlJPUjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzcGFjZS53aWR0aCA+IEVSUk9SO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZVtfeGZhX29iamVjdC4kZ2V0VGVtcGxhdGVSb290XSgpW194ZmFfb2JqZWN0LiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5oICE9PSBcIlwiICYmIE1hdGgucm91bmQoaCAtIHNwYWNlLmhlaWdodCkgPiBFUlJPUikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLncgPT09IFwiXCIgfHwgTWF0aC5yb3VuZCh3IC0gc3BhY2Uud2lkdGgpIDw9IEVSUk9SKSB7XG4gICAgICAgIHJldHVybiBzcGFjZS5oZWlnaHQgPiBFUlJPUjtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVudFtfeGZhX29iamVjdC4kaXNUaGVyZU1vcmVXaWR0aF0oKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzcGFjZS5oZWlnaHQgPiBFUlJPUjtcblxuICAgIGNhc2UgXCJ0YWJsZVwiOlxuICAgIGNhc2UgXCJ0YlwiOlxuICAgICAgaWYgKG5vZGVbX3hmYV9vYmplY3QuJGdldFRlbXBsYXRlUm9vdF0oKVtfeGZhX29iamVjdC4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUuaCAhPT0gXCJcIiAmJiAhbm9kZVtfeGZhX29iamVjdC4kaXNTcGxpdHRhYmxlXSgpKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKGggLSBzcGFjZS5oZWlnaHQpIDw9IEVSUk9SO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS53ID09PSBcIlwiIHx8IE1hdGgucm91bmQodyAtIHNwYWNlLndpZHRoKSA8PSBFUlJPUikge1xuICAgICAgICByZXR1cm4gc3BhY2UuaGVpZ2h0ID4gRVJST1I7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJlbnRbX3hmYV9vYmplY3QuJGlzVGhlcmVNb3JlV2lkdGhdKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3BhY2UuaGVpZ2h0ID4gRVJST1I7XG5cbiAgICBjYXNlIFwicG9zaXRpb25cIjpcbiAgICAgIGlmIChub2RlW194ZmFfb2JqZWN0LiRnZXRUZW1wbGF0ZVJvb3RdKClbX3hmYV9vYmplY3QuJGV4dHJhXS5ub0xheW91dEZhaWx1cmUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLmggPT09IFwiXCIgfHwgTWF0aC5yb3VuZChoICsgeSAtIHNwYWNlLmhlaWdodCkgPD0gRVJST1IpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFyZWEgPSBub2RlW194ZmFfb2JqZWN0LiRnZXRUZW1wbGF0ZVJvb3RdKClbX3hmYV9vYmplY3QuJGV4dHJhXS5jdXJyZW50Q29udGVudEFyZWE7XG5cbiAgICAgIHJldHVybiBoICsgeSA+IGFyZWEuaDtcblxuICAgIGNhc2UgXCJybC1yb3dcIjpcbiAgICBjYXNlIFwicm93XCI6XG4gICAgICBpZiAobm9kZVtfeGZhX29iamVjdC4kZ2V0VGVtcGxhdGVSb290XSgpW194ZmFfb2JqZWN0LiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5oICE9PSBcIlwiKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKGggLSBzcGFjZS5oZWlnaHQpIDw9IEVSUk9SO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKioqLyB9KSxcbi8qIDgyICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLmNvbXB1dGVCYm94ID0gY29tcHV0ZUJib3g7XG5leHBvcnRzLmNyZWF0ZVdyYXBwZXIgPSBjcmVhdGVXcmFwcGVyO1xuZXhwb3J0cy5maXhEaW1lbnNpb25zID0gZml4RGltZW5zaW9ucztcbmV4cG9ydHMuZml4VGV4dEluZGVudCA9IGZpeFRleHRJbmRlbnQ7XG5leHBvcnRzLmZpeFVSTCA9IGZpeFVSTDtcbmV4cG9ydHMuaXNQcmludE9ubHkgPSBpc1ByaW50T25seTtcbmV4cG9ydHMubGF5b3V0Q2xhc3MgPSBsYXlvdXRDbGFzcztcbmV4cG9ydHMubGF5b3V0Tm9kZSA9IGxheW91dE5vZGU7XG5leHBvcnRzLm1lYXN1cmVUb1N0cmluZyA9IG1lYXN1cmVUb1N0cmluZztcbmV4cG9ydHMuc2V0QWNjZXNzID0gc2V0QWNjZXNzO1xuZXhwb3J0cy5zZXRGb250RmFtaWx5ID0gc2V0Rm9udEZhbWlseTtcbmV4cG9ydHMuc2V0TWluTWF4RGltZW5zaW9ucyA9IHNldE1pbk1heERpbWVuc2lvbnM7XG5leHBvcnRzLnNldFBhcmEgPSBzZXRQYXJhO1xuZXhwb3J0cy50b1N0eWxlID0gdG9TdHlsZTtcblxudmFyIF94ZmFfb2JqZWN0ID0gX193X3BkZmpzX3JlcXVpcmVfXyg3NSk7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc2KTtcblxudmFyIF9mb250cyA9IF9fd19wZGZqc19yZXF1aXJlX18oODMpO1xuXG52YXIgX3RleHQgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDg0KTtcblxuZnVuY3Rpb24gbWVhc3VyZVRvU3RyaW5nKG0pIHtcbiAgaWYgKHR5cGVvZiBtID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIFwiMHB4XCI7XG4gIH1cblxuICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihtKSA/IGAke219cHhgIDogYCR7bS50b0ZpeGVkKDIpfXB4YDtcbn1cblxuY29uc3QgY29udmVydGVycyA9IHtcbiAgYW5jaG9yVHlwZShub2RlLCBzdHlsZSkge1xuICAgIGNvbnN0IHBhcmVudCA9IG5vZGVbX3hmYV9vYmplY3QuJGdldFN1YmZvcm1QYXJlbnRdKCk7XG5cbiAgICBpZiAoIXBhcmVudCB8fCBwYXJlbnQubGF5b3V0ICYmIHBhcmVudC5sYXlvdXQgIT09IFwicG9zaXRpb25cIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghKFwidHJhbnNmb3JtXCIgaW4gc3R5bGUpKSB7XG4gICAgICBzdHlsZS50cmFuc2Zvcm0gPSBcIlwiO1xuICAgIH1cblxuICAgIHN3aXRjaCAobm9kZS5hbmNob3JUeXBlKSB7XG4gICAgICBjYXNlIFwiYm90dG9tQ2VudGVyXCI6XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSArPSBcInRyYW5zbGF0ZSgtNTAlLCAtMTAwJSlcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJib3R0b21MZWZ0XCI6XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSArPSBcInRyYW5zbGF0ZSgwLC0xMDAlKVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImJvdHRvbVJpZ2h0XCI6XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSArPSBcInRyYW5zbGF0ZSgtMTAwJSwtMTAwJSlcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJtaWRkbGVDZW50ZXJcIjpcbiAgICAgICAgc3R5bGUudHJhbnNmb3JtICs9IFwidHJhbnNsYXRlKC01MCUsLTUwJSlcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJtaWRkbGVMZWZ0XCI6XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSArPSBcInRyYW5zbGF0ZSgwLC01MCUpXCI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwibWlkZGxlUmlnaHRcIjpcbiAgICAgICAgc3R5bGUudHJhbnNmb3JtICs9IFwidHJhbnNsYXRlKC0xMDAlLC01MCUpXCI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwidG9wQ2VudGVyXCI6XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSArPSBcInRyYW5zbGF0ZSgtNTAlLDApXCI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwidG9wUmlnaHRcIjpcbiAgICAgICAgc3R5bGUudHJhbnNmb3JtICs9IFwidHJhbnNsYXRlKC0xMDAlLDApXCI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSxcblxuICBkaW1lbnNpb25zKG5vZGUsIHN0eWxlKSB7XG4gICAgY29uc3QgcGFyZW50ID0gbm9kZVtfeGZhX29iamVjdC4kZ2V0U3ViZm9ybVBhcmVudF0oKTtcblxuICAgIGxldCB3aWR0aCA9IG5vZGUudztcbiAgICBjb25zdCBoZWlnaHQgPSBub2RlLmg7XG5cbiAgICBpZiAocGFyZW50LmxheW91dCAmJiBwYXJlbnQubGF5b3V0LmluY2x1ZGVzKFwicm93XCIpKSB7XG4gICAgICBjb25zdCBleHRyYSA9IHBhcmVudFtfeGZhX29iamVjdC4kZXh0cmFdO1xuICAgICAgY29uc3QgY29sU3BhbiA9IG5vZGUuY29sU3BhbjtcbiAgICAgIGxldCB3O1xuXG4gICAgICBpZiAoY29sU3BhbiA9PT0gLTEpIHtcbiAgICAgICAgdyA9IGV4dHJhLmNvbHVtbldpZHRocy5zbGljZShleHRyYS5jdXJyZW50Q29sdW1uKS5yZWR1Y2UoKGEsIHgpID0+IGEgKyB4LCAwKTtcbiAgICAgICAgZXh0cmEuY3VycmVudENvbHVtbiA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3ID0gZXh0cmEuY29sdW1uV2lkdGhzLnNsaWNlKGV4dHJhLmN1cnJlbnRDb2x1bW4sIGV4dHJhLmN1cnJlbnRDb2x1bW4gKyBjb2xTcGFuKS5yZWR1Y2UoKGEsIHgpID0+IGEgKyB4LCAwKTtcbiAgICAgICAgZXh0cmEuY3VycmVudENvbHVtbiA9IChleHRyYS5jdXJyZW50Q29sdW1uICsgbm9kZS5jb2xTcGFuKSAlIGV4dHJhLmNvbHVtbldpZHRocy5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4odykpIHtcbiAgICAgICAgd2lkdGggPSBub2RlLncgPSB3O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3aWR0aCAhPT0gXCJcIikge1xuICAgICAgc3R5bGUud2lkdGggPSBtZWFzdXJlVG9TdHJpbmcod2lkdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZS53aWR0aCA9IFwiYXV0b1wiO1xuICAgIH1cblxuICAgIGlmIChoZWlnaHQgIT09IFwiXCIpIHtcbiAgICAgIHN0eWxlLmhlaWdodCA9IG1lYXN1cmVUb1N0cmluZyhoZWlnaHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZS5oZWlnaHQgPSBcImF1dG9cIjtcbiAgICB9XG4gIH0sXG5cbiAgcG9zaXRpb24obm9kZSwgc3R5bGUpIHtcbiAgICBjb25zdCBwYXJlbnQgPSBub2RlW194ZmFfb2JqZWN0LiRnZXRTdWJmb3JtUGFyZW50XSgpO1xuXG4gICAgaWYgKHBhcmVudCAmJiBwYXJlbnQubGF5b3V0ICYmIHBhcmVudC5sYXlvdXQgIT09IFwicG9zaXRpb25cIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgIHN0eWxlLmxlZnQgPSBtZWFzdXJlVG9TdHJpbmcobm9kZS54KTtcbiAgICBzdHlsZS50b3AgPSBtZWFzdXJlVG9TdHJpbmcobm9kZS55KTtcbiAgfSxcblxuICByb3RhdGUobm9kZSwgc3R5bGUpIHtcbiAgICBpZiAobm9kZS5yb3RhdGUpIHtcbiAgICAgIGlmICghKFwidHJhbnNmb3JtXCIgaW4gc3R5bGUpKSB7XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSA9IFwiXCI7XG4gICAgICB9XG5cbiAgICAgIHN0eWxlLnRyYW5zZm9ybSArPSBgcm90YXRlKC0ke25vZGUucm90YXRlfWRlZylgO1xuICAgICAgc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gXCJ0b3AgbGVmdFwiO1xuICAgIH1cbiAgfSxcblxuICBwcmVzZW5jZShub2RlLCBzdHlsZSkge1xuICAgIHN3aXRjaCAobm9kZS5wcmVzZW5jZSkge1xuICAgICAgY2FzZSBcImludmlzaWJsZVwiOlxuICAgICAgICBzdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJoaWRkZW5cIjpcbiAgICAgIGNhc2UgXCJpbmFjdGl2ZVwiOlxuICAgICAgICBzdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSxcblxuICBoQWxpZ24obm9kZSwgc3R5bGUpIHtcbiAgICBpZiAobm9kZVtfeGZhX29iamVjdC4kbm9kZU5hbWVdID09PSBcInBhcmFcIikge1xuICAgICAgc3dpdGNoIChub2RlLmhBbGlnbikge1xuICAgICAgICBjYXNlIFwianVzdGlmeUFsbFwiOlxuICAgICAgICAgIHN0eWxlLnRleHRBbGlnbiA9IFwianVzdGlmeS1hbGxcIjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwicmFkaXhcIjpcbiAgICAgICAgICBzdHlsZS50ZXh0QWxpZ24gPSBcImxlZnRcIjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHN0eWxlLnRleHRBbGlnbiA9IG5vZGUuaEFsaWduO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzd2l0Y2ggKG5vZGUuaEFsaWduKSB7XG4gICAgICAgIGNhc2UgXCJsZWZ0XCI6XG4gICAgICAgICAgc3R5bGUuYWxpZ25TZWxmID0gXCJzdGFydFwiO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJjZW50ZXJcIjpcbiAgICAgICAgICBzdHlsZS5hbGlnblNlbGYgPSBcImNlbnRlclwiO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJyaWdodFwiOlxuICAgICAgICAgIHN0eWxlLmFsaWduU2VsZiA9IFwiZW5kXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1hcmdpbihub2RlLCBzdHlsZSkge1xuICAgIGlmIChub2RlLm1hcmdpbikge1xuICAgICAgc3R5bGUubWFyZ2luID0gbm9kZS5tYXJnaW5bX3hmYV9vYmplY3QuJHRvU3R5bGVdKCkubWFyZ2luO1xuICAgIH1cbiAgfVxuXG59O1xuXG5mdW5jdGlvbiBzZXRNaW5NYXhEaW1lbnNpb25zKG5vZGUsIHN0eWxlKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGVbX3hmYV9vYmplY3QuJGdldFN1YmZvcm1QYXJlbnRdKCk7XG5cbiAgaWYgKHBhcmVudC5sYXlvdXQgPT09IFwicG9zaXRpb25cIikge1xuICAgIGlmIChub2RlLm1pblcgPiAwKSB7XG4gICAgICBzdHlsZS5taW5XaWR0aCA9IG1lYXN1cmVUb1N0cmluZyhub2RlLm1pblcpO1xuICAgIH1cblxuICAgIGlmIChub2RlLm1heFcgPiAwKSB7XG4gICAgICBzdHlsZS5tYXhXaWR0aCA9IG1lYXN1cmVUb1N0cmluZyhub2RlLm1heFcpO1xuICAgIH1cblxuICAgIGlmIChub2RlLm1pbkggPiAwKSB7XG4gICAgICBzdHlsZS5taW5IZWlnaHQgPSBtZWFzdXJlVG9TdHJpbmcobm9kZS5taW5IKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5tYXhIID4gMCkge1xuICAgICAgc3R5bGUubWF4SGVpZ2h0ID0gbWVhc3VyZVRvU3RyaW5nKG5vZGUubWF4SCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGxheW91dFRleHQodGV4dCwgeGZhRm9udCwgbWFyZ2luLCBsaW5lSGVpZ2h0LCBmb250RmluZGVyLCB3aWR0aCkge1xuICBjb25zdCBtZWFzdXJlID0gbmV3IF90ZXh0LlRleHRNZWFzdXJlKHhmYUZvbnQsIG1hcmdpbiwgbGluZUhlaWdodCwgZm9udEZpbmRlcik7XG5cbiAgaWYgKHR5cGVvZiB0ZXh0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgbWVhc3VyZS5hZGRTdHJpbmcodGV4dCk7XG4gIH0gZWxzZSB7XG4gICAgdGV4dFtfeGZhX29iamVjdC4kcHVzaEdseXBoc10obWVhc3VyZSk7XG4gIH1cblxuICByZXR1cm4gbWVhc3VyZS5jb21wdXRlKHdpZHRoKTtcbn1cblxuZnVuY3Rpb24gbGF5b3V0Tm9kZShub2RlLCBhdmFpbGFibGVTcGFjZSkge1xuICBsZXQgaGVpZ2h0ID0gbnVsbDtcbiAgbGV0IHdpZHRoID0gbnVsbDtcbiAgbGV0IGlzQnJva2VuID0gZmFsc2U7XG5cbiAgaWYgKCghbm9kZS53IHx8ICFub2RlLmgpICYmIG5vZGUudmFsdWUpIHtcbiAgICBsZXQgbWFyZ2luSCA9IDA7XG4gICAgbGV0IG1hcmdpblYgPSAwO1xuXG4gICAgaWYgKG5vZGUubWFyZ2luKSB7XG4gICAgICBtYXJnaW5IID0gbm9kZS5tYXJnaW4ubGVmdEluc2V0ICsgbm9kZS5tYXJnaW4ucmlnaHRJbnNldDtcbiAgICAgIG1hcmdpblYgPSBub2RlLm1hcmdpbi50b3BJbnNldCArIG5vZGUubWFyZ2luLmJvdHRvbUluc2V0O1xuICAgIH1cblxuICAgIGxldCBsaW5lSGVpZ2h0ID0gbnVsbDtcbiAgICBsZXQgbWFyZ2luID0gbnVsbDtcblxuICAgIGlmIChub2RlLnBhcmEpIHtcbiAgICAgIG1hcmdpbiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICBsaW5lSGVpZ2h0ID0gbm9kZS5wYXJhLmxpbmVIZWlnaHQgPT09IFwiXCIgPyBudWxsIDogbm9kZS5wYXJhLmxpbmVIZWlnaHQ7XG4gICAgICBtYXJnaW4udG9wID0gbm9kZS5wYXJhLnNwYWNlQWJvdmUgPT09IFwiXCIgPyAwIDogbm9kZS5wYXJhLnNwYWNlQWJvdmU7XG4gICAgICBtYXJnaW4uYm90dG9tID0gbm9kZS5wYXJhLnNwYWNlQmVsb3cgPT09IFwiXCIgPyAwIDogbm9kZS5wYXJhLnNwYWNlQmVsb3c7XG4gICAgICBtYXJnaW4ubGVmdCA9IG5vZGUucGFyYS5tYXJnaW5MZWZ0ID09PSBcIlwiID8gMCA6IG5vZGUucGFyYS5tYXJnaW5MZWZ0O1xuICAgICAgbWFyZ2luLnJpZ2h0ID0gbm9kZS5wYXJhLm1hcmdpblJpZ2h0ID09PSBcIlwiID8gMCA6IG5vZGUucGFyYS5tYXJnaW5SaWdodDtcbiAgICB9XG5cbiAgICBsZXQgZm9udCA9IG5vZGUuZm9udDtcblxuICAgIGlmICghZm9udCkge1xuICAgICAgY29uc3Qgcm9vdCA9IG5vZGVbX3hmYV9vYmplY3QuJGdldFRlbXBsYXRlUm9vdF0oKTtcblxuICAgICAgbGV0IHBhcmVudCA9IG5vZGVbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQgIT09IHJvb3QpIHtcbiAgICAgICAgaWYgKHBhcmVudC5mb250KSB7XG4gICAgICAgICAgZm9udCA9IHBhcmVudC5mb250O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyZW50ID0gcGFyZW50W194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbWF4V2lkdGggPSAoIW5vZGUudyA/IGF2YWlsYWJsZVNwYWNlLndpZHRoIDogbm9kZS53KSAtIG1hcmdpbkg7XG4gICAgY29uc3QgZm9udEZpbmRlciA9IG5vZGVbX3hmYV9vYmplY3QuJGdsb2JhbERhdGFdLmZvbnRGaW5kZXI7XG5cbiAgICBpZiAobm9kZS52YWx1ZS5leERhdGEgJiYgbm9kZS52YWx1ZS5leERhdGFbX3hmYV9vYmplY3QuJGNvbnRlbnRdICYmIG5vZGUudmFsdWUuZXhEYXRhLmNvbnRlbnRUeXBlID09PSBcInRleHQvaHRtbFwiKSB7XG4gICAgICBjb25zdCByZXMgPSBsYXlvdXRUZXh0KG5vZGUudmFsdWUuZXhEYXRhW194ZmFfb2JqZWN0LiRjb250ZW50XSwgZm9udCwgbWFyZ2luLCBsaW5lSGVpZ2h0LCBmb250RmluZGVyLCBtYXhXaWR0aCk7XG4gICAgICB3aWR0aCA9IHJlcy53aWR0aDtcbiAgICAgIGhlaWdodCA9IHJlcy5oZWlnaHQ7XG4gICAgICBpc0Jyb2tlbiA9IHJlcy5pc0Jyb2tlbjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGV4dCA9IG5vZGUudmFsdWVbX3hmYV9vYmplY3QuJHRleHRdKCk7XG5cbiAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGxheW91dFRleHQodGV4dCwgZm9udCwgbWFyZ2luLCBsaW5lSGVpZ2h0LCBmb250RmluZGVyLCBtYXhXaWR0aCk7XG4gICAgICAgIHdpZHRoID0gcmVzLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSByZXMuaGVpZ2h0O1xuICAgICAgICBpc0Jyb2tlbiA9IHJlcy5pc0Jyb2tlbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod2lkdGggIT09IG51bGwgJiYgIW5vZGUudykge1xuICAgICAgd2lkdGggKz0gbWFyZ2luSDtcbiAgICB9XG5cbiAgICBpZiAoaGVpZ2h0ICE9PSBudWxsICYmICFub2RlLmgpIHtcbiAgICAgIGhlaWdodCArPSBtYXJnaW5WO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdzogd2lkdGgsXG4gICAgaDogaGVpZ2h0LFxuICAgIGlzQnJva2VuXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVCYm94KG5vZGUsIGh0bWwsIGF2YWlsYWJsZVNwYWNlKSB7XG4gIGxldCBiYm94O1xuXG4gIGlmIChub2RlLncgIT09IFwiXCIgJiYgbm9kZS5oICE9PSBcIlwiKSB7XG4gICAgYmJveCA9IFtub2RlLngsIG5vZGUueSwgbm9kZS53LCBub2RlLmhdO1xuICB9IGVsc2Uge1xuICAgIGlmICghYXZhaWxhYmxlU3BhY2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCB3aWR0aCA9IG5vZGUudztcblxuICAgIGlmICh3aWR0aCA9PT0gXCJcIikge1xuICAgICAgaWYgKG5vZGUubWF4VyA9PT0gMCkge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBub2RlW194ZmFfb2JqZWN0LiRnZXRTdWJmb3JtUGFyZW50XSgpO1xuXG4gICAgICAgIGlmIChwYXJlbnQubGF5b3V0ID09PSBcInBvc2l0aW9uXCIgJiYgcGFyZW50LncgIT09IFwiXCIpIHtcbiAgICAgICAgICB3aWR0aCA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2lkdGggPSBub2RlLm1pblc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpZHRoID0gTWF0aC5taW4obm9kZS5tYXhXLCBhdmFpbGFibGVTcGFjZS53aWR0aCk7XG4gICAgICB9XG5cbiAgICAgIGh0bWwuYXR0cmlidXRlcy5zdHlsZS53aWR0aCA9IG1lYXN1cmVUb1N0cmluZyh3aWR0aCk7XG4gICAgfVxuXG4gICAgbGV0IGhlaWdodCA9IG5vZGUuaDtcblxuICAgIGlmIChoZWlnaHQgPT09IFwiXCIpIHtcbiAgICAgIGlmIChub2RlLm1heEggPT09IDApIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gbm9kZVtfeGZhX29iamVjdC4kZ2V0U3ViZm9ybVBhcmVudF0oKTtcblxuICAgICAgICBpZiAocGFyZW50LmxheW91dCA9PT0gXCJwb3NpdGlvblwiICYmIHBhcmVudC5oICE9PSBcIlwiKSB7XG4gICAgICAgICAgaGVpZ2h0ID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoZWlnaHQgPSBub2RlLm1pbkg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlaWdodCA9IE1hdGgubWluKG5vZGUubWF4SCwgYXZhaWxhYmxlU3BhY2UuaGVpZ2h0KTtcbiAgICAgIH1cblxuICAgICAgaHRtbC5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodCA9IG1lYXN1cmVUb1N0cmluZyhoZWlnaHQpO1xuICAgIH1cblxuICAgIGJib3ggPSBbbm9kZS54LCBub2RlLnksIHdpZHRoLCBoZWlnaHRdO1xuICB9XG5cbiAgcmV0dXJuIGJib3g7XG59XG5cbmZ1bmN0aW9uIGZpeERpbWVuc2lvbnMobm9kZSkge1xuICBjb25zdCBwYXJlbnQgPSBub2RlW194ZmFfb2JqZWN0LiRnZXRTdWJmb3JtUGFyZW50XSgpO1xuXG4gIGlmIChwYXJlbnQubGF5b3V0ICYmIHBhcmVudC5sYXlvdXQuaW5jbHVkZXMoXCJyb3dcIikpIHtcbiAgICBjb25zdCBleHRyYSA9IHBhcmVudFtfeGZhX29iamVjdC4kZXh0cmFdO1xuICAgIGNvbnN0IGNvbFNwYW4gPSBub2RlLmNvbFNwYW47XG4gICAgbGV0IHdpZHRoO1xuXG4gICAgaWYgKGNvbFNwYW4gPT09IC0xKSB7XG4gICAgICB3aWR0aCA9IGV4dHJhLmNvbHVtbldpZHRocy5zbGljZShleHRyYS5jdXJyZW50Q29sdW1uKS5yZWR1Y2UoKGEsIHcpID0+IGEgKyB3LCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2lkdGggPSBleHRyYS5jb2x1bW5XaWR0aHMuc2xpY2UoZXh0cmEuY3VycmVudENvbHVtbiwgZXh0cmEuY3VycmVudENvbHVtbiArIGNvbFNwYW4pLnJlZHVjZSgoYSwgdykgPT4gYSArIHcsIDApO1xuICAgIH1cblxuICAgIGlmICghaXNOYU4od2lkdGgpKSB7XG4gICAgICBub2RlLncgPSB3aWR0aDtcbiAgICB9XG4gIH1cblxuICBpZiAocGFyZW50LmxheW91dCAmJiBwYXJlbnQubGF5b3V0ICE9PSBcInBvc2l0aW9uXCIpIHtcbiAgICBub2RlLnggPSBub2RlLnkgPSAwO1xuICB9XG5cbiAgaWYgKG5vZGUubGF5b3V0ID09PSBcInRhYmxlXCIpIHtcbiAgICBpZiAobm9kZS53ID09PSBcIlwiICYmIEFycmF5LmlzQXJyYXkobm9kZS5jb2x1bW5XaWR0aHMpKSB7XG4gICAgICBub2RlLncgPSBub2RlLmNvbHVtbldpZHRocy5yZWR1Y2UoKGEsIHgpID0+IGEgKyB4LCAwKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbGF5b3V0Q2xhc3Mobm9kZSkge1xuICBzd2l0Y2ggKG5vZGUubGF5b3V0KSB7XG4gICAgY2FzZSBcInBvc2l0aW9uXCI6XG4gICAgICByZXR1cm4gXCJ4ZmFQb3NpdGlvblwiO1xuXG4gICAgY2FzZSBcImxyLXRiXCI6XG4gICAgICByZXR1cm4gXCJ4ZmFMclRiXCI7XG5cbiAgICBjYXNlIFwicmwtcm93XCI6XG4gICAgICByZXR1cm4gXCJ4ZmFSbFJvd1wiO1xuXG4gICAgY2FzZSBcInJsLXRiXCI6XG4gICAgICByZXR1cm4gXCJ4ZmFSbFRiXCI7XG5cbiAgICBjYXNlIFwicm93XCI6XG4gICAgICByZXR1cm4gXCJ4ZmFSb3dcIjtcblxuICAgIGNhc2UgXCJ0YWJsZVwiOlxuICAgICAgcmV0dXJuIFwieGZhVGFibGVcIjtcblxuICAgIGNhc2UgXCJ0YlwiOlxuICAgICAgcmV0dXJuIFwieGZhVGJcIjtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJ4ZmFQb3NpdGlvblwiO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvU3R5bGUobm9kZSwgLi4ubmFtZXMpIHtcbiAgY29uc3Qgc3R5bGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuICAgIGNvbnN0IHZhbHVlID0gbm9kZVtuYW1lXTtcblxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGNvbnZlcnRlcnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIGNvbnZlcnRlcnNbbmFtZV0obm9kZSwgc3R5bGUpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgX3hmYV9vYmplY3QuWEZBT2JqZWN0KSB7XG4gICAgICBjb25zdCBuZXdTdHlsZSA9IHZhbHVlW194ZmFfb2JqZWN0LiR0b1N0eWxlXSgpO1xuXG4gICAgICBpZiAobmV3U3R5bGUpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzdHlsZSwgbmV3U3R5bGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGAoREVCVUcpIC0gWEZBIC0gc3R5bGUgZm9yICR7bmFtZX0gbm90IGltcGxlbWVudGVkIHlldGApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdHlsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlV3JhcHBlcihub2RlLCBodG1sKSB7XG4gIGNvbnN0IHtcbiAgICBhdHRyaWJ1dGVzXG4gIH0gPSBodG1sO1xuICBjb25zdCB7XG4gICAgc3R5bGVcbiAgfSA9IGF0dHJpYnV0ZXM7XG4gIGNvbnN0IHdyYXBwZXIgPSB7XG4gICAgbmFtZTogXCJkaXZcIixcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICBjbGFzczogW1wieGZhV3JhcHBlclwiXSxcbiAgICAgIHN0eWxlOiBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgfSxcbiAgICBjaGlsZHJlbjogW11cbiAgfTtcbiAgYXR0cmlidXRlcy5jbGFzcy5wdXNoKFwieGZhV3JhcHBlZFwiKTtcblxuICBpZiAobm9kZS5ib3JkZXIpIHtcbiAgICBjb25zdCB7XG4gICAgICB3aWR0aHMsXG4gICAgICBpbnNldHNcbiAgICB9ID0gbm9kZS5ib3JkZXJbX3hmYV9vYmplY3QuJGV4dHJhXTtcbiAgICBsZXQgd2lkdGgsIGhlaWdodDtcbiAgICBsZXQgdG9wID0gaW5zZXRzWzBdO1xuICAgIGxldCBsZWZ0ID0gaW5zZXRzWzNdO1xuICAgIGNvbnN0IGluc2V0c0ggPSBpbnNldHNbMF0gKyBpbnNldHNbMl07XG4gICAgY29uc3QgaW5zZXRzVyA9IGluc2V0c1sxXSArIGluc2V0c1szXTtcblxuICAgIHN3aXRjaCAobm9kZS5ib3JkZXIuaGFuZCkge1xuICAgICAgY2FzZSBcImV2ZW5cIjpcbiAgICAgICAgdG9wIC09IHdpZHRoc1swXSAvIDI7XG4gICAgICAgIGxlZnQgLT0gd2lkdGhzWzNdIC8gMjtcbiAgICAgICAgd2lkdGggPSBgY2FsYygxMDAlICsgJHsod2lkdGhzWzFdICsgd2lkdGhzWzNdKSAvIDIgLSBpbnNldHNXfXB4KWA7XG4gICAgICAgIGhlaWdodCA9IGBjYWxjKDEwMCUgKyAkeyh3aWR0aHNbMF0gKyB3aWR0aHNbMl0pIC8gMiAtIGluc2V0c0h9cHgpYDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJsZWZ0XCI6XG4gICAgICAgIHRvcCAtPSB3aWR0aHNbMF07XG4gICAgICAgIGxlZnQgLT0gd2lkdGhzWzNdO1xuICAgICAgICB3aWR0aCA9IGBjYWxjKDEwMCUgKyAke3dpZHRoc1sxXSArIHdpZHRoc1szXSAtIGluc2V0c1d9cHgpYDtcbiAgICAgICAgaGVpZ2h0ID0gYGNhbGMoMTAwJSArICR7d2lkdGhzWzBdICsgd2lkdGhzWzJdIC0gaW5zZXRzSH1weClgO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcInJpZ2h0XCI6XG4gICAgICAgIHdpZHRoID0gaW5zZXRzVyA/IGBjYWxjKDEwMCUgLSAke2luc2V0c1d9cHgpYCA6IFwiMTAwJVwiO1xuICAgICAgICBoZWlnaHQgPSBpbnNldHNIID8gYGNhbGMoMTAwJSAtICR7aW5zZXRzSH1weClgIDogXCIxMDAlXCI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBbXCJ4ZmFCb3JkZXJcIl07XG5cbiAgICBpZiAoaXNQcmludE9ubHkobm9kZS5ib3JkZXIpKSB7XG4gICAgICBjbGFzc05hbWVzLnB1c2goXCJ4ZmFQcmludE9ubHlcIik7XG4gICAgfVxuXG4gICAgY29uc3QgYm9yZGVyID0ge1xuICAgICAgbmFtZTogXCJkaXZcIixcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2xhc3M6IGNsYXNzTmFtZXMsXG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgdG9wOiBgJHt0b3B9cHhgLFxuICAgICAgICAgIGxlZnQ6IGAke2xlZnR9cHhgLFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIGhlaWdodFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2hpbGRyZW46IFtdXG4gICAgfTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIFtcImJvcmRlclwiLCBcImJvcmRlcldpZHRoXCIsIFwiYm9yZGVyQ29sb3JcIiwgXCJib3JkZXJSYWRpdXNcIiwgXCJib3JkZXJTdHlsZVwiXSkge1xuICAgICAgaWYgKHN0eWxlW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBib3JkZXIuYXR0cmlidXRlcy5zdHlsZVtrZXldID0gc3R5bGVba2V5XTtcbiAgICAgICAgZGVsZXRlIHN0eWxlW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgd3JhcHBlci5jaGlsZHJlbi5wdXNoKGJvcmRlciwgaHRtbCk7XG4gIH0gZWxzZSB7XG4gICAgd3JhcHBlci5jaGlsZHJlbi5wdXNoKGh0bWwpO1xuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgW1wiYmFja2dyb3VuZFwiLCBcImJhY2tncm91bmRDbGlwXCIsIFwidG9wXCIsIFwibGVmdFwiLCBcIndpZHRoXCIsIFwiaGVpZ2h0XCIsIFwibWluV2lkdGhcIiwgXCJtaW5IZWlnaHRcIiwgXCJtYXhXaWR0aFwiLCBcIm1heEhlaWdodFwiLCBcInRyYW5zZm9ybVwiLCBcInRyYW5zZm9ybU9yaWdpblwiLCBcInZpc2liaWxpdHlcIl0pIHtcbiAgICBpZiAoc3R5bGVba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cmFwcGVyLmF0dHJpYnV0ZXMuc3R5bGVba2V5XSA9IHN0eWxlW2tleV07XG4gICAgICBkZWxldGUgc3R5bGVba2V5XTtcbiAgICB9XG4gIH1cblxuICBpZiAoc3R5bGUucG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIikge1xuICAgIHdyYXBwZXIuYXR0cmlidXRlcy5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgfSBlbHNlIHtcbiAgICB3cmFwcGVyLmF0dHJpYnV0ZXMuc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG4gIH1cblxuICBkZWxldGUgc3R5bGUucG9zaXRpb247XG5cbiAgaWYgKHN0eWxlLmFsaWduU2VsZikge1xuICAgIHdyYXBwZXIuYXR0cmlidXRlcy5zdHlsZS5hbGlnblNlbGYgPSBzdHlsZS5hbGlnblNlbGY7XG4gICAgZGVsZXRlIHN0eWxlLmFsaWduU2VsZjtcbiAgfVxuXG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5mdW5jdGlvbiBmaXhUZXh0SW5kZW50KHN0eWxlcykge1xuICBjb25zdCBpbmRlbnQgPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShzdHlsZXMudGV4dEluZGVudCwgXCIwcHhcIik7XG5cbiAgaWYgKGluZGVudCA+PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYWxpZ24gPSBzdHlsZXMudGV4dEFsaWduID09PSBcInJpZ2h0XCIgPyBcInJpZ2h0XCIgOiBcImxlZnRcIjtcbiAgY29uc3QgbmFtZSA9IFwicGFkZGluZ1wiICsgKGFsaWduID09PSBcImxlZnRcIiA/IFwiTGVmdFwiIDogXCJSaWdodFwiKTtcbiAgY29uc3QgcGFkZGluZyA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKHN0eWxlc1tuYW1lXSwgXCIwcHhcIik7XG4gIHN0eWxlc1tuYW1lXSA9IGAke3BhZGRpbmcgLSBpbmRlbnR9cHhgO1xufVxuXG5mdW5jdGlvbiBzZXRBY2Nlc3Mobm9kZSwgY2xhc3NOYW1lcykge1xuICBzd2l0Y2ggKG5vZGUuYWNjZXNzKSB7XG4gICAgY2FzZSBcIm5vbkludGVyYWN0aXZlXCI6XG4gICAgICBjbGFzc05hbWVzLnB1c2goXCJ4ZmFOb25JbnRlcmFjdGl2ZVwiKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInJlYWRPbmx5XCI6XG4gICAgICBjbGFzc05hbWVzLnB1c2goXCJ4ZmFSZWFkT25seVwiKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInByb3RlY3RlZFwiOlxuICAgICAgY2xhc3NOYW1lcy5wdXNoKFwieGZhRGlzYWJsZWRcIik7XG4gICAgICBicmVhaztcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1ByaW50T25seShub2RlKSB7XG4gIHJldHVybiBub2RlLnJlbGV2YW50Lmxlbmd0aCA+IDAgJiYgIW5vZGUucmVsZXZhbnRbMF0uZXhjbHVkZWQgJiYgbm9kZS5yZWxldmFudFswXS52aWV3bmFtZSA9PT0gXCJwcmludFwiO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50UGFyYShub2RlKSB7XG4gIGNvbnN0IHN0YWNrID0gbm9kZVtfeGZhX29iamVjdC4kZ2V0VGVtcGxhdGVSb290XSgpW194ZmFfb2JqZWN0LiRleHRyYV0ucGFyYVN0YWNrO1xuXG4gIHJldHVybiBzdGFjay5sZW5ndGggPyBzdGFja1tzdGFjay5sZW5ndGggLSAxXSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHNldFBhcmEobm9kZSwgbm9kZVN0eWxlLCB2YWx1ZSkge1xuICBpZiAodmFsdWUuYXR0cmlidXRlcy5jbGFzcyAmJiB2YWx1ZS5hdHRyaWJ1dGVzLmNsYXNzLmluY2x1ZGVzKFwieGZhUmljaFwiKSkge1xuICAgIGlmIChub2RlU3R5bGUpIHtcbiAgICAgIGlmIChub2RlLmggPT09IFwiXCIpIHtcbiAgICAgICAgbm9kZVN0eWxlLmhlaWdodCA9IFwiYXV0b1wiO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS53ID09PSBcIlwiKSB7XG4gICAgICAgIG5vZGVTdHlsZS53aWR0aCA9IFwiYXV0b1wiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhcmEgPSBnZXRDdXJyZW50UGFyYShub2RlKTtcblxuICAgIGlmIChwYXJhKSB7XG4gICAgICBjb25zdCB2YWx1ZVN0eWxlID0gdmFsdWUuYXR0cmlidXRlcy5zdHlsZTtcbiAgICAgIHZhbHVlU3R5bGUuZGlzcGxheSA9IFwiZmxleFwiO1xuICAgICAgdmFsdWVTdHlsZS5mbGV4RGlyZWN0aW9uID0gXCJjb2x1bW5cIjtcblxuICAgICAgc3dpdGNoIChwYXJhLnZBbGlnbikge1xuICAgICAgICBjYXNlIFwidG9wXCI6XG4gICAgICAgICAgdmFsdWVTdHlsZS5qdXN0aWZ5Q29udGVudCA9IFwic3RhcnRcIjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiYm90dG9tXCI6XG4gICAgICAgICAgdmFsdWVTdHlsZS5qdXN0aWZ5Q29udGVudCA9IFwiZW5kXCI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxuICAgICAgICAgIHZhbHVlU3R5bGUuanVzdGlmeUNvbnRlbnQgPSBcImNlbnRlclwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXJhU3R5bGUgPSBwYXJhW194ZmFfb2JqZWN0LiR0b1N0eWxlXSgpO1xuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMocGFyYVN0eWxlKSkge1xuICAgICAgICBpZiAoIShrZXkgaW4gdmFsdWVTdHlsZSkpIHtcbiAgICAgICAgICB2YWx1ZVN0eWxlW2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0Rm9udEZhbWlseSh4ZmFGb250LCBub2RlLCBmb250RmluZGVyLCBzdHlsZSkge1xuICBpZiAoIWZvbnRGaW5kZXIpIHtcbiAgICBkZWxldGUgc3R5bGUuZm9udEZhbWlseTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBuYW1lID0gKDAsIF91dGlscy5zdHJpcFF1b3RlcykoeGZhRm9udC50eXBlZmFjZSk7XG4gIHN0eWxlLmZvbnRGYW1pbHkgPSBgXCIke25hbWV9XCJgO1xuICBjb25zdCB0eXBlZmFjZSA9IGZvbnRGaW5kZXIuZmluZChuYW1lKTtcblxuICBpZiAodHlwZWZhY2UpIHtcbiAgICBjb25zdCB7XG4gICAgICBmb250RmFtaWx5XG4gICAgfSA9IHR5cGVmYWNlLnJlZ3VsYXIuY3NzRm9udEluZm87XG5cbiAgICBpZiAoZm9udEZhbWlseSAhPT0gbmFtZSkge1xuICAgICAgc3R5bGUuZm9udEZhbWlseSA9IGBcIiR7Zm9udEZhbWlseX1cImA7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYSA9IGdldEN1cnJlbnRQYXJhKG5vZGUpO1xuXG4gICAgaWYgKHBhcmEgJiYgcGFyYS5saW5lSGVpZ2h0ICE9PSBcIlwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHN0eWxlLmxpbmVIZWlnaHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwZGZGb250ID0gKDAsIF9mb250cy5zZWxlY3RGb250KSh4ZmFGb250LCB0eXBlZmFjZSk7XG5cbiAgICBpZiAocGRmRm9udCkge1xuICAgICAgc3R5bGUubGluZUhlaWdodCA9IE1hdGgubWF4KDEuMiwgcGRmRm9udC5saW5lSGVpZ2h0KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZml4VVJMKHN0cikge1xuICBjb25zdCBhYnNvbHV0ZVVybCA9ICgwLCBfdXRpbC5jcmVhdGVWYWxpZEFic29sdXRlVXJsKShzdHIsIG51bGwsIHtcbiAgICBhZGREZWZhdWx0UHJvdG9jb2w6IHRydWUsXG4gICAgdHJ5Q29udmVydEVuY29kaW5nOiB0cnVlXG4gIH0pO1xuICByZXR1cm4gYWJzb2x1dGVVcmwgPyBhYnNvbHV0ZVVybC5ocmVmIDogbnVsbDtcbn1cblxuLyoqKi8gfSksXG4vKiA4MyAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5Gb250RmluZGVyID0gdm9pZCAwO1xuZXhwb3J0cy5nZXRNZXRyaWNzID0gZ2V0TWV0cmljcztcbmV4cG9ydHMuc2VsZWN0Rm9udCA9IHNlbGVjdEZvbnQ7XG5cbnZhciBfeGZhX29iamVjdCA9IF9fd19wZGZqc19yZXF1aXJlX18oNzUpO1xuXG52YXIgX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg3Nik7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbmNsYXNzIEZvbnRGaW5kZXIge1xuICBjb25zdHJ1Y3RvcihwZGZGb250cykge1xuICAgIHRoaXMuZm9udHMgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5jYWNoZSA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLndhcm5lZCA9IG5ldyBTZXQoKTtcbiAgICB0aGlzLmRlZmF1bHRGb250ID0gbnVsbDtcbiAgICB0aGlzLmFkZChwZGZGb250cyk7XG4gIH1cblxuICBhZGQocGRmRm9udHMsIHJlYWxseU1pc3NpbmdGb250cyA9IG51bGwpIHtcbiAgICBmb3IgKGNvbnN0IHBkZkZvbnQgb2YgcGRmRm9udHMpIHtcbiAgICAgIHRoaXMuYWRkUGRmRm9udChwZGZGb250KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHBkZkZvbnQgb2YgdGhpcy5mb250cy52YWx1ZXMoKSkge1xuICAgICAgaWYgKCFwZGZGb250LnJlZ3VsYXIpIHtcbiAgICAgICAgcGRmRm9udC5yZWd1bGFyID0gcGRmRm9udC5pdGFsaWMgfHwgcGRmRm9udC5ib2xkIHx8IHBkZkZvbnQuYm9sZGl0YWxpYztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXJlYWxseU1pc3NpbmdGb250cyB8fCByZWFsbHlNaXNzaW5nRm9udHMuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG15cmlhZCA9IHRoaXMuZm9udHMuZ2V0KFwiUGRmSlMtRmFsbGJhY2stUGRmSlMtWEZBXCIpO1xuXG4gICAgZm9yIChjb25zdCBtaXNzaW5nIG9mIHJlYWxseU1pc3NpbmdGb250cykge1xuICAgICAgdGhpcy5mb250cy5zZXQobWlzc2luZywgbXlyaWFkKTtcbiAgICB9XG4gIH1cblxuICBhZGRQZGZGb250KHBkZkZvbnQpIHtcbiAgICBjb25zdCBjc3NGb250SW5mbyA9IHBkZkZvbnQuY3NzRm9udEluZm87XG4gICAgY29uc3QgbmFtZSA9IGNzc0ZvbnRJbmZvLmZvbnRGYW1pbHk7XG4gICAgbGV0IGZvbnQgPSB0aGlzLmZvbnRzLmdldChuYW1lKTtcblxuICAgIGlmICghZm9udCkge1xuICAgICAgZm9udCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICB0aGlzLmZvbnRzLnNldChuYW1lLCBmb250KTtcblxuICAgICAgaWYgKCF0aGlzLmRlZmF1bHRGb250KSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdEZvbnQgPSBmb250O1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBwcm9wZXJ0eSA9IFwiXCI7XG4gICAgY29uc3QgZm9udFdlaWdodCA9IHBhcnNlRmxvYXQoY3NzRm9udEluZm8uZm9udFdlaWdodCk7XG5cbiAgICBpZiAocGFyc2VGbG9hdChjc3NGb250SW5mby5pdGFsaWNBbmdsZSkgIT09IDApIHtcbiAgICAgIHByb3BlcnR5ID0gZm9udFdlaWdodCA+PSA3MDAgPyBcImJvbGRpdGFsaWNcIiA6IFwiaXRhbGljXCI7XG4gICAgfSBlbHNlIGlmIChmb250V2VpZ2h0ID49IDcwMCkge1xuICAgICAgcHJvcGVydHkgPSBcImJvbGRcIjtcbiAgICB9XG5cbiAgICBpZiAoIXByb3BlcnR5KSB7XG4gICAgICBpZiAocGRmRm9udC5uYW1lLmluY2x1ZGVzKFwiQm9sZFwiKSB8fCBwZGZGb250LnBzTmFtZSAmJiBwZGZGb250LnBzTmFtZS5pbmNsdWRlcyhcIkJvbGRcIikpIHtcbiAgICAgICAgcHJvcGVydHkgPSBcImJvbGRcIjtcbiAgICAgIH1cblxuICAgICAgaWYgKHBkZkZvbnQubmFtZS5pbmNsdWRlcyhcIkl0YWxpY1wiKSB8fCBwZGZGb250Lm5hbWUuZW5kc1dpdGgoXCJJdFwiKSB8fCBwZGZGb250LnBzTmFtZSAmJiAocGRmRm9udC5wc05hbWUuaW5jbHVkZXMoXCJJdGFsaWNcIikgfHwgcGRmRm9udC5wc05hbWUuZW5kc1dpdGgoXCJJdFwiKSkpIHtcbiAgICAgICAgcHJvcGVydHkgKz0gXCJpdGFsaWNcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXByb3BlcnR5KSB7XG4gICAgICBwcm9wZXJ0eSA9IFwicmVndWxhclwiO1xuICAgIH1cblxuICAgIGZvbnRbcHJvcGVydHldID0gcGRmRm9udDtcbiAgfVxuXG4gIGdldERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdEZvbnQ7XG4gIH1cblxuICBmaW5kKGZvbnROYW1lLCBtdXN0V2FybiA9IHRydWUpIHtcbiAgICBsZXQgZm9udCA9IHRoaXMuZm9udHMuZ2V0KGZvbnROYW1lKSB8fCB0aGlzLmNhY2hlLmdldChmb250TmFtZSk7XG5cbiAgICBpZiAoZm9udCkge1xuICAgICAgcmV0dXJuIGZvbnQ7XG4gICAgfVxuXG4gICAgY29uc3QgcGF0dGVybiA9IC8sfC18X3wgfGJvbGRpdGFsaWN8Ym9sZHxpdGFsaWN8cmVndWxhcnxpdC9naTtcbiAgICBsZXQgbmFtZSA9IGZvbnROYW1lLnJlcGxhY2UocGF0dGVybiwgXCJcIik7XG4gICAgZm9udCA9IHRoaXMuZm9udHMuZ2V0KG5hbWUpO1xuXG4gICAgaWYgKGZvbnQpIHtcbiAgICAgIHRoaXMuY2FjaGUuc2V0KGZvbnROYW1lLCBmb250KTtcbiAgICAgIHJldHVybiBmb250O1xuICAgIH1cblxuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbWF5YmUgPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2ZhbWlseSwgcGRmRm9udF0gb2YgdGhpcy5mb250cy5lbnRyaWVzKCkpIHtcbiAgICAgIGlmIChmYW1pbHkucmVwbGFjZShwYXR0ZXJuLCBcIlwiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobmFtZSkpIHtcbiAgICAgICAgbWF5YmUucHVzaChwZGZGb250KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF5YmUubGVuZ3RoID09PSAwKSB7XG4gICAgICBmb3IgKGNvbnN0IFssIHBkZkZvbnRdIG9mIHRoaXMuZm9udHMuZW50cmllcygpKSB7XG4gICAgICAgIGlmIChwZGZGb250LnJlZ3VsYXIubmFtZSAmJiBwZGZGb250LnJlZ3VsYXIubmFtZS5yZXBsYWNlKHBhdHRlcm4sIFwiXCIpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChuYW1lKSkge1xuICAgICAgICAgIG1heWJlLnB1c2gocGRmRm9udCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF5YmUubGVuZ3RoID09PSAwKSB7XG4gICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKC9wc210fG10L2dpLCBcIlwiKTtcblxuICAgICAgZm9yIChjb25zdCBbZmFtaWx5LCBwZGZGb250XSBvZiB0aGlzLmZvbnRzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoZmFtaWx5LnJlcGxhY2UocGF0dGVybiwgXCJcIikudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG5hbWUpKSB7XG4gICAgICAgICAgbWF5YmUucHVzaChwZGZGb250KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtYXliZS5sZW5ndGggPT09IDApIHtcbiAgICAgIGZvciAoY29uc3QgcGRmRm9udCBvZiB0aGlzLmZvbnRzLnZhbHVlcygpKSB7XG4gICAgICAgIGlmIChwZGZGb250LnJlZ3VsYXIubmFtZSAmJiBwZGZGb250LnJlZ3VsYXIubmFtZS5yZXBsYWNlKHBhdHRlcm4sIFwiXCIpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChuYW1lKSkge1xuICAgICAgICAgIG1heWJlLnB1c2gocGRmRm9udCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF5YmUubGVuZ3RoID49IDEpIHtcbiAgICAgIGlmIChtYXliZS5sZW5ndGggIT09IDEgJiYgbXVzdFdhcm4pIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBUb28gbWFueSBjaG9pY2VzIHRvIGd1ZXNzIHRoZSBjb3JyZWN0IGZvbnQ6ICR7Zm9udE5hbWV9YCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2FjaGUuc2V0KGZvbnROYW1lLCBtYXliZVswXSk7XG4gICAgICByZXR1cm4gbWF5YmVbMF07XG4gICAgfVxuXG4gICAgaWYgKG11c3RXYXJuICYmICF0aGlzLndhcm5lZC5oYXMoZm9udE5hbWUpKSB7XG4gICAgICB0aGlzLndhcm5lZC5hZGQoZm9udE5hbWUpO1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBDYW5ub3QgZmluZCB0aGUgZm9udDogJHtmb250TmFtZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuRm9udEZpbmRlciA9IEZvbnRGaW5kZXI7XG5cbmZ1bmN0aW9uIHNlbGVjdEZvbnQoeGZhRm9udCwgdHlwZWZhY2UpIHtcbiAgaWYgKHhmYUZvbnQucG9zdHVyZSA9PT0gXCJpdGFsaWNcIikge1xuICAgIGlmICh4ZmFGb250LndlaWdodCA9PT0gXCJib2xkXCIpIHtcbiAgICAgIHJldHVybiB0eXBlZmFjZS5ib2xkaXRhbGljO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlZmFjZS5pdGFsaWM7XG4gIH0gZWxzZSBpZiAoeGZhRm9udC53ZWlnaHQgPT09IFwiYm9sZFwiKSB7XG4gICAgcmV0dXJuIHR5cGVmYWNlLmJvbGQ7XG4gIH1cblxuICByZXR1cm4gdHlwZWZhY2UucmVndWxhcjtcbn1cblxuZnVuY3Rpb24gZ2V0TWV0cmljcyh4ZmFGb250LCByZWFsID0gZmFsc2UpIHtcbiAgbGV0IHBkZkZvbnQgPSBudWxsO1xuXG4gIGlmICh4ZmFGb250KSB7XG4gICAgY29uc3QgbmFtZSA9ICgwLCBfdXRpbHMuc3RyaXBRdW90ZXMpKHhmYUZvbnQudHlwZWZhY2UpO1xuXG4gICAgY29uc3QgdHlwZWZhY2UgPSB4ZmFGb250W194ZmFfb2JqZWN0LiRnbG9iYWxEYXRhXS5mb250RmluZGVyLmZpbmQobmFtZSk7XG5cbiAgICBwZGZGb250ID0gc2VsZWN0Rm9udCh4ZmFGb250LCB0eXBlZmFjZSk7XG4gIH1cblxuICBpZiAoIXBkZkZvbnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGluZUhlaWdodDogMTIsXG4gICAgICBsaW5lR2FwOiAyLFxuICAgICAgbGluZU5vR2FwOiAxMFxuICAgIH07XG4gIH1cblxuICBjb25zdCBzaXplID0geGZhRm9udC5zaXplIHx8IDEwO1xuICBjb25zdCBsaW5lSGVpZ2h0ID0gcGRmRm9udC5saW5lSGVpZ2h0ID8gTWF0aC5tYXgocmVhbCA/IDAgOiAxLjIsIHBkZkZvbnQubGluZUhlaWdodCkgOiAxLjI7XG4gIGNvbnN0IGxpbmVHYXAgPSBwZGZGb250LmxpbmVHYXAgPT09IHVuZGVmaW5lZCA/IDAuMiA6IHBkZkZvbnQubGluZUdhcDtcbiAgcmV0dXJuIHtcbiAgICBsaW5lSGVpZ2h0OiBsaW5lSGVpZ2h0ICogc2l6ZSxcbiAgICBsaW5lR2FwOiBsaW5lR2FwICogc2l6ZSxcbiAgICBsaW5lTm9HYXA6IE1hdGgubWF4KDEsIGxpbmVIZWlnaHQgLSBsaW5lR2FwKSAqIHNpemVcbiAgfTtcbn1cblxuLyoqKi8gfSksXG4vKiA4NCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5UZXh0TWVhc3VyZSA9IHZvaWQgMDtcblxudmFyIF9mb250cyA9IF9fd19wZGZqc19yZXF1aXJlX18oODMpO1xuXG5jb25zdCBXSURUSF9GQUNUT1IgPSAxLjAyO1xuXG5jbGFzcyBGb250SW5mbyB7XG4gIGNvbnN0cnVjdG9yKHhmYUZvbnQsIG1hcmdpbiwgbGluZUhlaWdodCwgZm9udEZpbmRlcikge1xuICAgIHRoaXMubGluZUhlaWdodCA9IGxpbmVIZWlnaHQ7XG4gICAgdGhpcy5wYXJhTWFyZ2luID0gbWFyZ2luIHx8IHtcbiAgICAgIHRvcDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICByaWdodDogMFxuICAgIH07XG5cbiAgICBpZiAoIXhmYUZvbnQpIHtcbiAgICAgIFt0aGlzLnBkZkZvbnQsIHRoaXMueGZhRm9udF0gPSB0aGlzLmRlZmF1bHRGb250KGZvbnRGaW5kZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMueGZhRm9udCA9IHtcbiAgICAgIHR5cGVmYWNlOiB4ZmFGb250LnR5cGVmYWNlLFxuICAgICAgcG9zdHVyZTogeGZhRm9udC5wb3N0dXJlLFxuICAgICAgd2VpZ2h0OiB4ZmFGb250LndlaWdodCxcbiAgICAgIHNpemU6IHhmYUZvbnQuc2l6ZSxcbiAgICAgIGxldHRlclNwYWNpbmc6IHhmYUZvbnQubGV0dGVyU3BhY2luZ1xuICAgIH07XG4gICAgY29uc3QgdHlwZWZhY2UgPSBmb250RmluZGVyLmZpbmQoeGZhRm9udC50eXBlZmFjZSk7XG5cbiAgICBpZiAoIXR5cGVmYWNlKSB7XG4gICAgICBbdGhpcy5wZGZGb250LCB0aGlzLnhmYUZvbnRdID0gdGhpcy5kZWZhdWx0Rm9udChmb250RmluZGVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBkZkZvbnQgPSAoMCwgX2ZvbnRzLnNlbGVjdEZvbnQpKHhmYUZvbnQsIHR5cGVmYWNlKTtcblxuICAgIGlmICghdGhpcy5wZGZGb250KSB7XG4gICAgICBbdGhpcy5wZGZGb250LCB0aGlzLnhmYUZvbnRdID0gdGhpcy5kZWZhdWx0Rm9udChmb250RmluZGVyKTtcbiAgICB9XG4gIH1cblxuICBkZWZhdWx0Rm9udChmb250RmluZGVyKSB7XG4gICAgY29uc3QgZm9udCA9IGZvbnRGaW5kZXIuZmluZChcIkhlbHZldGljYVwiLCBmYWxzZSkgfHwgZm9udEZpbmRlci5maW5kKFwiTXlyaWFkIFByb1wiLCBmYWxzZSkgfHwgZm9udEZpbmRlci5maW5kKFwiQXJpYWxcIiwgZmFsc2UpIHx8IGZvbnRGaW5kZXIuZ2V0RGVmYXVsdCgpO1xuXG4gICAgaWYgKGZvbnQgJiYgZm9udC5yZWd1bGFyKSB7XG4gICAgICBjb25zdCBwZGZGb250ID0gZm9udC5yZWd1bGFyO1xuICAgICAgY29uc3QgaW5mbyA9IHBkZkZvbnQuY3NzRm9udEluZm87XG4gICAgICBjb25zdCB4ZmFGb250ID0ge1xuICAgICAgICB0eXBlZmFjZTogaW5mby5mb250RmFtaWx5LFxuICAgICAgICBwb3N0dXJlOiBcIm5vcm1hbFwiLFxuICAgICAgICB3ZWlnaHQ6IFwibm9ybWFsXCIsXG4gICAgICAgIHNpemU6IDEwLFxuICAgICAgICBsZXR0ZXJTcGFjaW5nOiAwXG4gICAgICB9O1xuICAgICAgcmV0dXJuIFtwZGZGb250LCB4ZmFGb250XTtcbiAgICB9XG5cbiAgICBjb25zdCB4ZmFGb250ID0ge1xuICAgICAgdHlwZWZhY2U6IFwiQ291cmllclwiLFxuICAgICAgcG9zdHVyZTogXCJub3JtYWxcIixcbiAgICAgIHdlaWdodDogXCJub3JtYWxcIixcbiAgICAgIHNpemU6IDEwLFxuICAgICAgbGV0dGVyU3BhY2luZzogMFxuICAgIH07XG4gICAgcmV0dXJuIFtudWxsLCB4ZmFGb250XTtcbiAgfVxuXG59XG5cbmNsYXNzIEZvbnRTZWxlY3RvciB7XG4gIGNvbnN0cnVjdG9yKGRlZmF1bHRYZmFGb250LCBkZWZhdWx0UGFyYU1hcmdpbiwgZGVmYXVsdExpbmVIZWlnaHQsIGZvbnRGaW5kZXIpIHtcbiAgICB0aGlzLmZvbnRGaW5kZXIgPSBmb250RmluZGVyO1xuICAgIHRoaXMuc3RhY2sgPSBbbmV3IEZvbnRJbmZvKGRlZmF1bHRYZmFGb250LCBkZWZhdWx0UGFyYU1hcmdpbiwgZGVmYXVsdExpbmVIZWlnaHQsIGZvbnRGaW5kZXIpXTtcbiAgfVxuXG4gIHB1c2hEYXRhKHhmYUZvbnQsIG1hcmdpbiwgbGluZUhlaWdodCkge1xuICAgIGNvbnN0IGxhc3RGb250ID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIFtcInR5cGVmYWNlXCIsIFwicG9zdHVyZVwiLCBcIndlaWdodFwiLCBcInNpemVcIiwgXCJsZXR0ZXJTcGFjaW5nXCJdKSB7XG4gICAgICBpZiAoIXhmYUZvbnRbbmFtZV0pIHtcbiAgICAgICAgeGZhRm9udFtuYW1lXSA9IGxhc3RGb250LnhmYUZvbnRbbmFtZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIFtcInRvcFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIiwgXCJyaWdodFwiXSkge1xuICAgICAgaWYgKGlzTmFOKG1hcmdpbltuYW1lXSkpIHtcbiAgICAgICAgbWFyZ2luW25hbWVdID0gbGFzdEZvbnQucGFyYU1hcmdpbltuYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmb250SW5mbyA9IG5ldyBGb250SW5mbyh4ZmFGb250LCBtYXJnaW4sIGxpbmVIZWlnaHQgfHwgbGFzdEZvbnQubGluZUhlaWdodCwgdGhpcy5mb250RmluZGVyKTtcblxuICAgIGlmICghZm9udEluZm8ucGRmRm9udCkge1xuICAgICAgZm9udEluZm8ucGRmRm9udCA9IGxhc3RGb250LnBkZkZvbnQ7XG4gICAgfVxuXG4gICAgdGhpcy5zdGFjay5wdXNoKGZvbnRJbmZvKTtcbiAgfVxuXG4gIHBvcEZvbnQoKSB7XG4gICAgdGhpcy5zdGFjay5wb3AoKTtcbiAgfVxuXG4gIHRvcEZvbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTtcbiAgfVxuXG59XG5cbmNsYXNzIFRleHRNZWFzdXJlIHtcbiAgY29uc3RydWN0b3IoZGVmYXVsdFhmYUZvbnQsIGRlZmF1bHRQYXJhTWFyZ2luLCBkZWZhdWx0TGluZUhlaWdodCwgZm9udHMpIHtcbiAgICB0aGlzLmdseXBocyA9IFtdO1xuICAgIHRoaXMuZm9udFNlbGVjdG9yID0gbmV3IEZvbnRTZWxlY3RvcihkZWZhdWx0WGZhRm9udCwgZGVmYXVsdFBhcmFNYXJnaW4sIGRlZmF1bHRMaW5lSGVpZ2h0LCBmb250cyk7XG4gICAgdGhpcy5leHRyYUhlaWdodCA9IDA7XG4gIH1cblxuICBwdXNoRGF0YSh4ZmFGb250LCBtYXJnaW4sIGxpbmVIZWlnaHQpIHtcbiAgICB0aGlzLmZvbnRTZWxlY3Rvci5wdXNoRGF0YSh4ZmFGb250LCBtYXJnaW4sIGxpbmVIZWlnaHQpO1xuICB9XG5cbiAgcG9wRm9udCh4ZmFGb250KSB7XG4gICAgcmV0dXJuIHRoaXMuZm9udFNlbGVjdG9yLnBvcEZvbnQoKTtcbiAgfVxuXG4gIGFkZFBhcmEoKSB7XG4gICAgY29uc3QgbGFzdEZvbnQgPSB0aGlzLmZvbnRTZWxlY3Rvci50b3BGb250KCk7XG4gICAgdGhpcy5leHRyYUhlaWdodCArPSBsYXN0Rm9udC5wYXJhTWFyZ2luLnRvcCArIGxhc3RGb250LnBhcmFNYXJnaW4uYm90dG9tO1xuICB9XG5cbiAgYWRkU3RyaW5nKHN0cikge1xuICAgIGlmICghc3RyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGFzdEZvbnQgPSB0aGlzLmZvbnRTZWxlY3Rvci50b3BGb250KCk7XG4gICAgY29uc3QgZm9udFNpemUgPSBsYXN0Rm9udC54ZmFGb250LnNpemU7XG5cbiAgICBpZiAobGFzdEZvbnQucGRmRm9udCkge1xuICAgICAgY29uc3QgbGV0dGVyU3BhY2luZyA9IGxhc3RGb250LnhmYUZvbnQubGV0dGVyU3BhY2luZztcbiAgICAgIGNvbnN0IHBkZkZvbnQgPSBsYXN0Rm9udC5wZGZGb250O1xuICAgICAgY29uc3QgZm9udExpbmVIZWlnaHQgPSBwZGZGb250LmxpbmVIZWlnaHQgfHwgMS4yO1xuICAgICAgY29uc3QgbGluZUhlaWdodCA9IGxhc3RGb250LmxpbmVIZWlnaHQgfHwgTWF0aC5tYXgoMS4yLCBmb250TGluZUhlaWdodCkgKiBmb250U2l6ZTtcbiAgICAgIGNvbnN0IGxpbmVHYXAgPSBwZGZGb250LmxpbmVHYXAgPT09IHVuZGVmaW5lZCA/IDAuMiA6IHBkZkZvbnQubGluZUdhcDtcbiAgICAgIGNvbnN0IG5vR2FwID0gZm9udExpbmVIZWlnaHQgLSBsaW5lR2FwO1xuICAgICAgY29uc3QgZmlyc3RMaW5lSGVpZ2h0ID0gTWF0aC5tYXgoMSwgbm9HYXApICogZm9udFNpemU7XG4gICAgICBjb25zdCBzY2FsZSA9IGZvbnRTaXplIC8gMTAwMDtcbiAgICAgIGNvbnN0IGZhbGxiYWNrV2lkdGggPSBwZGZGb250LmRlZmF1bHRXaWR0aCB8fCBwZGZGb250LmNoYXJzVG9HbHlwaHMoXCIgXCIpWzBdLndpZHRoO1xuXG4gICAgICBmb3IgKGNvbnN0IGxpbmUgb2Ygc3RyLnNwbGl0KC9bXFx1MjAyOVxcbl0vKSkge1xuICAgICAgICBjb25zdCBlbmNvZGVkTGluZSA9IHBkZkZvbnQuZW5jb2RlU3RyaW5nKGxpbmUpLmpvaW4oXCJcIik7XG4gICAgICAgIGNvbnN0IGdseXBocyA9IHBkZkZvbnQuY2hhcnNUb0dseXBocyhlbmNvZGVkTGluZSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBnbHlwaCBvZiBnbHlwaHMpIHtcbiAgICAgICAgICBjb25zdCB3aWR0aCA9IGdseXBoLndpZHRoIHx8IGZhbGxiYWNrV2lkdGg7XG4gICAgICAgICAgdGhpcy5nbHlwaHMucHVzaChbd2lkdGggKiBzY2FsZSArIGxldHRlclNwYWNpbmcsIGxpbmVIZWlnaHQsIGZpcnN0TGluZUhlaWdodCwgZ2x5cGgudW5pY29kZSwgZmFsc2VdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ2x5cGhzLnB1c2goWzAsIDAsIDAsIFwiXFxuXCIsIHRydWVdKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5nbHlwaHMucG9wKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBsaW5lIG9mIHN0ci5zcGxpdCgvW1xcdTIwMjlcXG5dLykpIHtcbiAgICAgIGZvciAoY29uc3QgY2hhciBvZiBsaW5lLnNwbGl0KFwiXCIpKSB7XG4gICAgICAgIHRoaXMuZ2x5cGhzLnB1c2goW2ZvbnRTaXplLCAxLjIgKiBmb250U2l6ZSwgZm9udFNpemUsIGNoYXIsIGZhbHNlXSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZ2x5cGhzLnB1c2goWzAsIDAsIDAsIFwiXFxuXCIsIHRydWVdKTtcbiAgICB9XG5cbiAgICB0aGlzLmdseXBocy5wb3AoKTtcbiAgfVxuXG4gIGNvbXB1dGUobWF4V2lkdGgpIHtcbiAgICBsZXQgbGFzdFNwYWNlUG9zID0gLTEsXG4gICAgICAgIGxhc3RTcGFjZVdpZHRoID0gMCxcbiAgICAgICAgd2lkdGggPSAwLFxuICAgICAgICBoZWlnaHQgPSAwLFxuICAgICAgICBjdXJyZW50TGluZVdpZHRoID0gMCxcbiAgICAgICAgY3VycmVudExpbmVIZWlnaHQgPSAwO1xuICAgIGxldCBpc0Jyb2tlbiA9IGZhbHNlO1xuICAgIGxldCBpc0ZpcnN0TGluZSA9IHRydWU7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSB0aGlzLmdseXBocy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBjb25zdCBbZ2x5cGhXaWR0aCwgbGluZUhlaWdodCwgZmlyc3RMaW5lSGVpZ2h0LCBjaGFyLCBpc0VPTF0gPSB0aGlzLmdseXBoc1tpXTtcbiAgICAgIGNvbnN0IGlzU3BhY2UgPSBjaGFyID09PSBcIiBcIjtcbiAgICAgIGNvbnN0IGdseXBoSGVpZ2h0ID0gaXNGaXJzdExpbmUgPyBmaXJzdExpbmVIZWlnaHQgOiBsaW5lSGVpZ2h0O1xuXG4gICAgICBpZiAoaXNFT0wpIHtcbiAgICAgICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgY3VycmVudExpbmVXaWR0aCk7XG4gICAgICAgIGN1cnJlbnRMaW5lV2lkdGggPSAwO1xuICAgICAgICBoZWlnaHQgKz0gY3VycmVudExpbmVIZWlnaHQ7XG4gICAgICAgIGN1cnJlbnRMaW5lSGVpZ2h0ID0gZ2x5cGhIZWlnaHQ7XG4gICAgICAgIGxhc3RTcGFjZVBvcyA9IC0xO1xuICAgICAgICBsYXN0U3BhY2VXaWR0aCA9IDA7XG4gICAgICAgIGlzRmlyc3RMaW5lID0gZmFsc2U7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNTcGFjZSkge1xuICAgICAgICBpZiAoY3VycmVudExpbmVXaWR0aCArIGdseXBoV2lkdGggPiBtYXhXaWR0aCkge1xuICAgICAgICAgIHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIGN1cnJlbnRMaW5lV2lkdGgpO1xuICAgICAgICAgIGN1cnJlbnRMaW5lV2lkdGggPSAwO1xuICAgICAgICAgIGhlaWdodCArPSBjdXJyZW50TGluZUhlaWdodDtcbiAgICAgICAgICBjdXJyZW50TGluZUhlaWdodCA9IGdseXBoSGVpZ2h0O1xuICAgICAgICAgIGxhc3RTcGFjZVBvcyA9IC0xO1xuICAgICAgICAgIGxhc3RTcGFjZVdpZHRoID0gMDtcbiAgICAgICAgICBpc0Jyb2tlbiA9IHRydWU7XG4gICAgICAgICAgaXNGaXJzdExpbmUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50TGluZUhlaWdodCA9IE1hdGgubWF4KGdseXBoSGVpZ2h0LCBjdXJyZW50TGluZUhlaWdodCk7XG4gICAgICAgICAgbGFzdFNwYWNlV2lkdGggPSBjdXJyZW50TGluZVdpZHRoO1xuICAgICAgICAgIGN1cnJlbnRMaW5lV2lkdGggKz0gZ2x5cGhXaWR0aDtcbiAgICAgICAgICBsYXN0U3BhY2VQb3MgPSBpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50TGluZVdpZHRoICsgZ2x5cGhXaWR0aCA+IG1heFdpZHRoKSB7XG4gICAgICAgIGhlaWdodCArPSBjdXJyZW50TGluZUhlaWdodDtcbiAgICAgICAgY3VycmVudExpbmVIZWlnaHQgPSBnbHlwaEhlaWdodDtcblxuICAgICAgICBpZiAobGFzdFNwYWNlUG9zICE9PSAtMSkge1xuICAgICAgICAgIGkgPSBsYXN0U3BhY2VQb3M7XG4gICAgICAgICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgbGFzdFNwYWNlV2lkdGgpO1xuICAgICAgICAgIGN1cnJlbnRMaW5lV2lkdGggPSAwO1xuICAgICAgICAgIGxhc3RTcGFjZVBvcyA9IC0xO1xuICAgICAgICAgIGxhc3RTcGFjZVdpZHRoID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBjdXJyZW50TGluZVdpZHRoKTtcbiAgICAgICAgICBjdXJyZW50TGluZVdpZHRoID0gZ2x5cGhXaWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlzQnJva2VuID0gdHJ1ZTtcbiAgICAgICAgaXNGaXJzdExpbmUgPSBmYWxzZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRMaW5lV2lkdGggKz0gZ2x5cGhXaWR0aDtcbiAgICAgIGN1cnJlbnRMaW5lSGVpZ2h0ID0gTWF0aC5tYXgoZ2x5cGhIZWlnaHQsIGN1cnJlbnRMaW5lSGVpZ2h0KTtcbiAgICB9XG5cbiAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBjdXJyZW50TGluZVdpZHRoKTtcbiAgICBoZWlnaHQgKz0gY3VycmVudExpbmVIZWlnaHQgKyB0aGlzLmV4dHJhSGVpZ2h0O1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogV0lEVEhfRkFDVE9SICogd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBpc0Jyb2tlblxuICAgIH07XG4gIH1cblxufVxuXG5leHBvcnRzLlRleHRNZWFzdXJlID0gVGV4dE1lYXN1cmU7XG5cbi8qKiovIH0pLFxuLyogODUgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuRGF0YUhhbmRsZXIgPSB2b2lkIDA7XG5cbnZhciBfeGZhX29iamVjdCA9IF9fd19wZGZqc19yZXF1aXJlX18oNzUpO1xuXG5jbGFzcyBEYXRhSGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yKHJvb3QsIGRhdGEpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMuZGF0YXNldCA9IHJvb3QuZGF0YXNldHMgfHwgbnVsbDtcbiAgfVxuXG4gIHNlcmlhbGl6ZShzdG9yYWdlKSB7XG4gICAgY29uc3Qgc3RhY2sgPSBbWy0xLCB0aGlzLmRhdGFbX3hmYV9vYmplY3QuJGdldENoaWxkcmVuXSgpXV07XG5cbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbGFzdCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgY29uc3QgW2ksIGNoaWxkcmVuXSA9IGxhc3Q7XG5cbiAgICAgIGlmIChpICsgMSA9PT0gY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlblsrK2xhc3RbMF1dO1xuICAgICAgY29uc3Qgc3RvcmFnZUVudHJ5ID0gc3RvcmFnZS5nZXQoY2hpbGRbX3hmYV9vYmplY3QuJHVpZF0pO1xuXG4gICAgICBpZiAoc3RvcmFnZUVudHJ5KSB7XG4gICAgICAgIGNoaWxkW194ZmFfb2JqZWN0LiRzZXRWYWx1ZV0oc3RvcmFnZUVudHJ5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBjaGlsZFtfeGZhX29iamVjdC4kZ2V0QXR0cmlidXRlc10oKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGF0dHJpYnV0ZXMudmFsdWVzKCkpIHtcbiAgICAgICAgICBjb25zdCBlbnRyeSA9IHN0b3JhZ2UuZ2V0KHZhbHVlW194ZmFfb2JqZWN0LiR1aWRdKTtcblxuICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgdmFsdWVbX3hmYV9vYmplY3QuJHNldFZhbHVlXShlbnRyeSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBub2RlcyA9IGNoaWxkW194ZmFfb2JqZWN0LiRnZXRDaGlsZHJlbl0oKTtcblxuICAgICAgaWYgKG5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3RhY2sucHVzaChbLTEsIG5vZGVzXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYnVmID0gW2A8eGZhOmRhdGFzZXRzIHhtbG5zOnhmYT1cImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWRhdGEvMS4wL1wiPmBdO1xuXG4gICAgaWYgKHRoaXMuZGF0YXNldCkge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmRhdGFzZXRbX3hmYV9vYmplY3QuJGdldENoaWxkcmVuXSgpKSB7XG4gICAgICAgIGlmIChjaGlsZFtfeGZhX29iamVjdC4kbm9kZU5hbWVdICE9PSBcImRhdGFcIikge1xuICAgICAgICAgIGNoaWxkW194ZmFfb2JqZWN0LiR0b1N0cmluZ10oYnVmKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZGF0YVtfeGZhX29iamVjdC4kdG9TdHJpbmddKGJ1Zik7XG5cbiAgICBidWYucHVzaChcIjwveGZhOmRhdGFzZXRzPlwiKTtcbiAgICByZXR1cm4gYnVmLmpvaW4oXCJcIik7XG4gIH1cblxufVxuXG5leHBvcnRzLkRhdGFIYW5kbGVyID0gRGF0YUhhbmRsZXI7XG5cbi8qKiovIH0pLFxuLyogODYgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuWEZBUGFyc2VyID0gdm9pZCAwO1xuXG52YXIgX3hmYV9vYmplY3QgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc1KTtcblxudmFyIF94bWxfcGFyc2VyID0gX193X3BkZmpzX3JlcXVpcmVfXyg2OCk7XG5cbnZhciBfYnVpbGRlciA9IF9fd19wZGZqc19yZXF1aXJlX18oODcpO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jbGFzcyBYRkFQYXJzZXIgZXh0ZW5kcyBfeG1sX3BhcnNlci5YTUxQYXJzZXJCYXNlIHtcbiAgY29uc3RydWN0b3Iocm9vdE5hbWVTcGFjZSA9IG51bGwsIHJpY2hUZXh0ID0gZmFsc2UpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2J1aWxkZXIgPSBuZXcgX2J1aWxkZXIuQnVpbGRlcihyb290TmFtZVNwYWNlKTtcbiAgICB0aGlzLl9zdGFjayA9IFtdO1xuICAgIHRoaXMuX2dsb2JhbERhdGEgPSB7XG4gICAgICB1c2VkVHlwZWZhY2VzOiBuZXcgU2V0KClcbiAgICB9O1xuICAgIHRoaXMuX2lkcyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLl9jdXJyZW50ID0gdGhpcy5fYnVpbGRlci5idWlsZFJvb3QodGhpcy5faWRzKTtcbiAgICB0aGlzLl9lcnJvckNvZGUgPSBfeG1sX3BhcnNlci5YTUxQYXJzZXJFcnJvckNvZGUuTm9FcnJvcjtcbiAgICB0aGlzLl93aGl0ZVJlZ2V4ID0gL15cXHMrJC87XG4gICAgdGhpcy5fbmJzcHMgPSAvXFx4YTArL2c7XG4gICAgdGhpcy5fcmljaFRleHQgPSByaWNoVGV4dDtcbiAgfVxuXG4gIHBhcnNlKGRhdGEpIHtcbiAgICB0aGlzLnBhcnNlWG1sKGRhdGEpO1xuXG4gICAgaWYgKHRoaXMuX2Vycm9yQ29kZSAhPT0gX3htbF9wYXJzZXIuWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3IpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5fY3VycmVudFtfeGZhX29iamVjdC4kZmluYWxpemVdKCk7XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudC5lbGVtZW50O1xuICB9XG5cbiAgb25UZXh0KHRleHQpIHtcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHRoaXMuX25ic3BzLCBtYXRjaCA9PiBtYXRjaC5zbGljZSgxKSArIFwiIFwiKTtcblxuICAgIGlmICh0aGlzLl9yaWNoVGV4dCB8fCB0aGlzLl9jdXJyZW50W194ZmFfb2JqZWN0LiRhY2NlcHRXaGl0ZXNwYWNlXSgpKSB7XG4gICAgICB0aGlzLl9jdXJyZW50W194ZmFfb2JqZWN0LiRvblRleHRdKHRleHQsIHRoaXMuX3JpY2hUZXh0KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl93aGl0ZVJlZ2V4LnRlc3QodGV4dCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50W194ZmFfb2JqZWN0LiRvblRleHRdKHRleHQudHJpbSgpKTtcbiAgfVxuXG4gIG9uQ2RhdGEodGV4dCkge1xuICAgIHRoaXMuX2N1cnJlbnRbX3hmYV9vYmplY3QuJG9uVGV4dF0odGV4dCk7XG4gIH1cblxuICBfbWtBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMsIHRhZ05hbWUpIHtcbiAgICBsZXQgbmFtZXNwYWNlID0gbnVsbDtcbiAgICBsZXQgcHJlZml4ZXMgPSBudWxsO1xuICAgIGNvbnN0IGF0dHJpYnV0ZU9iaiA9IE9iamVjdC5jcmVhdGUoe30pO1xuXG4gICAgZm9yIChjb25zdCB7XG4gICAgICBuYW1lLFxuICAgICAgdmFsdWVcbiAgICB9IG9mIGF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChuYW1lID09PSBcInhtbG5zXCIpIHtcbiAgICAgICAgaWYgKCFuYW1lc3BhY2UpIHtcbiAgICAgICAgICBuYW1lc3BhY2UgPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoYFhGQSAtIG11bHRpcGxlIG5hbWVzcGFjZSBkZWZpbml0aW9uIGluIDwke3RhZ05hbWV9PmApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5hbWUuc3RhcnRzV2l0aChcInhtbG5zOlwiKSkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBuYW1lLnN1YnN0cmluZyhcInhtbG5zOlwiLmxlbmd0aCk7XG5cbiAgICAgICAgaWYgKCFwcmVmaXhlcykge1xuICAgICAgICAgIHByZWZpeGVzID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBwcmVmaXhlcy5wdXNoKHtcbiAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpID0gbmFtZS5pbmRleE9mKFwiOlwiKTtcblxuICAgICAgICBpZiAoaSA9PT0gLTEpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVPYmpbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgbnNBdHRycyA9IGF0dHJpYnV0ZU9ialtfeGZhX29iamVjdC4kbnNBdHRyaWJ1dGVzXTtcblxuICAgICAgICAgIGlmICghbnNBdHRycykge1xuICAgICAgICAgICAgbnNBdHRycyA9IGF0dHJpYnV0ZU9ialtfeGZhX29iamVjdC4kbnNBdHRyaWJ1dGVzXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgW25zLCBhdHRyTmFtZV0gPSBbbmFtZS5zbGljZSgwLCBpKSwgbmFtZS5zbGljZShpICsgMSldO1xuICAgICAgICAgIGxldCBhdHRycyA9IG5zQXR0cnNbbnNdO1xuXG4gICAgICAgICAgaWYgKCFhdHRycykge1xuICAgICAgICAgICAgYXR0cnMgPSBuc0F0dHJzW25zXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXR0cnNbYXR0ck5hbWVdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW25hbWVzcGFjZSwgcHJlZml4ZXMsIGF0dHJpYnV0ZU9ial07XG4gIH1cblxuICBfZ2V0TmFtZUFuZFByZWZpeChuYW1lLCBuc0Fnbm9zdGljKSB7XG4gICAgY29uc3QgaSA9IG5hbWUuaW5kZXhPZihcIjpcIik7XG5cbiAgICBpZiAoaSA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBbbmFtZSwgbnVsbF07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtuYW1lLnN1YnN0cmluZyhpICsgMSksIG5zQWdub3N0aWMgPyBcIlwiIDogbmFtZS5zdWJzdHJpbmcoMCwgaSldO1xuICB9XG5cbiAgb25CZWdpbkVsZW1lbnQodGFnTmFtZSwgYXR0cmlidXRlcywgaXNFbXB0eSkge1xuICAgIGNvbnN0IFtuYW1lc3BhY2UsIHByZWZpeGVzLCBhdHRyaWJ1dGVzT2JqXSA9IHRoaXMuX21rQXR0cmlidXRlcyhhdHRyaWJ1dGVzLCB0YWdOYW1lKTtcblxuICAgIGNvbnN0IFtuYW1lLCBuc1ByZWZpeF0gPSB0aGlzLl9nZXROYW1lQW5kUHJlZml4KHRhZ05hbWUsIHRoaXMuX2J1aWxkZXIuaXNOc0Fnbm9zdGljKCkpO1xuXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuX2J1aWxkZXIuYnVpbGQoe1xuICAgICAgbnNQcmVmaXgsXG4gICAgICBuYW1lLFxuICAgICAgYXR0cmlidXRlczogYXR0cmlidXRlc09iaixcbiAgICAgIG5hbWVzcGFjZSxcbiAgICAgIHByZWZpeGVzXG4gICAgfSk7XG5cbiAgICBub2RlW194ZmFfb2JqZWN0LiRnbG9iYWxEYXRhXSA9IHRoaXMuX2dsb2JhbERhdGE7XG5cbiAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgbm9kZVtfeGZhX29iamVjdC4kZmluYWxpemVdKCk7XG5cbiAgICAgIGlmICh0aGlzLl9jdXJyZW50W194ZmFfb2JqZWN0LiRvbkNoaWxkXShub2RlKSkge1xuICAgICAgICBub2RlW194ZmFfb2JqZWN0LiRzZXRJZF0odGhpcy5faWRzKTtcbiAgICAgIH1cblxuICAgICAgbm9kZVtfeGZhX29iamVjdC4kY2xlYW5dKHRoaXMuX2J1aWxkZXIpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhY2sucHVzaCh0aGlzLl9jdXJyZW50KTtcblxuICAgIHRoaXMuX2N1cnJlbnQgPSBub2RlO1xuICB9XG5cbiAgb25FbmRFbGVtZW50KG5hbWUpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5fY3VycmVudDtcblxuICAgIGlmIChub2RlW194ZmFfb2JqZWN0LiRpc0NEQVRBWG1sXSgpICYmIHR5cGVvZiBub2RlW194ZmFfb2JqZWN0LiRjb250ZW50XSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgcGFyc2VyID0gbmV3IFhGQVBhcnNlcigpO1xuICAgICAgcGFyc2VyLl9nbG9iYWxEYXRhID0gdGhpcy5fZ2xvYmFsRGF0YTtcbiAgICAgIGNvbnN0IHJvb3QgPSBwYXJzZXIucGFyc2Uobm9kZVtfeGZhX29iamVjdC4kY29udGVudF0pO1xuICAgICAgbm9kZVtfeGZhX29iamVjdC4kY29udGVudF0gPSBudWxsO1xuXG4gICAgICBub2RlW194ZmFfb2JqZWN0LiRvbkNoaWxkXShyb290KTtcbiAgICB9XG5cbiAgICBub2RlW194ZmFfb2JqZWN0LiRmaW5hbGl6ZV0oKTtcblxuICAgIHRoaXMuX2N1cnJlbnQgPSB0aGlzLl9zdGFjay5wb3AoKTtcblxuICAgIGlmICh0aGlzLl9jdXJyZW50W194ZmFfb2JqZWN0LiRvbkNoaWxkXShub2RlKSkge1xuICAgICAgbm9kZVtfeGZhX29iamVjdC4kc2V0SWRdKHRoaXMuX2lkcyk7XG4gICAgfVxuXG4gICAgbm9kZVtfeGZhX29iamVjdC4kY2xlYW5dKHRoaXMuX2J1aWxkZXIpO1xuICB9XG5cbiAgb25FcnJvcihjb2RlKSB7XG4gICAgdGhpcy5fZXJyb3JDb2RlID0gY29kZTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuWEZBUGFyc2VyID0gWEZBUGFyc2VyO1xuXG4vKioqLyB9KSxcbi8qIDg3ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLkJ1aWxkZXIgPSB2b2lkIDA7XG5cbnZhciBfbmFtZXNwYWNlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNzcpO1xuXG52YXIgX3hmYV9vYmplY3QgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc1KTtcblxudmFyIF9zZXR1cCA9IF9fd19wZGZqc19yZXF1aXJlX18oODgpO1xuXG52YXIgX3RlbXBsYXRlID0gX193X3BkZmpzX3JlcXVpcmVfXyg4MCk7XG5cbnZhciBfdW5rbm93biA9IF9fd19wZGZqc19yZXF1aXJlX18oOTcpO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jbGFzcyBSb290IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoaWRzKSB7XG4gICAgc3VwZXIoLTEsIFwicm9vdFwiLCBPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAgICB0aGlzLmVsZW1lbnQgPSBudWxsO1xuICAgIHRoaXNbX3hmYV9vYmplY3QuJGlkc10gPSBpZHM7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJG9uQ2hpbGRdKGNoaWxkKSB7XG4gICAgdGhpcy5lbGVtZW50ID0gY2hpbGQ7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGZpbmFsaXplXSgpIHtcbiAgICBzdXBlcltfeGZhX29iamVjdC4kZmluYWxpemVdKCk7XG5cbiAgICBpZiAodGhpcy5lbGVtZW50LnRlbXBsYXRlIGluc3RhbmNlb2YgX3RlbXBsYXRlLlRlbXBsYXRlKSB7XG4gICAgICB0aGlzW194ZmFfb2JqZWN0LiRpZHNdLnNldChfeGZhX29iamVjdC4kcm9vdCwgdGhpcy5lbGVtZW50KTtcblxuICAgICAgdGhpcy5lbGVtZW50LnRlbXBsYXRlW194ZmFfb2JqZWN0LiRyZXNvbHZlUHJvdG90eXBlc10odGhpc1tfeGZhX29iamVjdC4kaWRzXSk7XG5cbiAgICAgIHRoaXMuZWxlbWVudC50ZW1wbGF0ZVtfeGZhX29iamVjdC4kaWRzXSA9IHRoaXNbX3hmYV9vYmplY3QuJGlkc107XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgRW1wdHkgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigtMSwgXCJcIiwgT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJG9uQ2hpbGRdKF8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxufVxuXG5jbGFzcyBCdWlsZGVyIHtcbiAgY29uc3RydWN0b3Iocm9vdE5hbWVTcGFjZSA9IG51bGwpIHtcbiAgICB0aGlzLl9uYW1lc3BhY2VTdGFjayA9IFtdO1xuICAgIHRoaXMuX25zQWdub3N0aWNMZXZlbCA9IDA7XG4gICAgdGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5fbmFtZXNwYWNlcyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLl9uZXh0TnNJZCA9IE1hdGgubWF4KC4uLk9iamVjdC52YWx1ZXMoX25hbWVzcGFjZXMuTmFtZXNwYWNlSWRzKS5tYXAoKHtcbiAgICAgIGlkXG4gICAgfSkgPT4gaWQpKTtcbiAgICB0aGlzLl9jdXJyZW50TmFtZXNwYWNlID0gcm9vdE5hbWVTcGFjZSB8fCBuZXcgX3Vua25vd24uVW5rbm93bk5hbWVzcGFjZSgrK3RoaXMuX25leHROc0lkKTtcbiAgfVxuXG4gIGJ1aWxkUm9vdChpZHMpIHtcbiAgICByZXR1cm4gbmV3IFJvb3QoaWRzKTtcbiAgfVxuXG4gIGJ1aWxkKHtcbiAgICBuc1ByZWZpeCxcbiAgICBuYW1lLFxuICAgIGF0dHJpYnV0ZXMsXG4gICAgbmFtZXNwYWNlLFxuICAgIHByZWZpeGVzXG4gIH0pIHtcbiAgICBjb25zdCBoYXNOYW1lc3BhY2VEZWYgPSBuYW1lc3BhY2UgIT09IG51bGw7XG5cbiAgICBpZiAoaGFzTmFtZXNwYWNlRGVmKSB7XG4gICAgICB0aGlzLl9uYW1lc3BhY2VTdGFjay5wdXNoKHRoaXMuX2N1cnJlbnROYW1lc3BhY2UpO1xuXG4gICAgICB0aGlzLl9jdXJyZW50TmFtZXNwYWNlID0gdGhpcy5fc2VhcmNoTmFtZXNwYWNlKG5hbWVzcGFjZSk7XG4gICAgfVxuXG4gICAgaWYgKHByZWZpeGVzKSB7XG4gICAgICB0aGlzLl9hZGROYW1lc3BhY2VQcmVmaXgocHJlZml4ZXMpO1xuICAgIH1cblxuICAgIGlmIChhdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KF94ZmFfb2JqZWN0LiRuc0F0dHJpYnV0ZXMpKSB7XG4gICAgICBjb25zdCBkYXRhVGVtcGxhdGUgPSBfc2V0dXAuTmFtZXNwYWNlU2V0VXAuZGF0YXNldHM7XG4gICAgICBjb25zdCBuc0F0dHJzID0gYXR0cmlidXRlc1tfeGZhX29iamVjdC4kbnNBdHRyaWJ1dGVzXTtcbiAgICAgIGxldCB4ZmFBdHRycyA9IG51bGw7XG5cbiAgICAgIGZvciAoY29uc3QgW25zLCBhdHRyc10gb2YgT2JqZWN0LmVudHJpZXMobnNBdHRycykpIHtcbiAgICAgICAgY29uc3QgbnNUb1VzZSA9IHRoaXMuX2dldE5hbWVzcGFjZVRvVXNlKG5zKTtcblxuICAgICAgICBpZiAobnNUb1VzZSA9PT0gZGF0YVRlbXBsYXRlKSB7XG4gICAgICAgICAgeGZhQXR0cnMgPSB7XG4gICAgICAgICAgICB4ZmE6IGF0dHJzXG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoeGZhQXR0cnMpIHtcbiAgICAgICAgYXR0cmlidXRlc1tfeGZhX29iamVjdC4kbnNBdHRyaWJ1dGVzXSA9IHhmYUF0dHJzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXNbX3hmYV9vYmplY3QuJG5zQXR0cmlidXRlc107XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZXNwYWNlVG9Vc2UgPSB0aGlzLl9nZXROYW1lc3BhY2VUb1VzZShuc1ByZWZpeCk7XG5cbiAgICBjb25zdCBub2RlID0gbmFtZXNwYWNlVG9Vc2UgJiYgbmFtZXNwYWNlVG9Vc2VbX25hbWVzcGFjZXMuJGJ1aWxkWEZBT2JqZWN0XShuYW1lLCBhdHRyaWJ1dGVzKSB8fCBuZXcgRW1wdHkoKTtcblxuICAgIGlmIChub2RlW194ZmFfb2JqZWN0LiRpc05zQWdub3N0aWNdKCkpIHtcbiAgICAgIHRoaXMuX25zQWdub3N0aWNMZXZlbCsrO1xuICAgIH1cblxuICAgIGlmIChoYXNOYW1lc3BhY2VEZWYgfHwgcHJlZml4ZXMgfHwgbm9kZVtfeGZhX29iamVjdC4kaXNOc0Fnbm9zdGljXSgpKSB7XG4gICAgICBub2RlW194ZmFfb2JqZWN0LiRjbGVhbnVwXSA9IHtcbiAgICAgICAgaGFzTmFtZXNwYWNlOiBoYXNOYW1lc3BhY2VEZWYsXG4gICAgICAgIHByZWZpeGVzLFxuICAgICAgICBuc0Fnbm9zdGljOiBub2RlW194ZmFfb2JqZWN0LiRpc05zQWdub3N0aWNdKClcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBpc05zQWdub3N0aWMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25zQWdub3N0aWNMZXZlbCA+IDA7XG4gIH1cblxuICBfc2VhcmNoTmFtZXNwYWNlKG5zTmFtZSkge1xuICAgIGxldCBucyA9IHRoaXMuX25hbWVzcGFjZXMuZ2V0KG5zTmFtZSk7XG5cbiAgICBpZiAobnMpIHtcbiAgICAgIHJldHVybiBucztcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB7XG4gICAgICBjaGVja1xuICAgIH1dIG9mIE9iamVjdC5lbnRyaWVzKF9uYW1lc3BhY2VzLk5hbWVzcGFjZUlkcykpIHtcbiAgICAgIGlmIChjaGVjayhuc05hbWUpKSB7XG4gICAgICAgIG5zID0gX3NldHVwLk5hbWVzcGFjZVNldFVwW25hbWVdO1xuXG4gICAgICAgIGlmIChucykge1xuICAgICAgICAgIHRoaXMuX25hbWVzcGFjZXMuc2V0KG5zTmFtZSwgbnMpO1xuXG4gICAgICAgICAgcmV0dXJuIG5zO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbnMgPSBuZXcgX3Vua25vd24uVW5rbm93bk5hbWVzcGFjZSgrK3RoaXMuX25leHROc0lkKTtcblxuICAgIHRoaXMuX25hbWVzcGFjZXMuc2V0KG5zTmFtZSwgbnMpO1xuXG4gICAgcmV0dXJuIG5zO1xuICB9XG5cbiAgX2FkZE5hbWVzcGFjZVByZWZpeChwcmVmaXhlcykge1xuICAgIGZvciAoY29uc3Qge1xuICAgICAgcHJlZml4LFxuICAgICAgdmFsdWVcbiAgICB9IG9mIHByZWZpeGVzKSB7XG4gICAgICBjb25zdCBuYW1lc3BhY2UgPSB0aGlzLl9zZWFyY2hOYW1lc3BhY2UodmFsdWUpO1xuXG4gICAgICBsZXQgcHJlZml4U3RhY2sgPSB0aGlzLl9uYW1lc3BhY2VQcmVmaXhlcy5nZXQocHJlZml4KTtcblxuICAgICAgaWYgKCFwcmVmaXhTdGFjaykge1xuICAgICAgICBwcmVmaXhTdGFjayA9IFtdO1xuXG4gICAgICAgIHRoaXMuX25hbWVzcGFjZVByZWZpeGVzLnNldChwcmVmaXgsIHByZWZpeFN0YWNrKTtcbiAgICAgIH1cblxuICAgICAgcHJlZml4U3RhY2sucHVzaChuYW1lc3BhY2UpO1xuICAgIH1cbiAgfVxuXG4gIF9nZXROYW1lc3BhY2VUb1VzZShwcmVmaXgpIHtcbiAgICBpZiAoIXByZWZpeCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnROYW1lc3BhY2U7XG4gICAgfVxuXG4gICAgY29uc3QgcHJlZml4U3RhY2sgPSB0aGlzLl9uYW1lc3BhY2VQcmVmaXhlcy5nZXQocHJlZml4KTtcblxuICAgIGlmIChwcmVmaXhTdGFjayAmJiBwcmVmaXhTdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gcHJlZml4U3RhY2tbcHJlZml4U3RhY2subGVuZ3RoIC0gMV07XG4gICAgfVxuXG4gICAgKDAsIF91dGlsLndhcm4pKGBVbmtub3duIG5hbWVzcGFjZSBwcmVmaXg6ICR7cHJlZml4fS5gKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNsZWFuKGRhdGEpIHtcbiAgICBjb25zdCB7XG4gICAgICBoYXNOYW1lc3BhY2UsXG4gICAgICBwcmVmaXhlcyxcbiAgICAgIG5zQWdub3N0aWNcbiAgICB9ID0gZGF0YTtcblxuICAgIGlmIChoYXNOYW1lc3BhY2UpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnROYW1lc3BhY2UgPSB0aGlzLl9uYW1lc3BhY2VTdGFjay5wb3AoKTtcbiAgICB9XG5cbiAgICBpZiAocHJlZml4ZXMpIHtcbiAgICAgIHByZWZpeGVzLmZvckVhY2goKHtcbiAgICAgICAgcHJlZml4XG4gICAgICB9KSA9PiB7XG4gICAgICAgIHRoaXMuX25hbWVzcGFjZVByZWZpeGVzLmdldChwcmVmaXgpLnBvcCgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG5zQWdub3N0aWMpIHtcbiAgICAgIHRoaXMuX25zQWdub3N0aWNMZXZlbC0tO1xuICAgIH1cbiAgfVxuXG59XG5cbmV4cG9ydHMuQnVpbGRlciA9IEJ1aWxkZXI7XG5cbi8qKiovIH0pLFxuLyogODggKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuTmFtZXNwYWNlU2V0VXAgPSB2b2lkIDA7XG5cbnZhciBfY29uZmlnID0gX193X3BkZmpzX3JlcXVpcmVfXyg4OSk7XG5cbnZhciBfY29ubmVjdGlvbl9zZXQgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkwKTtcblxudmFyIF9kYXRhc2V0cyA9IF9fd19wZGZqc19yZXF1aXJlX18oOTEpO1xuXG52YXIgX2xvY2FsZV9zZXQgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkyKTtcblxudmFyIF9zaWduYXR1cmUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkzKTtcblxudmFyIF9zdHlsZXNoZWV0ID0gX193X3BkZmpzX3JlcXVpcmVfXyg5NCk7XG5cbnZhciBfdGVtcGxhdGUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDgwKTtcblxudmFyIF94ZHAgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDk1KTtcblxudmFyIF94aHRtbCA9IF9fd19wZGZqc19yZXF1aXJlX18oOTYpO1xuXG5jb25zdCBOYW1lc3BhY2VTZXRVcCA9IHtcbiAgY29uZmlnOiBfY29uZmlnLkNvbmZpZ05hbWVzcGFjZSxcbiAgY29ubmVjdGlvbjogX2Nvbm5lY3Rpb25fc2V0LkNvbm5lY3Rpb25TZXROYW1lc3BhY2UsXG4gIGRhdGFzZXRzOiBfZGF0YXNldHMuRGF0YXNldHNOYW1lc3BhY2UsXG4gIGxvY2FsZVNldDogX2xvY2FsZV9zZXQuTG9jYWxlU2V0TmFtZXNwYWNlLFxuICBzaWduYXR1cmU6IF9zaWduYXR1cmUuU2lnbmF0dXJlTmFtZXNwYWNlLFxuICBzdHlsZXNoZWV0OiBfc3R5bGVzaGVldC5TdHlsZXNoZWV0TmFtZXNwYWNlLFxuICB0ZW1wbGF0ZTogX3RlbXBsYXRlLlRlbXBsYXRlTmFtZXNwYWNlLFxuICB4ZHA6IF94ZHAuWGRwTmFtZXNwYWNlLFxuICB4aHRtbDogX3hodG1sLlhodG1sTmFtZXNwYWNlXG59O1xuZXhwb3J0cy5OYW1lc3BhY2VTZXRVcCA9IE5hbWVzcGFjZVNldFVwO1xuXG4vKioqLyB9KSxcbi8qIDg5ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLkNvbmZpZ05hbWVzcGFjZSA9IHZvaWQgMDtcblxudmFyIF9uYW1lc3BhY2VzID0gX193X3BkZmpzX3JlcXVpcmVfXyg3Nyk7XG5cbnZhciBfeGZhX29iamVjdCA9IF9fd19wZGZqc19yZXF1aXJlX18oNzUpO1xuXG52YXIgX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg3Nik7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbmNvbnN0IENPTkZJR19OU19JRCA9IF9uYW1lc3BhY2VzLk5hbWVzcGFjZUlkcy5jb25maWcuaWQ7XG5cbmNsYXNzIEFjcm9iYXQgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImFjcm9iYXRcIiwgdHJ1ZSk7XG4gICAgdGhpcy5hY3JvYmF0NyA9IG51bGw7XG4gICAgdGhpcy5hdXRvU2F2ZSA9IG51bGw7XG4gICAgdGhpcy5jb21tb24gPSBudWxsO1xuICAgIHRoaXMudmFsaWRhdGUgPSBudWxsO1xuICAgIHRoaXMudmFsaWRhdGVBcHByb3ZhbFNpZ25hdHVyZXMgPSBudWxsO1xuICAgIHRoaXMuc3VibWl0VXJsID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gIH1cblxufVxuXG5jbGFzcyBBY3JvYmF0NyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiYWNyb2JhdDdcIiwgdHJ1ZSk7XG4gICAgdGhpcy5keW5hbWljUmVuZGVyID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIEFEQkVfSlNDb25zb2xlIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJBREJFX0pTQ29uc29sZVwiLCBbXCJkZWxlZ2F0ZVwiLCBcIkVuYWJsZVwiLCBcIkRpc2FibGVcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgQURCRV9KU0RlYnVnZ2VyIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJBREJFX0pTRGVidWdnZXJcIiwgW1wiZGVsZWdhdGVcIiwgXCJFbmFibGVcIiwgXCJEaXNhYmxlXCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIEFkZFNpbGVudFByaW50IGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uMDEge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImFkZFNpbGVudFByaW50XCIpO1xuICB9XG5cbn1cblxuY2xhc3MgQWRkVmlld2VyUHJlZmVyZW5jZXMgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb24wMSB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiYWRkVmlld2VyUHJlZmVyZW5jZXNcIik7XG4gIH1cblxufVxuXG5jbGFzcyBBZGp1c3REYXRhIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uMTAge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImFkanVzdERhdGFcIik7XG4gIH1cblxufVxuXG5jbGFzcyBBZG9iZUV4dGVuc2lvbkxldmVsIGV4dGVuZHMgX3hmYV9vYmplY3QuSW50ZWdlck9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiYWRvYmVFeHRlbnNpb25MZXZlbFwiLCAwLCBuID0+IG4gPj0gMSAmJiBuIDw9IDgpO1xuICB9XG5cbn1cblxuY2xhc3MgQWdlbnQgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImFnZW50XCIsIHRydWUpO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSA/IGF0dHJpYnV0ZXMubmFtZS50cmltKCkgOiBcIlwiO1xuICAgIHRoaXMuY29tbW9uID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gIH1cblxufVxuXG5jbGFzcyBBbHdheXNFbWJlZCBleHRlbmRzIF94ZmFfb2JqZWN0LkNvbnRlbnRPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImFsd2F5c0VtYmVkXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgQW1kIGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJhbWRcIik7XG4gIH1cblxufVxuXG5jbGFzcyBBcmVhIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJhcmVhXCIpO1xuICAgIHRoaXMubGV2ZWwgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMubGV2ZWwsXG4gICAgICBkZWZhdWx0VmFsdWU6IDAsXG4gICAgICB2YWxpZGF0ZTogbiA9PiBuID49IDEgJiYgbiA8PSAzXG4gICAgfSk7XG4gICAgdGhpcy5uYW1lID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMubmFtZSwgW1wiXCIsIFwiYmFyY29kZVwiLCBcImNvcmVpbml0XCIsIFwiZGV2aWNlRHJpdmVyXCIsIFwiZm9udFwiLCBcImdlbmVyYWxcIiwgXCJsYXlvdXRcIiwgXCJtZXJnZVwiLCBcInNjcmlwdFwiLCBcInNpZ25hdHVyZVwiLCBcInNvdXJjZVNldFwiLCBcInRlbXBsYXRlQ2FjaGVcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgQXR0cmlidXRlcyBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbk9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiYXR0cmlidXRlc1wiLCBbXCJwcmVzZXJ2ZVwiLCBcImRlbGVnYXRlXCIsIFwiaWdub3JlXCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIEF1dG9TYXZlIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJhdXRvU2F2ZVwiLCBbXCJkaXNhYmxlZFwiLCBcImVuYWJsZWRcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgQmFzZSBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiYmFzZVwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIEJhdGNoT3V0cHV0IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJiYXRjaE91dHB1dFwiKTtcbiAgICB0aGlzLmZvcm1hdCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmZvcm1hdCwgW1wibm9uZVwiLCBcImNvbmNhdFwiLCBcInppcFwiLCBcInppcENvbXByZXNzXCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIEJlaGF2aW9yT3ZlcnJpZGUgZXh0ZW5kcyBfeGZhX29iamVjdC5Db250ZW50T2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJiZWhhdmlvck92ZXJyaWRlXCIpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRmaW5hbGl6ZV0oKSB7XG4gICAgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gPSBuZXcgTWFwKHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXFxzKy8pLmZpbHRlcih4ID0+IHguaW5jbHVkZXMoXCI6XCIpKS5tYXAoeCA9PiB4LnNwbGl0KFwiOlwiLCAyKSkpO1xuICB9XG5cbn1cblxuY2xhc3MgQ2FjaGUgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImNhY2hlXCIsIHRydWUpO1xuICAgIHRoaXMudGVtcGxhdGVDYWNoZSA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBDaGFuZ2UgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb24wMSB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiY2hhbmdlXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgQ29tbW9uIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJjb21tb25cIiwgdHJ1ZSk7XG4gICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgICB0aGlzLmxvY2FsZSA9IG51bGw7XG4gICAgdGhpcy5sb2NhbGVTZXQgPSBudWxsO1xuICAgIHRoaXMubWVzc2FnaW5nID0gbnVsbDtcbiAgICB0aGlzLnN1cHByZXNzQmFubmVyID0gbnVsbDtcbiAgICB0aGlzLnRlbXBsYXRlID0gbnVsbDtcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdpbmcgPSBudWxsO1xuICAgIHRoaXMudmVyc2lvbkNvbnRyb2wgPSBudWxsO1xuICAgIHRoaXMubG9nID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gIH1cblxufVxuXG5jbGFzcyBDb21wcmVzcyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiY29tcHJlc3NcIik7XG4gICAgdGhpcy5zY29wZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnNjb3BlLCBbXCJpbWFnZU9ubHlcIiwgXCJkb2N1bWVudFwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBDb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmUgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb24wMSB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiY29tcHJlc3NMb2dpY2FsU3RydWN0dXJlXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgQ29tcHJlc3NPYmplY3RTdHJlYW0gZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb24xMCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiY29tcHJlc3NPYmplY3RTdHJlYW1cIik7XG4gIH1cblxufVxuXG5jbGFzcyBDb21wcmVzc2lvbiBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiY29tcHJlc3Npb25cIiwgdHJ1ZSk7XG4gICAgdGhpcy5jb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmUgPSBudWxsO1xuICAgIHRoaXMuY29tcHJlc3NPYmplY3RTdHJlYW0gPSBudWxsO1xuICAgIHRoaXMubGV2ZWwgPSBudWxsO1xuICAgIHRoaXMudHlwZSA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBDb25maWcgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImNvbmZpZ1wiLCB0cnVlKTtcbiAgICB0aGlzLmFjcm9iYXQgPSBudWxsO1xuICAgIHRoaXMucHJlc2VudCA9IG51bGw7XG4gICAgdGhpcy50cmFjZSA9IG51bGw7XG4gICAgdGhpcy5hZ2VudCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgQ29uZm9ybWFuY2UgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb25PYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImNvbmZvcm1hbmNlXCIsIFtcIkFcIiwgXCJCXCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIENvbnRlbnRDb3B5IGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uMDEge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImNvbnRlbnRDb3B5XCIpO1xuICB9XG5cbn1cblxuY2xhc3MgQ29waWVzIGV4dGVuZHMgX3hmYV9vYmplY3QuSW50ZWdlck9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiY29waWVzXCIsIDEsIG4gPT4gbiA+PSAxKTtcbiAgfVxuXG59XG5cbmNsYXNzIENyZWF0b3IgZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImNyZWF0b3JcIik7XG4gIH1cblxufVxuXG5jbGFzcyBDdXJyZW50UGFnZSBleHRlbmRzIF94ZmFfb2JqZWN0LkludGVnZXJPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImN1cnJlbnRQYWdlXCIsIDAsIG4gPT4gbiA+PSAwKTtcbiAgfVxuXG59XG5cbmNsYXNzIERhdGEgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImRhdGFcIiwgdHJ1ZSk7XG4gICAgdGhpcy5hZGp1c3REYXRhID0gbnVsbDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsO1xuICAgIHRoaXMuaW5jcmVtZW50YWxMb2FkID0gbnVsbDtcbiAgICB0aGlzLm91dHB1dFhTTCA9IG51bGw7XG4gICAgdGhpcy5yYW5nZSA9IG51bGw7XG4gICAgdGhpcy5yZWNvcmQgPSBudWxsO1xuICAgIHRoaXMuc3RhcnROb2RlID0gbnVsbDtcbiAgICB0aGlzLnVyaSA9IG51bGw7XG4gICAgdGhpcy53aW5kb3cgPSBudWxsO1xuICAgIHRoaXMueHNsID0gbnVsbDtcbiAgICB0aGlzLmV4Y2x1ZGVOUyA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMudHJhbnNmb3JtID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gIH1cblxufVxuXG5jbGFzcyBEZWJ1ZyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiZGVidWdcIiwgdHJ1ZSk7XG4gICAgdGhpcy51cmkgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgRGVmYXVsdFR5cGVmYWNlIGV4dGVuZHMgX3hmYV9vYmplY3QuQ29udGVudE9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiZGVmYXVsdFR5cGVmYWNlXCIpO1xuICAgIHRoaXMud3JpdGluZ1NjcmlwdCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLndyaXRpbmdTY3JpcHQsIFtcIipcIiwgXCJBcmFiaWNcIiwgXCJDeXJpbGxpY1wiLCBcIkVhc3RFdXJvcGVhblJvbWFuXCIsIFwiR3JlZWtcIiwgXCJIZWJyZXdcIiwgXCJKYXBhbmVzZVwiLCBcIktvcmVhblwiLCBcIlJvbWFuXCIsIFwiU2ltcGxpZmllZENoaW5lc2VcIiwgXCJUaGFpXCIsIFwiVHJhZGl0aW9uYWxDaGluZXNlXCIsIFwiVmlldG5hbWVzZVwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBEZXN0aW5hdGlvbiBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbk9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiZGVzdGluYXRpb25cIiwgW1wicGRmXCIsIFwicGNsXCIsIFwicHNcIiwgXCJ3ZWJDbGllbnRcIiwgXCJ6cGxcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgRG9jdW1lbnRBc3NlbWJseSBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbjAxIHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJkb2N1bWVudEFzc2VtYmx5XCIpO1xuICB9XG5cbn1cblxuY2xhc3MgRHJpdmVyIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJkcml2ZXJcIiwgdHJ1ZSk7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lID8gYXR0cmlidXRlcy5uYW1lLnRyaW0oKSA6IFwiXCI7XG4gICAgdGhpcy5mb250SW5mbyA9IG51bGw7XG4gICAgdGhpcy54ZGMgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgRHVwbGV4T3B0aW9uIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJkdXBsZXhPcHRpb25cIiwgW1wic2ltcGxleFwiLCBcImR1cGxleEZsaXBMb25nRWRnZVwiLCBcImR1cGxleEZsaXBTaG9ydEVkZ2VcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgRHluYW1pY1JlbmRlciBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbk9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiZHluYW1pY1JlbmRlclwiLCBbXCJmb3JiaWRkZW5cIiwgXCJyZXF1aXJlZFwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBFbWJlZCBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbjAxIHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJlbWJlZFwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIEVuY3J5cHQgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb24wMSB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiZW5jcnlwdFwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIEVuY3J5cHRpb24gZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImVuY3J5cHRpb25cIiwgdHJ1ZSk7XG4gICAgdGhpcy5lbmNyeXB0ID0gbnVsbDtcbiAgICB0aGlzLmVuY3J5cHRpb25MZXZlbCA9IG51bGw7XG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBFbmNyeXB0aW9uTGV2ZWwgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb25PYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImVuY3J5cHRpb25MZXZlbFwiLCBbXCI0MGJpdFwiLCBcIjEyOGJpdFwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBFbmZvcmNlIGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJlbmZvcmNlXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgRXF1YXRlIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJlcXVhdGVcIik7XG4gICAgdGhpcy5mb3JjZSA9ICgwLCBfdXRpbHMuZ2V0SW50ZWdlcikoe1xuICAgICAgZGF0YTogYXR0cmlidXRlcy5mb3JjZSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMSxcbiAgICAgIHZhbGlkYXRlOiBuID0+IG4gPT09IDBcbiAgICB9KTtcbiAgICB0aGlzLmZyb20gPSBhdHRyaWJ1dGVzLmZyb20gfHwgXCJcIjtcbiAgICB0aGlzLnRvID0gYXR0cmlidXRlcy50byB8fCBcIlwiO1xuICB9XG5cbn1cblxuY2xhc3MgRXF1YXRlUmFuZ2UgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImVxdWF0ZVJhbmdlXCIpO1xuICAgIHRoaXMuZnJvbSA9IGF0dHJpYnV0ZXMuZnJvbSB8fCBcIlwiO1xuICAgIHRoaXMudG8gPSBhdHRyaWJ1dGVzLnRvIHx8IFwiXCI7XG4gICAgdGhpcy5fdW5pY29kZVJhbmdlID0gYXR0cmlidXRlcy51bmljb2RlUmFuZ2UgfHwgXCJcIjtcbiAgfVxuXG4gIGdldCB1bmljb2RlUmFuZ2UoKSB7XG4gICAgY29uc3QgcmFuZ2VzID0gW107XG4gICAgY29uc3QgdW5pY29kZVJlZ2V4ID0gL1VcXCsoWzAtOWEtZkEtRl0rKS87XG4gICAgY29uc3QgdW5pY29kZVJhbmdlID0gdGhpcy5fdW5pY29kZVJhbmdlO1xuXG4gICAgZm9yIChsZXQgcmFuZ2Ugb2YgdW5pY29kZVJhbmdlLnNwbGl0KFwiLFwiKS5tYXAoeCA9PiB4LnRyaW0oKSkuZmlsdGVyKHggPT4gISF4KSkge1xuICAgICAgcmFuZ2UgPSByYW5nZS5zcGxpdChcIi1cIiwgMikubWFwKHggPT4ge1xuICAgICAgICBjb25zdCBmb3VuZCA9IHgubWF0Y2godW5pY29kZVJlZ2V4KTtcblxuICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoZm91bmRbMV0sIDE2KTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmFuZ2UubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJhbmdlLnB1c2gocmFuZ2VbMF0pO1xuICAgICAgfVxuXG4gICAgICByYW5nZXMucHVzaChyYW5nZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwidW5pY29kZVJhbmdlXCIsIHJhbmdlcyk7XG4gIH1cblxufVxuXG5jbGFzcyBFeGNsdWRlIGV4dGVuZHMgX3hmYV9vYmplY3QuQ29udGVudE9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiZXhjbHVkZVwiKTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kZmluYWxpemVdKCkge1xuICAgIHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID0gdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0udHJpbSgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKHggPT4geCAmJiBbXCJjYWxjdWxhdGVcIiwgXCJjbG9zZVwiLCBcImVudGVyXCIsIFwiZXhpdFwiLCBcImluaXRpYWxpemVcIiwgXCJyZWFkeVwiLCBcInZhbGlkYXRlXCJdLmluY2x1ZGVzKHgpKTtcbiAgfVxuXG59XG5cbmNsYXNzIEV4Y2x1ZGVOUyBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiZXhjbHVkZU5TXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgRmxpcExhYmVsIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJmbGlwTGFiZWxcIiwgW1widXNlUHJpbnRlclNldHRpbmdcIiwgXCJvblwiLCBcIm9mZlwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBGb250SW5mbyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiZm9udEluZm9cIiwgdHJ1ZSk7XG4gICAgdGhpcy5lbWJlZCA9IG51bGw7XG4gICAgdGhpcy5tYXAgPSBudWxsO1xuICAgIHRoaXMuc3Vic2V0QmVsb3cgPSBudWxsO1xuICAgIHRoaXMuYWx3YXlzRW1iZWQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmRlZmF1bHRUeXBlZmFjZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMubmV2ZXJFbWJlZCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgRm9ybUZpZWxkRmlsbGluZyBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbjAxIHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJmb3JtRmllbGRGaWxsaW5nXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgR3JvdXBQYXJlbnQgZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImdyb3VwUGFyZW50XCIpO1xuICB9XG5cbn1cblxuY2xhc3MgSWZFbXB0eSBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbk9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiaWZFbXB0eVwiLCBbXCJkYXRhVmFsdWVcIiwgXCJkYXRhR3JvdXBcIiwgXCJpZ25vcmVcIiwgXCJyZW1vdmVcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgSW5jbHVkZVhEUENvbnRlbnQgZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImluY2x1ZGVYRFBDb250ZW50XCIpO1xuICB9XG5cbn1cblxuY2xhc3MgSW5jcmVtZW50YWxMb2FkIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJpbmNyZW1lbnRhbExvYWRcIiwgW1wibm9uZVwiLCBcImZvcndhcmRPbmx5XCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIEluY3JlbWVudGFsTWVyZ2UgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb24wMSB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiaW5jcmVtZW50YWxNZXJnZVwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIEludGVyYWN0aXZlIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uMDEge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImludGVyYWN0aXZlXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgSm9nIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJqb2dcIiwgW1widXNlUHJpbnRlclNldHRpbmdcIiwgXCJub25lXCIsIFwicGFnZVNldFwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBMYWJlbFByaW50ZXIgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImxhYmVsUHJpbnRlclwiLCB0cnVlKTtcbiAgICB0aGlzLm5hbWUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5uYW1lLCBbXCJ6cGxcIiwgXCJkcGxcIiwgXCJpcGxcIiwgXCJ0Y3BsXCJdKTtcbiAgICB0aGlzLmJhdGNoT3V0cHV0ID0gbnVsbDtcbiAgICB0aGlzLmZsaXBMYWJlbCA9IG51bGw7XG4gICAgdGhpcy5mb250SW5mbyA9IG51bGw7XG4gICAgdGhpcy54ZGMgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgTGF5b3V0IGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJsYXlvdXRcIiwgW1wicGFnaW5hdGVcIiwgXCJwYW5lbFwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBMZXZlbCBleHRlbmRzIF94ZmFfb2JqZWN0LkludGVnZXJPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImxldmVsXCIsIDAsIG4gPT4gbiA+IDApO1xuICB9XG5cbn1cblxuY2xhc3MgTGluZWFyaXplZCBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbjAxIHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJsaW5lYXJpemVkXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgTG9jYWxlIGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJsb2NhbGVcIik7XG4gIH1cblxufVxuXG5jbGFzcyBMb2NhbGVTZXQgZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImxvY2FsZVNldFwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIExvZyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwibG9nXCIsIHRydWUpO1xuICAgIHRoaXMubW9kZSA9IG51bGw7XG4gICAgdGhpcy50aHJlc2hvbGQgPSBudWxsO1xuICAgIHRoaXMudG8gPSBudWxsO1xuICAgIHRoaXMudXJpID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIE1hcEVsZW1lbnQgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcIm1hcFwiLCB0cnVlKTtcbiAgICB0aGlzLmVxdWF0ZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZXF1YXRlUmFuZ2UgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG59XG5cbmNsYXNzIE1lZGl1bUluZm8gZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcIm1lZGl1bUluZm9cIiwgdHJ1ZSk7XG4gICAgdGhpcy5tYXAgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgTWVzc2FnZSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwibWVzc2FnZVwiLCB0cnVlKTtcbiAgICB0aGlzLm1zZ0lkID0gbnVsbDtcbiAgICB0aGlzLnNldmVyaXR5ID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIE1lc3NhZ2luZyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwibWVzc2FnaW5nXCIsIHRydWUpO1xuICAgIHRoaXMubWVzc2FnZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgTW9kZSBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbk9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwibW9kZVwiLCBbXCJhcHBlbmRcIiwgXCJvdmVyd3JpdGVcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgTW9kaWZ5QW5ub3RzIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uMDEge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcIm1vZGlmeUFubm90c1wiKTtcbiAgfVxuXG59XG5cbmNsYXNzIE1zZ0lkIGV4dGVuZHMgX3hmYV9vYmplY3QuSW50ZWdlck9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwibXNnSWRcIiwgMSwgbiA9PiBuID49IDEpO1xuICB9XG5cbn1cblxuY2xhc3MgTmFtZUF0dHIgZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcIm5hbWVBdHRyXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgTmV2ZXJFbWJlZCBleHRlbmRzIF94ZmFfb2JqZWN0LkNvbnRlbnRPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcIm5ldmVyRW1iZWRcIik7XG4gIH1cblxufVxuXG5jbGFzcyBOdW1iZXJPZkNvcGllcyBleHRlbmRzIF94ZmFfb2JqZWN0LkludGVnZXJPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcIm51bWJlck9mQ29waWVzXCIsIG51bGwsIG4gPT4gbiA+PSAyICYmIG4gPD0gNSk7XG4gIH1cblxufVxuXG5jbGFzcyBPcGVuQWN0aW9uIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJvcGVuQWN0aW9uXCIsIHRydWUpO1xuICAgIHRoaXMuZGVzdGluYXRpb24gPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgT3V0cHV0IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJvdXRwdXRcIiwgdHJ1ZSk7XG4gICAgdGhpcy50byA9IG51bGw7XG4gICAgdGhpcy50eXBlID0gbnVsbDtcbiAgICB0aGlzLnVyaSA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBPdXRwdXRCaW4gZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcIm91dHB1dEJpblwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIE91dHB1dFhTTCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwib3V0cHV0WFNMXCIsIHRydWUpO1xuICAgIHRoaXMudXJpID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIE92ZXJwcmludCBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbk9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwib3ZlcnByaW50XCIsIFtcIm5vbmVcIiwgXCJib3RoXCIsIFwiZHJhd1wiLCBcImZpZWxkXCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIFBhY2tldHMgZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInBhY2tldHNcIik7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGZpbmFsaXplXSgpIHtcbiAgICBpZiAodGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gPT09IFwiKlwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gPSB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xccysvKS5maWx0ZXIoeCA9PiBbXCJjb25maWdcIiwgXCJkYXRhc2V0c1wiLCBcInRlbXBsYXRlXCIsIFwieGZkZlwiLCBcInhzbHRcIl0uaW5jbHVkZXMoeCkpO1xuICB9XG5cbn1cblxuY2xhc3MgUGFnZU9mZnNldCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwicGFnZU9mZnNldFwiKTtcbiAgICB0aGlzLnggPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMueCxcbiAgICAgIGRlZmF1bHRWYWx1ZTogXCJ1c2VYRENTZXR0aW5nXCIsXG4gICAgICB2YWxpZGF0ZTogbiA9PiB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy55ID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLnksXG4gICAgICBkZWZhdWx0VmFsdWU6IFwidXNlWERDU2V0dGluZ1wiLFxuICAgICAgdmFsaWRhdGU6IG4gPT4gdHJ1ZVxuICAgIH0pO1xuICB9XG5cbn1cblxuY2xhc3MgUGFnZVJhbmdlIGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJwYWdlUmFuZ2VcIik7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGZpbmFsaXplXSgpIHtcbiAgICBjb25zdCBudW1iZXJzID0gdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0udHJpbSgpLnNwbGl0KC9cXHMrLykubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcblxuICAgIGNvbnN0IHJhbmdlcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gbnVtYmVycy5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7XG4gICAgICByYW5nZXMucHVzaChudW1iZXJzLnNsaWNlKGksIGkgKyAyKSk7XG4gICAgfVxuXG4gICAgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gPSByYW5nZXM7XG4gIH1cblxufVxuXG5jbGFzcyBQYWdpbmF0aW9uIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJwYWdpbmF0aW9uXCIsIFtcInNpbXBsZXhcIiwgXCJkdXBsZXhTaG9ydEVkZ2VcIiwgXCJkdXBsZXhMb25nRWRnZVwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBQYWdpbmF0aW9uT3ZlcnJpZGUgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb25PYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInBhZ2luYXRpb25PdmVycmlkZVwiLCBbXCJub25lXCIsIFwiZm9yY2VEdXBsZXhcIiwgXCJmb3JjZUR1cGxleExvbmdFZGdlXCIsIFwiZm9yY2VEdXBsZXhTaG9ydEVkZ2VcIiwgXCJmb3JjZVNpbXBsZXhcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgUGFydCBleHRlbmRzIF94ZmFfb2JqZWN0LkludGVnZXJPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInBhcnRcIiwgMSwgbiA9PiBmYWxzZSk7XG4gIH1cblxufVxuXG5jbGFzcyBQY2wgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInBjbFwiLCB0cnVlKTtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLmJhdGNoT3V0cHV0ID0gbnVsbDtcbiAgICB0aGlzLmZvbnRJbmZvID0gbnVsbDtcbiAgICB0aGlzLmpvZyA9IG51bGw7XG4gICAgdGhpcy5tZWRpdW1JbmZvID0gbnVsbDtcbiAgICB0aGlzLm91dHB1dEJpbiA9IG51bGw7XG4gICAgdGhpcy5wYWdlT2Zmc2V0ID0gbnVsbDtcbiAgICB0aGlzLnN0YXBsZSA9IG51bGw7XG4gICAgdGhpcy54ZGMgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgUGRmIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJwZGZcIiwgdHJ1ZSk7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy5hZG9iZUV4dGVuc2lvbkxldmVsID0gbnVsbDtcbiAgICB0aGlzLmJhdGNoT3V0cHV0ID0gbnVsbDtcbiAgICB0aGlzLmNvbXByZXNzaW9uID0gbnVsbDtcbiAgICB0aGlzLmNyZWF0b3IgPSBudWxsO1xuICAgIHRoaXMuZW5jcnlwdGlvbiA9IG51bGw7XG4gICAgdGhpcy5mb250SW5mbyA9IG51bGw7XG4gICAgdGhpcy5pbnRlcmFjdGl2ZSA9IG51bGw7XG4gICAgdGhpcy5saW5lYXJpemVkID0gbnVsbDtcbiAgICB0aGlzLm9wZW5BY3Rpb24gPSBudWxsO1xuICAgIHRoaXMucGRmYSA9IG51bGw7XG4gICAgdGhpcy5wcm9kdWNlciA9IG51bGw7XG4gICAgdGhpcy5yZW5kZXJQb2xpY3kgPSBudWxsO1xuICAgIHRoaXMuc2NyaXB0TW9kZWwgPSBudWxsO1xuICAgIHRoaXMuc2lsZW50UHJpbnQgPSBudWxsO1xuICAgIHRoaXMuc3VibWl0Rm9ybWF0ID0gbnVsbDtcbiAgICB0aGlzLnRhZ2dlZCA9IG51bGw7XG4gICAgdGhpcy52ZXJzaW9uID0gbnVsbDtcbiAgICB0aGlzLnZpZXdlclByZWZlcmVuY2VzID0gbnVsbDtcbiAgICB0aGlzLnhkYyA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBQZGZhIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJwZGZhXCIsIHRydWUpO1xuICAgIHRoaXMuYW1kID0gbnVsbDtcbiAgICB0aGlzLmNvbmZvcm1hbmNlID0gbnVsbDtcbiAgICB0aGlzLmluY2x1ZGVYRFBDb250ZW50ID0gbnVsbDtcbiAgICB0aGlzLnBhcnQgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgUGVybWlzc2lvbnMgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInBlcm1pc3Npb25zXCIsIHRydWUpO1xuICAgIHRoaXMuYWNjZXNzaWJsZUNvbnRlbnQgPSBudWxsO1xuICAgIHRoaXMuY2hhbmdlID0gbnVsbDtcbiAgICB0aGlzLmNvbnRlbnRDb3B5ID0gbnVsbDtcbiAgICB0aGlzLmRvY3VtZW50QXNzZW1ibHkgPSBudWxsO1xuICAgIHRoaXMuZm9ybUZpZWxkRmlsbGluZyA9IG51bGw7XG4gICAgdGhpcy5tb2RpZnlBbm5vdHMgPSBudWxsO1xuICAgIHRoaXMucGxhaW50ZXh0TWV0YWRhdGEgPSBudWxsO1xuICAgIHRoaXMucHJpbnQgPSBudWxsO1xuICAgIHRoaXMucHJpbnRIaWdoUXVhbGl0eSA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBQaWNrVHJheUJ5UERGU2l6ZSBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbjAxIHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJwaWNrVHJheUJ5UERGU2l6ZVwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIFBpY3R1cmUgZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInBpY3R1cmVcIik7XG4gIH1cblxufVxuXG5jbGFzcyBQbGFpbnRleHRNZXRhZGF0YSBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbjAxIHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJwbGFpbnRleHRNZXRhZGF0YVwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIFByZXNlbmNlIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJwcmVzZW5jZVwiLCBbXCJwcmVzZXJ2ZVwiLCBcImRpc3NvbHZlXCIsIFwiZGlzc29sdmVTdHJ1Y3R1cmVcIiwgXCJpZ25vcmVcIiwgXCJyZW1vdmVcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgUHJlc2VudCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwicHJlc2VudFwiLCB0cnVlKTtcbiAgICB0aGlzLmJlaGF2aW9yT3ZlcnJpZGUgPSBudWxsO1xuICAgIHRoaXMuY2FjaGUgPSBudWxsO1xuICAgIHRoaXMuY29tbW9uID0gbnVsbDtcbiAgICB0aGlzLmNvcGllcyA9IG51bGw7XG4gICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7XG4gICAgdGhpcy5pbmNyZW1lbnRhbE1lcmdlID0gbnVsbDtcbiAgICB0aGlzLmxheW91dCA9IG51bGw7XG4gICAgdGhpcy5vdXRwdXQgPSBudWxsO1xuICAgIHRoaXMub3ZlcnByaW50ID0gbnVsbDtcbiAgICB0aGlzLnBhZ2luYXRpb24gPSBudWxsO1xuICAgIHRoaXMucGFnaW5hdGlvbk92ZXJyaWRlID0gbnVsbDtcbiAgICB0aGlzLnNjcmlwdCA9IG51bGw7XG4gICAgdGhpcy52YWxpZGF0ZSA9IG51bGw7XG4gICAgdGhpcy54ZHAgPSBudWxsO1xuICAgIHRoaXMuZHJpdmVyID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5sYWJlbFByaW50ZXIgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnBjbCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMucGRmID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5wcyA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuc3VibWl0VXJsID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy53ZWJDbGllbnQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnpwbCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgUHJpbnQgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb24wMSB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwicHJpbnRcIik7XG4gIH1cblxufVxuXG5jbGFzcyBQcmludEhpZ2hRdWFsaXR5IGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uMDEge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInByaW50SGlnaFF1YWxpdHlcIik7XG4gIH1cblxufVxuXG5jbGFzcyBQcmludFNjYWxpbmcgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb25PYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInByaW50U2NhbGluZ1wiLCBbXCJhcHBkZWZhdWx0XCIsIFwibm9TY2FsaW5nXCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIFByaW50ZXJOYW1lIGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJwcmludGVyTmFtZVwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIFByb2R1Y2VyIGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJwcm9kdWNlclwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIFBzIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJwc1wiLCB0cnVlKTtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLmJhdGNoT3V0cHV0ID0gbnVsbDtcbiAgICB0aGlzLmZvbnRJbmZvID0gbnVsbDtcbiAgICB0aGlzLmpvZyA9IG51bGw7XG4gICAgdGhpcy5tZWRpdW1JbmZvID0gbnVsbDtcbiAgICB0aGlzLm91dHB1dEJpbiA9IG51bGw7XG4gICAgdGhpcy5zdGFwbGUgPSBudWxsO1xuICAgIHRoaXMueGRjID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFJhbmdlIGV4dGVuZHMgX3hmYV9vYmplY3QuQ29udGVudE9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwicmFuZ2VcIik7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGZpbmFsaXplXSgpIHtcbiAgICB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSA9IHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXFxzKixcXHMqLywgMikubWFwKHJhbmdlID0+IHJhbmdlLnNwbGl0KFwiLVwiKS5tYXAoeCA9PiBwYXJzZUludCh4LnRyaW0oKSwgMTApKSkuZmlsdGVyKHJhbmdlID0+IHJhbmdlLmV2ZXJ5KHggPT4gIWlzTmFOKHgpKSkubWFwKHJhbmdlID0+IHtcbiAgICAgIGlmIChyYW5nZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmFuZ2UucHVzaChyYW5nZVswXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByYW5nZTtcbiAgICB9KTtcbiAgfVxuXG59XG5cbmNsYXNzIFJlY29yZCBleHRlbmRzIF94ZmFfb2JqZWN0LkNvbnRlbnRPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInJlY29yZFwiKTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kZmluYWxpemVdKCkge1xuICAgIHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID0gdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0udHJpbSgpO1xuICAgIGNvbnN0IG4gPSBwYXJzZUludCh0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSwgMTApO1xuXG4gICAgaWYgKCFpc05hTihuKSAmJiBuID49IDApIHtcbiAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID0gbjtcbiAgICB9XG4gIH1cblxufVxuXG5jbGFzcyBSZWxldmFudCBleHRlbmRzIF94ZmFfb2JqZWN0LkNvbnRlbnRPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInJlbGV2YW50XCIpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRmaW5hbGl6ZV0oKSB7XG4gICAgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gPSB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xccysvKTtcbiAgfVxuXG59XG5cbmNsYXNzIFJlbmFtZSBleHRlbmRzIF94ZmFfb2JqZWN0LkNvbnRlbnRPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInJlbmFtZVwiKTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kZmluYWxpemVdKCkge1xuICAgIHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID0gdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0udHJpbSgpO1xuXG4gICAgaWYgKHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChcInhtbFwiKSB8fCB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XS5tYXRjaChuZXcgUmVnRXhwKFwiW1xcXFxwe0x9X11bXFxcXHB7TH1cXFxcZC5fXFxcXHB7TX0tXSpcIiwgXCJ1XCIpKSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiWEZBIC0gUmVuYW1lOiBpbnZhbGlkIFhGQSBuYW1lXCIpO1xuICAgIH1cbiAgfVxuXG59XG5cbmNsYXNzIFJlbmRlclBvbGljeSBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbk9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwicmVuZGVyUG9saWN5XCIsIFtcInNlcnZlclwiLCBcImNsaWVudFwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBSdW5TY3JpcHRzIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJydW5TY3JpcHRzXCIsIFtcImJvdGhcIiwgXCJjbGllbnRcIiwgXCJub25lXCIsIFwic2VydmVyXCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIFNjcmlwdCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwic2NyaXB0XCIsIHRydWUpO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBudWxsO1xuICAgIHRoaXMuZXhjbHVkZSA9IG51bGw7XG4gICAgdGhpcy5ydW5TY3JpcHRzID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFNjcmlwdE1vZGVsIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJzY3JpcHRNb2RlbFwiLCBbXCJYRkFcIiwgXCJub25lXCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIFNldmVyaXR5IGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJzZXZlcml0eVwiLCBbXCJpZ25vcmVcIiwgXCJlcnJvclwiLCBcImluZm9ybWF0aW9uXCIsIFwidHJhY2VcIiwgXCJ3YXJuaW5nXCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIFNpbGVudFByaW50IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJzaWxlbnRQcmludFwiLCB0cnVlKTtcbiAgICB0aGlzLmFkZFNpbGVudFByaW50ID0gbnVsbDtcbiAgICB0aGlzLnByaW50ZXJOYW1lID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFN0YXBsZSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwic3RhcGxlXCIpO1xuICAgIHRoaXMubW9kZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLm1vZGUsIFtcInVzZVByaW50ZXJTZXR0aW5nXCIsIFwib25cIiwgXCJvZmZcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgU3RhcnROb2RlIGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJzdGFydE5vZGVcIik7XG4gIH1cblxufVxuXG5jbGFzcyBTdGFydFBhZ2UgZXh0ZW5kcyBfeGZhX29iamVjdC5JbnRlZ2VyT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJzdGFydFBhZ2VcIiwgMCwgbiA9PiB0cnVlKTtcbiAgfVxuXG59XG5cbmNsYXNzIFN1Ym1pdEZvcm1hdCBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbk9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwic3VibWl0Rm9ybWF0XCIsIFtcImh0bWxcIiwgXCJkZWxlZ2F0ZVwiLCBcImZkZlwiLCBcInhtbFwiLCBcInBkZlwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBTdWJtaXRVcmwgZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInN1Ym1pdFVybFwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIFN1YnNldEJlbG93IGV4dGVuZHMgX3hmYV9vYmplY3QuSW50ZWdlck9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwic3Vic2V0QmVsb3dcIiwgMTAwLCBuID0+IG4gPj0gMCAmJiBuIDw9IDEwMCk7XG4gIH1cblxufVxuXG5jbGFzcyBTdXBwcmVzc0Jhbm5lciBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbjAxIHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJzdXBwcmVzc0Jhbm5lclwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIFRhZ2dlZCBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbjAxIHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJ0YWdnZWRcIik7XG4gIH1cblxufVxuXG5jbGFzcyBUZW1wbGF0ZSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwidGVtcGxhdGVcIiwgdHJ1ZSk7XG4gICAgdGhpcy5iYXNlID0gbnVsbDtcbiAgICB0aGlzLnJlbGV2YW50ID0gbnVsbDtcbiAgICB0aGlzLnN0YXJ0UGFnZSA9IG51bGw7XG4gICAgdGhpcy51cmkgPSBudWxsO1xuICAgIHRoaXMueHNsID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFRocmVzaG9sZCBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbk9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwidGhyZXNob2xkXCIsIFtcInRyYWNlXCIsIFwiZXJyb3JcIiwgXCJpbmZvcm1hdGlvblwiLCBcIndhcm5pbmdcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgVG8gZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb25PYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInRvXCIsIFtcIm51bGxcIiwgXCJtZW1vcnlcIiwgXCJzdGRlcnJcIiwgXCJzdGRvdXRcIiwgXCJzeXN0ZW1cIiwgXCJ1cmlcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgVGVtcGxhdGVDYWNoZSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwidGVtcGxhdGVDYWNoZVwiKTtcbiAgICB0aGlzLm1heEVudHJpZXMgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMubWF4RW50cmllcyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogNSxcbiAgICAgIHZhbGlkYXRlOiBuID0+IG4gPj0gMFxuICAgIH0pO1xuICB9XG5cbn1cblxuY2xhc3MgVHJhY2UgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInRyYWNlXCIsIHRydWUpO1xuICAgIHRoaXMuYXJlYSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgVHJhbnNmb3JtIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJ0cmFuc2Zvcm1cIiwgdHJ1ZSk7XG4gICAgdGhpcy5ncm91cFBhcmVudCA9IG51bGw7XG4gICAgdGhpcy5pZkVtcHR5ID0gbnVsbDtcbiAgICB0aGlzLm5hbWVBdHRyID0gbnVsbDtcbiAgICB0aGlzLnBpY3R1cmUgPSBudWxsO1xuICAgIHRoaXMucHJlc2VuY2UgPSBudWxsO1xuICAgIHRoaXMucmVuYW1lID0gbnVsbDtcbiAgICB0aGlzLndoaXRlc3BhY2UgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgVHlwZSBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbk9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwidHlwZVwiLCBbXCJub25lXCIsIFwiYXNjaWk4NVwiLCBcImFzY2lpSGV4XCIsIFwiY2NpdHRmYXhcIiwgXCJmbGF0ZVwiLCBcImx6d1wiLCBcInJ1bkxlbmd0aFwiLCBcIm5hdGl2ZVwiLCBcInhkcFwiLCBcIm1lcmdlZFhEUFwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBVcmkgZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInVyaVwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIFZhbGlkYXRlIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJ2YWxpZGF0ZVwiLCBbXCJwcmVTdWJtaXRcIiwgXCJwcmVQcmludFwiLCBcInByZUV4ZWN1dGVcIiwgXCJwcmVTYXZlXCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIFZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzIGV4dGVuZHMgX3hmYV9vYmplY3QuQ29udGVudE9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwidmFsaWRhdGVBcHByb3ZhbFNpZ25hdHVyZXNcIik7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGZpbmFsaXplXSgpIHtcbiAgICB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSA9IHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXFxzKy8pLmZpbHRlcih4ID0+IFtcImRvY1JlYWR5XCIsIFwicG9zdFNpZ25cIl0uaW5jbHVkZXMoeCkpO1xuICB9XG5cbn1cblxuY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2luZyBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbk9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwidmFsaWRhdGlvbk1lc3NhZ2luZ1wiLCBbXCJhbGxNZXNzYWdlc0luZGl2aWR1YWxseVwiLCBcImFsbE1lc3NhZ2VzVG9nZXRoZXJcIiwgXCJmaXJzdE1lc3NhZ2VPbmx5XCIsIFwibm9NZXNzYWdlc1wiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBWZXJzaW9uIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJ2ZXJzaW9uXCIsIFtcIjEuN1wiLCBcIjEuNlwiLCBcIjEuNVwiLCBcIjEuNFwiLCBcIjEuM1wiLCBcIjEuMlwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBWZXJzaW9uQ29udHJvbCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiVmVyc2lvbkNvbnRyb2xcIik7XG4gICAgdGhpcy5vdXRwdXRCZWxvdyA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLm91dHB1dEJlbG93LCBbXCJ3YXJuXCIsIFwiZXJyb3JcIiwgXCJ1cGRhdGVcIl0pO1xuICAgIHRoaXMuc291cmNlQWJvdmUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5zb3VyY2VBYm92ZSwgW1wid2FyblwiLCBcImVycm9yXCJdKTtcbiAgICB0aGlzLnNvdXJjZUJlbG93ID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMuc291cmNlQmVsb3csIFtcInVwZGF0ZVwiLCBcIm1haW50YWluXCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIFZpZXdlclByZWZlcmVuY2VzIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJ2aWV3ZXJQcmVmZXJlbmNlc1wiLCB0cnVlKTtcbiAgICB0aGlzLkFEQkVfSlNDb25zb2xlID0gbnVsbDtcbiAgICB0aGlzLkFEQkVfSlNEZWJ1Z2dlciA9IG51bGw7XG4gICAgdGhpcy5hZGRWaWV3ZXJQcmVmZXJlbmNlcyA9IG51bGw7XG4gICAgdGhpcy5kdXBsZXhPcHRpb24gPSBudWxsO1xuICAgIHRoaXMuZW5mb3JjZSA9IG51bGw7XG4gICAgdGhpcy5udW1iZXJPZkNvcGllcyA9IG51bGw7XG4gICAgdGhpcy5wYWdlUmFuZ2UgPSBudWxsO1xuICAgIHRoaXMucGlja1RyYXlCeVBERlNpemUgPSBudWxsO1xuICAgIHRoaXMucHJpbnRTY2FsaW5nID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFdlYkNsaWVudCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwid2ViQ2xpZW50XCIsIHRydWUpO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSA/IGF0dHJpYnV0ZXMubmFtZS50cmltKCkgOiBcIlwiO1xuICAgIHRoaXMuZm9udEluZm8gPSBudWxsO1xuICAgIHRoaXMueGRjID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFdoaXRlc3BhY2UgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb25PYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcIndoaXRlc3BhY2VcIiwgW1wicHJlc2VydmVcIiwgXCJsdHJpbVwiLCBcIm5vcm1hbGl6ZVwiLCBcInJ0cmltXCIsIFwidHJpbVwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBXaW5kb3cgZXh0ZW5kcyBfeGZhX29iamVjdC5Db250ZW50T2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJ3aW5kb3dcIik7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGZpbmFsaXplXSgpIHtcbiAgICBjb25zdCBwYWlyID0gdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0udHJpbSgpLnNwbGl0KC9cXHMqLFxccyovLCAyKS5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpO1xuXG4gICAgaWYgKHBhaXIuc29tZSh4ID0+IGlzTmFOKHgpKSkge1xuICAgICAgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gPSBbMCwgMF07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBhaXIubGVuZ3RoID09PSAxKSB7XG4gICAgICBwYWlyLnB1c2gocGFpclswXSk7XG4gICAgfVxuXG4gICAgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gPSBwYWlyO1xuICB9XG5cbn1cblxuY2xhc3MgWGRjIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJ4ZGNcIiwgdHJ1ZSk7XG4gICAgdGhpcy51cmkgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnhzbCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgWGRwIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJ4ZHBcIiwgdHJ1ZSk7XG4gICAgdGhpcy5wYWNrZXRzID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFhzbCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwieHNsXCIsIHRydWUpO1xuICAgIHRoaXMuZGVidWcgPSBudWxsO1xuICAgIHRoaXMudXJpID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFpwbCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwienBsXCIsIHRydWUpO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSA/IGF0dHJpYnV0ZXMubmFtZS50cmltKCkgOiBcIlwiO1xuICAgIHRoaXMuYmF0Y2hPdXRwdXQgPSBudWxsO1xuICAgIHRoaXMuZmxpcExhYmVsID0gbnVsbDtcbiAgICB0aGlzLmZvbnRJbmZvID0gbnVsbDtcbiAgICB0aGlzLnhkYyA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBDb25maWdOYW1lc3BhY2Uge1xuICBzdGF0aWMgW19uYW1lc3BhY2VzLiRidWlsZFhGQU9iamVjdF0obmFtZSwgYXR0cmlidXRlcykge1xuICAgIGlmIChDb25maWdOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIHJldHVybiBDb25maWdOYW1lc3BhY2VbbmFtZV0oYXR0cmlidXRlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN0YXRpYyBhY3JvYmF0KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBBY3JvYmF0KGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBhY3JvYmF0NyhhdHRycykge1xuICAgIHJldHVybiBuZXcgQWNyb2JhdDcoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIEFEQkVfSlNDb25zb2xlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBBREJFX0pTQ29uc29sZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgQURCRV9KU0RlYnVnZ2VyKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBBREJFX0pTRGVidWdnZXIoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGFkZFNpbGVudFByaW50KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBBZGRTaWxlbnRQcmludChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgYWRkVmlld2VyUHJlZmVyZW5jZXMoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEFkZFZpZXdlclByZWZlcmVuY2VzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBhZGp1c3REYXRhKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBBZGp1c3REYXRhKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBhZG9iZUV4dGVuc2lvbkxldmVsKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBBZG9iZUV4dGVuc2lvbkxldmVsKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBhZ2VudChhdHRycykge1xuICAgIHJldHVybiBuZXcgQWdlbnQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGFsd2F5c0VtYmVkKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBBbHdheXNFbWJlZChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgYW1kKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBBbWQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGFyZWEoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEFyZWEoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGF0dHJpYnV0ZXMoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEF0dHJpYnV0ZXMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGF1dG9TYXZlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBBdXRvU2F2ZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgYmFzZShhdHRycykge1xuICAgIHJldHVybiBuZXcgQmFzZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgYmF0Y2hPdXRwdXQoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEJhdGNoT3V0cHV0KGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBiZWhhdmlvck92ZXJyaWRlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBCZWhhdmlvck92ZXJyaWRlKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBjYWNoZShhdHRycykge1xuICAgIHJldHVybiBuZXcgQ2FjaGUoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGNoYW5nZShhdHRycykge1xuICAgIHJldHVybiBuZXcgQ2hhbmdlKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBjb21tb24oYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IENvbW1vbihhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgY29tcHJlc3MoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IENvbXByZXNzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBjb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmUoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IENvbXByZXNzTG9naWNhbFN0cnVjdHVyZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgY29tcHJlc3NPYmplY3RTdHJlYW0oYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IENvbXByZXNzT2JqZWN0U3RyZWFtKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBjb21wcmVzc2lvbihhdHRycykge1xuICAgIHJldHVybiBuZXcgQ29tcHJlc3Npb24oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGNvbmZpZyhhdHRycykge1xuICAgIHJldHVybiBuZXcgQ29uZmlnKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBjb25mb3JtYW5jZShhdHRycykge1xuICAgIHJldHVybiBuZXcgQ29uZm9ybWFuY2UoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGNvbnRlbnRDb3B5KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBDb250ZW50Q29weShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgY29waWVzKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBDb3BpZXMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0b3IoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IENyZWF0b3IoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGN1cnJlbnRQYWdlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBDdXJyZW50UGFnZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZGF0YShhdHRycykge1xuICAgIHJldHVybiBuZXcgRGF0YShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZGVidWcoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IERlYnVnKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0VHlwZWZhY2UoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IERlZmF1bHRUeXBlZmFjZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZGVzdGluYXRpb24oYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IERlc3RpbmF0aW9uKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBkb2N1bWVudEFzc2VtYmx5KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBEb2N1bWVudEFzc2VtYmx5KGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBkcml2ZXIoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IERyaXZlcihhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZHVwbGV4T3B0aW9uKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBEdXBsZXhPcHRpb24oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGR5bmFtaWNSZW5kZXIoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IER5bmFtaWNSZW5kZXIoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGVtYmVkKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBFbWJlZChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZW5jcnlwdChhdHRycykge1xuICAgIHJldHVybiBuZXcgRW5jcnlwdChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZW5jcnlwdGlvbihhdHRycykge1xuICAgIHJldHVybiBuZXcgRW5jcnlwdGlvbihhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZW5jcnlwdGlvbkxldmVsKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBFbmNyeXB0aW9uTGV2ZWwoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGVuZm9yY2UoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEVuZm9yY2UoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGVxdWF0ZShhdHRycykge1xuICAgIHJldHVybiBuZXcgRXF1YXRlKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBlcXVhdGVSYW5nZShhdHRycykge1xuICAgIHJldHVybiBuZXcgRXF1YXRlUmFuZ2UoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGV4Y2x1ZGUoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEV4Y2x1ZGUoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGV4Y2x1ZGVOUyhhdHRycykge1xuICAgIHJldHVybiBuZXcgRXhjbHVkZU5TKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBmbGlwTGFiZWwoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEZsaXBMYWJlbChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZm9udEluZm8oYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEZvbnRJbmZvKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBmb3JtRmllbGRGaWxsaW5nKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBGb3JtRmllbGRGaWxsaW5nKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBncm91cFBhcmVudChhdHRycykge1xuICAgIHJldHVybiBuZXcgR3JvdXBQYXJlbnQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGlmRW1wdHkoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IElmRW1wdHkoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGluY2x1ZGVYRFBDb250ZW50KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBJbmNsdWRlWERQQ29udGVudChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgaW5jcmVtZW50YWxMb2FkKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBJbmNyZW1lbnRhbExvYWQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGluY3JlbWVudGFsTWVyZ2UoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEluY3JlbWVudGFsTWVyZ2UoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGludGVyYWN0aXZlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBJbnRlcmFjdGl2ZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgam9nKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBKb2coYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGxhYmVsUHJpbnRlcihhdHRycykge1xuICAgIHJldHVybiBuZXcgTGFiZWxQcmludGVyKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBsYXlvdXQoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IExheW91dChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgbGV2ZWwoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IExldmVsKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBsaW5lYXJpemVkKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBMaW5lYXJpemVkKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBsb2NhbGUoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IExvY2FsZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgbG9jYWxlU2V0KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBMb2NhbGVTZXQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGxvZyhhdHRycykge1xuICAgIHJldHVybiBuZXcgTG9nKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBtYXAoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IE1hcEVsZW1lbnQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIG1lZGl1bUluZm8oYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IE1lZGl1bUluZm8oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIG1lc3NhZ2UoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IE1lc3NhZ2UoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIG1lc3NhZ2luZyhhdHRycykge1xuICAgIHJldHVybiBuZXcgTWVzc2FnaW5nKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBtb2RlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBNb2RlKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBtb2RpZnlBbm5vdHMoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IE1vZGlmeUFubm90cyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgbXNnSWQoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IE1zZ0lkKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lQXR0cihhdHRycykge1xuICAgIHJldHVybiBuZXcgTmFtZUF0dHIoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIG5ldmVyRW1iZWQoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IE5ldmVyRW1iZWQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIG51bWJlck9mQ29waWVzKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBOdW1iZXJPZkNvcGllcyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgb3BlbkFjdGlvbihhdHRycykge1xuICAgIHJldHVybiBuZXcgT3BlbkFjdGlvbihhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgb3V0cHV0KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBPdXRwdXQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIG91dHB1dEJpbihhdHRycykge1xuICAgIHJldHVybiBuZXcgT3V0cHV0QmluKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBvdXRwdXRYU0woYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IE91dHB1dFhTTChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnByaW50KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBPdmVycHJpbnQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHBhY2tldHMoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFBhY2tldHMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHBhZ2VPZmZzZXQoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFBhZ2VPZmZzZXQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHBhZ2VSYW5nZShhdHRycykge1xuICAgIHJldHVybiBuZXcgUGFnZVJhbmdlKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBwYWdpbmF0aW9uKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBQYWdpbmF0aW9uKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBwYWdpbmF0aW9uT3ZlcnJpZGUoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFBhZ2luYXRpb25PdmVycmlkZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcGFydChhdHRycykge1xuICAgIHJldHVybiBuZXcgUGFydChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcGNsKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBQY2woYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHBkZihhdHRycykge1xuICAgIHJldHVybiBuZXcgUGRmKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBwZGZhKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBQZGZhKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBwZXJtaXNzaW9ucyhhdHRycykge1xuICAgIHJldHVybiBuZXcgUGVybWlzc2lvbnMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHBpY2tUcmF5QnlQREZTaXplKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBQaWNrVHJheUJ5UERGU2l6ZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcGljdHVyZShhdHRycykge1xuICAgIHJldHVybiBuZXcgUGljdHVyZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcGxhaW50ZXh0TWV0YWRhdGEoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFBsYWludGV4dE1ldGFkYXRhKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBwcmVzZW5jZShhdHRycykge1xuICAgIHJldHVybiBuZXcgUHJlc2VuY2UoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHByZXNlbnQoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFByZXNlbnQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHByaW50KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBQcmludChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcHJpbnRIaWdoUXVhbGl0eShhdHRycykge1xuICAgIHJldHVybiBuZXcgUHJpbnRIaWdoUXVhbGl0eShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcHJpbnRTY2FsaW5nKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBQcmludFNjYWxpbmcoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHByaW50ZXJOYW1lKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBQcmludGVyTmFtZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcHJvZHVjZXIoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFByb2R1Y2VyKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBwcyhhdHRycykge1xuICAgIHJldHVybiBuZXcgUHMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHJhbmdlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBSYW5nZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcmVjb3JkKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBSZWNvcmQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHJlbGV2YW50KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBSZWxldmFudChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcmVuYW1lKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBSZW5hbWUoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHJlbmRlclBvbGljeShhdHRycykge1xuICAgIHJldHVybiBuZXcgUmVuZGVyUG9saWN5KGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBydW5TY3JpcHRzKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBSdW5TY3JpcHRzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBzY3JpcHQoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFNjcmlwdChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgc2NyaXB0TW9kZWwoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFNjcmlwdE1vZGVsKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBzZXZlcml0eShhdHRycykge1xuICAgIHJldHVybiBuZXcgU2V2ZXJpdHkoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHNpbGVudFByaW50KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBTaWxlbnRQcmludChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgc3RhcGxlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBTdGFwbGUoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHN0YXJ0Tm9kZShhdHRycykge1xuICAgIHJldHVybiBuZXcgU3RhcnROb2RlKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBzdGFydFBhZ2UoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFN0YXJ0UGFnZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgc3VibWl0Rm9ybWF0KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBTdWJtaXRGb3JtYXQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHN1Ym1pdFVybChhdHRycykge1xuICAgIHJldHVybiBuZXcgU3VibWl0VXJsKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBzdWJzZXRCZWxvdyhhdHRycykge1xuICAgIHJldHVybiBuZXcgU3Vic2V0QmVsb3coYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHN1cHByZXNzQmFubmVyKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBTdXBwcmVzc0Jhbm5lcihhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgdGFnZ2VkKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBUYWdnZWQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHRlbXBsYXRlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBUZW1wbGF0ZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgdGVtcGxhdGVDYWNoZShhdHRycykge1xuICAgIHJldHVybiBuZXcgVGVtcGxhdGVDYWNoZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgdGhyZXNob2xkKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBUaHJlc2hvbGQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHRvKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBUbyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgdHJhY2UoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFRyYWNlKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB0cmFuc2Zvcm0oYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFRyYW5zZm9ybShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgdHlwZShhdHRycykge1xuICAgIHJldHVybiBuZXcgVHlwZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgdXJpKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBVcmkoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBWYWxpZGF0ZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVBcHByb3ZhbFNpZ25hdHVyZXMoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0aW9uTWVzc2FnaW5nKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBWYWxpZGF0aW9uTWVzc2FnaW5nKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB2ZXJzaW9uKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBWZXJzaW9uKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB2ZXJzaW9uQ29udHJvbChhdHRycykge1xuICAgIHJldHVybiBuZXcgVmVyc2lvbkNvbnRyb2woYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHZpZXdlclByZWZlcmVuY2VzKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBWaWV3ZXJQcmVmZXJlbmNlcyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgd2ViQ2xpZW50KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBXZWJDbGllbnQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHdoaXRlc3BhY2UoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFdoaXRlc3BhY2UoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHdpbmRvdyhhdHRycykge1xuICAgIHJldHVybiBuZXcgV2luZG93KGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB4ZGMoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFhkYyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgeGRwKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBYZHAoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHhzbChhdHRycykge1xuICAgIHJldHVybiBuZXcgWHNsKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB6cGwoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFpwbChhdHRycyk7XG4gIH1cblxufVxuXG5leHBvcnRzLkNvbmZpZ05hbWVzcGFjZSA9IENvbmZpZ05hbWVzcGFjZTtcblxuLyoqKi8gfSksXG4vKiA5MCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5Db25uZWN0aW9uU2V0TmFtZXNwYWNlID0gdm9pZCAwO1xuXG52YXIgX25hbWVzcGFjZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc3KTtcblxudmFyIF94ZmFfb2JqZWN0ID0gX193X3BkZmpzX3JlcXVpcmVfXyg3NSk7XG5cbmNvbnN0IENPTk5FQ1RJT05fU0VUX05TX0lEID0gX25hbWVzcGFjZXMuTmFtZXNwYWNlSWRzLmNvbm5lY3Rpb25TZXQuaWQ7XG5cbmNsYXNzIENvbm5lY3Rpb25TZXQgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09OTkVDVElPTl9TRVRfTlNfSUQsIFwiY29ubmVjdGlvblNldFwiLCB0cnVlKTtcbiAgICB0aGlzLndzZGxDb25uZWN0aW9uID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy54bWxDb25uZWN0aW9uID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy54c2RDb25uZWN0aW9uID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gIH1cblxufVxuXG5jbGFzcyBFZmZlY3RpdmVJbnB1dFBvbGljeSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05ORUNUSU9OX1NFVF9OU19JRCwgXCJlZmZlY3RpdmVJbnB1dFBvbGljeVwiKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgfVxuXG59XG5cbmNsYXNzIEVmZmVjdGl2ZU91dHB1dFBvbGljeSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05ORUNUSU9OX1NFVF9OU19JRCwgXCJlZmZlY3RpdmVPdXRwdXRQb2xpY3lcIik7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxufVxuXG5jbGFzcyBPcGVyYXRpb24gZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09OTkVDVElPTl9TRVRfTlNfSUQsIFwib3BlcmF0aW9uXCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5pbnB1dCA9IGF0dHJpYnV0ZXMuaW5wdXQgfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLm91dHB1dCA9IGF0dHJpYnV0ZXMub3V0cHV0IHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbn1cblxuY2xhc3MgUm9vdEVsZW1lbnQgZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09OTkVDVElPTl9TRVRfTlNfSUQsIFwicm9vdEVsZW1lbnRcIik7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxufVxuXG5jbGFzcyBTb2FwQWN0aW9uIGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTk5FQ1RJT05fU0VUX05TX0lELCBcInNvYXBBY3Rpb25cIik7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxufVxuXG5jbGFzcyBTb2FwQWRkcmVzcyBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05ORUNUSU9OX1NFVF9OU19JRCwgXCJzb2FwQWRkcmVzc1wiKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgfVxuXG59XG5cbmNsYXNzIFVyaSBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05ORUNUSU9OX1NFVF9OU19JRCwgXCJ1cmlcIik7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxufVxuXG5jbGFzcyBXc2RsQWRkcmVzcyBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05ORUNUSU9OX1NFVF9OU19JRCwgXCJ3c2RsQWRkcmVzc1wiKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgfVxuXG59XG5cbmNsYXNzIFdzZGxDb25uZWN0aW9uIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTk5FQ1RJT05fU0VUX05TX0lELCBcIndzZGxDb25uZWN0aW9uXCIsIHRydWUpO1xuICAgIHRoaXMuZGF0YURlc2NyaXB0aW9uID0gYXR0cmlidXRlcy5kYXRhRGVzY3JpcHRpb24gfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLmVmZmVjdGl2ZUlucHV0UG9saWN5ID0gbnVsbDtcbiAgICB0aGlzLmVmZmVjdGl2ZU91dHB1dFBvbGljeSA9IG51bGw7XG4gICAgdGhpcy5vcGVyYXRpb24gPSBudWxsO1xuICAgIHRoaXMuc29hcEFjdGlvbiA9IG51bGw7XG4gICAgdGhpcy5zb2FwQWRkcmVzcyA9IG51bGw7XG4gICAgdGhpcy53c2RsQWRkcmVzcyA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBYbWxDb25uZWN0aW9uIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTk5FQ1RJT05fU0VUX05TX0lELCBcInhtbENvbm5lY3Rpb25cIiwgdHJ1ZSk7XG4gICAgdGhpcy5kYXRhRGVzY3JpcHRpb24gPSBhdHRyaWJ1dGVzLmRhdGFEZXNjcmlwdGlvbiB8fCBcIlwiO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCBcIlwiO1xuICAgIHRoaXMudXJpID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFhzZENvbm5lY3Rpb24gZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09OTkVDVElPTl9TRVRfTlNfSUQsIFwieHNkQ29ubmVjdGlvblwiLCB0cnVlKTtcbiAgICB0aGlzLmRhdGFEZXNjcmlwdGlvbiA9IGF0dHJpYnV0ZXMuZGF0YURlc2NyaXB0aW9uIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy5yb290RWxlbWVudCA9IG51bGw7XG4gICAgdGhpcy51cmkgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgQ29ubmVjdGlvblNldE5hbWVzcGFjZSB7XG4gIHN0YXRpYyBbX25hbWVzcGFjZXMuJGJ1aWxkWEZBT2JqZWN0XShuYW1lLCBhdHRyaWJ1dGVzKSB7XG4gICAgaWYgKENvbm5lY3Rpb25TZXROYW1lc3BhY2UuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIHJldHVybiBDb25uZWN0aW9uU2V0TmFtZXNwYWNlW25hbWVdKGF0dHJpYnV0ZXMpO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBzdGF0aWMgY29ubmVjdGlvblNldChhdHRycykge1xuICAgIHJldHVybiBuZXcgQ29ubmVjdGlvblNldChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZWZmZWN0aXZlSW5wdXRQb2xpY3koYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEVmZmVjdGl2ZUlucHV0UG9saWN5KGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBlZmZlY3RpdmVPdXRwdXRQb2xpY3koYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEVmZmVjdGl2ZU91dHB1dFBvbGljeShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgb3BlcmF0aW9uKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRpb24oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHJvb3RFbGVtZW50KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBSb290RWxlbWVudChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgc29hcEFjdGlvbihhdHRycykge1xuICAgIHJldHVybiBuZXcgU29hcEFjdGlvbihhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgc29hcEFkZHJlc3MoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFNvYXBBZGRyZXNzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB1cmkoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFVyaShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgd3NkbEFkZHJlc3MoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFdzZGxBZGRyZXNzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB3c2RsQ29ubmVjdGlvbihhdHRycykge1xuICAgIHJldHVybiBuZXcgV3NkbENvbm5lY3Rpb24oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHhtbENvbm5lY3Rpb24oYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFhtbENvbm5lY3Rpb24oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHhzZENvbm5lY3Rpb24oYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFhzZENvbm5lY3Rpb24oYXR0cnMpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Db25uZWN0aW9uU2V0TmFtZXNwYWNlID0gQ29ubmVjdGlvblNldE5hbWVzcGFjZTtcblxuLyoqKi8gfSksXG4vKiA5MSAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5EYXRhc2V0c05hbWVzcGFjZSA9IHZvaWQgMDtcblxudmFyIF94ZmFfb2JqZWN0ID0gX193X3BkZmpzX3JlcXVpcmVfXyg3NSk7XG5cbnZhciBfbmFtZXNwYWNlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNzcpO1xuXG5jb25zdCBEQVRBU0VUU19OU19JRCA9IF9uYW1lc3BhY2VzLk5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZDtcblxuY2xhc3MgRGF0YSBleHRlbmRzIF94ZmFfb2JqZWN0LlhtbE9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihEQVRBU0VUU19OU19JRCwgXCJkYXRhXCIsIGF0dHJpYnV0ZXMpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRpc05zQWdub3N0aWNdKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbn1cblxuY2xhc3MgRGF0YXNldHMgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoREFUQVNFVFNfTlNfSUQsIFwiZGF0YXNldHNcIiwgdHJ1ZSk7XG4gICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgICB0aGlzLlNpZ25hdHVyZSA9IG51bGw7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJG9uQ2hpbGRdKGNoaWxkKSB7XG4gICAgY29uc3QgbmFtZSA9IGNoaWxkW194ZmFfb2JqZWN0LiRub2RlTmFtZV07XG5cbiAgICBpZiAobmFtZSA9PT0gXCJkYXRhXCIgJiYgY2hpbGRbX3hmYV9vYmplY3QuJG5hbWVzcGFjZUlkXSA9PT0gREFUQVNFVFNfTlNfSUQgfHwgbmFtZSA9PT0gXCJTaWduYXR1cmVcIiAmJiBjaGlsZFtfeGZhX29iamVjdC4kbmFtZXNwYWNlSWRdID09PSBfbmFtZXNwYWNlcy5OYW1lc3BhY2VJZHMuc2lnbmF0dXJlLmlkKSB7XG4gICAgICB0aGlzW25hbWVdID0gY2hpbGQ7XG4gICAgfVxuXG4gICAgdGhpc1tfeGZhX29iamVjdC4kYXBwZW5kQ2hpbGRdKGNoaWxkKTtcbiAgfVxuXG59XG5cbmNsYXNzIERhdGFzZXRzTmFtZXNwYWNlIHtcbiAgc3RhdGljIFtfbmFtZXNwYWNlcy4kYnVpbGRYRkFPYmplY3RdKG5hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgICBpZiAoRGF0YXNldHNOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIHJldHVybiBEYXRhc2V0c05hbWVzcGFjZVtuYW1lXShhdHRyaWJ1dGVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgc3RhdGljIGRhdGFzZXRzKGF0dHJpYnV0ZXMpIHtcbiAgICByZXR1cm4gbmV3IERhdGFzZXRzKGF0dHJpYnV0ZXMpO1xuICB9XG5cbiAgc3RhdGljIGRhdGEoYXR0cmlidXRlcykge1xuICAgIHJldHVybiBuZXcgRGF0YShhdHRyaWJ1dGVzKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuRGF0YXNldHNOYW1lc3BhY2UgPSBEYXRhc2V0c05hbWVzcGFjZTtcblxuLyoqKi8gfSksXG4vKiA5MiAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5Mb2NhbGVTZXROYW1lc3BhY2UgPSB2b2lkIDA7XG5cbnZhciBfbmFtZXNwYWNlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNzcpO1xuXG52YXIgX3hmYV9vYmplY3QgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc1KTtcblxudmFyIF91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oNzYpO1xuXG5jb25zdCBMT0NBTEVfU0VUX05TX0lEID0gX25hbWVzcGFjZXMuTmFtZXNwYWNlSWRzLmxvY2FsZVNldC5pZDtcblxuY2xhc3MgQ2FsZW5kYXJTeW1ib2xzIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsIFwiY2FsZW5kYXJTeW1ib2xzXCIsIHRydWUpO1xuICAgIHRoaXMubmFtZSA9IFwiZ3JlZ29yaWFuXCI7XG4gICAgdGhpcy5kYXlOYW1lcyA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgyKTtcbiAgICB0aGlzLmVyYU5hbWVzID0gbnVsbDtcbiAgICB0aGlzLm1lcmlkaWVtTmFtZXMgPSBudWxsO1xuICAgIHRoaXMubW9udGhOYW1lcyA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgyKTtcbiAgfVxuXG59XG5cbmNsYXNzIEN1cnJlbmN5U3ltYm9sIGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsIFwiY3VycmVuY3lTeW1ib2xcIik7XG4gICAgdGhpcy5uYW1lID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMubmFtZSwgW1wic3ltYm9sXCIsIFwiaXNvbmFtZVwiLCBcImRlY2ltYWxcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgQ3VycmVuY3lTeW1ib2xzIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsIFwiY3VycmVuY3lTeW1ib2xzXCIsIHRydWUpO1xuICAgIHRoaXMuY3VycmVuY3lTeW1ib2wgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoMyk7XG4gIH1cblxufVxuXG5jbGFzcyBEYXRlUGF0dGVybiBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihMT0NBTEVfU0VUX05TX0lELCBcImRhdGVQYXR0ZXJuXCIpO1xuICAgIHRoaXMubmFtZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLm5hbWUsIFtcImZ1bGxcIiwgXCJsb25nXCIsIFwibWVkXCIsIFwic2hvcnRcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgRGF0ZVBhdHRlcm5zIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsIFwiZGF0ZVBhdHRlcm5zXCIsIHRydWUpO1xuICAgIHRoaXMuZGF0ZVBhdHRlcm4gPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoNCk7XG4gIH1cblxufVxuXG5jbGFzcyBEYXRlVGltZVN5bWJvbHMgZXh0ZW5kcyBfeGZhX29iamVjdC5Db250ZW50T2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsIFwiZGF0ZVRpbWVTeW1ib2xzXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgRGF5IGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsIFwiZGF5XCIpO1xuICB9XG5cbn1cblxuY2xhc3MgRGF5TmFtZXMgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoTE9DQUxFX1NFVF9OU19JRCwgXCJkYXlOYW1lc1wiLCB0cnVlKTtcbiAgICB0aGlzLmFiYnIgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuYWJicixcbiAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDFcbiAgICB9KTtcbiAgICB0aGlzLmRheSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSg3KTtcbiAgfVxuXG59XG5cbmNsYXNzIEVyYSBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihMT0NBTEVfU0VUX05TX0lELCBcImVyYVwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIEVyYU5hbWVzIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsIFwiZXJhTmFtZXNcIiwgdHJ1ZSk7XG4gICAgdGhpcy5lcmEgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoMik7XG4gIH1cblxufVxuXG5jbGFzcyBMb2NhbGUgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoTE9DQUxFX1NFVF9OU19JRCwgXCJsb2NhbGVcIiwgdHJ1ZSk7XG4gICAgdGhpcy5kZXNjID0gYXR0cmlidXRlcy5kZXNjIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gXCJpc29uYW1lXCI7XG4gICAgdGhpcy5jYWxlbmRhclN5bWJvbHMgPSBudWxsO1xuICAgIHRoaXMuY3VycmVuY3lTeW1ib2xzID0gbnVsbDtcbiAgICB0aGlzLmRhdGVQYXR0ZXJucyA9IG51bGw7XG4gICAgdGhpcy5kYXRlVGltZVN5bWJvbHMgPSBudWxsO1xuICAgIHRoaXMubnVtYmVyUGF0dGVybnMgPSBudWxsO1xuICAgIHRoaXMubnVtYmVyU3ltYm9scyA9IG51bGw7XG4gICAgdGhpcy50aW1lUGF0dGVybnMgPSBudWxsO1xuICAgIHRoaXMudHlwZUZhY2VzID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIExvY2FsZVNldCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihMT0NBTEVfU0VUX05TX0lELCBcImxvY2FsZVNldFwiLCB0cnVlKTtcbiAgICB0aGlzLmxvY2FsZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgTWVyaWRpZW0gZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoTE9DQUxFX1NFVF9OU19JRCwgXCJtZXJpZGllbVwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIE1lcmlkaWVtTmFtZXMgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoTE9DQUxFX1NFVF9OU19JRCwgXCJtZXJpZGllbU5hbWVzXCIsIHRydWUpO1xuICAgIHRoaXMubWVyaWRpZW0gPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoMik7XG4gIH1cblxufVxuXG5jbGFzcyBNb250aCBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihMT0NBTEVfU0VUX05TX0lELCBcIm1vbnRoXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgTW9udGhOYW1lcyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihMT0NBTEVfU0VUX05TX0lELCBcIm1vbnRoTmFtZXNcIiwgdHJ1ZSk7XG4gICAgdGhpcy5hYmJyID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLmFiYnIsXG4gICAgICBkZWZhdWx0VmFsdWU6IDAsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID09PSAxXG4gICAgfSk7XG4gICAgdGhpcy5tb250aCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgxMik7XG4gIH1cblxufVxuXG5jbGFzcyBOdW1iZXJQYXR0ZXJuIGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsIFwibnVtYmVyUGF0dGVyblwiKTtcbiAgICB0aGlzLm5hbWUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5uYW1lLCBbXCJmdWxsXCIsIFwibG9uZ1wiLCBcIm1lZFwiLCBcInNob3J0XCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIE51bWJlclBhdHRlcm5zIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsIFwibnVtYmVyUGF0dGVybnNcIiwgdHJ1ZSk7XG4gICAgdGhpcy5udW1iZXJQYXR0ZXJuID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KDQpO1xuICB9XG5cbn1cblxuY2xhc3MgTnVtYmVyU3ltYm9sIGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsIFwibnVtYmVyU3ltYm9sXCIpO1xuICAgIHRoaXMubmFtZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLm5hbWUsIFtcImRlY2ltYWxcIiwgXCJncm91cGluZ1wiLCBcInBlcmNlbnRcIiwgXCJtaW51c1wiLCBcInplcm9cIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgTnVtYmVyU3ltYm9scyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihMT0NBTEVfU0VUX05TX0lELCBcIm51bWJlclN5bWJvbHNcIiwgdHJ1ZSk7XG4gICAgdGhpcy5udW1iZXJTeW1ib2wgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoNSk7XG4gIH1cblxufVxuXG5jbGFzcyBUaW1lUGF0dGVybiBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihMT0NBTEVfU0VUX05TX0lELCBcInRpbWVQYXR0ZXJuXCIpO1xuICAgIHRoaXMubmFtZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLm5hbWUsIFtcImZ1bGxcIiwgXCJsb25nXCIsIFwibWVkXCIsIFwic2hvcnRcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgVGltZVBhdHRlcm5zIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsIFwidGltZVBhdHRlcm5zXCIsIHRydWUpO1xuICAgIHRoaXMudGltZVBhdHRlcm4gPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoNCk7XG4gIH1cblxufVxuXG5jbGFzcyBUeXBlRmFjZSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihMT0NBTEVfU0VUX05TX0lELCBcInR5cGVGYWNlXCIsIHRydWUpO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8IFwiXCI7XG4gIH1cblxufVxuXG5jbGFzcyBUeXBlRmFjZXMgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoTE9DQUxFX1NFVF9OU19JRCwgXCJ0eXBlRmFjZXNcIiwgdHJ1ZSk7XG4gICAgdGhpcy50eXBlRmFjZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgTG9jYWxlU2V0TmFtZXNwYWNlIHtcbiAgc3RhdGljIFtfbmFtZXNwYWNlcy4kYnVpbGRYRkFPYmplY3RdKG5hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgICBpZiAoTG9jYWxlU2V0TmFtZXNwYWNlLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICByZXR1cm4gTG9jYWxlU2V0TmFtZXNwYWNlW25hbWVdKGF0dHJpYnV0ZXMpO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBzdGF0aWMgY2FsZW5kYXJTeW1ib2xzKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBDYWxlbmRhclN5bWJvbHMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGN1cnJlbmN5U3ltYm9sKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBDdXJyZW5jeVN5bWJvbChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgY3VycmVuY3lTeW1ib2xzKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBDdXJyZW5jeVN5bWJvbHMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGRhdGVQYXR0ZXJuKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlUGF0dGVybihhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZGF0ZVBhdHRlcm5zKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlUGF0dGVybnMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGRhdGVUaW1lU3ltYm9scyhhdHRycykge1xuICAgIHJldHVybiBuZXcgRGF0ZVRpbWVTeW1ib2xzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBkYXkoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IERheShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZGF5TmFtZXMoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IERheU5hbWVzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBlcmEoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEVyYShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZXJhTmFtZXMoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEVyYU5hbWVzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBsb2NhbGUoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IExvY2FsZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgbG9jYWxlU2V0KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBMb2NhbGVTZXQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIG1lcmlkaWVtKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBNZXJpZGllbShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgbWVyaWRpZW1OYW1lcyhhdHRycykge1xuICAgIHJldHVybiBuZXcgTWVyaWRpZW1OYW1lcyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgbW9udGgoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IE1vbnRoKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBtb250aE5hbWVzKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBNb250aE5hbWVzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBudW1iZXJQYXR0ZXJuKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBOdW1iZXJQYXR0ZXJuKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBudW1iZXJQYXR0ZXJucyhhdHRycykge1xuICAgIHJldHVybiBuZXcgTnVtYmVyUGF0dGVybnMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIG51bWJlclN5bWJvbChhdHRycykge1xuICAgIHJldHVybiBuZXcgTnVtYmVyU3ltYm9sKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBudW1iZXJTeW1ib2xzKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBOdW1iZXJTeW1ib2xzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB0aW1lUGF0dGVybihhdHRycykge1xuICAgIHJldHVybiBuZXcgVGltZVBhdHRlcm4oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHRpbWVQYXR0ZXJucyhhdHRycykge1xuICAgIHJldHVybiBuZXcgVGltZVBhdHRlcm5zKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB0eXBlRmFjZShhdHRycykge1xuICAgIHJldHVybiBuZXcgVHlwZUZhY2UoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHR5cGVGYWNlcyhhdHRycykge1xuICAgIHJldHVybiBuZXcgVHlwZUZhY2VzKGF0dHJzKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuTG9jYWxlU2V0TmFtZXNwYWNlID0gTG9jYWxlU2V0TmFtZXNwYWNlO1xuXG4vKioqLyB9KSxcbi8qIDkzICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlNpZ25hdHVyZU5hbWVzcGFjZSA9IHZvaWQgMDtcblxudmFyIF9uYW1lc3BhY2VzID0gX193X3BkZmpzX3JlcXVpcmVfXyg3Nyk7XG5cbnZhciBfeGZhX29iamVjdCA9IF9fd19wZGZqc19yZXF1aXJlX18oNzUpO1xuXG5jb25zdCBTSUdOQVRVUkVfTlNfSUQgPSBfbmFtZXNwYWNlcy5OYW1lc3BhY2VJZHMuc2lnbmF0dXJlLmlkO1xuXG5jbGFzcyBTaWduYXR1cmUgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoU0lHTkFUVVJFX05TX0lELCBcInNpZ25hdHVyZVwiLCB0cnVlKTtcbiAgfVxuXG59XG5cbmNsYXNzIFNpZ25hdHVyZU5hbWVzcGFjZSB7XG4gIHN0YXRpYyBbX25hbWVzcGFjZXMuJGJ1aWxkWEZBT2JqZWN0XShuYW1lLCBhdHRyaWJ1dGVzKSB7XG4gICAgaWYgKFNpZ25hdHVyZU5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgcmV0dXJuIFNpZ25hdHVyZU5hbWVzcGFjZVtuYW1lXShhdHRyaWJ1dGVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgc3RhdGljIHNpZ25hdHVyZShhdHRyaWJ1dGVzKSB7XG4gICAgcmV0dXJuIG5ldyBTaWduYXR1cmUoYXR0cmlidXRlcyk7XG4gIH1cblxufVxuXG5leHBvcnRzLlNpZ25hdHVyZU5hbWVzcGFjZSA9IFNpZ25hdHVyZU5hbWVzcGFjZTtcblxuLyoqKi8gfSksXG4vKiA5NCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5TdHlsZXNoZWV0TmFtZXNwYWNlID0gdm9pZCAwO1xuXG52YXIgX25hbWVzcGFjZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc3KTtcblxudmFyIF94ZmFfb2JqZWN0ID0gX193X3BkZmpzX3JlcXVpcmVfXyg3NSk7XG5cbmNvbnN0IFNUWUxFU0hFRVRfTlNfSUQgPSBfbmFtZXNwYWNlcy5OYW1lc3BhY2VJZHMuc3R5bGVzaGVldC5pZDtcblxuY2xhc3MgU3R5bGVzaGVldCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihTVFlMRVNIRUVUX05TX0lELCBcInN0eWxlc2hlZXRcIiwgdHJ1ZSk7XG4gIH1cblxufVxuXG5jbGFzcyBTdHlsZXNoZWV0TmFtZXNwYWNlIHtcbiAgc3RhdGljIFtfbmFtZXNwYWNlcy4kYnVpbGRYRkFPYmplY3RdKG5hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgICBpZiAoU3R5bGVzaGVldE5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgcmV0dXJuIFN0eWxlc2hlZXROYW1lc3BhY2VbbmFtZV0oYXR0cmlidXRlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN0YXRpYyBzdHlsZXNoZWV0KGF0dHJpYnV0ZXMpIHtcbiAgICByZXR1cm4gbmV3IFN0eWxlc2hlZXQoYXR0cmlidXRlcyk7XG4gIH1cblxufVxuXG5leHBvcnRzLlN0eWxlc2hlZXROYW1lc3BhY2UgPSBTdHlsZXNoZWV0TmFtZXNwYWNlO1xuXG4vKioqLyB9KSxcbi8qIDk1ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlhkcE5hbWVzcGFjZSA9IHZvaWQgMDtcblxudmFyIF9uYW1lc3BhY2VzID0gX193X3BkZmpzX3JlcXVpcmVfXyg3Nyk7XG5cbnZhciBfeGZhX29iamVjdCA9IF9fd19wZGZqc19yZXF1aXJlX18oNzUpO1xuXG5jb25zdCBYRFBfTlNfSUQgPSBfbmFtZXNwYWNlcy5OYW1lc3BhY2VJZHMueGRwLmlkO1xuXG5jbGFzcyBYZHAgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoWERQX05TX0lELCBcInhkcFwiLCB0cnVlKTtcbiAgICB0aGlzLnV1aWQgPSBhdHRyaWJ1dGVzLnV1aWQgfHwgXCJcIjtcbiAgICB0aGlzLnRpbWVTdGFtcCA9IGF0dHJpYnV0ZXMudGltZVN0YW1wIHx8IFwiXCI7XG4gICAgdGhpcy5jb25maWcgPSBudWxsO1xuICAgIHRoaXMuY29ubmVjdGlvblNldCA9IG51bGw7XG4gICAgdGhpcy5kYXRhc2V0cyA9IG51bGw7XG4gICAgdGhpcy5sb2NhbGVTZXQgPSBudWxsO1xuICAgIHRoaXMuc3R5bGVzaGVldCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMudGVtcGxhdGUgPSBudWxsO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRvbkNoaWxkQ2hlY2tdKGNoaWxkKSB7XG4gICAgY29uc3QgbnMgPSBfbmFtZXNwYWNlcy5OYW1lc3BhY2VJZHNbY2hpbGRbX3hmYV9vYmplY3QuJG5vZGVOYW1lXV07XG4gICAgcmV0dXJuIG5zICYmIGNoaWxkW194ZmFfb2JqZWN0LiRuYW1lc3BhY2VJZF0gPT09IG5zLmlkO1xuICB9XG5cbn1cblxuY2xhc3MgWGRwTmFtZXNwYWNlIHtcbiAgc3RhdGljIFtfbmFtZXNwYWNlcy4kYnVpbGRYRkFPYmplY3RdKG5hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgICBpZiAoWGRwTmFtZXNwYWNlLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICByZXR1cm4gWGRwTmFtZXNwYWNlW25hbWVdKGF0dHJpYnV0ZXMpO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBzdGF0aWMgeGRwKGF0dHJpYnV0ZXMpIHtcbiAgICByZXR1cm4gbmV3IFhkcChhdHRyaWJ1dGVzKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuWGRwTmFtZXNwYWNlID0gWGRwTmFtZXNwYWNlO1xuXG4vKioqLyB9KSxcbi8qIDk2ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlhodG1sTmFtZXNwYWNlID0gdm9pZCAwO1xuXG52YXIgX3hmYV9vYmplY3QgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc1KTtcblxudmFyIF9uYW1lc3BhY2VzID0gX193X3BkZmpzX3JlcXVpcmVfXyg3Nyk7XG5cbnZhciBfaHRtbF91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oODIpO1xuXG52YXIgX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg3Nik7XG5cbmNvbnN0IFhIVE1MX05TX0lEID0gX25hbWVzcGFjZXMuTmFtZXNwYWNlSWRzLnhodG1sLmlkO1xuY29uc3QgJHJpY2hUZXh0ID0gU3ltYm9sKCk7XG5jb25zdCBWQUxJRF9TVFlMRVMgPSBuZXcgU2V0KFtcImNvbG9yXCIsIFwiZm9udFwiLCBcImZvbnQtZmFtaWx5XCIsIFwiZm9udC1zaXplXCIsIFwiZm9udC1zdHJldGNoXCIsIFwiZm9udC1zdHlsZVwiLCBcImZvbnQtd2VpZ2h0XCIsIFwibWFyZ2luXCIsIFwibWFyZ2luLWJvdHRvbVwiLCBcIm1hcmdpbi1sZWZ0XCIsIFwibWFyZ2luLXJpZ2h0XCIsIFwibWFyZ2luLXRvcFwiLCBcImxldHRlci1zcGFjaW5nXCIsIFwibGluZS1oZWlnaHRcIiwgXCJvcnBoYW5zXCIsIFwicGFnZS1icmVhay1hZnRlclwiLCBcInBhZ2UtYnJlYWstYmVmb3JlXCIsIFwicGFnZS1icmVhay1pbnNpZGVcIiwgXCJ0YWItaW50ZXJ2YWxcIiwgXCJ0YWItc3RvcFwiLCBcInRleHQtYWxpZ25cIiwgXCJ0ZXh0LWRlY29yYXRpb25cIiwgXCJ0ZXh0LWluZGVudFwiLCBcInZlcnRpY2FsLWFsaWduXCIsIFwid2lkb3dzXCIsIFwia2VybmluZy1tb2RlXCIsIFwieGZhLWZvbnQtaG9yaXpvbnRhbC1zY2FsZVwiLCBcInhmYS1mb250LXZlcnRpY2FsLXNjYWxlXCIsIFwieGZhLXNwYWNlcnVuXCIsIFwieGZhLXRhYi1zdG9wc1wiXSk7XG5jb25zdCBTdHlsZU1hcHBpbmcgPSBuZXcgTWFwKFtbXCJwYWdlLWJyZWFrLWFmdGVyXCIsIFwiYnJlYWtBZnRlclwiXSwgW1wicGFnZS1icmVhay1iZWZvcmVcIiwgXCJicmVha0JlZm9yZVwiXSwgW1wicGFnZS1icmVhay1pbnNpZGVcIiwgXCJicmVha0luc2lkZVwiXSwgW1wia2VybmluZy1tb2RlXCIsIHZhbHVlID0+IHZhbHVlID09PSBcIm5vbmVcIiA/IFwibm9uZVwiIDogXCJub3JtYWxcIl0sIFtcInhmYS1mb250LWhvcml6b250YWwtc2NhbGVcIiwgdmFsdWUgPT4gYHNjYWxlWCgke01hdGgubWF4KDAsIE1hdGgubWluKHBhcnNlSW50KHZhbHVlKSAvIDEwMCkpLnRvRml4ZWQoMil9KWBdLCBbXCJ4ZmEtZm9udC12ZXJ0aWNhbC1zY2FsZVwiLCB2YWx1ZSA9PiBgc2NhbGVZKCR7TWF0aC5tYXgoMCwgTWF0aC5taW4ocGFyc2VJbnQodmFsdWUpIC8gMTAwKSkudG9GaXhlZCgyKX0pYF0sIFtcInhmYS1zcGFjZXJ1blwiLCBcIlwiXSwgW1wieGZhLXRhYi1zdG9wc1wiLCBcIlwiXSwgW1wiZm9udC1zaXplXCIsICh2YWx1ZSwgb3JpZ2luYWwpID0+IHtcbiAgdmFsdWUgPSBvcmlnaW5hbC5mb250U2l6ZSA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKHZhbHVlKTtcbiAgcmV0dXJuICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKDAuOTkgKiB2YWx1ZSk7XG59XSwgW1wibGV0dGVyLXNwYWNpbmdcIiwgdmFsdWUgPT4gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykoKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkodmFsdWUpKV0sIFtcImxpbmUtaGVpZ2h0XCIsIHZhbHVlID0+ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKCgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKHZhbHVlKSldLCBbXCJtYXJnaW5cIiwgdmFsdWUgPT4gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykoKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkodmFsdWUpKV0sIFtcIm1hcmdpbi1ib3R0b21cIiwgdmFsdWUgPT4gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykoKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkodmFsdWUpKV0sIFtcIm1hcmdpbi1sZWZ0XCIsIHZhbHVlID0+ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKCgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKHZhbHVlKSldLCBbXCJtYXJnaW4tcmlnaHRcIiwgdmFsdWUgPT4gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykoKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkodmFsdWUpKV0sIFtcIm1hcmdpbi10b3BcIiwgdmFsdWUgPT4gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykoKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkodmFsdWUpKV0sIFtcInRleHQtaW5kZW50XCIsIHZhbHVlID0+ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKCgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKHZhbHVlKSldLCBbXCJmb250LWZhbWlseVwiLCB2YWx1ZSA9PiB2YWx1ZV0sIFtcInZlcnRpY2FsLWFsaWduXCIsIHZhbHVlID0+ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKCgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKHZhbHVlKSldXSk7XG5jb25zdCBzcGFjZXNSZWdFeHAgPSAvXFxzKy9nO1xuY29uc3QgY3JsZlJlZ0V4cCA9IC9bXFxyXFxuXSsvZztcbmNvbnN0IGNybGZGb3JSaWNoVGV4dFJlZ0V4cCA9IC9cXHJcXG4/L2c7XG5cbmZ1bmN0aW9uIG1hcFN0eWxlKHN0eWxlU3RyLCBub2RlLCByaWNoVGV4dCkge1xuICBjb25zdCBzdHlsZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgaWYgKCFzdHlsZVN0cikge1xuICAgIHJldHVybiBzdHlsZTtcbiAgfVxuXG4gIGNvbnN0IG9yaWdpbmFsID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBzdHlsZVN0ci5zcGxpdChcIjtcIikubWFwKHMgPT4gcy5zcGxpdChcIjpcIiwgMikpKSB7XG4gICAgY29uc3QgbWFwcGluZyA9IFN0eWxlTWFwcGluZy5nZXQoa2V5KTtcblxuICAgIGlmIChtYXBwaW5nID09PSBcIlwiKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsZXQgbmV3VmFsdWUgPSB2YWx1ZTtcblxuICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICBpZiAodHlwZW9mIG1hcHBpbmcgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBtYXBwaW5nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3VmFsdWUgPSBtYXBwaW5nKHZhbHVlLCBvcmlnaW5hbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleS5lbmRzV2l0aChcInNjYWxlXCIpKSB7XG4gICAgICBpZiAoc3R5bGUudHJhbnNmb3JtKSB7XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSA9IGAke3N0eWxlW2tleV19ICR7bmV3VmFsdWV9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZVtrZXkucmVwbGFjZUFsbCgvLShbYS16QS1aXSkvZywgKF8sIHgpID0+IHgudG9VcHBlckNhc2UoKSldID0gbmV3VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0eWxlLmZvbnRGYW1pbHkpIHtcbiAgICAoMCwgX2h0bWxfdXRpbHMuc2V0Rm9udEZhbWlseSkoe1xuICAgICAgdHlwZWZhY2U6IHN0eWxlLmZvbnRGYW1pbHksXG4gICAgICB3ZWlnaHQ6IHN0eWxlLmZvbnRXZWlnaHQgfHwgXCJub3JtYWxcIixcbiAgICAgIHBvc3R1cmU6IHN0eWxlLmZvbnRTdHlsZSB8fCBcIm5vcm1hbFwiLFxuICAgICAgc2l6ZTogb3JpZ2luYWwuZm9udFNpemUgfHwgMFxuICAgIH0sIG5vZGUsIG5vZGVbX3hmYV9vYmplY3QuJGdsb2JhbERhdGFdLmZvbnRGaW5kZXIsIHN0eWxlKTtcbiAgfVxuXG4gIGlmIChyaWNoVGV4dCAmJiBzdHlsZS52ZXJ0aWNhbEFsaWduICYmIHN0eWxlLnZlcnRpY2FsQWxpZ24gIT09IFwiMHB4XCIgJiYgc3R5bGUuZm9udFNpemUpIHtcbiAgICBjb25zdCBTVUJfU1VQRVJfU0NSSVBUX0ZBQ1RPUiA9IDAuNTgzO1xuICAgIGNvbnN0IFZFUlRJQ0FMX0ZBQ1RPUiA9IDAuMzMzO1xuICAgIGNvbnN0IGZvbnRTaXplID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoc3R5bGUuZm9udFNpemUpO1xuICAgIHN0eWxlLmZvbnRTaXplID0gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykoZm9udFNpemUgKiBTVUJfU1VQRVJfU0NSSVBUX0ZBQ1RPUik7XG4gICAgc3R5bGUudmVydGljYWxBbGlnbiA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKE1hdGguc2lnbigoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShzdHlsZS52ZXJ0aWNhbEFsaWduKSkgKiBmb250U2l6ZSAqIFZFUlRJQ0FMX0ZBQ1RPUik7XG4gIH1cblxuICAoMCwgX2h0bWxfdXRpbHMuZml4VGV4dEluZGVudCkoc3R5bGUpO1xuICByZXR1cm4gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIGNoZWNrU3R5bGUobm9kZSkge1xuICBpZiAoIW5vZGUuc3R5bGUpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIHJldHVybiBub2RlLnN0eWxlLnRyaW0oKS5zcGxpdCgvXFxzKjtcXHMqLykuZmlsdGVyKHMgPT4gISFzKS5tYXAocyA9PiBzLnNwbGl0KC9cXHMqOlxccyovLCAyKSkuZmlsdGVyKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICBpZiAoa2V5ID09PSBcImZvbnQtZmFtaWx5XCIpIHtcbiAgICAgIG5vZGVbX3hmYV9vYmplY3QuJGdsb2JhbERhdGFdLnVzZWRUeXBlZmFjZXMuYWRkKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVkFMSURfU1RZTEVTLmhhcyhrZXkpO1xuICB9KS5tYXAoa3YgPT4ga3Yuam9pbihcIjpcIikpLmpvaW4oXCI7XCIpO1xufVxuXG5jb25zdCBOb1doaXRlcyA9IG5ldyBTZXQoW1wiYm9keVwiLCBcImh0bWxcIl0pO1xuXG5jbGFzcyBYaHRtbE9iamVjdCBleHRlbmRzIF94ZmFfb2JqZWN0LlhtbE9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMsIG5hbWUpIHtcbiAgICBzdXBlcihYSFRNTF9OU19JRCwgbmFtZSk7XG4gICAgdGhpc1skcmljaFRleHRdID0gZmFsc2U7XG4gICAgdGhpcy5zdHlsZSA9IGF0dHJpYnV0ZXMuc3R5bGUgfHwgXCJcIjtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kY2xlYW5dKGJ1aWxkZXIpIHtcbiAgICBzdXBlcltfeGZhX29iamVjdC4kY2xlYW5dKGJ1aWxkZXIpO1xuXG4gICAgdGhpcy5zdHlsZSA9IGNoZWNrU3R5bGUodGhpcyk7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGFjY2VwdFdoaXRlc3BhY2VdKCkge1xuICAgIHJldHVybiAhTm9XaGl0ZXMuaGFzKHRoaXNbX3hmYV9vYmplY3QuJG5vZGVOYW1lXSk7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJG9uVGV4dF0oc3RyLCByaWNoVGV4dCA9IGZhbHNlKSB7XG4gICAgaWYgKCFyaWNoVGV4dCkge1xuICAgICAgc3RyID0gc3RyLnJlcGxhY2UoY3JsZlJlZ0V4cCwgXCJcIik7XG5cbiAgICAgIGlmICghdGhpcy5zdHlsZS5pbmNsdWRlcyhcInhmYS1zcGFjZXJ1bjp5ZXNcIikpIHtcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2Uoc3BhY2VzUmVnRXhwLCBcIiBcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNbJHJpY2hUZXh0XSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0cikge1xuICAgICAgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gKz0gc3RyO1xuICAgIH1cbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kcHVzaEdseXBoc10obWVhc3VyZSwgbXVzdFBvcCA9IHRydWUpIHtcbiAgICBjb25zdCB4ZmFGb250ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBjb25zdCBtYXJnaW4gPSB7XG4gICAgICB0b3A6IE5hTixcbiAgICAgIGJvdHRvbTogTmFOLFxuICAgICAgbGVmdDogTmFOLFxuICAgICAgcmlnaHQ6IE5hTlxuICAgIH07XG4gICAgbGV0IGxpbmVIZWlnaHQgPSBudWxsO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcy5zdHlsZS5zcGxpdChcIjtcIikubWFwKHMgPT4gcy5zcGxpdChcIjpcIiwgMikpKSB7XG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlIFwiZm9udC1mYW1pbHlcIjpcbiAgICAgICAgICB4ZmFGb250LnR5cGVmYWNlID0gKDAsIF91dGlscy5zdHJpcFF1b3RlcykodmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJmb250LXNpemVcIjpcbiAgICAgICAgICB4ZmFGb250LnNpemUgPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KSh2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImZvbnQtd2VpZ2h0XCI6XG4gICAgICAgICAgeGZhRm9udC53ZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiZm9udC1zdHlsZVwiOlxuICAgICAgICAgIHhmYUZvbnQucG9zdHVyZSA9IHZhbHVlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJsZXR0ZXItc3BhY2luZ1wiOlxuICAgICAgICAgIHhmYUZvbnQubGV0dGVyU3BhY2luZyA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwibWFyZ2luXCI6XG4gICAgICAgICAgY29uc3QgdmFsdWVzID0gdmFsdWUuc3BsaXQoLyBcXHQvKS5tYXAoeCA9PiAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KSh4KSk7XG5cbiAgICAgICAgICBzd2l0Y2ggKHZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgbWFyZ2luLnRvcCA9IG1hcmdpbi5ib3R0b20gPSBtYXJnaW4ubGVmdCA9IG1hcmdpbi5yaWdodCA9IHZhbHVlc1swXTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgbWFyZ2luLnRvcCA9IG1hcmdpbi5ib3R0b20gPSB2YWx1ZXNbMF07XG4gICAgICAgICAgICAgIG1hcmdpbi5sZWZ0ID0gbWFyZ2luLnJpZ2h0ID0gdmFsdWVzWzFdO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICBtYXJnaW4udG9wID0gdmFsdWVzWzBdO1xuICAgICAgICAgICAgICBtYXJnaW4uYm90dG9tID0gdmFsdWVzWzJdO1xuICAgICAgICAgICAgICBtYXJnaW4ubGVmdCA9IG1hcmdpbi5yaWdodCA9IHZhbHVlc1sxXTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgbWFyZ2luLnRvcCA9IHZhbHVlc1swXTtcbiAgICAgICAgICAgICAgbWFyZ2luLmxlZnQgPSB2YWx1ZXNbMV07XG4gICAgICAgICAgICAgIG1hcmdpbi5ib3R0b20gPSB2YWx1ZXNbMl07XG4gICAgICAgICAgICAgIG1hcmdpbi5yaWdodCA9IHZhbHVlc1szXTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIm1hcmdpbi10b3BcIjpcbiAgICAgICAgICBtYXJnaW4udG9wID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkodmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJtYXJnaW4tYm90dG9tXCI6XG4gICAgICAgICAgbWFyZ2luLmJvdHRvbSA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwibWFyZ2luLWxlZnRcIjpcbiAgICAgICAgICBtYXJnaW4ubGVmdCA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwibWFyZ2luLXJpZ2h0XCI6XG4gICAgICAgICAgbWFyZ2luLnJpZ2h0ID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkodmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJsaW5lLWhlaWdodFwiOlxuICAgICAgICAgIGxpbmVIZWlnaHQgPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KSh2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWVhc3VyZS5wdXNoRGF0YSh4ZmFGb250LCBtYXJnaW4sIGxpbmVIZWlnaHQpO1xuXG4gICAgaWYgKHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdKSB7XG4gICAgICBtZWFzdXJlLmFkZFN0cmluZyh0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpc1tfeGZhX29iamVjdC4kZ2V0Q2hpbGRyZW5dKCkpIHtcbiAgICAgICAgaWYgKGNoaWxkW194ZmFfb2JqZWN0LiRub2RlTmFtZV0gPT09IFwiI3RleHRcIikge1xuICAgICAgICAgIG1lYXN1cmUuYWRkU3RyaW5nKGNoaWxkW194ZmFfb2JqZWN0LiRjb250ZW50XSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZFtfeGZhX29iamVjdC4kcHVzaEdseXBoc10obWVhc3VyZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG11c3RQb3ApIHtcbiAgICAgIG1lYXN1cmUucG9wRm9udCgpO1xuICAgIH1cbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXShhdmFpbGFibGVTcGFjZSkge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gW107XG4gICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdID0ge1xuICAgICAgY2hpbGRyZW5cbiAgICB9O1xuXG4gICAgdGhpc1tfeGZhX29iamVjdC4kY2hpbGRyZW5Ub0hUTUxdKHt9KTtcblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDAgJiYgIXRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdKSB7XG4gICAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuRU1QVFk7XG4gICAgfVxuXG4gICAgbGV0IHZhbHVlO1xuXG4gICAgaWYgKHRoaXNbJHJpY2hUZXh0XSkge1xuICAgICAgdmFsdWUgPSB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSA/IHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdLnJlcGxhY2UoY3JsZkZvclJpY2hUZXh0UmVnRXhwLCBcIlxcblwiKSA6IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe1xuICAgICAgbmFtZTogdGhpc1tfeGZhX29iamVjdC4kbm9kZU5hbWVdLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBocmVmOiB0aGlzLmhyZWYsXG4gICAgICAgIHN0eWxlOiBtYXBTdHlsZSh0aGlzLnN0eWxlLCB0aGlzLCB0aGlzWyRyaWNoVGV4dF0pXG4gICAgICB9LFxuICAgICAgY2hpbGRyZW4sXG4gICAgICB2YWx1ZVxuICAgIH0pO1xuICB9XG5cbn1cblxuY2xhc3MgQSBleHRlbmRzIFhodG1sT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKGF0dHJpYnV0ZXMsIFwiYVwiKTtcbiAgICB0aGlzLmhyZWYgPSAoMCwgX2h0bWxfdXRpbHMuZml4VVJMKShhdHRyaWJ1dGVzLmhyZWYpIHx8IFwiXCI7XG4gIH1cblxufVxuXG5jbGFzcyBCIGV4dGVuZHMgWGh0bWxPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoYXR0cmlidXRlcywgXCJiXCIpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRwdXNoR2x5cGhzXShtZWFzdXJlKSB7XG4gICAgbWVhc3VyZS5wdXNoRm9udCh7XG4gICAgICB3ZWlnaHQ6IFwiYm9sZFwiXG4gICAgfSk7XG5cbiAgICBzdXBlcltfeGZhX29iamVjdC4kcHVzaEdseXBoc10obWVhc3VyZSk7XG5cbiAgICBtZWFzdXJlLnBvcEZvbnQoKTtcbiAgfVxuXG59XG5cbmNsYXNzIEJvZHkgZXh0ZW5kcyBYaHRtbE9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihhdHRyaWJ1dGVzLCBcImJvZHlcIik7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHtcbiAgICBjb25zdCByZXMgPSBzdXBlcltfeGZhX29iamVjdC4kdG9IVE1MXShhdmFpbGFibGVTcGFjZSk7XG5cbiAgICBjb25zdCB7XG4gICAgICBodG1sXG4gICAgfSA9IHJlcztcblxuICAgIGlmICghaHRtbCkge1xuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LkVNUFRZO1xuICAgIH1cblxuICAgIGh0bWwubmFtZSA9IFwiZGl2XCI7XG4gICAgaHRtbC5hdHRyaWJ1dGVzLmNsYXNzID0gW1wieGZhUmljaFwiXTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbn1cblxuY2xhc3MgQnIgZXh0ZW5kcyBYaHRtbE9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihhdHRyaWJ1dGVzLCBcImJyXCIpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0ZXh0XSgpIHtcbiAgICByZXR1cm4gXCJcXG5cIjtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kcHVzaEdseXBoc10obWVhc3VyZSkge1xuICAgIG1lYXN1cmUuYWRkU3RyaW5nKFwiXFxuXCIpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe1xuICAgICAgbmFtZTogXCJiclwiXG4gICAgfSk7XG4gIH1cblxufVxuXG5jbGFzcyBIdG1sIGV4dGVuZHMgWGh0bWxPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoYXR0cmlidXRlcywgXCJodG1sXCIpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBbXTtcbiAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0gPSB7XG4gICAgICBjaGlsZHJlblxuICAgIH07XG5cbiAgICB0aGlzW194ZmFfb2JqZWN0LiRjaGlsZHJlblRvSFRNTF0oe30pO1xuXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe1xuICAgICAgICBuYW1lOiBcImRpdlwiLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgY2xhc3M6IFtcInhmYVJpY2hcIl0sXG4gICAgICAgICAgc3R5bGU6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlOiB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSB8fCBcIlwiXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuWzBdO1xuXG4gICAgICBpZiAoY2hpbGQuYXR0cmlidXRlcyAmJiBjaGlsZC5hdHRyaWJ1dGVzLmNsYXNzLmluY2x1ZGVzKFwieGZhUmljaFwiKSkge1xuICAgICAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2VzcyhjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe1xuICAgICAgbmFtZTogXCJkaXZcIixcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2xhc3M6IFtcInhmYVJpY2hcIl0sXG4gICAgICAgIHN0eWxlOiB7fVxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuXG4gICAgfSk7XG4gIH1cblxufVxuXG5jbGFzcyBJIGV4dGVuZHMgWGh0bWxPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoYXR0cmlidXRlcywgXCJpXCIpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRwdXNoR2x5cGhzXShtZWFzdXJlKSB7XG4gICAgbWVhc3VyZS5wdXNoRm9udCh7XG4gICAgICBwb3N0dXJlOiBcIml0YWxpY1wiXG4gICAgfSk7XG5cbiAgICBzdXBlcltfeGZhX29iamVjdC4kcHVzaEdseXBoc10obWVhc3VyZSk7XG5cbiAgICBtZWFzdXJlLnBvcEZvbnQoKTtcbiAgfVxuXG59XG5cbmNsYXNzIExpIGV4dGVuZHMgWGh0bWxPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoYXR0cmlidXRlcywgXCJsaVwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIE9sIGV4dGVuZHMgWGh0bWxPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoYXR0cmlidXRlcywgXCJvbFwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIFAgZXh0ZW5kcyBYaHRtbE9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihhdHRyaWJ1dGVzLCBcInBcIik7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHB1c2hHbHlwaHNdKG1lYXN1cmUpIHtcbiAgICBzdXBlcltfeGZhX29iamVjdC4kcHVzaEdseXBoc10obWVhc3VyZSwgZmFsc2UpO1xuXG4gICAgbWVhc3VyZS5hZGRTdHJpbmcoXCJcXG5cIik7XG4gICAgbWVhc3VyZS5hZGRQYXJhKCk7XG4gICAgbWVhc3VyZS5wb3BGb250KCk7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRleHRdKCkge1xuICAgIGNvbnN0IHNpYmxpbmdzID0gdGhpc1tfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpW194ZmFfb2JqZWN0LiRnZXRDaGlsZHJlbl0oKTtcblxuICAgIGlmIChzaWJsaW5nc1tzaWJsaW5ncy5sZW5ndGggLSAxXSA9PT0gdGhpcykge1xuICAgICAgcmV0dXJuIHN1cGVyW194ZmFfb2JqZWN0LiR0ZXh0XSgpO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlcltfeGZhX29iamVjdC4kdGV4dF0oKSArIFwiXFxuXCI7XG4gIH1cblxufVxuXG5jbGFzcyBTcGFuIGV4dGVuZHMgWGh0bWxPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoYXR0cmlidXRlcywgXCJzcGFuXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgU3ViIGV4dGVuZHMgWGh0bWxPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoYXR0cmlidXRlcywgXCJzdWJcIik7XG4gIH1cblxufVxuXG5jbGFzcyBTdXAgZXh0ZW5kcyBYaHRtbE9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihhdHRyaWJ1dGVzLCBcInN1cFwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIFVsIGV4dGVuZHMgWGh0bWxPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoYXR0cmlidXRlcywgXCJ1bFwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIFhodG1sTmFtZXNwYWNlIHtcbiAgc3RhdGljIFtfbmFtZXNwYWNlcy4kYnVpbGRYRkFPYmplY3RdKG5hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgICBpZiAoWGh0bWxOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIHJldHVybiBYaHRtbE5hbWVzcGFjZVtuYW1lXShhdHRyaWJ1dGVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgc3RhdGljIGEoYXR0cmlidXRlcykge1xuICAgIHJldHVybiBuZXcgQShhdHRyaWJ1dGVzKTtcbiAgfVxuXG4gIHN0YXRpYyBiKGF0dHJpYnV0ZXMpIHtcbiAgICByZXR1cm4gbmV3IEIoYXR0cmlidXRlcyk7XG4gIH1cblxuICBzdGF0aWMgYm9keShhdHRyaWJ1dGVzKSB7XG4gICAgcmV0dXJuIG5ldyBCb2R5KGF0dHJpYnV0ZXMpO1xuICB9XG5cbiAgc3RhdGljIGJyKGF0dHJpYnV0ZXMpIHtcbiAgICByZXR1cm4gbmV3IEJyKGF0dHJpYnV0ZXMpO1xuICB9XG5cbiAgc3RhdGljIGh0bWwoYXR0cmlidXRlcykge1xuICAgIHJldHVybiBuZXcgSHRtbChhdHRyaWJ1dGVzKTtcbiAgfVxuXG4gIHN0YXRpYyBpKGF0dHJpYnV0ZXMpIHtcbiAgICByZXR1cm4gbmV3IEkoYXR0cmlidXRlcyk7XG4gIH1cblxuICBzdGF0aWMgbGkoYXR0cmlidXRlcykge1xuICAgIHJldHVybiBuZXcgTGkoYXR0cmlidXRlcyk7XG4gIH1cblxuICBzdGF0aWMgb2woYXR0cmlidXRlcykge1xuICAgIHJldHVybiBuZXcgT2woYXR0cmlidXRlcyk7XG4gIH1cblxuICBzdGF0aWMgcChhdHRyaWJ1dGVzKSB7XG4gICAgcmV0dXJuIG5ldyBQKGF0dHJpYnV0ZXMpO1xuICB9XG5cbiAgc3RhdGljIHNwYW4oYXR0cmlidXRlcykge1xuICAgIHJldHVybiBuZXcgU3BhbihhdHRyaWJ1dGVzKTtcbiAgfVxuXG4gIHN0YXRpYyBzdWIoYXR0cmlidXRlcykge1xuICAgIHJldHVybiBuZXcgU3ViKGF0dHJpYnV0ZXMpO1xuICB9XG5cbiAgc3RhdGljIHN1cChhdHRyaWJ1dGVzKSB7XG4gICAgcmV0dXJuIG5ldyBTdXAoYXR0cmlidXRlcyk7XG4gIH1cblxuICBzdGF0aWMgdWwoYXR0cmlidXRlcykge1xuICAgIHJldHVybiBuZXcgVWwoYXR0cmlidXRlcyk7XG4gIH1cblxufVxuXG5leHBvcnRzLlhodG1sTmFtZXNwYWNlID0gWGh0bWxOYW1lc3BhY2U7XG5cbi8qKiovIH0pLFxuLyogOTcgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuVW5rbm93bk5hbWVzcGFjZSA9IHZvaWQgMDtcblxudmFyIF9uYW1lc3BhY2VzID0gX193X3BkZmpzX3JlcXVpcmVfXyg3Nyk7XG5cbnZhciBfeGZhX29iamVjdCA9IF9fd19wZGZqc19yZXF1aXJlX18oNzUpO1xuXG5jbGFzcyBVbmtub3duTmFtZXNwYWNlIHtcbiAgY29uc3RydWN0b3IobnNJZCkge1xuICAgIHRoaXMubmFtZXNwYWNlSWQgPSBuc0lkO1xuICB9XG5cbiAgW19uYW1lc3BhY2VzLiRidWlsZFhGQU9iamVjdF0obmFtZSwgYXR0cmlidXRlcykge1xuICAgIHJldHVybiBuZXcgX3hmYV9vYmplY3QuWG1sT2JqZWN0KHRoaXMubmFtZXNwYWNlSWQsIG5hbWUsIGF0dHJpYnV0ZXMpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Vbmtub3duTmFtZXNwYWNlID0gVW5rbm93bk5hbWVzcGFjZTtcblxuLyoqKi8gfSksXG4vKiA5OCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5YUmVmID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG52YXIgX3BhcnNlciA9IF9fd19wZGZqc19yZXF1aXJlX18oMjcpO1xuXG52YXIgX2Jhc2Vfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXyg2KTtcblxudmFyIF9jcnlwdG8gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDcyKTtcblxuY2xhc3MgWFJlZiB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSwgcGRmTWFuYWdlcikge1xuICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMucGRmTWFuYWdlciA9IHBkZk1hbmFnZXI7XG4gICAgdGhpcy5lbnRyaWVzID0gW107XG4gICAgdGhpcy54cmVmc3RtcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5fY2FjaGVNYXAgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5fcGVuZGluZ1JlZnMgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0KCk7XG4gICAgdGhpcy5zdGF0cyA9IG5ldyBfY29yZV91dGlscy5Eb2NTdGF0cyhwZGZNYW5hZ2VyLm1zZ0hhbmRsZXIpO1xuICAgIHRoaXMuX25ld1JlZk51bSA9IG51bGw7XG4gIH1cblxuICBnZXROZXdSZWYoKSB7XG4gICAgaWYgKHRoaXMuX25ld1JlZk51bSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fbmV3UmVmTnVtID0gdGhpcy5lbnRyaWVzLmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gX3ByaW1pdGl2ZXMuUmVmLmdldCh0aGlzLl9uZXdSZWZOdW0rKywgMCk7XG4gIH1cblxuICByZXNldE5ld1JlZigpIHtcbiAgICB0aGlzLl9uZXdSZWZOdW0gPSBudWxsO1xuICB9XG5cbiAgc2V0U3RhcnRYUmVmKHN0YXJ0WFJlZikge1xuICAgIHRoaXMuc3RhcnRYUmVmUXVldWUgPSBbc3RhcnRYUmVmXTtcbiAgfVxuXG4gIHBhcnNlKHJlY292ZXJ5TW9kZSA9IGZhbHNlKSB7XG4gICAgbGV0IHRyYWlsZXJEaWN0O1xuXG4gICAgaWYgKCFyZWNvdmVyeU1vZGUpIHtcbiAgICAgIHRyYWlsZXJEaWN0ID0gdGhpcy5yZWFkWFJlZigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJJbmRleGluZyBhbGwgUERGIG9iamVjdHNcIik7XG4gICAgICB0cmFpbGVyRGljdCA9IHRoaXMuaW5kZXhPYmplY3RzKCk7XG4gICAgfVxuXG4gICAgdHJhaWxlckRpY3QuYXNzaWduWHJlZih0aGlzKTtcbiAgICB0aGlzLnRyYWlsZXIgPSB0cmFpbGVyRGljdDtcbiAgICBsZXQgZW5jcnlwdDtcblxuICAgIHRyeSB7XG4gICAgICBlbmNyeXB0ID0gdHJhaWxlckRpY3QuZ2V0KFwiRW5jcnlwdFwiKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZXg7XG4gICAgICB9XG5cbiAgICAgICgwLCBfdXRpbC53YXJuKShgWFJlZi5wYXJzZSAtIEludmFsaWQgXCJFbmNyeXB0XCIgcmVmZXJlbmNlOiBcIiR7ZXh9XCIuYCk7XG4gICAgfVxuXG4gICAgaWYgKGVuY3J5cHQgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSB7XG4gICAgICBjb25zdCBpZHMgPSB0cmFpbGVyRGljdC5nZXQoXCJJRFwiKTtcbiAgICAgIGNvbnN0IGZpbGVJZCA9IGlkcyAmJiBpZHMubGVuZ3RoID8gaWRzWzBdIDogXCJcIjtcbiAgICAgIGVuY3J5cHQuc3VwcHJlc3NFbmNyeXB0aW9uID0gdHJ1ZTtcbiAgICAgIHRoaXMuZW5jcnlwdCA9IG5ldyBfY3J5cHRvLkNpcGhlclRyYW5zZm9ybUZhY3RvcnkoZW5jcnlwdCwgZmlsZUlkLCB0aGlzLnBkZk1hbmFnZXIucGFzc3dvcmQpO1xuICAgIH1cblxuICAgIGxldCByb290O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJvb3QgPSB0cmFpbGVyRGljdC5nZXQoXCJSb290XCIpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLndhcm4pKGBYUmVmLnBhcnNlIC0gSW52YWxpZCBcIlJvb3RcIiByZWZlcmVuY2U6IFwiJHtleH1cIi5gKTtcbiAgICB9XG5cbiAgICBpZiAocm9vdCBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhZ2VzID0gcm9vdC5nZXQoXCJQYWdlc1wiKTtcblxuICAgICAgICBpZiAocGFnZXMgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSB7XG4gICAgICAgICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgIH1cblxuICAgICAgICAoMCwgX3V0aWwud2FybikoYFhSZWYucGFyc2UgLSBJbnZhbGlkIFwiUGFnZXNcIiByZWZlcmVuY2U6IFwiJHtleH1cIi5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXJlY292ZXJ5TW9kZSkge1xuICAgICAgdGhyb3cgbmV3IF9jb3JlX3V0aWxzLlhSZWZQYXJzZUV4Y2VwdGlvbigpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBfdXRpbC5JbnZhbGlkUERGRXhjZXB0aW9uKFwiSW52YWxpZCBSb290IHJlZmVyZW5jZS5cIik7XG4gIH1cblxuICBwcm9jZXNzWFJlZlRhYmxlKHBhcnNlcikge1xuICAgIGlmICghKFwidGFibGVTdGF0ZVwiIGluIHRoaXMpKSB7XG4gICAgICB0aGlzLnRhYmxlU3RhdGUgPSB7XG4gICAgICAgIGVudHJ5TnVtOiAwLFxuICAgICAgICBzdHJlYW1Qb3M6IHBhcnNlci5sZXhlci5zdHJlYW0ucG9zLFxuICAgICAgICBwYXJzZXJCdWYxOiBwYXJzZXIuYnVmMSxcbiAgICAgICAgcGFyc2VyQnVmMjogcGFyc2VyLmJ1ZjJcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgb2JqID0gdGhpcy5yZWFkWFJlZlRhYmxlKHBhcnNlcik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCBcInRyYWlsZXJcIikpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgWFJlZiB0YWJsZTogY291bGQgbm90IGZpbmQgdHJhaWxlciBkaWN0aW9uYXJ5XCIpO1xuICAgIH1cblxuICAgIGxldCBkaWN0ID0gcGFyc2VyLmdldE9iaigpO1xuXG4gICAgaWYgKCEoZGljdCBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpICYmIGRpY3QuZGljdCkge1xuICAgICAgZGljdCA9IGRpY3QuZGljdDtcbiAgICB9XG5cbiAgICBpZiAoIShkaWN0IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgWFJlZiB0YWJsZTogY291bGQgbm90IHBhcnNlIHRyYWlsZXIgZGljdGlvbmFyeVwiKTtcbiAgICB9XG5cbiAgICBkZWxldGUgdGhpcy50YWJsZVN0YXRlO1xuICAgIHJldHVybiBkaWN0O1xuICB9XG5cbiAgcmVhZFhSZWZUYWJsZShwYXJzZXIpIHtcbiAgICBjb25zdCBzdHJlYW0gPSBwYXJzZXIubGV4ZXIuc3RyZWFtO1xuICAgIGNvbnN0IHRhYmxlU3RhdGUgPSB0aGlzLnRhYmxlU3RhdGU7XG4gICAgc3RyZWFtLnBvcyA9IHRhYmxlU3RhdGUuc3RyZWFtUG9zO1xuICAgIHBhcnNlci5idWYxID0gdGFibGVTdGF0ZS5wYXJzZXJCdWYxO1xuICAgIHBhcnNlci5idWYyID0gdGFibGVTdGF0ZS5wYXJzZXJCdWYyO1xuICAgIGxldCBvYmo7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKCEoXCJmaXJzdEVudHJ5TnVtXCIgaW4gdGFibGVTdGF0ZSkgfHwgIShcImVudHJ5Q291bnRcIiBpbiB0YWJsZVN0YXRlKSkge1xuICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmogPSBwYXJzZXIuZ2V0T2JqKCksIFwidHJhaWxlclwiKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFibGVTdGF0ZS5maXJzdEVudHJ5TnVtID0gb2JqO1xuICAgICAgICB0YWJsZVN0YXRlLmVudHJ5Q291bnQgPSBwYXJzZXIuZ2V0T2JqKCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBmaXJzdCA9IHRhYmxlU3RhdGUuZmlyc3RFbnRyeU51bTtcbiAgICAgIGNvbnN0IGNvdW50ID0gdGFibGVTdGF0ZS5lbnRyeUNvdW50O1xuXG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoZmlyc3QpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGNvdW50KSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIFhSZWYgdGFibGU6IHdyb25nIHR5cGVzIGluIHN1YnNlY3Rpb24gaGVhZGVyXCIpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gdGFibGVTdGF0ZS5lbnRyeU51bTsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgdGFibGVTdGF0ZS5zdHJlYW1Qb3MgPSBzdHJlYW0ucG9zO1xuICAgICAgICB0YWJsZVN0YXRlLmVudHJ5TnVtID0gaTtcbiAgICAgICAgdGFibGVTdGF0ZS5wYXJzZXJCdWYxID0gcGFyc2VyLmJ1ZjE7XG4gICAgICAgIHRhYmxlU3RhdGUucGFyc2VyQnVmMiA9IHBhcnNlci5idWYyO1xuICAgICAgICBjb25zdCBlbnRyeSA9IHt9O1xuICAgICAgICBlbnRyeS5vZmZzZXQgPSBwYXJzZXIuZ2V0T2JqKCk7XG4gICAgICAgIGVudHJ5LmdlbiA9IHBhcnNlci5nZXRPYmooKTtcbiAgICAgICAgY29uc3QgdHlwZSA9IHBhcnNlci5nZXRPYmooKTtcblxuICAgICAgICBpZiAodHlwZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkNtZCkge1xuICAgICAgICAgIHN3aXRjaCAodHlwZS5jbWQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJmXCI6XG4gICAgICAgICAgICAgIGVudHJ5LmZyZWUgPSB0cnVlO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcIm5cIjpcbiAgICAgICAgICAgICAgZW50cnkudW5jb21wcmVzc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGVudHJ5Lm9mZnNldCkgfHwgIU51bWJlci5pc0ludGVnZXIoZW50cnkuZ2VuKSB8fCAhKGVudHJ5LmZyZWUgfHwgZW50cnkudW5jb21wcmVzc2VkKSkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSW52YWxpZCBlbnRyeSBpbiBYUmVmIHN1YnNlY3Rpb246ICR7Zmlyc3R9LCAke2NvdW50fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGkgPT09IDAgJiYgZW50cnkuZnJlZSAmJiBmaXJzdCA9PT0gMSkge1xuICAgICAgICAgIGZpcnN0ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5lbnRyaWVzW2kgKyBmaXJzdF0pIHtcbiAgICAgICAgICB0aGlzLmVudHJpZXNbaSArIGZpcnN0XSA9IGVudHJ5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRhYmxlU3RhdGUuZW50cnlOdW0gPSAwO1xuICAgICAgdGFibGVTdGF0ZS5zdHJlYW1Qb3MgPSBzdHJlYW0ucG9zO1xuICAgICAgdGFibGVTdGF0ZS5wYXJzZXJCdWYxID0gcGFyc2VyLmJ1ZjE7XG4gICAgICB0YWJsZVN0YXRlLnBhcnNlckJ1ZjIgPSBwYXJzZXIuYnVmMjtcbiAgICAgIGRlbGV0ZSB0YWJsZVN0YXRlLmZpcnN0RW50cnlOdW07XG4gICAgICBkZWxldGUgdGFibGVTdGF0ZS5lbnRyeUNvdW50O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVudHJpZXNbMF0gJiYgIXRoaXMuZW50cmllc1swXS5mcmVlKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIFhSZWYgdGFibGU6IHVuZXhwZWN0ZWQgZmlyc3Qgb2JqZWN0XCIpO1xuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBwcm9jZXNzWFJlZlN0cmVhbShzdHJlYW0pIHtcbiAgICBpZiAoIShcInN0cmVhbVN0YXRlXCIgaW4gdGhpcykpIHtcbiAgICAgIGNvbnN0IHN0cmVhbVBhcmFtZXRlcnMgPSBzdHJlYW0uZGljdDtcbiAgICAgIGNvbnN0IGJ5dGVXaWR0aHMgPSBzdHJlYW1QYXJhbWV0ZXJzLmdldChcIldcIik7XG4gICAgICBsZXQgcmFuZ2UgPSBzdHJlYW1QYXJhbWV0ZXJzLmdldChcIkluZGV4XCIpO1xuXG4gICAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgIHJhbmdlID0gWzAsIHN0cmVhbVBhcmFtZXRlcnMuZ2V0KFwiU2l6ZVwiKV07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RyZWFtU3RhdGUgPSB7XG4gICAgICAgIGVudHJ5UmFuZ2VzOiByYW5nZSxcbiAgICAgICAgYnl0ZVdpZHRocyxcbiAgICAgICAgZW50cnlOdW06IDAsXG4gICAgICAgIHN0cmVhbVBvczogc3RyZWFtLnBvc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLnJlYWRYUmVmU3RyZWFtKHN0cmVhbSk7XG4gICAgZGVsZXRlIHRoaXMuc3RyZWFtU3RhdGU7XG4gICAgcmV0dXJuIHN0cmVhbS5kaWN0O1xuICB9XG5cbiAgcmVhZFhSZWZTdHJlYW0oc3RyZWFtKSB7XG4gICAgY29uc3Qgc3RyZWFtU3RhdGUgPSB0aGlzLnN0cmVhbVN0YXRlO1xuICAgIHN0cmVhbS5wb3MgPSBzdHJlYW1TdGF0ZS5zdHJlYW1Qb3M7XG4gICAgY29uc3QgW3R5cGVGaWVsZFdpZHRoLCBvZmZzZXRGaWVsZFdpZHRoLCBnZW5lcmF0aW9uRmllbGRXaWR0aF0gPSBzdHJlYW1TdGF0ZS5ieXRlV2lkdGhzO1xuICAgIGNvbnN0IGVudHJ5UmFuZ2VzID0gc3RyZWFtU3RhdGUuZW50cnlSYW5nZXM7XG5cbiAgICB3aGlsZSAoZW50cnlSYW5nZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgW2ZpcnN0LCBuXSA9IGVudHJ5UmFuZ2VzO1xuXG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoZmlyc3QpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG4pKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSW52YWxpZCBYUmVmIHJhbmdlIGZpZWxkczogJHtmaXJzdH0sICR7bn1gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHR5cGVGaWVsZFdpZHRoKSB8fCAhTnVtYmVyLmlzSW50ZWdlcihvZmZzZXRGaWVsZFdpZHRoKSB8fCAhTnVtYmVyLmlzSW50ZWdlcihnZW5lcmF0aW9uRmllbGRXaWR0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIFhSZWYgZW50cnkgZmllbGRzIGxlbmd0aDogJHtmaXJzdH0sICR7bn1gKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IHN0cmVhbVN0YXRlLmVudHJ5TnVtOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIHN0cmVhbVN0YXRlLmVudHJ5TnVtID0gaTtcbiAgICAgICAgc3RyZWFtU3RhdGUuc3RyZWFtUG9zID0gc3RyZWFtLnBvcztcbiAgICAgICAgbGV0IHR5cGUgPSAwLFxuICAgICAgICAgICAgb2Zmc2V0ID0gMCxcbiAgICAgICAgICAgIGdlbmVyYXRpb24gPSAwO1xuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdHlwZUZpZWxkV2lkdGg7ICsraikge1xuICAgICAgICAgIGNvbnN0IHR5cGVCeXRlID0gc3RyZWFtLmdldEJ5dGUoKTtcblxuICAgICAgICAgIGlmICh0eXBlQnl0ZSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgWFJlZiBieXRlV2lkdGhzICd0eXBlJy5cIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHlwZSA9IHR5cGUgPDwgOCB8IHR5cGVCeXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVGaWVsZFdpZHRoID09PSAwKSB7XG4gICAgICAgICAgdHlwZSA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG9mZnNldEZpZWxkV2lkdGg7ICsraikge1xuICAgICAgICAgIGNvbnN0IG9mZnNldEJ5dGUgPSBzdHJlYW0uZ2V0Qnl0ZSgpO1xuXG4gICAgICAgICAgaWYgKG9mZnNldEJ5dGUgPT09IC0xKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIFhSZWYgYnl0ZVdpZHRocyAnb2Zmc2V0Jy5cIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0IDw8IDggfCBvZmZzZXRCeXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBnZW5lcmF0aW9uRmllbGRXaWR0aDsgKytqKSB7XG4gICAgICAgICAgY29uc3QgZ2VuZXJhdGlvbkJ5dGUgPSBzdHJlYW0uZ2V0Qnl0ZSgpO1xuXG4gICAgICAgICAgaWYgKGdlbmVyYXRpb25CeXRlID09PSAtMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSW52YWxpZCBYUmVmIGJ5dGVXaWR0aHMgJ2dlbmVyYXRpb24nLlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBnZW5lcmF0aW9uID0gZ2VuZXJhdGlvbiA8PCA4IHwgZ2VuZXJhdGlvbkJ5dGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbnRyeSA9IHt9O1xuICAgICAgICBlbnRyeS5vZmZzZXQgPSBvZmZzZXQ7XG4gICAgICAgIGVudHJ5LmdlbiA9IGdlbmVyYXRpb247XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgZW50cnkuZnJlZSA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGVudHJ5LnVuY29tcHJlc3NlZCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSW52YWxpZCBYUmVmIGVudHJ5IHR5cGU6ICR7dHlwZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5lbnRyaWVzW2ZpcnN0ICsgaV0pIHtcbiAgICAgICAgICB0aGlzLmVudHJpZXNbZmlyc3QgKyBpXSA9IGVudHJ5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0cmVhbVN0YXRlLmVudHJ5TnVtID0gMDtcbiAgICAgIHN0cmVhbVN0YXRlLnN0cmVhbVBvcyA9IHN0cmVhbS5wb3M7XG4gICAgICBlbnRyeVJhbmdlcy5zcGxpY2UoMCwgMik7XG4gICAgfVxuICB9XG5cbiAgaW5kZXhPYmplY3RzKCkge1xuICAgIGNvbnN0IFRBQiA9IDB4OSxcbiAgICAgICAgICBMRiA9IDB4YSxcbiAgICAgICAgICBDUiA9IDB4ZCxcbiAgICAgICAgICBTUEFDRSA9IDB4MjA7XG4gICAgY29uc3QgUEVSQ0VOVCA9IDB4MjUsXG4gICAgICAgICAgTFQgPSAweDNjO1xuXG4gICAgZnVuY3Rpb24gcmVhZFRva2VuKGRhdGEsIG9mZnNldCkge1xuICAgICAgbGV0IHRva2VuID0gXCJcIixcbiAgICAgICAgICBjaCA9IGRhdGFbb2Zmc2V0XTtcblxuICAgICAgd2hpbGUgKGNoICE9PSBMRiAmJiBjaCAhPT0gQ1IgJiYgY2ggIT09IExUKSB7XG4gICAgICAgIGlmICgrK29mZnNldCA+PSBkYXRhLmxlbmd0aCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdG9rZW4gKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgICAgIGNoID0gZGF0YVtvZmZzZXRdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdG9rZW47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2tpcFVudGlsKGRhdGEsIG9mZnNldCwgd2hhdCkge1xuICAgICAgY29uc3QgbGVuZ3RoID0gd2hhdC5sZW5ndGgsXG4gICAgICAgICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgICBsZXQgc2tpcHBlZCA9IDA7XG5cbiAgICAgIHdoaWxlIChvZmZzZXQgPCBkYXRhTGVuZ3RoKSB7XG4gICAgICAgIGxldCBpID0gMDtcblxuICAgICAgICB3aGlsZSAoaSA8IGxlbmd0aCAmJiBkYXRhW29mZnNldCArIGldID09PSB3aGF0W2ldKSB7XG4gICAgICAgICAgKytpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGkgPj0gbGVuZ3RoKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBvZmZzZXQrKztcbiAgICAgICAgc2tpcHBlZCsrO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2tpcHBlZDtcbiAgICB9XG5cbiAgICBjb25zdCBvYmpSZWdFeHAgPSAvXihcXGQrKVxccysoXFxkKylcXHMrb2JqXFxiLztcbiAgICBjb25zdCBlbmRvYmpSZWdFeHAgPSAvXFxiZW5kb2JqW1xcYlxcc10kLztcbiAgICBjb25zdCBuZXN0ZWRPYmpSZWdFeHAgPSAvXFxzKyhcXGQrXFxzK1xcZCtcXHMrb2JqW1xcYlxcczxdKSQvO1xuICAgIGNvbnN0IENIRUNLX0NPTlRFTlRfTEVOR1RIID0gMjU7XG4gICAgY29uc3QgdHJhaWxlckJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoWzExNiwgMTE0LCA5NywgMTA1LCAxMDgsIDEwMSwgMTE0XSk7XG4gICAgY29uc3Qgc3RhcnR4cmVmQnl0ZXMgPSBuZXcgVWludDhBcnJheShbMTE1LCAxMTYsIDk3LCAxMTQsIDExNiwgMTIwLCAxMTQsIDEwMSwgMTAyXSk7XG4gICAgY29uc3Qgb2JqQnl0ZXMgPSBuZXcgVWludDhBcnJheShbMTExLCA5OCwgMTA2XSk7XG4gICAgY29uc3QgeHJlZkJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoWzQ3LCA4OCwgODIsIDEwMSwgMTAyXSk7XG4gICAgdGhpcy5lbnRyaWVzLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9jYWNoZU1hcC5jbGVhcigpO1xuXG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW07XG4gICAgc3RyZWFtLnBvcyA9IDA7XG4gICAgY29uc3QgYnVmZmVyID0gc3RyZWFtLmdldEJ5dGVzKCksXG4gICAgICAgICAgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aDtcbiAgICBsZXQgcG9zaXRpb24gPSBzdHJlYW0uc3RhcnQ7XG4gICAgY29uc3QgdHJhaWxlcnMgPSBbXSxcbiAgICAgICAgICB4cmVmU3RtcyA9IFtdO1xuXG4gICAgd2hpbGUgKHBvc2l0aW9uIDwgbGVuZ3RoKSB7XG4gICAgICBsZXQgY2ggPSBidWZmZXJbcG9zaXRpb25dO1xuXG4gICAgICBpZiAoY2ggPT09IFRBQiB8fCBjaCA9PT0gTEYgfHwgY2ggPT09IENSIHx8IGNoID09PSBTUEFDRSkge1xuICAgICAgICArK3Bvc2l0aW9uO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoID09PSBQRVJDRU5UKSB7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICArK3Bvc2l0aW9uO1xuXG4gICAgICAgICAgaWYgKHBvc2l0aW9uID49IGxlbmd0aCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2ggPSBidWZmZXJbcG9zaXRpb25dO1xuICAgICAgICB9IHdoaWxlIChjaCAhPT0gTEYgJiYgY2ggIT09IENSKTtcblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdG9rZW4gPSByZWFkVG9rZW4oYnVmZmVyLCBwb3NpdGlvbik7XG4gICAgICBsZXQgbTtcblxuICAgICAgaWYgKHRva2VuLnN0YXJ0c1dpdGgoXCJ4cmVmXCIpICYmICh0b2tlbi5sZW5ndGggPT09IDQgfHwgL1xccy8udGVzdCh0b2tlbls0XSkpKSB7XG4gICAgICAgIHBvc2l0aW9uICs9IHNraXBVbnRpbChidWZmZXIsIHBvc2l0aW9uLCB0cmFpbGVyQnl0ZXMpO1xuICAgICAgICB0cmFpbGVycy5wdXNoKHBvc2l0aW9uKTtcbiAgICAgICAgcG9zaXRpb24gKz0gc2tpcFVudGlsKGJ1ZmZlciwgcG9zaXRpb24sIHN0YXJ0eHJlZkJ5dGVzKTtcbiAgICAgIH0gZWxzZSBpZiAobSA9IG9ialJlZ0V4cC5leGVjKHRva2VuKSkge1xuICAgICAgICBjb25zdCBudW0gPSBtWzFdIHwgMCxcbiAgICAgICAgICAgICAgZ2VuID0gbVsyXSB8IDA7XG4gICAgICAgIGxldCBjb250ZW50TGVuZ3RoLFxuICAgICAgICAgICAgc3RhcnRQb3MgPSBwb3NpdGlvbiArIHRva2VuLmxlbmd0aCxcbiAgICAgICAgICAgIHVwZGF0ZUVudHJpZXMgPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXRoaXMuZW50cmllc1tudW1dKSB7XG4gICAgICAgICAgdXBkYXRlRW50cmllcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5lbnRyaWVzW251bV0uZ2VuID09PSBnZW4pIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IF9wYXJzZXIuUGFyc2VyKHtcbiAgICAgICAgICAgICAgbGV4ZXI6IG5ldyBfcGFyc2VyLkxleGVyKHN0cmVhbS5tYWtlU3ViU3RyZWFtKHN0YXJ0UG9zKSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGFyc2VyLmdldE9iaigpO1xuICAgICAgICAgICAgdXBkYXRlRW50cmllcyA9IHRydWU7XG4gICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLlBhcnNlckVPRkV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYGluZGV4T2JqZWN0cyAtLSBjaGVja2luZyBvYmplY3QgKCR7dG9rZW59KTogXCIke2V4fVwiLmApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdXBkYXRlRW50cmllcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVwZGF0ZUVudHJpZXMpIHtcbiAgICAgICAgICB0aGlzLmVudHJpZXNbbnVtXSA9IHtcbiAgICAgICAgICAgIG9mZnNldDogcG9zaXRpb24gLSBzdHJlYW0uc3RhcnQsXG4gICAgICAgICAgICBnZW4sXG4gICAgICAgICAgICB1bmNvbXByZXNzZWQ6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKHN0YXJ0UG9zIDwgYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IGVuZFBvcyA9IHN0YXJ0UG9zICsgc2tpcFVudGlsKGJ1ZmZlciwgc3RhcnRQb3MsIG9iakJ5dGVzKSArIDQ7XG4gICAgICAgICAgY29udGVudExlbmd0aCA9IGVuZFBvcyAtIHBvc2l0aW9uO1xuICAgICAgICAgIGNvbnN0IGNoZWNrUG9zID0gTWF0aC5tYXgoZW5kUG9zIC0gQ0hFQ0tfQ09OVEVOVF9MRU5HVEgsIHN0YXJ0UG9zKTtcbiAgICAgICAgICBjb25zdCB0b2tlblN0ciA9ICgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKShidWZmZXIuc3ViYXJyYXkoY2hlY2tQb3MsIGVuZFBvcykpO1xuXG4gICAgICAgICAgaWYgKGVuZG9ialJlZ0V4cC50ZXN0KHRva2VuU3RyKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG9ialRva2VuID0gbmVzdGVkT2JqUmVnRXhwLmV4ZWModG9rZW5TdHIpO1xuXG4gICAgICAgICAgICBpZiAob2JqVG9rZW4gJiYgb2JqVG9rZW5bMV0pIHtcbiAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdpbmRleE9iamVjdHM6IEZvdW5kIG5ldyBcIm9ialwiIGluc2lkZSBvZiBhbm90aGVyIFwib2JqXCIsICcgKyAnY2F1c2VkIGJ5IG1pc3NpbmcgXCJlbmRvYmpcIiAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKTtcbiAgICAgICAgICAgICAgY29udGVudExlbmd0aCAtPSBvYmpUb2tlblsxXS5sZW5ndGg7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGVudCA9IGJ1ZmZlci5zdWJhcnJheShwb3NpdGlvbiwgcG9zaXRpb24gKyBjb250ZW50TGVuZ3RoKTtcbiAgICAgICAgY29uc3QgeHJlZlRhZ09mZnNldCA9IHNraXBVbnRpbChjb250ZW50LCAwLCB4cmVmQnl0ZXMpO1xuXG4gICAgICAgIGlmICh4cmVmVGFnT2Zmc2V0IDwgY29udGVudExlbmd0aCAmJiBjb250ZW50W3hyZWZUYWdPZmZzZXQgKyA1XSA8IDY0KSB7XG4gICAgICAgICAgeHJlZlN0bXMucHVzaChwb3NpdGlvbiAtIHN0cmVhbS5zdGFydCk7XG4gICAgICAgICAgdGhpcy54cmVmc3Rtc1twb3NpdGlvbiAtIHN0cmVhbS5zdGFydF0gPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9zaXRpb24gKz0gY29udGVudExlbmd0aDtcbiAgICAgIH0gZWxzZSBpZiAodG9rZW4uc3RhcnRzV2l0aChcInRyYWlsZXJcIikgJiYgKHRva2VuLmxlbmd0aCA9PT0gNyB8fCAvXFxzLy50ZXN0KHRva2VuWzddKSkpIHtcbiAgICAgICAgdHJhaWxlcnMucHVzaChwb3NpdGlvbik7XG4gICAgICAgIHBvc2l0aW9uICs9IHNraXBVbnRpbChidWZmZXIsIHBvc2l0aW9uLCBzdGFydHhyZWZCeXRlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwb3NpdGlvbiArPSB0b2tlbi5sZW5ndGggKyAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHhyZWZTdG1zLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIHRoaXMuc3RhcnRYUmVmUXVldWUucHVzaCh4cmVmU3Rtc1tpXSk7XG4gICAgICB0aGlzLnJlYWRYUmVmKHRydWUpO1xuICAgIH1cblxuICAgIGxldCB0cmFpbGVyRGljdDtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHRyYWlsZXJzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIHN0cmVhbS5wb3MgPSB0cmFpbGVyc1tpXTtcbiAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBfcGFyc2VyLlBhcnNlcih7XG4gICAgICAgIGxleGVyOiBuZXcgX3BhcnNlci5MZXhlcihzdHJlYW0pLFxuICAgICAgICB4cmVmOiB0aGlzLFxuICAgICAgICBhbGxvd1N0cmVhbXM6IHRydWUsXG4gICAgICAgIHJlY292ZXJ5TW9kZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBjb25zdCBvYmogPSBwYXJzZXIuZ2V0T2JqKCk7XG5cbiAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmosIFwidHJhaWxlclwiKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGljdCA9IHBhcnNlci5nZXRPYmooKTtcblxuICAgICAgaWYgKCEoZGljdCBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByb290RGljdCA9IGRpY3QuZ2V0KFwiUm9vdFwiKTtcblxuICAgICAgICBpZiAoIShyb290RGljdCBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYWdlc0RpY3QgPSByb290RGljdC5nZXQoXCJQYWdlc1wiKTtcblxuICAgICAgICBpZiAoIShwYWdlc0RpY3QgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFnZXNDb3VudCA9IHBhZ2VzRGljdC5nZXQoXCJDb3VudFwiKTtcblxuICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIocGFnZXNDb3VudCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChkaWN0LmhhcyhcIklEXCIpKSB7XG4gICAgICAgIHJldHVybiBkaWN0O1xuICAgICAgfVxuXG4gICAgICB0cmFpbGVyRGljdCA9IGRpY3Q7XG4gICAgfVxuXG4gICAgaWYgKHRyYWlsZXJEaWN0KSB7XG4gICAgICByZXR1cm4gdHJhaWxlckRpY3Q7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9wRGljdCkge1xuICAgICAgcmV0dXJuIHRoaXMudG9wRGljdDtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgX3V0aWwuSW52YWxpZFBERkV4Y2VwdGlvbihcIkludmFsaWQgUERGIHN0cnVjdHVyZS5cIik7XG4gIH1cblxuICByZWFkWFJlZihyZWNvdmVyeU1vZGUgPSBmYWxzZSkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtO1xuICAgIGNvbnN0IHN0YXJ0WFJlZlBhcnNlZENhY2hlID0gbmV3IFNldCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHdoaWxlICh0aGlzLnN0YXJ0WFJlZlF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBzdGFydFhSZWYgPSB0aGlzLnN0YXJ0WFJlZlF1ZXVlWzBdO1xuXG4gICAgICAgIGlmIChzdGFydFhSZWZQYXJzZWRDYWNoZS5oYXMoc3RhcnRYUmVmKSkge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcInJlYWRYUmVmIC0gc2tpcHBpbmcgWFJlZiB0YWJsZSBzaW5jZSBpdCB3YXMgYWxyZWFkeSBwYXJzZWQuXCIpO1xuICAgICAgICAgIHRoaXMuc3RhcnRYUmVmUXVldWUuc2hpZnQoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0WFJlZlBhcnNlZENhY2hlLmFkZChzdGFydFhSZWYpO1xuICAgICAgICBzdHJlYW0ucG9zID0gc3RhcnRYUmVmICsgc3RyZWFtLnN0YXJ0O1xuICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgX3BhcnNlci5QYXJzZXIoe1xuICAgICAgICAgIGxleGVyOiBuZXcgX3BhcnNlci5MZXhlcihzdHJlYW0pLFxuICAgICAgICAgIHhyZWY6IHRoaXMsXG4gICAgICAgICAgYWxsb3dTdHJlYW1zOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgb2JqID0gcGFyc2VyLmdldE9iaigpO1xuICAgICAgICBsZXQgZGljdDtcblxuICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmosIFwieHJlZlwiKSkge1xuICAgICAgICAgIGRpY3QgPSB0aGlzLnByb2Nlc3NYUmVmVGFibGUocGFyc2VyKTtcblxuICAgICAgICAgIGlmICghdGhpcy50b3BEaWN0KSB7XG4gICAgICAgICAgICB0aGlzLnRvcERpY3QgPSBkaWN0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG9iaiA9IGRpY3QuZ2V0KFwiWFJlZlN0bVwiKTtcblxuICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG9iaikpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvcyA9IG9iajtcblxuICAgICAgICAgICAgaWYgKCEocG9zIGluIHRoaXMueHJlZnN0bXMpKSB7XG4gICAgICAgICAgICAgIHRoaXMueHJlZnN0bXNbcG9zXSA9IDE7XG4gICAgICAgICAgICAgIHRoaXMuc3RhcnRYUmVmUXVldWUucHVzaChwb3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG9iaikpIHtcbiAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIocGFyc2VyLmdldE9iaigpKSB8fCAhKDAsIF9wcmltaXRpdmVzLmlzQ21kKShwYXJzZXIuZ2V0T2JqKCksIFwib2JqXCIpIHx8ICEoKG9iaiA9IHBhcnNlci5nZXRPYmooKSkgaW5zdGFuY2VvZiBfYmFzZV9zdHJlYW0uQmFzZVN0cmVhbSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgWFJlZiBzdHJlYW1cIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGljdCA9IHRoaXMucHJvY2Vzc1hSZWZTdHJlYW0ob2JqKTtcblxuICAgICAgICAgIGlmICghdGhpcy50b3BEaWN0KSB7XG4gICAgICAgICAgICB0aGlzLnRvcERpY3QgPSBkaWN0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZGljdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiRmFpbGVkIHRvIHJlYWQgWFJlZiBzdHJlYW1cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgWFJlZiBzdHJlYW0gaGVhZGVyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgb2JqID0gZGljdC5nZXQoXCJQcmV2XCIpO1xuXG4gICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG9iaikpIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gob2JqKTtcbiAgICAgICAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gob2JqLm51bSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXJ0WFJlZlF1ZXVlLnNoaWZ0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnRvcERpY3Q7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwuaW5mbykoXCIod2hpbGUgcmVhZGluZyBYUmVmKTogXCIgKyBlKTtcbiAgICAgIHRoaXMuc3RhcnRYUmVmUXVldWUuc2hpZnQoKTtcbiAgICB9XG5cbiAgICBpZiAocmVjb3ZlcnlNb2RlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBfY29yZV91dGlscy5YUmVmUGFyc2VFeGNlcHRpb24oKTtcbiAgfVxuXG4gIGdldEVudHJ5KGkpIHtcbiAgICBjb25zdCB4cmVmRW50cnkgPSB0aGlzLmVudHJpZXNbaV07XG5cbiAgICBpZiAoeHJlZkVudHJ5ICYmICF4cmVmRW50cnkuZnJlZSAmJiB4cmVmRW50cnkub2Zmc2V0KSB7XG4gICAgICByZXR1cm4geHJlZkVudHJ5O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZmV0Y2hJZlJlZihvYmosIHN1cHByZXNzRW5jcnlwdGlvbiA9IGZhbHNlKSB7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLlJlZikge1xuICAgICAgcmV0dXJuIHRoaXMuZmV0Y2gob2JqLCBzdXBwcmVzc0VuY3J5cHRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBmZXRjaChyZWYsIHN1cHByZXNzRW5jcnlwdGlvbiA9IGZhbHNlKSB7XG4gICAgaWYgKCEocmVmIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVmIG9iamVjdCBpcyBub3QgYSByZWZlcmVuY2VcIik7XG4gICAgfVxuXG4gICAgY29uc3QgbnVtID0gcmVmLm51bTtcblxuICAgIGNvbnN0IGNhY2hlRW50cnkgPSB0aGlzLl9jYWNoZU1hcC5nZXQobnVtKTtcblxuICAgIGlmIChjYWNoZUVudHJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChjYWNoZUVudHJ5IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCAmJiAhY2FjaGVFbnRyeS5vYmpJZCkge1xuICAgICAgICBjYWNoZUVudHJ5Lm9iaklkID0gcmVmLnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjYWNoZUVudHJ5O1xuICAgIH1cblxuICAgIGxldCB4cmVmRW50cnkgPSB0aGlzLmdldEVudHJ5KG51bSk7XG5cbiAgICBpZiAoeHJlZkVudHJ5ID09PSBudWxsKSB7XG4gICAgICB0aGlzLl9jYWNoZU1hcC5zZXQobnVtLCB4cmVmRW50cnkpO1xuXG4gICAgICByZXR1cm4geHJlZkVudHJ5O1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZW5kaW5nUmVmcy5oYXMocmVmKSkge1xuICAgICAgdGhpcy5fcGVuZGluZ1JlZnMucmVtb3ZlKHJlZik7XG5cbiAgICAgICgwLCBfdXRpbC53YXJuKShgSWdub3JpbmcgY2lyY3VsYXIgcmVmZXJlbmNlOiAke3JlZn0uYCk7XG4gICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuQ0lSQ1VMQVJfUkVGO1xuICAgIH1cblxuICAgIHRoaXMuX3BlbmRpbmdSZWZzLnB1dChyZWYpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh4cmVmRW50cnkudW5jb21wcmVzc2VkKSB7XG4gICAgICAgIHhyZWZFbnRyeSA9IHRoaXMuZmV0Y2hVbmNvbXByZXNzZWQocmVmLCB4cmVmRW50cnksIHN1cHByZXNzRW5jcnlwdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB4cmVmRW50cnkgPSB0aGlzLmZldGNoQ29tcHJlc3NlZChyZWYsIHhyZWZFbnRyeSwgc3VwcHJlc3NFbmNyeXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcGVuZGluZ1JlZnMucmVtb3ZlKHJlZik7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdSZWZzLnJlbW92ZShyZWYpO1xuXG4gICAgICB0aHJvdyBleDtcbiAgICB9XG5cbiAgICBpZiAoeHJlZkVudHJ5IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkge1xuICAgICAgeHJlZkVudHJ5Lm9iaklkID0gcmVmLnRvU3RyaW5nKCk7XG4gICAgfSBlbHNlIGlmICh4cmVmRW50cnkgaW5zdGFuY2VvZiBfYmFzZV9zdHJlYW0uQmFzZVN0cmVhbSkge1xuICAgICAgeHJlZkVudHJ5LmRpY3Qub2JqSWQgPSByZWYudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICByZXR1cm4geHJlZkVudHJ5O1xuICB9XG5cbiAgZmV0Y2hVbmNvbXByZXNzZWQocmVmLCB4cmVmRW50cnksIHN1cHByZXNzRW5jcnlwdGlvbiA9IGZhbHNlKSB7XG4gICAgY29uc3QgZ2VuID0gcmVmLmdlbjtcbiAgICBsZXQgbnVtID0gcmVmLm51bTtcblxuICAgIGlmICh4cmVmRW50cnkuZ2VuICE9PSBnZW4pIHtcbiAgICAgIHRocm93IG5ldyBfY29yZV91dGlscy5YUmVmRW50cnlFeGNlcHRpb24oYEluY29uc2lzdGVudCBnZW5lcmF0aW9uIGluIFhSZWY6ICR7cmVmfWApO1xuICAgIH1cblxuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtLm1ha2VTdWJTdHJlYW0oeHJlZkVudHJ5Lm9mZnNldCArIHRoaXMuc3RyZWFtLnN0YXJ0KTtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgX3BhcnNlci5QYXJzZXIoe1xuICAgICAgbGV4ZXI6IG5ldyBfcGFyc2VyLkxleGVyKHN0cmVhbSksXG4gICAgICB4cmVmOiB0aGlzLFxuICAgICAgYWxsb3dTdHJlYW1zOiB0cnVlXG4gICAgfSk7XG4gICAgY29uc3Qgb2JqMSA9IHBhcnNlci5nZXRPYmooKTtcbiAgICBjb25zdCBvYmoyID0gcGFyc2VyLmdldE9iaigpO1xuICAgIGNvbnN0IG9iajMgPSBwYXJzZXIuZ2V0T2JqKCk7XG5cbiAgICBpZiAob2JqMSAhPT0gbnVtIHx8IG9iajIgIT09IGdlbiB8fCAhKG9iajMgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5DbWQpKSB7XG4gICAgICB0aHJvdyBuZXcgX2NvcmVfdXRpbHMuWFJlZkVudHJ5RXhjZXB0aW9uKGBCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogJHtyZWZ9YCk7XG4gICAgfVxuXG4gICAgaWYgKG9iajMuY21kICE9PSBcIm9ialwiKSB7XG4gICAgICBpZiAob2JqMy5jbWQuc3RhcnRzV2l0aChcIm9ialwiKSkge1xuICAgICAgICBudW0gPSBwYXJzZUludChvYmozLmNtZC5zdWJzdHJpbmcoMyksIDEwKTtcblxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihudW0pKSB7XG4gICAgICAgICAgcmV0dXJuIG51bTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgX2NvcmVfdXRpbHMuWFJlZkVudHJ5RXhjZXB0aW9uKGBCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogJHtyZWZ9YCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5jcnlwdCAmJiAhc3VwcHJlc3NFbmNyeXB0aW9uKSB7XG4gICAgICB4cmVmRW50cnkgPSBwYXJzZXIuZ2V0T2JqKHRoaXMuZW5jcnlwdC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0obnVtLCBnZW4pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgeHJlZkVudHJ5ID0gcGFyc2VyLmdldE9iaigpO1xuICAgIH1cblxuICAgIGlmICghKHhyZWZFbnRyeSBpbnN0YW5jZW9mIF9iYXNlX3N0cmVhbS5CYXNlU3RyZWFtKSkge1xuICAgICAgdGhpcy5fY2FjaGVNYXAuc2V0KG51bSwgeHJlZkVudHJ5KTtcbiAgICB9XG5cbiAgICByZXR1cm4geHJlZkVudHJ5O1xuICB9XG5cbiAgZmV0Y2hDb21wcmVzc2VkKHJlZiwgeHJlZkVudHJ5LCBzdXBwcmVzc0VuY3J5cHRpb24gPSBmYWxzZSkge1xuICAgIGNvbnN0IHRhYmxlT2Zmc2V0ID0geHJlZkVudHJ5Lm9mZnNldDtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLmZldGNoKF9wcmltaXRpdmVzLlJlZi5nZXQodGFibGVPZmZzZXQsIDApKTtcblxuICAgIGlmICghKHN0cmVhbSBpbnN0YW5jZW9mIF9iYXNlX3N0cmVhbS5CYXNlU3RyZWFtKSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiYmFkIE9ialN0bSBzdHJlYW1cIik7XG4gICAgfVxuXG4gICAgY29uc3QgZmlyc3QgPSBzdHJlYW0uZGljdC5nZXQoXCJGaXJzdFwiKTtcbiAgICBjb25zdCBuID0gc3RyZWFtLmRpY3QuZ2V0KFwiTlwiKTtcblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihmaXJzdCkgfHwgIU51bWJlci5pc0ludGVnZXIobikpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcImludmFsaWQgZmlyc3QgYW5kIG4gcGFyYW1ldGVycyBmb3IgT2JqU3RtIHN0cmVhbVwiKTtcbiAgICB9XG5cbiAgICBsZXQgcGFyc2VyID0gbmV3IF9wYXJzZXIuUGFyc2VyKHtcbiAgICAgIGxleGVyOiBuZXcgX3BhcnNlci5MZXhlcihzdHJlYW0pLFxuICAgICAgeHJlZjogdGhpcyxcbiAgICAgIGFsbG93U3RyZWFtczogdHJ1ZVxuICAgIH0pO1xuICAgIGNvbnN0IG51bXMgPSBuZXcgQXJyYXkobik7XG4gICAgY29uc3Qgb2Zmc2V0cyA9IG5ldyBBcnJheShuKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBjb25zdCBudW0gPSBwYXJzZXIuZ2V0T2JqKCk7XG5cbiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihudW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgaW52YWxpZCBvYmplY3QgbnVtYmVyIGluIHRoZSBPYmpTdG0gc3RyZWFtOiAke251bX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2Zmc2V0ID0gcGFyc2VyLmdldE9iaigpO1xuXG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIob2Zmc2V0KSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYGludmFsaWQgb2JqZWN0IG9mZnNldCBpbiB0aGUgT2JqU3RtIHN0cmVhbTogJHtvZmZzZXR9YCk7XG4gICAgICB9XG5cbiAgICAgIG51bXNbaV0gPSBudW07XG4gICAgICBvZmZzZXRzW2ldID0gb2Zmc2V0O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gKHN0cmVhbS5zdGFydCB8fCAwKSArIGZpcnN0O1xuICAgIGNvbnN0IGVudHJpZXMgPSBuZXcgQXJyYXkobik7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgY29uc3QgbGVuZ3RoID0gaSA8IG4gLSAxID8gb2Zmc2V0c1tpICsgMV0gLSBvZmZzZXRzW2ldIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAobGVuZ3RoIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIG9mZnNldCBpbiB0aGUgT2JqU3RtIHN0cmVhbS5cIik7XG4gICAgICB9XG5cbiAgICAgIHBhcnNlciA9IG5ldyBfcGFyc2VyLlBhcnNlcih7XG4gICAgICAgIGxleGVyOiBuZXcgX3BhcnNlci5MZXhlcihzdHJlYW0ubWFrZVN1YlN0cmVhbShzdGFydCArIG9mZnNldHNbaV0sIGxlbmd0aCwgc3RyZWFtLmRpY3QpKSxcbiAgICAgICAgeHJlZjogdGhpcyxcbiAgICAgICAgYWxsb3dTdHJlYW1zOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG9iaiA9IHBhcnNlci5nZXRPYmooKTtcbiAgICAgIGVudHJpZXNbaV0gPSBvYmo7XG5cbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBfYmFzZV9zdHJlYW0uQmFzZVN0cmVhbSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbnVtID0gbnVtc1tpXSxcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5lbnRyaWVzW251bV07XG5cbiAgICAgIGlmIChlbnRyeSAmJiBlbnRyeS5vZmZzZXQgPT09IHRhYmxlT2Zmc2V0ICYmIGVudHJ5LmdlbiA9PT0gaSkge1xuICAgICAgICB0aGlzLl9jYWNoZU1hcC5zZXQobnVtLCBvYmopO1xuICAgICAgfVxuICAgIH1cblxuICAgIHhyZWZFbnRyeSA9IGVudHJpZXNbeHJlZkVudHJ5Lmdlbl07XG5cbiAgICBpZiAoeHJlZkVudHJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBfY29yZV91dGlscy5YUmVmRW50cnlFeGNlcHRpb24oYEJhZCAoY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogJHtyZWZ9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHhyZWZFbnRyeTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoSWZSZWZBc3luYyhvYmosIHN1cHByZXNzRW5jcnlwdGlvbikge1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgIHJldHVybiB0aGlzLmZldGNoQXN5bmMob2JqLCBzdXBwcmVzc0VuY3J5cHRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBhc3luYyBmZXRjaEFzeW5jKHJlZiwgc3VwcHJlc3NFbmNyeXB0aW9uKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmZldGNoKHJlZiwgc3VwcHJlc3NFbmNyeXB0aW9uKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKCEoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikpIHtcbiAgICAgICAgdGhyb3cgZXg7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMucGRmTWFuYWdlci5yZXF1ZXN0UmFuZ2UoZXguYmVnaW4sIGV4LmVuZCk7XG4gICAgICByZXR1cm4gdGhpcy5mZXRjaEFzeW5jKHJlZiwgc3VwcHJlc3NFbmNyeXB0aW9uKTtcbiAgICB9XG4gIH1cblxuICBnZXRDYXRhbG9nT2JqKCkge1xuICAgIHJldHVybiB0aGlzLnJvb3Q7XG4gIH1cblxufVxuXG5leHBvcnRzLlhSZWYgPSBYUmVmO1xuXG4vKioqLyB9KSxcbi8qIDk5ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLk1lc3NhZ2VIYW5kbGVyID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jb25zdCBDYWxsYmFja0tpbmQgPSB7XG4gIFVOS05PV046IDAsXG4gIERBVEE6IDEsXG4gIEVSUk9SOiAyXG59O1xuY29uc3QgU3RyZWFtS2luZCA9IHtcbiAgVU5LTk9XTjogMCxcbiAgQ0FOQ0VMOiAxLFxuICBDQU5DRUxfQ09NUExFVEU6IDIsXG4gIENMT1NFOiAzLFxuICBFTlFVRVVFOiA0LFxuICBFUlJPUjogNSxcbiAgUFVMTDogNixcbiAgUFVMTF9DT01QTEVURTogNyxcbiAgU1RBUlRfQ09NUExFVEU6IDhcbn07XG5cbmZ1bmN0aW9uIHdyYXBSZWFzb24ocmVhc29uKSB7XG4gIGlmICghKHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yIHx8IHR5cGVvZiByZWFzb24gPT09IFwib2JqZWN0XCIgJiYgcmVhc29uICE9PSBudWxsKSkge1xuICAgICgwLCBfdXRpbC53YXJuKSgnd3JhcFJlYXNvbjogRXhwZWN0ZWQgXCJyZWFzb25cIiB0byBiZSBhIChwb3NzaWJseSBjbG9uZWQpIEVycm9yLicpO1xuICAgIHJldHVybiByZWFzb247XG4gIH1cblxuICBzd2l0Y2ggKHJlYXNvbi5uYW1lKSB7XG4gICAgY2FzZSBcIkFib3J0RXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLkFib3J0RXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlKTtcblxuICAgIGNhc2UgXCJNaXNzaW5nUERGRXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24ocmVhc29uLm1lc3NhZ2UpO1xuXG4gICAgY2FzZSBcIlBhc3N3b3JkRXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlLCByZWFzb24uY29kZSk7XG5cbiAgICBjYXNlIFwiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbihyZWFzb24ubWVzc2FnZSwgcmVhc29uLnN0YXR1cyk7XG5cbiAgICBjYXNlIFwiVW5rbm93bkVycm9yRXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLlVua25vd25FcnJvckV4Y2VwdGlvbihyZWFzb24ubWVzc2FnZSwgcmVhc29uLmRldGFpbHMpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBuZXcgX3V0aWwuVW5rbm93bkVycm9yRXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlLCByZWFzb24udG9TdHJpbmcoKSk7XG4gIH1cbn1cblxuY2xhc3MgTWVzc2FnZUhhbmRsZXIge1xuICBjb25zdHJ1Y3Rvcihzb3VyY2VOYW1lLCB0YXJnZXROYW1lLCBjb21PYmopIHtcbiAgICB0aGlzLnNvdXJjZU5hbWUgPSBzb3VyY2VOYW1lO1xuICAgIHRoaXMudGFyZ2V0TmFtZSA9IHRhcmdldE5hbWU7XG4gICAgdGhpcy5jb21PYmogPSBjb21PYmo7XG4gICAgdGhpcy5jYWxsYmFja0lkID0gMTtcbiAgICB0aGlzLnN0cmVhbUlkID0gMTtcbiAgICB0aGlzLnN0cmVhbVNpbmtzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLmFjdGlvbkhhbmRsZXIgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgdGhpcy5fb25Db21PYmpPbk1lc3NhZ2UgPSBldmVudCA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gZXZlbnQuZGF0YTtcblxuICAgICAgaWYgKGRhdGEudGFyZ2V0TmFtZSAhPT0gdGhpcy5zb3VyY2VOYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc3RyZWFtKSB7XG4gICAgICAgIHRoaXMuX3Byb2Nlc3NTdHJlYW1NZXNzYWdlKGRhdGEpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tJZCA9IGRhdGEuY2FsbGJhY2tJZDtcbiAgICAgICAgY29uc3QgY2FwYWJpbGl0eSA9IHRoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbY2FsbGJhY2tJZF07XG5cbiAgICAgICAgaWYgKCFjYXBhYmlsaXR5KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVzb2x2ZSBjYWxsYmFjayAke2NhbGxiYWNrSWR9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBkZWxldGUgdGhpcy5jYWxsYmFja0NhcGFiaWxpdGllc1tjYWxsYmFja0lkXTtcblxuICAgICAgICBpZiAoZGF0YS5jYWxsYmFjayA9PT0gQ2FsbGJhY2tLaW5kLkRBVEEpIHtcbiAgICAgICAgICBjYXBhYmlsaXR5LnJlc29sdmUoZGF0YS5kYXRhKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmNhbGxiYWNrID09PSBDYWxsYmFja0tpbmQuRVJST1IpIHtcbiAgICAgICAgICBjYXBhYmlsaXR5LnJlamVjdCh3cmFwUmVhc29uKGRhdGEucmVhc29uKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBjYWxsYmFjayBjYXNlXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmFjdGlvbkhhbmRsZXJbZGF0YS5hY3Rpb25dO1xuXG4gICAgICBpZiAoIWFjdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYWN0aW9uIGZyb20gd29ya2VyOiAke2RhdGEuYWN0aW9ufWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jYWxsYmFja0lkKSB7XG4gICAgICAgIGNvbnN0IGNiU291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZTtcbiAgICAgICAgY29uc3QgY2JUYXJnZXROYW1lID0gZGF0YS5zb3VyY2VOYW1lO1xuICAgICAgICBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIHJlc29sdmUoYWN0aW9uKGRhdGEuZGF0YSkpO1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZTogY2JTb3VyY2VOYW1lLFxuICAgICAgICAgICAgdGFyZ2V0TmFtZTogY2JUYXJnZXROYW1lLFxuICAgICAgICAgICAgY2FsbGJhY2s6IENhbGxiYWNrS2luZC5EQVRBLFxuICAgICAgICAgICAgY2FsbGJhY2tJZDogZGF0YS5jYWxsYmFja0lkLFxuICAgICAgICAgICAgZGF0YTogcmVzdWx0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZTogY2JTb3VyY2VOYW1lLFxuICAgICAgICAgICAgdGFyZ2V0TmFtZTogY2JUYXJnZXROYW1lLFxuICAgICAgICAgICAgY2FsbGJhY2s6IENhbGxiYWNrS2luZC5FUlJPUixcbiAgICAgICAgICAgIGNhbGxiYWNrSWQ6IGRhdGEuY2FsbGJhY2tJZCxcbiAgICAgICAgICAgIHJlYXNvbjogd3JhcFJlYXNvbihyZWFzb24pXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnN0cmVhbUlkKSB7XG4gICAgICAgIHRoaXMuX2NyZWF0ZVN0cmVhbVNpbmsoZGF0YSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhY3Rpb24oZGF0YS5kYXRhKTtcbiAgICB9O1xuXG4gICAgY29tT2JqLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKTtcbiAgfVxuXG4gIG9uKGFjdGlvbk5hbWUsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBhaCA9IHRoaXMuYWN0aW9uSGFuZGxlcjtcblxuICAgIGlmIChhaFthY3Rpb25OYW1lXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBpcyBhbHJlYWR5IGFuIGFjdGlvbk5hbWUgY2FsbGVkIFwiJHthY3Rpb25OYW1lfVwiYCk7XG4gICAgfVxuXG4gICAgYWhbYWN0aW9uTmFtZV0gPSBoYW5kbGVyO1xuICB9XG5cbiAgc2VuZChhY3Rpb25OYW1lLCBkYXRhLCB0cmFuc2ZlcnMpIHtcbiAgICB0aGlzLmNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICBzb3VyY2VOYW1lOiB0aGlzLnNvdXJjZU5hbWUsXG4gICAgICB0YXJnZXROYW1lOiB0aGlzLnRhcmdldE5hbWUsXG4gICAgICBhY3Rpb246IGFjdGlvbk5hbWUsXG4gICAgICBkYXRhXG4gICAgfSwgdHJhbnNmZXJzKTtcbiAgfVxuXG4gIHNlbmRXaXRoUHJvbWlzZShhY3Rpb25OYW1lLCBkYXRhLCB0cmFuc2ZlcnMpIHtcbiAgICBjb25zdCBjYWxsYmFja0lkID0gdGhpcy5jYWxsYmFja0lkKys7XG4gICAgY29uc3QgY2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICB0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzW2NhbGxiYWNrSWRdID0gY2FwYWJpbGl0eTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgIHNvdXJjZU5hbWU6IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgdGFyZ2V0TmFtZTogdGhpcy50YXJnZXROYW1lLFxuICAgICAgICBhY3Rpb246IGFjdGlvbk5hbWUsXG4gICAgICAgIGNhbGxiYWNrSWQsXG4gICAgICAgIGRhdGFcbiAgICAgIH0sIHRyYW5zZmVycyk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGNhcGFiaWxpdHkucmVqZWN0KGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG5cbiAgc2VuZFdpdGhTdHJlYW0oYWN0aW9uTmFtZSwgZGF0YSwgcXVldWVpbmdTdHJhdGVneSwgdHJhbnNmZXJzKSB7XG4gICAgY29uc3Qgc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkKyssXG4gICAgICAgICAgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgICB0YXJnZXROYW1lID0gdGhpcy50YXJnZXROYW1lLFxuICAgICAgICAgIGNvbU9iaiA9IHRoaXMuY29tT2JqO1xuICAgIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgICAgc3RhcnQ6IGNvbnRyb2xsZXIgPT4ge1xuICAgICAgICBjb25zdCBzdGFydENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdID0ge1xuICAgICAgICAgIGNvbnRyb2xsZXIsXG4gICAgICAgICAgc3RhcnRDYWxsOiBzdGFydENhcGFiaWxpdHksXG4gICAgICAgICAgcHVsbENhbGw6IG51bGwsXG4gICAgICAgICAgY2FuY2VsQ2FsbDogbnVsbCxcbiAgICAgICAgICBpc0Nsb3NlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLFxuICAgICAgICAgIHN0cmVhbUlkLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgZGVzaXJlZFNpemU6IGNvbnRyb2xsZXIuZGVzaXJlZFNpemVcbiAgICAgICAgfSwgdHJhbnNmZXJzKTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0Q2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgfSxcbiAgICAgIHB1bGw6IGNvbnRyb2xsZXIgPT4ge1xuICAgICAgICBjb25zdCBwdWxsQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0ucHVsbENhbGwgPSBwdWxsQ2FwYWJpbGl0eTtcbiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlBVTEwsXG4gICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgZGVzaXJlZFNpemU6IGNvbnRyb2xsZXIuZGVzaXJlZFNpemVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwdWxsQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgfSxcbiAgICAgIGNhbmNlbDogcmVhc29uID0+IHtcbiAgICAgICAgKDAsIF91dGlsLmFzc2VydCkocmVhc29uIGluc3RhbmNlb2YgRXJyb3IsIFwiY2FuY2VsIG11c3QgaGF2ZSBhIHZhbGlkIHJlYXNvblwiKTtcbiAgICAgICAgY29uc3QgY2FuY2VsQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0uY2FuY2VsQ2FsbCA9IGNhbmNlbENhcGFiaWxpdHk7XG4gICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmlzQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLkNBTkNFTCxcbiAgICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24ocmVhc29uKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNhbmNlbENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgIH1cbiAgICB9LCBxdWV1ZWluZ1N0cmF0ZWd5KTtcbiAgfVxuXG4gIF9jcmVhdGVTdHJlYW1TaW5rKGRhdGEpIHtcbiAgICBjb25zdCBzdHJlYW1JZCA9IGRhdGEuc3RyZWFtSWQsXG4gICAgICAgICAgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgICB0YXJnZXROYW1lID0gZGF0YS5zb3VyY2VOYW1lLFxuICAgICAgICAgIGNvbU9iaiA9IHRoaXMuY29tT2JqO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzLFxuICAgICAgICAgIGFjdGlvbiA9IHRoaXMuYWN0aW9uSGFuZGxlcltkYXRhLmFjdGlvbl07XG4gICAgY29uc3Qgc3RyZWFtU2luayA9IHtcbiAgICAgIGVucXVldWUoY2h1bmssIHNpemUgPSAxLCB0cmFuc2ZlcnMpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDYW5jZWxsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0RGVzaXJlZFNpemUgPSB0aGlzLmRlc2lyZWRTaXplO1xuICAgICAgICB0aGlzLmRlc2lyZWRTaXplIC09IHNpemU7XG5cbiAgICAgICAgaWYgKGxhc3REZXNpcmVkU2l6ZSA+IDAgJiYgdGhpcy5kZXNpcmVkU2l6ZSA8PSAwKSB7XG4gICAgICAgICAgdGhpcy5zaW5rQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICB0aGlzLnJlYWR5ID0gdGhpcy5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLkVOUVVFVUUsXG4gICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgY2h1bmtcbiAgICAgICAgfSwgdHJhbnNmZXJzKTtcbiAgICAgIH0sXG5cbiAgICAgIGNsb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5pc0NhbmNlbGxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNDYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0xPU0UsXG4gICAgICAgICAgc3RyZWFtSWRcbiAgICAgICAgfSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmLnN0cmVhbVNpbmtzW3N0cmVhbUlkXTtcbiAgICAgIH0sXG5cbiAgICAgIGVycm9yKHJlYXNvbikge1xuICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KShyZWFzb24gaW5zdGFuY2VvZiBFcnJvciwgXCJlcnJvciBtdXN0IGhhdmUgYSB2YWxpZCByZWFzb25cIik7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDYW5jZWxsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLkVSUk9SLFxuICAgICAgICAgIHN0cmVhbUlkLFxuICAgICAgICAgIHJlYXNvbjogd3JhcFJlYXNvbihyZWFzb24pXG4gICAgICAgIH0pO1xuICAgICAgfSxcblxuICAgICAgc2lua0NhcGFiaWxpdHk6ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxcbiAgICAgIG9uUHVsbDogbnVsbCxcbiAgICAgIG9uQ2FuY2VsOiBudWxsLFxuICAgICAgaXNDYW5jZWxsZWQ6IGZhbHNlLFxuICAgICAgZGVzaXJlZFNpemU6IGRhdGEuZGVzaXJlZFNpemUsXG4gICAgICByZWFkeTogbnVsbFxuICAgIH07XG4gICAgc3RyZWFtU2luay5zaW5rQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgc3RyZWFtU2luay5yZWFkeSA9IHN0cmVhbVNpbmsuc2lua0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB0aGlzLnN0cmVhbVNpbmtzW3N0cmVhbUlkXSA9IHN0cmVhbVNpbms7XG4gICAgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmUoYWN0aW9uKGRhdGEuZGF0YSwgc3RyZWFtU2luaykpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlNUQVJUX0NPTVBMRVRFLFxuICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgc3VjY2VzczogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlNUQVJUX0NPTVBMRVRFLFxuICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgcmVhc29uOiB3cmFwUmVhc29uKHJlYXNvbilcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgX3Byb2Nlc3NTdHJlYW1NZXNzYWdlKGRhdGEpIHtcbiAgICBjb25zdCBzdHJlYW1JZCA9IGRhdGEuc3RyZWFtSWQsXG4gICAgICAgICAgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgICB0YXJnZXROYW1lID0gZGF0YS5zb3VyY2VOYW1lLFxuICAgICAgICAgIGNvbU9iaiA9IHRoaXMuY29tT2JqO1xuICAgIGNvbnN0IHN0cmVhbUNvbnRyb2xsZXIgPSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXSxcbiAgICAgICAgICBzdHJlYW1TaW5rID0gdGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF07XG5cbiAgICBzd2l0Y2ggKGRhdGEuc3RyZWFtKSB7XG4gICAgICBjYXNlIFN0cmVhbUtpbmQuU1RBUlRfQ09NUExFVEU6XG4gICAgICAgIGlmIChkYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBzdHJlYW1Db250cm9sbGVyLnN0YXJ0Q2FsbC5yZXNvbHZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyZWFtQ29udHJvbGxlci5zdGFydENhbGwucmVqZWN0KHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuUFVMTF9DT01QTEVURTpcbiAgICAgICAgaWYgKGRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgIHN0cmVhbUNvbnRyb2xsZXIucHVsbENhbGwucmVzb2x2ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0cmVhbUNvbnRyb2xsZXIucHVsbENhbGwucmVqZWN0KHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuUFVMTDpcbiAgICAgICAgaWYgKCFzdHJlYW1TaW5rKSB7XG4gICAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlBVTExfQ09NUExFVEUsXG4gICAgICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJlYW1TaW5rLmRlc2lyZWRTaXplIDw9IDAgJiYgZGF0YS5kZXNpcmVkU2l6ZSA+IDApIHtcbiAgICAgICAgICBzdHJlYW1TaW5rLnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0cmVhbVNpbmsuZGVzaXJlZFNpemUgPSBkYXRhLmRlc2lyZWRTaXplO1xuICAgICAgICBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIHJlc29sdmUoc3RyZWFtU2luay5vblB1bGwgJiYgc3RyZWFtU2luay5vblB1bGwoKSk7XG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICAgIHN0cmVhbTogU3RyZWFtS2luZC5QVUxMX0NPTVBMRVRFLFxuICAgICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuUFVMTF9DT01QTEVURSxcbiAgICAgICAgICAgIHN0cmVhbUlkLFxuICAgICAgICAgICAgcmVhc29uOiB3cmFwUmVhc29uKHJlYXNvbilcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuRU5RVUVVRTpcbiAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoc3RyZWFtQ29udHJvbGxlciwgXCJlbnF1ZXVlIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyXCIpO1xuXG4gICAgICAgIGlmIChzdHJlYW1Db250cm9sbGVyLmlzQ2xvc2VkKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzdHJlYW1Db250cm9sbGVyLmNvbnRyb2xsZXIuZW5xdWV1ZShkYXRhLmNodW5rKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU3RyZWFtS2luZC5DTE9TRTpcbiAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoc3RyZWFtQ29udHJvbGxlciwgXCJjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlclwiKTtcblxuICAgICAgICBpZiAoc3RyZWFtQ29udHJvbGxlci5pc0Nsb3NlZCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyZWFtQ29udHJvbGxlci5pc0Nsb3NlZCA9IHRydWU7XG4gICAgICAgIHN0cmVhbUNvbnRyb2xsZXIuY29udHJvbGxlci5jbG9zZSgpO1xuXG4gICAgICAgIHRoaXMuX2RlbGV0ZVN0cmVhbUNvbnRyb2xsZXIoc3RyZWFtQ29udHJvbGxlciwgc3RyZWFtSWQpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuRVJST1I6XG4gICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHN0cmVhbUNvbnRyb2xsZXIsIFwiZXJyb3Igc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXJcIik7XG4gICAgICAgIHN0cmVhbUNvbnRyb2xsZXIuY29udHJvbGxlci5lcnJvcih3cmFwUmVhc29uKGRhdGEucmVhc29uKSk7XG5cbiAgICAgICAgdGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihzdHJlYW1Db250cm9sbGVyLCBzdHJlYW1JZCk7XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU3RyZWFtS2luZC5DQU5DRUxfQ09NUExFVEU6XG4gICAgICAgIGlmIChkYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBzdHJlYW1Db250cm9sbGVyLmNhbmNlbENhbGwucmVzb2x2ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0cmVhbUNvbnRyb2xsZXIuY2FuY2VsQ2FsbC5yZWplY3Qod3JhcFJlYXNvbihkYXRhLnJlYXNvbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihzdHJlYW1Db250cm9sbGVyLCBzdHJlYW1JZCk7XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU3RyZWFtS2luZC5DQU5DRUw6XG4gICAgICAgIGlmICghc3RyZWFtU2luaykge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICByZXNvbHZlKHN0cmVhbVNpbmsub25DYW5jZWwgJiYgc3RyZWFtU2luay5vbkNhbmNlbCh3cmFwUmVhc29uKGRhdGEucmVhc29uKSkpO1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0FOQ0VMX0NPTVBMRVRFLFxuICAgICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0FOQ0VMX0NPTVBMRVRFLFxuICAgICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24ocmVhc29uKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgc3RyZWFtU2luay5zaW5rQ2FwYWJpbGl0eS5yZWplY3Qod3JhcFJlYXNvbihkYXRhLnJlYXNvbikpO1xuICAgICAgICBzdHJlYW1TaW5rLmlzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc3RyZWFtU2lua3Nbc3RyZWFtSWRdO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBzdHJlYW0gY2FzZVwiKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfZGVsZXRlU3RyZWFtQ29udHJvbGxlcihzdHJlYW1Db250cm9sbGVyLCBzdHJlYW1JZCkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbc3RyZWFtQ29udHJvbGxlci5zdGFydENhbGwgJiYgc3RyZWFtQ29udHJvbGxlci5zdGFydENhbGwucHJvbWlzZSwgc3RyZWFtQ29udHJvbGxlci5wdWxsQ2FsbCAmJiBzdHJlYW1Db250cm9sbGVyLnB1bGxDYWxsLnByb21pc2UsIHN0cmVhbUNvbnRyb2xsZXIuY2FuY2VsQ2FsbCAmJiBzdHJlYW1Db250cm9sbGVyLmNhbmNlbENhbGwucHJvbWlzZV0pO1xuICAgIGRlbGV0ZSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5jb21PYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5fb25Db21PYmpPbk1lc3NhZ2UpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5NZXNzYWdlSGFuZGxlciA9IE1lc3NhZ2VIYW5kbGVyO1xuXG4vKioqLyB9KSxcbi8qIDEwMCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5QREZXb3JrZXJTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbmNsYXNzIFBERldvcmtlclN0cmVhbSB7XG4gIGNvbnN0cnVjdG9yKG1zZ0hhbmRsZXIpIHtcbiAgICB0aGlzLl9tc2dIYW5kbGVyID0gbXNnSGFuZGxlcjtcbiAgICB0aGlzLl9jb250ZW50TGVuZ3RoID0gbnVsbDtcbiAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IG51bGw7XG4gICAgdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycyA9IFtdO1xuICB9XG5cbiAgZ2V0RnVsbFJlYWRlcigpIHtcbiAgICAoMCwgX3V0aWwuYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIsIFwiUERGV29ya2VyU3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuXCIpO1xuICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyID0gbmV3IFBERldvcmtlclN0cmVhbVJlYWRlcih0aGlzLl9tc2dIYW5kbGVyKTtcbiAgICByZXR1cm4gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI7XG4gIH1cblxuICBnZXRSYW5nZVJlYWRlcihiZWdpbiwgZW5kKSB7XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IFBERldvcmtlclN0cmVhbVJhbmdlUmVhZGVyKGJlZ2luLCBlbmQsIHRoaXMuX21zZ0hhbmRsZXIpO1xuXG4gICAgdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5wdXNoKHJlYWRlcik7XG5cbiAgICByZXR1cm4gcmVhZGVyO1xuICB9XG5cbiAgY2FuY2VsQWxsUmVxdWVzdHMocmVhc29uKSB7XG4gICAgaWYgKHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKSB7XG4gICAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlci5jYW5jZWwocmVhc29uKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlYWRlciBvZiB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApKSB7XG4gICAgICByZWFkZXIuY2FuY2VsKHJlYXNvbik7XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5QREZXb3JrZXJTdHJlYW0gPSBQREZXb3JrZXJTdHJlYW07XG5cbmNsYXNzIFBERldvcmtlclN0cmVhbVJlYWRlciB7XG4gIGNvbnN0cnVjdG9yKG1zZ0hhbmRsZXIpIHtcbiAgICB0aGlzLl9tc2dIYW5kbGVyID0gbXNnSGFuZGxlcjtcbiAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsO1xuICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSBudWxsO1xuICAgIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgcmVhZGFibGVTdHJlYW0gPSB0aGlzLl9tc2dIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKFwiR2V0UmVhZGVyXCIpO1xuXG4gICAgdGhpcy5fcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgdGhpcy5faGVhZGVyc1JlYWR5ID0gdGhpcy5fbXNnSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJSZWFkZXJIZWFkZXJzUmVhZHlcIikudGhlbihkYXRhID0+IHtcbiAgICAgIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkID0gZGF0YS5pc1N0cmVhbWluZ1N1cHBvcnRlZDtcbiAgICAgIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQgPSBkYXRhLmlzUmFuZ2VTdXBwb3J0ZWQ7XG4gICAgICB0aGlzLl9jb250ZW50TGVuZ3RoID0gZGF0YS5jb250ZW50TGVuZ3RoO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGhlYWRlcnNSZWFkeSgpIHtcbiAgICByZXR1cm4gdGhpcy5faGVhZGVyc1JlYWR5O1xuICB9XG5cbiAgZ2V0IGNvbnRlbnRMZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGg7XG4gIH1cblxuICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IGlzUmFuZ2VTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ7XG4gIH1cblxuICBhc3luYyByZWFkKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHZhbHVlLFxuICAgICAgZG9uZVxuICAgIH0gPSBhd2FpdCB0aGlzLl9yZWFkZXIucmVhZCgpO1xuXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB2YWx1ZS5idWZmZXIsXG4gICAgICBkb25lOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjYW5jZWwocmVhc29uKSB7XG4gICAgdGhpcy5fcmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICB9XG5cbn1cblxuY2xhc3MgUERGV29ya2VyU3RyZWFtUmFuZ2VSZWFkZXIge1xuICBjb25zdHJ1Y3RvcihiZWdpbiwgZW5kLCBtc2dIYW5kbGVyKSB7XG4gICAgdGhpcy5fbXNnSGFuZGxlciA9IG1zZ0hhbmRsZXI7XG4gICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcblxuICAgIGNvbnN0IHJlYWRhYmxlU3RyZWFtID0gdGhpcy5fbXNnSGFuZGxlci5zZW5kV2l0aFN0cmVhbShcIkdldFJhbmdlUmVhZGVyXCIsIHtcbiAgICAgIGJlZ2luLFxuICAgICAgZW5kXG4gICAgfSk7XG5cbiAgICB0aGlzLl9yZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgfVxuXG4gIGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhc3luYyByZWFkKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHZhbHVlLFxuICAgICAgZG9uZVxuICAgIH0gPSBhd2FpdCB0aGlzLl9yZWFkZXIucmVhZCgpO1xuXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB2YWx1ZS5idWZmZXIsXG4gICAgICBkb25lOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjYW5jZWwocmVhc29uKSB7XG4gICAgdGhpcy5fcmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICB9XG5cbn1cblxuLyoqKi8gfSlcbi8qKioqKiovIFx0XSk7XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd19wZGZqc19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcbi8qKioqKiovIFx0XHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcbi8qKioqKiovIFx0XHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi8gXHRcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0XHRfX3dfcGRmanNfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuLyoqKioqKi8gXHRcdFx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuLyoqKioqKi8gXHRcdFx0XHRpZihfX3dfcGRmanNfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193X3BkZmpzX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHRfX3dfcGRmanNfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpXG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0ICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRcdF9fd19wZGZqc19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG4vKioqKioqLyBcdFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0ge307XG4vLyBUaGlzIGVudHJ5IG5lZWQgdG8gYmUgd3JhcHBlZCBpbiBhbiBJSUZFIGJlY2F1c2UgaXQgbmVlZCB0byBiZSBpc29sYXRlZCBhZ2FpbnN0IG90aGVyIG1vZHVsZXMgaW4gdGhlIGNodW5rLlxuKCgpID0+IHtcbnZhciBleHBvcnRzID0gX193ZWJwYWNrX2V4cG9ydHNfXztcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJXb3JrZXJNZXNzYWdlSGFuZGxlclwiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3dvcmtlci5Xb3JrZXJNZXNzYWdlSGFuZGxlcjtcbiAgfVxufSkpO1xuXG52YXIgX3dvcmtlciA9IF9fd19wZGZqc19yZXF1aXJlX18oMSk7XG5cbmNvbnN0IHBkZmpzVmVyc2lvbiA9ICcyLjEyLjMxMyc7XG5jb25zdCBwZGZqc0J1aWxkID0gJ2EyYWU1NmYzOSc7XG59KSgpO1xuXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfZXhwb3J0c19fO1xuLyoqKioqKi8gfSkoKVxuO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wZGYud29ya2VyLmpzLm1hcCIsIi8qIENvcHlyaWdodCAyMDIxIE1vemlsbGEgRm91bmRhdGlvblxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4odHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIlxuICA/IHdpbmRvd1xuICA6IHt9XG4pLnBkZmpzV29ya2VyID0gcmVxdWlyZShcIi4vcGRmLndvcmtlci5qc1wiKTtcbiIsImltcG9ydCB7IFBsdWdpbiwgVEZpbGUgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IEJldHRlclBkZlNldHRpbmdzLCBCZXR0ZXJQZGZTZXR0aW5nc1RhYiB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5pbXBvcnQgKiBhcyBwZGZqcyBmcm9tIFwicGRmanMtZGlzdFwiO1xuaW1wb3J0ICogYXMgd29ya2VyIGZyb20gXCJwZGZqcy1kaXN0L2J1aWxkL3BkZi53b3JrZXIuZW50cnkuanNcIjtcblxuaW50ZXJmYWNlIFBkZk5vZGVQYXJhbWV0ZXJzIHtcblx0cmFuZ2U6IEFycmF5PG51bWJlcj47XG5cdHVybDogc3RyaW5nO1xuXHRsaW5rOiBib29sZWFuO1xuXHRwYWdlOiBudW1iZXIgfCBBcnJheTxudW1iZXIgfCBBcnJheTxudW1iZXI+Pjtcblx0c2NhbGU6IG51bWJlcjtcblx0Zml0OiBib29sZWFuLFxuXHRyb3RhdGlvbjogbnVtYmVyO1xuXHRyZWN0OiBBcnJheTxudW1iZXI+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCZXR0ZXJQREZQbHVnaW4gZXh0ZW5kcyBQbHVnaW4ge1xuXHRzZXR0aW5nczogQmV0dGVyUGRmU2V0dGluZ3M7XG5cblx0YXN5bmMgb25sb2FkKCkge1xuXHRcdGNvbnNvbGUubG9nKFwiQmV0dGVyIFBERiBsb2FkaW5nLi4uXCIpO1xuXG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24obmV3IEJldHRlclBkZlNldHRpbmdzKCksIGF3YWl0IHRoaXMubG9hZERhdGEoKSk7XG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBCZXR0ZXJQZGZTZXR0aW5nc1RhYih0aGlzLmFwcCwgdGhpcykpO1xuXG5cdFx0cGRmanMuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmMgPSB3b3JrZXI7XG5cblx0XHR0aGlzLnJlZ2lzdGVyTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IoXCJwZGZcIiwgYXN5bmMgKHNyYywgZWwsIGN0eCkgPT4ge1xuXHRcdFx0Ly8gR2V0IFBhcmFtZXRlcnNcblx0XHRcdGxldCBwYXJhbWV0ZXJzOiBQZGZOb2RlUGFyYW1ldGVycyA9IG51bGw7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRwYXJhbWV0ZXJzID0gdGhpcy5yZWFkUGFyYW1ldGVycyhzcmMpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRlbC5jcmVhdGVFbChcImgyXCIsIHsgdGV4dDogXCJQREYgUGFyYW1ldGVycyBpbnZhbGlkOiBcIiArIGUubWVzc2FnZSB9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly9DcmVhdGUgUERGIE5vZGVcblx0XHRcdGlmIChwYXJhbWV0ZXJzICE9PSBudWxsKSB7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwiQ3JlYXRpbmcgUERGIE5vZGUgd2l0aCBwYXJhbWV0ZXJzOiBcIiwgcGFyYW1ldGVycyk7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc29sZS5sb2cocGFyYW1ldGVycy51cmwpO1xuXHRcdFx0XHRcdGlmIChwYXJhbWV0ZXJzLnVybC5zdGFydHNXaXRoKFwiLi9cIikpIHtcblx0XHRcdFx0XHRcdC8vIGZpbmQgdGhlIHN1YnN0cmluZyBvZiBwYXRoIGFsbCB0aGUgd2F5IHRvIHRoZSBsYXN0IHNsYXNoXG5cdFx0XHRcdFx0XHRjb25zdCBmaWxlUGF0aCA9IGN0eC5zb3VyY2VQYXRoO1xuXHRcdFx0XHRcdFx0Y29uc3QgZm9sZGVyUGF0aCA9IGZpbGVQYXRoLnN1YnN0cmluZygwLCBmaWxlUGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuXHRcdFx0XHRcdFx0cGFyYW1ldGVycy51cmwgPSBmb2xkZXJQYXRoICsgXCIvXCIgKyBwYXJhbWV0ZXJzLnVybC5zdWJzdHJpbmcoMiwgcGFyYW1ldGVycy51cmwubGVuZ3RoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly9SZWFkIERvY3VtZW50XG5cdFx0XHRcdFx0Y29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCB0aGlzLmFwcC52YXVsdC5hZGFwdGVyLnJlYWRCaW5hcnkocGFyYW1ldGVycy51cmwpO1xuXHRcdFx0XHRcdGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyKTtcblx0XHRcdFx0XHRjb25zdCBkb2N1bWVudCA9IGF3YWl0IHBkZmpzLmdldERvY3VtZW50KGJ1ZmZlcikucHJvbWlzZTtcblxuXHRcdFx0XHRcdC8vIHBhZ2UgcGFyYW1ldGVyIGFzIHRyaWdnZXIgZm9yIHdob2xlIHBkZiwgMCA9IGFsbCBwYWdlc1xuXHRcdFx0XHRcdGlmICgoPG51bWJlcltdPnBhcmFtZXRlcnMucGFnZSkuaW5jbHVkZXMoMCkpe1xuXHRcdFx0XHRcdFx0dmFyIHBhZ2VzQXJyYXkgPSBbXTtcblx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDE7aSA8PSBkb2N1bWVudC5udW1QYWdlczsgaSsrKXtcblx0XHRcdFx0XHRcdFx0cGFnZXNBcnJheS5wdXNoKGkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cGFyYW1ldGVycy5wYWdlID0gcGFnZXNBcnJheTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvL1JlYWQgcGFnZXNcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHBhZ2VOdW1iZXIgb2YgPG51bWJlcltdPnBhcmFtZXRlcnMucGFnZSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgcGFnZSA9IGF3YWl0IGRvY3VtZW50LmdldFBhZ2UocGFnZU51bWJlcik7XG5cdFx0XHRcdFx0XHRsZXQgaG9zdCA9IGVsO1xuXG5cdFx0XHRcdFx0XHQvLyBDcmVhdGUgaHlwZXJsaW5rIGZvciBQYWdlXG5cdFx0XHRcdFx0XHRpZiAocGFyYW1ldGVycy5saW5rKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGhyZWYgPSBlbC5jcmVhdGVFbChcImFcIik7XG5cdFx0XHRcdFx0XHRcdGhyZWYuaHJlZiA9IHBhcmFtZXRlcnMudXJsICsgXCIjcGFnZT1cIiArIHBhZ2VOdW1iZXI7XG5cdFx0XHRcdFx0XHRcdGhyZWYuY2xhc3NOYW1lID0gXCJpbnRlcm5hbC1saW5rXCI7XG5cblx0XHRcdFx0XHRcdFx0aG9zdCA9IGhyZWY7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEdldCBWaWV3cG9ydFxuXHRcdFx0XHRcdFx0Y29uc3Qgb2Zmc2V0WCA9IE1hdGguZmxvb3IoXG5cdFx0XHRcdFx0XHRcdHBhcmFtZXRlcnMucmVjdFswXSAqIC0xICogcGFyYW1ldGVycy5zY2FsZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGNvbnN0IG9mZnNldFkgPSBNYXRoLmZsb29yKFxuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzLnJlY3RbMV0gKiAtMSAqIHBhcmFtZXRlcnMuc2NhbGVcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIFJlbmRlciBDYW52YXNcblx0XHRcdFx0XHRcdGNvbnN0IGNhbnZhcyA9IGhvc3QuY3JlYXRlRWwoXCJjYW52YXNcIik7XG5cdFx0XHRcdFx0XHRpZiAocGFyYW1ldGVycy5maXQpIHtcblx0XHRcdFx0XHRcdFx0Y2FudmFzLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuXG5cdFx0XHRcdFx0XHRjb25zdCBiYXNlVmlld3BvcnRXaWR0aCA9IHBhZ2UuZ2V0Vmlld3BvcnQoe3NjYWxlOiAxLjB9KS53aWR0aDtcblx0XHRcdFx0XHRcdGNvbnN0IGJhc2VTY2FsZSA9IGNhbnZhcy5jbGllbnRXaWR0aCAvIGJhc2VWaWV3cG9ydFdpZHRoO1xuXG5cdFx0XHRcdFx0XHRjb25zdCB2aWV3cG9ydCA9IHBhZ2UuZ2V0Vmlld3BvcnQoe1xuXHRcdFx0XHRcdFx0XHRzY2FsZTogYmFzZVNjYWxlICogcGFyYW1ldGVycy5zY2FsZSxcblx0XHRcdFx0XHRcdFx0cm90YXRpb246IHBhcmFtZXRlcnMucm90YXRpb24sXG5cdFx0XHRcdFx0XHRcdG9mZnNldFg6IG9mZnNldFgsXG5cdFx0XHRcdFx0XHRcdG9mZnNldFk6IG9mZnNldFksXG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0aWYgKHBhcmFtZXRlcnMucmVjdFsyXSA8IDEpIHtcblx0XHRcdFx0XHRcdFx0Y2FudmFzLmhlaWdodCA9IHZpZXdwb3J0LmhlaWdodDtcblx0XHRcdFx0XHRcdFx0Y2FudmFzLndpZHRoID0gdmlld3BvcnQud2lkdGg7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjYW52YXMuaGVpZ2h0ID0gTWF0aC5mbG9vcihwYXJhbWV0ZXJzLnJlY3RbMl0gKiBwYXJhbWV0ZXJzLnNjYWxlKTtcblx0XHRcdFx0XHRcdFx0Y2FudmFzLndpZHRoID0gTWF0aC5mbG9vcihwYXJhbWV0ZXJzLnJlY3RbM10gKiBwYXJhbWV0ZXJzLnNjYWxlKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgcmVuZGVyQ29udGV4dCA9IHtcblx0XHRcdFx0XHRcdFx0Y2FudmFzQ29udGV4dDogY29udGV4dCxcblx0XHRcdFx0XHRcdFx0dmlld3BvcnQ6IHZpZXdwb3J0LFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGF3YWl0IHBhZ2UucmVuZGVyKHJlbmRlckNvbnRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRlbC5jcmVhdGVFbChcImgyXCIsIHsgdGV4dDogZXJyb3IgfSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgcmVhZFBhcmFtZXRlcnMoanNvblN0cmluZzogc3RyaW5nKSB7XG5cdFx0Ly8gXCJ1cmxcIiA6IFtbZmlsZS5wZGZdXSBpcyBhbiBpbnZhbGlkIGpzb24gc2luY2UgaXQgbWlzc2VzIHF1b3RhdGlvbiBtYXJrcyBpbiB2YWx1ZVxuXHRcdGlmIChqc29uU3RyaW5nLmNvbnRhaW5zKFwiW1tcIikgJiYgIWpzb25TdHJpbmcuY29udGFpbnMoJ1wiW1snKSkge1xuXHRcdFx0anNvblN0cmluZyA9IGpzb25TdHJpbmcucmVwbGFjZShcIltbXCIsICdcIltbJyk7XG5cdFx0XHRqc29uU3RyaW5nID0ganNvblN0cmluZy5yZXBsYWNlKFwiXV1cIiwgJ11dXCInKTtcblx0XHR9XG5cblx0XHRjb25zdCBwYXJhbWV0ZXJzOiBQZGZOb2RlUGFyYW1ldGVycyA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XG5cblx0XHQvL1RyYW5zZm9ybSBpbnRlcm5hbCBMaW5rIHRvIGV4dGVybmFsXG5cdFx0aWYgKHBhcmFtZXRlcnMudXJsLnN0YXJ0c1dpdGgoXCJbW1wiKSkge1xuXHRcdFx0cGFyYW1ldGVycy51cmwgPSBwYXJhbWV0ZXJzLnVybC5zdWJzdHIoMiwgcGFyYW1ldGVycy51cmwubGVuZ3RoIC0gNCk7XG5cdFx0XHRwYXJhbWV0ZXJzLnVybCA9IHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0Rmlyc3RMaW5rcGF0aERlc3QoXG5cdFx0XHRcdHBhcmFtZXRlcnMudXJsLFxuXHRcdFx0XHRcIlwiXG5cdFx0XHQpLnBhdGg7XG5cdFx0fVxuXG5cdFx0aWYgKHBhcmFtZXRlcnMubGluayA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJhbWV0ZXJzLmxpbmsgPSB0aGlzLnNldHRpbmdzLmxpbmtfYnlfZGVmYXVsdDtcblx0XHR9XG5cblx0XHQvL0NvbnZlcnQgUmFuZ2UgKGlmIHByZXNlbnQpIGFuZCBQYWdlIHRvIEFycmF5PFBhZ2U+XG5cdFx0aWYgKHBhcmFtZXRlcnMucmFuZ2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyYW1ldGVycy5wYWdlID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogcGFyYW1ldGVycy5yYW5nZVsxXSAtIHBhcmFtZXRlcnMucmFuZ2VbMF0gKyAxIH0sIChfLCBpKSA9PiBwYXJhbWV0ZXJzLnJhbmdlWzBdICsgaSk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBwYXJhbWV0ZXJzLnBhZ2UgPT09IFwibnVtYmVyXCIpIHtcblx0XHRcdHBhcmFtZXRlcnMucGFnZSA9IFtwYXJhbWV0ZXJzLnBhZ2VdO1xuXHRcdH1cblx0XHRpZiAocGFyYW1ldGVycy5wYWdlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcmFtZXRlcnMucGFnZSA9IFsxXTtcblx0XHR9XG5cblx0XHQvLyBGbGF0dGVuIHJhbmdlc1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5wYWdlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJzLnBhZ2VbaV0pKSB7XG5cdFx0XHRcdGNvbnN0IHJhbmdlID0gcGFyYW1ldGVycy5wYWdlLnNwbGljZShpLCAxKVswXSBhcyBBcnJheTxudW1iZXI+O1xuXHRcdFx0XHRmb3IgKGxldCBqID0gcmFuZ2VbMF07IGogPD0gcmFuZ2VbMV07IGorKykge1xuXHRcdFx0XHRcdHBhcmFtZXRlcnMucGFnZS5zcGxpY2UoaSwgMCwgaik7XG5cdFx0XHRcdFx0aSArPSAxO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0cGFyYW1ldGVycy5zY2FsZSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRwYXJhbWV0ZXJzLnNjYWxlIDwgMC4xIHx8XG5cdFx0XHRwYXJhbWV0ZXJzLnNjYWxlID4gMTAuMFxuXHRcdCkge1xuXHRcdFx0cGFyYW1ldGVycy5zY2FsZSA9IDEuMDtcblx0XHR9XG5cblx0XHRpZiAocGFyYW1ldGVycy5maXQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyYW1ldGVycy5maXQgPSB0aGlzLnNldHRpbmdzLmZpdF9ieV9kZWZhdWx0O1xuXHRcdH1cblxuXHRcdGlmIChwYXJhbWV0ZXJzLnJvdGF0aW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcmFtZXRlcnMucm90YXRpb24gPSAwO1xuXHRcdH1cblxuXHRcdGlmIChwYXJhbWV0ZXJzLnJlY3QgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyYW1ldGVycy5yZWN0ID0gWzAsIDAsIDAsIDBdO1xuXHRcdH1cblx0XHRyZXR1cm4gcGFyYW1ldGVycztcblx0fVxuXG5cdG9udW5sb2FkKCkge1xuXHRcdGNvbnNvbGUubG9nKFwidW5sb2FkaW5nIEJldHRlciBQREYgcGx1Z2luLi4uXCIpO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiU2V0dGluZyIsIlBsdWdpblNldHRpbmdUYWIiLCJ0aGlzIiwicmVxdWlyZSIsInJlcXVpcmUkJDAiLCJyZXF1aXJlJCQxIiwicmVxdWlyZSQkMiIsInJlcXVpcmUkJDMiLCJyZXF1aXJlJCQ0IiwicGRmanMuR2xvYmFsV29ya2VyT3B0aW9ucyIsInBkZmpzLmdldERvY3VtZW50IiwiUGx1Z2luIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGFBQWEsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbkMsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLGNBQWM7QUFDekMsU0FBUyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsWUFBWSxLQUFLLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3BGLFFBQVEsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFHLElBQUksT0FBTyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQztBQUNGO0FBQ08sU0FBUyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNoQyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssVUFBVSxJQUFJLENBQUMsS0FBSyxJQUFJO0FBQzdDLFFBQVEsTUFBTSxJQUFJLFNBQVMsQ0FBQyxzQkFBc0IsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsK0JBQStCLENBQUMsQ0FBQztBQUNsRyxJQUFJLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEIsSUFBSSxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDM0MsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pGLENBQUM7QUF1Q0Q7QUFDTyxTQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUU7QUFDN0QsSUFBSSxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEtBQUssWUFBWSxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLFVBQVUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDaEgsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUU7QUFDL0QsUUFBUSxTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ25HLFFBQVEsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ3RHLFFBQVEsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ3RILFFBQVEsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzlFLEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNEO0FBQ08sU0FBUyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUMzQyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckgsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxNQUFNLEtBQUssVUFBVSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3SixJQUFJLFNBQVMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sVUFBVSxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RFLElBQUksU0FBUyxJQUFJLENBQUMsRUFBRSxFQUFFO0FBQ3RCLFFBQVEsSUFBSSxDQUFDLEVBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ3RFLFFBQVEsT0FBTyxDQUFDLEVBQUUsSUFBSTtBQUN0QixZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pLLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRCxZQUFZLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6QixnQkFBZ0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTTtBQUM5QyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3hFLGdCQUFnQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO0FBQ2pFLGdCQUFnQixLQUFLLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxTQUFTO0FBQ2pFLGdCQUFnQjtBQUNoQixvQkFBb0IsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRTtBQUNoSSxvQkFBb0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUMxRyxvQkFBb0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3pGLG9CQUFvQixJQUFJLENBQUMsSUFB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LElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQzdCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUMzQixJQUFJLE1BQU0sT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEQsSUFBSSxNQUFNLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xELElBQUksSUFBSSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7QUFDM0MsSUFBSSxRQUFRLElBQUksR0FBRyxDQUFDO0FBQ3BCO0FBQ0EsSUFBSSxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUU7QUFDdEIsTUFBTSxRQUFRLElBQUksR0FBRyxDQUFDO0FBQ3RCLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxRQUFRO0FBQ3BCLE1BQU0sS0FBSyxHQUFHO0FBQ2QsUUFBUSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckIsUUFBUSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNwQixRQUFRLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDcEIsUUFBUSxNQUFNO0FBQ2Q7QUFDQSxNQUFNLEtBQUssRUFBRTtBQUNiLFFBQVEsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNwQixRQUFRLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDcEIsUUFBUSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNwQixRQUFRLE1BQU07QUFDZDtBQUNBLE1BQU0sS0FBSyxHQUFHO0FBQ2QsUUFBUSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsT0FBTyxHQUFHLENBQUMs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Q0FBQyxDQUFDO0FBQ3RELElBQUksSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN2QyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUMxQyxJQUFJLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDeEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFDOUMsSUFBSSxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzFDLElBQUksTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksTUFBTSxJQUFJLEVBQUUsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELElBQUksSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxQyxJQUFJLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLE1BQU0sSUFBSSxFQUFFLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN0RCxJQUFJLE1BQU0scUJBQXFCLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUNwRCxJQUFJLElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDOUMsSUFBSSxVQUFVLEdBQUcsVUFBVSxJQUFJLENBQUMsSUFBSSxVQUFVLElBQUksRUFBRSxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDdEUsSUFBSSxJQUFJLFlBQVksR0FBRyxRQUFRLENBQUMsT0FBTyxD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QyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdE4sR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzlCLElBQUksTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCxJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3JDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLElBQUksTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzRSxJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1RSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDcEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxP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Q0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2SSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sNkJBQTZCLENBQUMsQ0FBQyxFQUFFO0FBQzFDLElBQUksTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxJQUFJLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUIsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JFLElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDbkMsSUFBSSxNQUFNLEVBQUUsR0FBRyxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNuQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sYUFBYSxDQUFDLElBQUksRUFBRTtBQUM3QixJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUMzQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxF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LENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVHLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFN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QUFDLEVBQUU7QUFDM0IsTUFBTSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0IsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDL0IsTUFBTSxVQUFVLEVBQUUsSUFBSSxLQUFLLENBQUMsdUJBQXVCLEdBQUc7QUFDdEQsTUFBTSxJQUFJLEVBQUUsSUFBSTtBQUNoQixNQUFNLFFBQVEsRUFBRSxLQUFLO0FBQ3JCLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFRLEdBQUcsSUFBSSxFQUFFO0FBQzlCLElBQUksSUFBSSxRQUFRLEVBQUU7QUFDbEIsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9EO0FBQ0EsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEM7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFO0FBQy9CLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLDBDQUEwQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdFLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRTtBQUNiLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQyxJQUFJLE9BQU8sR0FBRyxFQUFFLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDbEMsR0FBRztBQUNIO0FBQ0EsRUFBRSxP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QUFDSjtBQUNBLEVBQUUsR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzlDLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0FBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QztBQUNBLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsQyxHQUFHLENBQUM7QUFDSjtBQUNBLEVBQUUsR0FBRyxDQUFDLEtBQUssR0FBRyxTQUFTLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RDLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0FBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNkO0FBQ0EsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QixHQUFHLENBQUM7QUFDSjtBQUNBLEVBQUUsR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxF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LElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDckMsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEMsTUFBTSxFQUFFLEtBQUssQ0FBQztBQUNkLEtBQUs7QUFDTDtBQUNBLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN2QixJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEIsSUFBSSxFQUFFLEtBQUssQ0FBQztBQUNaLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN2QixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BCO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzVDLE1BQU0sTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLE1BQU0sRUFBRSxLQUFLLENBQUM7QUFDZCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkU7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFD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Q0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsR0FBRztBQUNIO0FBQ0EsRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNwQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzFELElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2QyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkMsR0FBRztBQUNIO0FBQ0EsRUFBRSxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNuRSxJQUFJLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzdFO0FBQ0EsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFH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QUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3RDLElBQUksTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDckIsTUFBTSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4QixNQUFNLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLE1BQU0sS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEIsS0FBSyxNQUFNLElBQUksS0FBSyxHQUFHLEdBQUcsRUFBRTtBQUM1QixNQUFNLE1BQU0sTUFBTSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDakMsTUFBTSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQzdELE1BQU0sS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUM3RCxNQUFNLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDN0QsS0FBSztBQUNMLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFO0FBQzdELEVBQUUsTUFBTSxNQUFNLEdBQUcsUUFB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RSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZFLEtBQUssTUFBTTtBQUNYLE1BQU0sUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUMsTUFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QyxNQUFNLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLE1BQU0sUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0MsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUMzQyxJQUFJLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDM0MsSUFBSSxZQUFZLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzFELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFB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QUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1RDtBQUNBLE1BQU0sTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakU7QUFDQSxNQUFNLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsTUFBTSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELE1BQU0sTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RCxNQUFNLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFR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LElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3RELElBQUksSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsSUFBSSxLQUFLLE1BQU0sVUFBVSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDNUMsTUFBTSxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUMsTUFBTSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDNUMsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0IsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QixJQUFJLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUN4RSxJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVDLElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkUsSUFBSSxRQUFRLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUNuRCxJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQ2pELElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM5QixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9CO0FBQ0EsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN0QztBQUNBLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQzFCLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sd0JBQXdCLFNBQVMseUJBQXlCLENBQUM7QUFDakUsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQzFCLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3RCLElBQUksSUFBSSxDQUFDLGtCQUFrQixHQUFHLG1CQUFtQixDQUFDO0FBQ2xELElBQUksSUFBSSxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUM7QUFDeEMsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsTUFBTSxzQkFBc0IsU0FBUyxpQkFBaUIsQ0FBQztBQUN2RCxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDMUIsSUFBSSxNQUFNLFlBQVksR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1SixJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7QUFDdEIsTUFBTSxZQUFZO0FBQ2xCLE1BQU0sWUFBWSxFQUFFLElBQUk7QUFDeEIsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sR0FBRztBQUNYLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsaUJBQWlCLENBQUM7QUFDakQ7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUM3QixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6QyxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUMxQixHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxNQUFNLG9CQUFvQixTQUFTLGlCQUFpQixDQUFDO0FBQ3JELEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRTtBQUMxQixJQUFJLE1BQU0sWUFBWSxHQUFHLENBQUMsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVKLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtBQUN0QixNQUFNLFlBQVk7QUFDbEIsTUFBTSxZQUFZLEVBQUUsSUFBSTtBQUN4QixLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksSUFBSSxDQUFDLGtCQUFrQixHQUFHLGVBQWUsQ0FBQztBQUM5QyxJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0FBQ3pDLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxHQUFHO0FBQ1gsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7QUFDdkQsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3REO0FBQ0EsSUFBSSxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDekMsTUFBTSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDdEI7QUFDQSxNQUFNLEtBQUssTUFBTSxVQUFVLElBQUksT0FBTyxFQUFFO0FBQ3hDLFFBQVEsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFFBQVEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQyxNQUFNLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUMxRSxNQUFNLFFBQVEsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzlDLE1BQU0sUUFBUSxDQUFDLFlBQVksQ0FBQyxj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eEMsVUFBVSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDakMsWUFBWSxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEs7QUFDQSxZQUFZLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDNUIsY0FBYyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0QsY0FBYyxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckQ7QUFDQSxjQUFjLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUMsZ0JBQWdCLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELGVBQWU7QUFDZjtBQUNBLGNBQWMsU0FBUyxHQUFHLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUQsYUFBYTtBQUNiO0FBQ0EsWUFBWSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdB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Q0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQzlCLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyRSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDckIsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNwQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDcEIsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3JCLElBQUksTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQzFCLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hELEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQzdCLElBQUksTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLElBQUksTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLElBQUksTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxNQUFNLEdBQUc7QUFDbEIsSUFBSSxPQUFPLFdBQVcsQ0FBQztBQUN2QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDaEMsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0YsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLFNBQVMsQ0FBQyxVQUFVLEVBQUU7QUFDL0IsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3BELEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQzdCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENB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QSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM5QyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDNUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzlDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM1QyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FB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QUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUN6QyxRQUFRLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixRQUFRLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QixPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQ3JELE1BQU0sSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QixNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUNqQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDckMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNiLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNiLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEIsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN2QixNQUFNLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUNqQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDckMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQy9CLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7QUFDdkMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEIsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEI7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDeEMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxD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QUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELE1BQU0sTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RCxNQUFNLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsTUFBTSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELE1BQU0sTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDN0QsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNuRCxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFB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QUNBLE1BQU0sS0FBSyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUU7QUFDNUIsUUFBUSxRQUFRLEVBQUUsR0FBRyxDQUFDO0FBQ3RCLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVM7QUFDbEMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsWUFBWSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQyxZQUFZLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLFlBQVksTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNqQyxZQUFZLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbEMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hHLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU07QUFDL0IsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTTtBQUMvQixZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QyxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPO0FBQ2hDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUIsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QixZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25CLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVE7QUFDakMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RHLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUIsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QixZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkIsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUTtBQUNqQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUIsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRixZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkIsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUssQ0FBQyxHQUFHLENB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QUU7QUFDM0IsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ROLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM5QixJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQsSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNwQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8scUJBQXFCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNyQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QyxJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0UsSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUUsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTywwQkFBMEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzFDLElBQUksTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekMsSUFBSSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JELElBQUksTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRCxJQUFJLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEQsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BLLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUU7QUFDN0IsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3hILEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2hDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkksR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLDZCQUE2QixDQUFDLENBQUMsRUFBRTtBQUMxQyxJQUFJLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxD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QUFFO0FBQ3RCLFVBQVUsTUFBTSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDO0FBQzNDO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2hDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ25CLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUIsT0FBTyxNQUFNO0FBQ2IsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDdEMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9DLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1QixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUU7QUFDL0IsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFO0FBQ2pDLFVBQVUsU0FBUztBQUNuQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzVCLFVBQVUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLFNBQVM7QUFDakIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDO0FBQ0EsTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUU7QUFDcEIsUUFBUSxTQUFTO0FBQ2pCLE9BQU87QUFDUDtBQUNBLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyQztBQUNBLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDNUIsUUFBUSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLE9BQU87QUFDUDtBQUNBLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyQztBQUNBLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDNUIsUUFBUSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNO0FBQzFCLFFBQVEsRUFBRSxDQUFDO0FBQ1gsSUFBSSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUM7QUFDbkI7QUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDaEIsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckcsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckcsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN6QixJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzdCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDN0IsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNuRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RyxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNwQixNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVB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QU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ251SixPQUFPLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7QUFDaEQsTUFBTSxrQkFBa0IsR0FBRztBQUMzQixFQUFFLFVBQVUsRUFBRSxNQUFNO0FBQ3BCLEVBQUUsT0FBTyxFQUFFLE1BQU07QUFDakIsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO0FBQ2hELE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2p4SixPQUFPLENBQUMsd0JBQXdCLEdBQUcsd0JBQXdCLENBQUM7QUFDNUQsTUFBTSx3QkFBd0IsR0FBRztBQUNqQyxFQUFFLFVBQVUsRUFBRSxNQUFNO0FBQ3BCLEVBQUUsT0FBTyxFQUFFLE1BQU07QUFDakIsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLHdCQUF3QixHQUFHLHdCQUF3QixDQUFDO0FBQzVELE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xzSixPQUFPLENBQUMsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUM7QUFDcEQsTUFBTSxvQkFBb0IsR0FBRztBQUM3QixFQUFFLFVBQVUsRUFBRSxNQUFNO0FBQ3BCLEVBQUUsT0FBTyxFQUFFLE1BQU07QUFDakIsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDO0FBQ3BELE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzV2SixPQUFPLENBQUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUM7QUFDdEQsTUFBTSxxQkFBcUIsR0FBRztBQUM5QixFQUFFLFVBQVUsRUFBRSxNQUFNO0FBQ3BCLEVBQUUsT0FBTyxFQUFFLE1BQU07QUFDakIsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO0FBQ3REO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTyxDQUFDLHVCQUF1QixFQUFFLE9BQU8sS0FBSztBQUM3QztBQUNBO0FBQ0E7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUc7QUFDOUMsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUNiLENBQUMsRUFBRSxDQUFDO0FBQ0osT0FBTyxDQUFDLHVCQUF1QixHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsR0FBRyxPQUFPLENBQUMsc0JBQXNCLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUMsMEJBQTBCLEdBQUcsT0FBTyxDQUFDLDBCQUEwQixHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNyUixNQUFNLG9CQUFvQixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4akwsT0FBTyxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDO0FBQ3BELE1BQU0sb0JBQW9CLEdBQUc7QUFDN0IsRUFBRSxVQUFVLEVBQUUsR0FBRztBQUNqQixFQUFFLE9BQU8sRUFBRSxHQUFHO0FBQ2QsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDO0FBQ3BELE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2prTCxPQUFPLENBQUMsMEJBQTBCLEdBQUcsMEJBQTBCLENBQUM7QUFDaEUsTUFBTSwwQkFBMEIsR0FBRztBQUNuQyxFQUFFLFVBQVUsRUFBRSxJQUFJO0FBQ2xCLEVBQUUsT0FBTyxFQUFFLEdBQUc7QUFDZCxDQUFDLENBQUM7QUFDRixPQUFPLENBQUMsMEJBQTBCLEdBQUcsMEJBQTBCLENBQUM7QUFDaEUsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDLzZLLE9BQU8sQ0FBQyxzQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztBQUN4RCxNQUFNLHNCQUFzQixHQUFHO0FBQy9CLEVBQUUsVUFBVSxFQUFFLElBQUk7QUFDbEIsRUFBRSxPQUFPLEVBQUUsR0FBRztBQUNkLENBQUMsQ0FBQztBQUNGLE9BQU8sQ0FBQyxzQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztBQUN4RCxNQUFNLHVCQUF1QixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwM0ssT0FBTyxDQUFDLHVCQUF1QixHQUFHLHVCQUF1QixDQUFDO0FBQzFELE1BQU0sdUJBQXVCLEdBQUc7QUFDaEMsRUFBRSxVQUFVLEVBQUUsR0FBRztBQUNqQixFQUFFLE9BQU8sRUFBRSxHQUFHO0FBQ2QsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLHVCQUF1QixHQUFHLHVCQUF1QixDQUFDO0FBQzFEO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTyxDQUFDLHVCQUF1QixFQUFFLE9BQU8sS0FBSztBQUM3QztBQUNBO0FBQ0E7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUc7QUFDOUMsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUNiLENBQUMsRUFBRSxDQUFDO0FBQ0osT0FBTyxDQUFDLDJCQUEyQixHQUFHLE9BQU8sQ0FBQyw0QkFBNEIsR0FBRyxPQUFPLENBQUMsMEJBQTBCLEdBQUcsT0FBTyxDQUFDLDJCQUEyQixHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsR0FBRyxPQUFPLENBQUMseUJBQXlCLEdBQUcsT0FBTyxDQUFDLDhCQUE4QixHQUFHLE9BQU8sQ0FBQywrQkFBK0IsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUN6VCxNQUFNLHdCQUF3QixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsNEcsT0FBTyxDQUFDLHdCQUF3QixHQUFHLHdCQUF3QixDQUFDO0FBQzVELE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2aEgsT0FBTyxDQUFDLHlCQUF5QixHQUFHLHlCQUF5QixDQUFDO0FBQzlELE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3Q0RyxPQUFPLENBQUMsOEJBQThCLEdBQUcsOEJBQThCLENBQUM7QUFDeEUsTUFBTSwrQkFBK0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdoSCxPQUFPLENBQUMsK0JBQStCLEdBQUcsK0JBQStCLENBQUM7QUFDMUUsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDajRHLE9BQU8sQ0FBQywwQkFBMEIsR0FBRywwQkFBMEIsQ0FBQztBQUNoRSxNQUFNLDJCQUEyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDemhILE9BQU8sQ0FBQywyQkFBMkIsR0FBRywyQkFBMkIsQ0FBQztBQUNsRSxNQUFNLDJCQUEyQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwNEcsT0FBTyxDQUFDLDJCQUEyQixHQUFHLDJCQUEyQixDQUFDO0FBQ2xFLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxaEgsT0FBTyxDQUFDLDRCQUE0QixHQUFHLDRCQUE0QixDQUFDO0FBQ3BFO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTyxDQUFDLHVCQUF1QixFQUFFLE9BQU8sS0FBSztBQUM3QztBQUNBO0FBQ0E7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUc7QUFDOUMsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUNiLENBQUMsRUFBRSxDQUFDO0FBQ0osT0FBTyxDQUFDLHVCQUF1QixHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsR0FBRyxPQUFPLENBQUMsc0JBQXNCLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUMsMEJBQTBCLEdBQUcsT0FBTyxDQUFDLDBCQUEwQixHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNyUixNQUFNLG9CQUFvQixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuN0ksT0FBTyxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDO0FBQ3BELE1BQU0sb0JBQW9CLEdBQUc7QUFDN0IsRUFBRSxVQUFVLEVBQUUsR0FBRztBQUNqQixFQUFFLE9BQU8sRUFBRSxHQUFHO0FBQ2QsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDO0FBQ3BELE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzk5SSxPQUFPLENBQUMsMEJBQTBCLEdBQUcsMEJBQTBCLENBQUM7QUFDaEUsTUFBTSwwQkFBMEIsR0FBRztBQUNuQyxFQUFFLFVBQVUsRUFBRSxHQUFHO0FBQ2pCLEVBQUUsT0FBTyxFQUFFLEdBQUc7QUFDZCxDQUFDLENBQUM7QUFDRixPQUFPLENBQUMsMEJBQTBCLEdBQUcsMEJBQTBCLENBQUM7QUFDaEUsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDejVJLE9BQU8sQ0FBQyxzQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztBQUN4RCxNQUFNLHNCQUFzQixHQUFHO0FBQy9CLEVBQUUsVUFBVSxFQUFFLEdBQUc7QUFDakIsRUFBRSxPQUFPLEVBQUUsR0FBRztBQUNkLENBQUMsQ0FBQztBQUNGLE9BQU8sQ0FBQyxzQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztBQUN4RCxNQUFNLHVCQUF1QixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1NkksT0FBTyxDQUFDLHVCQUF1QixHQUFHLHVCQUF1QixDQUFDO0FBQzFELE1BQU0sdUJBQXVCLEdBQUc7QUFDaEMsRUFBRSxVQUFVLEVBQUUsR0FBRztBQUNqQixFQUFFLE9BQU8sRUFBRSxHQUFHO0FBQ2QsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLHVCQUF1QixHQUFHLHVCQUF1QixDQUFDO0FBQzFEO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTyxDQUFDLHVCQUF1QixFQUFFLE9BQU8sS0FBSztBQUM3QztBQUNBO0FBQ0E7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUc7QUFDOUMsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUNiLENBQUMsRUFBRSxDQUFDO0FBQ0osT0FBTyxDQUFDLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxPQUFPLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLENBQUMsd0JBQXdCLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNyUSxNQUFNLGtCQUFrQixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNyc0osT0FBTyxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO0FBQ2hELE1BQU0sa0JBQWtCLEdBQUc7QUFDM0IsRUFBRSxVQUFVLEVBQUUsT0FBTztBQUNyQixFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO0FBQ2hELE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3J1SixPQUFPLENBQUMsd0JBQXdCLEdBQUcsd0JBQXdCLENBQUM7QUFDNUQsTUFBTSx3QkFBd0IsR0FBRztBQUNqQyxFQUFFLFVBQVUsRUFBRSxPQUFPO0FBQ3JCLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDLENBQUM7QUFDRixPQUFPLENBQUMsd0JBQXdCLEdBQUcsd0JBQXdCLENBQUM7QUFDNUQsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdnZKLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztBQUNwRCxNQUFNLG9CQUFvQixHQUFHO0FBQzdCLEVBQUUsVUFBVSxFQUFFLE9BQU87QUFDckIsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUMsQ0FBQztBQUNGLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztBQUNwRCxNQUFNLHFCQUFxQixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVB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RUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDbG1GLE9BQU8sQ0FBQyx3QkFBd0IsR0FBRyx3QkFBd0IsQ0FBQztBQUM1RDtBQUNBLFNBQVMsV0FBVyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsY0FBYyxHQUFHLEtBQUssRUFBRTtBQUM1RCxFQUFFLFFBQVEsSUFBSTtBQUNkLElBQUksS0FBSyxPQUFPO0FBQ2hCLE1BQU0sSUFBSSxjQUFjLEVBQUU7QUFDMUIsUUFBUSxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO0FBQzVDLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxPQUFPLEtBQUssUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQ2pGO0FBQ0EsSUFBSSxLQUFLLGNBQWM7QUFDdkIsTUFBTSxPQUFPLE9BQU8sS0FBSyxlQUFlLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7QUFDdEc7QUFDQSxJQUFJLEtBQUssVUFBVTtBQUNuQixNQUFNLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7QUFDckM7QUFDQSxJQUFJLEtBQUssVUFBVTtBQUNuQixNQUFNLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7QUFDckM7QUFDQSxJQUFJLEtBQUssY0FBYztBQUN2QixNQUFNLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7QUFDekM7QUFDQSxJQUFJLEtBQUssU0FBUztBQUNsQixNQUFNLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7QUFDcEM7QUFDQSxJQUFJLEtBQUssT0FBTztBQUNoQixNQUFNLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7QUFDbEM7QUFDQSxJQUFJO0FBQ0osTUFBTSxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO0FBQ3BDLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLGdCQUFnQixDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtBQUNsRCxFQUFFLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQzVDLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLE9BQU8sR0FBRyxJQUFJLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUMzRTtBQUNBLEVBQUUsSUFBSSxPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDdEIsSUFBSSxLQUFLLE1BQU0sR0FBRyxJQUFJLGdCQUFnQixFQUFFO0FBQ3hDLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxPQUFPLEVBQUU7QUFDN0MsUUFBUSxPQUFPLEdBQUcsQ0FBQztBQUNuQixPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLCtDQUErQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzFFLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFO0FBQ3hFLEVBQUUsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hELEVBQUUsSUFBSSxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQztBQUN0QyxFQUFFLE1BQU0sY0FBYyxHQUFHLENBQUMsRUFBRSxVQUFVLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNuRTtBQUNBLEVBQUUsSUFBSSxVQUFVLENBQUMsY0FBYyxFQUFFO0FBQ2pDLElBQUksWUFBWSxHQUFHLGVBQWUsQ0FBQztBQUNuQztBQUNBLElBQUksS0FBSyxRQUFRLEdBQUcsQ0FBQyxFQUFFLFFBQVEsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUFFO0FBQ25FLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDM0Q7QUFDQSxNQUFNLElBQUksT0FBTyxJQUFJLENBQUMsRUFBRTtBQUN4QixRQUFRLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUM5QyxPQUFPLE1BQU07QUFDYixRQUFRLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QyxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUcsTUFBTSxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRTtBQUMxQyxJQUFJLFlBQVksR0FBRyxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDNUU7QUFDQSxJQUFJLEtBQUssUUFBUSxHQUFHLENBQUMsRUFBRSxRQUFRLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRTtBQUNuRSxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQzNEO0FBQ0EsTUFBTSxJQUFJLE9BQU8sSUFBSSxDQUFDLEVBQUU7QUFDeEIsUUFBUSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDOUMsT0FBTyxNQUFNO0FBQ2IsUUFBUSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEMsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHLE1BQU0sSUFBSSxjQUFjLEVBQUU7QUFDN0IsSUFBSSxLQUFLLFFBQVEsSUFBSSxlQUFlLEVBQUU7QUFDdEMsTUFBTSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDOUQsS0FBSztBQUNMLEdBQUcsTUFBTTtBQUNULElBQUksWUFBWSxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztBQUMvQztBQUNBLElBQUksS0FBSyxRQUFRLEdBQUcsQ0FBQyxFQUFFLFFBQVEsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUFFO0FBQ25FLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDM0Q7QUFDQSxNQUFNLElBQUksT0FBTyxJQUFJLENBQUMsRUFBRTtBQUN4QixRQUFRLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUM5QyxPQUFPLE1BQU07QUFDYixRQUFRLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QyxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQztBQUM3QyxFQUFFLElBQUksZ0JBQWdCLENBQUM7QUFDdkI7QUFDQSxFQUFFLElBQUksV0FBVyxFQUFFO0FBQ25CLElBQUksS0FBSyxRQUFRLElBQUksV0FBVyxFQUFFO0FBQ2xDLE1BQU0sTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzlDLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUM7QUFDQSxNQUFNLElBQUksT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzFCLFFBQVEsSUFBSSxDQUFDLGdCQUFnQixFQUFFO0FBQy9CLFVBQVUsZ0JBQWdCLEdBQUcsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQztBQUNoRSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDaEY7QUFDQSxRQUFRLElBQUksaUJBQWlCLEtBQUssU0FBUyxFQUFFO0FBQzdDLFVBQVUsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUMxRCxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLE9BQU8sSUFBSSxDQUFDLEVBQUU7QUFDeEIsUUFBUSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDOUMsT0FBTyxNQUFNO0FBQ2IsUUFBUSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEMsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8saUJBQWlCLENBQUM7QUFDM0IsQ0FBQztBQUNEO0FBQ0EsU0FBUyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUU7QUFDakMsRUFBRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUNEO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTyxDQUFDLHVCQUF1QixFQUFFLE9BQU8sS0FBSztBQUM3QztBQUNBO0FBQ0E7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUc7QUFDOUMsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUNiLENBQUMsRUFBRSxDQUFDO0FBQ0osT0FBTyxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUMzSyxPQUFPLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUNsQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUs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RSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3h0RixNQUFNLGdCQUFnQixHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMzMEUsT0FBTyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0FBQzVDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ254RCxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7QUFDNUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQy8wRSxPQUFPLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztBQUMxQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDcDhFLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztBQUM5QyxNQUFNLG9CQUFvQixHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxF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QU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLE9BQU87QUFDVCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLE9BQU87QUFDVCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLEdBQUc7QUFDTCxFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7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QUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFB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O0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsSUFBSTtBQUNOLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsR0FBRztBQUNMLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsSUFBSTtBQUNOLEVBQUUsTUFBTTtBQUNSLEVBQUUsR0FBRztBQUNMLEVBQUUsTUFBTTtBQUNSLEVBQUUsSUFBSTtBQUNOLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLElBQUk7QUFDTixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLElBQUk7QUFDTixFQUFFLE1BQU07QUFDUixFQUFFLEdBQUc7QUFDTCxFQUFFLE1BQU07QUFDUixFQUFFLElBQUk7QUFDTixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLHlCQUF5QjtBQUMzQixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLHNCQUFzQjtBQUN4QixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLE9BQU87QUFDVCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGVBQWU7QUFDakIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsSUFBSTtBQUNOLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxPQUFPO0FBQ1QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLGVBQWU7QUFDakIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxPQUFPO0FBQ1QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsR0FBRztBQUNMLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsSUFBSTtBQUNOLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLEdBQUc7QUFDTCxFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLEdBQUc7QUFDTCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxLQUFLO0FBQ1AsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSx3QkFBd0I7QUFDMUIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxHQUFHO0FBQ0wsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFB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QU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLEdBQUc7QUFDTCxFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLElBQUk7QUFDTixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLEdBQUc7QUFDTCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxzQkFBc0I7QUFDeEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxPQUFPO0FBQ1QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsd0JBQXdCO0FBQzFCLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMkJBQTJCO0FBQzdCLEVBQUUsTUFBTTtBQUNSLEVBQUUsR0FBRztBQUNMLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsR0FBRztBQUNMLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMEJBQTBCO0FBQzVCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsZUFBZTtBQUNqQixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsSUFBSTtBQUNOLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMkJBQTJCO0FBQzdCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMkJBQTJCO0FBQzdCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMkJBQTJCO0FBQzdCLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsd0JBQXdCO0FBQzFCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMEJBQTBCO0FBQzVCLEVBQUUsTUFBTTtBQUNSLEVBQUUseUJBQXlCO0FBQzNCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNS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LE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFF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LEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsR0FBRztBQUNMLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsSUFBSTtBQUNOLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsSUFBSTtBQUNOLEVBQUUsTUFBTTtBQUNSLEVBQUUsZUFBZTtBQUNqQixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsZUFBZTtBQUNqQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSw0QkFBNEI7QUFDOUIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxzQkFBc0I7QUFDeEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsZUFBZTtBQUNqQixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsSUFBSTtBQUNOLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsNEJBQTRCO0FBQzlCLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLGVBQWU7QUFDakIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxzQkFBc0I7QUFDeEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLGVBQWU7QUFDakIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxtQkFBbUI7QUFDckIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxPQUFPO0FBQ1QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxHQUFHO0FBQ0wsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxPQUFPO0FBQ1QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLHVCQUF1QjtBQUN6QixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxPQUFPO0FBQ1QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxPQUFPO0FBQ1QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxtQkFBbUI7QUFDckIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxNQUFNO0FBQ1IsRUFBRSx1QkFBdUI7QUFDekIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSx3QkFBd0I7QUFDMUIsRUFBRSxNQUFNO0FBQ1IsRUFBRSw2QkFBNkI7QUFDL0IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxtQkFBbUI7QUFDckIsRUFBRSxNQUFNO0FBQ1IsRUFBRSwyQkFBMkI7QUFDN0IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxTQUFTO0FBQ1gsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxPQUFPO0FBQ1QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGVBQWU7QUFDakIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLEdBQUc7QUFDTCxFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxtQkFBbUI7QUFDckIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSx3QkFBd0I7QUFDMUIsRUFBRSxNQUFNO0FBQ1IsRUFBRSx5QkFBeUI7QUFDM0IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxzQkFBc0I7QUFDeEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsZUFBZTtBQUNqQixFQUFFLE1BQU07QUFDUixFQUFFLGVBQWU7QUFDakIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxtQkFBbUI7QUFDckIsRUFBRSxNQUFNO0FBQ1IsRUFBRSx5QkFBeUI7QUFDM0IsRUFBRSxNQUFNO0FBQ1IsRUFBRSwwQkFBMEI7QUFDNUIsRUFBRSxNQUFNO0FBQ1IsRUFBRSx1QkFBdUI7QUFDekIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSx3QkFBd0I7QUFDMUIsRUFBRSxNQUFNO0FBQ1IsRUFBRSx5QkFBeUI7QUFDM0IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxzQkFBc0I7QUFDeEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxTQUFTO0FBQ1gsRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxJQUFJO0FBQ04sRUFBRSxNQUFNO0FBQ1IsRUFBRSxPQUFPO0FBQ1QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxzQkFBc0I7QUFDeEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxzQkFBc0I7QUFDeEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSwwQkFBMEI7QUFDNUIsRUFBRSxNQUFNO0FBQ1IsRUFBRSw2QkFBNkI7QUFDL0IsRUFBRSxNQUFNO0FBQ1IsRUFBRSx3QkFBd0I7QUFDMUIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSx1QkFBdUI7QUFDekIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsZUFBZTtBQUNqQixFQUFFLE1BQU07QUFDUixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLE9BQU87QUFDVCxFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLE9BQU87QUFDVCxFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUseUJBQXlCO0FBQzNCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsZUFBZTtBQUNqQixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLE9BQU87QUFDVCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsSUFBSTtBQUNOLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsR0FBRztBQUNMLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMEJBQTBCO0FBQzVCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUseUJBQXlCO0FBQzNCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0NBQWdDO0FBQ2xDLEVBQUUsTUFBTTtBQUNSLEVBQUUsMEJBQTBCO0FBQzVCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsNEJBQTRCO0FBQzlCLEVBQUUsTUFBTTtBQUNSLEVBQUUsNEJBQTRCO0FBQzlCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMEJBQTBCO0FBQzVCLEVBQUUsTUFBTTtBQUNSLEVBQUUsNEJBQTRCO0FBQzlCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMkJBQTJCO0FBQzdCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMEJBQTBCO0FBQzVCLEVBQUUsTUFBTTtBQUNSLEVBQUUsd0JBQXdCO0FBQzFCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMkJBQTJCO0FBQzdCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsd0JBQXdCO0FBQzFCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMkJBQTJCO0FBQzdCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMEJBQTBCO0FBQzVCLEVBQUUsTUFBTTtBQUNSLEVBQUUsd0JBQXdCO0FBQzFCLEVBQUUsTUFBTTtBQUNSLEVBQUUseUJBQXlCO0FBQzNCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUseUJBQXlCO0FBQzNCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUseUJBQXlCO0FBQzNCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMkJBQTJCO0FBQzdCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsSUFBSTtBQUNOLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsMkJBQTJCO0FBQzdCLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxTQUFTO0FBQ1gsRUFBRSxNQUFNO0FBQ1IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUseUJBQXlCO0FBQzNCLEVBQUUsTUFBTTtBQUNSLEVBQUUsZUFBZTtBQUNqQixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLHlCQUF5QjtBQUMzQixFQUFFLE1BQU07QUFDUixFQUFFLEdBQUc7QUFDTCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxtQkFBbUI7QUFDckIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxTQUFTO0FBQ1gsRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsR0FBRztBQUNMLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsZUFBZTtBQUNqQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLE9BQU87QUFDVCxFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLHVCQUF1QjtBQUN6QixFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLE1BQU07QUFDUixFQUFFLGVBQWU7QUFDakIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxtQkFBbUI7QUFDckIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQ0FBZ0M7QUFDbEMsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSw4QkFBOEI7QUFDaEMsRUFBRSxNQUFNO0FBQ1IsRUFBRSwwQkFBMEI7QUFDNUIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxTQUFTO0FBQ1gsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxzQkFBc0I7QUFDeEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxPQUFPO0FBQ1QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxtQkFBbUI7QUFDckIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsZUFBZTtBQUNqQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGVBQWU7QUFDakIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxzQkFBc0I7QUFDeEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxTQUFTO0FBQ1gsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxHQUFHO0FBQ0wsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSw4QkFBOEI7QUFDaEMsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQ0FBaUM7QUFDbkMsRUFBRSxNQUFNO0FBQ1IsRUFBRSw4QkFBOEI7QUFDaEMsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQ0FBaUM7QUFDbkMsRUFBRSxNQUFNO0FBQ1IsRUFBRSx1QkFBdUI7QUFDekIsRUFBRSxNQUFNO0FBQ1IsRUFBRSw4QkFBOEI7QUFDaEMsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQ0FBaUM7QUFDbkMsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUseUJBQXlCO0FBQzNCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUseUJBQXlCO0FBQzNCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLE1BQU07QUFDUixFQUFFLGVBQWU7QUFDakIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsZUFBZTtBQUNqQixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxJQUFJO0FBQ04sRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxJQUFJO0FBQ04sRUFBRSxNQUFNO0FBQ1IsRUFBRSxTQUFTO0FBQ1gsRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMkJBQTJCO0FBQzdCLEVBQUUsTUFBTTtBQUNSLEVBQUUsd0JBQXdCO0FBQzFCLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLE9BQU87QUFDVCxFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGVBQWU7QUFDakIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxTQUFTO0FBQ1gsRUFBRSxNQUFNO0FBQ1IsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxTQUFTO0FBQ1gsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxTQUFTO0FBQ1gsRUFBRSxNQUFNO0FBQ1IsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMEJBQTBCO0FBQzVCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsR0FBRztBQUNMLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLHdCQUF3QjtBQUMxQixFQUFFLE1BQU07QUFDUixFQUFFLHlCQUF5QjtBQUMzQixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLE1BQU07QUFDUixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLGVBQWU7QUFDakIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxtQkFBbUI7QUFDckIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxtQkFBbUI7QUFDckIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsZUFBZTtBQUNqQixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxtQkFBbUI7QUFDckIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSx1QkFBdUI7QUFDekIsRUFBRSxNQUFNO0FBQ1IsRUFBRSx3QkFBd0I7QUFDMUIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLE1BQU07QUFDUixFQUFFLHdCQUF3QjtBQUMxQixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLE9BQU87QUFDVCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLDRCQUE0QjtBQUM5QixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLE9BQU87QUFDVCxFQUFFLE1BQU07QUFDUixFQUFFLGVBQWU7QUFDakIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLElBQUk7QUFDTixFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLGVBQWU7QUFDakIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLEdBQUc7QUFDTCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLE9BQU87QUFDVCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLDRCQUE0QjtBQUM5QixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLHNCQUFzQjtBQUN4QixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsSUFBSTtBQUNOLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsZUFBZTtBQUNqQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLHVCQUF1QjtBQUN6QixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLHVCQUF1QjtBQUN6QixFQUFFLE1BQU07QUFDUixFQUFFLHdCQUF3QjtBQUMxQixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLHVCQUF1QjtBQUN6QixFQUFFLE1BQU07QUFDUixFQUFFLHdCQUF3QjtBQUMxQixFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxtQkFBbUI7QUFDckIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsSUFBSTtBQUNOLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLGVBQWU7QUFDakIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsR0FBRztBQUNMLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUseUJBQXlCO0FBQzNCLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMEJBQTBCO0FBQzVCLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNS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O0FBQ1gsRUFBRSxNQUFNO0FBQ1IsRUFBRSxPQUFPO0FBQ1QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxPQUFPO0FBQ1QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSx1QkFBdUI7QUFDekIsRUFBRSxNQUFNO0FBQ1IsRUFBRSx3QkFBd0I7QUFDMUIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxPQUFPO0FBQ1QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxPQUFPO0FBQ1QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSw4QkFBOEI7QUFDaEMsRUFBRSxNQUFNO0FBQ1IsRUFB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RUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxzQkFBc0I7QUFDeEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxzQkFBc0I7QUFDeEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSx1QkFBdUI7QUFDekIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSx1QkFBdUI7QUFDekIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxzQkFBc0I7QUFDeEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSx1QkFBdUI7QUFDekIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxLQUFLO0FBQ1AsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFN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QUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLHlCQUF5QjtBQUMzQixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLHlCQUF5QjtBQUMzQixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLE1BQU07QUFDUixFQUFFLEdBQUc7QUFDTCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsZUFBZTtBQUNqQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLHlCQUF5QjtBQUMzQixFQUFFLE1BQU07QUFDUixFQUFFLHlCQUF5QjtBQUMzQixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLHlCQUF5QjtBQUMzQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLEdBQUc7QUFDTCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLHdCQUF3QjtBQUMxQixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFD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QUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsd0JBQXdCO0FBQzFCLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMkJBQTJCO0FBQzdCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsMEJBQTBCO0FBQzVCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsR0FBRztBQUNMLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFB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QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLElBQUk7QUFDTixFQUFFLE1BQU07QUFDUixFQUFFLElBQUk7QUFDTixFQUFFLE1BQU07QUFDUixFQUFFLElBQUk7QUFDTixFQUFFLE1BQU07QUFDUixFQUFFLElBQUk7QUFDTixFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUNIO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLENBQUMsdUJBQXVCLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEtBQUs7QUFDOUU7QUFDQSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUMzQyxxQkFBcUIsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixFQUFFO0FBQ2hFLHVCQUF1Qix1QkFBdUIsRUFBRSxxQkFBcUIscUJBQXFCLENBQUM7QUFDM0YsdUJBQXVCLG9CQUFvQixFQUFFLHFCQUFxQixrQkFBa0IsQ0FBQztBQUNyRix1QkFBdUIsb0JBQW9CLEVBQUUscUJBQXFCLGtCQUFrQixDQUFDO0FBQ3JGLHVCQUF1Qix5QkFBeUIsRUFBRSxxQkFBcUIsdUJBQXVCLENBQUM7QUFDL0YsdUJBQXVCLGNBQWMsRUFBRSxxQkFBcUIsWUFBWSxDQUFDO0FBQ3pFLHNCQUFzQixDQUFDLENBQUM7QUFDeEIscUJBQXFCLElBQUksMkNBQTJDLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUY7QUFDQSxNQUFNLG9CQUFvQixHQUFHLElBQUcsMkNBQTJDLENBQUMscUJBQXFCLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDaEgsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUM7QUFDSCxTQUFTLHVCQUF1QixDQUFDLElBQUksRUFBRTtBQUN2QyxDQUFDLElBQUksSUFBSSxJQUFJLE1BQU0sSUFBSSxJQUFJLElBQUksTUFBTSxFQUFFO0FBQ3ZDLEVBQUUs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ZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsT0FBTztBQUNoQixFQUFFLEdBQUcsRUFBRSxPQUFPO0FBQ2QsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE9BQU87QUFDaEIsRUFBRSxH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LEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsMEJBQTBCO0FBQzVCLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsUUFBUTtBQUNWLEVBQUUsMEJBQTBCO0FBQzVCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDRDQUE0QztBQUM5QyxFQUFFLFFBQVE7QUFDVixFQUFFLHNDQUFzQztBQUN4QyxFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsUUFBUTtBQUNWLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsUUFBUTtBQUNWLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixF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QUM7QUFDUCxHQUFHLENBQUMsQ0FBQztBQUNMLENBQUM7QUFDRDtBQUNBLFNBQVMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7QUFDaEQsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkY7QUFDQSxFQUFFLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO0FBQ3RDLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3JELEVBQUUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNyRCxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQztBQUNsRixDQUFDO0FBQ0Q7QUFDQSxNQUFNLFVBQVUsQ0FBQztBQUNqQixFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUU7QUFDdEIsSUFBSSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQzdCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUMzQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzdDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QixJQUFJLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUN2QjtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ3pCLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzFDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksR0FBRztBQUNoQixNQUFNLGVBQWUsRUFBRSxJQUFJLENBQUMsS0FBSztBQUNqQyxNQUFNLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztBQUNuQyxNQUFNLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztBQUN2QixNQUFNLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtBQUMzQyxNQUFNLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztBQUNuQyxNQUFNLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUztBQUNqQyxNQUFNLGFBQWEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVU7QUFDdEMsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7QUFDbkIsTUFBTSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO0FBQzdDLE1BQU0sSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTO0FBQzFCLE1BQU0sT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO0FBQzdCLE1BQU0sWUFBWSxFQUFFLEtBQUs7QUFDekIsS0FBSyxDQUFDO0FBQ047QUFDQSxJQUFJLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRTtBQUM5QixNQUFNLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEM7QUFDQSxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUMvQixRQUFRLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUMxQjtBQUNBLFFBQVEsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7QUFDaEMsVUFBVSxJQUFJLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTtBQUMzQyxZQUFZLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDeEMsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUNqQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNwQyxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDOUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0QsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO0FBQzdDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztBQUNsQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3hCLElBQUksT0FBTyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzVCLEdBQUc7QUFDSDtBQUNBLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRTtBQUNyQixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2SCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUU7QUFDdEIsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3JILEdBQUc7QUFDSDtBQUNBLEVBQUUsWUFBWSxDQUFDLGlCQUFpQixFQUFFO0FBQ2xDLElBQUksTUFBTSxZQUFZLEdBQUcsaUJBQWlCLElBQUksaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEY7QUFDQSxJQUFJLElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO0FBQzNELE1BQU0sT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7QUFDbEMsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwRixHQUFHO0FBQ0g7QUFDQSxFQUFFLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRTtBQUNuQyxJQUFJLE1BQU0sWUFBWSxHQUFHLGlCQUFpQixJQUFJLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xGO0FBQ0EsSUFBSSxJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtBQUMxRCxNQUFNLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQztBQUNoQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUMxQixHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksUUFBUSxHQUFHO0FBQ2pCLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUU7QUFDdkMsTUFBTSxPQUFPLEtBQUssQ0FBQztBQUNuQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDMUIsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEMsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLFNBQVMsR0FBRztBQUNsQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO0FBQ3ZDLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFDbkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQzFCLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFDbkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pDLEdBQUc7QUFDSDtBQUNBLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxFQUFFO0FBQzNCLElBQUksTUFBTSxHQUFHLEdBQUcsT0FBTyxJQUFJLEtBQUssUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuRixJQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzFFLElBQUksT0FBTztBQUNYLE1BQU0sR0FBRztBQUNULE1BQU0sR0FBRztBQUNULEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRTtBQUNsQixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pELEdBQUc7QUFDSDtBQUNBLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRTtBQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZELEdBQUc7QUFDSDtBQUNBLEVBQUUsbUJBQW1CLENBQUMsZ0JBQWdCLEVBQUU7QUFDeEMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLEdBQUcsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0FBQzVGLEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRTtBQUNsQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDbEUsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ2hCLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0MsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLENBQUMsU0FBUyxFQUFFO0FBQzFCLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzVELE1BQU0sSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMzRCxLQUFLLE1BQU07QUFDWCxNQUFNLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwQyxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFO0FBQ2xCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEMsR0FBRztBQUNIO0FBQ0EsRUFBRSw0QkFBNEIsQ0FBQyxFQUFFLEVBQUU7QUFDbkMsSUFBSSxJQUFJLEVBQUUsWUFBWSxXQUFXLENBQUMsSUFBSSxFQUFFO0FBQ3hDLE1BQU0sSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM5RCxNQUFNLElBQUksQ0FBQyxlQUFlLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbEUsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBQ3JELEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLGNBQWMsQ0FBQyxXQUFXLEVBQUU7QUFDOUIsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUkscUJBQXFCLEVBQUUsQ0FBQztBQUNuRDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsRUFBRTtBQUMvQyxNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUMvQixNQUFNLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekMsTUFBTSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDO0FBQ0EsTUFBTSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUU7QUFDcEUsUUFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNqRSxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRCxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRCxPQUFPO0FBQ1AsS0FBSyxNQUFNLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUMxQyxNQUFNLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDbkQ7QUFDQSxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtBQUNyRCxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0QsUUFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1RDtBQUNBLFFBQVEsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUNoQyxVQUFVLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4RCxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRTtBQUN0QixJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQzNCLElBQUksTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVDO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLEVBQUU7QUFDcEQsTUFBTSxPQUFPO0FBQ2IsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLHFCQUFxQixHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1RDtBQUNBLElBQUksSUFBSSxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUUscUJBQXFCLENBQUMsRUFBRTtBQUMxRCxNQUFNLElBQUksQ0FBQyxVQUFVLEdBQUcscUJBQXFCLENBQUM7QUFDOUMsTUFBTSxPQUFPO0FBQ2IsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLHFCQUFxQixDQUFDLEVBQUU7QUFDekQsTUFBTSxPQUFPO0FBQ2IsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUM3RSxNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcscUJBQXFCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6RCxHQUFHO0FBQ0g7QUFDQSxFQUFFLGFBQWEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO0FBQ2xDLElBQUksT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJO0FBQ25FLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUN0QixRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQ3pCLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVGLE1BQU0sT0FBTyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVk7QUFDbEQsUUFBUSxPQUFPLFNBQVMsQ0FBQztBQUN6QixPQUFPLENBQUMsQ0FBQztBQUNULEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRztBQUNIO0FBQ0EsRUFBRSxlQUFlLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFO0FBQzNFLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUMzQixJQUFJLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDckMsSUFBSSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7QUFDN0Y7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDckIsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7QUFDN0IsUUFBUSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztBQUNsRSxPQUFPO0FBQ1A7QUFDQSxNQUFNLFVBQVUsR0FBRyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEQsTUFBTSxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9DLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztBQUMzQyxJQUFJLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDbEksSUFBSSxNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakUsSUFBSSxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRSxJQUFJLE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2xFLElBQUksT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJO0FBQzlDLE1BQU0sTUFBTSxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDdkQsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBQ3pHLE1BQU0sT0FBTyxTQUFTLENBQUMsZUFBZSxDQUFDO0FBQ3ZDLFFBQVEsTUFBTSxFQUFFLFVBQVU7QUFDMUIsUUFBUSxJQUFJO0FBQ1osUUFBUSxTQUFTO0FBQ2pCLFFBQVEsWUFBWSxFQUFFLE1BQU07QUFDNUIsUUFBUSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsaUJBQWlCO0FBQ2hELE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNO0FBQ3BCLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsRCxRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQixRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCLE9BQU8sQ0FBQyxDQUFDO0FBQ1QsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUU7QUFDakQsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQSxFQUFFLGNBQWMsR0FBRztBQUNuQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDMUIsTUFBTSxPQUFPO0FBQ2IsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3hCLFFBQVEsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztBQUNsQyxRQUFRLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7QUFDakMsUUFBUSxXQUFXLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO0FBQzFDLFFBQVEsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZTtBQUM1QyxRQUFRLElBQUksRUFBRSxFQUFFO0FBQ2hCLFFBQVEsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtBQUNoQyxRQUFRLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7QUFDakMsT0FBTyxDQUFDO0FBQ1IsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQSxFQUFFLEtBQUssR0FBRztBQUNWLElBQUksS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ3hDLE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JCLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLG1CQUFtQixDQUFDLElBQUksRUFBRTtBQUM1QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUMvQyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSx1REFBdUQsQ0FBQyxDQUFDO0FBQy9FLE1BQU0sT0FBTyxFQUFFLENBQUM7QUFDaEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUM3QixNQUFNLE9BQU8sSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pELEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsTUFBTSxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLElBQUksTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDN0M7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNwQixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQ25DLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDeEM7QUFDQSxNQUFNLElBQUksRUFBRSxRQUFRLFlBQVksV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDcEcsUUFBUSxNQUFNO0FBQ2QsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUU7QUFDMUIsUUFBUSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwQyxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUM3QixRQUFRLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0UsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE9BQU8sQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ2hDO0FBQ0EsTUFBTSxxQkFBcUIsQ0FBQztBQUM1QixFQUFFLFdBQVcsR0FBRztBQUNoQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDO0FBQ3ZELElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLElBQUksSUFBSSxDQUFDLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUNwQyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUM7QUFDbEMsR0FBRztBQUNIO0FBQ0EsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQ3ZDLElBQUksSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDeEMsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNyQixNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNqQyxNQUFNLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtBQUNyQixRQUFRLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakQsUUFBUSxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsUUFBUSxJQUFJLFFBQVEsR0FBRyxDQUFDLElBQUksU0FBUyxHQUFHLENBQUMsS0FBSyxLQUFLLEdBQUcsUUFBUSxJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsRUFBRTtBQUN0RixVQUFVLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLGlEQUFpRCxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RixVQUFVLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDcEIsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDekIsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRTtBQUNsQixJQUFJLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDekMsTUFBTSxPQUFPO0FBQ2IsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLEtBQUssQ0FBQyxJQUFJO0FBQ3RCLE1BQU0sS0FBSyxHQUFHO0FBQ2QsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUM7QUFDM0QsUUFBUSxNQUFNO0FBQ2Q7QUFDQSxNQUFNLEtBQUssR0FBRztBQUNkLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDO0FBQzVELFFBQVEsTUFBTTtBQUNkO0FBQ0EsTUFBTSxLQUFLLEdBQUc7QUFDZCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQztBQUM3RCxRQUFRLE1BQU07QUFDZDtBQUNBLE1BQU0sS0FBSyxHQUFHO0FBQ2QsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUM7QUFDM0QsUUFBUSxNQUFNO0FBQ2Q7QUFDQSxNQUFNLEtBQUssR0FBRztBQUNkLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMseUJBQXlCLENBQUMsU0FBUyxDQUFDO0FBQy9ELFFBQVEsTUFBTTtBQUlkLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFlBQVksQ0FBQyxTQUFTLEVBQUUsVUFBVSxHQUFHLEtBQUssRUFBRTtBQUM5QyxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUMxRCxNQUFNLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztBQUN6QixNQUFNLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztBQUMxQjtBQUNBLE1BQU0sS0FBSyxNQUFNLE9BQU8sSUFBSSxTQUFTLEVBQUU7QUFDdkMsUUFBUSxNQUFNLFdBQVcsR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7QUFDMUM7QUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDMUIsVUFBVSxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQzFCLFVBQVUsTUFBTTtBQUNoQixTQUFTLE1BQU0sSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFO0FBQ2hDLFVBQVUsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMzQixTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNoQyxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQ25DO0FBQ0EsUUFBUSxJQUFJLFVBQVUsRUFBRTtBQUN4QixVQUFVLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRCxTQUFTO0FBQ1QsT0FBTyxNQUFNO0FBQ2IsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2QixPQUFPO0FBQ1AsS0FBSyxNQUFNLElBQUksU0FBUyxFQUFFO0FBQzFCLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDckIsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUseUJBQXlCLENBQUMsTUFBTSxFQUFFO0FBQ3BDLElBQUksSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ2xDLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixHQUFHLE1BQU0sQ0FBQztBQUMzQyxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNLEVBQUU7QUFDbEMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDbEMsTUFBTSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxPQUFPLENBQUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUM7QUFDdEQ7QUFDQSxNQUFNLGdCQUFnQixTQUFTLFVBQVUsQ0FBQztBQUMxQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDMUIsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdEIsSUFBSSxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQ2pDO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDekIsTUFBTSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDdEYsTUFBTSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQztBQUNwRyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRTtBQUNqRSxNQUFNLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckMsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDdkMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUMvQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDN0M7QUFDQSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFO0FBQ3ZDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7QUFDekQsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO0FBQ25ELE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDNUIsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztBQUMxQyxPQUFPLE1BQU07QUFDYixRQUFRLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEQsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztBQUMzRCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDL0M7QUFDQSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzVCLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQy9CLE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3JDLE9BQU87QUFDUCxLQUFLLE1BQU07QUFDWCxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDdkMsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUNyRCxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDakQsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUMxQixRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUMvQixPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDeEIsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqRixLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxlQUFlLENBQUMsWUFBWSxFQUFFO0FBQ2hDLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQztBQUNoRixHQUFHO0FBQ0g7QUFDQSxFQUFFLHFCQUFxQixDQUFDO0FBQ3hCLElBQUksSUFBSTtBQUNSLElBQUksS0FBSztBQUNULElBQUksV0FBVztBQUNmLElBQUksU0FBUztBQUNiLElBQUksU0FBUztBQUNiLElBQUksV0FBVztBQUNmLElBQUksU0FBUztBQUNiLElBQUksY0FBYztBQUNsQixHQUFHLEVBQUU7QUFDTCxJQUFJLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7QUFDaEMsSUFBSSxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO0FBQ2hDLElBQUksSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztBQUNoQyxJQUFJLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7QUFDaEMsSUFBSSxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0EsSUFBSSxJQUFJLEtBQUssRUFBRTtBQUNmLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6QixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksV0FBVyxFQUFFO0FBQ3JCLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlFLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxTQUFTLEVBQUU7QUFDbkIsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEUsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUMzQztBQUNBLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUN0QixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDdEIsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsT0FBTyxFQUFFO0FBQ1QsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsT0FBTyxFQUFFO0FBQ1QsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsT0FBTyxFQUFFO0FBQ1QsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNWLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxNQUFNLE1BQU0sSUFBSSxXQUFXLEVBQUU7QUFDdEMsTUFBTSxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM5RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNoQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNoQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNoQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNoQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckIsSUFBSSxNQUFNLFFBQVEsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEQsSUFBSSxNQUFNLG9CQUFvQixHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1RCxJQUFJLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN0RSxJQUFJLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4RSxJQUFJLGdCQUFnQixDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQztBQUNqRCxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDMUMsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUM7QUFDQSxJQUFJLElBQUksU0FBUyxFQUFFO0FBQ25CLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN4RCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFO0FBQ3pDLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDcEMsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRTtBQUN2QyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2xDLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxTQUFTLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pELElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakMsSUFBSSxNQUFNLFNBQVMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakQsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMxQyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZDLElBQUksTUFBTSxjQUFjLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RELElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDL0MsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNELElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDckMsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ2xFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDO0FBQzFDO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDMUQsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0FBQzVDO0FBQ0EsTUFBTSxnQkFBZ0IsU0FBUyxVQUFVLENBQUM7QUFDMUMsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ3RCLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xCLElBQUksTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztBQUM3QixJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDMUIsSUFBSSxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO0FBQ3REO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFO0FBQ3RDLE1BQU0sSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFO0FBQ3BDLE1BQU0sSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDekcsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRTtBQUMvRCxNQUFNLElBQUk7QUFDVixNQUFNLEdBQUcsRUFBRSxHQUFHO0FBQ2QsTUFBTSxRQUFRLEVBQUUsSUFBSTtBQUNwQixLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDeEQsSUFBSSxNQUFNLGlCQUFpQixHQUFHLElBQUksV0FBVyxDQUFDLHNCQUFzQixFQUFFO0FBQ3RFLE1BQU0sSUFBSTtBQUNWLE1BQU0sR0FBRyxFQUFFLElBQUk7QUFDZixNQUFNLFFBQVEsRUFBRSxJQUFJO0FBQ3BCLEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDdEU7QUFDQSxJQUFJLElBQUksVUFBVSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssSUFBSSxFQUFFO0FBQ3JFLE1BQU0sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7QUFDL0MsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7QUFDOUUsSUFBSSxNQUFNLGlCQUFpQixHQUFHLElBQUksV0FBVyxDQUFDLHNCQUFzQixFQUFFO0FBQ3RFLE1BQU0sSUFBSTtBQUNWLE1BQU0sR0FBRyxFQUFFLElBQUk7QUFDZixLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7QUFDOUYsSUFBSSxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUMxRyxJQUFJLE1BQU0sU0FBUyxHQUFHLElBQUksV0FBVyxDQUFDLHNCQUFzQixFQUFFO0FBQzlELE1BQU0sSUFBSTtBQUNWLE1BQU0sR0FBRyxFQUFFLElBQUk7QUFDZixLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDaEYsSUFBSSxNQUFNLGNBQWMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRTtBQUNuRSxNQUFNLElBQUk7QUFDVixNQUFNLEdBQUcsRUFBRSxJQUFJO0FBQ2YsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEQsSUFBSSxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3pGLElBQUksSUFBSSxDQUFDLGVBQWUsR0FBRztBQUMzQixNQUFNLGNBQWM7QUFDcEIsTUFBTSxpQkFBaUI7QUFDdkIsTUFBTSxtQkFBbUI7QUFDekIsTUFBTSxlQUFlLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUMsUUFBUSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7QUFDekIsUUFBUSxTQUFTLEVBQUUsQ0FBQyxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLENBQUM7QUFDM0UsUUFBUSxhQUFhLEVBQUUsSUFBSTtBQUMzQixPQUFPLENBQUM7QUFDUixLQUFLLENBQUM7QUFDTixJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxXQUFXLENBQUMsc0JBQXNCLEVBQUU7QUFDOUQsTUFBTSxJQUFJO0FBQ1YsTUFBTSxHQUFHLEVBQUUsSUFBSTtBQUNmLEtBQUssQ0FBQyxDQUFDO0FBQ1A7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRTtBQUNuRSxNQUFNLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbkYsR0FBRztBQUNIO0FBQ0EsRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUU7QUFDOUIsSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDbEMsTUFBTSxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqSCxLQUFLLE1BQU0sSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEVBQUU7QUFDbkQsTUFBTSxPQUFPLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxRCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUU7QUFDL0MsTUFBTSxPQUFPLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3JELEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3JCLElBQUksT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDM0MsR0FBRztBQUNIO0FBQ0EsRUFBRSxlQUFlLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFO0FBQzNFLElBQUksSUFBSSxXQUFXLElBQUksRUFBRSxJQUFJLFlBQVkseUJBQXlCLENBQUMsRUFBRTtBQUNyRSxNQUFNLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0FBQ2hFLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDeEIsTUFBTSxPQUFPLEtBQUssQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixDQUFDLENBQUM7QUFDNUYsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUk7QUFDbkYsTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxLQUFLLElBQUksRUFBRTtBQUMvQyxRQUFRLE9BQU8sS0FBSyxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUM5RixPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sWUFBWSxHQUFHLElBQUksY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzdEO0FBQ0EsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDeEQsUUFBUSxPQUFPLFlBQVksQ0FBQztBQUM1QixPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4QyxNQUFNLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hHLE1BQU0sTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3pFLE1BQU0sWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3ZHLE1BQU0sTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZELE1BQU0sT0FBTyxTQUFTLENBQUMsZUFBZSxDQUFDO0FBQ3ZDLFFBQVEsTUFBTTtBQUNkLFFBQVEsSUFBSTtBQUNaLFFBQVEsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZTtBQUN2RCxRQUFRLFlBQVk7QUFDcEIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVk7QUFDMUIsUUFBUSxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3hELFFBQVEsT0FBTyxZQUFZLENBQUM7QUFDNUIsT0FBTyxDQUFDLENBQUM7QUFDVCxLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRTtBQUNqRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtBQUM1QixNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxZQUFZLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0QsSUFBSSxNQUFNLEtBQUssR0FBRyxZQUFZLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQztBQUNyRDtBQUNBLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtBQUMvRCxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUNuRjtBQUNBLElBQUksSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFO0FBQzdCLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNO0FBQ1YsTUFBTSxJQUFJO0FBQ1YsS0FBSyxHQUFHLFNBQVMsQ0FBQztBQUNsQixJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNDO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO0FBQ3hDLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RyxJQUFJLE1BQU0sR0FBRyxHQUFHO0FBQ2hCLE1BQU0sSUFBSSxFQUFFLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzdELE1BQU0sS0FBSztBQUNYLEtBQUssQ0FBQztBQUNOLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3BDLElBQUksTUFBTSxFQUFFLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDeEIsSUFBSSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ2pDLElBQUksSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDakMsSUFBSSxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDNUI7QUFDQSxJQUFJLElBQUksT0FBTyxFQUFFO0FBQ2pCLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEYsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNFLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDMUQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDL0YsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN2QixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksS0FBSyxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0QsSUFBSSxNQUFNLGNBQWMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEQsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEQsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkUsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNyQyxJQUFJLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLElBQUksSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUNwRSxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDdEMsSUFBSSxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDNUQsSUFBSSxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNwRSxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0FBQ3JFLElBQUksT0FBTyxDQUFDO0FBQ1osTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7QUFDbkIsTUFBTSxJQUFJLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDbkMsTUFBTSxHQUFHO0FBQ1QsS0FBSyxFQUFFO0FBQ1AsTUFBTSxHQUFHLEVBQUUsTUFBTTtBQUNqQixNQUFNLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUM5QixNQUFNLEdBQUcsRUFBRSxJQUFJO0FBQ2YsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sY0FBYyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUU7QUFDM0QsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM3RTtBQUNBLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLFVBQVUsRUFBRTtBQUMxQyxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxZQUFZLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0QsSUFBSSxJQUFJLEtBQUssR0FBRyxZQUFZLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQztBQUNuRDtBQUNBLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO0FBQzdCLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUU7QUFDdEIsTUFBTSxPQUFPLEVBQUUsQ0FBQztBQUNoQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQzdCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ25ELEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLElBQUksTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDO0FBQ3BDLElBQUksTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUQsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtBQUNsQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcscUJBQXFCLENBQUMsQ0FBQztBQUN6SSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3hGO0FBQ0EsSUFBSSxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFELElBQUksSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUMvQjtBQUNBLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDeEIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxRQUFRLEdBQUcsY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ25FLElBQUksTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDOUM7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDN0IsTUFBTSxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDNUksS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1RDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtBQUN4QixNQUFNLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM3RyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksU0FBUyxLQUFLLENBQUMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFO0FBQzFDLE1BQU0sT0FBTyxlQUFlLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDdEosS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3BIO0FBQ0EsSUFBSSxPQUFPLGVBQWUsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ2pHLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxZQUFZLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRTtBQUN0QyxJQUFJLE1BQU0sWUFBWSxHQUFHLElBQUksY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzNELElBQUksTUFBTSxZQUFZLEdBQUc7QUFDekIsTUFBTSxJQUFJLEVBQUUsSUFBSTtBQUNoQjtBQUNBLE1BQU0sS0FBSyxHQUFHO0FBQ2QsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixPQUFPO0FBQ1A7QUFDQSxLQUFLLENBQUM7QUFDTixJQUFJLE1BQU07QUFDVixNQUFNLFFBQVE7QUFDZCxNQUFNLFFBQVE7QUFDZCxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztBQUN4QyxJQUFJLE1BQU0sU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUssSUFBSSxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUM7QUFDN0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFO0FBQ3RDLElBQUksSUFBSTtBQUNSLE1BQU0sUUFBUTtBQUNkLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDO0FBQ3hDO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ25CLE1BQU0sTUFBTSxpQkFBaUIsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzdEO0FBQ0EsTUFBTSxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDOUI7QUFDQSxNQUFNLElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzVCLFFBQVEsUUFBUSxHQUFHLGlCQUFpQixDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUMzRCxPQUFPLE1BQU07QUFDYixRQUFRLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDdEIsUUFBUSxJQUFJLFVBQVUsR0FBRyxRQUFRLEdBQUcsV0FBVyxDQUFDO0FBQ2hELFFBQVEsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFDNUQsUUFBUSxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDM0QsUUFBUSxVQUFVLEdBQUcsTUFBTSxHQUFHLGFBQWEsQ0FBQztBQUM1QyxRQUFRLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFDL0QsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNO0FBQ1osUUFBUSxRQUFRO0FBQ2hCLFFBQVEsU0FBUztBQUNqQixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztBQUMxQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLG1CQUFtQixDQUFDLHVCQUF1QixFQUFFO0FBQ2pGLFFBQVEsUUFBUTtBQUNoQixRQUFRLFFBQVE7QUFDaEIsUUFBUSxTQUFTO0FBQ2pCLE9BQU8sQ0FBQyxDQUFDO0FBQ1QsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQy9DLEdBQUc7QUFDSDtBQUNBLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUMvRSxJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUMsSUFBSSxNQUFNLEtBQUssR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ2xDLElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0FBQ0EsSUFBSSxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRTtBQUNoQyxNQUFNLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNuQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksS0FBSyxDQUFDO0FBQ2Q7QUFDQSxJQUFJLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRTtBQUN6QixNQUFNLEtBQUssR0FBRyxDQUFDLFVBQVUsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLEtBQUssTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUU7QUFDaEMsTUFBTSxLQUFLLEdBQUcsVUFBVSxHQUFHLEtBQUssR0FBRyxRQUFRLENBQUM7QUFDNUMsS0FBSyxNQUFNO0FBQ1gsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDO0FBQ3ZCLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxJQUFJLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0UsR0FBRztBQUNIO0FBQ0EsRUFBRSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUU7QUFDL0IsSUFBSSxNQUFNO0FBQ1YsTUFBTSxjQUFjO0FBQ3BCLE1BQU0sbUJBQW1CO0FBQ3pCLE1BQU0saUJBQWlCO0FBQ3ZCLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO0FBQzdCLElBQUksTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQztBQUNqRztBQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNuQixNQUFNLE9BQU8sY0FBYyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3RELEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxNQUFNLFNBQVMsSUFBSSxDQUFDLGNBQWMsRUFBRSxtQkFBbUIsQ0FBQyxFQUFFO0FBQ25FLE1BQU0sSUFBSSxTQUFTLFlBQVksV0FBVyxDQUFDLElBQUksRUFBRTtBQUNqRCxRQUFRLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEQ7QUFDQSxRQUFRLElBQUksU0FBUyxZQUFZLFdBQVcsQ0FBQyxJQUFJLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUM5RSxVQUFVLE9BQU8sU0FBUyxDQUFDO0FBQzNCLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLGlCQUFpQixZQUFZLFdBQVcsQ0FBQyxJQUFJLEVBQUU7QUFDdkQsTUFBTSxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekQ7QUFDQSxNQUFNLElBQUksWUFBWSxZQUFZLFdBQVcsQ0FBQyxJQUFJLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUNsRixRQUFRLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2RCxRQUFRLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNqRSxRQUFRLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVELFFBQVEsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNsRCxRQUFRLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDdEMsVUFBVSxJQUFJO0FBQ2QsVUFBVSxTQUFTLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLENBQUM7QUFDdkQsVUFBVSxhQUFhLEVBQUUsSUFBSTtBQUM3QixTQUFTLENBQUMsQ0FBQztBQUNYLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sY0FBYyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BELEdBQUc7QUFDSDtBQUNBLEVBQUUsY0FBYyxHQUFHO0FBQ25CLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsTUFBTSxvQkFBb0IsU0FBUyxnQkFBZ0IsQ0FBQztBQUNwRCxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUU7QUFDdEIsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUN6QixJQUFJLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDN0I7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtBQUNwRCxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUNoQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksU0FBUyxHQUFHLElBQUksV0FBVyxDQUFDLHNCQUFzQixFQUFFO0FBQzVELE1BQU0sSUFBSTtBQUNWLE1BQU0sR0FBRyxFQUFFLEdBQUc7QUFDZCxLQUFLLENBQUMsQ0FBQztBQUNQO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUU7QUFDeEUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO0FBQ3hDLElBQUksSUFBSSxhQUFhLEdBQUcsSUFBSSxXQUFXLENBQUMsc0JBQXNCLEVBQUU7QUFDaEUsTUFBTSxJQUFJO0FBQ1YsTUFBTSxHQUFHLEVBQUUsUUFBUTtBQUNuQixLQUFLLENBQUMsQ0FBQztBQUNQO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxhQUFhLEdBQUcsQ0FBQyxFQUFFO0FBQy9ELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQztBQUMzQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQztBQUNyQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2pGLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDO0FBQ3JSLEdBQUc7QUFDSDtBQUNBLEVBQUUsa0JBQWtCLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUMvRSxJQUFJLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RCxJQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNuQixJQUFJLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsRDtBQUNBLElBQUksS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJLFNBQVMsRUFBRTtBQUMxQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM5RSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDekQsSUFBSSxPQUFPLGVBQWUsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDckgsR0FBRztBQUNIO0FBQ0EsRUFBRSx1QkFBdUIsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO0FBQ2pILElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUMzQyxJQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNuQixJQUFJLE1BQU0sVUFBVSxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzVDO0FBQ0EsSUFBSSxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtBQUM5QixNQUFNLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDdkU7QUFDQSxNQUFNLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFO0FBQ2xDLFFBQVEsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN4RCxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDaEcsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4QyxJQUFJLE9BQU8sZUFBZSxHQUFHLGlCQUFpQixHQUFHLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDekcsR0FBRztBQUNIO0FBQ0EsRUFBRSxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO0FBQzFDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QztBQUNBLElBQUksSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtBQUM1QixNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsRCxJQUFJLE1BQU0sS0FBSyxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDbEMsSUFBSSxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDdEIsSUFBSSxJQUFJLHlCQUF5QixHQUFHLENBQUMsQ0FBQztBQUN0QyxRQUFRLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUNwQyxRQUFRLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDekIsUUFBUSxVQUFVLEdBQUcsQ0FBQztBQUN0QixRQUFRLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDekI7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDckQsTUFBTSxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QyxNQUFNLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixNQUFNLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzdDO0FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssR0FBRyxFQUFFO0FBQ2pDLFFBQVEsSUFBSSxZQUFZLEdBQUcsVUFBVSxHQUFHLEtBQUssRUFBRTtBQUMvQyxVQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN6RCxVQUFVLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDN0IsVUFBVSxZQUFZLEdBQUcsVUFBVSxDQUFDO0FBQ3BDLFVBQVUseUJBQXlCLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekMsVUFBVSxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUIsU0FBUyxNQUFNO0FBQ2YsVUFBVSxZQUFZLElBQUksVUFBVSxDQUFDO0FBQ3JDLFVBQVUseUJBQXlCLEdBQUcsS0FBSyxDQUFDO0FBQzVDLFVBQVUsdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLFVBQVUsWUFBWSxHQUFHLENBQUMsQ0FBQztBQUMzQixTQUFTO0FBQ1QsT0FBTyxNQUFNO0FBQ2IsUUFBUSxJQUFJLFlBQVksR0FBRyxVQUFVLEdBQUcsS0FBSyxFQUFFO0FBQy9DLFVBQVUsSUFBSSx5QkFBeUIsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUNoRCxZQUFZLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO0FBQzdFLFlBQVksVUFBVSxHQUFHLHVCQUF1QixDQUFDO0FBQ2pELFlBQVksQ0FBQyxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDakMsWUFBWSx5QkFBeUIsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzQyxZQUFZLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDN0IsV0FBVyxNQUFNO0FBQ2pCLFlBQVksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzNELFlBQVksVUFBVSxHQUFHLEtBQUssQ0FBQztBQUMvQixZQUFZLFlBQVksR0FBRyxVQUFVLENBQUM7QUFDdEMsV0FBVztBQUNYLFNBQVMsTUFBTTtBQUNmLFVBQVUsWUFBWSxJQUFJLFVBQVUsQ0FBQztBQUNyQyxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNsQyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDM0QsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixHQUFHO0FBQ0g7QUFDQSxFQUFFLGNBQWMsR0FBRztBQUNuQixJQUFJLE9BQU87QUFDWCxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDdEIsTUFBTSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO0FBQ2pDLE1BQU0sWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCO0FBQy9DLE1BQU0sU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUztBQUNwQyxNQUFNLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUM7QUFDckUsTUFBTSxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO0FBQ2pDLE1BQU0sSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtBQUMxQixNQUFNLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtBQUNuQyxNQUFNLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07QUFDOUIsTUFBTSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO0FBQy9CLE1BQU0sSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtBQUMxQixNQUFNLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87QUFDaEMsTUFBTSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO0FBQy9CLE1BQU0sV0FBVyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztBQUN4QyxNQUFNLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWU7QUFDMUMsTUFBTSxJQUFJLEVBQUUsTUFBTTtBQUNsQixLQUFLLENBQUM7QUFDTixHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxNQUFNLHNCQUFzQixTQUFTLGdCQUFnQixDQUFDO0FBQ3RELEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRTtBQUN0QixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDbEMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3pJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMzSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ25GLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBQ3BDO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQzVCLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BDLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQ3RDLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZDLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ3JDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQ3BDO0FBQ0EsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEMsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsa0RBQWtELENBQUMsQ0FBQztBQUMxRSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLGVBQWUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUU7QUFDakYsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQzlCLE1BQU0sT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBQ3RGLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ3JCO0FBQ0EsSUFBSSxJQUFJLGlCQUFpQixFQUFFO0FBQzNCLE1BQU0sTUFBTSxZQUFZLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0QsTUFBTSxLQUFLLEdBQUcsWUFBWSxHQUFHLFlBQVksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ3ZELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO0FBQ3hCLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQzNCLFFBQVEsT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBQzlGLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUM5QixRQUFRLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUMvRCxPQUFPLE1BQU07QUFDYixRQUFRLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUMvRCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLFVBQVUsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztBQUNqRjtBQUNBLElBQUksSUFBSSxVQUFVLEVBQUU7QUFDcEIsTUFBTSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzlDLE1BQU0sSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDbkMsTUFBTSxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBQzFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUM7QUFDeEMsTUFBTSxPQUFPLFlBQVksQ0FBQztBQUMxQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDN0MsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFO0FBQ2pELElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUM1QixNQUFNLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUM7QUFDcEUsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQy9CLE1BQU0sT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBQ3ZFLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFO0FBQzFELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO0FBQzVCLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3RCxJQUFJLE1BQU0sS0FBSyxHQUFHLFlBQVksSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDO0FBQ3JEO0FBQ0EsSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7QUFDN0IsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQ3hFO0FBQ0EsSUFBSSxJQUFJLFlBQVksS0FBSyxLQUFLLEVBQUU7QUFDaEMsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyRDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRTtBQUN4QyxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxHQUFHLEdBQUc7QUFDaEIsTUFBTSxJQUFJLEVBQUUsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0QsTUFBTSxLQUFLLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUU7QUFDL0MsS0FBSyxDQUFDO0FBQ047QUFDQSxJQUFJLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUM3RTtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6QixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksS0FBSyxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0QsSUFBSSxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUMzQyxJQUFJLElBQUksaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBQ2pDO0FBQ0EsSUFBSSxJQUFJLE9BQU8sRUFBRTtBQUNqQixNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BGLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDN0QsSUFBSSxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBQzVELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM5QixJQUFJLE9BQU8sQ0FBQztBQUNaLE1BQU0sR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO0FBQ25CLE1BQU0sSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzNCLE1BQU0sR0FBRztBQUNULEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUU7QUFDN0QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7QUFDNUIsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sWUFBWSxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdELElBQUksTUFBTSxLQUFLLEdBQUcsWUFBWSxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUM7QUFDckQ7QUFDQSxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtBQUM3QixNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDeEU7QUFDQSxJQUFJLElBQUksWUFBWSxLQUFLLEtBQUssRUFBRTtBQUNoQyxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JEO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO0FBQ3hDLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLEdBQUcsR0FBRztBQUNoQixNQUFNLElBQUksRUFBRSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3RCxNQUFNLEtBQUssRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRTtBQUMvQyxLQUFLLENBQUM7QUFDTjtBQUNBLElBQUksTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQzdFO0FBQ0EsSUFBSSxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDNUIsSUFBSSxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUMzQztBQUNBLElBQUksSUFBSSxLQUFLLEVBQUU7QUFDZixNQUFNLElBQUksSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMvQyxRQUFRLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6RCxRQUFRLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQztBQUNuQztBQUNBLFFBQVEsSUFBSSxPQUFPLEVBQUU7QUFDckIsVUFBVSxlQUFlLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUYsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM5QixRQUFRLFlBQVksR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN2RSxRQUFRLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQ3RFLFFBQVEsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN4QyxPQUFPLE1BQU0sSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ3ZELFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ25DLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxLQUFLLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCxJQUFJLElBQUksaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBQ2pDO0FBQ0EsSUFBSSxJQUFJLE9BQU8sRUFBRTtBQUNqQixNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BGLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDN0QsSUFBSSxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBQzVELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM5QixJQUFJLE1BQU0sT0FBTyxHQUFHLENBQUM7QUFDckIsTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7QUFDbkIsTUFBTSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDM0IsTUFBTSxHQUFHO0FBQ1QsS0FBSyxDQUFDLENBQUM7QUFDUDtBQUNBLElBQUksSUFBSSxZQUFZLEtBQUssSUFBSSxFQUFFO0FBQy9CLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQztBQUNuQixRQUFRLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTTtBQUN4QixRQUFRLElBQUksRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNuQyxRQUFRLEdBQUcsRUFBRSxJQUFJO0FBQ2pCLE9BQU8sQ0FBQyxDQUFDO0FBQ1QsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLE9BQU8sQ0FBQztBQUNuQixHQUFHO0FBQ0g7QUFDQSxFQUFFLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUU7QUFDN0MsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pELElBQUksTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN2QyxJQUFJLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUMzQixJQUFJLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUMxRCxJQUFJLElBQUksT0FBTyxFQUFFLElBQUksQ0FBQztBQUN0QjtBQUNBLElBQUksSUFBSSxJQUFJLEtBQUssT0FBTyxFQUFFO0FBQzFCLE1BQU0sT0FBTyxHQUFHO0FBQ2hCLFFBQVEsS0FBSyxFQUFFLEtBQUssR0FBRyxRQUFRO0FBQy9CLFFBQVEsTUFBTSxFQUFFLEtBQUssR0FBRyxRQUFRO0FBQ2hDLE9BQU8sQ0FBQztBQUNSLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNwQixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFO0FBQ2hDLE1BQU0sT0FBTyxHQUFHO0FBQ2hCLFFBQVEsS0FBSyxFQUFFLEtBQUssR0FBRyxRQUFRO0FBQy9CLFFBQVEsTUFBTSxFQUFFLEtBQUssR0FBRyxRQUFRO0FBQ2hDLE9BQU8sQ0FBQztBQUNSLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNwQixLQUFLLE1BQU07QUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLGlEQUFpRCxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQy9DLElBQUksTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDakQsSUFBSSxNQUFNLFVBQVUsR0FBRyxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNyRyxJQUFJLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuRSxJQUFJLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUMsSUFBSSxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdEUsSUFBSSxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDdEUsSUFBSSxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNDLElBQUksb0JBQW9CLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCxJQUFJLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFELElBQUksTUFBTSxTQUFTLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4RCxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUNqRCxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hDLElBQUksb0JBQW9CLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNyRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbEUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZEO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUMvQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtBQUMzQixJQUFJLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkQ7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsRUFBRTtBQUNwRCxNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZEO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLEVBQUU7QUFDcEQsTUFBTSxPQUFPO0FBQ2IsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqRTtBQUNBLElBQUksSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7QUFDckMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUM7QUFDckMsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztBQUMvRyxJQUFJLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3BEO0FBQ0EsSUFBSSxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ25DLE1BQU0sWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEMsS0FBSyxNQUFNLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDMUMsTUFBTSxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDckMsUUFBUSxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLE9BQU8sTUFBTTtBQUNiLFFBQVEsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwQyxPQUFPO0FBQ1AsS0FBSyxNQUFNLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUMzQyxNQUFNLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEMsS0FBSyxNQUFNO0FBQ1gsTUFBTSxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDM0QsTUFBTSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUM5QixNQUFNLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3pDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtBQUN0RCxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztBQUNuQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDakYsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQztBQUNuRTtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7QUFDaEMsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUNqRCxLQUFLLE1BQU07QUFDWCxNQUFNLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDekQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtBQUNsQyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ25ELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztBQUNuRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRTtBQUM5QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUN4RCxJQUFJLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsSUFBSSxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsRUFBRTtBQUM5QyxNQUFNLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakQsTUFBTSxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEQ7QUFDQSxNQUFNLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLEVBQUU7QUFDckQsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUN2RSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25EO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLEVBQUU7QUFDcEQsTUFBTSxPQUFPO0FBQ2IsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2RDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFO0FBQ3BELE1BQU0sT0FBTztBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxNQUFNLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsRUFBRTtBQUNsRCxNQUFNLElBQUksR0FBRyxLQUFLLEtBQUssRUFBRTtBQUN6QixRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzRCxRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ2pGLElBQUksSUFBSSxDQUFDLG1CQUFtQixHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDbkU7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO0FBQ2hDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDakQsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLENBQUMsNEJBQTRCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7QUFDbEMsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUNuRCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7QUFDbkQsR0FBRztBQUNIO0FBQ0EsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUU7QUFDN0IsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO0FBQ3ZGLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLDREQUE0RCxDQUFDLENBQUM7QUFDcEYsTUFBTSxPQUFPO0FBQ2IsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUU7QUFDQSxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7QUFDekMsTUFBTSxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUk7QUFDM0IsTUFBTSxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUk7QUFDMUIsTUFBTSxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVO0FBQzlDLEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRztBQUNIO0FBQ0EsRUFBRSxjQUFjLEdBQUc7QUFDbkIsSUFBSSxJQUFJLElBQUksR0FBRyxRQUFRLENBQUM7QUFDeEIsSUFBSSxJQUFJLFlBQVksQ0FBQztBQUNyQjtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUM1QixNQUFNLElBQUksR0FBRyxVQUFVLENBQUM7QUFDeEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDM0MsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDdEMsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDO0FBQzNCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQzNDLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTztBQUNYLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN0QixNQUFNLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxLQUFLO0FBQzFDLE1BQU0sWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCO0FBQy9DLE1BQU0sWUFBWTtBQUNsQixNQUFNLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtBQUNuQyxNQUFNLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7QUFDL0IsTUFBTSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO0FBQzFCLE1BQU0sTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtBQUM5QixNQUFNLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87QUFDaEMsTUFBTSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO0FBQy9CLE1BQU0sV0FBVyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztBQUN4QyxNQUFNLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWU7QUFDMUMsTUFBTSxJQUFJO0FBQ1YsS0FBSyxDQUFDO0FBQ04sR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLGdCQUFnQixHQUFHO0FBQ3pCLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDeEMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQy9ELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUMzRCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7QUFDOUQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7QUFDdkUsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0QsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsTUFBTSxzQkFBc0IsU0FBUyxnQkFBZ0IsQ0FBQztBQUN0RCxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUU7QUFDdEIsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDM0IsSUFBSSxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRTtBQUM1RCxNQUFNLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtBQUN2QixNQUFNLEdBQUcsRUFBRSxLQUFLO0FBQ2hCLEtBQUssQ0FBQyxDQUFDO0FBQ1A7QUFDQSxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNoQyxNQUFNLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDL0I7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEQsUUFBUSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25ELFFBQVEsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwRCxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHO0FBQy9CLFVBQVUsV0FBVyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakcsVUFBVSxZQUFZLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsRyxTQUFTLENBQUM7QUFDVixPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ25ELE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3BELEtBQUssTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDdEMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDaEMsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6RSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3JGLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDekIsR0FBRztBQUNIO0FBQ0EsRUFBRSxjQUFjLEdBQUc7QUFDbkIsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLEdBQUcsU0FBUyxDQUFDO0FBQzFELElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkYsSUFBSSxPQUFPO0FBQ1gsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3RCLE1BQU0sS0FBSztBQUNYLE1BQU0sWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCO0FBQy9DLE1BQU0sUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO0FBQ25DLE1BQU0sSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUztBQUMvQixNQUFNLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7QUFDMUIsTUFBTSxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTtBQUMzQyxNQUFNLGlCQUFpQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztBQUM5QyxNQUFNLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07QUFDOUIsTUFBTSxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO0FBQ2hDLE1BQU0sS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztBQUM5QixNQUFNLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7QUFDL0IsTUFBTSxXQUFXLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO0FBQ3hDLE1BQU0sU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZTtBQUMxQyxNQUFNLElBQUk7QUFDVixLQUFLLENBQUM7QUFDTixHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxNQUFNLHlCQUF5QixTQUFTLGdCQUFnQixDQUFDO0FBQ3pELEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRTtBQUN0QixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUNoQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLGNBQWMsR0FBRztBQUNuQixJQUFJLE9BQU87QUFDWCxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDdEIsTUFBTSxLQUFLLEVBQUUsSUFBSTtBQUNqQixNQUFNLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7QUFDL0IsTUFBTSxJQUFJLEVBQUUsV0FBVztBQUN2QixLQUFLLENBQUM7QUFDTixHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxNQUFNLGNBQWMsU0FBUyxnQkFBZ0IsQ0FBQztBQUM5QyxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDMUIsSUFBSSxNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztBQUNqQyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN0QixJQUFJLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDakMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztBQUN6RDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtBQUNqQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztBQUNoQyxLQUFLLE1BQU07QUFDWCxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO0FBQ2hFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUM7QUFDaEUsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUN6RSxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUMzQixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ2xELE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDNUQsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDN0IsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDbEMsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sY0FBYyxTQUFTLFVBQVUsQ0FBQztBQUN4QyxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUU7QUFDdEIsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztBQUN6RCxJQUFJLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNsRTtBQUNBLElBQUksSUFBSSxVQUFVLEVBQUU7QUFDcEIsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDeEMsS0FBSztBQUNMO0FBQ0EsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDO0FBQ3pDLE1BQU0sUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJO0FBQzNCLE1BQU0sU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQzFCLE1BQU0sVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBVTtBQUM5QyxLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sZUFBZSxTQUFTLFVBQVUsQ0FBQztBQUN6QyxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDMUIsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQztBQUMxRCxJQUFJLElBQUksVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ25EO0FBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLDhEQUE4RCxDQUFDLENBQUM7QUFDdEYsTUFBTSxPQUFPO0FBQ2IsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3BELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzlGLElBQUksTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdkQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6RixJQUFJLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbkQ7QUFDQSxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUM5RCxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2xFLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEM7QUFDQSxJQUFJLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDdEUsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6QyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzlCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFDeEMsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BELE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7QUFDekQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUM5QixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUM3QixLQUFLLE1BQU07QUFDWCxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNuQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ3hCLE1BQU0sTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QztBQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUFFO0FBQ3pDLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNuQyxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDckMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUNqRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDM0M7QUFDQSxJQUFJLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUM5QixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZGLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxNQUFNLGtCQUFrQixTQUFTLGdCQUFnQixDQUFDO0FBQ2xELEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRTtBQUMxQixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN0QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO0FBQzdELEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sY0FBYyxTQUFTLGdCQUFnQixDQUFDO0FBQzlDLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRTtBQUMxQixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN0QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO0FBQ3pELElBQUksTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUMxRTtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDMUIsTUFBTSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1RixNQUFNLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BELE1BQU0sSUFBSSxTQUFTLEdBQUcsSUFBSTtBQUMxQixVQUFVLGFBQWEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6RDtBQUNBLE1BQU0sSUFBSSxhQUFhLEVBQUU7QUFDekIsUUFBUSxhQUFhLEdBQUcsV0FBVyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6RCxRQUFRLFNBQVMsR0FBRyxhQUFhLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkYsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLFNBQVMsR0FBRyxTQUFTLEdBQUcsV0FBVyxHQUFHLElBQUksQ0FBQztBQUN2RCxNQUFNLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLENBQUM7QUFDckQsWUFBWSxZQUFZLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUMzQyxNQUFNLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7QUFDeE07QUFDQSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFO0FBQ3ZELFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDOUIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUM7QUFDakMsUUFBUSxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7QUFDN0IsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUM7QUFDakMsUUFBUSxXQUFXO0FBQ25CLFFBQVEsU0FBUztBQUNqQixRQUFRLFdBQVc7QUFDbkIsUUFBUSxTQUFTO0FBQ2pCLFFBQVEsY0FBYyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sS0FBSztBQUM1QyxVQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3SCxVQUFVLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO0FBQzlILFNBQVM7QUFDVCxPQUFPLENBQUMsQ0FBQztBQUNULEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxNQUFNLGdCQUFnQixTQUFTLGdCQUFnQixDQUFDO0FBQ2hELEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRTtBQUMxQixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN0QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO0FBQzNEO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUMxQixNQUFNLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVGLE1BQU0sTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEQsTUFBTSxJQUFJLFNBQVMsR0FBRyxJQUFJO0FBQzFCLFVBQVUsYUFBYSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pEO0FBQ0EsTUFBTSxJQUFJLGFBQWEsRUFBRTtBQUN6QixRQUFRLGFBQWEsR0FBRyxXQUFXLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pELFFBQVEsU0FBUyxHQUFHLGFBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2RixPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sU0FBUyxHQUFHLFNBQVMsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ3ZEO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUN0RCxRQUFRLE9BQU87QUFDZixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztBQUNqQyxRQUFRLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtBQUM3QixRQUFRLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQzVDLFFBQVEsV0FBVztBQUNuQixRQUFRLFNBQVM7QUFDakIsUUFBUSxXQUFXO0FBQ25CLFFBQVEsU0FBUztBQUNqQixRQUFRLGNBQWMsRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLEtBQUs7QUFDNUMsVUFBVSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM3RCxVQUFVLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzdELFVBQVUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO0FBQzNFLFVBQVUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO0FBQzVFLFVBQVUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekQ7QUFDQSxVQUFVLElBQUksU0FBUyxFQUFFO0FBQ3pCLFlBQVksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixXQUFXLE1BQU07QUFDakIsWUFBWSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLFdBQVc7QUFDWDtBQUNBLFVBQVUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RSxTQUFTO0FBQ1QsT0FBTyxDQUFDLENBQUM7QUFDVCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsTUFBTSxnQkFBZ0IsU0FBUyxnQkFBZ0IsQ0FBQztBQUNoRCxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDMUIsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztBQUMzRDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDMUIsTUFBTSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1RixNQUFNLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BELE1BQU0sSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzNCLE1BQU0sSUFBSSxhQUFhLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekQ7QUFDQSxNQUFNLElBQUksYUFBYSxFQUFFO0FBQ3pCLFFBQVEsYUFBYSxHQUFHLFdBQVcsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekQsUUFBUSxTQUFTLEdBQUcsYUFBYSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZGLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxTQUFTLEdBQUcsU0FBUyxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDdkQ7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ3RELFFBQVEsT0FBTztBQUNmLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RTtBQUNBLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDO0FBQ2pDLFFBQVEsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO0FBQzdCLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDNUMsUUFBUSxXQUFXO0FBQ25CLFFBQVEsU0FBUztBQUNqQixRQUFRLFdBQVc7QUFDbkIsUUFBUSxTQUFTO0FBQ2pCLFFBQVEsY0FBYyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sS0FBSztBQUM1QyxVQUFVLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlELFVBQVUsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUQsVUFBVSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM5RCxVQUFVLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlELFVBQVUsTUFBTSxJQUFJLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDMUMsVUFBVSxNQUFNLElBQUksR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxQyxVQUFVLE1BQU0sT0FBTyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcscUJBQXFCLENBQUM7QUFDaEUsVUFBVSxNQUFNLE9BQU8sR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLHFCQUFxQixDQUFDO0FBQ2hFLFVBQVUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxVDtBQUNBLFVBQVUsSUFBSSxTQUFTLEVBQUU7QUFDekIsWUFBWSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLFdBQVcsTUFBTTtBQUNqQixZQUFZLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsV0FBVztBQUNYO0FBQ0EsVUFBVSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLFNBQVM7QUFDVCxPQUFPLENBQUMsQ0FBQztBQUNULEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxNQUFNLGtCQUFrQixTQUFTLGdCQUFnQixDQUFDO0FBQ2xELEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRTtBQUMxQixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN0QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO0FBQzdELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzVCLElBQUksTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDN0Q7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO0FBQ3JDLE1BQU0sT0FBTztBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzdELE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0FBQzlCLFFBQVEsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDekIsUUFBUSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsT0FBTyxDQUFDLENBQUM7QUFDVCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQzFCLE1BQU0sTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUYsTUFBTSxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwRCxNQUFNLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLENBQUM7QUFDckQsWUFBWSxZQUFZLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUMzQyxNQUFNLE1BQU0sSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzlEO0FBQ0EsTUFBTSxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQy9DLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7QUFDN0QsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENB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LENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUMxQixNQUFNLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVGLE1BQU0sTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEQsTUFBTSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3JELFlBQVksWUFBWSxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDM0MsTUFBTSxNQUFNLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM5RDtBQUNBLE1BQU0sS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNqRCxRQUFRLEtBQUssTUFBTSxNQUFNLElBQUksUUFBUSxFQUFFO0FBQ3ZDLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7QUFDL0QsVUFBVSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQztBQUMvRCxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFH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QUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNuRjtBQUNBLElBQUksSUFBSSxVQUFVLEVBQUU7QUFDcEIsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUM1QixRQUFRLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlGLFFBQVEsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztBQUNuQyxVQUFVLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtBQUMvQixVQUFVLEtBQUssRUFBRSxZQUFZO0FBQzdCLFVBQVUsV0FBVztBQUNyQixVQUFVLFdBQVc7QUFDckIsVUFBVSxjQUFjLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxLQUFLO0FBQzlDLFlBQVksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzdMLFlBQVksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RSxXQUFXO0FBQ1gsU0FBUyxDQUFDLENBQUM7QUFDWCxPQUFPO0FBQ1AsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDakMsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sZUFBZSxTQUFTLGdCQUFnQixDQUFDO0FBQy9DLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRTtBQUMxQixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN0QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO0FBQzFELEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sd0JBQXdCLFNBQVMsZ0JBQWdCLENBQUM7QUFDeEQsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQzFCLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3RCLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyRixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDO0FBQ25FLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztBQUN2QyxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLENBQUMsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixLQUFLO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksR0FBRztBQUM5QyxFQUFFLEtBQUssRUFBRSxJQUFJO0FBQ2IsQ0FBQyxFQUFFLENBQUM7QUFDSixPQUFPLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxDQUFDLHNCQUFzQixHQUFHLHNCQUFzQixDQUFDO0FBQ3hEO0FBQ0EsSUFBSSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkM7QUFDQSxJQUFJLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQztBQUNBLElBQUksV0FBVyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsSUFBSSxVQUFVLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekM7QUFDQSxJQUFJLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QztBQUNBLElBQUksT0FBTyxHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsTUFBTSwwQkFBMEIsU0FBUyxVQUFVLENBQUMscUJBQXFCLENBQUM7QUFDMUUsRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFO0FBQ25CLElBQUksS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxHQUFHO0FBQ1YsSUFBSSxNQUFNLFNBQVMsR0FBRztBQUN0QixNQUFNLEVBQUUsRUFBRSxDQUFDO0FBQ1gsTUFBTSxJQUFJLEVBQUUsRUFBRTtBQUNkLEtBQUssQ0FBQztBQUNOLElBQUksTUFBTSxNQUFNLEdBQUc7QUFDbkIsTUFBTSxRQUFRLEVBQUUsQ0FBQztBQUNqQixNQUFNLFFBQVEsRUFBRSxFQUFFO0FBQ2xCLE1BQU0sU0FBUyxFQUFFLElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLEtBQUssQ0FBQztBQUNOO0FBQ0EsSUFBSSxJQUFJO0FBQ1IsTUFBTSxPQUFPLElBQUksRUFBRTtBQUNuQixRQUFRLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNsQztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDbkMsVUFBVSxNQUFNO0FBQ2hCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFO0FBQ3pDLFVBQVUsU0FBUztBQUNuQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU07QUFDZCxVQUFVLEVBQUU7QUFDWixVQUFVLElBQUk7QUFDZCxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQ3RCO0FBQ0EsUUFBUSxRQUFRLEVBQUUsR0FBRyxDQUFDO0FBQ3RCLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU87QUFDaEMsWUFBWSxNQUFNLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QztBQUNBLFlBQVksSUFBSSxRQUFRLFlBQVksV0FBVyxDQUFDLElBQUksRUFBRTtBQUN0RCxjQUFjLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztBQUM5QyxhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUU7QUFDOUQsY0FBYyxNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUN6QyxhQUFhO0FBQ2I7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxlQUFlO0FBQ3hDLFlBQVksV0FBVyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0Y7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXO0FBQ3BDLFlBQVksV0FBVyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUY7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUI7QUFDMUMsWUFBWSxXQUFXLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1RjtBQUNBLFlBQVksTUFBTTtBQUNsQixTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUssQ0FBQyxPQUFPLE1BQU0sRUFBRTtBQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLDJDQUEyQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hGLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsU0FBUyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUU7QUFDckMsRUFBRSxPQUFPLElBQUksMEJBQTBCLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckQsQ0FBQztBQUNEO0FBQ0EsU0FBUyx1QkFBdUIsQ0FBQztBQUNqQyxFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFNBQVM7QUFDWCxDQUFDLEVBQUU7QUFDSCxFQUFFLElBQUksUUFBUSxDQUFDO0FBQ2Y7QUFDQSxFQUFFLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ3JDLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztBQUNyQixHQUFHLE1BQU07QUFDVCxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDdEYsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksV0FBVyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ25GLENBQUM7QUFDRDtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEtBQUs7QUFDbEU7QUFDQTtBQUNBO0FBQ0EsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxHQUFHO0FBQzlDLEVBQUUsS0FBSyxFQUFFLElBQUk7QUFDYixDQUFDLEVBQUUsQ0FBQztBQUNKLE9BQU8sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDNUI7QUFDQSxJQUFJLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQztBQUNBLElBQUksV0FBVyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsSUFBSSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekM7QUFDQSxTQUFTLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUU7QUFDNUQsRUFBRSxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDdkIsRUFBRSxPQUFPLEdBQUcsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3hDLEVBQUUsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN6QixFQUFFLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekIsRUFBRSxJQUFJLFFBQVEsR0FBRyxDQUFDO0FBQ2xCLE1BQU0sUUFBUSxDQUFDO0FBQ2YsRUFBRSxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QyxFQUFFLE1BQU0sVUFBVSxHQUFHLEVBQUUsR0FBRyxVQUFVLENBQUM7QUFDckM7QUFDQSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0IsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDO0FBQ3JELEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQixJQUFJLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUNuRDtBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqQyxNQUFNLFFBQVEsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLE1BQU0sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDekMsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUN6QyxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sUUFBUSxJQUFJLE9BQU8sQ0FBQztBQUMxQixLQUFLO0FBQ0wsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBLE1BQU0sVUFBVSxDQUFDO0FBQ2pCLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDOUIsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssVUFBVSxFQUFFO0FBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLCtCQUErQixDQUFDLENBQUM7QUFDOUQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQzdCLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUU7QUFDekIsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1QyxJQUFJLE9BQU8sR0FBRyxDQUFDO0FBQ2YsR0FBRztBQUNIO0FBQ0EsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0FBQy9DLElBQUksSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLHVDQUF1QyxDQUFDLENBQUM7QUFDcEUsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLElBQUksSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLHlDQUF5QyxDQUFDLENBQUM7QUFDdEUsR0FBRztBQUNIO0FBQ0EsRUFBRSxlQUFlLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUN4QyxJQUFJLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSw0Q0FBNEMsQ0FBQyxDQUFDO0FBQ3pFLEdBQUc7QUFDSDtBQUNBLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRTtBQUN0QixJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsZUFBZSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7QUFDbEMsSUFBSSxPQUFPLFVBQVUsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNoRSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUNqRyxJQUFJLE1BQU0sS0FBSyxHQUFHLGFBQWEsR0FBRyxjQUFjLENBQUM7QUFDakQsSUFBSSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdEIsSUFBSSxNQUFNLGtCQUFrQixHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDeEMsSUFBSSxNQUFNLGFBQWEsR0FBRyxjQUFjLEtBQUssTUFBTSxJQUFJLGFBQWEsS0FBSyxLQUFLLENBQUM7QUFDL0U7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNqQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDckIsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLElBQUksS0FBSyxHQUFHLGtCQUFrQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO0FBQzdILE1BQU0sTUFBTSxTQUFTLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDNUc7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuRCxRQUFRLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekIsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLFFBQVEsR0FBRyxJQUFJLGlCQUFpQixDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9FO0FBQ0EsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFO0FBQzFCLFFBQVEsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3hDLFVBQVUsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyxVQUFVLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQyxVQUFVLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUMsVUFBVSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFVBQVUsT0FBTyxJQUFJLE9BQU8sQ0FBQztBQUM3QixTQUFTO0FBQ1QsT0FBTyxNQUFNO0FBQ2IsUUFBUSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNDLFFBQVEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3hDLFVBQVUsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyxVQUFVLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQyxVQUFVLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0MsVUFBVSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9DLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFO0FBQzFCLFFBQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssR0FBRyxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDakYsT0FBTyxNQUFNO0FBQ2IsUUFBUSxNQUFNLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEQsUUFBUSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlELE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksTUFBTSxFQUFFO0FBQ2hCLE1BQU0sSUFBSSxhQUFhLEVBQUU7QUFDekIsUUFBUSxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDNUYsT0FBTyxNQUFNO0FBQ2IsUUFBUSxJQUFJLE9BQU8sR0FBRyxDQUFDO0FBQ3ZCLFlBQVksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssR0FBRyxZQUFZLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRSxVQUFVLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzdDLFVBQVUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDN0MsVUFBVSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUM3QyxVQUFVLE9BQU8sSUFBSSxPQUFPLENBQUM7QUFDN0IsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLGtCQUFrQixHQUFHO0FBQzNCLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQy9ELEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBRTtBQUN4RSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtBQUMvQixNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsK0RBQStELENBQUMsQ0FBQztBQUN2RixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtBQUMzQixNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztBQUNuRixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksTUFBTSxFQUFFLEtBQUssQ0FBQztBQUN0QjtBQUNBLElBQUksSUFBSSxRQUFRLFlBQVksV0FBVyxDQUFDLEdBQUcsRUFBRTtBQUM3QyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUM7QUFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN0QyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksUUFBUSxZQUFZLFdBQVcsQ0FBQyxJQUFJLEVBQUU7QUFDOUMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztBQUM3QixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksTUFBTSxJQUFJLEtBQUssRUFBRTtBQUN6QixNQUFNLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDaEUsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRTtBQUN6RCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtBQUMvQixNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsa0VBQWtFLENBQUMsQ0FBQztBQUMxRixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksUUFBUSxZQUFZLFdBQVcsQ0FBQyxHQUFHLEVBQUU7QUFDN0MsTUFBTSxNQUFNLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdEU7QUFDQSxNQUFNLElBQUksZUFBZSxFQUFFO0FBQzNCLFFBQVEsT0FBTyxlQUFlLENBQUM7QUFDL0IsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJO0FBQ1YsUUFBUSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4QyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUU7QUFDbkIsUUFBUSxJQUFJLEVBQUUsWUFBWSxXQUFXLENBQUMsb0JBQW9CLEVBQUU7QUFDNUQsVUFBVSxNQUFNLEVBQUUsQ0FBQztBQUNuQixTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxRQUFRLFlBQVksV0FBVyxDQUFDLElBQUksRUFBRTtBQUM5QyxNQUFNLE1BQU0sZUFBZSxHQUFHLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUU7QUFDQSxNQUFNLElBQUksZUFBZSxFQUFFO0FBQzNCLFFBQVEsT0FBTyxlQUFlLENBQUM7QUFDL0IsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxhQUFhLFVBQVUsQ0FBQztBQUMxQixJQUFJLEVBQUU7QUFDTixJQUFJLElBQUk7QUFDUixJQUFJLFNBQVMsR0FBRyxJQUFJO0FBQ3BCLElBQUksa0JBQWtCO0FBQ3RCLElBQUksb0JBQW9CO0FBQ3hCLEdBQUcsRUFBRTtBQUNMLElBQUksTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDbEY7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2xFO0FBQ0EsSUFBSSxPQUFPLGdCQUFnQixDQUFDO0FBQzVCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDZixJQUFJLEVBQUU7QUFDTixJQUFJLElBQUk7QUFDUixJQUFJLFNBQVMsR0FBRyxJQUFJO0FBQ3BCLElBQUksa0JBQWtCO0FBQ3RCLElBQUksb0JBQW9CO0FBQ3hCLEdBQUcsRUFBRTtBQUNMLElBQUksTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztBQUM1RTtBQUNBLElBQUksSUFBSSxnQkFBZ0IsRUFBRTtBQUMxQixNQUFNLE9BQU8sZ0JBQWdCLENBQUM7QUFDOUIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUNsRjtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDbEU7QUFDQSxJQUFJLE9BQU8sZ0JBQWdCLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsR0FBRyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7QUFDaEUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QjtBQUNBLElBQUksSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDckMsTUFBTSxRQUFRLEVBQUUsQ0FBQyxJQUFJO0FBQ3JCLFFBQVEsS0FBSyxHQUFHLENBQUM7QUFDakIsUUFBUSxLQUFLLFlBQVk7QUFDekIsVUFBVSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQ3RDO0FBQ0EsUUFBUSxLQUFLLEtBQUssQ0FBQztBQUNuQixRQUFRLEtBQUssV0FBVztBQUN4QixVQUFVLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7QUFDckM7QUFDQSxRQUFRLEtBQUssTUFBTSxDQUFDO0FBQ3BCLFFBQVEsS0FBSyxZQUFZO0FBQ3pCLFVBQVUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztBQUN0QztBQUNBLFFBQVEsS0FBSyxTQUFTO0FBQ3RCLFVBQVUsT0FBTyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQztBQUNBLFFBQVE7QUFDUixVQUFVLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO0FBQ2xELFlBQVksTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM1RDtBQUNBLFlBQVksSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEVBQUU7QUFDdEQsY0FBYyxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzRDtBQUNBLGNBQWMsSUFBSSxXQUFXLEVBQUU7QUFDL0IsZ0JBQWdCLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxFQUFFO0FBQzFELGtCQUFrQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUN2RixpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsRUFBRSxHQUFHLFdBQVcsQ0FBQztBQUNqQyxnQkFBZ0IsTUFBTTtBQUN0QixlQUFlO0FBQ2YsYUFBYTtBQUNiLFdBQVc7QUFDWDtBQUNBLFVBQVUsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdFLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMzQixNQUFNLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQy9DLE1BQU0sSUFBSSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQztBQUNsRTtBQUNBLE1BQU0sUUFBUSxJQUFJO0FBQ2xCLFFBQVEsS0FBSyxHQUFHLENBQUM7QUFDakIsUUFBUSxLQUFLLFlBQVk7QUFDekIsVUFBVSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQ3RDO0FBQ0EsUUFBUSxLQUFLLEtBQUssQ0FBQztBQUNuQixRQUFRLEtBQUssV0FBVztBQUN4QixVQUFVLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7QUFDckM7QUFDQSxRQUFRLEtBQUssTUFBTSxDQUFDO0FBQ3BCLFFBQVEsS0FBSyxZQUFZO0FBQ3pCLFVBQVUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztBQUN0QztBQUNBLFFBQVEsS0FBSyxTQUFTO0FBQ3RCLFVBQVUsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsVUFBVSxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNyRCxVQUFVLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3JELFVBQVUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdEMsVUFBVSxPQUFPLElBQUksU0FBUyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUQ7QUFDQSxRQUFRLEtBQUssUUFBUTtBQUNyQixVQUFVLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDLFVBQVUsVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDckQsVUFBVSxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNyRCxVQUFVLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNDLFVBQVUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNuRCxVQUFVLE9BQU8sSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDckU7QUFDQSxRQUFRLEtBQUssVUFBVTtBQUN2QixVQUFVLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQsVUFBVSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ25DLFVBQVUsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsVUFBVSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzVDO0FBQ0EsVUFBVSxJQUFJLEdBQUcsRUFBRTtBQUNuQixZQUFZLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUNoRjtBQUNBLFlBQVksSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRTtBQUM3QyxjQUFjLE9BQU8sS0FBSyxDQUFDO0FBQzNCLGFBQWE7QUFDYjtBQUNBLFlBQVksSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLDREQUE0RCxDQUFDLENBQUM7QUFDMUYsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUU7QUFDOUIsWUFBWSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQ3hDLFdBQVcsTUFBTSxJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUU7QUFDckMsWUFBWSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO0FBQ3ZDLFdBQVcsTUFBTSxJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUU7QUFDckMsWUFBWSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQ3hDLFdBQVc7QUFDWDtBQUNBLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxTQUFTO0FBQ3RCLFVBQVUsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDakM7QUFDQSxVQUFVLElBQUksTUFBTSxFQUFFO0FBQ3RCLFlBQVksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUM5RSxXQUFXO0FBQ1g7QUFDQSxVQUFVLE9BQU8sSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdkM7QUFDQSxRQUFRLEtBQUssR0FBRyxDQUFDO0FBQ2pCLFFBQVEsS0FBSyxTQUFTO0FBQ3RCLFVBQVUsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUMzRSxVQUFVLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELFVBQVUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCxVQUFVLE9BQU8sSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0RDtBQUNBLFFBQVEsS0FBSyxZQUFZLENBQUM7QUFDMUIsUUFBUSxLQUFLLFNBQVM7QUFDdEIsVUFBVSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFVBQVUsUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDM0QsVUFBVSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQzNFLFVBQVUsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELFVBQVUsT0FBTyxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNEO0FBQ0EsUUFBUSxLQUFLLEtBQUs7QUFDbEIsVUFBVSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyxVQUFVLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3JELFVBQVUsVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDckQsVUFBVSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2pELFVBQVUsT0FBTyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsUUFBUTtBQUNSLFVBQVUsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEYsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxnQ0FBZ0MsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekUsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFO0FBQzNDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDaEMsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksUUFBUSxHQUFHLENBQUMsS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLDBDQUEwQyxDQUFDLENBQUM7QUFDbEUsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN4RCxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNsRCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsV0FBVyxVQUFVLEdBQUc7QUFDMUIsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFO0FBQ2pELE1BQU0sSUFBSSxJQUFJLEdBQUc7QUFDakIsUUFBUSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQztBQUNuRSxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksR0FBRyxHQUFHO0FBQ2hCLFFBQVEsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDakUsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksR0FBRztBQUNqQixRQUFRLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLE9BQU87QUFDUDtBQUNBLEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDaEM7QUFDQSxNQUFNLFdBQVcsU0FBUyxVQUFVLENBQUM7QUFDckMsRUFBRSxXQUFXLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7QUFDdEMsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2pDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN6QixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2xELEdBQUc7QUFDSDtBQUNBLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtBQUMvQyxJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDL0IsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDdEQsR0FBRztBQUNIO0FBQ0EsRUFBRSxZQUFZLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMvQixJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDM0IsSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLElBQUksTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN2QyxJQUFJLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0FBQ3ZELElBQUksTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEtBQUssT0FBTyxLQUFLLENBQUMsQ0FBQztBQUMxRixJQUFJLElBQUksR0FBRyxHQUFHLGFBQWEsR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLElBQUksTUFBTSxPQUFPLEdBQUcsYUFBYSxHQUFHLElBQUksR0FBRyxJQUFJLGlCQUFpQixDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsQ0FBQztBQUN2RixJQUFJLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDbkMsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM5QyxJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2xELElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2I7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hDLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDckMsUUFBUSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzdDLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25DO0FBQ0EsTUFBTSxJQUFJLGtCQUFrQixFQUFFO0FBQzlCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0MsVUFBVSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLFNBQVM7QUFDVCxPQUFPLE1BQU07QUFDYixRQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakQsUUFBUSxHQUFHLElBQUksWUFBWSxDQUFDO0FBQzVCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7QUFDeEIsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pFLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLGVBQWUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQ3hDLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNoRyxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxNQUFNLFNBQVMsU0FBUyxVQUFVLENBQUM7QUFDbkMsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ3RCLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMzQixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ3ZCLEdBQUc7QUFDSDtBQUNBLEVBQUUsZUFBZSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7QUFDbEMsSUFBSSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsMkNBQTJDLENBQUMsQ0FBQztBQUN4RSxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxNQUFNLFNBQVMsU0FBUyxVQUFVLENBQUM7QUFDbkMsRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7QUFDckMsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUMzQixJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0FBQzNDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6QztBQUNBLElBQUksSUFBSSxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUU7QUFDM0MsTUFBTSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0IsS0FBSyxNQUFNLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO0FBQzNDLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN2QyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckQsT0FBTztBQUNQLEtBQUssTUFBTTtBQUNYLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyx1Q0FBdUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEYsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtBQUMvQyxJQUFJLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3hDLElBQUksTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUM1QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxRSxHQUFHO0FBQ0g7QUFDQSxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdkUsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNuQyxJQUFJLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2hFLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMvQjtBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwQyxNQUFNLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUNwRCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDNUUsTUFBTSxVQUFVLElBQUksV0FBVyxDQUFDO0FBQ2hDLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLGVBQWUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQ3hDLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDaEYsR0FBRztBQUNIO0FBQ0EsRUFBRSxlQUFlLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtBQUNsQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO0FBQ25DLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLGtDQUFrQyxDQUFDLENBQUM7QUFDMUQsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7QUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztBQUMzRCxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2pFLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sWUFBWSxTQUFTLFVBQVUsQ0FBQztBQUN0QyxFQUFFLFdBQVcsR0FBRztBQUNoQixJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0FBQy9DLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNuQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZFLEdBQUc7QUFDSDtBQUNBLEVBQUUsWUFBWSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUN2RSxJQUFJLE1BQU0sS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUMsSUFBSSxJQUFJLENBQUMsR0FBRyxTQUFTO0FBQ3JCLFFBQVEsQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUN2QjtBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwQyxNQUFNLE1BQU0sQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqQyxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixNQUFNLENBQUMsSUFBSSxPQUFPLENBQUM7QUFDbkIsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsZUFBZSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUU7QUFDeEMsSUFBSSxPQUFPLFdBQVcsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDdkMsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsTUFBTSxXQUFXLFNBQVMsVUFBVSxDQUFDO0FBQ3JDLEVBQUUsV0FBVyxHQUFHO0FBQ2hCLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7QUFDL0MsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1QyxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDcEQsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3BELEdBQUc7QUFDSDtBQUNBLEVBQUUsWUFBWSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUN2RSxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFO0FBQ3JDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxTQUFTLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzNFLE1BQU0sT0FBTztBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxQyxJQUFJLElBQUksQ0FBQyxHQUFHLFNBQVM7QUFDckIsUUFBUSxDQUFDLEdBQUcsVUFBVSxDQUFDO0FBQ3ZCO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3BDLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25DLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25DLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25DLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQztBQUNuQixLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxlQUFlLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUN4QyxJQUFJLE9BQU8sV0FBVyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLEdBQUc7QUFDSDtBQUNBLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRTtBQUN0QixJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsQ0FBQztBQUN0QixHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxNQUFNLFlBQVksR0FBRyxTQUFTLG1CQUFtQixHQUFHO0FBQ3BELEVBQUUsU0FBUyxZQUFZLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtBQUNwRSxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDeEMsSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUM1QyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzVDLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDNUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixHQUFHLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLGtCQUFrQixHQUFHLENBQUMsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLENBQUM7QUFDOVgsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixHQUFHLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsZUFBZSxHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzlYLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLGtCQUFrQixHQUFHLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixHQUFHLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLGlCQUFpQixHQUFHLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLG1CQUFtQixHQUFHLENBQUMsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3JZLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxZQUFZLFNBQVMsVUFBVSxDQUFDO0FBQ3hDLElBQUksV0FBVyxHQUFHO0FBQ2xCLE1BQU0sS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QixLQUFLO0FBQ0w7QUFDQSxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7QUFDakQsTUFBTSxZQUFZLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3hELEtBQUs7QUFDTDtBQUNBLElBQUksWUFBWSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUN6RSxNQUFNLE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUM7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdEMsUUFBUSxZQUFZLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlELFFBQVEsU0FBUyxJQUFJLENBQUMsQ0FBQztBQUN2QixRQUFRLFVBQVUsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ2xDLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLGVBQWUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQzFDLE1BQU0sT0FBTyxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakQsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDLEVBQUUsQ0FBQztBQUNKO0FBQ0EsTUFBTSxTQUFTLEdBQUcsU0FBUyxnQkFBZ0IsR0FBRztBQUM5QyxFQUFFLFNBQVMsWUFBWSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFO0FBQ3JFLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNyQyxJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekIsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksa0JBQWtCLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQixJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9CLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLFNBQVMsU0FBUyxVQUFVLENBQUM7QUFDckMsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7QUFDL0MsTUFBTSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ3ZCLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsdURBQXVELENBQUMsQ0FBQztBQUM3RixPQUFPO0FBQ1A7QUFDQSxNQUFNLFVBQVUsR0FBRyxVQUFVLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNDLE1BQU0sS0FBSyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDekIsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNyQjtBQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRTtBQUN2RCxRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsa0NBQWtDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcseUJBQXlCLENBQUMsQ0FBQztBQUNsSCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDckQsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQztBQUN6RixRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QyxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDM0QsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLG9DQUFvQyxDQUFDLENBQUMsQ0FBQztBQUM3SSxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdEIsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRywwQkFBMEIsQ0FBQyxDQUFDO0FBQ3BHLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksVUFBVSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtBQUNqRCxNQUFNLFlBQVksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlELEtBQUs7QUFDTDtBQUNBLElBQUksWUFBWSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUN6RSxNQUFNLE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUM7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDdEMsUUFBUSxZQUFZLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNwRSxRQUFRLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDdkIsUUFBUSxVQUFVLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUNsQyxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxlQUFlLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMxQyxNQUFNLE9BQU8sV0FBVyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztBQUN6QyxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMsRUFBRSxDQUFDO0FBQ0o7QUFDQSxNQUFNLFFBQVEsR0FBRyxTQUFTLGVBQWUsR0FBRztBQUM1QyxFQUFFLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDOUgsRUFBRSxNQUFNLDZCQUE2QixHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNoSyxFQUFFLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUMvSixFQUFFLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0QsRUFBRSxNQUFNLG1CQUFtQixHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xELEVBQUUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxFQUFFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsRUFBRSxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hEO0FBQ0EsRUFBRSxTQUFTLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtBQUN2QyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUU7QUFDeEQsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pELElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO0FBQ3ZELElBQUksTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDO0FBQ3pCLElBQUksTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLElBQUksTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDO0FBQ3pCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRCxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUU7QUFDdkMsSUFBSSxJQUFJLEtBQUssSUFBSSxTQUFTLEVBQUU7QUFDNUIsTUFBTSxPQUFPLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNoRCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksS0FBSyxJQUFJLFVBQVUsRUFBRTtBQUM3QixNQUFNLE9BQU8sQ0FBQyxDQUFDO0FBQ2YsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3pFLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxhQUFhLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUU7QUFDMUMsSUFBSSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDL0MsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLE9BQU8sQ0FBQyxDQUFDLEVBQUU7QUFDdEIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDZixNQUFNLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRTtBQUNqQixNQUFNLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNuQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sQ0FBQyxHQUFHLGlCQUFpQixDQUFDO0FBQ2pDLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxvQkFBb0IsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO0FBQ3BFLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUM3RixNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxJQUFJLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQztBQUM5QixJQUFJLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DLElBQUksTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDO0FBQzlCLElBQUksTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsSUFBSSxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUM7QUFDOUIsSUFBSSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyxJQUFJLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDOUMsSUFBSSxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ2pDLElBQUksTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUM5QyxJQUFJLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDakMsSUFBSSxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQzlDLElBQUksTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUNqQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLFFBQVEsQ0FBQztBQUNqRCxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLFFBQVEsQ0FBQztBQUNqRCxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLFFBQVEsQ0FBQztBQUNqRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMseUJBQXlCLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRTtBQUN2RSxJQUFJLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNoRSxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUN2QixJQUFJLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEQsSUFBSSxNQUFNLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQztBQUN6QyxJQUFJLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDbkQsSUFBSSxhQUFhLENBQUMsNkJBQTZCLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ25FLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyx3QkFBd0IsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQ3RFLElBQUksTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3ZCLElBQUksYUFBYSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0RCxJQUFJLE1BQU0sT0FBTyxHQUFHLG1CQUFtQixDQUFDO0FBQ3hDLElBQUksWUFBWSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNqRCxJQUFJLGFBQWEsQ0FBQyw2QkFBNkIsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEUsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLFlBQVksQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRTtBQUNyRSxJQUFJLE1BQU0sQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUMxRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDOUQsSUFBSSxNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQzlELElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDekMsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN6QyxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3pDLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDekQsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN6RCxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ3pELElBQUksTUFBTSxHQUFHLEdBQUcsa0JBQWtCLENBQUM7QUFDbkMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsSUFBSSxNQUFNLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQztBQUN4QyxJQUFJLHlCQUF5QixDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzVELElBQUksTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUM7QUFDekMsSUFBSSxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM3RCxJQUFJLE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDO0FBQ3ZDLElBQUksd0JBQXdCLENBQUMsc0JBQXNCLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pFLElBQUksTUFBTSxJQUFJLEdBQUcsa0JBQWtCLENBQUM7QUFDcEMsSUFBSSxhQUFhLENBQUMsMEJBQTBCLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzRCxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9ELElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0QsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLFFBQVEsU0FBUyxVQUFVLENBQUM7QUFDcEMsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO0FBQ3ZELE1BQU0sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6QjtBQUNBLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUN2QixRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7QUFDNUYsT0FBTztBQUNQO0FBQ0EsTUFBTSxVQUFVLEdBQUcsVUFBVSxJQUFJLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JELE1BQU0sS0FBSyxHQUFHLEtBQUssSUFBSSxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsTUFBTSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsTUFBTSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsTUFBTSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsTUFBTSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUNuQyxNQUFNLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixNQUFNLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixNQUFNLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixNQUFNLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ25DLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLE1BQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixNQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixNQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixNQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsTUFBTSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFO0FBQ3hDLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxrQ0FBa0MsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyx5QkFBeUIsQ0FBQyxDQUFDO0FBQ2xILE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTtBQUN0QyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsMEJBQTBCLENBQUMsQ0FBQztBQUNwSCxRQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUMsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQ3JELFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO0FBQzlILFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7QUFDakQsTUFBTSxZQUFZLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5RCxLQUFLO0FBQ0w7QUFDQSxJQUFJLFlBQVksQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDekUsTUFBTSxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFDO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3RDLFFBQVEsWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDcEUsUUFBUSxTQUFTLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsVUFBVSxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDbEMsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksZUFBZSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUU7QUFDMUMsTUFBTSxPQUFPLFdBQVcsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqRCxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMsRUFBRSxDQUFDO0FBQ0o7QUFDQSxNQUFNLEtBQUssR0FBRyxTQUFTLFlBQVksR0FBRztBQUN0QyxFQUFFLFNBQVMsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUNuQixJQUFJLElBQUksTUFBTSxDQUFDO0FBQ2Y7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDckIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0QixLQUFLLE1BQU07QUFDWCxNQUFNLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDeEMsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUM3QyxJQUFJLE9BQU8sSUFBSSxHQUFHLEtBQUssSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2pELEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxZQUFZLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7QUFDdEUsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDNUIsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLElBQUksSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxNQUFNLEtBQUssS0FBSyxFQUFFO0FBQzFCLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0QyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRCxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUU7QUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUNuQixLQUFLLE1BQU0sSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRTtBQUM3QixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ25CLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRTtBQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ25CLEtBQUssTUFBTSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFO0FBQzdCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDbkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO0FBQzlCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDM0IsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUMzQixJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEI7QUFDQSxJQUFJLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDbkIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQ2hELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxLQUFLLE1BQU07QUFDWCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDakQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzlDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5QyxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLEtBQUssU0FBUyxVQUFVLENBQUM7QUFDakMsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7QUFDL0MsTUFBTSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RCO0FBQ0EsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ3ZCLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsbURBQW1ELENBQUMsQ0FBQztBQUN6RixPQUFPO0FBQ1A7QUFDQSxNQUFNLFVBQVUsR0FBRyxVQUFVLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNDLE1BQU0sS0FBSyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM5QyxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixNQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsTUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixNQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO0FBQ3ZELFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsc0RBQXNELENBQUMsQ0FBQztBQUM1RixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDckQsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsNkNBQTZDLENBQUMsQ0FBQztBQUN2RSxRQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QyxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRTtBQUMxRCxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSx5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QUFDO0FBQzlCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEdBQUc7QUFDSDtBQUNBLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDdEMsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO0FBQ2xDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEdBQUc7QUFDSDtBQUNBLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM1QixJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDOUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENB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QUUsWUFBWSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVB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LFNBQVM7QUFDVDtBQUNBLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDOUIsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUNaLFFBQVEsTUFBTSxLQUFLLENBQUMsQ0FBQztBQUNyQixRQUFRLFVBQVUsSUFBSSxDQUFDLENBQUM7QUFDeEIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFDN0IsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNwQyxNQUFNLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUMzQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQjtBQUNBLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN0QyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMvQixPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxVQUFVLEdBQUc7QUFDakIsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDcEMsTUFBTSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDakI7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDcEMsUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUNwRCxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sQ0FBQyxDQUFDO0FBQ2YsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pCLElBQUksTUFBTSxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7QUFDdEMsTUFBTSxNQUFNLE1BQU0sR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hELE1BQU0sTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3ZDLE1BQU0sSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLE1BQU0sSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLE1BQU0sTUFBTSxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDakQsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUMvQyxNQUFNLE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2hELE1BQU0sTUFBTSxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDcEQsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUMvQyxNQUFNLElBQUksSUFBSSxDQUFDO0FBQ2YsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNaO0FBQ0EsTUFBTSxPQUFPLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDM0MsUUFBUSxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7QUFDeEIsVUFBVSxRQUFRLENBQUMsR0FBRyxJQUFJO0FBQzFCLFlBQVksS0FBSyxDQUFDO0FBQ2xCLGNBQWMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ2xDLGNBQWMsTUFBTTtBQUNwQjtBQUNBLFlBQVksS0FBSyxDQUFDO0FBQ2xCLGNBQWMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUM1QyxjQUFjLE1BQU07QUFDcEIsV0FBVztBQUNYO0FBQ0EsVUFBVSxTQUFTO0FBQ25CLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTSxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN0QyxRQUFRLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEM7QUFDQSxRQUFRLElBQUksUUFBUSxHQUFHLENBQUMsR0FBRyxZQUFZLEVBQUU7QUFDekMsVUFBVSxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7QUFDekUsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDL0IsUUFBUSxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDbEQ7QUFDQSxRQUFRLFFBQVEsSUFBSTtBQUNwQixVQUFVLEtBQUssQ0FBQztBQUNoQixZQUFZLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzVDLFlBQVksTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDaEQsWUFBWSxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN6QyxZQUFZLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3JHO0FBQ0EsWUFBWSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3BELGNBQWMsTUFBTSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNwQyxjQUFjLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3BELGNBQWMsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDM0MsY0FBYyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNsRCxjQUFjLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzNDLGNBQWMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDdkcsYUFBYTtBQUNiO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLENBQUM7QUFDaEIsWUFBWSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM1QyxZQUFZLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2hELFlBQVksTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDekMsWUFBWSxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDaEM7QUFDQSxZQUFZLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDcEQsY0FBYyxNQUFNLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3BDLGNBQWMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDcEQsY0FBYyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMzQyxjQUFjLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2xELGNBQWMsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDM0MsY0FBYyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDbEMsYUFBYTtBQUNiO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLENBQUM7QUFDaEIsWUFBWSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMzQyxZQUFZLElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDdkMsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEQ7QUFDQSxZQUFZLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDcEQsY0FBYyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3JDO0FBQ0EsY0FBYyxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQzdCLGdCQUFnQixNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNwRCxnQkFBZ0IsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDNUMsZUFBZTtBQUNmO0FBQ0EsY0FBYyxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0RCxjQUFjLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxRCxhQUFhO0FBQ2I7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssQ0FBQztBQUNoQixZQUFZLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzVDLFlBQVksTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDaEQsWUFBWSxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN6QyxZQUFZLElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDdkMsWUFBWSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN2RjtBQUNBLFlBQVksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNwRCxjQUFjLE1BQU0sQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDcEM7QUFDQSxjQUFjLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDN0IsZ0JBQWdCLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3RELGdCQUFnQixNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM3QyxlQUFlLE1BQU07QUFDckIsZ0JBQWdCLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0IsZUFBZTtBQUNmO0FBQ0EsY0FBYyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNsRCxjQUFjLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzNDLGNBQWMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUN6QyxjQUFjLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pGLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxDQUFDO0FBQ2hCLFlBQVksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDL0MsWUFBWSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMvQyxZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDcEY7QUFDQSxZQUFZLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDcEQsY0FBYyxNQUFNLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsY0FBYyxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQzdCLGdCQUFnQixNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUN4RCxnQkFBZ0IsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDaEQsZUFBZTtBQUNmO0FBQ0EsY0FBYyxNQUFNLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3pDLGNBQWMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDbEQsY0FBYyxNQUFNLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM5QyxjQUFjLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDdEYsYUFBYTtBQUNiO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLENBQUM7QUFDaEIsWUFBWSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNoRCxZQUFZLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ3BELFlBQVksTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDN0MsWUFBWSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMvQyxZQUFZLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUN0SDtBQUNBLFlBQVksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNwRCxjQUFjLE1BQU0sQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDeEM7QUFDQSxjQUFjLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDN0IsZ0JBQWdCLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQzFELGdCQUFnQixNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNqRCxlQUFlLE1BQU07QUFDckIsZ0JBQWdCLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0IsZUFBZTtBQUNmO0FBQ0EsY0FBYyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUN0RCxjQUFjLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQy9DLGNBQWMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDakQsY0FBYyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDeEgsYUFBYTtBQUNiO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVTtBQUNWLFlBQVksTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLHlDQUF5QyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRixTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLE9BQU8sRUFBRTtBQUNuQixRQUFRLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLGdCQUFnQixDQUFDO0FBQzFCLENBQUMsRUFBRSxDQUFDO0FBQ0o7QUFDQSxNQUFNLFdBQVcsR0FBRyxTQUFTLGtCQUFrQixHQUFHO0FBQ2xELEVBQUUsU0FBUyxRQUFRLENBQUMsR0FBRyxFQUFFO0FBQ3pCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2Q7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3pDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRTtBQUM3QixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDbkMsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0FBQ3RFLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRTtBQUMxQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ2hDLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsK0JBQStCLENBQUMsQ0FBQztBQUNuRSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQ3BDLElBQUksT0FBTyxJQUFJLEVBQUU7QUFDakIsTUFBTSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDL0I7QUFDQSxNQUFNLElBQUksR0FBRyxLQUFLLFdBQVcsQ0FBQyxHQUFHLEVBQUU7QUFDbkMsUUFBUSxNQUFNO0FBQ2QsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLEVBQUU7QUFDcEQsUUFBUSxPQUFPO0FBQ2YsT0FBTztBQUNQO0FBQ0EsTUFBTSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEIsTUFBTSxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzNCLE1BQU0sWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDNUIsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUNyQyxJQUFJLE9BQU8sSUFBSSxFQUFFO0FBQ2pCLE1BQU0sSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQy9CO0FBQ0EsTUFBTSxJQUFJLEdBQUcsS0FBSyxXQUFXLENBQUMsR0FBRyxFQUFFO0FBQ25DLFFBQVEsTUFBTTtBQUNkLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxFQUFFO0FBQ3JELFFBQVEsT0FBTztBQUNmLE9BQU87QUFDUDtBQUNBLE1BQU0sWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQixNQUFNLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixNQUFNLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0I7QUFDQSxNQUFNLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDN0QsUUFBUSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlFLFFBQVEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNDLE9BQU8sTUFBTSxJQUFJLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDbkQsUUFBUSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzdCLFFBQVEsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ3pCO0FBQ0EsUUFBUSxPQUFPLENBQUMsSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxHQUFHLEtBQUssV0FBVyxDQUFDLEdBQUcsRUFBRTtBQUM3RSxVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQy9CLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDakQsT0FBTyxNQUFNO0FBQ2IsUUFBUSxNQUFNO0FBQ2QsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUNyRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7QUFDckMsSUFBSSxPQUFPLElBQUksRUFBRTtBQUNqQixNQUFNLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMvQjtBQUNBLE1BQU0sSUFBSSxHQUFHLEtBQUssV0FBVyxDQUFDLEdBQUcsRUFBRTtBQUNuQyxRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxZQUFZLENBQUMsRUFBRTtBQUNyRCxRQUFRLE9BQU87QUFDZixPQUFPO0FBQ1A7QUFDQSxNQUFNLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixNQUFNLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0IsTUFBTSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckIsTUFBTSxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDdEIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1QixLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQ3RDLElBQUksT0FBTyxJQUFJLEVBQUU7QUFDakIsTUFBTSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDL0I7QUFDQSxNQUFNLElBQUksR0FBRyxLQUFLLFdBQVcsQ0FBQyxHQUFHLEVBQUU7QUFDbkMsUUFBUSxNQUFNO0FBQ2QsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsYUFBYSxDQUFDLEVBQUU7QUFDdEQsUUFBUSxPQUFPO0FBQ2YsT0FBTztBQUNQO0FBQ0EsTUFBTSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEIsTUFBTSxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzNCLE1BQU0sWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQixNQUFNLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQixNQUFNLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUN6QixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMxQyxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLG1CQUFtQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7QUFDNUMsSUFBSSxPQUFPLElBQUksRUFBRTtBQUNqQixNQUFNLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMvQjtBQUNBLE1BQU0sSUFBSSxHQUFHLEtBQUssV0FBVyxDQUFDLEdBQUcsRUFBRTtBQUNuQyxRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQyxFQUFFO0FBQzVELFFBQVEsT0FBTztBQUNmLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRTtBQUNyQyxRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0I7QUFDQSxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDckMsUUFBUSxNQUFNO0FBQ2QsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakMsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEQsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBQzVELEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUNuQyxJQUFJLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMvQjtBQUNBLElBQUksSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQy9CLE1BQU0sSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzVCLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7QUFDdEMsSUFBSSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDL0I7QUFDQSxJQUFJLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDdkUsTUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDM0IsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsZUFBZSxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUU7QUFDbkUsSUFBSSxJQUFJLFFBQVEsRUFBRSxlQUFlLENBQUM7QUFDbEM7QUFDQSxJQUFJLE9BQU8sRUFBRSxPQUFPLElBQUksRUFBRTtBQUMxQixNQUFNLElBQUk7QUFDVixRQUFRLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNuQztBQUNBLFFBQVEsSUFBSSxHQUFHLEtBQUssV0FBVyxDQUFDLEdBQUcsRUFBRTtBQUNyQyxVQUFVLE1BQU07QUFDaEIsU0FBUyxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRTtBQUNqRCxVQUFVLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7QUFDcEMsWUFBWSxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3BDLFdBQVcsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO0FBQzlDLFlBQVksYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN2QyxXQUFXO0FBQ1g7QUFDQSxVQUFVLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDekIsU0FBUyxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTtBQUNoRCxVQUFVLFFBQVEsR0FBRyxDQUFDLEdBQUc7QUFDekIsWUFBWSxLQUFLLFNBQVM7QUFDMUIsY0FBYyxNQUFNLE9BQU8sQ0FBQztBQUM1QjtBQUNBLFlBQVksS0FBSyxTQUFTO0FBQzFCLGNBQWMsSUFBSSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFO0FBQ3JELGdCQUFnQixlQUFlLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztBQUNoRCxlQUFlO0FBQ2Y7QUFDQSxjQUFjLE1BQU07QUFDcEI7QUFDQSxZQUFZLEtBQUsscUJBQXFCO0FBQ3RDLGNBQWMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQy9DLGNBQWMsTUFBTTtBQUNwQjtBQUNBLFlBQVksS0FBSyxhQUFhO0FBQzlCLGNBQWMsV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN2QyxjQUFjLE1BQU07QUFDcEI7QUFDQSxZQUFZLEtBQUssY0FBYztBQUMvQixjQUFjLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDeEMsY0FBYyxNQUFNO0FBQ3BCO0FBQ0EsWUFBWSxLQUFLLGNBQWM7QUFDL0IsY0FBYyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3hDLGNBQWMsTUFBTTtBQUNwQjtBQUNBLFlBQVksS0FBSyxlQUFlO0FBQ2hDLGNBQWMsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN6QyxjQUFjLE1BQU07QUFDcEIsV0FBVztBQUNYLFNBQVM7QUFDVCxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUU7QUFDbkIsUUFBUSxJQUFJLEVBQUUsWUFBWSxXQUFXLENBQUMsb0JBQW9CLEVBQUU7QUFDNUQsVUFBVSxNQUFNLEVBQUUsQ0FBQztBQUNuQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxxQkFBcUIsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNwRCxRQUFRLFNBQVM7QUFDakIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxlQUFlLEVBQUU7QUFDckMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDO0FBQ2hDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxPQUFPLEVBQUU7QUFDakIsTUFBTSxPQUFPLFVBQVUsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDekQsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQSxFQUFFLGVBQWUsVUFBVSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUU7QUFDN0QsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0saUJBQWlCLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDdEU7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLENBQUMsRUFBRTtBQUN2QyxNQUFNLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUM7QUFDOUQ7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUQsUUFBUSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hFLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7QUFDaEUsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsRUFBRSxLQUFLLEVBQUU7QUFDL0MsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUMvQixRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkQsT0FBTztBQUNQLEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQSxFQUFFLGVBQWUsaUJBQWlCLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO0FBQzNELElBQUksSUFBSSxJQUFJLEtBQUssWUFBWSxFQUFFO0FBQy9CLE1BQU0sT0FBTyxJQUFJLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLFlBQVksRUFBRTtBQUN0QyxNQUFNLE9BQU8sSUFBSSxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDeEMsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3BELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO0FBQzNCLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO0FBQ3BFLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTTtBQUNWLE1BQU0sUUFBUTtBQUNkLE1BQU0sZUFBZTtBQUNyQixLQUFLLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQyxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxJQUFJLGVBQWUsS0FBSyxLQUFLLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFO0FBQzlELE1BQU0sT0FBTyxJQUFJLGdCQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxJQUFJO0FBQ3ZFLFFBQVEsT0FBTyxVQUFVLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzNELE9BQU8sQ0FBQyxDQUFDO0FBQ1QsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLGVBQWUsS0FBSyxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFO0FBQzVELE1BQU0sTUFBTSxLQUFLLEdBQUcsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLE1BQU0sT0FBTyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1RCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUMsaUVBQWlFLENBQUMsQ0FBQztBQUN2RixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU87QUFDVCxJQUFJLE1BQU0sTUFBTSxDQUFDLE1BQU0sRUFBRTtBQUN6QixNQUFNLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFDdkMsTUFBTSxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztBQUN2RCxNQUFNLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7QUFDckM7QUFDQSxNQUFNLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFO0FBQzdDLFFBQVEsT0FBTyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDbEUsT0FBTyxNQUFNLElBQUksSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFO0FBQ3RELFFBQVEsTUFBTSxVQUFVLEdBQUcsTUFBTSxTQUFTLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDL0c7QUFDQSxRQUFRLElBQUksVUFBVSxDQUFDLGNBQWMsRUFBRTtBQUN2QyxVQUFVLE9BQU8saUJBQWlCLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3RFLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxVQUFVLENBQUM7QUFDMUIsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDNUMsS0FBSztBQUNMO0FBQ0EsR0FBRyxDQUFDO0FBQ0osQ0FBQyxFQUFFLENBQUM7QUFDSjtBQUNBLE9BQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQ2xDO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTyxDQUFDLHVCQUF1QixFQUFFLE9BQU8sRUFBRSxtQkFBbUIsS0FBSztBQUNsRTtBQUNBO0FBQ0E7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUc7QUFDOUMsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUNiLENBQUMsRUFBRSxDQUFDO0FBQ0osT0FBTyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDaEU7QUFDQSxJQUFJLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQztBQUNBLElBQUksV0FBVyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsSUFBSSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekM7QUFDQSxJQUFJLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9DO0FBQ0EsSUFBSSxpQkFBaUIsR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRDtBQUNBLElBQUksYUFBYSxHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVDO0FBQ0EsSUFBSSxhQUFhLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDNUM7QUFDQSxJQUFJLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1QztBQUNBLElBQUksWUFBWSxHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNDO0FBQ0EsSUFBSSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUM7QUFDQSxJQUFJLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQztBQUNBLElBQUksT0FBTyxHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsSUFBSSxpQkFBaUIsR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRDtBQUNBLElBQUksa0JBQWtCLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakQ7QUFDQSxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQztBQUNqQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQztBQUNoQztBQUNBLFNBQVMsY0FBYyxDQUFDLEtBQUssRUFBRTtBQUMvQixFQUFFLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDbkMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ1gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ1o7QUFDQSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDeEMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDWCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNyQyxDQUFDO0FBQ0Q7QUFDQSxNQUFNLE1BQU0sQ0FBQztBQUNiLEVBQUUsV0FBVyxDQUFDO0FBQ2QsSUFBSSxLQUFLO0FBQ1QsSUFBSSxJQUFJO0FBQ1IsSUFBSSxZQUFZLEdBQUcsS0FBSztBQUN4QixJQUFJLFlBQVksR0FBRyxLQUFLO0FBQ3hCLEdBQUcsRUFBRTtBQUNMLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDdkIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBQ3JDLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDckMsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLEdBQUc7QUFDWCxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNwQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNwQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLEtBQUssR0FBRztBQUNWLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxZQUFZLFdBQVcsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFO0FBQ3hFLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzVCLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdkIsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDNUIsTUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDdEMsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxHQUFHO0FBQ2IsSUFBSSxJQUFJO0FBQ1IsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkIsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDaEIsTUFBTSxJQUFJLENBQUMsWUFBWSxXQUFXLENBQUMsb0JBQW9CLEVBQUU7QUFDekQsUUFBUSxNQUFNLENBQUMsQ0FBQztBQUNoQixPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ25CLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxlQUFlLEdBQUcsSUFBSSxFQUFFO0FBQ2pDLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUMzQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqQjtBQUNBLElBQUksSUFBSSxJQUFJLFlBQVksV0FBVyxDQUFDLEdBQUcsRUFBRTtBQUN6QyxNQUFNLFFBQVEsSUFBSSxDQUFDLEdBQUc7QUFDdEIsUUFBUSxLQUFLLElBQUk7QUFDakIsVUFBVSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDdkQ7QUFDQSxRQUFRLEtBQUssR0FBRztBQUNoQixVQUFVLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUMzQjtBQUNBLFVBQVUsT0FBTyxDQUFDLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLEdBQUcsRUFBRTtBQUMzRixZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBQ3JELFdBQVc7QUFDWDtBQUNBLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxHQUFHLEVBQUU7QUFDN0MsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDbkMsY0FBYyxPQUFPLEtBQUssQ0FBQztBQUMzQixhQUFhO0FBQ2I7QUFDQSxZQUFZLE1BQU0sSUFBSSxXQUFXLENBQUMsa0JBQWtCLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUNsRixXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN2QixVQUFVLE9BQU8sS0FBSyxDQUFDO0FBQ3ZCO0FBQ0EsUUFBUSxLQUFLLElBQUk7QUFDakIsVUFBVSxNQUFNLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZEO0FBQ0EsVUFBVSxPQUFPLENBQUMsSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsR0FBRyxFQUFFO0FBQzVGLFlBQVksSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDckQsY0FBYyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsaURBQWlELENBQUMsQ0FBQztBQUNqRixjQUFjLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMzQixjQUFjLFNBQVM7QUFDdkIsYUFBYTtBQUNiO0FBQ0EsWUFBWSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN2QyxZQUFZLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN6QjtBQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxHQUFHLEVBQUU7QUFDL0MsY0FBYyxNQUFNO0FBQ3BCLGFBQWE7QUFDYjtBQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBQ3hELFdBQVc7QUFDWDtBQUNBLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxHQUFHLEVBQUU7QUFDN0MsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDbkMsY0FBYyxPQUFPLElBQUksQ0FBQztBQUMxQixhQUFhO0FBQ2I7QUFDQSxZQUFZLE1BQU0sSUFBSSxXQUFXLENBQUMsa0JBQWtCLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztBQUN2RixXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUU7QUFDM0QsWUFBWSxPQUFPLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JGLFdBQVc7QUFDWDtBQUNBLFVBQVUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZCLFVBQVUsT0FBTyxJQUFJLENBQUM7QUFDdEI7QUFDQSxRQUFRO0FBQ1IsVUFBVSxPQUFPLElBQUksQ0FBQztBQUN0QixPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDaEMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQ2pGLFFBQVEsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6RDtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JCLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JCLFFBQVEsT0FBTyxHQUFHLENBQUM7QUFDbkIsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQ2xDLE1BQU0sSUFBSSxlQUFlLEVBQUU7QUFDM0IsUUFBUSxPQUFPLGVBQWUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkQsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsMEJBQTBCLENBQUMsTUFBTSxFQUFFO0FBQ3JDLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSTtBQUNsQixVQUFVLENBQUMsR0FBRyxJQUFJO0FBQ2xCLFVBQVUsS0FBSyxHQUFHLElBQUk7QUFDdEIsVUFBVSxFQUFFLEdBQUcsR0FBRztBQUNsQixVQUFVLEVBQUUsR0FBRyxHQUFHO0FBQ2xCLFVBQVUsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNwQixJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLO0FBQzVCLFVBQVUsUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHO0FBQy9CLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQixJQUFJLElBQUksS0FBSyxHQUFHLENBQUM7QUFDakIsUUFBUSxFQUFFO0FBQ1YsUUFBUSxVQUFVLENBQUM7QUFDbkI7QUFDQSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0FBQzNDLE1BQU0sSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3ZCLFFBQVEsS0FBSyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxPQUFPLE1BQU0sSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQzlCLFFBQVEsS0FBSyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxPQUFPLE1BQU07QUFDYixRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLDZDQUE2QyxDQUFDLENBQUM7QUFDdEY7QUFDQSxRQUFRLElBQUksRUFBRSxLQUFLLEtBQUssSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDcEQsVUFBVSxVQUFVLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUNsQyxVQUFVLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckQ7QUFDQSxVQUFVLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbkUsWUFBWSxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DO0FBQ0EsWUFBWSxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDN0QsY0FBYyxTQUFTO0FBQ3ZCLGFBQWE7QUFDYjtBQUNBLFlBQVksSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUU7QUFDckUsY0FBYyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLGNBQWMsTUFBTTtBQUNwQixhQUFhO0FBQ2IsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDM0IsWUFBWSxTQUFTO0FBQ3JCLFdBQVc7QUFDWDtBQUNBLFVBQVUsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFO0FBQ25DLFlBQVksTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzVDO0FBQ0EsWUFBWSxJQUFJLE9BQU8sWUFBWSxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDekYsY0FBYyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLGFBQWE7QUFDYixXQUFXLE1BQU07QUFDakIsWUFBWSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsa0VBQWtFLENBQUMsQ0FBQztBQUNoRyxXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtBQUMzQixZQUFZLE1BQU07QUFDbEIsV0FBVztBQUNYLFNBQVMsTUFBTTtBQUNmLFVBQVUsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNwQixTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsOEJBQThCLEdBQUcsaUVBQWlFLENBQUMsQ0FBQztBQUMxSDtBQUNBLE1BQU0sSUFBSSxVQUFVLEVBQUU7QUFDdEIsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsMERBQTBELENBQUMsQ0FBQztBQUNwRixRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDaEQsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVCLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMzQixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0I7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDNUMsTUFBTSxTQUFTLEVBQUUsQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sTUFBTSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsUUFBUSxDQUFDO0FBQzdDLEdBQUc7QUFDSDtBQUNBLEVBQUUsNEJBQTRCLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLElBQUksTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUNoQyxJQUFJLElBQUksUUFBUSxHQUFHLEtBQUs7QUFDeEIsUUFBUSxDQUFDO0FBQ1QsUUFBUSxZQUFZLENBQUM7QUFDckI7QUFDQSxJQUFJLE9BQU8sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0FBQzFDLE1BQU0sSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQ3RCLFFBQVEsU0FBUztBQUNqQixPQUFPO0FBQ1A7QUFDQSxNQUFNLFFBQVEsTUFBTSxDQUFDLE9BQU8sRUFBRTtBQUM5QixRQUFRLEtBQUssSUFBSTtBQUNqQixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssSUFBSTtBQUNqQixVQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssSUFBSTtBQUNqQixVQUFVLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDMUIsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUss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WUFBWSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdHhCO0FBQ0EsU0FBUyxVQUFVLENBQUMsRUFBRSxFQUFFO0FBQ3hCLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUU7QUFDaEMsSUFBSSxPQUFPLEVBQUUsR0FBRyxJ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QUMsQ0FBQztBQUNwQixNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDckIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUNueUUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNYLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbDRJLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2NEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzV3RCxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFB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QUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxRyxNQUFNLFlBQVksR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDN1QsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDbFQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlpSixNQUFNLGdCQUFnQixHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFP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Q0FBQyxFQUFFO0FBQ0gsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLENBQUMsRUFBRTtBQUNILEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLENBQUMsRUFBRTtBQUNILEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sQ0FBQyxFQUFFO0FBQ0gsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDTCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLENBQUMsRUFBRTtBQUNILEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLENBQUMsRUFBRTtBQUNILEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sQ0FBQyxFQUFFO0FBQ0gsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLENBQUMsRUFBRTtBQUNILEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ0wsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLENBQUMsRUFBRTtBQUNILEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLENBQUMsRUFBRTtBQUNILEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNMLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLENBQUMsRUFBRTtBQUNILEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLENBQUMsRUFBRTtBQUNILEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLENBQUMsRUFBRTtBQUNILEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLENBQUMsRUFBRTtBQUNILEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sQ0FBQyxFQUFFO0FBQ0gsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDSixNQUFNLG1CQUFtQixHQUFHLENBQUM7QUFDN0IsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNYLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLEdBQUcsQ0FBQztBQUNKLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDZCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixHQUFHLENBQUM7QUFDSixDQUFDLEVBQUU7QUFDSCxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ1gsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsR0FBRyxDQUFDO0FBQ0osRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUNkLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixHQUFHLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQztBQUNILE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDeEQsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNsRDtBQUNBLFNBQVMscUJBQXFCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUU7QUFDL0QsRUFBRSxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDO0FBQzFDLEVBQUUsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEUsRUFBRSxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDcEIsRUFBRSxJQUFJLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztBQUNqRCxFQUFFLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQztBQUNoQztBQUNBLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0IsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVDLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2QyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdIO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDL0QsTUFBTSxZQUFZLEdBQUcsQ0FBQyxZQUFZLEdBQUcsY0FBYyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDckosS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxZQUFZLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRTtBQUNoRyxFQUFFLElBQUksR0FBRyxFQUFFO0FBQ1gsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9GLElBQUksT0FBTyxlQUFlLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDeEQsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLGFBQWEsS0FB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R0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4RixNQUFNLE1BQU07QUFDWjtBQUNBLElBQUksS0FBSyxDQUFDO0FBQ1YsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQy9ILE1BQU0sTUFBTTtBQUNaO0FBQ0EsSUFBSSxLQUFLLENBQUM7QUFDVixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakwsTUFBTSxNQUFNO0FBQ1o7QUFDQSxJQUFJLEtBQUssQ0FBQztBQUNWLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwSCxNQUFNLE1BQU07QUFDWjtBQUNBLElBQUksS0FBSyxDQUFDO0FBQ1YsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RLLE1BQU0sTUFBTTtBQUNaO0FBQ0EsSUFBSSxLQUFLLENBQUM7QUFDVixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdFMsTUFBTSxNQUFNO0FBQ1o7QUFDQSxJQUFJLEtBQUssQ0FBQztBQUNWLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwVCxNQUFNLE1BQU07QUFDWjtBQUNBLElBQUksS0FBSyxDQUFDO0FBQ1YsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoWixNQUFNLE1BQU07QUFDWjtBQUNBLElBQUksS0FBSyxDQUFDO0FBQ1YsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcmEsTUFBTSxNQUFNO0FBQ1o7QUFDQSxJQUFJLEtBQUssRUFBRTtBQUNYLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BaLE1BQU0sTUFBTTtBQUNaO0FBQ0EsSUFBSSxLQUFLLEVBQUU7QUFDWCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqUCxNQUFNLE1BQU07QUFDWjtBQUNBLElBQUksS0FBSyxFQUFFO0FBQ1gsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDalAsTUFBTSxNQUFNO0FBQ1o7QUFDQSxJQUFJLEtBQUssRUFBRTtBQUNYLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2hQLE1BQU0sTUFBTTtBQUNaO0FBQ0EsSUFBSSxLQUFLLEVBQUU7QUFDWCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRyxNQUFNLE1BQU07QUFDWjtBQUNBLElBQUksS0FBSyxFQUFFO0FBQ1gsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNQLE1BQU0sTUFBTTtBQUNaO0FBQ0EsSUFBSTtBQUNKLE1BQU0sTUFBTSxJQUFJLFVBQVUsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsRCxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLEtBQUssR0FBRyxJQUFJLFlBQVksQ0FBQyxLQUFLLEVBQUUs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RUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxDQUFDO0FBQ1QsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNULEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNULEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDVCxFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUs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Q0FBQztBQUNoRCxJQUFJLEVBQUUsR0FBRyxTQUFTLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hELElBQUksRUFBRSxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEQsSUFBSSxFQUFFLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxJQUFJLEVBQUUsR0FBRyxTQUFTLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hELElBQUksRUFBRSxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEQsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRTtBQUNsRCxNQUFNLENBQUMsR0FBRyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUM7QUFDcEMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckIsTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQixNQUFNLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckIsTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQixNQUFNLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckIsTUFBTSxTQUFTO0FBQ2YsS0FBSztBQUNMO0FBQ0EsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QixJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEIsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QixJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEIsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QixJQUFJLEVBQUUsR0FBRyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDbEMsSUFBSSxFQUFFLEdBQUcsUUFBUSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2xDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNaLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNaLElBQUksRUFBRSxHQUFHLFVBQVUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUMzQyxJQUFJLEVBQUUsR0FBRyxVQUFVLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDM0MsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNqQixJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2pCLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQy9DLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2hELElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNYLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ2pELElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ2xELElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNYLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ2pELElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ2xELElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNYLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekIsR0FBRztBQUNIO0FBQ0EsRUFBRSxLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFO0FBQ3BDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDckIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNyQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDckIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNyQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRTtBQUNsRCxNQUFNLENBQUMsR0FBRyxRQUFRLEdBQUcsRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7QUFDckM7QUFDQSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO0FBQ3JCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLE9BQU8sTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7QUFDNUIsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLE9BQU8sTUFBTTtBQUNiLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQzFCLE9BQU87QUFDUDtBQUNBLE1BQU0sU0FBUyxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QyxNQUFNLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELE1BQU0sU0FBUyxDQUFDLGlCQUFpQixHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEQsTUFBTSxTQUFTLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRCxNQUFNLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xELE1BQU0sU0FBUyxDQUFDLGlCQUFpQixHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEQsTUFBTSxTQUFTLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRCxNQUFNLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xELE1BQU0sU0FBUztBQUNmLEtBQUs7QUFDTDtBQUNBLElBQUksRUFBRSxHQUFHLFFBQVEsR0FBRyxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNwQyxJQUFJLEVBQUUsR0FBRyxRQUFRLEdBQUcsRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7QUFDcEMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ1osSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ1osSUFBSSxFQUFFLEdBQUcsVUFBVSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQzdDLElBQUksRUFBRSxHQUFHLFVBQVUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUM3QyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDWixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDWixJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDbkMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQixJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNqRCxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNsRCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDWCxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQixJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNqRCxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNsRCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDWCxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJ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O0FBQ3JCLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxNQUFNO0FBQ3JCLFlBQVksTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2pFLFlBQVksTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzNCLFlBQVksR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkUsWUFBWSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RSxZQUFZLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLFlBQVksR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDekUsWUFBWSxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN6RSxZQUFZLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLFlBQVksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDMUUsWUFBWSxHQUFHLENBQUMsTUFBTSxHQUFHLENB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QUcsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25FO0FBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3RDLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN4QyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7QUFDaEIsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakUsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakUsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEUsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEUsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN2QyxNQUFNLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FB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LEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pSLEVBQUUsTUFBTSxjQUFjLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM1EsRUFBRSxNQUFNLGNBQWMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENB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RUFBRTtBQUNqRCxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzlCLElBQUksTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLElBQUksTUFBTSxTQUFTLEdBQUcsSUFBSSxZQUFZLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQztBQUNsRTtBQUNBLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3JCLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQzFCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFO0FBQ3hELFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUMxQixTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUssTUFBTTtBQUNYLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFO0FBQ3RELFFBQVEsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDbkUsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDckQsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDckQsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLGFBQWEsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvRSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDeEIsSUFBSSxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDMUI7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JDLE1BQU0sVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFDcEUsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUM7QUFDVCxRQUFRLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDMUIsSUFBSSxFQUFFLEdBQUcsYUFBYSxHQUFHLE1BQU0sQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3RCLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQzFCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDcEMsVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDO0FBQzFCLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSyxNQUFNO0FBQ1gsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsQyxRQUFRLElBQUksYUFBYSxLQUFLLENBQUMsRUFBRTtBQUNqQyxVQUFVLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDdkQ7QUFDQSxVQUFVLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsRSxZQUFZLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzdDLGNBQWMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUMsYUFBYTtBQUNiLFdBQVc7QUFDWDtBQUNBLFVBQVUsYUFBYSxHQUFHLFVBQVUsQ0FBQztBQUNyQyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLGFBQWEsRUFBRSxDQUFDO0FBQ3hCLFFBQVEsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ2pELFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ25ELFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ25EO0FBQ0EsUUFBUSxJQUFJLGFBQWEsS0FBSyxDQUFDLEVBQUU7QUFDakMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDakM7QUFDQSxVQUFVLEtBQUssQ0FBQyxHQUFHLGFBQWEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0QsWUFBWSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM3QyxjQUFjLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLGFBQWE7QUFDYixXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU87QUFDWCxNQUFNLEtBQUs7QUFDWCxNQUFNLE1BQU07QUFDWixNQUFNLEtBQUs7QUFDWCxLQUFLLENBQUM7QUFDTixHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxNQUFNLHFCQUFxQixTQUFTLFNBQVMsQ0FBQztBQUM5QyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRTtBQUM1QixJQUFJLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDNUIsSUFBSSxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ2hCLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUM7QUFDNUIsSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDLGlCQUFpQixDQUFDO0FBQ3JDLElBQUksTUFBTSxJQUFJLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztBQUNwQyxJQUFJLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDO0FBQ3BDLElBQUksTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUM7QUFDcEMsSUFBSSxNQUFNLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztBQUNoQyxJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckIsSUFBSSxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNuQjtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ25DLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNqQixLQUFLO0FBQ0w7QUFDQSxJQUFJLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLElBQUksT0FBTyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9CO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDbkMsTUFBTSxJQUFJLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDO0FBQ0EsTUFBTSxJQUFJLENBQUMsRUFBRSxFQUFFO0FBQ2YsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2YsUUFBUSxPQUFPLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLE9BQU8sTUFBTTtBQUNiLFFBQVEsTUFBTTtBQUNkLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLElBQUksT0FBTyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9CO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDbkMsTUFBTSxJQUFJLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztBQUM3QjtBQUNBLE1BQU0sSUFBSSxDQUFDLEVBQUUsRUFBRTtBQUNmLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNmLFFBQVEsT0FBTyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDL0IsT0FBTyxNQUFNO0FBQ2IsUUFBUSxNQUFNO0FBQ2QsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNmLElBQUksT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDbkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztBQUM3QjtBQUNBLE1BQU0sSUFBSSxDQUFDLEVBQUUsRUFBRTtBQUNmLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNmLFFBQVEsT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDL0IsT0FBTyxNQUFNO0FBQ2IsUUFBUSxNQUFNO0FBQ2QsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO0FBQ25CLE1BQU0sQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDckIsTUFBTSxPQUFPLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakM7QUFDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2pDLFFBQVEsSUFBSSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDL0I7QUFDQSxRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUU7QUFDakIsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pCLFVBQVUsT0FBTyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDakMsU0FBUyxNQUFNO0FBQ2YsVUFBVSxNQUFNO0FBQ2hCLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sbUJBQW1CLFNBQVMsU0FBUyxDQUFDO0FBQzVDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQzVCLElBQUksTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUM1QixJQUFJLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDaEIsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDYjtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDL0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUMvQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLENBQUMsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixLQUFLO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksR0FBRztBQUM5QyxFQUFFLEtBQUssRUFBRSxJQUFJO0FBQ2IsQ0FBQyxFQUFFLENBQUM7QUFDSixPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsSUFBSSxjQUFjLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0M7QUFDQSxNQUFNLFNBQVMsU0FBUyxjQUFjLENBQUMsWUFBWSxDQUFDO0FBQ3BELEVBQUUsV0FBVyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFO0FBQzdDLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3ZCLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDekIsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUN4QixJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLElBQUksTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUM7QUFDdEMsSUFBSSxNQUFNLFFBQVEsR0FBRztBQUNyQixNQUFNLFdBQVc7QUFDakIsTUFBTSxVQUFVLEVBQUUsQ0FBQztBQUNuQixNQUFNLFFBQVEsRUFBRSxHQUFHO0FBQ25CLE1BQU0sZ0JBQWdCLEVBQUUsSUFBSSxVQUFVLENBQUMsb0JBQW9CLENBQUM7QUFDNUQsTUFBTSxpQkFBaUIsRUFBRSxJQUFJLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQztBQUM5RCxNQUFNLG1CQUFtQixFQUFFLElBQUksV0FBVyxDQUFDLG9CQUFvQixDQUFDO0FBQ2hFLE1BQU0sZUFBZSxFQUFFLElBQUksVUFBVSxDQUFDLG9CQUFvQixDQUFDO0FBQzNELE1BQU0scUJBQXFCLEVBQUUsQ0FBQztBQUM5QixLQUFLLENBQUM7QUFDTjtBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNsQyxNQUFNLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkMsTUFBTSxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDN0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ2QsSUFBSSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ3JDLElBQUksSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUNyQztBQUNBLElBQUksT0FBTyxVQUFVLEdBQUcsQ0FBQyxFQUFFO0FBQzNCLE1BQU0sTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNuQztBQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDcEIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztBQUN4QixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLE9BQU87QUFDUDtBQUNBLE1BQU0sVUFBVSxHQUFHLFVBQVUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLE1BQU0sVUFBVSxJQUFJLENBQUMsQ0FBQztBQUN0QixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFJLENBQUMsQ0FBQztBQUN0QyxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ2pDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDekIsSUFBSSxPQUFPLFVBQVUsS0FBSyxVQUFVLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsR0FBRztBQUNkLElBQUksTUFBTSxTQUFTLEdBQUcsR0FBRztBQUN6QixVQUFVLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztBQUN2QyxJQUFJLElBQUksb0JBQW9CLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEIsSUFBSSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ25DO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ25CLE1BQU0sT0FBTztBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztBQUM3QyxJQUFJLElBQUksUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7QUFDckMsSUFBSSxNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztBQUN2RCxJQUFJLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDO0FBQ3pELElBQUksTUFBTSxtQkFBbUIsR0FBRyxRQUFRLENBQUMsbUJBQW1CLENBQUM7QUFDN0QsSUFBSSxJQUFJLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO0FBQ3pDLElBQUksSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztBQUNyQyxJQUFJLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUM7QUFDckQsSUFBSSxJQUFJLHFCQUFxQixHQUFHLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQztBQUMvRCxJQUFJLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztBQUMxQixJQUFJLElBQUksbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztBQUNoRCxJQUFJLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxvQkFBb0IsQ0FBQyxDQUFDO0FBQzdFO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNwQyxNQUFNLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDN0MsTUFBTSxNQUFNLE9BQU8sR0FBRyxxQkFBcUIsR0FBRyxDQUFDLENBQUM7QUFDaEQ7QUFDQSxNQUFNLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRTtBQUN0QixRQUFRLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsUUFBUSxxQkFBcUIsR0FBRyxDQUFDLENBQUM7QUFDbEMsT0FBTyxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtBQUM5QixRQUFRLElBQUksSUFBSSxHQUFHLFFBQVEsRUFBRTtBQUM3QixVQUFVLHFCQUFxQixHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsVUFBVSxLQUFLLENBQUMsR0FBRyxxQkFBcUIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JFLFlBQVksZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JELFlBQVksQ0FBQyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLFdBQVc7QUFDWCxTQUFTLE1BQU07QUFDZixVQUFVLGVBQWUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLFNBQVM7QUFDVCxPQUFPLE1BQU0sSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFO0FBQy9CLFFBQVEsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUN2QixRQUFRLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDdkIsUUFBUSxxQkFBcUIsR0FBRyxDQUFDLENBQUM7QUFDbEMsUUFBUSxTQUFTO0FBQ2pCLE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDeEIsUUFBUSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDN0IsUUFBUSxNQUFNO0FBQ2QsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLE9BQU8sRUFBRTtBQUNuQixRQUFRLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUNqRCxRQUFRLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RSxRQUFRLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxRQUFRLFFBQVEsRUFBRSxDQUFDO0FBQ25CLFFBQVEsVUFBVSxHQUFHLFFBQVEsR0FBRyxXQUFXLEdBQUcsUUFBUSxHQUFHLFdBQVcsR0FBRyxDQUFDLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLEdBQUcsa0JBQWtCLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwSyxPQUFPO0FBQ1A7QUFDQSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDdEIsTUFBTSxhQUFhLElBQUkscUJBQXFCLENBQUM7QUFDN0M7QUFDQSxNQUFNLElBQUksb0JBQW9CLEdBQUcsYUFBYSxFQUFFO0FBQ2hELFFBQVEsR0FBRztBQUNYLFVBQVUsb0JBQW9CLElBQUksZ0JBQWdCLENBQUM7QUFDbkQsU0FBUyxRQUFRLG9CQUFvQixHQUFHLGFBQWEsRUFBRTtBQUN2RDtBQUNBLFFBQVEsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxvQkFBb0IsQ0FBQyxDQUFDO0FBQzdFLE9BQU87QUFDUDtBQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxxQkFBcUIsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsRCxRQUFRLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQ2pDLElBQUksUUFBUSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDckMsSUFBSSxRQUFRLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUNqQyxJQUFJLFFBQVEsQ0FBQyxxQkFBcUIsR0FBRyxxQkFBcUIsQ0FBQztBQUMzRCxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsbUJBQW1CLENBQUM7QUFDNUMsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDOUI7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLENBQUMsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixLQUFLO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksR0FBRztBQUM5QyxFQUFFLEtBQUssRUFBRSxJQUFJO0FBQ2IsQ0FBQyxFQUFFLENBQUM7QUFDSixPQUFPLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ2pDO0FBQ0EsSUFBSSxjQUFjLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0M7QUFDQSxJQUFJLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQztBQUNBLElBQUksV0FBVyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsTUFBTSxlQUFlLFNBQVMsY0FBYyxDQUFDLFlBQVksQ0FBQztBQUMxRCxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRTtBQUN4QyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN2QjtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRTtBQUMxQyxNQUFNLE9BQU8sR0FBRyxDQUFDO0FBQ2pCLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwRTtBQUNBLElBQUksSUFBSSxTQUFTLElBQUksQ0FBQyxFQUFFO0FBQ3hCLE1BQU0sT0FBTyxHQUFHLENBQUM7QUFDakIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFNBQVMsS0FBSyxDQUFDLEtBQUssU0FBUyxHQUFHLEVBQUUsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDL0QsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLHVCQUF1QixFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RSxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRTtBQUN6QixNQUFNLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUMxQyxLQUFLLE1BQU07QUFDWCxNQUFNLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztBQUN6QyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQ3pCLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzRCxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEUsSUFBSSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlELElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sR0FBRyxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckQsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQSxFQUFFLGFBQWEsR0FBRztBQUNsQixJQUFJLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDbkMsSUFBSSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO0FBQzNDLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLENBQUM7QUFDOUQsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMvQixJQUFJLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2pELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDaEM7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNsQixNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksS0FBSyxHQUFHLENBQUM7QUFDakIsUUFBUSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLElBQUksSUFBSSxNQUFNLEdBQUcsQ0FBQztBQUNsQixRQUFRLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDcEIsSUFBSSxJQUFJLEdBQUcsR0FBRyxZQUFZLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNWO0FBQ0EsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTtBQUNwQyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3JDLFFBQVEsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNwQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEIsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQixRQUFRLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdCLFFBQVEsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLE9BQU87QUFDUCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO0FBQzNCLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbkMsUUFBUSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLENBQUMsR0FBRyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDaEMsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekQsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUNkLE9BQU87QUFDUCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO0FBQzVCLE1BQU0sTUFBTSxhQUFhLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN2QztBQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDMUMsUUFBUSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNuQyxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxhQUFhLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDcEssUUFBUSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4QyxRQUFRLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDbkMsT0FBTztBQUNQLEtBQUssTUFBTTtBQUNYLE1BQU0sTUFBTSxTQUFTLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25ELE1BQU0sTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQztBQUN0QyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDZixVQUFVLENBQUMsR0FBRyxZQUFZLENBQUM7QUFDM0IsTUFBTSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ25DO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwQyxRQUFRLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDNUMsVUFBVSxJQUFJLE1BQU0sR0FBRyxJQUFJLEVBQUU7QUFDN0IsWUFBWSxLQUFLLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEQsWUFBWSxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3hCLFdBQVc7QUFDWDtBQUNBLFVBQVUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUM3RSxVQUFVLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDekIsVUFBVSxNQUFNLEdBQUcsTUFBTSxJQUFJLElBQUksR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsVUFBVSxPQUFPLElBQUksSUFBSSxDQUFDO0FBQzFCO0FBQ0EsVUFBVSxJQUFJLE9BQU8sSUFBSSxDQUFDLEVBQUU7QUFDNUIsWUFBWSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLElBQUksT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkQsWUFBWSxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQ3pCLFdBQVc7QUFDWCxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsT0FBTyxLQUFLLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pGLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDO0FBQ2xDLEdBQUc7QUFDSDtBQUNBLEVBQUUsWUFBWSxHQUFHO0FBQ2pCLElBQUksTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNuQyxJQUFJLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDbkMsSUFBSSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3pDLElBQUksTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakQsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUNoQztBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ2xCLE1BQU0sT0FBTztBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztBQUMzQyxJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxDQUFDO0FBQzlELElBQUksSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ3pFO0FBQ0EsSUFBSSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzlCLE1BQU0sT0FBTyxHQUFHLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3pDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDO0FBQ1QsUUFBUSxDQUFDLEdBQUcsWUFBWTtBQUN4QixRQUFRLEVBQUU7QUFDVixRQUFRLENBQUMsQ0FBQztBQUNWO0FBQ0EsSUFBSSxRQUFRLFNBQVM7QUFDckIsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3ZDLFVBQVUsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTTtBQUNkO0FBQ0EsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3ZDLFVBQVUsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxDQUFDLEdBQUcsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLFVBQVUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoRSxVQUFVLENBQUMsRUFBRSxDQUFDO0FBQ2QsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNO0FBQ2Q7QUFDQSxNQUFNLEtBQUssQ0FBQztBQUNaLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDdkMsVUFBVSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4RCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU07QUFDZDtBQUNBLE1BQU0sS0FBSyxDQUFDO0FBQ1osUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN2QyxVQUFVLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUMsR0FBRyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEMsVUFBVSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwRixVQUFVLENBQUMsRUFBRSxDQUFDO0FBQ2QsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNO0FBQ2Q7QUFDQSxNQUFNLEtBQUssQ0FBQztBQUNaLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDdkMsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixVQUFVLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0IsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUMsR0FBRyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEMsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztBQUMvQyxVQUFVLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7QUFDNUMsVUFBVSxNQUFNLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUN2QyxVQUFVLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDNUI7QUFDQSxVQUFVLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTtBQUN0QixZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUNyQixXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUI7QUFDQSxVQUFVLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTtBQUN0QixZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUNyQixXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUI7QUFDQSxVQUFVLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTtBQUN0QixZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUNyQixXQUFXO0FBQ1g7QUFDQSxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUI7QUFDQSxVQUFVLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO0FBQ3BDLFlBQVksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFH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QUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU0sSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNsRCxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzNDLFVBQVUsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLFVBQVUsV0FBVyxJQUFJLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNHLFVBQVUsS0FBSyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLFdBQVcsSUFBSSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMs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RUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDempCO0FBQ0EsSUFBSSxTQUFTLGlCQUFpQixDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUU7QUFDakQsTUFBTSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzVCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNmLFVBQVUsQ0FBQztBQUNY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Q0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNsRSxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNsQyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNsQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sZUFBZSxHQUFHO0FBQzVCLE1BQU0sVUFBVSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuRSxNQUFNLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0QsTUFBTSxJQUFJLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLE1BQU0sTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRSxNQUFNLE9BQU8sRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsTUFBTSxPQUFPLEVBQUUsV0FBVyxD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LEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGNB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LE1BQU0sSUFBSSxLQUFLLElBQUksRUFBRSxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUU7QUFDaEQsVUFBVSxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUN6QyxVQUFVLFNBQVMsRUFBRSxDQUFDO0FBQ3RCLFNBQVMsTUFBTSxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRTtBQUNqRCxVQUFVLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNwSCxVQUFVLENBQUMsRUFBRSxDQUFDO0FBQ2QsVUFBVSxTQUFTLEVBQUUsQ0FBQztBQUN0QixTQUFTLE1BQU0sSUFBSSxLQUFLLEtBQUssR0FBRyxFQUFFO0FBQ2xDLFVBQVUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUMxRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakIsVUFBVSxTQUFTLEVBQUUsQ0FBQztBQUN0QixTQUFTLE1BQU0sSUFBSSxLQUFLLEtBQUssRUFBRSxJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUU7QUFDakQsVUFBVSxLQUFLLENBQUMsS0FBSyxJQUFJLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDeEMsVUFBVSxDQUFDLElBQUksS0FBSyxDQUFDLEtB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LEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRTtBQUNaLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQy9CLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRTtBQUNuQixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUM1RCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQy9CLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRTtBQUNiLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9CLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxLQUFLLEdBQUc7QUFDZCxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDL0IsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDNUI7QUFDQSxNQUFNLE9BQU8sQ0FBQztBQUNkLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUU7QUFDL0IsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7QUFDNUMsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7QUFDNUMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFDcEMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDOUIs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QUMxQyxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RSxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsTUFBTSxVQUFVLEdBQUcsU0FBUyxpQkFBaUIsR0FBRztBQUNoRCxFQUFFLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3gwQyxFQUFFLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztBQUNwQjtBQUNBLEVBQUUsTUFBTSxVQUFVLFNBQVMsT0FBTyxDQUFDO0FBQ25DLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRTtBQUN6QixNQUFNLElBQUksTUFBTSxLQUFLLElBQUksRUFBRTtBQUMzQixRQUFRLE1BQU0sR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlDLE9BQU87QUFDUDtBQUNBLE1BQU0sS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM3QixNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQzlCLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQyxFQUFFLENBQUM7QUFDSjtBQUNBLE9BQU8sQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ2hDO0FBQ0EsTUFBTSxjQUFjLEdBQUcsU0FBUyxxQkFBcUIsR0FBRztBQUN4RCxFQUFFLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxF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RSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3JELE1BQU0sTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxVQUFVLENBQUM7QUFDNUMsTUFBTSxNQUFNLE9BQU8sR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sTUFBTSxPQUFPLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNsQyxNQUFNLE1BQU0sT0FBTyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDbEMsTUFBTSxNQUFNLE9BQU8sR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUM5SCxRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7QUFDOUUsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNCLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDbkMsS0FBSztBQUNMLEdB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Q3ZELFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTTtBQUNkO0FBQ0EsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN4QixRQUFRLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsUUFBUSxNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0U7QUFDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkQsVUFBVSxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0FBQ0EsVUFBVSxJQUFJLFNBQVMsS0FBSyxNQUFNLEVBQUU7QUFDcEMsWUFBWSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDNUQsWUFBWSxNQUFNLEdBQUcsU0FBUyxDQUFDO0FBQy9CLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xELFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFDLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUM7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YUFBYSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNyd0UsT0FBTyxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7QUFDMUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ24zRSxPQUFPLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztBQUN0QyxNQUFNLG1CQUFtQixHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDbHlDLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztBQUNsRDtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEtBQUs7QUFDbEU7QUFDQTtBQUNBO0FBQ0EsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxHQUFHO0FBQzlDLEVBQUUsS0FBSyxFQUFFLElBQUk7QUFDYixDQUFDLEVBQUUsQ0FBQztBQUNKLE9BQU8sQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQywyQkFBMkIsR0FBRyxPQUFPLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDL0gsT0FBTyxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGlDQUFpQyxHQUFHLE9BQU8sQ0FBQyxvQ0FBb0MsR0FBRyxPQUFPLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3BKO0FBQ0EsSUFBSSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekM7QUFDQSxJQUFJLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzQztBQUNBLE1BQU0sYUFBYSxHQUFHLElBQUksV0FBVyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFFLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLGFBQWEsQ0FBQztBQUNuQyxFQUFFLENBQUMsQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDO0FBQzVCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7QUFDeEIsRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUN0QixFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxZQUFZLENBQUM7QUFDakMsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztBQUN6QyxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDckMsRUFBRSxDQUFDLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQztBQUNsQyxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDckMsRUFBRSxDQUFDLENBQUMsbUJBQW1CLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztBQUMvQyxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO0FBQzNDLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsa0JBQWtCLENBQUM7QUFDN0MsRUFBRSxDQUFDLENBQUMsdUJBQXVCLENBQUMsR0FBRyx1QkFBdUIsQ0FBQztBQUN2RCxFQUFFLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLHFCQUFxQixDQUFDO0FBQ25ELEVBQUUsQ0FBQyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDOUIsRUFBRSxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztBQUMzQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLHVCQUF1QixDQUFDO0FBQ3hELEVBQUUsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsbUJBQW1CLENBQUM7QUFDaEQsRUFBRSxDQUFDLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQztBQUM3QixFQUFFLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLGdCQUFnQixDQUFDO0FBQzFDLEVBQUUsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsdUJBQXVCLENBQUM7QUFDdkQsRUFBRSxDQUFDLENBQUMsbUJBQW1CLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztBQUMvQyxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDakMsRUFBRSxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztBQUMzQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLHVCQUF1QixDQUFDO0FBQ3hELEVBQUUsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsbUJBQW1CLENBQUM7QUFDaEQsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQztBQUN4QixFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztBQUNyQyxFQUFFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLHVCQUF1QixDQUFDO0FBQ2xELEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLG1CQUFtQixDQUFDO0FBQzFDLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsdUJBQXVCLENBQUM7QUFDcEQsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7QUFDdkMsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztBQUM1QyxFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDO0FBQzFCLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEdBQUcscUJBQXFCLENBQUM7QUFDbEQsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztBQUMxQyxFQUFFLENBQUMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0FBQzNCLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQ3hDLEVBQUUsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEdBQUcscUJBQXFCLENBQUM7QUFDckQsRUFBRSxDQUFDLENBQUMsbUJBQW1CLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztBQUM3QyxFQUFFLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLHFCQUFxQixDQUFDO0FBQ3pELEVBQUUsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzVDLEVBQUUsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsaUJBQWlCLENBQUM7QUFDakQsRUFBRSxDQUFDLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztBQUMvQixFQUFFLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLHVCQUF1QixDQUFDO0FBQ3RELEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsbUJBQW1CLENBQUM7QUFDOUMsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzlCLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3BDLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUNoQyxFQUFFLENBQUMsQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0FBQ2xDLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsWUFBWSxDQUFDO0FBQ3pDLEVBQUUsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEdBQUcsa0JBQWtCLENBQUM7QUFDckQsRUFBRSxDQUFDLENBQUMsc0JBQXNCLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDN0MsRUFBRSxDQUFDLENBQUMsZUFBZSxHQUFHLGFBQWEsQ0FBQztBQUNwQyxFQUFFLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLFlBQVksQ0FBQztBQUMzQyxFQUFFLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLGtCQUFrQixDQUFDO0FBQ3ZELEVBQUUsQ0FBQyxDQUFDLDhCQUE4QixDQUFDLEdBQUcsa0JBQWtCLENBQUM7QUFDekQsRUFBRSxDQUFDLENBQUMsd0JBQXdCLENBQUMsR0FBRyxZQUFZLENBQUM7QUFDN0MsRUFBRSxDQUFDLENBQUMsd0JBQXdCLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDL0MsRUFBRSxDQUFDLENBQUMsMEJBQTBCLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsRUFBRSxDQUFDLENBQUMsaUJBQWlCLEdBQUcsYUFBYSxDQUFDO0FBQ3RDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLEdBQUcsWUFBWSxDQUFDO0FBQzdDLEVBQUUsQ0FBQyxDQUFDLDhCQUE4QixDQUFDLEdBQUcsa0JBQWtCLENBQUM7QUFDekQsRUFBRSxDQUFDLENBQUMsMEJBQTBCLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsQ0FBQyxDQUFDLENBQUM7QUFDSCxPQUFPLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztBQUN0QyxNQUFNLG9CQUFvQixHQUFHLElBQUksV0FBVyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ2pGLEVBQUUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQztBQUMvQixFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUMzQyxFQUFFLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQ3hELEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsc0JBQXNCLENBQUM7QUFDaEQsRUFBRSxDQUFDLENBQUMsU0FBUyxHQUFHLGVBQWUsQ0FBQztBQUNoQyxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLG1CQUFtQixDQUFDO0FBQzVDLEVBQUUsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEdBQUcseUJBQXlCLENBQUM7QUFDekQsRUFBRSxDQUFDLENBQUMsbUJBQW1CLENBQUMsR0FBRyxxQkFBcUIsQ0FBQztBQUNqRCxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztBQUN0QyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN6QyxFQUFFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQ3JELEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLHNCQUFzQixDQUFDO0FBQzdDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQztBQUMvQixFQUFFLENBQUMsQ0FBQyxZQUFZLEdBQUcsbUJBQW1CLENBQUM7QUFDdkMsRUFBRSxDQUFDLENBQUMsd0JBQXdCLENBQUMsR0FBRyw0QkFBNEIsQ0FBQztBQUM3RCxFQUFFLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLHlCQUF5QixDQUFDO0FBQ3ZELEVBQUUsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsMkJBQTJCLENBQUM7QUFDM0QsRUFBRSxDQUFDLENBQUMsMkJBQTJCLENBQUMsR0FBRywrQkFBK0IsQ0FBQztBQUNuRSxDQUFDLENBQUMsQ0FBQztBQUNILE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztBQUNwRCxNQUFNLGdCQUFnQixHQUFHLElBQUksV0FBVyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzdFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUM7QUFDMUIsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7QUFDdkMsRUFBRSxDQUFDLENBQUMsb0JBQW9CLENBQUMsR0FBRyx1QkFBdUIsQ0FBQztBQUNwRCxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLG1CQUFtQixDQUFDO0FBQzVDLEVBQUUsQ0FBQyxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUM7QUFDaEMsRUFBRSxDQUFDLENBQUMsb0JBQW9CLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztBQUM3QyxFQUFFLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLHVCQUF1QixDQUFDO0FBQzFELEVBQUUsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsbUJBQW1CLENBQUM7QUFDbEQsRUFBRSxDQUFDLENBQUMsV0FBVyxHQUFHLGVBQWUsQ0FBQztBQUNsQyxFQUFFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQy9DLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDM0QsRUFBRSxDQUFDLENBQUMsb0JBQW9CLENBQUMsR0FBRyxzQkFBc0IsQ0FBQztBQUNuRCxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLGdCQUFnQixDQUFDO0FBQ3pDLEVBQUUsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsdUJBQXVCLENBQUM7QUFDdEQsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDcEMsRUFBRSxDQUFDLENBQUMsc0JBQXNCLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztBQUNsRCxFQUFFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN0QyxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLG1CQUFtQixDQUFDO0FBQ3BELEVBQUUsQ0FBQyxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7QUFDOUIsRUFBRSxDQUFDLENBQUMsb0JBQW9CLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDM0MsRUFBRSxDQUFDLENBQUMsMEJBQTBCLENBQUMsR0FBRyxxQkFBcUIsQ0FBQztBQUN4RCxFQUFFLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO0FBQ2hELEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsZ0JBQWdCLENBQUM7QUFDMUMsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQy9CLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsZ0JBQWdCLENBQUM7QUFDekMsRUFBRSxDQUFDLENBQUMsc0JBQXNCLENBQUMsR0FBRyxzQkFBc0IsQ0FBQztBQUNyRCxFQUFFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLGtCQUFrQixDQUFDO0FBQzdDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUMvQixFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLGdCQUFnQixDQUFDO0FBQ3pDLEVBQUUsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsc0JBQXNCLENBQUM7QUFDckQsRUFBRSxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztBQUM3QyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxZQUFZLENBQUM7QUFDakMsRUFBRSxDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztBQUMzQyxFQUFFLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLHVCQUF1QixDQUFDO0FBQ3ZELEVBQUUsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsbUJBQW1CLENBQUM7QUFDL0MsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsWUFBWSxDQUFDO0FBQ2pDLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsaUJBQWlCLENBQUM7QUFDM0MsRUFBRSxDQUFDLENBQUMsdUJBQXVCLENBQUMsR0FBRyx1QkFBdUIsQ0FBQztBQUN2RCxFQUFFLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLG1CQUFtQixDQUFDO0FBQy9DLEVBQUUsQ0FBQyxDQUFDLGFBQWEsR0FBRyxjQUFjLENBQUM7QUFDbkMsRUFBRSxDQUFDLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQztBQUNoQyxFQUFFLENBQUMsQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDO0FBQy9CLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzFDLENBQUMsQ0FBQyxDQUFDO0FBQ0gsT0FBTyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0FBQzVDLE1BQU0sYUFBYSxHQUFHLElBQUksV0FBVyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFFLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQixFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDekIsRUFBRSxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUNwQixFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDdEIsRUFBRSxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUNwQixFQUFFLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNsQyxFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ25CLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbEIsRUFBRSxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUN2QixFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDL0IsRUFBRSxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUNwQixFQUFFLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQyxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QixFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDNUIsRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNsQixFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0IsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDbkIsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0IsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0IsRUFBRSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNuQixFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ25CLEVBQUUsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDcEIsRUFBRSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNuQixFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ25CLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbEIsRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNsQixFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ25CLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDckIsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLEVBQUUsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDdEIsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDckIsRUFBRSxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUNyQixFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ2xCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDbkIsRUFBRSxDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUIsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0IsRUFBRSxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUN0QixFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0IsRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNsQixFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ25CLEVBQUUsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDdEIsRUFBRSxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUNwQixFQUFFLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDckIsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDbkIsRUFBRSxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUNyQixFQUFFLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM1QixFQUFFLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDbkIsRUFBRSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNuQixFQUFFLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlCLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQy9CLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzdCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDbkIsRUFBRSxDQUFDLENBQUMsbUJBQW1CLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEMsRUFBRSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNuQixFQUFFLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDckIsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNCLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQixFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ25CLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxQixFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ2xCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbEIsRUFBRSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNuQixFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ25CLEVBQUUsQ0FBQyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFDM0IsRUFBRSxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDL0IsRUFBRSxDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUIsRUFBRSxDQUFDLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztBQUN6QixFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ2xCLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM1QixFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ2xCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDbkIsRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNsQixFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ2xCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbEIsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4QixFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0IsRUFBRSxDQUFDLENBQUMsdUJBQXVCLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDcEMsRUFBRSxDQUFDLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztBQUN6QixFQUFFLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLEVBQUUsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDcEIsRUFBRSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNuQixFQUFFLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQixFQUFFLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQyxFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ25CLEVBQUUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDbkIsRUFBRSxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUNwQixFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxQixFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNuQixFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ25CLEVBQUUsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDcEIsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM3QixFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUIsRUFBRSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNuQixFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbEIsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbEIsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzdCLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN6QixFQUFFLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbEIsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDekIsRUFBRSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNuQixFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDO0FBQ0gsT0FBTyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7QUFDdEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxXQUFXLENBQUMscUJBQXFCLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDNUUsRUFBRSxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUNwQixFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ2xCLEVBQUUsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUM7QUFDSCxPQUFPLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztBQUMxQyxNQUFNLDJCQUEyQixHQUFHLElBQUksV0FBVyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3hGLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNaLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNaLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNaLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNaLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNaLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNaLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNaLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNaLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2xCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2xCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixF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QUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxD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QUMsSUFBSSxDQUFDLENBQUM7QUFDZixPQUFPLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxFQUFFO0FBQy9CLFFBQVEsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxVQUFVLENBQUM7QUFDbEUsUUFBUSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxVQUFVLENBQUM7QUFDdEUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2YsT0FBTyxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksRUFBRTtBQUMvQixRQUFRLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksVUFBVSxDQUFDO0FBQ2xFLFFBQVEsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksVUFBVSxDQUFDO0FBQ3ZFLFFBQVEsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksVUFBVSxDQUFDO0FBQ3ZFLFFBQVEsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksVUFBVSxDQUFDO0FBQ3RFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNm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QUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekM7QUFDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3BELFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRTtBQUNsQyxVQUFVLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxTQUFTLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDN0MsVUFBVSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRixVQUFVLENBQUMsRUFBRSxDQUFDO0FBQ2QsU0FBUyxNQUFNO0FBQ2YsVUFBVSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDckksU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sVUFBVSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDaEMsS0FBSztBQUNMLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLGlCQUFpQixDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUNoRSxFQUFFLFNBQVMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDeEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2QsTUFBTSxHQUFHLEVBQUUsUUFBUTtBQUNuQixNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDeEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2QsTUFBTSxHQUFHLEVBQUUsUUFBUTtBQUNuQixNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQy9DLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztBQUNkLE1BQU0sR0FBRyxFQUFFLGVBQWU7QUFDMUIsTUFBTSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQyxLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ25CLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNYLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNaLEVBQUUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0FBQ0EsRUFBRSxTQUFTLEtBQUssQ0FBQyxJQUFJLEVBQUU7QUFDdkIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZDtBQUNBLElBQUksT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM1QixNQUFNLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztBQUM3QixNQUFNLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQztBQUNsRDtBQUNBLE1BQU0sUUFBUSxDQUFDO0FBQ2YsUUFBUSxLQUFLLENBQUM7QUFDZCxVQUFVLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNyQyxVQUFVLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDNUIsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLENBQUM7QUFDZCxVQUFVLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNyQyxVQUFVLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDNUIsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLENBQUM7QUFDZCxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDM0IsVUFBVSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFVBQVUsVUFBVSxHQUFHLElBQUksQ0FBQztBQUM1QixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssQ0FBQztBQUNkLFVBQVUsT0FBTyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNuQyxZQUFZLENBQUMs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Q0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckMsY0FBYyxhQUFhLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsRCxjQUFjLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLGNBQWMsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEMsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQyxjQUFjLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pELGNBQWMsTUFBTTtBQUNwQjtBQUNBLFlBQVksS0FBSyxFQUFFO0FBQ25CLGNBQWMsRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQyxjQUFjLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RDLGNBQWMsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEMsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLGNBQWMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEQsY0FBYyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQyxjQUFjLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLGNBQWMsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEMsY0FBYyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckMsY0FBYyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRCxjQUFjLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixjQUFjLE1BQU07QUFDcEI7QUFDQSxZQUFZLEtBQUssRUFBRTtBQUNuQixjQUFjLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLGNBQWMsRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckMsY0FBYyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QyxjQUFjLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckMsY0FBYyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNuRCxjQUFjLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLGNBQWMsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEMsY0FBYyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLGNBQWMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEQsY0FBYyxNQUFNO0FBQ3BCO0FBQ0EsWUFBWSxLQUFLLEVBQUU7QUFDbkIsY0FBYyxNQUFNLEVBQUUsR0FBRyxDQUFDO0FBQzFCLG9CQUFvQixFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLGNBQWMsRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQyxjQUFjLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RDLGNBQWMsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEMsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLGNBQWMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEQsY0FBYyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQyxjQUFjLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLGNBQWMsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFL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QUMsQ0FBQztBQUNSLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxHQUFHO0FBQ1osSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDbEIsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUM3QyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7QUFDbkIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUM7QUFDekQsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUM7QUFDekQsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsTUFBTSxPQUFPLENBQUM7QUFDZCxFQUFFLFdBQVcsQ0FBQztBQUNkLElBQUksS0FBSztBQUNULElBQUksWUFBWTtB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Q1gsTUFBTSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUMsRUFBRTtBQUMzRyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUkscUJBQXFCLENBQUM7QUFDNUMsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM1QyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDYjtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLHFCQUFxQixFQUFFO0FBQzVDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLGtCQUFrQixFQUFFO0FBQzNDLFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzFDLFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM5QyxPQUFPLE1BQU07QUFDYixRQUFRLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMzQyxRQUFRLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0MsT0FBTztBQUNQO0FBQ0EsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2YsS0FBSyxNQUFNO0FBQ1gsTUFBTSxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxD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S0FBSyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNELFNBQVMsTUFBTSxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUU7QUFDakMsVUFBVSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlELFNBQVMsTUFBTTtBQUNmLFVBQVUsS0FBSyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQztBQUN0SSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9CLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFDbkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxjQUFjLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUU7QUFDcEQsTUFBTSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUM1QztBQUNBLE1BQU0sSUFBSSxXQUFXLEdBQUcsV0FBVyxFQUFFO0FBQ3JDLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLEtBQUssR0FBRyxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQzlDO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFD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QUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxDQUFDO0FBQ2QsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixVQUFVLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxDQUFDO0FBQ2QsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxDQUFDO0FBQ2QsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsTUFBTTtBQUNoQixPQUFPO0FBQ1A7QUFDQSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzVCLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbFksTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUM1QixNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xZLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDNUIsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwWSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzdCLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxD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QztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMzQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssQ0FBQztBQUNkLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixVQUFVLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDeEIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMzQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxDQUFDO0FBQ2QsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMzQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLENBQUM7QUFDZCxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMzQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLE1BQU07QUFDaEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN4QixRQUFRLElBQUksRUFBRSxPQUFPO0FBQ3JCLFFBQVEsTUFBTSxFQUFFLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQztBQUNsQyxRQUFRLE1BQU0sRUFBRSxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUM7QUFDbEMsT0FBTyxDQUFDLENBQUM7QUFDVCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxxQkFBcUIsQ0FBQyxLQUFLLEVBQUU7QUFDL0IsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLDhCQUE4QixDQUFDLENBQUM7QUFDL0UsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTTtBQUM5QixVQUFVLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQy9CLElBQUksTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUM3QixJQUFJLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDN0IsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFHLElBQUksTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRyxJQUFJLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUcsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFHLElBQUksSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxVQUFVLElBQUksV0FBVyxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0gsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsNkJBQTZCLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNsSSxJQUFJLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFJLFdBQVcsQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNILElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLDZCQUE2QixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLDZCQUE2QixFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDbEksSUFBSSxNQUFNLGNBQWMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLElBQUksTUFBTSxZQUFZLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDO0FBQ3pFLElBQUksTUFBTSxZQUFZLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDO0FBQ3pFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsSUFBSSxNQUFNLEVBQUUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDaEMsVUFBVSxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsSUFBSSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFVBQVUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsVUFBVSxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQy9CLFVBQVUsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNoQztBQUNBLElBQUksS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLFFBQVEsRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUM5QyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3RFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDdEUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN0RSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3RFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDdEUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN0RTtBQUNBLE1BQU0sS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLFFBQVEsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNyRCxRQUFRLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxRQUFRLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssUUFBUSxDQUFDLEVBQUU7QUFDaEYsVUFBVSxTQUFTO0FBQ25CLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqQixZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEIsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEI7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDckMsVUFBVSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVDLFlBQVksTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRCxZQUFZLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLFlBQVksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBLFFBQVEsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDeEMsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsUUFBUSxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUN4QyxRQUFRLE1BQU0sUUFBUSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLFFBQVEsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDOUUsUUFBUSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFH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RUFBRSxTQUFTLEdBQUc7QUFDZCxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3JCLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMvQixJQUFJLE1BQU0sWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0Q7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEQsTUFBTSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsTUFBTSxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsTUFBTSxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQztBQUMvQixJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDL0IsSUFBSSxNQUFNLFlBQVksR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNEO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3hELE1BQU0sTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLE1BQU0sWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FB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Q0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDL0IsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlDO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUMsTUFBTSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQixLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEQsTUFBTSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQixLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1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QyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUIsV0FBVztBQUNYO0FBQ0EsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLE1BQU07QUFDbkIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLFVBQVU7QUFDdkIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQjtBQUNBLFVBQVUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3JCLFlBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0IsV0FBVyxNQUFNO0FBQ2pCLFlBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0IsV0FBVztBQUNYO0FBQ0EsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLFNBQVM7QUFDdEIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLE1BQU07QUFDbkIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssS0FBSztBQUNsQixVQUFVLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7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Q0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxPQUFPO0FBQ3BCLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLElBQUk7QUFDakIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxJQUFJO0FBQ2pCLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxLQUFLO0FBQ2xCLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUMsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLElBQUk7QUFDakIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxLQUFLO0FBQ2xCLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssS0FBSztBQUNsQixVQUFVLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUIsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLElBQUk7QUFDakIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzlCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxLQUFLO0FBQ2xCLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssS0FBSztBQUNsQixVQUFVLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUI7QUFDQSxVQUFVLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQ3BDLFlBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFdBQVcsTUFBTTtBQUNqQixZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixXQUFXO0FBQ1g7QUFDQSxVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssSUFBSTtBQUNqQixVQUFVLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCO0FBQ0EsVUFBVSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDNUQsWUFBWSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvQixXQUFXLE1BQU07QUFDakIsWUFBWSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5QixXQUFXO0FBQ1g7QUFDQSxVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssS0FBSztBQUNsQixVQUFVLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN0QixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssTUFBTTtBQUNuQixVQUFVLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0IsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLE9BQU87QUFDcEIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLEtBQUs7QUFDbEIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLE1BQU07QUFDbkIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLEtBQUs7QUFDbEIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxNQUFNO0FBQ25CLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssVUFBVTtBQUN2QixVQUFVLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkQsVUFBVSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxLQUFLO0FBQ2xCLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FB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N0IsUUFBUSxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLE9BQU8sTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3BDLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsT0FBTyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7QUFDMUMsUUFBUSxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pELE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7QUFDakMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzdCLFFBQVEsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxPQUFPLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUNwQyxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0csSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxH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LEVBQUUsT0FBTyxFQUFFLG1CQUFtQixLQUFLO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksR0FBRztBQUM5QyxFQUFFLEtBQUssRUFBRSxJQUFJO0FBQ2IsQ0FBQyxFQUFFLENBQUM7QUFDSixPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNwQjtBQUNBLElBQUksS0FBSyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DO0FBQ0EsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNyNUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJ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RyxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCO0FBQ0EsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNsQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRTtBQUM1QixNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDMUIsS0FBSyxNQUFNO0FBQ1gsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDakIsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNSO0FBQ0EsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNsQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakI7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtBQUNwQixNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDakQsS0FBSyxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDckQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQjtBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQ3BCLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQixLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDdEMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDN0UsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQ2hILE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUIsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDM0IsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN2QyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FB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QUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMs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QUFHLEdBQUcsQ0FBQztBQUNwQixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDZixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLEdB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QztBQUNqQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUNwQixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDZixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztB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LENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUN6QixJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDckIsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUNyQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUNwQixJQUFJLENB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QUFDckIsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNmLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUN4QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7QUFDekIsSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUN4QixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDckIs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Q0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDcEIsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUNyQixJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ2YsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDZixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUN6QixJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMs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LEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUN6QixJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDckIsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUNyQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUNwQixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxH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QUN0QixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUNwQixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDZixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJ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QUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ2YsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNmLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDZixJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ2YsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFD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Q3JELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxNQUFNLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFDaEU7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEQsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMzRSxNQUFNLFVBQVUsSUFBSSxPQUFPLENBQUM7QUFDNUIsTUFBTSxNQUFNLElBQUksVUFBVSxDQUFDO0FBQzNCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDekU7QUFDQSxJQUFJLE9BQU8sTUFBTSxJQUFJLENBQUMsRUFBRTtBQUN4QixNQUFNLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMs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LElBQUksTUFBTSxRQUFRLEdBQUcsS0FBSyxHQUFHLFFBQVEsQ0FBQztBQUN0QyxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDL0IsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2IsUUFBUSxFQUFFO0FBQ1YsUUFBUSxHQUFHLENBQUM7QUFDWjtBQUNBLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO0FBQ25CLE1BQU0sSUFBSSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQztBQUNuQztBQUNBLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxRQUFRLFFBQVEsR0FBRyxDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsUUFBUSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUNoQztBQUNBLFFBQVEsT0FBTyxDQUFDLEdBQUcsUUFBUSxFQUFFO0FBQzdCLFVBQVUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDLFVBQVUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLFVBQVUsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QyxVQUFVLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkMsVUFBVSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLFVBQVUsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QyxVQUFVLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkMsVUFBVSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLFVBQVUsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLFFBQVEsRUFBRTtBQUMxQixVQUFVLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUNwQyxVQUFVLElBQUksR0FBRyxHQUFHLENBQUM7QUFDckI7QUFDQSxVQUFVLE9BQU8sQ0FBQyxHQUFHLFFBQVEsRUFBRTtBQUMvQixZQUFZLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUMxQyxZQUFZLElBQUksS0FBSyxDQUFDLENBQUM7QUFDdkIsV0FBVztBQUNYLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7QUFDbkIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2Q7QUFDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDNUMsUUFBUSxJQUFJLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQyxFQUFFO0FBQ2hDLFVBQVUsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNsQixVQUFVLElBQUksR0FBRyxDQUFDLENBQUM7QUFDbkIsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLElBQUksR0FBRyxHQUFHLEVBQUU7QUFDM0IsVUFBVSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUMvQyxVQUFVLElBQUksSUFBSSxDQUFDLENBQUM7QUFDcEIsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLFFBQVEsSUFBSSxLQUFLLEdBQUcsR0FBRyxJQUFJLGFBQWEsQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZCLFVBQVUsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNwQixTQUFTLE1BQU0sSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFO0FBQ2hDLFVBQVUsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUN0QixTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDMUIsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksYUFBYSxJQUFJLENBQUMsQ0FBQztBQUN4QyxRQUFRLElBQUksR0FBRyxhQUFhLENBQUM7QUFDN0IsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRTtBQUMzRCxJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0IsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksSUFBSSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNuQztBQUNBLElBQUksSUFBSSxLQUFLLEVBQUU7QUFDZixNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQ3ZCLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDeEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDaEQsTUFBTSxLQUFLLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3JDO0FBQ0EsTUFBTSxJQUFJLEVBQUUsS0FBSyxLQUFLLElBQUksRUFBRSxLQUFLLE1BQU0sRUFBRTtBQUN6QyxRQUFRLFFBQVEsR0FBRyxlQUFlLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0UsT0FBTztBQUNQLEtBQUssTUFBTSxJQUFJLElBQUksRUFBRTtBQUNyQixNQUFNLElBQUksSUFBSSxZQUFZLFFBQVEsRUFBRTtBQUNwQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3hCLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDekIsUUFBUSxRQUFRLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDbEQsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUMxQixRQUFRLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdEM7QUFDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQy9DLFVBQVUsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxLQUFLLElBQUksRUFBRSxLQUFLLE1BQU0sRUFBRTtBQUMzQyxVQUFVLFFBQVEsR0FBRyxlQUFlLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDaEYsU0FBUztBQUNULE9BQU8sTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDdEMsUUFBUSxRQUFRLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDekQsUUFBUSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3ZDO0FBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN0RCxVQUFVLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0M7QUFDQSxVQUFVLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3pDLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRCxZQUFZLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckM7QUFDQSxZQUFZLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUMxRSxjQUFjLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDNUIsY0FBYyxNQUFNO0FBQ3BCLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQSxVQUFVLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDaEMsU0FBUztBQUNULE9BQU8sTUFBTTtBQUNiLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQUM1RCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFFBQVEsRUFBRTtBQUNsQixNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUcsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN6RSxRQUFRLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsT0FBTztBQUNQLEtBQUssTUFBTTtBQUNYLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssR0FBRyxZQUFZLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3pFLFFBQVEsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6QixPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO0FBQ3RDLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztBQUNqRDtBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNoQixNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RCxJQUFJLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixJQUFJLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixJQUFJLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixJQUFJLE1BQU0sTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDeEMsTUFBTSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsTUFBTSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLFFBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUIsUUFBUSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1QixRQUFRLFNBQVM7QUFDakIsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQzVCLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BELE1BQU0sTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUQsTUFBTSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1RCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxlQUFlLENBQUMsU0FBUyxHQUFHLEtBQUss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QUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDOUcsUUFBUSxRQUFRLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUUsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLFdBQVcsR0FBRztBQUMxQixRQUFRLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtBQUN2QixRQUFRLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztBQUNyQixRQUFRLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztBQUNqQyxRQUFRLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztBQUNqQyxRQUFRLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUM7QUFDbEQsUUFBUSxLQUFLLEVBQUUsUUFBUTtBQUN2QixRQUFRLEtBQUssRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxTQUFTO0FBQzFELFFBQVEsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLFFBQVEsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLFFBQVEsS0FBSyxFQUFFLEVBQUU7QUFDakIsT0FBTyxDQUFDO0FBQ1IsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDdkMsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN4QztBQUNBLE1BQU0sSUFBSSxJQUFJLFdBQVcsQ0FBQyxLQUFL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Q0FBQyxDQUFDO0FBQ3RDO0FBQ0EsU0FBUyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUU7QUFDNUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BCO0FBQ0EsRUFBRSxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRTtBQUNwQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxXQUFXLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0QsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDcEQsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BCLENBQUM7QUFDRDtBQUNBLFNBQVMsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFO0FBQ2hELEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzVDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMzQixFQUFFLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNsQztBQUNBLEVBQUUsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFO0FBQzFCLElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDN0MsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBQ0Q7QUFDQSxTQUFTLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtBQUM5QyxFQUFFLE1BQU0s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QUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JELElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNyRCxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0EsU0FBUyxVQUFVLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUN4QyxFQUFFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzdDLEVBQUUsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7QUFDM0MsRUFBRSxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDckUsRUFBRSxJQUFJLFlBQVksR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNyRTtBQUNBLEVBQUUsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNwRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUIsSUFBSSxZQUFZLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUNqQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzdDLEVBQUUsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0EsRUFBRSxLQUFL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QUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pRLEVBQUUsTUFBTSxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxTQUFTLEVBQUUs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LFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxTQUFTLElBQUksTUFBTSxHQUFHLFNBQVMsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RFLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixPQUFPO0FBQ1A7QUFDQSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwUixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxFQUFFLENBQUM7QUFDSjtBQUNBLE9BQU8sQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBQ3BDO0FBQ0EsTUFBTSxNQUFNLENBQUM7QUFDYixFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFO0FBQ3ZDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRTtBQUNaLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRTtBQUNaLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRTtBQUNYLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRTtBQUNyQixJQUFJLElBQUksTUFBTSxJQUFJLEVBQUUsRUFBRTtBQUN0QixNQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQyxNQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFDaEUsTUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxHQUFHLENBQUMsQ0FBQztBQUMzQyxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFO0FBQ3BCLElBQUksSUFBSSxNQUFNLElBQUksRUFBRSxFQUFFO0FBQ3RCLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDMUMsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNuQixLQUFLLE1BQU07QUFDWCxNQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBQ2pFLE1BQU0sSUFBSSxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUM7QUFDMUIsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRTtBQUN0QixJQUFJLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQztBQUNsQjtBQUNBLElBQUksSUFBSSxNQUFNLEdBQUcsRUFBRSxFQUFFO0FBQ3JCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDdEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN0QixLQUFLLE1BQU07QUFDWCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3JCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDdkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLElBQUksRUFBRSxDQUFDO0FBQ2pCLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBQ3BELElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEtBQUssTUFBTSxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBQ3JELEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxHQUFHO0FBQ1IsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztBQUMzQixJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRTtBQUNaLElBQUksTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELElBQUksSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3hEO0FBQ0EsSUFBSSxJQUFJLE1BQU0sR0FBRyxVQUFVLEVBQUU7QUFDN0IsTUFBTSxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQ25CLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7QUFDeEIsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzVDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDL0MsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDekMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQztBQUMvQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzlDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0MsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRTtBQUNmLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzFCLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3hCLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sZUFBZSxHQUFHLFNBQVMsc0JBQXNCLEdBQUc7QUFDMUQsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RCLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDdkIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDeEIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ3BCLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsVUFBVSxDQUFDLENBQUMsRUFBRTtBQUN6QixJQUFJLE9BQU8sSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbEQsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLFdBQVcsQ0FBQyxDQUFDLEVBQUU7QUFDMUIsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlDLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUU7QUFDL0IsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hELEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM3d0I7QUFDQSxFQUFFLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQ3RDLElBQUksSUFBSSxFQUFFLEdBQUcsVUFBVTtBQUN2QixRQUFRLEVBQUUsR0FBRyxVQUFVO0FBQ3ZCLFFBQVEsRUFBRSxHQUFHLFVBQVU7QUFDdkIsUUFBUSxFQUFFLEdBQUcsVUFBVTtBQUN2QixRQUFRLEVBQUUsR0FBRyxVQUFVO0FBQ3ZCLFFBQVEsRUFBRSxHQUFHLFVBQVU7QUFDdkIsUUFBUSxFQUFFLEdBQUcsVUFBVTtBQUN2QixRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7QUFDeEIsSUFBSSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDM0QsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNoRCxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNiO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNqQyxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUNqQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixJQUFJLE1BQU0sQ0FBQyxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDL0I7QUFDQSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNsQixNQUFNLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDdEMsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0QyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckMsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQztBQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLEdBQUc7QUFDbkMsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUMvQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUYsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2YsT0FBTztBQUNQO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNoQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlGLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNoQixVQUFVLENBQUMsR0FBRyxFQUFFO0FBQ2hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7QUFDaEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUNoQixVQUFVLENBQUMsR0FBRyxFQUFFO0FBQ2hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7QUFDaEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUNoQixVQUFVLENBQUMsR0FBRyxFQUFFO0FBQ2hCLFVBQVUsRUFBRTtBQUNaLFVBQVUsRUFBRSxDQUFDO0FBQ2I7QUFDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLFFBQVEsRUFBRSxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxJ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QUFFLENBQUMsQ0FBQztBQUN4QixJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUN0QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7QUFDdkMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7QUFDNUMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzQixJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzcwRjtBQUNBLEVBQUUsU0FBUyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxHQUFHLEtBQUssRUFBRTtBQUN2RCxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN2QztBQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNsQixNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLEtBQUssTUFBTTtBQUNYLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUQsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNoRCxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNiO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNqQyxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUNqQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixJQUFJLE1BQU0sQ0FBQyxHQUFHLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDaEM7QUFDQSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNsQixNQUFNLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDdEMsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0QyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckMsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1QjtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1QixRQUFRLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLFFBQVEsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDNUIsUUFBUSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1QixRQUFRLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0IsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLFFBQVEsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QixJQUFJLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0IsVUFBVSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqQyxVQUFVLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEMsSUFBSSxJQUFJLElBQUksQ0FBQztBQUNiO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksR0FBRztBQUNuQyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0YsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2YsT0FBTztBQUNQO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNoQyxRQUFRLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsUUFBUSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMvQyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQVEsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNDLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVCLE9BQU87QUFDUDtBQUNBLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQixNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkIsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25CLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQixNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkIsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25CLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQixNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkI7QUFDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixRQUFRLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQixRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JCLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsUUFBUSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMzQixRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDakMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JCLFFBQVEsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNqQixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsT0FBTztBQUNQO0FBQ0EsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksTUFBTSxDQUFDO0FBQ2Y7QUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDbEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzQixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLEtBQUssTUFBTTtBQUNYLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0IsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzQixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsRUFBRSxDQUFDO0FBQ0o7QUFDQSxPQUFPLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztBQUMxQztBQUNBLFNBQVMsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQy9DLEVBQUUsT0FBTyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUNEO0FBQ0EsTUFBTSxVQUFVLENBQUM7QUFDakIsRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3JCLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ2hCLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsTUFBTSxhQUFhLENBQUM7QUFDcEIsRUFBRSxXQUFXLEdBQUc7QUFDaEIsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssYUFBYSxFQUFFO0FBQzVDLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLGtDQUFrQyxDQUFDLENBQUM7QUFDakUsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvaEQsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuaUQsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksV0FBVyxDQUFDLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUNsaUcsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2xDLE1BQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFO0FBQ25CLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4QyxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLElBQUksSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxVQUFVLENBQUMsU0FBUyxFQUFFO0FBQ3hCLElBQUksSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLDRDQUE0QyxDQUFDLENBQUM7QUFDekUsR0FBRztBQUNIO0FBQ0EsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtBQUN2QixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEIsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckI7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDekQsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDNUQsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQixNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsTUFBTSxLQUFLLENB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LEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0IsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25CLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQixNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDdEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQVEsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFRLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5QixRQUFRLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELFFBQVEsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDbEQsUUFBUSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNsRCxRQUFRLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELE9BQU87QUFDUDtBQUNBLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwRCxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNqQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMO0FBQ0EsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQixJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekIsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQixJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekIsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQixJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEI7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJ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SUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsaUQsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckMsR0FBRztBQUNIO0FBQ0EsRUFBRSxVQUFVLENBQUMsU0FBUyxFQUFFO0FBQ3hCLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN0QixJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUIsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDMUI7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN4QyxNQUFNLElBQUks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LEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25CLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkIsT0FBTyxNQUFNLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDL0IsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0IsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25CLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkIsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDOUIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQztBQUNoQyxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLFFBQVEsTUFBTSxDQUFDLENB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O0FBQ04sR0FBRyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLFFBQVEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUN6QyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN0QjtBQUNBLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRTtBQUNiLElBQUksT0FBTztBQUNYLE1BQU0sQ0FBQztBQUNQLE1BQU0sQ0FBQztBQUNQLE1BQU0sQ0FBQztBQUNQLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JJO0FBQ0EsRUFBRSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3hCLElBQUksT0FBTztBQUNYLE1BQU0sQ0FBQztBQUNQLE1BQU0sQ0FBQztBQUNQLE1BQU0sQ0FBQztBQUNQLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSDtBQUNBLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNwQixFQUFFLE9BQU87QUFDVCxJQUFJLENBQUM7QUFDTCxJQUFJLENBQUM7QUFDTCxJQUFJLENBQUM7QUFDTCxHQUFHLENBQUM7QUFDSixDQUFDO0FBQ0Q7QUFDQSxTQUFT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O0FBQ0YsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEtBQUssSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxXQUFXLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLElB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Q0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQzdCLElBQUksT0FBTztBQUNYLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDVixNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ1YsS0FBSyxDQUFDO0FBQ04sR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO0FBQzNEO0FBQ0EsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQ3BCLElBQUksT0FBTztBQUNYLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDVixNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ1YsS0FBSyxDQUFDO0FBQ04sR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPO0FBQ1QsSUFBSSxDQUFDLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDcEcsSUFBSSxDQUFDLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDcEcsR0FBRyxDQUFDO0FBQ0osQ0FBQztBQUNEO0FBQ0EsU0FBUyxTQUFTLENBQUMsSUFBSSxFQUFFO0FBQ3pCLEVBQUUsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDN0gsQ0FBQztBQUNEO0FBQ0EsU0FB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QUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDbkMsTUFBTSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMvQztBQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUM1QixRQUFRLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BFO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQyxVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDbEMsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZELE1BQU0sTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsQztBQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3ZCLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQ3pDLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO0FBQzNDLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO0FBQzVDLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO0FBQzFDLE9BQU87QUFDUDtBQUNB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LEdBQUcsVUFBVSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7QUFDcEMsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO0FBQzVDLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sU0FBUyxTQUFTLFdBQVcsQ0FBQyxTQUFTLENBQUM7QUFDOUMsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQzFCLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0MsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2xDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3ZGLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQztBQUNwQyxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDNUMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3JELEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sT0FBTyxTQUFTLFdBQVcsQ0FBQyxTQUFTLENBQUM7QUFDNUMsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQzFCLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0MsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2xDLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQztBQUNwQyxJQUFJ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QUFDO0FBQ2xELElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ2xHLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNsQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDN0YsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDO0FBQ3BDLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztBQUM1QyxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxNQUFNLE1BQU0sU0FBUyxXQUFXLENBQUMsU0FBUyxDQUFDO0FBQzNDLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRTtBQUMxQixJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFDLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNsQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7QUFDdEMsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDO0FBQ3BDLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztBQUM1QyxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDcEQsSUFBSSxJQUFJLENB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LEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDekQsU0FBUyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7QUFDcEMsVUFBVSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7QUFDM0QsU0FBUyxNQUFNO0FBQ2YsVUFBVSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQztBQUNuRTtBQUNBLFVBQVUsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFO0FBQ2xDLFlBQVksS0FBSyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ2hELFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQzdFLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN6RSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksS0FBSyxFQUFFO0FBQ25CLFVBQVUsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRTtBQUNuQyxZQUFZLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEMsWUFBWSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDekQsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENB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QUFDO0FBQzVHLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxHQUFHLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1RyxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0csSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTtBQUMxQyxNQUFNLElBQUksRUFBRSxVQUFVLENBQUMsT0FBTztBQUM5QixNQUFNLFlBQVksRUFBRSxDQUFDO0FBQ3JCLE1BQU0sUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztBQUMzQixLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztBQUM5QyxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0csSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVHLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxHQUFHLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1RyxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUs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QUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ3RDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDckgsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakUsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDakcsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDakYsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDO0FBQ3BDLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztBQUM1QyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxRSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0QsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FB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QU0sS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUM7QUFDdEUsSUFBSSxNQUFNLE1BQU0sR0FBRyxNQUFNLEdBQUcsNEJBQTRCLEdBQUcsQ0FBQyxDQUFDO0FBQzdEO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQzFGLE1BQU0sSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEtBQUssNEJBQTRCLEdBQUcsQ0FBQyxFQUFFO0FBQzNGLFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ2xELE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUN2RCxRQUFRLE1BQU07QUFDZCxRQUFRLE9BQU8sRUFBRSxJQUFJO0FBQ3JCLE9BQU8sQ0FBQyxDQUFDO0FBQ1Q7QUFDQSxNQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTtBQUMxQixRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQzVCLFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQ3JDO0FBQ0EsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1B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QUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3BCO0FBQ0EsTUFBTSxRQUFRLFNBQVMsV0FBVyxDQUFDLFNBQVMsQ0FBQztBQUM3QyxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDMUIsSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1QyxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFO0FBQ2hELE1BQU0sSUFBSSxFQUFFLFVBQVUsQ0FBQyxhQUFhO0FBQ3BDLE1BQU0sWUFBWSxFQUFFLENBQUM7QUFDckIsTUFBTSxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVCLEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RHLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNsQyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFO0FBQzVDLE1BQU0sSUFBSSxFQUFFLFVBQVUsQ0FBQyxTQUFTO0FBQ2hDLE1BQU0sWUFBWSxFQUFFLEVBQUU7QUFDdEIsTUFBTSxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDdkMsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7QUFDcEMsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO0FBQzVDLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUUs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TyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRTtBQUN0QixJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDckIsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxNQUFNLENBQUMsS0FBSyxFQUFFO0FBQ3ZCLElBQUksT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRTtBQUN0QixJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDckIsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxNQUFNLENBQUMsS0FBSyxFQUFFO0FBQ3ZCLElBQUksT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sT0FBTyxDQUFDLEtBQUssRUFBRTtBQUN4QixJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLFdBQVcsQ0FBQyxLQUFLLEVBQUU7QUFDNUIsSUFBSSxPQUFPLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xDLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxLQUFLLENBQUMsS0FBSyxFQUFFO0FBQ3RCLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sU0FBUyxDQUFDLEtBQUssRUFBRTtBQUMxQixJQUFJLE9BQU8sSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEMsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDeEIsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxPQUFPLENBQUMsS0FBSyxFQUFFO0FBQ3hCLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRTtBQUN0QixJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDckIsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxRQUFRLENBQUMsS0FBSyxFQUFFO0FBQ3pCLElBQUksT0FBTyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNyQixJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLE1BQU0sQ0FBQyxLQUFLLEVBQUU7QUFDdkIsSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxZQUFZLENBQUMsS0FBSyxFQUFFO0FBQzdCLElBQUksT0FBTyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sUUFBUSxDQUFDLEtBQUssRUFBRTtBQUN6QixJQUFJLE9BQU8sSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLE1BQU0sQ0FBQyxLQUFLLEVBQUU7QUFDdkIsSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxHQUFHLENBQUMsS0FBSyxFQUFFO0FBQ3BCLElBQUksT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sTUFBTSxDQUFDLEtBQUssRUFBRTtBQUN2QixJQUFJLE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDeEIsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxXQUFXLENBQUMsS0FBSyxFQUFFO0FBQzVCLElBQUksT0FBTyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRTtBQUN0QixJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLEdBQUcsQ0FBQyxLQUFLLEVBQUU7QUFDcEIsSUFBSSxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3JCLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sUUFBUSxDQUFDLEtBQUssRUFBRTtBQUN6QixJQUFJLE9BQU8sSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLFFBQVEsQ0FBQyxLQUFLLEVBQUU7QUFDekIsSUFBSSxPQUFPLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9CLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxPQUFPLENBQUMsS0FBSyxFQUFFO0FBQ3hCLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNyQixJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLFlBQVksQ0FBQyxLQUFLLEVBQUU7QUFDN0IsSUFBSSxPQUFPLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxPQUFPLENBQUMsS0FBSyxFQUFFO0FBQ3hCLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sT0FBTyxDQUFDLEtBQUssRUFBRTtBQUN4QixJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUU7QUFDdEIsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxNQUFNLENBQUMsS0FBSyxFQUFFO0FBQ3ZCLElBQUksT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sTUFBTSxDQUFDLEtBQUssRUFBRTtBQUN2QixJQUFJLE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDeEIsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxTQUFTLENBQUMsS0FBSyxFQUFFO0FBQzFCLElBQUksT0FBTyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sR0FBRyxDQUFDLEtBQUssRUFBRTtBQUNwQixJQUFJLE9BQU8sSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakMsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLE1BQU0sQ0FBQyxLQUFLLEVBQUU7QUFDdkIsSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxXQUFXLENBQUMsS0FBSyxFQUFFO0FBQzVCLElBQUksT0FBTyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sUUFBUSxDQUFDLEtBQUssRUFBRTtBQUN6QixJQUFJLE9BQU8sSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLFNBQVMsQ0FBQyxLQUFLLEVBQUU7QUFDMUIsSUFBSSxPQUFPLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxPQUFPLENBQUMsS0FBSyxFQUFFO0FBQ3hCLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRTtBQUN0QixJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUU7QUFDdEIsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxPQUFPLENBQUMsS0FBSyxFQUFFO0FBQ3hCLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sT0FBTyxDQUFDLEtBQUssRUFBRTtBQUN4QixJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLFVBQVUsQ0FBQyxLQUFLLEVBQUU7QUFDM0IsSUFBSSxPQUFPLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pDLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxTQUFTLENBQUMsS0FBSyxFQUFFO0FBQzFCLElBQUksT0FBTyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sVUFBVSxDQUFDLEtBQUssRUFBRTtBQUMzQixJQUFJLE9BQU8sSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakMsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLE1BQU0sQ0FBQyxLQUFLLEVBQUU7QUFDdkIsSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxRQUFRLENBQUMsS0FBSyxFQUFFO0FBQ3pCLElBQUksT0FBTyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNyQixJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLFFBQVEsQ0FBQyxLQUFLLEVBQUU7QUFDekIsSUFBSSxPQUFPLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9CLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3JCLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sU0FBUyxDQUFDLEtBQUssRUFBRTtBQUMxQixJQUFJLE9BQU8sSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEMsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDeEIsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxTQUFTLENBQUMsS0FBSyxFQUFFO0FBQzFCLElBQUksT0FBTyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sUUFBUSxDQUFDLEtBQUssRUFBRTtBQUN6QixJQUFJLE9BQU8sSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUU7QUFDbkIsSUFBSSxPQUFPLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxRQUFRLENBQUMsS0FBSyxFQUFFO0FBQ3pCLElBQUksT0FBTyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRTtBQUN0QixJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLFNBQVMsQ0FBQyxLQUFLLEVBQUU7QUFDMUIsSUFBSSxPQUFPLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztBQUM5QztBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEtBQUs7QUFDbEU7QUFDQTtBQUNBO0FBQ0EsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxHQUFHO0FBQzlDLEVBQUUsS0FBSyxFQUFFLElBQUk7QUFDYixDQUFDLEVBQUUsQ0FBQztBQUNKLE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQzFCLE9BQU8sQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0FBQzFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQzlCLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztBQUM5QztBQUNBLElBQUksV0FBVyxHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFDO0FBQ0EsSUFBSSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUM7QUFDQSxTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO0FBQ3BDLEVBQUUsT0FBTztBQUNULElBQUksSUFBSSxFQUFFLEtBQUs7QUFDZixJQUFJLFVBQVUsRUFBRTtBQUNoQixNQUFNLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssT0FBTyxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDMUQsS0FBSztBQUNMLElBQUksUUFBUTtBQUNaLEdBQUcsQ0FBQztBQUNKLENBQUM7QUFDRDtBQUNBLFNBQVMsU0FBUyxDQUFDLElBQUksRUFBRTtBQUN6QixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ2pDLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQztBQUN6RCxFQUFFLE1BQU0sSUFBSSxHQUFHO0FBQ2YsSUFBSSxJQUFJLEVBQUUsS0FBSztBQUNmLElBQUksVUFBVTtBQUNkLElBQUksUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUTtBQUMvQyxHQUFHLENBQUM7QUFDSjtBQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRTtBQUM1QyxJQUFJLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO0FBQzNGO0FBQ0EsSUFBSSxJQUFJLGVBQWUsRUFBRTtBQUN6QixNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDdkMsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDNUMsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ2xDLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFDRDtBQUNBLFNBQVMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQ25DLEVBQUUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6QyxFQUFFLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7QUFDOUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzVCO0FBQ0EsRUFBRSxRQUFRLElBQUksQ0FBQyxNQUFNO0FBQ3JCLElBQUksS0FBSyxVQUFVO0FBQ25CLE1BQU07QUFDTixRQUFRLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRCxRQUFRLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRCxRQUFRLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsTUFBTTtBQUNkLE9BQU87QUFDUDtBQUNBLElBQUksS0FBSyxPQUFPLENBQUM7QUFDakIsSUFBSSxLQUFLLE9BQU87QUFDaEIsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLENBQUMsRUFBRTtBQUM5QyxRQUFRLEtBQUssQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxQyxRQUFRLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4QyxRQUFRLEtBQUssQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLE9BQU87QUFDUDtBQUNBLE1BQU0sS0FBSyxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUM7QUFDOUIsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckM7QUFDQSxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQUU7QUFDL0IsUUFBUSxLQUFLLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQztBQUNoQyxRQUFRLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEUsT0FBTyxNQUFNO0FBQ2IsUUFBUSxLQUFLLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztBQUMvQixRQUFRLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUN4QyxRQUFRLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQzFCLFFBQVEsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDMUIsT0FBTztBQUNQO0FBQ0EsTUFBTSxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDOUQsTUFBTSxNQUFNO0FBQ1o7QUFDQSxJQUFJLEtBQUssUUFBUSxDQUFDO0FBQ2xCLElBQUksS0FBSyxLQUFLO0FBQ2QsTUFBTTtBQUNOLFFBQVEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEMsUUFBUSxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUN6QixRQUFRLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pELFFBQVEsTUFBTSxNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RTtBQUNBLFFBQVEsS0FBSyxNQUFNLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQzVDLFVBQVUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNqRCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU07QUFDZCxPQUFPO0FBQ1A7QUFDQSxJQUFJLEtBQUssT0FBTztBQUNoQixNQUFNO0FBQ04sUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRSxRQUFRLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQzFCLFFBQVEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEMsUUFBUSxNQUFNO0FBQ2QsT0FBTztBQUNQO0FBQ0EsSUFBSSxLQUFLLElBQUk7QUFDYixNQUFNO0FBQ04sUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRSxRQUFRLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQzFCLFFBQVEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEMsUUFBUSxNQUFNO0FBQ2QsT0FBTztBQUNQLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLGlCQUFpQixDQUFDLElBQUksRUFBRTtBQUNqQyxFQUFFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBYyxDQUFDO0FBQ2pFLEVBQUUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDbkYsRUFBRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUNuRjtBQUNBLEVBQUUsUUFBUSxJQUFJLENBQUMsTUFBTTtBQUNyQixJQUFJLEtBQUssT0FBTyxDQUFDO0FBQ2pCLElBQUksS0FBSyxPQUFPO0FBQ2hCLE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQUU7QUFDbEQsUUFBUSxPQUFPO0FBQ2YsVUFBVSxLQUFLLEVBQUUsY0FBYyxDQUFDLEtBQUssR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZO0FBQ3ZGLFVBQVUsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVTtBQUN2RixTQUFTLENBQUM7QUFDVixPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU87QUFDYixRQUFRLEtBQUssRUFBRSxjQUFjLENBQUMsS0FBSyxHQUFHLE9BQU87QUFDN0MsUUFBUSxNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU0sR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNO0FBQ2pGLE9BQU8sQ0FBQztBQUNSO0FBQ0EsSUFBSSxLQUFLLFFBQVEsQ0FBQztBQUNsQixJQUFJLEtBQUssS0FBSztBQUNkLE1BQU0sTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEk7QUFDQSxNQUFNLE9BQU87QUFDYixRQUFRLEtBQUs7QUFDYixRQUFRLE1BQU0sRUFBRSxjQUFjLENBQUMsTUFBTSxHQUFHLE9BQU87QUFDL0MsT0FBTyxDQUFDO0FBQ1I7QUFDQSxJQUFJLEtBQUssT0FBTyxDQUFDO0FBQ2pCLElBQUksS0FBSyxJQUFJO0FBQ2IsTUFBTSxPQUFPO0FBQ2IsUUFBUSxLQUFLLEVBQUUsY0FBYyxDQUFDLEtBQUssR0FBRyxPQUFPO0FBQzdDLFFBQVEsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTTtBQUNqRixPQUFPLENBQUM7QUFDUjtBQUNBLElBQUksS0FBSyxVQUFVLENBQUM7QUFDcEIsSUFBSTtBQUNKLE1BQU0sT0FBTyxjQUFjLENBQUM7QUFDNUIsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBLFNBQVMsa0JBQWtCLENBQUMsSUFBSSxFQUFFO0FBQ2xDLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkMsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2QyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEM7QUFDQSxFQUFFLFFBQVEsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFO0FBQy9CLElBQUksS0FBSyxjQUFjO0FBQ3ZCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLE1BQU0sTUFBTTtBQUNaO0FBQ0EsSUFBSSxLQUFLLFlBQVk7QUFDckIsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsQyxNQUFNLE1BQU07QUFDWjtBQUNBLElBQUksS0FBSyxhQUFhO0FBQ3RCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEMsTUFBTSxNQUFNO0FBQ1o7QUFDQSxJQUFJLEtBQUssY0FBYztBQUN2QixNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUMsTUFBTSxNQUFNO0FBQ1o7QUFDQSxJQUFJLEtBQUssWUFBWTtBQUNyQixNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QyxNQUFNLE1BQU07QUFDWjtBQUNBLElBQUksS0FBSyxhQUFhO0FBQ3RCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLE1BQU0sTUFBTTtBQUNaO0FBQ0EsSUFBSSxLQUFLLFdBQVc7QUFDcEIsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEMsTUFBTSxNQUFNO0FBQ1o7QUFDQSxJQUFJLEtBQUssVUFBVTtBQUNuQixNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sTUFBTTtBQUNaLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1g7QUFDQSxFQUFFLFFBQVEsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDO0FBQzFCLElBQUksS0FBSyxDQUFDO0FBQ1YsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEMsTUFBTSxNQUFNO0FBQ1o7QUFDQSxJQUFJLEtBQUssRUFBRTtBQUNYLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNuQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsTUFBTSxNQUFNO0FBQ1o7QUFDQSxJQUFJLEtBQUssR0FBRztBQUNaLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbEMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsTUFBTSxNQUFNO0FBQ1o7QUFDQSxJQUFJLEtBQUssR0FBRztBQUNaLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNuQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkIsTUFBTSxNQUFNO0FBQ1osR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFD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SSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRTtBQUMxQyxJQUFJLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNwQjtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3JCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO0FBQy9ELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO0FBQy9ELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQzFCLElBQUksSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3RCO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDbkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzdFLE1BQU0sTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzFFLE1BQU0sTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzdFLE1BQU0sTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUs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QUFFLENBQUM7QUFDOUIsSUFBSSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDckI7QUFDQSxJQUFJLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQzFELE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDdEUsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzVCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDNUIsTUFBTSxLQUFLLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQ3RELFFBQVEsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUM5RyxVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDOUIsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDNUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDM0M7QUFDQSxNQUFNLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQzVELFFBQVEsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFD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QUksSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxJQUFJLElBQUksV0FBVyxDQUFDLGVBQWUsRUFBRSxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFFLEtBQUssSUFBSSxJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxLQUFLLElBQUksSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsS0FBSyxJQUFJLElBQUksV0FBVyxDQUFDLGVBQWUsRUFBRSxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLEtBQUssSUFBSSxJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxLQUFLLElBQUksSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsS0FBSyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxJQUFJLElBQUksV0FBVyxDQUFDLGVBQWUsRUFBRSxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoNEIsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDO0FBQzVCLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUM5QixN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QyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEQsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztBQUNyQyxNQUFNLElBQUksRUFBRSxLQUFLO0FBQ2pCLE1BQU0sVUFBVSxFQUFFO0FBQ2xCLFFBQVEsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDO0FBQzFCLFFBQVEsS0FBSyxFQUFFLEVBQUU7QUFDakIsT0FBTztBQUNQLE1BQU0sUUFBUTtBQUNkLEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsTUFBTSxDQUFDLFNBQVMsV0FBVyxDQUFDO0FBQzVCLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRTtBQUMxQixJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLEVBQUU7QUFDckMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDO0FBQ3JCLE1BQU0sT0FBTyxFQUFFLFFBQVE7QUFDdkIsS0FBSyxDQUFDLENBQUM7QUFDUDtBQUNBLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM1QztBQUNBLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3RCLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sRUFBRSxTQUFTLFdBQVcsQ0FBQztBQUM3QixFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDMUIsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzVCLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sRUFBRSxTQUFTLFdBQVcsQ0FBQztBQUM3QixFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDMUIsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFF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QzlCLElBQUksTUFBTSxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakM7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDaEMsTUFBTSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbEM7QUFDQSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ2xDLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUYsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDckM7QUFDQSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ3JDLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyw0Q0FBNEMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0YsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLE1BQU0sT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDO0FBQzlDLElBQUksTUFBTSxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakM7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDaEMsTUFBTSxNQUFNLE1BQU0sR0FBRyxDQUFD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 diff --git a/enter/.obsidian/plugins/better-pdf-plugin/manifest.json b/enter/.obsidian/plugins/better-pdf-plugin/manifest.json deleted file mode 100644 index bfa1de6..0000000 --- a/enter/.obsidian/plugins/better-pdf-plugin/manifest.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "id": "better-pdf-plugin", - "name": "Better PDF Plugin", - "version": "1.4.0", - "minAppVersion": "0.11.13", - "description": "Goal of this Plugin in to implement a native PDF handling workflow", - "author": "MSzturc", - "authorUrl": "https://github.com/MSzturc", - "isDesktopOnly": false -} diff --git a/enter/.obsidian/plugins/better-pdf-plugin/styles.css b/enter/.obsidian/plugins/better-pdf-plugin/styles.css deleted file mode 100644 index 009b21f..0000000 --- a/enter/.obsidian/plugins/better-pdf-plugin/styles.css +++ /dev/null @@ -1,5 +0,0 @@ -/* Styles */ - -.popover.hover-popover.pdf-embed{ - display:none; -} \ No newline at end of file diff --git a/enter/.obsidian/plugins/digitalgarden/data.json b/enter/.obsidian/plugins/digitalgarden/data.json index 094f329..e805b9a 100644 --- a/enter/.obsidian/plugins/digitalgarden/data.json +++ b/enter/.obsidian/plugins/digitalgarden/data.json @@ -5,7 +5,7 @@ "gardenBaseUrl": "https://netlify-neopets.vercel.app", "prHistory": [], "baseTheme": "light", - "theme": "{\"name\":\"Origami\",\"author\":\"kneecaps\",\"repo\":\"7368697661/Origami\",\"screenshot\":\"screen.png\",\"modes\":[\"dark\",\"light\"],\"cssUrl\":\"https://raw.githubusercontent.com/7368697661/Origami/HEAD/theme.css\"}", + "theme": "{\"name\":\"Serenity\",\"author\":\"Ha'ani Whitlock\",\"repo\":\"Bluemoondragon07/Obsidian-Serenity\",\"screenshot\":\"cover-small.png\",\"modes\":[\"dark\",\"light\"],\"cssUrl\":\"https://raw.githubusercontent.com/Bluemoondragon07/Obsidian-Serenity/HEAD/theme.css\"}", "faviconPath": "Coding Tips (Classical)/Project Vault/Obsidian/imgFiles/grey-darkgrey-S.svg", "noteSettingsIsInitialized": true, "siteName": "Shw3th@", @@ -21,7 +21,7 @@ "showUpdatedTimestamp": false, "updatedTimestampKey": "", "timestampFormat": "MMM dd, yyyy h:mm a", - "styleSettingsCss": "body.css-settings-manager { } body.theme-light.css-settings-manager { } body.theme-dark.css-settings-manager { }", + "styleSettingsCss": "body.css-settings-manager { --aura-translucent-window-opacity: 0; } body.theme-light.css-settings-manager { } body.theme-dark.css-settings-manager { }", "pathRewriteRules": "Coding Tips (Classical)/Terminal Tips:Coding Guides\nMachine Tips (Quantum)/Resources/Technologies, Orgs, & Apps:Quantum Guides\nCoding Tips (Classical)/Project Vault/hi.mainsite:General", "customFilters": [], "contentClassesKey": "dg-content-classes", diff --git a/enter/.obsidian/plugins/obsidian-extract-pdf-highlights/data.json b/enter/.obsidian/plugins/obsidian-extract-pdf-highlights/data.json deleted file mode 100644 index 9db2e82..0000000 --- a/enter/.obsidian/plugins/obsidian-extract-pdf-highlights/data.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "includePageNumber": true, - "includeHighlightColor": true, - "createLinks": false -} \ No newline at end of file diff --git a/enter/.obsidian/plugins/obsidian-extract-pdf-highlights/main.js b/enter/.obsidian/plugins/obsidian-extract-pdf-highlights/main.js deleted file mode 100644 index eb66afd..0000000 --- a/enter/.obsidian/plugins/obsidian-extract-pdf-highlights/main.js +++ /dev/null @@ -1,78952 +0,0 @@ -'use strict'; - -var obsidian = require('obsidian'); -var require$$2 = require('zlib'); -var require$$3 = require('fs'); -var require$$4 = require('http'); -var require$$5 = require('https'); -var require$$6 = require('url'); - -function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } - -var require$$2__default = /*#__PURE__*/_interopDefaultLegacy(require$$2); -var require$$3__default = /*#__PURE__*/_interopDefaultLegacy(require$$3); -var require$$4__default = /*#__PURE__*/_interopDefaultLegacy(require$$4); -var require$$5__default = /*#__PURE__*/_interopDefaultLegacy(require$$5); -var require$$6__default = /*#__PURE__*/_interopDefaultLegacy(require$$6); - -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ -/* global Reflect, Promise */ - -var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); -}; - -function __extends(d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); -} - -function __awaiter(thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -} - -function __generator(thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -} - -var ExtractPDFHighlightsPluginSettings = /** @class */ (function () { - function ExtractPDFHighlightsPluginSettings() { - this.includePageNumber = false; - this.includeHighlightColor = false; - this.createLinks = false; - } - return ExtractPDFHighlightsPluginSettings; -}()); - -var ExtractPDFHighlightsPluginSettingsTab = /** @class */ (function (_super) { - __extends(ExtractPDFHighlightsPluginSettingsTab, _super); - function ExtractPDFHighlightsPluginSettingsTab(app, plugin) { - var _this = _super.call(this, app, plugin) || this; - _this.plugin = plugin; - return _this; - } - ExtractPDFHighlightsPluginSettingsTab.prototype.display = function () { - var _this = this; - var containerEl = this.containerEl; - containerEl.empty(); - containerEl.createEl('h2', { text: 'Extract PDF Highlights.' }); - new obsidian.Setting(containerEl) - .setName('Include page number') - .setDesc('If enabled, adds a `(Page X)` to each highlight.') - .addToggle(function (toggle) { - return toggle.setValue(_this.plugin.settings.includePageNumber).onChange(function (value) { - _this.plugin.settings.includePageNumber = value; - _this.plugin.saveData(_this.plugin.settings); - }); - }); - new obsidian.Setting(containerEl) - .setName('Include highlighter color') - .setDesc('If enabled, adds a color tag to each highlight based on the highlighter color used in the PDF') - .addToggle(function (toggle) { - return toggle.setValue(_this.plugin.settings.includeHighlightColor).onChange(function (value) { - _this.plugin.settings.includeHighlightColor = value; - _this.plugin.saveData(_this.plugin.settings); - }); - }); - new obsidian.Setting(containerEl) - .setName('Create links') - .setDesc('If enabled, turns each list item into a markdown link') - .addToggle(function (toggle) { - return toggle.setValue(_this.plugin.settings.createLinks).onChange(function (value) { - _this.plugin.settings.createLinks = value; - _this.plugin.saveData(_this.plugin.settings); - }); - }); - }; - return ExtractPDFHighlightsPluginSettingsTab; -}(obsidian.PluginSettingTab)); - -var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - -function createCommonjsModule(fn, basedir, module) { - return module = { - path: basedir, - exports: {}, - require: function (path, base) { - return commonjsRequire(path, (base === undefined || base === null) ? module.path : base); - } - }, fn(module, module.exports), module.exports; -} - -function commonjsRequire () { - throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); -} - -/** - * Just run the callback through setImmediate, so that it appears - * asynchronous, even when unnecessary. - */ - -function ensure(modules, callback) { - setImmediate(callback); -} - -var nodeEnsure = ensure; - -var extracthighlights_worker = createCommonjsModule(function (module, exports) { -/** - * @licstart The following is the entire license notice for the - * Javascript code in this page - * - * Copyright 2018 Mozilla Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @licend The above is the entire license notice for the - * Javascript code in this page - */ - -(function webpackUniversalModuleDefinition(root, factory) { - module.exports = factory(); -})(commonjsGlobal, function() { - return /******/ (function(modules) { // webpackBootstrap - /******/ // The module cache - /******/ var installedModules = {}; - /******/ - /******/ // The require function - /******/ function __w_extracthighlights_require__(moduleId) { - /******/ - /******/ // Check if module is in cache - /******/ if(installedModules[moduleId]) { - /******/ return installedModules[moduleId].exports; - /******/ } - /******/ // Create a new module (and put it into the cache) - /******/ var module = installedModules[moduleId] = { - /******/ i: moduleId, - /******/ l: false, - /******/ exports: {} - /******/ }; - /******/ - /******/ // Execute the module function - /******/ modules[moduleId].call(module.exports, module, module.exports, __w_extracthighlights_require__); - /******/ - /******/ // Flag the module as loaded - /******/ module.l = true; - /******/ - /******/ // Return the exports of the module - /******/ return module.exports; - /******/ } - /******/ - /******/ - /******/ // expose the modules object (__webpack_modules__) - /******/ __w_extracthighlights_require__.m = modules; - /******/ - /******/ // expose the module cache - /******/ __w_extracthighlights_require__.c = installedModules; - /******/ - /******/ // define getter function for harmony exports - /******/ __w_extracthighlights_require__.d = function(exports, name, getter) { - /******/ if(!__w_extracthighlights_require__.o(exports, name)) { - /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); - /******/ } - /******/ }; - /******/ - /******/ // define __esModule on exports - /******/ __w_extracthighlights_require__.r = function(exports) { - /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { - /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); - /******/ } - /******/ Object.defineProperty(exports, '__esModule', { value: true }); - /******/ }; - /******/ - /******/ // create a fake namespace object - /******/ // mode & 1: value is a module id, require it - /******/ // mode & 2: merge all properties of value into the ns - /******/ // mode & 4: return value when already ns object - /******/ // mode & 8|1: behave like require - /******/ __w_extracthighlights_require__.t = function(value, mode) { - /******/ if(mode & 1) value = __w_extracthighlights_require__(value); - /******/ if(mode & 8) return value; - /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; - /******/ var ns = Object.create(null); - /******/ __w_extracthighlights_require__.r(ns); - /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); - /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __w_extracthighlights_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); - /******/ return ns; - /******/ }; - /******/ - /******/ // getDefaultExport function for compatibility with non-harmony modules - /******/ __w_extracthighlights_require__.n = function(module) { - /******/ var getter = module && module.__esModule ? - /******/ function getDefault() { return module['default']; } : - /******/ function getModuleExports() { return module; }; - /******/ __w_extracthighlights_require__.d(getter, 'a', getter); - /******/ return getter; - /******/ }; - /******/ - /******/ // Object.prototype.hasOwnProperty.call - /******/ __w_extracthighlights_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; - /******/ - /******/ // __webpack_public_path__ - /******/ __w_extracthighlights_require__.p = ""; - /******/ - /******/ - /******/ // Load entry module and return exports - /******/ return __w_extracthighlights_require__(__w_extracthighlights_require__.s = 0); - /******/ }) - /************************************************************************/ - /******/ ([ - /* 0 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - var extracthighlightsCoreWorker = __w_extracthighlights_require__(1); - - exports.WorkerMessageHandler = extracthighlightsCoreWorker.WorkerMessageHandler; - - /***/ }), - /* 1 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.WorkerMessageHandler = exports.WorkerTask = void 0; - - var _regenerator = _interopRequireDefault(__w_extracthighlights_require__(2)); - - var _util = __w_extracthighlights_require__(6); - - var _pdf_manager = __w_extracthighlights_require__(151); - - var _is_node = _interopRequireDefault(__w_extracthighlights_require__(9)); - - var _message_handler = __w_extracthighlights_require__(189); - - var _primitives = __w_extracthighlights_require__(155); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } - - function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } - - function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } - - function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } - - function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - - function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - - var WorkerTask = function WorkerTaskClosure() { - function WorkerTask(name) { - this.name = name; - this.terminated = false; - this._capability = (0, _util.createPromiseCapability)(); - } - - WorkerTask.prototype = { - get finished() { - return this._capability.promise; - }, - - finish: function finish() { - this._capability.resolve(); - }, - terminate: function terminate() { - this.terminated = true; - }, - ensureNotTerminated: function ensureNotTerminated() { - if (this.terminated) { - throw new Error('Worker task was terminated'); - } - } - }; - return WorkerTask; - }(); - - exports.WorkerTask = WorkerTask; - - var PDFWorkerStream = function PDFWorkerStreamClosure() { - function PDFWorkerStream(msgHandler) { - this._msgHandler = msgHandler; - this._contentLength = null; - this._fullRequestReader = null; - this._rangeRequestReaders = []; - } - - PDFWorkerStream.prototype = { - getFullReader: function getFullReader() { - (0, _util.assert)(!this._fullRequestReader); - this._fullRequestReader = new PDFWorkerStreamReader(this._msgHandler); - return this._fullRequestReader; - }, - getRangeReader: function getRangeReader(begin, end) { - var reader = new PDFWorkerStreamRangeReader(begin, end, this._msgHandler); - - this._rangeRequestReaders.push(reader); - - return reader; - }, - cancelAllRequests: function cancelAllRequests(reason) { - if (this._fullRequestReader) { - this._fullRequestReader.cancel(reason); - } - - var readers = this._rangeRequestReaders.slice(0); - - readers.forEach(function (reader) { - reader.cancel(reason); - }); - } - }; - - function PDFWorkerStreamReader(msgHandler) { - var _this = this; - - this._msgHandler = msgHandler; - this._contentLength = null; - this._isRangeSupported = false; - this._isStreamingSupported = false; - - var readableStream = this._msgHandler.sendWithStream('GetReader'); - - this._reader = readableStream.getReader(); - this._headersReady = this._msgHandler.sendWithPromise('ReaderHeadersReady').then(function (data) { - _this._isStreamingSupported = data.isStreamingSupported; - _this._isRangeSupported = data.isRangeSupported; - _this._contentLength = data.contentLength; - }); - } - - PDFWorkerStreamReader.prototype = { - get headersReady() { - return this._headersReady; - }, - - get contentLength() { - return this._contentLength; - }, - - get isStreamingSupported() { - return this._isStreamingSupported; - }, - - get isRangeSupported() { - return this._isRangeSupported; - }, - - read: function read() { - return this._reader.read().then(function (_ref) { - var value = _ref.value, - done = _ref.done; - - if (done) { - return { - value: undefined, - done: true - }; - } - - return { - value: value.buffer, - done: false - }; - }); - }, - cancel: function cancel(reason) { - this._reader.cancel(reason); - } - }; - - function PDFWorkerStreamRangeReader(begin, end, msgHandler) { - this._msgHandler = msgHandler; - this.onProgress = null; - - var readableStream = this._msgHandler.sendWithStream('GetRangeReader', { - begin: begin, - end: end - }); - - this._reader = readableStream.getReader(); - } - - PDFWorkerStreamRangeReader.prototype = { - get isStreamingSupported() { - return false; - }, - - read: function read() { - return this._reader.read().then(function (_ref2) { - var value = _ref2.value, - done = _ref2.done; - - if (done) { - return { - value: undefined, - done: true - }; - } - - return { - value: value.buffer, - done: false - }; - }); - }, - cancel: function cancel(reason) { - this._reader.cancel(reason); - } - }; - return PDFWorkerStream; - }(); - - var WorkerMessageHandler = { - setup: function setup(handler, port) { - var testMessageProcessed = false; - handler.on('test', function wphSetupTest(data) { - if (testMessageProcessed) { - return; - } - - testMessageProcessed = true; - - if (!(data instanceof Uint8Array)) { - handler.send('test', false); - return; - } - - var supportTransfers = data[0] === 255; - handler.postMessageTransfers = supportTransfers; - var xhr = new XMLHttpRequest(); - var responseExists = 'response' in xhr; - - try { - xhr.responseType; - } catch (e) { - responseExists = false; - } - - if (!responseExists) { - handler.send('test', false); - return; - } - - handler.send('test', { - supportTypedArray: true, - supportTransfers: supportTransfers - }); - }); - handler.on('configure', function wphConfigure(data) { - (0, _util.setVerbosityLevel)(data.verbosity); - }); - handler.on('GetDocRequest', function wphSetupDoc(data) { - return WorkerMessageHandler.createDocumentHandler(data, port); - }); - }, - createDocumentHandler: function createDocumentHandler(docParams, port) { - var pdfManager; - var terminated = false; - var cancelXHRs = null; - var WorkerTasks = []; - var apiVersion = docParams.apiVersion; - var workerVersion = '2.1.266'; - - if (apiVersion !== workerVersion) { - throw new Error("The API version \"".concat(apiVersion, "\" does not match ") + "the Worker version \"".concat(workerVersion, "\".")); - } - - var docId = docParams.docId; - var docBaseUrl = docParams.docBaseUrl; - var workerHandlerName = docParams.docId + '_worker'; - var handler = new _message_handler.MessageHandler(workerHandlerName, docId, port); - handler.postMessageTransfers = docParams.postMessageTransfers; - - function ensureNotTerminated() { - if (terminated) { - throw new Error('Worker was terminated'); - } - } - - function startWorkerTask(task) { - WorkerTasks.push(task); - } - - function finishWorkerTask(task) { - task.finish(); - var i = WorkerTasks.indexOf(task); - WorkerTasks.splice(i, 1); - } - - function loadDocument(_x) { - return _loadDocument.apply(this, arguments); - } - - function _loadDocument() { - _loadDocument = _asyncToGenerator( - /*#__PURE__*/ - _regenerator.default.mark(function _callee(recoveryMode) { - var _ref6, _ref7, numPages, fingerprint; - - return _regenerator.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.next = 2; - return pdfManager.ensureDoc('checkHeader'); - - case 2: - _context.next = 4; - return pdfManager.ensureDoc('parseStartXRef'); - - case 4: - _context.next = 6; - return pdfManager.ensureDoc('parse', [recoveryMode]); - - case 6: - if (recoveryMode) { - _context.next = 9; - break; - } - - _context.next = 9; - return pdfManager.ensureDoc('checkFirstPage'); - - case 9: - _context.next = 11; - return Promise.all([pdfManager.ensureDoc('numPages'), pdfManager.ensureDoc('fingerprint')]); - - case 11: - _ref6 = _context.sent; - _ref7 = _slicedToArray(_ref6, 2); - numPages = _ref7[0]; - fingerprint = _ref7[1]; - return _context.abrupt("return", { - numPages: numPages, - fingerprint: fingerprint - }); - - case 16: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - return _loadDocument.apply(this, arguments); - } - - function getPdfManager(data, evaluatorOptions) { - var pdfManagerCapability = (0, _util.createPromiseCapability)(); - var pdfManager; - var source = data.source; - - if (source.data) { - try { - pdfManager = new _pdf_manager.LocalPdfManager(docId, source.data, source.password, evaluatorOptions, docBaseUrl); - pdfManagerCapability.resolve(pdfManager); - } catch (ex) { - pdfManagerCapability.reject(ex); - } - - return pdfManagerCapability.promise; - } - - var pdfStream, - cachedChunks = []; - - try { - pdfStream = new PDFWorkerStream(handler); - } catch (ex) { - pdfManagerCapability.reject(ex); - return pdfManagerCapability.promise; - } - - var fullRequest = pdfStream.getFullReader(); - fullRequest.headersReady.then(function () { - if (!fullRequest.isRangeSupported) { - return; - } - - var disableAutoFetch = source.disableAutoFetch || fullRequest.isStreamingSupported; - pdfManager = new _pdf_manager.NetworkPdfManager(docId, pdfStream, { - msgHandler: handler, - password: source.password, - length: fullRequest.contentLength, - disableAutoFetch: disableAutoFetch, - rangeChunkSize: source.rangeChunkSize - }, evaluatorOptions, docBaseUrl); - - for (var i = 0; i < cachedChunks.length; i++) { - pdfManager.sendProgressiveData(cachedChunks[i]); - } - - cachedChunks = []; - pdfManagerCapability.resolve(pdfManager); - cancelXHRs = null; - }).catch(function (reason) { - pdfManagerCapability.reject(reason); - cancelXHRs = null; - }); - var loaded = 0; - - var flushChunks = function flushChunks() { - var pdfFile = (0, _util.arraysToBytes)(cachedChunks); - - if (source.length && pdfFile.length !== source.length) { - (0, _util.warn)('reported HTTP length is different from actual'); - } - - try { - pdfManager = new _pdf_manager.LocalPdfManager(docId, pdfFile, source.password, evaluatorOptions, docBaseUrl); - pdfManagerCapability.resolve(pdfManager); - } catch (ex) { - pdfManagerCapability.reject(ex); - } - - cachedChunks = []; - }; - - var readPromise = new Promise(function (resolve, reject) { - var readChunk = function readChunk(chunk) { - try { - ensureNotTerminated(); - - if (chunk.done) { - if (!pdfManager) { - flushChunks(); - } - - cancelXHRs = null; - return; - } - - var data = chunk.value; - loaded += (0, _util.arrayByteLength)(data); - - if (!fullRequest.isStreamingSupported) { - handler.send('DocProgress', { - loaded: loaded, - total: Math.max(loaded, fullRequest.contentLength || 0) - }); - } - - if (pdfManager) { - pdfManager.sendProgressiveData(data); - } else { - cachedChunks.push(data); - } - - fullRequest.read().then(readChunk, reject); - } catch (e) { - reject(e); - } - }; - - fullRequest.read().then(readChunk, reject); - }); - readPromise.catch(function (e) { - pdfManagerCapability.reject(e); - cancelXHRs = null; - }); - - cancelXHRs = function cancelXHRs() { - pdfStream.cancelAllRequests('abort'); - }; - - return pdfManagerCapability.promise; - } - - function setupDoc(data) { - function onSuccess(doc) { - ensureNotTerminated(); - handler.send('GetDoc', { - pdfInfo: doc - }); - } - - function onFailure(e) { - ensureNotTerminated(); - - if (e instanceof _util.PasswordException) { - var task = new WorkerTask('PasswordException: response ' + e.code); - startWorkerTask(task); - handler.sendWithPromise('PasswordRequest', e).then(function (data) { - finishWorkerTask(task); - pdfManager.updatePassword(data.password); - pdfManagerReady(); - }).catch(function (boundException) { - finishWorkerTask(task); - handler.send('PasswordException', boundException); - }.bind(null, e)); - } else if (e instanceof _util.InvalidPDFException) { - handler.send('InvalidPDF', e); - } else if (e instanceof _util.MissingPDFException) { - handler.send('MissingPDF', e); - } else if (e instanceof _util.UnexpectedResponseException) { - handler.send('UnexpectedResponse', e); - } else { - handler.send('UnknownError', new _util.UnknownErrorException(e.message, e.toString())); - } - } - - function pdfManagerReady() { - ensureNotTerminated(); - loadDocument(false).then(onSuccess, function loadFailure(ex) { - ensureNotTerminated(); - - if (!(ex instanceof _util.XRefParseException)) { - onFailure(ex); - return; - } - - pdfManager.requestLoadedStream(); - pdfManager.onLoadedStream().then(function () { - ensureNotTerminated(); - loadDocument(true).then(onSuccess, onFailure); - }); - }, onFailure); - } - - ensureNotTerminated(); - var evaluatorOptions = { - forceDataSchema: data.disableCreateObjectURL, - maxImageSize: data.maxImageSize, - disableFontFace: data.disableFontFace, - nativeImageDecoderSupport: data.nativeImageDecoderSupport, - ignoreErrors: data.ignoreErrors, - isEvalSupported: data.isEvalSupported - }; - getPdfManager(data, evaluatorOptions).then(function (newPdfManager) { - if (terminated) { - newPdfManager.terminate(); - throw new Error('Worker was terminated'); - } - - pdfManager = newPdfManager; - pdfManager.onLoadedStream().then(function (stream) { - handler.send('DataLoaded', { - length: stream.bytes.byteLength - }); - }); - }).then(pdfManagerReady, onFailure); - } - - handler.on('GetPage', function wphSetupGetPage(data) { - return pdfManager.getPage(data.pageIndex).then(function (page) { - return Promise.all([pdfManager.ensure(page, 'rotate'), pdfManager.ensure(page, 'ref'), pdfManager.ensure(page, 'userUnit'), pdfManager.ensure(page, 'view')]).then(function (_ref3) { - var _ref4 = _slicedToArray(_ref3, 4), - rotate = _ref4[0], - ref = _ref4[1], - userUnit = _ref4[2], - view = _ref4[3]; - - return { - rotate: rotate, - ref: ref, - userUnit: userUnit, - view: view - }; - }); - }); - }); - handler.on('GetPageIndex', function wphSetupGetPageIndex(data) { - var ref = new _primitives.Ref(data.ref.num, data.ref.gen); - var catalog = pdfManager.pdfDocument.catalog; - return catalog.getPageIndex(ref); - }); - handler.on('GetDestinations', function wphSetupGetDestinations(data) { - return pdfManager.ensureCatalog('destinations'); - }); - handler.on('GetDestination', function wphSetupGetDestination(data) { - return pdfManager.ensureCatalog('getDestination', [data.id]); - }); - handler.on('GetPageLabels', function wphSetupGetPageLabels(data) { - return pdfManager.ensureCatalog('pageLabels'); - }); - handler.on('GetPageMode', function wphSetupGetPageMode(data) { - return pdfManager.ensureCatalog('pageMode'); - }); - handler.on('getOpenActionDestination', function (data) { - return pdfManager.ensureCatalog('openActionDestination'); - }); - handler.on('GetAttachments', function wphSetupGetAttachments(data) { - return pdfManager.ensureCatalog('attachments'); - }); - handler.on('GetJavaScript', function wphSetupGetJavaScript(data) { - return pdfManager.ensureCatalog('javaScript'); - }); - handler.on('GetOutline', function wphSetupGetOutline(data) { - return pdfManager.ensureCatalog('documentOutline'); - }); - handler.on('GetPermissions', function (data) { - return pdfManager.ensureCatalog('permissions'); - }); - handler.on('GetMetadata', function wphSetupGetMetadata(data) { - return Promise.all([pdfManager.ensureDoc('documentInfo'), pdfManager.ensureCatalog('metadata')]); - }); - handler.on('GetData', function wphSetupGetData(data) { - pdfManager.requestLoadedStream(); - return pdfManager.onLoadedStream().then(function (stream) { - return stream.bytes; - }); - }); - handler.on('GetStats', function wphSetupGetStats(data) { - return pdfManager.pdfDocument.xref.stats; - }); - handler.on('GetAnnotations', function (_ref5) { - var pageIndex = _ref5.pageIndex, - intent = _ref5.intent; - return pdfManager.getPage(pageIndex).then(function (page) { - return page.getAnnotationsData(intent); - }); - }); - handler.on('RenderPageRequest', function wphSetupRenderPage(data) { - var pageIndex = data.pageIndex; - pdfManager.getPage(pageIndex).then(function (page) { - var task = new WorkerTask('RenderPageRequest: page ' + pageIndex); - startWorkerTask(task); - var pageNum = pageIndex + 1; - var start = Date.now(); - page.getOperatorList({ - handler: handler, - task: task, - intent: data.intent, - renderInteractiveForms: data.renderInteractiveForms - }).then(function (operatorList) { - finishWorkerTask(task); - (0, _util.info)('page=' + pageNum + ' - getOperatorList: time=' + (Date.now() - start) + 'ms, len=' + operatorList.totalLength); - }, function (e) { - finishWorkerTask(task); - - if (task.terminated) { - return; - } - - handler.send('UnsupportedFeature', { - featureId: _util.UNSUPPORTED_FEATURES.unknown - }); - var minimumStackMessage = 'worker.js: while trying to getPage() and getOperatorList()'; - var wrappedException; - - if (typeof e === 'string') { - wrappedException = { - message: e, - stack: minimumStackMessage - }; - } else if (_typeof(e) === 'object') { - wrappedException = { - message: e.message || e.toString(), - stack: e.stack || minimumStackMessage - }; - } else { - wrappedException = { - message: 'Unknown exception type: ' + _typeof(e), - stack: minimumStackMessage - }; - } - - handler.send('PageError', { - pageNum: pageNum, - error: wrappedException, - intent: data.intent - }); - }); - }); - }, this); - handler.on('GetTextContent', function wphExtractText(data, sink) { - var pageIndex = data.pageIndex; - - sink.onPull = function (desiredSize) {}; - - sink.onCancel = function (reason) {}; - - pdfManager.getPage(pageIndex).then(function (page) { - var task = new WorkerTask('GetTextContent: page ' + pageIndex); - startWorkerTask(task); - var pageNum = pageIndex + 1; - var start = Date.now(); - page.extractTextContent({ - handler: handler, - task: task, - sink: sink, - normalizeWhitespace: data.normalizeWhitespace, - combineTextItems: data.combineTextItems - }).then(function () { - finishWorkerTask(task); - (0, _util.info)('text indexing: page=' + pageNum + ' - time=' + (Date.now() - start) + 'ms'); - sink.close(); - }, function (reason) { - finishWorkerTask(task); - - if (task.terminated) { - return; - } - - sink.error(reason); - throw reason; - }); - }); - }); - handler.on('FontFallback', function (data) { - return pdfManager.fontFallback(data.id, handler); - }); - handler.on('Cleanup', function wphCleanup(data) { - return pdfManager.cleanup(); - }); - handler.on('Terminate', function wphTerminate(data) { - terminated = true; - - if (pdfManager) { - pdfManager.terminate(); - pdfManager = null; - } - - if (cancelXHRs) { - cancelXHRs(); - } - - var waitOn = []; - WorkerTasks.forEach(function (task) { - waitOn.push(task.finished); - task.terminate(); - }); - return Promise.all(waitOn).then(function () { - handler.destroy(); - handler = null; - }); - }); - handler.on('Ready', function wphReady(data) { - setupDoc(docParams); - docParams = null; - }); - return workerHandlerName; - }, - initializeFromPort: function initializeFromPort(port) { - var handler = new _message_handler.MessageHandler('worker', 'main', port); - WorkerMessageHandler.setup(handler, port); - handler.send('ready', null); - } - }; - exports.WorkerMessageHandler = WorkerMessageHandler; - - function isMessagePort(maybePort) { - return typeof maybePort.postMessage === 'function' && 'onmessage' in maybePort; - } - - if (typeof window === 'undefined' && !(0, _is_node.default)() && typeof self !== 'undefined' && isMessagePort(self)) { - WorkerMessageHandler.initializeFromPort(self); - } - - /***/ }), - /* 2 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = __w_extracthighlights_require__(3); - - /***/ }), - /* 3 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - var g = function () { - return this || (typeof self === "undefined" ? "undefined" : _typeof(self)) === "object" && self; - }() || Function("return this")(); - - var hadRuntime = g.regeneratorRuntime && Object.getOwnPropertyNames(g).indexOf("regeneratorRuntime") >= 0; - var oldRuntime = hadRuntime && g.regeneratorRuntime; - g.regeneratorRuntime = undefined; - module.exports = __w_extracthighlights_require__(4); - - if (hadRuntime) { - g.regeneratorRuntime = oldRuntime; - } else { - try { - delete g.regeneratorRuntime; - } catch (e) { - g.regeneratorRuntime = undefined; - } - } - - /***/ }), - /* 4 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - /* WEBPACK VAR INJECTION */(function(module) { - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - !function (global) { - - var Op = Object.prototype; - var hasOwn = Op.hasOwnProperty; - var undefined$1; - var $Symbol = typeof Symbol === "function" ? Symbol : {}; - var iteratorSymbol = $Symbol.iterator || "@@iterator"; - var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; - var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; - var inModule = ( _typeof(module)) === "object"; - var runtime = global.regeneratorRuntime; - - if (runtime) { - if (inModule) { - module.exports = runtime; - } - - return; - } - - runtime = global.regeneratorRuntime = inModule ? module.exports : {}; - - function wrap(innerFn, outerFn, self, tryLocsList) { - var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; - var generator = Object.create(protoGenerator.prototype); - var context = new Context(tryLocsList || []); - generator._invoke = makeInvokeMethod(innerFn, self, context); - return generator; - } - - runtime.wrap = wrap; - - function tryCatch(fn, obj, arg) { - try { - return { - type: "normal", - arg: fn.call(obj, arg) - }; - } catch (err) { - return { - type: "throw", - arg: err - }; - } - } - - var GenStateSuspendedStart = "suspendedStart"; - var GenStateSuspendedYield = "suspendedYield"; - var GenStateExecuting = "executing"; - var GenStateCompleted = "completed"; - var ContinueSentinel = {}; - - function Generator() {} - - function GeneratorFunction() {} - - function GeneratorFunctionPrototype() {} - - var IteratorPrototype = {}; - - IteratorPrototype[iteratorSymbol] = function () { - return this; - }; - - var getProto = Object.getPrototypeOf; - var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); - - if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { - IteratorPrototype = NativeIteratorPrototype; - } - - var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); - GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; - GeneratorFunctionPrototype.constructor = GeneratorFunction; - GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = "GeneratorFunction"; - - function defineIteratorMethods(prototype) { - ["next", "throw", "return"].forEach(function (method) { - prototype[method] = function (arg) { - return this._invoke(method, arg); - }; - }); - } - - runtime.isGeneratorFunction = function (genFun) { - var ctor = typeof genFun === "function" && genFun.constructor; - return ctor ? ctor === GeneratorFunction || (ctor.displayName || ctor.name) === "GeneratorFunction" : false; - }; - - runtime.mark = function (genFun) { - if (Object.setPrototypeOf) { - Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); - } else { - genFun.__proto__ = GeneratorFunctionPrototype; - - if (!(toStringTagSymbol in genFun)) { - genFun[toStringTagSymbol] = "GeneratorFunction"; - } - } - - genFun.prototype = Object.create(Gp); - return genFun; - }; - - runtime.awrap = function (arg) { - return { - __await: arg - }; - }; - - function AsyncIterator(generator) { - function invoke(method, arg, resolve, reject) { - var record = tryCatch(generator[method], generator, arg); - - if (record.type === "throw") { - reject(record.arg); - } else { - var result = record.arg; - var value = result.value; - - if (value && _typeof(value) === "object" && hasOwn.call(value, "__await")) { - return Promise.resolve(value.__await).then(function (value) { - invoke("next", value, resolve, reject); - }, function (err) { - invoke("throw", err, resolve, reject); - }); - } - - return Promise.resolve(value).then(function (unwrapped) { - result.value = unwrapped; - resolve(result); - }, function (error) { - return invoke("throw", error, resolve, reject); - }); - } - } - - var previousPromise; - - function enqueue(method, arg) { - function callInvokeWithMethodAndArg() { - return new Promise(function (resolve, reject) { - invoke(method, arg, resolve, reject); - }); - } - - return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); - } - - this._invoke = enqueue; - } - - defineIteratorMethods(AsyncIterator.prototype); - - AsyncIterator.prototype[asyncIteratorSymbol] = function () { - return this; - }; - - runtime.AsyncIterator = AsyncIterator; - - runtime.async = function (innerFn, outerFn, self, tryLocsList) { - var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList)); - return runtime.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { - return result.done ? result.value : iter.next(); - }); - }; - - function makeInvokeMethod(innerFn, self, context) { - var state = GenStateSuspendedStart; - return function invoke(method, arg) { - if (state === GenStateExecuting) { - throw new Error("Generator is already running"); - } - - if (state === GenStateCompleted) { - if (method === "throw") { - throw arg; - } - - return doneResult(); - } - - context.method = method; - context.arg = arg; - - while (true) { - var delegate = context.delegate; - - if (delegate) { - var delegateResult = maybeInvokeDelegate(delegate, context); - - if (delegateResult) { - if (delegateResult === ContinueSentinel) continue; - return delegateResult; - } - } - - if (context.method === "next") { - context.sent = context._sent = context.arg; - } else if (context.method === "throw") { - if (state === GenStateSuspendedStart) { - state = GenStateCompleted; - throw context.arg; - } - - context.dispatchException(context.arg); - } else if (context.method === "return") { - context.abrupt("return", context.arg); - } - - state = GenStateExecuting; - var record = tryCatch(innerFn, self, context); - - if (record.type === "normal") { - state = context.done ? GenStateCompleted : GenStateSuspendedYield; - - if (record.arg === ContinueSentinel) { - continue; - } - - return { - value: record.arg, - done: context.done - }; - } else if (record.type === "throw") { - state = GenStateCompleted; - context.method = "throw"; - context.arg = record.arg; - } - } - }; - } - - function maybeInvokeDelegate(delegate, context) { - var method = delegate.iterator[context.method]; - - if (method === undefined$1) { - context.delegate = null; - - if (context.method === "throw") { - if (delegate.iterator.return) { - context.method = "return"; - context.arg = undefined$1; - maybeInvokeDelegate(delegate, context); - - if (context.method === "throw") { - return ContinueSentinel; - } - } - - context.method = "throw"; - context.arg = new TypeError("The iterator does not provide a 'throw' method"); - } - - return ContinueSentinel; - } - - var record = tryCatch(method, delegate.iterator, context.arg); - - if (record.type === "throw") { - context.method = "throw"; - context.arg = record.arg; - context.delegate = null; - return ContinueSentinel; - } - - var info = record.arg; - - if (!info) { - context.method = "throw"; - context.arg = new TypeError("iterator result is not an object"); - context.delegate = null; - return ContinueSentinel; - } - - if (info.done) { - context[delegate.resultName] = info.value; - context.next = delegate.nextLoc; - - if (context.method !== "return") { - context.method = "next"; - context.arg = undefined$1; - } - } else { - return info; - } - - context.delegate = null; - return ContinueSentinel; - } - - defineIteratorMethods(Gp); - Gp[toStringTagSymbol] = "Generator"; - - Gp[iteratorSymbol] = function () { - return this; - }; - - Gp.toString = function () { - return "[object Generator]"; - }; - - function pushTryEntry(locs) { - var entry = { - tryLoc: locs[0] - }; - - if (1 in locs) { - entry.catchLoc = locs[1]; - } - - if (2 in locs) { - entry.finallyLoc = locs[2]; - entry.afterLoc = locs[3]; - } - - this.tryEntries.push(entry); - } - - function resetTryEntry(entry) { - var record = entry.completion || {}; - record.type = "normal"; - delete record.arg; - entry.completion = record; - } - - function Context(tryLocsList) { - this.tryEntries = [{ - tryLoc: "root" - }]; - tryLocsList.forEach(pushTryEntry, this); - this.reset(true); - } - - runtime.keys = function (object) { - var keys = []; - - for (var key in object) { - keys.push(key); - } - - keys.reverse(); - return function next() { - while (keys.length) { - var key = keys.pop(); - - if (key in object) { - next.value = key; - next.done = false; - return next; - } - } - - next.done = true; - return next; - }; - }; - - function values(iterable) { - if (iterable) { - var iteratorMethod = iterable[iteratorSymbol]; - - if (iteratorMethod) { - return iteratorMethod.call(iterable); - } - - if (typeof iterable.next === "function") { - return iterable; - } - - if (!isNaN(iterable.length)) { - var i = -1, - next = function next() { - while (++i < iterable.length) { - if (hasOwn.call(iterable, i)) { - next.value = iterable[i]; - next.done = false; - return next; - } - } - - next.value = undefined$1; - next.done = true; - return next; - }; - - return next.next = next; - } - } - - return { - next: doneResult - }; - } - - runtime.values = values; - - function doneResult() { - return { - value: undefined$1, - done: true - }; - } - - Context.prototype = { - constructor: Context, - reset: function reset(skipTempReset) { - this.prev = 0; - this.next = 0; - this.sent = this._sent = undefined$1; - this.done = false; - this.delegate = null; - this.method = "next"; - this.arg = undefined$1; - this.tryEntries.forEach(resetTryEntry); - - if (!skipTempReset) { - for (var name in this) { - if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) { - this[name] = undefined$1; - } - } - } - }, - stop: function stop() { - this.done = true; - var rootEntry = this.tryEntries[0]; - var rootRecord = rootEntry.completion; - - if (rootRecord.type === "throw") { - throw rootRecord.arg; - } - - return this.rval; - }, - dispatchException: function dispatchException(exception) { - if (this.done) { - throw exception; - } - - var context = this; - - function handle(loc, caught) { - record.type = "throw"; - record.arg = exception; - context.next = loc; - - if (caught) { - context.method = "next"; - context.arg = undefined$1; - } - - return !!caught; - } - - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - var record = entry.completion; - - if (entry.tryLoc === "root") { - return handle("end"); - } - - if (entry.tryLoc <= this.prev) { - var hasCatch = hasOwn.call(entry, "catchLoc"); - var hasFinally = hasOwn.call(entry, "finallyLoc"); - - if (hasCatch && hasFinally) { - if (this.prev < entry.catchLoc) { - return handle(entry.catchLoc, true); - } else if (this.prev < entry.finallyLoc) { - return handle(entry.finallyLoc); - } - } else if (hasCatch) { - if (this.prev < entry.catchLoc) { - return handle(entry.catchLoc, true); - } - } else if (hasFinally) { - if (this.prev < entry.finallyLoc) { - return handle(entry.finallyLoc); - } - } else { - throw new Error("try statement without catch or finally"); - } - } - } - }, - abrupt: function abrupt(type, arg) { - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - - if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { - var finallyEntry = entry; - break; - } - } - - if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) { - finallyEntry = null; - } - - var record = finallyEntry ? finallyEntry.completion : {}; - record.type = type; - record.arg = arg; - - if (finallyEntry) { - this.method = "next"; - this.next = finallyEntry.finallyLoc; - return ContinueSentinel; - } - - return this.complete(record); - }, - complete: function complete(record, afterLoc) { - if (record.type === "throw") { - throw record.arg; - } - - if (record.type === "break" || record.type === "continue") { - this.next = record.arg; - } else if (record.type === "return") { - this.rval = this.arg = record.arg; - this.method = "return"; - this.next = "end"; - } else if (record.type === "normal" && afterLoc) { - this.next = afterLoc; - } - - return ContinueSentinel; - }, - finish: function finish(finallyLoc) { - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - - if (entry.finallyLoc === finallyLoc) { - this.complete(entry.completion, entry.afterLoc); - resetTryEntry(entry); - return ContinueSentinel; - } - } - }, - "catch": function _catch(tryLoc) { - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - - if (entry.tryLoc === tryLoc) { - var record = entry.completion; - - if (record.type === "throw") { - var thrown = record.arg; - resetTryEntry(entry); - } - - return thrown; - } - } - - throw new Error("illegal catch attempt"); - }, - delegateYield: function delegateYield(iterable, resultName, nextLoc) { - this.delegate = { - iterator: values(iterable), - resultName: resultName, - nextLoc: nextLoc - }; - - if (this.method === "next") { - this.arg = undefined$1; - } - - return ContinueSentinel; - } - }; - }(function () { - return this || (typeof self === "undefined" ? "undefined" : _typeof(self)) === "object" && self; - }() || Function("return this")()); - /* WEBPACK VAR INJECTION */}.call(this, __w_extracthighlights_require__(5)(module))); - - /***/ }), - /* 5 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = function (module) { - if (!module.webpackPolyfill) { - module.deprecate = function () {}; - - module.paths = []; - if (!module.children) module.children = []; - Object.defineProperty(module, "loaded", { - enumerable: true, - get: function get() { - return module.l; - } - }); - Object.defineProperty(module, "id", { - enumerable: true, - get: function get() { - return module.i; - } - }); - module.webpackPolyfill = 1; - } - - return module; - }; - - /***/ }), - /* 6 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.toRomanNumerals = toRomanNumerals; - exports.arrayByteLength = arrayByteLength; - exports.arraysToBytes = arraysToBytes; - exports.assert = assert; - exports.bytesToString = bytesToString; - exports.createPromiseCapability = createPromiseCapability; - exports.deprecated = deprecated; - exports.getInheritableProperty = getInheritableProperty; - exports.getLookupTableFactory = getLookupTableFactory; - exports.getVerbosityLevel = getVerbosityLevel; - exports.info = info; - exports.isArrayBuffer = isArrayBuffer; - exports.isBool = isBool; - exports.isEmptyObj = isEmptyObj; - exports.isNum = isNum; - exports.isString = isString; - exports.isSpace = isSpace; - exports.isSameOrigin = isSameOrigin; - exports.createValidAbsoluteUrl = createValidAbsoluteUrl; - exports.isLittleEndian = isLittleEndian; - exports.isEvalSupported = isEvalSupported; - exports.log2 = log2; - exports.readInt8 = readInt8; - exports.readUint16 = readUint16; - exports.readUint32 = readUint32; - exports.removeNullCharacters = removeNullCharacters; - exports.setVerbosityLevel = setVerbosityLevel; - exports.shadow = shadow; - exports.string32 = string32; - exports.stringToBytes = stringToBytes; - exports.stringToPDFString = stringToPDFString; - exports.stringToUTF8String = stringToUTF8String; - exports.utf8StringToString = utf8StringToString; - exports.warn = warn; - exports.unreachable = unreachable; - Object.defineProperty(exports, "ReadableStream", { - enumerable: true, - get: function get() { - return _streams_polyfill.ReadableStream; - } - }); - Object.defineProperty(exports, "URL", { - enumerable: true, - get: function get() { - return _url_polyfill.URL; - } - }); - exports.createObjectURL = exports.FormatError = exports.XRefParseException = exports.XRefEntryException = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.NativeImageDecoding = exports.MissingPDFException = exports.MissingDataException = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = void 0; - - __w_extracthighlights_require__(7); - - var _streams_polyfill = __w_extracthighlights_require__(147); - - var _url_polyfill = __w_extracthighlights_require__(149); - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; - exports.IDENTITY_MATRIX = IDENTITY_MATRIX; - var FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; - exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX; - var NativeImageDecoding = { - NONE: 'none', - DECODE: 'decode', - DISPLAY: 'display' - }; - exports.NativeImageDecoding = NativeImageDecoding; - var PermissionFlag = { - PRINT: 0x04, - MODIFY_CONTENTS: 0x08, - COPY: 0x10, - MODIFY_ANNOTATIONS: 0x20, - FILL_INTERACTIVE_FORMS: 0x100, - COPY_FOR_ACCESSIBILITY: 0x200, - ASSEMBLE: 0x400, - PRINT_HIGH_QUALITY: 0x800 - }; - exports.PermissionFlag = PermissionFlag; - var TextRenderingMode = { - FILL: 0, - STROKE: 1, - FILL_STROKE: 2, - INVISIBLE: 3, - FILL_ADD_TO_PATH: 4, - STROKE_ADD_TO_PATH: 5, - FILL_STROKE_ADD_TO_PATH: 6, - ADD_TO_PATH: 7, - FILL_STROKE_MASK: 3, - ADD_TO_PATH_FLAG: 4 - }; - exports.TextRenderingMode = TextRenderingMode; - var ImageKind = { - GRAYSCALE_1BPP: 1, - RGB_24BPP: 2, - RGBA_32BPP: 3 - }; - exports.ImageKind = ImageKind; - var AnnotationType = { - TEXT: 1, - LINK: 2, - FREETEXT: 3, - LINE: 4, - SQUARE: 5, - CIRCLE: 6, - POLYGON: 7, - POLYLINE: 8, - HIGHLIGHT: 9, - UNDERLINE: 10, - SQUIGGLY: 11, - STRIKEOUT: 12, - STAMP: 13, - CARET: 14, - INK: 15, - POPUP: 16, - FILEATTACHMENT: 17, - SOUND: 18, - MOVIE: 19, - WIDGET: 20, - SCREEN: 21, - PRINTERMARK: 22, - TRAPNET: 23, - WATERMARK: 24, - THREED: 25, - REDACT: 26 - }; - exports.AnnotationType = AnnotationType; - var AnnotationFlag = { - INVISIBLE: 0x01, - HIDDEN: 0x02, - PRINT: 0x04, - NOZOOM: 0x08, - NOROTATE: 0x10, - NOVIEW: 0x20, - READONLY: 0x40, - LOCKED: 0x80, - TOGGLENOVIEW: 0x100, - LOCKEDCONTENTS: 0x200 - }; - exports.AnnotationFlag = AnnotationFlag; - var AnnotationFieldFlag = { - READONLY: 0x0000001, - REQUIRED: 0x0000002, - NOEXPORT: 0x0000004, - MULTILINE: 0x0001000, - PASSWORD: 0x0002000, - NOTOGGLETOOFF: 0x0004000, - RADIO: 0x0008000, - PUSHBUTTON: 0x0010000, - COMBO: 0x0020000, - EDIT: 0x0040000, - SORT: 0x0080000, - FILESELECT: 0x0100000, - MULTISELECT: 0x0200000, - DONOTSPELLCHECK: 0x0400000, - DONOTSCROLL: 0x0800000, - COMB: 0x1000000, - RICHTEXT: 0x2000000, - RADIOSINUNISON: 0x2000000, - COMMITONSELCHANGE: 0x4000000 - }; - exports.AnnotationFieldFlag = AnnotationFieldFlag; - var AnnotationBorderStyleType = { - SOLID: 1, - DASHED: 2, - BEVELED: 3, - INSET: 4, - UNDERLINE: 5 - }; - exports.AnnotationBorderStyleType = AnnotationBorderStyleType; - var StreamType = { - UNKNOWN: 0, - FLATE: 1, - LZW: 2, - DCT: 3, - JPX: 4, - JBIG: 5, - A85: 6, - AHX: 7, - CCF: 8, - RL: 9 - }; - exports.StreamType = StreamType; - var FontType = { - UNKNOWN: 0, - TYPE1: 1, - TYPE1C: 2, - CIDFONTTYPE0: 3, - CIDFONTTYPE0C: 4, - TRUETYPE: 5, - CIDFONTTYPE2: 6, - TYPE3: 7, - OPENTYPE: 8, - TYPE0: 9, - MMTYPE1: 10 - }; - exports.FontType = FontType; - var VerbosityLevel = { - ERRORS: 0, - WARNINGS: 1, - INFOS: 5 - }; - exports.VerbosityLevel = VerbosityLevel; - var CMapCompressionType = { - NONE: 0, - BINARY: 1, - STREAM: 2 - }; - exports.CMapCompressionType = CMapCompressionType; - var OPS = { - dependency: 1, - setLineWidth: 2, - setLineCap: 3, - setLineJoin: 4, - setMiterLimit: 5, - setDash: 6, - setRenderingIntent: 7, - setFlatness: 8, - setGState: 9, - save: 10, - restore: 11, - transform: 12, - moveTo: 13, - lineTo: 14, - curveTo: 15, - curveTo2: 16, - curveTo3: 17, - closePath: 18, - rectangle: 19, - stroke: 20, - closeStroke: 21, - fill: 22, - eoFill: 23, - fillStroke: 24, - eoFillStroke: 25, - closeFillStroke: 26, - closeEOFillStroke: 27, - endPath: 28, - clip: 29, - eoClip: 30, - beginText: 31, - endText: 32, - setCharSpacing: 33, - setWordSpacing: 34, - setHScale: 35, - setLeading: 36, - setFont: 37, - setTextRenderingMode: 38, - setTextRise: 39, - moveText: 40, - setLeadingMoveText: 41, - setTextMatrix: 42, - nextLine: 43, - showText: 44, - showSpacedText: 45, - nextLineShowText: 46, - nextLineSetSpacingShowText: 47, - setCharWidth: 48, - setCharWidthAndBounds: 49, - setStrokeColorSpace: 50, - setFillColorSpace: 51, - setStrokeColor: 52, - setStrokeColorN: 53, - setFillColor: 54, - setFillColorN: 55, - setStrokeGray: 56, - setFillGray: 57, - setStrokeRGBColor: 58, - setFillRGBColor: 59, - setStrokeCMYKColor: 60, - setFillCMYKColor: 61, - shadingFill: 62, - beginInlineImage: 63, - beginImageData: 64, - endInlineImage: 65, - paintXObject: 66, - markPoint: 67, - markPointProps: 68, - beginMarkedContent: 69, - beginMarkedContentProps: 70, - endMarkedContent: 71, - beginCompat: 72, - endCompat: 73, - paintFormXObjectBegin: 74, - paintFormXObjectEnd: 75, - beginGroup: 76, - endGroup: 77, - beginAnnotations: 78, - endAnnotations: 79, - beginAnnotation: 80, - endAnnotation: 81, - paintJpegXObject: 82, - paintImageMaskXObject: 83, - paintImageMaskXObjectGroup: 84, - paintImageXObject: 85, - paintInlineImageXObject: 86, - paintInlineImageXObjectGroup: 87, - paintImageXObjectRepeat: 88, - paintImageMaskXObjectRepeat: 89, - paintSolidColorImageMask: 90, - constructPath: 91 - }; - exports.OPS = OPS; - var UNSUPPORTED_FEATURES = { - unknown: 'unknown', - forms: 'forms', - javaScript: 'javaScript', - smask: 'smask', - shadingPattern: 'shadingPattern', - font: 'font' - }; - exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES; - var PasswordResponses = { - NEED_PASSWORD: 1, - INCORRECT_PASSWORD: 2 - }; - exports.PasswordResponses = PasswordResponses; - var verbosity = VerbosityLevel.WARNINGS; - - function setVerbosityLevel(level) { - if (Number.isInteger(level)) { - verbosity = level; - } - } - - function getVerbosityLevel() { - return verbosity; - } - - function info(msg) { - if (verbosity >= VerbosityLevel.INFOS) { - console.log('Info: ' + msg); - } - } - - function warn(msg) { - if (verbosity >= VerbosityLevel.WARNINGS) { - console.log('Warning: ' + msg); - } - } - - function deprecated(details) { - console.log('Deprecated API usage: ' + details); - } - - function unreachable(msg) { - throw new Error(msg); - } - - function assert(cond, msg) { - if (!cond) { - unreachable(msg); - } - } - - function isSameOrigin(baseUrl, otherUrl) { - try { - var base = new _url_polyfill.URL(baseUrl); - - if (!base.origin || base.origin === 'null') { - return false; - } - } catch (e) { - return false; - } - - var other = new _url_polyfill.URL(otherUrl, base); - return base.origin === other.origin; - } - - function _isValidProtocol(url) { - if (!url) { - return false; - } - - switch (url.protocol) { - case 'http:': - case 'https:': - case 'ftp:': - case 'mailto:': - case 'tel:': - return true; - - default: - return false; - } - } - - function createValidAbsoluteUrl(url, baseUrl) { - if (!url) { - return null; - } - - try { - var absoluteUrl = baseUrl ? new _url_polyfill.URL(url, baseUrl) : new _url_polyfill.URL(url); - - if (_isValidProtocol(absoluteUrl)) { - return absoluteUrl; - } - } catch (ex) {} - - return null; - } - - function shadow(obj, prop, value) { - Object.defineProperty(obj, prop, { - value: value, - enumerable: true, - configurable: true, - writable: false - }); - return value; - } - - function getLookupTableFactory(initializer) { - var lookup; - return function () { - if (initializer) { - lookup = Object.create(null); - initializer(lookup); - initializer = null; - } - - return lookup; - }; - } - - var PasswordException = function PasswordExceptionClosure() { - function PasswordException(msg, code) { - this.name = 'PasswordException'; - this.message = msg; - this.code = code; - } - - PasswordException.prototype = new Error(); - PasswordException.constructor = PasswordException; - return PasswordException; - }(); - - exports.PasswordException = PasswordException; - - var UnknownErrorException = function UnknownErrorExceptionClosure() { - function UnknownErrorException(msg, details) { - this.name = 'UnknownErrorException'; - this.message = msg; - this.details = details; - } - - UnknownErrorException.prototype = new Error(); - UnknownErrorException.constructor = UnknownErrorException; - return UnknownErrorException; - }(); - - exports.UnknownErrorException = UnknownErrorException; - - var InvalidPDFException = function InvalidPDFExceptionClosure() { - function InvalidPDFException(msg) { - this.name = 'InvalidPDFException'; - this.message = msg; - } - - InvalidPDFException.prototype = new Error(); - InvalidPDFException.constructor = InvalidPDFException; - return InvalidPDFException; - }(); - - exports.InvalidPDFException = InvalidPDFException; - - var MissingPDFException = function MissingPDFExceptionClosure() { - function MissingPDFException(msg) { - this.name = 'MissingPDFException'; - this.message = msg; - } - - MissingPDFException.prototype = new Error(); - MissingPDFException.constructor = MissingPDFException; - return MissingPDFException; - }(); - - exports.MissingPDFException = MissingPDFException; - - var UnexpectedResponseException = function UnexpectedResponseExceptionClosure() { - function UnexpectedResponseException(msg, status) { - this.name = 'UnexpectedResponseException'; - this.message = msg; - this.status = status; - } - - UnexpectedResponseException.prototype = new Error(); - UnexpectedResponseException.constructor = UnexpectedResponseException; - return UnexpectedResponseException; - }(); - - exports.UnexpectedResponseException = UnexpectedResponseException; - - var MissingDataException = function MissingDataExceptionClosure() { - function MissingDataException(begin, end) { - this.begin = begin; - this.end = end; - this.message = 'Missing data [' + begin + ', ' + end + ')'; - } - - MissingDataException.prototype = new Error(); - MissingDataException.prototype.name = 'MissingDataException'; - MissingDataException.constructor = MissingDataException; - return MissingDataException; - }(); - - exports.MissingDataException = MissingDataException; - - var XRefEntryException = function XRefEntryExceptionClosure() { - function XRefEntryException(msg) { - this.message = msg; - } - - XRefEntryException.prototype = new Error(); - XRefEntryException.prototype.name = 'XRefEntryException'; - XRefEntryException.constructor = XRefEntryException; - return XRefEntryException; - }(); - - exports.XRefEntryException = XRefEntryException; - - var XRefParseException = function XRefParseExceptionClosure() { - function XRefParseException(msg) { - this.message = msg; - } - - XRefParseException.prototype = new Error(); - XRefParseException.prototype.name = 'XRefParseException'; - XRefParseException.constructor = XRefParseException; - return XRefParseException; - }(); - - exports.XRefParseException = XRefParseException; - - var FormatError = function FormatErrorClosure() { - function FormatError(msg) { - this.message = msg; - } - - FormatError.prototype = new Error(); - FormatError.prototype.name = 'FormatError'; - FormatError.constructor = FormatError; - return FormatError; - }(); - - exports.FormatError = FormatError; - - var AbortException = function AbortExceptionClosure() { - function AbortException(msg) { - this.name = 'AbortException'; - this.message = msg; - } - - AbortException.prototype = new Error(); - AbortException.constructor = AbortException; - return AbortException; - }(); - - exports.AbortException = AbortException; - var NullCharactersRegExp = /\x00/g; - - function removeNullCharacters(str) { - if (typeof str !== 'string') { - warn('The argument for removeNullCharacters must be a string.'); - return str; - } - - return str.replace(NullCharactersRegExp, ''); - } - - function bytesToString(bytes) { - assert(bytes !== null && _typeof(bytes) === 'object' && bytes.length !== undefined, 'Invalid argument for bytesToString'); - var length = bytes.length; - var MAX_ARGUMENT_COUNT = 8192; - - if (length < MAX_ARGUMENT_COUNT) { - return String.fromCharCode.apply(null, bytes); - } - - var strBuf = []; - - for (var i = 0; i < length; i += MAX_ARGUMENT_COUNT) { - var chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); - var chunk = bytes.subarray(i, chunkEnd); - strBuf.push(String.fromCharCode.apply(null, chunk)); - } - - return strBuf.join(''); - } - - function stringToBytes(str) { - assert(typeof str === 'string', 'Invalid argument for stringToBytes'); - var length = str.length; - var bytes = new Uint8Array(length); - - for (var i = 0; i < length; ++i) { - bytes[i] = str.charCodeAt(i) & 0xFF; - } - - return bytes; - } - - function arrayByteLength(arr) { - if (arr.length !== undefined) { - return arr.length; - } - - assert(arr.byteLength !== undefined); - return arr.byteLength; - } - - function arraysToBytes(arr) { - if (arr.length === 1 && arr[0] instanceof Uint8Array) { - return arr[0]; - } - - var resultLength = 0; - var i, - ii = arr.length; - var item, itemLength; - - for (i = 0; i < ii; i++) { - item = arr[i]; - itemLength = arrayByteLength(item); - resultLength += itemLength; - } - - var pos = 0; - var data = new Uint8Array(resultLength); - - for (i = 0; i < ii; i++) { - item = arr[i]; - - if (!(item instanceof Uint8Array)) { - if (typeof item === 'string') { - item = stringToBytes(item); - } else { - item = new Uint8Array(item); - } - } - - itemLength = item.byteLength; - data.set(item, pos); - pos += itemLength; - } - - return data; - } - - function string32(value) { - return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); - } - - function log2(x) { - if (x <= 0) { - return 0; - } - - return Math.ceil(Math.log2(x)); - } - - function readInt8(data, start) { - return data[start] << 24 >> 24; - } - - function readUint16(data, offset) { - return data[offset] << 8 | data[offset + 1]; - } - - function readUint32(data, offset) { - return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0; - } - - function isLittleEndian() { - var buffer8 = new Uint8Array(4); - buffer8[0] = 1; - var view32 = new Uint32Array(buffer8.buffer, 0, 1); - return view32[0] === 1; - } - - function isEvalSupported() { - try { - new Function(''); - return true; - } catch (e) { - return false; - } - } - - function getInheritableProperty(_ref) { - var dict = _ref.dict, - key = _ref.key, - _ref$getArray = _ref.getArray, - getArray = _ref$getArray === void 0 ? false : _ref$getArray, - _ref$stopWhenFound = _ref.stopWhenFound, - stopWhenFound = _ref$stopWhenFound === void 0 ? true : _ref$stopWhenFound; - var LOOP_LIMIT = 100; - var loopCount = 0; - var values; - - while (dict) { - var value = getArray ? dict.getArray(key) : dict.get(key); - - if (value !== undefined) { - if (stopWhenFound) { - return value; - } - - if (!values) { - values = []; - } - - values.push(value); - } - - if (++loopCount > LOOP_LIMIT) { - warn("getInheritableProperty: maximum loop count exceeded for \"".concat(key, "\"")); - break; - } - - dict = dict.get('Parent'); - } - - return values; - } - - var Util = function UtilClosure() { - function Util() {} - - var rgbBuf = ['rgb(', 0, ',', 0, ',', 0, ')']; - - Util.makeCssRgb = function Util_makeCssRgb(r, g, b) { - rgbBuf[1] = r; - rgbBuf[3] = g; - rgbBuf[5] = b; - return rgbBuf.join(''); - }; - - Util.transform = function Util_transform(m1, m2) { - return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]]; - }; - - Util.applyTransform = function Util_applyTransform(p, m) { - var xt = p[0] * m[0] + p[1] * m[2] + m[4]; - var yt = p[0] * m[1] + p[1] * m[3] + m[5]; - return [xt, yt]; - }; - - Util.applyInverseTransform = function Util_applyInverseTransform(p, m) { - var d = m[0] * m[3] - m[1] * m[2]; - var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; - var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; - return [xt, yt]; - }; - - Util.getAxialAlignedBoundingBox = function Util_getAxialAlignedBoundingBox(r, m) { - var p1 = Util.applyTransform(r, m); - var p2 = Util.applyTransform(r.slice(2, 4), m); - var p3 = Util.applyTransform([r[0], r[3]], m); - var p4 = Util.applyTransform([r[2], r[1]], m); - return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])]; - }; - - Util.inverseTransform = function Util_inverseTransform(m) { - var d = m[0] * m[3] - m[1] * m[2]; - return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d]; - }; - - Util.apply3dTransform = function Util_apply3dTransform(m, v) { - return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]]; - }; - - Util.singularValueDecompose2dScale = function Util_singularValueDecompose2dScale(m) { - var transpose = [m[0], m[2], m[1], m[3]]; - var a = m[0] * transpose[0] + m[1] * transpose[2]; - var b = m[0] * transpose[1] + m[1] * transpose[3]; - var c = m[2] * transpose[0] + m[3] * transpose[2]; - var d = m[2] * transpose[1] + m[3] * transpose[3]; - var first = (a + d) / 2; - var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2; - var sx = first + second || 1; - var sy = first - second || 1; - return [Math.sqrt(sx), Math.sqrt(sy)]; - }; - - Util.normalizeRect = function Util_normalizeRect(rect) { - var r = rect.slice(0); - - if (rect[0] > rect[2]) { - r[0] = rect[2]; - r[2] = rect[0]; - } - - if (rect[1] > rect[3]) { - r[1] = rect[3]; - r[3] = rect[1]; - } - - return r; - }; - - Util.intersect = function Util_intersect(rect1, rect2) { - function compare(a, b) { - return a - b; - } - - var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare), - orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare), - result = []; - rect1 = Util.normalizeRect(rect1); - rect2 = Util.normalizeRect(rect2); - - if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) { - result[0] = orderedX[1]; - result[2] = orderedX[2]; - } else { - return false; - } - - if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) { - result[1] = orderedY[1]; - result[3] = orderedY[2]; - } else { - return false; - } - - return result; - }; - - return Util; - }(); - - exports.Util = Util; - var ROMAN_NUMBER_MAP = ['', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM', '', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC', '', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX']; - - function toRomanNumerals(number) { - var lowerCase = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - assert(Number.isInteger(number) && number > 0, 'The number should be a positive integer.'); - var pos, - romanBuf = []; - - while (number >= 1000) { - number -= 1000; - romanBuf.push('M'); - } - - pos = number / 100 | 0; - number %= 100; - romanBuf.push(ROMAN_NUMBER_MAP[pos]); - pos = number / 10 | 0; - number %= 10; - romanBuf.push(ROMAN_NUMBER_MAP[10 + pos]); - romanBuf.push(ROMAN_NUMBER_MAP[20 + number]); - var romanStr = romanBuf.join(''); - return lowerCase ? romanStr.toLowerCase() : romanStr; - } - - var PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C, 0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160, 0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC]; - - function stringToPDFString(str) { - var i, - n = str.length, - strBuf = []; - - if (str[0] === '\xFE' && str[1] === '\xFF') { - for (i = 2; i < n; i += 2) { - strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1))); - } - } else { - for (i = 0; i < n; ++i) { - var code = PDFStringTranslateTable[str.charCodeAt(i)]; - strBuf.push(code ? String.fromCharCode(code) : str.charAt(i)); - } - } - - return strBuf.join(''); - } - - function stringToUTF8String(str) { - return decodeURIComponent(escape(str)); - } - - function utf8StringToString(str) { - return unescape(encodeURIComponent(str)); - } - - function isEmptyObj(obj) { - for (var key in obj) { - return false; - } - - return true; - } - - function isBool(v) { - return typeof v === 'boolean'; - } - - function isNum(v) { - return typeof v === 'number'; - } - - function isString(v) { - return typeof v === 'string'; - } - - function isArrayBuffer(v) { - return _typeof(v) === 'object' && v !== null && v.byteLength !== undefined; - } - - function isSpace(ch) { - return ch === 0x20 || ch === 0x09 || ch === 0x0D || ch === 0x0A; - } - - function createPromiseCapability() { - var capability = Object.create(null); - var isSettled = false; - Object.defineProperty(capability, 'settled', { - get: function get() { - return isSettled; - } - }); - capability.promise = new Promise(function (resolve, reject) { - capability.resolve = function (data) { - isSettled = true; - resolve(data); - }; - - capability.reject = function (reason) { - isSettled = true; - reject(reason); - }; - }); - return capability; - } - - var createObjectURL = function createObjectURLClosure() { - var digits = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; - return function createObjectURL(data, contentType) { - var forceDataSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - if (!forceDataSchema && _url_polyfill.URL.createObjectURL) { - var blob = new Blob([data], { - type: contentType - }); - return _url_polyfill.URL.createObjectURL(blob); - } - - var buffer = 'data:' + contentType + ';base64,'; - - for (var i = 0, ii = data.length; i < ii; i += 3) { - var b1 = data[i] & 0xFF; - var b2 = data[i + 1] & 0xFF; - var b3 = data[i + 2] & 0xFF; - var d1 = b1 >> 2, - d2 = (b1 & 3) << 4 | b2 >> 4; - var d3 = i + 1 < ii ? (b2 & 0xF) << 2 | b3 >> 6 : 64; - var d4 = i + 2 < ii ? b3 & 0x3F : 64; - buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4]; - } - - return buffer; - }; - }(); - - exports.createObjectURL = createObjectURL; - - /***/ }), - /* 7 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - var globalScope = __w_extracthighlights_require__(8); - - if (!globalScope._extracthighlightsCompatibilityChecked) { - globalScope._extracthighlightsCompatibilityChecked = true; - - var isNodeJS = __w_extracthighlights_require__(9); - - var hasDOM = (typeof window === "undefined" ? "undefined" : _typeof(window)) === 'object' && (typeof document === "undefined" ? "undefined" : _typeof(document)) === 'object'; - - (function checkNodeBtoa() { - if (globalScope.btoa || !isNodeJS()) { - return; - } - - globalScope.btoa = function (chars) { - return Buffer.from(chars, 'binary').toString('base64'); - }; - })(); - - (function checkNodeAtob() { - if (globalScope.atob || !isNodeJS()) { - return; - } - - globalScope.atob = function (input) { - return Buffer.from(input, 'base64').toString('binary'); - }; - })(); - - (function checkChildNodeRemove() { - if (!hasDOM) { - return; - } - - if (typeof Element.prototype.remove !== 'undefined') { - return; - } - - Element.prototype.remove = function () { - if (this.parentNode) { - this.parentNode.removeChild(this); - } - }; - })(); - - (function checkDOMTokenListAddRemove() { - if (!hasDOM || isNodeJS()) { - return; - } - - var div = document.createElement('div'); - div.classList.add('testOne', 'testTwo'); - - if (div.classList.contains('testOne') === true && div.classList.contains('testTwo') === true) { - return; - } - - var OriginalDOMTokenListAdd = DOMTokenList.prototype.add; - var OriginalDOMTokenListRemove = DOMTokenList.prototype.remove; - - DOMTokenList.prototype.add = function () { - for (var _len = arguments.length, tokens = new Array(_len), _key = 0; _key < _len; _key++) { - tokens[_key] = arguments[_key]; - } - - for (var _i = 0; _i < tokens.length; _i++) { - var token = tokens[_i]; - OriginalDOMTokenListAdd.call(this, token); - } - }; - - DOMTokenList.prototype.remove = function () { - for (var _len2 = arguments.length, tokens = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - tokens[_key2] = arguments[_key2]; - } - - for (var _i2 = 0; _i2 < tokens.length; _i2++) { - var token = tokens[_i2]; - OriginalDOMTokenListRemove.call(this, token); - } - }; - })(); - - (function checkDOMTokenListToggle() { - if (!hasDOM || isNodeJS()) { - return; - } - - var div = document.createElement('div'); - - if (div.classList.toggle('test', 0) === false) { - return; - } - - DOMTokenList.prototype.toggle = function (token) { - var force = arguments.length > 1 ? !!arguments[1] : !this.contains(token); - return this[force ? 'add' : 'remove'](token), force; - }; - })(); - - (function checkStringStartsWith() { - if (String.prototype.startsWith) { - return; - } - - __w_extracthighlights_require__(10); - })(); - - (function checkStringEndsWith() { - if (String.prototype.endsWith) { - return; - } - - __w_extracthighlights_require__(40); - })(); - - (function checkStringIncludes() { - if (String.prototype.includes) { - return; - } - - __w_extracthighlights_require__(42); - })(); - - (function checkArrayIncludes() { - if (Array.prototype.includes) { - return; - } - - __w_extracthighlights_require__(44); - })(); - - (function checkArrayFrom() { - if (Array.from) { - return; - } - - __w_extracthighlights_require__(51); - })(); - - (function checkObjectAssign() { - if (Object.assign) { - return; - } - - __w_extracthighlights_require__(74); - })(); - - (function checkMathLog2() { - if (Math.log2) { - return; - } - - Math.log2 = __w_extracthighlights_require__(79); - })(); - - (function checkNumberIsNaN() { - if (Number.isNaN) { - return; - } - - Number.isNaN = __w_extracthighlights_require__(81); - })(); - - (function checkNumberIsInteger() { - if (Number.isInteger) { - return; - } - - Number.isInteger = __w_extracthighlights_require__(83); - })(); - - (function checkPromise() { - if (globalScope.Promise && globalScope.Promise.prototype && globalScope.Promise.prototype.finally) { - return; - } - - globalScope.Promise = __w_extracthighlights_require__(86); - })(); - - (function checkWeakMap() { - if (globalScope.WeakMap) { - return; - } - - globalScope.WeakMap = __w_extracthighlights_require__(106); - })(); - - (function checkWeakSet() { - if (globalScope.WeakSet) { - return; - } - - globalScope.WeakSet = __w_extracthighlights_require__(123); - })(); - - (function checkStringCodePointAt() { - if (String.codePointAt) { - return; - } - - String.codePointAt = __w_extracthighlights_require__(127); - })(); - - (function checkStringFromCodePoint() { - if (String.fromCodePoint) { - return; - } - - String.fromCodePoint = __w_extracthighlights_require__(129); - })(); - - (function checkSymbol() { - if (globalScope.Symbol) { - return; - } - - __w_extracthighlights_require__(131); - })(); - - (function checkStringPadStart() { - if (String.prototype.padStart) { - return; - } - - __w_extracthighlights_require__(138); - })(); - - (function checkStringPadEnd() { - if (String.prototype.padEnd) { - return; - } - - __w_extracthighlights_require__(142); - })(); - - (function checkObjectValues() { - if (Object.values) { - return; - } - - Object.values = __w_extracthighlights_require__(144); - })(); - } - - /***/ }), - /* 8 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = typeof window !== 'undefined' && window.Math === Math ? window : typeof commonjsGlobal !== 'undefined' && commonjsGlobal.Math === Math ? commonjsGlobal : typeof self !== 'undefined' && self.Math === Math ? self : {}; - - /***/ }), - /* 9 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - module.exports = function isNodeJS() { - return (typeof process === "undefined" ? "undefined" : _typeof(process)) === 'object' && process + '' === '[object process]' && !process.versions['nw']; - }; - - /***/ }), - /* 10 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(11); - - module.exports = __w_extracthighlights_require__(14).String.startsWith; - - /***/ }), - /* 11 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(12); - - var toLength = __w_extracthighlights_require__(30); - - var context = __w_extracthighlights_require__(32); - - var STARTS_WITH = 'startsWith'; - var $startsWith = ''[STARTS_WITH]; - $export($export.P + $export.F * __w_extracthighlights_require__(39)(STARTS_WITH), 'String', { - startsWith: function startsWith(searchString) { - var that = context(this, searchString, STARTS_WITH); - var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length)); - var search = String(searchString); - return $startsWith ? $startsWith.call(that, search, index) : that.slice(index, index + search.length) === search; - } - }); - - /***/ }), - /* 12 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var global = __w_extracthighlights_require__(13); - - var core = __w_extracthighlights_require__(14); - - var hide = __w_extracthighlights_require__(15); - - var redefine = __w_extracthighlights_require__(25); - - var ctx = __w_extracthighlights_require__(28); - - var PROTOTYPE = 'prototype'; - - var $export = function $export(type, name, source) { - var IS_FORCED = type & $export.F; - var IS_GLOBAL = type & $export.G; - var IS_STATIC = type & $export.S; - var IS_PROTO = type & $export.P; - var IS_BIND = type & $export.B; - var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE]; - var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); - var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {}); - var key, own, out, exp; - if (IS_GLOBAL) source = name; - - for (key in source) { - own = !IS_FORCED && target && target[key] !== undefined; - out = (own ? target : source)[key]; - exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; - if (target) redefine(target, key, out, type & $export.U); - if (exports[key] != out) hide(exports, key, exp); - if (IS_PROTO && expProto[key] != out) expProto[key] = out; - } - }; - - global.core = core; - $export.F = 1; - $export.G = 2; - $export.S = 4; - $export.P = 8; - $export.B = 16; - $export.W = 32; - $export.U = 64; - $export.R = 128; - module.exports = $export; - - /***/ }), - /* 13 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var global = module.exports = typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); - if (typeof __g == 'number') __g = global; - - /***/ }), - /* 14 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var core = module.exports = { - version: '2.6.2' - }; - if (typeof __e == 'number') __e = core; - - /***/ }), - /* 15 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var dP = __w_extracthighlights_require__(16); - - var createDesc = __w_extracthighlights_require__(24); - - module.exports = __w_extracthighlights_require__(20) ? function (object, key, value) { - return dP.f(object, key, createDesc(1, value)); - } : function (object, key, value) { - object[key] = value; - return object; - }; - - /***/ }), - /* 16 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var anObject = __w_extracthighlights_require__(17); - - var IE8_DOM_DEFINE = __w_extracthighlights_require__(19); - - var toPrimitive = __w_extracthighlights_require__(23); - - var dP = Object.defineProperty; - exports.f = __w_extracthighlights_require__(20) ? Object.defineProperty : function defineProperty(O, P, Attributes) { - anObject(O); - P = toPrimitive(P, true); - anObject(Attributes); - if (IE8_DOM_DEFINE) try { - return dP(O, P, Attributes); - } catch (e) {} - if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); - if ('value' in Attributes) O[P] = Attributes.value; - return O; - }; - - /***/ }), - /* 17 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var isObject = __w_extracthighlights_require__(18); - - module.exports = function (it) { - if (!isObject(it)) throw TypeError(it + ' is not an object!'); - return it; - }; - - /***/ }), - /* 18 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - module.exports = function (it) { - return _typeof(it) === 'object' ? it !== null : typeof it === 'function'; - }; - - /***/ }), - /* 19 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = !__w_extracthighlights_require__(20) && !__w_extracthighlights_require__(21)(function () { - return Object.defineProperty(__w_extracthighlights_require__(22)('div'), 'a', { - get: function get() { - return 7; - } - }).a != 7; - }); - - /***/ }), - /* 20 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = !__w_extracthighlights_require__(21)(function () { - return Object.defineProperty({}, 'a', { - get: function get() { - return 7; - } - }).a != 7; - }); - - /***/ }), - /* 21 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = function (exec) { - try { - return !!exec(); - } catch (e) { - return true; - } - }; - - /***/ }), - /* 22 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var isObject = __w_extracthighlights_require__(18); - - var document = __w_extracthighlights_require__(13).document; - - var is = isObject(document) && isObject(document.createElement); - - module.exports = function (it) { - return is ? document.createElement(it) : {}; - }; - - /***/ }), - /* 23 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var isObject = __w_extracthighlights_require__(18); - - module.exports = function (it, S) { - if (!isObject(it)) return it; - var fn, val; - if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; - if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val; - if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; - throw TypeError("Can't convert object to primitive value"); - }; - - /***/ }), - /* 24 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = function (bitmap, value) { - return { - enumerable: !(bitmap & 1), - configurable: !(bitmap & 2), - writable: !(bitmap & 4), - value: value - }; - }; - - /***/ }), - /* 25 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var global = __w_extracthighlights_require__(13); - - var hide = __w_extracthighlights_require__(15); - - var has = __w_extracthighlights_require__(26); - - var SRC = __w_extracthighlights_require__(27)('src'); - - var TO_STRING = 'toString'; - var $toString = Function[TO_STRING]; - var TPL = ('' + $toString).split(TO_STRING); - - __w_extracthighlights_require__(14).inspectSource = function (it) { - return $toString.call(it); - }; - - (module.exports = function (O, key, val, safe) { - var isFunction = typeof val == 'function'; - if (isFunction) has(val, 'name') || hide(val, 'name', key); - if (O[key] === val) return; - if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); - - if (O === global) { - O[key] = val; - } else if (!safe) { - delete O[key]; - hide(O, key, val); - } else if (O[key]) { - O[key] = val; - } else { - hide(O, key, val); - } - })(Function.prototype, TO_STRING, function toString() { - return typeof this == 'function' && this[SRC] || $toString.call(this); - }); - - /***/ }), - /* 26 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var hasOwnProperty = {}.hasOwnProperty; - - module.exports = function (it, key) { - return hasOwnProperty.call(it, key); - }; - - /***/ }), - /* 27 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var id = 0; - var px = Math.random(); - - module.exports = function (key) { - return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); - }; - - /***/ }), - /* 28 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var aFunction = __w_extracthighlights_require__(29); - - module.exports = function (fn, that, length) { - aFunction(fn); - if (that === undefined) return fn; - - switch (length) { - case 1: - return function (a) { - return fn.call(that, a); - }; - - case 2: - return function (a, b) { - return fn.call(that, a, b); - }; - - case 3: - return function (a, b, c) { - return fn.call(that, a, b, c); - }; - } - - return function () { - return fn.apply(that, arguments); - }; - }; - - /***/ }), - /* 29 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = function (it) { - if (typeof it != 'function') throw TypeError(it + ' is not a function!'); - return it; - }; - - /***/ }), - /* 30 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var toInteger = __w_extracthighlights_require__(31); - - var min = Math.min; - - module.exports = function (it) { - return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; - }; - - /***/ }), - /* 31 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var ceil = Math.ceil; - var floor = Math.floor; - - module.exports = function (it) { - return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); - }; - - /***/ }), - /* 32 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var isRegExp = __w_extracthighlights_require__(33); - - var defined = __w_extracthighlights_require__(38); - - module.exports = function (that, searchString, NAME) { - if (isRegExp(searchString)) throw TypeError('String#' + NAME + " doesn't accept regex!"); - return String(defined(that)); - }; - - /***/ }), - /* 33 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var isObject = __w_extracthighlights_require__(18); - - var cof = __w_extracthighlights_require__(34); - - var MATCH = __w_extracthighlights_require__(35)('match'); - - module.exports = function (it) { - var isRegExp; - return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp'); - }; - - /***/ }), - /* 34 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var toString = {}.toString; - - module.exports = function (it) { - return toString.call(it).slice(8, -1); - }; - - /***/ }), - /* 35 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var store = __w_extracthighlights_require__(36)('wks'); - - var uid = __w_extracthighlights_require__(27); - - var _Symbol = __w_extracthighlights_require__(13).Symbol; - - var USE_SYMBOL = typeof _Symbol == 'function'; - - var $exports = module.exports = function (name) { - return store[name] || (store[name] = USE_SYMBOL && _Symbol[name] || (USE_SYMBOL ? _Symbol : uid)('Symbol.' + name)); - }; - - $exports.store = store; - - /***/ }), - /* 36 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var core = __w_extracthighlights_require__(14); - - var global = __w_extracthighlights_require__(13); - - var SHARED = '__core-js_shared__'; - var store = global[SHARED] || (global[SHARED] = {}); - (module.exports = function (key, value) { - return store[key] || (store[key] = value !== undefined ? value : {}); - })('versions', []).push({ - version: core.version, - mode: __w_extracthighlights_require__(37) ? 'pure' : 'global', - copyright: '© 2019 Denis Pushkarev (zloirock.ru)' - }); - - /***/ }), - /* 37 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = false; - - /***/ }), - /* 38 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = function (it) { - if (it == undefined) throw TypeError("Can't call method on " + it); - return it; - }; - - /***/ }), - /* 39 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var MATCH = __w_extracthighlights_require__(35)('match'); - - module.exports = function (KEY) { - var re = /./; - - try { - '/./'[KEY](re); - } catch (e) { - try { - re[MATCH] = false; - return !'/./'[KEY](re); - } catch (f) {} - } - - return true; - }; - - /***/ }), - /* 40 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(41); - - module.exports = __w_extracthighlights_require__(14).String.endsWith; - - /***/ }), - /* 41 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(12); - - var toLength = __w_extracthighlights_require__(30); - - var context = __w_extracthighlights_require__(32); - - var ENDS_WITH = 'endsWith'; - var $endsWith = ''[ENDS_WITH]; - $export($export.P + $export.F * __w_extracthighlights_require__(39)(ENDS_WITH), 'String', { - endsWith: function endsWith(searchString) { - var that = context(this, searchString, ENDS_WITH); - var endPosition = arguments.length > 1 ? arguments[1] : undefined; - var len = toLength(that.length); - var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len); - var search = String(searchString); - return $endsWith ? $endsWith.call(that, search, end) : that.slice(end - search.length, end) === search; - } - }); - - /***/ }), - /* 42 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(43); - - module.exports = __w_extracthighlights_require__(14).String.includes; - - /***/ }), - /* 43 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(12); - - var context = __w_extracthighlights_require__(32); - - var INCLUDES = 'includes'; - $export($export.P + $export.F * __w_extracthighlights_require__(39)(INCLUDES), 'String', { - includes: function includes(searchString) { - return !!~context(this, searchString, INCLUDES).indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined); - } - }); - - /***/ }), - /* 44 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(45); - - module.exports = __w_extracthighlights_require__(14).Array.includes; - - /***/ }), - /* 45 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(12); - - var $includes = __w_extracthighlights_require__(46)(true); - - $export($export.P, 'Array', { - includes: function includes(el) { - return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); - } - }); - - __w_extracthighlights_require__(50)('includes'); - - /***/ }), - /* 46 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var toIObject = __w_extracthighlights_require__(47); - - var toLength = __w_extracthighlights_require__(30); - - var toAbsoluteIndex = __w_extracthighlights_require__(49); - - module.exports = function (IS_INCLUDES) { - return function ($this, el, fromIndex) { - var O = toIObject($this); - var length = toLength(O.length); - var index = toAbsoluteIndex(fromIndex, length); - var value; - if (IS_INCLUDES && el != el) while (length > index) { - value = O[index++]; - if (value != value) return true; - } else for (; length > index; index++) { - if (IS_INCLUDES || index in O) { - if (O[index] === el) return IS_INCLUDES || index || 0; - } - } - return !IS_INCLUDES && -1; - }; - }; - - /***/ }), - /* 47 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var IObject = __w_extracthighlights_require__(48); - - var defined = __w_extracthighlights_require__(38); - - module.exports = function (it) { - return IObject(defined(it)); - }; - - /***/ }), - /* 48 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var cof = __w_extracthighlights_require__(34); - - module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) { - return cof(it) == 'String' ? it.split('') : Object(it); - }; - - /***/ }), - /* 49 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var toInteger = __w_extracthighlights_require__(31); - - var max = Math.max; - var min = Math.min; - - module.exports = function (index, length) { - index = toInteger(index); - return index < 0 ? max(index + length, 0) : min(index, length); - }; - - /***/ }), - /* 50 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var UNSCOPABLES = __w_extracthighlights_require__(35)('unscopables'); - - var ArrayProto = Array.prototype; - if (ArrayProto[UNSCOPABLES] == undefined) __w_extracthighlights_require__(15)(ArrayProto, UNSCOPABLES, {}); - - module.exports = function (key) { - ArrayProto[UNSCOPABLES][key] = true; - }; - - /***/ }), - /* 51 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(52); - - __w_extracthighlights_require__(67); - - module.exports = __w_extracthighlights_require__(14).Array.from; - - /***/ }), - /* 52 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $at = __w_extracthighlights_require__(53)(true); - - __w_extracthighlights_require__(54)(String, 'String', function (iterated) { - this._t = String(iterated); - this._i = 0; - }, function () { - var O = this._t; - var index = this._i; - var point; - if (index >= O.length) return { - value: undefined, - done: true - }; - point = $at(O, index); - this._i += point.length; - return { - value: point, - done: false - }; - }); - - /***/ }), - /* 53 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var toInteger = __w_extracthighlights_require__(31); - - var defined = __w_extracthighlights_require__(38); - - module.exports = function (TO_STRING) { - return function (that, pos) { - var s = String(defined(that)); - var i = toInteger(pos); - var l = s.length; - var a, b; - if (i < 0 || i >= l) return TO_STRING ? '' : undefined; - a = s.charCodeAt(i); - return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff ? TO_STRING ? s.charAt(i) : a : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; - }; - }; - - /***/ }), - /* 54 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var LIBRARY = __w_extracthighlights_require__(37); - - var $export = __w_extracthighlights_require__(12); - - var redefine = __w_extracthighlights_require__(25); - - var hide = __w_extracthighlights_require__(15); - - var Iterators = __w_extracthighlights_require__(55); - - var $iterCreate = __w_extracthighlights_require__(56); - - var setToStringTag = __w_extracthighlights_require__(64); - - var getPrototypeOf = __w_extracthighlights_require__(65); - - var ITERATOR = __w_extracthighlights_require__(35)('iterator'); - - var BUGGY = !([].keys && 'next' in [].keys()); - var FF_ITERATOR = '@@iterator'; - var KEYS = 'keys'; - var VALUES = 'values'; - - var returnThis = function returnThis() { - return this; - }; - - module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) { - $iterCreate(Constructor, NAME, next); - - var getMethod = function getMethod(kind) { - if (!BUGGY && kind in proto) return proto[kind]; - - switch (kind) { - case KEYS: - return function keys() { - return new Constructor(this, kind); - }; - - case VALUES: - return function values() { - return new Constructor(this, kind); - }; - } - - return function entries() { - return new Constructor(this, kind); - }; - }; - - var TAG = NAME + ' Iterator'; - var DEF_VALUES = DEFAULT == VALUES; - var VALUES_BUG = false; - var proto = Base.prototype; - var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]; - var $default = $native || getMethod(DEFAULT); - var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined; - var $anyNative = NAME == 'Array' ? proto.entries || $native : $native; - var methods, key, IteratorPrototype; - - if ($anyNative) { - IteratorPrototype = getPrototypeOf($anyNative.call(new Base())); - - if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) { - setToStringTag(IteratorPrototype, TAG, true); - if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis); - } - } - - if (DEF_VALUES && $native && $native.name !== VALUES) { - VALUES_BUG = true; - - $default = function values() { - return $native.call(this); - }; - } - - if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) { - hide(proto, ITERATOR, $default); - } - - Iterators[NAME] = $default; - Iterators[TAG] = returnThis; - - if (DEFAULT) { - methods = { - values: DEF_VALUES ? $default : getMethod(VALUES), - keys: IS_SET ? $default : getMethod(KEYS), - entries: $entries - }; - if (FORCED) for (key in methods) { - if (!(key in proto)) redefine(proto, key, methods[key]); - } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods); - } - - return methods; - }; - - /***/ }), - /* 55 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = {}; - - /***/ }), - /* 56 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var create = __w_extracthighlights_require__(57); - - var descriptor = __w_extracthighlights_require__(24); - - var setToStringTag = __w_extracthighlights_require__(64); - - var IteratorPrototype = {}; - - __w_extracthighlights_require__(15)(IteratorPrototype, __w_extracthighlights_require__(35)('iterator'), function () { - return this; - }); - - module.exports = function (Constructor, NAME, next) { - Constructor.prototype = create(IteratorPrototype, { - next: descriptor(1, next) - }); - setToStringTag(Constructor, NAME + ' Iterator'); - }; - - /***/ }), - /* 57 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var anObject = __w_extracthighlights_require__(17); - - var dPs = __w_extracthighlights_require__(58); - - var enumBugKeys = __w_extracthighlights_require__(62); - - var IE_PROTO = __w_extracthighlights_require__(61)('IE_PROTO'); - - var Empty = function Empty() {}; - - var PROTOTYPE = 'prototype'; - - var _createDict = function createDict() { - var iframe = __w_extracthighlights_require__(22)('iframe'); - - var i = enumBugKeys.length; - var lt = '<'; - var gt = '>'; - var iframeDocument; - iframe.style.display = 'none'; - - __w_extracthighlights_require__(63).appendChild(iframe); - - iframe.src = 'javascript:'; - iframeDocument = iframe.contentWindow.document; - iframeDocument.open(); - iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt); - iframeDocument.close(); - _createDict = iframeDocument.F; - - while (i--) { - delete _createDict[PROTOTYPE][enumBugKeys[i]]; - } - - return _createDict(); - }; - - module.exports = Object.create || function create(O, Properties) { - var result; - - if (O !== null) { - Empty[PROTOTYPE] = anObject(O); - result = new Empty(); - Empty[PROTOTYPE] = null; - result[IE_PROTO] = O; - } else result = _createDict(); - - return Properties === undefined ? result : dPs(result, Properties); - }; - - /***/ }), - /* 58 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var dP = __w_extracthighlights_require__(16); - - var anObject = __w_extracthighlights_require__(17); - - var getKeys = __w_extracthighlights_require__(59); - - module.exports = __w_extracthighlights_require__(20) ? Object.defineProperties : function defineProperties(O, Properties) { - anObject(O); - var keys = getKeys(Properties); - var length = keys.length; - var i = 0; - var P; - - while (length > i) { - dP.f(O, P = keys[i++], Properties[P]); - } - - return O; - }; - - /***/ }), - /* 59 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $keys = __w_extracthighlights_require__(60); - - var enumBugKeys = __w_extracthighlights_require__(62); - - module.exports = Object.keys || function keys(O) { - return $keys(O, enumBugKeys); - }; - - /***/ }), - /* 60 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var has = __w_extracthighlights_require__(26); - - var toIObject = __w_extracthighlights_require__(47); - - var arrayIndexOf = __w_extracthighlights_require__(46)(false); - - var IE_PROTO = __w_extracthighlights_require__(61)('IE_PROTO'); - - module.exports = function (object, names) { - var O = toIObject(object); - var i = 0; - var result = []; - var key; - - for (key in O) { - if (key != IE_PROTO) has(O, key) && result.push(key); - } - - while (names.length > i) { - if (has(O, key = names[i++])) { - ~arrayIndexOf(result, key) || result.push(key); - } - } - - return result; - }; - - /***/ }), - /* 61 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var shared = __w_extracthighlights_require__(36)('keys'); - - var uid = __w_extracthighlights_require__(27); - - module.exports = function (key) { - return shared[key] || (shared[key] = uid(key)); - }; - - /***/ }), - /* 62 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'.split(','); - - /***/ }), - /* 63 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var document = __w_extracthighlights_require__(13).document; - - module.exports = document && document.documentElement; - - /***/ }), - /* 64 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var def = __w_extracthighlights_require__(16).f; - - var has = __w_extracthighlights_require__(26); - - var TAG = __w_extracthighlights_require__(35)('toStringTag'); - - module.exports = function (it, tag, stat) { - if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { - configurable: true, - value: tag - }); - }; - - /***/ }), - /* 65 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var has = __w_extracthighlights_require__(26); - - var toObject = __w_extracthighlights_require__(66); - - var IE_PROTO = __w_extracthighlights_require__(61)('IE_PROTO'); - - var ObjectProto = Object.prototype; - - module.exports = Object.getPrototypeOf || function (O) { - O = toObject(O); - if (has(O, IE_PROTO)) return O[IE_PROTO]; - - if (typeof O.constructor == 'function' && O instanceof O.constructor) { - return O.constructor.prototype; - } - - return O instanceof Object ? ObjectProto : null; - }; - - /***/ }), - /* 66 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var defined = __w_extracthighlights_require__(38); - - module.exports = function (it) { - return Object(defined(it)); - }; - - /***/ }), - /* 67 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var ctx = __w_extracthighlights_require__(28); - - var $export = __w_extracthighlights_require__(12); - - var toObject = __w_extracthighlights_require__(66); - - var call = __w_extracthighlights_require__(68); - - var isArrayIter = __w_extracthighlights_require__(69); - - var toLength = __w_extracthighlights_require__(30); - - var createProperty = __w_extracthighlights_require__(70); - - var getIterFn = __w_extracthighlights_require__(71); - - $export($export.S + $export.F * !__w_extracthighlights_require__(73)(function (iter) { - Array.from(iter); - }), 'Array', { - from: function from(arrayLike) { - var O = toObject(arrayLike); - var C = typeof this == 'function' ? this : Array; - var aLen = arguments.length; - var mapfn = aLen > 1 ? arguments[1] : undefined; - var mapping = mapfn !== undefined; - var index = 0; - var iterFn = getIterFn(O); - var length, result, step, iterator; - if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2); - - if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) { - for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) { - createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value); - } - } else { - length = toLength(O.length); - - for (result = new C(length); length > index; index++) { - createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]); - } - } - - result.length = index; - return result; - } - }); - - /***/ }), - /* 68 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var anObject = __w_extracthighlights_require__(17); - - module.exports = function (iterator, fn, value, entries) { - try { - return entries ? fn(anObject(value)[0], value[1]) : fn(value); - } catch (e) { - var ret = iterator['return']; - if (ret !== undefined) anObject(ret.call(iterator)); - throw e; - } - }; - - /***/ }), - /* 69 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var Iterators = __w_extracthighlights_require__(55); - - var ITERATOR = __w_extracthighlights_require__(35)('iterator'); - - var ArrayProto = Array.prototype; - - module.exports = function (it) { - return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it); - }; - - /***/ }), - /* 70 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $defineProperty = __w_extracthighlights_require__(16); - - var createDesc = __w_extracthighlights_require__(24); - - module.exports = function (object, index, value) { - if (index in object) $defineProperty.f(object, index, createDesc(0, value));else object[index] = value; - }; - - /***/ }), - /* 71 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var classof = __w_extracthighlights_require__(72); - - var ITERATOR = __w_extracthighlights_require__(35)('iterator'); - - var Iterators = __w_extracthighlights_require__(55); - - module.exports = __w_extracthighlights_require__(14).getIteratorMethod = function (it) { - if (it != undefined) return it[ITERATOR] || it['@@iterator'] || Iterators[classof(it)]; - }; - - /***/ }), - /* 72 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var cof = __w_extracthighlights_require__(34); - - var TAG = __w_extracthighlights_require__(35)('toStringTag'); - - var ARG = cof(function () { - return arguments; - }()) == 'Arguments'; - - var tryGet = function tryGet(it, key) { - try { - return it[key]; - } catch (e) {} - }; - - module.exports = function (it) { - var O, T, B; - return it === undefined ? 'Undefined' : it === null ? 'Null' : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T : ARG ? cof(O) : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; - }; - - /***/ }), - /* 73 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var ITERATOR = __w_extracthighlights_require__(35)('iterator'); - - var SAFE_CLOSING = false; - - try { - var riter = [7][ITERATOR](); - - riter['return'] = function () { - SAFE_CLOSING = true; - }; - - Array.from(riter, function () { - throw 2; - }); - } catch (e) {} - - module.exports = function (exec, skipClosing) { - if (!skipClosing && !SAFE_CLOSING) return false; - var safe = false; - - try { - var arr = [7]; - var iter = arr[ITERATOR](); - - iter.next = function () { - return { - done: safe = true - }; - }; - - arr[ITERATOR] = function () { - return iter; - }; - - exec(arr); - } catch (e) {} - - return safe; - }; - - /***/ }), - /* 74 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(75); - - module.exports = __w_extracthighlights_require__(14).Object.assign; - - /***/ }), - /* 75 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(12); - - $export($export.S + $export.F, 'Object', { - assign: __w_extracthighlights_require__(76) - }); - - /***/ }), - /* 76 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var getKeys = __w_extracthighlights_require__(59); - - var gOPS = __w_extracthighlights_require__(77); - - var pIE = __w_extracthighlights_require__(78); - - var toObject = __w_extracthighlights_require__(66); - - var IObject = __w_extracthighlights_require__(48); - - var $assign = Object.assign; - module.exports = !$assign || __w_extracthighlights_require__(21)(function () { - var A = {}; - var B = {}; - var S = Symbol(); - var K = 'abcdefghijklmnopqrst'; - A[S] = 7; - K.split('').forEach(function (k) { - B[k] = k; - }); - return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K; - }) ? function assign(target, source) { - var T = toObject(target); - var aLen = arguments.length; - var index = 1; - var getSymbols = gOPS.f; - var isEnum = pIE.f; - - while (aLen > index) { - var S = IObject(arguments[index++]); - var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S); - var length = keys.length; - var j = 0; - var key; - - while (length > j) { - if (isEnum.call(S, key = keys[j++])) T[key] = S[key]; - } - } - - return T; - } : $assign; - - /***/ }), - /* 77 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - exports.f = Object.getOwnPropertySymbols; - - /***/ }), - /* 78 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - exports.f = {}.propertyIsEnumerable; - - /***/ }), - /* 79 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(80); - - module.exports = __w_extracthighlights_require__(14).Math.log2; - - /***/ }), - /* 80 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(12); - - $export($export.S, 'Math', { - log2: function log2(x) { - return Math.log(x) / Math.LN2; - } - }); - - /***/ }), - /* 81 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(82); - - module.exports = __w_extracthighlights_require__(14).Number.isNaN; - - /***/ }), - /* 82 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(12); - - $export($export.S, 'Number', { - isNaN: function isNaN(number) { - return number != number; - } - }); - - /***/ }), - /* 83 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(84); - - module.exports = __w_extracthighlights_require__(14).Number.isInteger; - - /***/ }), - /* 84 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(12); - - $export($export.S, 'Number', { - isInteger: __w_extracthighlights_require__(85) - }); - - /***/ }), - /* 85 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var isObject = __w_extracthighlights_require__(18); - - var floor = Math.floor; - - module.exports = function isInteger(it) { - return !isObject(it) && isFinite(it) && floor(it) === it; - }; - - /***/ }), - /* 86 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(87); - - __w_extracthighlights_require__(52); - - __w_extracthighlights_require__(88); - - __w_extracthighlights_require__(91); - - __w_extracthighlights_require__(104); - - __w_extracthighlights_require__(105); - - module.exports = __w_extracthighlights_require__(14).Promise; - - /***/ }), - /* 87 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var classof = __w_extracthighlights_require__(72); - - var test = {}; - test[__w_extracthighlights_require__(35)('toStringTag')] = 'z'; - - if (test + '' != '[object z]') { - __w_extracthighlights_require__(25)(Object.prototype, 'toString', function toString() { - return '[object ' + classof(this) + ']'; - }, true); - } - - /***/ }), - /* 88 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $iterators = __w_extracthighlights_require__(89); - - var getKeys = __w_extracthighlights_require__(59); - - var redefine = __w_extracthighlights_require__(25); - - var global = __w_extracthighlights_require__(13); - - var hide = __w_extracthighlights_require__(15); - - var Iterators = __w_extracthighlights_require__(55); - - var wks = __w_extracthighlights_require__(35); - - var ITERATOR = wks('iterator'); - var TO_STRING_TAG = wks('toStringTag'); - var ArrayValues = Iterators.Array; - var DOMIterables = { - CSSRuleList: true, - CSSStyleDeclaration: false, - CSSValueList: false, - ClientRectList: false, - DOMRectList: false, - DOMStringList: false, - DOMTokenList: true, - DataTransferItemList: false, - FileList: false, - HTMLAllCollection: false, - HTMLCollection: false, - HTMLFormElement: false, - HTMLSelectElement: false, - MediaList: true, - MimeTypeArray: false, - NamedNodeMap: false, - NodeList: true, - PaintRequestList: false, - Plugin: false, - PluginArray: false, - SVGLengthList: false, - SVGNumberList: false, - SVGPathSegList: false, - SVGPointList: false, - SVGStringList: false, - SVGTransformList: false, - SourceBufferList: false, - StyleSheetList: true, - TextTrackCueList: false, - TextTrackList: false, - TouchList: false - }; - - for (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) { - var NAME = collections[i]; - var explicit = DOMIterables[NAME]; - var Collection = global[NAME]; - var proto = Collection && Collection.prototype; - var key; - - if (proto) { - if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues); - if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME); - Iterators[NAME] = ArrayValues; - if (explicit) for (key in $iterators) { - if (!proto[key]) redefine(proto, key, $iterators[key], true); - } - } - } - - /***/ }), - /* 89 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var addToUnscopables = __w_extracthighlights_require__(50); - - var step = __w_extracthighlights_require__(90); - - var Iterators = __w_extracthighlights_require__(55); - - var toIObject = __w_extracthighlights_require__(47); - - module.exports = __w_extracthighlights_require__(54)(Array, 'Array', function (iterated, kind) { - this._t = toIObject(iterated); - this._i = 0; - this._k = kind; - }, function () { - var O = this._t; - var kind = this._k; - var index = this._i++; - - if (!O || index >= O.length) { - this._t = undefined; - return step(1); - } - - if (kind == 'keys') return step(0, index); - if (kind == 'values') return step(0, O[index]); - return step(0, [index, O[index]]); - }, 'values'); - Iterators.Arguments = Iterators.Array; - addToUnscopables('keys'); - addToUnscopables('values'); - addToUnscopables('entries'); - - /***/ }), - /* 90 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = function (done, value) { - return { - value: value, - done: !!done - }; - }; - - /***/ }), - /* 91 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var LIBRARY = __w_extracthighlights_require__(37); - - var global = __w_extracthighlights_require__(13); - - var ctx = __w_extracthighlights_require__(28); - - var classof = __w_extracthighlights_require__(72); - - var $export = __w_extracthighlights_require__(12); - - var isObject = __w_extracthighlights_require__(18); - - var aFunction = __w_extracthighlights_require__(29); - - var anInstance = __w_extracthighlights_require__(92); - - var forOf = __w_extracthighlights_require__(93); - - var speciesConstructor = __w_extracthighlights_require__(94); - - var task = __w_extracthighlights_require__(95).set; - - var microtask = __w_extracthighlights_require__(97)(); - - var newPromiseCapabilityModule = __w_extracthighlights_require__(98); - - var perform = __w_extracthighlights_require__(99); - - var userAgent = __w_extracthighlights_require__(100); - - var promiseResolve = __w_extracthighlights_require__(101); - - var PROMISE = 'Promise'; - var TypeError = global.TypeError; - var process = global.process; - var versions = process && process.versions; - var v8 = versions && versions.v8 || ''; - var $Promise = global[PROMISE]; - var isNode = classof(process) == 'process'; - - var empty = function empty() {}; - - var Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper; - var newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f; - var USE_NATIVE = !!function () { - try { - var promise = $Promise.resolve(1); - - var FakePromise = (promise.constructor = {})[__w_extracthighlights_require__(35)('species')] = function (exec) { - exec(empty, empty); - }; - - return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise && v8.indexOf('6.6') !== 0 && userAgent.indexOf('Chrome/66') === -1; - } catch (e) {} - }(); - - var isThenable = function isThenable(it) { - var then; - return isObject(it) && typeof (then = it.then) == 'function' ? then : false; - }; - - var notify = function notify(promise, isReject) { - if (promise._n) return; - promise._n = true; - var chain = promise._c; - microtask(function () { - var value = promise._v; - var ok = promise._s == 1; - var i = 0; - - var run = function run(reaction) { - var handler = ok ? reaction.ok : reaction.fail; - var resolve = reaction.resolve; - var reject = reaction.reject; - var domain = reaction.domain; - var result, then, exited; - - try { - if (handler) { - if (!ok) { - if (promise._h == 2) onHandleUnhandled(promise); - promise._h = 1; - } - - if (handler === true) result = value;else { - if (domain) domain.enter(); - result = handler(value); - - if (domain) { - domain.exit(); - exited = true; - } - } - - if (result === reaction.promise) { - reject(TypeError('Promise-chain cycle')); - } else if (then = isThenable(result)) { - then.call(result, resolve, reject); - } else resolve(result); - } else reject(value); - } catch (e) { - if (domain && !exited) domain.exit(); - reject(e); - } - }; - - while (chain.length > i) { - run(chain[i++]); - } - - promise._c = []; - promise._n = false; - if (isReject && !promise._h) onUnhandled(promise); - }); - }; - - var onUnhandled = function onUnhandled(promise) { - task.call(global, function () { - var value = promise._v; - var unhandled = isUnhandled(promise); - var result, handler, console; - - if (unhandled) { - result = perform(function () { - if (isNode) { - process.emit('unhandledRejection', value, promise); - } else if (handler = global.onunhandledrejection) { - handler({ - promise: promise, - reason: value - }); - } else if ((console = global.console) && console.error) { - console.error('Unhandled promise rejection', value); - } - }); - promise._h = isNode || isUnhandled(promise) ? 2 : 1; - } - - promise._a = undefined; - if (unhandled && result.e) throw result.v; - }); - }; - - var isUnhandled = function isUnhandled(promise) { - return promise._h !== 1 && (promise._a || promise._c).length === 0; - }; - - var onHandleUnhandled = function onHandleUnhandled(promise) { - task.call(global, function () { - var handler; - - if (isNode) { - process.emit('rejectionHandled', promise); - } else if (handler = global.onrejectionhandled) { - handler({ - promise: promise, - reason: promise._v - }); - } - }); - }; - - var $reject = function $reject(value) { - var promise = this; - if (promise._d) return; - promise._d = true; - promise = promise._w || promise; - promise._v = value; - promise._s = 2; - if (!promise._a) promise._a = promise._c.slice(); - notify(promise, true); - }; - - var $resolve = function $resolve(value) { - var promise = this; - var then; - if (promise._d) return; - promise._d = true; - promise = promise._w || promise; - - try { - if (promise === value) throw TypeError("Promise can't be resolved itself"); - - if (then = isThenable(value)) { - microtask(function () { - var wrapper = { - _w: promise, - _d: false - }; - - try { - then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1)); - } catch (e) { - $reject.call(wrapper, e); - } - }); - } else { - promise._v = value; - promise._s = 1; - notify(promise, false); - } - } catch (e) { - $reject.call({ - _w: promise, - _d: false - }, e); - } - }; - - if (!USE_NATIVE) { - $Promise = function Promise(executor) { - anInstance(this, $Promise, PROMISE, '_h'); - aFunction(executor); - Internal.call(this); - - try { - executor(ctx($resolve, this, 1), ctx($reject, this, 1)); - } catch (err) { - $reject.call(this, err); - } - }; - - Internal = function Promise(executor) { - this._c = []; - this._a = undefined; - this._s = 0; - this._d = false; - this._v = undefined; - this._h = 0; - this._n = false; - }; - - Internal.prototype = __w_extracthighlights_require__(102)($Promise.prototype, { - then: function then(onFulfilled, onRejected) { - var reaction = newPromiseCapability(speciesConstructor(this, $Promise)); - reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; - reaction.fail = typeof onRejected == 'function' && onRejected; - reaction.domain = isNode ? process.domain : undefined; - - this._c.push(reaction); - - if (this._a) this._a.push(reaction); - if (this._s) notify(this, false); - return reaction.promise; - }, - 'catch': function _catch(onRejected) { - return this.then(undefined, onRejected); - } - }); - - OwnPromiseCapability = function OwnPromiseCapability() { - var promise = new Internal(); - this.promise = promise; - this.resolve = ctx($resolve, promise, 1); - this.reject = ctx($reject, promise, 1); - }; - - newPromiseCapabilityModule.f = newPromiseCapability = function newPromiseCapability(C) { - return C === $Promise || C === Wrapper ? new OwnPromiseCapability(C) : newGenericPromiseCapability(C); - }; - } - - $export($export.G + $export.W + $export.F * !USE_NATIVE, { - Promise: $Promise - }); - - __w_extracthighlights_require__(64)($Promise, PROMISE); - - __w_extracthighlights_require__(103)(PROMISE); - - Wrapper = __w_extracthighlights_require__(14)[PROMISE]; - $export($export.S + $export.F * !USE_NATIVE, PROMISE, { - reject: function reject(r) { - var capability = newPromiseCapability(this); - var $$reject = capability.reject; - $$reject(r); - return capability.promise; - } - }); - $export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, { - resolve: function resolve(x) { - return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x); - } - }); - $export($export.S + $export.F * !(USE_NATIVE && __w_extracthighlights_require__(73)(function (iter) { - $Promise.all(iter)['catch'](empty); - })), PROMISE, { - all: function all(iterable) { - var C = this; - var capability = newPromiseCapability(C); - var resolve = capability.resolve; - var reject = capability.reject; - var result = perform(function () { - var values = []; - var index = 0; - var remaining = 1; - forOf(iterable, false, function (promise) { - var $index = index++; - var alreadyCalled = false; - values.push(undefined); - remaining++; - C.resolve(promise).then(function (value) { - if (alreadyCalled) return; - alreadyCalled = true; - values[$index] = value; - --remaining || resolve(values); - }, reject); - }); - --remaining || resolve(values); - }); - if (result.e) reject(result.v); - return capability.promise; - }, - race: function race(iterable) { - var C = this; - var capability = newPromiseCapability(C); - var reject = capability.reject; - var result = perform(function () { - forOf(iterable, false, function (promise) { - C.resolve(promise).then(capability.resolve, reject); - }); - }); - if (result.e) reject(result.v); - return capability.promise; - } - }); - - /***/ }), - /* 92 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = function (it, Constructor, name, forbiddenField) { - if (!(it instanceof Constructor) || forbiddenField !== undefined && forbiddenField in it) { - throw TypeError(name + ': incorrect invocation!'); - } - - return it; - }; - - /***/ }), - /* 93 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var ctx = __w_extracthighlights_require__(28); - - var call = __w_extracthighlights_require__(68); - - var isArrayIter = __w_extracthighlights_require__(69); - - var anObject = __w_extracthighlights_require__(17); - - var toLength = __w_extracthighlights_require__(30); - - var getIterFn = __w_extracthighlights_require__(71); - - var BREAK = {}; - var RETURN = {}; - - var _exports = module.exports = function (iterable, entries, fn, that, ITERATOR) { - var iterFn = ITERATOR ? function () { - return iterable; - } : getIterFn(iterable); - var f = ctx(fn, that, entries ? 2 : 1); - var index = 0; - var length, step, iterator, result; - if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!'); - if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) { - result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]); - if (result === BREAK || result === RETURN) return result; - } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) { - result = call(iterator, f, step.value, entries); - if (result === BREAK || result === RETURN) return result; - } - }; - - _exports.BREAK = BREAK; - _exports.RETURN = RETURN; - - /***/ }), - /* 94 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var anObject = __w_extracthighlights_require__(17); - - var aFunction = __w_extracthighlights_require__(29); - - var SPECIES = __w_extracthighlights_require__(35)('species'); - - module.exports = function (O, D) { - var C = anObject(O).constructor; - var S; - return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S); - }; - - /***/ }), - /* 95 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var ctx = __w_extracthighlights_require__(28); - - var invoke = __w_extracthighlights_require__(96); - - var html = __w_extracthighlights_require__(63); - - var cel = __w_extracthighlights_require__(22); - - var global = __w_extracthighlights_require__(13); - - var process = global.process; - var setTask = global.setImmediate; - var clearTask = global.clearImmediate; - var MessageChannel = global.MessageChannel; - var Dispatch = global.Dispatch; - var counter = 0; - var queue = {}; - var ONREADYSTATECHANGE = 'onreadystatechange'; - var defer, channel, port; - - var run = function run() { - var id = +this; - - if (queue.hasOwnProperty(id)) { - var fn = queue[id]; - delete queue[id]; - fn(); - } - }; - - var listener = function listener(event) { - run.call(event.data); - }; - - if (!setTask || !clearTask) { - setTask = function setImmediate(fn) { - var args = []; - var i = 1; - - while (arguments.length > i) { - args.push(arguments[i++]); - } - - queue[++counter] = function () { - invoke(typeof fn == 'function' ? fn : Function(fn), args); - }; - - defer(counter); - return counter; - }; - - clearTask = function clearImmediate(id) { - delete queue[id]; - }; - - if (__w_extracthighlights_require__(34)(process) == 'process') { - defer = function defer(id) { - process.nextTick(ctx(run, id, 1)); - }; - } else if (Dispatch && Dispatch.now) { - defer = function defer(id) { - Dispatch.now(ctx(run, id, 1)); - }; - } else if (MessageChannel) { - channel = new MessageChannel(); - port = channel.port2; - channel.port1.onmessage = listener; - defer = ctx(port.postMessage, port, 1); - } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) { - defer = function defer(id) { - global.postMessage(id + '', '*'); - }; - - global.addEventListener('message', listener, false); - } else if (ONREADYSTATECHANGE in cel('script')) { - defer = function defer(id) { - html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () { - html.removeChild(this); - run.call(id); - }; - }; - } else { - defer = function defer(id) { - setTimeout(ctx(run, id, 1), 0); - }; - } - } - - module.exports = { - set: setTask, - clear: clearTask - }; - - /***/ }), - /* 96 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = function (fn, args, that) { - var un = that === undefined; - - switch (args.length) { - case 0: - return un ? fn() : fn.call(that); - - case 1: - return un ? fn(args[0]) : fn.call(that, args[0]); - - case 2: - return un ? fn(args[0], args[1]) : fn.call(that, args[0], args[1]); - - case 3: - return un ? fn(args[0], args[1], args[2]) : fn.call(that, args[0], args[1], args[2]); - - case 4: - return un ? fn(args[0], args[1], args[2], args[3]) : fn.call(that, args[0], args[1], args[2], args[3]); - } - - return fn.apply(that, args); - }; - - /***/ }), - /* 97 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var global = __w_extracthighlights_require__(13); - - var macrotask = __w_extracthighlights_require__(95).set; - - var Observer = global.MutationObserver || global.WebKitMutationObserver; - var process = global.process; - var Promise = global.Promise; - var isNode = __w_extracthighlights_require__(34)(process) == 'process'; - - module.exports = function () { - var head, last, notify; - - var flush = function flush() { - var parent, fn; - if (isNode && (parent = process.domain)) parent.exit(); - - while (head) { - fn = head.fn; - head = head.next; - - try { - fn(); - } catch (e) { - if (head) notify();else last = undefined; - throw e; - } - } - - last = undefined; - if (parent) parent.enter(); - }; - - if (isNode) { - notify = function notify() { - process.nextTick(flush); - }; - } else if (Observer && !(global.navigator && global.navigator.standalone)) { - var toggle = true; - var node = document.createTextNode(''); - new Observer(flush).observe(node, { - characterData: true - }); - - notify = function notify() { - node.data = toggle = !toggle; - }; - } else if (Promise && Promise.resolve) { - var promise = Promise.resolve(undefined); - - notify = function notify() { - promise.then(flush); - }; - } else { - notify = function notify() { - macrotask.call(global, flush); - }; - } - - return function (fn) { - var task = { - fn: fn, - next: undefined - }; - if (last) last.next = task; - - if (!head) { - head = task; - notify(); - } - - last = task; - }; - }; - - /***/ }), - /* 98 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var aFunction = __w_extracthighlights_require__(29); - - function PromiseCapability(C) { - var resolve, reject; - this.promise = new C(function ($$resolve, $$reject) { - if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); - resolve = $$resolve; - reject = $$reject; - }); - this.resolve = aFunction(resolve); - this.reject = aFunction(reject); - } - - module.exports.f = function (C) { - return new PromiseCapability(C); - }; - - /***/ }), - /* 99 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = function (exec) { - try { - return { - e: false, - v: exec() - }; - } catch (e) { - return { - e: true, - v: e - }; - } - }; - - /***/ }), - /* 100 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var global = __w_extracthighlights_require__(13); - - var navigator = global.navigator; - module.exports = navigator && navigator.userAgent || ''; - - /***/ }), - /* 101 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var anObject = __w_extracthighlights_require__(17); - - var isObject = __w_extracthighlights_require__(18); - - var newPromiseCapability = __w_extracthighlights_require__(98); - - module.exports = function (C, x) { - anObject(C); - if (isObject(x) && x.constructor === C) return x; - var promiseCapability = newPromiseCapability.f(C); - var resolve = promiseCapability.resolve; - resolve(x); - return promiseCapability.promise; - }; - - /***/ }), - /* 102 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var redefine = __w_extracthighlights_require__(25); - - module.exports = function (target, src, safe) { - for (var key in src) { - redefine(target, key, src[key], safe); - } - - return target; - }; - - /***/ }), - /* 103 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var global = __w_extracthighlights_require__(13); - - var dP = __w_extracthighlights_require__(16); - - var DESCRIPTORS = __w_extracthighlights_require__(20); - - var SPECIES = __w_extracthighlights_require__(35)('species'); - - module.exports = function (KEY) { - var C = global[KEY]; - if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, { - configurable: true, - get: function get() { - return this; - } - }); - }; - - /***/ }), - /* 104 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(12); - - var core = __w_extracthighlights_require__(14); - - var global = __w_extracthighlights_require__(13); - - var speciesConstructor = __w_extracthighlights_require__(94); - - var promiseResolve = __w_extracthighlights_require__(101); - - $export($export.P + $export.R, 'Promise', { - 'finally': function _finally(onFinally) { - var C = speciesConstructor(this, core.Promise || global.Promise); - var isFunction = typeof onFinally == 'function'; - return this.then(isFunction ? function (x) { - return promiseResolve(C, onFinally()).then(function () { - return x; - }); - } : onFinally, isFunction ? function (e) { - return promiseResolve(C, onFinally()).then(function () { - throw e; - }); - } : onFinally); - } - }); - - /***/ }), - /* 105 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(12); - - var newPromiseCapability = __w_extracthighlights_require__(98); - - var perform = __w_extracthighlights_require__(99); - - $export($export.S, 'Promise', { - 'try': function _try(callbackfn) { - var promiseCapability = newPromiseCapability.f(this); - var result = perform(callbackfn); - (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v); - return promiseCapability.promise; - } - }); - - /***/ }), - /* 106 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(87); - - __w_extracthighlights_require__(88); - - __w_extracthighlights_require__(107); - - __w_extracthighlights_require__(119); - - __w_extracthighlights_require__(121); - - module.exports = __w_extracthighlights_require__(14).WeakMap; - - /***/ }), - /* 107 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var each = __w_extracthighlights_require__(108)(0); - - var redefine = __w_extracthighlights_require__(25); - - var meta = __w_extracthighlights_require__(112); - - var assign = __w_extracthighlights_require__(76); - - var weak = __w_extracthighlights_require__(113); - - var isObject = __w_extracthighlights_require__(18); - - var fails = __w_extracthighlights_require__(21); - - var validate = __w_extracthighlights_require__(114); - - var WEAK_MAP = 'WeakMap'; - var getWeak = meta.getWeak; - var isExtensible = Object.isExtensible; - var uncaughtFrozenStore = weak.ufstore; - var tmp = {}; - var InternalMap; - - var wrapper = function wrapper(get) { - return function WeakMap() { - return get(this, arguments.length > 0 ? arguments[0] : undefined); - }; - }; - - var methods = { - get: function get(key) { - if (isObject(key)) { - var data = getWeak(key); - if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key); - return data ? data[this._i] : undefined; - } - }, - set: function set(key, value) { - return weak.def(validate(this, WEAK_MAP), key, value); - } - }; - - var $WeakMap = module.exports = __w_extracthighlights_require__(115)(WEAK_MAP, wrapper, methods, weak, true, true); - - if (fails(function () { - return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; - })) { - InternalMap = weak.getConstructor(wrapper, WEAK_MAP); - assign(InternalMap.prototype, methods); - meta.NEED = true; - each(['delete', 'has', 'get', 'set'], function (key) { - var proto = $WeakMap.prototype; - var method = proto[key]; - redefine(proto, key, function (a, b) { - if (isObject(a) && !isExtensible(a)) { - if (!this._f) this._f = new InternalMap(); - - var result = this._f[key](a, b); - - return key == 'set' ? this : result; - } - - return method.call(this, a, b); - }); - }); - } - - /***/ }), - /* 108 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var ctx = __w_extracthighlights_require__(28); - - var IObject = __w_extracthighlights_require__(48); - - var toObject = __w_extracthighlights_require__(66); - - var toLength = __w_extracthighlights_require__(30); - - var asc = __w_extracthighlights_require__(109); - - module.exports = function (TYPE, $create) { - var IS_MAP = TYPE == 1; - var IS_FILTER = TYPE == 2; - var IS_SOME = TYPE == 3; - var IS_EVERY = TYPE == 4; - var IS_FIND_INDEX = TYPE == 6; - var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; - var create = $create || asc; - return function ($this, callbackfn, that) { - var O = toObject($this); - var self = IObject(O); - var f = ctx(callbackfn, that, 3); - var length = toLength(self.length); - var index = 0; - var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; - var val, res; - - for (; length > index; index++) { - if (NO_HOLES || index in self) { - val = self[index]; - res = f(val, index, O); - - if (TYPE) { - if (IS_MAP) result[index] = res;else if (res) switch (TYPE) { - case 3: - return true; - - case 5: - return val; - - case 6: - return index; - - case 2: - result.push(val); - } else if (IS_EVERY) return false; - } - } - } - - return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; - }; - }; - - /***/ }), - /* 109 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var speciesConstructor = __w_extracthighlights_require__(110); - - module.exports = function (original, length) { - return new (speciesConstructor(original))(length); - }; - - /***/ }), - /* 110 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var isObject = __w_extracthighlights_require__(18); - - var isArray = __w_extracthighlights_require__(111); - - var SPECIES = __w_extracthighlights_require__(35)('species'); - - module.exports = function (original) { - var C; - - if (isArray(original)) { - C = original.constructor; - if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined; - - if (isObject(C)) { - C = C[SPECIES]; - if (C === null) C = undefined; - } - } - - return C === undefined ? Array : C; - }; - - /***/ }), - /* 111 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var cof = __w_extracthighlights_require__(34); - - module.exports = Array.isArray || function isArray(arg) { - return cof(arg) == 'Array'; - }; - - /***/ }), - /* 112 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - var META = __w_extracthighlights_require__(27)('meta'); - - var isObject = __w_extracthighlights_require__(18); - - var has = __w_extracthighlights_require__(26); - - var setDesc = __w_extracthighlights_require__(16).f; - - var id = 0; - - var isExtensible = Object.isExtensible || function () { - return true; - }; - - var FREEZE = !__w_extracthighlights_require__(21)(function () { - return isExtensible(Object.preventExtensions({})); - }); - - var setMeta = function setMeta(it) { - setDesc(it, META, { - value: { - i: 'O' + ++id, - w: {} - } - }); - }; - - var fastKey = function fastKey(it, create) { - if (!isObject(it)) return _typeof(it) == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; - - if (!has(it, META)) { - if (!isExtensible(it)) return 'F'; - if (!create) return 'E'; - setMeta(it); - } - - return it[META].i; - }; - - var getWeak = function getWeak(it, create) { - if (!has(it, META)) { - if (!isExtensible(it)) return true; - if (!create) return false; - setMeta(it); - } - - return it[META].w; - }; - - var onFreeze = function onFreeze(it) { - if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it); - return it; - }; - - var meta = module.exports = { - KEY: META, - NEED: false, - fastKey: fastKey, - getWeak: getWeak, - onFreeze: onFreeze - }; - - /***/ }), - /* 113 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var redefineAll = __w_extracthighlights_require__(102); - - var getWeak = __w_extracthighlights_require__(112).getWeak; - - var anObject = __w_extracthighlights_require__(17); - - var isObject = __w_extracthighlights_require__(18); - - var anInstance = __w_extracthighlights_require__(92); - - var forOf = __w_extracthighlights_require__(93); - - var createArrayMethod = __w_extracthighlights_require__(108); - - var $has = __w_extracthighlights_require__(26); - - var validate = __w_extracthighlights_require__(114); - - var arrayFind = createArrayMethod(5); - var arrayFindIndex = createArrayMethod(6); - var id = 0; - - var uncaughtFrozenStore = function uncaughtFrozenStore(that) { - return that._l || (that._l = new UncaughtFrozenStore()); - }; - - var UncaughtFrozenStore = function UncaughtFrozenStore() { - this.a = []; - }; - - var findUncaughtFrozen = function findUncaughtFrozen(store, key) { - return arrayFind(store.a, function (it) { - return it[0] === key; - }); - }; - - UncaughtFrozenStore.prototype = { - get: function get(key) { - var entry = findUncaughtFrozen(this, key); - if (entry) return entry[1]; - }, - has: function has(key) { - return !!findUncaughtFrozen(this, key); - }, - set: function set(key, value) { - var entry = findUncaughtFrozen(this, key); - if (entry) entry[1] = value;else this.a.push([key, value]); - }, - 'delete': function _delete(key) { - var index = arrayFindIndex(this.a, function (it) { - return it[0] === key; - }); - if (~index) this.a.splice(index, 1); - return !!~index; - } - }; - module.exports = { - getConstructor: function getConstructor(wrapper, NAME, IS_MAP, ADDER) { - var C = wrapper(function (that, iterable) { - anInstance(that, C, NAME, '_i'); - that._t = NAME; - that._i = id++; - that._l = undefined; - if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); - }); - redefineAll(C.prototype, { - 'delete': function _delete(key) { - if (!isObject(key)) return false; - var data = getWeak(key); - if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key); - return data && $has(data, this._i) && delete data[this._i]; - }, - has: function has(key) { - if (!isObject(key)) return false; - var data = getWeak(key); - if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key); - return data && $has(data, this._i); - } - }); - return C; - }, - def: function def(that, key, value) { - var data = getWeak(anObject(key), true); - if (data === true) uncaughtFrozenStore(that).set(key, value);else data[that._i] = value; - return that; - }, - ufstore: uncaughtFrozenStore - }; - - /***/ }), - /* 114 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var isObject = __w_extracthighlights_require__(18); - - module.exports = function (it, TYPE) { - if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!'); - return it; - }; - - /***/ }), - /* 115 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var global = __w_extracthighlights_require__(13); - - var $export = __w_extracthighlights_require__(12); - - var redefine = __w_extracthighlights_require__(25); - - var redefineAll = __w_extracthighlights_require__(102); - - var meta = __w_extracthighlights_require__(112); - - var forOf = __w_extracthighlights_require__(93); - - var anInstance = __w_extracthighlights_require__(92); - - var isObject = __w_extracthighlights_require__(18); - - var fails = __w_extracthighlights_require__(21); - - var $iterDetect = __w_extracthighlights_require__(73); - - var setToStringTag = __w_extracthighlights_require__(64); - - var inheritIfRequired = __w_extracthighlights_require__(116); - - module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) { - var Base = global[NAME]; - var C = Base; - var ADDER = IS_MAP ? 'set' : 'add'; - var proto = C && C.prototype; - var O = {}; - - var fixMethod = function fixMethod(KEY) { - var fn = proto[KEY]; - redefine(proto, KEY, KEY == 'delete' ? function (a) { - return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); - } : KEY == 'has' ? function has(a) { - return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); - } : KEY == 'get' ? function get(a) { - return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a); - } : KEY == 'add' ? function add(a) { - fn.call(this, a === 0 ? 0 : a); - return this; - } : function set(a, b) { - fn.call(this, a === 0 ? 0 : a, b); - return this; - }); - }; - - if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () { - new C().entries().next(); - }))) { - C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER); - redefineAll(C.prototype, methods); - meta.NEED = true; - } else { - var instance = new C(); - var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance; - var THROWS_ON_PRIMITIVES = fails(function () { - instance.has(1); - }); - var ACCEPT_ITERABLES = $iterDetect(function (iter) { - new C(iter); - }); - var BUGGY_ZERO = !IS_WEAK && fails(function () { - var $instance = new C(); - var index = 5; - - while (index--) { - $instance[ADDER](index, index); - } - - return !$instance.has(-0); - }); - - if (!ACCEPT_ITERABLES) { - C = wrapper(function (target, iterable) { - anInstance(target, C, NAME); - var that = inheritIfRequired(new Base(), target, C); - if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); - return that; - }); - C.prototype = proto; - proto.constructor = C; - } - - if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) { - fixMethod('delete'); - fixMethod('has'); - IS_MAP && fixMethod('get'); - } - - if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER); - if (IS_WEAK && proto.clear) delete proto.clear; - } - - setToStringTag(C, NAME); - O[NAME] = C; - $export($export.G + $export.W + $export.F * (C != Base), O); - if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP); - return C; - }; - - /***/ }), - /* 116 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var isObject = __w_extracthighlights_require__(18); - - var setPrototypeOf = __w_extracthighlights_require__(117).set; - - module.exports = function (that, target, C) { - var S = target.constructor; - var P; - - if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) { - setPrototypeOf(that, P); - } - - return that; - }; - - /***/ }), - /* 117 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var isObject = __w_extracthighlights_require__(18); - - var anObject = __w_extracthighlights_require__(17); - - var check = function check(O, proto) { - anObject(O); - if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!"); - }; - - module.exports = { - set: Object.setPrototypeOf || ('__proto__' in {} ? function (test, buggy, set) { - try { - set = __w_extracthighlights_require__(28)(Function.call, __w_extracthighlights_require__(118).f(Object.prototype, '__proto__').set, 2); - set(test, []); - buggy = !(test instanceof Array); - } catch (e) { - buggy = true; - } - - return function setPrototypeOf(O, proto) { - check(O, proto); - if (buggy) O.__proto__ = proto;else set(O, proto); - return O; - }; - }({}, false) : undefined), - check: check - }; - - /***/ }), - /* 118 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var pIE = __w_extracthighlights_require__(78); - - var createDesc = __w_extracthighlights_require__(24); - - var toIObject = __w_extracthighlights_require__(47); - - var toPrimitive = __w_extracthighlights_require__(23); - - var has = __w_extracthighlights_require__(26); - - var IE8_DOM_DEFINE = __w_extracthighlights_require__(19); - - var gOPD = Object.getOwnPropertyDescriptor; - exports.f = __w_extracthighlights_require__(20) ? gOPD : function getOwnPropertyDescriptor(O, P) { - O = toIObject(O); - P = toPrimitive(P, true); - if (IE8_DOM_DEFINE) try { - return gOPD(O, P); - } catch (e) {} - if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]); - }; - - /***/ }), - /* 119 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(120)('WeakMap'); - - /***/ }), - /* 120 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(12); - - module.exports = function (COLLECTION) { - $export($export.S, COLLECTION, { - of: function of() { - var length = arguments.length; - var A = new Array(length); - - while (length--) { - A[length] = arguments[length]; - } - - return new this(A); - } - }); - }; - - /***/ }), - /* 121 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(122)('WeakMap'); - - /***/ }), - /* 122 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(12); - - var aFunction = __w_extracthighlights_require__(29); - - var ctx = __w_extracthighlights_require__(28); - - var forOf = __w_extracthighlights_require__(93); - - module.exports = function (COLLECTION) { - $export($export.S, COLLECTION, { - from: function from(source) { - var mapFn = arguments[1]; - var mapping, A, n, cb; - aFunction(this); - mapping = mapFn !== undefined; - if (mapping) aFunction(mapFn); - if (source == undefined) return new this(); - A = []; - - if (mapping) { - n = 0; - cb = ctx(mapFn, arguments[2], 2); - forOf(source, false, function (nextItem) { - A.push(cb(nextItem, n++)); - }); - } else { - forOf(source, false, A.push, A); - } - - return new this(A); - } - }); - }; - - /***/ }), - /* 123 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(87); - - __w_extracthighlights_require__(88); - - __w_extracthighlights_require__(124); - - __w_extracthighlights_require__(125); - - __w_extracthighlights_require__(126); - - module.exports = __w_extracthighlights_require__(14).WeakSet; - - /***/ }), - /* 124 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var weak = __w_extracthighlights_require__(113); - - var validate = __w_extracthighlights_require__(114); - - var WEAK_SET = 'WeakSet'; - - __w_extracthighlights_require__(115)(WEAK_SET, function (get) { - return function WeakSet() { - return get(this, arguments.length > 0 ? arguments[0] : undefined); - }; - }, { - add: function add(value) { - return weak.def(validate(this, WEAK_SET), value, true); - } - }, weak, false, true); - - /***/ }), - /* 125 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(120)('WeakSet'); - - /***/ }), - /* 126 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(122)('WeakSet'); - - /***/ }), - /* 127 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(128); - - module.exports = __w_extracthighlights_require__(14).String.codePointAt; - - /***/ }), - /* 128 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(12); - - var $at = __w_extracthighlights_require__(53)(false); - - $export($export.P, 'String', { - codePointAt: function codePointAt(pos) { - return $at(this, pos); - } - }); - - /***/ }), - /* 129 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(130); - - module.exports = __w_extracthighlights_require__(14).String.fromCodePoint; - - /***/ }), - /* 130 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(12); - - var toAbsoluteIndex = __w_extracthighlights_require__(49); - - var fromCharCode = String.fromCharCode; - var $fromCodePoint = String.fromCodePoint; - $export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', { - fromCodePoint: function fromCodePoint(x) { - var res = []; - var aLen = arguments.length; - var i = 0; - var code; - - while (aLen > i) { - code = +arguments[i++]; - if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point'); - res.push(code < 0x10000 ? fromCharCode(code) : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)); - } - - return res.join(''); - } - }); - - /***/ }), - /* 131 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(132); - - __w_extracthighlights_require__(87); - - module.exports = __w_extracthighlights_require__(14).Symbol; - - /***/ }), - /* 132 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - var global = __w_extracthighlights_require__(13); - - var has = __w_extracthighlights_require__(26); - - var DESCRIPTORS = __w_extracthighlights_require__(20); - - var $export = __w_extracthighlights_require__(12); - - var redefine = __w_extracthighlights_require__(25); - - var META = __w_extracthighlights_require__(112).KEY; - - var $fails = __w_extracthighlights_require__(21); - - var shared = __w_extracthighlights_require__(36); - - var setToStringTag = __w_extracthighlights_require__(64); - - var uid = __w_extracthighlights_require__(27); - - var wks = __w_extracthighlights_require__(35); - - var wksExt = __w_extracthighlights_require__(133); - - var wksDefine = __w_extracthighlights_require__(134); - - var enumKeys = __w_extracthighlights_require__(135); - - var isArray = __w_extracthighlights_require__(111); - - var anObject = __w_extracthighlights_require__(17); - - var isObject = __w_extracthighlights_require__(18); - - var toIObject = __w_extracthighlights_require__(47); - - var toPrimitive = __w_extracthighlights_require__(23); - - var createDesc = __w_extracthighlights_require__(24); - - var _create = __w_extracthighlights_require__(57); - - var gOPNExt = __w_extracthighlights_require__(136); - - var $GOPD = __w_extracthighlights_require__(118); - - var $DP = __w_extracthighlights_require__(16); - - var $keys = __w_extracthighlights_require__(59); - - var gOPD = $GOPD.f; - var dP = $DP.f; - var gOPN = gOPNExt.f; - var $Symbol = global.Symbol; - var $JSON = global.JSON; - - var _stringify = $JSON && $JSON.stringify; - - var PROTOTYPE = 'prototype'; - var HIDDEN = wks('_hidden'); - var TO_PRIMITIVE = wks('toPrimitive'); - var isEnum = {}.propertyIsEnumerable; - var SymbolRegistry = shared('symbol-registry'); - var AllSymbols = shared('symbols'); - var OPSymbols = shared('op-symbols'); - var ObjectProto = Object[PROTOTYPE]; - var USE_NATIVE = typeof $Symbol == 'function'; - var QObject = global.QObject; - var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; - var setSymbolDesc = DESCRIPTORS && $fails(function () { - return _create(dP({}, 'a', { - get: function get() { - return dP(this, 'a', { - value: 7 - }).a; - } - })).a != 7; - }) ? function (it, key, D) { - var protoDesc = gOPD(ObjectProto, key); - if (protoDesc) delete ObjectProto[key]; - dP(it, key, D); - if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc); - } : dP; - - var wrap = function wrap(tag) { - var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]); - - sym._k = tag; - return sym; - }; - - var isSymbol = USE_NATIVE && _typeof($Symbol.iterator) == 'symbol' ? function (it) { - return _typeof(it) == 'symbol'; - } : function (it) { - return it instanceof $Symbol; - }; - - var $defineProperty = function defineProperty(it, key, D) { - if (it === ObjectProto) $defineProperty(OPSymbols, key, D); - anObject(it); - key = toPrimitive(key, true); - anObject(D); - - if (has(AllSymbols, key)) { - if (!D.enumerable) { - if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {})); - it[HIDDEN][key] = true; - } else { - if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false; - D = _create(D, { - enumerable: createDesc(0, false) - }); - } - - return setSymbolDesc(it, key, D); - } - - return dP(it, key, D); - }; - - var $defineProperties = function defineProperties(it, P) { - anObject(it); - var keys = enumKeys(P = toIObject(P)); - var i = 0; - var l = keys.length; - var key; - - while (l > i) { - $defineProperty(it, key = keys[i++], P[key]); - } - - return it; - }; - - var $create = function create(it, P) { - return P === undefined ? _create(it) : $defineProperties(_create(it), P); - }; - - var $propertyIsEnumerable = function propertyIsEnumerable(key) { - var E = isEnum.call(this, key = toPrimitive(key, true)); - if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false; - return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true; - }; - - var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) { - it = toIObject(it); - key = toPrimitive(key, true); - if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return; - var D = gOPD(it, key); - if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true; - return D; - }; - - var $getOwnPropertyNames = function getOwnPropertyNames(it) { - var names = gOPN(toIObject(it)); - var result = []; - var i = 0; - var key; - - while (names.length > i) { - if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key); - } - - return result; - }; - - var $getOwnPropertySymbols = function getOwnPropertySymbols(it) { - var IS_OP = it === ObjectProto; - var names = gOPN(IS_OP ? OPSymbols : toIObject(it)); - var result = []; - var i = 0; - var key; - - while (names.length > i) { - if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]); - } - - return result; - }; - - if (!USE_NATIVE) { - $Symbol = function _Symbol() { - if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!'); - var tag = uid(arguments.length > 0 ? arguments[0] : undefined); - - var $set = function $set(value) { - if (this === ObjectProto) $set.call(OPSymbols, value); - if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false; - setSymbolDesc(this, tag, createDesc(1, value)); - }; - - if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { - configurable: true, - set: $set - }); - return wrap(tag); - }; - - redefine($Symbol[PROTOTYPE], 'toString', function toString() { - return this._k; - }); - $GOPD.f = $getOwnPropertyDescriptor; - $DP.f = $defineProperty; - __w_extracthighlights_require__(137).f = gOPNExt.f = $getOwnPropertyNames; - __w_extracthighlights_require__(78).f = $propertyIsEnumerable; - __w_extracthighlights_require__(77).f = $getOwnPropertySymbols; - - if (DESCRIPTORS && !__w_extracthighlights_require__(37)) { - redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true); - } - - wksExt.f = function (name) { - return wrap(wks(name)); - }; - } - - $export($export.G + $export.W + $export.F * !USE_NATIVE, { - Symbol: $Symbol - }); - - for (var es6Symbols = 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'.split(','), j = 0; es6Symbols.length > j;) { - wks(es6Symbols[j++]); - } - - for (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) { - wksDefine(wellKnownSymbols[k++]); - } - - $export($export.S + $export.F * !USE_NATIVE, 'Symbol', { - 'for': function _for(key) { - return has(SymbolRegistry, key += '') ? SymbolRegistry[key] : SymbolRegistry[key] = $Symbol(key); - }, - keyFor: function keyFor(sym) { - if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!'); - - for (var key in SymbolRegistry) { - if (SymbolRegistry[key] === sym) return key; - } - }, - useSetter: function useSetter() { - setter = true; - }, - useSimple: function useSimple() { - setter = false; - } - }); - $export($export.S + $export.F * !USE_NATIVE, 'Object', { - create: $create, - defineProperty: $defineProperty, - defineProperties: $defineProperties, - getOwnPropertyDescriptor: $getOwnPropertyDescriptor, - getOwnPropertyNames: $getOwnPropertyNames, - getOwnPropertySymbols: $getOwnPropertySymbols - }); - $JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () { - var S = $Symbol(); - return _stringify([S]) != '[null]' || _stringify({ - a: S - }) != '{}' || _stringify(Object(S)) != '{}'; - })), 'JSON', { - stringify: function stringify(it) { - var args = [it]; - var i = 1; - var replacer, $replacer; - - while (arguments.length > i) { - args.push(arguments[i++]); - } - - $replacer = replacer = args[1]; - if (!isObject(replacer) && it === undefined || isSymbol(it)) return; - if (!isArray(replacer)) replacer = function replacer(key, value) { - if (typeof $replacer == 'function') value = $replacer.call(this, key, value); - if (!isSymbol(value)) return value; - }; - args[1] = replacer; - return _stringify.apply($JSON, args); - } - }); - $Symbol[PROTOTYPE][TO_PRIMITIVE] || __w_extracthighlights_require__(15)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf); - setToStringTag($Symbol, 'Symbol'); - setToStringTag(Math, 'Math', true); - setToStringTag(global.JSON, 'JSON', true); - - /***/ }), - /* 133 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - exports.f = __w_extracthighlights_require__(35); - - /***/ }), - /* 134 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var global = __w_extracthighlights_require__(13); - - var core = __w_extracthighlights_require__(14); - - var LIBRARY = __w_extracthighlights_require__(37); - - var wksExt = __w_extracthighlights_require__(133); - - var defineProperty = __w_extracthighlights_require__(16).f; - - module.exports = function (name) { - var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {}); - if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { - value: wksExt.f(name) - }); - }; - - /***/ }), - /* 135 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var getKeys = __w_extracthighlights_require__(59); - - var gOPS = __w_extracthighlights_require__(77); - - var pIE = __w_extracthighlights_require__(78); - - module.exports = function (it) { - var result = getKeys(it); - var getSymbols = gOPS.f; - - if (getSymbols) { - var symbols = getSymbols(it); - var isEnum = pIE.f; - var i = 0; - var key; - - while (symbols.length > i) { - if (isEnum.call(it, key = symbols[i++])) result.push(key); - } - } - - return result; - }; - - /***/ }), - /* 136 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - var toIObject = __w_extracthighlights_require__(47); - - var gOPN = __w_extracthighlights_require__(137).f; - - var toString = {}.toString; - var windowNames = (typeof window === "undefined" ? "undefined" : _typeof(window)) == 'object' && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : []; - - var getWindowNames = function getWindowNames(it) { - try { - return gOPN(it); - } catch (e) { - return windowNames.slice(); - } - }; - - module.exports.f = function getOwnPropertyNames(it) { - return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it)); - }; - - /***/ }), - /* 137 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $keys = __w_extracthighlights_require__(60); - - var hiddenKeys = __w_extracthighlights_require__(62).concat('length', 'prototype'); - - exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { - return $keys(O, hiddenKeys); - }; - - /***/ }), - /* 138 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(139); - - module.exports = __w_extracthighlights_require__(14).String.padStart; - - /***/ }), - /* 139 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(12); - - var $pad = __w_extracthighlights_require__(140); - - var userAgent = __w_extracthighlights_require__(100); - - $export($export.P + $export.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(userAgent), 'String', { - padStart: function padStart(maxLength) { - return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true); - } - }); - - /***/ }), - /* 140 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var toLength = __w_extracthighlights_require__(30); - - var repeat = __w_extracthighlights_require__(141); - - var defined = __w_extracthighlights_require__(38); - - module.exports = function (that, maxLength, fillString, left) { - var S = String(defined(that)); - var stringLength = S.length; - var fillStr = fillString === undefined ? ' ' : String(fillString); - var intMaxLength = toLength(maxLength); - if (intMaxLength <= stringLength || fillStr == '') return S; - var fillLen = intMaxLength - stringLength; - var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length)); - if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen); - return left ? stringFiller + S : S + stringFiller; - }; - - /***/ }), - /* 141 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var toInteger = __w_extracthighlights_require__(31); - - var defined = __w_extracthighlights_require__(38); - - module.exports = function repeat(count) { - var str = String(defined(this)); - var res = ''; - var n = toInteger(count); - if (n < 0 || n == Infinity) throw RangeError("Count can't be negative"); - - for (; n > 0; (n >>>= 1) && (str += str)) { - if (n & 1) res += str; - } - - return res; - }; - - /***/ }), - /* 142 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(143); - - module.exports = __w_extracthighlights_require__(14).String.padEnd; - - /***/ }), - /* 143 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(12); - - var $pad = __w_extracthighlights_require__(140); - - var userAgent = __w_extracthighlights_require__(100); - - $export($export.P + $export.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(userAgent), 'String', { - padEnd: function padEnd(maxLength) { - return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false); - } - }); - - /***/ }), - /* 144 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(145); - - module.exports = __w_extracthighlights_require__(14).Object.values; - - /***/ }), - /* 145 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(12); - - var $values = __w_extracthighlights_require__(146)(false); - - $export($export.S, 'Object', { - values: function values(it) { - return $values(it); - } - }); - - /***/ }), - /* 146 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var getKeys = __w_extracthighlights_require__(59); - - var toIObject = __w_extracthighlights_require__(47); - - var isEnum = __w_extracthighlights_require__(78).f; - - module.exports = function (isEntries) { - return function (it) { - var O = toIObject(it); - var keys = getKeys(O); - var length = keys.length; - var i = 0; - var result = []; - var key; - - while (length > i) { - if (isEnum.call(O, key = keys[i++])) { - result.push(isEntries ? [key, O[key]] : O[key]); - } - } - - return result; - }; - }; - - /***/ }), - /* 147 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - { - var isReadableStreamSupported = false; - - if (typeof ReadableStream !== 'undefined') { - try { - new ReadableStream({ - start: function start(controller) { - controller.close(); - } - }); - isReadableStreamSupported = true; - } catch (e) {} - } - - if (isReadableStreamSupported) { - exports.ReadableStream = ReadableStream; - } else { - exports.ReadableStream = __w_extracthighlights_require__(148).ReadableStream; - } - } - - /***/ }), - /* 148 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - function _typeof2(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof2(obj); } - - (function (e, a) { - for (var i in a) { - e[i] = a[i]; - } - })(exports, function (modules) { - var installedModules = {}; - - function __w_extracthighlights_require__(moduleId) { - if (installedModules[moduleId]) return installedModules[moduleId].exports; - var module = installedModules[moduleId] = { - i: moduleId, - l: false, - exports: {} - }; - modules[moduleId].call(module.exports, module, module.exports, __w_extracthighlights_require__); - module.l = true; - return module.exports; - } - - __w_extracthighlights_require__.m = modules; - __w_extracthighlights_require__.c = installedModules; - - __w_extracthighlights_require__.i = function (value) { - return value; - }; - - __w_extracthighlights_require__.d = function (exports, name, getter) { - if (!__w_extracthighlights_require__.o(exports, name)) { - Object.defineProperty(exports, name, { - configurable: false, - enumerable: true, - get: getter - }); - } - }; - - __w_extracthighlights_require__.n = function (module) { - var getter = module && module.__esModule ? function getDefault() { - return module['default']; - } : function getModuleExports() { - return module; - }; - - __w_extracthighlights_require__.d(getter, 'a', getter); - - return getter; - }; - - __w_extracthighlights_require__.o = function (object, property) { - return Object.prototype.hasOwnProperty.call(object, property); - }; - - __w_extracthighlights_require__.p = ""; - return __w_extracthighlights_require__(__w_extracthighlights_require__.s = 7); - }([function (module, exports, __w_extracthighlights_require__) { - - var _typeof = typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol" ? function (obj) { - return _typeof2(obj); - } : function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : _typeof2(obj); - }; - - var _require = __w_extracthighlights_require__(1), - assert = _require.assert; - - function IsPropertyKey(argument) { - return typeof argument === 'string' || (typeof argument === 'undefined' ? 'undefined' : _typeof(argument)) === 'symbol'; - } - - exports.typeIsObject = function (x) { - return (typeof x === 'undefined' ? 'undefined' : _typeof(x)) === 'object' && x !== null || typeof x === 'function'; - }; - - exports.createDataProperty = function (o, p, v) { - assert(exports.typeIsObject(o)); - Object.defineProperty(o, p, { - value: v, - writable: true, - enumerable: true, - configurable: true - }); - }; - - exports.createArrayFromList = function (elements) { - return elements.slice(); - }; - - exports.ArrayBufferCopy = function (dest, destOffset, src, srcOffset, n) { - new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset); - }; - - exports.CreateIterResultObject = function (value, done) { - assert(typeof done === 'boolean'); - var obj = {}; - Object.defineProperty(obj, 'value', { - value: value, - enumerable: true, - writable: true, - configurable: true - }); - Object.defineProperty(obj, 'done', { - value: done, - enumerable: true, - writable: true, - configurable: true - }); - return obj; - }; - - exports.IsFiniteNonNegativeNumber = function (v) { - if (Number.isNaN(v)) { - return false; - } - - if (v === Infinity) { - return false; - } - - if (v < 0) { - return false; - } - - return true; - }; - - function Call(F, V, args) { - if (typeof F !== 'function') { - throw new TypeError('Argument is not a function'); - } - - return Function.prototype.apply.call(F, V, args); - } - - exports.InvokeOrNoop = function (O, P, args) { - assert(O !== undefined); - assert(IsPropertyKey(P)); - assert(Array.isArray(args)); - var method = O[P]; - - if (method === undefined) { - return undefined; - } - - return Call(method, O, args); - }; - - exports.PromiseInvokeOrNoop = function (O, P, args) { - assert(O !== undefined); - assert(IsPropertyKey(P)); - assert(Array.isArray(args)); - - try { - return Promise.resolve(exports.InvokeOrNoop(O, P, args)); - } catch (returnValueE) { - return Promise.reject(returnValueE); - } - }; - - exports.PromiseInvokeOrPerformFallback = function (O, P, args, F, argsF) { - assert(O !== undefined); - assert(IsPropertyKey(P)); - assert(Array.isArray(args)); - assert(Array.isArray(argsF)); - var method = void 0; - - try { - method = O[P]; - } catch (methodE) { - return Promise.reject(methodE); - } - - if (method === undefined) { - return F.apply(null, argsF); - } - - try { - return Promise.resolve(Call(method, O, args)); - } catch (e) { - return Promise.reject(e); - } - }; - - exports.TransferArrayBuffer = function (O) { - return O.slice(); - }; - - exports.ValidateAndNormalizeHighWaterMark = function (highWaterMark) { - highWaterMark = Number(highWaterMark); - - if (Number.isNaN(highWaterMark) || highWaterMark < 0) { - throw new RangeError('highWaterMark property of a queuing strategy must be non-negative and non-NaN'); - } - - return highWaterMark; - }; - - exports.ValidateAndNormalizeQueuingStrategy = function (size, highWaterMark) { - if (size !== undefined && typeof size !== 'function') { - throw new TypeError('size property of a queuing strategy must be a function'); - } - - highWaterMark = exports.ValidateAndNormalizeHighWaterMark(highWaterMark); - return { - size: size, - highWaterMark: highWaterMark - }; - }; - }, function (module, exports, __w_extracthighlights_require__) { - - function rethrowAssertionErrorRejection(e) { - if (e && e.constructor === AssertionError) { - setTimeout(function () { - throw e; - }, 0); - } - } - - function AssertionError(message) { - this.name = 'AssertionError'; - this.message = message || ''; - this.stack = new Error().stack; - } - - AssertionError.prototype = Object.create(Error.prototype); - AssertionError.prototype.constructor = AssertionError; - - function assert(value, message) { - if (!value) { - throw new AssertionError(message); - } - } - - module.exports = { - rethrowAssertionErrorRejection: rethrowAssertionErrorRejection, - AssertionError: AssertionError, - assert: assert - }; - }, function (module, exports, __w_extracthighlights_require__) { - - var _createClass = function () { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - return function (Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps); - if (staticProps) defineProperties(Constructor, staticProps); - return Constructor; - }; - }(); - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - var _require = __w_extracthighlights_require__(0), - InvokeOrNoop = _require.InvokeOrNoop, - PromiseInvokeOrNoop = _require.PromiseInvokeOrNoop, - ValidateAndNormalizeQueuingStrategy = _require.ValidateAndNormalizeQueuingStrategy, - typeIsObject = _require.typeIsObject; - - var _require2 = __w_extracthighlights_require__(1), - assert = _require2.assert, - rethrowAssertionErrorRejection = _require2.rethrowAssertionErrorRejection; - - var _require3 = __w_extracthighlights_require__(3), - DequeueValue = _require3.DequeueValue, - EnqueueValueWithSize = _require3.EnqueueValueWithSize, - PeekQueueValue = _require3.PeekQueueValue, - ResetQueue = _require3.ResetQueue; - - var WritableStream = function () { - function WritableStream() { - var underlyingSink = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - size = _ref.size, - _ref$highWaterMark = _ref.highWaterMark, - highWaterMark = _ref$highWaterMark === undefined ? 1 : _ref$highWaterMark; - - _classCallCheck(this, WritableStream); - - this._state = 'writable'; - this._storedError = undefined; - this._writer = undefined; - this._writableStreamController = undefined; - this._writeRequests = []; - this._inFlightWriteRequest = undefined; - this._closeRequest = undefined; - this._inFlightCloseRequest = undefined; - this._pendingAbortRequest = undefined; - this._backpressure = false; - var type = underlyingSink.type; - - if (type !== undefined) { - throw new RangeError('Invalid type is specified'); - } - - this._writableStreamController = new WritableStreamDefaultController(this, underlyingSink, size, highWaterMark); - - this._writableStreamController.__startSteps(); - } - - _createClass(WritableStream, [{ - key: 'abort', - value: function abort(reason) { - if (IsWritableStream(this) === false) { - return Promise.reject(streamBrandCheckException('abort')); - } - - if (IsWritableStreamLocked(this) === true) { - return Promise.reject(new TypeError('Cannot abort a stream that already has a writer')); - } - - return WritableStreamAbort(this, reason); - } - }, { - key: 'getWriter', - value: function getWriter() { - if (IsWritableStream(this) === false) { - throw streamBrandCheckException('getWriter'); - } - - return AcquireWritableStreamDefaultWriter(this); - } - }, { - key: 'locked', - get: function get() { - if (IsWritableStream(this) === false) { - throw streamBrandCheckException('locked'); - } - - return IsWritableStreamLocked(this); - } - }]); - - return WritableStream; - }(); - - module.exports = { - AcquireWritableStreamDefaultWriter: AcquireWritableStreamDefaultWriter, - IsWritableStream: IsWritableStream, - IsWritableStreamLocked: IsWritableStreamLocked, - WritableStream: WritableStream, - WritableStreamAbort: WritableStreamAbort, - WritableStreamDefaultControllerError: WritableStreamDefaultControllerError, - WritableStreamDefaultWriterCloseWithErrorPropagation: WritableStreamDefaultWriterCloseWithErrorPropagation, - WritableStreamDefaultWriterRelease: WritableStreamDefaultWriterRelease, - WritableStreamDefaultWriterWrite: WritableStreamDefaultWriterWrite, - WritableStreamCloseQueuedOrInFlight: WritableStreamCloseQueuedOrInFlight - }; - - function AcquireWritableStreamDefaultWriter(stream) { - return new WritableStreamDefaultWriter(stream); - } - - function IsWritableStream(x) { - if (!typeIsObject(x)) { - return false; - } - - if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) { - return false; - } - - return true; - } - - function IsWritableStreamLocked(stream) { - assert(IsWritableStream(stream) === true, 'IsWritableStreamLocked should only be used on known writable streams'); - - if (stream._writer === undefined) { - return false; - } - - return true; - } - - function WritableStreamAbort(stream, reason) { - var state = stream._state; - - if (state === 'closed') { - return Promise.resolve(undefined); - } - - if (state === 'errored') { - return Promise.reject(stream._storedError); - } - - var error = new TypeError('Requested to abort'); - - if (stream._pendingAbortRequest !== undefined) { - return Promise.reject(error); - } - - assert(state === 'writable' || state === 'erroring', 'state must be writable or erroring'); - var wasAlreadyErroring = false; - - if (state === 'erroring') { - wasAlreadyErroring = true; - reason = undefined; - } - - var promise = new Promise(function (resolve, reject) { - stream._pendingAbortRequest = { - _resolve: resolve, - _reject: reject, - _reason: reason, - _wasAlreadyErroring: wasAlreadyErroring - }; - }); - - if (wasAlreadyErroring === false) { - WritableStreamStartErroring(stream, error); - } - - return promise; - } - - function WritableStreamAddWriteRequest(stream) { - assert(IsWritableStreamLocked(stream) === true); - assert(stream._state === 'writable'); - var promise = new Promise(function (resolve, reject) { - var writeRequest = { - _resolve: resolve, - _reject: reject - }; - - stream._writeRequests.push(writeRequest); - }); - return promise; - } - - function WritableStreamDealWithRejection(stream, error) { - var state = stream._state; - - if (state === 'writable') { - WritableStreamStartErroring(stream, error); - return; - } - - assert(state === 'erroring'); - WritableStreamFinishErroring(stream); - } - - function WritableStreamStartErroring(stream, reason) { - assert(stream._storedError === undefined, 'stream._storedError === undefined'); - assert(stream._state === 'writable', 'state must be writable'); - var controller = stream._writableStreamController; - assert(controller !== undefined, 'controller must not be undefined'); - stream._state = 'erroring'; - stream._storedError = reason; - var writer = stream._writer; - - if (writer !== undefined) { - WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason); - } - - if (WritableStreamHasOperationMarkedInFlight(stream) === false && controller._started === true) { - WritableStreamFinishErroring(stream); - } - } - - function WritableStreamFinishErroring(stream) { - assert(stream._state === 'erroring', 'stream._state === erroring'); - assert(WritableStreamHasOperationMarkedInFlight(stream) === false, 'WritableStreamHasOperationMarkedInFlight(stream) === false'); - stream._state = 'errored'; - - stream._writableStreamController.__errorSteps(); - - var storedError = stream._storedError; - - for (var i = 0; i < stream._writeRequests.length; i++) { - var writeRequest = stream._writeRequests[i]; - - writeRequest._reject(storedError); - } - - stream._writeRequests = []; - - if (stream._pendingAbortRequest === undefined) { - WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); - return; - } - - var abortRequest = stream._pendingAbortRequest; - stream._pendingAbortRequest = undefined; - - if (abortRequest._wasAlreadyErroring === true) { - abortRequest._reject(storedError); - - WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); - return; - } - - var promise = stream._writableStreamController.__abortSteps(abortRequest._reason); - - promise.then(function () { - abortRequest._resolve(); - - WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); - }, function (reason) { - abortRequest._reject(reason); - - WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); - }); - } - - function WritableStreamFinishInFlightWrite(stream) { - assert(stream._inFlightWriteRequest !== undefined); - - stream._inFlightWriteRequest._resolve(undefined); - - stream._inFlightWriteRequest = undefined; - } - - function WritableStreamFinishInFlightWriteWithError(stream, error) { - assert(stream._inFlightWriteRequest !== undefined); - - stream._inFlightWriteRequest._reject(error); - - stream._inFlightWriteRequest = undefined; - assert(stream._state === 'writable' || stream._state === 'erroring'); - WritableStreamDealWithRejection(stream, error); - } - - function WritableStreamFinishInFlightClose(stream) { - assert(stream._inFlightCloseRequest !== undefined); - - stream._inFlightCloseRequest._resolve(undefined); - - stream._inFlightCloseRequest = undefined; - var state = stream._state; - assert(state === 'writable' || state === 'erroring'); - - if (state === 'erroring') { - stream._storedError = undefined; - - if (stream._pendingAbortRequest !== undefined) { - stream._pendingAbortRequest._resolve(); - - stream._pendingAbortRequest = undefined; - } - } - - stream._state = 'closed'; - var writer = stream._writer; - - if (writer !== undefined) { - defaultWriterClosedPromiseResolve(writer); - } - - assert(stream._pendingAbortRequest === undefined, 'stream._pendingAbortRequest === undefined'); - assert(stream._storedError === undefined, 'stream._storedError === undefined'); - } - - function WritableStreamFinishInFlightCloseWithError(stream, error) { - assert(stream._inFlightCloseRequest !== undefined); - - stream._inFlightCloseRequest._reject(error); - - stream._inFlightCloseRequest = undefined; - assert(stream._state === 'writable' || stream._state === 'erroring'); - - if (stream._pendingAbortRequest !== undefined) { - stream._pendingAbortRequest._reject(error); - - stream._pendingAbortRequest = undefined; - } - - WritableStreamDealWithRejection(stream, error); - } - - function WritableStreamCloseQueuedOrInFlight(stream) { - if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) { - return false; - } - - return true; - } - - function WritableStreamHasOperationMarkedInFlight(stream) { - if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) { - return false; - } - - return true; - } - - function WritableStreamMarkCloseRequestInFlight(stream) { - assert(stream._inFlightCloseRequest === undefined); - assert(stream._closeRequest !== undefined); - stream._inFlightCloseRequest = stream._closeRequest; - stream._closeRequest = undefined; - } - - function WritableStreamMarkFirstWriteRequestInFlight(stream) { - assert(stream._inFlightWriteRequest === undefined, 'there must be no pending write request'); - assert(stream._writeRequests.length !== 0, 'writeRequests must not be empty'); - stream._inFlightWriteRequest = stream._writeRequests.shift(); - } - - function WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream) { - assert(stream._state === 'errored', '_stream_.[[state]] is `"errored"`'); - - if (stream._closeRequest !== undefined) { - assert(stream._inFlightCloseRequest === undefined); - - stream._closeRequest._reject(stream._storedError); - - stream._closeRequest = undefined; - } - - var writer = stream._writer; - - if (writer !== undefined) { - defaultWriterClosedPromiseReject(writer, stream._storedError); - - writer._closedPromise.catch(function () {}); - } - } - - function WritableStreamUpdateBackpressure(stream, backpressure) { - assert(stream._state === 'writable'); - assert(WritableStreamCloseQueuedOrInFlight(stream) === false); - var writer = stream._writer; - - if (writer !== undefined && backpressure !== stream._backpressure) { - if (backpressure === true) { - defaultWriterReadyPromiseReset(writer); - } else { - assert(backpressure === false); - defaultWriterReadyPromiseResolve(writer); - } - } - - stream._backpressure = backpressure; - } - - var WritableStreamDefaultWriter = function () { - function WritableStreamDefaultWriter(stream) { - _classCallCheck(this, WritableStreamDefaultWriter); - - if (IsWritableStream(stream) === false) { - throw new TypeError('WritableStreamDefaultWriter can only be constructed with a WritableStream instance'); - } - - if (IsWritableStreamLocked(stream) === true) { - throw new TypeError('This stream has already been locked for exclusive writing by another writer'); - } - - this._ownerWritableStream = stream; - stream._writer = this; - var state = stream._state; - - if (state === 'writable') { - if (WritableStreamCloseQueuedOrInFlight(stream) === false && stream._backpressure === true) { - defaultWriterReadyPromiseInitialize(this); - } else { - defaultWriterReadyPromiseInitializeAsResolved(this); - } - - defaultWriterClosedPromiseInitialize(this); - } else if (state === 'erroring') { - defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError); - - this._readyPromise.catch(function () {}); - - defaultWriterClosedPromiseInitialize(this); - } else if (state === 'closed') { - defaultWriterReadyPromiseInitializeAsResolved(this); - defaultWriterClosedPromiseInitializeAsResolved(this); - } else { - assert(state === 'errored', 'state must be errored'); - var storedError = stream._storedError; - defaultWriterReadyPromiseInitializeAsRejected(this, storedError); - - this._readyPromise.catch(function () {}); - - defaultWriterClosedPromiseInitializeAsRejected(this, storedError); - - this._closedPromise.catch(function () {}); - } - } - - _createClass(WritableStreamDefaultWriter, [{ - key: 'abort', - value: function abort(reason) { - if (IsWritableStreamDefaultWriter(this) === false) { - return Promise.reject(defaultWriterBrandCheckException('abort')); - } - - if (this._ownerWritableStream === undefined) { - return Promise.reject(defaultWriterLockException('abort')); - } - - return WritableStreamDefaultWriterAbort(this, reason); - } - }, { - key: 'close', - value: function close() { - if (IsWritableStreamDefaultWriter(this) === false) { - return Promise.reject(defaultWriterBrandCheckException('close')); - } - - var stream = this._ownerWritableStream; - - if (stream === undefined) { - return Promise.reject(defaultWriterLockException('close')); - } - - if (WritableStreamCloseQueuedOrInFlight(stream) === true) { - return Promise.reject(new TypeError('cannot close an already-closing stream')); - } - - return WritableStreamDefaultWriterClose(this); - } - }, { - key: 'releaseLock', - value: function releaseLock() { - if (IsWritableStreamDefaultWriter(this) === false) { - throw defaultWriterBrandCheckException('releaseLock'); - } - - var stream = this._ownerWritableStream; - - if (stream === undefined) { - return; - } - - assert(stream._writer !== undefined); - WritableStreamDefaultWriterRelease(this); - } - }, { - key: 'write', - value: function write(chunk) { - if (IsWritableStreamDefaultWriter(this) === false) { - return Promise.reject(defaultWriterBrandCheckException('write')); - } - - if (this._ownerWritableStream === undefined) { - return Promise.reject(defaultWriterLockException('write to')); - } - - return WritableStreamDefaultWriterWrite(this, chunk); - } - }, { - key: 'closed', - get: function get() { - if (IsWritableStreamDefaultWriter(this) === false) { - return Promise.reject(defaultWriterBrandCheckException('closed')); - } - - return this._closedPromise; - } - }, { - key: 'desiredSize', - get: function get() { - if (IsWritableStreamDefaultWriter(this) === false) { - throw defaultWriterBrandCheckException('desiredSize'); - } - - if (this._ownerWritableStream === undefined) { - throw defaultWriterLockException('desiredSize'); - } - - return WritableStreamDefaultWriterGetDesiredSize(this); - } - }, { - key: 'ready', - get: function get() { - if (IsWritableStreamDefaultWriter(this) === false) { - return Promise.reject(defaultWriterBrandCheckException('ready')); - } - - return this._readyPromise; - } - }]); - - return WritableStreamDefaultWriter; - }(); - - function IsWritableStreamDefaultWriter(x) { - if (!typeIsObject(x)) { - return false; - } - - if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) { - return false; - } - - return true; - } - - function WritableStreamDefaultWriterAbort(writer, reason) { - var stream = writer._ownerWritableStream; - assert(stream !== undefined); - return WritableStreamAbort(stream, reason); - } - - function WritableStreamDefaultWriterClose(writer) { - var stream = writer._ownerWritableStream; - assert(stream !== undefined); - var state = stream._state; - - if (state === 'closed' || state === 'errored') { - return Promise.reject(new TypeError('The stream (in ' + state + ' state) is not in the writable state and cannot be closed')); - } - - assert(state === 'writable' || state === 'erroring'); - assert(WritableStreamCloseQueuedOrInFlight(stream) === false); - var promise = new Promise(function (resolve, reject) { - var closeRequest = { - _resolve: resolve, - _reject: reject - }; - stream._closeRequest = closeRequest; - }); - - if (stream._backpressure === true && state === 'writable') { - defaultWriterReadyPromiseResolve(writer); - } - - WritableStreamDefaultControllerClose(stream._writableStreamController); - return promise; - } - - function WritableStreamDefaultWriterCloseWithErrorPropagation(writer) { - var stream = writer._ownerWritableStream; - assert(stream !== undefined); - var state = stream._state; - - if (WritableStreamCloseQueuedOrInFlight(stream) === true || state === 'closed') { - return Promise.resolve(); - } - - if (state === 'errored') { - return Promise.reject(stream._storedError); - } - - assert(state === 'writable' || state === 'erroring'); - return WritableStreamDefaultWriterClose(writer); - } - - function WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, error) { - if (writer._closedPromiseState === 'pending') { - defaultWriterClosedPromiseReject(writer, error); - } else { - defaultWriterClosedPromiseResetToRejected(writer, error); - } - - writer._closedPromise.catch(function () {}); - } - - function WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, error) { - if (writer._readyPromiseState === 'pending') { - defaultWriterReadyPromiseReject(writer, error); - } else { - defaultWriterReadyPromiseResetToRejected(writer, error); - } - - writer._readyPromise.catch(function () {}); - } - - function WritableStreamDefaultWriterGetDesiredSize(writer) { - var stream = writer._ownerWritableStream; - var state = stream._state; - - if (state === 'errored' || state === 'erroring') { - return null; - } - - if (state === 'closed') { - return 0; - } - - return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController); - } - - function WritableStreamDefaultWriterRelease(writer) { - var stream = writer._ownerWritableStream; - assert(stream !== undefined); - assert(stream._writer === writer); - var releasedError = new TypeError('Writer was released and can no longer be used to monitor the stream\'s closedness'); - WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError); - WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError); - stream._writer = undefined; - writer._ownerWritableStream = undefined; - } - - function WritableStreamDefaultWriterWrite(writer, chunk) { - var stream = writer._ownerWritableStream; - assert(stream !== undefined); - var controller = stream._writableStreamController; - var chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk); - - if (stream !== writer._ownerWritableStream) { - return Promise.reject(defaultWriterLockException('write to')); - } - - var state = stream._state; - - if (state === 'errored') { - return Promise.reject(stream._storedError); - } - - if (WritableStreamCloseQueuedOrInFlight(stream) === true || state === 'closed') { - return Promise.reject(new TypeError('The stream is closing or closed and cannot be written to')); - } - - if (state === 'erroring') { - return Promise.reject(stream._storedError); - } - - assert(state === 'writable'); - var promise = WritableStreamAddWriteRequest(stream); - WritableStreamDefaultControllerWrite(controller, chunk, chunkSize); - return promise; - } - - var WritableStreamDefaultController = function () { - function WritableStreamDefaultController(stream, underlyingSink, size, highWaterMark) { - _classCallCheck(this, WritableStreamDefaultController); - - if (IsWritableStream(stream) === false) { - throw new TypeError('WritableStreamDefaultController can only be constructed with a WritableStream instance'); - } - - if (stream._writableStreamController !== undefined) { - throw new TypeError('WritableStreamDefaultController instances can only be created by the WritableStream constructor'); - } - - this._controlledWritableStream = stream; - this._underlyingSink = underlyingSink; - this._queue = undefined; - this._queueTotalSize = undefined; - ResetQueue(this); - this._started = false; - var normalizedStrategy = ValidateAndNormalizeQueuingStrategy(size, highWaterMark); - this._strategySize = normalizedStrategy.size; - this._strategyHWM = normalizedStrategy.highWaterMark; - var backpressure = WritableStreamDefaultControllerGetBackpressure(this); - WritableStreamUpdateBackpressure(stream, backpressure); - } - - _createClass(WritableStreamDefaultController, [{ - key: 'error', - value: function error(e) { - if (IsWritableStreamDefaultController(this) === false) { - throw new TypeError('WritableStreamDefaultController.prototype.error can only be used on a WritableStreamDefaultController'); - } - - var state = this._controlledWritableStream._state; - - if (state !== 'writable') { - return; - } - - WritableStreamDefaultControllerError(this, e); - } - }, { - key: '__abortSteps', - value: function __abortSteps(reason) { - return PromiseInvokeOrNoop(this._underlyingSink, 'abort', [reason]); - } - }, { - key: '__errorSteps', - value: function __errorSteps() { - ResetQueue(this); - } - }, { - key: '__startSteps', - value: function __startSteps() { - var _this = this; - - var startResult = InvokeOrNoop(this._underlyingSink, 'start', [this]); - var stream = this._controlledWritableStream; - Promise.resolve(startResult).then(function () { - assert(stream._state === 'writable' || stream._state === 'erroring'); - _this._started = true; - WritableStreamDefaultControllerAdvanceQueueIfNeeded(_this); - }, function (r) { - assert(stream._state === 'writable' || stream._state === 'erroring'); - _this._started = true; - WritableStreamDealWithRejection(stream, r); - }).catch(rethrowAssertionErrorRejection); - } - }]); - - return WritableStreamDefaultController; - }(); - - function WritableStreamDefaultControllerClose(controller) { - EnqueueValueWithSize(controller, 'close', 0); - WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); - } - - function WritableStreamDefaultControllerGetChunkSize(controller, chunk) { - var strategySize = controller._strategySize; - - if (strategySize === undefined) { - return 1; - } - - try { - return strategySize(chunk); - } catch (chunkSizeE) { - WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE); - return 1; - } - } - - function WritableStreamDefaultControllerGetDesiredSize(controller) { - return controller._strategyHWM - controller._queueTotalSize; - } - - function WritableStreamDefaultControllerWrite(controller, chunk, chunkSize) { - var writeRecord = { - chunk: chunk - }; - - try { - EnqueueValueWithSize(controller, writeRecord, chunkSize); - } catch (enqueueE) { - WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE); - return; - } - - var stream = controller._controlledWritableStream; - - if (WritableStreamCloseQueuedOrInFlight(stream) === false && stream._state === 'writable') { - var backpressure = WritableStreamDefaultControllerGetBackpressure(controller); - WritableStreamUpdateBackpressure(stream, backpressure); - } - - WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); - } - - function IsWritableStreamDefaultController(x) { - if (!typeIsObject(x)) { - return false; - } - - if (!Object.prototype.hasOwnProperty.call(x, '_underlyingSink')) { - return false; - } - - return true; - } - - function WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller) { - var stream = controller._controlledWritableStream; - - if (controller._started === false) { - return; - } - - if (stream._inFlightWriteRequest !== undefined) { - return; - } - - var state = stream._state; - - if (state === 'closed' || state === 'errored') { - return; - } - - if (state === 'erroring') { - WritableStreamFinishErroring(stream); - return; - } - - if (controller._queue.length === 0) { - return; - } - - var writeRecord = PeekQueueValue(controller); - - if (writeRecord === 'close') { - WritableStreamDefaultControllerProcessClose(controller); - } else { - WritableStreamDefaultControllerProcessWrite(controller, writeRecord.chunk); - } - } - - function WritableStreamDefaultControllerErrorIfNeeded(controller, error) { - if (controller._controlledWritableStream._state === 'writable') { - WritableStreamDefaultControllerError(controller, error); - } - } - - function WritableStreamDefaultControllerProcessClose(controller) { - var stream = controller._controlledWritableStream; - WritableStreamMarkCloseRequestInFlight(stream); - DequeueValue(controller); - assert(controller._queue.length === 0, 'queue must be empty once the final write record is dequeued'); - var sinkClosePromise = PromiseInvokeOrNoop(controller._underlyingSink, 'close', []); - sinkClosePromise.then(function () { - WritableStreamFinishInFlightClose(stream); - }, function (reason) { - WritableStreamFinishInFlightCloseWithError(stream, reason); - }).catch(rethrowAssertionErrorRejection); - } - - function WritableStreamDefaultControllerProcessWrite(controller, chunk) { - var stream = controller._controlledWritableStream; - WritableStreamMarkFirstWriteRequestInFlight(stream); - var sinkWritePromise = PromiseInvokeOrNoop(controller._underlyingSink, 'write', [chunk, controller]); - sinkWritePromise.then(function () { - WritableStreamFinishInFlightWrite(stream); - var state = stream._state; - assert(state === 'writable' || state === 'erroring'); - DequeueValue(controller); - - if (WritableStreamCloseQueuedOrInFlight(stream) === false && state === 'writable') { - var backpressure = WritableStreamDefaultControllerGetBackpressure(controller); - WritableStreamUpdateBackpressure(stream, backpressure); - } - - WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); - }, function (reason) { - WritableStreamFinishInFlightWriteWithError(stream, reason); - }).catch(rethrowAssertionErrorRejection); - } - - function WritableStreamDefaultControllerGetBackpressure(controller) { - var desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller); - return desiredSize <= 0; - } - - function WritableStreamDefaultControllerError(controller, error) { - var stream = controller._controlledWritableStream; - assert(stream._state === 'writable'); - WritableStreamStartErroring(stream, error); - } - - function streamBrandCheckException(name) { - return new TypeError('WritableStream.prototype.' + name + ' can only be used on a WritableStream'); - } - - function defaultWriterBrandCheckException(name) { - return new TypeError('WritableStreamDefaultWriter.prototype.' + name + ' can only be used on a WritableStreamDefaultWriter'); - } - - function defaultWriterLockException(name) { - return new TypeError('Cannot ' + name + ' a stream using a released writer'); - } - - function defaultWriterClosedPromiseInitialize(writer) { - writer._closedPromise = new Promise(function (resolve, reject) { - writer._closedPromise_resolve = resolve; - writer._closedPromise_reject = reject; - writer._closedPromiseState = 'pending'; - }); - } - - function defaultWriterClosedPromiseInitializeAsRejected(writer, reason) { - writer._closedPromise = Promise.reject(reason); - writer._closedPromise_resolve = undefined; - writer._closedPromise_reject = undefined; - writer._closedPromiseState = 'rejected'; - } - - function defaultWriterClosedPromiseInitializeAsResolved(writer) { - writer._closedPromise = Promise.resolve(undefined); - writer._closedPromise_resolve = undefined; - writer._closedPromise_reject = undefined; - writer._closedPromiseState = 'resolved'; - } - - function defaultWriterClosedPromiseReject(writer, reason) { - assert(writer._closedPromise_resolve !== undefined, 'writer._closedPromise_resolve !== undefined'); - assert(writer._closedPromise_reject !== undefined, 'writer._closedPromise_reject !== undefined'); - assert(writer._closedPromiseState === 'pending', 'writer._closedPromiseState is pending'); - - writer._closedPromise_reject(reason); - - writer._closedPromise_resolve = undefined; - writer._closedPromise_reject = undefined; - writer._closedPromiseState = 'rejected'; - } - - function defaultWriterClosedPromiseResetToRejected(writer, reason) { - assert(writer._closedPromise_resolve === undefined, 'writer._closedPromise_resolve === undefined'); - assert(writer._closedPromise_reject === undefined, 'writer._closedPromise_reject === undefined'); - assert(writer._closedPromiseState !== 'pending', 'writer._closedPromiseState is not pending'); - writer._closedPromise = Promise.reject(reason); - writer._closedPromiseState = 'rejected'; - } - - function defaultWriterClosedPromiseResolve(writer) { - assert(writer._closedPromise_resolve !== undefined, 'writer._closedPromise_resolve !== undefined'); - assert(writer._closedPromise_reject !== undefined, 'writer._closedPromise_reject !== undefined'); - assert(writer._closedPromiseState === 'pending', 'writer._closedPromiseState is pending'); - - writer._closedPromise_resolve(undefined); - - writer._closedPromise_resolve = undefined; - writer._closedPromise_reject = undefined; - writer._closedPromiseState = 'resolved'; - } - - function defaultWriterReadyPromiseInitialize(writer) { - writer._readyPromise = new Promise(function (resolve, reject) { - writer._readyPromise_resolve = resolve; - writer._readyPromise_reject = reject; - }); - writer._readyPromiseState = 'pending'; - } - - function defaultWriterReadyPromiseInitializeAsRejected(writer, reason) { - writer._readyPromise = Promise.reject(reason); - writer._readyPromise_resolve = undefined; - writer._readyPromise_reject = undefined; - writer._readyPromiseState = 'rejected'; - } - - function defaultWriterReadyPromiseInitializeAsResolved(writer) { - writer._readyPromise = Promise.resolve(undefined); - writer._readyPromise_resolve = undefined; - writer._readyPromise_reject = undefined; - writer._readyPromiseState = 'fulfilled'; - } - - function defaultWriterReadyPromiseReject(writer, reason) { - assert(writer._readyPromise_resolve !== undefined, 'writer._readyPromise_resolve !== undefined'); - assert(writer._readyPromise_reject !== undefined, 'writer._readyPromise_reject !== undefined'); - - writer._readyPromise_reject(reason); - - writer._readyPromise_resolve = undefined; - writer._readyPromise_reject = undefined; - writer._readyPromiseState = 'rejected'; - } - - function defaultWriterReadyPromiseReset(writer) { - assert(writer._readyPromise_resolve === undefined, 'writer._readyPromise_resolve === undefined'); - assert(writer._readyPromise_reject === undefined, 'writer._readyPromise_reject === undefined'); - writer._readyPromise = new Promise(function (resolve, reject) { - writer._readyPromise_resolve = resolve; - writer._readyPromise_reject = reject; - }); - writer._readyPromiseState = 'pending'; - } - - function defaultWriterReadyPromiseResetToRejected(writer, reason) { - assert(writer._readyPromise_resolve === undefined, 'writer._readyPromise_resolve === undefined'); - assert(writer._readyPromise_reject === undefined, 'writer._readyPromise_reject === undefined'); - writer._readyPromise = Promise.reject(reason); - writer._readyPromiseState = 'rejected'; - } - - function defaultWriterReadyPromiseResolve(writer) { - assert(writer._readyPromise_resolve !== undefined, 'writer._readyPromise_resolve !== undefined'); - assert(writer._readyPromise_reject !== undefined, 'writer._readyPromise_reject !== undefined'); - - writer._readyPromise_resolve(undefined); - - writer._readyPromise_resolve = undefined; - writer._readyPromise_reject = undefined; - writer._readyPromiseState = 'fulfilled'; - } - }, function (module, exports, __w_extracthighlights_require__) { - - var _require = __w_extracthighlights_require__(0), - IsFiniteNonNegativeNumber = _require.IsFiniteNonNegativeNumber; - - var _require2 = __w_extracthighlights_require__(1), - assert = _require2.assert; - - exports.DequeueValue = function (container) { - assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: DequeueValue should only be used on containers with [[queue]] and [[queueTotalSize]].'); - assert(container._queue.length > 0, 'Spec-level failure: should never dequeue from an empty queue.'); - - var pair = container._queue.shift(); - - container._queueTotalSize -= pair.size; - - if (container._queueTotalSize < 0) { - container._queueTotalSize = 0; - } - - return pair.value; - }; - - exports.EnqueueValueWithSize = function (container, value, size) { - assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: EnqueueValueWithSize should only be used on containers with [[queue]] and ' + '[[queueTotalSize]].'); - size = Number(size); - - if (!IsFiniteNonNegativeNumber(size)) { - throw new RangeError('Size must be a finite, non-NaN, non-negative number.'); - } - - container._queue.push({ - value: value, - size: size - }); - - container._queueTotalSize += size; - }; - - exports.PeekQueueValue = function (container) { - assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: PeekQueueValue should only be used on containers with [[queue]] and [[queueTotalSize]].'); - assert(container._queue.length > 0, 'Spec-level failure: should never peek at an empty queue.'); - var pair = container._queue[0]; - return pair.value; - }; - - exports.ResetQueue = function (container) { - assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: ResetQueue should only be used on containers with [[queue]] and [[queueTotalSize]].'); - container._queue = []; - container._queueTotalSize = 0; - }; - }, function (module, exports, __w_extracthighlights_require__) { - - var _createClass = function () { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - return function (Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps); - if (staticProps) defineProperties(Constructor, staticProps); - return Constructor; - }; - }(); - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - var _require = __w_extracthighlights_require__(0), - ArrayBufferCopy = _require.ArrayBufferCopy, - CreateIterResultObject = _require.CreateIterResultObject, - IsFiniteNonNegativeNumber = _require.IsFiniteNonNegativeNumber, - InvokeOrNoop = _require.InvokeOrNoop, - PromiseInvokeOrNoop = _require.PromiseInvokeOrNoop, - TransferArrayBuffer = _require.TransferArrayBuffer, - ValidateAndNormalizeQueuingStrategy = _require.ValidateAndNormalizeQueuingStrategy, - ValidateAndNormalizeHighWaterMark = _require.ValidateAndNormalizeHighWaterMark; - - var _require2 = __w_extracthighlights_require__(0), - createArrayFromList = _require2.createArrayFromList, - createDataProperty = _require2.createDataProperty, - typeIsObject = _require2.typeIsObject; - - var _require3 = __w_extracthighlights_require__(1), - assert = _require3.assert, - rethrowAssertionErrorRejection = _require3.rethrowAssertionErrorRejection; - - var _require4 = __w_extracthighlights_require__(3), - DequeueValue = _require4.DequeueValue, - EnqueueValueWithSize = _require4.EnqueueValueWithSize, - ResetQueue = _require4.ResetQueue; - - var _require5 = __w_extracthighlights_require__(2), - AcquireWritableStreamDefaultWriter = _require5.AcquireWritableStreamDefaultWriter, - IsWritableStream = _require5.IsWritableStream, - IsWritableStreamLocked = _require5.IsWritableStreamLocked, - WritableStreamAbort = _require5.WritableStreamAbort, - WritableStreamDefaultWriterCloseWithErrorPropagation = _require5.WritableStreamDefaultWriterCloseWithErrorPropagation, - WritableStreamDefaultWriterRelease = _require5.WritableStreamDefaultWriterRelease, - WritableStreamDefaultWriterWrite = _require5.WritableStreamDefaultWriterWrite, - WritableStreamCloseQueuedOrInFlight = _require5.WritableStreamCloseQueuedOrInFlight; - - var ReadableStream = function () { - function ReadableStream() { - var underlyingSource = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - size = _ref.size, - highWaterMark = _ref.highWaterMark; - - _classCallCheck(this, ReadableStream); - - this._state = 'readable'; - this._reader = undefined; - this._storedError = undefined; - this._disturbed = false; - this._readableStreamController = undefined; - var type = underlyingSource.type; - var typeString = String(type); - - if (typeString === 'bytes') { - if (highWaterMark === undefined) { - highWaterMark = 0; - } - - this._readableStreamController = new ReadableByteStreamController(this, underlyingSource, highWaterMark); - } else if (type === undefined) { - if (highWaterMark === undefined) { - highWaterMark = 1; - } - - this._readableStreamController = new ReadableStreamDefaultController(this, underlyingSource, size, highWaterMark); - } else { - throw new RangeError('Invalid type is specified'); - } - } - - _createClass(ReadableStream, [{ - key: 'cancel', - value: function cancel(reason) { - if (IsReadableStream(this) === false) { - return Promise.reject(streamBrandCheckException('cancel')); - } - - if (IsReadableStreamLocked(this) === true) { - return Promise.reject(new TypeError('Cannot cancel a stream that already has a reader')); - } - - return ReadableStreamCancel(this, reason); - } - }, { - key: 'getReader', - value: function getReader() { - var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - mode = _ref2.mode; - - if (IsReadableStream(this) === false) { - throw streamBrandCheckException('getReader'); - } - - if (mode === undefined) { - return AcquireReadableStreamDefaultReader(this); - } - - mode = String(mode); - - if (mode === 'byob') { - return AcquireReadableStreamBYOBReader(this); - } - - throw new RangeError('Invalid mode is specified'); - } - }, { - key: 'pipeThrough', - value: function pipeThrough(_ref3, options) { - var writable = _ref3.writable, - readable = _ref3.readable; - var promise = this.pipeTo(writable, options); - ifIsObjectAndHasAPromiseIsHandledInternalSlotSetPromiseIsHandledToTrue(promise); - return readable; - } - }, { - key: 'pipeTo', - value: function pipeTo(dest) { - var _this = this; - - var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - preventClose = _ref4.preventClose, - preventAbort = _ref4.preventAbort, - preventCancel = _ref4.preventCancel; - - if (IsReadableStream(this) === false) { - return Promise.reject(streamBrandCheckException('pipeTo')); - } - - if (IsWritableStream(dest) === false) { - return Promise.reject(new TypeError('ReadableStream.prototype.pipeTo\'s first argument must be a WritableStream')); - } - - preventClose = Boolean(preventClose); - preventAbort = Boolean(preventAbort); - preventCancel = Boolean(preventCancel); - - if (IsReadableStreamLocked(this) === true) { - return Promise.reject(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')); - } - - if (IsWritableStreamLocked(dest) === true) { - return Promise.reject(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')); - } - - var reader = AcquireReadableStreamDefaultReader(this); - var writer = AcquireWritableStreamDefaultWriter(dest); - var shuttingDown = false; - var currentWrite = Promise.resolve(); - return new Promise(function (resolve, reject) { - function pipeLoop() { - currentWrite = Promise.resolve(); - - if (shuttingDown === true) { - return Promise.resolve(); - } - - return writer._readyPromise.then(function () { - return ReadableStreamDefaultReaderRead(reader).then(function (_ref5) { - var value = _ref5.value, - done = _ref5.done; - - if (done === true) { - return; - } - - currentWrite = WritableStreamDefaultWriterWrite(writer, value).catch(function () {}); - }); - }).then(pipeLoop); - } - - isOrBecomesErrored(_this, reader._closedPromise, function (storedError) { - if (preventAbort === false) { - shutdownWithAction(function () { - return WritableStreamAbort(dest, storedError); - }, true, storedError); - } else { - shutdown(true, storedError); - } - }); - isOrBecomesErrored(dest, writer._closedPromise, function (storedError) { - if (preventCancel === false) { - shutdownWithAction(function () { - return ReadableStreamCancel(_this, storedError); - }, true, storedError); - } else { - shutdown(true, storedError); - } - }); - isOrBecomesClosed(_this, reader._closedPromise, function () { - if (preventClose === false) { - shutdownWithAction(function () { - return WritableStreamDefaultWriterCloseWithErrorPropagation(writer); - }); - } else { - shutdown(); - } - }); - - if (WritableStreamCloseQueuedOrInFlight(dest) === true || dest._state === 'closed') { - var destClosed = new TypeError('the destination writable stream closed before all data could be piped to it'); - - if (preventCancel === false) { - shutdownWithAction(function () { - return ReadableStreamCancel(_this, destClosed); - }, true, destClosed); - } else { - shutdown(true, destClosed); - } - } - - pipeLoop().catch(function (err) { - currentWrite = Promise.resolve(); - rethrowAssertionErrorRejection(err); - }); - - function waitForWritesToFinish() { - var oldCurrentWrite = currentWrite; - return currentWrite.then(function () { - return oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined; - }); - } - - function isOrBecomesErrored(stream, promise, action) { - if (stream._state === 'errored') { - action(stream._storedError); - } else { - promise.catch(action).catch(rethrowAssertionErrorRejection); - } - } - - function isOrBecomesClosed(stream, promise, action) { - if (stream._state === 'closed') { - action(); - } else { - promise.then(action).catch(rethrowAssertionErrorRejection); - } - } - - function shutdownWithAction(action, originalIsError, originalError) { - if (shuttingDown === true) { - return; - } - - shuttingDown = true; - - if (dest._state === 'writable' && WritableStreamCloseQueuedOrInFlight(dest) === false) { - waitForWritesToFinish().then(doTheRest); - } else { - doTheRest(); - } - - function doTheRest() { - action().then(function () { - return finalize(originalIsError, originalError); - }, function (newError) { - return finalize(true, newError); - }).catch(rethrowAssertionErrorRejection); - } - } - - function shutdown(isError, error) { - if (shuttingDown === true) { - return; - } - - shuttingDown = true; - - if (dest._state === 'writable' && WritableStreamCloseQueuedOrInFlight(dest) === false) { - waitForWritesToFinish().then(function () { - return finalize(isError, error); - }).catch(rethrowAssertionErrorRejection); - } else { - finalize(isError, error); - } - } - - function finalize(isError, error) { - WritableStreamDefaultWriterRelease(writer); - ReadableStreamReaderGenericRelease(reader); - - if (isError) { - reject(error); - } else { - resolve(undefined); - } - } - }); - } - }, { - key: 'tee', - value: function tee() { - if (IsReadableStream(this) === false) { - throw streamBrandCheckException('tee'); - } - - var branches = ReadableStreamTee(this, false); - return createArrayFromList(branches); - } - }, { - key: 'locked', - get: function get() { - if (IsReadableStream(this) === false) { - throw streamBrandCheckException('locked'); - } - - return IsReadableStreamLocked(this); - } - }]); - - return ReadableStream; - }(); - - module.exports = { - ReadableStream: ReadableStream, - IsReadableStreamDisturbed: IsReadableStreamDisturbed, - ReadableStreamDefaultControllerClose: ReadableStreamDefaultControllerClose, - ReadableStreamDefaultControllerEnqueue: ReadableStreamDefaultControllerEnqueue, - ReadableStreamDefaultControllerError: ReadableStreamDefaultControllerError, - ReadableStreamDefaultControllerGetDesiredSize: ReadableStreamDefaultControllerGetDesiredSize - }; - - function AcquireReadableStreamBYOBReader(stream) { - return new ReadableStreamBYOBReader(stream); - } - - function AcquireReadableStreamDefaultReader(stream) { - return new ReadableStreamDefaultReader(stream); - } - - function IsReadableStream(x) { - if (!typeIsObject(x)) { - return false; - } - - if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) { - return false; - } - - return true; - } - - function IsReadableStreamDisturbed(stream) { - assert(IsReadableStream(stream) === true, 'IsReadableStreamDisturbed should only be used on known readable streams'); - return stream._disturbed; - } - - function IsReadableStreamLocked(stream) { - assert(IsReadableStream(stream) === true, 'IsReadableStreamLocked should only be used on known readable streams'); - - if (stream._reader === undefined) { - return false; - } - - return true; - } - - function ReadableStreamTee(stream, cloneForBranch2) { - assert(IsReadableStream(stream) === true); - assert(typeof cloneForBranch2 === 'boolean'); - var reader = AcquireReadableStreamDefaultReader(stream); - var teeState = { - closedOrErrored: false, - canceled1: false, - canceled2: false, - reason1: undefined, - reason2: undefined - }; - teeState.promise = new Promise(function (resolve) { - teeState._resolve = resolve; - }); - var pull = create_ReadableStreamTeePullFunction(); - pull._reader = reader; - pull._teeState = teeState; - pull._cloneForBranch2 = cloneForBranch2; - var cancel1 = create_ReadableStreamTeeBranch1CancelFunction(); - cancel1._stream = stream; - cancel1._teeState = teeState; - var cancel2 = create_ReadableStreamTeeBranch2CancelFunction(); - cancel2._stream = stream; - cancel2._teeState = teeState; - var underlyingSource1 = Object.create(Object.prototype); - createDataProperty(underlyingSource1, 'pull', pull); - createDataProperty(underlyingSource1, 'cancel', cancel1); - var branch1Stream = new ReadableStream(underlyingSource1); - var underlyingSource2 = Object.create(Object.prototype); - createDataProperty(underlyingSource2, 'pull', pull); - createDataProperty(underlyingSource2, 'cancel', cancel2); - var branch2Stream = new ReadableStream(underlyingSource2); - pull._branch1 = branch1Stream._readableStreamController; - pull._branch2 = branch2Stream._readableStreamController; - - reader._closedPromise.catch(function (r) { - if (teeState.closedOrErrored === true) { - return; - } - - ReadableStreamDefaultControllerError(pull._branch1, r); - ReadableStreamDefaultControllerError(pull._branch2, r); - teeState.closedOrErrored = true; - }); - - return [branch1Stream, branch2Stream]; - } - - function create_ReadableStreamTeePullFunction() { - function f() { - var reader = f._reader, - branch1 = f._branch1, - branch2 = f._branch2, - teeState = f._teeState; - return ReadableStreamDefaultReaderRead(reader).then(function (result) { - assert(typeIsObject(result)); - var value = result.value; - var done = result.done; - assert(typeof done === 'boolean'); - - if (done === true && teeState.closedOrErrored === false) { - if (teeState.canceled1 === false) { - ReadableStreamDefaultControllerClose(branch1); - } - - if (teeState.canceled2 === false) { - ReadableStreamDefaultControllerClose(branch2); - } - - teeState.closedOrErrored = true; - } - - if (teeState.closedOrErrored === true) { - return; - } - - var value1 = value; - var value2 = value; - - if (teeState.canceled1 === false) { - ReadableStreamDefaultControllerEnqueue(branch1, value1); - } - - if (teeState.canceled2 === false) { - ReadableStreamDefaultControllerEnqueue(branch2, value2); - } - }); - } - - return f; - } - - function create_ReadableStreamTeeBranch1CancelFunction() { - function f(reason) { - var stream = f._stream, - teeState = f._teeState; - teeState.canceled1 = true; - teeState.reason1 = reason; - - if (teeState.canceled2 === true) { - var compositeReason = createArrayFromList([teeState.reason1, teeState.reason2]); - var cancelResult = ReadableStreamCancel(stream, compositeReason); - - teeState._resolve(cancelResult); - } - - return teeState.promise; - } - - return f; - } - - function create_ReadableStreamTeeBranch2CancelFunction() { - function f(reason) { - var stream = f._stream, - teeState = f._teeState; - teeState.canceled2 = true; - teeState.reason2 = reason; - - if (teeState.canceled1 === true) { - var compositeReason = createArrayFromList([teeState.reason1, teeState.reason2]); - var cancelResult = ReadableStreamCancel(stream, compositeReason); - - teeState._resolve(cancelResult); - } - - return teeState.promise; - } - - return f; - } - - function ReadableStreamAddReadIntoRequest(stream) { - assert(IsReadableStreamBYOBReader(stream._reader) === true); - assert(stream._state === 'readable' || stream._state === 'closed'); - var promise = new Promise(function (resolve, reject) { - var readIntoRequest = { - _resolve: resolve, - _reject: reject - }; - - stream._reader._readIntoRequests.push(readIntoRequest); - }); - return promise; - } - - function ReadableStreamAddReadRequest(stream) { - assert(IsReadableStreamDefaultReader(stream._reader) === true); - assert(stream._state === 'readable'); - var promise = new Promise(function (resolve, reject) { - var readRequest = { - _resolve: resolve, - _reject: reject - }; - - stream._reader._readRequests.push(readRequest); - }); - return promise; - } - - function ReadableStreamCancel(stream, reason) { - stream._disturbed = true; - - if (stream._state === 'closed') { - return Promise.resolve(undefined); - } - - if (stream._state === 'errored') { - return Promise.reject(stream._storedError); - } - - ReadableStreamClose(stream); - - var sourceCancelPromise = stream._readableStreamController.__cancelSteps(reason); - - return sourceCancelPromise.then(function () { - return undefined; - }); - } - - function ReadableStreamClose(stream) { - assert(stream._state === 'readable'); - stream._state = 'closed'; - var reader = stream._reader; - - if (reader === undefined) { - return undefined; - } - - if (IsReadableStreamDefaultReader(reader) === true) { - for (var i = 0; i < reader._readRequests.length; i++) { - var _resolve = reader._readRequests[i]._resolve; - - _resolve(CreateIterResultObject(undefined, true)); - } - - reader._readRequests = []; - } - - defaultReaderClosedPromiseResolve(reader); - return undefined; - } - - function ReadableStreamError(stream, e) { - assert(IsReadableStream(stream) === true, 'stream must be ReadableStream'); - assert(stream._state === 'readable', 'state must be readable'); - stream._state = 'errored'; - stream._storedError = e; - var reader = stream._reader; - - if (reader === undefined) { - return undefined; - } - - if (IsReadableStreamDefaultReader(reader) === true) { - for (var i = 0; i < reader._readRequests.length; i++) { - var readRequest = reader._readRequests[i]; - - readRequest._reject(e); - } - - reader._readRequests = []; - } else { - assert(IsReadableStreamBYOBReader(reader), 'reader must be ReadableStreamBYOBReader'); - - for (var _i = 0; _i < reader._readIntoRequests.length; _i++) { - var readIntoRequest = reader._readIntoRequests[_i]; - - readIntoRequest._reject(e); - } - - reader._readIntoRequests = []; - } - - defaultReaderClosedPromiseReject(reader, e); - - reader._closedPromise.catch(function () {}); - } - - function ReadableStreamFulfillReadIntoRequest(stream, chunk, done) { - var reader = stream._reader; - assert(reader._readIntoRequests.length > 0); - - var readIntoRequest = reader._readIntoRequests.shift(); - - readIntoRequest._resolve(CreateIterResultObject(chunk, done)); - } - - function ReadableStreamFulfillReadRequest(stream, chunk, done) { - var reader = stream._reader; - assert(reader._readRequests.length > 0); - - var readRequest = reader._readRequests.shift(); - - readRequest._resolve(CreateIterResultObject(chunk, done)); - } - - function ReadableStreamGetNumReadIntoRequests(stream) { - return stream._reader._readIntoRequests.length; - } - - function ReadableStreamGetNumReadRequests(stream) { - return stream._reader._readRequests.length; - } - - function ReadableStreamHasBYOBReader(stream) { - var reader = stream._reader; - - if (reader === undefined) { - return false; - } - - if (IsReadableStreamBYOBReader(reader) === false) { - return false; - } - - return true; - } - - function ReadableStreamHasDefaultReader(stream) { - var reader = stream._reader; - - if (reader === undefined) { - return false; - } - - if (IsReadableStreamDefaultReader(reader) === false) { - return false; - } - - return true; - } - - var ReadableStreamDefaultReader = function () { - function ReadableStreamDefaultReader(stream) { - _classCallCheck(this, ReadableStreamDefaultReader); - - if (IsReadableStream(stream) === false) { - throw new TypeError('ReadableStreamDefaultReader can only be constructed with a ReadableStream instance'); - } - - if (IsReadableStreamLocked(stream) === true) { - throw new TypeError('This stream has already been locked for exclusive reading by another reader'); - } - - ReadableStreamReaderGenericInitialize(this, stream); - this._readRequests = []; - } - - _createClass(ReadableStreamDefaultReader, [{ - key: 'cancel', - value: function cancel(reason) { - if (IsReadableStreamDefaultReader(this) === false) { - return Promise.reject(defaultReaderBrandCheckException('cancel')); - } - - if (this._ownerReadableStream === undefined) { - return Promise.reject(readerLockException('cancel')); - } - - return ReadableStreamReaderGenericCancel(this, reason); - } - }, { - key: 'read', - value: function read() { - if (IsReadableStreamDefaultReader(this) === false) { - return Promise.reject(defaultReaderBrandCheckException('read')); - } - - if (this._ownerReadableStream === undefined) { - return Promise.reject(readerLockException('read from')); - } - - return ReadableStreamDefaultReaderRead(this); - } - }, { - key: 'releaseLock', - value: function releaseLock() { - if (IsReadableStreamDefaultReader(this) === false) { - throw defaultReaderBrandCheckException('releaseLock'); - } - - if (this._ownerReadableStream === undefined) { - return; - } - - if (this._readRequests.length > 0) { - throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled'); - } - - ReadableStreamReaderGenericRelease(this); - } - }, { - key: 'closed', - get: function get() { - if (IsReadableStreamDefaultReader(this) === false) { - return Promise.reject(defaultReaderBrandCheckException('closed')); - } - - return this._closedPromise; - } - }]); - - return ReadableStreamDefaultReader; - }(); - - var ReadableStreamBYOBReader = function () { - function ReadableStreamBYOBReader(stream) { - _classCallCheck(this, ReadableStreamBYOBReader); - - if (!IsReadableStream(stream)) { - throw new TypeError('ReadableStreamBYOBReader can only be constructed with a ReadableStream instance given a ' + 'byte source'); - } - - if (IsReadableByteStreamController(stream._readableStreamController) === false) { - throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' + 'source'); - } - - if (IsReadableStreamLocked(stream)) { - throw new TypeError('This stream has already been locked for exclusive reading by another reader'); - } - - ReadableStreamReaderGenericInitialize(this, stream); - this._readIntoRequests = []; - } - - _createClass(ReadableStreamBYOBReader, [{ - key: 'cancel', - value: function cancel(reason) { - if (!IsReadableStreamBYOBReader(this)) { - return Promise.reject(byobReaderBrandCheckException('cancel')); - } - - if (this._ownerReadableStream === undefined) { - return Promise.reject(readerLockException('cancel')); - } - - return ReadableStreamReaderGenericCancel(this, reason); - } - }, { - key: 'read', - value: function read(view) { - if (!IsReadableStreamBYOBReader(this)) { - return Promise.reject(byobReaderBrandCheckException('read')); - } - - if (this._ownerReadableStream === undefined) { - return Promise.reject(readerLockException('read from')); - } - - if (!ArrayBuffer.isView(view)) { - return Promise.reject(new TypeError('view must be an array buffer view')); - } - - if (view.byteLength === 0) { - return Promise.reject(new TypeError('view must have non-zero byteLength')); - } - - return ReadableStreamBYOBReaderRead(this, view); - } - }, { - key: 'releaseLock', - value: function releaseLock() { - if (!IsReadableStreamBYOBReader(this)) { - throw byobReaderBrandCheckException('releaseLock'); - } - - if (this._ownerReadableStream === undefined) { - return; - } - - if (this._readIntoRequests.length > 0) { - throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled'); - } - - ReadableStreamReaderGenericRelease(this); - } - }, { - key: 'closed', - get: function get() { - if (!IsReadableStreamBYOBReader(this)) { - return Promise.reject(byobReaderBrandCheckException('closed')); - } - - return this._closedPromise; - } - }]); - - return ReadableStreamBYOBReader; - }(); - - function IsReadableStreamBYOBReader(x) { - if (!typeIsObject(x)) { - return false; - } - - if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) { - return false; - } - - return true; - } - - function IsReadableStreamDefaultReader(x) { - if (!typeIsObject(x)) { - return false; - } - - if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) { - return false; - } - - return true; - } - - function ReadableStreamReaderGenericInitialize(reader, stream) { - reader._ownerReadableStream = stream; - stream._reader = reader; - - if (stream._state === 'readable') { - defaultReaderClosedPromiseInitialize(reader); - } else if (stream._state === 'closed') { - defaultReaderClosedPromiseInitializeAsResolved(reader); - } else { - assert(stream._state === 'errored', 'state must be errored'); - defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError); - - reader._closedPromise.catch(function () {}); - } - } - - function ReadableStreamReaderGenericCancel(reader, reason) { - var stream = reader._ownerReadableStream; - assert(stream !== undefined); - return ReadableStreamCancel(stream, reason); - } - - function ReadableStreamReaderGenericRelease(reader) { - assert(reader._ownerReadableStream !== undefined); - assert(reader._ownerReadableStream._reader === reader); - - if (reader._ownerReadableStream._state === 'readable') { - defaultReaderClosedPromiseReject(reader, new TypeError('Reader was released and can no longer be used to monitor the stream\'s closedness')); - } else { - defaultReaderClosedPromiseResetToRejected(reader, new TypeError('Reader was released and can no longer be used to monitor the stream\'s closedness')); - } - - reader._closedPromise.catch(function () {}); - - reader._ownerReadableStream._reader = undefined; - reader._ownerReadableStream = undefined; - } - - function ReadableStreamBYOBReaderRead(reader, view) { - var stream = reader._ownerReadableStream; - assert(stream !== undefined); - stream._disturbed = true; - - if (stream._state === 'errored') { - return Promise.reject(stream._storedError); - } - - return ReadableByteStreamControllerPullInto(stream._readableStreamController, view); - } - - function ReadableStreamDefaultReaderRead(reader) { - var stream = reader._ownerReadableStream; - assert(stream !== undefined); - stream._disturbed = true; - - if (stream._state === 'closed') { - return Promise.resolve(CreateIterResultObject(undefined, true)); - } - - if (stream._state === 'errored') { - return Promise.reject(stream._storedError); - } - - assert(stream._state === 'readable'); - return stream._readableStreamController.__pullSteps(); - } - - var ReadableStreamDefaultController = function () { - function ReadableStreamDefaultController(stream, underlyingSource, size, highWaterMark) { - _classCallCheck(this, ReadableStreamDefaultController); - - if (IsReadableStream(stream) === false) { - throw new TypeError('ReadableStreamDefaultController can only be constructed with a ReadableStream instance'); - } - - if (stream._readableStreamController !== undefined) { - throw new TypeError('ReadableStreamDefaultController instances can only be created by the ReadableStream constructor'); - } - - this._controlledReadableStream = stream; - this._underlyingSource = underlyingSource; - this._queue = undefined; - this._queueTotalSize = undefined; - ResetQueue(this); - this._started = false; - this._closeRequested = false; - this._pullAgain = false; - this._pulling = false; - var normalizedStrategy = ValidateAndNormalizeQueuingStrategy(size, highWaterMark); - this._strategySize = normalizedStrategy.size; - this._strategyHWM = normalizedStrategy.highWaterMark; - var controller = this; - var startResult = InvokeOrNoop(underlyingSource, 'start', [this]); - Promise.resolve(startResult).then(function () { - controller._started = true; - assert(controller._pulling === false); - assert(controller._pullAgain === false); - ReadableStreamDefaultControllerCallPullIfNeeded(controller); - }, function (r) { - ReadableStreamDefaultControllerErrorIfNeeded(controller, r); - }).catch(rethrowAssertionErrorRejection); - } - - _createClass(ReadableStreamDefaultController, [{ - key: 'close', - value: function close() { - if (IsReadableStreamDefaultController(this) === false) { - throw defaultControllerBrandCheckException('close'); - } - - if (this._closeRequested === true) { - throw new TypeError('The stream has already been closed; do not close it again!'); - } - - var state = this._controlledReadableStream._state; - - if (state !== 'readable') { - throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be closed'); - } - - ReadableStreamDefaultControllerClose(this); - } - }, { - key: 'enqueue', - value: function enqueue(chunk) { - if (IsReadableStreamDefaultController(this) === false) { - throw defaultControllerBrandCheckException('enqueue'); - } - - if (this._closeRequested === true) { - throw new TypeError('stream is closed or draining'); - } - - var state = this._controlledReadableStream._state; - - if (state !== 'readable') { - throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be enqueued to'); - } - - return ReadableStreamDefaultControllerEnqueue(this, chunk); - } - }, { - key: 'error', - value: function error(e) { - if (IsReadableStreamDefaultController(this) === false) { - throw defaultControllerBrandCheckException('error'); - } - - var stream = this._controlledReadableStream; - - if (stream._state !== 'readable') { - throw new TypeError('The stream is ' + stream._state + ' and so cannot be errored'); - } - - ReadableStreamDefaultControllerError(this, e); - } - }, { - key: '__cancelSteps', - value: function __cancelSteps(reason) { - ResetQueue(this); - return PromiseInvokeOrNoop(this._underlyingSource, 'cancel', [reason]); - } - }, { - key: '__pullSteps', - value: function __pullSteps() { - var stream = this._controlledReadableStream; - - if (this._queue.length > 0) { - var chunk = DequeueValue(this); - - if (this._closeRequested === true && this._queue.length === 0) { - ReadableStreamClose(stream); - } else { - ReadableStreamDefaultControllerCallPullIfNeeded(this); - } - - return Promise.resolve(CreateIterResultObject(chunk, false)); - } - - var pendingPromise = ReadableStreamAddReadRequest(stream); - ReadableStreamDefaultControllerCallPullIfNeeded(this); - return pendingPromise; - } - }, { - key: 'desiredSize', - get: function get() { - if (IsReadableStreamDefaultController(this) === false) { - throw defaultControllerBrandCheckException('desiredSize'); - } - - return ReadableStreamDefaultControllerGetDesiredSize(this); - } - }]); - - return ReadableStreamDefaultController; - }(); - - function IsReadableStreamDefaultController(x) { - if (!typeIsObject(x)) { - return false; - } - - if (!Object.prototype.hasOwnProperty.call(x, '_underlyingSource')) { - return false; - } - - return true; - } - - function ReadableStreamDefaultControllerCallPullIfNeeded(controller) { - var shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller); - - if (shouldPull === false) { - return undefined; - } - - if (controller._pulling === true) { - controller._pullAgain = true; - return undefined; - } - - assert(controller._pullAgain === false); - controller._pulling = true; - var pullPromise = PromiseInvokeOrNoop(controller._underlyingSource, 'pull', [controller]); - pullPromise.then(function () { - controller._pulling = false; - - if (controller._pullAgain === true) { - controller._pullAgain = false; - return ReadableStreamDefaultControllerCallPullIfNeeded(controller); - } - - return undefined; - }, function (e) { - ReadableStreamDefaultControllerErrorIfNeeded(controller, e); - }).catch(rethrowAssertionErrorRejection); - return undefined; - } - - function ReadableStreamDefaultControllerShouldCallPull(controller) { - var stream = controller._controlledReadableStream; - - if (stream._state === 'closed' || stream._state === 'errored') { - return false; - } - - if (controller._closeRequested === true) { - return false; - } - - if (controller._started === false) { - return false; - } - - if (IsReadableStreamLocked(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) { - return true; - } - - var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller); - - if (desiredSize > 0) { - return true; - } - - return false; - } - - function ReadableStreamDefaultControllerClose(controller) { - var stream = controller._controlledReadableStream; - assert(controller._closeRequested === false); - assert(stream._state === 'readable'); - controller._closeRequested = true; - - if (controller._queue.length === 0) { - ReadableStreamClose(stream); - } - } - - function ReadableStreamDefaultControllerEnqueue(controller, chunk) { - var stream = controller._controlledReadableStream; - assert(controller._closeRequested === false); - assert(stream._state === 'readable'); - - if (IsReadableStreamLocked(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) { - ReadableStreamFulfillReadRequest(stream, chunk, false); - } else { - var chunkSize = 1; - - if (controller._strategySize !== undefined) { - var strategySize = controller._strategySize; - - try { - chunkSize = strategySize(chunk); - } catch (chunkSizeE) { - ReadableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE); - throw chunkSizeE; - } - } - - try { - EnqueueValueWithSize(controller, chunk, chunkSize); - } catch (enqueueE) { - ReadableStreamDefaultControllerErrorIfNeeded(controller, enqueueE); - throw enqueueE; - } - } - - ReadableStreamDefaultControllerCallPullIfNeeded(controller); - return undefined; - } - - function ReadableStreamDefaultControllerError(controller, e) { - var stream = controller._controlledReadableStream; - assert(stream._state === 'readable'); - ResetQueue(controller); - ReadableStreamError(stream, e); - } - - function ReadableStreamDefaultControllerErrorIfNeeded(controller, e) { - if (controller._controlledReadableStream._state === 'readable') { - ReadableStreamDefaultControllerError(controller, e); - } - } - - function ReadableStreamDefaultControllerGetDesiredSize(controller) { - var stream = controller._controlledReadableStream; - var state = stream._state; - - if (state === 'errored') { - return null; - } - - if (state === 'closed') { - return 0; - } - - return controller._strategyHWM - controller._queueTotalSize; - } - - var ReadableStreamBYOBRequest = function () { - function ReadableStreamBYOBRequest(controller, view) { - _classCallCheck(this, ReadableStreamBYOBRequest); - - this._associatedReadableByteStreamController = controller; - this._view = view; - } - - _createClass(ReadableStreamBYOBRequest, [{ - key: 'respond', - value: function respond(bytesWritten) { - if (IsReadableStreamBYOBRequest(this) === false) { - throw byobRequestBrandCheckException('respond'); - } - - if (this._associatedReadableByteStreamController === undefined) { - throw new TypeError('This BYOB request has been invalidated'); - } - - ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten); - } - }, { - key: 'respondWithNewView', - value: function respondWithNewView(view) { - if (IsReadableStreamBYOBRequest(this) === false) { - throw byobRequestBrandCheckException('respond'); - } - - if (this._associatedReadableByteStreamController === undefined) { - throw new TypeError('This BYOB request has been invalidated'); - } - - if (!ArrayBuffer.isView(view)) { - throw new TypeError('You can only respond with array buffer views'); - } - - ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view); - } - }, { - key: 'view', - get: function get() { - return this._view; - } - }]); - - return ReadableStreamBYOBRequest; - }(); - - var ReadableByteStreamController = function () { - function ReadableByteStreamController(stream, underlyingByteSource, highWaterMark) { - _classCallCheck(this, ReadableByteStreamController); - - if (IsReadableStream(stream) === false) { - throw new TypeError('ReadableByteStreamController can only be constructed with a ReadableStream instance given ' + 'a byte source'); - } - - if (stream._readableStreamController !== undefined) { - throw new TypeError('ReadableByteStreamController instances can only be created by the ReadableStream constructor given a byte ' + 'source'); - } - - this._controlledReadableStream = stream; - this._underlyingByteSource = underlyingByteSource; - this._pullAgain = false; - this._pulling = false; - ReadableByteStreamControllerClearPendingPullIntos(this); - this._queue = this._queueTotalSize = undefined; - ResetQueue(this); - this._closeRequested = false; - this._started = false; - this._strategyHWM = ValidateAndNormalizeHighWaterMark(highWaterMark); - var autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize; - - if (autoAllocateChunkSize !== undefined) { - if (Number.isInteger(autoAllocateChunkSize) === false || autoAllocateChunkSize <= 0) { - throw new RangeError('autoAllocateChunkSize must be a positive integer'); - } - } - - this._autoAllocateChunkSize = autoAllocateChunkSize; - this._pendingPullIntos = []; - var controller = this; - var startResult = InvokeOrNoop(underlyingByteSource, 'start', [this]); - Promise.resolve(startResult).then(function () { - controller._started = true; - assert(controller._pulling === false); - assert(controller._pullAgain === false); - ReadableByteStreamControllerCallPullIfNeeded(controller); - }, function (r) { - if (stream._state === 'readable') { - ReadableByteStreamControllerError(controller, r); - } - }).catch(rethrowAssertionErrorRejection); - } - - _createClass(ReadableByteStreamController, [{ - key: 'close', - value: function close() { - if (IsReadableByteStreamController(this) === false) { - throw byteStreamControllerBrandCheckException('close'); - } - - if (this._closeRequested === true) { - throw new TypeError('The stream has already been closed; do not close it again!'); - } - - var state = this._controlledReadableStream._state; - - if (state !== 'readable') { - throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be closed'); - } - - ReadableByteStreamControllerClose(this); - } - }, { - key: 'enqueue', - value: function enqueue(chunk) { - if (IsReadableByteStreamController(this) === false) { - throw byteStreamControllerBrandCheckException('enqueue'); - } - - if (this._closeRequested === true) { - throw new TypeError('stream is closed or draining'); - } - - var state = this._controlledReadableStream._state; - - if (state !== 'readable') { - throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be enqueued to'); - } - - if (!ArrayBuffer.isView(chunk)) { - throw new TypeError('You can only enqueue array buffer views when using a ReadableByteStreamController'); - } - - ReadableByteStreamControllerEnqueue(this, chunk); - } - }, { - key: 'error', - value: function error(e) { - if (IsReadableByteStreamController(this) === false) { - throw byteStreamControllerBrandCheckException('error'); - } - - var stream = this._controlledReadableStream; - - if (stream._state !== 'readable') { - throw new TypeError('The stream is ' + stream._state + ' and so cannot be errored'); - } - - ReadableByteStreamControllerError(this, e); - } - }, { - key: '__cancelSteps', - value: function __cancelSteps(reason) { - if (this._pendingPullIntos.length > 0) { - var firstDescriptor = this._pendingPullIntos[0]; - firstDescriptor.bytesFilled = 0; - } - - ResetQueue(this); - return PromiseInvokeOrNoop(this._underlyingByteSource, 'cancel', [reason]); - } - }, { - key: '__pullSteps', - value: function __pullSteps() { - var stream = this._controlledReadableStream; - assert(ReadableStreamHasDefaultReader(stream) === true); - - if (this._queueTotalSize > 0) { - assert(ReadableStreamGetNumReadRequests(stream) === 0); - - var entry = this._queue.shift(); - - this._queueTotalSize -= entry.byteLength; - ReadableByteStreamControllerHandleQueueDrain(this); - var view = void 0; - - try { - view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength); - } catch (viewE) { - return Promise.reject(viewE); - } - - return Promise.resolve(CreateIterResultObject(view, false)); - } - - var autoAllocateChunkSize = this._autoAllocateChunkSize; - - if (autoAllocateChunkSize !== undefined) { - var buffer = void 0; - - try { - buffer = new ArrayBuffer(autoAllocateChunkSize); - } catch (bufferE) { - return Promise.reject(bufferE); - } - - var pullIntoDescriptor = { - buffer: buffer, - byteOffset: 0, - byteLength: autoAllocateChunkSize, - bytesFilled: 0, - elementSize: 1, - ctor: Uint8Array, - readerType: 'default' - }; - - this._pendingPullIntos.push(pullIntoDescriptor); - } - - var promise = ReadableStreamAddReadRequest(stream); - ReadableByteStreamControllerCallPullIfNeeded(this); - return promise; - } - }, { - key: 'byobRequest', - get: function get() { - if (IsReadableByteStreamController(this) === false) { - throw byteStreamControllerBrandCheckException('byobRequest'); - } - - if (this._byobRequest === undefined && this._pendingPullIntos.length > 0) { - var firstDescriptor = this._pendingPullIntos[0]; - var view = new Uint8Array(firstDescriptor.buffer, firstDescriptor.byteOffset + firstDescriptor.bytesFilled, firstDescriptor.byteLength - firstDescriptor.bytesFilled); - this._byobRequest = new ReadableStreamBYOBRequest(this, view); - } - - return this._byobRequest; - } - }, { - key: 'desiredSize', - get: function get() { - if (IsReadableByteStreamController(this) === false) { - throw byteStreamControllerBrandCheckException('desiredSize'); - } - - return ReadableByteStreamControllerGetDesiredSize(this); - } - }]); - - return ReadableByteStreamController; - }(); - - function IsReadableByteStreamController(x) { - if (!typeIsObject(x)) { - return false; - } - - if (!Object.prototype.hasOwnProperty.call(x, '_underlyingByteSource')) { - return false; - } - - return true; - } - - function IsReadableStreamBYOBRequest(x) { - if (!typeIsObject(x)) { - return false; - } - - if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) { - return false; - } - - return true; - } - - function ReadableByteStreamControllerCallPullIfNeeded(controller) { - var shouldPull = ReadableByteStreamControllerShouldCallPull(controller); - - if (shouldPull === false) { - return undefined; - } - - if (controller._pulling === true) { - controller._pullAgain = true; - return undefined; - } - - assert(controller._pullAgain === false); - controller._pulling = true; - var pullPromise = PromiseInvokeOrNoop(controller._underlyingByteSource, 'pull', [controller]); - pullPromise.then(function () { - controller._pulling = false; - - if (controller._pullAgain === true) { - controller._pullAgain = false; - ReadableByteStreamControllerCallPullIfNeeded(controller); - } - }, function (e) { - if (controller._controlledReadableStream._state === 'readable') { - ReadableByteStreamControllerError(controller, e); - } - }).catch(rethrowAssertionErrorRejection); - return undefined; - } - - function ReadableByteStreamControllerClearPendingPullIntos(controller) { - ReadableByteStreamControllerInvalidateBYOBRequest(controller); - controller._pendingPullIntos = []; - } - - function ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor) { - assert(stream._state !== 'errored', 'state must not be errored'); - var done = false; - - if (stream._state === 'closed') { - assert(pullIntoDescriptor.bytesFilled === 0); - done = true; - } - - var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor); - - if (pullIntoDescriptor.readerType === 'default') { - ReadableStreamFulfillReadRequest(stream, filledView, done); - } else { - assert(pullIntoDescriptor.readerType === 'byob'); - ReadableStreamFulfillReadIntoRequest(stream, filledView, done); - } - } - - function ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor) { - var bytesFilled = pullIntoDescriptor.bytesFilled; - var elementSize = pullIntoDescriptor.elementSize; - assert(bytesFilled <= pullIntoDescriptor.byteLength); - assert(bytesFilled % elementSize === 0); - return new pullIntoDescriptor.ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize); - } - - function ReadableByteStreamControllerEnqueueChunkToQueue(controller, buffer, byteOffset, byteLength) { - controller._queue.push({ - buffer: buffer, - byteOffset: byteOffset, - byteLength: byteLength - }); - - controller._queueTotalSize += byteLength; - } - - function ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) { - var elementSize = pullIntoDescriptor.elementSize; - var currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize; - var maxBytesToCopy = Math.min(controller._queueTotalSize, pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled); - var maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy; - var maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize; - var totalBytesToCopyRemaining = maxBytesToCopy; - var ready = false; - - if (maxAlignedBytes > currentAlignedBytes) { - totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled; - ready = true; - } - - var queue = controller._queue; - - while (totalBytesToCopyRemaining > 0) { - var headOfQueue = queue[0]; - var bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength); - var destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled; - ArrayBufferCopy(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy); - - if (headOfQueue.byteLength === bytesToCopy) { - queue.shift(); - } else { - headOfQueue.byteOffset += bytesToCopy; - headOfQueue.byteLength -= bytesToCopy; - } - - controller._queueTotalSize -= bytesToCopy; - ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor); - totalBytesToCopyRemaining -= bytesToCopy; - } - - if (ready === false) { - assert(controller._queueTotalSize === 0, 'queue must be empty'); - assert(pullIntoDescriptor.bytesFilled > 0); - assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize); - } - - return ready; - } - - function ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, size, pullIntoDescriptor) { - assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos[0] === pullIntoDescriptor); - ReadableByteStreamControllerInvalidateBYOBRequest(controller); - pullIntoDescriptor.bytesFilled += size; - } - - function ReadableByteStreamControllerHandleQueueDrain(controller) { - assert(controller._controlledReadableStream._state === 'readable'); - - if (controller._queueTotalSize === 0 && controller._closeRequested === true) { - ReadableStreamClose(controller._controlledReadableStream); - } else { - ReadableByteStreamControllerCallPullIfNeeded(controller); - } - } - - function ReadableByteStreamControllerInvalidateBYOBRequest(controller) { - if (controller._byobRequest === undefined) { - return; - } - - controller._byobRequest._associatedReadableByteStreamController = undefined; - controller._byobRequest._view = undefined; - controller._byobRequest = undefined; - } - - function ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller) { - assert(controller._closeRequested === false); - - while (controller._pendingPullIntos.length > 0) { - if (controller._queueTotalSize === 0) { - return; - } - - var pullIntoDescriptor = controller._pendingPullIntos[0]; - - if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) === true) { - ReadableByteStreamControllerShiftPendingPullInto(controller); - ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableStream, pullIntoDescriptor); - } - } - } - - function ReadableByteStreamControllerPullInto(controller, view) { - var stream = controller._controlledReadableStream; - var elementSize = 1; - - if (view.constructor !== DataView) { - elementSize = view.constructor.BYTES_PER_ELEMENT; - } - - var ctor = view.constructor; - var pullIntoDescriptor = { - buffer: view.buffer, - byteOffset: view.byteOffset, - byteLength: view.byteLength, - bytesFilled: 0, - elementSize: elementSize, - ctor: ctor, - readerType: 'byob' - }; - - if (controller._pendingPullIntos.length > 0) { - pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer); - - controller._pendingPullIntos.push(pullIntoDescriptor); - - return ReadableStreamAddReadIntoRequest(stream); - } - - if (stream._state === 'closed') { - var emptyView = new view.constructor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0); - return Promise.resolve(CreateIterResultObject(emptyView, true)); - } - - if (controller._queueTotalSize > 0) { - if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) === true) { - var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor); - ReadableByteStreamControllerHandleQueueDrain(controller); - return Promise.resolve(CreateIterResultObject(filledView, false)); - } - - if (controller._closeRequested === true) { - var e = new TypeError('Insufficient bytes to fill elements in the given buffer'); - ReadableByteStreamControllerError(controller, e); - return Promise.reject(e); - } - } - - pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer); - - controller._pendingPullIntos.push(pullIntoDescriptor); - - var promise = ReadableStreamAddReadIntoRequest(stream); - ReadableByteStreamControllerCallPullIfNeeded(controller); - return promise; - } - - function ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor) { - firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer); - assert(firstDescriptor.bytesFilled === 0, 'bytesFilled must be 0'); - var stream = controller._controlledReadableStream; - - if (ReadableStreamHasBYOBReader(stream) === true) { - while (ReadableStreamGetNumReadIntoRequests(stream) > 0) { - var pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller); - ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor); - } - } - } - - function ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, pullIntoDescriptor) { - if (pullIntoDescriptor.bytesFilled + bytesWritten > pullIntoDescriptor.byteLength) { - throw new RangeError('bytesWritten out of range'); - } - - ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor); - - if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) { - return; - } - - ReadableByteStreamControllerShiftPendingPullInto(controller); - var remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize; - - if (remainderSize > 0) { - var end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled; - var remainder = pullIntoDescriptor.buffer.slice(end - remainderSize, end); - ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength); - } - - pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer); - pullIntoDescriptor.bytesFilled -= remainderSize; - ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableStream, pullIntoDescriptor); - ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller); - } - - function ReadableByteStreamControllerRespondInternal(controller, bytesWritten) { - var firstDescriptor = controller._pendingPullIntos[0]; - var stream = controller._controlledReadableStream; - - if (stream._state === 'closed') { - if (bytesWritten !== 0) { - throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream'); - } - - ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor); - } else { - assert(stream._state === 'readable'); - ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor); - } - } - - function ReadableByteStreamControllerShiftPendingPullInto(controller) { - var descriptor = controller._pendingPullIntos.shift(); - - ReadableByteStreamControllerInvalidateBYOBRequest(controller); - return descriptor; - } - - function ReadableByteStreamControllerShouldCallPull(controller) { - var stream = controller._controlledReadableStream; - - if (stream._state !== 'readable') { - return false; - } - - if (controller._closeRequested === true) { - return false; - } - - if (controller._started === false) { - return false; - } - - if (ReadableStreamHasDefaultReader(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) { - return true; - } - - if (ReadableStreamHasBYOBReader(stream) === true && ReadableStreamGetNumReadIntoRequests(stream) > 0) { - return true; - } - - if (ReadableByteStreamControllerGetDesiredSize(controller) > 0) { - return true; - } - - return false; - } - - function ReadableByteStreamControllerClose(controller) { - var stream = controller._controlledReadableStream; - assert(controller._closeRequested === false); - assert(stream._state === 'readable'); - - if (controller._queueTotalSize > 0) { - controller._closeRequested = true; - return; - } - - if (controller._pendingPullIntos.length > 0) { - var firstPendingPullInto = controller._pendingPullIntos[0]; - - if (firstPendingPullInto.bytesFilled > 0) { - var e = new TypeError('Insufficient bytes to fill elements in the given buffer'); - ReadableByteStreamControllerError(controller, e); - throw e; - } - } - - ReadableStreamClose(stream); - } - - function ReadableByteStreamControllerEnqueue(controller, chunk) { - var stream = controller._controlledReadableStream; - assert(controller._closeRequested === false); - assert(stream._state === 'readable'); - var buffer = chunk.buffer; - var byteOffset = chunk.byteOffset; - var byteLength = chunk.byteLength; - var transferredBuffer = TransferArrayBuffer(buffer); - - if (ReadableStreamHasDefaultReader(stream) === true) { - if (ReadableStreamGetNumReadRequests(stream) === 0) { - ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength); - } else { - assert(controller._queue.length === 0); - var transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength); - ReadableStreamFulfillReadRequest(stream, transferredView, false); - } - } else if (ReadableStreamHasBYOBReader(stream) === true) { - ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength); - ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller); - } else { - assert(IsReadableStreamLocked(stream) === false, 'stream must not be locked'); - ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength); - } - } - - function ReadableByteStreamControllerError(controller, e) { - var stream = controller._controlledReadableStream; - assert(stream._state === 'readable'); - ReadableByteStreamControllerClearPendingPullIntos(controller); - ResetQueue(controller); - ReadableStreamError(stream, e); - } - - function ReadableByteStreamControllerGetDesiredSize(controller) { - var stream = controller._controlledReadableStream; - var state = stream._state; - - if (state === 'errored') { - return null; - } - - if (state === 'closed') { - return 0; - } - - return controller._strategyHWM - controller._queueTotalSize; - } - - function ReadableByteStreamControllerRespond(controller, bytesWritten) { - bytesWritten = Number(bytesWritten); - - if (IsFiniteNonNegativeNumber(bytesWritten) === false) { - throw new RangeError('bytesWritten must be a finite'); - } - - assert(controller._pendingPullIntos.length > 0); - ReadableByteStreamControllerRespondInternal(controller, bytesWritten); - } - - function ReadableByteStreamControllerRespondWithNewView(controller, view) { - assert(controller._pendingPullIntos.length > 0); - var firstDescriptor = controller._pendingPullIntos[0]; - - if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) { - throw new RangeError('The region specified by view does not match byobRequest'); - } - - if (firstDescriptor.byteLength !== view.byteLength) { - throw new RangeError('The buffer of view has different capacity than byobRequest'); - } - - firstDescriptor.buffer = view.buffer; - ReadableByteStreamControllerRespondInternal(controller, view.byteLength); - } - - function streamBrandCheckException(name) { - return new TypeError('ReadableStream.prototype.' + name + ' can only be used on a ReadableStream'); - } - - function readerLockException(name) { - return new TypeError('Cannot ' + name + ' a stream using a released reader'); - } - - function defaultReaderBrandCheckException(name) { - return new TypeError('ReadableStreamDefaultReader.prototype.' + name + ' can only be used on a ReadableStreamDefaultReader'); - } - - function defaultReaderClosedPromiseInitialize(reader) { - reader._closedPromise = new Promise(function (resolve, reject) { - reader._closedPromise_resolve = resolve; - reader._closedPromise_reject = reject; - }); - } - - function defaultReaderClosedPromiseInitializeAsRejected(reader, reason) { - reader._closedPromise = Promise.reject(reason); - reader._closedPromise_resolve = undefined; - reader._closedPromise_reject = undefined; - } - - function defaultReaderClosedPromiseInitializeAsResolved(reader) { - reader._closedPromise = Promise.resolve(undefined); - reader._closedPromise_resolve = undefined; - reader._closedPromise_reject = undefined; - } - - function defaultReaderClosedPromiseReject(reader, reason) { - assert(reader._closedPromise_resolve !== undefined); - assert(reader._closedPromise_reject !== undefined); - - reader._closedPromise_reject(reason); - - reader._closedPromise_resolve = undefined; - reader._closedPromise_reject = undefined; - } - - function defaultReaderClosedPromiseResetToRejected(reader, reason) { - assert(reader._closedPromise_resolve === undefined); - assert(reader._closedPromise_reject === undefined); - reader._closedPromise = Promise.reject(reason); - } - - function defaultReaderClosedPromiseResolve(reader) { - assert(reader._closedPromise_resolve !== undefined); - assert(reader._closedPromise_reject !== undefined); - - reader._closedPromise_resolve(undefined); - - reader._closedPromise_resolve = undefined; - reader._closedPromise_reject = undefined; - } - - function byobReaderBrandCheckException(name) { - return new TypeError('ReadableStreamBYOBReader.prototype.' + name + ' can only be used on a ReadableStreamBYOBReader'); - } - - function defaultControllerBrandCheckException(name) { - return new TypeError('ReadableStreamDefaultController.prototype.' + name + ' can only be used on a ReadableStreamDefaultController'); - } - - function byobRequestBrandCheckException(name) { - return new TypeError('ReadableStreamBYOBRequest.prototype.' + name + ' can only be used on a ReadableStreamBYOBRequest'); - } - - function byteStreamControllerBrandCheckException(name) { - return new TypeError('ReadableByteStreamController.prototype.' + name + ' can only be used on a ReadableByteStreamController'); - } - - function ifIsObjectAndHasAPromiseIsHandledInternalSlotSetPromiseIsHandledToTrue(promise) { - try { - Promise.prototype.then.call(promise, undefined, function () {}); - } catch (e) {} - } - }, function (module, exports, __w_extracthighlights_require__) { - - var transformStream = __w_extracthighlights_require__(6); - - var readableStream = __w_extracthighlights_require__(4); - - var writableStream = __w_extracthighlights_require__(2); - - exports.TransformStream = transformStream.TransformStream; - exports.ReadableStream = readableStream.ReadableStream; - exports.IsReadableStreamDisturbed = readableStream.IsReadableStreamDisturbed; - exports.ReadableStreamDefaultControllerClose = readableStream.ReadableStreamDefaultControllerClose; - exports.ReadableStreamDefaultControllerEnqueue = readableStream.ReadableStreamDefaultControllerEnqueue; - exports.ReadableStreamDefaultControllerError = readableStream.ReadableStreamDefaultControllerError; - exports.ReadableStreamDefaultControllerGetDesiredSize = readableStream.ReadableStreamDefaultControllerGetDesiredSize; - exports.AcquireWritableStreamDefaultWriter = writableStream.AcquireWritableStreamDefaultWriter; - exports.IsWritableStream = writableStream.IsWritableStream; - exports.IsWritableStreamLocked = writableStream.IsWritableStreamLocked; - exports.WritableStream = writableStream.WritableStream; - exports.WritableStreamAbort = writableStream.WritableStreamAbort; - exports.WritableStreamDefaultControllerError = writableStream.WritableStreamDefaultControllerError; - exports.WritableStreamDefaultWriterCloseWithErrorPropagation = writableStream.WritableStreamDefaultWriterCloseWithErrorPropagation; - exports.WritableStreamDefaultWriterRelease = writableStream.WritableStreamDefaultWriterRelease; - exports.WritableStreamDefaultWriterWrite = writableStream.WritableStreamDefaultWriterWrite; - }, function (module, exports, __w_extracthighlights_require__) { - - var _createClass = function () { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - return function (Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps); - if (staticProps) defineProperties(Constructor, staticProps); - return Constructor; - }; - }(); - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - var _require = __w_extracthighlights_require__(1), - assert = _require.assert; - - var _require2 = __w_extracthighlights_require__(0), - InvokeOrNoop = _require2.InvokeOrNoop, - PromiseInvokeOrPerformFallback = _require2.PromiseInvokeOrPerformFallback, - PromiseInvokeOrNoop = _require2.PromiseInvokeOrNoop, - typeIsObject = _require2.typeIsObject; - - var _require3 = __w_extracthighlights_require__(4), - ReadableStream = _require3.ReadableStream, - ReadableStreamDefaultControllerClose = _require3.ReadableStreamDefaultControllerClose, - ReadableStreamDefaultControllerEnqueue = _require3.ReadableStreamDefaultControllerEnqueue, - ReadableStreamDefaultControllerError = _require3.ReadableStreamDefaultControllerError, - ReadableStreamDefaultControllerGetDesiredSize = _require3.ReadableStreamDefaultControllerGetDesiredSize; - - var _require4 = __w_extracthighlights_require__(2), - WritableStream = _require4.WritableStream, - WritableStreamDefaultControllerError = _require4.WritableStreamDefaultControllerError; - - function TransformStreamCloseReadable(transformStream) { - if (transformStream._errored === true) { - throw new TypeError('TransformStream is already errored'); - } - - if (transformStream._readableClosed === true) { - throw new TypeError('Readable side is already closed'); - } - - TransformStreamCloseReadableInternal(transformStream); - } - - function TransformStreamEnqueueToReadable(transformStream, chunk) { - if (transformStream._errored === true) { - throw new TypeError('TransformStream is already errored'); - } - - if (transformStream._readableClosed === true) { - throw new TypeError('Readable side is already closed'); - } - - var controller = transformStream._readableController; - - try { - ReadableStreamDefaultControllerEnqueue(controller, chunk); - } catch (e) { - transformStream._readableClosed = true; - TransformStreamErrorIfNeeded(transformStream, e); - throw transformStream._storedError; - } - - var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller); - var maybeBackpressure = desiredSize <= 0; - - if (maybeBackpressure === true && transformStream._backpressure === false) { - TransformStreamSetBackpressure(transformStream, true); - } - } - - function TransformStreamError(transformStream, e) { - if (transformStream._errored === true) { - throw new TypeError('TransformStream is already errored'); - } - - TransformStreamErrorInternal(transformStream, e); - } - - function TransformStreamCloseReadableInternal(transformStream) { - assert(transformStream._errored === false); - assert(transformStream._readableClosed === false); - - try { - ReadableStreamDefaultControllerClose(transformStream._readableController); - } catch (e) { - assert(false); - } - - transformStream._readableClosed = true; - } - - function TransformStreamErrorIfNeeded(transformStream, e) { - if (transformStream._errored === false) { - TransformStreamErrorInternal(transformStream, e); - } - } - - function TransformStreamErrorInternal(transformStream, e) { - assert(transformStream._errored === false); - transformStream._errored = true; - transformStream._storedError = e; - - if (transformStream._writableDone === false) { - WritableStreamDefaultControllerError(transformStream._writableController, e); - } - - if (transformStream._readableClosed === false) { - ReadableStreamDefaultControllerError(transformStream._readableController, e); - } - } - - function TransformStreamReadableReadyPromise(transformStream) { - assert(transformStream._backpressureChangePromise !== undefined, '_backpressureChangePromise should have been initialized'); - - if (transformStream._backpressure === false) { - return Promise.resolve(); - } - - assert(transformStream._backpressure === true, '_backpressure should have been initialized'); - return transformStream._backpressureChangePromise; - } - - function TransformStreamSetBackpressure(transformStream, backpressure) { - assert(transformStream._backpressure !== backpressure, 'TransformStreamSetBackpressure() should be called only when backpressure is changed'); - - if (transformStream._backpressureChangePromise !== undefined) { - transformStream._backpressureChangePromise_resolve(backpressure); - } - - transformStream._backpressureChangePromise = new Promise(function (resolve) { - transformStream._backpressureChangePromise_resolve = resolve; - }); - - transformStream._backpressureChangePromise.then(function (resolution) { - assert(resolution !== backpressure, '_backpressureChangePromise should be fulfilled only when backpressure is changed'); - }); - - transformStream._backpressure = backpressure; - } - - function TransformStreamDefaultTransform(chunk, transformStreamController) { - var transformStream = transformStreamController._controlledTransformStream; - TransformStreamEnqueueToReadable(transformStream, chunk); - return Promise.resolve(); - } - - function TransformStreamTransform(transformStream, chunk) { - assert(transformStream._errored === false); - assert(transformStream._transforming === false); - assert(transformStream._backpressure === false); - transformStream._transforming = true; - var transformer = transformStream._transformer; - var controller = transformStream._transformStreamController; - var transformPromise = PromiseInvokeOrPerformFallback(transformer, 'transform', [chunk, controller], TransformStreamDefaultTransform, [chunk, controller]); - return transformPromise.then(function () { - transformStream._transforming = false; - return TransformStreamReadableReadyPromise(transformStream); - }, function (e) { - TransformStreamErrorIfNeeded(transformStream, e); - return Promise.reject(e); - }); - } - - function IsTransformStreamDefaultController(x) { - if (!typeIsObject(x)) { - return false; - } - - if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) { - return false; - } - - return true; - } - - function IsTransformStream(x) { - if (!typeIsObject(x)) { - return false; - } - - if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) { - return false; - } - - return true; - } - - var TransformStreamSink = function () { - function TransformStreamSink(transformStream, startPromise) { - _classCallCheck(this, TransformStreamSink); - - this._transformStream = transformStream; - this._startPromise = startPromise; - } - - _createClass(TransformStreamSink, [{ - key: 'start', - value: function start(c) { - var transformStream = this._transformStream; - transformStream._writableController = c; - return this._startPromise.then(function () { - return TransformStreamReadableReadyPromise(transformStream); - }); - } - }, { - key: 'write', - value: function write(chunk) { - var transformStream = this._transformStream; - return TransformStreamTransform(transformStream, chunk); - } - }, { - key: 'abort', - value: function abort() { - var transformStream = this._transformStream; - transformStream._writableDone = true; - TransformStreamErrorInternal(transformStream, new TypeError('Writable side aborted')); - } - }, { - key: 'close', - value: function close() { - var transformStream = this._transformStream; - assert(transformStream._transforming === false); - transformStream._writableDone = true; - var flushPromise = PromiseInvokeOrNoop(transformStream._transformer, 'flush', [transformStream._transformStreamController]); - return flushPromise.then(function () { - if (transformStream._errored === true) { - return Promise.reject(transformStream._storedError); - } - - if (transformStream._readableClosed === false) { - TransformStreamCloseReadableInternal(transformStream); - } - - return Promise.resolve(); - }).catch(function (r) { - TransformStreamErrorIfNeeded(transformStream, r); - return Promise.reject(transformStream._storedError); - }); - } - }]); - - return TransformStreamSink; - }(); - - var TransformStreamSource = function () { - function TransformStreamSource(transformStream, startPromise) { - _classCallCheck(this, TransformStreamSource); - - this._transformStream = transformStream; - this._startPromise = startPromise; - } - - _createClass(TransformStreamSource, [{ - key: 'start', - value: function start(c) { - var transformStream = this._transformStream; - transformStream._readableController = c; - return this._startPromise.then(function () { - assert(transformStream._backpressureChangePromise !== undefined, '_backpressureChangePromise should have been initialized'); - - if (transformStream._backpressure === true) { - return Promise.resolve(); - } - - assert(transformStream._backpressure === false, '_backpressure should have been initialized'); - return transformStream._backpressureChangePromise; - }); - } - }, { - key: 'pull', - value: function pull() { - var transformStream = this._transformStream; - assert(transformStream._backpressure === true, 'pull() should be never called while _backpressure is false'); - assert(transformStream._backpressureChangePromise !== undefined, '_backpressureChangePromise should have been initialized'); - TransformStreamSetBackpressure(transformStream, false); - return transformStream._backpressureChangePromise; - } - }, { - key: 'cancel', - value: function cancel() { - var transformStream = this._transformStream; - transformStream._readableClosed = true; - TransformStreamErrorInternal(transformStream, new TypeError('Readable side canceled')); - } - }]); - - return TransformStreamSource; - }(); - - var TransformStreamDefaultController = function () { - function TransformStreamDefaultController(transformStream) { - _classCallCheck(this, TransformStreamDefaultController); - - if (IsTransformStream(transformStream) === false) { - throw new TypeError('TransformStreamDefaultController can only be ' + 'constructed with a TransformStream instance'); - } - - if (transformStream._transformStreamController !== undefined) { - throw new TypeError('TransformStreamDefaultController instances can ' + 'only be created by the TransformStream constructor'); - } - - this._controlledTransformStream = transformStream; - } - - _createClass(TransformStreamDefaultController, [{ - key: 'enqueue', - value: function enqueue(chunk) { - if (IsTransformStreamDefaultController(this) === false) { - throw defaultControllerBrandCheckException('enqueue'); - } - - TransformStreamEnqueueToReadable(this._controlledTransformStream, chunk); - } - }, { - key: 'close', - value: function close() { - if (IsTransformStreamDefaultController(this) === false) { - throw defaultControllerBrandCheckException('close'); - } - - TransformStreamCloseReadable(this._controlledTransformStream); - } - }, { - key: 'error', - value: function error(reason) { - if (IsTransformStreamDefaultController(this) === false) { - throw defaultControllerBrandCheckException('error'); - } - - TransformStreamError(this._controlledTransformStream, reason); - } - }, { - key: 'desiredSize', - get: function get() { - if (IsTransformStreamDefaultController(this) === false) { - throw defaultControllerBrandCheckException('desiredSize'); - } - - var transformStream = this._controlledTransformStream; - var readableController = transformStream._readableController; - return ReadableStreamDefaultControllerGetDesiredSize(readableController); - } - }]); - - return TransformStreamDefaultController; - }(); - - var TransformStream = function () { - function TransformStream() { - var transformer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, TransformStream); - - this._transformer = transformer; - var readableStrategy = transformer.readableStrategy, - writableStrategy = transformer.writableStrategy; - this._transforming = false; - this._errored = false; - this._storedError = undefined; - this._writableController = undefined; - this._readableController = undefined; - this._transformStreamController = undefined; - this._writableDone = false; - this._readableClosed = false; - this._backpressure = undefined; - this._backpressureChangePromise = undefined; - this._backpressureChangePromise_resolve = undefined; - this._transformStreamController = new TransformStreamDefaultController(this); - var startPromise_resolve = void 0; - var startPromise = new Promise(function (resolve) { - startPromise_resolve = resolve; - }); - var source = new TransformStreamSource(this, startPromise); - this._readable = new ReadableStream(source, readableStrategy); - var sink = new TransformStreamSink(this, startPromise); - this._writable = new WritableStream(sink, writableStrategy); - assert(this._writableController !== undefined); - assert(this._readableController !== undefined); - var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(this._readableController); - TransformStreamSetBackpressure(this, desiredSize <= 0); - var transformStream = this; - var startResult = InvokeOrNoop(transformer, 'start', [transformStream._transformStreamController]); - startPromise_resolve(startResult); - startPromise.catch(function (e) { - if (transformStream._errored === false) { - transformStream._errored = true; - transformStream._storedError = e; - } - }); - } - - _createClass(TransformStream, [{ - key: 'readable', - get: function get() { - if (IsTransformStream(this) === false) { - throw streamBrandCheckException('readable'); - } - - return this._readable; - } - }, { - key: 'writable', - get: function get() { - if (IsTransformStream(this) === false) { - throw streamBrandCheckException('writable'); - } - - return this._writable; - } - }]); - - return TransformStream; - }(); - - module.exports = { - TransformStream: TransformStream - }; - - function defaultControllerBrandCheckException(name) { - return new TypeError('TransformStreamDefaultController.prototype.' + name + ' can only be used on a TransformStreamDefaultController'); - } - - function streamBrandCheckException(name) { - return new TypeError('TransformStream.prototype.' + name + ' can only be used on a TransformStream'); - } - }, function (module, exports, __w_extracthighlights_require__) { - module.exports = __w_extracthighlights_require__(5); - }])); - - /***/ }), - /* 149 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - { - var isURLSupported = false; - - try { - if (typeof URL === 'function' && _typeof(URL.prototype) === 'object' && 'origin' in URL.prototype) { - var u = new URL('b', 'http://a'); - u.pathname = 'c%20d'; - isURLSupported = u.href === 'http://a/c%20d'; - } - } catch (ex) {} - - if (isURLSupported) { - exports.URL = URL; - } else { - var PolyfillURL = __w_extracthighlights_require__(150).URL; - - var OriginalURL = __w_extracthighlights_require__(8).URL; - - if (OriginalURL) { - PolyfillURL.createObjectURL = function (blob) { - return OriginalURL.createObjectURL.apply(OriginalURL, arguments); - }; - - PolyfillURL.revokeObjectURL = function (url) { - OriginalURL.revokeObjectURL(url); - }; - } - - exports.URL = PolyfillURL; - } - } - - /***/ }), - /* 150 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - (function URLConstructorClosure() { - - var relative = Object.create(null); - relative['ftp'] = 21; - relative['file'] = 0; - relative['gopher'] = 70; - relative['http'] = 80; - relative['https'] = 443; - relative['ws'] = 80; - relative['wss'] = 443; - var relativePathDotMapping = Object.create(null); - relativePathDotMapping['%2e'] = '.'; - relativePathDotMapping['.%2e'] = '..'; - relativePathDotMapping['%2e.'] = '..'; - relativePathDotMapping['%2e%2e'] = '..'; - - function isRelativeScheme(scheme) { - return relative[scheme] !== undefined; - } - - function invalid() { - clear.call(this); - this._isInvalid = true; - } - - function IDNAToASCII(h) { - if (h === '') { - invalid.call(this); - } - - return h.toLowerCase(); - } - - function percentEscape(c) { - var unicode = c.charCodeAt(0); - - if (unicode > 0x20 && unicode < 0x7F && [0x22, 0x23, 0x3C, 0x3E, 0x3F, 0x60].indexOf(unicode) === -1) { - return c; - } - - return encodeURIComponent(c); - } - - function percentEscapeQuery(c) { - var unicode = c.charCodeAt(0); - - if (unicode > 0x20 && unicode < 0x7F && [0x22, 0x23, 0x3C, 0x3E, 0x60].indexOf(unicode) === -1) { - return c; - } - - return encodeURIComponent(c); - } - - var EOF, - ALPHA = /[a-zA-Z]/, - ALPHANUMERIC = /[a-zA-Z0-9\+\-\.]/; - - function parse(input, stateOverride, base) { - - var state = stateOverride || 'scheme start', - cursor = 0, - buffer = '', - seenAt = false, - seenBracket = false; - - loop: while ((input[cursor - 1] !== EOF || cursor === 0) && !this._isInvalid) { - var c = input[cursor]; - - switch (state) { - case 'scheme start': - if (c && ALPHA.test(c)) { - buffer += c.toLowerCase(); - state = 'scheme'; - } else if (!stateOverride) { - buffer = ''; - state = 'no scheme'; - continue; - } else { - break loop; - } - - break; - - case 'scheme': - if (c && ALPHANUMERIC.test(c)) { - buffer += c.toLowerCase(); - } else if (c === ':') { - this._scheme = buffer; - buffer = ''; - - if (stateOverride) { - break loop; - } - - if (isRelativeScheme(this._scheme)) { - this._isRelative = true; - } - - if (this._scheme === 'file') { - state = 'relative'; - } else if (this._isRelative && base && base._scheme === this._scheme) { - state = 'relative or authority'; - } else if (this._isRelative) { - state = 'authority first slash'; - } else { - state = 'scheme data'; - } - } else if (!stateOverride) { - buffer = ''; - cursor = 0; - state = 'no scheme'; - continue; - } else if (c === EOF) { - break loop; - } else { - break loop; - } - - break; - - case 'scheme data': - if (c === '?') { - this._query = '?'; - state = 'query'; - } else if (c === '#') { - this._fragment = '#'; - state = 'fragment'; - } else { - if (c !== EOF && c !== '\t' && c !== '\n' && c !== '\r') { - this._schemeData += percentEscape(c); - } - } - - break; - - case 'no scheme': - if (!base || !isRelativeScheme(base._scheme)) { - invalid.call(this); - } else { - state = 'relative'; - continue; - } - - break; - - case 'relative or authority': - if (c === '/' && input[cursor + 1] === '/') { - state = 'authority ignore slashes'; - } else { - state = 'relative'; - continue; - } - - break; - - case 'relative': - this._isRelative = true; - - if (this._scheme !== 'file') { - this._scheme = base._scheme; - } - - if (c === EOF) { - this._host = base._host; - this._port = base._port; - this._path = base._path.slice(); - this._query = base._query; - this._username = base._username; - this._password = base._password; - break loop; - } else if (c === '/' || c === '\\') { - - state = 'relative slash'; - } else if (c === '?') { - this._host = base._host; - this._port = base._port; - this._path = base._path.slice(); - this._query = '?'; - this._username = base._username; - this._password = base._password; - state = 'query'; - } else if (c === '#') { - this._host = base._host; - this._port = base._port; - this._path = base._path.slice(); - this._query = base._query; - this._fragment = '#'; - this._username = base._username; - this._password = base._password; - state = 'fragment'; - } else { - var nextC = input[cursor + 1]; - var nextNextC = input[cursor + 2]; - - if (this._scheme !== 'file' || !ALPHA.test(c) || nextC !== ':' && nextC !== '|' || nextNextC !== EOF && nextNextC !== '/' && nextNextC !== '\\' && nextNextC !== '?' && nextNextC !== '#') { - this._host = base._host; - this._port = base._port; - this._username = base._username; - this._password = base._password; - this._path = base._path.slice(); - - this._path.pop(); - } - - state = 'relative path'; - continue; - } - - break; - - case 'relative slash': - if (c === '/' || c === '\\') { - - if (this._scheme === 'file') { - state = 'file host'; - } else { - state = 'authority ignore slashes'; - } - } else { - if (this._scheme !== 'file') { - this._host = base._host; - this._port = base._port; - this._username = base._username; - this._password = base._password; - } - - state = 'relative path'; - continue; - } - - break; - - case 'authority first slash': - if (c === '/') { - state = 'authority second slash'; - } else { - state = 'authority ignore slashes'; - continue; - } - - break; - - case 'authority second slash': - state = 'authority ignore slashes'; - - if (c !== '/') { - continue; - } - - break; - - case 'authority ignore slashes': - if (c !== '/' && c !== '\\') { - state = 'authority'; - continue; - } - - break; - - case 'authority': - if (c === '@') { - if (seenAt) { - buffer += '%40'; - } - - seenAt = true; - - for (var i = 0; i < buffer.length; i++) { - var cp = buffer[i]; - - if (cp === '\t' || cp === '\n' || cp === '\r') { - continue; - } - - if (cp === ':' && this._password === null) { - this._password = ''; - continue; - } - - var tempC = percentEscape(cp); - - if (this._password !== null) { - this._password += tempC; - } else { - this._username += tempC; - } - } - - buffer = ''; - } else if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#') { - cursor -= buffer.length; - buffer = ''; - state = 'host'; - continue; - } else { - buffer += c; - } - - break; - - case 'file host': - if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#') { - if (buffer.length === 2 && ALPHA.test(buffer[0]) && (buffer[1] === ':' || buffer[1] === '|')) { - state = 'relative path'; - } else if (buffer.length === 0) { - state = 'relative path start'; - } else { - this._host = IDNAToASCII.call(this, buffer); - buffer = ''; - state = 'relative path start'; - } - - continue; - } else if (c === '\t' || c === '\n' || c === '\r') ; else { - buffer += c; - } - - break; - - case 'host': - case 'hostname': - if (c === ':' && !seenBracket) { - this._host = IDNAToASCII.call(this, buffer); - buffer = ''; - state = 'port'; - - if (stateOverride === 'hostname') { - break loop; - } - } else if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#') { - this._host = IDNAToASCII.call(this, buffer); - buffer = ''; - state = 'relative path start'; - - if (stateOverride) { - break loop; - } - - continue; - } else if (c !== '\t' && c !== '\n' && c !== '\r') { - if (c === '[') { - seenBracket = true; - } else if (c === ']') { - seenBracket = false; - } - - buffer += c; - } else ; - - break; - - case 'port': - if (/[0-9]/.test(c)) { - buffer += c; - } else if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#' || stateOverride) { - if (buffer !== '') { - var temp = parseInt(buffer, 10); - - if (temp !== relative[this._scheme]) { - this._port = temp + ''; - } - - buffer = ''; - } - - if (stateOverride) { - break loop; - } - - state = 'relative path start'; - continue; - } else if (c === '\t' || c === '\n' || c === '\r') ; else { - invalid.call(this); - } - - break; - - case 'relative path start': - - state = 'relative path'; - - if (c !== '/' && c !== '\\') { - continue; - } - - break; - - case 'relative path': - if (c === EOF || c === '/' || c === '\\' || !stateOverride && (c === '?' || c === '#')) { - - var tmp; - - if (tmp = relativePathDotMapping[buffer.toLowerCase()]) { - buffer = tmp; - } - - if (buffer === '..') { - this._path.pop(); - - if (c !== '/' && c !== '\\') { - this._path.push(''); - } - } else if (buffer === '.' && c !== '/' && c !== '\\') { - this._path.push(''); - } else if (buffer !== '.') { - if (this._scheme === 'file' && this._path.length === 0 && buffer.length === 2 && ALPHA.test(buffer[0]) && buffer[1] === '|') { - buffer = buffer[0] + ':'; - } - - this._path.push(buffer); - } - - buffer = ''; - - if (c === '?') { - this._query = '?'; - state = 'query'; - } else if (c === '#') { - this._fragment = '#'; - state = 'fragment'; - } - } else if (c !== '\t' && c !== '\n' && c !== '\r') { - buffer += percentEscape(c); - } - - break; - - case 'query': - if (!stateOverride && c === '#') { - this._fragment = '#'; - state = 'fragment'; - } else if (c !== EOF && c !== '\t' && c !== '\n' && c !== '\r') { - this._query += percentEscapeQuery(c); - } - - break; - - case 'fragment': - if (c !== EOF && c !== '\t' && c !== '\n' && c !== '\r') { - this._fragment += c; - } - - break; - } - - cursor++; - } - } - - function clear() { - this._scheme = ''; - this._schemeData = ''; - this._username = ''; - this._password = null; - this._host = ''; - this._port = ''; - this._path = []; - this._query = ''; - this._fragment = ''; - this._isInvalid = false; - this._isRelative = false; - } - - function JURL(url, base) { - if (base !== undefined && !(base instanceof JURL)) { - base = new JURL(String(base)); - } - - this._url = url; - clear.call(this); - var input = url.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g, ''); - parse.call(this, input, null, base); - } - - JURL.prototype = { - toString: function toString() { - return this.href; - }, - - get href() { - if (this._isInvalid) { - return this._url; - } - - var authority = ''; - - if (this._username !== '' || this._password !== null) { - authority = this._username + (this._password !== null ? ':' + this._password : '') + '@'; - } - - return this.protocol + (this._isRelative ? '//' + authority + this.host : '') + this.pathname + this._query + this._fragment; - }, - - set href(value) { - clear.call(this); - parse.call(this, value); - }, - - get protocol() { - return this._scheme + ':'; - }, - - set protocol(value) { - if (this._isInvalid) { - return; - } - - parse.call(this, value + ':', 'scheme start'); - }, - - get host() { - return this._isInvalid ? '' : this._port ? this._host + ':' + this._port : this._host; - }, - - set host(value) { - if (this._isInvalid || !this._isRelative) { - return; - } - - parse.call(this, value, 'host'); - }, - - get hostname() { - return this._host; - }, - - set hostname(value) { - if (this._isInvalid || !this._isRelative) { - return; - } - - parse.call(this, value, 'hostname'); - }, - - get port() { - return this._port; - }, - - set port(value) { - if (this._isInvalid || !this._isRelative) { - return; - } - - parse.call(this, value, 'port'); - }, - - get pathname() { - return this._isInvalid ? '' : this._isRelative ? '/' + this._path.join('/') : this._schemeData; - }, - - set pathname(value) { - if (this._isInvalid || !this._isRelative) { - return; - } - - this._path = []; - parse.call(this, value, 'relative path start'); - }, - - get search() { - return this._isInvalid || !this._query || this._query === '?' ? '' : this._query; - }, - - set search(value) { - if (this._isInvalid || !this._isRelative) { - return; - } - - this._query = '?'; - - if (value[0] === '?') { - value = value.slice(1); - } - - parse.call(this, value, 'query'); - }, - - get hash() { - return this._isInvalid || !this._fragment || this._fragment === '#' ? '' : this._fragment; - }, - - set hash(value) { - if (this._isInvalid) { - return; - } - - this._fragment = '#'; - - if (value[0] === '#') { - value = value.slice(1); - } - - parse.call(this, value, 'fragment'); - }, - - get origin() { - var host; - - if (this._isInvalid || !this._scheme) { - return ''; - } - - switch (this._scheme) { - case 'data': - case 'file': - case 'javascript': - case 'mailto': - return 'null'; - - case 'blob': - try { - return new JURL(this._schemeData).origin || 'null'; - } catch (_) {} - - return 'null'; - } - - host = this.host; - - if (!host) { - return ''; - } - - return this._scheme + '://' + host; - } - - }; - exports.URL = JURL; - })(); - - /***/ }), - /* 151 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.NetworkPdfManager = exports.LocalPdfManager = void 0; - - var _regenerator = _interopRequireDefault(__w_extracthighlights_require__(2)); - - var _util = __w_extracthighlights_require__(6); - - var _chunked_stream = __w_extracthighlights_require__(152); - - var _document = __w_extracthighlights_require__(153); - - var _stream = __w_extracthighlights_require__(157); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - - function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - - function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - - function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - - function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - - function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - - var BasePdfManager = - /*#__PURE__*/ - function () { - function BasePdfManager() { - _classCallCheck(this, BasePdfManager); - - if (this.constructor === BasePdfManager) { - (0, _util.unreachable)('Cannot initialize BasePdfManager.'); - } - } - - _createClass(BasePdfManager, [{ - key: "onLoadedStream", - value: function onLoadedStream() { - (0, _util.unreachable)('Abstract method `onLoadedStream` called'); - } - }, { - key: "ensureDoc", - value: function ensureDoc(prop, args) { - return this.ensure(this.pdfDocument, prop, args); - } - }, { - key: "ensureXRef", - value: function ensureXRef(prop, args) { - return this.ensure(this.pdfDocument.xref, prop, args); - } - }, { - key: "ensureCatalog", - value: function ensureCatalog(prop, args) { - return this.ensure(this.pdfDocument.catalog, prop, args); - } - }, { - key: "getPage", - value: function getPage(pageIndex) { - return this.pdfDocument.getPage(pageIndex); - } - }, { - key: "fontFallback", - value: function fontFallback(id, handler) { - return this.pdfDocument.fontFallback(id, handler); - } - }, { - key: "cleanup", - value: function cleanup() { - return this.pdfDocument.cleanup(); - } - }, { - key: "ensure", - value: function () { - var _ensure = _asyncToGenerator( - /*#__PURE__*/ - _regenerator.default.mark(function _callee(obj, prop, args) { - return _regenerator.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - (0, _util.unreachable)('Abstract method `ensure` called'); - - case 1: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - - function ensure(_x, _x2, _x3) { - return _ensure.apply(this, arguments); - } - - return ensure; - }() - }, { - key: "requestRange", - value: function requestRange(begin, end) { - (0, _util.unreachable)('Abstract method `requestRange` called'); - } - }, { - key: "requestLoadedStream", - value: function requestLoadedStream() { - (0, _util.unreachable)('Abstract method `requestLoadedStream` called'); - } - }, { - key: "sendProgressiveData", - value: function sendProgressiveData(chunk) { - (0, _util.unreachable)('Abstract method `sendProgressiveData` called'); - } - }, { - key: "updatePassword", - value: function updatePassword(password) { - this._password = password; - } - }, { - key: "terminate", - value: function terminate() { - (0, _util.unreachable)('Abstract method `terminate` called'); - } - }, { - key: "docId", - get: function get() { - return this._docId; - } - }, { - key: "password", - get: function get() { - return this._password; - } - }, { - key: "docBaseUrl", - get: function get() { - var docBaseUrl = null; - - if (this._docBaseUrl) { - var absoluteUrl = (0, _util.createValidAbsoluteUrl)(this._docBaseUrl); - - if (absoluteUrl) { - docBaseUrl = absoluteUrl.href; - } else { - (0, _util.warn)("Invalid absolute docBaseUrl: \"".concat(this._docBaseUrl, "\".")); - } - } - - return (0, _util.shadow)(this, 'docBaseUrl', docBaseUrl); - } - }]); - - return BasePdfManager; - }(); - - var LocalPdfManager = - /*#__PURE__*/ - function (_BasePdfManager) { - _inherits(LocalPdfManager, _BasePdfManager); - - function LocalPdfManager(docId, data, password, evaluatorOptions, docBaseUrl) { - var _this; - - _classCallCheck(this, LocalPdfManager); - - _this = _possibleConstructorReturn(this, _getPrototypeOf(LocalPdfManager).call(this)); - _this._docId = docId; - _this._password = password; - _this._docBaseUrl = docBaseUrl; - _this.evaluatorOptions = evaluatorOptions; - var stream = new _stream.Stream(data); - _this.pdfDocument = new _document.PDFDocument(_assertThisInitialized(_assertThisInitialized(_this)), stream); - _this._loadedStreamPromise = Promise.resolve(stream); - return _this; - } - - _createClass(LocalPdfManager, [{ - key: "ensure", - value: function () { - var _ensure2 = _asyncToGenerator( - /*#__PURE__*/ - _regenerator.default.mark(function _callee2(obj, prop, args) { - var value; - return _regenerator.default.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - value = obj[prop]; - - if (!(typeof value === 'function')) { - _context2.next = 3; - break; - } - - return _context2.abrupt("return", value.apply(obj, args)); - - case 3: - return _context2.abrupt("return", value); - - case 4: - case "end": - return _context2.stop(); - } - } - }, _callee2, this); - })); - - function ensure(_x4, _x5, _x6) { - return _ensure2.apply(this, arguments); - } - - return ensure; - }() - }, { - key: "requestRange", - value: function requestRange(begin, end) { - return Promise.resolve(); - } - }, { - key: "requestLoadedStream", - value: function requestLoadedStream() {} - }, { - key: "onLoadedStream", - value: function onLoadedStream() { - return this._loadedStreamPromise; - } - }, { - key: "terminate", - value: function terminate() {} - }]); - - return LocalPdfManager; - }(BasePdfManager); - - exports.LocalPdfManager = LocalPdfManager; - - var NetworkPdfManager = - /*#__PURE__*/ - function (_BasePdfManager2) { - _inherits(NetworkPdfManager, _BasePdfManager2); - - function NetworkPdfManager(docId, pdfNetworkStream, args, evaluatorOptions, docBaseUrl) { - var _this2; - - _classCallCheck(this, NetworkPdfManager); - - _this2 = _possibleConstructorReturn(this, _getPrototypeOf(NetworkPdfManager).call(this)); - _this2._docId = docId; - _this2._password = args.password; - _this2._docBaseUrl = docBaseUrl; - _this2.msgHandler = args.msgHandler; - _this2.evaluatorOptions = evaluatorOptions; - _this2.streamManager = new _chunked_stream.ChunkedStreamManager(pdfNetworkStream, { - msgHandler: args.msgHandler, - length: args.length, - disableAutoFetch: args.disableAutoFetch, - rangeChunkSize: args.rangeChunkSize - }); - _this2.pdfDocument = new _document.PDFDocument(_assertThisInitialized(_assertThisInitialized(_this2)), _this2.streamManager.getStream()); - return _this2; - } - - _createClass(NetworkPdfManager, [{ - key: "ensure", - value: function () { - var _ensure3 = _asyncToGenerator( - /*#__PURE__*/ - _regenerator.default.mark(function _callee3(obj, prop, args) { - var value; - return _regenerator.default.wrap(function _callee3$(_context3) { - while (1) { - switch (_context3.prev = _context3.next) { - case 0: - _context3.prev = 0; - value = obj[prop]; - - if (!(typeof value === 'function')) { - _context3.next = 4; - break; - } - - return _context3.abrupt("return", value.apply(obj, args)); - - case 4: - return _context3.abrupt("return", value); - - case 7: - _context3.prev = 7; - _context3.t0 = _context3["catch"](0); - - if (_context3.t0 instanceof _util.MissingDataException) { - _context3.next = 11; - break; - } - - throw _context3.t0; - - case 11: - _context3.next = 13; - return this.requestRange(_context3.t0.begin, _context3.t0.end); - - case 13: - return _context3.abrupt("return", this.ensure(obj, prop, args)); - - case 14: - case "end": - return _context3.stop(); - } - } - }, _callee3, this, [[0, 7]]); - })); - - function ensure(_x7, _x8, _x9) { - return _ensure3.apply(this, arguments); - } - - return ensure; - }() - }, { - key: "requestRange", - value: function requestRange(begin, end) { - return this.streamManager.requestRange(begin, end); - } - }, { - key: "requestLoadedStream", - value: function requestLoadedStream() { - this.streamManager.requestAllChunks(); - } - }, { - key: "sendProgressiveData", - value: function sendProgressiveData(chunk) { - this.streamManager.onReceiveData({ - chunk: chunk - }); - } - }, { - key: "onLoadedStream", - value: function onLoadedStream() { - return this.streamManager.onLoadedStream(); - } - }, { - key: "terminate", - value: function terminate() { - this.streamManager.abort(); - } - }]); - - return NetworkPdfManager; - }(BasePdfManager); - - exports.NetworkPdfManager = NetworkPdfManager; - - /***/ }), - /* 152 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.ChunkedStreamManager = exports.ChunkedStream = void 0; - - var _util = __w_extracthighlights_require__(6); - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - - var ChunkedStream = - /*#__PURE__*/ - function () { - function ChunkedStream(length, chunkSize, manager) { - _classCallCheck(this, ChunkedStream); - - this.bytes = new Uint8Array(length); - this.start = 0; - this.pos = 0; - this.end = length; - this.chunkSize = chunkSize; - this.loadedChunks = []; - this.numChunksLoaded = 0; - this.numChunks = Math.ceil(length / chunkSize); - this.manager = manager; - this.progressiveDataLength = 0; - this.lastSuccessfulEnsureByteChunk = -1; - } - - _createClass(ChunkedStream, [{ - key: "getMissingChunks", - value: function getMissingChunks() { - var chunks = []; - - for (var chunk = 0, n = this.numChunks; chunk < n; ++chunk) { - if (!this.loadedChunks[chunk]) { - chunks.push(chunk); - } - } - - return chunks; - } - }, { - key: "getBaseStreams", - value: function getBaseStreams() { - return [this]; - } - }, { - key: "allChunksLoaded", - value: function allChunksLoaded() { - return this.numChunksLoaded === this.numChunks; - } - }, { - key: "onReceiveData", - value: function onReceiveData(begin, chunk) { - var chunkSize = this.chunkSize; - - if (begin % chunkSize !== 0) { - throw new Error("Bad begin offset: ".concat(begin)); - } - - var end = begin + chunk.byteLength; - - if (end % chunkSize !== 0 && end !== this.bytes.length) { - throw new Error("Bad end offset: ".concat(end)); - } - - this.bytes.set(new Uint8Array(chunk), begin); - var beginChunk = Math.floor(begin / chunkSize); - var endChunk = Math.floor((end - 1) / chunkSize) + 1; - - for (var curChunk = beginChunk; curChunk < endChunk; ++curChunk) { - if (!this.loadedChunks[curChunk]) { - this.loadedChunks[curChunk] = true; - ++this.numChunksLoaded; - } - } - } - }, { - key: "onReceiveProgressiveData", - value: function onReceiveProgressiveData(data) { - var position = this.progressiveDataLength; - var beginChunk = Math.floor(position / this.chunkSize); - this.bytes.set(new Uint8Array(data), position); - position += data.byteLength; - this.progressiveDataLength = position; - var endChunk = position >= this.end ? this.numChunks : Math.floor(position / this.chunkSize); - - for (var curChunk = beginChunk; curChunk < endChunk; ++curChunk) { - if (!this.loadedChunks[curChunk]) { - this.loadedChunks[curChunk] = true; - ++this.numChunksLoaded; - } - } - } - }, { - key: "ensureByte", - value: function ensureByte(pos) { - var chunk = Math.floor(pos / this.chunkSize); - - if (chunk === this.lastSuccessfulEnsureByteChunk) { - return; - } - - if (!this.loadedChunks[chunk]) { - throw new _util.MissingDataException(pos, pos + 1); - } - - this.lastSuccessfulEnsureByteChunk = chunk; - } - }, { - key: "ensureRange", - value: function ensureRange(begin, end) { - if (begin >= end) { - return; - } - - if (end <= this.progressiveDataLength) { - return; - } - - var chunkSize = this.chunkSize; - var beginChunk = Math.floor(begin / chunkSize); - var endChunk = Math.floor((end - 1) / chunkSize) + 1; - - for (var chunk = beginChunk; chunk < endChunk; ++chunk) { - if (!this.loadedChunks[chunk]) { - throw new _util.MissingDataException(begin, end); - } - } - } - }, { - key: "nextEmptyChunk", - value: function nextEmptyChunk(beginChunk) { - var numChunks = this.numChunks; - - for (var i = 0; i < numChunks; ++i) { - var chunk = (beginChunk + i) % numChunks; - - if (!this.loadedChunks[chunk]) { - return chunk; - } - } - - return null; - } - }, { - key: "hasChunk", - value: function hasChunk(chunk) { - return !!this.loadedChunks[chunk]; - } - }, { - key: "getByte", - value: function getByte() { - var pos = this.pos; - - if (pos >= this.end) { - return -1; - } - - this.ensureByte(pos); - return this.bytes[this.pos++]; - } - }, { - key: "getUint16", - value: function getUint16() { - var b0 = this.getByte(); - var b1 = this.getByte(); - - if (b0 === -1 || b1 === -1) { - return -1; - } - - return (b0 << 8) + b1; - } - }, { - key: "getInt32", - value: function getInt32() { - var b0 = this.getByte(); - var b1 = this.getByte(); - var b2 = this.getByte(); - var b3 = this.getByte(); - return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; - } - }, { - key: "getBytes", - value: function getBytes(length) { - var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var bytes = this.bytes; - var pos = this.pos; - var strEnd = this.end; - - if (!length) { - this.ensureRange(pos, strEnd); - - var _subarray = bytes.subarray(pos, strEnd); - - return forceClamped ? new Uint8ClampedArray(_subarray) : _subarray; - } - - var end = pos + length; - - if (end > strEnd) { - end = strEnd; - } - - this.ensureRange(pos, end); - this.pos = end; - var subarray = bytes.subarray(pos, end); - return forceClamped ? new Uint8ClampedArray(subarray) : subarray; - } - }, { - key: "peekByte", - value: function peekByte() { - var peekedByte = this.getByte(); - this.pos--; - return peekedByte; - } - }, { - key: "peekBytes", - value: function peekBytes(length) { - var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var bytes = this.getBytes(length, forceClamped); - this.pos -= bytes.length; - return bytes; - } - }, { - key: "getByteRange", - value: function getByteRange(begin, end) { - this.ensureRange(begin, end); - return this.bytes.subarray(begin, end); - } - }, { - key: "skip", - value: function skip(n) { - if (!n) { - n = 1; - } - - this.pos += n; - } - }, { - key: "reset", - value: function reset() { - this.pos = this.start; - } - }, { - key: "moveStart", - value: function moveStart() { - this.start = this.pos; - } - }, { - key: "makeSubStream", - value: function makeSubStream(start, length, dict) { - this.ensureRange(start, start + length); - - function ChunkedStreamSubstream() {} - - ChunkedStreamSubstream.prototype = Object.create(this); - - ChunkedStreamSubstream.prototype.getMissingChunks = function () { - var chunkSize = this.chunkSize; - var beginChunk = Math.floor(this.start / chunkSize); - var endChunk = Math.floor((this.end - 1) / chunkSize) + 1; - var missingChunks = []; - - for (var chunk = beginChunk; chunk < endChunk; ++chunk) { - if (!this.loadedChunks[chunk]) { - missingChunks.push(chunk); - } - } - - return missingChunks; - }; - - var subStream = new ChunkedStreamSubstream(); - subStream.pos = subStream.start = start; - subStream.end = start + length || this.end; - subStream.dict = dict; - return subStream; - } - }, { - key: "length", - get: function get() { - return this.end - this.start; - } - }, { - key: "isEmpty", - get: function get() { - return this.length === 0; - } - }]); - - return ChunkedStream; - }(); - - exports.ChunkedStream = ChunkedStream; - - var ChunkedStreamManager = - /*#__PURE__*/ - function () { - function ChunkedStreamManager(pdfNetworkStream, args) { - _classCallCheck(this, ChunkedStreamManager); - - this.length = args.length; - this.chunkSize = args.rangeChunkSize; - this.stream = new ChunkedStream(this.length, this.chunkSize, this); - this.pdfNetworkStream = pdfNetworkStream; - this.disableAutoFetch = args.disableAutoFetch; - this.msgHandler = args.msgHandler; - this.currRequestId = 0; - this.chunksNeededByRequest = Object.create(null); - this.requestsByChunk = Object.create(null); - this.promisesByRequest = Object.create(null); - this.progressiveDataLength = 0; - this.aborted = false; - this._loadedStreamCapability = (0, _util.createPromiseCapability)(); - } - - _createClass(ChunkedStreamManager, [{ - key: "onLoadedStream", - value: function onLoadedStream() { - return this._loadedStreamCapability.promise; - } - }, { - key: "sendRequest", - value: function sendRequest(begin, end) { - var _this = this; - - var rangeReader = this.pdfNetworkStream.getRangeReader(begin, end); - - if (!rangeReader.isStreamingSupported) { - rangeReader.onProgress = this.onProgress.bind(this); - } - - var chunks = [], - loaded = 0; - var promise = new Promise(function (resolve, reject) { - var readChunk = function readChunk(chunk) { - try { - if (!chunk.done) { - var data = chunk.value; - chunks.push(data); - loaded += (0, _util.arrayByteLength)(data); - - if (rangeReader.isStreamingSupported) { - _this.onProgress({ - loaded: loaded - }); - } - - rangeReader.read().then(readChunk, reject); - return; - } - - var chunkData = (0, _util.arraysToBytes)(chunks); - chunks = null; - resolve(chunkData); - } catch (e) { - reject(e); - } - }; - - rangeReader.read().then(readChunk, reject); - }); - promise.then(function (data) { - if (_this.aborted) { - return; - } - - _this.onReceiveData({ - chunk: data, - begin: begin - }); - }); - } - }, { - key: "requestAllChunks", - value: function requestAllChunks() { - var missingChunks = this.stream.getMissingChunks(); - - this._requestChunks(missingChunks); - - return this._loadedStreamCapability.promise; - } - }, { - key: "_requestChunks", - value: function _requestChunks(chunks) { - var requestId = this.currRequestId++; - var chunksNeeded = Object.create(null); - this.chunksNeededByRequest[requestId] = chunksNeeded; - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = chunks[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var _chunk = _step.value; - - if (!this.stream.hasChunk(_chunk)) { - chunksNeeded[_chunk] = true; - } - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return != null) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - if ((0, _util.isEmptyObj)(chunksNeeded)) { - return Promise.resolve(); - } - - var capability = (0, _util.createPromiseCapability)(); - this.promisesByRequest[requestId] = capability; - var chunksToRequest = []; - - for (var chunk in chunksNeeded) { - chunk = chunk | 0; - - if (!(chunk in this.requestsByChunk)) { - this.requestsByChunk[chunk] = []; - chunksToRequest.push(chunk); - } - - this.requestsByChunk[chunk].push(requestId); - } - - if (!chunksToRequest.length) { - return capability.promise; - } - - var groupedChunksToRequest = this.groupChunks(chunksToRequest); - var _iteratorNormalCompletion2 = true; - var _didIteratorError2 = false; - var _iteratorError2 = undefined; - - try { - for (var _iterator2 = groupedChunksToRequest[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { - var groupedChunk = _step2.value; - var begin = groupedChunk.beginChunk * this.chunkSize; - var end = Math.min(groupedChunk.endChunk * this.chunkSize, this.length); - this.sendRequest(begin, end); - } - } catch (err) { - _didIteratorError2 = true; - _iteratorError2 = err; - } finally { - try { - if (!_iteratorNormalCompletion2 && _iterator2.return != null) { - _iterator2.return(); - } - } finally { - if (_didIteratorError2) { - throw _iteratorError2; - } - } - } - - return capability.promise; - } - }, { - key: "getStream", - value: function getStream() { - return this.stream; - } - }, { - key: "requestRange", - value: function requestRange(begin, end) { - end = Math.min(end, this.length); - var beginChunk = this.getBeginChunk(begin); - var endChunk = this.getEndChunk(end); - var chunks = []; - - for (var chunk = beginChunk; chunk < endChunk; ++chunk) { - chunks.push(chunk); - } - - return this._requestChunks(chunks); - } - }, { - key: "requestRanges", - value: function requestRanges() { - var ranges = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - var chunksToRequest = []; - var _iteratorNormalCompletion3 = true; - var _didIteratorError3 = false; - var _iteratorError3 = undefined; - - try { - for (var _iterator3 = ranges[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { - var range = _step3.value; - var beginChunk = this.getBeginChunk(range.begin); - var endChunk = this.getEndChunk(range.end); - - for (var chunk = beginChunk; chunk < endChunk; ++chunk) { - if (!chunksToRequest.includes(chunk)) { - chunksToRequest.push(chunk); - } - } - } - } catch (err) { - _didIteratorError3 = true; - _iteratorError3 = err; - } finally { - try { - if (!_iteratorNormalCompletion3 && _iterator3.return != null) { - _iterator3.return(); - } - } finally { - if (_didIteratorError3) { - throw _iteratorError3; - } - } - } - - chunksToRequest.sort(function (a, b) { - return a - b; - }); - return this._requestChunks(chunksToRequest); - } - }, { - key: "groupChunks", - value: function groupChunks(chunks) { - var groupedChunks = []; - var beginChunk = -1; - var prevChunk = -1; - - for (var i = 0, ii = chunks.length; i < ii; ++i) { - var chunk = chunks[i]; - - if (beginChunk < 0) { - beginChunk = chunk; - } - - if (prevChunk >= 0 && prevChunk + 1 !== chunk) { - groupedChunks.push({ - beginChunk: beginChunk, - endChunk: prevChunk + 1 - }); - beginChunk = chunk; - } - - if (i + 1 === chunks.length) { - groupedChunks.push({ - beginChunk: beginChunk, - endChunk: chunk + 1 - }); - } - - prevChunk = chunk; - } - - return groupedChunks; - } - }, { - key: "onProgress", - value: function onProgress(args) { - this.msgHandler.send('DocProgress', { - loaded: this.stream.numChunksLoaded * this.chunkSize + args.loaded, - total: this.length - }); - } - }, { - key: "onReceiveData", - value: function onReceiveData(args) { - var chunk = args.chunk; - var isProgressive = args.begin === undefined; - var begin = isProgressive ? this.progressiveDataLength : args.begin; - var end = begin + chunk.byteLength; - var beginChunk = Math.floor(begin / this.chunkSize); - var endChunk = end < this.length ? Math.floor(end / this.chunkSize) : Math.ceil(end / this.chunkSize); - - if (isProgressive) { - this.stream.onReceiveProgressiveData(chunk); - this.progressiveDataLength = end; - } else { - this.stream.onReceiveData(begin, chunk); - } - - if (this.stream.allChunksLoaded()) { - this._loadedStreamCapability.resolve(this.stream); - } - - var loadedRequests = []; - - for (var _chunk2 = beginChunk; _chunk2 < endChunk; ++_chunk2) { - var requestIds = this.requestsByChunk[_chunk2] || []; - delete this.requestsByChunk[_chunk2]; - var _iteratorNormalCompletion4 = true; - var _didIteratorError4 = false; - var _iteratorError4 = undefined; - - try { - for (var _iterator4 = requestIds[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { - var requestId = _step4.value; - var chunksNeeded = this.chunksNeededByRequest[requestId]; - - if (_chunk2 in chunksNeeded) { - delete chunksNeeded[_chunk2]; - } - - if (!(0, _util.isEmptyObj)(chunksNeeded)) { - continue; - } - - loadedRequests.push(requestId); - } - } catch (err) { - _didIteratorError4 = true; - _iteratorError4 = err; - } finally { - try { - if (!_iteratorNormalCompletion4 && _iterator4.return != null) { - _iterator4.return(); - } - } finally { - if (_didIteratorError4) { - throw _iteratorError4; - } - } - } - } - - if (!this.disableAutoFetch && (0, _util.isEmptyObj)(this.requestsByChunk)) { - var nextEmptyChunk; - - if (this.stream.numChunksLoaded === 1) { - var lastChunk = this.stream.numChunks - 1; - - if (!this.stream.hasChunk(lastChunk)) { - nextEmptyChunk = lastChunk; - } - } else { - nextEmptyChunk = this.stream.nextEmptyChunk(endChunk); - } - - if (Number.isInteger(nextEmptyChunk)) { - this._requestChunks([nextEmptyChunk]); - } - } - - for (var _i = 0; _i < loadedRequests.length; _i++) { - var _requestId = loadedRequests[_i]; - var capability = this.promisesByRequest[_requestId]; - delete this.promisesByRequest[_requestId]; - capability.resolve(); - } - - this.msgHandler.send('DocProgress', { - loaded: this.stream.numChunksLoaded * this.chunkSize, - total: this.length - }); - } - }, { - key: "onError", - value: function onError(err) { - this._loadedStreamCapability.reject(err); - } - }, { - key: "getBeginChunk", - value: function getBeginChunk(begin) { - return Math.floor(begin / this.chunkSize); - } - }, { - key: "getEndChunk", - value: function getEndChunk(end) { - return Math.floor((end - 1) / this.chunkSize) + 1; - } - }, { - key: "abort", - value: function abort() { - this.aborted = true; - - if (this.pdfNetworkStream) { - this.pdfNetworkStream.cancelAllRequests('abort'); - } - - for (var requestId in this.promisesByRequest) { - this.promisesByRequest[requestId].reject(new Error('Request was aborted')); - } - } - }]); - - return ChunkedStreamManager; - }(); - - exports.ChunkedStreamManager = ChunkedStreamManager; - - /***/ }), - /* 153 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.PDFDocument = exports.Page = void 0; - - var _util = __w_extracthighlights_require__(6); - - var _obj = __w_extracthighlights_require__(154); - - var _primitives = __w_extracthighlights_require__(155); - - var _stream2 = __w_extracthighlights_require__(157); - - var _annotation = __w_extracthighlights_require__(169); - - var _crypto = __w_extracthighlights_require__(167); - - var _parser = __w_extracthighlights_require__(156); - - var _operator_list = __w_extracthighlights_require__(170); - - var _evaluator = __w_extracthighlights_require__(171); - - var _function = __w_extracthighlights_require__(185); - - function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } - - function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } - - function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } - - function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - - var DEFAULT_USER_UNIT = 1.0; - var LETTER_SIZE_MEDIABOX = [0, 0, 612, 792]; - - function isAnnotationRenderable(annotation, intent) { - return intent === 'display' && annotation.viewable || intent === 'print' && annotation.printable; - } - - var Page = - /*#__PURE__*/ - function () { - function Page(_ref) { - var pdfManager = _ref.pdfManager, - xref = _ref.xref, - pageIndex = _ref.pageIndex, - pageDict = _ref.pageDict, - ref = _ref.ref, - fontCache = _ref.fontCache, - builtInCMapCache = _ref.builtInCMapCache, - pdfFunctionFactory = _ref.pdfFunctionFactory; - - _classCallCheck(this, Page); - - this.pdfManager = pdfManager; - this.pageIndex = pageIndex; - this.pageDict = pageDict; - this.xref = xref; - this.ref = ref; - this.fontCache = fontCache; - this.builtInCMapCache = builtInCMapCache; - this.pdfFunctionFactory = pdfFunctionFactory; - this.evaluatorOptions = pdfManager.evaluatorOptions; - this.resourcesPromise = null; - var uniquePrefix = "p".concat(this.pageIndex, "_"); - var idCounters = { - obj: 0 - }; - this.idFactory = { - createObjId: function createObjId() { - return uniquePrefix + ++idCounters.obj; - } - }; - } - - _createClass(Page, [{ - key: "_getInheritableProperty", - value: function _getInheritableProperty(key) { - var getArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var value = (0, _util.getInheritableProperty)({ - dict: this.pageDict, - key: key, - getArray: getArray, - stopWhenFound: false - }); - - if (!Array.isArray(value)) { - return value; - } - - if (value.length === 1 || !(0, _primitives.isDict)(value[0])) { - return value[0]; - } - - return _primitives.Dict.merge(this.xref, value); - } - }, { - key: "getContentStream", - value: function getContentStream() { - var content = this.content; - var stream; - - if (Array.isArray(content)) { - var xref = this.xref; - var streams = []; - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = content[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var _stream = _step.value; - streams.push(xref.fetchIfRef(_stream)); - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return != null) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - stream = new _stream2.StreamsSequenceStream(streams); - } else if ((0, _primitives.isStream)(content)) { - stream = content; - } else { - stream = new _stream2.NullStream(); - } - - return stream; - } - }, { - key: "loadResources", - value: function loadResources(keys) { - var _this = this; - - if (!this.resourcesPromise) { - this.resourcesPromise = this.pdfManager.ensure(this, 'resources'); - } - - return this.resourcesPromise.then(function () { - var objectLoader = new _obj.ObjectLoader(_this.resources, keys, _this.xref); - return objectLoader.load(); - }); - } - }, { - key: "getOperatorList", - value: function getOperatorList(_ref2) { - var _this2 = this; - - var handler = _ref2.handler, - task = _ref2.task, - intent = _ref2.intent, - renderInteractiveForms = _ref2.renderInteractiveForms; - var contentStreamPromise = this.pdfManager.ensure(this, 'getContentStream'); - var resourcesPromise = this.loadResources(['ExtGState', 'ColorSpace', 'Pattern', 'Shading', 'XObject', 'Font']); - var partialEvaluator = new _evaluator.PartialEvaluator({ - pdfManager: this.pdfManager, - xref: this.xref, - handler: handler, - pageIndex: this.pageIndex, - idFactory: this.idFactory, - fontCache: this.fontCache, - builtInCMapCache: this.builtInCMapCache, - options: this.evaluatorOptions, - pdfFunctionFactory: this.pdfFunctionFactory - }); - var dataPromises = Promise.all([contentStreamPromise, resourcesPromise]); - var pageListPromise = dataPromises.then(function (_ref3) { - var _ref4 = _slicedToArray(_ref3, 1), - contentStream = _ref4[0]; - - var opList = new _operator_list.OperatorList(intent, handler, _this2.pageIndex); - handler.send('StartRenderPage', { - transparency: partialEvaluator.hasBlendModes(_this2.resources), - pageIndex: _this2.pageIndex, - intent: intent - }); - return partialEvaluator.getOperatorList({ - stream: contentStream, - task: task, - resources: _this2.resources, - operatorList: opList - }).then(function () { - return opList; - }); - }); - return Promise.all([pageListPromise, this._parsedAnnotations]).then(function (_ref5) { - var _ref6 = _slicedToArray(_ref5, 2), - pageOpList = _ref6[0], - annotations = _ref6[1]; - - if (annotations.length === 0) { - pageOpList.flush(true); - return pageOpList; - } - - var opListPromises = []; - var _iteratorNormalCompletion2 = true; - var _didIteratorError2 = false; - var _iteratorError2 = undefined; - - try { - for (var _iterator2 = annotations[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { - var annotation = _step2.value; - - if (isAnnotationRenderable(annotation, intent)) { - opListPromises.push(annotation.getOperatorList(partialEvaluator, task, renderInteractiveForms)); - } - } - } catch (err) { - _didIteratorError2 = true; - _iteratorError2 = err; - } finally { - try { - if (!_iteratorNormalCompletion2 && _iterator2.return != null) { - _iterator2.return(); - } - } finally { - if (_didIteratorError2) { - throw _iteratorError2; - } - } - } - - return Promise.all(opListPromises).then(function (opLists) { - pageOpList.addOp(_util.OPS.beginAnnotations, []); - var _iteratorNormalCompletion3 = true; - var _didIteratorError3 = false; - var _iteratorError3 = undefined; - - try { - for (var _iterator3 = opLists[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { - var opList = _step3.value; - pageOpList.addOpList(opList); - } - } catch (err) { - _didIteratorError3 = true; - _iteratorError3 = err; - } finally { - try { - if (!_iteratorNormalCompletion3 && _iterator3.return != null) { - _iterator3.return(); - } - } finally { - if (_didIteratorError3) { - throw _iteratorError3; - } - } - } - - pageOpList.addOp(_util.OPS.endAnnotations, []); - pageOpList.flush(true); - return pageOpList; - }); - }); - } - }, { - key: "extractTextContent", - value: function extractTextContent(_ref7) { - var _this3 = this; - - var handler = _ref7.handler, - task = _ref7.task, - normalizeWhitespace = _ref7.normalizeWhitespace, - sink = _ref7.sink, - combineTextItems = _ref7.combineTextItems; - var contentStreamPromise = this.pdfManager.ensure(this, 'getContentStream'); - var resourcesPromise = this.loadResources(['ExtGState', 'XObject', 'Font']); - var dataPromises = Promise.all([contentStreamPromise, resourcesPromise]); - return dataPromises.then(function (_ref8) { - var _ref9 = _slicedToArray(_ref8, 1), - contentStream = _ref9[0]; - - var partialEvaluator = new _evaluator.PartialEvaluator({ - pdfManager: _this3.pdfManager, - xref: _this3.xref, - handler: handler, - pageIndex: _this3.pageIndex, - idFactory: _this3.idFactory, - fontCache: _this3.fontCache, - builtInCMapCache: _this3.builtInCMapCache, - options: _this3.evaluatorOptions, - pdfFunctionFactory: _this3.pdfFunctionFactory - }); - return partialEvaluator.getTextContent({ - stream: contentStream, - task: task, - resources: _this3.resources, - normalizeWhitespace: normalizeWhitespace, - combineTextItems: combineTextItems, - sink: sink - }); - }); - } - }, { - key: "getAnnotationsData", - value: function getAnnotationsData(intent) { - return this._parsedAnnotations.then(function (annotations) { - var annotationsData = []; - - for (var i = 0, ii = annotations.length; i < ii; i++) { - if (!intent || isAnnotationRenderable(annotations[i], intent)) { - annotationsData.push(annotations[i].data); - } - } - - return annotationsData; - }); - } - }, { - key: "content", - get: function get() { - return this.pageDict.get('Contents'); - } - }, { - key: "resources", - get: function get() { - return (0, _util.shadow)(this, 'resources', this._getInheritableProperty('Resources') || _primitives.Dict.empty); - } - }, { - key: "mediaBox", - get: function get() { - var mediaBox = this._getInheritableProperty('MediaBox', true); - - if (!Array.isArray(mediaBox) || mediaBox.length !== 4) { - return (0, _util.shadow)(this, 'mediaBox', LETTER_SIZE_MEDIABOX); - } - - return (0, _util.shadow)(this, 'mediaBox', mediaBox); - } - }, { - key: "cropBox", - get: function get() { - var cropBox = this._getInheritableProperty('CropBox', true); - - if (!Array.isArray(cropBox) || cropBox.length !== 4) { - return (0, _util.shadow)(this, 'cropBox', this.mediaBox); - } - - return (0, _util.shadow)(this, 'cropBox', cropBox); - } - }, { - key: "userUnit", - get: function get() { - var obj = this.pageDict.get('UserUnit'); - - if (!(0, _util.isNum)(obj) || obj <= 0) { - obj = DEFAULT_USER_UNIT; - } - - return (0, _util.shadow)(this, 'userUnit', obj); - } - }, { - key: "view", - get: function get() { - var mediaBox = this.mediaBox, - cropBox = this.cropBox; - - if (mediaBox === cropBox) { - return (0, _util.shadow)(this, 'view', mediaBox); - } - - var intersection = _util.Util.intersect(cropBox, mediaBox); - - return (0, _util.shadow)(this, 'view', intersection || mediaBox); - } - }, { - key: "rotate", - get: function get() { - var rotate = this._getInheritableProperty('Rotate') || 0; - - if (rotate % 90 !== 0) { - rotate = 0; - } else if (rotate >= 360) { - rotate = rotate % 360; - } else if (rotate < 0) { - rotate = (rotate % 360 + 360) % 360; - } - - return (0, _util.shadow)(this, 'rotate', rotate); - } - }, { - key: "annotations", - get: function get() { - return (0, _util.shadow)(this, 'annotations', this._getInheritableProperty('Annots') || []); - } - }, { - key: "_parsedAnnotations", - get: function get() { - var _this4 = this; - - var parsedAnnotations = this.pdfManager.ensure(this, 'annotations').then(function () { - var annotationRefs = _this4.annotations; - var annotationPromises = []; - - for (var i = 0, ii = annotationRefs.length; i < ii; i++) { - annotationPromises.push(_annotation.AnnotationFactory.create(_this4.xref, annotationRefs[i], _this4.pdfManager, _this4.idFactory)); - } - - return Promise.all(annotationPromises).then(function (annotations) { - return annotations.filter(function isDefined(annotation) { - return !!annotation; - }); - }, function (reason) { - (0, _util.warn)("_parsedAnnotations: \"".concat(reason, "\".")); - return []; - }); - }); - return (0, _util.shadow)(this, '_parsedAnnotations', parsedAnnotations); - } - }]); - - return Page; - }(); - - exports.Page = Page; - var FINGERPRINT_FIRST_BYTES = 1024; - var EMPTY_FINGERPRINT = '\x00\x00\x00\x00\x00\x00\x00' + '\x00\x00\x00\x00\x00\x00\x00\x00\x00'; - - function find(stream, needle, limit, backwards) { - var pos = stream.pos; - var end = stream.end; - - if (pos + limit > end) { - limit = end - pos; - } - - var strBuf = []; - - for (var i = 0; i < limit; ++i) { - strBuf.push(String.fromCharCode(stream.getByte())); - } - - var str = strBuf.join(''); - stream.pos = pos; - var index = backwards ? str.lastIndexOf(needle) : str.indexOf(needle); - - if (index === -1) { - return false; - } - - stream.pos += index; - return true; - } - - var PDFDocument = - /*#__PURE__*/ - function () { - function PDFDocument(pdfManager, arg) { - _classCallCheck(this, PDFDocument); - - var stream; - - if ((0, _primitives.isStream)(arg)) { - stream = arg; - } else if ((0, _util.isArrayBuffer)(arg)) { - stream = new _stream2.Stream(arg); - } else { - throw new Error('PDFDocument: Unknown argument type'); - } - - if (stream.length <= 0) { - throw new Error('PDFDocument: Stream must have data'); - } - - this.pdfManager = pdfManager; - this.stream = stream; - this.xref = new _obj.XRef(stream, pdfManager); - this.pdfFunctionFactory = new _function.PDFFunctionFactory({ - xref: this.xref, - isEvalSupported: pdfManager.evaluatorOptions.isEvalSupported - }); - this._pagePromises = []; - } - - _createClass(PDFDocument, [{ - key: "parse", - value: function parse(recoveryMode) { - this.setup(recoveryMode); - var version = this.catalog.catDict.get('Version'); - - if ((0, _primitives.isName)(version)) { - this.pdfFormatVersion = version.name; - } - - try { - this.acroForm = this.catalog.catDict.get('AcroForm'); - - if (this.acroForm) { - this.xfa = this.acroForm.get('XFA'); - var fields = this.acroForm.get('Fields'); - - if ((!fields || !Array.isArray(fields) || fields.length === 0) && !this.xfa) { - this.acroForm = null; - } - } - } catch (ex) { - if (ex instanceof _util.MissingDataException) { - throw ex; - } - - (0, _util.info)('Cannot fetch AcroForm entry; assuming no AcroForms are present'); - this.acroForm = null; - } - } - }, { - key: "checkHeader", - value: function checkHeader() { - var stream = this.stream; - stream.reset(); - - if (!find(stream, '%PDF-', 1024)) { - return; - } - - stream.moveStart(); - var MAX_PDF_VERSION_LENGTH = 12; - var version = '', - ch; - - while ((ch = stream.getByte()) > 0x20) { - if (version.length >= MAX_PDF_VERSION_LENGTH) { - break; - } - - version += String.fromCharCode(ch); - } - - if (!this.pdfFormatVersion) { - this.pdfFormatVersion = version.substring(5); - } - } - }, { - key: "parseStartXRef", - value: function parseStartXRef() { - this.xref.setStartXRef(this.startXRef); - } - }, { - key: "setup", - value: function setup(recoveryMode) { - this.xref.parse(recoveryMode); - this.catalog = new _obj.Catalog(this.pdfManager, this.xref); - } - }, { - key: "_getLinearizationPage", - value: function _getLinearizationPage(pageIndex) { - var catalog = this.catalog, - linearization = this.linearization; - (0, _util.assert)(linearization && linearization.pageFirst === pageIndex); - var ref = new _primitives.Ref(linearization.objectNumberFirst, 0); - return this.xref.fetchAsync(ref).then(function (obj) { - if ((0, _primitives.isDict)(obj, 'Page') || (0, _primitives.isDict)(obj) && !obj.has('Type') && obj.has('Contents')) { - if (ref && !catalog.pageKidsCountCache.has(ref)) { - catalog.pageKidsCountCache.put(ref, 1); - } - - return [obj, ref]; - } - - throw new _util.FormatError('The Linearization dictionary doesn\'t point ' + 'to a valid Page dictionary.'); - }).catch(function (reason) { - (0, _util.info)(reason); - return catalog.getPageDict(pageIndex); - }); - } - }, { - key: "getPage", - value: function getPage(pageIndex) { - var _this5 = this; - - if (this._pagePromises[pageIndex] !== undefined) { - return this._pagePromises[pageIndex]; - } - - var catalog = this.catalog, - linearization = this.linearization; - var promise = linearization && linearization.pageFirst === pageIndex ? this._getLinearizationPage(pageIndex) : catalog.getPageDict(pageIndex); - return this._pagePromises[pageIndex] = promise.then(function (_ref10) { - var _ref11 = _slicedToArray(_ref10, 2), - pageDict = _ref11[0], - ref = _ref11[1]; - - return new Page({ - pdfManager: _this5.pdfManager, - xref: _this5.xref, - pageIndex: pageIndex, - pageDict: pageDict, - ref: ref, - fontCache: catalog.fontCache, - builtInCMapCache: catalog.builtInCMapCache, - pdfFunctionFactory: _this5.pdfFunctionFactory - }); - }); - } - }, { - key: "checkFirstPage", - value: function checkFirstPage() { - var _this6 = this; - - return this.getPage(0).catch(function (reason) { - if (reason instanceof _util.XRefEntryException) { - _this6._pagePromises.length = 0; - - _this6.cleanup(); - - throw new _util.XRefParseException(); - } - }); - } - }, { - key: "fontFallback", - value: function fontFallback(id, handler) { - return this.catalog.fontFallback(id, handler); - } - }, { - key: "cleanup", - value: function cleanup() { - return this.catalog.cleanup(); - } - }, { - key: "linearization", - get: function get() { - var linearization = null; - - try { - linearization = _parser.Linearization.create(this.stream); - } catch (err) { - if (err instanceof _util.MissingDataException) { - throw err; - } - - (0, _util.info)(err); - } - - return (0, _util.shadow)(this, 'linearization', linearization); - } - }, { - key: "startXRef", - get: function get() { - var stream = this.stream; - var startXRef = 0; - - if (this.linearization) { - stream.reset(); - - if (find(stream, 'endobj', 1024)) { - startXRef = stream.pos + 6; - } - } else { - var step = 1024; - var startXRefLength = 'startxref'.length; - var found = false, - pos = stream.end; - - while (!found && pos > 0) { - pos -= step - startXRefLength; - - if (pos < 0) { - pos = 0; - } - - stream.pos = pos; - found = find(stream, 'startxref', step, true); - } - - if (found) { - stream.skip(9); - var ch; - - do { - ch = stream.getByte(); - } while ((0, _util.isSpace)(ch)); - - var str = ''; - - while (ch >= 0x20 && ch <= 0x39) { - str += String.fromCharCode(ch); - ch = stream.getByte(); - } - - startXRef = parseInt(str, 10); - - if (isNaN(startXRef)) { - startXRef = 0; - } - } - } - - return (0, _util.shadow)(this, 'startXRef', startXRef); - } - }, { - key: "numPages", - get: function get() { - var linearization = this.linearization; - var num = linearization ? linearization.numPages : this.catalog.numPages; - return (0, _util.shadow)(this, 'numPages', num); - } - }, { - key: "documentInfo", - get: function get() { - var DocumentInfoValidators = { - Title: _util.isString, - Author: _util.isString, - Subject: _util.isString, - Keywords: _util.isString, - Creator: _util.isString, - Producer: _util.isString, - CreationDate: _util.isString, - ModDate: _util.isString, - Trapped: _primitives.isName - }; - var docInfo = { - PDFFormatVersion: this.pdfFormatVersion, - IsLinearized: !!this.linearization, - IsAcroFormPresent: !!this.acroForm, - IsXFAPresent: !!this.xfa - }; - var infoDict; - - try { - infoDict = this.xref.trailer.get('Info'); - } catch (err) { - if (err instanceof _util.MissingDataException) { - throw err; - } - - (0, _util.info)('The document information dictionary is invalid.'); - } - - if ((0, _primitives.isDict)(infoDict)) { - var _iteratorNormalCompletion4 = true; - var _didIteratorError4 = false; - var _iteratorError4 = undefined; - - try { - for (var _iterator4 = infoDict.getKeys()[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { - var key = _step4.value; - var value = infoDict.get(key); - - if (DocumentInfoValidators[key]) { - if (DocumentInfoValidators[key](value)) { - docInfo[key] = typeof value !== 'string' ? value : (0, _util.stringToPDFString)(value); - } else { - (0, _util.info)("Bad value in document info for \"".concat(key, "\".")); - } - } else if (typeof key === 'string') { - var customValue = void 0; - - if ((0, _util.isString)(value)) { - customValue = (0, _util.stringToPDFString)(value); - } else if ((0, _primitives.isName)(value) || (0, _util.isNum)(value) || (0, _util.isBool)(value)) { - customValue = value; - } else { - (0, _util.info)("Unsupported value in document info for (custom) \"".concat(key, "\".")); - continue; - } - - if (!docInfo['Custom']) { - docInfo['Custom'] = Object.create(null); - } - - docInfo['Custom'][key] = customValue; - } - } - } catch (err) { - _didIteratorError4 = true; - _iteratorError4 = err; - } finally { - try { - if (!_iteratorNormalCompletion4 && _iterator4.return != null) { - _iterator4.return(); - } - } finally { - if (_didIteratorError4) { - throw _iteratorError4; - } - } - } - } - - return (0, _util.shadow)(this, 'documentInfo', docInfo); - } - }, { - key: "fingerprint", - get: function get() { - var hash; - var idArray = this.xref.trailer.get('ID'); - - if (Array.isArray(idArray) && idArray[0] && (0, _util.isString)(idArray[0]) && idArray[0] !== EMPTY_FINGERPRINT) { - hash = (0, _util.stringToBytes)(idArray[0]); - } else { - if (this.stream.ensureRange) { - this.stream.ensureRange(0, Math.min(FINGERPRINT_FIRST_BYTES, this.stream.end)); - } - - hash = (0, _crypto.calculateMD5)(this.stream.bytes.subarray(0, FINGERPRINT_FIRST_BYTES), 0, FINGERPRINT_FIRST_BYTES); - } - - var fingerprint = ''; - - for (var i = 0, ii = hash.length; i < ii; i++) { - var hex = hash[i].toString(16); - fingerprint += hex.length === 1 ? '0' + hex : hex; - } - - return (0, _util.shadow)(this, 'fingerprint', fingerprint); - } - }]); - - return PDFDocument; - }(); - - exports.PDFDocument = PDFDocument; - - /***/ }), - /* 154 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.FileSpec = exports.XRef = exports.ObjectLoader = exports.Catalog = void 0; - - var _regenerator = _interopRequireDefault(__w_extracthighlights_require__(2)); - - var _util = __w_extracthighlights_require__(6); - - var _primitives = __w_extracthighlights_require__(155); - - var _parser = __w_extracthighlights_require__(156); - - var _chunked_stream = __w_extracthighlights_require__(152); - - var _crypto = __w_extracthighlights_require__(167); - - var _colorspace = __w_extracthighlights_require__(168); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - - function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - - function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - - function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - - function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - - function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - - function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } - - function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } - - function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } - - function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - - function fetchDestination(dest) { - return (0, _primitives.isDict)(dest) ? dest.get('D') : dest; - } - - var Catalog = - /*#__PURE__*/ - function () { - function Catalog(pdfManager, xref) { - _classCallCheck(this, Catalog); - - this.pdfManager = pdfManager; - this.xref = xref; - this.catDict = xref.getCatalogObj(); - - if (!(0, _primitives.isDict)(this.catDict)) { - throw new _util.FormatError('Catalog object is not a dictionary.'); - } - - this.fontCache = new _primitives.RefSetCache(); - this.builtInCMapCache = new Map(); - this.pageKidsCountCache = new _primitives.RefSetCache(); - } - - _createClass(Catalog, [{ - key: "_readDocumentOutline", - value: function _readDocumentOutline() { - var obj = this.catDict.get('Outlines'); - - if (!(0, _primitives.isDict)(obj)) { - return null; - } - - obj = obj.getRaw('First'); - - if (!(0, _primitives.isRef)(obj)) { - return null; - } - - var root = { - items: [] - }; - var queue = [{ - obj: obj, - parent: root - }]; - var processed = new _primitives.RefSet(); - processed.put(obj); - var xref = this.xref, - blackColor = new Uint8ClampedArray(3); - - while (queue.length > 0) { - var i = queue.shift(); - var outlineDict = xref.fetchIfRef(i.obj); - - if (outlineDict === null) { - continue; - } - - if (!outlineDict.has('Title')) { - throw new _util.FormatError('Invalid outline item encountered.'); - } - - var data = { - url: null, - dest: null - }; - Catalog.parseDestDictionary({ - destDict: outlineDict, - resultObj: data, - docBaseUrl: this.pdfManager.docBaseUrl - }); - var title = outlineDict.get('Title'); - var flags = outlineDict.get('F') || 0; - var color = outlineDict.getArray('C'); - var rgbColor = blackColor; - - if (Array.isArray(color) && color.length === 3 && (color[0] !== 0 || color[1] !== 0 || color[2] !== 0)) { - rgbColor = _colorspace.ColorSpace.singletons.rgb.getRgb(color, 0); - } - - var outlineItem = { - dest: data.dest, - url: data.url, - unsafeUrl: data.unsafeUrl, - newWindow: data.newWindow, - title: (0, _util.stringToPDFString)(title), - color: rgbColor, - count: outlineDict.get('Count'), - bold: !!(flags & 2), - italic: !!(flags & 1), - items: [] - }; - i.parent.items.push(outlineItem); - obj = outlineDict.getRaw('First'); - - if ((0, _primitives.isRef)(obj) && !processed.has(obj)) { - queue.push({ - obj: obj, - parent: outlineItem - }); - processed.put(obj); - } - - obj = outlineDict.getRaw('Next'); - - if ((0, _primitives.isRef)(obj) && !processed.has(obj)) { - queue.push({ - obj: obj, - parent: i.parent - }); - processed.put(obj); - } - } - - return root.items.length > 0 ? root.items : null; - } - }, { - key: "_readPermissions", - value: function _readPermissions() { - var encrypt = this.xref.trailer.get('Encrypt'); - - if (!(0, _primitives.isDict)(encrypt)) { - return null; - } - - var flags = encrypt.get('P'); - - if (!(0, _util.isNum)(flags)) { - return null; - } - - flags += Math.pow(2, 32); - var permissions = []; - - for (var key in _util.PermissionFlag) { - var value = _util.PermissionFlag[key]; - - if (flags & value) { - permissions.push(value); - } - } - - return permissions; - } - }, { - key: "getDestination", - value: function getDestination(destinationId) { - var obj = this._readDests(); - - if (obj instanceof NameTree || obj instanceof _primitives.Dict) { - return fetchDestination(obj.get(destinationId) || null); - } - - return null; - } - }, { - key: "_readDests", - value: function _readDests() { - var obj = this.catDict.get('Names'); - - if (obj && obj.has('Dests')) { - return new NameTree(obj.getRaw('Dests'), this.xref); - } else if (this.catDict.has('Dests')) { - return this.catDict.get('Dests'); - } - } - }, { - key: "_readPageLabels", - value: function _readPageLabels() { - var obj = this.catDict.getRaw('PageLabels'); - - if (!obj) { - return null; - } - - var pageLabels = new Array(this.numPages); - var style = null, - prefix = ''; - var numberTree = new NumberTree(obj, this.xref); - var nums = numberTree.getAll(); - var currentLabel = '', - currentIndex = 1; - - for (var i = 0, ii = this.numPages; i < ii; i++) { - if (i in nums) { - var labelDict = nums[i]; - - if (!(0, _primitives.isDict)(labelDict)) { - throw new _util.FormatError('PageLabel is not a dictionary.'); - } - - if (labelDict.has('Type') && !(0, _primitives.isName)(labelDict.get('Type'), 'PageLabel')) { - throw new _util.FormatError('Invalid type in PageLabel dictionary.'); - } - - if (labelDict.has('S')) { - var s = labelDict.get('S'); - - if (!(0, _primitives.isName)(s)) { - throw new _util.FormatError('Invalid style in PageLabel dictionary.'); - } - - style = s.name; - } else { - style = null; - } - - if (labelDict.has('P')) { - var p = labelDict.get('P'); - - if (!(0, _util.isString)(p)) { - throw new _util.FormatError('Invalid prefix in PageLabel dictionary.'); - } - - prefix = (0, _util.stringToPDFString)(p); - } else { - prefix = ''; - } - - if (labelDict.has('St')) { - var st = labelDict.get('St'); - - if (!(Number.isInteger(st) && st >= 1)) { - throw new _util.FormatError('Invalid start in PageLabel dictionary.'); - } - - currentIndex = st; - } else { - currentIndex = 1; - } - } - - switch (style) { - case 'D': - currentLabel = currentIndex; - break; - - case 'R': - case 'r': - currentLabel = (0, _util.toRomanNumerals)(currentIndex, style === 'r'); - break; - - case 'A': - case 'a': - var LIMIT = 26; - var A_UPPER_CASE = 0x41, - A_LOWER_CASE = 0x61; - var baseCharCode = style === 'a' ? A_LOWER_CASE : A_UPPER_CASE; - var letterIndex = currentIndex - 1; - var character = String.fromCharCode(baseCharCode + letterIndex % LIMIT); - var charBuf = []; - - for (var j = 0, jj = letterIndex / LIMIT | 0; j <= jj; j++) { - charBuf.push(character); - } - - currentLabel = charBuf.join(''); - break; - - default: - if (style) { - throw new _util.FormatError("Invalid style \"".concat(style, "\" in PageLabel dictionary.")); - } - - currentLabel = ''; - } - - pageLabels[i] = prefix + currentLabel; - currentIndex++; - } - - return pageLabels; - } - }, { - key: "fontFallback", - value: function fontFallback(id, handler) { - var promises = []; - this.fontCache.forEach(function (promise) { - promises.push(promise); - }); - return Promise.all(promises).then(function (translatedFonts) { - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = translatedFonts[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var translatedFont = _step.value; - - if (translatedFont.loadedName === id) { - translatedFont.fallback(handler); - return; - } - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return != null) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - }); - } - }, { - key: "cleanup", - value: function cleanup() { - var _this = this; - - this.pageKidsCountCache.clear(); - var promises = []; - this.fontCache.forEach(function (promise) { - promises.push(promise); - }); - return Promise.all(promises).then(function (translatedFonts) { - for (var i = 0, ii = translatedFonts.length; i < ii; i++) { - var font = translatedFonts[i].dict; - delete font.translated; - } - - _this.fontCache.clear(); - - _this.builtInCMapCache.clear(); - }); - } - }, { - key: "getPageDict", - value: function getPageDict(pageIndex) { - var capability = (0, _util.createPromiseCapability)(); - var nodesToVisit = [this.catDict.getRaw('Pages')]; - var xref = this.xref, - pageKidsCountCache = this.pageKidsCountCache; - var count, - currentPageIndex = 0; - - function next() { - var _loop = function _loop() { - var currentNode = nodesToVisit.pop(); - - if ((0, _primitives.isRef)(currentNode)) { - count = pageKidsCountCache.get(currentNode); - - if (count > 0 && currentPageIndex + count < pageIndex) { - currentPageIndex += count; - return "continue"; - } - - xref.fetchAsync(currentNode).then(function (obj) { - if ((0, _primitives.isDict)(obj, 'Page') || (0, _primitives.isDict)(obj) && !obj.has('Kids')) { - if (pageIndex === currentPageIndex) { - if (currentNode && !pageKidsCountCache.has(currentNode)) { - pageKidsCountCache.put(currentNode, 1); - } - - capability.resolve([obj, currentNode]); - } else { - currentPageIndex++; - next(); - } - - return; - } - - nodesToVisit.push(obj); - next(); - }, capability.reject); - return { - v: void 0 - }; - } - - if (!(0, _primitives.isDict)(currentNode)) { - capability.reject(new _util.FormatError('Page dictionary kid reference points to wrong type of object.')); - return { - v: void 0 - }; - } - - count = currentNode.get('Count'); - - if (Number.isInteger(count) && count >= 0) { - var objId = currentNode.objId; - - if (objId && !pageKidsCountCache.has(objId)) { - pageKidsCountCache.put(objId, count); - } - - if (currentPageIndex + count <= pageIndex) { - currentPageIndex += count; - return "continue"; - } - } - - var kids = currentNode.get('Kids'); - - if (!Array.isArray(kids)) { - if ((0, _primitives.isName)(currentNode.get('Type'), 'Page') || !currentNode.has('Type') && currentNode.has('Contents')) { - if (currentPageIndex === pageIndex) { - capability.resolve([currentNode, null]); - return { - v: void 0 - }; - } - - currentPageIndex++; - return "continue"; - } - - capability.reject(new _util.FormatError('Page dictionary kids object is not an array.')); - return { - v: void 0 - }; - } - - for (var last = kids.length - 1; last >= 0; last--) { - nodesToVisit.push(kids[last]); - } - }; - - while (nodesToVisit.length) { - var _ret = _loop(); - - switch (_ret) { - case "continue": - continue; - - default: - if (_typeof(_ret) === "object") return _ret.v; - } - } - - capability.reject(new Error("Page index ".concat(pageIndex, " not found."))); - } - - next(); - return capability.promise; - } - }, { - key: "getPageIndex", - value: function getPageIndex(pageRef) { - var xref = this.xref; - - function pagesBeforeRef(kidRef) { - var total = 0, - parentRef; - return xref.fetchAsync(kidRef).then(function (node) { - if ((0, _primitives.isRefsEqual)(kidRef, pageRef) && !(0, _primitives.isDict)(node, 'Page') && !((0, _primitives.isDict)(node) && !node.has('Type') && node.has('Contents'))) { - throw new _util.FormatError('The reference does not point to a /Page dictionary.'); - } - - if (!node) { - return null; - } - - if (!(0, _primitives.isDict)(node)) { - throw new _util.FormatError('Node must be a dictionary.'); - } - - parentRef = node.getRaw('Parent'); - return node.getAsync('Parent'); - }).then(function (parent) { - if (!parent) { - return null; - } - - if (!(0, _primitives.isDict)(parent)) { - throw new _util.FormatError('Parent must be a dictionary.'); - } - - return parent.getAsync('Kids'); - }).then(function (kids) { - if (!kids) { - return null; - } - - var kidPromises = []; - var found = false; - - for (var i = 0, ii = kids.length; i < ii; i++) { - var kid = kids[i]; - - if (!(0, _primitives.isRef)(kid)) { - throw new _util.FormatError('Kid must be a reference.'); - } - - if ((0, _primitives.isRefsEqual)(kid, kidRef)) { - found = true; - break; - } - - kidPromises.push(xref.fetchAsync(kid).then(function (kid) { - if (!(0, _primitives.isDict)(kid)) { - throw new _util.FormatError('Kid node must be a dictionary.'); - } - - if (kid.has('Count')) { - total += kid.get('Count'); - } else { - total++; - } - })); - } - - if (!found) { - throw new _util.FormatError('Kid reference not found in parent\'s kids.'); - } - - return Promise.all(kidPromises).then(function () { - return [total, parentRef]; - }); - }); - } - - var total = 0; - - function next(ref) { - return pagesBeforeRef(ref).then(function (args) { - if (!args) { - return total; - } - - var _args = _slicedToArray(args, 2), - count = _args[0], - parentRef = _args[1]; - - total += count; - return next(parentRef); - }); - } - - return next(pageRef); - } - }, { - key: "metadata", - get: function get() { - var streamRef = this.catDict.getRaw('Metadata'); - - if (!(0, _primitives.isRef)(streamRef)) { - return (0, _util.shadow)(this, 'metadata', null); - } - - var suppressEncryption = !(this.xref.encrypt && this.xref.encrypt.encryptMetadata); - var stream = this.xref.fetch(streamRef, suppressEncryption); - var metadata; - - if (stream && (0, _primitives.isDict)(stream.dict)) { - var type = stream.dict.get('Type'); - var subtype = stream.dict.get('Subtype'); - - if ((0, _primitives.isName)(type, 'Metadata') && (0, _primitives.isName)(subtype, 'XML')) { - try { - metadata = (0, _util.stringToUTF8String)((0, _util.bytesToString)(stream.getBytes())); - } catch (e) { - if (e instanceof _util.MissingDataException) { - throw e; - } - - (0, _util.info)('Skipping invalid metadata.'); - } - } - } - - return (0, _util.shadow)(this, 'metadata', metadata); - } - }, { - key: "toplevelPagesDict", - get: function get() { - var pagesObj = this.catDict.get('Pages'); - - if (!(0, _primitives.isDict)(pagesObj)) { - throw new _util.FormatError('Invalid top-level pages dictionary.'); - } - - return (0, _util.shadow)(this, 'toplevelPagesDict', pagesObj); - } - }, { - key: "documentOutline", - get: function get() { - var obj = null; - - try { - obj = this._readDocumentOutline(); - } catch (ex) { - if (ex instanceof _util.MissingDataException) { - throw ex; - } - - (0, _util.warn)('Unable to read document outline.'); - } - - return (0, _util.shadow)(this, 'documentOutline', obj); - } - }, { - key: "permissions", - get: function get() { - var permissions = null; - - try { - permissions = this._readPermissions(); - } catch (ex) { - if (ex instanceof _util.MissingDataException) { - throw ex; - } - - (0, _util.warn)('Unable to read permissions.'); - } - - return (0, _util.shadow)(this, 'permissions', permissions); - } - }, { - key: "numPages", - get: function get() { - var obj = this.toplevelPagesDict.get('Count'); - - if (!Number.isInteger(obj)) { - throw new _util.FormatError('Page count in top-level pages dictionary is not an integer.'); - } - - return (0, _util.shadow)(this, 'numPages', obj); - } - }, { - key: "destinations", - get: function get() { - var obj = this._readDests(), - dests = Object.create(null); - - if (obj instanceof NameTree) { - var names = obj.getAll(); - - for (var name in names) { - dests[name] = fetchDestination(names[name]); - } - } else if (obj instanceof _primitives.Dict) { - obj.forEach(function (key, value) { - if (value) { - dests[key] = fetchDestination(value); - } - }); - } - - return (0, _util.shadow)(this, 'destinations', dests); - } - }, { - key: "pageLabels", - get: function get() { - var obj = null; - - try { - obj = this._readPageLabels(); - } catch (ex) { - if (ex instanceof _util.MissingDataException) { - throw ex; - } - - (0, _util.warn)('Unable to read page labels.'); - } - - return (0, _util.shadow)(this, 'pageLabels', obj); - } - }, { - key: "pageMode", - get: function get() { - var obj = this.catDict.get('PageMode'); - var pageMode = 'UseNone'; - - if ((0, _primitives.isName)(obj)) { - switch (obj.name) { - case 'UseNone': - case 'UseOutlines': - case 'UseThumbs': - case 'FullScreen': - case 'UseOC': - case 'UseAttachments': - pageMode = obj.name; - } - } - - return (0, _util.shadow)(this, 'pageMode', pageMode); - } - }, { - key: "openActionDestination", - get: function get() { - var obj = this.catDict.get('OpenAction'); - var openActionDest = null; - - if ((0, _primitives.isDict)(obj)) { - var destDict = new _primitives.Dict(this.xref); - destDict.set('A', obj); - var resultObj = { - url: null, - dest: null - }; - Catalog.parseDestDictionary({ - destDict: destDict, - resultObj: resultObj - }); - - if (Array.isArray(resultObj.dest)) { - openActionDest = resultObj.dest; - } - } else if (Array.isArray(obj)) { - openActionDest = obj; - } - - return (0, _util.shadow)(this, 'openActionDestination', openActionDest); - } - }, { - key: "attachments", - get: function get() { - var obj = this.catDict.get('Names'); - var attachments = null; - - if (obj && obj.has('EmbeddedFiles')) { - var nameTree = new NameTree(obj.getRaw('EmbeddedFiles'), this.xref); - var names = nameTree.getAll(); - - for (var name in names) { - var fs = new FileSpec(names[name], this.xref); - - if (!attachments) { - attachments = Object.create(null); - } - - attachments[(0, _util.stringToPDFString)(name)] = fs.serializable; - } - } - - return (0, _util.shadow)(this, 'attachments', attachments); - } - }, { - key: "javaScript", - get: function get() { - var obj = this.catDict.get('Names'); - var javaScript = null; - - function appendIfJavaScriptDict(jsDict) { - var type = jsDict.get('S'); - - if (!(0, _primitives.isName)(type, 'JavaScript')) { - return; - } - - var js = jsDict.get('JS'); - - if ((0, _primitives.isStream)(js)) { - js = (0, _util.bytesToString)(js.getBytes()); - } else if (!(0, _util.isString)(js)) { - return; - } - - if (!javaScript) { - javaScript = []; - } - - javaScript.push((0, _util.stringToPDFString)(js)); - } - - if (obj && obj.has('JavaScript')) { - var nameTree = new NameTree(obj.getRaw('JavaScript'), this.xref); - var names = nameTree.getAll(); - - for (var name in names) { - var jsDict = names[name]; - - if ((0, _primitives.isDict)(jsDict)) { - appendIfJavaScriptDict(jsDict); - } - } - } - - var openActionDict = this.catDict.get('OpenAction'); - - if ((0, _primitives.isDict)(openActionDict, 'Action')) { - var actionType = openActionDict.get('S'); - - if ((0, _primitives.isName)(actionType, 'Named')) { - var action = openActionDict.get('N'); - - if ((0, _primitives.isName)(action, 'Print')) { - if (!javaScript) { - javaScript = []; - } - - javaScript.push('print({});'); - } - } else { - appendIfJavaScriptDict(openActionDict); - } - } - - return (0, _util.shadow)(this, 'javaScript', javaScript); - } - }], [{ - key: "parseDestDictionary", - value: function parseDestDictionary(params) { - function addDefaultProtocolToUrl(url) { - return url.startsWith('www.') ? "http://".concat(url) : url; - } - - function tryConvertUrlEncoding(url) { - try { - return (0, _util.stringToUTF8String)(url); - } catch (e) { - return url; - } - } - - var destDict = params.destDict; - - if (!(0, _primitives.isDict)(destDict)) { - (0, _util.warn)('parseDestDictionary: `destDict` must be a dictionary.'); - return; - } - - var resultObj = params.resultObj; - - if (_typeof(resultObj) !== 'object') { - (0, _util.warn)('parseDestDictionary: `resultObj` must be an object.'); - return; - } - - var docBaseUrl = params.docBaseUrl || null; - var action = destDict.get('A'), - url, - dest; - - if (!(0, _primitives.isDict)(action) && destDict.has('Dest')) { - action = destDict.get('Dest'); - } - - if ((0, _primitives.isDict)(action)) { - var actionType = action.get('S'); - - if (!(0, _primitives.isName)(actionType)) { - (0, _util.warn)('parseDestDictionary: Invalid type in Action dictionary.'); - return; - } - - var actionName = actionType.name; - - switch (actionName) { - case 'URI': - url = action.get('URI'); - - if ((0, _primitives.isName)(url)) { - url = '/' + url.name; - } else if ((0, _util.isString)(url)) { - url = addDefaultProtocolToUrl(url); - } - - break; - - case 'GoTo': - dest = action.get('D'); - break; - - case 'Launch': - case 'GoToR': - var urlDict = action.get('F'); - - if ((0, _primitives.isDict)(urlDict)) { - url = urlDict.get('F') || null; - } else if ((0, _util.isString)(urlDict)) { - url = urlDict; - } - - var remoteDest = action.get('D'); - - if (remoteDest) { - if ((0, _primitives.isName)(remoteDest)) { - remoteDest = remoteDest.name; - } - - if ((0, _util.isString)(url)) { - var baseUrl = url.split('#')[0]; - - if ((0, _util.isString)(remoteDest)) { - url = baseUrl + '#' + remoteDest; - } else if (Array.isArray(remoteDest)) { - url = baseUrl + '#' + JSON.stringify(remoteDest); - } - } - } - - var newWindow = action.get('NewWindow'); - - if ((0, _util.isBool)(newWindow)) { - resultObj.newWindow = newWindow; - } - - break; - - case 'Named': - var namedAction = action.get('N'); - - if ((0, _primitives.isName)(namedAction)) { - resultObj.action = namedAction.name; - } - - break; - - case 'JavaScript': - var jsAction = action.get('JS'); - var js; - - if ((0, _primitives.isStream)(jsAction)) { - js = (0, _util.bytesToString)(jsAction.getBytes()); - } else if ((0, _util.isString)(jsAction)) { - js = jsAction; - } - - if (js) { - var URL_OPEN_METHODS = ['app.launchURL', 'window.open']; - var regex = new RegExp('^\\s*(' + URL_OPEN_METHODS.join('|').split('.').join('\\.') + ')\\((?:\'|\")([^\'\"]*)(?:\'|\")(?:,\\s*(\\w+)\\)|\\))', 'i'); - var jsUrl = regex.exec((0, _util.stringToPDFString)(js)); - - if (jsUrl && jsUrl[2]) { - url = jsUrl[2]; - - if (jsUrl[3] === 'true' && jsUrl[1] === 'app.launchURL') { - resultObj.newWindow = true; - } - - break; - } - } - - default: - (0, _util.warn)("parseDestDictionary: unsupported action type \"".concat(actionName, "\".")); - break; - } - } else if (destDict.has('Dest')) { - dest = destDict.get('Dest'); - } - - if ((0, _util.isString)(url)) { - url = tryConvertUrlEncoding(url); - var absoluteUrl = (0, _util.createValidAbsoluteUrl)(url, docBaseUrl); - - if (absoluteUrl) { - resultObj.url = absoluteUrl.href; - } - - resultObj.unsafeUrl = url; - } - - if (dest) { - if ((0, _primitives.isName)(dest)) { - dest = dest.name; - } - - if ((0, _util.isString)(dest) || Array.isArray(dest)) { - resultObj.dest = dest; - } - } - } - }]); - - return Catalog; - }(); - - exports.Catalog = Catalog; - - var XRef = function XRefClosure() { - function XRef(stream, pdfManager) { - this.stream = stream; - this.pdfManager = pdfManager; - this.entries = []; - this.xrefstms = Object.create(null); - this.cache = []; - this.stats = { - streamTypes: [], - fontTypes: [] - }; - } - - XRef.prototype = { - setStartXRef: function XRef_setStartXRef(startXRef) { - this.startXRefQueue = [startXRef]; - }, - parse: function XRef_parse(recoveryMode) { - var trailerDict; - - if (!recoveryMode) { - trailerDict = this.readXRef(); - } else { - (0, _util.warn)('Indexing all PDF objects'); - trailerDict = this.indexObjects(); - } - - trailerDict.assignXref(this); - this.trailer = trailerDict; - var encrypt; - - try { - encrypt = trailerDict.get('Encrypt'); - } catch (ex) { - if (ex instanceof _util.MissingDataException) { - throw ex; - } - - (0, _util.warn)("XRef.parse - Invalid \"Encrypt\" reference: \"".concat(ex, "\".")); - } - - if ((0, _primitives.isDict)(encrypt)) { - var ids = trailerDict.get('ID'); - var fileId = ids && ids.length ? ids[0] : ''; - encrypt.suppressEncryption = true; - this.encrypt = new _crypto.CipherTransformFactory(encrypt, fileId, this.pdfManager.password); - } - - var root; - - try { - root = trailerDict.get('Root'); - } catch (ex) { - if (ex instanceof _util.MissingDataException) { - throw ex; - } - - (0, _util.warn)("XRef.parse - Invalid \"Root\" reference: \"".concat(ex, "\".")); - } - - if ((0, _primitives.isDict)(root) && root.has('Pages')) { - this.root = root; - } else { - if (!recoveryMode) { - throw new _util.XRefParseException(); - } - - throw new _util.FormatError('Invalid root reference'); - } - }, - processXRefTable: function XRef_processXRefTable(parser) { - if (!('tableState' in this)) { - this.tableState = { - entryNum: 0, - streamPos: parser.lexer.stream.pos, - parserBuf1: parser.buf1, - parserBuf2: parser.buf2 - }; - } - - var obj = this.readXRefTable(parser); - - if (!(0, _primitives.isCmd)(obj, 'trailer')) { - throw new _util.FormatError('Invalid XRef table: could not find trailer dictionary'); - } - - var dict = parser.getObj(); - - if (!(0, _primitives.isDict)(dict) && dict.dict) { - dict = dict.dict; - } - - if (!(0, _primitives.isDict)(dict)) { - throw new _util.FormatError('Invalid XRef table: could not parse trailer dictionary'); - } - - delete this.tableState; - return dict; - }, - readXRefTable: function XRef_readXRefTable(parser) { - var stream = parser.lexer.stream; - var tableState = this.tableState; - stream.pos = tableState.streamPos; - parser.buf1 = tableState.parserBuf1; - parser.buf2 = tableState.parserBuf2; - var obj; - - while (true) { - if (!('firstEntryNum' in tableState) || !('entryCount' in tableState)) { - if ((0, _primitives.isCmd)(obj = parser.getObj(), 'trailer')) { - break; - } - - tableState.firstEntryNum = obj; - tableState.entryCount = parser.getObj(); - } - - var first = tableState.firstEntryNum; - var count = tableState.entryCount; - - if (!Number.isInteger(first) || !Number.isInteger(count)) { - throw new _util.FormatError('Invalid XRef table: wrong types in subsection header'); - } - - for (var i = tableState.entryNum; i < count; i++) { - tableState.streamPos = stream.pos; - tableState.entryNum = i; - tableState.parserBuf1 = parser.buf1; - tableState.parserBuf2 = parser.buf2; - var entry = {}; - entry.offset = parser.getObj(); - entry.gen = parser.getObj(); - var type = parser.getObj(); - - if ((0, _primitives.isCmd)(type, 'f')) { - entry.free = true; - } else if ((0, _primitives.isCmd)(type, 'n')) { - entry.uncompressed = true; - } - - if (!Number.isInteger(entry.offset) || !Number.isInteger(entry.gen) || !(entry.free || entry.uncompressed)) { - throw new _util.FormatError("Invalid entry in XRef subsection: ".concat(first, ", ").concat(count)); - } - - if (i === 0 && entry.free && first === 1) { - first = 0; - } - - if (!this.entries[i + first]) { - this.entries[i + first] = entry; - } - } - - tableState.entryNum = 0; - tableState.streamPos = stream.pos; - tableState.parserBuf1 = parser.buf1; - tableState.parserBuf2 = parser.buf2; - delete tableState.firstEntryNum; - delete tableState.entryCount; - } - - if (this.entries[0] && !this.entries[0].free) { - throw new _util.FormatError('Invalid XRef table: unexpected first object'); - } - - return obj; - }, - processXRefStream: function XRef_processXRefStream(stream) { - if (!('streamState' in this)) { - var streamParameters = stream.dict; - var byteWidths = streamParameters.get('W'); - var range = streamParameters.get('Index'); - - if (!range) { - range = [0, streamParameters.get('Size')]; - } - - this.streamState = { - entryRanges: range, - byteWidths: byteWidths, - entryNum: 0, - streamPos: stream.pos - }; - } - - this.readXRefStream(stream); - delete this.streamState; - return stream.dict; - }, - readXRefStream: function XRef_readXRefStream(stream) { - var i, j; - var streamState = this.streamState; - stream.pos = streamState.streamPos; - var byteWidths = streamState.byteWidths; - var typeFieldWidth = byteWidths[0]; - var offsetFieldWidth = byteWidths[1]; - var generationFieldWidth = byteWidths[2]; - var entryRanges = streamState.entryRanges; - - while (entryRanges.length > 0) { - var first = entryRanges[0]; - var n = entryRanges[1]; - - if (!Number.isInteger(first) || !Number.isInteger(n)) { - throw new _util.FormatError("Invalid XRef range fields: ".concat(first, ", ").concat(n)); - } - - if (!Number.isInteger(typeFieldWidth) || !Number.isInteger(offsetFieldWidth) || !Number.isInteger(generationFieldWidth)) { - throw new _util.FormatError("Invalid XRef entry fields length: ".concat(first, ", ").concat(n)); - } - - for (i = streamState.entryNum; i < n; ++i) { - streamState.entryNum = i; - streamState.streamPos = stream.pos; - var type = 0, - offset = 0, - generation = 0; - - for (j = 0; j < typeFieldWidth; ++j) { - type = type << 8 | stream.getByte(); - } - - if (typeFieldWidth === 0) { - type = 1; - } - - for (j = 0; j < offsetFieldWidth; ++j) { - offset = offset << 8 | stream.getByte(); - } - - for (j = 0; j < generationFieldWidth; ++j) { - generation = generation << 8 | stream.getByte(); - } - - var entry = {}; - entry.offset = offset; - entry.gen = generation; - - switch (type) { - case 0: - entry.free = true; - break; - - case 1: - entry.uncompressed = true; - break; - - case 2: - break; - - default: - throw new _util.FormatError("Invalid XRef entry type: ".concat(type)); - } - - if (!this.entries[first + i]) { - this.entries[first + i] = entry; - } - } - - streamState.entryNum = 0; - streamState.streamPos = stream.pos; - entryRanges.splice(0, 2); - } - }, - indexObjects: function XRef_indexObjects() { - var TAB = 0x9, - LF = 0xA, - CR = 0xD, - SPACE = 0x20; - var PERCENT = 0x25, - LT = 0x3C; - - function readToken(data, offset) { - var token = '', - ch = data[offset]; - - while (ch !== LF && ch !== CR && ch !== LT) { - if (++offset >= data.length) { - break; - } - - token += String.fromCharCode(ch); - ch = data[offset]; - } - - return token; - } - - function skipUntil(data, offset, what) { - var length = what.length, - dataLength = data.length; - var skipped = 0; - - while (offset < dataLength) { - var i = 0; - - while (i < length && data[offset + i] === what[i]) { - ++i; - } - - if (i >= length) { - break; - } - - offset++; - skipped++; - } - - return skipped; - } - - var objRegExp = /^(\d+)\s+(\d+)\s+obj\b/; - var endobjRegExp = /\bendobj[\b\s]$/; - var nestedObjRegExp = /\s+(\d+\s+\d+\s+obj[\b\s<])$/; - var CHECK_CONTENT_LENGTH = 25; - var trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]); - var startxrefBytes = new Uint8Array([115, 116, 97, 114, 116, 120, 114, 101, 102]); - var objBytes = new Uint8Array([111, 98, 106]); - var xrefBytes = new Uint8Array([47, 88, 82, 101, 102]); - this.entries.length = 0; - var stream = this.stream; - stream.pos = 0; - var buffer = stream.getBytes(); - var position = stream.start, - length = buffer.length; - var trailers = [], - xrefStms = []; - - while (position < length) { - var ch = buffer[position]; - - if (ch === TAB || ch === LF || ch === CR || ch === SPACE) { - ++position; - continue; - } - - if (ch === PERCENT) { - do { - ++position; - - if (position >= length) { - break; - } - - ch = buffer[position]; - } while (ch !== LF && ch !== CR); - - continue; - } - - var token = readToken(buffer, position); - var m; - - if (token.startsWith('xref') && (token.length === 4 || /\s/.test(token[4]))) { - position += skipUntil(buffer, position, trailerBytes); - trailers.push(position); - position += skipUntil(buffer, position, startxrefBytes); - } else if (m = objRegExp.exec(token)) { - var num = m[1] | 0, - gen = m[2] | 0; - - if (typeof this.entries[num] === 'undefined') { - this.entries[num] = { - offset: position - stream.start, - gen: gen, - uncompressed: true - }; - } - - var contentLength = void 0, - startPos = position + token.length; - - while (startPos < buffer.length) { - var endPos = startPos + skipUntil(buffer, startPos, objBytes) + 4; - contentLength = endPos - position; - var checkPos = Math.max(endPos - CHECK_CONTENT_LENGTH, startPos); - var tokenStr = (0, _util.bytesToString)(buffer.subarray(checkPos, endPos)); - - if (endobjRegExp.test(tokenStr)) { - break; - } else { - var objToken = nestedObjRegExp.exec(tokenStr); - - if (objToken && objToken[1]) { - (0, _util.warn)('indexObjects: Found new "obj" inside of another "obj", ' + 'caused by missing "endobj" -- trying to recover.'); - contentLength -= objToken[1].length; - break; - } - } - - startPos = endPos; - } - - var content = buffer.subarray(position, position + contentLength); - var xrefTagOffset = skipUntil(content, 0, xrefBytes); - - if (xrefTagOffset < contentLength && content[xrefTagOffset + 5] < 64) { - xrefStms.push(position - stream.start); - this.xrefstms[position - stream.start] = 1; - } - - position += contentLength; - } else if (token.startsWith('trailer') && (token.length === 7 || /\s/.test(token[7]))) { - trailers.push(position); - position += skipUntil(buffer, position, startxrefBytes); - } else { - position += token.length + 1; - } - } - - var i, ii; - - for (i = 0, ii = xrefStms.length; i < ii; ++i) { - this.startXRefQueue.push(xrefStms[i]); - this.readXRef(true); - } - - var trailerDict; - - for (i = 0, ii = trailers.length; i < ii; ++i) { - stream.pos = trailers[i]; - var parser = new _parser.Parser(new _parser.Lexer(stream), true, this, true); - var obj = parser.getObj(); - - if (!(0, _primitives.isCmd)(obj, 'trailer')) { - continue; - } - - var dict = parser.getObj(); - - if (!(0, _primitives.isDict)(dict)) { - continue; - } - - var rootDict = void 0; - - try { - rootDict = dict.get('Root'); - } catch (ex) { - if (ex instanceof _util.MissingDataException) { - throw ex; - } - - continue; - } - - if (!(0, _primitives.isDict)(rootDict) || !rootDict.has('Pages')) { - continue; - } - - if (dict.has('ID')) { - return dict; - } - - trailerDict = dict; - } - - if (trailerDict) { - return trailerDict; - } - - throw new _util.InvalidPDFException('Invalid PDF structure'); - }, - readXRef: function XRef_readXRef(recoveryMode) { - var stream = this.stream; - var startXRefParsedCache = Object.create(null); - - try { - while (this.startXRefQueue.length) { - var startXRef = this.startXRefQueue[0]; - - if (startXRefParsedCache[startXRef]) { - (0, _util.warn)('readXRef - skipping XRef table since it was already parsed.'); - this.startXRefQueue.shift(); - continue; - } - - startXRefParsedCache[startXRef] = true; - stream.pos = startXRef + stream.start; - var parser = new _parser.Parser(new _parser.Lexer(stream), true, this); - var obj = parser.getObj(); - var dict; - - if ((0, _primitives.isCmd)(obj, 'xref')) { - dict = this.processXRefTable(parser); - - if (!this.topDict) { - this.topDict = dict; - } - - obj = dict.get('XRefStm'); - - if (Number.isInteger(obj)) { - var pos = obj; - - if (!(pos in this.xrefstms)) { - this.xrefstms[pos] = 1; - this.startXRefQueue.push(pos); - } - } - } else if (Number.isInteger(obj)) { - if (!Number.isInteger(parser.getObj()) || !(0, _primitives.isCmd)(parser.getObj(), 'obj') || !(0, _primitives.isStream)(obj = parser.getObj())) { - throw new _util.FormatError('Invalid XRef stream'); - } - - dict = this.processXRefStream(obj); - - if (!this.topDict) { - this.topDict = dict; - } - - if (!dict) { - throw new _util.FormatError('Failed to read XRef stream'); - } - } else { - throw new _util.FormatError('Invalid XRef stream header'); - } - - obj = dict.get('Prev'); - - if (Number.isInteger(obj)) { - this.startXRefQueue.push(obj); - } else if ((0, _primitives.isRef)(obj)) { - this.startXRefQueue.push(obj.num); - } - - this.startXRefQueue.shift(); - } - - return this.topDict; - } catch (e) { - if (e instanceof _util.MissingDataException) { - throw e; - } - - (0, _util.info)('(while reading XRef): ' + e); - } - - if (recoveryMode) { - return; - } - - throw new _util.XRefParseException(); - }, - getEntry: function XRef_getEntry(i) { - var xrefEntry = this.entries[i]; - - if (xrefEntry && !xrefEntry.free && xrefEntry.offset) { - return xrefEntry; - } - - return null; - }, - fetchIfRef: function XRef_fetchIfRef(obj, suppressEncryption) { - if (!(0, _primitives.isRef)(obj)) { - return obj; - } - - return this.fetch(obj, suppressEncryption); - }, - fetch: function XRef_fetch(ref, suppressEncryption) { - if (!(0, _primitives.isRef)(ref)) { - throw new Error('ref object is not a reference'); - } - - var num = ref.num; - - if (num in this.cache) { - var cacheEntry = this.cache[num]; - - if (cacheEntry instanceof _primitives.Dict && !cacheEntry.objId) { - cacheEntry.objId = ref.toString(); - } - - return cacheEntry; - } - - var xrefEntry = this.getEntry(num); - - if (xrefEntry === null) { - return this.cache[num] = null; - } - - if (xrefEntry.uncompressed) { - xrefEntry = this.fetchUncompressed(ref, xrefEntry, suppressEncryption); - } else { - xrefEntry = this.fetchCompressed(ref, xrefEntry, suppressEncryption); - } - - if ((0, _primitives.isDict)(xrefEntry)) { - xrefEntry.objId = ref.toString(); - } else if ((0, _primitives.isStream)(xrefEntry)) { - xrefEntry.dict.objId = ref.toString(); - } - - return xrefEntry; - }, - fetchUncompressed: function fetchUncompressed(ref, xrefEntry) { - var suppressEncryption = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - var gen = ref.gen; - var num = ref.num; - - if (xrefEntry.gen !== gen) { - throw new _util.XRefEntryException("Inconsistent generation in XRef: ".concat(ref)); - } - - var stream = this.stream.makeSubStream(xrefEntry.offset + this.stream.start); - var parser = new _parser.Parser(new _parser.Lexer(stream), true, this); - var obj1 = parser.getObj(); - var obj2 = parser.getObj(); - var obj3 = parser.getObj(); - - if (!Number.isInteger(obj1)) { - obj1 = parseInt(obj1, 10); - } - - if (!Number.isInteger(obj2)) { - obj2 = parseInt(obj2, 10); - } - - if (obj1 !== num || obj2 !== gen || !(0, _primitives.isCmd)(obj3)) { - throw new _util.XRefEntryException("Bad (uncompressed) XRef entry: ".concat(ref)); - } - - if (obj3.cmd !== 'obj') { - if (obj3.cmd.startsWith('obj')) { - num = parseInt(obj3.cmd.substring(3), 10); - - if (!Number.isNaN(num)) { - return num; - } - } - - throw new _util.XRefEntryException("Bad (uncompressed) XRef entry: ".concat(ref)); - } - - if (this.encrypt && !suppressEncryption) { - xrefEntry = parser.getObj(this.encrypt.createCipherTransform(num, gen)); - } else { - xrefEntry = parser.getObj(); - } - - if (!(0, _primitives.isStream)(xrefEntry)) { - this.cache[num] = xrefEntry; - } - - return xrefEntry; - }, - fetchCompressed: function fetchCompressed(ref, xrefEntry) { - var tableOffset = xrefEntry.offset; - var stream = this.fetch(new _primitives.Ref(tableOffset, 0)); - - if (!(0, _primitives.isStream)(stream)) { - throw new _util.FormatError('bad ObjStm stream'); - } - - var first = stream.dict.get('First'); - var n = stream.dict.get('N'); - - if (!Number.isInteger(first) || !Number.isInteger(n)) { - throw new _util.FormatError('invalid first and n parameters for ObjStm stream'); - } - - var parser = new _parser.Parser(new _parser.Lexer(stream), false, this); - parser.allowStreams = true; - var i, - entries = [], - num, - nums = []; - - for (i = 0; i < n; ++i) { - num = parser.getObj(); - - if (!Number.isInteger(num)) { - throw new _util.FormatError("invalid object number in the ObjStm stream: ".concat(num)); - } - - nums.push(num); - var offset = parser.getObj(); - - if (!Number.isInteger(offset)) { - throw new _util.FormatError("invalid object offset in the ObjStm stream: ".concat(offset)); - } - } - - for (i = 0; i < n; ++i) { - entries.push(parser.getObj()); - - if ((0, _primitives.isCmd)(parser.buf1, 'endobj')) { - parser.shift(); - } - - num = nums[i]; - var entry = this.entries[num]; - - if (entry && entry.offset === tableOffset && entry.gen === i) { - this.cache[num] = entries[i]; - } - } - - xrefEntry = entries[xrefEntry.gen]; - - if (xrefEntry === undefined) { - throw new _util.XRefEntryException("Bad (compressed) XRef entry: ".concat(ref)); - } - - return xrefEntry; - }, - fetchIfRefAsync: function () { - var _fetchIfRefAsync = _asyncToGenerator( - /*#__PURE__*/ - _regenerator.default.mark(function _callee(obj, suppressEncryption) { - return _regenerator.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - if ((0, _primitives.isRef)(obj)) { - _context.next = 2; - break; - } - - return _context.abrupt("return", obj); - - case 2: - return _context.abrupt("return", this.fetchAsync(obj, suppressEncryption)); - - case 3: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - - function fetchIfRefAsync(_x, _x2) { - return _fetchIfRefAsync.apply(this, arguments); - } - - return fetchIfRefAsync; - }(), - fetchAsync: function () { - var _fetchAsync = _asyncToGenerator( - /*#__PURE__*/ - _regenerator.default.mark(function _callee2(ref, suppressEncryption) { - return _regenerator.default.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - _context2.prev = 0; - return _context2.abrupt("return", this.fetch(ref, suppressEncryption)); - - case 4: - _context2.prev = 4; - _context2.t0 = _context2["catch"](0); - - if (_context2.t0 instanceof _util.MissingDataException) { - _context2.next = 8; - break; - } - - throw _context2.t0; - - case 8: - _context2.next = 10; - return this.pdfManager.requestRange(_context2.t0.begin, _context2.t0.end); - - case 10: - return _context2.abrupt("return", this.fetchAsync(ref, suppressEncryption)); - - case 11: - case "end": - return _context2.stop(); - } - } - }, _callee2, this, [[0, 4]]); - })); - - function fetchAsync(_x3, _x4) { - return _fetchAsync.apply(this, arguments); - } - - return fetchAsync; - }(), - getCatalogObj: function XRef_getCatalogObj() { - return this.root; - } - }; - return XRef; - }(); - - exports.XRef = XRef; - - var NameOrNumberTree = - /*#__PURE__*/ - function () { - function NameOrNumberTree(root, xref, type) { - _classCallCheck(this, NameOrNumberTree); - - if (this.constructor === NameOrNumberTree) { - (0, _util.unreachable)('Cannot initialize NameOrNumberTree.'); - } - - this.root = root; - this.xref = xref; - this._type = type; - } - - _createClass(NameOrNumberTree, [{ - key: "getAll", - value: function getAll() { - var dict = Object.create(null); - - if (!this.root) { - return dict; - } - - var xref = this.xref; - var processed = new _primitives.RefSet(); - processed.put(this.root); - var queue = [this.root]; - - while (queue.length > 0) { - var obj = xref.fetchIfRef(queue.shift()); - - if (!(0, _primitives.isDict)(obj)) { - continue; - } - - if (obj.has('Kids')) { - var kids = obj.get('Kids'); - - for (var i = 0, ii = kids.length; i < ii; i++) { - var kid = kids[i]; - - if (processed.has(kid)) { - throw new _util.FormatError("Duplicate entry in \"".concat(this._type, "\" tree.")); - } - - queue.push(kid); - processed.put(kid); - } - - continue; - } - - var entries = obj.get(this._type); - - if (Array.isArray(entries)) { - for (var _i2 = 0, _ii = entries.length; _i2 < _ii; _i2 += 2) { - dict[xref.fetchIfRef(entries[_i2])] = xref.fetchIfRef(entries[_i2 + 1]); - } - } - } - - return dict; - } - }, { - key: "get", - value: function get(key) { - if (!this.root) { - return null; - } - - var xref = this.xref; - var kidsOrEntries = xref.fetchIfRef(this.root); - var loopCount = 0; - var MAX_LEVELS = 10; - - while (kidsOrEntries.has('Kids')) { - if (++loopCount > MAX_LEVELS) { - (0, _util.warn)("Search depth limit reached for \"".concat(this._type, "\" tree.")); - return null; - } - - var kids = kidsOrEntries.get('Kids'); - - if (!Array.isArray(kids)) { - return null; - } - - var l = 0, - r = kids.length - 1; - - while (l <= r) { - var m = l + r >> 1; - var kid = xref.fetchIfRef(kids[m]); - var limits = kid.get('Limits'); - - if (key < xref.fetchIfRef(limits[0])) { - r = m - 1; - } else if (key > xref.fetchIfRef(limits[1])) { - l = m + 1; - } else { - kidsOrEntries = xref.fetchIfRef(kids[m]); - break; - } - } - - if (l > r) { - return null; - } - } - - var entries = kidsOrEntries.get(this._type); - - if (Array.isArray(entries)) { - var _l = 0, - _r = entries.length - 2; - - while (_l <= _r) { - var tmp = _l + _r >> 1, - _m = tmp + (tmp & 1); - - var currentKey = xref.fetchIfRef(entries[_m]); - - if (key < currentKey) { - _r = _m - 2; - } else if (key > currentKey) { - _l = _m + 2; - } else { - return xref.fetchIfRef(entries[_m + 1]); - } - } - - (0, _util.info)("Falling back to an exhaustive search, for key \"".concat(key, "\", ") + "in \"".concat(this._type, "\" tree.")); - - for (var _m2 = 0, mm = entries.length; _m2 < mm; _m2 += 2) { - var _currentKey = xref.fetchIfRef(entries[_m2]); - - if (_currentKey === key) { - (0, _util.warn)("The \"".concat(key, "\" key was found at an incorrect, ") + "i.e. out-of-order, position in \"".concat(this._type, "\" tree.")); - return xref.fetchIfRef(entries[_m2 + 1]); - } - } - } - - return null; - } - }]); - - return NameOrNumberTree; - }(); - - var NameTree = - /*#__PURE__*/ - function (_NameOrNumberTree) { - _inherits(NameTree, _NameOrNumberTree); - - function NameTree(root, xref) { - _classCallCheck(this, NameTree); - - return _possibleConstructorReturn(this, _getPrototypeOf(NameTree).call(this, root, xref, 'Names')); - } - - return NameTree; - }(NameOrNumberTree); - - var NumberTree = - /*#__PURE__*/ - function (_NameOrNumberTree2) { - _inherits(NumberTree, _NameOrNumberTree2); - - function NumberTree(root, xref) { - _classCallCheck(this, NumberTree); - - return _possibleConstructorReturn(this, _getPrototypeOf(NumberTree).call(this, root, xref, 'Nums')); - } - - return NumberTree; - }(NameOrNumberTree); - - var FileSpec = function FileSpecClosure() { - function FileSpec(root, xref) { - if (!root || !(0, _primitives.isDict)(root)) { - return; - } - - this.xref = xref; - this.root = root; - - if (root.has('FS')) { - this.fs = root.get('FS'); - } - - this.description = root.has('Desc') ? (0, _util.stringToPDFString)(root.get('Desc')) : ''; - - if (root.has('RF')) { - (0, _util.warn)('Related file specifications are not supported'); - } - - this.contentAvailable = true; - - if (!root.has('EF')) { - this.contentAvailable = false; - (0, _util.warn)('Non-embedded file specifications are not supported'); - } - } - - function pickPlatformItem(dict) { - if (dict.has('UF')) { - return dict.get('UF'); - } else if (dict.has('F')) { - return dict.get('F'); - } else if (dict.has('Unix')) { - return dict.get('Unix'); - } else if (dict.has('Mac')) { - return dict.get('Mac'); - } else if (dict.has('DOS')) { - return dict.get('DOS'); - } - - return null; - } - - FileSpec.prototype = { - get filename() { - if (!this._filename && this.root) { - var filename = pickPlatformItem(this.root) || 'unnamed'; - this._filename = (0, _util.stringToPDFString)(filename).replace(/\\\\/g, '\\').replace(/\\\//g, '/').replace(/\\/g, '/'); - } - - return this._filename; - }, - - get content() { - if (!this.contentAvailable) { - return null; - } - - if (!this.contentRef && this.root) { - this.contentRef = pickPlatformItem(this.root.get('EF')); - } - - var content = null; - - if (this.contentRef) { - var xref = this.xref; - var fileObj = xref.fetchIfRef(this.contentRef); - - if (fileObj && (0, _primitives.isStream)(fileObj)) { - content = fileObj.getBytes(); - } else { - (0, _util.warn)('Embedded file specification points to non-existing/invalid ' + 'content'); - } - } else { - (0, _util.warn)('Embedded file specification does not have a content'); - } - - return content; - }, - - get serializable() { - return { - filename: this.filename, - content: this.content - }; - } - - }; - return FileSpec; - }(); - - exports.FileSpec = FileSpec; - - var ObjectLoader = function () { - function mayHaveChildren(value) { - return (0, _primitives.isRef)(value) || (0, _primitives.isDict)(value) || Array.isArray(value) || (0, _primitives.isStream)(value); - } - - function addChildren(node, nodesToVisit) { - if ((0, _primitives.isDict)(node) || (0, _primitives.isStream)(node)) { - var dict = (0, _primitives.isDict)(node) ? node : node.dict; - var dictKeys = dict.getKeys(); - - for (var i = 0, ii = dictKeys.length; i < ii; i++) { - var rawValue = dict.getRaw(dictKeys[i]); - - if (mayHaveChildren(rawValue)) { - nodesToVisit.push(rawValue); - } - } - } else if (Array.isArray(node)) { - for (var _i3 = 0, _ii2 = node.length; _i3 < _ii2; _i3++) { - var value = node[_i3]; - - if (mayHaveChildren(value)) { - nodesToVisit.push(value); - } - } - } - } - - function ObjectLoader(dict, keys, xref) { - this.dict = dict; - this.keys = keys; - this.xref = xref; - this.refSet = null; - this.capability = null; - } - - ObjectLoader.prototype = { - load: function load() { - this.capability = (0, _util.createPromiseCapability)(); - - if (!(this.xref.stream instanceof _chunked_stream.ChunkedStream) || this.xref.stream.getMissingChunks().length === 0) { - this.capability.resolve(); - return this.capability.promise; - } - - var keys = this.keys, - dict = this.dict; - this.refSet = new _primitives.RefSet(); - var nodesToVisit = []; - - for (var i = 0, ii = keys.length; i < ii; i++) { - var rawValue = dict.getRaw(keys[i]); - - if (rawValue !== undefined) { - nodesToVisit.push(rawValue); - } - } - - this._walk(nodesToVisit); - - return this.capability.promise; - }, - _walk: function _walk(nodesToVisit) { - var _this2 = this; - - var nodesToRevisit = []; - var pendingRequests = []; - - while (nodesToVisit.length) { - var currentNode = nodesToVisit.pop(); - - if ((0, _primitives.isRef)(currentNode)) { - if (this.refSet.has(currentNode)) { - continue; - } - - try { - this.refSet.put(currentNode); - currentNode = this.xref.fetch(currentNode); - } catch (ex) { - if (!(ex instanceof _util.MissingDataException)) { - throw ex; - } - - nodesToRevisit.push(currentNode); - pendingRequests.push({ - begin: ex.begin, - end: ex.end - }); - } - } - - if (currentNode && currentNode.getBaseStreams) { - var baseStreams = currentNode.getBaseStreams(); - var foundMissingData = false; - - for (var i = 0, ii = baseStreams.length; i < ii; i++) { - var stream = baseStreams[i]; - - if (stream.getMissingChunks && stream.getMissingChunks().length) { - foundMissingData = true; - pendingRequests.push({ - begin: stream.start, - end: stream.end - }); - } - } - - if (foundMissingData) { - nodesToRevisit.push(currentNode); - } - } - - addChildren(currentNode, nodesToVisit); - } - - if (pendingRequests.length) { - this.xref.stream.manager.requestRanges(pendingRequests).then(function () { - for (var _i4 = 0, _ii3 = nodesToRevisit.length; _i4 < _ii3; _i4++) { - var node = nodesToRevisit[_i4]; - - if ((0, _primitives.isRef)(node)) { - _this2.refSet.remove(node); - } - } - - _this2._walk(nodesToRevisit); - }, this.capability.reject); - return; - } - - this.refSet = null; - this.capability.resolve(); - } - }; - return ObjectLoader; - }(); - - exports.ObjectLoader = ObjectLoader; - - /***/ }), - /* 155 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.isEOF = isEOF; - exports.isCmd = isCmd; - exports.isDict = isDict; - exports.isName = isName; - exports.isRef = isRef; - exports.isRefsEqual = isRefsEqual; - exports.isStream = isStream; - exports.RefSetCache = exports.RefSet = exports.Ref = exports.Name = exports.Dict = exports.Cmd = exports.EOF = void 0; - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - var EOF = {}; - exports.EOF = EOF; - - var Name = function NameClosure() { - function Name(name) { - this.name = name; - } - - Name.prototype = {}; - var nameCache = Object.create(null); - - Name.get = function Name_get(name) { - var nameValue = nameCache[name]; - return nameValue ? nameValue : nameCache[name] = new Name(name); - }; - - return Name; - }(); - - exports.Name = Name; - - var Cmd = function CmdClosure() { - function Cmd(cmd) { - this.cmd = cmd; - } - - Cmd.prototype = {}; - var cmdCache = Object.create(null); - - Cmd.get = function Cmd_get(cmd) { - var cmdValue = cmdCache[cmd]; - return cmdValue ? cmdValue : cmdCache[cmd] = new Cmd(cmd); - }; - - return Cmd; - }(); - - exports.Cmd = Cmd; - - var Dict = function DictClosure() { - var nonSerializable = function nonSerializableClosure() { - return nonSerializable; - }; - - function Dict(xref) { - this._map = Object.create(null); - this.xref = xref; - this.objId = null; - this.suppressEncryption = false; - this.__nonSerializable__ = nonSerializable; - } - - Dict.prototype = { - assignXref: function Dict_assignXref(newXref) { - this.xref = newXref; - }, - get: function Dict_get(key1, key2, key3) { - var value; - var xref = this.xref, - suppressEncryption = this.suppressEncryption; - - if (typeof (value = this._map[key1]) !== 'undefined' || key1 in this._map || typeof key2 === 'undefined') { - return xref ? xref.fetchIfRef(value, suppressEncryption) : value; - } - - if (typeof (value = this._map[key2]) !== 'undefined' || key2 in this._map || typeof key3 === 'undefined') { - return xref ? xref.fetchIfRef(value, suppressEncryption) : value; - } - - value = this._map[key3] || null; - return xref ? xref.fetchIfRef(value, suppressEncryption) : value; - }, - getAsync: function Dict_getAsync(key1, key2, key3) { - var value; - var xref = this.xref, - suppressEncryption = this.suppressEncryption; - - if (typeof (value = this._map[key1]) !== 'undefined' || key1 in this._map || typeof key2 === 'undefined') { - if (xref) { - return xref.fetchIfRefAsync(value, suppressEncryption); - } - - return Promise.resolve(value); - } - - if (typeof (value = this._map[key2]) !== 'undefined' || key2 in this._map || typeof key3 === 'undefined') { - if (xref) { - return xref.fetchIfRefAsync(value, suppressEncryption); - } - - return Promise.resolve(value); - } - - value = this._map[key3] || null; - - if (xref) { - return xref.fetchIfRefAsync(value, suppressEncryption); - } - - return Promise.resolve(value); - }, - getArray: function Dict_getArray(key1, key2, key3) { - var value = this.get(key1, key2, key3); - var xref = this.xref, - suppressEncryption = this.suppressEncryption; - - if (!Array.isArray(value) || !xref) { - return value; - } - - value = value.slice(); - - for (var i = 0, ii = value.length; i < ii; i++) { - if (!isRef(value[i])) { - continue; - } - - value[i] = xref.fetch(value[i], suppressEncryption); - } - - return value; - }, - getRaw: function Dict_getRaw(key) { - return this._map[key]; - }, - getKeys: function Dict_getKeys() { - return Object.keys(this._map); - }, - set: function Dict_set(key, value) { - this._map[key] = value; - }, - has: function Dict_has(key) { - return key in this._map; - }, - forEach: function Dict_forEach(callback) { - for (var key in this._map) { - callback(key, this.get(key)); - } - } - }; - Dict.empty = new Dict(null); - - Dict.merge = function (xref, dictArray) { - var mergedDict = new Dict(xref); - - for (var i = 0, ii = dictArray.length; i < ii; i++) { - var dict = dictArray[i]; - - if (!isDict(dict)) { - continue; - } - - for (var keyName in dict._map) { - if (mergedDict._map[keyName] !== undefined) { - continue; - } - - mergedDict._map[keyName] = dict._map[keyName]; - } - } - - return mergedDict; - }; - - return Dict; - }(); - - exports.Dict = Dict; - - var Ref = function RefClosure() { - function Ref(num, gen) { - this.num = num; - this.gen = gen; - } - - Ref.prototype = { - toString: function Ref_toString() { - if (this.gen !== 0) { - return "".concat(this.num, "R").concat(this.gen); - } - - return "".concat(this.num, "R"); - } - }; - return Ref; - }(); - - exports.Ref = Ref; - - var RefSet = function RefSetClosure() { - function RefSet() { - this.dict = Object.create(null); - } - - RefSet.prototype = { - has: function RefSet_has(ref) { - return ref.toString() in this.dict; - }, - put: function RefSet_put(ref) { - this.dict[ref.toString()] = true; - }, - remove: function RefSet_remove(ref) { - delete this.dict[ref.toString()]; - } - }; - return RefSet; - }(); - - exports.RefSet = RefSet; - - var RefSetCache = function RefSetCacheClosure() { - function RefSetCache() { - this.dict = Object.create(null); - } - - RefSetCache.prototype = { - get: function RefSetCache_get(ref) { - return this.dict[ref.toString()]; - }, - has: function RefSetCache_has(ref) { - return ref.toString() in this.dict; - }, - put: function RefSetCache_put(ref, obj) { - this.dict[ref.toString()] = obj; - }, - putAlias: function RefSetCache_putAlias(ref, aliasRef) { - this.dict[ref.toString()] = this.get(aliasRef); - }, - forEach: function RefSetCache_forEach(fn, thisArg) { - for (var i in this.dict) { - fn.call(thisArg, this.dict[i]); - } - }, - clear: function RefSetCache_clear() { - this.dict = Object.create(null); - } - }; - return RefSetCache; - }(); - - exports.RefSetCache = RefSetCache; - - function isEOF(v) { - return v === EOF; - } - - function isName(v, name) { - return v instanceof Name && (name === undefined || v.name === name); - } - - function isCmd(v, cmd) { - return v instanceof Cmd && (cmd === undefined || v.cmd === cmd); - } - - function isDict(v, type) { - return v instanceof Dict && (type === undefined || isName(v.get('Type'), type)); - } - - function isRef(v) { - return v instanceof Ref; - } - - function isRefsEqual(v1, v2) { - return v1.num === v2.num && v1.gen === v2.gen; - } - - function isStream(v) { - return _typeof(v) === 'object' && v !== null && v.getBytes !== undefined; - } - - /***/ }), - /* 156 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.Parser = exports.Linearization = exports.Lexer = void 0; - - var _stream = __w_extracthighlights_require__(157); - - var _util = __w_extracthighlights_require__(6); - - var _primitives = __w_extracthighlights_require__(155); - - var _ccitt_stream = __w_extracthighlights_require__(158); - - var _jbig2_stream = __w_extracthighlights_require__(160); - - var _jpeg_stream = __w_extracthighlights_require__(163); - - var _jpx_stream = __w_extracthighlights_require__(165); - - var MAX_LENGTH_TO_CACHE = 1000; - var MAX_ADLER32_LENGTH = 5552; - - function computeAdler32(bytes) { - var bytesLength = bytes.length; - var a = 1, - b = 0; - - for (var i = 0; i < bytesLength; ++i) { - a += bytes[i] & 0xFF; - b += a; - } - - return b % 65521 << 16 | a % 65521; - } - - var Parser = function ParserClosure() { - function Parser(lexer, allowStreams, xref, recoveryMode) { - this.lexer = lexer; - this.allowStreams = allowStreams; - this.xref = xref; - this.recoveryMode = recoveryMode || false; - this.imageCache = Object.create(null); - this.refill(); - } - - Parser.prototype = { - refill: function Parser_refill() { - this.buf1 = this.lexer.getObj(); - this.buf2 = this.lexer.getObj(); - }, - shift: function Parser_shift() { - if ((0, _primitives.isCmd)(this.buf2, 'ID')) { - this.buf1 = this.buf2; - this.buf2 = null; - } else { - this.buf1 = this.buf2; - this.buf2 = this.lexer.getObj(); - } - }, - tryShift: function Parser_tryShift() { - try { - this.shift(); - return true; - } catch (e) { - if (e instanceof _util.MissingDataException) { - throw e; - } - - return false; - } - }, - getObj: function Parser_getObj(cipherTransform) { - var buf1 = this.buf1; - this.shift(); - - if (buf1 instanceof _primitives.Cmd) { - switch (buf1.cmd) { - case 'BI': - return this.makeInlineImage(cipherTransform); - - case '[': - var array = []; - - while (!(0, _primitives.isCmd)(this.buf1, ']') && !(0, _primitives.isEOF)(this.buf1)) { - array.push(this.getObj(cipherTransform)); - } - - if ((0, _primitives.isEOF)(this.buf1)) { - if (!this.recoveryMode) { - throw new _util.FormatError('End of file inside array'); - } - - return array; - } - - this.shift(); - return array; - - case '<<': - var dict = new _primitives.Dict(this.xref); - - while (!(0, _primitives.isCmd)(this.buf1, '>>') && !(0, _primitives.isEOF)(this.buf1)) { - if (!(0, _primitives.isName)(this.buf1)) { - (0, _util.info)('Malformed dictionary: key must be a name object'); - this.shift(); - continue; - } - - var key = this.buf1.name; - this.shift(); - - if ((0, _primitives.isEOF)(this.buf1)) { - break; - } - - dict.set(key, this.getObj(cipherTransform)); - } - - if ((0, _primitives.isEOF)(this.buf1)) { - if (!this.recoveryMode) { - throw new _util.FormatError('End of file inside dictionary'); - } - - return dict; - } - - if ((0, _primitives.isCmd)(this.buf2, 'stream')) { - return this.allowStreams ? this.makeStream(dict, cipherTransform) : dict; - } - - this.shift(); - return dict; - - default: - return buf1; - } - } - - if (Number.isInteger(buf1)) { - var num = buf1; - - if (Number.isInteger(this.buf1) && (0, _primitives.isCmd)(this.buf2, 'R')) { - var ref = new _primitives.Ref(num, this.buf1); - this.shift(); - this.shift(); - return ref; - } - - return num; - } - - if ((0, _util.isString)(buf1)) { - var str = buf1; - - if (cipherTransform) { - str = cipherTransform.decryptString(str); - } - - return str; - } - - return buf1; - }, - findDefaultInlineStreamEnd: function findDefaultInlineStreamEnd(stream) { - var E = 0x45, - I = 0x49, - SPACE = 0x20, - LF = 0xA, - CR = 0xD; - var n = 10, - NUL = 0x0; - var startPos = stream.pos, - state = 0, - ch, - maybeEIPos; - - while ((ch = stream.getByte()) !== -1) { - if (state === 0) { - state = ch === E ? 1 : 0; - } else if (state === 1) { - state = ch === I ? 2 : 0; - } else { - (0, _util.assert)(state === 2); - - if (ch === SPACE || ch === LF || ch === CR) { - maybeEIPos = stream.pos; - var followingBytes = stream.peekBytes(n); - - for (var i = 0, ii = followingBytes.length; i < ii; i++) { - ch = followingBytes[i]; - - if (ch === NUL && followingBytes[i + 1] !== NUL) { - continue; - } - - if (ch !== LF && ch !== CR && (ch < SPACE || ch > 0x7F)) { - state = 0; - break; - } - } - - if (state === 2) { - break; - } - } else { - state = 0; - } - } - } - - if (ch === -1) { - (0, _util.warn)('findDefaultInlineStreamEnd: ' + 'Reached the end of the stream without finding a valid EI marker'); - - if (maybeEIPos) { - (0, _util.warn)('... trying to recover by using the last "EI" occurrence.'); - stream.skip(-(stream.pos - maybeEIPos)); - } - } - - var endOffset = 4; - stream.skip(-endOffset); - ch = stream.peekByte(); - stream.skip(endOffset); - - if (!(0, _util.isSpace)(ch)) { - endOffset--; - } - - return stream.pos - endOffset - startPos; - }, - findDCTDecodeInlineStreamEnd: function Parser_findDCTDecodeInlineStreamEnd(stream) { - var startPos = stream.pos, - foundEOI = false, - b, - markerLength, - length; - - while ((b = stream.getByte()) !== -1) { - if (b !== 0xFF) { - continue; - } - - switch (stream.getByte()) { - case 0x00: - break; - - case 0xFF: - stream.skip(-1); - break; - - case 0xD9: - foundEOI = true; - break; - - case 0xC0: - case 0xC1: - case 0xC2: - case 0xC3: - case 0xC5: - case 0xC6: - case 0xC7: - case 0xC9: - case 0xCA: - case 0xCB: - case 0xCD: - case 0xCE: - case 0xCF: - case 0xC4: - case 0xCC: - case 0xDA: - case 0xDB: - case 0xDC: - case 0xDD: - case 0xDE: - case 0xDF: - case 0xE0: - case 0xE1: - case 0xE2: - case 0xE3: - case 0xE4: - case 0xE5: - case 0xE6: - case 0xE7: - case 0xE8: - case 0xE9: - case 0xEA: - case 0xEB: - case 0xEC: - case 0xED: - case 0xEE: - case 0xEF: - case 0xFE: - markerLength = stream.getUint16(); - - if (markerLength > 2) { - stream.skip(markerLength - 2); - } else { - stream.skip(-2); - } - - break; - } - - if (foundEOI) { - break; - } - } - - length = stream.pos - startPos; - - if (b === -1) { - (0, _util.warn)('Inline DCTDecode image stream: ' + 'EOI marker not found, searching for /EI/ instead.'); - stream.skip(-length); - return this.findDefaultInlineStreamEnd(stream); - } - - this.inlineStreamSkipEI(stream); - return length; - }, - findASCII85DecodeInlineStreamEnd: function Parser_findASCII85DecodeInlineStreamEnd(stream) { - var TILDE = 0x7E, - GT = 0x3E; - var startPos = stream.pos, - ch, - length; - - while ((ch = stream.getByte()) !== -1) { - if (ch === TILDE && stream.peekByte() === GT) { - stream.skip(); - break; - } - } - - length = stream.pos - startPos; - - if (ch === -1) { - (0, _util.warn)('Inline ASCII85Decode image stream: ' + 'EOD marker not found, searching for /EI/ instead.'); - stream.skip(-length); - return this.findDefaultInlineStreamEnd(stream); - } - - this.inlineStreamSkipEI(stream); - return length; - }, - findASCIIHexDecodeInlineStreamEnd: function Parser_findASCIIHexDecodeInlineStreamEnd(stream) { - var GT = 0x3E; - var startPos = stream.pos, - ch, - length; - - while ((ch = stream.getByte()) !== -1) { - if (ch === GT) { - break; - } - } - - length = stream.pos - startPos; - - if (ch === -1) { - (0, _util.warn)('Inline ASCIIHexDecode image stream: ' + 'EOD marker not found, searching for /EI/ instead.'); - stream.skip(-length); - return this.findDefaultInlineStreamEnd(stream); - } - - this.inlineStreamSkipEI(stream); - return length; - }, - inlineStreamSkipEI: function Parser_inlineStreamSkipEI(stream) { - var E = 0x45, - I = 0x49; - var state = 0, - ch; - - while ((ch = stream.getByte()) !== -1) { - if (state === 0) { - state = ch === E ? 1 : 0; - } else if (state === 1) { - state = ch === I ? 2 : 0; - } else if (state === 2) { - break; - } - } - }, - makeInlineImage: function Parser_makeInlineImage(cipherTransform) { - var lexer = this.lexer; - var stream = lexer.stream; - var dict = new _primitives.Dict(this.xref), - dictLength; - - while (!(0, _primitives.isCmd)(this.buf1, 'ID') && !(0, _primitives.isEOF)(this.buf1)) { - if (!(0, _primitives.isName)(this.buf1)) { - throw new _util.FormatError('Dictionary key must be a name object'); - } - - var key = this.buf1.name; - this.shift(); - - if ((0, _primitives.isEOF)(this.buf1)) { - break; - } - - dict.set(key, this.getObj(cipherTransform)); - } - - if (lexer.beginInlineImagePos !== -1) { - dictLength = stream.pos - lexer.beginInlineImagePos; - } - - var filter = dict.get('Filter', 'F'), - filterName; - - if ((0, _primitives.isName)(filter)) { - filterName = filter.name; - } else if (Array.isArray(filter)) { - var filterZero = this.xref.fetchIfRef(filter[0]); - - if ((0, _primitives.isName)(filterZero)) { - filterName = filterZero.name; - } - } - - var startPos = stream.pos, - length; - - if (filterName === 'DCTDecode' || filterName === 'DCT') { - length = this.findDCTDecodeInlineStreamEnd(stream); - } else if (filterName === 'ASCII85Decode' || filterName === 'A85') { - length = this.findASCII85DecodeInlineStreamEnd(stream); - } else if (filterName === 'ASCIIHexDecode' || filterName === 'AHx') { - length = this.findASCIIHexDecodeInlineStreamEnd(stream); - } else { - length = this.findDefaultInlineStreamEnd(stream); - } - - var imageStream = stream.makeSubStream(startPos, length, dict); - var cacheKey; - - if (length < MAX_LENGTH_TO_CACHE && dictLength < MAX_ADLER32_LENGTH) { - var imageBytes = imageStream.getBytes(); - imageStream.reset(); - var initialStreamPos = stream.pos; - stream.pos = lexer.beginInlineImagePos; - var dictBytes = stream.getBytes(dictLength); - stream.pos = initialStreamPos; - cacheKey = computeAdler32(imageBytes) + '_' + computeAdler32(dictBytes); - var cacheEntry = this.imageCache[cacheKey]; - - if (cacheEntry !== undefined) { - this.buf2 = _primitives.Cmd.get('EI'); - this.shift(); - cacheEntry.reset(); - return cacheEntry; - } - } - - if (cipherTransform) { - imageStream = cipherTransform.createStream(imageStream, length); - } - - imageStream = this.filter(imageStream, dict, length); - imageStream.dict = dict; - - if (cacheKey !== undefined) { - imageStream.cacheKey = 'inline_' + length + '_' + cacheKey; - this.imageCache[cacheKey] = imageStream; - } - - this.buf2 = _primitives.Cmd.get('EI'); - this.shift(); - return imageStream; - }, - _findStreamLength: function _findStreamLength(startPos, signature) { - var stream = this.lexer.stream; - stream.pos = startPos; - var SCAN_BLOCK_LENGTH = 2048; - var signatureLength = signature.length; - - while (stream.pos < stream.end) { - var scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH); - var scanLength = scanBytes.length - signatureLength; - - if (scanLength <= 0) { - break; - } - - var pos = 0; - - while (pos < scanLength) { - var j = 0; - - while (j < signatureLength && scanBytes[pos + j] === signature[j]) { - j++; - } - - if (j >= signatureLength) { - stream.pos += pos; - return stream.pos - startPos; - } - - pos++; - } - - stream.pos += scanLength; - } - - return -1; - }, - makeStream: function Parser_makeStream(dict, cipherTransform) { - var lexer = this.lexer; - var stream = lexer.stream; - lexer.skipToNextLine(); - var startPos = stream.pos - 1; - var length = dict.get('Length'); - - if (!Number.isInteger(length)) { - (0, _util.info)('Bad ' + length + ' attribute in stream'); - length = 0; - } - - stream.pos = startPos + length; - lexer.nextChar(); - - if (this.tryShift() && (0, _primitives.isCmd)(this.buf2, 'endstream')) { - this.shift(); - } else { - var ENDSTREAM_SIGNATURE = new Uint8Array([0x65, 0x6E, 0x64, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6D]); - - var actualLength = this._findStreamLength(startPos, ENDSTREAM_SIGNATURE); - - if (actualLength < 0) { - var MAX_TRUNCATION = 1; - - for (var i = 1; i <= MAX_TRUNCATION; i++) { - var end = ENDSTREAM_SIGNATURE.length - i; - var TRUNCATED_SIGNATURE = ENDSTREAM_SIGNATURE.slice(0, end); - - var maybeLength = this._findStreamLength(startPos, TRUNCATED_SIGNATURE); - - if (maybeLength >= 0) { - var lastByte = stream.peekBytes(end + 1)[end]; - - if (!(0, _util.isSpace)(lastByte)) { - break; - } - - (0, _util.info)("Found \"".concat((0, _util.bytesToString)(TRUNCATED_SIGNATURE), "\" when ") + 'searching for endstream command.'); - actualLength = maybeLength; - break; - } - } - - if (actualLength < 0) { - throw new _util.FormatError('Missing endstream command.'); - } - } - - length = actualLength; - lexer.nextChar(); - this.shift(); - this.shift(); - } - - this.shift(); - stream = stream.makeSubStream(startPos, length, dict); - - if (cipherTransform) { - stream = cipherTransform.createStream(stream, length); - } - - stream = this.filter(stream, dict, length); - stream.dict = dict; - return stream; - }, - filter: function Parser_filter(stream, dict, length) { - var filter = dict.get('Filter', 'F'); - var params = dict.get('DecodeParms', 'DP'); - - if ((0, _primitives.isName)(filter)) { - if (Array.isArray(params)) { - (0, _util.warn)('/DecodeParms should not contain an Array, ' + 'when /Filter contains a Name.'); - } - - return this.makeFilter(stream, filter.name, length, params); - } - - var maybeLength = length; - - if (Array.isArray(filter)) { - var filterArray = filter; - var paramsArray = params; - - for (var i = 0, ii = filterArray.length; i < ii; ++i) { - filter = this.xref.fetchIfRef(filterArray[i]); - - if (!(0, _primitives.isName)(filter)) { - throw new _util.FormatError('Bad filter name: ' + filter); - } - - params = null; - - if (Array.isArray(paramsArray) && i in paramsArray) { - params = this.xref.fetchIfRef(paramsArray[i]); - } - - stream = this.makeFilter(stream, filter.name, maybeLength, params); - maybeLength = null; - } - } - - return stream; - }, - makeFilter: function Parser_makeFilter(stream, name, maybeLength, params) { - if (maybeLength === 0) { - (0, _util.warn)('Empty "' + name + '" stream.'); - return new _stream.NullStream(); - } - - try { - var xrefStreamStats = this.xref.stats.streamTypes; - - if (name === 'FlateDecode' || name === 'Fl') { - xrefStreamStats[_util.StreamType.FLATE] = true; - - if (params) { - return new _stream.PredictorStream(new _stream.FlateStream(stream, maybeLength), maybeLength, params); - } - - return new _stream.FlateStream(stream, maybeLength); - } - - if (name === 'LZWDecode' || name === 'LZW') { - xrefStreamStats[_util.StreamType.LZW] = true; - var earlyChange = 1; - - if (params) { - if (params.has('EarlyChange')) { - earlyChange = params.get('EarlyChange'); - } - - return new _stream.PredictorStream(new _stream.LZWStream(stream, maybeLength, earlyChange), maybeLength, params); - } - - return new _stream.LZWStream(stream, maybeLength, earlyChange); - } - - if (name === 'DCTDecode' || name === 'DCT') { - xrefStreamStats[_util.StreamType.DCT] = true; - return new _jpeg_stream.JpegStream(stream, maybeLength, stream.dict, params); - } - - if (name === 'JPXDecode' || name === 'JPX') { - xrefStreamStats[_util.StreamType.JPX] = true; - return new _jpx_stream.JpxStream(stream, maybeLength, stream.dict, params); - } - - if (name === 'ASCII85Decode' || name === 'A85') { - xrefStreamStats[_util.StreamType.A85] = true; - return new _stream.Ascii85Stream(stream, maybeLength); - } - - if (name === 'ASCIIHexDecode' || name === 'AHx') { - xrefStreamStats[_util.StreamType.AHX] = true; - return new _stream.AsciiHexStream(stream, maybeLength); - } - - if (name === 'CCITTFaxDecode' || name === 'CCF') { - xrefStreamStats[_util.StreamType.CCF] = true; - return new _ccitt_stream.CCITTFaxStream(stream, maybeLength, params); - } - - if (name === 'RunLengthDecode' || name === 'RL') { - xrefStreamStats[_util.StreamType.RL] = true; - return new _stream.RunLengthStream(stream, maybeLength); - } - - if (name === 'JBIG2Decode') { - xrefStreamStats[_util.StreamType.JBIG] = true; - return new _jbig2_stream.Jbig2Stream(stream, maybeLength, stream.dict, params); - } - - (0, _util.warn)('filter "' + name + '" not supported yet'); - return stream; - } catch (ex) { - if (ex instanceof _util.MissingDataException) { - throw ex; - } - - (0, _util.warn)('Invalid stream: \"' + ex + '\"'); - return new _stream.NullStream(); - } - } - }; - return Parser; - }(); - - exports.Parser = Parser; - - var Lexer = function LexerClosure() { - function Lexer(stream, knownCommands) { - this.stream = stream; - this.nextChar(); - this.strBuf = []; - this.knownCommands = knownCommands; - this.beginInlineImagePos = -1; - } - - var specialChars = [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; - - function toHexDigit(ch) { - if (ch >= 0x30 && ch <= 0x39) { - return ch & 0x0F; - } - - if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) { - return (ch & 0x0F) + 9; - } - - return -1; - } - - Lexer.prototype = { - nextChar: function Lexer_nextChar() { - return this.currentChar = this.stream.getByte(); - }, - peekChar: function Lexer_peekChar() { - return this.stream.peekByte(); - }, - getNumber: function Lexer_getNumber() { - var ch = this.currentChar; - var eNotation = false; - var divideBy = 0; - var sign = 0; - - if (ch === 0x2D) { - sign = -1; - ch = this.nextChar(); - - if (ch === 0x2D) { - ch = this.nextChar(); - } - } else if (ch === 0x2B) { - sign = 1; - ch = this.nextChar(); - } - - if (ch === 0x0A || ch === 0x0D) { - do { - ch = this.nextChar(); - } while (ch === 0x0A || ch === 0x0D); - } - - if (ch === 0x2E) { - divideBy = 10; - ch = this.nextChar(); - } - - if (ch < 0x30 || ch > 0x39) { - if (divideBy === 10 && sign === 0 && ((0, _util.isSpace)(ch) || ch === -1)) { - (0, _util.warn)('Lexer.getNumber - treating a single decimal point as zero.'); - return 0; - } - - throw new _util.FormatError("Invalid number: ".concat(String.fromCharCode(ch), " (charCode ").concat(ch, ")")); - } - - sign = sign || 1; - var baseValue = ch - 0x30; - var powerValue = 0; - var powerValueSign = 1; - - while ((ch = this.nextChar()) >= 0) { - if (0x30 <= ch && ch <= 0x39) { - var currentDigit = ch - 0x30; - - if (eNotation) { - powerValue = powerValue * 10 + currentDigit; - } else { - if (divideBy !== 0) { - divideBy *= 10; - } - - baseValue = baseValue * 10 + currentDigit; - } - } else if (ch === 0x2E) { - if (divideBy === 0) { - divideBy = 1; - } else { - break; - } - } else if (ch === 0x2D) { - (0, _util.warn)('Badly formatted number'); - } else if (ch === 0x45 || ch === 0x65) { - ch = this.peekChar(); - - if (ch === 0x2B || ch === 0x2D) { - powerValueSign = ch === 0x2D ? -1 : 1; - this.nextChar(); - } else if (ch < 0x30 || ch > 0x39) { - break; - } - - eNotation = true; - } else { - break; - } - } - - if (divideBy !== 0) { - baseValue /= divideBy; - } - - if (eNotation) { - baseValue *= Math.pow(10, powerValueSign * powerValue); - } - - return sign * baseValue; - }, - getString: function Lexer_getString() { - var numParen = 1; - var done = false; - var strBuf = this.strBuf; - strBuf.length = 0; - var ch = this.nextChar(); - - while (true) { - var charBuffered = false; - - switch (ch | 0) { - case -1: - (0, _util.warn)('Unterminated string'); - done = true; - break; - - case 0x28: - ++numParen; - strBuf.push('('); - break; - - case 0x29: - if (--numParen === 0) { - this.nextChar(); - done = true; - } else { - strBuf.push(')'); - } - - break; - - case 0x5C: - ch = this.nextChar(); - - switch (ch) { - case -1: - (0, _util.warn)('Unterminated string'); - done = true; - break; - - case 0x6E: - strBuf.push('\n'); - break; - - case 0x72: - strBuf.push('\r'); - break; - - case 0x74: - strBuf.push('\t'); - break; - - case 0x62: - strBuf.push('\b'); - break; - - case 0x66: - strBuf.push('\f'); - break; - - case 0x5C: - case 0x28: - case 0x29: - strBuf.push(String.fromCharCode(ch)); - break; - - case 0x30: - case 0x31: - case 0x32: - case 0x33: - case 0x34: - case 0x35: - case 0x36: - case 0x37: - var x = ch & 0x0F; - ch = this.nextChar(); - charBuffered = true; - - if (ch >= 0x30 && ch <= 0x37) { - x = (x << 3) + (ch & 0x0F); - ch = this.nextChar(); - - if (ch >= 0x30 && ch <= 0x37) { - charBuffered = false; - x = (x << 3) + (ch & 0x0F); - } - } - - strBuf.push(String.fromCharCode(x)); - break; - - case 0x0D: - if (this.peekChar() === 0x0A) { - this.nextChar(); - } - - break; - - case 0x0A: - break; - - default: - strBuf.push(String.fromCharCode(ch)); - break; - } - - break; - - default: - strBuf.push(String.fromCharCode(ch)); - break; - } - - if (done) { - break; - } - - if (!charBuffered) { - ch = this.nextChar(); - } - } - - return strBuf.join(''); - }, - getName: function Lexer_getName() { - var ch, previousCh; - var strBuf = this.strBuf; - strBuf.length = 0; - - while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) { - if (ch === 0x23) { - ch = this.nextChar(); - - if (specialChars[ch]) { - (0, _util.warn)('Lexer_getName: ' + 'NUMBER SIGN (#) should be followed by a hexadecimal number.'); - strBuf.push('#'); - break; - } - - var x = toHexDigit(ch); - - if (x !== -1) { - previousCh = ch; - ch = this.nextChar(); - var x2 = toHexDigit(ch); - - if (x2 === -1) { - (0, _util.warn)('Lexer_getName: Illegal digit (' + String.fromCharCode(ch) + ') in hexadecimal number.'); - strBuf.push('#', String.fromCharCode(previousCh)); - - if (specialChars[ch]) { - break; - } - - strBuf.push(String.fromCharCode(ch)); - continue; - } - - strBuf.push(String.fromCharCode(x << 4 | x2)); - } else { - strBuf.push('#', String.fromCharCode(ch)); - } - } else { - strBuf.push(String.fromCharCode(ch)); - } - } - - if (strBuf.length > 127) { - (0, _util.warn)('name token is longer than allowed by the spec: ' + strBuf.length); - } - - return _primitives.Name.get(strBuf.join('')); - }, - getHexString: function Lexer_getHexString() { - var strBuf = this.strBuf; - strBuf.length = 0; - var ch = this.currentChar; - var isFirstHex = true; - var firstDigit; - var secondDigit; - - while (true) { - if (ch < 0) { - (0, _util.warn)('Unterminated hex string'); - break; - } else if (ch === 0x3E) { - this.nextChar(); - break; - } else if (specialChars[ch] === 1) { - ch = this.nextChar(); - continue; - } else { - if (isFirstHex) { - firstDigit = toHexDigit(ch); - - if (firstDigit === -1) { - (0, _util.warn)('Ignoring invalid character "' + ch + '" in hex string'); - ch = this.nextChar(); - continue; - } - } else { - secondDigit = toHexDigit(ch); - - if (secondDigit === -1) { - (0, _util.warn)('Ignoring invalid character "' + ch + '" in hex string'); - ch = this.nextChar(); - continue; - } - - strBuf.push(String.fromCharCode(firstDigit << 4 | secondDigit)); - } - - isFirstHex = !isFirstHex; - ch = this.nextChar(); - } - } - - return strBuf.join(''); - }, - getObj: function Lexer_getObj() { - var comment = false; - var ch = this.currentChar; - - while (true) { - if (ch < 0) { - return _primitives.EOF; - } - - if (comment) { - if (ch === 0x0A || ch === 0x0D) { - comment = false; - } - } else if (ch === 0x25) { - comment = true; - } else if (specialChars[ch] !== 1) { - break; - } - - ch = this.nextChar(); - } - - switch (ch | 0) { - case 0x30: - case 0x31: - case 0x32: - case 0x33: - case 0x34: - case 0x35: - case 0x36: - case 0x37: - case 0x38: - case 0x39: - case 0x2B: - case 0x2D: - case 0x2E: - return this.getNumber(); - - case 0x28: - return this.getString(); - - case 0x2F: - return this.getName(); - - case 0x5B: - this.nextChar(); - return _primitives.Cmd.get('['); - - case 0x5D: - this.nextChar(); - return _primitives.Cmd.get(']'); - - case 0x3C: - ch = this.nextChar(); - - if (ch === 0x3C) { - this.nextChar(); - return _primitives.Cmd.get('<<'); - } - - return this.getHexString(); - - case 0x3E: - ch = this.nextChar(); - - if (ch === 0x3E) { - this.nextChar(); - return _primitives.Cmd.get('>>'); - } - - return _primitives.Cmd.get('>'); - - case 0x7B: - this.nextChar(); - return _primitives.Cmd.get('{'); - - case 0x7D: - this.nextChar(); - return _primitives.Cmd.get('}'); - - case 0x29: - this.nextChar(); - throw new _util.FormatError("Illegal character: ".concat(ch)); - } - - var str = String.fromCharCode(ch); - var knownCommands = this.knownCommands; - var knownCommandFound = knownCommands && knownCommands[str] !== undefined; - - while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) { - var possibleCommand = str + String.fromCharCode(ch); - - if (knownCommandFound && knownCommands[possibleCommand] === undefined) { - break; - } - - if (str.length === 128) { - throw new _util.FormatError("Command token too long: ".concat(str.length)); - } - - str = possibleCommand; - knownCommandFound = knownCommands && knownCommands[str] !== undefined; - } - - if (str === 'true') { - return true; - } - - if (str === 'false') { - return false; - } - - if (str === 'null') { - return null; - } - - if (str === 'BI') { - this.beginInlineImagePos = this.stream.pos; - } - - return _primitives.Cmd.get(str); - }, - skipToNextLine: function Lexer_skipToNextLine() { - var ch = this.currentChar; - - while (ch >= 0) { - if (ch === 0x0D) { - ch = this.nextChar(); - - if (ch === 0x0A) { - this.nextChar(); - } - - break; - } else if (ch === 0x0A) { - this.nextChar(); - break; - } - - ch = this.nextChar(); - } - } - }; - return Lexer; - }(); - - exports.Lexer = Lexer; - var Linearization = { - create: function LinearizationCreate(stream) { - function getInt(name, allowZeroValue) { - var obj = linDict.get(name); - - if (Number.isInteger(obj) && (allowZeroValue ? obj >= 0 : obj > 0)) { - return obj; - } - - throw new Error('The "' + name + '" parameter in the linearization ' + 'dictionary is invalid.'); - } - - function getHints() { - var hints = linDict.get('H'), - hintsLength, - item; - - if (Array.isArray(hints) && ((hintsLength = hints.length) === 2 || hintsLength === 4)) { - for (var index = 0; index < hintsLength; index++) { - if (!(Number.isInteger(item = hints[index]) && item > 0)) { - throw new Error('Hint (' + index + ') in the linearization dictionary is invalid.'); - } - } - - return hints; - } - - throw new Error('Hint array in the linearization dictionary is invalid.'); - } - - var parser = new Parser(new Lexer(stream), false, null); - var obj1 = parser.getObj(); - var obj2 = parser.getObj(); - var obj3 = parser.getObj(); - var linDict = parser.getObj(); - var obj, length; - - if (!(Number.isInteger(obj1) && Number.isInteger(obj2) && (0, _primitives.isCmd)(obj3, 'obj') && (0, _primitives.isDict)(linDict) && (0, _util.isNum)(obj = linDict.get('Linearized')) && obj > 0)) { - return null; - } else if ((length = getInt('L')) !== stream.length) { - throw new Error('The "L" parameter in the linearization dictionary ' + 'does not equal the stream length.'); - } - - return { - length: length, - hints: getHints(), - objectNumberFirst: getInt('O'), - endFirst: getInt('E'), - numPages: getInt('N'), - mainXRefEntriesOffset: getInt('T'), - pageFirst: linDict.has('P') ? getInt('P', true) : 0 - }; - } - }; - exports.Linearization = Linearization; - - /***/ }), - /* 157 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.LZWStream = exports.StringStream = exports.StreamsSequenceStream = exports.Stream = exports.RunLengthStream = exports.PredictorStream = exports.NullStream = exports.FlateStream = exports.DecodeStream = exports.DecryptStream = exports.AsciiHexStream = exports.Ascii85Stream = void 0; - - var _util = __w_extracthighlights_require__(6); - - var _primitives = __w_extracthighlights_require__(155); - - function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } - - function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } - - function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } - - function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } - - var Stream = function StreamClosure() { - function Stream(arrayBuffer, start, length, dict) { - this.bytes = arrayBuffer instanceof Uint8Array ? arrayBuffer : new Uint8Array(arrayBuffer); - this.start = start || 0; - this.pos = this.start; - this.end = start + length || this.bytes.length; - this.dict = dict; - } - - Stream.prototype = { - get length() { - return this.end - this.start; - }, - - get isEmpty() { - return this.length === 0; - }, - - getByte: function Stream_getByte() { - if (this.pos >= this.end) { - return -1; - } - - return this.bytes[this.pos++]; - }, - getUint16: function Stream_getUint16() { - var b0 = this.getByte(); - var b1 = this.getByte(); - - if (b0 === -1 || b1 === -1) { - return -1; - } - - return (b0 << 8) + b1; - }, - getInt32: function Stream_getInt32() { - var b0 = this.getByte(); - var b1 = this.getByte(); - var b2 = this.getByte(); - var b3 = this.getByte(); - return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; - }, - getBytes: function getBytes(length) { - var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var bytes = this.bytes; - var pos = this.pos; - var strEnd = this.end; - - if (!length) { - var _subarray = bytes.subarray(pos, strEnd); - - return forceClamped ? new Uint8ClampedArray(_subarray) : _subarray; - } - - var end = pos + length; - - if (end > strEnd) { - end = strEnd; - } - - this.pos = end; - var subarray = bytes.subarray(pos, end); - return forceClamped ? new Uint8ClampedArray(subarray) : subarray; - }, - peekByte: function Stream_peekByte() { - var peekedByte = this.getByte(); - this.pos--; - return peekedByte; - }, - peekBytes: function peekBytes(length) { - var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var bytes = this.getBytes(length, forceClamped); - this.pos -= bytes.length; - return bytes; - }, - skip: function Stream_skip(n) { - if (!n) { - n = 1; - } - - this.pos += n; - }, - reset: function Stream_reset() { - this.pos = this.start; - }, - moveStart: function Stream_moveStart() { - this.start = this.pos; - }, - makeSubStream: function Stream_makeSubStream(start, length, dict) { - return new Stream(this.bytes.buffer, start, length, dict); - } - }; - return Stream; - }(); - - exports.Stream = Stream; - - var StringStream = function StringStreamClosure() { - function StringStream(str) { - var bytes = (0, _util.stringToBytes)(str); - Stream.call(this, bytes); - } - - StringStream.prototype = Stream.prototype; - return StringStream; - }(); - - exports.StringStream = StringStream; - - var DecodeStream = function DecodeStreamClosure() { - var emptyBuffer = new Uint8Array(0); - - function DecodeStream(maybeMinBufferLength) { - this._rawMinBufferLength = maybeMinBufferLength || 0; - this.pos = 0; - this.bufferLength = 0; - this.eof = false; - this.buffer = emptyBuffer; - this.minBufferLength = 512; - - if (maybeMinBufferLength) { - while (this.minBufferLength < maybeMinBufferLength) { - this.minBufferLength *= 2; - } - } - } - - DecodeStream.prototype = { - get isEmpty() { - while (!this.eof && this.bufferLength === 0) { - this.readBlock(); - } - - return this.bufferLength === 0; - }, - - ensureBuffer: function DecodeStream_ensureBuffer(requested) { - var buffer = this.buffer; - - if (requested <= buffer.byteLength) { - return buffer; - } - - var size = this.minBufferLength; - - while (size < requested) { - size *= 2; - } - - var buffer2 = new Uint8Array(size); - buffer2.set(buffer); - return this.buffer = buffer2; - }, - getByte: function DecodeStream_getByte() { - var pos = this.pos; - - while (this.bufferLength <= pos) { - if (this.eof) { - return -1; - } - - this.readBlock(); - } - - return this.buffer[this.pos++]; - }, - getUint16: function DecodeStream_getUint16() { - var b0 = this.getByte(); - var b1 = this.getByte(); - - if (b0 === -1 || b1 === -1) { - return -1; - } - - return (b0 << 8) + b1; - }, - getInt32: function DecodeStream_getInt32() { - var b0 = this.getByte(); - var b1 = this.getByte(); - var b2 = this.getByte(); - var b3 = this.getByte(); - return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; - }, - getBytes: function getBytes(length) { - var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var end, - pos = this.pos; - - if (length) { - this.ensureBuffer(pos + length); - end = pos + length; - - while (!this.eof && this.bufferLength < end) { - this.readBlock(); - } - - var bufEnd = this.bufferLength; - - if (end > bufEnd) { - end = bufEnd; - } - } else { - while (!this.eof) { - this.readBlock(); - } - - end = this.bufferLength; - } - - this.pos = end; - var subarray = this.buffer.subarray(pos, end); - return forceClamped && !(subarray instanceof Uint8ClampedArray) ? new Uint8ClampedArray(subarray) : subarray; - }, - peekByte: function DecodeStream_peekByte() { - var peekedByte = this.getByte(); - this.pos--; - return peekedByte; - }, - peekBytes: function peekBytes(length) { - var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var bytes = this.getBytes(length, forceClamped); - this.pos -= bytes.length; - return bytes; - }, - makeSubStream: function DecodeStream_makeSubStream(start, length, dict) { - var end = start + length; - - while (this.bufferLength <= end && !this.eof) { - this.readBlock(); - } - - return new Stream(this.buffer, start, length, dict); - }, - skip: function DecodeStream_skip(n) { - if (!n) { - n = 1; - } - - this.pos += n; - }, - reset: function DecodeStream_reset() { - this.pos = 0; - }, - getBaseStreams: function DecodeStream_getBaseStreams() { - if (this.str && this.str.getBaseStreams) { - return this.str.getBaseStreams(); - } - - return []; - } - }; - return DecodeStream; - }(); - - exports.DecodeStream = DecodeStream; - - var StreamsSequenceStream = function StreamsSequenceStreamClosure() { - function StreamsSequenceStream(streams) { - this.streams = streams; - var maybeLength = 0; - - for (var i = 0, ii = streams.length; i < ii; i++) { - var stream = streams[i]; - - if (stream instanceof DecodeStream) { - maybeLength += stream._rawMinBufferLength; - } else { - maybeLength += stream.length; - } - } - - DecodeStream.call(this, maybeLength); - } - - StreamsSequenceStream.prototype = Object.create(DecodeStream.prototype); - - StreamsSequenceStream.prototype.readBlock = function streamSequenceStreamReadBlock() { - var streams = this.streams; - - if (streams.length === 0) { - this.eof = true; - return; - } - - var stream = streams.shift(); - var chunk = stream.getBytes(); - var bufferLength = this.bufferLength; - var newLength = bufferLength + chunk.length; - var buffer = this.ensureBuffer(newLength); - buffer.set(chunk, bufferLength); - this.bufferLength = newLength; - }; - - StreamsSequenceStream.prototype.getBaseStreams = function StreamsSequenceStream_getBaseStreams() { - var baseStreams = []; - - for (var i = 0, ii = this.streams.length; i < ii; i++) { - var stream = this.streams[i]; - - if (stream.getBaseStreams) { - baseStreams.push.apply(baseStreams, _toConsumableArray(stream.getBaseStreams())); - } - } - - return baseStreams; - }; - - return StreamsSequenceStream; - }(); - - exports.StreamsSequenceStream = StreamsSequenceStream; - - var FlateStream = function FlateStreamClosure() { - var codeLenCodeMap = new Int32Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]); - var lengthDecode = new Int32Array([0x00003, 0x00004, 0x00005, 0x00006, 0x00007, 0x00008, 0x00009, 0x0000a, 0x1000b, 0x1000d, 0x1000f, 0x10011, 0x20013, 0x20017, 0x2001b, 0x2001f, 0x30023, 0x3002b, 0x30033, 0x3003b, 0x40043, 0x40053, 0x40063, 0x40073, 0x50083, 0x500a3, 0x500c3, 0x500e3, 0x00102, 0x00102, 0x00102]); - var distDecode = new Int32Array([0x00001, 0x00002, 0x00003, 0x00004, 0x10005, 0x10007, 0x20009, 0x2000d, 0x30011, 0x30019, 0x40021, 0x40031, 0x50041, 0x50061, 0x60081, 0x600c1, 0x70101, 0x70181, 0x80201, 0x80301, 0x90401, 0x90601, 0xa0801, 0xa0c01, 0xb1001, 0xb1801, 0xc2001, 0xc3001, 0xd4001, 0xd6001]); - var fixedLitCodeTab = [new Int32Array([0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c0, 0x70108, 0x80060, 0x80020, 0x900a0, 0x80000, 0x80080, 0x80040, 0x900e0, 0x70104, 0x80058, 0x80018, 0x90090, 0x70114, 0x80078, 0x80038, 0x900d0, 0x7010c, 0x80068, 0x80028, 0x900b0, 0x80008, 0x80088, 0x80048, 0x900f0, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c8, 0x7010a, 0x80064, 0x80024, 0x900a8, 0x80004, 0x80084, 0x80044, 0x900e8, 0x70106, 0x8005c, 0x8001c, 0x90098, 0x70116, 0x8007c, 0x8003c, 0x900d8, 0x7010e, 0x8006c, 0x8002c, 0x900b8, 0x8000c, 0x8008c, 0x8004c, 0x900f8, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c4, 0x70109, 0x80062, 0x80022, 0x900a4, 0x80002, 0x80082, 0x80042, 0x900e4, 0x70105, 0x8005a, 0x8001a, 0x90094, 0x70115, 0x8007a, 0x8003a, 0x900d4, 0x7010d, 0x8006a, 0x8002a, 0x900b4, 0x8000a, 0x8008a, 0x8004a, 0x900f4, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cc, 0x7010b, 0x80066, 0x80026, 0x900ac, 0x80006, 0x80086, 0x80046, 0x900ec, 0x70107, 0x8005e, 0x8001e, 0x9009c, 0x70117, 0x8007e, 0x8003e, 0x900dc, 0x7010f, 0x8006e, 0x8002e, 0x900bc, 0x8000e, 0x8008e, 0x8004e, 0x900fc, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c2, 0x70108, 0x80061, 0x80021, 0x900a2, 0x80001, 0x80081, 0x80041, 0x900e2, 0x70104, 0x80059, 0x80019, 0x90092, 0x70114, 0x80079, 0x80039, 0x900d2, 0x7010c, 0x80069, 0x80029, 0x900b2, 0x80009, 0x80089, 0x80049, 0x900f2, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900ca, 0x7010a, 0x80065, 0x80025, 0x900aa, 0x80005, 0x80085, 0x80045, 0x900ea, 0x70106, 0x8005d, 0x8001d, 0x9009a, 0x70116, 0x8007d, 0x8003d, 0x900da, 0x7010e, 0x8006d, 0x8002d, 0x900ba, 0x8000d, 0x8008d, 0x8004d, 0x900fa, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c6, 0x70109, 0x80063, 0x80023, 0x900a6, 0x80003, 0x80083, 0x80043, 0x900e6, 0x70105, 0x8005b, 0x8001b, 0x90096, 0x70115, 0x8007b, 0x8003b, 0x900d6, 0x7010d, 0x8006b, 0x8002b, 0x900b6, 0x8000b, 0x8008b, 0x8004b, 0x900f6, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900ce, 0x7010b, 0x80067, 0x80027, 0x900ae, 0x80007, 0x80087, 0x80047, 0x900ee, 0x70107, 0x8005f, 0x8001f, 0x9009e, 0x70117, 0x8007f, 0x8003f, 0x900de, 0x7010f, 0x8006f, 0x8002f, 0x900be, 0x8000f, 0x8008f, 0x8004f, 0x900fe, 0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c1, 0x70108, 0x80060, 0x80020, 0x900a1, 0x80000, 0x80080, 0x80040, 0x900e1, 0x70104, 0x80058, 0x80018, 0x90091, 0x70114, 0x80078, 0x80038, 0x900d1, 0x7010c, 0x80068, 0x80028, 0x900b1, 0x80008, 0x80088, 0x80048, 0x900f1, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c9, 0x7010a, 0x80064, 0x80024, 0x900a9, 0x80004, 0x80084, 0x80044, 0x900e9, 0x70106, 0x8005c, 0x8001c, 0x90099, 0x70116, 0x8007c, 0x8003c, 0x900d9, 0x7010e, 0x8006c, 0x8002c, 0x900b9, 0x8000c, 0x8008c, 0x8004c, 0x900f9, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c5, 0x70109, 0x80062, 0x80022, 0x900a5, 0x80002, 0x80082, 0x80042, 0x900e5, 0x70105, 0x8005a, 0x8001a, 0x90095, 0x70115, 0x8007a, 0x8003a, 0x900d5, 0x7010d, 0x8006a, 0x8002a, 0x900b5, 0x8000a, 0x8008a, 0x8004a, 0x900f5, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cd, 0x7010b, 0x80066, 0x80026, 0x900ad, 0x80006, 0x80086, 0x80046, 0x900ed, 0x70107, 0x8005e, 0x8001e, 0x9009d, 0x70117, 0x8007e, 0x8003e, 0x900dd, 0x7010f, 0x8006e, 0x8002e, 0x900bd, 0x8000e, 0x8008e, 0x8004e, 0x900fd, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c3, 0x70108, 0x80061, 0x80021, 0x900a3, 0x80001, 0x80081, 0x80041, 0x900e3, 0x70104, 0x80059, 0x80019, 0x90093, 0x70114, 0x80079, 0x80039, 0x900d3, 0x7010c, 0x80069, 0x80029, 0x900b3, 0x80009, 0x80089, 0x80049, 0x900f3, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900cb, 0x7010a, 0x80065, 0x80025, 0x900ab, 0x80005, 0x80085, 0x80045, 0x900eb, 0x70106, 0x8005d, 0x8001d, 0x9009b, 0x70116, 0x8007d, 0x8003d, 0x900db, 0x7010e, 0x8006d, 0x8002d, 0x900bb, 0x8000d, 0x8008d, 0x8004d, 0x900fb, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c7, 0x70109, 0x80063, 0x80023, 0x900a7, 0x80003, 0x80083, 0x80043, 0x900e7, 0x70105, 0x8005b, 0x8001b, 0x90097, 0x70115, 0x8007b, 0x8003b, 0x900d7, 0x7010d, 0x8006b, 0x8002b, 0x900b7, 0x8000b, 0x8008b, 0x8004b, 0x900f7, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900cf, 0x7010b, 0x80067, 0x80027, 0x900af, 0x80007, 0x80087, 0x80047, 0x900ef, 0x70107, 0x8005f, 0x8001f, 0x9009f, 0x70117, 0x8007f, 0x8003f, 0x900df, 0x7010f, 0x8006f, 0x8002f, 0x900bf, 0x8000f, 0x8008f, 0x8004f, 0x900ff]), 9]; - var fixedDistCodeTab = [new Int32Array([0x50000, 0x50010, 0x50008, 0x50018, 0x50004, 0x50014, 0x5000c, 0x5001c, 0x50002, 0x50012, 0x5000a, 0x5001a, 0x50006, 0x50016, 0x5000e, 0x00000, 0x50001, 0x50011, 0x50009, 0x50019, 0x50005, 0x50015, 0x5000d, 0x5001d, 0x50003, 0x50013, 0x5000b, 0x5001b, 0x50007, 0x50017, 0x5000f, 0x00000]), 5]; - - function FlateStream(str, maybeLength) { - this.str = str; - this.dict = str.dict; - var cmf = str.getByte(); - var flg = str.getByte(); - - if (cmf === -1 || flg === -1) { - throw new _util.FormatError("Invalid header in flate stream: ".concat(cmf, ", ").concat(flg)); - } - - if ((cmf & 0x0f) !== 0x08) { - throw new _util.FormatError("Unknown compression method in flate stream: ".concat(cmf, ", ").concat(flg)); - } - - if (((cmf << 8) + flg) % 31 !== 0) { - throw new _util.FormatError("Bad FCHECK in flate stream: ".concat(cmf, ", ").concat(flg)); - } - - if (flg & 0x20) { - throw new _util.FormatError("FDICT bit set in flate stream: ".concat(cmf, ", ").concat(flg)); - } - - this.codeSize = 0; - this.codeBuf = 0; - DecodeStream.call(this, maybeLength); - } - - FlateStream.prototype = Object.create(DecodeStream.prototype); - - FlateStream.prototype.getBits = function FlateStream_getBits(bits) { - var str = this.str; - var codeSize = this.codeSize; - var codeBuf = this.codeBuf; - var b; - - while (codeSize < bits) { - if ((b = str.getByte()) === -1) { - throw new _util.FormatError('Bad encoding in flate stream'); - } - - codeBuf |= b << codeSize; - codeSize += 8; - } - - b = codeBuf & (1 << bits) - 1; - this.codeBuf = codeBuf >> bits; - this.codeSize = codeSize -= bits; - return b; - }; - - FlateStream.prototype.getCode = function FlateStream_getCode(table) { - var str = this.str; - var codes = table[0]; - var maxLen = table[1]; - var codeSize = this.codeSize; - var codeBuf = this.codeBuf; - var b; - - while (codeSize < maxLen) { - if ((b = str.getByte()) === -1) { - break; - } - - codeBuf |= b << codeSize; - codeSize += 8; - } - - var code = codes[codeBuf & (1 << maxLen) - 1]; - var codeLen = code >> 16; - var codeVal = code & 0xffff; - - if (codeLen < 1 || codeSize < codeLen) { - throw new _util.FormatError('Bad encoding in flate stream'); - } - - this.codeBuf = codeBuf >> codeLen; - this.codeSize = codeSize - codeLen; - return codeVal; - }; - - FlateStream.prototype.generateHuffmanTable = function flateStreamGenerateHuffmanTable(lengths) { - var n = lengths.length; - var maxLen = 0; - var i; - - for (i = 0; i < n; ++i) { - if (lengths[i] > maxLen) { - maxLen = lengths[i]; - } - } - - var size = 1 << maxLen; - var codes = new Int32Array(size); - - for (var len = 1, code = 0, skip = 2; len <= maxLen; ++len, code <<= 1, skip <<= 1) { - for (var val = 0; val < n; ++val) { - if (lengths[val] === len) { - var code2 = 0; - var t = code; - - for (i = 0; i < len; ++i) { - code2 = code2 << 1 | t & 1; - t >>= 1; - } - - for (i = code2; i < size; i += skip) { - codes[i] = len << 16 | val; - } - - ++code; - } - } - } - - return [codes, maxLen]; - }; - - FlateStream.prototype.readBlock = function FlateStream_readBlock() { - var buffer, len; - var str = this.str; - var hdr = this.getBits(3); - - if (hdr & 1) { - this.eof = true; - } - - hdr >>= 1; - - if (hdr === 0) { - var b; - - if ((b = str.getByte()) === -1) { - throw new _util.FormatError('Bad block header in flate stream'); - } - - var blockLen = b; - - if ((b = str.getByte()) === -1) { - throw new _util.FormatError('Bad block header in flate stream'); - } - - blockLen |= b << 8; - - if ((b = str.getByte()) === -1) { - throw new _util.FormatError('Bad block header in flate stream'); - } - - var check = b; - - if ((b = str.getByte()) === -1) { - throw new _util.FormatError('Bad block header in flate stream'); - } - - check |= b << 8; - - if (check !== (~blockLen & 0xffff) && (blockLen !== 0 || check !== 0)) { - throw new _util.FormatError('Bad uncompressed block length in flate stream'); - } - - this.codeBuf = 0; - this.codeSize = 0; - var bufferLength = this.bufferLength; - buffer = this.ensureBuffer(bufferLength + blockLen); - var end = bufferLength + blockLen; - this.bufferLength = end; - - if (blockLen === 0) { - if (str.peekByte() === -1) { - this.eof = true; - } - } else { - for (var n = bufferLength; n < end; ++n) { - if ((b = str.getByte()) === -1) { - this.eof = true; - break; - } - - buffer[n] = b; - } - } - - return; - } - - var litCodeTable; - var distCodeTable; - - if (hdr === 1) { - litCodeTable = fixedLitCodeTab; - distCodeTable = fixedDistCodeTab; - } else if (hdr === 2) { - var numLitCodes = this.getBits(5) + 257; - var numDistCodes = this.getBits(5) + 1; - var numCodeLenCodes = this.getBits(4) + 4; - var codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length); - var i; - - for (i = 0; i < numCodeLenCodes; ++i) { - codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3); - } - - var codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths); - len = 0; - i = 0; - var codes = numLitCodes + numDistCodes; - var codeLengths = new Uint8Array(codes); - var bitsLength, bitsOffset, what; - - while (i < codes) { - var code = this.getCode(codeLenCodeTab); - - if (code === 16) { - bitsLength = 2; - bitsOffset = 3; - what = len; - } else if (code === 17) { - bitsLength = 3; - bitsOffset = 3; - what = len = 0; - } else if (code === 18) { - bitsLength = 7; - bitsOffset = 11; - what = len = 0; - } else { - codeLengths[i++] = len = code; - continue; - } - - var repeatLength = this.getBits(bitsLength) + bitsOffset; - - while (repeatLength-- > 0) { - codeLengths[i++] = what; - } - } - - litCodeTable = this.generateHuffmanTable(codeLengths.subarray(0, numLitCodes)); - distCodeTable = this.generateHuffmanTable(codeLengths.subarray(numLitCodes, codes)); - } else { - throw new _util.FormatError('Unknown block type in flate stream'); - } - - buffer = this.buffer; - var limit = buffer ? buffer.length : 0; - var pos = this.bufferLength; - - while (true) { - var code1 = this.getCode(litCodeTable); - - if (code1 < 256) { - if (pos + 1 >= limit) { - buffer = this.ensureBuffer(pos + 1); - limit = buffer.length; - } - - buffer[pos++] = code1; - continue; - } - - if (code1 === 256) { - this.bufferLength = pos; - return; - } - - code1 -= 257; - code1 = lengthDecode[code1]; - var code2 = code1 >> 16; - - if (code2 > 0) { - code2 = this.getBits(code2); - } - - len = (code1 & 0xffff) + code2; - code1 = this.getCode(distCodeTable); - code1 = distDecode[code1]; - code2 = code1 >> 16; - - if (code2 > 0) { - code2 = this.getBits(code2); - } - - var dist = (code1 & 0xffff) + code2; - - if (pos + len >= limit) { - buffer = this.ensureBuffer(pos + len); - limit = buffer.length; - } - - for (var k = 0; k < len; ++k, ++pos) { - buffer[pos] = buffer[pos - dist]; - } - } - }; - - return FlateStream; - }(); - - exports.FlateStream = FlateStream; - - var PredictorStream = function PredictorStreamClosure() { - function PredictorStream(str, maybeLength, params) { - if (!(0, _primitives.isDict)(params)) { - return str; - } - - var predictor = this.predictor = params.get('Predictor') || 1; - - if (predictor <= 1) { - return str; - } - - if (predictor !== 2 && (predictor < 10 || predictor > 15)) { - throw new _util.FormatError("Unsupported predictor: ".concat(predictor)); - } - - if (predictor === 2) { - this.readBlock = this.readBlockTiff; - } else { - this.readBlock = this.readBlockPng; - } - - this.str = str; - this.dict = str.dict; - var colors = this.colors = params.get('Colors') || 1; - var bits = this.bits = params.get('BitsPerComponent') || 8; - var columns = this.columns = params.get('Columns') || 1; - this.pixBytes = colors * bits + 7 >> 3; - this.rowBytes = columns * colors * bits + 7 >> 3; - DecodeStream.call(this, maybeLength); - return this; - } - - PredictorStream.prototype = Object.create(DecodeStream.prototype); - - PredictorStream.prototype.readBlockTiff = function predictorStreamReadBlockTiff() { - var rowBytes = this.rowBytes; - var bufferLength = this.bufferLength; - var buffer = this.ensureBuffer(bufferLength + rowBytes); - var bits = this.bits; - var colors = this.colors; - var rawBytes = this.str.getBytes(rowBytes); - this.eof = !rawBytes.length; - - if (this.eof) { - return; - } - - var inbuf = 0, - outbuf = 0; - var inbits = 0, - outbits = 0; - var pos = bufferLength; - var i; - - if (bits === 1 && colors === 1) { - for (i = 0; i < rowBytes; ++i) { - var c = rawBytes[i] ^ inbuf; - c ^= c >> 1; - c ^= c >> 2; - c ^= c >> 4; - inbuf = (c & 1) << 7; - buffer[pos++] = c; - } - } else if (bits === 8) { - for (i = 0; i < colors; ++i) { - buffer[pos++] = rawBytes[i]; - } - - for (; i < rowBytes; ++i) { - buffer[pos] = buffer[pos - colors] + rawBytes[i]; - pos++; - } - } else if (bits === 16) { - var bytesPerPixel = colors * 2; - - for (i = 0; i < bytesPerPixel; ++i) { - buffer[pos++] = rawBytes[i]; - } - - for (; i < rowBytes; i += 2) { - var sum = ((rawBytes[i] & 0xFF) << 8) + (rawBytes[i + 1] & 0xFF) + ((buffer[pos - bytesPerPixel] & 0xFF) << 8) + (buffer[pos - bytesPerPixel + 1] & 0xFF); - buffer[pos++] = sum >> 8 & 0xFF; - buffer[pos++] = sum & 0xFF; - } - } else { - var compArray = new Uint8Array(colors + 1); - var bitMask = (1 << bits) - 1; - var j = 0, - k = bufferLength; - var columns = this.columns; - - for (i = 0; i < columns; ++i) { - for (var kk = 0; kk < colors; ++kk) { - if (inbits < bits) { - inbuf = inbuf << 8 | rawBytes[j++] & 0xFF; - inbits += 8; - } - - compArray[kk] = compArray[kk] + (inbuf >> inbits - bits) & bitMask; - inbits -= bits; - outbuf = outbuf << bits | compArray[kk]; - outbits += bits; - - if (outbits >= 8) { - buffer[k++] = outbuf >> outbits - 8 & 0xFF; - outbits -= 8; - } - } - } - - if (outbits > 0) { - buffer[k++] = (outbuf << 8 - outbits) + (inbuf & (1 << 8 - outbits) - 1); - } - } - - this.bufferLength += rowBytes; - }; - - PredictorStream.prototype.readBlockPng = function predictorStreamReadBlockPng() { - var rowBytes = this.rowBytes; - var pixBytes = this.pixBytes; - var predictor = this.str.getByte(); - var rawBytes = this.str.getBytes(rowBytes); - this.eof = !rawBytes.length; - - if (this.eof) { - return; - } - - var bufferLength = this.bufferLength; - var buffer = this.ensureBuffer(bufferLength + rowBytes); - var prevRow = buffer.subarray(bufferLength - rowBytes, bufferLength); - - if (prevRow.length === 0) { - prevRow = new Uint8Array(rowBytes); - } - - var i, - j = bufferLength, - up, - c; - - switch (predictor) { - case 0: - for (i = 0; i < rowBytes; ++i) { - buffer[j++] = rawBytes[i]; - } - - break; - - case 1: - for (i = 0; i < pixBytes; ++i) { - buffer[j++] = rawBytes[i]; - } - - for (; i < rowBytes; ++i) { - buffer[j] = buffer[j - pixBytes] + rawBytes[i] & 0xFF; - j++; - } - - break; - - case 2: - for (i = 0; i < rowBytes; ++i) { - buffer[j++] = prevRow[i] + rawBytes[i] & 0xFF; - } - - break; - - case 3: - for (i = 0; i < pixBytes; ++i) { - buffer[j++] = (prevRow[i] >> 1) + rawBytes[i]; - } - - for (; i < rowBytes; ++i) { - buffer[j] = (prevRow[i] + buffer[j - pixBytes] >> 1) + rawBytes[i] & 0xFF; - j++; - } - - break; - - case 4: - for (i = 0; i < pixBytes; ++i) { - up = prevRow[i]; - c = rawBytes[i]; - buffer[j++] = up + c; - } - - for (; i < rowBytes; ++i) { - up = prevRow[i]; - var upLeft = prevRow[i - pixBytes]; - var left = buffer[j - pixBytes]; - var p = left + up - upLeft; - var pa = p - left; - - if (pa < 0) { - pa = -pa; - } - - var pb = p - up; - - if (pb < 0) { - pb = -pb; - } - - var pc = p - upLeft; - - if (pc < 0) { - pc = -pc; - } - - c = rawBytes[i]; - - if (pa <= pb && pa <= pc) { - buffer[j++] = left + c; - } else if (pb <= pc) { - buffer[j++] = up + c; - } else { - buffer[j++] = upLeft + c; - } - } - - break; - - default: - throw new _util.FormatError("Unsupported predictor: ".concat(predictor)); - } - - this.bufferLength += rowBytes; - }; - - return PredictorStream; - }(); - - exports.PredictorStream = PredictorStream; - - var DecryptStream = function DecryptStreamClosure() { - function DecryptStream(str, maybeLength, decrypt) { - this.str = str; - this.dict = str.dict; - this.decrypt = decrypt; - this.nextChunk = null; - this.initialized = false; - DecodeStream.call(this, maybeLength); - } - - var chunkSize = 512; - DecryptStream.prototype = Object.create(DecodeStream.prototype); - - DecryptStream.prototype.readBlock = function DecryptStream_readBlock() { - var chunk; - - if (this.initialized) { - chunk = this.nextChunk; - } else { - chunk = this.str.getBytes(chunkSize); - this.initialized = true; - } - - if (!chunk || chunk.length === 0) { - this.eof = true; - return; - } - - this.nextChunk = this.str.getBytes(chunkSize); - var hasMoreData = this.nextChunk && this.nextChunk.length > 0; - var decrypt = this.decrypt; - chunk = decrypt(chunk, !hasMoreData); - var bufferLength = this.bufferLength; - var i, - n = chunk.length; - var buffer = this.ensureBuffer(bufferLength + n); - - for (i = 0; i < n; i++) { - buffer[bufferLength++] = chunk[i]; - } - - this.bufferLength = bufferLength; - }; - - return DecryptStream; - }(); - - exports.DecryptStream = DecryptStream; - - var Ascii85Stream = function Ascii85StreamClosure() { - function Ascii85Stream(str, maybeLength) { - this.str = str; - this.dict = str.dict; - this.input = new Uint8Array(5); - - if (maybeLength) { - maybeLength = 0.8 * maybeLength; - } - - DecodeStream.call(this, maybeLength); - } - - Ascii85Stream.prototype = Object.create(DecodeStream.prototype); - - Ascii85Stream.prototype.readBlock = function Ascii85Stream_readBlock() { - var TILDA_CHAR = 0x7E; - var Z_LOWER_CHAR = 0x7A; - var EOF = -1; - var str = this.str; - var c = str.getByte(); - - while ((0, _util.isSpace)(c)) { - c = str.getByte(); - } - - if (c === EOF || c === TILDA_CHAR) { - this.eof = true; - return; - } - - var bufferLength = this.bufferLength, - buffer; - var i; - - if (c === Z_LOWER_CHAR) { - buffer = this.ensureBuffer(bufferLength + 4); - - for (i = 0; i < 4; ++i) { - buffer[bufferLength + i] = 0; - } - - this.bufferLength += 4; - } else { - var input = this.input; - input[0] = c; - - for (i = 1; i < 5; ++i) { - c = str.getByte(); - - while ((0, _util.isSpace)(c)) { - c = str.getByte(); - } - - input[i] = c; - - if (c === EOF || c === TILDA_CHAR) { - break; - } - } - - buffer = this.ensureBuffer(bufferLength + i - 1); - this.bufferLength += i - 1; - - if (i < 5) { - for (; i < 5; ++i) { - input[i] = 0x21 + 84; - } - - this.eof = true; - } - - var t = 0; - - for (i = 0; i < 5; ++i) { - t = t * 85 + (input[i] - 0x21); - } - - for (i = 3; i >= 0; --i) { - buffer[bufferLength + i] = t & 0xFF; - t >>= 8; - } - } - }; - - return Ascii85Stream; - }(); - - exports.Ascii85Stream = Ascii85Stream; - - var AsciiHexStream = function AsciiHexStreamClosure() { - function AsciiHexStream(str, maybeLength) { - this.str = str; - this.dict = str.dict; - this.firstDigit = -1; - - if (maybeLength) { - maybeLength = 0.5 * maybeLength; - } - - DecodeStream.call(this, maybeLength); - } - - AsciiHexStream.prototype = Object.create(DecodeStream.prototype); - - AsciiHexStream.prototype.readBlock = function AsciiHexStream_readBlock() { - var UPSTREAM_BLOCK_SIZE = 8000; - var bytes = this.str.getBytes(UPSTREAM_BLOCK_SIZE); - - if (!bytes.length) { - this.eof = true; - return; - } - - var maxDecodeLength = bytes.length + 1 >> 1; - var buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength); - var bufferLength = this.bufferLength; - var firstDigit = this.firstDigit; - - for (var i = 0, ii = bytes.length; i < ii; i++) { - var ch = bytes[i], - digit; - - if (ch >= 0x30 && ch <= 0x39) { - digit = ch & 0x0F; - } else if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) { - digit = (ch & 0x0F) + 9; - } else if (ch === 0x3E) { - this.eof = true; - break; - } else { - continue; - } - - if (firstDigit < 0) { - firstDigit = digit; - } else { - buffer[bufferLength++] = firstDigit << 4 | digit; - firstDigit = -1; - } - } - - if (firstDigit >= 0 && this.eof) { - buffer[bufferLength++] = firstDigit << 4; - firstDigit = -1; - } - - this.firstDigit = firstDigit; - this.bufferLength = bufferLength; - }; - - return AsciiHexStream; - }(); - - exports.AsciiHexStream = AsciiHexStream; - - var RunLengthStream = function RunLengthStreamClosure() { - function RunLengthStream(str, maybeLength) { - this.str = str; - this.dict = str.dict; - DecodeStream.call(this, maybeLength); - } - - RunLengthStream.prototype = Object.create(DecodeStream.prototype); - - RunLengthStream.prototype.readBlock = function RunLengthStream_readBlock() { - var repeatHeader = this.str.getBytes(2); - - if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) { - this.eof = true; - return; - } - - var buffer; - var bufferLength = this.bufferLength; - var n = repeatHeader[0]; - - if (n < 128) { - buffer = this.ensureBuffer(bufferLength + n + 1); - buffer[bufferLength++] = repeatHeader[1]; - - if (n > 0) { - var source = this.str.getBytes(n); - buffer.set(source, bufferLength); - bufferLength += n; - } - } else { - n = 257 - n; - var b = repeatHeader[1]; - buffer = this.ensureBuffer(bufferLength + n + 1); - - for (var i = 0; i < n; i++) { - buffer[bufferLength++] = b; - } - } - - this.bufferLength = bufferLength; - }; - - return RunLengthStream; - }(); - - exports.RunLengthStream = RunLengthStream; - - var LZWStream = function LZWStreamClosure() { - function LZWStream(str, maybeLength, earlyChange) { - this.str = str; - this.dict = str.dict; - this.cachedData = 0; - this.bitsCached = 0; - var maxLzwDictionarySize = 4096; - var lzwState = { - earlyChange: earlyChange, - codeLength: 9, - nextCode: 258, - dictionaryValues: new Uint8Array(maxLzwDictionarySize), - dictionaryLengths: new Uint16Array(maxLzwDictionarySize), - dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize), - currentSequence: new Uint8Array(maxLzwDictionarySize), - currentSequenceLength: 0 - }; - - for (var i = 0; i < 256; ++i) { - lzwState.dictionaryValues[i] = i; - lzwState.dictionaryLengths[i] = 1; - } - - this.lzwState = lzwState; - DecodeStream.call(this, maybeLength); - } - - LZWStream.prototype = Object.create(DecodeStream.prototype); - - LZWStream.prototype.readBits = function LZWStream_readBits(n) { - var bitsCached = this.bitsCached; - var cachedData = this.cachedData; - - while (bitsCached < n) { - var c = this.str.getByte(); - - if (c === -1) { - this.eof = true; - return null; - } - - cachedData = cachedData << 8 | c; - bitsCached += 8; - } - - this.bitsCached = bitsCached -= n; - this.cachedData = cachedData; - this.lastCode = null; - return cachedData >>> bitsCached & (1 << n) - 1; - }; - - LZWStream.prototype.readBlock = function LZWStream_readBlock() { - var blockSize = 512; - var estimatedDecodedSize = blockSize * 2, - decodedSizeDelta = blockSize; - var i, j, q; - var lzwState = this.lzwState; - - if (!lzwState) { - return; - } - - var earlyChange = lzwState.earlyChange; - var nextCode = lzwState.nextCode; - var dictionaryValues = lzwState.dictionaryValues; - var dictionaryLengths = lzwState.dictionaryLengths; - var dictionaryPrevCodes = lzwState.dictionaryPrevCodes; - var codeLength = lzwState.codeLength; - var prevCode = lzwState.prevCode; - var currentSequence = lzwState.currentSequence; - var currentSequenceLength = lzwState.currentSequenceLength; - var decodedLength = 0; - var currentBufferLength = this.bufferLength; - var buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize); - - for (i = 0; i < blockSize; i++) { - var code = this.readBits(codeLength); - var hasPrev = currentSequenceLength > 0; - - if (code < 256) { - currentSequence[0] = code; - currentSequenceLength = 1; - } else if (code >= 258) { - if (code < nextCode) { - currentSequenceLength = dictionaryLengths[code]; - - for (j = currentSequenceLength - 1, q = code; j >= 0; j--) { - currentSequence[j] = dictionaryValues[q]; - q = dictionaryPrevCodes[q]; - } - } else { - currentSequence[currentSequenceLength++] = currentSequence[0]; - } - } else if (code === 256) { - codeLength = 9; - nextCode = 258; - currentSequenceLength = 0; - continue; - } else { - this.eof = true; - delete this.lzwState; - break; - } - - if (hasPrev) { - dictionaryPrevCodes[nextCode] = prevCode; - dictionaryLengths[nextCode] = dictionaryLengths[prevCode] + 1; - dictionaryValues[nextCode] = currentSequence[0]; - nextCode++; - codeLength = nextCode + earlyChange & nextCode + earlyChange - 1 ? codeLength : Math.min(Math.log(nextCode + earlyChange) / 0.6931471805599453 + 1, 12) | 0; - } - - prevCode = code; - decodedLength += currentSequenceLength; - - if (estimatedDecodedSize < decodedLength) { - do { - estimatedDecodedSize += decodedSizeDelta; - } while (estimatedDecodedSize < decodedLength); - - buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize); - } - - for (j = 0; j < currentSequenceLength; j++) { - buffer[currentBufferLength++] = currentSequence[j]; - } - } - - lzwState.nextCode = nextCode; - lzwState.codeLength = codeLength; - lzwState.prevCode = prevCode; - lzwState.currentSequenceLength = currentSequenceLength; - this.bufferLength = currentBufferLength; - }; - - return LZWStream; - }(); - - exports.LZWStream = LZWStream; - - var NullStream = function NullStreamClosure() { - function NullStream() { - Stream.call(this, new Uint8Array(0)); - } - - NullStream.prototype = Stream.prototype; - return NullStream; - }(); - - exports.NullStream = NullStream; - - /***/ }), - /* 158 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.CCITTFaxStream = void 0; - - var _primitives = __w_extracthighlights_require__(155); - - var _ccitt = __w_extracthighlights_require__(159); - - var _stream = __w_extracthighlights_require__(157); - - var CCITTFaxStream = function CCITTFaxStreamClosure() { - function CCITTFaxStream(str, maybeLength, params) { - this.str = str; - this.dict = str.dict; - - if (!(0, _primitives.isDict)(params)) { - params = _primitives.Dict.empty; - } - - var source = { - next: function next() { - return str.getByte(); - } - }; - this.ccittFaxDecoder = new _ccitt.CCITTFaxDecoder(source, { - K: params.get('K'), - EndOfLine: params.get('EndOfLine'), - EncodedByteAlign: params.get('EncodedByteAlign'), - Columns: params.get('Columns'), - Rows: params.get('Rows'), - EndOfBlock: params.get('EndOfBlock'), - BlackIs1: params.get('BlackIs1') - }); - - _stream.DecodeStream.call(this, maybeLength); - } - - CCITTFaxStream.prototype = Object.create(_stream.DecodeStream.prototype); - - CCITTFaxStream.prototype.readBlock = function () { - while (!this.eof) { - var c = this.ccittFaxDecoder.readNextChar(); - - if (c === -1) { - this.eof = true; - return; - } - - this.ensureBuffer(this.bufferLength + 1); - this.buffer[this.bufferLength++] = c; - } - }; - - return CCITTFaxStream; - }(); - - exports.CCITTFaxStream = CCITTFaxStream; - - /***/ }), - /* 159 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.CCITTFaxDecoder = void 0; - - var _util = __w_extracthighlights_require__(6); - - var CCITTFaxDecoder = function CCITTFaxDecoder() { - var ccittEOL = -2; - var ccittEOF = -1; - var twoDimPass = 0; - var twoDimHoriz = 1; - var twoDimVert0 = 2; - var twoDimVertR1 = 3; - var twoDimVertL1 = 4; - var twoDimVertR2 = 5; - var twoDimVertL2 = 6; - var twoDimVertR3 = 7; - var twoDimVertL3 = 8; - var twoDimTable = [[-1, -1], [-1, -1], [7, twoDimVertL3], [7, twoDimVertR3], [6, twoDimVertL2], [6, twoDimVertL2], [6, twoDimVertR2], [6, twoDimVertR2], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0]]; - var whiteTable1 = [[-1, -1], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [12, 1984], [12, 2048], [12, 2112], [12, 2176], [12, 2240], [12, 2304], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [12, 2368], [12, 2432], [12, 2496], [12, 2560]]; - var whiteTable2 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [8, 29], [8, 29], [8, 30], [8, 30], [8, 45], [8, 45], [8, 46], [8, 46], [7, 22], [7, 22], [7, 22], [7, 22], [7, 23], [7, 23], [7, 23], [7, 23], [8, 47], [8, 47], [8, 48], [8, 48], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [7, 20], [7, 20], [7, 20], [7, 20], [8, 33], [8, 33], [8, 34], [8, 34], [8, 35], [8, 35], [8, 36], [8, 36], [8, 37], [8, 37], [8, 38], [8, 38], [7, 19], [7, 19], [7, 19], [7, 19], [8, 31], [8, 31], [8, 32], [8, 32], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [8, 53], [8, 53], [8, 54], [8, 54], [7, 26], [7, 26], [7, 26], [7, 26], [8, 39], [8, 39], [8, 40], [8, 40], [8, 41], [8, 41], [8, 42], [8, 42], [8, 43], [8, 43], [8, 44], [8, 44], [7, 21], [7, 21], [7, 21], [7, 21], [7, 28], [7, 28], [7, 28], [7, 28], [8, 61], [8, 61], [8, 62], [8, 62], [8, 63], [8, 63], [8, 0], [8, 0], [8, 320], [8, 320], [8, 384], [8, 384], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [7, 27], [7, 27], [7, 27], [7, 27], [8, 59], [8, 59], [8, 60], [8, 60], [9, 1472], [9, 1536], [9, 1600], [9, 1728], [7, 18], [7, 18], [7, 18], [7, 18], [7, 24], [7, 24], [7, 24], [7, 24], [8, 49], [8, 49], [8, 50], [8, 50], [8, 51], [8, 51], [8, 52], [8, 52], [7, 25], [7, 25], [7, 25], [7, 25], [8, 55], [8, 55], [8, 56], [8, 56], [8, 57], [8, 57], [8, 58], [8, 58], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [8, 448], [8, 448], [8, 512], [8, 512], [9, 704], [9, 768], [8, 640], [8, 640], [8, 576], [8, 576], [9, 832], [9, 896], [9, 960], [9, 1024], [9, 1088], [9, 1152], [9, 1216], [9, 1280], [9, 1344], [9, 1408], [7, 256], [7, 256], [7, 256], [7, 256], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7]]; - var blackTable1 = [[-1, -1], [-1, -1], [12, ccittEOL], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [11, 1792], [11, 1792], [12, 1984], [12, 1984], [12, 2048], [12, 2048], [12, 2112], [12, 2112], [12, 2176], [12, 2176], [12, 2240], [12, 2240], [12, 2304], [12, 2304], [11, 1856], [11, 1856], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [11, 1920], [11, 1920], [12, 2368], [12, 2368], [12, 2432], [12, 2432], [12, 2496], [12, 2496], [12, 2560], [12, 2560], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [12, 52], [12, 52], [13, 640], [13, 704], [13, 768], [13, 832], [12, 55], [12, 55], [12, 56], [12, 56], [13, 1280], [13, 1344], [13, 1408], [13, 1472], [12, 59], [12, 59], [12, 60], [12, 60], [13, 1536], [13, 1600], [11, 24], [11, 24], [11, 24], [11, 24], [11, 25], [11, 25], [11, 25], [11, 25], [13, 1664], [13, 1728], [12, 320], [12, 320], [12, 384], [12, 384], [12, 448], [12, 448], [13, 512], [13, 576], [12, 53], [12, 53], [12, 54], [12, 54], [13, 896], [13, 960], [13, 1024], [13, 1088], [13, 1152], [13, 1216], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64]]; - var blackTable2 = [[8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [11, 23], [11, 23], [12, 50], [12, 51], [12, 44], [12, 45], [12, 46], [12, 47], [12, 57], [12, 58], [12, 61], [12, 256], [10, 16], [10, 16], [10, 16], [10, 16], [10, 17], [10, 17], [10, 17], [10, 17], [12, 48], [12, 49], [12, 62], [12, 63], [12, 30], [12, 31], [12, 32], [12, 33], [12, 40], [12, 41], [11, 22], [11, 22], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [12, 128], [12, 192], [12, 26], [12, 27], [12, 28], [12, 29], [11, 19], [11, 19], [11, 20], [11, 20], [12, 34], [12, 35], [12, 36], [12, 37], [12, 38], [12, 39], [11, 21], [11, 21], [12, 42], [12, 43], [10, 0], [10, 0], [10, 0], [10, 0], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12]]; - var blackTable3 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [6, 9], [6, 8], [5, 7], [5, 7], [4, 6], [4, 6], [4, 6], [4, 6], [4, 5], [4, 5], [4, 5], [4, 5], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2]]; - - function CCITTFaxDecoder(source) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - if (!source || typeof source.next !== 'function') { - throw new Error('CCITTFaxDecoder - invalid "source" parameter.'); - } - - this.source = source; - this.eof = false; - this.encoding = options['K'] || 0; - this.eoline = options['EndOfLine'] || false; - this.byteAlign = options['EncodedByteAlign'] || false; - this.columns = options['Columns'] || 1728; - this.rows = options['Rows'] || 0; - var eoblock = options['EndOfBlock']; - - if (eoblock === null || eoblock === undefined) { - eoblock = true; - } - - this.eoblock = eoblock; - this.black = options['BlackIs1'] || false; - this.codingLine = new Uint32Array(this.columns + 1); - this.refLine = new Uint32Array(this.columns + 2); - this.codingLine[0] = this.columns; - this.codingPos = 0; - this.row = 0; - this.nextLine2D = this.encoding < 0; - this.inputBits = 0; - this.inputBuf = 0; - this.outputBits = 0; - this.rowsDone = false; - var code1; - - while ((code1 = this._lookBits(12)) === 0) { - this._eatBits(1); - } - - if (code1 === 1) { - this._eatBits(12); - } - - if (this.encoding > 0) { - this.nextLine2D = !this._lookBits(1); - - this._eatBits(1); - } - } - - CCITTFaxDecoder.prototype = { - readNextChar: function readNextChar() { - if (this.eof) { - return -1; - } - - var refLine = this.refLine; - var codingLine = this.codingLine; - var columns = this.columns; - var refPos, blackPixels, bits, i; - - if (this.outputBits === 0) { - if (this.rowsDone) { - this.eof = true; - } - - if (this.eof) { - return -1; - } - - this.err = false; - var code1, code2, code3; - - if (this.nextLine2D) { - for (i = 0; codingLine[i] < columns; ++i) { - refLine[i] = codingLine[i]; - } - - refLine[i++] = columns; - refLine[i] = columns; - codingLine[0] = 0; - this.codingPos = 0; - refPos = 0; - blackPixels = 0; - - while (codingLine[this.codingPos] < columns) { - code1 = this._getTwoDimCode(); - - switch (code1) { - case twoDimPass: - this._addPixels(refLine[refPos + 1], blackPixels); - - if (refLine[refPos + 1] < columns) { - refPos += 2; - } - - break; - - case twoDimHoriz: - code1 = code2 = 0; - - if (blackPixels) { - do { - code1 += code3 = this._getBlackCode(); - } while (code3 >= 64); - - do { - code2 += code3 = this._getWhiteCode(); - } while (code3 >= 64); - } else { - do { - code1 += code3 = this._getWhiteCode(); - } while (code3 >= 64); - - do { - code2 += code3 = this._getBlackCode(); - } while (code3 >= 64); - } - - this._addPixels(codingLine[this.codingPos] + code1, blackPixels); - - if (codingLine[this.codingPos] < columns) { - this._addPixels(codingLine[this.codingPos] + code2, blackPixels ^ 1); - } - - while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { - refPos += 2; - } - - break; - - case twoDimVertR3: - this._addPixels(refLine[refPos] + 3, blackPixels); - - blackPixels ^= 1; - - if (codingLine[this.codingPos] < columns) { - ++refPos; - - while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { - refPos += 2; - } - } - - break; - - case twoDimVertR2: - this._addPixels(refLine[refPos] + 2, blackPixels); - - blackPixels ^= 1; - - if (codingLine[this.codingPos] < columns) { - ++refPos; - - while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { - refPos += 2; - } - } - - break; - - case twoDimVertR1: - this._addPixels(refLine[refPos] + 1, blackPixels); - - blackPixels ^= 1; - - if (codingLine[this.codingPos] < columns) { - ++refPos; - - while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { - refPos += 2; - } - } - - break; - - case twoDimVert0: - this._addPixels(refLine[refPos], blackPixels); - - blackPixels ^= 1; - - if (codingLine[this.codingPos] < columns) { - ++refPos; - - while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { - refPos += 2; - } - } - - break; - - case twoDimVertL3: - this._addPixelsNeg(refLine[refPos] - 3, blackPixels); - - blackPixels ^= 1; - - if (codingLine[this.codingPos] < columns) { - if (refPos > 0) { - --refPos; - } else { - ++refPos; - } - - while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { - refPos += 2; - } - } - - break; - - case twoDimVertL2: - this._addPixelsNeg(refLine[refPos] - 2, blackPixels); - - blackPixels ^= 1; - - if (codingLine[this.codingPos] < columns) { - if (refPos > 0) { - --refPos; - } else { - ++refPos; - } - - while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { - refPos += 2; - } - } - - break; - - case twoDimVertL1: - this._addPixelsNeg(refLine[refPos] - 1, blackPixels); - - blackPixels ^= 1; - - if (codingLine[this.codingPos] < columns) { - if (refPos > 0) { - --refPos; - } else { - ++refPos; - } - - while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { - refPos += 2; - } - } - - break; - - case ccittEOF: - this._addPixels(columns, 0); - - this.eof = true; - break; - - default: - (0, _util.info)('bad 2d code'); - - this._addPixels(columns, 0); - - this.err = true; - } - } - } else { - codingLine[0] = 0; - this.codingPos = 0; - blackPixels = 0; - - while (codingLine[this.codingPos] < columns) { - code1 = 0; - - if (blackPixels) { - do { - code1 += code3 = this._getBlackCode(); - } while (code3 >= 64); - } else { - do { - code1 += code3 = this._getWhiteCode(); - } while (code3 >= 64); - } - - this._addPixels(codingLine[this.codingPos] + code1, blackPixels); - - blackPixels ^= 1; - } - } - - var gotEOL = false; - - if (this.byteAlign) { - this.inputBits &= ~7; - } - - if (!this.eoblock && this.row === this.rows - 1) { - this.rowsDone = true; - } else { - code1 = this._lookBits(12); - - if (this.eoline) { - while (code1 !== ccittEOF && code1 !== 1) { - this._eatBits(1); - - code1 = this._lookBits(12); - } - } else { - while (code1 === 0) { - this._eatBits(1); - - code1 = this._lookBits(12); - } - } - - if (code1 === 1) { - this._eatBits(12); - - gotEOL = true; - } else if (code1 === ccittEOF) { - this.eof = true; - } - } - - if (!this.eof && this.encoding > 0 && !this.rowsDone) { - this.nextLine2D = !this._lookBits(1); - - this._eatBits(1); - } - - if (this.eoblock && gotEOL && this.byteAlign) { - code1 = this._lookBits(12); - - if (code1 === 1) { - this._eatBits(12); - - if (this.encoding > 0) { - this._lookBits(1); - - this._eatBits(1); - } - - if (this.encoding >= 0) { - for (i = 0; i < 4; ++i) { - code1 = this._lookBits(12); - - if (code1 !== 1) { - (0, _util.info)('bad rtc code: ' + code1); - } - - this._eatBits(12); - - if (this.encoding > 0) { - this._lookBits(1); - - this._eatBits(1); - } - } - } - - this.eof = true; - } - } else if (this.err && this.eoline) { - while (true) { - code1 = this._lookBits(13); - - if (code1 === ccittEOF) { - this.eof = true; - return -1; - } - - if (code1 >> 1 === 1) { - break; - } - - this._eatBits(1); - } - - this._eatBits(12); - - if (this.encoding > 0) { - this._eatBits(1); - - this.nextLine2D = !(code1 & 1); - } - } - - if (codingLine[0] > 0) { - this.outputBits = codingLine[this.codingPos = 0]; - } else { - this.outputBits = codingLine[this.codingPos = 1]; - } - - this.row++; - } - - var c; - - if (this.outputBits >= 8) { - c = this.codingPos & 1 ? 0 : 0xFF; - this.outputBits -= 8; - - if (this.outputBits === 0 && codingLine[this.codingPos] < columns) { - this.codingPos++; - this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1]; - } - } else { - bits = 8; - c = 0; - - do { - if (this.outputBits > bits) { - c <<= bits; - - if (!(this.codingPos & 1)) { - c |= 0xFF >> 8 - bits; - } - - this.outputBits -= bits; - bits = 0; - } else { - c <<= this.outputBits; - - if (!(this.codingPos & 1)) { - c |= 0xFF >> 8 - this.outputBits; - } - - bits -= this.outputBits; - this.outputBits = 0; - - if (codingLine[this.codingPos] < columns) { - this.codingPos++; - this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1]; - } else if (bits > 0) { - c <<= bits; - bits = 0; - } - } - } while (bits); - } - - if (this.black) { - c ^= 0xFF; - } - - return c; - }, - _addPixels: function _addPixels(a1, blackPixels) { - var codingLine = this.codingLine; - var codingPos = this.codingPos; - - if (a1 > codingLine[codingPos]) { - if (a1 > this.columns) { - (0, _util.info)('row is wrong length'); - this.err = true; - a1 = this.columns; - } - - if (codingPos & 1 ^ blackPixels) { - ++codingPos; - } - - codingLine[codingPos] = a1; - } - - this.codingPos = codingPos; - }, - _addPixelsNeg: function _addPixelsNeg(a1, blackPixels) { - var codingLine = this.codingLine; - var codingPos = this.codingPos; - - if (a1 > codingLine[codingPos]) { - if (a1 > this.columns) { - (0, _util.info)('row is wrong length'); - this.err = true; - a1 = this.columns; - } - - if (codingPos & 1 ^ blackPixels) { - ++codingPos; - } - - codingLine[codingPos] = a1; - } else if (a1 < codingLine[codingPos]) { - if (a1 < 0) { - (0, _util.info)('invalid code'); - this.err = true; - a1 = 0; - } - - while (codingPos > 0 && a1 < codingLine[codingPos - 1]) { - --codingPos; - } - - codingLine[codingPos] = a1; - } - - this.codingPos = codingPos; - }, - _findTableCode: function _findTableCode(start, end, table, limit) { - var limitValue = limit || 0; - - for (var i = start; i <= end; ++i) { - var code = this._lookBits(i); - - if (code === ccittEOF) { - return [true, 1, false]; - } - - if (i < end) { - code <<= end - i; - } - - if (!limitValue || code >= limitValue) { - var p = table[code - limitValue]; - - if (p[0] === i) { - this._eatBits(i); - - return [true, p[1], true]; - } - } - } - - return [false, 0, false]; - }, - _getTwoDimCode: function _getTwoDimCode() { - var code = 0; - var p; - - if (this.eoblock) { - code = this._lookBits(7); - p = twoDimTable[code]; - - if (p && p[0] > 0) { - this._eatBits(p[0]); - - return p[1]; - } - } else { - var result = this._findTableCode(1, 7, twoDimTable); - - if (result[0] && result[2]) { - return result[1]; - } - } - - (0, _util.info)('Bad two dim code'); - return ccittEOF; - }, - _getWhiteCode: function _getWhiteCode() { - var code = 0; - var p; - - if (this.eoblock) { - code = this._lookBits(12); - - if (code === ccittEOF) { - return 1; - } - - if (code >> 5 === 0) { - p = whiteTable1[code]; - } else { - p = whiteTable2[code >> 3]; - } - - if (p[0] > 0) { - this._eatBits(p[0]); - - return p[1]; - } - } else { - var result = this._findTableCode(1, 9, whiteTable2); - - if (result[0]) { - return result[1]; - } - - result = this._findTableCode(11, 12, whiteTable1); - - if (result[0]) { - return result[1]; - } - } - - (0, _util.info)('bad white code'); - - this._eatBits(1); - - return 1; - }, - _getBlackCode: function _getBlackCode() { - var code, p; - - if (this.eoblock) { - code = this._lookBits(13); - - if (code === ccittEOF) { - return 1; - } - - if (code >> 7 === 0) { - p = blackTable1[code]; - } else if (code >> 9 === 0 && code >> 7 !== 0) { - p = blackTable2[(code >> 1) - 64]; - } else { - p = blackTable3[code >> 7]; - } - - if (p[0] > 0) { - this._eatBits(p[0]); - - return p[1]; - } - } else { - var result = this._findTableCode(2, 6, blackTable3); - - if (result[0]) { - return result[1]; - } - - result = this._findTableCode(7, 12, blackTable2, 64); - - if (result[0]) { - return result[1]; - } - - result = this._findTableCode(10, 13, blackTable1); - - if (result[0]) { - return result[1]; - } - } - - (0, _util.info)('bad black code'); - - this._eatBits(1); - - return 1; - }, - _lookBits: function _lookBits(n) { - var c; - - while (this.inputBits < n) { - if ((c = this.source.next()) === -1) { - if (this.inputBits === 0) { - return ccittEOF; - } - - return this.inputBuf << n - this.inputBits & 0xFFFF >> 16 - n; - } - - this.inputBuf = this.inputBuf << 8 | c; - this.inputBits += 8; - } - - return this.inputBuf >> this.inputBits - n & 0xFFFF >> 16 - n; - }, - _eatBits: function _eatBits(n) { - if ((this.inputBits -= n) < 0) { - this.inputBits = 0; - } - } - }; - return CCITTFaxDecoder; - }(); - - exports.CCITTFaxDecoder = CCITTFaxDecoder; - - /***/ }), - /* 160 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.Jbig2Stream = void 0; - - var _primitives = __w_extracthighlights_require__(155); - - var _stream = __w_extracthighlights_require__(157); - - var _jbig = __w_extracthighlights_require__(161); - - var _util = __w_extracthighlights_require__(6); - - var Jbig2Stream = function Jbig2StreamClosure() { - function Jbig2Stream(stream, maybeLength, dict, params) { - this.stream = stream; - this.maybeLength = maybeLength; - this.dict = dict; - this.params = params; - - _stream.DecodeStream.call(this, maybeLength); - } - - Jbig2Stream.prototype = Object.create(_stream.DecodeStream.prototype); - Object.defineProperty(Jbig2Stream.prototype, 'bytes', { - get: function get() { - return (0, _util.shadow)(this, 'bytes', this.stream.getBytes(this.maybeLength)); - }, - configurable: true - }); - - Jbig2Stream.prototype.ensureBuffer = function (requested) {}; - - Jbig2Stream.prototype.readBlock = function () { - if (this.eof) { - return; - } - - var jbig2Image = new _jbig.Jbig2Image(); - var chunks = []; - - if ((0, _primitives.isDict)(this.params)) { - var globalsStream = this.params.get('JBIG2Globals'); - - if ((0, _primitives.isStream)(globalsStream)) { - var globals = globalsStream.getBytes(); - chunks.push({ - data: globals, - start: 0, - end: globals.length - }); - } - } - - chunks.push({ - data: this.bytes, - start: 0, - end: this.bytes.length - }); - var data = jbig2Image.parseChunks(chunks); - var dataLength = data.length; - - for (var i = 0; i < dataLength; i++) { - data[i] ^= 0xFF; - } - - this.buffer = data; - this.bufferLength = dataLength; - this.eof = true; - }; - - return Jbig2Stream; - }(); - - exports.Jbig2Stream = Jbig2Stream; - - /***/ }), - /* 161 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.Jbig2Image = void 0; - - var _util = __w_extracthighlights_require__(6); - - var _arithmetic_decoder = __w_extracthighlights_require__(162); - - var _ccitt = __w_extracthighlights_require__(159); - - var Jbig2Error = function Jbig2ErrorClosure() { - function Jbig2Error(msg) { - this.message = 'JBIG2 error: ' + msg; - } - - Jbig2Error.prototype = new Error(); - Jbig2Error.prototype.name = 'Jbig2Error'; - Jbig2Error.constructor = Jbig2Error; - return Jbig2Error; - }(); - - var Jbig2Image = function Jbig2ImageClosure() { - function ContextCache() {} - - ContextCache.prototype = { - getContexts: function getContexts(id) { - if (id in this) { - return this[id]; - } - - return this[id] = new Int8Array(1 << 16); - } - }; - - function DecodingContext(data, start, end) { - this.data = data; - this.start = start; - this.end = end; - } - - DecodingContext.prototype = { - get decoder() { - var decoder = new _arithmetic_decoder.ArithmeticDecoder(this.data, this.start, this.end); - return (0, _util.shadow)(this, 'decoder', decoder); - }, - - get contextCache() { - var cache = new ContextCache(); - return (0, _util.shadow)(this, 'contextCache', cache); - } - - }; - - function decodeInteger(contextCache, procedure, decoder) { - var contexts = contextCache.getContexts(procedure); - var prev = 1; - - function readBits(length) { - var v = 0; - - for (var i = 0; i < length; i++) { - var bit = decoder.readBit(contexts, prev); - prev = prev < 256 ? prev << 1 | bit : (prev << 1 | bit) & 511 | 256; - v = v << 1 | bit; - } - - return v >>> 0; - } - - var sign = readBits(1); - var value = readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(32) + 4436 : readBits(12) + 340 : readBits(8) + 84 : readBits(6) + 20 : readBits(4) + 4 : readBits(2); - return sign === 0 ? value : value > 0 ? -value : null; - } - - function decodeIAID(contextCache, decoder, codeLength) { - var contexts = contextCache.getContexts('IAID'); - var prev = 1; - - for (var i = 0; i < codeLength; i++) { - var bit = decoder.readBit(contexts, prev); - prev = prev << 1 | bit; - } - - if (codeLength < 31) { - return prev & (1 << codeLength) - 1; - } - - return prev & 0x7FFFFFFF; - } - - var SegmentTypes = ['SymbolDictionary', null, null, null, 'IntermediateTextRegion', null, 'ImmediateTextRegion', 'ImmediateLosslessTextRegion', null, null, null, null, null, null, null, null, 'PatternDictionary', null, null, null, 'IntermediateHalftoneRegion', null, 'ImmediateHalftoneRegion', 'ImmediateLosslessHalftoneRegion', null, null, null, null, null, null, null, null, null, null, null, null, 'IntermediateGenericRegion', null, 'ImmediateGenericRegion', 'ImmediateLosslessGenericRegion', 'IntermediateGenericRefinementRegion', null, 'ImmediateGenericRefinementRegion', 'ImmediateLosslessGenericRefinementRegion', null, null, null, null, 'PageInformation', 'EndOfPage', 'EndOfStripe', 'EndOfFile', 'Profiles', 'Tables', null, null, null, null, null, null, null, null, 'Extension']; - var CodingTemplates = [[{ - x: -1, - y: -2 - }, { - x: 0, - y: -2 - }, { - x: 1, - y: -2 - }, { - x: -2, - y: -1 - }, { - x: -1, - y: -1 - }, { - x: 0, - y: -1 - }, { - x: 1, - y: -1 - }, { - x: 2, - y: -1 - }, { - x: -4, - y: 0 - }, { - x: -3, - y: 0 - }, { - x: -2, - y: 0 - }, { - x: -1, - y: 0 - }], [{ - x: -1, - y: -2 - }, { - x: 0, - y: -2 - }, { - x: 1, - y: -2 - }, { - x: 2, - y: -2 - }, { - x: -2, - y: -1 - }, { - x: -1, - y: -1 - }, { - x: 0, - y: -1 - }, { - x: 1, - y: -1 - }, { - x: 2, - y: -1 - }, { - x: -3, - y: 0 - }, { - x: -2, - y: 0 - }, { - x: -1, - y: 0 - }], [{ - x: -1, - y: -2 - }, { - x: 0, - y: -2 - }, { - x: 1, - y: -2 - }, { - x: -2, - y: -1 - }, { - x: -1, - y: -1 - }, { - x: 0, - y: -1 - }, { - x: 1, - y: -1 - }, { - x: -2, - y: 0 - }, { - x: -1, - y: 0 - }], [{ - x: -3, - y: -1 - }, { - x: -2, - y: -1 - }, { - x: -1, - y: -1 - }, { - x: 0, - y: -1 - }, { - x: 1, - y: -1 - }, { - x: -4, - y: 0 - }, { - x: -3, - y: 0 - }, { - x: -2, - y: 0 - }, { - x: -1, - y: 0 - }]]; - var RefinementTemplates = [{ - coding: [{ - x: 0, - y: -1 - }, { - x: 1, - y: -1 - }, { - x: -1, - y: 0 - }], - reference: [{ - x: 0, - y: -1 - }, { - x: 1, - y: -1 - }, { - x: -1, - y: 0 - }, { - x: 0, - y: 0 - }, { - x: 1, - y: 0 - }, { - x: -1, - y: 1 - }, { - x: 0, - y: 1 - }, { - x: 1, - y: 1 - }] - }, { - coding: [{ - x: -1, - y: -1 - }, { - x: 0, - y: -1 - }, { - x: 1, - y: -1 - }, { - x: -1, - y: 0 - }], - reference: [{ - x: 0, - y: -1 - }, { - x: -1, - y: 0 - }, { - x: 0, - y: 0 - }, { - x: 1, - y: 0 - }, { - x: 0, - y: 1 - }, { - x: 1, - y: 1 - }] - }]; - var ReusedContexts = [0x9B25, 0x0795, 0x00E5, 0x0195]; - var RefinementReusedContexts = [0x0020, 0x0008]; - - function decodeBitmapTemplate0(width, height, decodingContext) { - var decoder = decodingContext.decoder; - var contexts = decodingContext.contextCache.getContexts('GB'); - var contextLabel, - i, - j, - pixel, - row, - row1, - row2, - bitmap = []; - var OLD_PIXEL_MASK = 0x7BF7; - - for (i = 0; i < height; i++) { - row = bitmap[i] = new Uint8Array(width); - row1 = i < 1 ? row : bitmap[i - 1]; - row2 = i < 2 ? row : bitmap[i - 2]; - contextLabel = row2[0] << 13 | row2[1] << 12 | row2[2] << 11 | row1[0] << 7 | row1[1] << 6 | row1[2] << 5 | row1[3] << 4; - - for (j = 0; j < width; j++) { - row[j] = pixel = decoder.readBit(contexts, contextLabel); - contextLabel = (contextLabel & OLD_PIXEL_MASK) << 1 | (j + 3 < width ? row2[j + 3] << 11 : 0) | (j + 4 < width ? row1[j + 4] << 4 : 0) | pixel; - } - } - - return bitmap; - } - - function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at, decodingContext) { - if (mmr) { - var input = new Reader(decodingContext.data, decodingContext.start, decodingContext.end); - return decodeMMRBitmap(input, width, height, false); - } - - if (templateIndex === 0 && !skip && !prediction && at.length === 4 && at[0].x === 3 && at[0].y === -1 && at[1].x === -3 && at[1].y === -1 && at[2].x === 2 && at[2].y === -2 && at[3].x === -2 && at[3].y === -2) { - return decodeBitmapTemplate0(width, height, decodingContext); - } - - var useskip = !!skip; - var template = CodingTemplates[templateIndex].concat(at); - template.sort(function (a, b) { - return a.y - b.y || a.x - b.x; - }); - var templateLength = template.length; - var templateX = new Int8Array(templateLength); - var templateY = new Int8Array(templateLength); - var changingTemplateEntries = []; - var reuseMask = 0, - minX = 0, - maxX = 0, - minY = 0; - var c, k; - - for (k = 0; k < templateLength; k++) { - templateX[k] = template[k].x; - templateY[k] = template[k].y; - minX = Math.min(minX, template[k].x); - maxX = Math.max(maxX, template[k].x); - minY = Math.min(minY, template[k].y); - - if (k < templateLength - 1 && template[k].y === template[k + 1].y && template[k].x === template[k + 1].x - 1) { - reuseMask |= 1 << templateLength - 1 - k; - } else { - changingTemplateEntries.push(k); - } - } - - var changingEntriesLength = changingTemplateEntries.length; - var changingTemplateX = new Int8Array(changingEntriesLength); - var changingTemplateY = new Int8Array(changingEntriesLength); - var changingTemplateBit = new Uint16Array(changingEntriesLength); - - for (c = 0; c < changingEntriesLength; c++) { - k = changingTemplateEntries[c]; - changingTemplateX[c] = template[k].x; - changingTemplateY[c] = template[k].y; - changingTemplateBit[c] = 1 << templateLength - 1 - k; - } - - var sbb_left = -minX; - var sbb_top = -minY; - var sbb_right = width - maxX; - var pseudoPixelContext = ReusedContexts[templateIndex]; - var row = new Uint8Array(width); - var bitmap = []; - var decoder = decodingContext.decoder; - var contexts = decodingContext.contextCache.getContexts('GB'); - var ltp = 0, - j, - i0, - j0, - contextLabel = 0, - bit, - shift; - - for (var i = 0; i < height; i++) { - if (prediction) { - var sltp = decoder.readBit(contexts, pseudoPixelContext); - ltp ^= sltp; - - if (ltp) { - bitmap.push(row); - continue; - } - } - - row = new Uint8Array(row); - bitmap.push(row); - - for (j = 0; j < width; j++) { - if (useskip && skip[i][j]) { - row[j] = 0; - continue; - } - - if (j >= sbb_left && j < sbb_right && i >= sbb_top) { - contextLabel = contextLabel << 1 & reuseMask; - - for (k = 0; k < changingEntriesLength; k++) { - i0 = i + changingTemplateY[k]; - j0 = j + changingTemplateX[k]; - bit = bitmap[i0][j0]; - - if (bit) { - bit = changingTemplateBit[k]; - contextLabel |= bit; - } - } - } else { - contextLabel = 0; - shift = templateLength - 1; - - for (k = 0; k < templateLength; k++, shift--) { - j0 = j + templateX[k]; - - if (j0 >= 0 && j0 < width) { - i0 = i + templateY[k]; - - if (i0 >= 0) { - bit = bitmap[i0][j0]; - - if (bit) { - contextLabel |= bit << shift; - } - } - } - } - } - - var pixel = decoder.readBit(contexts, contextLabel); - row[j] = pixel; - } - } - - return bitmap; - } - - function decodeRefinement(width, height, templateIndex, referenceBitmap, offsetX, offsetY, prediction, at, decodingContext) { - var codingTemplate = RefinementTemplates[templateIndex].coding; - - if (templateIndex === 0) { - codingTemplate = codingTemplate.concat([at[0]]); - } - - var codingTemplateLength = codingTemplate.length; - var codingTemplateX = new Int32Array(codingTemplateLength); - var codingTemplateY = new Int32Array(codingTemplateLength); - var k; - - for (k = 0; k < codingTemplateLength; k++) { - codingTemplateX[k] = codingTemplate[k].x; - codingTemplateY[k] = codingTemplate[k].y; - } - - var referenceTemplate = RefinementTemplates[templateIndex].reference; - - if (templateIndex === 0) { - referenceTemplate = referenceTemplate.concat([at[1]]); - } - - var referenceTemplateLength = referenceTemplate.length; - var referenceTemplateX = new Int32Array(referenceTemplateLength); - var referenceTemplateY = new Int32Array(referenceTemplateLength); - - for (k = 0; k < referenceTemplateLength; k++) { - referenceTemplateX[k] = referenceTemplate[k].x; - referenceTemplateY[k] = referenceTemplate[k].y; - } - - var referenceWidth = referenceBitmap[0].length; - var referenceHeight = referenceBitmap.length; - var pseudoPixelContext = RefinementReusedContexts[templateIndex]; - var bitmap = []; - var decoder = decodingContext.decoder; - var contexts = decodingContext.contextCache.getContexts('GR'); - var ltp = 0; - - for (var i = 0; i < height; i++) { - if (prediction) { - var sltp = decoder.readBit(contexts, pseudoPixelContext); - ltp ^= sltp; - - if (ltp) { - throw new Jbig2Error('prediction is not supported'); - } - } - - var row = new Uint8Array(width); - bitmap.push(row); - - for (var j = 0; j < width; j++) { - var i0, j0; - var contextLabel = 0; - - for (k = 0; k < codingTemplateLength; k++) { - i0 = i + codingTemplateY[k]; - j0 = j + codingTemplateX[k]; - - if (i0 < 0 || j0 < 0 || j0 >= width) { - contextLabel <<= 1; - } else { - contextLabel = contextLabel << 1 | bitmap[i0][j0]; - } - } - - for (k = 0; k < referenceTemplateLength; k++) { - i0 = i + referenceTemplateY[k] - offsetY; - j0 = j + referenceTemplateX[k] - offsetX; - - if (i0 < 0 || i0 >= referenceHeight || j0 < 0 || j0 >= referenceWidth) { - contextLabel <<= 1; - } else { - contextLabel = contextLabel << 1 | referenceBitmap[i0][j0]; - } - } - - var pixel = decoder.readBit(contexts, contextLabel); - row[j] = pixel; - } - } - - return bitmap; - } - - function decodeSymbolDictionary(huffman, refinement, symbols, numberOfNewSymbols, numberOfExportedSymbols, huffmanTables, templateIndex, at, refinementTemplateIndex, refinementAt, decodingContext, huffmanInput) { - if (huffman && refinement) { - throw new Jbig2Error('symbol refinement with Huffman is not supported'); - } - - var newSymbols = []; - var currentHeight = 0; - var symbolCodeLength = (0, _util.log2)(symbols.length + numberOfNewSymbols); - var decoder = decodingContext.decoder; - var contextCache = decodingContext.contextCache; - var tableB1, symbolWidths; - - if (huffman) { - tableB1 = getStandardTable(1); - symbolWidths = []; - symbolCodeLength = Math.max(symbolCodeLength, 1); - } - - while (newSymbols.length < numberOfNewSymbols) { - var deltaHeight = huffman ? huffmanTables.tableDeltaHeight.decode(huffmanInput) : decodeInteger(contextCache, 'IADH', decoder); - currentHeight += deltaHeight; - var currentWidth = 0, - totalWidth = 0; - var firstSymbol = huffman ? symbolWidths.length : 0; - - while (true) { - var deltaWidth = huffman ? huffmanTables.tableDeltaWidth.decode(huffmanInput) : decodeInteger(contextCache, 'IADW', decoder); - - if (deltaWidth === null) { - break; - } - - currentWidth += deltaWidth; - totalWidth += currentWidth; - var bitmap; - - if (refinement) { - var numberOfInstances = decodeInteger(contextCache, 'IAAI', decoder); - - if (numberOfInstances > 1) { - bitmap = decodeTextRegion(huffman, refinement, currentWidth, currentHeight, 0, numberOfInstances, 1, symbols.concat(newSymbols), symbolCodeLength, 0, 0, 1, 0, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, 0, huffmanInput); - } else { - var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength); - var rdx = decodeInteger(contextCache, 'IARDX', decoder); - var rdy = decodeInteger(contextCache, 'IARDY', decoder); - var symbol = symbolId < symbols.length ? symbols[symbolId] : newSymbols[symbolId - symbols.length]; - bitmap = decodeRefinement(currentWidth, currentHeight, refinementTemplateIndex, symbol, rdx, rdy, false, refinementAt, decodingContext); - } - - newSymbols.push(bitmap); - } else if (huffman) { - symbolWidths.push(currentWidth); - } else { - bitmap = decodeBitmap(false, currentWidth, currentHeight, templateIndex, false, null, at, decodingContext); - newSymbols.push(bitmap); - } - } - - if (huffman && !refinement) { - var bitmapSize = huffmanTables.tableBitmapSize.decode(huffmanInput); - huffmanInput.byteAlign(); - var collectiveBitmap = void 0; - - if (bitmapSize === 0) { - collectiveBitmap = readUncompressedBitmap(huffmanInput, totalWidth, currentHeight); - } else { - var originalEnd = huffmanInput.end; - var bitmapEnd = huffmanInput.position + bitmapSize; - huffmanInput.end = bitmapEnd; - collectiveBitmap = decodeMMRBitmap(huffmanInput, totalWidth, currentHeight, false); - huffmanInput.end = originalEnd; - huffmanInput.position = bitmapEnd; - } - - var numberOfSymbolsDecoded = symbolWidths.length; - - if (firstSymbol === numberOfSymbolsDecoded - 1) { - newSymbols.push(collectiveBitmap); - } else { - var _i = void 0, - y = void 0, - xMin = 0, - xMax = void 0, - bitmapWidth = void 0, - symbolBitmap = void 0; - - for (_i = firstSymbol; _i < numberOfSymbolsDecoded; _i++) { - bitmapWidth = symbolWidths[_i]; - xMax = xMin + bitmapWidth; - symbolBitmap = []; - - for (y = 0; y < currentHeight; y++) { - symbolBitmap.push(collectiveBitmap[y].subarray(xMin, xMax)); - } - - newSymbols.push(symbolBitmap); - xMin = xMax; - } - } - } - } - - var exportedSymbols = []; - var flags = [], - currentFlag = false; - var totalSymbolsLength = symbols.length + numberOfNewSymbols; - - while (flags.length < totalSymbolsLength) { - var runLength = huffman ? tableB1.decode(huffmanInput) : decodeInteger(contextCache, 'IAEX', decoder); - - while (runLength--) { - flags.push(currentFlag); - } - - currentFlag = !currentFlag; - } - - for (var i = 0, ii = symbols.length; i < ii; i++) { - if (flags[i]) { - exportedSymbols.push(symbols[i]); - } - } - - for (var j = 0; j < numberOfNewSymbols; i++, j++) { - if (flags[i]) { - exportedSymbols.push(newSymbols[j]); - } - } - - return exportedSymbols; - } - - function decodeTextRegion(huffman, refinement, width, height, defaultPixelValue, numberOfSymbolInstances, stripSize, inputSymbols, symbolCodeLength, transposed, dsOffset, referenceCorner, combinationOperator, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, logStripSize, huffmanInput) { - if (huffman && refinement) { - throw new Jbig2Error('refinement with Huffman is not supported'); - } - - var bitmap = []; - var i, row; - - for (i = 0; i < height; i++) { - row = new Uint8Array(width); - - if (defaultPixelValue) { - for (var j = 0; j < width; j++) { - row[j] = defaultPixelValue; - } - } - - bitmap.push(row); - } - - var decoder = decodingContext.decoder; - var contextCache = decodingContext.contextCache; - var stripT = huffman ? -huffmanTables.tableDeltaT.decode(huffmanInput) : -decodeInteger(contextCache, 'IADT', decoder); - var firstS = 0; - i = 0; - - while (i < numberOfSymbolInstances) { - var deltaT = huffman ? huffmanTables.tableDeltaT.decode(huffmanInput) : decodeInteger(contextCache, 'IADT', decoder); - stripT += deltaT; - var deltaFirstS = huffman ? huffmanTables.tableFirstS.decode(huffmanInput) : decodeInteger(contextCache, 'IAFS', decoder); - firstS += deltaFirstS; - var currentS = firstS; - - do { - var currentT = 0; - - if (stripSize > 1) { - currentT = huffman ? huffmanInput.readBits(logStripSize) : decodeInteger(contextCache, 'IAIT', decoder); - } - - var t = stripSize * stripT + currentT; - var symbolId = huffman ? huffmanTables.symbolIDTable.decode(huffmanInput) : decodeIAID(contextCache, decoder, symbolCodeLength); - var applyRefinement = refinement && (huffman ? huffmanInput.readBit() : decodeInteger(contextCache, 'IARI', decoder)); - var symbolBitmap = inputSymbols[symbolId]; - var symbolWidth = symbolBitmap[0].length; - var symbolHeight = symbolBitmap.length; - - if (applyRefinement) { - var rdw = decodeInteger(contextCache, 'IARDW', decoder); - var rdh = decodeInteger(contextCache, 'IARDH', decoder); - var rdx = decodeInteger(contextCache, 'IARDX', decoder); - var rdy = decodeInteger(contextCache, 'IARDY', decoder); - symbolWidth += rdw; - symbolHeight += rdh; - symbolBitmap = decodeRefinement(symbolWidth, symbolHeight, refinementTemplateIndex, symbolBitmap, (rdw >> 1) + rdx, (rdh >> 1) + rdy, false, refinementAt, decodingContext); - } - - var offsetT = t - (referenceCorner & 1 ? 0 : symbolHeight - 1); - var offsetS = currentS - (referenceCorner & 2 ? symbolWidth - 1 : 0); - var s2, t2, symbolRow; - - if (transposed) { - for (s2 = 0; s2 < symbolHeight; s2++) { - row = bitmap[offsetS + s2]; - - if (!row) { - continue; - } - - symbolRow = symbolBitmap[s2]; - var maxWidth = Math.min(width - offsetT, symbolWidth); - - switch (combinationOperator) { - case 0: - for (t2 = 0; t2 < maxWidth; t2++) { - row[offsetT + t2] |= symbolRow[t2]; - } - - break; - - case 2: - for (t2 = 0; t2 < maxWidth; t2++) { - row[offsetT + t2] ^= symbolRow[t2]; - } - - break; - - default: - throw new Jbig2Error("operator ".concat(combinationOperator, " is not supported")); - } - } - - currentS += symbolHeight - 1; - } else { - for (t2 = 0; t2 < symbolHeight; t2++) { - row = bitmap[offsetT + t2]; - - if (!row) { - continue; - } - - symbolRow = symbolBitmap[t2]; - - switch (combinationOperator) { - case 0: - for (s2 = 0; s2 < symbolWidth; s2++) { - row[offsetS + s2] |= symbolRow[s2]; - } - - break; - - case 2: - for (s2 = 0; s2 < symbolWidth; s2++) { - row[offsetS + s2] ^= symbolRow[s2]; - } - - break; - - default: - throw new Jbig2Error("operator ".concat(combinationOperator, " is not supported")); - } - } - - currentS += symbolWidth - 1; - } - - i++; - var deltaS = huffman ? huffmanTables.tableDeltaS.decode(huffmanInput) : decodeInteger(contextCache, 'IADS', decoder); - - if (deltaS === null) { - break; - } - - currentS += deltaS + dsOffset; - } while (true); - } - - return bitmap; - } - - function decodePatternDictionary(mmr, patternWidth, patternHeight, maxPatternIndex, template, decodingContext) { - var at = []; - - if (!mmr) { - at.push({ - x: -patternWidth, - y: 0 - }); - - if (template === 0) { - at.push({ - x: -3, - y: -1 - }); - at.push({ - x: 2, - y: -2 - }); - at.push({ - x: -2, - y: -2 - }); - } - } - - var collectiveWidth = (maxPatternIndex + 1) * patternWidth; - var collectiveBitmap = decodeBitmap(mmr, collectiveWidth, patternHeight, template, false, null, at, decodingContext); - var patterns = [], - i = 0, - patternBitmap, - xMin, - xMax, - y; - - while (i <= maxPatternIndex) { - patternBitmap = []; - xMin = patternWidth * i; - xMax = xMin + patternWidth; - - for (y = 0; y < patternHeight; y++) { - patternBitmap.push(collectiveBitmap[y].subarray(xMin, xMax)); - } - - patterns.push(patternBitmap); - i++; - } - - return patterns; - } - - function decodeHalftoneRegion(mmr, patterns, template, regionWidth, regionHeight, defaultPixelValue, enableSkip, combinationOperator, gridWidth, gridHeight, gridOffsetX, gridOffsetY, gridVectorX, gridVectorY, decodingContext) { - var skip = null; - - if (enableSkip) { - throw new Jbig2Error('skip is not supported'); - } - - if (combinationOperator !== 0) { - throw new Jbig2Error('operator ' + combinationOperator + ' is not supported in halftone region'); - } - - var regionBitmap = []; - var i, j, row; - - for (i = 0; i < regionHeight; i++) { - row = new Uint8Array(regionWidth); - - if (defaultPixelValue) { - for (j = 0; j < regionWidth; j++) { - row[j] = defaultPixelValue; - } - } - - regionBitmap.push(row); - } - - var numberOfPatterns = patterns.length; - var pattern0 = patterns[0]; - var patternWidth = pattern0[0].length, - patternHeight = pattern0.length; - var bitsPerValue = (0, _util.log2)(numberOfPatterns); - var at = []; - - if (!mmr) { - at.push({ - x: template <= 1 ? 3 : 2, - y: -1 - }); - - if (template === 0) { - at.push({ - x: -3, - y: -1 - }); - at.push({ - x: 2, - y: -2 - }); - at.push({ - x: -2, - y: -2 - }); - } - } - - var grayScaleBitPlanes = [], - mmrInput, - bitmap; - - if (mmr) { - mmrInput = new Reader(decodingContext.data, decodingContext.start, decodingContext.end); - } - - for (i = bitsPerValue - 1; i >= 0; i--) { - if (mmr) { - bitmap = decodeMMRBitmap(mmrInput, gridWidth, gridHeight, true); - } else { - bitmap = decodeBitmap(false, gridWidth, gridHeight, template, false, skip, at, decodingContext); - } - - grayScaleBitPlanes[i] = bitmap; - } - - var mg, ng, bit, patternIndex, patternBitmap, x, y, patternRow, regionRow; - - for (mg = 0; mg < gridHeight; mg++) { - for (ng = 0; ng < gridWidth; ng++) { - bit = 0; - patternIndex = 0; - - for (j = bitsPerValue - 1; j >= 0; j--) { - bit = grayScaleBitPlanes[j][mg][ng] ^ bit; - patternIndex |= bit << j; - } - - patternBitmap = patterns[patternIndex]; - x = gridOffsetX + mg * gridVectorY + ng * gridVectorX >> 8; - y = gridOffsetY + mg * gridVectorX - ng * gridVectorY >> 8; - - if (x >= 0 && x + patternWidth <= regionWidth && y >= 0 && y + patternHeight <= regionHeight) { - for (i = 0; i < patternHeight; i++) { - regionRow = regionBitmap[y + i]; - patternRow = patternBitmap[i]; - - for (j = 0; j < patternWidth; j++) { - regionRow[x + j] |= patternRow[j]; - } - } - } else { - var regionX = void 0, - regionY = void 0; - - for (i = 0; i < patternHeight; i++) { - regionY = y + i; - - if (regionY < 0 || regionY >= regionHeight) { - continue; - } - - regionRow = regionBitmap[regionY]; - patternRow = patternBitmap[i]; - - for (j = 0; j < patternWidth; j++) { - regionX = x + j; - - if (regionX >= 0 && regionX < regionWidth) { - regionRow[regionX] |= patternRow[j]; - } - } - } - } - } - } - - return regionBitmap; - } - - function readSegmentHeader(data, start) { - var segmentHeader = {}; - segmentHeader.number = (0, _util.readUint32)(data, start); - var flags = data[start + 4]; - var segmentType = flags & 0x3F; - - if (!SegmentTypes[segmentType]) { - throw new Jbig2Error('invalid segment type: ' + segmentType); - } - - segmentHeader.type = segmentType; - segmentHeader.typeName = SegmentTypes[segmentType]; - segmentHeader.deferredNonRetain = !!(flags & 0x80); - var pageAssociationFieldSize = !!(flags & 0x40); - var referredFlags = data[start + 5]; - var referredToCount = referredFlags >> 5 & 7; - var retainBits = [referredFlags & 31]; - var position = start + 6; - - if (referredFlags === 7) { - referredToCount = (0, _util.readUint32)(data, position - 1) & 0x1FFFFFFF; - position += 3; - var bytes = referredToCount + 7 >> 3; - retainBits[0] = data[position++]; - - while (--bytes > 0) { - retainBits.push(data[position++]); - } - } else if (referredFlags === 5 || referredFlags === 6) { - throw new Jbig2Error('invalid referred-to flags'); - } - - segmentHeader.retainBits = retainBits; - var referredToSegmentNumberSize = segmentHeader.number <= 256 ? 1 : segmentHeader.number <= 65536 ? 2 : 4; - var referredTo = []; - var i, ii; - - for (i = 0; i < referredToCount; i++) { - var number = referredToSegmentNumberSize === 1 ? data[position] : referredToSegmentNumberSize === 2 ? (0, _util.readUint16)(data, position) : (0, _util.readUint32)(data, position); - referredTo.push(number); - position += referredToSegmentNumberSize; - } - - segmentHeader.referredTo = referredTo; - - if (!pageAssociationFieldSize) { - segmentHeader.pageAssociation = data[position++]; - } else { - segmentHeader.pageAssociation = (0, _util.readUint32)(data, position); - position += 4; - } - - segmentHeader.length = (0, _util.readUint32)(data, position); - position += 4; - - if (segmentHeader.length === 0xFFFFFFFF) { - if (segmentType === 38) { - var genericRegionInfo = readRegionSegmentInformation(data, position); - var genericRegionSegmentFlags = data[position + RegionSegmentInformationFieldLength]; - var genericRegionMmr = !!(genericRegionSegmentFlags & 1); - var searchPatternLength = 6; - var searchPattern = new Uint8Array(searchPatternLength); - - if (!genericRegionMmr) { - searchPattern[0] = 0xFF; - searchPattern[1] = 0xAC; - } - - searchPattern[2] = genericRegionInfo.height >>> 24 & 0xFF; - searchPattern[3] = genericRegionInfo.height >> 16 & 0xFF; - searchPattern[4] = genericRegionInfo.height >> 8 & 0xFF; - searchPattern[5] = genericRegionInfo.height & 0xFF; - - for (i = position, ii = data.length; i < ii; i++) { - var j = 0; - - while (j < searchPatternLength && searchPattern[j] === data[i + j]) { - j++; - } - - if (j === searchPatternLength) { - segmentHeader.length = i + searchPatternLength; - break; - } - } - - if (segmentHeader.length === 0xFFFFFFFF) { - throw new Jbig2Error('segment end was not found'); - } - } else { - throw new Jbig2Error('invalid unknown segment length'); - } - } - - segmentHeader.headerEnd = position; - return segmentHeader; - } - - function readSegments(header, data, start, end) { - var segments = []; - var position = start; - - while (position < end) { - var segmentHeader = readSegmentHeader(data, position); - position = segmentHeader.headerEnd; - var segment = { - header: segmentHeader, - data: data - }; - - if (!header.randomAccess) { - segment.start = position; - position += segmentHeader.length; - segment.end = position; - } - - segments.push(segment); - - if (segmentHeader.type === 51) { - break; - } - } - - if (header.randomAccess) { - for (var i = 0, ii = segments.length; i < ii; i++) { - segments[i].start = position; - position += segments[i].header.length; - segments[i].end = position; - } - } - - return segments; - } - - function readRegionSegmentInformation(data, start) { - return { - width: (0, _util.readUint32)(data, start), - height: (0, _util.readUint32)(data, start + 4), - x: (0, _util.readUint32)(data, start + 8), - y: (0, _util.readUint32)(data, start + 12), - combinationOperator: data[start + 16] & 7 - }; - } - - var RegionSegmentInformationFieldLength = 17; - - function processSegment(segment, visitor) { - var header = segment.header; - var data = segment.data, - position = segment.start, - end = segment.end; - var args, at, i, atLength; - - switch (header.type) { - case 0: - var dictionary = {}; - var dictionaryFlags = (0, _util.readUint16)(data, position); - dictionary.huffman = !!(dictionaryFlags & 1); - dictionary.refinement = !!(dictionaryFlags & 2); - dictionary.huffmanDHSelector = dictionaryFlags >> 2 & 3; - dictionary.huffmanDWSelector = dictionaryFlags >> 4 & 3; - dictionary.bitmapSizeSelector = dictionaryFlags >> 6 & 1; - dictionary.aggregationInstancesSelector = dictionaryFlags >> 7 & 1; - dictionary.bitmapCodingContextUsed = !!(dictionaryFlags & 256); - dictionary.bitmapCodingContextRetained = !!(dictionaryFlags & 512); - dictionary.template = dictionaryFlags >> 10 & 3; - dictionary.refinementTemplate = dictionaryFlags >> 12 & 1; - position += 2; - - if (!dictionary.huffman) { - atLength = dictionary.template === 0 ? 4 : 1; - at = []; - - for (i = 0; i < atLength; i++) { - at.push({ - x: (0, _util.readInt8)(data, position), - y: (0, _util.readInt8)(data, position + 1) - }); - position += 2; - } - - dictionary.at = at; - } - - if (dictionary.refinement && !dictionary.refinementTemplate) { - at = []; - - for (i = 0; i < 2; i++) { - at.push({ - x: (0, _util.readInt8)(data, position), - y: (0, _util.readInt8)(data, position + 1) - }); - position += 2; - } - - dictionary.refinementAt = at; - } - - dictionary.numberOfExportedSymbols = (0, _util.readUint32)(data, position); - position += 4; - dictionary.numberOfNewSymbols = (0, _util.readUint32)(data, position); - position += 4; - args = [dictionary, header.number, header.referredTo, data, position, end]; - break; - - case 6: - case 7: - var textRegion = {}; - textRegion.info = readRegionSegmentInformation(data, position); - position += RegionSegmentInformationFieldLength; - var textRegionSegmentFlags = (0, _util.readUint16)(data, position); - position += 2; - textRegion.huffman = !!(textRegionSegmentFlags & 1); - textRegion.refinement = !!(textRegionSegmentFlags & 2); - textRegion.logStripSize = textRegionSegmentFlags >> 2 & 3; - textRegion.stripSize = 1 << textRegion.logStripSize; - textRegion.referenceCorner = textRegionSegmentFlags >> 4 & 3; - textRegion.transposed = !!(textRegionSegmentFlags & 64); - textRegion.combinationOperator = textRegionSegmentFlags >> 7 & 3; - textRegion.defaultPixelValue = textRegionSegmentFlags >> 9 & 1; - textRegion.dsOffset = textRegionSegmentFlags << 17 >> 27; - textRegion.refinementTemplate = textRegionSegmentFlags >> 15 & 1; - - if (textRegion.huffman) { - var textRegionHuffmanFlags = (0, _util.readUint16)(data, position); - position += 2; - textRegion.huffmanFS = textRegionHuffmanFlags & 3; - textRegion.huffmanDS = textRegionHuffmanFlags >> 2 & 3; - textRegion.huffmanDT = textRegionHuffmanFlags >> 4 & 3; - textRegion.huffmanRefinementDW = textRegionHuffmanFlags >> 6 & 3; - textRegion.huffmanRefinementDH = textRegionHuffmanFlags >> 8 & 3; - textRegion.huffmanRefinementDX = textRegionHuffmanFlags >> 10 & 3; - textRegion.huffmanRefinementDY = textRegionHuffmanFlags >> 12 & 3; - textRegion.huffmanRefinementSizeSelector = !!(textRegionHuffmanFlags & 0x4000); - } - - if (textRegion.refinement && !textRegion.refinementTemplate) { - at = []; - - for (i = 0; i < 2; i++) { - at.push({ - x: (0, _util.readInt8)(data, position), - y: (0, _util.readInt8)(data, position + 1) - }); - position += 2; - } - - textRegion.refinementAt = at; - } - - textRegion.numberOfSymbolInstances = (0, _util.readUint32)(data, position); - position += 4; - args = [textRegion, header.referredTo, data, position, end]; - break; - - case 16: - var patternDictionary = {}; - var patternDictionaryFlags = data[position++]; - patternDictionary.mmr = !!(patternDictionaryFlags & 1); - patternDictionary.template = patternDictionaryFlags >> 1 & 3; - patternDictionary.patternWidth = data[position++]; - patternDictionary.patternHeight = data[position++]; - patternDictionary.maxPatternIndex = (0, _util.readUint32)(data, position); - position += 4; - args = [patternDictionary, header.number, data, position, end]; - break; - - case 22: - case 23: - var halftoneRegion = {}; - halftoneRegion.info = readRegionSegmentInformation(data, position); - position += RegionSegmentInformationFieldLength; - var halftoneRegionFlags = data[position++]; - halftoneRegion.mmr = !!(halftoneRegionFlags & 1); - halftoneRegion.template = halftoneRegionFlags >> 1 & 3; - halftoneRegion.enableSkip = !!(halftoneRegionFlags & 8); - halftoneRegion.combinationOperator = halftoneRegionFlags >> 4 & 7; - halftoneRegion.defaultPixelValue = halftoneRegionFlags >> 7 & 1; - halftoneRegion.gridWidth = (0, _util.readUint32)(data, position); - position += 4; - halftoneRegion.gridHeight = (0, _util.readUint32)(data, position); - position += 4; - halftoneRegion.gridOffsetX = (0, _util.readUint32)(data, position) & 0xFFFFFFFF; - position += 4; - halftoneRegion.gridOffsetY = (0, _util.readUint32)(data, position) & 0xFFFFFFFF; - position += 4; - halftoneRegion.gridVectorX = (0, _util.readUint16)(data, position); - position += 2; - halftoneRegion.gridVectorY = (0, _util.readUint16)(data, position); - position += 2; - args = [halftoneRegion, header.referredTo, data, position, end]; - break; - - case 38: - case 39: - var genericRegion = {}; - genericRegion.info = readRegionSegmentInformation(data, position); - position += RegionSegmentInformationFieldLength; - var genericRegionSegmentFlags = data[position++]; - genericRegion.mmr = !!(genericRegionSegmentFlags & 1); - genericRegion.template = genericRegionSegmentFlags >> 1 & 3; - genericRegion.prediction = !!(genericRegionSegmentFlags & 8); - - if (!genericRegion.mmr) { - atLength = genericRegion.template === 0 ? 4 : 1; - at = []; - - for (i = 0; i < atLength; i++) { - at.push({ - x: (0, _util.readInt8)(data, position), - y: (0, _util.readInt8)(data, position + 1) - }); - position += 2; - } - - genericRegion.at = at; - } - - args = [genericRegion, data, position, end]; - break; - - case 48: - var pageInfo = { - width: (0, _util.readUint32)(data, position), - height: (0, _util.readUint32)(data, position + 4), - resolutionX: (0, _util.readUint32)(data, position + 8), - resolutionY: (0, _util.readUint32)(data, position + 12) - }; - - if (pageInfo.height === 0xFFFFFFFF) { - delete pageInfo.height; - } - - var pageSegmentFlags = data[position + 16]; - (0, _util.readUint16)(data, position + 17); - pageInfo.lossless = !!(pageSegmentFlags & 1); - pageInfo.refinement = !!(pageSegmentFlags & 2); - pageInfo.defaultPixelValue = pageSegmentFlags >> 2 & 1; - pageInfo.combinationOperator = pageSegmentFlags >> 3 & 3; - pageInfo.requiresBuffer = !!(pageSegmentFlags & 32); - pageInfo.combinationOperatorOverride = !!(pageSegmentFlags & 64); - args = [pageInfo]; - break; - - case 49: - break; - - case 50: - break; - - case 51: - break; - - case 53: - args = [header.number, data, position, end]; - break; - - case 62: - break; - - default: - throw new Jbig2Error("segment type ".concat(header.typeName, "(").concat(header.type, ")") + ' is not implemented'); - } - - var callbackName = 'on' + header.typeName; - - if (callbackName in visitor) { - visitor[callbackName].apply(visitor, args); - } - } - - function processSegments(segments, visitor) { - for (var i = 0, ii = segments.length; i < ii; i++) { - processSegment(segments[i], visitor); - } - } - - function parseJbig2Chunks(chunks) { - var visitor = new SimpleSegmentVisitor(); - - for (var i = 0, ii = chunks.length; i < ii; i++) { - var chunk = chunks[i]; - var segments = readSegments({}, chunk.data, chunk.start, chunk.end); - processSegments(segments, visitor); - } - - return visitor.buffer; - } - - function parseJbig2(data) { - var position = 0, - end = data.length; - - if (data[position] !== 0x97 || data[position + 1] !== 0x4A || data[position + 2] !== 0x42 || data[position + 3] !== 0x32 || data[position + 4] !== 0x0D || data[position + 5] !== 0x0A || data[position + 6] !== 0x1A || data[position + 7] !== 0x0A) { - throw new Jbig2Error('parseJbig2 - invalid header.'); - } - - var header = Object.create(null); - position += 8; - var flags = data[position++]; - header.randomAccess = !(flags & 1); - - if (!(flags & 2)) { - header.numberOfPages = (0, _util.readUint32)(data, position); - position += 4; - } - - var segments = readSegments(header, data, position, end); - var visitor = new SimpleSegmentVisitor(); - processSegments(segments, visitor); - var _visitor$currentPageI = visitor.currentPageInfo, - width = _visitor$currentPageI.width, - height = _visitor$currentPageI.height; - var bitPacked = visitor.buffer; - var imgData = new Uint8ClampedArray(width * height); - var q = 0, - k = 0; - - for (var i = 0; i < height; i++) { - var mask = 0, - buffer = void 0; - - for (var j = 0; j < width; j++) { - if (!mask) { - mask = 128; - buffer = bitPacked[k++]; - } - - imgData[q++] = buffer & mask ? 0 : 255; - mask >>= 1; - } - } - - return { - imgData: imgData, - width: width, - height: height - }; - } - - function SimpleSegmentVisitor() {} - - SimpleSegmentVisitor.prototype = { - onPageInformation: function SimpleSegmentVisitor_onPageInformation(info) { - this.currentPageInfo = info; - var rowSize = info.width + 7 >> 3; - var buffer = new Uint8ClampedArray(rowSize * info.height); - - if (info.defaultPixelValue) { - for (var i = 0, ii = buffer.length; i < ii; i++) { - buffer[i] = 0xFF; - } - } - - this.buffer = buffer; - }, - drawBitmap: function SimpleSegmentVisitor_drawBitmap(regionInfo, bitmap) { - var pageInfo = this.currentPageInfo; - var width = regionInfo.width, - height = regionInfo.height; - var rowSize = pageInfo.width + 7 >> 3; - var combinationOperator = pageInfo.combinationOperatorOverride ? regionInfo.combinationOperator : pageInfo.combinationOperator; - var buffer = this.buffer; - var mask0 = 128 >> (regionInfo.x & 7); - var offset0 = regionInfo.y * rowSize + (regionInfo.x >> 3); - var i, j, mask, offset; - - switch (combinationOperator) { - case 0: - for (i = 0; i < height; i++) { - mask = mask0; - offset = offset0; - - for (j = 0; j < width; j++) { - if (bitmap[i][j]) { - buffer[offset] |= mask; - } - - mask >>= 1; - - if (!mask) { - mask = 128; - offset++; - } - } - - offset0 += rowSize; - } - - break; - - case 2: - for (i = 0; i < height; i++) { - mask = mask0; - offset = offset0; - - for (j = 0; j < width; j++) { - if (bitmap[i][j]) { - buffer[offset] ^= mask; - } - - mask >>= 1; - - if (!mask) { - mask = 128; - offset++; - } - } - - offset0 += rowSize; - } - - break; - - default: - throw new Jbig2Error("operator ".concat(combinationOperator, " is not supported")); - } - }, - onImmediateGenericRegion: function SimpleSegmentVisitor_onImmediateGenericRegion(region, data, start, end) { - var regionInfo = region.info; - var decodingContext = new DecodingContext(data, start, end); - var bitmap = decodeBitmap(region.mmr, regionInfo.width, regionInfo.height, region.template, region.prediction, null, region.at, decodingContext); - this.drawBitmap(regionInfo, bitmap); - }, - onImmediateLosslessGenericRegion: function SimpleSegmentVisitor_onImmediateLosslessGenericRegion() { - this.onImmediateGenericRegion.apply(this, arguments); - }, - onSymbolDictionary: function SimpleSegmentVisitor_onSymbolDictionary(dictionary, currentSegment, referredSegments, data, start, end) { - var huffmanTables, huffmanInput; - - if (dictionary.huffman) { - huffmanTables = getSymbolDictionaryHuffmanTables(dictionary, referredSegments, this.customTables); - huffmanInput = new Reader(data, start, end); - } - - var symbols = this.symbols; - - if (!symbols) { - this.symbols = symbols = {}; - } - - var inputSymbols = []; - - for (var i = 0, ii = referredSegments.length; i < ii; i++) { - var referredSymbols = symbols[referredSegments[i]]; - - if (referredSymbols) { - inputSymbols = inputSymbols.concat(referredSymbols); - } - } - - var decodingContext = new DecodingContext(data, start, end); - symbols[currentSegment] = decodeSymbolDictionary(dictionary.huffman, dictionary.refinement, inputSymbols, dictionary.numberOfNewSymbols, dictionary.numberOfExportedSymbols, huffmanTables, dictionary.template, dictionary.at, dictionary.refinementTemplate, dictionary.refinementAt, decodingContext, huffmanInput); - }, - onImmediateTextRegion: function SimpleSegmentVisitor_onImmediateTextRegion(region, referredSegments, data, start, end) { - var regionInfo = region.info; - var huffmanTables, huffmanInput; - var symbols = this.symbols; - var inputSymbols = []; - - for (var i = 0, ii = referredSegments.length; i < ii; i++) { - var referredSymbols = symbols[referredSegments[i]]; - - if (referredSymbols) { - inputSymbols = inputSymbols.concat(referredSymbols); - } - } - - var symbolCodeLength = (0, _util.log2)(inputSymbols.length); - - if (region.huffman) { - huffmanInput = new Reader(data, start, end); - huffmanTables = getTextRegionHuffmanTables(region, referredSegments, this.customTables, inputSymbols.length, huffmanInput); - } - - var decodingContext = new DecodingContext(data, start, end); - var bitmap = decodeTextRegion(region.huffman, region.refinement, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.numberOfSymbolInstances, region.stripSize, inputSymbols, symbolCodeLength, region.transposed, region.dsOffset, region.referenceCorner, region.combinationOperator, huffmanTables, region.refinementTemplate, region.refinementAt, decodingContext, region.logStripSize, huffmanInput); - this.drawBitmap(regionInfo, bitmap); - }, - onImmediateLosslessTextRegion: function SimpleSegmentVisitor_onImmediateLosslessTextRegion() { - this.onImmediateTextRegion.apply(this, arguments); - }, - onPatternDictionary: function onPatternDictionary(dictionary, currentSegment, data, start, end) { - var patterns = this.patterns; - - if (!patterns) { - this.patterns = patterns = {}; - } - - var decodingContext = new DecodingContext(data, start, end); - patterns[currentSegment] = decodePatternDictionary(dictionary.mmr, dictionary.patternWidth, dictionary.patternHeight, dictionary.maxPatternIndex, dictionary.template, decodingContext); - }, - onImmediateHalftoneRegion: function onImmediateHalftoneRegion(region, referredSegments, data, start, end) { - var patterns = this.patterns[referredSegments[0]]; - var regionInfo = region.info; - var decodingContext = new DecodingContext(data, start, end); - var bitmap = decodeHalftoneRegion(region.mmr, patterns, region.template, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.enableSkip, region.combinationOperator, region.gridWidth, region.gridHeight, region.gridOffsetX, region.gridOffsetY, region.gridVectorX, region.gridVectorY, decodingContext); - this.drawBitmap(regionInfo, bitmap); - }, - onImmediateLosslessHalftoneRegion: function onImmediateLosslessHalftoneRegion() { - this.onImmediateHalftoneRegion.apply(this, arguments); - }, - onTables: function onTables(currentSegment, data, start, end) { - var customTables = this.customTables; - - if (!customTables) { - this.customTables = customTables = {}; - } - - customTables[currentSegment] = decodeTablesSegment(data, start, end); - } - }; - - function HuffmanLine(lineData) { - if (lineData.length === 2) { - this.isOOB = true; - this.rangeLow = 0; - this.prefixLength = lineData[0]; - this.rangeLength = 0; - this.prefixCode = lineData[1]; - this.isLowerRange = false; - } else { - this.isOOB = false; - this.rangeLow = lineData[0]; - this.prefixLength = lineData[1]; - this.rangeLength = lineData[2]; - this.prefixCode = lineData[3]; - this.isLowerRange = lineData[4] === 'lower'; - } - } - - function HuffmanTreeNode(line) { - this.children = []; - - if (line) { - this.isLeaf = true; - this.rangeLength = line.rangeLength; - this.rangeLow = line.rangeLow; - this.isLowerRange = line.isLowerRange; - this.isOOB = line.isOOB; - } else { - this.isLeaf = false; - } - } - - HuffmanTreeNode.prototype = { - buildTree: function buildTree(line, shift) { - var bit = line.prefixCode >> shift & 1; - - if (shift <= 0) { - this.children[bit] = new HuffmanTreeNode(line); - } else { - var node = this.children[bit]; - - if (!node) { - this.children[bit] = node = new HuffmanTreeNode(null); - } - - node.buildTree(line, shift - 1); - } - }, - decodeNode: function decodeNode(reader) { - if (this.isLeaf) { - if (this.isOOB) { - return null; - } - - var htOffset = reader.readBits(this.rangeLength); - return this.rangeLow + (this.isLowerRange ? -htOffset : htOffset); - } - - var node = this.children[reader.readBit()]; - - if (!node) { - throw new Jbig2Error('invalid Huffman data'); - } - - return node.decodeNode(reader); - } - }; - - function HuffmanTable(lines, prefixCodesDone) { - if (!prefixCodesDone) { - this.assignPrefixCodes(lines); - } - - this.rootNode = new HuffmanTreeNode(null); - var i, - ii = lines.length, - line; - - for (i = 0; i < ii; i++) { - line = lines[i]; - - if (line.prefixLength > 0) { - this.rootNode.buildTree(line, line.prefixLength - 1); - } - } - } - - HuffmanTable.prototype = { - decode: function decode(reader) { - return this.rootNode.decodeNode(reader); - }, - assignPrefixCodes: function assignPrefixCodes(lines) { - var linesLength = lines.length, - prefixLengthMax = 0, - i; - - for (i = 0; i < linesLength; i++) { - prefixLengthMax = Math.max(prefixLengthMax, lines[i].prefixLength); - } - - var histogram = new Uint32Array(prefixLengthMax + 1); - - for (i = 0; i < linesLength; i++) { - histogram[lines[i].prefixLength]++; - } - - var currentLength = 1, - firstCode = 0, - currentCode, - currentTemp, - line; - histogram[0] = 0; - - while (currentLength <= prefixLengthMax) { - firstCode = firstCode + histogram[currentLength - 1] << 1; - currentCode = firstCode; - currentTemp = 0; - - while (currentTemp < linesLength) { - line = lines[currentTemp]; - - if (line.prefixLength === currentLength) { - line.prefixCode = currentCode; - currentCode++; - } - - currentTemp++; - } - - currentLength++; - } - } - }; - - function decodeTablesSegment(data, start, end) { - var flags = data[start]; - var lowestValue = (0, _util.readUint32)(data, start + 1) & 0xFFFFFFFF; - var highestValue = (0, _util.readUint32)(data, start + 5) & 0xFFFFFFFF; - var reader = new Reader(data, start + 9, end); - var prefixSizeBits = (flags >> 1 & 7) + 1; - var rangeSizeBits = (flags >> 4 & 7) + 1; - var lines = []; - var prefixLength, - rangeLength, - currentRangeLow = lowestValue; - - do { - prefixLength = reader.readBits(prefixSizeBits); - rangeLength = reader.readBits(rangeSizeBits); - lines.push(new HuffmanLine([currentRangeLow, prefixLength, rangeLength, 0])); - currentRangeLow += 1 << rangeLength; - } while (currentRangeLow < highestValue); - - prefixLength = reader.readBits(prefixSizeBits); - lines.push(new HuffmanLine([lowestValue - 1, prefixLength, 32, 0, 'lower'])); - prefixLength = reader.readBits(prefixSizeBits); - lines.push(new HuffmanLine([highestValue, prefixLength, 32, 0])); - - if (flags & 1) { - prefixLength = reader.readBits(prefixSizeBits); - lines.push(new HuffmanLine([prefixLength, 0])); - } - - return new HuffmanTable(lines, false); - } - - var standardTablesCache = {}; - - function getStandardTable(number) { - var table = standardTablesCache[number]; - - if (table) { - return table; - } - - var lines; - - switch (number) { - case 1: - lines = [[0, 1, 4, 0x0], [16, 2, 8, 0x2], [272, 3, 16, 0x6], [65808, 3, 32, 0x7]]; - break; - - case 2: - lines = [[0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xE], [11, 5, 6, 0x1E], [75, 6, 32, 0x3E], [6, 0x3F]]; - break; - - case 3: - lines = [[-256, 8, 8, 0xFE], [0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xE], [11, 5, 6, 0x1E], [-257, 8, 32, 0xFF, 'lower'], [75, 7, 32, 0x7E], [6, 0x3E]]; - break; - - case 4: - lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xE], [12, 5, 6, 0x1E], [76, 5, 32, 0x1F]]; - break; - - case 5: - lines = [[-255, 7, 8, 0x7E], [1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xE], [12, 5, 6, 0x1E], [-256, 7, 32, 0x7F, 'lower'], [76, 6, 32, 0x3E]]; - break; - - case 6: - lines = [[-2048, 5, 10, 0x1C], [-1024, 4, 9, 0x8], [-512, 4, 8, 0x9], [-256, 4, 7, 0xA], [-128, 5, 6, 0x1D], [-64, 5, 5, 0x1E], [-32, 4, 5, 0xB], [0, 2, 7, 0x0], [128, 3, 7, 0x2], [256, 3, 8, 0x3], [512, 4, 9, 0xC], [1024, 4, 10, 0xD], [-2049, 6, 32, 0x3E, 'lower'], [2048, 6, 32, 0x3F]]; - break; - - case 7: - lines = [[-1024, 4, 9, 0x8], [-512, 3, 8, 0x0], [-256, 4, 7, 0x9], [-128, 5, 6, 0x1A], [-64, 5, 5, 0x1B], [-32, 4, 5, 0xA], [0, 4, 5, 0xB], [32, 5, 5, 0x1C], [64, 5, 6, 0x1D], [128, 4, 7, 0xC], [256, 3, 8, 0x1], [512, 3, 9, 0x2], [1024, 3, 10, 0x3], [-1025, 5, 32, 0x1E, 'lower'], [2048, 5, 32, 0x1F]]; - break; - - case 8: - lines = [[-15, 8, 3, 0xFC], [-7, 9, 1, 0x1FC], [-5, 8, 1, 0xFD], [-3, 9, 0, 0x1FD], [-2, 7, 0, 0x7C], [-1, 4, 0, 0xA], [0, 2, 1, 0x0], [2, 5, 0, 0x1A], [3, 6, 0, 0x3A], [4, 3, 4, 0x4], [20, 6, 1, 0x3B], [22, 4, 4, 0xB], [38, 4, 5, 0xC], [70, 5, 6, 0x1B], [134, 5, 7, 0x1C], [262, 6, 7, 0x3C], [390, 7, 8, 0x7D], [646, 6, 10, 0x3D], [-16, 9, 32, 0x1FE, 'lower'], [1670, 9, 32, 0x1FF], [2, 0x1]]; - break; - - case 9: - lines = [[-31, 8, 4, 0xFC], [-15, 9, 2, 0x1FC], [-11, 8, 2, 0xFD], [-7, 9, 1, 0x1FD], [-5, 7, 1, 0x7C], [-3, 4, 1, 0xA], [-1, 3, 1, 0x2], [1, 3, 1, 0x3], [3, 5, 1, 0x1A], [5, 6, 1, 0x3A], [7, 3, 5, 0x4], [39, 6, 2, 0x3B], [43, 4, 5, 0xB], [75, 4, 6, 0xC], [139, 5, 7, 0x1B], [267, 5, 8, 0x1C], [523, 6, 8, 0x3C], [779, 7, 9, 0x7D], [1291, 6, 11, 0x3D], [-32, 9, 32, 0x1FE, 'lower'], [3339, 9, 32, 0x1FF], [2, 0x0]]; - break; - - case 10: - lines = [[-21, 7, 4, 0x7A], [-5, 8, 0, 0xFC], [-4, 7, 0, 0x7B], [-3, 5, 0, 0x18], [-2, 2, 2, 0x0], [2, 5, 0, 0x19], [3, 6, 0, 0x36], [4, 7, 0, 0x7C], [5, 8, 0, 0xFD], [6, 2, 6, 0x1], [70, 5, 5, 0x1A], [102, 6, 5, 0x37], [134, 6, 6, 0x38], [198, 6, 7, 0x39], [326, 6, 8, 0x3A], [582, 6, 9, 0x3B], [1094, 6, 10, 0x3C], [2118, 7, 11, 0x7D], [-22, 8, 32, 0xFE, 'lower'], [4166, 8, 32, 0xFF], [2, 0x2]]; - break; - - case 11: - lines = [[1, 1, 0, 0x0], [2, 2, 1, 0x2], [4, 4, 0, 0xC], [5, 4, 1, 0xD], [7, 5, 1, 0x1C], [9, 5, 2, 0x1D], [13, 6, 2, 0x3C], [17, 7, 2, 0x7A], [21, 7, 3, 0x7B], [29, 7, 4, 0x7C], [45, 7, 5, 0x7D], [77, 7, 6, 0x7E], [141, 7, 32, 0x7F]]; - break; - - case 12: - lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 1, 0x6], [5, 5, 0, 0x1C], [6, 5, 1, 0x1D], [8, 6, 1, 0x3C], [10, 7, 0, 0x7A], [11, 7, 1, 0x7B], [13, 7, 2, 0x7C], [17, 7, 3, 0x7D], [25, 7, 4, 0x7E], [41, 8, 5, 0xFE], [73, 8, 32, 0xFF]]; - break; - - case 13: - lines = [[1, 1, 0, 0x0], [2, 3, 0, 0x4], [3, 4, 0, 0xC], [4, 5, 0, 0x1C], [5, 4, 1, 0xD], [7, 3, 3, 0x5], [15, 6, 1, 0x3A], [17, 6, 2, 0x3B], [21, 6, 3, 0x3C], [29, 6, 4, 0x3D], [45, 6, 5, 0x3E], [77, 7, 6, 0x7E], [141, 7, 32, 0x7F]]; - break; - - case 14: - lines = [[-2, 3, 0, 0x4], [-1, 3, 0, 0x5], [0, 1, 0, 0x0], [1, 3, 0, 0x6], [2, 3, 0, 0x7]]; - break; - - case 15: - lines = [[-24, 7, 4, 0x7C], [-8, 6, 2, 0x3C], [-4, 5, 1, 0x1C], [-2, 4, 0, 0xC], [-1, 3, 0, 0x4], [0, 1, 0, 0x0], [1, 3, 0, 0x5], [2, 4, 0, 0xD], [3, 5, 1, 0x1D], [5, 6, 2, 0x3D], [9, 7, 4, 0x7D], [-25, 7, 32, 0x7E, 'lower'], [25, 7, 32, 0x7F]]; - break; - - default: - throw new Jbig2Error("standard table B.".concat(number, " does not exist")); - } - - var length = lines.length, - i; - - for (i = 0; i < length; i++) { - lines[i] = new HuffmanLine(lines[i]); - } - - table = new HuffmanTable(lines, true); - standardTablesCache[number] = table; - return table; - } - - function Reader(data, start, end) { - this.data = data; - this.start = start; - this.end = end; - this.position = start; - this.shift = -1; - this.currentByte = 0; - } - - Reader.prototype = { - readBit: function readBit() { - if (this.shift < 0) { - if (this.position >= this.end) { - throw new Jbig2Error('end of data while reading bit'); - } - - this.currentByte = this.data[this.position++]; - this.shift = 7; - } - - var bit = this.currentByte >> this.shift & 1; - this.shift--; - return bit; - }, - readBits: function readBits(numBits) { - var result = 0, - i; - - for (i = numBits - 1; i >= 0; i--) { - result |= this.readBit() << i; - } - - return result; - }, - byteAlign: function byteAlign() { - this.shift = -1; - }, - next: function next() { - if (this.position >= this.end) { - return -1; - } - - return this.data[this.position++]; - } - }; - - function getCustomHuffmanTable(index, referredTo, customTables) { - var currentIndex = 0, - i, - ii = referredTo.length, - table; - - for (i = 0; i < ii; i++) { - table = customTables[referredTo[i]]; - - if (table) { - if (index === currentIndex) { - return table; - } - - currentIndex++; - } - } - - throw new Jbig2Error('can\'t find custom Huffman table'); - } - - function getTextRegionHuffmanTables(textRegion, referredTo, customTables, numberOfSymbols, reader) { - var codes = [], - i, - codeLength; - - for (i = 0; i <= 34; i++) { - codeLength = reader.readBits(4); - codes.push(new HuffmanLine([i, codeLength, 0, 0])); - } - - var runCodesTable = new HuffmanTable(codes, false); - codes.length = 0; - - for (i = 0; i < numberOfSymbols;) { - codeLength = runCodesTable.decode(reader); - - if (codeLength >= 32) { - var repeatedLength = void 0, - numberOfRepeats = void 0, - j = void 0; - - switch (codeLength) { - case 32: - if (i === 0) { - throw new Jbig2Error('no previous value in symbol ID table'); - } - - numberOfRepeats = reader.readBits(2) + 3; - repeatedLength = codes[i - 1].prefixLength; - break; - - case 33: - numberOfRepeats = reader.readBits(3) + 3; - repeatedLength = 0; - break; - - case 34: - numberOfRepeats = reader.readBits(7) + 11; - repeatedLength = 0; - break; - - default: - throw new Jbig2Error('invalid code length in symbol ID table'); - } - - for (j = 0; j < numberOfRepeats; j++) { - codes.push(new HuffmanLine([i, repeatedLength, 0, 0])); - i++; - } - } else { - codes.push(new HuffmanLine([i, codeLength, 0, 0])); - i++; - } - } - - reader.byteAlign(); - var symbolIDTable = new HuffmanTable(codes, false); - var customIndex = 0, - tableFirstS, - tableDeltaS, - tableDeltaT; - - switch (textRegion.huffmanFS) { - case 0: - case 1: - tableFirstS = getStandardTable(textRegion.huffmanFS + 6); - break; - - case 3: - tableFirstS = getCustomHuffmanTable(customIndex, referredTo, customTables); - customIndex++; - break; - - default: - throw new Jbig2Error('invalid Huffman FS selector'); - } - - switch (textRegion.huffmanDS) { - case 0: - case 1: - case 2: - tableDeltaS = getStandardTable(textRegion.huffmanDS + 8); - break; - - case 3: - tableDeltaS = getCustomHuffmanTable(customIndex, referredTo, customTables); - customIndex++; - break; - - default: - throw new Jbig2Error('invalid Huffman DS selector'); - } - - switch (textRegion.huffmanDT) { - case 0: - case 1: - case 2: - tableDeltaT = getStandardTable(textRegion.huffmanDT + 11); - break; - - case 3: - tableDeltaT = getCustomHuffmanTable(customIndex, referredTo, customTables); - customIndex++; - break; - - default: - throw new Jbig2Error('invalid Huffman DT selector'); - } - - if (textRegion.refinement) { - throw new Jbig2Error('refinement with Huffman is not supported'); - } - - return { - symbolIDTable: symbolIDTable, - tableFirstS: tableFirstS, - tableDeltaS: tableDeltaS, - tableDeltaT: tableDeltaT - }; - } - - function getSymbolDictionaryHuffmanTables(dictionary, referredTo, customTables) { - var customIndex = 0, - tableDeltaHeight, - tableDeltaWidth; - - switch (dictionary.huffmanDHSelector) { - case 0: - case 1: - tableDeltaHeight = getStandardTable(dictionary.huffmanDHSelector + 4); - break; - - case 3: - tableDeltaHeight = getCustomHuffmanTable(customIndex, referredTo, customTables); - customIndex++; - break; - - default: - throw new Jbig2Error('invalid Huffman DH selector'); - } - - switch (dictionary.huffmanDWSelector) { - case 0: - case 1: - tableDeltaWidth = getStandardTable(dictionary.huffmanDWSelector + 2); - break; - - case 3: - tableDeltaWidth = getCustomHuffmanTable(customIndex, referredTo, customTables); - customIndex++; - break; - - default: - throw new Jbig2Error('invalid Huffman DW selector'); - } - - var tableBitmapSize, tableAggregateInstances; - - if (dictionary.bitmapSizeSelector) { - tableBitmapSize = getCustomHuffmanTable(customIndex, referredTo, customTables); - customIndex++; - } else { - tableBitmapSize = getStandardTable(1); - } - - if (dictionary.aggregationInstancesSelector) { - tableAggregateInstances = getCustomHuffmanTable(customIndex, referredTo, customTables); - } else { - tableAggregateInstances = getStandardTable(1); - } - - return { - tableDeltaHeight: tableDeltaHeight, - tableDeltaWidth: tableDeltaWidth, - tableBitmapSize: tableBitmapSize, - tableAggregateInstances: tableAggregateInstances - }; - } - - function readUncompressedBitmap(reader, width, height) { - var bitmap = [], - x, - y, - row; - - for (y = 0; y < height; y++) { - row = new Uint8Array(width); - bitmap.push(row); - - for (x = 0; x < width; x++) { - row[x] = reader.readBit(); - } - - reader.byteAlign(); - } - - return bitmap; - } - - function decodeMMRBitmap(input, width, height, endOfBlock) { - var params = { - K: -1, - Columns: width, - Rows: height, - BlackIs1: true, - EndOfBlock: endOfBlock - }; - var decoder = new _ccitt.CCITTFaxDecoder(input, params); - var bitmap = [], - x, - y, - row, - currentByte, - shift, - eof = false; - - for (y = 0; y < height; y++) { - row = new Uint8Array(width); - bitmap.push(row); - shift = -1; - - for (x = 0; x < width; x++) { - if (shift < 0) { - currentByte = decoder.readNextChar(); - - if (currentByte === -1) { - currentByte = 0; - eof = true; - } - - shift = 7; - } - - row[x] = currentByte >> shift & 1; - shift--; - } - } - - if (endOfBlock && !eof) { - var lookForEOFLimit = 5; - - for (var i = 0; i < lookForEOFLimit; i++) { - if (decoder.readNextChar() === -1) { - break; - } - } - } - - return bitmap; - } - - function Jbig2Image() {} - - Jbig2Image.prototype = { - parseChunks: function parseChunks(chunks) { - return parseJbig2Chunks(chunks); - }, - parse: function parse(data) { - var _parseJbig = parseJbig2(data), - imgData = _parseJbig.imgData, - width = _parseJbig.width, - height = _parseJbig.height; - - this.width = width; - this.height = height; - return imgData; - } - }; - return Jbig2Image; - }(); - - exports.Jbig2Image = Jbig2Image; - - /***/ }), - /* 162 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.ArithmeticDecoder = void 0; - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - - var QeTable = [{ - qe: 0x5601, - nmps: 1, - nlps: 1, - switchFlag: 1 - }, { - qe: 0x3401, - nmps: 2, - nlps: 6, - switchFlag: 0 - }, { - qe: 0x1801, - nmps: 3, - nlps: 9, - switchFlag: 0 - }, { - qe: 0x0AC1, - nmps: 4, - nlps: 12, - switchFlag: 0 - }, { - qe: 0x0521, - nmps: 5, - nlps: 29, - switchFlag: 0 - }, { - qe: 0x0221, - nmps: 38, - nlps: 33, - switchFlag: 0 - }, { - qe: 0x5601, - nmps: 7, - nlps: 6, - switchFlag: 1 - }, { - qe: 0x5401, - nmps: 8, - nlps: 14, - switchFlag: 0 - }, { - qe: 0x4801, - nmps: 9, - nlps: 14, - switchFlag: 0 - }, { - qe: 0x3801, - nmps: 10, - nlps: 14, - switchFlag: 0 - }, { - qe: 0x3001, - nmps: 11, - nlps: 17, - switchFlag: 0 - }, { - qe: 0x2401, - nmps: 12, - nlps: 18, - switchFlag: 0 - }, { - qe: 0x1C01, - nmps: 13, - nlps: 20, - switchFlag: 0 - }, { - qe: 0x1601, - nmps: 29, - nlps: 21, - switchFlag: 0 - }, { - qe: 0x5601, - nmps: 15, - nlps: 14, - switchFlag: 1 - }, { - qe: 0x5401, - nmps: 16, - nlps: 14, - switchFlag: 0 - }, { - qe: 0x5101, - nmps: 17, - nlps: 15, - switchFlag: 0 - }, { - qe: 0x4801, - nmps: 18, - nlps: 16, - switchFlag: 0 - }, { - qe: 0x3801, - nmps: 19, - nlps: 17, - switchFlag: 0 - }, { - qe: 0x3401, - nmps: 20, - nlps: 18, - switchFlag: 0 - }, { - qe: 0x3001, - nmps: 21, - nlps: 19, - switchFlag: 0 - }, { - qe: 0x2801, - nmps: 22, - nlps: 19, - switchFlag: 0 - }, { - qe: 0x2401, - nmps: 23, - nlps: 20, - switchFlag: 0 - }, { - qe: 0x2201, - nmps: 24, - nlps: 21, - switchFlag: 0 - }, { - qe: 0x1C01, - nmps: 25, - nlps: 22, - switchFlag: 0 - }, { - qe: 0x1801, - nmps: 26, - nlps: 23, - switchFlag: 0 - }, { - qe: 0x1601, - nmps: 27, - nlps: 24, - switchFlag: 0 - }, { - qe: 0x1401, - nmps: 28, - nlps: 25, - switchFlag: 0 - }, { - qe: 0x1201, - nmps: 29, - nlps: 26, - switchFlag: 0 - }, { - qe: 0x1101, - nmps: 30, - nlps: 27, - switchFlag: 0 - }, { - qe: 0x0AC1, - nmps: 31, - nlps: 28, - switchFlag: 0 - }, { - qe: 0x09C1, - nmps: 32, - nlps: 29, - switchFlag: 0 - }, { - qe: 0x08A1, - nmps: 33, - nlps: 30, - switchFlag: 0 - }, { - qe: 0x0521, - nmps: 34, - nlps: 31, - switchFlag: 0 - }, { - qe: 0x0441, - nmps: 35, - nlps: 32, - switchFlag: 0 - }, { - qe: 0x02A1, - nmps: 36, - nlps: 33, - switchFlag: 0 - }, { - qe: 0x0221, - nmps: 37, - nlps: 34, - switchFlag: 0 - }, { - qe: 0x0141, - nmps: 38, - nlps: 35, - switchFlag: 0 - }, { - qe: 0x0111, - nmps: 39, - nlps: 36, - switchFlag: 0 - }, { - qe: 0x0085, - nmps: 40, - nlps: 37, - switchFlag: 0 - }, { - qe: 0x0049, - nmps: 41, - nlps: 38, - switchFlag: 0 - }, { - qe: 0x0025, - nmps: 42, - nlps: 39, - switchFlag: 0 - }, { - qe: 0x0015, - nmps: 43, - nlps: 40, - switchFlag: 0 - }, { - qe: 0x0009, - nmps: 44, - nlps: 41, - switchFlag: 0 - }, { - qe: 0x0005, - nmps: 45, - nlps: 42, - switchFlag: 0 - }, { - qe: 0x0001, - nmps: 45, - nlps: 43, - switchFlag: 0 - }, { - qe: 0x5601, - nmps: 46, - nlps: 46, - switchFlag: 0 - }]; - - var ArithmeticDecoder = - /*#__PURE__*/ - function () { - function ArithmeticDecoder(data, start, end) { - _classCallCheck(this, ArithmeticDecoder); - - this.data = data; - this.bp = start; - this.dataEnd = end; - this.chigh = data[start]; - this.clow = 0; - this.byteIn(); - this.chigh = this.chigh << 7 & 0xFFFF | this.clow >> 9 & 0x7F; - this.clow = this.clow << 7 & 0xFFFF; - this.ct -= 7; - this.a = 0x8000; - } - - _createClass(ArithmeticDecoder, [{ - key: "byteIn", - value: function byteIn() { - var data = this.data; - var bp = this.bp; - - if (data[bp] === 0xFF) { - if (data[bp + 1] > 0x8F) { - this.clow += 0xFF00; - this.ct = 8; - } else { - bp++; - this.clow += data[bp] << 9; - this.ct = 7; - this.bp = bp; - } - } else { - bp++; - this.clow += bp < this.dataEnd ? data[bp] << 8 : 0xFF00; - this.ct = 8; - this.bp = bp; - } - - if (this.clow > 0xFFFF) { - this.chigh += this.clow >> 16; - this.clow &= 0xFFFF; - } - } - }, { - key: "readBit", - value: function readBit(contexts, pos) { - var cx_index = contexts[pos] >> 1, - cx_mps = contexts[pos] & 1; - var qeTableIcx = QeTable[cx_index]; - var qeIcx = qeTableIcx.qe; - var d; - var a = this.a - qeIcx; - - if (this.chigh < qeIcx) { - if (a < qeIcx) { - a = qeIcx; - d = cx_mps; - cx_index = qeTableIcx.nmps; - } else { - a = qeIcx; - d = 1 ^ cx_mps; - - if (qeTableIcx.switchFlag === 1) { - cx_mps = d; - } - - cx_index = qeTableIcx.nlps; - } - } else { - this.chigh -= qeIcx; - - if ((a & 0x8000) !== 0) { - this.a = a; - return cx_mps; - } - - if (a < qeIcx) { - d = 1 ^ cx_mps; - - if (qeTableIcx.switchFlag === 1) { - cx_mps = d; - } - - cx_index = qeTableIcx.nlps; - } else { - d = cx_mps; - cx_index = qeTableIcx.nmps; - } - } - - do { - if (this.ct === 0) { - this.byteIn(); - } - - a <<= 1; - this.chigh = this.chigh << 1 & 0xFFFF | this.clow >> 15 & 1; - this.clow = this.clow << 1 & 0xFFFF; - this.ct--; - } while ((a & 0x8000) === 0); - - this.a = a; - contexts[pos] = cx_index << 1 | cx_mps; - return d; - } - }]); - - return ArithmeticDecoder; - }(); - - exports.ArithmeticDecoder = ArithmeticDecoder; - - /***/ }), - /* 163 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.JpegStream = void 0; - - var _util = __w_extracthighlights_require__(6); - - var _stream = __w_extracthighlights_require__(157); - - var _primitives = __w_extracthighlights_require__(155); - - var _jpg = __w_extracthighlights_require__(164); - - var JpegStream = function JpegStreamClosure() { - function JpegStream(stream, maybeLength, dict, params) { - var ch; - - while ((ch = stream.getByte()) !== -1) { - if (ch === 0xFF) { - stream.skip(-1); - break; - } - } - - this.stream = stream; - this.maybeLength = maybeLength; - this.dict = dict; - this.params = params; - - _stream.DecodeStream.call(this, maybeLength); - } - - JpegStream.prototype = Object.create(_stream.DecodeStream.prototype); - Object.defineProperty(JpegStream.prototype, 'bytes', { - get: function JpegStream_bytes() { - return (0, _util.shadow)(this, 'bytes', this.stream.getBytes(this.maybeLength)); - }, - configurable: true - }); - - JpegStream.prototype.ensureBuffer = function (requested) {}; - - JpegStream.prototype.readBlock = function () { - if (this.eof) { - return; - } - - var jpegOptions = { - decodeTransform: undefined, - colorTransform: undefined - }; - var decodeArr = this.dict.getArray('Decode', 'D'); - - if (this.forceRGB && Array.isArray(decodeArr)) { - var bitsPerComponent = this.dict.get('BitsPerComponent') || 8; - var decodeArrLength = decodeArr.length; - var transform = new Int32Array(decodeArrLength); - var transformNeeded = false; - var maxValue = (1 << bitsPerComponent) - 1; - - for (var i = 0; i < decodeArrLength; i += 2) { - transform[i] = (decodeArr[i + 1] - decodeArr[i]) * 256 | 0; - transform[i + 1] = decodeArr[i] * maxValue | 0; - - if (transform[i] !== 256 || transform[i + 1] !== 0) { - transformNeeded = true; - } - } - - if (transformNeeded) { - jpegOptions.decodeTransform = transform; - } - } - - if ((0, _primitives.isDict)(this.params)) { - var colorTransform = this.params.get('ColorTransform'); - - if (Number.isInteger(colorTransform)) { - jpegOptions.colorTransform = colorTransform; - } - } - - var jpegImage = new _jpg.JpegImage(jpegOptions); - jpegImage.parse(this.bytes); - var data = jpegImage.getData({ - width: this.drawWidth, - height: this.drawHeight, - forceRGB: this.forceRGB, - isSourcePDF: true - }); - this.buffer = data; - this.bufferLength = data.length; - this.eof = true; - }; - - JpegStream.prototype.getIR = function () { - var forceDataSchema = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - return (0, _util.createObjectURL)(this.bytes, 'image/jpeg', forceDataSchema); - }; - - return JpegStream; - }(); - - exports.JpegStream = JpegStream; - - /***/ }), - /* 164 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.JpegImage = void 0; - - var _util = __w_extracthighlights_require__(6); - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - var JpegError = function JpegErrorClosure() { - function JpegError(msg) { - this.message = 'JPEG error: ' + msg; - } - - JpegError.prototype = new Error(); - JpegError.prototype.name = 'JpegError'; - JpegError.constructor = JpegError; - return JpegError; - }(); - - var DNLMarkerError = function DNLMarkerErrorClosure() { - function DNLMarkerError(message, scanLines) { - this.message = message; - this.scanLines = scanLines; - } - - DNLMarkerError.prototype = new Error(); - DNLMarkerError.prototype.name = 'DNLMarkerError'; - DNLMarkerError.constructor = DNLMarkerError; - return DNLMarkerError; - }(); - - var EOIMarkerError = function EOIMarkerErrorClosure() { - function EOIMarkerError(message) { - this.message = message; - } - - EOIMarkerError.prototype = new Error(); - EOIMarkerError.prototype.name = 'EOIMarkerError'; - EOIMarkerError.constructor = EOIMarkerError; - return EOIMarkerError; - }(); - - var JpegImage = function JpegImageClosure() { - var dctZigZag = new Uint8Array([0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63]); - var dctCos1 = 4017; - var dctSin1 = 799; - var dctCos3 = 3406; - var dctSin3 = 2276; - var dctCos6 = 1567; - var dctSin6 = 3784; - var dctSqrt2 = 5793; - var dctSqrt1d2 = 2896; - - function JpegImage() { - var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - _ref$decodeTransform = _ref.decodeTransform, - decodeTransform = _ref$decodeTransform === void 0 ? null : _ref$decodeTransform, - _ref$colorTransform = _ref.colorTransform, - colorTransform = _ref$colorTransform === void 0 ? -1 : _ref$colorTransform; - - this._decodeTransform = decodeTransform; - this._colorTransform = colorTransform; - } - - function buildHuffmanTable(codeLengths, values) { - var k = 0, - code = [], - i, - j, - length = 16; - - while (length > 0 && !codeLengths[length - 1]) { - length--; - } - - code.push({ - children: [], - index: 0 - }); - var p = code[0], - q; - - for (i = 0; i < length; i++) { - for (j = 0; j < codeLengths[i]; j++) { - p = code.pop(); - p.children[p.index] = values[k]; - - while (p.index > 0) { - p = code.pop(); - } - - p.index++; - code.push(p); - - while (code.length <= i) { - code.push(q = { - children: [], - index: 0 - }); - p.children[p.index] = q.children; - p = q; - } - - k++; - } - - if (i + 1 < length) { - code.push(q = { - children: [], - index: 0 - }); - p.children[p.index] = q.children; - p = q; - } - } - - return code[0].children; - } - - function getBlockBufferOffset(component, row, col) { - return 64 * ((component.blocksPerLine + 1) * row + col); - } - - function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive) { - var parseDNLMarker = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : false; - var mcusPerLine = frame.mcusPerLine; - var progressive = frame.progressive; - var startOffset = offset, - bitsData = 0, - bitsCount = 0; - - function readBit() { - if (bitsCount > 0) { - bitsCount--; - return bitsData >> bitsCount & 1; - } - - bitsData = data[offset++]; - - if (bitsData === 0xFF) { - var nextByte = data[offset++]; - - if (nextByte) { - if (nextByte === 0xDC && parseDNLMarker) { - offset += 2; - var scanLines = data[offset++] << 8 | data[offset++]; - - if (scanLines > 0 && scanLines !== frame.scanLines) { - throw new DNLMarkerError('Found DNL marker (0xFFDC) while parsing scan data', scanLines); - } - } else if (nextByte === 0xD9) { - throw new EOIMarkerError('Found EOI marker (0xFFD9) while parsing scan data'); - } - - throw new JpegError("unexpected marker ".concat((bitsData << 8 | nextByte).toString(16))); - } - } - - bitsCount = 7; - return bitsData >>> 7; - } - - function decodeHuffman(tree) { - var node = tree; - - while (true) { - node = node[readBit()]; - - if (typeof node === 'number') { - return node; - } - - if (_typeof(node) !== 'object') { - throw new JpegError('invalid huffman sequence'); - } - } - } - - function receive(length) { - var n = 0; - - while (length > 0) { - n = n << 1 | readBit(); - length--; - } - - return n; - } - - function receiveAndExtend(length) { - if (length === 1) { - return readBit() === 1 ? 1 : -1; - } - - var n = receive(length); - - if (n >= 1 << length - 1) { - return n; - } - - return n + (-1 << length) + 1; - } - - function decodeBaseline(component, offset) { - var t = decodeHuffman(component.huffmanTableDC); - var diff = t === 0 ? 0 : receiveAndExtend(t); - component.blockData[offset] = component.pred += diff; - var k = 1; - - while (k < 64) { - var rs = decodeHuffman(component.huffmanTableAC); - var s = rs & 15, - r = rs >> 4; - - if (s === 0) { - if (r < 15) { - break; - } - - k += 16; - continue; - } - - k += r; - var z = dctZigZag[k]; - component.blockData[offset + z] = receiveAndExtend(s); - k++; - } - } - - function decodeDCFirst(component, offset) { - var t = decodeHuffman(component.huffmanTableDC); - var diff = t === 0 ? 0 : receiveAndExtend(t) << successive; - component.blockData[offset] = component.pred += diff; - } - - function decodeDCSuccessive(component, offset) { - component.blockData[offset] |= readBit() << successive; - } - - var eobrun = 0; - - function decodeACFirst(component, offset) { - if (eobrun > 0) { - eobrun--; - return; - } - - var k = spectralStart, - e = spectralEnd; - - while (k <= e) { - var rs = decodeHuffman(component.huffmanTableAC); - var s = rs & 15, - r = rs >> 4; - - if (s === 0) { - if (r < 15) { - eobrun = receive(r) + (1 << r) - 1; - break; - } - - k += 16; - continue; - } - - k += r; - var z = dctZigZag[k]; - component.blockData[offset + z] = receiveAndExtend(s) * (1 << successive); - k++; - } - } - - var successiveACState = 0, - successiveACNextValue; - - function decodeACSuccessive(component, offset) { - var k = spectralStart; - var e = spectralEnd; - var r = 0; - var s; - var rs; - - while (k <= e) { - var offsetZ = offset + dctZigZag[k]; - var sign = component.blockData[offsetZ] < 0 ? -1 : 1; - - switch (successiveACState) { - case 0: - rs = decodeHuffman(component.huffmanTableAC); - s = rs & 15; - r = rs >> 4; - - if (s === 0) { - if (r < 15) { - eobrun = receive(r) + (1 << r); - successiveACState = 4; - } else { - r = 16; - successiveACState = 1; - } - } else { - if (s !== 1) { - throw new JpegError('invalid ACn encoding'); - } - - successiveACNextValue = receiveAndExtend(s); - successiveACState = r ? 2 : 3; - } - - continue; - - case 1: - case 2: - if (component.blockData[offsetZ]) { - component.blockData[offsetZ] += sign * (readBit() << successive); - } else { - r--; - - if (r === 0) { - successiveACState = successiveACState === 2 ? 3 : 0; - } - } - - break; - - case 3: - if (component.blockData[offsetZ]) { - component.blockData[offsetZ] += sign * (readBit() << successive); - } else { - component.blockData[offsetZ] = successiveACNextValue << successive; - successiveACState = 0; - } - - break; - - case 4: - if (component.blockData[offsetZ]) { - component.blockData[offsetZ] += sign * (readBit() << successive); - } - - break; - } - - k++; - } - - if (successiveACState === 4) { - eobrun--; - - if (eobrun === 0) { - successiveACState = 0; - } - } - } - - function decodeMcu(component, decode, mcu, row, col) { - var mcuRow = mcu / mcusPerLine | 0; - var mcuCol = mcu % mcusPerLine; - var blockRow = mcuRow * component.v + row; - var blockCol = mcuCol * component.h + col; - var offset = getBlockBufferOffset(component, blockRow, blockCol); - decode(component, offset); - } - - function decodeBlock(component, decode, mcu) { - var blockRow = mcu / component.blocksPerLine | 0; - var blockCol = mcu % component.blocksPerLine; - var offset = getBlockBufferOffset(component, blockRow, blockCol); - decode(component, offset); - } - - var componentsLength = components.length; - var component, i, j, k, n; - var decodeFn; - - if (progressive) { - if (spectralStart === 0) { - decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive; - } else { - decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive; - } - } else { - decodeFn = decodeBaseline; - } - - var mcu = 0, - fileMarker; - var mcuExpected; - - if (componentsLength === 1) { - mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn; - } else { - mcuExpected = mcusPerLine * frame.mcusPerColumn; - } - - var h, v; - - while (mcu < mcuExpected) { - var mcuToRead = resetInterval ? Math.min(mcuExpected - mcu, resetInterval) : mcuExpected; - - for (i = 0; i < componentsLength; i++) { - components[i].pred = 0; - } - - eobrun = 0; - - if (componentsLength === 1) { - component = components[0]; - - for (n = 0; n < mcuToRead; n++) { - decodeBlock(component, decodeFn, mcu); - mcu++; - } - } else { - for (n = 0; n < mcuToRead; n++) { - for (i = 0; i < componentsLength; i++) { - component = components[i]; - h = component.h; - v = component.v; - - for (j = 0; j < v; j++) { - for (k = 0; k < h; k++) { - decodeMcu(component, decodeFn, mcu, j, k); - } - } - } - - mcu++; - } - } - - bitsCount = 0; - fileMarker = findNextFileMarker(data, offset); - - if (fileMarker && fileMarker.invalid) { - (0, _util.warn)('decodeScan - unexpected MCU data, current marker is: ' + fileMarker.invalid); - offset = fileMarker.offset; - } - - var marker = fileMarker && fileMarker.marker; - - if (!marker || marker <= 0xFF00) { - throw new JpegError('marker was not found'); - } - - if (marker >= 0xFFD0 && marker <= 0xFFD7) { - offset += 2; - } else { - break; - } - } - - fileMarker = findNextFileMarker(data, offset); - - if (fileMarker && fileMarker.invalid) { - (0, _util.warn)('decodeScan - unexpected Scan data, current marker is: ' + fileMarker.invalid); - offset = fileMarker.offset; - } - - return offset - startOffset; - } - - function quantizeAndInverse(component, blockBufferOffset, p) { - var qt = component.quantizationTable, - blockData = component.blockData; - var v0, v1, v2, v3, v4, v5, v6, v7; - var p0, p1, p2, p3, p4, p5, p6, p7; - var t; - - if (!qt) { - throw new JpegError('missing required Quantization Table.'); - } - - for (var row = 0; row < 64; row += 8) { - p0 = blockData[blockBufferOffset + row]; - p1 = blockData[blockBufferOffset + row + 1]; - p2 = blockData[blockBufferOffset + row + 2]; - p3 = blockData[blockBufferOffset + row + 3]; - p4 = blockData[blockBufferOffset + row + 4]; - p5 = blockData[blockBufferOffset + row + 5]; - p6 = blockData[blockBufferOffset + row + 6]; - p7 = blockData[blockBufferOffset + row + 7]; - p0 *= qt[row]; - - if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) { - t = dctSqrt2 * p0 + 512 >> 10; - p[row] = t; - p[row + 1] = t; - p[row + 2] = t; - p[row + 3] = t; - p[row + 4] = t; - p[row + 5] = t; - p[row + 6] = t; - p[row + 7] = t; - continue; - } - - p1 *= qt[row + 1]; - p2 *= qt[row + 2]; - p3 *= qt[row + 3]; - p4 *= qt[row + 4]; - p5 *= qt[row + 5]; - p6 *= qt[row + 6]; - p7 *= qt[row + 7]; - v0 = dctSqrt2 * p0 + 128 >> 8; - v1 = dctSqrt2 * p4 + 128 >> 8; - v2 = p2; - v3 = p6; - v4 = dctSqrt1d2 * (p1 - p7) + 128 >> 8; - v7 = dctSqrt1d2 * (p1 + p7) + 128 >> 8; - v5 = p3 << 4; - v6 = p5 << 4; - v0 = v0 + v1 + 1 >> 1; - v1 = v0 - v1; - t = v2 * dctSin6 + v3 * dctCos6 + 128 >> 8; - v2 = v2 * dctCos6 - v3 * dctSin6 + 128 >> 8; - v3 = t; - v4 = v4 + v6 + 1 >> 1; - v6 = v4 - v6; - v7 = v7 + v5 + 1 >> 1; - v5 = v7 - v5; - v0 = v0 + v3 + 1 >> 1; - v3 = v0 - v3; - v1 = v1 + v2 + 1 >> 1; - v2 = v1 - v2; - t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12; - v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12; - v7 = t; - t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12; - v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12; - v6 = t; - p[row] = v0 + v7; - p[row + 7] = v0 - v7; - p[row + 1] = v1 + v6; - p[row + 6] = v1 - v6; - p[row + 2] = v2 + v5; - p[row + 5] = v2 - v5; - p[row + 3] = v3 + v4; - p[row + 4] = v3 - v4; - } - - for (var col = 0; col < 8; ++col) { - p0 = p[col]; - p1 = p[col + 8]; - p2 = p[col + 16]; - p3 = p[col + 24]; - p4 = p[col + 32]; - p5 = p[col + 40]; - p6 = p[col + 48]; - p7 = p[col + 56]; - - if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) { - t = dctSqrt2 * p0 + 8192 >> 14; - t = t < -2040 ? 0 : t >= 2024 ? 255 : t + 2056 >> 4; - blockData[blockBufferOffset + col] = t; - blockData[blockBufferOffset + col + 8] = t; - blockData[blockBufferOffset + col + 16] = t; - blockData[blockBufferOffset + col + 24] = t; - blockData[blockBufferOffset + col + 32] = t; - blockData[blockBufferOffset + col + 40] = t; - blockData[blockBufferOffset + col + 48] = t; - blockData[blockBufferOffset + col + 56] = t; - continue; - } - - v0 = dctSqrt2 * p0 + 2048 >> 12; - v1 = dctSqrt2 * p4 + 2048 >> 12; - v2 = p2; - v3 = p6; - v4 = dctSqrt1d2 * (p1 - p7) + 2048 >> 12; - v7 = dctSqrt1d2 * (p1 + p7) + 2048 >> 12; - v5 = p3; - v6 = p5; - v0 = (v0 + v1 + 1 >> 1) + 4112; - v1 = v0 - v1; - t = v2 * dctSin6 + v3 * dctCos6 + 2048 >> 12; - v2 = v2 * dctCos6 - v3 * dctSin6 + 2048 >> 12; - v3 = t; - v4 = v4 + v6 + 1 >> 1; - v6 = v4 - v6; - v7 = v7 + v5 + 1 >> 1; - v5 = v7 - v5; - v0 = v0 + v3 + 1 >> 1; - v3 = v0 - v3; - v1 = v1 + v2 + 1 >> 1; - v2 = v1 - v2; - t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12; - v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12; - v7 = t; - t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12; - v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12; - v6 = t; - p0 = v0 + v7; - p7 = v0 - v7; - p1 = v1 + v6; - p6 = v1 - v6; - p2 = v2 + v5; - p5 = v2 - v5; - p3 = v3 + v4; - p4 = v3 - v4; - p0 = p0 < 16 ? 0 : p0 >= 4080 ? 255 : p0 >> 4; - p1 = p1 < 16 ? 0 : p1 >= 4080 ? 255 : p1 >> 4; - p2 = p2 < 16 ? 0 : p2 >= 4080 ? 255 : p2 >> 4; - p3 = p3 < 16 ? 0 : p3 >= 4080 ? 255 : p3 >> 4; - p4 = p4 < 16 ? 0 : p4 >= 4080 ? 255 : p4 >> 4; - p5 = p5 < 16 ? 0 : p5 >= 4080 ? 255 : p5 >> 4; - p6 = p6 < 16 ? 0 : p6 >= 4080 ? 255 : p6 >> 4; - p7 = p7 < 16 ? 0 : p7 >= 4080 ? 255 : p7 >> 4; - blockData[blockBufferOffset + col] = p0; - blockData[blockBufferOffset + col + 8] = p1; - blockData[blockBufferOffset + col + 16] = p2; - blockData[blockBufferOffset + col + 24] = p3; - blockData[blockBufferOffset + col + 32] = p4; - blockData[blockBufferOffset + col + 40] = p5; - blockData[blockBufferOffset + col + 48] = p6; - blockData[blockBufferOffset + col + 56] = p7; - } - } - - function buildComponentData(frame, component) { - var blocksPerLine = component.blocksPerLine; - var blocksPerColumn = component.blocksPerColumn; - var computationBuffer = new Int16Array(64); - - for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) { - for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) { - var offset = getBlockBufferOffset(component, blockRow, blockCol); - quantizeAndInverse(component, offset, computationBuffer); - } - } - - return component.blockData; - } - - function findNextFileMarker(data, currentPos) { - var startPos = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : currentPos; - - function peekUint16(pos) { - return data[pos] << 8 | data[pos + 1]; - } - - var maxPos = data.length - 1; - var newPos = startPos < currentPos ? startPos : currentPos; - - if (currentPos >= maxPos) { - return null; - } - - var currentMarker = peekUint16(currentPos); - - if (currentMarker >= 0xFFC0 && currentMarker <= 0xFFFE) { - return { - invalid: null, - marker: currentMarker, - offset: currentPos - }; - } - - var newMarker = peekUint16(newPos); - - while (!(newMarker >= 0xFFC0 && newMarker <= 0xFFFE)) { - if (++newPos >= maxPos) { - return null; - } - - newMarker = peekUint16(newPos); - } - - return { - invalid: currentMarker.toString(16), - marker: newMarker, - offset: newPos - }; - } - - JpegImage.prototype = { - parse: function parse(data) { - var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - _ref2$dnlScanLines = _ref2.dnlScanLines, - dnlScanLines = _ref2$dnlScanLines === void 0 ? null : _ref2$dnlScanLines; - - function readUint16() { - var value = data[offset] << 8 | data[offset + 1]; - offset += 2; - return value; - } - - function readDataBlock() { - var length = readUint16(); - var endOffset = offset + length - 2; - var fileMarker = findNextFileMarker(data, endOffset, offset); - - if (fileMarker && fileMarker.invalid) { - (0, _util.warn)('readDataBlock - incorrect length, current marker is: ' + fileMarker.invalid); - endOffset = fileMarker.offset; - } - - var array = data.subarray(offset, endOffset); - offset += array.length; - return array; - } - - function prepareComponents(frame) { - var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH); - var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV); - - for (var i = 0; i < frame.components.length; i++) { - component = frame.components[i]; - var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / frame.maxH); - var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / frame.maxV); - var blocksPerLineForMcu = mcusPerLine * component.h; - var blocksPerColumnForMcu = mcusPerColumn * component.v; - var blocksBufferSize = 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1); - component.blockData = new Int16Array(blocksBufferSize); - component.blocksPerLine = blocksPerLine; - component.blocksPerColumn = blocksPerColumn; - } - - frame.mcusPerLine = mcusPerLine; - frame.mcusPerColumn = mcusPerColumn; - } - - var offset = 0; - var jfif = null; - var adobe = null; - var frame, resetInterval; - var numSOSMarkers = 0; - var quantizationTables = []; - var huffmanTablesAC = [], - huffmanTablesDC = []; - var fileMarker = readUint16(); - - if (fileMarker !== 0xFFD8) { - throw new JpegError('SOI not found'); - } - - fileMarker = readUint16(); - - markerLoop: while (fileMarker !== 0xFFD9) { - var i, j, l; - - switch (fileMarker) { - case 0xFFE0: - case 0xFFE1: - case 0xFFE2: - case 0xFFE3: - case 0xFFE4: - case 0xFFE5: - case 0xFFE6: - case 0xFFE7: - case 0xFFE8: - case 0xFFE9: - case 0xFFEA: - case 0xFFEB: - case 0xFFEC: - case 0xFFED: - case 0xFFEE: - case 0xFFEF: - case 0xFFFE: - var appData = readDataBlock(); - - if (fileMarker === 0xFFE0) { - if (appData[0] === 0x4A && appData[1] === 0x46 && appData[2] === 0x49 && appData[3] === 0x46 && appData[4] === 0) { - jfif = { - version: { - major: appData[5], - minor: appData[6] - }, - densityUnits: appData[7], - xDensity: appData[8] << 8 | appData[9], - yDensity: appData[10] << 8 | appData[11], - thumbWidth: appData[12], - thumbHeight: appData[13], - thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13]) - }; - } - } - - if (fileMarker === 0xFFEE) { - if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6F && appData[3] === 0x62 && appData[4] === 0x65) { - adobe = { - version: appData[5] << 8 | appData[6], - flags0: appData[7] << 8 | appData[8], - flags1: appData[9] << 8 | appData[10], - transformCode: appData[11] - }; - } - } - - break; - - case 0xFFDB: - var quantizationTablesLength = readUint16(); - var quantizationTablesEnd = quantizationTablesLength + offset - 2; - var z; - - while (offset < quantizationTablesEnd) { - var quantizationTableSpec = data[offset++]; - var tableData = new Uint16Array(64); - - if (quantizationTableSpec >> 4 === 0) { - for (j = 0; j < 64; j++) { - z = dctZigZag[j]; - tableData[z] = data[offset++]; - } - } else if (quantizationTableSpec >> 4 === 1) { - for (j = 0; j < 64; j++) { - z = dctZigZag[j]; - tableData[z] = readUint16(); - } - } else { - throw new JpegError('DQT - invalid table spec'); - } - - quantizationTables[quantizationTableSpec & 15] = tableData; - } - - break; - - case 0xFFC0: - case 0xFFC1: - case 0xFFC2: - if (frame) { - throw new JpegError('Only single frame JPEGs supported'); - } - - readUint16(); - frame = {}; - frame.extended = fileMarker === 0xFFC1; - frame.progressive = fileMarker === 0xFFC2; - frame.precision = data[offset++]; - var sofScanLines = readUint16(); - frame.scanLines = dnlScanLines || sofScanLines; - frame.samplesPerLine = readUint16(); - frame.components = []; - frame.componentIds = {}; - var componentsCount = data[offset++], - componentId; - var maxH = 0, - maxV = 0; - - for (i = 0; i < componentsCount; i++) { - componentId = data[offset]; - var h = data[offset + 1] >> 4; - var v = data[offset + 1] & 15; - - if (maxH < h) { - maxH = h; - } - - if (maxV < v) { - maxV = v; - } - - var qId = data[offset + 2]; - l = frame.components.push({ - h: h, - v: v, - quantizationId: qId, - quantizationTable: null - }); - frame.componentIds[componentId] = l - 1; - offset += 3; - } - - frame.maxH = maxH; - frame.maxV = maxV; - prepareComponents(frame); - break; - - case 0xFFC4: - var huffmanLength = readUint16(); - - for (i = 2; i < huffmanLength;) { - var huffmanTableSpec = data[offset++]; - var codeLengths = new Uint8Array(16); - var codeLengthSum = 0; - - for (j = 0; j < 16; j++, offset++) { - codeLengthSum += codeLengths[j] = data[offset]; - } - - var huffmanValues = new Uint8Array(codeLengthSum); - - for (j = 0; j < codeLengthSum; j++, offset++) { - huffmanValues[j] = data[offset]; - } - - i += 17 + codeLengthSum; - (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] = buildHuffmanTable(codeLengths, huffmanValues); - } - - break; - - case 0xFFDD: - readUint16(); - resetInterval = readUint16(); - break; - - case 0xFFDA: - var parseDNLMarker = ++numSOSMarkers === 1 && !dnlScanLines; - readUint16(); - var selectorsCount = data[offset++]; - var components = [], - component; - - for (i = 0; i < selectorsCount; i++) { - var componentIndex = frame.componentIds[data[offset++]]; - component = frame.components[componentIndex]; - var tableSpec = data[offset++]; - component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4]; - component.huffmanTableAC = huffmanTablesAC[tableSpec & 15]; - components.push(component); - } - - var spectralStart = data[offset++]; - var spectralEnd = data[offset++]; - var successiveApproximation = data[offset++]; - - try { - var processed = decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successiveApproximation >> 4, successiveApproximation & 15, parseDNLMarker); - offset += processed; - } catch (ex) { - if (ex instanceof DNLMarkerError) { - (0, _util.warn)("".concat(ex.message, " -- attempting to re-parse the JPEG image.")); - return this.parse(data, { - dnlScanLines: ex.scanLines - }); - } else if (ex instanceof EOIMarkerError) { - (0, _util.warn)("".concat(ex.message, " -- ignoring the rest of the image data.")); - break markerLoop; - } - - throw ex; - } - - break; - - case 0xFFDC: - offset += 4; - break; - - case 0xFFFF: - if (data[offset] !== 0xFF) { - offset--; - } - - break; - - default: - if (data[offset - 3] === 0xFF && data[offset - 2] >= 0xC0 && data[offset - 2] <= 0xFE) { - offset -= 3; - break; - } - - var nextFileMarker = findNextFileMarker(data, offset - 2); - - if (nextFileMarker && nextFileMarker.invalid) { - (0, _util.warn)('JpegImage.parse - unexpected data, current marker is: ' + nextFileMarker.invalid); - offset = nextFileMarker.offset; - break; - } - - throw new JpegError('unknown marker ' + fileMarker.toString(16)); - } - - fileMarker = readUint16(); - } - - this.width = frame.samplesPerLine; - this.height = frame.scanLines; - this.jfif = jfif; - this.adobe = adobe; - this.components = []; - - for (i = 0; i < frame.components.length; i++) { - component = frame.components[i]; - var quantizationTable = quantizationTables[component.quantizationId]; - - if (quantizationTable) { - component.quantizationTable = quantizationTable; - } - - this.components.push({ - output: buildComponentData(frame, component), - scaleX: component.h / frame.maxH, - scaleY: component.v / frame.maxV, - blocksPerLine: component.blocksPerLine, - blocksPerColumn: component.blocksPerColumn - }); - } - - this.numComponents = this.components.length; - }, - _getLinearizedBlockData: function _getLinearizedBlockData(width, height) { - var isSourcePDF = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - var scaleX = this.width / width, - scaleY = this.height / height; - var component, componentScaleX, componentScaleY, blocksPerScanline; - var x, y, i, j, k; - var index; - var offset = 0; - var output; - var numComponents = this.components.length; - var dataLength = width * height * numComponents; - var data = new Uint8ClampedArray(dataLength); - var xScaleBlockOffset = new Uint32Array(width); - var mask3LSB = 0xfffffff8; - - for (i = 0; i < numComponents; i++) { - component = this.components[i]; - componentScaleX = component.scaleX * scaleX; - componentScaleY = component.scaleY * scaleY; - offset = i; - output = component.output; - blocksPerScanline = component.blocksPerLine + 1 << 3; - - for (x = 0; x < width; x++) { - j = 0 | x * componentScaleX; - xScaleBlockOffset[x] = (j & mask3LSB) << 3 | j & 7; - } - - for (y = 0; y < height; y++) { - j = 0 | y * componentScaleY; - index = blocksPerScanline * (j & mask3LSB) | (j & 7) << 3; - - for (x = 0; x < width; x++) { - data[offset] = output[index + xScaleBlockOffset[x]]; - offset += numComponents; - } - } - } - - var transform = this._decodeTransform; - - if (!isSourcePDF && numComponents === 4 && !transform) { - transform = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255]); - } - - if (transform) { - for (i = 0; i < dataLength;) { - for (j = 0, k = 0; j < numComponents; j++, i++, k += 2) { - data[i] = (data[i] * transform[k] >> 8) + transform[k + 1]; - } - } - } - - return data; - }, - - get _isColorConversionNeeded() { - if (this.adobe) { - return !!this.adobe.transformCode; - } - - if (this.numComponents === 3) { - if (this._colorTransform === 0) { - return false; - } - - return true; - } - - if (this._colorTransform === 1) { - return true; - } - - return false; - }, - - _convertYccToRgb: function convertYccToRgb(data) { - var Y, Cb, Cr; - - for (var i = 0, length = data.length; i < length; i += 3) { - Y = data[i]; - Cb = data[i + 1]; - Cr = data[i + 2]; - data[i] = Y - 179.456 + 1.402 * Cr; - data[i + 1] = Y + 135.459 - 0.344 * Cb - 0.714 * Cr; - data[i + 2] = Y - 226.816 + 1.772 * Cb; - } - - return data; - }, - _convertYcckToRgb: function convertYcckToRgb(data) { - var Y, Cb, Cr, k; - var offset = 0; - - for (var i = 0, length = data.length; i < length; i += 4) { - Y = data[i]; - Cb = data[i + 1]; - Cr = data[i + 2]; - k = data[i + 3]; - data[offset++] = -122.67195406894 + Cb * (-6.60635669420364e-5 * Cb + 0.000437130475926232 * Cr - 5.4080610064599e-5 * Y + 0.00048449797120281 * k - 0.154362151871126) + Cr * (-0.000957964378445773 * Cr + 0.000817076911346625 * Y - 0.00477271405408747 * k + 1.53380253221734) + Y * (0.000961250184130688 * Y - 0.00266257332283933 * k + 0.48357088451265) + k * (-0.000336197177618394 * k + 0.484791561490776); - data[offset++] = 107.268039397724 + Cb * (2.19927104525741e-5 * Cb - 0.000640992018297945 * Cr + 0.000659397001245577 * Y + 0.000426105652938837 * k - 0.176491792462875) + Cr * (-0.000778269941513683 * Cr + 0.00130872261408275 * Y + 0.000770482631801132 * k - 0.151051492775562) + Y * (0.00126935368114843 * Y - 0.00265090189010898 * k + 0.25802910206845) + k * (-0.000318913117588328 * k - 0.213742400323665); - data[offset++] = -20.810012546947 + Cb * (-0.000570115196973677 * Cb - 2.63409051004589e-5 * Cr + 0.0020741088115012 * Y - 0.00288260236853442 * k + 0.814272968359295) + Cr * (-1.53496057440975e-5 * Cr - 0.000132689043961446 * Y + 0.000560833691242812 * k - 0.195152027534049) + Y * (0.00174418132927582 * Y - 0.00255243321439347 * k + 0.116935020465145) + k * (-0.000343531996510555 * k + 0.24165260232407); - } - - return data.subarray(0, offset); - }, - _convertYcckToCmyk: function convertYcckToCmyk(data) { - var Y, Cb, Cr; - - for (var i = 0, length = data.length; i < length; i += 4) { - Y = data[i]; - Cb = data[i + 1]; - Cr = data[i + 2]; - data[i] = 434.456 - Y - 1.402 * Cr; - data[i + 1] = 119.541 - Y + 0.344 * Cb + 0.714 * Cr; - data[i + 2] = 481.816 - Y - 1.772 * Cb; - } - - return data; - }, - _convertCmykToRgb: function convertCmykToRgb(data) { - var c, m, y, k; - var offset = 0; - var scale = 1 / 255; - - for (var i = 0, length = data.length; i < length; i += 4) { - c = data[i] * scale; - m = data[i + 1] * scale; - y = data[i + 2] * scale; - k = data[i + 3] * scale; - data[offset++] = 255 + c * (-4.387332384609988 * c + 54.48615194189176 * m + 18.82290502165302 * y + 212.25662451639585 * k - 285.2331026137004) + m * (1.7149763477362134 * m - 5.6096736904047315 * y - 17.873870861415444 * k - 5.497006427196366) + y * (-2.5217340131683033 * y - 21.248923337353073 * k + 17.5119270841813) - k * (21.86122147463605 * k + 189.48180835922747); - data[offset++] = 255 + c * (8.841041422036149 * c + 60.118027045597366 * m + 6.871425592049007 * y + 31.159100130055922 * k - 79.2970844816548) + m * (-15.310361306967817 * m + 17.575251261109482 * y + 131.35250912493976 * k - 190.9453302588951) + y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) - k * (20.737325471181034 * k + 187.80453709719578); - data[offset++] = 255 + c * (0.8842522430003296 * c + 8.078677503112928 * m + 30.89978309703729 * y - 0.23883238689178934 * k - 14.183576799673286) + m * (10.49593273432072 * m + 63.02378494754052 * y + 50.606957656360734 * k - 112.23884253719248) + y * (0.03296041114873217 * y + 115.60384449646641 * k - 193.58209356861505) - k * (22.33816807309886 * k + 180.12613974708367); - } - - return data.subarray(0, offset); - }, - getData: function getData(_ref3) { - var width = _ref3.width, - height = _ref3.height, - _ref3$forceRGB = _ref3.forceRGB, - forceRGB = _ref3$forceRGB === void 0 ? false : _ref3$forceRGB, - _ref3$isSourcePDF = _ref3.isSourcePDF, - isSourcePDF = _ref3$isSourcePDF === void 0 ? false : _ref3$isSourcePDF; - - if (this.numComponents > 4) { - throw new JpegError('Unsupported color mode'); - } - - var data = this._getLinearizedBlockData(width, height, isSourcePDF); - - if (this.numComponents === 1 && forceRGB) { - var dataLength = data.length; - var rgbData = new Uint8ClampedArray(dataLength * 3); - var offset = 0; - - for (var i = 0; i < dataLength; i++) { - var grayColor = data[i]; - rgbData[offset++] = grayColor; - rgbData[offset++] = grayColor; - rgbData[offset++] = grayColor; - } - - return rgbData; - } else if (this.numComponents === 3 && this._isColorConversionNeeded) { - return this._convertYccToRgb(data); - } else if (this.numComponents === 4) { - if (this._isColorConversionNeeded) { - if (forceRGB) { - return this._convertYcckToRgb(data); - } - - return this._convertYcckToCmyk(data); - } else if (forceRGB) { - return this._convertCmykToRgb(data); - } - } - - return data; - } - }; - return JpegImage; - }(); - - exports.JpegImage = JpegImage; - - /***/ }), - /* 165 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.JpxStream = void 0; - - var _stream = __w_extracthighlights_require__(157); - - var _jpx = __w_extracthighlights_require__(166); - - var _util = __w_extracthighlights_require__(6); - - var JpxStream = function JpxStreamClosure() { - function JpxStream(stream, maybeLength, dict, params) { - this.stream = stream; - this.maybeLength = maybeLength; - this.dict = dict; - this.params = params; - - _stream.DecodeStream.call(this, maybeLength); - } - - JpxStream.prototype = Object.create(_stream.DecodeStream.prototype); - Object.defineProperty(JpxStream.prototype, 'bytes', { - get: function JpxStream_bytes() { - return (0, _util.shadow)(this, 'bytes', this.stream.getBytes(this.maybeLength)); - }, - configurable: true - }); - - JpxStream.prototype.ensureBuffer = function (requested) {}; - - JpxStream.prototype.readBlock = function () { - if (this.eof) { - return; - } - - var jpxImage = new _jpx.JpxImage(); - jpxImage.parse(this.bytes); - var width = jpxImage.width; - var height = jpxImage.height; - var componentsCount = jpxImage.componentsCount; - var tileCount = jpxImage.tiles.length; - - if (tileCount === 1) { - this.buffer = jpxImage.tiles[0].items; - } else { - var data = new Uint8ClampedArray(width * height * componentsCount); - - for (var k = 0; k < tileCount; k++) { - var tileComponents = jpxImage.tiles[k]; - var tileWidth = tileComponents.width; - var tileHeight = tileComponents.height; - var tileLeft = tileComponents.left; - var tileTop = tileComponents.top; - var src = tileComponents.items; - var srcPosition = 0; - var dataPosition = (width * tileTop + tileLeft) * componentsCount; - var imgRowSize = width * componentsCount; - var tileRowSize = tileWidth * componentsCount; - - for (var j = 0; j < tileHeight; j++) { - var rowBytes = src.subarray(srcPosition, srcPosition + tileRowSize); - data.set(rowBytes, dataPosition); - srcPosition += tileRowSize; - dataPosition += imgRowSize; - } - } - - this.buffer = data; - } - - this.bufferLength = this.buffer.length; - this.eof = true; - }; - - return JpxStream; - }(); - - exports.JpxStream = JpxStream; - - /***/ }), - /* 166 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.JpxImage = void 0; - - var _util = __w_extracthighlights_require__(6); - - var _arithmetic_decoder = __w_extracthighlights_require__(162); - - var JpxError = function JpxErrorClosure() { - function JpxError(msg) { - this.message = 'JPX error: ' + msg; - } - - JpxError.prototype = new Error(); - JpxError.prototype.name = 'JpxError'; - JpxError.constructor = JpxError; - return JpxError; - }(); - - var JpxImage = function JpxImageClosure() { - var SubbandsGainLog2 = { - 'LL': 0, - 'LH': 1, - 'HL': 1, - 'HH': 2 - }; - - function JpxImage() { - this.failOnCorruptedImage = false; - } - - JpxImage.prototype = { - parse: function JpxImage_parse(data) { - var head = (0, _util.readUint16)(data, 0); - - if (head === 0xFF4F) { - this.parseCodestream(data, 0, data.length); - return; - } - - var position = 0, - length = data.length; - - while (position < length) { - var headerSize = 8; - var lbox = (0, _util.readUint32)(data, position); - var tbox = (0, _util.readUint32)(data, position + 4); - position += headerSize; - - if (lbox === 1) { - lbox = (0, _util.readUint32)(data, position) * 4294967296 + (0, _util.readUint32)(data, position + 4); - position += 8; - headerSize += 8; - } - - if (lbox === 0) { - lbox = length - position + headerSize; - } - - if (lbox < headerSize) { - throw new JpxError('Invalid box field size'); - } - - var dataLength = lbox - headerSize; - var jumpDataLength = true; - - switch (tbox) { - case 0x6A703268: - jumpDataLength = false; - break; - - case 0x636F6C72: - var method = data[position]; - - if (method === 1) { - var colorspace = (0, _util.readUint32)(data, position + 3); - - switch (colorspace) { - case 16: - case 17: - case 18: - break; - - default: - (0, _util.warn)('Unknown colorspace ' + colorspace); - break; - } - } else if (method === 2) { - (0, _util.info)('ICC profile not supported'); - } - - break; - - case 0x6A703263: - this.parseCodestream(data, position, position + dataLength); - break; - - case 0x6A502020: - if ((0, _util.readUint32)(data, position) !== 0x0d0a870a) { - (0, _util.warn)('Invalid JP2 signature'); - } - - break; - - case 0x6A501A1A: - case 0x66747970: - case 0x72726571: - case 0x72657320: - case 0x69686472: - break; - - default: - var headerType = String.fromCharCode(tbox >> 24 & 0xFF, tbox >> 16 & 0xFF, tbox >> 8 & 0xFF, tbox & 0xFF); - (0, _util.warn)('Unsupported header type ' + tbox + ' (' + headerType + ')'); - break; - } - - if (jumpDataLength) { - position += dataLength; - } - } - }, - parseImageProperties: function JpxImage_parseImageProperties(stream) { - var newByte = stream.getByte(); - - while (newByte >= 0) { - var oldByte = newByte; - newByte = stream.getByte(); - var code = oldByte << 8 | newByte; - - if (code === 0xFF51) { - stream.skip(4); - var Xsiz = stream.getInt32() >>> 0; - var Ysiz = stream.getInt32() >>> 0; - var XOsiz = stream.getInt32() >>> 0; - var YOsiz = stream.getInt32() >>> 0; - stream.skip(16); - var Csiz = stream.getUint16(); - this.width = Xsiz - XOsiz; - this.height = Ysiz - YOsiz; - this.componentsCount = Csiz; - this.bitsPerComponent = 8; - return; - } - } - - throw new JpxError('No size marker found in JPX stream'); - }, - parseCodestream: function JpxImage_parseCodestream(data, start, end) { - var context = {}; - var doNotRecover = false; - - try { - var position = start; - - while (position + 1 < end) { - var code = (0, _util.readUint16)(data, position); - position += 2; - var length = 0, - j, - sqcd, - spqcds, - spqcdSize, - scalarExpounded, - tile; - - switch (code) { - case 0xFF4F: - context.mainHeader = true; - break; - - case 0xFFD9: - break; - - case 0xFF51: - length = (0, _util.readUint16)(data, position); - var siz = {}; - siz.Xsiz = (0, _util.readUint32)(data, position + 4); - siz.Ysiz = (0, _util.readUint32)(data, position + 8); - siz.XOsiz = (0, _util.readUint32)(data, position + 12); - siz.YOsiz = (0, _util.readUint32)(data, position + 16); - siz.XTsiz = (0, _util.readUint32)(data, position + 20); - siz.YTsiz = (0, _util.readUint32)(data, position + 24); - siz.XTOsiz = (0, _util.readUint32)(data, position + 28); - siz.YTOsiz = (0, _util.readUint32)(data, position + 32); - var componentsCount = (0, _util.readUint16)(data, position + 36); - siz.Csiz = componentsCount; - var components = []; - j = position + 38; - - for (var i = 0; i < componentsCount; i++) { - var component = { - precision: (data[j] & 0x7F) + 1, - isSigned: !!(data[j] & 0x80), - XRsiz: data[j + 1], - YRsiz: data[j + 2] - }; - j += 3; - calculateComponentDimensions(component, siz); - components.push(component); - } - - context.SIZ = siz; - context.components = components; - calculateTileGrids(context, components); - context.QCC = []; - context.COC = []; - break; - - case 0xFF5C: - length = (0, _util.readUint16)(data, position); - var qcd = {}; - j = position + 2; - sqcd = data[j++]; - - switch (sqcd & 0x1F) { - case 0: - spqcdSize = 8; - scalarExpounded = true; - break; - - case 1: - spqcdSize = 16; - scalarExpounded = false; - break; - - case 2: - spqcdSize = 16; - scalarExpounded = true; - break; - - default: - throw new Error('Invalid SQcd value ' + sqcd); - } - - qcd.noQuantization = spqcdSize === 8; - qcd.scalarExpounded = scalarExpounded; - qcd.guardBits = sqcd >> 5; - spqcds = []; - - while (j < length + position) { - var spqcd = {}; - - if (spqcdSize === 8) { - spqcd.epsilon = data[j++] >> 3; - spqcd.mu = 0; - } else { - spqcd.epsilon = data[j] >> 3; - spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1]; - j += 2; - } - - spqcds.push(spqcd); - } - - qcd.SPqcds = spqcds; - - if (context.mainHeader) { - context.QCD = qcd; - } else { - context.currentTile.QCD = qcd; - context.currentTile.QCC = []; - } - - break; - - case 0xFF5D: - length = (0, _util.readUint16)(data, position); - var qcc = {}; - j = position + 2; - var cqcc; - - if (context.SIZ.Csiz < 257) { - cqcc = data[j++]; - } else { - cqcc = (0, _util.readUint16)(data, j); - j += 2; - } - - sqcd = data[j++]; - - switch (sqcd & 0x1F) { - case 0: - spqcdSize = 8; - scalarExpounded = true; - break; - - case 1: - spqcdSize = 16; - scalarExpounded = false; - break; - - case 2: - spqcdSize = 16; - scalarExpounded = true; - break; - - default: - throw new Error('Invalid SQcd value ' + sqcd); - } - - qcc.noQuantization = spqcdSize === 8; - qcc.scalarExpounded = scalarExpounded; - qcc.guardBits = sqcd >> 5; - spqcds = []; - - while (j < length + position) { - spqcd = {}; - - if (spqcdSize === 8) { - spqcd.epsilon = data[j++] >> 3; - spqcd.mu = 0; - } else { - spqcd.epsilon = data[j] >> 3; - spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1]; - j += 2; - } - - spqcds.push(spqcd); - } - - qcc.SPqcds = spqcds; - - if (context.mainHeader) { - context.QCC[cqcc] = qcc; - } else { - context.currentTile.QCC[cqcc] = qcc; - } - - break; - - case 0xFF52: - length = (0, _util.readUint16)(data, position); - var cod = {}; - j = position + 2; - var scod = data[j++]; - cod.entropyCoderWithCustomPrecincts = !!(scod & 1); - cod.sopMarkerUsed = !!(scod & 2); - cod.ephMarkerUsed = !!(scod & 4); - cod.progressionOrder = data[j++]; - cod.layersCount = (0, _util.readUint16)(data, j); - j += 2; - cod.multipleComponentTransform = data[j++]; - cod.decompositionLevelsCount = data[j++]; - cod.xcb = (data[j++] & 0xF) + 2; - cod.ycb = (data[j++] & 0xF) + 2; - var blockStyle = data[j++]; - cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1); - cod.resetContextProbabilities = !!(blockStyle & 2); - cod.terminationOnEachCodingPass = !!(blockStyle & 4); - cod.verticallyStripe = !!(blockStyle & 8); - cod.predictableTermination = !!(blockStyle & 16); - cod.segmentationSymbolUsed = !!(blockStyle & 32); - cod.reversibleTransformation = data[j++]; - - if (cod.entropyCoderWithCustomPrecincts) { - var precinctsSizes = []; - - while (j < length + position) { - var precinctsSize = data[j++]; - precinctsSizes.push({ - PPx: precinctsSize & 0xF, - PPy: precinctsSize >> 4 - }); - } - - cod.precinctsSizes = precinctsSizes; - } - - var unsupported = []; - - if (cod.selectiveArithmeticCodingBypass) { - unsupported.push('selectiveArithmeticCodingBypass'); - } - - if (cod.resetContextProbabilities) { - unsupported.push('resetContextProbabilities'); - } - - if (cod.terminationOnEachCodingPass) { - unsupported.push('terminationOnEachCodingPass'); - } - - if (cod.verticallyStripe) { - unsupported.push('verticallyStripe'); - } - - if (cod.predictableTermination) { - unsupported.push('predictableTermination'); - } - - if (unsupported.length > 0) { - doNotRecover = true; - throw new Error('Unsupported COD options (' + unsupported.join(', ') + ')'); - } - - if (context.mainHeader) { - context.COD = cod; - } else { - context.currentTile.COD = cod; - context.currentTile.COC = []; - } - - break; - - case 0xFF90: - length = (0, _util.readUint16)(data, position); - tile = {}; - tile.index = (0, _util.readUint16)(data, position + 2); - tile.length = (0, _util.readUint32)(data, position + 4); - tile.dataEnd = tile.length + position - 2; - tile.partIndex = data[position + 8]; - tile.partsCount = data[position + 9]; - context.mainHeader = false; - - if (tile.partIndex === 0) { - tile.COD = context.COD; - tile.COC = context.COC.slice(0); - tile.QCD = context.QCD; - tile.QCC = context.QCC.slice(0); - } - - context.currentTile = tile; - break; - - case 0xFF93: - tile = context.currentTile; - - if (tile.partIndex === 0) { - initializeTile(context, tile.index); - buildPackets(context); - } - - length = tile.dataEnd - position; - parseTilePackets(context, data, position, length); - break; - - case 0xFF55: - case 0xFF57: - case 0xFF58: - case 0xFF64: - length = (0, _util.readUint16)(data, position); - break; - - case 0xFF53: - throw new Error('Codestream code 0xFF53 (COC) is ' + 'not implemented'); - - default: - throw new Error('Unknown codestream code: ' + code.toString(16)); - } - - position += length; - } - } catch (e) { - if (doNotRecover || this.failOnCorruptedImage) { - throw new JpxError(e.message); - } else { - (0, _util.warn)('JPX: Trying to recover from: ' + e.message); - } - } - - this.tiles = transformComponents(context); - this.width = context.SIZ.Xsiz - context.SIZ.XOsiz; - this.height = context.SIZ.Ysiz - context.SIZ.YOsiz; - this.componentsCount = context.SIZ.Csiz; - } - }; - - function calculateComponentDimensions(component, siz) { - component.x0 = Math.ceil(siz.XOsiz / component.XRsiz); - component.x1 = Math.ceil(siz.Xsiz / component.XRsiz); - component.y0 = Math.ceil(siz.YOsiz / component.YRsiz); - component.y1 = Math.ceil(siz.Ysiz / component.YRsiz); - component.width = component.x1 - component.x0; - component.height = component.y1 - component.y0; - } - - function calculateTileGrids(context, components) { - var siz = context.SIZ; - var tile, - tiles = []; - var numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz); - var numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz); - - for (var q = 0; q < numYtiles; q++) { - for (var p = 0; p < numXtiles; p++) { - tile = {}; - tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz); - tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz); - tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz); - tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz); - tile.width = tile.tx1 - tile.tx0; - tile.height = tile.ty1 - tile.ty0; - tile.components = []; - tiles.push(tile); - } - } - - context.tiles = tiles; - var componentsCount = siz.Csiz; - - for (var i = 0, ii = componentsCount; i < ii; i++) { - var component = components[i]; - - for (var j = 0, jj = tiles.length; j < jj; j++) { - var tileComponent = {}; - tile = tiles[j]; - tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz); - tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz); - tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz); - tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz); - tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0; - tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0; - tile.components[i] = tileComponent; - } - } - } - - function getBlocksDimensions(context, component, r) { - var codOrCoc = component.codingStyleParameters; - var result = {}; - - if (!codOrCoc.entropyCoderWithCustomPrecincts) { - result.PPx = 15; - result.PPy = 15; - } else { - result.PPx = codOrCoc.precinctsSizes[r].PPx; - result.PPy = codOrCoc.precinctsSizes[r].PPy; - } - - result.xcb_ = r > 0 ? Math.min(codOrCoc.xcb, result.PPx - 1) : Math.min(codOrCoc.xcb, result.PPx); - result.ycb_ = r > 0 ? Math.min(codOrCoc.ycb, result.PPy - 1) : Math.min(codOrCoc.ycb, result.PPy); - return result; - } - - function buildPrecincts(context, resolution, dimensions) { - var precinctWidth = 1 << dimensions.PPx; - var precinctHeight = 1 << dimensions.PPy; - var isZeroRes = resolution.resLevel === 0; - var precinctWidthInSubband = 1 << dimensions.PPx + (isZeroRes ? 0 : -1); - var precinctHeightInSubband = 1 << dimensions.PPy + (isZeroRes ? 0 : -1); - var numprecinctswide = resolution.trx1 > resolution.trx0 ? Math.ceil(resolution.trx1 / precinctWidth) - Math.floor(resolution.trx0 / precinctWidth) : 0; - var numprecinctshigh = resolution.try1 > resolution.try0 ? Math.ceil(resolution.try1 / precinctHeight) - Math.floor(resolution.try0 / precinctHeight) : 0; - var numprecincts = numprecinctswide * numprecinctshigh; - resolution.precinctParameters = { - precinctWidth: precinctWidth, - precinctHeight: precinctHeight, - numprecinctswide: numprecinctswide, - numprecinctshigh: numprecinctshigh, - numprecincts: numprecincts, - precinctWidthInSubband: precinctWidthInSubband, - precinctHeightInSubband: precinctHeightInSubband - }; - } - - function buildCodeblocks(context, subband, dimensions) { - var xcb_ = dimensions.xcb_; - var ycb_ = dimensions.ycb_; - var codeblockWidth = 1 << xcb_; - var codeblockHeight = 1 << ycb_; - var cbx0 = subband.tbx0 >> xcb_; - var cby0 = subband.tby0 >> ycb_; - var cbx1 = subband.tbx1 + codeblockWidth - 1 >> xcb_; - var cby1 = subband.tby1 + codeblockHeight - 1 >> ycb_; - var precinctParameters = subband.resolution.precinctParameters; - var codeblocks = []; - var precincts = []; - var i, j, codeblock, precinctNumber; - - for (j = cby0; j < cby1; j++) { - for (i = cbx0; i < cbx1; i++) { - codeblock = { - cbx: i, - cby: j, - tbx0: codeblockWidth * i, - tby0: codeblockHeight * j, - tbx1: codeblockWidth * (i + 1), - tby1: codeblockHeight * (j + 1) - }; - codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0); - codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0); - codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1); - codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1); - var pi = Math.floor((codeblock.tbx0_ - subband.tbx0) / precinctParameters.precinctWidthInSubband); - var pj = Math.floor((codeblock.tby0_ - subband.tby0) / precinctParameters.precinctHeightInSubband); - precinctNumber = pi + pj * precinctParameters.numprecinctswide; - codeblock.precinctNumber = precinctNumber; - codeblock.subbandType = subband.type; - codeblock.Lblock = 3; - - if (codeblock.tbx1_ <= codeblock.tbx0_ || codeblock.tby1_ <= codeblock.tby0_) { - continue; - } - - codeblocks.push(codeblock); - var precinct = precincts[precinctNumber]; - - if (precinct !== undefined) { - if (i < precinct.cbxMin) { - precinct.cbxMin = i; - } else if (i > precinct.cbxMax) { - precinct.cbxMax = i; - } - - if (j < precinct.cbyMin) { - precinct.cbxMin = j; - } else if (j > precinct.cbyMax) { - precinct.cbyMax = j; - } - } else { - precincts[precinctNumber] = precinct = { - cbxMin: i, - cbyMin: j, - cbxMax: i, - cbyMax: j - }; - } - - codeblock.precinct = precinct; - } - } - - subband.codeblockParameters = { - codeblockWidth: xcb_, - codeblockHeight: ycb_, - numcodeblockwide: cbx1 - cbx0 + 1, - numcodeblockhigh: cby1 - cby0 + 1 - }; - subband.codeblocks = codeblocks; - subband.precincts = precincts; - } - - function createPacket(resolution, precinctNumber, layerNumber) { - var precinctCodeblocks = []; - var subbands = resolution.subbands; - - for (var i = 0, ii = subbands.length; i < ii; i++) { - var subband = subbands[i]; - var codeblocks = subband.codeblocks; - - for (var j = 0, jj = codeblocks.length; j < jj; j++) { - var codeblock = codeblocks[j]; - - if (codeblock.precinctNumber !== precinctNumber) { - continue; - } - - precinctCodeblocks.push(codeblock); - } - } - - return { - layerNumber: layerNumber, - codeblocks: precinctCodeblocks - }; - } - - function LayerResolutionComponentPositionIterator(context) { - var siz = context.SIZ; - var tileIndex = context.currentTile.index; - var tile = context.tiles[tileIndex]; - var layersCount = tile.codingStyleDefaultParameters.layersCount; - var componentsCount = siz.Csiz; - var maxDecompositionLevelsCount = 0; - - for (var q = 0; q < componentsCount; q++) { - maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount); - } - - var l = 0, - r = 0, - i = 0, - k = 0; - - this.nextPacket = function JpxImage_nextPacket() { - for (; l < layersCount; l++) { - for (; r <= maxDecompositionLevelsCount; r++) { - for (; i < componentsCount; i++) { - var component = tile.components[i]; - - if (r > component.codingStyleParameters.decompositionLevelsCount) { - continue; - } - - var resolution = component.resolutions[r]; - var numprecincts = resolution.precinctParameters.numprecincts; - - for (; k < numprecincts;) { - var packet = createPacket(resolution, k, l); - k++; - return packet; - } - - k = 0; - } - - i = 0; - } - - r = 0; - } - - throw new JpxError('Out of packets'); - }; - } - - function ResolutionLayerComponentPositionIterator(context) { - var siz = context.SIZ; - var tileIndex = context.currentTile.index; - var tile = context.tiles[tileIndex]; - var layersCount = tile.codingStyleDefaultParameters.layersCount; - var componentsCount = siz.Csiz; - var maxDecompositionLevelsCount = 0; - - for (var q = 0; q < componentsCount; q++) { - maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount); - } - - var r = 0, - l = 0, - i = 0, - k = 0; - - this.nextPacket = function JpxImage_nextPacket() { - for (; r <= maxDecompositionLevelsCount; r++) { - for (; l < layersCount; l++) { - for (; i < componentsCount; i++) { - var component = tile.components[i]; - - if (r > component.codingStyleParameters.decompositionLevelsCount) { - continue; - } - - var resolution = component.resolutions[r]; - var numprecincts = resolution.precinctParameters.numprecincts; - - for (; k < numprecincts;) { - var packet = createPacket(resolution, k, l); - k++; - return packet; - } - - k = 0; - } - - i = 0; - } - - l = 0; - } - - throw new JpxError('Out of packets'); - }; - } - - function ResolutionPositionComponentLayerIterator(context) { - var siz = context.SIZ; - var tileIndex = context.currentTile.index; - var tile = context.tiles[tileIndex]; - var layersCount = tile.codingStyleDefaultParameters.layersCount; - var componentsCount = siz.Csiz; - var l, r, c, p; - var maxDecompositionLevelsCount = 0; - - for (c = 0; c < componentsCount; c++) { - var component = tile.components[c]; - maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, component.codingStyleParameters.decompositionLevelsCount); - } - - var maxNumPrecinctsInLevel = new Int32Array(maxDecompositionLevelsCount + 1); - - for (r = 0; r <= maxDecompositionLevelsCount; ++r) { - var maxNumPrecincts = 0; - - for (c = 0; c < componentsCount; ++c) { - var resolutions = tile.components[c].resolutions; - - if (r < resolutions.length) { - maxNumPrecincts = Math.max(maxNumPrecincts, resolutions[r].precinctParameters.numprecincts); - } - } - - maxNumPrecinctsInLevel[r] = maxNumPrecincts; - } - - l = 0; - r = 0; - c = 0; - p = 0; - - this.nextPacket = function JpxImage_nextPacket() { - for (; r <= maxDecompositionLevelsCount; r++) { - for (; p < maxNumPrecinctsInLevel[r]; p++) { - for (; c < componentsCount; c++) { - var component = tile.components[c]; - - if (r > component.codingStyleParameters.decompositionLevelsCount) { - continue; - } - - var resolution = component.resolutions[r]; - var numprecincts = resolution.precinctParameters.numprecincts; - - if (p >= numprecincts) { - continue; - } - - for (; l < layersCount;) { - var packet = createPacket(resolution, p, l); - l++; - return packet; - } - - l = 0; - } - - c = 0; - } - - p = 0; - } - - throw new JpxError('Out of packets'); - }; - } - - function PositionComponentResolutionLayerIterator(context) { - var siz = context.SIZ; - var tileIndex = context.currentTile.index; - var tile = context.tiles[tileIndex]; - var layersCount = tile.codingStyleDefaultParameters.layersCount; - var componentsCount = siz.Csiz; - var precinctsSizes = getPrecinctSizesInImageScale(tile); - var precinctsIterationSizes = precinctsSizes; - var l = 0, - r = 0, - c = 0, - px = 0, - py = 0; - - this.nextPacket = function JpxImage_nextPacket() { - for (; py < precinctsIterationSizes.maxNumHigh; py++) { - for (; px < precinctsIterationSizes.maxNumWide; px++) { - for (; c < componentsCount; c++) { - var component = tile.components[c]; - var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; - - for (; r <= decompositionLevelsCount; r++) { - var resolution = component.resolutions[r]; - var sizeInImageScale = precinctsSizes.components[c].resolutions[r]; - var k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution); - - if (k === null) { - continue; - } - - for (; l < layersCount;) { - var packet = createPacket(resolution, k, l); - l++; - return packet; - } - - l = 0; - } - - r = 0; - } - - c = 0; - } - - px = 0; - } - - throw new JpxError('Out of packets'); - }; - } - - function ComponentPositionResolutionLayerIterator(context) { - var siz = context.SIZ; - var tileIndex = context.currentTile.index; - var tile = context.tiles[tileIndex]; - var layersCount = tile.codingStyleDefaultParameters.layersCount; - var componentsCount = siz.Csiz; - var precinctsSizes = getPrecinctSizesInImageScale(tile); - var l = 0, - r = 0, - c = 0, - px = 0, - py = 0; - - this.nextPacket = function JpxImage_nextPacket() { - for (; c < componentsCount; ++c) { - var component = tile.components[c]; - var precinctsIterationSizes = precinctsSizes.components[c]; - var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; - - for (; py < precinctsIterationSizes.maxNumHigh; py++) { - for (; px < precinctsIterationSizes.maxNumWide; px++) { - for (; r <= decompositionLevelsCount; r++) { - var resolution = component.resolutions[r]; - var sizeInImageScale = precinctsIterationSizes.resolutions[r]; - var k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution); - - if (k === null) { - continue; - } - - for (; l < layersCount;) { - var packet = createPacket(resolution, k, l); - l++; - return packet; - } - - l = 0; - } - - r = 0; - } - - px = 0; - } - - py = 0; - } - - throw new JpxError('Out of packets'); - }; - } - - function getPrecinctIndexIfExist(pxIndex, pyIndex, sizeInImageScale, precinctIterationSizes, resolution) { - var posX = pxIndex * precinctIterationSizes.minWidth; - var posY = pyIndex * precinctIterationSizes.minHeight; - - if (posX % sizeInImageScale.width !== 0 || posY % sizeInImageScale.height !== 0) { - return null; - } - - var startPrecinctRowIndex = posY / sizeInImageScale.width * resolution.precinctParameters.numprecinctswide; - return posX / sizeInImageScale.height + startPrecinctRowIndex; - } - - function getPrecinctSizesInImageScale(tile) { - var componentsCount = tile.components.length; - var minWidth = Number.MAX_VALUE; - var minHeight = Number.MAX_VALUE; - var maxNumWide = 0; - var maxNumHigh = 0; - var sizePerComponent = new Array(componentsCount); - - for (var c = 0; c < componentsCount; c++) { - var component = tile.components[c]; - var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; - var sizePerResolution = new Array(decompositionLevelsCount + 1); - var minWidthCurrentComponent = Number.MAX_VALUE; - var minHeightCurrentComponent = Number.MAX_VALUE; - var maxNumWideCurrentComponent = 0; - var maxNumHighCurrentComponent = 0; - var scale = 1; - - for (var r = decompositionLevelsCount; r >= 0; --r) { - var resolution = component.resolutions[r]; - var widthCurrentResolution = scale * resolution.precinctParameters.precinctWidth; - var heightCurrentResolution = scale * resolution.precinctParameters.precinctHeight; - minWidthCurrentComponent = Math.min(minWidthCurrentComponent, widthCurrentResolution); - minHeightCurrentComponent = Math.min(minHeightCurrentComponent, heightCurrentResolution); - maxNumWideCurrentComponent = Math.max(maxNumWideCurrentComponent, resolution.precinctParameters.numprecinctswide); - maxNumHighCurrentComponent = Math.max(maxNumHighCurrentComponent, resolution.precinctParameters.numprecinctshigh); - sizePerResolution[r] = { - width: widthCurrentResolution, - height: heightCurrentResolution - }; - scale <<= 1; - } - - minWidth = Math.min(minWidth, minWidthCurrentComponent); - minHeight = Math.min(minHeight, minHeightCurrentComponent); - maxNumWide = Math.max(maxNumWide, maxNumWideCurrentComponent); - maxNumHigh = Math.max(maxNumHigh, maxNumHighCurrentComponent); - sizePerComponent[c] = { - resolutions: sizePerResolution, - minWidth: minWidthCurrentComponent, - minHeight: minHeightCurrentComponent, - maxNumWide: maxNumWideCurrentComponent, - maxNumHigh: maxNumHighCurrentComponent - }; - } - - return { - components: sizePerComponent, - minWidth: minWidth, - minHeight: minHeight, - maxNumWide: maxNumWide, - maxNumHigh: maxNumHigh - }; - } - - function buildPackets(context) { - var siz = context.SIZ; - var tileIndex = context.currentTile.index; - var tile = context.tiles[tileIndex]; - var componentsCount = siz.Csiz; - - for (var c = 0; c < componentsCount; c++) { - var component = tile.components[c]; - var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; - var resolutions = []; - var subbands = []; - - for (var r = 0; r <= decompositionLevelsCount; r++) { - var blocksDimensions = getBlocksDimensions(context, component, r); - var resolution = {}; - var scale = 1 << decompositionLevelsCount - r; - resolution.trx0 = Math.ceil(component.tcx0 / scale); - resolution.try0 = Math.ceil(component.tcy0 / scale); - resolution.trx1 = Math.ceil(component.tcx1 / scale); - resolution.try1 = Math.ceil(component.tcy1 / scale); - resolution.resLevel = r; - buildPrecincts(context, resolution, blocksDimensions); - resolutions.push(resolution); - var subband; - - if (r === 0) { - subband = {}; - subband.type = 'LL'; - subband.tbx0 = Math.ceil(component.tcx0 / scale); - subband.tby0 = Math.ceil(component.tcy0 / scale); - subband.tbx1 = Math.ceil(component.tcx1 / scale); - subband.tby1 = Math.ceil(component.tcy1 / scale); - subband.resolution = resolution; - buildCodeblocks(context, subband, blocksDimensions); - subbands.push(subband); - resolution.subbands = [subband]; - } else { - var bscale = 1 << decompositionLevelsCount - r + 1; - var resolutionSubbands = []; - subband = {}; - subband.type = 'HL'; - subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5); - subband.tby0 = Math.ceil(component.tcy0 / bscale); - subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5); - subband.tby1 = Math.ceil(component.tcy1 / bscale); - subband.resolution = resolution; - buildCodeblocks(context, subband, blocksDimensions); - subbands.push(subband); - resolutionSubbands.push(subband); - subband = {}; - subband.type = 'LH'; - subband.tbx0 = Math.ceil(component.tcx0 / bscale); - subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5); - subband.tbx1 = Math.ceil(component.tcx1 / bscale); - subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5); - subband.resolution = resolution; - buildCodeblocks(context, subband, blocksDimensions); - subbands.push(subband); - resolutionSubbands.push(subband); - subband = {}; - subband.type = 'HH'; - subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5); - subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5); - subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5); - subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5); - subband.resolution = resolution; - buildCodeblocks(context, subband, blocksDimensions); - subbands.push(subband); - resolutionSubbands.push(subband); - resolution.subbands = resolutionSubbands; - } - } - - component.resolutions = resolutions; - component.subbands = subbands; - } - - var progressionOrder = tile.codingStyleDefaultParameters.progressionOrder; - - switch (progressionOrder) { - case 0: - tile.packetsIterator = new LayerResolutionComponentPositionIterator(context); - break; - - case 1: - tile.packetsIterator = new ResolutionLayerComponentPositionIterator(context); - break; - - case 2: - tile.packetsIterator = new ResolutionPositionComponentLayerIterator(context); - break; - - case 3: - tile.packetsIterator = new PositionComponentResolutionLayerIterator(context); - break; - - case 4: - tile.packetsIterator = new ComponentPositionResolutionLayerIterator(context); - break; - - default: - throw new JpxError("Unsupported progression order ".concat(progressionOrder)); - } - } - - function parseTilePackets(context, data, offset, dataLength) { - var position = 0; - var buffer, - bufferSize = 0, - skipNextBit = false; - - function readBits(count) { - while (bufferSize < count) { - var b = data[offset + position]; - position++; - - if (skipNextBit) { - buffer = buffer << 7 | b; - bufferSize += 7; - skipNextBit = false; - } else { - buffer = buffer << 8 | b; - bufferSize += 8; - } - - if (b === 0xFF) { - skipNextBit = true; - } - } - - bufferSize -= count; - return buffer >>> bufferSize & (1 << count) - 1; - } - - function skipMarkerIfEqual(value) { - if (data[offset + position - 1] === 0xFF && data[offset + position] === value) { - skipBytes(1); - return true; - } else if (data[offset + position] === 0xFF && data[offset + position + 1] === value) { - skipBytes(2); - return true; - } - - return false; - } - - function skipBytes(count) { - position += count; - } - - function alignToByte() { - bufferSize = 0; - - if (skipNextBit) { - position++; - skipNextBit = false; - } - } - - function readCodingpasses() { - if (readBits(1) === 0) { - return 1; - } - - if (readBits(1) === 0) { - return 2; - } - - var value = readBits(2); - - if (value < 3) { - return value + 3; - } - - value = readBits(5); - - if (value < 31) { - return value + 6; - } - - value = readBits(7); - return value + 37; - } - - var tileIndex = context.currentTile.index; - var tile = context.tiles[tileIndex]; - var sopMarkerUsed = context.COD.sopMarkerUsed; - var ephMarkerUsed = context.COD.ephMarkerUsed; - var packetsIterator = tile.packetsIterator; - - while (position < dataLength) { - alignToByte(); - - if (sopMarkerUsed && skipMarkerIfEqual(0x91)) { - skipBytes(4); - } - - var packet = packetsIterator.nextPacket(); - - if (!readBits(1)) { - continue; - } - - var layerNumber = packet.layerNumber; - var queue = [], - codeblock; - - for (var i = 0, ii = packet.codeblocks.length; i < ii; i++) { - codeblock = packet.codeblocks[i]; - var precinct = codeblock.precinct; - var codeblockColumn = codeblock.cbx - precinct.cbxMin; - var codeblockRow = codeblock.cby - precinct.cbyMin; - var codeblockIncluded = false; - var firstTimeInclusion = false; - var valueReady; - - if (codeblock['included'] !== undefined) { - codeblockIncluded = !!readBits(1); - } else { - precinct = codeblock.precinct; - var inclusionTree, zeroBitPlanesTree; - - if (precinct['inclusionTree'] !== undefined) { - inclusionTree = precinct.inclusionTree; - } else { - var width = precinct.cbxMax - precinct.cbxMin + 1; - var height = precinct.cbyMax - precinct.cbyMin + 1; - inclusionTree = new InclusionTree(width, height, layerNumber); - zeroBitPlanesTree = new TagTree(width, height); - precinct.inclusionTree = inclusionTree; - precinct.zeroBitPlanesTree = zeroBitPlanesTree; - } - - if (inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber)) { - while (true) { - if (readBits(1)) { - valueReady = !inclusionTree.nextLevel(); - - if (valueReady) { - codeblock.included = true; - codeblockIncluded = firstTimeInclusion = true; - break; - } - } else { - inclusionTree.incrementValue(layerNumber); - break; - } - } - } - } - - if (!codeblockIncluded) { - continue; - } - - if (firstTimeInclusion) { - zeroBitPlanesTree = precinct.zeroBitPlanesTree; - zeroBitPlanesTree.reset(codeblockColumn, codeblockRow); - - while (true) { - if (readBits(1)) { - valueReady = !zeroBitPlanesTree.nextLevel(); - - if (valueReady) { - break; - } - } else { - zeroBitPlanesTree.incrementValue(); - } - } - - codeblock.zeroBitPlanes = zeroBitPlanesTree.value; - } - - var codingpasses = readCodingpasses(); - - while (readBits(1)) { - codeblock.Lblock++; - } - - var codingpassesLog2 = (0, _util.log2)(codingpasses); - var bits = (codingpasses < 1 << codingpassesLog2 ? codingpassesLog2 - 1 : codingpassesLog2) + codeblock.Lblock; - var codedDataLength = readBits(bits); - queue.push({ - codeblock: codeblock, - codingpasses: codingpasses, - dataLength: codedDataLength - }); - } - - alignToByte(); - - if (ephMarkerUsed) { - skipMarkerIfEqual(0x92); - } - - while (queue.length > 0) { - var packetItem = queue.shift(); - codeblock = packetItem.codeblock; - - if (codeblock['data'] === undefined) { - codeblock.data = []; - } - - codeblock.data.push({ - data: data, - start: offset + position, - end: offset + position + packetItem.dataLength, - codingpasses: packetItem.codingpasses - }); - position += packetItem.dataLength; - } - } - - return position; - } - - function copyCoefficients(coefficients, levelWidth, levelHeight, subband, delta, mb, reversible, segmentationSymbolUsed) { - var x0 = subband.tbx0; - var y0 = subband.tby0; - var width = subband.tbx1 - subband.tbx0; - var codeblocks = subband.codeblocks; - var right = subband.type.charAt(0) === 'H' ? 1 : 0; - var bottom = subband.type.charAt(1) === 'H' ? levelWidth : 0; - - for (var i = 0, ii = codeblocks.length; i < ii; ++i) { - var codeblock = codeblocks[i]; - var blockWidth = codeblock.tbx1_ - codeblock.tbx0_; - var blockHeight = codeblock.tby1_ - codeblock.tby0_; - - if (blockWidth === 0 || blockHeight === 0) { - continue; - } - - if (codeblock['data'] === undefined) { - continue; - } - - var bitModel, currentCodingpassType; - bitModel = new BitModel(blockWidth, blockHeight, codeblock.subbandType, codeblock.zeroBitPlanes, mb); - currentCodingpassType = 2; - var data = codeblock.data, - totalLength = 0, - codingpasses = 0; - var j, jj, dataItem; - - for (j = 0, jj = data.length; j < jj; j++) { - dataItem = data[j]; - totalLength += dataItem.end - dataItem.start; - codingpasses += dataItem.codingpasses; - } - - var encodedData = new Uint8Array(totalLength); - var position = 0; - - for (j = 0, jj = data.length; j < jj; j++) { - dataItem = data[j]; - var chunk = dataItem.data.subarray(dataItem.start, dataItem.end); - encodedData.set(chunk, position); - position += chunk.length; - } - - var decoder = new _arithmetic_decoder.ArithmeticDecoder(encodedData, 0, totalLength); - bitModel.setDecoder(decoder); - - for (j = 0; j < codingpasses; j++) { - switch (currentCodingpassType) { - case 0: - bitModel.runSignificancePropagationPass(); - break; - - case 1: - bitModel.runMagnitudeRefinementPass(); - break; - - case 2: - bitModel.runCleanupPass(); - - if (segmentationSymbolUsed) { - bitModel.checkSegmentationSymbol(); - } - - break; - } - - currentCodingpassType = (currentCodingpassType + 1) % 3; - } - - var offset = codeblock.tbx0_ - x0 + (codeblock.tby0_ - y0) * width; - var sign = bitModel.coefficentsSign; - var magnitude = bitModel.coefficentsMagnitude; - var bitsDecoded = bitModel.bitsDecoded; - var magnitudeCorrection = reversible ? 0 : 0.5; - var k, n, nb; - position = 0; - var interleave = subband.type !== 'LL'; - - for (j = 0; j < blockHeight; j++) { - var row = offset / width | 0; - var levelOffset = 2 * row * (levelWidth - width) + right + bottom; - - for (k = 0; k < blockWidth; k++) { - n = magnitude[position]; - - if (n !== 0) { - n = (n + magnitudeCorrection) * delta; - - if (sign[position] !== 0) { - n = -n; - } - - nb = bitsDecoded[position]; - var pos = interleave ? levelOffset + (offset << 1) : offset; - - if (reversible && nb >= mb) { - coefficients[pos] = n; - } else { - coefficients[pos] = n * (1 << mb - nb); - } - } - - offset++; - position++; - } - - offset += width - blockWidth; - } - } - } - - function transformTile(context, tile, c) { - var component = tile.components[c]; - var codingStyleParameters = component.codingStyleParameters; - var quantizationParameters = component.quantizationParameters; - var decompositionLevelsCount = codingStyleParameters.decompositionLevelsCount; - var spqcds = quantizationParameters.SPqcds; - var scalarExpounded = quantizationParameters.scalarExpounded; - var guardBits = quantizationParameters.guardBits; - var segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed; - var precision = context.components[c].precision; - var reversible = codingStyleParameters.reversibleTransformation; - var transform = reversible ? new ReversibleTransform() : new IrreversibleTransform(); - var subbandCoefficients = []; - var b = 0; - - for (var i = 0; i <= decompositionLevelsCount; i++) { - var resolution = component.resolutions[i]; - var width = resolution.trx1 - resolution.trx0; - var height = resolution.try1 - resolution.try0; - var coefficients = new Float32Array(width * height); - - for (var j = 0, jj = resolution.subbands.length; j < jj; j++) { - var mu, epsilon; - - if (!scalarExpounded) { - mu = spqcds[0].mu; - epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0); - } else { - mu = spqcds[b].mu; - epsilon = spqcds[b].epsilon; - b++; - } - - var subband = resolution.subbands[j]; - var gainLog2 = SubbandsGainLog2[subband.type]; - var delta = reversible ? 1 : Math.pow(2, precision + gainLog2 - epsilon) * (1 + mu / 2048); - var mb = guardBits + epsilon - 1; - copyCoefficients(coefficients, width, height, subband, delta, mb, reversible, segmentationSymbolUsed); - } - - subbandCoefficients.push({ - width: width, - height: height, - items: coefficients - }); - } - - var result = transform.calculate(subbandCoefficients, component.tcx0, component.tcy0); - return { - left: component.tcx0, - top: component.tcy0, - width: result.width, - height: result.height, - items: result.items - }; - } - - function transformComponents(context) { - var siz = context.SIZ; - var components = context.components; - var componentsCount = siz.Csiz; - var resultImages = []; - - for (var i = 0, ii = context.tiles.length; i < ii; i++) { - var tile = context.tiles[i]; - var transformedTiles = []; - var c; - - for (c = 0; c < componentsCount; c++) { - transformedTiles[c] = transformTile(context, tile, c); - } - - var tile0 = transformedTiles[0]; - var out = new Uint8ClampedArray(tile0.items.length * componentsCount); - var result = { - left: tile0.left, - top: tile0.top, - width: tile0.width, - height: tile0.height, - items: out - }; - var shift, offset; - var pos = 0, - j, - jj, - y0, - y1, - y2; - - if (tile.codingStyleDefaultParameters.multipleComponentTransform) { - var fourComponents = componentsCount === 4; - var y0items = transformedTiles[0].items; - var y1items = transformedTiles[1].items; - var y2items = transformedTiles[2].items; - var y3items = fourComponents ? transformedTiles[3].items : null; - shift = components[0].precision - 8; - offset = (128 << shift) + 0.5; - var component0 = tile.components[0]; - var alpha01 = componentsCount - 3; - jj = y0items.length; - - if (!component0.codingStyleParameters.reversibleTransformation) { - for (j = 0; j < jj; j++, pos += alpha01) { - y0 = y0items[j] + offset; - y1 = y1items[j]; - y2 = y2items[j]; - out[pos++] = y0 + 1.402 * y2 >> shift; - out[pos++] = y0 - 0.34413 * y1 - 0.71414 * y2 >> shift; - out[pos++] = y0 + 1.772 * y1 >> shift; - } - } else { - for (j = 0; j < jj; j++, pos += alpha01) { - y0 = y0items[j] + offset; - y1 = y1items[j]; - y2 = y2items[j]; - var g = y0 - (y2 + y1 >> 2); - out[pos++] = g + y2 >> shift; - out[pos++] = g >> shift; - out[pos++] = g + y1 >> shift; - } - } - - if (fourComponents) { - for (j = 0, pos = 3; j < jj; j++, pos += 4) { - out[pos] = y3items[j] + offset >> shift; - } - } - } else { - for (c = 0; c < componentsCount; c++) { - var items = transformedTiles[c].items; - shift = components[c].precision - 8; - offset = (128 << shift) + 0.5; - - for (pos = c, j = 0, jj = items.length; j < jj; j++) { - out[pos] = items[j] + offset >> shift; - pos += componentsCount; - } - } - } - - resultImages.push(result); - } - - return resultImages; - } - - function initializeTile(context, tileIndex) { - var siz = context.SIZ; - var componentsCount = siz.Csiz; - var tile = context.tiles[tileIndex]; - - for (var c = 0; c < componentsCount; c++) { - var component = tile.components[c]; - var qcdOrQcc = context.currentTile.QCC[c] !== undefined ? context.currentTile.QCC[c] : context.currentTile.QCD; - component.quantizationParameters = qcdOrQcc; - var codOrCoc = context.currentTile.COC[c] !== undefined ? context.currentTile.COC[c] : context.currentTile.COD; - component.codingStyleParameters = codOrCoc; - } - - tile.codingStyleDefaultParameters = context.currentTile.COD; - } - - var TagTree = function TagTreeClosure() { - function TagTree(width, height) { - var levelsLength = (0, _util.log2)(Math.max(width, height)) + 1; - this.levels = []; - - for (var i = 0; i < levelsLength; i++) { - var level = { - width: width, - height: height, - items: [] - }; - this.levels.push(level); - width = Math.ceil(width / 2); - height = Math.ceil(height / 2); - } - } - - TagTree.prototype = { - reset: function TagTree_reset(i, j) { - var currentLevel = 0, - value = 0, - level; - - while (currentLevel < this.levels.length) { - level = this.levels[currentLevel]; - var index = i + j * level.width; - - if (level.items[index] !== undefined) { - value = level.items[index]; - break; - } - - level.index = index; - i >>= 1; - j >>= 1; - currentLevel++; - } - - currentLevel--; - level = this.levels[currentLevel]; - level.items[level.index] = value; - this.currentLevel = currentLevel; - delete this.value; - }, - incrementValue: function TagTree_incrementValue() { - var level = this.levels[this.currentLevel]; - level.items[level.index]++; - }, - nextLevel: function TagTree_nextLevel() { - var currentLevel = this.currentLevel; - var level = this.levels[currentLevel]; - var value = level.items[level.index]; - currentLevel--; - - if (currentLevel < 0) { - this.value = value; - return false; - } - - this.currentLevel = currentLevel; - level = this.levels[currentLevel]; - level.items[level.index] = value; - return true; - } - }; - return TagTree; - }(); - - var InclusionTree = function InclusionTreeClosure() { - function InclusionTree(width, height, defaultValue) { - var levelsLength = (0, _util.log2)(Math.max(width, height)) + 1; - this.levels = []; - - for (var i = 0; i < levelsLength; i++) { - var items = new Uint8Array(width * height); - - for (var j = 0, jj = items.length; j < jj; j++) { - items[j] = defaultValue; - } - - var level = { - width: width, - height: height, - items: items - }; - this.levels.push(level); - width = Math.ceil(width / 2); - height = Math.ceil(height / 2); - } - } - - InclusionTree.prototype = { - reset: function InclusionTree_reset(i, j, stopValue) { - var currentLevel = 0; - - while (currentLevel < this.levels.length) { - var level = this.levels[currentLevel]; - var index = i + j * level.width; - level.index = index; - var value = level.items[index]; - - if (value === 0xFF) { - break; - } - - if (value > stopValue) { - this.currentLevel = currentLevel; - this.propagateValues(); - return false; - } - - i >>= 1; - j >>= 1; - currentLevel++; - } - - this.currentLevel = currentLevel - 1; - return true; - }, - incrementValue: function InclusionTree_incrementValue(stopValue) { - var level = this.levels[this.currentLevel]; - level.items[level.index] = stopValue + 1; - this.propagateValues(); - }, - propagateValues: function InclusionTree_propagateValues() { - var levelIndex = this.currentLevel; - var level = this.levels[levelIndex]; - var currentValue = level.items[level.index]; - - while (--levelIndex >= 0) { - level = this.levels[levelIndex]; - level.items[level.index] = currentValue; - } - }, - nextLevel: function InclusionTree_nextLevel() { - var currentLevel = this.currentLevel; - var level = this.levels[currentLevel]; - var value = level.items[level.index]; - level.items[level.index] = 0xFF; - currentLevel--; - - if (currentLevel < 0) { - return false; - } - - this.currentLevel = currentLevel; - level = this.levels[currentLevel]; - level.items[level.index] = value; - return true; - } - }; - return InclusionTree; - }(); - - var BitModel = function BitModelClosure() { - var UNIFORM_CONTEXT = 17; - var RUNLENGTH_CONTEXT = 18; - var LLAndLHContextsLabel = new Uint8Array([0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8]); - var HLContextLabel = new Uint8Array([0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8]); - var HHContextLabel = new Uint8Array([0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5, 5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8]); - - function BitModel(width, height, subband, zeroBitPlanes, mb) { - this.width = width; - this.height = height; - this.contextLabelTable = subband === 'HH' ? HHContextLabel : subband === 'HL' ? HLContextLabel : LLAndLHContextsLabel; - var coefficientCount = width * height; - this.neighborsSignificance = new Uint8Array(coefficientCount); - this.coefficentsSign = new Uint8Array(coefficientCount); - this.coefficentsMagnitude = mb > 14 ? new Uint32Array(coefficientCount) : mb > 6 ? new Uint16Array(coefficientCount) : new Uint8Array(coefficientCount); - this.processingFlags = new Uint8Array(coefficientCount); - var bitsDecoded = new Uint8Array(coefficientCount); - - if (zeroBitPlanes !== 0) { - for (var i = 0; i < coefficientCount; i++) { - bitsDecoded[i] = zeroBitPlanes; - } - } - - this.bitsDecoded = bitsDecoded; - this.reset(); - } - - BitModel.prototype = { - setDecoder: function BitModel_setDecoder(decoder) { - this.decoder = decoder; - }, - reset: function BitModel_reset() { - this.contexts = new Int8Array(19); - this.contexts[0] = 4 << 1 | 0; - this.contexts[UNIFORM_CONTEXT] = 46 << 1 | 0; - this.contexts[RUNLENGTH_CONTEXT] = 3 << 1 | 0; - }, - setNeighborsSignificance: function BitModel_setNeighborsSignificance(row, column, index) { - var neighborsSignificance = this.neighborsSignificance; - var width = this.width, - height = this.height; - var left = column > 0; - var right = column + 1 < width; - var i; - - if (row > 0) { - i = index - width; - - if (left) { - neighborsSignificance[i - 1] += 0x10; - } - - if (right) { - neighborsSignificance[i + 1] += 0x10; - } - - neighborsSignificance[i] += 0x04; - } - - if (row + 1 < height) { - i = index + width; - - if (left) { - neighborsSignificance[i - 1] += 0x10; - } - - if (right) { - neighborsSignificance[i + 1] += 0x10; - } - - neighborsSignificance[i] += 0x04; - } - - if (left) { - neighborsSignificance[index - 1] += 0x01; - } - - if (right) { - neighborsSignificance[index + 1] += 0x01; - } - - neighborsSignificance[index] |= 0x80; - }, - runSignificancePropagationPass: function BitModel_runSignificancePropagationPass() { - var decoder = this.decoder; - var width = this.width, - height = this.height; - var coefficentsMagnitude = this.coefficentsMagnitude; - var coefficentsSign = this.coefficentsSign; - var neighborsSignificance = this.neighborsSignificance; - var processingFlags = this.processingFlags; - var contexts = this.contexts; - var labels = this.contextLabelTable; - var bitsDecoded = this.bitsDecoded; - var processedInverseMask = ~1; - var processedMask = 1; - var firstMagnitudeBitMask = 2; - - for (var i0 = 0; i0 < height; i0 += 4) { - for (var j = 0; j < width; j++) { - var index = i0 * width + j; - - for (var i1 = 0; i1 < 4; i1++, index += width) { - var i = i0 + i1; - - if (i >= height) { - break; - } - - processingFlags[index] &= processedInverseMask; - - if (coefficentsMagnitude[index] || !neighborsSignificance[index]) { - continue; - } - - var contextLabel = labels[neighborsSignificance[index]]; - var decision = decoder.readBit(contexts, contextLabel); - - if (decision) { - var sign = this.decodeSignBit(i, j, index); - coefficentsSign[index] = sign; - coefficentsMagnitude[index] = 1; - this.setNeighborsSignificance(i, j, index); - processingFlags[index] |= firstMagnitudeBitMask; - } - - bitsDecoded[index]++; - processingFlags[index] |= processedMask; - } - } - } - }, - decodeSignBit: function BitModel_decodeSignBit(row, column, index) { - var width = this.width, - height = this.height; - var coefficentsMagnitude = this.coefficentsMagnitude; - var coefficentsSign = this.coefficentsSign; - var contribution, sign0, sign1, significance1; - var contextLabel, decoded; - significance1 = column > 0 && coefficentsMagnitude[index - 1] !== 0; - - if (column + 1 < width && coefficentsMagnitude[index + 1] !== 0) { - sign1 = coefficentsSign[index + 1]; - - if (significance1) { - sign0 = coefficentsSign[index - 1]; - contribution = 1 - sign1 - sign0; - } else { - contribution = 1 - sign1 - sign1; - } - } else if (significance1) { - sign0 = coefficentsSign[index - 1]; - contribution = 1 - sign0 - sign0; - } else { - contribution = 0; - } - - var horizontalContribution = 3 * contribution; - significance1 = row > 0 && coefficentsMagnitude[index - width] !== 0; - - if (row + 1 < height && coefficentsMagnitude[index + width] !== 0) { - sign1 = coefficentsSign[index + width]; - - if (significance1) { - sign0 = coefficentsSign[index - width]; - contribution = 1 - sign1 - sign0 + horizontalContribution; - } else { - contribution = 1 - sign1 - sign1 + horizontalContribution; - } - } else if (significance1) { - sign0 = coefficentsSign[index - width]; - contribution = 1 - sign0 - sign0 + horizontalContribution; - } else { - contribution = horizontalContribution; - } - - if (contribution >= 0) { - contextLabel = 9 + contribution; - decoded = this.decoder.readBit(this.contexts, contextLabel); - } else { - contextLabel = 9 - contribution; - decoded = this.decoder.readBit(this.contexts, contextLabel) ^ 1; - } - - return decoded; - }, - runMagnitudeRefinementPass: function BitModel_runMagnitudeRefinementPass() { - var decoder = this.decoder; - var width = this.width, - height = this.height; - var coefficentsMagnitude = this.coefficentsMagnitude; - var neighborsSignificance = this.neighborsSignificance; - var contexts = this.contexts; - var bitsDecoded = this.bitsDecoded; - var processingFlags = this.processingFlags; - var processedMask = 1; - var firstMagnitudeBitMask = 2; - var length = width * height; - var width4 = width * 4; - - for (var index0 = 0, indexNext; index0 < length; index0 = indexNext) { - indexNext = Math.min(length, index0 + width4); - - for (var j = 0; j < width; j++) { - for (var index = index0 + j; index < indexNext; index += width) { - if (!coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) { - continue; - } - - var contextLabel = 16; - - if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) { - processingFlags[index] ^= firstMagnitudeBitMask; - var significance = neighborsSignificance[index] & 127; - contextLabel = significance === 0 ? 15 : 14; - } - - var bit = decoder.readBit(contexts, contextLabel); - coefficentsMagnitude[index] = coefficentsMagnitude[index] << 1 | bit; - bitsDecoded[index]++; - processingFlags[index] |= processedMask; - } - } - } - }, - runCleanupPass: function BitModel_runCleanupPass() { - var decoder = this.decoder; - var width = this.width, - height = this.height; - var neighborsSignificance = this.neighborsSignificance; - var coefficentsMagnitude = this.coefficentsMagnitude; - var coefficentsSign = this.coefficentsSign; - var contexts = this.contexts; - var labels = this.contextLabelTable; - var bitsDecoded = this.bitsDecoded; - var processingFlags = this.processingFlags; - var processedMask = 1; - var firstMagnitudeBitMask = 2; - var oneRowDown = width; - var twoRowsDown = width * 2; - var threeRowsDown = width * 3; - var iNext; - - for (var i0 = 0; i0 < height; i0 = iNext) { - iNext = Math.min(i0 + 4, height); - var indexBase = i0 * width; - var checkAllEmpty = i0 + 3 < height; - - for (var j = 0; j < width; j++) { - var index0 = indexBase + j; - var allEmpty = checkAllEmpty && processingFlags[index0] === 0 && processingFlags[index0 + oneRowDown] === 0 && processingFlags[index0 + twoRowsDown] === 0 && processingFlags[index0 + threeRowsDown] === 0 && neighborsSignificance[index0] === 0 && neighborsSignificance[index0 + oneRowDown] === 0 && neighborsSignificance[index0 + twoRowsDown] === 0 && neighborsSignificance[index0 + threeRowsDown] === 0; - var i1 = 0, - index = index0; - var i = i0, - sign; - - if (allEmpty) { - var hasSignificantCoefficent = decoder.readBit(contexts, RUNLENGTH_CONTEXT); - - if (!hasSignificantCoefficent) { - bitsDecoded[index0]++; - bitsDecoded[index0 + oneRowDown]++; - bitsDecoded[index0 + twoRowsDown]++; - bitsDecoded[index0 + threeRowsDown]++; - continue; - } - - i1 = decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT); - - if (i1 !== 0) { - i = i0 + i1; - index += i1 * width; - } - - sign = this.decodeSignBit(i, j, index); - coefficentsSign[index] = sign; - coefficentsMagnitude[index] = 1; - this.setNeighborsSignificance(i, j, index); - processingFlags[index] |= firstMagnitudeBitMask; - index = index0; - - for (var i2 = i0; i2 <= i; i2++, index += width) { - bitsDecoded[index]++; - } - - i1++; - } - - for (i = i0 + i1; i < iNext; i++, index += width) { - if (coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) { - continue; - } - - var contextLabel = labels[neighborsSignificance[index]]; - var decision = decoder.readBit(contexts, contextLabel); - - if (decision === 1) { - sign = this.decodeSignBit(i, j, index); - coefficentsSign[index] = sign; - coefficentsMagnitude[index] = 1; - this.setNeighborsSignificance(i, j, index); - processingFlags[index] |= firstMagnitudeBitMask; - } - - bitsDecoded[index]++; - } - } - } - }, - checkSegmentationSymbol: function BitModel_checkSegmentationSymbol() { - var decoder = this.decoder; - var contexts = this.contexts; - var symbol = decoder.readBit(contexts, UNIFORM_CONTEXT) << 3 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 2 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT); - - if (symbol !== 0xA) { - throw new JpxError('Invalid segmentation symbol'); - } - } - }; - return BitModel; - }(); - - var Transform = function TransformClosure() { - function Transform() {} - - Transform.prototype.calculate = function transformCalculate(subbands, u0, v0) { - var ll = subbands[0]; - - for (var i = 1, ii = subbands.length; i < ii; i++) { - ll = this.iterate(ll, subbands[i], u0, v0); - } - - return ll; - }; - - Transform.prototype.extend = function extend(buffer, offset, size) { - var i1 = offset - 1, - j1 = offset + 1; - var i2 = offset + size - 2, - j2 = offset + size; - buffer[i1--] = buffer[j1++]; - buffer[j2++] = buffer[i2--]; - buffer[i1--] = buffer[j1++]; - buffer[j2++] = buffer[i2--]; - buffer[i1--] = buffer[j1++]; - buffer[j2++] = buffer[i2--]; - buffer[i1] = buffer[j1]; - buffer[j2] = buffer[i2]; - }; - - Transform.prototype.iterate = function Transform_iterate(ll, hl_lh_hh, u0, v0) { - var llWidth = ll.width, - llHeight = ll.height, - llItems = ll.items; - var width = hl_lh_hh.width; - var height = hl_lh_hh.height; - var items = hl_lh_hh.items; - var i, j, k, l, u, v; - - for (k = 0, i = 0; i < llHeight; i++) { - l = i * 2 * width; - - for (j = 0; j < llWidth; j++, k++, l += 2) { - items[l] = llItems[k]; - } - } - - llItems = ll.items = null; - var bufferPadding = 4; - var rowBuffer = new Float32Array(width + 2 * bufferPadding); - - if (width === 1) { - if ((u0 & 1) !== 0) { - for (v = 0, k = 0; v < height; v++, k += width) { - items[k] *= 0.5; - } - } - } else { - for (v = 0, k = 0; v < height; v++, k += width) { - rowBuffer.set(items.subarray(k, k + width), bufferPadding); - this.extend(rowBuffer, bufferPadding, width); - this.filter(rowBuffer, bufferPadding, width); - items.set(rowBuffer.subarray(bufferPadding, bufferPadding + width), k); - } - } - - var numBuffers = 16; - var colBuffers = []; - - for (i = 0; i < numBuffers; i++) { - colBuffers.push(new Float32Array(height + 2 * bufferPadding)); - } - - var b, - currentBuffer = 0; - ll = bufferPadding + height; - - if (height === 1) { - if ((v0 & 1) !== 0) { - for (u = 0; u < width; u++) { - items[u] *= 0.5; - } - } - } else { - for (u = 0; u < width; u++) { - if (currentBuffer === 0) { - numBuffers = Math.min(width - u, numBuffers); - - for (k = u, l = bufferPadding; l < ll; k += width, l++) { - for (b = 0; b < numBuffers; b++) { - colBuffers[b][l] = items[k + b]; - } - } - - currentBuffer = numBuffers; - } - - currentBuffer--; - var buffer = colBuffers[currentBuffer]; - this.extend(buffer, bufferPadding, height); - this.filter(buffer, bufferPadding, height); - - if (currentBuffer === 0) { - k = u - numBuffers + 1; - - for (l = bufferPadding; l < ll; k += width, l++) { - for (b = 0; b < numBuffers; b++) { - items[k + b] = colBuffers[b][l]; - } - } - } - } - } - - return { - width: width, - height: height, - items: items - }; - }; - - return Transform; - }(); - - var IrreversibleTransform = function IrreversibleTransformClosure() { - function IrreversibleTransform() { - Transform.call(this); - } - - IrreversibleTransform.prototype = Object.create(Transform.prototype); - - IrreversibleTransform.prototype.filter = function irreversibleTransformFilter(x, offset, length) { - var len = length >> 1; - offset = offset | 0; - var j, n, current, next; - var alpha = -1.586134342059924; - var beta = -0.052980118572961; - var gamma = 0.882911075530934; - var delta = 0.443506852043971; - var K = 1.230174104914001; - var K_ = 1 / K; - j = offset - 3; - - for (n = len + 4; n--; j += 2) { - x[j] *= K_; - } - - j = offset - 2; - current = delta * x[j - 1]; - - for (n = len + 3; n--; j += 2) { - next = delta * x[j + 1]; - x[j] = K * x[j] - current - next; - - if (n--) { - j += 2; - current = delta * x[j + 1]; - x[j] = K * x[j] - current - next; - } else { - break; - } - } - - j = offset - 1; - current = gamma * x[j - 1]; - - for (n = len + 2; n--; j += 2) { - next = gamma * x[j + 1]; - x[j] -= current + next; - - if (n--) { - j += 2; - current = gamma * x[j + 1]; - x[j] -= current + next; - } else { - break; - } - } - - j = offset; - current = beta * x[j - 1]; - - for (n = len + 1; n--; j += 2) { - next = beta * x[j + 1]; - x[j] -= current + next; - - if (n--) { - j += 2; - current = beta * x[j + 1]; - x[j] -= current + next; - } else { - break; - } - } - - if (len !== 0) { - j = offset + 1; - current = alpha * x[j - 1]; - - for (n = len; n--; j += 2) { - next = alpha * x[j + 1]; - x[j] -= current + next; - - if (n--) { - j += 2; - current = alpha * x[j + 1]; - x[j] -= current + next; - } else { - break; - } - } - } - }; - - return IrreversibleTransform; - }(); - - var ReversibleTransform = function ReversibleTransformClosure() { - function ReversibleTransform() { - Transform.call(this); - } - - ReversibleTransform.prototype = Object.create(Transform.prototype); - - ReversibleTransform.prototype.filter = function reversibleTransformFilter(x, offset, length) { - var len = length >> 1; - offset = offset | 0; - var j, n; - - for (j = offset, n = len + 1; n--; j += 2) { - x[j] -= x[j - 1] + x[j + 1] + 2 >> 2; - } - - for (j = offset + 1, n = len; n--; j += 2) { - x[j] += x[j - 1] + x[j + 1] >> 1; - } - }; - - return ReversibleTransform; - }(); - - return JpxImage; - }(); - - exports.JpxImage = JpxImage; - - /***/ }), - /* 167 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.calculateSHA512 = exports.calculateSHA384 = exports.calculateSHA256 = exports.calculateMD5 = exports.PDF20 = exports.PDF17 = exports.CipherTransformFactory = exports.ARCFourCipher = exports.AES256Cipher = exports.AES128Cipher = void 0; - - var _util = __w_extracthighlights_require__(6); - - var _primitives = __w_extracthighlights_require__(155); - - var _stream = __w_extracthighlights_require__(157); - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - - function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - - function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - - function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - - var ARCFourCipher = function ARCFourCipherClosure() { - function ARCFourCipher(key) { - this.a = 0; - this.b = 0; - var s = new Uint8Array(256); - var i, - j = 0, - tmp, - keyLength = key.length; - - for (i = 0; i < 256; ++i) { - s[i] = i; - } - - for (i = 0; i < 256; ++i) { - tmp = s[i]; - j = j + tmp + key[i % keyLength] & 0xFF; - s[i] = s[j]; - s[j] = tmp; - } - - this.s = s; - } - - ARCFourCipher.prototype = { - encryptBlock: function ARCFourCipher_encryptBlock(data) { - var i, - n = data.length, - tmp, - tmp2; - var a = this.a, - b = this.b, - s = this.s; - var output = new Uint8Array(n); - - for (i = 0; i < n; ++i) { - a = a + 1 & 0xFF; - tmp = s[a]; - b = b + tmp & 0xFF; - tmp2 = s[b]; - s[a] = tmp2; - s[b] = tmp; - output[i] = data[i] ^ s[tmp + tmp2 & 0xFF]; - } - - this.a = a; - this.b = b; - return output; - } - }; - ARCFourCipher.prototype.decryptBlock = ARCFourCipher.prototype.encryptBlock; - return ARCFourCipher; - }(); - - exports.ARCFourCipher = ARCFourCipher; - - var calculateMD5 = function calculateMD5Closure() { - var r = new Uint8Array([7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]); - var k = new Int32Array([-680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426, -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162, 1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632, 643717713, -373897302, -701558691, 38016083, -660478335, -405537848, 568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784, 1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556, -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222, -722521979, 76029189, -640364487, -421815835, 530742520, -995338651, -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606, -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649, -145523070, -1120210379, 718787259, -343485551]); - - function hash(data, offset, length) { - var h0 = 1732584193, - h1 = -271733879, - h2 = -1732584194, - h3 = 271733878; - var paddedLength = length + 72 & ~63; - var padded = new Uint8Array(paddedLength); - var i, j, n; - - for (i = 0; i < length; ++i) { - padded[i] = data[offset++]; - } - - padded[i++] = 0x80; - n = paddedLength - 8; - - while (i < n) { - padded[i++] = 0; - } - - padded[i++] = length << 3 & 0xFF; - padded[i++] = length >> 5 & 0xFF; - padded[i++] = length >> 13 & 0xFF; - padded[i++] = length >> 21 & 0xFF; - padded[i++] = length >>> 29 & 0xFF; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - var w = new Int32Array(16); - - for (i = 0; i < paddedLength;) { - for (j = 0; j < 16; ++j, i += 4) { - w[j] = padded[i] | padded[i + 1] << 8 | padded[i + 2] << 16 | padded[i + 3] << 24; - } - - var a = h0, - b = h1, - c = h2, - d = h3, - f, - g; - - for (j = 0; j < 64; ++j) { - if (j < 16) { - f = b & c | ~b & d; - g = j; - } else if (j < 32) { - f = d & b | ~d & c; - g = 5 * j + 1 & 15; - } else if (j < 48) { - f = b ^ c ^ d; - g = 3 * j + 5 & 15; - } else { - f = c ^ (b | ~d); - g = 7 * j & 15; - } - - var tmp = d, - rotateArg = a + f + k[j] + w[g] | 0, - rotate = r[j]; - d = c; - c = b; - b = b + (rotateArg << rotate | rotateArg >>> 32 - rotate) | 0; - a = tmp; - } - - h0 = h0 + a | 0; - h1 = h1 + b | 0; - h2 = h2 + c | 0; - h3 = h3 + d | 0; - } - - return new Uint8Array([h0 & 0xFF, h0 >> 8 & 0xFF, h0 >> 16 & 0xFF, h0 >>> 24 & 0xFF, h1 & 0xFF, h1 >> 8 & 0xFF, h1 >> 16 & 0xFF, h1 >>> 24 & 0xFF, h2 & 0xFF, h2 >> 8 & 0xFF, h2 >> 16 & 0xFF, h2 >>> 24 & 0xFF, h3 & 0xFF, h3 >> 8 & 0xFF, h3 >> 16 & 0xFF, h3 >>> 24 & 0xFF]); - } - - return hash; - }(); - - exports.calculateMD5 = calculateMD5; - - var Word64 = function Word64Closure() { - function Word64(highInteger, lowInteger) { - this.high = highInteger | 0; - this.low = lowInteger | 0; - } - - Word64.prototype = { - and: function Word64_and(word) { - this.high &= word.high; - this.low &= word.low; - }, - xor: function Word64_xor(word) { - this.high ^= word.high; - this.low ^= word.low; - }, - or: function Word64_or(word) { - this.high |= word.high; - this.low |= word.low; - }, - shiftRight: function Word64_shiftRight(places) { - if (places >= 32) { - this.low = this.high >>> places - 32 | 0; - this.high = 0; - } else { - this.low = this.low >>> places | this.high << 32 - places; - this.high = this.high >>> places | 0; - } - }, - shiftLeft: function Word64_shiftLeft(places) { - if (places >= 32) { - this.high = this.low << places - 32; - this.low = 0; - } else { - this.high = this.high << places | this.low >>> 32 - places; - this.low = this.low << places; - } - }, - rotateRight: function Word64_rotateRight(places) { - var low, high; - - if (places & 32) { - high = this.low; - low = this.high; - } else { - low = this.low; - high = this.high; - } - - places &= 31; - this.low = low >>> places | high << 32 - places; - this.high = high >>> places | low << 32 - places; - }, - not: function Word64_not() { - this.high = ~this.high; - this.low = ~this.low; - }, - add: function Word64_add(word) { - var lowAdd = (this.low >>> 0) + (word.low >>> 0); - var highAdd = (this.high >>> 0) + (word.high >>> 0); - - if (lowAdd > 0xFFFFFFFF) { - highAdd += 1; - } - - this.low = lowAdd | 0; - this.high = highAdd | 0; - }, - copyTo: function Word64_copyTo(bytes, offset) { - bytes[offset] = this.high >>> 24 & 0xFF; - bytes[offset + 1] = this.high >> 16 & 0xFF; - bytes[offset + 2] = this.high >> 8 & 0xFF; - bytes[offset + 3] = this.high & 0xFF; - bytes[offset + 4] = this.low >>> 24 & 0xFF; - bytes[offset + 5] = this.low >> 16 & 0xFF; - bytes[offset + 6] = this.low >> 8 & 0xFF; - bytes[offset + 7] = this.low & 0xFF; - }, - assign: function Word64_assign(word) { - this.high = word.high; - this.low = word.low; - } - }; - return Word64; - }(); - - var calculateSHA256 = function calculateSHA256Closure() { - function rotr(x, n) { - return x >>> n | x << 32 - n; - } - - function ch(x, y, z) { - return x & y ^ ~x & z; - } - - function maj(x, y, z) { - return x & y ^ x & z ^ y & z; - } - - function sigma(x) { - return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22); - } - - function sigmaPrime(x) { - return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25); - } - - function littleSigma(x) { - return rotr(x, 7) ^ rotr(x, 18) ^ x >>> 3; - } - - function littleSigmaPrime(x) { - return rotr(x, 17) ^ rotr(x, 19) ^ x >>> 10; - } - - var k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2]; - - function hash(data, offset, length) { - var h0 = 0x6a09e667, - h1 = 0xbb67ae85, - h2 = 0x3c6ef372, - h3 = 0xa54ff53a, - h4 = 0x510e527f, - h5 = 0x9b05688c, - h6 = 0x1f83d9ab, - h7 = 0x5be0cd19; - var paddedLength = Math.ceil((length + 9) / 64) * 64; - var padded = new Uint8Array(paddedLength); - var i, j, n; - - for (i = 0; i < length; ++i) { - padded[i] = data[offset++]; - } - - padded[i++] = 0x80; - n = paddedLength - 8; - - while (i < n) { - padded[i++] = 0; - } - - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = length >>> 29 & 0xFF; - padded[i++] = length >> 21 & 0xFF; - padded[i++] = length >> 13 & 0xFF; - padded[i++] = length >> 5 & 0xFF; - padded[i++] = length << 3 & 0xFF; - var w = new Uint32Array(64); - - for (i = 0; i < paddedLength;) { - for (j = 0; j < 16; ++j) { - w[j] = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3]; - i += 4; - } - - for (j = 16; j < 64; ++j) { - w[j] = littleSigmaPrime(w[j - 2]) + w[j - 7] + littleSigma(w[j - 15]) + w[j - 16] | 0; - } - - var a = h0, - b = h1, - c = h2, - d = h3, - e = h4, - f = h5, - g = h6, - h = h7, - t1, - t2; - - for (j = 0; j < 64; ++j) { - t1 = h + sigmaPrime(e) + ch(e, f, g) + k[j] + w[j]; - t2 = sigma(a) + maj(a, b, c); - h = g; - g = f; - f = e; - e = d + t1 | 0; - d = c; - c = b; - b = a; - a = t1 + t2 | 0; - } - - h0 = h0 + a | 0; - h1 = h1 + b | 0; - h2 = h2 + c | 0; - h3 = h3 + d | 0; - h4 = h4 + e | 0; - h5 = h5 + f | 0; - h6 = h6 + g | 0; - h7 = h7 + h | 0; - } - - return new Uint8Array([h0 >> 24 & 0xFF, h0 >> 16 & 0xFF, h0 >> 8 & 0xFF, h0 & 0xFF, h1 >> 24 & 0xFF, h1 >> 16 & 0xFF, h1 >> 8 & 0xFF, h1 & 0xFF, h2 >> 24 & 0xFF, h2 >> 16 & 0xFF, h2 >> 8 & 0xFF, h2 & 0xFF, h3 >> 24 & 0xFF, h3 >> 16 & 0xFF, h3 >> 8 & 0xFF, h3 & 0xFF, h4 >> 24 & 0xFF, h4 >> 16 & 0xFF, h4 >> 8 & 0xFF, h4 & 0xFF, h5 >> 24 & 0xFF, h5 >> 16 & 0xFF, h5 >> 8 & 0xFF, h5 & 0xFF, h6 >> 24 & 0xFF, h6 >> 16 & 0xFF, h6 >> 8 & 0xFF, h6 & 0xFF, h7 >> 24 & 0xFF, h7 >> 16 & 0xFF, h7 >> 8 & 0xFF, h7 & 0xFF]); - } - - return hash; - }(); - - exports.calculateSHA256 = calculateSHA256; - - var calculateSHA512 = function calculateSHA512Closure() { - function ch(result, x, y, z, tmp) { - result.assign(x); - result.and(y); - tmp.assign(x); - tmp.not(); - tmp.and(z); - result.xor(tmp); - } - - function maj(result, x, y, z, tmp) { - result.assign(x); - result.and(y); - tmp.assign(x); - tmp.and(z); - result.xor(tmp); - tmp.assign(y); - tmp.and(z); - result.xor(tmp); - } - - function sigma(result, x, tmp) { - result.assign(x); - result.rotateRight(28); - tmp.assign(x); - tmp.rotateRight(34); - result.xor(tmp); - tmp.assign(x); - tmp.rotateRight(39); - result.xor(tmp); - } - - function sigmaPrime(result, x, tmp) { - result.assign(x); - result.rotateRight(14); - tmp.assign(x); - tmp.rotateRight(18); - result.xor(tmp); - tmp.assign(x); - tmp.rotateRight(41); - result.xor(tmp); - } - - function littleSigma(result, x, tmp) { - result.assign(x); - result.rotateRight(1); - tmp.assign(x); - tmp.rotateRight(8); - result.xor(tmp); - tmp.assign(x); - tmp.shiftRight(7); - result.xor(tmp); - } - - function littleSigmaPrime(result, x, tmp) { - result.assign(x); - result.rotateRight(19); - tmp.assign(x); - tmp.rotateRight(61); - result.xor(tmp); - tmp.assign(x); - tmp.shiftRight(6); - result.xor(tmp); - } - - var k = [new Word64(0x428a2f98, 0xd728ae22), new Word64(0x71374491, 0x23ef65cd), new Word64(0xb5c0fbcf, 0xec4d3b2f), new Word64(0xe9b5dba5, 0x8189dbbc), new Word64(0x3956c25b, 0xf348b538), new Word64(0x59f111f1, 0xb605d019), new Word64(0x923f82a4, 0xaf194f9b), new Word64(0xab1c5ed5, 0xda6d8118), new Word64(0xd807aa98, 0xa3030242), new Word64(0x12835b01, 0x45706fbe), new Word64(0x243185be, 0x4ee4b28c), new Word64(0x550c7dc3, 0xd5ffb4e2), new Word64(0x72be5d74, 0xf27b896f), new Word64(0x80deb1fe, 0x3b1696b1), new Word64(0x9bdc06a7, 0x25c71235), new Word64(0xc19bf174, 0xcf692694), new Word64(0xe49b69c1, 0x9ef14ad2), new Word64(0xefbe4786, 0x384f25e3), new Word64(0x0fc19dc6, 0x8b8cd5b5), new Word64(0x240ca1cc, 0x77ac9c65), new Word64(0x2de92c6f, 0x592b0275), new Word64(0x4a7484aa, 0x6ea6e483), new Word64(0x5cb0a9dc, 0xbd41fbd4), new Word64(0x76f988da, 0x831153b5), new Word64(0x983e5152, 0xee66dfab), new Word64(0xa831c66d, 0x2db43210), new Word64(0xb00327c8, 0x98fb213f), new Word64(0xbf597fc7, 0xbeef0ee4), new Word64(0xc6e00bf3, 0x3da88fc2), new Word64(0xd5a79147, 0x930aa725), new Word64(0x06ca6351, 0xe003826f), new Word64(0x14292967, 0x0a0e6e70), new Word64(0x27b70a85, 0x46d22ffc), new Word64(0x2e1b2138, 0x5c26c926), new Word64(0x4d2c6dfc, 0x5ac42aed), new Word64(0x53380d13, 0x9d95b3df), new Word64(0x650a7354, 0x8baf63de), new Word64(0x766a0abb, 0x3c77b2a8), new Word64(0x81c2c92e, 0x47edaee6), new Word64(0x92722c85, 0x1482353b), new Word64(0xa2bfe8a1, 0x4cf10364), new Word64(0xa81a664b, 0xbc423001), new Word64(0xc24b8b70, 0xd0f89791), new Word64(0xc76c51a3, 0x0654be30), new Word64(0xd192e819, 0xd6ef5218), new Word64(0xd6990624, 0x5565a910), new Word64(0xf40e3585, 0x5771202a), new Word64(0x106aa070, 0x32bbd1b8), new Word64(0x19a4c116, 0xb8d2d0c8), new Word64(0x1e376c08, 0x5141ab53), new Word64(0x2748774c, 0xdf8eeb99), new Word64(0x34b0bcb5, 0xe19b48a8), new Word64(0x391c0cb3, 0xc5c95a63), new Word64(0x4ed8aa4a, 0xe3418acb), new Word64(0x5b9cca4f, 0x7763e373), new Word64(0x682e6ff3, 0xd6b2b8a3), new Word64(0x748f82ee, 0x5defb2fc), new Word64(0x78a5636f, 0x43172f60), new Word64(0x84c87814, 0xa1f0ab72), new Word64(0x8cc70208, 0x1a6439ec), new Word64(0x90befffa, 0x23631e28), new Word64(0xa4506ceb, 0xde82bde9), new Word64(0xbef9a3f7, 0xb2c67915), new Word64(0xc67178f2, 0xe372532b), new Word64(0xca273ece, 0xea26619c), new Word64(0xd186b8c7, 0x21c0c207), new Word64(0xeada7dd6, 0xcde0eb1e), new Word64(0xf57d4f7f, 0xee6ed178), new Word64(0x06f067aa, 0x72176fba), new Word64(0x0a637dc5, 0xa2c898a6), new Word64(0x113f9804, 0xbef90dae), new Word64(0x1b710b35, 0x131c471b), new Word64(0x28db77f5, 0x23047d84), new Word64(0x32caab7b, 0x40c72493), new Word64(0x3c9ebe0a, 0x15c9bebc), new Word64(0x431d67c4, 0x9c100d4c), new Word64(0x4cc5d4be, 0xcb3e42b6), new Word64(0x597f299c, 0xfc657e2a), new Word64(0x5fcb6fab, 0x3ad6faec), new Word64(0x6c44198c, 0x4a475817)]; - - function hash(data, offset, length, mode384) { - mode384 = !!mode384; - var h0, h1, h2, h3, h4, h5, h6, h7; - - if (!mode384) { - h0 = new Word64(0x6a09e667, 0xf3bcc908); - h1 = new Word64(0xbb67ae85, 0x84caa73b); - h2 = new Word64(0x3c6ef372, 0xfe94f82b); - h3 = new Word64(0xa54ff53a, 0x5f1d36f1); - h4 = new Word64(0x510e527f, 0xade682d1); - h5 = new Word64(0x9b05688c, 0x2b3e6c1f); - h6 = new Word64(0x1f83d9ab, 0xfb41bd6b); - h7 = new Word64(0x5be0cd19, 0x137e2179); - } else { - h0 = new Word64(0xcbbb9d5d, 0xc1059ed8); - h1 = new Word64(0x629a292a, 0x367cd507); - h2 = new Word64(0x9159015a, 0x3070dd17); - h3 = new Word64(0x152fecd8, 0xf70e5939); - h4 = new Word64(0x67332667, 0xffc00b31); - h5 = new Word64(0x8eb44a87, 0x68581511); - h6 = new Word64(0xdb0c2e0d, 0x64f98fa7); - h7 = new Word64(0x47b5481d, 0xbefa4fa4); - } - - var paddedLength = Math.ceil((length + 17) / 128) * 128; - var padded = new Uint8Array(paddedLength); - var i, j, n; - - for (i = 0; i < length; ++i) { - padded[i] = data[offset++]; - } - - padded[i++] = 0x80; - n = paddedLength - 16; - - while (i < n) { - padded[i++] = 0; - } - - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = length >>> 29 & 0xFF; - padded[i++] = length >> 21 & 0xFF; - padded[i++] = length >> 13 & 0xFF; - padded[i++] = length >> 5 & 0xFF; - padded[i++] = length << 3 & 0xFF; - var w = new Array(80); - - for (i = 0; i < 80; i++) { - w[i] = new Word64(0, 0); - } - - var a = new Word64(0, 0), - b = new Word64(0, 0), - c = new Word64(0, 0); - var d = new Word64(0, 0), - e = new Word64(0, 0), - f = new Word64(0, 0); - var g = new Word64(0, 0), - h = new Word64(0, 0); - var t1 = new Word64(0, 0), - t2 = new Word64(0, 0); - var tmp1 = new Word64(0, 0), - tmp2 = new Word64(0, 0), - tmp3; - - for (i = 0; i < paddedLength;) { - for (j = 0; j < 16; ++j) { - w[j].high = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3]; - w[j].low = padded[i + 4] << 24 | padded[i + 5] << 16 | padded[i + 6] << 8 | padded[i + 7]; - i += 8; - } - - for (j = 16; j < 80; ++j) { - tmp3 = w[j]; - littleSigmaPrime(tmp3, w[j - 2], tmp2); - tmp3.add(w[j - 7]); - littleSigma(tmp1, w[j - 15], tmp2); - tmp3.add(tmp1); - tmp3.add(w[j - 16]); - } - - a.assign(h0); - b.assign(h1); - c.assign(h2); - d.assign(h3); - e.assign(h4); - f.assign(h5); - g.assign(h6); - h.assign(h7); - - for (j = 0; j < 80; ++j) { - t1.assign(h); - sigmaPrime(tmp1, e, tmp2); - t1.add(tmp1); - ch(tmp1, e, f, g, tmp2); - t1.add(tmp1); - t1.add(k[j]); - t1.add(w[j]); - sigma(t2, a, tmp2); - maj(tmp1, a, b, c, tmp2); - t2.add(tmp1); - tmp3 = h; - h = g; - g = f; - f = e; - d.add(t1); - e = d; - d = c; - c = b; - b = a; - tmp3.assign(t1); - tmp3.add(t2); - a = tmp3; - } - - h0.add(a); - h1.add(b); - h2.add(c); - h3.add(d); - h4.add(e); - h5.add(f); - h6.add(g); - h7.add(h); - } - - var result; - - if (!mode384) { - result = new Uint8Array(64); - h0.copyTo(result, 0); - h1.copyTo(result, 8); - h2.copyTo(result, 16); - h3.copyTo(result, 24); - h4.copyTo(result, 32); - h5.copyTo(result, 40); - h6.copyTo(result, 48); - h7.copyTo(result, 56); - } else { - result = new Uint8Array(48); - h0.copyTo(result, 0); - h1.copyTo(result, 8); - h2.copyTo(result, 16); - h3.copyTo(result, 24); - h4.copyTo(result, 32); - h5.copyTo(result, 40); - } - - return result; - } - - return hash; - }(); - - exports.calculateSHA512 = calculateSHA512; - - var calculateSHA384 = function calculateSHA384Closure() { - function hash(data, offset, length) { - return calculateSHA512(data, offset, length, true); - } - - return hash; - }(); - - exports.calculateSHA384 = calculateSHA384; - - var NullCipher = function NullCipherClosure() { - function NullCipher() {} - - NullCipher.prototype = { - decryptBlock: function NullCipher_decryptBlock(data) { - return data; - } - }; - return NullCipher; - }(); - - var AESBaseCipher = - /*#__PURE__*/ - function () { - function AESBaseCipher() { - _classCallCheck(this, AESBaseCipher); - - if (this.constructor === AESBaseCipher) { - (0, _util.unreachable)('Cannot initialize AESBaseCipher.'); - } - - this._s = new Uint8Array([0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]); - this._inv_s = new Uint8Array([0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]); - this._mix = new Uint32Array([0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]); - this._mixCol = new Uint8Array(256); - - for (var i = 0; i < 256; i++) { - if (i < 128) { - this._mixCol[i] = i << 1; - } else { - this._mixCol[i] = i << 1 ^ 0x1b; - } - } - - this.buffer = new Uint8Array(16); - this.bufferPosition = 0; - } - - _createClass(AESBaseCipher, [{ - key: "_expandKey", - value: function _expandKey(cipherKey) { - (0, _util.unreachable)('Cannot call `_expandKey` on the base class'); - } - }, { - key: "_decrypt", - value: function _decrypt(input, key) { - var t, u, v; - var state = new Uint8Array(16); - state.set(input); - - for (var j = 0, k = this._keySize; j < 16; ++j, ++k) { - state[j] ^= key[k]; - } - - for (var i = this._cyclesOfRepetition - 1; i >= 1; --i) { - t = state[13]; - state[13] = state[9]; - state[9] = state[5]; - state[5] = state[1]; - state[1] = t; - t = state[14]; - u = state[10]; - state[14] = state[6]; - state[10] = state[2]; - state[6] = t; - state[2] = u; - t = state[15]; - u = state[11]; - v = state[7]; - state[15] = state[3]; - state[11] = t; - state[7] = u; - state[3] = v; - - for (var _j = 0; _j < 16; ++_j) { - state[_j] = this._inv_s[state[_j]]; - } - - for (var _j2 = 0, _k = i * 16; _j2 < 16; ++_j2, ++_k) { - state[_j2] ^= key[_k]; - } - - for (var _j3 = 0; _j3 < 16; _j3 += 4) { - var s0 = this._mix[state[_j3]]; - var s1 = this._mix[state[_j3 + 1]]; - var s2 = this._mix[state[_j3 + 2]]; - var s3 = this._mix[state[_j3 + 3]]; - t = s0 ^ s1 >>> 8 ^ s1 << 24 ^ s2 >>> 16 ^ s2 << 16 ^ s3 >>> 24 ^ s3 << 8; - state[_j3] = t >>> 24 & 0xFF; - state[_j3 + 1] = t >> 16 & 0xFF; - state[_j3 + 2] = t >> 8 & 0xFF; - state[_j3 + 3] = t & 0xFF; - } - } - - t = state[13]; - state[13] = state[9]; - state[9] = state[5]; - state[5] = state[1]; - state[1] = t; - t = state[14]; - u = state[10]; - state[14] = state[6]; - state[10] = state[2]; - state[6] = t; - state[2] = u; - t = state[15]; - u = state[11]; - v = state[7]; - state[15] = state[3]; - state[11] = t; - state[7] = u; - state[3] = v; - - for (var _j4 = 0; _j4 < 16; ++_j4) { - state[_j4] = this._inv_s[state[_j4]]; - state[_j4] ^= key[_j4]; - } - - return state; - } - }, { - key: "_encrypt", - value: function _encrypt(input, key) { - var s = this._s; - var t, u, v; - var state = new Uint8Array(16); - state.set(input); - - for (var j = 0; j < 16; ++j) { - state[j] ^= key[j]; - } - - for (var i = 1; i < this._cyclesOfRepetition; i++) { - for (var _j5 = 0; _j5 < 16; ++_j5) { - state[_j5] = s[state[_j5]]; - } - - v = state[1]; - state[1] = state[5]; - state[5] = state[9]; - state[9] = state[13]; - state[13] = v; - v = state[2]; - u = state[6]; - state[2] = state[10]; - state[6] = state[14]; - state[10] = v; - state[14] = u; - v = state[3]; - u = state[7]; - t = state[11]; - state[3] = state[15]; - state[7] = v; - state[11] = u; - state[15] = t; - - for (var _j6 = 0; _j6 < 16; _j6 += 4) { - var s0 = state[_j6 + 0]; - var s1 = state[_j6 + 1]; - var s2 = state[_j6 + 2]; - var s3 = state[_j6 + 3]; - t = s0 ^ s1 ^ s2 ^ s3; - state[_j6 + 0] ^= t ^ this._mixCol[s0 ^ s1]; - state[_j6 + 1] ^= t ^ this._mixCol[s1 ^ s2]; - state[_j6 + 2] ^= t ^ this._mixCol[s2 ^ s3]; - state[_j6 + 3] ^= t ^ this._mixCol[s3 ^ s0]; - } - - for (var _j7 = 0, k = i * 16; _j7 < 16; ++_j7, ++k) { - state[_j7] ^= key[k]; - } - } - - for (var _j8 = 0; _j8 < 16; ++_j8) { - state[_j8] = s[state[_j8]]; - } - - v = state[1]; - state[1] = state[5]; - state[5] = state[9]; - state[9] = state[13]; - state[13] = v; - v = state[2]; - u = state[6]; - state[2] = state[10]; - state[6] = state[14]; - state[10] = v; - state[14] = u; - v = state[3]; - u = state[7]; - t = state[11]; - state[3] = state[15]; - state[7] = v; - state[11] = u; - state[15] = t; - - for (var _j9 = 0, _k2 = this._keySize; _j9 < 16; ++_j9, ++_k2) { - state[_j9] ^= key[_k2]; - } - - return state; - } - }, { - key: "_decryptBlock2", - value: function _decryptBlock2(data, finalize) { - var sourceLength = data.length; - var buffer = this.buffer, - bufferLength = this.bufferPosition; - var result = [], - iv = this.iv; - - for (var i = 0; i < sourceLength; ++i) { - buffer[bufferLength] = data[i]; - ++bufferLength; - - if (bufferLength < 16) { - continue; - } - - var plain = this._decrypt(buffer, this._key); - - for (var j = 0; j < 16; ++j) { - plain[j] ^= iv[j]; - } - - iv = buffer; - result.push(plain); - buffer = new Uint8Array(16); - bufferLength = 0; - } - - this.buffer = buffer; - this.bufferLength = bufferLength; - this.iv = iv; - - if (result.length === 0) { - return new Uint8Array(0); - } - - var outputLength = 16 * result.length; - - if (finalize) { - var lastBlock = result[result.length - 1]; - var psLen = lastBlock[15]; - - if (psLen <= 16) { - for (var _i = 15, ii = 16 - psLen; _i >= ii; --_i) { - if (lastBlock[_i] !== psLen) { - psLen = 0; - break; - } - } - - outputLength -= psLen; - result[result.length - 1] = lastBlock.subarray(0, 16 - psLen); - } - } - - var output = new Uint8Array(outputLength); - - for (var _i2 = 0, _j10 = 0, _ii = result.length; _i2 < _ii; ++_i2, _j10 += 16) { - output.set(result[_i2], _j10); - } - - return output; - } - }, { - key: "decryptBlock", - value: function decryptBlock(data, finalize) { - var iv = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var sourceLength = data.length; - var buffer = this.buffer, - bufferLength = this.bufferPosition; - - if (iv) { - this.iv = iv; - } else { - for (var i = 0; bufferLength < 16 && i < sourceLength; ++i, ++bufferLength) { - buffer[bufferLength] = data[i]; - } - - if (bufferLength < 16) { - this.bufferLength = bufferLength; - return new Uint8Array(0); - } - - this.iv = buffer; - data = data.subarray(16); - } - - this.buffer = new Uint8Array(16); - this.bufferLength = 0; - this.decryptBlock = this._decryptBlock2; - return this.decryptBlock(data, finalize); - } - }, { - key: "encrypt", - value: function encrypt(data, iv) { - var sourceLength = data.length; - var buffer = this.buffer, - bufferLength = this.bufferPosition; - var result = []; - - if (!iv) { - iv = new Uint8Array(16); - } - - for (var i = 0; i < sourceLength; ++i) { - buffer[bufferLength] = data[i]; - ++bufferLength; - - if (bufferLength < 16) { - continue; - } - - for (var j = 0; j < 16; ++j) { - buffer[j] ^= iv[j]; - } - - var cipher = this._encrypt(buffer, this._key); - - iv = cipher; - result.push(cipher); - buffer = new Uint8Array(16); - bufferLength = 0; - } - - this.buffer = buffer; - this.bufferLength = bufferLength; - this.iv = iv; - - if (result.length === 0) { - return new Uint8Array(0); - } - - var outputLength = 16 * result.length; - var output = new Uint8Array(outputLength); - - for (var _i3 = 0, _j11 = 0, ii = result.length; _i3 < ii; ++_i3, _j11 += 16) { - output.set(result[_i3], _j11); - } - - return output; - } - }]); - - return AESBaseCipher; - }(); - - var AES128Cipher = - /*#__PURE__*/ - function (_AESBaseCipher) { - _inherits(AES128Cipher, _AESBaseCipher); - - function AES128Cipher(key) { - var _this; - - _classCallCheck(this, AES128Cipher); - - _this = _possibleConstructorReturn(this, _getPrototypeOf(AES128Cipher).call(this)); - _this._cyclesOfRepetition = 10; - _this._keySize = 160; - _this._rcon = new Uint8Array([0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d]); - _this._key = _this._expandKey(key); - return _this; - } - - _createClass(AES128Cipher, [{ - key: "_expandKey", - value: function _expandKey(cipherKey) { - var b = 176; - var s = this._s; - var rcon = this._rcon; - var result = new Uint8Array(b); - result.set(cipherKey); - - for (var j = 16, i = 1; j < b; ++i) { - var t1 = result[j - 3]; - var t2 = result[j - 2]; - var t3 = result[j - 1]; - var t4 = result[j - 4]; - t1 = s[t1]; - t2 = s[t2]; - t3 = s[t3]; - t4 = s[t4]; - t1 = t1 ^ rcon[i]; - - for (var n = 0; n < 4; ++n) { - result[j] = t1 ^= result[j - 16]; - j++; - result[j] = t2 ^= result[j - 16]; - j++; - result[j] = t3 ^= result[j - 16]; - j++; - result[j] = t4 ^= result[j - 16]; - j++; - } - } - - return result; - } - }]); - - return AES128Cipher; - }(AESBaseCipher); - - exports.AES128Cipher = AES128Cipher; - - var AES256Cipher = - /*#__PURE__*/ - function (_AESBaseCipher2) { - _inherits(AES256Cipher, _AESBaseCipher2); - - function AES256Cipher(key) { - var _this2; - - _classCallCheck(this, AES256Cipher); - - _this2 = _possibleConstructorReturn(this, _getPrototypeOf(AES256Cipher).call(this)); - _this2._cyclesOfRepetition = 14; - _this2._keySize = 224; - _this2._key = _this2._expandKey(key); - return _this2; - } - - _createClass(AES256Cipher, [{ - key: "_expandKey", - value: function _expandKey(cipherKey) { - var b = 240; - var s = this._s; - var result = new Uint8Array(b); - result.set(cipherKey); - var r = 1; - var t1, t2, t3, t4; - - for (var j = 32, i = 1; j < b; ++i) { - if (j % 32 === 16) { - t1 = s[t1]; - t2 = s[t2]; - t3 = s[t3]; - t4 = s[t4]; - } else if (j % 32 === 0) { - t1 = result[j - 3]; - t2 = result[j - 2]; - t3 = result[j - 1]; - t4 = result[j - 4]; - t1 = s[t1]; - t2 = s[t2]; - t3 = s[t3]; - t4 = s[t4]; - t1 = t1 ^ r; - - if ((r <<= 1) >= 256) { - r = (r ^ 0x1b) & 0xFF; - } - } - - for (var n = 0; n < 4; ++n) { - result[j] = t1 ^= result[j - 32]; - j++; - result[j] = t2 ^= result[j - 32]; - j++; - result[j] = t3 ^= result[j - 32]; - j++; - result[j] = t4 ^= result[j - 32]; - j++; - } - } - - return result; - } - }]); - - return AES256Cipher; - }(AESBaseCipher); - - exports.AES256Cipher = AES256Cipher; - - var PDF17 = function PDF17Closure() { - function compareByteArrays(array1, array2) { - if (array1.length !== array2.length) { - return false; - } - - for (var i = 0; i < array1.length; i++) { - if (array1[i] !== array2[i]) { - return false; - } - } - - return true; - } - - function PDF17() {} - - PDF17.prototype = { - checkOwnerPassword: function PDF17_checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) { - var hashData = new Uint8Array(password.length + 56); - hashData.set(password, 0); - hashData.set(ownerValidationSalt, password.length); - hashData.set(userBytes, password.length + ownerValidationSalt.length); - var result = calculateSHA256(hashData, 0, hashData.length); - return compareByteArrays(result, ownerPassword); - }, - checkUserPassword: function PDF17_checkUserPassword(password, userValidationSalt, userPassword) { - var hashData = new Uint8Array(password.length + 8); - hashData.set(password, 0); - hashData.set(userValidationSalt, password.length); - var result = calculateSHA256(hashData, 0, hashData.length); - return compareByteArrays(result, userPassword); - }, - getOwnerKey: function PDF17_getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) { - var hashData = new Uint8Array(password.length + 56); - hashData.set(password, 0); - hashData.set(ownerKeySalt, password.length); - hashData.set(userBytes, password.length + ownerKeySalt.length); - var key = calculateSHA256(hashData, 0, hashData.length); - var cipher = new AES256Cipher(key); - return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16)); - }, - getUserKey: function PDF17_getUserKey(password, userKeySalt, userEncryption) { - var hashData = new Uint8Array(password.length + 8); - hashData.set(password, 0); - hashData.set(userKeySalt, password.length); - var key = calculateSHA256(hashData, 0, hashData.length); - var cipher = new AES256Cipher(key); - return cipher.decryptBlock(userEncryption, false, new Uint8Array(16)); - } - }; - return PDF17; - }(); - - exports.PDF17 = PDF17; - - var PDF20 = function PDF20Closure() { - function concatArrays(array1, array2) { - var t = new Uint8Array(array1.length + array2.length); - t.set(array1, 0); - t.set(array2, array1.length); - return t; - } - - function calculatePDF20Hash(password, input, userBytes) { - var k = calculateSHA256(input, 0, input.length).subarray(0, 32); - var e = [0]; - var i = 0; - - while (i < 64 || e[e.length - 1] > i - 32) { - var arrayLength = password.length + k.length + userBytes.length; - var k1 = new Uint8Array(arrayLength * 64); - var array = concatArrays(password, k); - array = concatArrays(array, userBytes); - - for (var j = 0, pos = 0; j < 64; j++, pos += arrayLength) { - k1.set(array, pos); - } - - var cipher = new AES128Cipher(k.subarray(0, 16)); - e = cipher.encrypt(k1, k.subarray(16, 32)); - var remainder = 0; - - for (var z = 0; z < 16; z++) { - remainder *= 256 % 3; - remainder %= 3; - remainder += (e[z] >>> 0) % 3; - remainder %= 3; - } - - if (remainder === 0) { - k = calculateSHA256(e, 0, e.length); - } else if (remainder === 1) { - k = calculateSHA384(e, 0, e.length); - } else if (remainder === 2) { - k = calculateSHA512(e, 0, e.length); - } - - i++; - } - - return k.subarray(0, 32); - } - - function PDF20() {} - - function compareByteArrays(array1, array2) { - if (array1.length !== array2.length) { - return false; - } - - for (var i = 0; i < array1.length; i++) { - if (array1[i] !== array2[i]) { - return false; - } - } - - return true; - } - - PDF20.prototype = { - hash: function PDF20_hash(password, concatBytes, userBytes) { - return calculatePDF20Hash(password, concatBytes, userBytes); - }, - checkOwnerPassword: function PDF20_checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) { - var hashData = new Uint8Array(password.length + 56); - hashData.set(password, 0); - hashData.set(ownerValidationSalt, password.length); - hashData.set(userBytes, password.length + ownerValidationSalt.length); - var result = calculatePDF20Hash(password, hashData, userBytes); - return compareByteArrays(result, ownerPassword); - }, - checkUserPassword: function PDF20_checkUserPassword(password, userValidationSalt, userPassword) { - var hashData = new Uint8Array(password.length + 8); - hashData.set(password, 0); - hashData.set(userValidationSalt, password.length); - var result = calculatePDF20Hash(password, hashData, []); - return compareByteArrays(result, userPassword); - }, - getOwnerKey: function PDF20_getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) { - var hashData = new Uint8Array(password.length + 56); - hashData.set(password, 0); - hashData.set(ownerKeySalt, password.length); - hashData.set(userBytes, password.length + ownerKeySalt.length); - var key = calculatePDF20Hash(password, hashData, userBytes); - var cipher = new AES256Cipher(key); - return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16)); - }, - getUserKey: function PDF20_getUserKey(password, userKeySalt, userEncryption) { - var hashData = new Uint8Array(password.length + 8); - hashData.set(password, 0); - hashData.set(userKeySalt, password.length); - var key = calculatePDF20Hash(password, hashData, []); - var cipher = new AES256Cipher(key); - return cipher.decryptBlock(userEncryption, false, new Uint8Array(16)); - } - }; - return PDF20; - }(); - - exports.PDF20 = PDF20; - - var CipherTransform = function CipherTransformClosure() { - function CipherTransform(stringCipherConstructor, streamCipherConstructor) { - this.StringCipherConstructor = stringCipherConstructor; - this.StreamCipherConstructor = streamCipherConstructor; - } - - CipherTransform.prototype = { - createStream: function CipherTransform_createStream(stream, length) { - var cipher = new this.StreamCipherConstructor(); - return new _stream.DecryptStream(stream, length, function cipherTransformDecryptStream(data, finalize) { - return cipher.decryptBlock(data, finalize); - }); - }, - decryptString: function CipherTransform_decryptString(s) { - var cipher = new this.StringCipherConstructor(); - var data = (0, _util.stringToBytes)(s); - data = cipher.decryptBlock(data, true); - return (0, _util.bytesToString)(data); - } - }; - return CipherTransform; - }(); - - var CipherTransformFactory = function CipherTransformFactoryClosure() { - var defaultPasswordBytes = new Uint8Array([0x28, 0xBF, 0x4E, 0x5E, 0x4E, 0x75, 0x8A, 0x41, 0x64, 0x00, 0x4E, 0x56, 0xFF, 0xFA, 0x01, 0x08, 0x2E, 0x2E, 0x00, 0xB6, 0xD0, 0x68, 0x3E, 0x80, 0x2F, 0x0C, 0xA9, 0xFE, 0x64, 0x53, 0x69, 0x7A]); - - function createEncryptionKey20(revision, password, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms) { - if (password) { - var passwordLength = Math.min(127, password.length); - password = password.subarray(0, passwordLength); - } else { - password = []; - } - - var pdfAlgorithm; - - if (revision === 6) { - pdfAlgorithm = new PDF20(); - } else { - pdfAlgorithm = new PDF17(); - } - - if (pdfAlgorithm.checkUserPassword(password, userValidationSalt, userPassword)) { - return pdfAlgorithm.getUserKey(password, userKeySalt, userEncryption); - } else if (password.length && pdfAlgorithm.checkOwnerPassword(password, ownerValidationSalt, uBytes, ownerPassword)) { - return pdfAlgorithm.getOwnerKey(password, ownerKeySalt, uBytes, ownerEncryption); - } - - return null; - } - - function prepareKeyData(fileId, password, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata) { - var hashDataSize = 40 + ownerPassword.length + fileId.length; - var hashData = new Uint8Array(hashDataSize), - i = 0, - j, - n; - - if (password) { - n = Math.min(32, password.length); - - for (; i < n; ++i) { - hashData[i] = password[i]; - } - } - - j = 0; - - while (i < 32) { - hashData[i++] = defaultPasswordBytes[j++]; - } - - for (j = 0, n = ownerPassword.length; j < n; ++j) { - hashData[i++] = ownerPassword[j]; - } - - hashData[i++] = flags & 0xFF; - hashData[i++] = flags >> 8 & 0xFF; - hashData[i++] = flags >> 16 & 0xFF; - hashData[i++] = flags >>> 24 & 0xFF; - - for (j = 0, n = fileId.length; j < n; ++j) { - hashData[i++] = fileId[j]; - } - - if (revision >= 4 && !encryptMetadata) { - hashData[i++] = 0xFF; - hashData[i++] = 0xFF; - hashData[i++] = 0xFF; - hashData[i++] = 0xFF; - } - - var hash = calculateMD5(hashData, 0, i); - var keyLengthInBytes = keyLength >> 3; - - if (revision >= 3) { - for (j = 0; j < 50; ++j) { - hash = calculateMD5(hash, 0, keyLengthInBytes); - } - } - - var encryptionKey = hash.subarray(0, keyLengthInBytes); - var cipher, checkData; - - if (revision >= 3) { - for (i = 0; i < 32; ++i) { - hashData[i] = defaultPasswordBytes[i]; - } - - for (j = 0, n = fileId.length; j < n; ++j) { - hashData[i++] = fileId[j]; - } - - cipher = new ARCFourCipher(encryptionKey); - checkData = cipher.encryptBlock(calculateMD5(hashData, 0, i)); - n = encryptionKey.length; - var derivedKey = new Uint8Array(n), - k; - - for (j = 1; j <= 19; ++j) { - for (k = 0; k < n; ++k) { - derivedKey[k] = encryptionKey[k] ^ j; - } - - cipher = new ARCFourCipher(derivedKey); - checkData = cipher.encryptBlock(checkData); - } - - for (j = 0, n = checkData.length; j < n; ++j) { - if (userPassword[j] !== checkData[j]) { - return null; - } - } - } else { - cipher = new ARCFourCipher(encryptionKey); - checkData = cipher.encryptBlock(defaultPasswordBytes); - - for (j = 0, n = checkData.length; j < n; ++j) { - if (userPassword[j] !== checkData[j]) { - return null; - } - } - } - - return encryptionKey; - } - - function decodeUserPassword(password, ownerPassword, revision, keyLength) { - var hashData = new Uint8Array(32), - i = 0, - j, - n; - n = Math.min(32, password.length); - - for (; i < n; ++i) { - hashData[i] = password[i]; - } - - j = 0; - - while (i < 32) { - hashData[i++] = defaultPasswordBytes[j++]; - } - - var hash = calculateMD5(hashData, 0, i); - var keyLengthInBytes = keyLength >> 3; - - if (revision >= 3) { - for (j = 0; j < 50; ++j) { - hash = calculateMD5(hash, 0, hash.length); - } - } - - var cipher, userPassword; - - if (revision >= 3) { - userPassword = ownerPassword; - var derivedKey = new Uint8Array(keyLengthInBytes), - k; - - for (j = 19; j >= 0; j--) { - for (k = 0; k < keyLengthInBytes; ++k) { - derivedKey[k] = hash[k] ^ j; - } - - cipher = new ARCFourCipher(derivedKey); - userPassword = cipher.encryptBlock(userPassword); - } - } else { - cipher = new ARCFourCipher(hash.subarray(0, keyLengthInBytes)); - userPassword = cipher.encryptBlock(ownerPassword); - } - - return userPassword; - } - - var identityName = _primitives.Name.get('Identity'); - - function CipherTransformFactory(dict, fileId, password) { - var filter = dict.get('Filter'); - - if (!(0, _primitives.isName)(filter, 'Standard')) { - throw new _util.FormatError('unknown encryption method'); - } - - this.dict = dict; - var algorithm = dict.get('V'); - - if (!Number.isInteger(algorithm) || algorithm !== 1 && algorithm !== 2 && algorithm !== 4 && algorithm !== 5) { - throw new _util.FormatError('unsupported encryption algorithm'); - } - - this.algorithm = algorithm; - var keyLength = dict.get('Length'); - - if (!keyLength) { - if (algorithm <= 3) { - keyLength = 40; - } else { - var cfDict = dict.get('CF'); - var streamCryptoName = dict.get('StmF'); - - if ((0, _primitives.isDict)(cfDict) && (0, _primitives.isName)(streamCryptoName)) { - cfDict.suppressEncryption = true; - var handlerDict = cfDict.get(streamCryptoName.name); - keyLength = handlerDict && handlerDict.get('Length') || 128; - - if (keyLength < 40) { - keyLength <<= 3; - } - } - } - } - - if (!Number.isInteger(keyLength) || keyLength < 40 || keyLength % 8 !== 0) { - throw new _util.FormatError('invalid key length'); - } - - var ownerPassword = (0, _util.stringToBytes)(dict.get('O')).subarray(0, 32); - var userPassword = (0, _util.stringToBytes)(dict.get('U')).subarray(0, 32); - var flags = dict.get('P'); - var revision = dict.get('R'); - var encryptMetadata = (algorithm === 4 || algorithm === 5) && dict.get('EncryptMetadata') !== false; - this.encryptMetadata = encryptMetadata; - var fileIdBytes = (0, _util.stringToBytes)(fileId); - var passwordBytes; - - if (password) { - if (revision === 6) { - try { - password = (0, _util.utf8StringToString)(password); - } catch (ex) { - (0, _util.warn)('CipherTransformFactory: ' + 'Unable to convert UTF8 encoded password.'); - } - } - - passwordBytes = (0, _util.stringToBytes)(password); - } - - var encryptionKey; - - if (algorithm !== 5) { - encryptionKey = prepareKeyData(fileIdBytes, passwordBytes, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata); - } else { - var ownerValidationSalt = (0, _util.stringToBytes)(dict.get('O')).subarray(32, 40); - var ownerKeySalt = (0, _util.stringToBytes)(dict.get('O')).subarray(40, 48); - var uBytes = (0, _util.stringToBytes)(dict.get('U')).subarray(0, 48); - var userValidationSalt = (0, _util.stringToBytes)(dict.get('U')).subarray(32, 40); - var userKeySalt = (0, _util.stringToBytes)(dict.get('U')).subarray(40, 48); - var ownerEncryption = (0, _util.stringToBytes)(dict.get('OE')); - var userEncryption = (0, _util.stringToBytes)(dict.get('UE')); - (0, _util.stringToBytes)(dict.get('Perms')); - encryptionKey = createEncryptionKey20(revision, passwordBytes, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption); - } - - if (!encryptionKey && !password) { - throw new _util.PasswordException('No password given', _util.PasswordResponses.NEED_PASSWORD); - } else if (!encryptionKey && password) { - var decodedPassword = decodeUserPassword(passwordBytes, ownerPassword, revision, keyLength); - encryptionKey = prepareKeyData(fileIdBytes, decodedPassword, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata); - } - - if (!encryptionKey) { - throw new _util.PasswordException('Incorrect Password', _util.PasswordResponses.INCORRECT_PASSWORD); - } - - this.encryptionKey = encryptionKey; - - if (algorithm >= 4) { - var cf = dict.get('CF'); - - if ((0, _primitives.isDict)(cf)) { - cf.suppressEncryption = true; - } - - this.cf = cf; - this.stmf = dict.get('StmF') || identityName; - this.strf = dict.get('StrF') || identityName; - this.eff = dict.get('EFF') || this.stmf; - } - } - - function buildObjectKey(num, gen, encryptionKey, isAes) { - var key = new Uint8Array(encryptionKey.length + 9), - i, - n; - - for (i = 0, n = encryptionKey.length; i < n; ++i) { - key[i] = encryptionKey[i]; - } - - key[i++] = num & 0xFF; - key[i++] = num >> 8 & 0xFF; - key[i++] = num >> 16 & 0xFF; - key[i++] = gen & 0xFF; - key[i++] = gen >> 8 & 0xFF; - - if (isAes) { - key[i++] = 0x73; - key[i++] = 0x41; - key[i++] = 0x6C; - key[i++] = 0x54; - } - - var hash = calculateMD5(key, 0, i); - return hash.subarray(0, Math.min(encryptionKey.length + 5, 16)); - } - - function buildCipherConstructor(cf, name, num, gen, key) { - if (!(0, _primitives.isName)(name)) { - throw new _util.FormatError('Invalid crypt filter name.'); - } - - var cryptFilter = cf.get(name.name); - var cfm; - - if (cryptFilter !== null && cryptFilter !== undefined) { - cfm = cryptFilter.get('CFM'); - } - - if (!cfm || cfm.name === 'None') { - return function cipherTransformFactoryBuildCipherConstructorNone() { - return new NullCipher(); - }; - } - - if (cfm.name === 'V2') { - return function cipherTransformFactoryBuildCipherConstructorV2() { - return new ARCFourCipher(buildObjectKey(num, gen, key, false)); - }; - } - - if (cfm.name === 'AESV2') { - return function cipherTransformFactoryBuildCipherConstructorAESV2() { - return new AES128Cipher(buildObjectKey(num, gen, key, true)); - }; - } - - if (cfm.name === 'AESV3') { - return function cipherTransformFactoryBuildCipherConstructorAESV3() { - return new AES256Cipher(key); - }; - } - - throw new _util.FormatError('Unknown crypto method'); - } - - CipherTransformFactory.prototype = { - createCipherTransform: function CipherTransformFactory_createCipherTransform(num, gen) { - if (this.algorithm === 4 || this.algorithm === 5) { - return new CipherTransform(buildCipherConstructor(this.cf, this.stmf, num, gen, this.encryptionKey), buildCipherConstructor(this.cf, this.strf, num, gen, this.encryptionKey)); - } - - var key = buildObjectKey(num, gen, this.encryptionKey, false); - - var cipherConstructor = function buildCipherCipherConstructor() { - return new ARCFourCipher(key); - }; - - return new CipherTransform(cipherConstructor, cipherConstructor); - } - }; - return CipherTransformFactory; - }(); - - exports.CipherTransformFactory = CipherTransformFactory; - - /***/ }), - /* 168 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.ColorSpace = void 0; - - var _util = __w_extracthighlights_require__(6); - - var _primitives = __w_extracthighlights_require__(155); - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - - function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - - function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - - function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - - function resizeRgbImage(src, dest, w1, h1, w2, h2, alpha01) { - var COMPONENTS = 3; - alpha01 = alpha01 !== 1 ? 0 : alpha01; - var xRatio = w1 / w2; - var yRatio = h1 / h2; - var newIndex = 0, - oldIndex; - var xScaled = new Uint16Array(w2); - var w1Scanline = w1 * COMPONENTS; - - for (var i = 0; i < w2; i++) { - xScaled[i] = Math.floor(i * xRatio) * COMPONENTS; - } - - for (var _i = 0; _i < h2; _i++) { - var py = Math.floor(_i * yRatio) * w1Scanline; - - for (var j = 0; j < w2; j++) { - oldIndex = py + xScaled[j]; - dest[newIndex++] = src[oldIndex++]; - dest[newIndex++] = src[oldIndex++]; - dest[newIndex++] = src[oldIndex++]; - newIndex += alpha01; - } - } - } - - var ColorSpace = - /*#__PURE__*/ - function () { - function ColorSpace(name, numComps) { - _classCallCheck(this, ColorSpace); - - if (this.constructor === ColorSpace) { - (0, _util.unreachable)('Cannot initialize ColorSpace.'); - } - - this.name = name; - this.numComps = numComps; - } - - _createClass(ColorSpace, [{ - key: "getRgb", - value: function getRgb(src, srcOffset) { - var rgb = new Uint8ClampedArray(3); - this.getRgbItem(src, srcOffset, rgb, 0); - return rgb; - } - }, { - key: "getRgbItem", - value: function getRgbItem(src, srcOffset, dest, destOffset) { - (0, _util.unreachable)('Should not call ColorSpace.getRgbItem'); - } - }, { - key: "getRgbBuffer", - value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - (0, _util.unreachable)('Should not call ColorSpace.getRgbBuffer'); - } - }, { - key: "getOutputLength", - value: function getOutputLength(inputLength, alpha01) { - (0, _util.unreachable)('Should not call ColorSpace.getOutputLength'); - } - }, { - key: "isPassthrough", - value: function isPassthrough(bits) { - return false; - } - }, { - key: "isDefaultDecode", - value: function isDefaultDecode(decodeMap, bpc) { - return ColorSpace.isDefaultDecode(decodeMap, this.numComps); - } - }, { - key: "fillRgb", - value: function fillRgb(dest, originalWidth, originalHeight, width, height, actualHeight, bpc, comps, alpha01) { - var count = originalWidth * originalHeight; - var rgbBuf = null; - var numComponentColors = 1 << bpc; - var needsResizing = originalHeight !== height || originalWidth !== width; - - if (this.isPassthrough(bpc)) { - rgbBuf = comps; - } else if (this.numComps === 1 && count > numComponentColors && this.name !== 'DeviceGray' && this.name !== 'DeviceRGB') { - var allColors = bpc <= 8 ? new Uint8Array(numComponentColors) : new Uint16Array(numComponentColors); - - for (var i = 0; i < numComponentColors; i++) { - allColors[i] = i; - } - - var colorMap = new Uint8ClampedArray(numComponentColors * 3); - this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bpc, 0); - - if (!needsResizing) { - var destPos = 0; - - for (var _i2 = 0; _i2 < count; ++_i2) { - var key = comps[_i2] * 3; - dest[destPos++] = colorMap[key]; - dest[destPos++] = colorMap[key + 1]; - dest[destPos++] = colorMap[key + 2]; - destPos += alpha01; - } - } else { - rgbBuf = new Uint8Array(count * 3); - var rgbPos = 0; - - for (var _i3 = 0; _i3 < count; ++_i3) { - var _key = comps[_i3] * 3; - - rgbBuf[rgbPos++] = colorMap[_key]; - rgbBuf[rgbPos++] = colorMap[_key + 1]; - rgbBuf[rgbPos++] = colorMap[_key + 2]; - } - } - } else { - if (!needsResizing) { - this.getRgbBuffer(comps, 0, width * actualHeight, dest, 0, bpc, alpha01); - } else { - rgbBuf = new Uint8ClampedArray(count * 3); - this.getRgbBuffer(comps, 0, count, rgbBuf, 0, bpc, 0); - } - } - - if (rgbBuf) { - if (needsResizing) { - resizeRgbImage(rgbBuf, dest, originalWidth, originalHeight, width, height, alpha01); - } else { - var _destPos = 0, - _rgbPos = 0; - - for (var _i4 = 0, ii = width * actualHeight; _i4 < ii; _i4++) { - dest[_destPos++] = rgbBuf[_rgbPos++]; - dest[_destPos++] = rgbBuf[_rgbPos++]; - dest[_destPos++] = rgbBuf[_rgbPos++]; - _destPos += alpha01; - } - } - } - } - }, { - key: "usesZeroToOneRange", - get: function get() { - return (0, _util.shadow)(this, 'usesZeroToOneRange', true); - } - }], [{ - key: "parse", - value: function parse(cs, xref, res, pdfFunctionFactory) { - var IR = this.parseToIR(cs, xref, res, pdfFunctionFactory); - return this.fromIR(IR); - } - }, { - key: "fromIR", - value: function fromIR(IR) { - var name = Array.isArray(IR) ? IR[0] : IR; - var whitePoint, blackPoint, gamma; - - switch (name) { - case 'DeviceGrayCS': - return this.singletons.gray; - - case 'DeviceRgbCS': - return this.singletons.rgb; - - case 'DeviceCmykCS': - return this.singletons.cmyk; - - case 'CalGrayCS': - whitePoint = IR[1]; - blackPoint = IR[2]; - gamma = IR[3]; - return new CalGrayCS(whitePoint, blackPoint, gamma); - - case 'CalRGBCS': - whitePoint = IR[1]; - blackPoint = IR[2]; - gamma = IR[3]; - var matrix = IR[4]; - return new CalRGBCS(whitePoint, blackPoint, gamma, matrix); - - case 'PatternCS': - var basePatternCS = IR[1]; - - if (basePatternCS) { - basePatternCS = this.fromIR(basePatternCS); - } - - return new PatternCS(basePatternCS); - - case 'IndexedCS': - var baseIndexedCS = IR[1]; - var hiVal = IR[2]; - var lookup = IR[3]; - return new IndexedCS(this.fromIR(baseIndexedCS), hiVal, lookup); - - case 'AlternateCS': - var numComps = IR[1]; - var alt = IR[2]; - var tintFn = IR[3]; - return new AlternateCS(numComps, this.fromIR(alt), tintFn); - - case 'LabCS': - whitePoint = IR[1]; - blackPoint = IR[2]; - var range = IR[3]; - return new LabCS(whitePoint, blackPoint, range); - - default: - throw new _util.FormatError("Unknown colorspace name: ".concat(name)); - } - } - }, { - key: "parseToIR", - value: function parseToIR(cs, xref) { - var res = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var pdfFunctionFactory = arguments.length > 3 ? arguments[3] : undefined; - cs = xref.fetchIfRef(cs); - - if ((0, _primitives.isName)(cs)) { - switch (cs.name) { - case 'DeviceGray': - case 'G': - return 'DeviceGrayCS'; - - case 'DeviceRGB': - case 'RGB': - return 'DeviceRgbCS'; - - case 'DeviceCMYK': - case 'CMYK': - return 'DeviceCmykCS'; - - case 'Pattern': - return ['PatternCS', null]; - - default: - if ((0, _primitives.isDict)(res)) { - var colorSpaces = res.get('ColorSpace'); - - if ((0, _primitives.isDict)(colorSpaces)) { - var resCS = colorSpaces.get(cs.name); - - if (resCS) { - if ((0, _primitives.isName)(resCS)) { - return this.parseToIR(resCS, xref, res, pdfFunctionFactory); - } - - cs = resCS; - break; - } - } - } - - throw new _util.FormatError("unrecognized colorspace ".concat(cs.name)); - } - } - - if (Array.isArray(cs)) { - var mode = xref.fetchIfRef(cs[0]).name; - var numComps, params, alt, whitePoint, blackPoint, gamma; - - switch (mode) { - case 'DeviceGray': - case 'G': - return 'DeviceGrayCS'; - - case 'DeviceRGB': - case 'RGB': - return 'DeviceRgbCS'; - - case 'DeviceCMYK': - case 'CMYK': - return 'DeviceCmykCS'; - - case 'CalGray': - params = xref.fetchIfRef(cs[1]); - whitePoint = params.getArray('WhitePoint'); - blackPoint = params.getArray('BlackPoint'); - gamma = params.get('Gamma'); - return ['CalGrayCS', whitePoint, blackPoint, gamma]; - - case 'CalRGB': - params = xref.fetchIfRef(cs[1]); - whitePoint = params.getArray('WhitePoint'); - blackPoint = params.getArray('BlackPoint'); - gamma = params.getArray('Gamma'); - var matrix = params.getArray('Matrix'); - return ['CalRGBCS', whitePoint, blackPoint, gamma, matrix]; - - case 'ICCBased': - var stream = xref.fetchIfRef(cs[1]); - var dict = stream.dict; - numComps = dict.get('N'); - alt = dict.get('Alternate'); - - if (alt) { - var altIR = this.parseToIR(alt, xref, res, pdfFunctionFactory); - var altCS = this.fromIR(altIR, pdfFunctionFactory); - - if (altCS.numComps === numComps) { - return altIR; - } - - (0, _util.warn)('ICCBased color space: Ignoring incorrect /Alternate entry.'); - } - - if (numComps === 1) { - return 'DeviceGrayCS'; - } else if (numComps === 3) { - return 'DeviceRgbCS'; - } else if (numComps === 4) { - return 'DeviceCmykCS'; - } - - break; - - case 'Pattern': - var basePatternCS = cs[1] || null; - - if (basePatternCS) { - basePatternCS = this.parseToIR(basePatternCS, xref, res, pdfFunctionFactory); - } - - return ['PatternCS', basePatternCS]; - - case 'Indexed': - case 'I': - var baseIndexedCS = this.parseToIR(cs[1], xref, res, pdfFunctionFactory); - var hiVal = xref.fetchIfRef(cs[2]) + 1; - var lookup = xref.fetchIfRef(cs[3]); - - if ((0, _primitives.isStream)(lookup)) { - lookup = lookup.getBytes(); - } - - return ['IndexedCS', baseIndexedCS, hiVal, lookup]; - - case 'Separation': - case 'DeviceN': - var name = xref.fetchIfRef(cs[1]); - numComps = Array.isArray(name) ? name.length : 1; - alt = this.parseToIR(cs[2], xref, res, pdfFunctionFactory); - var tintFn = pdfFunctionFactory.create(xref.fetchIfRef(cs[3])); - return ['AlternateCS', numComps, alt, tintFn]; - - case 'Lab': - params = xref.fetchIfRef(cs[1]); - whitePoint = params.getArray('WhitePoint'); - blackPoint = params.getArray('BlackPoint'); - var range = params.getArray('Range'); - return ['LabCS', whitePoint, blackPoint, range]; - - default: - throw new _util.FormatError("unimplemented color space object \"".concat(mode, "\"")); - } - } - - throw new _util.FormatError("unrecognized color space object: \"".concat(cs, "\"")); - } - }, { - key: "isDefaultDecode", - value: function isDefaultDecode(decode, numComps) { - if (!Array.isArray(decode)) { - return true; - } - - if (numComps * 2 !== decode.length) { - (0, _util.warn)('The decode map is not the correct length'); - return true; - } - - for (var i = 0, ii = decode.length; i < ii; i += 2) { - if (decode[i] !== 0 || decode[i + 1] !== 1) { - return false; - } - } - - return true; - } - }, { - key: "singletons", - get: function get() { - return (0, _util.shadow)(this, 'singletons', { - get gray() { - return (0, _util.shadow)(this, 'gray', new DeviceGrayCS()); - }, - - get rgb() { - return (0, _util.shadow)(this, 'rgb', new DeviceRgbCS()); - }, - - get cmyk() { - return (0, _util.shadow)(this, 'cmyk', new DeviceCmykCS()); - } - - }); - } - }]); - - return ColorSpace; - }(); - - exports.ColorSpace = ColorSpace; - - var AlternateCS = - /*#__PURE__*/ - function (_ColorSpace) { - _inherits(AlternateCS, _ColorSpace); - - function AlternateCS(numComps, base, tintFn) { - var _this; - - _classCallCheck(this, AlternateCS); - - _this = _possibleConstructorReturn(this, _getPrototypeOf(AlternateCS).call(this, 'Alternate', numComps)); - _this.base = base; - _this.tintFn = tintFn; - _this.tmpBuf = new Float32Array(base.numComps); - return _this; - } - - _createClass(AlternateCS, [{ - key: "getRgbItem", - value: function getRgbItem(src, srcOffset, dest, destOffset) { - var tmpBuf = this.tmpBuf; - this.tintFn(src, srcOffset, tmpBuf, 0); - this.base.getRgbItem(tmpBuf, 0, dest, destOffset); - } - }, { - key: "getRgbBuffer", - value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - var tintFn = this.tintFn; - var base = this.base; - var scale = 1 / ((1 << bits) - 1); - var baseNumComps = base.numComps; - var usesZeroToOneRange = base.usesZeroToOneRange; - var isPassthrough = (base.isPassthrough(8) || !usesZeroToOneRange) && alpha01 === 0; - var pos = isPassthrough ? destOffset : 0; - var baseBuf = isPassthrough ? dest : new Uint8ClampedArray(baseNumComps * count); - var numComps = this.numComps; - var scaled = new Float32Array(numComps); - var tinted = new Float32Array(baseNumComps); - var i, j; - - for (i = 0; i < count; i++) { - for (j = 0; j < numComps; j++) { - scaled[j] = src[srcOffset++] * scale; - } - - tintFn(scaled, 0, tinted, 0); - - if (usesZeroToOneRange) { - for (j = 0; j < baseNumComps; j++) { - baseBuf[pos++] = tinted[j] * 255; - } - } else { - base.getRgbItem(tinted, 0, baseBuf, pos); - pos += baseNumComps; - } - } - - if (!isPassthrough) { - base.getRgbBuffer(baseBuf, 0, count, dest, destOffset, 8, alpha01); - } - } - }, { - key: "getOutputLength", - value: function getOutputLength(inputLength, alpha01) { - return this.base.getOutputLength(inputLength * this.base.numComps / this.numComps, alpha01); - } - }]); - - return AlternateCS; - }(ColorSpace); - - var PatternCS = - /*#__PURE__*/ - function (_ColorSpace2) { - _inherits(PatternCS, _ColorSpace2); - - function PatternCS(baseCS) { - var _this2; - - _classCallCheck(this, PatternCS); - - _this2 = _possibleConstructorReturn(this, _getPrototypeOf(PatternCS).call(this, 'Pattern', null)); - _this2.base = baseCS; - return _this2; - } - - _createClass(PatternCS, [{ - key: "isDefaultDecode", - value: function isDefaultDecode(decodeMap, bpc) { - (0, _util.unreachable)('Should not call PatternCS.isDefaultDecode'); - } - }]); - - return PatternCS; - }(ColorSpace); - - var IndexedCS = - /*#__PURE__*/ - function (_ColorSpace3) { - _inherits(IndexedCS, _ColorSpace3); - - function IndexedCS(base, highVal, lookup) { - var _this3; - - _classCallCheck(this, IndexedCS); - - _this3 = _possibleConstructorReturn(this, _getPrototypeOf(IndexedCS).call(this, 'Indexed', 1)); - _this3.base = base; - _this3.highVal = highVal; - var baseNumComps = base.numComps; - var length = baseNumComps * highVal; - - if ((0, _primitives.isStream)(lookup)) { - _this3.lookup = new Uint8Array(length); - var bytes = lookup.getBytes(length); - - _this3.lookup.set(bytes); - } else if ((0, _util.isString)(lookup)) { - _this3.lookup = new Uint8Array(length); - - for (var i = 0; i < length; ++i) { - _this3.lookup[i] = lookup.charCodeAt(i); - } - } else if (lookup instanceof Uint8Array) { - _this3.lookup = lookup; - } else { - throw new _util.FormatError("Unrecognized lookup table: ".concat(lookup)); - } - - return _this3; - } - - _createClass(IndexedCS, [{ - key: "getRgbItem", - value: function getRgbItem(src, srcOffset, dest, destOffset) { - var numComps = this.base.numComps; - var start = src[srcOffset] * numComps; - this.base.getRgbBuffer(this.lookup, start, 1, dest, destOffset, 8, 0); - } - }, { - key: "getRgbBuffer", - value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - var base = this.base; - var numComps = base.numComps; - var outputDelta = base.getOutputLength(numComps, alpha01); - var lookup = this.lookup; - - for (var i = 0; i < count; ++i) { - var lookupPos = src[srcOffset++] * numComps; - base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01); - destOffset += outputDelta; - } - } - }, { - key: "getOutputLength", - value: function getOutputLength(inputLength, alpha01) { - return this.base.getOutputLength(inputLength * this.base.numComps, alpha01); - } - }, { - key: "isDefaultDecode", - value: function isDefaultDecode(decodeMap, bpc) { - if (!Array.isArray(decodeMap)) { - return true; - } - - if (decodeMap.length !== 2) { - (0, _util.warn)('Decode map length is not correct'); - return true; - } - - if (!Number.isInteger(bpc) || bpc < 1) { - (0, _util.warn)('Bits per component is not correct'); - return true; - } - - return decodeMap[0] === 0 && decodeMap[1] === (1 << bpc) - 1; - } - }]); - - return IndexedCS; - }(ColorSpace); - - var DeviceGrayCS = - /*#__PURE__*/ - function (_ColorSpace4) { - _inherits(DeviceGrayCS, _ColorSpace4); - - function DeviceGrayCS() { - _classCallCheck(this, DeviceGrayCS); - - return _possibleConstructorReturn(this, _getPrototypeOf(DeviceGrayCS).call(this, 'DeviceGray', 1)); - } - - _createClass(DeviceGrayCS, [{ - key: "getRgbItem", - value: function getRgbItem(src, srcOffset, dest, destOffset) { - var c = src[srcOffset] * 255; - dest[destOffset] = dest[destOffset + 1] = dest[destOffset + 2] = c; - } - }, { - key: "getRgbBuffer", - value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - var scale = 255 / ((1 << bits) - 1); - var j = srcOffset, - q = destOffset; - - for (var i = 0; i < count; ++i) { - var c = scale * src[j++]; - dest[q++] = c; - dest[q++] = c; - dest[q++] = c; - q += alpha01; - } - } - }, { - key: "getOutputLength", - value: function getOutputLength(inputLength, alpha01) { - return inputLength * (3 + alpha01); - } - }]); - - return DeviceGrayCS; - }(ColorSpace); - - var DeviceRgbCS = - /*#__PURE__*/ - function (_ColorSpace5) { - _inherits(DeviceRgbCS, _ColorSpace5); - - function DeviceRgbCS() { - _classCallCheck(this, DeviceRgbCS); - - return _possibleConstructorReturn(this, _getPrototypeOf(DeviceRgbCS).call(this, 'DeviceRGB', 3)); - } - - _createClass(DeviceRgbCS, [{ - key: "getRgbItem", - value: function getRgbItem(src, srcOffset, dest, destOffset) { - dest[destOffset] = src[srcOffset] * 255; - dest[destOffset + 1] = src[srcOffset + 1] * 255; - dest[destOffset + 2] = src[srcOffset + 2] * 255; - } - }, { - key: "getRgbBuffer", - value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - if (bits === 8 && alpha01 === 0) { - dest.set(src.subarray(srcOffset, srcOffset + count * 3), destOffset); - return; - } - - var scale = 255 / ((1 << bits) - 1); - var j = srcOffset, - q = destOffset; - - for (var i = 0; i < count; ++i) { - dest[q++] = scale * src[j++]; - dest[q++] = scale * src[j++]; - dest[q++] = scale * src[j++]; - q += alpha01; - } - } - }, { - key: "getOutputLength", - value: function getOutputLength(inputLength, alpha01) { - return inputLength * (3 + alpha01) / 3 | 0; - } - }, { - key: "isPassthrough", - value: function isPassthrough(bits) { - return bits === 8; - } - }]); - - return DeviceRgbCS; - }(ColorSpace); - - var DeviceCmykCS = function DeviceCmykCSClosure() { - function convertToRgb(src, srcOffset, srcScale, dest, destOffset) { - var c = src[srcOffset] * srcScale; - var m = src[srcOffset + 1] * srcScale; - var y = src[srcOffset + 2] * srcScale; - var k = src[srcOffset + 3] * srcScale; - dest[destOffset] = 255 + c * (-4.387332384609988 * c + 54.48615194189176 * m + 18.82290502165302 * y + 212.25662451639585 * k + -285.2331026137004) + m * (1.7149763477362134 * m - 5.6096736904047315 * y + -17.873870861415444 * k - 5.497006427196366) + y * (-2.5217340131683033 * y - 21.248923337353073 * k + 17.5119270841813) + k * (-21.86122147463605 * k - 189.48180835922747); - dest[destOffset + 1] = 255 + c * (8.841041422036149 * c + 60.118027045597366 * m + 6.871425592049007 * y + 31.159100130055922 * k + -79.2970844816548) + m * (-15.310361306967817 * m + 17.575251261109482 * y + 131.35250912493976 * k - 190.9453302588951) + y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) + k * (-20.737325471181034 * k - 187.80453709719578); - dest[destOffset + 2] = 255 + c * (0.8842522430003296 * c + 8.078677503112928 * m + 30.89978309703729 * y - 0.23883238689178934 * k + -14.183576799673286) + m * (10.49593273432072 * m + 63.02378494754052 * y + 50.606957656360734 * k - 112.23884253719248) + y * (0.03296041114873217 * y + 115.60384449646641 * k + -193.58209356861505) + k * (-22.33816807309886 * k - 180.12613974708367); - } - - var DeviceCmykCS = - /*#__PURE__*/ - function (_ColorSpace6) { - _inherits(DeviceCmykCS, _ColorSpace6); - - function DeviceCmykCS() { - _classCallCheck(this, DeviceCmykCS); - - return _possibleConstructorReturn(this, _getPrototypeOf(DeviceCmykCS).call(this, 'DeviceCMYK', 4)); - } - - _createClass(DeviceCmykCS, [{ - key: "getRgbItem", - value: function getRgbItem(src, srcOffset, dest, destOffset) { - convertToRgb(src, srcOffset, 1, dest, destOffset); - } - }, { - key: "getRgbBuffer", - value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - var scale = 1 / ((1 << bits) - 1); - - for (var i = 0; i < count; i++) { - convertToRgb(src, srcOffset, scale, dest, destOffset); - srcOffset += 4; - destOffset += 3 + alpha01; - } - } - }, { - key: "getOutputLength", - value: function getOutputLength(inputLength, alpha01) { - return inputLength / 4 * (3 + alpha01) | 0; - } - }]); - - return DeviceCmykCS; - }(ColorSpace); - - return DeviceCmykCS; - }(); - - var CalGrayCS = function CalGrayCSClosure() { - function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) { - var A = src[srcOffset] * scale; - var AG = Math.pow(A, cs.G); - var L = cs.YW * AG; - var val = Math.max(295.8 * Math.pow(L, 0.333333333333333333) - 40.8, 0); - dest[destOffset] = val; - dest[destOffset + 1] = val; - dest[destOffset + 2] = val; - } - - var CalGrayCS = - /*#__PURE__*/ - function (_ColorSpace7) { - _inherits(CalGrayCS, _ColorSpace7); - - function CalGrayCS(whitePoint, blackPoint, gamma) { - var _this4; - - _classCallCheck(this, CalGrayCS); - - _this4 = _possibleConstructorReturn(this, _getPrototypeOf(CalGrayCS).call(this, 'CalGray', 1)); - - if (!whitePoint) { - throw new _util.FormatError('WhitePoint missing - required for color space CalGray'); - } - - blackPoint = blackPoint || [0, 0, 0]; - gamma = gamma || 1; - _this4.XW = whitePoint[0]; - _this4.YW = whitePoint[1]; - _this4.ZW = whitePoint[2]; - _this4.XB = blackPoint[0]; - _this4.YB = blackPoint[1]; - _this4.ZB = blackPoint[2]; - _this4.G = gamma; - - if (_this4.XW < 0 || _this4.ZW < 0 || _this4.YW !== 1) { - throw new _util.FormatError("Invalid WhitePoint components for ".concat(_this4.name) + ', no fallback available'); - } - - if (_this4.XB < 0 || _this4.YB < 0 || _this4.ZB < 0) { - (0, _util.info)("Invalid BlackPoint for ".concat(_this4.name, ", falling back to default.")); - _this4.XB = _this4.YB = _this4.ZB = 0; - } - - if (_this4.XB !== 0 || _this4.YB !== 0 || _this4.ZB !== 0) { - (0, _util.warn)("".concat(_this4.name, ", BlackPoint: XB: ").concat(_this4.XB, ", YB: ").concat(_this4.YB, ", ") + "ZB: ".concat(_this4.ZB, ", only default values are supported.")); - } - - if (_this4.G < 1) { - (0, _util.info)("Invalid Gamma: ".concat(_this4.G, " for ").concat(_this4.name, ", ") + 'falling back to default.'); - _this4.G = 1; - } - - return _this4; - } - - _createClass(CalGrayCS, [{ - key: "getRgbItem", - value: function getRgbItem(src, srcOffset, dest, destOffset) { - convertToRgb(this, src, srcOffset, dest, destOffset, 1); - } - }, { - key: "getRgbBuffer", - value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - var scale = 1 / ((1 << bits) - 1); - - for (var i = 0; i < count; ++i) { - convertToRgb(this, src, srcOffset, dest, destOffset, scale); - srcOffset += 1; - destOffset += 3 + alpha01; - } - } - }, { - key: "getOutputLength", - value: function getOutputLength(inputLength, alpha01) { - return inputLength * (3 + alpha01); - } - }]); - - return CalGrayCS; - }(ColorSpace); - - return CalGrayCS; - }(); - - var CalRGBCS = function CalRGBCSClosure() { - var BRADFORD_SCALE_MATRIX = new Float32Array([0.8951, 0.2664, -0.1614, -0.7502, 1.7135, 0.0367, 0.0389, -0.0685, 1.0296]); - var BRADFORD_SCALE_INVERSE_MATRIX = new Float32Array([0.9869929, -0.1470543, 0.1599627, 0.4323053, 0.5183603, 0.0492912, -0.0085287, 0.0400428, 0.9684867]); - var SRGB_D65_XYZ_TO_RGB_MATRIX = new Float32Array([3.2404542, -1.5371385, -0.4985314, -0.9692660, 1.8760108, 0.0415560, 0.0556434, -0.2040259, 1.0572252]); - var FLAT_WHITEPOINT_MATRIX = new Float32Array([1, 1, 1]); - var tempNormalizeMatrix = new Float32Array(3); - var tempConvertMatrix1 = new Float32Array(3); - var tempConvertMatrix2 = new Float32Array(3); - var DECODE_L_CONSTANT = Math.pow((8 + 16) / 116, 3) / 8.0; - - function matrixProduct(a, b, result) { - result[0] = a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; - result[1] = a[3] * b[0] + a[4] * b[1] + a[5] * b[2]; - result[2] = a[6] * b[0] + a[7] * b[1] + a[8] * b[2]; - } - - function convertToFlat(sourceWhitePoint, LMS, result) { - result[0] = LMS[0] * 1 / sourceWhitePoint[0]; - result[1] = LMS[1] * 1 / sourceWhitePoint[1]; - result[2] = LMS[2] * 1 / sourceWhitePoint[2]; - } - - function convertToD65(sourceWhitePoint, LMS, result) { - var D65X = 0.95047; - var D65Y = 1; - var D65Z = 1.08883; - result[0] = LMS[0] * D65X / sourceWhitePoint[0]; - result[1] = LMS[1] * D65Y / sourceWhitePoint[1]; - result[2] = LMS[2] * D65Z / sourceWhitePoint[2]; - } - - function sRGBTransferFunction(color) { - if (color <= 0.0031308) { - return adjustToRange(0, 1, 12.92 * color); - } - - return adjustToRange(0, 1, (1 + 0.055) * Math.pow(color, 1 / 2.4) - 0.055); - } - - function adjustToRange(min, max, value) { - return Math.max(min, Math.min(max, value)); - } - - function decodeL(L) { - if (L < 0) { - return -decodeL(-L); - } - - if (L > 8.0) { - return Math.pow((L + 16) / 116, 3); - } - - return L * DECODE_L_CONSTANT; - } - - function compensateBlackPoint(sourceBlackPoint, XYZ_Flat, result) { - if (sourceBlackPoint[0] === 0 && sourceBlackPoint[1] === 0 && sourceBlackPoint[2] === 0) { - result[0] = XYZ_Flat[0]; - result[1] = XYZ_Flat[1]; - result[2] = XYZ_Flat[2]; - return; - } - - var zeroDecodeL = decodeL(0); - var X_DST = zeroDecodeL; - var X_SRC = decodeL(sourceBlackPoint[0]); - var Y_DST = zeroDecodeL; - var Y_SRC = decodeL(sourceBlackPoint[1]); - var Z_DST = zeroDecodeL; - var Z_SRC = decodeL(sourceBlackPoint[2]); - var X_Scale = (1 - X_DST) / (1 - X_SRC); - var X_Offset = 1 - X_Scale; - var Y_Scale = (1 - Y_DST) / (1 - Y_SRC); - var Y_Offset = 1 - Y_Scale; - var Z_Scale = (1 - Z_DST) / (1 - Z_SRC); - var Z_Offset = 1 - Z_Scale; - result[0] = XYZ_Flat[0] * X_Scale + X_Offset; - result[1] = XYZ_Flat[1] * Y_Scale + Y_Offset; - result[2] = XYZ_Flat[2] * Z_Scale + Z_Offset; - } - - function normalizeWhitePointToFlat(sourceWhitePoint, XYZ_In, result) { - if (sourceWhitePoint[0] === 1 && sourceWhitePoint[2] === 1) { - result[0] = XYZ_In[0]; - result[1] = XYZ_In[1]; - result[2] = XYZ_In[2]; - return; - } - - var LMS = result; - matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS); - var LMS_Flat = tempNormalizeMatrix; - convertToFlat(sourceWhitePoint, LMS, LMS_Flat); - matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_Flat, result); - } - - function normalizeWhitePointToD65(sourceWhitePoint, XYZ_In, result) { - var LMS = result; - matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS); - var LMS_D65 = tempNormalizeMatrix; - convertToD65(sourceWhitePoint, LMS, LMS_D65); - matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_D65, result); - } - - function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) { - var A = adjustToRange(0, 1, src[srcOffset] * scale); - var B = adjustToRange(0, 1, src[srcOffset + 1] * scale); - var C = adjustToRange(0, 1, src[srcOffset + 2] * scale); - var AGR = Math.pow(A, cs.GR); - var BGG = Math.pow(B, cs.GG); - var CGB = Math.pow(C, cs.GB); - var X = cs.MXA * AGR + cs.MXB * BGG + cs.MXC * CGB; - var Y = cs.MYA * AGR + cs.MYB * BGG + cs.MYC * CGB; - var Z = cs.MZA * AGR + cs.MZB * BGG + cs.MZC * CGB; - var XYZ = tempConvertMatrix1; - XYZ[0] = X; - XYZ[1] = Y; - XYZ[2] = Z; - var XYZ_Flat = tempConvertMatrix2; - normalizeWhitePointToFlat(cs.whitePoint, XYZ, XYZ_Flat); - var XYZ_Black = tempConvertMatrix1; - compensateBlackPoint(cs.blackPoint, XYZ_Flat, XYZ_Black); - var XYZ_D65 = tempConvertMatrix2; - normalizeWhitePointToD65(FLAT_WHITEPOINT_MATRIX, XYZ_Black, XYZ_D65); - var SRGB = tempConvertMatrix1; - matrixProduct(SRGB_D65_XYZ_TO_RGB_MATRIX, XYZ_D65, SRGB); - dest[destOffset] = sRGBTransferFunction(SRGB[0]) * 255; - dest[destOffset + 1] = sRGBTransferFunction(SRGB[1]) * 255; - dest[destOffset + 2] = sRGBTransferFunction(SRGB[2]) * 255; - } - - var CalRGBCS = - /*#__PURE__*/ - function (_ColorSpace8) { - _inherits(CalRGBCS, _ColorSpace8); - - function CalRGBCS(whitePoint, blackPoint, gamma, matrix) { - var _this5; - - _classCallCheck(this, CalRGBCS); - - _this5 = _possibleConstructorReturn(this, _getPrototypeOf(CalRGBCS).call(this, 'CalRGB', 3)); - - if (!whitePoint) { - throw new _util.FormatError('WhitePoint missing - required for color space CalRGB'); - } - - blackPoint = blackPoint || new Float32Array(3); - gamma = gamma || new Float32Array([1, 1, 1]); - matrix = matrix || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]); - var XW = whitePoint[0]; - var YW = whitePoint[1]; - var ZW = whitePoint[2]; - _this5.whitePoint = whitePoint; - var XB = blackPoint[0]; - var YB = blackPoint[1]; - var ZB = blackPoint[2]; - _this5.blackPoint = blackPoint; - _this5.GR = gamma[0]; - _this5.GG = gamma[1]; - _this5.GB = gamma[2]; - _this5.MXA = matrix[0]; - _this5.MYA = matrix[1]; - _this5.MZA = matrix[2]; - _this5.MXB = matrix[3]; - _this5.MYB = matrix[4]; - _this5.MZB = matrix[5]; - _this5.MXC = matrix[6]; - _this5.MYC = matrix[7]; - _this5.MZC = matrix[8]; - - if (XW < 0 || ZW < 0 || YW !== 1) { - throw new _util.FormatError("Invalid WhitePoint components for ".concat(_this5.name) + ', no fallback available'); - } - - if (XB < 0 || YB < 0 || ZB < 0) { - (0, _util.info)("Invalid BlackPoint for ".concat(_this5.name, " [").concat(XB, ", ").concat(YB, ", ").concat(ZB, "], ") + 'falling back to default.'); - _this5.blackPoint = new Float32Array(3); - } - - if (_this5.GR < 0 || _this5.GG < 0 || _this5.GB < 0) { - (0, _util.info)("Invalid Gamma [".concat(_this5.GR, ", ").concat(_this5.GG, ", ").concat(_this5.GB, "] for ") + "".concat(_this5.name, ", falling back to default.")); - _this5.GR = _this5.GG = _this5.GB = 1; - } - - return _this5; - } - - _createClass(CalRGBCS, [{ - key: "getRgbItem", - value: function getRgbItem(src, srcOffset, dest, destOffset) { - convertToRgb(this, src, srcOffset, dest, destOffset, 1); - } - }, { - key: "getRgbBuffer", - value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - var scale = 1 / ((1 << bits) - 1); - - for (var i = 0; i < count; ++i) { - convertToRgb(this, src, srcOffset, dest, destOffset, scale); - srcOffset += 3; - destOffset += 3 + alpha01; - } - } - }, { - key: "getOutputLength", - value: function getOutputLength(inputLength, alpha01) { - return inputLength * (3 + alpha01) / 3 | 0; - } - }]); - - return CalRGBCS; - }(ColorSpace); - - return CalRGBCS; - }(); - - var LabCS = function LabCSClosure() { - function fn_g(x) { - var result; - - if (x >= 6 / 29) { - result = x * x * x; - } else { - result = 108 / 841 * (x - 4 / 29); - } - - return result; - } - - function decode(value, high1, low2, high2) { - return low2 + value * (high2 - low2) / high1; - } - - function convertToRgb(cs, src, srcOffset, maxVal, dest, destOffset) { - var Ls = src[srcOffset]; - var as = src[srcOffset + 1]; - var bs = src[srcOffset + 2]; - - if (maxVal !== false) { - Ls = decode(Ls, maxVal, 0, 100); - as = decode(as, maxVal, cs.amin, cs.amax); - bs = decode(bs, maxVal, cs.bmin, cs.bmax); - } - - as = as > cs.amax ? cs.amax : as < cs.amin ? cs.amin : as; - bs = bs > cs.bmax ? cs.bmax : bs < cs.bmin ? cs.bmin : bs; - var M = (Ls + 16) / 116; - var L = M + as / 500; - var N = M - bs / 200; - var X = cs.XW * fn_g(L); - var Y = cs.YW * fn_g(M); - var Z = cs.ZW * fn_g(N); - var r, g, b; - - if (cs.ZW < 1) { - r = X * 3.1339 + Y * -1.6170 + Z * -0.4906; - g = X * -0.9785 + Y * 1.9160 + Z * 0.0333; - b = X * 0.0720 + Y * -0.2290 + Z * 1.4057; - } else { - r = X * 3.2406 + Y * -1.5372 + Z * -0.4986; - g = X * -0.9689 + Y * 1.8758 + Z * 0.0415; - b = X * 0.0557 + Y * -0.2040 + Z * 1.0570; - } - - dest[destOffset] = Math.sqrt(r) * 255; - dest[destOffset + 1] = Math.sqrt(g) * 255; - dest[destOffset + 2] = Math.sqrt(b) * 255; - } - - var LabCS = - /*#__PURE__*/ - function (_ColorSpace9) { - _inherits(LabCS, _ColorSpace9); - - function LabCS(whitePoint, blackPoint, range) { - var _this6; - - _classCallCheck(this, LabCS); - - _this6 = _possibleConstructorReturn(this, _getPrototypeOf(LabCS).call(this, 'Lab', 3)); - - if (!whitePoint) { - throw new _util.FormatError('WhitePoint missing - required for color space Lab'); - } - - blackPoint = blackPoint || [0, 0, 0]; - range = range || [-100, 100, -100, 100]; - _this6.XW = whitePoint[0]; - _this6.YW = whitePoint[1]; - _this6.ZW = whitePoint[2]; - _this6.amin = range[0]; - _this6.amax = range[1]; - _this6.bmin = range[2]; - _this6.bmax = range[3]; - _this6.XB = blackPoint[0]; - _this6.YB = blackPoint[1]; - _this6.ZB = blackPoint[2]; - - if (_this6.XW < 0 || _this6.ZW < 0 || _this6.YW !== 1) { - throw new _util.FormatError('Invalid WhitePoint components, no fallback available'); - } - - if (_this6.XB < 0 || _this6.YB < 0 || _this6.ZB < 0) { - (0, _util.info)('Invalid BlackPoint, falling back to default'); - _this6.XB = _this6.YB = _this6.ZB = 0; - } - - if (_this6.amin > _this6.amax || _this6.bmin > _this6.bmax) { - (0, _util.info)('Invalid Range, falling back to defaults'); - _this6.amin = -100; - _this6.amax = 100; - _this6.bmin = -100; - _this6.bmax = 100; - } - - return _this6; - } - - _createClass(LabCS, [{ - key: "getRgbItem", - value: function getRgbItem(src, srcOffset, dest, destOffset) { - convertToRgb(this, src, srcOffset, false, dest, destOffset); - } - }, { - key: "getRgbBuffer", - value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { - var maxVal = (1 << bits) - 1; - - for (var i = 0; i < count; i++) { - convertToRgb(this, src, srcOffset, maxVal, dest, destOffset); - srcOffset += 3; - destOffset += 3 + alpha01; - } - } - }, { - key: "getOutputLength", - value: function getOutputLength(inputLength, alpha01) { - return inputLength * (3 + alpha01) / 3 | 0; - } - }, { - key: "isDefaultDecode", - value: function isDefaultDecode(decodeMap, bpc) { - return true; - } - }, { - key: "usesZeroToOneRange", - get: function get() { - return (0, _util.shadow)(this, 'usesZeroToOneRange', false); - } - }]); - - return LabCS; - }(ColorSpace); - - return LabCS; - }(); - - /***/ }), - /* 169 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.AnnotationFactory = exports.AnnotationBorderStyle = exports.Annotation = void 0; - - var _util = __w_extracthighlights_require__(6); - - var _obj = __w_extracthighlights_require__(154); - - var _primitives = __w_extracthighlights_require__(155); - - var _colorspace = __w_extracthighlights_require__(168); - - var _operator_list = __w_extracthighlights_require__(170); - - var _stream = __w_extracthighlights_require__(157); - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - - function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - - function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } - - function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } - - function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - - function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - - var AnnotationFactory = - /*#__PURE__*/ - function () { - function AnnotationFactory() { - _classCallCheck(this, AnnotationFactory); - } - - _createClass(AnnotationFactory, null, [{ - key: "create", - value: function create(xref, ref, pdfManager, idFactory) { - return pdfManager.ensure(this, '_create', [xref, ref, pdfManager, idFactory]); - } - }, { - key: "_create", - value: function _create(xref, ref, pdfManager, idFactory) { - var dict = xref.fetchIfRef(ref); - - if (!(0, _primitives.isDict)(dict)) { - return; - } - - var id = (0, _primitives.isRef)(ref) ? ref.toString() : 'annot_' + idFactory.createObjId(); - var subtype = dict.get('Subtype'); - subtype = (0, _primitives.isName)(subtype) ? subtype.name : null; - var parameters = { - xref: xref, - dict: dict, - ref: (0, _primitives.isRef)(ref) ? ref : null, - subtype: subtype, - id: id, - pdfManager: pdfManager - }; - - switch (subtype) { - case 'Link': - return new LinkAnnotation(parameters); - - case 'Text': - return new TextAnnotation(parameters); - - case 'Widget': - var fieldType = (0, _util.getInheritableProperty)({ - dict: dict, - key: 'FT' - }); - fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null; - - switch (fieldType) { - case 'Tx': - return new TextWidgetAnnotation(parameters); - - case 'Btn': - return new ButtonWidgetAnnotation(parameters); - - case 'Ch': - return new ChoiceWidgetAnnotation(parameters); - } - - (0, _util.warn)('Unimplemented widget field type "' + fieldType + '", ' + 'falling back to base field type.'); - return new WidgetAnnotation(parameters); - - case 'Popup': - return new PopupAnnotation(parameters); - - case 'Line': - return new LineAnnotation(parameters); - - case 'Square': - return new SquareAnnotation(parameters); - - case 'Circle': - return new CircleAnnotation(parameters); - - case 'PolyLine': - return new PolylineAnnotation(parameters); - - case 'Polygon': - return new PolygonAnnotation(parameters); - - case 'Ink': - return new InkAnnotation(parameters); - - case 'Highlight': - return new HighlightAnnotation(parameters); - - case 'Underline': - return new UnderlineAnnotation(parameters); - - case 'Squiggly': - return new SquigglyAnnotation(parameters); - - case 'StrikeOut': - return new StrikeOutAnnotation(parameters); - - case 'Stamp': - return new StampAnnotation(parameters); - - case 'FileAttachment': - return new FileAttachmentAnnotation(parameters); - - default: - if (!subtype) { - (0, _util.warn)('Annotation is missing the required /Subtype.'); - } else { - (0, _util.warn)('Unimplemented annotation type "' + subtype + '", ' + 'falling back to base annotation.'); - } - - return new Annotation(parameters); - } - } - }]); - - return AnnotationFactory; - }(); - - exports.AnnotationFactory = AnnotationFactory; - - function getTransformMatrix(rect, bbox, matrix) { - var bounds = _util.Util.getAxialAlignedBoundingBox(bbox, matrix); - - var minX = bounds[0]; - var minY = bounds[1]; - var maxX = bounds[2]; - var maxY = bounds[3]; - - if (minX === maxX || minY === maxY) { - return [1, 0, 0, 1, rect[0], rect[1]]; - } - - var xRatio = (rect[2] - rect[0]) / (maxX - minX); - var yRatio = (rect[3] - rect[1]) / (maxY - minY); - return [xRatio, 0, 0, yRatio, rect[0] - minX * xRatio, rect[1] - minY * yRatio]; - } - - var Annotation = - /*#__PURE__*/ - function () { - function Annotation(params) { - _classCallCheck(this, Annotation); - - var dict = params.dict; - this.setFlags(dict.get('F')); - this.setRectangle(dict.getArray('Rect')); - this.setColor(dict.getArray('C')); - this.setBorderStyle(dict); - this.setAppearance(dict); - - if (params.subtype=='Highlight') ; - - // get quad points for annotation - var quadPoints = []; - var quadpts = dict.get('QuadPoints') || []; - for (var j = 0; j < quadpts.length; j += 8) { - // NB: we don't transform the quadpoints here, but later once we know - // the user space => device space transformation. - var topLeft = {x: quadpts[j + 4], y: quadpts[j + 5]}; - var bottomRight = {x: quadpts[j + 2], y: quadpts[j + 3]}; - var quad = {}; - quad.x = Math.min(topLeft.x, bottomRight.x); - quad.y = Math.min(topLeft.y, bottomRight.y); - quad.width = Math.abs(topLeft.x - bottomRight.x); - quad.height = Math.abs(topLeft.y - bottomRight.y); - quadPoints.push(quad); - } - - - this.data = { - annotationFlags: this.flags, - borderStyle: this.borderStyle, - color: this.color, - hasAppearance: !!this.appearance, - id: params.id, - rect: this.rectangle, - subtype: params.subtype, - quadPoints: quadPoints, - highlightedText: "" - }; - - } - - _createClass(Annotation, [{ - key: "_hasFlag", - value: function _hasFlag(flags, flag) { - return !!(flags & flag); - } - }, { - key: "_isViewable", - value: function _isViewable(flags) { - return !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.HIDDEN) && !this._hasFlag(flags, _util.AnnotationFlag.NOVIEW); - } - }, { - key: "_isPrintable", - value: function _isPrintable(flags) { - return this._hasFlag(flags, _util.AnnotationFlag.PRINT) && !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.HIDDEN); - } - }, { - key: "setFlags", - value: function setFlags(flags) { - this.flags = Number.isInteger(flags) && flags > 0 ? flags : 0; - } - }, { - key: "hasFlag", - value: function hasFlag(flag) { - return this._hasFlag(this.flags, flag); - } - }, { - key: "setRectangle", - value: function setRectangle(rectangle) { - if (Array.isArray(rectangle) && rectangle.length === 4) { - this.rectangle = _util.Util.normalizeRect(rectangle); - } else { - this.rectangle = [0, 0, 0, 0]; - } - } - }, { - key: "setColor", - value: function setColor(color) { - var rgbColor = new Uint8ClampedArray(3); - - if (!Array.isArray(color)) { - this.color = rgbColor; - return; - } - - switch (color.length) { - case 0: - this.color = null; - break; - - case 1: - _colorspace.ColorSpace.singletons.gray.getRgbItem(color, 0, rgbColor, 0); - - this.color = rgbColor; - break; - - case 3: - _colorspace.ColorSpace.singletons.rgb.getRgbItem(color, 0, rgbColor, 0); - - this.color = rgbColor; - break; - - case 4: - _colorspace.ColorSpace.singletons.cmyk.getRgbItem(color, 0, rgbColor, 0); - - this.color = rgbColor; - break; - - default: - this.color = rgbColor; - break; - } - } - }, { - key: "setBorderStyle", - value: function setBorderStyle(borderStyle) { - this.borderStyle = new AnnotationBorderStyle(); - - if (!(0, _primitives.isDict)(borderStyle)) { - return; - } - - if (borderStyle.has('BS')) { - var dict = borderStyle.get('BS'); - var dictType = dict.get('Type'); - - if (!dictType || (0, _primitives.isName)(dictType, 'Border')) { - this.borderStyle.setWidth(dict.get('W')); - this.borderStyle.setStyle(dict.get('S')); - this.borderStyle.setDashArray(dict.getArray('D')); - } - } else if (borderStyle.has('Border')) { - var array = borderStyle.getArray('Border'); - - if (Array.isArray(array) && array.length >= 3) { - this.borderStyle.setHorizontalCornerRadius(array[0]); - this.borderStyle.setVerticalCornerRadius(array[1]); - this.borderStyle.setWidth(array[2]); - - if (array.length === 4) { - this.borderStyle.setDashArray(array[3]); - } - } - } else { - this.borderStyle.setWidth(0); - } - } - }, { - key: "setAppearance", - value: function setAppearance(dict) { - this.appearance = null; - var appearanceStates = dict.get('AP'); - - if (!(0, _primitives.isDict)(appearanceStates)) { - return; - } - - var normalAppearanceState = appearanceStates.get('N'); - - if ((0, _primitives.isStream)(normalAppearanceState)) { - this.appearance = normalAppearanceState; - return; - } - - if (!(0, _primitives.isDict)(normalAppearanceState)) { - return; - } - - var as = dict.get('AS'); - - if (!(0, _primitives.isName)(as) || !normalAppearanceState.has(as.name)) { - return; - } - - this.appearance = normalAppearanceState.get(as.name); - } - }, { - key: "_preparePopup", - value: function _preparePopup(dict) { - if (!dict.has('C')) { - this.data.color = null; - } - - this.data.hasPopup = dict.has('Popup'); - this.data.title = (0, _util.stringToPDFString)(dict.get('T') || ''); - this.data.contents = (0, _util.stringToPDFString)(dict.get('Contents') || ''); - } - }, { - key: "loadResources", - value: function loadResources(keys) { - return this.appearance.dict.getAsync('Resources').then(function (resources) { - if (!resources) { - return; - } - - var objectLoader = new _obj.ObjectLoader(resources, keys, resources.xref); - return objectLoader.load().then(function () { - return resources; - }); - }); - } - }, { - key: "getOperatorList", - value: function getOperatorList(evaluator, task, renderForms) { - var _this = this; - - if (!this.appearance) { - return Promise.resolve(new _operator_list.OperatorList()); - } - - var data = this.data; - var appearanceDict = this.appearance.dict; - var resourcesPromise = this.loadResources(['ExtGState', 'ColorSpace', 'Pattern', 'Shading', 'XObject', 'Font']); - var bbox = appearanceDict.getArray('BBox') || [0, 0, 1, 1]; - var matrix = appearanceDict.getArray('Matrix') || [1, 0, 0, 1, 0, 0]; - var transform = getTransformMatrix(data.rect, bbox, matrix); - return resourcesPromise.then(function (resources) { - var opList = new _operator_list.OperatorList(); - opList.addOp(_util.OPS.beginAnnotation, [data.rect, transform, matrix]); - return evaluator.getOperatorList({ - stream: _this.appearance, - task: task, - resources: resources, - operatorList: opList - }).then(function () { - opList.addOp(_util.OPS.endAnnotation, []); - - _this.appearance.reset(); - - return opList; - }); - }); - } - }, { - key: "viewable", - get: function get() { - if (this.flags === 0) { - return true; - } - - return this._isViewable(this.flags); - } - }, { - key: "printable", - get: function get() { - if (this.flags === 0) { - return false; - } - - return this._isPrintable(this.flags); - } - }]); - - return Annotation; - }(); - - exports.Annotation = Annotation; - - var AnnotationBorderStyle = - /*#__PURE__*/ - function () { - function AnnotationBorderStyle() { - _classCallCheck(this, AnnotationBorderStyle); - - this.width = 1; - this.style = _util.AnnotationBorderStyleType.SOLID; - this.dashArray = [3]; - this.horizontalCornerRadius = 0; - this.verticalCornerRadius = 0; - } - - _createClass(AnnotationBorderStyle, [{ - key: "setWidth", - value: function setWidth(width) { - if ((0, _primitives.isName)(width)) { - this.width = 0; - return; - } - - if (Number.isInteger(width)) { - this.width = width; - } - } - }, { - key: "setStyle", - value: function setStyle(style) { - if (!(0, _primitives.isName)(style)) { - return; - } - - switch (style.name) { - case 'S': - this.style = _util.AnnotationBorderStyleType.SOLID; - break; - - case 'D': - this.style = _util.AnnotationBorderStyleType.DASHED; - break; - - case 'B': - this.style = _util.AnnotationBorderStyleType.BEVELED; - break; - - case 'I': - this.style = _util.AnnotationBorderStyleType.INSET; - break; - - case 'U': - this.style = _util.AnnotationBorderStyleType.UNDERLINE; - break; - } - } - }, { - key: "setDashArray", - value: function setDashArray(dashArray) { - if (Array.isArray(dashArray) && dashArray.length > 0) { - var isValid = true; - var allZeros = true; - - for (var i = 0, len = dashArray.length; i < len; i++) { - var element = dashArray[i]; - var validNumber = +element >= 0; - - if (!validNumber) { - isValid = false; - break; - } else if (element > 0) { - allZeros = false; - } - } - - if (isValid && !allZeros) { - this.dashArray = dashArray; - } else { - this.width = 0; - } - } else if (dashArray) { - this.width = 0; - } - } - }, { - key: "setHorizontalCornerRadius", - value: function setHorizontalCornerRadius(radius) { - if (Number.isInteger(radius)) { - this.horizontalCornerRadius = radius; - } - } - }, { - key: "setVerticalCornerRadius", - value: function setVerticalCornerRadius(radius) { - if (Number.isInteger(radius)) { - this.verticalCornerRadius = radius; - } - } - }]); - - return AnnotationBorderStyle; - }(); - - exports.AnnotationBorderStyle = AnnotationBorderStyle; - - var WidgetAnnotation = - /*#__PURE__*/ - function (_Annotation) { - _inherits(WidgetAnnotation, _Annotation); - - function WidgetAnnotation(params) { - var _this2; - - _classCallCheck(this, WidgetAnnotation); - - _this2 = _possibleConstructorReturn(this, _getPrototypeOf(WidgetAnnotation).call(this, params)); - var dict = params.dict; - var data = _this2.data; - data.annotationType = _util.AnnotationType.WIDGET; - data.fieldName = _this2._constructFieldName(dict); - data.fieldValue = (0, _util.getInheritableProperty)({ - dict: dict, - key: 'V', - getArray: true - }); - data.alternativeText = (0, _util.stringToPDFString)(dict.get('TU') || ''); - data.defaultAppearance = (0, _util.getInheritableProperty)({ - dict: dict, - key: 'DA' - }) || ''; - var fieldType = (0, _util.getInheritableProperty)({ - dict: dict, - key: 'FT' - }); - data.fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null; - _this2.fieldResources = (0, _util.getInheritableProperty)({ - dict: dict, - key: 'DR' - }) || _primitives.Dict.empty; - data.fieldFlags = (0, _util.getInheritableProperty)({ - dict: dict, - key: 'Ff' - }); - - if (!Number.isInteger(data.fieldFlags) || data.fieldFlags < 0) { - data.fieldFlags = 0; - } - - data.readOnly = _this2.hasFieldFlag(_util.AnnotationFieldFlag.READONLY); - - if (data.fieldType === 'Sig') { - data.fieldValue = null; - - _this2.setFlags(_util.AnnotationFlag.HIDDEN); - } - - return _this2; - } - - _createClass(WidgetAnnotation, [{ - key: "_constructFieldName", - value: function _constructFieldName(dict) { - if (!dict.has('T') && !dict.has('Parent')) { - (0, _util.warn)('Unknown field name, falling back to empty field name.'); - return ''; - } - - if (!dict.has('Parent')) { - return (0, _util.stringToPDFString)(dict.get('T')); - } - - var fieldName = []; - - if (dict.has('T')) { - fieldName.unshift((0, _util.stringToPDFString)(dict.get('T'))); - } - - var loopDict = dict; - - while (loopDict.has('Parent')) { - loopDict = loopDict.get('Parent'); - - if (!(0, _primitives.isDict)(loopDict)) { - break; - } - - if (loopDict.has('T')) { - fieldName.unshift((0, _util.stringToPDFString)(loopDict.get('T'))); - } - } - - return fieldName.join('.'); - } - }, { - key: "hasFieldFlag", - value: function hasFieldFlag(flag) { - return !!(this.data.fieldFlags & flag); - } - }, { - key: "getOperatorList", - value: function getOperatorList(evaluator, task, renderForms) { - if (renderForms) { - return Promise.resolve(new _operator_list.OperatorList()); - } - - return _get(_getPrototypeOf(WidgetAnnotation.prototype), "getOperatorList", this).call(this, evaluator, task, renderForms); - } - }]); - - return WidgetAnnotation; - }(Annotation); - - var TextWidgetAnnotation = - /*#__PURE__*/ - function (_WidgetAnnotation) { - _inherits(TextWidgetAnnotation, _WidgetAnnotation); - - function TextWidgetAnnotation(params) { - var _this3; - - _classCallCheck(this, TextWidgetAnnotation); - - _this3 = _possibleConstructorReturn(this, _getPrototypeOf(TextWidgetAnnotation).call(this, params)); - var dict = params.dict; - _this3.data.fieldValue = (0, _util.stringToPDFString)(_this3.data.fieldValue || ''); - var alignment = (0, _util.getInheritableProperty)({ - dict: dict, - key: 'Q' - }); - - if (!Number.isInteger(alignment) || alignment < 0 || alignment > 2) { - alignment = null; - } - - _this3.data.textAlignment = alignment; - var maximumLength = (0, _util.getInheritableProperty)({ - dict: dict, - key: 'MaxLen' - }); - - if (!Number.isInteger(maximumLength) || maximumLength < 0) { - maximumLength = null; - } - - _this3.data.maxLen = maximumLength; - _this3.data.multiLine = _this3.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE); - _this3.data.comb = _this3.hasFieldFlag(_util.AnnotationFieldFlag.COMB) && !_this3.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE) && !_this3.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD) && !_this3.hasFieldFlag(_util.AnnotationFieldFlag.FILESELECT) && _this3.data.maxLen !== null; - return _this3; - } - - _createClass(TextWidgetAnnotation, [{ - key: "getOperatorList", - value: function getOperatorList(evaluator, task, renderForms) { - if (renderForms || this.appearance) { - return _get(_getPrototypeOf(TextWidgetAnnotation.prototype), "getOperatorList", this).call(this, evaluator, task, renderForms); - } - - var operatorList = new _operator_list.OperatorList(); - - if (!this.data.defaultAppearance) { - return Promise.resolve(operatorList); - } - - var stream = new _stream.Stream((0, _util.stringToBytes)(this.data.defaultAppearance)); - return evaluator.getOperatorList({ - stream: stream, - task: task, - resources: this.fieldResources, - operatorList: operatorList - }).then(function () { - return operatorList; - }); - } - }]); - - return TextWidgetAnnotation; - }(WidgetAnnotation); - - var ButtonWidgetAnnotation = - /*#__PURE__*/ - function (_WidgetAnnotation2) { - _inherits(ButtonWidgetAnnotation, _WidgetAnnotation2); - - function ButtonWidgetAnnotation(params) { - var _this4; - - _classCallCheck(this, ButtonWidgetAnnotation); - - _this4 = _possibleConstructorReturn(this, _getPrototypeOf(ButtonWidgetAnnotation).call(this, params)); - _this4.data.checkBox = !_this4.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !_this4.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON); - _this4.data.radioButton = _this4.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !_this4.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON); - _this4.data.pushButton = _this4.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON); - - if (_this4.data.checkBox) { - _this4._processCheckBox(params); - } else if (_this4.data.radioButton) { - _this4._processRadioButton(params); - } else if (_this4.data.pushButton) { - _this4._processPushButton(params); - } else { - (0, _util.warn)('Invalid field flags for button widget annotation'); - } - - return _this4; - } - - _createClass(ButtonWidgetAnnotation, [{ - key: "_processCheckBox", - value: function _processCheckBox(params) { - if ((0, _primitives.isName)(this.data.fieldValue)) { - this.data.fieldValue = this.data.fieldValue.name; - } - - var customAppearance = params.dict.get('AP'); - - if (!(0, _primitives.isDict)(customAppearance)) { - return; - } - - var exportValueOptionsDict = customAppearance.get('D'); - - if (!(0, _primitives.isDict)(exportValueOptionsDict)) { - return; - } - - var exportValues = exportValueOptionsDict.getKeys(); - var hasCorrectOptionCount = exportValues.length === 2; - - if (!hasCorrectOptionCount) { - return; - } - - this.data.exportValue = exportValues[0] === 'Off' ? exportValues[1] : exportValues[0]; - } - }, { - key: "_processRadioButton", - value: function _processRadioButton(params) { - this.data.fieldValue = this.data.buttonValue = null; - var fieldParent = params.dict.get('Parent'); - - if ((0, _primitives.isDict)(fieldParent) && fieldParent.has('V')) { - var fieldParentValue = fieldParent.get('V'); - - if ((0, _primitives.isName)(fieldParentValue)) { - this.data.fieldValue = fieldParentValue.name; - } - } - - var appearanceStates = params.dict.get('AP'); - - if (!(0, _primitives.isDict)(appearanceStates)) { - return; - } - - var normalAppearanceState = appearanceStates.get('N'); - - if (!(0, _primitives.isDict)(normalAppearanceState)) { - return; - } - - var keys = normalAppearanceState.getKeys(); - - for (var i = 0, ii = keys.length; i < ii; i++) { - if (keys[i] !== 'Off') { - this.data.buttonValue = keys[i]; - break; - } - } - } - }, { - key: "_processPushButton", - value: function _processPushButton(params) { - if (!params.dict.has('A')) { - (0, _util.warn)('Push buttons without action dictionaries are not supported'); - return; - } - - _obj.Catalog.parseDestDictionary({ - destDict: params.dict, - resultObj: this.data, - docBaseUrl: params.pdfManager.docBaseUrl - }); - } - }]); - - return ButtonWidgetAnnotation; - }(WidgetAnnotation); - - var ChoiceWidgetAnnotation = - /*#__PURE__*/ - function (_WidgetAnnotation3) { - _inherits(ChoiceWidgetAnnotation, _WidgetAnnotation3); - - function ChoiceWidgetAnnotation(params) { - var _this5; - - _classCallCheck(this, ChoiceWidgetAnnotation); - - _this5 = _possibleConstructorReturn(this, _getPrototypeOf(ChoiceWidgetAnnotation).call(this, params)); - _this5.data.options = []; - var options = (0, _util.getInheritableProperty)({ - dict: params.dict, - key: 'Opt' - }); - - if (Array.isArray(options)) { - var xref = params.xref; - - for (var i = 0, ii = options.length; i < ii; i++) { - var option = xref.fetchIfRef(options[i]); - var isOptionArray = Array.isArray(option); - _this5.data.options[i] = { - exportValue: isOptionArray ? xref.fetchIfRef(option[0]) : option, - displayValue: (0, _util.stringToPDFString)(isOptionArray ? xref.fetchIfRef(option[1]) : option) - }; - } - } - - if (!Array.isArray(_this5.data.fieldValue)) { - _this5.data.fieldValue = [_this5.data.fieldValue]; - } - - _this5.data.combo = _this5.hasFieldFlag(_util.AnnotationFieldFlag.COMBO); - _this5.data.multiSelect = _this5.hasFieldFlag(_util.AnnotationFieldFlag.MULTISELECT); - return _this5; - } - - return ChoiceWidgetAnnotation; - }(WidgetAnnotation); - - var TextAnnotation = - /*#__PURE__*/ - function (_Annotation2) { - _inherits(TextAnnotation, _Annotation2); - - function TextAnnotation(parameters) { - var _this6; - - _classCallCheck(this, TextAnnotation); - - var DEFAULT_ICON_SIZE = 22; - _this6 = _possibleConstructorReturn(this, _getPrototypeOf(TextAnnotation).call(this, parameters)); - _this6.data.annotationType = _util.AnnotationType.TEXT; - - if (_this6.data.hasAppearance) { - _this6.data.name = 'NoIcon'; - } else { - _this6.data.rect[1] = _this6.data.rect[3] - DEFAULT_ICON_SIZE; - _this6.data.rect[2] = _this6.data.rect[0] + DEFAULT_ICON_SIZE; - _this6.data.name = parameters.dict.has('Name') ? parameters.dict.get('Name').name : 'Note'; - } - - _this6._preparePopup(parameters.dict); - - return _this6; - } - - return TextAnnotation; - }(Annotation); - - var LinkAnnotation = - /*#__PURE__*/ - function (_Annotation3) { - _inherits(LinkAnnotation, _Annotation3); - - function LinkAnnotation(params) { - var _this7; - - _classCallCheck(this, LinkAnnotation); - - _this7 = _possibleConstructorReturn(this, _getPrototypeOf(LinkAnnotation).call(this, params)); - _this7.data.annotationType = _util.AnnotationType.LINK; - - _obj.Catalog.parseDestDictionary({ - destDict: params.dict, - resultObj: _this7.data, - docBaseUrl: params.pdfManager.docBaseUrl - }); - - return _this7; - } - - return LinkAnnotation; - }(Annotation); - - var PopupAnnotation = - /*#__PURE__*/ - function (_Annotation4) { - _inherits(PopupAnnotation, _Annotation4); - - function PopupAnnotation(parameters) { - var _this8; - - _classCallCheck(this, PopupAnnotation); - - _this8 = _possibleConstructorReturn(this, _getPrototypeOf(PopupAnnotation).call(this, parameters)); - _this8.data.annotationType = _util.AnnotationType.POPUP; - var dict = parameters.dict; - var parentItem = dict.get('Parent'); - - if (!parentItem) { - (0, _util.warn)('Popup annotation has a missing or invalid parent annotation.'); - return _possibleConstructorReturn(_this8); - } - - var parentSubtype = parentItem.get('Subtype'); - _this8.data.parentType = (0, _primitives.isName)(parentSubtype) ? parentSubtype.name : null; - _this8.data.parentId = dict.getRaw('Parent').toString(); - _this8.data.title = (0, _util.stringToPDFString)(parentItem.get('T') || ''); - _this8.data.contents = (0, _util.stringToPDFString)(parentItem.get('Contents') || ''); - - if (!parentItem.has('C')) { - _this8.data.color = null; - } else { - _this8.setColor(parentItem.getArray('C')); - - _this8.data.color = _this8.color; - } - - if (!_this8.viewable) { - var parentFlags = parentItem.get('F'); - - if (_this8._isViewable(parentFlags)) { - _this8.setFlags(parentFlags); - } - } - - return _this8; - } - - return PopupAnnotation; - }(Annotation); - - var LineAnnotation = - /*#__PURE__*/ - function (_Annotation5) { - _inherits(LineAnnotation, _Annotation5); - - function LineAnnotation(parameters) { - var _this9; - - _classCallCheck(this, LineAnnotation); - - _this9 = _possibleConstructorReturn(this, _getPrototypeOf(LineAnnotation).call(this, parameters)); - _this9.data.annotationType = _util.AnnotationType.LINE; - var dict = parameters.dict; - _this9.data.lineCoordinates = _util.Util.normalizeRect(dict.getArray('L')); - - _this9._preparePopup(dict); - - return _this9; - } - - return LineAnnotation; - }(Annotation); - - var SquareAnnotation = - /*#__PURE__*/ - function (_Annotation6) { - _inherits(SquareAnnotation, _Annotation6); - - function SquareAnnotation(parameters) { - var _this10; - - _classCallCheck(this, SquareAnnotation); - - _this10 = _possibleConstructorReturn(this, _getPrototypeOf(SquareAnnotation).call(this, parameters)); - _this10.data.annotationType = _util.AnnotationType.SQUARE; - - _this10._preparePopup(parameters.dict); - - return _this10; - } - - return SquareAnnotation; - }(Annotation); - - var CircleAnnotation = - /*#__PURE__*/ - function (_Annotation7) { - _inherits(CircleAnnotation, _Annotation7); - - function CircleAnnotation(parameters) { - var _this11; - - _classCallCheck(this, CircleAnnotation); - - _this11 = _possibleConstructorReturn(this, _getPrototypeOf(CircleAnnotation).call(this, parameters)); - _this11.data.annotationType = _util.AnnotationType.CIRCLE; - - _this11._preparePopup(parameters.dict); - - return _this11; - } - - return CircleAnnotation; - }(Annotation); - - var PolylineAnnotation = - /*#__PURE__*/ - function (_Annotation8) { - _inherits(PolylineAnnotation, _Annotation8); - - function PolylineAnnotation(parameters) { - var _this12; - - _classCallCheck(this, PolylineAnnotation); - - _this12 = _possibleConstructorReturn(this, _getPrototypeOf(PolylineAnnotation).call(this, parameters)); - _this12.data.annotationType = _util.AnnotationType.POLYLINE; - var dict = parameters.dict; - var rawVertices = dict.getArray('Vertices'); - _this12.data.vertices = []; - - for (var i = 0, ii = rawVertices.length; i < ii; i += 2) { - _this12.data.vertices.push({ - x: rawVertices[i], - y: rawVertices[i + 1] - }); - } - - _this12._preparePopup(dict); - - return _this12; - } - - return PolylineAnnotation; - }(Annotation); - - var PolygonAnnotation = - /*#__PURE__*/ - function (_PolylineAnnotation) { - _inherits(PolygonAnnotation, _PolylineAnnotation); - - function PolygonAnnotation(parameters) { - var _this13; - - _classCallCheck(this, PolygonAnnotation); - - _this13 = _possibleConstructorReturn(this, _getPrototypeOf(PolygonAnnotation).call(this, parameters)); - _this13.data.annotationType = _util.AnnotationType.POLYGON; - return _this13; - } - - return PolygonAnnotation; - }(PolylineAnnotation); - - var InkAnnotation = - /*#__PURE__*/ - function (_Annotation9) { - _inherits(InkAnnotation, _Annotation9); - - function InkAnnotation(parameters) { - var _this14; - - _classCallCheck(this, InkAnnotation); - - _this14 = _possibleConstructorReturn(this, _getPrototypeOf(InkAnnotation).call(this, parameters)); - _this14.data.annotationType = _util.AnnotationType.INK; - var dict = parameters.dict; - var xref = parameters.xref; - var originalInkLists = dict.getArray('InkList'); - _this14.data.inkLists = []; - - for (var i = 0, ii = originalInkLists.length; i < ii; ++i) { - _this14.data.inkLists.push([]); - - for (var j = 0, jj = originalInkLists[i].length; j < jj; j += 2) { - _this14.data.inkLists[i].push({ - x: xref.fetchIfRef(originalInkLists[i][j]), - y: xref.fetchIfRef(originalInkLists[i][j + 1]) - }); - } - } - - _this14._preparePopup(dict); - - return _this14; - } - - return InkAnnotation; - }(Annotation); - - var HighlightAnnotation = - /*#__PURE__*/ - function (_Annotation10) { - _inherits(HighlightAnnotation, _Annotation10); - - function HighlightAnnotation(parameters) { - var _this15; - - _classCallCheck(this, HighlightAnnotation); - - _this15 = _possibleConstructorReturn(this, _getPrototypeOf(HighlightAnnotation).call(this, parameters)); - _this15.data.annotationType = _util.AnnotationType.HIGHLIGHT; - - _this15._preparePopup(parameters.dict); - - return _this15; - } - - return HighlightAnnotation; - }(Annotation); - - var UnderlineAnnotation = - /*#__PURE__*/ - function (_Annotation11) { - _inherits(UnderlineAnnotation, _Annotation11); - - function UnderlineAnnotation(parameters) { - var _this16; - - _classCallCheck(this, UnderlineAnnotation); - - _this16 = _possibleConstructorReturn(this, _getPrototypeOf(UnderlineAnnotation).call(this, parameters)); - _this16.data.annotationType = _util.AnnotationType.UNDERLINE; - - _this16._preparePopup(parameters.dict); - - return _this16; - } - - return UnderlineAnnotation; - }(Annotation); - - var SquigglyAnnotation = - /*#__PURE__*/ - function (_Annotation12) { - _inherits(SquigglyAnnotation, _Annotation12); - - function SquigglyAnnotation(parameters) { - var _this17; - - _classCallCheck(this, SquigglyAnnotation); - - _this17 = _possibleConstructorReturn(this, _getPrototypeOf(SquigglyAnnotation).call(this, parameters)); - _this17.data.annotationType = _util.AnnotationType.SQUIGGLY; - - _this17._preparePopup(parameters.dict); - - return _this17; - } - - return SquigglyAnnotation; - }(Annotation); - - var StrikeOutAnnotation = - /*#__PURE__*/ - function (_Annotation13) { - _inherits(StrikeOutAnnotation, _Annotation13); - - function StrikeOutAnnotation(parameters) { - var _this18; - - _classCallCheck(this, StrikeOutAnnotation); - - _this18 = _possibleConstructorReturn(this, _getPrototypeOf(StrikeOutAnnotation).call(this, parameters)); - _this18.data.annotationType = _util.AnnotationType.STRIKEOUT; - - _this18._preparePopup(parameters.dict); - - return _this18; - } - - return StrikeOutAnnotation; - }(Annotation); - - var StampAnnotation = - /*#__PURE__*/ - function (_Annotation14) { - _inherits(StampAnnotation, _Annotation14); - - function StampAnnotation(parameters) { - var _this19; - - _classCallCheck(this, StampAnnotation); - - _this19 = _possibleConstructorReturn(this, _getPrototypeOf(StampAnnotation).call(this, parameters)); - _this19.data.annotationType = _util.AnnotationType.STAMP; - - _this19._preparePopup(parameters.dict); - - return _this19; - } - - return StampAnnotation; - }(Annotation); - - var FileAttachmentAnnotation = - /*#__PURE__*/ - function (_Annotation15) { - _inherits(FileAttachmentAnnotation, _Annotation15); - - function FileAttachmentAnnotation(parameters) { - var _this20; - - _classCallCheck(this, FileAttachmentAnnotation); - - _this20 = _possibleConstructorReturn(this, _getPrototypeOf(FileAttachmentAnnotation).call(this, parameters)); - var file = new _obj.FileSpec(parameters.dict.get('FS'), parameters.xref); - _this20.data.annotationType = _util.AnnotationType.FILEATTACHMENT; - _this20.data.file = file.serializable; - - _this20._preparePopup(parameters.dict); - - return _this20; - } - - return FileAttachmentAnnotation; - }(Annotation); - - /***/ }), - /* 170 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.OperatorList = void 0; - - var _util = __w_extracthighlights_require__(6); - - var QueueOptimizer = function QueueOptimizerClosure() { - function addState(parentState, pattern, checkFn, iterateFn, processFn) { - var state = parentState; - - for (var i = 0, ii = pattern.length - 1; i < ii; i++) { - var item = pattern[i]; - state = state[item] || (state[item] = []); - } - - state[pattern[pattern.length - 1]] = { - checkFn: checkFn, - iterateFn: iterateFn, - processFn: processFn - }; - } - - function handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray) { - var iFirstPIMXO = iFirstSave + 2; - - for (var i = 0; i < count; i++) { - var arg = argsArray[iFirstPIMXO + 4 * i]; - var imageMask = arg.length === 1 && arg[0]; - - if (imageMask && imageMask.width === 1 && imageMask.height === 1 && (!imageMask.data.length || imageMask.data.length === 1 && imageMask.data[0] === 0)) { - fnArray[iFirstPIMXO + 4 * i] = _util.OPS.paintSolidColorImageMask; - continue; - } - - break; - } - - return count - i; - } - - var InitialState = []; - addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintInlineImageXObject, _util.OPS.restore], null, function iterateInlineImageGroup(context, i) { - var fnArray = context.fnArray; - var iFirstSave = context.iCurr - 3; - var pos = (i - iFirstSave) % 4; - - switch (pos) { - case 0: - return fnArray[i] === _util.OPS.save; - - case 1: - return fnArray[i] === _util.OPS.transform; - - case 2: - return fnArray[i] === _util.OPS.paintInlineImageXObject; - - case 3: - return fnArray[i] === _util.OPS.restore; - } - }, function foundInlineImageGroup(context, i) { - var MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10; - var MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200; - var MAX_WIDTH = 1000; - var IMAGE_PADDING = 1; - var fnArray = context.fnArray, - argsArray = context.argsArray; - var curr = context.iCurr; - var iFirstSave = curr - 3; - var iFirstTransform = curr - 2; - var iFirstPIIXO = curr - 1; - var count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_INLINE_IMAGES_BLOCK); - - if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) { - return i - (i - iFirstSave) % 4; - } - - var maxX = 0; - var map = [], - maxLineHeight = 0; - var currentX = IMAGE_PADDING, - currentY = IMAGE_PADDING; - var q; - - for (q = 0; q < count; q++) { - var transform = argsArray[iFirstTransform + (q << 2)]; - var img = argsArray[iFirstPIIXO + (q << 2)][0]; - - if (currentX + img.width > MAX_WIDTH) { - maxX = Math.max(maxX, currentX); - currentY += maxLineHeight + 2 * IMAGE_PADDING; - currentX = 0; - maxLineHeight = 0; - } - - map.push({ - transform: transform, - x: currentX, - y: currentY, - w: img.width, - h: img.height - }); - currentX += img.width + 2 * IMAGE_PADDING; - maxLineHeight = Math.max(maxLineHeight, img.height); - } - - var imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING; - var imgHeight = currentY + maxLineHeight + IMAGE_PADDING; - var imgData = new Uint8ClampedArray(imgWidth * imgHeight * 4); - var imgRowSize = imgWidth << 2; - - for (q = 0; q < count; q++) { - var data = argsArray[iFirstPIIXO + (q << 2)][0].data; - var rowSize = map[q].w << 2; - var dataOffset = 0; - var offset = map[q].x + map[q].y * imgWidth << 2; - imgData.set(data.subarray(0, rowSize), offset - imgRowSize); - - for (var k = 0, kk = map[q].h; k < kk; k++) { - imgData.set(data.subarray(dataOffset, dataOffset + rowSize), offset); - dataOffset += rowSize; - offset += imgRowSize; - } - - imgData.set(data.subarray(dataOffset - rowSize, dataOffset), offset); - - while (offset >= 0) { - data[offset - 4] = data[offset]; - data[offset - 3] = data[offset + 1]; - data[offset - 2] = data[offset + 2]; - data[offset - 1] = data[offset + 3]; - data[offset + rowSize] = data[offset + rowSize - 4]; - data[offset + rowSize + 1] = data[offset + rowSize - 3]; - data[offset + rowSize + 2] = data[offset + rowSize - 2]; - data[offset + rowSize + 3] = data[offset + rowSize - 1]; - offset -= imgRowSize; - } - } - - fnArray.splice(iFirstSave, count * 4, _util.OPS.paintInlineImageXObjectGroup); - argsArray.splice(iFirstSave, count * 4, [{ - width: imgWidth, - height: imgHeight, - kind: _util.ImageKind.RGBA_32BPP, - data: imgData - }, map]); - return iFirstSave + 1; - }); - addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageMaskXObject, _util.OPS.restore], null, function iterateImageMaskGroup(context, i) { - var fnArray = context.fnArray; - var iFirstSave = context.iCurr - 3; - var pos = (i - iFirstSave) % 4; - - switch (pos) { - case 0: - return fnArray[i] === _util.OPS.save; - - case 1: - return fnArray[i] === _util.OPS.transform; - - case 2: - return fnArray[i] === _util.OPS.paintImageMaskXObject; - - case 3: - return fnArray[i] === _util.OPS.restore; - } - }, function foundImageMaskGroup(context, i) { - var MIN_IMAGES_IN_MASKS_BLOCK = 10; - var MAX_IMAGES_IN_MASKS_BLOCK = 100; - var MAX_SAME_IMAGES_IN_MASKS_BLOCK = 1000; - var fnArray = context.fnArray, - argsArray = context.argsArray; - var curr = context.iCurr; - var iFirstSave = curr - 3; - var iFirstTransform = curr - 2; - var iFirstPIMXO = curr - 1; - var count = Math.floor((i - iFirstSave) / 4); - count = handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray); - - if (count < MIN_IMAGES_IN_MASKS_BLOCK) { - return i - (i - iFirstSave) % 4; - } - - var q; - var isSameImage = false; - var iTransform, transformArgs; - var firstPIMXOArg0 = argsArray[iFirstPIMXO][0]; - - if (argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0) { - isSameImage = true; - var firstTransformArg0 = argsArray[iFirstTransform][0]; - var firstTransformArg3 = argsArray[iFirstTransform][3]; - iTransform = iFirstTransform + 4; - var iPIMXO = iFirstPIMXO + 4; - - for (q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) { - transformArgs = argsArray[iTransform]; - - if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || transformArgs[1] !== 0 || transformArgs[2] !== 0 || transformArgs[3] !== firstTransformArg3) { - if (q < MIN_IMAGES_IN_MASKS_BLOCK) { - isSameImage = false; - } else { - count = q; - } - - break; - } - } - } - - if (isSameImage) { - count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK); - var positions = new Float32Array(count * 2); - iTransform = iFirstTransform; - - for (q = 0; q < count; q++, iTransform += 4) { - transformArgs = argsArray[iTransform]; - positions[q << 1] = transformArgs[4]; - positions[(q << 1) + 1] = transformArgs[5]; - } - - fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectRepeat); - argsArray.splice(iFirstSave, count * 4, [firstPIMXOArg0, firstTransformArg0, firstTransformArg3, positions]); - } else { - count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK); - var images = []; - - for (q = 0; q < count; q++) { - transformArgs = argsArray[iFirstTransform + (q << 2)]; - var maskParams = argsArray[iFirstPIMXO + (q << 2)][0]; - images.push({ - data: maskParams.data, - width: maskParams.width, - height: maskParams.height, - transform: transformArgs - }); - } - - fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectGroup); - argsArray.splice(iFirstSave, count * 4, [images]); - } - - return iFirstSave + 1; - }); - addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageXObject, _util.OPS.restore], function (context) { - var argsArray = context.argsArray; - var iFirstTransform = context.iCurr - 2; - return argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0; - }, function (context, i) { - var fnArray = context.fnArray, - argsArray = context.argsArray; - var iFirstSave = context.iCurr - 3; - var pos = (i - iFirstSave) % 4; - - switch (pos) { - case 0: - return fnArray[i] === _util.OPS.save; - - case 1: - if (fnArray[i] !== _util.OPS.transform) { - return false; - } - - var iFirstTransform = context.iCurr - 2; - var firstTransformArg0 = argsArray[iFirstTransform][0]; - var firstTransformArg3 = argsArray[iFirstTransform][3]; - - if (argsArray[i][0] !== firstTransformArg0 || argsArray[i][1] !== 0 || argsArray[i][2] !== 0 || argsArray[i][3] !== firstTransformArg3) { - return false; - } - - return true; - - case 2: - if (fnArray[i] !== _util.OPS.paintImageXObject) { - return false; - } - - var iFirstPIXO = context.iCurr - 1; - var firstPIXOArg0 = argsArray[iFirstPIXO][0]; - - if (argsArray[i][0] !== firstPIXOArg0) { - return false; - } - - return true; - - case 3: - return fnArray[i] === _util.OPS.restore; - } - }, function (context, i) { - var MIN_IMAGES_IN_BLOCK = 3; - var MAX_IMAGES_IN_BLOCK = 1000; - var fnArray = context.fnArray, - argsArray = context.argsArray; - var curr = context.iCurr; - var iFirstSave = curr - 3; - var iFirstTransform = curr - 2; - var iFirstPIXO = curr - 1; - var firstPIXOArg0 = argsArray[iFirstPIXO][0]; - var firstTransformArg0 = argsArray[iFirstTransform][0]; - var firstTransformArg3 = argsArray[iFirstTransform][3]; - var count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_BLOCK); - - if (count < MIN_IMAGES_IN_BLOCK) { - return i - (i - iFirstSave) % 4; - } - - var positions = new Float32Array(count * 2); - var iTransform = iFirstTransform; - - for (var q = 0; q < count; q++, iTransform += 4) { - var transformArgs = argsArray[iTransform]; - positions[q << 1] = transformArgs[4]; - positions[(q << 1) + 1] = transformArgs[5]; - } - - var args = [firstPIXOArg0, firstTransformArg0, firstTransformArg3, positions]; - fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageXObjectRepeat); - argsArray.splice(iFirstSave, count * 4, args); - return iFirstSave + 1; - }); - addState(InitialState, [_util.OPS.beginText, _util.OPS.setFont, _util.OPS.setTextMatrix, _util.OPS.showText, _util.OPS.endText], null, function (context, i) { - var fnArray = context.fnArray, - argsArray = context.argsArray; - var iFirstSave = context.iCurr - 4; - var pos = (i - iFirstSave) % 5; - - switch (pos) { - case 0: - return fnArray[i] === _util.OPS.beginText; - - case 1: - return fnArray[i] === _util.OPS.setFont; - - case 2: - return fnArray[i] === _util.OPS.setTextMatrix; - - case 3: - if (fnArray[i] !== _util.OPS.showText) { - return false; - } - - var iFirstSetFont = context.iCurr - 3; - var firstSetFontArg0 = argsArray[iFirstSetFont][0]; - var firstSetFontArg1 = argsArray[iFirstSetFont][1]; - - if (argsArray[i][0] !== firstSetFontArg0 || argsArray[i][1] !== firstSetFontArg1) { - return false; - } - - return true; - - case 4: - return fnArray[i] === _util.OPS.endText; - } - }, function (context, i) { - var MIN_CHARS_IN_BLOCK = 3; - var MAX_CHARS_IN_BLOCK = 1000; - var fnArray = context.fnArray, - argsArray = context.argsArray; - var curr = context.iCurr; - var iFirstBeginText = curr - 4; - var iFirstSetFont = curr - 3; - var iFirstSetTextMatrix = curr - 2; - var iFirstShowText = curr - 1; - var iFirstEndText = curr; - var firstSetFontArg0 = argsArray[iFirstSetFont][0]; - var firstSetFontArg1 = argsArray[iFirstSetFont][1]; - var count = Math.min(Math.floor((i - iFirstBeginText) / 5), MAX_CHARS_IN_BLOCK); - - if (count < MIN_CHARS_IN_BLOCK) { - return i - (i - iFirstBeginText) % 5; - } - - var iFirst = iFirstBeginText; - - if (iFirstBeginText >= 4 && fnArray[iFirstBeginText - 4] === fnArray[iFirstSetFont] && fnArray[iFirstBeginText - 3] === fnArray[iFirstSetTextMatrix] && fnArray[iFirstBeginText - 2] === fnArray[iFirstShowText] && fnArray[iFirstBeginText - 1] === fnArray[iFirstEndText] && argsArray[iFirstBeginText - 4][0] === firstSetFontArg0 && argsArray[iFirstBeginText - 4][1] === firstSetFontArg1) { - count++; - iFirst -= 5; - } - - var iEndText = iFirst + 4; - - for (var q = 1; q < count; q++) { - fnArray.splice(iEndText, 3); - argsArray.splice(iEndText, 3); - iEndText += 2; - } - - return iEndText + 1; - }); - - function QueueOptimizer(queue) { - this.queue = queue; - this.state = null; - this.context = { - iCurr: 0, - fnArray: queue.fnArray, - argsArray: queue.argsArray - }; - this.match = null; - this.lastProcessed = 0; - } - - QueueOptimizer.prototype = { - _optimize: function _optimize() { - var fnArray = this.queue.fnArray; - var i = this.lastProcessed, - ii = fnArray.length; - var state = this.state; - var match = this.match; - - if (!state && !match && i + 1 === ii && !InitialState[fnArray[i]]) { - this.lastProcessed = ii; - return; - } - - var context = this.context; - - while (i < ii) { - if (match) { - var iterate = (0, match.iterateFn)(context, i); - - if (iterate) { - i++; - continue; - } - - i = (0, match.processFn)(context, i + 1); - ii = fnArray.length; - match = null; - state = null; - - if (i >= ii) { - break; - } - } - - state = (state || InitialState)[fnArray[i]]; - - if (!state || Array.isArray(state)) { - i++; - continue; - } - - context.iCurr = i; - i++; - - if (state.checkFn && !(0, state.checkFn)(context)) { - state = null; - continue; - } - - match = state; - state = null; - } - - this.state = state; - this.match = match; - this.lastProcessed = i; - }, - push: function push(fn, args) { - this.queue.fnArray.push(fn); - this.queue.argsArray.push(args); - - this._optimize(); - }, - flush: function flush() { - while (this.match) { - var length = this.queue.fnArray.length; - this.lastProcessed = (0, this.match.processFn)(this.context, length); - this.match = null; - this.state = null; - - this._optimize(); - } - }, - reset: function reset() { - this.state = null; - this.match = null; - this.lastProcessed = 0; - } - }; - return QueueOptimizer; - }(); - - var NullOptimizer = function NullOptimizerClosure() { - function NullOptimizer(queue) { - this.queue = queue; - } - - NullOptimizer.prototype = { - push: function push(fn, args) { - this.queue.fnArray.push(fn); - this.queue.argsArray.push(args); - }, - flush: function flush() {} - }; - return NullOptimizer; - }(); - - var OperatorList = function OperatorListClosure() { - var CHUNK_SIZE = 1000; - var CHUNK_SIZE_ABOUT = CHUNK_SIZE - 5; - - function getTransfers(queue) { - var transfers = []; - var fnArray = queue.fnArray, - argsArray = queue.argsArray; - - for (var i = 0, ii = queue.length; i < ii; i++) { - switch (fnArray[i]) { - case _util.OPS.paintInlineImageXObject: - case _util.OPS.paintInlineImageXObjectGroup: - case _util.OPS.paintImageMaskXObject: - var arg = argsArray[i][0]; - - if (!arg.cached) { - transfers.push(arg.data.buffer); - } - - break; - } - } - - return transfers; - } - - function OperatorList(intent, messageHandler, pageIndex) { - this.messageHandler = messageHandler; - this.fnArray = []; - this.argsArray = []; - - if (messageHandler && this.intent !== 'oplist') { - this.optimizer = new QueueOptimizer(this); - } else { - this.optimizer = new NullOptimizer(this); - } - - this.dependencies = Object.create(null); - this._totalLength = 0; - this.pageIndex = pageIndex; - this.intent = intent; - this.weight = 0; - } - - OperatorList.prototype = { - get length() { - return this.argsArray.length; - }, - - get totalLength() { - return this._totalLength + this.length; - }, - - addOp: function addOp(fn, args) { - this.optimizer.push(fn, args); - this.weight++; - - if (this.messageHandler) { - if (this.weight >= CHUNK_SIZE) { - this.flush(); - } else if (this.weight >= CHUNK_SIZE_ABOUT && (fn === _util.OPS.restore || fn === _util.OPS.endText)) { - this.flush(); - } - } - }, - addDependency: function addDependency(dependency) { - if (dependency in this.dependencies) { - return; - } - - this.dependencies[dependency] = true; - this.addOp(_util.OPS.dependency, [dependency]); - }, - addDependencies: function addDependencies(dependencies) { - for (var key in dependencies) { - this.addDependency(key); - } - }, - addOpList: function addOpList(opList) { - Object.assign(this.dependencies, opList.dependencies); - - for (var i = 0, ii = opList.length; i < ii; i++) { - this.addOp(opList.fnArray[i], opList.argsArray[i]); - } - }, - getIR: function getIR() { - return { - fnArray: this.fnArray, - argsArray: this.argsArray, - length: this.length - }; - }, - flush: function flush(lastChunk) { - this.optimizer.flush(); - var transfers = getTransfers(this); - var length = this.length; - this._totalLength += length; - this.messageHandler.send('RenderPageChunk', { - operatorList: { - fnArray: this.fnArray, - argsArray: this.argsArray, - lastChunk: lastChunk, - length: length - }, - pageIndex: this.pageIndex, - intent: this.intent - }, transfers); - this.dependencies = Object.create(null); - this.fnArray.length = 0; - this.argsArray.length = 0; - this.weight = 0; - this.optimizer.reset(); - } - }; - return OperatorList; - }(); - - exports.OperatorList = OperatorList; - - /***/ }), - /* 171 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.PartialEvaluator = void 0; - - var _regenerator = _interopRequireDefault(__w_extracthighlights_require__(2)); - - var _util = __w_extracthighlights_require__(6); - - var _cmap = __w_extracthighlights_require__(172); - - var _stream = __w_extracthighlights_require__(157); - - var _primitives = __w_extracthighlights_require__(155); - - var _fonts = __w_extracthighlights_require__(173); - - var _encodings = __w_extracthighlights_require__(176); - - var _unicode = __w_extracthighlights_require__(179); - - var _standard_fonts = __w_extracthighlights_require__(178); - - var _pattern = __w_extracthighlights_require__(182); - - var _parser = __w_extracthighlights_require__(156); - - var _bidi = __w_extracthighlights_require__(183); - - var _colorspace = __w_extracthighlights_require__(168); - - var _glyphlist = __w_extracthighlights_require__(177); - - var _metrics = __w_extracthighlights_require__(184); - - var _function = __w_extracthighlights_require__(185); - - var _jpeg_stream = __w_extracthighlights_require__(163); - - var _murmurhash = __w_extracthighlights_require__(187); - - var _operator_list = __w_extracthighlights_require__(170); - - var _image = __w_extracthighlights_require__(188); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - - function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - - var PartialEvaluator = function PartialEvaluatorClosure() { - var DefaultPartialEvaluatorOptions = { - forceDataSchema: false, - maxImageSize: -1, - disableFontFace: false, - nativeImageDecoderSupport: _util.NativeImageDecoding.DECODE, - ignoreErrors: false, - isEvalSupported: true - }; - - function NativeImageDecoder(_ref) { - var xref = _ref.xref, - resources = _ref.resources, - handler = _ref.handler, - _ref$forceDataSchema = _ref.forceDataSchema, - forceDataSchema = _ref$forceDataSchema === void 0 ? false : _ref$forceDataSchema, - pdfFunctionFactory = _ref.pdfFunctionFactory; - this.xref = xref; - this.resources = resources; - this.handler = handler; - this.forceDataSchema = forceDataSchema; - this.pdfFunctionFactory = pdfFunctionFactory; - } - - NativeImageDecoder.prototype = { - canDecode: function canDecode(image) { - return image instanceof _jpeg_stream.JpegStream && NativeImageDecoder.isDecodable(image, this.xref, this.resources, this.pdfFunctionFactory); - }, - decode: function decode(image) { - var dict = image.dict; - var colorSpace = dict.get('ColorSpace', 'CS'); - colorSpace = _colorspace.ColorSpace.parse(colorSpace, this.xref, this.resources, this.pdfFunctionFactory); - return this.handler.sendWithPromise('JpegDecode', [image.getIR(this.forceDataSchema), colorSpace.numComps]).then(function (_ref2) { - var data = _ref2.data; - _ref2.width; - _ref2.height; - return new _stream.Stream(data, 0, data.length, image.dict); - }); - } - }; - - NativeImageDecoder.isSupported = function (image, xref, res, pdfFunctionFactory) { - var dict = image.dict; - - if (dict.has('DecodeParms') || dict.has('DP')) { - return false; - } - - var cs = _colorspace.ColorSpace.parse(dict.get('ColorSpace', 'CS'), xref, res, pdfFunctionFactory); - - return (cs.name === 'DeviceGray' || cs.name === 'DeviceRGB') && cs.isDefaultDecode(dict.getArray('Decode', 'D')); - }; - - NativeImageDecoder.isDecodable = function (image, xref, res, pdfFunctionFactory) { - var dict = image.dict; - - if (dict.has('DecodeParms') || dict.has('DP')) { - return false; - } - - var cs = _colorspace.ColorSpace.parse(dict.get('ColorSpace', 'CS'), xref, res, pdfFunctionFactory); - - var bpc = dict.get('BitsPerComponent', 'BPC') || 1; - return (cs.numComps === 1 || cs.numComps === 3) && cs.isDefaultDecode(dict.getArray('Decode', 'D'), bpc); - }; - - function PartialEvaluator(_ref3) { - var _this = this; - - var pdfManager = _ref3.pdfManager, - xref = _ref3.xref, - handler = _ref3.handler, - pageIndex = _ref3.pageIndex, - idFactory = _ref3.idFactory, - fontCache = _ref3.fontCache, - builtInCMapCache = _ref3.builtInCMapCache, - _ref3$options = _ref3.options, - options = _ref3$options === void 0 ? null : _ref3$options, - pdfFunctionFactory = _ref3.pdfFunctionFactory; - this.pdfManager = pdfManager; - this.xref = xref; - this.handler = handler; - this.pageIndex = pageIndex; - this.idFactory = idFactory; - this.fontCache = fontCache; - this.builtInCMapCache = builtInCMapCache; - this.options = options || DefaultPartialEvaluatorOptions; - this.pdfFunctionFactory = pdfFunctionFactory; - - this.fetchBuiltInCMap = - /*#__PURE__*/ - function () { - var _ref4 = _asyncToGenerator( - /*#__PURE__*/ - _regenerator.default.mark(function _callee(name) { - var data; - return _regenerator.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - if (!_this.builtInCMapCache.has(name)) { - _context.next = 2; - break; - } - - return _context.abrupt("return", _this.builtInCMapCache.get(name)); - - case 2: - _context.next = 4; - return _this.handler.sendWithPromise('FetchBuiltInCMap', { - name: name - }); - - case 4: - data = _context.sent; - - if (data.compressionType !== _util.CMapCompressionType.NONE) { - _this.builtInCMapCache.set(name, data); - } - - return _context.abrupt("return", data); - - case 7: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - - return function (_x) { - return _ref4.apply(this, arguments); - }; - }(); - } - - var TIME_SLOT_DURATION_MS = 20; - var CHECK_TIME_EVERY = 100; - - function TimeSlotManager() { - this.reset(); - } - - TimeSlotManager.prototype = { - check: function TimeSlotManager_check() { - if (++this.checked < CHECK_TIME_EVERY) { - return false; - } - - this.checked = 0; - return this.endTime <= Date.now(); - }, - reset: function TimeSlotManager_reset() { - this.endTime = Date.now() + TIME_SLOT_DURATION_MS; - this.checked = 0; - } - }; - - function normalizeBlendMode(value) { - if (!(0, _primitives.isName)(value)) { - return 'source-over'; - } - - switch (value.name) { - case 'Normal': - case 'Compatible': - return 'source-over'; - - case 'Multiply': - return 'multiply'; - - case 'Screen': - return 'screen'; - - case 'Overlay': - return 'overlay'; - - case 'Darken': - return 'darken'; - - case 'Lighten': - return 'lighten'; - - case 'ColorDodge': - return 'color-dodge'; - - case 'ColorBurn': - return 'color-burn'; - - case 'HardLight': - return 'hard-light'; - - case 'SoftLight': - return 'soft-light'; - - case 'Difference': - return 'difference'; - - case 'Exclusion': - return 'exclusion'; - - case 'Hue': - return 'hue'; - - case 'Saturation': - return 'saturation'; - - case 'Color': - return 'color'; - - case 'Luminosity': - return 'luminosity'; - } - - (0, _util.warn)('Unsupported blend mode: ' + value.name); - return 'source-over'; - } - - var deferred = Promise.resolve(); - var TILING_PATTERN = 1, - SHADING_PATTERN = 2; - PartialEvaluator.prototype = { - clone: function clone() { - var newOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DefaultPartialEvaluatorOptions; - var newEvaluator = Object.create(this); - newEvaluator.options = newOptions; - return newEvaluator; - }, - hasBlendModes: function PartialEvaluator_hasBlendModes(resources) { - if (!(0, _primitives.isDict)(resources)) { - return false; - } - - var processed = Object.create(null); - - if (resources.objId) { - processed[resources.objId] = true; - } - - var nodes = [resources], - xref = this.xref; - - while (nodes.length) { - var key, i, ii; - var node = nodes.shift(); - var graphicStates = node.get('ExtGState'); - - if ((0, _primitives.isDict)(graphicStates)) { - var graphicStatesKeys = graphicStates.getKeys(); - - for (i = 0, ii = graphicStatesKeys.length; i < ii; i++) { - key = graphicStatesKeys[i]; - var graphicState = graphicStates.get(key); - var bm = graphicState.get('BM'); - - if ((0, _primitives.isName)(bm) && bm.name !== 'Normal') { - return true; - } - } - } - - var xObjects = node.get('XObject'); - - if (!(0, _primitives.isDict)(xObjects)) { - continue; - } - - var xObjectsKeys = xObjects.getKeys(); - - for (i = 0, ii = xObjectsKeys.length; i < ii; i++) { - key = xObjectsKeys[i]; - var xObject = xObjects.getRaw(key); - - if ((0, _primitives.isRef)(xObject)) { - if (processed[xObject.toString()]) { - continue; - } - - xObject = xref.fetch(xObject); - } - - if (!(0, _primitives.isStream)(xObject)) { - continue; - } - - if (xObject.dict.objId) { - if (processed[xObject.dict.objId]) { - continue; - } - - processed[xObject.dict.objId] = true; - } - - var xResources = xObject.dict.get('Resources'); - - if ((0, _primitives.isDict)(xResources) && (!xResources.objId || !processed[xResources.objId])) { - nodes.push(xResources); - - if (xResources.objId) { - processed[xResources.objId] = true; - } - } - } - } - - return false; - }, - buildFormXObject: function PartialEvaluator_buildFormXObject(resources, xobj, smask, operatorList, task, initialState) { - var dict = xobj.dict; - var matrix = dict.getArray('Matrix'); - var bbox = dict.getArray('BBox'); - - if (Array.isArray(bbox) && bbox.length === 4) { - bbox = _util.Util.normalizeRect(bbox); - } else { - bbox = null; - } - - var group = dict.get('Group'); - - if (group) { - var groupOptions = { - matrix: matrix, - bbox: bbox, - smask: smask, - isolated: false, - knockout: false - }; - var groupSubtype = group.get('S'); - var colorSpace = null; - - if ((0, _primitives.isName)(groupSubtype, 'Transparency')) { - groupOptions.isolated = group.get('I') || false; - groupOptions.knockout = group.get('K') || false; - - if (group.has('CS')) { - colorSpace = _colorspace.ColorSpace.parse(group.get('CS'), this.xref, resources, this.pdfFunctionFactory); - } - } - - if (smask && smask.backdrop) { - colorSpace = colorSpace || _colorspace.ColorSpace.singletons.rgb; - smask.backdrop = colorSpace.getRgb(smask.backdrop, 0); - } - - operatorList.addOp(_util.OPS.beginGroup, [groupOptions]); - } - - operatorList.addOp(_util.OPS.paintFormXObjectBegin, [matrix, bbox]); - return this.getOperatorList({ - stream: xobj, - task: task, - resources: dict.get('Resources') || resources, - operatorList: operatorList, - initialState: initialState - }).then(function () { - operatorList.addOp(_util.OPS.paintFormXObjectEnd, []); - - if (group) { - operatorList.addOp(_util.OPS.endGroup, [groupOptions]); - } - }); - }, - buildPaintImageXObject: function buildPaintImageXObject(_ref5) { - var _this2 = this; - - var resources = _ref5.resources, - image = _ref5.image, - _ref5$isInline = _ref5.isInline, - isInline = _ref5$isInline === void 0 ? false : _ref5$isInline, - operatorList = _ref5.operatorList, - cacheKey = _ref5.cacheKey, - imageCache = _ref5.imageCache, - _ref5$forceDisableNat = _ref5.forceDisableNativeImageDecoder, - forceDisableNativeImageDecoder = _ref5$forceDisableNat === void 0 ? false : _ref5$forceDisableNat; - var dict = image.dict; - var w = dict.get('Width', 'W'); - var h = dict.get('Height', 'H'); - - if (!(w && (0, _util.isNum)(w)) || !(h && (0, _util.isNum)(h))) { - (0, _util.warn)('Image dimensions are missing, or not numbers.'); - return Promise.resolve(); - } - - var maxImageSize = this.options.maxImageSize; - - if (maxImageSize !== -1 && w * h > maxImageSize) { - (0, _util.warn)('Image exceeded maximum allowed size and was removed.'); - return Promise.resolve(); - } - - var imageMask = dict.get('ImageMask', 'IM') || false; - var imgData, args; - - if (imageMask) { - var width = dict.get('Width', 'W'); - var height = dict.get('Height', 'H'); - var bitStrideLength = width + 7 >> 3; - var imgArray = image.getBytes(bitStrideLength * height, true); - var decode = dict.getArray('Decode', 'D'); - imgData = _image.PDFImage.createMask({ - imgArray: imgArray, - width: width, - height: height, - imageIsFromDecodeStream: image instanceof _stream.DecodeStream, - inverseDecode: !!decode && decode[0] > 0 - }); - imgData.cached = true; - args = [imgData]; - operatorList.addOp(_util.OPS.paintImageMaskXObject, args); - - if (cacheKey) { - imageCache[cacheKey] = { - fn: _util.OPS.paintImageMaskXObject, - args: args - }; - } - - return Promise.resolve(); - } - - var softMask = dict.get('SMask', 'SM') || false; - var mask = dict.get('Mask') || false; - var SMALL_IMAGE_DIMENSIONS = 200; - - if (isInline && !softMask && !mask && !(image instanceof _jpeg_stream.JpegStream) && w + h < SMALL_IMAGE_DIMENSIONS) { - var imageObj = new _image.PDFImage({ - xref: this.xref, - res: resources, - image: image, - isInline: isInline, - pdfFunctionFactory: this.pdfFunctionFactory - }); - imgData = imageObj.createImageData(true); - operatorList.addOp(_util.OPS.paintInlineImageXObject, [imgData]); - return Promise.resolve(); - } - - var nativeImageDecoderSupport = forceDisableNativeImageDecoder ? _util.NativeImageDecoding.NONE : this.options.nativeImageDecoderSupport; - var objId = 'img_' + this.idFactory.createObjId(); - - if (nativeImageDecoderSupport !== _util.NativeImageDecoding.NONE && !softMask && !mask && image instanceof _jpeg_stream.JpegStream && NativeImageDecoder.isSupported(image, this.xref, resources, this.pdfFunctionFactory)) { - return this.handler.sendWithPromise('obj', [objId, this.pageIndex, 'JpegStream', image.getIR(this.options.forceDataSchema)]).then(function () { - operatorList.addDependency(objId); - args = [objId, w, h]; - operatorList.addOp(_util.OPS.paintJpegXObject, args); - - if (cacheKey) { - imageCache[cacheKey] = { - fn: _util.OPS.paintJpegXObject, - args: args - }; - } - }, function (reason) { - (0, _util.warn)('Native JPEG decoding failed -- trying to recover: ' + (reason && reason.message)); - return _this2.buildPaintImageXObject({ - resources: resources, - image: image, - isInline: isInline, - operatorList: operatorList, - cacheKey: cacheKey, - imageCache: imageCache, - forceDisableNativeImageDecoder: true - }); - }); - } - - var nativeImageDecoder = null; - - if (nativeImageDecoderSupport === _util.NativeImageDecoding.DECODE && (image instanceof _jpeg_stream.JpegStream || mask instanceof _jpeg_stream.JpegStream || softMask instanceof _jpeg_stream.JpegStream)) { - nativeImageDecoder = new NativeImageDecoder({ - xref: this.xref, - resources: resources, - handler: this.handler, - forceDataSchema: this.options.forceDataSchema, - pdfFunctionFactory: this.pdfFunctionFactory - }); - } - - operatorList.addDependency(objId); - args = [objId, w, h]; - - _image.PDFImage.buildImage({ - handler: this.handler, - xref: this.xref, - res: resources, - image: image, - isInline: isInline, - nativeDecoder: nativeImageDecoder, - pdfFunctionFactory: this.pdfFunctionFactory - }).then(function (imageObj) { - var imgData = imageObj.createImageData(false); - - _this2.handler.send('obj', [objId, _this2.pageIndex, 'Image', imgData], [imgData.data.buffer]); - }).catch(function (reason) { - (0, _util.warn)('Unable to decode image: ' + reason); - - _this2.handler.send('obj', [objId, _this2.pageIndex, 'Image', null]); - }); - - operatorList.addOp(_util.OPS.paintImageXObject, args); - - if (cacheKey) { - imageCache[cacheKey] = { - fn: _util.OPS.paintImageXObject, - args: args - }; - } - - return Promise.resolve(); - }, - handleSMask: function PartialEvaluator_handleSmask(smask, resources, operatorList, task, stateManager) { - var smaskContent = smask.get('G'); - var smaskOptions = { - subtype: smask.get('S').name, - backdrop: smask.get('BC') - }; - var transferObj = smask.get('TR'); - - if ((0, _function.isPDFFunction)(transferObj)) { - var transferFn = this.pdfFunctionFactory.create(transferObj); - var transferMap = new Uint8Array(256); - var tmp = new Float32Array(1); - - for (var i = 0; i < 256; i++) { - tmp[0] = i / 255; - transferFn(tmp, 0, tmp, 0); - transferMap[i] = tmp[0] * 255 | 0; - } - - smaskOptions.transferMap = transferMap; - } - - return this.buildFormXObject(resources, smaskContent, smaskOptions, operatorList, task, stateManager.state.clone()); - }, - handleTilingType: function handleTilingType(fn, args, resources, pattern, patternDict, operatorList, task) { - var _this3 = this; - - var tilingOpList = new _operator_list.OperatorList(); - var resourcesArray = [patternDict.get('Resources'), resources]; - - var patternResources = _primitives.Dict.merge(this.xref, resourcesArray); - - return this.getOperatorList({ - stream: pattern, - task: task, - resources: patternResources, - operatorList: tilingOpList - }).then(function () { - return (0, _pattern.getTilingPatternIR)({ - fnArray: tilingOpList.fnArray, - argsArray: tilingOpList.argsArray - }, patternDict, args); - }).then(function (tilingPatternIR) { - operatorList.addDependencies(tilingOpList.dependencies); - operatorList.addOp(fn, tilingPatternIR); - }, function (reason) { - if (_this3.options.ignoreErrors) { - _this3.handler.send('UnsupportedFeature', { - featureId: _util.UNSUPPORTED_FEATURES.unknown - }); - - (0, _util.warn)("handleTilingType - ignoring pattern: \"".concat(reason, "\".")); - return; - } - - throw reason; - }); - }, - handleSetFont: function PartialEvaluator_handleSetFont(resources, fontArgs, fontRef, operatorList, task, state) { - var _this4 = this; - - var fontName; - - if (fontArgs) { - fontArgs = fontArgs.slice(); - fontName = fontArgs[0].name; - } - - return this.loadFont(fontName, fontRef, resources).then(function (translated) { - if (!translated.font.isType3Font) { - return translated; - } - - return translated.loadType3Data(_this4, resources, operatorList, task).then(function () { - return translated; - }).catch(function (reason) { - _this4.handler.send('UnsupportedFeature', { - featureId: _util.UNSUPPORTED_FEATURES.font - }); - - return new TranslatedFont('g_font_error', new _fonts.ErrorFont('Type3 font load error: ' + reason), translated.font); - }); - }).then(function (translated) { - state.font = translated.font; - translated.send(_this4.handler); - return translated.loadedName; - }); - }, - handleText: function handleText(chars, state) { - var font = state.font; - var glyphs = font.charsToGlyphs(chars); - - if (font.data) { - var isAddToPathSet = !!(state.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG); - - if (isAddToPathSet || state.fillColorSpace.name === 'Pattern' || font.disableFontFace || this.options.disableFontFace) { - PartialEvaluator.buildFontPaths(font, glyphs, this.handler); - } - } - - return glyphs; - }, - setGState: function PartialEvaluator_setGState(resources, gState, operatorList, task, stateManager) { - var _this5 = this; - - var gStateObj = []; - var gStateKeys = gState.getKeys(); - var promise = Promise.resolve(); - - var _loop = function _loop() { - var key = gStateKeys[i]; - var value = gState.get(key); - - switch (key) { - case 'Type': - break; - - case 'LW': - case 'LC': - case 'LJ': - case 'ML': - case 'D': - case 'RI': - case 'FL': - case 'CA': - case 'ca': - gStateObj.push([key, value]); - break; - - case 'Font': - promise = promise.then(function () { - return _this5.handleSetFont(resources, null, value[0], operatorList, task, stateManager.state).then(function (loadedName) { - operatorList.addDependency(loadedName); - gStateObj.push([key, [loadedName, value[1]]]); - }); - }); - break; - - case 'BM': - gStateObj.push([key, normalizeBlendMode(value)]); - break; - - case 'SMask': - if ((0, _primitives.isName)(value, 'None')) { - gStateObj.push([key, false]); - break; - } - - if ((0, _primitives.isDict)(value)) { - promise = promise.then(function () { - return _this5.handleSMask(value, resources, operatorList, task, stateManager); - }); - gStateObj.push([key, true]); - } else { - (0, _util.warn)('Unsupported SMask type'); - } - - break; - - case 'OP': - case 'op': - case 'OPM': - case 'BG': - case 'BG2': - case 'UCR': - case 'UCR2': - case 'TR': - case 'TR2': - case 'HT': - case 'SM': - case 'SA': - case 'AIS': - case 'TK': - (0, _util.info)('graphic state operator ' + key); - break; - - default: - (0, _util.info)('Unknown graphic state operator ' + key); - break; - } - }; - - for (var i = 0, ii = gStateKeys.length; i < ii; i++) { - _loop(); - } - - return promise.then(function () { - if (gStateObj.length > 0) { - operatorList.addOp(_util.OPS.setGState, [gStateObj]); - } - }); - }, - loadFont: function PartialEvaluator_loadFont(fontName, font, resources) { - var _this6 = this; - - function errorFont() { - return Promise.resolve(new TranslatedFont('g_font_error', new _fonts.ErrorFont('Font ' + fontName + ' is not available'), font)); - } - - var fontRef, - xref = this.xref; - - if (font) { - if (!(0, _primitives.isRef)(font)) { - throw new Error('The "font" object should be a reference.'); - } - - fontRef = font; - } else { - var fontRes = resources.get('Font'); - - if (fontRes) { - fontRef = fontRes.getRaw(fontName); - } else { - (0, _util.warn)('fontRes not available'); - return errorFont(); - } - } - - if (!fontRef) { - (0, _util.warn)('fontRef not available'); - return errorFont(); - } - - if (this.fontCache.has(fontRef)) { - return this.fontCache.get(fontRef); - } - - font = xref.fetchIfRef(fontRef); - - if (!(0, _primitives.isDict)(font)) { - return errorFont(); - } - - if (font.translated) { - return font.translated; - } - - var fontCapability = (0, _util.createPromiseCapability)(); - var preEvaluatedFont = this.preEvaluateFont(font); - var descriptor = preEvaluatedFont.descriptor; - var fontRefIsRef = (0, _primitives.isRef)(fontRef), - fontID; - - if (fontRefIsRef) { - fontID = fontRef.toString(); - } - - if ((0, _primitives.isDict)(descriptor)) { - if (!descriptor.fontAliases) { - descriptor.fontAliases = Object.create(null); - } - - var fontAliases = descriptor.fontAliases; - var hash = preEvaluatedFont.hash; - - if (fontAliases[hash]) { - var aliasFontRef = fontAliases[hash].aliasRef; - - if (fontRefIsRef && aliasFontRef && this.fontCache.has(aliasFontRef)) { - this.fontCache.putAlias(fontRef, aliasFontRef); - return this.fontCache.get(fontRef); - } - } else { - fontAliases[hash] = { - fontID: _fonts.Font.getFontID() - }; - } - - if (fontRefIsRef) { - fontAliases[hash].aliasRef = fontRef; - } - - fontID = fontAliases[hash].fontID; - } - - if (fontRefIsRef) { - this.fontCache.put(fontRef, fontCapability.promise); - } else { - if (!fontID) { - fontID = this.idFactory.createObjId(); - } - - this.fontCache.put('id_' + fontID, fontCapability.promise); - } - - (0, _util.assert)(fontID, 'The "fontID" must be defined.'); - font.loadedName = 'g_' + this.pdfManager.docId + '_f' + fontID; - font.translated = fontCapability.promise; - var translatedPromise; - - try { - translatedPromise = this.translateFont(preEvaluatedFont); - } catch (e) { - translatedPromise = Promise.reject(e); - } - - translatedPromise.then(function (translatedFont) { - if (translatedFont.fontType !== undefined) { - var xrefFontStats = xref.stats.fontTypes; - xrefFontStats[translatedFont.fontType] = true; - } - - fontCapability.resolve(new TranslatedFont(font.loadedName, translatedFont, font)); - }).catch(function (reason) { - _this6.handler.send('UnsupportedFeature', { - featureId: _util.UNSUPPORTED_FEATURES.font - }); - - try { - var descriptor = preEvaluatedFont.descriptor; - var fontFile3 = descriptor && descriptor.get('FontFile3'); - var subtype = fontFile3 && fontFile3.get('Subtype'); - var fontType = (0, _fonts.getFontType)(preEvaluatedFont.type, subtype && subtype.name); - var xrefFontStats = xref.stats.fontTypes; - xrefFontStats[fontType] = true; - } catch (ex) {} - - fontCapability.resolve(new TranslatedFont(font.loadedName, new _fonts.ErrorFont(reason instanceof Error ? reason.message : reason), font)); - }); - return fontCapability.promise; - }, - buildPath: function PartialEvaluator_buildPath(operatorList, fn, args) { - var lastIndex = operatorList.length - 1; - - if (!args) { - args = []; - } - - if (lastIndex < 0 || operatorList.fnArray[lastIndex] !== _util.OPS.constructPath) { - operatorList.addOp(_util.OPS.constructPath, [[fn], args]); - } else { - var opArgs = operatorList.argsArray[lastIndex]; - opArgs[0].push(fn); - Array.prototype.push.apply(opArgs[1], args); - } - }, - handleColorN: function PartialEvaluator_handleColorN(operatorList, fn, args, cs, patterns, resources, task) { - var patternName = args[args.length - 1]; - var pattern; - - if ((0, _primitives.isName)(patternName) && (pattern = patterns.get(patternName.name))) { - var dict = (0, _primitives.isStream)(pattern) ? pattern.dict : pattern; - var typeNum = dict.get('PatternType'); - - if (typeNum === TILING_PATTERN) { - var color = cs.base ? cs.base.getRgb(args, 0) : null; - return this.handleTilingType(fn, color, resources, pattern, dict, operatorList, task); - } else if (typeNum === SHADING_PATTERN) { - var shading = dict.get('Shading'); - var matrix = dict.getArray('Matrix'); - pattern = _pattern.Pattern.parseShading(shading, matrix, this.xref, resources, this.handler, this.pdfFunctionFactory); - operatorList.addOp(fn, pattern.getIR()); - return Promise.resolve(); - } - - return Promise.reject(new Error('Unknown PatternType: ' + typeNum)); - } - - operatorList.addOp(fn, args); - return Promise.resolve(); - }, - getOperatorList: function getOperatorList(_ref6) { - var _this7 = this; - - var stream = _ref6.stream, - task = _ref6.task, - resources = _ref6.resources, - operatorList = _ref6.operatorList, - _ref6$initialState = _ref6.initialState, - initialState = _ref6$initialState === void 0 ? null : _ref6$initialState; - resources = resources || _primitives.Dict.empty; - initialState = initialState || new EvalState(); - - if (!operatorList) { - throw new Error('getOperatorList: missing "operatorList" parameter'); - } - - var self = this; - var xref = this.xref; - var imageCache = Object.create(null); - - var xobjs = resources.get('XObject') || _primitives.Dict.empty; - - var patterns = resources.get('Pattern') || _primitives.Dict.empty; - - var stateManager = new StateManager(initialState); - var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager); - var timeSlotManager = new TimeSlotManager(); - - function closePendingRestoreOPS(argument) { - for (var i = 0, ii = preprocessor.savedStatesDepth; i < ii; i++) { - operatorList.addOp(_util.OPS.restore, []); - } - } - - return new Promise(function promiseBody(resolve, reject) { - var next = function next(promise) { - promise.then(function () { - try { - promiseBody(resolve, reject); - } catch (ex) { - reject(ex); - } - }, reject); - }; - - task.ensureNotTerminated(); - timeSlotManager.reset(); - var stop, - operation = {}, - i, - ii, - cs; - - while (!(stop = timeSlotManager.check())) { - operation.args = null; - - if (!preprocessor.read(operation)) { - break; - } - - var args = operation.args; - var fn = operation.fn; - - switch (fn | 0) { - case _util.OPS.paintXObject: - var name = args[0].name; - - if (name && imageCache[name] !== undefined) { - operatorList.addOp(imageCache[name].fn, imageCache[name].args); - args = null; - continue; - } - - next(new Promise(function (resolveXObject, rejectXObject) { - if (!name) { - throw new _util.FormatError('XObject must be referred to by name.'); - } - - var xobj = xobjs.get(name); - - if (!xobj) { - operatorList.addOp(fn, args); - resolveXObject(); - return; - } - - if (!(0, _primitives.isStream)(xobj)) { - throw new _util.FormatError('XObject should be a stream'); - } - - var type = xobj.dict.get('Subtype'); - - if (!(0, _primitives.isName)(type)) { - throw new _util.FormatError('XObject should have a Name subtype'); - } - - if (type.name === 'Form') { - stateManager.save(); - self.buildFormXObject(resources, xobj, null, operatorList, task, stateManager.state.clone()).then(function () { - stateManager.restore(); - resolveXObject(); - }, rejectXObject); - return; - } else if (type.name === 'Image') { - self.buildPaintImageXObject({ - resources: resources, - image: xobj, - operatorList: operatorList, - cacheKey: name, - imageCache: imageCache - }).then(resolveXObject, rejectXObject); - return; - } else if (type.name === 'PS') { - (0, _util.info)('Ignored XObject subtype PS'); - } else { - throw new _util.FormatError("Unhandled XObject subtype ".concat(type.name)); - } - - resolveXObject(); - }).catch(function (reason) { - if (self.options.ignoreErrors) { - self.handler.send('UnsupportedFeature', { - featureId: _util.UNSUPPORTED_FEATURES.unknown - }); - (0, _util.warn)("getOperatorList - ignoring XObject: \"".concat(reason, "\".")); - return; - } - - throw reason; - })); - return; - - case _util.OPS.setFont: - var fontSize = args[1]; - next(self.handleSetFont(resources, args, null, operatorList, task, stateManager.state).then(function (loadedName) { - operatorList.addDependency(loadedName); - operatorList.addOp(_util.OPS.setFont, [loadedName, fontSize]); - })); - return; - - case _util.OPS.endInlineImage: - var cacheKey = args[0].cacheKey; - - if (cacheKey) { - var cacheEntry = imageCache[cacheKey]; - - if (cacheEntry !== undefined) { - operatorList.addOp(cacheEntry.fn, cacheEntry.args); - args = null; - continue; - } - } - - next(self.buildPaintImageXObject({ - resources: resources, - image: args[0], - isInline: true, - operatorList: operatorList, - cacheKey: cacheKey, - imageCache: imageCache - })); - return; - - case _util.OPS.showText: - args[0] = self.handleText(args[0], stateManager.state); - break; - - case _util.OPS.showSpacedText: - var arr = args[0]; - var combinedGlyphs = []; - var arrLength = arr.length; - var state = stateManager.state; - - for (i = 0; i < arrLength; ++i) { - var arrItem = arr[i]; - - if ((0, _util.isString)(arrItem)) { - Array.prototype.push.apply(combinedGlyphs, self.handleText(arrItem, state)); - } else if ((0, _util.isNum)(arrItem)) { - combinedGlyphs.push(arrItem); - } - } - - args[0] = combinedGlyphs; - fn = _util.OPS.showText; - break; - - case _util.OPS.nextLineShowText: - operatorList.addOp(_util.OPS.nextLine); - args[0] = self.handleText(args[0], stateManager.state); - fn = _util.OPS.showText; - break; - - case _util.OPS.nextLineSetSpacingShowText: - operatorList.addOp(_util.OPS.nextLine); - operatorList.addOp(_util.OPS.setWordSpacing, [args.shift()]); - operatorList.addOp(_util.OPS.setCharSpacing, [args.shift()]); - args[0] = self.handleText(args[0], stateManager.state); - fn = _util.OPS.showText; - break; - - case _util.OPS.setTextRenderingMode: - stateManager.state.textRenderingMode = args[0]; - break; - - case _util.OPS.setFillColorSpace: - stateManager.state.fillColorSpace = _colorspace.ColorSpace.parse(args[0], xref, resources, self.pdfFunctionFactory); - continue; - - case _util.OPS.setStrokeColorSpace: - stateManager.state.strokeColorSpace = _colorspace.ColorSpace.parse(args[0], xref, resources, self.pdfFunctionFactory); - continue; - - case _util.OPS.setFillColor: - cs = stateManager.state.fillColorSpace; - args = cs.getRgb(args, 0); - fn = _util.OPS.setFillRGBColor; - break; - - case _util.OPS.setStrokeColor: - cs = stateManager.state.strokeColorSpace; - args = cs.getRgb(args, 0); - fn = _util.OPS.setStrokeRGBColor; - break; - - case _util.OPS.setFillGray: - stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.gray; - args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0); - fn = _util.OPS.setFillRGBColor; - break; - - case _util.OPS.setStrokeGray: - stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.gray; - args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0); - fn = _util.OPS.setStrokeRGBColor; - break; - - case _util.OPS.setFillCMYKColor: - stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.cmyk; - args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0); - fn = _util.OPS.setFillRGBColor; - break; - - case _util.OPS.setStrokeCMYKColor: - stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.cmyk; - args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0); - fn = _util.OPS.setStrokeRGBColor; - break; - - case _util.OPS.setFillRGBColor: - stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.rgb; - args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0); - break; - - case _util.OPS.setStrokeRGBColor: - stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.rgb; - args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0); - break; - - case _util.OPS.setFillColorN: - cs = stateManager.state.fillColorSpace; - - if (cs.name === 'Pattern') { - next(self.handleColorN(operatorList, _util.OPS.setFillColorN, args, cs, patterns, resources, task)); - return; - } - - args = cs.getRgb(args, 0); - fn = _util.OPS.setFillRGBColor; - break; - - case _util.OPS.setStrokeColorN: - cs = stateManager.state.strokeColorSpace; - - if (cs.name === 'Pattern') { - next(self.handleColorN(operatorList, _util.OPS.setStrokeColorN, args, cs, patterns, resources, task)); - return; - } - - args = cs.getRgb(args, 0); - fn = _util.OPS.setStrokeRGBColor; - break; - - case _util.OPS.shadingFill: - var shadingRes = resources.get('Shading'); - - if (!shadingRes) { - throw new _util.FormatError('No shading resource found'); - } - - var shading = shadingRes.get(args[0].name); - - if (!shading) { - throw new _util.FormatError('No shading object found'); - } - - var shadingFill = _pattern.Pattern.parseShading(shading, null, xref, resources, self.handler, self.pdfFunctionFactory); - - var patternIR = shadingFill.getIR(); - args = [patternIR]; - fn = _util.OPS.shadingFill; - break; - - case _util.OPS.setGState: - var dictName = args[0]; - var extGState = resources.get('ExtGState'); - - if (!(0, _primitives.isDict)(extGState) || !extGState.has(dictName.name)) { - break; - } - - var gState = extGState.get(dictName.name); - next(self.setGState(resources, gState, operatorList, task, stateManager)); - return; - - case _util.OPS.moveTo: - case _util.OPS.lineTo: - case _util.OPS.curveTo: - case _util.OPS.curveTo2: - case _util.OPS.curveTo3: - case _util.OPS.closePath: - self.buildPath(operatorList, fn, args); - continue; - - case _util.OPS.rectangle: - self.buildPath(operatorList, fn, args); - continue; - - case _util.OPS.markPoint: - case _util.OPS.markPointProps: - case _util.OPS.beginMarkedContent: - case _util.OPS.beginMarkedContentProps: - case _util.OPS.endMarkedContent: - case _util.OPS.beginCompat: - case _util.OPS.endCompat: - continue; - - default: - if (args !== null) { - for (i = 0, ii = args.length; i < ii; i++) { - if (args[i] instanceof _primitives.Dict) { - break; - } - } - - if (i < ii) { - (0, _util.warn)('getOperatorList - ignoring operator: ' + fn); - continue; - } - } - - } - - operatorList.addOp(fn, args); - } - - if (stop) { - next(deferred); - return; - } - - closePendingRestoreOPS(); - resolve(); - }).catch(function (reason) { - if (_this7.options.ignoreErrors) { - _this7.handler.send('UnsupportedFeature', { - featureId: _util.UNSUPPORTED_FEATURES.unknown - }); - - (0, _util.warn)("getOperatorList - ignoring errors during \"".concat(task.name, "\" ") + "task: \"".concat(reason, "\".")); - closePendingRestoreOPS(); - return; - } - - throw reason; - }); - }, - getTextContent: function getTextContent(_ref7) { - var _this8 = this; - - var stream = _ref7.stream, - task = _ref7.task, - resources = _ref7.resources, - _ref7$stateManager = _ref7.stateManager, - stateManager = _ref7$stateManager === void 0 ? null : _ref7$stateManager, - _ref7$normalizeWhites = _ref7.normalizeWhitespace, - normalizeWhitespace = _ref7$normalizeWhites === void 0 ? false : _ref7$normalizeWhites, - _ref7$combineTextItem = _ref7.combineTextItems, - combineTextItems = _ref7$combineTextItem === void 0 ? false : _ref7$combineTextItem, - sink = _ref7.sink, - _ref7$seenStyles = _ref7.seenStyles, - seenStyles = _ref7$seenStyles === void 0 ? Object.create(null) : _ref7$seenStyles; - resources = resources || _primitives.Dict.empty; - stateManager = stateManager || new StateManager(new TextState()); - var WhitespaceRegexp = /\s/g; - var textContent = { - items: [], - styles: Object.create(null) - }; - var textContentItem = { - initialized: false, - str: [], - width: 0, - height: 0, - vertical: false, - lastAdvanceWidth: 0, - lastAdvanceHeight: 0, - textAdvanceScale: 0, - spaceWidth: 0, - fakeSpaceMin: Infinity, - fakeMultiSpaceMin: Infinity, - fakeMultiSpaceMax: -0, - textRunBreakAllowed: false, - transform: null, - fontName: null - }; - var SPACE_FACTOR = 0.3; - var MULTI_SPACE_FACTOR = 1.5; - var MULTI_SPACE_FACTOR_MAX = 4; - var self = this; - var xref = this.xref; - var xobjs = null; - var skipEmptyXObjs = Object.create(null); - var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager); - var textState; - - function ensureTextContentItem() { - if (textContentItem.initialized) { - return textContentItem; - } - - var font = textState.font; - - if (!(font.loadedName in seenStyles)) { - seenStyles[font.loadedName] = true; - textContent.styles[font.loadedName] = { - fontFamily: font.fallbackName, - ascent: font.ascent, - descent: font.descent, - vertical: !!font.vertical - }; - } - - textContentItem.fontName = font.loadedName; - var tsm = [textState.fontSize * textState.textHScale, 0, 0, textState.fontSize, 0, textState.textRise]; - - if (font.isType3Font && textState.fontMatrix !== _util.FONT_IDENTITY_MATRIX && textState.fontSize === 1) { - var glyphHeight = font.bbox[3] - font.bbox[1]; - - if (glyphHeight > 0) { - glyphHeight = glyphHeight * textState.fontMatrix[3]; - tsm[3] *= glyphHeight; - } - } - - var trm = _util.Util.transform(textState.ctm, _util.Util.transform(textState.textMatrix, tsm)); - - textContentItem.transform = trm; - - if (!font.vertical) { - textContentItem.width = 0; - textContentItem.height = Math.sqrt(trm[2] * trm[2] + trm[3] * trm[3]); - textContentItem.vertical = false; - } else { - textContentItem.width = Math.sqrt(trm[0] * trm[0] + trm[1] * trm[1]); - textContentItem.height = 0; - textContentItem.vertical = true; - } - - var a = textState.textLineMatrix[0]; - var b = textState.textLineMatrix[1]; - var scaleLineX = Math.sqrt(a * a + b * b); - a = textState.ctm[0]; - b = textState.ctm[1]; - var scaleCtmX = Math.sqrt(a * a + b * b); - textContentItem.textAdvanceScale = scaleCtmX * scaleLineX; - textContentItem.lastAdvanceWidth = 0; - textContentItem.lastAdvanceHeight = 0; - var spaceWidth = font.spaceWidth / 1000 * textState.fontSize; - - if (spaceWidth) { - textContentItem.spaceWidth = spaceWidth; - textContentItem.fakeSpaceMin = spaceWidth * SPACE_FACTOR; - textContentItem.fakeMultiSpaceMin = spaceWidth * MULTI_SPACE_FACTOR; - textContentItem.fakeMultiSpaceMax = spaceWidth * MULTI_SPACE_FACTOR_MAX; - textContentItem.textRunBreakAllowed = !font.isMonospace; - } else { - textContentItem.spaceWidth = 0; - textContentItem.fakeSpaceMin = Infinity; - textContentItem.fakeMultiSpaceMin = Infinity; - textContentItem.fakeMultiSpaceMax = 0; - textContentItem.textRunBreakAllowed = false; - } - - textContentItem.initialized = true; - return textContentItem; - } - - function replaceWhitespace(str) { - var i = 0, - ii = str.length, - code; - - while (i < ii && (code = str.charCodeAt(i)) >= 0x20 && code <= 0x7F) { - i++; - } - - return i < ii ? str.replace(WhitespaceRegexp, ' ') : str; - } - - function runBidiTransform(textChunk) { - var str = textChunk.str.join(''); - var bidiResult = (0, _bidi.bidi)(str, -1, textChunk.vertical); - return { - str: normalizeWhitespace ? replaceWhitespace(bidiResult.str) : bidiResult.str, - dir: bidiResult.dir, - width: textChunk.width, - height: textChunk.height, - transform: textChunk.transform, - fontName: textChunk.fontName - }; - } - - function handleSetFont(fontName, fontRef) { - return self.loadFont(fontName, fontRef, resources).then(function (translated) { - textState.font = translated.font; - textState.fontMatrix = translated.font.fontMatrix || _util.FONT_IDENTITY_MATRIX; - }); - } - - function buildTextContentItem(chars) { - var font = textState.font; - var textChunk = ensureTextContentItem(); - var width = 0; - var height = 0; - var glyphs = font.charsToGlyphs(chars); - - for (var i = 0; i < glyphs.length; i++) { - var glyph = glyphs[i]; - var glyphWidth = null; - - if (font.vertical && glyph.vmetric) { - glyphWidth = glyph.vmetric[0]; - } else { - glyphWidth = glyph.width; - } - - var glyphUnicode = glyph.unicode; - var NormalizedUnicodes = (0, _unicode.getNormalizedUnicodes)(); - - if (NormalizedUnicodes[glyphUnicode] !== undefined) { - glyphUnicode = NormalizedUnicodes[glyphUnicode]; - } - - glyphUnicode = (0, _unicode.reverseIfRtl)(glyphUnicode); - var charSpacing = textState.charSpacing; - - if (glyph.isSpace) { - var wordSpacing = textState.wordSpacing; - charSpacing += wordSpacing; - - if (wordSpacing > 0) { - addFakeSpaces(wordSpacing, textChunk.str); - } - } - - var tx = 0; - var ty = 0; - - if (!font.vertical) { - var w0 = glyphWidth * textState.fontMatrix[0]; - tx = (w0 * textState.fontSize + charSpacing) * textState.textHScale; - width += tx; - } else { - var w1 = glyphWidth * textState.fontMatrix[0]; - ty = w1 * textState.fontSize + charSpacing; - height += ty; - } - - textState.translateTextMatrix(tx, ty); - textChunk.str.push(glyphUnicode); - } - - if (!font.vertical) { - textChunk.lastAdvanceWidth = width; - textChunk.width += width; - } else { - textChunk.lastAdvanceHeight = height; - textChunk.height += Math.abs(height); - } - - return textChunk; - } - - function addFakeSpaces(width, strBuf) { - if (width < textContentItem.fakeSpaceMin) { - return; - } - - if (width < textContentItem.fakeMultiSpaceMin) { - strBuf.push(' '); - return; - } - - var fakeSpaces = Math.round(width / textContentItem.spaceWidth); - - while (fakeSpaces-- > 0) { - strBuf.push(' '); - } - } - - function flushTextContentItem() { - if (!textContentItem.initialized) { - return; - } - - if (!textContentItem.vertical) { - textContentItem.width *= textContentItem.textAdvanceScale; - } else { - textContentItem.height *= textContentItem.textAdvanceScale; - } - - textContent.items.push(runBidiTransform(textContentItem)); - textContentItem.initialized = false; - textContentItem.str.length = 0; - } - - function enqueueChunk() { - var length = textContent.items.length; - - if (length > 0) { - sink.enqueue(textContent, length); - textContent.items = []; - textContent.styles = Object.create(null); - } - } - - var timeSlotManager = new TimeSlotManager(); - return new Promise(function promiseBody(resolve, reject) { - var next = function next(promise) { - enqueueChunk(); - Promise.all([promise, sink.ready]).then(function () { - try { - promiseBody(resolve, reject); - } catch (ex) { - reject(ex); - } - }, reject); - }; - - task.ensureNotTerminated(); - timeSlotManager.reset(); - var stop, - operation = {}, - args = []; - - while (!(stop = timeSlotManager.check())) { - args.length = 0; - operation.args = args; - - if (!preprocessor.read(operation)) { - break; - } - - textState = stateManager.state; - var fn = operation.fn; - args = operation.args; - var advance, diff; - - switch (fn | 0) { - case _util.OPS.setFont: - var fontNameArg = args[0].name, - fontSizeArg = args[1]; - - if (textState.font && fontNameArg === textState.fontName && fontSizeArg === textState.fontSize) { - break; - } - - flushTextContentItem(); - textState.fontName = fontNameArg; - textState.fontSize = fontSizeArg; - next(handleSetFont(fontNameArg, null)); - return; - - case _util.OPS.setTextRise: - flushTextContentItem(); - textState.textRise = args[0]; - break; - - case _util.OPS.setHScale: - flushTextContentItem(); - textState.textHScale = args[0] / 100; - break; - - case _util.OPS.setLeading: - flushTextContentItem(); - textState.leading = args[0]; - break; - - case _util.OPS.moveText: - var isSameTextLine = !textState.font ? false : (textState.font.vertical ? args[0] : args[1]) === 0; - advance = args[0] - args[1]; - - if (combineTextItems && isSameTextLine && textContentItem.initialized && advance > 0 && advance <= textContentItem.fakeMultiSpaceMax) { - textState.translateTextLineMatrix(args[0], args[1]); - textContentItem.width += args[0] - textContentItem.lastAdvanceWidth; - textContentItem.height += args[1] - textContentItem.lastAdvanceHeight; - diff = args[0] - textContentItem.lastAdvanceWidth - (args[1] - textContentItem.lastAdvanceHeight); - addFakeSpaces(diff, textContentItem.str); - break; - } - - flushTextContentItem(); - textState.translateTextLineMatrix(args[0], args[1]); - textState.textMatrix = textState.textLineMatrix.slice(); - break; - - case _util.OPS.setLeadingMoveText: - flushTextContentItem(); - textState.leading = -args[1]; - textState.translateTextLineMatrix(args[0], args[1]); - textState.textMatrix = textState.textLineMatrix.slice(); - break; - - case _util.OPS.nextLine: - flushTextContentItem(); - textState.carriageReturn(); - break; - - case _util.OPS.setTextMatrix: - advance = textState.calcTextLineMatrixAdvance(args[0], args[1], args[2], args[3], args[4], args[5]); - - if (combineTextItems && advance !== null && textContentItem.initialized && advance.value > 0 && advance.value <= textContentItem.fakeMultiSpaceMax) { - textState.translateTextLineMatrix(advance.width, advance.height); - textContentItem.width += advance.width - textContentItem.lastAdvanceWidth; - textContentItem.height += advance.height - textContentItem.lastAdvanceHeight; - diff = advance.width - textContentItem.lastAdvanceWidth - (advance.height - textContentItem.lastAdvanceHeight); - addFakeSpaces(diff, textContentItem.str); - break; - } - - flushTextContentItem(); - textState.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); - textState.setTextLineMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); - break; - - case _util.OPS.setCharSpacing: - textState.charSpacing = args[0]; - break; - - case _util.OPS.setWordSpacing: - textState.wordSpacing = args[0]; - break; - - case _util.OPS.beginText: - flushTextContentItem(); - textState.textMatrix = _util.IDENTITY_MATRIX.slice(); - textState.textLineMatrix = _util.IDENTITY_MATRIX.slice(); - break; - - case _util.OPS.showSpacedText: - var items = args[0]; - var offset; - - for (var j = 0, jj = items.length; j < jj; j++) { - if (typeof items[j] === 'string') { - buildTextContentItem(items[j]); - } else if ((0, _util.isNum)(items[j])) { - ensureTextContentItem(); - advance = items[j] * textState.fontSize / 1000; - var breakTextRun = false; - - if (textState.font.vertical) { - offset = advance; - textState.translateTextMatrix(0, offset); - breakTextRun = textContentItem.textRunBreakAllowed && advance > textContentItem.fakeMultiSpaceMax; - - if (!breakTextRun) { - textContentItem.height += offset; - } - } else { - advance = -advance; - offset = advance * textState.textHScale; - textState.translateTextMatrix(offset, 0); - breakTextRun = textContentItem.textRunBreakAllowed && advance > textContentItem.fakeMultiSpaceMax; - - if (!breakTextRun) { - textContentItem.width += offset; - } - } - - if (breakTextRun) { - flushTextContentItem(); - } else if (advance > 0) { - addFakeSpaces(advance, textContentItem.str); - } - } - } - - break; - - case _util.OPS.showText: - buildTextContentItem(args[0]); - break; - - case _util.OPS.nextLineShowText: - flushTextContentItem(); - textState.carriageReturn(); - buildTextContentItem(args[0]); - break; - - case _util.OPS.nextLineSetSpacingShowText: - flushTextContentItem(); - textState.wordSpacing = args[0]; - textState.charSpacing = args[1]; - textState.carriageReturn(); - buildTextContentItem(args[2]); - break; - - case _util.OPS.paintXObject: - flushTextContentItem(); - - if (!xobjs) { - xobjs = resources.get('XObject') || _primitives.Dict.empty; - } - - var name = args[0].name; - - if (name && skipEmptyXObjs[name] !== undefined) { - break; - } - - next(new Promise(function (resolveXObject, rejectXObject) { - if (!name) { - throw new _util.FormatError('XObject must be referred to by name.'); - } - - var xobj = xobjs.get(name); - - if (!xobj) { - resolveXObject(); - return; - } - - if (!(0, _primitives.isStream)(xobj)) { - throw new _util.FormatError('XObject should be a stream'); - } - - var type = xobj.dict.get('Subtype'); - - if (!(0, _primitives.isName)(type)) { - throw new _util.FormatError('XObject should have a Name subtype'); - } - - if (type.name !== 'Form') { - skipEmptyXObjs[name] = true; - resolveXObject(); - return; - } - - var currentState = stateManager.state.clone(); - var xObjStateManager = new StateManager(currentState); - var matrix = xobj.dict.getArray('Matrix'); - - if (Array.isArray(matrix) && matrix.length === 6) { - xObjStateManager.transform(matrix); - } - - enqueueChunk(); - var sinkWrapper = { - enqueueInvoked: false, - enqueue: function enqueue(chunk, size) { - this.enqueueInvoked = true; - sink.enqueue(chunk, size); - }, - - get desiredSize() { - return sink.desiredSize; - }, - - get ready() { - return sink.ready; - } - - }; - self.getTextContent({ - stream: xobj, - task: task, - resources: xobj.dict.get('Resources') || resources, - stateManager: xObjStateManager, - normalizeWhitespace: normalizeWhitespace, - combineTextItems: combineTextItems, - sink: sinkWrapper, - seenStyles: seenStyles - }).then(function () { - if (!sinkWrapper.enqueueInvoked) { - skipEmptyXObjs[name] = true; - } - - resolveXObject(); - }, rejectXObject); - }).catch(function (reason) { - if (reason instanceof _util.AbortException) { - return; - } - - if (self.options.ignoreErrors) { - (0, _util.warn)("getTextContent - ignoring XObject: \"".concat(reason, "\".")); - return; - } - - throw reason; - })); - return; - - case _util.OPS.setGState: - flushTextContentItem(); - var dictName = args[0]; - var extGState = resources.get('ExtGState'); - - if (!(0, _primitives.isDict)(extGState) || !(0, _primitives.isName)(dictName)) { - break; - } - - var gState = extGState.get(dictName.name); - - if (!(0, _primitives.isDict)(gState)) { - break; - } - - var gStateFont = gState.get('Font'); - - if (gStateFont) { - textState.fontName = null; - textState.fontSize = gStateFont[1]; - next(handleSetFont(null, gStateFont[0])); - return; - } - - break; - } - - if (textContent.items.length >= sink.desiredSize) { - stop = true; - break; - } - } - - if (stop) { - next(deferred); - return; - } - - flushTextContentItem(); - enqueueChunk(); - resolve(); - }).catch(function (reason) { - if (reason instanceof _util.AbortException) { - return; - } - - if (_this8.options.ignoreErrors) { - (0, _util.warn)("getTextContent - ignoring errors during \"".concat(task.name, "\" ") + "task: \"".concat(reason, "\".")); - flushTextContentItem(); - enqueueChunk(); - return; - } - - throw reason; - }); - }, - extractDataStructures: function PartialEvaluator_extractDataStructures(dict, baseDict, properties) { - var _this9 = this; - - var xref = this.xref; - var toUnicode = dict.get('ToUnicode') || baseDict.get('ToUnicode'); - var toUnicodePromise = toUnicode ? this.readToUnicode(toUnicode) : Promise.resolve(undefined); - - if (properties.composite) { - var cidSystemInfo = dict.get('CIDSystemInfo'); - - if ((0, _primitives.isDict)(cidSystemInfo)) { - properties.cidSystemInfo = { - registry: (0, _util.stringToPDFString)(cidSystemInfo.get('Registry')), - ordering: (0, _util.stringToPDFString)(cidSystemInfo.get('Ordering')), - supplement: cidSystemInfo.get('Supplement') - }; - } - - var cidToGidMap = dict.get('CIDToGIDMap'); - - if ((0, _primitives.isStream)(cidToGidMap)) { - properties.cidToGidMap = this.readCidToGidMap(cidToGidMap); - } - } - - var differences = []; - var baseEncodingName = null; - var encoding; - - if (dict.has('Encoding')) { - encoding = dict.get('Encoding'); - - if ((0, _primitives.isDict)(encoding)) { - baseEncodingName = encoding.get('BaseEncoding'); - baseEncodingName = (0, _primitives.isName)(baseEncodingName) ? baseEncodingName.name : null; - - if (encoding.has('Differences')) { - var diffEncoding = encoding.get('Differences'); - var index = 0; - - for (var j = 0, jj = diffEncoding.length; j < jj; j++) { - var data = xref.fetchIfRef(diffEncoding[j]); - - if ((0, _util.isNum)(data)) { - index = data; - } else if ((0, _primitives.isName)(data)) { - differences[index++] = data.name; - } else { - throw new _util.FormatError("Invalid entry in 'Differences' array: ".concat(data)); - } - } - } - } else if ((0, _primitives.isName)(encoding)) { - baseEncodingName = encoding.name; - } else { - throw new _util.FormatError('Encoding is not a Name nor a Dict'); - } - - if (baseEncodingName !== 'MacRomanEncoding' && baseEncodingName !== 'MacExpertEncoding' && baseEncodingName !== 'WinAnsiEncoding') { - baseEncodingName = null; - } - } - - if (baseEncodingName) { - properties.defaultEncoding = (0, _encodings.getEncoding)(baseEncodingName).slice(); - } else { - var isSymbolicFont = !!(properties.flags & _fonts.FontFlags.Symbolic); - var isNonsymbolicFont = !!(properties.flags & _fonts.FontFlags.Nonsymbolic); - encoding = _encodings.StandardEncoding; - - if (properties.type === 'TrueType' && !isNonsymbolicFont) { - encoding = _encodings.WinAnsiEncoding; - } - - if (isSymbolicFont) { - encoding = _encodings.MacRomanEncoding; - - if (!properties.file) { - if (/Symbol/i.test(properties.name)) { - encoding = _encodings.SymbolSetEncoding; - } else if (/Dingbats/i.test(properties.name)) { - encoding = _encodings.ZapfDingbatsEncoding; - } - } - } - - properties.defaultEncoding = encoding; - } - - properties.differences = differences; - properties.baseEncodingName = baseEncodingName; - properties.hasEncoding = !!baseEncodingName || differences.length > 0; - properties.dict = dict; - return toUnicodePromise.then(function (toUnicode) { - properties.toUnicode = toUnicode; - return _this9.buildToUnicode(properties); - }).then(function (toUnicode) { - properties.toUnicode = toUnicode; - return properties; - }); - }, - _buildSimpleFontToUnicode: function _buildSimpleFontToUnicode(properties) { - (0, _util.assert)(!properties.composite, 'Must be a simple font.'); - var toUnicode = [], - charcode, - glyphName; - var encoding = properties.defaultEncoding.slice(); - var baseEncodingName = properties.baseEncodingName; - var differences = properties.differences; - - for (charcode in differences) { - glyphName = differences[charcode]; - - if (glyphName === '.notdef') { - continue; - } - - encoding[charcode] = glyphName; - } - - var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); - - for (charcode in encoding) { - glyphName = encoding[charcode]; - - if (glyphName === '') { - continue; - } else if (glyphsUnicodeMap[glyphName] === undefined) { - var code = 0; - - switch (glyphName[0]) { - case 'G': - if (glyphName.length === 3) { - code = parseInt(glyphName.substring(1), 16); - } - - break; - - case 'g': - if (glyphName.length === 5) { - code = parseInt(glyphName.substring(1), 16); - } - - break; - - case 'C': - case 'c': - if (glyphName.length >= 3) { - code = +glyphName.substring(1); - } - - break; - - default: - var unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap); - - if (unicode !== -1) { - code = unicode; - } - - } - - if (code) { - if (baseEncodingName && code === +charcode) { - var baseEncoding = (0, _encodings.getEncoding)(baseEncodingName); - - if (baseEncoding && (glyphName = baseEncoding[charcode])) { - toUnicode[charcode] = String.fromCharCode(glyphsUnicodeMap[glyphName]); - continue; - } - } - - toUnicode[charcode] = String.fromCodePoint(code); - } - - continue; - } - - toUnicode[charcode] = String.fromCharCode(glyphsUnicodeMap[glyphName]); - } - - return new _fonts.ToUnicodeMap(toUnicode); - }, - buildToUnicode: function buildToUnicode(properties) { - properties.hasIncludedToUnicodeMap = !!properties.toUnicode && properties.toUnicode.length > 0; - - if (properties.hasIncludedToUnicodeMap) { - if (!properties.composite && properties.hasEncoding) { - properties.fallbackToUnicode = this._buildSimpleFontToUnicode(properties); - } - - return Promise.resolve(properties.toUnicode); - } - - if (!properties.composite) { - return Promise.resolve(this._buildSimpleFontToUnicode(properties)); - } - - if (properties.composite && (properties.cMap.builtInCMap && !(properties.cMap instanceof _cmap.IdentityCMap) || properties.cidSystemInfo.registry === 'Adobe' && (properties.cidSystemInfo.ordering === 'GB1' || properties.cidSystemInfo.ordering === 'CNS1' || properties.cidSystemInfo.ordering === 'Japan1' || properties.cidSystemInfo.ordering === 'Korea1'))) { - var registry = properties.cidSystemInfo.registry; - var ordering = properties.cidSystemInfo.ordering; - - var ucs2CMapName = _primitives.Name.get(registry + '-' + ordering + '-UCS2'); - - return _cmap.CMapFactory.create({ - encoding: ucs2CMapName, - fetchBuiltInCMap: this.fetchBuiltInCMap, - useCMap: null - }).then(function (ucs2CMap) { - var cMap = properties.cMap; - var toUnicode = []; - cMap.forEach(function (charcode, cid) { - if (cid > 0xffff) { - throw new _util.FormatError('Max size of CID is 65,535'); - } - - var ucs2 = ucs2CMap.lookup(cid); - - if (ucs2) { - toUnicode[charcode] = String.fromCharCode((ucs2.charCodeAt(0) << 8) + ucs2.charCodeAt(1)); - } - }); - return new _fonts.ToUnicodeMap(toUnicode); - }); - } - - return Promise.resolve(new _fonts.IdentityToUnicodeMap(properties.firstChar, properties.lastChar)); - }, - readToUnicode: function PartialEvaluator_readToUnicode(toUnicode) { - var cmapObj = toUnicode; - - if ((0, _primitives.isName)(cmapObj)) { - return _cmap.CMapFactory.create({ - encoding: cmapObj, - fetchBuiltInCMap: this.fetchBuiltInCMap, - useCMap: null - }).then(function (cmap) { - if (cmap instanceof _cmap.IdentityCMap) { - return new _fonts.IdentityToUnicodeMap(0, 0xFFFF); - } - - return new _fonts.ToUnicodeMap(cmap.getMap()); - }); - } else if ((0, _primitives.isStream)(cmapObj)) { - return _cmap.CMapFactory.create({ - encoding: cmapObj, - fetchBuiltInCMap: this.fetchBuiltInCMap, - useCMap: null - }).then(function (cmap) { - if (cmap instanceof _cmap.IdentityCMap) { - return new _fonts.IdentityToUnicodeMap(0, 0xFFFF); - } - - var map = new Array(cmap.length); - cmap.forEach(function (charCode, token) { - var str = []; - - for (var k = 0; k < token.length; k += 2) { - var w1 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1); - - if ((w1 & 0xF800) !== 0xD800) { - str.push(w1); - continue; - } - - k += 2; - var w2 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1); - str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000); - } - - map[charCode] = String.fromCodePoint.apply(String, str); - }); - return new _fonts.ToUnicodeMap(map); - }); - } - - return Promise.resolve(null); - }, - readCidToGidMap: function PartialEvaluator_readCidToGidMap(cidToGidStream) { - var glyphsData = cidToGidStream.getBytes(); - var result = []; - - for (var j = 0, jj = glyphsData.length; j < jj; j++) { - var glyphID = glyphsData[j++] << 8 | glyphsData[j]; - - if (glyphID === 0) { - continue; - } - - var code = j >> 1; - result[code] = glyphID; - } - - return result; - }, - extractWidths: function PartialEvaluator_extractWidths(dict, descriptor, properties) { - var xref = this.xref; - var glyphsWidths = []; - var defaultWidth = 0; - var glyphsVMetrics = []; - var defaultVMetrics; - var i, ii, j, jj, start, code, widths; - - if (properties.composite) { - defaultWidth = dict.has('DW') ? dict.get('DW') : 1000; - widths = dict.get('W'); - - if (widths) { - for (i = 0, ii = widths.length; i < ii; i++) { - start = xref.fetchIfRef(widths[i++]); - code = xref.fetchIfRef(widths[i]); - - if (Array.isArray(code)) { - for (j = 0, jj = code.length; j < jj; j++) { - glyphsWidths[start++] = xref.fetchIfRef(code[j]); - } - } else { - var width = xref.fetchIfRef(widths[++i]); - - for (j = start; j <= code; j++) { - glyphsWidths[j] = width; - } - } - } - } - - if (properties.vertical) { - var vmetrics = dict.getArray('DW2') || [880, -1000]; - defaultVMetrics = [vmetrics[1], defaultWidth * 0.5, vmetrics[0]]; - vmetrics = dict.get('W2'); - - if (vmetrics) { - for (i = 0, ii = vmetrics.length; i < ii; i++) { - start = xref.fetchIfRef(vmetrics[i++]); - code = xref.fetchIfRef(vmetrics[i]); - - if (Array.isArray(code)) { - for (j = 0, jj = code.length; j < jj; j++) { - glyphsVMetrics[start++] = [xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j])]; - } - } else { - var vmetric = [xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i])]; - - for (j = start; j <= code; j++) { - glyphsVMetrics[j] = vmetric; - } - } - } - } - } - } else { - var firstChar = properties.firstChar; - widths = dict.get('Widths'); - - if (widths) { - j = firstChar; - - for (i = 0, ii = widths.length; i < ii; i++) { - glyphsWidths[j++] = xref.fetchIfRef(widths[i]); - } - - defaultWidth = parseFloat(descriptor.get('MissingWidth')) || 0; - } else { - var baseFontName = dict.get('BaseFont'); - - if ((0, _primitives.isName)(baseFontName)) { - var metrics = this.getBaseFontMetrics(baseFontName.name); - glyphsWidths = this.buildCharCodeToWidth(metrics.widths, properties); - defaultWidth = metrics.defaultWidth; - } - } - } - - var isMonospace = true; - var firstWidth = defaultWidth; - - for (var glyph in glyphsWidths) { - var glyphWidth = glyphsWidths[glyph]; - - if (!glyphWidth) { - continue; - } - - if (!firstWidth) { - firstWidth = glyphWidth; - continue; - } - - if (firstWidth !== glyphWidth) { - isMonospace = false; - break; - } - } - - if (isMonospace) { - properties.flags |= _fonts.FontFlags.FixedPitch; - } - - properties.defaultWidth = defaultWidth; - properties.widths = glyphsWidths; - properties.defaultVMetrics = defaultVMetrics; - properties.vmetrics = glyphsVMetrics; - }, - isSerifFont: function PartialEvaluator_isSerifFont(baseFontName) { - var fontNameWoStyle = baseFontName.split('-')[0]; - return fontNameWoStyle in (0, _standard_fonts.getSerifFonts)() || fontNameWoStyle.search(/serif/gi) !== -1; - }, - getBaseFontMetrics: function PartialEvaluator_getBaseFontMetrics(name) { - var defaultWidth = 0; - var widths = []; - var monospace = false; - var stdFontMap = (0, _standard_fonts.getStdFontMap)(); - var lookupName = stdFontMap[name] || name; - var Metrics = (0, _metrics.getMetrics)(); - - if (!(lookupName in Metrics)) { - if (this.isSerifFont(name)) { - lookupName = 'Times-Roman'; - } else { - lookupName = 'Helvetica'; - } - } - - var glyphWidths = Metrics[lookupName]; - - if ((0, _util.isNum)(glyphWidths)) { - defaultWidth = glyphWidths; - monospace = true; - } else { - widths = glyphWidths(); - } - - return { - defaultWidth: defaultWidth, - monospace: monospace, - widths: widths - }; - }, - buildCharCodeToWidth: function PartialEvaluator_bulildCharCodeToWidth(widthsByGlyphName, properties) { - var widths = Object.create(null); - var differences = properties.differences; - var encoding = properties.defaultEncoding; - - for (var charCode = 0; charCode < 256; charCode++) { - if (charCode in differences && widthsByGlyphName[differences[charCode]]) { - widths[charCode] = widthsByGlyphName[differences[charCode]]; - continue; - } - - if (charCode in encoding && widthsByGlyphName[encoding[charCode]]) { - widths[charCode] = widthsByGlyphName[encoding[charCode]]; - continue; - } - } - - return widths; - }, - preEvaluateFont: function PartialEvaluator_preEvaluateFont(dict) { - var baseDict = dict; - var type = dict.get('Subtype'); - - if (!(0, _primitives.isName)(type)) { - throw new _util.FormatError('invalid font Subtype'); - } - - var composite = false; - var uint8array; - - if (type.name === 'Type0') { - var df = dict.get('DescendantFonts'); - - if (!df) { - throw new _util.FormatError('Descendant fonts are not specified'); - } - - dict = Array.isArray(df) ? this.xref.fetchIfRef(df[0]) : df; - type = dict.get('Subtype'); - - if (!(0, _primitives.isName)(type)) { - throw new _util.FormatError('invalid font Subtype'); - } - - composite = true; - } - - var descriptor = dict.get('FontDescriptor'); - - if (descriptor) { - var hash = new _murmurhash.MurmurHash3_64(); - var encoding = baseDict.getRaw('Encoding'); - - if ((0, _primitives.isName)(encoding)) { - hash.update(encoding.name); - } else if ((0, _primitives.isRef)(encoding)) { - hash.update(encoding.toString()); - } else if ((0, _primitives.isDict)(encoding)) { - var keys = encoding.getKeys(); - - for (var i = 0, ii = keys.length; i < ii; i++) { - var entry = encoding.getRaw(keys[i]); - - if ((0, _primitives.isName)(entry)) { - hash.update(entry.name); - } else if ((0, _primitives.isRef)(entry)) { - hash.update(entry.toString()); - } else if (Array.isArray(entry)) { - var diffLength = entry.length, - diffBuf = new Array(diffLength); - - for (var j = 0; j < diffLength; j++) { - var diffEntry = entry[j]; - - if ((0, _primitives.isName)(diffEntry)) { - diffBuf[j] = diffEntry.name; - } else if ((0, _util.isNum)(diffEntry) || (0, _primitives.isRef)(diffEntry)) { - diffBuf[j] = diffEntry.toString(); - } - } - - hash.update(diffBuf.join()); - } - } - } - - var toUnicode = dict.get('ToUnicode') || baseDict.get('ToUnicode'); - - if ((0, _primitives.isStream)(toUnicode)) { - var stream = toUnicode.str || toUnicode; - uint8array = stream.buffer ? new Uint8Array(stream.buffer.buffer, 0, stream.bufferLength) : new Uint8Array(stream.bytes.buffer, stream.start, stream.end - stream.start); - hash.update(uint8array); - } else if ((0, _primitives.isName)(toUnicode)) { - hash.update(toUnicode.name); - } - - var widths = dict.get('Widths') || baseDict.get('Widths'); - - if (widths) { - uint8array = new Uint8Array(new Uint32Array(widths).buffer); - hash.update(uint8array); - } - } - - return { - descriptor: descriptor, - dict: dict, - baseDict: baseDict, - composite: composite, - type: type.name, - hash: hash ? hash.hexdigest() : '' - }; - }, - translateFont: function PartialEvaluator_translateFont(preEvaluatedFont) { - var _this10 = this; - - var baseDict = preEvaluatedFont.baseDict; - var dict = preEvaluatedFont.dict; - var composite = preEvaluatedFont.composite; - var descriptor = preEvaluatedFont.descriptor; - var type = preEvaluatedFont.type; - var maxCharIndex = composite ? 0xFFFF : 0xFF; - var properties; - - if (!descriptor) { - if (type === 'Type3') { - descriptor = new _primitives.Dict(null); - descriptor.set('FontName', _primitives.Name.get(type)); - descriptor.set('FontBBox', dict.getArray('FontBBox')); - } else { - var baseFontName = dict.get('BaseFont'); - - if (!(0, _primitives.isName)(baseFontName)) { - throw new _util.FormatError('Base font is not specified'); - } - - baseFontName = baseFontName.name.replace(/[,_]/g, '-'); - var metrics = this.getBaseFontMetrics(baseFontName); - var fontNameWoStyle = baseFontName.split('-')[0]; - var flags = (this.isSerifFont(fontNameWoStyle) ? _fonts.FontFlags.Serif : 0) | (metrics.monospace ? _fonts.FontFlags.FixedPitch : 0) | ((0, _standard_fonts.getSymbolsFonts)()[fontNameWoStyle] ? _fonts.FontFlags.Symbolic : _fonts.FontFlags.Nonsymbolic); - properties = { - type: type, - name: baseFontName, - widths: metrics.widths, - defaultWidth: metrics.defaultWidth, - flags: flags, - firstChar: 0, - lastChar: maxCharIndex - }; - return this.extractDataStructures(dict, dict, properties).then(function (properties) { - properties.widths = _this10.buildCharCodeToWidth(metrics.widths, properties); - return new _fonts.Font(baseFontName, null, properties); - }); - } - } - - var firstChar = dict.get('FirstChar') || 0; - var lastChar = dict.get('LastChar') || maxCharIndex; - var fontName = descriptor.get('FontName'); - var baseFont = dict.get('BaseFont'); - - if ((0, _util.isString)(fontName)) { - fontName = _primitives.Name.get(fontName); - } - - if ((0, _util.isString)(baseFont)) { - baseFont = _primitives.Name.get(baseFont); - } - - if (type !== 'Type3') { - var fontNameStr = fontName && fontName.name; - var baseFontStr = baseFont && baseFont.name; - - if (fontNameStr !== baseFontStr) { - (0, _util.info)("The FontDescriptor's FontName is \"".concat(fontNameStr, "\" but ") + "should be the same as the Font's BaseFont \"".concat(baseFontStr, "\".")); - - if (fontNameStr && baseFontStr && baseFontStr.startsWith(fontNameStr)) { - fontName = baseFont; - } - } - } - - fontName = fontName || baseFont; - - if (!(0, _primitives.isName)(fontName)) { - throw new _util.FormatError('invalid font name'); - } - - var fontFile = descriptor.get('FontFile', 'FontFile2', 'FontFile3'); - - if (fontFile) { - if (fontFile.dict) { - var subtype = fontFile.dict.get('Subtype'); - - if (subtype) { - subtype = subtype.name; - } - - var length1 = fontFile.dict.get('Length1'); - var length2 = fontFile.dict.get('Length2'); - var length3 = fontFile.dict.get('Length3'); - } - } - - properties = { - type: type, - name: fontName.name, - subtype: subtype, - file: fontFile, - length1: length1, - length2: length2, - length3: length3, - loadedName: baseDict.loadedName, - composite: composite, - wideChars: composite, - fixedPitch: false, - fontMatrix: dict.getArray('FontMatrix') || _util.FONT_IDENTITY_MATRIX, - firstChar: firstChar || 0, - lastChar: lastChar || maxCharIndex, - bbox: descriptor.getArray('FontBBox'), - ascent: descriptor.get('Ascent'), - descent: descriptor.get('Descent'), - xHeight: descriptor.get('XHeight'), - capHeight: descriptor.get('CapHeight'), - flags: descriptor.get('Flags'), - italicAngle: descriptor.get('ItalicAngle'), - isType3Font: false - }; - var cMapPromise; - - if (composite) { - var cidEncoding = baseDict.get('Encoding'); - - if ((0, _primitives.isName)(cidEncoding)) { - properties.cidEncoding = cidEncoding.name; - } - - cMapPromise = _cmap.CMapFactory.create({ - encoding: cidEncoding, - fetchBuiltInCMap: this.fetchBuiltInCMap, - useCMap: null - }).then(function (cMap) { - properties.cMap = cMap; - properties.vertical = properties.cMap.vertical; - }); - } else { - cMapPromise = Promise.resolve(undefined); - } - - return cMapPromise.then(function () { - return _this10.extractDataStructures(dict, baseDict, properties); - }).then(function (properties) { - _this10.extractWidths(dict, descriptor, properties); - - if (type === 'Type3') { - properties.isType3Font = true; - } - - return new _fonts.Font(fontName.name, fontFile, properties); - }); - } - }; - - PartialEvaluator.buildFontPaths = function (font, glyphs, handler) { - function buildPath(fontChar) { - if (font.renderer.hasBuiltPath(fontChar)) { - return; - } - - handler.send('commonobj', ["".concat(font.loadedName, "_path_").concat(fontChar), 'FontPath', font.renderer.getPathJs(fontChar)]); - } - - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = glyphs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var glyph = _step.value; - buildPath(glyph.fontChar); - var accent = glyph.accent; - - if (accent && accent.fontChar) { - buildPath(accent.fontChar); - } - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return != null) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - }; - - return PartialEvaluator; - }(); - - exports.PartialEvaluator = PartialEvaluator; - - var TranslatedFont = function TranslatedFontClosure() { - function TranslatedFont(loadedName, font, dict) { - this.loadedName = loadedName; - this.font = font; - this.dict = dict; - this.type3Loaded = null; - this.sent = false; - } - - TranslatedFont.prototype = { - send: function send(handler) { - if (this.sent) { - return; - } - - this.sent = true; - handler.send('commonobj', [this.loadedName, 'Font', this.font.exportData()]); - }, - fallback: function fallback(handler) { - if (!this.font.data) { - return; - } - - this.font.disableFontFace = true; - var glyphs = this.font.glyphCacheValues; - PartialEvaluator.buildFontPaths(this.font, glyphs, handler); - }, - loadType3Data: function loadType3Data(evaluator, resources, parentOperatorList, task) { - if (!this.font.isType3Font) { - throw new Error('Must be a Type3 font.'); - } - - if (this.type3Loaded) { - return this.type3Loaded; - } - - var type3Options = Object.create(evaluator.options); - type3Options.ignoreErrors = false; - var type3Evaluator = evaluator.clone(type3Options); - var translatedFont = this.font; - var loadCharProcsPromise = Promise.resolve(); - var charProcs = this.dict.get('CharProcs'); - var fontResources = this.dict.get('Resources') || resources; - var charProcKeys = charProcs.getKeys(); - var charProcOperatorList = Object.create(null); - - var _loop2 = function _loop2() { - var key = charProcKeys[i]; - loadCharProcsPromise = loadCharProcsPromise.then(function () { - var glyphStream = charProcs.get(key); - var operatorList = new _operator_list.OperatorList(); - return type3Evaluator.getOperatorList({ - stream: glyphStream, - task: task, - resources: fontResources, - operatorList: operatorList - }).then(function () { - charProcOperatorList[key] = operatorList.getIR(); - parentOperatorList.addDependencies(operatorList.dependencies); - }).catch(function (reason) { - (0, _util.warn)("Type3 font resource \"".concat(key, "\" is not available.")); - var operatorList = new _operator_list.OperatorList(); - charProcOperatorList[key] = operatorList.getIR(); - }); - }); - }; - - for (var i = 0, n = charProcKeys.length; i < n; ++i) { - _loop2(); - } - - this.type3Loaded = loadCharProcsPromise.then(function () { - translatedFont.charProcOperatorList = charProcOperatorList; - }); - return this.type3Loaded; - } - }; - return TranslatedFont; - }(); - - var StateManager = function StateManagerClosure() { - function StateManager(initialState) { - this.state = initialState; - this.stateStack = []; - } - - StateManager.prototype = { - save: function save() { - var old = this.state; - this.stateStack.push(this.state); - this.state = old.clone(); - }, - restore: function restore() { - var prev = this.stateStack.pop(); - - if (prev) { - this.state = prev; - } - }, - transform: function transform(args) { - this.state.ctm = _util.Util.transform(this.state.ctm, args); - } - }; - return StateManager; - }(); - - var TextState = function TextStateClosure() { - function TextState() { - this.ctm = new Float32Array(_util.IDENTITY_MATRIX); - this.fontName = null; - this.fontSize = 0; - this.font = null; - this.fontMatrix = _util.FONT_IDENTITY_MATRIX; - this.textMatrix = _util.IDENTITY_MATRIX.slice(); - this.textLineMatrix = _util.IDENTITY_MATRIX.slice(); - this.charSpacing = 0; - this.wordSpacing = 0; - this.leading = 0; - this.textHScale = 1; - this.textRise = 0; - } - - TextState.prototype = { - setTextMatrix: function TextState_setTextMatrix(a, b, c, d, e, f) { - var m = this.textMatrix; - m[0] = a; - m[1] = b; - m[2] = c; - m[3] = d; - m[4] = e; - m[5] = f; - }, - setTextLineMatrix: function TextState_setTextMatrix(a, b, c, d, e, f) { - var m = this.textLineMatrix; - m[0] = a; - m[1] = b; - m[2] = c; - m[3] = d; - m[4] = e; - m[5] = f; - }, - translateTextMatrix: function TextState_translateTextMatrix(x, y) { - var m = this.textMatrix; - m[4] = m[0] * x + m[2] * y + m[4]; - m[5] = m[1] * x + m[3] * y + m[5]; - }, - translateTextLineMatrix: function TextState_translateTextMatrix(x, y) { - var m = this.textLineMatrix; - m[4] = m[0] * x + m[2] * y + m[4]; - m[5] = m[1] * x + m[3] * y + m[5]; - }, - calcTextLineMatrixAdvance: function TextState_calcTextLineMatrixAdvance(a, b, c, d, e, f) { - var font = this.font; - - if (!font) { - return null; - } - - var m = this.textLineMatrix; - - if (!(a === m[0] && b === m[1] && c === m[2] && d === m[3])) { - return null; - } - - var txDiff = e - m[4], - tyDiff = f - m[5]; - - if (font.vertical && txDiff !== 0 || !font.vertical && tyDiff !== 0) { - return null; - } - - var tx, - ty, - denominator = a * d - b * c; - - if (font.vertical) { - tx = -tyDiff * c / denominator; - ty = tyDiff * a / denominator; - } else { - tx = txDiff * d / denominator; - ty = -txDiff * b / denominator; - } - - return { - width: tx, - height: ty, - value: font.vertical ? ty : tx - }; - }, - calcRenderMatrix: function TextState_calcRendeMatrix(ctm) { - var tsm = [this.fontSize * this.textHScale, 0, 0, this.fontSize, 0, this.textRise]; - return _util.Util.transform(ctm, _util.Util.transform(this.textMatrix, tsm)); - }, - carriageReturn: function TextState_carriageReturn() { - this.translateTextLineMatrix(0, -this.leading); - this.textMatrix = this.textLineMatrix.slice(); - }, - clone: function TextState_clone() { - var clone = Object.create(this); - clone.textMatrix = this.textMatrix.slice(); - clone.textLineMatrix = this.textLineMatrix.slice(); - clone.fontMatrix = this.fontMatrix.slice(); - return clone; - } - }; - return TextState; - }(); - - var EvalState = function EvalStateClosure() { - function EvalState() { - this.ctm = new Float32Array(_util.IDENTITY_MATRIX); - this.font = null; - this.textRenderingMode = _util.TextRenderingMode.FILL; - this.fillColorSpace = _colorspace.ColorSpace.singletons.gray; - this.strokeColorSpace = _colorspace.ColorSpace.singletons.gray; - } - - EvalState.prototype = { - clone: function CanvasExtraState_clone() { - return Object.create(this); - } - }; - return EvalState; - }(); - - var EvaluatorPreprocessor = function EvaluatorPreprocessorClosure() { - var getOPMap = (0, _util.getLookupTableFactory)(function (t) { - t['w'] = { - id: _util.OPS.setLineWidth, - numArgs: 1, - variableArgs: false - }; - t['J'] = { - id: _util.OPS.setLineCap, - numArgs: 1, - variableArgs: false - }; - t['j'] = { - id: _util.OPS.setLineJoin, - numArgs: 1, - variableArgs: false - }; - t['M'] = { - id: _util.OPS.setMiterLimit, - numArgs: 1, - variableArgs: false - }; - t['d'] = { - id: _util.OPS.setDash, - numArgs: 2, - variableArgs: false - }; - t['ri'] = { - id: _util.OPS.setRenderingIntent, - numArgs: 1, - variableArgs: false - }; - t['i'] = { - id: _util.OPS.setFlatness, - numArgs: 1, - variableArgs: false - }; - t['gs'] = { - id: _util.OPS.setGState, - numArgs: 1, - variableArgs: false - }; - t['q'] = { - id: _util.OPS.save, - numArgs: 0, - variableArgs: false - }; - t['Q'] = { - id: _util.OPS.restore, - numArgs: 0, - variableArgs: false - }; - t['cm'] = { - id: _util.OPS.transform, - numArgs: 6, - variableArgs: false - }; - t['m'] = { - id: _util.OPS.moveTo, - numArgs: 2, - variableArgs: false - }; - t['l'] = { - id: _util.OPS.lineTo, - numArgs: 2, - variableArgs: false - }; - t['c'] = { - id: _util.OPS.curveTo, - numArgs: 6, - variableArgs: false - }; - t['v'] = { - id: _util.OPS.curveTo2, - numArgs: 4, - variableArgs: false - }; - t['y'] = { - id: _util.OPS.curveTo3, - numArgs: 4, - variableArgs: false - }; - t['h'] = { - id: _util.OPS.closePath, - numArgs: 0, - variableArgs: false - }; - t['re'] = { - id: _util.OPS.rectangle, - numArgs: 4, - variableArgs: false - }; - t['S'] = { - id: _util.OPS.stroke, - numArgs: 0, - variableArgs: false - }; - t['s'] = { - id: _util.OPS.closeStroke, - numArgs: 0, - variableArgs: false - }; - t['f'] = { - id: _util.OPS.fill, - numArgs: 0, - variableArgs: false - }; - t['F'] = { - id: _util.OPS.fill, - numArgs: 0, - variableArgs: false - }; - t['f*'] = { - id: _util.OPS.eoFill, - numArgs: 0, - variableArgs: false - }; - t['B'] = { - id: _util.OPS.fillStroke, - numArgs: 0, - variableArgs: false - }; - t['B*'] = { - id: _util.OPS.eoFillStroke, - numArgs: 0, - variableArgs: false - }; - t['b'] = { - id: _util.OPS.closeFillStroke, - numArgs: 0, - variableArgs: false - }; - t['b*'] = { - id: _util.OPS.closeEOFillStroke, - numArgs: 0, - variableArgs: false - }; - t['n'] = { - id: _util.OPS.endPath, - numArgs: 0, - variableArgs: false - }; - t['W'] = { - id: _util.OPS.clip, - numArgs: 0, - variableArgs: false - }; - t['W*'] = { - id: _util.OPS.eoClip, - numArgs: 0, - variableArgs: false - }; - t['BT'] = { - id: _util.OPS.beginText, - numArgs: 0, - variableArgs: false - }; - t['ET'] = { - id: _util.OPS.endText, - numArgs: 0, - variableArgs: false - }; - t['Tc'] = { - id: _util.OPS.setCharSpacing, - numArgs: 1, - variableArgs: false - }; - t['Tw'] = { - id: _util.OPS.setWordSpacing, - numArgs: 1, - variableArgs: false - }; - t['Tz'] = { - id: _util.OPS.setHScale, - numArgs: 1, - variableArgs: false - }; - t['TL'] = { - id: _util.OPS.setLeading, - numArgs: 1, - variableArgs: false - }; - t['Tf'] = { - id: _util.OPS.setFont, - numArgs: 2, - variableArgs: false - }; - t['Tr'] = { - id: _util.OPS.setTextRenderingMode, - numArgs: 1, - variableArgs: false - }; - t['Ts'] = { - id: _util.OPS.setTextRise, - numArgs: 1, - variableArgs: false - }; - t['Td'] = { - id: _util.OPS.moveText, - numArgs: 2, - variableArgs: false - }; - t['TD'] = { - id: _util.OPS.setLeadingMoveText, - numArgs: 2, - variableArgs: false - }; - t['Tm'] = { - id: _util.OPS.setTextMatrix, - numArgs: 6, - variableArgs: false - }; - t['T*'] = { - id: _util.OPS.nextLine, - numArgs: 0, - variableArgs: false - }; - t['Tj'] = { - id: _util.OPS.showText, - numArgs: 1, - variableArgs: false - }; - t['TJ'] = { - id: _util.OPS.showSpacedText, - numArgs: 1, - variableArgs: false - }; - t['\''] = { - id: _util.OPS.nextLineShowText, - numArgs: 1, - variableArgs: false - }; - t['"'] = { - id: _util.OPS.nextLineSetSpacingShowText, - numArgs: 3, - variableArgs: false - }; - t['d0'] = { - id: _util.OPS.setCharWidth, - numArgs: 2, - variableArgs: false - }; - t['d1'] = { - id: _util.OPS.setCharWidthAndBounds, - numArgs: 6, - variableArgs: false - }; - t['CS'] = { - id: _util.OPS.setStrokeColorSpace, - numArgs: 1, - variableArgs: false - }; - t['cs'] = { - id: _util.OPS.setFillColorSpace, - numArgs: 1, - variableArgs: false - }; - t['SC'] = { - id: _util.OPS.setStrokeColor, - numArgs: 4, - variableArgs: true - }; - t['SCN'] = { - id: _util.OPS.setStrokeColorN, - numArgs: 33, - variableArgs: true - }; - t['sc'] = { - id: _util.OPS.setFillColor, - numArgs: 4, - variableArgs: true - }; - t['scn'] = { - id: _util.OPS.setFillColorN, - numArgs: 33, - variableArgs: true - }; - t['G'] = { - id: _util.OPS.setStrokeGray, - numArgs: 1, - variableArgs: false - }; - t['g'] = { - id: _util.OPS.setFillGray, - numArgs: 1, - variableArgs: false - }; - t['RG'] = { - id: _util.OPS.setStrokeRGBColor, - numArgs: 3, - variableArgs: false - }; - t['rg'] = { - id: _util.OPS.setFillRGBColor, - numArgs: 3, - variableArgs: false - }; - t['K'] = { - id: _util.OPS.setStrokeCMYKColor, - numArgs: 4, - variableArgs: false - }; - t['k'] = { - id: _util.OPS.setFillCMYKColor, - numArgs: 4, - variableArgs: false - }; - t['sh'] = { - id: _util.OPS.shadingFill, - numArgs: 1, - variableArgs: false - }; - t['BI'] = { - id: _util.OPS.beginInlineImage, - numArgs: 0, - variableArgs: false - }; - t['ID'] = { - id: _util.OPS.beginImageData, - numArgs: 0, - variableArgs: false - }; - t['EI'] = { - id: _util.OPS.endInlineImage, - numArgs: 1, - variableArgs: false - }; - t['Do'] = { - id: _util.OPS.paintXObject, - numArgs: 1, - variableArgs: false - }; - t['MP'] = { - id: _util.OPS.markPoint, - numArgs: 1, - variableArgs: false - }; - t['DP'] = { - id: _util.OPS.markPointProps, - numArgs: 2, - variableArgs: false - }; - t['BMC'] = { - id: _util.OPS.beginMarkedContent, - numArgs: 1, - variableArgs: false - }; - t['BDC'] = { - id: _util.OPS.beginMarkedContentProps, - numArgs: 2, - variableArgs: false - }; - t['EMC'] = { - id: _util.OPS.endMarkedContent, - numArgs: 0, - variableArgs: false - }; - t['BX'] = { - id: _util.OPS.beginCompat, - numArgs: 0, - variableArgs: false - }; - t['EX'] = { - id: _util.OPS.endCompat, - numArgs: 0, - variableArgs: false - }; - t['BM'] = null; - t['BD'] = null; - t['true'] = null; - t['fa'] = null; - t['fal'] = null; - t['fals'] = null; - t['false'] = null; - t['nu'] = null; - t['nul'] = null; - t['null'] = null; - }); - var MAX_INVALID_PATH_OPS = 20; - - function EvaluatorPreprocessor(stream, xref, stateManager) { - this.opMap = getOPMap(); - this.parser = new _parser.Parser(new _parser.Lexer(stream, this.opMap), false, xref); - this.stateManager = stateManager; - this.nonProcessedArgs = []; - this._numInvalidPathOPS = 0; - } - - EvaluatorPreprocessor.prototype = { - get savedStatesDepth() { - return this.stateManager.stateStack.length; - }, - - read: function EvaluatorPreprocessor_read(operation) { - var args = operation.args; - - while (true) { - var obj = this.parser.getObj(); - - if ((0, _primitives.isCmd)(obj)) { - var cmd = obj.cmd; - var opSpec = this.opMap[cmd]; - - if (!opSpec) { - (0, _util.warn)("Unknown command \"".concat(cmd, "\".")); - continue; - } - - var fn = opSpec.id; - var numArgs = opSpec.numArgs; - var argsLength = args !== null ? args.length : 0; - - if (!opSpec.variableArgs) { - if (argsLength !== numArgs) { - var nonProcessedArgs = this.nonProcessedArgs; - - while (argsLength > numArgs) { - nonProcessedArgs.push(args.shift()); - argsLength--; - } - - while (argsLength < numArgs && nonProcessedArgs.length !== 0) { - if (args === null) { - args = []; - } - - args.unshift(nonProcessedArgs.pop()); - argsLength++; - } - } - - if (argsLength < numArgs) { - var partialMsg = "command ".concat(cmd, ": expected ").concat(numArgs, " args, ") + "but received ".concat(argsLength, " args."); - - if (fn >= _util.OPS.moveTo && fn <= _util.OPS.endPath && ++this._numInvalidPathOPS > MAX_INVALID_PATH_OPS) { - throw new _util.FormatError("Invalid ".concat(partialMsg)); - } - - (0, _util.warn)("Skipping ".concat(partialMsg)); - - if (args !== null) { - args.length = 0; - } - - continue; - } - } else if (argsLength > numArgs) { - (0, _util.info)("Command ".concat(cmd, ": expected [0, ").concat(numArgs, "] args, ") + "but received ".concat(argsLength, " args.")); - } - - this.preprocessCommand(fn, args); - operation.fn = fn; - operation.args = args; - return true; - } - - if ((0, _primitives.isEOF)(obj)) { - return false; - } - - if (obj !== null) { - if (args === null) { - args = []; - } - - args.push(obj); - - if (args.length > 33) { - throw new _util.FormatError('Too many arguments'); - } - } - } - }, - preprocessCommand: function EvaluatorPreprocessor_preprocessCommand(fn, args) { - switch (fn | 0) { - case _util.OPS.save: - this.stateManager.save(); - break; - - case _util.OPS.restore: - this.stateManager.restore(); - break; - - case _util.OPS.transform: - this.stateManager.transform(args); - break; - } - } - }; - return EvaluatorPreprocessor; - }(); - - /***/ }), - /* 172 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.CMapFactory = exports.IdentityCMap = exports.CMap = void 0; - - var _util = __w_extracthighlights_require__(6); - - var _primitives = __w_extracthighlights_require__(155); - - var _parser = __w_extracthighlights_require__(156); - - var _stream = __w_extracthighlights_require__(157); - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - - function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - - function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - - function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - - var BUILT_IN_CMAPS = ['Adobe-GB1-UCS2', 'Adobe-CNS1-UCS2', 'Adobe-Japan1-UCS2', 'Adobe-Korea1-UCS2', '78-EUC-H', '78-EUC-V', '78-H', '78-RKSJ-H', '78-RKSJ-V', '78-V', '78ms-RKSJ-H', '78ms-RKSJ-V', '83pv-RKSJ-H', '90ms-RKSJ-H', '90ms-RKSJ-V', '90msp-RKSJ-H', '90msp-RKSJ-V', '90pv-RKSJ-H', '90pv-RKSJ-V', 'Add-H', 'Add-RKSJ-H', 'Add-RKSJ-V', 'Add-V', 'Adobe-CNS1-0', 'Adobe-CNS1-1', 'Adobe-CNS1-2', 'Adobe-CNS1-3', 'Adobe-CNS1-4', 'Adobe-CNS1-5', 'Adobe-CNS1-6', 'Adobe-GB1-0', 'Adobe-GB1-1', 'Adobe-GB1-2', 'Adobe-GB1-3', 'Adobe-GB1-4', 'Adobe-GB1-5', 'Adobe-Japan1-0', 'Adobe-Japan1-1', 'Adobe-Japan1-2', 'Adobe-Japan1-3', 'Adobe-Japan1-4', 'Adobe-Japan1-5', 'Adobe-Japan1-6', 'Adobe-Korea1-0', 'Adobe-Korea1-1', 'Adobe-Korea1-2', 'B5-H', 'B5-V', 'B5pc-H', 'B5pc-V', 'CNS-EUC-H', 'CNS-EUC-V', 'CNS1-H', 'CNS1-V', 'CNS2-H', 'CNS2-V', 'ETHK-B5-H', 'ETHK-B5-V', 'ETen-B5-H', 'ETen-B5-V', 'ETenms-B5-H', 'ETenms-B5-V', 'EUC-H', 'EUC-V', 'Ext-H', 'Ext-RKSJ-H', 'Ext-RKSJ-V', 'Ext-V', 'GB-EUC-H', 'GB-EUC-V', 'GB-H', 'GB-V', 'GBK-EUC-H', 'GBK-EUC-V', 'GBK2K-H', 'GBK2K-V', 'GBKp-EUC-H', 'GBKp-EUC-V', 'GBT-EUC-H', 'GBT-EUC-V', 'GBT-H', 'GBT-V', 'GBTpc-EUC-H', 'GBTpc-EUC-V', 'GBpc-EUC-H', 'GBpc-EUC-V', 'H', 'HKdla-B5-H', 'HKdla-B5-V', 'HKdlb-B5-H', 'HKdlb-B5-V', 'HKgccs-B5-H', 'HKgccs-B5-V', 'HKm314-B5-H', 'HKm314-B5-V', 'HKm471-B5-H', 'HKm471-B5-V', 'HKscs-B5-H', 'HKscs-B5-V', 'Hankaku', 'Hiragana', 'KSC-EUC-H', 'KSC-EUC-V', 'KSC-H', 'KSC-Johab-H', 'KSC-Johab-V', 'KSC-V', 'KSCms-UHC-H', 'KSCms-UHC-HW-H', 'KSCms-UHC-HW-V', 'KSCms-UHC-V', 'KSCpc-EUC-H', 'KSCpc-EUC-V', 'Katakana', 'NWP-H', 'NWP-V', 'RKSJ-H', 'RKSJ-V', 'Roman', 'UniCNS-UCS2-H', 'UniCNS-UCS2-V', 'UniCNS-UTF16-H', 'UniCNS-UTF16-V', 'UniCNS-UTF32-H', 'UniCNS-UTF32-V', 'UniCNS-UTF8-H', 'UniCNS-UTF8-V', 'UniGB-UCS2-H', 'UniGB-UCS2-V', 'UniGB-UTF16-H', 'UniGB-UTF16-V', 'UniGB-UTF32-H', 'UniGB-UTF32-V', 'UniGB-UTF8-H', 'UniGB-UTF8-V', 'UniJIS-UCS2-H', 'UniJIS-UCS2-HW-H', 'UniJIS-UCS2-HW-V', 'UniJIS-UCS2-V', 'UniJIS-UTF16-H', 'UniJIS-UTF16-V', 'UniJIS-UTF32-H', 'UniJIS-UTF32-V', 'UniJIS-UTF8-H', 'UniJIS-UTF8-V', 'UniJIS2004-UTF16-H', 'UniJIS2004-UTF16-V', 'UniJIS2004-UTF32-H', 'UniJIS2004-UTF32-V', 'UniJIS2004-UTF8-H', 'UniJIS2004-UTF8-V', 'UniJISPro-UCS2-HW-V', 'UniJISPro-UCS2-V', 'UniJISPro-UTF8-V', 'UniJISX0213-UTF32-H', 'UniJISX0213-UTF32-V', 'UniJISX02132004-UTF32-H', 'UniJISX02132004-UTF32-V', 'UniKS-UCS2-H', 'UniKS-UCS2-V', 'UniKS-UTF16-H', 'UniKS-UTF16-V', 'UniKS-UTF32-H', 'UniKS-UTF32-V', 'UniKS-UTF8-H', 'UniKS-UTF8-V', 'V', 'WP-Symbol']; - - var CMap = - /*#__PURE__*/ - function () { - function CMap() { - var builtInCMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - _classCallCheck(this, CMap); - - this.codespaceRanges = [[], [], [], []]; - this.numCodespaceRanges = 0; - this._map = []; - this.name = ''; - this.vertical = false; - this.useCMap = null; - this.builtInCMap = builtInCMap; - } - - _createClass(CMap, [{ - key: "addCodespaceRange", - value: function addCodespaceRange(n, low, high) { - this.codespaceRanges[n - 1].push(low, high); - this.numCodespaceRanges++; - } - }, { - key: "mapCidRange", - value: function mapCidRange(low, high, dstLow) { - while (low <= high) { - this._map[low++] = dstLow++; - } - } - }, { - key: "mapBfRange", - value: function mapBfRange(low, high, dstLow) { - var lastByte = dstLow.length - 1; - - while (low <= high) { - this._map[low++] = dstLow; - dstLow = dstLow.substring(0, lastByte) + String.fromCharCode(dstLow.charCodeAt(lastByte) + 1); - } - } - }, { - key: "mapBfRangeToArray", - value: function mapBfRangeToArray(low, high, array) { - var i = 0, - ii = array.length; - - while (low <= high && i < ii) { - this._map[low] = array[i++]; - ++low; - } - } - }, { - key: "mapOne", - value: function mapOne(src, dst) { - this._map[src] = dst; - } - }, { - key: "lookup", - value: function lookup(code) { - return this._map[code]; - } - }, { - key: "contains", - value: function contains(code) { - return this._map[code] !== undefined; - } - }, { - key: "forEach", - value: function forEach(callback) { - var map = this._map; - var length = map.length; - - if (length <= 0x10000) { - for (var i = 0; i < length; i++) { - if (map[i] !== undefined) { - callback(i, map[i]); - } - } - } else { - for (var _i in map) { - callback(_i, map[_i]); - } - } - } - }, { - key: "charCodeOf", - value: function charCodeOf(value) { - var map = this._map; - - if (map.length <= 0x10000) { - return map.indexOf(value); - } - - for (var charCode in map) { - if (map[charCode] === value) { - return charCode | 0; - } - } - - return -1; - } - }, { - key: "getMap", - value: function getMap() { - return this._map; - } - }, { - key: "readCharCode", - value: function readCharCode(str, offset, out) { - var c = 0; - var codespaceRanges = this.codespaceRanges; - - for (var n = 0, nn = codespaceRanges.length; n < nn; n++) { - c = (c << 8 | str.charCodeAt(offset + n)) >>> 0; - var codespaceRange = codespaceRanges[n]; - - for (var k = 0, kk = codespaceRange.length; k < kk;) { - var low = codespaceRange[k++]; - var high = codespaceRange[k++]; - - if (c >= low && c <= high) { - out.charcode = c; - out.length = n + 1; - return; - } - } - } - - out.charcode = 0; - out.length = 1; - } - }, { - key: "length", - get: function get() { - return this._map.length; - } - }, { - key: "isIdentityCMap", - get: function get() { - if (!(this.name === 'Identity-H' || this.name === 'Identity-V')) { - return false; - } - - if (this._map.length !== 0x10000) { - return false; - } - - for (var i = 0; i < 0x10000; i++) { - if (this._map[i] !== i) { - return false; - } - } - - return true; - } - }]); - - return CMap; - }(); - - exports.CMap = CMap; - - var IdentityCMap = - /*#__PURE__*/ - function (_CMap) { - _inherits(IdentityCMap, _CMap); - - function IdentityCMap(vertical, n) { - var _this; - - _classCallCheck(this, IdentityCMap); - - _this = _possibleConstructorReturn(this, _getPrototypeOf(IdentityCMap).call(this)); - _this.vertical = vertical; - - _this.addCodespaceRange(n, 0, 0xffff); - - return _this; - } - - _createClass(IdentityCMap, [{ - key: "mapCidRange", - value: function mapCidRange(low, high, dstLow) { - (0, _util.unreachable)('should not call mapCidRange'); - } - }, { - key: "mapBfRange", - value: function mapBfRange(low, high, dstLow) { - (0, _util.unreachable)('should not call mapBfRange'); - } - }, { - key: "mapBfRangeToArray", - value: function mapBfRangeToArray(low, high, array) { - (0, _util.unreachable)('should not call mapBfRangeToArray'); - } - }, { - key: "mapOne", - value: function mapOne(src, dst) { - (0, _util.unreachable)('should not call mapCidOne'); - } - }, { - key: "lookup", - value: function lookup(code) { - return Number.isInteger(code) && code <= 0xffff ? code : undefined; - } - }, { - key: "contains", - value: function contains(code) { - return Number.isInteger(code) && code <= 0xffff; - } - }, { - key: "forEach", - value: function forEach(callback) { - for (var i = 0; i <= 0xffff; i++) { - callback(i, i); - } - } - }, { - key: "charCodeOf", - value: function charCodeOf(value) { - return Number.isInteger(value) && value <= 0xffff ? value : -1; - } - }, { - key: "getMap", - value: function getMap() { - var map = new Array(0x10000); - - for (var i = 0; i <= 0xffff; i++) { - map[i] = i; - } - - return map; - } - }, { - key: "length", - get: function get() { - return 0x10000; - } - }, { - key: "isIdentityCMap", - get: function get() { - (0, _util.unreachable)('should not access .isIdentityCMap'); - } - }]); - - return IdentityCMap; - }(CMap); - - exports.IdentityCMap = IdentityCMap; - - var BinaryCMapReader = function BinaryCMapReaderClosure() { - function hexToInt(a, size) { - var n = 0; - - for (var i = 0; i <= size; i++) { - n = n << 8 | a[i]; - } - - return n >>> 0; - } - - function hexToStr(a, size) { - if (size === 1) { - return String.fromCharCode(a[0], a[1]); - } - - if (size === 3) { - return String.fromCharCode(a[0], a[1], a[2], a[3]); - } - - return String.fromCharCode.apply(null, a.subarray(0, size + 1)); - } - - function addHex(a, b, size) { - var c = 0; - - for (var i = size; i >= 0; i--) { - c += a[i] + b[i]; - a[i] = c & 255; - c >>= 8; - } - } - - function incHex(a, size) { - var c = 1; - - for (var i = size; i >= 0 && c > 0; i--) { - c += a[i]; - a[i] = c & 255; - c >>= 8; - } - } - - var MAX_NUM_SIZE = 16; - var MAX_ENCODED_NUM_SIZE = 19; - - function BinaryCMapStream(data) { - this.buffer = data; - this.pos = 0; - this.end = data.length; - this.tmpBuf = new Uint8Array(MAX_ENCODED_NUM_SIZE); - } - - BinaryCMapStream.prototype = { - readByte: function readByte() { - if (this.pos >= this.end) { - return -1; - } - - return this.buffer[this.pos++]; - }, - readNumber: function readNumber() { - var n = 0; - var last; - - do { - var b = this.readByte(); - - if (b < 0) { - throw new _util.FormatError('unexpected EOF in bcmap'); - } - - last = !(b & 0x80); - n = n << 7 | b & 0x7F; - } while (!last); - - return n; - }, - readSigned: function readSigned() { - var n = this.readNumber(); - return n & 1 ? ~(n >>> 1) : n >>> 1; - }, - readHex: function readHex(num, size) { - num.set(this.buffer.subarray(this.pos, this.pos + size + 1)); - this.pos += size + 1; - }, - readHexNumber: function readHexNumber(num, size) { - var last; - var stack = this.tmpBuf, - sp = 0; - - do { - var b = this.readByte(); - - if (b < 0) { - throw new _util.FormatError('unexpected EOF in bcmap'); - } - - last = !(b & 0x80); - stack[sp++] = b & 0x7F; - } while (!last); - - var i = size, - buffer = 0, - bufferSize = 0; - - while (i >= 0) { - while (bufferSize < 8 && stack.length > 0) { - buffer = stack[--sp] << bufferSize | buffer; - bufferSize += 7; - } - - num[i] = buffer & 255; - i--; - buffer >>= 8; - bufferSize -= 8; - } - }, - readHexSigned: function readHexSigned(num, size) { - this.readHexNumber(num, size); - var sign = num[size] & 1 ? 255 : 0; - var c = 0; - - for (var i = 0; i <= size; i++) { - c = (c & 1) << 8 | num[i]; - num[i] = c >> 1 ^ sign; - } - }, - readString: function readString() { - var len = this.readNumber(); - var s = ''; - - for (var i = 0; i < len; i++) { - s += String.fromCharCode(this.readNumber()); - } - - return s; - } - }; - - function processBinaryCMap(data, cMap, extend) { - return new Promise(function (resolve, reject) { - var stream = new BinaryCMapStream(data); - var header = stream.readByte(); - cMap.vertical = !!(header & 1); - var useCMap = null; - var start = new Uint8Array(MAX_NUM_SIZE); - var end = new Uint8Array(MAX_NUM_SIZE); - var char = new Uint8Array(MAX_NUM_SIZE); - var charCode = new Uint8Array(MAX_NUM_SIZE); - var tmp = new Uint8Array(MAX_NUM_SIZE); - var code; - var b; - - while ((b = stream.readByte()) >= 0) { - var type = b >> 5; - - if (type === 7) { - switch (b & 0x1F) { - case 0: - stream.readString(); - break; - - case 1: - useCMap = stream.readString(); - break; - } - - continue; - } - - var sequence = !!(b & 0x10); - var dataSize = b & 15; - - if (dataSize + 1 > MAX_NUM_SIZE) { - throw new Error('processBinaryCMap: Invalid dataSize.'); - } - - var ucs2DataSize = 1; - var subitemsCount = stream.readNumber(); - var i; - - switch (type) { - case 0: - stream.readHex(start, dataSize); - stream.readHexNumber(end, dataSize); - addHex(end, start, dataSize); - cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize)); - - for (i = 1; i < subitemsCount; i++) { - incHex(end, dataSize); - stream.readHexNumber(start, dataSize); - addHex(start, end, dataSize); - stream.readHexNumber(end, dataSize); - addHex(end, start, dataSize); - cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize)); - } - - break; - - case 1: - stream.readHex(start, dataSize); - stream.readHexNumber(end, dataSize); - addHex(end, start, dataSize); - stream.readNumber(); - - for (i = 1; i < subitemsCount; i++) { - incHex(end, dataSize); - stream.readHexNumber(start, dataSize); - addHex(start, end, dataSize); - stream.readHexNumber(end, dataSize); - addHex(end, start, dataSize); - stream.readNumber(); - } - - break; - - case 2: - stream.readHex(char, dataSize); - code = stream.readNumber(); - cMap.mapOne(hexToInt(char, dataSize), code); - - for (i = 1; i < subitemsCount; i++) { - incHex(char, dataSize); - - if (!sequence) { - stream.readHexNumber(tmp, dataSize); - addHex(char, tmp, dataSize); - } - - code = stream.readSigned() + (code + 1); - cMap.mapOne(hexToInt(char, dataSize), code); - } - - break; - - case 3: - stream.readHex(start, dataSize); - stream.readHexNumber(end, dataSize); - addHex(end, start, dataSize); - code = stream.readNumber(); - cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code); - - for (i = 1; i < subitemsCount; i++) { - incHex(end, dataSize); - - if (!sequence) { - stream.readHexNumber(start, dataSize); - addHex(start, end, dataSize); - } else { - start.set(end); - } - - stream.readHexNumber(end, dataSize); - addHex(end, start, dataSize); - code = stream.readNumber(); - cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code); - } - - break; - - case 4: - stream.readHex(char, ucs2DataSize); - stream.readHex(charCode, dataSize); - cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize)); - - for (i = 1; i < subitemsCount; i++) { - incHex(char, ucs2DataSize); - - if (!sequence) { - stream.readHexNumber(tmp, ucs2DataSize); - addHex(char, tmp, ucs2DataSize); - } - - incHex(charCode, dataSize); - stream.readHexSigned(tmp, dataSize); - addHex(charCode, tmp, dataSize); - cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize)); - } - - break; - - case 5: - stream.readHex(start, ucs2DataSize); - stream.readHexNumber(end, ucs2DataSize); - addHex(end, start, ucs2DataSize); - stream.readHex(charCode, dataSize); - cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize)); - - for (i = 1; i < subitemsCount; i++) { - incHex(end, ucs2DataSize); - - if (!sequence) { - stream.readHexNumber(start, ucs2DataSize); - addHex(start, end, ucs2DataSize); - } else { - start.set(end); - } - - stream.readHexNumber(end, ucs2DataSize); - addHex(end, start, ucs2DataSize); - stream.readHex(charCode, dataSize); - cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize)); - } - - break; - - default: - reject(new Error('processBinaryCMap: Unknown type: ' + type)); - return; - } - } - - if (useCMap) { - resolve(extend(useCMap)); - return; - } - - resolve(cMap); - }); - } - - function BinaryCMapReader() {} - - BinaryCMapReader.prototype = { - process: processBinaryCMap - }; - return BinaryCMapReader; - }(); - - var CMapFactory = function CMapFactoryClosure() { - function strToInt(str) { - var a = 0; - - for (var i = 0; i < str.length; i++) { - a = a << 8 | str.charCodeAt(i); - } - - return a >>> 0; - } - - function expectString(obj) { - if (!(0, _util.isString)(obj)) { - throw new _util.FormatError('Malformed CMap: expected string.'); - } - } - - function expectInt(obj) { - if (!Number.isInteger(obj)) { - throw new _util.FormatError('Malformed CMap: expected int.'); - } - } - - function parseBfChar(cMap, lexer) { - while (true) { - var obj = lexer.getObj(); - - if ((0, _primitives.isEOF)(obj)) { - break; - } - - if ((0, _primitives.isCmd)(obj, 'endbfchar')) { - return; - } - - expectString(obj); - var src = strToInt(obj); - obj = lexer.getObj(); - expectString(obj); - var dst = obj; - cMap.mapOne(src, dst); - } - } - - function parseBfRange(cMap, lexer) { - while (true) { - var obj = lexer.getObj(); - - if ((0, _primitives.isEOF)(obj)) { - break; - } - - if ((0, _primitives.isCmd)(obj, 'endbfrange')) { - return; - } - - expectString(obj); - var low = strToInt(obj); - obj = lexer.getObj(); - expectString(obj); - var high = strToInt(obj); - obj = lexer.getObj(); - - if (Number.isInteger(obj) || (0, _util.isString)(obj)) { - var dstLow = Number.isInteger(obj) ? String.fromCharCode(obj) : obj; - cMap.mapBfRange(low, high, dstLow); - } else if ((0, _primitives.isCmd)(obj, '[')) { - obj = lexer.getObj(); - var array = []; - - while (!(0, _primitives.isCmd)(obj, ']') && !(0, _primitives.isEOF)(obj)) { - array.push(obj); - obj = lexer.getObj(); - } - - cMap.mapBfRangeToArray(low, high, array); - } else { - break; - } - } - - throw new _util.FormatError('Invalid bf range.'); - } - - function parseCidChar(cMap, lexer) { - while (true) { - var obj = lexer.getObj(); - - if ((0, _primitives.isEOF)(obj)) { - break; - } - - if ((0, _primitives.isCmd)(obj, 'endcidchar')) { - return; - } - - expectString(obj); - var src = strToInt(obj); - obj = lexer.getObj(); - expectInt(obj); - var dst = obj; - cMap.mapOne(src, dst); - } - } - - function parseCidRange(cMap, lexer) { - while (true) { - var obj = lexer.getObj(); - - if ((0, _primitives.isEOF)(obj)) { - break; - } - - if ((0, _primitives.isCmd)(obj, 'endcidrange')) { - return; - } - - expectString(obj); - var low = strToInt(obj); - obj = lexer.getObj(); - expectString(obj); - var high = strToInt(obj); - obj = lexer.getObj(); - expectInt(obj); - var dstLow = obj; - cMap.mapCidRange(low, high, dstLow); - } - } - - function parseCodespaceRange(cMap, lexer) { - while (true) { - var obj = lexer.getObj(); - - if ((0, _primitives.isEOF)(obj)) { - break; - } - - if ((0, _primitives.isCmd)(obj, 'endcodespacerange')) { - return; - } - - if (!(0, _util.isString)(obj)) { - break; - } - - var low = strToInt(obj); - obj = lexer.getObj(); - - if (!(0, _util.isString)(obj)) { - break; - } - - var high = strToInt(obj); - cMap.addCodespaceRange(obj.length, low, high); - } - - throw new _util.FormatError('Invalid codespace range.'); - } - - function parseWMode(cMap, lexer) { - var obj = lexer.getObj(); - - if (Number.isInteger(obj)) { - cMap.vertical = !!obj; - } - } - - function parseCMapName(cMap, lexer) { - var obj = lexer.getObj(); - - if ((0, _primitives.isName)(obj) && (0, _util.isString)(obj.name)) { - cMap.name = obj.name; - } - } - - function parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap) { - var previous; - var embeddedUseCMap; - - objLoop: while (true) { - try { - var obj = lexer.getObj(); - - if ((0, _primitives.isEOF)(obj)) { - break; - } else if ((0, _primitives.isName)(obj)) { - if (obj.name === 'WMode') { - parseWMode(cMap, lexer); - } else if (obj.name === 'CMapName') { - parseCMapName(cMap, lexer); - } - - previous = obj; - } else if ((0, _primitives.isCmd)(obj)) { - switch (obj.cmd) { - case 'endcmap': - break objLoop; - - case 'usecmap': - if ((0, _primitives.isName)(previous)) { - embeddedUseCMap = previous.name; - } - - break; - - case 'begincodespacerange': - parseCodespaceRange(cMap, lexer); - break; - - case 'beginbfchar': - parseBfChar(cMap, lexer); - break; - - case 'begincidchar': - parseCidChar(cMap, lexer); - break; - - case 'beginbfrange': - parseBfRange(cMap, lexer); - break; - - case 'begincidrange': - parseCidRange(cMap, lexer); - break; - } - } - } catch (ex) { - if (ex instanceof _util.MissingDataException) { - throw ex; - } - - (0, _util.warn)('Invalid cMap data: ' + ex); - continue; - } - } - - if (!useCMap && embeddedUseCMap) { - useCMap = embeddedUseCMap; - } - - if (useCMap) { - return extendCMap(cMap, fetchBuiltInCMap, useCMap); - } - - return Promise.resolve(cMap); - } - - function extendCMap(cMap, fetchBuiltInCMap, useCMap) { - return createBuiltInCMap(useCMap, fetchBuiltInCMap).then(function (newCMap) { - cMap.useCMap = newCMap; - - if (cMap.numCodespaceRanges === 0) { - var useCodespaceRanges = cMap.useCMap.codespaceRanges; - - for (var i = 0; i < useCodespaceRanges.length; i++) { - cMap.codespaceRanges[i] = useCodespaceRanges[i].slice(); - } - - cMap.numCodespaceRanges = cMap.useCMap.numCodespaceRanges; - } - - cMap.useCMap.forEach(function (key, value) { - if (!cMap.contains(key)) { - cMap.mapOne(key, cMap.useCMap.lookup(key)); - } - }); - return cMap; - }); - } - - function createBuiltInCMap(name, fetchBuiltInCMap) { - if (name === 'Identity-H') { - return Promise.resolve(new IdentityCMap(false, 2)); - } else if (name === 'Identity-V') { - return Promise.resolve(new IdentityCMap(true, 2)); - } - - if (!BUILT_IN_CMAPS.includes(name)) { - return Promise.reject(new Error('Unknown CMap name: ' + name)); - } - - if (!fetchBuiltInCMap) { - return Promise.reject(new Error('Built-in CMap parameters are not provided.')); - } - - return fetchBuiltInCMap(name).then(function (data) { - var cMapData = data.cMapData, - compressionType = data.compressionType; - var cMap = new CMap(true); - - if (compressionType === _util.CMapCompressionType.BINARY) { - return new BinaryCMapReader().process(cMapData, cMap, function (useCMap) { - return extendCMap(cMap, fetchBuiltInCMap, useCMap); - }); - } - - if (compressionType === _util.CMapCompressionType.NONE) { - var lexer = new _parser.Lexer(new _stream.Stream(cMapData)); - return parseCMap(cMap, lexer, fetchBuiltInCMap, null); - } - - return Promise.reject(new Error('TODO: Only BINARY/NONE CMap compression is currently supported.')); - }); - } - - return { - create: function create(params) { - var encoding = params.encoding; - var fetchBuiltInCMap = params.fetchBuiltInCMap; - var useCMap = params.useCMap; - - if ((0, _primitives.isName)(encoding)) { - return createBuiltInCMap(encoding.name, fetchBuiltInCMap); - } else if ((0, _primitives.isStream)(encoding)) { - var cMap = new CMap(); - var lexer = new _parser.Lexer(encoding); - return parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap).then(function (parsedCMap) { - if (parsedCMap.isIdentityCMap) { - return createBuiltInCMap(parsedCMap.name, fetchBuiltInCMap); - } - - return parsedCMap; - }); - } - - return Promise.reject(new Error('Encoding required.')); - } - }; - }(); - - exports.CMapFactory = CMapFactory; - - /***/ }), - /* 173 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.getFontType = getFontType; - exports.IdentityToUnicodeMap = exports.ToUnicodeMap = exports.FontFlags = exports.Font = exports.ErrorFont = exports.SEAC_ANALYSIS_ENABLED = void 0; - - var _util = __w_extracthighlights_require__(6); - - var _cff_parser = __w_extracthighlights_require__(174); - - var _glyphlist = __w_extracthighlights_require__(177); - - var _encodings = __w_extracthighlights_require__(176); - - var _standard_fonts = __w_extracthighlights_require__(178); - - var _unicode = __w_extracthighlights_require__(179); - - var _font_renderer = __w_extracthighlights_require__(180); - - var _cmap = __w_extracthighlights_require__(172); - - var _stream = __w_extracthighlights_require__(157); - - var _type1_parser = __w_extracthighlights_require__(181); - - function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } - - function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } - - function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } - - function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } - - var PRIVATE_USE_AREAS = [[0xE000, 0xF8FF], [0x100000, 0x10FFFD]]; - var PDF_GLYPH_SPACE_UNITS = 1000; - var SEAC_ANALYSIS_ENABLED = true; - exports.SEAC_ANALYSIS_ENABLED = SEAC_ANALYSIS_ENABLED; - var FontFlags = { - FixedPitch: 1, - Serif: 2, - Symbolic: 4, - Script: 8, - Nonsymbolic: 32, - Italic: 64, - AllCap: 65536, - SmallCap: 131072, - ForceBold: 262144 - }; - exports.FontFlags = FontFlags; - var MacStandardGlyphOrdering = ['.notdef', '.null', 'nonmarkingreturn', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis', 'Udieresis', 'aacute', 'agrave', 'acircumflex', 'adieresis', 'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis', 'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve', 'ocircumflex', 'odieresis', 'otilde', 'uacute', 'ugrave', 'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section', 'bullet', 'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute', 'dieresis', 'notequal', 'AE', 'Oslash', 'infinity', 'plusminus', 'lessequal', 'greaterequal', 'yen', 'mu', 'partialdiff', 'summation', 'product', 'pi', 'integral', 'ordfeminine', 'ordmasculine', 'Omega', 'ae', 'oslash', 'questiondown', 'exclamdown', 'logicalnot', 'radical', 'florin', 'approxequal', 'Delta', 'guillemotleft', 'guillemotright', 'ellipsis', 'nonbreakingspace', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash', 'emdash', 'quotedblleft', 'quotedblright', 'quoteleft', 'quoteright', 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction', 'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodcentered', 'quotesinglbase', 'quotedblbase', 'perthousand', 'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', 'Ograve', 'Uacute', 'Ucircumflex', 'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'Lslash', 'lslash', 'Scaron', 'scaron', 'Zcaron', 'zcaron', 'brokenbar', 'Eth', 'eth', 'Yacute', 'yacute', 'Thorn', 'thorn', 'minus', 'multiply', 'onesuperior', 'twosuperior', 'threesuperior', 'onehalf', 'onequarter', 'threequarters', 'franc', 'Gbreve', 'gbreve', 'Idotaccent', 'Scedilla', 'scedilla', 'Cacute', 'cacute', 'Ccaron', 'ccaron', 'dcroat']; - - function adjustWidths(properties) { - if (!properties.fontMatrix) { - return; - } - - if (properties.fontMatrix[0] === _util.FONT_IDENTITY_MATRIX[0]) { - return; - } - - var scale = 0.001 / properties.fontMatrix[0]; - var glyphsWidths = properties.widths; - - for (var glyph in glyphsWidths) { - glyphsWidths[glyph] *= scale; - } - - properties.defaultWidth *= scale; - } - - function adjustToUnicode(properties, builtInEncoding) { - if (properties.hasIncludedToUnicodeMap) { - return; - } - - if (properties.hasEncoding) { - return; - } - - if (builtInEncoding === properties.defaultEncoding) { - return; - } - - if (properties.toUnicode instanceof IdentityToUnicodeMap) { - return; - } - - var toUnicode = [], - glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); - - for (var charCode in builtInEncoding) { - var glyphName = builtInEncoding[charCode]; - var unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap); - - if (unicode !== -1) { - toUnicode[charCode] = String.fromCharCode(unicode); - } - } - - properties.toUnicode.amend(toUnicode); - } - - function getFontType(type, subtype) { - switch (type) { - case 'Type1': - return subtype === 'Type1C' ? _util.FontType.TYPE1C : _util.FontType.TYPE1; - - case 'CIDFontType0': - return subtype === 'CIDFontType0C' ? _util.FontType.CIDFONTTYPE0C : _util.FontType.CIDFONTTYPE0; - - case 'OpenType': - return _util.FontType.OPENTYPE; - - case 'TrueType': - return _util.FontType.TRUETYPE; - - case 'CIDFontType2': - return _util.FontType.CIDFONTTYPE2; - - case 'MMType1': - return _util.FontType.MMTYPE1; - - case 'Type0': - return _util.FontType.TYPE0; - - default: - return _util.FontType.UNKNOWN; - } - } - - function recoverGlyphName(name, glyphsUnicodeMap) { - if (glyphsUnicodeMap[name] !== undefined) { - return name; - } - - var unicode = (0, _unicode.getUnicodeForGlyph)(name, glyphsUnicodeMap); - - if (unicode !== -1) { - for (var key in glyphsUnicodeMap) { - if (glyphsUnicodeMap[key] === unicode) { - return key; - } - } - } - - (0, _util.info)('Unable to recover a standard glyph name for: ' + name); - return name; - } - - var Glyph = function GlyphClosure() { - function Glyph(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) { - this.fontChar = fontChar; - this.unicode = unicode; - this.accent = accent; - this.width = width; - this.vmetric = vmetric; - this.operatorListId = operatorListId; - this.isSpace = isSpace; - this.isInFont = isInFont; - } - - Glyph.prototype.matchesForCache = function (fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) { - return this.fontChar === fontChar && this.unicode === unicode && this.accent === accent && this.width === width && this.vmetric === vmetric && this.operatorListId === operatorListId && this.isSpace === isSpace && this.isInFont === isInFont; - }; - - return Glyph; - }(); - - var ToUnicodeMap = function ToUnicodeMapClosure() { - function ToUnicodeMap() { - var cmap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - this._map = cmap; - } - - ToUnicodeMap.prototype = { - get length() { - return this._map.length; - }, - - forEach: function forEach(callback) { - for (var charCode in this._map) { - callback(charCode, this._map[charCode].charCodeAt(0)); - } - }, - has: function has(i) { - return this._map[i] !== undefined; - }, - get: function get(i) { - return this._map[i]; - }, - charCodeOf: function charCodeOf(value) { - var map = this._map; - - if (map.length <= 0x10000) { - return map.indexOf(value); - } - - for (var charCode in map) { - if (map[charCode] === value) { - return charCode | 0; - } - } - - return -1; - }, - amend: function amend(map) { - for (var charCode in map) { - this._map[charCode] = map[charCode]; - } - } - }; - return ToUnicodeMap; - }(); - - exports.ToUnicodeMap = ToUnicodeMap; - - var IdentityToUnicodeMap = function IdentityToUnicodeMapClosure() { - function IdentityToUnicodeMap(firstChar, lastChar) { - this.firstChar = firstChar; - this.lastChar = lastChar; - } - - IdentityToUnicodeMap.prototype = { - get length() { - return this.lastChar + 1 - this.firstChar; - }, - - forEach: function forEach(callback) { - for (var i = this.firstChar, ii = this.lastChar; i <= ii; i++) { - callback(i, i); - } - }, - has: function has(i) { - return this.firstChar <= i && i <= this.lastChar; - }, - get: function get(i) { - if (this.firstChar <= i && i <= this.lastChar) { - return String.fromCharCode(i); - } - - return undefined; - }, - charCodeOf: function charCodeOf(v) { - return Number.isInteger(v) && v >= this.firstChar && v <= this.lastChar ? v : -1; - }, - amend: function amend(map) { - (0, _util.unreachable)('Should not call amend()'); - } - }; - return IdentityToUnicodeMap; - }(); - - exports.IdentityToUnicodeMap = IdentityToUnicodeMap; - - var OpenTypeFileBuilder = function OpenTypeFileBuilderClosure() { - function writeInt16(dest, offset, num) { - dest[offset] = num >> 8 & 0xFF; - dest[offset + 1] = num & 0xFF; - } - - function writeInt32(dest, offset, num) { - dest[offset] = num >> 24 & 0xFF; - dest[offset + 1] = num >> 16 & 0xFF; - dest[offset + 2] = num >> 8 & 0xFF; - dest[offset + 3] = num & 0xFF; - } - - function writeData(dest, offset, data) { - var i, ii; - - if (data instanceof Uint8Array) { - dest.set(data, offset); - } else if (typeof data === 'string') { - for (i = 0, ii = data.length; i < ii; i++) { - dest[offset++] = data.charCodeAt(i) & 0xFF; - } - } else { - for (i = 0, ii = data.length; i < ii; i++) { - dest[offset++] = data[i] & 0xFF; - } - } - } - - function OpenTypeFileBuilder(sfnt) { - this.sfnt = sfnt; - this.tables = Object.create(null); - } - - OpenTypeFileBuilder.getSearchParams = function OpenTypeFileBuilder_getSearchParams(entriesCount, entrySize) { - var maxPower2 = 1, - log2 = 0; - - while ((maxPower2 ^ entriesCount) > maxPower2) { - maxPower2 <<= 1; - log2++; - } - - var searchRange = maxPower2 * entrySize; - return { - range: searchRange, - entry: log2, - rangeShift: entrySize * entriesCount - searchRange - }; - }; - - var OTF_HEADER_SIZE = 12; - var OTF_TABLE_ENTRY_SIZE = 16; - OpenTypeFileBuilder.prototype = { - toArray: function OpenTypeFileBuilder_toArray() { - var sfnt = this.sfnt; - var tables = this.tables; - var tablesNames = Object.keys(tables); - tablesNames.sort(); - var numTables = tablesNames.length; - var i, j, jj, table, tableName; - var offset = OTF_HEADER_SIZE + numTables * OTF_TABLE_ENTRY_SIZE; - var tableOffsets = [offset]; - - for (i = 0; i < numTables; i++) { - table = tables[tablesNames[i]]; - var paddedLength = (table.length + 3 & ~3) >>> 0; - offset += paddedLength; - tableOffsets.push(offset); - } - - var file = new Uint8Array(offset); - - for (i = 0; i < numTables; i++) { - table = tables[tablesNames[i]]; - writeData(file, tableOffsets[i], table); - } - - if (sfnt === 'true') { - sfnt = (0, _util.string32)(0x00010000); - } - - file[0] = sfnt.charCodeAt(0) & 0xFF; - file[1] = sfnt.charCodeAt(1) & 0xFF; - file[2] = sfnt.charCodeAt(2) & 0xFF; - file[3] = sfnt.charCodeAt(3) & 0xFF; - writeInt16(file, 4, numTables); - var searchParams = OpenTypeFileBuilder.getSearchParams(numTables, 16); - writeInt16(file, 6, searchParams.range); - writeInt16(file, 8, searchParams.entry); - writeInt16(file, 10, searchParams.rangeShift); - offset = OTF_HEADER_SIZE; - - for (i = 0; i < numTables; i++) { - tableName = tablesNames[i]; - file[offset] = tableName.charCodeAt(0) & 0xFF; - file[offset + 1] = tableName.charCodeAt(1) & 0xFF; - file[offset + 2] = tableName.charCodeAt(2) & 0xFF; - file[offset + 3] = tableName.charCodeAt(3) & 0xFF; - var checksum = 0; - - for (j = tableOffsets[i], jj = tableOffsets[i + 1]; j < jj; j += 4) { - var quad = (0, _util.readUint32)(file, j); - checksum = checksum + quad >>> 0; - } - - writeInt32(file, offset + 4, checksum); - writeInt32(file, offset + 8, tableOffsets[i]); - writeInt32(file, offset + 12, tables[tableName].length); - offset += OTF_TABLE_ENTRY_SIZE; - } - - return file; - }, - addTable: function OpenTypeFileBuilder_addTable(tag, data) { - if (tag in this.tables) { - throw new Error('Table ' + tag + ' already exists'); - } - - this.tables[tag] = data; - } - }; - return OpenTypeFileBuilder; - }(); - - var Font = function FontClosure() { - function Font(name, file, properties) { - var charCode; - this.name = name; - this.loadedName = properties.loadedName; - this.isType3Font = properties.isType3Font; - this.sizes = []; - this.missingFile = false; - this.glyphCache = Object.create(null); - this.isSerifFont = !!(properties.flags & FontFlags.Serif); - this.isSymbolicFont = !!(properties.flags & FontFlags.Symbolic); - this.isMonospace = !!(properties.flags & FontFlags.FixedPitch); - var type = properties.type; - var subtype = properties.subtype; - this.type = type; - this.subtype = subtype; - this.fallbackName = this.isMonospace ? 'monospace' : this.isSerifFont ? 'serif' : 'sans-serif'; - this.differences = properties.differences; - this.widths = properties.widths; - this.defaultWidth = properties.defaultWidth; - this.composite = properties.composite; - this.wideChars = properties.wideChars; - this.cMap = properties.cMap; - this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS; - this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS; - this.fontMatrix = properties.fontMatrix; - this.bbox = properties.bbox; - this.defaultEncoding = properties.defaultEncoding; - this.toUnicode = properties.toUnicode; - this.fallbackToUnicode = properties.fallbackToUnicode || new ToUnicodeMap(); - this.toFontChar = []; - - if (properties.type === 'Type3') { - for (charCode = 0; charCode < 256; charCode++) { - this.toFontChar[charCode] = this.differences[charCode] || properties.defaultEncoding[charCode]; - } - - this.fontType = _util.FontType.TYPE3; - return; - } - - this.cidEncoding = properties.cidEncoding; - this.vertical = properties.vertical; - - if (this.vertical) { - this.vmetrics = properties.vmetrics; - this.defaultVMetrics = properties.defaultVMetrics; - } - - if (!file || file.isEmpty) { - if (file) { - (0, _util.warn)('Font file is empty in "' + name + '" (' + this.loadedName + ')'); - } - - this.fallbackToSystemFont(); - return; - } - - var _getFontFileType = getFontFileType(file, properties); - - var _getFontFileType2 = _slicedToArray(_getFontFileType, 2); - - type = _getFontFileType2[0]; - subtype = _getFontFileType2[1]; - - if (type !== this.type || subtype !== this.subtype) { - (0, _util.info)('Inconsistent font file Type/SubType, expected: ' + "".concat(this.type, "/").concat(this.subtype, " but found: ").concat(type, "/").concat(subtype, ".")); - } - - try { - var data; - - switch (type) { - case 'MMType1': - (0, _util.info)('MMType1 font (' + name + '), falling back to Type1.'); - - case 'Type1': - case 'CIDFontType0': - this.mimetype = 'font/opentype'; - var cff = subtype === 'Type1C' || subtype === 'CIDFontType0C' ? new CFFFont(file, properties) : new Type1Font(name, file, properties); - adjustWidths(properties); - data = this.convert(name, cff, properties); - break; - - case 'OpenType': - case 'TrueType': - case 'CIDFontType2': - this.mimetype = 'font/opentype'; - data = this.checkAndRepair(name, file, properties); - - if (this.isOpenType) { - adjustWidths(properties); - type = 'OpenType'; - } - - break; - - default: - throw new _util.FormatError("Font ".concat(type, " is not supported")); - } - } catch (e) { - (0, _util.warn)(e); - this.fallbackToSystemFont(); - return; - } - - this.data = data; - this.fontType = getFontType(type, subtype); - this.fontMatrix = properties.fontMatrix; - this.widths = properties.widths; - this.defaultWidth = properties.defaultWidth; - this.toUnicode = properties.toUnicode; - this.encoding = properties.baseEncoding; - this.seacMap = properties.seacMap; - } - - Font.getFontID = function () { - var ID = 1; - return function Font_getFontID() { - return String(ID++); - }; - }(); - - function int16(b0, b1) { - return (b0 << 8) + b1; - } - - function writeSignedInt16(bytes, index, value) { - bytes[index + 1] = value; - bytes[index] = value >>> 8; - } - - function signedInt16(b0, b1) { - var value = (b0 << 8) + b1; - return value & 1 << 15 ? value - 0x10000 : value; - } - - function int32(b0, b1, b2, b3) { - return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; - } - - function string16(value) { - return String.fromCharCode(value >> 8 & 0xff, value & 0xff); - } - - function safeString16(value) { - value = value > 0x7FFF ? 0x7FFF : value < -0x8000 ? -0x8000 : value; - return String.fromCharCode(value >> 8 & 0xff, value & 0xff); - } - - function isTrueTypeFile(file) { - var header = file.peekBytes(4); - return (0, _util.readUint32)(header, 0) === 0x00010000 || (0, _util.bytesToString)(header) === 'true'; - } - - function isTrueTypeCollectionFile(file) { - var header = file.peekBytes(4); - return (0, _util.bytesToString)(header) === 'ttcf'; - } - - function isOpenTypeFile(file) { - var header = file.peekBytes(4); - return (0, _util.bytesToString)(header) === 'OTTO'; - } - - function isType1File(file) { - var header = file.peekBytes(2); - - if (header[0] === 0x25 && header[1] === 0x21) { - return true; - } - - if (header[0] === 0x80 && header[1] === 0x01) { - return true; - } - - return false; - } - - function isCFFFile(file) { - var header = file.peekBytes(4); - - if (header[0] >= 1 && header[3] >= 1 && header[3] <= 4) { - return true; - } - - return false; - } - - function getFontFileType(file, _ref) { - var type = _ref.type, - subtype = _ref.subtype, - composite = _ref.composite; - var fileType, fileSubtype; - - if (isTrueTypeFile(file) || isTrueTypeCollectionFile(file)) { - if (composite) { - fileType = 'CIDFontType2'; - } else { - fileType = 'TrueType'; - } - } else if (isOpenTypeFile(file)) { - if (composite) { - fileType = 'CIDFontType2'; - } else { - fileType = 'OpenType'; - } - } else if (isType1File(file)) { - if (composite) { - fileType = 'CIDFontType0'; - } else { - fileType = type === 'MMType1' ? 'MMType1' : 'Type1'; - } - } else if (isCFFFile(file)) { - if (composite) { - fileType = 'CIDFontType0'; - fileSubtype = 'CIDFontType0C'; - } else { - fileType = type === 'MMType1' ? 'MMType1' : 'Type1'; - fileSubtype = 'Type1C'; - } - } else { - (0, _util.warn)('getFontFileType: Unable to detect correct font file Type/Subtype.'); - fileType = type; - fileSubtype = subtype; - } - - return [fileType, fileSubtype]; - } - - function buildToFontChar(encoding, glyphsUnicodeMap, differences) { - var toFontChar = [], - unicode; - - for (var i = 0, ii = encoding.length; i < ii; i++) { - unicode = (0, _unicode.getUnicodeForGlyph)(encoding[i], glyphsUnicodeMap); - - if (unicode !== -1) { - toFontChar[i] = unicode; - } - } - - for (var charCode in differences) { - unicode = (0, _unicode.getUnicodeForGlyph)(differences[charCode], glyphsUnicodeMap); - - if (unicode !== -1) { - toFontChar[+charCode] = unicode; - } - } - - return toFontChar; - } - - function adjustMapping(charCodeToGlyphId, hasGlyph, newGlyphZeroId) { - var newMap = Object.create(null); - var toFontChar = []; - var privateUseAreaIndex = 0; - var nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0]; - var privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1]; - - for (var originalCharCode in charCodeToGlyphId) { - originalCharCode |= 0; - var glyphId = charCodeToGlyphId[originalCharCode]; - - if (!hasGlyph(glyphId)) { - continue; - } - - if (nextAvailableFontCharCode > privateUseOffetEnd) { - privateUseAreaIndex++; - - if (privateUseAreaIndex >= PRIVATE_USE_AREAS.length) { - (0, _util.warn)('Ran out of space in font private use area.'); - break; - } - - nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0]; - privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1]; - } - - var fontCharCode = nextAvailableFontCharCode++; - - if (glyphId === 0) { - glyphId = newGlyphZeroId; - } - - newMap[fontCharCode] = glyphId; - toFontChar[originalCharCode] = fontCharCode; - } - - return { - toFontChar: toFontChar, - charCodeToGlyphId: newMap, - nextAvailableFontCharCode: nextAvailableFontCharCode - }; - } - - function getRanges(glyphs, numGlyphs) { - var codes = []; - - for (var charCode in glyphs) { - if (glyphs[charCode] >= numGlyphs) { - continue; - } - - codes.push({ - fontCharCode: charCode | 0, - glyphId: glyphs[charCode] - }); - } - - if (codes.length === 0) { - codes.push({ - fontCharCode: 0, - glyphId: 0 - }); - } - - codes.sort(function fontGetRangesSort(a, b) { - return a.fontCharCode - b.fontCharCode; - }); - var ranges = []; - var length = codes.length; - - for (var n = 0; n < length;) { - var start = codes[n].fontCharCode; - var codeIndices = [codes[n].glyphId]; - ++n; - var end = start; - - while (n < length && end + 1 === codes[n].fontCharCode) { - codeIndices.push(codes[n].glyphId); - ++end; - ++n; - - if (end === 0xFFFF) { - break; - } - } - - ranges.push([start, end, codeIndices]); - } - - return ranges; - } - - function createCmapTable(glyphs, numGlyphs) { - var ranges = getRanges(glyphs, numGlyphs); - var numTables = ranges[ranges.length - 1][1] > 0xFFFF ? 2 : 1; - var cmap = '\x00\x00' + string16(numTables) + '\x00\x03' + '\x00\x01' + (0, _util.string32)(4 + numTables * 8); - var i, ii, j, jj; - - for (i = ranges.length - 1; i >= 0; --i) { - if (ranges[i][0] <= 0xFFFF) { - break; - } - } - - var bmpLength = i + 1; - - if (ranges[i][0] < 0xFFFF && ranges[i][1] === 0xFFFF) { - ranges[i][1] = 0xFFFE; - } - - var trailingRangesCount = ranges[i][1] < 0xFFFF ? 1 : 0; - var segCount = bmpLength + trailingRangesCount; - var searchParams = OpenTypeFileBuilder.getSearchParams(segCount, 2); - var startCount = ''; - var endCount = ''; - var idDeltas = ''; - var idRangeOffsets = ''; - var glyphsIds = ''; - var bias = 0; - var range, start, end, codes; - - for (i = 0, ii = bmpLength; i < ii; i++) { - range = ranges[i]; - start = range[0]; - end = range[1]; - startCount += string16(start); - endCount += string16(end); - codes = range[2]; - var contiguous = true; - - for (j = 1, jj = codes.length; j < jj; ++j) { - if (codes[j] !== codes[j - 1] + 1) { - contiguous = false; - break; - } - } - - if (!contiguous) { - var offset = (segCount - i) * 2 + bias * 2; - bias += end - start + 1; - idDeltas += string16(0); - idRangeOffsets += string16(offset); - - for (j = 0, jj = codes.length; j < jj; ++j) { - glyphsIds += string16(codes[j]); - } - } else { - var startCode = codes[0]; - idDeltas += string16(startCode - start & 0xFFFF); - idRangeOffsets += string16(0); - } - } - - if (trailingRangesCount > 0) { - endCount += '\xFF\xFF'; - startCount += '\xFF\xFF'; - idDeltas += '\x00\x01'; - idRangeOffsets += '\x00\x00'; - } - - var format314 = '\x00\x00' + string16(2 * segCount) + string16(searchParams.range) + string16(searchParams.entry) + string16(searchParams.rangeShift) + endCount + '\x00\x00' + startCount + idDeltas + idRangeOffsets + glyphsIds; - var format31012 = ''; - var header31012 = ''; - - if (numTables > 1) { - cmap += '\x00\x03' + '\x00\x0A' + (0, _util.string32)(4 + numTables * 8 + 4 + format314.length); - format31012 = ''; - - for (i = 0, ii = ranges.length; i < ii; i++) { - range = ranges[i]; - start = range[0]; - codes = range[2]; - var code = codes[0]; - - for (j = 1, jj = codes.length; j < jj; ++j) { - if (codes[j] !== codes[j - 1] + 1) { - end = range[0] + j - 1; - format31012 += (0, _util.string32)(start) + (0, _util.string32)(end) + (0, _util.string32)(code); - start = end + 1; - code = codes[j]; - } - } - - format31012 += (0, _util.string32)(start) + (0, _util.string32)(range[1]) + (0, _util.string32)(code); - } - - header31012 = '\x00\x0C' + '\x00\x00' + (0, _util.string32)(format31012.length + 16) + '\x00\x00\x00\x00' + (0, _util.string32)(format31012.length / 12); - } - - return cmap + '\x00\x04' + string16(format314.length + 4) + format314 + header31012 + format31012; - } - - function validateOS2Table(os2) { - var stream = new _stream.Stream(os2.data); - var version = stream.getUint16(); - stream.getBytes(60); - var selection = stream.getUint16(); - - if (version < 4 && selection & 0x0300) { - return false; - } - - var firstChar = stream.getUint16(); - var lastChar = stream.getUint16(); - - if (firstChar > lastChar) { - return false; - } - - stream.getBytes(6); - var usWinAscent = stream.getUint16(); - - if (usWinAscent === 0) { - return false; - } - - os2.data[8] = os2.data[9] = 0; - return true; - } - - function createOS2Table(properties, charstrings, override) { - override = override || { - unitsPerEm: 0, - yMax: 0, - yMin: 0, - ascent: 0, - descent: 0 - }; - var ulUnicodeRange1 = 0; - var ulUnicodeRange2 = 0; - var ulUnicodeRange3 = 0; - var ulUnicodeRange4 = 0; - var firstCharIndex = null; - var lastCharIndex = 0; - - if (charstrings) { - for (var code in charstrings) { - code |= 0; - - if (firstCharIndex > code || !firstCharIndex) { - firstCharIndex = code; - } - - if (lastCharIndex < code) { - lastCharIndex = code; - } - - var position = (0, _unicode.getUnicodeRangeFor)(code); - - if (position < 32) { - ulUnicodeRange1 |= 1 << position; - } else if (position < 64) { - ulUnicodeRange2 |= 1 << position - 32; - } else if (position < 96) { - ulUnicodeRange3 |= 1 << position - 64; - } else if (position < 123) { - ulUnicodeRange4 |= 1 << position - 96; - } else { - throw new _util.FormatError('Unicode ranges Bits > 123 are reserved for internal usage'); - } - } - - if (lastCharIndex > 0xFFFF) { - lastCharIndex = 0xFFFF; - } - } else { - firstCharIndex = 0; - lastCharIndex = 255; - } - - var bbox = properties.bbox || [0, 0, 0, 0]; - var unitsPerEm = override.unitsPerEm || 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0]; - var scale = properties.ascentScaled ? 1.0 : unitsPerEm / PDF_GLYPH_SPACE_UNITS; - var typoAscent = override.ascent || Math.round(scale * (properties.ascent || bbox[3])); - var typoDescent = override.descent || Math.round(scale * (properties.descent || bbox[1])); - - if (typoDescent > 0 && properties.descent > 0 && bbox[1] < 0) { - typoDescent = -typoDescent; - } - - var winAscent = override.yMax || typoAscent; - var winDescent = -override.yMin || -typoDescent; - return '\x00\x03' + '\x02\x24' + '\x01\xF4' + '\x00\x05' + '\x00\x00' + '\x02\x8A' + '\x02\xBB' + '\x00\x00' + '\x00\x8C' + '\x02\x8A' + '\x02\xBB' + '\x00\x00' + '\x01\xDF' + '\x00\x31' + '\x01\x02' + '\x00\x00' + '\x00\x00\x06' + String.fromCharCode(properties.fixedPitch ? 0x09 : 0x00) + '\x00\x00\x00\x00\x00\x00' + (0, _util.string32)(ulUnicodeRange1) + (0, _util.string32)(ulUnicodeRange2) + (0, _util.string32)(ulUnicodeRange3) + (0, _util.string32)(ulUnicodeRange4) + '\x2A\x32\x31\x2A' + string16(properties.italicAngle ? 1 : 0) + string16(firstCharIndex || properties.firstChar) + string16(lastCharIndex || properties.lastChar) + string16(typoAscent) + string16(typoDescent) + '\x00\x64' + string16(winAscent) + string16(winDescent) + '\x00\x00\x00\x00' + '\x00\x00\x00\x00' + string16(properties.xHeight) + string16(properties.capHeight) + string16(0) + string16(firstCharIndex || properties.firstChar) + '\x00\x03'; - } - - function createPostTable(properties) { - var angle = Math.floor(properties.italicAngle * Math.pow(2, 16)); - return '\x00\x03\x00\x00' + (0, _util.string32)(angle) + '\x00\x00' + '\x00\x00' + (0, _util.string32)(properties.fixedPitch) + '\x00\x00\x00\x00' + '\x00\x00\x00\x00' + '\x00\x00\x00\x00' + '\x00\x00\x00\x00'; - } - - function createNameTable(name, proto) { - if (!proto) { - proto = [[], []]; - } - - var strings = [proto[0][0] || 'Original licence', proto[0][1] || name, proto[0][2] || 'Unknown', proto[0][3] || 'uniqueID', proto[0][4] || name, proto[0][5] || 'Version 0.11', proto[0][6] || '', proto[0][7] || 'Unknown', proto[0][8] || 'Unknown', proto[0][9] || 'Unknown']; - var stringsUnicode = []; - var i, ii, j, jj, str; - - for (i = 0, ii = strings.length; i < ii; i++) { - str = proto[1][i] || strings[i]; - var strBufUnicode = []; - - for (j = 0, jj = str.length; j < jj; j++) { - strBufUnicode.push(string16(str.charCodeAt(j))); - } - - stringsUnicode.push(strBufUnicode.join('')); - } - - var names = [strings, stringsUnicode]; - var platforms = ['\x00\x01', '\x00\x03']; - var encodings = ['\x00\x00', '\x00\x01']; - var languages = ['\x00\x00', '\x04\x09']; - var namesRecordCount = strings.length * platforms.length; - var nameTable = '\x00\x00' + string16(namesRecordCount) + string16(namesRecordCount * 12 + 6); - var strOffset = 0; - - for (i = 0, ii = platforms.length; i < ii; i++) { - var strs = names[i]; - - for (j = 0, jj = strs.length; j < jj; j++) { - str = strs[j]; - var nameRecord = platforms[i] + encodings[i] + languages[i] + string16(j) + string16(str.length) + string16(strOffset); - nameTable += nameRecord; - strOffset += str.length; - } - } - - nameTable += strings.join('') + stringsUnicode.join(''); - return nameTable; - } - - Font.prototype = { - name: null, - font: null, - mimetype: null, - encoding: null, - disableFontFace: false, - - get renderer() { - var renderer = _font_renderer.FontRendererFactory.create(this, SEAC_ANALYSIS_ENABLED); - - return (0, _util.shadow)(this, 'renderer', renderer); - }, - - exportData: function Font_exportData() { - var data = {}; - - for (var i in this) { - if (this.hasOwnProperty(i)) { - data[i] = this[i]; - } - } - - return data; - }, - fallbackToSystemFont: function Font_fallbackToSystemFont() { - var _this = this; - - this.missingFile = true; - var charCode, unicode; - var name = this.name; - var type = this.type; - var subtype = this.subtype; - var fontName = name.replace(/[,_]/g, '-'); - var stdFontMap = (0, _standard_fonts.getStdFontMap)(), - nonStdFontMap = (0, _standard_fonts.getNonStdFontMap)(); - var isStandardFont = !!stdFontMap[fontName] || !!(nonStdFontMap[fontName] && stdFontMap[nonStdFontMap[fontName]]); - fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName; - this.bold = fontName.search(/bold/gi) !== -1; - this.italic = fontName.search(/oblique/gi) !== -1 || fontName.search(/italic/gi) !== -1; - this.black = name.search(/Black/g) !== -1; - this.remeasure = Object.keys(this.widths).length > 0; - - if (isStandardFont && type === 'CIDFontType2' && this.cidEncoding.startsWith('Identity-')) { - var GlyphMapForStandardFonts = (0, _standard_fonts.getGlyphMapForStandardFonts)(); - var map = []; - - for (charCode in GlyphMapForStandardFonts) { - map[+charCode] = GlyphMapForStandardFonts[charCode]; - } - - if (/Arial-?Black/i.test(name)) { - var SupplementalGlyphMapForArialBlack = (0, _standard_fonts.getSupplementalGlyphMapForArialBlack)(); - - for (charCode in SupplementalGlyphMapForArialBlack) { - map[+charCode] = SupplementalGlyphMapForArialBlack[charCode]; - } - } else if (/Calibri/i.test(name)) { - var SupplementalGlyphMapForCalibri = (0, _standard_fonts.getSupplementalGlyphMapForCalibri)(); - - for (charCode in SupplementalGlyphMapForCalibri) { - map[+charCode] = SupplementalGlyphMapForCalibri[charCode]; - } - } - - var isIdentityUnicode = this.toUnicode instanceof IdentityToUnicodeMap; - - if (!isIdentityUnicode) { - this.toUnicode.forEach(function (charCode, unicodeCharCode) { - map[+charCode] = unicodeCharCode; - }); - } - - this.toFontChar = map; - this.toUnicode = new ToUnicodeMap(map); - } else if (/Symbol/i.test(fontName)) { - this.toFontChar = buildToFontChar(_encodings.SymbolSetEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences); - } else if (/Dingbats/i.test(fontName)) { - if (/Wingdings/i.test(name)) { - (0, _util.warn)('Non-embedded Wingdings font, falling back to ZapfDingbats.'); - } - - this.toFontChar = buildToFontChar(_encodings.ZapfDingbatsEncoding, (0, _glyphlist.getDingbatsGlyphsUnicode)(), this.differences); - } else if (isStandardFont) { - this.toFontChar = buildToFontChar(this.defaultEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences); - } else { - var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); - this.toUnicode.forEach(function (charCode, unicodeCharCode) { - if (!_this.composite) { - var glyphName = _this.differences[charCode] || _this.defaultEncoding[charCode]; - unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap); - - if (unicode !== -1) { - unicodeCharCode = unicode; - } - } - - _this.toFontChar[charCode] = unicodeCharCode; - }); - } - - this.loadedName = fontName.split('-')[0]; - this.fontType = getFontType(type, subtype); - }, - checkAndRepair: function Font_checkAndRepair(name, font, properties) { - var VALID_TABLES = ['OS/2', 'cmap', 'head', 'hhea', 'hmtx', 'maxp', 'name', 'post', 'loca', 'glyf', 'fpgm', 'prep', 'cvt ', 'CFF ']; - - function readTables(file, numTables) { - var tables = Object.create(null); - tables['OS/2'] = null; - tables['cmap'] = null; - tables['head'] = null; - tables['hhea'] = null; - tables['hmtx'] = null; - tables['maxp'] = null; - tables['name'] = null; - tables['post'] = null; - - for (var i = 0; i < numTables; i++) { - var table = readTableEntry(font); - - if (!VALID_TABLES.includes(table.tag)) { - continue; - } - - if (table.length === 0) { - continue; - } - - tables[table.tag] = table; - } - - return tables; - } - - function readTableEntry(file) { - var tag = (0, _util.bytesToString)(file.getBytes(4)); - var checksum = file.getInt32() >>> 0; - var offset = file.getInt32() >>> 0; - var length = file.getInt32() >>> 0; - var previousPosition = file.pos; - file.pos = file.start ? file.start : 0; - file.skip(offset); - var data = file.getBytes(length); - file.pos = previousPosition; - - if (tag === 'head') { - data[8] = data[9] = data[10] = data[11] = 0; - data[17] |= 0x20; - } - - return { - tag: tag, - checksum: checksum, - length: length, - offset: offset, - data: data - }; - } - - function readOpenTypeHeader(ttf) { - return { - version: (0, _util.bytesToString)(ttf.getBytes(4)), - numTables: ttf.getUint16(), - searchRange: ttf.getUint16(), - entrySelector: ttf.getUint16(), - rangeShift: ttf.getUint16() - }; - } - - function readTrueTypeCollectionHeader(ttc) { - var ttcTag = (0, _util.bytesToString)(ttc.getBytes(4)); - (0, _util.assert)(ttcTag === 'ttcf', 'Must be a TrueType Collection font.'); - var majorVersion = ttc.getUint16(); - var minorVersion = ttc.getUint16(); - var numFonts = ttc.getInt32() >>> 0; - var offsetTable = []; - - for (var i = 0; i < numFonts; i++) { - offsetTable.push(ttc.getInt32() >>> 0); - } - - var header = { - ttcTag: ttcTag, - majorVersion: majorVersion, - minorVersion: minorVersion, - numFonts: numFonts, - offsetTable: offsetTable - }; - - switch (majorVersion) { - case 1: - return header; - - case 2: - header.dsigTag = ttc.getInt32() >>> 0; - header.dsigLength = ttc.getInt32() >>> 0; - header.dsigOffset = ttc.getInt32() >>> 0; - return header; - } - - throw new _util.FormatError("Invalid TrueType Collection majorVersion: ".concat(majorVersion, ".")); - } - - function readTrueTypeCollectionData(ttc, fontName) { - var _readTrueTypeCollecti = readTrueTypeCollectionHeader(ttc), - numFonts = _readTrueTypeCollecti.numFonts, - offsetTable = _readTrueTypeCollecti.offsetTable; - - for (var i = 0; i < numFonts; i++) { - ttc.pos = (ttc.start || 0) + offsetTable[i]; - var potentialHeader = readOpenTypeHeader(ttc); - var potentialTables = readTables(ttc, potentialHeader.numTables); - - if (!potentialTables['name']) { - throw new _util.FormatError('TrueType Collection font must contain a "name" table.'); - } - - var nameTable = readNameTable(potentialTables['name']); - - for (var j = 0, jj = nameTable.length; j < jj; j++) { - for (var k = 0, kk = nameTable[j].length; k < kk; k++) { - var nameEntry = nameTable[j][k]; - - if (nameEntry && nameEntry.replace(/\s/g, '') === fontName) { - return { - header: potentialHeader, - tables: potentialTables - }; - } - } - } - } - - throw new _util.FormatError("TrueType Collection does not contain \"".concat(fontName, "\" font.")); - } - - function readCmapTable(cmap, font, isSymbolicFont, hasEncoding) { - if (!cmap) { - (0, _util.warn)('No cmap table available.'); - return { - platformId: -1, - encodingId: -1, - mappings: [], - hasShortCmap: false - }; - } - - var segment; - var start = (font.start ? font.start : 0) + cmap.offset; - font.pos = start; - font.getUint16(); - var numTables = font.getUint16(); - var potentialTable; - var canBreak = false; - - for (var i = 0; i < numTables; i++) { - var platformId = font.getUint16(); - var encodingId = font.getUint16(); - var offset = font.getInt32() >>> 0; - var useTable = false; - - if (potentialTable && potentialTable.platformId === platformId && potentialTable.encodingId === encodingId) { - continue; - } - - if (platformId === 0 && encodingId === 0) { - useTable = true; - } else if (platformId === 1 && encodingId === 0) { - useTable = true; - } else if (platformId === 3 && encodingId === 1 && (hasEncoding || !potentialTable)) { - useTable = true; - - if (!isSymbolicFont) { - canBreak = true; - } - } else if (isSymbolicFont && platformId === 3 && encodingId === 0) { - useTable = true; - canBreak = true; - } - - if (useTable) { - potentialTable = { - platformId: platformId, - encodingId: encodingId, - offset: offset - }; - } - - if (canBreak) { - break; - } - } - - if (potentialTable) { - font.pos = start + potentialTable.offset; - } - - if (!potentialTable || font.peekByte() === -1) { - (0, _util.warn)('Could not find a preferred cmap table.'); - return { - platformId: -1, - encodingId: -1, - mappings: [], - hasShortCmap: false - }; - } - - var format = font.getUint16(); - font.getUint16(); - font.getUint16(); - var hasShortCmap = false; - var mappings = []; - var j, glyphId; - - if (format === 0) { - for (j = 0; j < 256; j++) { - var index = font.getByte(); - - if (!index) { - continue; - } - - mappings.push({ - charCode: j, - glyphId: index - }); - } - - hasShortCmap = true; - } else if (format === 4) { - var segCount = font.getUint16() >> 1; - font.getBytes(6); - var segIndex, - segments = []; - - for (segIndex = 0; segIndex < segCount; segIndex++) { - segments.push({ - end: font.getUint16() - }); - } - - font.getUint16(); - - for (segIndex = 0; segIndex < segCount; segIndex++) { - segments[segIndex].start = font.getUint16(); - } - - for (segIndex = 0; segIndex < segCount; segIndex++) { - segments[segIndex].delta = font.getUint16(); - } - - var offsetsCount = 0; - - for (segIndex = 0; segIndex < segCount; segIndex++) { - segment = segments[segIndex]; - var rangeOffset = font.getUint16(); - - if (!rangeOffset) { - segment.offsetIndex = -1; - continue; - } - - var offsetIndex = (rangeOffset >> 1) - (segCount - segIndex); - segment.offsetIndex = offsetIndex; - offsetsCount = Math.max(offsetsCount, offsetIndex + segment.end - segment.start + 1); - } - - var offsets = []; - - for (j = 0; j < offsetsCount; j++) { - offsets.push(font.getUint16()); - } - - for (segIndex = 0; segIndex < segCount; segIndex++) { - segment = segments[segIndex]; - start = segment.start; - var end = segment.end; - var delta = segment.delta; - offsetIndex = segment.offsetIndex; - - for (j = start; j <= end; j++) { - if (j === 0xFFFF) { - continue; - } - - glyphId = offsetIndex < 0 ? j : offsets[offsetIndex + j - start]; - glyphId = glyphId + delta & 0xFFFF; - mappings.push({ - charCode: j, - glyphId: glyphId - }); - } - } - } else if (format === 6) { - var firstCode = font.getUint16(); - var entryCount = font.getUint16(); - - for (j = 0; j < entryCount; j++) { - glyphId = font.getUint16(); - var charCode = firstCode + j; - mappings.push({ - charCode: charCode, - glyphId: glyphId - }); - } - } else { - (0, _util.warn)('cmap table has unsupported format: ' + format); - return { - platformId: -1, - encodingId: -1, - mappings: [], - hasShortCmap: false - }; - } - - mappings.sort(function (a, b) { - return a.charCode - b.charCode; - }); - - for (i = 1; i < mappings.length; i++) { - if (mappings[i - 1].charCode === mappings[i].charCode) { - mappings.splice(i, 1); - i--; - } - } - - return { - platformId: potentialTable.platformId, - encodingId: potentialTable.encodingId, - mappings: mappings, - hasShortCmap: hasShortCmap - }; - } - - function sanitizeMetrics(font, header, metrics, numGlyphs) { - if (!header) { - if (metrics) { - metrics.data = null; - } - - return; - } - - font.pos = (font.start ? font.start : 0) + header.offset; - font.pos += 4; - font.pos += 2; - font.pos += 2; - font.pos += 2; - font.pos += 2; - font.pos += 2; - font.pos += 2; - font.pos += 2; - font.pos += 2; - font.pos += 2; - font.pos += 2; - font.pos += 8; - font.pos += 2; - var numOfMetrics = font.getUint16(); - - if (numOfMetrics > numGlyphs) { - (0, _util.info)('The numOfMetrics (' + numOfMetrics + ') should not be ' + 'greater than the numGlyphs (' + numGlyphs + ')'); - numOfMetrics = numGlyphs; - header.data[34] = (numOfMetrics & 0xff00) >> 8; - header.data[35] = numOfMetrics & 0x00ff; - } - - var numOfSidebearings = numGlyphs - numOfMetrics; - var numMissing = numOfSidebearings - (metrics.length - numOfMetrics * 4 >> 1); - - if (numMissing > 0) { - var entries = new Uint8Array(metrics.length + numMissing * 2); - entries.set(metrics.data); - metrics.data = entries; - } - } - - function sanitizeGlyph(source, sourceStart, sourceEnd, dest, destStart, hintsValid) { - var glyphProfile = { - length: 0, - sizeOfInstructions: 0 - }; - - if (sourceEnd - sourceStart <= 12) { - return glyphProfile; - } - - var glyf = source.subarray(sourceStart, sourceEnd); - var contoursCount = signedInt16(glyf[0], glyf[1]); - - if (contoursCount < 0) { - contoursCount = -1; - writeSignedInt16(glyf, 0, contoursCount); - dest.set(glyf, destStart); - glyphProfile.length = glyf.length; - return glyphProfile; - } - - var i, - j = 10, - flagsCount = 0; - - for (i = 0; i < contoursCount; i++) { - var endPoint = glyf[j] << 8 | glyf[j + 1]; - flagsCount = endPoint + 1; - j += 2; - } - - var instructionsStart = j; - var instructionsLength = glyf[j] << 8 | glyf[j + 1]; - glyphProfile.sizeOfInstructions = instructionsLength; - j += 2 + instructionsLength; - var instructionsEnd = j; - var coordinatesLength = 0; - - for (i = 0; i < flagsCount; i++) { - var flag = glyf[j++]; - - if (flag & 0xC0) { - glyf[j - 1] = flag & 0x3F; - } - - var xyLength = (flag & 2 ? 1 : flag & 16 ? 0 : 2) + (flag & 4 ? 1 : flag & 32 ? 0 : 2); - coordinatesLength += xyLength; - - if (flag & 8) { - var repeat = glyf[j++]; - i += repeat; - coordinatesLength += repeat * xyLength; - } - } - - if (coordinatesLength === 0) { - return glyphProfile; - } - - var glyphDataLength = j + coordinatesLength; - - if (glyphDataLength > glyf.length) { - return glyphProfile; - } - - if (!hintsValid && instructionsLength > 0) { - dest.set(glyf.subarray(0, instructionsStart), destStart); - dest.set([0, 0], destStart + instructionsStart); - dest.set(glyf.subarray(instructionsEnd, glyphDataLength), destStart + instructionsStart + 2); - glyphDataLength -= instructionsLength; - - if (glyf.length - glyphDataLength > 3) { - glyphDataLength = glyphDataLength + 3 & ~3; - } - - glyphProfile.length = glyphDataLength; - return glyphProfile; - } - - if (glyf.length - glyphDataLength > 3) { - glyphDataLength = glyphDataLength + 3 & ~3; - dest.set(glyf.subarray(0, glyphDataLength), destStart); - glyphProfile.length = glyphDataLength; - return glyphProfile; - } - - dest.set(glyf, destStart); - glyphProfile.length = glyf.length; - return glyphProfile; - } - - function sanitizeHead(head, numGlyphs, locaLength) { - var data = head.data; - var version = int32(data[0], data[1], data[2], data[3]); - - if (version >> 16 !== 1) { - (0, _util.info)('Attempting to fix invalid version in head table: ' + version); - data[0] = 0; - data[1] = 1; - data[2] = 0; - data[3] = 0; - } - - var indexToLocFormat = int16(data[50], data[51]); - - if (indexToLocFormat < 0 || indexToLocFormat > 1) { - (0, _util.info)('Attempting to fix invalid indexToLocFormat in head table: ' + indexToLocFormat); - var numGlyphsPlusOne = numGlyphs + 1; - - if (locaLength === numGlyphsPlusOne << 1) { - data[50] = 0; - data[51] = 0; - } else if (locaLength === numGlyphsPlusOne << 2) { - data[50] = 0; - data[51] = 1; - } else { - throw new _util.FormatError('Could not fix indexToLocFormat: ' + indexToLocFormat); - } - } - } - - function sanitizeGlyphLocations(loca, glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions) { - var itemSize, itemDecode, itemEncode; - - if (isGlyphLocationsLong) { - itemSize = 4; - - itemDecode = function fontItemDecodeLong(data, offset) { - return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]; - }; - - itemEncode = function fontItemEncodeLong(data, offset, value) { - data[offset] = value >>> 24 & 0xFF; - data[offset + 1] = value >> 16 & 0xFF; - data[offset + 2] = value >> 8 & 0xFF; - data[offset + 3] = value & 0xFF; - }; - } else { - itemSize = 2; - - itemDecode = function fontItemDecode(data, offset) { - return data[offset] << 9 | data[offset + 1] << 1; - }; - - itemEncode = function fontItemEncode(data, offset, value) { - data[offset] = value >> 9 & 0xFF; - data[offset + 1] = value >> 1 & 0xFF; - }; - } - - var numGlyphsOut = dupFirstEntry ? numGlyphs + 1 : numGlyphs; - var locaData = loca.data; - var locaDataSize = itemSize * (1 + numGlyphsOut); - locaData = new Uint8Array(locaDataSize); - locaData.set(loca.data.subarray(0, locaDataSize)); - loca.data = locaData; - var oldGlyfData = glyf.data; - var oldGlyfDataLength = oldGlyfData.length; - var newGlyfData = new Uint8Array(oldGlyfDataLength); - var startOffset = itemDecode(locaData, 0); - var writeOffset = 0; - var missingGlyphs = Object.create(null); - itemEncode(locaData, 0, writeOffset); - var i, j; - - for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) { - var endOffset = itemDecode(locaData, j); - - if (endOffset === 0) { - endOffset = startOffset; - } - - if (endOffset > oldGlyfDataLength && (oldGlyfDataLength + 3 & ~3) === endOffset) { - endOffset = oldGlyfDataLength; - } - - if (endOffset > oldGlyfDataLength) { - startOffset = endOffset; - } - - var glyphProfile = sanitizeGlyph(oldGlyfData, startOffset, endOffset, newGlyfData, writeOffset, hintsValid); - var newLength = glyphProfile.length; - - if (newLength === 0) { - missingGlyphs[i] = true; - } - - if (glyphProfile.sizeOfInstructions > maxSizeOfInstructions) { - maxSizeOfInstructions = glyphProfile.sizeOfInstructions; - } - - writeOffset += newLength; - itemEncode(locaData, j, writeOffset); - startOffset = endOffset; - } - - if (writeOffset === 0) { - var simpleGlyph = new Uint8Array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0]); - - for (i = 0, j = itemSize; i < numGlyphsOut; i++, j += itemSize) { - itemEncode(locaData, j, simpleGlyph.length); - } - - glyf.data = simpleGlyph; - } else if (dupFirstEntry) { - var firstEntryLength = itemDecode(locaData, itemSize); - - if (newGlyfData.length > firstEntryLength + writeOffset) { - glyf.data = newGlyfData.subarray(0, firstEntryLength + writeOffset); - } else { - glyf.data = new Uint8Array(firstEntryLength + writeOffset); - glyf.data.set(newGlyfData.subarray(0, writeOffset)); - } - - glyf.data.set(newGlyfData.subarray(0, firstEntryLength), writeOffset); - itemEncode(loca.data, locaData.length - itemSize, writeOffset + firstEntryLength); - } else { - glyf.data = newGlyfData.subarray(0, writeOffset); - } - - return { - missingGlyphs: missingGlyphs, - maxSizeOfInstructions: maxSizeOfInstructions - }; - } - - function readPostScriptTable(post, properties, maxpNumGlyphs) { - var start = (font.start ? font.start : 0) + post.offset; - font.pos = start; - var length = post.length, - end = start + length; - var version = font.getInt32(); - font.getBytes(28); - var glyphNames; - var valid = true; - var i; - - switch (version) { - case 0x00010000: - glyphNames = MacStandardGlyphOrdering; - break; - - case 0x00020000: - var numGlyphs = font.getUint16(); - - if (numGlyphs !== maxpNumGlyphs) { - valid = false; - break; - } - - var glyphNameIndexes = []; - - for (i = 0; i < numGlyphs; ++i) { - var index = font.getUint16(); - - if (index >= 32768) { - valid = false; - break; - } - - glyphNameIndexes.push(index); - } - - if (!valid) { - break; - } - - var customNames = []; - var strBuf = []; - - while (font.pos < end) { - var stringLength = font.getByte(); - strBuf.length = stringLength; - - for (i = 0; i < stringLength; ++i) { - strBuf[i] = String.fromCharCode(font.getByte()); - } - - customNames.push(strBuf.join('')); - } - - glyphNames = []; - - for (i = 0; i < numGlyphs; ++i) { - var j = glyphNameIndexes[i]; - - if (j < 258) { - glyphNames.push(MacStandardGlyphOrdering[j]); - continue; - } - - glyphNames.push(customNames[j - 258]); - } - - break; - - case 0x00030000: - break; - - default: - (0, _util.warn)('Unknown/unsupported post table version ' + version); - valid = false; - - if (properties.defaultEncoding) { - glyphNames = properties.defaultEncoding; - } - - break; - } - - properties.glyphNames = glyphNames; - return valid; - } - - function readNameTable(nameTable) { - var start = (font.start ? font.start : 0) + nameTable.offset; - font.pos = start; - var names = [[], []]; - var length = nameTable.length, - end = start + length; - var format = font.getUint16(); - var FORMAT_0_HEADER_LENGTH = 6; - - if (format !== 0 || length < FORMAT_0_HEADER_LENGTH) { - return names; - } - - var numRecords = font.getUint16(); - var stringsStart = font.getUint16(); - var records = []; - var NAME_RECORD_LENGTH = 12; - var i, ii; - - for (i = 0; i < numRecords && font.pos + NAME_RECORD_LENGTH <= end; i++) { - var r = { - platform: font.getUint16(), - encoding: font.getUint16(), - language: font.getUint16(), - name: font.getUint16(), - length: font.getUint16(), - offset: font.getUint16() - }; - - if (r.platform === 1 && r.encoding === 0 && r.language === 0 || r.platform === 3 && r.encoding === 1 && r.language === 0x409) { - records.push(r); - } - } - - for (i = 0, ii = records.length; i < ii; i++) { - var record = records[i]; - - if (record.length <= 0) { - continue; - } - - var pos = start + stringsStart + record.offset; - - if (pos + record.length > end) { - continue; - } - - font.pos = pos; - var nameIndex = record.name; - - if (record.encoding) { - var str = ''; - - for (var j = 0, jj = record.length; j < jj; j += 2) { - str += String.fromCharCode(font.getUint16()); - } - - names[1][nameIndex] = str; - } else { - names[0][nameIndex] = (0, _util.bytesToString)(font.getBytes(record.length)); - } - } - - return names; - } - - var TTOpsStackDeltas = [0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, -2, 0, 0, -2, -5, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, -1, -1, 1, -1, -999, 0, 1, 0, -1, -2, 0, -1, -2, -1, -1, 0, -1, -1, 0, 0, -999, -999, -1, -1, -1, -1, -2, -999, -2, -2, -999, 0, -2, -2, 0, 0, -2, 0, -2, 0, 0, 0, -2, -1, -1, 1, 1, 0, 0, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, 0, -999, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -999, -999, -999, -999, -999, -1, -1, -2, -2, 0, 0, 0, 0, -1, -1, -999, -2, -2, 0, 0, -1, -2, -2, 0, 0, 0, -1, -1, -1, -2]; - - function sanitizeTTProgram(table, ttContext) { - var data = table.data; - var i = 0, - j, - n, - b, - funcId, - pc, - lastEndf = 0, - lastDeff = 0; - var stack = []; - var callstack = []; - var functionsCalled = []; - var tooComplexToFollowFunctions = ttContext.tooComplexToFollowFunctions; - var inFDEF = false, - ifLevel = 0, - inELSE = 0; - - for (var ii = data.length; i < ii;) { - var op = data[i++]; - - if (op === 0x40) { - n = data[i++]; - - if (inFDEF || inELSE) { - i += n; - } else { - for (j = 0; j < n; j++) { - stack.push(data[i++]); - } - } - } else if (op === 0x41) { - n = data[i++]; - - if (inFDEF || inELSE) { - i += n * 2; - } else { - for (j = 0; j < n; j++) { - b = data[i++]; - stack.push(b << 8 | data[i++]); - } - } - } else if ((op & 0xF8) === 0xB0) { - n = op - 0xB0 + 1; - - if (inFDEF || inELSE) { - i += n; - } else { - for (j = 0; j < n; j++) { - stack.push(data[i++]); - } - } - } else if ((op & 0xF8) === 0xB8) { - n = op - 0xB8 + 1; - - if (inFDEF || inELSE) { - i += n * 2; - } else { - for (j = 0; j < n; j++) { - b = data[i++]; - stack.push(b << 8 | data[i++]); - } - } - } else if (op === 0x2B && !tooComplexToFollowFunctions) { - if (!inFDEF && !inELSE) { - funcId = stack[stack.length - 1]; - - if (isNaN(funcId)) { - (0, _util.info)('TT: CALL empty stack (or invalid entry).'); - } else { - ttContext.functionsUsed[funcId] = true; - - if (funcId in ttContext.functionsStackDeltas) { - var newStackLength = stack.length + ttContext.functionsStackDeltas[funcId]; - - if (newStackLength < 0) { - (0, _util.warn)('TT: CALL invalid functions stack delta.'); - ttContext.hintsValid = false; - return; - } - - stack.length = newStackLength; - } else if (funcId in ttContext.functionsDefined && !functionsCalled.includes(funcId)) { - callstack.push({ - data: data, - i: i, - stackTop: stack.length - 1 - }); - functionsCalled.push(funcId); - pc = ttContext.functionsDefined[funcId]; - - if (!pc) { - (0, _util.warn)('TT: CALL non-existent function'); - ttContext.hintsValid = false; - return; - } - - data = pc.data; - i = pc.i; - } - } - } - } else if (op === 0x2C && !tooComplexToFollowFunctions) { - if (inFDEF || inELSE) { - (0, _util.warn)('TT: nested FDEFs not allowed'); - tooComplexToFollowFunctions = true; - } - - inFDEF = true; - lastDeff = i; - funcId = stack.pop(); - ttContext.functionsDefined[funcId] = { - data: data, - i: i - }; - } else if (op === 0x2D) { - if (inFDEF) { - inFDEF = false; - lastEndf = i; - } else { - pc = callstack.pop(); - - if (!pc) { - (0, _util.warn)('TT: ENDF bad stack'); - ttContext.hintsValid = false; - return; - } - - funcId = functionsCalled.pop(); - data = pc.data; - i = pc.i; - ttContext.functionsStackDeltas[funcId] = stack.length - pc.stackTop; - } - } else if (op === 0x89) { - if (inFDEF || inELSE) { - (0, _util.warn)('TT: nested IDEFs not allowed'); - tooComplexToFollowFunctions = true; - } - - inFDEF = true; - lastDeff = i; - } else if (op === 0x58) { - ++ifLevel; - } else if (op === 0x1B) { - inELSE = ifLevel; - } else if (op === 0x59) { - if (inELSE === ifLevel) { - inELSE = 0; - } - - --ifLevel; - } else if (op === 0x1C) { - if (!inFDEF && !inELSE) { - var offset = stack[stack.length - 1]; - - if (offset > 0) { - i += offset - 1; - } - } - } - - if (!inFDEF && !inELSE) { - var stackDelta = op <= 0x8E ? TTOpsStackDeltas[op] : op >= 0xC0 && op <= 0xDF ? -1 : op >= 0xE0 ? -2 : 0; - - if (op >= 0x71 && op <= 0x75) { - n = stack.pop(); - - if (!isNaN(n)) { - stackDelta = -n * 2; - } - } - - while (stackDelta < 0 && stack.length > 0) { - stack.pop(); - stackDelta++; - } - - while (stackDelta > 0) { - stack.push(NaN); - stackDelta--; - } - } - } - - ttContext.tooComplexToFollowFunctions = tooComplexToFollowFunctions; - var content = [data]; - - if (i > data.length) { - content.push(new Uint8Array(i - data.length)); - } - - if (lastDeff > lastEndf) { - (0, _util.warn)('TT: complementing a missing function tail'); - content.push(new Uint8Array([0x22, 0x2D])); - } - - foldTTTable(table, content); - } - - function checkInvalidFunctions(ttContext, maxFunctionDefs) { - if (ttContext.tooComplexToFollowFunctions) { - return; - } - - if (ttContext.functionsDefined.length > maxFunctionDefs) { - (0, _util.warn)('TT: more functions defined than expected'); - ttContext.hintsValid = false; - return; - } - - for (var j = 0, jj = ttContext.functionsUsed.length; j < jj; j++) { - if (j > maxFunctionDefs) { - (0, _util.warn)('TT: invalid function id: ' + j); - ttContext.hintsValid = false; - return; - } - - if (ttContext.functionsUsed[j] && !ttContext.functionsDefined[j]) { - (0, _util.warn)('TT: undefined function: ' + j); - ttContext.hintsValid = false; - return; - } - } - } - - function foldTTTable(table, content) { - if (content.length > 1) { - var newLength = 0; - var j, jj; - - for (j = 0, jj = content.length; j < jj; j++) { - newLength += content[j].length; - } - - newLength = newLength + 3 & ~3; - var result = new Uint8Array(newLength); - var pos = 0; - - for (j = 0, jj = content.length; j < jj; j++) { - result.set(content[j], pos); - pos += content[j].length; - } - - table.data = result; - table.length = newLength; - } - } - - function sanitizeTTPrograms(fpgm, prep, cvt, maxFunctionDefs) { - var ttContext = { - functionsDefined: [], - functionsUsed: [], - functionsStackDeltas: [], - tooComplexToFollowFunctions: false, - hintsValid: true - }; - - if (fpgm) { - sanitizeTTProgram(fpgm, ttContext); - } - - if (prep) { - sanitizeTTProgram(prep, ttContext); - } - - if (fpgm) { - checkInvalidFunctions(ttContext, maxFunctionDefs); - } - - if (cvt && cvt.length & 1) { - var cvtData = new Uint8Array(cvt.length + 1); - cvtData.set(cvt.data); - cvt.data = cvtData; - } - - return ttContext.hintsValid; - } - - font = new _stream.Stream(new Uint8Array(font.getBytes())); - var header, tables; - - if (isTrueTypeCollectionFile(font)) { - var ttcData = readTrueTypeCollectionData(font, this.name); - header = ttcData.header; - tables = ttcData.tables; - } else { - header = readOpenTypeHeader(font); - tables = readTables(font, header.numTables); - } - - var cff, cffFile; - var isTrueType = !tables['CFF ']; - - if (!isTrueType) { - var isComposite = properties.composite && ((properties.cidToGidMap || []).length > 0 || !(properties.cMap instanceof _cmap.IdentityCMap)); - - if (header.version === 'OTTO' && !isComposite || !tables['head'] || !tables['hhea'] || !tables['maxp'] || !tables['post']) { - cffFile = new _stream.Stream(tables['CFF '].data); - cff = new CFFFont(cffFile, properties); - adjustWidths(properties); - return this.convert(name, cff, properties); - } - - delete tables['glyf']; - delete tables['loca']; - delete tables['fpgm']; - delete tables['prep']; - delete tables['cvt ']; - this.isOpenType = true; - } else { - if (!tables['loca']) { - throw new _util.FormatError('Required "loca" table is not found'); - } - - if (!tables['glyf']) { - (0, _util.warn)('Required "glyf" table is not found -- trying to recover.'); - tables['glyf'] = { - tag: 'glyf', - data: new Uint8Array(0) - }; - } - - this.isOpenType = false; - } - - if (!tables['maxp']) { - throw new _util.FormatError('Required "maxp" table is not found'); - } - - font.pos = (font.start || 0) + tables['maxp'].offset; - var version = font.getInt32(); - var numGlyphs = font.getUint16(); - var numGlyphsOut = numGlyphs + 1; - var dupFirstEntry = true; - - if (numGlyphsOut > 0xFFFF) { - dupFirstEntry = false; - numGlyphsOut = numGlyphs; - (0, _util.warn)('Not enough space in glyfs to duplicate first glyph.'); - } - - var maxFunctionDefs = 0; - var maxSizeOfInstructions = 0; - - if (version >= 0x00010000 && tables['maxp'].length >= 22) { - font.pos += 8; - var maxZones = font.getUint16(); - - if (maxZones > 2) { - tables['maxp'].data[14] = 0; - tables['maxp'].data[15] = 2; - } - - font.pos += 4; - maxFunctionDefs = font.getUint16(); - font.pos += 4; - maxSizeOfInstructions = font.getUint16(); - } - - tables['maxp'].data[4] = numGlyphsOut >> 8; - tables['maxp'].data[5] = numGlyphsOut & 255; - var hintsValid = sanitizeTTPrograms(tables['fpgm'], tables['prep'], tables['cvt '], maxFunctionDefs); - - if (!hintsValid) { - delete tables['fpgm']; - delete tables['prep']; - delete tables['cvt ']; - } - - sanitizeMetrics(font, tables['hhea'], tables['hmtx'], numGlyphsOut); - - if (!tables['head']) { - throw new _util.FormatError('Required "head" table is not found'); - } - - sanitizeHead(tables['head'], numGlyphs, isTrueType ? tables['loca'].length : 0); - var missingGlyphs = Object.create(null); - - if (isTrueType) { - var isGlyphLocationsLong = int16(tables['head'].data[50], tables['head'].data[51]); - var glyphsInfo = sanitizeGlyphLocations(tables['loca'], tables['glyf'], numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions); - missingGlyphs = glyphsInfo.missingGlyphs; - - if (version >= 0x00010000 && tables['maxp'].length >= 22) { - tables['maxp'].data[26] = glyphsInfo.maxSizeOfInstructions >> 8; - tables['maxp'].data[27] = glyphsInfo.maxSizeOfInstructions & 255; - } - } - - if (!tables['hhea']) { - throw new _util.FormatError('Required "hhea" table is not found'); - } - - if (tables['hhea'].data[10] === 0 && tables['hhea'].data[11] === 0) { - tables['hhea'].data[10] = 0xFF; - tables['hhea'].data[11] = 0xFF; - } - - var metricsOverride = { - unitsPerEm: int16(tables['head'].data[18], tables['head'].data[19]), - yMax: int16(tables['head'].data[42], tables['head'].data[43]), - yMin: signedInt16(tables['head'].data[38], tables['head'].data[39]), - ascent: int16(tables['hhea'].data[4], tables['hhea'].data[5]), - descent: signedInt16(tables['hhea'].data[6], tables['hhea'].data[7]) - }; - this.ascent = metricsOverride.ascent / metricsOverride.unitsPerEm; - this.descent = metricsOverride.descent / metricsOverride.unitsPerEm; - - if (tables['post']) { - readPostScriptTable(tables['post'], properties, numGlyphs); - } - - tables['post'] = { - tag: 'post', - data: createPostTable(properties) - }; - var charCodeToGlyphId = [], - charCode; - - function hasGlyph(glyphId) { - return !missingGlyphs[glyphId]; - } - - if (properties.composite) { - var cidToGidMap = properties.cidToGidMap || []; - var isCidToGidMapEmpty = cidToGidMap.length === 0; - properties.cMap.forEach(function (charCode, cid) { - if (cid > 0xffff) { - throw new _util.FormatError('Max size of CID is 65,535'); - } - - var glyphId = -1; - - if (isCidToGidMapEmpty) { - glyphId = cid; - } else if (cidToGidMap[cid] !== undefined) { - glyphId = cidToGidMap[cid]; - } - - if (glyphId >= 0 && glyphId < numGlyphs && hasGlyph(glyphId)) { - charCodeToGlyphId[charCode] = glyphId; - } - }); - } else { - var cmapTable = readCmapTable(tables['cmap'], font, this.isSymbolicFont, properties.hasEncoding); - var cmapPlatformId = cmapTable.platformId; - var cmapEncodingId = cmapTable.encodingId; - var cmapMappings = cmapTable.mappings; - var cmapMappingsLength = cmapMappings.length; - - if (properties.hasEncoding && (cmapPlatformId === 3 && cmapEncodingId === 1 || cmapPlatformId === 1 && cmapEncodingId === 0) || cmapPlatformId === -1 && cmapEncodingId === -1 && !!(0, _encodings.getEncoding)(properties.baseEncodingName)) { - var baseEncoding = []; - - if (properties.baseEncodingName === 'MacRomanEncoding' || properties.baseEncodingName === 'WinAnsiEncoding') { - baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName); - } - - var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); - - for (charCode = 0; charCode < 256; charCode++) { - var glyphName, standardGlyphName; - - if (this.differences && charCode in this.differences) { - glyphName = this.differences[charCode]; - } else if (charCode in baseEncoding && baseEncoding[charCode] !== '') { - glyphName = baseEncoding[charCode]; - } else { - glyphName = _encodings.StandardEncoding[charCode]; - } - - if (!glyphName) { - continue; - } - - standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap); - var unicodeOrCharCode; - - if (cmapPlatformId === 3 && cmapEncodingId === 1) { - unicodeOrCharCode = glyphsUnicodeMap[standardGlyphName]; - } else if (cmapPlatformId === 1 && cmapEncodingId === 0) { - unicodeOrCharCode = _encodings.MacRomanEncoding.indexOf(standardGlyphName); - } - - var found = false; - - for (var i = 0; i < cmapMappingsLength; ++i) { - if (cmapMappings[i].charCode !== unicodeOrCharCode) { - continue; - } - - charCodeToGlyphId[charCode] = cmapMappings[i].glyphId; - found = true; - break; - } - - if (!found && properties.glyphNames) { - var glyphId = properties.glyphNames.indexOf(glyphName); - - if (glyphId === -1 && standardGlyphName !== glyphName) { - glyphId = properties.glyphNames.indexOf(standardGlyphName); - } - - if (glyphId > 0 && hasGlyph(glyphId)) { - charCodeToGlyphId[charCode] = glyphId; - } - } - } - } else if (cmapPlatformId === 0 && cmapEncodingId === 0) { - for (var _i2 = 0; _i2 < cmapMappingsLength; ++_i2) { - charCodeToGlyphId[cmapMappings[_i2].charCode] = cmapMappings[_i2].glyphId; - } - } else { - for (var _i3 = 0; _i3 < cmapMappingsLength; ++_i3) { - charCode = cmapMappings[_i3].charCode; - - if (cmapPlatformId === 3 && charCode >= 0xF000 && charCode <= 0xF0FF) { - charCode &= 0xFF; - } - - charCodeToGlyphId[charCode] = cmapMappings[_i3].glyphId; - } - } - } - - if (charCodeToGlyphId.length === 0) { - charCodeToGlyphId[0] = 0; - } - - var glyphZeroId = numGlyphsOut - 1; - - if (!dupFirstEntry) { - glyphZeroId = 0; - } - - var newMapping = adjustMapping(charCodeToGlyphId, hasGlyph, glyphZeroId); - this.toFontChar = newMapping.toFontChar; - tables['cmap'] = { - tag: 'cmap', - data: createCmapTable(newMapping.charCodeToGlyphId, numGlyphsOut) - }; - - if (!tables['OS/2'] || !validateOS2Table(tables['OS/2'])) { - tables['OS/2'] = { - tag: 'OS/2', - data: createOS2Table(properties, newMapping.charCodeToGlyphId, metricsOverride) - }; - } - - if (!isTrueType) { - try { - cffFile = new _stream.Stream(tables['CFF '].data); - var parser = new _cff_parser.CFFParser(cffFile, properties, SEAC_ANALYSIS_ENABLED); - cff = parser.parse(); - cff.duplicateFirstGlyph(); - var compiler = new _cff_parser.CFFCompiler(cff); - tables['CFF '].data = compiler.compile(); - } catch (e) { - (0, _util.warn)('Failed to compile font ' + properties.loadedName); - } - } - - if (!tables['name']) { - tables['name'] = { - tag: 'name', - data: createNameTable(this.name) - }; - } else { - var namePrototype = readNameTable(tables['name']); - tables['name'].data = createNameTable(name, namePrototype); - } - - var builder = new OpenTypeFileBuilder(header.version); - - for (var tableTag in tables) { - builder.addTable(tableTag, tables[tableTag].data); - } - - return builder.toArray(); - }, - convert: function Font_convert(fontName, font, properties) { - properties.fixedPitch = false; - - if (properties.builtInEncoding) { - adjustToUnicode(properties, properties.builtInEncoding); - } - - var glyphZeroId = 1; - - if (font instanceof CFFFont) { - glyphZeroId = font.numGlyphs - 1; - } - - var mapping = font.getGlyphMapping(properties); - var newMapping = adjustMapping(mapping, font.hasGlyphId.bind(font), glyphZeroId); - this.toFontChar = newMapping.toFontChar; - var numGlyphs = font.numGlyphs; - - function getCharCodes(charCodeToGlyphId, glyphId) { - var charCodes = null; - - for (var charCode in charCodeToGlyphId) { - if (glyphId === charCodeToGlyphId[charCode]) { - if (!charCodes) { - charCodes = []; - } - - charCodes.push(charCode | 0); - } - } - - return charCodes; - } - - function createCharCode(charCodeToGlyphId, glyphId) { - for (var charCode in charCodeToGlyphId) { - if (glyphId === charCodeToGlyphId[charCode]) { - return charCode | 0; - } - } - - newMapping.charCodeToGlyphId[newMapping.nextAvailableFontCharCode] = glyphId; - return newMapping.nextAvailableFontCharCode++; - } - - var seacs = font.seacs; - - if (seacs && seacs.length) { - var matrix = properties.fontMatrix || _util.FONT_IDENTITY_MATRIX; - var charset = font.getCharset(); - var seacMap = Object.create(null); - - for (var glyphId in seacs) { - glyphId |= 0; - var seac = seacs[glyphId]; - var baseGlyphName = _encodings.StandardEncoding[seac[2]]; - var accentGlyphName = _encodings.StandardEncoding[seac[3]]; - var baseGlyphId = charset.indexOf(baseGlyphName); - var accentGlyphId = charset.indexOf(accentGlyphName); - - if (baseGlyphId < 0 || accentGlyphId < 0) { - continue; - } - - var accentOffset = { - x: seac[0] * matrix[0] + seac[1] * matrix[2] + matrix[4], - y: seac[0] * matrix[1] + seac[1] * matrix[3] + matrix[5] - }; - var charCodes = getCharCodes(mapping, glyphId); - - if (!charCodes) { - continue; - } - - for (var i = 0, ii = charCodes.length; i < ii; i++) { - var charCode = charCodes[i]; - var charCodeToGlyphId = newMapping.charCodeToGlyphId; - var baseFontCharCode = createCharCode(charCodeToGlyphId, baseGlyphId); - var accentFontCharCode = createCharCode(charCodeToGlyphId, accentGlyphId); - seacMap[charCode] = { - baseFontCharCode: baseFontCharCode, - accentFontCharCode: accentFontCharCode, - accentOffset: accentOffset - }; - } - } - - properties.seacMap = seacMap; - } - - var unitsPerEm = 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0]; - var builder = new OpenTypeFileBuilder('\x4F\x54\x54\x4F'); - builder.addTable('CFF ', font.data); - builder.addTable('OS/2', createOS2Table(properties, newMapping.charCodeToGlyphId)); - builder.addTable('cmap', createCmapTable(newMapping.charCodeToGlyphId, numGlyphs)); - builder.addTable('head', '\x00\x01\x00\x00' + '\x00\x00\x10\x00' + '\x00\x00\x00\x00' + '\x5F\x0F\x3C\xF5' + '\x00\x00' + safeString16(unitsPerEm) + '\x00\x00\x00\x00\x9e\x0b\x7e\x27' + '\x00\x00\x00\x00\x9e\x0b\x7e\x27' + '\x00\x00' + safeString16(properties.descent) + '\x0F\xFF' + safeString16(properties.ascent) + string16(properties.italicAngle ? 2 : 0) + '\x00\x11' + '\x00\x00' + '\x00\x00' + '\x00\x00'); - builder.addTable('hhea', '\x00\x01\x00\x00' + safeString16(properties.ascent) + safeString16(properties.descent) + '\x00\x00' + '\xFF\xFF' + '\x00\x00' + '\x00\x00' + '\x00\x00' + safeString16(properties.capHeight) + safeString16(Math.tan(properties.italicAngle) * properties.xHeight) + '\x00\x00' + '\x00\x00' + '\x00\x00' + '\x00\x00' + '\x00\x00' + '\x00\x00' + string16(numGlyphs)); - builder.addTable('hmtx', function fontFieldsHmtx() { - var charstrings = font.charstrings; - var cffWidths = font.cff ? font.cff.widths : null; - var hmtx = '\x00\x00\x00\x00'; - - for (var i = 1, ii = numGlyphs; i < ii; i++) { - var width = 0; - - if (charstrings) { - var charstring = charstrings[i - 1]; - width = 'width' in charstring ? charstring.width : 0; - } else if (cffWidths) { - width = Math.ceil(cffWidths[i] || 0); - } - - hmtx += string16(width) + string16(0); - } - - return hmtx; - }()); - builder.addTable('maxp', '\x00\x00\x50\x00' + string16(numGlyphs)); - builder.addTable('name', createNameTable(fontName)); - builder.addTable('post', createPostTable(properties)); - return builder.toArray(); - }, - - get spaceWidth() { - if ('_shadowWidth' in this) { - return this._shadowWidth; - } - - var possibleSpaceReplacements = ['space', 'minus', 'one', 'i', 'I']; - var width; - - for (var i = 0, ii = possibleSpaceReplacements.length; i < ii; i++) { - var glyphName = possibleSpaceReplacements[i]; - - if (glyphName in this.widths) { - width = this.widths[glyphName]; - break; - } - - var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); - var glyphUnicode = glyphsUnicodeMap[glyphName]; - var charcode = 0; - - if (this.composite) { - if (this.cMap.contains(glyphUnicode)) { - charcode = this.cMap.lookup(glyphUnicode); - } - } - - if (!charcode && this.toUnicode) { - charcode = this.toUnicode.charCodeOf(glyphUnicode); - } - - if (charcode <= 0) { - charcode = glyphUnicode; - } - - width = this.widths[charcode]; - - if (width) { - break; - } - } - - width = width || this.defaultWidth; - this._shadowWidth = width; - return width; - }, - - charToGlyph: function Font_charToGlyph(charcode, isSpace) { - var fontCharCode, width, operatorListId; - var widthCode = charcode; - - if (this.cMap && this.cMap.contains(charcode)) { - widthCode = this.cMap.lookup(charcode); - } - - width = this.widths[widthCode]; - width = (0, _util.isNum)(width) ? width : this.defaultWidth; - var vmetric = this.vmetrics && this.vmetrics[widthCode]; - var unicode = this.toUnicode.get(charcode) || this.fallbackToUnicode.get(charcode) || charcode; - - if (typeof unicode === 'number') { - unicode = String.fromCharCode(unicode); - } - - var isInFont = charcode in this.toFontChar; - fontCharCode = this.toFontChar[charcode] || charcode; - - if (this.missingFile) { - fontCharCode = (0, _unicode.mapSpecialUnicodeValues)(fontCharCode); - } - - if (this.isType3Font) { - operatorListId = fontCharCode; - } - - var accent = null; - - if (this.seacMap && this.seacMap[charcode]) { - isInFont = true; - var seac = this.seacMap[charcode]; - fontCharCode = seac.baseFontCharCode; - accent = { - fontChar: String.fromCodePoint(seac.accentFontCharCode), - offset: seac.accentOffset - }; - } - - var fontChar = typeof fontCharCode === 'number' ? String.fromCodePoint(fontCharCode) : ''; - var glyph = this.glyphCache[charcode]; - - if (!glyph || !glyph.matchesForCache(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont)) { - glyph = new Glyph(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont); - this.glyphCache[charcode] = glyph; - } - - return glyph; - }, - charsToGlyphs: function Font_charsToGlyphs(chars) { - var charsCache = this.charsCache; - var glyphs, glyph, charcode; - - if (charsCache) { - glyphs = charsCache[chars]; - - if (glyphs) { - return glyphs; - } - } - - if (!charsCache) { - charsCache = this.charsCache = Object.create(null); - } - - glyphs = []; - var charsCacheKey = chars; - var i = 0, - ii; - - if (this.cMap) { - var c = Object.create(null); - - while (i < chars.length) { - this.cMap.readCharCode(chars, i, c); - charcode = c.charcode; - var length = c.length; - i += length; - var isSpace = length === 1 && chars.charCodeAt(i - 1) === 0x20; - glyph = this.charToGlyph(charcode, isSpace); - glyphs.push(glyph); - } - } else { - for (i = 0, ii = chars.length; i < ii; ++i) { - charcode = chars.charCodeAt(i); - glyph = this.charToGlyph(charcode, charcode === 0x20); - glyphs.push(glyph); - } - } - - return charsCache[charsCacheKey] = glyphs; - }, - - get glyphCacheValues() { - return Object.values(this.glyphCache); - } - - }; - return Font; - }(); - - exports.Font = Font; - - var ErrorFont = function ErrorFontClosure() { - function ErrorFont(error) { - this.error = error; - this.loadedName = 'g_font_error'; - this.missingFile = true; - } - - ErrorFont.prototype = { - charsToGlyphs: function ErrorFont_charsToGlyphs() { - return []; - }, - exportData: function ErrorFont_exportData() { - return { - error: this.error - }; - } - }; - return ErrorFont; - }(); - - exports.ErrorFont = ErrorFont; - - function type1FontGlyphMapping(properties, builtInEncoding, glyphNames) { - var charCodeToGlyphId = Object.create(null); - var glyphId, charCode, baseEncoding; - var isSymbolicFont = !!(properties.flags & FontFlags.Symbolic); - - if (properties.baseEncodingName) { - baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName); - - for (charCode = 0; charCode < baseEncoding.length; charCode++) { - glyphId = glyphNames.indexOf(baseEncoding[charCode]); - - if (glyphId >= 0) { - charCodeToGlyphId[charCode] = glyphId; - } else { - charCodeToGlyphId[charCode] = 0; - } - } - } else if (isSymbolicFont) { - for (charCode in builtInEncoding) { - charCodeToGlyphId[charCode] = builtInEncoding[charCode]; - } - } else { - baseEncoding = _encodings.StandardEncoding; - - for (charCode = 0; charCode < baseEncoding.length; charCode++) { - glyphId = glyphNames.indexOf(baseEncoding[charCode]); - - if (glyphId >= 0) { - charCodeToGlyphId[charCode] = glyphId; - } else { - charCodeToGlyphId[charCode] = 0; - } - } - } - - var differences = properties.differences, - glyphsUnicodeMap; - - if (differences) { - for (charCode in differences) { - var glyphName = differences[charCode]; - glyphId = glyphNames.indexOf(glyphName); - - if (glyphId === -1) { - if (!glyphsUnicodeMap) { - glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); - } - - var standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap); - - if (standardGlyphName !== glyphName) { - glyphId = glyphNames.indexOf(standardGlyphName); - } - } - - if (glyphId >= 0) { - charCodeToGlyphId[charCode] = glyphId; - } else { - charCodeToGlyphId[charCode] = 0; - } - } - } - - return charCodeToGlyphId; - } - - var Type1Font = function Type1FontClosure() { - function findBlock(streamBytes, signature, startIndex) { - var streamBytesLength = streamBytes.length; - var signatureLength = signature.length; - var scanLength = streamBytesLength - signatureLength; - var i = startIndex, - j, - found = false; - - while (i < scanLength) { - j = 0; - - while (j < signatureLength && streamBytes[i + j] === signature[j]) { - j++; - } - - if (j >= signatureLength) { - i += j; - - while (i < streamBytesLength && (0, _util.isSpace)(streamBytes[i])) { - i++; - } - - found = true; - break; - } - - i++; - } - - return { - found: found, - length: i - }; - } - - function getHeaderBlock(stream, suggestedLength) { - var EEXEC_SIGNATURE = [0x65, 0x65, 0x78, 0x65, 0x63]; - var streamStartPos = stream.pos; - var headerBytes, headerBytesLength, block; - - try { - headerBytes = stream.getBytes(suggestedLength); - headerBytesLength = headerBytes.length; - } catch (ex) { - if (ex instanceof _util.MissingDataException) { - throw ex; - } - } - - if (headerBytesLength === suggestedLength) { - block = findBlock(headerBytes, EEXEC_SIGNATURE, suggestedLength - 2 * EEXEC_SIGNATURE.length); - - if (block.found && block.length === suggestedLength) { - return { - stream: new _stream.Stream(headerBytes), - length: suggestedLength - }; - } - } - - (0, _util.warn)('Invalid "Length1" property in Type1 font -- trying to recover.'); - stream.pos = streamStartPos; - var SCAN_BLOCK_LENGTH = 2048; - var actualLength; - - while (true) { - var scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH); - block = findBlock(scanBytes, EEXEC_SIGNATURE, 0); - - if (block.length === 0) { - break; - } - - stream.pos += block.length; - - if (block.found) { - actualLength = stream.pos - streamStartPos; - break; - } - } - - stream.pos = streamStartPos; - - if (actualLength) { - return { - stream: new _stream.Stream(stream.getBytes(actualLength)), - length: actualLength - }; - } - - (0, _util.warn)('Unable to recover "Length1" property in Type1 font -- using as is.'); - return { - stream: new _stream.Stream(stream.getBytes(suggestedLength)), - length: suggestedLength - }; - } - - function getEexecBlock(stream, suggestedLength) { - var eexecBytes = stream.getBytes(); - return { - stream: new _stream.Stream(eexecBytes), - length: eexecBytes.length - }; - } - - function Type1Font(name, file, properties) { - var PFB_HEADER_SIZE = 6; - var headerBlockLength = properties.length1; - properties.length2; - var pfbHeader = file.peekBytes(PFB_HEADER_SIZE); - var pfbHeaderPresent = pfbHeader[0] === 0x80 && pfbHeader[1] === 0x01; - - if (pfbHeaderPresent) { - file.skip(PFB_HEADER_SIZE); - headerBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2]; - } - - var headerBlock = getHeaderBlock(file, headerBlockLength); - var headerBlockParser = new _type1_parser.Type1Parser(headerBlock.stream, false, SEAC_ANALYSIS_ENABLED); - headerBlockParser.extractFontHeader(properties); - - if (pfbHeaderPresent) { - pfbHeader = file.getBytes(PFB_HEADER_SIZE); - pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2]; - } - - var eexecBlock = getEexecBlock(file); - var eexecBlockParser = new _type1_parser.Type1Parser(eexecBlock.stream, true, SEAC_ANALYSIS_ENABLED); - var data = eexecBlockParser.extractFontProgram(); - - for (var info in data.properties) { - properties[info] = data.properties[info]; - } - - var charstrings = data.charstrings; - var type2Charstrings = this.getType2Charstrings(charstrings); - var subrs = this.getType2Subrs(data.subrs); - this.charstrings = charstrings; - this.data = this.wrap(name, type2Charstrings, this.charstrings, subrs, properties); - this.seacs = this.getSeacs(data.charstrings); - } - - Type1Font.prototype = { - get numGlyphs() { - return this.charstrings.length + 1; - }, - - getCharset: function Type1Font_getCharset() { - var charset = ['.notdef']; - var charstrings = this.charstrings; - - for (var glyphId = 0; glyphId < charstrings.length; glyphId++) { - charset.push(charstrings[glyphId].glyphName); - } - - return charset; - }, - getGlyphMapping: function Type1Font_getGlyphMapping(properties) { - var charstrings = this.charstrings; - var glyphNames = ['.notdef'], - glyphId; - - for (glyphId = 0; glyphId < charstrings.length; glyphId++) { - glyphNames.push(charstrings[glyphId].glyphName); - } - - var encoding = properties.builtInEncoding; - - if (encoding) { - var builtInEncoding = Object.create(null); - - for (var charCode in encoding) { - glyphId = glyphNames.indexOf(encoding[charCode]); - - if (glyphId >= 0) { - builtInEncoding[charCode] = glyphId; - } - } - } - - return type1FontGlyphMapping(properties, builtInEncoding, glyphNames); - }, - hasGlyphId: function Type1Font_hasGlyphID(id) { - if (id < 0 || id >= this.numGlyphs) { - return false; - } - - if (id === 0) { - return true; - } - - var glyph = this.charstrings[id - 1]; - return glyph.charstring.length > 0; - }, - getSeacs: function Type1Font_getSeacs(charstrings) { - var i, ii; - var seacMap = []; - - for (i = 0, ii = charstrings.length; i < ii; i++) { - var charstring = charstrings[i]; - - if (charstring.seac) { - seacMap[i + 1] = charstring.seac; - } - } - - return seacMap; - }, - getType2Charstrings: function Type1Font_getType2Charstrings(type1Charstrings) { - var type2Charstrings = []; - - for (var i = 0, ii = type1Charstrings.length; i < ii; i++) { - type2Charstrings.push(type1Charstrings[i].charstring); - } - - return type2Charstrings; - }, - getType2Subrs: function Type1Font_getType2Subrs(type1Subrs) { - var bias = 0; - var count = type1Subrs.length; - - if (count < 1133) { - bias = 107; - } else if (count < 33769) { - bias = 1131; - } else { - bias = 32768; - } - - var type2Subrs = []; - var i; - - for (i = 0; i < bias; i++) { - type2Subrs.push([0x0B]); - } - - for (i = 0; i < count; i++) { - type2Subrs.push(type1Subrs[i]); - } - - return type2Subrs; - }, - wrap: function Type1Font_wrap(name, glyphs, charstrings, subrs, properties) { - var cff = new _cff_parser.CFF(); - cff.header = new _cff_parser.CFFHeader(1, 0, 4, 4); - cff.names = [name]; - var topDict = new _cff_parser.CFFTopDict(); - topDict.setByName('version', 391); - topDict.setByName('Notice', 392); - topDict.setByName('FullName', 393); - topDict.setByName('FamilyName', 394); - topDict.setByName('Weight', 395); - topDict.setByName('Encoding', null); - topDict.setByName('FontMatrix', properties.fontMatrix); - topDict.setByName('FontBBox', properties.bbox); - topDict.setByName('charset', null); - topDict.setByName('CharStrings', null); - topDict.setByName('Private', null); - cff.topDict = topDict; - var strings = new _cff_parser.CFFStrings(); - strings.add('Version 0.11'); - strings.add('See original notice'); - strings.add(name); - strings.add(name); - strings.add('Medium'); - cff.strings = strings; - cff.globalSubrIndex = new _cff_parser.CFFIndex(); - var count = glyphs.length; - var charsetArray = [0]; - var i, ii; - - for (i = 0; i < count; i++) { - var index = _cff_parser.CFFStandardStrings.indexOf(charstrings[i].glyphName); - - if (index === -1) { - index = 0; - } - - charsetArray.push(index >> 8 & 0xff, index & 0xff); - } - - cff.charset = new _cff_parser.CFFCharset(false, 0, [], charsetArray); - var charStringsIndex = new _cff_parser.CFFIndex(); - charStringsIndex.add([0x8B, 0x0E]); - - for (i = 0; i < count; i++) { - charStringsIndex.add(glyphs[i]); - } - - cff.charStrings = charStringsIndex; - var privateDict = new _cff_parser.CFFPrivateDict(); - privateDict.setByName('Subrs', null); - var fields = ['BlueValues', 'OtherBlues', 'FamilyBlues', 'FamilyOtherBlues', 'StemSnapH', 'StemSnapV', 'BlueShift', 'BlueFuzz', 'BlueScale', 'LanguageGroup', 'ExpansionFactor', 'ForceBold', 'StdHW', 'StdVW']; - - for (i = 0, ii = fields.length; i < ii; i++) { - var field = fields[i]; - - if (!(field in properties.privateData)) { - continue; - } - - var value = properties.privateData[field]; - - if (Array.isArray(value)) { - for (var j = value.length - 1; j > 0; j--) { - value[j] -= value[j - 1]; - } - } - - privateDict.setByName(field, value); - } - - cff.topDict.privateDict = privateDict; - var subrIndex = new _cff_parser.CFFIndex(); - - for (i = 0, ii = subrs.length; i < ii; i++) { - subrIndex.add(subrs[i]); - } - - privateDict.subrsIndex = subrIndex; - var compiler = new _cff_parser.CFFCompiler(cff); - return compiler.compile(); - } - }; - return Type1Font; - }(); - - var CFFFont = function CFFFontClosure() { - function CFFFont(file, properties) { - this.properties = properties; - var parser = new _cff_parser.CFFParser(file, properties, SEAC_ANALYSIS_ENABLED); - this.cff = parser.parse(); - this.cff.duplicateFirstGlyph(); - var compiler = new _cff_parser.CFFCompiler(this.cff); - this.seacs = this.cff.seacs; - - try { - this.data = compiler.compile(); - } catch (e) { - (0, _util.warn)('Failed to compile font ' + properties.loadedName); - this.data = file; - } - } - - CFFFont.prototype = { - get numGlyphs() { - return this.cff.charStrings.count; - }, - - getCharset: function CFFFont_getCharset() { - return this.cff.charset.charset; - }, - getGlyphMapping: function CFFFont_getGlyphMapping() { - var cff = this.cff; - var properties = this.properties; - var charsets = cff.charset.charset; - var charCodeToGlyphId; - var glyphId; - - if (properties.composite) { - charCodeToGlyphId = Object.create(null); - - if (cff.isCIDFont) { - for (glyphId = 0; glyphId < charsets.length; glyphId++) { - var cid = charsets[glyphId]; - var charCode = properties.cMap.charCodeOf(cid); - charCodeToGlyphId[charCode] = glyphId; - } - } else { - for (glyphId = 0; glyphId < cff.charStrings.count; glyphId++) { - charCodeToGlyphId[glyphId] = glyphId; - } - } - - return charCodeToGlyphId; - } - - var encoding = cff.encoding ? cff.encoding.encoding : null; - charCodeToGlyphId = type1FontGlyphMapping(properties, encoding, charsets); - return charCodeToGlyphId; - }, - hasGlyphId: function CFFFont_hasGlyphID(id) { - return this.cff.hasGlyphId(id); - } - }; - return CFFFont; - }(); - - /***/ }), - /* 174 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.CFFFDSelect = exports.CFFCompiler = exports.CFFPrivateDict = exports.CFFTopDict = exports.CFFCharset = exports.CFFIndex = exports.CFFStrings = exports.CFFHeader = exports.CFF = exports.CFFParser = exports.CFFStandardStrings = void 0; - - var _util = __w_extracthighlights_require__(6); - - var _charsets = __w_extracthighlights_require__(175); - - var _encodings = __w_extracthighlights_require__(176); - - var MAX_SUBR_NESTING = 10; - var CFFStandardStrings = ['.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl', 'periodcentered', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', 'questiondown', 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine', 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash', 'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu', 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter', 'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', 'twosuperior', 'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright', 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde', 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex', 'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex', 'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', 'aacute', 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla', 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex', 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis', 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis', 'ugrave', 'yacute', 'ydieresis', 'zcaron', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior', 'ff', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall', 'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall', '001.000', '001.001', '001.002', '001.003', 'Black', 'Bold', 'Book', 'Light', 'Medium', 'Regular', 'Roman', 'Semibold']; - exports.CFFStandardStrings = CFFStandardStrings; - - var CFFParser = function CFFParserClosure() { - var CharstringValidationData = [null, { - id: 'hstem', - min: 2, - stackClearing: true, - stem: true - }, null, { - id: 'vstem', - min: 2, - stackClearing: true, - stem: true - }, { - id: 'vmoveto', - min: 1, - stackClearing: true - }, { - id: 'rlineto', - min: 2, - resetStack: true - }, { - id: 'hlineto', - min: 1, - resetStack: true - }, { - id: 'vlineto', - min: 1, - resetStack: true - }, { - id: 'rrcurveto', - min: 6, - resetStack: true - }, null, { - id: 'callsubr', - min: 1, - undefStack: true - }, { - id: 'return', - min: 0, - undefStack: true - }, null, null, { - id: 'endchar', - min: 0, - stackClearing: true - }, null, null, null, { - id: 'hstemhm', - min: 2, - stackClearing: true, - stem: true - }, { - id: 'hintmask', - min: 0, - stackClearing: true - }, { - id: 'cntrmask', - min: 0, - stackClearing: true - }, { - id: 'rmoveto', - min: 2, - stackClearing: true - }, { - id: 'hmoveto', - min: 1, - stackClearing: true - }, { - id: 'vstemhm', - min: 2, - stackClearing: true, - stem: true - }, { - id: 'rcurveline', - min: 8, - resetStack: true - }, { - id: 'rlinecurve', - min: 8, - resetStack: true - }, { - id: 'vvcurveto', - min: 4, - resetStack: true - }, { - id: 'hhcurveto', - min: 4, - resetStack: true - }, null, { - id: 'callgsubr', - min: 1, - undefStack: true - }, { - id: 'vhcurveto', - min: 4, - resetStack: true - }, { - id: 'hvcurveto', - min: 4, - resetStack: true - }]; - var CharstringValidationData12 = [null, null, null, { - id: 'and', - min: 2, - stackDelta: -1 - }, { - id: 'or', - min: 2, - stackDelta: -1 - }, { - id: 'not', - min: 1, - stackDelta: 0 - }, null, null, null, { - id: 'abs', - min: 1, - stackDelta: 0 - }, { - id: 'add', - min: 2, - stackDelta: -1, - stackFn: function stack_div(stack, index) { - stack[index - 2] = stack[index - 2] + stack[index - 1]; - } - }, { - id: 'sub', - min: 2, - stackDelta: -1, - stackFn: function stack_div(stack, index) { - stack[index - 2] = stack[index - 2] - stack[index - 1]; - } - }, { - id: 'div', - min: 2, - stackDelta: -1, - stackFn: function stack_div(stack, index) { - stack[index - 2] = stack[index - 2] / stack[index - 1]; - } - }, null, { - id: 'neg', - min: 1, - stackDelta: 0, - stackFn: function stack_div(stack, index) { - stack[index - 1] = -stack[index - 1]; - } - }, { - id: 'eq', - min: 2, - stackDelta: -1 - }, null, null, { - id: 'drop', - min: 1, - stackDelta: -1 - }, null, { - id: 'put', - min: 2, - stackDelta: -2 - }, { - id: 'get', - min: 1, - stackDelta: 0 - }, { - id: 'ifelse', - min: 4, - stackDelta: -3 - }, { - id: 'random', - min: 0, - stackDelta: 1 - }, { - id: 'mul', - min: 2, - stackDelta: -1, - stackFn: function stack_div(stack, index) { - stack[index - 2] = stack[index - 2] * stack[index - 1]; - } - }, null, { - id: 'sqrt', - min: 1, - stackDelta: 0 - }, { - id: 'dup', - min: 1, - stackDelta: 1 - }, { - id: 'exch', - min: 2, - stackDelta: 0 - }, { - id: 'index', - min: 2, - stackDelta: 0 - }, { - id: 'roll', - min: 3, - stackDelta: -2 - }, null, null, null, { - id: 'hflex', - min: 7, - resetStack: true - }, { - id: 'flex', - min: 13, - resetStack: true - }, { - id: 'hflex1', - min: 9, - resetStack: true - }, { - id: 'flex1', - min: 11, - resetStack: true - }]; - - function CFFParser(file, properties, seacAnalysisEnabled) { - this.bytes = file.getBytes(); - this.properties = properties; - this.seacAnalysisEnabled = !!seacAnalysisEnabled; - } - - CFFParser.prototype = { - parse: function CFFParser_parse() { - var properties = this.properties; - var cff = new CFF(); - this.cff = cff; - var header = this.parseHeader(); - var nameIndex = this.parseIndex(header.endPos); - var topDictIndex = this.parseIndex(nameIndex.endPos); - var stringIndex = this.parseIndex(topDictIndex.endPos); - var globalSubrIndex = this.parseIndex(stringIndex.endPos); - var topDictParsed = this.parseDict(topDictIndex.obj.get(0)); - var topDict = this.createDict(CFFTopDict, topDictParsed, cff.strings); - cff.header = header.obj; - cff.names = this.parseNameIndex(nameIndex.obj); - cff.strings = this.parseStringIndex(stringIndex.obj); - cff.topDict = topDict; - cff.globalSubrIndex = globalSubrIndex.obj; - this.parsePrivateDict(cff.topDict); - cff.isCIDFont = topDict.hasName('ROS'); - var charStringOffset = topDict.getByName('CharStrings'); - var charStringIndex = this.parseIndex(charStringOffset).obj; - var fontMatrix = topDict.getByName('FontMatrix'); - - if (fontMatrix) { - properties.fontMatrix = fontMatrix; - } - - var fontBBox = topDict.getByName('FontBBox'); - - if (fontBBox) { - properties.ascent = Math.max(fontBBox[3], fontBBox[1]); - properties.descent = Math.min(fontBBox[1], fontBBox[3]); - properties.ascentScaled = true; - } - - var charset, encoding; - - if (cff.isCIDFont) { - var fdArrayIndex = this.parseIndex(topDict.getByName('FDArray')).obj; - - for (var i = 0, ii = fdArrayIndex.count; i < ii; ++i) { - var dictRaw = fdArrayIndex.get(i); - var fontDict = this.createDict(CFFTopDict, this.parseDict(dictRaw), cff.strings); - this.parsePrivateDict(fontDict); - cff.fdArray.push(fontDict); - } - - encoding = null; - charset = this.parseCharsets(topDict.getByName('charset'), charStringIndex.count, cff.strings, true); - cff.fdSelect = this.parseFDSelect(topDict.getByName('FDSelect'), charStringIndex.count); - } else { - charset = this.parseCharsets(topDict.getByName('charset'), charStringIndex.count, cff.strings, false); - encoding = this.parseEncoding(topDict.getByName('Encoding'), properties, cff.strings, charset.charset); - } - - cff.charset = charset; - cff.encoding = encoding; - var charStringsAndSeacs = this.parseCharStrings({ - charStrings: charStringIndex, - localSubrIndex: topDict.privateDict.subrsIndex, - globalSubrIndex: globalSubrIndex.obj, - fdSelect: cff.fdSelect, - fdArray: cff.fdArray, - privateDict: topDict.privateDict - }); - cff.charStrings = charStringsAndSeacs.charStrings; - cff.seacs = charStringsAndSeacs.seacs; - cff.widths = charStringsAndSeacs.widths; - return cff; - }, - parseHeader: function CFFParser_parseHeader() { - var bytes = this.bytes; - var bytesLength = bytes.length; - var offset = 0; - - while (offset < bytesLength && bytes[offset] !== 1) { - ++offset; - } - - if (offset >= bytesLength) { - throw new _util.FormatError('Invalid CFF header'); - } - - if (offset !== 0) { - (0, _util.info)('cff data is shifted'); - bytes = bytes.subarray(offset); - this.bytes = bytes; - } - - var major = bytes[0]; - var minor = bytes[1]; - var hdrSize = bytes[2]; - var offSize = bytes[3]; - var header = new CFFHeader(major, minor, hdrSize, offSize); - return { - obj: header, - endPos: hdrSize - }; - }, - parseDict: function CFFParser_parseDict(dict) { - var pos = 0; - - function parseOperand() { - var value = dict[pos++]; - - if (value === 30) { - return parseFloatOperand(); - } else if (value === 28) { - value = dict[pos++]; - value = (value << 24 | dict[pos++] << 16) >> 16; - return value; - } else if (value === 29) { - value = dict[pos++]; - value = value << 8 | dict[pos++]; - value = value << 8 | dict[pos++]; - value = value << 8 | dict[pos++]; - return value; - } else if (value >= 32 && value <= 246) { - return value - 139; - } else if (value >= 247 && value <= 250) { - return (value - 247) * 256 + dict[pos++] + 108; - } else if (value >= 251 && value <= 254) { - return -((value - 251) * 256) - dict[pos++] - 108; - } - - (0, _util.warn)('CFFParser_parseDict: "' + value + '" is a reserved command.'); - return NaN; - } - - function parseFloatOperand() { - var str = ''; - var eof = 15; - var lookup = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', 'E', 'E-', null, '-']; - var length = dict.length; - - while (pos < length) { - var b = dict[pos++]; - var b1 = b >> 4; - var b2 = b & 15; - - if (b1 === eof) { - break; - } - - str += lookup[b1]; - - if (b2 === eof) { - break; - } - - str += lookup[b2]; - } - - return parseFloat(str); - } - - var operands = []; - var entries = []; - pos = 0; - var end = dict.length; - - while (pos < end) { - var b = dict[pos]; - - if (b <= 21) { - if (b === 12) { - b = b << 8 | dict[++pos]; - } - - entries.push([b, operands]); - operands = []; - ++pos; - } else { - operands.push(parseOperand()); - } - } - - return entries; - }, - parseIndex: function CFFParser_parseIndex(pos) { - var cffIndex = new CFFIndex(); - var bytes = this.bytes; - var count = bytes[pos++] << 8 | bytes[pos++]; - var offsets = []; - var end = pos; - var i, ii; - - if (count !== 0) { - var offsetSize = bytes[pos++]; - var startPos = pos + (count + 1) * offsetSize - 1; - - for (i = 0, ii = count + 1; i < ii; ++i) { - var offset = 0; - - for (var j = 0; j < offsetSize; ++j) { - offset <<= 8; - offset += bytes[pos++]; - } - - offsets.push(startPos + offset); - } - - end = offsets[count]; - } - - for (i = 0, ii = offsets.length - 1; i < ii; ++i) { - var offsetStart = offsets[i]; - var offsetEnd = offsets[i + 1]; - cffIndex.add(bytes.subarray(offsetStart, offsetEnd)); - } - - return { - obj: cffIndex, - endPos: end - }; - }, - parseNameIndex: function CFFParser_parseNameIndex(index) { - var names = []; - - for (var i = 0, ii = index.count; i < ii; ++i) { - var name = index.get(i); - names.push((0, _util.bytesToString)(name)); - } - - return names; - }, - parseStringIndex: function CFFParser_parseStringIndex(index) { - var strings = new CFFStrings(); - - for (var i = 0, ii = index.count; i < ii; ++i) { - var data = index.get(i); - strings.add((0, _util.bytesToString)(data)); - } - - return strings; - }, - createDict: function CFFParser_createDict(Type, dict, strings) { - var cffDict = new Type(strings); - - for (var i = 0, ii = dict.length; i < ii; ++i) { - var pair = dict[i]; - var key = pair[0]; - var value = pair[1]; - cffDict.setByKey(key, value); - } - - return cffDict; - }, - parseCharString: function CFFParser_parseCharString(state, data, localSubrIndex, globalSubrIndex) { - if (!data || state.callDepth > MAX_SUBR_NESTING) { - return false; - } - - var stackSize = state.stackSize; - var stack = state.stack; - var length = data.length; - - for (var j = 0; j < length;) { - var value = data[j++]; - var validationCommand = null; - - if (value === 12) { - var q = data[j++]; - - if (q === 0) { - data[j - 2] = 139; - data[j - 1] = 22; - stackSize = 0; - } else { - validationCommand = CharstringValidationData12[q]; - } - } else if (value === 28) { - stack[stackSize] = (data[j] << 24 | data[j + 1] << 16) >> 16; - j += 2; - stackSize++; - } else if (value === 14) { - if (stackSize >= 4) { - stackSize -= 4; - - if (this.seacAnalysisEnabled) { - state.seac = stack.slice(stackSize, stackSize + 4); - return false; - } - } - - validationCommand = CharstringValidationData[value]; - } else if (value >= 32 && value <= 246) { - stack[stackSize] = value - 139; - stackSize++; - } else if (value >= 247 && value <= 254) { - stack[stackSize] = value < 251 ? (value - 247 << 8) + data[j] + 108 : -(value - 251 << 8) - data[j] - 108; - j++; - stackSize++; - } else if (value === 255) { - stack[stackSize] = (data[j] << 24 | data[j + 1] << 16 | data[j + 2] << 8 | data[j + 3]) / 65536; - j += 4; - stackSize++; - } else if (value === 19 || value === 20) { - state.hints += stackSize >> 1; - j += state.hints + 7 >> 3; - stackSize %= 2; - validationCommand = CharstringValidationData[value]; - } else if (value === 10 || value === 29) { - var subrsIndex; - - if (value === 10) { - subrsIndex = localSubrIndex; - } else { - subrsIndex = globalSubrIndex; - } - - if (!subrsIndex) { - validationCommand = CharstringValidationData[value]; - (0, _util.warn)('Missing subrsIndex for ' + validationCommand.id); - return false; - } - - var bias = 32768; - - if (subrsIndex.count < 1240) { - bias = 107; - } else if (subrsIndex.count < 33900) { - bias = 1131; - } - - var subrNumber = stack[--stackSize] + bias; - - if (subrNumber < 0 || subrNumber >= subrsIndex.count || isNaN(subrNumber)) { - validationCommand = CharstringValidationData[value]; - (0, _util.warn)('Out of bounds subrIndex for ' + validationCommand.id); - return false; - } - - state.stackSize = stackSize; - state.callDepth++; - var valid = this.parseCharString(state, subrsIndex.get(subrNumber), localSubrIndex, globalSubrIndex); - - if (!valid) { - return false; - } - - state.callDepth--; - stackSize = state.stackSize; - continue; - } else if (value === 11) { - state.stackSize = stackSize; - return true; - } else { - validationCommand = CharstringValidationData[value]; - } - - if (validationCommand) { - if (validationCommand.stem) { - state.hints += stackSize >> 1; - - if (value === 3 || value === 23) { - state.hasVStems = true; - } else if (state.hasVStems && (value === 1 || value === 18)) { - (0, _util.warn)('CFF stem hints are in wrong order'); - data[j - 1] = value === 1 ? 3 : 23; - } - } - - if ('min' in validationCommand) { - if (!state.undefStack && stackSize < validationCommand.min) { - (0, _util.warn)('Not enough parameters for ' + validationCommand.id + '; actual: ' + stackSize + ', expected: ' + validationCommand.min); - return false; - } - } - - if (state.firstStackClearing && validationCommand.stackClearing) { - state.firstStackClearing = false; - stackSize -= validationCommand.min; - - if (stackSize >= 2 && validationCommand.stem) { - stackSize %= 2; - } else if (stackSize > 1) { - (0, _util.warn)('Found too many parameters for stack-clearing command'); - } - - if (stackSize > 0 && stack[stackSize - 1] >= 0) { - state.width = stack[stackSize - 1]; - } - } - - if ('stackDelta' in validationCommand) { - if ('stackFn' in validationCommand) { - validationCommand.stackFn(stack, stackSize); - } - - stackSize += validationCommand.stackDelta; - } else if (validationCommand.stackClearing) { - stackSize = 0; - } else if (validationCommand.resetStack) { - stackSize = 0; - state.undefStack = false; - } else if (validationCommand.undefStack) { - stackSize = 0; - state.undefStack = true; - state.firstStackClearing = false; - } - } - } - - state.stackSize = stackSize; - return true; - }, - parseCharStrings: function parseCharStrings(_ref) { - var charStrings = _ref.charStrings, - localSubrIndex = _ref.localSubrIndex, - globalSubrIndex = _ref.globalSubrIndex, - fdSelect = _ref.fdSelect, - fdArray = _ref.fdArray, - privateDict = _ref.privateDict; - var seacs = []; - var widths = []; - var count = charStrings.count; - - for (var i = 0; i < count; i++) { - var charstring = charStrings.get(i); - var state = { - callDepth: 0, - stackSize: 0, - stack: [], - undefStack: true, - hints: 0, - firstStackClearing: true, - seac: null, - width: null, - hasVStems: false - }; - var valid = true; - var localSubrToUse = null; - var privateDictToUse = privateDict; - - if (fdSelect && fdArray.length) { - var fdIndex = fdSelect.getFDIndex(i); - - if (fdIndex === -1) { - (0, _util.warn)('Glyph index is not in fd select.'); - valid = false; - } - - if (fdIndex >= fdArray.length) { - (0, _util.warn)('Invalid fd index for glyph index.'); - valid = false; - } - - if (valid) { - privateDictToUse = fdArray[fdIndex].privateDict; - localSubrToUse = privateDictToUse.subrsIndex; - } - } else if (localSubrIndex) { - localSubrToUse = localSubrIndex; - } - - if (valid) { - valid = this.parseCharString(state, charstring, localSubrToUse, globalSubrIndex); - } - - if (state.width !== null) { - var nominalWidth = privateDictToUse.getByName('nominalWidthX'); - widths[i] = nominalWidth + state.width; - } else { - var defaultWidth = privateDictToUse.getByName('defaultWidthX'); - widths[i] = defaultWidth; - } - - if (state.seac !== null) { - seacs[i] = state.seac; - } - - if (!valid) { - charStrings.set(i, new Uint8Array([14])); - } - } - - return { - charStrings: charStrings, - seacs: seacs, - widths: widths - }; - }, - emptyPrivateDictionary: function CFFParser_emptyPrivateDictionary(parentDict) { - var privateDict = this.createDict(CFFPrivateDict, [], parentDict.strings); - parentDict.setByKey(18, [0, 0]); - parentDict.privateDict = privateDict; - }, - parsePrivateDict: function CFFParser_parsePrivateDict(parentDict) { - if (!parentDict.hasName('Private')) { - this.emptyPrivateDictionary(parentDict); - return; - } - - var privateOffset = parentDict.getByName('Private'); - - if (!Array.isArray(privateOffset) || privateOffset.length !== 2) { - parentDict.removeByName('Private'); - return; - } - - var size = privateOffset[0]; - var offset = privateOffset[1]; - - if (size === 0 || offset >= this.bytes.length) { - this.emptyPrivateDictionary(parentDict); - return; - } - - var privateDictEnd = offset + size; - var dictData = this.bytes.subarray(offset, privateDictEnd); - var dict = this.parseDict(dictData); - var privateDict = this.createDict(CFFPrivateDict, dict, parentDict.strings); - parentDict.privateDict = privateDict; - - if (!privateDict.getByName('Subrs')) { - return; - } - - var subrsOffset = privateDict.getByName('Subrs'); - var relativeOffset = offset + subrsOffset; - - if (subrsOffset === 0 || relativeOffset >= this.bytes.length) { - this.emptyPrivateDictionary(parentDict); - return; - } - - var subrsIndex = this.parseIndex(relativeOffset); - privateDict.subrsIndex = subrsIndex.obj; - }, - parseCharsets: function CFFParser_parseCharsets(pos, length, strings, cid) { - if (pos === 0) { - return new CFFCharset(true, CFFCharsetPredefinedTypes.ISO_ADOBE, _charsets.ISOAdobeCharset); - } else if (pos === 1) { - return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT, _charsets.ExpertCharset); - } else if (pos === 2) { - return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT_SUBSET, _charsets.ExpertSubsetCharset); - } - - var bytes = this.bytes; - var start = pos; - var format = bytes[pos++]; - var charset = ['.notdef']; - var id, count, i; - length -= 1; - - switch (format) { - case 0: - for (i = 0; i < length; i++) { - id = bytes[pos++] << 8 | bytes[pos++]; - charset.push(cid ? id : strings.get(id)); - } - - break; - - case 1: - while (charset.length <= length) { - id = bytes[pos++] << 8 | bytes[pos++]; - count = bytes[pos++]; - - for (i = 0; i <= count; i++) { - charset.push(cid ? id++ : strings.get(id++)); - } - } - - break; - - case 2: - while (charset.length <= length) { - id = bytes[pos++] << 8 | bytes[pos++]; - count = bytes[pos++] << 8 | bytes[pos++]; - - for (i = 0; i <= count; i++) { - charset.push(cid ? id++ : strings.get(id++)); - } - } - - break; - - default: - throw new _util.FormatError('Unknown charset format'); - } - - var end = pos; - var raw = bytes.subarray(start, end); - return new CFFCharset(false, format, charset, raw); - }, - parseEncoding: function CFFParser_parseEncoding(pos, properties, strings, charset) { - var encoding = Object.create(null); - var bytes = this.bytes; - var predefined = false; - var format, i, ii; - var raw = null; - - function readSupplement() { - var supplementsCount = bytes[pos++]; - - for (i = 0; i < supplementsCount; i++) { - var code = bytes[pos++]; - var sid = (bytes[pos++] << 8) + (bytes[pos++] & 0xff); - encoding[code] = charset.indexOf(strings.get(sid)); - } - } - - if (pos === 0 || pos === 1) { - predefined = true; - format = pos; - var baseEncoding = pos ? _encodings.ExpertEncoding : _encodings.StandardEncoding; - - for (i = 0, ii = charset.length; i < ii; i++) { - var index = baseEncoding.indexOf(charset[i]); - - if (index !== -1) { - encoding[index] = i; - } - } - } else { - var dataStart = pos; - format = bytes[pos++]; - - switch (format & 0x7f) { - case 0: - var glyphsCount = bytes[pos++]; - - for (i = 1; i <= glyphsCount; i++) { - encoding[bytes[pos++]] = i; - } - - break; - - case 1: - var rangesCount = bytes[pos++]; - var gid = 1; - - for (i = 0; i < rangesCount; i++) { - var start = bytes[pos++]; - var left = bytes[pos++]; - - for (var j = start; j <= start + left; j++) { - encoding[j] = gid++; - } - } - - break; - - default: - throw new _util.FormatError("Unknown encoding format: ".concat(format, " in CFF")); - } - - var dataEnd = pos; - - if (format & 0x80) { - bytes[dataStart] &= 0x7f; - readSupplement(); - } - - raw = bytes.subarray(dataStart, dataEnd); - } - - format = format & 0x7f; - return new CFFEncoding(predefined, format, encoding, raw); - }, - parseFDSelect: function CFFParser_parseFDSelect(pos, length) { - var bytes = this.bytes; - var format = bytes[pos++]; - var fdSelect = []; - var i; - - switch (format) { - case 0: - for (i = 0; i < length; ++i) { - var id = bytes[pos++]; - fdSelect.push(id); - } - - break; - - case 3: - var rangesCount = bytes[pos++] << 8 | bytes[pos++]; - - for (i = 0; i < rangesCount; ++i) { - var first = bytes[pos++] << 8 | bytes[pos++]; - - if (i === 0 && first !== 0) { - (0, _util.warn)('parseFDSelect: The first range must have a first GID of 0' + ' -- trying to recover.'); - first = 0; - } - - var fdIndex = bytes[pos++]; - var next = bytes[pos] << 8 | bytes[pos + 1]; - - for (var j = first; j < next; ++j) { - fdSelect.push(fdIndex); - } - } - - pos += 2; - break; - - default: - throw new _util.FormatError("parseFDSelect: Unknown format \"".concat(format, "\".")); - } - - if (fdSelect.length !== length) { - throw new _util.FormatError('parseFDSelect: Invalid font data.'); - } - - return new CFFFDSelect(format, fdSelect); - } - }; - return CFFParser; - }(); - - exports.CFFParser = CFFParser; - - var CFF = function CFFClosure() { - function CFF() { - this.header = null; - this.names = []; - this.topDict = null; - this.strings = new CFFStrings(); - this.globalSubrIndex = null; - this.encoding = null; - this.charset = null; - this.charStrings = null; - this.fdArray = []; - this.fdSelect = null; - this.isCIDFont = false; - } - - CFF.prototype = { - duplicateFirstGlyph: function CFF_duplicateFirstGlyph() { - if (this.charStrings.count >= 65535) { - (0, _util.warn)('Not enough space in charstrings to duplicate first glyph.'); - return; - } - - var glyphZero = this.charStrings.get(0); - this.charStrings.add(glyphZero); - - if (this.isCIDFont) { - this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0]); - } - }, - hasGlyphId: function CFF_hasGlyphID(id) { - if (id < 0 || id >= this.charStrings.count) { - return false; - } - - var glyph = this.charStrings.get(id); - return glyph.length > 0; - } - }; - return CFF; - }(); - - exports.CFF = CFF; - - var CFFHeader = function CFFHeaderClosure() { - function CFFHeader(major, minor, hdrSize, offSize) { - this.major = major; - this.minor = minor; - this.hdrSize = hdrSize; - this.offSize = offSize; - } - - return CFFHeader; - }(); - - exports.CFFHeader = CFFHeader; - - var CFFStrings = function CFFStringsClosure() { - function CFFStrings() { - this.strings = []; - } - - CFFStrings.prototype = { - get: function CFFStrings_get(index) { - if (index >= 0 && index <= 390) { - return CFFStandardStrings[index]; - } - - if (index - 391 <= this.strings.length) { - return this.strings[index - 391]; - } - - return CFFStandardStrings[0]; - }, - add: function CFFStrings_add(value) { - this.strings.push(value); - }, - - get count() { - return this.strings.length; - } - - }; - return CFFStrings; - }(); - - exports.CFFStrings = CFFStrings; - - var CFFIndex = function CFFIndexClosure() { - function CFFIndex() { - this.objects = []; - this.length = 0; - } - - CFFIndex.prototype = { - add: function CFFIndex_add(data) { - this.length += data.length; - this.objects.push(data); - }, - set: function CFFIndex_set(index, data) { - this.length += data.length - this.objects[index].length; - this.objects[index] = data; - }, - get: function CFFIndex_get(index) { - return this.objects[index]; - }, - - get count() { - return this.objects.length; - } - - }; - return CFFIndex; - }(); - - exports.CFFIndex = CFFIndex; - - var CFFDict = function CFFDictClosure() { - function CFFDict(tables, strings) { - this.keyToNameMap = tables.keyToNameMap; - this.nameToKeyMap = tables.nameToKeyMap; - this.defaults = tables.defaults; - this.types = tables.types; - this.opcodes = tables.opcodes; - this.order = tables.order; - this.strings = strings; - this.values = Object.create(null); - } - - CFFDict.prototype = { - setByKey: function CFFDict_setByKey(key, value) { - if (!(key in this.keyToNameMap)) { - return false; - } - - var valueLength = value.length; - - if (valueLength === 0) { - return true; - } - - for (var i = 0; i < valueLength; i++) { - if (isNaN(value[i])) { - (0, _util.warn)('Invalid CFFDict value: "' + value + '" for key "' + key + '".'); - return true; - } - } - - var type = this.types[key]; - - if (type === 'num' || type === 'sid' || type === 'offset') { - value = value[0]; - } - - this.values[key] = value; - return true; - }, - setByName: function CFFDict_setByName(name, value) { - if (!(name in this.nameToKeyMap)) { - throw new _util.FormatError("Invalid dictionary name \"".concat(name, "\"")); - } - - this.values[this.nameToKeyMap[name]] = value; - }, - hasName: function CFFDict_hasName(name) { - return this.nameToKeyMap[name] in this.values; - }, - getByName: function CFFDict_getByName(name) { - if (!(name in this.nameToKeyMap)) { - throw new _util.FormatError("Invalid dictionary name ".concat(name, "\"")); - } - - var key = this.nameToKeyMap[name]; - - if (!(key in this.values)) { - return this.defaults[key]; - } - - return this.values[key]; - }, - removeByName: function CFFDict_removeByName(name) { - delete this.values[this.nameToKeyMap[name]]; - } - }; - - CFFDict.createTables = function CFFDict_createTables(layout) { - var tables = { - keyToNameMap: {}, - nameToKeyMap: {}, - defaults: {}, - types: {}, - opcodes: {}, - order: [] - }; - - for (var i = 0, ii = layout.length; i < ii; ++i) { - var entry = layout[i]; - var key = Array.isArray(entry[0]) ? (entry[0][0] << 8) + entry[0][1] : entry[0]; - tables.keyToNameMap[key] = entry[1]; - tables.nameToKeyMap[entry[1]] = key; - tables.types[key] = entry[2]; - tables.defaults[key] = entry[3]; - tables.opcodes[key] = Array.isArray(entry[0]) ? entry[0] : [entry[0]]; - tables.order.push(key); - } - - return tables; - }; - - return CFFDict; - }(); - - var CFFTopDict = function CFFTopDictClosure() { - var layout = [[[12, 30], 'ROS', ['sid', 'sid', 'num'], null], [[12, 20], 'SyntheticBase', 'num', null], [0, 'version', 'sid', null], [1, 'Notice', 'sid', null], [[12, 0], 'Copyright', 'sid', null], [2, 'FullName', 'sid', null], [3, 'FamilyName', 'sid', null], [4, 'Weight', 'sid', null], [[12, 1], 'isFixedPitch', 'num', 0], [[12, 2], 'ItalicAngle', 'num', 0], [[12, 3], 'UnderlinePosition', 'num', -100], [[12, 4], 'UnderlineThickness', 'num', 50], [[12, 5], 'PaintType', 'num', 0], [[12, 6], 'CharstringType', 'num', 2], [[12, 7], 'FontMatrix', ['num', 'num', 'num', 'num', 'num', 'num'], [0.001, 0, 0, 0.001, 0, 0]], [13, 'UniqueID', 'num', null], [5, 'FontBBox', ['num', 'num', 'num', 'num'], [0, 0, 0, 0]], [[12, 8], 'StrokeWidth', 'num', 0], [14, 'XUID', 'array', null], [15, 'charset', 'offset', 0], [16, 'Encoding', 'offset', 0], [17, 'CharStrings', 'offset', 0], [18, 'Private', ['offset', 'offset'], null], [[12, 21], 'PostScript', 'sid', null], [[12, 22], 'BaseFontName', 'sid', null], [[12, 23], 'BaseFontBlend', 'delta', null], [[12, 31], 'CIDFontVersion', 'num', 0], [[12, 32], 'CIDFontRevision', 'num', 0], [[12, 33], 'CIDFontType', 'num', 0], [[12, 34], 'CIDCount', 'num', 8720], [[12, 35], 'UIDBase', 'num', null], [[12, 37], 'FDSelect', 'offset', null], [[12, 36], 'FDArray', 'offset', null], [[12, 38], 'FontName', 'sid', null]]; - var tables = null; - - function CFFTopDict(strings) { - if (tables === null) { - tables = CFFDict.createTables(layout); - } - - CFFDict.call(this, tables, strings); - this.privateDict = null; - } - - CFFTopDict.prototype = Object.create(CFFDict.prototype); - return CFFTopDict; - }(); - - exports.CFFTopDict = CFFTopDict; - - var CFFPrivateDict = function CFFPrivateDictClosure() { - var layout = [[6, 'BlueValues', 'delta', null], [7, 'OtherBlues', 'delta', null], [8, 'FamilyBlues', 'delta', null], [9, 'FamilyOtherBlues', 'delta', null], [[12, 9], 'BlueScale', 'num', 0.039625], [[12, 10], 'BlueShift', 'num', 7], [[12, 11], 'BlueFuzz', 'num', 1], [10, 'StdHW', 'num', null], [11, 'StdVW', 'num', null], [[12, 12], 'StemSnapH', 'delta', null], [[12, 13], 'StemSnapV', 'delta', null], [[12, 14], 'ForceBold', 'num', 0], [[12, 17], 'LanguageGroup', 'num', 0], [[12, 18], 'ExpansionFactor', 'num', 0.06], [[12, 19], 'initialRandomSeed', 'num', 0], [20, 'defaultWidthX', 'num', 0], [21, 'nominalWidthX', 'num', 0], [19, 'Subrs', 'offset', null]]; - var tables = null; - - function CFFPrivateDict(strings) { - if (tables === null) { - tables = CFFDict.createTables(layout); - } - - CFFDict.call(this, tables, strings); - this.subrsIndex = null; - } - - CFFPrivateDict.prototype = Object.create(CFFDict.prototype); - return CFFPrivateDict; - }(); - - exports.CFFPrivateDict = CFFPrivateDict; - var CFFCharsetPredefinedTypes = { - ISO_ADOBE: 0, - EXPERT: 1, - EXPERT_SUBSET: 2 - }; - - var CFFCharset = function CFFCharsetClosure() { - function CFFCharset(predefined, format, charset, raw) { - this.predefined = predefined; - this.format = format; - this.charset = charset; - this.raw = raw; - } - - return CFFCharset; - }(); - - exports.CFFCharset = CFFCharset; - - var CFFEncoding = function CFFEncodingClosure() { - function CFFEncoding(predefined, format, encoding, raw) { - this.predefined = predefined; - this.format = format; - this.encoding = encoding; - this.raw = raw; - } - - return CFFEncoding; - }(); - - var CFFFDSelect = function CFFFDSelectClosure() { - function CFFFDSelect(format, fdSelect) { - this.format = format; - this.fdSelect = fdSelect; - } - - CFFFDSelect.prototype = { - getFDIndex: function CFFFDSelect_get(glyphIndex) { - if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) { - return -1; - } - - return this.fdSelect[glyphIndex]; - } - }; - return CFFFDSelect; - }(); - - exports.CFFFDSelect = CFFFDSelect; - - var CFFOffsetTracker = function CFFOffsetTrackerClosure() { - function CFFOffsetTracker() { - this.offsets = Object.create(null); - } - - CFFOffsetTracker.prototype = { - isTracking: function CFFOffsetTracker_isTracking(key) { - return key in this.offsets; - }, - track: function CFFOffsetTracker_track(key, location) { - if (key in this.offsets) { - throw new _util.FormatError("Already tracking location of ".concat(key)); - } - - this.offsets[key] = location; - }, - offset: function CFFOffsetTracker_offset(value) { - for (var key in this.offsets) { - this.offsets[key] += value; - } - }, - setEntryLocation: function CFFOffsetTracker_setEntryLocation(key, values, output) { - if (!(key in this.offsets)) { - throw new _util.FormatError("Not tracking location of ".concat(key)); - } - - var data = output.data; - var dataOffset = this.offsets[key]; - var size = 5; - - for (var i = 0, ii = values.length; i < ii; ++i) { - var offset0 = i * size + dataOffset; - var offset1 = offset0 + 1; - var offset2 = offset0 + 2; - var offset3 = offset0 + 3; - var offset4 = offset0 + 4; - - if (data[offset0] !== 0x1d || data[offset1] !== 0 || data[offset2] !== 0 || data[offset3] !== 0 || data[offset4] !== 0) { - throw new _util.FormatError('writing to an offset that is not empty'); - } - - var value = values[i]; - data[offset0] = 0x1d; - data[offset1] = value >> 24 & 0xFF; - data[offset2] = value >> 16 & 0xFF; - data[offset3] = value >> 8 & 0xFF; - data[offset4] = value & 0xFF; - } - } - }; - return CFFOffsetTracker; - }(); - - var CFFCompiler = function CFFCompilerClosure() { - function CFFCompiler(cff) { - this.cff = cff; - } - - CFFCompiler.prototype = { - compile: function CFFCompiler_compile() { - var cff = this.cff; - var output = { - data: [], - length: 0, - add: function CFFCompiler_add(data) { - this.data = this.data.concat(data); - this.length = this.data.length; - } - }; - var header = this.compileHeader(cff.header); - output.add(header); - var nameIndex = this.compileNameIndex(cff.names); - output.add(nameIndex); - - if (cff.isCIDFont) { - if (cff.topDict.hasName('FontMatrix')) { - var base = cff.topDict.getByName('FontMatrix'); - cff.topDict.removeByName('FontMatrix'); - - for (var i = 0, ii = cff.fdArray.length; i < ii; i++) { - var subDict = cff.fdArray[i]; - var matrix = base.slice(0); - - if (subDict.hasName('FontMatrix')) { - matrix = _util.Util.transform(matrix, subDict.getByName('FontMatrix')); - } - - subDict.setByName('FontMatrix', matrix); - } - } - } - - cff.topDict.setByName('charset', 0); - var compiled = this.compileTopDicts([cff.topDict], output.length, cff.isCIDFont); - output.add(compiled.output); - var topDictTracker = compiled.trackers[0]; - var stringIndex = this.compileStringIndex(cff.strings.strings); - output.add(stringIndex); - var globalSubrIndex = this.compileIndex(cff.globalSubrIndex); - output.add(globalSubrIndex); - - if (cff.encoding && cff.topDict.hasName('Encoding')) { - if (cff.encoding.predefined) { - topDictTracker.setEntryLocation('Encoding', [cff.encoding.format], output); - } else { - var encoding = this.compileEncoding(cff.encoding); - topDictTracker.setEntryLocation('Encoding', [output.length], output); - output.add(encoding); - } - } - - var charset = this.compileCharset(cff.charset); - topDictTracker.setEntryLocation('charset', [output.length], output); - output.add(charset); - var charStrings = this.compileCharStrings(cff.charStrings); - topDictTracker.setEntryLocation('CharStrings', [output.length], output); - output.add(charStrings); - - if (cff.isCIDFont) { - topDictTracker.setEntryLocation('FDSelect', [output.length], output); - var fdSelect = this.compileFDSelect(cff.fdSelect); - output.add(fdSelect); - compiled = this.compileTopDicts(cff.fdArray, output.length, true); - topDictTracker.setEntryLocation('FDArray', [output.length], output); - output.add(compiled.output); - var fontDictTrackers = compiled.trackers; - this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output); - } - - this.compilePrivateDicts([cff.topDict], [topDictTracker], output); - output.add([0]); - return output.data; - }, - encodeNumber: function CFFCompiler_encodeNumber(value) { - if (parseFloat(value) === parseInt(value, 10) && !isNaN(value)) { - return this.encodeInteger(value); - } - - return this.encodeFloat(value); - }, - encodeFloat: function CFFCompiler_encodeFloat(num) { - var value = num.toString(); - var m = /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(value); - - if (m) { - var epsilon = parseFloat('1e' + ((m[2] ? +m[2] : 0) + m[1].length)); - value = (Math.round(num * epsilon) / epsilon).toString(); - } - - var nibbles = ''; - var i, ii; - - for (i = 0, ii = value.length; i < ii; ++i) { - var a = value[i]; - - if (a === 'e') { - nibbles += value[++i] === '-' ? 'c' : 'b'; - } else if (a === '.') { - nibbles += 'a'; - } else if (a === '-') { - nibbles += 'e'; - } else { - nibbles += a; - } - } - - nibbles += nibbles.length & 1 ? 'f' : 'ff'; - var out = [30]; - - for (i = 0, ii = nibbles.length; i < ii; i += 2) { - out.push(parseInt(nibbles.substring(i, i + 2), 16)); - } - - return out; - }, - encodeInteger: function CFFCompiler_encodeInteger(value) { - var code; - - if (value >= -107 && value <= 107) { - code = [value + 139]; - } else if (value >= 108 && value <= 1131) { - value = value - 108; - code = [(value >> 8) + 247, value & 0xFF]; - } else if (value >= -1131 && value <= -108) { - value = -value - 108; - code = [(value >> 8) + 251, value & 0xFF]; - } else if (value >= -32768 && value <= 32767) { - code = [0x1c, value >> 8 & 0xFF, value & 0xFF]; - } else { - code = [0x1d, value >> 24 & 0xFF, value >> 16 & 0xFF, value >> 8 & 0xFF, value & 0xFF]; - } - - return code; - }, - compileHeader: function CFFCompiler_compileHeader(header) { - return [header.major, header.minor, header.hdrSize, header.offSize]; - }, - compileNameIndex: function CFFCompiler_compileNameIndex(names) { - var nameIndex = new CFFIndex(); - - for (var i = 0, ii = names.length; i < ii; ++i) { - var name = names[i]; - var length = Math.min(name.length, 127); - var sanitizedName = new Array(length); - - for (var j = 0; j < length; j++) { - var char = name[j]; - - if (char < '!' || char > '~' || char === '[' || char === ']' || char === '(' || char === ')' || char === '{' || char === '}' || char === '<' || char === '>' || char === '/' || char === '%') { - char = '_'; - } - - sanitizedName[j] = char; - } - - sanitizedName = sanitizedName.join(''); - - if (sanitizedName === '') { - sanitizedName = 'Bad_Font_Name'; - } - - nameIndex.add((0, _util.stringToBytes)(sanitizedName)); - } - - return this.compileIndex(nameIndex); - }, - compileTopDicts: function CFFCompiler_compileTopDicts(dicts, length, removeCidKeys) { - var fontDictTrackers = []; - var fdArrayIndex = new CFFIndex(); - - for (var i = 0, ii = dicts.length; i < ii; ++i) { - var fontDict = dicts[i]; - - if (removeCidKeys) { - fontDict.removeByName('CIDFontVersion'); - fontDict.removeByName('CIDFontRevision'); - fontDict.removeByName('CIDFontType'); - fontDict.removeByName('CIDCount'); - fontDict.removeByName('UIDBase'); - } - - var fontDictTracker = new CFFOffsetTracker(); - var fontDictData = this.compileDict(fontDict, fontDictTracker); - fontDictTrackers.push(fontDictTracker); - fdArrayIndex.add(fontDictData); - fontDictTracker.offset(length); - } - - fdArrayIndex = this.compileIndex(fdArrayIndex, fontDictTrackers); - return { - trackers: fontDictTrackers, - output: fdArrayIndex - }; - }, - compilePrivateDicts: function CFFCompiler_compilePrivateDicts(dicts, trackers, output) { - for (var i = 0, ii = dicts.length; i < ii; ++i) { - var fontDict = dicts[i]; - var privateDict = fontDict.privateDict; - - if (!privateDict || !fontDict.hasName('Private')) { - throw new _util.FormatError('There must be a private dictionary.'); - } - - var privateDictTracker = new CFFOffsetTracker(); - var privateDictData = this.compileDict(privateDict, privateDictTracker); - var outputLength = output.length; - privateDictTracker.offset(outputLength); - - if (!privateDictData.length) { - outputLength = 0; - } - - trackers[i].setEntryLocation('Private', [privateDictData.length, outputLength], output); - output.add(privateDictData); - - if (privateDict.subrsIndex && privateDict.hasName('Subrs')) { - var subrs = this.compileIndex(privateDict.subrsIndex); - privateDictTracker.setEntryLocation('Subrs', [privateDictData.length], output); - output.add(subrs); - } - } - }, - compileDict: function CFFCompiler_compileDict(dict, offsetTracker) { - var out = []; - var order = dict.order; - - for (var i = 0; i < order.length; ++i) { - var key = order[i]; - - if (!(key in dict.values)) { - continue; - } - - var values = dict.values[key]; - var types = dict.types[key]; - - if (!Array.isArray(types)) { - types = [types]; - } - - if (!Array.isArray(values)) { - values = [values]; - } - - if (values.length === 0) { - continue; - } - - for (var j = 0, jj = types.length; j < jj; ++j) { - var type = types[j]; - var value = values[j]; - - switch (type) { - case 'num': - case 'sid': - out = out.concat(this.encodeNumber(value)); - break; - - case 'offset': - var name = dict.keyToNameMap[key]; - - if (!offsetTracker.isTracking(name)) { - offsetTracker.track(name, out.length); - } - - out = out.concat([0x1d, 0, 0, 0, 0]); - break; - - case 'array': - case 'delta': - out = out.concat(this.encodeNumber(value)); - - for (var k = 1, kk = values.length; k < kk; ++k) { - out = out.concat(this.encodeNumber(values[k])); - } - - break; - - default: - throw new _util.FormatError("Unknown data type of ".concat(type)); - } - } - - out = out.concat(dict.opcodes[key]); - } - - return out; - }, - compileStringIndex: function CFFCompiler_compileStringIndex(strings) { - var stringIndex = new CFFIndex(); - - for (var i = 0, ii = strings.length; i < ii; ++i) { - stringIndex.add((0, _util.stringToBytes)(strings[i])); - } - - return this.compileIndex(stringIndex); - }, - compileGlobalSubrIndex: function CFFCompiler_compileGlobalSubrIndex() { - var globalSubrIndex = this.cff.globalSubrIndex; - this.out.writeByteArray(this.compileIndex(globalSubrIndex)); - }, - compileCharStrings: function CFFCompiler_compileCharStrings(charStrings) { - var charStringsIndex = new CFFIndex(); - - for (var i = 0; i < charStrings.count; i++) { - var glyph = charStrings.get(i); - - if (glyph.length === 0) { - charStringsIndex.add(new Uint8Array([0x8B, 0x0E])); - continue; - } - - charStringsIndex.add(glyph); - } - - return this.compileIndex(charStringsIndex); - }, - compileCharset: function CFFCompiler_compileCharset(charset) { - var length = 1 + (this.cff.charStrings.count - 1) * 2; - var out = new Uint8Array(length); - return this.compileTypedArray(out); - }, - compileEncoding: function CFFCompiler_compileEncoding(encoding) { - return this.compileTypedArray(encoding.raw); - }, - compileFDSelect: function CFFCompiler_compileFDSelect(fdSelect) { - var format = fdSelect.format; - var out, i; - - switch (format) { - case 0: - out = new Uint8Array(1 + fdSelect.fdSelect.length); - out[0] = format; - - for (i = 0; i < fdSelect.fdSelect.length; i++) { - out[i + 1] = fdSelect.fdSelect[i]; - } - - break; - - case 3: - var start = 0; - var lastFD = fdSelect.fdSelect[0]; - var ranges = [format, 0, 0, start >> 8 & 0xFF, start & 0xFF, lastFD]; - - for (i = 1; i < fdSelect.fdSelect.length; i++) { - var currentFD = fdSelect.fdSelect[i]; - - if (currentFD !== lastFD) { - ranges.push(i >> 8 & 0xFF, i & 0xFF, currentFD); - lastFD = currentFD; - } - } - - var numRanges = (ranges.length - 3) / 3; - ranges[1] = numRanges >> 8 & 0xFF; - ranges[2] = numRanges & 0xFF; - ranges.push(i >> 8 & 0xFF, i & 0xFF); - out = new Uint8Array(ranges); - break; - } - - return this.compileTypedArray(out); - }, - compileTypedArray: function CFFCompiler_compileTypedArray(data) { - var out = []; - - for (var i = 0, ii = data.length; i < ii; ++i) { - out[i] = data[i]; - } - - return out; - }, - compileIndex: function CFFCompiler_compileIndex(index, trackers) { - trackers = trackers || []; - var objects = index.objects; - var count = objects.length; - - if (count === 0) { - return [0, 0, 0]; - } - - var data = [count >> 8 & 0xFF, count & 0xff]; - var lastOffset = 1, - i; - - for (i = 0; i < count; ++i) { - lastOffset += objects[i].length; - } - - var offsetSize; - - if (lastOffset < 0x100) { - offsetSize = 1; - } else if (lastOffset < 0x10000) { - offsetSize = 2; - } else if (lastOffset < 0x1000000) { - offsetSize = 3; - } else { - offsetSize = 4; - } - - data.push(offsetSize); - var relativeOffset = 1; - - for (i = 0; i < count + 1; i++) { - if (offsetSize === 1) { - data.push(relativeOffset & 0xFF); - } else if (offsetSize === 2) { - data.push(relativeOffset >> 8 & 0xFF, relativeOffset & 0xFF); - } else if (offsetSize === 3) { - data.push(relativeOffset >> 16 & 0xFF, relativeOffset >> 8 & 0xFF, relativeOffset & 0xFF); - } else { - data.push(relativeOffset >>> 24 & 0xFF, relativeOffset >> 16 & 0xFF, relativeOffset >> 8 & 0xFF, relativeOffset & 0xFF); - } - - if (objects[i]) { - relativeOffset += objects[i].length; - } - } - - for (i = 0; i < count; i++) { - if (trackers[i]) { - trackers[i].offset(data.length); - } - - for (var j = 0, jj = objects[i].length; j < jj; j++) { - data.push(objects[i][j]); - } - } - - return data; - } - }; - return CFFCompiler; - }(); - - exports.CFFCompiler = CFFCompiler; - - /***/ }), - /* 175 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.ExpertSubsetCharset = exports.ExpertCharset = exports.ISOAdobeCharset = void 0; - var ISOAdobeCharset = ['.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl', 'periodcentered', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', 'questiondown', 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine', 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash', 'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu', 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter', 'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', 'twosuperior', 'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright', 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde', 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex', 'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex', 'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', 'aacute', 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla', 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex', 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis', 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis', 'ugrave', 'yacute', 'ydieresis', 'zcaron']; - exports.ISOAdobeCharset = ISOAdobeCharset; - var ExpertCharset = ['.notdef', 'space', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall', 'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', 'onequarter', 'onehalf', 'threequarters', 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall']; - exports.ExpertCharset = ExpertCharset; - var ExpertSubsetCharset = ['.notdef', 'space', 'dollaroldstyle', 'dollarsuperior', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior', 'hyphensuperior', 'colonmonetary', 'onefitted', 'rupiah', 'centoldstyle', 'figuredash', 'hypheninferior', 'onequarter', 'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior']; - exports.ExpertSubsetCharset = ExpertSubsetCharset; - - /***/ }), - /* 176 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.getEncoding = getEncoding; - exports.ExpertEncoding = exports.ZapfDingbatsEncoding = exports.SymbolSetEncoding = exports.MacRomanEncoding = exports.StandardEncoding = exports.WinAnsiEncoding = void 0; - var ExpertEncoding = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclamsmall', 'Hungarumlautsmall', '', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', '', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', '', '', '', 'isuperior', '', '', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', '', '', 'rsuperior', 'ssuperior', 'tsuperior', '', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', '', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', '', '', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall', '', 'Dotaccentsmall', '', '', 'Macronsmall', '', '', 'figuredash', 'hypheninferior', '', '', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', '', '', '', 'onequarter', 'onehalf', 'threequarters', 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', '', '', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall']; - exports.ExpertEncoding = ExpertEncoding; - var MacExpertEncoding = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclamsmall', 'Hungarumlautsmall', 'centoldstyle', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', '', 'threequartersemdash', '', 'questionsmall', '', '', '', '', 'Ethsmall', '', '', 'onequarter', 'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', '', '', '', '', '', '', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', '', 'parenrightinferior', 'Circumflexsmall', 'hypheninferior', 'Gravesmall', 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', '', '', 'asuperior', 'centsuperior', '', '', '', '', 'Aacutesmall', 'Agravesmall', 'Acircumflexsmall', 'Adieresissmall', 'Atildesmall', 'Aringsmall', 'Ccedillasmall', 'Eacutesmall', 'Egravesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Iacutesmall', 'Igravesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ntildesmall', 'Oacutesmall', 'Ogravesmall', 'Ocircumflexsmall', 'Odieresissmall', 'Otildesmall', 'Uacutesmall', 'Ugravesmall', 'Ucircumflexsmall', 'Udieresissmall', '', 'eightsuperior', 'fourinferior', 'threeinferior', 'sixinferior', 'eightinferior', 'seveninferior', 'Scaronsmall', '', 'centinferior', 'twoinferior', '', 'Dieresissmall', '', 'Caronsmall', 'osuperior', 'fiveinferior', '', 'commainferior', 'periodinferior', 'Yacutesmall', '', 'dollarinferior', '', '', 'Thornsmall', '', 'nineinferior', 'zeroinferior', 'Zcaronsmall', 'AEsmall', 'Oslashsmall', 'questiondownsmall', 'oneinferior', 'Lslashsmall', '', '', '', '', '', '', 'Cedillasmall', '', '', '', '', '', 'OEsmall', 'figuredash', 'hyphensuperior', '', '', '', '', 'exclamdownsmall', '', 'Ydieresissmall', '', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'ninesuperior', 'zerosuperior', '', 'esuperior', 'rsuperior', 'tsuperior', '', '', 'isuperior', 'ssuperior', 'dsuperior', '', '', '', '', '', 'lsuperior', 'Ogoneksmall', 'Brevesmall', 'Macronsmall', 'bsuperior', 'nsuperior', 'msuperior', 'commasuperior', 'periodsuperior', 'Dotaccentsmall', 'Ringsmall', '', '', '', '']; - var MacRomanEncoding = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', '', 'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis', 'Udieresis', 'aacute', 'agrave', 'acircumflex', 'adieresis', 'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis', 'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve', 'ocircumflex', 'odieresis', 'otilde', 'uacute', 'ugrave', 'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section', 'bullet', 'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute', 'dieresis', 'notequal', 'AE', 'Oslash', 'infinity', 'plusminus', 'lessequal', 'greaterequal', 'yen', 'mu', 'partialdiff', 'summation', 'product', 'pi', 'integral', 'ordfeminine', 'ordmasculine', 'Omega', 'ae', 'oslash', 'questiondown', 'exclamdown', 'logicalnot', 'radical', 'florin', 'approxequal', 'Delta', 'guillemotleft', 'guillemotright', 'ellipsis', 'space', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash', 'emdash', 'quotedblleft', 'quotedblright', 'quoteleft', 'quoteright', 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction', 'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodcentered', 'quotesinglbase', 'quotedblbase', 'perthousand', 'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', 'Ograve', 'Uacute', 'Ucircumflex', 'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron']; - exports.MacRomanEncoding = MacRomanEncoding; - var StandardEncoding = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', '', 'endash', 'dagger', 'daggerdbl', 'periodcentered', '', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', '', 'questiondown', '', 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', '', 'ring', 'cedilla', '', 'hungarumlaut', 'ogonek', 'caron', 'emdash', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'AE', '', 'ordfeminine', '', '', '', '', 'Lslash', 'Oslash', 'OE', 'ordmasculine', '', '', '', '', '', 'ae', '', '', '', 'dotlessi', '', '', 'lslash', 'oslash', 'oe', 'germandbls', '', '', '', '']; - exports.StandardEncoding = StandardEncoding; - var WinAnsiEncoding = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'bullet', 'Euro', 'bullet', 'quotesinglbase', 'florin', 'quotedblbase', 'ellipsis', 'dagger', 'daggerdbl', 'circumflex', 'perthousand', 'Scaron', 'guilsinglleft', 'OE', 'bullet', 'Zcaron', 'bullet', 'bullet', 'quoteleft', 'quoteright', 'quotedblleft', 'quotedblright', 'bullet', 'endash', 'emdash', 'tilde', 'trademark', 'scaron', 'guilsinglright', 'oe', 'bullet', 'zcaron', 'Ydieresis', 'space', 'exclamdown', 'cent', 'sterling', 'currency', 'yen', 'brokenbar', 'section', 'dieresis', 'copyright', 'ordfeminine', 'guillemotleft', 'logicalnot', 'hyphen', 'registered', 'macron', 'degree', 'plusminus', 'twosuperior', 'threesuperior', 'acute', 'mu', 'paragraph', 'periodcentered', 'cedilla', 'onesuperior', 'ordmasculine', 'guillemotright', 'onequarter', 'onehalf', 'threequarters', 'questiondown', 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', 'Adieresis', 'Aring', 'AE', 'Ccedilla', 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis', 'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Eth', 'Ntilde', 'Ograve', 'Oacute', 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', 'Oslash', 'Ugrave', 'Uacute', 'Ucircumflex', 'Udieresis', 'Yacute', 'Thorn', 'germandbls', 'agrave', 'aacute', 'acircumflex', 'atilde', 'adieresis', 'aring', 'ae', 'ccedilla', 'egrave', 'eacute', 'ecircumflex', 'edieresis', 'igrave', 'iacute', 'icircumflex', 'idieresis', 'eth', 'ntilde', 'ograve', 'oacute', 'ocircumflex', 'otilde', 'odieresis', 'divide', 'oslash', 'ugrave', 'uacute', 'ucircumflex', 'udieresis', 'yacute', 'thorn', 'ydieresis']; - exports.WinAnsiEncoding = WinAnsiEncoding; - var SymbolSetEncoding = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclam', 'universal', 'numbersign', 'existential', 'percent', 'ampersand', 'suchthat', 'parenleft', 'parenright', 'asteriskmath', 'plus', 'comma', 'minus', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'congruent', 'Alpha', 'Beta', 'Chi', 'Delta', 'Epsilon', 'Phi', 'Gamma', 'Eta', 'Iota', 'theta1', 'Kappa', 'Lambda', 'Mu', 'Nu', 'Omicron', 'Pi', 'Theta', 'Rho', 'Sigma', 'Tau', 'Upsilon', 'sigma1', 'Omega', 'Xi', 'Psi', 'Zeta', 'bracketleft', 'therefore', 'bracketright', 'perpendicular', 'underscore', 'radicalex', 'alpha', 'beta', 'chi', 'delta', 'epsilon', 'phi', 'gamma', 'eta', 'iota', 'phi1', 'kappa', 'lambda', 'mu', 'nu', 'omicron', 'pi', 'theta', 'rho', 'sigma', 'tau', 'upsilon', 'omega1', 'omega', 'xi', 'psi', 'zeta', 'braceleft', 'bar', 'braceright', 'similar', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'Euro', 'Upsilon1', 'minute', 'lessequal', 'fraction', 'infinity', 'florin', 'club', 'diamond', 'heart', 'spade', 'arrowboth', 'arrowleft', 'arrowup', 'arrowright', 'arrowdown', 'degree', 'plusminus', 'second', 'greaterequal', 'multiply', 'proportional', 'partialdiff', 'bullet', 'divide', 'notequal', 'equivalence', 'approxequal', 'ellipsis', 'arrowvertex', 'arrowhorizex', 'carriagereturn', 'aleph', 'Ifraktur', 'Rfraktur', 'weierstrass', 'circlemultiply', 'circleplus', 'emptyset', 'intersection', 'union', 'propersuperset', 'reflexsuperset', 'notsubset', 'propersubset', 'reflexsubset', 'element', 'notelement', 'angle', 'gradient', 'registerserif', 'copyrightserif', 'trademarkserif', 'product', 'radical', 'dotmath', 'logicalnot', 'logicaland', 'logicalor', 'arrowdblboth', 'arrowdblleft', 'arrowdblup', 'arrowdblright', 'arrowdbldown', 'lozenge', 'angleleft', 'registersans', 'copyrightsans', 'trademarksans', 'summation', 'parenlefttp', 'parenleftex', 'parenleftbt', 'bracketlefttp', 'bracketleftex', 'bracketleftbt', 'bracelefttp', 'braceleftmid', 'braceleftbt', 'braceex', '', 'angleright', 'integral', 'integraltp', 'integralex', 'integralbt', 'parenrighttp', 'parenrightex', 'parenrightbt', 'bracketrighttp', 'bracketrightex', 'bracketrightbt', 'bracerighttp', 'bracerightmid', 'bracerightbt', '']; - exports.SymbolSetEncoding = SymbolSetEncoding; - var ZapfDingbatsEncoding = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'a1', 'a2', 'a202', 'a3', 'a4', 'a5', 'a119', 'a118', 'a117', 'a11', 'a12', 'a13', 'a14', 'a15', 'a16', 'a105', 'a17', 'a18', 'a19', 'a20', 'a21', 'a22', 'a23', 'a24', 'a25', 'a26', 'a27', 'a28', 'a6', 'a7', 'a8', 'a9', 'a10', 'a29', 'a30', 'a31', 'a32', 'a33', 'a34', 'a35', 'a36', 'a37', 'a38', 'a39', 'a40', 'a41', 'a42', 'a43', 'a44', 'a45', 'a46', 'a47', 'a48', 'a49', 'a50', 'a51', 'a52', 'a53', 'a54', 'a55', 'a56', 'a57', 'a58', 'a59', 'a60', 'a61', 'a62', 'a63', 'a64', 'a65', 'a66', 'a67', 'a68', 'a69', 'a70', 'a71', 'a72', 'a73', 'a74', 'a203', 'a75', 'a204', 'a76', 'a77', 'a78', 'a79', 'a81', 'a82', 'a83', 'a84', 'a97', 'a98', 'a99', 'a100', '', 'a89', 'a90', 'a93', 'a94', 'a91', 'a92', 'a205', 'a85', 'a206', 'a86', 'a87', 'a88', 'a95', 'a96', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'a101', 'a102', 'a103', 'a104', 'a106', 'a107', 'a108', 'a112', 'a111', 'a110', 'a109', 'a120', 'a121', 'a122', 'a123', 'a124', 'a125', 'a126', 'a127', 'a128', 'a129', 'a130', 'a131', 'a132', 'a133', 'a134', 'a135', 'a136', 'a137', 'a138', 'a139', 'a140', 'a141', 'a142', 'a143', 'a144', 'a145', 'a146', 'a147', 'a148', 'a149', 'a150', 'a151', 'a152', 'a153', 'a154', 'a155', 'a156', 'a157', 'a158', 'a159', 'a160', 'a161', 'a163', 'a164', 'a196', 'a165', 'a192', 'a166', 'a167', 'a168', 'a169', 'a170', 'a171', 'a172', 'a173', 'a162', 'a174', 'a175', 'a176', 'a177', 'a178', 'a179', 'a193', 'a180', 'a199', 'a181', 'a200', 'a182', '', 'a201', 'a183', 'a184', 'a197', 'a185', 'a194', 'a198', 'a186', 'a195', 'a187', 'a188', 'a189', 'a190', 'a191', '']; - exports.ZapfDingbatsEncoding = ZapfDingbatsEncoding; - - function getEncoding(encodingName) { - switch (encodingName) { - case 'WinAnsiEncoding': - return WinAnsiEncoding; - - case 'StandardEncoding': - return StandardEncoding; - - case 'MacRomanEncoding': - return MacRomanEncoding; - - case 'SymbolSetEncoding': - return SymbolSetEncoding; - - case 'ZapfDingbatsEncoding': - return ZapfDingbatsEncoding; - - case 'ExpertEncoding': - return ExpertEncoding; - - case 'MacExpertEncoding': - return MacExpertEncoding; - - default: - return null; - } - } - - /***/ }), - /* 177 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - var getLookupTableFactory = __w_extracthighlights_require__(6).getLookupTableFactory; - var getGlyphsUnicode = getLookupTableFactory(function (t) { - t['A'] = 0x0041; - t['AE'] = 0x00C6; - t['AEacute'] = 0x01FC; - t['AEmacron'] = 0x01E2; - t['AEsmall'] = 0xF7E6; - t['Aacute'] = 0x00C1; - t['Aacutesmall'] = 0xF7E1; - t['Abreve'] = 0x0102; - t['Abreveacute'] = 0x1EAE; - t['Abrevecyrillic'] = 0x04D0; - t['Abrevedotbelow'] = 0x1EB6; - t['Abrevegrave'] = 0x1EB0; - t['Abrevehookabove'] = 0x1EB2; - t['Abrevetilde'] = 0x1EB4; - t['Acaron'] = 0x01CD; - t['Acircle'] = 0x24B6; - t['Acircumflex'] = 0x00C2; - t['Acircumflexacute'] = 0x1EA4; - t['Acircumflexdotbelow'] = 0x1EAC; - t['Acircumflexgrave'] = 0x1EA6; - t['Acircumflexhookabove'] = 0x1EA8; - t['Acircumflexsmall'] = 0xF7E2; - t['Acircumflextilde'] = 0x1EAA; - t['Acute'] = 0xF6C9; - t['Acutesmall'] = 0xF7B4; - t['Acyrillic'] = 0x0410; - t['Adblgrave'] = 0x0200; - t['Adieresis'] = 0x00C4; - t['Adieresiscyrillic'] = 0x04D2; - t['Adieresismacron'] = 0x01DE; - t['Adieresissmall'] = 0xF7E4; - t['Adotbelow'] = 0x1EA0; - t['Adotmacron'] = 0x01E0; - t['Agrave'] = 0x00C0; - t['Agravesmall'] = 0xF7E0; - t['Ahookabove'] = 0x1EA2; - t['Aiecyrillic'] = 0x04D4; - t['Ainvertedbreve'] = 0x0202; - t['Alpha'] = 0x0391; - t['Alphatonos'] = 0x0386; - t['Amacron'] = 0x0100; - t['Amonospace'] = 0xFF21; - t['Aogonek'] = 0x0104; - t['Aring'] = 0x00C5; - t['Aringacute'] = 0x01FA; - t['Aringbelow'] = 0x1E00; - t['Aringsmall'] = 0xF7E5; - t['Asmall'] = 0xF761; - t['Atilde'] = 0x00C3; - t['Atildesmall'] = 0xF7E3; - t['Aybarmenian'] = 0x0531; - t['B'] = 0x0042; - t['Bcircle'] = 0x24B7; - t['Bdotaccent'] = 0x1E02; - t['Bdotbelow'] = 0x1E04; - t['Becyrillic'] = 0x0411; - t['Benarmenian'] = 0x0532; - t['Beta'] = 0x0392; - t['Bhook'] = 0x0181; - t['Blinebelow'] = 0x1E06; - t['Bmonospace'] = 0xFF22; - t['Brevesmall'] = 0xF6F4; - t['Bsmall'] = 0xF762; - t['Btopbar'] = 0x0182; - t['C'] = 0x0043; - t['Caarmenian'] = 0x053E; - t['Cacute'] = 0x0106; - t['Caron'] = 0xF6CA; - t['Caronsmall'] = 0xF6F5; - t['Ccaron'] = 0x010C; - t['Ccedilla'] = 0x00C7; - t['Ccedillaacute'] = 0x1E08; - t['Ccedillasmall'] = 0xF7E7; - t['Ccircle'] = 0x24B8; - t['Ccircumflex'] = 0x0108; - t['Cdot'] = 0x010A; - t['Cdotaccent'] = 0x010A; - t['Cedillasmall'] = 0xF7B8; - t['Chaarmenian'] = 0x0549; - t['Cheabkhasiancyrillic'] = 0x04BC; - t['Checyrillic'] = 0x0427; - t['Chedescenderabkhasiancyrillic'] = 0x04BE; - t['Chedescendercyrillic'] = 0x04B6; - t['Chedieresiscyrillic'] = 0x04F4; - t['Cheharmenian'] = 0x0543; - t['Chekhakassiancyrillic'] = 0x04CB; - t['Cheverticalstrokecyrillic'] = 0x04B8; - t['Chi'] = 0x03A7; - t['Chook'] = 0x0187; - t['Circumflexsmall'] = 0xF6F6; - t['Cmonospace'] = 0xFF23; - t['Coarmenian'] = 0x0551; - t['Csmall'] = 0xF763; - t['D'] = 0x0044; - t['DZ'] = 0x01F1; - t['DZcaron'] = 0x01C4; - t['Daarmenian'] = 0x0534; - t['Dafrican'] = 0x0189; - t['Dcaron'] = 0x010E; - t['Dcedilla'] = 0x1E10; - t['Dcircle'] = 0x24B9; - t['Dcircumflexbelow'] = 0x1E12; - t['Dcroat'] = 0x0110; - t['Ddotaccent'] = 0x1E0A; - t['Ddotbelow'] = 0x1E0C; - t['Decyrillic'] = 0x0414; - t['Deicoptic'] = 0x03EE; - t['Delta'] = 0x2206; - t['Deltagreek'] = 0x0394; - t['Dhook'] = 0x018A; - t['Dieresis'] = 0xF6CB; - t['DieresisAcute'] = 0xF6CC; - t['DieresisGrave'] = 0xF6CD; - t['Dieresissmall'] = 0xF7A8; - t['Digammagreek'] = 0x03DC; - t['Djecyrillic'] = 0x0402; - t['Dlinebelow'] = 0x1E0E; - t['Dmonospace'] = 0xFF24; - t['Dotaccentsmall'] = 0xF6F7; - t['Dslash'] = 0x0110; - t['Dsmall'] = 0xF764; - t['Dtopbar'] = 0x018B; - t['Dz'] = 0x01F2; - t['Dzcaron'] = 0x01C5; - t['Dzeabkhasiancyrillic'] = 0x04E0; - t['Dzecyrillic'] = 0x0405; - t['Dzhecyrillic'] = 0x040F; - t['E'] = 0x0045; - t['Eacute'] = 0x00C9; - t['Eacutesmall'] = 0xF7E9; - t['Ebreve'] = 0x0114; - t['Ecaron'] = 0x011A; - t['Ecedillabreve'] = 0x1E1C; - t['Echarmenian'] = 0x0535; - t['Ecircle'] = 0x24BA; - t['Ecircumflex'] = 0x00CA; - t['Ecircumflexacute'] = 0x1EBE; - t['Ecircumflexbelow'] = 0x1E18; - t['Ecircumflexdotbelow'] = 0x1EC6; - t['Ecircumflexgrave'] = 0x1EC0; - t['Ecircumflexhookabove'] = 0x1EC2; - t['Ecircumflexsmall'] = 0xF7EA; - t['Ecircumflextilde'] = 0x1EC4; - t['Ecyrillic'] = 0x0404; - t['Edblgrave'] = 0x0204; - t['Edieresis'] = 0x00CB; - t['Edieresissmall'] = 0xF7EB; - t['Edot'] = 0x0116; - t['Edotaccent'] = 0x0116; - t['Edotbelow'] = 0x1EB8; - t['Efcyrillic'] = 0x0424; - t['Egrave'] = 0x00C8; - t['Egravesmall'] = 0xF7E8; - t['Eharmenian'] = 0x0537; - t['Ehookabove'] = 0x1EBA; - t['Eightroman'] = 0x2167; - t['Einvertedbreve'] = 0x0206; - t['Eiotifiedcyrillic'] = 0x0464; - t['Elcyrillic'] = 0x041B; - t['Elevenroman'] = 0x216A; - t['Emacron'] = 0x0112; - t['Emacronacute'] = 0x1E16; - t['Emacrongrave'] = 0x1E14; - t['Emcyrillic'] = 0x041C; - t['Emonospace'] = 0xFF25; - t['Encyrillic'] = 0x041D; - t['Endescendercyrillic'] = 0x04A2; - t['Eng'] = 0x014A; - t['Enghecyrillic'] = 0x04A4; - t['Enhookcyrillic'] = 0x04C7; - t['Eogonek'] = 0x0118; - t['Eopen'] = 0x0190; - t['Epsilon'] = 0x0395; - t['Epsilontonos'] = 0x0388; - t['Ercyrillic'] = 0x0420; - t['Ereversed'] = 0x018E; - t['Ereversedcyrillic'] = 0x042D; - t['Escyrillic'] = 0x0421; - t['Esdescendercyrillic'] = 0x04AA; - t['Esh'] = 0x01A9; - t['Esmall'] = 0xF765; - t['Eta'] = 0x0397; - t['Etarmenian'] = 0x0538; - t['Etatonos'] = 0x0389; - t['Eth'] = 0x00D0; - t['Ethsmall'] = 0xF7F0; - t['Etilde'] = 0x1EBC; - t['Etildebelow'] = 0x1E1A; - t['Euro'] = 0x20AC; - t['Ezh'] = 0x01B7; - t['Ezhcaron'] = 0x01EE; - t['Ezhreversed'] = 0x01B8; - t['F'] = 0x0046; - t['Fcircle'] = 0x24BB; - t['Fdotaccent'] = 0x1E1E; - t['Feharmenian'] = 0x0556; - t['Feicoptic'] = 0x03E4; - t['Fhook'] = 0x0191; - t['Fitacyrillic'] = 0x0472; - t['Fiveroman'] = 0x2164; - t['Fmonospace'] = 0xFF26; - t['Fourroman'] = 0x2163; - t['Fsmall'] = 0xF766; - t['G'] = 0x0047; - t['GBsquare'] = 0x3387; - t['Gacute'] = 0x01F4; - t['Gamma'] = 0x0393; - t['Gammaafrican'] = 0x0194; - t['Gangiacoptic'] = 0x03EA; - t['Gbreve'] = 0x011E; - t['Gcaron'] = 0x01E6; - t['Gcedilla'] = 0x0122; - t['Gcircle'] = 0x24BC; - t['Gcircumflex'] = 0x011C; - t['Gcommaaccent'] = 0x0122; - t['Gdot'] = 0x0120; - t['Gdotaccent'] = 0x0120; - t['Gecyrillic'] = 0x0413; - t['Ghadarmenian'] = 0x0542; - t['Ghemiddlehookcyrillic'] = 0x0494; - t['Ghestrokecyrillic'] = 0x0492; - t['Gheupturncyrillic'] = 0x0490; - t['Ghook'] = 0x0193; - t['Gimarmenian'] = 0x0533; - t['Gjecyrillic'] = 0x0403; - t['Gmacron'] = 0x1E20; - t['Gmonospace'] = 0xFF27; - t['Grave'] = 0xF6CE; - t['Gravesmall'] = 0xF760; - t['Gsmall'] = 0xF767; - t['Gsmallhook'] = 0x029B; - t['Gstroke'] = 0x01E4; - t['H'] = 0x0048; - t['H18533'] = 0x25CF; - t['H18543'] = 0x25AA; - t['H18551'] = 0x25AB; - t['H22073'] = 0x25A1; - t['HPsquare'] = 0x33CB; - t['Haabkhasiancyrillic'] = 0x04A8; - t['Hadescendercyrillic'] = 0x04B2; - t['Hardsigncyrillic'] = 0x042A; - t['Hbar'] = 0x0126; - t['Hbrevebelow'] = 0x1E2A; - t['Hcedilla'] = 0x1E28; - t['Hcircle'] = 0x24BD; - t['Hcircumflex'] = 0x0124; - t['Hdieresis'] = 0x1E26; - t['Hdotaccent'] = 0x1E22; - t['Hdotbelow'] = 0x1E24; - t['Hmonospace'] = 0xFF28; - t['Hoarmenian'] = 0x0540; - t['Horicoptic'] = 0x03E8; - t['Hsmall'] = 0xF768; - t['Hungarumlaut'] = 0xF6CF; - t['Hungarumlautsmall'] = 0xF6F8; - t['Hzsquare'] = 0x3390; - t['I'] = 0x0049; - t['IAcyrillic'] = 0x042F; - t['IJ'] = 0x0132; - t['IUcyrillic'] = 0x042E; - t['Iacute'] = 0x00CD; - t['Iacutesmall'] = 0xF7ED; - t['Ibreve'] = 0x012C; - t['Icaron'] = 0x01CF; - t['Icircle'] = 0x24BE; - t['Icircumflex'] = 0x00CE; - t['Icircumflexsmall'] = 0xF7EE; - t['Icyrillic'] = 0x0406; - t['Idblgrave'] = 0x0208; - t['Idieresis'] = 0x00CF; - t['Idieresisacute'] = 0x1E2E; - t['Idieresiscyrillic'] = 0x04E4; - t['Idieresissmall'] = 0xF7EF; - t['Idot'] = 0x0130; - t['Idotaccent'] = 0x0130; - t['Idotbelow'] = 0x1ECA; - t['Iebrevecyrillic'] = 0x04D6; - t['Iecyrillic'] = 0x0415; - t['Ifraktur'] = 0x2111; - t['Igrave'] = 0x00CC; - t['Igravesmall'] = 0xF7EC; - t['Ihookabove'] = 0x1EC8; - t['Iicyrillic'] = 0x0418; - t['Iinvertedbreve'] = 0x020A; - t['Iishortcyrillic'] = 0x0419; - t['Imacron'] = 0x012A; - t['Imacroncyrillic'] = 0x04E2; - t['Imonospace'] = 0xFF29; - t['Iniarmenian'] = 0x053B; - t['Iocyrillic'] = 0x0401; - t['Iogonek'] = 0x012E; - t['Iota'] = 0x0399; - t['Iotaafrican'] = 0x0196; - t['Iotadieresis'] = 0x03AA; - t['Iotatonos'] = 0x038A; - t['Ismall'] = 0xF769; - t['Istroke'] = 0x0197; - t['Itilde'] = 0x0128; - t['Itildebelow'] = 0x1E2C; - t['Izhitsacyrillic'] = 0x0474; - t['Izhitsadblgravecyrillic'] = 0x0476; - t['J'] = 0x004A; - t['Jaarmenian'] = 0x0541; - t['Jcircle'] = 0x24BF; - t['Jcircumflex'] = 0x0134; - t['Jecyrillic'] = 0x0408; - t['Jheharmenian'] = 0x054B; - t['Jmonospace'] = 0xFF2A; - t['Jsmall'] = 0xF76A; - t['K'] = 0x004B; - t['KBsquare'] = 0x3385; - t['KKsquare'] = 0x33CD; - t['Kabashkircyrillic'] = 0x04A0; - t['Kacute'] = 0x1E30; - t['Kacyrillic'] = 0x041A; - t['Kadescendercyrillic'] = 0x049A; - t['Kahookcyrillic'] = 0x04C3; - t['Kappa'] = 0x039A; - t['Kastrokecyrillic'] = 0x049E; - t['Kaverticalstrokecyrillic'] = 0x049C; - t['Kcaron'] = 0x01E8; - t['Kcedilla'] = 0x0136; - t['Kcircle'] = 0x24C0; - t['Kcommaaccent'] = 0x0136; - t['Kdotbelow'] = 0x1E32; - t['Keharmenian'] = 0x0554; - t['Kenarmenian'] = 0x053F; - t['Khacyrillic'] = 0x0425; - t['Kheicoptic'] = 0x03E6; - t['Khook'] = 0x0198; - t['Kjecyrillic'] = 0x040C; - t['Klinebelow'] = 0x1E34; - t['Kmonospace'] = 0xFF2B; - t['Koppacyrillic'] = 0x0480; - t['Koppagreek'] = 0x03DE; - t['Ksicyrillic'] = 0x046E; - t['Ksmall'] = 0xF76B; - t['L'] = 0x004C; - t['LJ'] = 0x01C7; - t['LL'] = 0xF6BF; - t['Lacute'] = 0x0139; - t['Lambda'] = 0x039B; - t['Lcaron'] = 0x013D; - t['Lcedilla'] = 0x013B; - t['Lcircle'] = 0x24C1; - t['Lcircumflexbelow'] = 0x1E3C; - t['Lcommaaccent'] = 0x013B; - t['Ldot'] = 0x013F; - t['Ldotaccent'] = 0x013F; - t['Ldotbelow'] = 0x1E36; - t['Ldotbelowmacron'] = 0x1E38; - t['Liwnarmenian'] = 0x053C; - t['Lj'] = 0x01C8; - t['Ljecyrillic'] = 0x0409; - t['Llinebelow'] = 0x1E3A; - t['Lmonospace'] = 0xFF2C; - t['Lslash'] = 0x0141; - t['Lslashsmall'] = 0xF6F9; - t['Lsmall'] = 0xF76C; - t['M'] = 0x004D; - t['MBsquare'] = 0x3386; - t['Macron'] = 0xF6D0; - t['Macronsmall'] = 0xF7AF; - t['Macute'] = 0x1E3E; - t['Mcircle'] = 0x24C2; - t['Mdotaccent'] = 0x1E40; - t['Mdotbelow'] = 0x1E42; - t['Menarmenian'] = 0x0544; - t['Mmonospace'] = 0xFF2D; - t['Msmall'] = 0xF76D; - t['Mturned'] = 0x019C; - t['Mu'] = 0x039C; - t['N'] = 0x004E; - t['NJ'] = 0x01CA; - t['Nacute'] = 0x0143; - t['Ncaron'] = 0x0147; - t['Ncedilla'] = 0x0145; - t['Ncircle'] = 0x24C3; - t['Ncircumflexbelow'] = 0x1E4A; - t['Ncommaaccent'] = 0x0145; - t['Ndotaccent'] = 0x1E44; - t['Ndotbelow'] = 0x1E46; - t['Nhookleft'] = 0x019D; - t['Nineroman'] = 0x2168; - t['Nj'] = 0x01CB; - t['Njecyrillic'] = 0x040A; - t['Nlinebelow'] = 0x1E48; - t['Nmonospace'] = 0xFF2E; - t['Nowarmenian'] = 0x0546; - t['Nsmall'] = 0xF76E; - t['Ntilde'] = 0x00D1; - t['Ntildesmall'] = 0xF7F1; - t['Nu'] = 0x039D; - t['O'] = 0x004F; - t['OE'] = 0x0152; - t['OEsmall'] = 0xF6FA; - t['Oacute'] = 0x00D3; - t['Oacutesmall'] = 0xF7F3; - t['Obarredcyrillic'] = 0x04E8; - t['Obarreddieresiscyrillic'] = 0x04EA; - t['Obreve'] = 0x014E; - t['Ocaron'] = 0x01D1; - t['Ocenteredtilde'] = 0x019F; - t['Ocircle'] = 0x24C4; - t['Ocircumflex'] = 0x00D4; - t['Ocircumflexacute'] = 0x1ED0; - t['Ocircumflexdotbelow'] = 0x1ED8; - t['Ocircumflexgrave'] = 0x1ED2; - t['Ocircumflexhookabove'] = 0x1ED4; - t['Ocircumflexsmall'] = 0xF7F4; - t['Ocircumflextilde'] = 0x1ED6; - t['Ocyrillic'] = 0x041E; - t['Odblacute'] = 0x0150; - t['Odblgrave'] = 0x020C; - t['Odieresis'] = 0x00D6; - t['Odieresiscyrillic'] = 0x04E6; - t['Odieresissmall'] = 0xF7F6; - t['Odotbelow'] = 0x1ECC; - t['Ogoneksmall'] = 0xF6FB; - t['Ograve'] = 0x00D2; - t['Ogravesmall'] = 0xF7F2; - t['Oharmenian'] = 0x0555; - t['Ohm'] = 0x2126; - t['Ohookabove'] = 0x1ECE; - t['Ohorn'] = 0x01A0; - t['Ohornacute'] = 0x1EDA; - t['Ohorndotbelow'] = 0x1EE2; - t['Ohorngrave'] = 0x1EDC; - t['Ohornhookabove'] = 0x1EDE; - t['Ohorntilde'] = 0x1EE0; - t['Ohungarumlaut'] = 0x0150; - t['Oi'] = 0x01A2; - t['Oinvertedbreve'] = 0x020E; - t['Omacron'] = 0x014C; - t['Omacronacute'] = 0x1E52; - t['Omacrongrave'] = 0x1E50; - t['Omega'] = 0x2126; - t['Omegacyrillic'] = 0x0460; - t['Omegagreek'] = 0x03A9; - t['Omegaroundcyrillic'] = 0x047A; - t['Omegatitlocyrillic'] = 0x047C; - t['Omegatonos'] = 0x038F; - t['Omicron'] = 0x039F; - t['Omicrontonos'] = 0x038C; - t['Omonospace'] = 0xFF2F; - t['Oneroman'] = 0x2160; - t['Oogonek'] = 0x01EA; - t['Oogonekmacron'] = 0x01EC; - t['Oopen'] = 0x0186; - t['Oslash'] = 0x00D8; - t['Oslashacute'] = 0x01FE; - t['Oslashsmall'] = 0xF7F8; - t['Osmall'] = 0xF76F; - t['Ostrokeacute'] = 0x01FE; - t['Otcyrillic'] = 0x047E; - t['Otilde'] = 0x00D5; - t['Otildeacute'] = 0x1E4C; - t['Otildedieresis'] = 0x1E4E; - t['Otildesmall'] = 0xF7F5; - t['P'] = 0x0050; - t['Pacute'] = 0x1E54; - t['Pcircle'] = 0x24C5; - t['Pdotaccent'] = 0x1E56; - t['Pecyrillic'] = 0x041F; - t['Peharmenian'] = 0x054A; - t['Pemiddlehookcyrillic'] = 0x04A6; - t['Phi'] = 0x03A6; - t['Phook'] = 0x01A4; - t['Pi'] = 0x03A0; - t['Piwrarmenian'] = 0x0553; - t['Pmonospace'] = 0xFF30; - t['Psi'] = 0x03A8; - t['Psicyrillic'] = 0x0470; - t['Psmall'] = 0xF770; - t['Q'] = 0x0051; - t['Qcircle'] = 0x24C6; - t['Qmonospace'] = 0xFF31; - t['Qsmall'] = 0xF771; - t['R'] = 0x0052; - t['Raarmenian'] = 0x054C; - t['Racute'] = 0x0154; - t['Rcaron'] = 0x0158; - t['Rcedilla'] = 0x0156; - t['Rcircle'] = 0x24C7; - t['Rcommaaccent'] = 0x0156; - t['Rdblgrave'] = 0x0210; - t['Rdotaccent'] = 0x1E58; - t['Rdotbelow'] = 0x1E5A; - t['Rdotbelowmacron'] = 0x1E5C; - t['Reharmenian'] = 0x0550; - t['Rfraktur'] = 0x211C; - t['Rho'] = 0x03A1; - t['Ringsmall'] = 0xF6FC; - t['Rinvertedbreve'] = 0x0212; - t['Rlinebelow'] = 0x1E5E; - t['Rmonospace'] = 0xFF32; - t['Rsmall'] = 0xF772; - t['Rsmallinverted'] = 0x0281; - t['Rsmallinvertedsuperior'] = 0x02B6; - t['S'] = 0x0053; - t['SF010000'] = 0x250C; - t['SF020000'] = 0x2514; - t['SF030000'] = 0x2510; - t['SF040000'] = 0x2518; - t['SF050000'] = 0x253C; - t['SF060000'] = 0x252C; - t['SF070000'] = 0x2534; - t['SF080000'] = 0x251C; - t['SF090000'] = 0x2524; - t['SF100000'] = 0x2500; - t['SF110000'] = 0x2502; - t['SF190000'] = 0x2561; - t['SF200000'] = 0x2562; - t['SF210000'] = 0x2556; - t['SF220000'] = 0x2555; - t['SF230000'] = 0x2563; - t['SF240000'] = 0x2551; - t['SF250000'] = 0x2557; - t['SF260000'] = 0x255D; - t['SF270000'] = 0x255C; - t['SF280000'] = 0x255B; - t['SF360000'] = 0x255E; - t['SF370000'] = 0x255F; - t['SF380000'] = 0x255A; - t['SF390000'] = 0x2554; - t['SF400000'] = 0x2569; - t['SF410000'] = 0x2566; - t['SF420000'] = 0x2560; - t['SF430000'] = 0x2550; - t['SF440000'] = 0x256C; - t['SF450000'] = 0x2567; - t['SF460000'] = 0x2568; - t['SF470000'] = 0x2564; - t['SF480000'] = 0x2565; - t['SF490000'] = 0x2559; - t['SF500000'] = 0x2558; - t['SF510000'] = 0x2552; - t['SF520000'] = 0x2553; - t['SF530000'] = 0x256B; - t['SF540000'] = 0x256A; - t['Sacute'] = 0x015A; - t['Sacutedotaccent'] = 0x1E64; - t['Sampigreek'] = 0x03E0; - t['Scaron'] = 0x0160; - t['Scarondotaccent'] = 0x1E66; - t['Scaronsmall'] = 0xF6FD; - t['Scedilla'] = 0x015E; - t['Schwa'] = 0x018F; - t['Schwacyrillic'] = 0x04D8; - t['Schwadieresiscyrillic'] = 0x04DA; - t['Scircle'] = 0x24C8; - t['Scircumflex'] = 0x015C; - t['Scommaaccent'] = 0x0218; - t['Sdotaccent'] = 0x1E60; - t['Sdotbelow'] = 0x1E62; - t['Sdotbelowdotaccent'] = 0x1E68; - t['Seharmenian'] = 0x054D; - t['Sevenroman'] = 0x2166; - t['Shaarmenian'] = 0x0547; - t['Shacyrillic'] = 0x0428; - t['Shchacyrillic'] = 0x0429; - t['Sheicoptic'] = 0x03E2; - t['Shhacyrillic'] = 0x04BA; - t['Shimacoptic'] = 0x03EC; - t['Sigma'] = 0x03A3; - t['Sixroman'] = 0x2165; - t['Smonospace'] = 0xFF33; - t['Softsigncyrillic'] = 0x042C; - t['Ssmall'] = 0xF773; - t['Stigmagreek'] = 0x03DA; - t['T'] = 0x0054; - t['Tau'] = 0x03A4; - t['Tbar'] = 0x0166; - t['Tcaron'] = 0x0164; - t['Tcedilla'] = 0x0162; - t['Tcircle'] = 0x24C9; - t['Tcircumflexbelow'] = 0x1E70; - t['Tcommaaccent'] = 0x0162; - t['Tdotaccent'] = 0x1E6A; - t['Tdotbelow'] = 0x1E6C; - t['Tecyrillic'] = 0x0422; - t['Tedescendercyrillic'] = 0x04AC; - t['Tenroman'] = 0x2169; - t['Tetsecyrillic'] = 0x04B4; - t['Theta'] = 0x0398; - t['Thook'] = 0x01AC; - t['Thorn'] = 0x00DE; - t['Thornsmall'] = 0xF7FE; - t['Threeroman'] = 0x2162; - t['Tildesmall'] = 0xF6FE; - t['Tiwnarmenian'] = 0x054F; - t['Tlinebelow'] = 0x1E6E; - t['Tmonospace'] = 0xFF34; - t['Toarmenian'] = 0x0539; - t['Tonefive'] = 0x01BC; - t['Tonesix'] = 0x0184; - t['Tonetwo'] = 0x01A7; - t['Tretroflexhook'] = 0x01AE; - t['Tsecyrillic'] = 0x0426; - t['Tshecyrillic'] = 0x040B; - t['Tsmall'] = 0xF774; - t['Twelveroman'] = 0x216B; - t['Tworoman'] = 0x2161; - t['U'] = 0x0055; - t['Uacute'] = 0x00DA; - t['Uacutesmall'] = 0xF7FA; - t['Ubreve'] = 0x016C; - t['Ucaron'] = 0x01D3; - t['Ucircle'] = 0x24CA; - t['Ucircumflex'] = 0x00DB; - t['Ucircumflexbelow'] = 0x1E76; - t['Ucircumflexsmall'] = 0xF7FB; - t['Ucyrillic'] = 0x0423; - t['Udblacute'] = 0x0170; - t['Udblgrave'] = 0x0214; - t['Udieresis'] = 0x00DC; - t['Udieresisacute'] = 0x01D7; - t['Udieresisbelow'] = 0x1E72; - t['Udieresiscaron'] = 0x01D9; - t['Udieresiscyrillic'] = 0x04F0; - t['Udieresisgrave'] = 0x01DB; - t['Udieresismacron'] = 0x01D5; - t['Udieresissmall'] = 0xF7FC; - t['Udotbelow'] = 0x1EE4; - t['Ugrave'] = 0x00D9; - t['Ugravesmall'] = 0xF7F9; - t['Uhookabove'] = 0x1EE6; - t['Uhorn'] = 0x01AF; - t['Uhornacute'] = 0x1EE8; - t['Uhorndotbelow'] = 0x1EF0; - t['Uhorngrave'] = 0x1EEA; - t['Uhornhookabove'] = 0x1EEC; - t['Uhorntilde'] = 0x1EEE; - t['Uhungarumlaut'] = 0x0170; - t['Uhungarumlautcyrillic'] = 0x04F2; - t['Uinvertedbreve'] = 0x0216; - t['Ukcyrillic'] = 0x0478; - t['Umacron'] = 0x016A; - t['Umacroncyrillic'] = 0x04EE; - t['Umacrondieresis'] = 0x1E7A; - t['Umonospace'] = 0xFF35; - t['Uogonek'] = 0x0172; - t['Upsilon'] = 0x03A5; - t['Upsilon1'] = 0x03D2; - t['Upsilonacutehooksymbolgreek'] = 0x03D3; - t['Upsilonafrican'] = 0x01B1; - t['Upsilondieresis'] = 0x03AB; - t['Upsilondieresishooksymbolgreek'] = 0x03D4; - t['Upsilonhooksymbol'] = 0x03D2; - t['Upsilontonos'] = 0x038E; - t['Uring'] = 0x016E; - t['Ushortcyrillic'] = 0x040E; - t['Usmall'] = 0xF775; - t['Ustraightcyrillic'] = 0x04AE; - t['Ustraightstrokecyrillic'] = 0x04B0; - t['Utilde'] = 0x0168; - t['Utildeacute'] = 0x1E78; - t['Utildebelow'] = 0x1E74; - t['V'] = 0x0056; - t['Vcircle'] = 0x24CB; - t['Vdotbelow'] = 0x1E7E; - t['Vecyrillic'] = 0x0412; - t['Vewarmenian'] = 0x054E; - t['Vhook'] = 0x01B2; - t['Vmonospace'] = 0xFF36; - t['Voarmenian'] = 0x0548; - t['Vsmall'] = 0xF776; - t['Vtilde'] = 0x1E7C; - t['W'] = 0x0057; - t['Wacute'] = 0x1E82; - t['Wcircle'] = 0x24CC; - t['Wcircumflex'] = 0x0174; - t['Wdieresis'] = 0x1E84; - t['Wdotaccent'] = 0x1E86; - t['Wdotbelow'] = 0x1E88; - t['Wgrave'] = 0x1E80; - t['Wmonospace'] = 0xFF37; - t['Wsmall'] = 0xF777; - t['X'] = 0x0058; - t['Xcircle'] = 0x24CD; - t['Xdieresis'] = 0x1E8C; - t['Xdotaccent'] = 0x1E8A; - t['Xeharmenian'] = 0x053D; - t['Xi'] = 0x039E; - t['Xmonospace'] = 0xFF38; - t['Xsmall'] = 0xF778; - t['Y'] = 0x0059; - t['Yacute'] = 0x00DD; - t['Yacutesmall'] = 0xF7FD; - t['Yatcyrillic'] = 0x0462; - t['Ycircle'] = 0x24CE; - t['Ycircumflex'] = 0x0176; - t['Ydieresis'] = 0x0178; - t['Ydieresissmall'] = 0xF7FF; - t['Ydotaccent'] = 0x1E8E; - t['Ydotbelow'] = 0x1EF4; - t['Yericyrillic'] = 0x042B; - t['Yerudieresiscyrillic'] = 0x04F8; - t['Ygrave'] = 0x1EF2; - t['Yhook'] = 0x01B3; - t['Yhookabove'] = 0x1EF6; - t['Yiarmenian'] = 0x0545; - t['Yicyrillic'] = 0x0407; - t['Yiwnarmenian'] = 0x0552; - t['Ymonospace'] = 0xFF39; - t['Ysmall'] = 0xF779; - t['Ytilde'] = 0x1EF8; - t['Yusbigcyrillic'] = 0x046A; - t['Yusbigiotifiedcyrillic'] = 0x046C; - t['Yuslittlecyrillic'] = 0x0466; - t['Yuslittleiotifiedcyrillic'] = 0x0468; - t['Z'] = 0x005A; - t['Zaarmenian'] = 0x0536; - t['Zacute'] = 0x0179; - t['Zcaron'] = 0x017D; - t['Zcaronsmall'] = 0xF6FF; - t['Zcircle'] = 0x24CF; - t['Zcircumflex'] = 0x1E90; - t['Zdot'] = 0x017B; - t['Zdotaccent'] = 0x017B; - t['Zdotbelow'] = 0x1E92; - t['Zecyrillic'] = 0x0417; - t['Zedescendercyrillic'] = 0x0498; - t['Zedieresiscyrillic'] = 0x04DE; - t['Zeta'] = 0x0396; - t['Zhearmenian'] = 0x053A; - t['Zhebrevecyrillic'] = 0x04C1; - t['Zhecyrillic'] = 0x0416; - t['Zhedescendercyrillic'] = 0x0496; - t['Zhedieresiscyrillic'] = 0x04DC; - t['Zlinebelow'] = 0x1E94; - t['Zmonospace'] = 0xFF3A; - t['Zsmall'] = 0xF77A; - t['Zstroke'] = 0x01B5; - t['a'] = 0x0061; - t['aabengali'] = 0x0986; - t['aacute'] = 0x00E1; - t['aadeva'] = 0x0906; - t['aagujarati'] = 0x0A86; - t['aagurmukhi'] = 0x0A06; - t['aamatragurmukhi'] = 0x0A3E; - t['aarusquare'] = 0x3303; - t['aavowelsignbengali'] = 0x09BE; - t['aavowelsigndeva'] = 0x093E; - t['aavowelsigngujarati'] = 0x0ABE; - t['abbreviationmarkarmenian'] = 0x055F; - t['abbreviationsigndeva'] = 0x0970; - t['abengali'] = 0x0985; - t['abopomofo'] = 0x311A; - t['abreve'] = 0x0103; - t['abreveacute'] = 0x1EAF; - t['abrevecyrillic'] = 0x04D1; - t['abrevedotbelow'] = 0x1EB7; - t['abrevegrave'] = 0x1EB1; - t['abrevehookabove'] = 0x1EB3; - t['abrevetilde'] = 0x1EB5; - t['acaron'] = 0x01CE; - t['acircle'] = 0x24D0; - t['acircumflex'] = 0x00E2; - t['acircumflexacute'] = 0x1EA5; - t['acircumflexdotbelow'] = 0x1EAD; - t['acircumflexgrave'] = 0x1EA7; - t['acircumflexhookabove'] = 0x1EA9; - t['acircumflextilde'] = 0x1EAB; - t['acute'] = 0x00B4; - t['acutebelowcmb'] = 0x0317; - t['acutecmb'] = 0x0301; - t['acutecomb'] = 0x0301; - t['acutedeva'] = 0x0954; - t['acutelowmod'] = 0x02CF; - t['acutetonecmb'] = 0x0341; - t['acyrillic'] = 0x0430; - t['adblgrave'] = 0x0201; - t['addakgurmukhi'] = 0x0A71; - t['adeva'] = 0x0905; - t['adieresis'] = 0x00E4; - t['adieresiscyrillic'] = 0x04D3; - t['adieresismacron'] = 0x01DF; - t['adotbelow'] = 0x1EA1; - t['adotmacron'] = 0x01E1; - t['ae'] = 0x00E6; - t['aeacute'] = 0x01FD; - t['aekorean'] = 0x3150; - t['aemacron'] = 0x01E3; - t['afii00208'] = 0x2015; - t['afii08941'] = 0x20A4; - t['afii10017'] = 0x0410; - t['afii10018'] = 0x0411; - t['afii10019'] = 0x0412; - t['afii10020'] = 0x0413; - t['afii10021'] = 0x0414; - t['afii10022'] = 0x0415; - t['afii10023'] = 0x0401; - t['afii10024'] = 0x0416; - t['afii10025'] = 0x0417; - t['afii10026'] = 0x0418; - t['afii10027'] = 0x0419; - t['afii10028'] = 0x041A; - t['afii10029'] = 0x041B; - t['afii10030'] = 0x041C; - t['afii10031'] = 0x041D; - t['afii10032'] = 0x041E; - t['afii10033'] = 0x041F; - t['afii10034'] = 0x0420; - t['afii10035'] = 0x0421; - t['afii10036'] = 0x0422; - t['afii10037'] = 0x0423; - t['afii10038'] = 0x0424; - t['afii10039'] = 0x0425; - t['afii10040'] = 0x0426; - t['afii10041'] = 0x0427; - t['afii10042'] = 0x0428; - t['afii10043'] = 0x0429; - t['afii10044'] = 0x042A; - t['afii10045'] = 0x042B; - t['afii10046'] = 0x042C; - t['afii10047'] = 0x042D; - t['afii10048'] = 0x042E; - t['afii10049'] = 0x042F; - t['afii10050'] = 0x0490; - t['afii10051'] = 0x0402; - t['afii10052'] = 0x0403; - t['afii10053'] = 0x0404; - t['afii10054'] = 0x0405; - t['afii10055'] = 0x0406; - t['afii10056'] = 0x0407; - t['afii10057'] = 0x0408; - t['afii10058'] = 0x0409; - t['afii10059'] = 0x040A; - t['afii10060'] = 0x040B; - t['afii10061'] = 0x040C; - t['afii10062'] = 0x040E; - t['afii10063'] = 0xF6C4; - t['afii10064'] = 0xF6C5; - t['afii10065'] = 0x0430; - t['afii10066'] = 0x0431; - t['afii10067'] = 0x0432; - t['afii10068'] = 0x0433; - t['afii10069'] = 0x0434; - t['afii10070'] = 0x0435; - t['afii10071'] = 0x0451; - t['afii10072'] = 0x0436; - t['afii10073'] = 0x0437; - t['afii10074'] = 0x0438; - t['afii10075'] = 0x0439; - t['afii10076'] = 0x043A; - t['afii10077'] = 0x043B; - t['afii10078'] = 0x043C; - t['afii10079'] = 0x043D; - t['afii10080'] = 0x043E; - t['afii10081'] = 0x043F; - t['afii10082'] = 0x0440; - t['afii10083'] = 0x0441; - t['afii10084'] = 0x0442; - t['afii10085'] = 0x0443; - t['afii10086'] = 0x0444; - t['afii10087'] = 0x0445; - t['afii10088'] = 0x0446; - t['afii10089'] = 0x0447; - t['afii10090'] = 0x0448; - t['afii10091'] = 0x0449; - t['afii10092'] = 0x044A; - t['afii10093'] = 0x044B; - t['afii10094'] = 0x044C; - t['afii10095'] = 0x044D; - t['afii10096'] = 0x044E; - t['afii10097'] = 0x044F; - t['afii10098'] = 0x0491; - t['afii10099'] = 0x0452; - t['afii10100'] = 0x0453; - t['afii10101'] = 0x0454; - t['afii10102'] = 0x0455; - t['afii10103'] = 0x0456; - t['afii10104'] = 0x0457; - t['afii10105'] = 0x0458; - t['afii10106'] = 0x0459; - t['afii10107'] = 0x045A; - t['afii10108'] = 0x045B; - t['afii10109'] = 0x045C; - t['afii10110'] = 0x045E; - t['afii10145'] = 0x040F; - t['afii10146'] = 0x0462; - t['afii10147'] = 0x0472; - t['afii10148'] = 0x0474; - t['afii10192'] = 0xF6C6; - t['afii10193'] = 0x045F; - t['afii10194'] = 0x0463; - t['afii10195'] = 0x0473; - t['afii10196'] = 0x0475; - t['afii10831'] = 0xF6C7; - t['afii10832'] = 0xF6C8; - t['afii10846'] = 0x04D9; - t['afii299'] = 0x200E; - t['afii300'] = 0x200F; - t['afii301'] = 0x200D; - t['afii57381'] = 0x066A; - t['afii57388'] = 0x060C; - t['afii57392'] = 0x0660; - t['afii57393'] = 0x0661; - t['afii57394'] = 0x0662; - t['afii57395'] = 0x0663; - t['afii57396'] = 0x0664; - t['afii57397'] = 0x0665; - t['afii57398'] = 0x0666; - t['afii57399'] = 0x0667; - t['afii57400'] = 0x0668; - t['afii57401'] = 0x0669; - t['afii57403'] = 0x061B; - t['afii57407'] = 0x061F; - t['afii57409'] = 0x0621; - t['afii57410'] = 0x0622; - t['afii57411'] = 0x0623; - t['afii57412'] = 0x0624; - t['afii57413'] = 0x0625; - t['afii57414'] = 0x0626; - t['afii57415'] = 0x0627; - t['afii57416'] = 0x0628; - t['afii57417'] = 0x0629; - t['afii57418'] = 0x062A; - t['afii57419'] = 0x062B; - t['afii57420'] = 0x062C; - t['afii57421'] = 0x062D; - t['afii57422'] = 0x062E; - t['afii57423'] = 0x062F; - t['afii57424'] = 0x0630; - t['afii57425'] = 0x0631; - t['afii57426'] = 0x0632; - t['afii57427'] = 0x0633; - t['afii57428'] = 0x0634; - t['afii57429'] = 0x0635; - t['afii57430'] = 0x0636; - t['afii57431'] = 0x0637; - t['afii57432'] = 0x0638; - t['afii57433'] = 0x0639; - t['afii57434'] = 0x063A; - t['afii57440'] = 0x0640; - t['afii57441'] = 0x0641; - t['afii57442'] = 0x0642; - t['afii57443'] = 0x0643; - t['afii57444'] = 0x0644; - t['afii57445'] = 0x0645; - t['afii57446'] = 0x0646; - t['afii57448'] = 0x0648; - t['afii57449'] = 0x0649; - t['afii57450'] = 0x064A; - t['afii57451'] = 0x064B; - t['afii57452'] = 0x064C; - t['afii57453'] = 0x064D; - t['afii57454'] = 0x064E; - t['afii57455'] = 0x064F; - t['afii57456'] = 0x0650; - t['afii57457'] = 0x0651; - t['afii57458'] = 0x0652; - t['afii57470'] = 0x0647; - t['afii57505'] = 0x06A4; - t['afii57506'] = 0x067E; - t['afii57507'] = 0x0686; - t['afii57508'] = 0x0698; - t['afii57509'] = 0x06AF; - t['afii57511'] = 0x0679; - t['afii57512'] = 0x0688; - t['afii57513'] = 0x0691; - t['afii57514'] = 0x06BA; - t['afii57519'] = 0x06D2; - t['afii57534'] = 0x06D5; - t['afii57636'] = 0x20AA; - t['afii57645'] = 0x05BE; - t['afii57658'] = 0x05C3; - t['afii57664'] = 0x05D0; - t['afii57665'] = 0x05D1; - t['afii57666'] = 0x05D2; - t['afii57667'] = 0x05D3; - t['afii57668'] = 0x05D4; - t['afii57669'] = 0x05D5; - t['afii57670'] = 0x05D6; - t['afii57671'] = 0x05D7; - t['afii57672'] = 0x05D8; - t['afii57673'] = 0x05D9; - t['afii57674'] = 0x05DA; - t['afii57675'] = 0x05DB; - t['afii57676'] = 0x05DC; - t['afii57677'] = 0x05DD; - t['afii57678'] = 0x05DE; - t['afii57679'] = 0x05DF; - t['afii57680'] = 0x05E0; - t['afii57681'] = 0x05E1; - t['afii57682'] = 0x05E2; - t['afii57683'] = 0x05E3; - t['afii57684'] = 0x05E4; - t['afii57685'] = 0x05E5; - t['afii57686'] = 0x05E6; - t['afii57687'] = 0x05E7; - t['afii57688'] = 0x05E8; - t['afii57689'] = 0x05E9; - t['afii57690'] = 0x05EA; - t['afii57694'] = 0xFB2A; - t['afii57695'] = 0xFB2B; - t['afii57700'] = 0xFB4B; - t['afii57705'] = 0xFB1F; - t['afii57716'] = 0x05F0; - t['afii57717'] = 0x05F1; - t['afii57718'] = 0x05F2; - t['afii57723'] = 0xFB35; - t['afii57793'] = 0x05B4; - t['afii57794'] = 0x05B5; - t['afii57795'] = 0x05B6; - t['afii57796'] = 0x05BB; - t['afii57797'] = 0x05B8; - t['afii57798'] = 0x05B7; - t['afii57799'] = 0x05B0; - t['afii57800'] = 0x05B2; - t['afii57801'] = 0x05B1; - t['afii57802'] = 0x05B3; - t['afii57803'] = 0x05C2; - t['afii57804'] = 0x05C1; - t['afii57806'] = 0x05B9; - t['afii57807'] = 0x05BC; - t['afii57839'] = 0x05BD; - t['afii57841'] = 0x05BF; - t['afii57842'] = 0x05C0; - t['afii57929'] = 0x02BC; - t['afii61248'] = 0x2105; - t['afii61289'] = 0x2113; - t['afii61352'] = 0x2116; - t['afii61573'] = 0x202C; - t['afii61574'] = 0x202D; - t['afii61575'] = 0x202E; - t['afii61664'] = 0x200C; - t['afii63167'] = 0x066D; - t['afii64937'] = 0x02BD; - t['agrave'] = 0x00E0; - t['agujarati'] = 0x0A85; - t['agurmukhi'] = 0x0A05; - t['ahiragana'] = 0x3042; - t['ahookabove'] = 0x1EA3; - t['aibengali'] = 0x0990; - t['aibopomofo'] = 0x311E; - t['aideva'] = 0x0910; - t['aiecyrillic'] = 0x04D5; - t['aigujarati'] = 0x0A90; - t['aigurmukhi'] = 0x0A10; - t['aimatragurmukhi'] = 0x0A48; - t['ainarabic'] = 0x0639; - t['ainfinalarabic'] = 0xFECA; - t['aininitialarabic'] = 0xFECB; - t['ainmedialarabic'] = 0xFECC; - t['ainvertedbreve'] = 0x0203; - t['aivowelsignbengali'] = 0x09C8; - t['aivowelsigndeva'] = 0x0948; - t['aivowelsigngujarati'] = 0x0AC8; - t['akatakana'] = 0x30A2; - t['akatakanahalfwidth'] = 0xFF71; - t['akorean'] = 0x314F; - t['alef'] = 0x05D0; - t['alefarabic'] = 0x0627; - t['alefdageshhebrew'] = 0xFB30; - t['aleffinalarabic'] = 0xFE8E; - t['alefhamzaabovearabic'] = 0x0623; - t['alefhamzaabovefinalarabic'] = 0xFE84; - t['alefhamzabelowarabic'] = 0x0625; - t['alefhamzabelowfinalarabic'] = 0xFE88; - t['alefhebrew'] = 0x05D0; - t['aleflamedhebrew'] = 0xFB4F; - t['alefmaddaabovearabic'] = 0x0622; - t['alefmaddaabovefinalarabic'] = 0xFE82; - t['alefmaksuraarabic'] = 0x0649; - t['alefmaksurafinalarabic'] = 0xFEF0; - t['alefmaksurainitialarabic'] = 0xFEF3; - t['alefmaksuramedialarabic'] = 0xFEF4; - t['alefpatahhebrew'] = 0xFB2E; - t['alefqamatshebrew'] = 0xFB2F; - t['aleph'] = 0x2135; - t['allequal'] = 0x224C; - t['alpha'] = 0x03B1; - t['alphatonos'] = 0x03AC; - t['amacron'] = 0x0101; - t['amonospace'] = 0xFF41; - t['ampersand'] = 0x0026; - t['ampersandmonospace'] = 0xFF06; - t['ampersandsmall'] = 0xF726; - t['amsquare'] = 0x33C2; - t['anbopomofo'] = 0x3122; - t['angbopomofo'] = 0x3124; - t['angbracketleft'] = 0x3008; - t['angbracketright'] = 0x3009; - t['angkhankhuthai'] = 0x0E5A; - t['angle'] = 0x2220; - t['anglebracketleft'] = 0x3008; - t['anglebracketleftvertical'] = 0xFE3F; - t['anglebracketright'] = 0x3009; - t['anglebracketrightvertical'] = 0xFE40; - t['angleleft'] = 0x2329; - t['angleright'] = 0x232A; - t['angstrom'] = 0x212B; - t['anoteleia'] = 0x0387; - t['anudattadeva'] = 0x0952; - t['anusvarabengali'] = 0x0982; - t['anusvaradeva'] = 0x0902; - t['anusvaragujarati'] = 0x0A82; - t['aogonek'] = 0x0105; - t['apaatosquare'] = 0x3300; - t['aparen'] = 0x249C; - t['apostrophearmenian'] = 0x055A; - t['apostrophemod'] = 0x02BC; - t['apple'] = 0xF8FF; - t['approaches'] = 0x2250; - t['approxequal'] = 0x2248; - t['approxequalorimage'] = 0x2252; - t['approximatelyequal'] = 0x2245; - t['araeaekorean'] = 0x318E; - t['araeakorean'] = 0x318D; - t['arc'] = 0x2312; - t['arighthalfring'] = 0x1E9A; - t['aring'] = 0x00E5; - t['aringacute'] = 0x01FB; - t['aringbelow'] = 0x1E01; - t['arrowboth'] = 0x2194; - t['arrowdashdown'] = 0x21E3; - t['arrowdashleft'] = 0x21E0; - t['arrowdashright'] = 0x21E2; - t['arrowdashup'] = 0x21E1; - t['arrowdblboth'] = 0x21D4; - t['arrowdbldown'] = 0x21D3; - t['arrowdblleft'] = 0x21D0; - t['arrowdblright'] = 0x21D2; - t['arrowdblup'] = 0x21D1; - t['arrowdown'] = 0x2193; - t['arrowdownleft'] = 0x2199; - t['arrowdownright'] = 0x2198; - t['arrowdownwhite'] = 0x21E9; - t['arrowheaddownmod'] = 0x02C5; - t['arrowheadleftmod'] = 0x02C2; - t['arrowheadrightmod'] = 0x02C3; - t['arrowheadupmod'] = 0x02C4; - t['arrowhorizex'] = 0xF8E7; - t['arrowleft'] = 0x2190; - t['arrowleftdbl'] = 0x21D0; - t['arrowleftdblstroke'] = 0x21CD; - t['arrowleftoverright'] = 0x21C6; - t['arrowleftwhite'] = 0x21E6; - t['arrowright'] = 0x2192; - t['arrowrightdblstroke'] = 0x21CF; - t['arrowrightheavy'] = 0x279E; - t['arrowrightoverleft'] = 0x21C4; - t['arrowrightwhite'] = 0x21E8; - t['arrowtableft'] = 0x21E4; - t['arrowtabright'] = 0x21E5; - t['arrowup'] = 0x2191; - t['arrowupdn'] = 0x2195; - t['arrowupdnbse'] = 0x21A8; - t['arrowupdownbase'] = 0x21A8; - t['arrowupleft'] = 0x2196; - t['arrowupleftofdown'] = 0x21C5; - t['arrowupright'] = 0x2197; - t['arrowupwhite'] = 0x21E7; - t['arrowvertex'] = 0xF8E6; - t['asciicircum'] = 0x005E; - t['asciicircummonospace'] = 0xFF3E; - t['asciitilde'] = 0x007E; - t['asciitildemonospace'] = 0xFF5E; - t['ascript'] = 0x0251; - t['ascriptturned'] = 0x0252; - t['asmallhiragana'] = 0x3041; - t['asmallkatakana'] = 0x30A1; - t['asmallkatakanahalfwidth'] = 0xFF67; - t['asterisk'] = 0x002A; - t['asteriskaltonearabic'] = 0x066D; - t['asteriskarabic'] = 0x066D; - t['asteriskmath'] = 0x2217; - t['asteriskmonospace'] = 0xFF0A; - t['asterisksmall'] = 0xFE61; - t['asterism'] = 0x2042; - t['asuperior'] = 0xF6E9; - t['asymptoticallyequal'] = 0x2243; - t['at'] = 0x0040; - t['atilde'] = 0x00E3; - t['atmonospace'] = 0xFF20; - t['atsmall'] = 0xFE6B; - t['aturned'] = 0x0250; - t['aubengali'] = 0x0994; - t['aubopomofo'] = 0x3120; - t['audeva'] = 0x0914; - t['augujarati'] = 0x0A94; - t['augurmukhi'] = 0x0A14; - t['aulengthmarkbengali'] = 0x09D7; - t['aumatragurmukhi'] = 0x0A4C; - t['auvowelsignbengali'] = 0x09CC; - t['auvowelsigndeva'] = 0x094C; - t['auvowelsigngujarati'] = 0x0ACC; - t['avagrahadeva'] = 0x093D; - t['aybarmenian'] = 0x0561; - t['ayin'] = 0x05E2; - t['ayinaltonehebrew'] = 0xFB20; - t['ayinhebrew'] = 0x05E2; - t['b'] = 0x0062; - t['babengali'] = 0x09AC; - t['backslash'] = 0x005C; - t['backslashmonospace'] = 0xFF3C; - t['badeva'] = 0x092C; - t['bagujarati'] = 0x0AAC; - t['bagurmukhi'] = 0x0A2C; - t['bahiragana'] = 0x3070; - t['bahtthai'] = 0x0E3F; - t['bakatakana'] = 0x30D0; - t['bar'] = 0x007C; - t['barmonospace'] = 0xFF5C; - t['bbopomofo'] = 0x3105; - t['bcircle'] = 0x24D1; - t['bdotaccent'] = 0x1E03; - t['bdotbelow'] = 0x1E05; - t['beamedsixteenthnotes'] = 0x266C; - t['because'] = 0x2235; - t['becyrillic'] = 0x0431; - t['beharabic'] = 0x0628; - t['behfinalarabic'] = 0xFE90; - t['behinitialarabic'] = 0xFE91; - t['behiragana'] = 0x3079; - t['behmedialarabic'] = 0xFE92; - t['behmeeminitialarabic'] = 0xFC9F; - t['behmeemisolatedarabic'] = 0xFC08; - t['behnoonfinalarabic'] = 0xFC6D; - t['bekatakana'] = 0x30D9; - t['benarmenian'] = 0x0562; - t['bet'] = 0x05D1; - t['beta'] = 0x03B2; - t['betasymbolgreek'] = 0x03D0; - t['betdagesh'] = 0xFB31; - t['betdageshhebrew'] = 0xFB31; - t['bethebrew'] = 0x05D1; - t['betrafehebrew'] = 0xFB4C; - t['bhabengali'] = 0x09AD; - t['bhadeva'] = 0x092D; - t['bhagujarati'] = 0x0AAD; - t['bhagurmukhi'] = 0x0A2D; - t['bhook'] = 0x0253; - t['bihiragana'] = 0x3073; - t['bikatakana'] = 0x30D3; - t['bilabialclick'] = 0x0298; - t['bindigurmukhi'] = 0x0A02; - t['birusquare'] = 0x3331; - t['blackcircle'] = 0x25CF; - t['blackdiamond'] = 0x25C6; - t['blackdownpointingtriangle'] = 0x25BC; - t['blackleftpointingpointer'] = 0x25C4; - t['blackleftpointingtriangle'] = 0x25C0; - t['blacklenticularbracketleft'] = 0x3010; - t['blacklenticularbracketleftvertical'] = 0xFE3B; - t['blacklenticularbracketright'] = 0x3011; - t['blacklenticularbracketrightvertical'] = 0xFE3C; - t['blacklowerlefttriangle'] = 0x25E3; - t['blacklowerrighttriangle'] = 0x25E2; - t['blackrectangle'] = 0x25AC; - t['blackrightpointingpointer'] = 0x25BA; - t['blackrightpointingtriangle'] = 0x25B6; - t['blacksmallsquare'] = 0x25AA; - t['blacksmilingface'] = 0x263B; - t['blacksquare'] = 0x25A0; - t['blackstar'] = 0x2605; - t['blackupperlefttriangle'] = 0x25E4; - t['blackupperrighttriangle'] = 0x25E5; - t['blackuppointingsmalltriangle'] = 0x25B4; - t['blackuppointingtriangle'] = 0x25B2; - t['blank'] = 0x2423; - t['blinebelow'] = 0x1E07; - t['block'] = 0x2588; - t['bmonospace'] = 0xFF42; - t['bobaimaithai'] = 0x0E1A; - t['bohiragana'] = 0x307C; - t['bokatakana'] = 0x30DC; - t['bparen'] = 0x249D; - t['bqsquare'] = 0x33C3; - t['braceex'] = 0xF8F4; - t['braceleft'] = 0x007B; - t['braceleftbt'] = 0xF8F3; - t['braceleftmid'] = 0xF8F2; - t['braceleftmonospace'] = 0xFF5B; - t['braceleftsmall'] = 0xFE5B; - t['bracelefttp'] = 0xF8F1; - t['braceleftvertical'] = 0xFE37; - t['braceright'] = 0x007D; - t['bracerightbt'] = 0xF8FE; - t['bracerightmid'] = 0xF8FD; - t['bracerightmonospace'] = 0xFF5D; - t['bracerightsmall'] = 0xFE5C; - t['bracerighttp'] = 0xF8FC; - t['bracerightvertical'] = 0xFE38; - t['bracketleft'] = 0x005B; - t['bracketleftbt'] = 0xF8F0; - t['bracketleftex'] = 0xF8EF; - t['bracketleftmonospace'] = 0xFF3B; - t['bracketlefttp'] = 0xF8EE; - t['bracketright'] = 0x005D; - t['bracketrightbt'] = 0xF8FB; - t['bracketrightex'] = 0xF8FA; - t['bracketrightmonospace'] = 0xFF3D; - t['bracketrighttp'] = 0xF8F9; - t['breve'] = 0x02D8; - t['brevebelowcmb'] = 0x032E; - t['brevecmb'] = 0x0306; - t['breveinvertedbelowcmb'] = 0x032F; - t['breveinvertedcmb'] = 0x0311; - t['breveinverteddoublecmb'] = 0x0361; - t['bridgebelowcmb'] = 0x032A; - t['bridgeinvertedbelowcmb'] = 0x033A; - t['brokenbar'] = 0x00A6; - t['bstroke'] = 0x0180; - t['bsuperior'] = 0xF6EA; - t['btopbar'] = 0x0183; - t['buhiragana'] = 0x3076; - t['bukatakana'] = 0x30D6; - t['bullet'] = 0x2022; - t['bulletinverse'] = 0x25D8; - t['bulletoperator'] = 0x2219; - t['bullseye'] = 0x25CE; - t['c'] = 0x0063; - t['caarmenian'] = 0x056E; - t['cabengali'] = 0x099A; - t['cacute'] = 0x0107; - t['cadeva'] = 0x091A; - t['cagujarati'] = 0x0A9A; - t['cagurmukhi'] = 0x0A1A; - t['calsquare'] = 0x3388; - t['candrabindubengali'] = 0x0981; - t['candrabinducmb'] = 0x0310; - t['candrabindudeva'] = 0x0901; - t['candrabindugujarati'] = 0x0A81; - t['capslock'] = 0x21EA; - t['careof'] = 0x2105; - t['caron'] = 0x02C7; - t['caronbelowcmb'] = 0x032C; - t['caroncmb'] = 0x030C; - t['carriagereturn'] = 0x21B5; - t['cbopomofo'] = 0x3118; - t['ccaron'] = 0x010D; - t['ccedilla'] = 0x00E7; - t['ccedillaacute'] = 0x1E09; - t['ccircle'] = 0x24D2; - t['ccircumflex'] = 0x0109; - t['ccurl'] = 0x0255; - t['cdot'] = 0x010B; - t['cdotaccent'] = 0x010B; - t['cdsquare'] = 0x33C5; - t['cedilla'] = 0x00B8; - t['cedillacmb'] = 0x0327; - t['cent'] = 0x00A2; - t['centigrade'] = 0x2103; - t['centinferior'] = 0xF6DF; - t['centmonospace'] = 0xFFE0; - t['centoldstyle'] = 0xF7A2; - t['centsuperior'] = 0xF6E0; - t['chaarmenian'] = 0x0579; - t['chabengali'] = 0x099B; - t['chadeva'] = 0x091B; - t['chagujarati'] = 0x0A9B; - t['chagurmukhi'] = 0x0A1B; - t['chbopomofo'] = 0x3114; - t['cheabkhasiancyrillic'] = 0x04BD; - t['checkmark'] = 0x2713; - t['checyrillic'] = 0x0447; - t['chedescenderabkhasiancyrillic'] = 0x04BF; - t['chedescendercyrillic'] = 0x04B7; - t['chedieresiscyrillic'] = 0x04F5; - t['cheharmenian'] = 0x0573; - t['chekhakassiancyrillic'] = 0x04CC; - t['cheverticalstrokecyrillic'] = 0x04B9; - t['chi'] = 0x03C7; - t['chieuchacirclekorean'] = 0x3277; - t['chieuchaparenkorean'] = 0x3217; - t['chieuchcirclekorean'] = 0x3269; - t['chieuchkorean'] = 0x314A; - t['chieuchparenkorean'] = 0x3209; - t['chochangthai'] = 0x0E0A; - t['chochanthai'] = 0x0E08; - t['chochingthai'] = 0x0E09; - t['chochoethai'] = 0x0E0C; - t['chook'] = 0x0188; - t['cieucacirclekorean'] = 0x3276; - t['cieucaparenkorean'] = 0x3216; - t['cieuccirclekorean'] = 0x3268; - t['cieuckorean'] = 0x3148; - t['cieucparenkorean'] = 0x3208; - t['cieucuparenkorean'] = 0x321C; - t['circle'] = 0x25CB; - t['circlecopyrt'] = 0x00A9; - t['circlemultiply'] = 0x2297; - t['circleot'] = 0x2299; - t['circleplus'] = 0x2295; - t['circlepostalmark'] = 0x3036; - t['circlewithlefthalfblack'] = 0x25D0; - t['circlewithrighthalfblack'] = 0x25D1; - t['circumflex'] = 0x02C6; - t['circumflexbelowcmb'] = 0x032D; - t['circumflexcmb'] = 0x0302; - t['clear'] = 0x2327; - t['clickalveolar'] = 0x01C2; - t['clickdental'] = 0x01C0; - t['clicklateral'] = 0x01C1; - t['clickretroflex'] = 0x01C3; - t['club'] = 0x2663; - t['clubsuitblack'] = 0x2663; - t['clubsuitwhite'] = 0x2667; - t['cmcubedsquare'] = 0x33A4; - t['cmonospace'] = 0xFF43; - t['cmsquaredsquare'] = 0x33A0; - t['coarmenian'] = 0x0581; - t['colon'] = 0x003A; - t['colonmonetary'] = 0x20A1; - t['colonmonospace'] = 0xFF1A; - t['colonsign'] = 0x20A1; - t['colonsmall'] = 0xFE55; - t['colontriangularhalfmod'] = 0x02D1; - t['colontriangularmod'] = 0x02D0; - t['comma'] = 0x002C; - t['commaabovecmb'] = 0x0313; - t['commaaboverightcmb'] = 0x0315; - t['commaaccent'] = 0xF6C3; - t['commaarabic'] = 0x060C; - t['commaarmenian'] = 0x055D; - t['commainferior'] = 0xF6E1; - t['commamonospace'] = 0xFF0C; - t['commareversedabovecmb'] = 0x0314; - t['commareversedmod'] = 0x02BD; - t['commasmall'] = 0xFE50; - t['commasuperior'] = 0xF6E2; - t['commaturnedabovecmb'] = 0x0312; - t['commaturnedmod'] = 0x02BB; - t['compass'] = 0x263C; - t['congruent'] = 0x2245; - t['contourintegral'] = 0x222E; - t['control'] = 0x2303; - t['controlACK'] = 0x0006; - t['controlBEL'] = 0x0007; - t['controlBS'] = 0x0008; - t['controlCAN'] = 0x0018; - t['controlCR'] = 0x000D; - t['controlDC1'] = 0x0011; - t['controlDC2'] = 0x0012; - t['controlDC3'] = 0x0013; - t['controlDC4'] = 0x0014; - t['controlDEL'] = 0x007F; - t['controlDLE'] = 0x0010; - t['controlEM'] = 0x0019; - t['controlENQ'] = 0x0005; - t['controlEOT'] = 0x0004; - t['controlESC'] = 0x001B; - t['controlETB'] = 0x0017; - t['controlETX'] = 0x0003; - t['controlFF'] = 0x000C; - t['controlFS'] = 0x001C; - t['controlGS'] = 0x001D; - t['controlHT'] = 0x0009; - t['controlLF'] = 0x000A; - t['controlNAK'] = 0x0015; - t['controlNULL'] = 0x0000; - t['controlRS'] = 0x001E; - t['controlSI'] = 0x000F; - t['controlSO'] = 0x000E; - t['controlSOT'] = 0x0002; - t['controlSTX'] = 0x0001; - t['controlSUB'] = 0x001A; - t['controlSYN'] = 0x0016; - t['controlUS'] = 0x001F; - t['controlVT'] = 0x000B; - t['copyright'] = 0x00A9; - t['copyrightsans'] = 0xF8E9; - t['copyrightserif'] = 0xF6D9; - t['cornerbracketleft'] = 0x300C; - t['cornerbracketlefthalfwidth'] = 0xFF62; - t['cornerbracketleftvertical'] = 0xFE41; - t['cornerbracketright'] = 0x300D; - t['cornerbracketrighthalfwidth'] = 0xFF63; - t['cornerbracketrightvertical'] = 0xFE42; - t['corporationsquare'] = 0x337F; - t['cosquare'] = 0x33C7; - t['coverkgsquare'] = 0x33C6; - t['cparen'] = 0x249E; - t['cruzeiro'] = 0x20A2; - t['cstretched'] = 0x0297; - t['curlyand'] = 0x22CF; - t['curlyor'] = 0x22CE; - t['currency'] = 0x00A4; - t['cyrBreve'] = 0xF6D1; - t['cyrFlex'] = 0xF6D2; - t['cyrbreve'] = 0xF6D4; - t['cyrflex'] = 0xF6D5; - t['d'] = 0x0064; - t['daarmenian'] = 0x0564; - t['dabengali'] = 0x09A6; - t['dadarabic'] = 0x0636; - t['dadeva'] = 0x0926; - t['dadfinalarabic'] = 0xFEBE; - t['dadinitialarabic'] = 0xFEBF; - t['dadmedialarabic'] = 0xFEC0; - t['dagesh'] = 0x05BC; - t['dageshhebrew'] = 0x05BC; - t['dagger'] = 0x2020; - t['daggerdbl'] = 0x2021; - t['dagujarati'] = 0x0AA6; - t['dagurmukhi'] = 0x0A26; - t['dahiragana'] = 0x3060; - t['dakatakana'] = 0x30C0; - t['dalarabic'] = 0x062F; - t['dalet'] = 0x05D3; - t['daletdagesh'] = 0xFB33; - t['daletdageshhebrew'] = 0xFB33; - t['dalethebrew'] = 0x05D3; - t['dalfinalarabic'] = 0xFEAA; - t['dammaarabic'] = 0x064F; - t['dammalowarabic'] = 0x064F; - t['dammatanaltonearabic'] = 0x064C; - t['dammatanarabic'] = 0x064C; - t['danda'] = 0x0964; - t['dargahebrew'] = 0x05A7; - t['dargalefthebrew'] = 0x05A7; - t['dasiapneumatacyrilliccmb'] = 0x0485; - t['dblGrave'] = 0xF6D3; - t['dblanglebracketleft'] = 0x300A; - t['dblanglebracketleftvertical'] = 0xFE3D; - t['dblanglebracketright'] = 0x300B; - t['dblanglebracketrightvertical'] = 0xFE3E; - t['dblarchinvertedbelowcmb'] = 0x032B; - t['dblarrowleft'] = 0x21D4; - t['dblarrowright'] = 0x21D2; - t['dbldanda'] = 0x0965; - t['dblgrave'] = 0xF6D6; - t['dblgravecmb'] = 0x030F; - t['dblintegral'] = 0x222C; - t['dbllowline'] = 0x2017; - t['dbllowlinecmb'] = 0x0333; - t['dbloverlinecmb'] = 0x033F; - t['dblprimemod'] = 0x02BA; - t['dblverticalbar'] = 0x2016; - t['dblverticallineabovecmb'] = 0x030E; - t['dbopomofo'] = 0x3109; - t['dbsquare'] = 0x33C8; - t['dcaron'] = 0x010F; - t['dcedilla'] = 0x1E11; - t['dcircle'] = 0x24D3; - t['dcircumflexbelow'] = 0x1E13; - t['dcroat'] = 0x0111; - t['ddabengali'] = 0x09A1; - t['ddadeva'] = 0x0921; - t['ddagujarati'] = 0x0AA1; - t['ddagurmukhi'] = 0x0A21; - t['ddalarabic'] = 0x0688; - t['ddalfinalarabic'] = 0xFB89; - t['dddhadeva'] = 0x095C; - t['ddhabengali'] = 0x09A2; - t['ddhadeva'] = 0x0922; - t['ddhagujarati'] = 0x0AA2; - t['ddhagurmukhi'] = 0x0A22; - t['ddotaccent'] = 0x1E0B; - t['ddotbelow'] = 0x1E0D; - t['decimalseparatorarabic'] = 0x066B; - t['decimalseparatorpersian'] = 0x066B; - t['decyrillic'] = 0x0434; - t['degree'] = 0x00B0; - t['dehihebrew'] = 0x05AD; - t['dehiragana'] = 0x3067; - t['deicoptic'] = 0x03EF; - t['dekatakana'] = 0x30C7; - t['deleteleft'] = 0x232B; - t['deleteright'] = 0x2326; - t['delta'] = 0x03B4; - t['deltaturned'] = 0x018D; - t['denominatorminusonenumeratorbengali'] = 0x09F8; - t['dezh'] = 0x02A4; - t['dhabengali'] = 0x09A7; - t['dhadeva'] = 0x0927; - t['dhagujarati'] = 0x0AA7; - t['dhagurmukhi'] = 0x0A27; - t['dhook'] = 0x0257; - t['dialytikatonos'] = 0x0385; - t['dialytikatonoscmb'] = 0x0344; - t['diamond'] = 0x2666; - t['diamondsuitwhite'] = 0x2662; - t['dieresis'] = 0x00A8; - t['dieresisacute'] = 0xF6D7; - t['dieresisbelowcmb'] = 0x0324; - t['dieresiscmb'] = 0x0308; - t['dieresisgrave'] = 0xF6D8; - t['dieresistonos'] = 0x0385; - t['dihiragana'] = 0x3062; - t['dikatakana'] = 0x30C2; - t['dittomark'] = 0x3003; - t['divide'] = 0x00F7; - t['divides'] = 0x2223; - t['divisionslash'] = 0x2215; - t['djecyrillic'] = 0x0452; - t['dkshade'] = 0x2593; - t['dlinebelow'] = 0x1E0F; - t['dlsquare'] = 0x3397; - t['dmacron'] = 0x0111; - t['dmonospace'] = 0xFF44; - t['dnblock'] = 0x2584; - t['dochadathai'] = 0x0E0E; - t['dodekthai'] = 0x0E14; - t['dohiragana'] = 0x3069; - t['dokatakana'] = 0x30C9; - t['dollar'] = 0x0024; - t['dollarinferior'] = 0xF6E3; - t['dollarmonospace'] = 0xFF04; - t['dollaroldstyle'] = 0xF724; - t['dollarsmall'] = 0xFE69; - t['dollarsuperior'] = 0xF6E4; - t['dong'] = 0x20AB; - t['dorusquare'] = 0x3326; - t['dotaccent'] = 0x02D9; - t['dotaccentcmb'] = 0x0307; - t['dotbelowcmb'] = 0x0323; - t['dotbelowcomb'] = 0x0323; - t['dotkatakana'] = 0x30FB; - t['dotlessi'] = 0x0131; - t['dotlessj'] = 0xF6BE; - t['dotlessjstrokehook'] = 0x0284; - t['dotmath'] = 0x22C5; - t['dottedcircle'] = 0x25CC; - t['doubleyodpatah'] = 0xFB1F; - t['doubleyodpatahhebrew'] = 0xFB1F; - t['downtackbelowcmb'] = 0x031E; - t['downtackmod'] = 0x02D5; - t['dparen'] = 0x249F; - t['dsuperior'] = 0xF6EB; - t['dtail'] = 0x0256; - t['dtopbar'] = 0x018C; - t['duhiragana'] = 0x3065; - t['dukatakana'] = 0x30C5; - t['dz'] = 0x01F3; - t['dzaltone'] = 0x02A3; - t['dzcaron'] = 0x01C6; - t['dzcurl'] = 0x02A5; - t['dzeabkhasiancyrillic'] = 0x04E1; - t['dzecyrillic'] = 0x0455; - t['dzhecyrillic'] = 0x045F; - t['e'] = 0x0065; - t['eacute'] = 0x00E9; - t['earth'] = 0x2641; - t['ebengali'] = 0x098F; - t['ebopomofo'] = 0x311C; - t['ebreve'] = 0x0115; - t['ecandradeva'] = 0x090D; - t['ecandragujarati'] = 0x0A8D; - t['ecandravowelsigndeva'] = 0x0945; - t['ecandravowelsigngujarati'] = 0x0AC5; - t['ecaron'] = 0x011B; - t['ecedillabreve'] = 0x1E1D; - t['echarmenian'] = 0x0565; - t['echyiwnarmenian'] = 0x0587; - t['ecircle'] = 0x24D4; - t['ecircumflex'] = 0x00EA; - t['ecircumflexacute'] = 0x1EBF; - t['ecircumflexbelow'] = 0x1E19; - t['ecircumflexdotbelow'] = 0x1EC7; - t['ecircumflexgrave'] = 0x1EC1; - t['ecircumflexhookabove'] = 0x1EC3; - t['ecircumflextilde'] = 0x1EC5; - t['ecyrillic'] = 0x0454; - t['edblgrave'] = 0x0205; - t['edeva'] = 0x090F; - t['edieresis'] = 0x00EB; - t['edot'] = 0x0117; - t['edotaccent'] = 0x0117; - t['edotbelow'] = 0x1EB9; - t['eegurmukhi'] = 0x0A0F; - t['eematragurmukhi'] = 0x0A47; - t['efcyrillic'] = 0x0444; - t['egrave'] = 0x00E8; - t['egujarati'] = 0x0A8F; - t['eharmenian'] = 0x0567; - t['ehbopomofo'] = 0x311D; - t['ehiragana'] = 0x3048; - t['ehookabove'] = 0x1EBB; - t['eibopomofo'] = 0x311F; - t['eight'] = 0x0038; - t['eightarabic'] = 0x0668; - t['eightbengali'] = 0x09EE; - t['eightcircle'] = 0x2467; - t['eightcircleinversesansserif'] = 0x2791; - t['eightdeva'] = 0x096E; - t['eighteencircle'] = 0x2471; - t['eighteenparen'] = 0x2485; - t['eighteenperiod'] = 0x2499; - t['eightgujarati'] = 0x0AEE; - t['eightgurmukhi'] = 0x0A6E; - t['eighthackarabic'] = 0x0668; - t['eighthangzhou'] = 0x3028; - t['eighthnotebeamed'] = 0x266B; - t['eightideographicparen'] = 0x3227; - t['eightinferior'] = 0x2088; - t['eightmonospace'] = 0xFF18; - t['eightoldstyle'] = 0xF738; - t['eightparen'] = 0x247B; - t['eightperiod'] = 0x248F; - t['eightpersian'] = 0x06F8; - t['eightroman'] = 0x2177; - t['eightsuperior'] = 0x2078; - t['eightthai'] = 0x0E58; - t['einvertedbreve'] = 0x0207; - t['eiotifiedcyrillic'] = 0x0465; - t['ekatakana'] = 0x30A8; - t['ekatakanahalfwidth'] = 0xFF74; - t['ekonkargurmukhi'] = 0x0A74; - t['ekorean'] = 0x3154; - t['elcyrillic'] = 0x043B; - t['element'] = 0x2208; - t['elevencircle'] = 0x246A; - t['elevenparen'] = 0x247E; - t['elevenperiod'] = 0x2492; - t['elevenroman'] = 0x217A; - t['ellipsis'] = 0x2026; - t['ellipsisvertical'] = 0x22EE; - t['emacron'] = 0x0113; - t['emacronacute'] = 0x1E17; - t['emacrongrave'] = 0x1E15; - t['emcyrillic'] = 0x043C; - t['emdash'] = 0x2014; - t['emdashvertical'] = 0xFE31; - t['emonospace'] = 0xFF45; - t['emphasismarkarmenian'] = 0x055B; - t['emptyset'] = 0x2205; - t['enbopomofo'] = 0x3123; - t['encyrillic'] = 0x043D; - t['endash'] = 0x2013; - t['endashvertical'] = 0xFE32; - t['endescendercyrillic'] = 0x04A3; - t['eng'] = 0x014B; - t['engbopomofo'] = 0x3125; - t['enghecyrillic'] = 0x04A5; - t['enhookcyrillic'] = 0x04C8; - t['enspace'] = 0x2002; - t['eogonek'] = 0x0119; - t['eokorean'] = 0x3153; - t['eopen'] = 0x025B; - t['eopenclosed'] = 0x029A; - t['eopenreversed'] = 0x025C; - t['eopenreversedclosed'] = 0x025E; - t['eopenreversedhook'] = 0x025D; - t['eparen'] = 0x24A0; - t['epsilon'] = 0x03B5; - t['epsilontonos'] = 0x03AD; - t['equal'] = 0x003D; - t['equalmonospace'] = 0xFF1D; - t['equalsmall'] = 0xFE66; - t['equalsuperior'] = 0x207C; - t['equivalence'] = 0x2261; - t['erbopomofo'] = 0x3126; - t['ercyrillic'] = 0x0440; - t['ereversed'] = 0x0258; - t['ereversedcyrillic'] = 0x044D; - t['escyrillic'] = 0x0441; - t['esdescendercyrillic'] = 0x04AB; - t['esh'] = 0x0283; - t['eshcurl'] = 0x0286; - t['eshortdeva'] = 0x090E; - t['eshortvowelsigndeva'] = 0x0946; - t['eshreversedloop'] = 0x01AA; - t['eshsquatreversed'] = 0x0285; - t['esmallhiragana'] = 0x3047; - t['esmallkatakana'] = 0x30A7; - t['esmallkatakanahalfwidth'] = 0xFF6A; - t['estimated'] = 0x212E; - t['esuperior'] = 0xF6EC; - t['eta'] = 0x03B7; - t['etarmenian'] = 0x0568; - t['etatonos'] = 0x03AE; - t['eth'] = 0x00F0; - t['etilde'] = 0x1EBD; - t['etildebelow'] = 0x1E1B; - t['etnahtafoukhhebrew'] = 0x0591; - t['etnahtafoukhlefthebrew'] = 0x0591; - t['etnahtahebrew'] = 0x0591; - t['etnahtalefthebrew'] = 0x0591; - t['eturned'] = 0x01DD; - t['eukorean'] = 0x3161; - t['euro'] = 0x20AC; - t['evowelsignbengali'] = 0x09C7; - t['evowelsigndeva'] = 0x0947; - t['evowelsigngujarati'] = 0x0AC7; - t['exclam'] = 0x0021; - t['exclamarmenian'] = 0x055C; - t['exclamdbl'] = 0x203C; - t['exclamdown'] = 0x00A1; - t['exclamdownsmall'] = 0xF7A1; - t['exclammonospace'] = 0xFF01; - t['exclamsmall'] = 0xF721; - t['existential'] = 0x2203; - t['ezh'] = 0x0292; - t['ezhcaron'] = 0x01EF; - t['ezhcurl'] = 0x0293; - t['ezhreversed'] = 0x01B9; - t['ezhtail'] = 0x01BA; - t['f'] = 0x0066; - t['fadeva'] = 0x095E; - t['fagurmukhi'] = 0x0A5E; - t['fahrenheit'] = 0x2109; - t['fathaarabic'] = 0x064E; - t['fathalowarabic'] = 0x064E; - t['fathatanarabic'] = 0x064B; - t['fbopomofo'] = 0x3108; - t['fcircle'] = 0x24D5; - t['fdotaccent'] = 0x1E1F; - t['feharabic'] = 0x0641; - t['feharmenian'] = 0x0586; - t['fehfinalarabic'] = 0xFED2; - t['fehinitialarabic'] = 0xFED3; - t['fehmedialarabic'] = 0xFED4; - t['feicoptic'] = 0x03E5; - t['female'] = 0x2640; - t['ff'] = 0xFB00; - t['ffi'] = 0xFB03; - t['ffl'] = 0xFB04; - t['fi'] = 0xFB01; - t['fifteencircle'] = 0x246E; - t['fifteenparen'] = 0x2482; - t['fifteenperiod'] = 0x2496; - t['figuredash'] = 0x2012; - t['filledbox'] = 0x25A0; - t['filledrect'] = 0x25AC; - t['finalkaf'] = 0x05DA; - t['finalkafdagesh'] = 0xFB3A; - t['finalkafdageshhebrew'] = 0xFB3A; - t['finalkafhebrew'] = 0x05DA; - t['finalmem'] = 0x05DD; - t['finalmemhebrew'] = 0x05DD; - t['finalnun'] = 0x05DF; - t['finalnunhebrew'] = 0x05DF; - t['finalpe'] = 0x05E3; - t['finalpehebrew'] = 0x05E3; - t['finaltsadi'] = 0x05E5; - t['finaltsadihebrew'] = 0x05E5; - t['firsttonechinese'] = 0x02C9; - t['fisheye'] = 0x25C9; - t['fitacyrillic'] = 0x0473; - t['five'] = 0x0035; - t['fivearabic'] = 0x0665; - t['fivebengali'] = 0x09EB; - t['fivecircle'] = 0x2464; - t['fivecircleinversesansserif'] = 0x278E; - t['fivedeva'] = 0x096B; - t['fiveeighths'] = 0x215D; - t['fivegujarati'] = 0x0AEB; - t['fivegurmukhi'] = 0x0A6B; - t['fivehackarabic'] = 0x0665; - t['fivehangzhou'] = 0x3025; - t['fiveideographicparen'] = 0x3224; - t['fiveinferior'] = 0x2085; - t['fivemonospace'] = 0xFF15; - t['fiveoldstyle'] = 0xF735; - t['fiveparen'] = 0x2478; - t['fiveperiod'] = 0x248C; - t['fivepersian'] = 0x06F5; - t['fiveroman'] = 0x2174; - t['fivesuperior'] = 0x2075; - t['fivethai'] = 0x0E55; - t['fl'] = 0xFB02; - t['florin'] = 0x0192; - t['fmonospace'] = 0xFF46; - t['fmsquare'] = 0x3399; - t['fofanthai'] = 0x0E1F; - t['fofathai'] = 0x0E1D; - t['fongmanthai'] = 0x0E4F; - t['forall'] = 0x2200; - t['four'] = 0x0034; - t['fourarabic'] = 0x0664; - t['fourbengali'] = 0x09EA; - t['fourcircle'] = 0x2463; - t['fourcircleinversesansserif'] = 0x278D; - t['fourdeva'] = 0x096A; - t['fourgujarati'] = 0x0AEA; - t['fourgurmukhi'] = 0x0A6A; - t['fourhackarabic'] = 0x0664; - t['fourhangzhou'] = 0x3024; - t['fourideographicparen'] = 0x3223; - t['fourinferior'] = 0x2084; - t['fourmonospace'] = 0xFF14; - t['fournumeratorbengali'] = 0x09F7; - t['fouroldstyle'] = 0xF734; - t['fourparen'] = 0x2477; - t['fourperiod'] = 0x248B; - t['fourpersian'] = 0x06F4; - t['fourroman'] = 0x2173; - t['foursuperior'] = 0x2074; - t['fourteencircle'] = 0x246D; - t['fourteenparen'] = 0x2481; - t['fourteenperiod'] = 0x2495; - t['fourthai'] = 0x0E54; - t['fourthtonechinese'] = 0x02CB; - t['fparen'] = 0x24A1; - t['fraction'] = 0x2044; - t['franc'] = 0x20A3; - t['g'] = 0x0067; - t['gabengali'] = 0x0997; - t['gacute'] = 0x01F5; - t['gadeva'] = 0x0917; - t['gafarabic'] = 0x06AF; - t['gaffinalarabic'] = 0xFB93; - t['gafinitialarabic'] = 0xFB94; - t['gafmedialarabic'] = 0xFB95; - t['gagujarati'] = 0x0A97; - t['gagurmukhi'] = 0x0A17; - t['gahiragana'] = 0x304C; - t['gakatakana'] = 0x30AC; - t['gamma'] = 0x03B3; - t['gammalatinsmall'] = 0x0263; - t['gammasuperior'] = 0x02E0; - t['gangiacoptic'] = 0x03EB; - t['gbopomofo'] = 0x310D; - t['gbreve'] = 0x011F; - t['gcaron'] = 0x01E7; - t['gcedilla'] = 0x0123; - t['gcircle'] = 0x24D6; - t['gcircumflex'] = 0x011D; - t['gcommaaccent'] = 0x0123; - t['gdot'] = 0x0121; - t['gdotaccent'] = 0x0121; - t['gecyrillic'] = 0x0433; - t['gehiragana'] = 0x3052; - t['gekatakana'] = 0x30B2; - t['geometricallyequal'] = 0x2251; - t['gereshaccenthebrew'] = 0x059C; - t['gereshhebrew'] = 0x05F3; - t['gereshmuqdamhebrew'] = 0x059D; - t['germandbls'] = 0x00DF; - t['gershayimaccenthebrew'] = 0x059E; - t['gershayimhebrew'] = 0x05F4; - t['getamark'] = 0x3013; - t['ghabengali'] = 0x0998; - t['ghadarmenian'] = 0x0572; - t['ghadeva'] = 0x0918; - t['ghagujarati'] = 0x0A98; - t['ghagurmukhi'] = 0x0A18; - t['ghainarabic'] = 0x063A; - t['ghainfinalarabic'] = 0xFECE; - t['ghaininitialarabic'] = 0xFECF; - t['ghainmedialarabic'] = 0xFED0; - t['ghemiddlehookcyrillic'] = 0x0495; - t['ghestrokecyrillic'] = 0x0493; - t['gheupturncyrillic'] = 0x0491; - t['ghhadeva'] = 0x095A; - t['ghhagurmukhi'] = 0x0A5A; - t['ghook'] = 0x0260; - t['ghzsquare'] = 0x3393; - t['gihiragana'] = 0x304E; - t['gikatakana'] = 0x30AE; - t['gimarmenian'] = 0x0563; - t['gimel'] = 0x05D2; - t['gimeldagesh'] = 0xFB32; - t['gimeldageshhebrew'] = 0xFB32; - t['gimelhebrew'] = 0x05D2; - t['gjecyrillic'] = 0x0453; - t['glottalinvertedstroke'] = 0x01BE; - t['glottalstop'] = 0x0294; - t['glottalstopinverted'] = 0x0296; - t['glottalstopmod'] = 0x02C0; - t['glottalstopreversed'] = 0x0295; - t['glottalstopreversedmod'] = 0x02C1; - t['glottalstopreversedsuperior'] = 0x02E4; - t['glottalstopstroke'] = 0x02A1; - t['glottalstopstrokereversed'] = 0x02A2; - t['gmacron'] = 0x1E21; - t['gmonospace'] = 0xFF47; - t['gohiragana'] = 0x3054; - t['gokatakana'] = 0x30B4; - t['gparen'] = 0x24A2; - t['gpasquare'] = 0x33AC; - t['gradient'] = 0x2207; - t['grave'] = 0x0060; - t['gravebelowcmb'] = 0x0316; - t['gravecmb'] = 0x0300; - t['gravecomb'] = 0x0300; - t['gravedeva'] = 0x0953; - t['gravelowmod'] = 0x02CE; - t['gravemonospace'] = 0xFF40; - t['gravetonecmb'] = 0x0340; - t['greater'] = 0x003E; - t['greaterequal'] = 0x2265; - t['greaterequalorless'] = 0x22DB; - t['greatermonospace'] = 0xFF1E; - t['greaterorequivalent'] = 0x2273; - t['greaterorless'] = 0x2277; - t['greateroverequal'] = 0x2267; - t['greatersmall'] = 0xFE65; - t['gscript'] = 0x0261; - t['gstroke'] = 0x01E5; - t['guhiragana'] = 0x3050; - t['guillemotleft'] = 0x00AB; - t['guillemotright'] = 0x00BB; - t['guilsinglleft'] = 0x2039; - t['guilsinglright'] = 0x203A; - t['gukatakana'] = 0x30B0; - t['guramusquare'] = 0x3318; - t['gysquare'] = 0x33C9; - t['h'] = 0x0068; - t['haabkhasiancyrillic'] = 0x04A9; - t['haaltonearabic'] = 0x06C1; - t['habengali'] = 0x09B9; - t['hadescendercyrillic'] = 0x04B3; - t['hadeva'] = 0x0939; - t['hagujarati'] = 0x0AB9; - t['hagurmukhi'] = 0x0A39; - t['haharabic'] = 0x062D; - t['hahfinalarabic'] = 0xFEA2; - t['hahinitialarabic'] = 0xFEA3; - t['hahiragana'] = 0x306F; - t['hahmedialarabic'] = 0xFEA4; - t['haitusquare'] = 0x332A; - t['hakatakana'] = 0x30CF; - t['hakatakanahalfwidth'] = 0xFF8A; - t['halantgurmukhi'] = 0x0A4D; - t['hamzaarabic'] = 0x0621; - t['hamzalowarabic'] = 0x0621; - t['hangulfiller'] = 0x3164; - t['hardsigncyrillic'] = 0x044A; - t['harpoonleftbarbup'] = 0x21BC; - t['harpoonrightbarbup'] = 0x21C0; - t['hasquare'] = 0x33CA; - t['hatafpatah'] = 0x05B2; - t['hatafpatah16'] = 0x05B2; - t['hatafpatah23'] = 0x05B2; - t['hatafpatah2f'] = 0x05B2; - t['hatafpatahhebrew'] = 0x05B2; - t['hatafpatahnarrowhebrew'] = 0x05B2; - t['hatafpatahquarterhebrew'] = 0x05B2; - t['hatafpatahwidehebrew'] = 0x05B2; - t['hatafqamats'] = 0x05B3; - t['hatafqamats1b'] = 0x05B3; - t['hatafqamats28'] = 0x05B3; - t['hatafqamats34'] = 0x05B3; - t['hatafqamatshebrew'] = 0x05B3; - t['hatafqamatsnarrowhebrew'] = 0x05B3; - t['hatafqamatsquarterhebrew'] = 0x05B3; - t['hatafqamatswidehebrew'] = 0x05B3; - t['hatafsegol'] = 0x05B1; - t['hatafsegol17'] = 0x05B1; - t['hatafsegol24'] = 0x05B1; - t['hatafsegol30'] = 0x05B1; - t['hatafsegolhebrew'] = 0x05B1; - t['hatafsegolnarrowhebrew'] = 0x05B1; - t['hatafsegolquarterhebrew'] = 0x05B1; - t['hatafsegolwidehebrew'] = 0x05B1; - t['hbar'] = 0x0127; - t['hbopomofo'] = 0x310F; - t['hbrevebelow'] = 0x1E2B; - t['hcedilla'] = 0x1E29; - t['hcircle'] = 0x24D7; - t['hcircumflex'] = 0x0125; - t['hdieresis'] = 0x1E27; - t['hdotaccent'] = 0x1E23; - t['hdotbelow'] = 0x1E25; - t['he'] = 0x05D4; - t['heart'] = 0x2665; - t['heartsuitblack'] = 0x2665; - t['heartsuitwhite'] = 0x2661; - t['hedagesh'] = 0xFB34; - t['hedageshhebrew'] = 0xFB34; - t['hehaltonearabic'] = 0x06C1; - t['heharabic'] = 0x0647; - t['hehebrew'] = 0x05D4; - t['hehfinalaltonearabic'] = 0xFBA7; - t['hehfinalalttwoarabic'] = 0xFEEA; - t['hehfinalarabic'] = 0xFEEA; - t['hehhamzaabovefinalarabic'] = 0xFBA5; - t['hehhamzaaboveisolatedarabic'] = 0xFBA4; - t['hehinitialaltonearabic'] = 0xFBA8; - t['hehinitialarabic'] = 0xFEEB; - t['hehiragana'] = 0x3078; - t['hehmedialaltonearabic'] = 0xFBA9; - t['hehmedialarabic'] = 0xFEEC; - t['heiseierasquare'] = 0x337B; - t['hekatakana'] = 0x30D8; - t['hekatakanahalfwidth'] = 0xFF8D; - t['hekutaarusquare'] = 0x3336; - t['henghook'] = 0x0267; - t['herutusquare'] = 0x3339; - t['het'] = 0x05D7; - t['hethebrew'] = 0x05D7; - t['hhook'] = 0x0266; - t['hhooksuperior'] = 0x02B1; - t['hieuhacirclekorean'] = 0x327B; - t['hieuhaparenkorean'] = 0x321B; - t['hieuhcirclekorean'] = 0x326D; - t['hieuhkorean'] = 0x314E; - t['hieuhparenkorean'] = 0x320D; - t['hihiragana'] = 0x3072; - t['hikatakana'] = 0x30D2; - t['hikatakanahalfwidth'] = 0xFF8B; - t['hiriq'] = 0x05B4; - t['hiriq14'] = 0x05B4; - t['hiriq21'] = 0x05B4; - t['hiriq2d'] = 0x05B4; - t['hiriqhebrew'] = 0x05B4; - t['hiriqnarrowhebrew'] = 0x05B4; - t['hiriqquarterhebrew'] = 0x05B4; - t['hiriqwidehebrew'] = 0x05B4; - t['hlinebelow'] = 0x1E96; - t['hmonospace'] = 0xFF48; - t['hoarmenian'] = 0x0570; - t['hohipthai'] = 0x0E2B; - t['hohiragana'] = 0x307B; - t['hokatakana'] = 0x30DB; - t['hokatakanahalfwidth'] = 0xFF8E; - t['holam'] = 0x05B9; - t['holam19'] = 0x05B9; - t['holam26'] = 0x05B9; - t['holam32'] = 0x05B9; - t['holamhebrew'] = 0x05B9; - t['holamnarrowhebrew'] = 0x05B9; - t['holamquarterhebrew'] = 0x05B9; - t['holamwidehebrew'] = 0x05B9; - t['honokhukthai'] = 0x0E2E; - t['hookabovecomb'] = 0x0309; - t['hookcmb'] = 0x0309; - t['hookpalatalizedbelowcmb'] = 0x0321; - t['hookretroflexbelowcmb'] = 0x0322; - t['hoonsquare'] = 0x3342; - t['horicoptic'] = 0x03E9; - t['horizontalbar'] = 0x2015; - t['horncmb'] = 0x031B; - t['hotsprings'] = 0x2668; - t['house'] = 0x2302; - t['hparen'] = 0x24A3; - t['hsuperior'] = 0x02B0; - t['hturned'] = 0x0265; - t['huhiragana'] = 0x3075; - t['huiitosquare'] = 0x3333; - t['hukatakana'] = 0x30D5; - t['hukatakanahalfwidth'] = 0xFF8C; - t['hungarumlaut'] = 0x02DD; - t['hungarumlautcmb'] = 0x030B; - t['hv'] = 0x0195; - t['hyphen'] = 0x002D; - t['hypheninferior'] = 0xF6E5; - t['hyphenmonospace'] = 0xFF0D; - t['hyphensmall'] = 0xFE63; - t['hyphensuperior'] = 0xF6E6; - t['hyphentwo'] = 0x2010; - t['i'] = 0x0069; - t['iacute'] = 0x00ED; - t['iacyrillic'] = 0x044F; - t['ibengali'] = 0x0987; - t['ibopomofo'] = 0x3127; - t['ibreve'] = 0x012D; - t['icaron'] = 0x01D0; - t['icircle'] = 0x24D8; - t['icircumflex'] = 0x00EE; - t['icyrillic'] = 0x0456; - t['idblgrave'] = 0x0209; - t['ideographearthcircle'] = 0x328F; - t['ideographfirecircle'] = 0x328B; - t['ideographicallianceparen'] = 0x323F; - t['ideographiccallparen'] = 0x323A; - t['ideographiccentrecircle'] = 0x32A5; - t['ideographicclose'] = 0x3006; - t['ideographiccomma'] = 0x3001; - t['ideographiccommaleft'] = 0xFF64; - t['ideographiccongratulationparen'] = 0x3237; - t['ideographiccorrectcircle'] = 0x32A3; - t['ideographicearthparen'] = 0x322F; - t['ideographicenterpriseparen'] = 0x323D; - t['ideographicexcellentcircle'] = 0x329D; - t['ideographicfestivalparen'] = 0x3240; - t['ideographicfinancialcircle'] = 0x3296; - t['ideographicfinancialparen'] = 0x3236; - t['ideographicfireparen'] = 0x322B; - t['ideographichaveparen'] = 0x3232; - t['ideographichighcircle'] = 0x32A4; - t['ideographiciterationmark'] = 0x3005; - t['ideographiclaborcircle'] = 0x3298; - t['ideographiclaborparen'] = 0x3238; - t['ideographicleftcircle'] = 0x32A7; - t['ideographiclowcircle'] = 0x32A6; - t['ideographicmedicinecircle'] = 0x32A9; - t['ideographicmetalparen'] = 0x322E; - t['ideographicmoonparen'] = 0x322A; - t['ideographicnameparen'] = 0x3234; - t['ideographicperiod'] = 0x3002; - t['ideographicprintcircle'] = 0x329E; - t['ideographicreachparen'] = 0x3243; - t['ideographicrepresentparen'] = 0x3239; - t['ideographicresourceparen'] = 0x323E; - t['ideographicrightcircle'] = 0x32A8; - t['ideographicsecretcircle'] = 0x3299; - t['ideographicselfparen'] = 0x3242; - t['ideographicsocietyparen'] = 0x3233; - t['ideographicspace'] = 0x3000; - t['ideographicspecialparen'] = 0x3235; - t['ideographicstockparen'] = 0x3231; - t['ideographicstudyparen'] = 0x323B; - t['ideographicsunparen'] = 0x3230; - t['ideographicsuperviseparen'] = 0x323C; - t['ideographicwaterparen'] = 0x322C; - t['ideographicwoodparen'] = 0x322D; - t['ideographiczero'] = 0x3007; - t['ideographmetalcircle'] = 0x328E; - t['ideographmooncircle'] = 0x328A; - t['ideographnamecircle'] = 0x3294; - t['ideographsuncircle'] = 0x3290; - t['ideographwatercircle'] = 0x328C; - t['ideographwoodcircle'] = 0x328D; - t['ideva'] = 0x0907; - t['idieresis'] = 0x00EF; - t['idieresisacute'] = 0x1E2F; - t['idieresiscyrillic'] = 0x04E5; - t['idotbelow'] = 0x1ECB; - t['iebrevecyrillic'] = 0x04D7; - t['iecyrillic'] = 0x0435; - t['ieungacirclekorean'] = 0x3275; - t['ieungaparenkorean'] = 0x3215; - t['ieungcirclekorean'] = 0x3267; - t['ieungkorean'] = 0x3147; - t['ieungparenkorean'] = 0x3207; - t['igrave'] = 0x00EC; - t['igujarati'] = 0x0A87; - t['igurmukhi'] = 0x0A07; - t['ihiragana'] = 0x3044; - t['ihookabove'] = 0x1EC9; - t['iibengali'] = 0x0988; - t['iicyrillic'] = 0x0438; - t['iideva'] = 0x0908; - t['iigujarati'] = 0x0A88; - t['iigurmukhi'] = 0x0A08; - t['iimatragurmukhi'] = 0x0A40; - t['iinvertedbreve'] = 0x020B; - t['iishortcyrillic'] = 0x0439; - t['iivowelsignbengali'] = 0x09C0; - t['iivowelsigndeva'] = 0x0940; - t['iivowelsigngujarati'] = 0x0AC0; - t['ij'] = 0x0133; - t['ikatakana'] = 0x30A4; - t['ikatakanahalfwidth'] = 0xFF72; - t['ikorean'] = 0x3163; - t['ilde'] = 0x02DC; - t['iluyhebrew'] = 0x05AC; - t['imacron'] = 0x012B; - t['imacroncyrillic'] = 0x04E3; - t['imageorapproximatelyequal'] = 0x2253; - t['imatragurmukhi'] = 0x0A3F; - t['imonospace'] = 0xFF49; - t['increment'] = 0x2206; - t['infinity'] = 0x221E; - t['iniarmenian'] = 0x056B; - t['integral'] = 0x222B; - t['integralbottom'] = 0x2321; - t['integralbt'] = 0x2321; - t['integralex'] = 0xF8F5; - t['integraltop'] = 0x2320; - t['integraltp'] = 0x2320; - t['intersection'] = 0x2229; - t['intisquare'] = 0x3305; - t['invbullet'] = 0x25D8; - t['invcircle'] = 0x25D9; - t['invsmileface'] = 0x263B; - t['iocyrillic'] = 0x0451; - t['iogonek'] = 0x012F; - t['iota'] = 0x03B9; - t['iotadieresis'] = 0x03CA; - t['iotadieresistonos'] = 0x0390; - t['iotalatin'] = 0x0269; - t['iotatonos'] = 0x03AF; - t['iparen'] = 0x24A4; - t['irigurmukhi'] = 0x0A72; - t['ismallhiragana'] = 0x3043; - t['ismallkatakana'] = 0x30A3; - t['ismallkatakanahalfwidth'] = 0xFF68; - t['issharbengali'] = 0x09FA; - t['istroke'] = 0x0268; - t['isuperior'] = 0xF6ED; - t['iterationhiragana'] = 0x309D; - t['iterationkatakana'] = 0x30FD; - t['itilde'] = 0x0129; - t['itildebelow'] = 0x1E2D; - t['iubopomofo'] = 0x3129; - t['iucyrillic'] = 0x044E; - t['ivowelsignbengali'] = 0x09BF; - t['ivowelsigndeva'] = 0x093F; - t['ivowelsigngujarati'] = 0x0ABF; - t['izhitsacyrillic'] = 0x0475; - t['izhitsadblgravecyrillic'] = 0x0477; - t['j'] = 0x006A; - t['jaarmenian'] = 0x0571; - t['jabengali'] = 0x099C; - t['jadeva'] = 0x091C; - t['jagujarati'] = 0x0A9C; - t['jagurmukhi'] = 0x0A1C; - t['jbopomofo'] = 0x3110; - t['jcaron'] = 0x01F0; - t['jcircle'] = 0x24D9; - t['jcircumflex'] = 0x0135; - t['jcrossedtail'] = 0x029D; - t['jdotlessstroke'] = 0x025F; - t['jecyrillic'] = 0x0458; - t['jeemarabic'] = 0x062C; - t['jeemfinalarabic'] = 0xFE9E; - t['jeeminitialarabic'] = 0xFE9F; - t['jeemmedialarabic'] = 0xFEA0; - t['jeharabic'] = 0x0698; - t['jehfinalarabic'] = 0xFB8B; - t['jhabengali'] = 0x099D; - t['jhadeva'] = 0x091D; - t['jhagujarati'] = 0x0A9D; - t['jhagurmukhi'] = 0x0A1D; - t['jheharmenian'] = 0x057B; - t['jis'] = 0x3004; - t['jmonospace'] = 0xFF4A; - t['jparen'] = 0x24A5; - t['jsuperior'] = 0x02B2; - t['k'] = 0x006B; - t['kabashkircyrillic'] = 0x04A1; - t['kabengali'] = 0x0995; - t['kacute'] = 0x1E31; - t['kacyrillic'] = 0x043A; - t['kadescendercyrillic'] = 0x049B; - t['kadeva'] = 0x0915; - t['kaf'] = 0x05DB; - t['kafarabic'] = 0x0643; - t['kafdagesh'] = 0xFB3B; - t['kafdageshhebrew'] = 0xFB3B; - t['kaffinalarabic'] = 0xFEDA; - t['kafhebrew'] = 0x05DB; - t['kafinitialarabic'] = 0xFEDB; - t['kafmedialarabic'] = 0xFEDC; - t['kafrafehebrew'] = 0xFB4D; - t['kagujarati'] = 0x0A95; - t['kagurmukhi'] = 0x0A15; - t['kahiragana'] = 0x304B; - t['kahookcyrillic'] = 0x04C4; - t['kakatakana'] = 0x30AB; - t['kakatakanahalfwidth'] = 0xFF76; - t['kappa'] = 0x03BA; - t['kappasymbolgreek'] = 0x03F0; - t['kapyeounmieumkorean'] = 0x3171; - t['kapyeounphieuphkorean'] = 0x3184; - t['kapyeounpieupkorean'] = 0x3178; - t['kapyeounssangpieupkorean'] = 0x3179; - t['karoriisquare'] = 0x330D; - t['kashidaautoarabic'] = 0x0640; - t['kashidaautonosidebearingarabic'] = 0x0640; - t['kasmallkatakana'] = 0x30F5; - t['kasquare'] = 0x3384; - t['kasraarabic'] = 0x0650; - t['kasratanarabic'] = 0x064D; - t['kastrokecyrillic'] = 0x049F; - t['katahiraprolongmarkhalfwidth'] = 0xFF70; - t['kaverticalstrokecyrillic'] = 0x049D; - t['kbopomofo'] = 0x310E; - t['kcalsquare'] = 0x3389; - t['kcaron'] = 0x01E9; - t['kcedilla'] = 0x0137; - t['kcircle'] = 0x24DA; - t['kcommaaccent'] = 0x0137; - t['kdotbelow'] = 0x1E33; - t['keharmenian'] = 0x0584; - t['kehiragana'] = 0x3051; - t['kekatakana'] = 0x30B1; - t['kekatakanahalfwidth'] = 0xFF79; - t['kenarmenian'] = 0x056F; - t['kesmallkatakana'] = 0x30F6; - t['kgreenlandic'] = 0x0138; - t['khabengali'] = 0x0996; - t['khacyrillic'] = 0x0445; - t['khadeva'] = 0x0916; - t['khagujarati'] = 0x0A96; - t['khagurmukhi'] = 0x0A16; - t['khaharabic'] = 0x062E; - t['khahfinalarabic'] = 0xFEA6; - t['khahinitialarabic'] = 0xFEA7; - t['khahmedialarabic'] = 0xFEA8; - t['kheicoptic'] = 0x03E7; - t['khhadeva'] = 0x0959; - t['khhagurmukhi'] = 0x0A59; - t['khieukhacirclekorean'] = 0x3278; - t['khieukhaparenkorean'] = 0x3218; - t['khieukhcirclekorean'] = 0x326A; - t['khieukhkorean'] = 0x314B; - t['khieukhparenkorean'] = 0x320A; - t['khokhaithai'] = 0x0E02; - t['khokhonthai'] = 0x0E05; - t['khokhuatthai'] = 0x0E03; - t['khokhwaithai'] = 0x0E04; - t['khomutthai'] = 0x0E5B; - t['khook'] = 0x0199; - t['khorakhangthai'] = 0x0E06; - t['khzsquare'] = 0x3391; - t['kihiragana'] = 0x304D; - t['kikatakana'] = 0x30AD; - t['kikatakanahalfwidth'] = 0xFF77; - t['kiroguramusquare'] = 0x3315; - t['kiromeetorusquare'] = 0x3316; - t['kirosquare'] = 0x3314; - t['kiyeokacirclekorean'] = 0x326E; - t['kiyeokaparenkorean'] = 0x320E; - t['kiyeokcirclekorean'] = 0x3260; - t['kiyeokkorean'] = 0x3131; - t['kiyeokparenkorean'] = 0x3200; - t['kiyeoksioskorean'] = 0x3133; - t['kjecyrillic'] = 0x045C; - t['klinebelow'] = 0x1E35; - t['klsquare'] = 0x3398; - t['kmcubedsquare'] = 0x33A6; - t['kmonospace'] = 0xFF4B; - t['kmsquaredsquare'] = 0x33A2; - t['kohiragana'] = 0x3053; - t['kohmsquare'] = 0x33C0; - t['kokaithai'] = 0x0E01; - t['kokatakana'] = 0x30B3; - t['kokatakanahalfwidth'] = 0xFF7A; - t['kooposquare'] = 0x331E; - t['koppacyrillic'] = 0x0481; - t['koreanstandardsymbol'] = 0x327F; - t['koroniscmb'] = 0x0343; - t['kparen'] = 0x24A6; - t['kpasquare'] = 0x33AA; - t['ksicyrillic'] = 0x046F; - t['ktsquare'] = 0x33CF; - t['kturned'] = 0x029E; - t['kuhiragana'] = 0x304F; - t['kukatakana'] = 0x30AF; - t['kukatakanahalfwidth'] = 0xFF78; - t['kvsquare'] = 0x33B8; - t['kwsquare'] = 0x33BE; - t['l'] = 0x006C; - t['labengali'] = 0x09B2; - t['lacute'] = 0x013A; - t['ladeva'] = 0x0932; - t['lagujarati'] = 0x0AB2; - t['lagurmukhi'] = 0x0A32; - t['lakkhangyaothai'] = 0x0E45; - t['lamaleffinalarabic'] = 0xFEFC; - t['lamalefhamzaabovefinalarabic'] = 0xFEF8; - t['lamalefhamzaaboveisolatedarabic'] = 0xFEF7; - t['lamalefhamzabelowfinalarabic'] = 0xFEFA; - t['lamalefhamzabelowisolatedarabic'] = 0xFEF9; - t['lamalefisolatedarabic'] = 0xFEFB; - t['lamalefmaddaabovefinalarabic'] = 0xFEF6; - t['lamalefmaddaaboveisolatedarabic'] = 0xFEF5; - t['lamarabic'] = 0x0644; - t['lambda'] = 0x03BB; - t['lambdastroke'] = 0x019B; - t['lamed'] = 0x05DC; - t['lameddagesh'] = 0xFB3C; - t['lameddageshhebrew'] = 0xFB3C; - t['lamedhebrew'] = 0x05DC; - t['lamfinalarabic'] = 0xFEDE; - t['lamhahinitialarabic'] = 0xFCCA; - t['laminitialarabic'] = 0xFEDF; - t['lamjeeminitialarabic'] = 0xFCC9; - t['lamkhahinitialarabic'] = 0xFCCB; - t['lamlamhehisolatedarabic'] = 0xFDF2; - t['lammedialarabic'] = 0xFEE0; - t['lammeemhahinitialarabic'] = 0xFD88; - t['lammeeminitialarabic'] = 0xFCCC; - t['largecircle'] = 0x25EF; - t['lbar'] = 0x019A; - t['lbelt'] = 0x026C; - t['lbopomofo'] = 0x310C; - t['lcaron'] = 0x013E; - t['lcedilla'] = 0x013C; - t['lcircle'] = 0x24DB; - t['lcircumflexbelow'] = 0x1E3D; - t['lcommaaccent'] = 0x013C; - t['ldot'] = 0x0140; - t['ldotaccent'] = 0x0140; - t['ldotbelow'] = 0x1E37; - t['ldotbelowmacron'] = 0x1E39; - t['leftangleabovecmb'] = 0x031A; - t['lefttackbelowcmb'] = 0x0318; - t['less'] = 0x003C; - t['lessequal'] = 0x2264; - t['lessequalorgreater'] = 0x22DA; - t['lessmonospace'] = 0xFF1C; - t['lessorequivalent'] = 0x2272; - t['lessorgreater'] = 0x2276; - t['lessoverequal'] = 0x2266; - t['lesssmall'] = 0xFE64; - t['lezh'] = 0x026E; - t['lfblock'] = 0x258C; - t['lhookretroflex'] = 0x026D; - t['lira'] = 0x20A4; - t['liwnarmenian'] = 0x056C; - t['lj'] = 0x01C9; - t['ljecyrillic'] = 0x0459; - t['ll'] = 0xF6C0; - t['lladeva'] = 0x0933; - t['llagujarati'] = 0x0AB3; - t['llinebelow'] = 0x1E3B; - t['llladeva'] = 0x0934; - t['llvocalicbengali'] = 0x09E1; - t['llvocalicdeva'] = 0x0961; - t['llvocalicvowelsignbengali'] = 0x09E3; - t['llvocalicvowelsigndeva'] = 0x0963; - t['lmiddletilde'] = 0x026B; - t['lmonospace'] = 0xFF4C; - t['lmsquare'] = 0x33D0; - t['lochulathai'] = 0x0E2C; - t['logicaland'] = 0x2227; - t['logicalnot'] = 0x00AC; - t['logicalnotreversed'] = 0x2310; - t['logicalor'] = 0x2228; - t['lolingthai'] = 0x0E25; - t['longs'] = 0x017F; - t['lowlinecenterline'] = 0xFE4E; - t['lowlinecmb'] = 0x0332; - t['lowlinedashed'] = 0xFE4D; - t['lozenge'] = 0x25CA; - t['lparen'] = 0x24A7; - t['lslash'] = 0x0142; - t['lsquare'] = 0x2113; - t['lsuperior'] = 0xF6EE; - t['ltshade'] = 0x2591; - t['luthai'] = 0x0E26; - t['lvocalicbengali'] = 0x098C; - t['lvocalicdeva'] = 0x090C; - t['lvocalicvowelsignbengali'] = 0x09E2; - t['lvocalicvowelsigndeva'] = 0x0962; - t['lxsquare'] = 0x33D3; - t['m'] = 0x006D; - t['mabengali'] = 0x09AE; - t['macron'] = 0x00AF; - t['macronbelowcmb'] = 0x0331; - t['macroncmb'] = 0x0304; - t['macronlowmod'] = 0x02CD; - t['macronmonospace'] = 0xFFE3; - t['macute'] = 0x1E3F; - t['madeva'] = 0x092E; - t['magujarati'] = 0x0AAE; - t['magurmukhi'] = 0x0A2E; - t['mahapakhhebrew'] = 0x05A4; - t['mahapakhlefthebrew'] = 0x05A4; - t['mahiragana'] = 0x307E; - t['maichattawalowleftthai'] = 0xF895; - t['maichattawalowrightthai'] = 0xF894; - t['maichattawathai'] = 0x0E4B; - t['maichattawaupperleftthai'] = 0xF893; - t['maieklowleftthai'] = 0xF88C; - t['maieklowrightthai'] = 0xF88B; - t['maiekthai'] = 0x0E48; - t['maiekupperleftthai'] = 0xF88A; - t['maihanakatleftthai'] = 0xF884; - t['maihanakatthai'] = 0x0E31; - t['maitaikhuleftthai'] = 0xF889; - t['maitaikhuthai'] = 0x0E47; - t['maitholowleftthai'] = 0xF88F; - t['maitholowrightthai'] = 0xF88E; - t['maithothai'] = 0x0E49; - t['maithoupperleftthai'] = 0xF88D; - t['maitrilowleftthai'] = 0xF892; - t['maitrilowrightthai'] = 0xF891; - t['maitrithai'] = 0x0E4A; - t['maitriupperleftthai'] = 0xF890; - t['maiyamokthai'] = 0x0E46; - t['makatakana'] = 0x30DE; - t['makatakanahalfwidth'] = 0xFF8F; - t['male'] = 0x2642; - t['mansyonsquare'] = 0x3347; - t['maqafhebrew'] = 0x05BE; - t['mars'] = 0x2642; - t['masoracirclehebrew'] = 0x05AF; - t['masquare'] = 0x3383; - t['mbopomofo'] = 0x3107; - t['mbsquare'] = 0x33D4; - t['mcircle'] = 0x24DC; - t['mcubedsquare'] = 0x33A5; - t['mdotaccent'] = 0x1E41; - t['mdotbelow'] = 0x1E43; - t['meemarabic'] = 0x0645; - t['meemfinalarabic'] = 0xFEE2; - t['meeminitialarabic'] = 0xFEE3; - t['meemmedialarabic'] = 0xFEE4; - t['meemmeeminitialarabic'] = 0xFCD1; - t['meemmeemisolatedarabic'] = 0xFC48; - t['meetorusquare'] = 0x334D; - t['mehiragana'] = 0x3081; - t['meizierasquare'] = 0x337E; - t['mekatakana'] = 0x30E1; - t['mekatakanahalfwidth'] = 0xFF92; - t['mem'] = 0x05DE; - t['memdagesh'] = 0xFB3E; - t['memdageshhebrew'] = 0xFB3E; - t['memhebrew'] = 0x05DE; - t['menarmenian'] = 0x0574; - t['merkhahebrew'] = 0x05A5; - t['merkhakefulahebrew'] = 0x05A6; - t['merkhakefulalefthebrew'] = 0x05A6; - t['merkhalefthebrew'] = 0x05A5; - t['mhook'] = 0x0271; - t['mhzsquare'] = 0x3392; - t['middledotkatakanahalfwidth'] = 0xFF65; - t['middot'] = 0x00B7; - t['mieumacirclekorean'] = 0x3272; - t['mieumaparenkorean'] = 0x3212; - t['mieumcirclekorean'] = 0x3264; - t['mieumkorean'] = 0x3141; - t['mieumpansioskorean'] = 0x3170; - t['mieumparenkorean'] = 0x3204; - t['mieumpieupkorean'] = 0x316E; - t['mieumsioskorean'] = 0x316F; - t['mihiragana'] = 0x307F; - t['mikatakana'] = 0x30DF; - t['mikatakanahalfwidth'] = 0xFF90; - t['minus'] = 0x2212; - t['minusbelowcmb'] = 0x0320; - t['minuscircle'] = 0x2296; - t['minusmod'] = 0x02D7; - t['minusplus'] = 0x2213; - t['minute'] = 0x2032; - t['miribaarusquare'] = 0x334A; - t['mirisquare'] = 0x3349; - t['mlonglegturned'] = 0x0270; - t['mlsquare'] = 0x3396; - t['mmcubedsquare'] = 0x33A3; - t['mmonospace'] = 0xFF4D; - t['mmsquaredsquare'] = 0x339F; - t['mohiragana'] = 0x3082; - t['mohmsquare'] = 0x33C1; - t['mokatakana'] = 0x30E2; - t['mokatakanahalfwidth'] = 0xFF93; - t['molsquare'] = 0x33D6; - t['momathai'] = 0x0E21; - t['moverssquare'] = 0x33A7; - t['moverssquaredsquare'] = 0x33A8; - t['mparen'] = 0x24A8; - t['mpasquare'] = 0x33AB; - t['mssquare'] = 0x33B3; - t['msuperior'] = 0xF6EF; - t['mturned'] = 0x026F; - t['mu'] = 0x00B5; - t['mu1'] = 0x00B5; - t['muasquare'] = 0x3382; - t['muchgreater'] = 0x226B; - t['muchless'] = 0x226A; - t['mufsquare'] = 0x338C; - t['mugreek'] = 0x03BC; - t['mugsquare'] = 0x338D; - t['muhiragana'] = 0x3080; - t['mukatakana'] = 0x30E0; - t['mukatakanahalfwidth'] = 0xFF91; - t['mulsquare'] = 0x3395; - t['multiply'] = 0x00D7; - t['mumsquare'] = 0x339B; - t['munahhebrew'] = 0x05A3; - t['munahlefthebrew'] = 0x05A3; - t['musicalnote'] = 0x266A; - t['musicalnotedbl'] = 0x266B; - t['musicflatsign'] = 0x266D; - t['musicsharpsign'] = 0x266F; - t['mussquare'] = 0x33B2; - t['muvsquare'] = 0x33B6; - t['muwsquare'] = 0x33BC; - t['mvmegasquare'] = 0x33B9; - t['mvsquare'] = 0x33B7; - t['mwmegasquare'] = 0x33BF; - t['mwsquare'] = 0x33BD; - t['n'] = 0x006E; - t['nabengali'] = 0x09A8; - t['nabla'] = 0x2207; - t['nacute'] = 0x0144; - t['nadeva'] = 0x0928; - t['nagujarati'] = 0x0AA8; - t['nagurmukhi'] = 0x0A28; - t['nahiragana'] = 0x306A; - t['nakatakana'] = 0x30CA; - t['nakatakanahalfwidth'] = 0xFF85; - t['napostrophe'] = 0x0149; - t['nasquare'] = 0x3381; - t['nbopomofo'] = 0x310B; - t['nbspace'] = 0x00A0; - t['ncaron'] = 0x0148; - t['ncedilla'] = 0x0146; - t['ncircle'] = 0x24DD; - t['ncircumflexbelow'] = 0x1E4B; - t['ncommaaccent'] = 0x0146; - t['ndotaccent'] = 0x1E45; - t['ndotbelow'] = 0x1E47; - t['nehiragana'] = 0x306D; - t['nekatakana'] = 0x30CD; - t['nekatakanahalfwidth'] = 0xFF88; - t['newsheqelsign'] = 0x20AA; - t['nfsquare'] = 0x338B; - t['ngabengali'] = 0x0999; - t['ngadeva'] = 0x0919; - t['ngagujarati'] = 0x0A99; - t['ngagurmukhi'] = 0x0A19; - t['ngonguthai'] = 0x0E07; - t['nhiragana'] = 0x3093; - t['nhookleft'] = 0x0272; - t['nhookretroflex'] = 0x0273; - t['nieunacirclekorean'] = 0x326F; - t['nieunaparenkorean'] = 0x320F; - t['nieuncieuckorean'] = 0x3135; - t['nieuncirclekorean'] = 0x3261; - t['nieunhieuhkorean'] = 0x3136; - t['nieunkorean'] = 0x3134; - t['nieunpansioskorean'] = 0x3168; - t['nieunparenkorean'] = 0x3201; - t['nieunsioskorean'] = 0x3167; - t['nieuntikeutkorean'] = 0x3166; - t['nihiragana'] = 0x306B; - t['nikatakana'] = 0x30CB; - t['nikatakanahalfwidth'] = 0xFF86; - t['nikhahitleftthai'] = 0xF899; - t['nikhahitthai'] = 0x0E4D; - t['nine'] = 0x0039; - t['ninearabic'] = 0x0669; - t['ninebengali'] = 0x09EF; - t['ninecircle'] = 0x2468; - t['ninecircleinversesansserif'] = 0x2792; - t['ninedeva'] = 0x096F; - t['ninegujarati'] = 0x0AEF; - t['ninegurmukhi'] = 0x0A6F; - t['ninehackarabic'] = 0x0669; - t['ninehangzhou'] = 0x3029; - t['nineideographicparen'] = 0x3228; - t['nineinferior'] = 0x2089; - t['ninemonospace'] = 0xFF19; - t['nineoldstyle'] = 0xF739; - t['nineparen'] = 0x247C; - t['nineperiod'] = 0x2490; - t['ninepersian'] = 0x06F9; - t['nineroman'] = 0x2178; - t['ninesuperior'] = 0x2079; - t['nineteencircle'] = 0x2472; - t['nineteenparen'] = 0x2486; - t['nineteenperiod'] = 0x249A; - t['ninethai'] = 0x0E59; - t['nj'] = 0x01CC; - t['njecyrillic'] = 0x045A; - t['nkatakana'] = 0x30F3; - t['nkatakanahalfwidth'] = 0xFF9D; - t['nlegrightlong'] = 0x019E; - t['nlinebelow'] = 0x1E49; - t['nmonospace'] = 0xFF4E; - t['nmsquare'] = 0x339A; - t['nnabengali'] = 0x09A3; - t['nnadeva'] = 0x0923; - t['nnagujarati'] = 0x0AA3; - t['nnagurmukhi'] = 0x0A23; - t['nnnadeva'] = 0x0929; - t['nohiragana'] = 0x306E; - t['nokatakana'] = 0x30CE; - t['nokatakanahalfwidth'] = 0xFF89; - t['nonbreakingspace'] = 0x00A0; - t['nonenthai'] = 0x0E13; - t['nonuthai'] = 0x0E19; - t['noonarabic'] = 0x0646; - t['noonfinalarabic'] = 0xFEE6; - t['noonghunnaarabic'] = 0x06BA; - t['noonghunnafinalarabic'] = 0xFB9F; - t['nooninitialarabic'] = 0xFEE7; - t['noonjeeminitialarabic'] = 0xFCD2; - t['noonjeemisolatedarabic'] = 0xFC4B; - t['noonmedialarabic'] = 0xFEE8; - t['noonmeeminitialarabic'] = 0xFCD5; - t['noonmeemisolatedarabic'] = 0xFC4E; - t['noonnoonfinalarabic'] = 0xFC8D; - t['notcontains'] = 0x220C; - t['notelement'] = 0x2209; - t['notelementof'] = 0x2209; - t['notequal'] = 0x2260; - t['notgreater'] = 0x226F; - t['notgreaternorequal'] = 0x2271; - t['notgreaternorless'] = 0x2279; - t['notidentical'] = 0x2262; - t['notless'] = 0x226E; - t['notlessnorequal'] = 0x2270; - t['notparallel'] = 0x2226; - t['notprecedes'] = 0x2280; - t['notsubset'] = 0x2284; - t['notsucceeds'] = 0x2281; - t['notsuperset'] = 0x2285; - t['nowarmenian'] = 0x0576; - t['nparen'] = 0x24A9; - t['nssquare'] = 0x33B1; - t['nsuperior'] = 0x207F; - t['ntilde'] = 0x00F1; - t['nu'] = 0x03BD; - t['nuhiragana'] = 0x306C; - t['nukatakana'] = 0x30CC; - t['nukatakanahalfwidth'] = 0xFF87; - t['nuktabengali'] = 0x09BC; - t['nuktadeva'] = 0x093C; - t['nuktagujarati'] = 0x0ABC; - t['nuktagurmukhi'] = 0x0A3C; - t['numbersign'] = 0x0023; - t['numbersignmonospace'] = 0xFF03; - t['numbersignsmall'] = 0xFE5F; - t['numeralsigngreek'] = 0x0374; - t['numeralsignlowergreek'] = 0x0375; - t['numero'] = 0x2116; - t['nun'] = 0x05E0; - t['nundagesh'] = 0xFB40; - t['nundageshhebrew'] = 0xFB40; - t['nunhebrew'] = 0x05E0; - t['nvsquare'] = 0x33B5; - t['nwsquare'] = 0x33BB; - t['nyabengali'] = 0x099E; - t['nyadeva'] = 0x091E; - t['nyagujarati'] = 0x0A9E; - t['nyagurmukhi'] = 0x0A1E; - t['o'] = 0x006F; - t['oacute'] = 0x00F3; - t['oangthai'] = 0x0E2D; - t['obarred'] = 0x0275; - t['obarredcyrillic'] = 0x04E9; - t['obarreddieresiscyrillic'] = 0x04EB; - t['obengali'] = 0x0993; - t['obopomofo'] = 0x311B; - t['obreve'] = 0x014F; - t['ocandradeva'] = 0x0911; - t['ocandragujarati'] = 0x0A91; - t['ocandravowelsigndeva'] = 0x0949; - t['ocandravowelsigngujarati'] = 0x0AC9; - t['ocaron'] = 0x01D2; - t['ocircle'] = 0x24DE; - t['ocircumflex'] = 0x00F4; - t['ocircumflexacute'] = 0x1ED1; - t['ocircumflexdotbelow'] = 0x1ED9; - t['ocircumflexgrave'] = 0x1ED3; - t['ocircumflexhookabove'] = 0x1ED5; - t['ocircumflextilde'] = 0x1ED7; - t['ocyrillic'] = 0x043E; - t['odblacute'] = 0x0151; - t['odblgrave'] = 0x020D; - t['odeva'] = 0x0913; - t['odieresis'] = 0x00F6; - t['odieresiscyrillic'] = 0x04E7; - t['odotbelow'] = 0x1ECD; - t['oe'] = 0x0153; - t['oekorean'] = 0x315A; - t['ogonek'] = 0x02DB; - t['ogonekcmb'] = 0x0328; - t['ograve'] = 0x00F2; - t['ogujarati'] = 0x0A93; - t['oharmenian'] = 0x0585; - t['ohiragana'] = 0x304A; - t['ohookabove'] = 0x1ECF; - t['ohorn'] = 0x01A1; - t['ohornacute'] = 0x1EDB; - t['ohorndotbelow'] = 0x1EE3; - t['ohorngrave'] = 0x1EDD; - t['ohornhookabove'] = 0x1EDF; - t['ohorntilde'] = 0x1EE1; - t['ohungarumlaut'] = 0x0151; - t['oi'] = 0x01A3; - t['oinvertedbreve'] = 0x020F; - t['okatakana'] = 0x30AA; - t['okatakanahalfwidth'] = 0xFF75; - t['okorean'] = 0x3157; - t['olehebrew'] = 0x05AB; - t['omacron'] = 0x014D; - t['omacronacute'] = 0x1E53; - t['omacrongrave'] = 0x1E51; - t['omdeva'] = 0x0950; - t['omega'] = 0x03C9; - t['omega1'] = 0x03D6; - t['omegacyrillic'] = 0x0461; - t['omegalatinclosed'] = 0x0277; - t['omegaroundcyrillic'] = 0x047B; - t['omegatitlocyrillic'] = 0x047D; - t['omegatonos'] = 0x03CE; - t['omgujarati'] = 0x0AD0; - t['omicron'] = 0x03BF; - t['omicrontonos'] = 0x03CC; - t['omonospace'] = 0xFF4F; - t['one'] = 0x0031; - t['onearabic'] = 0x0661; - t['onebengali'] = 0x09E7; - t['onecircle'] = 0x2460; - t['onecircleinversesansserif'] = 0x278A; - t['onedeva'] = 0x0967; - t['onedotenleader'] = 0x2024; - t['oneeighth'] = 0x215B; - t['onefitted'] = 0xF6DC; - t['onegujarati'] = 0x0AE7; - t['onegurmukhi'] = 0x0A67; - t['onehackarabic'] = 0x0661; - t['onehalf'] = 0x00BD; - t['onehangzhou'] = 0x3021; - t['oneideographicparen'] = 0x3220; - t['oneinferior'] = 0x2081; - t['onemonospace'] = 0xFF11; - t['onenumeratorbengali'] = 0x09F4; - t['oneoldstyle'] = 0xF731; - t['oneparen'] = 0x2474; - t['oneperiod'] = 0x2488; - t['onepersian'] = 0x06F1; - t['onequarter'] = 0x00BC; - t['oneroman'] = 0x2170; - t['onesuperior'] = 0x00B9; - t['onethai'] = 0x0E51; - t['onethird'] = 0x2153; - t['oogonek'] = 0x01EB; - t['oogonekmacron'] = 0x01ED; - t['oogurmukhi'] = 0x0A13; - t['oomatragurmukhi'] = 0x0A4B; - t['oopen'] = 0x0254; - t['oparen'] = 0x24AA; - t['openbullet'] = 0x25E6; - t['option'] = 0x2325; - t['ordfeminine'] = 0x00AA; - t['ordmasculine'] = 0x00BA; - t['orthogonal'] = 0x221F; - t['oshortdeva'] = 0x0912; - t['oshortvowelsigndeva'] = 0x094A; - t['oslash'] = 0x00F8; - t['oslashacute'] = 0x01FF; - t['osmallhiragana'] = 0x3049; - t['osmallkatakana'] = 0x30A9; - t['osmallkatakanahalfwidth'] = 0xFF6B; - t['ostrokeacute'] = 0x01FF; - t['osuperior'] = 0xF6F0; - t['otcyrillic'] = 0x047F; - t['otilde'] = 0x00F5; - t['otildeacute'] = 0x1E4D; - t['otildedieresis'] = 0x1E4F; - t['oubopomofo'] = 0x3121; - t['overline'] = 0x203E; - t['overlinecenterline'] = 0xFE4A; - t['overlinecmb'] = 0x0305; - t['overlinedashed'] = 0xFE49; - t['overlinedblwavy'] = 0xFE4C; - t['overlinewavy'] = 0xFE4B; - t['overscore'] = 0x00AF; - t['ovowelsignbengali'] = 0x09CB; - t['ovowelsigndeva'] = 0x094B; - t['ovowelsigngujarati'] = 0x0ACB; - t['p'] = 0x0070; - t['paampssquare'] = 0x3380; - t['paasentosquare'] = 0x332B; - t['pabengali'] = 0x09AA; - t['pacute'] = 0x1E55; - t['padeva'] = 0x092A; - t['pagedown'] = 0x21DF; - t['pageup'] = 0x21DE; - t['pagujarati'] = 0x0AAA; - t['pagurmukhi'] = 0x0A2A; - t['pahiragana'] = 0x3071; - t['paiyannoithai'] = 0x0E2F; - t['pakatakana'] = 0x30D1; - t['palatalizationcyrilliccmb'] = 0x0484; - t['palochkacyrillic'] = 0x04C0; - t['pansioskorean'] = 0x317F; - t['paragraph'] = 0x00B6; - t['parallel'] = 0x2225; - t['parenleft'] = 0x0028; - t['parenleftaltonearabic'] = 0xFD3E; - t['parenleftbt'] = 0xF8ED; - t['parenleftex'] = 0xF8EC; - t['parenleftinferior'] = 0x208D; - t['parenleftmonospace'] = 0xFF08; - t['parenleftsmall'] = 0xFE59; - t['parenleftsuperior'] = 0x207D; - t['parenlefttp'] = 0xF8EB; - t['parenleftvertical'] = 0xFE35; - t['parenright'] = 0x0029; - t['parenrightaltonearabic'] = 0xFD3F; - t['parenrightbt'] = 0xF8F8; - t['parenrightex'] = 0xF8F7; - t['parenrightinferior'] = 0x208E; - t['parenrightmonospace'] = 0xFF09; - t['parenrightsmall'] = 0xFE5A; - t['parenrightsuperior'] = 0x207E; - t['parenrighttp'] = 0xF8F6; - t['parenrightvertical'] = 0xFE36; - t['partialdiff'] = 0x2202; - t['paseqhebrew'] = 0x05C0; - t['pashtahebrew'] = 0x0599; - t['pasquare'] = 0x33A9; - t['patah'] = 0x05B7; - t['patah11'] = 0x05B7; - t['patah1d'] = 0x05B7; - t['patah2a'] = 0x05B7; - t['patahhebrew'] = 0x05B7; - t['patahnarrowhebrew'] = 0x05B7; - t['patahquarterhebrew'] = 0x05B7; - t['patahwidehebrew'] = 0x05B7; - t['pazerhebrew'] = 0x05A1; - t['pbopomofo'] = 0x3106; - t['pcircle'] = 0x24DF; - t['pdotaccent'] = 0x1E57; - t['pe'] = 0x05E4; - t['pecyrillic'] = 0x043F; - t['pedagesh'] = 0xFB44; - t['pedageshhebrew'] = 0xFB44; - t['peezisquare'] = 0x333B; - t['pefinaldageshhebrew'] = 0xFB43; - t['peharabic'] = 0x067E; - t['peharmenian'] = 0x057A; - t['pehebrew'] = 0x05E4; - t['pehfinalarabic'] = 0xFB57; - t['pehinitialarabic'] = 0xFB58; - t['pehiragana'] = 0x307A; - t['pehmedialarabic'] = 0xFB59; - t['pekatakana'] = 0x30DA; - t['pemiddlehookcyrillic'] = 0x04A7; - t['perafehebrew'] = 0xFB4E; - t['percent'] = 0x0025; - t['percentarabic'] = 0x066A; - t['percentmonospace'] = 0xFF05; - t['percentsmall'] = 0xFE6A; - t['period'] = 0x002E; - t['periodarmenian'] = 0x0589; - t['periodcentered'] = 0x00B7; - t['periodhalfwidth'] = 0xFF61; - t['periodinferior'] = 0xF6E7; - t['periodmonospace'] = 0xFF0E; - t['periodsmall'] = 0xFE52; - t['periodsuperior'] = 0xF6E8; - t['perispomenigreekcmb'] = 0x0342; - t['perpendicular'] = 0x22A5; - t['perthousand'] = 0x2030; - t['peseta'] = 0x20A7; - t['pfsquare'] = 0x338A; - t['phabengali'] = 0x09AB; - t['phadeva'] = 0x092B; - t['phagujarati'] = 0x0AAB; - t['phagurmukhi'] = 0x0A2B; - t['phi'] = 0x03C6; - t['phi1'] = 0x03D5; - t['phieuphacirclekorean'] = 0x327A; - t['phieuphaparenkorean'] = 0x321A; - t['phieuphcirclekorean'] = 0x326C; - t['phieuphkorean'] = 0x314D; - t['phieuphparenkorean'] = 0x320C; - t['philatin'] = 0x0278; - t['phinthuthai'] = 0x0E3A; - t['phisymbolgreek'] = 0x03D5; - t['phook'] = 0x01A5; - t['phophanthai'] = 0x0E1E; - t['phophungthai'] = 0x0E1C; - t['phosamphaothai'] = 0x0E20; - t['pi'] = 0x03C0; - t['pieupacirclekorean'] = 0x3273; - t['pieupaparenkorean'] = 0x3213; - t['pieupcieuckorean'] = 0x3176; - t['pieupcirclekorean'] = 0x3265; - t['pieupkiyeokkorean'] = 0x3172; - t['pieupkorean'] = 0x3142; - t['pieupparenkorean'] = 0x3205; - t['pieupsioskiyeokkorean'] = 0x3174; - t['pieupsioskorean'] = 0x3144; - t['pieupsiostikeutkorean'] = 0x3175; - t['pieupthieuthkorean'] = 0x3177; - t['pieuptikeutkorean'] = 0x3173; - t['pihiragana'] = 0x3074; - t['pikatakana'] = 0x30D4; - t['pisymbolgreek'] = 0x03D6; - t['piwrarmenian'] = 0x0583; - t['plus'] = 0x002B; - t['plusbelowcmb'] = 0x031F; - t['pluscircle'] = 0x2295; - t['plusminus'] = 0x00B1; - t['plusmod'] = 0x02D6; - t['plusmonospace'] = 0xFF0B; - t['plussmall'] = 0xFE62; - t['plussuperior'] = 0x207A; - t['pmonospace'] = 0xFF50; - t['pmsquare'] = 0x33D8; - t['pohiragana'] = 0x307D; - t['pointingindexdownwhite'] = 0x261F; - t['pointingindexleftwhite'] = 0x261C; - t['pointingindexrightwhite'] = 0x261E; - t['pointingindexupwhite'] = 0x261D; - t['pokatakana'] = 0x30DD; - t['poplathai'] = 0x0E1B; - t['postalmark'] = 0x3012; - t['postalmarkface'] = 0x3020; - t['pparen'] = 0x24AB; - t['precedes'] = 0x227A; - t['prescription'] = 0x211E; - t['primemod'] = 0x02B9; - t['primereversed'] = 0x2035; - t['product'] = 0x220F; - t['projective'] = 0x2305; - t['prolongedkana'] = 0x30FC; - t['propellor'] = 0x2318; - t['propersubset'] = 0x2282; - t['propersuperset'] = 0x2283; - t['proportion'] = 0x2237; - t['proportional'] = 0x221D; - t['psi'] = 0x03C8; - t['psicyrillic'] = 0x0471; - t['psilipneumatacyrilliccmb'] = 0x0486; - t['pssquare'] = 0x33B0; - t['puhiragana'] = 0x3077; - t['pukatakana'] = 0x30D7; - t['pvsquare'] = 0x33B4; - t['pwsquare'] = 0x33BA; - t['q'] = 0x0071; - t['qadeva'] = 0x0958; - t['qadmahebrew'] = 0x05A8; - t['qafarabic'] = 0x0642; - t['qaffinalarabic'] = 0xFED6; - t['qafinitialarabic'] = 0xFED7; - t['qafmedialarabic'] = 0xFED8; - t['qamats'] = 0x05B8; - t['qamats10'] = 0x05B8; - t['qamats1a'] = 0x05B8; - t['qamats1c'] = 0x05B8; - t['qamats27'] = 0x05B8; - t['qamats29'] = 0x05B8; - t['qamats33'] = 0x05B8; - t['qamatsde'] = 0x05B8; - t['qamatshebrew'] = 0x05B8; - t['qamatsnarrowhebrew'] = 0x05B8; - t['qamatsqatanhebrew'] = 0x05B8; - t['qamatsqatannarrowhebrew'] = 0x05B8; - t['qamatsqatanquarterhebrew'] = 0x05B8; - t['qamatsqatanwidehebrew'] = 0x05B8; - t['qamatsquarterhebrew'] = 0x05B8; - t['qamatswidehebrew'] = 0x05B8; - t['qarneyparahebrew'] = 0x059F; - t['qbopomofo'] = 0x3111; - t['qcircle'] = 0x24E0; - t['qhook'] = 0x02A0; - t['qmonospace'] = 0xFF51; - t['qof'] = 0x05E7; - t['qofdagesh'] = 0xFB47; - t['qofdageshhebrew'] = 0xFB47; - t['qofhebrew'] = 0x05E7; - t['qparen'] = 0x24AC; - t['quarternote'] = 0x2669; - t['qubuts'] = 0x05BB; - t['qubuts18'] = 0x05BB; - t['qubuts25'] = 0x05BB; - t['qubuts31'] = 0x05BB; - t['qubutshebrew'] = 0x05BB; - t['qubutsnarrowhebrew'] = 0x05BB; - t['qubutsquarterhebrew'] = 0x05BB; - t['qubutswidehebrew'] = 0x05BB; - t['question'] = 0x003F; - t['questionarabic'] = 0x061F; - t['questionarmenian'] = 0x055E; - t['questiondown'] = 0x00BF; - t['questiondownsmall'] = 0xF7BF; - t['questiongreek'] = 0x037E; - t['questionmonospace'] = 0xFF1F; - t['questionsmall'] = 0xF73F; - t['quotedbl'] = 0x0022; - t['quotedblbase'] = 0x201E; - t['quotedblleft'] = 0x201C; - t['quotedblmonospace'] = 0xFF02; - t['quotedblprime'] = 0x301E; - t['quotedblprimereversed'] = 0x301D; - t['quotedblright'] = 0x201D; - t['quoteleft'] = 0x2018; - t['quoteleftreversed'] = 0x201B; - t['quotereversed'] = 0x201B; - t['quoteright'] = 0x2019; - t['quoterightn'] = 0x0149; - t['quotesinglbase'] = 0x201A; - t['quotesingle'] = 0x0027; - t['quotesinglemonospace'] = 0xFF07; - t['r'] = 0x0072; - t['raarmenian'] = 0x057C; - t['rabengali'] = 0x09B0; - t['racute'] = 0x0155; - t['radeva'] = 0x0930; - t['radical'] = 0x221A; - t['radicalex'] = 0xF8E5; - t['radoverssquare'] = 0x33AE; - t['radoverssquaredsquare'] = 0x33AF; - t['radsquare'] = 0x33AD; - t['rafe'] = 0x05BF; - t['rafehebrew'] = 0x05BF; - t['ragujarati'] = 0x0AB0; - t['ragurmukhi'] = 0x0A30; - t['rahiragana'] = 0x3089; - t['rakatakana'] = 0x30E9; - t['rakatakanahalfwidth'] = 0xFF97; - t['ralowerdiagonalbengali'] = 0x09F1; - t['ramiddlediagonalbengali'] = 0x09F0; - t['ramshorn'] = 0x0264; - t['ratio'] = 0x2236; - t['rbopomofo'] = 0x3116; - t['rcaron'] = 0x0159; - t['rcedilla'] = 0x0157; - t['rcircle'] = 0x24E1; - t['rcommaaccent'] = 0x0157; - t['rdblgrave'] = 0x0211; - t['rdotaccent'] = 0x1E59; - t['rdotbelow'] = 0x1E5B; - t['rdotbelowmacron'] = 0x1E5D; - t['referencemark'] = 0x203B; - t['reflexsubset'] = 0x2286; - t['reflexsuperset'] = 0x2287; - t['registered'] = 0x00AE; - t['registersans'] = 0xF8E8; - t['registerserif'] = 0xF6DA; - t['reharabic'] = 0x0631; - t['reharmenian'] = 0x0580; - t['rehfinalarabic'] = 0xFEAE; - t['rehiragana'] = 0x308C; - t['rekatakana'] = 0x30EC; - t['rekatakanahalfwidth'] = 0xFF9A; - t['resh'] = 0x05E8; - t['reshdageshhebrew'] = 0xFB48; - t['reshhebrew'] = 0x05E8; - t['reversedtilde'] = 0x223D; - t['reviahebrew'] = 0x0597; - t['reviamugrashhebrew'] = 0x0597; - t['revlogicalnot'] = 0x2310; - t['rfishhook'] = 0x027E; - t['rfishhookreversed'] = 0x027F; - t['rhabengali'] = 0x09DD; - t['rhadeva'] = 0x095D; - t['rho'] = 0x03C1; - t['rhook'] = 0x027D; - t['rhookturned'] = 0x027B; - t['rhookturnedsuperior'] = 0x02B5; - t['rhosymbolgreek'] = 0x03F1; - t['rhotichookmod'] = 0x02DE; - t['rieulacirclekorean'] = 0x3271; - t['rieulaparenkorean'] = 0x3211; - t['rieulcirclekorean'] = 0x3263; - t['rieulhieuhkorean'] = 0x3140; - t['rieulkiyeokkorean'] = 0x313A; - t['rieulkiyeoksioskorean'] = 0x3169; - t['rieulkorean'] = 0x3139; - t['rieulmieumkorean'] = 0x313B; - t['rieulpansioskorean'] = 0x316C; - t['rieulparenkorean'] = 0x3203; - t['rieulphieuphkorean'] = 0x313F; - t['rieulpieupkorean'] = 0x313C; - t['rieulpieupsioskorean'] = 0x316B; - t['rieulsioskorean'] = 0x313D; - t['rieulthieuthkorean'] = 0x313E; - t['rieultikeutkorean'] = 0x316A; - t['rieulyeorinhieuhkorean'] = 0x316D; - t['rightangle'] = 0x221F; - t['righttackbelowcmb'] = 0x0319; - t['righttriangle'] = 0x22BF; - t['rihiragana'] = 0x308A; - t['rikatakana'] = 0x30EA; - t['rikatakanahalfwidth'] = 0xFF98; - t['ring'] = 0x02DA; - t['ringbelowcmb'] = 0x0325; - t['ringcmb'] = 0x030A; - t['ringhalfleft'] = 0x02BF; - t['ringhalfleftarmenian'] = 0x0559; - t['ringhalfleftbelowcmb'] = 0x031C; - t['ringhalfleftcentered'] = 0x02D3; - t['ringhalfright'] = 0x02BE; - t['ringhalfrightbelowcmb'] = 0x0339; - t['ringhalfrightcentered'] = 0x02D2; - t['rinvertedbreve'] = 0x0213; - t['rittorusquare'] = 0x3351; - t['rlinebelow'] = 0x1E5F; - t['rlongleg'] = 0x027C; - t['rlonglegturned'] = 0x027A; - t['rmonospace'] = 0xFF52; - t['rohiragana'] = 0x308D; - t['rokatakana'] = 0x30ED; - t['rokatakanahalfwidth'] = 0xFF9B; - t['roruathai'] = 0x0E23; - t['rparen'] = 0x24AD; - t['rrabengali'] = 0x09DC; - t['rradeva'] = 0x0931; - t['rragurmukhi'] = 0x0A5C; - t['rreharabic'] = 0x0691; - t['rrehfinalarabic'] = 0xFB8D; - t['rrvocalicbengali'] = 0x09E0; - t['rrvocalicdeva'] = 0x0960; - t['rrvocalicgujarati'] = 0x0AE0; - t['rrvocalicvowelsignbengali'] = 0x09C4; - t['rrvocalicvowelsigndeva'] = 0x0944; - t['rrvocalicvowelsigngujarati'] = 0x0AC4; - t['rsuperior'] = 0xF6F1; - t['rtblock'] = 0x2590; - t['rturned'] = 0x0279; - t['rturnedsuperior'] = 0x02B4; - t['ruhiragana'] = 0x308B; - t['rukatakana'] = 0x30EB; - t['rukatakanahalfwidth'] = 0xFF99; - t['rupeemarkbengali'] = 0x09F2; - t['rupeesignbengali'] = 0x09F3; - t['rupiah'] = 0xF6DD; - t['ruthai'] = 0x0E24; - t['rvocalicbengali'] = 0x098B; - t['rvocalicdeva'] = 0x090B; - t['rvocalicgujarati'] = 0x0A8B; - t['rvocalicvowelsignbengali'] = 0x09C3; - t['rvocalicvowelsigndeva'] = 0x0943; - t['rvocalicvowelsigngujarati'] = 0x0AC3; - t['s'] = 0x0073; - t['sabengali'] = 0x09B8; - t['sacute'] = 0x015B; - t['sacutedotaccent'] = 0x1E65; - t['sadarabic'] = 0x0635; - t['sadeva'] = 0x0938; - t['sadfinalarabic'] = 0xFEBA; - t['sadinitialarabic'] = 0xFEBB; - t['sadmedialarabic'] = 0xFEBC; - t['sagujarati'] = 0x0AB8; - t['sagurmukhi'] = 0x0A38; - t['sahiragana'] = 0x3055; - t['sakatakana'] = 0x30B5; - t['sakatakanahalfwidth'] = 0xFF7B; - t['sallallahoualayhewasallamarabic'] = 0xFDFA; - t['samekh'] = 0x05E1; - t['samekhdagesh'] = 0xFB41; - t['samekhdageshhebrew'] = 0xFB41; - t['samekhhebrew'] = 0x05E1; - t['saraaathai'] = 0x0E32; - t['saraaethai'] = 0x0E41; - t['saraaimaimalaithai'] = 0x0E44; - t['saraaimaimuanthai'] = 0x0E43; - t['saraamthai'] = 0x0E33; - t['saraathai'] = 0x0E30; - t['saraethai'] = 0x0E40; - t['saraiileftthai'] = 0xF886; - t['saraiithai'] = 0x0E35; - t['saraileftthai'] = 0xF885; - t['saraithai'] = 0x0E34; - t['saraothai'] = 0x0E42; - t['saraueeleftthai'] = 0xF888; - t['saraueethai'] = 0x0E37; - t['saraueleftthai'] = 0xF887; - t['sarauethai'] = 0x0E36; - t['sarauthai'] = 0x0E38; - t['sarauuthai'] = 0x0E39; - t['sbopomofo'] = 0x3119; - t['scaron'] = 0x0161; - t['scarondotaccent'] = 0x1E67; - t['scedilla'] = 0x015F; - t['schwa'] = 0x0259; - t['schwacyrillic'] = 0x04D9; - t['schwadieresiscyrillic'] = 0x04DB; - t['schwahook'] = 0x025A; - t['scircle'] = 0x24E2; - t['scircumflex'] = 0x015D; - t['scommaaccent'] = 0x0219; - t['sdotaccent'] = 0x1E61; - t['sdotbelow'] = 0x1E63; - t['sdotbelowdotaccent'] = 0x1E69; - t['seagullbelowcmb'] = 0x033C; - t['second'] = 0x2033; - t['secondtonechinese'] = 0x02CA; - t['section'] = 0x00A7; - t['seenarabic'] = 0x0633; - t['seenfinalarabic'] = 0xFEB2; - t['seeninitialarabic'] = 0xFEB3; - t['seenmedialarabic'] = 0xFEB4; - t['segol'] = 0x05B6; - t['segol13'] = 0x05B6; - t['segol1f'] = 0x05B6; - t['segol2c'] = 0x05B6; - t['segolhebrew'] = 0x05B6; - t['segolnarrowhebrew'] = 0x05B6; - t['segolquarterhebrew'] = 0x05B6; - t['segoltahebrew'] = 0x0592; - t['segolwidehebrew'] = 0x05B6; - t['seharmenian'] = 0x057D; - t['sehiragana'] = 0x305B; - t['sekatakana'] = 0x30BB; - t['sekatakanahalfwidth'] = 0xFF7E; - t['semicolon'] = 0x003B; - t['semicolonarabic'] = 0x061B; - t['semicolonmonospace'] = 0xFF1B; - t['semicolonsmall'] = 0xFE54; - t['semivoicedmarkkana'] = 0x309C; - t['semivoicedmarkkanahalfwidth'] = 0xFF9F; - t['sentisquare'] = 0x3322; - t['sentosquare'] = 0x3323; - t['seven'] = 0x0037; - t['sevenarabic'] = 0x0667; - t['sevenbengali'] = 0x09ED; - t['sevencircle'] = 0x2466; - t['sevencircleinversesansserif'] = 0x2790; - t['sevendeva'] = 0x096D; - t['seveneighths'] = 0x215E; - t['sevengujarati'] = 0x0AED; - t['sevengurmukhi'] = 0x0A6D; - t['sevenhackarabic'] = 0x0667; - t['sevenhangzhou'] = 0x3027; - t['sevenideographicparen'] = 0x3226; - t['seveninferior'] = 0x2087; - t['sevenmonospace'] = 0xFF17; - t['sevenoldstyle'] = 0xF737; - t['sevenparen'] = 0x247A; - t['sevenperiod'] = 0x248E; - t['sevenpersian'] = 0x06F7; - t['sevenroman'] = 0x2176; - t['sevensuperior'] = 0x2077; - t['seventeencircle'] = 0x2470; - t['seventeenparen'] = 0x2484; - t['seventeenperiod'] = 0x2498; - t['seventhai'] = 0x0E57; - t['sfthyphen'] = 0x00AD; - t['shaarmenian'] = 0x0577; - t['shabengali'] = 0x09B6; - t['shacyrillic'] = 0x0448; - t['shaddaarabic'] = 0x0651; - t['shaddadammaarabic'] = 0xFC61; - t['shaddadammatanarabic'] = 0xFC5E; - t['shaddafathaarabic'] = 0xFC60; - t['shaddakasraarabic'] = 0xFC62; - t['shaddakasratanarabic'] = 0xFC5F; - t['shade'] = 0x2592; - t['shadedark'] = 0x2593; - t['shadelight'] = 0x2591; - t['shademedium'] = 0x2592; - t['shadeva'] = 0x0936; - t['shagujarati'] = 0x0AB6; - t['shagurmukhi'] = 0x0A36; - t['shalshelethebrew'] = 0x0593; - t['shbopomofo'] = 0x3115; - t['shchacyrillic'] = 0x0449; - t['sheenarabic'] = 0x0634; - t['sheenfinalarabic'] = 0xFEB6; - t['sheeninitialarabic'] = 0xFEB7; - t['sheenmedialarabic'] = 0xFEB8; - t['sheicoptic'] = 0x03E3; - t['sheqel'] = 0x20AA; - t['sheqelhebrew'] = 0x20AA; - t['sheva'] = 0x05B0; - t['sheva115'] = 0x05B0; - t['sheva15'] = 0x05B0; - t['sheva22'] = 0x05B0; - t['sheva2e'] = 0x05B0; - t['shevahebrew'] = 0x05B0; - t['shevanarrowhebrew'] = 0x05B0; - t['shevaquarterhebrew'] = 0x05B0; - t['shevawidehebrew'] = 0x05B0; - t['shhacyrillic'] = 0x04BB; - t['shimacoptic'] = 0x03ED; - t['shin'] = 0x05E9; - t['shindagesh'] = 0xFB49; - t['shindageshhebrew'] = 0xFB49; - t['shindageshshindot'] = 0xFB2C; - t['shindageshshindothebrew'] = 0xFB2C; - t['shindageshsindot'] = 0xFB2D; - t['shindageshsindothebrew'] = 0xFB2D; - t['shindothebrew'] = 0x05C1; - t['shinhebrew'] = 0x05E9; - t['shinshindot'] = 0xFB2A; - t['shinshindothebrew'] = 0xFB2A; - t['shinsindot'] = 0xFB2B; - t['shinsindothebrew'] = 0xFB2B; - t['shook'] = 0x0282; - t['sigma'] = 0x03C3; - t['sigma1'] = 0x03C2; - t['sigmafinal'] = 0x03C2; - t['sigmalunatesymbolgreek'] = 0x03F2; - t['sihiragana'] = 0x3057; - t['sikatakana'] = 0x30B7; - t['sikatakanahalfwidth'] = 0xFF7C; - t['siluqhebrew'] = 0x05BD; - t['siluqlefthebrew'] = 0x05BD; - t['similar'] = 0x223C; - t['sindothebrew'] = 0x05C2; - t['siosacirclekorean'] = 0x3274; - t['siosaparenkorean'] = 0x3214; - t['sioscieuckorean'] = 0x317E; - t['sioscirclekorean'] = 0x3266; - t['sioskiyeokkorean'] = 0x317A; - t['sioskorean'] = 0x3145; - t['siosnieunkorean'] = 0x317B; - t['siosparenkorean'] = 0x3206; - t['siospieupkorean'] = 0x317D; - t['siostikeutkorean'] = 0x317C; - t['six'] = 0x0036; - t['sixarabic'] = 0x0666; - t['sixbengali'] = 0x09EC; - t['sixcircle'] = 0x2465; - t['sixcircleinversesansserif'] = 0x278F; - t['sixdeva'] = 0x096C; - t['sixgujarati'] = 0x0AEC; - t['sixgurmukhi'] = 0x0A6C; - t['sixhackarabic'] = 0x0666; - t['sixhangzhou'] = 0x3026; - t['sixideographicparen'] = 0x3225; - t['sixinferior'] = 0x2086; - t['sixmonospace'] = 0xFF16; - t['sixoldstyle'] = 0xF736; - t['sixparen'] = 0x2479; - t['sixperiod'] = 0x248D; - t['sixpersian'] = 0x06F6; - t['sixroman'] = 0x2175; - t['sixsuperior'] = 0x2076; - t['sixteencircle'] = 0x246F; - t['sixteencurrencydenominatorbengali'] = 0x09F9; - t['sixteenparen'] = 0x2483; - t['sixteenperiod'] = 0x2497; - t['sixthai'] = 0x0E56; - t['slash'] = 0x002F; - t['slashmonospace'] = 0xFF0F; - t['slong'] = 0x017F; - t['slongdotaccent'] = 0x1E9B; - t['smileface'] = 0x263A; - t['smonospace'] = 0xFF53; - t['sofpasuqhebrew'] = 0x05C3; - t['softhyphen'] = 0x00AD; - t['softsigncyrillic'] = 0x044C; - t['sohiragana'] = 0x305D; - t['sokatakana'] = 0x30BD; - t['sokatakanahalfwidth'] = 0xFF7F; - t['soliduslongoverlaycmb'] = 0x0338; - t['solidusshortoverlaycmb'] = 0x0337; - t['sorusithai'] = 0x0E29; - t['sosalathai'] = 0x0E28; - t['sosothai'] = 0x0E0B; - t['sosuathai'] = 0x0E2A; - t['space'] = 0x0020; - t['spacehackarabic'] = 0x0020; - t['spade'] = 0x2660; - t['spadesuitblack'] = 0x2660; - t['spadesuitwhite'] = 0x2664; - t['sparen'] = 0x24AE; - t['squarebelowcmb'] = 0x033B; - t['squarecc'] = 0x33C4; - t['squarecm'] = 0x339D; - t['squarediagonalcrosshatchfill'] = 0x25A9; - t['squarehorizontalfill'] = 0x25A4; - t['squarekg'] = 0x338F; - t['squarekm'] = 0x339E; - t['squarekmcapital'] = 0x33CE; - t['squareln'] = 0x33D1; - t['squarelog'] = 0x33D2; - t['squaremg'] = 0x338E; - t['squaremil'] = 0x33D5; - t['squaremm'] = 0x339C; - t['squaremsquared'] = 0x33A1; - t['squareorthogonalcrosshatchfill'] = 0x25A6; - t['squareupperlefttolowerrightfill'] = 0x25A7; - t['squareupperrighttolowerleftfill'] = 0x25A8; - t['squareverticalfill'] = 0x25A5; - t['squarewhitewithsmallblack'] = 0x25A3; - t['srsquare'] = 0x33DB; - t['ssabengali'] = 0x09B7; - t['ssadeva'] = 0x0937; - t['ssagujarati'] = 0x0AB7; - t['ssangcieuckorean'] = 0x3149; - t['ssanghieuhkorean'] = 0x3185; - t['ssangieungkorean'] = 0x3180; - t['ssangkiyeokkorean'] = 0x3132; - t['ssangnieunkorean'] = 0x3165; - t['ssangpieupkorean'] = 0x3143; - t['ssangsioskorean'] = 0x3146; - t['ssangtikeutkorean'] = 0x3138; - t['ssuperior'] = 0xF6F2; - t['sterling'] = 0x00A3; - t['sterlingmonospace'] = 0xFFE1; - t['strokelongoverlaycmb'] = 0x0336; - t['strokeshortoverlaycmb'] = 0x0335; - t['subset'] = 0x2282; - t['subsetnotequal'] = 0x228A; - t['subsetorequal'] = 0x2286; - t['succeeds'] = 0x227B; - t['suchthat'] = 0x220B; - t['suhiragana'] = 0x3059; - t['sukatakana'] = 0x30B9; - t['sukatakanahalfwidth'] = 0xFF7D; - t['sukunarabic'] = 0x0652; - t['summation'] = 0x2211; - t['sun'] = 0x263C; - t['superset'] = 0x2283; - t['supersetnotequal'] = 0x228B; - t['supersetorequal'] = 0x2287; - t['svsquare'] = 0x33DC; - t['syouwaerasquare'] = 0x337C; - t['t'] = 0x0074; - t['tabengali'] = 0x09A4; - t['tackdown'] = 0x22A4; - t['tackleft'] = 0x22A3; - t['tadeva'] = 0x0924; - t['tagujarati'] = 0x0AA4; - t['tagurmukhi'] = 0x0A24; - t['taharabic'] = 0x0637; - t['tahfinalarabic'] = 0xFEC2; - t['tahinitialarabic'] = 0xFEC3; - t['tahiragana'] = 0x305F; - t['tahmedialarabic'] = 0xFEC4; - t['taisyouerasquare'] = 0x337D; - t['takatakana'] = 0x30BF; - t['takatakanahalfwidth'] = 0xFF80; - t['tatweelarabic'] = 0x0640; - t['tau'] = 0x03C4; - t['tav'] = 0x05EA; - t['tavdages'] = 0xFB4A; - t['tavdagesh'] = 0xFB4A; - t['tavdageshhebrew'] = 0xFB4A; - t['tavhebrew'] = 0x05EA; - t['tbar'] = 0x0167; - t['tbopomofo'] = 0x310A; - t['tcaron'] = 0x0165; - t['tccurl'] = 0x02A8; - t['tcedilla'] = 0x0163; - t['tcheharabic'] = 0x0686; - t['tchehfinalarabic'] = 0xFB7B; - t['tchehinitialarabic'] = 0xFB7C; - t['tchehmedialarabic'] = 0xFB7D; - t['tcircle'] = 0x24E3; - t['tcircumflexbelow'] = 0x1E71; - t['tcommaaccent'] = 0x0163; - t['tdieresis'] = 0x1E97; - t['tdotaccent'] = 0x1E6B; - t['tdotbelow'] = 0x1E6D; - t['tecyrillic'] = 0x0442; - t['tedescendercyrillic'] = 0x04AD; - t['teharabic'] = 0x062A; - t['tehfinalarabic'] = 0xFE96; - t['tehhahinitialarabic'] = 0xFCA2; - t['tehhahisolatedarabic'] = 0xFC0C; - t['tehinitialarabic'] = 0xFE97; - t['tehiragana'] = 0x3066; - t['tehjeeminitialarabic'] = 0xFCA1; - t['tehjeemisolatedarabic'] = 0xFC0B; - t['tehmarbutaarabic'] = 0x0629; - t['tehmarbutafinalarabic'] = 0xFE94; - t['tehmedialarabic'] = 0xFE98; - t['tehmeeminitialarabic'] = 0xFCA4; - t['tehmeemisolatedarabic'] = 0xFC0E; - t['tehnoonfinalarabic'] = 0xFC73; - t['tekatakana'] = 0x30C6; - t['tekatakanahalfwidth'] = 0xFF83; - t['telephone'] = 0x2121; - t['telephoneblack'] = 0x260E; - t['telishagedolahebrew'] = 0x05A0; - t['telishaqetanahebrew'] = 0x05A9; - t['tencircle'] = 0x2469; - t['tenideographicparen'] = 0x3229; - t['tenparen'] = 0x247D; - t['tenperiod'] = 0x2491; - t['tenroman'] = 0x2179; - t['tesh'] = 0x02A7; - t['tet'] = 0x05D8; - t['tetdagesh'] = 0xFB38; - t['tetdageshhebrew'] = 0xFB38; - t['tethebrew'] = 0x05D8; - t['tetsecyrillic'] = 0x04B5; - t['tevirhebrew'] = 0x059B; - t['tevirlefthebrew'] = 0x059B; - t['thabengali'] = 0x09A5; - t['thadeva'] = 0x0925; - t['thagujarati'] = 0x0AA5; - t['thagurmukhi'] = 0x0A25; - t['thalarabic'] = 0x0630; - t['thalfinalarabic'] = 0xFEAC; - t['thanthakhatlowleftthai'] = 0xF898; - t['thanthakhatlowrightthai'] = 0xF897; - t['thanthakhatthai'] = 0x0E4C; - t['thanthakhatupperleftthai'] = 0xF896; - t['theharabic'] = 0x062B; - t['thehfinalarabic'] = 0xFE9A; - t['thehinitialarabic'] = 0xFE9B; - t['thehmedialarabic'] = 0xFE9C; - t['thereexists'] = 0x2203; - t['therefore'] = 0x2234; - t['theta'] = 0x03B8; - t['theta1'] = 0x03D1; - t['thetasymbolgreek'] = 0x03D1; - t['thieuthacirclekorean'] = 0x3279; - t['thieuthaparenkorean'] = 0x3219; - t['thieuthcirclekorean'] = 0x326B; - t['thieuthkorean'] = 0x314C; - t['thieuthparenkorean'] = 0x320B; - t['thirteencircle'] = 0x246C; - t['thirteenparen'] = 0x2480; - t['thirteenperiod'] = 0x2494; - t['thonangmonthothai'] = 0x0E11; - t['thook'] = 0x01AD; - t['thophuthaothai'] = 0x0E12; - t['thorn'] = 0x00FE; - t['thothahanthai'] = 0x0E17; - t['thothanthai'] = 0x0E10; - t['thothongthai'] = 0x0E18; - t['thothungthai'] = 0x0E16; - t['thousandcyrillic'] = 0x0482; - t['thousandsseparatorarabic'] = 0x066C; - t['thousandsseparatorpersian'] = 0x066C; - t['three'] = 0x0033; - t['threearabic'] = 0x0663; - t['threebengali'] = 0x09E9; - t['threecircle'] = 0x2462; - t['threecircleinversesansserif'] = 0x278C; - t['threedeva'] = 0x0969; - t['threeeighths'] = 0x215C; - t['threegujarati'] = 0x0AE9; - t['threegurmukhi'] = 0x0A69; - t['threehackarabic'] = 0x0663; - t['threehangzhou'] = 0x3023; - t['threeideographicparen'] = 0x3222; - t['threeinferior'] = 0x2083; - t['threemonospace'] = 0xFF13; - t['threenumeratorbengali'] = 0x09F6; - t['threeoldstyle'] = 0xF733; - t['threeparen'] = 0x2476; - t['threeperiod'] = 0x248A; - t['threepersian'] = 0x06F3; - t['threequarters'] = 0x00BE; - t['threequartersemdash'] = 0xF6DE; - t['threeroman'] = 0x2172; - t['threesuperior'] = 0x00B3; - t['threethai'] = 0x0E53; - t['thzsquare'] = 0x3394; - t['tihiragana'] = 0x3061; - t['tikatakana'] = 0x30C1; - t['tikatakanahalfwidth'] = 0xFF81; - t['tikeutacirclekorean'] = 0x3270; - t['tikeutaparenkorean'] = 0x3210; - t['tikeutcirclekorean'] = 0x3262; - t['tikeutkorean'] = 0x3137; - t['tikeutparenkorean'] = 0x3202; - t['tilde'] = 0x02DC; - t['tildebelowcmb'] = 0x0330; - t['tildecmb'] = 0x0303; - t['tildecomb'] = 0x0303; - t['tildedoublecmb'] = 0x0360; - t['tildeoperator'] = 0x223C; - t['tildeoverlaycmb'] = 0x0334; - t['tildeverticalcmb'] = 0x033E; - t['timescircle'] = 0x2297; - t['tipehahebrew'] = 0x0596; - t['tipehalefthebrew'] = 0x0596; - t['tippigurmukhi'] = 0x0A70; - t['titlocyrilliccmb'] = 0x0483; - t['tiwnarmenian'] = 0x057F; - t['tlinebelow'] = 0x1E6F; - t['tmonospace'] = 0xFF54; - t['toarmenian'] = 0x0569; - t['tohiragana'] = 0x3068; - t['tokatakana'] = 0x30C8; - t['tokatakanahalfwidth'] = 0xFF84; - t['tonebarextrahighmod'] = 0x02E5; - t['tonebarextralowmod'] = 0x02E9; - t['tonebarhighmod'] = 0x02E6; - t['tonebarlowmod'] = 0x02E8; - t['tonebarmidmod'] = 0x02E7; - t['tonefive'] = 0x01BD; - t['tonesix'] = 0x0185; - t['tonetwo'] = 0x01A8; - t['tonos'] = 0x0384; - t['tonsquare'] = 0x3327; - t['topatakthai'] = 0x0E0F; - t['tortoiseshellbracketleft'] = 0x3014; - t['tortoiseshellbracketleftsmall'] = 0xFE5D; - t['tortoiseshellbracketleftvertical'] = 0xFE39; - t['tortoiseshellbracketright'] = 0x3015; - t['tortoiseshellbracketrightsmall'] = 0xFE5E; - t['tortoiseshellbracketrightvertical'] = 0xFE3A; - t['totaothai'] = 0x0E15; - t['tpalatalhook'] = 0x01AB; - t['tparen'] = 0x24AF; - t['trademark'] = 0x2122; - t['trademarksans'] = 0xF8EA; - t['trademarkserif'] = 0xF6DB; - t['tretroflexhook'] = 0x0288; - t['triagdn'] = 0x25BC; - t['triaglf'] = 0x25C4; - t['triagrt'] = 0x25BA; - t['triagup'] = 0x25B2; - t['ts'] = 0x02A6; - t['tsadi'] = 0x05E6; - t['tsadidagesh'] = 0xFB46; - t['tsadidageshhebrew'] = 0xFB46; - t['tsadihebrew'] = 0x05E6; - t['tsecyrillic'] = 0x0446; - t['tsere'] = 0x05B5; - t['tsere12'] = 0x05B5; - t['tsere1e'] = 0x05B5; - t['tsere2b'] = 0x05B5; - t['tserehebrew'] = 0x05B5; - t['tserenarrowhebrew'] = 0x05B5; - t['tserequarterhebrew'] = 0x05B5; - t['tserewidehebrew'] = 0x05B5; - t['tshecyrillic'] = 0x045B; - t['tsuperior'] = 0xF6F3; - t['ttabengali'] = 0x099F; - t['ttadeva'] = 0x091F; - t['ttagujarati'] = 0x0A9F; - t['ttagurmukhi'] = 0x0A1F; - t['tteharabic'] = 0x0679; - t['ttehfinalarabic'] = 0xFB67; - t['ttehinitialarabic'] = 0xFB68; - t['ttehmedialarabic'] = 0xFB69; - t['tthabengali'] = 0x09A0; - t['tthadeva'] = 0x0920; - t['tthagujarati'] = 0x0AA0; - t['tthagurmukhi'] = 0x0A20; - t['tturned'] = 0x0287; - t['tuhiragana'] = 0x3064; - t['tukatakana'] = 0x30C4; - t['tukatakanahalfwidth'] = 0xFF82; - t['tusmallhiragana'] = 0x3063; - t['tusmallkatakana'] = 0x30C3; - t['tusmallkatakanahalfwidth'] = 0xFF6F; - t['twelvecircle'] = 0x246B; - t['twelveparen'] = 0x247F; - t['twelveperiod'] = 0x2493; - t['twelveroman'] = 0x217B; - t['twentycircle'] = 0x2473; - t['twentyhangzhou'] = 0x5344; - t['twentyparen'] = 0x2487; - t['twentyperiod'] = 0x249B; - t['two'] = 0x0032; - t['twoarabic'] = 0x0662; - t['twobengali'] = 0x09E8; - t['twocircle'] = 0x2461; - t['twocircleinversesansserif'] = 0x278B; - t['twodeva'] = 0x0968; - t['twodotenleader'] = 0x2025; - t['twodotleader'] = 0x2025; - t['twodotleadervertical'] = 0xFE30; - t['twogujarati'] = 0x0AE8; - t['twogurmukhi'] = 0x0A68; - t['twohackarabic'] = 0x0662; - t['twohangzhou'] = 0x3022; - t['twoideographicparen'] = 0x3221; - t['twoinferior'] = 0x2082; - t['twomonospace'] = 0xFF12; - t['twonumeratorbengali'] = 0x09F5; - t['twooldstyle'] = 0xF732; - t['twoparen'] = 0x2475; - t['twoperiod'] = 0x2489; - t['twopersian'] = 0x06F2; - t['tworoman'] = 0x2171; - t['twostroke'] = 0x01BB; - t['twosuperior'] = 0x00B2; - t['twothai'] = 0x0E52; - t['twothirds'] = 0x2154; - t['u'] = 0x0075; - t['uacute'] = 0x00FA; - t['ubar'] = 0x0289; - t['ubengali'] = 0x0989; - t['ubopomofo'] = 0x3128; - t['ubreve'] = 0x016D; - t['ucaron'] = 0x01D4; - t['ucircle'] = 0x24E4; - t['ucircumflex'] = 0x00FB; - t['ucircumflexbelow'] = 0x1E77; - t['ucyrillic'] = 0x0443; - t['udattadeva'] = 0x0951; - t['udblacute'] = 0x0171; - t['udblgrave'] = 0x0215; - t['udeva'] = 0x0909; - t['udieresis'] = 0x00FC; - t['udieresisacute'] = 0x01D8; - t['udieresisbelow'] = 0x1E73; - t['udieresiscaron'] = 0x01DA; - t['udieresiscyrillic'] = 0x04F1; - t['udieresisgrave'] = 0x01DC; - t['udieresismacron'] = 0x01D6; - t['udotbelow'] = 0x1EE5; - t['ugrave'] = 0x00F9; - t['ugujarati'] = 0x0A89; - t['ugurmukhi'] = 0x0A09; - t['uhiragana'] = 0x3046; - t['uhookabove'] = 0x1EE7; - t['uhorn'] = 0x01B0; - t['uhornacute'] = 0x1EE9; - t['uhorndotbelow'] = 0x1EF1; - t['uhorngrave'] = 0x1EEB; - t['uhornhookabove'] = 0x1EED; - t['uhorntilde'] = 0x1EEF; - t['uhungarumlaut'] = 0x0171; - t['uhungarumlautcyrillic'] = 0x04F3; - t['uinvertedbreve'] = 0x0217; - t['ukatakana'] = 0x30A6; - t['ukatakanahalfwidth'] = 0xFF73; - t['ukcyrillic'] = 0x0479; - t['ukorean'] = 0x315C; - t['umacron'] = 0x016B; - t['umacroncyrillic'] = 0x04EF; - t['umacrondieresis'] = 0x1E7B; - t['umatragurmukhi'] = 0x0A41; - t['umonospace'] = 0xFF55; - t['underscore'] = 0x005F; - t['underscoredbl'] = 0x2017; - t['underscoremonospace'] = 0xFF3F; - t['underscorevertical'] = 0xFE33; - t['underscorewavy'] = 0xFE4F; - t['union'] = 0x222A; - t['universal'] = 0x2200; - t['uogonek'] = 0x0173; - t['uparen'] = 0x24B0; - t['upblock'] = 0x2580; - t['upperdothebrew'] = 0x05C4; - t['upsilon'] = 0x03C5; - t['upsilondieresis'] = 0x03CB; - t['upsilondieresistonos'] = 0x03B0; - t['upsilonlatin'] = 0x028A; - t['upsilontonos'] = 0x03CD; - t['uptackbelowcmb'] = 0x031D; - t['uptackmod'] = 0x02D4; - t['uragurmukhi'] = 0x0A73; - t['uring'] = 0x016F; - t['ushortcyrillic'] = 0x045E; - t['usmallhiragana'] = 0x3045; - t['usmallkatakana'] = 0x30A5; - t['usmallkatakanahalfwidth'] = 0xFF69; - t['ustraightcyrillic'] = 0x04AF; - t['ustraightstrokecyrillic'] = 0x04B1; - t['utilde'] = 0x0169; - t['utildeacute'] = 0x1E79; - t['utildebelow'] = 0x1E75; - t['uubengali'] = 0x098A; - t['uudeva'] = 0x090A; - t['uugujarati'] = 0x0A8A; - t['uugurmukhi'] = 0x0A0A; - t['uumatragurmukhi'] = 0x0A42; - t['uuvowelsignbengali'] = 0x09C2; - t['uuvowelsigndeva'] = 0x0942; - t['uuvowelsigngujarati'] = 0x0AC2; - t['uvowelsignbengali'] = 0x09C1; - t['uvowelsigndeva'] = 0x0941; - t['uvowelsigngujarati'] = 0x0AC1; - t['v'] = 0x0076; - t['vadeva'] = 0x0935; - t['vagujarati'] = 0x0AB5; - t['vagurmukhi'] = 0x0A35; - t['vakatakana'] = 0x30F7; - t['vav'] = 0x05D5; - t['vavdagesh'] = 0xFB35; - t['vavdagesh65'] = 0xFB35; - t['vavdageshhebrew'] = 0xFB35; - t['vavhebrew'] = 0x05D5; - t['vavholam'] = 0xFB4B; - t['vavholamhebrew'] = 0xFB4B; - t['vavvavhebrew'] = 0x05F0; - t['vavyodhebrew'] = 0x05F1; - t['vcircle'] = 0x24E5; - t['vdotbelow'] = 0x1E7F; - t['vecyrillic'] = 0x0432; - t['veharabic'] = 0x06A4; - t['vehfinalarabic'] = 0xFB6B; - t['vehinitialarabic'] = 0xFB6C; - t['vehmedialarabic'] = 0xFB6D; - t['vekatakana'] = 0x30F9; - t['venus'] = 0x2640; - t['verticalbar'] = 0x007C; - t['verticallineabovecmb'] = 0x030D; - t['verticallinebelowcmb'] = 0x0329; - t['verticallinelowmod'] = 0x02CC; - t['verticallinemod'] = 0x02C8; - t['vewarmenian'] = 0x057E; - t['vhook'] = 0x028B; - t['vikatakana'] = 0x30F8; - t['viramabengali'] = 0x09CD; - t['viramadeva'] = 0x094D; - t['viramagujarati'] = 0x0ACD; - t['visargabengali'] = 0x0983; - t['visargadeva'] = 0x0903; - t['visargagujarati'] = 0x0A83; - t['vmonospace'] = 0xFF56; - t['voarmenian'] = 0x0578; - t['voicediterationhiragana'] = 0x309E; - t['voicediterationkatakana'] = 0x30FE; - t['voicedmarkkana'] = 0x309B; - t['voicedmarkkanahalfwidth'] = 0xFF9E; - t['vokatakana'] = 0x30FA; - t['vparen'] = 0x24B1; - t['vtilde'] = 0x1E7D; - t['vturned'] = 0x028C; - t['vuhiragana'] = 0x3094; - t['vukatakana'] = 0x30F4; - t['w'] = 0x0077; - t['wacute'] = 0x1E83; - t['waekorean'] = 0x3159; - t['wahiragana'] = 0x308F; - t['wakatakana'] = 0x30EF; - t['wakatakanahalfwidth'] = 0xFF9C; - t['wakorean'] = 0x3158; - t['wasmallhiragana'] = 0x308E; - t['wasmallkatakana'] = 0x30EE; - t['wattosquare'] = 0x3357; - t['wavedash'] = 0x301C; - t['wavyunderscorevertical'] = 0xFE34; - t['wawarabic'] = 0x0648; - t['wawfinalarabic'] = 0xFEEE; - t['wawhamzaabovearabic'] = 0x0624; - t['wawhamzaabovefinalarabic'] = 0xFE86; - t['wbsquare'] = 0x33DD; - t['wcircle'] = 0x24E6; - t['wcircumflex'] = 0x0175; - t['wdieresis'] = 0x1E85; - t['wdotaccent'] = 0x1E87; - t['wdotbelow'] = 0x1E89; - t['wehiragana'] = 0x3091; - t['weierstrass'] = 0x2118; - t['wekatakana'] = 0x30F1; - t['wekorean'] = 0x315E; - t['weokorean'] = 0x315D; - t['wgrave'] = 0x1E81; - t['whitebullet'] = 0x25E6; - t['whitecircle'] = 0x25CB; - t['whitecircleinverse'] = 0x25D9; - t['whitecornerbracketleft'] = 0x300E; - t['whitecornerbracketleftvertical'] = 0xFE43; - t['whitecornerbracketright'] = 0x300F; - t['whitecornerbracketrightvertical'] = 0xFE44; - t['whitediamond'] = 0x25C7; - t['whitediamondcontainingblacksmalldiamond'] = 0x25C8; - t['whitedownpointingsmalltriangle'] = 0x25BF; - t['whitedownpointingtriangle'] = 0x25BD; - t['whiteleftpointingsmalltriangle'] = 0x25C3; - t['whiteleftpointingtriangle'] = 0x25C1; - t['whitelenticularbracketleft'] = 0x3016; - t['whitelenticularbracketright'] = 0x3017; - t['whiterightpointingsmalltriangle'] = 0x25B9; - t['whiterightpointingtriangle'] = 0x25B7; - t['whitesmallsquare'] = 0x25AB; - t['whitesmilingface'] = 0x263A; - t['whitesquare'] = 0x25A1; - t['whitestar'] = 0x2606; - t['whitetelephone'] = 0x260F; - t['whitetortoiseshellbracketleft'] = 0x3018; - t['whitetortoiseshellbracketright'] = 0x3019; - t['whiteuppointingsmalltriangle'] = 0x25B5; - t['whiteuppointingtriangle'] = 0x25B3; - t['wihiragana'] = 0x3090; - t['wikatakana'] = 0x30F0; - t['wikorean'] = 0x315F; - t['wmonospace'] = 0xFF57; - t['wohiragana'] = 0x3092; - t['wokatakana'] = 0x30F2; - t['wokatakanahalfwidth'] = 0xFF66; - t['won'] = 0x20A9; - t['wonmonospace'] = 0xFFE6; - t['wowaenthai'] = 0x0E27; - t['wparen'] = 0x24B2; - t['wring'] = 0x1E98; - t['wsuperior'] = 0x02B7; - t['wturned'] = 0x028D; - t['wynn'] = 0x01BF; - t['x'] = 0x0078; - t['xabovecmb'] = 0x033D; - t['xbopomofo'] = 0x3112; - t['xcircle'] = 0x24E7; - t['xdieresis'] = 0x1E8D; - t['xdotaccent'] = 0x1E8B; - t['xeharmenian'] = 0x056D; - t['xi'] = 0x03BE; - t['xmonospace'] = 0xFF58; - t['xparen'] = 0x24B3; - t['xsuperior'] = 0x02E3; - t['y'] = 0x0079; - t['yaadosquare'] = 0x334E; - t['yabengali'] = 0x09AF; - t['yacute'] = 0x00FD; - t['yadeva'] = 0x092F; - t['yaekorean'] = 0x3152; - t['yagujarati'] = 0x0AAF; - t['yagurmukhi'] = 0x0A2F; - t['yahiragana'] = 0x3084; - t['yakatakana'] = 0x30E4; - t['yakatakanahalfwidth'] = 0xFF94; - t['yakorean'] = 0x3151; - t['yamakkanthai'] = 0x0E4E; - t['yasmallhiragana'] = 0x3083; - t['yasmallkatakana'] = 0x30E3; - t['yasmallkatakanahalfwidth'] = 0xFF6C; - t['yatcyrillic'] = 0x0463; - t['ycircle'] = 0x24E8; - t['ycircumflex'] = 0x0177; - t['ydieresis'] = 0x00FF; - t['ydotaccent'] = 0x1E8F; - t['ydotbelow'] = 0x1EF5; - t['yeharabic'] = 0x064A; - t['yehbarreearabic'] = 0x06D2; - t['yehbarreefinalarabic'] = 0xFBAF; - t['yehfinalarabic'] = 0xFEF2; - t['yehhamzaabovearabic'] = 0x0626; - t['yehhamzaabovefinalarabic'] = 0xFE8A; - t['yehhamzaaboveinitialarabic'] = 0xFE8B; - t['yehhamzaabovemedialarabic'] = 0xFE8C; - t['yehinitialarabic'] = 0xFEF3; - t['yehmedialarabic'] = 0xFEF4; - t['yehmeeminitialarabic'] = 0xFCDD; - t['yehmeemisolatedarabic'] = 0xFC58; - t['yehnoonfinalarabic'] = 0xFC94; - t['yehthreedotsbelowarabic'] = 0x06D1; - t['yekorean'] = 0x3156; - t['yen'] = 0x00A5; - t['yenmonospace'] = 0xFFE5; - t['yeokorean'] = 0x3155; - t['yeorinhieuhkorean'] = 0x3186; - t['yerahbenyomohebrew'] = 0x05AA; - t['yerahbenyomolefthebrew'] = 0x05AA; - t['yericyrillic'] = 0x044B; - t['yerudieresiscyrillic'] = 0x04F9; - t['yesieungkorean'] = 0x3181; - t['yesieungpansioskorean'] = 0x3183; - t['yesieungsioskorean'] = 0x3182; - t['yetivhebrew'] = 0x059A; - t['ygrave'] = 0x1EF3; - t['yhook'] = 0x01B4; - t['yhookabove'] = 0x1EF7; - t['yiarmenian'] = 0x0575; - t['yicyrillic'] = 0x0457; - t['yikorean'] = 0x3162; - t['yinyang'] = 0x262F; - t['yiwnarmenian'] = 0x0582; - t['ymonospace'] = 0xFF59; - t['yod'] = 0x05D9; - t['yoddagesh'] = 0xFB39; - t['yoddageshhebrew'] = 0xFB39; - t['yodhebrew'] = 0x05D9; - t['yodyodhebrew'] = 0x05F2; - t['yodyodpatahhebrew'] = 0xFB1F; - t['yohiragana'] = 0x3088; - t['yoikorean'] = 0x3189; - t['yokatakana'] = 0x30E8; - t['yokatakanahalfwidth'] = 0xFF96; - t['yokorean'] = 0x315B; - t['yosmallhiragana'] = 0x3087; - t['yosmallkatakana'] = 0x30E7; - t['yosmallkatakanahalfwidth'] = 0xFF6E; - t['yotgreek'] = 0x03F3; - t['yoyaekorean'] = 0x3188; - t['yoyakorean'] = 0x3187; - t['yoyakthai'] = 0x0E22; - t['yoyingthai'] = 0x0E0D; - t['yparen'] = 0x24B4; - t['ypogegrammeni'] = 0x037A; - t['ypogegrammenigreekcmb'] = 0x0345; - t['yr'] = 0x01A6; - t['yring'] = 0x1E99; - t['ysuperior'] = 0x02B8; - t['ytilde'] = 0x1EF9; - t['yturned'] = 0x028E; - t['yuhiragana'] = 0x3086; - t['yuikorean'] = 0x318C; - t['yukatakana'] = 0x30E6; - t['yukatakanahalfwidth'] = 0xFF95; - t['yukorean'] = 0x3160; - t['yusbigcyrillic'] = 0x046B; - t['yusbigiotifiedcyrillic'] = 0x046D; - t['yuslittlecyrillic'] = 0x0467; - t['yuslittleiotifiedcyrillic'] = 0x0469; - t['yusmallhiragana'] = 0x3085; - t['yusmallkatakana'] = 0x30E5; - t['yusmallkatakanahalfwidth'] = 0xFF6D; - t['yuyekorean'] = 0x318B; - t['yuyeokorean'] = 0x318A; - t['yyabengali'] = 0x09DF; - t['yyadeva'] = 0x095F; - t['z'] = 0x007A; - t['zaarmenian'] = 0x0566; - t['zacute'] = 0x017A; - t['zadeva'] = 0x095B; - t['zagurmukhi'] = 0x0A5B; - t['zaharabic'] = 0x0638; - t['zahfinalarabic'] = 0xFEC6; - t['zahinitialarabic'] = 0xFEC7; - t['zahiragana'] = 0x3056; - t['zahmedialarabic'] = 0xFEC8; - t['zainarabic'] = 0x0632; - t['zainfinalarabic'] = 0xFEB0; - t['zakatakana'] = 0x30B6; - t['zaqefgadolhebrew'] = 0x0595; - t['zaqefqatanhebrew'] = 0x0594; - t['zarqahebrew'] = 0x0598; - t['zayin'] = 0x05D6; - t['zayindagesh'] = 0xFB36; - t['zayindageshhebrew'] = 0xFB36; - t['zayinhebrew'] = 0x05D6; - t['zbopomofo'] = 0x3117; - t['zcaron'] = 0x017E; - t['zcircle'] = 0x24E9; - t['zcircumflex'] = 0x1E91; - t['zcurl'] = 0x0291; - t['zdot'] = 0x017C; - t['zdotaccent'] = 0x017C; - t['zdotbelow'] = 0x1E93; - t['zecyrillic'] = 0x0437; - t['zedescendercyrillic'] = 0x0499; - t['zedieresiscyrillic'] = 0x04DF; - t['zehiragana'] = 0x305C; - t['zekatakana'] = 0x30BC; - t['zero'] = 0x0030; - t['zeroarabic'] = 0x0660; - t['zerobengali'] = 0x09E6; - t['zerodeva'] = 0x0966; - t['zerogujarati'] = 0x0AE6; - t['zerogurmukhi'] = 0x0A66; - t['zerohackarabic'] = 0x0660; - t['zeroinferior'] = 0x2080; - t['zeromonospace'] = 0xFF10; - t['zerooldstyle'] = 0xF730; - t['zeropersian'] = 0x06F0; - t['zerosuperior'] = 0x2070; - t['zerothai'] = 0x0E50; - t['zerowidthjoiner'] = 0xFEFF; - t['zerowidthnonjoiner'] = 0x200C; - t['zerowidthspace'] = 0x200B; - t['zeta'] = 0x03B6; - t['zhbopomofo'] = 0x3113; - t['zhearmenian'] = 0x056A; - t['zhebrevecyrillic'] = 0x04C2; - t['zhecyrillic'] = 0x0436; - t['zhedescendercyrillic'] = 0x0497; - t['zhedieresiscyrillic'] = 0x04DD; - t['zihiragana'] = 0x3058; - t['zikatakana'] = 0x30B8; - t['zinorhebrew'] = 0x05AE; - t['zlinebelow'] = 0x1E95; - t['zmonospace'] = 0xFF5A; - t['zohiragana'] = 0x305E; - t['zokatakana'] = 0x30BE; - t['zparen'] = 0x24B5; - t['zretroflexhook'] = 0x0290; - t['zstroke'] = 0x01B6; - t['zuhiragana'] = 0x305A; - t['zukatakana'] = 0x30BA; - t['.notdef'] = 0x0000; - t['angbracketleftbig'] = 0x2329; - t['angbracketleftBig'] = 0x2329; - t['angbracketleftbigg'] = 0x2329; - t['angbracketleftBigg'] = 0x2329; - t['angbracketrightBig'] = 0x232A; - t['angbracketrightbig'] = 0x232A; - t['angbracketrightBigg'] = 0x232A; - t['angbracketrightbigg'] = 0x232A; - t['arrowhookleft'] = 0x21AA; - t['arrowhookright'] = 0x21A9; - t['arrowlefttophalf'] = 0x21BC; - t['arrowleftbothalf'] = 0x21BD; - t['arrownortheast'] = 0x2197; - t['arrownorthwest'] = 0x2196; - t['arrowrighttophalf'] = 0x21C0; - t['arrowrightbothalf'] = 0x21C1; - t['arrowsoutheast'] = 0x2198; - t['arrowsouthwest'] = 0x2199; - t['backslashbig'] = 0x2216; - t['backslashBig'] = 0x2216; - t['backslashBigg'] = 0x2216; - t['backslashbigg'] = 0x2216; - t['bardbl'] = 0x2016; - t['bracehtipdownleft'] = 0xFE37; - t['bracehtipdownright'] = 0xFE37; - t['bracehtipupleft'] = 0xFE38; - t['bracehtipupright'] = 0xFE38; - t['braceleftBig'] = 0x007B; - t['braceleftbig'] = 0x007B; - t['braceleftbigg'] = 0x007B; - t['braceleftBigg'] = 0x007B; - t['bracerightBig'] = 0x007D; - t['bracerightbig'] = 0x007D; - t['bracerightbigg'] = 0x007D; - t['bracerightBigg'] = 0x007D; - t['bracketleftbig'] = 0x005B; - t['bracketleftBig'] = 0x005B; - t['bracketleftbigg'] = 0x005B; - t['bracketleftBigg'] = 0x005B; - t['bracketrightBig'] = 0x005D; - t['bracketrightbig'] = 0x005D; - t['bracketrightbigg'] = 0x005D; - t['bracketrightBigg'] = 0x005D; - t['ceilingleftbig'] = 0x2308; - t['ceilingleftBig'] = 0x2308; - t['ceilingleftBigg'] = 0x2308; - t['ceilingleftbigg'] = 0x2308; - t['ceilingrightbig'] = 0x2309; - t['ceilingrightBig'] = 0x2309; - t['ceilingrightbigg'] = 0x2309; - t['ceilingrightBigg'] = 0x2309; - t['circledotdisplay'] = 0x2299; - t['circledottext'] = 0x2299; - t['circlemultiplydisplay'] = 0x2297; - t['circlemultiplytext'] = 0x2297; - t['circleplusdisplay'] = 0x2295; - t['circleplustext'] = 0x2295; - t['contintegraldisplay'] = 0x222E; - t['contintegraltext'] = 0x222E; - t['coproductdisplay'] = 0x2210; - t['coproducttext'] = 0x2210; - t['floorleftBig'] = 0x230A; - t['floorleftbig'] = 0x230A; - t['floorleftbigg'] = 0x230A; - t['floorleftBigg'] = 0x230A; - t['floorrightbig'] = 0x230B; - t['floorrightBig'] = 0x230B; - t['floorrightBigg'] = 0x230B; - t['floorrightbigg'] = 0x230B; - t['hatwide'] = 0x0302; - t['hatwider'] = 0x0302; - t['hatwidest'] = 0x0302; - t['intercal'] = 0x1D40; - t['integraldisplay'] = 0x222B; - t['integraltext'] = 0x222B; - t['intersectiondisplay'] = 0x22C2; - t['intersectiontext'] = 0x22C2; - t['logicalanddisplay'] = 0x2227; - t['logicalandtext'] = 0x2227; - t['logicalordisplay'] = 0x2228; - t['logicalortext'] = 0x2228; - t['parenleftBig'] = 0x0028; - t['parenleftbig'] = 0x0028; - t['parenleftBigg'] = 0x0028; - t['parenleftbigg'] = 0x0028; - t['parenrightBig'] = 0x0029; - t['parenrightbig'] = 0x0029; - t['parenrightBigg'] = 0x0029; - t['parenrightbigg'] = 0x0029; - t['prime'] = 0x2032; - t['productdisplay'] = 0x220F; - t['producttext'] = 0x220F; - t['radicalbig'] = 0x221A; - t['radicalBig'] = 0x221A; - t['radicalBigg'] = 0x221A; - t['radicalbigg'] = 0x221A; - t['radicalbt'] = 0x221A; - t['radicaltp'] = 0x221A; - t['radicalvertex'] = 0x221A; - t['slashbig'] = 0x002F; - t['slashBig'] = 0x002F; - t['slashBigg'] = 0x002F; - t['slashbigg'] = 0x002F; - t['summationdisplay'] = 0x2211; - t['summationtext'] = 0x2211; - t['tildewide'] = 0x02DC; - t['tildewider'] = 0x02DC; - t['tildewidest'] = 0x02DC; - t['uniondisplay'] = 0x22C3; - t['unionmultidisplay'] = 0x228E; - t['unionmultitext'] = 0x228E; - t['unionsqdisplay'] = 0x2294; - t['unionsqtext'] = 0x2294; - t['uniontext'] = 0x22C3; - t['vextenddouble'] = 0x2225; - t['vextendsingle'] = 0x2223; - }); - var getDingbatsGlyphsUnicode = getLookupTableFactory(function (t) { - t['space'] = 0x0020; - t['a1'] = 0x2701; - t['a2'] = 0x2702; - t['a202'] = 0x2703; - t['a3'] = 0x2704; - t['a4'] = 0x260E; - t['a5'] = 0x2706; - t['a119'] = 0x2707; - t['a118'] = 0x2708; - t['a117'] = 0x2709; - t['a11'] = 0x261B; - t['a12'] = 0x261E; - t['a13'] = 0x270C; - t['a14'] = 0x270D; - t['a15'] = 0x270E; - t['a16'] = 0x270F; - t['a105'] = 0x2710; - t['a17'] = 0x2711; - t['a18'] = 0x2712; - t['a19'] = 0x2713; - t['a20'] = 0x2714; - t['a21'] = 0x2715; - t['a22'] = 0x2716; - t['a23'] = 0x2717; - t['a24'] = 0x2718; - t['a25'] = 0x2719; - t['a26'] = 0x271A; - t['a27'] = 0x271B; - t['a28'] = 0x271C; - t['a6'] = 0x271D; - t['a7'] = 0x271E; - t['a8'] = 0x271F; - t['a9'] = 0x2720; - t['a10'] = 0x2721; - t['a29'] = 0x2722; - t['a30'] = 0x2723; - t['a31'] = 0x2724; - t['a32'] = 0x2725; - t['a33'] = 0x2726; - t['a34'] = 0x2727; - t['a35'] = 0x2605; - t['a36'] = 0x2729; - t['a37'] = 0x272A; - t['a38'] = 0x272B; - t['a39'] = 0x272C; - t['a40'] = 0x272D; - t['a41'] = 0x272E; - t['a42'] = 0x272F; - t['a43'] = 0x2730; - t['a44'] = 0x2731; - t['a45'] = 0x2732; - t['a46'] = 0x2733; - t['a47'] = 0x2734; - t['a48'] = 0x2735; - t['a49'] = 0x2736; - t['a50'] = 0x2737; - t['a51'] = 0x2738; - t['a52'] = 0x2739; - t['a53'] = 0x273A; - t['a54'] = 0x273B; - t['a55'] = 0x273C; - t['a56'] = 0x273D; - t['a57'] = 0x273E; - t['a58'] = 0x273F; - t['a59'] = 0x2740; - t['a60'] = 0x2741; - t['a61'] = 0x2742; - t['a62'] = 0x2743; - t['a63'] = 0x2744; - t['a64'] = 0x2745; - t['a65'] = 0x2746; - t['a66'] = 0x2747; - t['a67'] = 0x2748; - t['a68'] = 0x2749; - t['a69'] = 0x274A; - t['a70'] = 0x274B; - t['a71'] = 0x25CF; - t['a72'] = 0x274D; - t['a73'] = 0x25A0; - t['a74'] = 0x274F; - t['a203'] = 0x2750; - t['a75'] = 0x2751; - t['a204'] = 0x2752; - t['a76'] = 0x25B2; - t['a77'] = 0x25BC; - t['a78'] = 0x25C6; - t['a79'] = 0x2756; - t['a81'] = 0x25D7; - t['a82'] = 0x2758; - t['a83'] = 0x2759; - t['a84'] = 0x275A; - t['a97'] = 0x275B; - t['a98'] = 0x275C; - t['a99'] = 0x275D; - t['a100'] = 0x275E; - t['a101'] = 0x2761; - t['a102'] = 0x2762; - t['a103'] = 0x2763; - t['a104'] = 0x2764; - t['a106'] = 0x2765; - t['a107'] = 0x2766; - t['a108'] = 0x2767; - t['a112'] = 0x2663; - t['a111'] = 0x2666; - t['a110'] = 0x2665; - t['a109'] = 0x2660; - t['a120'] = 0x2460; - t['a121'] = 0x2461; - t['a122'] = 0x2462; - t['a123'] = 0x2463; - t['a124'] = 0x2464; - t['a125'] = 0x2465; - t['a126'] = 0x2466; - t['a127'] = 0x2467; - t['a128'] = 0x2468; - t['a129'] = 0x2469; - t['a130'] = 0x2776; - t['a131'] = 0x2777; - t['a132'] = 0x2778; - t['a133'] = 0x2779; - t['a134'] = 0x277A; - t['a135'] = 0x277B; - t['a136'] = 0x277C; - t['a137'] = 0x277D; - t['a138'] = 0x277E; - t['a139'] = 0x277F; - t['a140'] = 0x2780; - t['a141'] = 0x2781; - t['a142'] = 0x2782; - t['a143'] = 0x2783; - t['a144'] = 0x2784; - t['a145'] = 0x2785; - t['a146'] = 0x2786; - t['a147'] = 0x2787; - t['a148'] = 0x2788; - t['a149'] = 0x2789; - t['a150'] = 0x278A; - t['a151'] = 0x278B; - t['a152'] = 0x278C; - t['a153'] = 0x278D; - t['a154'] = 0x278E; - t['a155'] = 0x278F; - t['a156'] = 0x2790; - t['a157'] = 0x2791; - t['a158'] = 0x2792; - t['a159'] = 0x2793; - t['a160'] = 0x2794; - t['a161'] = 0x2192; - t['a163'] = 0x2194; - t['a164'] = 0x2195; - t['a196'] = 0x2798; - t['a165'] = 0x2799; - t['a192'] = 0x279A; - t['a166'] = 0x279B; - t['a167'] = 0x279C; - t['a168'] = 0x279D; - t['a169'] = 0x279E; - t['a170'] = 0x279F; - t['a171'] = 0x27A0; - t['a172'] = 0x27A1; - t['a173'] = 0x27A2; - t['a162'] = 0x27A3; - t['a174'] = 0x27A4; - t['a175'] = 0x27A5; - t['a176'] = 0x27A6; - t['a177'] = 0x27A7; - t['a178'] = 0x27A8; - t['a179'] = 0x27A9; - t['a193'] = 0x27AA; - t['a180'] = 0x27AB; - t['a199'] = 0x27AC; - t['a181'] = 0x27AD; - t['a200'] = 0x27AE; - t['a182'] = 0x27AF; - t['a201'] = 0x27B1; - t['a183'] = 0x27B2; - t['a184'] = 0x27B3; - t['a197'] = 0x27B4; - t['a185'] = 0x27B5; - t['a194'] = 0x27B6; - t['a198'] = 0x27B7; - t['a186'] = 0x27B8; - t['a195'] = 0x27B9; - t['a187'] = 0x27BA; - t['a188'] = 0x27BB; - t['a189'] = 0x27BC; - t['a190'] = 0x27BD; - t['a191'] = 0x27BE; - t['a89'] = 0x2768; - t['a90'] = 0x2769; - t['a93'] = 0x276A; - t['a94'] = 0x276B; - t['a91'] = 0x276C; - t['a92'] = 0x276D; - t['a205'] = 0x276E; - t['a85'] = 0x276F; - t['a206'] = 0x2770; - t['a86'] = 0x2771; - t['a87'] = 0x2772; - t['a88'] = 0x2773; - t['a95'] = 0x2774; - t['a96'] = 0x2775; - t['.notdef'] = 0x0000; - }); - exports.getGlyphsUnicode = getGlyphsUnicode; - exports.getDingbatsGlyphsUnicode = getDingbatsGlyphsUnicode; - - /***/ }), - /* 178 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.getSupplementalGlyphMapForCalibri = exports.getSupplementalGlyphMapForArialBlack = exports.getGlyphMapForStandardFonts = exports.getSymbolsFonts = exports.getSerifFonts = exports.getNonStdFontMap = exports.getStdFontMap = void 0; - - var _util = __w_extracthighlights_require__(6); - - var getStdFontMap = (0, _util.getLookupTableFactory)(function (t) { - t['ArialNarrow'] = 'Helvetica'; - t['ArialNarrow-Bold'] = 'Helvetica-Bold'; - t['ArialNarrow-BoldItalic'] = 'Helvetica-BoldOblique'; - t['ArialNarrow-Italic'] = 'Helvetica-Oblique'; - t['ArialBlack'] = 'Helvetica'; - t['ArialBlack-Bold'] = 'Helvetica-Bold'; - t['ArialBlack-BoldItalic'] = 'Helvetica-BoldOblique'; - t['ArialBlack-Italic'] = 'Helvetica-Oblique'; - t['Arial-Black'] = 'Helvetica'; - t['Arial-Black-Bold'] = 'Helvetica-Bold'; - t['Arial-Black-BoldItalic'] = 'Helvetica-BoldOblique'; - t['Arial-Black-Italic'] = 'Helvetica-Oblique'; - t['Arial'] = 'Helvetica'; - t['Arial-Bold'] = 'Helvetica-Bold'; - t['Arial-BoldItalic'] = 'Helvetica-BoldOblique'; - t['Arial-Italic'] = 'Helvetica-Oblique'; - t['Arial-BoldItalicMT'] = 'Helvetica-BoldOblique'; - t['Arial-BoldMT'] = 'Helvetica-Bold'; - t['Arial-ItalicMT'] = 'Helvetica-Oblique'; - t['ArialMT'] = 'Helvetica'; - t['Courier-Bold'] = 'Courier-Bold'; - t['Courier-BoldItalic'] = 'Courier-BoldOblique'; - t['Courier-Italic'] = 'Courier-Oblique'; - t['CourierNew'] = 'Courier'; - t['CourierNew-Bold'] = 'Courier-Bold'; - t['CourierNew-BoldItalic'] = 'Courier-BoldOblique'; - t['CourierNew-Italic'] = 'Courier-Oblique'; - t['CourierNewPS-BoldItalicMT'] = 'Courier-BoldOblique'; - t['CourierNewPS-BoldMT'] = 'Courier-Bold'; - t['CourierNewPS-ItalicMT'] = 'Courier-Oblique'; - t['CourierNewPSMT'] = 'Courier'; - t['Helvetica'] = 'Helvetica'; - t['Helvetica-Bold'] = 'Helvetica-Bold'; - t['Helvetica-BoldItalic'] = 'Helvetica-BoldOblique'; - t['Helvetica-BoldOblique'] = 'Helvetica-BoldOblique'; - t['Helvetica-Italic'] = 'Helvetica-Oblique'; - t['Helvetica-Oblique'] = 'Helvetica-Oblique'; - t['SegoeUISymbol'] = 'Helvetica'; - t['Symbol-Bold'] = 'Symbol'; - t['Symbol-BoldItalic'] = 'Symbol'; - t['Symbol-Italic'] = 'Symbol'; - t['TimesNewRoman'] = 'Times-Roman'; - t['TimesNewRoman-Bold'] = 'Times-Bold'; - t['TimesNewRoman-BoldItalic'] = 'Times-BoldItalic'; - t['TimesNewRoman-Italic'] = 'Times-Italic'; - t['TimesNewRomanPS'] = 'Times-Roman'; - t['TimesNewRomanPS-Bold'] = 'Times-Bold'; - t['TimesNewRomanPS-BoldItalic'] = 'Times-BoldItalic'; - t['TimesNewRomanPS-BoldItalicMT'] = 'Times-BoldItalic'; - t['TimesNewRomanPS-BoldMT'] = 'Times-Bold'; - t['TimesNewRomanPS-Italic'] = 'Times-Italic'; - t['TimesNewRomanPS-ItalicMT'] = 'Times-Italic'; - t['TimesNewRomanPSMT'] = 'Times-Roman'; - t['TimesNewRomanPSMT-Bold'] = 'Times-Bold'; - t['TimesNewRomanPSMT-BoldItalic'] = 'Times-BoldItalic'; - t['TimesNewRomanPSMT-Italic'] = 'Times-Italic'; - }); - exports.getStdFontMap = getStdFontMap; - var getNonStdFontMap = (0, _util.getLookupTableFactory)(function (t) { - t['Calibri'] = 'Helvetica'; - t['Calibri-Bold'] = 'Helvetica-Bold'; - t['Calibri-BoldItalic'] = 'Helvetica-BoldOblique'; - t['Calibri-Italic'] = 'Helvetica-Oblique'; - t['CenturyGothic'] = 'Helvetica'; - t['CenturyGothic-Bold'] = 'Helvetica-Bold'; - t['CenturyGothic-BoldItalic'] = 'Helvetica-BoldOblique'; - t['CenturyGothic-Italic'] = 'Helvetica-Oblique'; - t['ComicSansMS'] = 'Comic Sans MS'; - t['ComicSansMS-Bold'] = 'Comic Sans MS-Bold'; - t['ComicSansMS-BoldItalic'] = 'Comic Sans MS-BoldItalic'; - t['ComicSansMS-Italic'] = 'Comic Sans MS-Italic'; - t['LucidaConsole'] = 'Courier'; - t['LucidaConsole-Bold'] = 'Courier-Bold'; - t['LucidaConsole-BoldItalic'] = 'Courier-BoldOblique'; - t['LucidaConsole-Italic'] = 'Courier-Oblique'; - t['LucidaSans-Demi'] = 'Helvetica-Bold'; - t['MS-Gothic'] = 'MS Gothic'; - t['MS-Gothic-Bold'] = 'MS Gothic-Bold'; - t['MS-Gothic-BoldItalic'] = 'MS Gothic-BoldItalic'; - t['MS-Gothic-Italic'] = 'MS Gothic-Italic'; - t['MS-Mincho'] = 'MS Mincho'; - t['MS-Mincho-Bold'] = 'MS Mincho-Bold'; - t['MS-Mincho-BoldItalic'] = 'MS Mincho-BoldItalic'; - t['MS-Mincho-Italic'] = 'MS Mincho-Italic'; - t['MS-PGothic'] = 'MS PGothic'; - t['MS-PGothic-Bold'] = 'MS PGothic-Bold'; - t['MS-PGothic-BoldItalic'] = 'MS PGothic-BoldItalic'; - t['MS-PGothic-Italic'] = 'MS PGothic-Italic'; - t['MS-PMincho'] = 'MS PMincho'; - t['MS-PMincho-Bold'] = 'MS PMincho-Bold'; - t['MS-PMincho-BoldItalic'] = 'MS PMincho-BoldItalic'; - t['MS-PMincho-Italic'] = 'MS PMincho-Italic'; - t['NuptialScript'] = 'Times-Italic'; - t['Wingdings'] = 'ZapfDingbats'; - }); - exports.getNonStdFontMap = getNonStdFontMap; - var getSerifFonts = (0, _util.getLookupTableFactory)(function (t) { - t['Adobe Jenson'] = true; - t['Adobe Text'] = true; - t['Albertus'] = true; - t['Aldus'] = true; - t['Alexandria'] = true; - t['Algerian'] = true; - t['American Typewriter'] = true; - t['Antiqua'] = true; - t['Apex'] = true; - t['Arno'] = true; - t['Aster'] = true; - t['Aurora'] = true; - t['Baskerville'] = true; - t['Bell'] = true; - t['Bembo'] = true; - t['Bembo Schoolbook'] = true; - t['Benguiat'] = true; - t['Berkeley Old Style'] = true; - t['Bernhard Modern'] = true; - t['Berthold City'] = true; - t['Bodoni'] = true; - t['Bauer Bodoni'] = true; - t['Book Antiqua'] = true; - t['Bookman'] = true; - t['Bordeaux Roman'] = true; - t['Californian FB'] = true; - t['Calisto'] = true; - t['Calvert'] = true; - t['Capitals'] = true; - t['Cambria'] = true; - t['Cartier'] = true; - t['Caslon'] = true; - t['Catull'] = true; - t['Centaur'] = true; - t['Century Old Style'] = true; - t['Century Schoolbook'] = true; - t['Chaparral'] = true; - t['Charis SIL'] = true; - t['Cheltenham'] = true; - t['Cholla Slab'] = true; - t['Clarendon'] = true; - t['Clearface'] = true; - t['Cochin'] = true; - t['Colonna'] = true; - t['Computer Modern'] = true; - t['Concrete Roman'] = true; - t['Constantia'] = true; - t['Cooper Black'] = true; - t['Corona'] = true; - t['Ecotype'] = true; - t['Egyptienne'] = true; - t['Elephant'] = true; - t['Excelsior'] = true; - t['Fairfield'] = true; - t['FF Scala'] = true; - t['Folkard'] = true; - t['Footlight'] = true; - t['FreeSerif'] = true; - t['Friz Quadrata'] = true; - t['Garamond'] = true; - t['Gentium'] = true; - t['Georgia'] = true; - t['Gloucester'] = true; - t['Goudy Old Style'] = true; - t['Goudy Schoolbook'] = true; - t['Goudy Pro Font'] = true; - t['Granjon'] = true; - t['Guardian Egyptian'] = true; - t['Heather'] = true; - t['Hercules'] = true; - t['High Tower Text'] = true; - t['Hiroshige'] = true; - t['Hoefler Text'] = true; - t['Humana Serif'] = true; - t['Imprint'] = true; - t['Ionic No. 5'] = true; - t['Janson'] = true; - t['Joanna'] = true; - t['Korinna'] = true; - t['Lexicon'] = true; - t['Liberation Serif'] = true; - t['Linux Libertine'] = true; - t['Literaturnaya'] = true; - t['Lucida'] = true; - t['Lucida Bright'] = true; - t['Melior'] = true; - t['Memphis'] = true; - t['Miller'] = true; - t['Minion'] = true; - t['Modern'] = true; - t['Mona Lisa'] = true; - t['Mrs Eaves'] = true; - t['MS Serif'] = true; - t['Museo Slab'] = true; - t['New York'] = true; - t['Nimbus Roman'] = true; - t['NPS Rawlinson Roadway'] = true; - t['NuptialScript'] = true; - t['Palatino'] = true; - t['Perpetua'] = true; - t['Plantin'] = true; - t['Plantin Schoolbook'] = true; - t['Playbill'] = true; - t['Poor Richard'] = true; - t['Rawlinson Roadway'] = true; - t['Renault'] = true; - t['Requiem'] = true; - t['Rockwell'] = true; - t['Roman'] = true; - t['Rotis Serif'] = true; - t['Sabon'] = true; - t['Scala'] = true; - t['Seagull'] = true; - t['Sistina'] = true; - t['Souvenir'] = true; - t['STIX'] = true; - t['Stone Informal'] = true; - t['Stone Serif'] = true; - t['Sylfaen'] = true; - t['Times'] = true; - t['Trajan'] = true; - t['Trinité'] = true; - t['Trump Mediaeval'] = true; - t['Utopia'] = true; - t['Vale Type'] = true; - t['Bitstream Vera'] = true; - t['Vera Serif'] = true; - t['Versailles'] = true; - t['Wanted'] = true; - t['Weiss'] = true; - t['Wide Latin'] = true; - t['Windsor'] = true; - t['XITS'] = true; - }); - exports.getSerifFonts = getSerifFonts; - var getSymbolsFonts = (0, _util.getLookupTableFactory)(function (t) { - t['Dingbats'] = true; - t['Symbol'] = true; - t['ZapfDingbats'] = true; - }); - exports.getSymbolsFonts = getSymbolsFonts; - var getGlyphMapForStandardFonts = (0, _util.getLookupTableFactory)(function (t) { - t[2] = 10; - t[3] = 32; - t[4] = 33; - t[5] = 34; - t[6] = 35; - t[7] = 36; - t[8] = 37; - t[9] = 38; - t[10] = 39; - t[11] = 40; - t[12] = 41; - t[13] = 42; - t[14] = 43; - t[15] = 44; - t[16] = 45; - t[17] = 46; - t[18] = 47; - t[19] = 48; - t[20] = 49; - t[21] = 50; - t[22] = 51; - t[23] = 52; - t[24] = 53; - t[25] = 54; - t[26] = 55; - t[27] = 56; - t[28] = 57; - t[29] = 58; - t[30] = 894; - t[31] = 60; - t[32] = 61; - t[33] = 62; - t[34] = 63; - t[35] = 64; - t[36] = 65; - t[37] = 66; - t[38] = 67; - t[39] = 68; - t[40] = 69; - t[41] = 70; - t[42] = 71; - t[43] = 72; - t[44] = 73; - t[45] = 74; - t[46] = 75; - t[47] = 76; - t[48] = 77; - t[49] = 78; - t[50] = 79; - t[51] = 80; - t[52] = 81; - t[53] = 82; - t[54] = 83; - t[55] = 84; - t[56] = 85; - t[57] = 86; - t[58] = 87; - t[59] = 88; - t[60] = 89; - t[61] = 90; - t[62] = 91; - t[63] = 92; - t[64] = 93; - t[65] = 94; - t[66] = 95; - t[67] = 96; - t[68] = 97; - t[69] = 98; - t[70] = 99; - t[71] = 100; - t[72] = 101; - t[73] = 102; - t[74] = 103; - t[75] = 104; - t[76] = 105; - t[77] = 106; - t[78] = 107; - t[79] = 108; - t[80] = 109; - t[81] = 110; - t[82] = 111; - t[83] = 112; - t[84] = 113; - t[85] = 114; - t[86] = 115; - t[87] = 116; - t[88] = 117; - t[89] = 118; - t[90] = 119; - t[91] = 120; - t[92] = 121; - t[93] = 122; - t[94] = 123; - t[95] = 124; - t[96] = 125; - t[97] = 126; - t[98] = 196; - t[99] = 197; - t[100] = 199; - t[101] = 201; - t[102] = 209; - t[103] = 214; - t[104] = 220; - t[105] = 225; - t[106] = 224; - t[107] = 226; - t[108] = 228; - t[109] = 227; - t[110] = 229; - t[111] = 231; - t[112] = 233; - t[113] = 232; - t[114] = 234; - t[115] = 235; - t[116] = 237; - t[117] = 236; - t[118] = 238; - t[119] = 239; - t[120] = 241; - t[121] = 243; - t[122] = 242; - t[123] = 244; - t[124] = 246; - t[125] = 245; - t[126] = 250; - t[127] = 249; - t[128] = 251; - t[129] = 252; - t[130] = 8224; - t[131] = 176; - t[132] = 162; - t[133] = 163; - t[134] = 167; - t[135] = 8226; - t[136] = 182; - t[137] = 223; - t[138] = 174; - t[139] = 169; - t[140] = 8482; - t[141] = 180; - t[142] = 168; - t[143] = 8800; - t[144] = 198; - t[145] = 216; - t[146] = 8734; - t[147] = 177; - t[148] = 8804; - t[149] = 8805; - t[150] = 165; - t[151] = 181; - t[152] = 8706; - t[153] = 8721; - t[154] = 8719; - t[156] = 8747; - t[157] = 170; - t[158] = 186; - t[159] = 8486; - t[160] = 230; - t[161] = 248; - t[162] = 191; - t[163] = 161; - t[164] = 172; - t[165] = 8730; - t[166] = 402; - t[167] = 8776; - t[168] = 8710; - t[169] = 171; - t[170] = 187; - t[171] = 8230; - t[210] = 218; - t[223] = 711; - t[224] = 321; - t[225] = 322; - t[227] = 353; - t[229] = 382; - t[234] = 253; - t[252] = 263; - t[253] = 268; - t[254] = 269; - t[258] = 258; - t[260] = 260; - t[261] = 261; - t[265] = 280; - t[266] = 281; - t[268] = 283; - t[269] = 313; - t[275] = 323; - t[276] = 324; - t[278] = 328; - t[284] = 345; - t[285] = 346; - t[286] = 347; - t[292] = 367; - t[295] = 377; - t[296] = 378; - t[298] = 380; - t[305] = 963; - t[306] = 964; - t[307] = 966; - t[308] = 8215; - t[309] = 8252; - t[310] = 8319; - t[311] = 8359; - t[312] = 8592; - t[313] = 8593; - t[337] = 9552; - t[493] = 1039; - t[494] = 1040; - t[705] = 1524; - t[706] = 8362; - t[710] = 64288; - t[711] = 64298; - t[759] = 1617; - t[761] = 1776; - t[763] = 1778; - t[775] = 1652; - t[777] = 1764; - t[778] = 1780; - t[779] = 1781; - t[780] = 1782; - t[782] = 771; - t[783] = 64726; - t[786] = 8363; - t[788] = 8532; - t[790] = 768; - t[791] = 769; - t[792] = 768; - t[795] = 803; - t[797] = 64336; - t[798] = 64337; - t[799] = 64342; - t[800] = 64343; - t[801] = 64344; - t[802] = 64345; - t[803] = 64362; - t[804] = 64363; - t[805] = 64364; - t[2424] = 7821; - t[2425] = 7822; - t[2426] = 7823; - t[2427] = 7824; - t[2428] = 7825; - t[2429] = 7826; - t[2430] = 7827; - t[2433] = 7682; - t[2678] = 8045; - t[2679] = 8046; - t[2830] = 1552; - t[2838] = 686; - t[2840] = 751; - t[2842] = 753; - t[2843] = 754; - t[2844] = 755; - t[2846] = 757; - t[2856] = 767; - t[2857] = 848; - t[2858] = 849; - t[2862] = 853; - t[2863] = 854; - t[2864] = 855; - t[2865] = 861; - t[2866] = 862; - t[2906] = 7460; - t[2908] = 7462; - t[2909] = 7463; - t[2910] = 7464; - t[2912] = 7466; - t[2913] = 7467; - t[2914] = 7468; - t[2916] = 7470; - t[2917] = 7471; - t[2918] = 7472; - t[2920] = 7474; - t[2921] = 7475; - t[2922] = 7476; - t[2924] = 7478; - t[2925] = 7479; - t[2926] = 7480; - t[2928] = 7482; - t[2929] = 7483; - t[2930] = 7484; - t[2932] = 7486; - t[2933] = 7487; - t[2934] = 7488; - t[2936] = 7490; - t[2937] = 7491; - t[2938] = 7492; - t[2940] = 7494; - t[2941] = 7495; - t[2942] = 7496; - t[2944] = 7498; - t[2946] = 7500; - t[2948] = 7502; - t[2950] = 7504; - t[2951] = 7505; - t[2952] = 7506; - t[2954] = 7508; - t[2955] = 7509; - t[2956] = 7510; - t[2958] = 7512; - t[2959] = 7513; - t[2960] = 7514; - t[2962] = 7516; - t[2963] = 7517; - t[2964] = 7518; - t[2966] = 7520; - t[2967] = 7521; - t[2968] = 7522; - t[2970] = 7524; - t[2971] = 7525; - t[2972] = 7526; - t[2974] = 7528; - t[2975] = 7529; - t[2976] = 7530; - t[2978] = 1537; - t[2979] = 1538; - t[2980] = 1539; - t[2982] = 1549; - t[2983] = 1551; - t[2984] = 1552; - t[2986] = 1554; - t[2987] = 1555; - t[2988] = 1556; - t[2990] = 1623; - t[2991] = 1624; - t[2995] = 1775; - t[2999] = 1791; - t[3002] = 64290; - t[3003] = 64291; - t[3004] = 64292; - t[3006] = 64294; - t[3007] = 64295; - t[3008] = 64296; - t[3011] = 1900; - t[3014] = 8223; - t[3015] = 8244; - t[3017] = 7532; - t[3018] = 7533; - t[3019] = 7534; - t[3075] = 7590; - t[3076] = 7591; - t[3079] = 7594; - t[3080] = 7595; - t[3083] = 7598; - t[3084] = 7599; - t[3087] = 7602; - t[3088] = 7603; - t[3091] = 7606; - t[3092] = 7607; - t[3095] = 7610; - t[3096] = 7611; - t[3099] = 7614; - t[3100] = 7615; - t[3103] = 7618; - t[3104] = 7619; - t[3107] = 8337; - t[3108] = 8338; - t[3116] = 1884; - t[3119] = 1885; - t[3120] = 1885; - t[3123] = 1886; - t[3124] = 1886; - t[3127] = 1887; - t[3128] = 1887; - t[3131] = 1888; - t[3132] = 1888; - t[3135] = 1889; - t[3136] = 1889; - t[3139] = 1890; - t[3140] = 1890; - t[3143] = 1891; - t[3144] = 1891; - t[3147] = 1892; - t[3148] = 1892; - t[3153] = 580; - t[3154] = 581; - t[3157] = 584; - t[3158] = 585; - t[3161] = 588; - t[3162] = 589; - t[3165] = 891; - t[3166] = 892; - t[3169] = 1274; - t[3170] = 1275; - t[3173] = 1278; - t[3174] = 1279; - t[3181] = 7622; - t[3182] = 7623; - t[3282] = 11799; - t[3316] = 578; - t[3379] = 42785; - t[3393] = 1159; - t[3416] = 8377; - }); - exports.getGlyphMapForStandardFonts = getGlyphMapForStandardFonts; - var getSupplementalGlyphMapForArialBlack = (0, _util.getLookupTableFactory)(function (t) { - t[227] = 322; - t[264] = 261; - t[291] = 346; - }); - exports.getSupplementalGlyphMapForArialBlack = getSupplementalGlyphMapForArialBlack; - var getSupplementalGlyphMapForCalibri = (0, _util.getLookupTableFactory)(function (t) { - t[1] = 32; - t[4] = 65; - t[17] = 66; - t[18] = 67; - t[24] = 68; - t[28] = 69; - t[38] = 70; - t[39] = 71; - t[44] = 72; - t[47] = 73; - t[58] = 74; - t[60] = 75; - t[62] = 76; - t[68] = 77; - t[69] = 78; - t[75] = 79; - t[87] = 80; - t[89] = 81; - t[90] = 82; - t[94] = 83; - t[100] = 84; - t[104] = 85; - t[115] = 86; - t[116] = 87; - t[121] = 88; - t[122] = 89; - t[127] = 90; - t[258] = 97; - t[268] = 261; - t[271] = 98; - t[272] = 99; - t[273] = 263; - t[282] = 100; - t[286] = 101; - t[295] = 281; - t[296] = 102; - t[336] = 103; - t[346] = 104; - t[349] = 105; - t[361] = 106; - t[364] = 107; - t[367] = 108; - t[371] = 322; - t[373] = 109; - t[374] = 110; - t[381] = 111; - t[383] = 243; - t[393] = 112; - t[395] = 113; - t[396] = 114; - t[400] = 115; - t[401] = 347; - t[410] = 116; - t[437] = 117; - t[448] = 118; - t[449] = 119; - t[454] = 120; - t[455] = 121; - t[460] = 122; - t[463] = 380; - t[853] = 44; - t[855] = 58; - t[856] = 46; - t[876] = 47; - t[878] = 45; - t[882] = 45; - t[894] = 40; - t[895] = 41; - t[896] = 91; - t[897] = 93; - t[923] = 64; - t[1004] = 48; - t[1005] = 49; - t[1006] = 50; - t[1007] = 51; - t[1008] = 52; - t[1009] = 53; - t[1010] = 54; - t[1011] = 55; - t[1012] = 56; - t[1013] = 57; - t[1081] = 37; - t[1085] = 43; - t[1086] = 45; - }); - exports.getSupplementalGlyphMapForCalibri = getSupplementalGlyphMapForCalibri; - - /***/ }), - /* 179 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - var getLookupTableFactory = __w_extracthighlights_require__(6).getLookupTableFactory; - var getSpecialPUASymbols = getLookupTableFactory(function (t) { - t[63721] = 0x00A9; - t[63193] = 0x00A9; - t[63720] = 0x00AE; - t[63194] = 0x00AE; - t[63722] = 0x2122; - t[63195] = 0x2122; - t[63729] = 0x23A7; - t[63730] = 0x23A8; - t[63731] = 0x23A9; - t[63740] = 0x23AB; - t[63741] = 0x23AC; - t[63742] = 0x23AD; - t[63726] = 0x23A1; - t[63727] = 0x23A2; - t[63728] = 0x23A3; - t[63737] = 0x23A4; - t[63738] = 0x23A5; - t[63739] = 0x23A6; - t[63723] = 0x239B; - t[63724] = 0x239C; - t[63725] = 0x239D; - t[63734] = 0x239E; - t[63735] = 0x239F; - t[63736] = 0x23A0; - }); - function mapSpecialUnicodeValues(code) { - if (code >= 0xFFF0 && code <= 0xFFFF) { - return 0; - } else if (code >= 0xF600 && code <= 0xF8FF) { - return getSpecialPUASymbols()[code] || code; - } else if (code === 0x00AD) { - return 0x002D; - } - return code; - } - function getUnicodeForGlyph(name, glyphsUnicodeMap) { - var unicode = glyphsUnicodeMap[name]; - if (unicode !== undefined) { - return unicode; - } - if (!name) { - return -1; - } - if (name[0] === 'u') { - var nameLen = name.length, hexStr; - if (nameLen === 7 && name[1] === 'n' && name[2] === 'i') { - hexStr = name.substring(3); - } else if (nameLen >= 5 && nameLen <= 7) { - hexStr = name.substring(1); - } else { - return -1; - } - if (hexStr === hexStr.toUpperCase()) { - unicode = parseInt(hexStr, 16); - if (unicode >= 0) { - return unicode; - } - } - } - return -1; - } - var UnicodeRanges = [ - { - 'begin': 0x0000, - 'end': 0x007F - }, - { - 'begin': 0x0080, - 'end': 0x00FF - }, - { - 'begin': 0x0100, - 'end': 0x017F - }, - { - 'begin': 0x0180, - 'end': 0x024F - }, - { - 'begin': 0x0250, - 'end': 0x02AF - }, - { - 'begin': 0x02B0, - 'end': 0x02FF - }, - { - 'begin': 0x0300, - 'end': 0x036F - }, - { - 'begin': 0x0370, - 'end': 0x03FF - }, - { - 'begin': 0x2C80, - 'end': 0x2CFF - }, - { - 'begin': 0x0400, - 'end': 0x04FF - }, - { - 'begin': 0x0530, - 'end': 0x058F - }, - { - 'begin': 0x0590, - 'end': 0x05FF - }, - { - 'begin': 0xA500, - 'end': 0xA63F - }, - { - 'begin': 0x0600, - 'end': 0x06FF - }, - { - 'begin': 0x07C0, - 'end': 0x07FF - }, - { - 'begin': 0x0900, - 'end': 0x097F - }, - { - 'begin': 0x0980, - 'end': 0x09FF - }, - { - 'begin': 0x0A00, - 'end': 0x0A7F - }, - { - 'begin': 0x0A80, - 'end': 0x0AFF - }, - { - 'begin': 0x0B00, - 'end': 0x0B7F - }, - { - 'begin': 0x0B80, - 'end': 0x0BFF - }, - { - 'begin': 0x0C00, - 'end': 0x0C7F - }, - { - 'begin': 0x0C80, - 'end': 0x0CFF - }, - { - 'begin': 0x0D00, - 'end': 0x0D7F - }, - { - 'begin': 0x0E00, - 'end': 0x0E7F - }, - { - 'begin': 0x0E80, - 'end': 0x0EFF - }, - { - 'begin': 0x10A0, - 'end': 0x10FF - }, - { - 'begin': 0x1B00, - 'end': 0x1B7F - }, - { - 'begin': 0x1100, - 'end': 0x11FF - }, - { - 'begin': 0x1E00, - 'end': 0x1EFF - }, - { - 'begin': 0x1F00, - 'end': 0x1FFF - }, - { - 'begin': 0x2000, - 'end': 0x206F - }, - { - 'begin': 0x2070, - 'end': 0x209F - }, - { - 'begin': 0x20A0, - 'end': 0x20CF - }, - { - 'begin': 0x20D0, - 'end': 0x20FF - }, - { - 'begin': 0x2100, - 'end': 0x214F - }, - { - 'begin': 0x2150, - 'end': 0x218F - }, - { - 'begin': 0x2190, - 'end': 0x21FF - }, - { - 'begin': 0x2200, - 'end': 0x22FF - }, - { - 'begin': 0x2300, - 'end': 0x23FF - }, - { - 'begin': 0x2400, - 'end': 0x243F - }, - { - 'begin': 0x2440, - 'end': 0x245F - }, - { - 'begin': 0x2460, - 'end': 0x24FF - }, - { - 'begin': 0x2500, - 'end': 0x257F - }, - { - 'begin': 0x2580, - 'end': 0x259F - }, - { - 'begin': 0x25A0, - 'end': 0x25FF - }, - { - 'begin': 0x2600, - 'end': 0x26FF - }, - { - 'begin': 0x2700, - 'end': 0x27BF - }, - { - 'begin': 0x3000, - 'end': 0x303F - }, - { - 'begin': 0x3040, - 'end': 0x309F - }, - { - 'begin': 0x30A0, - 'end': 0x30FF - }, - { - 'begin': 0x3100, - 'end': 0x312F - }, - { - 'begin': 0x3130, - 'end': 0x318F - }, - { - 'begin': 0xA840, - 'end': 0xA87F - }, - { - 'begin': 0x3200, - 'end': 0x32FF - }, - { - 'begin': 0x3300, - 'end': 0x33FF - }, - { - 'begin': 0xAC00, - 'end': 0xD7AF - }, - { - 'begin': 0xD800, - 'end': 0xDFFF - }, - { - 'begin': 0x10900, - 'end': 0x1091F - }, - { - 'begin': 0x4E00, - 'end': 0x9FFF - }, - { - 'begin': 0xE000, - 'end': 0xF8FF - }, - { - 'begin': 0x31C0, - 'end': 0x31EF - }, - { - 'begin': 0xFB00, - 'end': 0xFB4F - }, - { - 'begin': 0xFB50, - 'end': 0xFDFF - }, - { - 'begin': 0xFE20, - 'end': 0xFE2F - }, - { - 'begin': 0xFE10, - 'end': 0xFE1F - }, - { - 'begin': 0xFE50, - 'end': 0xFE6F - }, - { - 'begin': 0xFE70, - 'end': 0xFEFF - }, - { - 'begin': 0xFF00, - 'end': 0xFFEF - }, - { - 'begin': 0xFFF0, - 'end': 0xFFFF - }, - { - 'begin': 0x0F00, - 'end': 0x0FFF - }, - { - 'begin': 0x0700, - 'end': 0x074F - }, - { - 'begin': 0x0780, - 'end': 0x07BF - }, - { - 'begin': 0x0D80, - 'end': 0x0DFF - }, - { - 'begin': 0x1000, - 'end': 0x109F - }, - { - 'begin': 0x1200, - 'end': 0x137F - }, - { - 'begin': 0x13A0, - 'end': 0x13FF - }, - { - 'begin': 0x1400, - 'end': 0x167F - }, - { - 'begin': 0x1680, - 'end': 0x169F - }, - { - 'begin': 0x16A0, - 'end': 0x16FF - }, - { - 'begin': 0x1780, - 'end': 0x17FF - }, - { - 'begin': 0x1800, - 'end': 0x18AF - }, - { - 'begin': 0x2800, - 'end': 0x28FF - }, - { - 'begin': 0xA000, - 'end': 0xA48F - }, - { - 'begin': 0x1700, - 'end': 0x171F - }, - { - 'begin': 0x10300, - 'end': 0x1032F - }, - { - 'begin': 0x10330, - 'end': 0x1034F - }, - { - 'begin': 0x10400, - 'end': 0x1044F - }, - { - 'begin': 0x1D000, - 'end': 0x1D0FF - }, - { - 'begin': 0x1D400, - 'end': 0x1D7FF - }, - { - 'begin': 0xFF000, - 'end': 0xFFFFD - }, - { - 'begin': 0xFE00, - 'end': 0xFE0F - }, - { - 'begin': 0xE0000, - 'end': 0xE007F - }, - { - 'begin': 0x1900, - 'end': 0x194F - }, - { - 'begin': 0x1950, - 'end': 0x197F - }, - { - 'begin': 0x1980, - 'end': 0x19DF - }, - { - 'begin': 0x1A00, - 'end': 0x1A1F - }, - { - 'begin': 0x2C00, - 'end': 0x2C5F - }, - { - 'begin': 0x2D30, - 'end': 0x2D7F - }, - { - 'begin': 0x4DC0, - 'end': 0x4DFF - }, - { - 'begin': 0xA800, - 'end': 0xA82F - }, - { - 'begin': 0x10000, - 'end': 0x1007F - }, - { - 'begin': 0x10140, - 'end': 0x1018F - }, - { - 'begin': 0x10380, - 'end': 0x1039F - }, - { - 'begin': 0x103A0, - 'end': 0x103DF - }, - { - 'begin': 0x10450, - 'end': 0x1047F - }, - { - 'begin': 0x10480, - 'end': 0x104AF - }, - { - 'begin': 0x10800, - 'end': 0x1083F - }, - { - 'begin': 0x10A00, - 'end': 0x10A5F - }, - { - 'begin': 0x1D300, - 'end': 0x1D35F - }, - { - 'begin': 0x12000, - 'end': 0x123FF - }, - { - 'begin': 0x1D360, - 'end': 0x1D37F - }, - { - 'begin': 0x1B80, - 'end': 0x1BBF - }, - { - 'begin': 0x1C00, - 'end': 0x1C4F - }, - { - 'begin': 0x1C50, - 'end': 0x1C7F - }, - { - 'begin': 0xA880, - 'end': 0xA8DF - }, - { - 'begin': 0xA900, - 'end': 0xA92F - }, - { - 'begin': 0xA930, - 'end': 0xA95F - }, - { - 'begin': 0xAA00, - 'end': 0xAA5F - }, - { - 'begin': 0x10190, - 'end': 0x101CF - }, - { - 'begin': 0x101D0, - 'end': 0x101FF - }, - { - 'begin': 0x102A0, - 'end': 0x102DF - }, - { - 'begin': 0x1F030, - 'end': 0x1F09F - } - ]; - function getUnicodeRangeFor(value) { - for (var i = 0, ii = UnicodeRanges.length; i < ii; i++) { - var range = UnicodeRanges[i]; - if (value >= range.begin && value < range.end) { - return i; - } - } - return -1; - } - function isRTLRangeFor(value) { - var range = UnicodeRanges[13]; - if (value >= range.begin && value < range.end) { - return true; - } - range = UnicodeRanges[11]; - if (value >= range.begin && value < range.end) { - return true; - } - return false; - } - var getNormalizedUnicodes = getLookupTableFactory(function (t) { - t['\u00A8'] = '\u0020\u0308'; - t['\u00AF'] = '\u0020\u0304'; - t['\u00B4'] = '\u0020\u0301'; - t['\u00B5'] = '\u03BC'; - t['\u00B8'] = '\u0020\u0327'; - t['\u0132'] = '\u0049\u004A'; - t['\u0133'] = '\u0069\u006A'; - t['\u013F'] = '\u004C\u00B7'; - t['\u0140'] = '\u006C\u00B7'; - t['\u0149'] = '\u02BC\u006E'; - t['\u017F'] = '\u0073'; - t['\u01C4'] = '\u0044\u017D'; - t['\u01C5'] = '\u0044\u017E'; - t['\u01C6'] = '\u0064\u017E'; - t['\u01C7'] = '\u004C\u004A'; - t['\u01C8'] = '\u004C\u006A'; - t['\u01C9'] = '\u006C\u006A'; - t['\u01CA'] = '\u004E\u004A'; - t['\u01CB'] = '\u004E\u006A'; - t['\u01CC'] = '\u006E\u006A'; - t['\u01F1'] = '\u0044\u005A'; - t['\u01F2'] = '\u0044\u007A'; - t['\u01F3'] = '\u0064\u007A'; - t['\u02D8'] = '\u0020\u0306'; - t['\u02D9'] = '\u0020\u0307'; - t['\u02DA'] = '\u0020\u030A'; - t['\u02DB'] = '\u0020\u0328'; - t['\u02DC'] = '\u0020\u0303'; - t['\u02DD'] = '\u0020\u030B'; - t['\u037A'] = '\u0020\u0345'; - t['\u0384'] = '\u0020\u0301'; - t['\u03D0'] = '\u03B2'; - t['\u03D1'] = '\u03B8'; - t['\u03D2'] = '\u03A5'; - t['\u03D5'] = '\u03C6'; - t['\u03D6'] = '\u03C0'; - t['\u03F0'] = '\u03BA'; - t['\u03F1'] = '\u03C1'; - t['\u03F2'] = '\u03C2'; - t['\u03F4'] = '\u0398'; - t['\u03F5'] = '\u03B5'; - t['\u03F9'] = '\u03A3'; - t['\u0587'] = '\u0565\u0582'; - t['\u0675'] = '\u0627\u0674'; - t['\u0676'] = '\u0648\u0674'; - t['\u0677'] = '\u06C7\u0674'; - t['\u0678'] = '\u064A\u0674'; - t['\u0E33'] = '\u0E4D\u0E32'; - t['\u0EB3'] = '\u0ECD\u0EB2'; - t['\u0EDC'] = '\u0EAB\u0E99'; - t['\u0EDD'] = '\u0EAB\u0EA1'; - t['\u0F77'] = '\u0FB2\u0F81'; - t['\u0F79'] = '\u0FB3\u0F81'; - t['\u1E9A'] = '\u0061\u02BE'; - t['\u1FBD'] = '\u0020\u0313'; - t['\u1FBF'] = '\u0020\u0313'; - t['\u1FC0'] = '\u0020\u0342'; - t['\u1FFE'] = '\u0020\u0314'; - t['\u2002'] = '\u0020'; - t['\u2003'] = '\u0020'; - t['\u2004'] = '\u0020'; - t['\u2005'] = '\u0020'; - t['\u2006'] = '\u0020'; - t['\u2008'] = '\u0020'; - t['\u2009'] = '\u0020'; - t['\u200A'] = '\u0020'; - t['\u2017'] = '\u0020\u0333'; - t['\u2024'] = '\u002E'; - t['\u2025'] = '\u002E\u002E'; - t['\u2026'] = '\u002E\u002E\u002E'; - t['\u2033'] = '\u2032\u2032'; - t['\u2034'] = '\u2032\u2032\u2032'; - t['\u2036'] = '\u2035\u2035'; - t['\u2037'] = '\u2035\u2035\u2035'; - t['\u203C'] = '\u0021\u0021'; - t['\u203E'] = '\u0020\u0305'; - t['\u2047'] = '\u003F\u003F'; - t['\u2048'] = '\u003F\u0021'; - t['\u2049'] = '\u0021\u003F'; - t['\u2057'] = '\u2032\u2032\u2032\u2032'; - t['\u205F'] = '\u0020'; - t['\u20A8'] = '\u0052\u0073'; - t['\u2100'] = '\u0061\u002F\u0063'; - t['\u2101'] = '\u0061\u002F\u0073'; - t['\u2103'] = '\u00B0\u0043'; - t['\u2105'] = '\u0063\u002F\u006F'; - t['\u2106'] = '\u0063\u002F\u0075'; - t['\u2107'] = '\u0190'; - t['\u2109'] = '\u00B0\u0046'; - t['\u2116'] = '\u004E\u006F'; - t['\u2121'] = '\u0054\u0045\u004C'; - t['\u2135'] = '\u05D0'; - t['\u2136'] = '\u05D1'; - t['\u2137'] = '\u05D2'; - t['\u2138'] = '\u05D3'; - t['\u213B'] = '\u0046\u0041\u0058'; - t['\u2160'] = '\u0049'; - t['\u2161'] = '\u0049\u0049'; - t['\u2162'] = '\u0049\u0049\u0049'; - t['\u2163'] = '\u0049\u0056'; - t['\u2164'] = '\u0056'; - t['\u2165'] = '\u0056\u0049'; - t['\u2166'] = '\u0056\u0049\u0049'; - t['\u2167'] = '\u0056\u0049\u0049\u0049'; - t['\u2168'] = '\u0049\u0058'; - t['\u2169'] = '\u0058'; - t['\u216A'] = '\u0058\u0049'; - t['\u216B'] = '\u0058\u0049\u0049'; - t['\u216C'] = '\u004C'; - t['\u216D'] = '\u0043'; - t['\u216E'] = '\u0044'; - t['\u216F'] = '\u004D'; - t['\u2170'] = '\u0069'; - t['\u2171'] = '\u0069\u0069'; - t['\u2172'] = '\u0069\u0069\u0069'; - t['\u2173'] = '\u0069\u0076'; - t['\u2174'] = '\u0076'; - t['\u2175'] = '\u0076\u0069'; - t['\u2176'] = '\u0076\u0069\u0069'; - t['\u2177'] = '\u0076\u0069\u0069\u0069'; - t['\u2178'] = '\u0069\u0078'; - t['\u2179'] = '\u0078'; - t['\u217A'] = '\u0078\u0069'; - t['\u217B'] = '\u0078\u0069\u0069'; - t['\u217C'] = '\u006C'; - t['\u217D'] = '\u0063'; - t['\u217E'] = '\u0064'; - t['\u217F'] = '\u006D'; - t['\u222C'] = '\u222B\u222B'; - t['\u222D'] = '\u222B\u222B\u222B'; - t['\u222F'] = '\u222E\u222E'; - t['\u2230'] = '\u222E\u222E\u222E'; - t['\u2474'] = '\u0028\u0031\u0029'; - t['\u2475'] = '\u0028\u0032\u0029'; - t['\u2476'] = '\u0028\u0033\u0029'; - t['\u2477'] = '\u0028\u0034\u0029'; - t['\u2478'] = '\u0028\u0035\u0029'; - t['\u2479'] = '\u0028\u0036\u0029'; - t['\u247A'] = '\u0028\u0037\u0029'; - t['\u247B'] = '\u0028\u0038\u0029'; - t['\u247C'] = '\u0028\u0039\u0029'; - t['\u247D'] = '\u0028\u0031\u0030\u0029'; - t['\u247E'] = '\u0028\u0031\u0031\u0029'; - t['\u247F'] = '\u0028\u0031\u0032\u0029'; - t['\u2480'] = '\u0028\u0031\u0033\u0029'; - t['\u2481'] = '\u0028\u0031\u0034\u0029'; - t['\u2482'] = '\u0028\u0031\u0035\u0029'; - t['\u2483'] = '\u0028\u0031\u0036\u0029'; - t['\u2484'] = '\u0028\u0031\u0037\u0029'; - t['\u2485'] = '\u0028\u0031\u0038\u0029'; - t['\u2486'] = '\u0028\u0031\u0039\u0029'; - t['\u2487'] = '\u0028\u0032\u0030\u0029'; - t['\u2488'] = '\u0031\u002E'; - t['\u2489'] = '\u0032\u002E'; - t['\u248A'] = '\u0033\u002E'; - t['\u248B'] = '\u0034\u002E'; - t['\u248C'] = '\u0035\u002E'; - t['\u248D'] = '\u0036\u002E'; - t['\u248E'] = '\u0037\u002E'; - t['\u248F'] = '\u0038\u002E'; - t['\u2490'] = '\u0039\u002E'; - t['\u2491'] = '\u0031\u0030\u002E'; - t['\u2492'] = '\u0031\u0031\u002E'; - t['\u2493'] = '\u0031\u0032\u002E'; - t['\u2494'] = '\u0031\u0033\u002E'; - t['\u2495'] = '\u0031\u0034\u002E'; - t['\u2496'] = '\u0031\u0035\u002E'; - t['\u2497'] = '\u0031\u0036\u002E'; - t['\u2498'] = '\u0031\u0037\u002E'; - t['\u2499'] = '\u0031\u0038\u002E'; - t['\u249A'] = '\u0031\u0039\u002E'; - t['\u249B'] = '\u0032\u0030\u002E'; - t['\u249C'] = '\u0028\u0061\u0029'; - t['\u249D'] = '\u0028\u0062\u0029'; - t['\u249E'] = '\u0028\u0063\u0029'; - t['\u249F'] = '\u0028\u0064\u0029'; - t['\u24A0'] = '\u0028\u0065\u0029'; - t['\u24A1'] = '\u0028\u0066\u0029'; - t['\u24A2'] = '\u0028\u0067\u0029'; - t['\u24A3'] = '\u0028\u0068\u0029'; - t['\u24A4'] = '\u0028\u0069\u0029'; - t['\u24A5'] = '\u0028\u006A\u0029'; - t['\u24A6'] = '\u0028\u006B\u0029'; - t['\u24A7'] = '\u0028\u006C\u0029'; - t['\u24A8'] = '\u0028\u006D\u0029'; - t['\u24A9'] = '\u0028\u006E\u0029'; - t['\u24AA'] = '\u0028\u006F\u0029'; - t['\u24AB'] = '\u0028\u0070\u0029'; - t['\u24AC'] = '\u0028\u0071\u0029'; - t['\u24AD'] = '\u0028\u0072\u0029'; - t['\u24AE'] = '\u0028\u0073\u0029'; - t['\u24AF'] = '\u0028\u0074\u0029'; - t['\u24B0'] = '\u0028\u0075\u0029'; - t['\u24B1'] = '\u0028\u0076\u0029'; - t['\u24B2'] = '\u0028\u0077\u0029'; - t['\u24B3'] = '\u0028\u0078\u0029'; - t['\u24B4'] = '\u0028\u0079\u0029'; - t['\u24B5'] = '\u0028\u007A\u0029'; - t['\u2A0C'] = '\u222B\u222B\u222B\u222B'; - t['\u2A74'] = '\u003A\u003A\u003D'; - t['\u2A75'] = '\u003D\u003D'; - t['\u2A76'] = '\u003D\u003D\u003D'; - t['\u2E9F'] = '\u6BCD'; - t['\u2EF3'] = '\u9F9F'; - t['\u2F00'] = '\u4E00'; - t['\u2F01'] = '\u4E28'; - t['\u2F02'] = '\u4E36'; - t['\u2F03'] = '\u4E3F'; - t['\u2F04'] = '\u4E59'; - t['\u2F05'] = '\u4E85'; - t['\u2F06'] = '\u4E8C'; - t['\u2F07'] = '\u4EA0'; - t['\u2F08'] = '\u4EBA'; - t['\u2F09'] = '\u513F'; - t['\u2F0A'] = '\u5165'; - t['\u2F0B'] = '\u516B'; - t['\u2F0C'] = '\u5182'; - t['\u2F0D'] = '\u5196'; - t['\u2F0E'] = '\u51AB'; - t['\u2F0F'] = '\u51E0'; - t['\u2F10'] = '\u51F5'; - t['\u2F11'] = '\u5200'; - t['\u2F12'] = '\u529B'; - t['\u2F13'] = '\u52F9'; - t['\u2F14'] = '\u5315'; - t['\u2F15'] = '\u531A'; - t['\u2F16'] = '\u5338'; - t['\u2F17'] = '\u5341'; - t['\u2F18'] = '\u535C'; - t['\u2F19'] = '\u5369'; - t['\u2F1A'] = '\u5382'; - t['\u2F1B'] = '\u53B6'; - t['\u2F1C'] = '\u53C8'; - t['\u2F1D'] = '\u53E3'; - t['\u2F1E'] = '\u56D7'; - t['\u2F1F'] = '\u571F'; - t['\u2F20'] = '\u58EB'; - t['\u2F21'] = '\u5902'; - t['\u2F22'] = '\u590A'; - t['\u2F23'] = '\u5915'; - t['\u2F24'] = '\u5927'; - t['\u2F25'] = '\u5973'; - t['\u2F26'] = '\u5B50'; - t['\u2F27'] = '\u5B80'; - t['\u2F28'] = '\u5BF8'; - t['\u2F29'] = '\u5C0F'; - t['\u2F2A'] = '\u5C22'; - t['\u2F2B'] = '\u5C38'; - t['\u2F2C'] = '\u5C6E'; - t['\u2F2D'] = '\u5C71'; - t['\u2F2E'] = '\u5DDB'; - t['\u2F2F'] = '\u5DE5'; - t['\u2F30'] = '\u5DF1'; - t['\u2F31'] = '\u5DFE'; - t['\u2F32'] = '\u5E72'; - t['\u2F33'] = '\u5E7A'; - t['\u2F34'] = '\u5E7F'; - t['\u2F35'] = '\u5EF4'; - t['\u2F36'] = '\u5EFE'; - t['\u2F37'] = '\u5F0B'; - t['\u2F38'] = '\u5F13'; - t['\u2F39'] = '\u5F50'; - t['\u2F3A'] = '\u5F61'; - t['\u2F3B'] = '\u5F73'; - t['\u2F3C'] = '\u5FC3'; - t['\u2F3D'] = '\u6208'; - t['\u2F3E'] = '\u6236'; - t['\u2F3F'] = '\u624B'; - t['\u2F40'] = '\u652F'; - t['\u2F41'] = '\u6534'; - t['\u2F42'] = '\u6587'; - t['\u2F43'] = '\u6597'; - t['\u2F44'] = '\u65A4'; - t['\u2F45'] = '\u65B9'; - t['\u2F46'] = '\u65E0'; - t['\u2F47'] = '\u65E5'; - t['\u2F48'] = '\u66F0'; - t['\u2F49'] = '\u6708'; - t['\u2F4A'] = '\u6728'; - t['\u2F4B'] = '\u6B20'; - t['\u2F4C'] = '\u6B62'; - t['\u2F4D'] = '\u6B79'; - t['\u2F4E'] = '\u6BB3'; - t['\u2F4F'] = '\u6BCB'; - t['\u2F50'] = '\u6BD4'; - t['\u2F51'] = '\u6BDB'; - t['\u2F52'] = '\u6C0F'; - t['\u2F53'] = '\u6C14'; - t['\u2F54'] = '\u6C34'; - t['\u2F55'] = '\u706B'; - t['\u2F56'] = '\u722A'; - t['\u2F57'] = '\u7236'; - t['\u2F58'] = '\u723B'; - t['\u2F59'] = '\u723F'; - t['\u2F5A'] = '\u7247'; - t['\u2F5B'] = '\u7259'; - t['\u2F5C'] = '\u725B'; - t['\u2F5D'] = '\u72AC'; - t['\u2F5E'] = '\u7384'; - t['\u2F5F'] = '\u7389'; - t['\u2F60'] = '\u74DC'; - t['\u2F61'] = '\u74E6'; - t['\u2F62'] = '\u7518'; - t['\u2F63'] = '\u751F'; - t['\u2F64'] = '\u7528'; - t['\u2F65'] = '\u7530'; - t['\u2F66'] = '\u758B'; - t['\u2F67'] = '\u7592'; - t['\u2F68'] = '\u7676'; - t['\u2F69'] = '\u767D'; - t['\u2F6A'] = '\u76AE'; - t['\u2F6B'] = '\u76BF'; - t['\u2F6C'] = '\u76EE'; - t['\u2F6D'] = '\u77DB'; - t['\u2F6E'] = '\u77E2'; - t['\u2F6F'] = '\u77F3'; - t['\u2F70'] = '\u793A'; - t['\u2F71'] = '\u79B8'; - t['\u2F72'] = '\u79BE'; - t['\u2F73'] = '\u7A74'; - t['\u2F74'] = '\u7ACB'; - t['\u2F75'] = '\u7AF9'; - t['\u2F76'] = '\u7C73'; - t['\u2F77'] = '\u7CF8'; - t['\u2F78'] = '\u7F36'; - t['\u2F79'] = '\u7F51'; - t['\u2F7A'] = '\u7F8A'; - t['\u2F7B'] = '\u7FBD'; - t['\u2F7C'] = '\u8001'; - t['\u2F7D'] = '\u800C'; - t['\u2F7E'] = '\u8012'; - t['\u2F7F'] = '\u8033'; - t['\u2F80'] = '\u807F'; - t['\u2F81'] = '\u8089'; - t['\u2F82'] = '\u81E3'; - t['\u2F83'] = '\u81EA'; - t['\u2F84'] = '\u81F3'; - t['\u2F85'] = '\u81FC'; - t['\u2F86'] = '\u820C'; - t['\u2F87'] = '\u821B'; - t['\u2F88'] = '\u821F'; - t['\u2F89'] = '\u826E'; - t['\u2F8A'] = '\u8272'; - t['\u2F8B'] = '\u8278'; - t['\u2F8C'] = '\u864D'; - t['\u2F8D'] = '\u866B'; - t['\u2F8E'] = '\u8840'; - t['\u2F8F'] = '\u884C'; - t['\u2F90'] = '\u8863'; - t['\u2F91'] = '\u897E'; - t['\u2F92'] = '\u898B'; - t['\u2F93'] = '\u89D2'; - t['\u2F94'] = '\u8A00'; - t['\u2F95'] = '\u8C37'; - t['\u2F96'] = '\u8C46'; - t['\u2F97'] = '\u8C55'; - t['\u2F98'] = '\u8C78'; - t['\u2F99'] = '\u8C9D'; - t['\u2F9A'] = '\u8D64'; - t['\u2F9B'] = '\u8D70'; - t['\u2F9C'] = '\u8DB3'; - t['\u2F9D'] = '\u8EAB'; - t['\u2F9E'] = '\u8ECA'; - t['\u2F9F'] = '\u8F9B'; - t['\u2FA0'] = '\u8FB0'; - t['\u2FA1'] = '\u8FB5'; - t['\u2FA2'] = '\u9091'; - t['\u2FA3'] = '\u9149'; - t['\u2FA4'] = '\u91C6'; - t['\u2FA5'] = '\u91CC'; - t['\u2FA6'] = '\u91D1'; - t['\u2FA7'] = '\u9577'; - t['\u2FA8'] = '\u9580'; - t['\u2FA9'] = '\u961C'; - t['\u2FAA'] = '\u96B6'; - t['\u2FAB'] = '\u96B9'; - t['\u2FAC'] = '\u96E8'; - t['\u2FAD'] = '\u9751'; - t['\u2FAE'] = '\u975E'; - t['\u2FAF'] = '\u9762'; - t['\u2FB0'] = '\u9769'; - t['\u2FB1'] = '\u97CB'; - t['\u2FB2'] = '\u97ED'; - t['\u2FB3'] = '\u97F3'; - t['\u2FB4'] = '\u9801'; - t['\u2FB5'] = '\u98A8'; - t['\u2FB6'] = '\u98DB'; - t['\u2FB7'] = '\u98DF'; - t['\u2FB8'] = '\u9996'; - t['\u2FB9'] = '\u9999'; - t['\u2FBA'] = '\u99AC'; - t['\u2FBB'] = '\u9AA8'; - t['\u2FBC'] = '\u9AD8'; - t['\u2FBD'] = '\u9ADF'; - t['\u2FBE'] = '\u9B25'; - t['\u2FBF'] = '\u9B2F'; - t['\u2FC0'] = '\u9B32'; - t['\u2FC1'] = '\u9B3C'; - t['\u2FC2'] = '\u9B5A'; - t['\u2FC3'] = '\u9CE5'; - t['\u2FC4'] = '\u9E75'; - t['\u2FC5'] = '\u9E7F'; - t['\u2FC6'] = '\u9EA5'; - t['\u2FC7'] = '\u9EBB'; - t['\u2FC8'] = '\u9EC3'; - t['\u2FC9'] = '\u9ECD'; - t['\u2FCA'] = '\u9ED1'; - t['\u2FCB'] = '\u9EF9'; - t['\u2FCC'] = '\u9EFD'; - t['\u2FCD'] = '\u9F0E'; - t['\u2FCE'] = '\u9F13'; - t['\u2FCF'] = '\u9F20'; - t['\u2FD0'] = '\u9F3B'; - t['\u2FD1'] = '\u9F4A'; - t['\u2FD2'] = '\u9F52'; - t['\u2FD3'] = '\u9F8D'; - t['\u2FD4'] = '\u9F9C'; - t['\u2FD5'] = '\u9FA0'; - t['\u3036'] = '\u3012'; - t['\u3038'] = '\u5341'; - t['\u3039'] = '\u5344'; - t['\u303A'] = '\u5345'; - t['\u309B'] = '\u0020\u3099'; - t['\u309C'] = '\u0020\u309A'; - t['\u3131'] = '\u1100'; - t['\u3132'] = '\u1101'; - t['\u3133'] = '\u11AA'; - t['\u3134'] = '\u1102'; - t['\u3135'] = '\u11AC'; - t['\u3136'] = '\u11AD'; - t['\u3137'] = '\u1103'; - t['\u3138'] = '\u1104'; - t['\u3139'] = '\u1105'; - t['\u313A'] = '\u11B0'; - t['\u313B'] = '\u11B1'; - t['\u313C'] = '\u11B2'; - t['\u313D'] = '\u11B3'; - t['\u313E'] = '\u11B4'; - t['\u313F'] = '\u11B5'; - t['\u3140'] = '\u111A'; - t['\u3141'] = '\u1106'; - t['\u3142'] = '\u1107'; - t['\u3143'] = '\u1108'; - t['\u3144'] = '\u1121'; - t['\u3145'] = '\u1109'; - t['\u3146'] = '\u110A'; - t['\u3147'] = '\u110B'; - t['\u3148'] = '\u110C'; - t['\u3149'] = '\u110D'; - t['\u314A'] = '\u110E'; - t['\u314B'] = '\u110F'; - t['\u314C'] = '\u1110'; - t['\u314D'] = '\u1111'; - t['\u314E'] = '\u1112'; - t['\u314F'] = '\u1161'; - t['\u3150'] = '\u1162'; - t['\u3151'] = '\u1163'; - t['\u3152'] = '\u1164'; - t['\u3153'] = '\u1165'; - t['\u3154'] = '\u1166'; - t['\u3155'] = '\u1167'; - t['\u3156'] = '\u1168'; - t['\u3157'] = '\u1169'; - t['\u3158'] = '\u116A'; - t['\u3159'] = '\u116B'; - t['\u315A'] = '\u116C'; - t['\u315B'] = '\u116D'; - t['\u315C'] = '\u116E'; - t['\u315D'] = '\u116F'; - t['\u315E'] = '\u1170'; - t['\u315F'] = '\u1171'; - t['\u3160'] = '\u1172'; - t['\u3161'] = '\u1173'; - t['\u3162'] = '\u1174'; - t['\u3163'] = '\u1175'; - t['\u3164'] = '\u1160'; - t['\u3165'] = '\u1114'; - t['\u3166'] = '\u1115'; - t['\u3167'] = '\u11C7'; - t['\u3168'] = '\u11C8'; - t['\u3169'] = '\u11CC'; - t['\u316A'] = '\u11CE'; - t['\u316B'] = '\u11D3'; - t['\u316C'] = '\u11D7'; - t['\u316D'] = '\u11D9'; - t['\u316E'] = '\u111C'; - t['\u316F'] = '\u11DD'; - t['\u3170'] = '\u11DF'; - t['\u3171'] = '\u111D'; - t['\u3172'] = '\u111E'; - t['\u3173'] = '\u1120'; - t['\u3174'] = '\u1122'; - t['\u3175'] = '\u1123'; - t['\u3176'] = '\u1127'; - t['\u3177'] = '\u1129'; - t['\u3178'] = '\u112B'; - t['\u3179'] = '\u112C'; - t['\u317A'] = '\u112D'; - t['\u317B'] = '\u112E'; - t['\u317C'] = '\u112F'; - t['\u317D'] = '\u1132'; - t['\u317E'] = '\u1136'; - t['\u317F'] = '\u1140'; - t['\u3180'] = '\u1147'; - t['\u3181'] = '\u114C'; - t['\u3182'] = '\u11F1'; - t['\u3183'] = '\u11F2'; - t['\u3184'] = '\u1157'; - t['\u3185'] = '\u1158'; - t['\u3186'] = '\u1159'; - t['\u3187'] = '\u1184'; - t['\u3188'] = '\u1185'; - t['\u3189'] = '\u1188'; - t['\u318A'] = '\u1191'; - t['\u318B'] = '\u1192'; - t['\u318C'] = '\u1194'; - t['\u318D'] = '\u119E'; - t['\u318E'] = '\u11A1'; - t['\u3200'] = '\u0028\u1100\u0029'; - t['\u3201'] = '\u0028\u1102\u0029'; - t['\u3202'] = '\u0028\u1103\u0029'; - t['\u3203'] = '\u0028\u1105\u0029'; - t['\u3204'] = '\u0028\u1106\u0029'; - t['\u3205'] = '\u0028\u1107\u0029'; - t['\u3206'] = '\u0028\u1109\u0029'; - t['\u3207'] = '\u0028\u110B\u0029'; - t['\u3208'] = '\u0028\u110C\u0029'; - t['\u3209'] = '\u0028\u110E\u0029'; - t['\u320A'] = '\u0028\u110F\u0029'; - t['\u320B'] = '\u0028\u1110\u0029'; - t['\u320C'] = '\u0028\u1111\u0029'; - t['\u320D'] = '\u0028\u1112\u0029'; - t['\u320E'] = '\u0028\u1100\u1161\u0029'; - t['\u320F'] = '\u0028\u1102\u1161\u0029'; - t['\u3210'] = '\u0028\u1103\u1161\u0029'; - t['\u3211'] = '\u0028\u1105\u1161\u0029'; - t['\u3212'] = '\u0028\u1106\u1161\u0029'; - t['\u3213'] = '\u0028\u1107\u1161\u0029'; - t['\u3214'] = '\u0028\u1109\u1161\u0029'; - t['\u3215'] = '\u0028\u110B\u1161\u0029'; - t['\u3216'] = '\u0028\u110C\u1161\u0029'; - t['\u3217'] = '\u0028\u110E\u1161\u0029'; - t['\u3218'] = '\u0028\u110F\u1161\u0029'; - t['\u3219'] = '\u0028\u1110\u1161\u0029'; - t['\u321A'] = '\u0028\u1111\u1161\u0029'; - t['\u321B'] = '\u0028\u1112\u1161\u0029'; - t['\u321C'] = '\u0028\u110C\u116E\u0029'; - t['\u321D'] = '\u0028\u110B\u1169\u110C\u1165\u11AB\u0029'; - t['\u321E'] = '\u0028\u110B\u1169\u1112\u116E\u0029'; - t['\u3220'] = '\u0028\u4E00\u0029'; - t['\u3221'] = '\u0028\u4E8C\u0029'; - t['\u3222'] = '\u0028\u4E09\u0029'; - t['\u3223'] = '\u0028\u56DB\u0029'; - t['\u3224'] = '\u0028\u4E94\u0029'; - t['\u3225'] = '\u0028\u516D\u0029'; - t['\u3226'] = '\u0028\u4E03\u0029'; - t['\u3227'] = '\u0028\u516B\u0029'; - t['\u3228'] = '\u0028\u4E5D\u0029'; - t['\u3229'] = '\u0028\u5341\u0029'; - t['\u322A'] = '\u0028\u6708\u0029'; - t['\u322B'] = '\u0028\u706B\u0029'; - t['\u322C'] = '\u0028\u6C34\u0029'; - t['\u322D'] = '\u0028\u6728\u0029'; - t['\u322E'] = '\u0028\u91D1\u0029'; - t['\u322F'] = '\u0028\u571F\u0029'; - t['\u3230'] = '\u0028\u65E5\u0029'; - t['\u3231'] = '\u0028\u682A\u0029'; - t['\u3232'] = '\u0028\u6709\u0029'; - t['\u3233'] = '\u0028\u793E\u0029'; - t['\u3234'] = '\u0028\u540D\u0029'; - t['\u3235'] = '\u0028\u7279\u0029'; - t['\u3236'] = '\u0028\u8CA1\u0029'; - t['\u3237'] = '\u0028\u795D\u0029'; - t['\u3238'] = '\u0028\u52B4\u0029'; - t['\u3239'] = '\u0028\u4EE3\u0029'; - t['\u323A'] = '\u0028\u547C\u0029'; - t['\u323B'] = '\u0028\u5B66\u0029'; - t['\u323C'] = '\u0028\u76E3\u0029'; - t['\u323D'] = '\u0028\u4F01\u0029'; - t['\u323E'] = '\u0028\u8CC7\u0029'; - t['\u323F'] = '\u0028\u5354\u0029'; - t['\u3240'] = '\u0028\u796D\u0029'; - t['\u3241'] = '\u0028\u4F11\u0029'; - t['\u3242'] = '\u0028\u81EA\u0029'; - t['\u3243'] = '\u0028\u81F3\u0029'; - t['\u32C0'] = '\u0031\u6708'; - t['\u32C1'] = '\u0032\u6708'; - t['\u32C2'] = '\u0033\u6708'; - t['\u32C3'] = '\u0034\u6708'; - t['\u32C4'] = '\u0035\u6708'; - t['\u32C5'] = '\u0036\u6708'; - t['\u32C6'] = '\u0037\u6708'; - t['\u32C7'] = '\u0038\u6708'; - t['\u32C8'] = '\u0039\u6708'; - t['\u32C9'] = '\u0031\u0030\u6708'; - t['\u32CA'] = '\u0031\u0031\u6708'; - t['\u32CB'] = '\u0031\u0032\u6708'; - t['\u3358'] = '\u0030\u70B9'; - t['\u3359'] = '\u0031\u70B9'; - t['\u335A'] = '\u0032\u70B9'; - t['\u335B'] = '\u0033\u70B9'; - t['\u335C'] = '\u0034\u70B9'; - t['\u335D'] = '\u0035\u70B9'; - t['\u335E'] = '\u0036\u70B9'; - t['\u335F'] = '\u0037\u70B9'; - t['\u3360'] = '\u0038\u70B9'; - t['\u3361'] = '\u0039\u70B9'; - t['\u3362'] = '\u0031\u0030\u70B9'; - t['\u3363'] = '\u0031\u0031\u70B9'; - t['\u3364'] = '\u0031\u0032\u70B9'; - t['\u3365'] = '\u0031\u0033\u70B9'; - t['\u3366'] = '\u0031\u0034\u70B9'; - t['\u3367'] = '\u0031\u0035\u70B9'; - t['\u3368'] = '\u0031\u0036\u70B9'; - t['\u3369'] = '\u0031\u0037\u70B9'; - t['\u336A'] = '\u0031\u0038\u70B9'; - t['\u336B'] = '\u0031\u0039\u70B9'; - t['\u336C'] = '\u0032\u0030\u70B9'; - t['\u336D'] = '\u0032\u0031\u70B9'; - t['\u336E'] = '\u0032\u0032\u70B9'; - t['\u336F'] = '\u0032\u0033\u70B9'; - t['\u3370'] = '\u0032\u0034\u70B9'; - t['\u33E0'] = '\u0031\u65E5'; - t['\u33E1'] = '\u0032\u65E5'; - t['\u33E2'] = '\u0033\u65E5'; - t['\u33E3'] = '\u0034\u65E5'; - t['\u33E4'] = '\u0035\u65E5'; - t['\u33E5'] = '\u0036\u65E5'; - t['\u33E6'] = '\u0037\u65E5'; - t['\u33E7'] = '\u0038\u65E5'; - t['\u33E8'] = '\u0039\u65E5'; - t['\u33E9'] = '\u0031\u0030\u65E5'; - t['\u33EA'] = '\u0031\u0031\u65E5'; - t['\u33EB'] = '\u0031\u0032\u65E5'; - t['\u33EC'] = '\u0031\u0033\u65E5'; - t['\u33ED'] = '\u0031\u0034\u65E5'; - t['\u33EE'] = '\u0031\u0035\u65E5'; - t['\u33EF'] = '\u0031\u0036\u65E5'; - t['\u33F0'] = '\u0031\u0037\u65E5'; - t['\u33F1'] = '\u0031\u0038\u65E5'; - t['\u33F2'] = '\u0031\u0039\u65E5'; - t['\u33F3'] = '\u0032\u0030\u65E5'; - t['\u33F4'] = '\u0032\u0031\u65E5'; - t['\u33F5'] = '\u0032\u0032\u65E5'; - t['\u33F6'] = '\u0032\u0033\u65E5'; - t['\u33F7'] = '\u0032\u0034\u65E5'; - t['\u33F8'] = '\u0032\u0035\u65E5'; - t['\u33F9'] = '\u0032\u0036\u65E5'; - t['\u33FA'] = '\u0032\u0037\u65E5'; - t['\u33FB'] = '\u0032\u0038\u65E5'; - t['\u33FC'] = '\u0032\u0039\u65E5'; - t['\u33FD'] = '\u0033\u0030\u65E5'; - t['\u33FE'] = '\u0033\u0031\u65E5'; - t['\uFB00'] = '\u0066\u0066'; - t['\uFB01'] = '\u0066\u0069'; - t['\uFB02'] = '\u0066\u006C'; - t['\uFB03'] = '\u0066\u0066\u0069'; - t['\uFB04'] = '\u0066\u0066\u006C'; - t['\uFB05'] = '\u017F\u0074'; - t['\uFB06'] = '\u0073\u0074'; - t['\uFB13'] = '\u0574\u0576'; - t['\uFB14'] = '\u0574\u0565'; - t['\uFB15'] = '\u0574\u056B'; - t['\uFB16'] = '\u057E\u0576'; - t['\uFB17'] = '\u0574\u056D'; - t['\uFB4F'] = '\u05D0\u05DC'; - t['\uFB50'] = '\u0671'; - t['\uFB51'] = '\u0671'; - t['\uFB52'] = '\u067B'; - t['\uFB53'] = '\u067B'; - t['\uFB54'] = '\u067B'; - t['\uFB55'] = '\u067B'; - t['\uFB56'] = '\u067E'; - t['\uFB57'] = '\u067E'; - t['\uFB58'] = '\u067E'; - t['\uFB59'] = '\u067E'; - t['\uFB5A'] = '\u0680'; - t['\uFB5B'] = '\u0680'; - t['\uFB5C'] = '\u0680'; - t['\uFB5D'] = '\u0680'; - t['\uFB5E'] = '\u067A'; - t['\uFB5F'] = '\u067A'; - t['\uFB60'] = '\u067A'; - t['\uFB61'] = '\u067A'; - t['\uFB62'] = '\u067F'; - t['\uFB63'] = '\u067F'; - t['\uFB64'] = '\u067F'; - t['\uFB65'] = '\u067F'; - t['\uFB66'] = '\u0679'; - t['\uFB67'] = '\u0679'; - t['\uFB68'] = '\u0679'; - t['\uFB69'] = '\u0679'; - t['\uFB6A'] = '\u06A4'; - t['\uFB6B'] = '\u06A4'; - t['\uFB6C'] = '\u06A4'; - t['\uFB6D'] = '\u06A4'; - t['\uFB6E'] = '\u06A6'; - t['\uFB6F'] = '\u06A6'; - t['\uFB70'] = '\u06A6'; - t['\uFB71'] = '\u06A6'; - t['\uFB72'] = '\u0684'; - t['\uFB73'] = '\u0684'; - t['\uFB74'] = '\u0684'; - t['\uFB75'] = '\u0684'; - t['\uFB76'] = '\u0683'; - t['\uFB77'] = '\u0683'; - t['\uFB78'] = '\u0683'; - t['\uFB79'] = '\u0683'; - t['\uFB7A'] = '\u0686'; - t['\uFB7B'] = '\u0686'; - t['\uFB7C'] = '\u0686'; - t['\uFB7D'] = '\u0686'; - t['\uFB7E'] = '\u0687'; - t['\uFB7F'] = '\u0687'; - t['\uFB80'] = '\u0687'; - t['\uFB81'] = '\u0687'; - t['\uFB82'] = '\u068D'; - t['\uFB83'] = '\u068D'; - t['\uFB84'] = '\u068C'; - t['\uFB85'] = '\u068C'; - t['\uFB86'] = '\u068E'; - t['\uFB87'] = '\u068E'; - t['\uFB88'] = '\u0688'; - t['\uFB89'] = '\u0688'; - t['\uFB8A'] = '\u0698'; - t['\uFB8B'] = '\u0698'; - t['\uFB8C'] = '\u0691'; - t['\uFB8D'] = '\u0691'; - t['\uFB8E'] = '\u06A9'; - t['\uFB8F'] = '\u06A9'; - t['\uFB90'] = '\u06A9'; - t['\uFB91'] = '\u06A9'; - t['\uFB92'] = '\u06AF'; - t['\uFB93'] = '\u06AF'; - t['\uFB94'] = '\u06AF'; - t['\uFB95'] = '\u06AF'; - t['\uFB96'] = '\u06B3'; - t['\uFB97'] = '\u06B3'; - t['\uFB98'] = '\u06B3'; - t['\uFB99'] = '\u06B3'; - t['\uFB9A'] = '\u06B1'; - t['\uFB9B'] = '\u06B1'; - t['\uFB9C'] = '\u06B1'; - t['\uFB9D'] = '\u06B1'; - t['\uFB9E'] = '\u06BA'; - t['\uFB9F'] = '\u06BA'; - t['\uFBA0'] = '\u06BB'; - t['\uFBA1'] = '\u06BB'; - t['\uFBA2'] = '\u06BB'; - t['\uFBA3'] = '\u06BB'; - t['\uFBA4'] = '\u06C0'; - t['\uFBA5'] = '\u06C0'; - t['\uFBA6'] = '\u06C1'; - t['\uFBA7'] = '\u06C1'; - t['\uFBA8'] = '\u06C1'; - t['\uFBA9'] = '\u06C1'; - t['\uFBAA'] = '\u06BE'; - t['\uFBAB'] = '\u06BE'; - t['\uFBAC'] = '\u06BE'; - t['\uFBAD'] = '\u06BE'; - t['\uFBAE'] = '\u06D2'; - t['\uFBAF'] = '\u06D2'; - t['\uFBB0'] = '\u06D3'; - t['\uFBB1'] = '\u06D3'; - t['\uFBD3'] = '\u06AD'; - t['\uFBD4'] = '\u06AD'; - t['\uFBD5'] = '\u06AD'; - t['\uFBD6'] = '\u06AD'; - t['\uFBD7'] = '\u06C7'; - t['\uFBD8'] = '\u06C7'; - t['\uFBD9'] = '\u06C6'; - t['\uFBDA'] = '\u06C6'; - t['\uFBDB'] = '\u06C8'; - t['\uFBDC'] = '\u06C8'; - t['\uFBDD'] = '\u0677'; - t['\uFBDE'] = '\u06CB'; - t['\uFBDF'] = '\u06CB'; - t['\uFBE0'] = '\u06C5'; - t['\uFBE1'] = '\u06C5'; - t['\uFBE2'] = '\u06C9'; - t['\uFBE3'] = '\u06C9'; - t['\uFBE4'] = '\u06D0'; - t['\uFBE5'] = '\u06D0'; - t['\uFBE6'] = '\u06D0'; - t['\uFBE7'] = '\u06D0'; - t['\uFBE8'] = '\u0649'; - t['\uFBE9'] = '\u0649'; - t['\uFBEA'] = '\u0626\u0627'; - t['\uFBEB'] = '\u0626\u0627'; - t['\uFBEC'] = '\u0626\u06D5'; - t['\uFBED'] = '\u0626\u06D5'; - t['\uFBEE'] = '\u0626\u0648'; - t['\uFBEF'] = '\u0626\u0648'; - t['\uFBF0'] = '\u0626\u06C7'; - t['\uFBF1'] = '\u0626\u06C7'; - t['\uFBF2'] = '\u0626\u06C6'; - t['\uFBF3'] = '\u0626\u06C6'; - t['\uFBF4'] = '\u0626\u06C8'; - t['\uFBF5'] = '\u0626\u06C8'; - t['\uFBF6'] = '\u0626\u06D0'; - t['\uFBF7'] = '\u0626\u06D0'; - t['\uFBF8'] = '\u0626\u06D0'; - t['\uFBF9'] = '\u0626\u0649'; - t['\uFBFA'] = '\u0626\u0649'; - t['\uFBFB'] = '\u0626\u0649'; - t['\uFBFC'] = '\u06CC'; - t['\uFBFD'] = '\u06CC'; - t['\uFBFE'] = '\u06CC'; - t['\uFBFF'] = '\u06CC'; - t['\uFC00'] = '\u0626\u062C'; - t['\uFC01'] = '\u0626\u062D'; - t['\uFC02'] = '\u0626\u0645'; - t['\uFC03'] = '\u0626\u0649'; - t['\uFC04'] = '\u0626\u064A'; - t['\uFC05'] = '\u0628\u062C'; - t['\uFC06'] = '\u0628\u062D'; - t['\uFC07'] = '\u0628\u062E'; - t['\uFC08'] = '\u0628\u0645'; - t['\uFC09'] = '\u0628\u0649'; - t['\uFC0A'] = '\u0628\u064A'; - t['\uFC0B'] = '\u062A\u062C'; - t['\uFC0C'] = '\u062A\u062D'; - t['\uFC0D'] = '\u062A\u062E'; - t['\uFC0E'] = '\u062A\u0645'; - t['\uFC0F'] = '\u062A\u0649'; - t['\uFC10'] = '\u062A\u064A'; - t['\uFC11'] = '\u062B\u062C'; - t['\uFC12'] = '\u062B\u0645'; - t['\uFC13'] = '\u062B\u0649'; - t['\uFC14'] = '\u062B\u064A'; - t['\uFC15'] = '\u062C\u062D'; - t['\uFC16'] = '\u062C\u0645'; - t['\uFC17'] = '\u062D\u062C'; - t['\uFC18'] = '\u062D\u0645'; - t['\uFC19'] = '\u062E\u062C'; - t['\uFC1A'] = '\u062E\u062D'; - t['\uFC1B'] = '\u062E\u0645'; - t['\uFC1C'] = '\u0633\u062C'; - t['\uFC1D'] = '\u0633\u062D'; - t['\uFC1E'] = '\u0633\u062E'; - t['\uFC1F'] = '\u0633\u0645'; - t['\uFC20'] = '\u0635\u062D'; - t['\uFC21'] = '\u0635\u0645'; - t['\uFC22'] = '\u0636\u062C'; - t['\uFC23'] = '\u0636\u062D'; - t['\uFC24'] = '\u0636\u062E'; - t['\uFC25'] = '\u0636\u0645'; - t['\uFC26'] = '\u0637\u062D'; - t['\uFC27'] = '\u0637\u0645'; - t['\uFC28'] = '\u0638\u0645'; - t['\uFC29'] = '\u0639\u062C'; - t['\uFC2A'] = '\u0639\u0645'; - t['\uFC2B'] = '\u063A\u062C'; - t['\uFC2C'] = '\u063A\u0645'; - t['\uFC2D'] = '\u0641\u062C'; - t['\uFC2E'] = '\u0641\u062D'; - t['\uFC2F'] = '\u0641\u062E'; - t['\uFC30'] = '\u0641\u0645'; - t['\uFC31'] = '\u0641\u0649'; - t['\uFC32'] = '\u0641\u064A'; - t['\uFC33'] = '\u0642\u062D'; - t['\uFC34'] = '\u0642\u0645'; - t['\uFC35'] = '\u0642\u0649'; - t['\uFC36'] = '\u0642\u064A'; - t['\uFC37'] = '\u0643\u0627'; - t['\uFC38'] = '\u0643\u062C'; - t['\uFC39'] = '\u0643\u062D'; - t['\uFC3A'] = '\u0643\u062E'; - t['\uFC3B'] = '\u0643\u0644'; - t['\uFC3C'] = '\u0643\u0645'; - t['\uFC3D'] = '\u0643\u0649'; - t['\uFC3E'] = '\u0643\u064A'; - t['\uFC3F'] = '\u0644\u062C'; - t['\uFC40'] = '\u0644\u062D'; - t['\uFC41'] = '\u0644\u062E'; - t['\uFC42'] = '\u0644\u0645'; - t['\uFC43'] = '\u0644\u0649'; - t['\uFC44'] = '\u0644\u064A'; - t['\uFC45'] = '\u0645\u062C'; - t['\uFC46'] = '\u0645\u062D'; - t['\uFC47'] = '\u0645\u062E'; - t['\uFC48'] = '\u0645\u0645'; - t['\uFC49'] = '\u0645\u0649'; - t['\uFC4A'] = '\u0645\u064A'; - t['\uFC4B'] = '\u0646\u062C'; - t['\uFC4C'] = '\u0646\u062D'; - t['\uFC4D'] = '\u0646\u062E'; - t['\uFC4E'] = '\u0646\u0645'; - t['\uFC4F'] = '\u0646\u0649'; - t['\uFC50'] = '\u0646\u064A'; - t['\uFC51'] = '\u0647\u062C'; - t['\uFC52'] = '\u0647\u0645'; - t['\uFC53'] = '\u0647\u0649'; - t['\uFC54'] = '\u0647\u064A'; - t['\uFC55'] = '\u064A\u062C'; - t['\uFC56'] = '\u064A\u062D'; - t['\uFC57'] = '\u064A\u062E'; - t['\uFC58'] = '\u064A\u0645'; - t['\uFC59'] = '\u064A\u0649'; - t['\uFC5A'] = '\u064A\u064A'; - t['\uFC5B'] = '\u0630\u0670'; - t['\uFC5C'] = '\u0631\u0670'; - t['\uFC5D'] = '\u0649\u0670'; - t['\uFC5E'] = '\u0020\u064C\u0651'; - t['\uFC5F'] = '\u0020\u064D\u0651'; - t['\uFC60'] = '\u0020\u064E\u0651'; - t['\uFC61'] = '\u0020\u064F\u0651'; - t['\uFC62'] = '\u0020\u0650\u0651'; - t['\uFC63'] = '\u0020\u0651\u0670'; - t['\uFC64'] = '\u0626\u0631'; - t['\uFC65'] = '\u0626\u0632'; - t['\uFC66'] = '\u0626\u0645'; - t['\uFC67'] = '\u0626\u0646'; - t['\uFC68'] = '\u0626\u0649'; - t['\uFC69'] = '\u0626\u064A'; - t['\uFC6A'] = '\u0628\u0631'; - t['\uFC6B'] = '\u0628\u0632'; - t['\uFC6C'] = '\u0628\u0645'; - t['\uFC6D'] = '\u0628\u0646'; - t['\uFC6E'] = '\u0628\u0649'; - t['\uFC6F'] = '\u0628\u064A'; - t['\uFC70'] = '\u062A\u0631'; - t['\uFC71'] = '\u062A\u0632'; - t['\uFC72'] = '\u062A\u0645'; - t['\uFC73'] = '\u062A\u0646'; - t['\uFC74'] = '\u062A\u0649'; - t['\uFC75'] = '\u062A\u064A'; - t['\uFC76'] = '\u062B\u0631'; - t['\uFC77'] = '\u062B\u0632'; - t['\uFC78'] = '\u062B\u0645'; - t['\uFC79'] = '\u062B\u0646'; - t['\uFC7A'] = '\u062B\u0649'; - t['\uFC7B'] = '\u062B\u064A'; - t['\uFC7C'] = '\u0641\u0649'; - t['\uFC7D'] = '\u0641\u064A'; - t['\uFC7E'] = '\u0642\u0649'; - t['\uFC7F'] = '\u0642\u064A'; - t['\uFC80'] = '\u0643\u0627'; - t['\uFC81'] = '\u0643\u0644'; - t['\uFC82'] = '\u0643\u0645'; - t['\uFC83'] = '\u0643\u0649'; - t['\uFC84'] = '\u0643\u064A'; - t['\uFC85'] = '\u0644\u0645'; - t['\uFC86'] = '\u0644\u0649'; - t['\uFC87'] = '\u0644\u064A'; - t['\uFC88'] = '\u0645\u0627'; - t['\uFC89'] = '\u0645\u0645'; - t['\uFC8A'] = '\u0646\u0631'; - t['\uFC8B'] = '\u0646\u0632'; - t['\uFC8C'] = '\u0646\u0645'; - t['\uFC8D'] = '\u0646\u0646'; - t['\uFC8E'] = '\u0646\u0649'; - t['\uFC8F'] = '\u0646\u064A'; - t['\uFC90'] = '\u0649\u0670'; - t['\uFC91'] = '\u064A\u0631'; - t['\uFC92'] = '\u064A\u0632'; - t['\uFC93'] = '\u064A\u0645'; - t['\uFC94'] = '\u064A\u0646'; - t['\uFC95'] = '\u064A\u0649'; - t['\uFC96'] = '\u064A\u064A'; - t['\uFC97'] = '\u0626\u062C'; - t['\uFC98'] = '\u0626\u062D'; - t['\uFC99'] = '\u0626\u062E'; - t['\uFC9A'] = '\u0626\u0645'; - t['\uFC9B'] = '\u0626\u0647'; - t['\uFC9C'] = '\u0628\u062C'; - t['\uFC9D'] = '\u0628\u062D'; - t['\uFC9E'] = '\u0628\u062E'; - t['\uFC9F'] = '\u0628\u0645'; - t['\uFCA0'] = '\u0628\u0647'; - t['\uFCA1'] = '\u062A\u062C'; - t['\uFCA2'] = '\u062A\u062D'; - t['\uFCA3'] = '\u062A\u062E'; - t['\uFCA4'] = '\u062A\u0645'; - t['\uFCA5'] = '\u062A\u0647'; - t['\uFCA6'] = '\u062B\u0645'; - t['\uFCA7'] = '\u062C\u062D'; - t['\uFCA8'] = '\u062C\u0645'; - t['\uFCA9'] = '\u062D\u062C'; - t['\uFCAA'] = '\u062D\u0645'; - t['\uFCAB'] = '\u062E\u062C'; - t['\uFCAC'] = '\u062E\u0645'; - t['\uFCAD'] = '\u0633\u062C'; - t['\uFCAE'] = '\u0633\u062D'; - t['\uFCAF'] = '\u0633\u062E'; - t['\uFCB0'] = '\u0633\u0645'; - t['\uFCB1'] = '\u0635\u062D'; - t['\uFCB2'] = '\u0635\u062E'; - t['\uFCB3'] = '\u0635\u0645'; - t['\uFCB4'] = '\u0636\u062C'; - t['\uFCB5'] = '\u0636\u062D'; - t['\uFCB6'] = '\u0636\u062E'; - t['\uFCB7'] = '\u0636\u0645'; - t['\uFCB8'] = '\u0637\u062D'; - t['\uFCB9'] = '\u0638\u0645'; - t['\uFCBA'] = '\u0639\u062C'; - t['\uFCBB'] = '\u0639\u0645'; - t['\uFCBC'] = '\u063A\u062C'; - t['\uFCBD'] = '\u063A\u0645'; - t['\uFCBE'] = '\u0641\u062C'; - t['\uFCBF'] = '\u0641\u062D'; - t['\uFCC0'] = '\u0641\u062E'; - t['\uFCC1'] = '\u0641\u0645'; - t['\uFCC2'] = '\u0642\u062D'; - t['\uFCC3'] = '\u0642\u0645'; - t['\uFCC4'] = '\u0643\u062C'; - t['\uFCC5'] = '\u0643\u062D'; - t['\uFCC6'] = '\u0643\u062E'; - t['\uFCC7'] = '\u0643\u0644'; - t['\uFCC8'] = '\u0643\u0645'; - t['\uFCC9'] = '\u0644\u062C'; - t['\uFCCA'] = '\u0644\u062D'; - t['\uFCCB'] = '\u0644\u062E'; - t['\uFCCC'] = '\u0644\u0645'; - t['\uFCCD'] = '\u0644\u0647'; - t['\uFCCE'] = '\u0645\u062C'; - t['\uFCCF'] = '\u0645\u062D'; - t['\uFCD0'] = '\u0645\u062E'; - t['\uFCD1'] = '\u0645\u0645'; - t['\uFCD2'] = '\u0646\u062C'; - t['\uFCD3'] = '\u0646\u062D'; - t['\uFCD4'] = '\u0646\u062E'; - t['\uFCD5'] = '\u0646\u0645'; - t['\uFCD6'] = '\u0646\u0647'; - t['\uFCD7'] = '\u0647\u062C'; - t['\uFCD8'] = '\u0647\u0645'; - t['\uFCD9'] = '\u0647\u0670'; - t['\uFCDA'] = '\u064A\u062C'; - t['\uFCDB'] = '\u064A\u062D'; - t['\uFCDC'] = '\u064A\u062E'; - t['\uFCDD'] = '\u064A\u0645'; - t['\uFCDE'] = '\u064A\u0647'; - t['\uFCDF'] = '\u0626\u0645'; - t['\uFCE0'] = '\u0626\u0647'; - t['\uFCE1'] = '\u0628\u0645'; - t['\uFCE2'] = '\u0628\u0647'; - t['\uFCE3'] = '\u062A\u0645'; - t['\uFCE4'] = '\u062A\u0647'; - t['\uFCE5'] = '\u062B\u0645'; - t['\uFCE6'] = '\u062B\u0647'; - t['\uFCE7'] = '\u0633\u0645'; - t['\uFCE8'] = '\u0633\u0647'; - t['\uFCE9'] = '\u0634\u0645'; - t['\uFCEA'] = '\u0634\u0647'; - t['\uFCEB'] = '\u0643\u0644'; - t['\uFCEC'] = '\u0643\u0645'; - t['\uFCED'] = '\u0644\u0645'; - t['\uFCEE'] = '\u0646\u0645'; - t['\uFCEF'] = '\u0646\u0647'; - t['\uFCF0'] = '\u064A\u0645'; - t['\uFCF1'] = '\u064A\u0647'; - t['\uFCF2'] = '\u0640\u064E\u0651'; - t['\uFCF3'] = '\u0640\u064F\u0651'; - t['\uFCF4'] = '\u0640\u0650\u0651'; - t['\uFCF5'] = '\u0637\u0649'; - t['\uFCF6'] = '\u0637\u064A'; - t['\uFCF7'] = '\u0639\u0649'; - t['\uFCF8'] = '\u0639\u064A'; - t['\uFCF9'] = '\u063A\u0649'; - t['\uFCFA'] = '\u063A\u064A'; - t['\uFCFB'] = '\u0633\u0649'; - t['\uFCFC'] = '\u0633\u064A'; - t['\uFCFD'] = '\u0634\u0649'; - t['\uFCFE'] = '\u0634\u064A'; - t['\uFCFF'] = '\u062D\u0649'; - t['\uFD00'] = '\u062D\u064A'; - t['\uFD01'] = '\u062C\u0649'; - t['\uFD02'] = '\u062C\u064A'; - t['\uFD03'] = '\u062E\u0649'; - t['\uFD04'] = '\u062E\u064A'; - t['\uFD05'] = '\u0635\u0649'; - t['\uFD06'] = '\u0635\u064A'; - t['\uFD07'] = '\u0636\u0649'; - t['\uFD08'] = '\u0636\u064A'; - t['\uFD09'] = '\u0634\u062C'; - t['\uFD0A'] = '\u0634\u062D'; - t['\uFD0B'] = '\u0634\u062E'; - t['\uFD0C'] = '\u0634\u0645'; - t['\uFD0D'] = '\u0634\u0631'; - t['\uFD0E'] = '\u0633\u0631'; - t['\uFD0F'] = '\u0635\u0631'; - t['\uFD10'] = '\u0636\u0631'; - t['\uFD11'] = '\u0637\u0649'; - t['\uFD12'] = '\u0637\u064A'; - t['\uFD13'] = '\u0639\u0649'; - t['\uFD14'] = '\u0639\u064A'; - t['\uFD15'] = '\u063A\u0649'; - t['\uFD16'] = '\u063A\u064A'; - t['\uFD17'] = '\u0633\u0649'; - t['\uFD18'] = '\u0633\u064A'; - t['\uFD19'] = '\u0634\u0649'; - t['\uFD1A'] = '\u0634\u064A'; - t['\uFD1B'] = '\u062D\u0649'; - t['\uFD1C'] = '\u062D\u064A'; - t['\uFD1D'] = '\u062C\u0649'; - t['\uFD1E'] = '\u062C\u064A'; - t['\uFD1F'] = '\u062E\u0649'; - t['\uFD20'] = '\u062E\u064A'; - t['\uFD21'] = '\u0635\u0649'; - t['\uFD22'] = '\u0635\u064A'; - t['\uFD23'] = '\u0636\u0649'; - t['\uFD24'] = '\u0636\u064A'; - t['\uFD25'] = '\u0634\u062C'; - t['\uFD26'] = '\u0634\u062D'; - t['\uFD27'] = '\u0634\u062E'; - t['\uFD28'] = '\u0634\u0645'; - t['\uFD29'] = '\u0634\u0631'; - t['\uFD2A'] = '\u0633\u0631'; - t['\uFD2B'] = '\u0635\u0631'; - t['\uFD2C'] = '\u0636\u0631'; - t['\uFD2D'] = '\u0634\u062C'; - t['\uFD2E'] = '\u0634\u062D'; - t['\uFD2F'] = '\u0634\u062E'; - t['\uFD30'] = '\u0634\u0645'; - t['\uFD31'] = '\u0633\u0647'; - t['\uFD32'] = '\u0634\u0647'; - t['\uFD33'] = '\u0637\u0645'; - t['\uFD34'] = '\u0633\u062C'; - t['\uFD35'] = '\u0633\u062D'; - t['\uFD36'] = '\u0633\u062E'; - t['\uFD37'] = '\u0634\u062C'; - t['\uFD38'] = '\u0634\u062D'; - t['\uFD39'] = '\u0634\u062E'; - t['\uFD3A'] = '\u0637\u0645'; - t['\uFD3B'] = '\u0638\u0645'; - t['\uFD3C'] = '\u0627\u064B'; - t['\uFD3D'] = '\u0627\u064B'; - t['\uFD50'] = '\u062A\u062C\u0645'; - t['\uFD51'] = '\u062A\u062D\u062C'; - t['\uFD52'] = '\u062A\u062D\u062C'; - t['\uFD53'] = '\u062A\u062D\u0645'; - t['\uFD54'] = '\u062A\u062E\u0645'; - t['\uFD55'] = '\u062A\u0645\u062C'; - t['\uFD56'] = '\u062A\u0645\u062D'; - t['\uFD57'] = '\u062A\u0645\u062E'; - t['\uFD58'] = '\u062C\u0645\u062D'; - t['\uFD59'] = '\u062C\u0645\u062D'; - t['\uFD5A'] = '\u062D\u0645\u064A'; - t['\uFD5B'] = '\u062D\u0645\u0649'; - t['\uFD5C'] = '\u0633\u062D\u062C'; - t['\uFD5D'] = '\u0633\u062C\u062D'; - t['\uFD5E'] = '\u0633\u062C\u0649'; - t['\uFD5F'] = '\u0633\u0645\u062D'; - t['\uFD60'] = '\u0633\u0645\u062D'; - t['\uFD61'] = '\u0633\u0645\u062C'; - t['\uFD62'] = '\u0633\u0645\u0645'; - t['\uFD63'] = '\u0633\u0645\u0645'; - t['\uFD64'] = '\u0635\u062D\u062D'; - t['\uFD65'] = '\u0635\u062D\u062D'; - t['\uFD66'] = '\u0635\u0645\u0645'; - t['\uFD67'] = '\u0634\u062D\u0645'; - t['\uFD68'] = '\u0634\u062D\u0645'; - t['\uFD69'] = '\u0634\u062C\u064A'; - t['\uFD6A'] = '\u0634\u0645\u062E'; - t['\uFD6B'] = '\u0634\u0645\u062E'; - t['\uFD6C'] = '\u0634\u0645\u0645'; - t['\uFD6D'] = '\u0634\u0645\u0645'; - t['\uFD6E'] = '\u0636\u062D\u0649'; - t['\uFD6F'] = '\u0636\u062E\u0645'; - t['\uFD70'] = '\u0636\u062E\u0645'; - t['\uFD71'] = '\u0637\u0645\u062D'; - t['\uFD72'] = '\u0637\u0645\u062D'; - t['\uFD73'] = '\u0637\u0645\u0645'; - t['\uFD74'] = '\u0637\u0645\u064A'; - t['\uFD75'] = '\u0639\u062C\u0645'; - t['\uFD76'] = '\u0639\u0645\u0645'; - t['\uFD77'] = '\u0639\u0645\u0645'; - t['\uFD78'] = '\u0639\u0645\u0649'; - t['\uFD79'] = '\u063A\u0645\u0645'; - t['\uFD7A'] = '\u063A\u0645\u064A'; - t['\uFD7B'] = '\u063A\u0645\u0649'; - t['\uFD7C'] = '\u0641\u062E\u0645'; - t['\uFD7D'] = '\u0641\u062E\u0645'; - t['\uFD7E'] = '\u0642\u0645\u062D'; - t['\uFD7F'] = '\u0642\u0645\u0645'; - t['\uFD80'] = '\u0644\u062D\u0645'; - t['\uFD81'] = '\u0644\u062D\u064A'; - t['\uFD82'] = '\u0644\u062D\u0649'; - t['\uFD83'] = '\u0644\u062C\u062C'; - t['\uFD84'] = '\u0644\u062C\u062C'; - t['\uFD85'] = '\u0644\u062E\u0645'; - t['\uFD86'] = '\u0644\u062E\u0645'; - t['\uFD87'] = '\u0644\u0645\u062D'; - t['\uFD88'] = '\u0644\u0645\u062D'; - t['\uFD89'] = '\u0645\u062D\u062C'; - t['\uFD8A'] = '\u0645\u062D\u0645'; - t['\uFD8B'] = '\u0645\u062D\u064A'; - t['\uFD8C'] = '\u0645\u062C\u062D'; - t['\uFD8D'] = '\u0645\u062C\u0645'; - t['\uFD8E'] = '\u0645\u062E\u062C'; - t['\uFD8F'] = '\u0645\u062E\u0645'; - t['\uFD92'] = '\u0645\u062C\u062E'; - t['\uFD93'] = '\u0647\u0645\u062C'; - t['\uFD94'] = '\u0647\u0645\u0645'; - t['\uFD95'] = '\u0646\u062D\u0645'; - t['\uFD96'] = '\u0646\u062D\u0649'; - t['\uFD97'] = '\u0646\u062C\u0645'; - t['\uFD98'] = '\u0646\u062C\u0645'; - t['\uFD99'] = '\u0646\u062C\u0649'; - t['\uFD9A'] = '\u0646\u0645\u064A'; - t['\uFD9B'] = '\u0646\u0645\u0649'; - t['\uFD9C'] = '\u064A\u0645\u0645'; - t['\uFD9D'] = '\u064A\u0645\u0645'; - t['\uFD9E'] = '\u0628\u062E\u064A'; - t['\uFD9F'] = '\u062A\u062C\u064A'; - t['\uFDA0'] = '\u062A\u062C\u0649'; - t['\uFDA1'] = '\u062A\u062E\u064A'; - t['\uFDA2'] = '\u062A\u062E\u0649'; - t['\uFDA3'] = '\u062A\u0645\u064A'; - t['\uFDA4'] = '\u062A\u0645\u0649'; - t['\uFDA5'] = '\u062C\u0645\u064A'; - t['\uFDA6'] = '\u062C\u062D\u0649'; - t['\uFDA7'] = '\u062C\u0645\u0649'; - t['\uFDA8'] = '\u0633\u062E\u0649'; - t['\uFDA9'] = '\u0635\u062D\u064A'; - t['\uFDAA'] = '\u0634\u062D\u064A'; - t['\uFDAB'] = '\u0636\u062D\u064A'; - t['\uFDAC'] = '\u0644\u062C\u064A'; - t['\uFDAD'] = '\u0644\u0645\u064A'; - t['\uFDAE'] = '\u064A\u062D\u064A'; - t['\uFDAF'] = '\u064A\u062C\u064A'; - t['\uFDB0'] = '\u064A\u0645\u064A'; - t['\uFDB1'] = '\u0645\u0645\u064A'; - t['\uFDB2'] = '\u0642\u0645\u064A'; - t['\uFDB3'] = '\u0646\u062D\u064A'; - t['\uFDB4'] = '\u0642\u0645\u062D'; - t['\uFDB5'] = '\u0644\u062D\u0645'; - t['\uFDB6'] = '\u0639\u0645\u064A'; - t['\uFDB7'] = '\u0643\u0645\u064A'; - t['\uFDB8'] = '\u0646\u062C\u062D'; - t['\uFDB9'] = '\u0645\u062E\u064A'; - t['\uFDBA'] = '\u0644\u062C\u0645'; - t['\uFDBB'] = '\u0643\u0645\u0645'; - t['\uFDBC'] = '\u0644\u062C\u0645'; - t['\uFDBD'] = '\u0646\u062C\u062D'; - t['\uFDBE'] = '\u062C\u062D\u064A'; - t['\uFDBF'] = '\u062D\u062C\u064A'; - t['\uFDC0'] = '\u0645\u062C\u064A'; - t['\uFDC1'] = '\u0641\u0645\u064A'; - t['\uFDC2'] = '\u0628\u062D\u064A'; - t['\uFDC3'] = '\u0643\u0645\u0645'; - t['\uFDC4'] = '\u0639\u062C\u0645'; - t['\uFDC5'] = '\u0635\u0645\u0645'; - t['\uFDC6'] = '\u0633\u062E\u064A'; - t['\uFDC7'] = '\u0646\u062C\u064A'; - t['\uFE49'] = '\u203E'; - t['\uFE4A'] = '\u203E'; - t['\uFE4B'] = '\u203E'; - t['\uFE4C'] = '\u203E'; - t['\uFE4D'] = '\u005F'; - t['\uFE4E'] = '\u005F'; - t['\uFE4F'] = '\u005F'; - t['\uFE80'] = '\u0621'; - t['\uFE81'] = '\u0622'; - t['\uFE82'] = '\u0622'; - t['\uFE83'] = '\u0623'; - t['\uFE84'] = '\u0623'; - t['\uFE85'] = '\u0624'; - t['\uFE86'] = '\u0624'; - t['\uFE87'] = '\u0625'; - t['\uFE88'] = '\u0625'; - t['\uFE89'] = '\u0626'; - t['\uFE8A'] = '\u0626'; - t['\uFE8B'] = '\u0626'; - t['\uFE8C'] = '\u0626'; - t['\uFE8D'] = '\u0627'; - t['\uFE8E'] = '\u0627'; - t['\uFE8F'] = '\u0628'; - t['\uFE90'] = '\u0628'; - t['\uFE91'] = '\u0628'; - t['\uFE92'] = '\u0628'; - t['\uFE93'] = '\u0629'; - t['\uFE94'] = '\u0629'; - t['\uFE95'] = '\u062A'; - t['\uFE96'] = '\u062A'; - t['\uFE97'] = '\u062A'; - t['\uFE98'] = '\u062A'; - t['\uFE99'] = '\u062B'; - t['\uFE9A'] = '\u062B'; - t['\uFE9B'] = '\u062B'; - t['\uFE9C'] = '\u062B'; - t['\uFE9D'] = '\u062C'; - t['\uFE9E'] = '\u062C'; - t['\uFE9F'] = '\u062C'; - t['\uFEA0'] = '\u062C'; - t['\uFEA1'] = '\u062D'; - t['\uFEA2'] = '\u062D'; - t['\uFEA3'] = '\u062D'; - t['\uFEA4'] = '\u062D'; - t['\uFEA5'] = '\u062E'; - t['\uFEA6'] = '\u062E'; - t['\uFEA7'] = '\u062E'; - t['\uFEA8'] = '\u062E'; - t['\uFEA9'] = '\u062F'; - t['\uFEAA'] = '\u062F'; - t['\uFEAB'] = '\u0630'; - t['\uFEAC'] = '\u0630'; - t['\uFEAD'] = '\u0631'; - t['\uFEAE'] = '\u0631'; - t['\uFEAF'] = '\u0632'; - t['\uFEB0'] = '\u0632'; - t['\uFEB1'] = '\u0633'; - t['\uFEB2'] = '\u0633'; - t['\uFEB3'] = '\u0633'; - t['\uFEB4'] = '\u0633'; - t['\uFEB5'] = '\u0634'; - t['\uFEB6'] = '\u0634'; - t['\uFEB7'] = '\u0634'; - t['\uFEB8'] = '\u0634'; - t['\uFEB9'] = '\u0635'; - t['\uFEBA'] = '\u0635'; - t['\uFEBB'] = '\u0635'; - t['\uFEBC'] = '\u0635'; - t['\uFEBD'] = '\u0636'; - t['\uFEBE'] = '\u0636'; - t['\uFEBF'] = '\u0636'; - t['\uFEC0'] = '\u0636'; - t['\uFEC1'] = '\u0637'; - t['\uFEC2'] = '\u0637'; - t['\uFEC3'] = '\u0637'; - t['\uFEC4'] = '\u0637'; - t['\uFEC5'] = '\u0638'; - t['\uFEC6'] = '\u0638'; - t['\uFEC7'] = '\u0638'; - t['\uFEC8'] = '\u0638'; - t['\uFEC9'] = '\u0639'; - t['\uFECA'] = '\u0639'; - t['\uFECB'] = '\u0639'; - t['\uFECC'] = '\u0639'; - t['\uFECD'] = '\u063A'; - t['\uFECE'] = '\u063A'; - t['\uFECF'] = '\u063A'; - t['\uFED0'] = '\u063A'; - t['\uFED1'] = '\u0641'; - t['\uFED2'] = '\u0641'; - t['\uFED3'] = '\u0641'; - t['\uFED4'] = '\u0641'; - t['\uFED5'] = '\u0642'; - t['\uFED6'] = '\u0642'; - t['\uFED7'] = '\u0642'; - t['\uFED8'] = '\u0642'; - t['\uFED9'] = '\u0643'; - t['\uFEDA'] = '\u0643'; - t['\uFEDB'] = '\u0643'; - t['\uFEDC'] = '\u0643'; - t['\uFEDD'] = '\u0644'; - t['\uFEDE'] = '\u0644'; - t['\uFEDF'] = '\u0644'; - t['\uFEE0'] = '\u0644'; - t['\uFEE1'] = '\u0645'; - t['\uFEE2'] = '\u0645'; - t['\uFEE3'] = '\u0645'; - t['\uFEE4'] = '\u0645'; - t['\uFEE5'] = '\u0646'; - t['\uFEE6'] = '\u0646'; - t['\uFEE7'] = '\u0646'; - t['\uFEE8'] = '\u0646'; - t['\uFEE9'] = '\u0647'; - t['\uFEEA'] = '\u0647'; - t['\uFEEB'] = '\u0647'; - t['\uFEEC'] = '\u0647'; - t['\uFEED'] = '\u0648'; - t['\uFEEE'] = '\u0648'; - t['\uFEEF'] = '\u0649'; - t['\uFEF0'] = '\u0649'; - t['\uFEF1'] = '\u064A'; - t['\uFEF2'] = '\u064A'; - t['\uFEF3'] = '\u064A'; - t['\uFEF4'] = '\u064A'; - t['\uFEF5'] = '\u0644\u0622'; - t['\uFEF6'] = '\u0644\u0622'; - t['\uFEF7'] = '\u0644\u0623'; - t['\uFEF8'] = '\u0644\u0623'; - t['\uFEF9'] = '\u0644\u0625'; - t['\uFEFA'] = '\u0644\u0625'; - t['\uFEFB'] = '\u0644\u0627'; - t['\uFEFC'] = '\u0644\u0627'; - }); - function reverseIfRtl(chars) { - var charsLength = chars.length; - if (charsLength <= 1 || !isRTLRangeFor(chars.charCodeAt(0))) { - return chars; - } - var s = ''; - for (var ii = charsLength - 1; ii >= 0; ii--) { - s += chars[ii]; - } - return s; - } - exports.mapSpecialUnicodeValues = mapSpecialUnicodeValues; - exports.reverseIfRtl = reverseIfRtl; - exports.getUnicodeRangeFor = getUnicodeRangeFor; - exports.getNormalizedUnicodes = getNormalizedUnicodes; - exports.getUnicodeForGlyph = getUnicodeForGlyph; - - /***/ }), - /* 180 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.FontRendererFactory = void 0; - - var _util = __w_extracthighlights_require__(6); - - var _cff_parser = __w_extracthighlights_require__(174); - - var _glyphlist = __w_extracthighlights_require__(177); - - var _encodings = __w_extracthighlights_require__(176); - - var _stream = __w_extracthighlights_require__(157); - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - - function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - - function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - - function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - - var FontRendererFactory = function FontRendererFactoryClosure() { - function getLong(data, offset) { - return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]; - } - - function getUshort(data, offset) { - return data[offset] << 8 | data[offset + 1]; - } - - function parseCmap(data, start, end) { - var offset = getUshort(data, start + 2) === 1 ? getLong(data, start + 8) : getLong(data, start + 16); - var format = getUshort(data, start + offset); - var ranges, p, i; - - if (format === 4) { - getUshort(data, start + offset + 2); - var segCount = getUshort(data, start + offset + 6) >> 1; - p = start + offset + 14; - ranges = []; - - for (i = 0; i < segCount; i++, p += 2) { - ranges[i] = { - end: getUshort(data, p) - }; - } - - p += 2; - - for (i = 0; i < segCount; i++, p += 2) { - ranges[i].start = getUshort(data, p); - } - - for (i = 0; i < segCount; i++, p += 2) { - ranges[i].idDelta = getUshort(data, p); - } - - for (i = 0; i < segCount; i++, p += 2) { - var idOffset = getUshort(data, p); - - if (idOffset === 0) { - continue; - } - - ranges[i].ids = []; - - for (var j = 0, jj = ranges[i].end - ranges[i].start + 1; j < jj; j++) { - ranges[i].ids[j] = getUshort(data, p + idOffset); - idOffset += 2; - } - } - - return ranges; - } else if (format === 12) { - getLong(data, start + offset + 4); - var groups = getLong(data, start + offset + 12); - p = start + offset + 16; - ranges = []; - - for (i = 0; i < groups; i++) { - ranges.push({ - start: getLong(data, p), - end: getLong(data, p + 4), - idDelta: getLong(data, p + 8) - getLong(data, p) - }); - p += 12; - } - - return ranges; - } - - throw new _util.FormatError("unsupported cmap: ".concat(format)); - } - - function parseCff(data, start, end, seacAnalysisEnabled) { - var properties = {}; - var parser = new _cff_parser.CFFParser(new _stream.Stream(data, start, end - start), properties, seacAnalysisEnabled); - var cff = parser.parse(); - return { - glyphs: cff.charStrings.objects, - subrs: cff.topDict.privateDict && cff.topDict.privateDict.subrsIndex && cff.topDict.privateDict.subrsIndex.objects, - gsubrs: cff.globalSubrIndex && cff.globalSubrIndex.objects, - isCFFCIDFont: cff.isCIDFont, - fdSelect: cff.fdSelect, - fdArray: cff.fdArray - }; - } - - function parseGlyfTable(glyf, loca, isGlyphLocationsLong) { - var itemSize, itemDecode; - - if (isGlyphLocationsLong) { - itemSize = 4; - - itemDecode = function fontItemDecodeLong(data, offset) { - return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]; - }; - } else { - itemSize = 2; - - itemDecode = function fontItemDecode(data, offset) { - return data[offset] << 9 | data[offset + 1] << 1; - }; - } - - var glyphs = []; - var startOffset = itemDecode(loca, 0); - - for (var j = itemSize; j < loca.length; j += itemSize) { - var endOffset = itemDecode(loca, j); - glyphs.push(glyf.subarray(startOffset, endOffset)); - startOffset = endOffset; - } - - return glyphs; - } - - function lookupCmap(ranges, unicode) { - var code = unicode.codePointAt(0), - gid = 0; - var l = 0, - r = ranges.length - 1; - - while (l < r) { - var c = l + r + 1 >> 1; - - if (code < ranges[c].start) { - r = c - 1; - } else { - l = c; - } - } - - if (ranges[l].start <= code && code <= ranges[l].end) { - gid = ranges[l].idDelta + (ranges[l].ids ? ranges[l].ids[code - ranges[l].start] : code) & 0xFFFF; - } - - return { - charCode: code, - glyphId: gid - }; - } - - function compileGlyf(code, cmds, font) { - function moveTo(x, y) { - cmds.push({ - cmd: 'moveTo', - args: [x, y] - }); - } - - function lineTo(x, y) { - cmds.push({ - cmd: 'lineTo', - args: [x, y] - }); - } - - function quadraticCurveTo(xa, ya, x, y) { - cmds.push({ - cmd: 'quadraticCurveTo', - args: [xa, ya, x, y] - }); - } - - var i = 0; - var numberOfContours = (code[i] << 24 | code[i + 1] << 16) >> 16; - var flags; - var x = 0, - y = 0; - i += 10; - - if (numberOfContours < 0) { - do { - flags = code[i] << 8 | code[i + 1]; - var glyphIndex = code[i + 2] << 8 | code[i + 3]; - i += 4; - var arg1, arg2; - - if (flags & 0x01) { - arg1 = (code[i] << 24 | code[i + 1] << 16) >> 16; - arg2 = (code[i + 2] << 24 | code[i + 3] << 16) >> 16; - i += 4; - } else { - arg1 = code[i++]; - arg2 = code[i++]; - } - - if (flags & 0x02) { - x = arg1; - y = arg2; - } else { - x = 0; - y = 0; - } - - var scaleX = 1, - scaleY = 1, - scale01 = 0, - scale10 = 0; - - if (flags & 0x08) { - scaleX = scaleY = (code[i] << 24 | code[i + 1] << 16) / 1073741824; - i += 2; - } else if (flags & 0x40) { - scaleX = (code[i] << 24 | code[i + 1] << 16) / 1073741824; - scaleY = (code[i + 2] << 24 | code[i + 3] << 16) / 1073741824; - i += 4; - } else if (flags & 0x80) { - scaleX = (code[i] << 24 | code[i + 1] << 16) / 1073741824; - scale01 = (code[i + 2] << 24 | code[i + 3] << 16) / 1073741824; - scale10 = (code[i + 4] << 24 | code[i + 5] << 16) / 1073741824; - scaleY = (code[i + 6] << 24 | code[i + 7] << 16) / 1073741824; - i += 8; - } - - var subglyph = font.glyphs[glyphIndex]; - - if (subglyph) { - cmds.push({ - cmd: 'save' - }); - cmds.push({ - cmd: 'transform', - args: [scaleX, scale01, scale10, scaleY, x, y] - }); - compileGlyf(subglyph, cmds, font); - cmds.push({ - cmd: 'restore' - }); - } - } while (flags & 0x20); - } else { - var endPtsOfContours = []; - var j, jj; - - for (j = 0; j < numberOfContours; j++) { - endPtsOfContours.push(code[i] << 8 | code[i + 1]); - i += 2; - } - - var instructionLength = code[i] << 8 | code[i + 1]; - i += 2 + instructionLength; - var numberOfPoints = endPtsOfContours[endPtsOfContours.length - 1] + 1; - var points = []; - - while (points.length < numberOfPoints) { - flags = code[i++]; - var repeat = 1; - - if (flags & 0x08) { - repeat += code[i++]; - } - - while (repeat-- > 0) { - points.push({ - flags: flags - }); - } - } - - for (j = 0; j < numberOfPoints; j++) { - switch (points[j].flags & 0x12) { - case 0x00: - x += (code[i] << 24 | code[i + 1] << 16) >> 16; - i += 2; - break; - - case 0x02: - x -= code[i++]; - break; - - case 0x12: - x += code[i++]; - break; - } - - points[j].x = x; - } - - for (j = 0; j < numberOfPoints; j++) { - switch (points[j].flags & 0x24) { - case 0x00: - y += (code[i] << 24 | code[i + 1] << 16) >> 16; - i += 2; - break; - - case 0x04: - y -= code[i++]; - break; - - case 0x24: - y += code[i++]; - break; - } - - points[j].y = y; - } - - var startPoint = 0; - - for (i = 0; i < numberOfContours; i++) { - var endPoint = endPtsOfContours[i]; - var contour = points.slice(startPoint, endPoint + 1); - - if (contour[0].flags & 1) { - contour.push(contour[0]); - } else if (contour[contour.length - 1].flags & 1) { - contour.unshift(contour[contour.length - 1]); - } else { - var p = { - flags: 1, - x: (contour[0].x + contour[contour.length - 1].x) / 2, - y: (contour[0].y + contour[contour.length - 1].y) / 2 - }; - contour.unshift(p); - contour.push(p); - } - - moveTo(contour[0].x, contour[0].y); - - for (j = 1, jj = contour.length; j < jj; j++) { - if (contour[j].flags & 1) { - lineTo(contour[j].x, contour[j].y); - } else if (contour[j + 1].flags & 1) { - quadraticCurveTo(contour[j].x, contour[j].y, contour[j + 1].x, contour[j + 1].y); - j++; - } else { - quadraticCurveTo(contour[j].x, contour[j].y, (contour[j].x + contour[j + 1].x) / 2, (contour[j].y + contour[j + 1].y) / 2); - } - } - - startPoint = endPoint + 1; - } - } - } - - function compileCharString(code, cmds, font, glyphId) { - var stack = []; - var x = 0, - y = 0; - var stems = 0; - - function moveTo(x, y) { - cmds.push({ - cmd: 'moveTo', - args: [x, y] - }); - } - - function lineTo(x, y) { - cmds.push({ - cmd: 'lineTo', - args: [x, y] - }); - } - - function bezierCurveTo(x1, y1, x2, y2, x, y) { - cmds.push({ - cmd: 'bezierCurveTo', - args: [x1, y1, x2, y2, x, y] - }); - } - - function parse(code) { - var i = 0; - - while (i < code.length) { - var stackClean = false; - var v = code[i++]; - var xa, xb, ya, yb, y1, y2, y3, n, subrCode; - - switch (v) { - case 1: - stems += stack.length >> 1; - stackClean = true; - break; - - case 3: - stems += stack.length >> 1; - stackClean = true; - break; - - case 4: - y += stack.pop(); - moveTo(x, y); - stackClean = true; - break; - - case 5: - while (stack.length > 0) { - x += stack.shift(); - y += stack.shift(); - lineTo(x, y); - } - - break; - - case 6: - while (stack.length > 0) { - x += stack.shift(); - lineTo(x, y); - - if (stack.length === 0) { - break; - } - - y += stack.shift(); - lineTo(x, y); - } - - break; - - case 7: - while (stack.length > 0) { - y += stack.shift(); - lineTo(x, y); - - if (stack.length === 0) { - break; - } - - x += stack.shift(); - lineTo(x, y); - } - - break; - - case 8: - while (stack.length > 0) { - xa = x + stack.shift(); - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb + stack.shift(); - bezierCurveTo(xa, ya, xb, yb, x, y); - } - - break; - - case 10: - n = stack.pop(); - subrCode = null; - - if (font.isCFFCIDFont) { - var fdIndex = font.fdSelect.getFDIndex(glyphId); - - if (fdIndex >= 0 && fdIndex < font.fdArray.length) { - var fontDict = font.fdArray[fdIndex], - subrs = void 0; - - if (fontDict.privateDict && fontDict.privateDict.subrsIndex) { - subrs = fontDict.privateDict.subrsIndex.objects; - } - - if (subrs) { - var numSubrs = subrs.length; - n += numSubrs < 1240 ? 107 : numSubrs < 33900 ? 1131 : 32768; - subrCode = subrs[n]; - } - } else { - (0, _util.warn)('Invalid fd index for glyph index.'); - } - } else { - subrCode = font.subrs[n + font.subrsBias]; - } - - if (subrCode) { - parse(subrCode); - } - - break; - - case 11: - return; - - case 12: - v = code[i++]; - - switch (v) { - case 34: - xa = x + stack.shift(); - xb = xa + stack.shift(); - y1 = y + stack.shift(); - x = xb + stack.shift(); - bezierCurveTo(xa, y, xb, y1, x, y1); - xa = x + stack.shift(); - xb = xa + stack.shift(); - x = xb + stack.shift(); - bezierCurveTo(xa, y1, xb, y, x, y); - break; - - case 35: - xa = x + stack.shift(); - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb + stack.shift(); - bezierCurveTo(xa, ya, xb, yb, x, y); - xa = x + stack.shift(); - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb + stack.shift(); - bezierCurveTo(xa, ya, xb, yb, x, y); - stack.pop(); - break; - - case 36: - xa = x + stack.shift(); - y1 = y + stack.shift(); - xb = xa + stack.shift(); - y2 = y1 + stack.shift(); - x = xb + stack.shift(); - bezierCurveTo(xa, y1, xb, y2, x, y2); - xa = x + stack.shift(); - xb = xa + stack.shift(); - y3 = y2 + stack.shift(); - x = xb + stack.shift(); - bezierCurveTo(xa, y2, xb, y3, x, y); - break; - - case 37: - var x0 = x, - y0 = y; - xa = x + stack.shift(); - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb + stack.shift(); - bezierCurveTo(xa, ya, xb, yb, x, y); - xa = x + stack.shift(); - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb; - y = yb; - - if (Math.abs(x - x0) > Math.abs(y - y0)) { - x += stack.shift(); - } else { - y += stack.shift(); - } - - bezierCurveTo(xa, ya, xb, yb, x, y); - break; - - default: - throw new _util.FormatError("unknown operator: 12 ".concat(v)); - } - - break; - - case 14: - if (stack.length >= 4) { - var achar = stack.pop(); - var bchar = stack.pop(); - y = stack.pop(); - x = stack.pop(); - cmds.push({ - cmd: 'save' - }); - cmds.push({ - cmd: 'translate', - args: [x, y] - }); - var cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[achar]])); - compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId); - cmds.push({ - cmd: 'restore' - }); - cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[bchar]])); - compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId); - } - - return; - - case 18: - stems += stack.length >> 1; - stackClean = true; - break; - - case 19: - stems += stack.length >> 1; - i += stems + 7 >> 3; - stackClean = true; - break; - - case 20: - stems += stack.length >> 1; - i += stems + 7 >> 3; - stackClean = true; - break; - - case 21: - y += stack.pop(); - x += stack.pop(); - moveTo(x, y); - stackClean = true; - break; - - case 22: - x += stack.pop(); - moveTo(x, y); - stackClean = true; - break; - - case 23: - stems += stack.length >> 1; - stackClean = true; - break; - - case 24: - while (stack.length > 2) { - xa = x + stack.shift(); - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb + stack.shift(); - bezierCurveTo(xa, ya, xb, yb, x, y); - } - - x += stack.shift(); - y += stack.shift(); - lineTo(x, y); - break; - - case 25: - while (stack.length > 6) { - x += stack.shift(); - y += stack.shift(); - lineTo(x, y); - } - - xa = x + stack.shift(); - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb + stack.shift(); - bezierCurveTo(xa, ya, xb, yb, x, y); - break; - - case 26: - if (stack.length % 2) { - x += stack.shift(); - } - - while (stack.length > 0) { - xa = x; - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb; - y = yb + stack.shift(); - bezierCurveTo(xa, ya, xb, yb, x, y); - } - - break; - - case 27: - if (stack.length % 2) { - y += stack.shift(); - } - - while (stack.length > 0) { - xa = x + stack.shift(); - ya = y; - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb; - bezierCurveTo(xa, ya, xb, yb, x, y); - } - - break; - - case 28: - stack.push((code[i] << 24 | code[i + 1] << 16) >> 16); - i += 2; - break; - - case 29: - n = stack.pop() + font.gsubrsBias; - subrCode = font.gsubrs[n]; - - if (subrCode) { - parse(subrCode); - } - - break; - - case 30: - while (stack.length > 0) { - xa = x; - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb + (stack.length === 1 ? stack.shift() : 0); - bezierCurveTo(xa, ya, xb, yb, x, y); - - if (stack.length === 0) { - break; - } - - xa = x + stack.shift(); - ya = y; - xb = xa + stack.shift(); - yb = ya + stack.shift(); - y = yb + stack.shift(); - x = xb + (stack.length === 1 ? stack.shift() : 0); - bezierCurveTo(xa, ya, xb, yb, x, y); - } - - break; - - case 31: - while (stack.length > 0) { - xa = x + stack.shift(); - ya = y; - xb = xa + stack.shift(); - yb = ya + stack.shift(); - y = yb + stack.shift(); - x = xb + (stack.length === 1 ? stack.shift() : 0); - bezierCurveTo(xa, ya, xb, yb, x, y); - - if (stack.length === 0) { - break; - } - - xa = x; - ya = y + stack.shift(); - xb = xa + stack.shift(); - yb = ya + stack.shift(); - x = xb + stack.shift(); - y = yb + (stack.length === 1 ? stack.shift() : 0); - bezierCurveTo(xa, ya, xb, yb, x, y); - } - - break; - - default: - if (v < 32) { - throw new _util.FormatError("unknown operator: ".concat(v)); - } - - if (v < 247) { - stack.push(v - 139); - } else if (v < 251) { - stack.push((v - 247) * 256 + code[i++] + 108); - } else if (v < 255) { - stack.push(-(v - 251) * 256 - code[i++] - 108); - } else { - stack.push((code[i] << 24 | code[i + 1] << 16 | code[i + 2] << 8 | code[i + 3]) / 65536); - i += 4; - } - - break; - } - - if (stackClean) { - stack.length = 0; - } - } - } - - parse(code); - } - - var NOOP = []; - - var CompiledFont = - /*#__PURE__*/ - function () { - function CompiledFont(fontMatrix) { - _classCallCheck(this, CompiledFont); - - if (this.constructor === CompiledFont) { - (0, _util.unreachable)('Cannot initialize CompiledFont.'); - } - - this.fontMatrix = fontMatrix; - this.compiledGlyphs = Object.create(null); - this.compiledCharCodeToGlyphId = Object.create(null); - } - - _createClass(CompiledFont, [{ - key: "getPathJs", - value: function getPathJs(unicode) { - var cmap = lookupCmap(this.cmap, unicode); - var fn = this.compiledGlyphs[cmap.glyphId]; - - if (!fn) { - fn = this.compileGlyph(this.glyphs[cmap.glyphId], cmap.glyphId); - this.compiledGlyphs[cmap.glyphId] = fn; - } - - if (this.compiledCharCodeToGlyphId[cmap.charCode] === undefined) { - this.compiledCharCodeToGlyphId[cmap.charCode] = cmap.glyphId; - } - - return fn; - } - }, { - key: "compileGlyph", - value: function compileGlyph(code, glyphId) { - if (!code || code.length === 0 || code[0] === 14) { - return NOOP; - } - - var fontMatrix = this.fontMatrix; - - if (this.isCFFCIDFont) { - var fdIndex = this.fdSelect.getFDIndex(glyphId); - - if (fdIndex >= 0 && fdIndex < this.fdArray.length) { - var fontDict = this.fdArray[fdIndex]; - fontMatrix = fontDict.getByName('FontMatrix') || _util.FONT_IDENTITY_MATRIX; - } else { - (0, _util.warn)('Invalid fd index for glyph index.'); - } - } - - var cmds = []; - cmds.push({ - cmd: 'save' - }); - cmds.push({ - cmd: 'transform', - args: fontMatrix.slice() - }); - cmds.push({ - cmd: 'scale', - args: ['size', '-size'] - }); - this.compileGlyphImpl(code, cmds, glyphId); - cmds.push({ - cmd: 'restore' - }); - return cmds; - } - }, { - key: "compileGlyphImpl", - value: function compileGlyphImpl() { - (0, _util.unreachable)('Children classes should implement this.'); - } - }, { - key: "hasBuiltPath", - value: function hasBuiltPath(unicode) { - var cmap = lookupCmap(this.cmap, unicode); - return this.compiledGlyphs[cmap.glyphId] !== undefined && this.compiledCharCodeToGlyphId[cmap.charCode] !== undefined; - } - }]); - - return CompiledFont; - }(); - - var TrueTypeCompiled = - /*#__PURE__*/ - function (_CompiledFont) { - _inherits(TrueTypeCompiled, _CompiledFont); - - function TrueTypeCompiled(glyphs, cmap, fontMatrix) { - var _this; - - _classCallCheck(this, TrueTypeCompiled); - - _this = _possibleConstructorReturn(this, _getPrototypeOf(TrueTypeCompiled).call(this, fontMatrix || [0.000488, 0, 0, 0.000488, 0, 0])); - _this.glyphs = glyphs; - _this.cmap = cmap; - return _this; - } - - _createClass(TrueTypeCompiled, [{ - key: "compileGlyphImpl", - value: function compileGlyphImpl(code, cmds) { - compileGlyf(code, cmds, this); - } - }]); - - return TrueTypeCompiled; - }(CompiledFont); - - var Type2Compiled = - /*#__PURE__*/ - function (_CompiledFont2) { - _inherits(Type2Compiled, _CompiledFont2); - - function Type2Compiled(cffInfo, cmap, fontMatrix, glyphNameMap) { - var _this2; - - _classCallCheck(this, Type2Compiled); - - _this2 = _possibleConstructorReturn(this, _getPrototypeOf(Type2Compiled).call(this, fontMatrix || [0.001, 0, 0, 0.001, 0, 0])); - _this2.glyphs = cffInfo.glyphs; - _this2.gsubrs = cffInfo.gsubrs || []; - _this2.subrs = cffInfo.subrs || []; - _this2.cmap = cmap; - _this2.glyphNameMap = glyphNameMap || (0, _glyphlist.getGlyphsUnicode)(); - _this2.gsubrsBias = _this2.gsubrs.length < 1240 ? 107 : _this2.gsubrs.length < 33900 ? 1131 : 32768; - _this2.subrsBias = _this2.subrs.length < 1240 ? 107 : _this2.subrs.length < 33900 ? 1131 : 32768; - _this2.isCFFCIDFont = cffInfo.isCFFCIDFont; - _this2.fdSelect = cffInfo.fdSelect; - _this2.fdArray = cffInfo.fdArray; - return _this2; - } - - _createClass(Type2Compiled, [{ - key: "compileGlyphImpl", - value: function compileGlyphImpl(code, cmds, glyphId) { - compileCharString(code, cmds, this, glyphId); - } - }]); - - return Type2Compiled; - }(CompiledFont); - - return { - create: function FontRendererFactory_create(font, seacAnalysisEnabled) { - var data = new Uint8Array(font.data); - var cmap, glyf, loca, cff, indexToLocFormat, unitsPerEm; - var numTables = getUshort(data, 4); - - for (var i = 0, p = 12; i < numTables; i++, p += 16) { - var tag = (0, _util.bytesToString)(data.subarray(p, p + 4)); - var offset = getLong(data, p + 8); - var length = getLong(data, p + 12); - - switch (tag) { - case 'cmap': - cmap = parseCmap(data, offset); - break; - - case 'glyf': - glyf = data.subarray(offset, offset + length); - break; - - case 'loca': - loca = data.subarray(offset, offset + length); - break; - - case 'head': - unitsPerEm = getUshort(data, offset + 18); - indexToLocFormat = getUshort(data, offset + 50); - break; - - case 'CFF ': - cff = parseCff(data, offset, offset + length, seacAnalysisEnabled); - break; - } - } - - if (glyf) { - var fontMatrix = !unitsPerEm ? font.fontMatrix : [1 / unitsPerEm, 0, 0, 1 / unitsPerEm, 0, 0]; - return new TrueTypeCompiled(parseGlyfTable(glyf, loca, indexToLocFormat), cmap, fontMatrix); - } - - return new Type2Compiled(cff, cmap, font.fontMatrix, font.glyphNameMap); - } - }; - }(); - - exports.FontRendererFactory = FontRendererFactory; - - /***/ }), - /* 181 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.Type1Parser = void 0; - - var _util = __w_extracthighlights_require__(6); - - var _encodings = __w_extracthighlights_require__(176); - - var _stream = __w_extracthighlights_require__(157); - - var HINTING_ENABLED = false; - - var Type1CharString = function Type1CharStringClosure() { - var COMMAND_MAP = { - 'hstem': [1], - 'vstem': [3], - 'vmoveto': [4], - 'rlineto': [5], - 'hlineto': [6], - 'vlineto': [7], - 'rrcurveto': [8], - 'callsubr': [10], - 'flex': [12, 35], - 'drop': [12, 18], - 'endchar': [14], - 'rmoveto': [21], - 'hmoveto': [22], - 'vhcurveto': [30], - 'hvcurveto': [31] - }; - - function Type1CharString() { - this.width = 0; - this.lsb = 0; - this.flexing = false; - this.output = []; - this.stack = []; - } - - Type1CharString.prototype = { - convert: function Type1CharString_convert(encoded, subrs, seacAnalysisEnabled) { - var count = encoded.length; - var error = false; - var wx, sbx, subrNumber; - - for (var i = 0; i < count; i++) { - var value = encoded[i]; - - if (value < 32) { - if (value === 12) { - value = (value << 8) + encoded[++i]; - } - - switch (value) { - case 1: - { - this.stack = []; - break; - } - - case 3: - { - this.stack = []; - break; - } - - case 4: - if (this.flexing) { - if (this.stack.length < 1) { - error = true; - break; - } - - var dy = this.stack.pop(); - this.stack.push(0, dy); - break; - } - - error = this.executeCommand(1, COMMAND_MAP.vmoveto); - break; - - case 5: - error = this.executeCommand(2, COMMAND_MAP.rlineto); - break; - - case 6: - error = this.executeCommand(1, COMMAND_MAP.hlineto); - break; - - case 7: - error = this.executeCommand(1, COMMAND_MAP.vlineto); - break; - - case 8: - error = this.executeCommand(6, COMMAND_MAP.rrcurveto); - break; - - case 9: - this.stack = []; - break; - - case 10: - if (this.stack.length < 1) { - error = true; - break; - } - - subrNumber = this.stack.pop(); - - if (!subrs[subrNumber]) { - error = true; - break; - } - - error = this.convert(subrs[subrNumber], subrs, seacAnalysisEnabled); - break; - - case 11: - return error; - - case 13: - if (this.stack.length < 2) { - error = true; - break; - } - - wx = this.stack.pop(); - sbx = this.stack.pop(); - this.lsb = sbx; - this.width = wx; - this.stack.push(wx, sbx); - error = this.executeCommand(2, COMMAND_MAP.hmoveto); - break; - - case 14: - this.output.push(COMMAND_MAP.endchar[0]); - break; - - case 21: - if (this.flexing) { - break; - } - - error = this.executeCommand(2, COMMAND_MAP.rmoveto); - break; - - case 22: - if (this.flexing) { - this.stack.push(0); - break; - } - - error = this.executeCommand(1, COMMAND_MAP.hmoveto); - break; - - case 30: - error = this.executeCommand(4, COMMAND_MAP.vhcurveto); - break; - - case 31: - error = this.executeCommand(4, COMMAND_MAP.hvcurveto); - break; - - case (12 << 8) + 0: - this.stack = []; - break; - - case (12 << 8) + 1: - { - this.stack = []; - break; - } - - case (12 << 8) + 2: - { - this.stack = []; - break; - } - - case (12 << 8) + 6: - if (seacAnalysisEnabled) { - this.seac = this.stack.splice(-4, 4); - error = this.executeCommand(0, COMMAND_MAP.endchar); - } else { - error = this.executeCommand(4, COMMAND_MAP.endchar); - } - - break; - - case (12 << 8) + 7: - if (this.stack.length < 4) { - error = true; - break; - } - - this.stack.pop(); - wx = this.stack.pop(); - var sby = this.stack.pop(); - sbx = this.stack.pop(); - this.lsb = sbx; - this.width = wx; - this.stack.push(wx, sbx, sby); - error = this.executeCommand(3, COMMAND_MAP.rmoveto); - break; - - case (12 << 8) + 12: - if (this.stack.length < 2) { - error = true; - break; - } - - var num2 = this.stack.pop(); - var num1 = this.stack.pop(); - this.stack.push(num1 / num2); - break; - - case (12 << 8) + 16: - if (this.stack.length < 2) { - error = true; - break; - } - - subrNumber = this.stack.pop(); - var numArgs = this.stack.pop(); - - if (subrNumber === 0 && numArgs === 3) { - var flexArgs = this.stack.splice(this.stack.length - 17, 17); - this.stack.push(flexArgs[2] + flexArgs[0], flexArgs[3] + flexArgs[1], flexArgs[4], flexArgs[5], flexArgs[6], flexArgs[7], flexArgs[8], flexArgs[9], flexArgs[10], flexArgs[11], flexArgs[12], flexArgs[13], flexArgs[14]); - error = this.executeCommand(13, COMMAND_MAP.flex, true); - this.flexing = false; - this.stack.push(flexArgs[15], flexArgs[16]); - } else if (subrNumber === 1 && numArgs === 0) { - this.flexing = true; - } - - break; - - case (12 << 8) + 17: - break; - - case (12 << 8) + 33: - this.stack = []; - break; - - default: - (0, _util.warn)('Unknown type 1 charstring command of "' + value + '"'); - break; - } - - if (error) { - break; - } - - continue; - } else if (value <= 246) { - value = value - 139; - } else if (value <= 250) { - value = (value - 247) * 256 + encoded[++i] + 108; - } else if (value <= 254) { - value = -((value - 251) * 256) - encoded[++i] - 108; - } else { - value = (encoded[++i] & 0xff) << 24 | (encoded[++i] & 0xff) << 16 | (encoded[++i] & 0xff) << 8 | (encoded[++i] & 0xff) << 0; - } - - this.stack.push(value); - } - - return error; - }, - executeCommand: function executeCommand(howManyArgs, command, keepStack) { - var stackLength = this.stack.length; - - if (howManyArgs > stackLength) { - return true; - } - - var start = stackLength - howManyArgs; - - for (var i = start; i < stackLength; i++) { - var value = this.stack[i]; - - if (Number.isInteger(value)) { - this.output.push(28, value >> 8 & 0xff, value & 0xff); - } else { - value = 65536 * value | 0; - this.output.push(255, value >> 24 & 0xFF, value >> 16 & 0xFF, value >> 8 & 0xFF, value & 0xFF); - } - } - - this.output.push.apply(this.output, command); - - if (keepStack) { - this.stack.splice(start, howManyArgs); - } else { - this.stack.length = 0; - } - - return false; - } - }; - return Type1CharString; - }(); - - var Type1Parser = function Type1ParserClosure() { - var EEXEC_ENCRYPT_KEY = 55665; - var CHAR_STRS_ENCRYPT_KEY = 4330; - - function isHexDigit(code) { - return code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102; - } - - function decrypt(data, key, discardNumber) { - if (discardNumber >= data.length) { - return new Uint8Array(0); - } - - var r = key | 0, - c1 = 52845, - c2 = 22719, - i, - j; - - for (i = 0; i < discardNumber; i++) { - r = (data[i] + r) * c1 + c2 & (1 << 16) - 1; - } - - var count = data.length - discardNumber; - var decrypted = new Uint8Array(count); - - for (i = discardNumber, j = 0; j < count; i++, j++) { - var value = data[i]; - decrypted[j] = value ^ r >> 8; - r = (value + r) * c1 + c2 & (1 << 16) - 1; - } - - return decrypted; - } - - function decryptAscii(data, key, discardNumber) { - var r = key | 0, - c1 = 52845, - c2 = 22719; - var count = data.length, - maybeLength = count >>> 1; - var decrypted = new Uint8Array(maybeLength); - var i, j; - - for (i = 0, j = 0; i < count; i++) { - var digit1 = data[i]; - - if (!isHexDigit(digit1)) { - continue; - } - - i++; - var digit2; - - while (i < count && !isHexDigit(digit2 = data[i])) { - i++; - } - - if (i < count) { - var value = parseInt(String.fromCharCode(digit1, digit2), 16); - decrypted[j++] = value ^ r >> 8; - r = (value + r) * c1 + c2 & (1 << 16) - 1; - } - } - - return Array.prototype.slice.call(decrypted, discardNumber, j); - } - - function isSpecial(c) { - return c === 0x2F || c === 0x5B || c === 0x5D || c === 0x7B || c === 0x7D || c === 0x28 || c === 0x29; - } - - function Type1Parser(stream, encrypted, seacAnalysisEnabled) { - if (encrypted) { - var data = stream.getBytes(); - var isBinary = !(isHexDigit(data[0]) && isHexDigit(data[1]) && isHexDigit(data[2]) && isHexDigit(data[3])); - stream = new _stream.Stream(isBinary ? decrypt(data, EEXEC_ENCRYPT_KEY, 4) : decryptAscii(data, EEXEC_ENCRYPT_KEY, 4)); - } - - this.seacAnalysisEnabled = !!seacAnalysisEnabled; - this.stream = stream; - this.nextChar(); - } - - Type1Parser.prototype = { - readNumberArray: function Type1Parser_readNumberArray() { - this.getToken(); - var array = []; - - while (true) { - var token = this.getToken(); - - if (token === null || token === ']' || token === '}') { - break; - } - - array.push(parseFloat(token || 0)); - } - - return array; - }, - readNumber: function Type1Parser_readNumber() { - var token = this.getToken(); - return parseFloat(token || 0); - }, - readInt: function Type1Parser_readInt() { - var token = this.getToken(); - return parseInt(token || 0, 10) | 0; - }, - readBoolean: function Type1Parser_readBoolean() { - var token = this.getToken(); - return token === 'true' ? 1 : 0; - }, - nextChar: function Type1_nextChar() { - return this.currentChar = this.stream.getByte(); - }, - getToken: function Type1Parser_getToken() { - var comment = false; - var ch = this.currentChar; - - while (true) { - if (ch === -1) { - return null; - } - - if (comment) { - if (ch === 0x0A || ch === 0x0D) { - comment = false; - } - } else if (ch === 0x25) { - comment = true; - } else if (!(0, _util.isSpace)(ch)) { - break; - } - - ch = this.nextChar(); - } - - if (isSpecial(ch)) { - this.nextChar(); - return String.fromCharCode(ch); - } - - var token = ''; - - do { - token += String.fromCharCode(ch); - ch = this.nextChar(); - } while (ch >= 0 && !(0, _util.isSpace)(ch) && !isSpecial(ch)); - - return token; - }, - readCharStrings: function Type1Parser_readCharStrings(bytes, lenIV) { - if (lenIV === -1) { - return bytes; - } - - return decrypt(bytes, CHAR_STRS_ENCRYPT_KEY, lenIV); - }, - extractFontProgram: function Type1Parser_extractFontProgram() { - var stream = this.stream; - var subrs = [], - charstrings = []; - var privateData = Object.create(null); - privateData['lenIV'] = 4; - var program = { - subrs: [], - charstrings: [], - properties: { - 'privateData': privateData - } - }; - var token, length, data, lenIV, encoded; - - while ((token = this.getToken()) !== null) { - if (token !== '/') { - continue; - } - - token = this.getToken(); - - switch (token) { - case 'CharStrings': - this.getToken(); - this.getToken(); - this.getToken(); - this.getToken(); - - while (true) { - token = this.getToken(); - - if (token === null || token === 'end') { - break; - } - - if (token !== '/') { - continue; - } - - var glyph = this.getToken(); - length = this.readInt(); - this.getToken(); - data = length > 0 ? stream.getBytes(length) : new Uint8Array(0); - lenIV = program.properties.privateData['lenIV']; - encoded = this.readCharStrings(data, lenIV); - this.nextChar(); - token = this.getToken(); - - if (token === 'noaccess') { - this.getToken(); - } - - charstrings.push({ - glyph: glyph, - encoded: encoded - }); - } - - break; - - case 'Subrs': - this.readInt(); - this.getToken(); - - while (this.getToken() === 'dup') { - var index = this.readInt(); - length = this.readInt(); - this.getToken(); - data = length > 0 ? stream.getBytes(length) : new Uint8Array(0); - lenIV = program.properties.privateData['lenIV']; - encoded = this.readCharStrings(data, lenIV); - this.nextChar(); - token = this.getToken(); - - if (token === 'noaccess') { - this.getToken(); - } - - subrs[index] = encoded; - } - - break; - - case 'BlueValues': - case 'OtherBlues': - case 'FamilyBlues': - case 'FamilyOtherBlues': - var blueArray = this.readNumberArray(); - - if (blueArray.length > 0 && blueArray.length % 2 === 0 && HINTING_ENABLED) { - program.properties.privateData[token] = blueArray; - } - - break; - - case 'StemSnapH': - case 'StemSnapV': - program.properties.privateData[token] = this.readNumberArray(); - break; - - case 'StdHW': - case 'StdVW': - program.properties.privateData[token] = this.readNumberArray()[0]; - break; - - case 'BlueShift': - case 'lenIV': - case 'BlueFuzz': - case 'BlueScale': - case 'LanguageGroup': - case 'ExpansionFactor': - program.properties.privateData[token] = this.readNumber(); - break; - - case 'ForceBold': - program.properties.privateData[token] = this.readBoolean(); - break; - } - } - - for (var i = 0; i < charstrings.length; i++) { - glyph = charstrings[i].glyph; - encoded = charstrings[i].encoded; - var charString = new Type1CharString(); - var error = charString.convert(encoded, subrs, this.seacAnalysisEnabled); - var output = charString.output; - - if (error) { - output = [14]; - } - - program.charstrings.push({ - glyphName: glyph, - charstring: output, - width: charString.width, - lsb: charString.lsb, - seac: charString.seac - }); - } - - return program; - }, - extractFontHeader: function Type1Parser_extractFontHeader(properties) { - var token; - - while ((token = this.getToken()) !== null) { - if (token !== '/') { - continue; - } - - token = this.getToken(); - - switch (token) { - case 'FontMatrix': - var matrix = this.readNumberArray(); - properties.fontMatrix = matrix; - break; - - case 'Encoding': - var encodingArg = this.getToken(); - var encoding; - - if (!/^\d+$/.test(encodingArg)) { - encoding = (0, _encodings.getEncoding)(encodingArg); - } else { - encoding = []; - var size = parseInt(encodingArg, 10) | 0; - this.getToken(); - - for (var j = 0; j < size; j++) { - token = this.getToken(); - - while (token !== 'dup' && token !== 'def') { - token = this.getToken(); - - if (token === null) { - return; - } - } - - if (token === 'def') { - break; - } - - var index = this.readInt(); - this.getToken(); - var glyph = this.getToken(); - encoding[index] = glyph; - this.getToken(); - } - } - - properties.builtInEncoding = encoding; - break; - - case 'FontBBox': - var fontBBox = this.readNumberArray(); - properties.ascent = Math.max(fontBBox[3], fontBBox[1]); - properties.descent = Math.min(fontBBox[1], fontBBox[3]); - properties.ascentScaled = true; - break; - } - } - } - }; - return Type1Parser; - }(); - - exports.Type1Parser = Type1Parser; - - /***/ }), - /* 182 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.getTilingPatternIR = getTilingPatternIR; - exports.Pattern = void 0; - - var _util = __w_extracthighlights_require__(6); - - var _colorspace = __w_extracthighlights_require__(168); - - var _primitives = __w_extracthighlights_require__(155); - - var ShadingType = { - FUNCTION_BASED: 1, - AXIAL: 2, - RADIAL: 3, - FREE_FORM_MESH: 4, - LATTICE_FORM_MESH: 5, - COONS_PATCH_MESH: 6, - TENSOR_PATCH_MESH: 7 - }; - - var Pattern = function PatternClosure() { - function Pattern() { - (0, _util.unreachable)('should not call Pattern constructor'); - } - - Pattern.prototype = { - getPattern: function Pattern_getPattern(ctx) { - (0, _util.unreachable)("Should not call Pattern.getStyle: ".concat(ctx)); - } - }; - - Pattern.parseShading = function (shading, matrix, xref, res, handler, pdfFunctionFactory) { - var dict = (0, _primitives.isStream)(shading) ? shading.dict : shading; - var type = dict.get('ShadingType'); - - try { - switch (type) { - case ShadingType.AXIAL: - case ShadingType.RADIAL: - return new Shadings.RadialAxial(dict, matrix, xref, res, pdfFunctionFactory); - - case ShadingType.FREE_FORM_MESH: - case ShadingType.LATTICE_FORM_MESH: - case ShadingType.COONS_PATCH_MESH: - case ShadingType.TENSOR_PATCH_MESH: - return new Shadings.Mesh(shading, matrix, xref, res, pdfFunctionFactory); - - default: - throw new _util.FormatError('Unsupported ShadingType: ' + type); - } - } catch (ex) { - if (ex instanceof _util.MissingDataException) { - throw ex; - } - - handler.send('UnsupportedFeature', { - featureId: _util.UNSUPPORTED_FEATURES.shadingPattern - }); - (0, _util.warn)(ex); - return new Shadings.Dummy(); - } - }; - - return Pattern; - }(); - - exports.Pattern = Pattern; - var Shadings = {}; - Shadings.SMALL_NUMBER = 1e-6; - - Shadings.RadialAxial = function RadialAxialClosure() { - function RadialAxial(dict, matrix, xref, res, pdfFunctionFactory) { - this.matrix = matrix; - this.coordsArr = dict.getArray('Coords'); - this.shadingType = dict.get('ShadingType'); - this.type = 'Pattern'; - var cs = dict.get('ColorSpace', 'CS'); - cs = _colorspace.ColorSpace.parse(cs, xref, res, pdfFunctionFactory); - this.cs = cs; - var t0 = 0.0, - t1 = 1.0; - - if (dict.has('Domain')) { - var domainArr = dict.getArray('Domain'); - t0 = domainArr[0]; - t1 = domainArr[1]; - } - - var extendStart = false, - extendEnd = false; - - if (dict.has('Extend')) { - var extendArr = dict.getArray('Extend'); - extendStart = extendArr[0]; - extendEnd = extendArr[1]; - } - - if (this.shadingType === ShadingType.RADIAL && (!extendStart || !extendEnd)) { - var x1 = this.coordsArr[0]; - var y1 = this.coordsArr[1]; - var r1 = this.coordsArr[2]; - var x2 = this.coordsArr[3]; - var y2 = this.coordsArr[4]; - var r2 = this.coordsArr[5]; - var distance = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); - - if (r1 <= r2 + distance && r2 <= r1 + distance) { - (0, _util.warn)('Unsupported radial gradient.'); - } - } - - this.extendStart = extendStart; - this.extendEnd = extendEnd; - var fnObj = dict.get('Function'); - var fn = pdfFunctionFactory.createFromArray(fnObj); - var diff = t1 - t0; - var step = diff / 10; - var colorStops = this.colorStops = []; - - if (t0 >= t1 || step <= 0) { - (0, _util.info)('Bad shading domain.'); - return; - } - - var color = new Float32Array(cs.numComps), - ratio = new Float32Array(1); - var rgbColor; - - for (var i = t0; i <= t1; i += step) { - ratio[0] = i; - fn(ratio, 0, color, 0); - rgbColor = cs.getRgb(color, 0); - - var cssColor = _util.Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]); - - colorStops.push([(i - t0) / diff, cssColor]); - } - - var background = 'transparent'; - - if (dict.has('Background')) { - rgbColor = cs.getRgb(dict.get('Background'), 0); - background = _util.Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]); - } - - if (!extendStart) { - colorStops.unshift([0, background]); - colorStops[1][0] += Shadings.SMALL_NUMBER; - } - - if (!extendEnd) { - colorStops[colorStops.length - 1][0] -= Shadings.SMALL_NUMBER; - colorStops.push([1, background]); - } - - this.colorStops = colorStops; - } - - RadialAxial.prototype = { - getIR: function RadialAxial_getIR() { - var coordsArr = this.coordsArr; - var shadingType = this.shadingType; - var type, p0, p1, r0, r1; - - if (shadingType === ShadingType.AXIAL) { - p0 = [coordsArr[0], coordsArr[1]]; - p1 = [coordsArr[2], coordsArr[3]]; - r0 = null; - r1 = null; - type = 'axial'; - } else if (shadingType === ShadingType.RADIAL) { - p0 = [coordsArr[0], coordsArr[1]]; - p1 = [coordsArr[3], coordsArr[4]]; - r0 = coordsArr[2]; - r1 = coordsArr[5]; - type = 'radial'; - } else { - (0, _util.unreachable)("getPattern type unknown: ".concat(shadingType)); - } - - var matrix = this.matrix; - - if (matrix) { - p0 = _util.Util.applyTransform(p0, matrix); - p1 = _util.Util.applyTransform(p1, matrix); - - if (shadingType === ShadingType.RADIAL) { - var scale = _util.Util.singularValueDecompose2dScale(matrix); - - r0 *= scale[0]; - r1 *= scale[1]; - } - } - - return ['RadialAxial', type, this.colorStops, p0, p1, r0, r1]; - } - }; - return RadialAxial; - }(); - - Shadings.Mesh = function MeshClosure() { - function MeshStreamReader(stream, context) { - this.stream = stream; - this.context = context; - this.buffer = 0; - this.bufferLength = 0; - var numComps = context.numComps; - this.tmpCompsBuf = new Float32Array(numComps); - var csNumComps = context.colorSpace.numComps; - this.tmpCsCompsBuf = context.colorFn ? new Float32Array(csNumComps) : this.tmpCompsBuf; - } - - MeshStreamReader.prototype = { - get hasData() { - if (this.stream.end) { - return this.stream.pos < this.stream.end; - } - - if (this.bufferLength > 0) { - return true; - } - - var nextByte = this.stream.getByte(); - - if (nextByte < 0) { - return false; - } - - this.buffer = nextByte; - this.bufferLength = 8; - return true; - }, - - readBits: function MeshStreamReader_readBits(n) { - var buffer = this.buffer; - var bufferLength = this.bufferLength; - - if (n === 32) { - if (bufferLength === 0) { - return (this.stream.getByte() << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte()) >>> 0; - } - - buffer = buffer << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte(); - var nextByte = this.stream.getByte(); - this.buffer = nextByte & (1 << bufferLength) - 1; - return (buffer << 8 - bufferLength | (nextByte & 0xFF) >> bufferLength) >>> 0; - } - - if (n === 8 && bufferLength === 0) { - return this.stream.getByte(); - } - - while (bufferLength < n) { - buffer = buffer << 8 | this.stream.getByte(); - bufferLength += 8; - } - - bufferLength -= n; - this.bufferLength = bufferLength; - this.buffer = buffer & (1 << bufferLength) - 1; - return buffer >> bufferLength; - }, - align: function MeshStreamReader_align() { - this.buffer = 0; - this.bufferLength = 0; - }, - readFlag: function MeshStreamReader_readFlag() { - return this.readBits(this.context.bitsPerFlag); - }, - readCoordinate: function MeshStreamReader_readCoordinate() { - var bitsPerCoordinate = this.context.bitsPerCoordinate; - var xi = this.readBits(bitsPerCoordinate); - var yi = this.readBits(bitsPerCoordinate); - var decode = this.context.decode; - var scale = bitsPerCoordinate < 32 ? 1 / ((1 << bitsPerCoordinate) - 1) : 2.3283064365386963e-10; - return [xi * scale * (decode[1] - decode[0]) + decode[0], yi * scale * (decode[3] - decode[2]) + decode[2]]; - }, - readComponents: function MeshStreamReader_readComponents() { - var numComps = this.context.numComps; - var bitsPerComponent = this.context.bitsPerComponent; - var scale = bitsPerComponent < 32 ? 1 / ((1 << bitsPerComponent) - 1) : 2.3283064365386963e-10; - var decode = this.context.decode; - var components = this.tmpCompsBuf; - - for (var i = 0, j = 4; i < numComps; i++, j += 2) { - var ci = this.readBits(bitsPerComponent); - components[i] = ci * scale * (decode[j + 1] - decode[j]) + decode[j]; - } - - var color = this.tmpCsCompsBuf; - - if (this.context.colorFn) { - this.context.colorFn(components, 0, color, 0); - } - - return this.context.colorSpace.getRgb(color, 0); - } - }; - - function decodeType4Shading(mesh, reader) { - var coords = mesh.coords; - var colors = mesh.colors; - var ps = []; - var verticesLeft = 0; - - while (reader.hasData) { - var f = reader.readFlag(); - var coord = reader.readCoordinate(); - var color = reader.readComponents(); - - if (verticesLeft === 0) { - if (!(0 <= f && f <= 2)) { - throw new _util.FormatError('Unknown type4 flag'); - } - - switch (f) { - case 0: - verticesLeft = 3; - break; - - case 1: - ps.push(ps[ps.length - 2], ps[ps.length - 1]); - verticesLeft = 1; - break; - - case 2: - ps.push(ps[ps.length - 3], ps[ps.length - 1]); - verticesLeft = 1; - break; - } - } - - ps.push(coords.length); - coords.push(coord); - colors.push(color); - verticesLeft--; - reader.align(); - } - - mesh.figures.push({ - type: 'triangles', - coords: new Int32Array(ps), - colors: new Int32Array(ps) - }); - } - - function decodeType5Shading(mesh, reader, verticesPerRow) { - var coords = mesh.coords; - var colors = mesh.colors; - var ps = []; - - while (reader.hasData) { - var coord = reader.readCoordinate(); - var color = reader.readComponents(); - ps.push(coords.length); - coords.push(coord); - colors.push(color); - } - - mesh.figures.push({ - type: 'lattice', - coords: new Int32Array(ps), - colors: new Int32Array(ps), - verticesPerRow: verticesPerRow - }); - } - - var MIN_SPLIT_PATCH_CHUNKS_AMOUNT = 3; - var MAX_SPLIT_PATCH_CHUNKS_AMOUNT = 20; - var TRIANGLE_DENSITY = 20; - - var getB = function getBClosure() { - function buildB(count) { - var lut = []; - - for (var i = 0; i <= count; i++) { - var t = i / count, - t_ = 1 - t; - lut.push(new Float32Array([t_ * t_ * t_, 3 * t * t_ * t_, 3 * t * t * t_, t * t * t])); - } - - return lut; - } - - var cache = []; - return function getB(count) { - if (!cache[count]) { - cache[count] = buildB(count); - } - - return cache[count]; - }; - }(); - - function buildFigureFromPatch(mesh, index) { - var figure = mesh.figures[index]; - (0, _util.assert)(figure.type === 'patch', 'Unexpected patch mesh figure'); - var coords = mesh.coords, - colors = mesh.colors; - var pi = figure.coords; - var ci = figure.colors; - var figureMinX = Math.min(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]); - var figureMinY = Math.min(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]); - var figureMaxX = Math.max(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]); - var figureMaxY = Math.max(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]); - var splitXBy = Math.ceil((figureMaxX - figureMinX) * TRIANGLE_DENSITY / (mesh.bounds[2] - mesh.bounds[0])); - splitXBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitXBy)); - var splitYBy = Math.ceil((figureMaxY - figureMinY) * TRIANGLE_DENSITY / (mesh.bounds[3] - mesh.bounds[1])); - splitYBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitYBy)); - var verticesPerRow = splitXBy + 1; - var figureCoords = new Int32Array((splitYBy + 1) * verticesPerRow); - var figureColors = new Int32Array((splitYBy + 1) * verticesPerRow); - var k = 0; - var cl = new Uint8Array(3), - cr = new Uint8Array(3); - var c0 = colors[ci[0]], - c1 = colors[ci[1]], - c2 = colors[ci[2]], - c3 = colors[ci[3]]; - var bRow = getB(splitYBy), - bCol = getB(splitXBy); - - for (var row = 0; row <= splitYBy; row++) { - cl[0] = (c0[0] * (splitYBy - row) + c2[0] * row) / splitYBy | 0; - cl[1] = (c0[1] * (splitYBy - row) + c2[1] * row) / splitYBy | 0; - cl[2] = (c0[2] * (splitYBy - row) + c2[2] * row) / splitYBy | 0; - cr[0] = (c1[0] * (splitYBy - row) + c3[0] * row) / splitYBy | 0; - cr[1] = (c1[1] * (splitYBy - row) + c3[1] * row) / splitYBy | 0; - cr[2] = (c1[2] * (splitYBy - row) + c3[2] * row) / splitYBy | 0; - - for (var col = 0; col <= splitXBy; col++, k++) { - if ((row === 0 || row === splitYBy) && (col === 0 || col === splitXBy)) { - continue; - } - - var x = 0, - y = 0; - var q = 0; - - for (var i = 0; i <= 3; i++) { - for (var j = 0; j <= 3; j++, q++) { - var m = bRow[row][i] * bCol[col][j]; - x += coords[pi[q]][0] * m; - y += coords[pi[q]][1] * m; - } - } - - figureCoords[k] = coords.length; - coords.push([x, y]); - figureColors[k] = colors.length; - var newColor = new Uint8Array(3); - newColor[0] = (cl[0] * (splitXBy - col) + cr[0] * col) / splitXBy | 0; - newColor[1] = (cl[1] * (splitXBy - col) + cr[1] * col) / splitXBy | 0; - newColor[2] = (cl[2] * (splitXBy - col) + cr[2] * col) / splitXBy | 0; - colors.push(newColor); - } - } - - figureCoords[0] = pi[0]; - figureColors[0] = ci[0]; - figureCoords[splitXBy] = pi[3]; - figureColors[splitXBy] = ci[1]; - figureCoords[verticesPerRow * splitYBy] = pi[12]; - figureColors[verticesPerRow * splitYBy] = ci[2]; - figureCoords[verticesPerRow * splitYBy + splitXBy] = pi[15]; - figureColors[verticesPerRow * splitYBy + splitXBy] = ci[3]; - mesh.figures[index] = { - type: 'lattice', - coords: figureCoords, - colors: figureColors, - verticesPerRow: verticesPerRow - }; - } - - function decodeType6Shading(mesh, reader) { - var coords = mesh.coords; - var colors = mesh.colors; - var ps = new Int32Array(16); - var cs = new Int32Array(4); - - while (reader.hasData) { - var f = reader.readFlag(); - - if (!(0 <= f && f <= 3)) { - throw new _util.FormatError('Unknown type6 flag'); - } - - var i, ii; - var pi = coords.length; - - for (i = 0, ii = f !== 0 ? 8 : 12; i < ii; i++) { - coords.push(reader.readCoordinate()); - } - - var ci = colors.length; - - for (i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) { - colors.push(reader.readComponents()); - } - - var tmp1, tmp2, tmp3, tmp4; - - switch (f) { - case 0: - ps[12] = pi + 3; - ps[13] = pi + 4; - ps[14] = pi + 5; - ps[15] = pi + 6; - ps[8] = pi + 2; - ps[11] = pi + 7; - ps[4] = pi + 1; - ps[7] = pi + 8; - ps[0] = pi; - ps[1] = pi + 11; - ps[2] = pi + 10; - ps[3] = pi + 9; - cs[2] = ci + 1; - cs[3] = ci + 2; - cs[0] = ci; - cs[1] = ci + 3; - break; - - case 1: - tmp1 = ps[12]; - tmp2 = ps[13]; - tmp3 = ps[14]; - tmp4 = ps[15]; - ps[12] = tmp4; - ps[13] = pi + 0; - ps[14] = pi + 1; - ps[15] = pi + 2; - ps[8] = tmp3; - ps[11] = pi + 3; - ps[4] = tmp2; - ps[7] = pi + 4; - ps[0] = tmp1; - ps[1] = pi + 7; - ps[2] = pi + 6; - ps[3] = pi + 5; - tmp1 = cs[2]; - tmp2 = cs[3]; - cs[2] = tmp2; - cs[3] = ci; - cs[0] = tmp1; - cs[1] = ci + 1; - break; - - case 2: - tmp1 = ps[15]; - tmp2 = ps[11]; - ps[12] = ps[3]; - ps[13] = pi + 0; - ps[14] = pi + 1; - ps[15] = pi + 2; - ps[8] = ps[7]; - ps[11] = pi + 3; - ps[4] = tmp2; - ps[7] = pi + 4; - ps[0] = tmp1; - ps[1] = pi + 7; - ps[2] = pi + 6; - ps[3] = pi + 5; - tmp1 = cs[3]; - cs[2] = cs[1]; - cs[3] = ci; - cs[0] = tmp1; - cs[1] = ci + 1; - break; - - case 3: - ps[12] = ps[0]; - ps[13] = pi + 0; - ps[14] = pi + 1; - ps[15] = pi + 2; - ps[8] = ps[1]; - ps[11] = pi + 3; - ps[4] = ps[2]; - ps[7] = pi + 4; - ps[0] = ps[3]; - ps[1] = pi + 7; - ps[2] = pi + 6; - ps[3] = pi + 5; - cs[2] = cs[0]; - cs[3] = ci; - cs[0] = cs[1]; - cs[1] = ci + 1; - break; - } - - ps[5] = coords.length; - coords.push([(-4 * coords[ps[0]][0] - coords[ps[15]][0] + 6 * (coords[ps[4]][0] + coords[ps[1]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[13]][0] + coords[ps[7]][0])) / 9, (-4 * coords[ps[0]][1] - coords[ps[15]][1] + 6 * (coords[ps[4]][1] + coords[ps[1]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[13]][1] + coords[ps[7]][1])) / 9]); - ps[6] = coords.length; - coords.push([(-4 * coords[ps[3]][0] - coords[ps[12]][0] + 6 * (coords[ps[2]][0] + coords[ps[7]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[4]][0] + coords[ps[14]][0])) / 9, (-4 * coords[ps[3]][1] - coords[ps[12]][1] + 6 * (coords[ps[2]][1] + coords[ps[7]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[4]][1] + coords[ps[14]][1])) / 9]); - ps[9] = coords.length; - coords.push([(-4 * coords[ps[12]][0] - coords[ps[3]][0] + 6 * (coords[ps[8]][0] + coords[ps[13]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[11]][0] + coords[ps[1]][0])) / 9, (-4 * coords[ps[12]][1] - coords[ps[3]][1] + 6 * (coords[ps[8]][1] + coords[ps[13]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[11]][1] + coords[ps[1]][1])) / 9]); - ps[10] = coords.length; - coords.push([(-4 * coords[ps[15]][0] - coords[ps[0]][0] + 6 * (coords[ps[11]][0] + coords[ps[14]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[2]][0] + coords[ps[8]][0])) / 9, (-4 * coords[ps[15]][1] - coords[ps[0]][1] + 6 * (coords[ps[11]][1] + coords[ps[14]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[2]][1] + coords[ps[8]][1])) / 9]); - mesh.figures.push({ - type: 'patch', - coords: new Int32Array(ps), - colors: new Int32Array(cs) - }); - } - } - - function decodeType7Shading(mesh, reader) { - var coords = mesh.coords; - var colors = mesh.colors; - var ps = new Int32Array(16); - var cs = new Int32Array(4); - - while (reader.hasData) { - var f = reader.readFlag(); - - if (!(0 <= f && f <= 3)) { - throw new _util.FormatError('Unknown type7 flag'); - } - - var i, ii; - var pi = coords.length; - - for (i = 0, ii = f !== 0 ? 12 : 16; i < ii; i++) { - coords.push(reader.readCoordinate()); - } - - var ci = colors.length; - - for (i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) { - colors.push(reader.readComponents()); - } - - var tmp1, tmp2, tmp3, tmp4; - - switch (f) { - case 0: - ps[12] = pi + 3; - ps[13] = pi + 4; - ps[14] = pi + 5; - ps[15] = pi + 6; - ps[8] = pi + 2; - ps[9] = pi + 13; - ps[10] = pi + 14; - ps[11] = pi + 7; - ps[4] = pi + 1; - ps[5] = pi + 12; - ps[6] = pi + 15; - ps[7] = pi + 8; - ps[0] = pi; - ps[1] = pi + 11; - ps[2] = pi + 10; - ps[3] = pi + 9; - cs[2] = ci + 1; - cs[3] = ci + 2; - cs[0] = ci; - cs[1] = ci + 3; - break; - - case 1: - tmp1 = ps[12]; - tmp2 = ps[13]; - tmp3 = ps[14]; - tmp4 = ps[15]; - ps[12] = tmp4; - ps[13] = pi + 0; - ps[14] = pi + 1; - ps[15] = pi + 2; - ps[8] = tmp3; - ps[9] = pi + 9; - ps[10] = pi + 10; - ps[11] = pi + 3; - ps[4] = tmp2; - ps[5] = pi + 8; - ps[6] = pi + 11; - ps[7] = pi + 4; - ps[0] = tmp1; - ps[1] = pi + 7; - ps[2] = pi + 6; - ps[3] = pi + 5; - tmp1 = cs[2]; - tmp2 = cs[3]; - cs[2] = tmp2; - cs[3] = ci; - cs[0] = tmp1; - cs[1] = ci + 1; - break; - - case 2: - tmp1 = ps[15]; - tmp2 = ps[11]; - ps[12] = ps[3]; - ps[13] = pi + 0; - ps[14] = pi + 1; - ps[15] = pi + 2; - ps[8] = ps[7]; - ps[9] = pi + 9; - ps[10] = pi + 10; - ps[11] = pi + 3; - ps[4] = tmp2; - ps[5] = pi + 8; - ps[6] = pi + 11; - ps[7] = pi + 4; - ps[0] = tmp1; - ps[1] = pi + 7; - ps[2] = pi + 6; - ps[3] = pi + 5; - tmp1 = cs[3]; - cs[2] = cs[1]; - cs[3] = ci; - cs[0] = tmp1; - cs[1] = ci + 1; - break; - - case 3: - ps[12] = ps[0]; - ps[13] = pi + 0; - ps[14] = pi + 1; - ps[15] = pi + 2; - ps[8] = ps[1]; - ps[9] = pi + 9; - ps[10] = pi + 10; - ps[11] = pi + 3; - ps[4] = ps[2]; - ps[5] = pi + 8; - ps[6] = pi + 11; - ps[7] = pi + 4; - ps[0] = ps[3]; - ps[1] = pi + 7; - ps[2] = pi + 6; - ps[3] = pi + 5; - cs[2] = cs[0]; - cs[3] = ci; - cs[0] = cs[1]; - cs[1] = ci + 1; - break; - } - - mesh.figures.push({ - type: 'patch', - coords: new Int32Array(ps), - colors: new Int32Array(cs) - }); - } - } - - function updateBounds(mesh) { - var minX = mesh.coords[0][0], - minY = mesh.coords[0][1], - maxX = minX, - maxY = minY; - - for (var i = 1, ii = mesh.coords.length; i < ii; i++) { - var x = mesh.coords[i][0], - y = mesh.coords[i][1]; - minX = minX > x ? x : minX; - minY = minY > y ? y : minY; - maxX = maxX < x ? x : maxX; - maxY = maxY < y ? y : maxY; - } - - mesh.bounds = [minX, minY, maxX, maxY]; - } - - function packData(mesh) { - var i, ii, j, jj; - var coords = mesh.coords; - var coordsPacked = new Float32Array(coords.length * 2); - - for (i = 0, j = 0, ii = coords.length; i < ii; i++) { - var xy = coords[i]; - coordsPacked[j++] = xy[0]; - coordsPacked[j++] = xy[1]; - } - - mesh.coords = coordsPacked; - var colors = mesh.colors; - var colorsPacked = new Uint8Array(colors.length * 3); - - for (i = 0, j = 0, ii = colors.length; i < ii; i++) { - var c = colors[i]; - colorsPacked[j++] = c[0]; - colorsPacked[j++] = c[1]; - colorsPacked[j++] = c[2]; - } - - mesh.colors = colorsPacked; - var figures = mesh.figures; - - for (i = 0, ii = figures.length; i < ii; i++) { - var figure = figures[i], - ps = figure.coords, - cs = figure.colors; - - for (j = 0, jj = ps.length; j < jj; j++) { - ps[j] *= 2; - cs[j] *= 3; - } - } - } - - function Mesh(stream, matrix, xref, res, pdfFunctionFactory) { - if (!(0, _primitives.isStream)(stream)) { - throw new _util.FormatError('Mesh data is not a stream'); - } - - var dict = stream.dict; - this.matrix = matrix; - this.shadingType = dict.get('ShadingType'); - this.type = 'Pattern'; - this.bbox = dict.getArray('BBox'); - var cs = dict.get('ColorSpace', 'CS'); - cs = _colorspace.ColorSpace.parse(cs, xref, res, pdfFunctionFactory); - this.cs = cs; - this.background = dict.has('Background') ? cs.getRgb(dict.get('Background'), 0) : null; - var fnObj = dict.get('Function'); - var fn = fnObj ? pdfFunctionFactory.createFromArray(fnObj) : null; - this.coords = []; - this.colors = []; - this.figures = []; - var decodeContext = { - bitsPerCoordinate: dict.get('BitsPerCoordinate'), - bitsPerComponent: dict.get('BitsPerComponent'), - bitsPerFlag: dict.get('BitsPerFlag'), - decode: dict.getArray('Decode'), - colorFn: fn, - colorSpace: cs, - numComps: fn ? 1 : cs.numComps - }; - var reader = new MeshStreamReader(stream, decodeContext); - var patchMesh = false; - - switch (this.shadingType) { - case ShadingType.FREE_FORM_MESH: - decodeType4Shading(this, reader); - break; - - case ShadingType.LATTICE_FORM_MESH: - var verticesPerRow = dict.get('VerticesPerRow') | 0; - - if (verticesPerRow < 2) { - throw new _util.FormatError('Invalid VerticesPerRow'); - } - - decodeType5Shading(this, reader, verticesPerRow); - break; - - case ShadingType.COONS_PATCH_MESH: - decodeType6Shading(this, reader); - patchMesh = true; - break; - - case ShadingType.TENSOR_PATCH_MESH: - decodeType7Shading(this, reader); - patchMesh = true; - break; - - default: - (0, _util.unreachable)('Unsupported mesh type.'); - break; - } - - if (patchMesh) { - updateBounds(this); - - for (var i = 0, ii = this.figures.length; i < ii; i++) { - buildFigureFromPatch(this, i); - } - } - - updateBounds(this); - packData(this); - } - - Mesh.prototype = { - getIR: function Mesh_getIR() { - return ['Mesh', this.shadingType, this.coords, this.colors, this.figures, this.bounds, this.matrix, this.bbox, this.background]; - } - }; - return Mesh; - }(); - - Shadings.Dummy = function DummyClosure() { - function Dummy() { - this.type = 'Pattern'; - } - - Dummy.prototype = { - getIR: function Dummy_getIR() { - return ['Dummy']; - } - }; - return Dummy; - }(); - - function getTilingPatternIR(operatorList, dict, args) { - var matrix = dict.getArray('Matrix'); - - var bbox = _util.Util.normalizeRect(dict.getArray('BBox')); - - var xstep = dict.get('XStep'); - var ystep = dict.get('YStep'); - var paintType = dict.get('PaintType'); - var tilingType = dict.get('TilingType'); - - if (bbox[2] - bbox[0] === 0 || bbox[3] - bbox[1] === 0) { - throw new _util.FormatError("Invalid getTilingPatternIR /BBox array: [".concat(bbox, "].")); - } - - return ['TilingPattern', args, operatorList, matrix, bbox, xstep, ystep, paintType, tilingType]; - } - - /***/ }), - /* 183 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.bidi = bidi; - - var _util = __w_extracthighlights_require__(6); - - var baseTypes = ['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', 'ON', 'ON', 'ET', 'ET', 'ET', 'ON', 'ON', 'ON', 'ON', 'ON', 'ES', 'CS', 'ES', 'CS', 'CS', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'CS', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', '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', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', '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', 'ON', 'ON', 'ON', 'ON', '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', 'ON', 'ET', 'ET', 'ET', 'ET', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'BN', 'ON', 'ON', 'ET', 'ET', 'EN', 'EN', 'ON', 'L', 'ON', 'ON', 'ON', 'EN', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'ON', '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', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L']; - var arabicTypes = ['AN', 'AN', 'AN', 'AN', 'AN', 'AN', 'ON', 'ON', 'AL', 'ET', 'ET', 'AL', 'CS', 'AL', 'ON', 'ON', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', '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', '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', 'ON', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'AL', 'AL', 'NSM', 'NSM', 'ON', 'NSM', 'NSM', 'NSM', 'NSM', 'AL', 'AL', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL']; - - function isOdd(i) { - return (i & 1) !== 0; - } - - function isEven(i) { - return (i & 1) === 0; - } - - function findUnequal(arr, start, value) { - for (var j = start, jj = arr.length; j < jj; ++j) { - if (arr[j] !== value) { - return j; - } - } - - return j; - } - - function setValues(arr, start, end, value) { - for (var j = start; j < end; ++j) { - arr[j] = value; - } - } - - function reverseValues(arr, start, end) { - for (var i = start, j = end - 1; i < j; ++i, --j) { - var temp = arr[i]; - arr[i] = arr[j]; - arr[j] = temp; - } - } - - function createBidiText(str, isLTR, vertical) { - return { - str: str, - dir: vertical ? 'ttb' : isLTR ? 'ltr' : 'rtl' - }; - } - - var chars = []; - var types = []; - - function bidi(str, startLevel, vertical) { - var isLTR = true; - var strLength = str.length; - - if (strLength === 0 || vertical) { - return createBidiText(str, isLTR, vertical); - } - - chars.length = strLength; - types.length = strLength; - var numBidi = 0; - var i, ii; - - for (i = 0; i < strLength; ++i) { - chars[i] = str.charAt(i); - var charCode = str.charCodeAt(i); - var charType = 'L'; - - if (charCode <= 0x00ff) { - charType = baseTypes[charCode]; - } else if (0x0590 <= charCode && charCode <= 0x05f4) { - charType = 'R'; - } else if (0x0600 <= charCode && charCode <= 0x06ff) { - charType = arabicTypes[charCode & 0xff]; - - if (!charType) { - (0, _util.warn)('Bidi: invalid Unicode character ' + charCode.toString(16)); - } - } else if (0x0700 <= charCode && charCode <= 0x08AC) { - charType = 'AL'; - } - - if (charType === 'R' || charType === 'AL' || charType === 'AN') { - numBidi++; - } - - types[i] = charType; - } - - if (numBidi === 0) { - isLTR = true; - return createBidiText(str, isLTR); - } - - if (startLevel === -1) { - if (numBidi / strLength < 0.3) { - isLTR = true; - startLevel = 0; - } else { - isLTR = false; - startLevel = 1; - } - } - - var levels = []; - - for (i = 0; i < strLength; ++i) { - levels[i] = startLevel; - } - - var e = isOdd(startLevel) ? 'R' : 'L'; - var sor = e; - var eor = sor; - var lastType = sor; - - for (i = 0; i < strLength; ++i) { - if (types[i] === 'NSM') { - types[i] = lastType; - } else { - lastType = types[i]; - } - } - - lastType = sor; - var t; - - for (i = 0; i < strLength; ++i) { - t = types[i]; - - if (t === 'EN') { - types[i] = lastType === 'AL' ? 'AN' : 'EN'; - } else if (t === 'R' || t === 'L' || t === 'AL') { - lastType = t; - } - } - - for (i = 0; i < strLength; ++i) { - t = types[i]; - - if (t === 'AL') { - types[i] = 'R'; - } - } - - for (i = 1; i < strLength - 1; ++i) { - if (types[i] === 'ES' && types[i - 1] === 'EN' && types[i + 1] === 'EN') { - types[i] = 'EN'; - } - - if (types[i] === 'CS' && (types[i - 1] === 'EN' || types[i - 1] === 'AN') && types[i + 1] === types[i - 1]) { - types[i] = types[i - 1]; - } - } - - for (i = 0; i < strLength; ++i) { - if (types[i] === 'EN') { - var j; - - for (j = i - 1; j >= 0; --j) { - if (types[j] !== 'ET') { - break; - } - - types[j] = 'EN'; - } - - for (j = i + 1; j < strLength; ++j) { - if (types[j] !== 'ET') { - break; - } - - types[j] = 'EN'; - } - } - } - - for (i = 0; i < strLength; ++i) { - t = types[i]; - - if (t === 'WS' || t === 'ES' || t === 'ET' || t === 'CS') { - types[i] = 'ON'; - } - } - - lastType = sor; - - for (i = 0; i < strLength; ++i) { - t = types[i]; - - if (t === 'EN') { - types[i] = lastType === 'L' ? 'L' : 'EN'; - } else if (t === 'R' || t === 'L') { - lastType = t; - } - } - - for (i = 0; i < strLength; ++i) { - if (types[i] === 'ON') { - var end = findUnequal(types, i + 1, 'ON'); - var before = sor; - - if (i > 0) { - before = types[i - 1]; - } - - var after = eor; - - if (end + 1 < strLength) { - after = types[end + 1]; - } - - if (before !== 'L') { - before = 'R'; - } - - if (after !== 'L') { - after = 'R'; - } - - if (before === after) { - setValues(types, i, end, before); - } - - i = end - 1; - } - } - - for (i = 0; i < strLength; ++i) { - if (types[i] === 'ON') { - types[i] = e; - } - } - - for (i = 0; i < strLength; ++i) { - t = types[i]; - - if (isEven(levels[i])) { - if (t === 'R') { - levels[i] += 1; - } else if (t === 'AN' || t === 'EN') { - levels[i] += 2; - } - } else { - if (t === 'L' || t === 'AN' || t === 'EN') { - levels[i] += 1; - } - } - } - - var highestLevel = -1; - var lowestOddLevel = 99; - var level; - - for (i = 0, ii = levels.length; i < ii; ++i) { - level = levels[i]; - - if (highestLevel < level) { - highestLevel = level; - } - - if (lowestOddLevel > level && isOdd(level)) { - lowestOddLevel = level; - } - } - - for (level = highestLevel; level >= lowestOddLevel; --level) { - var start = -1; - - for (i = 0, ii = levels.length; i < ii; ++i) { - if (levels[i] < level) { - if (start >= 0) { - reverseValues(chars, start, i); - start = -1; - } - } else if (start < 0) { - start = i; - } - } - - if (start >= 0) { - reverseValues(chars, start, levels.length); - } - } - - for (i = 0, ii = chars.length; i < ii; ++i) { - var ch = chars[i]; - - if (ch === '<' || ch === '>') { - chars[i] = ''; - } - } - - return createBidiText(chars.join(''), isLTR); - } - - /***/ }), - /* 184 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.getMetrics = void 0; - - var _util = __w_extracthighlights_require__(6); - - var getMetrics = (0, _util.getLookupTableFactory)(function (t) { - t['Courier'] = 600; - t['Courier-Bold'] = 600; - t['Courier-BoldOblique'] = 600; - t['Courier-Oblique'] = 600; - t['Helvetica'] = (0, _util.getLookupTableFactory)(function (t) { - t['space'] = 278; - t['exclam'] = 278; - t['quotedbl'] = 355; - t['numbersign'] = 556; - t['dollar'] = 556; - t['percent'] = 889; - t['ampersand'] = 667; - t['quoteright'] = 222; - t['parenleft'] = 333; - t['parenright'] = 333; - t['asterisk'] = 389; - t['plus'] = 584; - t['comma'] = 278; - t['hyphen'] = 333; - t['period'] = 278; - t['slash'] = 278; - t['zero'] = 556; - t['one'] = 556; - t['two'] = 556; - t['three'] = 556; - t['four'] = 556; - t['five'] = 556; - t['six'] = 556; - t['seven'] = 556; - t['eight'] = 556; - t['nine'] = 556; - t['colon'] = 278; - t['semicolon'] = 278; - t['less'] = 584; - t['equal'] = 584; - t['greater'] = 584; - t['question'] = 556; - t['at'] = 1015; - t['A'] = 667; - t['B'] = 667; - t['C'] = 722; - t['D'] = 722; - t['E'] = 667; - t['F'] = 611; - t['G'] = 778; - t['H'] = 722; - t['I'] = 278; - t['J'] = 500; - t['K'] = 667; - t['L'] = 556; - t['M'] = 833; - t['N'] = 722; - t['O'] = 778; - t['P'] = 667; - t['Q'] = 778; - t['R'] = 722; - t['S'] = 667; - t['T'] = 611; - t['U'] = 722; - t['V'] = 667; - t['W'] = 944; - t['X'] = 667; - t['Y'] = 667; - t['Z'] = 611; - t['bracketleft'] = 278; - t['backslash'] = 278; - t['bracketright'] = 278; - t['asciicircum'] = 469; - t['underscore'] = 556; - t['quoteleft'] = 222; - t['a'] = 556; - t['b'] = 556; - t['c'] = 500; - t['d'] = 556; - t['e'] = 556; - t['f'] = 278; - t['g'] = 556; - t['h'] = 556; - t['i'] = 222; - t['j'] = 222; - t['k'] = 500; - t['l'] = 222; - t['m'] = 833; - t['n'] = 556; - t['o'] = 556; - t['p'] = 556; - t['q'] = 556; - t['r'] = 333; - t['s'] = 500; - t['t'] = 278; - t['u'] = 556; - t['v'] = 500; - t['w'] = 722; - t['x'] = 500; - t['y'] = 500; - t['z'] = 500; - t['braceleft'] = 334; - t['bar'] = 260; - t['braceright'] = 334; - t['asciitilde'] = 584; - t['exclamdown'] = 333; - t['cent'] = 556; - t['sterling'] = 556; - t['fraction'] = 167; - t['yen'] = 556; - t['florin'] = 556; - t['section'] = 556; - t['currency'] = 556; - t['quotesingle'] = 191; - t['quotedblleft'] = 333; - t['guillemotleft'] = 556; - t['guilsinglleft'] = 333; - t['guilsinglright'] = 333; - t['fi'] = 500; - t['fl'] = 500; - t['endash'] = 556; - t['dagger'] = 556; - t['daggerdbl'] = 556; - t['periodcentered'] = 278; - t['paragraph'] = 537; - t['bullet'] = 350; - t['quotesinglbase'] = 222; - t['quotedblbase'] = 333; - t['quotedblright'] = 333; - t['guillemotright'] = 556; - t['ellipsis'] = 1000; - t['perthousand'] = 1000; - t['questiondown'] = 611; - t['grave'] = 333; - t['acute'] = 333; - t['circumflex'] = 333; - t['tilde'] = 333; - t['macron'] = 333; - t['breve'] = 333; - t['dotaccent'] = 333; - t['dieresis'] = 333; - t['ring'] = 333; - t['cedilla'] = 333; - t['hungarumlaut'] = 333; - t['ogonek'] = 333; - t['caron'] = 333; - t['emdash'] = 1000; - t['AE'] = 1000; - t['ordfeminine'] = 370; - t['Lslash'] = 556; - t['Oslash'] = 778; - t['OE'] = 1000; - t['ordmasculine'] = 365; - t['ae'] = 889; - t['dotlessi'] = 278; - t['lslash'] = 222; - t['oslash'] = 611; - t['oe'] = 944; - t['germandbls'] = 611; - t['Idieresis'] = 278; - t['eacute'] = 556; - t['abreve'] = 556; - t['uhungarumlaut'] = 556; - t['ecaron'] = 556; - t['Ydieresis'] = 667; - t['divide'] = 584; - t['Yacute'] = 667; - t['Acircumflex'] = 667; - t['aacute'] = 556; - t['Ucircumflex'] = 722; - t['yacute'] = 500; - t['scommaaccent'] = 500; - t['ecircumflex'] = 556; - t['Uring'] = 722; - t['Udieresis'] = 722; - t['aogonek'] = 556; - t['Uacute'] = 722; - t['uogonek'] = 556; - t['Edieresis'] = 667; - t['Dcroat'] = 722; - t['commaaccent'] = 250; - t['copyright'] = 737; - t['Emacron'] = 667; - t['ccaron'] = 500; - t['aring'] = 556; - t['Ncommaaccent'] = 722; - t['lacute'] = 222; - t['agrave'] = 556; - t['Tcommaaccent'] = 611; - t['Cacute'] = 722; - t['atilde'] = 556; - t['Edotaccent'] = 667; - t['scaron'] = 500; - t['scedilla'] = 500; - t['iacute'] = 278; - t['lozenge'] = 471; - t['Rcaron'] = 722; - t['Gcommaaccent'] = 778; - t['ucircumflex'] = 556; - t['acircumflex'] = 556; - t['Amacron'] = 667; - t['rcaron'] = 333; - t['ccedilla'] = 500; - t['Zdotaccent'] = 611; - t['Thorn'] = 667; - t['Omacron'] = 778; - t['Racute'] = 722; - t['Sacute'] = 667; - t['dcaron'] = 643; - t['Umacron'] = 722; - t['uring'] = 556; - t['threesuperior'] = 333; - t['Ograve'] = 778; - t['Agrave'] = 667; - t['Abreve'] = 667; - t['multiply'] = 584; - t['uacute'] = 556; - t['Tcaron'] = 611; - t['partialdiff'] = 476; - t['ydieresis'] = 500; - t['Nacute'] = 722; - t['icircumflex'] = 278; - t['Ecircumflex'] = 667; - t['adieresis'] = 556; - t['edieresis'] = 556; - t['cacute'] = 500; - t['nacute'] = 556; - t['umacron'] = 556; - t['Ncaron'] = 722; - t['Iacute'] = 278; - t['plusminus'] = 584; - t['brokenbar'] = 260; - t['registered'] = 737; - t['Gbreve'] = 778; - t['Idotaccent'] = 278; - t['summation'] = 600; - t['Egrave'] = 667; - t['racute'] = 333; - t['omacron'] = 556; - t['Zacute'] = 611; - t['Zcaron'] = 611; - t['greaterequal'] = 549; - t['Eth'] = 722; - t['Ccedilla'] = 722; - t['lcommaaccent'] = 222; - t['tcaron'] = 317; - t['eogonek'] = 556; - t['Uogonek'] = 722; - t['Aacute'] = 667; - t['Adieresis'] = 667; - t['egrave'] = 556; - t['zacute'] = 500; - t['iogonek'] = 222; - t['Oacute'] = 778; - t['oacute'] = 556; - t['amacron'] = 556; - t['sacute'] = 500; - t['idieresis'] = 278; - t['Ocircumflex'] = 778; - t['Ugrave'] = 722; - t['Delta'] = 612; - t['thorn'] = 556; - t['twosuperior'] = 333; - t['Odieresis'] = 778; - t['mu'] = 556; - t['igrave'] = 278; - t['ohungarumlaut'] = 556; - t['Eogonek'] = 667; - t['dcroat'] = 556; - t['threequarters'] = 834; - t['Scedilla'] = 667; - t['lcaron'] = 299; - t['Kcommaaccent'] = 667; - t['Lacute'] = 556; - t['trademark'] = 1000; - t['edotaccent'] = 556; - t['Igrave'] = 278; - t['Imacron'] = 278; - t['Lcaron'] = 556; - t['onehalf'] = 834; - t['lessequal'] = 549; - t['ocircumflex'] = 556; - t['ntilde'] = 556; - t['Uhungarumlaut'] = 722; - t['Eacute'] = 667; - t['emacron'] = 556; - t['gbreve'] = 556; - t['onequarter'] = 834; - t['Scaron'] = 667; - t['Scommaaccent'] = 667; - t['Ohungarumlaut'] = 778; - t['degree'] = 400; - t['ograve'] = 556; - t['Ccaron'] = 722; - t['ugrave'] = 556; - t['radical'] = 453; - t['Dcaron'] = 722; - t['rcommaaccent'] = 333; - t['Ntilde'] = 722; - t['otilde'] = 556; - t['Rcommaaccent'] = 722; - t['Lcommaaccent'] = 556; - t['Atilde'] = 667; - t['Aogonek'] = 667; - t['Aring'] = 667; - t['Otilde'] = 778; - t['zdotaccent'] = 500; - t['Ecaron'] = 667; - t['Iogonek'] = 278; - t['kcommaaccent'] = 500; - t['minus'] = 584; - t['Icircumflex'] = 278; - t['ncaron'] = 556; - t['tcommaaccent'] = 278; - t['logicalnot'] = 584; - t['odieresis'] = 556; - t['udieresis'] = 556; - t['notequal'] = 549; - t['gcommaaccent'] = 556; - t['eth'] = 556; - t['zcaron'] = 500; - t['ncommaaccent'] = 556; - t['onesuperior'] = 333; - t['imacron'] = 278; - t['Euro'] = 556; - }); - t['Helvetica-Bold'] = (0, _util.getLookupTableFactory)(function (t) { - t['space'] = 278; - t['exclam'] = 333; - t['quotedbl'] = 474; - t['numbersign'] = 556; - t['dollar'] = 556; - t['percent'] = 889; - t['ampersand'] = 722; - t['quoteright'] = 278; - t['parenleft'] = 333; - t['parenright'] = 333; - t['asterisk'] = 389; - t['plus'] = 584; - t['comma'] = 278; - t['hyphen'] = 333; - t['period'] = 278; - t['slash'] = 278; - t['zero'] = 556; - t['one'] = 556; - t['two'] = 556; - t['three'] = 556; - t['four'] = 556; - t['five'] = 556; - t['six'] = 556; - t['seven'] = 556; - t['eight'] = 556; - t['nine'] = 556; - t['colon'] = 333; - t['semicolon'] = 333; - t['less'] = 584; - t['equal'] = 584; - t['greater'] = 584; - t['question'] = 611; - t['at'] = 975; - t['A'] = 722; - t['B'] = 722; - t['C'] = 722; - t['D'] = 722; - t['E'] = 667; - t['F'] = 611; - t['G'] = 778; - t['H'] = 722; - t['I'] = 278; - t['J'] = 556; - t['K'] = 722; - t['L'] = 611; - t['M'] = 833; - t['N'] = 722; - t['O'] = 778; - t['P'] = 667; - t['Q'] = 778; - t['R'] = 722; - t['S'] = 667; - t['T'] = 611; - t['U'] = 722; - t['V'] = 667; - t['W'] = 944; - t['X'] = 667; - t['Y'] = 667; - t['Z'] = 611; - t['bracketleft'] = 333; - t['backslash'] = 278; - t['bracketright'] = 333; - t['asciicircum'] = 584; - t['underscore'] = 556; - t['quoteleft'] = 278; - t['a'] = 556; - t['b'] = 611; - t['c'] = 556; - t['d'] = 611; - t['e'] = 556; - t['f'] = 333; - t['g'] = 611; - t['h'] = 611; - t['i'] = 278; - t['j'] = 278; - t['k'] = 556; - t['l'] = 278; - t['m'] = 889; - t['n'] = 611; - t['o'] = 611; - t['p'] = 611; - t['q'] = 611; - t['r'] = 389; - t['s'] = 556; - t['t'] = 333; - t['u'] = 611; - t['v'] = 556; - t['w'] = 778; - t['x'] = 556; - t['y'] = 556; - t['z'] = 500; - t['braceleft'] = 389; - t['bar'] = 280; - t['braceright'] = 389; - t['asciitilde'] = 584; - t['exclamdown'] = 333; - t['cent'] = 556; - t['sterling'] = 556; - t['fraction'] = 167; - t['yen'] = 556; - t['florin'] = 556; - t['section'] = 556; - t['currency'] = 556; - t['quotesingle'] = 238; - t['quotedblleft'] = 500; - t['guillemotleft'] = 556; - t['guilsinglleft'] = 333; - t['guilsinglright'] = 333; - t['fi'] = 611; - t['fl'] = 611; - t['endash'] = 556; - t['dagger'] = 556; - t['daggerdbl'] = 556; - t['periodcentered'] = 278; - t['paragraph'] = 556; - t['bullet'] = 350; - t['quotesinglbase'] = 278; - t['quotedblbase'] = 500; - t['quotedblright'] = 500; - t['guillemotright'] = 556; - t['ellipsis'] = 1000; - t['perthousand'] = 1000; - t['questiondown'] = 611; - t['grave'] = 333; - t['acute'] = 333; - t['circumflex'] = 333; - t['tilde'] = 333; - t['macron'] = 333; - t['breve'] = 333; - t['dotaccent'] = 333; - t['dieresis'] = 333; - t['ring'] = 333; - t['cedilla'] = 333; - t['hungarumlaut'] = 333; - t['ogonek'] = 333; - t['caron'] = 333; - t['emdash'] = 1000; - t['AE'] = 1000; - t['ordfeminine'] = 370; - t['Lslash'] = 611; - t['Oslash'] = 778; - t['OE'] = 1000; - t['ordmasculine'] = 365; - t['ae'] = 889; - t['dotlessi'] = 278; - t['lslash'] = 278; - t['oslash'] = 611; - t['oe'] = 944; - t['germandbls'] = 611; - t['Idieresis'] = 278; - t['eacute'] = 556; - t['abreve'] = 556; - t['uhungarumlaut'] = 611; - t['ecaron'] = 556; - t['Ydieresis'] = 667; - t['divide'] = 584; - t['Yacute'] = 667; - t['Acircumflex'] = 722; - t['aacute'] = 556; - t['Ucircumflex'] = 722; - t['yacute'] = 556; - t['scommaaccent'] = 556; - t['ecircumflex'] = 556; - t['Uring'] = 722; - t['Udieresis'] = 722; - t['aogonek'] = 556; - t['Uacute'] = 722; - t['uogonek'] = 611; - t['Edieresis'] = 667; - t['Dcroat'] = 722; - t['commaaccent'] = 250; - t['copyright'] = 737; - t['Emacron'] = 667; - t['ccaron'] = 556; - t['aring'] = 556; - t['Ncommaaccent'] = 722; - t['lacute'] = 278; - t['agrave'] = 556; - t['Tcommaaccent'] = 611; - t['Cacute'] = 722; - t['atilde'] = 556; - t['Edotaccent'] = 667; - t['scaron'] = 556; - t['scedilla'] = 556; - t['iacute'] = 278; - t['lozenge'] = 494; - t['Rcaron'] = 722; - t['Gcommaaccent'] = 778; - t['ucircumflex'] = 611; - t['acircumflex'] = 556; - t['Amacron'] = 722; - t['rcaron'] = 389; - t['ccedilla'] = 556; - t['Zdotaccent'] = 611; - t['Thorn'] = 667; - t['Omacron'] = 778; - t['Racute'] = 722; - t['Sacute'] = 667; - t['dcaron'] = 743; - t['Umacron'] = 722; - t['uring'] = 611; - t['threesuperior'] = 333; - t['Ograve'] = 778; - t['Agrave'] = 722; - t['Abreve'] = 722; - t['multiply'] = 584; - t['uacute'] = 611; - t['Tcaron'] = 611; - t['partialdiff'] = 494; - t['ydieresis'] = 556; - t['Nacute'] = 722; - t['icircumflex'] = 278; - t['Ecircumflex'] = 667; - t['adieresis'] = 556; - t['edieresis'] = 556; - t['cacute'] = 556; - t['nacute'] = 611; - t['umacron'] = 611; - t['Ncaron'] = 722; - t['Iacute'] = 278; - t['plusminus'] = 584; - t['brokenbar'] = 280; - t['registered'] = 737; - t['Gbreve'] = 778; - t['Idotaccent'] = 278; - t['summation'] = 600; - t['Egrave'] = 667; - t['racute'] = 389; - t['omacron'] = 611; - t['Zacute'] = 611; - t['Zcaron'] = 611; - t['greaterequal'] = 549; - t['Eth'] = 722; - t['Ccedilla'] = 722; - t['lcommaaccent'] = 278; - t['tcaron'] = 389; - t['eogonek'] = 556; - t['Uogonek'] = 722; - t['Aacute'] = 722; - t['Adieresis'] = 722; - t['egrave'] = 556; - t['zacute'] = 500; - t['iogonek'] = 278; - t['Oacute'] = 778; - t['oacute'] = 611; - t['amacron'] = 556; - t['sacute'] = 556; - t['idieresis'] = 278; - t['Ocircumflex'] = 778; - t['Ugrave'] = 722; - t['Delta'] = 612; - t['thorn'] = 611; - t['twosuperior'] = 333; - t['Odieresis'] = 778; - t['mu'] = 611; - t['igrave'] = 278; - t['ohungarumlaut'] = 611; - t['Eogonek'] = 667; - t['dcroat'] = 611; - t['threequarters'] = 834; - t['Scedilla'] = 667; - t['lcaron'] = 400; - t['Kcommaaccent'] = 722; - t['Lacute'] = 611; - t['trademark'] = 1000; - t['edotaccent'] = 556; - t['Igrave'] = 278; - t['Imacron'] = 278; - t['Lcaron'] = 611; - t['onehalf'] = 834; - t['lessequal'] = 549; - t['ocircumflex'] = 611; - t['ntilde'] = 611; - t['Uhungarumlaut'] = 722; - t['Eacute'] = 667; - t['emacron'] = 556; - t['gbreve'] = 611; - t['onequarter'] = 834; - t['Scaron'] = 667; - t['Scommaaccent'] = 667; - t['Ohungarumlaut'] = 778; - t['degree'] = 400; - t['ograve'] = 611; - t['Ccaron'] = 722; - t['ugrave'] = 611; - t['radical'] = 549; - t['Dcaron'] = 722; - t['rcommaaccent'] = 389; - t['Ntilde'] = 722; - t['otilde'] = 611; - t['Rcommaaccent'] = 722; - t['Lcommaaccent'] = 611; - t['Atilde'] = 722; - t['Aogonek'] = 722; - t['Aring'] = 722; - t['Otilde'] = 778; - t['zdotaccent'] = 500; - t['Ecaron'] = 667; - t['Iogonek'] = 278; - t['kcommaaccent'] = 556; - t['minus'] = 584; - t['Icircumflex'] = 278; - t['ncaron'] = 611; - t['tcommaaccent'] = 333; - t['logicalnot'] = 584; - t['odieresis'] = 611; - t['udieresis'] = 611; - t['notequal'] = 549; - t['gcommaaccent'] = 611; - t['eth'] = 611; - t['zcaron'] = 500; - t['ncommaaccent'] = 611; - t['onesuperior'] = 333; - t['imacron'] = 278; - t['Euro'] = 556; - }); - t['Helvetica-BoldOblique'] = (0, _util.getLookupTableFactory)(function (t) { - t['space'] = 278; - t['exclam'] = 333; - t['quotedbl'] = 474; - t['numbersign'] = 556; - t['dollar'] = 556; - t['percent'] = 889; - t['ampersand'] = 722; - t['quoteright'] = 278; - t['parenleft'] = 333; - t['parenright'] = 333; - t['asterisk'] = 389; - t['plus'] = 584; - t['comma'] = 278; - t['hyphen'] = 333; - t['period'] = 278; - t['slash'] = 278; - t['zero'] = 556; - t['one'] = 556; - t['two'] = 556; - t['three'] = 556; - t['four'] = 556; - t['five'] = 556; - t['six'] = 556; - t['seven'] = 556; - t['eight'] = 556; - t['nine'] = 556; - t['colon'] = 333; - t['semicolon'] = 333; - t['less'] = 584; - t['equal'] = 584; - t['greater'] = 584; - t['question'] = 611; - t['at'] = 975; - t['A'] = 722; - t['B'] = 722; - t['C'] = 722; - t['D'] = 722; - t['E'] = 667; - t['F'] = 611; - t['G'] = 778; - t['H'] = 722; - t['I'] = 278; - t['J'] = 556; - t['K'] = 722; - t['L'] = 611; - t['M'] = 833; - t['N'] = 722; - t['O'] = 778; - t['P'] = 667; - t['Q'] = 778; - t['R'] = 722; - t['S'] = 667; - t['T'] = 611; - t['U'] = 722; - t['V'] = 667; - t['W'] = 944; - t['X'] = 667; - t['Y'] = 667; - t['Z'] = 611; - t['bracketleft'] = 333; - t['backslash'] = 278; - t['bracketright'] = 333; - t['asciicircum'] = 584; - t['underscore'] = 556; - t['quoteleft'] = 278; - t['a'] = 556; - t['b'] = 611; - t['c'] = 556; - t['d'] = 611; - t['e'] = 556; - t['f'] = 333; - t['g'] = 611; - t['h'] = 611; - t['i'] = 278; - t['j'] = 278; - t['k'] = 556; - t['l'] = 278; - t['m'] = 889; - t['n'] = 611; - t['o'] = 611; - t['p'] = 611; - t['q'] = 611; - t['r'] = 389; - t['s'] = 556; - t['t'] = 333; - t['u'] = 611; - t['v'] = 556; - t['w'] = 778; - t['x'] = 556; - t['y'] = 556; - t['z'] = 500; - t['braceleft'] = 389; - t['bar'] = 280; - t['braceright'] = 389; - t['asciitilde'] = 584; - t['exclamdown'] = 333; - t['cent'] = 556; - t['sterling'] = 556; - t['fraction'] = 167; - t['yen'] = 556; - t['florin'] = 556; - t['section'] = 556; - t['currency'] = 556; - t['quotesingle'] = 238; - t['quotedblleft'] = 500; - t['guillemotleft'] = 556; - t['guilsinglleft'] = 333; - t['guilsinglright'] = 333; - t['fi'] = 611; - t['fl'] = 611; - t['endash'] = 556; - t['dagger'] = 556; - t['daggerdbl'] = 556; - t['periodcentered'] = 278; - t['paragraph'] = 556; - t['bullet'] = 350; - t['quotesinglbase'] = 278; - t['quotedblbase'] = 500; - t['quotedblright'] = 500; - t['guillemotright'] = 556; - t['ellipsis'] = 1000; - t['perthousand'] = 1000; - t['questiondown'] = 611; - t['grave'] = 333; - t['acute'] = 333; - t['circumflex'] = 333; - t['tilde'] = 333; - t['macron'] = 333; - t['breve'] = 333; - t['dotaccent'] = 333; - t['dieresis'] = 333; - t['ring'] = 333; - t['cedilla'] = 333; - t['hungarumlaut'] = 333; - t['ogonek'] = 333; - t['caron'] = 333; - t['emdash'] = 1000; - t['AE'] = 1000; - t['ordfeminine'] = 370; - t['Lslash'] = 611; - t['Oslash'] = 778; - t['OE'] = 1000; - t['ordmasculine'] = 365; - t['ae'] = 889; - t['dotlessi'] = 278; - t['lslash'] = 278; - t['oslash'] = 611; - t['oe'] = 944; - t['germandbls'] = 611; - t['Idieresis'] = 278; - t['eacute'] = 556; - t['abreve'] = 556; - t['uhungarumlaut'] = 611; - t['ecaron'] = 556; - t['Ydieresis'] = 667; - t['divide'] = 584; - t['Yacute'] = 667; - t['Acircumflex'] = 722; - t['aacute'] = 556; - t['Ucircumflex'] = 722; - t['yacute'] = 556; - t['scommaaccent'] = 556; - t['ecircumflex'] = 556; - t['Uring'] = 722; - t['Udieresis'] = 722; - t['aogonek'] = 556; - t['Uacute'] = 722; - t['uogonek'] = 611; - t['Edieresis'] = 667; - t['Dcroat'] = 722; - t['commaaccent'] = 250; - t['copyright'] = 737; - t['Emacron'] = 667; - t['ccaron'] = 556; - t['aring'] = 556; - t['Ncommaaccent'] = 722; - t['lacute'] = 278; - t['agrave'] = 556; - t['Tcommaaccent'] = 611; - t['Cacute'] = 722; - t['atilde'] = 556; - t['Edotaccent'] = 667; - t['scaron'] = 556; - t['scedilla'] = 556; - t['iacute'] = 278; - t['lozenge'] = 494; - t['Rcaron'] = 722; - t['Gcommaaccent'] = 778; - t['ucircumflex'] = 611; - t['acircumflex'] = 556; - t['Amacron'] = 722; - t['rcaron'] = 389; - t['ccedilla'] = 556; - t['Zdotaccent'] = 611; - t['Thorn'] = 667; - t['Omacron'] = 778; - t['Racute'] = 722; - t['Sacute'] = 667; - t['dcaron'] = 743; - t['Umacron'] = 722; - t['uring'] = 611; - t['threesuperior'] = 333; - t['Ograve'] = 778; - t['Agrave'] = 722; - t['Abreve'] = 722; - t['multiply'] = 584; - t['uacute'] = 611; - t['Tcaron'] = 611; - t['partialdiff'] = 494; - t['ydieresis'] = 556; - t['Nacute'] = 722; - t['icircumflex'] = 278; - t['Ecircumflex'] = 667; - t['adieresis'] = 556; - t['edieresis'] = 556; - t['cacute'] = 556; - t['nacute'] = 611; - t['umacron'] = 611; - t['Ncaron'] = 722; - t['Iacute'] = 278; - t['plusminus'] = 584; - t['brokenbar'] = 280; - t['registered'] = 737; - t['Gbreve'] = 778; - t['Idotaccent'] = 278; - t['summation'] = 600; - t['Egrave'] = 667; - t['racute'] = 389; - t['omacron'] = 611; - t['Zacute'] = 611; - t['Zcaron'] = 611; - t['greaterequal'] = 549; - t['Eth'] = 722; - t['Ccedilla'] = 722; - t['lcommaaccent'] = 278; - t['tcaron'] = 389; - t['eogonek'] = 556; - t['Uogonek'] = 722; - t['Aacute'] = 722; - t['Adieresis'] = 722; - t['egrave'] = 556; - t['zacute'] = 500; - t['iogonek'] = 278; - t['Oacute'] = 778; - t['oacute'] = 611; - t['amacron'] = 556; - t['sacute'] = 556; - t['idieresis'] = 278; - t['Ocircumflex'] = 778; - t['Ugrave'] = 722; - t['Delta'] = 612; - t['thorn'] = 611; - t['twosuperior'] = 333; - t['Odieresis'] = 778; - t['mu'] = 611; - t['igrave'] = 278; - t['ohungarumlaut'] = 611; - t['Eogonek'] = 667; - t['dcroat'] = 611; - t['threequarters'] = 834; - t['Scedilla'] = 667; - t['lcaron'] = 400; - t['Kcommaaccent'] = 722; - t['Lacute'] = 611; - t['trademark'] = 1000; - t['edotaccent'] = 556; - t['Igrave'] = 278; - t['Imacron'] = 278; - t['Lcaron'] = 611; - t['onehalf'] = 834; - t['lessequal'] = 549; - t['ocircumflex'] = 611; - t['ntilde'] = 611; - t['Uhungarumlaut'] = 722; - t['Eacute'] = 667; - t['emacron'] = 556; - t['gbreve'] = 611; - t['onequarter'] = 834; - t['Scaron'] = 667; - t['Scommaaccent'] = 667; - t['Ohungarumlaut'] = 778; - t['degree'] = 400; - t['ograve'] = 611; - t['Ccaron'] = 722; - t['ugrave'] = 611; - t['radical'] = 549; - t['Dcaron'] = 722; - t['rcommaaccent'] = 389; - t['Ntilde'] = 722; - t['otilde'] = 611; - t['Rcommaaccent'] = 722; - t['Lcommaaccent'] = 611; - t['Atilde'] = 722; - t['Aogonek'] = 722; - t['Aring'] = 722; - t['Otilde'] = 778; - t['zdotaccent'] = 500; - t['Ecaron'] = 667; - t['Iogonek'] = 278; - t['kcommaaccent'] = 556; - t['minus'] = 584; - t['Icircumflex'] = 278; - t['ncaron'] = 611; - t['tcommaaccent'] = 333; - t['logicalnot'] = 584; - t['odieresis'] = 611; - t['udieresis'] = 611; - t['notequal'] = 549; - t['gcommaaccent'] = 611; - t['eth'] = 611; - t['zcaron'] = 500; - t['ncommaaccent'] = 611; - t['onesuperior'] = 333; - t['imacron'] = 278; - t['Euro'] = 556; - }); - t['Helvetica-Oblique'] = (0, _util.getLookupTableFactory)(function (t) { - t['space'] = 278; - t['exclam'] = 278; - t['quotedbl'] = 355; - t['numbersign'] = 556; - t['dollar'] = 556; - t['percent'] = 889; - t['ampersand'] = 667; - t['quoteright'] = 222; - t['parenleft'] = 333; - t['parenright'] = 333; - t['asterisk'] = 389; - t['plus'] = 584; - t['comma'] = 278; - t['hyphen'] = 333; - t['period'] = 278; - t['slash'] = 278; - t['zero'] = 556; - t['one'] = 556; - t['two'] = 556; - t['three'] = 556; - t['four'] = 556; - t['five'] = 556; - t['six'] = 556; - t['seven'] = 556; - t['eight'] = 556; - t['nine'] = 556; - t['colon'] = 278; - t['semicolon'] = 278; - t['less'] = 584; - t['equal'] = 584; - t['greater'] = 584; - t['question'] = 556; - t['at'] = 1015; - t['A'] = 667; - t['B'] = 667; - t['C'] = 722; - t['D'] = 722; - t['E'] = 667; - t['F'] = 611; - t['G'] = 778; - t['H'] = 722; - t['I'] = 278; - t['J'] = 500; - t['K'] = 667; - t['L'] = 556; - t['M'] = 833; - t['N'] = 722; - t['O'] = 778; - t['P'] = 667; - t['Q'] = 778; - t['R'] = 722; - t['S'] = 667; - t['T'] = 611; - t['U'] = 722; - t['V'] = 667; - t['W'] = 944; - t['X'] = 667; - t['Y'] = 667; - t['Z'] = 611; - t['bracketleft'] = 278; - t['backslash'] = 278; - t['bracketright'] = 278; - t['asciicircum'] = 469; - t['underscore'] = 556; - t['quoteleft'] = 222; - t['a'] = 556; - t['b'] = 556; - t['c'] = 500; - t['d'] = 556; - t['e'] = 556; - t['f'] = 278; - t['g'] = 556; - t['h'] = 556; - t['i'] = 222; - t['j'] = 222; - t['k'] = 500; - t['l'] = 222; - t['m'] = 833; - t['n'] = 556; - t['o'] = 556; - t['p'] = 556; - t['q'] = 556; - t['r'] = 333; - t['s'] = 500; - t['t'] = 278; - t['u'] = 556; - t['v'] = 500; - t['w'] = 722; - t['x'] = 500; - t['y'] = 500; - t['z'] = 500; - t['braceleft'] = 334; - t['bar'] = 260; - t['braceright'] = 334; - t['asciitilde'] = 584; - t['exclamdown'] = 333; - t['cent'] = 556; - t['sterling'] = 556; - t['fraction'] = 167; - t['yen'] = 556; - t['florin'] = 556; - t['section'] = 556; - t['currency'] = 556; - t['quotesingle'] = 191; - t['quotedblleft'] = 333; - t['guillemotleft'] = 556; - t['guilsinglleft'] = 333; - t['guilsinglright'] = 333; - t['fi'] = 500; - t['fl'] = 500; - t['endash'] = 556; - t['dagger'] = 556; - t['daggerdbl'] = 556; - t['periodcentered'] = 278; - t['paragraph'] = 537; - t['bullet'] = 350; - t['quotesinglbase'] = 222; - t['quotedblbase'] = 333; - t['quotedblright'] = 333; - t['guillemotright'] = 556; - t['ellipsis'] = 1000; - t['perthousand'] = 1000; - t['questiondown'] = 611; - t['grave'] = 333; - t['acute'] = 333; - t['circumflex'] = 333; - t['tilde'] = 333; - t['macron'] = 333; - t['breve'] = 333; - t['dotaccent'] = 333; - t['dieresis'] = 333; - t['ring'] = 333; - t['cedilla'] = 333; - t['hungarumlaut'] = 333; - t['ogonek'] = 333; - t['caron'] = 333; - t['emdash'] = 1000; - t['AE'] = 1000; - t['ordfeminine'] = 370; - t['Lslash'] = 556; - t['Oslash'] = 778; - t['OE'] = 1000; - t['ordmasculine'] = 365; - t['ae'] = 889; - t['dotlessi'] = 278; - t['lslash'] = 222; - t['oslash'] = 611; - t['oe'] = 944; - t['germandbls'] = 611; - t['Idieresis'] = 278; - t['eacute'] = 556; - t['abreve'] = 556; - t['uhungarumlaut'] = 556; - t['ecaron'] = 556; - t['Ydieresis'] = 667; - t['divide'] = 584; - t['Yacute'] = 667; - t['Acircumflex'] = 667; - t['aacute'] = 556; - t['Ucircumflex'] = 722; - t['yacute'] = 500; - t['scommaaccent'] = 500; - t['ecircumflex'] = 556; - t['Uring'] = 722; - t['Udieresis'] = 722; - t['aogonek'] = 556; - t['Uacute'] = 722; - t['uogonek'] = 556; - t['Edieresis'] = 667; - t['Dcroat'] = 722; - t['commaaccent'] = 250; - t['copyright'] = 737; - t['Emacron'] = 667; - t['ccaron'] = 500; - t['aring'] = 556; - t['Ncommaaccent'] = 722; - t['lacute'] = 222; - t['agrave'] = 556; - t['Tcommaaccent'] = 611; - t['Cacute'] = 722; - t['atilde'] = 556; - t['Edotaccent'] = 667; - t['scaron'] = 500; - t['scedilla'] = 500; - t['iacute'] = 278; - t['lozenge'] = 471; - t['Rcaron'] = 722; - t['Gcommaaccent'] = 778; - t['ucircumflex'] = 556; - t['acircumflex'] = 556; - t['Amacron'] = 667; - t['rcaron'] = 333; - t['ccedilla'] = 500; - t['Zdotaccent'] = 611; - t['Thorn'] = 667; - t['Omacron'] = 778; - t['Racute'] = 722; - t['Sacute'] = 667; - t['dcaron'] = 643; - t['Umacron'] = 722; - t['uring'] = 556; - t['threesuperior'] = 333; - t['Ograve'] = 778; - t['Agrave'] = 667; - t['Abreve'] = 667; - t['multiply'] = 584; - t['uacute'] = 556; - t['Tcaron'] = 611; - t['partialdiff'] = 476; - t['ydieresis'] = 500; - t['Nacute'] = 722; - t['icircumflex'] = 278; - t['Ecircumflex'] = 667; - t['adieresis'] = 556; - t['edieresis'] = 556; - t['cacute'] = 500; - t['nacute'] = 556; - t['umacron'] = 556; - t['Ncaron'] = 722; - t['Iacute'] = 278; - t['plusminus'] = 584; - t['brokenbar'] = 260; - t['registered'] = 737; - t['Gbreve'] = 778; - t['Idotaccent'] = 278; - t['summation'] = 600; - t['Egrave'] = 667; - t['racute'] = 333; - t['omacron'] = 556; - t['Zacute'] = 611; - t['Zcaron'] = 611; - t['greaterequal'] = 549; - t['Eth'] = 722; - t['Ccedilla'] = 722; - t['lcommaaccent'] = 222; - t['tcaron'] = 317; - t['eogonek'] = 556; - t['Uogonek'] = 722; - t['Aacute'] = 667; - t['Adieresis'] = 667; - t['egrave'] = 556; - t['zacute'] = 500; - t['iogonek'] = 222; - t['Oacute'] = 778; - t['oacute'] = 556; - t['amacron'] = 556; - t['sacute'] = 500; - t['idieresis'] = 278; - t['Ocircumflex'] = 778; - t['Ugrave'] = 722; - t['Delta'] = 612; - t['thorn'] = 556; - t['twosuperior'] = 333; - t['Odieresis'] = 778; - t['mu'] = 556; - t['igrave'] = 278; - t['ohungarumlaut'] = 556; - t['Eogonek'] = 667; - t['dcroat'] = 556; - t['threequarters'] = 834; - t['Scedilla'] = 667; - t['lcaron'] = 299; - t['Kcommaaccent'] = 667; - t['Lacute'] = 556; - t['trademark'] = 1000; - t['edotaccent'] = 556; - t['Igrave'] = 278; - t['Imacron'] = 278; - t['Lcaron'] = 556; - t['onehalf'] = 834; - t['lessequal'] = 549; - t['ocircumflex'] = 556; - t['ntilde'] = 556; - t['Uhungarumlaut'] = 722; - t['Eacute'] = 667; - t['emacron'] = 556; - t['gbreve'] = 556; - t['onequarter'] = 834; - t['Scaron'] = 667; - t['Scommaaccent'] = 667; - t['Ohungarumlaut'] = 778; - t['degree'] = 400; - t['ograve'] = 556; - t['Ccaron'] = 722; - t['ugrave'] = 556; - t['radical'] = 453; - t['Dcaron'] = 722; - t['rcommaaccent'] = 333; - t['Ntilde'] = 722; - t['otilde'] = 556; - t['Rcommaaccent'] = 722; - t['Lcommaaccent'] = 556; - t['Atilde'] = 667; - t['Aogonek'] = 667; - t['Aring'] = 667; - t['Otilde'] = 778; - t['zdotaccent'] = 500; - t['Ecaron'] = 667; - t['Iogonek'] = 278; - t['kcommaaccent'] = 500; - t['minus'] = 584; - t['Icircumflex'] = 278; - t['ncaron'] = 556; - t['tcommaaccent'] = 278; - t['logicalnot'] = 584; - t['odieresis'] = 556; - t['udieresis'] = 556; - t['notequal'] = 549; - t['gcommaaccent'] = 556; - t['eth'] = 556; - t['zcaron'] = 500; - t['ncommaaccent'] = 556; - t['onesuperior'] = 333; - t['imacron'] = 278; - t['Euro'] = 556; - }); - t['Symbol'] = (0, _util.getLookupTableFactory)(function (t) { - t['space'] = 250; - t['exclam'] = 333; - t['universal'] = 713; - t['numbersign'] = 500; - t['existential'] = 549; - t['percent'] = 833; - t['ampersand'] = 778; - t['suchthat'] = 439; - t['parenleft'] = 333; - t['parenright'] = 333; - t['asteriskmath'] = 500; - t['plus'] = 549; - t['comma'] = 250; - t['minus'] = 549; - t['period'] = 250; - t['slash'] = 278; - t['zero'] = 500; - t['one'] = 500; - t['two'] = 500; - t['three'] = 500; - t['four'] = 500; - t['five'] = 500; - t['six'] = 500; - t['seven'] = 500; - t['eight'] = 500; - t['nine'] = 500; - t['colon'] = 278; - t['semicolon'] = 278; - t['less'] = 549; - t['equal'] = 549; - t['greater'] = 549; - t['question'] = 444; - t['congruent'] = 549; - t['Alpha'] = 722; - t['Beta'] = 667; - t['Chi'] = 722; - t['Delta'] = 612; - t['Epsilon'] = 611; - t['Phi'] = 763; - t['Gamma'] = 603; - t['Eta'] = 722; - t['Iota'] = 333; - t['theta1'] = 631; - t['Kappa'] = 722; - t['Lambda'] = 686; - t['Mu'] = 889; - t['Nu'] = 722; - t['Omicron'] = 722; - t['Pi'] = 768; - t['Theta'] = 741; - t['Rho'] = 556; - t['Sigma'] = 592; - t['Tau'] = 611; - t['Upsilon'] = 690; - t['sigma1'] = 439; - t['Omega'] = 768; - t['Xi'] = 645; - t['Psi'] = 795; - t['Zeta'] = 611; - t['bracketleft'] = 333; - t['therefore'] = 863; - t['bracketright'] = 333; - t['perpendicular'] = 658; - t['underscore'] = 500; - t['radicalex'] = 500; - t['alpha'] = 631; - t['beta'] = 549; - t['chi'] = 549; - t['delta'] = 494; - t['epsilon'] = 439; - t['phi'] = 521; - t['gamma'] = 411; - t['eta'] = 603; - t['iota'] = 329; - t['phi1'] = 603; - t['kappa'] = 549; - t['lambda'] = 549; - t['mu'] = 576; - t['nu'] = 521; - t['omicron'] = 549; - t['pi'] = 549; - t['theta'] = 521; - t['rho'] = 549; - t['sigma'] = 603; - t['tau'] = 439; - t['upsilon'] = 576; - t['omega1'] = 713; - t['omega'] = 686; - t['xi'] = 493; - t['psi'] = 686; - t['zeta'] = 494; - t['braceleft'] = 480; - t['bar'] = 200; - t['braceright'] = 480; - t['similar'] = 549; - t['Euro'] = 750; - t['Upsilon1'] = 620; - t['minute'] = 247; - t['lessequal'] = 549; - t['fraction'] = 167; - t['infinity'] = 713; - t['florin'] = 500; - t['club'] = 753; - t['diamond'] = 753; - t['heart'] = 753; - t['spade'] = 753; - t['arrowboth'] = 1042; - t['arrowleft'] = 987; - t['arrowup'] = 603; - t['arrowright'] = 987; - t['arrowdown'] = 603; - t['degree'] = 400; - t['plusminus'] = 549; - t['second'] = 411; - t['greaterequal'] = 549; - t['multiply'] = 549; - t['proportional'] = 713; - t['partialdiff'] = 494; - t['bullet'] = 460; - t['divide'] = 549; - t['notequal'] = 549; - t['equivalence'] = 549; - t['approxequal'] = 549; - t['ellipsis'] = 1000; - t['arrowvertex'] = 603; - t['arrowhorizex'] = 1000; - t['carriagereturn'] = 658; - t['aleph'] = 823; - t['Ifraktur'] = 686; - t['Rfraktur'] = 795; - t['weierstrass'] = 987; - t['circlemultiply'] = 768; - t['circleplus'] = 768; - t['emptyset'] = 823; - t['intersection'] = 768; - t['union'] = 768; - t['propersuperset'] = 713; - t['reflexsuperset'] = 713; - t['notsubset'] = 713; - t['propersubset'] = 713; - t['reflexsubset'] = 713; - t['element'] = 713; - t['notelement'] = 713; - t['angle'] = 768; - t['gradient'] = 713; - t['registerserif'] = 790; - t['copyrightserif'] = 790; - t['trademarkserif'] = 890; - t['product'] = 823; - t['radical'] = 549; - t['dotmath'] = 250; - t['logicalnot'] = 713; - t['logicaland'] = 603; - t['logicalor'] = 603; - t['arrowdblboth'] = 1042; - t['arrowdblleft'] = 987; - t['arrowdblup'] = 603; - t['arrowdblright'] = 987; - t['arrowdbldown'] = 603; - t['lozenge'] = 494; - t['angleleft'] = 329; - t['registersans'] = 790; - t['copyrightsans'] = 790; - t['trademarksans'] = 786; - t['summation'] = 713; - t['parenlefttp'] = 384; - t['parenleftex'] = 384; - t['parenleftbt'] = 384; - t['bracketlefttp'] = 384; - t['bracketleftex'] = 384; - t['bracketleftbt'] = 384; - t['bracelefttp'] = 494; - t['braceleftmid'] = 494; - t['braceleftbt'] = 494; - t['braceex'] = 494; - t['angleright'] = 329; - t['integral'] = 274; - t['integraltp'] = 686; - t['integralex'] = 686; - t['integralbt'] = 686; - t['parenrighttp'] = 384; - t['parenrightex'] = 384; - t['parenrightbt'] = 384; - t['bracketrighttp'] = 384; - t['bracketrightex'] = 384; - t['bracketrightbt'] = 384; - t['bracerighttp'] = 494; - t['bracerightmid'] = 494; - t['bracerightbt'] = 494; - t['apple'] = 790; - }); - t['Times-Roman'] = (0, _util.getLookupTableFactory)(function (t) { - t['space'] = 250; - t['exclam'] = 333; - t['quotedbl'] = 408; - t['numbersign'] = 500; - t['dollar'] = 500; - t['percent'] = 833; - t['ampersand'] = 778; - t['quoteright'] = 333; - t['parenleft'] = 333; - t['parenright'] = 333; - t['asterisk'] = 500; - t['plus'] = 564; - t['comma'] = 250; - t['hyphen'] = 333; - t['period'] = 250; - t['slash'] = 278; - t['zero'] = 500; - t['one'] = 500; - t['two'] = 500; - t['three'] = 500; - t['four'] = 500; - t['five'] = 500; - t['six'] = 500; - t['seven'] = 500; - t['eight'] = 500; - t['nine'] = 500; - t['colon'] = 278; - t['semicolon'] = 278; - t['less'] = 564; - t['equal'] = 564; - t['greater'] = 564; - t['question'] = 444; - t['at'] = 921; - t['A'] = 722; - t['B'] = 667; - t['C'] = 667; - t['D'] = 722; - t['E'] = 611; - t['F'] = 556; - t['G'] = 722; - t['H'] = 722; - t['I'] = 333; - t['J'] = 389; - t['K'] = 722; - t['L'] = 611; - t['M'] = 889; - t['N'] = 722; - t['O'] = 722; - t['P'] = 556; - t['Q'] = 722; - t['R'] = 667; - t['S'] = 556; - t['T'] = 611; - t['U'] = 722; - t['V'] = 722; - t['W'] = 944; - t['X'] = 722; - t['Y'] = 722; - t['Z'] = 611; - t['bracketleft'] = 333; - t['backslash'] = 278; - t['bracketright'] = 333; - t['asciicircum'] = 469; - t['underscore'] = 500; - t['quoteleft'] = 333; - t['a'] = 444; - t['b'] = 500; - t['c'] = 444; - t['d'] = 500; - t['e'] = 444; - t['f'] = 333; - t['g'] = 500; - t['h'] = 500; - t['i'] = 278; - t['j'] = 278; - t['k'] = 500; - t['l'] = 278; - t['m'] = 778; - t['n'] = 500; - t['o'] = 500; - t['p'] = 500; - t['q'] = 500; - t['r'] = 333; - t['s'] = 389; - t['t'] = 278; - t['u'] = 500; - t['v'] = 500; - t['w'] = 722; - t['x'] = 500; - t['y'] = 500; - t['z'] = 444; - t['braceleft'] = 480; - t['bar'] = 200; - t['braceright'] = 480; - t['asciitilde'] = 541; - t['exclamdown'] = 333; - t['cent'] = 500; - t['sterling'] = 500; - t['fraction'] = 167; - t['yen'] = 500; - t['florin'] = 500; - t['section'] = 500; - t['currency'] = 500; - t['quotesingle'] = 180; - t['quotedblleft'] = 444; - t['guillemotleft'] = 500; - t['guilsinglleft'] = 333; - t['guilsinglright'] = 333; - t['fi'] = 556; - t['fl'] = 556; - t['endash'] = 500; - t['dagger'] = 500; - t['daggerdbl'] = 500; - t['periodcentered'] = 250; - t['paragraph'] = 453; - t['bullet'] = 350; - t['quotesinglbase'] = 333; - t['quotedblbase'] = 444; - t['quotedblright'] = 444; - t['guillemotright'] = 500; - t['ellipsis'] = 1000; - t['perthousand'] = 1000; - t['questiondown'] = 444; - t['grave'] = 333; - t['acute'] = 333; - t['circumflex'] = 333; - t['tilde'] = 333; - t['macron'] = 333; - t['breve'] = 333; - t['dotaccent'] = 333; - t['dieresis'] = 333; - t['ring'] = 333; - t['cedilla'] = 333; - t['hungarumlaut'] = 333; - t['ogonek'] = 333; - t['caron'] = 333; - t['emdash'] = 1000; - t['AE'] = 889; - t['ordfeminine'] = 276; - t['Lslash'] = 611; - t['Oslash'] = 722; - t['OE'] = 889; - t['ordmasculine'] = 310; - t['ae'] = 667; - t['dotlessi'] = 278; - t['lslash'] = 278; - t['oslash'] = 500; - t['oe'] = 722; - t['germandbls'] = 500; - t['Idieresis'] = 333; - t['eacute'] = 444; - t['abreve'] = 444; - t['uhungarumlaut'] = 500; - t['ecaron'] = 444; - t['Ydieresis'] = 722; - t['divide'] = 564; - t['Yacute'] = 722; - t['Acircumflex'] = 722; - t['aacute'] = 444; - t['Ucircumflex'] = 722; - t['yacute'] = 500; - t['scommaaccent'] = 389; - t['ecircumflex'] = 444; - t['Uring'] = 722; - t['Udieresis'] = 722; - t['aogonek'] = 444; - t['Uacute'] = 722; - t['uogonek'] = 500; - t['Edieresis'] = 611; - t['Dcroat'] = 722; - t['commaaccent'] = 250; - t['copyright'] = 760; - t['Emacron'] = 611; - t['ccaron'] = 444; - t['aring'] = 444; - t['Ncommaaccent'] = 722; - t['lacute'] = 278; - t['agrave'] = 444; - t['Tcommaaccent'] = 611; - t['Cacute'] = 667; - t['atilde'] = 444; - t['Edotaccent'] = 611; - t['scaron'] = 389; - t['scedilla'] = 389; - t['iacute'] = 278; - t['lozenge'] = 471; - t['Rcaron'] = 667; - t['Gcommaaccent'] = 722; - t['ucircumflex'] = 500; - t['acircumflex'] = 444; - t['Amacron'] = 722; - t['rcaron'] = 333; - t['ccedilla'] = 444; - t['Zdotaccent'] = 611; - t['Thorn'] = 556; - t['Omacron'] = 722; - t['Racute'] = 667; - t['Sacute'] = 556; - t['dcaron'] = 588; - t['Umacron'] = 722; - t['uring'] = 500; - t['threesuperior'] = 300; - t['Ograve'] = 722; - t['Agrave'] = 722; - t['Abreve'] = 722; - t['multiply'] = 564; - t['uacute'] = 500; - t['Tcaron'] = 611; - t['partialdiff'] = 476; - t['ydieresis'] = 500; - t['Nacute'] = 722; - t['icircumflex'] = 278; - t['Ecircumflex'] = 611; - t['adieresis'] = 444; - t['edieresis'] = 444; - t['cacute'] = 444; - t['nacute'] = 500; - t['umacron'] = 500; - t['Ncaron'] = 722; - t['Iacute'] = 333; - t['plusminus'] = 564; - t['brokenbar'] = 200; - t['registered'] = 760; - t['Gbreve'] = 722; - t['Idotaccent'] = 333; - t['summation'] = 600; - t['Egrave'] = 611; - t['racute'] = 333; - t['omacron'] = 500; - t['Zacute'] = 611; - t['Zcaron'] = 611; - t['greaterequal'] = 549; - t['Eth'] = 722; - t['Ccedilla'] = 667; - t['lcommaaccent'] = 278; - t['tcaron'] = 326; - t['eogonek'] = 444; - t['Uogonek'] = 722; - t['Aacute'] = 722; - t['Adieresis'] = 722; - t['egrave'] = 444; - t['zacute'] = 444; - t['iogonek'] = 278; - t['Oacute'] = 722; - t['oacute'] = 500; - t['amacron'] = 444; - t['sacute'] = 389; - t['idieresis'] = 278; - t['Ocircumflex'] = 722; - t['Ugrave'] = 722; - t['Delta'] = 612; - t['thorn'] = 500; - t['twosuperior'] = 300; - t['Odieresis'] = 722; - t['mu'] = 500; - t['igrave'] = 278; - t['ohungarumlaut'] = 500; - t['Eogonek'] = 611; - t['dcroat'] = 500; - t['threequarters'] = 750; - t['Scedilla'] = 556; - t['lcaron'] = 344; - t['Kcommaaccent'] = 722; - t['Lacute'] = 611; - t['trademark'] = 980; - t['edotaccent'] = 444; - t['Igrave'] = 333; - t['Imacron'] = 333; - t['Lcaron'] = 611; - t['onehalf'] = 750; - t['lessequal'] = 549; - t['ocircumflex'] = 500; - t['ntilde'] = 500; - t['Uhungarumlaut'] = 722; - t['Eacute'] = 611; - t['emacron'] = 444; - t['gbreve'] = 500; - t['onequarter'] = 750; - t['Scaron'] = 556; - t['Scommaaccent'] = 556; - t['Ohungarumlaut'] = 722; - t['degree'] = 400; - t['ograve'] = 500; - t['Ccaron'] = 667; - t['ugrave'] = 500; - t['radical'] = 453; - t['Dcaron'] = 722; - t['rcommaaccent'] = 333; - t['Ntilde'] = 722; - t['otilde'] = 500; - t['Rcommaaccent'] = 667; - t['Lcommaaccent'] = 611; - t['Atilde'] = 722; - t['Aogonek'] = 722; - t['Aring'] = 722; - t['Otilde'] = 722; - t['zdotaccent'] = 444; - t['Ecaron'] = 611; - t['Iogonek'] = 333; - t['kcommaaccent'] = 500; - t['minus'] = 564; - t['Icircumflex'] = 333; - t['ncaron'] = 500; - t['tcommaaccent'] = 278; - t['logicalnot'] = 564; - t['odieresis'] = 500; - t['udieresis'] = 500; - t['notequal'] = 549; - t['gcommaaccent'] = 500; - t['eth'] = 500; - t['zcaron'] = 444; - t['ncommaaccent'] = 500; - t['onesuperior'] = 300; - t['imacron'] = 278; - t['Euro'] = 500; - }); - t['Times-Bold'] = (0, _util.getLookupTableFactory)(function (t) { - t['space'] = 250; - t['exclam'] = 333; - t['quotedbl'] = 555; - t['numbersign'] = 500; - t['dollar'] = 500; - t['percent'] = 1000; - t['ampersand'] = 833; - t['quoteright'] = 333; - t['parenleft'] = 333; - t['parenright'] = 333; - t['asterisk'] = 500; - t['plus'] = 570; - t['comma'] = 250; - t['hyphen'] = 333; - t['period'] = 250; - t['slash'] = 278; - t['zero'] = 500; - t['one'] = 500; - t['two'] = 500; - t['three'] = 500; - t['four'] = 500; - t['five'] = 500; - t['six'] = 500; - t['seven'] = 500; - t['eight'] = 500; - t['nine'] = 500; - t['colon'] = 333; - t['semicolon'] = 333; - t['less'] = 570; - t['equal'] = 570; - t['greater'] = 570; - t['question'] = 500; - t['at'] = 930; - t['A'] = 722; - t['B'] = 667; - t['C'] = 722; - t['D'] = 722; - t['E'] = 667; - t['F'] = 611; - t['G'] = 778; - t['H'] = 778; - t['I'] = 389; - t['J'] = 500; - t['K'] = 778; - t['L'] = 667; - t['M'] = 944; - t['N'] = 722; - t['O'] = 778; - t['P'] = 611; - t['Q'] = 778; - t['R'] = 722; - t['S'] = 556; - t['T'] = 667; - t['U'] = 722; - t['V'] = 722; - t['W'] = 1000; - t['X'] = 722; - t['Y'] = 722; - t['Z'] = 667; - t['bracketleft'] = 333; - t['backslash'] = 278; - t['bracketright'] = 333; - t['asciicircum'] = 581; - t['underscore'] = 500; - t['quoteleft'] = 333; - t['a'] = 500; - t['b'] = 556; - t['c'] = 444; - t['d'] = 556; - t['e'] = 444; - t['f'] = 333; - t['g'] = 500; - t['h'] = 556; - t['i'] = 278; - t['j'] = 333; - t['k'] = 556; - t['l'] = 278; - t['m'] = 833; - t['n'] = 556; - t['o'] = 500; - t['p'] = 556; - t['q'] = 556; - t['r'] = 444; - t['s'] = 389; - t['t'] = 333; - t['u'] = 556; - t['v'] = 500; - t['w'] = 722; - t['x'] = 500; - t['y'] = 500; - t['z'] = 444; - t['braceleft'] = 394; - t['bar'] = 220; - t['braceright'] = 394; - t['asciitilde'] = 520; - t['exclamdown'] = 333; - t['cent'] = 500; - t['sterling'] = 500; - t['fraction'] = 167; - t['yen'] = 500; - t['florin'] = 500; - t['section'] = 500; - t['currency'] = 500; - t['quotesingle'] = 278; - t['quotedblleft'] = 500; - t['guillemotleft'] = 500; - t['guilsinglleft'] = 333; - t['guilsinglright'] = 333; - t['fi'] = 556; - t['fl'] = 556; - t['endash'] = 500; - t['dagger'] = 500; - t['daggerdbl'] = 500; - t['periodcentered'] = 250; - t['paragraph'] = 540; - t['bullet'] = 350; - t['quotesinglbase'] = 333; - t['quotedblbase'] = 500; - t['quotedblright'] = 500; - t['guillemotright'] = 500; - t['ellipsis'] = 1000; - t['perthousand'] = 1000; - t['questiondown'] = 500; - t['grave'] = 333; - t['acute'] = 333; - t['circumflex'] = 333; - t['tilde'] = 333; - t['macron'] = 333; - t['breve'] = 333; - t['dotaccent'] = 333; - t['dieresis'] = 333; - t['ring'] = 333; - t['cedilla'] = 333; - t['hungarumlaut'] = 333; - t['ogonek'] = 333; - t['caron'] = 333; - t['emdash'] = 1000; - t['AE'] = 1000; - t['ordfeminine'] = 300; - t['Lslash'] = 667; - t['Oslash'] = 778; - t['OE'] = 1000; - t['ordmasculine'] = 330; - t['ae'] = 722; - t['dotlessi'] = 278; - t['lslash'] = 278; - t['oslash'] = 500; - t['oe'] = 722; - t['germandbls'] = 556; - t['Idieresis'] = 389; - t['eacute'] = 444; - t['abreve'] = 500; - t['uhungarumlaut'] = 556; - t['ecaron'] = 444; - t['Ydieresis'] = 722; - t['divide'] = 570; - t['Yacute'] = 722; - t['Acircumflex'] = 722; - t['aacute'] = 500; - t['Ucircumflex'] = 722; - t['yacute'] = 500; - t['scommaaccent'] = 389; - t['ecircumflex'] = 444; - t['Uring'] = 722; - t['Udieresis'] = 722; - t['aogonek'] = 500; - t['Uacute'] = 722; - t['uogonek'] = 556; - t['Edieresis'] = 667; - t['Dcroat'] = 722; - t['commaaccent'] = 250; - t['copyright'] = 747; - t['Emacron'] = 667; - t['ccaron'] = 444; - t['aring'] = 500; - t['Ncommaaccent'] = 722; - t['lacute'] = 278; - t['agrave'] = 500; - t['Tcommaaccent'] = 667; - t['Cacute'] = 722; - t['atilde'] = 500; - t['Edotaccent'] = 667; - t['scaron'] = 389; - t['scedilla'] = 389; - t['iacute'] = 278; - t['lozenge'] = 494; - t['Rcaron'] = 722; - t['Gcommaaccent'] = 778; - t['ucircumflex'] = 556; - t['acircumflex'] = 500; - t['Amacron'] = 722; - t['rcaron'] = 444; - t['ccedilla'] = 444; - t['Zdotaccent'] = 667; - t['Thorn'] = 611; - t['Omacron'] = 778; - t['Racute'] = 722; - t['Sacute'] = 556; - t['dcaron'] = 672; - t['Umacron'] = 722; - t['uring'] = 556; - t['threesuperior'] = 300; - t['Ograve'] = 778; - t['Agrave'] = 722; - t['Abreve'] = 722; - t['multiply'] = 570; - t['uacute'] = 556; - t['Tcaron'] = 667; - t['partialdiff'] = 494; - t['ydieresis'] = 500; - t['Nacute'] = 722; - t['icircumflex'] = 278; - t['Ecircumflex'] = 667; - t['adieresis'] = 500; - t['edieresis'] = 444; - t['cacute'] = 444; - t['nacute'] = 556; - t['umacron'] = 556; - t['Ncaron'] = 722; - t['Iacute'] = 389; - t['plusminus'] = 570; - t['brokenbar'] = 220; - t['registered'] = 747; - t['Gbreve'] = 778; - t['Idotaccent'] = 389; - t['summation'] = 600; - t['Egrave'] = 667; - t['racute'] = 444; - t['omacron'] = 500; - t['Zacute'] = 667; - t['Zcaron'] = 667; - t['greaterequal'] = 549; - t['Eth'] = 722; - t['Ccedilla'] = 722; - t['lcommaaccent'] = 278; - t['tcaron'] = 416; - t['eogonek'] = 444; - t['Uogonek'] = 722; - t['Aacute'] = 722; - t['Adieresis'] = 722; - t['egrave'] = 444; - t['zacute'] = 444; - t['iogonek'] = 278; - t['Oacute'] = 778; - t['oacute'] = 500; - t['amacron'] = 500; - t['sacute'] = 389; - t['idieresis'] = 278; - t['Ocircumflex'] = 778; - t['Ugrave'] = 722; - t['Delta'] = 612; - t['thorn'] = 556; - t['twosuperior'] = 300; - t['Odieresis'] = 778; - t['mu'] = 556; - t['igrave'] = 278; - t['ohungarumlaut'] = 500; - t['Eogonek'] = 667; - t['dcroat'] = 556; - t['threequarters'] = 750; - t['Scedilla'] = 556; - t['lcaron'] = 394; - t['Kcommaaccent'] = 778; - t['Lacute'] = 667; - t['trademark'] = 1000; - t['edotaccent'] = 444; - t['Igrave'] = 389; - t['Imacron'] = 389; - t['Lcaron'] = 667; - t['onehalf'] = 750; - t['lessequal'] = 549; - t['ocircumflex'] = 500; - t['ntilde'] = 556; - t['Uhungarumlaut'] = 722; - t['Eacute'] = 667; - t['emacron'] = 444; - t['gbreve'] = 500; - t['onequarter'] = 750; - t['Scaron'] = 556; - t['Scommaaccent'] = 556; - t['Ohungarumlaut'] = 778; - t['degree'] = 400; - t['ograve'] = 500; - t['Ccaron'] = 722; - t['ugrave'] = 556; - t['radical'] = 549; - t['Dcaron'] = 722; - t['rcommaaccent'] = 444; - t['Ntilde'] = 722; - t['otilde'] = 500; - t['Rcommaaccent'] = 722; - t['Lcommaaccent'] = 667; - t['Atilde'] = 722; - t['Aogonek'] = 722; - t['Aring'] = 722; - t['Otilde'] = 778; - t['zdotaccent'] = 444; - t['Ecaron'] = 667; - t['Iogonek'] = 389; - t['kcommaaccent'] = 556; - t['minus'] = 570; - t['Icircumflex'] = 389; - t['ncaron'] = 556; - t['tcommaaccent'] = 333; - t['logicalnot'] = 570; - t['odieresis'] = 500; - t['udieresis'] = 556; - t['notequal'] = 549; - t['gcommaaccent'] = 500; - t['eth'] = 500; - t['zcaron'] = 444; - t['ncommaaccent'] = 556; - t['onesuperior'] = 300; - t['imacron'] = 278; - t['Euro'] = 500; - }); - t['Times-BoldItalic'] = (0, _util.getLookupTableFactory)(function (t) { - t['space'] = 250; - t['exclam'] = 389; - t['quotedbl'] = 555; - t['numbersign'] = 500; - t['dollar'] = 500; - t['percent'] = 833; - t['ampersand'] = 778; - t['quoteright'] = 333; - t['parenleft'] = 333; - t['parenright'] = 333; - t['asterisk'] = 500; - t['plus'] = 570; - t['comma'] = 250; - t['hyphen'] = 333; - t['period'] = 250; - t['slash'] = 278; - t['zero'] = 500; - t['one'] = 500; - t['two'] = 500; - t['three'] = 500; - t['four'] = 500; - t['five'] = 500; - t['six'] = 500; - t['seven'] = 500; - t['eight'] = 500; - t['nine'] = 500; - t['colon'] = 333; - t['semicolon'] = 333; - t['less'] = 570; - t['equal'] = 570; - t['greater'] = 570; - t['question'] = 500; - t['at'] = 832; - t['A'] = 667; - t['B'] = 667; - t['C'] = 667; - t['D'] = 722; - t['E'] = 667; - t['F'] = 667; - t['G'] = 722; - t['H'] = 778; - t['I'] = 389; - t['J'] = 500; - t['K'] = 667; - t['L'] = 611; - t['M'] = 889; - t['N'] = 722; - t['O'] = 722; - t['P'] = 611; - t['Q'] = 722; - t['R'] = 667; - t['S'] = 556; - t['T'] = 611; - t['U'] = 722; - t['V'] = 667; - t['W'] = 889; - t['X'] = 667; - t['Y'] = 611; - t['Z'] = 611; - t['bracketleft'] = 333; - t['backslash'] = 278; - t['bracketright'] = 333; - t['asciicircum'] = 570; - t['underscore'] = 500; - t['quoteleft'] = 333; - t['a'] = 500; - t['b'] = 500; - t['c'] = 444; - t['d'] = 500; - t['e'] = 444; - t['f'] = 333; - t['g'] = 500; - t['h'] = 556; - t['i'] = 278; - t['j'] = 278; - t['k'] = 500; - t['l'] = 278; - t['m'] = 778; - t['n'] = 556; - t['o'] = 500; - t['p'] = 500; - t['q'] = 500; - t['r'] = 389; - t['s'] = 389; - t['t'] = 278; - t['u'] = 556; - t['v'] = 444; - t['w'] = 667; - t['x'] = 500; - t['y'] = 444; - t['z'] = 389; - t['braceleft'] = 348; - t['bar'] = 220; - t['braceright'] = 348; - t['asciitilde'] = 570; - t['exclamdown'] = 389; - t['cent'] = 500; - t['sterling'] = 500; - t['fraction'] = 167; - t['yen'] = 500; - t['florin'] = 500; - t['section'] = 500; - t['currency'] = 500; - t['quotesingle'] = 278; - t['quotedblleft'] = 500; - t['guillemotleft'] = 500; - t['guilsinglleft'] = 333; - t['guilsinglright'] = 333; - t['fi'] = 556; - t['fl'] = 556; - t['endash'] = 500; - t['dagger'] = 500; - t['daggerdbl'] = 500; - t['periodcentered'] = 250; - t['paragraph'] = 500; - t['bullet'] = 350; - t['quotesinglbase'] = 333; - t['quotedblbase'] = 500; - t['quotedblright'] = 500; - t['guillemotright'] = 500; - t['ellipsis'] = 1000; - t['perthousand'] = 1000; - t['questiondown'] = 500; - t['grave'] = 333; - t['acute'] = 333; - t['circumflex'] = 333; - t['tilde'] = 333; - t['macron'] = 333; - t['breve'] = 333; - t['dotaccent'] = 333; - t['dieresis'] = 333; - t['ring'] = 333; - t['cedilla'] = 333; - t['hungarumlaut'] = 333; - t['ogonek'] = 333; - t['caron'] = 333; - t['emdash'] = 1000; - t['AE'] = 944; - t['ordfeminine'] = 266; - t['Lslash'] = 611; - t['Oslash'] = 722; - t['OE'] = 944; - t['ordmasculine'] = 300; - t['ae'] = 722; - t['dotlessi'] = 278; - t['lslash'] = 278; - t['oslash'] = 500; - t['oe'] = 722; - t['germandbls'] = 500; - t['Idieresis'] = 389; - t['eacute'] = 444; - t['abreve'] = 500; - t['uhungarumlaut'] = 556; - t['ecaron'] = 444; - t['Ydieresis'] = 611; - t['divide'] = 570; - t['Yacute'] = 611; - t['Acircumflex'] = 667; - t['aacute'] = 500; - t['Ucircumflex'] = 722; - t['yacute'] = 444; - t['scommaaccent'] = 389; - t['ecircumflex'] = 444; - t['Uring'] = 722; - t['Udieresis'] = 722; - t['aogonek'] = 500; - t['Uacute'] = 722; - t['uogonek'] = 556; - t['Edieresis'] = 667; - t['Dcroat'] = 722; - t['commaaccent'] = 250; - t['copyright'] = 747; - t['Emacron'] = 667; - t['ccaron'] = 444; - t['aring'] = 500; - t['Ncommaaccent'] = 722; - t['lacute'] = 278; - t['agrave'] = 500; - t['Tcommaaccent'] = 611; - t['Cacute'] = 667; - t['atilde'] = 500; - t['Edotaccent'] = 667; - t['scaron'] = 389; - t['scedilla'] = 389; - t['iacute'] = 278; - t['lozenge'] = 494; - t['Rcaron'] = 667; - t['Gcommaaccent'] = 722; - t['ucircumflex'] = 556; - t['acircumflex'] = 500; - t['Amacron'] = 667; - t['rcaron'] = 389; - t['ccedilla'] = 444; - t['Zdotaccent'] = 611; - t['Thorn'] = 611; - t['Omacron'] = 722; - t['Racute'] = 667; - t['Sacute'] = 556; - t['dcaron'] = 608; - t['Umacron'] = 722; - t['uring'] = 556; - t['threesuperior'] = 300; - t['Ograve'] = 722; - t['Agrave'] = 667; - t['Abreve'] = 667; - t['multiply'] = 570; - t['uacute'] = 556; - t['Tcaron'] = 611; - t['partialdiff'] = 494; - t['ydieresis'] = 444; - t['Nacute'] = 722; - t['icircumflex'] = 278; - t['Ecircumflex'] = 667; - t['adieresis'] = 500; - t['edieresis'] = 444; - t['cacute'] = 444; - t['nacute'] = 556; - t['umacron'] = 556; - t['Ncaron'] = 722; - t['Iacute'] = 389; - t['plusminus'] = 570; - t['brokenbar'] = 220; - t['registered'] = 747; - t['Gbreve'] = 722; - t['Idotaccent'] = 389; - t['summation'] = 600; - t['Egrave'] = 667; - t['racute'] = 389; - t['omacron'] = 500; - t['Zacute'] = 611; - t['Zcaron'] = 611; - t['greaterequal'] = 549; - t['Eth'] = 722; - t['Ccedilla'] = 667; - t['lcommaaccent'] = 278; - t['tcaron'] = 366; - t['eogonek'] = 444; - t['Uogonek'] = 722; - t['Aacute'] = 667; - t['Adieresis'] = 667; - t['egrave'] = 444; - t['zacute'] = 389; - t['iogonek'] = 278; - t['Oacute'] = 722; - t['oacute'] = 500; - t['amacron'] = 500; - t['sacute'] = 389; - t['idieresis'] = 278; - t['Ocircumflex'] = 722; - t['Ugrave'] = 722; - t['Delta'] = 612; - t['thorn'] = 500; - t['twosuperior'] = 300; - t['Odieresis'] = 722; - t['mu'] = 576; - t['igrave'] = 278; - t['ohungarumlaut'] = 500; - t['Eogonek'] = 667; - t['dcroat'] = 500; - t['threequarters'] = 750; - t['Scedilla'] = 556; - t['lcaron'] = 382; - t['Kcommaaccent'] = 667; - t['Lacute'] = 611; - t['trademark'] = 1000; - t['edotaccent'] = 444; - t['Igrave'] = 389; - t['Imacron'] = 389; - t['Lcaron'] = 611; - t['onehalf'] = 750; - t['lessequal'] = 549; - t['ocircumflex'] = 500; - t['ntilde'] = 556; - t['Uhungarumlaut'] = 722; - t['Eacute'] = 667; - t['emacron'] = 444; - t['gbreve'] = 500; - t['onequarter'] = 750; - t['Scaron'] = 556; - t['Scommaaccent'] = 556; - t['Ohungarumlaut'] = 722; - t['degree'] = 400; - t['ograve'] = 500; - t['Ccaron'] = 667; - t['ugrave'] = 556; - t['radical'] = 549; - t['Dcaron'] = 722; - t['rcommaaccent'] = 389; - t['Ntilde'] = 722; - t['otilde'] = 500; - t['Rcommaaccent'] = 667; - t['Lcommaaccent'] = 611; - t['Atilde'] = 667; - t['Aogonek'] = 667; - t['Aring'] = 667; - t['Otilde'] = 722; - t['zdotaccent'] = 389; - t['Ecaron'] = 667; - t['Iogonek'] = 389; - t['kcommaaccent'] = 500; - t['minus'] = 606; - t['Icircumflex'] = 389; - t['ncaron'] = 556; - t['tcommaaccent'] = 278; - t['logicalnot'] = 606; - t['odieresis'] = 500; - t['udieresis'] = 556; - t['notequal'] = 549; - t['gcommaaccent'] = 500; - t['eth'] = 500; - t['zcaron'] = 389; - t['ncommaaccent'] = 556; - t['onesuperior'] = 300; - t['imacron'] = 278; - t['Euro'] = 500; - }); - t['Times-Italic'] = (0, _util.getLookupTableFactory)(function (t) { - t['space'] = 250; - t['exclam'] = 333; - t['quotedbl'] = 420; - t['numbersign'] = 500; - t['dollar'] = 500; - t['percent'] = 833; - t['ampersand'] = 778; - t['quoteright'] = 333; - t['parenleft'] = 333; - t['parenright'] = 333; - t['asterisk'] = 500; - t['plus'] = 675; - t['comma'] = 250; - t['hyphen'] = 333; - t['period'] = 250; - t['slash'] = 278; - t['zero'] = 500; - t['one'] = 500; - t['two'] = 500; - t['three'] = 500; - t['four'] = 500; - t['five'] = 500; - t['six'] = 500; - t['seven'] = 500; - t['eight'] = 500; - t['nine'] = 500; - t['colon'] = 333; - t['semicolon'] = 333; - t['less'] = 675; - t['equal'] = 675; - t['greater'] = 675; - t['question'] = 500; - t['at'] = 920; - t['A'] = 611; - t['B'] = 611; - t['C'] = 667; - t['D'] = 722; - t['E'] = 611; - t['F'] = 611; - t['G'] = 722; - t['H'] = 722; - t['I'] = 333; - t['J'] = 444; - t['K'] = 667; - t['L'] = 556; - t['M'] = 833; - t['N'] = 667; - t['O'] = 722; - t['P'] = 611; - t['Q'] = 722; - t['R'] = 611; - t['S'] = 500; - t['T'] = 556; - t['U'] = 722; - t['V'] = 611; - t['W'] = 833; - t['X'] = 611; - t['Y'] = 556; - t['Z'] = 556; - t['bracketleft'] = 389; - t['backslash'] = 278; - t['bracketright'] = 389; - t['asciicircum'] = 422; - t['underscore'] = 500; - t['quoteleft'] = 333; - t['a'] = 500; - t['b'] = 500; - t['c'] = 444; - t['d'] = 500; - t['e'] = 444; - t['f'] = 278; - t['g'] = 500; - t['h'] = 500; - t['i'] = 278; - t['j'] = 278; - t['k'] = 444; - t['l'] = 278; - t['m'] = 722; - t['n'] = 500; - t['o'] = 500; - t['p'] = 500; - t['q'] = 500; - t['r'] = 389; - t['s'] = 389; - t['t'] = 278; - t['u'] = 500; - t['v'] = 444; - t['w'] = 667; - t['x'] = 444; - t['y'] = 444; - t['z'] = 389; - t['braceleft'] = 400; - t['bar'] = 275; - t['braceright'] = 400; - t['asciitilde'] = 541; - t['exclamdown'] = 389; - t['cent'] = 500; - t['sterling'] = 500; - t['fraction'] = 167; - t['yen'] = 500; - t['florin'] = 500; - t['section'] = 500; - t['currency'] = 500; - t['quotesingle'] = 214; - t['quotedblleft'] = 556; - t['guillemotleft'] = 500; - t['guilsinglleft'] = 333; - t['guilsinglright'] = 333; - t['fi'] = 500; - t['fl'] = 500; - t['endash'] = 500; - t['dagger'] = 500; - t['daggerdbl'] = 500; - t['periodcentered'] = 250; - t['paragraph'] = 523; - t['bullet'] = 350; - t['quotesinglbase'] = 333; - t['quotedblbase'] = 556; - t['quotedblright'] = 556; - t['guillemotright'] = 500; - t['ellipsis'] = 889; - t['perthousand'] = 1000; - t['questiondown'] = 500; - t['grave'] = 333; - t['acute'] = 333; - t['circumflex'] = 333; - t['tilde'] = 333; - t['macron'] = 333; - t['breve'] = 333; - t['dotaccent'] = 333; - t['dieresis'] = 333; - t['ring'] = 333; - t['cedilla'] = 333; - t['hungarumlaut'] = 333; - t['ogonek'] = 333; - t['caron'] = 333; - t['emdash'] = 889; - t['AE'] = 889; - t['ordfeminine'] = 276; - t['Lslash'] = 556; - t['Oslash'] = 722; - t['OE'] = 944; - t['ordmasculine'] = 310; - t['ae'] = 667; - t['dotlessi'] = 278; - t['lslash'] = 278; - t['oslash'] = 500; - t['oe'] = 667; - t['germandbls'] = 500; - t['Idieresis'] = 333; - t['eacute'] = 444; - t['abreve'] = 500; - t['uhungarumlaut'] = 500; - t['ecaron'] = 444; - t['Ydieresis'] = 556; - t['divide'] = 675; - t['Yacute'] = 556; - t['Acircumflex'] = 611; - t['aacute'] = 500; - t['Ucircumflex'] = 722; - t['yacute'] = 444; - t['scommaaccent'] = 389; - t['ecircumflex'] = 444; - t['Uring'] = 722; - t['Udieresis'] = 722; - t['aogonek'] = 500; - t['Uacute'] = 722; - t['uogonek'] = 500; - t['Edieresis'] = 611; - t['Dcroat'] = 722; - t['commaaccent'] = 250; - t['copyright'] = 760; - t['Emacron'] = 611; - t['ccaron'] = 444; - t['aring'] = 500; - t['Ncommaaccent'] = 667; - t['lacute'] = 278; - t['agrave'] = 500; - t['Tcommaaccent'] = 556; - t['Cacute'] = 667; - t['atilde'] = 500; - t['Edotaccent'] = 611; - t['scaron'] = 389; - t['scedilla'] = 389; - t['iacute'] = 278; - t['lozenge'] = 471; - t['Rcaron'] = 611; - t['Gcommaaccent'] = 722; - t['ucircumflex'] = 500; - t['acircumflex'] = 500; - t['Amacron'] = 611; - t['rcaron'] = 389; - t['ccedilla'] = 444; - t['Zdotaccent'] = 556; - t['Thorn'] = 611; - t['Omacron'] = 722; - t['Racute'] = 611; - t['Sacute'] = 500; - t['dcaron'] = 544; - t['Umacron'] = 722; - t['uring'] = 500; - t['threesuperior'] = 300; - t['Ograve'] = 722; - t['Agrave'] = 611; - t['Abreve'] = 611; - t['multiply'] = 675; - t['uacute'] = 500; - t['Tcaron'] = 556; - t['partialdiff'] = 476; - t['ydieresis'] = 444; - t['Nacute'] = 667; - t['icircumflex'] = 278; - t['Ecircumflex'] = 611; - t['adieresis'] = 500; - t['edieresis'] = 444; - t['cacute'] = 444; - t['nacute'] = 500; - t['umacron'] = 500; - t['Ncaron'] = 667; - t['Iacute'] = 333; - t['plusminus'] = 675; - t['brokenbar'] = 275; - t['registered'] = 760; - t['Gbreve'] = 722; - t['Idotaccent'] = 333; - t['summation'] = 600; - t['Egrave'] = 611; - t['racute'] = 389; - t['omacron'] = 500; - t['Zacute'] = 556; - t['Zcaron'] = 556; - t['greaterequal'] = 549; - t['Eth'] = 722; - t['Ccedilla'] = 667; - t['lcommaaccent'] = 278; - t['tcaron'] = 300; - t['eogonek'] = 444; - t['Uogonek'] = 722; - t['Aacute'] = 611; - t['Adieresis'] = 611; - t['egrave'] = 444; - t['zacute'] = 389; - t['iogonek'] = 278; - t['Oacute'] = 722; - t['oacute'] = 500; - t['amacron'] = 500; - t['sacute'] = 389; - t['idieresis'] = 278; - t['Ocircumflex'] = 722; - t['Ugrave'] = 722; - t['Delta'] = 612; - t['thorn'] = 500; - t['twosuperior'] = 300; - t['Odieresis'] = 722; - t['mu'] = 500; - t['igrave'] = 278; - t['ohungarumlaut'] = 500; - t['Eogonek'] = 611; - t['dcroat'] = 500; - t['threequarters'] = 750; - t['Scedilla'] = 500; - t['lcaron'] = 300; - t['Kcommaaccent'] = 667; - t['Lacute'] = 556; - t['trademark'] = 980; - t['edotaccent'] = 444; - t['Igrave'] = 333; - t['Imacron'] = 333; - t['Lcaron'] = 611; - t['onehalf'] = 750; - t['lessequal'] = 549; - t['ocircumflex'] = 500; - t['ntilde'] = 500; - t['Uhungarumlaut'] = 722; - t['Eacute'] = 611; - t['emacron'] = 444; - t['gbreve'] = 500; - t['onequarter'] = 750; - t['Scaron'] = 500; - t['Scommaaccent'] = 500; - t['Ohungarumlaut'] = 722; - t['degree'] = 400; - t['ograve'] = 500; - t['Ccaron'] = 667; - t['ugrave'] = 500; - t['radical'] = 453; - t['Dcaron'] = 722; - t['rcommaaccent'] = 389; - t['Ntilde'] = 667; - t['otilde'] = 500; - t['Rcommaaccent'] = 611; - t['Lcommaaccent'] = 556; - t['Atilde'] = 611; - t['Aogonek'] = 611; - t['Aring'] = 611; - t['Otilde'] = 722; - t['zdotaccent'] = 389; - t['Ecaron'] = 611; - t['Iogonek'] = 333; - t['kcommaaccent'] = 444; - t['minus'] = 675; - t['Icircumflex'] = 333; - t['ncaron'] = 500; - t['tcommaaccent'] = 278; - t['logicalnot'] = 675; - t['odieresis'] = 500; - t['udieresis'] = 500; - t['notequal'] = 549; - t['gcommaaccent'] = 500; - t['eth'] = 500; - t['zcaron'] = 389; - t['ncommaaccent'] = 500; - t['onesuperior'] = 300; - t['imacron'] = 278; - t['Euro'] = 500; - }); - t['ZapfDingbats'] = (0, _util.getLookupTableFactory)(function (t) { - t['space'] = 278; - t['a1'] = 974; - t['a2'] = 961; - t['a202'] = 974; - t['a3'] = 980; - t['a4'] = 719; - t['a5'] = 789; - t['a119'] = 790; - t['a118'] = 791; - t['a117'] = 690; - t['a11'] = 960; - t['a12'] = 939; - t['a13'] = 549; - t['a14'] = 855; - t['a15'] = 911; - t['a16'] = 933; - t['a105'] = 911; - t['a17'] = 945; - t['a18'] = 974; - t['a19'] = 755; - t['a20'] = 846; - t['a21'] = 762; - t['a22'] = 761; - t['a23'] = 571; - t['a24'] = 677; - t['a25'] = 763; - t['a26'] = 760; - t['a27'] = 759; - t['a28'] = 754; - t['a6'] = 494; - t['a7'] = 552; - t['a8'] = 537; - t['a9'] = 577; - t['a10'] = 692; - t['a29'] = 786; - t['a30'] = 788; - t['a31'] = 788; - t['a32'] = 790; - t['a33'] = 793; - t['a34'] = 794; - t['a35'] = 816; - t['a36'] = 823; - t['a37'] = 789; - t['a38'] = 841; - t['a39'] = 823; - t['a40'] = 833; - t['a41'] = 816; - t['a42'] = 831; - t['a43'] = 923; - t['a44'] = 744; - t['a45'] = 723; - t['a46'] = 749; - t['a47'] = 790; - t['a48'] = 792; - t['a49'] = 695; - t['a50'] = 776; - t['a51'] = 768; - t['a52'] = 792; - t['a53'] = 759; - t['a54'] = 707; - t['a55'] = 708; - t['a56'] = 682; - t['a57'] = 701; - t['a58'] = 826; - t['a59'] = 815; - t['a60'] = 789; - t['a61'] = 789; - t['a62'] = 707; - t['a63'] = 687; - t['a64'] = 696; - t['a65'] = 689; - t['a66'] = 786; - t['a67'] = 787; - t['a68'] = 713; - t['a69'] = 791; - t['a70'] = 785; - t['a71'] = 791; - t['a72'] = 873; - t['a73'] = 761; - t['a74'] = 762; - t['a203'] = 762; - t['a75'] = 759; - t['a204'] = 759; - t['a76'] = 892; - t['a77'] = 892; - t['a78'] = 788; - t['a79'] = 784; - t['a81'] = 438; - t['a82'] = 138; - t['a83'] = 277; - t['a84'] = 415; - t['a97'] = 392; - t['a98'] = 392; - t['a99'] = 668; - t['a100'] = 668; - t['a89'] = 390; - t['a90'] = 390; - t['a93'] = 317; - t['a94'] = 317; - t['a91'] = 276; - t['a92'] = 276; - t['a205'] = 509; - t['a85'] = 509; - t['a206'] = 410; - t['a86'] = 410; - t['a87'] = 234; - t['a88'] = 234; - t['a95'] = 334; - t['a96'] = 334; - t['a101'] = 732; - t['a102'] = 544; - t['a103'] = 544; - t['a104'] = 910; - t['a106'] = 667; - t['a107'] = 760; - t['a108'] = 760; - t['a112'] = 776; - t['a111'] = 595; - t['a110'] = 694; - t['a109'] = 626; - t['a120'] = 788; - t['a121'] = 788; - t['a122'] = 788; - t['a123'] = 788; - t['a124'] = 788; - t['a125'] = 788; - t['a126'] = 788; - t['a127'] = 788; - t['a128'] = 788; - t['a129'] = 788; - t['a130'] = 788; - t['a131'] = 788; - t['a132'] = 788; - t['a133'] = 788; - t['a134'] = 788; - t['a135'] = 788; - t['a136'] = 788; - t['a137'] = 788; - t['a138'] = 788; - t['a139'] = 788; - t['a140'] = 788; - t['a141'] = 788; - t['a142'] = 788; - t['a143'] = 788; - t['a144'] = 788; - t['a145'] = 788; - t['a146'] = 788; - t['a147'] = 788; - t['a148'] = 788; - t['a149'] = 788; - t['a150'] = 788; - t['a151'] = 788; - t['a152'] = 788; - t['a153'] = 788; - t['a154'] = 788; - t['a155'] = 788; - t['a156'] = 788; - t['a157'] = 788; - t['a158'] = 788; - t['a159'] = 788; - t['a160'] = 894; - t['a161'] = 838; - t['a163'] = 1016; - t['a164'] = 458; - t['a196'] = 748; - t['a165'] = 924; - t['a192'] = 748; - t['a166'] = 918; - t['a167'] = 927; - t['a168'] = 928; - t['a169'] = 928; - t['a170'] = 834; - t['a171'] = 873; - t['a172'] = 828; - t['a173'] = 924; - t['a162'] = 924; - t['a174'] = 917; - t['a175'] = 930; - t['a176'] = 931; - t['a177'] = 463; - t['a178'] = 883; - t['a179'] = 836; - t['a193'] = 836; - t['a180'] = 867; - t['a199'] = 867; - t['a181'] = 696; - t['a200'] = 696; - t['a182'] = 874; - t['a201'] = 874; - t['a183'] = 760; - t['a184'] = 946; - t['a197'] = 771; - t['a185'] = 865; - t['a194'] = 771; - t['a198'] = 888; - t['a186'] = 967; - t['a195'] = 888; - t['a187'] = 831; - t['a188'] = 873; - t['a189'] = 927; - t['a190'] = 970; - t['a191'] = 918; - }); - }); - exports.getMetrics = getMetrics; - - /***/ }), - /* 185 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.isPDFFunction = isPDFFunction; - exports.PostScriptCompiler = exports.PostScriptEvaluator = exports.PDFFunctionFactory = void 0; - - var _util = __w_extracthighlights_require__(6); - - var _primitives = __w_extracthighlights_require__(155); - - var _ps_parser = __w_extracthighlights_require__(186); - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - - var IsEvalSupportedCached = { - get value() { - return (0, _util.shadow)(this, 'value', (0, _util.isEvalSupported)()); - } - - }; - - var PDFFunctionFactory = - /*#__PURE__*/ - function () { - function PDFFunctionFactory(_ref) { - var xref = _ref.xref, - _ref$isEvalSupported = _ref.isEvalSupported, - isEvalSupported = _ref$isEvalSupported === void 0 ? true : _ref$isEvalSupported; - - _classCallCheck(this, PDFFunctionFactory); - - this.xref = xref; - this.isEvalSupported = isEvalSupported !== false; - } - - _createClass(PDFFunctionFactory, [{ - key: "create", - value: function create(fn) { - return PDFFunction.parse({ - xref: this.xref, - isEvalSupported: this.isEvalSupported, - fn: fn - }); - } - }, { - key: "createFromArray", - value: function createFromArray(fnObj) { - return PDFFunction.parseArray({ - xref: this.xref, - isEvalSupported: this.isEvalSupported, - fnObj: fnObj - }); - } - }]); - - return PDFFunctionFactory; - }(); - - exports.PDFFunctionFactory = PDFFunctionFactory; - - function toNumberArray(arr) { - if (!Array.isArray(arr)) { - return null; - } - - var length = arr.length; - - for (var i = 0; i < length; i++) { - if (typeof arr[i] !== 'number') { - var result = new Array(length); - - for (var _i = 0; _i < length; _i++) { - result[_i] = +arr[_i]; - } - - return result; - } - } - - return arr; - } - - var PDFFunction = function PDFFunctionClosure() { - var CONSTRUCT_SAMPLED = 0; - var CONSTRUCT_INTERPOLATED = 2; - var CONSTRUCT_STICHED = 3; - var CONSTRUCT_POSTSCRIPT = 4; - return { - getSampleArray: function getSampleArray(size, outputSize, bps, stream) { - var i, ii; - var length = 1; - - for (i = 0, ii = size.length; i < ii; i++) { - length *= size[i]; - } - - length *= outputSize; - var array = new Array(length); - var codeSize = 0; - var codeBuf = 0; - var sampleMul = 1.0 / (Math.pow(2.0, bps) - 1); - var strBytes = stream.getBytes((length * bps + 7) / 8); - var strIdx = 0; - - for (i = 0; i < length; i++) { - while (codeSize < bps) { - codeBuf <<= 8; - codeBuf |= strBytes[strIdx++]; - codeSize += 8; - } - - codeSize -= bps; - array[i] = (codeBuf >> codeSize) * sampleMul; - codeBuf &= (1 << codeSize) - 1; - } - - return array; - }, - getIR: function getIR(_ref2) { - var xref = _ref2.xref, - isEvalSupported = _ref2.isEvalSupported, - fn = _ref2.fn; - var dict = fn.dict; - - if (!dict) { - dict = fn; - } - - var types = [this.constructSampled, null, this.constructInterpolated, this.constructStiched, this.constructPostScript]; - var typeNum = dict.get('FunctionType'); - var typeFn = types[typeNum]; - - if (!typeFn) { - throw new _util.FormatError('Unknown type of function'); - } - - return typeFn.call(this, { - xref: xref, - isEvalSupported: isEvalSupported, - fn: fn, - dict: dict - }); - }, - fromIR: function fromIR(_ref3) { - var xref = _ref3.xref, - isEvalSupported = _ref3.isEvalSupported, - IR = _ref3.IR; - var type = IR[0]; - - switch (type) { - case CONSTRUCT_SAMPLED: - return this.constructSampledFromIR({ - xref: xref, - isEvalSupported: isEvalSupported, - IR: IR - }); - - case CONSTRUCT_INTERPOLATED: - return this.constructInterpolatedFromIR({ - xref: xref, - isEvalSupported: isEvalSupported, - IR: IR - }); - - case CONSTRUCT_STICHED: - return this.constructStichedFromIR({ - xref: xref, - isEvalSupported: isEvalSupported, - IR: IR - }); - - default: - return this.constructPostScriptFromIR({ - xref: xref, - isEvalSupported: isEvalSupported, - IR: IR - }); - } - }, - parse: function parse(_ref4) { - var xref = _ref4.xref, - isEvalSupported = _ref4.isEvalSupported, - fn = _ref4.fn; - var IR = this.getIR({ - xref: xref, - isEvalSupported: isEvalSupported, - fn: fn - }); - return this.fromIR({ - xref: xref, - isEvalSupported: isEvalSupported, - IR: IR - }); - }, - parseArray: function parseArray(_ref5) { - var xref = _ref5.xref, - isEvalSupported = _ref5.isEvalSupported, - fnObj = _ref5.fnObj; - - if (!Array.isArray(fnObj)) { - return this.parse({ - xref: xref, - isEvalSupported: isEvalSupported, - fn: fnObj - }); - } - - var fnArray = []; - - for (var j = 0, jj = fnObj.length; j < jj; j++) { - fnArray.push(this.parse({ - xref: xref, - isEvalSupported: isEvalSupported, - fn: xref.fetchIfRef(fnObj[j]) - })); - } - - return function (src, srcOffset, dest, destOffset) { - for (var i = 0, ii = fnArray.length; i < ii; i++) { - fnArray[i](src, srcOffset, dest, destOffset + i); - } - }; - }, - constructSampled: function constructSampled(_ref6) { - _ref6.xref; - _ref6.isEvalSupported; - var fn = _ref6.fn, - dict = _ref6.dict; - - function toMultiArray(arr) { - var inputLength = arr.length; - var out = []; - var index = 0; - - for (var i = 0; i < inputLength; i += 2) { - out[index] = [arr[i], arr[i + 1]]; - ++index; - } - - return out; - } - - var domain = toNumberArray(dict.getArray('Domain')); - var range = toNumberArray(dict.getArray('Range')); - - if (!domain || !range) { - throw new _util.FormatError('No domain or range'); - } - - var inputSize = domain.length / 2; - var outputSize = range.length / 2; - domain = toMultiArray(domain); - range = toMultiArray(range); - var size = toNumberArray(dict.getArray('Size')); - var bps = dict.get('BitsPerSample'); - var order = dict.get('Order') || 1; - - if (order !== 1) { - (0, _util.info)('No support for cubic spline interpolation: ' + order); - } - - var encode = toNumberArray(dict.getArray('Encode')); - - if (!encode) { - encode = []; - - for (var i = 0; i < inputSize; ++i) { - encode.push([0, size[i] - 1]); - } - } else { - encode = toMultiArray(encode); - } - - var decode = toNumberArray(dict.getArray('Decode')); - - if (!decode) { - decode = range; - } else { - decode = toMultiArray(decode); - } - - var samples = this.getSampleArray(size, outputSize, bps, fn); - return [CONSTRUCT_SAMPLED, inputSize, domain, encode, decode, samples, size, outputSize, Math.pow(2, bps) - 1, range]; - }, - constructSampledFromIR: function constructSampledFromIR(_ref7) { - _ref7.xref; - _ref7.isEvalSupported; - var IR = _ref7.IR; - - function interpolate(x, xmin, xmax, ymin, ymax) { - return ymin + (x - xmin) * ((ymax - ymin) / (xmax - xmin)); - } - - return function constructSampledFromIRResult(src, srcOffset, dest, destOffset) { - var m = IR[1]; - var domain = IR[2]; - var encode = IR[3]; - var decode = IR[4]; - var samples = IR[5]; - var size = IR[6]; - var n = IR[7]; - var range = IR[9]; - var cubeVertices = 1 << m; - var cubeN = new Float64Array(cubeVertices); - var cubeVertex = new Uint32Array(cubeVertices); - var i, j; - - for (j = 0; j < cubeVertices; j++) { - cubeN[j] = 1; - } - - var k = n, - pos = 1; - - for (i = 0; i < m; ++i) { - var domain_2i = domain[i][0]; - var domain_2i_1 = domain[i][1]; - var xi = Math.min(Math.max(src[srcOffset + i], domain_2i), domain_2i_1); - var e = interpolate(xi, domain_2i, domain_2i_1, encode[i][0], encode[i][1]); - var size_i = size[i]; - e = Math.min(Math.max(e, 0), size_i - 1); - var e0 = e < size_i - 1 ? Math.floor(e) : e - 1; - var n0 = e0 + 1 - e; - var n1 = e - e0; - var offset0 = e0 * k; - var offset1 = offset0 + k; - - for (j = 0; j < cubeVertices; j++) { - if (j & pos) { - cubeN[j] *= n1; - cubeVertex[j] += offset1; - } else { - cubeN[j] *= n0; - cubeVertex[j] += offset0; - } - } - - k *= size_i; - pos <<= 1; - } - - for (j = 0; j < n; ++j) { - var rj = 0; - - for (i = 0; i < cubeVertices; i++) { - rj += samples[cubeVertex[i] + j] * cubeN[i]; - } - - rj = interpolate(rj, 0, 1, decode[j][0], decode[j][1]); - dest[destOffset + j] = Math.min(Math.max(rj, range[j][0]), range[j][1]); - } - }; - }, - constructInterpolated: function constructInterpolated(_ref8) { - _ref8.xref; - _ref8.isEvalSupported; - _ref8.fn; - var dict = _ref8.dict; - var c0 = toNumberArray(dict.getArray('C0')) || [0]; - var c1 = toNumberArray(dict.getArray('C1')) || [1]; - var n = dict.get('N'); - var length = c0.length; - var diff = []; - - for (var i = 0; i < length; ++i) { - diff.push(c1[i] - c0[i]); - } - - return [CONSTRUCT_INTERPOLATED, c0, diff, n]; - }, - constructInterpolatedFromIR: function constructInterpolatedFromIR(_ref9) { - _ref9.xref; - _ref9.isEvalSupported; - var IR = _ref9.IR; - var c0 = IR[1]; - var diff = IR[2]; - var n = IR[3]; - var length = diff.length; - return function constructInterpolatedFromIRResult(src, srcOffset, dest, destOffset) { - var x = n === 1 ? src[srcOffset] : Math.pow(src[srcOffset], n); - - for (var j = 0; j < length; ++j) { - dest[destOffset + j] = c0[j] + x * diff[j]; - } - }; - }, - constructStiched: function constructStiched(_ref10) { - var xref = _ref10.xref, - isEvalSupported = _ref10.isEvalSupported; - _ref10.fn; - var dict = _ref10.dict; - var domain = toNumberArray(dict.getArray('Domain')); - - if (!domain) { - throw new _util.FormatError('No domain'); - } - - var inputSize = domain.length / 2; - - if (inputSize !== 1) { - throw new _util.FormatError('Bad domain for stiched function'); - } - - var fnRefs = dict.get('Functions'); - var fns = []; - - for (var i = 0, ii = fnRefs.length; i < ii; ++i) { - fns.push(this.parse({ - xref: xref, - isEvalSupported: isEvalSupported, - fn: xref.fetchIfRef(fnRefs[i]) - })); - } - - var bounds = toNumberArray(dict.getArray('Bounds')); - var encode = toNumberArray(dict.getArray('Encode')); - return [CONSTRUCT_STICHED, domain, bounds, encode, fns]; - }, - constructStichedFromIR: function constructStichedFromIR(_ref11) { - _ref11.xref; - _ref11.isEvalSupported; - var IR = _ref11.IR; - var domain = IR[1]; - var bounds = IR[2]; - var encode = IR[3]; - var fns = IR[4]; - var tmpBuf = new Float32Array(1); - return function constructStichedFromIRResult(src, srcOffset, dest, destOffset) { - var clip = function constructStichedFromIRClip(v, min, max) { - if (v > max) { - v = max; - } else if (v < min) { - v = min; - } - - return v; - }; - - var v = clip(src[srcOffset], domain[0], domain[1]); - - for (var i = 0, ii = bounds.length; i < ii; ++i) { - if (v < bounds[i]) { - break; - } - } - - var dmin = domain[0]; - - if (i > 0) { - dmin = bounds[i - 1]; - } - - var dmax = domain[1]; - - if (i < bounds.length) { - dmax = bounds[i]; - } - - var rmin = encode[2 * i]; - var rmax = encode[2 * i + 1]; - tmpBuf[0] = dmin === dmax ? rmin : rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin); - fns[i](tmpBuf, 0, dest, destOffset); - }; - }, - constructPostScript: function constructPostScript(_ref12) { - _ref12.xref; - _ref12.isEvalSupported; - var fn = _ref12.fn, - dict = _ref12.dict; - var domain = toNumberArray(dict.getArray('Domain')); - var range = toNumberArray(dict.getArray('Range')); - - if (!domain) { - throw new _util.FormatError('No domain.'); - } - - if (!range) { - throw new _util.FormatError('No range.'); - } - - var lexer = new _ps_parser.PostScriptLexer(fn); - var parser = new _ps_parser.PostScriptParser(lexer); - var code = parser.parse(); - return [CONSTRUCT_POSTSCRIPT, domain, range, code]; - }, - constructPostScriptFromIR: function constructPostScriptFromIR(_ref13) { - _ref13.xref; - var isEvalSupported = _ref13.isEvalSupported, - IR = _ref13.IR; - var domain = IR[1]; - var range = IR[2]; - var code = IR[3]; - - if (isEvalSupported && IsEvalSupportedCached.value) { - var compiled = new PostScriptCompiler().compile(code, domain, range); - - if (compiled) { - return new Function('src', 'srcOffset', 'dest', 'destOffset', compiled); - } - } - - (0, _util.info)('Unable to compile PS function'); - var numOutputs = range.length >> 1; - var numInputs = domain.length >> 1; - var evaluator = new PostScriptEvaluator(code); - var cache = Object.create(null); - var MAX_CACHE_SIZE = 2048 * 4; - var cache_available = MAX_CACHE_SIZE; - var tmpBuf = new Float32Array(numInputs); - return function constructPostScriptFromIRResult(src, srcOffset, dest, destOffset) { - var i, value; - var key = ''; - var input = tmpBuf; - - for (i = 0; i < numInputs; i++) { - value = src[srcOffset + i]; - input[i] = value; - key += value + '_'; - } - - var cachedValue = cache[key]; - - if (cachedValue !== undefined) { - dest.set(cachedValue, destOffset); - return; - } - - var output = new Float32Array(numOutputs); - var stack = evaluator.execute(input); - var stackIndex = stack.length - numOutputs; - - for (i = 0; i < numOutputs; i++) { - value = stack[stackIndex + i]; - var bound = range[i * 2]; - - if (value < bound) { - value = bound; - } else { - bound = range[i * 2 + 1]; - - if (value > bound) { - value = bound; - } - } - - output[i] = value; - } - - if (cache_available > 0) { - cache_available--; - cache[key] = output; - } - - dest.set(output, destOffset); - }; - } - }; - }(); - - function isPDFFunction(v) { - var fnDict; - - if (_typeof(v) !== 'object') { - return false; - } else if ((0, _primitives.isDict)(v)) { - fnDict = v; - } else if ((0, _primitives.isStream)(v)) { - fnDict = v.dict; - } else { - return false; - } - - return fnDict.has('FunctionType'); - } - - var PostScriptStack = function PostScriptStackClosure() { - var MAX_STACK_SIZE = 100; - - function PostScriptStack(initialStack) { - this.stack = !initialStack ? [] : Array.prototype.slice.call(initialStack, 0); - } - - PostScriptStack.prototype = { - push: function PostScriptStack_push(value) { - if (this.stack.length >= MAX_STACK_SIZE) { - throw new Error('PostScript function stack overflow.'); - } - - this.stack.push(value); - }, - pop: function PostScriptStack_pop() { - if (this.stack.length <= 0) { - throw new Error('PostScript function stack underflow.'); - } - - return this.stack.pop(); - }, - copy: function PostScriptStack_copy(n) { - if (this.stack.length + n >= MAX_STACK_SIZE) { - throw new Error('PostScript function stack overflow.'); - } - - var stack = this.stack; - - for (var i = stack.length - n, j = n - 1; j >= 0; j--, i++) { - stack.push(stack[i]); - } - }, - index: function PostScriptStack_index(n) { - this.push(this.stack[this.stack.length - n - 1]); - }, - roll: function PostScriptStack_roll(n, p) { - var stack = this.stack; - var l = stack.length - n; - var r = stack.length - 1, - c = l + (p - Math.floor(p / n) * n), - i, - j, - t; - - for (i = l, j = r; i < j; i++, j--) { - t = stack[i]; - stack[i] = stack[j]; - stack[j] = t; - } - - for (i = l, j = c - 1; i < j; i++, j--) { - t = stack[i]; - stack[i] = stack[j]; - stack[j] = t; - } - - for (i = c, j = r; i < j; i++, j--) { - t = stack[i]; - stack[i] = stack[j]; - stack[j] = t; - } - } - }; - return PostScriptStack; - }(); - - var PostScriptEvaluator = function PostScriptEvaluatorClosure() { - function PostScriptEvaluator(operators) { - this.operators = operators; - } - - PostScriptEvaluator.prototype = { - execute: function PostScriptEvaluator_execute(initialStack) { - var stack = new PostScriptStack(initialStack); - var counter = 0; - var operators = this.operators; - var length = operators.length; - var operator, a, b; - - while (counter < length) { - operator = operators[counter++]; - - if (typeof operator === 'number') { - stack.push(operator); - continue; - } - - switch (operator) { - case 'jz': - b = stack.pop(); - a = stack.pop(); - - if (!a) { - counter = b; - } - - break; - - case 'j': - a = stack.pop(); - counter = a; - break; - - case 'abs': - a = stack.pop(); - stack.push(Math.abs(a)); - break; - - case 'add': - b = stack.pop(); - a = stack.pop(); - stack.push(a + b); - break; - - case 'and': - b = stack.pop(); - a = stack.pop(); - - if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) { - stack.push(a && b); - } else { - stack.push(a & b); - } - - break; - - case 'atan': - a = stack.pop(); - stack.push(Math.atan(a)); - break; - - case 'bitshift': - b = stack.pop(); - a = stack.pop(); - - if (a > 0) { - stack.push(a << b); - } else { - stack.push(a >> b); - } - - break; - - case 'ceiling': - a = stack.pop(); - stack.push(Math.ceil(a)); - break; - - case 'copy': - a = stack.pop(); - stack.copy(a); - break; - - case 'cos': - a = stack.pop(); - stack.push(Math.cos(a)); - break; - - case 'cvi': - a = stack.pop() | 0; - stack.push(a); - break; - - case 'cvr': - break; - - case 'div': - b = stack.pop(); - a = stack.pop(); - stack.push(a / b); - break; - - case 'dup': - stack.copy(1); - break; - - case 'eq': - b = stack.pop(); - a = stack.pop(); - stack.push(a === b); - break; - - case 'exch': - stack.roll(2, 1); - break; - - case 'exp': - b = stack.pop(); - a = stack.pop(); - stack.push(Math.pow(a, b)); - break; - - case 'false': - stack.push(false); - break; - - case 'floor': - a = stack.pop(); - stack.push(Math.floor(a)); - break; - - case 'ge': - b = stack.pop(); - a = stack.pop(); - stack.push(a >= b); - break; - - case 'gt': - b = stack.pop(); - a = stack.pop(); - stack.push(a > b); - break; - - case 'idiv': - b = stack.pop(); - a = stack.pop(); - stack.push(a / b | 0); - break; - - case 'index': - a = stack.pop(); - stack.index(a); - break; - - case 'le': - b = stack.pop(); - a = stack.pop(); - stack.push(a <= b); - break; - - case 'ln': - a = stack.pop(); - stack.push(Math.log(a)); - break; - - case 'log': - a = stack.pop(); - stack.push(Math.log(a) / Math.LN10); - break; - - case 'lt': - b = stack.pop(); - a = stack.pop(); - stack.push(a < b); - break; - - case 'mod': - b = stack.pop(); - a = stack.pop(); - stack.push(a % b); - break; - - case 'mul': - b = stack.pop(); - a = stack.pop(); - stack.push(a * b); - break; - - case 'ne': - b = stack.pop(); - a = stack.pop(); - stack.push(a !== b); - break; - - case 'neg': - a = stack.pop(); - stack.push(-a); - break; - - case 'not': - a = stack.pop(); - - if ((0, _util.isBool)(a)) { - stack.push(!a); - } else { - stack.push(~a); - } - - break; - - case 'or': - b = stack.pop(); - a = stack.pop(); - - if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) { - stack.push(a || b); - } else { - stack.push(a | b); - } - - break; - - case 'pop': - stack.pop(); - break; - - case 'roll': - b = stack.pop(); - a = stack.pop(); - stack.roll(a, b); - break; - - case 'round': - a = stack.pop(); - stack.push(Math.round(a)); - break; - - case 'sin': - a = stack.pop(); - stack.push(Math.sin(a)); - break; - - case 'sqrt': - a = stack.pop(); - stack.push(Math.sqrt(a)); - break; - - case 'sub': - b = stack.pop(); - a = stack.pop(); - stack.push(a - b); - break; - - case 'true': - stack.push(true); - break; - - case 'truncate': - a = stack.pop(); - a = a < 0 ? Math.ceil(a) : Math.floor(a); - stack.push(a); - break; - - case 'xor': - b = stack.pop(); - a = stack.pop(); - - if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) { - stack.push(a !== b); - } else { - stack.push(a ^ b); - } - - break; - - default: - throw new _util.FormatError("Unknown operator ".concat(operator)); - } - } - - return stack.stack; - } - }; - return PostScriptEvaluator; - }(); - - exports.PostScriptEvaluator = PostScriptEvaluator; - - var PostScriptCompiler = function PostScriptCompilerClosure() { - function AstNode(type) { - this.type = type; - } - - AstNode.prototype.visit = function (visitor) { - (0, _util.unreachable)('abstract method'); - }; - - function AstArgument(index, min, max) { - AstNode.call(this, 'args'); - this.index = index; - this.min = min; - this.max = max; - } - - AstArgument.prototype = Object.create(AstNode.prototype); - - AstArgument.prototype.visit = function (visitor) { - visitor.visitArgument(this); - }; - - function AstLiteral(number) { - AstNode.call(this, 'literal'); - this.number = number; - this.min = number; - this.max = number; - } - - AstLiteral.prototype = Object.create(AstNode.prototype); - - AstLiteral.prototype.visit = function (visitor) { - visitor.visitLiteral(this); - }; - - function AstBinaryOperation(op, arg1, arg2, min, max) { - AstNode.call(this, 'binary'); - this.op = op; - this.arg1 = arg1; - this.arg2 = arg2; - this.min = min; - this.max = max; - } - - AstBinaryOperation.prototype = Object.create(AstNode.prototype); - - AstBinaryOperation.prototype.visit = function (visitor) { - visitor.visitBinaryOperation(this); - }; - - function AstMin(arg, max) { - AstNode.call(this, 'max'); - this.arg = arg; - this.min = arg.min; - this.max = max; - } - - AstMin.prototype = Object.create(AstNode.prototype); - - AstMin.prototype.visit = function (visitor) { - visitor.visitMin(this); - }; - - function AstVariable(index, min, max) { - AstNode.call(this, 'var'); - this.index = index; - this.min = min; - this.max = max; - } - - AstVariable.prototype = Object.create(AstNode.prototype); - - AstVariable.prototype.visit = function (visitor) { - visitor.visitVariable(this); - }; - - function AstVariableDefinition(variable, arg) { - AstNode.call(this, 'definition'); - this.variable = variable; - this.arg = arg; - } - - AstVariableDefinition.prototype = Object.create(AstNode.prototype); - - AstVariableDefinition.prototype.visit = function (visitor) { - visitor.visitVariableDefinition(this); - }; - - function ExpressionBuilderVisitor() { - this.parts = []; - } - - ExpressionBuilderVisitor.prototype = { - visitArgument: function visitArgument(arg) { - this.parts.push('Math.max(', arg.min, ', Math.min(', arg.max, ', src[srcOffset + ', arg.index, ']))'); - }, - visitVariable: function visitVariable(variable) { - this.parts.push('v', variable.index); - }, - visitLiteral: function visitLiteral(literal) { - this.parts.push(literal.number); - }, - visitBinaryOperation: function visitBinaryOperation(operation) { - this.parts.push('('); - operation.arg1.visit(this); - this.parts.push(' ', operation.op, ' '); - operation.arg2.visit(this); - this.parts.push(')'); - }, - visitVariableDefinition: function visitVariableDefinition(definition) { - this.parts.push('var '); - definition.variable.visit(this); - this.parts.push(' = '); - definition.arg.visit(this); - this.parts.push(';'); - }, - visitMin: function visitMin(max) { - this.parts.push('Math.min('); - max.arg.visit(this); - this.parts.push(', ', max.max, ')'); - }, - toString: function toString() { - return this.parts.join(''); - } - }; - - function buildAddOperation(num1, num2) { - if (num2.type === 'literal' && num2.number === 0) { - return num1; - } - - if (num1.type === 'literal' && num1.number === 0) { - return num2; - } - - if (num2.type === 'literal' && num1.type === 'literal') { - return new AstLiteral(num1.number + num2.number); - } - - return new AstBinaryOperation('+', num1, num2, num1.min + num2.min, num1.max + num2.max); - } - - function buildMulOperation(num1, num2) { - if (num2.type === 'literal') { - if (num2.number === 0) { - return new AstLiteral(0); - } else if (num2.number === 1) { - return num1; - } else if (num1.type === 'literal') { - return new AstLiteral(num1.number * num2.number); - } - } - - if (num1.type === 'literal') { - if (num1.number === 0) { - return new AstLiteral(0); - } else if (num1.number === 1) { - return num2; - } - } - - var min = Math.min(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max); - var max = Math.max(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max); - return new AstBinaryOperation('*', num1, num2, min, max); - } - - function buildSubOperation(num1, num2) { - if (num2.type === 'literal') { - if (num2.number === 0) { - return num1; - } else if (num1.type === 'literal') { - return new AstLiteral(num1.number - num2.number); - } - } - - if (num2.type === 'binary' && num2.op === '-' && num1.type === 'literal' && num1.number === 1 && num2.arg1.type === 'literal' && num2.arg1.number === 1) { - return num2.arg2; - } - - return new AstBinaryOperation('-', num1, num2, num1.min - num2.max, num1.max - num2.min); - } - - function buildMinOperation(num1, max) { - if (num1.min >= max) { - return new AstLiteral(max); - } else if (num1.max <= max) { - return num1; - } - - return new AstMin(num1, max); - } - - function PostScriptCompiler() {} - - PostScriptCompiler.prototype = { - compile: function PostScriptCompiler_compile(code, domain, range) { - var stack = []; - var i, ii; - var instructions = []; - var inputSize = domain.length >> 1, - outputSize = range.length >> 1; - var lastRegister = 0; - var n, j; - var num1, num2, ast1, ast2, tmpVar, item; - - for (i = 0; i < inputSize; i++) { - stack.push(new AstArgument(i, domain[i * 2], domain[i * 2 + 1])); - } - - for (i = 0, ii = code.length; i < ii; i++) { - item = code[i]; - - if (typeof item === 'number') { - stack.push(new AstLiteral(item)); - continue; - } - - switch (item) { - case 'add': - if (stack.length < 2) { - return null; - } - - num2 = stack.pop(); - num1 = stack.pop(); - stack.push(buildAddOperation(num1, num2)); - break; - - case 'cvr': - if (stack.length < 1) { - return null; - } - - break; - - case 'mul': - if (stack.length < 2) { - return null; - } - - num2 = stack.pop(); - num1 = stack.pop(); - stack.push(buildMulOperation(num1, num2)); - break; - - case 'sub': - if (stack.length < 2) { - return null; - } - - num2 = stack.pop(); - num1 = stack.pop(); - stack.push(buildSubOperation(num1, num2)); - break; - - case 'exch': - if (stack.length < 2) { - return null; - } - - ast1 = stack.pop(); - ast2 = stack.pop(); - stack.push(ast1, ast2); - break; - - case 'pop': - if (stack.length < 1) { - return null; - } - - stack.pop(); - break; - - case 'index': - if (stack.length < 1) { - return null; - } - - num1 = stack.pop(); - - if (num1.type !== 'literal') { - return null; - } - - n = num1.number; - - if (n < 0 || !Number.isInteger(n) || stack.length < n) { - return null; - } - - ast1 = stack[stack.length - n - 1]; - - if (ast1.type === 'literal' || ast1.type === 'var') { - stack.push(ast1); - break; - } - - tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max); - stack[stack.length - n - 1] = tmpVar; - stack.push(tmpVar); - instructions.push(new AstVariableDefinition(tmpVar, ast1)); - break; - - case 'dup': - if (stack.length < 1) { - return null; - } - - if (typeof code[i + 1] === 'number' && code[i + 2] === 'gt' && code[i + 3] === i + 7 && code[i + 4] === 'jz' && code[i + 5] === 'pop' && code[i + 6] === code[i + 1]) { - num1 = stack.pop(); - stack.push(buildMinOperation(num1, code[i + 1])); - i += 6; - break; - } - - ast1 = stack[stack.length - 1]; - - if (ast1.type === 'literal' || ast1.type === 'var') { - stack.push(ast1); - break; - } - - tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max); - stack[stack.length - 1] = tmpVar; - stack.push(tmpVar); - instructions.push(new AstVariableDefinition(tmpVar, ast1)); - break; - - case 'roll': - if (stack.length < 2) { - return null; - } - - num2 = stack.pop(); - num1 = stack.pop(); - - if (num2.type !== 'literal' || num1.type !== 'literal') { - return null; - } - - j = num2.number; - n = num1.number; - - if (n <= 0 || !Number.isInteger(n) || !Number.isInteger(j) || stack.length < n) { - return null; - } - - j = (j % n + n) % n; - - if (j === 0) { - break; - } - - Array.prototype.push.apply(stack, stack.splice(stack.length - n, n - j)); - break; - - default: - return null; - } - } - - if (stack.length !== outputSize) { - return null; - } - - var result = []; - instructions.forEach(function (instruction) { - var statementBuilder = new ExpressionBuilderVisitor(); - instruction.visit(statementBuilder); - result.push(statementBuilder.toString()); - }); - stack.forEach(function (expr, i) { - var statementBuilder = new ExpressionBuilderVisitor(); - expr.visit(statementBuilder); - var min = range[i * 2], - max = range[i * 2 + 1]; - var out = [statementBuilder.toString()]; - - if (min > expr.min) { - out.unshift('Math.max(', min, ', '); - out.push(')'); - } - - if (max < expr.max) { - out.unshift('Math.min(', max, ', '); - out.push(')'); - } - - out.unshift('dest[destOffset + ', i, '] = '); - out.push(';'); - result.push(out.join('')); - }); - return result.join('\n'); - } - }; - return PostScriptCompiler; - }(); - - exports.PostScriptCompiler = PostScriptCompiler; - - /***/ }), - /* 186 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.PostScriptParser = exports.PostScriptLexer = void 0; - - var _util = __w_extracthighlights_require__(6); - - var _primitives = __w_extracthighlights_require__(155); - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - - var PostScriptParser = - /*#__PURE__*/ - function () { - function PostScriptParser(lexer) { - _classCallCheck(this, PostScriptParser); - - this.lexer = lexer; - this.operators = []; - this.token = null; - this.prev = null; - } - - _createClass(PostScriptParser, [{ - key: "nextToken", - value: function nextToken() { - this.prev = this.token; - this.token = this.lexer.getToken(); - } - }, { - key: "accept", - value: function accept(type) { - if (this.token.type === type) { - this.nextToken(); - return true; - } - - return false; - } - }, { - key: "expect", - value: function expect(type) { - if (this.accept(type)) { - return true; - } - - throw new _util.FormatError("Unexpected symbol: found ".concat(this.token.type, " expected ").concat(type, ".")); - } - }, { - key: "parse", - value: function parse() { - this.nextToken(); - this.expect(PostScriptTokenTypes.LBRACE); - this.parseBlock(); - this.expect(PostScriptTokenTypes.RBRACE); - return this.operators; - } - }, { - key: "parseBlock", - value: function parseBlock() { - while (true) { - if (this.accept(PostScriptTokenTypes.NUMBER)) { - this.operators.push(this.prev.value); - } else if (this.accept(PostScriptTokenTypes.OPERATOR)) { - this.operators.push(this.prev.value); - } else if (this.accept(PostScriptTokenTypes.LBRACE)) { - this.parseCondition(); - } else { - return; - } - } - } - }, { - key: "parseCondition", - value: function parseCondition() { - var conditionLocation = this.operators.length; - this.operators.push(null, null); - this.parseBlock(); - this.expect(PostScriptTokenTypes.RBRACE); - - if (this.accept(PostScriptTokenTypes.IF)) { - this.operators[conditionLocation] = this.operators.length; - this.operators[conditionLocation + 1] = 'jz'; - } else if (this.accept(PostScriptTokenTypes.LBRACE)) { - var jumpLocation = this.operators.length; - this.operators.push(null, null); - var endOfTrue = this.operators.length; - this.parseBlock(); - this.expect(PostScriptTokenTypes.RBRACE); - this.expect(PostScriptTokenTypes.IFELSE); - this.operators[jumpLocation] = this.operators.length; - this.operators[jumpLocation + 1] = 'j'; - this.operators[conditionLocation] = endOfTrue; - this.operators[conditionLocation + 1] = 'jz'; - } else { - throw new _util.FormatError('PS Function: error parsing conditional.'); - } - } - }]); - - return PostScriptParser; - }(); - - exports.PostScriptParser = PostScriptParser; - var PostScriptTokenTypes = { - LBRACE: 0, - RBRACE: 1, - NUMBER: 2, - OPERATOR: 3, - IF: 4, - IFELSE: 5 - }; - - var PostScriptToken = function PostScriptTokenClosure() { - var opCache = Object.create(null); - - var PostScriptToken = - /*#__PURE__*/ - function () { - function PostScriptToken(type, value) { - _classCallCheck(this, PostScriptToken); - - this.type = type; - this.value = value; - } - - _createClass(PostScriptToken, null, [{ - key: "getOperator", - value: function getOperator(op) { - var opValue = opCache[op]; - - if (opValue) { - return opValue; - } - - return opCache[op] = new PostScriptToken(PostScriptTokenTypes.OPERATOR, op); - } - }, { - key: "LBRACE", - get: function get() { - return (0, _util.shadow)(this, 'LBRACE', new PostScriptToken(PostScriptTokenTypes.LBRACE, '{')); - } - }, { - key: "RBRACE", - get: function get() { - return (0, _util.shadow)(this, 'RBRACE', new PostScriptToken(PostScriptTokenTypes.RBRACE, '}')); - } - }, { - key: "IF", - get: function get() { - return (0, _util.shadow)(this, 'IF', new PostScriptToken(PostScriptTokenTypes.IF, 'IF')); - } - }, { - key: "IFELSE", - get: function get() { - return (0, _util.shadow)(this, 'IFELSE', new PostScriptToken(PostScriptTokenTypes.IFELSE, 'IFELSE')); - } - }]); - - return PostScriptToken; - }(); - - return PostScriptToken; - }(); - - var PostScriptLexer = - /*#__PURE__*/ - function () { - function PostScriptLexer(stream) { - _classCallCheck(this, PostScriptLexer); - - this.stream = stream; - this.nextChar(); - this.strBuf = []; - } - - _createClass(PostScriptLexer, [{ - key: "nextChar", - value: function nextChar() { - return this.currentChar = this.stream.getByte(); - } - }, { - key: "getToken", - value: function getToken() { - var comment = false; - var ch = this.currentChar; - - while (true) { - if (ch < 0) { - return _primitives.EOF; - } - - if (comment) { - if (ch === 0x0A || ch === 0x0D) { - comment = false; - } - } else if (ch === 0x25) { - comment = true; - } else if (!(0, _util.isSpace)(ch)) { - break; - } - - ch = this.nextChar(); - } - - switch (ch | 0) { - case 0x30: - case 0x31: - case 0x32: - case 0x33: - case 0x34: - case 0x35: - case 0x36: - case 0x37: - case 0x38: - case 0x39: - case 0x2B: - case 0x2D: - case 0x2E: - return new PostScriptToken(PostScriptTokenTypes.NUMBER, this.getNumber()); - - case 0x7B: - this.nextChar(); - return PostScriptToken.LBRACE; - - case 0x7D: - this.nextChar(); - return PostScriptToken.RBRACE; - } - - var strBuf = this.strBuf; - strBuf.length = 0; - strBuf[0] = String.fromCharCode(ch); - - while ((ch = this.nextChar()) >= 0 && (ch >= 0x41 && ch <= 0x5A || ch >= 0x61 && ch <= 0x7A)) { - strBuf.push(String.fromCharCode(ch)); - } - - var str = strBuf.join(''); - - switch (str.toLowerCase()) { - case 'if': - return PostScriptToken.IF; - - case 'ifelse': - return PostScriptToken.IFELSE; - - default: - return PostScriptToken.getOperator(str); - } - } - }, { - key: "getNumber", - value: function getNumber() { - var ch = this.currentChar; - var strBuf = this.strBuf; - strBuf.length = 0; - strBuf[0] = String.fromCharCode(ch); - - while ((ch = this.nextChar()) >= 0) { - if (ch >= 0x30 && ch <= 0x39 || ch === 0x2D || ch === 0x2E) { - strBuf.push(String.fromCharCode(ch)); - } else { - break; - } - } - - var value = parseFloat(strBuf.join('')); - - if (isNaN(value)) { - throw new _util.FormatError("Invalid floating point number: ".concat(value)); - } - - return value; - } - }]); - - return PostScriptLexer; - }(); - - exports.PostScriptLexer = PostScriptLexer; - - /***/ }), - /* 187 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.MurmurHash3_64 = void 0; - - var _util = __w_extracthighlights_require__(6); - - var MurmurHash3_64 = function MurmurHash3_64Closure(seed) { - var MASK_HIGH = 0xffff0000; - var MASK_LOW = 0xffff; - - function MurmurHash3_64(seed) { - var SEED = 0xc3d2e1f0; - this.h1 = seed ? seed & 0xffffffff : SEED; - this.h2 = seed ? seed & 0xffffffff : SEED; - } - - MurmurHash3_64.prototype = { - update: function MurmurHash3_64_update(input) { - var data, length; - - if ((0, _util.isString)(input)) { - data = new Uint8Array(input.length * 2); - length = 0; - - for (var i = 0, ii = input.length; i < ii; i++) { - var code = input.charCodeAt(i); - - if (code <= 0xff) { - data[length++] = code; - } else { - data[length++] = code >>> 8; - data[length++] = code & 0xff; - } - } - } else if ((0, _util.isArrayBuffer)(input)) { - data = input; - length = data.byteLength; - } else { - throw new Error('Wrong data format in MurmurHash3_64_update. ' + 'Input must be a string or array.'); - } - - var blockCounts = length >> 2; - var tailLength = length - blockCounts * 4; - var dataUint32 = new Uint32Array(data.buffer, 0, blockCounts); - var k1 = 0; - var k2 = 0; - var h1 = this.h1; - var h2 = this.h2; - var C1 = 0xcc9e2d51; - var C2 = 0x1b873593; - var C1_LOW = C1 & MASK_LOW; - var C2_LOW = C2 & MASK_LOW; - - for (var _i = 0; _i < blockCounts; _i++) { - if (_i & 1) { - k1 = dataUint32[_i]; - k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; - k1 = k1 << 15 | k1 >>> 17; - k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; - h1 ^= k1; - h1 = h1 << 13 | h1 >>> 19; - h1 = h1 * 5 + 0xe6546b64; - } else { - k2 = dataUint32[_i]; - k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW; - k2 = k2 << 15 | k2 >>> 17; - k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW; - h2 ^= k2; - h2 = h2 << 13 | h2 >>> 19; - h2 = h2 * 5 + 0xe6546b64; - } - } - - k1 = 0; - - switch (tailLength) { - case 3: - k1 ^= data[blockCounts * 4 + 2] << 16; - - case 2: - k1 ^= data[blockCounts * 4 + 1] << 8; - - case 1: - k1 ^= data[blockCounts * 4]; - k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; - k1 = k1 << 15 | k1 >>> 17; - k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; - - if (blockCounts & 1) { - h1 ^= k1; - } else { - h2 ^= k1; - } - - } - - this.h1 = h1; - this.h2 = h2; - return this; - }, - hexdigest: function MurmurHash3_64_hexdigest() { - var h1 = this.h1; - var h2 = this.h2; - h1 ^= h2 >>> 1; - h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW; - h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16; - h1 ^= h2 >>> 1; - h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW; - h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16; - h1 ^= h2 >>> 1; - - for (var i = 0, arr = [h1, h2], str = ''; i < arr.length; i++) { - var hex = (arr[i] >>> 0).toString(16); - - while (hex.length < 8) { - hex = '0' + hex; - } - - str += hex; - } - - return str; - } - }; - return MurmurHash3_64; - }(); - - exports.MurmurHash3_64 = MurmurHash3_64; - - /***/ }), - /* 188 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.PDFImage = void 0; - - var _util = __w_extracthighlights_require__(6); - - var _primitives = __w_extracthighlights_require__(155); - - var _colorspace = __w_extracthighlights_require__(168); - - var _stream = __w_extracthighlights_require__(157); - - var _jpeg_stream = __w_extracthighlights_require__(163); - - var _jpx = __w_extracthighlights_require__(166); - - function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } - - function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } - - function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } - - function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } - - var PDFImage = function PDFImageClosure() { - function handleImageData(image, nativeDecoder) { - if (nativeDecoder && nativeDecoder.canDecode(image)) { - return nativeDecoder.decode(image).catch(function (reason) { - (0, _util.warn)('Native image decoding failed -- trying to recover: ' + (reason && reason.message)); - return image; - }); - } - - return Promise.resolve(image); - } - - function decodeAndClamp(value, addend, coefficient, max) { - value = addend + value * coefficient; - return value < 0 ? 0 : value > max ? max : value; - } - - function resizeImageMask(src, bpc, w1, h1, w2, h2) { - var length = w2 * h2; - var dest = bpc <= 8 ? new Uint8Array(length) : bpc <= 16 ? new Uint16Array(length) : new Uint32Array(length); - var xRatio = w1 / w2; - var yRatio = h1 / h2; - var i, - j, - py, - newIndex = 0, - oldIndex; - var xScaled = new Uint16Array(w2); - var w1Scanline = w1; - - for (i = 0; i < w2; i++) { - xScaled[i] = Math.floor(i * xRatio); - } - - for (i = 0; i < h2; i++) { - py = Math.floor(i * yRatio) * w1Scanline; - - for (j = 0; j < w2; j++) { - oldIndex = py + xScaled[j]; - dest[newIndex++] = src[oldIndex]; - } - } - - return dest; - } - - function PDFImage(_ref) { - var xref = _ref.xref, - res = _ref.res, - image = _ref.image, - _ref$isInline = _ref.isInline, - isInline = _ref$isInline === void 0 ? false : _ref$isInline, - _ref$smask = _ref.smask, - smask = _ref$smask === void 0 ? null : _ref$smask, - _ref$mask = _ref.mask, - mask = _ref$mask === void 0 ? null : _ref$mask, - _ref$isMask = _ref.isMask, - isMask = _ref$isMask === void 0 ? false : _ref$isMask, - pdfFunctionFactory = _ref.pdfFunctionFactory; - this.image = image; - var dict = image.dict; - var filter = dict.get('Filter'); - - if ((0, _primitives.isName)(filter)) { - switch (filter.name) { - case 'JPXDecode': - var jpxImage = new _jpx.JpxImage(); - jpxImage.parseImageProperties(image.stream); - image.stream.reset(); - image.width = jpxImage.width; - image.height = jpxImage.height; - image.bitsPerComponent = jpxImage.bitsPerComponent; - image.numComps = jpxImage.componentsCount; - break; - - case 'JBIG2Decode': - image.bitsPerComponent = 1; - image.numComps = 1; - break; - } - } - - var width = dict.get('Width', 'W'); - var height = dict.get('Height', 'H'); - - if (Number.isInteger(image.width) && image.width > 0 && Number.isInteger(image.height) && image.height > 0 && (image.width !== width || image.height !== height)) { - (0, _util.warn)('PDFImage - using the Width/Height of the image data, ' + 'rather than the image dictionary.'); - width = image.width; - height = image.height; - } - - if (width < 1 || height < 1) { - throw new _util.FormatError("Invalid image width: ".concat(width, " or ") + "height: ".concat(height)); - } - - this.width = width; - this.height = height; - this.interpolate = dict.get('Interpolate', 'I') || false; - this.imageMask = dict.get('ImageMask', 'IM') || false; - this.matte = dict.get('Matte') || false; - var bitsPerComponent = image.bitsPerComponent; - - if (!bitsPerComponent) { - bitsPerComponent = dict.get('BitsPerComponent', 'BPC'); - - if (!bitsPerComponent) { - if (this.imageMask) { - bitsPerComponent = 1; - } else { - throw new _util.FormatError("Bits per component missing in image: ".concat(this.imageMask)); - } - } - } - - this.bpc = bitsPerComponent; - - if (!this.imageMask) { - var colorSpace = dict.get('ColorSpace', 'CS'); - - if (!colorSpace) { - (0, _util.info)('JPX images (which do not require color spaces)'); - - switch (image.numComps) { - case 1: - colorSpace = _primitives.Name.get('DeviceGray'); - break; - - case 3: - colorSpace = _primitives.Name.get('DeviceRGB'); - break; - - case 4: - colorSpace = _primitives.Name.get('DeviceCMYK'); - break; - - default: - throw new Error("JPX images with ".concat(image.numComps, " ") + 'color components not supported.'); - } - } - - var resources = isInline ? res : null; - this.colorSpace = _colorspace.ColorSpace.parse(colorSpace, xref, resources, pdfFunctionFactory); - this.numComps = this.colorSpace.numComps; - } - - this.decode = dict.getArray('Decode', 'D'); - this.needsDecode = false; - - if (this.decode && (this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode, bitsPerComponent) || isMask && !_colorspace.ColorSpace.isDefaultDecode(this.decode, 1))) { - this.needsDecode = true; - var max = (1 << bitsPerComponent) - 1; - this.decodeCoefficients = []; - this.decodeAddends = []; - var isIndexed = this.colorSpace && this.colorSpace.name === 'Indexed'; - - for (var i = 0, j = 0; i < this.decode.length; i += 2, ++j) { - var dmin = this.decode[i]; - var dmax = this.decode[i + 1]; - this.decodeCoefficients[j] = isIndexed ? (dmax - dmin) / max : dmax - dmin; - this.decodeAddends[j] = isIndexed ? dmin : max * dmin; - } - } - - if (smask) { - this.smask = new PDFImage({ - xref: xref, - res: res, - image: smask, - isInline: isInline, - pdfFunctionFactory: pdfFunctionFactory - }); - } else if (mask) { - if ((0, _primitives.isStream)(mask)) { - var maskDict = mask.dict, - imageMask = maskDict.get('ImageMask', 'IM'); - - if (!imageMask) { - (0, _util.warn)('Ignoring /Mask in image without /ImageMask.'); - } else { - this.mask = new PDFImage({ - xref: xref, - res: res, - image: mask, - isInline: isInline, - isMask: true, - pdfFunctionFactory: pdfFunctionFactory - }); - } - } else { - this.mask = mask; - } - } - } - - PDFImage.buildImage = function (_ref2) { - _ref2.handler; - var xref = _ref2.xref, - res = _ref2.res, - image = _ref2.image, - _ref2$isInline = _ref2.isInline, - isInline = _ref2$isInline === void 0 ? false : _ref2$isInline, - _ref2$nativeDecoder = _ref2.nativeDecoder, - nativeDecoder = _ref2$nativeDecoder === void 0 ? null : _ref2$nativeDecoder, - pdfFunctionFactory = _ref2.pdfFunctionFactory; - var imagePromise = handleImageData(image, nativeDecoder); - var smaskPromise; - var maskPromise; - var smask = image.dict.get('SMask'); - var mask = image.dict.get('Mask'); - - if (smask) { - smaskPromise = handleImageData(smask, nativeDecoder); - maskPromise = Promise.resolve(null); - } else { - smaskPromise = Promise.resolve(null); - - if (mask) { - if ((0, _primitives.isStream)(mask)) { - maskPromise = handleImageData(mask, nativeDecoder); - } else if (Array.isArray(mask)) { - maskPromise = Promise.resolve(mask); - } else { - (0, _util.warn)('Unsupported mask format.'); - maskPromise = Promise.resolve(null); - } - } else { - maskPromise = Promise.resolve(null); - } - } - - return Promise.all([imagePromise, smaskPromise, maskPromise]).then(function (_ref3) { - var _ref4 = _slicedToArray(_ref3, 3), - imageData = _ref4[0], - smaskData = _ref4[1], - maskData = _ref4[2]; - - return new PDFImage({ - xref: xref, - res: res, - image: imageData, - isInline: isInline, - smask: smaskData, - mask: maskData, - pdfFunctionFactory: pdfFunctionFactory - }); - }); - }; - - PDFImage.createMask = function (_ref5) { - var imgArray = _ref5.imgArray, - width = _ref5.width, - height = _ref5.height, - imageIsFromDecodeStream = _ref5.imageIsFromDecodeStream, - inverseDecode = _ref5.inverseDecode; - var computedLength = (width + 7 >> 3) * height; - var actualLength = imgArray.byteLength; - var haveFullData = computedLength === actualLength; - var data, i; - - if (imageIsFromDecodeStream && (!inverseDecode || haveFullData)) { - data = imgArray; - } else if (!inverseDecode) { - data = new Uint8ClampedArray(actualLength); - data.set(imgArray); - } else { - data = new Uint8ClampedArray(computedLength); - data.set(imgArray); - - for (i = actualLength; i < computedLength; i++) { - data[i] = 0xff; - } - } - - if (inverseDecode) { - for (i = 0; i < actualLength; i++) { - data[i] ^= 0xFF; - } - } - - return { - data: data, - width: width, - height: height - }; - }; - - PDFImage.prototype = { - get drawWidth() { - return Math.max(this.width, this.smask && this.smask.width || 0, this.mask && this.mask.width || 0); - }, - - get drawHeight() { - return Math.max(this.height, this.smask && this.smask.height || 0, this.mask && this.mask.height || 0); - }, - - decodeBuffer: function decodeBuffer(buffer) { - var bpc = this.bpc; - var numComps = this.numComps; - var decodeAddends = this.decodeAddends; - var decodeCoefficients = this.decodeCoefficients; - var max = (1 << bpc) - 1; - var i, ii; - - if (bpc === 1) { - for (i = 0, ii = buffer.length; i < ii; i++) { - buffer[i] = +!buffer[i]; - } - - return; - } - - var index = 0; - - for (i = 0, ii = this.width * this.height; i < ii; i++) { - for (var j = 0; j < numComps; j++) { - buffer[index] = decodeAndClamp(buffer[index], decodeAddends[j], decodeCoefficients[j], max); - index++; - } - } - }, - getComponents: function getComponents(buffer) { - var bpc = this.bpc; - - if (bpc === 8) { - return buffer; - } - - var width = this.width; - var height = this.height; - var numComps = this.numComps; - var length = width * height * numComps; - var bufferPos = 0; - var output = bpc <= 8 ? new Uint8Array(length) : bpc <= 16 ? new Uint16Array(length) : new Uint32Array(length); - var rowComps = width * numComps; - var max = (1 << bpc) - 1; - var i = 0, - ii, - buf; - - if (bpc === 1) { - var mask, loop1End, loop2End; - - for (var j = 0; j < height; j++) { - loop1End = i + (rowComps & ~7); - loop2End = i + rowComps; - - while (i < loop1End) { - buf = buffer[bufferPos++]; - output[i] = buf >> 7 & 1; - output[i + 1] = buf >> 6 & 1; - output[i + 2] = buf >> 5 & 1; - output[i + 3] = buf >> 4 & 1; - output[i + 4] = buf >> 3 & 1; - output[i + 5] = buf >> 2 & 1; - output[i + 6] = buf >> 1 & 1; - output[i + 7] = buf & 1; - i += 8; - } - - if (i < loop2End) { - buf = buffer[bufferPos++]; - mask = 128; - - while (i < loop2End) { - output[i++] = +!!(buf & mask); - mask >>= 1; - } - } - } - } else { - var bits = 0; - buf = 0; - - for (i = 0, ii = length; i < ii; ++i) { - if (i % rowComps === 0) { - buf = 0; - bits = 0; - } - - while (bits < bpc) { - buf = buf << 8 | buffer[bufferPos++]; - bits += 8; - } - - var remainingBits = bits - bpc; - var value = buf >> remainingBits; - output[i] = value < 0 ? 0 : value > max ? max : value; - buf = buf & (1 << remainingBits) - 1; - bits = remainingBits; - } - } - - return output; - }, - fillOpacity: function fillOpacity(rgbaBuf, width, height, actualHeight, image) { - var smask = this.smask; - var mask = this.mask; - var alphaBuf, sw, sh, i, ii, j; - - if (smask) { - sw = smask.width; - sh = smask.height; - alphaBuf = new Uint8ClampedArray(sw * sh); - smask.fillGrayBuffer(alphaBuf); - - if (sw !== width || sh !== height) { - alphaBuf = resizeImageMask(alphaBuf, smask.bpc, sw, sh, width, height); - } - } else if (mask) { - if (mask instanceof PDFImage) { - sw = mask.width; - sh = mask.height; - alphaBuf = new Uint8ClampedArray(sw * sh); - mask.numComps = 1; - mask.fillGrayBuffer(alphaBuf); - - for (i = 0, ii = sw * sh; i < ii; ++i) { - alphaBuf[i] = 255 - alphaBuf[i]; - } - - if (sw !== width || sh !== height) { - alphaBuf = resizeImageMask(alphaBuf, mask.bpc, sw, sh, width, height); - } - } else if (Array.isArray(mask)) { - alphaBuf = new Uint8ClampedArray(width * height); - var numComps = this.numComps; - - for (i = 0, ii = width * height; i < ii; ++i) { - var opacity = 0; - var imageOffset = i * numComps; - - for (j = 0; j < numComps; ++j) { - var color = image[imageOffset + j]; - var maskOffset = j * 2; - - if (color < mask[maskOffset] || color > mask[maskOffset + 1]) { - opacity = 255; - break; - } - } - - alphaBuf[i] = opacity; - } - } else { - throw new _util.FormatError('Unknown mask format.'); - } - } - - if (alphaBuf) { - for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) { - rgbaBuf[j] = alphaBuf[i]; - } - } else { - for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) { - rgbaBuf[j] = 255; - } - } - }, - undoPreblend: function undoPreblend(buffer, width, height) { - var matte = this.smask && this.smask.matte; - - if (!matte) { - return; - } - - var matteRgb = this.colorSpace.getRgb(matte, 0); - var matteR = matteRgb[0]; - var matteG = matteRgb[1]; - var matteB = matteRgb[2]; - var length = width * height * 4; - - for (var i = 0; i < length; i += 4) { - var alpha = buffer[i + 3]; - - if (alpha === 0) { - buffer[i] = 255; - buffer[i + 1] = 255; - buffer[i + 2] = 255; - continue; - } - - var k = 255 / alpha; - buffer[i] = (buffer[i] - matteR) * k + matteR; - buffer[i + 1] = (buffer[i + 1] - matteG) * k + matteG; - buffer[i + 2] = (buffer[i + 2] - matteB) * k + matteB; - } - }, - createImageData: function createImageData() { - var forceRGBA = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var drawWidth = this.drawWidth; - var drawHeight = this.drawHeight; - var imgData = { - width: drawWidth, - height: drawHeight, - kind: 0, - data: null - }; - var numComps = this.numComps; - var originalWidth = this.width; - var originalHeight = this.height; - var bpc = this.bpc; - var rowBytes = originalWidth * numComps * bpc + 7 >> 3; - var imgArray; - - if (!forceRGBA) { - var kind; - - if (this.colorSpace.name === 'DeviceGray' && bpc === 1) { - kind = _util.ImageKind.GRAYSCALE_1BPP; - } else if (this.colorSpace.name === 'DeviceRGB' && bpc === 8 && !this.needsDecode) { - kind = _util.ImageKind.RGB_24BPP; - } - - if (kind && !this.smask && !this.mask && drawWidth === originalWidth && drawHeight === originalHeight) { - imgData.kind = kind; - imgArray = this.getImageBytes(originalHeight * rowBytes); - - if (this.image instanceof _stream.DecodeStream) { - imgData.data = imgArray; - } else { - var newArray = new Uint8ClampedArray(imgArray.length); - newArray.set(imgArray); - imgData.data = newArray; - } - - if (this.needsDecode) { - (0, _util.assert)(kind === _util.ImageKind.GRAYSCALE_1BPP, 'PDFImage.createImageData: The image must be grayscale.'); - var buffer = imgData.data; - - for (var i = 0, ii = buffer.length; i < ii; i++) { - buffer[i] ^= 0xff; - } - } - - return imgData; - } - - if (this.image instanceof _jpeg_stream.JpegStream && !this.smask && !this.mask) { - var imageLength = originalHeight * rowBytes; - - switch (this.colorSpace.name) { - case 'DeviceGray': - imageLength *= 3; - - case 'DeviceRGB': - case 'DeviceCMYK': - imgData.kind = _util.ImageKind.RGB_24BPP; - imgData.data = this.getImageBytes(imageLength, drawWidth, drawHeight, true); - return imgData; - } - } - } - - imgArray = this.getImageBytes(originalHeight * rowBytes); - var actualHeight = 0 | imgArray.length / rowBytes * drawHeight / originalHeight; - var comps = this.getComponents(imgArray); - var alpha01, maybeUndoPreblend; - - if (!forceRGBA && !this.smask && !this.mask) { - imgData.kind = _util.ImageKind.RGB_24BPP; - imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 3); - alpha01 = 0; - maybeUndoPreblend = false; - } else { - imgData.kind = _util.ImageKind.RGBA_32BPP; - imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 4); - alpha01 = 1; - maybeUndoPreblend = true; - this.fillOpacity(imgData.data, drawWidth, drawHeight, actualHeight, comps); - } - - if (this.needsDecode) { - this.decodeBuffer(comps); - } - - this.colorSpace.fillRgb(imgData.data, originalWidth, originalHeight, drawWidth, drawHeight, actualHeight, bpc, comps, alpha01); - - if (maybeUndoPreblend) { - this.undoPreblend(imgData.data, drawWidth, actualHeight); - } - - return imgData; - }, - fillGrayBuffer: function fillGrayBuffer(buffer) { - var numComps = this.numComps; - - if (numComps !== 1) { - throw new _util.FormatError("Reading gray scale from a color image: ".concat(numComps)); - } - - var width = this.width; - var height = this.height; - var bpc = this.bpc; - var rowBytes = width * numComps * bpc + 7 >> 3; - var imgArray = this.getImageBytes(height * rowBytes); - var comps = this.getComponents(imgArray); - var i, length; - - if (bpc === 1) { - length = width * height; - - if (this.needsDecode) { - for (i = 0; i < length; ++i) { - buffer[i] = comps[i] - 1 & 255; - } - } else { - for (i = 0; i < length; ++i) { - buffer[i] = -comps[i] & 255; - } - } - - return; - } - - if (this.needsDecode) { - this.decodeBuffer(comps); - } - - length = width * height; - var scale = 255 / ((1 << bpc) - 1); - - for (i = 0; i < length; ++i) { - buffer[i] = scale * comps[i]; - } - }, - getImageBytes: function getImageBytes(length, drawWidth, drawHeight) { - var forceRGB = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - this.image.reset(); - this.image.drawWidth = drawWidth || this.width; - this.image.drawHeight = drawHeight || this.height; - this.image.forceRGB = !!forceRGB; - return this.image.getBytes(length, true); - } - }; - return PDFImage; - }(); - - exports.PDFImage = PDFImage; - - /***/ }), - /* 189 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.MessageHandler = MessageHandler; - - var _regenerator = _interopRequireDefault(__w_extracthighlights_require__(2)); - - var _util = __w_extracthighlights_require__(6); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - - function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - - function resolveCall(_x, _x2) { - return _resolveCall.apply(this, arguments); - } - - function _resolveCall() { - _resolveCall = _asyncToGenerator( - /*#__PURE__*/ - _regenerator.default.mark(function _callee(fn, args) { - var thisArg, - _args = arguments; - return _regenerator.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - thisArg = _args.length > 2 && _args[2] !== undefined ? _args[2] : null; - - if (fn) { - _context.next = 3; - break; - } - - return _context.abrupt("return"); - - case 3: - return _context.abrupt("return", fn.apply(thisArg, args)); - - case 4: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - return _resolveCall.apply(this, arguments); - } - - function wrapReason(reason) { - if (_typeof(reason) !== 'object') { - return reason; - } - - switch (reason.name) { - case 'AbortException': - return new _util.AbortException(reason.message); - - case 'MissingPDFException': - return new _util.MissingPDFException(reason.message); - - case 'UnexpectedResponseException': - return new _util.UnexpectedResponseException(reason.message, reason.status); - - default: - return new _util.UnknownErrorException(reason.message, reason.details); - } - } - - function makeReasonSerializable(reason) { - if (!(reason instanceof Error) || reason instanceof _util.AbortException || reason instanceof _util.MissingPDFException || reason instanceof _util.UnexpectedResponseException || reason instanceof _util.UnknownErrorException) { - return reason; - } - - return new _util.UnknownErrorException(reason.message, reason.toString()); - } - - function resolveOrReject(capability, success, reason) { - if (success) { - capability.resolve(); - } else { - capability.reject(reason); - } - } - - function finalize(promise) { - return Promise.resolve(promise).catch(function () {}); - } - - function MessageHandler(sourceName, targetName, comObj) { - var _this = this; - - this.sourceName = sourceName; - this.targetName = targetName; - this.comObj = comObj; - this.callbackId = 1; - this.streamId = 1; - this.postMessageTransfers = true; - this.streamSinks = Object.create(null); - this.streamControllers = Object.create(null); - var callbacksCapabilities = this.callbacksCapabilities = Object.create(null); - var ah = this.actionHandler = Object.create(null); - - this._onComObjOnMessage = function (event) { - var data = event.data; - - if (data.targetName !== _this.sourceName) { - return; - } - - if (data.stream) { - _this._processStreamMessage(data); - } else if (data.isReply) { - var callbackId = data.callbackId; - - if (data.callbackId in callbacksCapabilities) { - var callback = callbacksCapabilities[callbackId]; - delete callbacksCapabilities[callbackId]; - - if ('error' in data) { - callback.reject(wrapReason(data.error)); - } else { - callback.resolve(data.data); - } - } else { - throw new Error("Cannot resolve callback ".concat(callbackId)); - } - } else if (data.action in ah) { - var action = ah[data.action]; - - if (data.callbackId) { - var _sourceName = _this.sourceName; - var _targetName = data.sourceName; - Promise.resolve().then(function () { - return action[0].call(action[1], data.data); - }).then(function (result) { - comObj.postMessage({ - sourceName: _sourceName, - targetName: _targetName, - isReply: true, - callbackId: data.callbackId, - data: result - }); - }, function (reason) { - comObj.postMessage({ - sourceName: _sourceName, - targetName: _targetName, - isReply: true, - callbackId: data.callbackId, - error: makeReasonSerializable(reason) - }); - }); - } else if (data.streamId) { - _this._createStreamSink(data); - } else { - action[0].call(action[1], data.data); - } - } else { - throw new Error("Unknown action from worker: ".concat(data.action)); - } - }; - - comObj.addEventListener('message', this._onComObjOnMessage); - } - - MessageHandler.prototype = { - on: function on(actionName, handler, scope) { - var ah = this.actionHandler; - - if (ah[actionName]) { - throw new Error("There is already an actionName called \"".concat(actionName, "\"")); - } - - ah[actionName] = [handler, scope]; - }, - send: function send(actionName, data, transfers) { - var message = { - sourceName: this.sourceName, - targetName: this.targetName, - action: actionName, - data: data - }; - this.postMessage(message, transfers); - }, - sendWithPromise: function sendWithPromise(actionName, data, transfers) { - var callbackId = this.callbackId++; - var message = { - sourceName: this.sourceName, - targetName: this.targetName, - action: actionName, - data: data, - callbackId: callbackId - }; - var capability = (0, _util.createPromiseCapability)(); - this.callbacksCapabilities[callbackId] = capability; - - try { - this.postMessage(message, transfers); - } catch (e) { - capability.reject(e); - } - - return capability.promise; - }, - sendWithStream: function sendWithStream(actionName, data, queueingStrategy, transfers) { - var _this2 = this; - - var streamId = this.streamId++; - var sourceName = this.sourceName; - var targetName = this.targetName; - return new _util.ReadableStream({ - start: function start(controller) { - var startCapability = (0, _util.createPromiseCapability)(); - _this2.streamControllers[streamId] = { - controller: controller, - startCall: startCapability, - isClosed: false - }; - - _this2.postMessage({ - sourceName: sourceName, - targetName: targetName, - action: actionName, - streamId: streamId, - data: data, - desiredSize: controller.desiredSize - }); - - return startCapability.promise; - }, - pull: function pull(controller) { - var pullCapability = (0, _util.createPromiseCapability)(); - _this2.streamControllers[streamId].pullCall = pullCapability; - - _this2.postMessage({ - sourceName: sourceName, - targetName: targetName, - stream: 'pull', - streamId: streamId, - desiredSize: controller.desiredSize - }); - - return pullCapability.promise; - }, - cancel: function cancel(reason) { - var cancelCapability = (0, _util.createPromiseCapability)(); - _this2.streamControllers[streamId].cancelCall = cancelCapability; - _this2.streamControllers[streamId].isClosed = true; - - _this2.postMessage({ - sourceName: sourceName, - targetName: targetName, - stream: 'cancel', - reason: reason, - streamId: streamId - }); - - return cancelCapability.promise; - } - }, queueingStrategy); - }, - _createStreamSink: function _createStreamSink(data) { - var _this3 = this; - - var self = this; - var action = this.actionHandler[data.action]; - var streamId = data.streamId; - var desiredSize = data.desiredSize; - var sourceName = this.sourceName; - var targetName = data.sourceName; - var capability = (0, _util.createPromiseCapability)(); - - var sendStreamRequest = function sendStreamRequest(_ref) { - var stream = _ref.stream, - chunk = _ref.chunk, - transfers = _ref.transfers, - success = _ref.success, - reason = _ref.reason; - - _this3.postMessage({ - sourceName: sourceName, - targetName: targetName, - stream: stream, - streamId: streamId, - chunk: chunk, - success: success, - reason: reason - }, transfers); - }; - - var streamSink = { - enqueue: function enqueue(chunk) { - var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; - var transfers = arguments.length > 2 ? arguments[2] : undefined; - - if (this.isCancelled) { - return; - } - - var lastDesiredSize = this.desiredSize; - this.desiredSize -= size; - - if (lastDesiredSize > 0 && this.desiredSize <= 0) { - this.sinkCapability = (0, _util.createPromiseCapability)(); - this.ready = this.sinkCapability.promise; - } - - sendStreamRequest({ - stream: 'enqueue', - chunk: chunk, - transfers: transfers - }); - }, - close: function close() { - if (this.isCancelled) { - return; - } - - this.isCancelled = true; - sendStreamRequest({ - stream: 'close' - }); - delete self.streamSinks[streamId]; - }, - error: function error(reason) { - if (this.isCancelled) { - return; - } - - this.isCancelled = true; - sendStreamRequest({ - stream: 'error', - reason: reason - }); - }, - sinkCapability: capability, - onPull: null, - onCancel: null, - isCancelled: false, - desiredSize: desiredSize, - ready: null - }; - streamSink.sinkCapability.resolve(); - streamSink.ready = streamSink.sinkCapability.promise; - this.streamSinks[streamId] = streamSink; - resolveCall(action[0], [data.data, streamSink], action[1]).then(function () { - sendStreamRequest({ - stream: 'start_complete', - success: true - }); - }, function (reason) { - sendStreamRequest({ - stream: 'start_complete', - success: false, - reason: reason - }); - }); - }, - _processStreamMessage: function _processStreamMessage(data) { - var _this4 = this; - - var sourceName = this.sourceName; - var targetName = data.sourceName; - var streamId = data.streamId; - - var sendStreamResponse = function sendStreamResponse(_ref2) { - var stream = _ref2.stream, - success = _ref2.success, - reason = _ref2.reason; - - _this4.comObj.postMessage({ - sourceName: sourceName, - targetName: targetName, - stream: stream, - success: success, - streamId: streamId, - reason: reason - }); - }; - - var deleteStreamController = function deleteStreamController() { - Promise.all([_this4.streamControllers[data.streamId].startCall, _this4.streamControllers[data.streamId].pullCall, _this4.streamControllers[data.streamId].cancelCall].map(function (capability) { - return capability && finalize(capability.promise); - })).then(function () { - delete _this4.streamControllers[data.streamId]; - }); - }; - - switch (data.stream) { - case 'start_complete': - resolveOrReject(this.streamControllers[data.streamId].startCall, data.success, wrapReason(data.reason)); - break; - - case 'pull_complete': - resolveOrReject(this.streamControllers[data.streamId].pullCall, data.success, wrapReason(data.reason)); - break; - - case 'pull': - if (!this.streamSinks[data.streamId]) { - sendStreamResponse({ - stream: 'pull_complete', - success: true - }); - break; - } - - if (this.streamSinks[data.streamId].desiredSize <= 0 && data.desiredSize > 0) { - this.streamSinks[data.streamId].sinkCapability.resolve(); - } - - this.streamSinks[data.streamId].desiredSize = data.desiredSize; - resolveCall(this.streamSinks[data.streamId].onPull).then(function () { - sendStreamResponse({ - stream: 'pull_complete', - success: true - }); - }, function (reason) { - sendStreamResponse({ - stream: 'pull_complete', - success: false, - reason: reason - }); - }); - break; - - case 'enqueue': - (0, _util.assert)(this.streamControllers[data.streamId], 'enqueue should have stream controller'); - - if (!this.streamControllers[data.streamId].isClosed) { - this.streamControllers[data.streamId].controller.enqueue(data.chunk); - } - - break; - - case 'close': - (0, _util.assert)(this.streamControllers[data.streamId], 'close should have stream controller'); - - if (this.streamControllers[data.streamId].isClosed) { - break; - } - - this.streamControllers[data.streamId].isClosed = true; - this.streamControllers[data.streamId].controller.close(); - deleteStreamController(); - break; - - case 'error': - (0, _util.assert)(this.streamControllers[data.streamId], 'error should have stream controller'); - this.streamControllers[data.streamId].controller.error(wrapReason(data.reason)); - deleteStreamController(); - break; - - case 'cancel_complete': - resolveOrReject(this.streamControllers[data.streamId].cancelCall, data.success, wrapReason(data.reason)); - deleteStreamController(); - break; - - case 'cancel': - if (!this.streamSinks[data.streamId]) { - break; - } - - resolveCall(this.streamSinks[data.streamId].onCancel, [wrapReason(data.reason)]).then(function () { - sendStreamResponse({ - stream: 'cancel_complete', - success: true - }); - }, function (reason) { - sendStreamResponse({ - stream: 'cancel_complete', - success: false, - reason: reason - }); - }); - this.streamSinks[data.streamId].sinkCapability.reject(wrapReason(data.reason)); - this.streamSinks[data.streamId].isCancelled = true; - delete this.streamSinks[data.streamId]; - break; - - default: - throw new Error('Unexpected stream case'); - } - }, - postMessage: function postMessage(message, transfers) { - if (transfers && this.postMessageTransfers) { - this.comObj.postMessage(message, transfers); - } else { - this.comObj.postMessage(message); - } - }, - destroy: function destroy() { - this.comObj.removeEventListener('message', this._onComObjOnMessage); - } - }; - - /***/ }) - /******/ ]); -}); - -}); - -var extracthighlights = createCommonjsModule(function (module, exports) { -/** - * @licstart The following is the entire license notice for the - * Javascript code in this page - * - * Copyright 2018 Mozilla Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * This would prove I've got at least some control... - * - * @licend The above is the entire license notice for the - * Javascript code in this page - */ - -(function webpackUniversalModuleDefinition(root, factory) { - module.exports = factory(); -})(commonjsGlobal, function() { - return /******/ (function(modules) { // webpackBootstrap - /******/ // The module cache - /******/ var installedModules = {}; - /******/ - /******/ // The require function - /******/ function __w_extracthighlights_require__(moduleId) { - /******/ - /******/ // Check if module is in cache - /******/ if(installedModules[moduleId]) { - /******/ return installedModules[moduleId].exports; - /******/ } - /******/ // Create a new module (and put it into the cache) - /******/ var module = installedModules[moduleId] = { - /******/ i: moduleId, - /******/ l: false, - /******/ exports: {} - /******/ }; - /******/ - /******/ // Execute the module function - /******/ modules[moduleId].call(module.exports, module, module.exports, __w_extracthighlights_require__); - /******/ - /******/ // Flag the module as loaded - /******/ module.l = true; - /******/ - /******/ // Return the exports of the module - /******/ return module.exports; - /******/ } - /******/ - /******/ - /******/ // expose the modules object (__webpack_modules__) - /******/ __w_extracthighlights_require__.m = modules; - /******/ - /******/ // expose the module cache - /******/ __w_extracthighlights_require__.c = installedModules; - /******/ - /******/ // define getter function for harmony exports - /******/ __w_extracthighlights_require__.d = function(exports, name, getter) { - /******/ if(!__w_extracthighlights_require__.o(exports, name)) { - /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); - /******/ } - /******/ }; - /******/ - /******/ // define __esModule on exports - /******/ __w_extracthighlights_require__.r = function(exports) { - /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { - /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); - /******/ } - /******/ Object.defineProperty(exports, '__esModule', { value: true }); - /******/ }; - /******/ - /******/ // create a fake namespace object - /******/ // mode & 1: value is a module id, require it - /******/ // mode & 2: merge all properties of value into the ns - /******/ // mode & 4: return value when already ns object - /******/ // mode & 8|1: behave like require - /******/ __w_extracthighlights_require__.t = function(value, mode) { - /******/ if(mode & 1) value = __w_extracthighlights_require__(value); - /******/ if(mode & 8) return value; - /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; - /******/ var ns = Object.create(null); - /******/ __w_extracthighlights_require__.r(ns); - /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); - /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __w_extracthighlights_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); - /******/ return ns; - /******/ }; - /******/ - /******/ // getDefaultExport function for compatibility with non-harmony modules - /******/ __w_extracthighlights_require__.n = function(module) { - /******/ var getter = module && module.__esModule ? - /******/ function getDefault() { return module['default']; } : - /******/ function getModuleExports() { return module; }; - /******/ __w_extracthighlights_require__.d(getter, 'a', getter); - /******/ return getter; - /******/ }; - /******/ - /******/ // Object.prototype.hasOwnProperty.call - /******/ __w_extracthighlights_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; - /******/ - /******/ // __webpack_public_path__ - /******/ __w_extracthighlights_require__.p = ""; - /******/ - /******/ - /******/ // Load entry module and return exports - /******/ return __w_extracthighlights_require__(__w_extracthighlights_require__.s = 0); - /******/ }) - /************************************************************************/ - /******/ ([ - /* 0 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - var extracthighlightsSharedUtil = __w_extracthighlights_require__(1); - - var extracthighlightsDisplayAPI = __w_extracthighlights_require__(146); - - var extracthighlightsDisplayTextLayer = __w_extracthighlights_require__(162); - - var extracthighlightsDisplayAnnotationLayer = __w_extracthighlights_require__(163); - - var extracthighlightsDisplayDOMUtils = __w_extracthighlights_require__(151); - - var extracthighlightsDisplaySVG = __w_extracthighlights_require__(164); - - var extracthighlightsDisplayWorkerOptions = __w_extracthighlights_require__(156); - - var extracthighlightsDisplayAPICompatibility = __w_extracthighlights_require__(153); - - { - var isNodeJS = __w_extracthighlights_require__(4); - - if (isNodeJS()) { - var PDFNodeStream = __w_extracthighlights_require__(165).PDFNodeStream; - - extracthighlightsDisplayAPI.setPDFNetworkStreamFactory(function (params) { - return new PDFNodeStream(params); - }); - } else if (typeof Response !== 'undefined' && 'body' in Response.prototype && typeof ReadableStream !== 'undefined') { - var PDFFetchStream = __w_extracthighlights_require__(168).PDFFetchStream; - - extracthighlightsDisplayAPI.setPDFNetworkStreamFactory(function (params) { - return new PDFFetchStream(params); - }); - } else { - var PDFNetworkStream = __w_extracthighlights_require__(169).PDFNetworkStream; - - extracthighlightsDisplayAPI.setPDFNetworkStreamFactory(function (params) { - return new PDFNetworkStream(params); - }); - } - } - exports.build = extracthighlightsDisplayAPI.build; - exports.version = extracthighlightsDisplayAPI.version; - exports.getDocument = extracthighlightsDisplayAPI.getDocument; - exports.LoopbackPort = extracthighlightsDisplayAPI.LoopbackPort; - exports.PDFDataRangeTransport = extracthighlightsDisplayAPI.PDFDataRangeTransport; - exports.PDFWorker = extracthighlightsDisplayAPI.PDFWorker; - exports.renderTextLayer = extracthighlightsDisplayTextLayer.renderTextLayer; - exports.AnnotationLayer = extracthighlightsDisplayAnnotationLayer.AnnotationLayer; - exports.createPromiseCapability = extracthighlightsSharedUtil.createPromiseCapability; - exports.PasswordResponses = extracthighlightsSharedUtil.PasswordResponses; - exports.InvalidPDFException = extracthighlightsSharedUtil.InvalidPDFException; - exports.MissingPDFException = extracthighlightsSharedUtil.MissingPDFException; - exports.SVGGraphics = extracthighlightsDisplaySVG.SVGGraphics; - exports.NativeImageDecoding = extracthighlightsSharedUtil.NativeImageDecoding; - exports.CMapCompressionType = extracthighlightsSharedUtil.CMapCompressionType; - exports.PermissionFlag = extracthighlightsSharedUtil.PermissionFlag; - exports.UnexpectedResponseException = extracthighlightsSharedUtil.UnexpectedResponseException; - exports.OPS = extracthighlightsSharedUtil.OPS; - exports.VerbosityLevel = extracthighlightsSharedUtil.VerbosityLevel; - exports.UNSUPPORTED_FEATURES = extracthighlightsSharedUtil.UNSUPPORTED_FEATURES; - exports.createValidAbsoluteUrl = extracthighlightsSharedUtil.createValidAbsoluteUrl; - exports.createObjectURL = extracthighlightsSharedUtil.createObjectURL; - exports.removeNullCharacters = extracthighlightsSharedUtil.removeNullCharacters; - exports.shadow = extracthighlightsSharedUtil.shadow; - exports.Util = extracthighlightsSharedUtil.Util; - exports.ReadableStream = extracthighlightsSharedUtil.ReadableStream; - exports.URL = extracthighlightsSharedUtil.URL; - exports.RenderingCancelledException = extracthighlightsDisplayDOMUtils.RenderingCancelledException; - exports.getFilenameFromUrl = extracthighlightsDisplayDOMUtils.getFilenameFromUrl; - exports.LinkTarget = extracthighlightsDisplayDOMUtils.LinkTarget; - exports.addLinkAttributes = extracthighlightsDisplayDOMUtils.addLinkAttributes; - exports.loadScript = extracthighlightsDisplayDOMUtils.loadScript; - exports.GlobalWorkerOptions = extracthighlightsDisplayWorkerOptions.GlobalWorkerOptions; - exports.apiCompatibilityParams = extracthighlightsDisplayAPICompatibility.apiCompatibilityParams; - - /***/ }), - /* 1 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.toRomanNumerals = toRomanNumerals; - exports.arrayByteLength = arrayByteLength; - exports.arraysToBytes = arraysToBytes; - exports.assert = assert; - exports.bytesToString = bytesToString; - exports.createPromiseCapability = createPromiseCapability; - exports.deprecated = deprecated; - exports.getInheritableProperty = getInheritableProperty; - exports.getLookupTableFactory = getLookupTableFactory; - exports.getVerbosityLevel = getVerbosityLevel; - exports.info = info; - exports.isArrayBuffer = isArrayBuffer; - exports.isBool = isBool; - exports.isEmptyObj = isEmptyObj; - exports.isNum = isNum; - exports.isString = isString; - exports.isSpace = isSpace; - exports.isSameOrigin = isSameOrigin; - exports.createValidAbsoluteUrl = createValidAbsoluteUrl; - exports.isLittleEndian = isLittleEndian; - exports.isEvalSupported = isEvalSupported; - exports.log2 = log2; - exports.readInt8 = readInt8; - exports.readUint16 = readUint16; - exports.readUint32 = readUint32; - exports.removeNullCharacters = removeNullCharacters; - exports.setVerbosityLevel = setVerbosityLevel; - exports.shadow = shadow; - exports.string32 = string32; - exports.stringToBytes = stringToBytes; - exports.stringToPDFString = stringToPDFString; - exports.stringToUTF8String = stringToUTF8String; - exports.utf8StringToString = utf8StringToString; - exports.warn = warn; - exports.unreachable = unreachable; - Object.defineProperty(exports, "ReadableStream", { - enumerable: true, - get: function get() { - return _streams_polyfill.ReadableStream; - } - }); - Object.defineProperty(exports, "URL", { - enumerable: true, - get: function get() { - return _url_polyfill.URL; - } - }); - exports.createObjectURL = exports.FormatError = exports.XRefParseException = exports.XRefEntryException = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.NativeImageDecoding = exports.MissingPDFException = exports.MissingDataException = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = void 0; - - __w_extracthighlights_require__(2); - - var _streams_polyfill = __w_extracthighlights_require__(142); - - var _url_polyfill = __w_extracthighlights_require__(144); - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; - exports.IDENTITY_MATRIX = IDENTITY_MATRIX; - var FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; - exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX; - var NativeImageDecoding = { - NONE: 'none', - DECODE: 'decode', - DISPLAY: 'display' - }; - exports.NativeImageDecoding = NativeImageDecoding; - var PermissionFlag = { - PRINT: 0x04, - MODIFY_CONTENTS: 0x08, - COPY: 0x10, - MODIFY_ANNOTATIONS: 0x20, - FILL_INTERACTIVE_FORMS: 0x100, - COPY_FOR_ACCESSIBILITY: 0x200, - ASSEMBLE: 0x400, - PRINT_HIGH_QUALITY: 0x800 - }; - exports.PermissionFlag = PermissionFlag; - var TextRenderingMode = { - FILL: 0, - STROKE: 1, - FILL_STROKE: 2, - INVISIBLE: 3, - FILL_ADD_TO_PATH: 4, - STROKE_ADD_TO_PATH: 5, - FILL_STROKE_ADD_TO_PATH: 6, - ADD_TO_PATH: 7, - FILL_STROKE_MASK: 3, - ADD_TO_PATH_FLAG: 4 - }; - exports.TextRenderingMode = TextRenderingMode; - var ImageKind = { - GRAYSCALE_1BPP: 1, - RGB_24BPP: 2, - RGBA_32BPP: 3 - }; - exports.ImageKind = ImageKind; - var AnnotationType = { - TEXT: 1, - LINK: 2, - FREETEXT: 3, - LINE: 4, - SQUARE: 5, - CIRCLE: 6, - POLYGON: 7, - POLYLINE: 8, - HIGHLIGHT: 9, - UNDERLINE: 10, - SQUIGGLY: 11, - STRIKEOUT: 12, - STAMP: 13, - CARET: 14, - INK: 15, - POPUP: 16, - FILEATTACHMENT: 17, - SOUND: 18, - MOVIE: 19, - WIDGET: 20, - SCREEN: 21, - PRINTERMARK: 22, - TRAPNET: 23, - WATERMARK: 24, - THREED: 25, - REDACT: 26 - }; - exports.AnnotationType = AnnotationType; - var AnnotationFlag = { - INVISIBLE: 0x01, - HIDDEN: 0x02, - PRINT: 0x04, - NOZOOM: 0x08, - NOROTATE: 0x10, - NOVIEW: 0x20, - READONLY: 0x40, - LOCKED: 0x80, - TOGGLENOVIEW: 0x100, - LOCKEDCONTENTS: 0x200 - }; - exports.AnnotationFlag = AnnotationFlag; - var AnnotationFieldFlag = { - READONLY: 0x0000001, - REQUIRED: 0x0000002, - NOEXPORT: 0x0000004, - MULTILINE: 0x0001000, - PASSWORD: 0x0002000, - NOTOGGLETOOFF: 0x0004000, - RADIO: 0x0008000, - PUSHBUTTON: 0x0010000, - COMBO: 0x0020000, - EDIT: 0x0040000, - SORT: 0x0080000, - FILESELECT: 0x0100000, - MULTISELECT: 0x0200000, - DONOTSPELLCHECK: 0x0400000, - DONOTSCROLL: 0x0800000, - COMB: 0x1000000, - RICHTEXT: 0x2000000, - RADIOSINUNISON: 0x2000000, - COMMITONSELCHANGE: 0x4000000 - }; - exports.AnnotationFieldFlag = AnnotationFieldFlag; - var AnnotationBorderStyleType = { - SOLID: 1, - DASHED: 2, - BEVELED: 3, - INSET: 4, - UNDERLINE: 5 - }; - exports.AnnotationBorderStyleType = AnnotationBorderStyleType; - var StreamType = { - UNKNOWN: 0, - FLATE: 1, - LZW: 2, - DCT: 3, - JPX: 4, - JBIG: 5, - A85: 6, - AHX: 7, - CCF: 8, - RL: 9 - }; - exports.StreamType = StreamType; - var FontType = { - UNKNOWN: 0, - TYPE1: 1, - TYPE1C: 2, - CIDFONTTYPE0: 3, - CIDFONTTYPE0C: 4, - TRUETYPE: 5, - CIDFONTTYPE2: 6, - TYPE3: 7, - OPENTYPE: 8, - TYPE0: 9, - MMTYPE1: 10 - }; - exports.FontType = FontType; - var VerbosityLevel = { - ERRORS: 0, - WARNINGS: 1, - INFOS: 5 - }; - exports.VerbosityLevel = VerbosityLevel; - var CMapCompressionType = { - NONE: 0, - BINARY: 1, - STREAM: 2 - }; - exports.CMapCompressionType = CMapCompressionType; - var OPS = { - dependency: 1, - setLineWidth: 2, - setLineCap: 3, - setLineJoin: 4, - setMiterLimit: 5, - setDash: 6, - setRenderingIntent: 7, - setFlatness: 8, - setGState: 9, - save: 10, - restore: 11, - transform: 12, - moveTo: 13, - lineTo: 14, - curveTo: 15, - curveTo2: 16, - curveTo3: 17, - closePath: 18, - rectangle: 19, - stroke: 20, - closeStroke: 21, - fill: 22, - eoFill: 23, - fillStroke: 24, - eoFillStroke: 25, - closeFillStroke: 26, - closeEOFillStroke: 27, - endPath: 28, - clip: 29, - eoClip: 30, - beginText: 31, - endText: 32, - setCharSpacing: 33, - setWordSpacing: 34, - setHScale: 35, - setLeading: 36, - setFont: 37, - setTextRenderingMode: 38, - setTextRise: 39, - moveText: 40, - setLeadingMoveText: 41, - setTextMatrix: 42, - nextLine: 43, - showText: 44, - showSpacedText: 45, - nextLineShowText: 46, - nextLineSetSpacingShowText: 47, - setCharWidth: 48, - setCharWidthAndBounds: 49, - setStrokeColorSpace: 50, - setFillColorSpace: 51, - setStrokeColor: 52, - setStrokeColorN: 53, - setFillColor: 54, - setFillColorN: 55, - setStrokeGray: 56, - setFillGray: 57, - setStrokeRGBColor: 58, - setFillRGBColor: 59, - setStrokeCMYKColor: 60, - setFillCMYKColor: 61, - shadingFill: 62, - beginInlineImage: 63, - beginImageData: 64, - endInlineImage: 65, - paintXObject: 66, - markPoint: 67, - markPointProps: 68, - beginMarkedContent: 69, - beginMarkedContentProps: 70, - endMarkedContent: 71, - beginCompat: 72, - endCompat: 73, - paintFormXObjectBegin: 74, - paintFormXObjectEnd: 75, - beginGroup: 76, - endGroup: 77, - beginAnnotations: 78, - endAnnotations: 79, - beginAnnotation: 80, - endAnnotation: 81, - paintJpegXObject: 82, - paintImageMaskXObject: 83, - paintImageMaskXObjectGroup: 84, - paintImageXObject: 85, - paintInlineImageXObject: 86, - paintInlineImageXObjectGroup: 87, - paintImageXObjectRepeat: 88, - paintImageMaskXObjectRepeat: 89, - paintSolidColorImageMask: 90, - constructPath: 91 - }; - exports.OPS = OPS; - var UNSUPPORTED_FEATURES = { - unknown: 'unknown', - forms: 'forms', - javaScript: 'javaScript', - smask: 'smask', - shadingPattern: 'shadingPattern', - font: 'font' - }; - exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES; - var PasswordResponses = { - NEED_PASSWORD: 1, - INCORRECT_PASSWORD: 2 - }; - exports.PasswordResponses = PasswordResponses; - var verbosity = VerbosityLevel.WARNINGS; - - function setVerbosityLevel(level) { - if (Number.isInteger(level)) { - verbosity = level; - } - } - - function getVerbosityLevel() { - return verbosity; - } - - function info(msg) { - if (verbosity >= VerbosityLevel.INFOS) { - console.log('Info: ' + msg); - } - } - - function warn(msg) { - if (verbosity >= VerbosityLevel.WARNINGS) { - console.log('Warning: ' + msg); - } - } - - function deprecated(details) { - // console.log('Deprecated API usage: ' + details); - } - - function unreachable(msg) { - throw new Error(msg); - } - - function assert(cond, msg) { - if (!cond) { - unreachable(msg); - } - } - - function isSameOrigin(baseUrl, otherUrl) { - try { - var base = new _url_polyfill.URL(baseUrl); - - if (!base.origin || base.origin === 'null') { - return false; - } - } catch (e) { - return false; - } - - var other = new _url_polyfill.URL(otherUrl, base); - return base.origin === other.origin; - } - - function _isValidProtocol(url) { - if (!url) { - return false; - } - - switch (url.protocol) { - case 'http:': - case 'https:': - case 'ftp:': - case 'mailto:': - case 'tel:': - return true; - - default: - return false; - } - } - - function createValidAbsoluteUrl(url, baseUrl) { - if (!url) { - return null; - } - - try { - var absoluteUrl = baseUrl ? new _url_polyfill.URL(url, baseUrl) : new _url_polyfill.URL(url); - - if (_isValidProtocol(absoluteUrl)) { - return absoluteUrl; - } - } catch (ex) {} - - return null; - } - - function shadow(obj, prop, value) { - Object.defineProperty(obj, prop, { - value: value, - enumerable: true, - configurable: true, - writable: false - }); - return value; - } - - function getLookupTableFactory(initializer) { - var lookup; - return function () { - if (initializer) { - lookup = Object.create(null); - initializer(lookup); - initializer = null; - } - - return lookup; - }; - } - - var PasswordException = function PasswordExceptionClosure() { - function PasswordException(msg, code) { - this.name = 'PasswordException'; - this.message = msg; - this.code = code; - } - - PasswordException.prototype = new Error(); - PasswordException.constructor = PasswordException; - return PasswordException; - }(); - - exports.PasswordException = PasswordException; - - var UnknownErrorException = function UnknownErrorExceptionClosure() { - function UnknownErrorException(msg, details) { - this.name = 'UnknownErrorException'; - this.message = msg; - this.details = details; - } - - UnknownErrorException.prototype = new Error(); - UnknownErrorException.constructor = UnknownErrorException; - return UnknownErrorException; - }(); - - exports.UnknownErrorException = UnknownErrorException; - - var InvalidPDFException = function InvalidPDFExceptionClosure() { - function InvalidPDFException(msg) { - this.name = 'InvalidPDFException'; - this.message = msg; - } - - InvalidPDFException.prototype = new Error(); - InvalidPDFException.constructor = InvalidPDFException; - return InvalidPDFException; - }(); - - exports.InvalidPDFException = InvalidPDFException; - - var MissingPDFException = function MissingPDFExceptionClosure() { - function MissingPDFException(msg) { - this.name = 'MissingPDFException'; - this.message = msg; - } - - MissingPDFException.prototype = new Error(); - MissingPDFException.constructor = MissingPDFException; - return MissingPDFException; - }(); - - exports.MissingPDFException = MissingPDFException; - - var UnexpectedResponseException = function UnexpectedResponseExceptionClosure() { - function UnexpectedResponseException(msg, status) { - this.name = 'UnexpectedResponseException'; - this.message = msg; - this.status = status; - } - - UnexpectedResponseException.prototype = new Error(); - UnexpectedResponseException.constructor = UnexpectedResponseException; - return UnexpectedResponseException; - }(); - - exports.UnexpectedResponseException = UnexpectedResponseException; - - var MissingDataException = function MissingDataExceptionClosure() { - function MissingDataException(begin, end) { - this.begin = begin; - this.end = end; - this.message = 'Missing data [' + begin + ', ' + end + ')'; - } - - MissingDataException.prototype = new Error(); - MissingDataException.prototype.name = 'MissingDataException'; - MissingDataException.constructor = MissingDataException; - return MissingDataException; - }(); - - exports.MissingDataException = MissingDataException; - - var XRefEntryException = function XRefEntryExceptionClosure() { - function XRefEntryException(msg) { - this.message = msg; - } - - XRefEntryException.prototype = new Error(); - XRefEntryException.prototype.name = 'XRefEntryException'; - XRefEntryException.constructor = XRefEntryException; - return XRefEntryException; - }(); - - exports.XRefEntryException = XRefEntryException; - - var XRefParseException = function XRefParseExceptionClosure() { - function XRefParseException(msg) { - this.message = msg; - } - - XRefParseException.prototype = new Error(); - XRefParseException.prototype.name = 'XRefParseException'; - XRefParseException.constructor = XRefParseException; - return XRefParseException; - }(); - - exports.XRefParseException = XRefParseException; - - var FormatError = function FormatErrorClosure() { - function FormatError(msg) { - this.message = msg; - } - - FormatError.prototype = new Error(); - FormatError.prototype.name = 'FormatError'; - FormatError.constructor = FormatError; - return FormatError; - }(); - - exports.FormatError = FormatError; - - var AbortException = function AbortExceptionClosure() { - function AbortException(msg) { - this.name = 'AbortException'; - this.message = msg; - } - - AbortException.prototype = new Error(); - AbortException.constructor = AbortException; - return AbortException; - }(); - - exports.AbortException = AbortException; - var NullCharactersRegExp = /\x00/g; - - function removeNullCharacters(str) { - if (typeof str !== 'string') { - warn('The argument for removeNullCharacters must be a string.'); - return str; - } - - return str.replace(NullCharactersRegExp, ''); - } - - function bytesToString(bytes) { - assert(bytes !== null && _typeof(bytes) === 'object' && bytes.length !== undefined, 'Invalid argument for bytesToString'); - var length = bytes.length; - var MAX_ARGUMENT_COUNT = 8192; - - if (length < MAX_ARGUMENT_COUNT) { - return String.fromCharCode.apply(null, bytes); - } - - var strBuf = []; - - for (var i = 0; i < length; i += MAX_ARGUMENT_COUNT) { - var chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); - var chunk = bytes.subarray(i, chunkEnd); - strBuf.push(String.fromCharCode.apply(null, chunk)); - } - - return strBuf.join(''); - } - - function stringToBytes(str) { - assert(typeof str === 'string', 'Invalid argument for stringToBytes'); - var length = str.length; - var bytes = new Uint8Array(length); - - for (var i = 0; i < length; ++i) { - bytes[i] = str.charCodeAt(i) & 0xFF; - } - - return bytes; - } - - function arrayByteLength(arr) { - if (arr.length !== undefined) { - return arr.length; - } - - assert(arr.byteLength !== undefined); - return arr.byteLength; - } - - function arraysToBytes(arr) { - if (arr.length === 1 && arr[0] instanceof Uint8Array) { - return arr[0]; - } - - var resultLength = 0; - var i, - ii = arr.length; - var item, itemLength; - - for (i = 0; i < ii; i++) { - item = arr[i]; - itemLength = arrayByteLength(item); - resultLength += itemLength; - } - - var pos = 0; - var data = new Uint8Array(resultLength); - - for (i = 0; i < ii; i++) { - item = arr[i]; - - if (!(item instanceof Uint8Array)) { - if (typeof item === 'string') { - item = stringToBytes(item); - } else { - item = new Uint8Array(item); - } - } - - itemLength = item.byteLength; - data.set(item, pos); - pos += itemLength; - } - - return data; - } - - function string32(value) { - return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); - } - - function log2(x) { - if (x <= 0) { - return 0; - } - - return Math.ceil(Math.log2(x)); - } - - function readInt8(data, start) { - return data[start] << 24 >> 24; - } - - function readUint16(data, offset) { - return data[offset] << 8 | data[offset + 1]; - } - - function readUint32(data, offset) { - return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0; - } - - function isLittleEndian() { - var buffer8 = new Uint8Array(4); - buffer8[0] = 1; - var view32 = new Uint32Array(buffer8.buffer, 0, 1); - return view32[0] === 1; - } - - function isEvalSupported() { - try { - new Function(''); - return true; - } catch (e) { - return false; - } - } - - function getInheritableProperty(_ref) { - var dict = _ref.dict, - key = _ref.key, - _ref$getArray = _ref.getArray, - getArray = _ref$getArray === void 0 ? false : _ref$getArray, - _ref$stopWhenFound = _ref.stopWhenFound, - stopWhenFound = _ref$stopWhenFound === void 0 ? true : _ref$stopWhenFound; - var LOOP_LIMIT = 100; - var loopCount = 0; - var values; - - while (dict) { - var value = getArray ? dict.getArray(key) : dict.get(key); - - if (value !== undefined) { - if (stopWhenFound) { - return value; - } - - if (!values) { - values = []; - } - - values.push(value); - } - - if (++loopCount > LOOP_LIMIT) { - warn("getInheritableProperty: maximum loop count exceeded for \"".concat(key, "\"")); - break; - } - - dict = dict.get('Parent'); - } - - return values; - } - - var Util = function UtilClosure() { - function Util() {} - - var rgbBuf = ['rgb(', 0, ',', 0, ',', 0, ')']; - - Util.makeCssRgb = function Util_makeCssRgb(r, g, b) { - rgbBuf[1] = r; - rgbBuf[3] = g; - rgbBuf[5] = b; - return rgbBuf.join(''); - }; - - Util.transform = function Util_transform(m1, m2) { - return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]]; - }; - - Util.applyTransform = function Util_applyTransform(p, m) { - var xt = p[0] * m[0] + p[1] * m[2] + m[4]; - var yt = p[0] * m[1] + p[1] * m[3] + m[5]; - return [xt, yt]; - }; - - Util.applyInverseTransform = function Util_applyInverseTransform(p, m) { - var d = m[0] * m[3] - m[1] * m[2]; - var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; - var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; - return [xt, yt]; - }; - - Util.getAxialAlignedBoundingBox = function Util_getAxialAlignedBoundingBox(r, m) { - var p1 = Util.applyTransform(r, m); - var p2 = Util.applyTransform(r.slice(2, 4), m); - var p3 = Util.applyTransform([r[0], r[3]], m); - var p4 = Util.applyTransform([r[2], r[1]], m); - return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])]; - }; - - Util.inverseTransform = function Util_inverseTransform(m) { - var d = m[0] * m[3] - m[1] * m[2]; - return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d]; - }; - - Util.apply3dTransform = function Util_apply3dTransform(m, v) { - return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]]; - }; - - Util.singularValueDecompose2dScale = function Util_singularValueDecompose2dScale(m) { - var transpose = [m[0], m[2], m[1], m[3]]; - var a = m[0] * transpose[0] + m[1] * transpose[2]; - var b = m[0] * transpose[1] + m[1] * transpose[3]; - var c = m[2] * transpose[0] + m[3] * transpose[2]; - var d = m[2] * transpose[1] + m[3] * transpose[3]; - var first = (a + d) / 2; - var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2; - var sx = first + second || 1; - var sy = first - second || 1; - return [Math.sqrt(sx), Math.sqrt(sy)]; - }; - - Util.normalizeRect = function Util_normalizeRect(rect) { - var r = rect.slice(0); - - if (rect[0] > rect[2]) { - r[0] = rect[2]; - r[2] = rect[0]; - } - - if (rect[1] > rect[3]) { - r[1] = rect[3]; - r[3] = rect[1]; - } - - return r; - }; - - Util.intersect = function Util_intersect(rect1, rect2) { - function compare(a, b) { - return a - b; - } - - var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare), - orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare), - result = []; - rect1 = Util.normalizeRect(rect1); - rect2 = Util.normalizeRect(rect2); - - if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) { - result[0] = orderedX[1]; - result[2] = orderedX[2]; - } else { - return false; - } - - if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) { - result[1] = orderedY[1]; - result[3] = orderedY[2]; - } else { - return false; - } - - return result; - }; - - return Util; - }(); - - exports.Util = Util; - var ROMAN_NUMBER_MAP = ['', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM', '', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC', '', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX']; - - function toRomanNumerals(number) { - var lowerCase = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - assert(Number.isInteger(number) && number > 0, 'The number should be a positive integer.'); - var pos, - romanBuf = []; - - while (number >= 1000) { - number -= 1000; - romanBuf.push('M'); - } - - pos = number / 100 | 0; - number %= 100; - romanBuf.push(ROMAN_NUMBER_MAP[pos]); - pos = number / 10 | 0; - number %= 10; - romanBuf.push(ROMAN_NUMBER_MAP[10 + pos]); - romanBuf.push(ROMAN_NUMBER_MAP[20 + number]); - var romanStr = romanBuf.join(''); - return lowerCase ? romanStr.toLowerCase() : romanStr; - } - - var PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C, 0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160, 0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC]; - - function stringToPDFString(str) { - var i, - n = str.length, - strBuf = []; - - if (str[0] === '\xFE' && str[1] === '\xFF') { - for (i = 2; i < n; i += 2) { - strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1))); - } - } else { - for (i = 0; i < n; ++i) { - var code = PDFStringTranslateTable[str.charCodeAt(i)]; - strBuf.push(code ? String.fromCharCode(code) : str.charAt(i)); - } - } - - return strBuf.join(''); - } - - function stringToUTF8String(str) { - return decodeURIComponent(escape(str)); - } - - function utf8StringToString(str) { - return unescape(encodeURIComponent(str)); - } - - function isEmptyObj(obj) { - for (var key in obj) { - return false; - } - - return true; - } - - function isBool(v) { - return typeof v === 'boolean'; - } - - function isNum(v) { - return typeof v === 'number'; - } - - function isString(v) { - return typeof v === 'string'; - } - - function isArrayBuffer(v) { - return _typeof(v) === 'object' && v !== null && v.byteLength !== undefined; - } - - function isSpace(ch) { - return ch === 0x20 || ch === 0x09 || ch === 0x0D || ch === 0x0A; - } - - function createPromiseCapability() { - var capability = Object.create(null); - var isSettled = false; - Object.defineProperty(capability, 'settled', { - get: function get() { - return isSettled; - } - }); - capability.promise = new Promise(function (resolve, reject) { - capability.resolve = function (data) { - isSettled = true; - resolve(data); - }; - - capability.reject = function (reason) { - isSettled = true; - reject(reason); - }; - }); - return capability; - } - - var createObjectURL = function createObjectURLClosure() { - var digits = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; - return function createObjectURL(data, contentType) { - var forceDataSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - if (!forceDataSchema && _url_polyfill.URL.createObjectURL) { - var blob = new Blob([data], { - type: contentType - }); - return _url_polyfill.URL.createObjectURL(blob); - } - - var buffer = 'data:' + contentType + ';base64,'; - - for (var i = 0, ii = data.length; i < ii; i += 3) { - var b1 = data[i] & 0xFF; - var b2 = data[i + 1] & 0xFF; - var b3 = data[i + 2] & 0xFF; - var d1 = b1 >> 2, - d2 = (b1 & 3) << 4 | b2 >> 4; - var d3 = i + 1 < ii ? (b2 & 0xF) << 2 | b3 >> 6 : 64; - var d4 = i + 2 < ii ? b3 & 0x3F : 64; - buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4]; - } - - return buffer; - }; - }(); - - exports.createObjectURL = createObjectURL; - - /***/ }), - /* 2 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - var globalScope = __w_extracthighlights_require__(3); - - if (!globalScope._extracthighlightsCompatibilityChecked) { - globalScope._extracthighlightsCompatibilityChecked = true; - - var isNodeJS = __w_extracthighlights_require__(4); - - var hasDOM = (typeof window === "undefined" ? "undefined" : _typeof(window)) === 'object' && (typeof document === "undefined" ? "undefined" : _typeof(document)) === 'object'; - - (function checkNodeBtoa() { - if (globalScope.btoa || !isNodeJS()) { - return; - } - - globalScope.btoa = function (chars) { - return Buffer.from(chars, 'binary').toString('base64'); - }; - })(); - - (function checkNodeAtob() { - if (globalScope.atob || !isNodeJS()) { - return; - } - - globalScope.atob = function (input) { - return Buffer.from(input, 'base64').toString('binary'); - }; - })(); - - (function checkChildNodeRemove() { - if (!hasDOM) { - return; - } - - if (typeof Element.prototype.remove !== 'undefined') { - return; - } - - Element.prototype.remove = function () { - if (this.parentNode) { - this.parentNode.removeChild(this); - } - }; - })(); - - (function checkDOMTokenListAddRemove() { - if (!hasDOM || isNodeJS()) { - return; - } - - var div = document.createElement('div'); - div.classList.add('testOne', 'testTwo'); - - if (div.classList.contains('testOne') === true && div.classList.contains('testTwo') === true) { - return; - } - - var OriginalDOMTokenListAdd = DOMTokenList.prototype.add; - var OriginalDOMTokenListRemove = DOMTokenList.prototype.remove; - - DOMTokenList.prototype.add = function () { - for (var _len = arguments.length, tokens = new Array(_len), _key = 0; _key < _len; _key++) { - tokens[_key] = arguments[_key]; - } - - for (var _i = 0; _i < tokens.length; _i++) { - var token = tokens[_i]; - OriginalDOMTokenListAdd.call(this, token); - } - }; - - DOMTokenList.prototype.remove = function () { - for (var _len2 = arguments.length, tokens = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - tokens[_key2] = arguments[_key2]; - } - - for (var _i2 = 0; _i2 < tokens.length; _i2++) { - var token = tokens[_i2]; - OriginalDOMTokenListRemove.call(this, token); - } - }; - })(); - - (function checkDOMTokenListToggle() { - if (!hasDOM || isNodeJS()) { - return; - } - - var div = document.createElement('div'); - - if (div.classList.toggle('test', 0) === false) { - return; - } - - DOMTokenList.prototype.toggle = function (token) { - var force = arguments.length > 1 ? !!arguments[1] : !this.contains(token); - return this[force ? 'add' : 'remove'](token), force; - }; - })(); - - (function checkStringStartsWith() { - if (String.prototype.startsWith) { - return; - } - - __w_extracthighlights_require__(5); - })(); - - (function checkStringEndsWith() { - if (String.prototype.endsWith) { - return; - } - - __w_extracthighlights_require__(35); - })(); - - (function checkStringIncludes() { - if (String.prototype.includes) { - return; - } - - __w_extracthighlights_require__(37); - })(); - - (function checkArrayIncludes() { - if (Array.prototype.includes) { - return; - } - - __w_extracthighlights_require__(39); - })(); - - (function checkArrayFrom() { - if (Array.from) { - return; - } - - __w_extracthighlights_require__(46); - })(); - - (function checkObjectAssign() { - if (Object.assign) { - return; - } - - __w_extracthighlights_require__(69); - })(); - - (function checkMathLog2() { - if (Math.log2) { - return; - } - - Math.log2 = __w_extracthighlights_require__(74); - })(); - - (function checkNumberIsNaN() { - if (Number.isNaN) { - return; - } - - Number.isNaN = __w_extracthighlights_require__(76); - })(); - - (function checkNumberIsInteger() { - if (Number.isInteger) { - return; - } - - Number.isInteger = __w_extracthighlights_require__(78); - })(); - - (function checkPromise() { - if (globalScope.Promise && globalScope.Promise.prototype && globalScope.Promise.prototype.finally) { - return; - } - - globalScope.Promise = __w_extracthighlights_require__(81); - })(); - - (function checkWeakMap() { - if (globalScope.WeakMap) { - return; - } - - globalScope.WeakMap = __w_extracthighlights_require__(101); - })(); - - (function checkWeakSet() { - if (globalScope.WeakSet) { - return; - } - - globalScope.WeakSet = __w_extracthighlights_require__(118); - })(); - - (function checkStringCodePointAt() { - if (String.codePointAt) { - return; - } - - String.codePointAt = __w_extracthighlights_require__(122); - })(); - - (function checkStringFromCodePoint() { - if (String.fromCodePoint) { - return; - } - - String.fromCodePoint = __w_extracthighlights_require__(124); - })(); - - (function checkSymbol() { - if (globalScope.Symbol) { - return; - } - - __w_extracthighlights_require__(126); - })(); - - (function checkStringPadStart() { - if (String.prototype.padStart) { - return; - } - - __w_extracthighlights_require__(133); - })(); - - (function checkStringPadEnd() { - if (String.prototype.padEnd) { - return; - } - - __w_extracthighlights_require__(137); - })(); - - (function checkObjectValues() { - if (Object.values) { - return; - } - - Object.values = __w_extracthighlights_require__(139); - })(); - } - - /***/ }), - /* 3 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = typeof window !== 'undefined' && window.Math === Math ? window : typeof commonjsGlobal !== 'undefined' && commonjsGlobal.Math === Math ? commonjsGlobal : typeof self !== 'undefined' && self.Math === Math ? self : {}; - - /***/ }), - /* 4 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - module.exports = function isNodeJS() { - return (typeof process === "undefined" ? "undefined" : _typeof(process)) === 'object' && process + '' === '[object process]' && !process.versions['nw']; - }; - - /***/ }), - /* 5 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(6); - - module.exports = __w_extracthighlights_require__(9).String.startsWith; - - /***/ }), - /* 6 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(7); - - var toLength = __w_extracthighlights_require__(25); - - var context = __w_extracthighlights_require__(27); - - var STARTS_WITH = 'startsWith'; - var $startsWith = ''[STARTS_WITH]; - $export($export.P + $export.F * __w_extracthighlights_require__(34)(STARTS_WITH), 'String', { - startsWith: function startsWith(searchString) { - var that = context(this, searchString, STARTS_WITH); - var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length)); - var search = String(searchString); - return $startsWith ? $startsWith.call(that, search, index) : that.slice(index, index + search.length) === search; - } - }); - - /***/ }), - /* 7 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var global = __w_extracthighlights_require__(8); - - var core = __w_extracthighlights_require__(9); - - var hide = __w_extracthighlights_require__(10); - - var redefine = __w_extracthighlights_require__(20); - - var ctx = __w_extracthighlights_require__(23); - - var PROTOTYPE = 'prototype'; - - var $export = function $export(type, name, source) { - var IS_FORCED = type & $export.F; - var IS_GLOBAL = type & $export.G; - var IS_STATIC = type & $export.S; - var IS_PROTO = type & $export.P; - var IS_BIND = type & $export.B; - var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE]; - var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); - var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {}); - var key, own, out, exp; - if (IS_GLOBAL) source = name; - - for (key in source) { - own = !IS_FORCED && target && target[key] !== undefined; - out = (own ? target : source)[key]; - exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; - if (target) redefine(target, key, out, type & $export.U); - if (exports[key] != out) hide(exports, key, exp); - if (IS_PROTO && expProto[key] != out) expProto[key] = out; - } - }; - - global.core = core; - $export.F = 1; - $export.G = 2; - $export.S = 4; - $export.P = 8; - $export.B = 16; - $export.W = 32; - $export.U = 64; - $export.R = 128; - module.exports = $export; - - /***/ }), - /* 8 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var global = module.exports = typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); - if (typeof __g == 'number') __g = global; - - /***/ }), - /* 9 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var core = module.exports = { - version: '2.6.2' - }; - if (typeof __e == 'number') __e = core; - - /***/ }), - /* 10 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var dP = __w_extracthighlights_require__(11); - - var createDesc = __w_extracthighlights_require__(19); - - module.exports = __w_extracthighlights_require__(15) ? function (object, key, value) { - return dP.f(object, key, createDesc(1, value)); - } : function (object, key, value) { - object[key] = value; - return object; - }; - - /***/ }), - /* 11 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var anObject = __w_extracthighlights_require__(12); - - var IE8_DOM_DEFINE = __w_extracthighlights_require__(14); - - var toPrimitive = __w_extracthighlights_require__(18); - - var dP = Object.defineProperty; - exports.f = __w_extracthighlights_require__(15) ? Object.defineProperty : function defineProperty(O, P, Attributes) { - anObject(O); - P = toPrimitive(P, true); - anObject(Attributes); - if (IE8_DOM_DEFINE) try { - return dP(O, P, Attributes); - } catch (e) {} - if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); - if ('value' in Attributes) O[P] = Attributes.value; - return O; - }; - - /***/ }), - /* 12 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var isObject = __w_extracthighlights_require__(13); - - module.exports = function (it) { - if (!isObject(it)) throw TypeError(it + ' is not an object!'); - return it; - }; - - /***/ }), - /* 13 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - module.exports = function (it) { - return _typeof(it) === 'object' ? it !== null : typeof it === 'function'; - }; - - /***/ }), - /* 14 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = !__w_extracthighlights_require__(15) && !__w_extracthighlights_require__(16)(function () { - return Object.defineProperty(__w_extracthighlights_require__(17)('div'), 'a', { - get: function get() { - return 7; - } - }).a != 7; - }); - - /***/ }), - /* 15 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = !__w_extracthighlights_require__(16)(function () { - return Object.defineProperty({}, 'a', { - get: function get() { - return 7; - } - }).a != 7; - }); - - /***/ }), - /* 16 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = function (exec) { - try { - return !!exec(); - } catch (e) { - return true; - } - }; - - /***/ }), - /* 17 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var isObject = __w_extracthighlights_require__(13); - - var document = __w_extracthighlights_require__(8).document; - - var is = isObject(document) && isObject(document.createElement); - - module.exports = function (it) { - return is ? document.createElement(it) : {}; - }; - - /***/ }), - /* 18 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var isObject = __w_extracthighlights_require__(13); - - module.exports = function (it, S) { - if (!isObject(it)) return it; - var fn, val; - if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; - if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val; - if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; - throw TypeError("Can't convert object to primitive value"); - }; - - /***/ }), - /* 19 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = function (bitmap, value) { - return { - enumerable: !(bitmap & 1), - configurable: !(bitmap & 2), - writable: !(bitmap & 4), - value: value - }; - }; - - /***/ }), - /* 20 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var global = __w_extracthighlights_require__(8); - - var hide = __w_extracthighlights_require__(10); - - var has = __w_extracthighlights_require__(21); - - var SRC = __w_extracthighlights_require__(22)('src'); - - var TO_STRING = 'toString'; - var $toString = Function[TO_STRING]; - var TPL = ('' + $toString).split(TO_STRING); - - __w_extracthighlights_require__(9).inspectSource = function (it) { - return $toString.call(it); - }; - - (module.exports = function (O, key, val, safe) { - var isFunction = typeof val == 'function'; - if (isFunction) has(val, 'name') || hide(val, 'name', key); - if (O[key] === val) return; - if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); - - if (O === global) { - O[key] = val; - } else if (!safe) { - delete O[key]; - hide(O, key, val); - } else if (O[key]) { - O[key] = val; - } else { - hide(O, key, val); - } - })(Function.prototype, TO_STRING, function toString() { - return typeof this == 'function' && this[SRC] || $toString.call(this); - }); - - /***/ }), - /* 21 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var hasOwnProperty = {}.hasOwnProperty; - - module.exports = function (it, key) { - return hasOwnProperty.call(it, key); - }; - - /***/ }), - /* 22 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var id = 0; - var px = Math.random(); - - module.exports = function (key) { - return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); - }; - - /***/ }), - /* 23 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var aFunction = __w_extracthighlights_require__(24); - - module.exports = function (fn, that, length) { - aFunction(fn); - if (that === undefined) return fn; - - switch (length) { - case 1: - return function (a) { - return fn.call(that, a); - }; - - case 2: - return function (a, b) { - return fn.call(that, a, b); - }; - - case 3: - return function (a, b, c) { - return fn.call(that, a, b, c); - }; - } - - return function () { - return fn.apply(that, arguments); - }; - }; - - /***/ }), - /* 24 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = function (it) { - if (typeof it != 'function') throw TypeError(it + ' is not a function!'); - return it; - }; - - /***/ }), - /* 25 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var toInteger = __w_extracthighlights_require__(26); - - var min = Math.min; - - module.exports = function (it) { - return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; - }; - - /***/ }), - /* 26 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var ceil = Math.ceil; - var floor = Math.floor; - - module.exports = function (it) { - return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); - }; - - /***/ }), - /* 27 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var isRegExp = __w_extracthighlights_require__(28); - - var defined = __w_extracthighlights_require__(33); - - module.exports = function (that, searchString, NAME) { - if (isRegExp(searchString)) throw TypeError('String#' + NAME + " doesn't accept regex!"); - return String(defined(that)); - }; - - /***/ }), - /* 28 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var isObject = __w_extracthighlights_require__(13); - - var cof = __w_extracthighlights_require__(29); - - var MATCH = __w_extracthighlights_require__(30)('match'); - - module.exports = function (it) { - var isRegExp; - return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp'); - }; - - /***/ }), - /* 29 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var toString = {}.toString; - - module.exports = function (it) { - return toString.call(it).slice(8, -1); - }; - - /***/ }), - /* 30 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var store = __w_extracthighlights_require__(31)('wks'); - - var uid = __w_extracthighlights_require__(22); - - var _Symbol = __w_extracthighlights_require__(8).Symbol; - - var USE_SYMBOL = typeof _Symbol == 'function'; - - var $exports = module.exports = function (name) { - return store[name] || (store[name] = USE_SYMBOL && _Symbol[name] || (USE_SYMBOL ? _Symbol : uid)('Symbol.' + name)); - }; - - $exports.store = store; - - /***/ }), - /* 31 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var core = __w_extracthighlights_require__(9); - - var global = __w_extracthighlights_require__(8); - - var SHARED = '__core-js_shared__'; - var store = global[SHARED] || (global[SHARED] = {}); - (module.exports = function (key, value) { - return store[key] || (store[key] = value !== undefined ? value : {}); - })('versions', []).push({ - version: core.version, - mode: __w_extracthighlights_require__(32) ? 'pure' : 'global', - copyright: '© 2019 Denis Pushkarev (zloirock.ru)' - }); - - /***/ }), - /* 32 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = false; - - /***/ }), - /* 33 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = function (it) { - if (it == undefined) throw TypeError("Can't call method on " + it); - return it; - }; - - /***/ }), - /* 34 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var MATCH = __w_extracthighlights_require__(30)('match'); - - module.exports = function (KEY) { - var re = /./; - - try { - '/./'[KEY](re); - } catch (e) { - try { - re[MATCH] = false; - return !'/./'[KEY](re); - } catch (f) {} - } - - return true; - }; - - /***/ }), - /* 35 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(36); - - module.exports = __w_extracthighlights_require__(9).String.endsWith; - - /***/ }), - /* 36 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(7); - - var toLength = __w_extracthighlights_require__(25); - - var context = __w_extracthighlights_require__(27); - - var ENDS_WITH = 'endsWith'; - var $endsWith = ''[ENDS_WITH]; - $export($export.P + $export.F * __w_extracthighlights_require__(34)(ENDS_WITH), 'String', { - endsWith: function endsWith(searchString) { - var that = context(this, searchString, ENDS_WITH); - var endPosition = arguments.length > 1 ? arguments[1] : undefined; - var len = toLength(that.length); - var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len); - var search = String(searchString); - return $endsWith ? $endsWith.call(that, search, end) : that.slice(end - search.length, end) === search; - } - }); - - /***/ }), - /* 37 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(38); - - module.exports = __w_extracthighlights_require__(9).String.includes; - - /***/ }), - /* 38 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(7); - - var context = __w_extracthighlights_require__(27); - - var INCLUDES = 'includes'; - $export($export.P + $export.F * __w_extracthighlights_require__(34)(INCLUDES), 'String', { - includes: function includes(searchString) { - return !!~context(this, searchString, INCLUDES).indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined); - } - }); - - /***/ }), - /* 39 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(40); - - module.exports = __w_extracthighlights_require__(9).Array.includes; - - /***/ }), - /* 40 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(7); - - var $includes = __w_extracthighlights_require__(41)(true); - - $export($export.P, 'Array', { - includes: function includes(el) { - return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); - } - }); - - __w_extracthighlights_require__(45)('includes'); - - /***/ }), - /* 41 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var toIObject = __w_extracthighlights_require__(42); - - var toLength = __w_extracthighlights_require__(25); - - var toAbsoluteIndex = __w_extracthighlights_require__(44); - - module.exports = function (IS_INCLUDES) { - return function ($this, el, fromIndex) { - var O = toIObject($this); - var length = toLength(O.length); - var index = toAbsoluteIndex(fromIndex, length); - var value; - if (IS_INCLUDES && el != el) while (length > index) { - value = O[index++]; - if (value != value) return true; - } else for (; length > index; index++) { - if (IS_INCLUDES || index in O) { - if (O[index] === el) return IS_INCLUDES || index || 0; - } - } - return !IS_INCLUDES && -1; - }; - }; - - /***/ }), - /* 42 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var IObject = __w_extracthighlights_require__(43); - - var defined = __w_extracthighlights_require__(33); - - module.exports = function (it) { - return IObject(defined(it)); - }; - - /***/ }), - /* 43 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var cof = __w_extracthighlights_require__(29); - - module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) { - return cof(it) == 'String' ? it.split('') : Object(it); - }; - - /***/ }), - /* 44 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var toInteger = __w_extracthighlights_require__(26); - - var max = Math.max; - var min = Math.min; - - module.exports = function (index, length) { - index = toInteger(index); - return index < 0 ? max(index + length, 0) : min(index, length); - }; - - /***/ }), - /* 45 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var UNSCOPABLES = __w_extracthighlights_require__(30)('unscopables'); - - var ArrayProto = Array.prototype; - if (ArrayProto[UNSCOPABLES] == undefined) __w_extracthighlights_require__(10)(ArrayProto, UNSCOPABLES, {}); - - module.exports = function (key) { - ArrayProto[UNSCOPABLES][key] = true; - }; - - /***/ }), - /* 46 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(47); - - __w_extracthighlights_require__(62); - - module.exports = __w_extracthighlights_require__(9).Array.from; - - /***/ }), - /* 47 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $at = __w_extracthighlights_require__(48)(true); - - __w_extracthighlights_require__(49)(String, 'String', function (iterated) { - this._t = String(iterated); - this._i = 0; - }, function () { - var O = this._t; - var index = this._i; - var point; - if (index >= O.length) return { - value: undefined, - done: true - }; - point = $at(O, index); - this._i += point.length; - return { - value: point, - done: false - }; - }); - - /***/ }), - /* 48 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var toInteger = __w_extracthighlights_require__(26); - - var defined = __w_extracthighlights_require__(33); - - module.exports = function (TO_STRING) { - return function (that, pos) { - var s = String(defined(that)); - var i = toInteger(pos); - var l = s.length; - var a, b; - if (i < 0 || i >= l) return TO_STRING ? '' : undefined; - a = s.charCodeAt(i); - return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff ? TO_STRING ? s.charAt(i) : a : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; - }; - }; - - /***/ }), - /* 49 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var LIBRARY = __w_extracthighlights_require__(32); - - var $export = __w_extracthighlights_require__(7); - - var redefine = __w_extracthighlights_require__(20); - - var hide = __w_extracthighlights_require__(10); - - var Iterators = __w_extracthighlights_require__(50); - - var $iterCreate = __w_extracthighlights_require__(51); - - var setToStringTag = __w_extracthighlights_require__(59); - - var getPrototypeOf = __w_extracthighlights_require__(60); - - var ITERATOR = __w_extracthighlights_require__(30)('iterator'); - - var BUGGY = !([].keys && 'next' in [].keys()); - var FF_ITERATOR = '@@iterator'; - var KEYS = 'keys'; - var VALUES = 'values'; - - var returnThis = function returnThis() { - return this; - }; - - module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) { - $iterCreate(Constructor, NAME, next); - - var getMethod = function getMethod(kind) { - if (!BUGGY && kind in proto) return proto[kind]; - - switch (kind) { - case KEYS: - return function keys() { - return new Constructor(this, kind); - }; - - case VALUES: - return function values() { - return new Constructor(this, kind); - }; - } - - return function entries() { - return new Constructor(this, kind); - }; - }; - - var TAG = NAME + ' Iterator'; - var DEF_VALUES = DEFAULT == VALUES; - var VALUES_BUG = false; - var proto = Base.prototype; - var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]; - var $default = $native || getMethod(DEFAULT); - var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined; - var $anyNative = NAME == 'Array' ? proto.entries || $native : $native; - var methods, key, IteratorPrototype; - - if ($anyNative) { - IteratorPrototype = getPrototypeOf($anyNative.call(new Base())); - - if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) { - setToStringTag(IteratorPrototype, TAG, true); - if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis); - } - } - - if (DEF_VALUES && $native && $native.name !== VALUES) { - VALUES_BUG = true; - - $default = function values() { - return $native.call(this); - }; - } - - if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) { - hide(proto, ITERATOR, $default); - } - - Iterators[NAME] = $default; - Iterators[TAG] = returnThis; - - if (DEFAULT) { - methods = { - values: DEF_VALUES ? $default : getMethod(VALUES), - keys: IS_SET ? $default : getMethod(KEYS), - entries: $entries - }; - if (FORCED) for (key in methods) { - if (!(key in proto)) redefine(proto, key, methods[key]); - } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods); - } - - return methods; - }; - - /***/ }), - /* 50 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = {}; - - /***/ }), - /* 51 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var create = __w_extracthighlights_require__(52); - - var descriptor = __w_extracthighlights_require__(19); - - var setToStringTag = __w_extracthighlights_require__(59); - - var IteratorPrototype = {}; - - __w_extracthighlights_require__(10)(IteratorPrototype, __w_extracthighlights_require__(30)('iterator'), function () { - return this; - }); - - module.exports = function (Constructor, NAME, next) { - Constructor.prototype = create(IteratorPrototype, { - next: descriptor(1, next) - }); - setToStringTag(Constructor, NAME + ' Iterator'); - }; - - /***/ }), - /* 52 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var anObject = __w_extracthighlights_require__(12); - - var dPs = __w_extracthighlights_require__(53); - - var enumBugKeys = __w_extracthighlights_require__(57); - - var IE_PROTO = __w_extracthighlights_require__(56)('IE_PROTO'); - - var Empty = function Empty() {}; - - var PROTOTYPE = 'prototype'; - - var _createDict = function createDict() { - var iframe = __w_extracthighlights_require__(17)('iframe'); - - var i = enumBugKeys.length; - var lt = '<'; - var gt = '>'; - var iframeDocument; - iframe.style.display = 'none'; - - __w_extracthighlights_require__(58).appendChild(iframe); - - iframe.src = 'javascript:'; - iframeDocument = iframe.contentWindow.document; - iframeDocument.open(); - iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt); - iframeDocument.close(); - _createDict = iframeDocument.F; - - while (i--) { - delete _createDict[PROTOTYPE][enumBugKeys[i]]; - } - - return _createDict(); - }; - - module.exports = Object.create || function create(O, Properties) { - var result; - - if (O !== null) { - Empty[PROTOTYPE] = anObject(O); - result = new Empty(); - Empty[PROTOTYPE] = null; - result[IE_PROTO] = O; - } else result = _createDict(); - - return Properties === undefined ? result : dPs(result, Properties); - }; - - /***/ }), - /* 53 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var dP = __w_extracthighlights_require__(11); - - var anObject = __w_extracthighlights_require__(12); - - var getKeys = __w_extracthighlights_require__(54); - - module.exports = __w_extracthighlights_require__(15) ? Object.defineProperties : function defineProperties(O, Properties) { - anObject(O); - var keys = getKeys(Properties); - var length = keys.length; - var i = 0; - var P; - - while (length > i) { - dP.f(O, P = keys[i++], Properties[P]); - } - - return O; - }; - - /***/ }), - /* 54 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $keys = __w_extracthighlights_require__(55); - - var enumBugKeys = __w_extracthighlights_require__(57); - - module.exports = Object.keys || function keys(O) { - return $keys(O, enumBugKeys); - }; - - /***/ }), - /* 55 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var has = __w_extracthighlights_require__(21); - - var toIObject = __w_extracthighlights_require__(42); - - var arrayIndexOf = __w_extracthighlights_require__(41)(false); - - var IE_PROTO = __w_extracthighlights_require__(56)('IE_PROTO'); - - module.exports = function (object, names) { - var O = toIObject(object); - var i = 0; - var result = []; - var key; - - for (key in O) { - if (key != IE_PROTO) has(O, key) && result.push(key); - } - - while (names.length > i) { - if (has(O, key = names[i++])) { - ~arrayIndexOf(result, key) || result.push(key); - } - } - - return result; - }; - - /***/ }), - /* 56 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var shared = __w_extracthighlights_require__(31)('keys'); - - var uid = __w_extracthighlights_require__(22); - - module.exports = function (key) { - return shared[key] || (shared[key] = uid(key)); - }; - - /***/ }), - /* 57 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'.split(','); - - /***/ }), - /* 58 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var document = __w_extracthighlights_require__(8).document; - - module.exports = document && document.documentElement; - - /***/ }), - /* 59 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var def = __w_extracthighlights_require__(11).f; - - var has = __w_extracthighlights_require__(21); - - var TAG = __w_extracthighlights_require__(30)('toStringTag'); - - module.exports = function (it, tag, stat) { - if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { - configurable: true, - value: tag - }); - }; - - /***/ }), - /* 60 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var has = __w_extracthighlights_require__(21); - - var toObject = __w_extracthighlights_require__(61); - - var IE_PROTO = __w_extracthighlights_require__(56)('IE_PROTO'); - - var ObjectProto = Object.prototype; - - module.exports = Object.getPrototypeOf || function (O) { - O = toObject(O); - if (has(O, IE_PROTO)) return O[IE_PROTO]; - - if (typeof O.constructor == 'function' && O instanceof O.constructor) { - return O.constructor.prototype; - } - - return O instanceof Object ? ObjectProto : null; - }; - - /***/ }), - /* 61 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var defined = __w_extracthighlights_require__(33); - - module.exports = function (it) { - return Object(defined(it)); - }; - - /***/ }), - /* 62 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var ctx = __w_extracthighlights_require__(23); - - var $export = __w_extracthighlights_require__(7); - - var toObject = __w_extracthighlights_require__(61); - - var call = __w_extracthighlights_require__(63); - - var isArrayIter = __w_extracthighlights_require__(64); - - var toLength = __w_extracthighlights_require__(25); - - var createProperty = __w_extracthighlights_require__(65); - - var getIterFn = __w_extracthighlights_require__(66); - - $export($export.S + $export.F * !__w_extracthighlights_require__(68)(function (iter) { - Array.from(iter); - }), 'Array', { - from: function from(arrayLike) { - var O = toObject(arrayLike); - var C = typeof this == 'function' ? this : Array; - var aLen = arguments.length; - var mapfn = aLen > 1 ? arguments[1] : undefined; - var mapping = mapfn !== undefined; - var index = 0; - var iterFn = getIterFn(O); - var length, result, step, iterator; - if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2); - - if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) { - for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) { - createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value); - } - } else { - length = toLength(O.length); - - for (result = new C(length); length > index; index++) { - createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]); - } - } - - result.length = index; - return result; - } - }); - - /***/ }), - /* 63 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var anObject = __w_extracthighlights_require__(12); - - module.exports = function (iterator, fn, value, entries) { - try { - return entries ? fn(anObject(value)[0], value[1]) : fn(value); - } catch (e) { - var ret = iterator['return']; - if (ret !== undefined) anObject(ret.call(iterator)); - throw e; - } - }; - - /***/ }), - /* 64 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var Iterators = __w_extracthighlights_require__(50); - - var ITERATOR = __w_extracthighlights_require__(30)('iterator'); - - var ArrayProto = Array.prototype; - - module.exports = function (it) { - return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it); - }; - - /***/ }), - /* 65 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $defineProperty = __w_extracthighlights_require__(11); - - var createDesc = __w_extracthighlights_require__(19); - - module.exports = function (object, index, value) { - if (index in object) $defineProperty.f(object, index, createDesc(0, value));else object[index] = value; - }; - - /***/ }), - /* 66 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var classof = __w_extracthighlights_require__(67); - - var ITERATOR = __w_extracthighlights_require__(30)('iterator'); - - var Iterators = __w_extracthighlights_require__(50); - - module.exports = __w_extracthighlights_require__(9).getIteratorMethod = function (it) { - if (it != undefined) return it[ITERATOR] || it['@@iterator'] || Iterators[classof(it)]; - }; - - /***/ }), - /* 67 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var cof = __w_extracthighlights_require__(29); - - var TAG = __w_extracthighlights_require__(30)('toStringTag'); - - var ARG = cof(function () { - return arguments; - }()) == 'Arguments'; - - var tryGet = function tryGet(it, key) { - try { - return it[key]; - } catch (e) {} - }; - - module.exports = function (it) { - var O, T, B; - return it === undefined ? 'Undefined' : it === null ? 'Null' : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T : ARG ? cof(O) : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; - }; - - /***/ }), - /* 68 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var ITERATOR = __w_extracthighlights_require__(30)('iterator'); - - var SAFE_CLOSING = false; - - try { - var riter = [7][ITERATOR](); - - riter['return'] = function () { - SAFE_CLOSING = true; - }; - - Array.from(riter, function () { - throw 2; - }); - } catch (e) {} - - module.exports = function (exec, skipClosing) { - if (!skipClosing && !SAFE_CLOSING) return false; - var safe = false; - - try { - var arr = [7]; - var iter = arr[ITERATOR](); - - iter.next = function () { - return { - done: safe = true - }; - }; - - arr[ITERATOR] = function () { - return iter; - }; - - exec(arr); - } catch (e) {} - - return safe; - }; - - /***/ }), - /* 69 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(70); - - module.exports = __w_extracthighlights_require__(9).Object.assign; - - /***/ }), - /* 70 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(7); - - $export($export.S + $export.F, 'Object', { - assign: __w_extracthighlights_require__(71) - }); - - /***/ }), - /* 71 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var getKeys = __w_extracthighlights_require__(54); - - var gOPS = __w_extracthighlights_require__(72); - - var pIE = __w_extracthighlights_require__(73); - - var toObject = __w_extracthighlights_require__(61); - - var IObject = __w_extracthighlights_require__(43); - - var $assign = Object.assign; - module.exports = !$assign || __w_extracthighlights_require__(16)(function () { - var A = {}; - var B = {}; - var S = Symbol(); - var K = 'abcdefghijklmnopqrst'; - A[S] = 7; - K.split('').forEach(function (k) { - B[k] = k; - }); - return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K; - }) ? function assign(target, source) { - var T = toObject(target); - var aLen = arguments.length; - var index = 1; - var getSymbols = gOPS.f; - var isEnum = pIE.f; - - while (aLen > index) { - var S = IObject(arguments[index++]); - var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S); - var length = keys.length; - var j = 0; - var key; - - while (length > j) { - if (isEnum.call(S, key = keys[j++])) T[key] = S[key]; - } - } - - return T; - } : $assign; - - /***/ }), - /* 72 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - exports.f = Object.getOwnPropertySymbols; - - /***/ }), - /* 73 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - exports.f = {}.propertyIsEnumerable; - - /***/ }), - /* 74 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(75); - - module.exports = __w_extracthighlights_require__(9).Math.log2; - - /***/ }), - /* 75 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(7); - - $export($export.S, 'Math', { - log2: function log2(x) { - return Math.log(x) / Math.LN2; - } - }); - - /***/ }), - /* 76 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(77); - - module.exports = __w_extracthighlights_require__(9).Number.isNaN; - - /***/ }), - /* 77 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(7); - - $export($export.S, 'Number', { - isNaN: function isNaN(number) { - return number != number; - } - }); - - /***/ }), - /* 78 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(79); - - module.exports = __w_extracthighlights_require__(9).Number.isInteger; - - /***/ }), - /* 79 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(7); - - $export($export.S, 'Number', { - isInteger: __w_extracthighlights_require__(80) - }); - - /***/ }), - /* 80 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var isObject = __w_extracthighlights_require__(13); - - var floor = Math.floor; - - module.exports = function isInteger(it) { - return !isObject(it) && isFinite(it) && floor(it) === it; - }; - - /***/ }), - /* 81 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(82); - - __w_extracthighlights_require__(47); - - __w_extracthighlights_require__(83); - - __w_extracthighlights_require__(86); - - __w_extracthighlights_require__(99); - - __w_extracthighlights_require__(100); - - module.exports = __w_extracthighlights_require__(9).Promise; - - /***/ }), - /* 82 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var classof = __w_extracthighlights_require__(67); - - var test = {}; - test[__w_extracthighlights_require__(30)('toStringTag')] = 'z'; - - if (test + '' != '[object z]') { - __w_extracthighlights_require__(20)(Object.prototype, 'toString', function toString() { - return '[object ' + classof(this) + ']'; - }, true); - } - - /***/ }), - /* 83 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $iterators = __w_extracthighlights_require__(84); - - var getKeys = __w_extracthighlights_require__(54); - - var redefine = __w_extracthighlights_require__(20); - - var global = __w_extracthighlights_require__(8); - - var hide = __w_extracthighlights_require__(10); - - var Iterators = __w_extracthighlights_require__(50); - - var wks = __w_extracthighlights_require__(30); - - var ITERATOR = wks('iterator'); - var TO_STRING_TAG = wks('toStringTag'); - var ArrayValues = Iterators.Array; - var DOMIterables = { - CSSRuleList: true, - CSSStyleDeclaration: false, - CSSValueList: false, - ClientRectList: false, - DOMRectList: false, - DOMStringList: false, - DOMTokenList: true, - DataTransferItemList: false, - FileList: false, - HTMLAllCollection: false, - HTMLCollection: false, - HTMLFormElement: false, - HTMLSelectElement: false, - MediaList: true, - MimeTypeArray: false, - NamedNodeMap: false, - NodeList: true, - PaintRequestList: false, - Plugin: false, - PluginArray: false, - SVGLengthList: false, - SVGNumberList: false, - SVGPathSegList: false, - SVGPointList: false, - SVGStringList: false, - SVGTransformList: false, - SourceBufferList: false, - StyleSheetList: true, - TextTrackCueList: false, - TextTrackList: false, - TouchList: false - }; - - for (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) { - var NAME = collections[i]; - var explicit = DOMIterables[NAME]; - var Collection = global[NAME]; - var proto = Collection && Collection.prototype; - var key; - - if (proto) { - if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues); - if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME); - Iterators[NAME] = ArrayValues; - if (explicit) for (key in $iterators) { - if (!proto[key]) redefine(proto, key, $iterators[key], true); - } - } - } - - /***/ }), - /* 84 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var addToUnscopables = __w_extracthighlights_require__(45); - - var step = __w_extracthighlights_require__(85); - - var Iterators = __w_extracthighlights_require__(50); - - var toIObject = __w_extracthighlights_require__(42); - - module.exports = __w_extracthighlights_require__(49)(Array, 'Array', function (iterated, kind) { - this._t = toIObject(iterated); - this._i = 0; - this._k = kind; - }, function () { - var O = this._t; - var kind = this._k; - var index = this._i++; - - if (!O || index >= O.length) { - this._t = undefined; - return step(1); - } - - if (kind == 'keys') return step(0, index); - if (kind == 'values') return step(0, O[index]); - return step(0, [index, O[index]]); - }, 'values'); - Iterators.Arguments = Iterators.Array; - addToUnscopables('keys'); - addToUnscopables('values'); - addToUnscopables('entries'); - - /***/ }), - /* 85 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = function (done, value) { - return { - value: value, - done: !!done - }; - }; - - /***/ }), - /* 86 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var LIBRARY = __w_extracthighlights_require__(32); - - var global = __w_extracthighlights_require__(8); - - var ctx = __w_extracthighlights_require__(23); - - var classof = __w_extracthighlights_require__(67); - - var $export = __w_extracthighlights_require__(7); - - var isObject = __w_extracthighlights_require__(13); - - var aFunction = __w_extracthighlights_require__(24); - - var anInstance = __w_extracthighlights_require__(87); - - var forOf = __w_extracthighlights_require__(88); - - var speciesConstructor = __w_extracthighlights_require__(89); - - var task = __w_extracthighlights_require__(90).set; - - var microtask = __w_extracthighlights_require__(92)(); - - var newPromiseCapabilityModule = __w_extracthighlights_require__(93); - - var perform = __w_extracthighlights_require__(94); - - var userAgent = __w_extracthighlights_require__(95); - - var promiseResolve = __w_extracthighlights_require__(96); - - var PROMISE = 'Promise'; - var TypeError = global.TypeError; - var process = global.process; - var versions = process && process.versions; - var v8 = versions && versions.v8 || ''; - var $Promise = global[PROMISE]; - var isNode = classof(process) == 'process'; - - var empty = function empty() {}; - - var Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper; - var newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f; - var USE_NATIVE = !!function () { - try { - var promise = $Promise.resolve(1); - - var FakePromise = (promise.constructor = {})[__w_extracthighlights_require__(30)('species')] = function (exec) { - exec(empty, empty); - }; - - return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise && v8.indexOf('6.6') !== 0 && userAgent.indexOf('Chrome/66') === -1; - } catch (e) {} - }(); - - var isThenable = function isThenable(it) { - var then; - return isObject(it) && typeof (then = it.then) == 'function' ? then : false; - }; - - var notify = function notify(promise, isReject) { - if (promise._n) return; - promise._n = true; - var chain = promise._c; - microtask(function () { - var value = promise._v; - var ok = promise._s == 1; - var i = 0; - - var run = function run(reaction) { - var handler = ok ? reaction.ok : reaction.fail; - var resolve = reaction.resolve; - var reject = reaction.reject; - var domain = reaction.domain; - var result, then, exited; - - try { - if (handler) { - if (!ok) { - if (promise._h == 2) onHandleUnhandled(promise); - promise._h = 1; - } - - if (handler === true) result = value;else { - if (domain) domain.enter(); - result = handler(value); - - if (domain) { - domain.exit(); - exited = true; - } - } - - if (result === reaction.promise) { - reject(TypeError('Promise-chain cycle')); - } else if (then = isThenable(result)) { - then.call(result, resolve, reject); - } else resolve(result); - } else reject(value); - } catch (e) { - if (domain && !exited) domain.exit(); - reject(e); - } - }; - - while (chain.length > i) { - run(chain[i++]); - } - - promise._c = []; - promise._n = false; - if (isReject && !promise._h) onUnhandled(promise); - }); - }; - - var onUnhandled = function onUnhandled(promise) { - task.call(global, function () { - var value = promise._v; - var unhandled = isUnhandled(promise); - var result, handler, console; - - if (unhandled) { - result = perform(function () { - if (isNode) { - process.emit('unhandledRejection', value, promise); - } else if (handler = global.onunhandledrejection) { - handler({ - promise: promise, - reason: value - }); - } else if ((console = global.console) && console.error) { - console.error('Unhandled promise rejection', value); - } - }); - promise._h = isNode || isUnhandled(promise) ? 2 : 1; - } - - promise._a = undefined; - if (unhandled && result.e) throw result.v; - }); - }; - - var isUnhandled = function isUnhandled(promise) { - return promise._h !== 1 && (promise._a || promise._c).length === 0; - }; - - var onHandleUnhandled = function onHandleUnhandled(promise) { - task.call(global, function () { - var handler; - - if (isNode) { - process.emit('rejectionHandled', promise); - } else if (handler = global.onrejectionhandled) { - handler({ - promise: promise, - reason: promise._v - }); - } - }); - }; - - var $reject = function $reject(value) { - var promise = this; - if (promise._d) return; - promise._d = true; - promise = promise._w || promise; - promise._v = value; - promise._s = 2; - if (!promise._a) promise._a = promise._c.slice(); - notify(promise, true); - }; - - var $resolve = function $resolve(value) { - var promise = this; - var then; - if (promise._d) return; - promise._d = true; - promise = promise._w || promise; - - try { - if (promise === value) throw TypeError("Promise can't be resolved itself"); - - if (then = isThenable(value)) { - microtask(function () { - var wrapper = { - _w: promise, - _d: false - }; - - try { - then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1)); - } catch (e) { - $reject.call(wrapper, e); - } - }); - } else { - promise._v = value; - promise._s = 1; - notify(promise, false); - } - } catch (e) { - $reject.call({ - _w: promise, - _d: false - }, e); - } - }; - - if (!USE_NATIVE) { - $Promise = function Promise(executor) { - anInstance(this, $Promise, PROMISE, '_h'); - aFunction(executor); - Internal.call(this); - - try { - executor(ctx($resolve, this, 1), ctx($reject, this, 1)); - } catch (err) { - $reject.call(this, err); - } - }; - - Internal = function Promise(executor) { - this._c = []; - this._a = undefined; - this._s = 0; - this._d = false; - this._v = undefined; - this._h = 0; - this._n = false; - }; - - Internal.prototype = __w_extracthighlights_require__(97)($Promise.prototype, { - then: function then(onFulfilled, onRejected) { - var reaction = newPromiseCapability(speciesConstructor(this, $Promise)); - reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; - reaction.fail = typeof onRejected == 'function' && onRejected; - reaction.domain = isNode ? process.domain : undefined; - - this._c.push(reaction); - - if (this._a) this._a.push(reaction); - if (this._s) notify(this, false); - return reaction.promise; - }, - 'catch': function _catch(onRejected) { - return this.then(undefined, onRejected); - } - }); - - OwnPromiseCapability = function OwnPromiseCapability() { - var promise = new Internal(); - this.promise = promise; - this.resolve = ctx($resolve, promise, 1); - this.reject = ctx($reject, promise, 1); - }; - - newPromiseCapabilityModule.f = newPromiseCapability = function newPromiseCapability(C) { - return C === $Promise || C === Wrapper ? new OwnPromiseCapability(C) : newGenericPromiseCapability(C); - }; - } - - $export($export.G + $export.W + $export.F * !USE_NATIVE, { - Promise: $Promise - }); - - __w_extracthighlights_require__(59)($Promise, PROMISE); - - __w_extracthighlights_require__(98)(PROMISE); - - Wrapper = __w_extracthighlights_require__(9)[PROMISE]; - $export($export.S + $export.F * !USE_NATIVE, PROMISE, { - reject: function reject(r) { - var capability = newPromiseCapability(this); - var $$reject = capability.reject; - $$reject(r); - return capability.promise; - } - }); - $export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, { - resolve: function resolve(x) { - return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x); - } - }); - $export($export.S + $export.F * !(USE_NATIVE && __w_extracthighlights_require__(68)(function (iter) { - $Promise.all(iter)['catch'](empty); - })), PROMISE, { - all: function all(iterable) { - var C = this; - var capability = newPromiseCapability(C); - var resolve = capability.resolve; - var reject = capability.reject; - var result = perform(function () { - var values = []; - var index = 0; - var remaining = 1; - forOf(iterable, false, function (promise) { - var $index = index++; - var alreadyCalled = false; - values.push(undefined); - remaining++; - C.resolve(promise).then(function (value) { - if (alreadyCalled) return; - alreadyCalled = true; - values[$index] = value; - --remaining || resolve(values); - }, reject); - }); - --remaining || resolve(values); - }); - if (result.e) reject(result.v); - return capability.promise; - }, - race: function race(iterable) { - var C = this; - var capability = newPromiseCapability(C); - var reject = capability.reject; - var result = perform(function () { - forOf(iterable, false, function (promise) { - C.resolve(promise).then(capability.resolve, reject); - }); - }); - if (result.e) reject(result.v); - return capability.promise; - } - }); - - /***/ }), - /* 87 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = function (it, Constructor, name, forbiddenField) { - if (!(it instanceof Constructor) || forbiddenField !== undefined && forbiddenField in it) { - throw TypeError(name + ': incorrect invocation!'); - } - - return it; - }; - - /***/ }), - /* 88 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var ctx = __w_extracthighlights_require__(23); - - var call = __w_extracthighlights_require__(63); - - var isArrayIter = __w_extracthighlights_require__(64); - - var anObject = __w_extracthighlights_require__(12); - - var toLength = __w_extracthighlights_require__(25); - - var getIterFn = __w_extracthighlights_require__(66); - - var BREAK = {}; - var RETURN = {}; - - var _exports = module.exports = function (iterable, entries, fn, that, ITERATOR) { - var iterFn = ITERATOR ? function () { - return iterable; - } : getIterFn(iterable); - var f = ctx(fn, that, entries ? 2 : 1); - var index = 0; - var length, step, iterator, result; - if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!'); - if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) { - result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]); - if (result === BREAK || result === RETURN) return result; - } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) { - result = call(iterator, f, step.value, entries); - if (result === BREAK || result === RETURN) return result; - } - }; - - _exports.BREAK = BREAK; - _exports.RETURN = RETURN; - - /***/ }), - /* 89 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var anObject = __w_extracthighlights_require__(12); - - var aFunction = __w_extracthighlights_require__(24); - - var SPECIES = __w_extracthighlights_require__(30)('species'); - - module.exports = function (O, D) { - var C = anObject(O).constructor; - var S; - return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S); - }; - - /***/ }), - /* 90 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var ctx = __w_extracthighlights_require__(23); - - var invoke = __w_extracthighlights_require__(91); - - var html = __w_extracthighlights_require__(58); - - var cel = __w_extracthighlights_require__(17); - - var global = __w_extracthighlights_require__(8); - - var process = global.process; - var setTask = global.setImmediate; - var clearTask = global.clearImmediate; - var MessageChannel = global.MessageChannel; - var Dispatch = global.Dispatch; - var counter = 0; - var queue = {}; - var ONREADYSTATECHANGE = 'onreadystatechange'; - var defer, channel, port; - - var run = function run() { - var id = +this; - - if (queue.hasOwnProperty(id)) { - var fn = queue[id]; - delete queue[id]; - fn(); - } - }; - - var listener = function listener(event) { - run.call(event.data); - }; - - if (!setTask || !clearTask) { - setTask = function setImmediate(fn) { - var args = []; - var i = 1; - - while (arguments.length > i) { - args.push(arguments[i++]); - } - - queue[++counter] = function () { - invoke(typeof fn == 'function' ? fn : Function(fn), args); - }; - - defer(counter); - return counter; - }; - - clearTask = function clearImmediate(id) { - delete queue[id]; - }; - - if (__w_extracthighlights_require__(29)(process) == 'process') { - defer = function defer(id) { - process.nextTick(ctx(run, id, 1)); - }; - } else if (Dispatch && Dispatch.now) { - defer = function defer(id) { - Dispatch.now(ctx(run, id, 1)); - }; - } else if (MessageChannel) { - channel = new MessageChannel(); - port = channel.port2; - channel.port1.onmessage = listener; - defer = ctx(port.postMessage, port, 1); - } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) { - defer = function defer(id) { - global.postMessage(id + '', '*'); - }; - - global.addEventListener('message', listener, false); - } else if (ONREADYSTATECHANGE in cel('script')) { - defer = function defer(id) { - html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () { - html.removeChild(this); - run.call(id); - }; - }; - } else { - defer = function defer(id) { - setTimeout(ctx(run, id, 1), 0); - }; - } - } - - module.exports = { - set: setTask, - clear: clearTask - }; - - /***/ }), - /* 91 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = function (fn, args, that) { - var un = that === undefined; - - switch (args.length) { - case 0: - return un ? fn() : fn.call(that); - - case 1: - return un ? fn(args[0]) : fn.call(that, args[0]); - - case 2: - return un ? fn(args[0], args[1]) : fn.call(that, args[0], args[1]); - - case 3: - return un ? fn(args[0], args[1], args[2]) : fn.call(that, args[0], args[1], args[2]); - - case 4: - return un ? fn(args[0], args[1], args[2], args[3]) : fn.call(that, args[0], args[1], args[2], args[3]); - } - - return fn.apply(that, args); - }; - - /***/ }), - /* 92 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var global = __w_extracthighlights_require__(8); - - var macrotask = __w_extracthighlights_require__(90).set; - - var Observer = global.MutationObserver || global.WebKitMutationObserver; - var process = global.process; - var Promise = global.Promise; - var isNode = __w_extracthighlights_require__(29)(process) == 'process'; - - module.exports = function () { - var head, last, notify; - - var flush = function flush() { - var parent, fn; - if (isNode && (parent = process.domain)) parent.exit(); - - while (head) { - fn = head.fn; - head = head.next; - - try { - fn(); - } catch (e) { - if (head) notify();else last = undefined; - throw e; - } - } - - last = undefined; - if (parent) parent.enter(); - }; - - if (isNode) { - notify = function notify() { - process.nextTick(flush); - }; - } else if (Observer && !(global.navigator && global.navigator.standalone)) { - var toggle = true; - var node = document.createTextNode(''); - new Observer(flush).observe(node, { - characterData: true - }); - - notify = function notify() { - node.data = toggle = !toggle; - }; - } else if (Promise && Promise.resolve) { - var promise = Promise.resolve(undefined); - - notify = function notify() { - promise.then(flush); - }; - } else { - notify = function notify() { - macrotask.call(global, flush); - }; - } - - return function (fn) { - var task = { - fn: fn, - next: undefined - }; - if (last) last.next = task; - - if (!head) { - head = task; - notify(); - } - - last = task; - }; - }; - - /***/ }), - /* 93 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var aFunction = __w_extracthighlights_require__(24); - - function PromiseCapability(C) { - var resolve, reject; - this.promise = new C(function ($$resolve, $$reject) { - if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); - resolve = $$resolve; - reject = $$reject; - }); - this.resolve = aFunction(resolve); - this.reject = aFunction(reject); - } - - module.exports.f = function (C) { - return new PromiseCapability(C); - }; - - /***/ }), - /* 94 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = function (exec) { - try { - return { - e: false, - v: exec() - }; - } catch (e) { - return { - e: true, - v: e - }; - } - }; - - /***/ }), - /* 95 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var global = __w_extracthighlights_require__(8); - - var navigator = global.navigator; - module.exports = navigator && navigator.userAgent || ''; - - /***/ }), - /* 96 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var anObject = __w_extracthighlights_require__(12); - - var isObject = __w_extracthighlights_require__(13); - - var newPromiseCapability = __w_extracthighlights_require__(93); - - module.exports = function (C, x) { - anObject(C); - if (isObject(x) && x.constructor === C) return x; - var promiseCapability = newPromiseCapability.f(C); - var resolve = promiseCapability.resolve; - resolve(x); - return promiseCapability.promise; - }; - - /***/ }), - /* 97 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var redefine = __w_extracthighlights_require__(20); - - module.exports = function (target, src, safe) { - for (var key in src) { - redefine(target, key, src[key], safe); - } - - return target; - }; - - /***/ }), - /* 98 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var global = __w_extracthighlights_require__(8); - - var dP = __w_extracthighlights_require__(11); - - var DESCRIPTORS = __w_extracthighlights_require__(15); - - var SPECIES = __w_extracthighlights_require__(30)('species'); - - module.exports = function (KEY) { - var C = global[KEY]; - if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, { - configurable: true, - get: function get() { - return this; - } - }); - }; - - /***/ }), - /* 99 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(7); - - var core = __w_extracthighlights_require__(9); - - var global = __w_extracthighlights_require__(8); - - var speciesConstructor = __w_extracthighlights_require__(89); - - var promiseResolve = __w_extracthighlights_require__(96); - - $export($export.P + $export.R, 'Promise', { - 'finally': function _finally(onFinally) { - var C = speciesConstructor(this, core.Promise || global.Promise); - var isFunction = typeof onFinally == 'function'; - return this.then(isFunction ? function (x) { - return promiseResolve(C, onFinally()).then(function () { - return x; - }); - } : onFinally, isFunction ? function (e) { - return promiseResolve(C, onFinally()).then(function () { - throw e; - }); - } : onFinally); - } - }); - - /***/ }), - /* 100 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(7); - - var newPromiseCapability = __w_extracthighlights_require__(93); - - var perform = __w_extracthighlights_require__(94); - - $export($export.S, 'Promise', { - 'try': function _try(callbackfn) { - var promiseCapability = newPromiseCapability.f(this); - var result = perform(callbackfn); - (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v); - return promiseCapability.promise; - } - }); - - /***/ }), - /* 101 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(82); - - __w_extracthighlights_require__(83); - - __w_extracthighlights_require__(102); - - __w_extracthighlights_require__(114); - - __w_extracthighlights_require__(116); - - module.exports = __w_extracthighlights_require__(9).WeakMap; - - /***/ }), - /* 102 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var each = __w_extracthighlights_require__(103)(0); - - var redefine = __w_extracthighlights_require__(20); - - var meta = __w_extracthighlights_require__(107); - - var assign = __w_extracthighlights_require__(71); - - var weak = __w_extracthighlights_require__(108); - - var isObject = __w_extracthighlights_require__(13); - - var fails = __w_extracthighlights_require__(16); - - var validate = __w_extracthighlights_require__(109); - - var WEAK_MAP = 'WeakMap'; - var getWeak = meta.getWeak; - var isExtensible = Object.isExtensible; - var uncaughtFrozenStore = weak.ufstore; - var tmp = {}; - var InternalMap; - - var wrapper = function wrapper(get) { - return function WeakMap() { - return get(this, arguments.length > 0 ? arguments[0] : undefined); - }; - }; - - var methods = { - get: function get(key) { - if (isObject(key)) { - var data = getWeak(key); - if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key); - return data ? data[this._i] : undefined; - } - }, - set: function set(key, value) { - return weak.def(validate(this, WEAK_MAP), key, value); - } - }; - - var $WeakMap = module.exports = __w_extracthighlights_require__(110)(WEAK_MAP, wrapper, methods, weak, true, true); - - if (fails(function () { - return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; - })) { - InternalMap = weak.getConstructor(wrapper, WEAK_MAP); - assign(InternalMap.prototype, methods); - meta.NEED = true; - each(['delete', 'has', 'get', 'set'], function (key) { - var proto = $WeakMap.prototype; - var method = proto[key]; - redefine(proto, key, function (a, b) { - if (isObject(a) && !isExtensible(a)) { - if (!this._f) this._f = new InternalMap(); - - var result = this._f[key](a, b); - - return key == 'set' ? this : result; - } - - return method.call(this, a, b); - }); - }); - } - - /***/ }), - /* 103 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var ctx = __w_extracthighlights_require__(23); - - var IObject = __w_extracthighlights_require__(43); - - var toObject = __w_extracthighlights_require__(61); - - var toLength = __w_extracthighlights_require__(25); - - var asc = __w_extracthighlights_require__(104); - - module.exports = function (TYPE, $create) { - var IS_MAP = TYPE == 1; - var IS_FILTER = TYPE == 2; - var IS_SOME = TYPE == 3; - var IS_EVERY = TYPE == 4; - var IS_FIND_INDEX = TYPE == 6; - var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; - var create = $create || asc; - return function ($this, callbackfn, that) { - var O = toObject($this); - var self = IObject(O); - var f = ctx(callbackfn, that, 3); - var length = toLength(self.length); - var index = 0; - var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; - var val, res; - - for (; length > index; index++) { - if (NO_HOLES || index in self) { - val = self[index]; - res = f(val, index, O); - - if (TYPE) { - if (IS_MAP) result[index] = res;else if (res) switch (TYPE) { - case 3: - return true; - - case 5: - return val; - - case 6: - return index; - - case 2: - result.push(val); - } else if (IS_EVERY) return false; - } - } - } - - return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; - }; - }; - - /***/ }), - /* 104 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var speciesConstructor = __w_extracthighlights_require__(105); - - module.exports = function (original, length) { - return new (speciesConstructor(original))(length); - }; - - /***/ }), - /* 105 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var isObject = __w_extracthighlights_require__(13); - - var isArray = __w_extracthighlights_require__(106); - - var SPECIES = __w_extracthighlights_require__(30)('species'); - - module.exports = function (original) { - var C; - - if (isArray(original)) { - C = original.constructor; - if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined; - - if (isObject(C)) { - C = C[SPECIES]; - if (C === null) C = undefined; - } - } - - return C === undefined ? Array : C; - }; - - /***/ }), - /* 106 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var cof = __w_extracthighlights_require__(29); - - module.exports = Array.isArray || function isArray(arg) { - return cof(arg) == 'Array'; - }; - - /***/ }), - /* 107 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - var META = __w_extracthighlights_require__(22)('meta'); - - var isObject = __w_extracthighlights_require__(13); - - var has = __w_extracthighlights_require__(21); - - var setDesc = __w_extracthighlights_require__(11).f; - - var id = 0; - - var isExtensible = Object.isExtensible || function () { - return true; - }; - - var FREEZE = !__w_extracthighlights_require__(16)(function () { - return isExtensible(Object.preventExtensions({})); - }); - - var setMeta = function setMeta(it) { - setDesc(it, META, { - value: { - i: 'O' + ++id, - w: {} - } - }); - }; - - var fastKey = function fastKey(it, create) { - if (!isObject(it)) return _typeof(it) == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; - - if (!has(it, META)) { - if (!isExtensible(it)) return 'F'; - if (!create) return 'E'; - setMeta(it); - } - - return it[META].i; - }; - - var getWeak = function getWeak(it, create) { - if (!has(it, META)) { - if (!isExtensible(it)) return true; - if (!create) return false; - setMeta(it); - } - - return it[META].w; - }; - - var onFreeze = function onFreeze(it) { - if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it); - return it; - }; - - var meta = module.exports = { - KEY: META, - NEED: false, - fastKey: fastKey, - getWeak: getWeak, - onFreeze: onFreeze - }; - - /***/ }), - /* 108 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var redefineAll = __w_extracthighlights_require__(97); - - var getWeak = __w_extracthighlights_require__(107).getWeak; - - var anObject = __w_extracthighlights_require__(12); - - var isObject = __w_extracthighlights_require__(13); - - var anInstance = __w_extracthighlights_require__(87); - - var forOf = __w_extracthighlights_require__(88); - - var createArrayMethod = __w_extracthighlights_require__(103); - - var $has = __w_extracthighlights_require__(21); - - var validate = __w_extracthighlights_require__(109); - - var arrayFind = createArrayMethod(5); - var arrayFindIndex = createArrayMethod(6); - var id = 0; - - var uncaughtFrozenStore = function uncaughtFrozenStore(that) { - return that._l || (that._l = new UncaughtFrozenStore()); - }; - - var UncaughtFrozenStore = function UncaughtFrozenStore() { - this.a = []; - }; - - var findUncaughtFrozen = function findUncaughtFrozen(store, key) { - return arrayFind(store.a, function (it) { - return it[0] === key; - }); - }; - - UncaughtFrozenStore.prototype = { - get: function get(key) { - var entry = findUncaughtFrozen(this, key); - if (entry) return entry[1]; - }, - has: function has(key) { - return !!findUncaughtFrozen(this, key); - }, - set: function set(key, value) { - var entry = findUncaughtFrozen(this, key); - if (entry) entry[1] = value;else this.a.push([key, value]); - }, - 'delete': function _delete(key) { - var index = arrayFindIndex(this.a, function (it) { - return it[0] === key; - }); - if (~index) this.a.splice(index, 1); - return !!~index; - } - }; - module.exports = { - getConstructor: function getConstructor(wrapper, NAME, IS_MAP, ADDER) { - var C = wrapper(function (that, iterable) { - anInstance(that, C, NAME, '_i'); - that._t = NAME; - that._i = id++; - that._l = undefined; - if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); - }); - redefineAll(C.prototype, { - 'delete': function _delete(key) { - if (!isObject(key)) return false; - var data = getWeak(key); - if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key); - return data && $has(data, this._i) && delete data[this._i]; - }, - has: function has(key) { - if (!isObject(key)) return false; - var data = getWeak(key); - if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key); - return data && $has(data, this._i); - } - }); - return C; - }, - def: function def(that, key, value) { - var data = getWeak(anObject(key), true); - if (data === true) uncaughtFrozenStore(that).set(key, value);else data[that._i] = value; - return that; - }, - ufstore: uncaughtFrozenStore - }; - - /***/ }), - /* 109 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var isObject = __w_extracthighlights_require__(13); - - module.exports = function (it, TYPE) { - if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!'); - return it; - }; - - /***/ }), - /* 110 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var global = __w_extracthighlights_require__(8); - - var $export = __w_extracthighlights_require__(7); - - var redefine = __w_extracthighlights_require__(20); - - var redefineAll = __w_extracthighlights_require__(97); - - var meta = __w_extracthighlights_require__(107); - - var forOf = __w_extracthighlights_require__(88); - - var anInstance = __w_extracthighlights_require__(87); - - var isObject = __w_extracthighlights_require__(13); - - var fails = __w_extracthighlights_require__(16); - - var $iterDetect = __w_extracthighlights_require__(68); - - var setToStringTag = __w_extracthighlights_require__(59); - - var inheritIfRequired = __w_extracthighlights_require__(111); - - module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) { - var Base = global[NAME]; - var C = Base; - var ADDER = IS_MAP ? 'set' : 'add'; - var proto = C && C.prototype; - var O = {}; - - var fixMethod = function fixMethod(KEY) { - var fn = proto[KEY]; - redefine(proto, KEY, KEY == 'delete' ? function (a) { - return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); - } : KEY == 'has' ? function has(a) { - return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); - } : KEY == 'get' ? function get(a) { - return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a); - } : KEY == 'add' ? function add(a) { - fn.call(this, a === 0 ? 0 : a); - return this; - } : function set(a, b) { - fn.call(this, a === 0 ? 0 : a, b); - return this; - }); - }; - - if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () { - new C().entries().next(); - }))) { - C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER); - redefineAll(C.prototype, methods); - meta.NEED = true; - } else { - var instance = new C(); - var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance; - var THROWS_ON_PRIMITIVES = fails(function () { - instance.has(1); - }); - var ACCEPT_ITERABLES = $iterDetect(function (iter) { - new C(iter); - }); - var BUGGY_ZERO = !IS_WEAK && fails(function () { - var $instance = new C(); - var index = 5; - - while (index--) { - $instance[ADDER](index, index); - } - - return !$instance.has(-0); - }); - - if (!ACCEPT_ITERABLES) { - C = wrapper(function (target, iterable) { - anInstance(target, C, NAME); - var that = inheritIfRequired(new Base(), target, C); - if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); - return that; - }); - C.prototype = proto; - proto.constructor = C; - } - - if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) { - fixMethod('delete'); - fixMethod('has'); - IS_MAP && fixMethod('get'); - } - - if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER); - if (IS_WEAK && proto.clear) delete proto.clear; - } - - setToStringTag(C, NAME); - O[NAME] = C; - $export($export.G + $export.W + $export.F * (C != Base), O); - if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP); - return C; - }; - - /***/ }), - /* 111 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var isObject = __w_extracthighlights_require__(13); - - var setPrototypeOf = __w_extracthighlights_require__(112).set; - - module.exports = function (that, target, C) { - var S = target.constructor; - var P; - - if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) { - setPrototypeOf(that, P); - } - - return that; - }; - - /***/ }), - /* 112 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var isObject = __w_extracthighlights_require__(13); - - var anObject = __w_extracthighlights_require__(12); - - var check = function check(O, proto) { - anObject(O); - if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!"); - }; - - module.exports = { - set: Object.setPrototypeOf || ('__proto__' in {} ? function (test, buggy, set) { - try { - set = __w_extracthighlights_require__(23)(Function.call, __w_extracthighlights_require__(113).f(Object.prototype, '__proto__').set, 2); - set(test, []); - buggy = !(test instanceof Array); - } catch (e) { - buggy = true; - } - - return function setPrototypeOf(O, proto) { - check(O, proto); - if (buggy) O.__proto__ = proto;else set(O, proto); - return O; - }; - }({}, false) : undefined), - check: check - }; - - /***/ }), - /* 113 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var pIE = __w_extracthighlights_require__(73); - - var createDesc = __w_extracthighlights_require__(19); - - var toIObject = __w_extracthighlights_require__(42); - - var toPrimitive = __w_extracthighlights_require__(18); - - var has = __w_extracthighlights_require__(21); - - var IE8_DOM_DEFINE = __w_extracthighlights_require__(14); - - var gOPD = Object.getOwnPropertyDescriptor; - exports.f = __w_extracthighlights_require__(15) ? gOPD : function getOwnPropertyDescriptor(O, P) { - O = toIObject(O); - P = toPrimitive(P, true); - if (IE8_DOM_DEFINE) try { - return gOPD(O, P); - } catch (e) {} - if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]); - }; - - /***/ }), - /* 114 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(115)('WeakMap'); - - /***/ }), - /* 115 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(7); - - module.exports = function (COLLECTION) { - $export($export.S, COLLECTION, { - of: function of() { - var length = arguments.length; - var A = new Array(length); - - while (length--) { - A[length] = arguments[length]; - } - - return new this(A); - } - }); - }; - - /***/ }), - /* 116 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(117)('WeakMap'); - - /***/ }), - /* 117 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(7); - - var aFunction = __w_extracthighlights_require__(24); - - var ctx = __w_extracthighlights_require__(23); - - var forOf = __w_extracthighlights_require__(88); - - module.exports = function (COLLECTION) { - $export($export.S, COLLECTION, { - from: function from(source) { - var mapFn = arguments[1]; - var mapping, A, n, cb; - aFunction(this); - mapping = mapFn !== undefined; - if (mapping) aFunction(mapFn); - if (source == undefined) return new this(); - A = []; - - if (mapping) { - n = 0; - cb = ctx(mapFn, arguments[2], 2); - forOf(source, false, function (nextItem) { - A.push(cb(nextItem, n++)); - }); - } else { - forOf(source, false, A.push, A); - } - - return new this(A); - } - }); - }; - - /***/ }), - /* 118 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(82); - - __w_extracthighlights_require__(83); - - __w_extracthighlights_require__(119); - - __w_extracthighlights_require__(120); - - __w_extracthighlights_require__(121); - - module.exports = __w_extracthighlights_require__(9).WeakSet; - - /***/ }), - /* 119 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var weak = __w_extracthighlights_require__(108); - - var validate = __w_extracthighlights_require__(109); - - var WEAK_SET = 'WeakSet'; - - __w_extracthighlights_require__(110)(WEAK_SET, function (get) { - return function WeakSet() { - return get(this, arguments.length > 0 ? arguments[0] : undefined); - }; - }, { - add: function add(value) { - return weak.def(validate(this, WEAK_SET), value, true); - } - }, weak, false, true); - - /***/ }), - /* 120 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(115)('WeakSet'); - - /***/ }), - /* 121 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(117)('WeakSet'); - - /***/ }), - /* 122 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(123); - - module.exports = __w_extracthighlights_require__(9).String.codePointAt; - - /***/ }), - /* 123 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(7); - - var $at = __w_extracthighlights_require__(48)(false); - - $export($export.P, 'String', { - codePointAt: function codePointAt(pos) { - return $at(this, pos); - } - }); - - /***/ }), - /* 124 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(125); - - module.exports = __w_extracthighlights_require__(9).String.fromCodePoint; - - /***/ }), - /* 125 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(7); - - var toAbsoluteIndex = __w_extracthighlights_require__(44); - - var fromCharCode = String.fromCharCode; - var $fromCodePoint = String.fromCodePoint; - $export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', { - fromCodePoint: function fromCodePoint(x) { - var res = []; - var aLen = arguments.length; - var i = 0; - var code; - - while (aLen > i) { - code = +arguments[i++]; - if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point'); - res.push(code < 0x10000 ? fromCharCode(code) : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)); - } - - return res.join(''); - } - }); - - /***/ }), - /* 126 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(127); - - __w_extracthighlights_require__(82); - - module.exports = __w_extracthighlights_require__(9).Symbol; - - /***/ }), - /* 127 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - var global = __w_extracthighlights_require__(8); - - var has = __w_extracthighlights_require__(21); - - var DESCRIPTORS = __w_extracthighlights_require__(15); - - var $export = __w_extracthighlights_require__(7); - - var redefine = __w_extracthighlights_require__(20); - - var META = __w_extracthighlights_require__(107).KEY; - - var $fails = __w_extracthighlights_require__(16); - - var shared = __w_extracthighlights_require__(31); - - var setToStringTag = __w_extracthighlights_require__(59); - - var uid = __w_extracthighlights_require__(22); - - var wks = __w_extracthighlights_require__(30); - - var wksExt = __w_extracthighlights_require__(128); - - var wksDefine = __w_extracthighlights_require__(129); - - var enumKeys = __w_extracthighlights_require__(130); - - var isArray = __w_extracthighlights_require__(106); - - var anObject = __w_extracthighlights_require__(12); - - var isObject = __w_extracthighlights_require__(13); - - var toIObject = __w_extracthighlights_require__(42); - - var toPrimitive = __w_extracthighlights_require__(18); - - var createDesc = __w_extracthighlights_require__(19); - - var _create = __w_extracthighlights_require__(52); - - var gOPNExt = __w_extracthighlights_require__(131); - - var $GOPD = __w_extracthighlights_require__(113); - - var $DP = __w_extracthighlights_require__(11); - - var $keys = __w_extracthighlights_require__(54); - - var gOPD = $GOPD.f; - var dP = $DP.f; - var gOPN = gOPNExt.f; - var $Symbol = global.Symbol; - var $JSON = global.JSON; - - var _stringify = $JSON && $JSON.stringify; - - var PROTOTYPE = 'prototype'; - var HIDDEN = wks('_hidden'); - var TO_PRIMITIVE = wks('toPrimitive'); - var isEnum = {}.propertyIsEnumerable; - var SymbolRegistry = shared('symbol-registry'); - var AllSymbols = shared('symbols'); - var OPSymbols = shared('op-symbols'); - var ObjectProto = Object[PROTOTYPE]; - var USE_NATIVE = typeof $Symbol == 'function'; - var QObject = global.QObject; - var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; - var setSymbolDesc = DESCRIPTORS && $fails(function () { - return _create(dP({}, 'a', { - get: function get() { - return dP(this, 'a', { - value: 7 - }).a; - } - })).a != 7; - }) ? function (it, key, D) { - var protoDesc = gOPD(ObjectProto, key); - if (protoDesc) delete ObjectProto[key]; - dP(it, key, D); - if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc); - } : dP; - - var wrap = function wrap(tag) { - var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]); - - sym._k = tag; - return sym; - }; - - var isSymbol = USE_NATIVE && _typeof($Symbol.iterator) == 'symbol' ? function (it) { - return _typeof(it) == 'symbol'; - } : function (it) { - return it instanceof $Symbol; - }; - - var $defineProperty = function defineProperty(it, key, D) { - if (it === ObjectProto) $defineProperty(OPSymbols, key, D); - anObject(it); - key = toPrimitive(key, true); - anObject(D); - - if (has(AllSymbols, key)) { - if (!D.enumerable) { - if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {})); - it[HIDDEN][key] = true; - } else { - if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false; - D = _create(D, { - enumerable: createDesc(0, false) - }); - } - - return setSymbolDesc(it, key, D); - } - - return dP(it, key, D); - }; - - var $defineProperties = function defineProperties(it, P) { - anObject(it); - var keys = enumKeys(P = toIObject(P)); - var i = 0; - var l = keys.length; - var key; - - while (l > i) { - $defineProperty(it, key = keys[i++], P[key]); - } - - return it; - }; - - var $create = function create(it, P) { - return P === undefined ? _create(it) : $defineProperties(_create(it), P); - }; - - var $propertyIsEnumerable = function propertyIsEnumerable(key) { - var E = isEnum.call(this, key = toPrimitive(key, true)); - if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false; - return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true; - }; - - var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) { - it = toIObject(it); - key = toPrimitive(key, true); - if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return; - var D = gOPD(it, key); - if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true; - return D; - }; - - var $getOwnPropertyNames = function getOwnPropertyNames(it) { - var names = gOPN(toIObject(it)); - var result = []; - var i = 0; - var key; - - while (names.length > i) { - if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key); - } - - return result; - }; - - var $getOwnPropertySymbols = function getOwnPropertySymbols(it) { - var IS_OP = it === ObjectProto; - var names = gOPN(IS_OP ? OPSymbols : toIObject(it)); - var result = []; - var i = 0; - var key; - - while (names.length > i) { - if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]); - } - - return result; - }; - - if (!USE_NATIVE) { - $Symbol = function _Symbol() { - if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!'); - var tag = uid(arguments.length > 0 ? arguments[0] : undefined); - - var $set = function $set(value) { - if (this === ObjectProto) $set.call(OPSymbols, value); - if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false; - setSymbolDesc(this, tag, createDesc(1, value)); - }; - - if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { - configurable: true, - set: $set - }); - return wrap(tag); - }; - - redefine($Symbol[PROTOTYPE], 'toString', function toString() { - return this._k; - }); - $GOPD.f = $getOwnPropertyDescriptor; - $DP.f = $defineProperty; - __w_extracthighlights_require__(132).f = gOPNExt.f = $getOwnPropertyNames; - __w_extracthighlights_require__(73).f = $propertyIsEnumerable; - __w_extracthighlights_require__(72).f = $getOwnPropertySymbols; - - if (DESCRIPTORS && !__w_extracthighlights_require__(32)) { - redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true); - } - - wksExt.f = function (name) { - return wrap(wks(name)); - }; - } - - $export($export.G + $export.W + $export.F * !USE_NATIVE, { - Symbol: $Symbol - }); - - for (var es6Symbols = 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'.split(','), j = 0; es6Symbols.length > j;) { - wks(es6Symbols[j++]); - } - - for (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) { - wksDefine(wellKnownSymbols[k++]); - } - - $export($export.S + $export.F * !USE_NATIVE, 'Symbol', { - 'for': function _for(key) { - return has(SymbolRegistry, key += '') ? SymbolRegistry[key] : SymbolRegistry[key] = $Symbol(key); - }, - keyFor: function keyFor(sym) { - if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!'); - - for (var key in SymbolRegistry) { - if (SymbolRegistry[key] === sym) return key; - } - }, - useSetter: function useSetter() { - setter = true; - }, - useSimple: function useSimple() { - setter = false; - } - }); - $export($export.S + $export.F * !USE_NATIVE, 'Object', { - create: $create, - defineProperty: $defineProperty, - defineProperties: $defineProperties, - getOwnPropertyDescriptor: $getOwnPropertyDescriptor, - getOwnPropertyNames: $getOwnPropertyNames, - getOwnPropertySymbols: $getOwnPropertySymbols - }); - $JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () { - var S = $Symbol(); - return _stringify([S]) != '[null]' || _stringify({ - a: S - }) != '{}' || _stringify(Object(S)) != '{}'; - })), 'JSON', { - stringify: function stringify(it) { - var args = [it]; - var i = 1; - var replacer, $replacer; - - while (arguments.length > i) { - args.push(arguments[i++]); - } - - $replacer = replacer = args[1]; - if (!isObject(replacer) && it === undefined || isSymbol(it)) return; - if (!isArray(replacer)) replacer = function replacer(key, value) { - if (typeof $replacer == 'function') value = $replacer.call(this, key, value); - if (!isSymbol(value)) return value; - }; - args[1] = replacer; - return _stringify.apply($JSON, args); - } - }); - $Symbol[PROTOTYPE][TO_PRIMITIVE] || __w_extracthighlights_require__(10)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf); - setToStringTag($Symbol, 'Symbol'); - setToStringTag(Math, 'Math', true); - setToStringTag(global.JSON, 'JSON', true); - - /***/ }), - /* 128 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - exports.f = __w_extracthighlights_require__(30); - - /***/ }), - /* 129 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var global = __w_extracthighlights_require__(8); - - var core = __w_extracthighlights_require__(9); - - var LIBRARY = __w_extracthighlights_require__(32); - - var wksExt = __w_extracthighlights_require__(128); - - var defineProperty = __w_extracthighlights_require__(11).f; - - module.exports = function (name) { - var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {}); - if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { - value: wksExt.f(name) - }); - }; - - /***/ }), - /* 130 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var getKeys = __w_extracthighlights_require__(54); - - var gOPS = __w_extracthighlights_require__(72); - - var pIE = __w_extracthighlights_require__(73); - - module.exports = function (it) { - var result = getKeys(it); - var getSymbols = gOPS.f; - - if (getSymbols) { - var symbols = getSymbols(it); - var isEnum = pIE.f; - var i = 0; - var key; - - while (symbols.length > i) { - if (isEnum.call(it, key = symbols[i++])) result.push(key); - } - } - - return result; - }; - - /***/ }), - /* 131 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - var toIObject = __w_extracthighlights_require__(42); - - var gOPN = __w_extracthighlights_require__(132).f; - - var toString = {}.toString; - var windowNames = (typeof window === "undefined" ? "undefined" : _typeof(window)) == 'object' && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : []; - - var getWindowNames = function getWindowNames(it) { - try { - return gOPN(it); - } catch (e) { - return windowNames.slice(); - } - }; - - module.exports.f = function getOwnPropertyNames(it) { - return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it)); - }; - - /***/ }), - /* 132 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $keys = __w_extracthighlights_require__(55); - - var hiddenKeys = __w_extracthighlights_require__(57).concat('length', 'prototype'); - - exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { - return $keys(O, hiddenKeys); - }; - - /***/ }), - /* 133 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(134); - - module.exports = __w_extracthighlights_require__(9).String.padStart; - - /***/ }), - /* 134 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(7); - - var $pad = __w_extracthighlights_require__(135); - - var userAgent = __w_extracthighlights_require__(95); - - $export($export.P + $export.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(userAgent), 'String', { - padStart: function padStart(maxLength) { - return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true); - } - }); - - /***/ }), - /* 135 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var toLength = __w_extracthighlights_require__(25); - - var repeat = __w_extracthighlights_require__(136); - - var defined = __w_extracthighlights_require__(33); - - module.exports = function (that, maxLength, fillString, left) { - var S = String(defined(that)); - var stringLength = S.length; - var fillStr = fillString === undefined ? ' ' : String(fillString); - var intMaxLength = toLength(maxLength); - if (intMaxLength <= stringLength || fillStr == '') return S; - var fillLen = intMaxLength - stringLength; - var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length)); - if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen); - return left ? stringFiller + S : S + stringFiller; - }; - - /***/ }), - /* 136 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var toInteger = __w_extracthighlights_require__(26); - - var defined = __w_extracthighlights_require__(33); - - module.exports = function repeat(count) { - var str = String(defined(this)); - var res = ''; - var n = toInteger(count); - if (n < 0 || n == Infinity) throw RangeError("Count can't be negative"); - - for (; n > 0; (n >>>= 1) && (str += str)) { - if (n & 1) res += str; - } - - return res; - }; - - /***/ }), - /* 137 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(138); - - module.exports = __w_extracthighlights_require__(9).String.padEnd; - - /***/ }), - /* 138 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(7); - - var $pad = __w_extracthighlights_require__(135); - - var userAgent = __w_extracthighlights_require__(95); - - $export($export.P + $export.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(userAgent), 'String', { - padEnd: function padEnd(maxLength) { - return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false); - } - }); - - /***/ }), - /* 139 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - __w_extracthighlights_require__(140); - - module.exports = __w_extracthighlights_require__(9).Object.values; - - /***/ }), - /* 140 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var $export = __w_extracthighlights_require__(7); - - var $values = __w_extracthighlights_require__(141)(false); - - $export($export.S, 'Object', { - values: function values(it) { - return $values(it); - } - }); - - /***/ }), - /* 141 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var getKeys = __w_extracthighlights_require__(54); - - var toIObject = __w_extracthighlights_require__(42); - - var isEnum = __w_extracthighlights_require__(73).f; - - module.exports = function (isEntries) { - return function (it) { - var O = toIObject(it); - var keys = getKeys(O); - var length = keys.length; - var i = 0; - var result = []; - var key; - - while (length > i) { - if (isEnum.call(O, key = keys[i++])) { - result.push(isEntries ? [key, O[key]] : O[key]); - } - } - - return result; - }; - }; - - /***/ }), - /* 142 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - { - var isReadableStreamSupported = false; - - if (typeof ReadableStream !== 'undefined') { - try { - new ReadableStream({ - start: function start(controller) { - controller.close(); - } - }); - isReadableStreamSupported = true; - } catch (e) {} - } - - if (isReadableStreamSupported) { - exports.ReadableStream = ReadableStream; - } else { - exports.ReadableStream = __w_extracthighlights_require__(143).ReadableStream; - } - } - - /***/ }), - /* 143 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - function _typeof2(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof2(obj); } - - (function (e, a) { - for (var i in a) { - e[i] = a[i]; - } - })(exports, function (modules) { - var installedModules = {}; - - function __w_extracthighlights_require__(moduleId) { - if (installedModules[moduleId]) return installedModules[moduleId].exports; - var module = installedModules[moduleId] = { - i: moduleId, - l: false, - exports: {} - }; - modules[moduleId].call(module.exports, module, module.exports, __w_extracthighlights_require__); - module.l = true; - return module.exports; - } - - __w_extracthighlights_require__.m = modules; - __w_extracthighlights_require__.c = installedModules; - - __w_extracthighlights_require__.i = function (value) { - return value; - }; - - __w_extracthighlights_require__.d = function (exports, name, getter) { - if (!__w_extracthighlights_require__.o(exports, name)) { - Object.defineProperty(exports, name, { - configurable: false, - enumerable: true, - get: getter - }); - } - }; - - __w_extracthighlights_require__.n = function (module) { - var getter = module && module.__esModule ? function getDefault() { - return module['default']; - } : function getModuleExports() { - return module; - }; - - __w_extracthighlights_require__.d(getter, 'a', getter); - - return getter; - }; - - __w_extracthighlights_require__.o = function (object, property) { - return Object.prototype.hasOwnProperty.call(object, property); - }; - - __w_extracthighlights_require__.p = ""; - return __w_extracthighlights_require__(__w_extracthighlights_require__.s = 7); - }([function (module, exports, __w_extracthighlights_require__) { - - var _typeof = typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol" ? function (obj) { - return _typeof2(obj); - } : function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : _typeof2(obj); - }; - - var _require = __w_extracthighlights_require__(1), - assert = _require.assert; - - function IsPropertyKey(argument) { - return typeof argument === 'string' || (typeof argument === 'undefined' ? 'undefined' : _typeof(argument)) === 'symbol'; - } - - exports.typeIsObject = function (x) { - return (typeof x === 'undefined' ? 'undefined' : _typeof(x)) === 'object' && x !== null || typeof x === 'function'; - }; - - exports.createDataProperty = function (o, p, v) { - assert(exports.typeIsObject(o)); - Object.defineProperty(o, p, { - value: v, - writable: true, - enumerable: true, - configurable: true - }); - }; - - exports.createArrayFromList = function (elements) { - return elements.slice(); - }; - - exports.ArrayBufferCopy = function (dest, destOffset, src, srcOffset, n) { - new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset); - }; - - exports.CreateIterResultObject = function (value, done) { - assert(typeof done === 'boolean'); - var obj = {}; - Object.defineProperty(obj, 'value', { - value: value, - enumerable: true, - writable: true, - configurable: true - }); - Object.defineProperty(obj, 'done', { - value: done, - enumerable: true, - writable: true, - configurable: true - }); - return obj; - }; - - exports.IsFiniteNonNegativeNumber = function (v) { - if (Number.isNaN(v)) { - return false; - } - - if (v === Infinity) { - return false; - } - - if (v < 0) { - return false; - } - - return true; - }; - - function Call(F, V, args) { - if (typeof F !== 'function') { - throw new TypeError('Argument is not a function'); - } - - return Function.prototype.apply.call(F, V, args); - } - - exports.InvokeOrNoop = function (O, P, args) { - assert(O !== undefined); - assert(IsPropertyKey(P)); - assert(Array.isArray(args)); - var method = O[P]; - - if (method === undefined) { - return undefined; - } - - return Call(method, O, args); - }; - - exports.PromiseInvokeOrNoop = function (O, P, args) { - assert(O !== undefined); - assert(IsPropertyKey(P)); - assert(Array.isArray(args)); - - try { - return Promise.resolve(exports.InvokeOrNoop(O, P, args)); - } catch (returnValueE) { - return Promise.reject(returnValueE); - } - }; - - exports.PromiseInvokeOrPerformFallback = function (O, P, args, F, argsF) { - assert(O !== undefined); - assert(IsPropertyKey(P)); - assert(Array.isArray(args)); - assert(Array.isArray(argsF)); - var method = void 0; - - try { - method = O[P]; - } catch (methodE) { - return Promise.reject(methodE); - } - - if (method === undefined) { - return F.apply(null, argsF); - } - - try { - return Promise.resolve(Call(method, O, args)); - } catch (e) { - return Promise.reject(e); - } - }; - - exports.TransferArrayBuffer = function (O) { - return O.slice(); - }; - - exports.ValidateAndNormalizeHighWaterMark = function (highWaterMark) { - highWaterMark = Number(highWaterMark); - - if (Number.isNaN(highWaterMark) || highWaterMark < 0) { - throw new RangeError('highWaterMark property of a queuing strategy must be non-negative and non-NaN'); - } - - return highWaterMark; - }; - - exports.ValidateAndNormalizeQueuingStrategy = function (size, highWaterMark) { - if (size !== undefined && typeof size !== 'function') { - throw new TypeError('size property of a queuing strategy must be a function'); - } - - highWaterMark = exports.ValidateAndNormalizeHighWaterMark(highWaterMark); - return { - size: size, - highWaterMark: highWaterMark - }; - }; - }, function (module, exports, __w_extracthighlights_require__) { - - function rethrowAssertionErrorRejection(e) { - if (e && e.constructor === AssertionError) { - setTimeout(function () { - throw e; - }, 0); - } - } - - function AssertionError(message) { - this.name = 'AssertionError'; - this.message = message || ''; - this.stack = new Error().stack; - } - - AssertionError.prototype = Object.create(Error.prototype); - AssertionError.prototype.constructor = AssertionError; - - function assert(value, message) { - if (!value) { - throw new AssertionError(message); - } - } - - module.exports = { - rethrowAssertionErrorRejection: rethrowAssertionErrorRejection, - AssertionError: AssertionError, - assert: assert - }; - }, function (module, exports, __w_extracthighlights_require__) { - - var _createClass = function () { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - return function (Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps); - if (staticProps) defineProperties(Constructor, staticProps); - return Constructor; - }; - }(); - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - var _require = __w_extracthighlights_require__(0), - InvokeOrNoop = _require.InvokeOrNoop, - PromiseInvokeOrNoop = _require.PromiseInvokeOrNoop, - ValidateAndNormalizeQueuingStrategy = _require.ValidateAndNormalizeQueuingStrategy, - typeIsObject = _require.typeIsObject; - - var _require2 = __w_extracthighlights_require__(1), - assert = _require2.assert, - rethrowAssertionErrorRejection = _require2.rethrowAssertionErrorRejection; - - var _require3 = __w_extracthighlights_require__(3), - DequeueValue = _require3.DequeueValue, - EnqueueValueWithSize = _require3.EnqueueValueWithSize, - PeekQueueValue = _require3.PeekQueueValue, - ResetQueue = _require3.ResetQueue; - - var WritableStream = function () { - function WritableStream() { - var underlyingSink = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - size = _ref.size, - _ref$highWaterMark = _ref.highWaterMark, - highWaterMark = _ref$highWaterMark === undefined ? 1 : _ref$highWaterMark; - - _classCallCheck(this, WritableStream); - - this._state = 'writable'; - this._storedError = undefined; - this._writer = undefined; - this._writableStreamController = undefined; - this._writeRequests = []; - this._inFlightWriteRequest = undefined; - this._closeRequest = undefined; - this._inFlightCloseRequest = undefined; - this._pendingAbortRequest = undefined; - this._backpressure = false; - var type = underlyingSink.type; - - if (type !== undefined) { - throw new RangeError('Invalid type is specified'); - } - - this._writableStreamController = new WritableStreamDefaultController(this, underlyingSink, size, highWaterMark); - - this._writableStreamController.__startSteps(); - } - - _createClass(WritableStream, [{ - key: 'abort', - value: function abort(reason) { - if (IsWritableStream(this) === false) { - return Promise.reject(streamBrandCheckException('abort')); - } - - if (IsWritableStreamLocked(this) === true) { - return Promise.reject(new TypeError('Cannot abort a stream that already has a writer')); - } - - return WritableStreamAbort(this, reason); - } - }, { - key: 'getWriter', - value: function getWriter() { - if (IsWritableStream(this) === false) { - throw streamBrandCheckException('getWriter'); - } - - return AcquireWritableStreamDefaultWriter(this); - } - }, { - key: 'locked', - get: function get() { - if (IsWritableStream(this) === false) { - throw streamBrandCheckException('locked'); - } - - return IsWritableStreamLocked(this); - } - }]); - - return WritableStream; - }(); - - module.exports = { - AcquireWritableStreamDefaultWriter: AcquireWritableStreamDefaultWriter, - IsWritableStream: IsWritableStream, - IsWritableStreamLocked: IsWritableStreamLocked, - WritableStream: WritableStream, - WritableStreamAbort: WritableStreamAbort, - WritableStreamDefaultControllerError: WritableStreamDefaultControllerError, - WritableStreamDefaultWriterCloseWithErrorPropagation: WritableStreamDefaultWriterCloseWithErrorPropagation, - WritableStreamDefaultWriterRelease: WritableStreamDefaultWriterRelease, - WritableStreamDefaultWriterWrite: WritableStreamDefaultWriterWrite, - WritableStreamCloseQueuedOrInFlight: WritableStreamCloseQueuedOrInFlight - }; - - function AcquireWritableStreamDefaultWriter(stream) { - return new WritableStreamDefaultWriter(stream); - } - - function IsWritableStream(x) { - if (!typeIsObject(x)) { - return false; - } - - if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) { - return false; - } - - return true; - } - - function IsWritableStreamLocked(stream) { - assert(IsWritableStream(stream) === true, 'IsWritableStreamLocked should only be used on known writable streams'); - - if (stream._writer === undefined) { - return false; - } - - return true; - } - - function WritableStreamAbort(stream, reason) { - var state = stream._state; - - if (state === 'closed') { - return Promise.resolve(undefined); - } - - if (state === 'errored') { - return Promise.reject(stream._storedError); - } - - var error = new TypeError('Requested to abort'); - - if (stream._pendingAbortRequest !== undefined) { - return Promise.reject(error); - } - - assert(state === 'writable' || state === 'erroring', 'state must be writable or erroring'); - var wasAlreadyErroring = false; - - if (state === 'erroring') { - wasAlreadyErroring = true; - reason = undefined; - } - - var promise = new Promise(function (resolve, reject) { - stream._pendingAbortRequest = { - _resolve: resolve, - _reject: reject, - _reason: reason, - _wasAlreadyErroring: wasAlreadyErroring - }; - }); - - if (wasAlreadyErroring === false) { - WritableStreamStartErroring(stream, error); - } - - return promise; - } - - function WritableStreamAddWriteRequest(stream) { - assert(IsWritableStreamLocked(stream) === true); - assert(stream._state === 'writable'); - var promise = new Promise(function (resolve, reject) { - var writeRequest = { - _resolve: resolve, - _reject: reject - }; - - stream._writeRequests.push(writeRequest); - }); - return promise; - } - - function WritableStreamDealWithRejection(stream, error) { - var state = stream._state; - - if (state === 'writable') { - WritableStreamStartErroring(stream, error); - return; - } - - assert(state === 'erroring'); - WritableStreamFinishErroring(stream); - } - - function WritableStreamStartErroring(stream, reason) { - assert(stream._storedError === undefined, 'stream._storedError === undefined'); - assert(stream._state === 'writable', 'state must be writable'); - var controller = stream._writableStreamController; - assert(controller !== undefined, 'controller must not be undefined'); - stream._state = 'erroring'; - stream._storedError = reason; - var writer = stream._writer; - - if (writer !== undefined) { - WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason); - } - - if (WritableStreamHasOperationMarkedInFlight(stream) === false && controller._started === true) { - WritableStreamFinishErroring(stream); - } - } - - function WritableStreamFinishErroring(stream) { - assert(stream._state === 'erroring', 'stream._state === erroring'); - assert(WritableStreamHasOperationMarkedInFlight(stream) === false, 'WritableStreamHasOperationMarkedInFlight(stream) === false'); - stream._state = 'errored'; - - stream._writableStreamController.__errorSteps(); - - var storedError = stream._storedError; - - for (var i = 0; i < stream._writeRequests.length; i++) { - var writeRequest = stream._writeRequests[i]; - - writeRequest._reject(storedError); - } - - stream._writeRequests = []; - - if (stream._pendingAbortRequest === undefined) { - WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); - return; - } - - var abortRequest = stream._pendingAbortRequest; - stream._pendingAbortRequest = undefined; - - if (abortRequest._wasAlreadyErroring === true) { - abortRequest._reject(storedError); - - WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); - return; - } - - var promise = stream._writableStreamController.__abortSteps(abortRequest._reason); - - promise.then(function () { - abortRequest._resolve(); - - WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); - }, function (reason) { - abortRequest._reject(reason); - - WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); - }); - } - - function WritableStreamFinishInFlightWrite(stream) { - assert(stream._inFlightWriteRequest !== undefined); - - stream._inFlightWriteRequest._resolve(undefined); - - stream._inFlightWriteRequest = undefined; - } - - function WritableStreamFinishInFlightWriteWithError(stream, error) { - assert(stream._inFlightWriteRequest !== undefined); - - stream._inFlightWriteRequest._reject(error); - - stream._inFlightWriteRequest = undefined; - assert(stream._state === 'writable' || stream._state === 'erroring'); - WritableStreamDealWithRejection(stream, error); - } - - function WritableStreamFinishInFlightClose(stream) { - assert(stream._inFlightCloseRequest !== undefined); - - stream._inFlightCloseRequest._resolve(undefined); - - stream._inFlightCloseRequest = undefined; - var state = stream._state; - assert(state === 'writable' || state === 'erroring'); - - if (state === 'erroring') { - stream._storedError = undefined; - - if (stream._pendingAbortRequest !== undefined) { - stream._pendingAbortRequest._resolve(); - - stream._pendingAbortRequest = undefined; - } - } - - stream._state = 'closed'; - var writer = stream._writer; - - if (writer !== undefined) { - defaultWriterClosedPromiseResolve(writer); - } - - assert(stream._pendingAbortRequest === undefined, 'stream._pendingAbortRequest === undefined'); - assert(stream._storedError === undefined, 'stream._storedError === undefined'); - } - - function WritableStreamFinishInFlightCloseWithError(stream, error) { - assert(stream._inFlightCloseRequest !== undefined); - - stream._inFlightCloseRequest._reject(error); - - stream._inFlightCloseRequest = undefined; - assert(stream._state === 'writable' || stream._state === 'erroring'); - - if (stream._pendingAbortRequest !== undefined) { - stream._pendingAbortRequest._reject(error); - - stream._pendingAbortRequest = undefined; - } - - WritableStreamDealWithRejection(stream, error); - } - - function WritableStreamCloseQueuedOrInFlight(stream) { - if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) { - return false; - } - - return true; - } - - function WritableStreamHasOperationMarkedInFlight(stream) { - if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) { - return false; - } - - return true; - } - - function WritableStreamMarkCloseRequestInFlight(stream) { - assert(stream._inFlightCloseRequest === undefined); - assert(stream._closeRequest !== undefined); - stream._inFlightCloseRequest = stream._closeRequest; - stream._closeRequest = undefined; - } - - function WritableStreamMarkFirstWriteRequestInFlight(stream) { - assert(stream._inFlightWriteRequest === undefined, 'there must be no pending write request'); - assert(stream._writeRequests.length !== 0, 'writeRequests must not be empty'); - stream._inFlightWriteRequest = stream._writeRequests.shift(); - } - - function WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream) { - assert(stream._state === 'errored', '_stream_.[[state]] is `"errored"`'); - - if (stream._closeRequest !== undefined) { - assert(stream._inFlightCloseRequest === undefined); - - stream._closeRequest._reject(stream._storedError); - - stream._closeRequest = undefined; - } - - var writer = stream._writer; - - if (writer !== undefined) { - defaultWriterClosedPromiseReject(writer, stream._storedError); - - writer._closedPromise.catch(function () {}); - } - } - - function WritableStreamUpdateBackpressure(stream, backpressure) { - assert(stream._state === 'writable'); - assert(WritableStreamCloseQueuedOrInFlight(stream) === false); - var writer = stream._writer; - - if (writer !== undefined && backpressure !== stream._backpressure) { - if (backpressure === true) { - defaultWriterReadyPromiseReset(writer); - } else { - assert(backpressure === false); - defaultWriterReadyPromiseResolve(writer); - } - } - - stream._backpressure = backpressure; - } - - var WritableStreamDefaultWriter = function () { - function WritableStreamDefaultWriter(stream) { - _classCallCheck(this, WritableStreamDefaultWriter); - - if (IsWritableStream(stream) === false) { - throw new TypeError('WritableStreamDefaultWriter can only be constructed with a WritableStream instance'); - } - - if (IsWritableStreamLocked(stream) === true) { - throw new TypeError('This stream has already been locked for exclusive writing by another writer'); - } - - this._ownerWritableStream = stream; - stream._writer = this; - var state = stream._state; - - if (state === 'writable') { - if (WritableStreamCloseQueuedOrInFlight(stream) === false && stream._backpressure === true) { - defaultWriterReadyPromiseInitialize(this); - } else { - defaultWriterReadyPromiseInitializeAsResolved(this); - } - - defaultWriterClosedPromiseInitialize(this); - } else if (state === 'erroring') { - defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError); - - this._readyPromise.catch(function () {}); - - defaultWriterClosedPromiseInitialize(this); - } else if (state === 'closed') { - defaultWriterReadyPromiseInitializeAsResolved(this); - defaultWriterClosedPromiseInitializeAsResolved(this); - } else { - assert(state === 'errored', 'state must be errored'); - var storedError = stream._storedError; - defaultWriterReadyPromiseInitializeAsRejected(this, storedError); - - this._readyPromise.catch(function () {}); - - defaultWriterClosedPromiseInitializeAsRejected(this, storedError); - - this._closedPromise.catch(function () {}); - } - } - - _createClass(WritableStreamDefaultWriter, [{ - key: 'abort', - value: function abort(reason) { - if (IsWritableStreamDefaultWriter(this) === false) { - return Promise.reject(defaultWriterBrandCheckException('abort')); - } - - if (this._ownerWritableStream === undefined) { - return Promise.reject(defaultWriterLockException('abort')); - } - - return WritableStreamDefaultWriterAbort(this, reason); - } - }, { - key: 'close', - value: function close() { - if (IsWritableStreamDefaultWriter(this) === false) { - return Promise.reject(defaultWriterBrandCheckException('close')); - } - - var stream = this._ownerWritableStream; - - if (stream === undefined) { - return Promise.reject(defaultWriterLockException('close')); - } - - if (WritableStreamCloseQueuedOrInFlight(stream) === true) { - return Promise.reject(new TypeError('cannot close an already-closing stream')); - } - - return WritableStreamDefaultWriterClose(this); - } - }, { - key: 'releaseLock', - value: function releaseLock() { - if (IsWritableStreamDefaultWriter(this) === false) { - throw defaultWriterBrandCheckException('releaseLock'); - } - - var stream = this._ownerWritableStream; - - if (stream === undefined) { - return; - } - - assert(stream._writer !== undefined); - WritableStreamDefaultWriterRelease(this); - } - }, { - key: 'write', - value: function write(chunk) { - if (IsWritableStreamDefaultWriter(this) === false) { - return Promise.reject(defaultWriterBrandCheckException('write')); - } - - if (this._ownerWritableStream === undefined) { - return Promise.reject(defaultWriterLockException('write to')); - } - - return WritableStreamDefaultWriterWrite(this, chunk); - } - }, { - key: 'closed', - get: function get() { - if (IsWritableStreamDefaultWriter(this) === false) { - return Promise.reject(defaultWriterBrandCheckException('closed')); - } - - return this._closedPromise; - } - }, { - key: 'desiredSize', - get: function get() { - if (IsWritableStreamDefaultWriter(this) === false) { - throw defaultWriterBrandCheckException('desiredSize'); - } - - if (this._ownerWritableStream === undefined) { - throw defaultWriterLockException('desiredSize'); - } - - return WritableStreamDefaultWriterGetDesiredSize(this); - } - }, { - key: 'ready', - get: function get() { - if (IsWritableStreamDefaultWriter(this) === false) { - return Promise.reject(defaultWriterBrandCheckException('ready')); - } - - return this._readyPromise; - } - }]); - - return WritableStreamDefaultWriter; - }(); - - function IsWritableStreamDefaultWriter(x) { - if (!typeIsObject(x)) { - return false; - } - - if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) { - return false; - } - - return true; - } - - function WritableStreamDefaultWriterAbort(writer, reason) { - var stream = writer._ownerWritableStream; - assert(stream !== undefined); - return WritableStreamAbort(stream, reason); - } - - function WritableStreamDefaultWriterClose(writer) { - var stream = writer._ownerWritableStream; - assert(stream !== undefined); - var state = stream._state; - - if (state === 'closed' || state === 'errored') { - return Promise.reject(new TypeError('The stream (in ' + state + ' state) is not in the writable state and cannot be closed')); - } - - assert(state === 'writable' || state === 'erroring'); - assert(WritableStreamCloseQueuedOrInFlight(stream) === false); - var promise = new Promise(function (resolve, reject) { - var closeRequest = { - _resolve: resolve, - _reject: reject - }; - stream._closeRequest = closeRequest; - }); - - if (stream._backpressure === true && state === 'writable') { - defaultWriterReadyPromiseResolve(writer); - } - - WritableStreamDefaultControllerClose(stream._writableStreamController); - return promise; - } - - function WritableStreamDefaultWriterCloseWithErrorPropagation(writer) { - var stream = writer._ownerWritableStream; - assert(stream !== undefined); - var state = stream._state; - - if (WritableStreamCloseQueuedOrInFlight(stream) === true || state === 'closed') { - return Promise.resolve(); - } - - if (state === 'errored') { - return Promise.reject(stream._storedError); - } - - assert(state === 'writable' || state === 'erroring'); - return WritableStreamDefaultWriterClose(writer); - } - - function WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, error) { - if (writer._closedPromiseState === 'pending') { - defaultWriterClosedPromiseReject(writer, error); - } else { - defaultWriterClosedPromiseResetToRejected(writer, error); - } - - writer._closedPromise.catch(function () {}); - } - - function WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, error) { - if (writer._readyPromiseState === 'pending') { - defaultWriterReadyPromiseReject(writer, error); - } else { - defaultWriterReadyPromiseResetToRejected(writer, error); - } - - writer._readyPromise.catch(function () {}); - } - - function WritableStreamDefaultWriterGetDesiredSize(writer) { - var stream = writer._ownerWritableStream; - var state = stream._state; - - if (state === 'errored' || state === 'erroring') { - return null; - } - - if (state === 'closed') { - return 0; - } - - return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController); - } - - function WritableStreamDefaultWriterRelease(writer) { - var stream = writer._ownerWritableStream; - assert(stream !== undefined); - assert(stream._writer === writer); - var releasedError = new TypeError('Writer was released and can no longer be used to monitor the stream\'s closedness'); - WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError); - WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError); - stream._writer = undefined; - writer._ownerWritableStream = undefined; - } - - function WritableStreamDefaultWriterWrite(writer, chunk) { - var stream = writer._ownerWritableStream; - assert(stream !== undefined); - var controller = stream._writableStreamController; - var chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk); - - if (stream !== writer._ownerWritableStream) { - return Promise.reject(defaultWriterLockException('write to')); - } - - var state = stream._state; - - if (state === 'errored') { - return Promise.reject(stream._storedError); - } - - if (WritableStreamCloseQueuedOrInFlight(stream) === true || state === 'closed') { - return Promise.reject(new TypeError('The stream is closing or closed and cannot be written to')); - } - - if (state === 'erroring') { - return Promise.reject(stream._storedError); - } - - assert(state === 'writable'); - var promise = WritableStreamAddWriteRequest(stream); - WritableStreamDefaultControllerWrite(controller, chunk, chunkSize); - return promise; - } - - var WritableStreamDefaultController = function () { - function WritableStreamDefaultController(stream, underlyingSink, size, highWaterMark) { - _classCallCheck(this, WritableStreamDefaultController); - - if (IsWritableStream(stream) === false) { - throw new TypeError('WritableStreamDefaultController can only be constructed with a WritableStream instance'); - } - - if (stream._writableStreamController !== undefined) { - throw new TypeError('WritableStreamDefaultController instances can only be created by the WritableStream constructor'); - } - - this._controlledWritableStream = stream; - this._underlyingSink = underlyingSink; - this._queue = undefined; - this._queueTotalSize = undefined; - ResetQueue(this); - this._started = false; - var normalizedStrategy = ValidateAndNormalizeQueuingStrategy(size, highWaterMark); - this._strategySize = normalizedStrategy.size; - this._strategyHWM = normalizedStrategy.highWaterMark; - var backpressure = WritableStreamDefaultControllerGetBackpressure(this); - WritableStreamUpdateBackpressure(stream, backpressure); - } - - _createClass(WritableStreamDefaultController, [{ - key: 'error', - value: function error(e) { - if (IsWritableStreamDefaultController(this) === false) { - throw new TypeError('WritableStreamDefaultController.prototype.error can only be used on a WritableStreamDefaultController'); - } - - var state = this._controlledWritableStream._state; - - if (state !== 'writable') { - return; - } - - WritableStreamDefaultControllerError(this, e); - } - }, { - key: '__abortSteps', - value: function __abortSteps(reason) { - return PromiseInvokeOrNoop(this._underlyingSink, 'abort', [reason]); - } - }, { - key: '__errorSteps', - value: function __errorSteps() { - ResetQueue(this); - } - }, { - key: '__startSteps', - value: function __startSteps() { - var _this = this; - - var startResult = InvokeOrNoop(this._underlyingSink, 'start', [this]); - var stream = this._controlledWritableStream; - Promise.resolve(startResult).then(function () { - assert(stream._state === 'writable' || stream._state === 'erroring'); - _this._started = true; - WritableStreamDefaultControllerAdvanceQueueIfNeeded(_this); - }, function (r) { - assert(stream._state === 'writable' || stream._state === 'erroring'); - _this._started = true; - WritableStreamDealWithRejection(stream, r); - }).catch(rethrowAssertionErrorRejection); - } - }]); - - return WritableStreamDefaultController; - }(); - - function WritableStreamDefaultControllerClose(controller) { - EnqueueValueWithSize(controller, 'close', 0); - WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); - } - - function WritableStreamDefaultControllerGetChunkSize(controller, chunk) { - var strategySize = controller._strategySize; - - if (strategySize === undefined) { - return 1; - } - - try { - return strategySize(chunk); - } catch (chunkSizeE) { - WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE); - return 1; - } - } - - function WritableStreamDefaultControllerGetDesiredSize(controller) { - return controller._strategyHWM - controller._queueTotalSize; - } - - function WritableStreamDefaultControllerWrite(controller, chunk, chunkSize) { - var writeRecord = { - chunk: chunk - }; - - try { - EnqueueValueWithSize(controller, writeRecord, chunkSize); - } catch (enqueueE) { - WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE); - return; - } - - var stream = controller._controlledWritableStream; - - if (WritableStreamCloseQueuedOrInFlight(stream) === false && stream._state === 'writable') { - var backpressure = WritableStreamDefaultControllerGetBackpressure(controller); - WritableStreamUpdateBackpressure(stream, backpressure); - } - - WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); - } - - function IsWritableStreamDefaultController(x) { - if (!typeIsObject(x)) { - return false; - } - - if (!Object.prototype.hasOwnProperty.call(x, '_underlyingSink')) { - return false; - } - - return true; - } - - function WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller) { - var stream = controller._controlledWritableStream; - - if (controller._started === false) { - return; - } - - if (stream._inFlightWriteRequest !== undefined) { - return; - } - - var state = stream._state; - - if (state === 'closed' || state === 'errored') { - return; - } - - if (state === 'erroring') { - WritableStreamFinishErroring(stream); - return; - } - - if (controller._queue.length === 0) { - return; - } - - var writeRecord = PeekQueueValue(controller); - - if (writeRecord === 'close') { - WritableStreamDefaultControllerProcessClose(controller); - } else { - WritableStreamDefaultControllerProcessWrite(controller, writeRecord.chunk); - } - } - - function WritableStreamDefaultControllerErrorIfNeeded(controller, error) { - if (controller._controlledWritableStream._state === 'writable') { - WritableStreamDefaultControllerError(controller, error); - } - } - - function WritableStreamDefaultControllerProcessClose(controller) { - var stream = controller._controlledWritableStream; - WritableStreamMarkCloseRequestInFlight(stream); - DequeueValue(controller); - assert(controller._queue.length === 0, 'queue must be empty once the final write record is dequeued'); - var sinkClosePromise = PromiseInvokeOrNoop(controller._underlyingSink, 'close', []); - sinkClosePromise.then(function () { - WritableStreamFinishInFlightClose(stream); - }, function (reason) { - WritableStreamFinishInFlightCloseWithError(stream, reason); - }).catch(rethrowAssertionErrorRejection); - } - - function WritableStreamDefaultControllerProcessWrite(controller, chunk) { - var stream = controller._controlledWritableStream; - WritableStreamMarkFirstWriteRequestInFlight(stream); - var sinkWritePromise = PromiseInvokeOrNoop(controller._underlyingSink, 'write', [chunk, controller]); - sinkWritePromise.then(function () { - WritableStreamFinishInFlightWrite(stream); - var state = stream._state; - assert(state === 'writable' || state === 'erroring'); - DequeueValue(controller); - - if (WritableStreamCloseQueuedOrInFlight(stream) === false && state === 'writable') { - var backpressure = WritableStreamDefaultControllerGetBackpressure(controller); - WritableStreamUpdateBackpressure(stream, backpressure); - } - - WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); - }, function (reason) { - WritableStreamFinishInFlightWriteWithError(stream, reason); - }).catch(rethrowAssertionErrorRejection); - } - - function WritableStreamDefaultControllerGetBackpressure(controller) { - var desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller); - return desiredSize <= 0; - } - - function WritableStreamDefaultControllerError(controller, error) { - var stream = controller._controlledWritableStream; - assert(stream._state === 'writable'); - WritableStreamStartErroring(stream, error); - } - - function streamBrandCheckException(name) { - return new TypeError('WritableStream.prototype.' + name + ' can only be used on a WritableStream'); - } - - function defaultWriterBrandCheckException(name) { - return new TypeError('WritableStreamDefaultWriter.prototype.' + name + ' can only be used on a WritableStreamDefaultWriter'); - } - - function defaultWriterLockException(name) { - return new TypeError('Cannot ' + name + ' a stream using a released writer'); - } - - function defaultWriterClosedPromiseInitialize(writer) { - writer._closedPromise = new Promise(function (resolve, reject) { - writer._closedPromise_resolve = resolve; - writer._closedPromise_reject = reject; - writer._closedPromiseState = 'pending'; - }); - } - - function defaultWriterClosedPromiseInitializeAsRejected(writer, reason) { - writer._closedPromise = Promise.reject(reason); - writer._closedPromise_resolve = undefined; - writer._closedPromise_reject = undefined; - writer._closedPromiseState = 'rejected'; - } - - function defaultWriterClosedPromiseInitializeAsResolved(writer) { - writer._closedPromise = Promise.resolve(undefined); - writer._closedPromise_resolve = undefined; - writer._closedPromise_reject = undefined; - writer._closedPromiseState = 'resolved'; - } - - function defaultWriterClosedPromiseReject(writer, reason) { - assert(writer._closedPromise_resolve !== undefined, 'writer._closedPromise_resolve !== undefined'); - assert(writer._closedPromise_reject !== undefined, 'writer._closedPromise_reject !== undefined'); - assert(writer._closedPromiseState === 'pending', 'writer._closedPromiseState is pending'); - - writer._closedPromise_reject(reason); - - writer._closedPromise_resolve = undefined; - writer._closedPromise_reject = undefined; - writer._closedPromiseState = 'rejected'; - } - - function defaultWriterClosedPromiseResetToRejected(writer, reason) { - assert(writer._closedPromise_resolve === undefined, 'writer._closedPromise_resolve === undefined'); - assert(writer._closedPromise_reject === undefined, 'writer._closedPromise_reject === undefined'); - assert(writer._closedPromiseState !== 'pending', 'writer._closedPromiseState is not pending'); - writer._closedPromise = Promise.reject(reason); - writer._closedPromiseState = 'rejected'; - } - - function defaultWriterClosedPromiseResolve(writer) { - assert(writer._closedPromise_resolve !== undefined, 'writer._closedPromise_resolve !== undefined'); - assert(writer._closedPromise_reject !== undefined, 'writer._closedPromise_reject !== undefined'); - assert(writer._closedPromiseState === 'pending', 'writer._closedPromiseState is pending'); - - writer._closedPromise_resolve(undefined); - - writer._closedPromise_resolve = undefined; - writer._closedPromise_reject = undefined; - writer._closedPromiseState = 'resolved'; - } - - function defaultWriterReadyPromiseInitialize(writer) { - writer._readyPromise = new Promise(function (resolve, reject) { - writer._readyPromise_resolve = resolve; - writer._readyPromise_reject = reject; - }); - writer._readyPromiseState = 'pending'; - } - - function defaultWriterReadyPromiseInitializeAsRejected(writer, reason) { - writer._readyPromise = Promise.reject(reason); - writer._readyPromise_resolve = undefined; - writer._readyPromise_reject = undefined; - writer._readyPromiseState = 'rejected'; - } - - function defaultWriterReadyPromiseInitializeAsResolved(writer) { - writer._readyPromise = Promise.resolve(undefined); - writer._readyPromise_resolve = undefined; - writer._readyPromise_reject = undefined; - writer._readyPromiseState = 'fulfilled'; - } - - function defaultWriterReadyPromiseReject(writer, reason) { - assert(writer._readyPromise_resolve !== undefined, 'writer._readyPromise_resolve !== undefined'); - assert(writer._readyPromise_reject !== undefined, 'writer._readyPromise_reject !== undefined'); - - writer._readyPromise_reject(reason); - - writer._readyPromise_resolve = undefined; - writer._readyPromise_reject = undefined; - writer._readyPromiseState = 'rejected'; - } - - function defaultWriterReadyPromiseReset(writer) { - assert(writer._readyPromise_resolve === undefined, 'writer._readyPromise_resolve === undefined'); - assert(writer._readyPromise_reject === undefined, 'writer._readyPromise_reject === undefined'); - writer._readyPromise = new Promise(function (resolve, reject) { - writer._readyPromise_resolve = resolve; - writer._readyPromise_reject = reject; - }); - writer._readyPromiseState = 'pending'; - } - - function defaultWriterReadyPromiseResetToRejected(writer, reason) { - assert(writer._readyPromise_resolve === undefined, 'writer._readyPromise_resolve === undefined'); - assert(writer._readyPromise_reject === undefined, 'writer._readyPromise_reject === undefined'); - writer._readyPromise = Promise.reject(reason); - writer._readyPromiseState = 'rejected'; - } - - function defaultWriterReadyPromiseResolve(writer) { - assert(writer._readyPromise_resolve !== undefined, 'writer._readyPromise_resolve !== undefined'); - assert(writer._readyPromise_reject !== undefined, 'writer._readyPromise_reject !== undefined'); - - writer._readyPromise_resolve(undefined); - - writer._readyPromise_resolve = undefined; - writer._readyPromise_reject = undefined; - writer._readyPromiseState = 'fulfilled'; - } - }, function (module, exports, __w_extracthighlights_require__) { - - var _require = __w_extracthighlights_require__(0), - IsFiniteNonNegativeNumber = _require.IsFiniteNonNegativeNumber; - - var _require2 = __w_extracthighlights_require__(1), - assert = _require2.assert; - - exports.DequeueValue = function (container) { - assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: DequeueValue should only be used on containers with [[queue]] and [[queueTotalSize]].'); - assert(container._queue.length > 0, 'Spec-level failure: should never dequeue from an empty queue.'); - - var pair = container._queue.shift(); - - container._queueTotalSize -= pair.size; - - if (container._queueTotalSize < 0) { - container._queueTotalSize = 0; - } - - return pair.value; - }; - - exports.EnqueueValueWithSize = function (container, value, size) { - assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: EnqueueValueWithSize should only be used on containers with [[queue]] and ' + '[[queueTotalSize]].'); - size = Number(size); - - if (!IsFiniteNonNegativeNumber(size)) { - throw new RangeError('Size must be a finite, non-NaN, non-negative number.'); - } - - container._queue.push({ - value: value, - size: size - }); - - container._queueTotalSize += size; - }; - - exports.PeekQueueValue = function (container) { - assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: PeekQueueValue should only be used on containers with [[queue]] and [[queueTotalSize]].'); - assert(container._queue.length > 0, 'Spec-level failure: should never peek at an empty queue.'); - var pair = container._queue[0]; - return pair.value; - }; - - exports.ResetQueue = function (container) { - assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: ResetQueue should only be used on containers with [[queue]] and [[queueTotalSize]].'); - container._queue = []; - container._queueTotalSize = 0; - }; - }, function (module, exports, __w_extracthighlights_require__) { - - var _createClass = function () { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - return function (Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps); - if (staticProps) defineProperties(Constructor, staticProps); - return Constructor; - }; - }(); - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - var _require = __w_extracthighlights_require__(0), - ArrayBufferCopy = _require.ArrayBufferCopy, - CreateIterResultObject = _require.CreateIterResultObject, - IsFiniteNonNegativeNumber = _require.IsFiniteNonNegativeNumber, - InvokeOrNoop = _require.InvokeOrNoop, - PromiseInvokeOrNoop = _require.PromiseInvokeOrNoop, - TransferArrayBuffer = _require.TransferArrayBuffer, - ValidateAndNormalizeQueuingStrategy = _require.ValidateAndNormalizeQueuingStrategy, - ValidateAndNormalizeHighWaterMark = _require.ValidateAndNormalizeHighWaterMark; - - var _require2 = __w_extracthighlights_require__(0), - createArrayFromList = _require2.createArrayFromList, - createDataProperty = _require2.createDataProperty, - typeIsObject = _require2.typeIsObject; - - var _require3 = __w_extracthighlights_require__(1), - assert = _require3.assert, - rethrowAssertionErrorRejection = _require3.rethrowAssertionErrorRejection; - - var _require4 = __w_extracthighlights_require__(3), - DequeueValue = _require4.DequeueValue, - EnqueueValueWithSize = _require4.EnqueueValueWithSize, - ResetQueue = _require4.ResetQueue; - - var _require5 = __w_extracthighlights_require__(2), - AcquireWritableStreamDefaultWriter = _require5.AcquireWritableStreamDefaultWriter, - IsWritableStream = _require5.IsWritableStream, - IsWritableStreamLocked = _require5.IsWritableStreamLocked, - WritableStreamAbort = _require5.WritableStreamAbort, - WritableStreamDefaultWriterCloseWithErrorPropagation = _require5.WritableStreamDefaultWriterCloseWithErrorPropagation, - WritableStreamDefaultWriterRelease = _require5.WritableStreamDefaultWriterRelease, - WritableStreamDefaultWriterWrite = _require5.WritableStreamDefaultWriterWrite, - WritableStreamCloseQueuedOrInFlight = _require5.WritableStreamCloseQueuedOrInFlight; - - var ReadableStream = function () { - function ReadableStream() { - var underlyingSource = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - size = _ref.size, - highWaterMark = _ref.highWaterMark; - - _classCallCheck(this, ReadableStream); - - this._state = 'readable'; - this._reader = undefined; - this._storedError = undefined; - this._disturbed = false; - this._readableStreamController = undefined; - var type = underlyingSource.type; - var typeString = String(type); - - if (typeString === 'bytes') { - if (highWaterMark === undefined) { - highWaterMark = 0; - } - - this._readableStreamController = new ReadableByteStreamController(this, underlyingSource, highWaterMark); - } else if (type === undefined) { - if (highWaterMark === undefined) { - highWaterMark = 1; - } - - this._readableStreamController = new ReadableStreamDefaultController(this, underlyingSource, size, highWaterMark); - } else { - throw new RangeError('Invalid type is specified'); - } - } - - _createClass(ReadableStream, [{ - key: 'cancel', - value: function cancel(reason) { - if (IsReadableStream(this) === false) { - return Promise.reject(streamBrandCheckException('cancel')); - } - - if (IsReadableStreamLocked(this) === true) { - return Promise.reject(new TypeError('Cannot cancel a stream that already has a reader')); - } - - return ReadableStreamCancel(this, reason); - } - }, { - key: 'getReader', - value: function getReader() { - var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - mode = _ref2.mode; - - if (IsReadableStream(this) === false) { - throw streamBrandCheckException('getReader'); - } - - if (mode === undefined) { - return AcquireReadableStreamDefaultReader(this); - } - - mode = String(mode); - - if (mode === 'byob') { - return AcquireReadableStreamBYOBReader(this); - } - - throw new RangeError('Invalid mode is specified'); - } - }, { - key: 'pipeThrough', - value: function pipeThrough(_ref3, options) { - var writable = _ref3.writable, - readable = _ref3.readable; - var promise = this.pipeTo(writable, options); - ifIsObjectAndHasAPromiseIsHandledInternalSlotSetPromiseIsHandledToTrue(promise); - return readable; - } - }, { - key: 'pipeTo', - value: function pipeTo(dest) { - var _this = this; - - var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - preventClose = _ref4.preventClose, - preventAbort = _ref4.preventAbort, - preventCancel = _ref4.preventCancel; - - if (IsReadableStream(this) === false) { - return Promise.reject(streamBrandCheckException('pipeTo')); - } - - if (IsWritableStream(dest) === false) { - return Promise.reject(new TypeError('ReadableStream.prototype.pipeTo\'s first argument must be a WritableStream')); - } - - preventClose = Boolean(preventClose); - preventAbort = Boolean(preventAbort); - preventCancel = Boolean(preventCancel); - - if (IsReadableStreamLocked(this) === true) { - return Promise.reject(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')); - } - - if (IsWritableStreamLocked(dest) === true) { - return Promise.reject(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')); - } - - var reader = AcquireReadableStreamDefaultReader(this); - var writer = AcquireWritableStreamDefaultWriter(dest); - var shuttingDown = false; - var currentWrite = Promise.resolve(); - return new Promise(function (resolve, reject) { - function pipeLoop() { - currentWrite = Promise.resolve(); - - if (shuttingDown === true) { - return Promise.resolve(); - } - - return writer._readyPromise.then(function () { - return ReadableStreamDefaultReaderRead(reader).then(function (_ref5) { - var value = _ref5.value, - done = _ref5.done; - - if (done === true) { - return; - } - - currentWrite = WritableStreamDefaultWriterWrite(writer, value).catch(function () {}); - }); - }).then(pipeLoop); - } - - isOrBecomesErrored(_this, reader._closedPromise, function (storedError) { - if (preventAbort === false) { - shutdownWithAction(function () { - return WritableStreamAbort(dest, storedError); - }, true, storedError); - } else { - shutdown(true, storedError); - } - }); - isOrBecomesErrored(dest, writer._closedPromise, function (storedError) { - if (preventCancel === false) { - shutdownWithAction(function () { - return ReadableStreamCancel(_this, storedError); - }, true, storedError); - } else { - shutdown(true, storedError); - } - }); - isOrBecomesClosed(_this, reader._closedPromise, function () { - if (preventClose === false) { - shutdownWithAction(function () { - return WritableStreamDefaultWriterCloseWithErrorPropagation(writer); - }); - } else { - shutdown(); - } - }); - - if (WritableStreamCloseQueuedOrInFlight(dest) === true || dest._state === 'closed') { - var destClosed = new TypeError('the destination writable stream closed before all data could be piped to it'); - - if (preventCancel === false) { - shutdownWithAction(function () { - return ReadableStreamCancel(_this, destClosed); - }, true, destClosed); - } else { - shutdown(true, destClosed); - } - } - - pipeLoop().catch(function (err) { - currentWrite = Promise.resolve(); - rethrowAssertionErrorRejection(err); - }); - - function waitForWritesToFinish() { - var oldCurrentWrite = currentWrite; - return currentWrite.then(function () { - return oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined; - }); - } - - function isOrBecomesErrored(stream, promise, action) { - if (stream._state === 'errored') { - action(stream._storedError); - } else { - promise.catch(action).catch(rethrowAssertionErrorRejection); - } - } - - function isOrBecomesClosed(stream, promise, action) { - if (stream._state === 'closed') { - action(); - } else { - promise.then(action).catch(rethrowAssertionErrorRejection); - } - } - - function shutdownWithAction(action, originalIsError, originalError) { - if (shuttingDown === true) { - return; - } - - shuttingDown = true; - - if (dest._state === 'writable' && WritableStreamCloseQueuedOrInFlight(dest) === false) { - waitForWritesToFinish().then(doTheRest); - } else { - doTheRest(); - } - - function doTheRest() { - action().then(function () { - return finalize(originalIsError, originalError); - }, function (newError) { - return finalize(true, newError); - }).catch(rethrowAssertionErrorRejection); - } - } - - function shutdown(isError, error) { - if (shuttingDown === true) { - return; - } - - shuttingDown = true; - - if (dest._state === 'writable' && WritableStreamCloseQueuedOrInFlight(dest) === false) { - waitForWritesToFinish().then(function () { - return finalize(isError, error); - }).catch(rethrowAssertionErrorRejection); - } else { - finalize(isError, error); - } - } - - function finalize(isError, error) { - WritableStreamDefaultWriterRelease(writer); - ReadableStreamReaderGenericRelease(reader); - - if (isError) { - reject(error); - } else { - resolve(undefined); - } - } - }); - } - }, { - key: 'tee', - value: function tee() { - if (IsReadableStream(this) === false) { - throw streamBrandCheckException('tee'); - } - - var branches = ReadableStreamTee(this, false); - return createArrayFromList(branches); - } - }, { - key: 'locked', - get: function get() { - if (IsReadableStream(this) === false) { - throw streamBrandCheckException('locked'); - } - - return IsReadableStreamLocked(this); - } - }]); - - return ReadableStream; - }(); - - module.exports = { - ReadableStream: ReadableStream, - IsReadableStreamDisturbed: IsReadableStreamDisturbed, - ReadableStreamDefaultControllerClose: ReadableStreamDefaultControllerClose, - ReadableStreamDefaultControllerEnqueue: ReadableStreamDefaultControllerEnqueue, - ReadableStreamDefaultControllerError: ReadableStreamDefaultControllerError, - ReadableStreamDefaultControllerGetDesiredSize: ReadableStreamDefaultControllerGetDesiredSize - }; - - function AcquireReadableStreamBYOBReader(stream) { - return new ReadableStreamBYOBReader(stream); - } - - function AcquireReadableStreamDefaultReader(stream) { - return new ReadableStreamDefaultReader(stream); - } - - function IsReadableStream(x) { - if (!typeIsObject(x)) { - return false; - } - - if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) { - return false; - } - - return true; - } - - function IsReadableStreamDisturbed(stream) { - assert(IsReadableStream(stream) === true, 'IsReadableStreamDisturbed should only be used on known readable streams'); - return stream._disturbed; - } - - function IsReadableStreamLocked(stream) { - assert(IsReadableStream(stream) === true, 'IsReadableStreamLocked should only be used on known readable streams'); - - if (stream._reader === undefined) { - return false; - } - - return true; - } - - function ReadableStreamTee(stream, cloneForBranch2) { - assert(IsReadableStream(stream) === true); - assert(typeof cloneForBranch2 === 'boolean'); - var reader = AcquireReadableStreamDefaultReader(stream); - var teeState = { - closedOrErrored: false, - canceled1: false, - canceled2: false, - reason1: undefined, - reason2: undefined - }; - teeState.promise = new Promise(function (resolve) { - teeState._resolve = resolve; - }); - var pull = create_ReadableStreamTeePullFunction(); - pull._reader = reader; - pull._teeState = teeState; - pull._cloneForBranch2 = cloneForBranch2; - var cancel1 = create_ReadableStreamTeeBranch1CancelFunction(); - cancel1._stream = stream; - cancel1._teeState = teeState; - var cancel2 = create_ReadableStreamTeeBranch2CancelFunction(); - cancel2._stream = stream; - cancel2._teeState = teeState; - var underlyingSource1 = Object.create(Object.prototype); - createDataProperty(underlyingSource1, 'pull', pull); - createDataProperty(underlyingSource1, 'cancel', cancel1); - var branch1Stream = new ReadableStream(underlyingSource1); - var underlyingSource2 = Object.create(Object.prototype); - createDataProperty(underlyingSource2, 'pull', pull); - createDataProperty(underlyingSource2, 'cancel', cancel2); - var branch2Stream = new ReadableStream(underlyingSource2); - pull._branch1 = branch1Stream._readableStreamController; - pull._branch2 = branch2Stream._readableStreamController; - - reader._closedPromise.catch(function (r) { - if (teeState.closedOrErrored === true) { - return; - } - - ReadableStreamDefaultControllerError(pull._branch1, r); - ReadableStreamDefaultControllerError(pull._branch2, r); - teeState.closedOrErrored = true; - }); - - return [branch1Stream, branch2Stream]; - } - - function create_ReadableStreamTeePullFunction() { - function f() { - var reader = f._reader, - branch1 = f._branch1, - branch2 = f._branch2, - teeState = f._teeState; - return ReadableStreamDefaultReaderRead(reader).then(function (result) { - assert(typeIsObject(result)); - var value = result.value; - var done = result.done; - assert(typeof done === 'boolean'); - - if (done === true && teeState.closedOrErrored === false) { - if (teeState.canceled1 === false) { - ReadableStreamDefaultControllerClose(branch1); - } - - if (teeState.canceled2 === false) { - ReadableStreamDefaultControllerClose(branch2); - } - - teeState.closedOrErrored = true; - } - - if (teeState.closedOrErrored === true) { - return; - } - - var value1 = value; - var value2 = value; - - if (teeState.canceled1 === false) { - ReadableStreamDefaultControllerEnqueue(branch1, value1); - } - - if (teeState.canceled2 === false) { - ReadableStreamDefaultControllerEnqueue(branch2, value2); - } - }); - } - - return f; - } - - function create_ReadableStreamTeeBranch1CancelFunction() { - function f(reason) { - var stream = f._stream, - teeState = f._teeState; - teeState.canceled1 = true; - teeState.reason1 = reason; - - if (teeState.canceled2 === true) { - var compositeReason = createArrayFromList([teeState.reason1, teeState.reason2]); - var cancelResult = ReadableStreamCancel(stream, compositeReason); - - teeState._resolve(cancelResult); - } - - return teeState.promise; - } - - return f; - } - - function create_ReadableStreamTeeBranch2CancelFunction() { - function f(reason) { - var stream = f._stream, - teeState = f._teeState; - teeState.canceled2 = true; - teeState.reason2 = reason; - - if (teeState.canceled1 === true) { - var compositeReason = createArrayFromList([teeState.reason1, teeState.reason2]); - var cancelResult = ReadableStreamCancel(stream, compositeReason); - - teeState._resolve(cancelResult); - } - - return teeState.promise; - } - - return f; - } - - function ReadableStreamAddReadIntoRequest(stream) { - assert(IsReadableStreamBYOBReader(stream._reader) === true); - assert(stream._state === 'readable' || stream._state === 'closed'); - var promise = new Promise(function (resolve, reject) { - var readIntoRequest = { - _resolve: resolve, - _reject: reject - }; - - stream._reader._readIntoRequests.push(readIntoRequest); - }); - return promise; - } - - function ReadableStreamAddReadRequest(stream) { - assert(IsReadableStreamDefaultReader(stream._reader) === true); - assert(stream._state === 'readable'); - var promise = new Promise(function (resolve, reject) { - var readRequest = { - _resolve: resolve, - _reject: reject - }; - - stream._reader._readRequests.push(readRequest); - }); - return promise; - } - - function ReadableStreamCancel(stream, reason) { - stream._disturbed = true; - - if (stream._state === 'closed') { - return Promise.resolve(undefined); - } - - if (stream._state === 'errored') { - return Promise.reject(stream._storedError); - } - - ReadableStreamClose(stream); - - var sourceCancelPromise = stream._readableStreamController.__cancelSteps(reason); - - return sourceCancelPromise.then(function () { - return undefined; - }); - } - - function ReadableStreamClose(stream) { - assert(stream._state === 'readable'); - stream._state = 'closed'; - var reader = stream._reader; - - if (reader === undefined) { - return undefined; - } - - if (IsReadableStreamDefaultReader(reader) === true) { - for (var i = 0; i < reader._readRequests.length; i++) { - var _resolve = reader._readRequests[i]._resolve; - - _resolve(CreateIterResultObject(undefined, true)); - } - - reader._readRequests = []; - } - - defaultReaderClosedPromiseResolve(reader); - return undefined; - } - - function ReadableStreamError(stream, e) { - assert(IsReadableStream(stream) === true, 'stream must be ReadableStream'); - assert(stream._state === 'readable', 'state must be readable'); - stream._state = 'errored'; - stream._storedError = e; - var reader = stream._reader; - - if (reader === undefined) { - return undefined; - } - - if (IsReadableStreamDefaultReader(reader) === true) { - for (var i = 0; i < reader._readRequests.length; i++) { - var readRequest = reader._readRequests[i]; - - readRequest._reject(e); - } - - reader._readRequests = []; - } else { - assert(IsReadableStreamBYOBReader(reader), 'reader must be ReadableStreamBYOBReader'); - - for (var _i = 0; _i < reader._readIntoRequests.length; _i++) { - var readIntoRequest = reader._readIntoRequests[_i]; - - readIntoRequest._reject(e); - } - - reader._readIntoRequests = []; - } - - defaultReaderClosedPromiseReject(reader, e); - - reader._closedPromise.catch(function () {}); - } - - function ReadableStreamFulfillReadIntoRequest(stream, chunk, done) { - var reader = stream._reader; - assert(reader._readIntoRequests.length > 0); - - var readIntoRequest = reader._readIntoRequests.shift(); - - readIntoRequest._resolve(CreateIterResultObject(chunk, done)); - } - - function ReadableStreamFulfillReadRequest(stream, chunk, done) { - var reader = stream._reader; - assert(reader._readRequests.length > 0); - - var readRequest = reader._readRequests.shift(); - - readRequest._resolve(CreateIterResultObject(chunk, done)); - } - - function ReadableStreamGetNumReadIntoRequests(stream) { - return stream._reader._readIntoRequests.length; - } - - function ReadableStreamGetNumReadRequests(stream) { - return stream._reader._readRequests.length; - } - - function ReadableStreamHasBYOBReader(stream) { - var reader = stream._reader; - - if (reader === undefined) { - return false; - } - - if (IsReadableStreamBYOBReader(reader) === false) { - return false; - } - - return true; - } - - function ReadableStreamHasDefaultReader(stream) { - var reader = stream._reader; - - if (reader === undefined) { - return false; - } - - if (IsReadableStreamDefaultReader(reader) === false) { - return false; - } - - return true; - } - - var ReadableStreamDefaultReader = function () { - function ReadableStreamDefaultReader(stream) { - _classCallCheck(this, ReadableStreamDefaultReader); - - if (IsReadableStream(stream) === false) { - throw new TypeError('ReadableStreamDefaultReader can only be constructed with a ReadableStream instance'); - } - - if (IsReadableStreamLocked(stream) === true) { - throw new TypeError('This stream has already been locked for exclusive reading by another reader'); - } - - ReadableStreamReaderGenericInitialize(this, stream); - this._readRequests = []; - } - - _createClass(ReadableStreamDefaultReader, [{ - key: 'cancel', - value: function cancel(reason) { - if (IsReadableStreamDefaultReader(this) === false) { - return Promise.reject(defaultReaderBrandCheckException('cancel')); - } - - if (this._ownerReadableStream === undefined) { - return Promise.reject(readerLockException('cancel')); - } - - return ReadableStreamReaderGenericCancel(this, reason); - } - }, { - key: 'read', - value: function read() { - if (IsReadableStreamDefaultReader(this) === false) { - return Promise.reject(defaultReaderBrandCheckException('read')); - } - - if (this._ownerReadableStream === undefined) { - return Promise.reject(readerLockException('read from')); - } - - return ReadableStreamDefaultReaderRead(this); - } - }, { - key: 'releaseLock', - value: function releaseLock() { - if (IsReadableStreamDefaultReader(this) === false) { - throw defaultReaderBrandCheckException('releaseLock'); - } - - if (this._ownerReadableStream === undefined) { - return; - } - - if (this._readRequests.length > 0) { - throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled'); - } - - ReadableStreamReaderGenericRelease(this); - } - }, { - key: 'closed', - get: function get() { - if (IsReadableStreamDefaultReader(this) === false) { - return Promise.reject(defaultReaderBrandCheckException('closed')); - } - - return this._closedPromise; - } - }]); - - return ReadableStreamDefaultReader; - }(); - - var ReadableStreamBYOBReader = function () { - function ReadableStreamBYOBReader(stream) { - _classCallCheck(this, ReadableStreamBYOBReader); - - if (!IsReadableStream(stream)) { - throw new TypeError('ReadableStreamBYOBReader can only be constructed with a ReadableStream instance given a ' + 'byte source'); - } - - if (IsReadableByteStreamController(stream._readableStreamController) === false) { - throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' + 'source'); - } - - if (IsReadableStreamLocked(stream)) { - throw new TypeError('This stream has already been locked for exclusive reading by another reader'); - } - - ReadableStreamReaderGenericInitialize(this, stream); - this._readIntoRequests = []; - } - - _createClass(ReadableStreamBYOBReader, [{ - key: 'cancel', - value: function cancel(reason) { - if (!IsReadableStreamBYOBReader(this)) { - return Promise.reject(byobReaderBrandCheckException('cancel')); - } - - if (this._ownerReadableStream === undefined) { - return Promise.reject(readerLockException('cancel')); - } - - return ReadableStreamReaderGenericCancel(this, reason); - } - }, { - key: 'read', - value: function read(view) { - if (!IsReadableStreamBYOBReader(this)) { - return Promise.reject(byobReaderBrandCheckException('read')); - } - - if (this._ownerReadableStream === undefined) { - return Promise.reject(readerLockException('read from')); - } - - if (!ArrayBuffer.isView(view)) { - return Promise.reject(new TypeError('view must be an array buffer view')); - } - - if (view.byteLength === 0) { - return Promise.reject(new TypeError('view must have non-zero byteLength')); - } - - return ReadableStreamBYOBReaderRead(this, view); - } - }, { - key: 'releaseLock', - value: function releaseLock() { - if (!IsReadableStreamBYOBReader(this)) { - throw byobReaderBrandCheckException('releaseLock'); - } - - if (this._ownerReadableStream === undefined) { - return; - } - - if (this._readIntoRequests.length > 0) { - throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled'); - } - - ReadableStreamReaderGenericRelease(this); - } - }, { - key: 'closed', - get: function get() { - if (!IsReadableStreamBYOBReader(this)) { - return Promise.reject(byobReaderBrandCheckException('closed')); - } - - return this._closedPromise; - } - }]); - - return ReadableStreamBYOBReader; - }(); - - function IsReadableStreamBYOBReader(x) { - if (!typeIsObject(x)) { - return false; - } - - if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) { - return false; - } - - return true; - } - - function IsReadableStreamDefaultReader(x) { - if (!typeIsObject(x)) { - return false; - } - - if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) { - return false; - } - - return true; - } - - function ReadableStreamReaderGenericInitialize(reader, stream) { - reader._ownerReadableStream = stream; - stream._reader = reader; - - if (stream._state === 'readable') { - defaultReaderClosedPromiseInitialize(reader); - } else if (stream._state === 'closed') { - defaultReaderClosedPromiseInitializeAsResolved(reader); - } else { - assert(stream._state === 'errored', 'state must be errored'); - defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError); - - reader._closedPromise.catch(function () {}); - } - } - - function ReadableStreamReaderGenericCancel(reader, reason) { - var stream = reader._ownerReadableStream; - assert(stream !== undefined); - return ReadableStreamCancel(stream, reason); - } - - function ReadableStreamReaderGenericRelease(reader) { - assert(reader._ownerReadableStream !== undefined); - assert(reader._ownerReadableStream._reader === reader); - - if (reader._ownerReadableStream._state === 'readable') { - defaultReaderClosedPromiseReject(reader, new TypeError('Reader was released and can no longer be used to monitor the stream\'s closedness')); - } else { - defaultReaderClosedPromiseResetToRejected(reader, new TypeError('Reader was released and can no longer be used to monitor the stream\'s closedness')); - } - - reader._closedPromise.catch(function () {}); - - reader._ownerReadableStream._reader = undefined; - reader._ownerReadableStream = undefined; - } - - function ReadableStreamBYOBReaderRead(reader, view) { - var stream = reader._ownerReadableStream; - assert(stream !== undefined); - stream._disturbed = true; - - if (stream._state === 'errored') { - return Promise.reject(stream._storedError); - } - - return ReadableByteStreamControllerPullInto(stream._readableStreamController, view); - } - - function ReadableStreamDefaultReaderRead(reader) { - var stream = reader._ownerReadableStream; - assert(stream !== undefined); - stream._disturbed = true; - - if (stream._state === 'closed') { - return Promise.resolve(CreateIterResultObject(undefined, true)); - } - - if (stream._state === 'errored') { - return Promise.reject(stream._storedError); - } - - assert(stream._state === 'readable'); - return stream._readableStreamController.__pullSteps(); - } - - var ReadableStreamDefaultController = function () { - function ReadableStreamDefaultController(stream, underlyingSource, size, highWaterMark) { - _classCallCheck(this, ReadableStreamDefaultController); - - if (IsReadableStream(stream) === false) { - throw new TypeError('ReadableStreamDefaultController can only be constructed with a ReadableStream instance'); - } - - if (stream._readableStreamController !== undefined) { - throw new TypeError('ReadableStreamDefaultController instances can only be created by the ReadableStream constructor'); - } - - this._controlledReadableStream = stream; - this._underlyingSource = underlyingSource; - this._queue = undefined; - this._queueTotalSize = undefined; - ResetQueue(this); - this._started = false; - this._closeRequested = false; - this._pullAgain = false; - this._pulling = false; - var normalizedStrategy = ValidateAndNormalizeQueuingStrategy(size, highWaterMark); - this._strategySize = normalizedStrategy.size; - this._strategyHWM = normalizedStrategy.highWaterMark; - var controller = this; - var startResult = InvokeOrNoop(underlyingSource, 'start', [this]); - Promise.resolve(startResult).then(function () { - controller._started = true; - assert(controller._pulling === false); - assert(controller._pullAgain === false); - ReadableStreamDefaultControllerCallPullIfNeeded(controller); - }, function (r) { - ReadableStreamDefaultControllerErrorIfNeeded(controller, r); - }).catch(rethrowAssertionErrorRejection); - } - - _createClass(ReadableStreamDefaultController, [{ - key: 'close', - value: function close() { - if (IsReadableStreamDefaultController(this) === false) { - throw defaultControllerBrandCheckException('close'); - } - - if (this._closeRequested === true) { - throw new TypeError('The stream has already been closed; do not close it again!'); - } - - var state = this._controlledReadableStream._state; - - if (state !== 'readable') { - throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be closed'); - } - - ReadableStreamDefaultControllerClose(this); - } - }, { - key: 'enqueue', - value: function enqueue(chunk) { - if (IsReadableStreamDefaultController(this) === false) { - throw defaultControllerBrandCheckException('enqueue'); - } - - if (this._closeRequested === true) { - throw new TypeError('stream is closed or draining'); - } - - var state = this._controlledReadableStream._state; - - if (state !== 'readable') { - throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be enqueued to'); - } - - return ReadableStreamDefaultControllerEnqueue(this, chunk); - } - }, { - key: 'error', - value: function error(e) { - if (IsReadableStreamDefaultController(this) === false) { - throw defaultControllerBrandCheckException('error'); - } - - var stream = this._controlledReadableStream; - - if (stream._state !== 'readable') { - throw new TypeError('The stream is ' + stream._state + ' and so cannot be errored'); - } - - ReadableStreamDefaultControllerError(this, e); - } - }, { - key: '__cancelSteps', - value: function __cancelSteps(reason) { - ResetQueue(this); - return PromiseInvokeOrNoop(this._underlyingSource, 'cancel', [reason]); - } - }, { - key: '__pullSteps', - value: function __pullSteps() { - var stream = this._controlledReadableStream; - - if (this._queue.length > 0) { - var chunk = DequeueValue(this); - - if (this._closeRequested === true && this._queue.length === 0) { - ReadableStreamClose(stream); - } else { - ReadableStreamDefaultControllerCallPullIfNeeded(this); - } - - return Promise.resolve(CreateIterResultObject(chunk, false)); - } - - var pendingPromise = ReadableStreamAddReadRequest(stream); - ReadableStreamDefaultControllerCallPullIfNeeded(this); - return pendingPromise; - } - }, { - key: 'desiredSize', - get: function get() { - if (IsReadableStreamDefaultController(this) === false) { - throw defaultControllerBrandCheckException('desiredSize'); - } - - return ReadableStreamDefaultControllerGetDesiredSize(this); - } - }]); - - return ReadableStreamDefaultController; - }(); - - function IsReadableStreamDefaultController(x) { - if (!typeIsObject(x)) { - return false; - } - - if (!Object.prototype.hasOwnProperty.call(x, '_underlyingSource')) { - return false; - } - - return true; - } - - function ReadableStreamDefaultControllerCallPullIfNeeded(controller) { - var shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller); - - if (shouldPull === false) { - return undefined; - } - - if (controller._pulling === true) { - controller._pullAgain = true; - return undefined; - } - - assert(controller._pullAgain === false); - controller._pulling = true; - var pullPromise = PromiseInvokeOrNoop(controller._underlyingSource, 'pull', [controller]); - pullPromise.then(function () { - controller._pulling = false; - - if (controller._pullAgain === true) { - controller._pullAgain = false; - return ReadableStreamDefaultControllerCallPullIfNeeded(controller); - } - - return undefined; - }, function (e) { - ReadableStreamDefaultControllerErrorIfNeeded(controller, e); - }).catch(rethrowAssertionErrorRejection); - return undefined; - } - - function ReadableStreamDefaultControllerShouldCallPull(controller) { - var stream = controller._controlledReadableStream; - - if (stream._state === 'closed' || stream._state === 'errored') { - return false; - } - - if (controller._closeRequested === true) { - return false; - } - - if (controller._started === false) { - return false; - } - - if (IsReadableStreamLocked(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) { - return true; - } - - var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller); - - if (desiredSize > 0) { - return true; - } - - return false; - } - - function ReadableStreamDefaultControllerClose(controller) { - var stream = controller._controlledReadableStream; - assert(controller._closeRequested === false); - assert(stream._state === 'readable'); - controller._closeRequested = true; - - if (controller._queue.length === 0) { - ReadableStreamClose(stream); - } - } - - function ReadableStreamDefaultControllerEnqueue(controller, chunk) { - var stream = controller._controlledReadableStream; - assert(controller._closeRequested === false); - assert(stream._state === 'readable'); - - if (IsReadableStreamLocked(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) { - ReadableStreamFulfillReadRequest(stream, chunk, false); - } else { - var chunkSize = 1; - - if (controller._strategySize !== undefined) { - var strategySize = controller._strategySize; - - try { - chunkSize = strategySize(chunk); - } catch (chunkSizeE) { - ReadableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE); - throw chunkSizeE; - } - } - - try { - EnqueueValueWithSize(controller, chunk, chunkSize); - } catch (enqueueE) { - ReadableStreamDefaultControllerErrorIfNeeded(controller, enqueueE); - throw enqueueE; - } - } - - ReadableStreamDefaultControllerCallPullIfNeeded(controller); - return undefined; - } - - function ReadableStreamDefaultControllerError(controller, e) { - var stream = controller._controlledReadableStream; - assert(stream._state === 'readable'); - ResetQueue(controller); - ReadableStreamError(stream, e); - } - - function ReadableStreamDefaultControllerErrorIfNeeded(controller, e) { - if (controller._controlledReadableStream._state === 'readable') { - ReadableStreamDefaultControllerError(controller, e); - } - } - - function ReadableStreamDefaultControllerGetDesiredSize(controller) { - var stream = controller._controlledReadableStream; - var state = stream._state; - - if (state === 'errored') { - return null; - } - - if (state === 'closed') { - return 0; - } - - return controller._strategyHWM - controller._queueTotalSize; - } - - var ReadableStreamBYOBRequest = function () { - function ReadableStreamBYOBRequest(controller, view) { - _classCallCheck(this, ReadableStreamBYOBRequest); - - this._associatedReadableByteStreamController = controller; - this._view = view; - } - - _createClass(ReadableStreamBYOBRequest, [{ - key: 'respond', - value: function respond(bytesWritten) { - if (IsReadableStreamBYOBRequest(this) === false) { - throw byobRequestBrandCheckException('respond'); - } - - if (this._associatedReadableByteStreamController === undefined) { - throw new TypeError('This BYOB request has been invalidated'); - } - - ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten); - } - }, { - key: 'respondWithNewView', - value: function respondWithNewView(view) { - if (IsReadableStreamBYOBRequest(this) === false) { - throw byobRequestBrandCheckException('respond'); - } - - if (this._associatedReadableByteStreamController === undefined) { - throw new TypeError('This BYOB request has been invalidated'); - } - - if (!ArrayBuffer.isView(view)) { - throw new TypeError('You can only respond with array buffer views'); - } - - ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view); - } - }, { - key: 'view', - get: function get() { - return this._view; - } - }]); - - return ReadableStreamBYOBRequest; - }(); - - var ReadableByteStreamController = function () { - function ReadableByteStreamController(stream, underlyingByteSource, highWaterMark) { - _classCallCheck(this, ReadableByteStreamController); - - if (IsReadableStream(stream) === false) { - throw new TypeError('ReadableByteStreamController can only be constructed with a ReadableStream instance given ' + 'a byte source'); - } - - if (stream._readableStreamController !== undefined) { - throw new TypeError('ReadableByteStreamController instances can only be created by the ReadableStream constructor given a byte ' + 'source'); - } - - this._controlledReadableStream = stream; - this._underlyingByteSource = underlyingByteSource; - this._pullAgain = false; - this._pulling = false; - ReadableByteStreamControllerClearPendingPullIntos(this); - this._queue = this._queueTotalSize = undefined; - ResetQueue(this); - this._closeRequested = false; - this._started = false; - this._strategyHWM = ValidateAndNormalizeHighWaterMark(highWaterMark); - var autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize; - - if (autoAllocateChunkSize !== undefined) { - if (Number.isInteger(autoAllocateChunkSize) === false || autoAllocateChunkSize <= 0) { - throw new RangeError('autoAllocateChunkSize must be a positive integer'); - } - } - - this._autoAllocateChunkSize = autoAllocateChunkSize; - this._pendingPullIntos = []; - var controller = this; - var startResult = InvokeOrNoop(underlyingByteSource, 'start', [this]); - Promise.resolve(startResult).then(function () { - controller._started = true; - assert(controller._pulling === false); - assert(controller._pullAgain === false); - ReadableByteStreamControllerCallPullIfNeeded(controller); - }, function (r) { - if (stream._state === 'readable') { - ReadableByteStreamControllerError(controller, r); - } - }).catch(rethrowAssertionErrorRejection); - } - - _createClass(ReadableByteStreamController, [{ - key: 'close', - value: function close() { - if (IsReadableByteStreamController(this) === false) { - throw byteStreamControllerBrandCheckException('close'); - } - - if (this._closeRequested === true) { - throw new TypeError('The stream has already been closed; do not close it again!'); - } - - var state = this._controlledReadableStream._state; - - if (state !== 'readable') { - throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be closed'); - } - - ReadableByteStreamControllerClose(this); - } - }, { - key: 'enqueue', - value: function enqueue(chunk) { - if (IsReadableByteStreamController(this) === false) { - throw byteStreamControllerBrandCheckException('enqueue'); - } - - if (this._closeRequested === true) { - throw new TypeError('stream is closed or draining'); - } - - var state = this._controlledReadableStream._state; - - if (state !== 'readable') { - throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be enqueued to'); - } - - if (!ArrayBuffer.isView(chunk)) { - throw new TypeError('You can only enqueue array buffer views when using a ReadableByteStreamController'); - } - - ReadableByteStreamControllerEnqueue(this, chunk); - } - }, { - key: 'error', - value: function error(e) { - if (IsReadableByteStreamController(this) === false) { - throw byteStreamControllerBrandCheckException('error'); - } - - var stream = this._controlledReadableStream; - - if (stream._state !== 'readable') { - throw new TypeError('The stream is ' + stream._state + ' and so cannot be errored'); - } - - ReadableByteStreamControllerError(this, e); - } - }, { - key: '__cancelSteps', - value: function __cancelSteps(reason) { - if (this._pendingPullIntos.length > 0) { - var firstDescriptor = this._pendingPullIntos[0]; - firstDescriptor.bytesFilled = 0; - } - - ResetQueue(this); - return PromiseInvokeOrNoop(this._underlyingByteSource, 'cancel', [reason]); - } - }, { - key: '__pullSteps', - value: function __pullSteps() { - var stream = this._controlledReadableStream; - assert(ReadableStreamHasDefaultReader(stream) === true); - - if (this._queueTotalSize > 0) { - assert(ReadableStreamGetNumReadRequests(stream) === 0); - - var entry = this._queue.shift(); - - this._queueTotalSize -= entry.byteLength; - ReadableByteStreamControllerHandleQueueDrain(this); - var view = void 0; - - try { - view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength); - } catch (viewE) { - return Promise.reject(viewE); - } - - return Promise.resolve(CreateIterResultObject(view, false)); - } - - var autoAllocateChunkSize = this._autoAllocateChunkSize; - - if (autoAllocateChunkSize !== undefined) { - var buffer = void 0; - - try { - buffer = new ArrayBuffer(autoAllocateChunkSize); - } catch (bufferE) { - return Promise.reject(bufferE); - } - - var pullIntoDescriptor = { - buffer: buffer, - byteOffset: 0, - byteLength: autoAllocateChunkSize, - bytesFilled: 0, - elementSize: 1, - ctor: Uint8Array, - readerType: 'default' - }; - - this._pendingPullIntos.push(pullIntoDescriptor); - } - - var promise = ReadableStreamAddReadRequest(stream); - ReadableByteStreamControllerCallPullIfNeeded(this); - return promise; - } - }, { - key: 'byobRequest', - get: function get() { - if (IsReadableByteStreamController(this) === false) { - throw byteStreamControllerBrandCheckException('byobRequest'); - } - - if (this._byobRequest === undefined && this._pendingPullIntos.length > 0) { - var firstDescriptor = this._pendingPullIntos[0]; - var view = new Uint8Array(firstDescriptor.buffer, firstDescriptor.byteOffset + firstDescriptor.bytesFilled, firstDescriptor.byteLength - firstDescriptor.bytesFilled); - this._byobRequest = new ReadableStreamBYOBRequest(this, view); - } - - return this._byobRequest; - } - }, { - key: 'desiredSize', - get: function get() { - if (IsReadableByteStreamController(this) === false) { - throw byteStreamControllerBrandCheckException('desiredSize'); - } - - return ReadableByteStreamControllerGetDesiredSize(this); - } - }]); - - return ReadableByteStreamController; - }(); - - function IsReadableByteStreamController(x) { - if (!typeIsObject(x)) { - return false; - } - - if (!Object.prototype.hasOwnProperty.call(x, '_underlyingByteSource')) { - return false; - } - - return true; - } - - function IsReadableStreamBYOBRequest(x) { - if (!typeIsObject(x)) { - return false; - } - - if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) { - return false; - } - - return true; - } - - function ReadableByteStreamControllerCallPullIfNeeded(controller) { - var shouldPull = ReadableByteStreamControllerShouldCallPull(controller); - - if (shouldPull === false) { - return undefined; - } - - if (controller._pulling === true) { - controller._pullAgain = true; - return undefined; - } - - assert(controller._pullAgain === false); - controller._pulling = true; - var pullPromise = PromiseInvokeOrNoop(controller._underlyingByteSource, 'pull', [controller]); - pullPromise.then(function () { - controller._pulling = false; - - if (controller._pullAgain === true) { - controller._pullAgain = false; - ReadableByteStreamControllerCallPullIfNeeded(controller); - } - }, function (e) { - if (controller._controlledReadableStream._state === 'readable') { - ReadableByteStreamControllerError(controller, e); - } - }).catch(rethrowAssertionErrorRejection); - return undefined; - } - - function ReadableByteStreamControllerClearPendingPullIntos(controller) { - ReadableByteStreamControllerInvalidateBYOBRequest(controller); - controller._pendingPullIntos = []; - } - - function ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor) { - assert(stream._state !== 'errored', 'state must not be errored'); - var done = false; - - if (stream._state === 'closed') { - assert(pullIntoDescriptor.bytesFilled === 0); - done = true; - } - - var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor); - - if (pullIntoDescriptor.readerType === 'default') { - ReadableStreamFulfillReadRequest(stream, filledView, done); - } else { - assert(pullIntoDescriptor.readerType === 'byob'); - ReadableStreamFulfillReadIntoRequest(stream, filledView, done); - } - } - - function ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor) { - var bytesFilled = pullIntoDescriptor.bytesFilled; - var elementSize = pullIntoDescriptor.elementSize; - assert(bytesFilled <= pullIntoDescriptor.byteLength); - assert(bytesFilled % elementSize === 0); - return new pullIntoDescriptor.ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize); - } - - function ReadableByteStreamControllerEnqueueChunkToQueue(controller, buffer, byteOffset, byteLength) { - controller._queue.push({ - buffer: buffer, - byteOffset: byteOffset, - byteLength: byteLength - }); - - controller._queueTotalSize += byteLength; - } - - function ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) { - var elementSize = pullIntoDescriptor.elementSize; - var currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize; - var maxBytesToCopy = Math.min(controller._queueTotalSize, pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled); - var maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy; - var maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize; - var totalBytesToCopyRemaining = maxBytesToCopy; - var ready = false; - - if (maxAlignedBytes > currentAlignedBytes) { - totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled; - ready = true; - } - - var queue = controller._queue; - - while (totalBytesToCopyRemaining > 0) { - var headOfQueue = queue[0]; - var bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength); - var destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled; - ArrayBufferCopy(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy); - - if (headOfQueue.byteLength === bytesToCopy) { - queue.shift(); - } else { - headOfQueue.byteOffset += bytesToCopy; - headOfQueue.byteLength -= bytesToCopy; - } - - controller._queueTotalSize -= bytesToCopy; - ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor); - totalBytesToCopyRemaining -= bytesToCopy; - } - - if (ready === false) { - assert(controller._queueTotalSize === 0, 'queue must be empty'); - assert(pullIntoDescriptor.bytesFilled > 0); - assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize); - } - - return ready; - } - - function ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, size, pullIntoDescriptor) { - assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos[0] === pullIntoDescriptor); - ReadableByteStreamControllerInvalidateBYOBRequest(controller); - pullIntoDescriptor.bytesFilled += size; - } - - function ReadableByteStreamControllerHandleQueueDrain(controller) { - assert(controller._controlledReadableStream._state === 'readable'); - - if (controller._queueTotalSize === 0 && controller._closeRequested === true) { - ReadableStreamClose(controller._controlledReadableStream); - } else { - ReadableByteStreamControllerCallPullIfNeeded(controller); - } - } - - function ReadableByteStreamControllerInvalidateBYOBRequest(controller) { - if (controller._byobRequest === undefined) { - return; - } - - controller._byobRequest._associatedReadableByteStreamController = undefined; - controller._byobRequest._view = undefined; - controller._byobRequest = undefined; - } - - function ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller) { - assert(controller._closeRequested === false); - - while (controller._pendingPullIntos.length > 0) { - if (controller._queueTotalSize === 0) { - return; - } - - var pullIntoDescriptor = controller._pendingPullIntos[0]; - - if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) === true) { - ReadableByteStreamControllerShiftPendingPullInto(controller); - ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableStream, pullIntoDescriptor); - } - } - } - - function ReadableByteStreamControllerPullInto(controller, view) { - var stream = controller._controlledReadableStream; - var elementSize = 1; - - if (view.constructor !== DataView) { - elementSize = view.constructor.BYTES_PER_ELEMENT; - } - - var ctor = view.constructor; - var pullIntoDescriptor = { - buffer: view.buffer, - byteOffset: view.byteOffset, - byteLength: view.byteLength, - bytesFilled: 0, - elementSize: elementSize, - ctor: ctor, - readerType: 'byob' - }; - - if (controller._pendingPullIntos.length > 0) { - pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer); - - controller._pendingPullIntos.push(pullIntoDescriptor); - - return ReadableStreamAddReadIntoRequest(stream); - } - - if (stream._state === 'closed') { - var emptyView = new view.constructor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0); - return Promise.resolve(CreateIterResultObject(emptyView, true)); - } - - if (controller._queueTotalSize > 0) { - if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) === true) { - var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor); - ReadableByteStreamControllerHandleQueueDrain(controller); - return Promise.resolve(CreateIterResultObject(filledView, false)); - } - - if (controller._closeRequested === true) { - var e = new TypeError('Insufficient bytes to fill elements in the given buffer'); - ReadableByteStreamControllerError(controller, e); - return Promise.reject(e); - } - } - - pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer); - - controller._pendingPullIntos.push(pullIntoDescriptor); - - var promise = ReadableStreamAddReadIntoRequest(stream); - ReadableByteStreamControllerCallPullIfNeeded(controller); - return promise; - } - - function ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor) { - firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer); - assert(firstDescriptor.bytesFilled === 0, 'bytesFilled must be 0'); - var stream = controller._controlledReadableStream; - - if (ReadableStreamHasBYOBReader(stream) === true) { - while (ReadableStreamGetNumReadIntoRequests(stream) > 0) { - var pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller); - ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor); - } - } - } - - function ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, pullIntoDescriptor) { - if (pullIntoDescriptor.bytesFilled + bytesWritten > pullIntoDescriptor.byteLength) { - throw new RangeError('bytesWritten out of range'); - } - - ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor); - - if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) { - return; - } - - ReadableByteStreamControllerShiftPendingPullInto(controller); - var remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize; - - if (remainderSize > 0) { - var end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled; - var remainder = pullIntoDescriptor.buffer.slice(end - remainderSize, end); - ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength); - } - - pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer); - pullIntoDescriptor.bytesFilled -= remainderSize; - ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableStream, pullIntoDescriptor); - ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller); - } - - function ReadableByteStreamControllerRespondInternal(controller, bytesWritten) { - var firstDescriptor = controller._pendingPullIntos[0]; - var stream = controller._controlledReadableStream; - - if (stream._state === 'closed') { - if (bytesWritten !== 0) { - throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream'); - } - - ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor); - } else { - assert(stream._state === 'readable'); - ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor); - } - } - - function ReadableByteStreamControllerShiftPendingPullInto(controller) { - var descriptor = controller._pendingPullIntos.shift(); - - ReadableByteStreamControllerInvalidateBYOBRequest(controller); - return descriptor; - } - - function ReadableByteStreamControllerShouldCallPull(controller) { - var stream = controller._controlledReadableStream; - - if (stream._state !== 'readable') { - return false; - } - - if (controller._closeRequested === true) { - return false; - } - - if (controller._started === false) { - return false; - } - - if (ReadableStreamHasDefaultReader(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) { - return true; - } - - if (ReadableStreamHasBYOBReader(stream) === true && ReadableStreamGetNumReadIntoRequests(stream) > 0) { - return true; - } - - if (ReadableByteStreamControllerGetDesiredSize(controller) > 0) { - return true; - } - - return false; - } - - function ReadableByteStreamControllerClose(controller) { - var stream = controller._controlledReadableStream; - assert(controller._closeRequested === false); - assert(stream._state === 'readable'); - - if (controller._queueTotalSize > 0) { - controller._closeRequested = true; - return; - } - - if (controller._pendingPullIntos.length > 0) { - var firstPendingPullInto = controller._pendingPullIntos[0]; - - if (firstPendingPullInto.bytesFilled > 0) { - var e = new TypeError('Insufficient bytes to fill elements in the given buffer'); - ReadableByteStreamControllerError(controller, e); - throw e; - } - } - - ReadableStreamClose(stream); - } - - function ReadableByteStreamControllerEnqueue(controller, chunk) { - var stream = controller._controlledReadableStream; - assert(controller._closeRequested === false); - assert(stream._state === 'readable'); - var buffer = chunk.buffer; - var byteOffset = chunk.byteOffset; - var byteLength = chunk.byteLength; - var transferredBuffer = TransferArrayBuffer(buffer); - - if (ReadableStreamHasDefaultReader(stream) === true) { - if (ReadableStreamGetNumReadRequests(stream) === 0) { - ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength); - } else { - assert(controller._queue.length === 0); - var transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength); - ReadableStreamFulfillReadRequest(stream, transferredView, false); - } - } else if (ReadableStreamHasBYOBReader(stream) === true) { - ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength); - ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller); - } else { - assert(IsReadableStreamLocked(stream) === false, 'stream must not be locked'); - ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength); - } - } - - function ReadableByteStreamControllerError(controller, e) { - var stream = controller._controlledReadableStream; - assert(stream._state === 'readable'); - ReadableByteStreamControllerClearPendingPullIntos(controller); - ResetQueue(controller); - ReadableStreamError(stream, e); - } - - function ReadableByteStreamControllerGetDesiredSize(controller) { - var stream = controller._controlledReadableStream; - var state = stream._state; - - if (state === 'errored') { - return null; - } - - if (state === 'closed') { - return 0; - } - - return controller._strategyHWM - controller._queueTotalSize; - } - - function ReadableByteStreamControllerRespond(controller, bytesWritten) { - bytesWritten = Number(bytesWritten); - - if (IsFiniteNonNegativeNumber(bytesWritten) === false) { - throw new RangeError('bytesWritten must be a finite'); - } - - assert(controller._pendingPullIntos.length > 0); - ReadableByteStreamControllerRespondInternal(controller, bytesWritten); - } - - function ReadableByteStreamControllerRespondWithNewView(controller, view) { - assert(controller._pendingPullIntos.length > 0); - var firstDescriptor = controller._pendingPullIntos[0]; - - if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) { - throw new RangeError('The region specified by view does not match byobRequest'); - } - - if (firstDescriptor.byteLength !== view.byteLength) { - throw new RangeError('The buffer of view has different capacity than byobRequest'); - } - - firstDescriptor.buffer = view.buffer; - ReadableByteStreamControllerRespondInternal(controller, view.byteLength); - } - - function streamBrandCheckException(name) { - return new TypeError('ReadableStream.prototype.' + name + ' can only be used on a ReadableStream'); - } - - function readerLockException(name) { - return new TypeError('Cannot ' + name + ' a stream using a released reader'); - } - - function defaultReaderBrandCheckException(name) { - return new TypeError('ReadableStreamDefaultReader.prototype.' + name + ' can only be used on a ReadableStreamDefaultReader'); - } - - function defaultReaderClosedPromiseInitialize(reader) { - reader._closedPromise = new Promise(function (resolve, reject) { - reader._closedPromise_resolve = resolve; - reader._closedPromise_reject = reject; - }); - } - - function defaultReaderClosedPromiseInitializeAsRejected(reader, reason) { - reader._closedPromise = Promise.reject(reason); - reader._closedPromise_resolve = undefined; - reader._closedPromise_reject = undefined; - } - - function defaultReaderClosedPromiseInitializeAsResolved(reader) { - reader._closedPromise = Promise.resolve(undefined); - reader._closedPromise_resolve = undefined; - reader._closedPromise_reject = undefined; - } - - function defaultReaderClosedPromiseReject(reader, reason) { - assert(reader._closedPromise_resolve !== undefined); - assert(reader._closedPromise_reject !== undefined); - - reader._closedPromise_reject(reason); - - reader._closedPromise_resolve = undefined; - reader._closedPromise_reject = undefined; - } - - function defaultReaderClosedPromiseResetToRejected(reader, reason) { - assert(reader._closedPromise_resolve === undefined); - assert(reader._closedPromise_reject === undefined); - reader._closedPromise = Promise.reject(reason); - } - - function defaultReaderClosedPromiseResolve(reader) { - assert(reader._closedPromise_resolve !== undefined); - assert(reader._closedPromise_reject !== undefined); - - reader._closedPromise_resolve(undefined); - - reader._closedPromise_resolve = undefined; - reader._closedPromise_reject = undefined; - } - - function byobReaderBrandCheckException(name) { - return new TypeError('ReadableStreamBYOBReader.prototype.' + name + ' can only be used on a ReadableStreamBYOBReader'); - } - - function defaultControllerBrandCheckException(name) { - return new TypeError('ReadableStreamDefaultController.prototype.' + name + ' can only be used on a ReadableStreamDefaultController'); - } - - function byobRequestBrandCheckException(name) { - return new TypeError('ReadableStreamBYOBRequest.prototype.' + name + ' can only be used on a ReadableStreamBYOBRequest'); - } - - function byteStreamControllerBrandCheckException(name) { - return new TypeError('ReadableByteStreamController.prototype.' + name + ' can only be used on a ReadableByteStreamController'); - } - - function ifIsObjectAndHasAPromiseIsHandledInternalSlotSetPromiseIsHandledToTrue(promise) { - try { - Promise.prototype.then.call(promise, undefined, function () {}); - } catch (e) {} - } - }, function (module, exports, __w_extracthighlights_require__) { - - var transformStream = __w_extracthighlights_require__(6); - - var readableStream = __w_extracthighlights_require__(4); - - var writableStream = __w_extracthighlights_require__(2); - - exports.TransformStream = transformStream.TransformStream; - exports.ReadableStream = readableStream.ReadableStream; - exports.IsReadableStreamDisturbed = readableStream.IsReadableStreamDisturbed; - exports.ReadableStreamDefaultControllerClose = readableStream.ReadableStreamDefaultControllerClose; - exports.ReadableStreamDefaultControllerEnqueue = readableStream.ReadableStreamDefaultControllerEnqueue; - exports.ReadableStreamDefaultControllerError = readableStream.ReadableStreamDefaultControllerError; - exports.ReadableStreamDefaultControllerGetDesiredSize = readableStream.ReadableStreamDefaultControllerGetDesiredSize; - exports.AcquireWritableStreamDefaultWriter = writableStream.AcquireWritableStreamDefaultWriter; - exports.IsWritableStream = writableStream.IsWritableStream; - exports.IsWritableStreamLocked = writableStream.IsWritableStreamLocked; - exports.WritableStream = writableStream.WritableStream; - exports.WritableStreamAbort = writableStream.WritableStreamAbort; - exports.WritableStreamDefaultControllerError = writableStream.WritableStreamDefaultControllerError; - exports.WritableStreamDefaultWriterCloseWithErrorPropagation = writableStream.WritableStreamDefaultWriterCloseWithErrorPropagation; - exports.WritableStreamDefaultWriterRelease = writableStream.WritableStreamDefaultWriterRelease; - exports.WritableStreamDefaultWriterWrite = writableStream.WritableStreamDefaultWriterWrite; - }, function (module, exports, __w_extracthighlights_require__) { - - var _createClass = function () { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - return function (Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps); - if (staticProps) defineProperties(Constructor, staticProps); - return Constructor; - }; - }(); - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - var _require = __w_extracthighlights_require__(1), - assert = _require.assert; - - var _require2 = __w_extracthighlights_require__(0), - InvokeOrNoop = _require2.InvokeOrNoop, - PromiseInvokeOrPerformFallback = _require2.PromiseInvokeOrPerformFallback, - PromiseInvokeOrNoop = _require2.PromiseInvokeOrNoop, - typeIsObject = _require2.typeIsObject; - - var _require3 = __w_extracthighlights_require__(4), - ReadableStream = _require3.ReadableStream, - ReadableStreamDefaultControllerClose = _require3.ReadableStreamDefaultControllerClose, - ReadableStreamDefaultControllerEnqueue = _require3.ReadableStreamDefaultControllerEnqueue, - ReadableStreamDefaultControllerError = _require3.ReadableStreamDefaultControllerError, - ReadableStreamDefaultControllerGetDesiredSize = _require3.ReadableStreamDefaultControllerGetDesiredSize; - - var _require4 = __w_extracthighlights_require__(2), - WritableStream = _require4.WritableStream, - WritableStreamDefaultControllerError = _require4.WritableStreamDefaultControllerError; - - function TransformStreamCloseReadable(transformStream) { - if (transformStream._errored === true) { - throw new TypeError('TransformStream is already errored'); - } - - if (transformStream._readableClosed === true) { - throw new TypeError('Readable side is already closed'); - } - - TransformStreamCloseReadableInternal(transformStream); - } - - function TransformStreamEnqueueToReadable(transformStream, chunk) { - if (transformStream._errored === true) { - throw new TypeError('TransformStream is already errored'); - } - - if (transformStream._readableClosed === true) { - throw new TypeError('Readable side is already closed'); - } - - var controller = transformStream._readableController; - - try { - ReadableStreamDefaultControllerEnqueue(controller, chunk); - } catch (e) { - transformStream._readableClosed = true; - TransformStreamErrorIfNeeded(transformStream, e); - throw transformStream._storedError; - } - - var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller); - var maybeBackpressure = desiredSize <= 0; - - if (maybeBackpressure === true && transformStream._backpressure === false) { - TransformStreamSetBackpressure(transformStream, true); - } - } - - function TransformStreamError(transformStream, e) { - if (transformStream._errored === true) { - throw new TypeError('TransformStream is already errored'); - } - - TransformStreamErrorInternal(transformStream, e); - } - - function TransformStreamCloseReadableInternal(transformStream) { - assert(transformStream._errored === false); - assert(transformStream._readableClosed === false); - - try { - ReadableStreamDefaultControllerClose(transformStream._readableController); - } catch (e) { - assert(false); - } - - transformStream._readableClosed = true; - } - - function TransformStreamErrorIfNeeded(transformStream, e) { - if (transformStream._errored === false) { - TransformStreamErrorInternal(transformStream, e); - } - } - - function TransformStreamErrorInternal(transformStream, e) { - assert(transformStream._errored === false); - transformStream._errored = true; - transformStream._storedError = e; - - if (transformStream._writableDone === false) { - WritableStreamDefaultControllerError(transformStream._writableController, e); - } - - if (transformStream._readableClosed === false) { - ReadableStreamDefaultControllerError(transformStream._readableController, e); - } - } - - function TransformStreamReadableReadyPromise(transformStream) { - assert(transformStream._backpressureChangePromise !== undefined, '_backpressureChangePromise should have been initialized'); - - if (transformStream._backpressure === false) { - return Promise.resolve(); - } - - assert(transformStream._backpressure === true, '_backpressure should have been initialized'); - return transformStream._backpressureChangePromise; - } - - function TransformStreamSetBackpressure(transformStream, backpressure) { - assert(transformStream._backpressure !== backpressure, 'TransformStreamSetBackpressure() should be called only when backpressure is changed'); - - if (transformStream._backpressureChangePromise !== undefined) { - transformStream._backpressureChangePromise_resolve(backpressure); - } - - transformStream._backpressureChangePromise = new Promise(function (resolve) { - transformStream._backpressureChangePromise_resolve = resolve; - }); - - transformStream._backpressureChangePromise.then(function (resolution) { - assert(resolution !== backpressure, '_backpressureChangePromise should be fulfilled only when backpressure is changed'); - }); - - transformStream._backpressure = backpressure; - } - - function TransformStreamDefaultTransform(chunk, transformStreamController) { - var transformStream = transformStreamController._controlledTransformStream; - TransformStreamEnqueueToReadable(transformStream, chunk); - return Promise.resolve(); - } - - function TransformStreamTransform(transformStream, chunk) { - assert(transformStream._errored === false); - assert(transformStream._transforming === false); - assert(transformStream._backpressure === false); - transformStream._transforming = true; - var transformer = transformStream._transformer; - var controller = transformStream._transformStreamController; - var transformPromise = PromiseInvokeOrPerformFallback(transformer, 'transform', [chunk, controller], TransformStreamDefaultTransform, [chunk, controller]); - return transformPromise.then(function () { - transformStream._transforming = false; - return TransformStreamReadableReadyPromise(transformStream); - }, function (e) { - TransformStreamErrorIfNeeded(transformStream, e); - return Promise.reject(e); - }); - } - - function IsTransformStreamDefaultController(x) { - if (!typeIsObject(x)) { - return false; - } - - if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) { - return false; - } - - return true; - } - - function IsTransformStream(x) { - if (!typeIsObject(x)) { - return false; - } - - if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) { - return false; - } - - return true; - } - - var TransformStreamSink = function () { - function TransformStreamSink(transformStream, startPromise) { - _classCallCheck(this, TransformStreamSink); - - this._transformStream = transformStream; - this._startPromise = startPromise; - } - - _createClass(TransformStreamSink, [{ - key: 'start', - value: function start(c) { - var transformStream = this._transformStream; - transformStream._writableController = c; - return this._startPromise.then(function () { - return TransformStreamReadableReadyPromise(transformStream); - }); - } - }, { - key: 'write', - value: function write(chunk) { - var transformStream = this._transformStream; - return TransformStreamTransform(transformStream, chunk); - } - }, { - key: 'abort', - value: function abort() { - var transformStream = this._transformStream; - transformStream._writableDone = true; - TransformStreamErrorInternal(transformStream, new TypeError('Writable side aborted')); - } - }, { - key: 'close', - value: function close() { - var transformStream = this._transformStream; - assert(transformStream._transforming === false); - transformStream._writableDone = true; - var flushPromise = PromiseInvokeOrNoop(transformStream._transformer, 'flush', [transformStream._transformStreamController]); - return flushPromise.then(function () { - if (transformStream._errored === true) { - return Promise.reject(transformStream._storedError); - } - - if (transformStream._readableClosed === false) { - TransformStreamCloseReadableInternal(transformStream); - } - - return Promise.resolve(); - }).catch(function (r) { - TransformStreamErrorIfNeeded(transformStream, r); - return Promise.reject(transformStream._storedError); - }); - } - }]); - - return TransformStreamSink; - }(); - - var TransformStreamSource = function () { - function TransformStreamSource(transformStream, startPromise) { - _classCallCheck(this, TransformStreamSource); - - this._transformStream = transformStream; - this._startPromise = startPromise; - } - - _createClass(TransformStreamSource, [{ - key: 'start', - value: function start(c) { - var transformStream = this._transformStream; - transformStream._readableController = c; - return this._startPromise.then(function () { - assert(transformStream._backpressureChangePromise !== undefined, '_backpressureChangePromise should have been initialized'); - - if (transformStream._backpressure === true) { - return Promise.resolve(); - } - - assert(transformStream._backpressure === false, '_backpressure should have been initialized'); - return transformStream._backpressureChangePromise; - }); - } - }, { - key: 'pull', - value: function pull() { - var transformStream = this._transformStream; - assert(transformStream._backpressure === true, 'pull() should be never called while _backpressure is false'); - assert(transformStream._backpressureChangePromise !== undefined, '_backpressureChangePromise should have been initialized'); - TransformStreamSetBackpressure(transformStream, false); - return transformStream._backpressureChangePromise; - } - }, { - key: 'cancel', - value: function cancel() { - var transformStream = this._transformStream; - transformStream._readableClosed = true; - TransformStreamErrorInternal(transformStream, new TypeError('Readable side canceled')); - } - }]); - - return TransformStreamSource; - }(); - - var TransformStreamDefaultController = function () { - function TransformStreamDefaultController(transformStream) { - _classCallCheck(this, TransformStreamDefaultController); - - if (IsTransformStream(transformStream) === false) { - throw new TypeError('TransformStreamDefaultController can only be ' + 'constructed with a TransformStream instance'); - } - - if (transformStream._transformStreamController !== undefined) { - throw new TypeError('TransformStreamDefaultController instances can ' + 'only be created by the TransformStream constructor'); - } - - this._controlledTransformStream = transformStream; - } - - _createClass(TransformStreamDefaultController, [{ - key: 'enqueue', - value: function enqueue(chunk) { - if (IsTransformStreamDefaultController(this) === false) { - throw defaultControllerBrandCheckException('enqueue'); - } - - TransformStreamEnqueueToReadable(this._controlledTransformStream, chunk); - } - }, { - key: 'close', - value: function close() { - if (IsTransformStreamDefaultController(this) === false) { - throw defaultControllerBrandCheckException('close'); - } - - TransformStreamCloseReadable(this._controlledTransformStream); - } - }, { - key: 'error', - value: function error(reason) { - if (IsTransformStreamDefaultController(this) === false) { - throw defaultControllerBrandCheckException('error'); - } - - TransformStreamError(this._controlledTransformStream, reason); - } - }, { - key: 'desiredSize', - get: function get() { - if (IsTransformStreamDefaultController(this) === false) { - throw defaultControllerBrandCheckException('desiredSize'); - } - - var transformStream = this._controlledTransformStream; - var readableController = transformStream._readableController; - return ReadableStreamDefaultControllerGetDesiredSize(readableController); - } - }]); - - return TransformStreamDefaultController; - }(); - - var TransformStream = function () { - function TransformStream() { - var transformer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, TransformStream); - - this._transformer = transformer; - var readableStrategy = transformer.readableStrategy, - writableStrategy = transformer.writableStrategy; - this._transforming = false; - this._errored = false; - this._storedError = undefined; - this._writableController = undefined; - this._readableController = undefined; - this._transformStreamController = undefined; - this._writableDone = false; - this._readableClosed = false; - this._backpressure = undefined; - this._backpressureChangePromise = undefined; - this._backpressureChangePromise_resolve = undefined; - this._transformStreamController = new TransformStreamDefaultController(this); - var startPromise_resolve = void 0; - var startPromise = new Promise(function (resolve) { - startPromise_resolve = resolve; - }); - var source = new TransformStreamSource(this, startPromise); - this._readable = new ReadableStream(source, readableStrategy); - var sink = new TransformStreamSink(this, startPromise); - this._writable = new WritableStream(sink, writableStrategy); - assert(this._writableController !== undefined); - assert(this._readableController !== undefined); - var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(this._readableController); - TransformStreamSetBackpressure(this, desiredSize <= 0); - var transformStream = this; - var startResult = InvokeOrNoop(transformer, 'start', [transformStream._transformStreamController]); - startPromise_resolve(startResult); - startPromise.catch(function (e) { - if (transformStream._errored === false) { - transformStream._errored = true; - transformStream._storedError = e; - } - }); - } - - _createClass(TransformStream, [{ - key: 'readable', - get: function get() { - if (IsTransformStream(this) === false) { - throw streamBrandCheckException('readable'); - } - - return this._readable; - } - }, { - key: 'writable', - get: function get() { - if (IsTransformStream(this) === false) { - throw streamBrandCheckException('writable'); - } - - return this._writable; - } - }]); - - return TransformStream; - }(); - - module.exports = { - TransformStream: TransformStream - }; - - function defaultControllerBrandCheckException(name) { - return new TypeError('TransformStreamDefaultController.prototype.' + name + ' can only be used on a TransformStreamDefaultController'); - } - - function streamBrandCheckException(name) { - return new TypeError('TransformStream.prototype.' + name + ' can only be used on a TransformStream'); - } - }, function (module, exports, __w_extracthighlights_require__) { - module.exports = __w_extracthighlights_require__(5); - }])); - - /***/ }), - /* 144 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - { - var isURLSupported = false; - - try { - if (typeof URL === 'function' && _typeof(URL.prototype) === 'object' && 'origin' in URL.prototype) { - var u = new URL('b', 'http://a'); - u.pathname = 'c%20d'; - isURLSupported = u.href === 'http://a/c%20d'; - } - } catch (ex) {} - - if (isURLSupported) { - exports.URL = URL; - } else { - var PolyfillURL = __w_extracthighlights_require__(145).URL; - - var OriginalURL = __w_extracthighlights_require__(3).URL; - - if (OriginalURL) { - PolyfillURL.createObjectURL = function (blob) { - return OriginalURL.createObjectURL.apply(OriginalURL, arguments); - }; - - PolyfillURL.revokeObjectURL = function (url) { - OriginalURL.revokeObjectURL(url); - }; - } - - exports.URL = PolyfillURL; - } - } - - /***/ }), - /* 145 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - (function URLConstructorClosure() { - - var relative = Object.create(null); - relative['ftp'] = 21; - relative['file'] = 0; - relative['gopher'] = 70; - relative['http'] = 80; - relative['https'] = 443; - relative['ws'] = 80; - relative['wss'] = 443; - var relativePathDotMapping = Object.create(null); - relativePathDotMapping['%2e'] = '.'; - relativePathDotMapping['.%2e'] = '..'; - relativePathDotMapping['%2e.'] = '..'; - relativePathDotMapping['%2e%2e'] = '..'; - - function isRelativeScheme(scheme) { - return relative[scheme] !== undefined; - } - - function invalid() { - clear.call(this); - this._isInvalid = true; - } - - function IDNAToASCII(h) { - if (h === '') { - invalid.call(this); - } - - return h.toLowerCase(); - } - - function percentEscape(c) { - var unicode = c.charCodeAt(0); - - if (unicode > 0x20 && unicode < 0x7F && [0x22, 0x23, 0x3C, 0x3E, 0x3F, 0x60].indexOf(unicode) === -1) { - return c; - } - - return encodeURIComponent(c); - } - - function percentEscapeQuery(c) { - var unicode = c.charCodeAt(0); - - if (unicode > 0x20 && unicode < 0x7F && [0x22, 0x23, 0x3C, 0x3E, 0x60].indexOf(unicode) === -1) { - return c; - } - - return encodeURIComponent(c); - } - - var EOF, - ALPHA = /[a-zA-Z]/, - ALPHANUMERIC = /[a-zA-Z0-9\+\-\.]/; - - function parse(input, stateOverride, base) { - - var state = stateOverride || 'scheme start', - cursor = 0, - buffer = '', - seenAt = false, - seenBracket = false; - - loop: while ((input[cursor - 1] !== EOF || cursor === 0) && !this._isInvalid) { - var c = input[cursor]; - - switch (state) { - case 'scheme start': - if (c && ALPHA.test(c)) { - buffer += c.toLowerCase(); - state = 'scheme'; - } else if (!stateOverride) { - buffer = ''; - state = 'no scheme'; - continue; - } else { - break loop; - } - - break; - - case 'scheme': - if (c && ALPHANUMERIC.test(c)) { - buffer += c.toLowerCase(); - } else if (c === ':') { - this._scheme = buffer; - buffer = ''; - - if (stateOverride) { - break loop; - } - - if (isRelativeScheme(this._scheme)) { - this._isRelative = true; - } - - if (this._scheme === 'file') { - state = 'relative'; - } else if (this._isRelative && base && base._scheme === this._scheme) { - state = 'relative or authority'; - } else if (this._isRelative) { - state = 'authority first slash'; - } else { - state = 'scheme data'; - } - } else if (!stateOverride) { - buffer = ''; - cursor = 0; - state = 'no scheme'; - continue; - } else if (c === EOF) { - break loop; - } else { - break loop; - } - - break; - - case 'scheme data': - if (c === '?') { - this._query = '?'; - state = 'query'; - } else if (c === '#') { - this._fragment = '#'; - state = 'fragment'; - } else { - if (c !== EOF && c !== '\t' && c !== '\n' && c !== '\r') { - this._schemeData += percentEscape(c); - } - } - - break; - - case 'no scheme': - if (!base || !isRelativeScheme(base._scheme)) { - invalid.call(this); - } else { - state = 'relative'; - continue; - } - - break; - - case 'relative or authority': - if (c === '/' && input[cursor + 1] === '/') { - state = 'authority ignore slashes'; - } else { - state = 'relative'; - continue; - } - - break; - - case 'relative': - this._isRelative = true; - - if (this._scheme !== 'file') { - this._scheme = base._scheme; - } - - if (c === EOF) { - this._host = base._host; - this._port = base._port; - this._path = base._path.slice(); - this._query = base._query; - this._username = base._username; - this._password = base._password; - break loop; - } else if (c === '/' || c === '\\') { - - state = 'relative slash'; - } else if (c === '?') { - this._host = base._host; - this._port = base._port; - this._path = base._path.slice(); - this._query = '?'; - this._username = base._username; - this._password = base._password; - state = 'query'; - } else if (c === '#') { - this._host = base._host; - this._port = base._port; - this._path = base._path.slice(); - this._query = base._query; - this._fragment = '#'; - this._username = base._username; - this._password = base._password; - state = 'fragment'; - } else { - var nextC = input[cursor + 1]; - var nextNextC = input[cursor + 2]; - - if (this._scheme !== 'file' || !ALPHA.test(c) || nextC !== ':' && nextC !== '|' || nextNextC !== EOF && nextNextC !== '/' && nextNextC !== '\\' && nextNextC !== '?' && nextNextC !== '#') { - this._host = base._host; - this._port = base._port; - this._username = base._username; - this._password = base._password; - this._path = base._path.slice(); - - this._path.pop(); - } - - state = 'relative path'; - continue; - } - - break; - - case 'relative slash': - if (c === '/' || c === '\\') { - - if (this._scheme === 'file') { - state = 'file host'; - } else { - state = 'authority ignore slashes'; - } - } else { - if (this._scheme !== 'file') { - this._host = base._host; - this._port = base._port; - this._username = base._username; - this._password = base._password; - } - - state = 'relative path'; - continue; - } - - break; - - case 'authority first slash': - if (c === '/') { - state = 'authority second slash'; - } else { - state = 'authority ignore slashes'; - continue; - } - - break; - - case 'authority second slash': - state = 'authority ignore slashes'; - - if (c !== '/') { - continue; - } - - break; - - case 'authority ignore slashes': - if (c !== '/' && c !== '\\') { - state = 'authority'; - continue; - } - - break; - - case 'authority': - if (c === '@') { - if (seenAt) { - buffer += '%40'; - } - - seenAt = true; - - for (var i = 0; i < buffer.length; i++) { - var cp = buffer[i]; - - if (cp === '\t' || cp === '\n' || cp === '\r') { - continue; - } - - if (cp === ':' && this._password === null) { - this._password = ''; - continue; - } - - var tempC = percentEscape(cp); - - if (this._password !== null) { - this._password += tempC; - } else { - this._username += tempC; - } - } - - buffer = ''; - } else if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#') { - cursor -= buffer.length; - buffer = ''; - state = 'host'; - continue; - } else { - buffer += c; - } - - break; - - case 'file host': - if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#') { - if (buffer.length === 2 && ALPHA.test(buffer[0]) && (buffer[1] === ':' || buffer[1] === '|')) { - state = 'relative path'; - } else if (buffer.length === 0) { - state = 'relative path start'; - } else { - this._host = IDNAToASCII.call(this, buffer); - buffer = ''; - state = 'relative path start'; - } - - continue; - } else if (c === '\t' || c === '\n' || c === '\r') ; else { - buffer += c; - } - - break; - - case 'host': - case 'hostname': - if (c === ':' && !seenBracket) { - this._host = IDNAToASCII.call(this, buffer); - buffer = ''; - state = 'port'; - - if (stateOverride === 'hostname') { - break loop; - } - } else if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#') { - this._host = IDNAToASCII.call(this, buffer); - buffer = ''; - state = 'relative path start'; - - if (stateOverride) { - break loop; - } - - continue; - } else if (c !== '\t' && c !== '\n' && c !== '\r') { - if (c === '[') { - seenBracket = true; - } else if (c === ']') { - seenBracket = false; - } - - buffer += c; - } else ; - - break; - - case 'port': - if (/[0-9]/.test(c)) { - buffer += c; - } else if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#' || stateOverride) { - if (buffer !== '') { - var temp = parseInt(buffer, 10); - - if (temp !== relative[this._scheme]) { - this._port = temp + ''; - } - - buffer = ''; - } - - if (stateOverride) { - break loop; - } - - state = 'relative path start'; - continue; - } else if (c === '\t' || c === '\n' || c === '\r') ; else { - invalid.call(this); - } - - break; - - case 'relative path start': - - state = 'relative path'; - - if (c !== '/' && c !== '\\') { - continue; - } - - break; - - case 'relative path': - if (c === EOF || c === '/' || c === '\\' || !stateOverride && (c === '?' || c === '#')) { - - var tmp; - - if (tmp = relativePathDotMapping[buffer.toLowerCase()]) { - buffer = tmp; - } - - if (buffer === '..') { - this._path.pop(); - - if (c !== '/' && c !== '\\') { - this._path.push(''); - } - } else if (buffer === '.' && c !== '/' && c !== '\\') { - this._path.push(''); - } else if (buffer !== '.') { - if (this._scheme === 'file' && this._path.length === 0 && buffer.length === 2 && ALPHA.test(buffer[0]) && buffer[1] === '|') { - buffer = buffer[0] + ':'; - } - - this._path.push(buffer); - } - - buffer = ''; - - if (c === '?') { - this._query = '?'; - state = 'query'; - } else if (c === '#') { - this._fragment = '#'; - state = 'fragment'; - } - } else if (c !== '\t' && c !== '\n' && c !== '\r') { - buffer += percentEscape(c); - } - - break; - - case 'query': - if (!stateOverride && c === '#') { - this._fragment = '#'; - state = 'fragment'; - } else if (c !== EOF && c !== '\t' && c !== '\n' && c !== '\r') { - this._query += percentEscapeQuery(c); - } - - break; - - case 'fragment': - if (c !== EOF && c !== '\t' && c !== '\n' && c !== '\r') { - this._fragment += c; - } - - break; - } - - cursor++; - } - } - - function clear() { - this._scheme = ''; - this._schemeData = ''; - this._username = ''; - this._password = null; - this._host = ''; - this._port = ''; - this._path = []; - this._query = ''; - this._fragment = ''; - this._isInvalid = false; - this._isRelative = false; - } - - function JURL(url, base) { - if (base !== undefined && !(base instanceof JURL)) { - base = new JURL(String(base)); - } - - this._url = url; - clear.call(this); - var input = url.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g, ''); - parse.call(this, input, null, base); - } - - JURL.prototype = { - toString: function toString() { - return this.href; - }, - - get href() { - if (this._isInvalid) { - return this._url; - } - - var authority = ''; - - if (this._username !== '' || this._password !== null) { - authority = this._username + (this._password !== null ? ':' + this._password : '') + '@'; - } - - return this.protocol + (this._isRelative ? '//' + authority + this.host : '') + this.pathname + this._query + this._fragment; - }, - - set href(value) { - clear.call(this); - parse.call(this, value); - }, - - get protocol() { - return this._scheme + ':'; - }, - - set protocol(value) { - if (this._isInvalid) { - return; - } - - parse.call(this, value + ':', 'scheme start'); - }, - - get host() { - return this._isInvalid ? '' : this._port ? this._host + ':' + this._port : this._host; - }, - - set host(value) { - if (this._isInvalid || !this._isRelative) { - return; - } - - parse.call(this, value, 'host'); - }, - - get hostname() { - return this._host; - }, - - set hostname(value) { - if (this._isInvalid || !this._isRelative) { - return; - } - - parse.call(this, value, 'hostname'); - }, - - get port() { - return this._port; - }, - - set port(value) { - if (this._isInvalid || !this._isRelative) { - return; - } - - parse.call(this, value, 'port'); - }, - - get pathname() { - return this._isInvalid ? '' : this._isRelative ? '/' + this._path.join('/') : this._schemeData; - }, - - set pathname(value) { - if (this._isInvalid || !this._isRelative) { - return; - } - - this._path = []; - parse.call(this, value, 'relative path start'); - }, - - get search() { - return this._isInvalid || !this._query || this._query === '?' ? '' : this._query; - }, - - set search(value) { - if (this._isInvalid || !this._isRelative) { - return; - } - - this._query = '?'; - - if (value[0] === '?') { - value = value.slice(1); - } - - parse.call(this, value, 'query'); - }, - - get hash() { - return this._isInvalid || !this._fragment || this._fragment === '#' ? '' : this._fragment; - }, - - set hash(value) { - if (this._isInvalid) { - return; - } - - this._fragment = '#'; - - if (value[0] === '#') { - value = value.slice(1); - } - - parse.call(this, value, 'fragment'); - }, - - get origin() { - var host; - - if (this._isInvalid || !this._scheme) { - return ''; - } - - switch (this._scheme) { - case 'data': - case 'file': - case 'javascript': - case 'mailto': - return 'null'; - - case 'blob': - try { - return new JURL(this._schemeData).origin || 'null'; - } catch (_) {} - - return 'null'; - } - - host = this.host; - - if (!host) { - return ''; - } - - return this._scheme + '://' + host; - } - - }; - exports.URL = JURL; - })(); - - /***/ }), - /* 146 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.getDocument = getDocument; - exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory; - exports.build = exports.version = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFWorker = exports.PDFDataRangeTransport = exports.LoopbackPort = void 0; - - var _regenerator = _interopRequireDefault(__w_extracthighlights_require__(147)); - - var _util = __w_extracthighlights_require__(1); - - var _dom_utils = __w_extracthighlights_require__(151); - - var _font_loader = __w_extracthighlights_require__(152); - - var _api_compatibility = __w_extracthighlights_require__(153); - - var _canvas = __w_extracthighlights_require__(154); - - var _global_scope = _interopRequireDefault(__w_extracthighlights_require__(3)); - - var _worker_options = __w_extracthighlights_require__(156); - - var _message_handler = __w_extracthighlights_require__(157); - - var _metadata = __w_extracthighlights_require__(158); - - var _transport_stream = __w_extracthighlights_require__(160); - - var _webgl = __w_extracthighlights_require__(161); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - - function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - - function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } - - function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } - - function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } - - function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } - - function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } - - function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } - - function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } - - function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - var DEFAULT_RANGE_CHUNK_SIZE = 65536; - var isWorkerDisabled = false; - var fallbackWorkerSrc; - var fakeWorkerFilesLoader = null; - { - var useRequireEnsure = false; - - if (typeof window === 'undefined') { - isWorkerDisabled = true; - - if (typeof commonjsRequire.ensure === 'undefined') { - commonjsRequire.ensure = nodeEnsure; - } - - useRequireEnsure = true; - } else if (typeof commonjsRequire !== 'undefined' && typeof commonjsRequire.ensure === 'function') { - useRequireEnsure = true; - } - - if (typeof requirejs !== 'undefined' && requirejs.toUrl) { - fallbackWorkerSrc = requirejs.toUrl('extracthighlights-dist/build/extracthighlights.worker.js'); - } - - var dynamicLoaderSupported = typeof requirejs !== 'undefined' && requirejs.load; - fakeWorkerFilesLoader = useRequireEnsure ? function () { - return new Promise(function (resolve, reject) { - commonjsRequire.ensure([], function () { - try { - var worker; - worker = extracthighlights_worker; - resolve(worker.WorkerMessageHandler); - } catch (ex) { - reject(ex); - } - }, reject, 'extracthighlightsWorker'); - }); - } : dynamicLoaderSupported ? function () { - return new Promise(function (resolve, reject) { - requirejs(['extracthighlights-dist/build/extracthighlights.worker'], function (worker) { - try { - resolve(worker.WorkerMessageHandler); - } catch (ex) { - reject(ex); - } - }, reject); - }); - } : null; - - if (!fallbackWorkerSrc && (typeof document === "undefined" ? "undefined" : _typeof(document)) === 'object' && 'currentScript' in document) { - var extracthighlightsFilePath = document.currentScript && document.currentScript.src; - - if (extracthighlightsFilePath) { - fallbackWorkerSrc = extracthighlightsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, '.worker$1$2'); - } - } - } - var createPDFNetworkStream; - - function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) { - createPDFNetworkStream = pdfNetworkStreamFactory; - } - - function getDocument(src) { - var task = new PDFDocumentLoadingTask(); - var source; - - if (typeof src === 'string') { - source = { - url: src - }; - } else if ((0, _util.isArrayBuffer)(src)) { - source = { - data: src - }; - } else if (src instanceof PDFDataRangeTransport) { - source = { - range: src - }; - } else { - if (_typeof(src) !== 'object') { - throw new Error('Invalid parameter in getDocument, ' + 'need either Uint8Array, string or a parameter object'); - } - - if (!src.url && !src.data && !src.range) { - throw new Error('Invalid parameter object: need either .data, .range or .url'); - } - - source = src; - } - - var params = Object.create(null); - var rangeTransport = null, - worker = null; - - for (var key in source) { - if (key === 'url' && typeof window !== 'undefined') { - params[key] = new _util.URL(source[key], window.location).href; - continue; - } else if (key === 'range') { - rangeTransport = source[key]; - continue; - } else if (key === 'worker') { - worker = source[key]; - continue; - } else if (key === 'data' && !(source[key] instanceof Uint8Array)) { - var pdfBytes = source[key]; - - if (typeof pdfBytes === 'string') { - params[key] = (0, _util.stringToBytes)(pdfBytes); - } else if (_typeof(pdfBytes) === 'object' && pdfBytes !== null && !isNaN(pdfBytes.length)) { - params[key] = new Uint8Array(pdfBytes); - } else if ((0, _util.isArrayBuffer)(pdfBytes)) { - params[key] = new Uint8Array(pdfBytes); - } else { - throw new Error('Invalid PDF binary data: either typed array, ' + 'string or array-like object is expected in the ' + 'data property.'); - } - - continue; - } - - params[key] = source[key]; - } - - params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE; - params.CMapReaderFactory = params.CMapReaderFactory || _dom_utils.DOMCMapReaderFactory; - params.ignoreErrors = params.stopAtErrors !== true; - params.pdfBug = params.pdfBug === true; - var NativeImageDecoderValues = Object.values(_util.NativeImageDecoding); - - if (params.nativeImageDecoderSupport === undefined || !NativeImageDecoderValues.includes(params.nativeImageDecoderSupport)) { - params.nativeImageDecoderSupport = _api_compatibility.apiCompatibilityParams.nativeImageDecoderSupport || _util.NativeImageDecoding.DECODE; - } - - if (!Number.isInteger(params.maxImageSize)) { - params.maxImageSize = -1; - } - - if (typeof params.isEvalSupported !== 'boolean') { - params.isEvalSupported = true; - } - - if (typeof params.disableFontFace !== 'boolean') { - params.disableFontFace = _api_compatibility.apiCompatibilityParams.disableFontFace || false; - } - - if (typeof params.disableRange !== 'boolean') { - params.disableRange = false; - } - - if (typeof params.disableStream !== 'boolean') { - params.disableStream = false; - } - - if (typeof params.disableAutoFetch !== 'boolean') { - params.disableAutoFetch = false; - } - - if (typeof params.disableCreateObjectURL !== 'boolean') { - params.disableCreateObjectURL = _api_compatibility.apiCompatibilityParams.disableCreateObjectURL || false; - } - - (0, _util.setVerbosityLevel)(params.verbosity); - - if (!worker) { - var workerParams = { - postMessageTransfers: params.postMessageTransfers, - verbosity: params.verbosity, - port: _worker_options.GlobalWorkerOptions.workerPort - }; - worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams); - task._worker = worker; - } - - var docId = task.docId; - worker.promise.then(function () { - if (task.destroyed) { - throw new Error('Loading aborted'); - } - - return _fetchDocument(worker, params, rangeTransport, docId).then(function (workerId) { - if (task.destroyed) { - throw new Error('Loading aborted'); - } - - var networkStream; - - if (rangeTransport) { - networkStream = new _transport_stream.PDFDataTransportStream({ - length: params.length, - initialData: params.initialData, - disableRange: params.disableRange, - disableStream: params.disableStream - }, rangeTransport); - } else if (!params.data) { - networkStream = createPDFNetworkStream({ - url: params.url, - length: params.length, - httpHeaders: params.httpHeaders, - withCredentials: params.withCredentials, - rangeChunkSize: params.rangeChunkSize, - disableRange: params.disableRange, - disableStream: params.disableStream - }); - } - - var messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port); - messageHandler.postMessageTransfers = worker.postMessageTransfers; - var transport = new WorkerTransport(messageHandler, task, networkStream, params); - task._transport = transport; - messageHandler.send('Ready', null); - }); - }).catch(task._capability.reject); - return task; - } - - function _fetchDocument(worker, source, pdfDataRangeTransport, docId) { - if (worker.destroyed) { - return Promise.reject(new Error('Worker was destroyed')); - } - - if (pdfDataRangeTransport) { - source.length = pdfDataRangeTransport.length; - source.initialData = pdfDataRangeTransport.initialData; - } - - return worker.messageHandler.sendWithPromise('GetDocRequest', { - docId: docId, - apiVersion: '2.1.266', - source: { - data: source.data, - url: source.url, - password: source.password, - disableAutoFetch: source.disableAutoFetch, - rangeChunkSize: source.rangeChunkSize, - length: source.length - }, - maxImageSize: source.maxImageSize, - disableFontFace: source.disableFontFace, - disableCreateObjectURL: source.disableCreateObjectURL, - postMessageTransfers: worker.postMessageTransfers, - docBaseUrl: source.docBaseUrl, - nativeImageDecoderSupport: source.nativeImageDecoderSupport, - ignoreErrors: source.ignoreErrors, - isEvalSupported: source.isEvalSupported - }).then(function (workerId) { - if (worker.destroyed) { - throw new Error('Worker was destroyed'); - } - - return workerId; - }); - } - - var PDFDocumentLoadingTask = function PDFDocumentLoadingTaskClosure() { - var nextDocumentId = 0; - - var PDFDocumentLoadingTask = - /*#__PURE__*/ - function () { - function PDFDocumentLoadingTask() { - _classCallCheck(this, PDFDocumentLoadingTask); - - this._capability = (0, _util.createPromiseCapability)(); - this._transport = null; - this._worker = null; - this.docId = 'd' + nextDocumentId++; - this.destroyed = false; - this.onPassword = null; - this.onProgress = null; - this.onUnsupportedFeature = null; - } - - _createClass(PDFDocumentLoadingTask, [{ - key: "destroy", - value: function destroy() { - var _this = this; - - this.destroyed = true; - var transportDestroyed = !this._transport ? Promise.resolve() : this._transport.destroy(); - return transportDestroyed.then(function () { - _this._transport = null; - - if (_this._worker) { - _this._worker.destroy(); - - _this._worker = null; - } - }); - } - }, { - key: "then", - value: function then(onFulfilled, onRejected) { - (0, _util.deprecated)('PDFDocumentLoadingTask.then method, ' + 'use the `promise` getter instead.'); - return this.promise.then.apply(this.promise, arguments); - } - }, { - key: "promise", - get: function get() { - return this._capability.promise; - } - }]); - - return PDFDocumentLoadingTask; - }(); - - return PDFDocumentLoadingTask; - }(); - - var PDFDataRangeTransport = - /*#__PURE__*/ - function () { - function PDFDataRangeTransport(length, initialData) { - _classCallCheck(this, PDFDataRangeTransport); - - this.length = length; - this.initialData = initialData; - this._rangeListeners = []; - this._progressListeners = []; - this._progressiveReadListeners = []; - this._readyCapability = (0, _util.createPromiseCapability)(); - } - - _createClass(PDFDataRangeTransport, [{ - key: "addRangeListener", - value: function addRangeListener(listener) { - this._rangeListeners.push(listener); - } - }, { - key: "addProgressListener", - value: function addProgressListener(listener) { - this._progressListeners.push(listener); - } - }, { - key: "addProgressiveReadListener", - value: function addProgressiveReadListener(listener) { - this._progressiveReadListeners.push(listener); - } - }, { - key: "onDataRange", - value: function onDataRange(begin, chunk) { - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = this._rangeListeners[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var listener = _step.value; - listener(begin, chunk); - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return != null) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - } - }, { - key: "onDataProgress", - value: function onDataProgress(loaded) { - var _this2 = this; - - this._readyCapability.promise.then(function () { - var _iteratorNormalCompletion2 = true; - var _didIteratorError2 = false; - var _iteratorError2 = undefined; - - try { - for (var _iterator2 = _this2._progressListeners[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { - var listener = _step2.value; - listener(loaded); - } - } catch (err) { - _didIteratorError2 = true; - _iteratorError2 = err; - } finally { - try { - if (!_iteratorNormalCompletion2 && _iterator2.return != null) { - _iterator2.return(); - } - } finally { - if (_didIteratorError2) { - throw _iteratorError2; - } - } - } - }); - } - }, { - key: "onDataProgressiveRead", - value: function onDataProgressiveRead(chunk) { - var _this3 = this; - - this._readyCapability.promise.then(function () { - var _iteratorNormalCompletion3 = true; - var _didIteratorError3 = false; - var _iteratorError3 = undefined; - - try { - for (var _iterator3 = _this3._progressiveReadListeners[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { - var listener = _step3.value; - listener(chunk); - } - } catch (err) { - _didIteratorError3 = true; - _iteratorError3 = err; - } finally { - try { - if (!_iteratorNormalCompletion3 && _iterator3.return != null) { - _iterator3.return(); - } - } finally { - if (_didIteratorError3) { - throw _iteratorError3; - } - } - } - }); - } - }, { - key: "transportReady", - value: function transportReady() { - this._readyCapability.resolve(); - } - }, { - key: "requestDataRange", - value: function requestDataRange(begin, end) { - (0, _util.unreachable)('Abstract method PDFDataRangeTransport.requestDataRange'); - } - }, { - key: "abort", - value: function abort() {} - }]); - - return PDFDataRangeTransport; - }(); - - exports.PDFDataRangeTransport = PDFDataRangeTransport; - - var PDFDocumentProxy = - /*#__PURE__*/ - function () { - function PDFDocumentProxy(pdfInfo, transport, loadingTask) { - _classCallCheck(this, PDFDocumentProxy); - - this.loadingTask = loadingTask; - this._pdfInfo = pdfInfo; - this._transport = transport; - } - - _createClass(PDFDocumentProxy, [{ - key: "getPage", - value: function getPage(pageNumber) { - return this._transport.getPage(pageNumber); - } - }, { - key: "getPageIndex", - value: function getPageIndex(ref) { - return this._transport.getPageIndex(ref); - } - }, { - key: "getDestinations", - value: function getDestinations() { - return this._transport.getDestinations(); - } - }, { - key: "getDestination", - value: function getDestination(id) { - return this._transport.getDestination(id); - } - }, { - key: "getPageLabels", - value: function getPageLabels() { - return this._transport.getPageLabels(); - } - }, { - key: "getPageMode", - value: function getPageMode() { - return this._transport.getPageMode(); - } - }, { - key: "getOpenActionDestination", - value: function getOpenActionDestination() { - return this._transport.getOpenActionDestination(); - } - }, { - key: "getAttachments", - value: function getAttachments() { - return this._transport.getAttachments(); - } - }, { - key: "getJavaScript", - value: function getJavaScript() { - return this._transport.getJavaScript(); - } - }, { - key: "getOutline", - value: function getOutline() { - return this._transport.getOutline(); - } - }, { - key: "getPermissions", - value: function getPermissions() { - return this._transport.getPermissions(); - } - }, { - key: "getMetadata", - value: function getMetadata() { - return this._transport.getMetadata(); - } - }, { - key: "getData", - value: function getData() { - return this._transport.getData(); - } - }, { - key: "getDownloadInfo", - value: function getDownloadInfo() { - return this._transport.downloadInfoCapability.promise; - } - }, { - key: "getStats", - value: function getStats() { - return this._transport.getStats(); - } - }, { - key: "cleanup", - value: function cleanup() { - this._transport.startCleanup(); - } - }, { - key: "destroy", - value: function destroy() { - return this.loadingTask.destroy(); - } - }, { - key: "numPages", - get: function get() { - return this._pdfInfo.numPages; - } - }, { - key: "fingerprint", - get: function get() { - return this._pdfInfo.fingerprint; - } - }, { - key: "loadingParams", - get: function get() { - return this._transport.loadingParams; - } - }]); - - return PDFDocumentProxy; - }(); - - exports.PDFDocumentProxy = PDFDocumentProxy; - - var PDFPageProxy = - /*#__PURE__*/ - function () { - function PDFPageProxy(pageIndex, pageInfo, transport) { - var pdfBug = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - - _classCallCheck(this, PDFPageProxy); - - this.pageIndex = pageIndex; - this._pageInfo = pageInfo; - this._transport = transport; - this._stats = pdfBug ? new _dom_utils.StatTimer() : _dom_utils.DummyStatTimer; - this._pdfBug = pdfBug; - this.commonObjs = transport.commonObjs; - this.objs = new PDFObjects(); - this.cleanupAfterRender = false; - this.pendingCleanup = false; - this.intentStates = Object.create(null); - this.destroyed = false; - } - - _createClass(PDFPageProxy, [{ - key: "getViewport", - value: function getViewport() { - var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - scale = _ref.scale, - _ref$rotation = _ref.rotation, - rotation = _ref$rotation === void 0 ? this.rotate : _ref$rotation, - _ref$dontFlip = _ref.dontFlip, - dontFlip = _ref$dontFlip === void 0 ? false : _ref$dontFlip; - - if (arguments.length > 1 || typeof arguments[0] === 'number') { - (0, _util.deprecated)('getViewport is called with obsolete arguments.'); - scale = arguments[0]; - rotation = typeof arguments[1] === 'number' ? arguments[1] : this.rotate; - dontFlip = typeof arguments[2] === 'boolean' ? arguments[2] : false; - } - - return new _dom_utils.PageViewport({ - viewBox: this.view, - scale: scale, - rotation: rotation, - dontFlip: dontFlip - }); - } - }, { - key: "getAnnotations", - value: function getAnnotations() { - var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - _ref2$intent = _ref2.intent, - intent = _ref2$intent === void 0 ? null : _ref2$intent; - - if (!this.annotationsPromise || this.annotationsIntent !== intent) { - this.annotationsPromise = this._transport.getAnnotations(this.pageIndex, intent); - this.annotationsIntent = intent; - } - - return this.annotationsPromise; - } - }, { - key: "render", - value: function render(_ref3, annotations) { - var _this4 = this; - - var canvasContext = _ref3.canvasContext, - viewport = _ref3.viewport, - _ref3$intent = _ref3.intent, - intent = _ref3$intent === void 0 ? 'display' : _ref3$intent, - _ref3$enableWebGL = _ref3.enableWebGL, - enableWebGL = _ref3$enableWebGL === void 0 ? false : _ref3$enableWebGL, - _ref3$renderInteracti = _ref3.renderInteractiveForms, - renderInteractiveForms = _ref3$renderInteracti === void 0 ? false : _ref3$renderInteracti, - _ref3$transform = _ref3.transform, - transform = _ref3$transform === void 0 ? null : _ref3$transform, - _ref3$imageLayer = _ref3.imageLayer, - imageLayer = _ref3$imageLayer === void 0 ? null : _ref3$imageLayer, - _ref3$canvasFactory = _ref3.canvasFactory, - canvasFactory = _ref3$canvasFactory === void 0 ? null : _ref3$canvasFactory, - _ref3$background = _ref3.background, - background = _ref3$background === void 0 ? null : _ref3$background; - var stats = this._stats; - stats.time('Overall'); - this.pendingCleanup = false; - var renderingIntent = intent === 'print' ? 'print' : 'display'; - var canvasFactoryInstance = canvasFactory || new _dom_utils.DOMCanvasFactory(); - var webGLContext = new _webgl.WebGLContext({ - enable: enableWebGL - }); - - if (!this.intentStates[renderingIntent]) { - this.intentStates[renderingIntent] = Object.create(null); - } - - var intentState = this.intentStates[renderingIntent]; - - if (!intentState.displayReadyCapability) { - intentState.receivingOperatorList = true; - intentState.displayReadyCapability = (0, _util.createPromiseCapability)(); - intentState.operatorList = { - fnArray: [], - argsArray: [], - lastChunk: false - }; - stats.time('Page Request'); - - this._transport.messageHandler.send('RenderPageRequest', { - pageIndex: this.pageNumber - 1, - intent: renderingIntent, - renderInteractiveForms: renderInteractiveForms === true - }); - } - - var complete = function complete(error) { - var i = intentState.renderTasks.indexOf(internalRenderTask); - - if (i >= 0) { - intentState.renderTasks.splice(i, 1); - } - - if (_this4.cleanupAfterRender) { - _this4.pendingCleanup = true; - } - - _this4._tryCleanup(); - - if (error) { - internalRenderTask.capability.reject(error); - } else { - internalRenderTask.capability.resolve(); - } - - stats.timeEnd('Rendering'); - stats.timeEnd('Overall'); - }; - - var internalRenderTask = new InternalRenderTask({ - callback: complete, - params: { - canvasContext: canvasContext, - viewport: viewport, - transform: transform, - imageLayer: imageLayer, - background: background - }, - objs: this.objs, - commonObjs: this.commonObjs, - operatorList: intentState.operatorList, - pageNumber: this.pageNumber, - canvasFactory: canvasFactoryInstance, - webGLContext: webGLContext, - useRequestAnimationFrame: renderingIntent !== 'print', - pdfBug: this._pdfBug, - annotations - }); - - if (!intentState.renderTasks) { - intentState.renderTasks = []; - } - - intentState.renderTasks.push(internalRenderTask); - var renderTask = internalRenderTask.task; - intentState.displayReadyCapability.promise.then(function (transparency) { - if (_this4.pendingCleanup) { - complete(); - return; - } - - stats.time('Rendering'); - internalRenderTask.initializeGraphics(transparency); - internalRenderTask.operatorListChanged(); - }).catch(complete); - return renderTask; - } - }, { - key: "getOperatorList", - value: function getOperatorList() { - function operatorListChanged() { - if (intentState.operatorList.lastChunk) { - intentState.opListReadCapability.resolve(intentState.operatorList); - var i = intentState.renderTasks.indexOf(opListTask); - - if (i >= 0) { - intentState.renderTasks.splice(i, 1); - } - } - } - - var renderingIntent = 'oplist'; - - if (!this.intentStates[renderingIntent]) { - this.intentStates[renderingIntent] = Object.create(null); - } - - var intentState = this.intentStates[renderingIntent]; - var opListTask; - - if (!intentState.opListReadCapability) { - opListTask = {}; - opListTask.operatorListChanged = operatorListChanged; - intentState.receivingOperatorList = true; - intentState.opListReadCapability = (0, _util.createPromiseCapability)(); - intentState.renderTasks = []; - intentState.renderTasks.push(opListTask); - intentState.operatorList = { - fnArray: [], - argsArray: [], - lastChunk: false - }; - - this._stats.time('Page Request'); - - this._transport.messageHandler.send('RenderPageRequest', { - pageIndex: this.pageIndex, - intent: renderingIntent - }); - } - - return intentState.opListReadCapability.promise; - } - }, { - key: "streamTextContent", - value: function streamTextContent() { - var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - _ref4$normalizeWhites = _ref4.normalizeWhitespace, - normalizeWhitespace = _ref4$normalizeWhites === void 0 ? false : _ref4$normalizeWhites, - _ref4$disableCombineT = _ref4.disableCombineTextItems, - disableCombineTextItems = _ref4$disableCombineT === void 0 ? false : _ref4$disableCombineT; - - var TEXT_CONTENT_CHUNK_SIZE = 100; - return this._transport.messageHandler.sendWithStream('GetTextContent', { - pageIndex: this.pageNumber - 1, - normalizeWhitespace: normalizeWhitespace === true, - combineTextItems: disableCombineTextItems !== true - }, { - highWaterMark: TEXT_CONTENT_CHUNK_SIZE, - size: function size(textContent) { - return textContent.items.length; - } - }); - } - }, { - key: "getTextContent", - value: function getTextContent() { - var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var readableStream = this.streamTextContent(params); - return new Promise(function (resolve, reject) { - function pump() { - reader.read().then(function (_ref5) { - var _textContent$items; - - var value = _ref5.value, - done = _ref5.done; - - if (done) { - resolve(textContent); - return; - } - - Object.assign(textContent.styles, value.styles); - - (_textContent$items = textContent.items).push.apply(_textContent$items, _toConsumableArray(value.items)); - - pump(); - }, reject); - } - - var reader = readableStream.getReader(); - var textContent = { - items: [], - styles: Object.create(null) - }; - pump(); - }); - } - }, { - key: "_destroy", - value: function _destroy() { - this.destroyed = true; - this._transport.pageCache[this.pageIndex] = null; - var waitOn = []; - Object.keys(this.intentStates).forEach(function (intent) { - if (intent === 'oplist') { - return; - } - - var intentState = this.intentStates[intent]; - intentState.renderTasks.forEach(function (renderTask) { - var renderCompleted = renderTask.capability.promise.catch(function () {}); - waitOn.push(renderCompleted); - renderTask.cancel(); - }); - }, this); - this.objs.clear(); - this.annotationsPromise = null; - this.pendingCleanup = false; - return Promise.all(waitOn); - } - }, { - key: "cleanup", - value: function cleanup() { - var resetStats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - this.pendingCleanup = true; - - this._tryCleanup(resetStats); - } - }, { - key: "_tryCleanup", - value: function _tryCleanup() { - var resetStats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - if (!this.pendingCleanup || Object.keys(this.intentStates).some(function (intent) { - var intentState = this.intentStates[intent]; - return intentState.renderTasks.length !== 0 || intentState.receivingOperatorList; - }, this)) { - return; - } - - Object.keys(this.intentStates).forEach(function (intent) { - delete this.intentStates[intent]; - }, this); - this.objs.clear(); - this.annotationsPromise = null; - - if (resetStats && this._stats instanceof _dom_utils.StatTimer) { - this._stats = new _dom_utils.StatTimer(); - } - - this.pendingCleanup = false; - } - }, { - key: "_startRenderPage", - value: function _startRenderPage(transparency, intent) { - var intentState = this.intentStates[intent]; - - if (intentState.displayReadyCapability) { - intentState.displayReadyCapability.resolve(transparency); - } - } - }, { - key: "_renderPageChunk", - value: function _renderPageChunk(operatorListChunk, intent) { - var intentState = this.intentStates[intent]; - - for (var i = 0, ii = operatorListChunk.length; i < ii; i++) { - intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]); - intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]); - } - - intentState.operatorList.lastChunk = operatorListChunk.lastChunk; - - for (var _i = 0; _i < intentState.renderTasks.length; _i++) { - intentState.renderTasks[_i].operatorListChanged(); - } - - if (operatorListChunk.lastChunk) { - intentState.receivingOperatorList = false; - - this._tryCleanup(); - } - } - }, { - key: "pageNumber", - get: function get() { - return this.pageIndex + 1; - } - }, { - key: "rotate", - get: function get() { - return this._pageInfo.rotate; - } - }, { - key: "ref", - get: function get() { - return this._pageInfo.ref; - } - }, { - key: "userUnit", - get: function get() { - return this._pageInfo.userUnit; - } - }, { - key: "view", - get: function get() { - return this._pageInfo.view; - } - }, { - key: "stats", - get: function get() { - return this._stats instanceof _dom_utils.StatTimer ? this._stats : null; - } - }]); - - return PDFPageProxy; - }(); - - exports.PDFPageProxy = PDFPageProxy; - - var LoopbackPort = - /*#__PURE__*/ - function () { - function LoopbackPort() { - var defer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; - - _classCallCheck(this, LoopbackPort); - - this._listeners = []; - this._defer = defer; - this._deferred = Promise.resolve(undefined); - } - - _createClass(LoopbackPort, [{ - key: "postMessage", - value: function postMessage(obj, transfers) { - var _this5 = this; - - function cloneValue(value) { - if (_typeof(value) !== 'object' || value === null) { - return value; - } - - if (cloned.has(value)) { - return cloned.get(value); - } - - var buffer, result; - - if ((buffer = value.buffer) && (0, _util.isArrayBuffer)(buffer)) { - var transferable = transfers && transfers.includes(buffer); - - if (value === buffer) { - result = value; - } else if (transferable) { - result = new value.constructor(buffer, value.byteOffset, value.byteLength); - } else { - result = new value.constructor(value); - } - - cloned.set(value, result); - return result; - } - - result = Array.isArray(value) ? [] : {}; - cloned.set(value, result); - - for (var i in value) { - var desc = void 0, - p = value; - - while (!(desc = Object.getOwnPropertyDescriptor(p, i))) { - p = Object.getPrototypeOf(p); - } - - if (typeof desc.value === 'undefined' || typeof desc.value === 'function') { - continue; - } - - result[i] = cloneValue(desc.value); - } - - return result; - } - - if (!this._defer) { - this._listeners.forEach(function (listener) { - listener.call(this, { - data: obj - }); - }, this); - - return; - } - - var cloned = new WeakMap(); - var e = { - data: cloneValue(obj) - }; - - this._deferred.then(function () { - _this5._listeners.forEach(function (listener) { - listener.call(this, e); - }, _this5); - }); - } - }, { - key: "addEventListener", - value: function addEventListener(name, listener) { - this._listeners.push(listener); - } - }, { - key: "removeEventListener", - value: function removeEventListener(name, listener) { - var i = this._listeners.indexOf(listener); - - this._listeners.splice(i, 1); - } - }, { - key: "terminate", - value: function terminate() { - this._listeners = []; - } - }]); - - return LoopbackPort; - }(); - - exports.LoopbackPort = LoopbackPort; - - var PDFWorker = function PDFWorkerClosure() { - var pdfWorkerPorts = new WeakMap(); - var nextFakeWorkerId = 0; - var fakeWorkerFilesLoadedCapability; - - function _getWorkerSrc() { - if (_worker_options.GlobalWorkerOptions.workerSrc) { - return _worker_options.GlobalWorkerOptions.workerSrc; - } - - if (typeof fallbackWorkerSrc !== 'undefined') { - return fallbackWorkerSrc; - } - - throw new Error('No "GlobalWorkerOptions.workerSrc" specified.'); - } - - function getMainThreadWorkerMessageHandler() { - try { - if (typeof window !== 'undefined') { - return window.extracthighlightsWorker && window.extracthighlightsWorker.WorkerMessageHandler; - } - } catch (ex) {} - - return null; - } - - function setupFakeWorkerGlobal() { - if (fakeWorkerFilesLoadedCapability) { - return fakeWorkerFilesLoadedCapability.promise; - } - - fakeWorkerFilesLoadedCapability = (0, _util.createPromiseCapability)(); - var mainWorkerMessageHandler = getMainThreadWorkerMessageHandler(); - - if (mainWorkerMessageHandler) { - fakeWorkerFilesLoadedCapability.resolve(mainWorkerMessageHandler); - return fakeWorkerFilesLoadedCapability.promise; - } - - var loader = fakeWorkerFilesLoader || function () { - return (0, _dom_utils.loadScript)(_getWorkerSrc()).then(function () { - return window.extracthighlightsWorker.WorkerMessageHandler; - }); - }; - - loader().then(fakeWorkerFilesLoadedCapability.resolve, fakeWorkerFilesLoadedCapability.reject); - return fakeWorkerFilesLoadedCapability.promise; - } - - function createCDNWrapper(url) { - var wrapper = 'importScripts(\'' + url + '\');'; - return _util.URL.createObjectURL(new Blob([wrapper])); - } - - var PDFWorker = - /*#__PURE__*/ - function () { - function PDFWorker() { - var _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - _ref6$name = _ref6.name, - name = _ref6$name === void 0 ? null : _ref6$name, - _ref6$port = _ref6.port, - port = _ref6$port === void 0 ? null : _ref6$port, - _ref6$postMessageTran = _ref6.postMessageTransfers, - postMessageTransfers = _ref6$postMessageTran === void 0 ? true : _ref6$postMessageTran, - _ref6$verbosity = _ref6.verbosity, - verbosity = _ref6$verbosity === void 0 ? (0, _util.getVerbosityLevel)() : _ref6$verbosity; - - _classCallCheck(this, PDFWorker); - - if (port && pdfWorkerPorts.has(port)) { - throw new Error('Cannot use more than one PDFWorker per port'); - } - - this.name = name; - this.destroyed = false; - this.postMessageTransfers = postMessageTransfers !== false; - this.verbosity = verbosity; - this._readyCapability = (0, _util.createPromiseCapability)(); - this._port = null; - this._webWorker = null; - this._messageHandler = null; - - if (port) { - pdfWorkerPorts.set(port, this); - - this._initializeFromPort(port); - - return; - } - - this._initialize(); - } - - _createClass(PDFWorker, [{ - key: "_initializeFromPort", - value: function _initializeFromPort(port) { - this._port = port; - this._messageHandler = new _message_handler.MessageHandler('main', 'worker', port); - - this._messageHandler.on('ready', function () {}); - - this._readyCapability.resolve(); - } - }, { - key: "_initialize", - value: function _initialize() { - var _this6 = this; - - if (typeof Worker !== 'undefined' && !isWorkerDisabled && !getMainThreadWorkerMessageHandler()) { - var workerSrc = _getWorkerSrc(); - - try { - if (!(0, _util.isSameOrigin)(window.location.href, workerSrc)) { - workerSrc = createCDNWrapper(new _util.URL(workerSrc, window.location).href); - } - - var worker = new Worker(workerSrc); - var messageHandler = new _message_handler.MessageHandler('main', 'worker', worker); - - var terminateEarly = function terminateEarly() { - worker.removeEventListener('error', onWorkerError); - messageHandler.destroy(); - worker.terminate(); - - if (_this6.destroyed) { - _this6._readyCapability.reject(new Error('Worker was destroyed')); - } else { - _this6._setupFakeWorker(); - } - }; - - var onWorkerError = function onWorkerError() { - if (!_this6._webWorker) { - terminateEarly(); - } - }; - - worker.addEventListener('error', onWorkerError); - messageHandler.on('test', function (data) { - worker.removeEventListener('error', onWorkerError); - - if (_this6.destroyed) { - terminateEarly(); - return; - } - - if (data && data.supportTypedArray) { - _this6._messageHandler = messageHandler; - _this6._port = worker; - _this6._webWorker = worker; - - if (!data.supportTransfers) { - _this6.postMessageTransfers = false; - } - - _this6._readyCapability.resolve(); - - messageHandler.send('configure', { - verbosity: _this6.verbosity - }); - } else { - _this6._setupFakeWorker(); - - messageHandler.destroy(); - worker.terminate(); - } - }); - messageHandler.on('ready', function (data) { - worker.removeEventListener('error', onWorkerError); - - if (_this6.destroyed) { - terminateEarly(); - return; - } - - try { - sendTest(); - } catch (e) { - _this6._setupFakeWorker(); - } - }); - - var sendTest = function sendTest() { - var testObj = new Uint8Array([_this6.postMessageTransfers ? 255 : 0]); - - try { - messageHandler.send('test', testObj, [testObj.buffer]); - } catch (ex) { - (0, _util.info)('Cannot use postMessage transfers'); - testObj[0] = 0; - messageHandler.send('test', testObj); - } - }; - - sendTest(); - return; - } catch (e) { - (0, _util.info)('The worker has been disabled.'); - } - } - - this._setupFakeWorker(); - } - }, { - key: "_setupFakeWorker", - value: function _setupFakeWorker() { - var _this7 = this; - - if (!isWorkerDisabled) { - (0, _util.warn)('Setting up fake worker.'); - isWorkerDisabled = true; - } - - setupFakeWorkerGlobal().then(function (WorkerMessageHandler) { - if (_this7.destroyed) { - _this7._readyCapability.reject(new Error('Worker was destroyed')); - - return; - } - - var port = new LoopbackPort(); - _this7._port = port; - var id = 'fake' + nextFakeWorkerId++; - var workerHandler = new _message_handler.MessageHandler(id + '_worker', id, port); - WorkerMessageHandler.setup(workerHandler, port); - var messageHandler = new _message_handler.MessageHandler(id, id + '_worker', port); - _this7._messageHandler = messageHandler; - - _this7._readyCapability.resolve(); - }).catch(function (reason) { - _this7._readyCapability.reject(new Error("Setting up fake worker failed: \"".concat(reason.message, "\"."))); - }); - } - }, { - key: "destroy", - value: function destroy() { - this.destroyed = true; - - if (this._webWorker) { - this._webWorker.terminate(); - - this._webWorker = null; - } - - pdfWorkerPorts.delete(this._port); - this._port = null; - - if (this._messageHandler) { - this._messageHandler.destroy(); - - this._messageHandler = null; - } - } - }, { - key: "promise", - get: function get() { - return this._readyCapability.promise; - } - }, { - key: "port", - get: function get() { - return this._port; - } - }, { - key: "messageHandler", - get: function get() { - return this._messageHandler; - } - }], [{ - key: "fromPort", - value: function fromPort(params) { - if (!params || !params.port) { - throw new Error('PDFWorker.fromPort - invalid method signature.'); - } - - if (pdfWorkerPorts.has(params.port)) { - return pdfWorkerPorts.get(params.port); - } - - return new PDFWorker(params); - } - }, { - key: "getWorkerSrc", - value: function getWorkerSrc() { - return _getWorkerSrc(); - } - }]); - - return PDFWorker; - }(); - - return PDFWorker; - }(); - - exports.PDFWorker = PDFWorker; - - var WorkerTransport = - /*#__PURE__*/ - function () { - function WorkerTransport(messageHandler, loadingTask, networkStream, params) { - _classCallCheck(this, WorkerTransport); - - this.messageHandler = messageHandler; - this.loadingTask = loadingTask; - this.commonObjs = new PDFObjects(); - this.fontLoader = new _font_loader.FontLoader({ - docId: loadingTask.docId, - onUnsupportedFeature: this._onUnsupportedFeature.bind(this) - }); - this._params = params; - this.CMapReaderFactory = new params.CMapReaderFactory({ - baseUrl: params.cMapUrl, - isCompressed: params.cMapPacked - }); - this.destroyed = false; - this.destroyCapability = null; - this._passwordCapability = null; - this._networkStream = networkStream; - this._fullReader = null; - this._lastProgress = null; - this.pageCache = []; - this.pagePromises = []; - this.downloadInfoCapability = (0, _util.createPromiseCapability)(); - this.setupMessageHandler(); - } - - _createClass(WorkerTransport, [{ - key: "destroy", - value: function destroy() { - var _this8 = this; - - if (this.destroyCapability) { - return this.destroyCapability.promise; - } - - this.destroyed = true; - this.destroyCapability = (0, _util.createPromiseCapability)(); - - if (this._passwordCapability) { - this._passwordCapability.reject(new Error('Worker was destroyed during onPassword callback')); - } - - var waitOn = []; - this.pageCache.forEach(function (page) { - if (page) { - waitOn.push(page._destroy()); - } - }); - this.pageCache = []; - this.pagePromises = []; - var terminated = this.messageHandler.sendWithPromise('Terminate', null); - waitOn.push(terminated); - Promise.all(waitOn).then(function () { - _this8.fontLoader.clear(); - - if (_this8._networkStream) { - _this8._networkStream.cancelAllRequests(); - } - - if (_this8.messageHandler) { - _this8.messageHandler.destroy(); - - _this8.messageHandler = null; - } - - _this8.destroyCapability.resolve(); - }, this.destroyCapability.reject); - return this.destroyCapability.promise; - } - }, { - key: "setupMessageHandler", - value: function setupMessageHandler() { - var messageHandler = this.messageHandler, - loadingTask = this.loadingTask; - messageHandler.on('GetReader', function (data, sink) { - var _this9 = this; - - (0, _util.assert)(this._networkStream); - this._fullReader = this._networkStream.getFullReader(); - - this._fullReader.onProgress = function (evt) { - _this9._lastProgress = { - loaded: evt.loaded, - total: evt.total - }; - }; - - sink.onPull = function () { - _this9._fullReader.read().then(function (_ref7) { - var value = _ref7.value, - done = _ref7.done; - - if (done) { - sink.close(); - return; - } - - (0, _util.assert)((0, _util.isArrayBuffer)(value)); - sink.enqueue(new Uint8Array(value), 1, [value]); - }).catch(function (reason) { - sink.error(reason); - }); - }; - - sink.onCancel = function (reason) { - _this9._fullReader.cancel(reason); - }; - }, this); - messageHandler.on('ReaderHeadersReady', function (data) { - var _this10 = this; - - var headersCapability = (0, _util.createPromiseCapability)(); - var fullReader = this._fullReader; - fullReader.headersReady.then(function () { - if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) { - if (_this10._lastProgress && loadingTask.onProgress) { - loadingTask.onProgress(_this10._lastProgress); - } - - fullReader.onProgress = function (evt) { - if (loadingTask.onProgress) { - loadingTask.onProgress({ - loaded: evt.loaded, - total: evt.total - }); - } - }; - } - - headersCapability.resolve({ - isStreamingSupported: fullReader.isStreamingSupported, - isRangeSupported: fullReader.isRangeSupported, - contentLength: fullReader.contentLength - }); - }, headersCapability.reject); - return headersCapability.promise; - }, this); - messageHandler.on('GetRangeReader', function (data, sink) { - (0, _util.assert)(this._networkStream); - - var rangeReader = this._networkStream.getRangeReader(data.begin, data.end); - - sink.onPull = function () { - rangeReader.read().then(function (_ref8) { - var value = _ref8.value, - done = _ref8.done; - - if (done) { - sink.close(); - return; - } - - (0, _util.assert)((0, _util.isArrayBuffer)(value)); - sink.enqueue(new Uint8Array(value), 1, [value]); - }).catch(function (reason) { - sink.error(reason); - }); - }; - - sink.onCancel = function (reason) { - rangeReader.cancel(reason); - }; - }, this); - messageHandler.on('GetDoc', function (_ref9) { - var pdfInfo = _ref9.pdfInfo; - this.numPages = pdfInfo.numPages; - this.pdfDocument = new PDFDocumentProxy(pdfInfo, this, loadingTask); - - loadingTask._capability.resolve(this.pdfDocument); - }, this); - messageHandler.on('PasswordRequest', function (exception) { - var _this11 = this; - - this._passwordCapability = (0, _util.createPromiseCapability)(); - - if (loadingTask.onPassword) { - var updatePassword = function updatePassword(password) { - _this11._passwordCapability.resolve({ - password: password - }); - }; - - try { - loadingTask.onPassword(updatePassword, exception.code); - } catch (ex) { - this._passwordCapability.reject(ex); - } - } else { - this._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code)); - } - - return this._passwordCapability.promise; - }, this); - messageHandler.on('PasswordException', function (exception) { - loadingTask._capability.reject(new _util.PasswordException(exception.message, exception.code)); - }, this); - messageHandler.on('InvalidPDF', function (exception) { - loadingTask._capability.reject(new _util.InvalidPDFException(exception.message)); - }, this); - messageHandler.on('MissingPDF', function (exception) { - loadingTask._capability.reject(new _util.MissingPDFException(exception.message)); - }, this); - messageHandler.on('UnexpectedResponse', function (exception) { - loadingTask._capability.reject(new _util.UnexpectedResponseException(exception.message, exception.status)); - }, this); - messageHandler.on('UnknownError', function (exception) { - loadingTask._capability.reject(new _util.UnknownErrorException(exception.message, exception.details)); - }, this); - messageHandler.on('DataLoaded', function (data) { - if (loadingTask.onProgress) { - loadingTask.onProgress({ - loaded: data.length, - total: data.length - }); - } - - this.downloadInfoCapability.resolve(data); - }, this); - messageHandler.on('StartRenderPage', function (data) { - if (this.destroyed) { - return; - } - - var page = this.pageCache[data.pageIndex]; - - page._stats.timeEnd('Page Request'); - - page._startRenderPage(data.transparency, data.intent); - }, this); - messageHandler.on('RenderPageChunk', function (data) { - if (this.destroyed) { - return; - } - - var page = this.pageCache[data.pageIndex]; - - page._renderPageChunk(data.operatorList, data.intent); - }, this); - messageHandler.on('commonobj', function (data) { - var _this12 = this; - - if (this.destroyed) { - return; - } - - var _data = _slicedToArray(data, 3), - id = _data[0], - type = _data[1], - exportedData = _data[2]; - - if (this.commonObjs.has(id)) { - return; - } - - switch (type) { - case 'Font': - var params = this._params; - - if ('error' in exportedData) { - var exportedError = exportedData.error; - (0, _util.warn)("Error during font loading: ".concat(exportedError)); - this.commonObjs.resolve(id, exportedError); - break; - } - - var fontRegistry = null; - - if (params.pdfBug && _global_scope.default.FontInspector && _global_scope.default.FontInspector.enabled) { - fontRegistry = { - registerFont: function registerFont(font, url) { - _global_scope.default['FontInspector'].fontAdded(font, url); - } - }; - } - - var font = new _font_loader.FontFaceObject(exportedData, { - isEvalSupported: params.isEvalSupported, - disableFontFace: params.disableFontFace, - ignoreErrors: params.ignoreErrors, - onUnsupportedFeature: this._onUnsupportedFeature.bind(this), - fontRegistry: fontRegistry - }); - this.fontLoader.bind(font).then(function () { - _this12.commonObjs.resolve(id, font); - }, function (reason) { - messageHandler.sendWithPromise('FontFallback', { - id: id - }).finally(function () { - _this12.commonObjs.resolve(id, font); - }); - }); - break; - - case 'FontPath': - this.commonObjs.resolve(id, exportedData); - break; - - default: - throw new Error("Got unknown common object type ".concat(type)); - } - }, this); - messageHandler.on('obj', function (data) { - if (this.destroyed) { - return; - } - - var _data2 = _slicedToArray(data, 4), - id = _data2[0], - pageIndex = _data2[1], - type = _data2[2], - imageData = _data2[3]; - - var pageProxy = this.pageCache[pageIndex]; - - if (pageProxy.objs.has(id)) { - return; - } - - switch (type) { - case 'JpegStream': - return new Promise(function (resolve, reject) { - var img = new Image(); - - img.onload = function () { - resolve(img); - }; - - img.onerror = function () { - reject(new Error('Error during JPEG image loading')); - }; - - img.src = imageData; - }).then(function (img) { - pageProxy.objs.resolve(id, img); - }); - - case 'Image': - pageProxy.objs.resolve(id, imageData); - var MAX_IMAGE_SIZE_TO_STORE = 8000000; - - if (imageData && 'data' in imageData && imageData.data.length > MAX_IMAGE_SIZE_TO_STORE) { - pageProxy.cleanupAfterRender = true; - } - - break; - - default: - throw new Error("Got unknown object type ".concat(type)); - } - }, this); - messageHandler.on('DocProgress', function (data) { - if (this.destroyed) { - return; - } - - if (loadingTask.onProgress) { - loadingTask.onProgress({ - loaded: data.loaded, - total: data.total - }); - } - }, this); - messageHandler.on('PageError', function (data) { - if (this.destroyed) { - return; - } - - var page = this.pageCache[data.pageNum - 1]; - var intentState = page.intentStates[data.intent]; - - if (intentState.displayReadyCapability) { - intentState.displayReadyCapability.reject(data.error); - } else { - throw new Error(data.error); - } - - if (intentState.operatorList) { - intentState.operatorList.lastChunk = true; - - for (var i = 0; i < intentState.renderTasks.length; i++) { - intentState.renderTasks[i].operatorListChanged(); - } - } - }, this); - messageHandler.on('UnsupportedFeature', this._onUnsupportedFeature, this); - messageHandler.on('JpegDecode', function (data) { - if (this.destroyed) { - return Promise.reject(new Error('Worker was destroyed')); - } - - if (typeof document === 'undefined') { - return Promise.reject(new Error('"document" is not defined.')); - } - - var _data3 = _slicedToArray(data, 2), - imageUrl = _data3[0], - components = _data3[1]; - - if (components !== 3 && components !== 1) { - return Promise.reject(new Error('Only 3 components or 1 component can be returned')); - } - - return new Promise(function (resolve, reject) { - var img = new Image(); - - img.onload = function () { - var width = img.width; - var height = img.height; - var size = width * height; - var rgbaLength = size * 4; - var buf = new Uint8ClampedArray(size * components); - var tmpCanvas = document.createElement('canvas'); - tmpCanvas.width = width; - tmpCanvas.height = height; - var tmpCtx = tmpCanvas.getContext('2d'); - tmpCtx.drawImage(img, 0, 0); - var data = tmpCtx.getImageData(0, 0, width, height).data; - - if (components === 3) { - for (var i = 0, j = 0; i < rgbaLength; i += 4, j += 3) { - buf[j] = data[i]; - buf[j + 1] = data[i + 1]; - buf[j + 2] = data[i + 2]; - } - } else if (components === 1) { - for (var _i2 = 0, _j = 0; _i2 < rgbaLength; _i2 += 4, _j++) { - buf[_j] = data[_i2]; - } - } - - resolve({ - data: buf, - width: width, - height: height - }); - }; - - img.onerror = function () { - reject(new Error('JpegDecode failed to load image')); - }; - - img.src = imageUrl; - }); - }, this); - messageHandler.on('FetchBuiltInCMap', function (data) { - if (this.destroyed) { - return Promise.reject(new Error('Worker was destroyed')); - } - - return this.CMapReaderFactory.fetch({ - name: data.name - }); - }, this); - } - }, { - key: "_onUnsupportedFeature", - value: function _onUnsupportedFeature(_ref10) { - var featureId = _ref10.featureId; - - if (this.destroyed) { - return; - } - - if (this.loadingTask.onUnsupportedFeature) { - this.loadingTask.onUnsupportedFeature(featureId); - } - } - }, { - key: "getData", - value: function getData() { - return this.messageHandler.sendWithPromise('GetData', null); - } - }, { - key: "getPage", - value: function getPage(pageNumber) { - var _this13 = this; - - if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this.numPages) { - return Promise.reject(new Error('Invalid page request')); - } - - var pageIndex = pageNumber - 1; - - if (pageIndex in this.pagePromises) { - return this.pagePromises[pageIndex]; - } - - var promise = this.messageHandler.sendWithPromise('GetPage', { - pageIndex: pageIndex - }).then(function (pageInfo) { - if (_this13.destroyed) { - throw new Error('Transport destroyed'); - } - - var page = new PDFPageProxy(pageIndex, pageInfo, _this13, _this13._params.pdfBug); - _this13.pageCache[pageIndex] = page; - return page; - }); - this.pagePromises[pageIndex] = promise; - return promise; - } - }, { - key: "getPageIndex", - value: function getPageIndex(ref) { - return this.messageHandler.sendWithPromise('GetPageIndex', { - ref: ref - }).catch(function (reason) { - return Promise.reject(new Error(reason)); - }); - } - }, { - key: "getAnnotations", - value: function getAnnotations(pageIndex, intent) { - return this.messageHandler.sendWithPromise('GetAnnotations', { - pageIndex: pageIndex, - intent: intent - }); - } - }, { - key: "getDestinations", - value: function getDestinations() { - return this.messageHandler.sendWithPromise('GetDestinations', null); - } - }, { - key: "getDestination", - value: function getDestination(id) { - if (typeof id !== 'string') { - return Promise.reject(new Error('Invalid destination request.')); - } - - return this.messageHandler.sendWithPromise('GetDestination', { - id: id - }); - } - }, { - key: "getPageLabels", - value: function getPageLabels() { - return this.messageHandler.sendWithPromise('GetPageLabels', null); - } - }, { - key: "getPageMode", - value: function getPageMode() { - return this.messageHandler.sendWithPromise('GetPageMode', null); - } - }, { - key: "getOpenActionDestination", - value: function getOpenActionDestination() { - return this.messageHandler.sendWithPromise('getOpenActionDestination', null); - } - }, { - key: "getAttachments", - value: function getAttachments() { - return this.messageHandler.sendWithPromise('GetAttachments', null); - } - }, { - key: "getJavaScript", - value: function getJavaScript() { - return this.messageHandler.sendWithPromise('GetJavaScript', null); - } - }, { - key: "getOutline", - value: function getOutline() { - return this.messageHandler.sendWithPromise('GetOutline', null); - } - }, { - key: "getPermissions", - value: function getPermissions() { - return this.messageHandler.sendWithPromise('GetPermissions', null); - } - }, { - key: "getMetadata", - value: function getMetadata() { - var _this14 = this; - - return this.messageHandler.sendWithPromise('GetMetadata', null).then(function (results) { - return { - info: results[0], - metadata: results[1] ? new _metadata.Metadata(results[1]) : null, - contentDispositionFilename: _this14._fullReader ? _this14._fullReader.filename : null - }; - }); - } - }, { - key: "getStats", - value: function getStats() { - return this.messageHandler.sendWithPromise('GetStats', null); - } - }, { - key: "startCleanup", - value: function startCleanup() { - var _this15 = this; - - this.messageHandler.sendWithPromise('Cleanup', null).then(function () { - for (var i = 0, ii = _this15.pageCache.length; i < ii; i++) { - var page = _this15.pageCache[i]; - - if (page) { - page.cleanup(); - } - } - - _this15.commonObjs.clear(); - - _this15.fontLoader.clear(); - }); - } - }, { - key: "loadingParams", - get: function get() { - var params = this._params; - return (0, _util.shadow)(this, 'loadingParams', { - disableAutoFetch: params.disableAutoFetch, - disableCreateObjectURL: params.disableCreateObjectURL, - disableFontFace: params.disableFontFace, - nativeImageDecoderSupport: params.nativeImageDecoderSupport - }); - } - }]); - - return WorkerTransport; - }(); - - var PDFObjects = - /*#__PURE__*/ - function () { - function PDFObjects() { - _classCallCheck(this, PDFObjects); - - this._objs = Object.create(null); - } - - _createClass(PDFObjects, [{ - key: "_ensureObj", - value: function _ensureObj(objId) { - if (this._objs[objId]) { - return this._objs[objId]; - } - - return this._objs[objId] = { - capability: (0, _util.createPromiseCapability)(), - data: null, - resolved: false - }; - } - }, { - key: "get", - value: function get(objId) { - var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - - if (callback) { - this._ensureObj(objId).capability.promise.then(callback); - - return null; - } - - var obj = this._objs[objId]; - - if (!obj || !obj.resolved) { - throw new Error("Requesting object that isn't resolved yet ".concat(objId, ".")); - } - - return obj.data; - } - }, { - key: "has", - value: function has(objId) { - var obj = this._objs[objId]; - return obj ? obj.resolved : false; - } - }, { - key: "resolve", - value: function resolve(objId, data) { - var obj = this._ensureObj(objId); - - obj.resolved = true; - obj.data = data; - obj.capability.resolve(data); - } - }, { - key: "clear", - value: function clear() { - this._objs = Object.create(null); - } - }]); - - return PDFObjects; - }(); - - var RenderTask = - /*#__PURE__*/ - function () { - function RenderTask(internalRenderTask) { - _classCallCheck(this, RenderTask); - - this._internalRenderTask = internalRenderTask; - this.onContinue = null; - } - - _createClass(RenderTask, [{ - key: "cancel", - value: function cancel() { - this._internalRenderTask.cancel(); - } - }, { - key: "then", - value: function then(onFulfilled, onRejected) { - (0, _util.deprecated)('RenderTask.then method, use the `promise` getter instead.'); - return this.promise.then.apply(this.promise, arguments); - } - }, { - key: "promise", - get: function get() { - return this._internalRenderTask.capability.promise; - } - }]); - - return RenderTask; - }(); - - var InternalRenderTask = function InternalRenderTaskClosure() { - var canvasInRendering = new WeakSet(); - - var InternalRenderTask = - /*#__PURE__*/ - function () { - function InternalRenderTask(_ref11) { - var callback = _ref11.callback, - params = _ref11.params, - objs = _ref11.objs, - commonObjs = _ref11.commonObjs, - operatorList = _ref11.operatorList, - pageNumber = _ref11.pageNumber, - canvasFactory = _ref11.canvasFactory, - webGLContext = _ref11.webGLContext, - _ref11$useRequestAnim = _ref11.useRequestAnimationFrame, - useRequestAnimationFrame = _ref11$useRequestAnim === void 0 ? false : _ref11$useRequestAnim, - _ref11$pdfBug = _ref11.pdfBug, - pdfBug = _ref11$pdfBug === void 0 ? false : _ref11$pdfBug, - annotations = _ref11.annotations; - - _classCallCheck(this, InternalRenderTask); - - this.callback = callback; - this.params = params; - this.objs = objs; - this.commonObjs = commonObjs; - this.operatorListIdx = null; - this.operatorList = operatorList; - this.pageNumber = pageNumber; - this.canvasFactory = canvasFactory; - this.webGLContext = webGLContext; - this._pdfBug = pdfBug; - this.running = false; - this.graphicsReadyCallback = null; - this.graphicsReady = false; - this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== 'undefined'; - this.cancelled = false; - this.capability = (0, _util.createPromiseCapability)(); - this.task = new RenderTask(this); - this._continueBound = this._continue.bind(this); - this._scheduleNextBound = this._scheduleNext.bind(this); - this._nextBound = this._next.bind(this); - this._canvas = params.canvasContext.canvas; - this.annotations = annotations; - } - - _createClass(InternalRenderTask, [{ - key: "initializeGraphics", - value: function initializeGraphics() { - var transparency = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - if (this.cancelled) { - return; - } - - if (this._canvas) { - if (canvasInRendering.has(this._canvas)) { - throw new Error('Cannot use the same canvas during multiple render() operations. ' + 'Use different canvas or ensure previous operations were ' + 'cancelled or completed.'); - } - - canvasInRendering.add(this._canvas); - } - - if (this._pdfBug && _global_scope.default.StepperManager && _global_scope.default.StepperManager.enabled) { - this.stepper = _global_scope.default.StepperManager.create(this.pageNumber - 1); - this.stepper.init(this.operatorList); - this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint(); - } - - var _this$params = this.params, - canvasContext = _this$params.canvasContext, - viewport = _this$params.viewport, - transform = _this$params.transform, - imageLayer = _this$params.imageLayer, - background = _this$params.background; - this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.webGLContext, imageLayer, this.annotations); - this.gfx.beginDrawing({ - transform: transform, - viewport: viewport, - transparency: transparency, - background: background - }); - this.operatorListIdx = 0; - this.graphicsReady = true; - - if (this.graphicsReadyCallback) { - this.graphicsReadyCallback(); - } - } - }, { - key: "cancel", - value: function cancel() { - var error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - this.running = false; - this.cancelled = true; - - if (this.gfx) { - this.gfx.endDrawing(); - } - - if (this._canvas) { - canvasInRendering.delete(this._canvas); - } - - this.callback(error || new _dom_utils.RenderingCancelledException("Rendering cancelled, page ".concat(this.pageNumber), 'canvas')); - } - }, { - key: "operatorListChanged", - value: function operatorListChanged() { - if (!this.graphicsReady) { - if (!this.graphicsReadyCallback) { - this.graphicsReadyCallback = this._continueBound; - } - - return; - } - - if (this.stepper) { - this.stepper.updateOperatorList(this.operatorList); - } - - if (this.running) { - return; - } - - this._continue(); - } - }, { - key: "_continue", - value: function _continue() { - this.running = true; - - if (this.cancelled) { - return; - } - - if (this.task.onContinue) { - this.task.onContinue(this._scheduleNextBound); - } else { - this._scheduleNext(); - } - } - }, { - key: "_scheduleNext", - value: function _scheduleNext() { - var _this16 = this; - - if (this._useRequestAnimationFrame) { - window.requestAnimationFrame(function () { - _this16._nextBound().catch(_this16.cancel.bind(_this16)); - }); - } else { - Promise.resolve().then(this._nextBound).catch(this.cancel.bind(this)); - } - } - }, { - key: "_next", - value: function () { - var _next2 = _asyncToGenerator( - /*#__PURE__*/ - _regenerator.default.mark(function _callee() { - return _regenerator.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - if (!this.cancelled) { - _context.next = 2; - break; - } - - return _context.abrupt("return"); - - case 2: - this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper); - - if (this.operatorListIdx === this.operatorList.argsArray.length) { - this.running = false; - - if (this.operatorList.lastChunk) { - this.gfx.endDrawing(); - - if (this._canvas) { - canvasInRendering.delete(this._canvas); - } - - this.callback(); - } - } - - case 4: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - - function _next() { - return _next2.apply(this, arguments); - } - - return _next; - }() - }]); - - return InternalRenderTask; - }(); - - return InternalRenderTask; - }(); - - var version = '2.1.266'; - exports.version = version; - var build = '81f5835c'; - exports.build = build; - - /***/ }), - /* 147 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = __w_extracthighlights_require__(148); - - /***/ }), - /* 148 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - var g = function () { - return this || (typeof self === "undefined" ? "undefined" : _typeof(self)) === "object" && self; - }() || Function("return this")(); - - var hadRuntime = g.regeneratorRuntime && Object.getOwnPropertyNames(g).indexOf("regeneratorRuntime") >= 0; - var oldRuntime = hadRuntime && g.regeneratorRuntime; - g.regeneratorRuntime = undefined; - module.exports = __w_extracthighlights_require__(149); - - if (hadRuntime) { - g.regeneratorRuntime = oldRuntime; - } else { - try { - delete g.regeneratorRuntime; - } catch (e) { - g.regeneratorRuntime = undefined; - } - } - - /***/ }), - /* 149 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - /* WEBPACK VAR INJECTION */(function(module) { - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - !function (global) { - - var Op = Object.prototype; - var hasOwn = Op.hasOwnProperty; - var undefined$1; - var $Symbol = typeof Symbol === "function" ? Symbol : {}; - var iteratorSymbol = $Symbol.iterator || "@@iterator"; - var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; - var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; - var inModule = ( _typeof(module)) === "object"; - var runtime = global.regeneratorRuntime; - - if (runtime) { - if (inModule) { - module.exports = runtime; - } - - return; - } - - runtime = global.regeneratorRuntime = inModule ? module.exports : {}; - - function wrap(innerFn, outerFn, self, tryLocsList) { - var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; - var generator = Object.create(protoGenerator.prototype); - var context = new Context(tryLocsList || []); - generator._invoke = makeInvokeMethod(innerFn, self, context); - return generator; - } - - runtime.wrap = wrap; - - function tryCatch(fn, obj, arg) { - try { - return { - type: "normal", - arg: fn.call(obj, arg) - }; - } catch (err) { - return { - type: "throw", - arg: err - }; - } - } - - var GenStateSuspendedStart = "suspendedStart"; - var GenStateSuspendedYield = "suspendedYield"; - var GenStateExecuting = "executing"; - var GenStateCompleted = "completed"; - var ContinueSentinel = {}; - - function Generator() {} - - function GeneratorFunction() {} - - function GeneratorFunctionPrototype() {} - - var IteratorPrototype = {}; - - IteratorPrototype[iteratorSymbol] = function () { - return this; - }; - - var getProto = Object.getPrototypeOf; - var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); - - if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { - IteratorPrototype = NativeIteratorPrototype; - } - - var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); - GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; - GeneratorFunctionPrototype.constructor = GeneratorFunction; - GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = "GeneratorFunction"; - - function defineIteratorMethods(prototype) { - ["next", "throw", "return"].forEach(function (method) { - prototype[method] = function (arg) { - return this._invoke(method, arg); - }; - }); - } - - runtime.isGeneratorFunction = function (genFun) { - var ctor = typeof genFun === "function" && genFun.constructor; - return ctor ? ctor === GeneratorFunction || (ctor.displayName || ctor.name) === "GeneratorFunction" : false; - }; - - runtime.mark = function (genFun) { - if (Object.setPrototypeOf) { - Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); - } else { - genFun.__proto__ = GeneratorFunctionPrototype; - - if (!(toStringTagSymbol in genFun)) { - genFun[toStringTagSymbol] = "GeneratorFunction"; - } - } - - genFun.prototype = Object.create(Gp); - return genFun; - }; - - runtime.awrap = function (arg) { - return { - __await: arg - }; - }; - - function AsyncIterator(generator) { - function invoke(method, arg, resolve, reject) { - var record = tryCatch(generator[method], generator, arg); - - if (record.type === "throw") { - reject(record.arg); - } else { - var result = record.arg; - var value = result.value; - - if (value && _typeof(value) === "object" && hasOwn.call(value, "__await")) { - return Promise.resolve(value.__await).then(function (value) { - invoke("next", value, resolve, reject); - }, function (err) { - invoke("throw", err, resolve, reject); - }); - } - - return Promise.resolve(value).then(function (unwrapped) { - result.value = unwrapped; - resolve(result); - }, function (error) { - return invoke("throw", error, resolve, reject); - }); - } - } - - var previousPromise; - - function enqueue(method, arg) { - function callInvokeWithMethodAndArg() { - return new Promise(function (resolve, reject) { - invoke(method, arg, resolve, reject); - }); - } - - return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); - } - - this._invoke = enqueue; - } - - defineIteratorMethods(AsyncIterator.prototype); - - AsyncIterator.prototype[asyncIteratorSymbol] = function () { - return this; - }; - - runtime.AsyncIterator = AsyncIterator; - - runtime.async = function (innerFn, outerFn, self, tryLocsList) { - var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList)); - return runtime.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { - return result.done ? result.value : iter.next(); - }); - }; - - function makeInvokeMethod(innerFn, self, context) { - var state = GenStateSuspendedStart; - return function invoke(method, arg) { - if (state === GenStateExecuting) { - throw new Error("Generator is already running"); - } - - if (state === GenStateCompleted) { - if (method === "throw") { - throw arg; - } - - return doneResult(); - } - - context.method = method; - context.arg = arg; - - while (true) { - var delegate = context.delegate; - - if (delegate) { - var delegateResult = maybeInvokeDelegate(delegate, context); - - if (delegateResult) { - if (delegateResult === ContinueSentinel) continue; - return delegateResult; - } - } - - if (context.method === "next") { - context.sent = context._sent = context.arg; - } else if (context.method === "throw") { - if (state === GenStateSuspendedStart) { - state = GenStateCompleted; - throw context.arg; - } - - context.dispatchException(context.arg); - } else if (context.method === "return") { - context.abrupt("return", context.arg); - } - - state = GenStateExecuting; - var record = tryCatch(innerFn, self, context); - - if (record.type === "normal") { - state = context.done ? GenStateCompleted : GenStateSuspendedYield; - - if (record.arg === ContinueSentinel) { - continue; - } - - return { - value: record.arg, - done: context.done - }; - } else if (record.type === "throw") { - state = GenStateCompleted; - context.method = "throw"; - context.arg = record.arg; - } - } - }; - } - - function maybeInvokeDelegate(delegate, context) { - var method = delegate.iterator[context.method]; - - if (method === undefined$1) { - context.delegate = null; - - if (context.method === "throw") { - if (delegate.iterator.return) { - context.method = "return"; - context.arg = undefined$1; - maybeInvokeDelegate(delegate, context); - - if (context.method === "throw") { - return ContinueSentinel; - } - } - - context.method = "throw"; - context.arg = new TypeError("The iterator does not provide a 'throw' method"); - } - - return ContinueSentinel; - } - - var record = tryCatch(method, delegate.iterator, context.arg); - - if (record.type === "throw") { - context.method = "throw"; - context.arg = record.arg; - context.delegate = null; - return ContinueSentinel; - } - - var info = record.arg; - - if (!info) { - context.method = "throw"; - context.arg = new TypeError("iterator result is not an object"); - context.delegate = null; - return ContinueSentinel; - } - - if (info.done) { - context[delegate.resultName] = info.value; - context.next = delegate.nextLoc; - - if (context.method !== "return") { - context.method = "next"; - context.arg = undefined$1; - } - } else { - return info; - } - - context.delegate = null; - return ContinueSentinel; - } - - defineIteratorMethods(Gp); - Gp[toStringTagSymbol] = "Generator"; - - Gp[iteratorSymbol] = function () { - return this; - }; - - Gp.toString = function () { - return "[object Generator]"; - }; - - function pushTryEntry(locs) { - var entry = { - tryLoc: locs[0] - }; - - if (1 in locs) { - entry.catchLoc = locs[1]; - } - - if (2 in locs) { - entry.finallyLoc = locs[2]; - entry.afterLoc = locs[3]; - } - - this.tryEntries.push(entry); - } - - function resetTryEntry(entry) { - var record = entry.completion || {}; - record.type = "normal"; - delete record.arg; - entry.completion = record; - } - - function Context(tryLocsList) { - this.tryEntries = [{ - tryLoc: "root" - }]; - tryLocsList.forEach(pushTryEntry, this); - this.reset(true); - } - - runtime.keys = function (object) { - var keys = []; - - for (var key in object) { - keys.push(key); - } - - keys.reverse(); - return function next() { - while (keys.length) { - var key = keys.pop(); - - if (key in object) { - next.value = key; - next.done = false; - return next; - } - } - - next.done = true; - return next; - }; - }; - - function values(iterable) { - if (iterable) { - var iteratorMethod = iterable[iteratorSymbol]; - - if (iteratorMethod) { - return iteratorMethod.call(iterable); - } - - if (typeof iterable.next === "function") { - return iterable; - } - - if (!isNaN(iterable.length)) { - var i = -1, - next = function next() { - while (++i < iterable.length) { - if (hasOwn.call(iterable, i)) { - next.value = iterable[i]; - next.done = false; - return next; - } - } - - next.value = undefined$1; - next.done = true; - return next; - }; - - return next.next = next; - } - } - - return { - next: doneResult - }; - } - - runtime.values = values; - - function doneResult() { - return { - value: undefined$1, - done: true - }; - } - - Context.prototype = { - constructor: Context, - reset: function reset(skipTempReset) { - this.prev = 0; - this.next = 0; - this.sent = this._sent = undefined$1; - this.done = false; - this.delegate = null; - this.method = "next"; - this.arg = undefined$1; - this.tryEntries.forEach(resetTryEntry); - - if (!skipTempReset) { - for (var name in this) { - if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) { - this[name] = undefined$1; - } - } - } - }, - stop: function stop() { - this.done = true; - var rootEntry = this.tryEntries[0]; - var rootRecord = rootEntry.completion; - - if (rootRecord.type === "throw") { - throw rootRecord.arg; - } - - return this.rval; - }, - dispatchException: function dispatchException(exception) { - if (this.done) { - throw exception; - } - - var context = this; - - function handle(loc, caught) { - record.type = "throw"; - record.arg = exception; - context.next = loc; - - if (caught) { - context.method = "next"; - context.arg = undefined$1; - } - - return !!caught; - } - - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - var record = entry.completion; - - if (entry.tryLoc === "root") { - return handle("end"); - } - - if (entry.tryLoc <= this.prev) { - var hasCatch = hasOwn.call(entry, "catchLoc"); - var hasFinally = hasOwn.call(entry, "finallyLoc"); - - if (hasCatch && hasFinally) { - if (this.prev < entry.catchLoc) { - return handle(entry.catchLoc, true); - } else if (this.prev < entry.finallyLoc) { - return handle(entry.finallyLoc); - } - } else if (hasCatch) { - if (this.prev < entry.catchLoc) { - return handle(entry.catchLoc, true); - } - } else if (hasFinally) { - if (this.prev < entry.finallyLoc) { - return handle(entry.finallyLoc); - } - } else { - throw new Error("try statement without catch or finally"); - } - } - } - }, - abrupt: function abrupt(type, arg) { - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - - if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { - var finallyEntry = entry; - break; - } - } - - if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) { - finallyEntry = null; - } - - var record = finallyEntry ? finallyEntry.completion : {}; - record.type = type; - record.arg = arg; - - if (finallyEntry) { - this.method = "next"; - this.next = finallyEntry.finallyLoc; - return ContinueSentinel; - } - - return this.complete(record); - }, - complete: function complete(record, afterLoc) { - if (record.type === "throw") { - throw record.arg; - } - - if (record.type === "break" || record.type === "continue") { - this.next = record.arg; - } else if (record.type === "return") { - this.rval = this.arg = record.arg; - this.method = "return"; - this.next = "end"; - } else if (record.type === "normal" && afterLoc) { - this.next = afterLoc; - } - - return ContinueSentinel; - }, - finish: function finish(finallyLoc) { - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - - if (entry.finallyLoc === finallyLoc) { - this.complete(entry.completion, entry.afterLoc); - resetTryEntry(entry); - return ContinueSentinel; - } - } - }, - "catch": function _catch(tryLoc) { - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - - if (entry.tryLoc === tryLoc) { - var record = entry.completion; - - if (record.type === "throw") { - var thrown = record.arg; - resetTryEntry(entry); - } - - return thrown; - } - } - - throw new Error("illegal catch attempt"); - }, - delegateYield: function delegateYield(iterable, resultName, nextLoc) { - this.delegate = { - iterator: values(iterable), - resultName: resultName, - nextLoc: nextLoc - }; - - if (this.method === "next") { - this.arg = undefined$1; - } - - return ContinueSentinel; - } - }; - }(function () { - return this || (typeof self === "undefined" ? "undefined" : _typeof(self)) === "object" && self; - }() || Function("return this")()); - /* WEBPACK VAR INJECTION */}.call(this, __w_extracthighlights_require__(150)(module))); - - /***/ }), - /* 150 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - module.exports = function (module) { - if (!module.webpackPolyfill) { - module.deprecate = function () {}; - - module.paths = []; - if (!module.children) module.children = []; - Object.defineProperty(module, "loaded", { - enumerable: true, - get: function get() { - return module.l; - } - }); - Object.defineProperty(module, "id", { - enumerable: true, - get: function get() { - return module.i; - } - }); - module.webpackPolyfill = 1; - } - - return module; - }; - - /***/ }), - /* 151 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.addLinkAttributes = addLinkAttributes; - exports.getFilenameFromUrl = getFilenameFromUrl; - exports.loadScript = loadScript; - exports.DummyStatTimer = exports.StatTimer = exports.DOMSVGFactory = exports.DOMCMapReaderFactory = exports.DOMCanvasFactory = exports.DEFAULT_LINK_REL = exports.LinkTarget = exports.RenderingCancelledException = exports.PageViewport = void 0; - - var _util = __w_extracthighlights_require__(1); - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - - var DEFAULT_LINK_REL = 'noopener noreferrer nofollow'; - exports.DEFAULT_LINK_REL = DEFAULT_LINK_REL; - var SVG_NS = 'http://www.w3.org/2000/svg'; - - var DOMCanvasFactory = - /*#__PURE__*/ - function () { - function DOMCanvasFactory() { - _classCallCheck(this, DOMCanvasFactory); - } - - _createClass(DOMCanvasFactory, [{ - key: "create", - value: function create(width, height) { - if (width <= 0 || height <= 0) { - throw new Error('invalid canvas size'); - } - - var canvas = document.createElement('canvas'); - var context = canvas.getContext('2d'); - canvas.width = width; - canvas.height = height; - return { - canvas: canvas, - context: context - }; - } - }, { - key: "reset", - value: function reset(canvasAndContext, width, height) { - if (!canvasAndContext.canvas) { - throw new Error('canvas is not specified'); - } - - if (width <= 0 || height <= 0) { - throw new Error('invalid canvas size'); - } - - canvasAndContext.canvas.width = width; - canvasAndContext.canvas.height = height; - } - }, { - key: "destroy", - value: function destroy(canvasAndContext) { - if (!canvasAndContext.canvas) { - throw new Error('canvas is not specified'); - } - - canvasAndContext.canvas.width = 0; - canvasAndContext.canvas.height = 0; - canvasAndContext.canvas = null; - canvasAndContext.context = null; - } - }]); - - return DOMCanvasFactory; - }(); - - exports.DOMCanvasFactory = DOMCanvasFactory; - - var DOMCMapReaderFactory = - /*#__PURE__*/ - function () { - function DOMCMapReaderFactory(_ref) { - var _ref$baseUrl = _ref.baseUrl, - baseUrl = _ref$baseUrl === void 0 ? null : _ref$baseUrl, - _ref$isCompressed = _ref.isCompressed, - isCompressed = _ref$isCompressed === void 0 ? false : _ref$isCompressed; - - _classCallCheck(this, DOMCMapReaderFactory); - - this.baseUrl = baseUrl; - this.isCompressed = isCompressed; - } - - _createClass(DOMCMapReaderFactory, [{ - key: "fetch", - value: function fetch(_ref2) { - var _this = this; - - var name = _ref2.name; - - if (!this.baseUrl) { - return Promise.reject(new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.')); - } - - if (!name) { - return Promise.reject(new Error('CMap name must be specified.')); - } - - return new Promise(function (resolve, reject) { - var url = _this.baseUrl + name + (_this.isCompressed ? '.bcmap' : ''); - var request = new XMLHttpRequest(); - request.open('GET', url, true); - - if (_this.isCompressed) { - request.responseType = 'arraybuffer'; - } - - request.onreadystatechange = function () { - if (request.readyState !== XMLHttpRequest.DONE) { - return; - } - - if (request.status === 200 || request.status === 0) { - var data; - - if (_this.isCompressed && request.response) { - data = new Uint8Array(request.response); - } else if (!_this.isCompressed && request.responseText) { - data = (0, _util.stringToBytes)(request.responseText); - } - - if (data) { - resolve({ - cMapData: data, - compressionType: _this.isCompressed ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE - }); - return; - } - } - - reject(new Error('Unable to load ' + (_this.isCompressed ? 'binary ' : '') + 'CMap at: ' + url)); - }; - - request.send(null); - }); - } - }]); - - return DOMCMapReaderFactory; - }(); - - exports.DOMCMapReaderFactory = DOMCMapReaderFactory; - - var DOMSVGFactory = - /*#__PURE__*/ - function () { - function DOMSVGFactory() { - _classCallCheck(this, DOMSVGFactory); - } - - _createClass(DOMSVGFactory, [{ - key: "create", - value: function create(width, height) { - (0, _util.assert)(width > 0 && height > 0, 'Invalid SVG dimensions'); - var svg = document.createElementNS(SVG_NS, 'svg:svg'); - svg.setAttribute('version', '1.1'); - svg.setAttribute('width', width + 'px'); - svg.setAttribute('height', height + 'px'); - svg.setAttribute('preserveAspectRatio', 'none'); - svg.setAttribute('viewBox', '0 0 ' + width + ' ' + height); - return svg; - } - }, { - key: "createElement", - value: function createElement(type) { - (0, _util.assert)(typeof type === 'string', 'Invalid SVG element type'); - return document.createElementNS(SVG_NS, type); - } - }]); - - return DOMSVGFactory; - }(); - - exports.DOMSVGFactory = DOMSVGFactory; - - var PageViewport = - /*#__PURE__*/ - function () { - function PageViewport(_ref3) { - var viewBox = _ref3.viewBox, - scale = _ref3.scale, - rotation = _ref3.rotation, - _ref3$offsetX = _ref3.offsetX, - offsetX = _ref3$offsetX === void 0 ? 0 : _ref3$offsetX, - _ref3$offsetY = _ref3.offsetY, - offsetY = _ref3$offsetY === void 0 ? 0 : _ref3$offsetY, - _ref3$dontFlip = _ref3.dontFlip, - dontFlip = _ref3$dontFlip === void 0 ? false : _ref3$dontFlip; - - _classCallCheck(this, PageViewport); - - this.viewBox = viewBox; - this.scale = scale; - this.rotation = rotation; - this.offsetX = offsetX; - this.offsetY = offsetY; - var centerX = (viewBox[2] + viewBox[0]) / 2; - var centerY = (viewBox[3] + viewBox[1]) / 2; - var rotateA, rotateB, rotateC, rotateD; - rotation = rotation % 360; - rotation = rotation < 0 ? rotation + 360 : rotation; - - switch (rotation) { - case 180: - rotateA = -1; - rotateB = 0; - rotateC = 0; - rotateD = 1; - break; - - case 90: - rotateA = 0; - rotateB = 1; - rotateC = 1; - rotateD = 0; - break; - - case 270: - rotateA = 0; - rotateB = -1; - rotateC = -1; - rotateD = 0; - break; - - default: - rotateA = 1; - rotateB = 0; - rotateC = 0; - rotateD = -1; - break; - } - - if (dontFlip) { - rotateC = -rotateC; - rotateD = -rotateD; - } - - var offsetCanvasX, offsetCanvasY; - var width, height; - - if (rotateA === 0) { - offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; - offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; - width = Math.abs(viewBox[3] - viewBox[1]) * scale; - height = Math.abs(viewBox[2] - viewBox[0]) * scale; - } else { - offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; - offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; - width = Math.abs(viewBox[2] - viewBox[0]) * scale; - height = Math.abs(viewBox[3] - viewBox[1]) * scale; - } - - this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY]; - this.width = width; - this.height = height; - } - - _createClass(PageViewport, [{ - key: "clone", - value: function clone() { - var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - _ref4$scale = _ref4.scale, - scale = _ref4$scale === void 0 ? this.scale : _ref4$scale, - _ref4$rotation = _ref4.rotation, - rotation = _ref4$rotation === void 0 ? this.rotation : _ref4$rotation, - _ref4$dontFlip = _ref4.dontFlip, - dontFlip = _ref4$dontFlip === void 0 ? false : _ref4$dontFlip; - - return new PageViewport({ - viewBox: this.viewBox.slice(), - scale: scale, - rotation: rotation, - offsetX: this.offsetX, - offsetY: this.offsetY, - dontFlip: dontFlip - }); - } - }, { - key: "convertToViewportPoint", - value: function convertToViewportPoint(x, y) { - return _util.Util.applyTransform([x, y], this.transform); - } - }, { - key: "convertToViewportRectangle", - value: function convertToViewportRectangle(rect) { - var tl = _util.Util.applyTransform([rect[0], rect[1]], this.transform); - - var br = _util.Util.applyTransform([rect[2], rect[3]], this.transform); - - return [tl[0], tl[1], br[0], br[1]]; - } - }, { - key: "convertToPdfPoint", - value: function convertToPdfPoint(x, y) { - return _util.Util.applyInverseTransform([x, y], this.transform); - } - }]); - - return PageViewport; - }(); - - exports.PageViewport = PageViewport; - - var RenderingCancelledException = function RenderingCancelledException() { - function RenderingCancelledException(msg, type) { - this.message = msg; - this.type = type; - } - - RenderingCancelledException.prototype = new Error(); - RenderingCancelledException.prototype.name = 'RenderingCancelledException'; - RenderingCancelledException.constructor = RenderingCancelledException; - return RenderingCancelledException; - }(); - - exports.RenderingCancelledException = RenderingCancelledException; - var LinkTarget = { - NONE: 0, - SELF: 1, - BLANK: 2, - PARENT: 3, - TOP: 4 - }; - exports.LinkTarget = LinkTarget; - var LinkTargetStringMap = ['', '_self', '_blank', '_parent', '_top']; - - function addLinkAttributes(link) { - var _ref5 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - url = _ref5.url, - target = _ref5.target, - rel = _ref5.rel; - - link.href = link.title = url ? (0, _util.removeNullCharacters)(url) : ''; - - if (url) { - var LinkTargetValues = Object.values(LinkTarget); - var targetIndex = LinkTargetValues.includes(target) ? target : LinkTarget.NONE; - link.target = LinkTargetStringMap[targetIndex]; - link.rel = typeof rel === 'string' ? rel : DEFAULT_LINK_REL; - } - } - - function getFilenameFromUrl(url) { - var anchor = url.indexOf('#'); - var query = url.indexOf('?'); - var end = Math.min(anchor > 0 ? anchor : url.length, query > 0 ? query : url.length); - return url.substring(url.lastIndexOf('/', end) + 1, end); - } - - var StatTimer = - /*#__PURE__*/ - function () { - function StatTimer() { - var enable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; - - _classCallCheck(this, StatTimer); - - this.enabled = !!enable; - this.started = Object.create(null); - this.times = []; - } - - _createClass(StatTimer, [{ - key: "time", - value: function time(name) { - if (!this.enabled) { - return; - } - - if (name in this.started) { - (0, _util.warn)('Timer is already running for ' + name); - } - - this.started[name] = Date.now(); - } - }, { - key: "timeEnd", - value: function timeEnd(name) { - if (!this.enabled) { - return; - } - - if (!(name in this.started)) { - (0, _util.warn)('Timer has not been started for ' + name); - } - - this.times.push({ - 'name': name, - 'start': this.started[name], - 'end': Date.now() - }); - delete this.started[name]; - } - }, { - key: "toString", - value: function toString() { - var times = this.times; - var out = '', - longest = 0; - - for (var i = 0, ii = times.length; i < ii; ++i) { - var name = times[i]['name']; - - if (name.length > longest) { - longest = name.length; - } - } - - for (var _i = 0, _ii = times.length; _i < _ii; ++_i) { - var span = times[_i]; - var duration = span.end - span.start; - out += "".concat(span['name'].padEnd(longest), " ").concat(duration, "ms\n"); - } - - return out; - } - }]); - - return StatTimer; - }(); - - exports.StatTimer = StatTimer; - - var DummyStatTimer = - /*#__PURE__*/ - function () { - function DummyStatTimer() { - _classCallCheck(this, DummyStatTimer); - - (0, _util.unreachable)('Cannot initialize DummyStatTimer.'); - } - - _createClass(DummyStatTimer, null, [{ - key: "time", - value: function time(name) {} - }, { - key: "timeEnd", - value: function timeEnd(name) {} - }, { - key: "toString", - value: function toString() { - return ''; - } - }]); - - return DummyStatTimer; - }(); - - exports.DummyStatTimer = DummyStatTimer; - - function loadScript(src) { - return new Promise(function (resolve, reject) { - var script = document.createElement('script'); - script.src = src; - script.onload = resolve; - - script.onerror = function () { - reject(new Error("Cannot load script at: ".concat(script.src))); - }; - - (document.head || document.documentElement).appendChild(script); - }); - } - - /***/ }), - /* 152 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.FontLoader = exports.FontFaceObject = void 0; - - var _regenerator = _interopRequireDefault(__w_extracthighlights_require__(147)); - - var _util = __w_extracthighlights_require__(1); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - - function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - - function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - - function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - - function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - - function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - - var BaseFontLoader = - /*#__PURE__*/ - function () { - function BaseFontLoader(_ref) { - var docId = _ref.docId, - onUnsupportedFeature = _ref.onUnsupportedFeature; - - _classCallCheck(this, BaseFontLoader); - - if (this.constructor === BaseFontLoader) { - (0, _util.unreachable)('Cannot initialize BaseFontLoader.'); - } - - this.docId = docId; - this._onUnsupportedFeature = onUnsupportedFeature; - this.nativeFontFaces = []; - this.styleElement = null; - } - - _createClass(BaseFontLoader, [{ - key: "addNativeFontFace", - value: function addNativeFontFace(nativeFontFace) { - this.nativeFontFaces.push(nativeFontFace); - document.fonts.add(nativeFontFace); - } - }, { - key: "insertRule", - value: function insertRule(rule) { - var styleElement = this.styleElement; - - if (!styleElement) { - styleElement = this.styleElement = document.createElement('style'); - styleElement.id = "extracthighlights_FONT_STYLE_TAG_".concat(this.docId); - document.documentElement.getElementsByTagName('head')[0].appendChild(styleElement); - } - - var styleSheet = styleElement.sheet; - styleSheet.insertRule(rule, styleSheet.cssRules.length); - } - }, { - key: "clear", - value: function clear() { - this.nativeFontFaces.forEach(function (nativeFontFace) { - document.fonts.delete(nativeFontFace); - }); - this.nativeFontFaces.length = 0; - - if (this.styleElement) { - this.styleElement.remove(); - this.styleElement = null; - } - } - }, { - key: "bind", - value: function () { - var _bind = _asyncToGenerator( - /*#__PURE__*/ - _regenerator.default.mark(function _callee(font) { - var _this = this; - - var nativeFontFace, rule; - return _regenerator.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - if (!(font.attached || font.missingFile)) { - _context.next = 2; - break; - } - - return _context.abrupt("return"); - - case 2: - font.attached = true; - - if (!this.isFontLoadingAPISupported) { - _context.next = 19; - break; - } - - nativeFontFace = font.createNativeFontFace(); - - if (!nativeFontFace) { - _context.next = 18; - break; - } - - this.addNativeFontFace(nativeFontFace); - _context.prev = 7; - _context.next = 10; - return nativeFontFace.loaded; - - case 10: - _context.next = 18; - break; - - case 12: - _context.prev = 12; - _context.t0 = _context["catch"](7); - - this._onUnsupportedFeature({ - featureId: _util.UNSUPPORTED_FEATURES.font - }); - - (0, _util.warn)("Failed to load font '".concat(nativeFontFace.family, "': '").concat(_context.t0, "'.")); - font.disableFontFace = true; - throw _context.t0; - - case 18: - return _context.abrupt("return"); - - case 19: - rule = font.createFontFaceRule(); - - if (!rule) { - _context.next = 25; - break; - } - - this.insertRule(rule); - - if (!this.isSyncFontLoadingSupported) { - _context.next = 24; - break; - } - - return _context.abrupt("return"); - - case 24: - return _context.abrupt("return", new Promise(function (resolve) { - var request = _this._queueLoadingCallback(resolve); - - _this._prepareFontLoadEvent([rule], [font], request); - })); - - case 25: - case "end": - return _context.stop(); - } - } - }, _callee, this, [[7, 12]]); - })); - - function bind(_x) { - return _bind.apply(this, arguments); - } - - return bind; - }() - }, { - key: "_queueLoadingCallback", - value: function _queueLoadingCallback(callback) { - (0, _util.unreachable)('Abstract method `_queueLoadingCallback`.'); - } - }, { - key: "_prepareFontLoadEvent", - value: function _prepareFontLoadEvent(rules, fontsToLoad, request) { - (0, _util.unreachable)('Abstract method `_prepareFontLoadEvent`.'); - } - }, { - key: "isFontLoadingAPISupported", - get: function get() { - (0, _util.unreachable)('Abstract method `isFontLoadingAPISupported`.'); - } - }, { - key: "isSyncFontLoadingSupported", - get: function get() { - (0, _util.unreachable)('Abstract method `isSyncFontLoadingSupported`.'); - } - }, { - key: "_loadTestFont", - get: function get() { - (0, _util.unreachable)('Abstract method `_loadTestFont`.'); - } - }]); - - return BaseFontLoader; - }(); - - var FontLoader; - exports.FontLoader = FontLoader; - { - exports.FontLoader = FontLoader = - /*#__PURE__*/ - function (_BaseFontLoader) { - _inherits(GenericFontLoader, _BaseFontLoader); - - function GenericFontLoader(docId) { - var _this2; - - _classCallCheck(this, GenericFontLoader); - - _this2 = _possibleConstructorReturn(this, _getPrototypeOf(GenericFontLoader).call(this, docId)); - _this2.loadingContext = { - requests: [], - nextRequestId: 0 - }; - _this2.loadTestFontId = 0; - return _this2; - } - - _createClass(GenericFontLoader, [{ - key: "_queueLoadingCallback", - value: function _queueLoadingCallback(callback) { - function completeRequest() { - (0, _util.assert)(!request.done, 'completeRequest() cannot be called twice.'); - request.done = true; - - while (context.requests.length > 0 && context.requests[0].done) { - var otherRequest = context.requests.shift(); - setTimeout(otherRequest.callback, 0); - } - } - - var context = this.loadingContext; - var request = { - id: "extracthighlights-font-loading-".concat(context.nextRequestId++), - done: false, - complete: completeRequest, - callback: callback - }; - context.requests.push(request); - return request; - } - }, { - key: "_prepareFontLoadEvent", - value: function _prepareFontLoadEvent(rules, fonts, request) { - function int32(data, offset) { - return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff; - } - - function spliceString(s, offset, remove, insert) { - var chunk1 = s.substring(0, offset); - var chunk2 = s.substring(offset + remove); - return chunk1 + insert + chunk2; - } - - var i, ii; - var canvas = document.createElement('canvas'); - canvas.width = 1; - canvas.height = 1; - var ctx = canvas.getContext('2d'); - var called = 0; - - function isFontReady(name, callback) { - called++; - - if (called > 30) { - (0, _util.warn)('Load test font never loaded.'); - callback(); - return; - } - - ctx.font = '30px ' + name; - ctx.fillText('.', 0, 20); - var imageData = ctx.getImageData(0, 0, 1, 1); - - if (imageData.data[3] > 0) { - callback(); - return; - } - - setTimeout(isFontReady.bind(null, name, callback)); - } - - var loadTestFontId = "lt".concat(Date.now()).concat(this.loadTestFontId++); - var data = this._loadTestFont; - var COMMENT_OFFSET = 976; - data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId); - var CFF_CHECKSUM_OFFSET = 16; - var XXXX_VALUE = 0x58585858; - var checksum = int32(data, CFF_CHECKSUM_OFFSET); - - for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) { - checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0; - } - - if (i < loadTestFontId.length) { - checksum = checksum - XXXX_VALUE + int32(loadTestFontId + 'XXX', i) | 0; - } - - data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, (0, _util.string32)(checksum)); - var url = "url(data:font/opentype;base64,".concat(btoa(data), ");"); - var rule = "@font-face {font-family:\"".concat(loadTestFontId, "\";src:").concat(url, "}"); - this.insertRule(rule); - var names = []; - - for (i = 0, ii = fonts.length; i < ii; i++) { - names.push(fonts[i].loadedName); - } - - names.push(loadTestFontId); - var div = document.createElement('div'); - div.setAttribute('style', 'visibility: hidden;' + 'width: 10px; height: 10px;' + 'position: absolute; top: 0px; left: 0px;'); - - for (i = 0, ii = names.length; i < ii; ++i) { - var span = document.createElement('span'); - span.textContent = 'Hi'; - span.style.fontFamily = names[i]; - div.appendChild(span); - } - - document.body.appendChild(div); - isFontReady(loadTestFontId, function () { - document.body.removeChild(div); - request.complete(); - }); - } - }, { - key: "isFontLoadingAPISupported", - get: function get() { - var supported = typeof document !== 'undefined' && !!document.fonts; - - if (supported && typeof navigator !== 'undefined') { - var m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent); - - if (m && m[1] < 63) { - supported = false; - } - } - - return (0, _util.shadow)(this, 'isFontLoadingAPISupported', supported); - } - }, { - key: "isSyncFontLoadingSupported", - get: function get() { - var supported = false; - - if (typeof navigator === 'undefined') { - supported = true; - } else { - var m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent); - - if (m && m[1] >= 14) { - supported = true; - } - } - - return (0, _util.shadow)(this, 'isSyncFontLoadingSupported', supported); - } - }, { - key: "_loadTestFont", - get: function get() { - var getLoadTestFont = function getLoadTestFont() { - return atob('T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA' + 'FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA' + 'ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA' + 'AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1' + 'AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD' + '6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM' + 'AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D' + 'IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA' + 'AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA' + 'AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB' + 'AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY' + 'AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA' + 'AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + 'AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA' + 'AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC' + 'AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3' + 'Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj' + 'FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA=='); - }; - - return (0, _util.shadow)(this, '_loadTestFont', getLoadTestFont()); - } - }]); - - return GenericFontLoader; - }(BaseFontLoader); - } - var IsEvalSupportedCached = { - get value() { - return (0, _util.shadow)(this, 'value', (0, _util.isEvalSupported)()); - } - - }; - - var FontFaceObject = - /*#__PURE__*/ - function () { - function FontFaceObject(translatedData, _ref2) { - var _ref2$isEvalSupported = _ref2.isEvalSupported, - isEvalSupported = _ref2$isEvalSupported === void 0 ? true : _ref2$isEvalSupported, - _ref2$disableFontFace = _ref2.disableFontFace, - disableFontFace = _ref2$disableFontFace === void 0 ? false : _ref2$disableFontFace, - _ref2$ignoreErrors = _ref2.ignoreErrors, - ignoreErrors = _ref2$ignoreErrors === void 0 ? false : _ref2$ignoreErrors, - _ref2$onUnsupportedFe = _ref2.onUnsupportedFeature, - onUnsupportedFeature = _ref2$onUnsupportedFe === void 0 ? null : _ref2$onUnsupportedFe, - _ref2$fontRegistry = _ref2.fontRegistry, - fontRegistry = _ref2$fontRegistry === void 0 ? null : _ref2$fontRegistry; - - _classCallCheck(this, FontFaceObject); - - this.compiledGlyphs = Object.create(null); - - for (var i in translatedData) { - this[i] = translatedData[i]; - } - - this.isEvalSupported = isEvalSupported !== false; - this.disableFontFace = disableFontFace === true; - this.ignoreErrors = ignoreErrors === true; - this._onUnsupportedFeature = onUnsupportedFeature; - this.fontRegistry = fontRegistry; - } - - _createClass(FontFaceObject, [{ - key: "createNativeFontFace", - value: function createNativeFontFace() { - if (!this.data || this.disableFontFace) { - return null; - } - - var nativeFontFace = new FontFace(this.loadedName, this.data, {}); - - if (this.fontRegistry) { - this.fontRegistry.registerFont(this); - } - - return nativeFontFace; - } - }, { - key: "createFontFaceRule", - value: function createFontFaceRule() { - if (!this.data || this.disableFontFace) { - return null; - } - - var data = (0, _util.bytesToString)(new Uint8Array(this.data)); - var url = "url(data:".concat(this.mimetype, ";base64,").concat(btoa(data), ");"); - var rule = "@font-face {font-family:\"".concat(this.loadedName, "\";src:").concat(url, "}"); - - if (this.fontRegistry) { - this.fontRegistry.registerFont(this, url); - } - - return rule; - } - }, { - key: "getPathGenerator", - value: function getPathGenerator(objs, character) { - if (this.compiledGlyphs[character] !== undefined) { - return this.compiledGlyphs[character]; - } - - var cmds, current; - - try { - cmds = objs.get(this.loadedName + '_path_' + character); - } catch (ex) { - if (!this.ignoreErrors) { - throw ex; - } - - if (this._onUnsupportedFeature) { - this._onUnsupportedFeature({ - featureId: _util.UNSUPPORTED_FEATURES.font - }); - } - - (0, _util.warn)("getPathGenerator - ignoring character: \"".concat(ex, "\".")); - return this.compiledGlyphs[character] = function (c, size) {}; - } - - if (this.isEvalSupported && IsEvalSupportedCached.value) { - var args, - js = ''; - - for (var i = 0, ii = cmds.length; i < ii; i++) { - current = cmds[i]; - - if (current.args !== undefined) { - args = current.args.join(','); - } else { - args = ''; - } - - js += 'c.' + current.cmd + '(' + args + ');\n'; - } - - return this.compiledGlyphs[character] = new Function('c', 'size', js); - } - - return this.compiledGlyphs[character] = function (c, size) { - for (var _i = 0, _ii = cmds.length; _i < _ii; _i++) { - current = cmds[_i]; - - if (current.cmd === 'scale') { - current.args = [size, -size]; - } - - c[current.cmd].apply(c, current.args); - } - }; - } - }]); - - return FontFaceObject; - }(); - - exports.FontFaceObject = FontFaceObject; - - /***/ }), - /* 153 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - var compatibilityParams = Object.create(null); - { - var isNodeJS = __w_extracthighlights_require__(4); - - var userAgent = typeof navigator !== 'undefined' && navigator.userAgent || ''; - var isIE = /Trident/.test(userAgent); - var isIOSChrome = /CriOS/.test(userAgent); - - (function checkOnBlobSupport() { - if (isIE || isIOSChrome) { - compatibilityParams.disableCreateObjectURL = true; - } - })(); - - (function checkFontFaceAndImage() { - if (isNodeJS()) { - compatibilityParams.disableFontFace = true; - compatibilityParams.nativeImageDecoderSupport = 'none'; - } - })(); - } - exports.apiCompatibilityParams = Object.freeze(compatibilityParams); - - /***/ }), - /* 154 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.CanvasGraphics = void 0; - - var _util = __w_extracthighlights_require__(1); - - var _pattern_helper = __w_extracthighlights_require__(155); - - var MIN_FONT_SIZE = 16; - var MAX_FONT_SIZE = 100; - var MAX_GROUP_SIZE = 4096; - var MIN_WIDTH_FACTOR = 0.65; - var MAX_SIZE_TO_COMPILE = 1000; - var FULL_CHUNK_HEIGHT = 16; - var IsLittleEndianCached = { - get value() { - return (0, _util.shadow)(IsLittleEndianCached, 'value', (0, _util.isLittleEndian)()); - } - - }; - - function addContextCurrentTransform(ctx) { - if (!ctx.mozCurrentTransform) { - ctx._originalSave = ctx.save; - ctx._originalRestore = ctx.restore; - ctx._originalRotate = ctx.rotate; - ctx._originalScale = ctx.scale; - ctx._originalTranslate = ctx.translate; - ctx._originalTransform = ctx.transform; - ctx._originalSetTransform = ctx.setTransform; - ctx._transformMatrix = ctx._transformMatrix || [1, 0, 0, 1, 0, 0]; - ctx._transformStack = []; - Object.defineProperty(ctx, 'mozCurrentTransform', { - get: function getCurrentTransform() { - return this._transformMatrix; - } - }); - Object.defineProperty(ctx, 'mozCurrentTransformInverse', { - get: function getCurrentTransformInverse() { - var m = this._transformMatrix; - var a = m[0], - b = m[1], - c = m[2], - d = m[3], - e = m[4], - f = m[5]; - var ad_bc = a * d - b * c; - var bc_ad = b * c - a * d; - return [d / ad_bc, b / bc_ad, c / bc_ad, a / ad_bc, (d * e - c * f) / bc_ad, (b * e - a * f) / ad_bc]; - } - }); - - ctx.save = function ctxSave() { - var old = this._transformMatrix; - - this._transformStack.push(old); - - this._transformMatrix = old.slice(0, 6); - - this._originalSave(); - }; - - ctx.restore = function ctxRestore() { - var prev = this._transformStack.pop(); - - if (prev) { - this._transformMatrix = prev; - - this._originalRestore(); - } - }; - - ctx.translate = function ctxTranslate(x, y) { - var m = this._transformMatrix; - m[4] = m[0] * x + m[2] * y + m[4]; - m[5] = m[1] * x + m[3] * y + m[5]; - - this._originalTranslate(x, y); - }; - - ctx.scale = function ctxScale(x, y) { - var m = this._transformMatrix; - m[0] = m[0] * x; - m[1] = m[1] * x; - m[2] = m[2] * y; - m[3] = m[3] * y; - - this._originalScale(x, y); - }; - - ctx.transform = function ctxTransform(a, b, c, d, e, f) { - var m = this._transformMatrix; - this._transformMatrix = [m[0] * a + m[2] * b, m[1] * a + m[3] * b, m[0] * c + m[2] * d, m[1] * c + m[3] * d, m[0] * e + m[2] * f + m[4], m[1] * e + m[3] * f + m[5]]; - - ctx._originalTransform(a, b, c, d, e, f); - }; - - ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) { - this._transformMatrix = [a, b, c, d, e, f]; - - ctx._originalSetTransform(a, b, c, d, e, f); - }; - - ctx.rotate = function ctxRotate(angle) { - var cosValue = Math.cos(angle); - var sinValue = Math.sin(angle); - var m = this._transformMatrix; - this._transformMatrix = [m[0] * cosValue + m[2] * sinValue, m[1] * cosValue + m[3] * sinValue, m[0] * -sinValue + m[2] * cosValue, m[1] * -sinValue + m[3] * cosValue, m[4], m[5]]; - - this._originalRotate(angle); - }; - } - } - - var CachedCanvases = function CachedCanvasesClosure() { - function CachedCanvases(canvasFactory) { - this.canvasFactory = canvasFactory; - this.cache = Object.create(null); - } - - CachedCanvases.prototype = { - getCanvas: function CachedCanvases_getCanvas(id, width, height, trackTransform) { - var canvasEntry; - - if (this.cache[id] !== undefined) { - canvasEntry = this.cache[id]; - this.canvasFactory.reset(canvasEntry, width, height); - canvasEntry.context.setTransform(1, 0, 0, 1, 0, 0); - } else { - canvasEntry = this.canvasFactory.create(width, height); - this.cache[id] = canvasEntry; - } - - if (trackTransform) { - addContextCurrentTransform(canvasEntry.context); - } - - return canvasEntry; - }, - clear: function clear() { - for (var id in this.cache) { - var canvasEntry = this.cache[id]; - this.canvasFactory.destroy(canvasEntry); - delete this.cache[id]; - } - } - }; - return CachedCanvases; - }(); - - function compileType3Glyph(imgData) { - var POINT_TO_PROCESS_LIMIT = 1000; - var width = imgData.width, - height = imgData.height; - var i, - j, - j0, - width1 = width + 1; - var points = new Uint8Array(width1 * (height + 1)); - var POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]); - var lineSize = width + 7 & ~7, - data0 = imgData.data; - var data = new Uint8Array(lineSize * height), - pos = 0, - ii; - - for (i = 0, ii = data0.length; i < ii; i++) { - var mask = 128, - elem = data0[i]; - - while (mask > 0) { - data[pos++] = elem & mask ? 0 : 255; - mask >>= 1; - } - } - - var count = 0; - pos = 0; - - if (data[pos] !== 0) { - points[0] = 1; - ++count; - } - - for (j = 1; j < width; j++) { - if (data[pos] !== data[pos + 1]) { - points[j] = data[pos] ? 2 : 1; - ++count; - } - - pos++; - } - - if (data[pos] !== 0) { - points[j] = 2; - ++count; - } - - for (i = 1; i < height; i++) { - pos = i * lineSize; - j0 = i * width1; - - if (data[pos - lineSize] !== data[pos]) { - points[j0] = data[pos] ? 1 : 8; - ++count; - } - - var sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0); - - for (j = 1; j < width; j++) { - sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0); - - if (POINT_TYPES[sum]) { - points[j0 + j] = POINT_TYPES[sum]; - ++count; - } - - pos++; - } - - if (data[pos - lineSize] !== data[pos]) { - points[j0 + j] = data[pos] ? 2 : 4; - ++count; - } - - if (count > POINT_TO_PROCESS_LIMIT) { - return null; - } - } - - pos = lineSize * (height - 1); - j0 = i * width1; - - if (data[pos] !== 0) { - points[j0] = 8; - ++count; - } - - for (j = 1; j < width; j++) { - if (data[pos] !== data[pos + 1]) { - points[j0 + j] = data[pos] ? 4 : 8; - ++count; - } - - pos++; - } - - if (data[pos] !== 0) { - points[j0 + j] = 4; - ++count; - } - - if (count > POINT_TO_PROCESS_LIMIT) { - return null; - } - - var steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]); - var outlines = []; - - for (i = 0; count && i <= height; i++) { - var p = i * width1; - var end = p + width; - - while (p < end && !points[p]) { - p++; - } - - if (p === end) { - continue; - } - - var coords = [p % width1, i]; - var type = points[p], - p0 = p, - pp; - - do { - var step = steps[type]; - - do { - p += step; - } while (!points[p]); - - pp = points[p]; - - if (pp !== 5 && pp !== 10) { - type = pp; - points[p] = 0; - } else { - type = pp & 0x33 * type >> 4; - points[p] &= type >> 2 | type << 2; - } - - coords.push(p % width1); - coords.push(p / width1 | 0); - --count; - } while (p0 !== p); - - outlines.push(coords); - --i; - } - - var drawOutline = function drawOutline(c) { - c.save(); - c.scale(1 / width, -1 / height); - c.translate(0, -height); - c.beginPath(); - - for (var i = 0, ii = outlines.length; i < ii; i++) { - var o = outlines[i]; - c.moveTo(o[0], o[1]); - - for (var j = 2, jj = o.length; j < jj; j += 2) { - c.lineTo(o[j], o[j + 1]); - } - } - - c.fill(); - c.beginPath(); - c.restore(); - }; - - return drawOutline; - } - - var CanvasExtraState = function CanvasExtraStateClosure() { - function CanvasExtraState() { - this.alphaIsShape = false; - this.fontSize = 0; - this.fontSizeScale = 1; - this.textMatrix = _util.IDENTITY_MATRIX; - this.textMatrixScale = 1; - this.fontMatrix = _util.FONT_IDENTITY_MATRIX; - this.leading = 0; - this.x = 0; - this.y = 0; - this.lineX = 0; - this.lineY = 0; - this.charSpacing = 0; - this.wordSpacing = 0; - this.textHScale = 1; - this.textRenderingMode = _util.TextRenderingMode.FILL; - this.textRise = 0; - this.fillColor = '#000000'; - this.strokeColor = '#000000'; - this.patternFill = false; - this.fillAlpha = 1; - this.strokeAlpha = 1; - this.lineWidth = 1; - this.activeSMask = null; - this.resumeSMaskCtx = null; - } - - CanvasExtraState.prototype = { - clone: function CanvasExtraState_clone() { - return Object.create(this); - }, - setCurrentPoint: function CanvasExtraState_setCurrentPoint(x, y) { - this.x = x; - this.y = y; - } - }; - return CanvasExtraState; - }(); - - var CanvasGraphics = function CanvasGraphicsClosure() { - var EXECUTION_TIME = 15; - var EXECUTION_STEPS = 10; - - function CanvasGraphics(canvasCtx, commonObjs, objs, canvasFactory, webGLContext, imageLayer, annotations) { - this.ctx = canvasCtx; - this.current = new CanvasExtraState(); - this.stateStack = []; - this.pendingClip = null; - this.pendingEOFill = false; - this.res = null; - this.xobjs = null; - this.commonObjs = commonObjs; - this.objs = objs; - this.canvasFactory = canvasFactory; - this.webGLContext = webGLContext; - this.imageLayer = imageLayer; - this.groupStack = []; - this.processingType3 = null; - this.baseTransform = null; - this.baseTransformStack = []; - this.groupLevel = 0; - this.smaskStack = []; - this.smaskCounter = 0; - this.tempSMask = null; - this.cachedCanvases = new CachedCanvases(this.canvasFactory); - this.annotations = annotations; - - if (canvasCtx) { - addContextCurrentTransform(canvasCtx); - } - - this._cachedGetSinglePixelWidth = null; - } - - function putBinaryImageData(ctx, imgData) { - if (typeof ImageData !== 'undefined' && imgData instanceof ImageData) { - ctx.putImageData(imgData, 0, 0); - return; - } - - var height = imgData.height, - width = imgData.width; - var partialChunkHeight = height % FULL_CHUNK_HEIGHT; - var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; - var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; - var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); - var srcPos = 0, - destPos; - var src = imgData.data; - var dest = chunkImgData.data; - var i, j, thisChunkHeight, elemsInThisChunk; - - if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) { - var srcLength = src.byteLength; - var dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2); - var dest32DataLength = dest32.length; - var fullSrcDiff = width + 7 >> 3; - var white = 0xFFFFFFFF; - var black = IsLittleEndianCached.value ? 0xFF000000 : 0x000000FF; - - for (i = 0; i < totalChunks; i++) { - thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; - destPos = 0; - - for (j = 0; j < thisChunkHeight; j++) { - var srcDiff = srcLength - srcPos; - var k = 0; - var kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7; - var kEndUnrolled = kEnd & ~7; - var mask = 0; - var srcByte = 0; - - for (; k < kEndUnrolled; k += 8) { - srcByte = src[srcPos++]; - dest32[destPos++] = srcByte & 128 ? white : black; - dest32[destPos++] = srcByte & 64 ? white : black; - dest32[destPos++] = srcByte & 32 ? white : black; - dest32[destPos++] = srcByte & 16 ? white : black; - dest32[destPos++] = srcByte & 8 ? white : black; - dest32[destPos++] = srcByte & 4 ? white : black; - dest32[destPos++] = srcByte & 2 ? white : black; - dest32[destPos++] = srcByte & 1 ? white : black; - } - - for (; k < kEnd; k++) { - if (mask === 0) { - srcByte = src[srcPos++]; - mask = 128; - } - - dest32[destPos++] = srcByte & mask ? white : black; - mask >>= 1; - } - } - - while (destPos < dest32DataLength) { - dest32[destPos++] = 0; - } - - ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); - } - } else if (imgData.kind === _util.ImageKind.RGBA_32BPP) { - j = 0; - elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4; - - for (i = 0; i < fullChunks; i++) { - dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); - srcPos += elemsInThisChunk; - ctx.putImageData(chunkImgData, 0, j); - j += FULL_CHUNK_HEIGHT; - } - - if (i < totalChunks) { - elemsInThisChunk = width * partialChunkHeight * 4; - dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); - ctx.putImageData(chunkImgData, 0, j); - } - } else if (imgData.kind === _util.ImageKind.RGB_24BPP) { - thisChunkHeight = FULL_CHUNK_HEIGHT; - elemsInThisChunk = width * thisChunkHeight; - - for (i = 0; i < totalChunks; i++) { - if (i >= fullChunks) { - thisChunkHeight = partialChunkHeight; - elemsInThisChunk = width * thisChunkHeight; - } - - destPos = 0; - - for (j = elemsInThisChunk; j--;) { - dest[destPos++] = src[srcPos++]; - dest[destPos++] = src[srcPos++]; - dest[destPos++] = src[srcPos++]; - dest[destPos++] = 255; - } - - ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); - } - } else { - throw new Error("bad image kind: ".concat(imgData.kind)); - } - } - - function putBinaryImageMask(ctx, imgData) { - var height = imgData.height, - width = imgData.width; - var partialChunkHeight = height % FULL_CHUNK_HEIGHT; - var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; - var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; - var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); - var srcPos = 0; - var src = imgData.data; - var dest = chunkImgData.data; - - for (var i = 0; i < totalChunks; i++) { - var thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; - var destPos = 3; - - for (var j = 0; j < thisChunkHeight; j++) { - var mask = 0; - - for (var k = 0; k < width; k++) { - if (!mask) { - var elem = src[srcPos++]; - mask = 128; - } - - dest[destPos] = elem & mask ? 0 : 255; - destPos += 4; - mask >>= 1; - } - } - - ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); - } - } - - function copyCtxState(sourceCtx, destCtx) { - var properties = ['strokeStyle', 'fillStyle', 'fillRule', 'globalAlpha', 'lineWidth', 'lineCap', 'lineJoin', 'miterLimit', 'globalCompositeOperation', 'font']; - - for (var i = 0, ii = properties.length; i < ii; i++) { - var property = properties[i]; - - if (sourceCtx[property] !== undefined) { - destCtx[property] = sourceCtx[property]; - } - } - - if (sourceCtx.setLineDash !== undefined) { - destCtx.setLineDash(sourceCtx.getLineDash()); - destCtx.lineDashOffset = sourceCtx.lineDashOffset; - } - } - - function resetCtxToDefault(ctx) { - ctx.strokeStyle = '#000000'; - ctx.fillStyle = '#000000'; - ctx.fillRule = 'nonzero'; - ctx.globalAlpha = 1; - ctx.lineWidth = 1; - ctx.lineCap = 'butt'; - ctx.lineJoin = 'miter'; - ctx.miterLimit = 10; - ctx.globalCompositeOperation = 'source-over'; - ctx.font = '10px sans-serif'; - - if (ctx.setLineDash !== undefined) { - ctx.setLineDash([]); - ctx.lineDashOffset = 0; - } - } - - function composeSMaskBackdrop(bytes, r0, g0, b0) { - var length = bytes.length; - - for (var i = 3; i < length; i += 4) { - var alpha = bytes[i]; - - if (alpha === 0) { - bytes[i - 3] = r0; - bytes[i - 2] = g0; - bytes[i - 1] = b0; - } else if (alpha < 255) { - var alpha_ = 255 - alpha; - bytes[i - 3] = bytes[i - 3] * alpha + r0 * alpha_ >> 8; - bytes[i - 2] = bytes[i - 2] * alpha + g0 * alpha_ >> 8; - bytes[i - 1] = bytes[i - 1] * alpha + b0 * alpha_ >> 8; - } - } - } - - function composeSMaskAlpha(maskData, layerData, transferMap) { - var length = maskData.length; - var scale = 1 / 255; - - for (var i = 3; i < length; i += 4) { - var alpha = transferMap ? transferMap[maskData[i]] : maskData[i]; - layerData[i] = layerData[i] * alpha * scale | 0; - } - } - - function composeSMaskLuminosity(maskData, layerData, transferMap) { - var length = maskData.length; - - for (var i = 3; i < length; i += 4) { - var y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28; - layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16; - } - } - - function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap) { - var hasBackdrop = !!backdrop; - var r0 = hasBackdrop ? backdrop[0] : 0; - var g0 = hasBackdrop ? backdrop[1] : 0; - var b0 = hasBackdrop ? backdrop[2] : 0; - var composeFn; - - if (subtype === 'Luminosity') { - composeFn = composeSMaskLuminosity; - } else { - composeFn = composeSMaskAlpha; - } - - var PIXELS_TO_PROCESS = 1048576; - var chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width)); - - for (var row = 0; row < height; row += chunkSize) { - var chunkHeight = Math.min(chunkSize, height - row); - var maskData = maskCtx.getImageData(0, row, width, chunkHeight); - var layerData = layerCtx.getImageData(0, row, width, chunkHeight); - - if (hasBackdrop) { - composeSMaskBackdrop(maskData.data, r0, g0, b0); - } - - composeFn(maskData.data, layerData.data, transferMap); - maskCtx.putImageData(layerData, 0, row); - } - } - - function composeSMask(ctx, smask, layerCtx, webGLContext) { - var mask = smask.canvas; - var maskCtx = smask.context; - ctx.setTransform(smask.scaleX, 0, 0, smask.scaleY, smask.offsetX, smask.offsetY); - var backdrop = smask.backdrop || null; - - if (!smask.transferMap && webGLContext.isEnabled) { - var composed = webGLContext.composeSMask({ - layer: layerCtx.canvas, - mask: mask, - properties: { - subtype: smask.subtype, - backdrop: backdrop - } - }); - ctx.setTransform(1, 0, 0, 1, 0, 0); - ctx.drawImage(composed, smask.offsetX, smask.offsetY); - return; - } - - genericComposeSMask(maskCtx, layerCtx, mask.width, mask.height, smask.subtype, backdrop, smask.transferMap); - ctx.drawImage(mask, 0, 0); - } - - var LINE_CAP_STYLES = ['butt', 'round', 'square']; - var LINE_JOIN_STYLES = ['miter', 'round', 'bevel']; - var NORMAL_CLIP = {}; - var EO_CLIP = {}; - CanvasGraphics.prototype = { - beginDrawing: function beginDrawing(_ref) { - var transform = _ref.transform, - viewport = _ref.viewport, - _ref$transparency = _ref.transparency, - transparency = _ref$transparency === void 0 ? false : _ref$transparency, - _ref$background = _ref.background, - background = _ref$background === void 0 ? null : _ref$background; - var width = this.ctx.canvas.width; - var height = this.ctx.canvas.height; - this.ctx.save(); - this.ctx.fillStyle = background || 'rgb(255, 255, 255)'; - this.ctx.fillRect(0, 0, width, height); - this.ctx.restore(); - - if (transparency) { - var transparentCanvas = this.cachedCanvases.getCanvas('transparent', width, height, true); - this.compositeCtx = this.ctx; - this.transparentCanvas = transparentCanvas.canvas; - this.ctx = transparentCanvas.context; - this.ctx.save(); - this.ctx.transform.apply(this.ctx, this.compositeCtx.mozCurrentTransform); - } - - this.ctx.save(); - resetCtxToDefault(this.ctx); - - if (transform) { - this.ctx.transform.apply(this.ctx, transform); - } - - this.ctx.transform.apply(this.ctx, viewport.transform); - this.baseTransform = this.ctx.mozCurrentTransform.slice(); - - this.makeAnnoDims(this.annotations, this.baseTransform); - - if (this.imageLayer) { - this.imageLayer.beginLayout(); - } - }, - executeOperatorList: function CanvasGraphics_executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) { - var argsArray = operatorList.argsArray; - var fnArray = operatorList.fnArray; - var i = executionStartIdx || 0; - var argsArrayLen = argsArray.length; - - if (argsArrayLen === i) { - return i; - } - - var chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === 'function'; - var endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0; - var steps = 0; - var commonObjs = this.commonObjs; - var objs = this.objs; - var fnId; - - while (true) { - if (stepper !== undefined && i === stepper.nextBreakPoint) { - stepper.breakIt(i, continueCallback); - return i; - } - - fnId = fnArray[i]; - - if (fnId !== _util.OPS.dependency) { - this[fnId].apply(this, argsArray[i]); - } else { - var deps = argsArray[i]; - - for (var n = 0, nn = deps.length; n < nn; n++) { - var depObjId = deps[n]; - var common = depObjId[0] === 'g' && depObjId[1] === '_'; - var objsPool = common ? commonObjs : objs; - - if (!objsPool.has(depObjId)) { - objsPool.get(depObjId, continueCallback); - return i; - } - } - } - - i++; - - if (i === argsArrayLen) { - return i; - } - - if (chunkOperations && ++steps > EXECUTION_STEPS) { - if (Date.now() > endTime) { - continueCallback(); - return i; - } - - steps = 0; - } - } - }, - endDrawing: function CanvasGraphics_endDrawing() { - if (this.current.activeSMask !== null) { - this.endSMaskGroup(); - } - - this.ctx.restore(); - - if (this.transparentCanvas) { - this.ctx = this.compositeCtx; - this.ctx.save(); - this.ctx.setTransform(1, 0, 0, 1, 0, 0); - this.ctx.drawImage(this.transparentCanvas, 0, 0); - this.ctx.restore(); - this.transparentCanvas = null; - } - - this.cachedCanvases.clear(); - this.webGLContext.clear(); - - if (this.imageLayer) { - this.imageLayer.endLayout(); - } - }, - setLineWidth: function CanvasGraphics_setLineWidth(width) { - this.current.lineWidth = width; - this.ctx.lineWidth = width; - }, - setLineCap: function CanvasGraphics_setLineCap(style) { - this.ctx.lineCap = LINE_CAP_STYLES[style]; - }, - setLineJoin: function CanvasGraphics_setLineJoin(style) { - this.ctx.lineJoin = LINE_JOIN_STYLES[style]; - }, - setMiterLimit: function CanvasGraphics_setMiterLimit(limit) { - this.ctx.miterLimit = limit; - }, - setDash: function CanvasGraphics_setDash(dashArray, dashPhase) { - var ctx = this.ctx; - - if (ctx.setLineDash !== undefined) { - ctx.setLineDash(dashArray); - ctx.lineDashOffset = dashPhase; - } - }, - setRenderingIntent: function CanvasGraphics_setRenderingIntent(intent) {}, - setFlatness: function CanvasGraphics_setFlatness(flatness) {}, - setGState: function CanvasGraphics_setGState(states) { - for (var i = 0, ii = states.length; i < ii; i++) { - var state = states[i]; - var key = state[0]; - var value = state[1]; - - switch (key) { - case 'LW': - this.setLineWidth(value); - break; - - case 'LC': - this.setLineCap(value); - break; - - case 'LJ': - this.setLineJoin(value); - break; - - case 'ML': - this.setMiterLimit(value); - break; - - case 'D': - this.setDash(value[0], value[1]); - break; - - case 'RI': - this.setRenderingIntent(value); - break; - - case 'FL': - this.setFlatness(value); - break; - - case 'Font': - this.setFont(value[0], value[1]); - break; - - case 'CA': - this.current.strokeAlpha = state[1]; - break; - - case 'ca': - this.current.fillAlpha = state[1]; - this.ctx.globalAlpha = state[1]; - break; - - case 'BM': - this.ctx.globalCompositeOperation = value; - break; - - case 'SMask': - if (this.current.activeSMask) { - if (this.stateStack.length > 0 && this.stateStack[this.stateStack.length - 1].activeSMask === this.current.activeSMask) { - this.suspendSMaskGroup(); - } else { - this.endSMaskGroup(); - } - } - - this.current.activeSMask = value ? this.tempSMask : null; - - if (this.current.activeSMask) { - this.beginSMaskGroup(); - } - - this.tempSMask = null; - break; - } - } - }, - beginSMaskGroup: function CanvasGraphics_beginSMaskGroup() { - var activeSMask = this.current.activeSMask; - var drawnWidth = activeSMask.canvas.width; - var drawnHeight = activeSMask.canvas.height; - var cacheId = 'smaskGroupAt' + this.groupLevel; - var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true); - var currentCtx = this.ctx; - var currentTransform = currentCtx.mozCurrentTransform; - this.ctx.save(); - var groupCtx = scratchCanvas.context; - groupCtx.scale(1 / activeSMask.scaleX, 1 / activeSMask.scaleY); - groupCtx.translate(-activeSMask.offsetX, -activeSMask.offsetY); - groupCtx.transform.apply(groupCtx, currentTransform); - activeSMask.startTransformInverse = groupCtx.mozCurrentTransformInverse; - copyCtxState(currentCtx, groupCtx); - this.ctx = groupCtx; - this.setGState([['BM', 'source-over'], ['ca', 1], ['CA', 1]]); - this.groupStack.push(currentCtx); - this.groupLevel++; - }, - suspendSMaskGroup: function CanvasGraphics_endSMaskGroup() { - var groupCtx = this.ctx; - this.groupLevel--; - this.ctx = this.groupStack.pop(); - composeSMask(this.ctx, this.current.activeSMask, groupCtx, this.webGLContext); - this.ctx.restore(); - this.ctx.save(); - copyCtxState(groupCtx, this.ctx); - this.current.resumeSMaskCtx = groupCtx; - - var deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform); - - this.ctx.transform.apply(this.ctx, deltaTransform); - groupCtx.save(); - groupCtx.setTransform(1, 0, 0, 1, 0, 0); - groupCtx.clearRect(0, 0, groupCtx.canvas.width, groupCtx.canvas.height); - groupCtx.restore(); - }, - resumeSMaskGroup: function CanvasGraphics_endSMaskGroup() { - var groupCtx = this.current.resumeSMaskCtx; - var currentCtx = this.ctx; - this.ctx = groupCtx; - this.groupStack.push(currentCtx); - this.groupLevel++; - }, - endSMaskGroup: function CanvasGraphics_endSMaskGroup() { - var groupCtx = this.ctx; - this.groupLevel--; - this.ctx = this.groupStack.pop(); - composeSMask(this.ctx, this.current.activeSMask, groupCtx, this.webGLContext); - this.ctx.restore(); - copyCtxState(groupCtx, this.ctx); - - var deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform); - - this.ctx.transform.apply(this.ctx, deltaTransform); - }, - save: function CanvasGraphics_save() { - this.ctx.save(); - var old = this.current; - this.stateStack.push(old); - this.current = old.clone(); - this.current.resumeSMaskCtx = null; - }, - restore: function CanvasGraphics_restore() { - if (this.current.resumeSMaskCtx) { - this.resumeSMaskGroup(); - } - - if (this.current.activeSMask !== null && (this.stateStack.length === 0 || this.stateStack[this.stateStack.length - 1].activeSMask !== this.current.activeSMask)) { - this.endSMaskGroup(); - } - - if (this.stateStack.length !== 0) { - this.current = this.stateStack.pop(); - this.ctx.restore(); - this.pendingClip = null; - this._cachedGetSinglePixelWidth = null; - } - }, - transform: function CanvasGraphics_transform(a, b, c, d, e, f) { - this.ctx.transform(a, b, c, d, e, f); - this._cachedGetSinglePixelWidth = null; - }, - constructPath: function CanvasGraphics_constructPath(ops, args) { - var ctx = this.ctx; - var current = this.current; - var x = current.x, - y = current.y; - - for (var i = 0, j = 0, ii = ops.length; i < ii; i++) { - switch (ops[i] | 0) { - case _util.OPS.rectangle: - x = args[j++]; - y = args[j++]; - var width = args[j++]; - var height = args[j++]; - - if (width === 0) { - width = this.getSinglePixelWidth(); - } - - if (height === 0) { - height = this.getSinglePixelWidth(); - } - - var xw = x + width; - var yh = y + height; - this.ctx.moveTo(x, y); - this.ctx.lineTo(xw, y); - this.ctx.lineTo(xw, yh); - this.ctx.lineTo(x, yh); - this.ctx.lineTo(x, y); - this.ctx.closePath(); - break; - - case _util.OPS.moveTo: - x = args[j++]; - y = args[j++]; - ctx.moveTo(x, y); - break; - - case _util.OPS.lineTo: - x = args[j++]; - y = args[j++]; - ctx.lineTo(x, y); - break; - - case _util.OPS.curveTo: - x = args[j + 4]; - y = args[j + 5]; - ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y); - j += 6; - break; - - case _util.OPS.curveTo2: - ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]); - x = args[j + 2]; - y = args[j + 3]; - j += 4; - break; - - case _util.OPS.curveTo3: - x = args[j + 2]; - y = args[j + 3]; - ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y); - j += 4; - break; - - case _util.OPS.closePath: - ctx.closePath(); - break; - } - } - - current.setCurrentPoint(x, y); - }, - closePath: function CanvasGraphics_closePath() { - this.ctx.closePath(); - }, - stroke: function CanvasGraphics_stroke(consumePath) { - consumePath = typeof consumePath !== 'undefined' ? consumePath : true; - var ctx = this.ctx; - var strokeColor = this.current.strokeColor; - ctx.lineWidth = Math.max(this.getSinglePixelWidth() * MIN_WIDTH_FACTOR, this.current.lineWidth); - ctx.globalAlpha = this.current.strokeAlpha; - - if (strokeColor && strokeColor.hasOwnProperty('type') && strokeColor.type === 'Pattern') { - ctx.save(); - ctx.strokeStyle = strokeColor.getPattern(ctx, this); - ctx.stroke(); - ctx.restore(); - } else { - ctx.stroke(); - } - - if (consumePath) { - this.consumePath(); - } - - ctx.globalAlpha = this.current.fillAlpha; - }, - closeStroke: function CanvasGraphics_closeStroke() { - this.closePath(); - this.stroke(); - }, - fill: function CanvasGraphics_fill(consumePath) { - consumePath = typeof consumePath !== 'undefined' ? consumePath : true; - var ctx = this.ctx; - var fillColor = this.current.fillColor; - var isPatternFill = this.current.patternFill; - var needRestore = false; - - if (isPatternFill) { - ctx.save(); - - if (this.baseTransform) { - ctx.setTransform.apply(ctx, this.baseTransform); - } - - ctx.fillStyle = fillColor.getPattern(ctx, this); - needRestore = true; - } - - if (this.pendingEOFill) { - ctx.fill('evenodd'); - this.pendingEOFill = false; - } else { - ctx.fill(); - } - - if (needRestore) { - ctx.restore(); - } - - if (consumePath) { - this.consumePath(); - } - }, - eoFill: function CanvasGraphics_eoFill() { - this.pendingEOFill = true; - this.fill(); - }, - fillStroke: function CanvasGraphics_fillStroke() { - this.fill(false); - this.stroke(false); - this.consumePath(); - }, - eoFillStroke: function CanvasGraphics_eoFillStroke() { - this.pendingEOFill = true; - this.fillStroke(); - }, - closeFillStroke: function CanvasGraphics_closeFillStroke() { - this.closePath(); - this.fillStroke(); - }, - closeEOFillStroke: function CanvasGraphics_closeEOFillStroke() { - this.pendingEOFill = true; - this.closePath(); - this.fillStroke(); - }, - endPath: function CanvasGraphics_endPath() { - this.consumePath(); - }, - clip: function CanvasGraphics_clip() { - this.pendingClip = NORMAL_CLIP; - }, - eoClip: function CanvasGraphics_eoClip() { - this.pendingClip = EO_CLIP; - }, - beginText: function CanvasGraphics_beginText() { - this.current.textMatrix = _util.IDENTITY_MATRIX; - this.current.textMatrixScale = 1; - this.current.x = this.current.lineX = 0; - this.current.y = this.current.lineY = 0; - }, - endText: function CanvasGraphics_endText() { - var paths = this.pendingTextPaths; - var ctx = this.ctx; - - if (paths === undefined) { - ctx.beginPath(); - return; - } - - ctx.save(); - ctx.beginPath(); - - for (var i = 0; i < paths.length; i++) { - var path = paths[i]; - ctx.setTransform.apply(ctx, path.transform); - ctx.translate(path.x, path.y); - path.addToPath(ctx, path.fontSize); - } - - ctx.restore(); - ctx.clip(); - ctx.beginPath(); - delete this.pendingTextPaths; - }, - setCharSpacing: function CanvasGraphics_setCharSpacing(spacing) { - this.current.charSpacing = spacing; - }, - setWordSpacing: function CanvasGraphics_setWordSpacing(spacing) { - this.current.wordSpacing = spacing; - }, - setHScale: function CanvasGraphics_setHScale(scale) { - this.current.textHScale = scale / 100; - }, - setLeading: function CanvasGraphics_setLeading(leading) { - this.current.leading = -leading; - }, - setFont: function CanvasGraphics_setFont(fontRefName, size) { - var fontObj = this.commonObjs.get(fontRefName); - var current = this.current; - - if (!fontObj) { - throw new Error("Can't find font for ".concat(fontRefName)); - } - - current.fontMatrix = fontObj.fontMatrix ? fontObj.fontMatrix : _util.FONT_IDENTITY_MATRIX; - - if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) { - (0, _util.warn)('Invalid font matrix for font ' + fontRefName); - } - - if (size < 0) { - size = -size; - current.fontDirection = -1; - } else { - current.fontDirection = 1; - } - - this.current.font = fontObj; - this.current.fontSize = size; - - if (fontObj.isType3Font) { - return; - } - - var name = fontObj.loadedName || 'sans-serif'; - var bold = fontObj.black ? '900' : fontObj.bold ? 'bold' : 'normal'; - var italic = fontObj.italic ? 'italic' : 'normal'; - var typeface = "\"".concat(name, "\", ").concat(fontObj.fallbackName); - var browserFontSize = size < MIN_FONT_SIZE ? MIN_FONT_SIZE : size > MAX_FONT_SIZE ? MAX_FONT_SIZE : size; - this.current.fontSizeScale = size / browserFontSize; - this.ctx.font = "".concat(italic, " ").concat(bold, " ").concat(browserFontSize, "px ").concat(typeface); - }, - setTextRenderingMode: function CanvasGraphics_setTextRenderingMode(mode) { - this.current.textRenderingMode = mode; - }, - setTextRise: function CanvasGraphics_setTextRise(rise) { - this.current.textRise = rise; - }, - moveText: function CanvasGraphics_moveText(x, y) { - this.current.x = this.current.lineX += x; - this.current.y = this.current.lineY += y; - }, - setLeadingMoveText: function CanvasGraphics_setLeadingMoveText(x, y) { - this.setLeading(-y); - this.moveText(x, y); - }, - setTextMatrix: function CanvasGraphics_setTextMatrix(a, b, c, d, e, f) { - this.current.textMatrix = [a, b, c, d, e, f]; - this.current.textMatrixScale = Math.sqrt(a * a + b * b); - this.current.x = this.current.lineX = 0; - this.current.y = this.current.lineY = 0; - }, - nextLine: function CanvasGraphics_nextLine() { - this.moveText(0, this.current.leading); - }, - - /** Compute the coordinates and width of the character given its width and - * x-offset in font space, a font object, and a matrix used for transforming - * from font space to device space. Returns an object with the character's - * x, y, and width properties, and the width of a space in the given font, - * all in device space. - */ - makeCharDims: function canvasMakeCharDims(charWidth, xOffset, spaceWidth, font2dev) { - - var applyTransform = function(p, m) { - var xt = p[0] * m[0] + p[1] * m[2] + m[4]; - var yt = p[0] * m[1] + p[1] * m[3] + m[5]; - return [xt, yt]; - }; - var applyTransformX = function(p, m) { - var xt = p[0] * m[0] + p[1] * m[2] + m[4]; - return xt; - }; - var xy = applyTransform([xOffset, 0], font2dev); - var w = applyTransformX([xOffset + charWidth, 0], font2dev); - var dims = {x: xy[0], y: xy[1]}; - dims.width = Math.abs(xy[0] - w); - dims.spaceWidth = spaceWidth; - dims.xPlusHalfWidth = dims.x + (0.5 * dims.width); - return dims; - }, - /** Compute the coordinates of the quadpoints given its the annotations - * and a matrix used for transforming from font space to device space. */ - makeAnnoDims: function canvasMakeAnnoDims(annotations, user2dev) { - for (var j = 0; j < annotations.length; j++) { - var annot = annotations[j]; - if (!annot.subtype || (annot.subtype != 'Highlight' && annot.subtype != 'Underline')) - continue; - - for (var i = 0; i < annot.quadPoints.length; i++) { - var applyTransform = function (p, m) { - var xt = p[0] * m[0] + p[1] * m[2] + m[4]; - var yt = p[0] * m[1] + p[1] * m[3] + m[5]; - return [xt, yt]; - }; - - var quad = annot.quadPoints[i]; - var qxy0 = applyTransform([quad.x, quad.y], user2dev); - var quadOtherCorner = [quad.x + quad.width, quad.y + quad.height]; - var qxy1 = applyTransform(quadOtherCorner, user2dev); - annot.quadPoints[i].dims = { - 'minX': Math.min(qxy0[0], qxy1[0]), - 'maxX': Math.max(qxy0[0], qxy1[0]), - 'minY': Math.min(qxy0[1], qxy1[1]), - 'maxY': Math.max(qxy0[1], qxy1[1]) - }; - } - } - }, - - /** Determines if character, with the given dimensions, falls within the - * bounds of annotation annot. If so, returns the 0-based index of the quad - * region within which the character falls. If the character is outside the - * annotation, returns -1. */ - charInAnnot: function canvasCharInAnnot(annot, cdims) { - if (!annot.subtype || (annot.subtype != 'Highlight' && annot.subtype != 'Underline')) - return -1; - - if(typeof annot.quadPoints == 'undefined') return -1; - - for (var i = 0; i < annot.quadPoints.length; i++) { - var qdims = annot.quadPoints[i].dims; - // only grab characters where 50% of the character's - // width lies within the annotation - if (cdims.xPlusHalfWidth >= qdims.minX && cdims.xPlusHalfWidth <= qdims.maxX && - cdims.y >=qdims.minY && cdims.y <= qdims.maxY) { - return i; - } - } - return -1; - }, - /** get last char (a-z or digits) */ - getLastAZChar: function canvasGraphicsGetLastAZChar (annot) { - var lastChar, ch; - for (var c = annot.chars.length-1; c >= 0; c--) { - ch = annot.chars[c]; - if(/^[\w]*$/.test(ch.character)) { - lastChar = ch; - break; - } - } - if (!lastChar) lastChar = annot.chars.slice(-1)[0]; - - - return lastChar; - }, - /** Update the markup array for annot, placing the given character into the - * string associated with the given quad. */ - updateMarkup: function canvasGraphicsUpdateMarkup(annot, quad, glyph, charDims, isSpace) { - if (quad < 0) - return; - - var character = glyph.str, - charInfo = {}, - lastChar, markupEnd, lastCharSpace; - if(character===undefined || (!annot.markup && character==' ')) { - return; - } else { - console.log(character); - - } - - // char details for debugging - charInfo.glyph = glyph; - charInfo.charDims = charDims; - charInfo.isSpace = isSpace; - // add to annotation object - - - if (!annot.markup) { - annot.markup = []; - annot.markupGeom = []; - annot.chars = []; - annot.spaces = {'n':0, 'sumWidth':0}; - } - if (!annot.markup[quad]) { - // annot.markupGeom[quad].brx ensures that only characters are added that are right of the first one in annotation - annot.markupGeom[quad] = {brx: charDims.x + charDims.width}; - annot.markup[quad] = character; - charInfo.character = character; - annot.chars.push(charInfo); - } else { - markupEnd = annot.markup[quad].length - 1; - lastCharSpace = (annot.markup[quad].charAt(markupEnd) == ' '); - // exclude double spaces - if (isSpace && lastCharSpace) return; - // exclude previous space if it is further right then current character - lastChar = annot.chars.slice(-1)[0]; - if(annot.chars.length > 1 && !isSpace && lastCharSpace && typeof lastChar.charDims.x !== 'undefined' && - lastChar.charDims.x/*-charDims.spaceWidth*/>charDims.x+charDims.spaceWidth) { - if(lastChar.isSpace) - annot.markup[quad] = annot.markup[quad].substring(0, markupEnd); - annot.chars = annot.chars.splice(0,annot.chars.length-1); - lastChar = annot.chars.slice(-2)[0]; - annot.markupGeom[quad].brx = lastChar.charDims.x + lastChar.charDims.width; - // reset markupEnd and lastCharSpace - markupEnd = annot.markup[quad].length - 1; - lastCharSpace = (annot.markup[quad].charAt(markupEnd) == ' '); - } - - // insert space if ... - // var spaceWidth = charDims.spaceWidth; - var spaceWidth = annot.spaces.n>0 ? annot.spaces.sumWidth/annot.spaces.n : charDims.spaceWidth*0.85; - if (!isSpace && !lastCharSpace && (charDims.spaceWidth !== 0 || /^[\u201C\(]*$/.test(character) ) && - charDims.x > annot.markupGeom[quad].brx + spaceWidth) { - // last char (a-z or digits) - lastChar = this.getLastAZChar(annot); - // do not add 'mini' or comparatively small spaces - var width = charDims.x - annot.markupGeom[quad].brx, - relativeSize = width/lastChar.charDims.width, - miniSpace = relativeSize<0.1, - smallSpace = annot.spaces.n>0 ? width/(annot.spaces.sumWidth/annot.spaces.n)<0.3 : false; - if(!miniSpace && !smallSpace) { - annot.markup[quad] += ' '; - charInfo.character = ' '; - annot.chars.push(charInfo); - } - } - - // add current character - // if (!isSpace && annot.markupGeom[quad].brx < charDims.x + charDims.width) { - if (!isSpace && - ((annot.markupGeom[quad].brx < charDims.x + charDims.width) || - (character==' ' && annot.markupGeom[quad].brx < charDims.x + lastChar.charDims.width))) { - - annot.markupGeom[quad].brx = charDims.x + charDims.width; - // annot.markupGeom[quad].brx = (character===' ' || isSpace) ? (charDims.x + charDims.spaceWidth) : (charDims.x + charDims.width); - annot.markup[quad] += character; - charInfo.character = character; - annot.chars.push(charInfo); - if(character===' ') { - annot.spaces.sumWidth = annot.spaces.sumWidth + charDims.width; - annot.spaces.n++; - } - } - // add space but exclude mini spaces - if (isSpace && (annot.markupGeom[quad].brx < charDims.x + lastChar.charDims.width)) { - charInfo.character = character; - // last char (a-z or digits) - lastChar = this.getLastAZChar(annot); - // do not add 'mini' spaces that are between to characters of one word - var relativeSize = charDims.width/lastChar.charDims.width; - if(relativeSize<0.2) return; - - // exclude spaces that are small compred to others - if (annot.spaces.n>0) { - var avg = annot.spaces.sumWidth/annot.spaces.n; - if(charDims.width/avg<0.3) return; - } - annot.spaces.sumWidth = annot.spaces.sumWidth + charDims.width; - annot.spaces.n++; - - // add space - annot.markupGeom[quad].brx = charDims.x + charDims.width; - annot.markup[quad] += character; - annot.chars.push(charInfo); - } - } - }, - - paintChar: function paintChar(character, x, y, patternTransform) { - var ctx = this.ctx; - var current = this.current; - var font = current.font; - var textRenderingMode = current.textRenderingMode; - var fontSize = current.fontSize / current.fontSizeScale; - var fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; - var isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG); - var patternFill = current.patternFill && font.data; - var addToPath; - - if (font.disableFontFace || isAddToPathSet || patternFill) { - addToPath = font.getPathGenerator(this.commonObjs, character); - } - - if (font.disableFontFace || patternFill) { - ctx.save(); - ctx.translate(x, y); - ctx.beginPath(); - addToPath(ctx, fontSize); - - if (patternTransform) { - ctx.setTransform.apply(ctx, patternTransform); - } - - if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - ctx.fill(); - } - - if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - ctx.stroke(); - } - - ctx.restore(); - } else { - if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - ctx.fillText(character, x, y); - } - - if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - ctx.strokeText(character, x, y); - } - } - - if (isAddToPathSet) { - var paths = this.pendingTextPaths || (this.pendingTextPaths = []); - paths.push({ - transform: ctx.mozCurrentTransform, - x: x, - y: y, - fontSize: fontSize, - addToPath: addToPath - }); - } - }, - - get isFontSubpixelAAEnabled() { - var ctx = this.canvasFactory.create(10, 10).context; - ctx.scale(1.5, 1); - ctx.fillText('I', 0, 10); - var data = ctx.getImageData(0, 0, 10, 10).data; - var enabled = false; - - for (var i = 3; i < data.length; i += 4) { - if (data[i] > 0 && data[i] < 255) { - enabled = true; - break; - } - } - - return (0, _util.shadow)(this, 'isFontSubpixelAAEnabled', enabled); - }, - - showText: function CanvasGraphics_showText(glyphs) { - - var current = this.current; - var font = current.font; - - if (font.isType3Font) { - return this.showType3Text(glyphs); - } - - var fontSize = current.fontSize; - - if (fontSize === 0) { - return; - } - - var ctx = this.ctx; - var fontSizeScale = current.fontSizeScale; - var charSpacing = current.charSpacing; - var wordSpacing = current.wordSpacing; - var spaceWidth = font.coded ? font.spaceWidth : font.spaceWidth * 0.001; - var fontDirection = current.fontDirection; - var textHScale = current.textHScale * fontDirection; - var glyphsLength = glyphs.length; - var vertical = font.vertical; - var spacingDir = vertical ? 1 : -1; - var defaultVMetrics = font.defaultVMetrics; - var widthAdvanceScale = fontSize * current.fontMatrix[0]; - var simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill; - ctx.save(); - var patternTransform; - - var sw, spaceWidthProj, font2dev = []; - - - if (current.patternFill) { - ctx.save(); - var pattern = current.fillColor.getPattern(ctx, this); - patternTransform = ctx.mozCurrentTransform; - ctx.restore(); - ctx.fillStyle = pattern; - } - - ctx.transform.apply(ctx, current.textMatrix); - ctx.translate(current.x, current.y + current.textRise); - - font2dev = ctx.mozCurrentTransform.slice(0); - - var applyTransformX = function(p, m) { - var xt = p[0] * m[0] + p[1] * m[2] + m[4]; - return xt; - }; - - // projected spaceWidth - sw = applyTransformX([spaceWidth,0], font2dev); - // TODO: why 2.0? I changed it to 3 - // dims.spaceWidth = (sw[0] - font2dev[4]) / 2.0; - spaceWidthProj = (sw - font2dev[4]) / 3.0; - - if (fontDirection > 0) { - ctx.scale(textHScale, -1); - } else { - ctx.scale(textHScale, 1); - } - - var lineWidth = current.lineWidth; - var scale = current.textMatrixScale; - - if (scale === 0 || lineWidth === 0) { - var fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; - - if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - this._cachedGetSinglePixelWidth = null; - lineWidth = this.getSinglePixelWidth() * MIN_WIDTH_FACTOR; - } - } else { - lineWidth /= scale; - } - - if (fontSizeScale !== 1.0) { - ctx.scale(fontSizeScale, fontSizeScale); - lineWidth /= fontSizeScale; - } - - ctx.lineWidth = lineWidth; - var x = 0, - i; - - for (i = 0; i < glyphsLength; ++i) { - var glyph = glyphs[i]; - - if ((0, _util.isNum)(glyph)) { - x += spacingDir * glyph * fontSize / 1000; - continue; - } - - var restoreNeeded = false; - var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; - var character = glyph.fontChar; - var accent = glyph.accent; - var scaledX, scaledY, scaledAccentX, scaledAccentY; - var width = glyph.width; - - if (vertical) { - var vmetric, vx, vy; - vmetric = glyph.vmetric || defaultVMetrics; - vx = glyph.vmetric ? vmetric[1] : width * 0.5; - vx = -vx * widthAdvanceScale; - vy = vmetric[2] * widthAdvanceScale; - width = vmetric ? -vmetric[0] : width; - scaledX = vx / fontSizeScale; - scaledY = (x + vy) / fontSizeScale; - } else { - scaledX = x / fontSizeScale; - scaledY = 0; - } - - if (font.remeasure && width > 0) { - var measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale; - - if (width < measuredWidth && this.isFontSubpixelAAEnabled) { - var characterScaleX = width / measuredWidth; - restoreNeeded = true; - ctx.save(); - ctx.scale(characterScaleX, 1); - scaledX /= characterScaleX; - } else if (width !== measuredWidth) { - scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale; - } - } - - if (this.annotations) { - // check if glyph is within an annotation - var charDims = this.makeCharDims(width * fontSize * current.fontMatrix[0], x, spaceWidthProj, font2dev); - glyph.print = false; - for (var j = 0; j < this.annotations.length; j++) { - var annot = this.annotations[j]; - var quad = this.charInAnnot(annot, charDims); - - if(quad >= 0) { - this.annotations[j].highlightedText += glyph.unicode; - } - - this.updateMarkup(annot, quad, glyph, charDims, false); - } - } - - if (glyph.isInFont || font.missingFile) { - if (simpleFillText && !accent) { - ctx.fillText(character, scaledX, scaledY); - } else { - this.paintChar(character, scaledX, scaledY, patternTransform); - - if (accent) { - scaledAccentX = scaledX + accent.offset.x / fontSizeScale; - scaledAccentY = scaledY - accent.offset.y / fontSizeScale; - this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform); - } - } - } - - var charWidth = width * widthAdvanceScale + spacing * fontDirection; - x += charWidth; - - if (restoreNeeded) { - ctx.restore(); - } - } - - if (vertical) { - current.y -= x * textHScale; - } else { - current.x += x * textHScale; - } - - ctx.restore(); - }, - showType3Text: function CanvasGraphics_showType3Text(glyphs) { - var ctx = this.ctx; - var current = this.current; - var font = current.font; - var fontSize = current.fontSize; - var fontDirection = current.fontDirection; - var spacingDir = font.vertical ? 1 : -1; - var charSpacing = current.charSpacing; - var wordSpacing = current.wordSpacing; - var textHScale = current.textHScale * fontDirection; - var fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX; - var glyphsLength = glyphs.length; - var isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE; - var i, glyph, width, spacingLength; - var sw, spaceWidthProj, font2dev = []; - - if (isTextInvisible || fontSize === 0) { - return; - } - - this._cachedGetSinglePixelWidth = null; - ctx.save(); - ctx.transform.apply(ctx, current.textMatrix); - ctx.translate(current.x, current.y); - - font2dev = ctx.mozCurrentTransform.slice(0); - // projected spaceWidth - - var applyTransformX = function(p, m) { - var xt = p[0] * m[0] + p[1] * m[2] + m[4]; - return xt; - }; - - sw = applyTransformX([spaceWidth,0], font2dev); - // TODO: why 2.0? I changed it to 3 - // dims.spaceWidth = (sw[0] - font2dev[4]) / 2.0; - spaceWidthProj = (sw - font2dev[4]) / 3.0; - - ctx.scale(textHScale, fontDirection); - - for (i = 0; i < glyphsLength; ++i) { - glyph = glyphs[i]; - - if ((0, _util.isNum)(glyph)) { - spacingLength = spacingDir * glyph * fontSize / 1000; - this.ctx.translate(spacingLength, 0); - current.x += spacingLength * textHScale; - continue; - } - - var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; - var operatorList = font.charProcOperatorList[glyph.operatorListId]; - - if (!operatorList) { - (0, _util.warn)("Type3 character \"".concat(glyph.operatorListId, "\" is not available.")); - continue; - } - - this.processingType3 = glyph; - this.save(); - ctx.scale(fontSize, fontSize); - ctx.transform.apply(ctx, fontMatrix); - this.executeOperatorList(operatorList); - this.restore(); - - var applyTransform = function (p, m) { - var xt = p[0] * m[0] + p[1] * m[2] + m[4]; - var yt = p[0] * m[1] + p[1] * m[3] + m[5]; - return [xt, yt]; - }; - - var transformed = applyTransform([glyph.width, 0], fontMatrix); - - width = transformed[0] * fontSize + spacing; - ctx.translate(width, 0); - current.x += width * textHScale; - - if (this.annotations) { - // check if glyph is within an annotation - var chDims = this.makeCharDims(transformed * fontSize, width, spaceWidthProj, font2dev); - for (var j = 0; j < this.annotations.length; j++) { - var annot = this.annotations[j]; - var quad = this.charInAnnot(annot, chDims); - this.updateMarkup(annot, quad, glyph, chDims, false); - } - } - - } - - ctx.restore(); - this.processingType3 = null; - }, - setCharWidth: function CanvasGraphics_setCharWidth(xWidth, yWidth) {}, - setCharWidthAndBounds: function CanvasGraphics_setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) { - this.ctx.rect(llx, lly, urx - llx, ury - lly); - this.clip(); - this.endPath(); - }, - getColorN_Pattern: function CanvasGraphics_getColorN_Pattern(IR) { - var _this = this; - - var pattern; - - if (IR[0] === 'TilingPattern') { - var color = IR[1]; - var baseTransform = this.baseTransform || this.ctx.mozCurrentTransform.slice(); - var canvasGraphicsFactory = { - createCanvasGraphics: function createCanvasGraphics(ctx) { - return new CanvasGraphics(ctx, _this.commonObjs, _this.objs, _this.canvasFactory, _this.webGLContext); - } - }; - pattern = new _pattern_helper.TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform); - } else { - pattern = (0, _pattern_helper.getShadingPatternFromIR)(IR); - } - - return pattern; - }, - setStrokeColorN: function CanvasGraphics_setStrokeColorN() { - this.current.strokeColor = this.getColorN_Pattern(arguments); - }, - setFillColorN: function CanvasGraphics_setFillColorN() { - this.current.fillColor = this.getColorN_Pattern(arguments); - this.current.patternFill = true; - }, - setStrokeRGBColor: function CanvasGraphics_setStrokeRGBColor(r, g, b) { - var color = _util.Util.makeCssRgb(r, g, b); - - this.ctx.strokeStyle = color; - this.current.strokeColor = color; - }, - setFillRGBColor: function CanvasGraphics_setFillRGBColor(r, g, b) { - var color = _util.Util.makeCssRgb(r, g, b); - - this.ctx.fillStyle = color; - this.current.fillColor = color; - this.current.patternFill = false; - }, - shadingFill: function CanvasGraphics_shadingFill(patternIR) { - var ctx = this.ctx; - this.save(); - var pattern = (0, _pattern_helper.getShadingPatternFromIR)(patternIR); - ctx.fillStyle = pattern.getPattern(ctx, this, true); - var inv = ctx.mozCurrentTransformInverse; - - if (inv) { - var canvas = ctx.canvas; - var width = canvas.width; - var height = canvas.height; - - var applyTransform = function(p, m) { - var xt = p[0] * m[0] + p[1] * m[2] + m[4]; - var yt = p[0] * m[1] + p[1] * m[3] + m[5]; - return [xt, yt]; - }; - - var bl = applyTransform([0, 0], inv); - - var br = applyTransform([0, height], inv); - - var ul = applyTransform([width, 0], inv); - - var ur = applyTransform([width, height], inv); - - var x0 = Math.min(bl[0], br[0], ul[0], ur[0]); - var y0 = Math.min(bl[1], br[1], ul[1], ur[1]); - var x1 = Math.max(bl[0], br[0], ul[0], ur[0]); - var y1 = Math.max(bl[1], br[1], ul[1], ur[1]); - this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0); - } else { - this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10); - } - - this.restore(); - }, - beginInlineImage: function CanvasGraphics_beginInlineImage() { - (0, _util.unreachable)('Should not call beginInlineImage'); - }, - beginImageData: function CanvasGraphics_beginImageData() { - (0, _util.unreachable)('Should not call beginImageData'); - }, - paintFormXObjectBegin: function CanvasGraphics_paintFormXObjectBegin(matrix, bbox) { - this.save(); - this.baseTransformStack.push(this.baseTransform); - - if (Array.isArray(matrix) && matrix.length === 6) { - this.transform.apply(this, matrix); - } - - this.baseTransform = this.ctx.mozCurrentTransform; - - this.makeAnnoDims(this.annotations, this.baseTransform); - - if (bbox) { - var width = bbox[2] - bbox[0]; - var height = bbox[3] - bbox[1]; - this.ctx.rect(bbox[0], bbox[1], width, height); - this.clip(); - this.endPath(); - } - }, - paintFormXObjectEnd: function CanvasGraphics_paintFormXObjectEnd() { - this.restore(); - this.baseTransform = this.baseTransformStack.pop(); - - this.makeAnnoDims(this.annotations, this.baseTransform); - }, - beginGroup: function CanvasGraphics_beginGroup(group) { - this.save(); - var currentCtx = this.ctx; - - if (!group.isolated) { - (0, _util.info)('TODO: Support non-isolated groups.'); - } - - if (group.knockout) { - (0, _util.warn)('Knockout groups not supported.'); - } - - var currentTransform = currentCtx.mozCurrentTransform; - - if (group.matrix) { - currentCtx.transform.apply(currentCtx, group.matrix); - } - - if (!group.bbox) { - throw new Error('Bounding box is required.'); - } - - var bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, currentCtx.mozCurrentTransform); - - var canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height]; - bounds = _util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0]; - var offsetX = Math.floor(bounds[0]); - var offsetY = Math.floor(bounds[1]); - var drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1); - var drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1); - var scaleX = 1, - scaleY = 1; - - if (drawnWidth > MAX_GROUP_SIZE) { - scaleX = drawnWidth / MAX_GROUP_SIZE; - drawnWidth = MAX_GROUP_SIZE; - } - - if (drawnHeight > MAX_GROUP_SIZE) { - scaleY = drawnHeight / MAX_GROUP_SIZE; - drawnHeight = MAX_GROUP_SIZE; - } - - var cacheId = 'groupAt' + this.groupLevel; - - if (group.smask) { - cacheId += '_smask_' + this.smaskCounter++ % 2; - } - - var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true); - var groupCtx = scratchCanvas.context; - groupCtx.scale(1 / scaleX, 1 / scaleY); - groupCtx.translate(-offsetX, -offsetY); - groupCtx.transform.apply(groupCtx, currentTransform); - - if (group.smask) { - this.smaskStack.push({ - canvas: scratchCanvas.canvas, - context: groupCtx, - offsetX: offsetX, - offsetY: offsetY, - scaleX: scaleX, - scaleY: scaleY, - subtype: group.smask.subtype, - backdrop: group.smask.backdrop, - transferMap: group.smask.transferMap || null, - startTransformInverse: null - }); - } else { - currentCtx.setTransform(1, 0, 0, 1, 0, 0); - currentCtx.translate(offsetX, offsetY); - currentCtx.scale(scaleX, scaleY); - } - - copyCtxState(currentCtx, groupCtx); - this.ctx = groupCtx; - this.setGState([['BM', 'source-over'], ['ca', 1], ['CA', 1]]); - this.groupStack.push(currentCtx); - this.groupLevel++; - this.current.activeSMask = null; - }, - endGroup: function CanvasGraphics_endGroup(group) { - this.groupLevel--; - var groupCtx = this.ctx; - this.ctx = this.groupStack.pop(); - - if (this.ctx.imageSmoothingEnabled !== undefined) { - this.ctx.imageSmoothingEnabled = false; - } else { - this.ctx.mozImageSmoothingEnabled = false; - } - - if (group.smask) { - this.tempSMask = this.smaskStack.pop(); - } else { - this.ctx.drawImage(groupCtx.canvas, 0, 0); - } - - this.restore(); - }, - beginAnnotations: function CanvasGraphics_beginAnnotations() { - this.save(); - - if (this.baseTransform) { - this.ctx.setTransform.apply(this.ctx, this.baseTransform); - } - }, - endAnnotations: function CanvasGraphics_endAnnotations() { - this.restore(); - }, - beginAnnotation: function CanvasGraphics_beginAnnotation(rect, transform, matrix) { - this.save(); - resetCtxToDefault(this.ctx); - this.current = new CanvasExtraState(); - - if (Array.isArray(rect) && rect.length === 4) { - var width = rect[2] - rect[0]; - var height = rect[3] - rect[1]; - this.ctx.rect(rect[0], rect[1], width, height); - this.clip(); - this.endPath(); - } - - this.transform.apply(this, transform); - this.transform.apply(this, matrix); - }, - endAnnotation: function CanvasGraphics_endAnnotation() { - this.restore(); - }, - paintJpegXObject: function CanvasGraphics_paintJpegXObject(objId, w, h) { - var domImage = this.objs.get(objId); - - if (!domImage) { - (0, _util.warn)('Dependent image isn\'t ready yet'); - return; - } - - this.save(); - var ctx = this.ctx; - ctx.scale(1 / w, -1 / h); - ctx.drawImage(domImage, 0, 0, domImage.width, domImage.height, 0, -h, w, h); - - if (this.imageLayer) { - var currentTransform = ctx.mozCurrentTransformInverse; - var position = this.getCanvasPosition(0, 0); - this.imageLayer.appendImage({ - objId: objId, - left: position[0], - top: position[1], - width: w / currentTransform[0], - height: h / currentTransform[3] - }); - } - - this.restore(); - }, - paintImageMaskXObject: function CanvasGraphics_paintImageMaskXObject(img) { - var ctx = this.ctx; - var width = img.width, - height = img.height; - var fillColor = this.current.fillColor; - var isPatternFill = this.current.patternFill; - var glyph = this.processingType3; - - if (glyph && glyph.compiled === undefined) { - if (width <= MAX_SIZE_TO_COMPILE && height <= MAX_SIZE_TO_COMPILE) { - glyph.compiled = compileType3Glyph({ - data: img.data, - width: width, - height: height - }); - } else { - glyph.compiled = null; - } - } - - if (glyph && glyph.compiled) { - glyph.compiled(ctx); - return; - } - - var maskCanvas = this.cachedCanvases.getCanvas('maskCanvas', width, height); - var maskCtx = maskCanvas.context; - maskCtx.save(); - putBinaryImageMask(maskCtx, img); - maskCtx.globalCompositeOperation = 'source-in'; - maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor; - maskCtx.fillRect(0, 0, width, height); - maskCtx.restore(); - this.paintInlineImageXObject(maskCanvas.canvas); - }, - paintImageMaskXObjectRepeat: function CanvasGraphics_paintImageMaskXObjectRepeat(imgData, scaleX, scaleY, positions) { - var width = imgData.width; - var height = imgData.height; - var fillColor = this.current.fillColor; - var isPatternFill = this.current.patternFill; - var maskCanvas = this.cachedCanvases.getCanvas('maskCanvas', width, height); - var maskCtx = maskCanvas.context; - maskCtx.save(); - putBinaryImageMask(maskCtx, imgData); - maskCtx.globalCompositeOperation = 'source-in'; - maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor; - maskCtx.fillRect(0, 0, width, height); - maskCtx.restore(); - var ctx = this.ctx; - - for (var i = 0, ii = positions.length; i < ii; i += 2) { - ctx.save(); - ctx.transform(scaleX, 0, 0, scaleY, positions[i], positions[i + 1]); - ctx.scale(1, -1); - ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); - ctx.restore(); - } - }, - paintImageMaskXObjectGroup: function CanvasGraphics_paintImageMaskXObjectGroup(images) { - var ctx = this.ctx; - var fillColor = this.current.fillColor; - var isPatternFill = this.current.patternFill; - - for (var i = 0, ii = images.length; i < ii; i++) { - var image = images[i]; - var width = image.width, - height = image.height; - var maskCanvas = this.cachedCanvases.getCanvas('maskCanvas', width, height); - var maskCtx = maskCanvas.context; - maskCtx.save(); - putBinaryImageMask(maskCtx, image); - maskCtx.globalCompositeOperation = 'source-in'; - maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor; - maskCtx.fillRect(0, 0, width, height); - maskCtx.restore(); - ctx.save(); - ctx.transform.apply(ctx, image.transform); - ctx.scale(1, -1); - ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); - ctx.restore(); - } - }, - paintImageXObject: function CanvasGraphics_paintImageXObject(objId) { - var imgData = this.objs.get(objId); - - if (!imgData) { - (0, _util.warn)('Dependent image isn\'t ready yet'); - return; - } - - this.paintInlineImageXObject(imgData); - }, - paintImageXObjectRepeat: function CanvasGraphics_paintImageXObjectRepeat(objId, scaleX, scaleY, positions) { - var imgData = this.objs.get(objId); - - if (!imgData) { - (0, _util.warn)('Dependent image isn\'t ready yet'); - return; - } - - var width = imgData.width; - var height = imgData.height; - var map = []; - - for (var i = 0, ii = positions.length; i < ii; i += 2) { - map.push({ - transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]], - x: 0, - y: 0, - w: width, - h: height - }); - } - - this.paintInlineImageXObjectGroup(imgData, map); - }, - paintInlineImageXObject: function CanvasGraphics_paintInlineImageXObject(imgData) { - var width = imgData.width; - var height = imgData.height; - var ctx = this.ctx; - this.save(); - ctx.scale(1 / width, -1 / height); - var currentTransform = ctx.mozCurrentTransformInverse; - var a = currentTransform[0], - b = currentTransform[1]; - var widthScale = Math.max(Math.sqrt(a * a + b * b), 1); - var c = currentTransform[2], - d = currentTransform[3]; - var heightScale = Math.max(Math.sqrt(c * c + d * d), 1); - var imgToPaint, tmpCanvas; - - if (typeof HTMLElement === 'function' && imgData instanceof HTMLElement || !imgData.data) { - imgToPaint = imgData; - } else { - tmpCanvas = this.cachedCanvases.getCanvas('inlineImage', width, height); - var tmpCtx = tmpCanvas.context; - putBinaryImageData(tmpCtx, imgData); - imgToPaint = tmpCanvas.canvas; - } - - var paintWidth = width, - paintHeight = height; - var tmpCanvasId = 'prescale1'; - - while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) { - var newWidth = paintWidth, - newHeight = paintHeight; - - if (widthScale > 2 && paintWidth > 1) { - newWidth = Math.ceil(paintWidth / 2); - widthScale /= paintWidth / newWidth; - } - - if (heightScale > 2 && paintHeight > 1) { - newHeight = Math.ceil(paintHeight / 2); - heightScale /= paintHeight / newHeight; - } - - tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight); - tmpCtx = tmpCanvas.context; - tmpCtx.clearRect(0, 0, newWidth, newHeight); - tmpCtx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight); - imgToPaint = tmpCanvas.canvas; - paintWidth = newWidth; - paintHeight = newHeight; - tmpCanvasId = tmpCanvasId === 'prescale1' ? 'prescale2' : 'prescale1'; - } - - ctx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight, 0, -height, width, height); - - if (this.imageLayer) { - var position = this.getCanvasPosition(0, -height); - this.imageLayer.appendImage({ - imgData: imgData, - left: position[0], - top: position[1], - width: width / currentTransform[0], - height: height / currentTransform[3] - }); - } - - this.restore(); - }, - paintInlineImageXObjectGroup: function CanvasGraphics_paintInlineImageXObjectGroup(imgData, map) { - var ctx = this.ctx; - var w = imgData.width; - var h = imgData.height; - var tmpCanvas = this.cachedCanvases.getCanvas('inlineImage', w, h); - var tmpCtx = tmpCanvas.context; - putBinaryImageData(tmpCtx, imgData); - - for (var i = 0, ii = map.length; i < ii; i++) { - var entry = map[i]; - ctx.save(); - ctx.transform.apply(ctx, entry.transform); - ctx.scale(1, -1); - ctx.drawImage(tmpCanvas.canvas, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1); - - if (this.imageLayer) { - var position = this.getCanvasPosition(entry.x, entry.y); - this.imageLayer.appendImage({ - imgData: imgData, - left: position[0], - top: position[1], - width: w, - height: h - }); - } - - ctx.restore(); - } - }, - paintSolidColorImageMask: function CanvasGraphics_paintSolidColorImageMask() { - this.ctx.fillRect(0, 0, 1, 1); - }, - paintXObject: function CanvasGraphics_paintXObject() { - (0, _util.warn)('Unsupported \'paintXObject\' command.'); - }, - markPoint: function CanvasGraphics_markPoint(tag) {}, - markPointProps: function CanvasGraphics_markPointProps(tag, properties) {}, - beginMarkedContent: function CanvasGraphics_beginMarkedContent(tag) {}, - beginMarkedContentProps: function CanvasGraphics_beginMarkedContentProps(tag, properties) {}, - endMarkedContent: function CanvasGraphics_endMarkedContent() {}, - beginCompat: function CanvasGraphics_beginCompat() {}, - endCompat: function CanvasGraphics_endCompat() {}, - consumePath: function CanvasGraphics_consumePath() { - var ctx = this.ctx; - - if (this.pendingClip) { - if (this.pendingClip === EO_CLIP) { - ctx.clip('evenodd'); - } else { - ctx.clip(); - } - - this.pendingClip = null; - } - - ctx.beginPath(); - }, - getSinglePixelWidth: function getSinglePixelWidth(scale) { - if (this._cachedGetSinglePixelWidth === null) { - var inverse = this.ctx.mozCurrentTransformInverse; - this._cachedGetSinglePixelWidth = Math.sqrt(Math.max(inverse[0] * inverse[0] + inverse[1] * inverse[1], inverse[2] * inverse[2] + inverse[3] * inverse[3])); - } - - return this._cachedGetSinglePixelWidth; - }, - getCanvasPosition: function CanvasGraphics_getCanvasPosition(x, y) { - var transform = this.ctx.mozCurrentTransform; - return [transform[0] * x + transform[2] * y + transform[4], transform[1] * x + transform[3] * y + transform[5]]; - } - }; - - for (var op in _util.OPS) { - CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op]; - } - - return CanvasGraphics; - }(); - - exports.CanvasGraphics = CanvasGraphics; - - /***/ }), - /* 155 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.getShadingPatternFromIR = getShadingPatternFromIR; - exports.TilingPattern = void 0; - - var _util = __w_extracthighlights_require__(1); - - var ShadingIRs = {}; - ShadingIRs.RadialAxial = { - fromIR: function RadialAxial_fromIR(raw) { - var type = raw[1]; - var colorStops = raw[2]; - var p0 = raw[3]; - var p1 = raw[4]; - var r0 = raw[5]; - var r1 = raw[6]; - return { - type: 'Pattern', - getPattern: function RadialAxial_getPattern(ctx) { - var grad; - - if (type === 'axial') { - grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]); - } else if (type === 'radial') { - grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1); - } - - for (var i = 0, ii = colorStops.length; i < ii; ++i) { - var c = colorStops[i]; - grad.addColorStop(c[0], c[1]); - } - - return grad; - } - }; - } - }; - - var createMeshCanvas = function createMeshCanvasClosure() { - function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { - var coords = context.coords, - colors = context.colors; - var bytes = data.data, - rowSize = data.width * 4; - var tmp; - - if (coords[p1 + 1] > coords[p2 + 1]) { - tmp = p1; - p1 = p2; - p2 = tmp; - tmp = c1; - c1 = c2; - c2 = tmp; - } - - if (coords[p2 + 1] > coords[p3 + 1]) { - tmp = p2; - p2 = p3; - p3 = tmp; - tmp = c2; - c2 = c3; - c3 = tmp; - } - - if (coords[p1 + 1] > coords[p2 + 1]) { - tmp = p1; - p1 = p2; - p2 = tmp; - tmp = c1; - c1 = c2; - c2 = tmp; - } - - var x1 = (coords[p1] + context.offsetX) * context.scaleX; - var y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY; - var x2 = (coords[p2] + context.offsetX) * context.scaleX; - var y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY; - var x3 = (coords[p3] + context.offsetX) * context.scaleX; - var y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY; - - if (y1 >= y3) { - return; - } - - var c1r = colors[c1], - c1g = colors[c1 + 1], - c1b = colors[c1 + 2]; - var c2r = colors[c2], - c2g = colors[c2 + 1], - c2b = colors[c2 + 2]; - var c3r = colors[c3], - c3g = colors[c3 + 1], - c3b = colors[c3 + 2]; - var minY = Math.round(y1), - maxY = Math.round(y3); - var xa, car, cag, cab; - var xb, cbr, cbg, cbb; - var k; - - for (var y = minY; y <= maxY; y++) { - if (y < y2) { - k = y < y1 ? 0 : y1 === y2 ? 1 : (y1 - y) / (y1 - y2); - xa = x1 - (x1 - x2) * k; - car = c1r - (c1r - c2r) * k; - cag = c1g - (c1g - c2g) * k; - cab = c1b - (c1b - c2b) * k; - } else { - k = y > y3 ? 1 : y2 === y3 ? 0 : (y2 - y) / (y2 - y3); - xa = x2 - (x2 - x3) * k; - car = c2r - (c2r - c3r) * k; - cag = c2g - (c2g - c3g) * k; - cab = c2b - (c2b - c3b) * k; - } - - k = y < y1 ? 0 : y > y3 ? 1 : (y1 - y) / (y1 - y3); - xb = x1 - (x1 - x3) * k; - cbr = c1r - (c1r - c3r) * k; - cbg = c1g - (c1g - c3g) * k; - cbb = c1b - (c1b - c3b) * k; - var x1_ = Math.round(Math.min(xa, xb)); - var x2_ = Math.round(Math.max(xa, xb)); - var j = rowSize * y + x1_ * 4; - - for (var x = x1_; x <= x2_; x++) { - k = (xa - x) / (xa - xb); - k = k < 0 ? 0 : k > 1 ? 1 : k; - bytes[j++] = car - (car - cbr) * k | 0; - bytes[j++] = cag - (cag - cbg) * k | 0; - bytes[j++] = cab - (cab - cbb) * k | 0; - bytes[j++] = 255; - } - } - } - - function drawFigure(data, figure, context) { - var ps = figure.coords; - var cs = figure.colors; - var i, ii; - - switch (figure.type) { - case 'lattice': - var verticesPerRow = figure.verticesPerRow; - var rows = Math.floor(ps.length / verticesPerRow) - 1; - var cols = verticesPerRow - 1; - - for (i = 0; i < rows; i++) { - var q = i * verticesPerRow; - - for (var j = 0; j < cols; j++, q++) { - drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]); - drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]); - } - } - - break; - - case 'triangles': - for (i = 0, ii = ps.length; i < ii; i += 3) { - drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]); - } - - break; - - default: - throw new Error('illegal figure'); - } - } - - function createMeshCanvas(bounds, combinesScale, coords, colors, figures, backgroundColor, cachedCanvases, webGLContext) { - var EXPECTED_SCALE = 1.1; - var MAX_PATTERN_SIZE = 3000; - var BORDER_SIZE = 2; - var offsetX = Math.floor(bounds[0]); - var offsetY = Math.floor(bounds[1]); - var boundsWidth = Math.ceil(bounds[2]) - offsetX; - var boundsHeight = Math.ceil(bounds[3]) - offsetY; - var width = Math.min(Math.ceil(Math.abs(boundsWidth * combinesScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); - var height = Math.min(Math.ceil(Math.abs(boundsHeight * combinesScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); - var scaleX = boundsWidth / width; - var scaleY = boundsHeight / height; - var context = { - coords: coords, - colors: colors, - offsetX: -offsetX, - offsetY: -offsetY, - scaleX: 1 / scaleX, - scaleY: 1 / scaleY - }; - var paddedWidth = width + BORDER_SIZE * 2; - var paddedHeight = height + BORDER_SIZE * 2; - var canvas, tmpCanvas, i, ii; - - if (webGLContext.isEnabled) { - canvas = webGLContext.drawFigures({ - width: width, - height: height, - backgroundColor: backgroundColor, - figures: figures, - context: context - }); - tmpCanvas = cachedCanvases.getCanvas('mesh', paddedWidth, paddedHeight, false); - tmpCanvas.context.drawImage(canvas, BORDER_SIZE, BORDER_SIZE); - canvas = tmpCanvas.canvas; - } else { - tmpCanvas = cachedCanvases.getCanvas('mesh', paddedWidth, paddedHeight, false); - var tmpCtx = tmpCanvas.context; - var data = tmpCtx.createImageData(width, height); - - if (backgroundColor) { - var bytes = data.data; - - for (i = 0, ii = bytes.length; i < ii; i += 4) { - bytes[i] = backgroundColor[0]; - bytes[i + 1] = backgroundColor[1]; - bytes[i + 2] = backgroundColor[2]; - bytes[i + 3] = 255; - } - } - - for (i = 0; i < figures.length; i++) { - drawFigure(data, figures[i], context); - } - - tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE); - canvas = tmpCanvas.canvas; - } - - return { - canvas: canvas, - offsetX: offsetX - BORDER_SIZE * scaleX, - offsetY: offsetY - BORDER_SIZE * scaleY, - scaleX: scaleX, - scaleY: scaleY - }; - } - - return createMeshCanvas; - }(); - - ShadingIRs.Mesh = { - fromIR: function Mesh_fromIR(raw) { - var coords = raw[2]; - var colors = raw[3]; - var figures = raw[4]; - var bounds = raw[5]; - var matrix = raw[6]; - var background = raw[8]; - return { - type: 'Pattern', - getPattern: function Mesh_getPattern(ctx, owner, shadingFill) { - var scale; - - if (shadingFill) { - scale = _util.Util.singularValueDecompose2dScale(ctx.mozCurrentTransform); - } else { - scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform); - - if (matrix) { - var matrixScale = _util.Util.singularValueDecompose2dScale(matrix); - - scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]]; - } - } - - var temporaryPatternCanvas = createMeshCanvas(bounds, scale, coords, colors, figures, shadingFill ? null : background, owner.cachedCanvases, owner.webGLContext); - - if (!shadingFill) { - ctx.setTransform.apply(ctx, owner.baseTransform); - - if (matrix) { - ctx.transform.apply(ctx, matrix); - } - } - - ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); - ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY); - return ctx.createPattern(temporaryPatternCanvas.canvas, 'no-repeat'); - } - }; - } - }; - ShadingIRs.Dummy = { - fromIR: function Dummy_fromIR() { - return { - type: 'Pattern', - getPattern: function Dummy_fromIR_getPattern() { - return 'hotpink'; - } - }; - } - }; - - function getShadingPatternFromIR(raw) { - var shadingIR = ShadingIRs[raw[0]]; - - if (!shadingIR) { - throw new Error("Unknown IR type: ".concat(raw[0])); - } - - return shadingIR.fromIR(raw); - } - - var TilingPattern = function TilingPatternClosure() { - var PaintType = { - COLORED: 1, - UNCOLORED: 2 - }; - var MAX_PATTERN_SIZE = 3000; - - function TilingPattern(IR, color, ctx, canvasGraphicsFactory, baseTransform) { - this.operatorList = IR[2]; - this.matrix = IR[3] || [1, 0, 0, 1, 0, 0]; - this.bbox = IR[4]; - this.xstep = IR[5]; - this.ystep = IR[6]; - this.paintType = IR[7]; - this.tilingType = IR[8]; - this.color = color; - this.canvasGraphicsFactory = canvasGraphicsFactory; - this.baseTransform = baseTransform; - this.type = 'Pattern'; - this.ctx = ctx; - } - - TilingPattern.prototype = { - createPatternCanvas: function TilinPattern_createPatternCanvas(owner) { - var operatorList = this.operatorList; - var bbox = this.bbox; - var xstep = this.xstep; - var ystep = this.ystep; - var paintType = this.paintType; - var tilingType = this.tilingType; - var color = this.color; - var canvasGraphicsFactory = this.canvasGraphicsFactory; - (0, _util.info)('TilingType: ' + tilingType); - var x0 = bbox[0], - y0 = bbox[1], - x1 = bbox[2], - y1 = bbox[3]; - var topLeft = [x0, y0]; - var botRight = [x0 + xstep, y0 + ystep]; - var width = botRight[0] - topLeft[0]; - var height = botRight[1] - topLeft[1]; - - var matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix); - - var curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform); - - var combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]]; - width = Math.min(Math.ceil(Math.abs(width * combinedScale[0])), MAX_PATTERN_SIZE); - height = Math.min(Math.ceil(Math.abs(height * combinedScale[1])), MAX_PATTERN_SIZE); - var tmpCanvas = owner.cachedCanvases.getCanvas('pattern', width, height, true); - var tmpCtx = tmpCanvas.context; - var graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx); - graphics.groupLevel = owner.groupLevel; - this.setFillAndStrokeStyleToContext(graphics, paintType, color); - this.setScale(width, height, xstep, ystep); - this.transformToScale(graphics); - var tmpTranslate = [1, 0, 0, 1, -topLeft[0], -topLeft[1]]; - graphics.transform.apply(graphics, tmpTranslate); - this.clipBbox(graphics, bbox, x0, y0, x1, y1); - graphics.executeOperatorList(operatorList); - return tmpCanvas.canvas; - }, - setScale: function TilingPattern_setScale(width, height, xstep, ystep) { - this.scale = [width / xstep, height / ystep]; - }, - transformToScale: function TilingPattern_transformToScale(graphics) { - var scale = this.scale; - var tmpScale = [scale[0], 0, 0, scale[1], 0, 0]; - graphics.transform.apply(graphics, tmpScale); - }, - scaleToContext: function TilingPattern_scaleToContext() { - var scale = this.scale; - this.ctx.scale(1 / scale[0], 1 / scale[1]); - }, - clipBbox: function clipBbox(graphics, bbox, x0, y0, x1, y1) { - if (Array.isArray(bbox) && bbox.length === 4) { - var bboxWidth = x1 - x0; - var bboxHeight = y1 - y0; - graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight); - graphics.clip(); - graphics.endPath(); - } - }, - setFillAndStrokeStyleToContext: function setFillAndStrokeStyleToContext(graphics, paintType, color) { - var context = graphics.ctx, - current = graphics.current; - - switch (paintType) { - case PaintType.COLORED: - var ctx = this.ctx; - context.fillStyle = ctx.fillStyle; - context.strokeStyle = ctx.strokeStyle; - current.fillColor = ctx.fillStyle; - current.strokeColor = ctx.strokeStyle; - break; - - case PaintType.UNCOLORED: - var cssColor = _util.Util.makeCssRgb(color[0], color[1], color[2]); - - context.fillStyle = cssColor; - context.strokeStyle = cssColor; - current.fillColor = cssColor; - current.strokeColor = cssColor; - break; - - default: - throw new _util.FormatError("Unsupported paint type: ".concat(paintType)); - } - }, - getPattern: function TilingPattern_getPattern(ctx, owner) { - var temporaryPatternCanvas = this.createPatternCanvas(owner); - ctx = this.ctx; - ctx.setTransform.apply(ctx, this.baseTransform); - ctx.transform.apply(ctx, this.matrix); - this.scaleToContext(); - return ctx.createPattern(temporaryPatternCanvas, 'repeat'); - } - }; - return TilingPattern; - }(); - - exports.TilingPattern = TilingPattern; - - /***/ }), - /* 156 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.GlobalWorkerOptions = void 0; - var GlobalWorkerOptions = Object.create(null); - exports.GlobalWorkerOptions = GlobalWorkerOptions; - GlobalWorkerOptions.workerPort = GlobalWorkerOptions.workerPort === undefined ? null : GlobalWorkerOptions.workerPort; - GlobalWorkerOptions.workerSrc = GlobalWorkerOptions.workerSrc === undefined ? '' : GlobalWorkerOptions.workerSrc; - - /***/ }), - /* 157 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.MessageHandler = MessageHandler; - - var _regenerator = _interopRequireDefault(__w_extracthighlights_require__(147)); - - var _util = __w_extracthighlights_require__(1); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - - function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - - function resolveCall(_x, _x2) { - return _resolveCall.apply(this, arguments); - } - - function _resolveCall() { - _resolveCall = _asyncToGenerator( - /*#__PURE__*/ - _regenerator.default.mark(function _callee(fn, args) { - var thisArg, - _args = arguments; - return _regenerator.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - thisArg = _args.length > 2 && _args[2] !== undefined ? _args[2] : null; - - if (fn) { - _context.next = 3; - break; - } - - return _context.abrupt("return"); - - case 3: - return _context.abrupt("return", fn.apply(thisArg, args)); - - case 4: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - return _resolveCall.apply(this, arguments); - } - - function wrapReason(reason) { - if (_typeof(reason) !== 'object') { - return reason; - } - - switch (reason.name) { - case 'AbortException': - return new _util.AbortException(reason.message); - - case 'MissingPDFException': - return new _util.MissingPDFException(reason.message); - - case 'UnexpectedResponseException': - return new _util.UnexpectedResponseException(reason.message, reason.status); - - default: - return new _util.UnknownErrorException(reason.message, reason.details); - } - } - - function makeReasonSerializable(reason) { - if (!(reason instanceof Error) || reason instanceof _util.AbortException || reason instanceof _util.MissingPDFException || reason instanceof _util.UnexpectedResponseException || reason instanceof _util.UnknownErrorException) { - return reason; - } - - return new _util.UnknownErrorException(reason.message, reason.toString()); - } - - function resolveOrReject(capability, success, reason) { - if (success) { - capability.resolve(); - } else { - capability.reject(reason); - } - } - - function finalize(promise) { - return Promise.resolve(promise).catch(function () {}); - } - - function MessageHandler(sourceName, targetName, comObj) { - var _this = this; - - this.sourceName = sourceName; - this.targetName = targetName; - this.comObj = comObj; - this.callbackId = 1; - this.streamId = 1; - this.postMessageTransfers = true; - this.streamSinks = Object.create(null); - this.streamControllers = Object.create(null); - var callbacksCapabilities = this.callbacksCapabilities = Object.create(null); - var ah = this.actionHandler = Object.create(null); - - this._onComObjOnMessage = function (event) { - var data = event.data; - - if (data.targetName !== _this.sourceName) { - return; - } - - if (data.stream) { - _this._processStreamMessage(data); - } else if (data.isReply) { - var callbackId = data.callbackId; - - if (data.callbackId in callbacksCapabilities) { - var callback = callbacksCapabilities[callbackId]; - delete callbacksCapabilities[callbackId]; - - if ('error' in data) { - callback.reject(wrapReason(data.error)); - } else { - callback.resolve(data.data); - } - } else { - throw new Error("Cannot resolve callback ".concat(callbackId)); - } - } else if (data.action in ah) { - var action = ah[data.action]; - - if (data.callbackId) { - var _sourceName = _this.sourceName; - var _targetName = data.sourceName; - Promise.resolve().then(function () { - return action[0].call(action[1], data.data); - }).then(function (result) { - comObj.postMessage({ - sourceName: _sourceName, - targetName: _targetName, - isReply: true, - callbackId: data.callbackId, - data: result - }); - }, function (reason) { - comObj.postMessage({ - sourceName: _sourceName, - targetName: _targetName, - isReply: true, - callbackId: data.callbackId, - error: makeReasonSerializable(reason) - }); - }); - } else if (data.streamId) { - _this._createStreamSink(data); - } else { - action[0].call(action[1], data.data); - } - } else { - throw new Error("Unknown action from worker: ".concat(data.action)); - } - }; - - comObj.addEventListener('message', this._onComObjOnMessage); - } - - MessageHandler.prototype = { - on: function on(actionName, handler, scope) { - var ah = this.actionHandler; - - if (ah[actionName]) { - throw new Error("There is already an actionName called \"".concat(actionName, "\"")); - } - - ah[actionName] = [handler, scope]; - }, - send: function send(actionName, data, transfers) { - var message = { - sourceName: this.sourceName, - targetName: this.targetName, - action: actionName, - data: data - }; - this.postMessage(message, transfers); - }, - sendWithPromise: function sendWithPromise(actionName, data, transfers) { - var callbackId = this.callbackId++; - var message = { - sourceName: this.sourceName, - targetName: this.targetName, - action: actionName, - data: data, - callbackId: callbackId - }; - var capability = (0, _util.createPromiseCapability)(); - this.callbacksCapabilities[callbackId] = capability; - - try { - this.postMessage(message, transfers); - } catch (e) { - capability.reject(e); - } - - return capability.promise; - }, - sendWithStream: function sendWithStream(actionName, data, queueingStrategy, transfers) { - var _this2 = this; - - var streamId = this.streamId++; - var sourceName = this.sourceName; - var targetName = this.targetName; - return new _util.ReadableStream({ - start: function start(controller) { - var startCapability = (0, _util.createPromiseCapability)(); - _this2.streamControllers[streamId] = { - controller: controller, - startCall: startCapability, - isClosed: false - }; - - _this2.postMessage({ - sourceName: sourceName, - targetName: targetName, - action: actionName, - streamId: streamId, - data: data, - desiredSize: controller.desiredSize - }); - - return startCapability.promise; - }, - pull: function pull(controller) { - var pullCapability = (0, _util.createPromiseCapability)(); - _this2.streamControllers[streamId].pullCall = pullCapability; - - _this2.postMessage({ - sourceName: sourceName, - targetName: targetName, - stream: 'pull', - streamId: streamId, - desiredSize: controller.desiredSize - }); - - return pullCapability.promise; - }, - cancel: function cancel(reason) { - var cancelCapability = (0, _util.createPromiseCapability)(); - _this2.streamControllers[streamId].cancelCall = cancelCapability; - _this2.streamControllers[streamId].isClosed = true; - - _this2.postMessage({ - sourceName: sourceName, - targetName: targetName, - stream: 'cancel', - reason: reason, - streamId: streamId - }); - - return cancelCapability.promise; - } - }, queueingStrategy); - }, - _createStreamSink: function _createStreamSink(data) { - var _this3 = this; - - var self = this; - var action = this.actionHandler[data.action]; - var streamId = data.streamId; - var desiredSize = data.desiredSize; - var sourceName = this.sourceName; - var targetName = data.sourceName; - var capability = (0, _util.createPromiseCapability)(); - - var sendStreamRequest = function sendStreamRequest(_ref) { - var stream = _ref.stream, - chunk = _ref.chunk, - transfers = _ref.transfers, - success = _ref.success, - reason = _ref.reason; - - _this3.postMessage({ - sourceName: sourceName, - targetName: targetName, - stream: stream, - streamId: streamId, - chunk: chunk, - success: success, - reason: reason - }, transfers); - }; - - var streamSink = { - enqueue: function enqueue(chunk) { - var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; - var transfers = arguments.length > 2 ? arguments[2] : undefined; - - if (this.isCancelled) { - return; - } - - var lastDesiredSize = this.desiredSize; - this.desiredSize -= size; - - if (lastDesiredSize > 0 && this.desiredSize <= 0) { - this.sinkCapability = (0, _util.createPromiseCapability)(); - this.ready = this.sinkCapability.promise; - } - - sendStreamRequest({ - stream: 'enqueue', - chunk: chunk, - transfers: transfers - }); - }, - close: function close() { - if (this.isCancelled) { - return; - } - - this.isCancelled = true; - sendStreamRequest({ - stream: 'close' - }); - delete self.streamSinks[streamId]; - }, - error: function error(reason) { - if (this.isCancelled) { - return; - } - - this.isCancelled = true; - sendStreamRequest({ - stream: 'error', - reason: reason - }); - }, - sinkCapability: capability, - onPull: null, - onCancel: null, - isCancelled: false, - desiredSize: desiredSize, - ready: null - }; - streamSink.sinkCapability.resolve(); - streamSink.ready = streamSink.sinkCapability.promise; - this.streamSinks[streamId] = streamSink; - resolveCall(action[0], [data.data, streamSink], action[1]).then(function () { - sendStreamRequest({ - stream: 'start_complete', - success: true - }); - }, function (reason) { - sendStreamRequest({ - stream: 'start_complete', - success: false, - reason: reason - }); - }); - }, - _processStreamMessage: function _processStreamMessage(data) { - var _this4 = this; - - var sourceName = this.sourceName; - var targetName = data.sourceName; - var streamId = data.streamId; - - var sendStreamResponse = function sendStreamResponse(_ref2) { - var stream = _ref2.stream, - success = _ref2.success, - reason = _ref2.reason; - - _this4.comObj.postMessage({ - sourceName: sourceName, - targetName: targetName, - stream: stream, - success: success, - streamId: streamId, - reason: reason - }); - }; - - var deleteStreamController = function deleteStreamController() { - Promise.all([_this4.streamControllers[data.streamId].startCall, _this4.streamControllers[data.streamId].pullCall, _this4.streamControllers[data.streamId].cancelCall].map(function (capability) { - return capability && finalize(capability.promise); - })).then(function () { - delete _this4.streamControllers[data.streamId]; - }); - }; - - switch (data.stream) { - case 'start_complete': - resolveOrReject(this.streamControllers[data.streamId].startCall, data.success, wrapReason(data.reason)); - break; - - case 'pull_complete': - resolveOrReject(this.streamControllers[data.streamId].pullCall, data.success, wrapReason(data.reason)); - break; - - case 'pull': - if (!this.streamSinks[data.streamId]) { - sendStreamResponse({ - stream: 'pull_complete', - success: true - }); - break; - } - - if (this.streamSinks[data.streamId].desiredSize <= 0 && data.desiredSize > 0) { - this.streamSinks[data.streamId].sinkCapability.resolve(); - } - - this.streamSinks[data.streamId].desiredSize = data.desiredSize; - resolveCall(this.streamSinks[data.streamId].onPull).then(function () { - sendStreamResponse({ - stream: 'pull_complete', - success: true - }); - }, function (reason) { - sendStreamResponse({ - stream: 'pull_complete', - success: false, - reason: reason - }); - }); - break; - - case 'enqueue': - (0, _util.assert)(this.streamControllers[data.streamId], 'enqueue should have stream controller'); - - if (!this.streamControllers[data.streamId].isClosed) { - this.streamControllers[data.streamId].controller.enqueue(data.chunk); - } - - break; - - case 'close': - (0, _util.assert)(this.streamControllers[data.streamId], 'close should have stream controller'); - - if (this.streamControllers[data.streamId].isClosed) { - break; - } - - this.streamControllers[data.streamId].isClosed = true; - this.streamControllers[data.streamId].controller.close(); - deleteStreamController(); - break; - - case 'error': - (0, _util.assert)(this.streamControllers[data.streamId], 'error should have stream controller'); - this.streamControllers[data.streamId].controller.error(wrapReason(data.reason)); - deleteStreamController(); - break; - - case 'cancel_complete': - resolveOrReject(this.streamControllers[data.streamId].cancelCall, data.success, wrapReason(data.reason)); - deleteStreamController(); - break; - - case 'cancel': - if (!this.streamSinks[data.streamId]) { - break; - } - - resolveCall(this.streamSinks[data.streamId].onCancel, [wrapReason(data.reason)]).then(function () { - sendStreamResponse({ - stream: 'cancel_complete', - success: true - }); - }, function (reason) { - sendStreamResponse({ - stream: 'cancel_complete', - success: false, - reason: reason - }); - }); - this.streamSinks[data.streamId].sinkCapability.reject(wrapReason(data.reason)); - this.streamSinks[data.streamId].isCancelled = true; - delete this.streamSinks[data.streamId]; - break; - - default: - throw new Error('Unexpected stream case'); - } - }, - postMessage: function postMessage(message, transfers) { - if (transfers && this.postMessageTransfers) { - this.comObj.postMessage(message, transfers); - } else { - this.comObj.postMessage(message); - } - }, - destroy: function destroy() { - this.comObj.removeEventListener('message', this._onComObjOnMessage); - } - }; - - /***/ }), - /* 158 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.Metadata = void 0; - - var _util = __w_extracthighlights_require__(1); - - var _xml_parser = __w_extracthighlights_require__(159); - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - - var Metadata = - /*#__PURE__*/ - function () { - function Metadata(data) { - _classCallCheck(this, Metadata); - - (0, _util.assert)(typeof data === 'string', 'Metadata: input is not a string'); - data = this._repair(data); - var parser = new _xml_parser.SimpleXMLParser(); - var xmlDocument = parser.parseFromString(data); - this._metadata = Object.create(null); - - if (xmlDocument) { - this._parse(xmlDocument); - } - } - - _createClass(Metadata, [{ - key: "_repair", - value: function _repair(data) { - return data.replace(/^([^<]+)/, '').replace(/>\\376\\377([^<]+)/g, function (all, codes) { - var bytes = codes.replace(/\\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) { - return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1); - }).replace(/&(amp|apos|gt|lt|quot);/g, function (str, name) { - switch (name) { - case 'amp': - return '&'; - - case 'apos': - return '\''; - - case 'gt': - return '>'; - - case 'lt': - return '<'; - - case 'quot': - return '\"'; - } - - throw new Error("_repair: ".concat(name, " isn't defined.")); - }); - var chars = ''; - - for (var i = 0, ii = bytes.length; i < ii; i += 2) { - var code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1); - - if (code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38) { - chars += String.fromCharCode(code); - } else { - chars += '&#x' + (0x10000 + code).toString(16).substring(1) + ';'; - } - } - - return '>' + chars; - }); - } - }, { - key: "_parse", - value: function _parse(xmlDocument) { - var rdf = xmlDocument.documentElement; - - if (rdf.nodeName.toLowerCase() !== 'rdf:rdf') { - rdf = rdf.firstChild; - - while (rdf && rdf.nodeName.toLowerCase() !== 'rdf:rdf') { - rdf = rdf.nextSibling; - } - } - - var nodeName = rdf ? rdf.nodeName.toLowerCase() : null; - - if (!rdf || nodeName !== 'rdf:rdf' || !rdf.hasChildNodes()) { - return; - } - - var children = rdf.childNodes; - - for (var i = 0, ii = children.length; i < ii; i++) { - var desc = children[i]; - - if (desc.nodeName.toLowerCase() !== 'rdf:description') { - continue; - } - - for (var j = 0, jj = desc.childNodes.length; j < jj; j++) { - if (desc.childNodes[j].nodeName.toLowerCase() !== '#text') { - var entry = desc.childNodes[j]; - var name = entry.nodeName.toLowerCase(); - this._metadata[name] = entry.textContent.trim(); - } - } - } - } - }, { - key: "get", - value: function get(name) { - var data = this._metadata[name]; - return typeof data !== 'undefined' ? data : null; - } - }, { - key: "getAll", - value: function getAll() { - return this._metadata; - } - }, { - key: "has", - value: function has(name) { - return typeof this._metadata[name] !== 'undefined'; - } - }]); - - return Metadata; - }(); - - exports.Metadata = Metadata; - - /***/ }), - /* 159 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.SimpleXMLParser = void 0; - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } - - function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } - - function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } - - function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } - - function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - - function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - - function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } - - function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } - - function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - - function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - - var XMLParserErrorCode = { - NoError: 0, - EndOfDocument: -1, - UnterminatedCdat: -2, - UnterminatedXmlDeclaration: -3, - UnterminatedDoctypeDeclaration: -4, - UnterminatedComment: -5, - MalformedElement: -6, - OutOfMemory: -7, - UnterminatedAttributeValue: -8, - UnterminatedElement: -9, - ElementNeverBegun: -10 - }; - - function isWhitespace(s, index) { - var ch = s[index]; - return ch === ' ' || ch === '\n' || ch === '\r' || ch === '\t'; - } - - function isWhitespaceString(s) { - for (var i = 0, ii = s.length; i < ii; i++) { - if (!isWhitespace(s, i)) { - return false; - } - } - - return true; - } - - var XMLParserBase = - /*#__PURE__*/ - function () { - function XMLParserBase() { - _classCallCheck(this, XMLParserBase); - } - - _createClass(XMLParserBase, [{ - key: "_resolveEntities", - value: function _resolveEntities(s) { - var _this = this; - - return s.replace(/&([^;]+);/g, function (all, entity) { - if (entity.substring(0, 2) === '#x') { - return String.fromCharCode(parseInt(entity.substring(2), 16)); - } else if (entity.substring(0, 1) === '#') { - return String.fromCharCode(parseInt(entity.substring(1), 10)); - } - - switch (entity) { - case 'lt': - return '<'; - - case 'gt': - return '>'; - - case 'amp': - return '&'; - - case 'quot': - return '\"'; - } - - return _this.onResolveEntity(entity); - }); - } - }, { - key: "_parseContent", - value: function _parseContent(s, start) { - var pos = start, - name, - attributes = []; - - function skipWs() { - while (pos < s.length && isWhitespace(s, pos)) { - ++pos; - } - } - - while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== '>' && s[pos] !== '/') { - ++pos; - } - - name = s.substring(start, pos); - skipWs(); - - while (pos < s.length && s[pos] !== '>' && s[pos] !== '/' && s[pos] !== '?') { - skipWs(); - var attrName = '', - attrValue = ''; - - while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== '=') { - attrName += s[pos]; - ++pos; - } - - skipWs(); - - if (s[pos] !== '=') { - return null; - } - - ++pos; - skipWs(); - var attrEndChar = s[pos]; - - if (attrEndChar !== '\"' && attrEndChar !== '\'') { - return null; - } - - var attrEndIndex = s.indexOf(attrEndChar, ++pos); - - if (attrEndIndex < 0) { - return null; - } - - attrValue = s.substring(pos, attrEndIndex); - attributes.push({ - name: attrName, - value: this._resolveEntities(attrValue) - }); - pos = attrEndIndex + 1; - skipWs(); - } - - return { - name: name, - attributes: attributes, - parsed: pos - start - }; - } - }, { - key: "_parseProcessingInstruction", - value: function _parseProcessingInstruction(s, start) { - var pos = start, - name, - value; - - function skipWs() { - while (pos < s.length && isWhitespace(s, pos)) { - ++pos; - } - } - - while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== '>' && s[pos] !== '/') { - ++pos; - } - - name = s.substring(start, pos); - skipWs(); - var attrStart = pos; - - while (pos < s.length && (s[pos] !== '?' || s[pos + 1] !== '>')) { - ++pos; - } - - value = s.substring(attrStart, pos); - return { - name: name, - value: value, - parsed: pos - start - }; - } - }, { - key: "parseXml", - value: function parseXml(s) { - var i = 0; - - while (i < s.length) { - var ch = s[i]; - var j = i; - - if (ch === '<') { - ++j; - var ch2 = s[j]; - var q = void 0; - - switch (ch2) { - case '/': - ++j; - q = s.indexOf('>', j); - - if (q < 0) { - this.onError(XMLParserErrorCode.UnterminatedElement); - return; - } - - this.onEndElement(s.substring(j, q)); - j = q + 1; - break; - - case '?': - ++j; - - var pi = this._parseProcessingInstruction(s, j); - - if (s.substring(j + pi.parsed, j + pi.parsed + 2) !== '?>') { - this.onError(XMLParserErrorCode.UnterminatedXmlDeclaration); - return; - } - - this.onPi(pi.name, pi.value); - j += pi.parsed + 2; - break; - - case '!': - if (s.substring(j + 1, j + 3) === '--') { - q = s.indexOf('-->', j + 3); - - if (q < 0) { - this.onError(XMLParserErrorCode.UnterminatedComment); - return; - } - - this.onComment(s.substring(j + 3, q)); - j = q + 3; - } else if (s.substring(j + 1, j + 8) === '[CDATA[') { - q = s.indexOf(']]>', j + 8); - - if (q < 0) { - this.onError(XMLParserErrorCode.UnterminatedCdat); - return; - } - - this.onCdata(s.substring(j + 8, q)); - j = q + 3; - } else if (s.substring(j + 1, j + 8) === 'DOCTYPE') { - var q2 = s.indexOf('[', j + 8); - var complexDoctype = false; - q = s.indexOf('>', j + 8); - - if (q < 0) { - this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration); - return; - } - - if (q2 > 0 && q > q2) { - q = s.indexOf(']>', j + 8); - - if (q < 0) { - this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration); - return; - } - - complexDoctype = true; - } - - var doctypeContent = s.substring(j + 8, q + (complexDoctype ? 1 : 0)); - this.onDoctype(doctypeContent); - j = q + (complexDoctype ? 2 : 1); - } else { - this.onError(XMLParserErrorCode.MalformedElement); - return; - } - - break; - - default: - var content = this._parseContent(s, j); - - if (content === null) { - this.onError(XMLParserErrorCode.MalformedElement); - return; - } - - var isClosed = false; - - if (s.substring(j + content.parsed, j + content.parsed + 2) === '/>') { - isClosed = true; - } else if (s.substring(j + content.parsed, j + content.parsed + 1) !== '>') { - this.onError(XMLParserErrorCode.UnterminatedElement); - return; - } - - this.onBeginElement(content.name, content.attributes, isClosed); - j += content.parsed + (isClosed ? 2 : 1); - break; - } - } else { - while (j < s.length && s[j] !== '<') { - j++; - } - - var text = s.substring(i, j); - this.onText(this._resolveEntities(text)); - } - - i = j; - } - } - }, { - key: "onResolveEntity", - value: function onResolveEntity(name) { - return "&".concat(name, ";"); - } - }, { - key: "onPi", - value: function onPi(name, value) {} - }, { - key: "onComment", - value: function onComment(text) {} - }, { - key: "onCdata", - value: function onCdata(text) {} - }, { - key: "onDoctype", - value: function onDoctype(doctypeContent) {} - }, { - key: "onText", - value: function onText(text) {} - }, { - key: "onBeginElement", - value: function onBeginElement(name, attributes, isEmpty) {} - }, { - key: "onEndElement", - value: function onEndElement(name) {} - }, { - key: "onError", - value: function onError(code) {} - }]); - - return XMLParserBase; - }(); - - var SimpleDOMNode = - /*#__PURE__*/ - function () { - function SimpleDOMNode(nodeName, nodeValue) { - _classCallCheck(this, SimpleDOMNode); - - this.nodeName = nodeName; - this.nodeValue = nodeValue; - Object.defineProperty(this, 'parentNode', { - value: null, - writable: true - }); - } - - _createClass(SimpleDOMNode, [{ - key: "hasChildNodes", - value: function hasChildNodes() { - return this.childNodes && this.childNodes.length > 0; - } - }, { - key: "firstChild", - get: function get() { - return this.childNodes && this.childNodes[0]; - } - }, { - key: "nextSibling", - get: function get() { - var childNodes = this.parentNode.childNodes; - - if (!childNodes) { - return undefined; - } - - var index = childNodes.indexOf(this); - - if (index === -1) { - return undefined; - } - - return childNodes[index + 1]; - } - }, { - key: "textContent", - get: function get() { - if (!this.childNodes) { - return this.nodeValue || ''; - } - - return this.childNodes.map(function (child) { - return child.textContent; - }).join(''); - } - }]); - - return SimpleDOMNode; - }(); - - var SimpleXMLParser = - /*#__PURE__*/ - function (_XMLParserBase) { - _inherits(SimpleXMLParser, _XMLParserBase); - - function SimpleXMLParser() { - var _this2; - - _classCallCheck(this, SimpleXMLParser); - - _this2 = _possibleConstructorReturn(this, _getPrototypeOf(SimpleXMLParser).call(this)); - _this2._currentFragment = null; - _this2._stack = null; - _this2._errorCode = XMLParserErrorCode.NoError; - return _this2; - } - - _createClass(SimpleXMLParser, [{ - key: "parseFromString", - value: function parseFromString(data) { - this._currentFragment = []; - this._stack = []; - this._errorCode = XMLParserErrorCode.NoError; - this.parseXml(data); - - if (this._errorCode !== XMLParserErrorCode.NoError) { - return undefined; - } - - var _this$_currentFragmen = _slicedToArray(this._currentFragment, 1), - documentElement = _this$_currentFragmen[0]; - - if (!documentElement) { - return undefined; - } - - return { - documentElement: documentElement - }; - } - }, { - key: "onResolveEntity", - value: function onResolveEntity(name) { - switch (name) { - case 'apos': - return '\''; - } - - return _get(_getPrototypeOf(SimpleXMLParser.prototype), "onResolveEntity", this).call(this, name); - } - }, { - key: "onText", - value: function onText(text) { - if (isWhitespaceString(text)) { - return; - } - - var node = new SimpleDOMNode('#text', text); - - this._currentFragment.push(node); - } - }, { - key: "onCdata", - value: function onCdata(text) { - var node = new SimpleDOMNode('#text', text); - - this._currentFragment.push(node); - } - }, { - key: "onBeginElement", - value: function onBeginElement(name, attributes, isEmpty) { - var node = new SimpleDOMNode(name); - node.childNodes = []; - - this._currentFragment.push(node); - - if (isEmpty) { - return; - } - - this._stack.push(this._currentFragment); - - this._currentFragment = node.childNodes; - } - }, { - key: "onEndElement", - value: function onEndElement(name) { - this._currentFragment = this._stack.pop() || []; - var lastElement = this._currentFragment[this._currentFragment.length - 1]; - - if (!lastElement) { - return; - } - - for (var i = 0, ii = lastElement.childNodes.length; i < ii; i++) { - lastElement.childNodes[i].parentNode = lastElement; - } - } - }, { - key: "onError", - value: function onError(code) { - this._errorCode = code; - } - }]); - - return SimpleXMLParser; - }(XMLParserBase); - - exports.SimpleXMLParser = SimpleXMLParser; - - /***/ }), - /* 160 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.PDFDataTransportStream = void 0; - - var _regenerator = _interopRequireDefault(__w_extracthighlights_require__(147)); - - var _util = __w_extracthighlights_require__(1); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - - function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - - var PDFDataTransportStream = function PDFDataTransportStreamClosure() { - function PDFDataTransportStream(params, pdfDataRangeTransport) { - var _this = this; - - (0, _util.assert)(pdfDataRangeTransport); - this._queuedChunks = []; - var initialData = params.initialData; - - if (initialData && initialData.length > 0) { - var buffer = new Uint8Array(initialData).buffer; - - this._queuedChunks.push(buffer); - } - - this._pdfDataRangeTransport = pdfDataRangeTransport; - this._isStreamingSupported = !params.disableStream; - this._isRangeSupported = !params.disableRange; - this._contentLength = params.length; - this._fullRequestReader = null; - this._rangeReaders = []; - - this._pdfDataRangeTransport.addRangeListener(function (begin, chunk) { - _this._onReceiveData({ - begin: begin, - chunk: chunk - }); - }); - - this._pdfDataRangeTransport.addProgressListener(function (loaded) { - _this._onProgress({ - loaded: loaded - }); - }); - - this._pdfDataRangeTransport.addProgressiveReadListener(function (chunk) { - _this._onReceiveData({ - chunk: chunk - }); - }); - - this._pdfDataRangeTransport.transportReady(); - } - - PDFDataTransportStream.prototype = { - _onReceiveData: function PDFDataTransportStream_onReceiveData(args) { - var buffer = new Uint8Array(args.chunk).buffer; - - if (args.begin === undefined) { - if (this._fullRequestReader) { - this._fullRequestReader._enqueue(buffer); - } else { - this._queuedChunks.push(buffer); - } - } else { - var found = this._rangeReaders.some(function (rangeReader) { - if (rangeReader._begin !== args.begin) { - return false; - } - - rangeReader._enqueue(buffer); - - return true; - }); - - (0, _util.assert)(found); - } - }, - _onProgress: function PDFDataTransportStream_onDataProgress(evt) { - if (this._rangeReaders.length > 0) { - var firstReader = this._rangeReaders[0]; - - if (firstReader.onProgress) { - firstReader.onProgress({ - loaded: evt.loaded - }); - } - } - }, - _removeRangeReader: function PDFDataTransportStream_removeRangeReader(reader) { - var i = this._rangeReaders.indexOf(reader); - - if (i >= 0) { - this._rangeReaders.splice(i, 1); - } - }, - getFullReader: function PDFDataTransportStream_getFullReader() { - (0, _util.assert)(!this._fullRequestReader); - var queuedChunks = this._queuedChunks; - this._queuedChunks = null; - return new PDFDataTransportStreamReader(this, queuedChunks); - }, - getRangeReader: function PDFDataTransportStream_getRangeReader(begin, end) { - var reader = new PDFDataTransportStreamRangeReader(this, begin, end); - - this._pdfDataRangeTransport.requestDataRange(begin, end); - - this._rangeReaders.push(reader); - - return reader; - }, - cancelAllRequests: function PDFDataTransportStream_cancelAllRequests(reason) { - if (this._fullRequestReader) { - this._fullRequestReader.cancel(reason); - } - - var readers = this._rangeReaders.slice(0); - - readers.forEach(function (rangeReader) { - rangeReader.cancel(reason); - }); - - this._pdfDataRangeTransport.abort(); - } - }; - - function PDFDataTransportStreamReader(stream, queuedChunks) { - this._stream = stream; - this._done = false; - this._filename = null; - this._queuedChunks = queuedChunks || []; - this._requests = []; - this._headersReady = Promise.resolve(); - stream._fullRequestReader = this; - this.onProgress = null; - } - - PDFDataTransportStreamReader.prototype = { - _enqueue: function PDFDataTransportStreamReader_enqueue(chunk) { - if (this._done) { - return; - } - - if (this._requests.length > 0) { - var requestCapability = this._requests.shift(); - - requestCapability.resolve({ - value: chunk, - done: false - }); - return; - } - - this._queuedChunks.push(chunk); - }, - - get headersReady() { - return this._headersReady; - }, - - get filename() { - return this._filename; - }, - - get isRangeSupported() { - return this._stream._isRangeSupported; - }, - - get isStreamingSupported() { - return this._stream._isStreamingSupported; - }, - - get contentLength() { - return this._stream._contentLength; - }, - - read: function () { - var _read = _asyncToGenerator( - /*#__PURE__*/ - _regenerator.default.mark(function _callee() { - var chunk, requestCapability; - return _regenerator.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - if (!(this._queuedChunks.length > 0)) { - _context.next = 3; - break; - } - - chunk = this._queuedChunks.shift(); - return _context.abrupt("return", { - value: chunk, - done: false - }); - - case 3: - if (!this._done) { - _context.next = 5; - break; - } - - return _context.abrupt("return", { - value: undefined, - done: true - }); - - case 5: - requestCapability = (0, _util.createPromiseCapability)(); - - this._requests.push(requestCapability); - - return _context.abrupt("return", requestCapability.promise); - - case 8: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - - function read() { - return _read.apply(this, arguments); - } - - return read; - }(), - cancel: function PDFDataTransportStreamReader_cancel(reason) { - this._done = true; - - this._requests.forEach(function (requestCapability) { - requestCapability.resolve({ - value: undefined, - done: true - }); - }); - - this._requests = []; - } - }; - - function PDFDataTransportStreamRangeReader(stream, begin, end) { - this._stream = stream; - this._begin = begin; - this._end = end; - this._queuedChunk = null; - this._requests = []; - this._done = false; - this.onProgress = null; - } - - PDFDataTransportStreamRangeReader.prototype = { - _enqueue: function PDFDataTransportStreamRangeReader_enqueue(chunk) { - if (this._done) { - return; - } - - if (this._requests.length === 0) { - this._queuedChunk = chunk; - } else { - var requestsCapability = this._requests.shift(); - - requestsCapability.resolve({ - value: chunk, - done: false - }); - - this._requests.forEach(function (requestCapability) { - requestCapability.resolve({ - value: undefined, - done: true - }); - }); - - this._requests = []; - } - - this._done = true; - - this._stream._removeRangeReader(this); - }, - - get isStreamingSupported() { - return false; - }, - - read: function () { - var _read2 = _asyncToGenerator( - /*#__PURE__*/ - _regenerator.default.mark(function _callee2() { - var chunk, requestCapability; - return _regenerator.default.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - if (!this._queuedChunk) { - _context2.next = 4; - break; - } - - chunk = this._queuedChunk; - this._queuedChunk = null; - return _context2.abrupt("return", { - value: chunk, - done: false - }); - - case 4: - if (!this._done) { - _context2.next = 6; - break; - } - - return _context2.abrupt("return", { - value: undefined, - done: true - }); - - case 6: - requestCapability = (0, _util.createPromiseCapability)(); - - this._requests.push(requestCapability); - - return _context2.abrupt("return", requestCapability.promise); - - case 9: - case "end": - return _context2.stop(); - } - } - }, _callee2, this); - })); - - function read() { - return _read2.apply(this, arguments); - } - - return read; - }(), - cancel: function PDFDataTransportStreamRangeReader_cancel(reason) { - this._done = true; - - this._requests.forEach(function (requestCapability) { - requestCapability.resolve({ - value: undefined, - done: true - }); - }); - - this._requests = []; - - this._stream._removeRangeReader(this); - } - }; - return PDFDataTransportStream; - }(); - - exports.PDFDataTransportStream = PDFDataTransportStream; - - /***/ }), - /* 161 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.WebGLContext = void 0; - - var _util = __w_extracthighlights_require__(1); - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - - var WebGLContext = - /*#__PURE__*/ - function () { - function WebGLContext(_ref) { - var _ref$enable = _ref.enable, - enable = _ref$enable === void 0 ? false : _ref$enable; - - _classCallCheck(this, WebGLContext); - - this._enabled = enable === true; - } - - _createClass(WebGLContext, [{ - key: "composeSMask", - value: function composeSMask(_ref2) { - var layer = _ref2.layer, - mask = _ref2.mask, - properties = _ref2.properties; - return WebGLUtils.composeSMask(layer, mask, properties); - } - }, { - key: "drawFigures", - value: function drawFigures(_ref3) { - var width = _ref3.width, - height = _ref3.height, - backgroundColor = _ref3.backgroundColor, - figures = _ref3.figures, - context = _ref3.context; - return WebGLUtils.drawFigures(width, height, backgroundColor, figures, context); - } - }, { - key: "clear", - value: function clear() { - WebGLUtils.cleanup(); - } - }, { - key: "isEnabled", - get: function get() { - var enabled = this._enabled; - - if (enabled) { - enabled = WebGLUtils.tryInitGL(); - } - - return (0, _util.shadow)(this, 'isEnabled', enabled); - } - }]); - - return WebGLContext; - }(); - - exports.WebGLContext = WebGLContext; - - var WebGLUtils = function WebGLUtilsClosure() { - function loadShader(gl, code, shaderType) { - var shader = gl.createShader(shaderType); - gl.shaderSource(shader, code); - gl.compileShader(shader); - var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS); - - if (!compiled) { - var errorMsg = gl.getShaderInfoLog(shader); - throw new Error('Error during shader compilation: ' + errorMsg); - } - - return shader; - } - - function createVertexShader(gl, code) { - return loadShader(gl, code, gl.VERTEX_SHADER); - } - - function createFragmentShader(gl, code) { - return loadShader(gl, code, gl.FRAGMENT_SHADER); - } - - function createProgram(gl, shaders) { - var program = gl.createProgram(); - - for (var i = 0, ii = shaders.length; i < ii; ++i) { - gl.attachShader(program, shaders[i]); - } - - gl.linkProgram(program); - var linked = gl.getProgramParameter(program, gl.LINK_STATUS); - - if (!linked) { - var errorMsg = gl.getProgramInfoLog(program); - throw new Error('Error during program linking: ' + errorMsg); - } - - return program; - } - - function createTexture(gl, image, textureId) { - gl.activeTexture(textureId); - var texture = gl.createTexture(); - gl.bindTexture(gl.TEXTURE_2D, texture); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); - gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image); - return texture; - } - - var currentGL, currentCanvas; - - function generateGL() { - if (currentGL) { - return; - } - - currentCanvas = document.createElement('canvas'); - currentGL = currentCanvas.getContext('webgl', { - premultipliedalpha: false - }); - } - - var smaskVertexShaderCode = '\ - attribute vec2 a_position; \ - attribute vec2 a_texCoord; \ - \ - uniform vec2 u_resolution; \ - \ - varying vec2 v_texCoord; \ - \ - void main() { \ - vec2 clipSpace = (a_position / u_resolution) * 2.0 - 1.0; \ - gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); \ - \ - v_texCoord = a_texCoord; \ - } '; - var smaskFragmentShaderCode = '\ - precision mediump float; \ - \ - uniform vec4 u_backdrop; \ - uniform int u_subtype; \ - uniform sampler2D u_image; \ - uniform sampler2D u_mask; \ - \ - varying vec2 v_texCoord; \ - \ - void main() { \ - vec4 imageColor = texture2D(u_image, v_texCoord); \ - vec4 maskColor = texture2D(u_mask, v_texCoord); \ - if (u_backdrop.a > 0.0) { \ - maskColor.rgb = maskColor.rgb * maskColor.a + \ - u_backdrop.rgb * (1.0 - maskColor.a); \ - } \ - float lum; \ - if (u_subtype == 0) { \ - lum = maskColor.a; \ - } else { \ - lum = maskColor.r * 0.3 + maskColor.g * 0.59 + \ - maskColor.b * 0.11; \ - } \ - imageColor.a *= lum; \ - imageColor.rgb *= imageColor.a; \ - gl_FragColor = imageColor; \ - } '; - var smaskCache = null; - - function initSmaskGL() { - var canvas, gl; - generateGL(); - canvas = currentCanvas; - currentCanvas = null; - gl = currentGL; - currentGL = null; - var vertexShader = createVertexShader(gl, smaskVertexShaderCode); - var fragmentShader = createFragmentShader(gl, smaskFragmentShaderCode); - var program = createProgram(gl, [vertexShader, fragmentShader]); - gl.useProgram(program); - var cache = {}; - cache.gl = gl; - cache.canvas = canvas; - cache.resolutionLocation = gl.getUniformLocation(program, 'u_resolution'); - cache.positionLocation = gl.getAttribLocation(program, 'a_position'); - cache.backdropLocation = gl.getUniformLocation(program, 'u_backdrop'); - cache.subtypeLocation = gl.getUniformLocation(program, 'u_subtype'); - var texCoordLocation = gl.getAttribLocation(program, 'a_texCoord'); - var texLayerLocation = gl.getUniformLocation(program, 'u_image'); - var texMaskLocation = gl.getUniformLocation(program, 'u_mask'); - var texCoordBuffer = gl.createBuffer(); - gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer); - gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0]), gl.STATIC_DRAW); - gl.enableVertexAttribArray(texCoordLocation); - gl.vertexAttribPointer(texCoordLocation, 2, gl.FLOAT, false, 0, 0); - gl.uniform1i(texLayerLocation, 0); - gl.uniform1i(texMaskLocation, 1); - smaskCache = cache; - } - - function composeSMask(layer, mask, properties) { - var width = layer.width, - height = layer.height; - - if (!smaskCache) { - initSmaskGL(); - } - - var cache = smaskCache, - canvas = cache.canvas, - gl = cache.gl; - canvas.width = width; - canvas.height = height; - gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); - gl.uniform2f(cache.resolutionLocation, width, height); - - if (properties.backdrop) { - gl.uniform4f(cache.resolutionLocation, properties.backdrop[0], properties.backdrop[1], properties.backdrop[2], 1); - } else { - gl.uniform4f(cache.resolutionLocation, 0, 0, 0, 0); - } - - gl.uniform1i(cache.subtypeLocation, properties.subtype === 'Luminosity' ? 1 : 0); - var texture = createTexture(gl, layer, gl.TEXTURE0); - var maskTexture = createTexture(gl, mask, gl.TEXTURE1); - var buffer = gl.createBuffer(); - gl.bindBuffer(gl.ARRAY_BUFFER, buffer); - gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0, 0, width, 0, 0, height, 0, height, width, 0, width, height]), gl.STATIC_DRAW); - gl.enableVertexAttribArray(cache.positionLocation); - gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0); - gl.clearColor(0, 0, 0, 0); - gl.enable(gl.BLEND); - gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); - gl.clear(gl.COLOR_BUFFER_BIT); - gl.drawArrays(gl.TRIANGLES, 0, 6); - gl.flush(); - gl.deleteTexture(texture); - gl.deleteTexture(maskTexture); - gl.deleteBuffer(buffer); - return canvas; - } - - var figuresVertexShaderCode = '\ - attribute vec2 a_position; \ - attribute vec3 a_color; \ - \ - uniform vec2 u_resolution; \ - uniform vec2 u_scale; \ - uniform vec2 u_offset; \ - \ - varying vec4 v_color; \ - \ - void main() { \ - vec2 position = (a_position + u_offset) * u_scale; \ - vec2 clipSpace = (position / u_resolution) * 2.0 - 1.0; \ - gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); \ - \ - v_color = vec4(a_color / 255.0, 1.0); \ - } '; - var figuresFragmentShaderCode = '\ - precision mediump float; \ - \ - varying vec4 v_color; \ - \ - void main() { \ - gl_FragColor = v_color; \ - } '; - var figuresCache = null; - - function initFiguresGL() { - var canvas, gl; - generateGL(); - canvas = currentCanvas; - currentCanvas = null; - gl = currentGL; - currentGL = null; - var vertexShader = createVertexShader(gl, figuresVertexShaderCode); - var fragmentShader = createFragmentShader(gl, figuresFragmentShaderCode); - var program = createProgram(gl, [vertexShader, fragmentShader]); - gl.useProgram(program); - var cache = {}; - cache.gl = gl; - cache.canvas = canvas; - cache.resolutionLocation = gl.getUniformLocation(program, 'u_resolution'); - cache.scaleLocation = gl.getUniformLocation(program, 'u_scale'); - cache.offsetLocation = gl.getUniformLocation(program, 'u_offset'); - cache.positionLocation = gl.getAttribLocation(program, 'a_position'); - cache.colorLocation = gl.getAttribLocation(program, 'a_color'); - figuresCache = cache; - } - - function drawFigures(width, height, backgroundColor, figures, context) { - if (!figuresCache) { - initFiguresGL(); - } - - var cache = figuresCache, - canvas = cache.canvas, - gl = cache.gl; - canvas.width = width; - canvas.height = height; - gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); - gl.uniform2f(cache.resolutionLocation, width, height); - var count = 0; - var i, ii, rows; - - for (i = 0, ii = figures.length; i < ii; i++) { - switch (figures[i].type) { - case 'lattice': - rows = figures[i].coords.length / figures[i].verticesPerRow | 0; - count += (rows - 1) * (figures[i].verticesPerRow - 1) * 6; - break; - - case 'triangles': - count += figures[i].coords.length; - break; - } - } - - var coords = new Float32Array(count * 2); - var colors = new Uint8Array(count * 3); - var coordsMap = context.coords, - colorsMap = context.colors; - var pIndex = 0, - cIndex = 0; - - for (i = 0, ii = figures.length; i < ii; i++) { - var figure = figures[i], - ps = figure.coords, - cs = figure.colors; - - switch (figure.type) { - case 'lattice': - var cols = figure.verticesPerRow; - rows = ps.length / cols | 0; - - for (var row = 1; row < rows; row++) { - var offset = row * cols + 1; - - for (var col = 1; col < cols; col++, offset++) { - coords[pIndex] = coordsMap[ps[offset - cols - 1]]; - coords[pIndex + 1] = coordsMap[ps[offset - cols - 1] + 1]; - coords[pIndex + 2] = coordsMap[ps[offset - cols]]; - coords[pIndex + 3] = coordsMap[ps[offset - cols] + 1]; - coords[pIndex + 4] = coordsMap[ps[offset - 1]]; - coords[pIndex + 5] = coordsMap[ps[offset - 1] + 1]; - colors[cIndex] = colorsMap[cs[offset - cols - 1]]; - colors[cIndex + 1] = colorsMap[cs[offset - cols - 1] + 1]; - colors[cIndex + 2] = colorsMap[cs[offset - cols - 1] + 2]; - colors[cIndex + 3] = colorsMap[cs[offset - cols]]; - colors[cIndex + 4] = colorsMap[cs[offset - cols] + 1]; - colors[cIndex + 5] = colorsMap[cs[offset - cols] + 2]; - colors[cIndex + 6] = colorsMap[cs[offset - 1]]; - colors[cIndex + 7] = colorsMap[cs[offset - 1] + 1]; - colors[cIndex + 8] = colorsMap[cs[offset - 1] + 2]; - coords[pIndex + 6] = coords[pIndex + 2]; - coords[pIndex + 7] = coords[pIndex + 3]; - coords[pIndex + 8] = coords[pIndex + 4]; - coords[pIndex + 9] = coords[pIndex + 5]; - coords[pIndex + 10] = coordsMap[ps[offset]]; - coords[pIndex + 11] = coordsMap[ps[offset] + 1]; - colors[cIndex + 9] = colors[cIndex + 3]; - colors[cIndex + 10] = colors[cIndex + 4]; - colors[cIndex + 11] = colors[cIndex + 5]; - colors[cIndex + 12] = colors[cIndex + 6]; - colors[cIndex + 13] = colors[cIndex + 7]; - colors[cIndex + 14] = colors[cIndex + 8]; - colors[cIndex + 15] = colorsMap[cs[offset]]; - colors[cIndex + 16] = colorsMap[cs[offset] + 1]; - colors[cIndex + 17] = colorsMap[cs[offset] + 2]; - pIndex += 12; - cIndex += 18; - } - } - - break; - - case 'triangles': - for (var j = 0, jj = ps.length; j < jj; j++) { - coords[pIndex] = coordsMap[ps[j]]; - coords[pIndex + 1] = coordsMap[ps[j] + 1]; - colors[cIndex] = colorsMap[cs[j]]; - colors[cIndex + 1] = colorsMap[cs[j] + 1]; - colors[cIndex + 2] = colorsMap[cs[j] + 2]; - pIndex += 2; - cIndex += 3; - } - - break; - } - } - - if (backgroundColor) { - gl.clearColor(backgroundColor[0] / 255, backgroundColor[1] / 255, backgroundColor[2] / 255, 1.0); - } else { - gl.clearColor(0, 0, 0, 0); - } - - gl.clear(gl.COLOR_BUFFER_BIT); - var coordsBuffer = gl.createBuffer(); - gl.bindBuffer(gl.ARRAY_BUFFER, coordsBuffer); - gl.bufferData(gl.ARRAY_BUFFER, coords, gl.STATIC_DRAW); - gl.enableVertexAttribArray(cache.positionLocation); - gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0); - var colorsBuffer = gl.createBuffer(); - gl.bindBuffer(gl.ARRAY_BUFFER, colorsBuffer); - gl.bufferData(gl.ARRAY_BUFFER, colors, gl.STATIC_DRAW); - gl.enableVertexAttribArray(cache.colorLocation); - gl.vertexAttribPointer(cache.colorLocation, 3, gl.UNSIGNED_BYTE, false, 0, 0); - gl.uniform2f(cache.scaleLocation, context.scaleX, context.scaleY); - gl.uniform2f(cache.offsetLocation, context.offsetX, context.offsetY); - gl.drawArrays(gl.TRIANGLES, 0, count); - gl.flush(); - gl.deleteBuffer(coordsBuffer); - gl.deleteBuffer(colorsBuffer); - return canvas; - } - - return { - tryInitGL: function tryInitGL() { - try { - generateGL(); - return !!currentGL; - } catch (ex) {} - - return false; - }, - composeSMask: composeSMask, - drawFigures: drawFigures, - cleanup: function cleanup() { - if (smaskCache && smaskCache.canvas) { - smaskCache.canvas.width = 0; - smaskCache.canvas.height = 0; - } - - if (figuresCache && figuresCache.canvas) { - figuresCache.canvas.width = 0; - figuresCache.canvas.height = 0; - } - - smaskCache = null; - figuresCache = null; - } - }; - }(); - - /***/ }), - /* 162 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.renderTextLayer = void 0; - - var _util = __w_extracthighlights_require__(1); - - var _global_scope = _interopRequireDefault(__w_extracthighlights_require__(3)); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var renderTextLayer = function renderTextLayerClosure() { - var MAX_TEXT_DIVS_TO_RENDER = 100000; - var NonWhitespaceRegexp = /\S/; - - function isAllWhitespace(str) { - return !NonWhitespaceRegexp.test(str); - } - - var styleBuf = ['left: ', 0, 'px; top: ', 0, 'px; font-size: ', 0, 'px; font-family: ', '', ';']; - - function appendText(task, geom, styles) { - var textDiv = document.createElement('span'); - var textDivProperties = { - style: null, - angle: 0, - canvasWidth: 0, - isWhitespace: false, - originalTransform: null, - paddingBottom: 0, - paddingLeft: 0, - paddingRight: 0, - paddingTop: 0, - scale: 1 - }; - - task._textDivs.push(textDiv); - - if (isAllWhitespace(geom.str)) { - textDivProperties.isWhitespace = true; - - task._textDivProperties.set(textDiv, textDivProperties); - - return; - } - - var tx = _util.Util.transform(task._viewport.transform, geom.transform); - - var angle = Math.atan2(tx[1], tx[0]); - var style = styles[geom.fontName]; - - if (style.vertical) { - angle += Math.PI / 2; - } - - var fontHeight = Math.sqrt(tx[2] * tx[2] + tx[3] * tx[3]); - var fontAscent = fontHeight; - - if (style.ascent) { - fontAscent = style.ascent * fontAscent; - } else if (style.descent) { - fontAscent = (1 + style.descent) * fontAscent; - } - - var left; - var top; - - if (angle === 0) { - left = tx[4]; - top = tx[5] - fontAscent; - } else { - left = tx[4] + fontAscent * Math.sin(angle); - top = tx[5] - fontAscent * Math.cos(angle); - } - - styleBuf[1] = left; - styleBuf[3] = top; - styleBuf[5] = fontHeight; - styleBuf[7] = style.fontFamily; - textDivProperties.style = styleBuf.join(''); - textDiv.setAttribute('style', textDivProperties.style); - textDiv.textContent = geom.str; - - if (task._fontInspectorEnabled) { - textDiv.dataset.fontName = geom.fontName; - } - - if (angle !== 0) { - textDivProperties.angle = angle * (180 / Math.PI); - } - - if (geom.str.length > 1) { - if (style.vertical) { - textDivProperties.canvasWidth = geom.height * task._viewport.scale; - } else { - textDivProperties.canvasWidth = geom.width * task._viewport.scale; - } - } - - task._textDivProperties.set(textDiv, textDivProperties); - - if (task._textContentStream) { - task._layoutText(textDiv); - } - - if (task._enhanceTextSelection) { - var angleCos = 1, - angleSin = 0; - - if (angle !== 0) { - angleCos = Math.cos(angle); - angleSin = Math.sin(angle); - } - - var divWidth = (style.vertical ? geom.height : geom.width) * task._viewport.scale; - var divHeight = fontHeight; - var m, b; - - if (angle !== 0) { - m = [angleCos, angleSin, -angleSin, angleCos, left, top]; - b = _util.Util.getAxialAlignedBoundingBox([0, 0, divWidth, divHeight], m); - } else { - b = [left, top, left + divWidth, top + divHeight]; - } - - task._bounds.push({ - left: b[0], - top: b[1], - right: b[2], - bottom: b[3], - div: textDiv, - size: [divWidth, divHeight], - m: m - }); - } - } - - function render(task) { - if (task._canceled) { - return; - } - - var textDivs = task._textDivs; - var capability = task._capability; - var textDivsLength = textDivs.length; - - if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) { - task._renderingDone = true; - capability.resolve(); - return; - } - - if (!task._textContentStream) { - for (var i = 0; i < textDivsLength; i++) { - task._layoutText(textDivs[i]); - } - } - - task._renderingDone = true; - capability.resolve(); - } - - function expand(task) { - var bounds = task._bounds; - var viewport = task._viewport; - var expanded = expandBounds(viewport.width, viewport.height, bounds); - - for (var i = 0; i < expanded.length; i++) { - var div = bounds[i].div; - - var divProperties = task._textDivProperties.get(div); - - if (divProperties.angle === 0) { - divProperties.paddingLeft = bounds[i].left - expanded[i].left; - divProperties.paddingTop = bounds[i].top - expanded[i].top; - divProperties.paddingRight = expanded[i].right - bounds[i].right; - divProperties.paddingBottom = expanded[i].bottom - bounds[i].bottom; - - task._textDivProperties.set(div, divProperties); - - continue; - } - - var e = expanded[i], - b = bounds[i]; - var m = b.m, - c = m[0], - s = m[1]; - var points = [[0, 0], [0, b.size[1]], [b.size[0], 0], b.size]; - var ts = new Float64Array(64); - points.forEach(function (p, i) { - - var t = function (p, m) { - var xt = p[0] * m[0] + p[1] * m[2] + m[4]; - var yt = p[0] * m[1] + p[1] * m[3] + m[5]; - return [xt, yt]; - }; - - ts[i + 0] = c && (e.left - t[0]) / c; - ts[i + 4] = s && (e.top - t[1]) / s; - ts[i + 8] = c && (e.right - t[0]) / c; - ts[i + 12] = s && (e.bottom - t[1]) / s; - ts[i + 16] = s && (e.left - t[0]) / -s; - ts[i + 20] = c && (e.top - t[1]) / c; - ts[i + 24] = s && (e.right - t[0]) / -s; - ts[i + 28] = c && (e.bottom - t[1]) / c; - ts[i + 32] = c && (e.left - t[0]) / -c; - ts[i + 36] = s && (e.top - t[1]) / -s; - ts[i + 40] = c && (e.right - t[0]) / -c; - ts[i + 44] = s && (e.bottom - t[1]) / -s; - ts[i + 48] = s && (e.left - t[0]) / s; - ts[i + 52] = c && (e.top - t[1]) / -c; - ts[i + 56] = s && (e.right - t[0]) / s; - ts[i + 60] = c && (e.bottom - t[1]) / -c; - }); - - var findPositiveMin = function findPositiveMin(ts, offset, count) { - var result = 0; - - for (var i = 0; i < count; i++) { - var t = ts[offset++]; - - if (t > 0) { - result = result ? Math.min(t, result) : t; - } - } - - return result; - }; - - var boxScale = 1 + Math.min(Math.abs(c), Math.abs(s)); - divProperties.paddingLeft = findPositiveMin(ts, 32, 16) / boxScale; - divProperties.paddingTop = findPositiveMin(ts, 48, 16) / boxScale; - divProperties.paddingRight = findPositiveMin(ts, 0, 16) / boxScale; - divProperties.paddingBottom = findPositiveMin(ts, 16, 16) / boxScale; - - task._textDivProperties.set(div, divProperties); - } - } - - function expandBounds(width, height, boxes) { - var bounds = boxes.map(function (box, i) { - return { - x1: box.left, - y1: box.top, - x2: box.right, - y2: box.bottom, - index: i, - x1New: undefined, - x2New: undefined - }; - }); - expandBoundsLTR(width, bounds); - var expanded = new Array(boxes.length); - bounds.forEach(function (b) { - var i = b.index; - expanded[i] = { - left: b.x1New, - top: 0, - right: b.x2New, - bottom: 0 - }; - }); - boxes.map(function (box, i) { - var e = expanded[i], - b = bounds[i]; - b.x1 = box.top; - b.y1 = width - e.right; - b.x2 = box.bottom; - b.y2 = width - e.left; - b.index = i; - b.x1New = undefined; - b.x2New = undefined; - }); - expandBoundsLTR(height, bounds); - bounds.forEach(function (b) { - var i = b.index; - expanded[i].top = b.x1New; - expanded[i].bottom = b.x2New; - }); - return expanded; - } - - function expandBoundsLTR(width, bounds) { - bounds.sort(function (a, b) { - return a.x1 - b.x1 || a.index - b.index; - }); - var fakeBoundary = { - x1: -Infinity, - y1: -Infinity, - x2: 0, - y2: Infinity, - index: -1, - x1New: 0, - x2New: 0 - }; - var horizon = [{ - start: -Infinity, - end: Infinity, - boundary: fakeBoundary - }]; - bounds.forEach(function (boundary) { - var i = 0; - - while (i < horizon.length && horizon[i].end <= boundary.y1) { - i++; - } - - var j = horizon.length - 1; - - while (j >= 0 && horizon[j].start >= boundary.y2) { - j--; - } - - var horizonPart, affectedBoundary; - var q, - k, - maxXNew = -Infinity; - - for (q = i; q <= j; q++) { - horizonPart = horizon[q]; - affectedBoundary = horizonPart.boundary; - var xNew; - - if (affectedBoundary.x2 > boundary.x1) { - xNew = affectedBoundary.index > boundary.index ? affectedBoundary.x1New : boundary.x1; - } else if (affectedBoundary.x2New === undefined) { - xNew = (affectedBoundary.x2 + boundary.x1) / 2; - } else { - xNew = affectedBoundary.x2New; - } - - if (xNew > maxXNew) { - maxXNew = xNew; - } - } - - boundary.x1New = maxXNew; - - for (q = i; q <= j; q++) { - horizonPart = horizon[q]; - affectedBoundary = horizonPart.boundary; - - if (affectedBoundary.x2New === undefined) { - if (affectedBoundary.x2 > boundary.x1) { - if (affectedBoundary.index > boundary.index) { - affectedBoundary.x2New = affectedBoundary.x2; - } - } else { - affectedBoundary.x2New = maxXNew; - } - } else if (affectedBoundary.x2New > maxXNew) { - affectedBoundary.x2New = Math.max(maxXNew, affectedBoundary.x2); - } - } - - var changedHorizon = [], - lastBoundary = null; - - for (q = i; q <= j; q++) { - horizonPart = horizon[q]; - affectedBoundary = horizonPart.boundary; - var useBoundary = affectedBoundary.x2 > boundary.x2 ? affectedBoundary : boundary; - - if (lastBoundary === useBoundary) { - changedHorizon[changedHorizon.length - 1].end = horizonPart.end; - } else { - changedHorizon.push({ - start: horizonPart.start, - end: horizonPart.end, - boundary: useBoundary - }); - lastBoundary = useBoundary; - } - } - - if (horizon[i].start < boundary.y1) { - changedHorizon[0].start = boundary.y1; - changedHorizon.unshift({ - start: horizon[i].start, - end: boundary.y1, - boundary: horizon[i].boundary - }); - } - - if (boundary.y2 < horizon[j].end) { - changedHorizon[changedHorizon.length - 1].end = boundary.y2; - changedHorizon.push({ - start: boundary.y2, - end: horizon[j].end, - boundary: horizon[j].boundary - }); - } - - for (q = i; q <= j; q++) { - horizonPart = horizon[q]; - affectedBoundary = horizonPart.boundary; - - if (affectedBoundary.x2New !== undefined) { - continue; - } - - var used = false; - - for (k = i - 1; !used && k >= 0 && horizon[k].start >= affectedBoundary.y1; k--) { - used = horizon[k].boundary === affectedBoundary; - } - - for (k = j + 1; !used && k < horizon.length && horizon[k].end <= affectedBoundary.y2; k++) { - used = horizon[k].boundary === affectedBoundary; - } - - for (k = 0; !used && k < changedHorizon.length; k++) { - used = changedHorizon[k].boundary === affectedBoundary; - } - - if (!used) { - affectedBoundary.x2New = maxXNew; - } - } - - Array.prototype.splice.apply(horizon, [i, j - i + 1].concat(changedHorizon)); - }); - horizon.forEach(function (horizonPart) { - var affectedBoundary = horizonPart.boundary; - - if (affectedBoundary.x2New === undefined) { - affectedBoundary.x2New = Math.max(width, affectedBoundary.x2); - } - }); - } - - function TextLayerRenderTask(_ref) { - var textContent = _ref.textContent, - textContentStream = _ref.textContentStream, - container = _ref.container, - viewport = _ref.viewport, - textDivs = _ref.textDivs, - textContentItemsStr = _ref.textContentItemsStr, - enhanceTextSelection = _ref.enhanceTextSelection; - this._textContent = textContent; - this._textContentStream = textContentStream; - this._container = container; - this._viewport = viewport; - this._textDivs = textDivs || []; - this._textContentItemsStr = textContentItemsStr || []; - this._enhanceTextSelection = !!enhanceTextSelection; - this._fontInspectorEnabled = !!(_global_scope.default.FontInspector && _global_scope.default.FontInspector.enabled); - this._reader = null; - this._layoutTextLastFontSize = null; - this._layoutTextLastFontFamily = null; - this._layoutTextCtx = null; - this._textDivProperties = new WeakMap(); - this._renderingDone = false; - this._canceled = false; - this._capability = (0, _util.createPromiseCapability)(); - this._renderTimer = null; - this._bounds = []; - } - - TextLayerRenderTask.prototype = { - get promise() { - return this._capability.promise; - }, - - cancel: function TextLayer_cancel() { - if (this._reader) { - this._reader.cancel(new _util.AbortException('text layer task cancelled')); - - this._reader = null; - } - - this._canceled = true; - - if (this._renderTimer !== null) { - clearTimeout(this._renderTimer); - this._renderTimer = null; - } - - this._capability.reject('canceled'); - }, - _processItems: function _processItems(items, styleCache) { - for (var i = 0, len = items.length; i < len; i++) { - this._textContentItemsStr.push(items[i].str); - - appendText(this, items[i], styleCache); - } - }, - _layoutText: function _layoutText(textDiv) { - var textLayerFrag = this._container; - - var textDivProperties = this._textDivProperties.get(textDiv); - - if (textDivProperties.isWhitespace) { - return; - } - - var fontSize = textDiv.style.fontSize; - var fontFamily = textDiv.style.fontFamily; - - if (fontSize !== this._layoutTextLastFontSize || fontFamily !== this._layoutTextLastFontFamily) { - this._layoutTextCtx.font = fontSize + ' ' + fontFamily; - this._layoutTextLastFontSize = fontSize; - this._layoutTextLastFontFamily = fontFamily; - } - - var width = this._layoutTextCtx.measureText(textDiv.textContent).width; - - var transform = ''; - - if (textDivProperties.canvasWidth !== 0 && width > 0) { - textDivProperties.scale = textDivProperties.canvasWidth / width; - transform = "scaleX(".concat(textDivProperties.scale, ")"); - } - - if (textDivProperties.angle !== 0) { - transform = "rotate(".concat(textDivProperties.angle, "deg) ").concat(transform); - } - - if (transform.length > 0) { - textDivProperties.originalTransform = transform; - textDiv.style.transform = transform; - } - - this._textDivProperties.set(textDiv, textDivProperties); - - textLayerFrag.appendChild(textDiv); - }, - _render: function TextLayer_render(timeout) { - var _this = this; - - var capability = (0, _util.createPromiseCapability)(); - var styleCache = Object.create(null); - var canvas = document.createElement('canvas'); - canvas.mozOpaque = true; - this._layoutTextCtx = canvas.getContext('2d', { - alpha: false - }); - - if (this._textContent) { - var textItems = this._textContent.items; - var textStyles = this._textContent.styles; - - this._processItems(textItems, textStyles); - - capability.resolve(); - } else if (this._textContentStream) { - var pump = function pump() { - _this._reader.read().then(function (_ref2) { - var value = _ref2.value, - done = _ref2.done; - - if (done) { - capability.resolve(); - return; - } - - Object.assign(styleCache, value.styles); - - _this._processItems(value.items, styleCache); - - pump(); - }, capability.reject); - }; - - this._reader = this._textContentStream.getReader(); - pump(); - } else { - throw new Error('Neither "textContent" nor "textContentStream"' + ' parameters specified.'); - } - - capability.promise.then(function () { - styleCache = null; - - if (!timeout) { - render(_this); - } else { - _this._renderTimer = setTimeout(function () { - render(_this); - _this._renderTimer = null; - }, timeout); - } - }, this._capability.reject); - }, - expandTextDivs: function TextLayer_expandTextDivs(expandDivs) { - if (!this._enhanceTextSelection || !this._renderingDone) { - return; - } - - if (this._bounds !== null) { - expand(this); - this._bounds = null; - } - - for (var i = 0, ii = this._textDivs.length; i < ii; i++) { - var div = this._textDivs[i]; - - var divProperties = this._textDivProperties.get(div); - - if (divProperties.isWhitespace) { - continue; - } - - if (expandDivs) { - var transform = '', - padding = ''; - - if (divProperties.scale !== 1) { - transform = 'scaleX(' + divProperties.scale + ')'; - } - - if (divProperties.angle !== 0) { - transform = 'rotate(' + divProperties.angle + 'deg) ' + transform; - } - - if (divProperties.paddingLeft !== 0) { - padding += ' padding-left: ' + divProperties.paddingLeft / divProperties.scale + 'px;'; - transform += ' translateX(' + -divProperties.paddingLeft / divProperties.scale + 'px)'; - } - - if (divProperties.paddingTop !== 0) { - padding += ' padding-top: ' + divProperties.paddingTop + 'px;'; - transform += ' translateY(' + -divProperties.paddingTop + 'px)'; - } - - if (divProperties.paddingRight !== 0) { - padding += ' padding-right: ' + divProperties.paddingRight / divProperties.scale + 'px;'; - } - - if (divProperties.paddingBottom !== 0) { - padding += ' padding-bottom: ' + divProperties.paddingBottom + 'px;'; - } - - if (padding !== '') { - div.setAttribute('style', divProperties.style + padding); - } - - if (transform !== '') { - div.style.transform = transform; - } - } else { - div.style.padding = 0; - div.style.transform = divProperties.originalTransform || ''; - } - } - } - }; - - function renderTextLayer(renderParameters) { - var task = new TextLayerRenderTask({ - textContent: renderParameters.textContent, - textContentStream: renderParameters.textContentStream, - container: renderParameters.container, - viewport: renderParameters.viewport, - textDivs: renderParameters.textDivs, - textContentItemsStr: renderParameters.textContentItemsStr, - enhanceTextSelection: renderParameters.enhanceTextSelection - }); - - task._render(renderParameters.timeout); - - return task; - } - - return renderTextLayer; - }(); - - exports.renderTextLayer = renderTextLayer; - - /***/ }), - /* 163 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.AnnotationLayer = void 0; - - var _dom_utils = __w_extracthighlights_require__(151); - - var _util = __w_extracthighlights_require__(1); - - function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } - - function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - - function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - - function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - - function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - - var AnnotationElementFactory = - /*#__PURE__*/ - function () { - function AnnotationElementFactory() { - _classCallCheck(this, AnnotationElementFactory); - } - - _createClass(AnnotationElementFactory, null, [{ - key: "create", - value: function create(parameters) { - var subtype = parameters.data.annotationType; - - switch (subtype) { - case _util.AnnotationType.LINK: - return new LinkAnnotationElement(parameters); - - case _util.AnnotationType.TEXT: - return new TextAnnotationElement(parameters); - - case _util.AnnotationType.WIDGET: - var fieldType = parameters.data.fieldType; - - switch (fieldType) { - case 'Tx': - return new TextWidgetAnnotationElement(parameters); - - case 'Btn': - if (parameters.data.radioButton) { - return new RadioButtonWidgetAnnotationElement(parameters); - } else if (parameters.data.checkBox) { - return new CheckboxWidgetAnnotationElement(parameters); - } - - return new PushButtonWidgetAnnotationElement(parameters); - - case 'Ch': - return new ChoiceWidgetAnnotationElement(parameters); - } - - return new WidgetAnnotationElement(parameters); - - case _util.AnnotationType.POPUP: - return new PopupAnnotationElement(parameters); - - case _util.AnnotationType.LINE: - return new LineAnnotationElement(parameters); - - case _util.AnnotationType.SQUARE: - return new SquareAnnotationElement(parameters); - - case _util.AnnotationType.CIRCLE: - return new CircleAnnotationElement(parameters); - - case _util.AnnotationType.POLYLINE: - return new PolylineAnnotationElement(parameters); - - case _util.AnnotationType.INK: - return new InkAnnotationElement(parameters); - - case _util.AnnotationType.POLYGON: - return new PolygonAnnotationElement(parameters); - - case _util.AnnotationType.HIGHLIGHT: - return new HighlightAnnotationElement(parameters); - - case _util.AnnotationType.UNDERLINE: - return new UnderlineAnnotationElement(parameters); - - case _util.AnnotationType.SQUIGGLY: - return new SquigglyAnnotationElement(parameters); - - case _util.AnnotationType.STRIKEOUT: - return new StrikeOutAnnotationElement(parameters); - - case _util.AnnotationType.STAMP: - return new StampAnnotationElement(parameters); - - case _util.AnnotationType.FILEATTACHMENT: - return new FileAttachmentAnnotationElement(parameters); - - default: - return new AnnotationElement(parameters); - } - } - }]); - - return AnnotationElementFactory; - }(); - - var AnnotationElement = - /*#__PURE__*/ - function () { - function AnnotationElement(parameters) { - var isRenderable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var ignoreBorder = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - _classCallCheck(this, AnnotationElement); - - this.isRenderable = isRenderable; - this.data = parameters.data; - this.layer = parameters.layer; - this.page = parameters.page; - this.viewport = parameters.viewport; - this.linkService = parameters.linkService; - this.downloadManager = parameters.downloadManager; - this.imageResourcesPath = parameters.imageResourcesPath; - this.renderInteractiveForms = parameters.renderInteractiveForms; - this.svgFactory = parameters.svgFactory; - - if (isRenderable) { - this.container = this._createContainer(ignoreBorder); - } - } - - _createClass(AnnotationElement, [{ - key: "_createContainer", - value: function _createContainer() { - var ignoreBorder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var data = this.data, - page = this.page, - viewport = this.viewport; - var container = document.createElement('section'); - var width = data.rect[2] - data.rect[0]; - var height = data.rect[3] - data.rect[1]; - container.setAttribute('data-annotation-id', data.id); - - var rect = _util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]); - - container.style.transform = 'matrix(' + viewport.transform.join(',') + ')'; - container.style.transformOrigin = -rect[0] + 'px ' + -rect[1] + 'px'; - - if (!ignoreBorder && data.borderStyle.width > 0) { - container.style.borderWidth = data.borderStyle.width + 'px'; - - if (data.borderStyle.style !== _util.AnnotationBorderStyleType.UNDERLINE) { - width = width - 2 * data.borderStyle.width; - height = height - 2 * data.borderStyle.width; - } - - var horizontalRadius = data.borderStyle.horizontalCornerRadius; - var verticalRadius = data.borderStyle.verticalCornerRadius; - - if (horizontalRadius > 0 || verticalRadius > 0) { - var radius = horizontalRadius + 'px / ' + verticalRadius + 'px'; - container.style.borderRadius = radius; - } - - switch (data.borderStyle.style) { - case _util.AnnotationBorderStyleType.SOLID: - container.style.borderStyle = 'solid'; - break; - - case _util.AnnotationBorderStyleType.DASHED: - container.style.borderStyle = 'dashed'; - break; - - case _util.AnnotationBorderStyleType.BEVELED: - (0, _util.warn)('Unimplemented border style: beveled'); - break; - - case _util.AnnotationBorderStyleType.INSET: - (0, _util.warn)('Unimplemented border style: inset'); - break; - - case _util.AnnotationBorderStyleType.UNDERLINE: - container.style.borderBottomStyle = 'solid'; - break; - } - - if (data.color) { - container.style.borderColor = _util.Util.makeCssRgb(data.color[0] | 0, data.color[1] | 0, data.color[2] | 0); - } else { - container.style.borderWidth = 0; - } - } - - container.style.left = rect[0] + 'px'; - container.style.top = rect[1] + 'px'; - container.style.width = width + 'px'; - container.style.height = height + 'px'; - return container; - } - }, { - key: "_createPopup", - value: function _createPopup(container, trigger, data) { - if (!trigger) { - trigger = document.createElement('div'); - trigger.style.height = container.style.height; - trigger.style.width = container.style.width; - container.appendChild(trigger); - } - - var popupElement = new PopupElement({ - container: container, - trigger: trigger, - color: data.color, - title: data.title, - contents: data.contents, - hideWrapper: true - }); - var popup = popupElement.render(); - popup.style.left = container.style.width; - container.appendChild(popup); - } - }, { - key: "render", - value: function render() { - (0, _util.unreachable)('Abstract method `AnnotationElement.render` called'); - } - }]); - - return AnnotationElement; - }(); - - var LinkAnnotationElement = - /*#__PURE__*/ - function (_AnnotationElement) { - _inherits(LinkAnnotationElement, _AnnotationElement); - - function LinkAnnotationElement(parameters) { - _classCallCheck(this, LinkAnnotationElement); - - var isRenderable = !!(parameters.data.url || parameters.data.dest || parameters.data.action); - return _possibleConstructorReturn(this, _getPrototypeOf(LinkAnnotationElement).call(this, parameters, isRenderable)); - } - - _createClass(LinkAnnotationElement, [{ - key: "render", - value: function render() { - this.container.className = 'linkAnnotation'; - var data = this.data, - linkService = this.linkService; - var link = document.createElement('a'); - (0, _dom_utils.addLinkAttributes)(link, { - url: data.url, - target: data.newWindow ? _dom_utils.LinkTarget.BLANK : linkService.externalLinkTarget, - rel: linkService.externalLinkRel - }); - - if (!data.url) { - if (data.action) { - this._bindNamedAction(link, data.action); - } else { - this._bindLink(link, data.dest); - } - } - - this.container.appendChild(link); - return this.container; - } - }, { - key: "_bindLink", - value: function _bindLink(link, destination) { - var _this = this; - - link.href = this.linkService.getDestinationHash(destination); - - link.onclick = function () { - if (destination) { - _this.linkService.navigateTo(destination); - } - - return false; - }; - - if (destination) { - link.className = 'internalLink'; - } - } - }, { - key: "_bindNamedAction", - value: function _bindNamedAction(link, action) { - var _this2 = this; - - link.href = this.linkService.getAnchorUrl(''); - - link.onclick = function () { - _this2.linkService.executeNamedAction(action); - - return false; - }; - - link.className = 'internalLink'; - } - }]); - - return LinkAnnotationElement; - }(AnnotationElement); - - var TextAnnotationElement = - /*#__PURE__*/ - function (_AnnotationElement2) { - _inherits(TextAnnotationElement, _AnnotationElement2); - - function TextAnnotationElement(parameters) { - _classCallCheck(this, TextAnnotationElement); - - var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); - return _possibleConstructorReturn(this, _getPrototypeOf(TextAnnotationElement).call(this, parameters, isRenderable)); - } - - _createClass(TextAnnotationElement, [{ - key: "render", - value: function render() { - this.container.className = 'textAnnotation'; - var image = document.createElement('img'); - image.style.height = this.container.style.height; - image.style.width = this.container.style.width; - image.src = this.imageResourcesPath + 'annotation-' + this.data.name.toLowerCase() + '.svg'; - image.alt = '[{{type}} Annotation]'; - image.dataset.l10nId = 'text_annotation_type'; - image.dataset.l10nArgs = JSON.stringify({ - type: this.data.name - }); - - if (!this.data.hasPopup) { - this._createPopup(this.container, image, this.data); - } - - this.container.appendChild(image); - return this.container; - } - }]); - - return TextAnnotationElement; - }(AnnotationElement); - - var WidgetAnnotationElement = - /*#__PURE__*/ - function (_AnnotationElement3) { - _inherits(WidgetAnnotationElement, _AnnotationElement3); - - function WidgetAnnotationElement() { - _classCallCheck(this, WidgetAnnotationElement); - - return _possibleConstructorReturn(this, _getPrototypeOf(WidgetAnnotationElement).apply(this, arguments)); - } - - _createClass(WidgetAnnotationElement, [{ - key: "render", - value: function render() { - return this.container; - } - }]); - - return WidgetAnnotationElement; - }(AnnotationElement); - - var TextWidgetAnnotationElement = - /*#__PURE__*/ - function (_WidgetAnnotationElem) { - _inherits(TextWidgetAnnotationElement, _WidgetAnnotationElem); - - function TextWidgetAnnotationElement(parameters) { - _classCallCheck(this, TextWidgetAnnotationElement); - - var isRenderable = parameters.renderInteractiveForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue; - return _possibleConstructorReturn(this, _getPrototypeOf(TextWidgetAnnotationElement).call(this, parameters, isRenderable)); - } - - _createClass(TextWidgetAnnotationElement, [{ - key: "render", - value: function render() { - var TEXT_ALIGNMENT = ['left', 'center', 'right']; - this.container.className = 'textWidgetAnnotation'; - var element = null; - - if (this.renderInteractiveForms) { - if (this.data.multiLine) { - element = document.createElement('textarea'); - element.textContent = this.data.fieldValue; - } else { - element = document.createElement('input'); - element.type = 'text'; - element.setAttribute('value', this.data.fieldValue); - } - - element.disabled = this.data.readOnly; - - if (this.data.maxLen !== null) { - element.maxLength = this.data.maxLen; - } - - if (this.data.comb) { - var fieldWidth = this.data.rect[2] - this.data.rect[0]; - var combWidth = fieldWidth / this.data.maxLen; - element.classList.add('comb'); - element.style.letterSpacing = 'calc(' + combWidth + 'px - 1ch)'; - } - } else { - element = document.createElement('div'); - element.textContent = this.data.fieldValue; - element.style.verticalAlign = 'middle'; - element.style.display = 'table-cell'; - var font = null; - - if (this.data.fontRefName && this.page.commonObjs.has(this.data.fontRefName)) { - font = this.page.commonObjs.get(this.data.fontRefName); - } - - this._setTextStyle(element, font); - } - - if (this.data.textAlignment !== null) { - element.style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment]; - } - - this.container.appendChild(element); - return this.container; - } - }, { - key: "_setTextStyle", - value: function _setTextStyle(element, font) { - var style = element.style; - style.fontSize = this.data.fontSize + 'px'; - style.direction = this.data.fontDirection < 0 ? 'rtl' : 'ltr'; - - if (!font) { - return; - } - - style.fontWeight = font.black ? font.bold ? '900' : 'bold' : font.bold ? 'bold' : 'normal'; - style.fontStyle = font.italic ? 'italic' : 'normal'; - var fontFamily = font.loadedName ? '"' + font.loadedName + '", ' : ''; - var fallbackName = font.fallbackName || 'Helvetica, sans-serif'; - style.fontFamily = fontFamily + fallbackName; - } - }]); - - return TextWidgetAnnotationElement; - }(WidgetAnnotationElement); - - var CheckboxWidgetAnnotationElement = - /*#__PURE__*/ - function (_WidgetAnnotationElem2) { - _inherits(CheckboxWidgetAnnotationElement, _WidgetAnnotationElem2); - - function CheckboxWidgetAnnotationElement(parameters) { - _classCallCheck(this, CheckboxWidgetAnnotationElement); - - return _possibleConstructorReturn(this, _getPrototypeOf(CheckboxWidgetAnnotationElement).call(this, parameters, parameters.renderInteractiveForms)); - } - - _createClass(CheckboxWidgetAnnotationElement, [{ - key: "render", - value: function render() { - this.container.className = 'buttonWidgetAnnotation checkBox'; - var element = document.createElement('input'); - element.disabled = this.data.readOnly; - element.type = 'checkbox'; - - if (this.data.fieldValue && this.data.fieldValue !== 'Off') { - element.setAttribute('checked', true); - } - - this.container.appendChild(element); - return this.container; - } - }]); - - return CheckboxWidgetAnnotationElement; - }(WidgetAnnotationElement); - - var RadioButtonWidgetAnnotationElement = - /*#__PURE__*/ - function (_WidgetAnnotationElem3) { - _inherits(RadioButtonWidgetAnnotationElement, _WidgetAnnotationElem3); - - function RadioButtonWidgetAnnotationElement(parameters) { - _classCallCheck(this, RadioButtonWidgetAnnotationElement); - - return _possibleConstructorReturn(this, _getPrototypeOf(RadioButtonWidgetAnnotationElement).call(this, parameters, parameters.renderInteractiveForms)); - } - - _createClass(RadioButtonWidgetAnnotationElement, [{ - key: "render", - value: function render() { - this.container.className = 'buttonWidgetAnnotation radioButton'; - var element = document.createElement('input'); - element.disabled = this.data.readOnly; - element.type = 'radio'; - element.name = this.data.fieldName; - - if (this.data.fieldValue === this.data.buttonValue) { - element.setAttribute('checked', true); - } - - this.container.appendChild(element); - return this.container; - } - }]); - - return RadioButtonWidgetAnnotationElement; - }(WidgetAnnotationElement); - - var PushButtonWidgetAnnotationElement = - /*#__PURE__*/ - function (_LinkAnnotationElemen) { - _inherits(PushButtonWidgetAnnotationElement, _LinkAnnotationElemen); - - function PushButtonWidgetAnnotationElement() { - _classCallCheck(this, PushButtonWidgetAnnotationElement); - - return _possibleConstructorReturn(this, _getPrototypeOf(PushButtonWidgetAnnotationElement).apply(this, arguments)); - } - - _createClass(PushButtonWidgetAnnotationElement, [{ - key: "render", - value: function render() { - var container = _get(_getPrototypeOf(PushButtonWidgetAnnotationElement.prototype), "render", this).call(this); - - container.className = 'buttonWidgetAnnotation pushButton'; - return container; - } - }]); - - return PushButtonWidgetAnnotationElement; - }(LinkAnnotationElement); - - var ChoiceWidgetAnnotationElement = - /*#__PURE__*/ - function (_WidgetAnnotationElem4) { - _inherits(ChoiceWidgetAnnotationElement, _WidgetAnnotationElem4); - - function ChoiceWidgetAnnotationElement(parameters) { - _classCallCheck(this, ChoiceWidgetAnnotationElement); - - return _possibleConstructorReturn(this, _getPrototypeOf(ChoiceWidgetAnnotationElement).call(this, parameters, parameters.renderInteractiveForms)); - } - - _createClass(ChoiceWidgetAnnotationElement, [{ - key: "render", - value: function render() { - this.container.className = 'choiceWidgetAnnotation'; - var selectElement = document.createElement('select'); - selectElement.disabled = this.data.readOnly; - - if (!this.data.combo) { - selectElement.size = this.data.options.length; - - if (this.data.multiSelect) { - selectElement.multiple = true; - } - } - - for (var i = 0, ii = this.data.options.length; i < ii; i++) { - var option = this.data.options[i]; - var optionElement = document.createElement('option'); - optionElement.textContent = option.displayValue; - optionElement.value = option.exportValue; - - if (this.data.fieldValue.includes(option.displayValue)) { - optionElement.setAttribute('selected', true); - } - - selectElement.appendChild(optionElement); - } - - this.container.appendChild(selectElement); - return this.container; - } - }]); - - return ChoiceWidgetAnnotationElement; - }(WidgetAnnotationElement); - - var PopupAnnotationElement = - /*#__PURE__*/ - function (_AnnotationElement4) { - _inherits(PopupAnnotationElement, _AnnotationElement4); - - function PopupAnnotationElement(parameters) { - _classCallCheck(this, PopupAnnotationElement); - - var isRenderable = !!(parameters.data.title || parameters.data.contents); - return _possibleConstructorReturn(this, _getPrototypeOf(PopupAnnotationElement).call(this, parameters, isRenderable)); - } - - _createClass(PopupAnnotationElement, [{ - key: "render", - value: function render() { - var IGNORE_TYPES = ['Line', 'Square', 'Circle', 'PolyLine', 'Polygon', 'Ink']; - this.container.className = 'popupAnnotation'; - - if (IGNORE_TYPES.includes(this.data.parentType)) { - return this.container; - } - - var selector = '[data-annotation-id="' + this.data.parentId + '"]'; - var parentElement = this.layer.querySelector(selector); - - if (!parentElement) { - return this.container; - } - - var popup = new PopupElement({ - container: this.container, - trigger: parentElement, - color: this.data.color, - title: this.data.title, - contents: this.data.contents - }); - var parentLeft = parseFloat(parentElement.style.left); - var parentWidth = parseFloat(parentElement.style.width); - this.container.style.transformOrigin = -(parentLeft + parentWidth) + 'px -' + parentElement.style.top; - this.container.style.left = parentLeft + parentWidth + 'px'; - this.container.appendChild(popup.render()); - return this.container; - } - }]); - - return PopupAnnotationElement; - }(AnnotationElement); - - var PopupElement = - /*#__PURE__*/ - function () { - function PopupElement(parameters) { - _classCallCheck(this, PopupElement); - - this.container = parameters.container; - this.trigger = parameters.trigger; - this.color = parameters.color; - this.title = parameters.title; - this.contents = parameters.contents; - this.hideWrapper = parameters.hideWrapper || false; - this.pinned = false; - } - - _createClass(PopupElement, [{ - key: "render", - value: function render() { - var BACKGROUND_ENLIGHT = 0.7; - var wrapper = document.createElement('div'); - wrapper.className = 'popupWrapper'; - this.hideElement = this.hideWrapper ? wrapper : this.container; - this.hideElement.setAttribute('hidden', true); - var popup = document.createElement('div'); - popup.className = 'popup'; - var color = this.color; - - if (color) { - var r = BACKGROUND_ENLIGHT * (255 - color[0]) + color[0]; - var g = BACKGROUND_ENLIGHT * (255 - color[1]) + color[1]; - var b = BACKGROUND_ENLIGHT * (255 - color[2]) + color[2]; - popup.style.backgroundColor = _util.Util.makeCssRgb(r | 0, g | 0, b | 0); - } - - var contents = this._formatContents(this.contents); - - var title = document.createElement('h1'); - title.textContent = this.title; - this.trigger.addEventListener('click', this._toggle.bind(this)); - this.trigger.addEventListener('mouseover', this._show.bind(this, false)); - this.trigger.addEventListener('mouseout', this._hide.bind(this, false)); - popup.addEventListener('click', this._hide.bind(this, true)); - popup.appendChild(title); - popup.appendChild(contents); - wrapper.appendChild(popup); - return wrapper; - } - }, { - key: "_formatContents", - value: function _formatContents(contents) { - var p = document.createElement('p'); - var lines = contents.split(/(?:\r\n?|\n)/); - - for (var i = 0, ii = lines.length; i < ii; ++i) { - var line = lines[i]; - p.appendChild(document.createTextNode(line)); - - if (i < ii - 1) { - p.appendChild(document.createElement('br')); - } - } - - return p; - } - }, { - key: "_toggle", - value: function _toggle() { - if (this.pinned) { - this._hide(true); - } else { - this._show(true); - } - } - }, { - key: "_show", - value: function _show() { - var pin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - if (pin) { - this.pinned = true; - } - - if (this.hideElement.hasAttribute('hidden')) { - this.hideElement.removeAttribute('hidden'); - this.container.style.zIndex += 1; - } - } - }, { - key: "_hide", - value: function _hide() { - var unpin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; - - if (unpin) { - this.pinned = false; - } - - if (!this.hideElement.hasAttribute('hidden') && !this.pinned) { - this.hideElement.setAttribute('hidden', true); - this.container.style.zIndex -= 1; - } - } - }]); - - return PopupElement; - }(); - - var LineAnnotationElement = - /*#__PURE__*/ - function (_AnnotationElement5) { - _inherits(LineAnnotationElement, _AnnotationElement5); - - function LineAnnotationElement(parameters) { - _classCallCheck(this, LineAnnotationElement); - - var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); - return _possibleConstructorReturn(this, _getPrototypeOf(LineAnnotationElement).call(this, parameters, isRenderable, true)); - } - - _createClass(LineAnnotationElement, [{ - key: "render", - value: function render() { - this.container.className = 'lineAnnotation'; - var data = this.data; - var width = data.rect[2] - data.rect[0]; - var height = data.rect[3] - data.rect[1]; - var svg = this.svgFactory.create(width, height); - var line = this.svgFactory.createElement('svg:line'); - line.setAttribute('x1', data.rect[2] - data.lineCoordinates[0]); - line.setAttribute('y1', data.rect[3] - data.lineCoordinates[1]); - line.setAttribute('x2', data.rect[2] - data.lineCoordinates[2]); - line.setAttribute('y2', data.rect[3] - data.lineCoordinates[3]); - line.setAttribute('stroke-width', data.borderStyle.width); - line.setAttribute('stroke', 'transparent'); - svg.appendChild(line); - this.container.append(svg); - - this._createPopup(this.container, line, data); - - return this.container; - } - }]); - - return LineAnnotationElement; - }(AnnotationElement); - - var SquareAnnotationElement = - /*#__PURE__*/ - function (_AnnotationElement6) { - _inherits(SquareAnnotationElement, _AnnotationElement6); - - function SquareAnnotationElement(parameters) { - _classCallCheck(this, SquareAnnotationElement); - - var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); - return _possibleConstructorReturn(this, _getPrototypeOf(SquareAnnotationElement).call(this, parameters, isRenderable, true)); - } - - _createClass(SquareAnnotationElement, [{ - key: "render", - value: function render() { - this.container.className = 'squareAnnotation'; - var data = this.data; - var width = data.rect[2] - data.rect[0]; - var height = data.rect[3] - data.rect[1]; - var svg = this.svgFactory.create(width, height); - var borderWidth = data.borderStyle.width; - var square = this.svgFactory.createElement('svg:rect'); - square.setAttribute('x', borderWidth / 2); - square.setAttribute('y', borderWidth / 2); - square.setAttribute('width', width - borderWidth); - square.setAttribute('height', height - borderWidth); - square.setAttribute('stroke-width', borderWidth); - square.setAttribute('stroke', 'transparent'); - square.setAttribute('fill', 'none'); - svg.appendChild(square); - this.container.append(svg); - - this._createPopup(this.container, square, data); - - return this.container; - } - }]); - - return SquareAnnotationElement; - }(AnnotationElement); - - var CircleAnnotationElement = - /*#__PURE__*/ - function (_AnnotationElement7) { - _inherits(CircleAnnotationElement, _AnnotationElement7); - - function CircleAnnotationElement(parameters) { - _classCallCheck(this, CircleAnnotationElement); - - var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); - return _possibleConstructorReturn(this, _getPrototypeOf(CircleAnnotationElement).call(this, parameters, isRenderable, true)); - } - - _createClass(CircleAnnotationElement, [{ - key: "render", - value: function render() { - this.container.className = 'circleAnnotation'; - var data = this.data; - var width = data.rect[2] - data.rect[0]; - var height = data.rect[3] - data.rect[1]; - var svg = this.svgFactory.create(width, height); - var borderWidth = data.borderStyle.width; - var circle = this.svgFactory.createElement('svg:ellipse'); - circle.setAttribute('cx', width / 2); - circle.setAttribute('cy', height / 2); - circle.setAttribute('rx', width / 2 - borderWidth / 2); - circle.setAttribute('ry', height / 2 - borderWidth / 2); - circle.setAttribute('stroke-width', borderWidth); - circle.setAttribute('stroke', 'transparent'); - circle.setAttribute('fill', 'none'); - svg.appendChild(circle); - this.container.append(svg); - - this._createPopup(this.container, circle, data); - - return this.container; - } - }]); - - return CircleAnnotationElement; - }(AnnotationElement); - - var PolylineAnnotationElement = - /*#__PURE__*/ - function (_AnnotationElement8) { - _inherits(PolylineAnnotationElement, _AnnotationElement8); - - function PolylineAnnotationElement(parameters) { - var _this3; - - _classCallCheck(this, PolylineAnnotationElement); - - var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); - _this3 = _possibleConstructorReturn(this, _getPrototypeOf(PolylineAnnotationElement).call(this, parameters, isRenderable, true)); - _this3.containerClassName = 'polylineAnnotation'; - _this3.svgElementName = 'svg:polyline'; - return _this3; - } - - _createClass(PolylineAnnotationElement, [{ - key: "render", - value: function render() { - this.container.className = this.containerClassName; - var data = this.data; - var width = data.rect[2] - data.rect[0]; - var height = data.rect[3] - data.rect[1]; - var svg = this.svgFactory.create(width, height); - var vertices = data.vertices; - var points = []; - - for (var i = 0, ii = vertices.length; i < ii; i++) { - var x = vertices[i].x - data.rect[0]; - var y = data.rect[3] - vertices[i].y; - points.push(x + ',' + y); - } - - points = points.join(' '); - var borderWidth = data.borderStyle.width; - var polyline = this.svgFactory.createElement(this.svgElementName); - polyline.setAttribute('points', points); - polyline.setAttribute('stroke-width', borderWidth); - polyline.setAttribute('stroke', 'transparent'); - polyline.setAttribute('fill', 'none'); - svg.appendChild(polyline); - this.container.append(svg); - - this._createPopup(this.container, polyline, data); - - return this.container; - } - }]); - - return PolylineAnnotationElement; - }(AnnotationElement); - - var PolygonAnnotationElement = - /*#__PURE__*/ - function (_PolylineAnnotationEl) { - _inherits(PolygonAnnotationElement, _PolylineAnnotationEl); - - function PolygonAnnotationElement(parameters) { - var _this4; - - _classCallCheck(this, PolygonAnnotationElement); - - _this4 = _possibleConstructorReturn(this, _getPrototypeOf(PolygonAnnotationElement).call(this, parameters)); - _this4.containerClassName = 'polygonAnnotation'; - _this4.svgElementName = 'svg:polygon'; - return _this4; - } - - return PolygonAnnotationElement; - }(PolylineAnnotationElement); - - var InkAnnotationElement = - /*#__PURE__*/ - function (_AnnotationElement9) { - _inherits(InkAnnotationElement, _AnnotationElement9); - - function InkAnnotationElement(parameters) { - var _this5; - - _classCallCheck(this, InkAnnotationElement); - - var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); - _this5 = _possibleConstructorReturn(this, _getPrototypeOf(InkAnnotationElement).call(this, parameters, isRenderable, true)); - _this5.containerClassName = 'inkAnnotation'; - _this5.svgElementName = 'svg:polyline'; - return _this5; - } - - _createClass(InkAnnotationElement, [{ - key: "render", - value: function render() { - this.container.className = this.containerClassName; - var data = this.data; - var width = data.rect[2] - data.rect[0]; - var height = data.rect[3] - data.rect[1]; - var svg = this.svgFactory.create(width, height); - var inkLists = data.inkLists; - - for (var i = 0, ii = inkLists.length; i < ii; i++) { - var inkList = inkLists[i]; - var points = []; - - for (var j = 0, jj = inkList.length; j < jj; j++) { - var x = inkList[j].x - data.rect[0]; - var y = data.rect[3] - inkList[j].y; - points.push(x + ',' + y); - } - - points = points.join(' '); - var borderWidth = data.borderStyle.width; - var polyline = this.svgFactory.createElement(this.svgElementName); - polyline.setAttribute('points', points); - polyline.setAttribute('stroke-width', borderWidth); - polyline.setAttribute('stroke', 'transparent'); - polyline.setAttribute('fill', 'none'); - - this._createPopup(this.container, polyline, data); - - svg.appendChild(polyline); - } - - this.container.append(svg); - return this.container; - } - }]); - - return InkAnnotationElement; - }(AnnotationElement); - - var HighlightAnnotationElement = - /*#__PURE__*/ - function (_AnnotationElement10) { - _inherits(HighlightAnnotationElement, _AnnotationElement10); - - function HighlightAnnotationElement(parameters) { - _classCallCheck(this, HighlightAnnotationElement); - - var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); - return _possibleConstructorReturn(this, _getPrototypeOf(HighlightAnnotationElement).call(this, parameters, isRenderable, true)); - } - - _createClass(HighlightAnnotationElement, [{ - key: "render", - value: function render() { - this.container.className = 'highlightAnnotation'; - - if (!this.data.hasPopup) { - this._createPopup(this.container, null, this.data); - } - - return this.container; - } - }]); - - return HighlightAnnotationElement; - }(AnnotationElement); - - var UnderlineAnnotationElement = - /*#__PURE__*/ - function (_AnnotationElement11) { - _inherits(UnderlineAnnotationElement, _AnnotationElement11); - - function UnderlineAnnotationElement(parameters) { - _classCallCheck(this, UnderlineAnnotationElement); - - var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); - return _possibleConstructorReturn(this, _getPrototypeOf(UnderlineAnnotationElement).call(this, parameters, isRenderable, true)); - } - - _createClass(UnderlineAnnotationElement, [{ - key: "render", - value: function render() { - this.container.className = 'underlineAnnotation'; - - if (!this.data.hasPopup) { - this._createPopup(this.container, null, this.data); - } - - return this.container; - } - }]); - - return UnderlineAnnotationElement; - }(AnnotationElement); - - var SquigglyAnnotationElement = - /*#__PURE__*/ - function (_AnnotationElement12) { - _inherits(SquigglyAnnotationElement, _AnnotationElement12); - - function SquigglyAnnotationElement(parameters) { - _classCallCheck(this, SquigglyAnnotationElement); - - var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); - return _possibleConstructorReturn(this, _getPrototypeOf(SquigglyAnnotationElement).call(this, parameters, isRenderable, true)); - } - - _createClass(SquigglyAnnotationElement, [{ - key: "render", - value: function render() { - this.container.className = 'squigglyAnnotation'; - - if (!this.data.hasPopup) { - this._createPopup(this.container, null, this.data); - } - - return this.container; - } - }]); - - return SquigglyAnnotationElement; - }(AnnotationElement); - - var StrikeOutAnnotationElement = - /*#__PURE__*/ - function (_AnnotationElement13) { - _inherits(StrikeOutAnnotationElement, _AnnotationElement13); - - function StrikeOutAnnotationElement(parameters) { - _classCallCheck(this, StrikeOutAnnotationElement); - - var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); - return _possibleConstructorReturn(this, _getPrototypeOf(StrikeOutAnnotationElement).call(this, parameters, isRenderable, true)); - } - - _createClass(StrikeOutAnnotationElement, [{ - key: "render", - value: function render() { - this.container.className = 'strikeoutAnnotation'; - - if (!this.data.hasPopup) { - this._createPopup(this.container, null, this.data); - } - - return this.container; - } - }]); - - return StrikeOutAnnotationElement; - }(AnnotationElement); - - var StampAnnotationElement = - /*#__PURE__*/ - function (_AnnotationElement14) { - _inherits(StampAnnotationElement, _AnnotationElement14); - - function StampAnnotationElement(parameters) { - _classCallCheck(this, StampAnnotationElement); - - var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); - return _possibleConstructorReturn(this, _getPrototypeOf(StampAnnotationElement).call(this, parameters, isRenderable, true)); - } - - _createClass(StampAnnotationElement, [{ - key: "render", - value: function render() { - this.container.className = 'stampAnnotation'; - - if (!this.data.hasPopup) { - this._createPopup(this.container, null, this.data); - } - - return this.container; - } - }]); - - return StampAnnotationElement; - }(AnnotationElement); - - var FileAttachmentAnnotationElement = - /*#__PURE__*/ - function (_AnnotationElement15) { - _inherits(FileAttachmentAnnotationElement, _AnnotationElement15); - - function FileAttachmentAnnotationElement(parameters) { - var _this6; - - _classCallCheck(this, FileAttachmentAnnotationElement); - - _this6 = _possibleConstructorReturn(this, _getPrototypeOf(FileAttachmentAnnotationElement).call(this, parameters, true)); - var _this6$data$file = _this6.data.file, - filename = _this6$data$file.filename, - content = _this6$data$file.content; - _this6.filename = (0, _dom_utils.getFilenameFromUrl)(filename); - _this6.content = content; - - if (_this6.linkService.eventBus) { - _this6.linkService.eventBus.dispatch('fileattachmentannotation', { - source: _assertThisInitialized(_assertThisInitialized(_this6)), - id: (0, _util.stringToPDFString)(filename), - filename: filename, - content: content - }); - } - - return _this6; - } - - _createClass(FileAttachmentAnnotationElement, [{ - key: "render", - value: function render() { - this.container.className = 'fileAttachmentAnnotation'; - var trigger = document.createElement('div'); - trigger.style.height = this.container.style.height; - trigger.style.width = this.container.style.width; - trigger.addEventListener('dblclick', this._download.bind(this)); - - if (!this.data.hasPopup && (this.data.title || this.data.contents)) { - this._createPopup(this.container, trigger, this.data); - } - - this.container.appendChild(trigger); - return this.container; - } - }, { - key: "_download", - value: function _download() { - if (!this.downloadManager) { - (0, _util.warn)('Download cannot be started due to unavailable download manager'); - return; - } - - this.downloadManager.downloadData(this.content, this.filename, ''); - } - }]); - - return FileAttachmentAnnotationElement; - }(AnnotationElement); - - var AnnotationLayer = - /*#__PURE__*/ - function () { - function AnnotationLayer() { - _classCallCheck(this, AnnotationLayer); - } - - _createClass(AnnotationLayer, null, [{ - key: "render", - value: function render(parameters) { - for (var i = 0, ii = parameters.annotations.length; i < ii; i++) { - var data = parameters.annotations[i]; - - if (!data) { - continue; - } - - var element = AnnotationElementFactory.create({ - data: data, - layer: parameters.div, - page: parameters.page, - viewport: parameters.viewport, - linkService: parameters.linkService, - downloadManager: parameters.downloadManager, - imageResourcesPath: parameters.imageResourcesPath || '', - renderInteractiveForms: parameters.renderInteractiveForms || false, - svgFactory: new _dom_utils.DOMSVGFactory() - }); - - if (element.isRenderable) { - parameters.div.appendChild(element.render()); - } - } - } - }, { - key: "update", - value: function update(parameters) { - for (var i = 0, ii = parameters.annotations.length; i < ii; i++) { - var data = parameters.annotations[i]; - var element = parameters.div.querySelector('[data-annotation-id="' + data.id + '"]'); - - if (element) { - element.style.transform = 'matrix(' + parameters.viewport.transform.join(',') + ')'; - } - } - - parameters.div.removeAttribute('hidden'); - } - }]); - - return AnnotationLayer; - }(); - - exports.AnnotationLayer = AnnotationLayer; - - /***/ }), - /* 164 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.SVGGraphics = void 0; - - var _util = __w_extracthighlights_require__(1); - - var _dom_utils = __w_extracthighlights_require__(151); - - var _is_node = _interopRequireDefault(__w_extracthighlights_require__(4)); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var SVGGraphics = function SVGGraphics() { - throw new Error('Not implemented: SVGGraphics'); - }; - - exports.SVGGraphics = SVGGraphics; - { - var SVG_DEFAULTS = { - fontStyle: 'normal', - fontWeight: 'normal', - fillColor: '#000000' - }; - - var convertImgDataToPng = function convertImgDataToPngClosure() { - var PNG_HEADER = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]); - var CHUNK_WRAPPER_SIZE = 12; - var crcTable = new Int32Array(256); - - for (var i = 0; i < 256; i++) { - var c = i; - - for (var h = 0; h < 8; h++) { - if (c & 1) { - c = 0xedB88320 ^ c >> 1 & 0x7fffffff; - } else { - c = c >> 1 & 0x7fffffff; - } - } - - crcTable[i] = c; - } - - function crc32(data, start, end) { - var crc = -1; - - for (var i = start; i < end; i++) { - var a = (crc ^ data[i]) & 0xff; - var b = crcTable[a]; - crc = crc >>> 8 ^ b; - } - - return crc ^ -1; - } - - function writePngChunk(type, body, data, offset) { - var p = offset; - var len = body.length; - data[p] = len >> 24 & 0xff; - data[p + 1] = len >> 16 & 0xff; - data[p + 2] = len >> 8 & 0xff; - data[p + 3] = len & 0xff; - p += 4; - data[p] = type.charCodeAt(0) & 0xff; - data[p + 1] = type.charCodeAt(1) & 0xff; - data[p + 2] = type.charCodeAt(2) & 0xff; - data[p + 3] = type.charCodeAt(3) & 0xff; - p += 4; - data.set(body, p); - p += body.length; - var crc = crc32(data, offset + 4, p); - data[p] = crc >> 24 & 0xff; - data[p + 1] = crc >> 16 & 0xff; - data[p + 2] = crc >> 8 & 0xff; - data[p + 3] = crc & 0xff; - } - - function adler32(data, start, end) { - var a = 1; - var b = 0; - - for (var i = start; i < end; ++i) { - a = (a + (data[i] & 0xff)) % 65521; - b = (b + a) % 65521; - } - - return b << 16 | a; - } - - function deflateSync(literals) { - if (!(0, _is_node.default)()) { - return deflateSyncUncompressed(literals); - } - - try { - var input; - - if (parseInt(process.versions.node) >= 8) { - input = literals; - } else { - input = new Buffer(literals); - } - - var output = require$$2__default['default'].deflateSync(input, { - level: 9 - }); - - return output instanceof Uint8Array ? output : new Uint8Array(output); - } catch (e) { - (0, _util.warn)('Not compressing PNG because zlib.deflateSync is unavailable: ' + e); - } - - return deflateSyncUncompressed(literals); - } - - function deflateSyncUncompressed(literals) { - var len = literals.length; - var maxBlockLength = 0xFFFF; - var deflateBlocks = Math.ceil(len / maxBlockLength); - var idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4); - var pi = 0; - idat[pi++] = 0x78; - idat[pi++] = 0x9c; - var pos = 0; - - while (len > maxBlockLength) { - idat[pi++] = 0x00; - idat[pi++] = 0xff; - idat[pi++] = 0xff; - idat[pi++] = 0x00; - idat[pi++] = 0x00; - idat.set(literals.subarray(pos, pos + maxBlockLength), pi); - pi += maxBlockLength; - pos += maxBlockLength; - len -= maxBlockLength; - } - - idat[pi++] = 0x01; - idat[pi++] = len & 0xff; - idat[pi++] = len >> 8 & 0xff; - idat[pi++] = ~len & 0xffff & 0xff; - idat[pi++] = (~len & 0xffff) >> 8 & 0xff; - idat.set(literals.subarray(pos), pi); - pi += literals.length - pos; - var adler = adler32(literals, 0, literals.length); - idat[pi++] = adler >> 24 & 0xff; - idat[pi++] = adler >> 16 & 0xff; - idat[pi++] = adler >> 8 & 0xff; - idat[pi++] = adler & 0xff; - return idat; - } - - function encode(imgData, kind, forceDataSchema, isMask) { - var width = imgData.width; - var height = imgData.height; - var bitDepth, colorType, lineSize; - var bytes = imgData.data; - - switch (kind) { - case _util.ImageKind.GRAYSCALE_1BPP: - colorType = 0; - bitDepth = 1; - lineSize = width + 7 >> 3; - break; - - case _util.ImageKind.RGB_24BPP: - colorType = 2; - bitDepth = 8; - lineSize = width * 3; - break; - - case _util.ImageKind.RGBA_32BPP: - colorType = 6; - bitDepth = 8; - lineSize = width * 4; - break; - - default: - throw new Error('invalid format'); - } - - var literals = new Uint8Array((1 + lineSize) * height); - var offsetLiterals = 0, - offsetBytes = 0; - var y, i; - - for (y = 0; y < height; ++y) { - literals[offsetLiterals++] = 0; - literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize), offsetLiterals); - offsetBytes += lineSize; - offsetLiterals += lineSize; - } - - if (kind === _util.ImageKind.GRAYSCALE_1BPP && isMask) { - offsetLiterals = 0; - - for (y = 0; y < height; y++) { - offsetLiterals++; - - for (i = 0; i < lineSize; i++) { - literals[offsetLiterals++] ^= 0xFF; - } - } - } - - var ihdr = new Uint8Array([width >> 24 & 0xff, width >> 16 & 0xff, width >> 8 & 0xff, width & 0xff, height >> 24 & 0xff, height >> 16 & 0xff, height >> 8 & 0xff, height & 0xff, bitDepth, colorType, 0x00, 0x00, 0x00]); - var idat = deflateSync(literals); - var pngLength = PNG_HEADER.length + CHUNK_WRAPPER_SIZE * 3 + ihdr.length + idat.length; - var data = new Uint8Array(pngLength); - var offset = 0; - data.set(PNG_HEADER, offset); - offset += PNG_HEADER.length; - writePngChunk('IHDR', ihdr, data, offset); - offset += CHUNK_WRAPPER_SIZE + ihdr.length; - writePngChunk('IDATA', idat, data, offset); - offset += CHUNK_WRAPPER_SIZE + idat.length; - writePngChunk('IEND', new Uint8Array(0), data, offset); - return (0, _util.createObjectURL)(data, 'image/png', forceDataSchema); - } - - return function convertImgDataToPng(imgData, forceDataSchema, isMask) { - var kind = imgData.kind === undefined ? _util.ImageKind.GRAYSCALE_1BPP : imgData.kind; - return encode(imgData, kind, forceDataSchema, isMask); - }; - }(); - - var SVGExtraState = function SVGExtraStateClosure() { - function SVGExtraState() { - this.fontSizeScale = 1; - this.fontWeight = SVG_DEFAULTS.fontWeight; - this.fontSize = 0; - this.textMatrix = _util.IDENTITY_MATRIX; - this.fontMatrix = _util.FONT_IDENTITY_MATRIX; - this.leading = 0; - this.textRenderingMode = _util.TextRenderingMode.FILL; - this.x = 0; - this.y = 0; - this.lineX = 0; - this.lineY = 0; - this.charSpacing = 0; - this.wordSpacing = 0; - this.textHScale = 1; - this.textRise = 0; - this.fillColor = SVG_DEFAULTS.fillColor; - this.strokeColor = '#000000'; - this.fillAlpha = 1; - this.strokeAlpha = 1; - this.lineWidth = 1; - this.lineJoin = ''; - this.lineCap = ''; - this.miterLimit = 0; - this.dashArray = []; - this.dashPhase = 0; - this.dependencies = []; - this.activeClipUrl = null; - this.clipGroup = null; - this.maskId = ''; - } - - SVGExtraState.prototype = { - clone: function SVGExtraState_clone() { - return Object.create(this); - }, - setCurrentPoint: function SVGExtraState_setCurrentPoint(x, y) { - this.x = x; - this.y = y; - } - }; - return SVGExtraState; - }(); - - exports.SVGGraphics = SVGGraphics = function SVGGraphicsClosure() { - function opListToTree(opList) { - var opTree = []; - var tmp = []; - var opListLen = opList.length; - - for (var x = 0; x < opListLen; x++) { - if (opList[x].fn === 'save') { - opTree.push({ - 'fnId': 92, - 'fn': 'group', - 'items': [] - }); - tmp.push(opTree); - opTree = opTree[opTree.length - 1].items; - continue; - } - - if (opList[x].fn === 'restore') { - opTree = tmp.pop(); - } else { - opTree.push(opList[x]); - } - } - - return opTree; - } - - function pf(value) { - if (Number.isInteger(value)) { - return value.toString(); - } - - var s = value.toFixed(10); - var i = s.length - 1; - - if (s[i] !== '0') { - return s; - } - - do { - i--; - } while (s[i] === '0'); - - return s.substring(0, s[i] === '.' ? i : i + 1); - } - - function pm(m) { - if (m[4] === 0 && m[5] === 0) { - if (m[1] === 0 && m[2] === 0) { - if (m[0] === 1 && m[3] === 1) { - return ''; - } - - return 'scale(' + pf(m[0]) + ' ' + pf(m[3]) + ')'; - } - - if (m[0] === m[3] && m[1] === -m[2]) { - var a = Math.acos(m[0]) * 180 / Math.PI; - return 'rotate(' + pf(a) + ')'; - } - } else { - if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1) { - return 'translate(' + pf(m[4]) + ' ' + pf(m[5]) + ')'; - } - } - - return 'matrix(' + pf(m[0]) + ' ' + pf(m[1]) + ' ' + pf(m[2]) + ' ' + pf(m[3]) + ' ' + pf(m[4]) + ' ' + pf(m[5]) + ')'; - } - - function SVGGraphics(commonObjs, objs, forceDataSchema) { - this.svgFactory = new _dom_utils.DOMSVGFactory(); - this.current = new SVGExtraState(); - this.transformMatrix = _util.IDENTITY_MATRIX; - this.transformStack = []; - this.extraStack = []; - this.commonObjs = commonObjs; - this.objs = objs; - this.pendingClip = null; - this.pendingEOFill = false; - this.embedFonts = false; - this.embeddedFonts = Object.create(null); - this.cssStyle = null; - this.forceDataSchema = !!forceDataSchema; - } - - var XML_NS = 'http://www.w3.org/XML/1998/namespace'; - var XLINK_NS = 'http://www.w3.org/1999/xlink'; - var LINE_CAP_STYLES = ['butt', 'round', 'square']; - var LINE_JOIN_STYLES = ['miter', 'round', 'bevel']; - var clipCount = 0; - var maskCount = 0; - SVGGraphics.prototype = { - save: function SVGGraphics_save() { - this.transformStack.push(this.transformMatrix); - var old = this.current; - this.extraStack.push(old); - this.current = old.clone(); - }, - restore: function SVGGraphics_restore() { - this.transformMatrix = this.transformStack.pop(); - this.current = this.extraStack.pop(); - this.pendingClip = null; - this.tgrp = null; - }, - group: function SVGGraphics_group(items) { - this.save(); - this.executeOpTree(items); - this.restore(); - }, - loadDependencies: function SVGGraphics_loadDependencies(operatorList) { - var _this = this; - - var fnArray = operatorList.fnArray; - var fnArrayLen = fnArray.length; - var argsArray = operatorList.argsArray; - - for (var i = 0; i < fnArrayLen; i++) { - if (_util.OPS.dependency === fnArray[i]) { - var deps = argsArray[i]; - - for (var n = 0, nn = deps.length; n < nn; n++) { - var obj = deps[n]; - var common = obj.substring(0, 2) === 'g_'; - var promise; - - if (common) { - promise = new Promise(function (resolve) { - _this.commonObjs.get(obj, resolve); - }); - } else { - promise = new Promise(function (resolve) { - _this.objs.get(obj, resolve); - }); - } - - this.current.dependencies.push(promise); - } - } - } - - return Promise.all(this.current.dependencies); - }, - transform: function SVGGraphics_transform(a, b, c, d, e, f) { - var transformMatrix = [a, b, c, d, e, f]; - this.transformMatrix = _util.Util.transform(this.transformMatrix, transformMatrix); - this.tgrp = null; - }, - getSVG: function SVGGraphics_getSVG(operatorList, viewport) { - var _this2 = this; - - this.viewport = viewport; - - var svgElement = this._initialize(viewport); - - return this.loadDependencies(operatorList).then(function () { - _this2.transformMatrix = _util.IDENTITY_MATRIX; - - var opTree = _this2.convertOpList(operatorList); - - _this2.executeOpTree(opTree); - - return svgElement; - }); - }, - convertOpList: function SVGGraphics_convertOpList(operatorList) { - var argsArray = operatorList.argsArray; - var fnArray = operatorList.fnArray; - var fnArrayLen = fnArray.length; - var REVOPS = []; - var opList = []; - - for (var op in _util.OPS) { - REVOPS[_util.OPS[op]] = op; - } - - for (var x = 0; x < fnArrayLen; x++) { - var fnId = fnArray[x]; - opList.push({ - 'fnId': fnId, - 'fn': REVOPS[fnId], - 'args': argsArray[x] - }); - } - - return opListToTree(opList); - }, - executeOpTree: function SVGGraphics_executeOpTree(opTree) { - var opTreeLen = opTree.length; - - for (var x = 0; x < opTreeLen; x++) { - var fn = opTree[x].fn; - var fnId = opTree[x].fnId; - var args = opTree[x].args; - - switch (fnId | 0) { - case _util.OPS.beginText: - this.beginText(); - break; - - case _util.OPS.dependency: - break; - - case _util.OPS.setLeading: - this.setLeading(args); - break; - - case _util.OPS.setLeadingMoveText: - this.setLeadingMoveText(args[0], args[1]); - break; - - case _util.OPS.setFont: - this.setFont(args); - break; - - case _util.OPS.showText: - this.showText(args[0]); - break; - - case _util.OPS.showSpacedText: - this.showText(args[0]); - break; - - case _util.OPS.endText: - this.endText(); - break; - - case _util.OPS.moveText: - this.moveText(args[0], args[1]); - break; - - case _util.OPS.setCharSpacing: - this.setCharSpacing(args[0]); - break; - - case _util.OPS.setWordSpacing: - this.setWordSpacing(args[0]); - break; - - case _util.OPS.setHScale: - this.setHScale(args[0]); - break; - - case _util.OPS.setTextMatrix: - this.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); - break; - - case _util.OPS.setTextRise: - this.setTextRise(args[0]); - break; - - case _util.OPS.setTextRenderingMode: - this.setTextRenderingMode(args[0]); - break; - - case _util.OPS.setLineWidth: - this.setLineWidth(args[0]); - break; - - case _util.OPS.setLineJoin: - this.setLineJoin(args[0]); - break; - - case _util.OPS.setLineCap: - this.setLineCap(args[0]); - break; - - case _util.OPS.setMiterLimit: - this.setMiterLimit(args[0]); - break; - - case _util.OPS.setFillRGBColor: - this.setFillRGBColor(args[0], args[1], args[2]); - break; - - case _util.OPS.setStrokeRGBColor: - this.setStrokeRGBColor(args[0], args[1], args[2]); - break; - - case _util.OPS.setDash: - this.setDash(args[0], args[1]); - break; - - case _util.OPS.setGState: - this.setGState(args[0]); - break; - - case _util.OPS.fill: - this.fill(); - break; - - case _util.OPS.eoFill: - this.eoFill(); - break; - - case _util.OPS.stroke: - this.stroke(); - break; - - case _util.OPS.fillStroke: - this.fillStroke(); - break; - - case _util.OPS.eoFillStroke: - this.eoFillStroke(); - break; - - case _util.OPS.clip: - this.clip('nonzero'); - break; - - case _util.OPS.eoClip: - this.clip('evenodd'); - break; - - case _util.OPS.paintSolidColorImageMask: - this.paintSolidColorImageMask(); - break; - - case _util.OPS.paintJpegXObject: - this.paintJpegXObject(args[0], args[1], args[2]); - break; - - case _util.OPS.paintImageXObject: - this.paintImageXObject(args[0]); - break; - - case _util.OPS.paintInlineImageXObject: - this.paintInlineImageXObject(args[0]); - break; - - case _util.OPS.paintImageMaskXObject: - this.paintImageMaskXObject(args[0]); - break; - - case _util.OPS.paintFormXObjectBegin: - this.paintFormXObjectBegin(args[0], args[1]); - break; - - case _util.OPS.paintFormXObjectEnd: - this.paintFormXObjectEnd(); - break; - - case _util.OPS.closePath: - this.closePath(); - break; - - case _util.OPS.closeStroke: - this.closeStroke(); - break; - - case _util.OPS.closeFillStroke: - this.closeFillStroke(); - break; - - case _util.OPS.closeEOFillStroke: - this.closeEOFillStroke(); - break; - - case _util.OPS.nextLine: - this.nextLine(); - break; - - case _util.OPS.transform: - this.transform(args[0], args[1], args[2], args[3], args[4], args[5]); - break; - - case _util.OPS.constructPath: - this.constructPath(args[0], args[1]); - break; - - case _util.OPS.endPath: - this.endPath(); - break; - - case 92: - this.group(opTree[x].items); - break; - - default: - (0, _util.warn)('Unimplemented operator ' + fn); - break; - } - } - }, - setWordSpacing: function SVGGraphics_setWordSpacing(wordSpacing) { - this.current.wordSpacing = wordSpacing; - }, - setCharSpacing: function SVGGraphics_setCharSpacing(charSpacing) { - this.current.charSpacing = charSpacing; - }, - nextLine: function SVGGraphics_nextLine() { - this.moveText(0, this.current.leading); - }, - setTextMatrix: function SVGGraphics_setTextMatrix(a, b, c, d, e, f) { - var current = this.current; - this.current.textMatrix = this.current.lineMatrix = [a, b, c, d, e, f]; - this.current.x = this.current.lineX = 0; - this.current.y = this.current.lineY = 0; - current.xcoords = []; - current.tspan = this.svgFactory.createElement('svg:tspan'); - current.tspan.setAttributeNS(null, 'font-family', current.fontFamily); - current.tspan.setAttributeNS(null, 'font-size', pf(current.fontSize) + 'px'); - current.tspan.setAttributeNS(null, 'y', pf(-current.y)); - current.txtElement = this.svgFactory.createElement('svg:text'); - current.txtElement.appendChild(current.tspan); - }, - beginText: function SVGGraphics_beginText() { - this.current.x = this.current.lineX = 0; - this.current.y = this.current.lineY = 0; - this.current.textMatrix = _util.IDENTITY_MATRIX; - this.current.lineMatrix = _util.IDENTITY_MATRIX; - this.current.tspan = this.svgFactory.createElement('svg:tspan'); - this.current.txtElement = this.svgFactory.createElement('svg:text'); - this.current.txtgrp = this.svgFactory.createElement('svg:g'); - this.current.xcoords = []; - }, - moveText: function SVGGraphics_moveText(x, y) { - var current = this.current; - this.current.x = this.current.lineX += x; - this.current.y = this.current.lineY += y; - current.xcoords = []; - current.tspan = this.svgFactory.createElement('svg:tspan'); - current.tspan.setAttributeNS(null, 'font-family', current.fontFamily); - current.tspan.setAttributeNS(null, 'font-size', pf(current.fontSize) + 'px'); - current.tspan.setAttributeNS(null, 'y', pf(-current.y)); - }, - showText: function SVGGraphics_showText(glyphs) { - var current = this.current; - var font = current.font; - var fontSize = current.fontSize; - - if (fontSize === 0) { - return; - } - - var charSpacing = current.charSpacing; - var wordSpacing = current.wordSpacing; - var fontDirection = current.fontDirection; - var textHScale = current.textHScale * fontDirection; - var glyphsLength = glyphs.length; - var vertical = font.vertical; - var widthAdvanceScale = fontSize * current.fontMatrix[0]; - - var x = 0, - i; - - for (i = 0; i < glyphsLength; ++i) { - var glyph = glyphs[i]; - - if (glyph === null) { - x += fontDirection * wordSpacing; - continue; - } else if ((0, _util.isNum)(glyph)) { - x += -glyph * fontSize * 0.001; - continue; - } - - var width = glyph.width; - var character = glyph.fontChar; - var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; - var charWidth = width * widthAdvanceScale + spacing * fontDirection; - - if (!glyph.isInFont && !font.missingFile) { - x += charWidth; - continue; - } - - current.xcoords.push(current.x + x * textHScale); - current.tspan.textContent += character; - x += charWidth; - } - - if (vertical) { - current.y -= x * textHScale; - } else { - current.x += x * textHScale; - } - - current.tspan.setAttributeNS(null, 'x', current.xcoords.map(pf).join(' ')); - current.tspan.setAttributeNS(null, 'y', pf(-current.y)); - current.tspan.setAttributeNS(null, 'font-family', current.fontFamily); - current.tspan.setAttributeNS(null, 'font-size', pf(current.fontSize) + 'px'); - - if (current.fontStyle !== SVG_DEFAULTS.fontStyle) { - current.tspan.setAttributeNS(null, 'font-style', current.fontStyle); - } - - if (current.fontWeight !== SVG_DEFAULTS.fontWeight) { - current.tspan.setAttributeNS(null, 'font-weight', current.fontWeight); - } - - var fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; - - if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - if (current.fillColor !== SVG_DEFAULTS.fillColor) { - current.tspan.setAttributeNS(null, 'fill', current.fillColor); - } - - if (current.fillAlpha < 1) { - current.tspan.setAttributeNS(null, 'fill-opacity', current.fillAlpha); - } - } else if (current.textRenderingMode === _util.TextRenderingMode.ADD_TO_PATH) { - current.tspan.setAttributeNS(null, 'fill', 'transparent'); - } else { - current.tspan.setAttributeNS(null, 'fill', 'none'); - } - - if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - this._setStrokeAttributes(current.tspan); - } - - var textMatrix = current.textMatrix; - - if (current.textRise !== 0) { - textMatrix = textMatrix.slice(); - textMatrix[5] += current.textRise; - } - - current.txtElement.setAttributeNS(null, 'transform', pm(textMatrix) + ' scale(1, -1)'); - current.txtElement.setAttributeNS(XML_NS, 'xml:space', 'preserve'); - current.txtElement.appendChild(current.tspan); - current.txtgrp.appendChild(current.txtElement); - - this._ensureTransformGroup().appendChild(current.txtElement); - }, - setLeadingMoveText: function SVGGraphics_setLeadingMoveText(x, y) { - this.setLeading(-y); - this.moveText(x, y); - }, - addFontStyle: function SVGGraphics_addFontStyle(fontObj) { - if (!this.cssStyle) { - this.cssStyle = this.svgFactory.createElement('svg:style'); - this.cssStyle.setAttributeNS(null, 'type', 'text/css'); - this.defs.appendChild(this.cssStyle); - } - - var url = (0, _util.createObjectURL)(fontObj.data, fontObj.mimetype, this.forceDataSchema); - this.cssStyle.textContent += '@font-face { font-family: "' + fontObj.loadedName + '";' + ' src: url(' + url + '); }\n'; - }, - setFont: function SVGGraphics_setFont(details) { - var current = this.current; - var fontObj = this.commonObjs.get(details[0]); - var size = details[1]; - this.current.font = fontObj; - - if (this.embedFonts && fontObj.data && !this.embeddedFonts[fontObj.loadedName]) { - this.addFontStyle(fontObj); - this.embeddedFonts[fontObj.loadedName] = fontObj; - } - - current.fontMatrix = fontObj.fontMatrix ? fontObj.fontMatrix : _util.FONT_IDENTITY_MATRIX; - var bold = fontObj.black ? fontObj.bold ? 'bolder' : 'bold' : fontObj.bold ? 'bold' : 'normal'; - var italic = fontObj.italic ? 'italic' : 'normal'; - - if (size < 0) { - size = -size; - current.fontDirection = -1; - } else { - current.fontDirection = 1; - } - - current.fontSize = size; - current.fontFamily = fontObj.loadedName; - current.fontWeight = bold; - current.fontStyle = italic; - current.tspan = this.svgFactory.createElement('svg:tspan'); - current.tspan.setAttributeNS(null, 'y', pf(-current.y)); - current.xcoords = []; - }, - endText: function endText() { - var current = this.current; - - if (current.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG && current.txtElement && current.txtElement.hasChildNodes()) { - current.element = current.txtElement; - this.clip('nonzero'); - this.endPath(); - } - }, - setLineWidth: function SVGGraphics_setLineWidth(width) { - if (width > 0) { - this.current.lineWidth = width; - } - }, - setLineCap: function SVGGraphics_setLineCap(style) { - this.current.lineCap = LINE_CAP_STYLES[style]; - }, - setLineJoin: function SVGGraphics_setLineJoin(style) { - this.current.lineJoin = LINE_JOIN_STYLES[style]; - }, - setMiterLimit: function SVGGraphics_setMiterLimit(limit) { - this.current.miterLimit = limit; - }, - setStrokeAlpha: function SVGGraphics_setStrokeAlpha(strokeAlpha) { - this.current.strokeAlpha = strokeAlpha; - }, - setStrokeRGBColor: function SVGGraphics_setStrokeRGBColor(r, g, b) { - var color = _util.Util.makeCssRgb(r, g, b); - - this.current.strokeColor = color; - }, - setFillAlpha: function SVGGraphics_setFillAlpha(fillAlpha) { - this.current.fillAlpha = fillAlpha; - }, - setFillRGBColor: function SVGGraphics_setFillRGBColor(r, g, b) { - var color = _util.Util.makeCssRgb(r, g, b); - - this.current.fillColor = color; - this.current.tspan = this.svgFactory.createElement('svg:tspan'); - this.current.xcoords = []; - }, - setDash: function SVGGraphics_setDash(dashArray, dashPhase) { - this.current.dashArray = dashArray; - this.current.dashPhase = dashPhase; - }, - constructPath: function SVGGraphics_constructPath(ops, args) { - var current = this.current; - var x = current.x, - y = current.y; - current.path = this.svgFactory.createElement('svg:path'); - var d = []; - var opLength = ops.length; - - for (var i = 0, j = 0; i < opLength; i++) { - switch (ops[i] | 0) { - case _util.OPS.rectangle: - x = args[j++]; - y = args[j++]; - var width = args[j++]; - var height = args[j++]; - var xw = x + width; - var yh = y + height; - d.push('M', pf(x), pf(y), 'L', pf(xw), pf(y), 'L', pf(xw), pf(yh), 'L', pf(x), pf(yh), 'Z'); - break; - - case _util.OPS.moveTo: - x = args[j++]; - y = args[j++]; - d.push('M', pf(x), pf(y)); - break; - - case _util.OPS.lineTo: - x = args[j++]; - y = args[j++]; - d.push('L', pf(x), pf(y)); - break; - - case _util.OPS.curveTo: - x = args[j + 4]; - y = args[j + 5]; - d.push('C', pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]), pf(x), pf(y)); - j += 6; - break; - - case _util.OPS.curveTo2: - x = args[j + 2]; - y = args[j + 3]; - d.push('C', pf(x), pf(y), pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3])); - j += 4; - break; - - case _util.OPS.curveTo3: - x = args[j + 2]; - y = args[j + 3]; - d.push('C', pf(args[j]), pf(args[j + 1]), pf(x), pf(y), pf(x), pf(y)); - j += 4; - break; - - case _util.OPS.closePath: - d.push('Z'); - break; - } - } - - current.path.setAttributeNS(null, 'd', d.join(' ')); - current.path.setAttributeNS(null, 'fill', 'none'); - - this._ensureTransformGroup().appendChild(current.path); - - current.element = current.path; - current.setCurrentPoint(x, y); - }, - endPath: function SVGGraphics_endPath() { - if (!this.pendingClip) { - return; - } - - var current = this.current; - var clipId = 'clippath' + clipCount; - clipCount++; - var clipPath = this.svgFactory.createElement('svg:clipPath'); - clipPath.setAttributeNS(null, 'id', clipId); - clipPath.setAttributeNS(null, 'transform', pm(this.transformMatrix)); - var clipElement = current.element.cloneNode(true); - - if (this.pendingClip === 'evenodd') { - clipElement.setAttributeNS(null, 'clip-rule', 'evenodd'); - } else { - clipElement.setAttributeNS(null, 'clip-rule', 'nonzero'); - } - - this.pendingClip = null; - clipPath.appendChild(clipElement); - this.defs.appendChild(clipPath); - - if (current.activeClipUrl) { - current.clipGroup = null; - this.extraStack.forEach(function (prev) { - prev.clipGroup = null; - }); - clipPath.setAttributeNS(null, 'clip-path', current.activeClipUrl); - } - - current.activeClipUrl = 'url(#' + clipId + ')'; - this.tgrp = null; - }, - clip: function SVGGraphics_clip(type) { - this.pendingClip = type; - }, - closePath: function SVGGraphics_closePath() { - var current = this.current; - - if (current.path) { - var d = current.path.getAttributeNS(null, 'd'); - d += 'Z'; - current.path.setAttributeNS(null, 'd', d); - } - }, - setLeading: function SVGGraphics_setLeading(leading) { - this.current.leading = -leading; - }, - setTextRise: function SVGGraphics_setTextRise(textRise) { - this.current.textRise = textRise; - }, - setTextRenderingMode: function setTextRenderingMode(textRenderingMode) { - this.current.textRenderingMode = textRenderingMode; - }, - setHScale: function SVGGraphics_setHScale(scale) { - this.current.textHScale = scale / 100; - }, - setGState: function SVGGraphics_setGState(states) { - for (var i = 0, ii = states.length; i < ii; i++) { - var state = states[i]; - var key = state[0]; - var value = state[1]; - - switch (key) { - case 'LW': - this.setLineWidth(value); - break; - - case 'LC': - this.setLineCap(value); - break; - - case 'LJ': - this.setLineJoin(value); - break; - - case 'ML': - this.setMiterLimit(value); - break; - - case 'D': - this.setDash(value[0], value[1]); - break; - - case 'Font': - this.setFont(value); - break; - - case 'CA': - this.setStrokeAlpha(value); - break; - - case 'ca': - this.setFillAlpha(value); - break; - - default: - (0, _util.warn)('Unimplemented graphic state ' + key); - break; - } - } - }, - fill: function SVGGraphics_fill() { - var current = this.current; - - if (current.element) { - current.element.setAttributeNS(null, 'fill', current.fillColor); - current.element.setAttributeNS(null, 'fill-opacity', current.fillAlpha); - this.endPath(); - } - }, - stroke: function SVGGraphics_stroke() { - var current = this.current; - - if (current.element) { - this._setStrokeAttributes(current.element); - - current.element.setAttributeNS(null, 'fill', 'none'); - this.endPath(); - } - }, - _setStrokeAttributes: function _setStrokeAttributes(element) { - var current = this.current; - element.setAttributeNS(null, 'stroke', current.strokeColor); - element.setAttributeNS(null, 'stroke-opacity', current.strokeAlpha); - element.setAttributeNS(null, 'stroke-miterlimit', pf(current.miterLimit)); - element.setAttributeNS(null, 'stroke-linecap', current.lineCap); - element.setAttributeNS(null, 'stroke-linejoin', current.lineJoin); - element.setAttributeNS(null, 'stroke-width', pf(current.lineWidth) + 'px'); - element.setAttributeNS(null, 'stroke-dasharray', current.dashArray.map(pf).join(' ')); - element.setAttributeNS(null, 'stroke-dashoffset', pf(current.dashPhase) + 'px'); - }, - eoFill: function SVGGraphics_eoFill() { - if (this.current.element) { - this.current.element.setAttributeNS(null, 'fill-rule', 'evenodd'); - } - - this.fill(); - }, - fillStroke: function SVGGraphics_fillStroke() { - this.stroke(); - this.fill(); - }, - eoFillStroke: function SVGGraphics_eoFillStroke() { - if (this.current.element) { - this.current.element.setAttributeNS(null, 'fill-rule', 'evenodd'); - } - - this.fillStroke(); - }, - closeStroke: function SVGGraphics_closeStroke() { - this.closePath(); - this.stroke(); - }, - closeFillStroke: function SVGGraphics_closeFillStroke() { - this.closePath(); - this.fillStroke(); - }, - closeEOFillStroke: function closeEOFillStroke() { - this.closePath(); - this.eoFillStroke(); - }, - paintSolidColorImageMask: function SVGGraphics_paintSolidColorImageMask() { - var current = this.current; - var rect = this.svgFactory.createElement('svg:rect'); - rect.setAttributeNS(null, 'x', '0'); - rect.setAttributeNS(null, 'y', '0'); - rect.setAttributeNS(null, 'width', '1px'); - rect.setAttributeNS(null, 'height', '1px'); - rect.setAttributeNS(null, 'fill', current.fillColor); - - this._ensureTransformGroup().appendChild(rect); - }, - paintJpegXObject: function SVGGraphics_paintJpegXObject(objId, w, h) { - var imgObj = this.objs.get(objId); - var imgEl = this.svgFactory.createElement('svg:image'); - imgEl.setAttributeNS(XLINK_NS, 'xlink:href', imgObj.src); - imgEl.setAttributeNS(null, 'width', pf(w)); - imgEl.setAttributeNS(null, 'height', pf(h)); - imgEl.setAttributeNS(null, 'x', '0'); - imgEl.setAttributeNS(null, 'y', pf(-h)); - imgEl.setAttributeNS(null, 'transform', 'scale(' + pf(1 / w) + ' ' + pf(-1 / h) + ')'); - - this._ensureTransformGroup().appendChild(imgEl); - }, - paintImageXObject: function SVGGraphics_paintImageXObject(objId) { - var imgData = this.objs.get(objId); - - if (!imgData) { - (0, _util.warn)('Dependent image isn\'t ready yet'); - return; - } - - this.paintInlineImageXObject(imgData); - }, - paintInlineImageXObject: function SVGGraphics_paintInlineImageXObject(imgData, mask) { - var width = imgData.width; - var height = imgData.height; - var imgSrc = convertImgDataToPng(imgData, this.forceDataSchema, !!mask); - var cliprect = this.svgFactory.createElement('svg:rect'); - cliprect.setAttributeNS(null, 'x', '0'); - cliprect.setAttributeNS(null, 'y', '0'); - cliprect.setAttributeNS(null, 'width', pf(width)); - cliprect.setAttributeNS(null, 'height', pf(height)); - this.current.element = cliprect; - this.clip('nonzero'); - var imgEl = this.svgFactory.createElement('svg:image'); - imgEl.setAttributeNS(XLINK_NS, 'xlink:href', imgSrc); - imgEl.setAttributeNS(null, 'x', '0'); - imgEl.setAttributeNS(null, 'y', pf(-height)); - imgEl.setAttributeNS(null, 'width', pf(width) + 'px'); - imgEl.setAttributeNS(null, 'height', pf(height) + 'px'); - imgEl.setAttributeNS(null, 'transform', 'scale(' + pf(1 / width) + ' ' + pf(-1 / height) + ')'); - - if (mask) { - mask.appendChild(imgEl); - } else { - this._ensureTransformGroup().appendChild(imgEl); - } - }, - paintImageMaskXObject: function SVGGraphics_paintImageMaskXObject(imgData) { - var current = this.current; - var width = imgData.width; - var height = imgData.height; - var fillColor = current.fillColor; - current.maskId = 'mask' + maskCount++; - var mask = this.svgFactory.createElement('svg:mask'); - mask.setAttributeNS(null, 'id', current.maskId); - var rect = this.svgFactory.createElement('svg:rect'); - rect.setAttributeNS(null, 'x', '0'); - rect.setAttributeNS(null, 'y', '0'); - rect.setAttributeNS(null, 'width', pf(width)); - rect.setAttributeNS(null, 'height', pf(height)); - rect.setAttributeNS(null, 'fill', fillColor); - rect.setAttributeNS(null, 'mask', 'url(#' + current.maskId + ')'); - this.defs.appendChild(mask); - - this._ensureTransformGroup().appendChild(rect); - - this.paintInlineImageXObject(imgData, mask); - }, - paintFormXObjectBegin: function SVGGraphics_paintFormXObjectBegin(matrix, bbox) { - if (Array.isArray(matrix) && matrix.length === 6) { - this.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]); - } - - if (bbox) { - var width = bbox[2] - bbox[0]; - var height = bbox[3] - bbox[1]; - var cliprect = this.svgFactory.createElement('svg:rect'); - cliprect.setAttributeNS(null, 'x', bbox[0]); - cliprect.setAttributeNS(null, 'y', bbox[1]); - cliprect.setAttributeNS(null, 'width', pf(width)); - cliprect.setAttributeNS(null, 'height', pf(height)); - this.current.element = cliprect; - this.clip('nonzero'); - this.endPath(); - } - }, - paintFormXObjectEnd: function SVGGraphics_paintFormXObjectEnd() {}, - _initialize: function _initialize(viewport) { - var svg = this.svgFactory.create(viewport.width, viewport.height); - var definitions = this.svgFactory.createElement('svg:defs'); - svg.appendChild(definitions); - this.defs = definitions; - var rootGroup = this.svgFactory.createElement('svg:g'); - rootGroup.setAttributeNS(null, 'transform', pm(viewport.transform)); - svg.appendChild(rootGroup); - this.svg = rootGroup; - return svg; - }, - _ensureClipGroup: function SVGGraphics_ensureClipGroup() { - if (!this.current.clipGroup) { - var clipGroup = this.svgFactory.createElement('svg:g'); - clipGroup.setAttributeNS(null, 'clip-path', this.current.activeClipUrl); - this.svg.appendChild(clipGroup); - this.current.clipGroup = clipGroup; - } - - return this.current.clipGroup; - }, - _ensureTransformGroup: function SVGGraphics_ensureTransformGroup() { - if (!this.tgrp) { - this.tgrp = this.svgFactory.createElement('svg:g'); - this.tgrp.setAttributeNS(null, 'transform', pm(this.transformMatrix)); - - if (this.current.activeClipUrl) { - this._ensureClipGroup().appendChild(this.tgrp); - } else { - this.svg.appendChild(this.tgrp); - } - } - - return this.tgrp; - } - }; - return SVGGraphics; - }(); - } - - /***/ }), - /* 165 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.PDFNodeStream = void 0; - - var _regenerator = _interopRequireDefault(__w_extracthighlights_require__(147)); - - var _util = __w_extracthighlights_require__(1); - - var _network_utils = __w_extracthighlights_require__(166); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - - function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - - function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - - function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - - function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - - function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - - var fs = require$$3__default['default']; - - var http = require$$4__default['default']; - - var https = require$$5__default['default']; - - var url = require$$6__default['default']; - - var fileUriRegex = /^file:\/\/\/[a-zA-Z]:\//; - - function parseUrl(sourceUrl) { - var parsedUrl = url.parse(sourceUrl); - - if (parsedUrl.protocol === 'file:' || parsedUrl.host) { - return parsedUrl; - } - - if (/^[a-z]:[/\\]/i.test(sourceUrl)) { - return url.parse("file:///".concat(sourceUrl)); - } - - if (!parsedUrl.host) { - parsedUrl.protocol = 'file:'; - } - - return parsedUrl; - } - - var PDFNodeStream = - /*#__PURE__*/ - function () { - function PDFNodeStream(source) { - _classCallCheck(this, PDFNodeStream); - - this.source = source; - this.url = parseUrl(source.url); - this.isHttp = this.url.protocol === 'http:' || this.url.protocol === 'https:'; - this.isFsUrl = this.url.protocol === 'file:'; - this.httpHeaders = this.isHttp && source.httpHeaders || {}; - this._fullRequest = null; - this._rangeRequestReaders = []; - } - - _createClass(PDFNodeStream, [{ - key: "getFullReader", - value: function getFullReader() { - (0, _util.assert)(!this._fullRequest); - this._fullRequest = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this); - return this._fullRequest; - } - }, { - key: "getRangeReader", - value: function getRangeReader(start, end) { - var rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end); - - this._rangeRequestReaders.push(rangeReader); - - return rangeReader; - } - }, { - key: "cancelAllRequests", - value: function cancelAllRequests(reason) { - if (this._fullRequest) { - this._fullRequest.cancel(reason); - } - - var readers = this._rangeRequestReaders.slice(0); - - readers.forEach(function (reader) { - reader.cancel(reason); - }); - } - }]); - - return PDFNodeStream; - }(); - - exports.PDFNodeStream = PDFNodeStream; - - var BaseFullReader = - /*#__PURE__*/ - function () { - function BaseFullReader(stream) { - _classCallCheck(this, BaseFullReader); - - this._url = stream.url; - this._done = false; - this._storedError = null; - this.onProgress = null; - var source = stream.source; - this._contentLength = source.length; - this._loaded = 0; - this._filename = null; - this._disableRange = source.disableRange || false; - this._rangeChunkSize = source.rangeChunkSize; - - if (!this._rangeChunkSize && !this._disableRange) { - this._disableRange = true; - } - - this._isStreamingSupported = !source.disableStream; - this._isRangeSupported = !source.disableRange; - this._readableStream = null; - this._readCapability = (0, _util.createPromiseCapability)(); - this._headersCapability = (0, _util.createPromiseCapability)(); - } - - _createClass(BaseFullReader, [{ - key: "read", - value: function () { - var _read = _asyncToGenerator( - /*#__PURE__*/ - _regenerator.default.mark(function _callee() { - var chunk, buffer; - return _regenerator.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.next = 2; - return this._readCapability.promise; - - case 2: - if (!this._done) { - _context.next = 4; - break; - } - - return _context.abrupt("return", { - value: undefined, - done: true - }); - - case 4: - if (!this._storedError) { - _context.next = 6; - break; - } - - throw this._storedError; - - case 6: - chunk = this._readableStream.read(); - - if (!(chunk === null)) { - _context.next = 10; - break; - } - - this._readCapability = (0, _util.createPromiseCapability)(); - return _context.abrupt("return", this.read()); - - case 10: - this._loaded += chunk.length; - - if (this.onProgress) { - this.onProgress({ - loaded: this._loaded, - total: this._contentLength - }); - } - - buffer = new Uint8Array(chunk).buffer; - return _context.abrupt("return", { - value: buffer, - done: false - }); - - case 14: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - - function read() { - return _read.apply(this, arguments); - } - - return read; - }() - }, { - key: "cancel", - value: function cancel(reason) { - if (!this._readableStream) { - this._error(reason); - - return; - } - - this._readableStream.destroy(reason); - } - }, { - key: "_error", - value: function _error(reason) { - this._storedError = reason; - - this._readCapability.resolve(); - } - }, { - key: "_setReadableStream", - value: function _setReadableStream(readableStream) { - var _this = this; - - this._readableStream = readableStream; - readableStream.on('readable', function () { - _this._readCapability.resolve(); - }); - readableStream.on('end', function () { - readableStream.destroy(); - _this._done = true; - - _this._readCapability.resolve(); - }); - readableStream.on('error', function (reason) { - _this._error(reason); - }); - - if (!this._isStreamingSupported && this._isRangeSupported) { - this._error(new _util.AbortException('streaming is disabled')); - } - - if (this._storedError) { - this._readableStream.destroy(this._storedError); - } - } - }, { - key: "headersReady", - get: function get() { - return this._headersCapability.promise; - } - }, { - key: "filename", - get: function get() { - return this._filename; - } - }, { - key: "contentLength", - get: function get() { - return this._contentLength; - } - }, { - key: "isRangeSupported", - get: function get() { - return this._isRangeSupported; - } - }, { - key: "isStreamingSupported", - get: function get() { - return this._isStreamingSupported; - } - }]); - - return BaseFullReader; - }(); - - var BaseRangeReader = - /*#__PURE__*/ - function () { - function BaseRangeReader(stream) { - _classCallCheck(this, BaseRangeReader); - - this._url = stream.url; - this._done = false; - this._storedError = null; - this.onProgress = null; - this._loaded = 0; - this._readableStream = null; - this._readCapability = (0, _util.createPromiseCapability)(); - var source = stream.source; - this._isStreamingSupported = !source.disableStream; - } - - _createClass(BaseRangeReader, [{ - key: "read", - value: function () { - var _read2 = _asyncToGenerator( - /*#__PURE__*/ - _regenerator.default.mark(function _callee2() { - var chunk, buffer; - return _regenerator.default.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - _context2.next = 2; - return this._readCapability.promise; - - case 2: - if (!this._done) { - _context2.next = 4; - break; - } - - return _context2.abrupt("return", { - value: undefined, - done: true - }); - - case 4: - if (!this._storedError) { - _context2.next = 6; - break; - } - - throw this._storedError; - - case 6: - chunk = this._readableStream.read(); - - if (!(chunk === null)) { - _context2.next = 10; - break; - } - - this._readCapability = (0, _util.createPromiseCapability)(); - return _context2.abrupt("return", this.read()); - - case 10: - this._loaded += chunk.length; - - if (this.onProgress) { - this.onProgress({ - loaded: this._loaded - }); - } - - buffer = new Uint8Array(chunk).buffer; - return _context2.abrupt("return", { - value: buffer, - done: false - }); - - case 14: - case "end": - return _context2.stop(); - } - } - }, _callee2, this); - })); - - function read() { - return _read2.apply(this, arguments); - } - - return read; - }() - }, { - key: "cancel", - value: function cancel(reason) { - if (!this._readableStream) { - this._error(reason); - - return; - } - - this._readableStream.destroy(reason); - } - }, { - key: "_error", - value: function _error(reason) { - this._storedError = reason; - - this._readCapability.resolve(); - } - }, { - key: "_setReadableStream", - value: function _setReadableStream(readableStream) { - var _this2 = this; - - this._readableStream = readableStream; - readableStream.on('readable', function () { - _this2._readCapability.resolve(); - }); - readableStream.on('end', function () { - readableStream.destroy(); - _this2._done = true; - - _this2._readCapability.resolve(); - }); - readableStream.on('error', function (reason) { - _this2._error(reason); - }); - - if (this._storedError) { - this._readableStream.destroy(this._storedError); - } - } - }, { - key: "isStreamingSupported", - get: function get() { - return this._isStreamingSupported; - } - }]); - - return BaseRangeReader; - }(); - - function createRequestOptions(url, headers) { - return { - protocol: url.protocol, - auth: url.auth, - host: url.hostname, - port: url.port, - path: url.path, - method: 'GET', - headers: headers - }; - } - - var PDFNodeStreamFullReader = - /*#__PURE__*/ - function (_BaseFullReader) { - _inherits(PDFNodeStreamFullReader, _BaseFullReader); - - function PDFNodeStreamFullReader(stream) { - var _this3; - - _classCallCheck(this, PDFNodeStreamFullReader); - - _this3 = _possibleConstructorReturn(this, _getPrototypeOf(PDFNodeStreamFullReader).call(this, stream)); - - var handleResponse = function handleResponse(response) { - if (response.statusCode === 404) { - var error = new _util.MissingPDFException("Missing PDF \"".concat(_this3._url, "\".")); - _this3._storedError = error; - - _this3._headersCapability.reject(error); - - return; - } - - _this3._headersCapability.resolve(); - - _this3._setReadableStream(response); - - var getResponseHeader = function getResponseHeader(name) { - return _this3._readableStream.headers[name.toLowerCase()]; - }; - - var _validateRangeRequest = (0, _network_utils.validateRangeRequestCapabilities)({ - getResponseHeader: getResponseHeader, - isHttp: stream.isHttp, - rangeChunkSize: _this3._rangeChunkSize, - disableRange: _this3._disableRange - }), - allowRangeRequests = _validateRangeRequest.allowRangeRequests, - suggestedLength = _validateRangeRequest.suggestedLength; - - _this3._isRangeSupported = allowRangeRequests; - _this3._contentLength = suggestedLength || _this3._contentLength; - _this3._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); - }; - - _this3._request = null; - - if (_this3._url.protocol === 'http:') { - _this3._request = http.request(createRequestOptions(_this3._url, stream.httpHeaders), handleResponse); - } else { - _this3._request = https.request(createRequestOptions(_this3._url, stream.httpHeaders), handleResponse); - } - - _this3._request.on('error', function (reason) { - _this3._storedError = reason; - - _this3._headersCapability.reject(reason); - }); - - _this3._request.end(); - - return _this3; - } - - return PDFNodeStreamFullReader; - }(BaseFullReader); - - var PDFNodeStreamRangeReader = - /*#__PURE__*/ - function (_BaseRangeReader) { - _inherits(PDFNodeStreamRangeReader, _BaseRangeReader); - - function PDFNodeStreamRangeReader(stream, start, end) { - var _this4; - - _classCallCheck(this, PDFNodeStreamRangeReader); - - _this4 = _possibleConstructorReturn(this, _getPrototypeOf(PDFNodeStreamRangeReader).call(this, stream)); - _this4._httpHeaders = {}; - - for (var property in stream.httpHeaders) { - var value = stream.httpHeaders[property]; - - if (typeof value === 'undefined') { - continue; - } - - _this4._httpHeaders[property] = value; - } - - _this4._httpHeaders['Range'] = "bytes=".concat(start, "-").concat(end - 1); - - var handleResponse = function handleResponse(response) { - if (response.statusCode === 404) { - var error = new _util.MissingPDFException("Missing PDF \"".concat(_this4._url, "\".")); - _this4._storedError = error; - return; - } - - _this4._setReadableStream(response); - }; - - _this4._request = null; - - if (_this4._url.protocol === 'http:') { - _this4._request = http.request(createRequestOptions(_this4._url, _this4._httpHeaders), handleResponse); - } else { - _this4._request = https.request(createRequestOptions(_this4._url, _this4._httpHeaders), handleResponse); - } - - _this4._request.on('error', function (reason) { - _this4._storedError = reason; - }); - - _this4._request.end(); - - return _this4; - } - - return PDFNodeStreamRangeReader; - }(BaseRangeReader); - - var PDFNodeStreamFsFullReader = - /*#__PURE__*/ - function (_BaseFullReader2) { - _inherits(PDFNodeStreamFsFullReader, _BaseFullReader2); - - function PDFNodeStreamFsFullReader(stream) { - var _this5; - - _classCallCheck(this, PDFNodeStreamFsFullReader); - - _this5 = _possibleConstructorReturn(this, _getPrototypeOf(PDFNodeStreamFsFullReader).call(this, stream)); - var path = decodeURIComponent(_this5._url.path); - - if (fileUriRegex.test(_this5._url.href)) { - path = path.replace(/^\//, ''); - } - - fs.lstat(path, function (error, stat) { - if (error) { - if (error.code === 'ENOENT') { - error = new _util.MissingPDFException("Missing PDF \"".concat(path, "\".")); - } - - _this5._storedError = error; - - _this5._headersCapability.reject(error); - - return; - } - - _this5._contentLength = stat.size; - - _this5._setReadableStream(fs.createReadStream(path)); - - _this5._headersCapability.resolve(); - }); - return _this5; - } - - return PDFNodeStreamFsFullReader; - }(BaseFullReader); - - var PDFNodeStreamFsRangeReader = - /*#__PURE__*/ - function (_BaseRangeReader2) { - _inherits(PDFNodeStreamFsRangeReader, _BaseRangeReader2); - - function PDFNodeStreamFsRangeReader(stream, start, end) { - var _this6; - - _classCallCheck(this, PDFNodeStreamFsRangeReader); - - _this6 = _possibleConstructorReturn(this, _getPrototypeOf(PDFNodeStreamFsRangeReader).call(this, stream)); - var path = decodeURIComponent(_this6._url.path); - - if (fileUriRegex.test(_this6._url.href)) { - path = path.replace(/^\//, ''); - } - - _this6._setReadableStream(fs.createReadStream(path, { - start: start, - end: end - 1 - })); - - return _this6; - } - - return PDFNodeStreamFsRangeReader; - }(BaseRangeReader); - - /***/ }), - /* 166 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.createResponseStatusError = createResponseStatusError; - exports.extractFilenameFromHeader = extractFilenameFromHeader; - exports.validateRangeRequestCapabilities = validateRangeRequestCapabilities; - exports.validateResponseStatus = validateResponseStatus; - - var _util = __w_extracthighlights_require__(1); - - var _content_disposition = __w_extracthighlights_require__(167); - - function validateRangeRequestCapabilities(_ref) { - var getResponseHeader = _ref.getResponseHeader, - isHttp = _ref.isHttp, - rangeChunkSize = _ref.rangeChunkSize, - disableRange = _ref.disableRange; - (0, _util.assert)(rangeChunkSize > 0, 'Range chunk size must be larger than zero'); - var returnValues = { - allowRangeRequests: false, - suggestedLength: undefined - }; - var length = parseInt(getResponseHeader('Content-Length'), 10); - - if (!Number.isInteger(length)) { - return returnValues; - } - - returnValues.suggestedLength = length; - - if (length <= 2 * rangeChunkSize) { - return returnValues; - } - - if (disableRange || !isHttp) { - return returnValues; - } - - if (getResponseHeader('Accept-Ranges') !== 'bytes') { - return returnValues; - } - - var contentEncoding = getResponseHeader('Content-Encoding') || 'identity'; - - if (contentEncoding !== 'identity') { - return returnValues; - } - - returnValues.allowRangeRequests = true; - return returnValues; - } - - function extractFilenameFromHeader(getResponseHeader) { - var contentDisposition = getResponseHeader('Content-Disposition'); - - if (contentDisposition) { - var filename = (0, _content_disposition.getFilenameFromContentDispositionHeader)(contentDisposition); - - if (/\.pdf$/i.test(filename)) { - return filename; - } - } - - return null; - } - - function createResponseStatusError(status, url) { - if (status === 404 || status === 0 && /^file:/.test(url)) { - return new _util.MissingPDFException('Missing PDF "' + url + '".'); - } - - return new _util.UnexpectedResponseException('Unexpected server response (' + status + ') while retrieving PDF "' + url + '".', status); - } - - function validateResponseStatus(status) { - return status === 200 || status === 206; - } - - /***/ }), - /* 167 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.getFilenameFromContentDispositionHeader = getFilenameFromContentDispositionHeader; - - function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } - - function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } - - function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } - - function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } - - function getFilenameFromContentDispositionHeader(contentDisposition) { - var needsEncodingFixup = true; - var tmp = toParamRegExp('filename\\*', 'i').exec(contentDisposition); - - if (tmp) { - tmp = tmp[1]; - var filename = rfc2616unquote(tmp); - filename = unescape(filename); - filename = rfc5987decode(filename); - filename = rfc2047decode(filename); - return fixupEncoding(filename); - } - - tmp = rfc2231getparam(contentDisposition); - - if (tmp) { - var _filename = rfc2047decode(tmp); - - return fixupEncoding(_filename); - } - - tmp = toParamRegExp('filename', 'i').exec(contentDisposition); - - if (tmp) { - tmp = tmp[1]; - - var _filename2 = rfc2616unquote(tmp); - - _filename2 = rfc2047decode(_filename2); - return fixupEncoding(_filename2); - } - - function toParamRegExp(attributePattern, flags) { - return new RegExp('(?:^|;)\\s*' + attributePattern + '\\s*=\\s*' + '(' + '[^";\\s][^;\\s]*' + '|' + '"(?:[^"\\\\]|\\\\"?)+"?' + ')', flags); - } - - function textdecode(encoding, value) { - if (encoding) { - if (!/^[\x00-\xFF]+$/.test(value)) { - return value; - } - - try { - var decoder = new TextDecoder(encoding, { - fatal: true - }); - var bytes = Array.from(value, function (ch) { - return ch.charCodeAt(0) & 0xFF; - }); - value = decoder.decode(new Uint8Array(bytes)); - needsEncodingFixup = false; - } catch (e) { - if (/^utf-?8$/i.test(encoding)) { - try { - value = decodeURIComponent(escape(value)); - needsEncodingFixup = false; - } catch (err) {} - } - } - } - - return value; - } - - function fixupEncoding(value) { - if (needsEncodingFixup && /[\x80-\xff]/.test(value)) { - value = textdecode('utf-8', value); - - if (needsEncodingFixup) { - value = textdecode('iso-8859-1', value); - } - } - - return value; - } - - function rfc2231getparam(contentDisposition) { - var matches = [], - match; - var iter = toParamRegExp('filename\\*((?!0\\d)\\d+)(\\*?)', 'ig'); - - while ((match = iter.exec(contentDisposition)) !== null) { - var _match = match, - _match2 = _slicedToArray(_match, 4), - n = _match2[1], - quot = _match2[2], - part = _match2[3]; - - n = parseInt(n, 10); - - if (n in matches) { - if (n === 0) { - break; - } - - continue; - } - - matches[n] = [quot, part]; - } - - var parts = []; - - for (var n = 0; n < matches.length; ++n) { - if (!(n in matches)) { - break; - } - - var _matches$n = _slicedToArray(matches[n], 2), - quot = _matches$n[0], - part = _matches$n[1]; - - part = rfc2616unquote(part); - - if (quot) { - part = unescape(part); - - if (n === 0) { - part = rfc5987decode(part); - } - } - - parts.push(part); - } - - return parts.join(''); - } - - function rfc2616unquote(value) { - if (value.startsWith('"')) { - var parts = value.slice(1).split('\\"'); - - for (var i = 0; i < parts.length; ++i) { - var quotindex = parts[i].indexOf('"'); - - if (quotindex !== -1) { - parts[i] = parts[i].slice(0, quotindex); - parts.length = i + 1; - } - - parts[i] = parts[i].replace(/\\(.)/g, '$1'); - } - - value = parts.join('"'); - } - - return value; - } - - function rfc5987decode(extvalue) { - var encodingend = extvalue.indexOf('\''); - - if (encodingend === -1) { - return extvalue; - } - - var encoding = extvalue.slice(0, encodingend); - var langvalue = extvalue.slice(encodingend + 1); - var value = langvalue.replace(/^[^']*'/, ''); - return textdecode(encoding, value); - } - - function rfc2047decode(value) { - if (!value.startsWith('=?') || /[\x00-\x19\x80-\xff]/.test(value)) { - return value; - } - - return value.replace(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function (_, charset, encoding, text) { - if (encoding === 'q' || encoding === 'Q') { - text = text.replace(/_/g, ' '); - text = text.replace(/=([0-9a-fA-F]{2})/g, function (_, hex) { - return String.fromCharCode(parseInt(hex, 16)); - }); - return textdecode(charset, text); - } - - try { - text = atob(text); - } catch (e) {} - - return textdecode(charset, text); - }); - } - - return ''; - } - - /***/ }), - /* 168 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.PDFFetchStream = void 0; - - var _regenerator = _interopRequireDefault(__w_extracthighlights_require__(147)); - - var _util = __w_extracthighlights_require__(1); - - var _network_utils = __w_extracthighlights_require__(166); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - - function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - - function createFetchOptions(headers, withCredentials, abortController) { - return { - method: 'GET', - headers: headers, - signal: abortController && abortController.signal, - mode: 'cors', - credentials: withCredentials ? 'include' : 'same-origin', - redirect: 'follow' - }; - } - - var PDFFetchStream = - /*#__PURE__*/ - function () { - function PDFFetchStream(source) { - _classCallCheck(this, PDFFetchStream); - - this.source = source; - this.isHttp = /^https?:/i.test(source.url); - this.httpHeaders = this.isHttp && source.httpHeaders || {}; - this._fullRequestReader = null; - this._rangeRequestReaders = []; - } - - _createClass(PDFFetchStream, [{ - key: "getFullReader", - value: function getFullReader() { - (0, _util.assert)(!this._fullRequestReader); - this._fullRequestReader = new PDFFetchStreamReader(this); - return this._fullRequestReader; - } - }, { - key: "getRangeReader", - value: function getRangeReader(begin, end) { - var reader = new PDFFetchStreamRangeReader(this, begin, end); - - this._rangeRequestReaders.push(reader); - - return reader; - } - }, { - key: "cancelAllRequests", - value: function cancelAllRequests(reason) { - if (this._fullRequestReader) { - this._fullRequestReader.cancel(reason); - } - - var readers = this._rangeRequestReaders.slice(0); - - readers.forEach(function (reader) { - reader.cancel(reason); - }); - } - }]); - - return PDFFetchStream; - }(); - - exports.PDFFetchStream = PDFFetchStream; - - var PDFFetchStreamReader = - /*#__PURE__*/ - function () { - function PDFFetchStreamReader(stream) { - var _this = this; - - _classCallCheck(this, PDFFetchStreamReader); - - this._stream = stream; - this._reader = null; - this._loaded = 0; - this._filename = null; - var source = stream.source; - this._withCredentials = source.withCredentials; - this._contentLength = source.length; - this._headersCapability = (0, _util.createPromiseCapability)(); - this._disableRange = source.disableRange || false; - this._rangeChunkSize = source.rangeChunkSize; - - if (!this._rangeChunkSize && !this._disableRange) { - this._disableRange = true; - } - - if (typeof AbortController !== 'undefined') { - this._abortController = new AbortController(); - } - - this._isStreamingSupported = !source.disableStream; - this._isRangeSupported = !source.disableRange; - this._headers = new Headers(); - - for (var property in this._stream.httpHeaders) { - var value = this._stream.httpHeaders[property]; - - if (typeof value === 'undefined') { - continue; - } - - this._headers.append(property, value); - } - - var url = source.url; - fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(function (response) { - if (!(0, _network_utils.validateResponseStatus)(response.status)) { - throw (0, _network_utils.createResponseStatusError)(response.status, url); - } - - _this._reader = response.body.getReader(); - - _this._headersCapability.resolve(); - - var getResponseHeader = function getResponseHeader(name) { - return response.headers.get(name); - }; - - var _validateRangeRequest = (0, _network_utils.validateRangeRequestCapabilities)({ - getResponseHeader: getResponseHeader, - isHttp: _this._stream.isHttp, - rangeChunkSize: _this._rangeChunkSize, - disableRange: _this._disableRange - }), - allowRangeRequests = _validateRangeRequest.allowRangeRequests, - suggestedLength = _validateRangeRequest.suggestedLength; - - _this._isRangeSupported = allowRangeRequests; - _this._contentLength = suggestedLength || _this._contentLength; - _this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); - - if (!_this._isStreamingSupported && _this._isRangeSupported) { - _this.cancel(new _util.AbortException('streaming is disabled')); - } - }).catch(this._headersCapability.reject); - this.onProgress = null; - } - - _createClass(PDFFetchStreamReader, [{ - key: "read", - value: function () { - var _read = _asyncToGenerator( - /*#__PURE__*/ - _regenerator.default.mark(function _callee() { - var _ref, value, done, buffer; - - return _regenerator.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.next = 2; - return this._headersCapability.promise; - - case 2: - _context.next = 4; - return this._reader.read(); - - case 4: - _ref = _context.sent; - value = _ref.value; - done = _ref.done; - - if (!done) { - _context.next = 9; - break; - } - - return _context.abrupt("return", { - value: value, - done: done - }); - - case 9: - this._loaded += value.byteLength; - - if (this.onProgress) { - this.onProgress({ - loaded: this._loaded, - total: this._contentLength - }); - } - - buffer = new Uint8Array(value).buffer; - return _context.abrupt("return", { - value: buffer, - done: false - }); - - case 13: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - - function read() { - return _read.apply(this, arguments); - } - - return read; - }() - }, { - key: "cancel", - value: function cancel(reason) { - if (this._reader) { - this._reader.cancel(reason); - } - - if (this._abortController) { - this._abortController.abort(); - } - } - }, { - key: "headersReady", - get: function get() { - return this._headersCapability.promise; - } - }, { - key: "filename", - get: function get() { - return this._filename; - } - }, { - key: "contentLength", - get: function get() { - return this._contentLength; - } - }, { - key: "isRangeSupported", - get: function get() { - return this._isRangeSupported; - } - }, { - key: "isStreamingSupported", - get: function get() { - return this._isStreamingSupported; - } - }]); - - return PDFFetchStreamReader; - }(); - - var PDFFetchStreamRangeReader = - /*#__PURE__*/ - function () { - function PDFFetchStreamRangeReader(stream, begin, end) { - var _this2 = this; - - _classCallCheck(this, PDFFetchStreamRangeReader); - - this._stream = stream; - this._reader = null; - this._loaded = 0; - var source = stream.source; - this._withCredentials = source.withCredentials; - this._readCapability = (0, _util.createPromiseCapability)(); - this._isStreamingSupported = !source.disableStream; - - if (typeof AbortController !== 'undefined') { - this._abortController = new AbortController(); - } - - this._headers = new Headers(); - - for (var property in this._stream.httpHeaders) { - var value = this._stream.httpHeaders[property]; - - if (typeof value === 'undefined') { - continue; - } - - this._headers.append(property, value); - } - - var rangeStr = begin + '-' + (end - 1); - - this._headers.append('Range', 'bytes=' + rangeStr); - - var url = source.url; - fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(function (response) { - if (!(0, _network_utils.validateResponseStatus)(response.status)) { - throw (0, _network_utils.createResponseStatusError)(response.status, url); - } - - _this2._readCapability.resolve(); - - _this2._reader = response.body.getReader(); - }); - this.onProgress = null; - } - - _createClass(PDFFetchStreamRangeReader, [{ - key: "read", - value: function () { - var _read2 = _asyncToGenerator( - /*#__PURE__*/ - _regenerator.default.mark(function _callee2() { - var _ref2, value, done, buffer; - - return _regenerator.default.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - _context2.next = 2; - return this._readCapability.promise; - - case 2: - _context2.next = 4; - return this._reader.read(); - - case 4: - _ref2 = _context2.sent; - value = _ref2.value; - done = _ref2.done; - - if (!done) { - _context2.next = 9; - break; - } - - return _context2.abrupt("return", { - value: value, - done: done - }); - - case 9: - this._loaded += value.byteLength; - - if (this.onProgress) { - this.onProgress({ - loaded: this._loaded - }); - } - - buffer = new Uint8Array(value).buffer; - return _context2.abrupt("return", { - value: buffer, - done: false - }); - - case 13: - case "end": - return _context2.stop(); - } - } - }, _callee2, this); - })); - - function read() { - return _read2.apply(this, arguments); - } - - return read; - }() - }, { - key: "cancel", - value: function cancel(reason) { - if (this._reader) { - this._reader.cancel(reason); - } - - if (this._abortController) { - this._abortController.abort(); - } - } - }, { - key: "isStreamingSupported", - get: function get() { - return this._isStreamingSupported; - } - }]); - - return PDFFetchStreamRangeReader; - }(); - - /***/ }), - /* 169 */ - /***/ (function(module, exports, __w_extracthighlights_require__) { - - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.PDFNetworkStream = PDFNetworkStream; - exports.NetworkManager = NetworkManager; - - var _regenerator = _interopRequireDefault(__w_extracthighlights_require__(147)); - - var _util = __w_extracthighlights_require__(1); - - var _network_utils = __w_extracthighlights_require__(166); - - var _global_scope = _interopRequireDefault(__w_extracthighlights_require__(3)); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - - function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - var OK_RESPONSE = 200; - var PARTIAL_CONTENT_RESPONSE = 206; - - function NetworkManager(url, args) { - this.url = url; - args = args || {}; - this.isHttp = /^https?:/i.test(url); - this.httpHeaders = this.isHttp && args.httpHeaders || {}; - this.withCredentials = args.withCredentials || false; - - this.getXhr = args.getXhr || function NetworkManager_getXhr() { - return new XMLHttpRequest(); - }; - - this.currXhrId = 0; - this.pendingRequests = Object.create(null); - this.loadedRequests = Object.create(null); - } - - function getArrayBuffer(xhr) { - var data = xhr.response; - - if (typeof data !== 'string') { - return data; - } - - var array = (0, _util.stringToBytes)(data); - return array.buffer; - } - - var supportsMozChunked = function supportsMozChunkedClosure() { - try { - var x = new XMLHttpRequest(); - x.open('GET', _global_scope.default.location.href); - x.responseType = 'moz-chunked-arraybuffer'; - return x.responseType === 'moz-chunked-arraybuffer'; - } catch (e) { - return false; - } - }(); - - NetworkManager.prototype = { - requestRange: function NetworkManager_requestRange(begin, end, listeners) { - var args = { - begin: begin, - end: end - }; - - for (var prop in listeners) { - args[prop] = listeners[prop]; - } - - return this.request(args); - }, - requestFull: function NetworkManager_requestFull(listeners) { - return this.request(listeners); - }, - request: function NetworkManager_request(args) { - var xhr = this.getXhr(); - var xhrId = this.currXhrId++; - var pendingRequest = this.pendingRequests[xhrId] = { - xhr: xhr - }; - xhr.open('GET', this.url); - xhr.withCredentials = this.withCredentials; - - for (var property in this.httpHeaders) { - var value = this.httpHeaders[property]; - - if (typeof value === 'undefined') { - continue; - } - - xhr.setRequestHeader(property, value); - } - - if (this.isHttp && 'begin' in args && 'end' in args) { - var rangeStr = args.begin + '-' + (args.end - 1); - xhr.setRequestHeader('Range', 'bytes=' + rangeStr); - pendingRequest.expectedStatus = 206; - } else { - pendingRequest.expectedStatus = 200; - } - - var useMozChunkedLoading = supportsMozChunked && !!args.onProgressiveData; - - if (useMozChunkedLoading) { - xhr.responseType = 'moz-chunked-arraybuffer'; - pendingRequest.onProgressiveData = args.onProgressiveData; - pendingRequest.mozChunked = true; - } else { - xhr.responseType = 'arraybuffer'; - } - - if (args.onError) { - xhr.onerror = function (evt) { - args.onError(xhr.status); - }; - } - - xhr.onreadystatechange = this.onStateChange.bind(this, xhrId); - xhr.onprogress = this.onProgress.bind(this, xhrId); - pendingRequest.onHeadersReceived = args.onHeadersReceived; - pendingRequest.onDone = args.onDone; - pendingRequest.onError = args.onError; - pendingRequest.onProgress = args.onProgress; - xhr.send(null); - return xhrId; - }, - onProgress: function NetworkManager_onProgress(xhrId, evt) { - var pendingRequest = this.pendingRequests[xhrId]; - - if (!pendingRequest) { - return; - } - - if (pendingRequest.mozChunked) { - var chunk = getArrayBuffer(pendingRequest.xhr); - pendingRequest.onProgressiveData(chunk); - } - - var onProgress = pendingRequest.onProgress; - - if (onProgress) { - onProgress(evt); - } - }, - onStateChange: function NetworkManager_onStateChange(xhrId, evt) { - var pendingRequest = this.pendingRequests[xhrId]; - - if (!pendingRequest) { - return; - } - - var xhr = pendingRequest.xhr; - - if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) { - pendingRequest.onHeadersReceived(); - delete pendingRequest.onHeadersReceived; - } - - if (xhr.readyState !== 4) { - return; - } - - if (!(xhrId in this.pendingRequests)) { - return; - } - - delete this.pendingRequests[xhrId]; - - if (xhr.status === 0 && this.isHttp) { - if (pendingRequest.onError) { - pendingRequest.onError(xhr.status); - } - - return; - } - - var xhrStatus = xhr.status || OK_RESPONSE; - var ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE; - - if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) { - if (pendingRequest.onError) { - pendingRequest.onError(xhr.status); - } - - return; - } - - this.loadedRequests[xhrId] = true; - var chunk = getArrayBuffer(xhr); - - if (xhrStatus === PARTIAL_CONTENT_RESPONSE) { - var rangeHeader = xhr.getResponseHeader('Content-Range'); - var matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader); - var begin = parseInt(matches[1], 10); - pendingRequest.onDone({ - begin: begin, - chunk: chunk - }); - } else if (pendingRequest.onProgressiveData) { - pendingRequest.onDone(null); - } else if (chunk) { - pendingRequest.onDone({ - begin: 0, - chunk: chunk - }); - } else if (pendingRequest.onError) { - pendingRequest.onError(xhr.status); - } - }, - hasPendingRequests: function NetworkManager_hasPendingRequests() { - for (var xhrId in this.pendingRequests) { - return true; - } - - return false; - }, - getRequestXhr: function NetworkManager_getXhr(xhrId) { - return this.pendingRequests[xhrId].xhr; - }, - isStreamingRequest: function NetworkManager_isStreamingRequest(xhrId) { - return !!this.pendingRequests[xhrId].onProgressiveData; - }, - isPendingRequest: function NetworkManager_isPendingRequest(xhrId) { - return xhrId in this.pendingRequests; - }, - isLoadedRequest: function NetworkManager_isLoadedRequest(xhrId) { - return xhrId in this.loadedRequests; - }, - abortAllRequests: function NetworkManager_abortAllRequests() { - for (var xhrId in this.pendingRequests) { - this.abortRequest(xhrId | 0); - } - }, - abortRequest: function NetworkManager_abortRequest(xhrId) { - var xhr = this.pendingRequests[xhrId].xhr; - delete this.pendingRequests[xhrId]; - xhr.abort(); - } - }; - - function PDFNetworkStream(source) { - this._source = source; - this._manager = new NetworkManager(source.url, { - httpHeaders: source.httpHeaders, - withCredentials: source.withCredentials - }); - this._rangeChunkSize = source.rangeChunkSize; - this._fullRequestReader = null; - this._rangeRequestReaders = []; - } - - PDFNetworkStream.prototype = { - _onRangeRequestReaderClosed: function PDFNetworkStream_onRangeRequestReaderClosed(reader) { - var i = this._rangeRequestReaders.indexOf(reader); - - if (i >= 0) { - this._rangeRequestReaders.splice(i, 1); - } - }, - getFullReader: function PDFNetworkStream_getFullReader() { - (0, _util.assert)(!this._fullRequestReader); - this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source); - return this._fullRequestReader; - }, - getRangeReader: function PDFNetworkStream_getRangeReader(begin, end) { - var reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end); - reader.onClosed = this._onRangeRequestReaderClosed.bind(this); - - this._rangeRequestReaders.push(reader); - - return reader; - }, - cancelAllRequests: function PDFNetworkStream_cancelAllRequests(reason) { - if (this._fullRequestReader) { - this._fullRequestReader.cancel(reason); - } - - var readers = this._rangeRequestReaders.slice(0); - - readers.forEach(function (reader) { - reader.cancel(reason); - }); - } - }; - - function PDFNetworkStreamFullRequestReader(manager, source) { - this._manager = manager; - var args = { - onHeadersReceived: this._onHeadersReceived.bind(this), - onProgressiveData: source.disableStream ? null : this._onProgressiveData.bind(this), - onDone: this._onDone.bind(this), - onError: this._onError.bind(this), - onProgress: this._onProgress.bind(this) - }; - this._url = source.url; - this._fullRequestId = manager.requestFull(args); - this._headersReceivedCapability = (0, _util.createPromiseCapability)(); - this._disableRange = source.disableRange || false; - this._contentLength = source.length; - this._rangeChunkSize = source.rangeChunkSize; - - if (!this._rangeChunkSize && !this._disableRange) { - this._disableRange = true; - } - - this._isStreamingSupported = false; - this._isRangeSupported = false; - this._cachedChunks = []; - this._requests = []; - this._done = false; - this._storedError = undefined; - this._filename = null; - this.onProgress = null; - } - - PDFNetworkStreamFullRequestReader.prototype = { - _onHeadersReceived: function PDFNetworkStreamFullRequestReader_onHeadersReceived() { - var fullRequestXhrId = this._fullRequestId; - - var fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId); - - var getResponseHeader = function getResponseHeader(name) { - return fullRequestXhr.getResponseHeader(name); - }; - - var _validateRangeRequest = (0, _network_utils.validateRangeRequestCapabilities)({ - getResponseHeader: getResponseHeader, - isHttp: this._manager.isHttp, - rangeChunkSize: this._rangeChunkSize, - disableRange: this._disableRange - }), - allowRangeRequests = _validateRangeRequest.allowRangeRequests, - suggestedLength = _validateRangeRequest.suggestedLength; - - if (allowRangeRequests) { - this._isRangeSupported = true; - } - - this._contentLength = suggestedLength || this._contentLength; - this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); - var networkManager = this._manager; - - if (networkManager.isStreamingRequest(fullRequestXhrId)) { - this._isStreamingSupported = true; - } else if (this._isRangeSupported) { - networkManager.abortRequest(fullRequestXhrId); - } - - this._headersReceivedCapability.resolve(); - }, - _onProgressiveData: function PDFNetworkStreamFullRequestReader_onProgressiveData(chunk) { - if (this._requests.length > 0) { - var requestCapability = this._requests.shift(); - - requestCapability.resolve({ - value: chunk, - done: false - }); - } else { - this._cachedChunks.push(chunk); - } - }, - _onDone: function PDFNetworkStreamFullRequestReader_onDone(args) { - if (args) { - this._onProgressiveData(args.chunk); - } - - this._done = true; - - if (this._cachedChunks.length > 0) { - return; - } - - this._requests.forEach(function (requestCapability) { - requestCapability.resolve({ - value: undefined, - done: true - }); - }); - - this._requests = []; - }, - _onError: function PDFNetworkStreamFullRequestReader_onError(status) { - var url = this._url; - var exception = (0, _network_utils.createResponseStatusError)(status, url); - this._storedError = exception; - - this._headersReceivedCapability.reject(exception); - - this._requests.forEach(function (requestCapability) { - requestCapability.reject(exception); - }); - - this._requests = []; - this._cachedChunks = []; - }, - _onProgress: function PDFNetworkStreamFullRequestReader_onProgress(data) { - if (this.onProgress) { - this.onProgress({ - loaded: data.loaded, - total: data.lengthComputable ? data.total : this._contentLength - }); - } - }, - - get filename() { - return this._filename; - }, - - get isRangeSupported() { - return this._isRangeSupported; - }, - - get isStreamingSupported() { - return this._isStreamingSupported; - }, - - get contentLength() { - return this._contentLength; - }, - - get headersReady() { - return this._headersReceivedCapability.promise; - }, - - read: function () { - var _read = _asyncToGenerator( - /*#__PURE__*/ - _regenerator.default.mark(function _callee() { - var chunk, requestCapability; - return _regenerator.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - if (!this._storedError) { - _context.next = 2; - break; - } - - throw this._storedError; - - case 2: - if (!(this._cachedChunks.length > 0)) { - _context.next = 5; - break; - } - - chunk = this._cachedChunks.shift(); - return _context.abrupt("return", { - value: chunk, - done: false - }); - - case 5: - if (!this._done) { - _context.next = 7; - break; - } - - return _context.abrupt("return", { - value: undefined, - done: true - }); - - case 7: - requestCapability = (0, _util.createPromiseCapability)(); - - this._requests.push(requestCapability); - - return _context.abrupt("return", requestCapability.promise); - - case 10: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - - function read() { - return _read.apply(this, arguments); - } - - return read; - }(), - cancel: function PDFNetworkStreamFullRequestReader_cancel(reason) { - this._done = true; - - this._headersReceivedCapability.reject(reason); - - this._requests.forEach(function (requestCapability) { - requestCapability.resolve({ - value: undefined, - done: true - }); - }); - - this._requests = []; - - if (this._manager.isPendingRequest(this._fullRequestId)) { - this._manager.abortRequest(this._fullRequestId); - } - - this._fullRequestReader = null; - } - }; - - function PDFNetworkStreamRangeRequestReader(manager, begin, end) { - this._manager = manager; - var args = { - onDone: this._onDone.bind(this), - onProgress: this._onProgress.bind(this) - }; - this._requestId = manager.requestRange(begin, end, args); - this._requests = []; - this._queuedChunk = null; - this._done = false; - this.onProgress = null; - this.onClosed = null; - } - - PDFNetworkStreamRangeRequestReader.prototype = { - _close: function PDFNetworkStreamRangeRequestReader_close() { - if (this.onClosed) { - this.onClosed(this); - } - }, - _onDone: function PDFNetworkStreamRangeRequestReader_onDone(data) { - var chunk = data.chunk; - - if (this._requests.length > 0) { - var requestCapability = this._requests.shift(); - - requestCapability.resolve({ - value: chunk, - done: false - }); - } else { - this._queuedChunk = chunk; - } - - this._done = true; - - this._requests.forEach(function (requestCapability) { - requestCapability.resolve({ - value: undefined, - done: true - }); - }); - - this._requests = []; - - this._close(); - }, - _onProgress: function PDFNetworkStreamRangeRequestReader_onProgress(evt) { - if (!this.isStreamingSupported && this.onProgress) { - this.onProgress({ - loaded: evt.loaded - }); - } - }, - - get isStreamingSupported() { - return false; - }, - - read: function () { - var _read2 = _asyncToGenerator( - /*#__PURE__*/ - _regenerator.default.mark(function _callee2() { - var chunk, requestCapability; - return _regenerator.default.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - if (!(this._queuedChunk !== null)) { - _context2.next = 4; - break; - } - - chunk = this._queuedChunk; - this._queuedChunk = null; - return _context2.abrupt("return", { - value: chunk, - done: false - }); - - case 4: - if (!this._done) { - _context2.next = 6; - break; - } - - return _context2.abrupt("return", { - value: undefined, - done: true - }); - - case 6: - requestCapability = (0, _util.createPromiseCapability)(); - - this._requests.push(requestCapability); - - return _context2.abrupt("return", requestCapability.promise); - - case 9: - case "end": - return _context2.stop(); - } - } - }, _callee2, this); - })); - - function read() { - return _read2.apply(this, arguments); - } - - return read; - }(), - cancel: function PDFNetworkStreamRangeRequestReader_cancel(reason) { - this._done = true; - - this._requests.forEach(function (requestCapability) { - requestCapability.resolve({ - value: undefined, - done: true - }); - }); - - this._requests = []; - - if (this._manager.isPendingRequest(this._requestId)) { - this._manager.abortRequest(this._requestId); - } - - this._close(); - } - }; - - /***/ }) - /******/ ]); -}); - -}); - -/* Copyright 2020 Mozilla Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -(typeof window !== "undefined" - ? window - : {} -).extracthighlightsWorker = extracthighlights_worker; - -var extracthighlights_worker_entry = { - -}; - -var extracthighlightsWorker = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.assign(/*#__PURE__*/Object.create(null), extracthighlights_worker_entry, { - 'default': extracthighlights_worker_entry -})); - -var finalHighlightsAnnotations = new Array(); -var PDFAnnotationsManager = /** @class */ (function () { - function PDFAnnotationsManager() { - } - PDFAnnotationsManager.prototype.fetchRawAnnotationsFromPDF = function (arrayBuffer) { - return __awaiter(this, void 0, void 0, function () { - var SUPPORTED_ANNOTS, loadingTask; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - extracthighlights.GlobalWorkerOptions.workerSrcHighlights = extracthighlightsWorker; - finalHighlightsAnnotations = new Array(); - SUPPORTED_ANNOTS = ['Text', 'Highlight', 'Underline']; - loadingTask = extracthighlights.getDocument(arrayBuffer); - return [4 /*yield*/, loadingTask.promise - .then(function (doc) { - var numPages = doc.numPages; - var lastPromise; // will be used to chain promises - lastPromise = doc.getMetadata().then(function (data) { - }); - var loadPage = function (pageNum) { - return doc.getPage(pageNum).then(function (page) { - return __awaiter(this, void 0, void 0, function () { - var scale, viewport, canvas, context, renderContext, annotations; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - scale = 1; - viewport = page.getViewport(scale); - canvas = document.createElement('canvas'); - context = canvas.getContext('2d'); - canvas.height = viewport.height; - canvas.width = viewport.width; - renderContext = { - canvasContext: context, - viewport: viewport - }; - return [4 /*yield*/, page.getAnnotations()]; - case 1: - annotations = _a.sent(); - annotations = annotations - .map(function (anno) { - if (anno.subtype === undefined) - anno.subtype = anno.type; - return anno; - }) - .filter(function (anno) { - return SUPPORTED_ANNOTS.indexOf(anno.subtype) >= 0; - }); - return [4 /*yield*/, page.render(renderContext, annotations)]; - case 2: - _a.sent(); - annotations.map(function (anno) { - anno.pageNumber = pageNum; - finalHighlightsAnnotations.push(anno); - }); - canvas = null; - return [2 /*return*/, page]; - } - }); - }); - }); - }; - // Loading of the first page will wait on metadata and subsequent loadings - // will wait on the previous pages. - for (var i = 1; i <= numPages; i++) { - lastPromise = lastPromise.then(loadPage.bind(null, i)); - } - return lastPromise; - }) - .then(function () { - return finalHighlightsAnnotations; - }, function (err) { - console.error("Error: " + err); - })]; - case 1: return [2 /*return*/, _a.sent()]; - } - }); - }); - }; - PDFAnnotationsManager.prototype.flattenAnnotationsByPosition = function (sortedAnnotationsByPositionGroupedByPage) { - var flattenedAnnotationsByPosition = new Array(); - for (var key in sortedAnnotationsByPositionGroupedByPage) { - for (var i = 0; i < sortedAnnotationsByPositionGroupedByPage[key].length; i++) { - flattenedAnnotationsByPosition.push(sortedAnnotationsByPositionGroupedByPage[key][i]); - } - } - return flattenedAnnotationsByPosition; - }; - PDFAnnotationsManager.prototype.sortAnnotationsByPosition = function (groupedAnnotationsByPageMap) { - var newMap = {}; - for (var key in groupedAnnotationsByPageMap) { - newMap[key] = groupedAnnotationsByPageMap[key].sort(function (left, right) { - if (left.quadPoints[0].dims.minY < right.quadPoints[0].dims.minY) { - return -1; - } - if (left.quadPoints[0].dims.minY > right.quadPoints[0].dims.minY) { - return 1; - } - return 0; - }); - } - return newMap; - }; - PDFAnnotationsManager.prototype.groupAnnotationsByPage = function (filteredAnnotations) { - var groupBy = function (xs, key) { - return xs.reduce(function (rv, x) { - (rv[x[key]] = rv[x[key]] || []).push(x); - return rv; - }, {}); - }; - return groupBy(filteredAnnotations, 'pageNumber'); - }; - PDFAnnotationsManager.prototype.filterRawAnnotations = function (rawAnnotationsFromPDF) { - var filteredAnnotations = rawAnnotationsFromPDF.filter(function (anno) { - if (typeof anno.highlightedText == 'undefined' || anno.highlightedText == "") { - return false; - } - else { - return true; - } - }); - return filteredAnnotations; - }; - return PDFAnnotationsManager; -}()); - -var ExtractPDFHighlightsPlugin = /** @class */ (function (_super) { - __extends(ExtractPDFHighlightsPlugin, _super); - function ExtractPDFHighlightsPlugin() { - return _super !== null && _super.apply(this, arguments) || this; - } - ExtractPDFHighlightsPlugin.prototype.onload = function () { - return __awaiter(this, void 0, void 0, function () { - var _this = this; - return __generator(this, function (_a) { - this.loadSettings(); - this.addSettingTab(new ExtractPDFHighlightsPluginSettingsTab(this.app, this)); - this.addRibbonIcon('pdf-file', 'PDF Highlights', function () { - _this.processPDFHighlights(); - }); - return [2 /*return*/]; - }); - }); - }; - ExtractPDFHighlightsPlugin.prototype.onunload = function () { }; - ExtractPDFHighlightsPlugin.prototype.processPDFHighlights = function () { - return __awaiter(this, void 0, void 0, function () { - var file, arrayBuffer, pdfAnnotationsManager, rawAnnotationsFromPDF, filteredAnnotations, groupedAnnotationsByPageMap, sortedAnnotationsByPositionGroupedByPage, flattenedAnnotationsByPosition, finalMarkdown, filePath; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - this.modal = new ProgressModal(this.app); - file = this.app.workspace.getActiveFile(); - if (file === null) - return [2 /*return*/]; - if (file.extension !== 'pdf') - return [2 /*return*/]; - return [4 /*yield*/, this.app.vault.readBinary(file)]; - case 1: - arrayBuffer = _a.sent(); - pdfAnnotationsManager = new PDFAnnotationsManager(); - return [4 /*yield*/, pdfAnnotationsManager.fetchRawAnnotationsFromPDF(arrayBuffer)]; - case 2: - rawAnnotationsFromPDF = _a.sent(); - filteredAnnotations = pdfAnnotationsManager.filterRawAnnotations(rawAnnotationsFromPDF); - groupedAnnotationsByPageMap = pdfAnnotationsManager.groupAnnotationsByPage(filteredAnnotations); - sortedAnnotationsByPositionGroupedByPage = pdfAnnotationsManager.sortAnnotationsByPosition(groupedAnnotationsByPageMap); - flattenedAnnotationsByPosition = pdfAnnotationsManager.flattenAnnotationsByPosition(sortedAnnotationsByPositionGroupedByPage); - finalMarkdown = this.generateFinalMarkdown(flattenedAnnotationsByPosition, file.name); - filePath = file.name.replace(".pdf", ".md"); - filePath = "Highlights for " + filePath; - return [4 /*yield*/, this.saveHighlightsToFile(filePath, finalMarkdown)]; - case 3: - _a.sent(); - return [4 /*yield*/, this.app.workspace.openLinkText(filePath, '', true)]; - case 4: - _a.sent(); - return [2 /*return*/]; - } - }); - }); - }; - ExtractPDFHighlightsPlugin.prototype.generateFinalMarkdown = function (annotations, fileName) { - var mdString = ""; - for (var _i = 0, annotations_1 = annotations; _i < annotations_1.length; _i++) { - var anno = annotations_1[_i]; - var text = anno.highlightedText; - if (this.settings.includePageNumber) { - text = text + " (Page " + anno.pageNumber + ")"; - } - if (this.settings.includeHighlightColor) { - text = text + " " + this.getColorTagForAnnotation(anno); - } - if (this.settings.createLinks) { - text = "[[" + text + "]]"; - } - text = "- " + text; - text += "\n"; - mdString += text; - } - mdString += "\n## Source\n[[" + fileName + "]]"; - return mdString; - }; - ExtractPDFHighlightsPlugin.prototype.saveHighlightsToFile = function (filePath, mdString) { - return __awaiter(this, void 0, void 0, function () { - var fileExists; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.app.vault.adapter.exists(filePath)]; - case 1: - fileExists = _a.sent(); - if (!fileExists) return [3 /*break*/, 3]; - return [4 /*yield*/, this.appendHighlightsToFile(filePath, mdString)]; - case 2: - _a.sent(); - return [3 /*break*/, 5]; - case 3: return [4 /*yield*/, this.app.vault.create(filePath, mdString)]; - case 4: - _a.sent(); - _a.label = 5; - case 5: return [2 /*return*/]; - } - }); - }); - }; - ExtractPDFHighlightsPlugin.prototype.appendHighlightsToFile = function (filePath, note) { - return __awaiter(this, void 0, void 0, function () { - var existingContent; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.app.vault.adapter.read(filePath)]; - case 1: - existingContent = _a.sent(); - if (existingContent.length > 0) { - existingContent = existingContent + '\r\r'; - } - return [4 /*yield*/, this.app.vault.adapter.write(filePath, existingContent + note)]; - case 2: - _a.sent(); - return [2 /*return*/]; - } - }); - }); - }; - ExtractPDFHighlightsPlugin.prototype.loadSettings = function () { - var _this = this; - this.settings = new ExtractPDFHighlightsPluginSettings(); - (function () { return __awaiter(_this, void 0, void 0, function () { - var loadedSettings; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.loadData()]; - case 1: - loadedSettings = _a.sent(); - if (!loadedSettings) return [3 /*break*/, 2]; - this.settings.includePageNumber = loadedSettings.includePageNumber; - this.settings.includeHighlightColor = loadedSettings.includeHighlightColor; - this.settings.createLinks = loadedSettings.createLinks; - return [3 /*break*/, 4]; - case 2: return [4 /*yield*/, this.saveData(this.settings)]; - case 3: - _a.sent(); - _a.label = 4; - case 4: return [2 /*return*/]; - } - }); - }); })(); - }; - ExtractPDFHighlightsPlugin.prototype.getColorTagForAnnotation = function (anno) { - var colorArray = anno.color; - var red = colorArray[0]; - var green = colorArray[1]; - var blue = colorArray[2]; - if (red == 250 && green == 205 && blue == 90) { - return "🟡"; - } - if (red == 124 && green == 200 && blue == 104) { - return "🟢"; - } - if (red == 105 && green == 176 && blue == 241) { - return "🔵"; - } - if (red == 251 && green == 92 && blue == 137) { - return "🔴"; - } - if (red == 200 && green == 133 && blue == 218) { - return "🟣"; - } - return ""; - }; - return ExtractPDFHighlightsPlugin; -}(obsidian.Plugin)); -var ProgressModal = /** @class */ (function (_super) { - __extends(ProgressModal, _super); - function ProgressModal(app) { - return _super.call(this, app) || this; - } - ProgressModal.prototype.onOpen = function () { - var contentEl = this.contentEl; - contentEl.createEl("h2", { text: "Extract PDF Highlights" }); - contentEl.createEl("p", { text: "I'm sorry but due to an unexpected incompatibility with Obsidian Core PDF handling as of v0.10.8 this plugin is currently disabled. In the meantime, you can use Zotero + Zotfile to extract PDF highlights and annotations. I'm sorry for the inconvenience and working on fixing this issue. If you have any questions, please email me at alexis.rondeau@gmail.com! Thank you for your patience, Alexis :)" }); - }; - ProgressModal.prototype.onClose = function () { - var contentEl = this.contentEl; - contentEl.empty(); - }; - return ProgressModal; -}(obsidian.Modal)); - -module.exports = ExtractPDFHighlightsPlugin; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsInNyYy9FeHRyYWN0UERGSGlnaGxpZ2h0c1BsdWdpblNldHRpbmdzLnRzIiwic3JjL0V4dHJhY3RQREZIaWdobGlnaHRzUGx1Z2luU2V0dGluZ3NUYWIudHMiLCJub2RlX21vZHVsZXMvbm9kZS1lbnN1cmUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZXh0cmFjdGhpZ2hsaWdodHMtZGlzdC9idWlsZC9leHRyYWN0aGlnaGxpZ2h0cy53b3JrZXIuanMiLCJub2RlX21vZHVsZXMvZXh0cmFjdGhpZ2hsaWdodHMtZGlzdC9idWlsZC9leHRyYWN0aGlnaGxpZ2h0cy5qcyIsIm5vZGVfbW9kdWxlcy9leHRyYWN0aGlnaGxpZ2h0cy1kaXN0L2J1aWxkL2V4dHJhY3RoaWdobGlnaHRzLndvcmtlci5lbnRyeS5qcyIsInNyYy9QREZBbm5vdGF0aW9uc01hbmFnZXIudHMiLCJzcmMvbWFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcclxuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgIHJldHVybiByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSkge1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPCBpbDsgaSsrLCBqKyspXHJcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xyXG4gICAgcmV0dXJuIHRvO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbn0pIDogZnVuY3Rpb24obywgdikge1xyXG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwKSB7XHJcbiAgICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByaXZhdGVNYXAuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHByaXZhdGVNYXAsIHZhbHVlKSB7XHJcbiAgICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gc2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZU1hcC5zZXQocmVjZWl2ZXIsIHZhbHVlKTtcclxuICAgIHJldHVybiB2YWx1ZTtcclxufVxyXG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBFeHRyYWN0UERGSGlnaGxpZ2h0c1BsdWdpblNldHRpbmdzIHtcbiAgICBwdWJsaWMgaW5jbHVkZVBhZ2VOdW1iZXI6IGJvb2xlYW47XG4gICAgcHVibGljIGluY2x1ZGVIaWdobGlnaHRDb2xvcjogYm9vbGVhbjtcbiAgICBwdWJsaWMgY3JlYXRlTGlua3M6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pbmNsdWRlUGFnZU51bWJlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmluY2x1ZGVIaWdobGlnaHRDb2xvciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNyZWF0ZUxpbmtzID0gZmFsc2U7XG4gICAgfVxufSIsImltcG9ydCB7QXBwLCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCBFeHRyYWN0UERGSGlnaGxpZ2h0c1BsdWdpbiBmcm9tIFwiLi9tYWluXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4dHJhY3RQREZIaWdobGlnaHRzUGx1Z2luU2V0dGluZ3NUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcbiAgICBwbHVnaW46IEV4dHJhY3RQREZIaWdobGlnaHRzUGx1Z2luO1xuXG4gICAgY29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogRXh0cmFjdFBERkhpZ2hsaWdodHNQbHVnaW4pIHtcbiAgICAgICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICB9XG5cbiAgICBkaXNwbGF5KCk6IHZvaWQge1xuICAgICAgICBsZXQge2NvbnRhaW5lckVsfSA9IHRoaXM7XG5cbiAgICAgICAgY29udGFpbmVyRWwuZW1wdHkoKTtcblxuICAgICAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7dGV4dDogJ0V4dHJhY3QgUERGIEhpZ2hsaWdodHMuJ30pO1xuXG4gICAgICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgICAgICAgLnNldE5hbWUoJ0luY2x1ZGUgcGFnZSBudW1iZXInKVxuICAgICAgICAgICAgLnNldERlc2MoXG4gICAgICAgICAgICAgICAgJ0lmIGVuYWJsZWQsIGFkZHMgYSBgKFBhZ2UgWClgIHRvIGVhY2ggaGlnaGxpZ2h0LicsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XG4gICAgICAgICAgICAgICAgdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmluY2x1ZGVQYWdlTnVtYmVyKS5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuaW5jbHVkZVBhZ2VOdW1iZXIgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKCdJbmNsdWRlIGhpZ2hsaWdodGVyIGNvbG9yJylcbiAgICAgICAgICAgIC5zZXREZXNjKFxuICAgICAgICAgICAgICAgICdJZiBlbmFibGVkLCBhZGRzIGEgY29sb3IgdGFnIHRvIGVhY2ggaGlnaGxpZ2h0IGJhc2VkIG9uIHRoZSBoaWdobGlnaHRlciBjb2xvciB1c2VkIGluIHRoZSBQREYnLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZFRvZ2dsZSgodG9nZ2xlKSA9PlxuICAgICAgICAgICAgICAgIHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5pbmNsdWRlSGlnaGxpZ2h0Q29sb3IpLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5pbmNsdWRlSGlnaGxpZ2h0Q29sb3IgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKCdDcmVhdGUgbGlua3MnKVxuICAgICAgICAgICAgLnNldERlc2MoXG4gICAgICAgICAgICAgICAgJ0lmIGVuYWJsZWQsIHR1cm5zIGVhY2ggbGlzdCBpdGVtIGludG8gYSBtYXJrZG93biBsaW5rJyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT5cbiAgICAgICAgICAgICAgICB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3JlYXRlTGlua3MpLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5jcmVhdGVMaW5rcyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgIH1cbn1cbiIsIi8qKlxuICogIEp1c3QgcnVuIHRoZSBjYWxsYmFjayB0aHJvdWdoIHNldEltbWVkaWF0ZSwgc28gdGhhdCBpdCBhcHBlYXJzXG4gKiAgYXN5bmNocm9ub3VzLCBldmVuIHdoZW4gdW5uZWNlc3NhcnkuXG4gKi9cblxuZnVuY3Rpb24gZW5zdXJlKG1vZHVsZXMsIGNhbGxiYWNrKSB7XG4gIHNldEltbWVkaWF0ZShjYWxsYmFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZW5zdXJlO1xuIiwiLyoqXG4gKiBAbGljc3RhcnQgVGhlIGZvbGxvd2luZyBpcyB0aGUgZW50aXJlIGxpY2Vuc2Ugbm90aWNlIGZvciB0aGVcbiAqIEphdmFzY3JpcHQgY29kZSBpbiB0aGlzIHBhZ2VcbiAqXG4gKiBDb3B5cmlnaHQgMjAxOCBNb3ppbGxhIEZvdW5kYXRpb25cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICogQGxpY2VuZCBUaGUgYWJvdmUgaXMgdGhlIGVudGlyZSBsaWNlbnNlIG5vdGljZSBmb3IgdGhlXG4gKiBKYXZhc2NyaXB0IGNvZGUgaW4gdGhpcyBwYWdlXG4gKi9cblxuKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICAgIGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuICAgICAgICBkZWZpbmUoXCJleHRyYWN0aGlnaGxpZ2h0cy1kaXN0L2J1aWxkL2V4dHJhY3RoaWdobGlnaHRzLndvcmtlclwiLCBbXSwgZmFjdG9yeSk7XG4gICAgZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG4gICAgICAgIGV4cG9ydHNbXCJleHRyYWN0aGlnaGxpZ2h0cy1kaXN0L2J1aWxkL2V4dHJhY3RoaWdobGlnaHRzLndvcmtlclwiXSA9IGZhY3RvcnkoKTtcbiAgICBlbHNlXG4gICAgICAgIHJvb3RbXCJleHRyYWN0aGlnaGxpZ2h0cy1kaXN0L2J1aWxkL2V4dHJhY3RoaWdobGlnaHRzLndvcmtlclwiXSA9IHJvb3QuZXh0cmFjdGhpZ2hsaWdodHNXb3JrZXIgPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuICAgICAgICAvKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiAgICAgICAgLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuICAgICAgICAvKioqKioqL1xuICAgICAgICAvKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gICAgICAgIC8qKioqKiovIFx0ZnVuY3Rpb24gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuICAgICAgICAgICAgLyoqKioqKi9cbiAgICAgICAgICAgIC8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuICAgICAgICAgICAgICAgIC8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuICAgICAgICAgICAgICAgIC8qKioqKiovIFx0XHR9XG4gICAgICAgICAgICAvKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gICAgICAgICAgICAgICAgLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4gICAgICAgICAgICAgICAgLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4gICAgICAgICAgICAgICAgLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbiAgICAgICAgICAgICAgICAvKioqKioqLyBcdFx0fTtcbiAgICAgICAgICAgIC8qKioqKiovXG4gICAgICAgICAgICAvKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gICAgICAgICAgICAvKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyk7XG4gICAgICAgICAgICAvKioqKioqL1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4gICAgICAgICAgICAvKioqKioqL1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gICAgICAgICAgICAvKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuICAgICAgICAgICAgLyoqKioqKi8gXHR9XG4gICAgICAgIC8qKioqKiovXG4gICAgICAgIC8qKioqKiovXG4gICAgICAgIC8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiAgICAgICAgLyoqKioqKi8gXHRfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuICAgICAgICAvKioqKioqL1xuICAgICAgICAvKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gICAgICAgIC8qKioqKiovIFx0X193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbiAgICAgICAgLyoqKioqKi9cbiAgICAgICAgLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiAgICAgICAgLyoqKioqKi8gXHRfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHRpZighX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gICAgICAgICAgICAgICAgLyoqKioqKi8gXHRcdH1cbiAgICAgICAgICAgIC8qKioqKiovIFx0fTtcbiAgICAgICAgLyoqKioqKi9cbiAgICAgICAgLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gICAgICAgIC8qKioqKiovIFx0X193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuICAgICAgICAgICAgICAgIC8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuICAgICAgICAgICAgICAgIC8qKioqKiovIFx0XHR9XG4gICAgICAgICAgICAvKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIC8qKioqKiovIFx0fTtcbiAgICAgICAgLyoqKioqKi9cbiAgICAgICAgLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiAgICAgICAgLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiAgICAgICAgLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiAgICAgICAgLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiAgICAgICAgLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gICAgICAgIC8qKioqKiovIFx0X193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKHZhbHVlKTtcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAvKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHRfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLnIobnMpO1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gICAgICAgICAgICAvKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuICAgICAgICAgICAgLyoqKioqKi8gXHR9O1xuICAgICAgICAvKioqKioqL1xuICAgICAgICAvKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gICAgICAgIC8qKioqKiovIFx0X193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gICAgICAgICAgICAvKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gICAgICAgICAgICAgICAgLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiAgICAgICAgICAgICAgICAvKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuICAgICAgICAgICAgLyoqKioqKi8gXHR9O1xuICAgICAgICAvKioqKioqL1xuICAgICAgICAvKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuICAgICAgICAvKioqKioqLyBcdF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbiAgICAgICAgLyoqKioqKi9cbiAgICAgICAgLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuICAgICAgICAvKioqKioqLyBcdF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18ucCA9IFwiXCI7XG4gICAgICAgIC8qKioqKiovXG4gICAgICAgIC8qKioqKiovXG4gICAgICAgIC8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gICAgICAgIC8qKioqKiovIFx0cmV0dXJuIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5zID0gMCk7XG4gICAgICAgIC8qKioqKiovIH0pXG4gICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gICAgICAgIC8qKioqKiovIChbXG4gICAgICAgICAgICAvKiAwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGV4dHJhY3RoaWdobGlnaHRzVmVyc2lvbiA9ICcyLjEuMjY2JztcbiAgICAgICAgICAgICAgICB2YXIgZXh0cmFjdGhpZ2hsaWdodHNCdWlsZCA9ICc4MWY1ODM1Yyc7XG5cbiAgICAgICAgICAgICAgICB2YXIgZXh0cmFjdGhpZ2hsaWdodHNDb3JlV29ya2VyID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuV29ya2VyTWVzc2FnZUhhbmRsZXIgPSBleHRyYWN0aGlnaGxpZ2h0c0NvcmVXb3JrZXIuV29ya2VyTWVzc2FnZUhhbmRsZXI7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLldvcmtlck1lc3NhZ2VIYW5kbGVyID0gZXhwb3J0cy5Xb3JrZXJUYXNrID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9yZWdlbmVyYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyKSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9wZGZfbWFuYWdlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTUxKTtcblxuICAgICAgICAgICAgICAgIHZhciBfaXNfbm9kZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5KSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX21lc3NhZ2VfaGFuZGxlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTg5KTtcblxuICAgICAgICAgICAgICAgIHZhciBfcHJpbWl0aXZlcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTU1KTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7IHRyeSB7IHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTsgdmFyIHZhbHVlID0gaW5mby52YWx1ZTsgfSBjYXRjaCAoZXJyb3IpIHsgcmVqZWN0KGVycm9yKTsgcmV0dXJuOyB9IGlmIChpbmZvLmRvbmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0gZWxzZSB7IFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyB2YXIgc2VsZiA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTsgZnVuY3Rpb24gX25leHQodmFsdWUpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpOyB9IGZ1bmN0aW9uIF90aHJvdyhlcnIpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7IH0gX25leHQodW5kZWZpbmVkKTsgfSk7IH07IH1cblxuICAgICAgICAgICAgICAgIHZhciBXb3JrZXJUYXNrID0gZnVuY3Rpb24gV29ya2VyVGFza0Nsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdvcmtlclRhc2sobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGVybWluYXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFdvcmtlclRhc2sucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGZpbmlzaGVkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2g6IGZ1bmN0aW9uIGZpbmlzaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGU6IGZ1bmN0aW9uIHRlcm1pbmF0ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRlcm1pbmF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuc3VyZU5vdFRlcm1pbmF0ZWQ6IGZ1bmN0aW9uIGVuc3VyZU5vdFRlcm1pbmF0ZWQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGVybWluYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dvcmtlciB0YXNrIHdhcyB0ZXJtaW5hdGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gV29ya2VyVGFzaztcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLldvcmtlclRhc2sgPSBXb3JrZXJUYXNrO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBERldvcmtlclN0cmVhbSA9IGZ1bmN0aW9uIFBERldvcmtlclN0cmVhbUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBERldvcmtlclN0cmVhbShtc2dIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tc2dIYW5kbGVyID0gbXNnSGFuZGxlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgUERGV29ya2VyU3RyZWFtLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldEZ1bGxSZWFkZXI6IGZ1bmN0aW9uIGdldEZ1bGxSZWFkZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IG5ldyBQREZXb3JrZXJTdHJlYW1SZWFkZXIodGhpcy5fbXNnSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFJhbmdlUmVhZGVyOiBmdW5jdGlvbiBnZXRSYW5nZVJlYWRlcihiZWdpbiwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBQREZXb3JrZXJTdHJlYW1SYW5nZVJlYWRlcihiZWdpbiwgZW5kLCB0aGlzLl9tc2dIYW5kbGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChyZWFkZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxBbGxSZXF1ZXN0czogZnVuY3Rpb24gY2FuY2VsQWxsUmVxdWVzdHMocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkZXJzID0gdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5zbGljZSgwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlcnMuZm9yRWFjaChmdW5jdGlvbiAocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5jYW5jZWwocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQREZXb3JrZXJTdHJlYW1SZWFkZXIobXNnSGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbXNnSGFuZGxlciA9IG1zZ0hhbmRsZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50TGVuZ3RoID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkYWJsZVN0cmVhbSA9IHRoaXMuX21zZ0hhbmRsZXIuc2VuZFdpdGhTdHJlYW0oJ0dldFJlYWRlcicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlYWRlcnNSZWFkeSA9IHRoaXMuX21zZ0hhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCdSZWFkZXJIZWFkZXJzUmVhZHknKS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkID0gZGF0YS5pc1N0cmVhbWluZ1N1cHBvcnRlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5faXNSYW5nZVN1cHBvcnRlZCA9IGRhdGEuaXNSYW5nZVN1cHBvcnRlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fY29udGVudExlbmd0aCA9IGRhdGEuY29udGVudExlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgUERGV29ya2VyU3RyZWFtUmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBoZWFkZXJzUmVhZHkoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlYWRlcnNSZWFkeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBjb250ZW50TGVuZ3RoKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb250ZW50TGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBpc1JhbmdlU3VwcG9ydGVkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVhZGVyLnJlYWQoKS50aGVuKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IF9yZWYudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gX3JlZi5kb25lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUuYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWw6IGZ1bmN0aW9uIGNhbmNlbChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkZXIuY2FuY2VsKHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUERGV29ya2VyU3RyZWFtUmFuZ2VSZWFkZXIoYmVnaW4sIGVuZCwgbXNnSGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbXNnSGFuZGxlciA9IG1zZ0hhbmRsZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGFibGVTdHJlYW0gPSB0aGlzLl9tc2dIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKCdHZXRSYW5nZVJlYWRlcicsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbjogYmVnaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBlbmRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFBERldvcmtlclN0cmVhbVJhbmdlUmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWFkZXIucmVhZCgpLnRoZW4oZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IF9yZWYyLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IF9yZWYyLmRvbmU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS5idWZmZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbDogZnVuY3Rpb24gY2FuY2VsKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRlci5jYW5jZWwocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBERldvcmtlclN0cmVhbTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgV29ya2VyTWVzc2FnZUhhbmRsZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgIHNldHVwOiBmdW5jdGlvbiBzZXR1cChoYW5kbGVyLCBwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVzdE1lc3NhZ2VQcm9jZXNzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIub24oJ3Rlc3QnLCBmdW5jdGlvbiB3cGhTZXR1cFRlc3QoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXN0TWVzc2FnZVByb2Nlc3NlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdE1lc3NhZ2VQcm9jZXNzZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuc2VuZCgndGVzdCcsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdXBwb3J0VHJhbnNmZXJzID0gZGF0YVswXSA9PT0gMjU1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIucG9zdE1lc3NhZ2VUcmFuc2ZlcnMgPSBzdXBwb3J0VHJhbnNmZXJzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2VFeGlzdHMgPSAncmVzcG9uc2UnIGluIHhocjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5yZXNwb25zZVR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUV4aXN0cyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2VFeGlzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5zZW5kKCd0ZXN0JywgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5zZW5kKCd0ZXN0Jywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0VHlwZWRBcnJheTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydFRyYW5zZmVyczogc3VwcG9ydFRyYW5zZmVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLm9uKCdjb25maWd1cmUnLCBmdW5jdGlvbiB3cGhDb25maWd1cmUoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5zZXRWZXJib3NpdHlMZXZlbCkoZGF0YS52ZXJib3NpdHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLm9uKCdHZXREb2NSZXF1ZXN0JywgZnVuY3Rpb24gd3BoU2V0dXBEb2MoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXb3JrZXJNZXNzYWdlSGFuZGxlci5jcmVhdGVEb2N1bWVudEhhbmRsZXIoZGF0YSwgcG9ydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRG9jdW1lbnRIYW5kbGVyOiBmdW5jdGlvbiBjcmVhdGVEb2N1bWVudEhhbmRsZXIoZG9jUGFyYW1zLCBwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGRmTWFuYWdlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXJtaW5hdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FuY2VsWEhScyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgV29ya2VyVGFza3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcGlWZXJzaW9uID0gZG9jUGFyYW1zLmFwaVZlcnNpb247XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd29ya2VyVmVyc2lvbiA9ICcyLjEuMjY2JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFwaVZlcnNpb24gIT09IHdvcmtlclZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgQVBJIHZlcnNpb24gXFxcIlwiLmNvbmNhdChhcGlWZXJzaW9uLCBcIlxcXCIgZG9lcyBub3QgbWF0Y2ggXCIpICsgXCJ0aGUgV29ya2VyIHZlcnNpb24gXFxcIlwiLmNvbmNhdCh3b3JrZXJWZXJzaW9uLCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvY0lkID0gZG9jUGFyYW1zLmRvY0lkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvY0Jhc2VVcmwgPSBkb2NQYXJhbXMuZG9jQmFzZVVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3b3JrZXJIYW5kbGVyTmFtZSA9IGRvY1BhcmFtcy5kb2NJZCArICdfd29ya2VyJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyID0gbmV3IF9tZXNzYWdlX2hhbmRsZXIuTWVzc2FnZUhhbmRsZXIod29ya2VySGFuZGxlck5hbWUsIGRvY0lkLCBwb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIucG9zdE1lc3NhZ2VUcmFuc2ZlcnMgPSBkb2NQYXJhbXMucG9zdE1lc3NhZ2VUcmFuc2ZlcnM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGVuc3VyZU5vdFRlcm1pbmF0ZWQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlcm1pbmF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXb3JrZXIgd2FzIHRlcm1pbmF0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHN0YXJ0V29ya2VyVGFzayh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya2VyVGFza3MucHVzaCh0YXNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZmluaXNoV29ya2VyVGFzayh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5maW5pc2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IFdvcmtlclRhc2tzLmluZGV4T2YodGFzayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya2VyVGFza3Muc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBsb2FkRG9jdW1lbnQoX3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2xvYWREb2N1bWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBfbG9hZERvY3VtZW50KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9sb2FkRG9jdW1lbnQgPSBfYXN5bmNUb0dlbmVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVnZW5lcmF0b3IuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUocmVjb3ZlcnlNb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlZjYsIF9yZWY3LCBudW1QYWdlcywgZmluZ2VycHJpbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZURvYygnY2hlY2tIZWFkZXInKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZURvYygncGFyc2VTdGFydFhSZWYnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZURvYygncGFyc2UnLCBbcmVjb3ZlcnlNb2RlXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnlNb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVEb2MoJ2NoZWNrRmlyc3RQYWdlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtwZGZNYW5hZ2VyLmVuc3VyZURvYygnbnVtUGFnZXMnKSwgcGRmTWFuYWdlci5lbnN1cmVEb2MoJ2ZpbmdlcnByaW50JyldKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmNiA9IF9jb250ZXh0LnNlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjcgPSBfc2xpY2VkVG9BcnJheShfcmVmNiwgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtUGFnZXMgPSBfcmVmN1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5nZXJwcmludCA9IF9yZWY3WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1QYWdlczogbnVtUGFnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmdlcnByaW50OiBmaW5nZXJwcmludFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBfY2FsbGVlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfbG9hZERvY3VtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFBkZk1hbmFnZXIoZGF0YSwgZXZhbHVhdG9yT3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwZGZNYW5hZ2VyQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGRmTWFuYWdlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gZGF0YS5zb3VyY2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZk1hbmFnZXIgPSBuZXcgX3BkZl9tYW5hZ2VyLkxvY2FsUGRmTWFuYWdlcihkb2NJZCwgc291cmNlLmRhdGEsIHNvdXJjZS5wYXNzd29yZCwgZXZhbHVhdG9yT3B0aW9ucywgZG9jQmFzZVVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5yZXNvbHZlKHBkZk1hbmFnZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmTWFuYWdlckNhcGFiaWxpdHkucmVqZWN0KGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwZGZTdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZENodW5rcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmU3RyZWFtID0gbmV3IFBERldvcmtlclN0cmVhbShoYW5kbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5yZWplY3QoZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmTWFuYWdlckNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZnVsbFJlcXVlc3QgPSBwZGZTdHJlYW0uZ2V0RnVsbFJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxSZXF1ZXN0LmhlYWRlcnNSZWFkeS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmdWxsUmVxdWVzdC5pc1JhbmdlU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlzYWJsZUF1dG9GZXRjaCA9IHNvdXJjZS5kaXNhYmxlQXV0b0ZldGNoIHx8IGZ1bGxSZXF1ZXN0LmlzU3RyZWFtaW5nU3VwcG9ydGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyID0gbmV3IF9wZGZfbWFuYWdlci5OZXR3b3JrUGRmTWFuYWdlcihkb2NJZCwgcGRmU3RyZWFtLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dIYW5kbGVyOiBoYW5kbGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQ6IHNvdXJjZS5wYXNzd29yZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDogZnVsbFJlcXVlc3QuY29udGVudExlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVBdXRvRmV0Y2g6IGRpc2FibGVBdXRvRmV0Y2gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZUNodW5rU2l6ZTogc291cmNlLnJhbmdlQ2h1bmtTaXplXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGV2YWx1YXRvck9wdGlvbnMsIGRvY0Jhc2VVcmwpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FjaGVkQ2h1bmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyLnNlbmRQcm9ncmVzc2l2ZURhdGEoY2FjaGVkQ2h1bmtzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZENodW5rcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5yZXNvbHZlKHBkZk1hbmFnZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxYSFJzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnJlamVjdChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxYSFJzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9hZGVkID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbHVzaENodW5rcyA9IGZ1bmN0aW9uIGZsdXNoQ2h1bmtzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGRmRmlsZSA9ICgwLCBfdXRpbC5hcnJheXNUb0J5dGVzKShjYWNoZWRDaHVua3MpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UubGVuZ3RoICYmIHBkZkZpbGUubGVuZ3RoICE9PSBzb3VyY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ3JlcG9ydGVkIEhUVFAgbGVuZ3RoIGlzIGRpZmZlcmVudCBmcm9tIGFjdHVhbCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZk1hbmFnZXIgPSBuZXcgX3BkZl9tYW5hZ2VyLkxvY2FsUGRmTWFuYWdlcihkb2NJZCwgcGRmRmlsZSwgc291cmNlLnBhc3N3b3JkLCBldmFsdWF0b3JPcHRpb25zLCBkb2NCYXNlVXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnJlc29sdmUocGRmTWFuYWdlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5yZWplY3QoZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkQ2h1bmtzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRDaHVuayA9IGZ1bmN0aW9uIHJlYWRDaHVuayhjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnN1cmVOb3RUZXJtaW5hdGVkKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2h1bmsuZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBkZk1hbmFnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoQ2h1bmtzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxYSFJzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gY2h1bmsudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkICs9ICgwLCBfdXRpbC5hcnJheUJ5dGVMZW5ndGgpKGRhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmdWxsUmVxdWVzdC5pc1N0cmVhbWluZ1N1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLnNlbmQoJ0RvY1Byb2dyZXNzJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkOiBsb2FkZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbDogTWF0aC5tYXgobG9hZGVkLCBmdWxsUmVxdWVzdC5jb250ZW50TGVuZ3RoIHx8IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZGZNYW5hZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZk1hbmFnZXIuc2VuZFByb2dyZXNzaXZlRGF0YShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRDaHVua3MucHVzaChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsUmVxdWVzdC5yZWFkKCkudGhlbihyZWFkQ2h1bmssIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxSZXF1ZXN0LnJlYWQoKS50aGVuKHJlYWRDaHVuaywgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5yZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFhIUnMgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsWEhScyA9IGZ1bmN0aW9uIGNhbmNlbFhIUnMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZlN0cmVhbS5jYW5jZWxBbGxSZXF1ZXN0cygnYWJvcnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNldHVwRG9jKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBvblN1Y2Nlc3MoZG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuc3VyZU5vdFRlcm1pbmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5zZW5kKCdHZXREb2MnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZJbmZvOiBkb2NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gb25GYWlsdXJlKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5zdXJlTm90VGVybWluYXRlZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgX3V0aWwuUGFzc3dvcmRFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gbmV3IFdvcmtlclRhc2soJ1Bhc3N3b3JkRXhjZXB0aW9uOiByZXNwb25zZSAnICsgZS5jb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V29ya2VyVGFzayh0YXNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCdQYXNzd29yZFJlcXVlc3QnLCBlKS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoV29ya2VyVGFzayh0YXNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyLnVwZGF0ZVBhc3N3b3JkKGRhdGEucGFzc3dvcmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZk1hbmFnZXJSZWFkeSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGJvdW5kRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoV29ya2VyVGFzayh0YXNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLnNlbmQoJ1Bhc3N3b3JkRXhjZXB0aW9uJywgYm91bmRFeGNlcHRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfS5iaW5kKG51bGwsIGUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlIGluc3RhbmNlb2YgX3V0aWwuSW52YWxpZFBERkV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5zZW5kKCdJbnZhbGlkUERGJywgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZSBpbnN0YW5jZW9mIF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuc2VuZCgnTWlzc2luZ1BERicsIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBfdXRpbC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuc2VuZCgnVW5leHBlY3RlZFJlc3BvbnNlJywgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLnNlbmQoJ1Vua25vd25FcnJvcicsIG5ldyBfdXRpbC5Vbmtub3duRXJyb3JFeGNlcHRpb24oZS5tZXNzYWdlLCBlLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBkZk1hbmFnZXJSZWFkeSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5zdXJlTm90VGVybWluYXRlZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkRG9jdW1lbnQoZmFsc2UpLnRoZW4ob25TdWNjZXNzLCBmdW5jdGlvbiBsb2FkRmFpbHVyZShleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5zdXJlTm90VGVybWluYXRlZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShleCBpbnN0YW5jZW9mIF91dGlsLlhSZWZQYXJzZUV4Y2VwdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZhaWx1cmUoZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmTWFuYWdlci5yZXF1ZXN0TG9hZGVkU3RyZWFtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyLm9uTG9hZGVkU3RyZWFtKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5zdXJlTm90VGVybWluYXRlZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWREb2N1bWVudCh0cnVlKS50aGVuKG9uU3VjY2Vzcywgb25GYWlsdXJlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkZhaWx1cmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuc3VyZU5vdFRlcm1pbmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXZhbHVhdG9yT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VEYXRhU2NoZW1hOiBkYXRhLmRpc2FibGVDcmVhdGVPYmplY3RVUkwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEltYWdlU2l6ZTogZGF0YS5tYXhJbWFnZVNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVGb250RmFjZTogZGF0YS5kaXNhYmxlRm9udEZhY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlRGVjb2RlclN1cHBvcnQ6IGRhdGEubmF0aXZlSW1hZ2VEZWNvZGVyU3VwcG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlRXJyb3JzOiBkYXRhLmlnbm9yZUVycm9ycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmFsU3VwcG9ydGVkOiBkYXRhLmlzRXZhbFN1cHBvcnRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UGRmTWFuYWdlcihkYXRhLCBldmFsdWF0b3JPcHRpb25zKS50aGVuKGZ1bmN0aW9uIChuZXdQZGZNYW5hZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXJtaW5hdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQZGZNYW5hZ2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXb3JrZXIgd2FzIHRlcm1pbmF0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZk1hbmFnZXIgPSBuZXdQZGZNYW5hZ2VyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyLm9uTG9hZGVkU3RyZWFtKCkudGhlbihmdW5jdGlvbiAoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLnNlbmQoJ0RhdGFMb2FkZWQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBzdHJlYW0uYnl0ZXMuYnl0ZUxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4ocGRmTWFuYWdlclJlYWR5LCBvbkZhaWx1cmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLm9uKCdHZXRQYWdlJywgZnVuY3Rpb24gd3BoU2V0dXBHZXRQYWdlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmTWFuYWdlci5nZXRQYWdlKGRhdGEucGFnZUluZGV4KS50aGVuKGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbcGRmTWFuYWdlci5lbnN1cmUocGFnZSwgJ3JvdGF0ZScpLCBwZGZNYW5hZ2VyLmVuc3VyZShwYWdlLCAncmVmJyksIHBkZk1hbmFnZXIuZW5zdXJlKHBhZ2UsICd1c2VyVW5pdCcpLCBwZGZNYW5hZ2VyLmVuc3VyZShwYWdlLCAndmlldycpXSkudGhlbihmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVmNCA9IF9zbGljZWRUb0FycmF5KF9yZWYzLCA0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGUgPSBfcmVmNFswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWYgPSBfcmVmNFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyVW5pdCA9IF9yZWY0WzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcgPSBfcmVmNFszXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGU6IHJvdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWY6IHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyVW5pdDogdXNlclVuaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldzogdmlld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIub24oJ0dldFBhZ2VJbmRleCcsIGZ1bmN0aW9uIHdwaFNldHVwR2V0UGFnZUluZGV4KGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVmID0gbmV3IF9wcmltaXRpdmVzLlJlZihkYXRhLnJlZi5udW0sIGRhdGEucmVmLmdlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhdGFsb2cgPSBwZGZNYW5hZ2VyLnBkZkRvY3VtZW50LmNhdGFsb2c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhdGFsb2cuZ2V0UGFnZUluZGV4KHJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIub24oJ0dldERlc3RpbmF0aW9ucycsIGZ1bmN0aW9uIHdwaFNldHVwR2V0RGVzdGluYXRpb25zKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCdkZXN0aW5hdGlvbnMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5vbignR2V0RGVzdGluYXRpb24nLCBmdW5jdGlvbiB3cGhTZXR1cEdldERlc3RpbmF0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCdnZXREZXN0aW5hdGlvbicsIFtkYXRhLmlkXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIub24oJ0dldFBhZ2VMYWJlbHMnLCBmdW5jdGlvbiB3cGhTZXR1cEdldFBhZ2VMYWJlbHMoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coJ3BhZ2VMYWJlbHMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5vbignR2V0UGFnZU1vZGUnLCBmdW5jdGlvbiB3cGhTZXR1cEdldFBhZ2VNb2RlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCdwYWdlTW9kZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLm9uKCdnZXRPcGVuQWN0aW9uRGVzdGluYXRpb24nLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coJ29wZW5BY3Rpb25EZXN0aW5hdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLm9uKCdHZXRBdHRhY2htZW50cycsIGZ1bmN0aW9uIHdwaFNldHVwR2V0QXR0YWNobWVudHMoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coJ2F0dGFjaG1lbnRzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIub24oJ0dldEphdmFTY3JpcHQnLCBmdW5jdGlvbiB3cGhTZXR1cEdldEphdmFTY3JpcHQoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coJ2phdmFTY3JpcHQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5vbignR2V0T3V0bGluZScsIGZ1bmN0aW9uIHdwaFNldHVwR2V0T3V0bGluZShkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygnZG9jdW1lbnRPdXRsaW5lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIub24oJ0dldFBlcm1pc3Npb25zJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCdwZXJtaXNzaW9ucycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLm9uKCdHZXRNZXRhZGF0YScsIGZ1bmN0aW9uIHdwaFNldHVwR2V0TWV0YWRhdGEoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbcGRmTWFuYWdlci5lbnN1cmVEb2MoJ2RvY3VtZW50SW5mbycpLCBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coJ21ldGFkYXRhJyldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5vbignR2V0RGF0YScsIGZ1bmN0aW9uIHdwaFNldHVwR2V0RGF0YShkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmTWFuYWdlci5yZXF1ZXN0TG9hZGVkU3RyZWFtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBkZk1hbmFnZXIub25Mb2FkZWRTdHJlYW0oKS50aGVuKGZ1bmN0aW9uIChzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5ieXRlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5vbignR2V0U3RhdHMnLCBmdW5jdGlvbiB3cGhTZXR1cEdldFN0YXRzKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmTWFuYWdlci5wZGZEb2N1bWVudC54cmVmLnN0YXRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLm9uKCdHZXRBbm5vdGF0aW9ucycsIGZ1bmN0aW9uIChfcmVmNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWdlSW5kZXggPSBfcmVmNS5wYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudCA9IF9yZWY1LmludGVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmTWFuYWdlci5nZXRQYWdlKHBhZ2VJbmRleCkudGhlbihmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFnZS5nZXRBbm5vdGF0aW9uc0RhdGEoaW50ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5vbignUmVuZGVyUGFnZVJlcXVlc3QnLCBmdW5jdGlvbiB3cGhTZXR1cFJlbmRlclBhZ2UoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWdlSW5kZXggPSBkYXRhLnBhZ2VJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyLmdldFBhZ2UocGFnZUluZGV4KS50aGVuKGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gbmV3IFdvcmtlclRhc2soJ1JlbmRlclBhZ2VSZXF1ZXN0OiBwYWdlICcgKyBwYWdlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdvcmtlclRhc2sodGFzayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWdlTnVtID0gcGFnZUluZGV4ICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZS5nZXRPcGVyYXRvckxpc3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2s6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnQ6IGRhdGEuaW50ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW50ZXJhY3RpdmVGb3JtczogZGF0YS5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKG9wZXJhdG9yTGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoV29ya2VyVGFzayh0YXNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKSgncGFnZT0nICsgcGFnZU51bSArICcgLSBnZXRPcGVyYXRvckxpc3Q6IHRpbWU9JyArIChEYXRlLm5vdygpIC0gc3RhcnQpICsgJ21zLCBsZW49JyArIG9wZXJhdG9yTGlzdC50b3RhbExlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hXb3JrZXJUYXNrKHRhc2spO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay50ZXJtaW5hdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLnNlbmQoJ1Vuc3VwcG9ydGVkRmVhdHVyZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlSWQ6IF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLnVua25vd25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1pbmltdW1TdGFja01lc3NhZ2UgPSAnd29ya2VyLmpzOiB3aGlsZSB0cnlpbmcgdG8gZ2V0UGFnZSgpIGFuZCBnZXRPcGVyYXRvckxpc3QoKSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd3JhcHBlZEV4Y2VwdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZWRFeGNlcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrOiBtaW5pbXVtU3RhY2tNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoX3R5cGVvZihlKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVkRXhjZXB0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlLm1lc3NhZ2UgfHwgZS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjazogZS5zdGFjayB8fCBtaW5pbXVtU3RhY2tNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlZEV4Y2VwdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1Vua25vd24gZXhjZXB0aW9uIHR5cGU6ICcgKyBfdHlwZW9mKGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjazogbWluaW11bVN0YWNrTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuc2VuZCgnUGFnZUVycm9yJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VOdW06IHBhZ2VOdW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHdyYXBwZWRFeGNlcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50OiBkYXRhLmludGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLm9uKCdHZXRUZXh0Q29udGVudCcsIGZ1bmN0aW9uIHdwaEV4dHJhY3RUZXh0KGRhdGEsIHNpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFnZUluZGV4ID0gZGF0YS5wYWdlSW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rLm9uUHVsbCA9IGZ1bmN0aW9uIChkZXNpcmVkU2l6ZSkge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rLm9uQ2FuY2VsID0gZnVuY3Rpb24gKHJlYXNvbikge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyLmdldFBhZ2UocGFnZUluZGV4KS50aGVuKGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gbmV3IFdvcmtlclRhc2soJ0dldFRleHRDb250ZW50OiBwYWdlICcgKyBwYWdlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdvcmtlclRhc2sodGFzayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWdlTnVtID0gcGFnZUluZGV4ICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZS5leHRyYWN0VGV4dENvbnRlbnQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2s6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rOiBzaW5rLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplV2hpdGVzcGFjZTogZGF0YS5ub3JtYWxpemVXaGl0ZXNwYWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluZVRleHRJdGVtczogZGF0YS5jb21iaW5lVGV4dEl0ZW1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoV29ya2VyVGFzayh0YXNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKSgndGV4dCBpbmRleGluZzogcGFnZT0nICsgcGFnZU51bSArICcgLSB0aW1lPScgKyAoRGF0ZS5ub3coKSAtIHN0YXJ0KSArICdtcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luay5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hXb3JrZXJUYXNrKHRhc2spO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay50ZXJtaW5hdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rLmVycm9yKHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZWFzb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLm9uKCdGb250RmFsbGJhY2snLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmZvbnRGYWxsYmFjayhkYXRhLmlkLCBoYW5kbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5vbignQ2xlYW51cCcsIGZ1bmN0aW9uIHdwaENsZWFudXAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmNsZWFudXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5vbignVGVybWluYXRlJywgZnVuY3Rpb24gd3BoVGVybWluYXRlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZGZNYW5hZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZk1hbmFnZXIudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZk1hbmFnZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5jZWxYSFJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFhIUnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2FpdE9uID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya2VyVGFza3MuZm9yRWFjaChmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0T24ucHVzaCh0YXNrLmZpbmlzaGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwod2FpdE9uKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLm9uKCdSZWFkeScsIGZ1bmN0aW9uIHdwaFJlYWR5KGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR1cERvYyhkb2NQYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY1BhcmFtcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJIYW5kbGVyTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUZyb21Qb3J0OiBmdW5jdGlvbiBpbml0aWFsaXplRnJvbVBvcnQocG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBuZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcignd29ya2VyJywgJ21haW4nLCBwb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFdvcmtlck1lc3NhZ2VIYW5kbGVyLnNldHVwKGhhbmRsZXIsIHBvcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5zZW5kKCdyZWFkeScsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLldvcmtlck1lc3NhZ2VIYW5kbGVyID0gV29ya2VyTWVzc2FnZUhhbmRsZXI7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc01lc3NhZ2VQb3J0KG1heWJlUG9ydCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIG1heWJlUG9ydC5wb3N0TWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJyAmJiAnb25tZXNzYWdlJyBpbiBtYXliZVBvcnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnICYmICEoMCwgX2lzX25vZGUuZGVmYXVsdCkoKSAmJiB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNNZXNzYWdlUG9ydChzZWxmKSkge1xuICAgICAgICAgICAgICAgICAgICBXb3JrZXJNZXNzYWdlSGFuZGxlci5pbml0aWFsaXplRnJvbVBvcnQoc2VsZik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAyICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMpO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAzICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuICAgICAgICAgICAgICAgIHZhciBnID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcyB8fCAodHlwZW9mIHNlbGYgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihzZWxmKSkgPT09IFwib2JqZWN0XCIgJiYgc2VsZjtcbiAgICAgICAgICAgICAgICB9KCkgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGhhZFJ1bnRpbWUgPSBnLnJlZ2VuZXJhdG9yUnVudGltZSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhnKS5pbmRleE9mKFwicmVnZW5lcmF0b3JSdW50aW1lXCIpID49IDA7XG4gICAgICAgICAgICAgICAgdmFyIG9sZFJ1bnRpbWUgPSBoYWRSdW50aW1lICYmIGcucmVnZW5lcmF0b3JSdW50aW1lO1xuICAgICAgICAgICAgICAgIGcucmVnZW5lcmF0b3JSdW50aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0KTtcblxuICAgICAgICAgICAgICAgIGlmIChoYWRSdW50aW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGcucmVnZW5lcmF0b3JSdW50aW1lID0gb2xkUnVudGltZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGcucmVnZW5lcmF0b3JSdW50aW1lO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnLnJlZ2VuZXJhdG9yUnVudGltZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgICAgICAgICAgLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKG1vZHVsZSkge1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICAgICAgIWZ1bmN0aW9uIChnbG9iYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiID8gU3ltYm9sIDoge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5Nb2R1bGUgPSAoIGZhbHNlID8gdW5kZWZpbmVkIDogX3R5cGVvZihtb2R1bGUpKSA9PT0gXCJvYmplY3RcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bnRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lLndyYXAgPSB3cmFwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJub3JtYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzogZm4uY2FsbChvYmosIGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGhyb3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzogZXJyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJiBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZVt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKGdlbkZ1bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3RvciA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8IChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZS5tYXJrID0gZnVuY3Rpb24gKGdlbkZ1bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5GdW5bdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZW5GdW47XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lLmF3cmFwID0gZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXdhaXQ6IGFyZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIF90eXBlb2YodmFsdWUpID09PSBcIm9iamVjdFwiICYmIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24gKHVud3JhcHBlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgZXJyb3IsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPSBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnZva2UgPSBlbnF1ZXVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWUuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWUuYXN5bmMgPSBmdW5jdGlvbiAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pID8gaXRlciA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmUgPyBHZW5TdGF0ZUNvbXBsZXRlZCA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEdwW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeUxvYzogbG9jc1swXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMiBpbiBsb2NzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUVudHJpZXMgPSBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnlMb2M6IFwicm9vdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnJldmVyc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IC0xLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiBkb25lUmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZS52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldChza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJiBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJiAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgcm9vdFJlY29yZC5hcmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uIGRpc3BhdGNoRXhjZXB0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC5hcmcgPSBleGNlcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFjYXVnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gXCJyb290XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJydXB0OiBmdW5jdGlvbiBhYnJ1cHQodHlwZSwgYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJiAodHlwZSA9PT0gXCJicmVha1wiIHx8IHR5cGUgPT09IFwiY29udGludWVcIikgJiYgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiYgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmluYWxseUVudHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJicmVha1wiIHx8IHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgYWZ0ZXJMb2MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2g6IGZ1bmN0aW9uIGZpbmlzaChmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjYXRjaFwiOiBmdW5jdGlvbiBfY2F0Y2godHJ5TG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uIGRlbGVnYXRlWWllbGQoaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMgfHwgKHR5cGVvZiBzZWxmID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2Yoc2VsZikpID09PSBcIm9iamVjdFwiICYmIHNlbGY7XG4gICAgICAgICAgICAgICAgICAgIH0oKSB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkpO1xuICAgICAgICAgICAgICAgICAgICAvKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwodGhpcywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1KShtb2R1bGUpKSlcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1vZHVsZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5kZXByZWNhdGUgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLnBhdGhzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImxvYWRlZFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZS5sO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJpZFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZS5pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDYgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnRvUm9tYW5OdW1lcmFscyA9IHRvUm9tYW5OdW1lcmFscztcbiAgICAgICAgICAgICAgICBleHBvcnRzLmFycmF5Qnl0ZUxlbmd0aCA9IGFycmF5Qnl0ZUxlbmd0aDtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmFycmF5c1RvQnl0ZXMgPSBhcnJheXNUb0J5dGVzO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuYXNzZXJ0ID0gYXNzZXJ0O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuYnl0ZXNUb1N0cmluZyA9IGJ5dGVzVG9TdHJpbmc7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSA9IGNyZWF0ZVByb21pc2VDYXBhYmlsaXR5O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuZGVwcmVjYXRlZCA9IGRlcHJlY2F0ZWQ7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5nZXRJbmhlcml0YWJsZVByb3BlcnR5ID0gZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmdldExvb2t1cFRhYmxlRmFjdG9yeSA9IGdldExvb2t1cFRhYmxlRmFjdG9yeTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmdldFZlcmJvc2l0eUxldmVsID0gZ2V0VmVyYm9zaXR5TGV2ZWw7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5pbmZvID0gaW5mbztcbiAgICAgICAgICAgICAgICBleHBvcnRzLmlzQXJyYXlCdWZmZXIgPSBpc0FycmF5QnVmZmVyO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuaXNCb29sID0gaXNCb29sO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuaXNFbXB0eU9iaiA9IGlzRW1wdHlPYmo7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5pc051bSA9IGlzTnVtO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcbiAgICAgICAgICAgICAgICBleHBvcnRzLmlzU3BhY2UgPSBpc1NwYWNlO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuaXNTYW1lT3JpZ2luID0gaXNTYW1lT3JpZ2luO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCA9IGNyZWF0ZVZhbGlkQWJzb2x1dGVVcmw7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5pc0xpdHRsZUVuZGlhbiA9IGlzTGl0dGxlRW5kaWFuO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuaXNFdmFsU3VwcG9ydGVkID0gaXNFdmFsU3VwcG9ydGVkO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMubG9nMiA9IGxvZzI7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5yZWFkSW50OCA9IHJlYWRJbnQ4O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMucmVhZFVpbnQxNiA9IHJlYWRVaW50MTY7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5yZWFkVWludDMyID0gcmVhZFVpbnQzMjtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnJlbW92ZU51bGxDaGFyYWN0ZXJzID0gcmVtb3ZlTnVsbENoYXJhY3RlcnM7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5zZXRWZXJib3NpdHlMZXZlbCA9IHNldFZlcmJvc2l0eUxldmVsO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuc2hhZG93ID0gc2hhZG93O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuc3RyaW5nMzIgPSBzdHJpbmczMjtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnN0cmluZ1RvQnl0ZXMgPSBzdHJpbmdUb0J5dGVzO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuc3RyaW5nVG9QREZTdHJpbmcgPSBzdHJpbmdUb1BERlN0cmluZztcbiAgICAgICAgICAgICAgICBleHBvcnRzLnN0cmluZ1RvVVRGOFN0cmluZyA9IHN0cmluZ1RvVVRGOFN0cmluZztcbiAgICAgICAgICAgICAgICBleHBvcnRzLnV0ZjhTdHJpbmdUb1N0cmluZyA9IHV0ZjhTdHJpbmdUb1N0cmluZztcbiAgICAgICAgICAgICAgICBleHBvcnRzLndhcm4gPSB3YXJuO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMudW5yZWFjaGFibGUgPSB1bnJlYWNoYWJsZTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZWFkYWJsZVN0cmVhbVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9zdHJlYW1zX3BvbHlmaWxsLlJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVVJMXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3VybF9wb2x5ZmlsbC5VUkw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmNyZWF0ZU9iamVjdFVSTCA9IGV4cG9ydHMuRm9ybWF0RXJyb3IgPSBleHBvcnRzLlhSZWZQYXJzZUV4Y2VwdGlvbiA9IGV4cG9ydHMuWFJlZkVudHJ5RXhjZXB0aW9uID0gZXhwb3J0cy5VdGlsID0gZXhwb3J0cy5Vbmtub3duRXJyb3JFeGNlcHRpb24gPSBleHBvcnRzLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiA9IGV4cG9ydHMuVGV4dFJlbmRlcmluZ01vZGUgPSBleHBvcnRzLlN0cmVhbVR5cGUgPSBleHBvcnRzLlBlcm1pc3Npb25GbGFnID0gZXhwb3J0cy5QYXNzd29yZFJlc3BvbnNlcyA9IGV4cG9ydHMuUGFzc3dvcmRFeGNlcHRpb24gPSBleHBvcnRzLk5hdGl2ZUltYWdlRGVjb2RpbmcgPSBleHBvcnRzLk1pc3NpbmdQREZFeGNlcHRpb24gPSBleHBvcnRzLk1pc3NpbmdEYXRhRXhjZXB0aW9uID0gZXhwb3J0cy5JbnZhbGlkUERGRXhjZXB0aW9uID0gZXhwb3J0cy5BYm9ydEV4Y2VwdGlvbiA9IGV4cG9ydHMuQ01hcENvbXByZXNzaW9uVHlwZSA9IGV4cG9ydHMuSW1hZ2VLaW5kID0gZXhwb3J0cy5Gb250VHlwZSA9IGV4cG9ydHMuQW5ub3RhdGlvblR5cGUgPSBleHBvcnRzLkFubm90YXRpb25GbGFnID0gZXhwb3J0cy5Bbm5vdGF0aW9uRmllbGRGbGFnID0gZXhwb3J0cy5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlID0gZXhwb3J0cy5VTlNVUFBPUlRFRF9GRUFUVVJFUyA9IGV4cG9ydHMuVmVyYm9zaXR5TGV2ZWwgPSBleHBvcnRzLk9QUyA9IGV4cG9ydHMuSURFTlRJVFlfTUFUUklYID0gZXhwb3J0cy5GT05UX0lERU5USVRZX01BVFJJWCA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3N0cmVhbXNfcG9seWZpbGwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3VybF9wb2x5ZmlsbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQ5KTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgSURFTlRJVFlfTUFUUklYID0gWzEsIDAsIDAsIDEsIDAsIDBdO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuSURFTlRJVFlfTUFUUklYID0gSURFTlRJVFlfTUFUUklYO1xuICAgICAgICAgICAgICAgIHZhciBGT05UX0lERU5USVRZX01BVFJJWCA9IFswLjAwMSwgMCwgMCwgMC4wMDEsIDAsIDBdO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuRk9OVF9JREVOVElUWV9NQVRSSVggPSBGT05UX0lERU5USVRZX01BVFJJWDtcbiAgICAgICAgICAgICAgICB2YXIgTmF0aXZlSW1hZ2VEZWNvZGluZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgTk9ORTogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICBERUNPREU6ICdkZWNvZGUnLFxuICAgICAgICAgICAgICAgICAgICBESVNQTEFZOiAnZGlzcGxheSdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuTmF0aXZlSW1hZ2VEZWNvZGluZyA9IE5hdGl2ZUltYWdlRGVjb2Rpbmc7XG4gICAgICAgICAgICAgICAgdmFyIFBlcm1pc3Npb25GbGFnID0ge1xuICAgICAgICAgICAgICAgICAgICBQUklOVDogMHgwNCxcbiAgICAgICAgICAgICAgICAgICAgTU9ESUZZX0NPTlRFTlRTOiAweDA4LFxuICAgICAgICAgICAgICAgICAgICBDT1BZOiAweDEwLFxuICAgICAgICAgICAgICAgICAgICBNT0RJRllfQU5OT1RBVElPTlM6IDB4MjAsXG4gICAgICAgICAgICAgICAgICAgIEZJTExfSU5URVJBQ1RJVkVfRk9STVM6IDB4MTAwLFxuICAgICAgICAgICAgICAgICAgICBDT1BZX0ZPUl9BQ0NFU1NJQklMSVRZOiAweDIwMCxcbiAgICAgICAgICAgICAgICAgICAgQVNTRU1CTEU6IDB4NDAwLFxuICAgICAgICAgICAgICAgICAgICBQUklOVF9ISUdIX1FVQUxJVFk6IDB4ODAwXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLlBlcm1pc3Npb25GbGFnID0gUGVybWlzc2lvbkZsYWc7XG4gICAgICAgICAgICAgICAgdmFyIFRleHRSZW5kZXJpbmdNb2RlID0ge1xuICAgICAgICAgICAgICAgICAgICBGSUxMOiAwLFxuICAgICAgICAgICAgICAgICAgICBTVFJPS0U6IDEsXG4gICAgICAgICAgICAgICAgICAgIEZJTExfU1RST0tFOiAyLFxuICAgICAgICAgICAgICAgICAgICBJTlZJU0lCTEU6IDMsXG4gICAgICAgICAgICAgICAgICAgIEZJTExfQUREX1RPX1BBVEg6IDQsXG4gICAgICAgICAgICAgICAgICAgIFNUUk9LRV9BRERfVE9fUEFUSDogNSxcbiAgICAgICAgICAgICAgICAgICAgRklMTF9TVFJPS0VfQUREX1RPX1BBVEg6IDYsXG4gICAgICAgICAgICAgICAgICAgIEFERF9UT19QQVRIOiA3LFxuICAgICAgICAgICAgICAgICAgICBGSUxMX1NUUk9LRV9NQVNLOiAzLFxuICAgICAgICAgICAgICAgICAgICBBRERfVE9fUEFUSF9GTEFHOiA0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLlRleHRSZW5kZXJpbmdNb2RlID0gVGV4dFJlbmRlcmluZ01vZGU7XG4gICAgICAgICAgICAgICAgdmFyIEltYWdlS2luZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgR1JBWVNDQUxFXzFCUFA6IDEsXG4gICAgICAgICAgICAgICAgICAgIFJHQl8yNEJQUDogMixcbiAgICAgICAgICAgICAgICAgICAgUkdCQV8zMkJQUDogM1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5JbWFnZUtpbmQgPSBJbWFnZUtpbmQ7XG4gICAgICAgICAgICAgICAgdmFyIEFubm90YXRpb25UeXBlID0ge1xuICAgICAgICAgICAgICAgICAgICBURVhUOiAxLFxuICAgICAgICAgICAgICAgICAgICBMSU5LOiAyLFxuICAgICAgICAgICAgICAgICAgICBGUkVFVEVYVDogMyxcbiAgICAgICAgICAgICAgICAgICAgTElORTogNCxcbiAgICAgICAgICAgICAgICAgICAgU1FVQVJFOiA1LFxuICAgICAgICAgICAgICAgICAgICBDSVJDTEU6IDYsXG4gICAgICAgICAgICAgICAgICAgIFBPTFlHT046IDcsXG4gICAgICAgICAgICAgICAgICAgIFBPTFlMSU5FOiA4LFxuICAgICAgICAgICAgICAgICAgICBISUdITElHSFQ6IDksXG4gICAgICAgICAgICAgICAgICAgIFVOREVSTElORTogMTAsXG4gICAgICAgICAgICAgICAgICAgIFNRVUlHR0xZOiAxMSxcbiAgICAgICAgICAgICAgICAgICAgU1RSSUtFT1VUOiAxMixcbiAgICAgICAgICAgICAgICAgICAgU1RBTVA6IDEzLFxuICAgICAgICAgICAgICAgICAgICBDQVJFVDogMTQsXG4gICAgICAgICAgICAgICAgICAgIElOSzogMTUsXG4gICAgICAgICAgICAgICAgICAgIFBPUFVQOiAxNixcbiAgICAgICAgICAgICAgICAgICAgRklMRUFUVEFDSE1FTlQ6IDE3LFxuICAgICAgICAgICAgICAgICAgICBTT1VORDogMTgsXG4gICAgICAgICAgICAgICAgICAgIE1PVklFOiAxOSxcbiAgICAgICAgICAgICAgICAgICAgV0lER0VUOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgU0NSRUVOOiAyMSxcbiAgICAgICAgICAgICAgICAgICAgUFJJTlRFUk1BUks6IDIyLFxuICAgICAgICAgICAgICAgICAgICBUUkFQTkVUOiAyMyxcbiAgICAgICAgICAgICAgICAgICAgV0FURVJNQVJLOiAyNCxcbiAgICAgICAgICAgICAgICAgICAgVEhSRUVEOiAyNSxcbiAgICAgICAgICAgICAgICAgICAgUkVEQUNUOiAyNlxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Bbm5vdGF0aW9uVHlwZSA9IEFubm90YXRpb25UeXBlO1xuICAgICAgICAgICAgICAgIHZhciBBbm5vdGF0aW9uRmxhZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgSU5WSVNJQkxFOiAweDAxLFxuICAgICAgICAgICAgICAgICAgICBISURERU46IDB4MDIsXG4gICAgICAgICAgICAgICAgICAgIFBSSU5UOiAweDA0LFxuICAgICAgICAgICAgICAgICAgICBOT1pPT006IDB4MDgsXG4gICAgICAgICAgICAgICAgICAgIE5PUk9UQVRFOiAweDEwLFxuICAgICAgICAgICAgICAgICAgICBOT1ZJRVc6IDB4MjAsXG4gICAgICAgICAgICAgICAgICAgIFJFQURPTkxZOiAweDQwLFxuICAgICAgICAgICAgICAgICAgICBMT0NLRUQ6IDB4ODAsXG4gICAgICAgICAgICAgICAgICAgIFRPR0dMRU5PVklFVzogMHgxMDAsXG4gICAgICAgICAgICAgICAgICAgIExPQ0tFRENPTlRFTlRTOiAweDIwMFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Bbm5vdGF0aW9uRmxhZyA9IEFubm90YXRpb25GbGFnO1xuICAgICAgICAgICAgICAgIHZhciBBbm5vdGF0aW9uRmllbGRGbGFnID0ge1xuICAgICAgICAgICAgICAgICAgICBSRUFET05MWTogMHgwMDAwMDAxLFxuICAgICAgICAgICAgICAgICAgICBSRVFVSVJFRDogMHgwMDAwMDAyLFxuICAgICAgICAgICAgICAgICAgICBOT0VYUE9SVDogMHgwMDAwMDA0LFxuICAgICAgICAgICAgICAgICAgICBNVUxUSUxJTkU6IDB4MDAwMTAwMCxcbiAgICAgICAgICAgICAgICAgICAgUEFTU1dPUkQ6IDB4MDAwMjAwMCxcbiAgICAgICAgICAgICAgICAgICAgTk9UT0dHTEVUT09GRjogMHgwMDA0MDAwLFxuICAgICAgICAgICAgICAgICAgICBSQURJTzogMHgwMDA4MDAwLFxuICAgICAgICAgICAgICAgICAgICBQVVNIQlVUVE9OOiAweDAwMTAwMDAsXG4gICAgICAgICAgICAgICAgICAgIENPTUJPOiAweDAwMjAwMDAsXG4gICAgICAgICAgICAgICAgICAgIEVESVQ6IDB4MDA0MDAwMCxcbiAgICAgICAgICAgICAgICAgICAgU09SVDogMHgwMDgwMDAwLFxuICAgICAgICAgICAgICAgICAgICBGSUxFU0VMRUNUOiAweDAxMDAwMDAsXG4gICAgICAgICAgICAgICAgICAgIE1VTFRJU0VMRUNUOiAweDAyMDAwMDAsXG4gICAgICAgICAgICAgICAgICAgIERPTk9UU1BFTExDSEVDSzogMHgwNDAwMDAwLFxuICAgICAgICAgICAgICAgICAgICBET05PVFNDUk9MTDogMHgwODAwMDAwLFxuICAgICAgICAgICAgICAgICAgICBDT01COiAweDEwMDAwMDAsXG4gICAgICAgICAgICAgICAgICAgIFJJQ0hURVhUOiAweDIwMDAwMDAsXG4gICAgICAgICAgICAgICAgICAgIFJBRElPU0lOVU5JU09OOiAweDIwMDAwMDAsXG4gICAgICAgICAgICAgICAgICAgIENPTU1JVE9OU0VMQ0hBTkdFOiAweDQwMDAwMDBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuQW5ub3RhdGlvbkZpZWxkRmxhZyA9IEFubm90YXRpb25GaWVsZEZsYWc7XG4gICAgICAgICAgICAgICAgdmFyIEFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIFNPTElEOiAxLFxuICAgICAgICAgICAgICAgICAgICBEQVNIRUQ6IDIsXG4gICAgICAgICAgICAgICAgICAgIEJFVkVMRUQ6IDMsXG4gICAgICAgICAgICAgICAgICAgIElOU0VUOiA0LFxuICAgICAgICAgICAgICAgICAgICBVTkRFUkxJTkU6IDVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZSA9IEFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGU7XG4gICAgICAgICAgICAgICAgdmFyIFN0cmVhbVR5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIFVOS05PV046IDAsXG4gICAgICAgICAgICAgICAgICAgIEZMQVRFOiAxLFxuICAgICAgICAgICAgICAgICAgICBMWlc6IDIsXG4gICAgICAgICAgICAgICAgICAgIERDVDogMyxcbiAgICAgICAgICAgICAgICAgICAgSlBYOiA0LFxuICAgICAgICAgICAgICAgICAgICBKQklHOiA1LFxuICAgICAgICAgICAgICAgICAgICBBODU6IDYsXG4gICAgICAgICAgICAgICAgICAgIEFIWDogNyxcbiAgICAgICAgICAgICAgICAgICAgQ0NGOiA4LFxuICAgICAgICAgICAgICAgICAgICBSTDogOVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5TdHJlYW1UeXBlID0gU3RyZWFtVHlwZTtcbiAgICAgICAgICAgICAgICB2YXIgRm9udFR5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIFVOS05PV046IDAsXG4gICAgICAgICAgICAgICAgICAgIFRZUEUxOiAxLFxuICAgICAgICAgICAgICAgICAgICBUWVBFMUM6IDIsXG4gICAgICAgICAgICAgICAgICAgIENJREZPTlRUWVBFMDogMyxcbiAgICAgICAgICAgICAgICAgICAgQ0lERk9OVFRZUEUwQzogNCxcbiAgICAgICAgICAgICAgICAgICAgVFJVRVRZUEU6IDUsXG4gICAgICAgICAgICAgICAgICAgIENJREZPTlRUWVBFMjogNixcbiAgICAgICAgICAgICAgICAgICAgVFlQRTM6IDcsXG4gICAgICAgICAgICAgICAgICAgIE9QRU5UWVBFOiA4LFxuICAgICAgICAgICAgICAgICAgICBUWVBFMDogOSxcbiAgICAgICAgICAgICAgICAgICAgTU1UWVBFMTogMTBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuRm9udFR5cGUgPSBGb250VHlwZTtcbiAgICAgICAgICAgICAgICB2YXIgVmVyYm9zaXR5TGV2ZWwgPSB7XG4gICAgICAgICAgICAgICAgICAgIEVSUk9SUzogMCxcbiAgICAgICAgICAgICAgICAgICAgV0FSTklOR1M6IDEsXG4gICAgICAgICAgICAgICAgICAgIElORk9TOiA1XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLlZlcmJvc2l0eUxldmVsID0gVmVyYm9zaXR5TGV2ZWw7XG4gICAgICAgICAgICAgICAgdmFyIENNYXBDb21wcmVzc2lvblR5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIE5PTkU6IDAsXG4gICAgICAgICAgICAgICAgICAgIEJJTkFSWTogMSxcbiAgICAgICAgICAgICAgICAgICAgU1RSRUFNOiAyXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkNNYXBDb21wcmVzc2lvblR5cGUgPSBDTWFwQ29tcHJlc3Npb25UeXBlO1xuICAgICAgICAgICAgICAgIHZhciBPUFMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3k6IDEsXG4gICAgICAgICAgICAgICAgICAgIHNldExpbmVXaWR0aDogMixcbiAgICAgICAgICAgICAgICAgICAgc2V0TGluZUNhcDogMyxcbiAgICAgICAgICAgICAgICAgICAgc2V0TGluZUpvaW46IDQsXG4gICAgICAgICAgICAgICAgICAgIHNldE1pdGVyTGltaXQ6IDUsXG4gICAgICAgICAgICAgICAgICAgIHNldERhc2g6IDYsXG4gICAgICAgICAgICAgICAgICAgIHNldFJlbmRlcmluZ0ludGVudDogNyxcbiAgICAgICAgICAgICAgICAgICAgc2V0RmxhdG5lc3M6IDgsXG4gICAgICAgICAgICAgICAgICAgIHNldEdTdGF0ZTogOSxcbiAgICAgICAgICAgICAgICAgICAgc2F2ZTogMTAsXG4gICAgICAgICAgICAgICAgICAgIHJlc3RvcmU6IDExLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IDEyLFxuICAgICAgICAgICAgICAgICAgICBtb3ZlVG86IDEzLFxuICAgICAgICAgICAgICAgICAgICBsaW5lVG86IDE0LFxuICAgICAgICAgICAgICAgICAgICBjdXJ2ZVRvOiAxNSxcbiAgICAgICAgICAgICAgICAgICAgY3VydmVUbzI6IDE2LFxuICAgICAgICAgICAgICAgICAgICBjdXJ2ZVRvMzogMTcsXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlUGF0aDogMTgsXG4gICAgICAgICAgICAgICAgICAgIHJlY3RhbmdsZTogMTksXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogMjAsXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlU3Ryb2tlOiAyMSxcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogMjIsXG4gICAgICAgICAgICAgICAgICAgIGVvRmlsbDogMjMsXG4gICAgICAgICAgICAgICAgICAgIGZpbGxTdHJva2U6IDI0LFxuICAgICAgICAgICAgICAgICAgICBlb0ZpbGxTdHJva2U6IDI1LFxuICAgICAgICAgICAgICAgICAgICBjbG9zZUZpbGxTdHJva2U6IDI2LFxuICAgICAgICAgICAgICAgICAgICBjbG9zZUVPRmlsbFN0cm9rZTogMjcsXG4gICAgICAgICAgICAgICAgICAgIGVuZFBhdGg6IDI4LFxuICAgICAgICAgICAgICAgICAgICBjbGlwOiAyOSxcbiAgICAgICAgICAgICAgICAgICAgZW9DbGlwOiAzMCxcbiAgICAgICAgICAgICAgICAgICAgYmVnaW5UZXh0OiAzMSxcbiAgICAgICAgICAgICAgICAgICAgZW5kVGV4dDogMzIsXG4gICAgICAgICAgICAgICAgICAgIHNldENoYXJTcGFjaW5nOiAzMyxcbiAgICAgICAgICAgICAgICAgICAgc2V0V29yZFNwYWNpbmc6IDM0LFxuICAgICAgICAgICAgICAgICAgICBzZXRIU2NhbGU6IDM1LFxuICAgICAgICAgICAgICAgICAgICBzZXRMZWFkaW5nOiAzNixcbiAgICAgICAgICAgICAgICAgICAgc2V0Rm9udDogMzcsXG4gICAgICAgICAgICAgICAgICAgIHNldFRleHRSZW5kZXJpbmdNb2RlOiAzOCxcbiAgICAgICAgICAgICAgICAgICAgc2V0VGV4dFJpc2U6IDM5LFxuICAgICAgICAgICAgICAgICAgICBtb3ZlVGV4dDogNDAsXG4gICAgICAgICAgICAgICAgICAgIHNldExlYWRpbmdNb3ZlVGV4dDogNDEsXG4gICAgICAgICAgICAgICAgICAgIHNldFRleHRNYXRyaXg6IDQyLFxuICAgICAgICAgICAgICAgICAgICBuZXh0TGluZTogNDMsXG4gICAgICAgICAgICAgICAgICAgIHNob3dUZXh0OiA0NCxcbiAgICAgICAgICAgICAgICAgICAgc2hvd1NwYWNlZFRleHQ6IDQ1LFxuICAgICAgICAgICAgICAgICAgICBuZXh0TGluZVNob3dUZXh0OiA0NixcbiAgICAgICAgICAgICAgICAgICAgbmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6IDQ3LFxuICAgICAgICAgICAgICAgICAgICBzZXRDaGFyV2lkdGg6IDQ4LFxuICAgICAgICAgICAgICAgICAgICBzZXRDaGFyV2lkdGhBbmRCb3VuZHM6IDQ5LFxuICAgICAgICAgICAgICAgICAgICBzZXRTdHJva2VDb2xvclNwYWNlOiA1MCxcbiAgICAgICAgICAgICAgICAgICAgc2V0RmlsbENvbG9yU3BhY2U6IDUxLFxuICAgICAgICAgICAgICAgICAgICBzZXRTdHJva2VDb2xvcjogNTIsXG4gICAgICAgICAgICAgICAgICAgIHNldFN0cm9rZUNvbG9yTjogNTMsXG4gICAgICAgICAgICAgICAgICAgIHNldEZpbGxDb2xvcjogNTQsXG4gICAgICAgICAgICAgICAgICAgIHNldEZpbGxDb2xvck46IDU1LFxuICAgICAgICAgICAgICAgICAgICBzZXRTdHJva2VHcmF5OiA1NixcbiAgICAgICAgICAgICAgICAgICAgc2V0RmlsbEdyYXk6IDU3LFxuICAgICAgICAgICAgICAgICAgICBzZXRTdHJva2VSR0JDb2xvcjogNTgsXG4gICAgICAgICAgICAgICAgICAgIHNldEZpbGxSR0JDb2xvcjogNTksXG4gICAgICAgICAgICAgICAgICAgIHNldFN0cm9rZUNNWUtDb2xvcjogNjAsXG4gICAgICAgICAgICAgICAgICAgIHNldEZpbGxDTVlLQ29sb3I6IDYxLFxuICAgICAgICAgICAgICAgICAgICBzaGFkaW5nRmlsbDogNjIsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luSW5saW5lSW1hZ2U6IDYzLFxuICAgICAgICAgICAgICAgICAgICBiZWdpbkltYWdlRGF0YTogNjQsXG4gICAgICAgICAgICAgICAgICAgIGVuZElubGluZUltYWdlOiA2NSxcbiAgICAgICAgICAgICAgICAgICAgcGFpbnRYT2JqZWN0OiA2NixcbiAgICAgICAgICAgICAgICAgICAgbWFya1BvaW50OiA2NyxcbiAgICAgICAgICAgICAgICAgICAgbWFya1BvaW50UHJvcHM6IDY4LFxuICAgICAgICAgICAgICAgICAgICBiZWdpbk1hcmtlZENvbnRlbnQ6IDY5LFxuICAgICAgICAgICAgICAgICAgICBiZWdpbk1hcmtlZENvbnRlbnRQcm9wczogNzAsXG4gICAgICAgICAgICAgICAgICAgIGVuZE1hcmtlZENvbnRlbnQ6IDcxLFxuICAgICAgICAgICAgICAgICAgICBiZWdpbkNvbXBhdDogNzIsXG4gICAgICAgICAgICAgICAgICAgIGVuZENvbXBhdDogNzMsXG4gICAgICAgICAgICAgICAgICAgIHBhaW50Rm9ybVhPYmplY3RCZWdpbjogNzQsXG4gICAgICAgICAgICAgICAgICAgIHBhaW50Rm9ybVhPYmplY3RFbmQ6IDc1LFxuICAgICAgICAgICAgICAgICAgICBiZWdpbkdyb3VwOiA3NixcbiAgICAgICAgICAgICAgICAgICAgZW5kR3JvdXA6IDc3LFxuICAgICAgICAgICAgICAgICAgICBiZWdpbkFubm90YXRpb25zOiA3OCxcbiAgICAgICAgICAgICAgICAgICAgZW5kQW5ub3RhdGlvbnM6IDc5LFxuICAgICAgICAgICAgICAgICAgICBiZWdpbkFubm90YXRpb246IDgwLFxuICAgICAgICAgICAgICAgICAgICBlbmRBbm5vdGF0aW9uOiA4MSxcbiAgICAgICAgICAgICAgICAgICAgcGFpbnRKcGVnWE9iamVjdDogODIsXG4gICAgICAgICAgICAgICAgICAgIHBhaW50SW1hZ2VNYXNrWE9iamVjdDogODMsXG4gICAgICAgICAgICAgICAgICAgIHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwOiA4NCxcbiAgICAgICAgICAgICAgICAgICAgcGFpbnRJbWFnZVhPYmplY3Q6IDg1LFxuICAgICAgICAgICAgICAgICAgICBwYWludElubGluZUltYWdlWE9iamVjdDogODYsXG4gICAgICAgICAgICAgICAgICAgIHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6IDg3LFxuICAgICAgICAgICAgICAgICAgICBwYWludEltYWdlWE9iamVjdFJlcGVhdDogODgsXG4gICAgICAgICAgICAgICAgICAgIHBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdDogODksXG4gICAgICAgICAgICAgICAgICAgIHBhaW50U29saWRDb2xvckltYWdlTWFzazogOTAsXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdFBhdGg6IDkxXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLk9QUyA9IE9QUztcbiAgICAgICAgICAgICAgICB2YXIgVU5TVVBQT1JURURfRkVBVFVSRVMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHVua25vd246ICd1bmtub3duJyxcbiAgICAgICAgICAgICAgICAgICAgZm9ybXM6ICdmb3JtcycsXG4gICAgICAgICAgICAgICAgICAgIGphdmFTY3JpcHQ6ICdqYXZhU2NyaXB0JyxcbiAgICAgICAgICAgICAgICAgICAgc21hc2s6ICdzbWFzaycsXG4gICAgICAgICAgICAgICAgICAgIHNoYWRpbmdQYXR0ZXJuOiAnc2hhZGluZ1BhdHRlcm4nLFxuICAgICAgICAgICAgICAgICAgICBmb250OiAnZm9udCdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuVU5TVVBQT1JURURfRkVBVFVSRVMgPSBVTlNVUFBPUlRFRF9GRUFUVVJFUztcbiAgICAgICAgICAgICAgICB2YXIgUGFzc3dvcmRSZXNwb25zZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIE5FRURfUEFTU1dPUkQ6IDEsXG4gICAgICAgICAgICAgICAgICAgIElOQ09SUkVDVF9QQVNTV09SRDogMlxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QYXNzd29yZFJlc3BvbnNlcyA9IFBhc3N3b3JkUmVzcG9uc2VzO1xuICAgICAgICAgICAgICAgIHZhciB2ZXJib3NpdHkgPSBWZXJib3NpdHlMZXZlbC5XQVJOSU5HUztcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNldFZlcmJvc2l0eUxldmVsKGxldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGxldmVsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zaXR5ID0gbGV2ZWw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRWZXJib3NpdHlMZXZlbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZlcmJvc2l0eTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpbmZvKG1zZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zaXR5ID49IFZlcmJvc2l0eUxldmVsLklORk9TKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnSW5mbzogJyArIG1zZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB3YXJuKG1zZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zaXR5ID49IFZlcmJvc2l0eUxldmVsLldBUk5JTkdTKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnV2FybmluZzogJyArIG1zZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZXByZWNhdGVkKGRldGFpbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0RlcHJlY2F0ZWQgQVBJIHVzYWdlOiAnICsgZGV0YWlscyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gdW5yZWFjaGFibGUobXNnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFzc2VydChjb25kLCBtc2cpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1bnJlYWNoYWJsZShtc2cpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNTYW1lT3JpZ2luKGJhc2VVcmwsIG90aGVyVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZSA9IG5ldyBfdXJsX3BvbHlmaWxsLlVSTChiYXNlVXJsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFiYXNlLm9yaWdpbiB8fCBiYXNlLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgb3RoZXIgPSBuZXcgX3VybF9wb2x5ZmlsbC5VUkwob3RoZXJVcmwsIGJhc2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZS5vcmlnaW4gPT09IG90aGVyLm9yaWdpbjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaXNWYWxpZFByb3RvY29sKHVybCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh1cmwucHJvdG9jb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2h0dHA6JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2h0dHBzOic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmdHA6JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21haWx0bzonOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndGVsOic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCh1cmwsIGJhc2VVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhYnNvbHV0ZVVybCA9IGJhc2VVcmwgPyBuZXcgX3VybF9wb2x5ZmlsbC5VUkwodXJsLCBiYXNlVXJsKSA6IG5ldyBfdXJsX3BvbHlmaWxsLlVSTCh1cmwpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2lzVmFsaWRQcm90b2NvbChhYnNvbHV0ZVVybCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWJzb2x1dGVVcmw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7fVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNoYWRvdyhvYmosIHByb3AsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRMb29rdXBUYWJsZUZhY3RvcnkoaW5pdGlhbGl6ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxvb2t1cDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbml0aWFsaXplcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXIobG9va3VwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb29rdXA7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIFBhc3N3b3JkRXhjZXB0aW9uID0gZnVuY3Rpb24gUGFzc3dvcmRFeGNlcHRpb25DbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQYXNzd29yZEV4Y2VwdGlvbihtc2csIGNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZSA9ICdQYXNzd29yZEV4Y2VwdGlvbic7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgUGFzc3dvcmRFeGNlcHRpb24ucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIFBhc3N3b3JkRXhjZXB0aW9uLmNvbnN0cnVjdG9yID0gUGFzc3dvcmRFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQYXNzd29yZEV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlBhc3N3b3JkRXhjZXB0aW9uID0gUGFzc3dvcmRFeGNlcHRpb247XG5cbiAgICAgICAgICAgICAgICB2YXIgVW5rbm93bkVycm9yRXhjZXB0aW9uID0gZnVuY3Rpb24gVW5rbm93bkVycm9yRXhjZXB0aW9uQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVW5rbm93bkVycm9yRXhjZXB0aW9uKG1zZywgZGV0YWlscykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lID0gJ1Vua25vd25FcnJvckV4Y2VwdGlvbic7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgVW5rbm93bkVycm9yRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBVbmtub3duRXJyb3JFeGNlcHRpb24uY29uc3RydWN0b3IgPSBVbmtub3duRXJyb3JFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBVbmtub3duRXJyb3JFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Vbmtub3duRXJyb3JFeGNlcHRpb24gPSBVbmtub3duRXJyb3JFeGNlcHRpb247XG5cbiAgICAgICAgICAgICAgICB2YXIgSW52YWxpZFBERkV4Y2VwdGlvbiA9IGZ1bmN0aW9uIEludmFsaWRQREZFeGNlcHRpb25DbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJbnZhbGlkUERGRXhjZXB0aW9uKG1zZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lID0gJ0ludmFsaWRQREZFeGNlcHRpb24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gbXNnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgSW52YWxpZFBERkV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgSW52YWxpZFBERkV4Y2VwdGlvbi5jb25zdHJ1Y3RvciA9IEludmFsaWRQREZFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnZhbGlkUERGRXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuSW52YWxpZFBERkV4Y2VwdGlvbiA9IEludmFsaWRQREZFeGNlcHRpb247XG5cbiAgICAgICAgICAgICAgICB2YXIgTWlzc2luZ1BERkV4Y2VwdGlvbiA9IGZ1bmN0aW9uIE1pc3NpbmdQREZFeGNlcHRpb25DbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBNaXNzaW5nUERGRXhjZXB0aW9uKG1zZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lID0gJ01pc3NpbmdQREZFeGNlcHRpb24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gbXNnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgTWlzc2luZ1BERkV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgTWlzc2luZ1BERkV4Y2VwdGlvbi5jb25zdHJ1Y3RvciA9IE1pc3NpbmdQREZFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNaXNzaW5nUERGRXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuTWlzc2luZ1BERkV4Y2VwdGlvbiA9IE1pc3NpbmdQREZFeGNlcHRpb247XG5cbiAgICAgICAgICAgICAgICB2YXIgVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uID0gZnVuY3Rpb24gVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uKG1zZywgc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hbWUgPSAnVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1zZztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24uY29uc3RydWN0b3IgPSBVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24gPSBVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb247XG5cbiAgICAgICAgICAgICAgICB2YXIgTWlzc2luZ0RhdGFFeGNlcHRpb24gPSBmdW5jdGlvbiBNaXNzaW5nRGF0YUV4Y2VwdGlvbkNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE1pc3NpbmdEYXRhRXhjZXB0aW9uKGJlZ2luLCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4gPSBiZWdpbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kID0gZW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJ01pc3NpbmcgZGF0YSBbJyArIGJlZ2luICsgJywgJyArIGVuZCArICcpJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIE1pc3NpbmdEYXRhRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBNaXNzaW5nRGF0YUV4Y2VwdGlvbi5wcm90b3R5cGUubmFtZSA9ICdNaXNzaW5nRGF0YUV4Y2VwdGlvbic7XG4gICAgICAgICAgICAgICAgICAgIE1pc3NpbmdEYXRhRXhjZXB0aW9uLmNvbnN0cnVjdG9yID0gTWlzc2luZ0RhdGFFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNaXNzaW5nRGF0YUV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLk1pc3NpbmdEYXRhRXhjZXB0aW9uID0gTWlzc2luZ0RhdGFFeGNlcHRpb247XG5cbiAgICAgICAgICAgICAgICB2YXIgWFJlZkVudHJ5RXhjZXB0aW9uID0gZnVuY3Rpb24gWFJlZkVudHJ5RXhjZXB0aW9uQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gWFJlZkVudHJ5RXhjZXB0aW9uKG1zZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gbXNnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgWFJlZkVudHJ5RXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBYUmVmRW50cnlFeGNlcHRpb24ucHJvdG90eXBlLm5hbWUgPSAnWFJlZkVudHJ5RXhjZXB0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgWFJlZkVudHJ5RXhjZXB0aW9uLmNvbnN0cnVjdG9yID0gWFJlZkVudHJ5RXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWFJlZkVudHJ5RXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuWFJlZkVudHJ5RXhjZXB0aW9uID0gWFJlZkVudHJ5RXhjZXB0aW9uO1xuXG4gICAgICAgICAgICAgICAgdmFyIFhSZWZQYXJzZUV4Y2VwdGlvbiA9IGZ1bmN0aW9uIFhSZWZQYXJzZUV4Y2VwdGlvbkNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFhSZWZQYXJzZUV4Y2VwdGlvbihtc2cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1zZztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFhSZWZQYXJzZUV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgWFJlZlBhcnNlRXhjZXB0aW9uLnByb3RvdHlwZS5uYW1lID0gJ1hSZWZQYXJzZUV4Y2VwdGlvbic7XG4gICAgICAgICAgICAgICAgICAgIFhSZWZQYXJzZUV4Y2VwdGlvbi5jb25zdHJ1Y3RvciA9IFhSZWZQYXJzZUV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFhSZWZQYXJzZUV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlhSZWZQYXJzZUV4Y2VwdGlvbiA9IFhSZWZQYXJzZUV4Y2VwdGlvbjtcblxuICAgICAgICAgICAgICAgIHZhciBGb3JtYXRFcnJvciA9IGZ1bmN0aW9uIEZvcm1hdEVycm9yQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRm9ybWF0RXJyb3IobXNnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBGb3JtYXRFcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgRm9ybWF0RXJyb3IucHJvdG90eXBlLm5hbWUgPSAnRm9ybWF0RXJyb3InO1xuICAgICAgICAgICAgICAgICAgICBGb3JtYXRFcnJvci5jb25zdHJ1Y3RvciA9IEZvcm1hdEVycm9yO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRm9ybWF0RXJyb3I7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Gb3JtYXRFcnJvciA9IEZvcm1hdEVycm9yO1xuXG4gICAgICAgICAgICAgICAgdmFyIEFib3J0RXhjZXB0aW9uID0gZnVuY3Rpb24gQWJvcnRFeGNlcHRpb25DbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBYm9ydEV4Y2VwdGlvbihtc2cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZSA9ICdBYm9ydEV4Y2VwdGlvbic7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBBYm9ydEV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgQWJvcnRFeGNlcHRpb24uY29uc3RydWN0b3IgPSBBYm9ydEV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFib3J0RXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuQWJvcnRFeGNlcHRpb24gPSBBYm9ydEV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICB2YXIgTnVsbENoYXJhY3RlcnNSZWdFeHAgPSAvXFx4MDAvZztcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlbW92ZU51bGxDaGFyYWN0ZXJzKHN0cikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4oJ1RoZSBhcmd1bWVudCBmb3IgcmVtb3ZlTnVsbENoYXJhY3RlcnMgbXVzdCBiZSBhIHN0cmluZy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoTnVsbENoYXJhY3RlcnNSZWdFeHAsICcnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBieXRlc1RvU3RyaW5nKGJ5dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChieXRlcyAhPT0gbnVsbCAmJiBfdHlwZW9mKGJ5dGVzKSA9PT0gJ29iamVjdCcgJiYgYnl0ZXMubGVuZ3RoICE9PSB1bmRlZmluZWQsICdJbnZhbGlkIGFyZ3VtZW50IGZvciBieXRlc1RvU3RyaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBieXRlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHZhciBNQVhfQVJHVU1FTlRfQ09VTlQgPSA4MTkyO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPCBNQVhfQVJHVU1FTlRfQ09VTlQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGJ5dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBzdHJCdWYgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSBNQVhfQVJHVU1FTlRfQ09VTlQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVua0VuZCA9IE1hdGgubWluKGkgKyBNQVhfQVJHVU1FTlRfQ09VTlQsIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSBieXRlcy5zdWJhcnJheShpLCBjaHVua0VuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNodW5rKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyQnVmLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHN0cmluZ1RvQnl0ZXMoc3RyKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydCh0eXBlb2Ygc3RyID09PSAnc3RyaW5nJywgJ0ludmFsaWQgYXJndW1lbnQgZm9yIHN0cmluZ1RvQnl0ZXMnKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbaV0gPSBzdHIuY2hhckNvZGVBdChpKSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnl0ZXM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXJyYXlCeXRlTGVuZ3RoKGFycikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJyLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChhcnIuYnl0ZUxlbmd0aCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyci5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFycmF5c1RvQnl0ZXMoYXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnIubGVuZ3RoID09PSAxICYmIGFyclswXSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0TGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGksXG4gICAgICAgICAgICAgICAgICAgICAgICBpaSA9IGFyci5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpdGVtLCBpdGVtTGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtID0gYXJyW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUxlbmd0aCA9IGFycmF5Qnl0ZUxlbmd0aChpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdExlbmd0aCArPSBpdGVtTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gbmV3IFVpbnQ4QXJyYXkocmVzdWx0TGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGFycltpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoaXRlbSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtID0gc3RyaW5nVG9CeXRlcyhpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtID0gbmV3IFVpbnQ4QXJyYXkoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtTGVuZ3RoID0gaXRlbS5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5zZXQoaXRlbSwgcG9zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcyArPSBpdGVtTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gc3RyaW5nMzIodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodmFsdWUgPj4gMjQgJiAweGZmLCB2YWx1ZSA+PiAxNiAmIDB4ZmYsIHZhbHVlID4+IDggJiAweGZmLCB2YWx1ZSAmIDB4ZmYpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGxvZzIoeCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoeCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwoTWF0aC5sb2cyKHgpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkSW50OChkYXRhLCBzdGFydCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVtzdGFydF0gPDwgMjQgPj4gMjQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZFVpbnQxNihkYXRhLCBvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFbb2Zmc2V0XSA8PCA4IHwgZGF0YVtvZmZzZXQgKyAxXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkVWludDMyKGRhdGEsIG9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGRhdGFbb2Zmc2V0XSA8PCAyNCB8IGRhdGFbb2Zmc2V0ICsgMV0gPDwgMTYgfCBkYXRhW29mZnNldCArIDJdIDw8IDggfCBkYXRhW29mZnNldCArIDNdKSA+Pj4gMDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc0xpdHRsZUVuZGlhbigpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlcjggPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyOFswXSA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2aWV3MzIgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyOC5idWZmZXIsIDAsIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmlldzMyWzBdID09PSAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzRXZhbFN1cHBvcnRlZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGdW5jdGlvbignJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eShfcmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gX3JlZi5kaWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gX3JlZi5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBfcmVmJGdldEFycmF5ID0gX3JlZi5nZXRBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldEFycmF5ID0gX3JlZiRnZXRBcnJheSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGdldEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgX3JlZiRzdG9wV2hlbkZvdW5kID0gX3JlZi5zdG9wV2hlbkZvdW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFdoZW5Gb3VuZCA9IF9yZWYkc3RvcFdoZW5Gb3VuZCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkc3RvcFdoZW5Gb3VuZDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIExPT1BfTElNSVQgPSAxMDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsb29wQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVzO1xuXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChkaWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBnZXRBcnJheSA/IGRpY3QuZ2V0QXJyYXkoa2V5KSA6IGRpY3QuZ2V0KGtleSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0b3BXaGVuRm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrbG9vcENvdW50ID4gTE9PUF9MSU1JVCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4oXCJnZXRJbmhlcml0YWJsZVByb3BlcnR5OiBtYXhpbXVtIGxvb3AgY291bnQgZXhjZWVkZWQgZm9yIFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCJcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkaWN0ID0gZGljdC5nZXQoJ1BhcmVudCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgVXRpbCA9IGZ1bmN0aW9uIFV0aWxDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBVdGlsKCkge31cblxuICAgICAgICAgICAgICAgICAgICB2YXIgcmdiQnVmID0gWydyZ2IoJywgMCwgJywnLCAwLCAnLCcsIDAsICcpJ107XG5cbiAgICAgICAgICAgICAgICAgICAgVXRpbC5tYWtlQ3NzUmdiID0gZnVuY3Rpb24gVXRpbF9tYWtlQ3NzUmdiKHIsIGcsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJnYkJ1ZlsxXSA9IHI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZ2JCdWZbM10gPSBnO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmdiQnVmWzVdID0gYjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZ2JCdWYuam9pbignJyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgVXRpbC50cmFuc2Zvcm0gPSBmdW5jdGlvbiBVdGlsX3RyYW5zZm9ybShtMSwgbTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbbTFbMF0gKiBtMlswXSArIG0xWzJdICogbTJbMV0sIG0xWzFdICogbTJbMF0gKyBtMVszXSAqIG0yWzFdLCBtMVswXSAqIG0yWzJdICsgbTFbMl0gKiBtMlszXSwgbTFbMV0gKiBtMlsyXSArIG0xWzNdICogbTJbM10sIG0xWzBdICogbTJbNF0gKyBtMVsyXSAqIG0yWzVdICsgbTFbNF0sIG0xWzFdICogbTJbNF0gKyBtMVszXSAqIG0yWzVdICsgbTFbNV1dO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIFV0aWwuYXBwbHlUcmFuc2Zvcm0gPSBmdW5jdGlvbiBVdGlsX2FwcGx5VHJhbnNmb3JtKHAsIG0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4dCA9IHBbMF0gKiBtWzBdICsgcFsxXSAqIG1bMl0gKyBtWzRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHl0ID0gcFswXSAqIG1bMV0gKyBwWzFdICogbVszXSArIG1bNV07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3h0LCB5dF07XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgVXRpbC5hcHBseUludmVyc2VUcmFuc2Zvcm0gPSBmdW5jdGlvbiBVdGlsX2FwcGx5SW52ZXJzZVRyYW5zZm9ybShwLCBtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IG1bMF0gKiBtWzNdIC0gbVsxXSAqIG1bMl07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHQgPSAocFswXSAqIG1bM10gLSBwWzFdICogbVsyXSArIG1bMl0gKiBtWzVdIC0gbVs0XSAqIG1bM10pIC8gZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5dCA9ICgtcFswXSAqIG1bMV0gKyBwWzFdICogbVswXSArIG1bNF0gKiBtWzFdIC0gbVs1XSAqIG1bMF0pIC8gZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbeHQsIHl0XTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBVdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94ID0gZnVuY3Rpb24gVXRpbF9nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveChyLCBtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcDEgPSBVdGlsLmFwcGx5VHJhbnNmb3JtKHIsIG0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAyID0gVXRpbC5hcHBseVRyYW5zZm9ybShyLnNsaWNlKDIsIDQpLCBtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwMyA9IFV0aWwuYXBwbHlUcmFuc2Zvcm0oW3JbMF0sIHJbM11dLCBtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwNCA9IFV0aWwuYXBwbHlUcmFuc2Zvcm0oW3JbMl0sIHJbMV1dLCBtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbTWF0aC5taW4ocDFbMF0sIHAyWzBdLCBwM1swXSwgcDRbMF0pLCBNYXRoLm1pbihwMVsxXSwgcDJbMV0sIHAzWzFdLCBwNFsxXSksIE1hdGgubWF4KHAxWzBdLCBwMlswXSwgcDNbMF0sIHA0WzBdKSwgTWF0aC5tYXgocDFbMV0sIHAyWzFdLCBwM1sxXSwgcDRbMV0pXTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBVdGlsLmludmVyc2VUcmFuc2Zvcm0gPSBmdW5jdGlvbiBVdGlsX2ludmVyc2VUcmFuc2Zvcm0obSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBtWzBdICogbVszXSAtIG1bMV0gKiBtWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFttWzNdIC8gZCwgLW1bMV0gLyBkLCAtbVsyXSAvIGQsIG1bMF0gLyBkLCAobVsyXSAqIG1bNV0gLSBtWzRdICogbVszXSkgLyBkLCAobVs0XSAqIG1bMV0gLSBtWzVdICogbVswXSkgLyBkXTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBVdGlsLmFwcGx5M2RUcmFuc2Zvcm0gPSBmdW5jdGlvbiBVdGlsX2FwcGx5M2RUcmFuc2Zvcm0obSwgdikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFttWzBdICogdlswXSArIG1bMV0gKiB2WzFdICsgbVsyXSAqIHZbMl0sIG1bM10gKiB2WzBdICsgbVs0XSAqIHZbMV0gKyBtWzVdICogdlsyXSwgbVs2XSAqIHZbMF0gKyBtWzddICogdlsxXSArIG1bOF0gKiB2WzJdXTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBVdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlID0gZnVuY3Rpb24gVXRpbF9zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZShtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNwb3NlID0gW21bMF0sIG1bMl0sIG1bMV0sIG1bM11dO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBtWzBdICogdHJhbnNwb3NlWzBdICsgbVsxXSAqIHRyYW5zcG9zZVsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gbVswXSAqIHRyYW5zcG9zZVsxXSArIG1bMV0gKiB0cmFuc3Bvc2VbM107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IG1bMl0gKiB0cmFuc3Bvc2VbMF0gKyBtWzNdICogdHJhbnNwb3NlWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBtWzJdICogdHJhbnNwb3NlWzFdICsgbVszXSAqIHRyYW5zcG9zZVszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdCA9IChhICsgZCkgLyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlY29uZCA9IE1hdGguc3FydCgoYSArIGQpICogKGEgKyBkKSAtIDQgKiAoYSAqIGQgLSBjICogYikpIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzeCA9IGZpcnN0ICsgc2Vjb25kIHx8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3kgPSBmaXJzdCAtIHNlY29uZCB8fCAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtNYXRoLnNxcnQoc3gpLCBNYXRoLnNxcnQoc3kpXTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBVdGlsLm5vcm1hbGl6ZVJlY3QgPSBmdW5jdGlvbiBVdGlsX25vcm1hbGl6ZVJlY3QocmVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSByZWN0LnNsaWNlKDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjdFswXSA+IHJlY3RbMl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByWzBdID0gcmVjdFsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByWzJdID0gcmVjdFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlY3RbMV0gPiByZWN0WzNdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgclsxXSA9IHJlY3RbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgclszXSA9IHJlY3RbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIFV0aWwuaW50ZXJzZWN0ID0gZnVuY3Rpb24gVXRpbF9pbnRlcnNlY3QocmVjdDEsIHJlY3QyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSAtIGI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcmRlcmVkWCA9IFtyZWN0MVswXSwgcmVjdDFbMl0sIHJlY3QyWzBdLCByZWN0MlsyXV0uc29ydChjb21wYXJlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmVkWSA9IFtyZWN0MVsxXSwgcmVjdDFbM10sIHJlY3QyWzFdLCByZWN0MlszXV0uc29ydChjb21wYXJlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QxID0gVXRpbC5ub3JtYWxpemVSZWN0KHJlY3QxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QyID0gVXRpbC5ub3JtYWxpemVSZWN0KHJlY3QyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9yZGVyZWRYWzBdID09PSByZWN0MVswXSAmJiBvcmRlcmVkWFsxXSA9PT0gcmVjdDJbMF0gfHwgb3JkZXJlZFhbMF0gPT09IHJlY3QyWzBdICYmIG9yZGVyZWRYWzFdID09PSByZWN0MVswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFswXSA9IG9yZGVyZWRYWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFsyXSA9IG9yZGVyZWRYWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmRlcmVkWVswXSA9PT0gcmVjdDFbMV0gJiYgb3JkZXJlZFlbMV0gPT09IHJlY3QyWzFdIHx8IG9yZGVyZWRZWzBdID09PSByZWN0MlsxXSAmJiBvcmRlcmVkWVsxXSA9PT0gcmVjdDFbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbMV0gPSBvcmRlcmVkWVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbM10gPSBvcmRlcmVkWVsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBVdGlsO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuVXRpbCA9IFV0aWw7XG4gICAgICAgICAgICAgICAgdmFyIFJPTUFOX05VTUJFUl9NQVAgPSBbJycsICdDJywgJ0NDJywgJ0NDQycsICdDRCcsICdEJywgJ0RDJywgJ0RDQycsICdEQ0NDJywgJ0NNJywgJycsICdYJywgJ1hYJywgJ1hYWCcsICdYTCcsICdMJywgJ0xYJywgJ0xYWCcsICdMWFhYJywgJ1hDJywgJycsICdJJywgJ0lJJywgJ0lJSScsICdJVicsICdWJywgJ1ZJJywgJ1ZJSScsICdWSUlJJywgJ0lYJ107XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB0b1JvbWFuTnVtZXJhbHMobnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsb3dlckNhc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpICYmIG51bWJlciA+IDAsICdUaGUgbnVtYmVyIHNob3VsZCBiZSBhIHBvc2l0aXZlIGludGVnZXIuJyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3MsXG4gICAgICAgICAgICAgICAgICAgICAgICByb21hbkJ1ZiA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChudW1iZXIgPj0gMTAwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIC09IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICByb21hbkJ1Zi5wdXNoKCdNJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBwb3MgPSBudW1iZXIgLyAxMDAgfCAwO1xuICAgICAgICAgICAgICAgICAgICBudW1iZXIgJT0gMTAwO1xuICAgICAgICAgICAgICAgICAgICByb21hbkJ1Zi5wdXNoKFJPTUFOX05VTUJFUl9NQVBbcG9zXSk7XG4gICAgICAgICAgICAgICAgICAgIHBvcyA9IG51bWJlciAvIDEwIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyICU9IDEwO1xuICAgICAgICAgICAgICAgICAgICByb21hbkJ1Zi5wdXNoKFJPTUFOX05VTUJFUl9NQVBbMTAgKyBwb3NdKTtcbiAgICAgICAgICAgICAgICAgICAgcm9tYW5CdWYucHVzaChST01BTl9OVU1CRVJfTUFQWzIwICsgbnVtYmVyXSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByb21hblN0ciA9IHJvbWFuQnVmLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG93ZXJDYXNlID8gcm9tYW5TdHIudG9Mb3dlckNhc2UoKSA6IHJvbWFuU3RyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBQREZTdHJpbmdUcmFuc2xhdGVUYWJsZSA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAweDJEOCwgMHgyQzcsIDB4MkM2LCAweDJEOSwgMHgyREQsIDB4MkRCLCAweDJEQSwgMHgyREMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4MjAyMiwgMHgyMDIwLCAweDIwMjEsIDB4MjAyNiwgMHgyMDE0LCAweDIwMTMsIDB4MTkyLCAweDIwNDQsIDB4MjAzOSwgMHgyMDNBLCAweDIyMTIsIDB4MjAzMCwgMHgyMDFFLCAweDIwMUMsIDB4MjAxRCwgMHgyMDE4LCAweDIwMTksIDB4MjAxQSwgMHgyMTIyLCAweEZCMDEsIDB4RkIwMiwgMHgxNDEsIDB4MTUyLCAweDE2MCwgMHgxNzgsIDB4MTdELCAweDEzMSwgMHgxNDIsIDB4MTUzLCAweDE2MSwgMHgxN0UsIDAsIDB4MjBBQ107XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBzdHJpbmdUb1BERlN0cmluZyhzdHIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGksXG4gICAgICAgICAgICAgICAgICAgICAgICBuID0gc3RyLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ckJ1ZiA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJbMF0gPT09ICdcXHhGRScgJiYgc3RyWzFdID09PSAnXFx4RkYnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAyOyBpIDwgbjsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShzdHIuY2hhckNvZGVBdChpKSA8PCA4IHwgc3RyLmNoYXJDb2RlQXQoaSArIDEpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSBQREZTdHJpbmdUcmFuc2xhdGVUYWJsZVtzdHIuY2hhckNvZGVBdChpKV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goY29kZSA/IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkgOiBzdHIuY2hhckF0KGkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJCdWYuam9pbignJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gc3RyaW5nVG9VVEY4U3RyaW5nKHN0cikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShzdHIpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB1dGY4U3RyaW5nVG9TdHJpbmcoc3RyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNFbXB0eU9iaihvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNCb29sKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnYm9vbGVhbic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNOdW0odikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdudW1iZXInO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzU3RyaW5nKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnc3RyaW5nJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc0FycmF5QnVmZmVyKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90eXBlb2YodikgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgJiYgdi5ieXRlTGVuZ3RoICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNTcGFjZShjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2ggPT09IDB4MjAgfHwgY2ggPT09IDB4MDkgfHwgY2ggPT09IDB4MEQgfHwgY2ggPT09IDB4MEE7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYXBhYmlsaXR5ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzU2V0dGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2FwYWJpbGl0eSwgJ3NldHRsZWQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNTZXR0bGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eS5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eS5yZXNvbHZlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlamVjdCA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXBhYmlsaXR5O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBjcmVhdGVPYmplY3RVUkwgPSBmdW5jdGlvbiBjcmVhdGVPYmplY3RVUkxDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGlnaXRzID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89JztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdFVSTChkYXRhLCBjb250ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcmNlRGF0YVNjaGVtYSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZm9yY2VEYXRhU2NoZW1hICYmIF91cmxfcG9seWZpbGwuVVJMLmNyZWF0ZU9iamVjdFVSTCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBibG9iID0gbmV3IEJsb2IoW2RhdGFdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGNvbnRlbnRUeXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF91cmxfcG9seWZpbGwuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9ICdkYXRhOicgKyBjb250ZW50VHlwZSArICc7YmFzZTY0LCc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiMSA9IGRhdGFbaV0gJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiMiA9IGRhdGFbaSArIDFdICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjMgPSBkYXRhW2kgKyAyXSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQxID0gYjEgPj4gMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDIgPSAoYjEgJiAzKSA8PCA0IHwgYjIgPj4gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZDMgPSBpICsgMSA8IGlpID8gKGIyICYgMHhGKSA8PCAyIHwgYjMgPj4gNiA6IDY0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkNCA9IGkgKyAyIDwgaWkgPyBiMyAmIDB4M0YgOiA2NDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gZGlnaXRzW2QxXSArIGRpZ2l0c1tkMl0gKyBkaWdpdHNbZDNdICsgZGlnaXRzW2Q0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLmNyZWF0ZU9iamVjdFVSTCA9IGNyZWF0ZU9iamVjdFVSTDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsU2NvcGUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFnbG9iYWxTY29wZS5fZXh0cmFjdGhpZ2hsaWdodHNDb21wYXRpYmlsaXR5Q2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICBnbG9iYWxTY29wZS5fZXh0cmFjdGhpZ2hsaWdodHNDb21wYXRpYmlsaXR5Q2hlY2tlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzTm9kZUpTID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5KTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgaGFzRE9NID0gKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZih3aW5kb3cpKSA9PT0gJ29iamVjdCcgJiYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKGRvY3VtZW50KSkgPT09ICdvYmplY3QnO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja05vZGVCdG9hKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdsb2JhbFNjb3BlLmJ0b2EgfHwgIWlzTm9kZUpTKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbFNjb3BlLmJ0b2EgPSBmdW5jdGlvbiAoY2hhcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oY2hhcnMsICdiaW5hcnknKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja05vZGVBdG9iKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdsb2JhbFNjb3BlLmF0b2IgfHwgIWlzTm9kZUpTKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbFNjb3BlLmF0b2IgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oaW5wdXQsICdiYXNlNjQnKS50b1N0cmluZygnYmluYXJ5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja0NoaWxkTm9kZVJlbW92ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzRE9NKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja0RPTVRva2VuTGlzdEFkZFJlbW92ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzRE9NIHx8IGlzTm9kZUpTKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5jbGFzc0xpc3QuYWRkKCd0ZXN0T25lJywgJ3Rlc3RUd28nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpdi5jbGFzc0xpc3QuY29udGFpbnMoJ3Rlc3RPbmUnKSA9PT0gdHJ1ZSAmJiBkaXYuY2xhc3NMaXN0LmNvbnRhaW5zKCd0ZXN0VHdvJykgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBPcmlnaW5hbERPTVRva2VuTGlzdEFkZCA9IERPTVRva2VuTGlzdC5wcm90b3R5cGUuYWRkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE9yaWdpbmFsRE9NVG9rZW5MaXN0UmVtb3ZlID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZW1vdmU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIERPTVRva2VuTGlzdC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCB0b2tlbnMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vuc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdG9rZW5zLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbX2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmlnaW5hbERPTVRva2VuTGlzdEFkZC5jYWxsKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBET01Ub2tlbkxpc3QucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHRva2VucyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnNbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCB0b2tlbnMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbX2kyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JpZ2luYWxET01Ub2tlbkxpc3RSZW1vdmUuY2FsbCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tET01Ub2tlbkxpc3RUb2dnbGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc0RPTSB8fCBpc05vZGVKUygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXYuY2xhc3NMaXN0LnRvZ2dsZSgndGVzdCcsIDApID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9yY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/ICEhYXJndW1lbnRzWzFdIDogIXRoaXMuY29udGFpbnModG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2ZvcmNlID8gJ2FkZCcgOiAncmVtb3ZlJ10odG9rZW4pLCBmb3JjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrU3RyaW5nU3RhcnRzV2l0aCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTApO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja1N0cmluZ0VuZHNXaXRoKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDApO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja1N0cmluZ0luY2x1ZGVzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDIpO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja0FycmF5SW5jbHVkZXMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQ0KTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tBcnJheUZyb20oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuZnJvbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1MSk7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrT2JqZWN0QXNzaWduKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5hc3NpZ24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzQpO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja01hdGhMb2cyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE1hdGgubG9nMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5sb2cyID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3OSk7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrTnVtYmVySXNOYU4oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIuaXNOYU4gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDgxKTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tOdW1iZXJJc0ludGVnZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyLmlzSW50ZWdlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oODMpO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja1Byb21pc2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsU2NvcGUuUHJvbWlzZSAmJiBnbG9iYWxTY29wZS5Qcm9taXNlLnByb3RvdHlwZSAmJiBnbG9iYWxTY29wZS5Qcm9taXNlLnByb3RvdHlwZS5maW5hbGx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxTY29wZS5Qcm9taXNlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4Nik7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrV2Vha01hcCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbG9iYWxTY29wZS5XZWFrTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxTY29wZS5XZWFrTWFwID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMDYpO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja1dlYWtTZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsU2NvcGUuV2Vha1NldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsU2NvcGUuV2Vha1NldCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTIzKTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tTdHJpbmdDb2RlUG9pbnRBdCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcuY29kZVBvaW50QXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy5jb2RlUG9pbnRBdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTI3KTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tTdHJpbmdGcm9tQ29kZVBvaW50KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFN0cmluZy5mcm9tQ29kZVBvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZnJvbUNvZGVQb2ludCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTI5KTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tTeW1ib2woKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsU2NvcGUuU3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzMSk7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrU3RyaW5nUGFkU3RhcnQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3RyaW5nLnByb3RvdHlwZS5wYWRTdGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMzgpO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja1N0cmluZ1BhZEVuZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcucHJvdG90eXBlLnBhZEVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNDIpO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja09iamVjdFZhbHVlcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QudmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QudmFsdWVzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNDQpO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogOCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT09IE1hdGggPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwuTWF0aCA9PT0gTWF0aCA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT09IE1hdGggPyBzZWxmIDoge307XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDkgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc05vZGVKUygpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0eXBlb2YgcHJvY2VzcyA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKHByb2Nlc3MpKSA9PT0gJ29iamVjdCcgJiYgcHJvY2VzcyArICcnID09PSAnW29iamVjdCBwcm9jZXNzXScgJiYgIXByb2Nlc3MudmVyc2lvbnNbJ253J107XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNCkuU3RyaW5nLnN0YXJ0c1dpdGg7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDExICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyKTtcblxuICAgICAgICAgICAgICAgIHZhciB0b0xlbmd0aCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzApO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMyKTtcblxuICAgICAgICAgICAgICAgIHZhciBTVEFSVFNfV0lUSCA9ICdzdGFydHNXaXRoJztcbiAgICAgICAgICAgICAgICB2YXIgJHN0YXJ0c1dpdGggPSAnJ1tTVEFSVFNfV0lUSF07XG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM5KShTVEFSVFNfV0lUSCksICdTdHJpbmcnLCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0c1dpdGg6IGZ1bmN0aW9uIHN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBTVEFSVFNfV0lUSCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdGhhdC5sZW5ndGgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkc3RhcnRzV2l0aCA/ICRzdGFydHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBpbmRleCkgOiB0aGF0LnNsaWNlKGluZGV4LCBpbmRleCArIHNlYXJjaC5sZW5ndGgpID09PSBzZWFyY2g7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTIgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY29yZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGhpZGUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1KTtcblxuICAgICAgICAgICAgICAgIHZhciByZWRlZmluZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGN0eCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBmdW5jdGlvbiAkZXhwb3J0KHR5cGUsIG5hbWUsIHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0Lkc7XG4gICAgICAgICAgICAgICAgICAgIHZhciBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TO1xuICAgICAgICAgICAgICAgICAgICB2YXIgSVNfUFJPVE8gPSB0eXBlICYgJGV4cG9ydC5QO1xuICAgICAgICAgICAgICAgICAgICB2YXIgSVNfQklORCA9IHR5cGUgJiAkZXhwb3J0LkI7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gfHwgKGdsb2JhbFtuYW1lXSA9IHt9KSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBleHBvcnRzID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBleHBQcm90byA9IGV4cG9ydHNbUFJPVE9UWVBFXSB8fCAoZXhwb3J0c1tQUk9UT1RZUEVdID0ge30pO1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5LCBvd24sIG91dCwgZXhwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoSVNfR0xPQkFMKSBzb3VyY2UgPSBuYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBvdXQsIHR5cGUgJiAkZXhwb3J0LlUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElTX1BST1RPICYmIGV4cFByb3RvW2tleV0gIT0gb3V0KSBleHBQcm90b1trZXldID0gb3V0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGdsb2JhbC5jb3JlID0gY29yZTtcbiAgICAgICAgICAgICAgICAkZXhwb3J0LkYgPSAxO1xuICAgICAgICAgICAgICAgICRleHBvcnQuRyA9IDI7XG4gICAgICAgICAgICAgICAgJGV4cG9ydC5TID0gNDtcbiAgICAgICAgICAgICAgICAkZXhwb3J0LlAgPSA4O1xuICAgICAgICAgICAgICAgICRleHBvcnQuQiA9IDE2O1xuICAgICAgICAgICAgICAgICRleHBvcnQuVyA9IDMyO1xuICAgICAgICAgICAgICAgICRleHBvcnQuVSA9IDY0O1xuICAgICAgICAgICAgICAgICRleHBvcnQuUiA9IDEyODtcbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIF9fZyA9PSAnbnVtYmVyJykgX19nID0gZ2xvYmFsO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb246ICcyLjYuMidcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBkUCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNyZWF0ZURlc2MgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI0KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMCkgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBhbk9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIElFOF9ET01fREVGSU5FID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxOSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9QcmltaXRpdmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIzKTtcblxuICAgICAgICAgICAgICAgIHZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmYgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIwKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgYW5PYmplY3QoTyk7XG4gICAgICAgICAgICAgICAgICAgIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgICAgICAgICAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGlzT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxOCk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQ7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90eXBlb2YoaXQpID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSAhX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMCkgJiYgIV9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjEpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIyKSgnZGl2JyksICdhJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLmEgIT0gNztcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMjAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9ICFfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIxKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLmEgIT0gNztcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMjEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFleGVjKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMjIgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4KTtcblxuICAgICAgICAgICAgICAgIHZhciBkb2N1bWVudCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMpLmRvY3VtZW50O1xuXG4gICAgICAgICAgICAgICAgdmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAyMyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBpc09iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTgpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBpdDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZuLCB2YWw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMjQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAyNSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBnbG9iYWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzKTtcblxuICAgICAgICAgICAgICAgIHZhciBoaWRlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaGFzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgU1JDID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNykoJ3NyYycpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG4gICAgICAgICAgICAgICAgdmFyICR0b1N0cmluZyA9IEZ1bmN0aW9uW1RPX1NUUklOR107XG4gICAgICAgICAgICAgICAgdmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsLCBzYWZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIHZhbCA9PSAnZnVuY3Rpb24nO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgJ25hbWUnKSB8fCBoaWRlKHZhbCwgJ25hbWUnLCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoT1trZXldID09PSB2YWwpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsIFNSQykgfHwgaGlkZSh2YWwsIFNSQywgT1trZXldID8gJycgKyBPW2tleV0gOiBUUEwuam9pbihTdHJpbmcoa2V5KSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9ba2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIE9ba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKE9ba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgT1trZXldID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZShPLCBrZXksIHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KShGdW5jdGlvbi5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMjYgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMjcgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaWQgPSAwO1xuICAgICAgICAgICAgICAgIHZhciBweCA9IE1hdGgucmFuZG9tKCk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAyOCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBhRnVuY3Rpb24gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI5KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgYUZ1bmN0aW9uKGZuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDI5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQ7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMzAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgdG9JbnRlZ2VyID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgbWluID0gTWF0aC5taW47XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAzMSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjZWlsID0gTWF0aC5jZWlsO1xuICAgICAgICAgICAgICAgIHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAzMiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBpc1JlZ0V4cCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM4KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMzMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4KTtcblxuICAgICAgICAgICAgICAgIHZhciBjb2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM0KTtcblxuICAgICAgICAgICAgICAgIHZhciBNQVRDSCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzUpKCdtYXRjaCcpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzUmVnRXhwO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY29mKGl0KSA9PSAnUmVnRXhwJyk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMzQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMzUgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM2KSgnd2tzJyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdWlkID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX1N5bWJvbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMpLlN5bWJvbDtcblxuICAgICAgICAgICAgICAgIHZhciBVU0VfU1lNQk9MID0gdHlwZW9mIF9TeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9IFVTRV9TWU1CT0wgJiYgX1N5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IF9TeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMzYgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgY29yZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdsb2JhbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xuICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcbiAgICAgICAgICAgICAgICAobW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbiAgICAgICAgICAgICAgICB9KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb246IGNvcmUudmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgbW9kZTogX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzNykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgICAgICAgICAgICAgICAgICAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMzcgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAzOCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDM5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIE1BVENIID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzNSkoJ21hdGNoJyk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlID0gLy4vO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnLy4vJ1tLRVldKHJlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIScvLi8nW0tFWV0ocmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZikge31cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDQwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0MSk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQpLlN0cmluZy5lbmRzV2l0aDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNDEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvTGVuZ3RoID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEVORFNfV0lUSCA9ICdlbmRzV2l0aCc7XG4gICAgICAgICAgICAgICAgdmFyICRlbmRzV2l0aCA9ICcnW0VORFNfV0lUSF07XG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM5KShFTkRTX1dJVEgpLCAnU3RyaW5nJywge1xuICAgICAgICAgICAgICAgICAgICBlbmRzV2l0aDogZnVuY3Rpb24gZW5kc1dpdGgoc2VhcmNoU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBFTkRTX1dJVEgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZFBvc2l0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhhdC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGVuZFBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBsZW4gOiBNYXRoLm1pbih0b0xlbmd0aChlbmRQb3NpdGlvbiksIGxlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGVuZHNXaXRoID8gJGVuZHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBlbmQpIDogdGhhdC5zbGljZShlbmQgLSBzZWFyY2gubGVuZ3RoLCBlbmQpID09PSBzZWFyY2g7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNDIgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQzKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNCkuU3RyaW5nLmluY2x1ZGVzO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA0MyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIElOQ0xVREVTID0gJ2luY2x1ZGVzJztcbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzkpKElOQ0xVREVTKSwgJ1N0cmluZycsIHtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhfmNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBJTkNMVURFUykuaW5kZXhPZihzZWFyY2hTdHJpbmcsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA0NCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDUpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0KS5BcnJheS5pbmNsdWRlcztcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNDUgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTIpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRpbmNsdWRlcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDYpKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGluY2x1ZGVzKHRoaXMsIGVsLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTApKCdpbmNsdWRlcycpO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA0NiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciB0b0lPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQ3KTtcblxuICAgICAgICAgICAgICAgIHZhciB0b0xlbmd0aCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzApO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDkpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGZvciAoOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNDcgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgSU9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM4KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA0OCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjb2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM0KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDQ5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIHRvSW50ZWdlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIG1heCA9IE1hdGgubWF4O1xuICAgICAgICAgICAgICAgIHZhciBtaW4gPSBNYXRoLm1pbjtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA1MCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBVTlNDT1BBQkxFUyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzUpKCd1bnNjb3BhYmxlcycpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNSkoQXJyYXlQcm90bywgVU5TQ09QQUJMRVMsIHt9KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBBcnJheVByb3RvW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA1MSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTIpO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2Nyk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQpLkFycmF5LmZyb207XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDUyICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRhdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTMpKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1NCkoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pID0gMDtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBPID0gdGhpcy5fdDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5faTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvaW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gTy5sZW5ndGgpIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNTMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgdG9JbnRlZ2VyID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZGVmaW5lZCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzgpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gdG9JbnRlZ2VyKHBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEsIGI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IDAgfHwgaSA+PSBsKSByZXR1cm4gVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmYgPyBUT19TVFJJTkcgPyBzLmNoYXJBdChpKSA6IGEgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNTQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgTElCUkFSWSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzcpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyKTtcblxuICAgICAgICAgICAgICAgIHZhciByZWRlZmluZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGhpZGUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1KTtcblxuICAgICAgICAgICAgICAgIHZhciBJdGVyYXRvcnMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU1KTtcblxuICAgICAgICAgICAgICAgIHZhciAkaXRlckNyZWF0ZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNldFRvU3RyaW5nVGFnID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2NCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ2V0UHJvdG90eXBlT2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDY1KTtcblxuICAgICAgICAgICAgICAgIHZhciBJVEVSQVRPUiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzUpKCdpdGVyYXRvcicpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpO1xuICAgICAgICAgICAgICAgIHZhciBGRl9JVEVSQVRPUiA9ICdAQGl0ZXJhdG9yJztcbiAgICAgICAgICAgICAgICB2YXIgS0VZUyA9ICdrZXlzJztcbiAgICAgICAgICAgICAgICB2YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uIHJldHVyblRoaXMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiBnZXRNZXRob2Qoa2luZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKSByZXR1cm4gcHJvdG9ba2luZF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS0VZUzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBWQUxVRVM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICAgICAgICAgICAgICAgICAgICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICAgICAgICAgICAgICAgICAgICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gICAgICAgICAgICAgICAgICAgIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICgkYW55TmF0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKCRhbnlOYXRpdmUuY2FsbChuZXcgQmFzZSgpKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKERFRl9WQUxVRVMgJiYgJG5hdGl2ZSAmJiAkbmF0aXZlLm5hbWUgIT09IFZBTFVFUykge1xuICAgICAgICAgICAgICAgICAgICAgICAgVkFMVUVTX0JVRyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRlKHByb3RvLCBJVEVSQVRPUiwgJGRlZmF1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3JzW05BTUVdID0gJGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yc1tUQUddID0gcmV0dXJuVGhpcztcblxuICAgICAgICAgICAgICAgICAgICBpZiAoREVGQVVMVCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IERFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXM6IElTX1NFVCA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKEtFWVMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEZPUkNFRCkgZm9yIChrZXkgaW4gbWV0aG9kcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiBwcm90bykpIHJlZGVmaW5lKHByb3RvLCBrZXksIG1ldGhvZHNba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZHM7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNTUgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA1NiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjcmVhdGUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU3KTtcblxuICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgc2V0VG9TdHJpbmdUYWcgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDY0KTtcblxuICAgICAgICAgICAgICAgIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNSkoSXRlcmF0b3JQcm90b3R5cGUsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzUpKCdpdGVyYXRvcicpLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA1NyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBhbk9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRQcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGVudW1CdWdLZXlzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2Mik7XG5cbiAgICAgICAgICAgICAgICB2YXIgSUVfUFJPVE8gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYxKSgnSUVfUFJPVE8nKTtcblxuICAgICAgICAgICAgICAgIHZhciBFbXB0eSA9IGZ1bmN0aW9uIEVtcHR5KCkge307XG5cbiAgICAgICAgICAgICAgICB2YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2NyZWF0ZURpY3QgPSBmdW5jdGlvbiBjcmVhdGVEaWN0KCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaWZyYW1lID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMikoJ2lmcmFtZScpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbHQgPSAnPCc7XG4gICAgICAgICAgICAgICAgICAgIHZhciBndCA9ICc+JztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlmcmFtZURvY3VtZW50O1xuICAgICAgICAgICAgICAgICAgICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYzKS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonO1xuICAgICAgICAgICAgICAgICAgICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICAgICAgICAgICAgICAgICAgICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgICAgICAgICAgICAgICAgICAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZURpY3QgPSBpZnJhbWVEb2N1bWVudC5GO1xuXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBfY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfY3JlYXRlRGljdCgpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoTyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBFbXB0eVtQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgcmVzdWx0ID0gX2NyZWF0ZURpY3QoKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNTggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgZFAgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2KTtcblxuICAgICAgICAgICAgICAgIHZhciBhbk9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdldEtleXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU5KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICBhbk9iamVjdChPKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleXMgPSBnZXRLZXlzKFByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFA7XG5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gTztcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA1OSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAka2V5cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjApO1xuXG4gICAgICAgICAgICAgICAgdmFyIGVudW1CdWdLZXlzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2Mik7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDYwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGhhcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvSU9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFycmF5SW5kZXhPZiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDYpKGZhbHNlKTtcblxuICAgICAgICAgICAgICAgIHZhciBJRV9QUk9UTyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjEpKCdJRV9QUk9UTycpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBPKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB+YXJyYXlJbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA2MSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBzaGFyZWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM2KSgna2V5cycpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHVpZCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjcpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNjIgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9ICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnLnNwbGl0KCcsJyk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDYzICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGRvY3VtZW50ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMykuZG9jdW1lbnQ7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNjQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgZGVmID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNikuZjtcblxuICAgICAgICAgICAgICAgIHZhciBoYXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI2KTtcblxuICAgICAgICAgICAgICAgIHZhciBUQUcgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM1KSgndG9TdHJpbmdUYWcnKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGFnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDY1ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGhhcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2Nik7XG5cbiAgICAgICAgICAgICAgICB2YXIgSUVfUFJPVE8gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYxKSgnSUVfUFJPVE8nKTtcblxuICAgICAgICAgICAgICAgIHZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoTykge1xuICAgICAgICAgICAgICAgICAgICBPID0gdG9PYmplY3QoTyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXMoTywgSUVfUFJPVE8pKSByZXR1cm4gT1tJRV9QUk9UT107XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG8gOiBudWxsO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDY2ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM4KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDY3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGN0eCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjgpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyKTtcblxuICAgICAgICAgICAgICAgIHZhciB0b09iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNhbGwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDY4KTtcblxuICAgICAgICAgICAgICAgIHZhciBpc0FycmF5SXRlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvTGVuZ3RoID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY3JlYXRlUHJvcGVydHkgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcwKTtcblxuICAgICAgICAgICAgICAgIHZhciBnZXRJdGVyRm4gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcxKTtcblxuICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIV9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzMpKGZ1bmN0aW9uIChpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIEFycmF5LmZyb20oaXRlcik7XG4gICAgICAgICAgICAgICAgfSksICdBcnJheScsIHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbTogZnVuY3Rpb24gZnJvbShhcnJheUxpa2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVyRm4gPSBnZXRJdGVyRm4oTyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcHBpbmcpIG1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyRm4gIT0gdW5kZWZpbmVkICYmICEoQyA9PSBBcnJheSAmJiBpc0FycmF5SXRlcihpdGVyRm4pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgcmVzdWx0ID0gbmV3IEMoKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBjYWxsKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDY4ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGFuT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNyk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXQuY2FsbChpdGVyYXRvcikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDY5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIEl0ZXJhdG9ycyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIElURVJBVE9SID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzNSkoJ2l0ZXJhdG9yJyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNzAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGRlZmluZVByb3BlcnR5ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgY3JlYXRlRGVzYyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjQpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IGluIG9iamVjdCkgJGRlZmluZVByb3BlcnR5LmYob2JqZWN0LCBpbmRleCwgY3JlYXRlRGVzYygwLCB2YWx1ZSkpO2Vsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDcxICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGNsYXNzb2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcyKTtcblxuICAgICAgICAgICAgICAgIHZhciBJVEVSQVRPUiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzUpKCdpdGVyYXRvcicpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEl0ZXJhdG9ycyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTUpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0KS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gaXRbSVRFUkFUT1JdIHx8IGl0WydAQGl0ZXJhdG9yJ10gfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA3MiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjb2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM0KTtcblxuICAgICAgICAgICAgICAgIHZhciBUQUcgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM1KSgndG9TdHJpbmdUYWcnKTtcblxuICAgICAgICAgICAgICAgIHZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbiAgICAgICAgICAgICAgICB2YXIgdHJ5R2V0ID0gZnVuY3Rpb24gdHJ5R2V0KGl0LCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdFtrZXldO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgTywgVCwgQjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFQgOiBBUkcgPyBjb2YoTykgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNzMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgSVRFUkFUT1IgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM1KSgnaXRlcmF0b3InKTtcblxuICAgICAgICAgICAgICAgIHZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByaXRlciA9IFs3XVtJVEVSQVRPUl0oKTtcblxuICAgICAgICAgICAgICAgICAgICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBTQUZFX0NMT1NJTkcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IDI7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBza2lwQ2xvc2luZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyciA9IFs3XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogc2FmZSA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMoYXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2FmZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA3NCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzUpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0KS5PYmplY3QuYXNzaWduO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA3NSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMik7XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiwgJ09iamVjdCcsIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduOiBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDc2KVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA3NiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBnZXRLZXlzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1OSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ09QUyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHBJRSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2Nik7XG5cbiAgICAgICAgICAgICAgICB2YXIgSU9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDgpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMSkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgQSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgQiA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgUyA9IFN5bWJvbCgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gICAgICAgICAgICAgICAgICAgIEFbU10gPSA3O1xuICAgICAgICAgICAgICAgICAgICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBCW2tdID0gaztcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkYXNzaWduKHt9LCBBKVtTXSAhPSA3IHx8IE9iamVjdC5rZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPSBLO1xuICAgICAgICAgICAgICAgIH0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzRW51bSA9IHBJRS5mO1xuXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBTID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleXMgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGogPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNFbnVtLmNhbGwoUywga2V5ID0ga2V5c1tqKytdKSkgVFtrZXldID0gU1trZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFQ7XG4gICAgICAgICAgICAgICAgfSA6ICRhc3NpZ247XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDc3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNzggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNzkgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDgwKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNCkuTWF0aC5sb2cyO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA4MCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMik7XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gICAgICAgICAgICAgICAgICAgIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogODEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDgyKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNCkuTnVtYmVyLmlzTmFOO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA4MiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMik7XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgICAgICAgICAgICAgICAgICAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciAhPSBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogODMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDg0KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNCkuTnVtYmVyLmlzSW50ZWdlcjtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogODQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTIpO1xuXG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gICAgICAgICAgICAgICAgICAgIGlzSW50ZWdlcjogX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4NSlcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogODUgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4KTtcblxuICAgICAgICAgICAgICAgIHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzSW50ZWdlcihpdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWlzT2JqZWN0KGl0KSAmJiBpc0Zpbml0ZShpdCkgJiYgZmxvb3IoaXQpID09PSBpdDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA4NiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oODcpO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1Mik7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDg4KTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOTEpO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMDQpO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMDUpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0KS5Qcm9taXNlO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA4NyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjbGFzc29mID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3Mik7XG5cbiAgICAgICAgICAgICAgICB2YXIgdGVzdCA9IHt9O1xuICAgICAgICAgICAgICAgIHRlc3RbX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzNSkoJ3RvU3RyaW5nVGFnJyldID0gJ3onO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRlc3QgKyAnJyAhPSAnW29iamVjdCB6XScpIHtcbiAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNSkoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG4gICAgICAgICAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogODggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGl0ZXJhdG9ycyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oODkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdldEtleXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU5KTtcblxuICAgICAgICAgICAgICAgIHZhciByZWRlZmluZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdsb2JhbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGhpZGUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1KTtcblxuICAgICAgICAgICAgICAgIHZhciBJdGVyYXRvcnMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU1KTtcblxuICAgICAgICAgICAgICAgIHZhciB3a3MgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM1KTtcblxuICAgICAgICAgICAgICAgIHZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbiAgICAgICAgICAgICAgICB2YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbiAgICAgICAgICAgICAgICB2YXIgQXJyYXlWYWx1ZXMgPSBJdGVyYXRvcnMuQXJyYXk7XG4gICAgICAgICAgICAgICAgdmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgQ1NTUnVsZUxpc3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIENTU1N0eWxlRGVjbGFyYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBDU1NWYWx1ZUxpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBDbGllbnRSZWN0TGlzdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIERPTVJlY3RMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgRE9NU3RyaW5nTGlzdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBGaWxlTGlzdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIEhUTUxBbGxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgSFRNTENvbGxlY3Rpb246IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBIVE1MRm9ybUVsZW1lbnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBIVE1MU2VsZWN0RWxlbWVudDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIE1lZGlhTGlzdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgTWltZVR5cGVBcnJheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIE5hbWVkTm9kZU1hcDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIE5vZGVMaXN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBQYWludFJlcXVlc3RMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgUGx1Z2luOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgUGx1Z2luQXJyYXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBTVkdMZW5ndGhMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgU1ZHTnVtYmVyTGlzdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIFNWR1BhdGhTZWdMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgU1ZHUG9pbnRMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgU1ZHU3RyaW5nTGlzdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIFNWR1RyYW5zZm9ybUxpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBTb3VyY2VCdWZmZXJMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgU3R5bGVTaGVldExpc3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgVG91Y2hMaXN0OiBmYWxzZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBjb2xsZWN0aW9ucyA9IGdldEtleXMoRE9NSXRlcmFibGVzKSwgaSA9IDA7IGkgPCBjb2xsZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgTkFNRSA9IGNvbGxlY3Rpb25zW2ldO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZXhwbGljaXQgPSBET01JdGVyYWJsZXNbTkFNRV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW05BTUVdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcHJvdG8gPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm90bykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3RvW1RPX1NUUklOR19UQUddKSBoaWRlKHByb3RvLCBUT19TVFJJTkdfVEFHLCBOQU1FKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yc1tOQU1FXSA9IEFycmF5VmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm90b1trZXldKSByZWRlZmluZShwcm90bywga2V5LCAkaXRlcmF0b3JzW2tleV0sIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA4OSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBhZGRUb1Vuc2NvcGFibGVzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1MCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgc3RlcCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOTApO1xuXG4gICAgICAgICAgICAgICAgdmFyIEl0ZXJhdG9ycyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvSU9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDcpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU0KShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fayA9IGtpbmQ7XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgTyA9IHRoaXMuX3Q7XG4gICAgICAgICAgICAgICAgICAgIHZhciBraW5kID0gdGhpcy5faztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghTyB8fCBpbmRleCA+PSBPLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGVwKDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGVwKDAsIFtpbmRleCwgT1tpbmRleF1dKTtcbiAgICAgICAgICAgICAgICB9LCAndmFsdWVzJyk7XG4gICAgICAgICAgICAgICAgSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcbiAgICAgICAgICAgICAgICBhZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG4gICAgICAgICAgICAgICAgYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG4gICAgICAgICAgICAgICAgYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA5MCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRvbmUsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lOiAhIWRvbmVcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA5MSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBMSUJSQVJZID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzNyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY3R4ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY2xhc3NvZiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzIpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyKTtcblxuICAgICAgICAgICAgICAgIHZhciBpc09iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFGdW5jdGlvbiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFuSW5zdGFuY2UgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkyKTtcblxuICAgICAgICAgICAgICAgIHZhciBmb3JPZiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOTMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOTQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDk1KS5zZXQ7XG5cbiAgICAgICAgICAgICAgICB2YXIgbWljcm90YXNrID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5NykoKTtcblxuICAgICAgICAgICAgICAgIHZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOTgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHBlcmZvcm0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDk5KTtcblxuICAgICAgICAgICAgICAgIHZhciB1c2VyQWdlbnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwMCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwMSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbiAgICAgICAgICAgICAgICB2YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbiAgICAgICAgICAgICAgICB2YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xuICAgICAgICAgICAgICAgIHZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucztcbiAgICAgICAgICAgICAgICB2YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbiAgICAgICAgICAgICAgICB2YXIgJFByb21pc2UgPSBnbG9iYWxbUFJPTUlTRV07XG4gICAgICAgICAgICAgICAgdmFyIGlzTm9kZSA9IGNsYXNzb2YocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG4gICAgICAgICAgICAgICAgdmFyIGVtcHR5ID0gZnVuY3Rpb24gZW1wdHkoKSB7fTtcblxuICAgICAgICAgICAgICAgIHZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbiAgICAgICAgICAgICAgICB2YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xuICAgICAgICAgICAgICAgIHZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9ICRQcm9taXNlLnJlc29sdmUoMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW19fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzUpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjKGVtcHR5LCBlbXB0eSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpICYmIHByb21pc2UudGhlbihlbXB0eSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZSAmJiB2OC5pbmRleE9mKCc2LjYnKSAhPT0gMCAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIHZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gaXNUaGVuYWJsZShpdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGhlbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiB0eXBlb2YgKHRoZW4gPSBpdC50aGVuKSA9PSAnZnVuY3Rpb24nID8gdGhlbiA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgbm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KHByb21pc2UsIGlzUmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UuX24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICAgICAgICAgICAgICAgICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvayA9IHByb21pc2UuX3MgPT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJ1biA9IGZ1bmN0aW9uIHJ1bihyZWFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UuX2ggPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7ZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbWFpbikgZG9tYWluLmVudGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9tYWluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbi5leGl0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjaGFpbi5sZW5ndGggPiBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuKGNoYWluW2krK10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLl9jID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZWplY3QgJiYgIXByb21pc2UuX2gpIG9uVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gb25VbmhhbmRsZWQocHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCwgaGFuZGxlciwgY29uc29sZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlOiBwcm9taXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjogdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UuX2ggPSBpc05vZGUgfHwgaXNVbmhhbmRsZWQocHJvbWlzZSkgPyAyIDogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmhhbmRsZWQgJiYgcmVzdWx0LmUpIHRocm93IHJlc3VsdC52O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gaXNVbmhhbmRsZWQocHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZS5faCAhPT0gMSAmJiAocHJvbWlzZS5fYSB8fCBwcm9taXNlLl9jKS5sZW5ndGggPT09IDA7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnJlamVjdGlvbmhhbmRsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZTogcHJvbWlzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOiBwcm9taXNlLl92XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgJHJlamVjdCA9IGZ1bmN0aW9uICRyZWplY3QodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlLl9zID0gMjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9taXNlLl9hKSBwcm9taXNlLl9hID0gcHJvbWlzZS5fYy5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICBub3RpZnkocHJvbWlzZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICRyZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRoZW47XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9taXNlLl9kKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UuX2QgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHRocm93IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdzogcHJvbWlzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuLmNhbGwodmFsdWUsIGN0eCgkcmVzb2x2ZSwgd3JhcHBlciwgMSksIGN0eCgkcmVqZWN0LCB3cmFwcGVyLCAxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWplY3QuY2FsbCh3cmFwcGVyLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLl92ID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5KHByb21pc2UsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJHJlamVjdC5jYWxsKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdzogcHJvbWlzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmICghVVNFX05BVElWRSkge1xuICAgICAgICAgICAgICAgICAgICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuSW5zdGFuY2UodGhpcywgJFByb21pc2UsIFBST01JU0UsICdfaCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLmNhbGwodGhpcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0b3IoY3R4KCRyZXNvbHZlLCB0aGlzLCAxKSwgY3R4KCRyZWplY3QsIHRoaXMsIDEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWplY3QuY2FsbCh0aGlzLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIEludGVybmFsLnByb3RvdHlwZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTAyKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJFByb21pc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFjdGlvbi5vayA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhY3Rpb24uZG9tYWluID0gaXNOb2RlID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jLnB1c2gocmVhY3Rpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2EpIHRoaXMuX2EucHVzaChyZWFjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3MpIG5vdGlmeSh0aGlzLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2NhdGNoJzogZnVuY3Rpb24gX2NhdGNoKG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gT3duUHJvbWlzZUNhcGFiaWxpdHkoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlamVjdCA9IGN0eCgkcmVqZWN0LCBwcm9taXNlLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQyA9PT0gJFByb21pc2UgfHwgQyA9PT0gV3JhcHBlciA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKSA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7XG4gICAgICAgICAgICAgICAgICAgIFByb21pc2U6ICRQcm9taXNlXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDY0KSgkUHJvbWlzZSwgUFJPTUlTRSk7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwMykoUFJPTUlTRSk7XG5cbiAgICAgICAgICAgICAgICBXcmFwcGVyID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNClbUFJPTUlTRV07XG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgUFJPTUlTRSwge1xuICAgICAgICAgICAgICAgICAgICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAkJHJlamVjdChyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShMSUJSQVJZICYmIHRoaXMgPT09IFdyYXBwZXIgPyAkUHJvbWlzZSA6IHRoaXMsIHgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3MykoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgJFByb21pc2UuYWxsKGl0ZXIpWydjYXRjaCddKGVtcHR5KTtcbiAgICAgICAgICAgICAgICB9KSksIFBST01JU0UsIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBDID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEMgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGNhcGFiaWxpdHkucmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA5MiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgZm9yYmlkZGVuRmllbGQgIT09IHVuZGVmaW5lZCAmJiBmb3JiaWRkZW5GaWVsZCBpbiBpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA5MyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjdHggPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI4KTtcblxuICAgICAgICAgICAgICAgIHZhciBjYWxsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2OCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNBcnJheUl0ZXIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDY5KTtcblxuICAgICAgICAgICAgICAgIHZhciBhbk9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvTGVuZ3RoID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ2V0SXRlckZuID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3MSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgQlJFQUsgPSB7fTtcbiAgICAgICAgICAgICAgICB2YXIgUkVUVVJOID0ge307XG5cbiAgICAgICAgICAgICAgICB2YXIgX2V4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQsIElURVJBVE9SKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpdGVyRm4gPSBJVEVSQVRPUiA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgICAgICAgICAgICAgICAgfSA6IGdldEl0ZXJGbihpdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmID0gY3R4KGZuLCB0aGF0LCBlbnRyaWVzID8gMiA6IDEpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoLCBzdGVwLCBpdGVyYXRvciwgcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXRlcmFibGUgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXlJdGVyKGl0ZXJGbikpIGZvciAobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBfZXhwb3J0cy5CUkVBSyA9IEJSRUFLO1xuICAgICAgICAgICAgICAgIF9leHBvcnRzLlJFVFVSTiA9IFJFVFVSTjtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogOTQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgYW5PYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE3KTtcblxuICAgICAgICAgICAgICAgIHZhciBhRnVuY3Rpb24gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI5KTtcblxuICAgICAgICAgICAgICAgIHZhciBTUEVDSUVTID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzNSkoJ3NwZWNpZXMnKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIEQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gRCA6IGFGdW5jdGlvbihTKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA5NSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjdHggPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI4KTtcblxuICAgICAgICAgICAgICAgIHZhciBpbnZva2UgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDk2KTtcblxuICAgICAgICAgICAgICAgIHZhciBodG1sID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2Myk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY2VsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xuICAgICAgICAgICAgICAgIHZhciBzZXRUYXNrID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbiAgICAgICAgICAgICAgICB2YXIgY2xlYXJUYXNrID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xuICAgICAgICAgICAgICAgIHZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbiAgICAgICAgICAgICAgICB2YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG4gICAgICAgICAgICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgICAgIHZhciBxdWV1ZSA9IHt9O1xuICAgICAgICAgICAgICAgIHZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbiAgICAgICAgICAgICAgICB2YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG5cbiAgICAgICAgICAgICAgICB2YXIgcnVuID0gZnVuY3Rpb24gcnVuKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSArdGhpcztcblxuICAgICAgICAgICAgICAgICAgICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiBsaXN0ZW5lcihldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBydW4uY2FsbChldmVudC5kYXRhKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZlcihjb3VudGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3VudGVyO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGFzayA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM0KShwcm9jZXNzKSA9PSAncHJvY2VzcycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVyID0gZnVuY3Rpb24gZGVmZXIoaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXIgPSBmdW5jdGlvbiBkZWZlcihpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgdHlwZW9mIHBvc3RNZXNzYWdlID09ICdmdW5jdGlvbicgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZlciA9IGZ1bmN0aW9uIGRlZmVyKGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNlbCgnc2NyaXB0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVyID0gZnVuY3Rpb24gZGVmZXIoaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVyID0gZnVuY3Rpb24gZGVmZXIoaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHNldDogc2V0VGFzayxcbiAgICAgICAgICAgICAgICAgICAgY2xlYXI6IGNsZWFyVGFza1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDk2ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIGFyZ3MsIHRoYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW4gPyBmbigpIDogZm4uY2FsbCh0aGF0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1biA/IGZuKGFyZ3NbMF0pIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0pIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA5NyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBnbG9iYWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzKTtcblxuICAgICAgICAgICAgICAgIHZhciBtYWNyb3Rhc2sgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDk1KS5zZXQ7XG5cbiAgICAgICAgICAgICAgICB2YXIgT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbiAgICAgICAgICAgICAgICB2YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xuICAgICAgICAgICAgICAgIHZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG4gICAgICAgICAgICAgICAgdmFyIGlzTm9kZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzQpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZCwgbGFzdCwgbm90aWZ5O1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBmbHVzaCA9IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudCwgZm47XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBoZWFkLmZuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO2Vsc2UgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKE9ic2VydmVyICYmICEoZ2xvYmFsLm5hdmlnYXRvciAmJiBnbG9iYWwubmF2aWdhdG9yLnN0YW5kYWxvbmUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9nZ2xlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm46IGZuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0KSBsYXN0Lm5leHQgPSB0YXNrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhlYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkID0gdGFzaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IHRhc2s7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogOTggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgYUZ1bmN0aW9uID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyOSk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXNvbHZlLCByZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogOTkgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY6IGV4ZWMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY6IGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMDAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgbmF2aWdhdG9yID0gZ2xvYmFsLm5hdmlnYXRvcjtcbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMDEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgYW5PYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE3KTtcblxuICAgICAgICAgICAgICAgIHZhciBpc09iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5OCk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gICAgICAgICAgICAgICAgICAgIGFuT2JqZWN0KEMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh4KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTAyICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIHJlZGVmaW5lID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNSk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgc2FmZSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIHNhZmUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMDMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZFAgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2KTtcblxuICAgICAgICAgICAgICAgIHZhciBERVNDUklQVE9SUyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjApO1xuXG4gICAgICAgICAgICAgICAgdmFyIFNQRUNJRVMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM1KSgnc3BlY2llcycpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBDID0gZ2xvYmFsW0tFWV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMDQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNvcmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0KTtcblxuICAgICAgICAgICAgICAgIHZhciBnbG9iYWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzKTtcblxuICAgICAgICAgICAgICAgIHZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDk0KTtcblxuICAgICAgICAgICAgICAgIHZhciBwcm9taXNlUmVzb2x2ZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTAxKTtcblxuICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnUHJvbWlzZScsIHtcbiAgICAgICAgICAgICAgICAgICAgJ2ZpbmFsbHknOiBmdW5jdGlvbiBfZmluYWxseShvbkZpbmFsbHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGNvcmUuUHJvbWlzZSB8fCBnbG9iYWwuUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRoZW4oaXNGdW5jdGlvbiA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IDogb25GaW5hbGx5LCBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSA6IG9uRmluYWxseSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTA1ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyKTtcblxuICAgICAgICAgICAgICAgIHZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOTgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHBlcmZvcm0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDk5KTtcblxuICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5TLCAnUHJvbWlzZScsIHtcbiAgICAgICAgICAgICAgICAgICAgJ3RyeSc6IGZ1bmN0aW9uIF90cnkoY2FsbGJhY2tmbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGNhbGxiYWNrZm4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5lID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTA2ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4Nyk7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDg4KTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTA3KTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTE5KTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTIxKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNCkuV2Vha01hcDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTA3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGVhY2ggPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwOCkoMCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVkZWZpbmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI1KTtcblxuICAgICAgICAgICAgICAgIHZhciBtZXRhID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMTIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFzc2lnbiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHdlYWsgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4KTtcblxuICAgICAgICAgICAgICAgIHZhciBmYWlscyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHZhbGlkYXRlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMTQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFdFQUtfTUFQID0gJ1dlYWtNYXAnO1xuICAgICAgICAgICAgICAgIHZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xuICAgICAgICAgICAgICAgIHZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xuICAgICAgICAgICAgICAgIHZhciB1bmNhdWdodEZyb3plblN0b3JlID0gd2Vhay51ZnN0b3JlO1xuICAgICAgICAgICAgICAgIHZhciB0bXAgPSB7fTtcbiAgICAgICAgICAgICAgICB2YXIgSW50ZXJuYWxNYXA7XG5cbiAgICAgICAgICAgICAgICB2YXIgd3JhcHBlciA9IGZ1bmN0aW9uIHdyYXBwZXIoZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBtZXRob2RzID0ge1xuICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIFdFQUtfTUFQKSkuZ2V0KGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgJFdlYWtNYXAgPSBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTE1KShXRUFLX01BUCwgd3JhcHBlciwgbWV0aG9kcywgd2VhaywgdHJ1ZSwgdHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3ICRXZWFrTWFwKCkuc2V0KChPYmplY3QuZnJlZXplIHx8IE9iamVjdCkodG1wKSwgNykuZ2V0KHRtcCkgIT0gNztcbiAgICAgICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbE1hcCA9IHdlYWsuZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgV0VBS19NQVApO1xuICAgICAgICAgICAgICAgICAgICBhc3NpZ24oSW50ZXJuYWxNYXAucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgICAgICAgICAgICAgICAgICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZWFjaChbJ2RlbGV0ZScsICdoYXMnLCAnZ2V0JywgJ3NldCddLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWV0aG9kID0gcHJvdG9ba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGVmaW5lKHByb3RvLCBrZXksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2Zba2V5XShhLCBiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5ID09ICdzZXQnID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWV0aG9kLmNhbGwodGhpcywgYSwgYik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMDggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgY3R4ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSU9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2Nik7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9MZW5ndGggPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMwKTtcblxuICAgICAgICAgICAgICAgIHZhciBhc2MgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwOSk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gICAgICAgICAgICAgICAgICAgIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICAgICAgICAgICAgICAgICAgICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKHNlbGYubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwsIHJlcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gc2VsZltpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJU19NQVApIHJlc3VsdFtpbmRleF0gPSByZXM7ZWxzZSBpZiAocmVzKSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKElTX0VWRVJZKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTA5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTEwKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsLCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsKSkobGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMTAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4KTtcblxuICAgICAgICAgICAgICAgIHZhciBpc0FycmF5ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMTEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFNQRUNJRVMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM1KSgnc3BlY2llcycpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIEM7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkob3JpZ2luYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDID0gb3JpZ2luYWwuY29uc3RydWN0b3I7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIEMgPT0gJ2Z1bmN0aW9uJyAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEM7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTExICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGNvZiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzQpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDExMiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgTUVUQSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjcpKCdtZXRhJyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4KTtcblxuICAgICAgICAgICAgICAgIHZhciBoYXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI2KTtcblxuICAgICAgICAgICAgICAgIHZhciBzZXREZXNjID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNikuZjtcblxuICAgICAgICAgICAgICAgIHZhciBpZCA9IDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgRlJFRVpFID0gIV9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjEpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHZhciBzZXRNZXRhID0gZnVuY3Rpb24gc2V0TWV0YShpdCkge1xuICAgICAgICAgICAgICAgICAgICBzZXREZXNjKGl0LCBNRVRBLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk6ICdPJyArICsraWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdzoge31cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBmYXN0S2V5ID0gZnVuY3Rpb24gZmFzdEtleShpdCwgY3JlYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gX3R5cGVvZihpdCkgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldE1ldGEoaXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0W01FVEFdLmk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBnZXRXZWFrID0gZnVuY3Rpb24gZ2V0V2VhayhpdCwgY3JlYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRNZXRhKGl0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdFtNRVRBXS53O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgb25GcmVlemUgPSBmdW5jdGlvbiBvbkZyZWV6ZShpdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKSBzZXRNZXRhKGl0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICAgICAgICAgICAgICBLRVk6IE1FVEEsXG4gICAgICAgICAgICAgICAgICAgIE5FRUQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmYXN0S2V5OiBmYXN0S2V5LFxuICAgICAgICAgICAgICAgICAgICBnZXRXZWFrOiBnZXRXZWFrLFxuICAgICAgICAgICAgICAgICAgICBvbkZyZWV6ZTogb25GcmVlemVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMTMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgcmVkZWZpbmVBbGwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ2V0V2VhayA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTEyKS5nZXRXZWFrO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFuT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4KTtcblxuICAgICAgICAgICAgICAgIHZhciBhbkluc3RhbmNlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5Mik7XG5cbiAgICAgICAgICAgICAgICB2YXIgZm9yT2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkzKTtcblxuICAgICAgICAgICAgICAgIHZhciBjcmVhdGVBcnJheU1ldGhvZCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTA4KTtcblxuICAgICAgICAgICAgICAgIHZhciAkaGFzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgdmFsaWRhdGUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExNCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gICAgICAgICAgICAgICAgdmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG4gICAgICAgICAgICAgICAgdmFyIGlkID0gMDtcblxuICAgICAgICAgICAgICAgIHZhciB1bmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gdW5jYXVnaHRGcm96ZW5TdG9yZSh0aGF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGF0Ll9sIHx8ICh0aGF0Ll9sID0gbmV3IFVuY2F1Z2h0RnJvemVuU3RvcmUoKSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gVW5jYXVnaHRGcm96ZW5TdG9yZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hID0gW107XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5kVW5jYXVnaHRGcm96ZW4gPSBmdW5jdGlvbiBmaW5kVW5jYXVnaHRGcm96ZW4oc3RvcmUsIGtleSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXlGaW5kKHN0b3JlLmEsIGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBVbmNhdWdodEZyb3plblN0b3JlLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhIWZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtlbHNlIHRoaXMuYS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICdkZWxldGUnOiBmdW5jdGlvbiBfZGVsZXRlKGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gYXJyYXlGaW5kSW5kZXgodGhpcy5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5pbmRleCkgdGhpcy5hLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISF+aW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICAgICAgICAgICAgICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fdCA9IE5BTUU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5faSA9IGlkKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIF9kZWxldGUoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3Qoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIE5BTUUpKVsnZGVsZXRlJ10oa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEgJiYgJGhhcyhkYXRhLCB0aGlzLl9pKSAmJiBkZWxldGUgZGF0YVt0aGlzLl9pXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSkuaGFzKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQztcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZGVmOiBmdW5jdGlvbiBkZWYodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGFuT2JqZWN0KGtleSksIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO2Vsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHVmc3RvcmU6IHVuY2F1Z2h0RnJvemVuU3RvcmVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMTQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUWVBFKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QoaXQpIHx8IGl0Ll90ICE9PSBUWVBFKSB0aHJvdyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkIScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQ7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTE1ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGdsb2JhbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyKTtcblxuICAgICAgICAgICAgICAgIHZhciByZWRlZmluZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlZGVmaW5lQWxsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMDIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIG1ldGEgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgZm9yT2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkzKTtcblxuICAgICAgICAgICAgICAgIHZhciBhbkluc3RhbmNlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5Mik7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4KTtcblxuICAgICAgICAgICAgICAgIHZhciBmYWlscyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjEpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRpdGVyRGV0ZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3Myk7XG5cbiAgICAgICAgICAgICAgICB2YXIgc2V0VG9TdHJpbmdUYWcgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDY0KTtcblxuICAgICAgICAgICAgICAgIHZhciBpbmhlcml0SWZSZXF1aXJlZCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTE2KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgQyA9IEJhc2U7XG4gICAgICAgICAgICAgICAgICAgIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBPID0ge307XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpeE1ldGhvZCA9IGZ1bmN0aW9uIGZpeE1ldGhvZChLRVkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbiA9IHByb3RvW0tFWV07XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRlZmluZShwcm90bywgS0VZLCBLRVkgPT0gJ2RlbGV0ZScgPyBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChhKSA/IGZhbHNlIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSA6IEtFWSA9PSAnaGFzJyA/IGZ1bmN0aW9uIGhhcyhhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyB1bmRlZmluZWQgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IDogS0VZID09ICdhZGQnID8gZnVuY3Rpb24gYWRkKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IDogZnVuY3Rpb24gc2V0KGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIEMgIT0gJ2Z1bmN0aW9uJyB8fCAhKElTX1dFQUsgfHwgcHJvdG8uZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEMoKS5lbnRyaWVzKCkubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEMgPSBjb21tb24uZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhLk5FRUQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gbmV3IEMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBIQVNOVF9DSEFJTklORyA9IGluc3RhbmNlW0FEREVSXShJU19XRUFLID8ge30gOiAtMCwgMSkgIT0gaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgVEhST1dTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuaGFzKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgQUNDRVBUX0lURVJBQkxFUyA9ICRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEMoaXRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBCVUdHWV9aRVJPID0gIUlTX1dFQUsgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IDU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEkaW5zdGFuY2UuaGFzKC0wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFDQ0VQVF9JVEVSQUJMRVMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbkluc3RhbmNlKHRhcmdldCwgQywgTkFNRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UoKSwgdGFyZ2V0LCBDKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhhdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDLnByb3RvdHlwZSA9IHByb3RvO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvLmNvbnN0cnVjdG9yID0gQztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRIUk9XU19PTl9QUklNSVRJVkVTIHx8IEJVR0dZX1pFUk8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeE1ldGhvZCgnaGFzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSVNfTUFQICYmIGZpeE1ldGhvZCgnZ2V0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCVUdHWV9aRVJPIHx8IEhBU05UX0NIQUlOSU5HKSBmaXhNZXRob2QoQURERVIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElTX1dFQUsgJiYgcHJvdG8uY2xlYXIpIGRlbGV0ZSBwcm90by5jbGVhcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNldFRvU3RyaW5nVGFnKEMsIE5BTUUpO1xuICAgICAgICAgICAgICAgICAgICBPW05BTUVdID0gQztcbiAgICAgICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghSVNfV0VBSykgY29tbW9uLnNldFN0cm9uZyhDLCBOQU1FLCBJU19NQVApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQztcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMTYgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4KTtcblxuICAgICAgICAgICAgICAgIHZhciBzZXRQcm90b3R5cGVPZiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTE3KS5zZXQ7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCB0YXJnZXQsIEMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFMgPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gICAgICAgICAgICAgICAgICAgIHZhciBQO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChTICE9PSBDICYmIHR5cGVvZiBTID09ICdmdW5jdGlvbicgJiYgKFAgPSBTLnByb3RvdHlwZSkgIT09IEMucHJvdG90eXBlICYmIGlzT2JqZWN0KFApICYmIHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGF0O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDExNyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBpc09iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFuT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY2hlY2sgPSBmdW5jdGlvbiBjaGVjayhPLCBwcm90bykge1xuICAgICAgICAgICAgICAgICAgICBhbk9iamVjdChPKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHNldDogT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjgpKEZ1bmN0aW9uLmNhbGwsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTE4KS5mKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQsIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVnZ3kgPSAhKHRlc3QgaW5zdGFuY2VvZiBBcnJheSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVnZ3kgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1Z2d5KSBPLl9fcHJvdG9fXyA9IHByb3RvO2Vsc2Ugc2V0KE8sIHByb3RvKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTztcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0oe30sIGZhbHNlKSA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrOiBjaGVja1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDExOCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBwSUUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDc4KTtcblxuICAgICAgICAgICAgICAgIHZhciBjcmVhdGVEZXNjID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9JT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9QcmltaXRpdmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIzKTtcblxuICAgICAgICAgICAgICAgIHZhciBoYXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI2KTtcblxuICAgICAgICAgICAgICAgIHZhciBJRThfRE9NX0RFRklORSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuZiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjApID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gICAgICAgICAgICAgICAgICAgIE8gPSB0b0lPYmplY3QoTyk7XG4gICAgICAgICAgICAgICAgICAgIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVEZXNjKCFwSUUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMTkgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyMCkoJ1dlYWtNYXAnKTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTIwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgICAgICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgQSA9IG5ldyBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFbbGVuZ3RoXSA9IGFyZ3VtZW50c1tsZW5ndGhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTIxICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMjIpKCdXZWFrTWFwJyk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEyMiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgYUZ1bmN0aW9uID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyOSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY3R4ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZm9yT2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkzKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgICAgICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb206IGZ1bmN0aW9uIGZyb20oc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hcEZuID0gYXJndW1lbnRzWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXBwaW5nLCBBLCBuLCBjYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhRnVuY3Rpb24odGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IG1hcEZuICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcHBpbmcpIGFGdW5jdGlvbihtYXBGbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSA9PSB1bmRlZmluZWQpIHJldHVybiBuZXcgdGhpcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYiA9IGN0eChtYXBGbiwgYXJndW1lbnRzWzJdLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgZnVuY3Rpb24gKG5leHRJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBLnB1c2goY2IobmV4dEl0ZW0sIG4rKykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBBLnB1c2gsIEEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTIzICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4Nyk7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDg4KTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTI0KTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTI1KTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTI2KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNCkuV2Vha1NldDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTI0ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIHdlYWsgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdmFsaWRhdGUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExNCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgV0VBS19TRVQgPSAnV2Vha1NldCc7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExNSkoV0VBS19TRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtTZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19TRVQpLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCB3ZWFrLCBmYWxzZSwgdHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEyNSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTIwKSgnV2Vha1NldCcpO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMjYgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyMikoJ1dlYWtTZXQnKTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTI3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMjgpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0KS5TdHJpbmcuY29kZVBvaW50QXQ7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEyOCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgJGF0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1MykoZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGVQb2ludEF0OiBmdW5jdGlvbiBjb2RlUG9pbnRBdChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMjkgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzMCk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQpLlN0cmluZy5mcm9tQ29kZVBvaW50O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMzAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG4gICAgICAgICAgICAgICAgdmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoISEkZnJvbUNvZGVQb2ludCAmJiAkZnJvbUNvZGVQb2ludC5sZW5ndGggIT0gMSksICdTdHJpbmcnLCB7XG4gICAgICAgICAgICAgICAgICAgIGZyb21Db2RlUG9pbnQ6IGZ1bmN0aW9uIGZyb21Db2RlUG9pbnQoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChhTGVuID4gaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSArYXJndW1lbnRzW2krK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRvQWJzb2x1dGVJbmRleChjb2RlLCAweDEwZmZmZikgIT09IGNvZGUpIHRocm93IFJhbmdlRXJyb3IoY29kZSArICcgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwID8gZnJvbUNoYXJDb2RlKGNvZGUpIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzMSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMyKTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oODcpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0KS5TeW1ib2w7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzMiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaGFzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgREVTQ1JJUFRPUlMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIwKTtcblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVkZWZpbmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI1KTtcblxuICAgICAgICAgICAgICAgIHZhciBNRVRBID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMTIpLktFWTtcblxuICAgICAgICAgICAgICAgIHZhciAkZmFpbHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIxKTtcblxuICAgICAgICAgICAgICAgIHZhciBzaGFyZWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM2KTtcblxuICAgICAgICAgICAgICAgIHZhciBzZXRUb1N0cmluZ1RhZyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHVpZCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHdrcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHdrc0V4dCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMzKTtcblxuICAgICAgICAgICAgICAgIHZhciB3a3NEZWZpbmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzNCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZW51bUtleXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzNSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNBcnJheSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTExKTtcblxuICAgICAgICAgICAgICAgIHZhciBhbk9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGlzT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9JT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9QcmltaXRpdmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIzKTtcblxuICAgICAgICAgICAgICAgIHZhciBjcmVhdGVEZXNjID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2NyZWF0ZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdPUE5FeHQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgJEdPUEQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgJERQID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgJGtleXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU5KTtcblxuICAgICAgICAgICAgICAgIHZhciBnT1BEID0gJEdPUEQuZjtcbiAgICAgICAgICAgICAgICB2YXIgZFAgPSAkRFAuZjtcbiAgICAgICAgICAgICAgICB2YXIgZ09QTiA9IGdPUE5FeHQuZjtcbiAgICAgICAgICAgICAgICB2YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG4gICAgICAgICAgICAgICAgdmFyICRKU09OID0gZ2xvYmFsLkpTT047XG5cbiAgICAgICAgICAgICAgICB2YXIgX3N0cmluZ2lmeSA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeTtcblxuICAgICAgICAgICAgICAgIHZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbiAgICAgICAgICAgICAgICB2YXIgSElEREVOID0gd2tzKCdfaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgdmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbiAgICAgICAgICAgICAgICB2YXIgaXNFbnVtID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4gICAgICAgICAgICAgICAgdmFyIFN5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtcmVnaXN0cnknKTtcbiAgICAgICAgICAgICAgICB2YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xuICAgICAgICAgICAgICAgIHZhciBPUFN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbiAgICAgICAgICAgICAgICB2YXIgT2JqZWN0UHJvdG8gPSBPYmplY3RbUFJPVE9UWVBFXTtcbiAgICAgICAgICAgICAgICB2YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbic7XG4gICAgICAgICAgICAgICAgdmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbiAgICAgICAgICAgICAgICB2YXIgc2V0dGVyID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcbiAgICAgICAgICAgICAgICB2YXIgc2V0U3ltYm9sRGVzYyA9IERFU0NSSVBUT1JTICYmICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfY3JlYXRlKGRQKHt9LCAnYScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkUCh0aGlzLCAnYScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5hO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSkuYSAhPSA3O1xuICAgICAgICAgICAgICAgIH0pID8gZnVuY3Rpb24gKGl0LCBrZXksIEQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm90b0Rlc2MpIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkUChpdCwga2V5LCBEKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pIGRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG4gICAgICAgICAgICAgICAgfSA6IGRQO1xuXG4gICAgICAgICAgICAgICAgdmFyIHdyYXAgPSBmdW5jdGlvbiB3cmFwKHRhZykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHN5bS5fayA9IHRhZztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5bTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIGlzU3ltYm9sID0gVVNFX05BVElWRSAmJiBfdHlwZW9mKCRTeW1ib2wuaXRlcmF0b3IpID09ICdzeW1ib2wnID8gZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfdHlwZW9mKGl0KSA9PSAnc3ltYm9sJztcbiAgICAgICAgICAgICAgICB9IDogZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8pICRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gICAgICAgICAgICAgICAgICAgIGFuT2JqZWN0KGl0KTtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgYW5PYmplY3QoRCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUQuZW51bWVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzKGl0LCBISURERU4pKSBkUChpdCwgSElEREVOLCBjcmVhdGVEZXNjKDEsIHt9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pIGl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQgPSBfY3JlYXRlKEQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldFN5bWJvbERlc2MoaXQsIGtleSwgRCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoaXQsIFApIHtcbiAgICAgICAgICAgICAgICAgICAgYW5PYmplY3QoaXQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGVudW1LZXlzKFAgPSB0b0lPYmplY3QoUCkpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsID0ga2V5cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXk7XG5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGwgPiBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgaXQgPSB0b0lPYmplY3QoaXQpO1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXQgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHZhciBEID0gZ09QRChpdCwga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEQgJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkgRC5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEQ7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVzID0gZ09QTih0b0lPYmplY3QoaXQpKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXk7XG5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgSVNfT1AgPSBpdCA9PT0gT2JqZWN0UHJvdG87XG4gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lcyA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXk7XG5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYgKElTX09QID8gaGFzKE9iamVjdFByb3RvLCBrZXkpIDogdHJ1ZSkpIHJlc3VsdC5wdXNoKEFsbFN5bWJvbHNba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAoIVVTRV9OQVRJVkUpIHtcbiAgICAgICAgICAgICAgICAgICAgJFN5bWJvbCA9IGZ1bmN0aW9uIF9TeW1ib2woKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gJHNldCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90bykgJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN5bWJvbERlc2ModGhpcywgdGFnLCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREVTQ1JJUFRPUlMgJiYgc2V0dGVyKSBzZXRTeW1ib2xEZXNjKE9iamVjdFByb3RvLCB0YWcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiAkc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwKHRhZyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmVkZWZpbmUoJFN5bWJvbFtQUk9UT1RZUEVdLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9rO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgJEdPUEQuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gICAgICAgICAgICAgICAgICAgICREUC5mID0gJGRlZmluZVByb3BlcnR5O1xuICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzNykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDc4KS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDc3KS5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICAgICAgICAgICAgICAgICAgICBpZiAoREVTQ1JJUFRPUlMgJiYgIV9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHdrc0V4dC5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwge1xuICAgICAgICAgICAgICAgICAgICBTeW1ib2w6ICRTeW1ib2xcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGVzNlN5bWJvbHMgPSAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KSB7XG4gICAgICAgICAgICAgICAgICAgIHdrcyhlczZTeW1ib2xzW2orK10pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAodmFyIHdlbGxLbm93blN5bWJvbHMgPSAka2V5cyh3a3Muc3RvcmUpLCBrID0gMDsgd2VsbEtub3duU3ltYm9scy5sZW5ndGggPiBrOykge1xuICAgICAgICAgICAgICAgICAgICB3a3NEZWZpbmUod2VsbEtub3duU3ltYm9sc1trKytdKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAgICAgICAgICAgICAgICAgICAnZm9yJzogZnVuY3Rpb24gX2ZvcihrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXMoU3ltYm9sUmVnaXN0cnksIGtleSArPSAnJykgPyBTeW1ib2xSZWdpc3RyeVtrZXldIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIFN5bWJvbFJlZ2lzdHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdXNlU2V0dGVyOiBmdW5jdGlvbiB1c2VTZXR0ZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB1c2VTaW1wbGU6IGZ1bmN0aW9uIHVzZVNpbXBsZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ09iamVjdCcsIHtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlOiAkY3JlYXRlLFxuICAgICAgICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAgICAgICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAgICAgICAgICAgICAgICAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgICAgICAgICAgICAgICAgICAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfc3RyaW5naWZ5KFtTXSkgIT0gJ1tudWxsXScgfHwgX3N0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBhOiBTXG4gICAgICAgICAgICAgICAgICAgIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG4gICAgICAgICAgICAgICAgfSkpLCAnSlNPTicsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXBsYWNlciwgJHJlcGxhY2VyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAkcmVwbGFjZXIgPSByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiByZXBsYWNlcihrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMV0gPSByZXBsYWNlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTUpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4gICAgICAgICAgICAgICAgc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuICAgICAgICAgICAgICAgIHNldFRvU3RyaW5nVGFnKE1hdGgsICdNYXRoJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzMyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuZiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzUpO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMzQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY29yZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIExJQlJBUlkgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM3KTtcblxuICAgICAgICAgICAgICAgIHZhciB3a3NFeHQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHkgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2KS5mO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgIT0gJ18nICYmICEobmFtZSBpbiAkU3ltYm9sKSkgZGVmaW5lUHJvcGVydHkoJFN5bWJvbCwgbmFtZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHdrc0V4dC5mKG5hbWUpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzNSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBnZXRLZXlzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1OSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ09QUyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHBJRSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzgpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGdldEtleXMoaXQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0U3ltYm9scykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzeW1ib2xzLmxlbmd0aCA+IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNFbnVtLmNhbGwoaXQsIGtleSA9IHN5bWJvbHNbaSsrXSkpIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzNiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9JT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ09QTiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTM3KS5mO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG4gICAgICAgICAgICAgICAgdmFyIHdpbmRvd05hbWVzID0gKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZih3aW5kb3cpKSA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbiAgICAgICAgICAgICAgICB2YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiBnZXRXaW5kb3dOYW1lcyhpdCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdPUE4oaXQpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzNyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAka2V5cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjApO1xuXG4gICAgICAgICAgICAgICAgdmFyIGhpZGRlbktleXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYyKS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTM4ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMzkpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0KS5TdHJpbmcucGFkU3RhcnQ7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzOSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgJHBhZCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQwKTtcblxuICAgICAgICAgICAgICAgIHZhciB1c2VyQWdlbnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwMCk7XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIC9WZXJzaW9uXFwvMTBcXC5cXGQrKFxcLlxcZCspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KSwgJ1N0cmluZycsIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkU3RhcnQ6IGZ1bmN0aW9uIHBhZFN0YXJ0KG1heExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRwYWQodGhpcywgbWF4TGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTQwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIHRvTGVuZ3RoID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVwZWF0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNDEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM4KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIG1heExlbmd0aCwgZmlsbFN0cmluZywgbGVmdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgUyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmluZ0xlbmd0aCA9IFMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsbFN0ciA9IGZpbGxTdHJpbmcgPT09IHVuZGVmaW5lZCA/ICcgJyA6IFN0cmluZyhmaWxsU3RyaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGludE1heExlbmd0aCA9IHRvTGVuZ3RoKG1heExlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnRNYXhMZW5ndGggPD0gc3RyaW5nTGVuZ3RoIHx8IGZpbGxTdHIgPT0gJycpIHJldHVybiBTO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsbExlbiA9IGludE1heExlbmd0aCAtIHN0cmluZ0xlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmluZ0ZpbGxlciA9IHJlcGVhdC5jYWxsKGZpbGxTdHIsIE1hdGguY2VpbChmaWxsTGVuIC8gZmlsbFN0ci5sZW5ndGgpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZ0ZpbGxlci5sZW5ndGggPiBmaWxsTGVuKSBzdHJpbmdGaWxsZXIgPSBzdHJpbmdGaWxsZXIuc2xpY2UoMCwgZmlsbExlbik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0ID8gc3RyaW5nRmlsbGVyICsgUyA6IFMgKyBzdHJpbmdGaWxsZXI7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTQxICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIHRvSW50ZWdlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM4KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVwZWF0KGNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdHIgPSBTdHJpbmcoZGVmaW5lZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXMgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSB0b0ludGVnZXIoY291bnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobiA8IDAgfHwgbiA9PSBJbmZpbml0eSkgdGhyb3cgUmFuZ2VFcnJvcihcIkNvdW50IGNhbid0IGJlIG5lZ2F0aXZlXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyBuID4gMDsgKG4gPj4+PSAxKSAmJiAoc3RyICs9IHN0cikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuICYgMSkgcmVzICs9IHN0cjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTQyICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNDMpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0KS5TdHJpbmcucGFkRW5kO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNDMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTIpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRwYWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0MCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdXNlckFnZW50ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMDApO1xuXG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCksICdTdHJpbmcnLCB7XG4gICAgICAgICAgICAgICAgICAgIHBhZEVuZDogZnVuY3Rpb24gcGFkRW5kKG1heExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRwYWQodGhpcywgbWF4TGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE0NCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQ1KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNCkuT2JqZWN0LnZhbHVlcztcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTQ1ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyKTtcblxuICAgICAgICAgICAgICAgIHZhciAkdmFsdWVzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNDYpKGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcyhpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR2YWx1ZXMoaXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE0NiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBnZXRLZXlzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1OSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9JT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNFbnVtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3OCkuZjtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlzRW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgTyA9IHRvSU9iamVjdChpdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldEtleXMoTyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobGVuZ3RoID4gaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0VudW0uY2FsbChPLCBrZXkgPSBrZXlzW2krK10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGlzRW50cmllcyA/IFtrZXksIE9ba2V5XV0gOiBPW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNDcgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBSZWFkYWJsZVN0cmVhbSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uIHN0YXJ0KGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlJlYWRhYmxlU3RyZWFtID0gUmVhZGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlJlYWRhYmxlU3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNDgpLlJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNDggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YyID0gZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mMiA9IGZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZjIob2JqKTsgfVxuXG4gICAgICAgICAgICAgICAgKGZ1bmN0aW9uIChlLCBhKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgaW4gYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZVtpXSA9IGFbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KShleHBvcnRzLCBmdW5jdGlvbiAobW9kdWxlcykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18obW9kdWxlSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkgcmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaTogbW9kdWxlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0czoge31cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5sID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4gICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24gKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGdldHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uIChtb2R1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgPyBmdW5jdGlvbiBnZXREZWZhdWx0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gOiBmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXR0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24gKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5wID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5zID0gNyk7XG4gICAgICAgICAgICAgICAgfShbZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuICAgICAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBfdHlwZW9mMihTeW1ib2wuaXRlcmF0b3IpID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90eXBlb2YyKG9iaik7XG4gICAgICAgICAgICAgICAgICAgIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogX3R5cGVvZjIob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgX3JlcXVpcmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0ID0gX3JlcXVpcmUuYXNzZXJ0O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElzUHJvcGVydHlLZXkoYXJndW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8ICh0eXBlb2YgYXJndW1lbnQgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKGFyZ3VtZW50KSkgPT09ICdzeW1ib2wnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy50eXBlSXNPYmplY3QgPSBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0eXBlb2YgeCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YoeCkpID09PSAnb2JqZWN0JyAmJiB4ICE9PSBudWxsIHx8IHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuY3JlYXRlRGF0YVByb3BlcnR5ID0gZnVuY3Rpb24gKG8sIHAsIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChleHBvcnRzLnR5cGVJc09iamVjdChvKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgcCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLmNyZWF0ZUFycmF5RnJvbUxpc3QgPSBmdW5jdGlvbiAoZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50cy5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuQXJyYXlCdWZmZXJDb3B5ID0gZnVuY3Rpb24gKGRlc3QsIGRlc3RPZmZzZXQsIHNyYywgc3JjT2Zmc2V0LCBuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgVWludDhBcnJheShkZXN0KS5zZXQobmV3IFVpbnQ4QXJyYXkoc3JjLCBzcmNPZmZzZXQsIG4pLCBkZXN0T2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLkNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSBmdW5jdGlvbiAodmFsdWUsIGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0eXBlb2YgZG9uZSA9PT0gJ2Jvb2xlYW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosICd2YWx1ZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgJ2RvbmUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGRvbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLklzRmluaXRlTm9uTmVnYXRpdmVOdW1iZXIgPSBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTih2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodiA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENhbGwoRiwgViwgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBGICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKEYsIFYsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5JbnZva2VPck5vb3AgPSBmdW5jdGlvbiAoTywgUCwgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KE8gIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoSXNQcm9wZXJ0eUtleShQKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShhcmdzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWV0aG9kID0gT1tQXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENhbGwobWV0aG9kLCBPLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlByb21pc2VJbnZva2VPck5vb3AgPSBmdW5jdGlvbiAoTywgUCwgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KE8gIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoSXNQcm9wZXJ0eUtleShQKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShhcmdzKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShleHBvcnRzLkludm9rZU9yTm9vcChPLCBQLCBhcmdzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChyZXR1cm5WYWx1ZUUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmV0dXJuVmFsdWVFKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlByb21pc2VJbnZva2VPclBlcmZvcm1GYWxsYmFjayA9IGZ1bmN0aW9uIChPLCBQLCBhcmdzLCBGLCBhcmdzRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KE8gIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoSXNQcm9wZXJ0eUtleShQKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShhcmdzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShhcmdzRikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1ldGhvZCA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSBPW1BdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAobWV0aG9kRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChtZXRob2RFKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEYuYXBwbHkobnVsbCwgYXJnc0YpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoQ2FsbChtZXRob2QsIE8sIGFyZ3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5UcmFuc2ZlckFycmF5QnVmZmVyID0gZnVuY3Rpb24gKE8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5WYWxpZGF0ZUFuZE5vcm1hbGl6ZUhpZ2hXYXRlck1hcmsgPSBmdW5jdGlvbiAoaGlnaFdhdGVyTWFyaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlnaFdhdGVyTWFyayA9IE51bWJlcihoaWdoV2F0ZXJNYXJrKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTihoaWdoV2F0ZXJNYXJrKSB8fCBoaWdoV2F0ZXJNYXJrIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdoaWdoV2F0ZXJNYXJrIHByb3BlcnR5IG9mIGEgcXVldWluZyBzdHJhdGVneSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQgbm9uLU5hTicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGlnaFdhdGVyTWFyaztcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlZhbGlkYXRlQW5kTm9ybWFsaXplUXVldWluZ1N0cmF0ZWd5ID0gZnVuY3Rpb24gKHNpemUsIGhpZ2hXYXRlck1hcmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaXplICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHNpemUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzaXplIHByb3BlcnR5IG9mIGEgcXVldWluZyBzdHJhdGVneSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaGlnaFdhdGVyTWFyayA9IGV4cG9ydHMuVmFsaWRhdGVBbmROb3JtYWxpemVIaWdoV2F0ZXJNYXJrKGhpZ2hXYXRlck1hcmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBzaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hXYXRlck1hcms6IGhpZ2hXYXRlck1hcmtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuICAgICAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgJiYgZS5jb25zdHJ1Y3RvciA9PT0gQXNzZXJ0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFzc2VydGlvbkVycm9yKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZSA9ICdBc3NlcnRpb25FcnJvcic7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICBBc3NlcnRpb25FcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc3NlcnRpb25FcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBhc3NlcnQodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbjogcmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3I6IEFzc2VydGlvbkVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0OiBhc3NlcnRcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG4gICAgICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBfcmVxdWlyZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMCksXG4gICAgICAgICAgICAgICAgICAgICAgICBJbnZva2VPck5vb3AgPSBfcmVxdWlyZS5JbnZva2VPck5vb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlSW52b2tlT3JOb29wID0gX3JlcXVpcmUuUHJvbWlzZUludm9rZU9yTm9vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRlQW5kTm9ybWFsaXplUXVldWluZ1N0cmF0ZWd5ID0gX3JlcXVpcmUuVmFsaWRhdGVBbmROb3JtYWxpemVRdWV1aW5nU3RyYXRlZ3ksXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlSXNPYmplY3QgPSBfcmVxdWlyZS50eXBlSXNPYmplY3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXF1aXJlMiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMSksXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgPSBfcmVxdWlyZTIuYXNzZXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uID0gX3JlcXVpcmUyLnJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgX3JlcXVpcmUzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIERlcXVldWVWYWx1ZSA9IF9yZXF1aXJlMy5EZXF1ZXVlVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBFbnF1ZXVlVmFsdWVXaXRoU2l6ZSA9IF9yZXF1aXJlMy5FbnF1ZXVlVmFsdWVXaXRoU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFBlZWtRdWV1ZVZhbHVlID0gX3JlcXVpcmUzLlBlZWtRdWV1ZVZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXRRdWV1ZSA9IF9yZXF1aXJlMy5SZXNldFF1ZXVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBXcml0YWJsZVN0cmVhbSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bmRlcmx5aW5nU2luayA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYkaGlnaFdhdGVyTWFyayA9IF9yZWYuaGlnaFdhdGVyTWFyayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaFdhdGVyTWFyayA9IF9yZWYkaGlnaFdhdGVyTWFyayA9PT0gdW5kZWZpbmVkID8gMSA6IF9yZWYkaGlnaFdhdGVyTWFyaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBXcml0YWJsZVN0cmVhbSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICd3cml0YWJsZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcmVkRXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd3JpdGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl93cml0ZVJlcXVlc3RzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5GbGlnaHRXcml0ZVJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xvc2VSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdBYm9ydFJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYmFja3ByZXNzdXJlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSB1bmRlcmx5aW5nU2luay50eXBlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0eXBlIGlzIHNwZWNpZmllZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlciA9IG5ldyBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMsIHVuZGVybHlpbmdTaW5rLCBzaXplLCBoaWdoV2F0ZXJNYXJrKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlci5fX3N0YXJ0U3RlcHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFdyaXRhYmxlU3RyZWFtLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Fib3J0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWJvcnQocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHN0cmVhbUJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Fib3J0JykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzV3JpdGFibGVTdHJlYW1Mb2NrZWQodGhpcykgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdDYW5ub3QgYWJvcnQgYSBzdHJlYW0gdGhhdCBhbHJlYWR5IGhhcyBhIHdyaXRlcicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXcml0YWJsZVN0cmVhbUFib3J0KHRoaXMsIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2dldFdyaXRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFdyaXRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzV3JpdGFibGVTdHJlYW0odGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uKCdnZXRXcml0ZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBY3F1aXJlV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdsb2NrZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbSh0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHN0cmVhbUJyYW5kQ2hlY2tFeGNlcHRpb24oJ2xvY2tlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElzV3JpdGFibGVTdHJlYW1Mb2NrZWQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFjcXVpcmVXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXI6IEFjcXVpcmVXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBJc1dyaXRhYmxlU3RyZWFtOiBJc1dyaXRhYmxlU3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgSXNXcml0YWJsZVN0cmVhbUxvY2tlZDogSXNXcml0YWJsZVN0cmVhbUxvY2tlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtOiBXcml0YWJsZVN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtQWJvcnQ6IFdyaXRhYmxlU3RyZWFtQWJvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3I6IFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckNsb3NlV2l0aEVycm9yUHJvcGFnYXRpb246IFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckNsb3NlV2l0aEVycm9yUHJvcGFnYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJSZWxlYXNlOiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJSZWxlYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyV3JpdGU6IFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcldyaXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1DbG9zZVF1ZXVlZE9ySW5GbGlnaHQ6IFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQWNxdWlyZVdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcihzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc1dyaXRhYmxlU3RyZWFtKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHlwZUlzT2JqZWN0KHgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElzV3JpdGFibGVTdHJlYW1Mb2NrZWQoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoSXNXcml0YWJsZVN0cmVhbShzdHJlYW0pID09PSB0cnVlLCAnSXNXcml0YWJsZVN0cmVhbUxvY2tlZCBzaG91bGQgb25seSBiZSB1c2VkIG9uIGtub3duIHdyaXRhYmxlIHN0cmVhbXMnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fd3JpdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1BYm9ydChzdHJlYW0sIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RyZWFtLl9zdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnZXJyb3JlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qoc3RyZWFtLl9zdG9yZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IG5ldyBUeXBlRXJyb3IoJ1JlcXVlc3RlZCB0byBhYm9ydCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RhdGUgPT09ICd3cml0YWJsZScgfHwgc3RhdGUgPT09ICdlcnJvcmluZycsICdzdGF0ZSBtdXN0IGJlIHdyaXRhYmxlIG9yIGVycm9yaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2FzQWxyZWFkeUVycm9yaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2Vycm9yaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhc0FscmVhZHlFcnJvcmluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3BlbmRpbmdBYm9ydFJlcXVlc3QgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZXNvbHZlOiByZXNvbHZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVqZWN0OiByZWplY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWFzb246IHJlYXNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3dhc0FscmVhZHlFcnJvcmluZzogd2FzQWxyZWFkeUVycm9yaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2FzQWxyZWFkeUVycm9yaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtU3RhcnRFcnJvcmluZyhzdHJlYW0sIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbUFkZFdyaXRlUmVxdWVzdChzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChJc1dyaXRhYmxlU3RyZWFtTG9ja2VkKHN0cmVhbSkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICd3cml0YWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdyaXRlUmVxdWVzdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Jlc29sdmU6IHJlc29sdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWplY3Q6IHJlamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3dyaXRlUmVxdWVzdHMucHVzaCh3cml0ZVJlcXVlc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVhbFdpdGhSZWplY3Rpb24oc3RyZWFtLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RyZWFtLl9zdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnd3JpdGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1TdGFydEVycm9yaW5nKHN0cmVhbSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0YXRlID09PSAnZXJyb3JpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRmluaXNoRXJyb3Jpbmcoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtU3RhcnRFcnJvcmluZyhzdHJlYW0sIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RvcmVkRXJyb3IgPT09IHVuZGVmaW5lZCwgJ3N0cmVhbS5fc3RvcmVkRXJyb3IgPT09IHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICd3cml0YWJsZScsICdzdGF0ZSBtdXN0IGJlIHdyaXRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udHJvbGxlciA9IHN0cmVhbS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIgIT09IHVuZGVmaW5lZCwgJ2NvbnRyb2xsZXIgbXVzdCBub3QgYmUgdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3N0YXRlID0gJ2Vycm9yaW5nJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fc3RvcmVkRXJyb3IgPSByZWFzb247XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd3JpdGVyID0gc3RyZWFtLl93cml0ZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3cml0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckVuc3VyZVJlYWR5UHJvbWlzZVJlamVjdGVkKHdyaXRlciwgcmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFdyaXRhYmxlU3RyZWFtSGFzT3BlcmF0aW9uTWFya2VkSW5GbGlnaHQoc3RyZWFtKSA9PT0gZmFsc2UgJiYgY29udHJvbGxlci5fc3RhcnRlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRmluaXNoRXJyb3Jpbmcoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRmluaXNoRXJyb3Jpbmcoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ2Vycm9yaW5nJywgJ3N0cmVhbS5fc3RhdGUgPT09IGVycm9yaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoV3JpdGFibGVTdHJlYW1IYXNPcGVyYXRpb25NYXJrZWRJbkZsaWdodChzdHJlYW0pID09PSBmYWxzZSwgJ1dyaXRhYmxlU3RyZWFtSGFzT3BlcmF0aW9uTWFya2VkSW5GbGlnaHQoc3RyZWFtKSA9PT0gZmFsc2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fc3RhdGUgPSAnZXJyb3JlZCc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyLl9fZXJyb3JTdGVwcygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmVkRXJyb3IgPSBzdHJlYW0uX3N0b3JlZEVycm9yO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmVhbS5fd3JpdGVSZXF1ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3cml0ZVJlcXVlc3QgPSBzdHJlYW0uX3dyaXRlUmVxdWVzdHNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVJlcXVlc3QuX3JlamVjdChzdG9yZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fd3JpdGVSZXF1ZXN0cyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbVJlamVjdENsb3NlQW5kQ2xvc2VkUHJvbWlzZUlmTmVlZGVkKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWJvcnRSZXF1ZXN0ID0gc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWJvcnRSZXF1ZXN0Ll93YXNBbHJlYWR5RXJyb3JpbmcgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydFJlcXVlc3QuX3JlamVjdChzdG9yZWRFcnJvcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbVJlamVjdENsb3NlQW5kQ2xvc2VkUHJvbWlzZUlmTmVlZGVkKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IHN0cmVhbS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyLl9fYWJvcnRTdGVwcyhhYm9ydFJlcXVlc3QuX3JlYXNvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRSZXF1ZXN0Ll9yZXNvbHZlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbVJlamVjdENsb3NlQW5kQ2xvc2VkUHJvbWlzZUlmTmVlZGVkKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRSZXF1ZXN0Ll9yZWplY3QocmVhc29uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtUmVqZWN0Q2xvc2VBbmRDbG9zZWRQcm9taXNlSWZOZWVkZWQoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1GaW5pc2hJbkZsaWdodFdyaXRlKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5faW5GbGlnaHRXcml0ZVJlcXVlc3QgIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5faW5GbGlnaHRXcml0ZVJlcXVlc3QuX3Jlc29sdmUodW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9pbkZsaWdodFdyaXRlUmVxdWVzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRmluaXNoSW5GbGlnaHRXcml0ZVdpdGhFcnJvcihzdHJlYW0sIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9pbkZsaWdodFdyaXRlUmVxdWVzdCAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9pbkZsaWdodFdyaXRlUmVxdWVzdC5fcmVqZWN0KGVycm9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9pbkZsaWdodFdyaXRlUmVxdWVzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX3N0YXRlID09PSAnd3JpdGFibGUnIHx8IHN0cmVhbS5fc3RhdGUgPT09ICdlcnJvcmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWFsV2l0aFJlamVjdGlvbihzdHJlYW0sIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRmluaXNoSW5GbGlnaHRDbG9zZShzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0ICE9PSB1bmRlZmluZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0Ll9yZXNvbHZlKHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5faW5GbGlnaHRDbG9zZVJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdHJlYW0uX3N0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0YXRlID09PSAnd3JpdGFibGUnIHx8IHN0YXRlID09PSAnZXJyb3JpbmcnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnZXJyb3JpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9zdG9yZWRFcnJvciA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3BlbmRpbmdBYm9ydFJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3BlbmRpbmdBYm9ydFJlcXVlc3QuX3Jlc29sdmUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3BlbmRpbmdBYm9ydFJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3N0YXRlID0gJ2Nsb3NlZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd3JpdGVyID0gc3RyZWFtLl93cml0ZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3cml0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlUmVzb2x2ZSh3cml0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0ID09PSB1bmRlZmluZWQsICdzdHJlYW0uX3BlbmRpbmdBYm9ydFJlcXVlc3QgPT09IHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RvcmVkRXJyb3IgPT09IHVuZGVmaW5lZCwgJ3N0cmVhbS5fc3RvcmVkRXJyb3IgPT09IHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1GaW5pc2hJbkZsaWdodENsb3NlV2l0aEVycm9yKHN0cmVhbSwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0ICE9PSB1bmRlZmluZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0Ll9yZWplY3QoZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICd3cml0YWJsZScgfHwgc3RyZWFtLl9zdGF0ZSA9PT0gJ2Vycm9yaW5nJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3BlbmRpbmdBYm9ydFJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fcGVuZGluZ0Fib3J0UmVxdWVzdC5fcmVqZWN0KGVycm9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fcGVuZGluZ0Fib3J0UmVxdWVzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWFsV2l0aFJlamVjdGlvbihzdHJlYW0sIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0KHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fY2xvc2VSZXF1ZXN0ID09PSB1bmRlZmluZWQgJiYgc3RyZWFtLl9pbkZsaWdodENsb3NlUmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtSGFzT3BlcmF0aW9uTWFya2VkSW5GbGlnaHQoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9pbkZsaWdodFdyaXRlUmVxdWVzdCA9PT0gdW5kZWZpbmVkICYmIHN0cmVhbS5faW5GbGlnaHRDbG9zZVJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbU1hcmtDbG9zZVJlcXVlc3RJbkZsaWdodChzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0ID09PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fY2xvc2VSZXF1ZXN0ICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9pbkZsaWdodENsb3NlUmVxdWVzdCA9IHN0cmVhbS5fY2xvc2VSZXF1ZXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9jbG9zZVJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbU1hcmtGaXJzdFdyaXRlUmVxdWVzdEluRmxpZ2h0KHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5faW5GbGlnaHRXcml0ZVJlcXVlc3QgPT09IHVuZGVmaW5lZCwgJ3RoZXJlIG11c3QgYmUgbm8gcGVuZGluZyB3cml0ZSByZXF1ZXN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl93cml0ZVJlcXVlc3RzLmxlbmd0aCAhPT0gMCwgJ3dyaXRlUmVxdWVzdHMgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5faW5GbGlnaHRXcml0ZVJlcXVlc3QgPSBzdHJlYW0uX3dyaXRlUmVxdWVzdHMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtUmVqZWN0Q2xvc2VBbmRDbG9zZWRQcm9taXNlSWZOZWVkZWQoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ2Vycm9yZWQnLCAnX3N0cmVhbV8uW1tzdGF0ZV1dIGlzIGBcImVycm9yZWRcImAnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fY2xvc2VSZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9pbkZsaWdodENsb3NlUmVxdWVzdCA9PT0gdW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fY2xvc2VSZXF1ZXN0Ll9yZWplY3Qoc3RyZWFtLl9zdG9yZWRFcnJvcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX2Nsb3NlUmVxdWVzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdyaXRlciA9IHN0cmVhbS5fd3JpdGVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod3JpdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZVJlamVjdCh3cml0ZXIsIHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtVXBkYXRlQmFja3ByZXNzdXJlKHN0cmVhbSwgYmFja3ByZXNzdXJlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3dyaXRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoV3JpdGFibGVTdHJlYW1DbG9zZVF1ZXVlZE9ySW5GbGlnaHQoc3RyZWFtKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdyaXRlciA9IHN0cmVhbS5fd3JpdGVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod3JpdGVyICE9PSB1bmRlZmluZWQgJiYgYmFja3ByZXNzdXJlICE9PSBzdHJlYW0uX2JhY2twcmVzc3VyZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYWNrcHJlc3N1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZVJlc2V0KHdyaXRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGJhY2twcmVzc3VyZSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlUmVzb2x2ZSh3cml0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9iYWNrcHJlc3N1cmUgPSBiYWNrcHJlc3N1cmU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzV3JpdGFibGVTdHJlYW0oc3RyZWFtKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyIGNhbiBvbmx5IGJlIGNvbnN0cnVjdGVkIHdpdGggYSBXcml0YWJsZVN0cmVhbSBpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtTG9ja2VkKHN0cmVhbSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhpcyBzdHJlYW0gaGFzIGFscmVhZHkgYmVlbiBsb2NrZWQgZm9yIGV4Y2x1c2l2ZSB3cml0aW5nIGJ5IGFub3RoZXIgd3JpdGVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3dyaXRlciA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RyZWFtLl9zdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ3dyaXRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoV3JpdGFibGVTdHJlYW1DbG9zZVF1ZXVlZE9ySW5GbGlnaHQoc3RyZWFtKSA9PT0gZmFsc2UgJiYgc3RyZWFtLl9iYWNrcHJlc3N1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VJbml0aWFsaXplKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZUluaXRpYWxpemVBc1Jlc29sdmVkKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlckNsb3NlZFByb21pc2VJbml0aWFsaXplKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09ICdlcnJvcmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZUluaXRpYWxpemVBc1JlamVjdGVkKHRoaXMsIHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWR5UHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlckNsb3NlZFByb21pc2VJbml0aWFsaXplKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VJbml0aWFsaXplQXNSZXNvbHZlZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlckNsb3NlZFByb21pc2VJbml0aWFsaXplQXNSZXNvbHZlZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RhdGUgPT09ICdlcnJvcmVkJywgJ3N0YXRlIG11c3QgYmUgZXJyb3JlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmVkRXJyb3IgPSBzdHJlYW0uX3N0b3JlZEVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlSW5pdGlhbGl6ZUFzUmVqZWN0ZWQodGhpcywgc3RvcmVkRXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWR5UHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlckNsb3NlZFByb21pc2VJbml0aWFsaXplQXNSZWplY3RlZCh0aGlzLCBzdG9yZWRFcnJvcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xvc2VkUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Fib3J0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWJvcnQocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChkZWZhdWx0V3JpdGVyQnJhbmRDaGVja0V4Y2VwdGlvbignYWJvcnQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZGVmYXVsdFdyaXRlckxvY2tFeGNlcHRpb24oJ2Fib3J0JykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckFib3J0KHRoaXMsIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Nsb3NlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChkZWZhdWx0V3JpdGVyQnJhbmRDaGVja0V4Y2VwdGlvbignY2xvc2UnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChkZWZhdWx0V3JpdGVyTG9ja0V4Y2VwdGlvbignY2xvc2UnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoV3JpdGFibGVTdHJlYW1DbG9zZVF1ZXVlZE9ySW5GbGlnaHQoc3RyZWFtKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ2Nhbm5vdCBjbG9zZSBhbiBhbHJlYWR5LWNsb3Npbmcgc3RyZWFtJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckNsb3NlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdyZWxlYXNlTG9jaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbGVhc2VMb2NrKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBkZWZhdWx0V3JpdGVyQnJhbmRDaGVja0V4Y2VwdGlvbigncmVsZWFzZUxvY2snKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSB0aGlzLl9vd25lcldyaXRhYmxlU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fd3JpdGVyICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJSZWxlYXNlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICd3cml0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHdyaXRlKGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChkZWZhdWx0V3JpdGVyQnJhbmRDaGVja0V4Y2VwdGlvbignd3JpdGUnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZGVmYXVsdFdyaXRlckxvY2tFeGNlcHRpb24oJ3dyaXRlIHRvJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcldyaXRlKHRoaXMsIGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnY2xvc2VkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGRlZmF1bHRXcml0ZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdjbG9zZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvc2VkUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnZGVzaXJlZFNpemUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBkZWZhdWx0V3JpdGVyQnJhbmRDaGVja0V4Y2VwdGlvbignZGVzaXJlZFNpemUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vd25lcldyaXRhYmxlU3RyZWFtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGRlZmF1bHRXcml0ZXJMb2NrRXhjZXB0aW9uKCdkZXNpcmVkU2l6ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckdldERlc2lyZWRTaXplKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdyZWFkeScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChkZWZhdWx0V3JpdGVyQnJhbmRDaGVja0V4Y2VwdGlvbigncmVhZHknKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVhZHlQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElzV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHlwZUlzT2JqZWN0KHgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnX293bmVyV3JpdGFibGVTdHJlYW0nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJBYm9ydCh3cml0ZXIsIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHdyaXRlci5fb3duZXJXcml0YWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0gIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV3JpdGFibGVTdHJlYW1BYm9ydChzdHJlYW0sIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJDbG9zZSh3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSB3cml0ZXIuX293bmVyV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RyZWFtLl9zdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnY2xvc2VkJyB8fCBzdGF0ZSA9PT0gJ2Vycm9yZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1RoZSBzdHJlYW0gKGluICcgKyBzdGF0ZSArICcgc3RhdGUpIGlzIG5vdCBpbiB0aGUgd3JpdGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBjbG9zZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdGF0ZSA9PT0gJ3dyaXRhYmxlJyB8fCBzdGF0ZSA9PT0gJ2Vycm9yaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoV3JpdGFibGVTdHJlYW1DbG9zZVF1ZXVlZE9ySW5GbGlnaHQoc3RyZWFtKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsb3NlUmVxdWVzdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Jlc29sdmU6IHJlc29sdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWplY3Q6IHJlamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9jbG9zZVJlcXVlc3QgPSBjbG9zZVJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fYmFja3ByZXNzdXJlID09PSB0cnVlICYmIHN0YXRlID09PSAnd3JpdGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZVJlc29sdmUod3JpdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsb3NlKHN0cmVhbS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyQ2xvc2VXaXRoRXJyb3JQcm9wYWdhdGlvbih3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSB3cml0ZXIuX293bmVyV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RyZWFtLl9zdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0KHN0cmVhbSkgPT09IHRydWUgfHwgc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChzdHJlYW0uX3N0b3JlZEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0YXRlID09PSAnd3JpdGFibGUnIHx8IHN0YXRlID09PSAnZXJyb3JpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJDbG9zZSh3cml0ZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyRW5zdXJlQ2xvc2VkUHJvbWlzZVJlamVjdGVkKHdyaXRlciwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3cml0ZXIuX2Nsb3NlZFByb21pc2VTdGF0ZSA9PT0gJ3BlbmRpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlckNsb3NlZFByb21pc2VSZWplY3Qod3JpdGVyLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlUmVzZXRUb1JlamVjdGVkKHdyaXRlciwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2UuY2F0Y2goZnVuY3Rpb24gKCkge30pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyRW5zdXJlUmVhZHlQcm9taXNlUmVqZWN0ZWQod3JpdGVyLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdyaXRlci5fcmVhZHlQcm9taXNlU3RhdGUgPT09ICdwZW5kaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VSZWplY3Qod3JpdGVyLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VSZXNldFRvUmVqZWN0ZWQod3JpdGVyLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckdldERlc2lyZWRTaXplKHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHdyaXRlci5fb3duZXJXcml0YWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0cmVhbS5fc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2Vycm9yZWQnIHx8IHN0YXRlID09PSAnZXJyb3JpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZShzdHJlYW0uX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJSZWxlYXNlKHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHdyaXRlci5fb3duZXJXcml0YWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0gIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl93cml0ZXIgPT09IHdyaXRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVsZWFzZWRFcnJvciA9IG5ldyBUeXBlRXJyb3IoJ1dyaXRlciB3YXMgcmVsZWFzZWQgYW5kIGNhbiBubyBsb25nZXIgYmUgdXNlZCB0byBtb25pdG9yIHRoZSBzdHJlYW1cXCdzIGNsb3NlZG5lc3MnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckVuc3VyZVJlYWR5UHJvbWlzZVJlamVjdGVkKHdyaXRlciwgcmVsZWFzZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJFbnN1cmVDbG9zZWRQcm9taXNlUmVqZWN0ZWQod3JpdGVyLCByZWxlYXNlZEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fd3JpdGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9vd25lcldyaXRhYmxlU3RyZWFtID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyV3JpdGUod3JpdGVyLCBjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHdyaXRlci5fb3duZXJXcml0YWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0gIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udHJvbGxlciA9IHN0cmVhbS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rU2l6ZSA9IFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXRDaHVua1NpemUoY29udHJvbGxlciwgY2h1bmspO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtICE9PSB3cml0ZXIuX293bmVyV3JpdGFibGVTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZGVmYXVsdFdyaXRlckxvY2tFeGNlcHRpb24oJ3dyaXRlIHRvJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdHJlYW0uX3N0YXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChzdHJlYW0uX3N0b3JlZEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0KHN0cmVhbSkgPT09IHRydWUgfHwgc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1RoZSBzdHJlYW0gaXMgY2xvc2luZyBvciBjbG9zZWQgYW5kIGNhbm5vdCBiZSB3cml0dGVuIHRvJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdlcnJvcmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qoc3RyZWFtLl9zdG9yZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdGF0ZSA9PT0gJ3dyaXRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IFdyaXRhYmxlU3RyZWFtQWRkV3JpdGVSZXF1ZXN0KHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyV3JpdGUoY29udHJvbGxlciwgY2h1bmssIGNodW5rU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcihzdHJlYW0sIHVuZGVybHlpbmdTaW5rLCBzaXplLCBoaWdoV2F0ZXJNYXJrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzV3JpdGFibGVTdHJlYW0oc3RyZWFtKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBjYW4gb25seSBiZSBjb25zdHJ1Y3RlZCB3aXRoIGEgV3JpdGFibGVTdHJlYW0gaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGluc3RhbmNlcyBjYW4gb25seSBiZSBjcmVhdGVkIGJ5IHRoZSBXcml0YWJsZVN0cmVhbSBjb25zdHJ1Y3RvcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91bmRlcmx5aW5nU2luayA9IHVuZGVybHlpbmdTaW5rO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXVlVG90YWxTaXplID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0UXVldWUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3JtYWxpemVkU3RyYXRlZ3kgPSBWYWxpZGF0ZUFuZE5vcm1hbGl6ZVF1ZXVpbmdTdHJhdGVneShzaXplLCBoaWdoV2F0ZXJNYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJhdGVneVNpemUgPSBub3JtYWxpemVkU3RyYXRlZ3kuc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJhdGVneUhXTSA9IG5vcm1hbGl6ZWRTdHJhdGVneS5oaWdoV2F0ZXJNYXJrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYWNrcHJlc3N1cmUgPSBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0QmFja3ByZXNzdXJlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtVXBkYXRlQmFja3ByZXNzdXJlKHN0cmVhbSwgYmFja3ByZXNzdXJlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBlcnJvcihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZS5lcnJvciBjYW4gb25seSBiZSB1c2VkIG9uIGEgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtLl9zdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT09ICd3cml0YWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcih0aGlzLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnX19hYm9ydFN0ZXBzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX19hYm9ydFN0ZXBzKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZUludm9rZU9yTm9vcCh0aGlzLl91bmRlcmx5aW5nU2luaywgJ2Fib3J0JywgW3JlYXNvbl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdfX2Vycm9yU3RlcHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfX2Vycm9yU3RlcHMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0UXVldWUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ19fc3RhcnRTdGVwcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9fc3RhcnRTdGVwcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRSZXN1bHQgPSBJbnZva2VPck5vb3AodGhpcy5fdW5kZXJseWluZ1NpbmssICdzdGFydCcsIFt0aGlzXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSB0aGlzLl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShzdGFydFJlc3VsdCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3dyaXRhYmxlJyB8fCBzdHJlYW0uX3N0YXRlID09PSAnZXJyb3JpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJBZHZhbmNlUXVldWVJZk5lZWRlZChfdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3dyaXRhYmxlJyB8fCBzdHJlYW0uX3N0YXRlID09PSAnZXJyb3JpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVhbFdpdGhSZWplY3Rpb24oc3RyZWFtLCByKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2gocmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsb3NlKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEVucXVldWVWYWx1ZVdpdGhTaXplKGNvbnRyb2xsZXIsICdjbG9zZScsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckFkdmFuY2VRdWV1ZUlmTmVlZGVkKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldENodW5rU2l6ZShjb250cm9sbGVyLCBjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmF0ZWd5U2l6ZSA9IGNvbnRyb2xsZXIuX3N0cmF0ZWd5U2l6ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmF0ZWd5U2l6ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmF0ZWd5U2l6ZShjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChjaHVua1NpemVFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9ySWZOZWVkZWQoY29udHJvbGxlciwgY2h1bmtTaXplRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemUoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuX3N0cmF0ZWd5SFdNIC0gY29udHJvbGxlci5fcXVldWVUb3RhbFNpemU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyV3JpdGUoY29udHJvbGxlciwgY2h1bmssIGNodW5rU2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdyaXRlUmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rOiBjaHVua1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnF1ZXVlVmFsdWVXaXRoU2l6ZShjb250cm9sbGVyLCB3cml0ZVJlY29yZCwgY2h1bmtTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVucXVldWVFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9ySWZOZWVkZWQoY29udHJvbGxlciwgZW5xdWV1ZUUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0KHN0cmVhbSkgPT09IGZhbHNlICYmIHN0cmVhbS5fc3RhdGUgPT09ICd3cml0YWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFja3ByZXNzdXJlID0gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldEJhY2twcmVzc3VyZShjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbVVwZGF0ZUJhY2twcmVzc3VyZShzdHJlYW0sIGJhY2twcmVzc3VyZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJBZHZhbmNlUXVldWVJZk5lZWRlZChjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElzV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcih4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXR5cGVJc09iamVjdCh4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ191bmRlcmx5aW5nU2luaycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJBZHZhbmNlUXVldWVJZk5lZWRlZChjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gY29udHJvbGxlci5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fc3RhcnRlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX2luRmxpZ2h0V3JpdGVSZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0cmVhbS5fc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2Nsb3NlZCcgfHwgc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnZXJyb3JpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1GaW5pc2hFcnJvcmluZyhzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX3F1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdyaXRlUmVjb3JkID0gUGVla1F1ZXVlVmFsdWUoY29udHJvbGxlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3cml0ZVJlY29yZCA9PT0gJ2Nsb3NlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJQcm9jZXNzQ2xvc2UoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJQcm9jZXNzV3JpdGUoY29udHJvbGxlciwgd3JpdGVSZWNvcmQuY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9ySWZOZWVkZWQoY29udHJvbGxlciwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW0uX3N0YXRlID09PSAnd3JpdGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yKGNvbnRyb2xsZXIsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJQcm9jZXNzQ2xvc2UoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtTWFya0Nsb3NlUmVxdWVzdEluRmxpZ2h0KHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBEZXF1ZXVlVmFsdWUoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoY29udHJvbGxlci5fcXVldWUubGVuZ3RoID09PSAwLCAncXVldWUgbXVzdCBiZSBlbXB0eSBvbmNlIHRoZSBmaW5hbCB3cml0ZSByZWNvcmQgaXMgZGVxdWV1ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaW5rQ2xvc2VQcm9taXNlID0gUHJvbWlzZUludm9rZU9yTm9vcChjb250cm9sbGVyLl91bmRlcmx5aW5nU2luaywgJ2Nsb3NlJywgW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2lua0Nsb3NlUHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbUZpbmlzaEluRmxpZ2h0Q2xvc2Uoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbUZpbmlzaEluRmxpZ2h0Q2xvc2VXaXRoRXJyb3Ioc3RyZWFtLCByZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2gocmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJQcm9jZXNzV3JpdGUoY29udHJvbGxlciwgY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbU1hcmtGaXJzdFdyaXRlUmVxdWVzdEluRmxpZ2h0KHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2lua1dyaXRlUHJvbWlzZSA9IFByb21pc2VJbnZva2VPck5vb3AoY29udHJvbGxlci5fdW5kZXJseWluZ1NpbmssICd3cml0ZScsIFtjaHVuaywgY29udHJvbGxlcl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2lua1dyaXRlUHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbUZpbmlzaEluRmxpZ2h0V3JpdGUoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdHJlYW0uX3N0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdGF0ZSA9PT0gJ3dyaXRhYmxlJyB8fCBzdGF0ZSA9PT0gJ2Vycm9yaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVxdWV1ZVZhbHVlKGNvbnRyb2xsZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0KHN0cmVhbSkgPT09IGZhbHNlICYmIHN0YXRlID09PSAnd3JpdGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYWNrcHJlc3N1cmUgPSBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0QmFja3ByZXNzdXJlKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbVVwZGF0ZUJhY2twcmVzc3VyZShzdHJlYW0sIGJhY2twcmVzc3VyZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckFkdmFuY2VRdWV1ZUlmTmVlZGVkKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRmluaXNoSW5GbGlnaHRXcml0ZVdpdGhFcnJvcihzdHJlYW0sIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChyZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldEJhY2twcmVzc3VyZShjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzaXJlZFNpemUgPSBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemUoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVzaXJlZFNpemUgPD0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcihjb250cm9sbGVyLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX3N0YXRlID09PSAnd3JpdGFibGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtU3RhcnRFcnJvcmluZyhzdHJlYW0sIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHN0cmVhbUJyYW5kQ2hlY2tFeGNlcHRpb24obmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ1dyaXRhYmxlU3RyZWFtLnByb3RvdHlwZS4nICsgbmFtZSArICcgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFdyaXRhYmxlU3RyZWFtJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0V3JpdGVyQnJhbmRDaGVja0V4Y2VwdGlvbihuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyLnByb3RvdHlwZS4nICsgbmFtZSArICcgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFdyaXRlckxvY2tFeGNlcHRpb24obmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCAnICsgbmFtZSArICcgYSBzdHJlYW0gdXNpbmcgYSByZWxlYXNlZCB3cml0ZXInKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZSh3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VTdGF0ZSA9ICdwZW5kaW5nJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFdyaXRlckNsb3NlZFByb21pc2VJbml0aWFsaXplQXNSZWplY3RlZCh3cml0ZXIsIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlID0gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZVN0YXRlID0gJ3JlamVjdGVkJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZUFzUmVzb2x2ZWQod3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZVN0YXRlID0gJ3Jlc29sdmVkJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlUmVqZWN0KHdyaXRlciwgcmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUgIT09IHVuZGVmaW5lZCwgJ3dyaXRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlICE9PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ICE9PSB1bmRlZmluZWQsICd3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ICE9PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh3cml0ZXIuX2Nsb3NlZFByb21pc2VTdGF0ZSA9PT0gJ3BlbmRpbmcnLCAnd3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgaXMgcGVuZGluZycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0KHJlYXNvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZVN0YXRlID0gJ3JlamVjdGVkJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlUmVzZXRUb1JlamVjdGVkKHdyaXRlciwgcmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUgPT09IHVuZGVmaW5lZCwgJ3dyaXRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlID09PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ID09PSB1bmRlZmluZWQsICd3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ID09PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh3cml0ZXIuX2Nsb3NlZFByb21pc2VTdGF0ZSAhPT0gJ3BlbmRpbmcnLCAnd3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgaXMgbm90IHBlbmRpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZSA9IFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VTdGF0ZSA9ICdyZWplY3RlZCc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZVJlc29sdmUod3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUgIT09IHVuZGVmaW5lZCwgJ3dyaXRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlICE9PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ICE9PSB1bmRlZmluZWQsICd3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ICE9PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh3cml0ZXIuX2Nsb3NlZFByb21pc2VTdGF0ZSA9PT0gJ3BlbmRpbmcnLCAnd3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgaXMgcGVuZGluZycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSh1bmRlZmluZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VTdGF0ZSA9ICdyZXNvbHZlZCc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlSW5pdGlhbGl6ZSh3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2VTdGF0ZSA9ICdwZW5kaW5nJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VJbml0aWFsaXplQXNSZWplY3RlZCh3cml0ZXIsIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2UgPSBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlU3RhdGUgPSAncmVqZWN0ZWQnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZUluaXRpYWxpemVBc1Jlc29sdmVkKHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZVN0YXRlID0gJ2Z1bGZpbGxlZCc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlUmVqZWN0KHdyaXRlciwgcmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9yZWFkeVByb21pc2VfcmVzb2x2ZSAhPT0gdW5kZWZpbmVkLCAnd3JpdGVyLl9yZWFkeVByb21pc2VfcmVzb2x2ZSAhPT0gdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0ICE9PSB1bmRlZmluZWQsICd3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QgIT09IHVuZGVmaW5lZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QocmVhc29uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlU3RhdGUgPSAncmVqZWN0ZWQnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZVJlc2V0KHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHdyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgPT09IHVuZGVmaW5lZCwgJ3dyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgPT09IHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHdyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCA9PT0gdW5kZWZpbmVkLCAnd3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0ID09PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2VTdGF0ZSA9ICdwZW5kaW5nJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VSZXNldFRvUmVqZWN0ZWQod3JpdGVyLCByZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlID09PSB1bmRlZmluZWQsICd3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlID09PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QgPT09IHVuZGVmaW5lZCwgJ3dyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCA9PT0gdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZSA9IFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZVN0YXRlID0gJ3JlamVjdGVkJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VSZXNvbHZlKHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHdyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgIT09IHVuZGVmaW5lZCwgJ3dyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgIT09IHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHdyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCAhPT0gdW5kZWZpbmVkLCAnd3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0ICE9PSB1bmRlZmluZWQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2VfcmVzb2x2ZSh1bmRlZmluZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2VTdGF0ZSA9ICdmdWxmaWxsZWQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuICAgICAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgX3JlcXVpcmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgSXNGaW5pdGVOb25OZWdhdGl2ZU51bWJlciA9IF9yZXF1aXJlLklzRmluaXRlTm9uTmVnYXRpdmVOdW1iZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXF1aXJlMiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMSksXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgPSBfcmVxdWlyZTIuYXNzZXJ0O1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuRGVxdWV1ZVZhbHVlID0gZnVuY3Rpb24gKGNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KCdfcXVldWUnIGluIGNvbnRhaW5lciAmJiAnX3F1ZXVlVG90YWxTaXplJyBpbiBjb250YWluZXIsICdTcGVjLWxldmVsIGZhaWx1cmU6IERlcXVldWVWYWx1ZSBzaG91bGQgb25seSBiZSB1c2VkIG9uIGNvbnRhaW5lcnMgd2l0aCBbW3F1ZXVlXV0gYW5kIFtbcXVldWVUb3RhbFNpemVdXS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250YWluZXIuX3F1ZXVlLmxlbmd0aCA+IDAsICdTcGVjLWxldmVsIGZhaWx1cmU6IHNob3VsZCBuZXZlciBkZXF1ZXVlIGZyb20gYW4gZW1wdHkgcXVldWUuJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWlyID0gY29udGFpbmVyLl9xdWV1ZS5zaGlmdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuX3F1ZXVlVG90YWxTaXplIC09IHBhaXIuc2l6ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lci5fcXVldWVUb3RhbFNpemUgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLl9xdWV1ZVRvdGFsU2l6ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYWlyLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuRW5xdWV1ZVZhbHVlV2l0aFNpemUgPSBmdW5jdGlvbiAoY29udGFpbmVyLCB2YWx1ZSwgc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KCdfcXVldWUnIGluIGNvbnRhaW5lciAmJiAnX3F1ZXVlVG90YWxTaXplJyBpbiBjb250YWluZXIsICdTcGVjLWxldmVsIGZhaWx1cmU6IEVucXVldWVWYWx1ZVdpdGhTaXplIHNob3VsZCBvbmx5IGJlIHVzZWQgb24gY29udGFpbmVycyB3aXRoIFtbcXVldWVdXSBhbmQgJyArICdbW3F1ZXVlVG90YWxTaXplXV0uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gTnVtYmVyKHNpemUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUlzRmluaXRlTm9uTmVnYXRpdmVOdW1iZXIoc2l6ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignU2l6ZSBtdXN0IGJlIGEgZmluaXRlLCBub24tTmFOLCBub24tbmVnYXRpdmUgbnVtYmVyLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuX3F1ZXVlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBzaXplXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLl9xdWV1ZVRvdGFsU2l6ZSArPSBzaXplO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuUGVla1F1ZXVlVmFsdWUgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoJ19xdWV1ZScgaW4gY29udGFpbmVyICYmICdfcXVldWVUb3RhbFNpemUnIGluIGNvbnRhaW5lciwgJ1NwZWMtbGV2ZWwgZmFpbHVyZTogUGVla1F1ZXVlVmFsdWUgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiBjb250YWluZXJzIHdpdGggW1txdWV1ZV1dIGFuZCBbW3F1ZXVlVG90YWxTaXplXV0uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoY29udGFpbmVyLl9xdWV1ZS5sZW5ndGggPiAwLCAnU3BlYy1sZXZlbCBmYWlsdXJlOiBzaG91bGQgbmV2ZXIgcGVlayBhdCBhbiBlbXB0eSBxdWV1ZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWlyID0gY29udGFpbmVyLl9xdWV1ZVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYWlyLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuUmVzZXRRdWV1ZSA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCgnX3F1ZXVlJyBpbiBjb250YWluZXIgJiYgJ19xdWV1ZVRvdGFsU2l6ZScgaW4gY29udGFpbmVyLCAnU3BlYy1sZXZlbCBmYWlsdXJlOiBSZXNldFF1ZXVlIHNob3VsZCBvbmx5IGJlIHVzZWQgb24gY29udGFpbmVycyB3aXRoIFtbcXVldWVdXSBhbmQgW1txdWV1ZVRvdGFsU2l6ZV1dLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLl9xdWV1ZSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLl9xdWV1ZVRvdGFsU2l6ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuICAgICAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgX3JlcXVpcmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlCdWZmZXJDb3B5ID0gX3JlcXVpcmUuQXJyYXlCdWZmZXJDb3B5LFxuICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IF9yZXF1aXJlLkNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBJc0Zpbml0ZU5vbk5lZ2F0aXZlTnVtYmVyID0gX3JlcXVpcmUuSXNGaW5pdGVOb25OZWdhdGl2ZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIEludm9rZU9yTm9vcCA9IF9yZXF1aXJlLkludm9rZU9yTm9vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2VJbnZva2VPck5vb3AgPSBfcmVxdWlyZS5Qcm9taXNlSW52b2tlT3JOb29wLFxuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmZXJBcnJheUJ1ZmZlciA9IF9yZXF1aXJlLlRyYW5zZmVyQXJyYXlCdWZmZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0ZUFuZE5vcm1hbGl6ZVF1ZXVpbmdTdHJhdGVneSA9IF9yZXF1aXJlLlZhbGlkYXRlQW5kTm9ybWFsaXplUXVldWluZ1N0cmF0ZWd5LFxuICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGVBbmROb3JtYWxpemVIaWdoV2F0ZXJNYXJrID0gX3JlcXVpcmUuVmFsaWRhdGVBbmROb3JtYWxpemVIaWdoV2F0ZXJNYXJrO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBfcmVxdWlyZTIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQXJyYXlGcm9tTGlzdCA9IF9yZXF1aXJlMi5jcmVhdGVBcnJheUZyb21MaXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRGF0YVByb3BlcnR5ID0gX3JlcXVpcmUyLmNyZWF0ZURhdGFQcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVJc09iamVjdCA9IF9yZXF1aXJlMi50eXBlSXNPYmplY3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXF1aXJlMyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMSksXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgPSBfcmVxdWlyZTMuYXNzZXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uID0gX3JlcXVpcmUzLnJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgX3JlcXVpcmU0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIERlcXVldWVWYWx1ZSA9IF9yZXF1aXJlNC5EZXF1ZXVlVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBFbnF1ZXVlVmFsdWVXaXRoU2l6ZSA9IF9yZXF1aXJlNC5FbnF1ZXVlVmFsdWVXaXRoU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0UXVldWUgPSBfcmVxdWlyZTQuUmVzZXRRdWV1ZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgX3JlcXVpcmU1ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEFjcXVpcmVXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIgPSBfcmVxdWlyZTUuQWNxdWlyZVdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIElzV3JpdGFibGVTdHJlYW0gPSBfcmVxdWlyZTUuSXNXcml0YWJsZVN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIElzV3JpdGFibGVTdHJlYW1Mb2NrZWQgPSBfcmVxdWlyZTUuSXNXcml0YWJsZVN0cmVhbUxvY2tlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtQWJvcnQgPSBfcmVxdWlyZTUuV3JpdGFibGVTdHJlYW1BYm9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckNsb3NlV2l0aEVycm9yUHJvcGFnYXRpb24gPSBfcmVxdWlyZTUuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyQ2xvc2VXaXRoRXJyb3JQcm9wYWdhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlclJlbGVhc2UgPSBfcmVxdWlyZTUuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyUmVsZWFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcldyaXRlID0gX3JlcXVpcmU1LldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcldyaXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1DbG9zZVF1ZXVlZE9ySW5GbGlnaHQgPSBfcmVxdWlyZTUuV3JpdGFibGVTdHJlYW1DbG9zZVF1ZXVlZE9ySW5GbGlnaHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFJlYWRhYmxlU3RyZWFtID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW0oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuZGVybHlpbmdTb3VyY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gX3JlZi5zaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoV2F0ZXJNYXJrID0gX3JlZi5oaWdoV2F0ZXJNYXJrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlYWRhYmxlU3RyZWFtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ3JlYWRhYmxlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcmVkRXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlzdHVyYmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gdW5kZXJseWluZ1NvdXJjZS50eXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlU3RyaW5nID0gU3RyaW5nKHR5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVTdHJpbmcgPT09ICdieXRlcycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhpZ2hXYXRlck1hcmsgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaFdhdGVyTWFyayA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIgPSBuZXcgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcih0aGlzLCB1bmRlcmx5aW5nU291cmNlLCBoaWdoV2F0ZXJNYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGlnaFdhdGVyTWFyayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoV2F0ZXJNYXJrID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlciA9IG5ldyBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMsIHVuZGVybHlpbmdTb3VyY2UsIHNpemUsIGhpZ2hXYXRlck1hcmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHR5cGUgaXMgc3BlY2lmaWVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoUmVhZGFibGVTdHJlYW0sIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2FuY2VsKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbSh0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uKCdjYW5jZWwnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbUxvY2tlZCh0aGlzKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYW5jZWwgYSBzdHJlYW0gdGhhdCBhbHJlYWR5IGhhcyBhIHJlYWRlcicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbUNhbmNlbCh0aGlzLCByZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdnZXRSZWFkZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZWFkZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gX3JlZjIubW9kZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbSh0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHN0cmVhbUJyYW5kQ2hlY2tFeGNlcHRpb24oJ2dldFJlYWRlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFjcXVpcmVSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gU3RyaW5nKG1vZGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RlID09PSAnYnlvYicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBY3F1aXJlUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgbW9kZSBpcyBzcGVjaWZpZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAncGlwZVRocm91Z2gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwaXBlVGhyb3VnaChfcmVmMywgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd3JpdGFibGUgPSBfcmVmMy53cml0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRhYmxlID0gX3JlZjMucmVhZGFibGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlID0gdGhpcy5waXBlVG8od3JpdGFibGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZklzT2JqZWN0QW5kSGFzQVByb21pc2VJc0hhbmRsZWRJbnRlcm5hbFNsb3RTZXRQcm9taXNlSXNIYW5kbGVkVG9UcnVlKHByb21pc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGFibGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3BpcGVUbycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHBpcGVUbyhkZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWY0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZlbnRDbG9zZSA9IF9yZWY0LnByZXZlbnRDbG9zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZlbnRBYm9ydCA9IF9yZWY0LnByZXZlbnRBYm9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZlbnRDYW5jZWwgPSBfcmVmNC5wcmV2ZW50Q2FuY2VsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHN0cmVhbUJyYW5kQ2hlY2tFeGNlcHRpb24oJ3BpcGVUbycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtKGRlc3QpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlU3RyZWFtLnByb3RvdHlwZS5waXBlVG9cXCdzIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBXcml0YWJsZVN0cmVhbScpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZlbnRDbG9zZSA9IEJvb2xlYW4ocHJldmVudENsb3NlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmVudEFib3J0ID0gQm9vbGVhbihwcmV2ZW50QWJvcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50Q2FuY2VsID0gQm9vbGVhbihwcmV2ZW50Q2FuY2VsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbUxvY2tlZCh0aGlzKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlU3RyZWFtLnByb3RvdHlwZS5waXBlVG8gY2Fubm90IGJlIHVzZWQgb24gYSBsb2NrZWQgUmVhZGFibGVTdHJlYW0nKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbUxvY2tlZChkZXN0KSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlU3RyZWFtLnByb3RvdHlwZS5waXBlVG8gY2Fubm90IGJlIHVzZWQgb24gYSBsb2NrZWQgV3JpdGFibGVTdHJlYW0nKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGVyID0gQWNxdWlyZVJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdyaXRlciA9IEFjcXVpcmVXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIoZGVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaHV0dGluZ0Rvd24gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRXcml0ZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcGlwZUxvb3AoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFdyaXRlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2h1dHRpbmdEb3duID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyLl9yZWFkeVByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXJSZWFkKHJlYWRlcikudGhlbihmdW5jdGlvbiAoX3JlZjUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IF9yZWY1LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBfcmVmNS5kb25lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9uZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFdyaXRlID0gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyV3JpdGUod3JpdGVyLCB2YWx1ZSkuY2F0Y2goZnVuY3Rpb24gKCkge30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKHBpcGVMb29wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNPckJlY29tZXNFcnJvcmVkKF90aGlzLCByZWFkZXIuX2Nsb3NlZFByb21pc2UsIGZ1bmN0aW9uIChzdG9yZWRFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2ZW50QWJvcnQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNodXRkb3duV2l0aEFjdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV3JpdGFibGVTdHJlYW1BYm9ydChkZXN0LCBzdG9yZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRydWUsIHN0b3JlZEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaHV0ZG93bih0cnVlLCBzdG9yZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc09yQmVjb21lc0Vycm9yZWQoZGVzdCwgd3JpdGVyLl9jbG9zZWRQcm9taXNlLCBmdW5jdGlvbiAoc3RvcmVkRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmVudENhbmNlbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGRvd25XaXRoQWN0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbUNhbmNlbChfdGhpcywgc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0cnVlLCBzdG9yZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGRvd24odHJ1ZSwgc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNPckJlY29tZXNDbG9zZWQoX3RoaXMsIHJlYWRlci5fY2xvc2VkUHJvbWlzZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2ZW50Q2xvc2UgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNodXRkb3duV2l0aEFjdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyQ2xvc2VXaXRoRXJyb3JQcm9wYWdhdGlvbih3cml0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaHV0ZG93bigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoV3JpdGFibGVTdHJlYW1DbG9zZVF1ZXVlZE9ySW5GbGlnaHQoZGVzdCkgPT09IHRydWUgfHwgZGVzdC5fc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc3RDbG9zZWQgPSBuZXcgVHlwZUVycm9yKCd0aGUgZGVzdGluYXRpb24gd3JpdGFibGUgc3RyZWFtIGNsb3NlZCBiZWZvcmUgYWxsIGRhdGEgY291bGQgYmUgcGlwZWQgdG8gaXQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2ZW50Q2FuY2VsID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaHV0ZG93bldpdGhBY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtQ2FuY2VsKF90aGlzLCBkZXN0Q2xvc2VkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdHJ1ZSwgZGVzdENsb3NlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGRvd24odHJ1ZSwgZGVzdENsb3NlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlTG9vcCgpLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50V3JpdGUgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb24oZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB3YWl0Rm9yV3JpdGVzVG9GaW5pc2goKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9sZEN1cnJlbnRXcml0ZSA9IGN1cnJlbnRXcml0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFdyaXRlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2xkQ3VycmVudFdyaXRlICE9PSBjdXJyZW50V3JpdGUgPyB3YWl0Rm9yV3JpdGVzVG9GaW5pc2goKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNPckJlY29tZXNFcnJvcmVkKHN0cmVhbSwgcHJvbWlzZSwgYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24oc3RyZWFtLl9zdG9yZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5jYXRjaChhY3Rpb24pLmNhdGNoKHJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc09yQmVjb21lc0Nsb3NlZChzdHJlYW0sIHByb21pc2UsIGFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3N0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnRoZW4oYWN0aW9uKS5jYXRjaChyZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc2h1dGRvd25XaXRoQWN0aW9uKGFjdGlvbiwgb3JpZ2luYWxJc0Vycm9yLCBvcmlnaW5hbEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNodXR0aW5nRG93biA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1dHRpbmdEb3duID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXN0Ll9zdGF0ZSA9PT0gJ3dyaXRhYmxlJyAmJiBXcml0YWJsZVN0cmVhbUNsb3NlUXVldWVkT3JJbkZsaWdodChkZXN0KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdEZvcldyaXRlc1RvRmluaXNoKCkudGhlbihkb1RoZVJlc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvVGhlUmVzdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRvVGhlUmVzdCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmluYWxpemUob3JpZ2luYWxJc0Vycm9yLCBvcmlnaW5hbEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKG5ld0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmluYWxpemUodHJ1ZSwgbmV3RXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChyZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc2h1dGRvd24oaXNFcnJvciwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2h1dHRpbmdEb3duID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaHV0dGluZ0Rvd24gPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc3QuX3N0YXRlID09PSAnd3JpdGFibGUnICYmIFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0KGRlc3QpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0Rm9yV3JpdGVzVG9GaW5pc2goKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaW5hbGl6ZShpc0Vycm9yLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKHJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoaXNFcnJvciwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZmluYWxpemUoaXNFcnJvciwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJSZWxlYXNlKHdyaXRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1SZWFkZXJHZW5lcmljUmVsZWFzZShyZWFkZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAndGVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdGVlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbSh0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHN0cmVhbUJyYW5kQ2hlY2tFeGNlcHRpb24oJ3RlZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJyYW5jaGVzID0gUmVhZGFibGVTdHJlYW1UZWUodGhpcywgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlQXJyYXlGcm9tTGlzdChicmFuY2hlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2xvY2tlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgc3RyZWFtQnJhbmRDaGVja0V4Y2VwdGlvbignbG9ja2VkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXNSZWFkYWJsZVN0cmVhbUxvY2tlZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW06IFJlYWRhYmxlU3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgSXNSZWFkYWJsZVN0cmVhbURpc3R1cmJlZDogSXNSZWFkYWJsZVN0cmVhbURpc3R1cmJlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZTogUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsb3NlLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVucXVldWU6IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFbnF1ZXVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yOiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemU6IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFjcXVpcmVSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlcihzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQWNxdWlyZVJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcihzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc1JlYWRhYmxlU3RyZWFtKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHlwZUlzT2JqZWN0KHgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElzUmVhZGFibGVTdHJlYW1EaXN0dXJiZWQoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoSXNSZWFkYWJsZVN0cmVhbShzdHJlYW0pID09PSB0cnVlLCAnSXNSZWFkYWJsZVN0cmVhbURpc3R1cmJlZCBzaG91bGQgb25seSBiZSB1c2VkIG9uIGtub3duIHJlYWRhYmxlIHN0cmVhbXMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJlYW0uX2Rpc3R1cmJlZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElzUmVhZGFibGVTdHJlYW1Mb2NrZWQoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoSXNSZWFkYWJsZVN0cmVhbShzdHJlYW0pID09PSB0cnVlLCAnSXNSZWFkYWJsZVN0cmVhbUxvY2tlZCBzaG91bGQgb25seSBiZSB1c2VkIG9uIGtub3duIHJlYWRhYmxlIHN0cmVhbXMnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fcmVhZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1UZWUoc3RyZWFtLCBjbG9uZUZvckJyYW5jaDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChJc1JlYWRhYmxlU3RyZWFtKHN0cmVhbSkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHR5cGVvZiBjbG9uZUZvckJyYW5jaDIgPT09ICdib29sZWFuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGVyID0gQWNxdWlyZVJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcihzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlZVN0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlZE9yRXJyb3JlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsZWQxOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxlZDI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24yOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZWVTdGF0ZS5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWVTdGF0ZS5fcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwdWxsID0gY3JlYXRlX1JlYWRhYmxlU3RyZWFtVGVlUHVsbEZ1bmN0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwdWxsLl9yZWFkZXIgPSByZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBwdWxsLl90ZWVTdGF0ZSA9IHRlZVN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHVsbC5fY2xvbmVGb3JCcmFuY2gyID0gY2xvbmVGb3JCcmFuY2gyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbmNlbDEgPSBjcmVhdGVfUmVhZGFibGVTdHJlYW1UZWVCcmFuY2gxQ2FuY2VsRnVuY3Rpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbDEuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbDEuX3RlZVN0YXRlID0gdGVlU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FuY2VsMiA9IGNyZWF0ZV9SZWFkYWJsZVN0cmVhbVRlZUJyYW5jaDJDYW5jZWxGdW5jdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsMi5fc3RyZWFtID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsMi5fdGVlU3RhdGUgPSB0ZWVTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bmRlcmx5aW5nU291cmNlMSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LnByb3RvdHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVEYXRhUHJvcGVydHkodW5kZXJseWluZ1NvdXJjZTEsICdwdWxsJywgcHVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVEYXRhUHJvcGVydHkodW5kZXJseWluZ1NvdXJjZTEsICdjYW5jZWwnLCBjYW5jZWwxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBicmFuY2gxU3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHVuZGVybHlpbmdTb3VyY2UxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bmRlcmx5aW5nU291cmNlMiA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LnByb3RvdHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVEYXRhUHJvcGVydHkodW5kZXJseWluZ1NvdXJjZTIsICdwdWxsJywgcHVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVEYXRhUHJvcGVydHkodW5kZXJseWluZ1NvdXJjZTIsICdjYW5jZWwnLCBjYW5jZWwyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBicmFuY2gyU3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHVuZGVybHlpbmdTb3VyY2UyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1bGwuX2JyYW5jaDEgPSBicmFuY2gxU3RyZWFtLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBwdWxsLl9icmFuY2gyID0gYnJhbmNoMlN0cmVhbS5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2UuY2F0Y2goZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVlU3RhdGUuY2xvc2VkT3JFcnJvcmVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IocHVsbC5fYnJhbmNoMSwgcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yKHB1bGwuX2JyYW5jaDIsIHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlZVN0YXRlLmNsb3NlZE9yRXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFticmFuY2gxU3RyZWFtLCBicmFuY2gyU3RyZWFtXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZV9SZWFkYWJsZVN0cmVhbVRlZVB1bGxGdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGYoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IGYuX3JlYWRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoMSA9IGYuX2JyYW5jaDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaDIgPSBmLl9icmFuY2gyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWVTdGF0ZSA9IGYuX3RlZVN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXJSZWFkKHJlYWRlcikudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0eXBlSXNPYmplY3QocmVzdWx0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvbmUgPSByZXN1bHQuZG9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHR5cGVvZiBkb25lID09PSAnYm9vbGVhbicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb25lID09PSB0cnVlICYmIHRlZVN0YXRlLmNsb3NlZE9yRXJyb3JlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZWVTdGF0ZS5jYW5jZWxlZDEgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsb3NlKGJyYW5jaDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVlU3RhdGUuY2FuY2VsZWQyID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZShicmFuY2gyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVlU3RhdGUuY2xvc2VkT3JFcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZWVTdGF0ZS5jbG9zZWRPckVycm9yZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZTEgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlMiA9IHZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZWVTdGF0ZS5jYW5jZWxlZDEgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZShicmFuY2gxLCB2YWx1ZTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlZVN0YXRlLmNhbmNlbGVkMiA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFbnF1ZXVlKGJyYW5jaDIsIHZhbHVlMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVfUmVhZGFibGVTdHJlYW1UZWVCcmFuY2gxQ2FuY2VsRnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBmLl9zdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlZVN0YXRlID0gZi5fdGVlU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVlU3RhdGUuY2FuY2VsZWQxID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWVTdGF0ZS5yZWFzb24xID0gcmVhc29uO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlZVN0YXRlLmNhbmNlbGVkMiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9zaXRlUmVhc29uID0gY3JlYXRlQXJyYXlGcm9tTGlzdChbdGVlU3RhdGUucmVhc29uMSwgdGVlU3RhdGUucmVhc29uMl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FuY2VsUmVzdWx0ID0gUmVhZGFibGVTdHJlYW1DYW5jZWwoc3RyZWFtLCBjb21wb3NpdGVSZWFzb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlZVN0YXRlLl9yZXNvbHZlKGNhbmNlbFJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlZVN0YXRlLnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlX1JlYWRhYmxlU3RyZWFtVGVlQnJhbmNoMkNhbmNlbEZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZihyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gZi5fc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWVTdGF0ZSA9IGYuX3RlZVN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlZVN0YXRlLmNhbmNlbGVkMiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVlU3RhdGUucmVhc29uMiA9IHJlYXNvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZWVTdGF0ZS5jYW5jZWxlZDEgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvc2l0ZVJlYXNvbiA9IGNyZWF0ZUFycmF5RnJvbUxpc3QoW3RlZVN0YXRlLnJlYXNvbjEsIHRlZVN0YXRlLnJlYXNvbjJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbmNlbFJlc3VsdCA9IFJlYWRhYmxlU3RyZWFtQ2FuY2VsKHN0cmVhbSwgY29tcG9zaXRlUmVhc29uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWVTdGF0ZS5fcmVzb2x2ZShjYW5jZWxSZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZWVTdGF0ZS5wcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtQWRkUmVhZEludG9SZXF1ZXN0KHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KElzUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyKHN0cmVhbS5fcmVhZGVyKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJyB8fCBzdHJlYW0uX3N0YXRlID09PSAnY2xvc2VkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZEludG9SZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVzb2x2ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlamVjdDogcmVqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fcmVhZGVyLl9yZWFkSW50b1JlcXVlc3RzLnB1c2gocmVhZEludG9SZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUFkZFJlYWRSZXF1ZXN0KHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KElzUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKHN0cmVhbS5fcmVhZGVyKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZFJlcXVlc3QgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZXNvbHZlOiByZXNvbHZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVqZWN0OiByZWplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9yZWFkZXIuX3JlYWRSZXF1ZXN0cy5wdXNoKHJlYWRSZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUNhbmNlbChzdHJlYW0sIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9kaXN0dXJiZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3N0YXRlID09PSAnZXJyb3JlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qoc3RyZWFtLl9zdG9yZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtQ2xvc2Uoc3RyZWFtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZUNhbmNlbFByb21pc2UgPSBzdHJlYW0uX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlci5fX2NhbmNlbFN0ZXBzKHJlYXNvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2VDYW5jZWxQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtQ2xvc2Uoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3N0YXRlID0gJ2Nsb3NlZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGVyID0gc3RyZWFtLl9yZWFkZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcihyZWFkZXIpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWFkZXIuX3JlYWRSZXF1ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3Jlc29sdmUgPSByZWFkZXIuX3JlYWRSZXF1ZXN0c1tpXS5fcmVzb2x2ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVzb2x2ZShDcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fcmVhZFJlcXVlc3RzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlUmVzb2x2ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRXJyb3Ioc3RyZWFtLCBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoSXNSZWFkYWJsZVN0cmVhbShzdHJlYW0pID09PSB0cnVlLCAnc3RyZWFtIG11c3QgYmUgUmVhZGFibGVTdHJlYW0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX3N0YXRlID09PSAncmVhZGFibGUnLCAnc3RhdGUgbXVzdCBiZSByZWFkYWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9zdGF0ZSA9ICdlcnJvcmVkJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fc3RvcmVkRXJyb3IgPSBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IHN0cmVhbS5fcmVhZGVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIocmVhZGVyKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVhZGVyLl9yZWFkUmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRSZXF1ZXN0ID0gcmVhZGVyLl9yZWFkUmVxdWVzdHNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFJlcXVlc3QuX3JlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX3JlYWRSZXF1ZXN0cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoSXNSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIocmVhZGVyKSwgJ3JlYWRlciBtdXN0IGJlIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlcicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHJlYWRlci5fcmVhZEludG9SZXF1ZXN0cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRJbnRvUmVxdWVzdCA9IHJlYWRlci5fcmVhZEludG9SZXF1ZXN0c1tfaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEludG9SZXF1ZXN0Ll9yZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9yZWFkSW50b1JlcXVlc3RzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlUmVqZWN0KHJlYWRlciwgZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUZ1bGZpbGxSZWFkSW50b1JlcXVlc3Qoc3RyZWFtLCBjaHVuaywgZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IHN0cmVhbS5fcmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlYWRlci5fcmVhZEludG9SZXF1ZXN0cy5sZW5ndGggPiAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRJbnRvUmVxdWVzdCA9IHJlYWRlci5fcmVhZEludG9SZXF1ZXN0cy5zaGlmdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkSW50b1JlcXVlc3QuX3Jlc29sdmUoQ3JlYXRlSXRlclJlc3VsdE9iamVjdChjaHVuaywgZG9uZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1GdWxmaWxsUmVhZFJlcXVlc3Qoc3RyZWFtLCBjaHVuaywgZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IHN0cmVhbS5fcmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlYWRlci5fcmVhZFJlcXVlc3RzLmxlbmd0aCA+IDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZFJlcXVlc3QgPSByZWFkZXIuX3JlYWRSZXF1ZXN0cy5zaGlmdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkUmVxdWVzdC5fcmVzb2x2ZShDcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGNodW5rLCBkb25lKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUdldE51bVJlYWRJbnRvUmVxdWVzdHMoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtLl9yZWFkZXIuX3JlYWRJbnRvUmVxdWVzdHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1HZXROdW1SZWFkUmVxdWVzdHMoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtLl9yZWFkZXIuX3JlYWRSZXF1ZXN0cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUhhc0JZT0JSZWFkZXIoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGVyID0gc3RyZWFtLl9yZWFkZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyKHJlYWRlcikgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtSGFzRGVmYXVsdFJlYWRlcihzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkZXIgPSBzdHJlYW0uX3JlYWRlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIocmVhZGVyKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcihzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtKHN0cmVhbSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciBjYW4gb25seSBiZSBjb25zdHJ1Y3RlZCB3aXRoIGEgUmVhZGFibGVTdHJlYW0gaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbUxvY2tlZChzdHJlYW0pID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoaXMgc3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gbG9ja2VkIGZvciBleGNsdXNpdmUgcmVhZGluZyBieSBhbm90aGVyIHJlYWRlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY0luaXRpYWxpemUodGhpcywgc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkUmVxdWVzdHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdjYW5jZWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjYW5jZWwocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChkZWZhdWx0UmVhZGVyQnJhbmRDaGVja0V4Y2VwdGlvbignY2FuY2VsJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX293bmVyUmVhZGFibGVTdHJlYW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYWRlckxvY2tFeGNlcHRpb24oJ2NhbmNlbCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbVJlYWRlckdlbmVyaWNDYW5jZWwodGhpcywgcmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAncmVhZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlYWQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChkZWZhdWx0UmVhZGVyQnJhbmRDaGVja0V4Y2VwdGlvbigncmVhZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vd25lclJlYWRhYmxlU3RyZWFtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFkZXJMb2NrRXhjZXB0aW9uKCdyZWFkIGZyb20nKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyUmVhZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAncmVsZWFzZUxvY2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWxlYXNlTG9jaygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZGVmYXVsdFJlYWRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ3JlbGVhc2VMb2NrJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVhZFJlcXVlc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RyaWVkIHRvIHJlbGVhc2UgYSByZWFkZXIgbG9jayB3aGVuIHRoYXQgcmVhZGVyIGhhcyBwZW5kaW5nIHJlYWQoKSBjYWxscyB1bi1zZXR0bGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbVJlYWRlckdlbmVyaWNSZWxlYXNlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdjbG9zZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZGVmYXVsdFJlYWRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Nsb3NlZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jbG9zZWRQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcjtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUlzUmVhZGFibGVTdHJlYW0oc3RyZWFtKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIFJlYWRhYmxlU3RyZWFtIGluc3RhbmNlIGdpdmVuIGEgJyArICdieXRlIHNvdXJjZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIoc3RyZWFtLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29uc3RydWN0IGEgUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIGZvciBhIHN0cmVhbSBub3QgY29uc3RydWN0ZWQgd2l0aCBhIGJ5dGUgJyArICdzb3VyY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbUxvY2tlZChzdHJlYW0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoaXMgc3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gbG9ja2VkIGZvciBleGNsdXNpdmUgcmVhZGluZyBieSBhbm90aGVyIHJlYWRlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY0luaXRpYWxpemUodGhpcywgc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkSW50b1JlcXVlc3RzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2FuY2VsKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUlzUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyKHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoYnlvYlJlYWRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2NhbmNlbCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vd25lclJlYWRhYmxlU3RyZWFtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFkZXJMb2NrRXhjZXB0aW9uKCdjYW5jZWwnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1SZWFkZXJHZW5lcmljQ2FuY2VsKHRoaXMsIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3JlYWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWFkKHZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFJc1JlYWRhYmxlU3RyZWFtQllPQlJlYWRlcih0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGJ5b2JSZWFkZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdyZWFkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX293bmVyUmVhZGFibGVTdHJlYW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYWRlckxvY2tFeGNlcHRpb24oJ3JlYWQgZnJvbScpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXlCdWZmZXIuaXNWaWV3KHZpZXcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcigndmlldyBtdXN0IGJlIGFuIGFycmF5IGJ1ZmZlciB2aWV3JykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXcuYnl0ZUxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ3ZpZXcgbXVzdCBoYXZlIG5vbi16ZXJvIGJ5dGVMZW5ndGgnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyUmVhZCh0aGlzLCB2aWV3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAncmVsZWFzZUxvY2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWxlYXNlTG9jaygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFJc1JlYWRhYmxlU3RyZWFtQllPQlJlYWRlcih0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYnlvYlJlYWRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ3JlbGVhc2VMb2NrJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVhZEludG9SZXF1ZXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUcmllZCB0byByZWxlYXNlIGEgcmVhZGVyIGxvY2sgd2hlbiB0aGF0IHJlYWRlciBoYXMgcGVuZGluZyByZWFkKCkgY2FsbHMgdW4tc2V0dGxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1SZWFkZXJHZW5lcmljUmVsZWFzZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnY2xvc2VkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFJc1JlYWRhYmxlU3RyZWFtQllPQlJlYWRlcih0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGJ5b2JSZWFkZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdjbG9zZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvc2VkUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc1JlYWRhYmxlU3RyZWFtQllPQlJlYWRlcih4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXR5cGVJc09iamVjdCh4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ19yZWFkSW50b1JlcXVlc3RzJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0eXBlSXNPYmplY3QoeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdfcmVhZFJlcXVlc3RzJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1SZWFkZXJHZW5lcmljSW5pdGlhbGl6ZShyZWFkZXIsIHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9vd25lclJlYWRhYmxlU3RyZWFtID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9yZWFkZXIgPSByZWFkZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3N0YXRlID09PSAncmVhZGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFJlYWRlckNsb3NlZFByb21pc2VJbml0aWFsaXplKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFJlYWRlckNsb3NlZFByb21pc2VJbml0aWFsaXplQXNSZXNvbHZlZChyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ2Vycm9yZWQnLCAnc3RhdGUgbXVzdCBiZSBlcnJvcmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFJlYWRlckNsb3NlZFByb21pc2VJbml0aWFsaXplQXNSZWplY3RlZChyZWFkZXIsIHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY0NhbmNlbChyZWFkZXIsIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHJlYWRlci5fb3duZXJSZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0gIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1DYW5jZWwoc3RyZWFtLCByZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1SZWFkZXJHZW5lcmljUmVsZWFzZShyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZWFkZXIuX293bmVyUmVhZGFibGVTdHJlYW0gIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQocmVhZGVyLl9vd25lclJlYWRhYmxlU3RyZWFtLl9yZWFkZXIgPT09IHJlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIuX293bmVyUmVhZGFibGVTdHJlYW0uX3N0YXRlID09PSAncmVhZGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFJlYWRlckNsb3NlZFByb21pc2VSZWplY3QocmVhZGVyLCBuZXcgVHlwZUVycm9yKCdSZWFkZXIgd2FzIHJlbGVhc2VkIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQgdG8gbW9uaXRvciB0aGUgc3RyZWFtXFwncyBjbG9zZWRuZXNzJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0UmVhZGVyQ2xvc2VkUHJvbWlzZVJlc2V0VG9SZWplY3RlZChyZWFkZXIsIG5ldyBUeXBlRXJyb3IoJ1JlYWRlciB3YXMgcmVsZWFzZWQgYW5kIGNhbiBubyBsb25nZXIgYmUgdXNlZCB0byBtb25pdG9yIHRoZSBzdHJlYW1cXCdzIGNsb3NlZG5lc3MnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fb3duZXJSZWFkYWJsZVN0cmVhbS5fcmVhZGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9vd25lclJlYWRhYmxlU3RyZWFtID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyUmVhZChyZWFkZXIsIHZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSByZWFkZXIuX293bmVyUmVhZGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9kaXN0dXJiZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9zdGF0ZSA9PT0gJ2Vycm9yZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclB1bGxJbnRvKHN0cmVhbS5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyLCB2aWV3KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlclJlYWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gcmVhZGVyLl9vd25lclJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fZGlzdHVyYmVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShDcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9zdGF0ZSA9PT0gJ2Vycm9yZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIuX19wdWxsU3RlcHMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcihzdHJlYW0sIHVuZGVybHlpbmdTb3VyY2UsIHNpemUsIGhpZ2hXYXRlck1hcmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbShzdHJlYW0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGNhbiBvbmx5IGJlIGNvbnN0cnVjdGVkIHdpdGggYSBSZWFkYWJsZVN0cmVhbSBpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgaW5zdGFuY2VzIGNhbiBvbmx5IGJlIGNyZWF0ZWQgYnkgdGhlIFJlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VuZGVybHlpbmdTb3VyY2UgPSB1bmRlcmx5aW5nU291cmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXVlVG90YWxTaXplID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0UXVldWUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlUmVxdWVzdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHVsbEFnYWluID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHVsbGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3JtYWxpemVkU3RyYXRlZ3kgPSBWYWxpZGF0ZUFuZE5vcm1hbGl6ZVF1ZXVpbmdTdHJhdGVneShzaXplLCBoaWdoV2F0ZXJNYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJhdGVneVNpemUgPSBub3JtYWxpemVkU3RyYXRlZ3kuc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJhdGVneUhXTSA9IG5vcm1hbGl6ZWRTdHJhdGVneS5oaWdoV2F0ZXJNYXJrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250cm9sbGVyID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRSZXN1bHQgPSBJbnZva2VPck5vb3AodW5kZXJseWluZ1NvdXJjZSwgJ3N0YXJ0JywgW3RoaXNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoc3RhcnRSZXN1bHQpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX3B1bGxpbmcgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX3B1bGxBZ2FpbiA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2FsbFB1bGxJZk5lZWRlZChjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAocikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3JJZk5lZWRlZChjb250cm9sbGVyLCByKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChyZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdjbG9zZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZGVmYXVsdENvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdjbG9zZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Nsb3NlUmVxdWVzdGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgc3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkOyBkbyBub3QgY2xvc2UgaXQgYWdhaW4hJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0uX3N0YXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAhPT0gJ3JlYWRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHN0cmVhbSAoaW4gJyArIHN0YXRlICsgJyBzdGF0ZSkgaXMgbm90IGluIHRoZSByZWFkYWJsZSBzdGF0ZSBhbmQgY2Fubm90IGJlIGNsb3NlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsb3NlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdlbnF1ZXVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZW5xdWV1ZShjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZGVmYXVsdENvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdlbnF1ZXVlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2xvc2VSZXF1ZXN0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmVhbSBpcyBjbG9zZWQgb3IgZHJhaW5pbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlICE9PSAncmVhZGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgc3RyZWFtIChpbiAnICsgc3RhdGUgKyAnIHN0YXRlKSBpcyBub3QgaW4gdGhlIHJlYWRhYmxlIHN0YXRlIGFuZCBjYW5ub3QgYmUgZW5xdWV1ZWQgdG8nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZSh0aGlzLCBjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZXJyb3IoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZGVmYXVsdENvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdlcnJvcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9zdGF0ZSAhPT0gJ3JlYWRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHN0cmVhbSBpcyAnICsgc3RyZWFtLl9zdGF0ZSArICcgYW5kIHNvIGNhbm5vdCBiZSBlcnJvcmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IodGhpcywgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ19fY2FuY2VsU3RlcHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfX2NhbmNlbFN0ZXBzKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNldFF1ZXVlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZUludm9rZU9yTm9vcCh0aGlzLl91bmRlcmx5aW5nU291cmNlLCAnY2FuY2VsJywgW3JlYXNvbl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdfX3B1bGxTdGVwcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9fcHVsbFN0ZXBzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdGhpcy5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSBEZXF1ZXVlVmFsdWUodGhpcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jbG9zZVJlcXVlc3RlZCA9PT0gdHJ1ZSAmJiB0aGlzLl9xdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbUNsb3NlKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDYWxsUHVsbElmTmVlZGVkKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoY2h1bmssIGZhbHNlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGVuZGluZ1Byb21pc2UgPSBSZWFkYWJsZVN0cmVhbUFkZFJlYWRSZXF1ZXN0KHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDYWxsUHVsbElmTmVlZGVkKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGVuZGluZ1Byb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Rlc2lyZWRTaXplJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGRlZmF1bHRDb250cm9sbGVyQnJhbmRDaGVja0V4Y2VwdGlvbignZGVzaXJlZFNpemUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcjtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElzUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcih4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXR5cGVJc09iamVjdCh4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ191bmRlcmx5aW5nU291cmNlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNhbGxQdWxsSWZOZWVkZWQoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNob3VsZFB1bGwgPSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyU2hvdWxkQ2FsbFB1bGwoY29udHJvbGxlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRQdWxsID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9wdWxsaW5nID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fcHVsbEFnYWluID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoY29udHJvbGxlci5fcHVsbEFnYWluID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9wdWxsaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwdWxsUHJvbWlzZSA9IFByb21pc2VJbnZva2VPck5vb3AoY29udHJvbGxlci5fdW5kZXJseWluZ1NvdXJjZSwgJ3B1bGwnLCBbY29udHJvbGxlcl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHVsbFByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fcHVsbGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX3B1bGxBZ2FpbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9wdWxsQWdhaW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDYWxsUHVsbElmTmVlZGVkKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcklmTmVlZGVkKGNvbnRyb2xsZXIsIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2gocmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyU2hvdWxkQ2FsbFB1bGwoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdjbG9zZWQnIHx8IHN0cmVhbS5fc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX2Nsb3NlUmVxdWVzdGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fc3RhcnRlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtTG9ja2VkKHN0cmVhbSkgPT09IHRydWUgJiYgUmVhZGFibGVTdHJlYW1HZXROdW1SZWFkUmVxdWVzdHMoc3RyZWFtKSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2lyZWRTaXplID0gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplKGNvbnRyb2xsZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVzaXJlZFNpemUgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZShjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX2Nsb3NlUmVxdWVzdGVkID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9jbG9zZVJlcXVlc3RlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9xdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbUNsb3NlKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZShjb250cm9sbGVyLCBjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9jbG9zZVJlcXVlc3RlZCA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbUxvY2tlZChzdHJlYW0pID09PSB0cnVlICYmIFJlYWRhYmxlU3RyZWFtR2V0TnVtUmVhZFJlcXVlc3RzKHN0cmVhbSkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1GdWxmaWxsUmVhZFJlcXVlc3Qoc3RyZWFtLCBjaHVuaywgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmtTaXplID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9zdHJhdGVneVNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyYXRlZ3lTaXplID0gY29udHJvbGxlci5fc3RyYXRlZ3lTaXplO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVua1NpemUgPSBzdHJhdGVneVNpemUoY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChjaHVua1NpemVFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3JJZk5lZWRlZChjb250cm9sbGVyLCBjaHVua1NpemVFKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGNodW5rU2l6ZUU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnF1ZXVlVmFsdWVXaXRoU2l6ZShjb250cm9sbGVyLCBjaHVuaywgY2h1bmtTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlbnF1ZXVlRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3JJZk5lZWRlZChjb250cm9sbGVyLCBlbnF1ZXVlRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVucXVldWVFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNhbGxQdWxsSWZOZWVkZWQoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yKGNvbnRyb2xsZXIsIGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNldFF1ZXVlKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1FcnJvcihzdHJlYW0sIGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9ySWZOZWVkZWQoY29udHJvbGxlciwgZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IoY29udHJvbGxlciwgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemUoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0cmVhbS5fc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2Vycm9yZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuX3N0cmF0ZWd5SFdNIC0gY29udHJvbGxlci5fcXVldWVUb3RhbFNpemU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QoY29udHJvbGxlciwgdmlldykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyID0gY29udHJvbGxlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92aWV3ID0gdmlldztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAncmVzcG9uZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlc3BvbmQoYnl0ZXNXcml0dGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBieW9iUmVxdWVzdEJyYW5kQ2hlY2tFeGNlcHRpb24oJ3Jlc3BvbmQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGlzIEJZT0IgcmVxdWVzdCBoYXMgYmVlbiBpbnZhbGlkYXRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmQodGhpcy5fYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIsIGJ5dGVzV3JpdHRlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3Jlc3BvbmRXaXRoTmV3VmlldycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlc3BvbmRXaXRoTmV3Vmlldyh2aWV3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBieW9iUmVxdWVzdEJyYW5kQ2hlY2tFeGNlcHRpb24oJ3Jlc3BvbmQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGlzIEJZT0IgcmVxdWVzdCBoYXMgYmVlbiBpbnZhbGlkYXRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheUJ1ZmZlci5pc1ZpZXcodmlldykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1lvdSBjYW4gb25seSByZXNwb25kIHdpdGggYXJyYXkgYnVmZmVyIHZpZXdzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUmVzcG9uZFdpdGhOZXdWaWV3KHRoaXMuX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLCB2aWV3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAndmlldycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92aWV3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIoc3RyZWFtLCB1bmRlcmx5aW5nQnl0ZVNvdXJjZSwgaGlnaFdhdGVyTWFyaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtKHN0cmVhbSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIFJlYWRhYmxlU3RyZWFtIGluc3RhbmNlIGdpdmVuICcgKyAnYSBieXRlIHNvdXJjZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgaW5zdGFuY2VzIGNhbiBvbmx5IGJlIGNyZWF0ZWQgYnkgdGhlIFJlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yIGdpdmVuIGEgYnl0ZSAnICsgJ3NvdXJjZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91bmRlcmx5aW5nQnl0ZVNvdXJjZSA9IHVuZGVybHlpbmdCeXRlU291cmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3B1bGxBZ2FpbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3B1bGxpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2xlYXJQZW5kaW5nUHVsbEludG9zKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXVlID0gdGhpcy5fcXVldWVUb3RhbFNpemUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXRRdWV1ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbG9zZVJlcXVlc3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJhdGVneUhXTSA9IFZhbGlkYXRlQW5kTm9ybWFsaXplSGlnaFdhdGVyTWFyayhoaWdoV2F0ZXJNYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXV0b0FsbG9jYXRlQ2h1bmtTaXplID0gdW5kZXJseWluZ0J5dGVTb3VyY2UuYXV0b0FsbG9jYXRlQ2h1bmtTaXplO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG9BbGxvY2F0ZUNodW5rU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGF1dG9BbGxvY2F0ZUNodW5rU2l6ZSkgPT09IGZhbHNlIHx8IGF1dG9BbGxvY2F0ZUNodW5rU2l6ZSA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignYXV0b0FsbG9jYXRlQ2h1bmtTaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hdXRvQWxsb2NhdGVDaHVua1NpemUgPSBhdXRvQWxsb2NhdGVDaHVua1NpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGVuZGluZ1B1bGxJbnRvcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250cm9sbGVyID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRSZXN1bHQgPSBJbnZva2VPck5vb3AodW5kZXJseWluZ0J5dGVTb3VyY2UsICdzdGFydCcsIFt0aGlzXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHN0YXJ0UmVzdWx0KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9wdWxsaW5nID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9wdWxsQWdhaW4gPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNhbGxQdWxsSWZOZWVkZWQoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJFcnJvcihjb250cm9sbGVyLCByKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKHJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Nsb3NlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBieXRlU3RyZWFtQ29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Nsb3NlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2xvc2VSZXF1ZXN0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBzdHJlYW0gaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQ7IGRvIG5vdCBjbG9zZSBpdCBhZ2FpbiEnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlICE9PSAncmVhZGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgc3RyZWFtIChpbiAnICsgc3RhdGUgKyAnIHN0YXRlKSBpcyBub3QgaW4gdGhlIHJlYWRhYmxlIHN0YXRlIGFuZCBjYW5ub3QgYmUgY2xvc2VkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2xvc2UodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2VucXVldWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBlbnF1ZXVlKGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBieXRlU3RyZWFtQ29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2VucXVldWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jbG9zZVJlcXVlc3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyZWFtIGlzIGNsb3NlZCBvciBkcmFpbmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtLl9zdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT09ICdyZWFkYWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBzdHJlYW0gKGluICcgKyBzdGF0ZSArICcgc3RhdGUpIGlzIG5vdCBpbiB0aGUgcmVhZGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBlbnF1ZXVlZCB0bycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheUJ1ZmZlci5pc1ZpZXcoY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdZb3UgY2FuIG9ubHkgZW5xdWV1ZSBhcnJheSBidWZmZXIgdmlld3Mgd2hlbiB1c2luZyBhIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJFbnF1ZXVlKHRoaXMsIGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBlcnJvcihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBieXRlU3RyZWFtQ29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdGhpcy5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3N0YXRlICE9PSAncmVhZGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgc3RyZWFtIGlzICcgKyBzdHJlYW0uX3N0YXRlICsgJyBhbmQgc28gY2Fubm90IGJlIGVycm9yZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJFcnJvcih0aGlzLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnX19jYW5jZWxTdGVwcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9fY2FuY2VsU3RlcHMocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdERlc2NyaXB0b3IgPSB0aGlzLl9wZW5kaW5nUHVsbEludG9zWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3REZXNjcmlwdG9yLmJ5dGVzRmlsbGVkID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0UXVldWUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlSW52b2tlT3JOb29wKHRoaXMuX3VuZGVybHlpbmdCeXRlU291cmNlLCAnY2FuY2VsJywgW3JlYXNvbl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdfX3B1bGxTdGVwcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9fcHVsbFN0ZXBzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdGhpcy5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoUmVhZGFibGVTdHJlYW1IYXNEZWZhdWx0UmVhZGVyKHN0cmVhbSkgPT09IHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9xdWV1ZVRvdGFsU2l6ZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChSZWFkYWJsZVN0cmVhbUdldE51bVJlYWRSZXF1ZXN0cyhzdHJlYW0pID09PSAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5fcXVldWUuc2hpZnQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcXVldWVUb3RhbFNpemUgLT0gZW50cnkuYnl0ZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJIYW5kbGVRdWV1ZURyYWluKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZXcgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldyA9IG5ldyBVaW50OEFycmF5KGVudHJ5LmJ1ZmZlciwgZW50cnkuYnl0ZU9mZnNldCwgZW50cnkuYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoICh2aWV3RSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh2aWV3RSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh2aWV3LCBmYWxzZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF1dG9BbGxvY2F0ZUNodW5rU2l6ZSA9IHRoaXMuX2F1dG9BbGxvY2F0ZUNodW5rU2l6ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0b0FsbG9jYXRlQ2h1bmtTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGF1dG9BbGxvY2F0ZUNodW5rU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChidWZmZXJFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGJ1ZmZlckUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVsbEludG9EZXNjcmlwdG9yID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcjogYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVPZmZzZXQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZUxlbmd0aDogYXV0b0FsbG9jYXRlQ2h1bmtTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzRmlsbGVkOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTaXplOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0b3I6IFVpbnQ4QXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyVHlwZTogJ2RlZmF1bHQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wZW5kaW5nUHVsbEludG9zLnB1c2gocHVsbEludG9EZXNjcmlwdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlID0gUmVhZGFibGVTdHJlYW1BZGRSZWFkUmVxdWVzdChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2FsbFB1bGxJZk5lZWRlZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2J5b2JSZXF1ZXN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGJ5dGVTdHJlYW1Db250cm9sbGVyQnJhbmRDaGVja0V4Y2VwdGlvbignYnlvYlJlcXVlc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9ieW9iUmVxdWVzdCA9PT0gdW5kZWZpbmVkICYmIHRoaXMuX3BlbmRpbmdQdWxsSW50b3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0RGVzY3JpcHRvciA9IHRoaXMuX3BlbmRpbmdQdWxsSW50b3NbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGZpcnN0RGVzY3JpcHRvci5idWZmZXIsIGZpcnN0RGVzY3JpcHRvci5ieXRlT2Zmc2V0ICsgZmlyc3REZXNjcmlwdG9yLmJ5dGVzRmlsbGVkLCBmaXJzdERlc2NyaXB0b3IuYnl0ZUxlbmd0aCAtIGZpcnN0RGVzY3JpcHRvci5ieXRlc0ZpbGxlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ieW9iUmVxdWVzdCA9IG5ldyBSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0KHRoaXMsIHZpZXcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J5b2JSZXF1ZXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdkZXNpcmVkU2l6ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBieXRlU3RyZWFtQ29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Rlc2lyZWRTaXplJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckdldERlc2lyZWRTaXplKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXI7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0eXBlSXNPYmplY3QoeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdfdW5kZXJseWluZ0J5dGVTb3VyY2UnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc1JlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0eXBlSXNPYmplY3QoeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdfYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXInKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2FsbFB1bGxJZk5lZWRlZChjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hvdWxkUHVsbCA9IFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJTaG91bGRDYWxsUHVsbChjb250cm9sbGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFB1bGwgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX3B1bGxpbmcgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9wdWxsQWdhaW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9wdWxsQWdhaW4gPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuX3B1bGxpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB1bGxQcm9taXNlID0gUHJvbWlzZUludm9rZU9yTm9vcChjb250cm9sbGVyLl91bmRlcmx5aW5nQnl0ZVNvdXJjZSwgJ3B1bGwnLCBbY29udHJvbGxlcl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHVsbFByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fcHVsbGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX3B1bGxBZ2FpbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9wdWxsQWdhaW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNhbGxQdWxsSWZOZWVkZWQoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRXJyb3IoY29udHJvbGxlciwgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2gocmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2xlYXJQZW5kaW5nUHVsbEludG9zKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJJbnZhbGlkYXRlQllPQlJlcXVlc3QoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zID0gW107XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ29tbWl0UHVsbEludG9EZXNjcmlwdG9yKHN0cmVhbSwgcHVsbEludG9EZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSAhPT0gJ2Vycm9yZWQnLCAnc3RhdGUgbXVzdCBub3QgYmUgZXJyb3JlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlc0ZpbGxlZCA9PT0gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxsZWRWaWV3ID0gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNvbnZlcnRQdWxsSW50b0Rlc2NyaXB0b3IocHVsbEludG9EZXNjcmlwdG9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB1bGxJbnRvRGVzY3JpcHRvci5yZWFkZXJUeXBlID09PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbUZ1bGZpbGxSZWFkUmVxdWVzdChzdHJlYW0sIGZpbGxlZFZpZXcsIGRvbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQocHVsbEludG9EZXNjcmlwdG9yLnJlYWRlclR5cGUgPT09ICdieW9iJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1GdWxmaWxsUmVhZEludG9SZXF1ZXN0KHN0cmVhbSwgZmlsbGVkVmlldywgZG9uZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ29udmVydFB1bGxJbnRvRGVzY3JpcHRvcihwdWxsSW50b0Rlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBieXRlc0ZpbGxlZCA9IHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlc0ZpbGxlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50U2l6ZSA9IHB1bGxJbnRvRGVzY3JpcHRvci5lbGVtZW50U2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChieXRlc0ZpbGxlZCA8PSBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoYnl0ZXNGaWxsZWQgJSBlbGVtZW50U2l6ZSA9PT0gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHB1bGxJbnRvRGVzY3JpcHRvci5jdG9yKHB1bGxJbnRvRGVzY3JpcHRvci5idWZmZXIsIHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlT2Zmc2V0LCBieXRlc0ZpbGxlZCAvIGVsZW1lbnRTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJFbnF1ZXVlQ2h1bmtUb1F1ZXVlKGNvbnRyb2xsZXIsIGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fcXVldWUucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyOiBidWZmZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZU9mZnNldDogYnl0ZU9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlTGVuZ3RoOiBieXRlTGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fcXVldWVUb3RhbFNpemUgKz0gYnl0ZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJGaWxsUHVsbEludG9EZXNjcmlwdG9yRnJvbVF1ZXVlKGNvbnRyb2xsZXIsIHB1bGxJbnRvRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnRTaXplID0gcHVsbEludG9EZXNjcmlwdG9yLmVsZW1lbnRTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRBbGlnbmVkQnl0ZXMgPSBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQgLSBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQgJSBlbGVtZW50U2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhCeXRlc1RvQ29weSA9IE1hdGgubWluKGNvbnRyb2xsZXIuX3F1ZXVlVG90YWxTaXplLCBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZUxlbmd0aCAtIHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlc0ZpbGxlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4Qnl0ZXNGaWxsZWQgPSBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQgKyBtYXhCeXRlc1RvQ29weTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhBbGlnbmVkQnl0ZXMgPSBtYXhCeXRlc0ZpbGxlZCAtIG1heEJ5dGVzRmlsbGVkICUgZWxlbWVudFNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG90YWxCeXRlc1RvQ29weVJlbWFpbmluZyA9IG1heEJ5dGVzVG9Db3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWR5ID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXhBbGlnbmVkQnl0ZXMgPiBjdXJyZW50QWxpZ25lZEJ5dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxCeXRlc1RvQ29weVJlbWFpbmluZyA9IG1heEFsaWduZWRCeXRlcyAtIHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlc0ZpbGxlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdWV1ZSA9IGNvbnRyb2xsZXIuX3F1ZXVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodG90YWxCeXRlc1RvQ29weVJlbWFpbmluZyA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZE9mUXVldWUgPSBxdWV1ZVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZXNUb0NvcHkgPSBNYXRoLm1pbih0b3RhbEJ5dGVzVG9Db3B5UmVtYWluaW5nLCBoZWFkT2ZRdWV1ZS5ieXRlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzdFN0YXJ0ID0gcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVPZmZzZXQgKyBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlCdWZmZXJDb3B5KHB1bGxJbnRvRGVzY3JpcHRvci5idWZmZXIsIGRlc3RTdGFydCwgaGVhZE9mUXVldWUuYnVmZmVyLCBoZWFkT2ZRdWV1ZS5ieXRlT2Zmc2V0LCBieXRlc1RvQ29weSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVhZE9mUXVldWUuYnl0ZUxlbmd0aCA9PT0gYnl0ZXNUb0NvcHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkT2ZRdWV1ZS5ieXRlT2Zmc2V0ICs9IGJ5dGVzVG9Db3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkT2ZRdWV1ZS5ieXRlTGVuZ3RoIC09IGJ5dGVzVG9Db3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuX3F1ZXVlVG90YWxTaXplIC09IGJ5dGVzVG9Db3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJGaWxsSGVhZFB1bGxJbnRvRGVzY3JpcHRvcihjb250cm9sbGVyLCBieXRlc1RvQ29weSwgcHVsbEludG9EZXNjcmlwdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEJ5dGVzVG9Db3B5UmVtYWluaW5nIC09IGJ5dGVzVG9Db3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZHkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX3F1ZXVlVG90YWxTaXplID09PSAwLCAncXVldWUgbXVzdCBiZSBlbXB0eScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQgPiAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQocHVsbEludG9EZXNjcmlwdG9yLmJ5dGVzRmlsbGVkIDwgcHVsbEludG9EZXNjcmlwdG9yLmVsZW1lbnRTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWR5O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckZpbGxIZWFkUHVsbEludG9EZXNjcmlwdG9yKGNvbnRyb2xsZXIsIHNpemUsIHB1bGxJbnRvRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX3BlbmRpbmdQdWxsSW50b3MubGVuZ3RoID09PSAwIHx8IGNvbnRyb2xsZXIuX3BlbmRpbmdQdWxsSW50b3NbMF0gPT09IHB1bGxJbnRvRGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVySW52YWxpZGF0ZUJZT0JSZXF1ZXN0KGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVzRmlsbGVkICs9IHNpemU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVySGFuZGxlUXVldWVEcmFpbihjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9xdWV1ZVRvdGFsU2l6ZSA9PT0gMCAmJiBjb250cm9sbGVyLl9jbG9zZVJlcXVlc3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtQ2xvc2UoY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNhbGxQdWxsSWZOZWVkZWQoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVySW52YWxpZGF0ZUJZT0JSZXF1ZXN0KGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9ieW9iUmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9ieW9iUmVxdWVzdC5fYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9ieW9iUmVxdWVzdC5fdmlldyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuX2J5b2JSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclByb2Nlc3NQdWxsSW50b0Rlc2NyaXB0b3JzVXNpbmdRdWV1ZShjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoY29udHJvbGxlci5fY2xvc2VSZXF1ZXN0ZWQgPT09IGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNvbnRyb2xsZXIuX3BlbmRpbmdQdWxsSW50b3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9xdWV1ZVRvdGFsU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB1bGxJbnRvRGVzY3JpcHRvciA9IGNvbnRyb2xsZXIuX3BlbmRpbmdQdWxsSW50b3NbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckZpbGxQdWxsSW50b0Rlc2NyaXB0b3JGcm9tUXVldWUoY29udHJvbGxlciwgcHVsbEludG9EZXNjcmlwdG9yKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyU2hpZnRQZW5kaW5nUHVsbEludG8oY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDb21taXRQdWxsSW50b0Rlc2NyaXB0b3IoY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtLCBwdWxsSW50b0Rlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJQdWxsSW50byhjb250cm9sbGVyLCB2aWV3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnRTaXplID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXcuY29uc3RydWN0b3IgIT09IERhdGFWaWV3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFNpemUgPSB2aWV3LmNvbnN0cnVjdG9yLkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3RvciA9IHZpZXcuY29uc3RydWN0b3I7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVsbEludG9EZXNjcmlwdG9yID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcjogdmlldy5idWZmZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZU9mZnNldDogdmlldy5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVMZW5ndGg6IHZpZXcuYnl0ZUxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc0ZpbGxlZDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50U2l6ZTogZWxlbWVudFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RvcjogY3RvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXJUeXBlOiAnYnlvYidcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWxsSW50b0Rlc2NyaXB0b3IuYnVmZmVyID0gVHJhbnNmZXJBcnJheUJ1ZmZlcihwdWxsSW50b0Rlc2NyaXB0b3IuYnVmZmVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuX3BlbmRpbmdQdWxsSW50b3MucHVzaChwdWxsSW50b0Rlc2NyaXB0b3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtQWRkUmVhZEludG9SZXF1ZXN0KHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3N0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbXB0eVZpZXcgPSBuZXcgdmlldy5jb25zdHJ1Y3RvcihwdWxsSW50b0Rlc2NyaXB0b3IuYnVmZmVyLCBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZU9mZnNldCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShDcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGVtcHR5VmlldywgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fcXVldWVUb3RhbFNpemUgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJGaWxsUHVsbEludG9EZXNjcmlwdG9yRnJvbVF1ZXVlKGNvbnRyb2xsZXIsIHB1bGxJbnRvRGVzY3JpcHRvcikgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGxlZFZpZXcgPSBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ29udmVydFB1bGxJbnRvRGVzY3JpcHRvcihwdWxsSW50b0Rlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVySGFuZGxlUXVldWVEcmFpbihjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShDcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGZpbGxlZFZpZXcsIGZhbHNlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX2Nsb3NlUmVxdWVzdGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gbmV3IFR5cGVFcnJvcignSW5zdWZmaWNpZW50IGJ5dGVzIHRvIGZpbGwgZWxlbWVudHMgaW4gdGhlIGdpdmVuIGJ1ZmZlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRXJyb3IoY29udHJvbGxlciwgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHB1bGxJbnRvRGVzY3JpcHRvci5idWZmZXIgPSBUcmFuc2ZlckFycmF5QnVmZmVyKHB1bGxJbnRvRGVzY3JpcHRvci5idWZmZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zLnB1c2gocHVsbEludG9EZXNjcmlwdG9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSBSZWFkYWJsZVN0cmVhbUFkZFJlYWRJbnRvUmVxdWVzdChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNhbGxQdWxsSWZOZWVkZWQoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJSZXNwb25kSW5DbG9zZWRTdGF0ZShjb250cm9sbGVyLCBmaXJzdERlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RGVzY3JpcHRvci5idWZmZXIgPSBUcmFuc2ZlckFycmF5QnVmZmVyKGZpcnN0RGVzY3JpcHRvci5idWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGZpcnN0RGVzY3JpcHRvci5ieXRlc0ZpbGxlZCA9PT0gMCwgJ2J5dGVzRmlsbGVkIG11c3QgYmUgMCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWRhYmxlU3RyZWFtSGFzQllPQlJlYWRlcihzdHJlYW0pID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKFJlYWRhYmxlU3RyZWFtR2V0TnVtUmVhZEludG9SZXF1ZXN0cyhzdHJlYW0pID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVsbEludG9EZXNjcmlwdG9yID0gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclNoaWZ0UGVuZGluZ1B1bGxJbnRvKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ29tbWl0UHVsbEludG9EZXNjcmlwdG9yKHN0cmVhbSwgcHVsbEludG9EZXNjcmlwdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUmVzcG9uZEluUmVhZGFibGVTdGF0ZShjb250cm9sbGVyLCBieXRlc1dyaXR0ZW4sIHB1bGxJbnRvRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlc0ZpbGxlZCArIGJ5dGVzV3JpdHRlbiA+IHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2J5dGVzV3JpdHRlbiBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckZpbGxIZWFkUHVsbEludG9EZXNjcmlwdG9yKGNvbnRyb2xsZXIsIGJ5dGVzV3JpdHRlbiwgcHVsbEludG9EZXNjcmlwdG9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlc0ZpbGxlZCA8IHB1bGxJbnRvRGVzY3JpcHRvci5lbGVtZW50U2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclNoaWZ0UGVuZGluZ1B1bGxJbnRvKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbWFpbmRlclNpemUgPSBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQgJSBwdWxsSW50b0Rlc2NyaXB0b3IuZWxlbWVudFNpemU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW1haW5kZXJTaXplID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZU9mZnNldCArIHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlc0ZpbGxlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVtYWluZGVyID0gcHVsbEludG9EZXNjcmlwdG9yLmJ1ZmZlci5zbGljZShlbmQgLSByZW1haW5kZXJTaXplLCBlbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJFbnF1ZXVlQ2h1bmtUb1F1ZXVlKGNvbnRyb2xsZXIsIHJlbWFpbmRlciwgMCwgcmVtYWluZGVyLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwdWxsSW50b0Rlc2NyaXB0b3IuYnVmZmVyID0gVHJhbnNmZXJBcnJheUJ1ZmZlcihwdWxsSW50b0Rlc2NyaXB0b3IuYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlc0ZpbGxlZCAtPSByZW1haW5kZXJTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNvbW1pdFB1bGxJbnRvRGVzY3JpcHRvcihjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0sIHB1bGxJbnRvRGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUHJvY2Vzc1B1bGxJbnRvRGVzY3JpcHRvcnNVc2luZ1F1ZXVlKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmRJbnRlcm5hbChjb250cm9sbGVyLCBieXRlc1dyaXR0ZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdERlc2NyaXB0b3IgPSBjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdieXRlc1dyaXR0ZW4gbXVzdCBiZSAwIHdoZW4gY2FsbGluZyByZXNwb25kKCkgb24gYSBjbG9zZWQgc3RyZWFtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmRJbkNsb3NlZFN0YXRlKGNvbnRyb2xsZXIsIGZpcnN0RGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX3N0YXRlID09PSAncmVhZGFibGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUmVzcG9uZEluUmVhZGFibGVTdGF0ZShjb250cm9sbGVyLCBieXRlc1dyaXR0ZW4sIGZpcnN0RGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyU2hpZnRQZW5kaW5nUHVsbEludG8oY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zLnNoaWZ0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJJbnZhbGlkYXRlQllPQlJlcXVlc3QoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJTaG91bGRDYWxsUHVsbChjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9zdGF0ZSAhPT0gJ3JlYWRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX2Nsb3NlUmVxdWVzdGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fc3RhcnRlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSZWFkYWJsZVN0cmVhbUhhc0RlZmF1bHRSZWFkZXIoc3RyZWFtKSA9PT0gdHJ1ZSAmJiBSZWFkYWJsZVN0cmVhbUdldE51bVJlYWRSZXF1ZXN0cyhzdHJlYW0pID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVhZGFibGVTdHJlYW1IYXNCWU9CUmVhZGVyKHN0cmVhbSkgPT09IHRydWUgJiYgUmVhZGFibGVTdHJlYW1HZXROdW1SZWFkSW50b1JlcXVlc3RzKHN0cmVhbSkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyR2V0RGVzaXJlZFNpemUoY29udHJvbGxlcikgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDbG9zZShjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX2Nsb3NlUmVxdWVzdGVkID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9xdWV1ZVRvdGFsU2l6ZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9jbG9zZVJlcXVlc3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0UGVuZGluZ1B1bGxJbnRvID0gY29udHJvbGxlci5fcGVuZGluZ1B1bGxJbnRvc1swXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdFBlbmRpbmdQdWxsSW50by5ieXRlc0ZpbGxlZCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSBuZXcgVHlwZUVycm9yKCdJbnN1ZmZpY2llbnQgYnl0ZXMgdG8gZmlsbCBlbGVtZW50cyBpbiB0aGUgZ2l2ZW4gYnVmZmVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJFcnJvcihjb250cm9sbGVyLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtQ2xvc2Uoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJFbnF1ZXVlKGNvbnRyb2xsZXIsIGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX2Nsb3NlUmVxdWVzdGVkID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gY2h1bmsuYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGVPZmZzZXQgPSBjaHVuay5ieXRlT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGVMZW5ndGggPSBjaHVuay5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZmVycmVkQnVmZmVyID0gVHJhbnNmZXJBcnJheUJ1ZmZlcihidWZmZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVhZGFibGVTdHJlYW1IYXNEZWZhdWx0UmVhZGVyKHN0cmVhbSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVhZGFibGVTdHJlYW1HZXROdW1SZWFkUmVxdWVzdHMoc3RyZWFtKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRW5xdWV1ZUNodW5rVG9RdWV1ZShjb250cm9sbGVyLCB0cmFuc2ZlcnJlZEJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX3F1ZXVlLmxlbmd0aCA9PT0gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc2ZlcnJlZFZpZXcgPSBuZXcgVWludDhBcnJheSh0cmFuc2ZlcnJlZEJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRnVsZmlsbFJlYWRSZXF1ZXN0KHN0cmVhbSwgdHJhbnNmZXJyZWRWaWV3LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChSZWFkYWJsZVN0cmVhbUhhc0JZT0JSZWFkZXIoc3RyZWFtKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJFbnF1ZXVlQ2h1bmtUb1F1ZXVlKGNvbnRyb2xsZXIsIHRyYW5zZmVycmVkQnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUHJvY2Vzc1B1bGxJbnRvRGVzY3JpcHRvcnNVc2luZ1F1ZXVlKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoSXNSZWFkYWJsZVN0cmVhbUxvY2tlZChzdHJlYW0pID09PSBmYWxzZSwgJ3N0cmVhbSBtdXN0IG5vdCBiZSBsb2NrZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRW5xdWV1ZUNodW5rVG9RdWV1ZShjb250cm9sbGVyLCB0cmFuc2ZlcnJlZEJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRXJyb3IoY29udHJvbGxlciwgZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX3N0YXRlID09PSAncmVhZGFibGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDbGVhclBlbmRpbmdQdWxsSW50b3MoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNldFF1ZXVlKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1FcnJvcihzdHJlYW0sIGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckdldERlc2lyZWRTaXplKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdHJlYW0uX3N0YXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyLl9zdHJhdGVneUhXTSAtIGNvbnRyb2xsZXIuX3F1ZXVlVG90YWxTaXplO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmQoY29udHJvbGxlciwgYnl0ZXNXcml0dGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBieXRlc1dyaXR0ZW4gPSBOdW1iZXIoYnl0ZXNXcml0dGVuKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzRmluaXRlTm9uTmVnYXRpdmVOdW1iZXIoYnl0ZXNXcml0dGVuKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignYnl0ZXNXcml0dGVuIG11c3QgYmUgYSBmaW5pdGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX3BlbmRpbmdQdWxsSW50b3MubGVuZ3RoID4gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUmVzcG9uZEludGVybmFsKGNvbnRyb2xsZXIsIGJ5dGVzV3JpdHRlbik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUmVzcG9uZFdpdGhOZXdWaWV3KGNvbnRyb2xsZXIsIHZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aCA+IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0RGVzY3JpcHRvciA9IGNvbnRyb2xsZXIuX3BlbmRpbmdQdWxsSW50b3NbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdERlc2NyaXB0b3IuYnl0ZU9mZnNldCArIGZpcnN0RGVzY3JpcHRvci5ieXRlc0ZpbGxlZCAhPT0gdmlldy5ieXRlT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSByZWdpb24gc3BlY2lmaWVkIGJ5IHZpZXcgZG9lcyBub3QgbWF0Y2ggYnlvYlJlcXVlc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0RGVzY3JpcHRvci5ieXRlTGVuZ3RoICE9PSB2aWV3LmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIGJ1ZmZlciBvZiB2aWV3IGhhcyBkaWZmZXJlbnQgY2FwYWNpdHkgdGhhbiBieW9iUmVxdWVzdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdERlc2NyaXB0b3IuYnVmZmVyID0gdmlldy5idWZmZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUmVzcG9uZEludGVybmFsKGNvbnRyb2xsZXIsIHZpZXcuYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUuJyArIG5hbWUgKyAnIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0cmVhbScpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZGVyTG9ja0V4Y2VwdGlvbihuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignQ2Fubm90ICcgKyBuYW1lICsgJyBhIHN0cmVhbSB1c2luZyBhIHJlbGVhc2VkIHJlYWRlcicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFJlYWRlckJyYW5kQ2hlY2tFeGNlcHRpb24obmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlci5wcm90b3R5cGUuJyArIG5hbWUgKyAnIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXInKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZShyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFJlYWRlckNsb3NlZFByb21pc2VJbml0aWFsaXplQXNSZWplY3RlZChyZWFkZXIsIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlID0gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZUFzUmVzb2x2ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlUmVqZWN0KHJlYWRlciwgcmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQocmVhZGVyLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQocmVhZGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdChyZWFzb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0UmVhZGVyQ2xvc2VkUHJvbWlzZVJlc2V0VG9SZWplY3RlZChyZWFkZXIsIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlID09PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgPT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2UgPSBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFJlYWRlckNsb3NlZFByb21pc2VSZXNvbHZlKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlKHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJ5b2JSZWFkZXJCcmFuZENoZWNrRXhjZXB0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIucHJvdG90eXBlLicgKyBuYW1lICsgJyBjYW4gb25seSBiZSB1c2VkIG9uIGEgUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0Q29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24obmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIucHJvdG90eXBlLicgKyBuYW1lICsgJyBjYW4gb25seSBiZSB1c2VkIG9uIGEgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYnlvYlJlcXVlc3RCcmFuZENoZWNrRXhjZXB0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0LnByb3RvdHlwZS4nICsgbmFtZSArICcgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJ5dGVTdHJlYW1Db250cm9sbGVyQnJhbmRDaGVja0V4Y2VwdGlvbihuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlci5wcm90b3R5cGUuJyArIG5hbWUgKyAnIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBpZklzT2JqZWN0QW5kSGFzQVByb21pc2VJc0hhbmRsZWRJbnRlcm5hbFNsb3RTZXRQcm9taXNlSXNIYW5kbGVkVG9UcnVlKHByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5wcm90b3R5cGUudGhlbi5jYWxsKHByb21pc2UsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmVhbSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRhYmxlU3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0KTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgd3JpdGFibGVTdHJlYW0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIpO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuVHJhbnNmb3JtU3RyZWFtID0gdHJhbnNmb3JtU3RyZWFtLlRyYW5zZm9ybVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5SZWFkYWJsZVN0cmVhbSA9IHJlYWRhYmxlU3RyZWFtLlJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLklzUmVhZGFibGVTdHJlYW1EaXN0dXJiZWQgPSByZWFkYWJsZVN0cmVhbS5Jc1JlYWRhYmxlU3RyZWFtRGlzdHVyYmVkO1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZSA9IHJlYWRhYmxlU3RyZWFtLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZTtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZSA9IHJlYWRhYmxlU3RyZWFtLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFbnF1ZXVlO1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvciA9IHJlYWRhYmxlU3RyZWFtLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemUgPSByZWFkYWJsZVN0cmVhbS5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemU7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuQWNxdWlyZVdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciA9IHdyaXRhYmxlU3RyZWFtLkFjcXVpcmVXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuSXNXcml0YWJsZVN0cmVhbSA9IHdyaXRhYmxlU3RyZWFtLklzV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuSXNXcml0YWJsZVN0cmVhbUxvY2tlZCA9IHdyaXRhYmxlU3RyZWFtLklzV3JpdGFibGVTdHJlYW1Mb2NrZWQ7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuV3JpdGFibGVTdHJlYW0gPSB3cml0YWJsZVN0cmVhbS5Xcml0YWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5Xcml0YWJsZVN0cmVhbUFib3J0ID0gd3JpdGFibGVTdHJlYW0uV3JpdGFibGVTdHJlYW1BYm9ydDtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5Xcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IgPSB3cml0YWJsZVN0cmVhbS5Xcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyQ2xvc2VXaXRoRXJyb3JQcm9wYWdhdGlvbiA9IHdyaXRhYmxlU3RyZWFtLldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckNsb3NlV2l0aEVycm9yUHJvcGFnYXRpb247XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyUmVsZWFzZSA9IHdyaXRhYmxlU3RyZWFtLldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlclJlbGVhc2U7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyV3JpdGUgPSB3cml0YWJsZVN0cmVhbS5Xcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJXcml0ZTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG4gICAgICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBfcmVxdWlyZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMSksXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgPSBfcmVxdWlyZS5hc3NlcnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXF1aXJlMiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMCksXG4gICAgICAgICAgICAgICAgICAgICAgICBJbnZva2VPck5vb3AgPSBfcmVxdWlyZTIuSW52b2tlT3JOb29wLFxuICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZUludm9rZU9yUGVyZm9ybUZhbGxiYWNrID0gX3JlcXVpcmUyLlByb21pc2VJbnZva2VPclBlcmZvcm1GYWxsYmFjayxcbiAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2VJbnZva2VPck5vb3AgPSBfcmVxdWlyZTIuUHJvbWlzZUludm9rZU9yTm9vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVJc09iamVjdCA9IF9yZXF1aXJlMi50eXBlSXNPYmplY3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXF1aXJlMyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNCksXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbSA9IF9yZXF1aXJlMy5SZWFkYWJsZVN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZSA9IF9yZXF1aXJlMy5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xvc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZSA9IF9yZXF1aXJlMy5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvciA9IF9yZXF1aXJlMy5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemUgPSBfcmVxdWlyZTMuUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBfcmVxdWlyZTQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW0gPSBfcmVxdWlyZTQuV3JpdGFibGVTdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IgPSBfcmVxdWlyZTQuV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbUNsb3NlUmVhZGFibGUodHJhbnNmb3JtU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyZWFtLl9lcnJvcmVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVHJhbnNmb3JtU3RyZWFtIGlzIGFscmVhZHkgZXJyb3JlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyZWFtLl9yZWFkYWJsZUNsb3NlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlIHNpZGUgaXMgYWxyZWFkeSBjbG9zZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtQ2xvc2VSZWFkYWJsZUludGVybmFsKHRyYW5zZm9ybVN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUcmFuc2Zvcm1TdHJlYW1FbnF1ZXVlVG9SZWFkYWJsZSh0cmFuc2Zvcm1TdHJlYW0sIGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyZWFtLl9lcnJvcmVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVHJhbnNmb3JtU3RyZWFtIGlzIGFscmVhZHkgZXJyb3JlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyZWFtLl9yZWFkYWJsZUNsb3NlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlIHNpZGUgaXMgYWxyZWFkeSBjbG9zZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSB0cmFuc2Zvcm1TdHJlYW0uX3JlYWRhYmxlQ29udHJvbGxlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZShjb250cm9sbGVyLCBjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl9yZWFkYWJsZUNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtRXJyb3JJZk5lZWRlZCh0cmFuc2Zvcm1TdHJlYW0sIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHRyYW5zZm9ybVN0cmVhbS5fc3RvcmVkRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNpcmVkU2l6ZSA9IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZShjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXliZUJhY2twcmVzc3VyZSA9IGRlc2lyZWRTaXplIDw9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXliZUJhY2twcmVzc3VyZSA9PT0gdHJ1ZSAmJiB0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1TdHJlYW1TZXRCYWNrcHJlc3N1cmUodHJhbnNmb3JtU3RyZWFtLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbUVycm9yKHRyYW5zZm9ybVN0cmVhbSwgZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVN0cmVhbS5fZXJyb3JlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RyYW5zZm9ybVN0cmVhbSBpcyBhbHJlYWR5IGVycm9yZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtRXJyb3JJbnRlcm5hbCh0cmFuc2Zvcm1TdHJlYW0sIGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVHJhbnNmb3JtU3RyZWFtQ2xvc2VSZWFkYWJsZUludGVybmFsKHRyYW5zZm9ybVN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHRyYW5zZm9ybVN0cmVhbS5fZXJyb3JlZCA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHRyYW5zZm9ybVN0cmVhbS5fcmVhZGFibGVDbG9zZWQgPT09IGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xvc2UodHJhbnNmb3JtU3RyZWFtLl9yZWFkYWJsZUNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fcmVhZGFibGVDbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVHJhbnNmb3JtU3RyZWFtRXJyb3JJZk5lZWRlZCh0cmFuc2Zvcm1TdHJlYW0sIGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1TdHJlYW0uX2Vycm9yZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtRXJyb3JJbnRlcm5hbCh0cmFuc2Zvcm1TdHJlYW0sIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVHJhbnNmb3JtU3RyZWFtRXJyb3JJbnRlcm5hbCh0cmFuc2Zvcm1TdHJlYW0sIGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0cmFuc2Zvcm1TdHJlYW0uX2Vycm9yZWQgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fZXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uX3N0b3JlZEVycm9yID0gZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVN0cmVhbS5fd3JpdGFibGVEb25lID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcih0cmFuc2Zvcm1TdHJlYW0uX3dyaXRhYmxlQ29udHJvbGxlciwgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1TdHJlYW0uX3JlYWRhYmxlQ2xvc2VkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcih0cmFuc2Zvcm1TdHJlYW0uX3JlYWRhYmxlQ29udHJvbGxlciwgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUcmFuc2Zvcm1TdHJlYW1SZWFkYWJsZVJlYWR5UHJvbWlzZSh0cmFuc2Zvcm1TdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2UgIT09IHVuZGVmaW5lZCwgJ19iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlIHNob3VsZCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlID09PSB0cnVlLCAnX2JhY2twcmVzc3VyZSBzaG91bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtU3RyZWFtLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVHJhbnNmb3JtU3RyZWFtU2V0QmFja3ByZXNzdXJlKHRyYW5zZm9ybVN0cmVhbSwgYmFja3ByZXNzdXJlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodHJhbnNmb3JtU3RyZWFtLl9iYWNrcHJlc3N1cmUgIT09IGJhY2twcmVzc3VyZSwgJ1RyYW5zZm9ybVN0cmVhbVNldEJhY2twcmVzc3VyZSgpIHNob3VsZCBiZSBjYWxsZWQgb25seSB3aGVuIGJhY2twcmVzc3VyZSBpcyBjaGFuZ2VkJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZV9yZXNvbHZlKGJhY2twcmVzc3VyZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZS50aGVuKGZ1bmN0aW9uIChyZXNvbHV0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlc29sdXRpb24gIT09IGJhY2twcmVzc3VyZSwgJ19iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlIHNob3VsZCBiZSBmdWxmaWxsZWQgb25seSB3aGVuIGJhY2twcmVzc3VyZSBpcyBjaGFuZ2VkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl9iYWNrcHJlc3N1cmUgPSBiYWNrcHJlc3N1cmU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0VHJhbnNmb3JtKGNodW5rLCB0cmFuc2Zvcm1TdHJlYW1Db250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtU3RyZWFtID0gdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlci5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbUVucXVldWVUb1JlYWRhYmxlKHRyYW5zZm9ybVN0cmVhbSwgY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVHJhbnNmb3JtU3RyZWFtVHJhbnNmb3JtKHRyYW5zZm9ybVN0cmVhbSwgY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0cmFuc2Zvcm1TdHJlYW0uX2Vycm9yZWQgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0cmFuc2Zvcm1TdHJlYW0uX3RyYW5zZm9ybWluZyA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uX3RyYW5zZm9ybWluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtZXIgPSB0cmFuc2Zvcm1TdHJlYW0uX3RyYW5zZm9ybWVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSB0cmFuc2Zvcm1TdHJlYW0uX3RyYW5zZm9ybVN0cmVhbUNvbnRyb2xsZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtUHJvbWlzZSA9IFByb21pc2VJbnZva2VPclBlcmZvcm1GYWxsYmFjayh0cmFuc2Zvcm1lciwgJ3RyYW5zZm9ybScsIFtjaHVuaywgY29udHJvbGxlcl0sIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRUcmFuc2Zvcm0sIFtjaHVuaywgY29udHJvbGxlcl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybVByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl90cmFuc2Zvcm1pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJhbnNmb3JtU3RyZWFtUmVhZGFibGVSZWFkeVByb21pc2UodHJhbnNmb3JtU3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtRXJyb3JJZk5lZWRlZCh0cmFuc2Zvcm1TdHJlYW0sIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSXNUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcih4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXR5cGVJc09iamVjdCh4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ19jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSXNUcmFuc2Zvcm1TdHJlYW0oeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0eXBlSXNPYmplY3QoeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdfdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBUcmFuc2Zvcm1TdHJlYW1TaW5rID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVHJhbnNmb3JtU3RyZWFtU2luayh0cmFuc2Zvcm1TdHJlYW0sIHN0YXJ0UHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUcmFuc2Zvcm1TdHJlYW1TaW5rKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zZm9ybVN0cmVhbSA9IHRyYW5zZm9ybVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydFByb21pc2UgPSBzdGFydFByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhUcmFuc2Zvcm1TdHJlYW1TaW5rLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3RhcnQoYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtU3RyZWFtID0gdGhpcy5fdHJhbnNmb3JtU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uX3dyaXRhYmxlQ29udHJvbGxlciA9IGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGFydFByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJhbnNmb3JtU3RyZWFtUmVhZGFibGVSZWFkeVByb21pc2UodHJhbnNmb3JtU3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3dyaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gd3JpdGUoY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmVhbSA9IHRoaXMuX3RyYW5zZm9ybVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybVN0cmVhbVRyYW5zZm9ybSh0cmFuc2Zvcm1TdHJlYW0sIGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnYWJvcnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhYm9ydCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmVhbSA9IHRoaXMuX3RyYW5zZm9ybVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl93cml0YWJsZURvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1TdHJlYW1FcnJvckludGVybmFsKHRyYW5zZm9ybVN0cmVhbSwgbmV3IFR5cGVFcnJvcignV3JpdGFibGUgc2lkZSBhYm9ydGVkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdjbG9zZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtU3RyZWFtID0gdGhpcy5fdHJhbnNmb3JtU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodHJhbnNmb3JtU3RyZWFtLl90cmFuc2Zvcm1pbmcgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl93cml0YWJsZURvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmx1c2hQcm9taXNlID0gUHJvbWlzZUludm9rZU9yTm9vcCh0cmFuc2Zvcm1TdHJlYW0uX3RyYW5zZm9ybWVyLCAnZmx1c2gnLCBbdHJhbnNmb3JtU3RyZWFtLl90cmFuc2Zvcm1TdHJlYW1Db250cm9sbGVyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbHVzaFByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyZWFtLl9lcnJvcmVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHRyYW5zZm9ybVN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyZWFtLl9yZWFkYWJsZUNsb3NlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1TdHJlYW1DbG9zZVJlYWRhYmxlSW50ZXJuYWwodHJhbnNmb3JtU3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtRXJyb3JJZk5lZWRlZCh0cmFuc2Zvcm1TdHJlYW0sIHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHRyYW5zZm9ybVN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1TdHJlYW1TaW5rO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFRyYW5zZm9ybVN0cmVhbVNvdXJjZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbVNvdXJjZSh0cmFuc2Zvcm1TdHJlYW0sIHN0YXJ0UHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUcmFuc2Zvcm1TdHJlYW1Tb3VyY2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNmb3JtU3RyZWFtID0gdHJhbnNmb3JtU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0UHJvbWlzZSA9IHN0YXJ0UHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFRyYW5zZm9ybVN0cmVhbVNvdXJjZSwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdzdGFydCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN0YXJ0KGMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmVhbSA9IHRoaXMuX3RyYW5zZm9ybVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl9yZWFkYWJsZUNvbnRyb2xsZXIgPSBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSAhPT0gdW5kZWZpbmVkLCAnX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2Ugc2hvdWxkIGhhdmUgYmVlbiBpbml0aWFsaXplZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyZWFtLl9iYWNrcHJlc3N1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZSA9PT0gZmFsc2UsICdfYmFja3ByZXNzdXJlIHNob3VsZCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdwdWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcHVsbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmVhbSA9IHRoaXMuX3RyYW5zZm9ybVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlID09PSB0cnVlLCAncHVsbCgpIHNob3VsZCBiZSBuZXZlciBjYWxsZWQgd2hpbGUgX2JhY2twcmVzc3VyZSBpcyBmYWxzZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodHJhbnNmb3JtU3RyZWFtLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlICE9PSB1bmRlZmluZWQsICdfYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSBzaG91bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbVNldEJhY2twcmVzc3VyZSh0cmFuc2Zvcm1TdHJlYW0sIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtU3RyZWFtID0gdGhpcy5fdHJhbnNmb3JtU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uX3JlYWRhYmxlQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtRXJyb3JJbnRlcm5hbCh0cmFuc2Zvcm1TdHJlYW0sIG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlIHNpZGUgY2FuY2VsZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJhbnNmb3JtU3RyZWFtU291cmNlO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIodHJhbnNmb3JtU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1RyYW5zZm9ybVN0cmVhbSh0cmFuc2Zvcm1TdHJlYW0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciBjYW4gb25seSBiZSAnICsgJ2NvbnN0cnVjdGVkIHdpdGggYSBUcmFuc2Zvcm1TdHJlYW0gaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyZWFtLl90cmFuc2Zvcm1TdHJlYW1Db250cm9sbGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgaW5zdGFuY2VzIGNhbiAnICsgJ29ubHkgYmUgY3JlYXRlZCBieSB0aGUgVHJhbnNmb3JtU3RyZWFtIGNvbnN0cnVjdG9yJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbSA9IHRyYW5zZm9ybVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2VucXVldWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBlbnF1ZXVlKGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1RyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZGVmYXVsdENvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdlbnF1ZXVlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1TdHJlYW1FbnF1ZXVlVG9SZWFkYWJsZSh0aGlzLl9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtLCBjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Nsb3NlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1RyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZGVmYXVsdENvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdjbG9zZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtQ2xvc2VSZWFkYWJsZSh0aGlzLl9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBlcnJvcihyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBkZWZhdWx0Q29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1TdHJlYW1FcnJvcih0aGlzLl9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtLCByZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdkZXNpcmVkU2l6ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1RyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZGVmYXVsdENvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdkZXNpcmVkU2l6ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmVhbSA9IHRoaXMuX2NvbnRyb2xsZWRUcmFuc2Zvcm1TdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkYWJsZUNvbnRyb2xsZXIgPSB0cmFuc2Zvcm1TdHJlYW0uX3JlYWRhYmxlQ29udHJvbGxlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZShyZWFkYWJsZUNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFRyYW5zZm9ybVN0cmVhbSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRyYW5zZm9ybVN0cmVhbSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2Zvcm1lciA9IHRyYW5zZm9ybWVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkYWJsZVN0cmF0ZWd5ID0gdHJhbnNmb3JtZXIucmVhZGFibGVTdHJhdGVneSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGFibGVTdHJhdGVneSA9IHRyYW5zZm9ybWVyLndyaXRhYmxlU3RyYXRlZ3k7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNmb3JtaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyb3JlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JlZEVycm9yID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dyaXRhYmxlQ29udHJvbGxlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZUNvbnRyb2xsZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl93cml0YWJsZURvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZUNsb3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JhY2twcmVzc3VyZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2Zvcm1TdHJlYW1Db250cm9sbGVyID0gbmV3IFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydFByb21pc2VfcmVzb2x2ZSA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQcm9taXNlX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBuZXcgVHJhbnNmb3JtU3RyZWFtU291cmNlKHRoaXMsIHN0YXJ0UHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGUgPSBuZXcgUmVhZGFibGVTdHJlYW0oc291cmNlLCByZWFkYWJsZVN0cmF0ZWd5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2luayA9IG5ldyBUcmFuc2Zvcm1TdHJlYW1TaW5rKHRoaXMsIHN0YXJ0UHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd3JpdGFibGUgPSBuZXcgV3JpdGFibGVTdHJlYW0oc2luaywgd3JpdGFibGVTdHJhdGVneSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHRoaXMuX3dyaXRhYmxlQ29udHJvbGxlciAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodGhpcy5fcmVhZGFibGVDb250cm9sbGVyICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNpcmVkU2l6ZSA9IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZSh0aGlzLl9yZWFkYWJsZUNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbVNldEJhY2twcmVzc3VyZSh0aGlzLCBkZXNpcmVkU2l6ZSA8PSAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtU3RyZWFtID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRSZXN1bHQgPSBJbnZva2VPck5vb3AodHJhbnNmb3JtZXIsICdzdGFydCcsIFt0cmFuc2Zvcm1TdHJlYW0uX3RyYW5zZm9ybVN0cmVhbUNvbnRyb2xsZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFByb21pc2VfcmVzb2x2ZShzdGFydFJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQcm9taXNlLmNhdGNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1TdHJlYW0uX2Vycm9yZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uX2Vycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl9zdG9yZWRFcnJvciA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFRyYW5zZm9ybVN0cmVhbSwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdyZWFkYWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1RyYW5zZm9ybVN0cmVhbSh0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHN0cmVhbUJyYW5kQ2hlY2tFeGNlcHRpb24oJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVhZGFibGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3dyaXRhYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzVHJhbnNmb3JtU3RyZWFtKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgc3RyZWFtQnJhbmRDaGVja0V4Y2VwdGlvbignd3JpdGFibGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93cml0YWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1TdHJlYW07XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbTogVHJhbnNmb3JtU3RyZWFtXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdENvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKCdUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlci5wcm90b3R5cGUuJyArIG5hbWUgKyAnIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc3RyZWFtQnJhbmRDaGVja0V4Y2VwdGlvbihuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignVHJhbnNmb3JtU3RyZWFtLnByb3RvdHlwZS4nICsgbmFtZSArICcgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFRyYW5zZm9ybVN0cmVhbScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNSk7XG4gICAgICAgICAgICAgICAgfV0pKTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTQ5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzVVJMU3VwcG9ydGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgVVJMID09PSAnZnVuY3Rpb24nICYmIF90eXBlb2YoVVJMLnByb3RvdHlwZSkgPT09ICdvYmplY3QnICYmICdvcmlnaW4nIGluIFVSTC5wcm90b3R5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdSA9IG5ldyBVUkwoJ2InLCAnaHR0cDovL2EnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1LnBhdGhuYW1lID0gJ2MlMjBkJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1VSTFN1cHBvcnRlZCA9IHUuaHJlZiA9PT0gJ2h0dHA6Ly9hL2MlMjBkJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVVJMU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlVSTCA9IFVSTDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBQb2x5ZmlsbFVSTCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTUwKS5VUkw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBPcmlnaW5hbFVSTCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOCkuVVJMO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoT3JpZ2luYWxVUkwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb2x5ZmlsbFVSTC5jcmVhdGVPYmplY3RVUkwgPSBmdW5jdGlvbiAoYmxvYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT3JpZ2luYWxVUkwuY3JlYXRlT2JqZWN0VVJMLmFwcGx5KE9yaWdpbmFsVVJMLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb2x5ZmlsbFVSTC5yZXZva2VPYmplY3RVUkwgPSBmdW5jdGlvbiAodXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yaWdpbmFsVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuVVJMID0gUG9seWZpbGxVUkw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE1MCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIChmdW5jdGlvbiBVUkxDb25zdHJ1Y3RvckNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICd1c2Ugc3RyaWN0JztcblxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVsYXRpdmUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVsnZnRwJ10gPSAyMTtcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVbJ2ZpbGUnXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlWydnb3BoZXInXSA9IDcwO1xuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVsnaHR0cCddID0gODA7XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlWydodHRwcyddID0gNDQzO1xuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVsnd3MnXSA9IDgwO1xuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVsnd3NzJ10gPSA0NDM7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZWxhdGl2ZVBhdGhEb3RNYXBwaW5nID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoRG90TWFwcGluZ1snJTJlJ10gPSAnLic7XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aERvdE1hcHBpbmdbJy4lMmUnXSA9ICcuLic7XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aERvdE1hcHBpbmdbJyUyZS4nXSA9ICcuLic7XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aERvdE1hcHBpbmdbJyUyZSUyZSddID0gJy4uJztcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc1JlbGF0aXZlU2NoZW1lKHNjaGVtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbGF0aXZlW3NjaGVtZV0gIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGludmFsaWQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhci5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElETkFUb0FTQ0lJKGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWQuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGgudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBlcmNlbnRFc2NhcGUoYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuaWNvZGUgPSBjLmNoYXJDb2RlQXQoMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlID4gMHgyMCAmJiB1bmljb2RlIDwgMHg3RiAmJiBbMHgyMiwgMHgyMywgMHgzQywgMHgzRSwgMHgzRiwgMHg2MF0uaW5kZXhPZih1bmljb2RlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChjKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBlcmNlbnRFc2NhcGVRdWVyeShjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdW5pY29kZSA9IGMuY2hhckNvZGVBdCgwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGUgPiAweDIwICYmIHVuaWNvZGUgPCAweDdGICYmIFsweDIyLCAweDIzLCAweDNDLCAweDNFLCAweDYwXS5pbmRleE9mKHVuaWNvZGUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGMpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIEVPRixcbiAgICAgICAgICAgICAgICAgICAgICAgIEFMUEhBID0gL1thLXpBLVpdLyxcbiAgICAgICAgICAgICAgICAgICAgICAgIEFMUEhBTlVNRVJJQyA9IC9bYS16QS1aMC05XFwrXFwtXFwuXS87XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcGFyc2UoaW5wdXQsIHN0YXRlT3ZlcnJpZGUsIGJhc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGVycihtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0YXRlT3ZlcnJpZGUgfHwgJ3NjaGVtZSBzdGFydCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVuQXQgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVuQnJhY2tldCA9IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBsb29wOiB3aGlsZSAoKGlucHV0W2N1cnNvciAtIDFdICE9PSBFT0YgfHwgY3Vyc29yID09PSAwKSAmJiAhdGhpcy5faXNJbnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBpbnB1dFtjdXJzb3JdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzY2hlbWUgc3RhcnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgJiYgQUxQSEEudGVzdChjKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSBjLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnc2NoZW1lJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0YXRlT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdubyBzY2hlbWUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIoJ0ludmFsaWQgc2NoZW1lLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGxvb3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NjaGVtZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAmJiBBTFBIQU5VTUVSSUMudGVzdChjKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSBjLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICc6Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NjaGVtZSA9IGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAnJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGxvb3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVsYXRpdmVTY2hlbWUodGhpcy5fc2NoZW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1JlbGF0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2NoZW1lID09PSAnZmlsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAncmVsYXRpdmUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5faXNSZWxhdGl2ZSAmJiBiYXNlICYmIGJhc2UuX3NjaGVtZSA9PT0gdGhpcy5fc2NoZW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3JlbGF0aXZlIG9yIGF1dGhvcml0eSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9pc1JlbGF0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ2F1dGhvcml0eSBmaXJzdCBzbGFzaCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnc2NoZW1lIGRhdGEnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0YXRlT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ25vIHNjaGVtZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09IEVPRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGxvb3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycignQ29kZSBwb2ludCBub3QgYWxsb3dlZCBpbiBzY2hlbWU6ICcgKyBjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsb29wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzY2hlbWUgZGF0YSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJz8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcXVlcnkgPSAnPyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAncXVlcnknO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnIycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mcmFnbWVudCA9ICcjJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdmcmFnbWVudCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjICE9PSBFT0YgJiYgYyAhPT0gJ1xcdCcgJiYgYyAhPT0gJ1xcbicgJiYgYyAhPT0gJ1xccicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2NoZW1lRGF0YSArPSBwZXJjZW50RXNjYXBlKGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbm8gc2NoZW1lJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmFzZSB8fCAhaXNSZWxhdGl2ZVNjaGVtZShiYXNlLl9zY2hlbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCdNaXNzaW5nIHNjaGVtZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3JlbGF0aXZlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVsYXRpdmUgb3IgYXV0aG9yaXR5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnLycgJiYgaW5wdXRbY3Vyc29yICsgMV0gPT09ICcvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ2F1dGhvcml0eSBpZ25vcmUgc2xhc2hlcyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycignRXhwZWN0ZWQgLywgZ290OiAnICsgYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAncmVsYXRpdmUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyZWxhdGl2ZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1JlbGF0aXZlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NjaGVtZSAhPT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2NoZW1lID0gYmFzZS5fc2NoZW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gRU9GKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG9zdCA9IGJhc2UuX2hvc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9ydCA9IGJhc2UuX3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGF0aCA9IGJhc2UuX3BhdGguc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWVyeSA9IGJhc2UuX3F1ZXJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJuYW1lID0gYmFzZS5fdXNlcm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGFzc3dvcmQgPSBiYXNlLl9wYXNzd29yZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsb29wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnLycgfHwgYyA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIoJ1xcXFwgaXMgYW4gaW52YWxpZCBjb2RlIHBvaW50LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3JlbGF0aXZlIHNsYXNoJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJz8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG9zdCA9IGJhc2UuX2hvc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9ydCA9IGJhc2UuX3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGF0aCA9IGJhc2UuX3BhdGguc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWVyeSA9ICc/JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91c2VybmFtZSA9IGJhc2UuX3VzZXJuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bhc3N3b3JkID0gYmFzZS5fcGFzc3dvcmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAncXVlcnknO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnIycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3N0ID0gYmFzZS5faG9zdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3J0ID0gYmFzZS5fcG9ydDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXRoID0gYmFzZS5fcGF0aC5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXJ5ID0gYmFzZS5fcXVlcnk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnJhZ21lbnQgPSAnIyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXNlcm5hbWUgPSBiYXNlLl91c2VybmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXNzd29yZCA9IGJhc2UuX3Bhc3N3b3JkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ2ZyYWdtZW50JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRDID0gaW5wdXRbY3Vyc29yICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5leHROZXh0QyA9IGlucHV0W2N1cnNvciArIDJdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NjaGVtZSAhPT0gJ2ZpbGUnIHx8ICFBTFBIQS50ZXN0KGMpIHx8IG5leHRDICE9PSAnOicgJiYgbmV4dEMgIT09ICd8JyB8fCBuZXh0TmV4dEMgIT09IEVPRiAmJiBuZXh0TmV4dEMgIT09ICcvJyAmJiBuZXh0TmV4dEMgIT09ICdcXFxcJyAmJiBuZXh0TmV4dEMgIT09ICc/JyAmJiBuZXh0TmV4dEMgIT09ICcjJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3N0ID0gYmFzZS5faG9zdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9ydCA9IGJhc2UuX3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJuYW1lID0gYmFzZS5fdXNlcm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bhc3N3b3JkID0gYmFzZS5fcGFzc3dvcmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdGggPSBiYXNlLl9wYXRoLnNsaWNlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGF0aC5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdyZWxhdGl2ZSBwYXRoJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVsYXRpdmUgc2xhc2gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICcvJyB8fCBjID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycignXFxcXCBpcyBhbiBpbnZhbGlkIGNvZGUgcG9pbnQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NjaGVtZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ2ZpbGUgaG9zdCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zY2hlbWUgIT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3N0ID0gYmFzZS5faG9zdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9ydCA9IGJhc2UuX3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJuYW1lID0gYmFzZS5fdXNlcm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bhc3N3b3JkID0gYmFzZS5fcGFzc3dvcmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAncmVsYXRpdmUgcGF0aCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2F1dGhvcml0eSBmaXJzdCBzbGFzaCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJy8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnYXV0aG9yaXR5IHNlY29uZCBzbGFzaCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycignRXhwZWN0ZWQgXFwnL1xcJywgZ290OiAnICsgYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYXV0aG9yaXR5IHNlY29uZCBzbGFzaCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdhdXRob3JpdHkgaWdub3JlIHNsYXNoZXMnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPT0gJy8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCdFeHBlY3RlZCBcXCcvXFwnLCBnb3Q6ICcgKyBjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjICE9PSAnLycgJiYgYyAhPT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnYXV0aG9yaXR5JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCdFeHBlY3RlZCBhdXRob3JpdHksIGdvdDogJyArIGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhdXRob3JpdHknOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdAJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWVuQXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCdAIGFscmVhZHkgc2Vlbi4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9ICclNDAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZW5BdCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmZlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3AgPSBidWZmZXJbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNwID09PSAnXFx0JyB8fCBjcCA9PT0gJ1xcbicgfHwgY3AgPT09ICdcXHInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIoJ0ludmFsaWQgd2hpdGVzcGFjZSBpbiBhdXRob3JpdHkuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjcCA9PT0gJzonICYmIHRoaXMuX3Bhc3N3b3JkID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXNzd29yZCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcEMgPSBwZXJjZW50RXNjYXBlKGNwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGFzc3dvcmQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bhc3N3b3JkICs9IHRlbXBDO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXNlcm5hbWUgKz0gdGVtcEM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gRU9GIHx8IGMgPT09ICcvJyB8fCBjID09PSAnXFxcXCcgfHwgYyA9PT0gJz8nIHx8IGMgPT09ICcjJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvciAtPSBidWZmZXIubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ2hvc3QnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZmlsZSBob3N0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSBFT0YgfHwgYyA9PT0gJy8nIHx8IGMgPT09ICdcXFxcJyB8fCBjID09PSAnPycgfHwgYyA9PT0gJyMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDIgJiYgQUxQSEEudGVzdChidWZmZXJbMF0pICYmIChidWZmZXJbMV0gPT09ICc6JyB8fCBidWZmZXJbMV0gPT09ICd8JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAncmVsYXRpdmUgcGF0aCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3JlbGF0aXZlIHBhdGggc3RhcnQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hvc3QgPSBJRE5BVG9BU0NJSS5jYWxsKHRoaXMsIGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdyZWxhdGl2ZSBwYXRoIHN0YXJ0JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJ1xcdCcgfHwgYyA9PT0gJ1xcbicgfHwgYyA9PT0gJ1xccicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIoJ0ludmFsaWQgd2hpdGVzcGFjZSBpbiBmaWxlIGhvc3QuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdob3N0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaG9zdG5hbWUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICc6JyAmJiAhc2VlbkJyYWNrZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3N0ID0gSUROQVRvQVNDSUkuY2FsbCh0aGlzLCBidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3BvcnQnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUgPT09ICdob3N0bmFtZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbG9vcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09IEVPRiB8fCBjID09PSAnLycgfHwgYyA9PT0gJ1xcXFwnIHx8IGMgPT09ICc/JyB8fCBjID09PSAnIycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3N0ID0gSUROQVRvQVNDSUkuY2FsbCh0aGlzLCBidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3JlbGF0aXZlIHBhdGggc3RhcnQnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbG9vcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyAhPT0gJ1xcdCcgJiYgYyAhPT0gJ1xcbicgJiYgYyAhPT0gJ1xccicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJ1snKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZW5CcmFja2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICddJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVuQnJhY2tldCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIoJ0ludmFsaWQgY29kZSBwb2ludCBpbiBob3N0L2hvc3RuYW1lOiAnICsgYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3BvcnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC9bMC05XS8udGVzdChjKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSBFT0YgfHwgYyA9PT0gJy8nIHx8IGMgPT09ICdcXFxcJyB8fCBjID09PSAnPycgfHwgYyA9PT0gJyMnIHx8IHN0YXRlT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IHBhcnNlSW50KGJ1ZmZlciwgMTApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wICE9PSByZWxhdGl2ZVt0aGlzLl9zY2hlbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3J0ID0gdGVtcCArICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbG9vcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdyZWxhdGl2ZSBwYXRoIHN0YXJ0JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJ1xcdCcgfHwgYyA9PT0gJ1xcbicgfHwgYyA9PT0gJ1xccicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIoJ0ludmFsaWQgY29kZSBwb2ludCBpbiBwb3J0OiAnICsgYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWQuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVsYXRpdmUgcGF0aCBzdGFydCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCdcXCdcXFxcXFwnIG5vdCBhbGxvd2VkIGluIHBhdGguJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3JlbGF0aXZlIHBhdGgnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPT0gJy8nICYmIGMgIT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyZWxhdGl2ZSBwYXRoJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSBFT0YgfHwgYyA9PT0gJy8nIHx8IGMgPT09ICdcXFxcJyB8fCAhc3RhdGVPdmVycmlkZSAmJiAoYyA9PT0gJz8nIHx8IGMgPT09ICcjJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycignXFxcXCBub3QgYWxsb3dlZCBpbiByZWxhdGl2ZSBwYXRoLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0bXA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wID0gcmVsYXRpdmVQYXRoRG90TWFwcGluZ1tidWZmZXIudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gdG1wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXIgPT09ICcuLicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGF0aC5wb3AoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPT0gJy8nICYmIGMgIT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGF0aC5wdXNoKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVmZmVyID09PSAnLicgJiYgYyAhPT0gJy8nICYmIGMgIT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXRoLnB1c2goJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVmZmVyICE9PSAnLicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NjaGVtZSA9PT0gJ2ZpbGUnICYmIHRoaXMuX3BhdGgubGVuZ3RoID09PSAwICYmIGJ1ZmZlci5sZW5ndGggPT09IDIgJiYgQUxQSEEudGVzdChidWZmZXJbMF0pICYmIGJ1ZmZlclsxXSA9PT0gJ3wnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBidWZmZXJbMF0gKyAnOic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXRoLnB1c2goYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAnJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnPycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcXVlcnkgPSAnPyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3F1ZXJ5JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICcjJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mcmFnbWVudCA9ICcjJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnZnJhZ21lbnQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyAhPT0gJ1xcdCcgJiYgYyAhPT0gJ1xcbicgJiYgYyAhPT0gJ1xccicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gcGVyY2VudEVzY2FwZShjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncXVlcnknOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZU92ZXJyaWRlICYmIGMgPT09ICcjJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZyYWdtZW50ID0gJyMnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ2ZyYWdtZW50JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyAhPT0gRU9GICYmIGMgIT09ICdcXHQnICYmIGMgIT09ICdcXG4nICYmIGMgIT09ICdcXHInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcXVlcnkgKz0gcGVyY2VudEVzY2FwZVF1ZXJ5KGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmcmFnbWVudCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPT0gRU9GICYmIGMgIT09ICdcXHQnICYmIGMgIT09ICdcXG4nICYmIGMgIT09ICdcXHInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnJhZ21lbnQgKz0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NjaGVtZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2NoZW1lRGF0YSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXNlcm5hbWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bhc3N3b3JkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hvc3QgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcnQgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdGggPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXJ5ID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mcmFnbWVudCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1JlbGF0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBKVVJMKHVybCwgYmFzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2UgIT09IHVuZGVmaW5lZCAmJiAhKGJhc2UgaW5zdGFuY2VvZiBKVVJMKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBuZXcgSlVSTChTdHJpbmcoYmFzZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91cmwgPSB1cmw7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhci5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdXJsLnJlcGxhY2UoL15bIFxcdFxcclxcblxcZl0rfFsgXFx0XFxyXFxuXFxmXSskL2csICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlLmNhbGwodGhpcywgaW5wdXQsIG51bGwsIGJhc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgSlVSTC5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHJlZjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBocmVmKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0ludmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXV0aG9yaXR5ID0gJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdXNlcm5hbWUgIT09ICcnIHx8IHRoaXMuX3Bhc3N3b3JkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eSA9IHRoaXMuX3VzZXJuYW1lICsgKHRoaXMuX3Bhc3N3b3JkICE9PSBudWxsID8gJzonICsgdGhpcy5fcGFzc3dvcmQgOiAnJykgKyAnQCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvdG9jb2wgKyAodGhpcy5faXNSZWxhdGl2ZSA/ICcvLycgKyBhdXRob3JpdHkgKyB0aGlzLmhvc3QgOiAnJykgKyB0aGlzLnBhdGhuYW1lICsgdGhpcy5fcXVlcnkgKyB0aGlzLl9mcmFnbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBocmVmKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXIuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZS5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBwcm90b2NvbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NoZW1lICsgJzonO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHByb3RvY29sKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzSW52YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2UuY2FsbCh0aGlzLCB2YWx1ZSArICc6JywgJ3NjaGVtZSBzdGFydCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGhvc3QoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzSW52YWxpZCA/ICcnIDogdGhpcy5fcG9ydCA/IHRoaXMuX2hvc3QgKyAnOicgKyB0aGlzLl9wb3J0IDogdGhpcy5faG9zdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBob3N0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzSW52YWxpZCB8fCAhdGhpcy5faXNSZWxhdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2UuY2FsbCh0aGlzLCB2YWx1ZSwgJ2hvc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBob3N0bmFtZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faG9zdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBob3N0bmFtZSh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0ludmFsaWQgfHwgIXRoaXMuX2lzUmVsYXRpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlLmNhbGwodGhpcywgdmFsdWUsICdob3N0bmFtZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IHBvcnQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgcG9ydCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0ludmFsaWQgfHwgIXRoaXMuX2lzUmVsYXRpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlLmNhbGwodGhpcywgdmFsdWUsICdwb3J0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgcGF0aG5hbWUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzSW52YWxpZCA/ICcnIDogdGhpcy5faXNSZWxhdGl2ZSA/ICcvJyArIHRoaXMuX3BhdGguam9pbignLycpIDogdGhpcy5fc2NoZW1lRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBwYXRobmFtZSh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0ludmFsaWQgfHwgIXRoaXMuX2lzUmVsYXRpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdGggPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZS5jYWxsKHRoaXMsIHZhbHVlLCAncmVsYXRpdmUgcGF0aCBzdGFydCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IHNlYXJjaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNJbnZhbGlkIHx8ICF0aGlzLl9xdWVyeSB8fCB0aGlzLl9xdWVyeSA9PT0gJz8nID8gJycgOiB0aGlzLl9xdWVyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBzZWFyY2godmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNJbnZhbGlkIHx8ICF0aGlzLl9pc1JlbGF0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWVyeSA9ICc/JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZVswXSA9PT0gJz8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2UuY2FsbCh0aGlzLCB2YWx1ZSwgJ3F1ZXJ5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgaGFzaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNJbnZhbGlkIHx8ICF0aGlzLl9mcmFnbWVudCB8fCB0aGlzLl9mcmFnbWVudCA9PT0gJyMnID8gJycgOiB0aGlzLl9mcmFnbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBoYXNoKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzSW52YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnJhZ21lbnQgPSAnIyc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVbMF0gPT09ICcjJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlLmNhbGwodGhpcywgdmFsdWUsICdmcmFnbWVudCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IG9yaWdpbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaG9zdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0ludmFsaWQgfHwgIXRoaXMuX3NjaGVtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLl9zY2hlbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGF0YSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ZpbGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdqYXZhc2NyaXB0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFpbHRvJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnbnVsbCc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYmxvYic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSlVSTCh0aGlzLl9zY2hlbWVEYXRhKS5vcmlnaW4gfHwgJ251bGwnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoXykge31cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0ID0gdGhpcy5ob3N0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFob3N0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NoZW1lICsgJzovLycgKyBob3N0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuVVJMID0gSlVSTDtcbiAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNTEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLk5ldHdvcmtQZGZNYW5hZ2VyID0gZXhwb3J0cy5Mb2NhbFBkZk1hbmFnZXIgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3JlZ2VuZXJhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIpKTtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2NodW5rZWRfc3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9kb2N1bWVudCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTUzKTtcblxuICAgICAgICAgICAgICAgIHZhciBfc3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTcpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykgeyB0cnkgeyB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7IHZhciB2YWx1ZSA9IGluZm8udmFsdWU7IH0gY2F0Y2ggKGVycm9yKSB7IHJlamVjdChlcnJvcik7IHJldHVybjsgfSBpZiAoaW5mby5kb25lKSB7IHJlc29sdmUodmFsdWUpOyB9IGVsc2UgeyBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuICAgICAgICAgICAgICAgIHZhciBCYXNlUGRmTWFuYWdlciA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQmFzZVBkZk1hbmFnZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJhc2VQZGZNYW5hZ2VyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBCYXNlUGRmTWFuYWdlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKCdDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlUGRmTWFuYWdlci4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhCYXNlUGRmTWFuYWdlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwib25Mb2FkZWRTdHJlYW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gb25Mb2FkZWRTdHJlYW0oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ0Fic3RyYWN0IG1ldGhvZCBgb25Mb2FkZWRTdHJlYW1gIGNhbGxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZW5zdXJlRG9jXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGVuc3VyZURvYyhwcm9wLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LCBwcm9wLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImVuc3VyZVhSZWZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZW5zdXJlWFJlZihwcm9wLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LnhyZWYsIHByb3AsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZW5zdXJlQ2F0YWxvZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBlbnN1cmVDYXRhbG9nKHByb3AsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5zdXJlKHRoaXMucGRmRG9jdW1lbnQuY2F0YWxvZywgcHJvcCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRQYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFBhZ2UocGFnZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBkZkRvY3VtZW50LmdldFBhZ2UocGFnZUluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImZvbnRGYWxsYmFja1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmb250RmFsbGJhY2soaWQsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuZm9udEZhbGxiYWNrKGlkLCBoYW5kbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNsZWFudXBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuY2xlYW51cCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZW5zdXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9lbnN1cmUgPSBfYXN5bmNUb0dlbmVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWdlbmVyYXRvci5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZShvYmosIHByb3AsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnQWJzdHJhY3QgbWV0aG9kIGBlbnN1cmVgIGNhbGxlZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIF9jYWxsZWUsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGVuc3VyZShfeCwgX3gyLCBfeDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZW5zdXJlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW5zdXJlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0oKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZXF1ZXN0UmFuZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0UmFuZ2VgIGNhbGxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVxdWVzdExvYWRlZFN0cmVhbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXF1ZXN0TG9hZGVkU3RyZWFtKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKCdBYnN0cmFjdCBtZXRob2QgYHJlcXVlc3RMb2FkZWRTdHJlYW1gIGNhbGxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwic2VuZFByb2dyZXNzaXZlRGF0YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZW5kUHJvZ3Jlc3NpdmVEYXRhKGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ0Fic3RyYWN0IG1ldGhvZCBgc2VuZFByb2dyZXNzaXZlRGF0YWAgY2FsbGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJ1cGRhdGVQYXNzd29yZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVQYXNzd29yZChwYXNzd29yZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXNzd29yZCA9IHBhc3N3b3JkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwidGVybWluYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRlcm1pbmF0ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnQWJzdHJhY3QgbWV0aG9kIGB0ZXJtaW5hdGVgIGNhbGxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZG9jSWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RvY0lkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicGFzc3dvcmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bhc3N3b3JkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZG9jQmFzZVVybFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9jQmFzZVVybCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RvY0Jhc2VVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhYnNvbHV0ZVVybCA9ICgwLCBfdXRpbC5jcmVhdGVWYWxpZEFic29sdXRlVXJsKSh0aGlzLl9kb2NCYXNlVXJsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFic29sdXRlVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jQmFzZVVybCA9IGFic29sdXRlVXJsLmhyZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIkludmFsaWQgYWJzb2x1dGUgZG9jQmFzZVVybDogXFxcIlwiLmNvbmNhdCh0aGlzLl9kb2NCYXNlVXJsLCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnZG9jQmFzZVVybCcsIGRvY0Jhc2VVcmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJhc2VQZGZNYW5hZ2VyO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgTG9jYWxQZGZNYW5hZ2VyID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0Jhc2VQZGZNYW5hZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoTG9jYWxQZGZNYW5hZ2VyLCBfQmFzZVBkZk1hbmFnZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBMb2NhbFBkZk1hbmFnZXIoZG9jSWQsIGRhdGEsIHBhc3N3b3JkLCBldmFsdWF0b3JPcHRpb25zLCBkb2NCYXNlVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExvY2FsUGRmTWFuYWdlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihMb2NhbFBkZk1hbmFnZXIpLmNhbGwodGhpcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9kb2NJZCA9IGRvY0lkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9wYXNzd29yZCA9IHBhc3N3b3JkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9kb2NCYXNlVXJsID0gZG9jQmFzZVVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5ldmFsdWF0b3JPcHRpb25zID0gZXZhbHVhdG9yT3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gbmV3IF9zdHJlYW0uU3RyZWFtKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnBkZkRvY3VtZW50ID0gbmV3IF9kb2N1bWVudC5QREZEb2N1bWVudChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fbG9hZGVkU3RyZWFtUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKExvY2FsUGRmTWFuYWdlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZW5zdXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9lbnN1cmUyID0gX2FzeW5jVG9HZW5lcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVnZW5lcmF0b3IuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyKG9iaiwgcHJvcCwgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMiQoX2NvbnRleHQyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0Mi5wcmV2ID0gX2NvbnRleHQyLm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gb2JqW3Byb3BdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoXCJyZXR1cm5cIiwgdmFsdWUuYXBwbHkob2JqLCBhcmdzKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KFwicmV0dXJuXCIsIHZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgX2NhbGxlZTIsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGVuc3VyZShfeDQsIF94NSwgX3g2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2Vuc3VyZTIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnN1cmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlcXVlc3RSYW5nZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXF1ZXN0UmFuZ2UoYmVnaW4sIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZXF1ZXN0TG9hZGVkU3RyZWFtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlcXVlc3RMb2FkZWRTdHJlYW0oKSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJvbkxvYWRlZFN0cmVhbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBvbkxvYWRlZFN0cmVhbSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRlZFN0cmVhbVByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJ0ZXJtaW5hdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdGVybWluYXRlKCkge31cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExvY2FsUGRmTWFuYWdlcjtcbiAgICAgICAgICAgICAgICAgICAgfShCYXNlUGRmTWFuYWdlcik7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkxvY2FsUGRmTWFuYWdlciA9IExvY2FsUGRmTWFuYWdlcjtcblxuICAgICAgICAgICAgICAgIHZhciBOZXR3b3JrUGRmTWFuYWdlciA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9CYXNlUGRmTWFuYWdlcjIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhOZXR3b3JrUGRmTWFuYWdlciwgX0Jhc2VQZGZNYW5hZ2VyMik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE5ldHdvcmtQZGZNYW5hZ2VyKGRvY0lkLCBwZGZOZXR3b3JrU3RyZWFtLCBhcmdzLCBldmFsdWF0b3JPcHRpb25zLCBkb2NCYXNlVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBOZXR3b3JrUGRmTWFuYWdlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoTmV0d29ya1BkZk1hbmFnZXIpLmNhbGwodGhpcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5fZG9jSWQgPSBkb2NJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuX3Bhc3N3b3JkID0gYXJncy5wYXNzd29yZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuX2RvY0Jhc2VVcmwgPSBkb2NCYXNlVXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5tc2dIYW5kbGVyID0gYXJncy5tc2dIYW5kbGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5ldmFsdWF0b3JPcHRpb25zID0gZXZhbHVhdG9yT3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuc3RyZWFtTWFuYWdlciA9IG5ldyBfY2h1bmtlZF9zdHJlYW0uQ2h1bmtlZFN0cmVhbU1hbmFnZXIocGRmTmV0d29ya1N0cmVhbSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dIYW5kbGVyOiBhcmdzLm1zZ0hhbmRsZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDogYXJncy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVBdXRvRmV0Y2g6IGFyZ3MuZGlzYWJsZUF1dG9GZXRjaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VDaHVua1NpemU6IGFyZ3MucmFuZ2VDaHVua1NpemVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIucGRmRG9jdW1lbnQgPSBuZXcgX2RvY3VtZW50LlBERkRvY3VtZW50KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpczIpKSwgX3RoaXMyLnN0cmVhbU1hbmFnZXIuZ2V0U3RyZWFtKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhOZXR3b3JrUGRmTWFuYWdlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZW5zdXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9lbnN1cmUzID0gX2FzeW5jVG9HZW5lcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVnZW5lcmF0b3IuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUzKG9iaiwgcHJvcCwgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMyQoX2NvbnRleHQzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0My5wcmV2ID0gX2NvbnRleHQzLm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0My5wcmV2ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBvYmpbcHJvcF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLmFicnVwdChcInJldHVyblwiLCB2YWx1ZS5hcHBseShvYmosIGFyZ3MpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5hYnJ1cHQoXCJyZXR1cm5cIiwgdmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDMucHJldiA9IDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0My50MCA9IF9jb250ZXh0M1tcImNhdGNoXCJdKDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfY29udGV4dDMudDAgaW5zdGFuY2VvZiBfdXRpbC5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSAxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgX2NvbnRleHQzLnQwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSAxMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdFJhbmdlKF9jb250ZXh0My50MC5iZWdpbiwgX2NvbnRleHQzLnQwLmVuZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLmFicnVwdChcInJldHVyblwiLCB0aGlzLmVuc3VyZShvYmosIHByb3AsIGFyZ3MpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIF9jYWxsZWUzLCB0aGlzLCBbWzAsIDddXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZW5zdXJlKF94NywgX3g4LCBfeDkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZW5zdXJlMy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVuc3VyZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVxdWVzdFJhbmdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlcXVlc3RSYW5nZShiZWdpbiwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVhbU1hbmFnZXIucmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVxdWVzdExvYWRlZFN0cmVhbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXF1ZXN0TG9hZGVkU3RyZWFtKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbU1hbmFnZXIucmVxdWVzdEFsbENodW5rcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwic2VuZFByb2dyZXNzaXZlRGF0YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZW5kUHJvZ3Jlc3NpdmVEYXRhKGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtTWFuYWdlci5vblJlY2VpdmVEYXRhKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rOiBjaHVua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm9uTG9hZGVkU3RyZWFtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uTG9hZGVkU3RyZWFtKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJlYW1NYW5hZ2VyLm9uTG9hZGVkU3RyZWFtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJ0ZXJtaW5hdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdGVybWluYXRlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbU1hbmFnZXIuYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOZXR3b3JrUGRmTWFuYWdlcjtcbiAgICAgICAgICAgICAgICAgICAgfShCYXNlUGRmTWFuYWdlcik7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLk5ldHdvcmtQZGZNYW5hZ2VyID0gTmV0d29ya1BkZk1hbmFnZXI7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE1MiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ2h1bmtlZFN0cmVhbU1hbmFnZXIgPSBleHBvcnRzLkNodW5rZWRTdHJlYW0gPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgQ2h1bmtlZFN0cmVhbSA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQ2h1bmtlZFN0cmVhbShsZW5ndGgsIGNodW5rU2l6ZSwgbWFuYWdlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDaHVua2VkU3RyZWFtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnl0ZXMgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCA9IGxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNodW5rU2l6ZSA9IGNodW5rU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZENodW5rcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubnVtQ2h1bmtzTG9hZGVkID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm51bUNodW5rcyA9IE1hdGguY2VpbChsZW5ndGggLyBjaHVua1NpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFN1Y2Nlc3NmdWxFbnN1cmVCeXRlQ2h1bmsgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKENodW5rZWRTdHJlYW0sIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldE1pc3NpbmdDaHVua3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TWlzc2luZ0NodW5rcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGNodW5rID0gMCwgbiA9IHRoaXMubnVtQ2h1bmtzOyBjaHVuayA8IG47ICsrY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5sb2FkZWRDaHVua3NbY2h1bmtdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNodW5rcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldEJhc2VTdHJlYW1zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldEJhc2VTdHJlYW1zKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3RoaXNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiYWxsQ2h1bmtzTG9hZGVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFsbENodW5rc0xvYWRlZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtQ2h1bmtzTG9hZGVkID09PSB0aGlzLm51bUNodW5rcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm9uUmVjZWl2ZURhdGFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gb25SZWNlaXZlRGF0YShiZWdpbiwgY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rU2l6ZSA9IHRoaXMuY2h1bmtTaXplO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiZWdpbiAlIGNodW5rU2l6ZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFkIGJlZ2luIG9mZnNldDogXCIuY29uY2F0KGJlZ2luKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gYmVnaW4gKyBjaHVuay5ieXRlTGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmQgJSBjaHVua1NpemUgIT09IDAgJiYgZW5kICE9PSB0aGlzLmJ5dGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFkIGVuZCBvZmZzZXQ6IFwiLmNvbmNhdChlbmQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnl0ZXMuc2V0KG5ldyBVaW50OEFycmF5KGNodW5rKSwgYmVnaW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmVnaW5DaHVuayA9IE1hdGguZmxvb3IoYmVnaW4gLyBjaHVua1NpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kQ2h1bmsgPSBNYXRoLmZsb29yKChlbmQgLSAxKSAvIGNodW5rU2l6ZSkgKyAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGN1ckNodW5rID0gYmVnaW5DaHVuazsgY3VyQ2h1bmsgPCBlbmRDaHVuazsgKytjdXJDaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxvYWRlZENodW5rc1tjdXJDaHVua10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZENodW5rc1tjdXJDaHVua10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrdGhpcy5udW1DaHVua3NMb2FkZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm9uUmVjZWl2ZVByb2dyZXNzaXZlRGF0YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBvblJlY2VpdmVQcm9ncmVzc2l2ZURhdGEoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJlZ2luQ2h1bmsgPSBNYXRoLmZsb29yKHBvc2l0aW9uIC8gdGhpcy5jaHVua1NpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheShkYXRhKSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoID0gcG9zaXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmRDaHVuayA9IHBvc2l0aW9uID49IHRoaXMuZW5kID8gdGhpcy5udW1DaHVua3MgOiBNYXRoLmZsb29yKHBvc2l0aW9uIC8gdGhpcy5jaHVua1NpemUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGN1ckNodW5rID0gYmVnaW5DaHVuazsgY3VyQ2h1bmsgPCBlbmRDaHVuazsgKytjdXJDaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxvYWRlZENodW5rc1tjdXJDaHVua10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZENodW5rc1tjdXJDaHVua10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrdGhpcy5udW1DaHVua3NMb2FkZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImVuc3VyZUJ5dGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZW5zdXJlQnl0ZShwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rID0gTWF0aC5mbG9vcihwb3MgLyB0aGlzLmNodW5rU2l6ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNodW5rID09PSB0aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubG9hZGVkQ2h1bmtzW2NodW5rXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLk1pc3NpbmdEYXRhRXhjZXB0aW9uKHBvcywgcG9zICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rID0gY2h1bms7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJlbnN1cmVSYW5nZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBlbnN1cmVSYW5nZShiZWdpbiwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiZWdpbiA+PSBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmQgPD0gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVua1NpemUgPSB0aGlzLmNodW5rU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJlZ2luQ2h1bmsgPSBNYXRoLmZsb29yKGJlZ2luIC8gY2h1bmtTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZENodW5rID0gTWF0aC5mbG9vcigoZW5kIC0gMSkgLyBjaHVua1NpemUpICsgMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjaHVuayA9IGJlZ2luQ2h1bms7IGNodW5rIDwgZW5kQ2h1bms7ICsrY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5sb2FkZWRDaHVua3NbY2h1bmtdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLk1pc3NpbmdEYXRhRXhjZXB0aW9uKGJlZ2luLCBlbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJuZXh0RW1wdHlDaHVua1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBuZXh0RW1wdHlDaHVuayhiZWdpbkNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1DaHVua3MgPSB0aGlzLm51bUNodW5rcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUNodW5rczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSAoYmVnaW5DaHVuayArIGkpICUgbnVtQ2h1bmtzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubG9hZGVkQ2h1bmtzW2NodW5rXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaHVuaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaGFzQ2h1bmtcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaGFzQ2h1bmsoY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5sb2FkZWRDaHVua3NbY2h1bmtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0Qnl0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRCeXRlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gdGhpcy5wb3M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvcyA+PSB0aGlzLmVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnN1cmVCeXRlKHBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJ5dGVzW3RoaXMucG9zKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0VWludDE2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFVpbnQxNigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIwID0gdGhpcy5nZXRCeXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiMSA9IHRoaXMuZ2V0Qnl0ZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiMCA9PT0gLTEgfHwgYjEgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGIwIDw8IDgpICsgYjE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRJbnQzMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbnQzMigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIwID0gdGhpcy5nZXRCeXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiMSA9IHRoaXMuZ2V0Qnl0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjIgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIzID0gdGhpcy5nZXRCeXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoYjAgPDwgMjQpICsgKGIxIDw8IDE2KSArIChiMiA8PCA4KSArIGIzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0Qnl0ZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Qnl0ZXMobGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JjZUNsYW1wZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZXMgPSB0aGlzLmJ5dGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gdGhpcy5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJFbmQgPSB0aGlzLmVuZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnN1cmVSYW5nZShwb3MsIHN0ckVuZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfc3ViYXJyYXkgPSBieXRlcy5zdWJhcnJheShwb3MsIHN0ckVuZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3JjZUNsYW1wZWQgPyBuZXcgVWludDhDbGFtcGVkQXJyYXkoX3N1YmFycmF5KSA6IF9zdWJhcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBwb3MgKyBsZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuZCA+IHN0ckVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gc3RyRW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnN1cmVSYW5nZShwb3MsIGVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zID0gZW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ViYXJyYXkgPSBieXRlcy5zdWJhcnJheShwb3MsIGVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3JjZUNsYW1wZWQgPyBuZXcgVWludDhDbGFtcGVkQXJyYXkoc3ViYXJyYXkpIDogc3ViYXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJwZWVrQnl0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwZWVrQnl0ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBlZWtlZEJ5dGUgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3MtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlZWtlZEJ5dGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJwZWVrQnl0ZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcGVla0J5dGVzKGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9yY2VDbGFtcGVkID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGVzID0gdGhpcy5nZXRCeXRlcyhsZW5ndGgsIGZvcmNlQ2xhbXBlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zIC09IGJ5dGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ5dGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0Qnl0ZVJhbmdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldEJ5dGVSYW5nZShiZWdpbiwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5zdXJlUmFuZ2UoYmVnaW4sIGVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJ5dGVzLnN1YmFycmF5KGJlZ2luLCBlbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwic2tpcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBza2lwKG4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zICs9IG47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZXNldFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwibW92ZVN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG1vdmVTdGFydCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydCA9IHRoaXMucG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwibWFrZVN1YlN0cmVhbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBtYWtlU3ViU3RyZWFtKHN0YXJ0LCBsZW5ndGgsIGRpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnN1cmVSYW5nZShzdGFydCwgc3RhcnQgKyBsZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENodW5rZWRTdHJlYW1TdWJzdHJlYW0oKSB7fVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENodW5rZWRTdHJlYW1TdWJzdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaHVua2VkU3RyZWFtU3Vic3RyZWFtLnByb3RvdHlwZS5nZXRNaXNzaW5nQ2h1bmtzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rU2l6ZSA9IHRoaXMuY2h1bmtTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJlZ2luQ2h1bmsgPSBNYXRoLmZsb29yKHRoaXMuc3RhcnQgLyBjaHVua1NpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZENodW5rID0gTWF0aC5mbG9vcigodGhpcy5lbmQgLSAxKSAvIGNodW5rU2l6ZSkgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1pc3NpbmdDaHVua3MgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgY2h1bmsgPSBiZWdpbkNodW5rOyBjaHVuayA8IGVuZENodW5rOyArK2NodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxvYWRlZENodW5rc1tjaHVua10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZ0NodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtaXNzaW5nQ2h1bmtzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJTdHJlYW0gPSBuZXcgQ2h1bmtlZFN0cmVhbVN1YnN0cmVhbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJTdHJlYW0ucG9zID0gc3ViU3RyZWFtLnN0YXJ0ID0gc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlN0cmVhbS5lbmQgPSBzdGFydCArIGxlbmd0aCB8fCB0aGlzLmVuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViU3RyZWFtLmRpY3QgPSBkaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ViU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwibGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuZCAtIHRoaXMuc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpc0VtcHR5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDaHVua2VkU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkNodW5rZWRTdHJlYW0gPSBDaHVua2VkU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgdmFyIENodW5rZWRTdHJlYW1NYW5hZ2VyID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBDaHVua2VkU3RyZWFtTWFuYWdlcihwZGZOZXR3b3JrU3RyZWFtLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENodW5rZWRTdHJlYW1NYW5hZ2VyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaHVua1NpemUgPSBhcmdzLnJhbmdlQ2h1bmtTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtID0gbmV3IENodW5rZWRTdHJlYW0odGhpcy5sZW5ndGgsIHRoaXMuY2h1bmtTaXplLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBkZk5ldHdvcmtTdHJlYW0gPSBwZGZOZXR3b3JrU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZUF1dG9GZXRjaCA9IGFyZ3MuZGlzYWJsZUF1dG9GZXRjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1zZ0hhbmRsZXIgPSBhcmdzLm1zZ0hhbmRsZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyUmVxdWVzdElkID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNodW5rc05lZWRlZEJ5UmVxdWVzdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0c0J5Q2h1bmsgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZXNCeVJlcXVlc3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoQ2h1bmtlZFN0cmVhbU1hbmFnZXIsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm9uTG9hZGVkU3RyZWFtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uTG9hZGVkU3RyZWFtKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGVkU3RyZWFtQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwic2VuZFJlcXVlc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc2VuZFJlcXVlc3QoYmVnaW4sIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5nZVJlYWRlciA9IHRoaXMucGRmTmV0d29ya1N0cmVhbS5nZXRSYW5nZVJlYWRlcihiZWdpbiwgZW5kKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJhbmdlUmVhZGVyLmlzU3RyZWFtaW5nU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZVJlYWRlci5vblByb2dyZXNzID0gdGhpcy5vblByb2dyZXNzLmJpbmQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmtzID0gW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkQ2h1bmsgPSBmdW5jdGlvbiByZWFkQ2h1bmsoY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNodW5rLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gY2h1bmsudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVua3MucHVzaChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZCArPSAoMCwgX3V0aWwuYXJyYXlCeXRlTGVuZ3RoKShkYXRhKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlUmVhZGVyLmlzU3RyZWFtaW5nU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMub25Qcm9ncmVzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogbG9hZGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlUmVhZGVyLnJlYWQoKS50aGVuKHJlYWRDaHVuaywgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVua0RhdGEgPSAoMCwgX3V0aWwuYXJyYXlzVG9CeXRlcykoY2h1bmtzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjaHVua0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlUmVhZGVyLnJlYWQoKS50aGVuKHJlYWRDaHVuaywgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLm9uUmVjZWl2ZURhdGEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiBiZWdpblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVxdWVzdEFsbENodW5rc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXF1ZXN0QWxsQ2h1bmtzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWlzc2luZ0NodW5rcyA9IHRoaXMuc3RyZWFtLmdldE1pc3NpbmdDaHVua3MoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0Q2h1bmtzKG1pc3NpbmdDaHVua3MpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfcmVxdWVzdENodW5rc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcmVxdWVzdENodW5rcyhjaHVua3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcXVlc3RJZCA9IHRoaXMuY3VyclJlcXVlc3RJZCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmtzTmVlZGVkID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaHVua3NOZWVkZWRCeVJlcXVlc3RbcmVxdWVzdElkXSA9IGNodW5rc05lZWRlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvckVycm9yID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3IgPSBjaHVua3NbU3ltYm9sLml0ZXJhdG9yXSgpLCBfc3RlcDsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gKF9zdGVwID0gX2l0ZXJhdG9yLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9jaHVuayA9IF9zdGVwLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnN0cmVhbS5oYXNDaHVuayhfY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rc05lZWRlZFtfY2h1bmtdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZXJhdG9yRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiAmJiBfaXRlcmF0b3IucmV0dXJuICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZXJhdG9yLnJldHVybigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNFbXB0eU9iaikoY2h1bmtzTmVlZGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZXNCeVJlcXVlc3RbcmVxdWVzdElkXSA9IGNhcGFiaWxpdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVua3NUb1JlcXVlc3QgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjaHVuayBpbiBjaHVua3NOZWVkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gY2h1bmsgfCAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShjaHVuayBpbiB0aGlzLnJlcXVlc3RzQnlDaHVuaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RzQnlDaHVua1tjaHVua10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVua3NUb1JlcXVlc3QucHVzaChjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVxdWVzdHNCeUNodW5rW2NodW5rXS5wdXNoKHJlcXVlc3RJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNodW5rc1RvUmVxdWVzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JvdXBlZENodW5rc1RvUmVxdWVzdCA9IHRoaXMuZ3JvdXBDaHVua3MoY2h1bmtzVG9SZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9kaWRJdGVyYXRvckVycm9yMiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2l0ZXJhdG9yRXJyb3IyID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3IyID0gZ3JvdXBlZENodW5rc1RvUmVxdWVzdFtTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwMjsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiA9IChfc3RlcDIgPSBfaXRlcmF0b3IyLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncm91cGVkQ2h1bmsgPSBfc3RlcDIudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJlZ2luID0gZ3JvdXBlZENodW5rLmJlZ2luQ2h1bmsgKiB0aGlzLmNodW5rU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gTWF0aC5taW4oZ3JvdXBlZENodW5rLmVuZENodW5rICogdGhpcy5jaHVua1NpemUsIHRoaXMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbmRSZXF1ZXN0KGJlZ2luLCBlbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlcmF0b3JFcnJvcjIgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgJiYgX2l0ZXJhdG9yMi5yZXR1cm4gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlcmF0b3IyLnJldHVybigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldFN0cmVhbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdHJlYW0oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlcXVlc3RSYW5nZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXF1ZXN0UmFuZ2UoYmVnaW4sIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBNYXRoLm1pbihlbmQsIHRoaXMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJlZ2luQ2h1bmsgPSB0aGlzLmdldEJlZ2luQ2h1bmsoYmVnaW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kQ2h1bmsgPSB0aGlzLmdldEVuZENodW5rKGVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVua3MgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjaHVuayA9IGJlZ2luQ2h1bms7IGNodW5rIDwgZW5kQ2h1bms7ICsrY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0Q2h1bmtzKGNodW5rcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZXF1ZXN0UmFuZ2VzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlcXVlc3RSYW5nZXMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5nZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmtzVG9SZXF1ZXN0ID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvcjMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvckVycm9yMyA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yMyA9IHJhbmdlc1tTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwMzsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyA9IChfc3RlcDMgPSBfaXRlcmF0b3IzLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IF9zdGVwMy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmVnaW5DaHVuayA9IHRoaXMuZ2V0QmVnaW5DaHVuayhyYW5nZS5iZWdpbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZENodW5rID0gdGhpcy5nZXRFbmRDaHVuayhyYW5nZS5lbmQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgY2h1bmsgPSBiZWdpbkNodW5rOyBjaHVuayA8IGVuZENodW5rOyArK2NodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2h1bmtzVG9SZXF1ZXN0LmluY2x1ZGVzKGNodW5rKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtzVG9SZXF1ZXN0LnB1c2goY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlcmF0b3JFcnJvcjMgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMgJiYgX2l0ZXJhdG9yMy5yZXR1cm4gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlcmF0b3IzLnJldHVybigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtzVG9SZXF1ZXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhIC0gYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0Q2h1bmtzKGNodW5rc1RvUmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJncm91cENodW5rc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBncm91cENodW5rcyhjaHVua3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdyb3VwZWRDaHVua3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJlZ2luQ2h1bmsgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZDaHVuayA9IC0xO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGNodW5rcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSBjaHVua3NbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiZWdpbkNodW5rIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luQ2h1bmsgPSBjaHVuaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZDaHVuayA+PSAwICYmIHByZXZDaHVuayArIDEgIT09IGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZENodW5rcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5DaHVuazogYmVnaW5DaHVuayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kQ2h1bms6IHByZXZDaHVuayArIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbkNodW5rID0gY2h1bms7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpICsgMSA9PT0gY2h1bmtzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRDaHVua3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luQ2h1bms6IGJlZ2luQ2h1bmssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZENodW5rOiBjaHVuayArIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldkNodW5rID0gY2h1bms7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ3JvdXBlZENodW5rcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm9uUHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gb25Qcm9ncmVzcyhhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubXNnSGFuZGxlci5zZW5kKCdEb2NQcm9ncmVzcycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogdGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkICogdGhpcy5jaHVua1NpemUgKyBhcmdzLmxvYWRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsOiB0aGlzLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm9uUmVjZWl2ZURhdGFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gb25SZWNlaXZlRGF0YShhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVuayA9IGFyZ3MuY2h1bms7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc1Byb2dyZXNzaXZlID0gYXJncy5iZWdpbiA9PT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmVnaW4gPSBpc1Byb2dyZXNzaXZlID8gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGggOiBhcmdzLmJlZ2luO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gYmVnaW4gKyBjaHVuay5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmVnaW5DaHVuayA9IE1hdGguZmxvb3IoYmVnaW4gLyB0aGlzLmNodW5rU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmRDaHVuayA9IGVuZCA8IHRoaXMubGVuZ3RoID8gTWF0aC5mbG9vcihlbmQgLyB0aGlzLmNodW5rU2l6ZSkgOiBNYXRoLmNlaWwoZW5kIC8gdGhpcy5jaHVua1NpemUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1Byb2dyZXNzaXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbS5vblJlY2VpdmVQcm9ncmVzc2l2ZURhdGEoY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGggPSBlbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbS5vblJlY2VpdmVEYXRhKGJlZ2luLCBjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdHJlYW0uYWxsQ2h1bmtzTG9hZGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVzb2x2ZSh0aGlzLnN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9hZGVkUmVxdWVzdHMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfY2h1bmsyID0gYmVnaW5DaHVuazsgX2NodW5rMiA8IGVuZENodW5rOyArK19jaHVuazIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXF1ZXN0SWRzID0gdGhpcy5yZXF1ZXN0c0J5Q2h1bmtbX2NodW5rMl0gfHwgW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5yZXF1ZXN0c0J5Q2h1bmtbX2NodW5rMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9kaWRJdGVyYXRvckVycm9yNCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvckVycm9yNCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3I0ID0gcmVxdWVzdElkc1tTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwNDsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNCA9IChfc3RlcDQgPSBfaXRlcmF0b3I0Lm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb240ID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVxdWVzdElkID0gX3N0ZXA0LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmtzTmVlZGVkID0gdGhpcy5jaHVua3NOZWVkZWRCeVJlcXVlc3RbcmVxdWVzdElkXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2NodW5rMiBpbiBjaHVua3NOZWVkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjaHVua3NOZWVkZWRbX2NodW5rMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfdXRpbC5pc0VtcHR5T2JqKShjaHVua3NOZWVkZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZFJlcXVlc3RzLnB1c2gocmVxdWVzdElkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVyYXRvckVycm9yNCA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNCAmJiBfaXRlcmF0b3I0LnJldHVybiAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlcmF0b3I0LnJldHVybigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3I0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVBdXRvRmV0Y2ggJiYgKDAsIF91dGlsLmlzRW1wdHlPYmopKHRoaXMucmVxdWVzdHNCeUNodW5rKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRFbXB0eUNodW5rO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RDaHVuayA9IHRoaXMuc3RyZWFtLm51bUNodW5rcyAtIDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RyZWFtLmhhc0NodW5rKGxhc3RDaHVuaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEVtcHR5Q2h1bmsgPSBsYXN0Q2h1bms7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RW1wdHlDaHVuayA9IHRoaXMuc3RyZWFtLm5leHRFbXB0eUNodW5rKGVuZENodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIobmV4dEVtcHR5Q2h1bmspKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdENodW5rcyhbbmV4dEVtcHR5Q2h1bmtdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsb2FkZWRSZXF1ZXN0cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVxdWVzdElkID0gbG9hZGVkUmVxdWVzdHNbX2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhcGFiaWxpdHkgPSB0aGlzLnByb21pc2VzQnlSZXF1ZXN0W19yZXF1ZXN0SWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucHJvbWlzZXNCeVJlcXVlc3RbX3JlcXVlc3RJZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubXNnSGFuZGxlci5zZW5kKCdEb2NQcm9ncmVzcycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogdGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkICogdGhpcy5jaHVua1NpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbDogdGhpcy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJvbkVycm9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uRXJyb3IoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRCZWdpbkNodW5rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldEJlZ2luQ2h1bmsoYmVnaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoYmVnaW4gLyB0aGlzLmNodW5rU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRFbmRDaHVua1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRFbmRDaHVuayhlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoKGVuZCAtIDEpIC8gdGhpcy5jaHVua1NpemUpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImFib3J0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFib3J0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBkZk5ldHdvcmtTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGRmTmV0d29ya1N0cmVhbS5jYW5jZWxBbGxSZXF1ZXN0cygnYWJvcnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHJlcXVlc3RJZCBpbiB0aGlzLnByb21pc2VzQnlSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2VzQnlSZXF1ZXN0W3JlcXVlc3RJZF0ucmVqZWN0KG5ldyBFcnJvcignUmVxdWVzdCB3YXMgYWJvcnRlZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENodW5rZWRTdHJlYW1NYW5hZ2VyO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkNodW5rZWRTdHJlYW1NYW5hZ2VyID0gQ2h1bmtlZFN0cmVhbU1hbmFnZXI7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE1MyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUERGRG9jdW1lbnQgPSBleHBvcnRzLlBhZ2UgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9vYmogPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1NCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3ByaW1pdGl2ZXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1NSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3N0cmVhbTIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2Fubm90YXRpb24gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2OSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2NyeXB0byA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTY3KTtcblxuICAgICAgICAgICAgICAgIHZhciBfcGFyc2VyID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9vcGVyYXRvcl9saXN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNzApO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9ldmFsdWF0b3IgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE3MSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2Z1bmN0aW9uID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxODUpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuICAgICAgICAgICAgICAgIHZhciBERUZBVUxUX1VTRVJfVU5JVCA9IDEuMDtcbiAgICAgICAgICAgICAgICB2YXIgTEVUVEVSX1NJWkVfTUVESUFCT1ggPSBbMCwgMCwgNjEyLCA3OTJdO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNBbm5vdGF0aW9uUmVuZGVyYWJsZShhbm5vdGF0aW9uLCBpbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVudCA9PT0gJ2Rpc3BsYXknICYmIGFubm90YXRpb24udmlld2FibGUgfHwgaW50ZW50ID09PSAncHJpbnQnICYmIGFubm90YXRpb24ucHJpbnRhYmxlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBQYWdlID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQYWdlKF9yZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGRmTWFuYWdlciA9IF9yZWYucGRmTWFuYWdlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZiA9IF9yZWYueHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUluZGV4ID0gX3JlZi5wYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VEaWN0ID0gX3JlZi5wYWdlRGljdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmID0gX3JlZi5yZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRDYWNoZSA9IF9yZWYuZm9udENhY2hlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsdEluQ01hcENhY2hlID0gX3JlZi5idWlsdEluQ01hcENhY2hlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZGdW5jdGlvbkZhY3RvcnkgPSBfcmVmLnBkZkZ1bmN0aW9uRmFjdG9yeTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQYWdlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGRmTWFuYWdlciA9IHBkZk1hbmFnZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlSW5kZXggPSBwYWdlSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlRGljdCA9IHBhZ2VEaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWYgPSByZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb250Q2FjaGUgPSBmb250Q2FjaGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsdEluQ01hcENhY2hlID0gYnVpbHRJbkNNYXBDYWNoZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBkZkZ1bmN0aW9uRmFjdG9yeSA9IHBkZkZ1bmN0aW9uRmFjdG9yeTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV2YWx1YXRvck9wdGlvbnMgPSBwZGZNYW5hZ2VyLmV2YWx1YXRvck9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZXNQcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdW5pcXVlUHJlZml4ID0gXCJwXCIuY29uY2F0KHRoaXMucGFnZUluZGV4LCBcIl9cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlkQ291bnRlcnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iajogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pZEZhY3RvcnkgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZU9iaklkOiBmdW5jdGlvbiBjcmVhdGVPYmpJZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmlxdWVQcmVmaXggKyArK2lkQ291bnRlcnMub2JqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFBhZ2UsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9nZXRJbmhlcml0YWJsZVByb3BlcnR5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9nZXRJbmhlcml0YWJsZVByb3BlcnR5KGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2V0QXJyYXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSAoMCwgX3V0aWwuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdDogdGhpcy5wYWdlRGljdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QXJyYXk6IGdldEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFdoZW5Gb3VuZDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMSB8fCAhKDAsIF9wcmltaXRpdmVzLmlzRGljdCkodmFsdWVbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuRGljdC5tZXJnZSh0aGlzLnhyZWYsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldENvbnRlbnRTdHJlYW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q29udGVudFN0cmVhbSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29udGVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4cmVmID0gdGhpcy54cmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvckVycm9yID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pdGVyYXRvciA9IGNvbnRlbnRbU3ltYm9sLml0ZXJhdG9yXSgpLCBfc3RlcDsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gKF9zdGVwID0gX2l0ZXJhdG9yLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfc3RyZWFtID0gX3N0ZXAudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbXMucHVzaCh4cmVmLmZldGNoSWZSZWYoX3N0cmVhbSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kaWRJdGVyYXRvckVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlcmF0b3JFcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uICYmIF9pdGVyYXRvci5yZXR1cm4gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZXJhdG9yLnJldHVybigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gbmV3IF9zdHJlYW0yLlN0cmVhbXNTZXF1ZW5jZVN0cmVhbShzdHJlYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKGNvbnRlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBjb250ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gbmV3IF9zdHJlYW0yLk51bGxTdHJlYW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJsb2FkUmVzb3VyY2VzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWRSZXNvdXJjZXMoa2V5cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5yZXNvdXJjZXNQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlc1Byb21pc2UgPSB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsICdyZXNvdXJjZXMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlc1Byb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0TG9hZGVyID0gbmV3IF9vYmouT2JqZWN0TG9hZGVyKF90aGlzLnJlc291cmNlcywga2V5cywgX3RoaXMueHJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0TG9hZGVyLmxvYWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRPcGVyYXRvckxpc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0T3BlcmF0b3JMaXN0KF9yZWYyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyID0gX3JlZjIuaGFuZGxlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sgPSBfcmVmMi50YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50ID0gX3JlZjIuaW50ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW50ZXJhY3RpdmVGb3JtcyA9IF9yZWYyLnJlbmRlckludGVyYWN0aXZlRm9ybXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50U3RyZWFtUHJvbWlzZSA9IHRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywgJ2dldENvbnRlbnRTdHJlYW0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc291cmNlc1Byb21pc2UgPSB0aGlzLmxvYWRSZXNvdXJjZXMoWydFeHRHU3RhdGUnLCAnQ29sb3JTcGFjZScsICdQYXR0ZXJuJywgJ1NoYWRpbmcnLCAnWE9iamVjdCcsICdGb250J10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFydGlhbEV2YWx1YXRvciA9IG5ldyBfZXZhbHVhdG9yLlBhcnRpYWxFdmFsdWF0b3Ioe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmTWFuYWdlcjogdGhpcy5wZGZNYW5hZ2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZjogdGhpcy54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZEZhY3Rvcnk6IHRoaXMuaWRGYWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udENhY2hlOiB0aGlzLmZvbnRDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWx0SW5DTWFwQ2FjaGU6IHRoaXMuYnVpbHRJbkNNYXBDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuZXZhbHVhdG9yT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeTogdGhpcy5wZGZGdW5jdGlvbkZhY3RvcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhUHJvbWlzZXMgPSBQcm9taXNlLmFsbChbY29udGVudFN0cmVhbVByb21pc2UsIHJlc291cmNlc1Byb21pc2VdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhZ2VMaXN0UHJvbWlzZSA9IGRhdGFQcm9taXNlcy50aGVuKGZ1bmN0aW9uIChfcmVmMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWY0ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjMsIDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRTdHJlYW0gPSBfcmVmNFswXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wTGlzdCA9IG5ldyBfb3BlcmF0b3JfbGlzdC5PcGVyYXRvckxpc3QoaW50ZW50LCBoYW5kbGVyLCBfdGhpczIucGFnZUluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuc2VuZCgnU3RhcnRSZW5kZXJQYWdlJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW5jeTogcGFydGlhbEV2YWx1YXRvci5oYXNCbGVuZE1vZGVzKF90aGlzMi5yZXNvdXJjZXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogX3RoaXMyLnBhZ2VJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnQ6IGludGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFydGlhbEV2YWx1YXRvci5nZXRPcGVyYXRvckxpc3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogY29udGVudFN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlczogX3RoaXMyLnJlc291cmNlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3Q6IG9wTGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wTGlzdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtwYWdlTGlzdFByb21pc2UsIHRoaXMuX3BhcnNlZEFubm90YXRpb25zXSkudGhlbihmdW5jdGlvbiAoX3JlZjUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVmNiA9IF9zbGljZWRUb0FycmF5KF9yZWY1LCAyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlT3BMaXN0ID0gX3JlZjZbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnMgPSBfcmVmNlsxXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFubm90YXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VPcExpc3QuZmx1c2godHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhZ2VPcExpc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcExpc3RQcm9taXNlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvcjIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaXRlcmF0b3JFcnJvcjIgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yMiA9IGFubm90YXRpb25zW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3N0ZXAyOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gKF9zdGVwMiA9IF9pdGVyYXRvcjIubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbm5vdGF0aW9uID0gX3N0ZXAyLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Fubm90YXRpb25SZW5kZXJhYmxlKGFubm90YXRpb24sIGludGVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wTGlzdFByb21pc2VzLnB1c2goYW5ub3RhdGlvbi5nZXRPcGVyYXRvckxpc3QocGFydGlhbEV2YWx1YXRvciwgdGFzaywgcmVuZGVySW50ZXJhY3RpdmVGb3JtcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlcmF0b3JFcnJvcjIgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgJiYgX2l0ZXJhdG9yMi5yZXR1cm4gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZXJhdG9yMi5yZXR1cm4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcjIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKG9wTGlzdFByb21pc2VzKS50aGVuKGZ1bmN0aW9uIChvcExpc3RzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZU9wTGlzdC5hZGRPcChfdXRpbC5PUFMuYmVnaW5Bbm5vdGF0aW9ucywgW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9kaWRJdGVyYXRvckVycm9yMyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaXRlcmF0b3JFcnJvcjMgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3IzID0gb3BMaXN0c1tTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwMzsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyA9IChfc3RlcDMgPSBfaXRlcmF0b3IzLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wTGlzdCA9IF9zdGVwMy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VPcExpc3QuYWRkT3BMaXN0KG9wTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZXJhdG9yRXJyb3IzID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zICYmIF9pdGVyYXRvcjMucmV0dXJuICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlcmF0b3IzLnJldHVybigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VPcExpc3QuYWRkT3AoX3V0aWwuT1BTLmVuZEFubm90YXRpb25zLCBbXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZU9wTGlzdC5mbHVzaCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFnZU9wTGlzdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImV4dHJhY3RUZXh0Q29udGVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBleHRyYWN0VGV4dENvbnRlbnQoX3JlZjcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBfcmVmNy5oYW5kbGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzayA9IF9yZWY3LnRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVXaGl0ZXNwYWNlID0gX3JlZjcubm9ybWFsaXplV2hpdGVzcGFjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmsgPSBfcmVmNy5zaW5rLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluZVRleHRJdGVtcyA9IF9yZWY3LmNvbWJpbmVUZXh0SXRlbXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50U3RyZWFtUHJvbWlzZSA9IHRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywgJ2dldENvbnRlbnRTdHJlYW0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc291cmNlc1Byb21pc2UgPSB0aGlzLmxvYWRSZXNvdXJjZXMoWydFeHRHU3RhdGUnLCAnWE9iamVjdCcsICdGb250J10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YVByb21pc2VzID0gUHJvbWlzZS5hbGwoW2NvbnRlbnRTdHJlYW1Qcm9taXNlLCByZXNvdXJjZXNQcm9taXNlXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhUHJvbWlzZXMudGhlbihmdW5jdGlvbiAoX3JlZjgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVmOSA9IF9zbGljZWRUb0FycmF5KF9yZWY4LCAxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50U3RyZWFtID0gX3JlZjlbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJ0aWFsRXZhbHVhdG9yID0gbmV3IF9ldmFsdWF0b3IuUGFydGlhbEV2YWx1YXRvcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmTWFuYWdlcjogX3RoaXMzLnBkZk1hbmFnZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZjogX3RoaXMzLnhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IF90aGlzMy5wYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRGYWN0b3J5OiBfdGhpczMuaWRGYWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRDYWNoZTogX3RoaXMzLmZvbnRDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsdEluQ01hcENhY2hlOiBfdGhpczMuYnVpbHRJbkNNYXBDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBfdGhpczMuZXZhbHVhdG9yT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZGdW5jdGlvbkZhY3Rvcnk6IF90aGlzMy5wZGZGdW5jdGlvbkZhY3RvcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnRpYWxFdmFsdWF0b3IuZ2V0VGV4dENvbnRlbnQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogY29udGVudFN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlczogX3RoaXMzLnJlc291cmNlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVXaGl0ZXNwYWNlOiBub3JtYWxpemVXaGl0ZXNwYWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVUZXh0SXRlbXM6IGNvbWJpbmVUZXh0SXRlbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luazogc2lua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0QW5ub3RhdGlvbnNEYXRhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldEFubm90YXRpb25zRGF0YShpbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlZEFubm90YXRpb25zLnRoZW4oZnVuY3Rpb24gKGFubm90YXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYW5ub3RhdGlvbnNEYXRhID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGFubm90YXRpb25zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWludGVudCB8fCBpc0Fubm90YXRpb25SZW5kZXJhYmxlKGFubm90YXRpb25zW2ldLCBpbnRlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zRGF0YS5wdXNoKGFubm90YXRpb25zW2ldLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFubm90YXRpb25zRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjb250ZW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhZ2VEaWN0LmdldCgnQ29udGVudHMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlc291cmNlc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ3Jlc291cmNlcycsIHRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoJ1Jlc291cmNlcycpIHx8IF9wcmltaXRpdmVzLkRpY3QuZW1wdHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwibWVkaWFCb3hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhQm94ID0gdGhpcy5fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSgnTWVkaWFCb3gnLCB0cnVlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVkaWFCb3gpIHx8IG1lZGlhQm94Lmxlbmd0aCAhPT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsICdtZWRpYUJveCcsIExFVFRFUl9TSVpFX01FRElBQk9YKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnbWVkaWFCb3gnLCBtZWRpYUJveCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjcm9wQm94XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjcm9wQm94ID0gdGhpcy5fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSgnQ3JvcEJveCcsIHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjcm9wQm94KSB8fCBjcm9wQm94Lmxlbmd0aCAhPT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsICdjcm9wQm94JywgdGhpcy5tZWRpYUJveCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ2Nyb3BCb3gnLCBjcm9wQm94KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInVzZXJVbml0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLnBhZ2VEaWN0LmdldCgnVXNlclVuaXQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfdXRpbC5pc051bSkob2JqKSB8fCBvYmogPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gREVGQVVMVF9VU0VSX1VOSVQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ3VzZXJVbml0Jywgb2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInZpZXdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhQm94ID0gdGhpcy5tZWRpYUJveCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyb3BCb3ggPSB0aGlzLmNyb3BCb3g7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lZGlhQm94ID09PSBjcm9wQm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ3ZpZXcnLCBtZWRpYUJveCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW50ZXJzZWN0aW9uID0gX3V0aWwuVXRpbC5pbnRlcnNlY3QoY3JvcEJveCwgbWVkaWFCb3gpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAndmlldycsIGludGVyc2VjdGlvbiB8fCBtZWRpYUJveCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyb3RhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvdGF0ZSA9IHRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoJ1JvdGF0ZScpIHx8IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdGF0ZSAlIDkwICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvdGF0ZSA+PSAzNjApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZSA9IHJvdGF0ZSAlIDM2MDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb3RhdGUgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGUgPSAocm90YXRlICUgMzYwICsgMzYwKSAlIDM2MDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAncm90YXRlJywgcm90YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImFubm90YXRpb25zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnYW5ub3RhdGlvbnMnLCB0aGlzLl9nZXRJbmhlcml0YWJsZVByb3BlcnR5KCdBbm5vdHMnKSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfcGFyc2VkQW5ub3RhdGlvbnNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlZEFubm90YXRpb25zID0gdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCAnYW5ub3RhdGlvbnMnKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbm5vdGF0aW9uUmVmcyA9IF90aGlzNC5hbm5vdGF0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbm5vdGF0aW9uUHJvbWlzZXMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gYW5ub3RhdGlvblJlZnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25Qcm9taXNlcy5wdXNoKF9hbm5vdGF0aW9uLkFubm90YXRpb25GYWN0b3J5LmNyZWF0ZShfdGhpczQueHJlZiwgYW5ub3RhdGlvblJlZnNbaV0sIF90aGlzNC5wZGZNYW5hZ2VyLCBfdGhpczQuaWRGYWN0b3J5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChhbm5vdGF0aW9uUHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKGFubm90YXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFubm90YXRpb25zLmZpbHRlcihmdW5jdGlvbiBpc0RlZmluZWQoYW5ub3RhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFhbm5vdGF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIl9wYXJzZWRBbm5vdGF0aW9uczogXFxcIlwiLmNvbmNhdChyZWFzb24sIFwiXFxcIi5cIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsICdfcGFyc2VkQW5ub3RhdGlvbnMnLCBwYXJzZWRBbm5vdGF0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFnZTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QYWdlID0gUGFnZTtcbiAgICAgICAgICAgICAgICB2YXIgRklOR0VSUFJJTlRfRklSU1RfQllURVMgPSAxMDI0O1xuICAgICAgICAgICAgICAgIHZhciBFTVBUWV9GSU5HRVJQUklOVCA9ICdcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMCcgKyAnXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwJztcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZpbmQoc3RyZWFtLCBuZWVkbGUsIGxpbWl0LCBiYWNrd2FyZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IHN0cmVhbS5wb3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBzdHJlYW0uZW5kO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3MgKyBsaW1pdCA+IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQgPSBlbmQgLSBwb3M7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgc3RyQnVmID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW1pdDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHN0cmVhbS5nZXRCeXRlKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBzdHIgPSBzdHJCdWYuam9pbignJyk7XG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbS5wb3MgPSBwb3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGJhY2t3YXJkcyA/IHN0ci5sYXN0SW5kZXhPZihuZWVkbGUpIDogc3RyLmluZGV4T2YobmVlZGxlKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucG9zICs9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgUERGRG9jdW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBERkRvY3VtZW50KHBkZk1hbmFnZXIsIGFyZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQREZEb2N1bWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoYXJnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBhcmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3V0aWwuaXNBcnJheUJ1ZmZlcikoYXJnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBuZXcgX3N0cmVhbTIuU3RyZWFtKGFyZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQREZEb2N1bWVudDogVW5rbm93biBhcmd1bWVudCB0eXBlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BERkRvY3VtZW50OiBTdHJlYW0gbXVzdCBoYXZlIGRhdGEnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBkZk1hbmFnZXIgPSBwZGZNYW5hZ2VyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueHJlZiA9IG5ldyBfb2JqLlhSZWYoc3RyZWFtLCBwZGZNYW5hZ2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBkZkZ1bmN0aW9uRmFjdG9yeSA9IG5ldyBfZnVuY3Rpb24uUERGRnVuY3Rpb25GYWN0b3J5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZjogdGhpcy54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQ6IHBkZk1hbmFnZXIuZXZhbHVhdG9yT3B0aW9ucy5pc0V2YWxTdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYWdlUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFBERkRvY3VtZW50LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJwYXJzZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShyZWNvdmVyeU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR1cChyZWNvdmVyeU1vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmVyc2lvbiA9IHRoaXMuY2F0YWxvZy5jYXREaWN0LmdldCgnVmVyc2lvbicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh2ZXJzaW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZGZGb3JtYXRWZXJzaW9uID0gdmVyc2lvbi5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWNyb0Zvcm0gPSB0aGlzLmNhdGFsb2cuY2F0RGljdC5nZXQoJ0Fjcm9Gb3JtJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjcm9Gb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy54ZmEgPSB0aGlzLmFjcm9Gb3JtLmdldCgnWEZBJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkcyA9IHRoaXMuYWNyb0Zvcm0uZ2V0KCdGaWVsZHMnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoIWZpZWxkcyB8fCAhQXJyYXkuaXNBcnJheShmaWVsZHMpIHx8IGZpZWxkcy5sZW5ndGggPT09IDApICYmICF0aGlzLnhmYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjcm9Gb3JtID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBfdXRpbC5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ0Nhbm5vdCBmZXRjaCBBY3JvRm9ybSBlbnRyeTsgYXNzdW1pbmcgbm8gQWNyb0Zvcm1zIGFyZSBwcmVzZW50Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjcm9Gb3JtID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY2hlY2tIZWFkZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2hlY2tIZWFkZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSB0aGlzLnN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlc2V0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaW5kKHN0cmVhbSwgJyVQREYtJywgMTAyNCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5tb3ZlU3RhcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE1BWF9QREZfVkVSU0lPTl9MRU5HVEggPSAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnNpb24gPSAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0uZ2V0Qnl0ZSgpKSA+IDB4MjApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJzaW9uLmxlbmd0aCA+PSBNQVhfUERGX1ZFUlNJT05fTEVOR1RIKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucGRmRm9ybWF0VmVyc2lvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZGZGb3JtYXRWZXJzaW9uID0gdmVyc2lvbi5zdWJzdHJpbmcoNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInBhcnNlU3RhcnRYUmVmXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlU3RhcnRYUmVmKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnhyZWYuc2V0U3RhcnRYUmVmKHRoaXMuc3RhcnRYUmVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInNldHVwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldHVwKHJlY292ZXJ5TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnhyZWYucGFyc2UocmVjb3ZlcnlNb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXRhbG9nID0gbmV3IF9vYmouQ2F0YWxvZyh0aGlzLnBkZk1hbmFnZXIsIHRoaXMueHJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfZ2V0TGluZWFyaXphdGlvblBhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2dldExpbmVhcml6YXRpb25QYWdlKHBhZ2VJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2F0YWxvZyA9IHRoaXMuY2F0YWxvZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVhcml6YXRpb24gPSB0aGlzLmxpbmVhcml6YXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKGxpbmVhcml6YXRpb24gJiYgbGluZWFyaXphdGlvbi5wYWdlRmlyc3QgPT09IHBhZ2VJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWYgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmKGxpbmVhcml6YXRpb24ub2JqZWN0TnVtYmVyRmlyc3QsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy54cmVmLmZldGNoQXN5bmMocmVmKS50aGVuKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShvYmosICdQYWdlJykgfHwgKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqKSAmJiAhb2JqLmhhcygnVHlwZScpICYmIG9iai5oYXMoJ0NvbnRlbnRzJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmICYmICFjYXRhbG9nLnBhZ2VLaWRzQ291bnRDYWNoZS5oYXMocmVmKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRhbG9nLnBhZ2VLaWRzQ291bnRDYWNoZS5wdXQocmVmLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW29iaiwgcmVmXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdUaGUgTGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGRvZXNuXFwndCBwb2ludCAnICsgJ3RvIGEgdmFsaWQgUGFnZSBkaWN0aW9uYXJ5LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXRhbG9nLmdldFBhZ2VEaWN0KHBhZ2VJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UGFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRQYWdlKHBhZ2VJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGFnZVByb21pc2VzW3BhZ2VJbmRleF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhZ2VQcm9taXNlc1twYWdlSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhdGFsb2cgPSB0aGlzLmNhdGFsb2csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lYXJpemF0aW9uID0gdGhpcy5saW5lYXJpemF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IGxpbmVhcml6YXRpb24gJiYgbGluZWFyaXphdGlvbi5wYWdlRmlyc3QgPT09IHBhZ2VJbmRleCA/IHRoaXMuX2dldExpbmVhcml6YXRpb25QYWdlKHBhZ2VJbmRleCkgOiBjYXRhbG9nLmdldFBhZ2VEaWN0KHBhZ2VJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYWdlUHJvbWlzZXNbcGFnZUluZGV4XSA9IHByb21pc2UudGhlbihmdW5jdGlvbiAoX3JlZjEwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlZjExID0gX3NsaWNlZFRvQXJyYXkoX3JlZjEwLCAyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlRGljdCA9IF9yZWYxMVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWYgPSBfcmVmMTFbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUGFnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmTWFuYWdlcjogX3RoaXM1LnBkZk1hbmFnZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZjogX3RoaXM1LnhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUluZGV4OiBwYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZURpY3Q6IHBhZ2VEaWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZjogcmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRDYWNoZTogY2F0YWxvZy5mb250Q2FjaGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbHRJbkNNYXBDYWNoZTogY2F0YWxvZy5idWlsdEluQ01hcENhY2hlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeTogX3RoaXM1LnBkZkZ1bmN0aW9uRmFjdG9yeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY2hlY2tGaXJzdFBhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2hlY2tGaXJzdFBhZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFBhZ2UoMCkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLlhSZWZFbnRyeUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5fcGFnZVByb21pc2VzLmxlbmd0aCA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuY2xlYW51cCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLlhSZWZQYXJzZUV4Y2VwdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImZvbnRGYWxsYmFja1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmb250RmFsbGJhY2soaWQsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2F0YWxvZy5mb250RmFsbGJhY2soaWQsIGhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY2xlYW51cFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYXRhbG9nLmNsZWFudXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImxpbmVhcml6YXRpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmVhcml6YXRpb24gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lYXJpemF0aW9uID0gX3BhcnNlci5MaW5lYXJpemF0aW9uLmNyZWF0ZSh0aGlzLnN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIF91dGlsLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnbGluZWFyaXphdGlvbicsIGxpbmVhcml6YXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwic3RhcnRYUmVmXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSB0aGlzLnN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0WFJlZiA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGluZWFyaXphdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlc2V0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5kKHN0cmVhbSwgJ2VuZG9iaicsIDEwMjQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYUmVmID0gc3RyZWFtLnBvcyArIDY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RlcCA9IDEwMjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRYUmVmTGVuZ3RoID0gJ3N0YXJ0eHJlZicubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvdW5kID0gZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gc3RyZWFtLmVuZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCFmb3VuZCAmJiBwb3MgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zIC09IHN0ZXAgLSBzdGFydFhSZWZMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5wb3MgPSBwb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBmaW5kKHN0cmVhbSwgJ3N0YXJ0eHJlZicsIHN0ZXAsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uc2tpcCg5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2g7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gc3RyZWFtLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgoMCwgX3V0aWwuaXNTcGFjZSkoY2gpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHIgPSAnJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjaCA+PSAweDIwICYmIGNoIDw9IDB4MzkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHN0cmVhbS5nZXRCeXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYUmVmID0gcGFyc2VJbnQoc3RyLCAxMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oc3RhcnRYUmVmKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFhSZWYgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnc3RhcnRYUmVmJywgc3RhcnRYUmVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm51bVBhZ2VzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5lYXJpemF0aW9uID0gdGhpcy5saW5lYXJpemF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0gbGluZWFyaXphdGlvbiA/IGxpbmVhcml6YXRpb24ubnVtUGFnZXMgOiB0aGlzLmNhdGFsb2cubnVtUGFnZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnbnVtUGFnZXMnLCBudW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZG9jdW1lbnRJbmZvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBEb2N1bWVudEluZm9WYWxpZGF0b3JzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGU6IF91dGlsLmlzU3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0aG9yOiBfdXRpbC5pc1N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3Q6IF91dGlsLmlzU3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5d29yZHM6IF91dGlsLmlzU3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRvcjogX3V0aWwuaXNTdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWNlcjogX3V0aWwuaXNTdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGlvbkRhdGU6IF91dGlsLmlzU3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kRGF0ZTogX3V0aWwuaXNTdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFwcGVkOiBfcHJpbWl0aXZlcy5pc05hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvY0luZm8gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQREZGb3JtYXRWZXJzaW9uOiB0aGlzLnBkZkZvcm1hdFZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJc0xpbmVhcml6ZWQ6ICEhdGhpcy5saW5lYXJpemF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXNBY3JvRm9ybVByZXNlbnQ6ICEhdGhpcy5hY3JvRm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElzWEZBUHJlc2VudDogISF0aGlzLnhmYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5mb0RpY3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9EaWN0ID0gdGhpcy54cmVmLnRyYWlsZXIuZ2V0KCdJbmZvJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIF91dGlsLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ1RoZSBkb2N1bWVudCBpbmZvcm1hdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoaW5mb0RpY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9kaWRJdGVyYXRvckVycm9yNCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvckVycm9yNCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3I0ID0gaW5mb0RpY3QuZ2V0S2V5cygpW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3N0ZXA0OyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb240ID0gKF9zdGVwNCA9IF9pdGVyYXRvcjQubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjQgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBfc3RlcDQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGluZm9EaWN0LmdldChrZXkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEb2N1bWVudEluZm9WYWxpZGF0b3JzW2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEb2N1bWVudEluZm9WYWxpZGF0b3JzW2tleV0odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jSW5mb1trZXldID0gdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyA/IHZhbHVlIDogKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIkJhZCB2YWx1ZSBpbiBkb2N1bWVudCBpbmZvIGZvciBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiLlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXN0b21WYWx1ZSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tVmFsdWUgPSAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodmFsdWUpIHx8ICgwLCBfdXRpbC5pc051bSkodmFsdWUpIHx8ICgwLCBfdXRpbC5pc0Jvb2wpKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbVZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIlVuc3VwcG9ydGVkIHZhbHVlIGluIGRvY3VtZW50IGluZm8gZm9yIChjdXN0b20pIFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkb2NJbmZvWydDdXN0b20nXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY0luZm9bJ0N1c3RvbSddID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jSW5mb1snQ3VzdG9tJ11ba2V5XSA9IGN1c3RvbVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3I0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlcmF0b3JFcnJvcjQgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjQgJiYgX2l0ZXJhdG9yNC5yZXR1cm4gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZXJhdG9yNC5yZXR1cm4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcjQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnZG9jdW1lbnRJbmZvJywgZG9jSW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJmaW5nZXJwcmludFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzaDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlkQXJyYXkgPSB0aGlzLnhyZWYudHJhaWxlci5nZXQoJ0lEJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaWRBcnJheSkgJiYgaWRBcnJheVswXSAmJiAoMCwgX3V0aWwuaXNTdHJpbmcpKGlkQXJyYXlbMF0pICYmIGlkQXJyYXlbMF0gIT09IEVNUFRZX0ZJTkdFUlBSSU5UKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGlkQXJyYXlbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RyZWFtLmVuc3VyZVJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW0uZW5zdXJlUmFuZ2UoMCwgTWF0aC5taW4oRklOR0VSUFJJTlRfRklSU1RfQllURVMsIHRoaXMuc3RyZWFtLmVuZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoID0gKDAsIF9jcnlwdG8uY2FsY3VsYXRlTUQ1KSh0aGlzLnN0cmVhbS5ieXRlcy5zdWJhcnJheSgwLCBGSU5HRVJQUklOVF9GSVJTVF9CWVRFUyksIDAsIEZJTkdFUlBSSU5UX0ZJUlNUX0JZVEVTKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaW5nZXJwcmludCA9ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGhhc2gubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhleCA9IGhhc2hbaV0udG9TdHJpbmcoMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZ2VycHJpbnQgKz0gaGV4Lmxlbmd0aCA9PT0gMSA/ICcwJyArIGhleCA6IGhleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnZmluZ2VycHJpbnQnLCBmaW5nZXJwcmludCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUERGRG9jdW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuUERGRG9jdW1lbnQgPSBQREZEb2N1bWVudDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTU0ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5GaWxlU3BlYyA9IGV4cG9ydHMuWFJlZiA9IGV4cG9ydHMuT2JqZWN0TG9hZGVyID0gZXhwb3J0cy5DYXRhbG9nID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9yZWdlbmVyYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyKSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9wcmltaXRpdmVzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9wYXJzZXIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1Nik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2NodW5rZWRfc3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9jcnlwdG8gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2NvbG9yc3BhY2UgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2OCk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHZhciBzZWxmID0gdGhpcywgYXJncyA9IGFyZ3VtZW50czsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpOyBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7IH0gZnVuY3Rpb24gX3Rocm93KGVycikgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTsgfSBfbmV4dCh1bmRlZmluZWQpOyB9KTsgfTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBmZXRjaERlc3RpbmF0aW9uKGRlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGRlc3QpID8gZGVzdC5nZXQoJ0QnKSA6IGRlc3Q7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIENhdGFsb2cgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENhdGFsb2cocGRmTWFuYWdlciwgeHJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDYXRhbG9nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGRmTWFuYWdlciA9IHBkZk1hbmFnZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy54cmVmID0geHJlZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhdERpY3QgPSB4cmVmLmdldENhdGFsb2dPYmooKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkodGhpcy5jYXREaWN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0NhdGFsb2cgb2JqZWN0IGlzIG5vdCBhIGRpY3Rpb25hcnkuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb250Q2FjaGUgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0Q2FjaGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0Q2FjaGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKENhdGFsb2csIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9yZWFkRG9jdW1lbnRPdXRsaW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9yZWFkRG9jdW1lbnRPdXRsaW5lKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0gdGhpcy5jYXREaWN0LmdldCgnT3V0bGluZXMnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gb2JqLmdldFJhdygnRmlyc3QnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1JlZikob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm9vdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVldWUgPSBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqOiBvYmosXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IHJvb3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9jZXNzZWQgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZC5wdXQob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhyZWYgPSB0aGlzLnhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGFja0NvbG9yID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3V0bGluZURpY3QgPSB4cmVmLmZldGNoSWZSZWYoaS5vYmopO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3V0bGluZURpY3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvdXRsaW5lRGljdC5oYXMoJ1RpdGxlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0ludmFsaWQgb3V0bGluZSBpdGVtIGVuY291bnRlcmVkLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhdGFsb2cucGFyc2VEZXN0RGljdGlvbmFyeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdERpY3Q6IG91dGxpbmVEaWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iajogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2NCYXNlVXJsOiB0aGlzLnBkZk1hbmFnZXIuZG9jQmFzZVVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBvdXRsaW5lRGljdC5nZXQoJ1RpdGxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmxhZ3MgPSBvdXRsaW5lRGljdC5nZXQoJ0YnKSB8fCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gb3V0bGluZURpY3QuZ2V0QXJyYXkoJ0MnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZ2JDb2xvciA9IGJsYWNrQ29sb3I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbG9yKSAmJiBjb2xvci5sZW5ndGggPT09IDMgJiYgKGNvbG9yWzBdICE9PSAwIHx8IGNvbG9yWzFdICE9PSAwIHx8IGNvbG9yWzJdICE9PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJnYkNvbG9yID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2IoY29sb3IsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3V0bGluZUl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdDogZGF0YS5kZXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogZGF0YS51cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zYWZlVXJsOiBkYXRhLnVuc2FmZVVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdXaW5kb3c6IGRhdGEubmV3V2luZG93LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKHRpdGxlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogcmdiQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6IG91dGxpbmVEaWN0LmdldCgnQ291bnQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2xkOiAhIShmbGFncyAmIDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0YWxpYzogISEoZmxhZ3MgJiAxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLnBhcmVudC5pdGVtcy5wdXNoKG91dGxpbmVJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaiA9IG91dGxpbmVEaWN0LmdldFJhdygnRmlyc3QnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikob2JqKSAmJiAhcHJvY2Vzc2VkLmhhcyhvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iajogb2JqLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IG91dGxpbmVJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkLnB1dChvYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSBvdXRsaW5lRGljdC5nZXRSYXcoJ05leHQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikob2JqKSAmJiAhcHJvY2Vzc2VkLmhhcyhvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iajogb2JqLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGkucGFyZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkLnB1dChvYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvb3QuaXRlbXMubGVuZ3RoID4gMCA/IHJvb3QuaXRlbXMgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX3JlYWRQZXJtaXNzaW9uc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcmVhZFBlcm1pc3Npb25zKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jcnlwdCA9IHRoaXMueHJlZi50cmFpbGVyLmdldCgnRW5jcnlwdCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZW5jcnlwdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZsYWdzID0gZW5jcnlwdC5nZXQoJ1AnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfdXRpbC5pc051bSkoZmxhZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICs9IE1hdGgucG93KDIsIDMyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBlcm1pc3Npb25zID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIF91dGlsLlBlcm1pc3Npb25GbGFnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBfdXRpbC5QZXJtaXNzaW9uRmxhZ1trZXldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlcm1pc3Npb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0RGVzdGluYXRpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVzdGluYXRpb24oZGVzdGluYXRpb25JZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0gdGhpcy5fcmVhZERlc3RzKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIE5hbWVUcmVlIHx8IG9iaiBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaERlc3RpbmF0aW9uKG9iai5nZXQoZGVzdGluYXRpb25JZCkgfHwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9yZWFkRGVzdHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3JlYWREZXN0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IHRoaXMuY2F0RGljdC5nZXQoJ05hbWVzJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iaiAmJiBvYmouaGFzKCdEZXN0cycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hbWVUcmVlKG9iai5nZXRSYXcoJ0Rlc3RzJyksIHRoaXMueHJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYXREaWN0LmhhcygnRGVzdHMnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2F0RGljdC5nZXQoJ0Rlc3RzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9yZWFkUGFnZUxhYmVsc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcmVhZFBhZ2VMYWJlbHMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLmNhdERpY3QuZ2V0UmF3KCdQYWdlTGFiZWxzJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhZ2VMYWJlbHMgPSBuZXcgQXJyYXkodGhpcy5udW1QYWdlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHlsZSA9IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bWJlclRyZWUgPSBuZXcgTnVtYmVyVHJlZShvYmosIHRoaXMueHJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1zID0gbnVtYmVyVHJlZS5nZXRBbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRMYWJlbCA9ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEluZGV4ID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB0aGlzLm51bVBhZ2VzOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgaW4gbnVtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYWJlbERpY3QgPSBudW1zW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShsYWJlbERpY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignUGFnZUxhYmVsIGlzIG5vdCBhIGRpY3Rpb25hcnkuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhYmVsRGljdC5oYXMoJ1R5cGUnKSAmJiAhKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkobGFiZWxEaWN0LmdldCgnVHlwZScpLCAnUGFnZUxhYmVsJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdJbnZhbGlkIHR5cGUgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhYmVsRGljdC5oYXMoJ1MnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IGxhYmVsRGljdC5nZXQoJ1MnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0ludmFsaWQgc3R5bGUgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSA9IHMubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhYmVsRGljdC5oYXMoJ1AnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IGxhYmVsRGljdC5nZXQoJ1AnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfdXRpbC5pc1N0cmluZykocCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignSW52YWxpZCBwcmVmaXggaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYWJlbERpY3QuaGFzKCdTdCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdCA9IGxhYmVsRGljdC5nZXQoJ1N0Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoTnVtYmVyLmlzSW50ZWdlcihzdCkgJiYgc3QgPj0gMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignSW52YWxpZCBzdGFydCBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IHN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMYWJlbCA9IGN1cnJlbnRJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdSJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudExhYmVsID0gKDAsIF91dGlsLnRvUm9tYW5OdW1lcmFscykoY3VycmVudEluZGV4LCBzdHlsZSA9PT0gJ3InKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdBJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIExJTUlUID0gMjY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBBX1VQUEVSX0NBU0UgPSAweDQxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQV9MT1dFUl9DQVNFID0gMHg2MTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2VDaGFyQ29kZSA9IHN0eWxlID09PSAnYScgPyBBX0xPV0VSX0NBU0UgOiBBX1VQUEVSX0NBU0U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXR0ZXJJbmRleCA9IGN1cnJlbnRJbmRleCAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyYWN0ZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJhc2VDaGFyQ29kZSArIGxldHRlckluZGV4ICUgTElNSVQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhckJ1ZiA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IGxldHRlckluZGV4IC8gTElNSVQgfCAwOyBqIDw9IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJCdWYucHVzaChjaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudExhYmVsID0gY2hhckJ1Zi5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgc3R5bGUgXFxcIlwiLmNvbmNhdChzdHlsZSwgXCJcXFwiIGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGFiZWwgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUxhYmVsc1tpXSA9IHByZWZpeCArIGN1cnJlbnRMYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhZ2VMYWJlbHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJmb250RmFsbGJhY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZm9udEZhbGxiYWNrKGlkLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbnRDYWNoZS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uICh0cmFuc2xhdGVkRm9udHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvckVycm9yID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pdGVyYXRvciA9IHRyYW5zbGF0ZWRGb250c1tTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSAoX3N0ZXAgPSBfaXRlcmF0b3IubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zbGF0ZWRGb250ID0gX3N0ZXAudmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zbGF0ZWRGb250LmxvYWRlZE5hbWUgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkRm9udC5mYWxsYmFjayhoYW5kbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kaWRJdGVyYXRvckVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlcmF0b3JFcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uICYmIF9pdGVyYXRvci5yZXR1cm4gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZXJhdG9yLnJldHVybigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjbGVhbnVwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2VzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udENhY2hlLmZvckVhY2goZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKHRyYW5zbGF0ZWRGb250cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdHJhbnNsYXRlZEZvbnRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udCA9IHRyYW5zbGF0ZWRGb250c1tpXS5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmb250LnRyYW5zbGF0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmZvbnRDYWNoZS5jbGVhcigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5idWlsdEluQ01hcENhY2hlLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UGFnZURpY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UGFnZURpY3QocGFnZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZXNUb1Zpc2l0ID0gW3RoaXMuY2F0RGljdC5nZXRSYXcoJ1BhZ2VzJyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IHRoaXMueHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VLaWRzQ291bnRDYWNoZSA9IHRoaXMucGFnZUtpZHNDb3VudENhY2hlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZUluZGV4ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnROb2RlID0gbm9kZXNUb1Zpc2l0LnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikoY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gcGFnZUtpZHNDb3VudENhY2hlLmdldChjdXJyZW50Tm9kZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID4gMCAmJiBjdXJyZW50UGFnZUluZGV4ICsgY291bnQgPCBwYWdlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlSW5kZXggKz0gY291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZi5mZXRjaEFzeW5jKGN1cnJlbnROb2RlKS50aGVuKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShvYmosICdQYWdlJykgfHwgKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqKSAmJiAhb2JqLmhhcygnS2lkcycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhZ2VJbmRleCA9PT0gY3VycmVudFBhZ2VJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudE5vZGUgJiYgIXBhZ2VLaWRzQ291bnRDYWNoZS5oYXMoY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlS2lkc0NvdW50Q2FjaGUucHV0KGN1cnJlbnROb2RlLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcGFiaWxpdHkucmVzb2x2ZShbb2JqLCBjdXJyZW50Tm9kZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXNUb1Zpc2l0LnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgY2FwYWJpbGl0eS5yZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjogdm9pZCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eS5yZWplY3QobmV3IF91dGlsLkZvcm1hdEVycm9yKCdQYWdlIGRpY3Rpb25hcnkga2lkIHJlZmVyZW5jZSBwb2ludHMgdG8gd3JvbmcgdHlwZSBvZiBvYmplY3QuJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjogdm9pZCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSBjdXJyZW50Tm9kZS5nZXQoJ0NvdW50Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihjb3VudCkgJiYgY291bnQgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqSWQgPSBjdXJyZW50Tm9kZS5vYmpJZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqSWQgJiYgIXBhZ2VLaWRzQ291bnRDYWNoZS5oYXMob2JqSWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlS2lkc0NvdW50Q2FjaGUucHV0KG9iaklkLCBjb3VudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFBhZ2VJbmRleCArIGNvdW50IDw9IHBhZ2VJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2VJbmRleCArPSBjb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2lkcyA9IGN1cnJlbnROb2RlLmdldCgnS2lkcycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGtpZHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShjdXJyZW50Tm9kZS5nZXQoJ1R5cGUnKSwgJ1BhZ2UnKSB8fCAhY3VycmVudE5vZGUuaGFzKCdUeXBlJykgJiYgY3VycmVudE5vZGUuaGFzKCdDb250ZW50cycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFBhZ2VJbmRleCA9PT0gcGFnZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eS5yZXNvbHZlKFtjdXJyZW50Tm9kZSwgbnVsbF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY6IHZvaWQgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlamVjdChuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1BhZ2UgZGljdGlvbmFyeSBraWRzIG9iamVjdCBpcyBub3QgYW4gYXJyYXkuJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjogdm9pZCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbGFzdCA9IGtpZHMubGVuZ3RoIC0gMTsgbGFzdCA+PSAwOyBsYXN0LS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXNUb1Zpc2l0LnB1c2goa2lkc1tsYXN0XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5vZGVzVG9WaXNpdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JldCA9IF9sb29wKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9yZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImNvbnRpbnVlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90eXBlb2YoX3JldCkgPT09IFwib2JqZWN0XCIpIHJldHVybiBfcmV0LnY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlamVjdChuZXcgRXJyb3IoXCJQYWdlIGluZGV4IFwiLmNvbmNhdChwYWdlSW5kZXgsIFwiIG5vdCBmb3VuZC5cIikpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldFBhZ2VJbmRleFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRQYWdlSW5kZXgocGFnZVJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IHRoaXMueHJlZjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwYWdlc0JlZm9yZVJlZihraWRSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b3RhbCA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50UmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHhyZWYuZmV0Y2hBc3luYyhraWRSZWYpLnRoZW4oZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzUmVmc0VxdWFsKShraWRSZWYsIHBhZ2VSZWYpICYmICEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShub2RlLCAnUGFnZScpICYmICEoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkobm9kZSkgJiYgIW5vZGUuaGFzKCdUeXBlJykgJiYgbm9kZS5oYXMoJ0NvbnRlbnRzJykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignVGhlIHJlZmVyZW5jZSBkb2VzIG5vdCBwb2ludCB0byBhIC9QYWdlIGRpY3Rpb25hcnkuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdOb2RlIG11c3QgYmUgYSBkaWN0aW9uYXJ5LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFJlZiA9IG5vZGUuZ2V0UmF3KCdQYXJlbnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5nZXRBc3luYygnUGFyZW50Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHBhcmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdQYXJlbnQgbXVzdCBiZSBhIGRpY3Rpb25hcnkuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudC5nZXRBc3luYygnS2lkcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoa2lkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgha2lkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2lkUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm91bmQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGtpZHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2lkID0ga2lkc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1JlZikoa2lkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdLaWQgbXVzdCBiZSBhIHJlZmVyZW5jZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWZzRXF1YWwpKGtpZCwga2lkUmVmKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraWRQcm9taXNlcy5wdXNoKHhyZWYuZmV0Y2hBc3luYyhraWQpLnRoZW4oZnVuY3Rpb24gKGtpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShraWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdLaWQgbm9kZSBtdXN0IGJlIGEgZGljdGlvbmFyeS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtpZC5oYXMoJ0NvdW50JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBraWQuZ2V0KCdDb3VudCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0tpZCByZWZlcmVuY2Ugbm90IGZvdW5kIGluIHBhcmVudFxcJ3Mga2lkcy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoa2lkUHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3RvdGFsLCBwYXJlbnRSZWZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG90YWwgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG5leHQocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFnZXNCZWZvcmVSZWYocmVmKS50aGVuKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2FyZ3MgPSBfc2xpY2VkVG9BcnJheShhcmdzLCAyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSBfYXJnc1swXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50UmVmID0gX2FyZ3NbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBjb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChwYXJlbnRSZWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChwYWdlUmVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm1ldGFkYXRhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW1SZWYgPSB0aGlzLmNhdERpY3QuZ2V0UmF3KCdNZXRhZGF0YScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzUmVmKShzdHJlYW1SZWYpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ21ldGFkYXRhJywgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VwcHJlc3NFbmNyeXB0aW9uID0gISh0aGlzLnhyZWYuZW5jcnlwdCAmJiB0aGlzLnhyZWYuZW5jcnlwdC5lbmNyeXB0TWV0YWRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdGhpcy54cmVmLmZldGNoKHN0cmVhbVJlZiwgc3VwcHJlc3NFbmNyeXB0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1ldGFkYXRhO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0gJiYgKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoc3RyZWFtLmRpY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHN0cmVhbS5kaWN0LmdldCgnVHlwZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1YnR5cGUgPSBzdHJlYW0uZGljdC5nZXQoJ1N1YnR5cGUnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHR5cGUsICdNZXRhZGF0YScpICYmICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHN1YnR5cGUsICdYTUwnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhID0gKDAsIF91dGlsLnN0cmluZ1RvVVRGOFN0cmluZykoKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKHN0cmVhbS5nZXRCeXRlcygpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIF91dGlsLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKCdTa2lwcGluZyBpbnZhbGlkIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnbWV0YWRhdGEnLCBtZXRhZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJ0b3BsZXZlbFBhZ2VzRGljdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFnZXNPYmogPSB0aGlzLmNhdERpY3QuZ2V0KCdQYWdlcycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkocGFnZXNPYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0ludmFsaWQgdG9wLWxldmVsIHBhZ2VzIGRpY3Rpb25hcnkuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ3RvcGxldmVsUGFnZXNEaWN0JywgcGFnZXNPYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZG9jdW1lbnRPdXRsaW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSB0aGlzLl9yZWFkRG9jdW1lbnRPdXRsaW5lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBfdXRpbC5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1VuYWJsZSB0byByZWFkIGRvY3VtZW50IG91dGxpbmUuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ2RvY3VtZW50T3V0bGluZScsIG9iaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJwZXJtaXNzaW9uc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGVybWlzc2lvbnMgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9ucyA9IHRoaXMuX3JlYWRQZXJtaXNzaW9ucygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX3V0aWwuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbmFibGUgdG8gcmVhZCBwZXJtaXNzaW9ucy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAncGVybWlzc2lvbnMnLCBwZXJtaXNzaW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJudW1QYWdlc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0gdGhpcy50b3BsZXZlbFBhZ2VzRGljdC5nZXQoJ0NvdW50Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignUGFnZSBjb3VudCBpbiB0b3AtbGV2ZWwgcGFnZXMgZGljdGlvbmFyeSBpcyBub3QgYW4gaW50ZWdlci4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnbnVtUGFnZXMnLCBvYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZGVzdGluYXRpb25zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLl9yZWFkRGVzdHMoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgTmFtZVRyZWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lcyA9IG9iai5nZXRBbGwoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBuYW1lcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RzW25hbWVdID0gZmV0Y2hEZXN0aW5hdGlvbihuYW1lc1tuYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLmZvckVhY2goZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdHNba2V5XSA9IGZldGNoRGVzdGluYXRpb24odmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsICdkZXN0aW5hdGlvbnMnLCBkZXN0cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJwYWdlTGFiZWxzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSB0aGlzLl9yZWFkUGFnZUxhYmVscygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX3V0aWwuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbmFibGUgdG8gcmVhZCBwYWdlIGxhYmVscy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAncGFnZUxhYmVscycsIG9iaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJwYWdlTW9kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0gdGhpcy5jYXREaWN0LmdldCgnUGFnZU1vZGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhZ2VNb2RlID0gJ1VzZU5vbmUnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9iai5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVXNlTm9uZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVXNlT3V0bGluZXMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1VzZVRodW1icyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRnVsbFNjcmVlbic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVXNlT0MnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1VzZUF0dGFjaG1lbnRzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZU1vZGUgPSBvYmoubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAncGFnZU1vZGUnLCBwYWdlTW9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJvcGVuQWN0aW9uRGVzdGluYXRpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IHRoaXMuY2F0RGljdC5nZXQoJ09wZW5BY3Rpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wZW5BY3Rpb25EZXN0ID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc3REaWN0ID0gbmV3IF9wcmltaXRpdmVzLkRpY3QodGhpcy54cmVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3REaWN0LnNldCgnQScsIG9iaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0T2JqID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0OiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0RGljdDogZGVzdERpY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqOiByZXN1bHRPYmpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRPYmouZGVzdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuQWN0aW9uRGVzdCA9IHJlc3VsdE9iai5kZXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbkFjdGlvbkRlc3QgPSBvYmo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ29wZW5BY3Rpb25EZXN0aW5hdGlvbicsIG9wZW5BY3Rpb25EZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImF0dGFjaG1lbnRzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLmNhdERpY3QuZ2V0KCdOYW1lcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXR0YWNobWVudHMgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmogJiYgb2JqLmhhcygnRW1iZWRkZWRGaWxlcycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZVRyZWUgPSBuZXcgTmFtZVRyZWUob2JqLmdldFJhdygnRW1iZWRkZWRGaWxlcycpLCB0aGlzLnhyZWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVzID0gbmFtZVRyZWUuZ2V0QWxsKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gbmFtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZnMgPSBuZXcgRmlsZVNwZWMobmFtZXNbbmFtZV0sIHRoaXMueHJlZik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF0dGFjaG1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50c1soMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKG5hbWUpXSA9IGZzLnNlcmlhbGl6YWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnYXR0YWNobWVudHMnLCBhdHRhY2htZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJqYXZhU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLmNhdERpY3QuZ2V0KCdOYW1lcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgamF2YVNjcmlwdCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYXBwZW5kSWZKYXZhU2NyaXB0RGljdChqc0RpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0ganNEaWN0LmdldCgnUycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHR5cGUsICdKYXZhU2NyaXB0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqcyA9IGpzRGljdC5nZXQoJ0pTJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKGpzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzID0gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGpzLmdldEJ5dGVzKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghKDAsIF91dGlsLmlzU3RyaW5nKShqcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghamF2YVNjcmlwdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmFTY3JpcHQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YVNjcmlwdC5wdXNoKCgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoanMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmogJiYgb2JqLmhhcygnSmF2YVNjcmlwdCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZVRyZWUgPSBuZXcgTmFtZVRyZWUob2JqLmdldFJhdygnSmF2YVNjcmlwdCcpLCB0aGlzLnhyZWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVzID0gbmFtZVRyZWUuZ2V0QWxsKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gbmFtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganNEaWN0ID0gbmFtZXNbbmFtZV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoanNEaWN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRJZkphdmFTY3JpcHREaWN0KGpzRGljdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wZW5BY3Rpb25EaWN0ID0gdGhpcy5jYXREaWN0LmdldCgnT3BlbkFjdGlvbicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShvcGVuQWN0aW9uRGljdCwgJ0FjdGlvbicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWN0aW9uVHlwZSA9IG9wZW5BY3Rpb25EaWN0LmdldCgnUycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoYWN0aW9uVHlwZSwgJ05hbWVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWN0aW9uID0gb3BlbkFjdGlvbkRpY3QuZ2V0KCdOJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoYWN0aW9uLCAnUHJpbnQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWphdmFTY3JpcHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmFTY3JpcHQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmFTY3JpcHQucHVzaCgncHJpbnQoe30pOycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kSWZKYXZhU2NyaXB0RGljdChvcGVuQWN0aW9uRGljdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ2phdmFTY3JpcHQnLCBqYXZhU2NyaXB0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicGFyc2VEZXN0RGljdGlvbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZURlc3REaWN0aW9uYXJ5KHBhcmFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBhZGREZWZhdWx0UHJvdG9jb2xUb1VybCh1cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmwuc3RhcnRzV2l0aCgnd3d3LicpID8gXCJodHRwOi8vXCIuY29uY2F0KHVybCkgOiB1cmw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB0cnlDb252ZXJ0VXJsRW5jb2RpbmcodXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc3RyaW5nVG9VVEY4U3RyaW5nKSh1cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzdERpY3QgPSBwYXJhbXMuZGVzdERpY3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShkZXN0RGljdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgncGFyc2VEZXN0RGljdGlvbmFyeTogYGRlc3REaWN0YCBtdXN0IGJlIGEgZGljdGlvbmFyeS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHRPYmogPSBwYXJhbXMucmVzdWx0T2JqO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdHlwZW9mKHJlc3VsdE9iaikgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ3BhcnNlRGVzdERpY3Rpb25hcnk6IGByZXN1bHRPYmpgIG11c3QgYmUgYW4gb2JqZWN0LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvY0Jhc2VVcmwgPSBwYXJhbXMuZG9jQmFzZVVybCB8fCBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWN0aW9uID0gZGVzdERpY3QuZ2V0KCdBJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoYWN0aW9uKSAmJiBkZXN0RGljdC5oYXMoJ0Rlc3QnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gZGVzdERpY3QuZ2V0KCdEZXN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoYWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFjdGlvblR5cGUgPSBhY3Rpb24uZ2V0KCdTJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoYWN0aW9uVHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ3BhcnNlRGVzdERpY3Rpb25hcnk6IEludmFsaWQgdHlwZSBpbiBBY3Rpb24gZGljdGlvbmFyeS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhY3Rpb25OYW1lID0gYWN0aW9uVHlwZS5uYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFjdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdVUkknOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBhY3Rpb24uZ2V0KCdVUkknKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodXJsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gJy8nICsgdXJsLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF91dGlsLmlzU3RyaW5nKSh1cmwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBhZGREZWZhdWx0UHJvdG9jb2xUb1VybCh1cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdHb1RvJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9IGFjdGlvbi5nZXQoJ0QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdMYXVuY2gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0dvVG9SJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVybERpY3QgPSBhY3Rpb24uZ2V0KCdGJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHVybERpY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmxEaWN0LmdldCgnRicpIHx8IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF91dGlsLmlzU3RyaW5nKSh1cmxEaWN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsRGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZW1vdGVEZXN0ID0gYWN0aW9uLmdldCgnRCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdGVEZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkocmVtb3RlRGVzdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVEZXN0ID0gcmVtb3RlRGVzdC5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzU3RyaW5nKSh1cmwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2VVcmwgPSB1cmwuc3BsaXQoJyMnKVswXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKHJlbW90ZURlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IGJhc2VVcmwgKyAnIycgKyByZW1vdGVEZXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZW1vdGVEZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBiYXNlVXJsICsgJyMnICsgSlNPTi5zdHJpbmdpZnkocmVtb3RlRGVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1dpbmRvdyA9IGFjdGlvbi5nZXQoJ05ld1dpbmRvdycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNCb29sKShuZXdXaW5kb3cpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoubmV3V2luZG93ID0gbmV3V2luZG93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdOYW1lZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lZEFjdGlvbiA9IGFjdGlvbi5nZXQoJ04nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkobmFtZWRBY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmouYWN0aW9uID0gbmFtZWRBY3Rpb24ubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnSmF2YVNjcmlwdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqc0FjdGlvbiA9IGFjdGlvbi5nZXQoJ0pTJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShqc0FjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzID0gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGpzQWN0aW9uLmdldEJ5dGVzKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykoanNBY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcyA9IGpzQWN0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgVVJMX09QRU5fTUVUSE9EUyA9IFsnYXBwLmxhdW5jaFVSTCcsICd3aW5kb3cub3BlbiddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cCgnXlxcXFxzKignICsgVVJMX09QRU5fTUVUSE9EUy5qb2luKCd8Jykuc3BsaXQoJy4nKS5qb2luKCdcXFxcLicpICsgJylcXFxcKCg/OlxcJ3xcXFwiKShbXlxcJ1xcXCJdKikoPzpcXCd8XFxcIikoPzosXFxcXHMqKFxcXFx3KylcXFxcKXxcXFxcKSknLCAnaScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpzVXJsID0gcmVnZXguZXhlYygoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGpzKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc1VybCAmJiBqc1VybFsyXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IGpzVXJsWzJdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzVXJsWzNdID09PSAndHJ1ZScgJiYganNVcmxbMV0gPT09ICdhcHAubGF1bmNoVVJMJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoubmV3V2luZG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwicGFyc2VEZXN0RGljdGlvbmFyeTogdW5zdXBwb3J0ZWQgYWN0aW9uIHR5cGUgXFxcIlwiLmNvbmNhdChhY3Rpb25OYW1lLCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVzdERpY3QuaGFzKCdEZXN0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSBkZXN0RGljdC5nZXQoJ0Rlc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKHVybCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHRyeUNvbnZlcnRVcmxFbmNvZGluZyh1cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFic29sdXRlVXJsID0gKDAsIF91dGlsLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKHVybCwgZG9jQmFzZVVybCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhYnNvbHV0ZVVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai51cmwgPSBhYnNvbHV0ZVVybC5ocmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudW5zYWZlVXJsID0gdXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShkZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSBkZXN0Lm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKGRlc3QpIHx8IEFycmF5LmlzQXJyYXkoZGVzdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmouZGVzdCA9IGRlc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDYXRhbG9nO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkNhdGFsb2cgPSBDYXRhbG9nO1xuXG4gICAgICAgICAgICAgICAgdmFyIFhSZWYgPSBmdW5jdGlvbiBYUmVmQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gWFJlZihzdHJlYW0sIHBkZk1hbmFnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZGZNYW5hZ2VyID0gcGRmTWFuYWdlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW50cmllcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy54cmVmc3RtcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVR5cGVzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250VHlwZXM6IFtdXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgWFJlZi5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGFydFhSZWY6IGZ1bmN0aW9uIFhSZWZfc2V0U3RhcnRYUmVmKHN0YXJ0WFJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRYUmVmUXVldWUgPSBbc3RhcnRYUmVmXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZTogZnVuY3Rpb24gWFJlZl9wYXJzZShyZWNvdmVyeU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhaWxlckRpY3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlY292ZXJ5TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFpbGVyRGljdCA9IHRoaXMucmVhZFhSZWYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0luZGV4aW5nIGFsbCBQREYgb2JqZWN0cycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFpbGVyRGljdCA9IHRoaXMuaW5kZXhPYmplY3RzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaWxlckRpY3QuYXNzaWduWHJlZih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYWlsZXIgPSB0cmFpbGVyRGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jcnlwdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY3J5cHQgPSB0cmFpbGVyRGljdC5nZXQoJ0VuY3J5cHQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBfdXRpbC5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJYUmVmLnBhcnNlIC0gSW52YWxpZCBcXFwiRW5jcnlwdFxcXCIgcmVmZXJlbmNlOiBcXFwiXCIuY29uY2F0KGV4LCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZW5jcnlwdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlkcyA9IHRyYWlsZXJEaWN0LmdldCgnSUQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGVJZCA9IGlkcyAmJiBpZHMubGVuZ3RoID8gaWRzWzBdIDogJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY3J5cHQuc3VwcHJlc3NFbmNyeXB0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmNyeXB0ID0gbmV3IF9jcnlwdG8uQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeShlbmNyeXB0LCBmaWxlSWQsIHRoaXMucGRmTWFuYWdlci5wYXNzd29yZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvb3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290ID0gdHJhaWxlckRpY3QuZ2V0KCdSb290Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX3V0aWwuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiWFJlZi5wYXJzZSAtIEludmFsaWQgXFxcIlJvb3RcXFwiIHJlZmVyZW5jZTogXFxcIlwiLmNvbmNhdChleCwgXCJcXFwiLlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHJvb3QpICYmIHJvb3QuaGFzKCdQYWdlcycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWNvdmVyeU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5YUmVmUGFyc2VFeGNlcHRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignSW52YWxpZCByb290IHJlZmVyZW5jZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzWFJlZlRhYmxlOiBmdW5jdGlvbiBYUmVmX3Byb2Nlc3NYUmVmVGFibGUocGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoJ3RhYmxlU3RhdGUnIGluIHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5TnVtOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtUG9zOiBwYXJzZXIubGV4ZXIuc3RyZWFtLnBvcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlckJ1ZjE6IHBhcnNlci5idWYxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyQnVmMjogcGFyc2VyLmJ1ZjJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0gdGhpcy5yZWFkWFJlZlRhYmxlKHBhcnNlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCAndHJhaWxlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignSW52YWxpZCBYUmVmIHRhYmxlOiBjb3VsZCBub3QgZmluZCB0cmFpbGVyIGRpY3Rpb25hcnknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGljdCA9IHBhcnNlci5nZXRPYmooKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZGljdCkgJiYgZGljdC5kaWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QgPSBkaWN0LmRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShkaWN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0ludmFsaWQgWFJlZiB0YWJsZTogY291bGQgbm90IHBhcnNlIHRyYWlsZXIgZGljdGlvbmFyeScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnRhYmxlU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFhSZWZUYWJsZTogZnVuY3Rpb24gWFJlZl9yZWFkWFJlZlRhYmxlKHBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBwYXJzZXIubGV4ZXIuc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWJsZVN0YXRlID0gdGhpcy50YWJsZVN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5wb3MgPSB0YWJsZVN0YXRlLnN0cmVhbVBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIuYnVmMSA9IHRhYmxlU3RhdGUucGFyc2VyQnVmMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIuYnVmMiA9IHRhYmxlU3RhdGUucGFyc2VyQnVmMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoJ2ZpcnN0RW50cnlOdW0nIGluIHRhYmxlU3RhdGUpIHx8ICEoJ2VudHJ5Q291bnQnIGluIHRhYmxlU3RhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmogPSBwYXJzZXIuZ2V0T2JqKCksICd0cmFpbGVyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVTdGF0ZS5maXJzdEVudHJ5TnVtID0gb2JqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVTdGF0ZS5lbnRyeUNvdW50ID0gcGFyc2VyLmdldE9iaigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0ID0gdGFibGVTdGF0ZS5maXJzdEVudHJ5TnVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY291bnQgPSB0YWJsZVN0YXRlLmVudHJ5Q291bnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGZpcnN0KSB8fCAhTnVtYmVyLmlzSW50ZWdlcihjb3VudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignSW52YWxpZCBYUmVmIHRhYmxlOiB3cm9uZyB0eXBlcyBpbiBzdWJzZWN0aW9uIGhlYWRlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRhYmxlU3RhdGUuZW50cnlOdW07IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVN0YXRlLnN0cmVhbVBvcyA9IHN0cmVhbS5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVN0YXRlLmVudHJ5TnVtID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlU3RhdGUucGFyc2VyQnVmMSA9IHBhcnNlci5idWYxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVTdGF0ZS5wYXJzZXJCdWYyID0gcGFyc2VyLmJ1ZjI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5Lm9mZnNldCA9IHBhcnNlci5nZXRPYmooKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmdlbiA9IHBhcnNlci5nZXRPYmooKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcGFyc2VyLmdldE9iaigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKSh0eXBlLCAnZicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuZnJlZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkodHlwZSwgJ24nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnVuY29tcHJlc3NlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihlbnRyeS5vZmZzZXQpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGVudHJ5LmdlbikgfHwgIShlbnRyeS5mcmVlIHx8IGVudHJ5LnVuY29tcHJlc3NlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIGVudHJ5IGluIFhSZWYgc3Vic2VjdGlvbjogXCIuY29uY2F0KGZpcnN0LCBcIiwgXCIpLmNvbmNhdChjb3VudCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCAmJiBlbnRyeS5mcmVlICYmIGZpcnN0ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZW50cmllc1tpICsgZmlyc3RdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyaWVzW2kgKyBmaXJzdF0gPSBlbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlU3RhdGUuZW50cnlOdW0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVN0YXRlLnN0cmVhbVBvcyA9IHN0cmVhbS5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlU3RhdGUucGFyc2VyQnVmMSA9IHBhcnNlci5idWYxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVN0YXRlLnBhcnNlckJ1ZjIgPSBwYXJzZXIuYnVmMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRhYmxlU3RhdGUuZmlyc3RFbnRyeU51bTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRhYmxlU3RhdGUuZW50cnlDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lbnRyaWVzWzBdICYmICF0aGlzLmVudHJpZXNbMF0uZnJlZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0ludmFsaWQgWFJlZiB0YWJsZTogdW5leHBlY3RlZCBmaXJzdCBvYmplY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NYUmVmU3RyZWFtOiBmdW5jdGlvbiBYUmVmX3Byb2Nlc3NYUmVmU3RyZWFtKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKCdzdHJlYW1TdGF0ZScgaW4gdGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbVBhcmFtZXRlcnMgPSBzdHJlYW0uZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGVXaWR0aHMgPSBzdHJlYW1QYXJhbWV0ZXJzLmdldCgnVycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBzdHJlYW1QYXJhbWV0ZXJzLmdldCgnSW5kZXgnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IFswLCBzdHJlYW1QYXJhbWV0ZXJzLmdldCgnU2l6ZScpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeVJhbmdlczogcmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlV2lkdGhzOiBieXRlV2lkdGhzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlOdW06IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1Qb3M6IHN0cmVhbS5wb3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWRYUmVmU3RyZWFtKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3RyZWFtU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRYUmVmU3RyZWFtOiBmdW5jdGlvbiBYUmVmX3JlYWRYUmVmU3RyZWFtKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW1TdGF0ZSA9IHRoaXMuc3RyZWFtU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnBvcyA9IHN0cmVhbVN0YXRlLnN0cmVhbVBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZVdpZHRocyA9IHN0cmVhbVN0YXRlLmJ5dGVXaWR0aHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGVGaWVsZFdpZHRoID0gYnl0ZVdpZHRoc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0RmllbGRXaWR0aCA9IGJ5dGVXaWR0aHNbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdlbmVyYXRpb25GaWVsZFdpZHRoID0gYnl0ZVdpZHRoc1syXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnlSYW5nZXMgPSBzdHJlYW1TdGF0ZS5lbnRyeVJhbmdlcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChlbnRyeVJhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdCA9IGVudHJ5UmFuZ2VzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IGVudHJ5UmFuZ2VzWzFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihmaXJzdCkgfHwgIU51bWJlci5pc0ludGVnZXIobikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgWFJlZiByYW5nZSBmaWVsZHM6IFwiLmNvbmNhdChmaXJzdCwgXCIsIFwiKS5jb25jYXQobikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHR5cGVGaWVsZFdpZHRoKSB8fCAhTnVtYmVyLmlzSW50ZWdlcihvZmZzZXRGaWVsZFdpZHRoKSB8fCAhTnVtYmVyLmlzSW50ZWdlcihnZW5lcmF0aW9uRmllbGRXaWR0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgWFJlZiBlbnRyeSBmaWVsZHMgbGVuZ3RoOiBcIi5jb25jYXQoZmlyc3QsIFwiLCBcIikuY29uY2F0KG4pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHN0cmVhbVN0YXRlLmVudHJ5TnVtOyBpIDwgbjsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1TdGF0ZS5lbnRyeU51bSA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1TdGF0ZS5zdHJlYW1Qb3MgPSBzdHJlYW0ucG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGlvbiA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCB0eXBlRmllbGRXaWR0aDsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHR5cGUgPDwgOCB8IHN0cmVhbS5nZXRCeXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlRmllbGRXaWR0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgb2Zmc2V0RmllbGRXaWR0aDsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0IDw8IDggfCBzdHJlYW0uZ2V0Qnl0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZ2VuZXJhdGlvbkZpZWxkV2lkdGg7ICsraikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRpb24gPSBnZW5lcmF0aW9uIDw8IDggfCBzdHJlYW0uZ2V0Qnl0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5Lm9mZnNldCA9IG9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmdlbiA9IGdlbmVyYXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuZnJlZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS51bmNvbXByZXNzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIFhSZWYgZW50cnkgdHlwZTogXCIuY29uY2F0KHR5cGUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVudHJpZXNbZmlyc3QgKyBpXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW50cmllc1tmaXJzdCArIGldID0gZW50cnk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1TdGF0ZS5lbnRyeU51bSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVN0YXRlLnN0cmVhbVBvcyA9IHN0cmVhbS5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5UmFuZ2VzLnNwbGljZSgwLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhPYmplY3RzOiBmdW5jdGlvbiBYUmVmX2luZGV4T2JqZWN0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgVEFCID0gMHg5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMRiA9IDB4QSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1IgPSAweEQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQQUNFID0gMHgyMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgUEVSQ0VOVCA9IDB4MjUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUID0gMHgzQztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWRUb2tlbihkYXRhLCBvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuID0gJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IGRhdGFbb2Zmc2V0XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2ggIT09IExGICYmIGNoICE9PSBDUiAmJiBjaCAhPT0gTFQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK29mZnNldCA+PSBkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gZGF0YVtvZmZzZXRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNraXBVbnRpbChkYXRhLCBvZmZzZXQsIHdoYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHdoYXQubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2tpcHBlZCA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG9mZnNldCA8IGRhdGFMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBsZW5ndGggJiYgZGF0YVtvZmZzZXQgKyBpXSA9PT0gd2hhdFtpXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj0gbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcHBlZCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNraXBwZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ialJlZ0V4cCA9IC9eKFxcZCspXFxzKyhcXGQrKVxccytvYmpcXGIvO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmRvYmpSZWdFeHAgPSAvXFxiZW5kb2JqW1xcYlxcc10kLztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmVzdGVkT2JqUmVnRXhwID0gL1xccysoXFxkK1xccytcXGQrXFxzK29ialtcXGJcXHM8XSkkLztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgQ0hFQ0tfQ09OVEVOVF9MRU5HVEggPSAyNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhaWxlckJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoWzExNiwgMTE0LCA5NywgMTA1LCAxMDgsIDEwMSwgMTE0XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0eHJlZkJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoWzExNSwgMTE2LCA5NywgMTE0LCAxMTYsIDEyMCwgMTE0LCAxMDEsIDEwMl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmpCeXRlcyA9IG5ldyBVaW50OEFycmF5KFsxMTEsIDk4LCAxMDZdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZkJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoWzQ3LCA4OCwgODIsIDEwMSwgMTAyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyaWVzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHRoaXMuc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5wb3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBzdHJlYW0uZ2V0Qnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBzdHJlYW0uc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYWlsZXJzID0gW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWZTdG1zID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoID0gYnVmZmVyW3Bvc2l0aW9uXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IFRBQiB8fCBjaCA9PT0gTEYgfHwgY2ggPT09IENSIHx8IGNoID09PSBTUEFDRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytwb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSBQRVJDRU5UKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytwb3NpdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBidWZmZXJbcG9zaXRpb25dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoY2ggIT09IExGICYmIGNoICE9PSBDUik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuID0gcmVhZFRva2VuKGJ1ZmZlciwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4uc3RhcnRzV2l0aCgneHJlZicpICYmICh0b2tlbi5sZW5ndGggPT09IDQgfHwgL1xccy8udGVzdCh0b2tlbls0XSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSBza2lwVW50aWwoYnVmZmVyLCBwb3NpdGlvbiwgdHJhaWxlckJ5dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWlsZXJzLnB1c2gocG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gc2tpcFVudGlsKGJ1ZmZlciwgcG9zaXRpb24sIHN0YXJ0eHJlZkJ5dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtID0gb2JqUmVnRXhwLmV4ZWModG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0gbVsxXSB8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuID0gbVsyXSB8IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbnRyaWVzW251bV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyaWVzW251bV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogcG9zaXRpb24gLSBzdHJlYW0uc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbjogZ2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmNvbXByZXNzZWQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudExlbmd0aCA9IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvcyA9IHBvc2l0aW9uICsgdG9rZW4ubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc3RhcnRQb3MgPCBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZFBvcyA9IHN0YXJ0UG9zICsgc2tpcFVudGlsKGJ1ZmZlciwgc3RhcnRQb3MsIG9iakJ5dGVzKSArIDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudExlbmd0aCA9IGVuZFBvcyAtIHBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGVja1BvcyA9IE1hdGgubWF4KGVuZFBvcyAtIENIRUNLX0NPTlRFTlRfTEVOR1RILCBzdGFydFBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyID0gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGJ1ZmZlci5zdWJhcnJheShjaGVja1BvcywgZW5kUG9zKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5kb2JqUmVnRXhwLnRlc3QodG9rZW5TdHIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmpUb2tlbiA9IG5lc3RlZE9ialJlZ0V4cC5leGVjKHRva2VuU3RyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqVG9rZW4gJiYgb2JqVG9rZW5bMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnaW5kZXhPYmplY3RzOiBGb3VuZCBuZXcgXCJvYmpcIiBpbnNpZGUgb2YgYW5vdGhlciBcIm9ialwiLCAnICsgJ2NhdXNlZCBieSBtaXNzaW5nIFwiZW5kb2JqXCIgLS0gdHJ5aW5nIHRvIHJlY292ZXIuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50TGVuZ3RoIC09IG9ialRva2VuWzFdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gYnVmZmVyLnN1YmFycmF5KHBvc2l0aW9uLCBwb3NpdGlvbiArIGNvbnRlbnRMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhyZWZUYWdPZmZzZXQgPSBza2lwVW50aWwoY29udGVudCwgMCwgeHJlZkJ5dGVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhyZWZUYWdPZmZzZXQgPCBjb250ZW50TGVuZ3RoICYmIGNvbnRlbnRbeHJlZlRhZ09mZnNldCArIDVdIDwgNjQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmU3Rtcy5wdXNoKHBvc2l0aW9uIC0gc3RyZWFtLnN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnhyZWZzdG1zW3Bvc2l0aW9uIC0gc3RyZWFtLnN0YXJ0XSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IGNvbnRlbnRMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4uc3RhcnRzV2l0aCgndHJhaWxlcicpICYmICh0b2tlbi5sZW5ndGggPT09IDcgfHwgL1xccy8udGVzdCh0b2tlbls3XSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFpbGVycy5wdXNoKHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IHNraXBVbnRpbChidWZmZXIsIHBvc2l0aW9uLCBzdGFydHhyZWZCeXRlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSB0b2tlbi5sZW5ndGggKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIGlpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSB4cmVmU3Rtcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRYUmVmUXVldWUucHVzaCh4cmVmU3Rtc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZFhSZWYodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYWlsZXJEaWN0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSB0cmFpbGVycy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5wb3MgPSB0cmFpbGVyc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBfcGFyc2VyLlBhcnNlcihuZXcgX3BhcnNlci5MZXhlcihzdHJlYW0pLCB0cnVlLCB0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IHBhcnNlci5nZXRPYmooKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCAndHJhaWxlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gcGFyc2VyLmdldE9iaigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZGljdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvb3REaWN0ID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290RGljdCA9IGRpY3QuZ2V0KCdSb290Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBfdXRpbC5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkocm9vdERpY3QpIHx8ICFyb290RGljdC5oYXMoJ1BhZ2VzJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpY3QuaGFzKCdJRCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWlsZXJEaWN0ID0gZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhaWxlckRpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYWlsZXJEaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5JbnZhbGlkUERGRXhjZXB0aW9uKCdJbnZhbGlkIFBERiBzdHJ1Y3R1cmUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkWFJlZjogZnVuY3Rpb24gWFJlZl9yZWFkWFJlZihyZWNvdmVyeU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdGhpcy5zdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0WFJlZlBhcnNlZENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLnN0YXJ0WFJlZlF1ZXVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0WFJlZiA9IHRoaXMuc3RhcnRYUmVmUXVldWVbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydFhSZWZQYXJzZWRDYWNoZVtzdGFydFhSZWZdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdyZWFkWFJlZiAtIHNraXBwaW5nIFhSZWYgdGFibGUgc2luY2UgaXQgd2FzIGFscmVhZHkgcGFyc2VkLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRYUmVmUXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYUmVmUGFyc2VkQ2FjaGVbc3RhcnRYUmVmXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucG9zID0gc3RhcnRYUmVmICsgc3RyZWFtLnN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBfcGFyc2VyLlBhcnNlcihuZXcgX3BhcnNlci5MZXhlcihzdHJlYW0pLCB0cnVlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSBwYXJzZXIuZ2V0T2JqKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGljdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCAneHJlZicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdCA9IHRoaXMucHJvY2Vzc1hSZWZUYWJsZShwYXJzZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRvcERpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b3BEaWN0ID0gZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSBkaWN0LmdldCgnWFJlZlN0bScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gb2JqO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHBvcyBpbiB0aGlzLnhyZWZzdG1zKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy54cmVmc3Rtc1twb3NdID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRYUmVmUXVldWUucHVzaChwb3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIocGFyc2VyLmdldE9iaigpKSB8fCAhKDAsIF9wcmltaXRpdmVzLmlzQ21kKShwYXJzZXIuZ2V0T2JqKCksICdvYmonKSB8fCAhKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShvYmogPSBwYXJzZXIuZ2V0T2JqKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignSW52YWxpZCBYUmVmIHN0cmVhbScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QgPSB0aGlzLnByb2Nlc3NYUmVmU3RyZWFtKG9iaik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudG9wRGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvcERpY3QgPSBkaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0ZhaWxlZCB0byByZWFkIFhSZWYgc3RyZWFtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0ludmFsaWQgWFJlZiBzdHJlYW0gaGVhZGVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaiA9IGRpY3QuZ2V0KCdQcmV2Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzUmVmKShvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydFhSZWZRdWV1ZS5wdXNoKG9iai5udW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0WFJlZlF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b3BEaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBfdXRpbC5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKSgnKHdoaWxlIHJlYWRpbmcgWFJlZik6ICcgKyBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnlNb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuWFJlZlBhcnNlRXhjZXB0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RW50cnk6IGZ1bmN0aW9uIFhSZWZfZ2V0RW50cnkoaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4cmVmRW50cnkgPSB0aGlzLmVudHJpZXNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeHJlZkVudHJ5ICYmICF4cmVmRW50cnkuZnJlZSAmJiB4cmVmRW50cnkub2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4cmVmRW50cnk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hJZlJlZjogZnVuY3Rpb24gWFJlZl9mZXRjaElmUmVmKG9iaiwgc3VwcHJlc3NFbmNyeXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mZXRjaChvYmosIHN1cHByZXNzRW5jcnlwdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2g6IGZ1bmN0aW9uIFhSZWZfZmV0Y2gocmVmLCBzdXBwcmVzc0VuY3J5cHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1JlZikocmVmKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZiBvYmplY3QgaXMgbm90IGEgcmVmZXJlbmNlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bSA9IHJlZi5udW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtIGluIHRoaXMuY2FjaGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhY2hlRW50cnkgPSB0aGlzLmNhY2hlW251bV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlRW50cnkgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0ICYmICFjYWNoZUVudHJ5Lm9iaklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZUVudHJ5Lm9iaklkID0gcmVmLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVFbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZkVudHJ5ID0gdGhpcy5nZXRFbnRyeShudW0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhyZWZFbnRyeSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZVtudW1dID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeHJlZkVudHJ5LnVuY29tcHJlc3NlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmRW50cnkgPSB0aGlzLmZldGNoVW5jb21wcmVzc2VkKHJlZiwgeHJlZkVudHJ5LCBzdXBwcmVzc0VuY3J5cHRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWZFbnRyeSA9IHRoaXMuZmV0Y2hDb21wcmVzc2VkKHJlZiwgeHJlZkVudHJ5LCBzdXBwcmVzc0VuY3J5cHRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KSh4cmVmRW50cnkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWZFbnRyeS5vYmpJZCA9IHJlZi50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKSh4cmVmRW50cnkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWZFbnRyeS5kaWN0Lm9iaklkID0gcmVmLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHhyZWZFbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmZXRjaFVuY29tcHJlc3NlZDogZnVuY3Rpb24gZmV0Y2hVbmNvbXByZXNzZWQocmVmLCB4cmVmRW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VwcHJlc3NFbmNyeXB0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2VuID0gcmVmLmdlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0gcmVmLm51bTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4cmVmRW50cnkuZ2VuICE9PSBnZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLlhSZWZFbnRyeUV4Y2VwdGlvbihcIkluY29uc2lzdGVudCBnZW5lcmF0aW9uIGluIFhSZWY6IFwiLmNvbmNhdChyZWYpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdGhpcy5zdHJlYW0ubWFrZVN1YlN0cmVhbSh4cmVmRW50cnkub2Zmc2V0ICsgdGhpcy5zdHJlYW0uc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZXIgPSBuZXcgX3BhcnNlci5QYXJzZXIobmV3IF9wYXJzZXIuTGV4ZXIoc3RyZWFtKSwgdHJ1ZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iajEgPSBwYXJzZXIuZ2V0T2JqKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iajIgPSBwYXJzZXIuZ2V0T2JqKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iajMgPSBwYXJzZXIuZ2V0T2JqKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIob2JqMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqMSA9IHBhcnNlSW50KG9iajEsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIob2JqMikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqMiA9IHBhcnNlSW50KG9iajIsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqMSAhPT0gbnVtIHx8IG9iajIgIT09IGdlbiB8fCAhKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmozKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuWFJlZkVudHJ5RXhjZXB0aW9uKFwiQmFkICh1bmNvbXByZXNzZWQpIFhSZWYgZW50cnk6IFwiLmNvbmNhdChyZWYpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqMy5jbWQgIT09ICdvYmonKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmozLmNtZC5zdGFydHNXaXRoKCdvYmonKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtID0gcGFyc2VJbnQob2JqMy5jbWQuc3Vic3RyaW5nKDMpLCAxMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzTmFOKG51bSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLlhSZWZFbnRyeUV4Y2VwdGlvbihcIkJhZCAodW5jb21wcmVzc2VkKSBYUmVmIGVudHJ5OiBcIi5jb25jYXQocmVmKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZW5jcnlwdCAmJiAhc3VwcHJlc3NFbmNyeXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWZFbnRyeSA9IHBhcnNlci5nZXRPYmoodGhpcy5lbmNyeXB0LmNyZWF0ZUNpcGhlclRyYW5zZm9ybShudW0sIGdlbikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWZFbnRyeSA9IHBhcnNlci5nZXRPYmooKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoeHJlZkVudHJ5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlW251bV0gPSB4cmVmRW50cnk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHhyZWZFbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmZXRjaENvbXByZXNzZWQ6IGZ1bmN0aW9uIGZldGNoQ29tcHJlc3NlZChyZWYsIHhyZWZFbnRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdXBwcmVzc0VuY3J5cHRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWJsZU9mZnNldCA9IHhyZWZFbnRyeS5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHRoaXMuZmV0Y2gobmV3IF9wcmltaXRpdmVzLlJlZih0YWJsZU9mZnNldCwgMCkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKHN0cmVhbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdiYWQgT2JqU3RtIHN0cmVhbScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdCA9IHN0cmVhbS5kaWN0LmdldCgnRmlyc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IHN0cmVhbS5kaWN0LmdldCgnTicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGZpcnN0KSB8fCAhTnVtYmVyLmlzSW50ZWdlcihuKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ2ludmFsaWQgZmlyc3QgYW5kIG4gcGFyYW1ldGVycyBmb3IgT2JqU3RtIHN0cmVhbScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZXIgPSBuZXcgX3BhcnNlci5QYXJzZXIobmV3IF9wYXJzZXIuTGV4ZXIoc3RyZWFtKSwgZmFsc2UsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5hbGxvd1N0cmVhbXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzID0gW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0gPSBwYXJzZXIuZ2V0T2JqKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG51bSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcImludmFsaWQgb2JqZWN0IG51bWJlciBpbiB0aGUgT2JqU3RtIHN0cmVhbTogXCIuY29uY2F0KG51bSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtcy5wdXNoKG51bSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBwYXJzZXIuZ2V0T2JqKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG9mZnNldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcImludmFsaWQgb2JqZWN0IG9mZnNldCBpbiB0aGUgT2JqU3RtIHN0cmVhbTogXCIuY29uY2F0KG9mZnNldCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzLnB1c2gocGFyc2VyLmdldE9iaigpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKShwYXJzZXIuYnVmMSwgJ2VuZG9iaicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSA9IG51bXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMuZW50cmllc1tudW1dO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeSAmJiBlbnRyeS5vZmZzZXQgPT09IHRhYmxlT2Zmc2V0ICYmIGVudHJ5LmdlbiA9PT0gaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWNoZVtudW1dID0gZW50cmllc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWZFbnRyeSA9IGVudHJpZXNbeHJlZkVudHJ5Lmdlbl07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeHJlZkVudHJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLlhSZWZFbnRyeUV4Y2VwdGlvbihcIkJhZCAoY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogXCIuY29uY2F0KHJlZikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4cmVmRW50cnk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hJZlJlZkFzeW5jOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9mZXRjaElmUmVmQXN5bmMgPSBfYXN5bmNUb0dlbmVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVnZW5lcmF0b3IuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUob2JqLCBzdXBwcmVzc0VuY3J5cHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgb2JqKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgdGhpcy5mZXRjaEFzeW5jKG9iaiwgc3VwcHJlc3NFbmNyeXB0aW9uKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgX2NhbGxlZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZldGNoSWZSZWZBc3luYyhfeCwgX3gyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZmV0Y2hJZlJlZkFzeW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoSWZSZWZBc3luYztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0oKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoQXN5bmM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2ZldGNoQXN5bmMgPSBfYXN5bmNUb0dlbmVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVnZW5lcmF0b3IuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyKHJlZiwgc3VwcHJlc3NFbmNyeXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMiQoX2NvbnRleHQyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDIucHJldiA9IF9jb250ZXh0Mi5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQyLnByZXYgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KFwicmV0dXJuXCIsIHRoaXMuZmV0Y2gocmVmLCBzdXBwcmVzc0VuY3J5cHRpb24pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5wcmV2ID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDIudDAgPSBfY29udGV4dDJbXCJjYXRjaFwiXSgwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfY29udGV4dDIudDAgaW5zdGFuY2VvZiBfdXRpbC5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IF9jb250ZXh0Mi50MDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMTA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGRmTWFuYWdlci5yZXF1ZXN0UmFuZ2UoX2NvbnRleHQyLnQwLmJlZ2luLCBfY29udGV4dDIudDAuZW5kKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdChcInJldHVyblwiLCB0aGlzLmZldGNoQXN5bmMocmVmLCBzdXBwcmVzc0VuY3J5cHRpb24pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIF9jYWxsZWUyLCB0aGlzLCBbWzAsIDRdXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZldGNoQXN5bmMoX3gzLCBfeDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9mZXRjaEFzeW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoQXN5bmM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KCksXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRDYXRhbG9nT2JqOiBmdW5jdGlvbiBYUmVmX2dldENhdGFsb2dPYmooKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucm9vdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFhSZWY7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5YUmVmID0gWFJlZjtcblxuICAgICAgICAgICAgICAgIHZhciBOYW1lT3JOdW1iZXJUcmVlID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBOYW1lT3JOdW1iZXJUcmVlKHJvb3QsIHhyZWYsIHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTmFtZU9yTnVtYmVyVHJlZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gTmFtZU9yTnVtYmVyVHJlZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKCdDYW5ub3QgaW5pdGlhbGl6ZSBOYW1lT3JOdW1iZXJUcmVlLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy54cmVmID0geHJlZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKE5hbWVPck51bWJlclRyZWUsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldEFsbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRBbGwoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucm9vdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IHRoaXMueHJlZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb2Nlc3NlZCA9IG5ldyBfcHJpbWl0aXZlcy5SZWZTZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkLnB1dCh0aGlzLnJvb3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVldWUgPSBbdGhpcy5yb290XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IHhyZWYuZmV0Y2hJZlJlZihxdWV1ZS5zaGlmdCgpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmouaGFzKCdLaWRzJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2lkcyA9IG9iai5nZXQoJ0tpZHMnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGtpZHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2lkID0ga2lkc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc2VkLmhhcyhraWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJEdXBsaWNhdGUgZW50cnkgaW4gXFxcIlwiLmNvbmNhdCh0aGlzLl90eXBlLCBcIlxcXCIgdHJlZS5cIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaChraWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWQucHV0KGtpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyaWVzID0gb2JqLmdldCh0aGlzLl90eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZW50cmllcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaTIgPSAwLCBfaWkgPSBlbnRyaWVzLmxlbmd0aDsgX2kyIDwgX2lpOyBfaTIgKz0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0W3hyZWYuZmV0Y2hJZlJlZihlbnRyaWVzW19pMl0pXSA9IHhyZWYuZmV0Y2hJZlJlZihlbnRyaWVzW19pMiArIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5yb290KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4cmVmID0gdGhpcy54cmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2lkc09yRW50cmllcyA9IHhyZWYuZmV0Y2hJZlJlZih0aGlzLnJvb3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9vcENvdW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE1BWF9MRVZFTFMgPSAxMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoa2lkc09yRW50cmllcy5oYXMoJ0tpZHMnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrbG9vcENvdW50ID4gTUFYX0xFVkVMUykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlNlYXJjaCBkZXB0aCBsaW1pdCByZWFjaGVkIGZvciBcXFwiXCIuY29uY2F0KHRoaXMuX3R5cGUsIFwiXFxcIiB0cmVlLlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBraWRzID0ga2lkc09yRW50cmllcy5nZXQoJ0tpZHMnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGtpZHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0ga2lkcy5sZW5ndGggLSAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobCA8PSByKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSBsICsgciA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBraWQgPSB4cmVmLmZldGNoSWZSZWYoa2lkc1ttXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpbWl0cyA9IGtpZC5nZXQoJ0xpbWl0cycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA8IHhyZWYuZmV0Y2hJZlJlZihsaW1pdHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBtIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA+IHhyZWYuZmV0Y2hJZlJlZihsaW1pdHNbMV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBtICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraWRzT3JFbnRyaWVzID0geHJlZi5mZXRjaElmUmVmKGtpZHNbbV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID4gcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVudHJpZXMgPSBraWRzT3JFbnRyaWVzLmdldCh0aGlzLl90eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbnRyaWVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9sID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfciA9IGVudHJpZXMubGVuZ3RoIC0gMjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKF9sIDw9IF9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcCA9IF9sICsgX3IgPj4gMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX20gPSB0bXAgKyAodG1wICYgMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudEtleSA9IHhyZWYuZmV0Y2hJZlJlZihlbnRyaWVzW19tXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5IDwgY3VycmVudEtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfciA9IF9tIC0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA+IGN1cnJlbnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2wgPSBfbSArIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHhyZWYuZmV0Y2hJZlJlZihlbnRyaWVzW19tICsgMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiRmFsbGluZyBiYWNrIHRvIGFuIGV4aGF1c3RpdmUgc2VhcmNoLCBmb3Iga2V5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIsIFwiKSArIFwiaW4gXFxcIlwiLmNvbmNhdCh0aGlzLl90eXBlLCBcIlxcXCIgdHJlZS5cIikpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfbTIgPSAwLCBtbSA9IGVudHJpZXMubGVuZ3RoOyBfbTIgPCBtbTsgX20yICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2N1cnJlbnRLZXkgPSB4cmVmLmZldGNoSWZSZWYoZW50cmllc1tfbTJdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfY3VycmVudEtleSA9PT0ga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlRoZSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGtleSB3YXMgZm91bmQgYXQgYW4gaW5jb3JyZWN0LCBcIikgKyBcImkuZS4gb3V0LW9mLW9yZGVyLCBwb3NpdGlvbiBpbiBcXFwiXCIuY29uY2F0KHRoaXMuX3R5cGUsIFwiXFxcIiB0cmVlLlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4cmVmLmZldGNoSWZSZWYoZW50cmllc1tfbTIgKyAxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFtZU9yTnVtYmVyVHJlZTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIE5hbWVUcmVlID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX05hbWVPck51bWJlclRyZWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhOYW1lVHJlZSwgX05hbWVPck51bWJlclRyZWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBOYW1lVHJlZShyb290LCB4cmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE5hbWVUcmVlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoTmFtZVRyZWUpLmNhbGwodGhpcywgcm9vdCwgeHJlZiwgJ05hbWVzJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFtZVRyZWU7XG4gICAgICAgICAgICAgICAgICAgIH0oTmFtZU9yTnVtYmVyVHJlZSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgTnVtYmVyVHJlZSA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9OYW1lT3JOdW1iZXJUcmVlMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKE51bWJlclRyZWUsIF9OYW1lT3JOdW1iZXJUcmVlMik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE51bWJlclRyZWUocm9vdCwgeHJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBOdW1iZXJUcmVlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoTnVtYmVyVHJlZSkuY2FsbCh0aGlzLCByb290LCB4cmVmLCAnTnVtcycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlclRyZWU7XG4gICAgICAgICAgICAgICAgICAgIH0oTmFtZU9yTnVtYmVyVHJlZSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgRmlsZVNwZWMgPSBmdW5jdGlvbiBGaWxlU3BlY0Nsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEZpbGVTcGVjKHJvb3QsIHhyZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcm9vdCB8fCAhKDAsIF9wcmltaXRpdmVzLmlzRGljdCkocm9vdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvb3QgPSByb290O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm9vdC5oYXMoJ0ZTJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZzID0gcm9vdC5nZXQoJ0ZTJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSByb290LmhhcygnRGVzYycpID8gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShyb290LmdldCgnRGVzYycpKSA6ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm9vdC5oYXMoJ1JGJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1JlbGF0ZWQgZmlsZSBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRBdmFpbGFibGUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJvb3QuaGFzKCdFRicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50QXZhaWxhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdOb24tZW1iZWRkZWQgZmlsZSBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcGlja1BsYXRmb3JtSXRlbShkaWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGljdC5oYXMoJ1VGJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGljdC5nZXQoJ1VGJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRpY3QuaGFzKCdGJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGljdC5nZXQoJ0YnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGljdC5oYXMoJ1VuaXgnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkaWN0LmdldCgnVW5peCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaWN0LmhhcygnTWFjJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGljdC5nZXQoJ01hYycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaWN0LmhhcygnRE9TJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGljdC5nZXQoJ0RPUycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEZpbGVTcGVjLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBmaWxlbmFtZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2ZpbGVuYW1lICYmIHRoaXMucm9vdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZW5hbWUgPSBwaWNrUGxhdGZvcm1JdGVtKHRoaXMucm9vdCkgfHwgJ3VubmFtZWQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWxlbmFtZSA9ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoZmlsZW5hbWUpLnJlcGxhY2UoL1xcXFxcXFxcL2csICdcXFxcJykucmVwbGFjZSgvXFxcXFxcLy9nLCAnLycpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsZW5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgY29udGVudCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29udGVudEF2YWlsYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29udGVudFJlZiAmJiB0aGlzLnJvb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50UmVmID0gcGlja1BsYXRmb3JtSXRlbSh0aGlzLnJvb3QuZ2V0KCdFRicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZW50UmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4cmVmID0gdGhpcy54cmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZU9iaiA9IHhyZWYuZmV0Y2hJZlJlZih0aGlzLmNvbnRlbnRSZWYpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlT2JqICYmICgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoZmlsZU9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBmaWxlT2JqLmdldEJ5dGVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0VtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbiBwb2ludHMgdG8gbm9uLWV4aXN0aW5nL2ludmFsaWQgJyArICdjb250ZW50Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0VtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGEgY29udGVudCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IHNlcmlhbGl6YWJsZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZTogdGhpcy5maWxlbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogdGhpcy5jb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmlsZVNwZWM7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5GaWxlU3BlYyA9IEZpbGVTcGVjO1xuXG4gICAgICAgICAgICAgICAgdmFyIE9iamVjdExvYWRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbWF5SGF2ZUNoaWxkcmVuKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF9wcmltaXRpdmVzLmlzUmVmKSh2YWx1ZSkgfHwgKDAsIF9wcmltaXRpdmVzLmlzRGljdCkodmFsdWUpIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpIHx8ICgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYWRkQ2hpbGRyZW4obm9kZSwgbm9kZXNUb1Zpc2l0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkobm9kZSkgfHwgKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gKDAsIF9wcmltaXRpdmVzLmlzRGljdCkobm9kZSkgPyBub2RlIDogbm9kZS5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0S2V5cyA9IGRpY3QuZ2V0S2V5cygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZGljdEtleXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmF3VmFsdWUgPSBkaWN0LmdldFJhdyhkaWN0S2V5c1tpXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heUhhdmVDaGlsZHJlbihyYXdWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzVG9WaXNpdC5wdXNoKHJhd1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pMyA9IDAsIF9paTIgPSBub2RlLmxlbmd0aDsgX2kzIDwgX2lpMjsgX2kzKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gbm9kZVtfaTNdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXlIYXZlQ2hpbGRyZW4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlc1RvVmlzaXQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBPYmplY3RMb2FkZXIoZGljdCwga2V5cywgeHJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWN0ID0gZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMua2V5cyA9IGtleXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnhyZWYgPSB4cmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZTZXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXBhYmlsaXR5ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdExvYWRlci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkOiBmdW5jdGlvbiBsb2FkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHRoaXMueHJlZi5zdHJlYW0gaW5zdGFuY2VvZiBfY2h1bmtlZF9zdHJlYW0uQ2h1bmtlZFN0cmVhbSkgfHwgdGhpcy54cmVmLnN0cmVhbS5nZXRNaXNzaW5nQ2h1bmtzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IHRoaXMua2V5cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdCA9IHRoaXMuZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZlNldCA9IG5ldyBfcHJpbWl0aXZlcy5SZWZTZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZXNUb1Zpc2l0ID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBrZXlzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhd1ZhbHVlID0gZGljdC5nZXRSYXcoa2V5c1tpXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhd1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzVG9WaXNpdC5wdXNoKHJhd1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dhbGsobm9kZXNUb1Zpc2l0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBfd2FsazogZnVuY3Rpb24gX3dhbGsobm9kZXNUb1Zpc2l0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZXNUb1JldmlzaXQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGVuZGluZ1JlcXVlc3RzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobm9kZXNUb1Zpc2l0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudE5vZGUgPSBub2Rlc1RvVmlzaXQucG9wKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikoY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWZTZXQuaGFzKGN1cnJlbnROb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmU2V0LnB1dChjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGUgPSB0aGlzLnhyZWYuZmV0Y2goY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShleCBpbnN0YW5jZW9mIF91dGlsLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlc1RvUmV2aXNpdC5wdXNoKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUmVxdWVzdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiBleC5iZWdpbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBleC5lbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZSAmJiBjdXJyZW50Tm9kZS5nZXRCYXNlU3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2VTdHJlYW1zID0gY3VycmVudE5vZGUuZ2V0QmFzZVN0cmVhbXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZE1pc3NpbmdEYXRhID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGJhc2VTdHJlYW1zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gYmFzZVN0cmVhbXNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLmdldE1pc3NpbmdDaHVua3MgJiYgc3RyZWFtLmdldE1pc3NpbmdDaHVua3MoKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRNaXNzaW5nRGF0YSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiBzdHJlYW0uc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IHN0cmVhbS5lbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmRNaXNzaW5nRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzVG9SZXZpc2l0LnB1c2goY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ2hpbGRyZW4oY3VycmVudE5vZGUsIG5vZGVzVG9WaXNpdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlbmRpbmdSZXF1ZXN0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy54cmVmLnN0cmVhbS5tYW5hZ2VyLnJlcXVlc3RSYW5nZXMocGVuZGluZ1JlcXVlc3RzKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pNCA9IDAsIF9paTMgPSBub2Rlc1RvUmV2aXNpdC5sZW5ndGg7IF9pNCA8IF9paTM7IF9pNCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1RvUmV2aXNpdFtfaTRdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyLnJlZlNldC5yZW1vdmUobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuX3dhbGsobm9kZXNUb1JldmlzaXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLmNhcGFiaWxpdHkucmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmU2V0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0TG9hZGVyO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuT2JqZWN0TG9hZGVyID0gT2JqZWN0TG9hZGVyO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNTUgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmlzRU9GID0gaXNFT0Y7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5pc0NtZCA9IGlzQ21kO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuaXNEaWN0ID0gaXNEaWN0O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuaXNOYW1lID0gaXNOYW1lO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuaXNSZWYgPSBpc1JlZjtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmlzUmVmc0VxdWFsID0gaXNSZWZzRXF1YWw7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5pc1N0cmVhbSA9IGlzU3RyZWFtO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUmVmU2V0Q2FjaGUgPSBleHBvcnRzLlJlZlNldCA9IGV4cG9ydHMuUmVmID0gZXhwb3J0cy5OYW1lID0gZXhwb3J0cy5EaWN0ID0gZXhwb3J0cy5DbWQgPSBleHBvcnRzLkVPRiA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgRU9GID0ge307XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5FT0YgPSBFT0Y7XG5cbiAgICAgICAgICAgICAgICB2YXIgTmFtZSA9IGZ1bmN0aW9uIE5hbWVDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBOYW1lKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBOYW1lLnByb3RvdHlwZSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZUNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICAgICAgICAgICAgICBOYW1lLmdldCA9IGZ1bmN0aW9uIE5hbWVfZ2V0KG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lVmFsdWUgPSBuYW1lQ2FjaGVbbmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmFtZVZhbHVlID8gbmFtZVZhbHVlIDogbmFtZUNhY2hlW25hbWVdID0gbmV3IE5hbWUobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWU7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5OYW1lID0gTmFtZTtcblxuICAgICAgICAgICAgICAgIHZhciBDbWQgPSBmdW5jdGlvbiBDbWRDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBDbWQoY21kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNtZCA9IGNtZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENtZC5wcm90b3R5cGUgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNtZENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICAgICAgICAgICAgICBDbWQuZ2V0ID0gZnVuY3Rpb24gQ21kX2dldChjbWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbWRWYWx1ZSA9IGNtZENhY2hlW2NtZF07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY21kVmFsdWUgPyBjbWRWYWx1ZSA6IGNtZENhY2hlW2NtZF0gPSBuZXcgQ21kKGNtZCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENtZDtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkNtZCA9IENtZDtcblxuICAgICAgICAgICAgICAgIHZhciBEaWN0ID0gZnVuY3Rpb24gRGljdENsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBub25TZXJpYWxpemFibGUgPSBmdW5jdGlvbiBub25TZXJpYWxpemFibGVDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vblNlcmlhbGl6YWJsZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBEaWN0KHhyZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnhyZWYgPSB4cmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vYmpJZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1cHByZXNzRW5jcnlwdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fX25vblNlcmlhbGl6YWJsZV9fID0gbm9uU2VyaWFsaXphYmxlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgRGljdC5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25YcmVmOiBmdW5jdGlvbiBEaWN0X2Fzc2lnblhyZWYobmV3WHJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueHJlZiA9IG5ld1hyZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBEaWN0X2dldChrZXkxLCBrZXkyLCBrZXkzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4cmVmID0gdGhpcy54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwcmVzc0VuY3J5cHRpb24gPSB0aGlzLnN1cHByZXNzRW5jcnlwdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHZhbHVlID0gdGhpcy5fbWFwW2tleTFdKSAhPT0gJ3VuZGVmaW5lZCcgfHwga2V5MSBpbiB0aGlzLl9tYXAgfHwgdHlwZW9mIGtleTIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4cmVmID8geHJlZi5mZXRjaElmUmVmKHZhbHVlLCBzdXBwcmVzc0VuY3J5cHRpb24pIDogdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodmFsdWUgPSB0aGlzLl9tYXBba2V5Ml0pICE9PSAndW5kZWZpbmVkJyB8fCBrZXkyIGluIHRoaXMuX21hcCB8fCB0eXBlb2Yga2V5MyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHhyZWYgPyB4cmVmLmZldGNoSWZSZWYodmFsdWUsIHN1cHByZXNzRW5jcnlwdGlvbikgOiB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX21hcFtrZXkzXSB8fCBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4cmVmID8geHJlZi5mZXRjaElmUmVmKHZhbHVlLCBzdXBwcmVzc0VuY3J5cHRpb24pIDogdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QXN5bmM6IGZ1bmN0aW9uIERpY3RfZ2V0QXN5bmMoa2V5MSwga2V5Miwga2V5Mykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IHRoaXMueHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcHJlc3NFbmNyeXB0aW9uID0gdGhpcy5zdXBwcmVzc0VuY3J5cHRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mICh2YWx1ZSA9IHRoaXMuX21hcFtrZXkxXSkgIT09ICd1bmRlZmluZWQnIHx8IGtleTEgaW4gdGhpcy5fbWFwIHx8IHR5cGVvZiBrZXkyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeHJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHhyZWYuZmV0Y2hJZlJlZkFzeW5jKHZhbHVlLCBzdXBwcmVzc0VuY3J5cHRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodmFsdWUgPSB0aGlzLl9tYXBba2V5Ml0pICE9PSAndW5kZWZpbmVkJyB8fCBrZXkyIGluIHRoaXMuX21hcCB8fCB0eXBlb2Yga2V5MyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhyZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4cmVmLmZldGNoSWZSZWZBc3luYyh2YWx1ZSwgc3VwcHJlc3NFbmNyeXB0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fbWFwW2tleTNdIHx8IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeHJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geHJlZi5mZXRjaElmUmVmQXN5bmModmFsdWUsIHN1cHByZXNzRW5jcnlwdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QXJyYXk6IGZ1bmN0aW9uIERpY3RfZ2V0QXJyYXkoa2V5MSwga2V5Miwga2V5Mykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0KGtleTEsIGtleTIsIGtleTMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4cmVmID0gdGhpcy54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwcmVzc0VuY3J5cHRpb24gPSB0aGlzLnN1cHByZXNzRW5jcnlwdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgIXhyZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHZhbHVlLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1JlZih2YWx1ZVtpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVbaV0gPSB4cmVmLmZldGNoKHZhbHVlW2ldLCBzdXBwcmVzc0VuY3J5cHRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRSYXc6IGZ1bmN0aW9uIERpY3RfZ2V0UmF3KGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXBba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRLZXlzOiBmdW5jdGlvbiBEaWN0X2dldEtleXMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX21hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiBEaWN0X3NldChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXM6IGZ1bmN0aW9uIERpY3RfaGFzKGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXkgaW4gdGhpcy5fbWFwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIERpY3RfZm9yRWFjaChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLl9tYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soa2V5LCB0aGlzLmdldChrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIERpY3QuZW1wdHkgPSBuZXcgRGljdChudWxsKTtcblxuICAgICAgICAgICAgICAgICAgICBEaWN0Lm1lcmdlID0gZnVuY3Rpb24gKHhyZWYsIGRpY3RBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lcmdlZERpY3QgPSBuZXcgRGljdCh4cmVmKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZGljdEFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGljdCA9IGRpY3RBcnJheVtpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNEaWN0KGRpY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleU5hbWUgaW4gZGljdC5fbWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXJnZWREaWN0Ll9tYXBba2V5TmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWREaWN0Ll9tYXBba2V5TmFtZV0gPSBkaWN0Ll9tYXBba2V5TmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVyZ2VkRGljdDtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRGljdDtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkRpY3QgPSBEaWN0O1xuXG4gICAgICAgICAgICAgICAgdmFyIFJlZiA9IGZ1bmN0aW9uIFJlZkNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlZihudW0sIGdlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5udW0gPSBudW07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbiA9IGdlbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFJlZi5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24gUmVmX3RvU3RyaW5nKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdlbiAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQodGhpcy5udW0sIFwiUlwiKS5jb25jYXQodGhpcy5nZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdCh0aGlzLm51bSwgXCJSXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVmO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuUmVmID0gUmVmO1xuXG4gICAgICAgICAgICAgICAgdmFyIFJlZlNldCA9IGZ1bmN0aW9uIFJlZlNldENsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlZlNldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGljdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBSZWZTZXQucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzOiBmdW5jdGlvbiBSZWZTZXRfaGFzKHJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWYudG9TdHJpbmcoKSBpbiB0aGlzLmRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0OiBmdW5jdGlvbiBSZWZTZXRfcHV0KHJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGljdFtyZWYudG9TdHJpbmcoKV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZTogZnVuY3Rpb24gUmVmU2V0X3JlbW92ZShyZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5kaWN0W3JlZi50b1N0cmluZygpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlZlNldDtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlJlZlNldCA9IFJlZlNldDtcblxuICAgICAgICAgICAgICAgIHZhciBSZWZTZXRDYWNoZSA9IGZ1bmN0aW9uIFJlZlNldENhY2hlQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVmU2V0Q2FjaGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpY3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgUmVmU2V0Q2FjaGUucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBSZWZTZXRDYWNoZV9nZXQocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGljdFtyZWYudG9TdHJpbmcoKV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzOiBmdW5jdGlvbiBSZWZTZXRDYWNoZV9oYXMocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZi50b1N0cmluZygpIGluIHRoaXMuZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXQ6IGZ1bmN0aW9uIFJlZlNldENhY2hlX3B1dChyZWYsIG9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGljdFtyZWYudG9TdHJpbmcoKV0gPSBvYmo7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0QWxpYXM6IGZ1bmN0aW9uIFJlZlNldENhY2hlX3B1dEFsaWFzKHJlZiwgYWxpYXNSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpY3RbcmVmLnRvU3RyaW5nKCldID0gdGhpcy5nZXQoYWxpYXNSZWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIFJlZlNldENhY2hlX2ZvckVhY2goZm4sIHRoaXNBcmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMuZGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbi5jYWxsKHRoaXNBcmcsIHRoaXMuZGljdFtpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyOiBmdW5jdGlvbiBSZWZTZXRDYWNoZV9jbGVhcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpY3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVmU2V0Q2FjaGU7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5SZWZTZXRDYWNoZSA9IFJlZlNldENhY2hlO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNFT0Yodikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdiA9PT0gRU9GO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzTmFtZSh2LCBuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2IGluc3RhbmNlb2YgTmFtZSAmJiAobmFtZSA9PT0gdW5kZWZpbmVkIHx8IHYubmFtZSA9PT0gbmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNDbWQodiwgY21kKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2IGluc3RhbmNlb2YgQ21kICYmIChjbWQgPT09IHVuZGVmaW5lZCB8fCB2LmNtZCA9PT0gY21kKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc0RpY3QodiwgdHlwZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdiBpbnN0YW5jZW9mIERpY3QgJiYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCBpc05hbWUodi5nZXQoJ1R5cGUnKSwgdHlwZSkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzUmVmKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYgaW5zdGFuY2VvZiBSZWY7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNSZWZzRXF1YWwodjEsIHYyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2MS5udW0gPT09IHYyLm51bSAmJiB2MS5nZW4gPT09IHYyLmdlbjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc1N0cmVhbSh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfdHlwZW9mKHYpID09PSAnb2JqZWN0JyAmJiB2ICE9PSBudWxsICYmIHYuZ2V0Qnl0ZXMgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE1NiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUGFyc2VyID0gZXhwb3J0cy5MaW5lYXJpemF0aW9uID0gZXhwb3J0cy5MZXhlciA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfc3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2KTtcblxuICAgICAgICAgICAgICAgIHZhciBfcHJpbWl0aXZlcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTU1KTtcblxuICAgICAgICAgICAgICAgIHZhciBfY2NpdHRfc3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9qYmlnMl9zdHJlYW0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2MCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2pwZWdfc3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNjMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9qcHhfc3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNjUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIE1BWF9MRU5HVEhfVE9fQ0FDSEUgPSAxMDAwO1xuICAgICAgICAgICAgICAgIHZhciBNQVhfQURMRVIzMl9MRU5HVEggPSA1NTUyO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY29tcHV0ZUFkbGVyMzIoYnl0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGVzTGVuZ3RoID0gYnl0ZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBiID0gMDtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzTGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEgKz0gYnl0ZXNbaV0gJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgYiArPSBhO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGIgJSA2NTUyMSA8PCAxNiB8IGEgJSA2NTUyMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgUGFyc2VyID0gZnVuY3Rpb24gUGFyc2VyQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUGFyc2VyKGxleGVyLCBhbGxvd1N0cmVhbXMsIHhyZWYsIHJlY292ZXJ5TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZXhlciA9IGxleGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxvd1N0cmVhbXMgPSBhbGxvd1N0cmVhbXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnhyZWYgPSB4cmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvdmVyeU1vZGUgPSByZWNvdmVyeU1vZGUgfHwgZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmltYWdlQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZpbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFBhcnNlci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWZpbGw6IGZ1bmN0aW9uIFBhcnNlcl9yZWZpbGwoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWYxID0gdGhpcy5sZXhlci5nZXRPYmooKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZjIgPSB0aGlzLmxleGVyLmdldE9iaigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0OiBmdW5jdGlvbiBQYXJzZXJfc2hpZnQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkodGhpcy5idWYyLCAnSUQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZjEgPSB0aGlzLmJ1ZjI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmMiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWYxID0gdGhpcy5idWYyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZjIgPSB0aGlzLmxleGVyLmdldE9iaigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnlTaGlmdDogZnVuY3Rpb24gUGFyc2VyX3RyeVNoaWZ0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIF91dGlsLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRPYmo6IGZ1bmN0aW9uIFBhcnNlcl9nZXRPYmooY2lwaGVyVHJhbnNmb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZjEgPSB0aGlzLmJ1ZjE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGlmdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZjEgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5DbWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChidWYxLmNtZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQkknOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VJbmxpbmVJbWFnZShjaXBoZXJUcmFuc2Zvcm0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdbJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICghKDAsIF9wcmltaXRpdmVzLmlzQ21kKSh0aGlzLmJ1ZjEsICddJykgJiYgISgwLCBfcHJpbWl0aXZlcy5pc0VPRikodGhpcy5idWYxKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheS5wdXNoKHRoaXMuZ2V0T2JqKGNpcGhlclRyYW5zZm9ybSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNFT0YpKHRoaXMuYnVmMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlY292ZXJ5TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdFbmQgb2YgZmlsZSBpbnNpZGUgYXJyYXknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc8PCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpY3QgPSBuZXcgX3ByaW1pdGl2ZXMuRGljdCh0aGlzLnhyZWYpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCEoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKHRoaXMuYnVmMSwgJz4+JykgJiYgISgwLCBfcHJpbWl0aXZlcy5pc0VPRikodGhpcy5idWYxKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHRoaXMuYnVmMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKSgnTWFsZm9ybWVkIGRpY3Rpb25hcnk6IGtleSBtdXN0IGJlIGEgbmFtZSBvYmplY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IHRoaXMuYnVmMS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNoaWZ0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0VPRikodGhpcy5idWYxKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0LnNldChrZXksIHRoaXMuZ2V0T2JqKGNpcGhlclRyYW5zZm9ybSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNFT0YpKHRoaXMuYnVmMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlY292ZXJ5TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdFbmQgb2YgZmlsZSBpbnNpZGUgZGljdGlvbmFyeScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkodGhpcy5idWYyLCAnc3RyZWFtJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxsb3dTdHJlYW1zID8gdGhpcy5tYWtlU3RyZWFtKGRpY3QsIGNpcGhlclRyYW5zZm9ybSkgOiBkaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGljdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnVmMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGJ1ZjEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW0gPSBidWYxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHRoaXMuYnVmMSkgJiYgKDAsIF9wcmltaXRpdmVzLmlzQ21kKSh0aGlzLmJ1ZjIsICdSJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWYgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmKG51bSwgdGhpcy5idWYxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKGJ1ZjEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHIgPSBidWYxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaXBoZXJUcmFuc2Zvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IGNpcGhlclRyYW5zZm9ybS5kZWNyeXB0U3RyaW5nKHN0cik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBidWYxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kOiBmdW5jdGlvbiBmaW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgRSA9IDB4NDUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkgPSAweDQ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUEFDRSA9IDB4MjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExGID0gMHhBLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUiA9IDB4RDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUwgPSAweDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0UG9zID0gc3RyZWFtLnBvcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVFSVBvcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0uZ2V0Qnl0ZSgpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IGNoID09PSBFID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gY2ggPT09IEkgPyAyIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHN0YXRlID09PSAyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSBTUEFDRSB8fCBjaCA9PT0gTEYgfHwgY2ggPT09IENSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVFSVBvcyA9IHN0cmVhbS5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbGxvd2luZ0J5dGVzID0gc3RyZWFtLnBlZWtCeXRlcyhuKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGZvbGxvd2luZ0J5dGVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBmb2xsb3dpbmdCeXRlc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IE5VTCAmJiBmb2xsb3dpbmdCeXRlc1tpICsgMV0gIT09IE5VTCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggIT09IExGICYmIGNoICE9PSBDUiAmJiAoY2ggPCBTUEFDRSB8fCBjaCA+IDB4N0YpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdmaW5kRGVmYXVsdElubGluZVN0cmVhbUVuZDogJyArICdSZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSB3aXRob3V0IGZpbmRpbmcgYSB2YWxpZCBFSSBtYXJrZXInKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF5YmVFSVBvcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCcuLi4gdHJ5aW5nIHRvIHJlY292ZXIgYnkgdXNpbmcgdGhlIGxhc3QgXCJFSVwiIG9jY3VycmVuY2UuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uc2tpcCgtKHN0cmVhbS5wb3MgLSBtYXliZUVJUG9zKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kT2Zmc2V0ID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uc2tpcCgtZW5kT2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHN0cmVhbS5wZWVrQnl0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwKGVuZE9mZnNldCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfdXRpbC5pc1NwYWNlKShjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kT2Zmc2V0LS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5wb3MgLSBlbmRPZmZzZXQgLSBzdGFydFBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5kRENURGVjb2RlSW5saW5lU3RyZWFtRW5kOiBmdW5jdGlvbiBQYXJzZXJfZmluZERDVERlY29kZUlubGluZVN0cmVhbUVuZChzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRQb3MgPSBzdHJlYW0ucG9zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEVPSSA9IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJMZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoYiA9IHN0cmVhbS5nZXRCeXRlKCkpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYiAhPT0gMHhGRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0cmVhbS5nZXRCeXRlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgwMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwKC0xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEQ5OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kRU9JID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEMwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEMxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEMyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEMzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEM1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEM2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEM3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEM5OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweENBOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweENCOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweENEOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweENFOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweENGOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEM0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweENDOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweERBOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweERCOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweERDOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEREOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweERFOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweERGOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEUwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEUxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEUyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEUzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEU0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEU1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEU2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEU3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEU4OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEU5OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEVBOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEVCOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEVDOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEVEOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEVFOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEVGOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZFOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlckxlbmd0aCA9IHN0cmVhbS5nZXRVaW50MTYoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXJrZXJMZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwKG1hcmtlckxlbmd0aCAtIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwKC0yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZEVPSSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBzdHJlYW0ucG9zIC0gc3RhcnRQb3M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYiA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdJbmxpbmUgRENURGVjb2RlIGltYWdlIHN0cmVhbTogJyArICdFT0kgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwKC1sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5kQVNDSUk4NURlY29kZUlubGluZVN0cmVhbUVuZDogZnVuY3Rpb24gUGFyc2VyX2ZpbmRBU0NJSTg1RGVjb2RlSW5saW5lU3RyZWFtRW5kKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBUSUxERSA9IDB4N0UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUID0gMHgzRTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRQb3MgPSBzdHJlYW0ucG9zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5nZXRCeXRlKCkpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IFRJTERFICYmIHN0cmVhbS5wZWVrQnl0ZSgpID09PSBHVCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnNraXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gc3RyZWFtLnBvcyAtIHN0YXJ0UG9zO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0lubGluZSBBU0NJSTg1RGVjb2RlIGltYWdlIHN0cmVhbTogJyArICdFT0QgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwKC1sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5kQVNDSUlIZXhEZWNvZGVJbmxpbmVTdHJlYW1FbmQ6IGZ1bmN0aW9uIFBhcnNlcl9maW5kQVNDSUlIZXhEZWNvZGVJbmxpbmVTdHJlYW1FbmQoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEdUID0gMHgzRTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRQb3MgPSBzdHJlYW0ucG9zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5nZXRCeXRlKCkpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IEdUKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHN0cmVhbS5wb3MgLSBzdGFydFBvcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdJbmxpbmUgQVNDSUlIZXhEZWNvZGUgaW1hZ2Ugc3RyZWFtOiAnICsgJ0VPRCBtYXJrZXIgbm90IGZvdW5kLCBzZWFyY2hpbmcgZm9yIC9FSS8gaW5zdGVhZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnNraXAoLWxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZVN0cmVhbVNraXBFSTogZnVuY3Rpb24gUGFyc2VyX2lubGluZVN0cmVhbVNraXBFSShzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgRSA9IDB4NDUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkgPSAweDQ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5nZXRCeXRlKCkpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gY2ggPT09IEUgPyAxIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBjaCA9PT0gSSA/IDIgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBtYWtlSW5saW5lSW1hZ2U6IGZ1bmN0aW9uIFBhcnNlcl9tYWtlSW5saW5lSW1hZ2UoY2lwaGVyVHJhbnNmb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxleGVyID0gdGhpcy5sZXhlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gbGV4ZXIuc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gbmV3IF9wcmltaXRpdmVzLkRpY3QodGhpcy54cmVmKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdExlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICghKDAsIF9wcmltaXRpdmVzLmlzQ21kKSh0aGlzLmJ1ZjEsICdJRCcpICYmICEoMCwgX3ByaW1pdGl2ZXMuaXNFT0YpKHRoaXMuYnVmMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0aGlzLmJ1ZjEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0RpY3Rpb25hcnkga2V5IG11c3QgYmUgYSBuYW1lIG9iamVjdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IHRoaXMuYnVmMS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNoaWZ0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0VPRikodGhpcy5idWYxKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0LnNldChrZXksIHRoaXMuZ2V0T2JqKGNpcGhlclRyYW5zZm9ybSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZXhlci5iZWdpbklubGluZUltYWdlUG9zICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0TGVuZ3RoID0gc3RyZWFtLnBvcyAtIGxleGVyLmJlZ2luSW5saW5lSW1hZ2VQb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbHRlciA9IGRpY3QuZ2V0KCdGaWx0ZXInLCAnRicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJOYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyTmFtZSA9IGZpbHRlci5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWx0ZXJaZXJvID0gdGhpcy54cmVmLmZldGNoSWZSZWYoZmlsdGVyWzBdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZmlsdGVyWmVybykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlck5hbWUgPSBmaWx0ZXJaZXJvLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRQb3MgPSBzdHJlYW0ucG9zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyTmFtZSA9PT0gJ0RDVERlY29kZScgfHwgZmlsdGVyTmFtZSA9PT0gJ0RDVCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gdGhpcy5maW5kRENURGVjb2RlSW5saW5lU3RyZWFtRW5kKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJOYW1lID09PSAnQVNDSUk4NURlY29kZScgfHwgZmlsdGVyTmFtZSA9PT0gJ0E4NScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gdGhpcy5maW5kQVNDSUk4NURlY29kZUlubGluZVN0cmVhbUVuZChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyTmFtZSA9PT0gJ0FTQ0lJSGV4RGVjb2RlJyB8fCBmaWx0ZXJOYW1lID09PSAnQUh4Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSB0aGlzLmZpbmRBU0NJSUhleERlY29kZUlubGluZVN0cmVhbUVuZChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2VTdHJlYW0gPSBzdHJlYW0ubWFrZVN1YlN0cmVhbShzdGFydFBvcywgbGVuZ3RoLCBkaWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FjaGVLZXk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuZ3RoIDwgTUFYX0xFTkdUSF9UT19DQUNIRSAmJiBkaWN0TGVuZ3RoIDwgTUFYX0FETEVSMzJfTEVOR1RIKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWFnZUJ5dGVzID0gaW1hZ2VTdHJlYW0uZ2V0Qnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VTdHJlYW0ucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluaXRpYWxTdHJlYW1Qb3MgPSBzdHJlYW0ucG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucG9zID0gbGV4ZXIuYmVnaW5JbmxpbmVJbWFnZVBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpY3RCeXRlcyA9IHN0cmVhbS5nZXRCeXRlcyhkaWN0TGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnBvcyA9IGluaXRpYWxTdHJlYW1Qb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlS2V5ID0gY29tcHV0ZUFkbGVyMzIoaW1hZ2VCeXRlcykgKyAnXycgKyBjb21wdXRlQWRsZXIzMihkaWN0Qnl0ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FjaGVFbnRyeSA9IHRoaXMuaW1hZ2VDYWNoZVtjYWNoZUtleV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlRW50cnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWYyID0gX3ByaW1pdGl2ZXMuQ21kLmdldCgnRUknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlRW50cnkucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZUVudHJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNpcGhlclRyYW5zZm9ybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVN0cmVhbSA9IGNpcGhlclRyYW5zZm9ybS5jcmVhdGVTdHJlYW0oaW1hZ2VTdHJlYW0sIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VTdHJlYW0gPSB0aGlzLmZpbHRlcihpbWFnZVN0cmVhbSwgZGljdCwgbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVN0cmVhbS5kaWN0ID0gZGljdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZUtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlU3RyZWFtLmNhY2hlS2V5ID0gJ2lubGluZV8nICsgbGVuZ3RoICsgJ18nICsgY2FjaGVLZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VDYWNoZVtjYWNoZUtleV0gPSBpbWFnZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZjIgPSBfcHJpbWl0aXZlcy5DbWQuZ2V0KCdFSScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1hZ2VTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgX2ZpbmRTdHJlYW1MZW5ndGg6IGZ1bmN0aW9uIF9maW5kU3RyZWFtTGVuZ3RoKHN0YXJ0UG9zLCBzaWduYXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdGhpcy5sZXhlci5zdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnBvcyA9IHN0YXJ0UG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBTQ0FOX0JMT0NLX0xFTkdUSCA9IDIwNDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpZ25hdHVyZUxlbmd0aCA9IHNpZ25hdHVyZS5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc3RyZWFtLnBvcyA8IHN0cmVhbS5lbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYW5CeXRlcyA9IHN0cmVhbS5wZWVrQnl0ZXMoU0NBTl9CTE9DS19MRU5HVEgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2Nhbkxlbmd0aCA9IHNjYW5CeXRlcy5sZW5ndGggLSBzaWduYXR1cmVMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjYW5MZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocG9zIDwgc2Nhbkxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGogPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaiA8IHNpZ25hdHVyZUxlbmd0aCAmJiBzY2FuQnl0ZXNbcG9zICsgal0gPT09IHNpZ25hdHVyZVtqXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPj0gc2lnbmF0dXJlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnBvcyArPSBwb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5wb3MgLSBzdGFydFBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucG9zICs9IHNjYW5MZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VTdHJlYW06IGZ1bmN0aW9uIFBhcnNlcl9tYWtlU3RyZWFtKGRpY3QsIGNpcGhlclRyYW5zZm9ybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXhlciA9IHRoaXMubGV4ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGxleGVyLnN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXhlci5za2lwVG9OZXh0TGluZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydFBvcyA9IHN0cmVhbS5wb3MgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBkaWN0LmdldCgnTGVuZ3RoJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ0JhZCAnICsgbGVuZ3RoICsgJyBhdHRyaWJ1dGUgaW4gc3RyZWFtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnBvcyA9IHN0YXJ0UG9zICsgbGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxleGVyLm5leHRDaGFyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50cnlTaGlmdCgpICYmICgwLCBfcHJpbWl0aXZlcy5pc0NtZCkodGhpcy5idWYyLCAnZW5kc3RyZWFtJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBFTkRTVFJFQU1fU0lHTkFUVVJFID0gbmV3IFVpbnQ4QXJyYXkoWzB4NjUsIDB4NkUsIDB4NjQsIDB4NzMsIDB4NzQsIDB4NzIsIDB4NjUsIDB4NjEsIDB4NkRdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWN0dWFsTGVuZ3RoID0gdGhpcy5fZmluZFN0cmVhbUxlbmd0aChzdGFydFBvcywgRU5EU1RSRUFNX1NJR05BVFVSRSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdHVhbExlbmd0aCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBNQVhfVFJVTkNBVElPTiA9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IE1BWF9UUlVOQ0FUSU9OOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gRU5EU1RSRUFNX1NJR05BVFVSRS5sZW5ndGggLSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBUUlVOQ0FURURfU0lHTkFUVVJFID0gRU5EU1RSRUFNX1NJR05BVFVSRS5zbGljZSgwLCBlbmQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heWJlTGVuZ3RoID0gdGhpcy5fZmluZFN0cmVhbUxlbmd0aChzdGFydFBvcywgVFJVTkNBVEVEX1NJR05BVFVSRSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF5YmVMZW5ndGggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFzdEJ5dGUgPSBzdHJlYW0ucGVla0J5dGVzKGVuZCArIDEpW2VuZF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3V0aWwuaXNTcGFjZSkobGFzdEJ5dGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIkZvdW5kIFxcXCJcIi5jb25jYXQoKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKFRSVU5DQVRFRF9TSUdOQVRVUkUpLCBcIlxcXCIgd2hlbiBcIikgKyAnc2VhcmNoaW5nIGZvciBlbmRzdHJlYW0gY29tbWFuZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsTGVuZ3RoID0gbWF5YmVMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdHVhbExlbmd0aCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ01pc3NpbmcgZW5kc3RyZWFtIGNvbW1hbmQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBhY3R1YWxMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxleGVyLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBzdHJlYW0ubWFrZVN1YlN0cmVhbShzdGFydFBvcywgbGVuZ3RoLCBkaWN0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaXBoZXJUcmFuc2Zvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gY2lwaGVyVHJhbnNmb3JtLmNyZWF0ZVN0cmVhbShzdHJlYW0sIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gdGhpcy5maWx0ZXIoc3RyZWFtLCBkaWN0LCBsZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5kaWN0ID0gZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24gUGFyc2VyX2ZpbHRlcihzdHJlYW0sIGRpY3QsIGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBkaWN0LmdldCgnRmlsdGVyJywgJ0YnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyYW1zID0gZGljdC5nZXQoJ0RlY29kZVBhcm1zJywgJ0RQJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJy9EZWNvZGVQYXJtcyBzaG91bGQgbm90IGNvbnRhaW4gYW4gQXJyYXksICcgKyAnd2hlbiAvRmlsdGVyIGNvbnRhaW5zIGEgTmFtZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VGaWx0ZXIoc3RyZWFtLCBmaWx0ZXIubmFtZSwgbGVuZ3RoLCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXliZUxlbmd0aCA9IGxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbHRlckFycmF5ID0gZmlsdGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyYW1zQXJyYXkgPSBwYXJhbXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZmlsdGVyQXJyYXkubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gdGhpcy54cmVmLmZldGNoSWZSZWYoZmlsdGVyQXJyYXlbaV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0JhZCBmaWx0ZXIgbmFtZTogJyArIGZpbHRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmFtc0FycmF5KSAmJiBpIGluIHBhcmFtc0FycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zID0gdGhpcy54cmVmLmZldGNoSWZSZWYocGFyYW1zQXJyYXlbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSB0aGlzLm1ha2VGaWx0ZXIoc3RyZWFtLCBmaWx0ZXIubmFtZSwgbWF5YmVMZW5ndGgsIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXliZUxlbmd0aCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VGaWx0ZXI6IGZ1bmN0aW9uIFBhcnNlcl9tYWtlRmlsdGVyKHN0cmVhbSwgbmFtZSwgbWF5YmVMZW5ndGgsIHBhcmFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXliZUxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0VtcHR5IFwiJyArIG5hbWUgKyAnXCIgc3RyZWFtLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9zdHJlYW0uTnVsbFN0cmVhbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4cmVmU3RyZWFtU3RhdHMgPSB0aGlzLnhyZWYuc3RhdHMuc3RyZWFtVHlwZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdGbGF0ZURlY29kZScgfHwgbmFtZSA9PT0gJ0ZsJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZlN0cmVhbVN0YXRzW191dGlsLlN0cmVhbVR5cGUuRkxBVEVdID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX3N0cmVhbS5QcmVkaWN0b3JTdHJlYW0obmV3IF9zdHJlYW0uRmxhdGVTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCksIG1heWJlTGVuZ3RoLCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9zdHJlYW0uRmxhdGVTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ0xaV0RlY29kZScgfHwgbmFtZSA9PT0gJ0xaVycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWZTdHJlYW1TdGF0c1tfdXRpbC5TdHJlYW1UeXBlLkxaV10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVhcmx5Q2hhbmdlID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMuaGFzKCdFYXJseUNoYW5nZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhcmx5Q2hhbmdlID0gcGFyYW1zLmdldCgnRWFybHlDaGFuZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9zdHJlYW0uUHJlZGljdG9yU3RyZWFtKG5ldyBfc3RyZWFtLkxaV1N0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoLCBlYXJseUNoYW5nZSksIG1heWJlTGVuZ3RoLCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9zdHJlYW0uTFpXU3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgsIGVhcmx5Q2hhbmdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnRENURGVjb2RlJyB8fCBuYW1lID09PSAnRENUJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZlN0cmVhbVN0YXRzW191dGlsLlN0cmVhbVR5cGUuRENUXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9qcGVnX3N0cmVhbS5KcGVnU3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgsIHN0cmVhbS5kaWN0LCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdKUFhEZWNvZGUnIHx8IG5hbWUgPT09ICdKUFgnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmU3RyZWFtU3RhdHNbX3V0aWwuU3RyZWFtVHlwZS5KUFhdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX2pweF9zdHJlYW0uSnB4U3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgsIHN0cmVhbS5kaWN0LCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdBU0NJSTg1RGVjb2RlJyB8fCBuYW1lID09PSAnQTg1Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZlN0cmVhbVN0YXRzW191dGlsLlN0cmVhbVR5cGUuQTg1XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9zdHJlYW0uQXNjaWk4NVN0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnQVNDSUlIZXhEZWNvZGUnIHx8IG5hbWUgPT09ICdBSHgnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmU3RyZWFtU3RhdHNbX3V0aWwuU3RyZWFtVHlwZS5BSFhdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX3N0cmVhbS5Bc2NpaUhleFN0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnQ0NJVFRGYXhEZWNvZGUnIHx8IG5hbWUgPT09ICdDQ0YnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmU3RyZWFtU3RhdHNbX3V0aWwuU3RyZWFtVHlwZS5DQ0ZdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX2NjaXR0X3N0cmVhbS5DQ0lUVEZheFN0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoLCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdSdW5MZW5ndGhEZWNvZGUnIHx8IG5hbWUgPT09ICdSTCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWZTdHJlYW1TdGF0c1tfdXRpbC5TdHJlYW1UeXBlLlJMXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9zdHJlYW0uUnVuTGVuZ3RoU3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdKQklHMkRlY29kZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWZTdHJlYW1TdGF0c1tfdXRpbC5TdHJlYW1UeXBlLkpCSUddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX2piaWcyX3N0cmVhbS5KYmlnMlN0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoLCBzdHJlYW0uZGljdCwgcGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnZmlsdGVyIFwiJyArIG5hbWUgKyAnXCIgbm90IHN1cHBvcnRlZCB5ZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBfdXRpbC5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0ludmFsaWQgc3RyZWFtOiBcXFwiJyArIGV4ICsgJ1xcXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfc3RyZWFtLk51bGxTdHJlYW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZXI7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QYXJzZXIgPSBQYXJzZXI7XG5cbiAgICAgICAgICAgICAgICB2YXIgTGV4ZXIgPSBmdW5jdGlvbiBMZXhlckNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIExleGVyKHN0cmVhbSwga25vd25Db21tYW5kcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ckJ1ZiA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5rbm93bkNvbW1hbmRzID0ga25vd25Db21tYW5kcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW5JbmxpbmVJbWFnZVBvcyA9IC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHNwZWNpYWxDaGFycyA9IFsxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAwLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAyLCAwLCAwLCAyLCAyLCAwLCAwLCAwLCAwLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB0b0hleERpZ2l0KGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoICYgMHgwRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID49IDB4NDEgJiYgY2ggPD0gMHg0NiB8fCBjaCA+PSAweDYxICYmIGNoIDw9IDB4NjYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNoICYgMHgwRikgKyA5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBMZXhlci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0Q2hhcjogZnVuY3Rpb24gTGV4ZXJfbmV4dENoYXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudENoYXIgPSB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGVla0NoYXI6IGZ1bmN0aW9uIExleGVyX3BlZWtDaGFyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVhbS5wZWVrQnl0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldE51bWJlcjogZnVuY3Rpb24gTGV4ZXJfZ2V0TnVtYmVyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuY3VycmVudENoYXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVOb3RhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaXZpZGVCeSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpZ24gPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDJEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24gPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDJEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MkIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbiA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgwQSB8fCBjaCA9PT0gMHgwRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoY2ggPT09IDB4MEEgfHwgY2ggPT09IDB4MEQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgyRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZpZGVCeSA9IDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPCAweDMwIHx8IGNoID4gMHgzOSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGl2aWRlQnkgPT09IDEwICYmIHNpZ24gPT09IDAgJiYgKCgwLCBfdXRpbC5pc1NwYWNlKShjaCkgfHwgY2ggPT09IC0xKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdMZXhlci5nZXROdW1iZXIgLSB0cmVhdGluZyBhIHNpbmdsZSBkZWNpbWFsIHBvaW50IGFzIHplcm8uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgbnVtYmVyOiBcIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShjaCksIFwiIChjaGFyQ29kZSBcIikuY29uY2F0KGNoLCBcIilcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24gPSBzaWduIHx8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2VWYWx1ZSA9IGNoIC0gMHgzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG93ZXJWYWx1ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvd2VyVmFsdWVTaWduID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY2ggPSB0aGlzLm5leHRDaGFyKCkpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDB4MzAgPD0gY2ggJiYgY2ggPD0gMHgzOSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnREaWdpdCA9IGNoIC0gMHgzMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVOb3RhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvd2VyVmFsdWUgPSBwb3dlclZhbHVlICogMTAgKyBjdXJyZW50RGlnaXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXZpZGVCeSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZpZGVCeSAqPSAxMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlVmFsdWUgPSBiYXNlVmFsdWUgKiAxMCArIGN1cnJlbnREaWdpdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpdmlkZUJ5ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2aWRlQnkgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdCYWRseSBmb3JtYXR0ZWQgbnVtYmVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4NDUgfHwgY2ggPT09IDB4NjUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5wZWVrQ2hhcigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4MkIgfHwgY2ggPT09IDB4MkQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3dlclZhbHVlU2lnbiA9IGNoID09PSAweDJEID8gLTEgOiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPCAweDMwIHx8IGNoID4gMHgzOSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlTm90YXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGl2aWRlQnkgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVZhbHVlIC89IGRpdmlkZUJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlTm90YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVZhbHVlICo9IE1hdGgucG93KDEwLCBwb3dlclZhbHVlU2lnbiAqIHBvd2VyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaWduICogYmFzZVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFN0cmluZzogZnVuY3Rpb24gTGV4ZXJfZ2V0U3RyaW5nKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1QYXJlbiA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyQnVmID0gdGhpcy5zdHJCdWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJCdWZmZXJlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2ggfCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0xOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnVW50ZXJtaW5hdGVkIHN0cmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4Mjg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytudW1QYXJlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJCdWYucHVzaCgnKCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4Mjk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC0tbnVtUGFyZW4gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJCdWYucHVzaCgnKScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4NUM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1VudGVybWluYXRlZCBzdHJpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDZFOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goJ1xcbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDcyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goJ1xccicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDc0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goJ1xcdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDYyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goJ1xcYicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDY2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goJ1xcZicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDVDOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4Mjg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgyOTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgzMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDMxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MzI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgzMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDM0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MzU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgzNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDM3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHggPSBjaCAmIDB4MEY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJCdWZmZXJlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA+PSAweDMwICYmIGNoIDw9IDB4MzcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gKHggPDwgMykgKyAoY2ggJiAweDBGKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA+PSAweDMwICYmIGNoIDw9IDB4MzcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckJ1ZmZlcmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSAoeCA8PCAzKSArIChjaCAmIDB4MEYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MEQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wZWVrQ2hhcigpID09PSAweDBBKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MEE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGFyQnVmZmVyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ckJ1Zi5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXROYW1lOiBmdW5jdGlvbiBMZXhlcl9nZXROYW1lKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaCwgcHJldmlvdXNDaDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyQnVmID0gdGhpcy5zdHJCdWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLmxlbmd0aCA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGNoID0gdGhpcy5uZXh0Q2hhcigpKSA+PSAwICYmICFzcGVjaWFsQ2hhcnNbY2hdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgyMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcGVjaWFsQ2hhcnNbY2hdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdMZXhlcl9nZXROYW1lOiAnICsgJ05VTUJFUiBTSUdOICgjKSBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSBoZXhhZGVjaW1hbCBudW1iZXIuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goJyMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHggPSB0b0hleERpZ2l0KGNoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNDaCA9IGNoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4MiA9IHRvSGV4RGlnaXQoY2gpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgyID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0xleGVyX2dldE5hbWU6IElsbGVnYWwgZGlnaXQgKCcgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSArICcpIGluIGhleGFkZWNpbWFsIG51bWJlci4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goJyMnLCBTdHJpbmcuZnJvbUNoYXJDb2RlKHByZXZpb3VzQ2gpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BlY2lhbENoYXJzW2NoXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoeCA8PCA0IHwgeDIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goJyMnLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyQnVmLmxlbmd0aCA+IDEyNykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ25hbWUgdG9rZW4gaXMgbG9uZ2VyIHRoYW4gYWxsb3dlZCBieSB0aGUgc3BlYzogJyArIHN0ckJ1Zi5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5OYW1lLmdldChzdHJCdWYuam9pbignJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldEhleFN0cmluZzogZnVuY3Rpb24gTGV4ZXJfZ2V0SGV4U3RyaW5nKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJCdWYgPSB0aGlzLnN0ckJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJCdWYubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLmN1cnJlbnRDaGFyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0ZpcnN0SGV4ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3REaWdpdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2Vjb25kRGlnaXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1VudGVybWluYXRlZCBoZXggc3RyaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgzRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3BlY2lhbENoYXJzW2NoXSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0ZpcnN0SGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3REaWdpdCA9IHRvSGV4RGlnaXQoY2gpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0RGlnaXQgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnSWdub3JpbmcgaW52YWxpZCBjaGFyYWN0ZXIgXCInICsgY2ggKyAnXCIgaW4gaGV4IHN0cmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmREaWdpdCA9IHRvSGV4RGlnaXQoY2gpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlY29uZERpZ2l0ID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0lnbm9yaW5nIGludmFsaWQgY2hhcmFjdGVyIFwiJyArIGNoICsgJ1wiIGluIGhleCBzdHJpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZmlyc3REaWdpdCA8PCA0IHwgc2Vjb25kRGlnaXQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGaXJzdEhleCA9ICFpc0ZpcnN0SGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyQnVmLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldE9iajogZnVuY3Rpb24gTGV4ZXJfZ2V0T2JqKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5jdXJyZW50Q2hhcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5FT0Y7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDBBIHx8IGNoID09PSAweDBEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDI1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcGVjaWFsQ2hhcnNbY2hdICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2ggfCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgzMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDMxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MzI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgzMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDM0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MzU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgzNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDM3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4Mzg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgzOTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDJCOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MkQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgyRTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE51bWJlcigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgyODpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgyRjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE5hbWUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4NUI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuQ21kLmdldCgnWycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHg1RDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5DbWQuZ2V0KCddJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDNDOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgzQykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuQ21kLmdldCgnPDwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SGV4U3RyaW5nKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDNFOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgzRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuQ21kLmdldCgnPj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9wcmltaXRpdmVzLkNtZC5nZXQoJz4nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4N0I6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuQ21kLmdldCgneycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHg3RDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5DbWQuZ2V0KCd9Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDI5OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSWxsZWdhbCBjaGFyYWN0ZXI6IFwiLmNvbmNhdChjaCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga25vd25Db21tYW5kcyA9IHRoaXMua25vd25Db21tYW5kcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga25vd25Db21tYW5kRm91bmQgPSBrbm93bkNvbW1hbmRzICYmIGtub3duQ29tbWFuZHNbc3RyXSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChjaCA9IHRoaXMubmV4dENoYXIoKSkgPj0gMCAmJiAhc3BlY2lhbENoYXJzW2NoXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zc2libGVDb21tYW5kID0gc3RyICsgU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtub3duQ29tbWFuZEZvdW5kICYmIGtub3duQ29tbWFuZHNbcG9zc2libGVDb21tYW5kXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHIubGVuZ3RoID09PSAxMjgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkNvbW1hbmQgdG9rZW4gdG9vIGxvbmc6IFwiLmNvbmNhdChzdHIubGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBwb3NzaWJsZUNvbW1hbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtub3duQ29tbWFuZEZvdW5kID0ga25vd25Db21tYW5kcyAmJiBrbm93bkNvbW1hbmRzW3N0cl0gIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyID09PSAndHJ1ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ciA9PT0gJ2ZhbHNlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ciA9PT0gJ251bGwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHIgPT09ICdCSScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbklubGluZUltYWdlUG9zID0gdGhpcy5zdHJlYW0ucG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5DbWQuZ2V0KHN0cik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFRvTmV4dExpbmU6IGZ1bmN0aW9uIExleGVyX3NraXBUb05leHRMaW5lKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuY3VycmVudENoYXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2ggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4MEQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4MEEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDBBKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExleGVyO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuTGV4ZXIgPSBMZXhlcjtcbiAgICAgICAgICAgICAgICB2YXIgTGluZWFyaXphdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiBMaW5lYXJpemF0aW9uQ3JlYXRlKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0SW50KG5hbWUsIGFsbG93WmVyb1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IGxpbkRpY3QuZ2V0KG5hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIob2JqKSAmJiAoYWxsb3daZXJvVmFsdWUgPyBvYmogPj0gMCA6IG9iaiA+IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgXCInICsgbmFtZSArICdcIiBwYXJhbWV0ZXIgaW4gdGhlIGxpbmVhcml6YXRpb24gJyArICdkaWN0aW9uYXJ5IGlzIGludmFsaWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldEhpbnRzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoaW50cyA9IGxpbkRpY3QuZ2V0KCdIJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRzTGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaGludHMpICYmICgoaGludHNMZW5ndGggPSBoaW50cy5sZW5ndGgpID09PSAyIHx8IGhpbnRzTGVuZ3RoID09PSA0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgaGludHNMZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKE51bWJlci5pc0ludGVnZXIoaXRlbSA9IGhpbnRzW2luZGV4XSkgJiYgaXRlbSA+IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIaW50ICgnICsgaW5kZXggKyAnKSBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGludHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIaW50IGFycmF5IGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBQYXJzZXIobmV3IExleGVyKHN0cmVhbSksIGZhbHNlLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmoxID0gcGFyc2VyLmdldE9iaigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iajIgPSBwYXJzZXIuZ2V0T2JqKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqMyA9IHBhcnNlci5nZXRPYmooKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5EaWN0ID0gcGFyc2VyLmdldE9iaigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiwgbGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShOdW1iZXIuaXNJbnRlZ2VyKG9iajEpICYmIE51bWJlci5pc0ludGVnZXIob2JqMikgJiYgKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmozLCAnb2JqJykgJiYgKDAsIF9wcmltaXRpdmVzLmlzRGljdCkobGluRGljdCkgJiYgKDAsIF91dGlsLmlzTnVtKShvYmogPSBsaW5EaWN0LmdldCgnTGluZWFyaXplZCcpKSAmJiBvYmogPiAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgobGVuZ3RoID0gZ2V0SW50KCdMJykpICE9PSBzdHJlYW0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgXCJMXCIgcGFyYW1ldGVyIGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgJyArICdkb2VzIG5vdCBlcXVhbCB0aGUgc3RyZWFtIGxlbmd0aC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg6IGxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50czogZ2V0SGludHMoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3ROdW1iZXJGaXJzdDogZ2V0SW50KCdPJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kRmlyc3Q6IGdldEludCgnRScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVBhZ2VzOiBnZXRJbnQoJ04nKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluWFJlZkVudHJpZXNPZmZzZXQ6IGdldEludCgnVCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VGaXJzdDogbGluRGljdC5oYXMoJ1AnKSA/IGdldEludCgnUCcsIHRydWUpIDogMFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5MaW5lYXJpemF0aW9uID0gTGluZWFyaXphdGlvbjtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTU3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5MWldTdHJlYW0gPSBleHBvcnRzLlN0cmluZ1N0cmVhbSA9IGV4cG9ydHMuU3RyZWFtc1NlcXVlbmNlU3RyZWFtID0gZXhwb3J0cy5TdHJlYW0gPSBleHBvcnRzLlJ1bkxlbmd0aFN0cmVhbSA9IGV4cG9ydHMuUHJlZGljdG9yU3RyZWFtID0gZXhwb3J0cy5OdWxsU3RyZWFtID0gZXhwb3J0cy5GbGF0ZVN0cmVhbSA9IGV4cG9ydHMuRGVjb2RlU3RyZWFtID0gZXhwb3J0cy5EZWNyeXB0U3RyZWFtID0gZXhwb3J0cy5Bc2NpaUhleFN0cmVhbSA9IGV4cG9ydHMuQXNjaWk4NVN0cmVhbSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3ByaW1pdGl2ZXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1NSk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcikgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGl0ZXIpID09PSBcIltvYmplY3QgQXJndW1lbnRzXVwiKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gfVxuXG4gICAgICAgICAgICAgICAgdmFyIFN0cmVhbSA9IGZ1bmN0aW9uIFN0cmVhbUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFN0cmVhbShhcnJheUJ1ZmZlciwgc3RhcnQsIGxlbmd0aCwgZGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ieXRlcyA9IGFycmF5QnVmZmVyIGluc3RhbmNlb2YgVWludDhBcnJheSA/IGFycmF5QnVmZmVyIDogbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0IHx8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCA9IHN0YXJ0ICsgbGVuZ3RoIHx8IHRoaXMuYnl0ZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWN0ID0gZGljdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFN0cmVhbS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuZCAtIHRoaXMuc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgaXNFbXB0eSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGggPT09IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRCeXRlOiBmdW5jdGlvbiBTdHJlYW1fZ2V0Qnl0ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5lbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJ5dGVzW3RoaXMucG9zKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFVpbnQxNjogZnVuY3Rpb24gU3RyZWFtX2dldFVpbnQxNigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjAgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjEgPSB0aGlzLmdldEJ5dGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiMCA9PT0gLTEgfHwgYjEgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGIwIDw8IDgpICsgYjE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SW50MzI6IGZ1bmN0aW9uIFN0cmVhbV9nZXRJbnQzMigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjAgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjEgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjIgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjMgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGIwIDw8IDI0KSArIChiMSA8PCAxNikgKyAoYjIgPDwgOCkgKyBiMztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRCeXRlczogZnVuY3Rpb24gZ2V0Qnl0ZXMobGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcmNlQ2xhbXBlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGVzID0gdGhpcy5ieXRlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gdGhpcy5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ckVuZCA9IHRoaXMuZW5kO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9zdWJhcnJheSA9IGJ5dGVzLnN1YmFycmF5KHBvcywgc3RyRW5kKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9yY2VDbGFtcGVkID8gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KF9zdWJhcnJheSkgOiBfc3ViYXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IHBvcyArIGxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmQgPiBzdHJFbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gc3RyRW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zID0gZW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJhcnJheSA9IGJ5dGVzLnN1YmFycmF5KHBvcywgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9yY2VDbGFtcGVkID8gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHN1YmFycmF5KSA6IHN1YmFycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZWtCeXRlOiBmdW5jdGlvbiBTdHJlYW1fcGVla0J5dGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBlZWtlZEJ5dGUgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcy0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVrZWRCeXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZWtCeXRlczogZnVuY3Rpb24gcGVla0J5dGVzKGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JjZUNsYW1wZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBieXRlcyA9IHRoaXMuZ2V0Qnl0ZXMobGVuZ3RoLCBmb3JjZUNsYW1wZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zIC09IGJ5dGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnl0ZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcDogZnVuY3Rpb24gU3RyZWFtX3NraXAobikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcyArPSBuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0OiBmdW5jdGlvbiBTdHJlYW1fcmVzZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVTdGFydDogZnVuY3Rpb24gU3RyZWFtX21vdmVTdGFydCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFrZVN1YlN0cmVhbTogZnVuY3Rpb24gU3RyZWFtX21ha2VTdWJTdHJlYW0oc3RhcnQsIGxlbmd0aCwgZGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyZWFtKHRoaXMuYnl0ZXMuYnVmZmVyLCBzdGFydCwgbGVuZ3RoLCBkaWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmVhbTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlN0cmVhbSA9IFN0cmVhbTtcblxuICAgICAgICAgICAgICAgIHZhciBTdHJpbmdTdHJlYW0gPSBmdW5jdGlvbiBTdHJpbmdTdHJlYW1DbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBTdHJpbmdTdHJlYW0oc3RyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZXMgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoc3RyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmVhbS5jYWxsKHRoaXMsIGJ5dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUgPSBTdHJlYW0ucHJvdG90eXBlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nU3RyZWFtO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuU3RyaW5nU3RyZWFtID0gU3RyaW5nU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgdmFyIERlY29kZVN0cmVhbSA9IGZ1bmN0aW9uIERlY29kZVN0cmVhbUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbXB0eUJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDApO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIERlY29kZVN0cmVhbShtYXliZU1pbkJ1ZmZlckxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmF3TWluQnVmZmVyTGVuZ3RoID0gbWF5YmVNaW5CdWZmZXJMZW5ndGggfHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW9mID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IGVtcHR5QnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5taW5CdWZmZXJMZW5ndGggPSA1MTI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXliZU1pbkJ1ZmZlckxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLm1pbkJ1ZmZlckxlbmd0aCA8IG1heWJlTWluQnVmZmVyTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWluQnVmZmVyTGVuZ3RoICo9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgRGVjb2RlU3RyZWFtLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBpc0VtcHR5KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICghdGhpcy5lb2YgJiYgdGhpcy5idWZmZXJMZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkQmxvY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5idWZmZXJMZW5ndGggPT09IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnN1cmVCdWZmZXI6IGZ1bmN0aW9uIERlY29kZVN0cmVhbV9lbnN1cmVCdWZmZXIocmVxdWVzdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RlZCA8PSBidWZmZXIuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gdGhpcy5taW5CdWZmZXJMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc2l6ZSA8IHJlcXVlc3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplICo9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlcjIgPSBuZXcgVWludDhBcnJheShzaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIyLnNldChidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Qnl0ZTogZnVuY3Rpb24gRGVjb2RlU3RyZWFtX2dldEJ5dGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IHRoaXMucG9zO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuYnVmZmVyTGVuZ3RoIDw9IHBvcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lb2YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZEJsb2NrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMucG9zKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFVpbnQxNjogZnVuY3Rpb24gRGVjb2RlU3RyZWFtX2dldFVpbnQxNigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjAgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjEgPSB0aGlzLmdldEJ5dGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiMCA9PT0gLTEgfHwgYjEgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGIwIDw8IDgpICsgYjE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SW50MzI6IGZ1bmN0aW9uIERlY29kZVN0cmVhbV9nZXRJbnQzMigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjAgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjEgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjIgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjMgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGIwIDw8IDI0KSArIChiMSA8PCAxNikgKyAoYjIgPDwgOCkgKyBiMztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRCeXRlczogZnVuY3Rpb24gZ2V0Qnl0ZXMobGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcmNlQ2xhbXBlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gdGhpcy5wb3M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5zdXJlQnVmZmVyKHBvcyArIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IHBvcyArIGxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIXRoaXMuZW9mICYmIHRoaXMuYnVmZmVyTGVuZ3RoIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWRCbG9jaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZkVuZCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmQgPiBidWZFbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IGJ1ZkVuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICghdGhpcy5lb2YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZEJsb2NrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSB0aGlzLmJ1ZmZlckxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcyA9IGVuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ViYXJyYXkgPSB0aGlzLmJ1ZmZlci5zdWJhcnJheShwb3MsIGVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcmNlQ2xhbXBlZCAmJiAhKHN1YmFycmF5IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpID8gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHN1YmFycmF5KSA6IHN1YmFycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZWtCeXRlOiBmdW5jdGlvbiBEZWNvZGVTdHJlYW1fcGVla0J5dGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBlZWtlZEJ5dGUgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcy0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVrZWRCeXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZWtCeXRlczogZnVuY3Rpb24gcGVla0J5dGVzKGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JjZUNsYW1wZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBieXRlcyA9IHRoaXMuZ2V0Qnl0ZXMobGVuZ3RoLCBmb3JjZUNsYW1wZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zIC09IGJ5dGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnl0ZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFrZVN1YlN0cmVhbTogZnVuY3Rpb24gRGVjb2RlU3RyZWFtX21ha2VTdWJTdHJlYW0oc3RhcnQsIGxlbmd0aCwgZGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBzdGFydCArIGxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLmJ1ZmZlckxlbmd0aCA8PSBlbmQgJiYgIXRoaXMuZW9mKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZEJsb2NrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW0odGhpcy5idWZmZXIsIHN0YXJ0LCBsZW5ndGgsIGRpY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXA6IGZ1bmN0aW9uIERlY29kZVN0cmVhbV9za2lwKG4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3MgKz0gbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldDogZnVuY3Rpb24gRGVjb2RlU3RyZWFtX3Jlc2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRCYXNlU3RyZWFtczogZnVuY3Rpb24gRGVjb2RlU3RyZWFtX2dldEJhc2VTdHJlYW1zKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0ciAmJiB0aGlzLnN0ci5nZXRCYXNlU3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdHIuZ2V0QmFzZVN0cmVhbXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBEZWNvZGVTdHJlYW07XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5EZWNvZGVTdHJlYW0gPSBEZWNvZGVTdHJlYW07XG5cbiAgICAgICAgICAgICAgICB2YXIgU3RyZWFtc1NlcXVlbmNlU3RyZWFtID0gZnVuY3Rpb24gU3RyZWFtc1NlcXVlbmNlU3RyZWFtQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gU3RyZWFtc1NlcXVlbmNlU3RyZWFtKHN0cmVhbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtcyA9IHN0cmVhbXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF5YmVMZW5ndGggPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBzdHJlYW1zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gc3RyZWFtc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0gaW5zdGFuY2VvZiBEZWNvZGVTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVMZW5ndGggKz0gc3RyZWFtLl9yYXdNaW5CdWZmZXJMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVMZW5ndGggKz0gc3RyZWFtLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIERlY29kZVN0cmVhbS5jYWxsKHRoaXMsIG1heWJlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFN0cmVhbXNTZXF1ZW5jZVN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY29kZVN0cmVhbS5wcm90b3R5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgIFN0cmVhbXNTZXF1ZW5jZVN0cmVhbS5wcm90b3R5cGUucmVhZEJsb2NrID0gZnVuY3Rpb24gc3RyZWFtU2VxdWVuY2VTdHJlYW1SZWFkQmxvY2soKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtcyA9IHRoaXMuc3RyZWFtcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHN0cmVhbXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVuayA9IHN0cmVhbS5nZXRCeXRlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld0xlbmd0aCA9IGJ1ZmZlckxlbmd0aCArIGNodW5rLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcihuZXdMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnNldChjaHVuaywgYnVmZmVyTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gbmV3TGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIFN0cmVhbXNTZXF1ZW5jZVN0cmVhbS5wcm90b3R5cGUuZ2V0QmFzZVN0cmVhbXMgPSBmdW5jdGlvbiBTdHJlYW1zU2VxdWVuY2VTdHJlYW1fZ2V0QmFzZVN0cmVhbXMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZVN0cmVhbXMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5zdHJlYW1zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdGhpcy5zdHJlYW1zW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5nZXRCYXNlU3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlU3RyZWFtcy5wdXNoLmFwcGx5KGJhc2VTdHJlYW1zLCBfdG9Db25zdW1hYmxlQXJyYXkoc3RyZWFtLmdldEJhc2VTdHJlYW1zKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlU3RyZWFtcztcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyZWFtc1NlcXVlbmNlU3RyZWFtO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuU3RyZWFtc1NlcXVlbmNlU3RyZWFtID0gU3RyZWFtc1NlcXVlbmNlU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgdmFyIEZsYXRlU3RyZWFtID0gZnVuY3Rpb24gRmxhdGVTdHJlYW1DbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29kZUxlbkNvZGVNYXAgPSBuZXcgSW50MzJBcnJheShbMTYsIDE3LCAxOCwgMCwgOCwgNywgOSwgNiwgMTAsIDUsIDExLCA0LCAxMiwgMywgMTMsIDIsIDE0LCAxLCAxNV0pO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoRGVjb2RlID0gbmV3IEludDMyQXJyYXkoWzB4MDAwMDMsIDB4MDAwMDQsIDB4MDAwMDUsIDB4MDAwMDYsIDB4MDAwMDcsIDB4MDAwMDgsIDB4MDAwMDksIDB4MDAwMGEsIDB4MTAwMGIsIDB4MTAwMGQsIDB4MTAwMGYsIDB4MTAwMTEsIDB4MjAwMTMsIDB4MjAwMTcsIDB4MjAwMWIsIDB4MjAwMWYsIDB4MzAwMjMsIDB4MzAwMmIsIDB4MzAwMzMsIDB4MzAwM2IsIDB4NDAwNDMsIDB4NDAwNTMsIDB4NDAwNjMsIDB4NDAwNzMsIDB4NTAwODMsIDB4NTAwYTMsIDB4NTAwYzMsIDB4NTAwZTMsIDB4MDAxMDIsIDB4MDAxMDIsIDB4MDAxMDJdKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpc3REZWNvZGUgPSBuZXcgSW50MzJBcnJheShbMHgwMDAwMSwgMHgwMDAwMiwgMHgwMDAwMywgMHgwMDAwNCwgMHgxMDAwNSwgMHgxMDAwNywgMHgyMDAwOSwgMHgyMDAwZCwgMHgzMDAxMSwgMHgzMDAxOSwgMHg0MDAyMSwgMHg0MDAzMSwgMHg1MDA0MSwgMHg1MDA2MSwgMHg2MDA4MSwgMHg2MDBjMSwgMHg3MDEwMSwgMHg3MDE4MSwgMHg4MDIwMSwgMHg4MDMwMSwgMHg5MDQwMSwgMHg5MDYwMSwgMHhhMDgwMSwgMHhhMGMwMSwgMHhiMTAwMSwgMHhiMTgwMSwgMHhjMjAwMSwgMHhjMzAwMSwgMHhkNDAwMSwgMHhkNjAwMV0pO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZml4ZWRMaXRDb2RlVGFiID0gW25ldyBJbnQzMkFycmF5KFsweDcwMTAwLCAweDgwMDUwLCAweDgwMDEwLCAweDgwMTE4LCAweDcwMTEwLCAweDgwMDcwLCAweDgwMDMwLCAweDkwMGMwLCAweDcwMTA4LCAweDgwMDYwLCAweDgwMDIwLCAweDkwMGEwLCAweDgwMDAwLCAweDgwMDgwLCAweDgwMDQwLCAweDkwMGUwLCAweDcwMTA0LCAweDgwMDU4LCAweDgwMDE4LCAweDkwMDkwLCAweDcwMTE0LCAweDgwMDc4LCAweDgwMDM4LCAweDkwMGQwLCAweDcwMTBjLCAweDgwMDY4LCAweDgwMDI4LCAweDkwMGIwLCAweDgwMDA4LCAweDgwMDg4LCAweDgwMDQ4LCAweDkwMGYwLCAweDcwMTAyLCAweDgwMDU0LCAweDgwMDE0LCAweDgwMTFjLCAweDcwMTEyLCAweDgwMDc0LCAweDgwMDM0LCAweDkwMGM4LCAweDcwMTBhLCAweDgwMDY0LCAweDgwMDI0LCAweDkwMGE4LCAweDgwMDA0LCAweDgwMDg0LCAweDgwMDQ0LCAweDkwMGU4LCAweDcwMTA2LCAweDgwMDVjLCAweDgwMDFjLCAweDkwMDk4LCAweDcwMTE2LCAweDgwMDdjLCAweDgwMDNjLCAweDkwMGQ4LCAweDcwMTBlLCAweDgwMDZjLCAweDgwMDJjLCAweDkwMGI4LCAweDgwMDBjLCAweDgwMDhjLCAweDgwMDRjLCAweDkwMGY4LCAweDcwMTAxLCAweDgwMDUyLCAweDgwMDEyLCAweDgwMTFhLCAweDcwMTExLCAweDgwMDcyLCAweDgwMDMyLCAweDkwMGM0LCAweDcwMTA5LCAweDgwMDYyLCAweDgwMDIyLCAweDkwMGE0LCAweDgwMDAyLCAweDgwMDgyLCAweDgwMDQyLCAweDkwMGU0LCAweDcwMTA1LCAweDgwMDVhLCAweDgwMDFhLCAweDkwMDk0LCAweDcwMTE1LCAweDgwMDdhLCAweDgwMDNhLCAweDkwMGQ0LCAweDcwMTBkLCAweDgwMDZhLCAweDgwMDJhLCAweDkwMGI0LCAweDgwMDBhLCAweDgwMDhhLCAweDgwMDRhLCAweDkwMGY0LCAweDcwMTAzLCAweDgwMDU2LCAweDgwMDE2LCAweDgwMTFlLCAweDcwMTEzLCAweDgwMDc2LCAweDgwMDM2LCAweDkwMGNjLCAweDcwMTBiLCAweDgwMDY2LCAweDgwMDI2LCAweDkwMGFjLCAweDgwMDA2LCAweDgwMDg2LCAweDgwMDQ2LCAweDkwMGVjLCAweDcwMTA3LCAweDgwMDVlLCAweDgwMDFlLCAweDkwMDljLCAweDcwMTE3LCAweDgwMDdlLCAweDgwMDNlLCAweDkwMGRjLCAweDcwMTBmLCAweDgwMDZlLCAweDgwMDJlLCAweDkwMGJjLCAweDgwMDBlLCAweDgwMDhlLCAweDgwMDRlLCAweDkwMGZjLCAweDcwMTAwLCAweDgwMDUxLCAweDgwMDExLCAweDgwMTE5LCAweDcwMTEwLCAweDgwMDcxLCAweDgwMDMxLCAweDkwMGMyLCAweDcwMTA4LCAweDgwMDYxLCAweDgwMDIxLCAweDkwMGEyLCAweDgwMDAxLCAweDgwMDgxLCAweDgwMDQxLCAweDkwMGUyLCAweDcwMTA0LCAweDgwMDU5LCAweDgwMDE5LCAweDkwMDkyLCAweDcwMTE0LCAweDgwMDc5LCAweDgwMDM5LCAweDkwMGQyLCAweDcwMTBjLCAweDgwMDY5LCAweDgwMDI5LCAweDkwMGIyLCAweDgwMDA5LCAweDgwMDg5LCAweDgwMDQ5LCAweDkwMGYyLCAweDcwMTAyLCAweDgwMDU1LCAweDgwMDE1LCAweDgwMTFkLCAweDcwMTEyLCAweDgwMDc1LCAweDgwMDM1LCAweDkwMGNhLCAweDcwMTBhLCAweDgwMDY1LCAweDgwMDI1LCAweDkwMGFhLCAweDgwMDA1LCAweDgwMDg1LCAweDgwMDQ1LCAweDkwMGVhLCAweDcwMTA2LCAweDgwMDVkLCAweDgwMDFkLCAweDkwMDlhLCAweDcwMTE2LCAweDgwMDdkLCAweDgwMDNkLCAweDkwMGRhLCAweDcwMTBlLCAweDgwMDZkLCAweDgwMDJkLCAweDkwMGJhLCAweDgwMDBkLCAweDgwMDhkLCAweDgwMDRkLCAweDkwMGZhLCAweDcwMTAxLCAweDgwMDUzLCAweDgwMDEzLCAweDgwMTFiLCAweDcwMTExLCAweDgwMDczLCAweDgwMDMzLCAweDkwMGM2LCAweDcwMTA5LCAweDgwMDYzLCAweDgwMDIzLCAweDkwMGE2LCAweDgwMDAzLCAweDgwMDgzLCAweDgwMDQzLCAweDkwMGU2LCAweDcwMTA1LCAweDgwMDViLCAweDgwMDFiLCAweDkwMDk2LCAweDcwMTE1LCAweDgwMDdiLCAweDgwMDNiLCAweDkwMGQ2LCAweDcwMTBkLCAweDgwMDZiLCAweDgwMDJiLCAweDkwMGI2LCAweDgwMDBiLCAweDgwMDhiLCAweDgwMDRiLCAweDkwMGY2LCAweDcwMTAzLCAweDgwMDU3LCAweDgwMDE3LCAweDgwMTFmLCAweDcwMTEzLCAweDgwMDc3LCAweDgwMDM3LCAweDkwMGNlLCAweDcwMTBiLCAweDgwMDY3LCAweDgwMDI3LCAweDkwMGFlLCAweDgwMDA3LCAweDgwMDg3LCAweDgwMDQ3LCAweDkwMGVlLCAweDcwMTA3LCAweDgwMDVmLCAweDgwMDFmLCAweDkwMDllLCAweDcwMTE3LCAweDgwMDdmLCAweDgwMDNmLCAweDkwMGRlLCAweDcwMTBmLCAweDgwMDZmLCAweDgwMDJmLCAweDkwMGJlLCAweDgwMDBmLCAweDgwMDhmLCAweDgwMDRmLCAweDkwMGZlLCAweDcwMTAwLCAweDgwMDUwLCAweDgwMDEwLCAweDgwMTE4LCAweDcwMTEwLCAweDgwMDcwLCAweDgwMDMwLCAweDkwMGMxLCAweDcwMTA4LCAweDgwMDYwLCAweDgwMDIwLCAweDkwMGExLCAweDgwMDAwLCAweDgwMDgwLCAweDgwMDQwLCAweDkwMGUxLCAweDcwMTA0LCAweDgwMDU4LCAweDgwMDE4LCAweDkwMDkxLCAweDcwMTE0LCAweDgwMDc4LCAweDgwMDM4LCAweDkwMGQxLCAweDcwMTBjLCAweDgwMDY4LCAweDgwMDI4LCAweDkwMGIxLCAweDgwMDA4LCAweDgwMDg4LCAweDgwMDQ4LCAweDkwMGYxLCAweDcwMTAyLCAweDgwMDU0LCAweDgwMDE0LCAweDgwMTFjLCAweDcwMTEyLCAweDgwMDc0LCAweDgwMDM0LCAweDkwMGM5LCAweDcwMTBhLCAweDgwMDY0LCAweDgwMDI0LCAweDkwMGE5LCAweDgwMDA0LCAweDgwMDg0LCAweDgwMDQ0LCAweDkwMGU5LCAweDcwMTA2LCAweDgwMDVjLCAweDgwMDFjLCAweDkwMDk5LCAweDcwMTE2LCAweDgwMDdjLCAweDgwMDNjLCAweDkwMGQ5LCAweDcwMTBlLCAweDgwMDZjLCAweDgwMDJjLCAweDkwMGI5LCAweDgwMDBjLCAweDgwMDhjLCAweDgwMDRjLCAweDkwMGY5LCAweDcwMTAxLCAweDgwMDUyLCAweDgwMDEyLCAweDgwMTFhLCAweDcwMTExLCAweDgwMDcyLCAweDgwMDMyLCAweDkwMGM1LCAweDcwMTA5LCAweDgwMDYyLCAweDgwMDIyLCAweDkwMGE1LCAweDgwMDAyLCAweDgwMDgyLCAweDgwMDQyLCAweDkwMGU1LCAweDcwMTA1LCAweDgwMDVhLCAweDgwMDFhLCAweDkwMDk1LCAweDcwMTE1LCAweDgwMDdhLCAweDgwMDNhLCAweDkwMGQ1LCAweDcwMTBkLCAweDgwMDZhLCAweDgwMDJhLCAweDkwMGI1LCAweDgwMDBhLCAweDgwMDhhLCAweDgwMDRhLCAweDkwMGY1LCAweDcwMTAzLCAweDgwMDU2LCAweDgwMDE2LCAweDgwMTFlLCAweDcwMTEzLCAweDgwMDc2LCAweDgwMDM2LCAweDkwMGNkLCAweDcwMTBiLCAweDgwMDY2LCAweDgwMDI2LCAweDkwMGFkLCAweDgwMDA2LCAweDgwMDg2LCAweDgwMDQ2LCAweDkwMGVkLCAweDcwMTA3LCAweDgwMDVlLCAweDgwMDFlLCAweDkwMDlkLCAweDcwMTE3LCAweDgwMDdlLCAweDgwMDNlLCAweDkwMGRkLCAweDcwMTBmLCAweDgwMDZlLCAweDgwMDJlLCAweDkwMGJkLCAweDgwMDBlLCAweDgwMDhlLCAweDgwMDRlLCAweDkwMGZkLCAweDcwMTAwLCAweDgwMDUxLCAweDgwMDExLCAweDgwMTE5LCAweDcwMTEwLCAweDgwMDcxLCAweDgwMDMxLCAweDkwMGMzLCAweDcwMTA4LCAweDgwMDYxLCAweDgwMDIxLCAweDkwMGEzLCAweDgwMDAxLCAweDgwMDgxLCAweDgwMDQxLCAweDkwMGUzLCAweDcwMTA0LCAweDgwMDU5LCAweDgwMDE5LCAweDkwMDkzLCAweDcwMTE0LCAweDgwMDc5LCAweDgwMDM5LCAweDkwMGQzLCAweDcwMTBjLCAweDgwMDY5LCAweDgwMDI5LCAweDkwMGIzLCAweDgwMDA5LCAweDgwMDg5LCAweDgwMDQ5LCAweDkwMGYzLCAweDcwMTAyLCAweDgwMDU1LCAweDgwMDE1LCAweDgwMTFkLCAweDcwMTEyLCAweDgwMDc1LCAweDgwMDM1LCAweDkwMGNiLCAweDcwMTBhLCAweDgwMDY1LCAweDgwMDI1LCAweDkwMGFiLCAweDgwMDA1LCAweDgwMDg1LCAweDgwMDQ1LCAweDkwMGViLCAweDcwMTA2LCAweDgwMDVkLCAweDgwMDFkLCAweDkwMDliLCAweDcwMTE2LCAweDgwMDdkLCAweDgwMDNkLCAweDkwMGRiLCAweDcwMTBlLCAweDgwMDZkLCAweDgwMDJkLCAweDkwMGJiLCAweDgwMDBkLCAweDgwMDhkLCAweDgwMDRkLCAweDkwMGZiLCAweDcwMTAxLCAweDgwMDUzLCAweDgwMDEzLCAweDgwMTFiLCAweDcwMTExLCAweDgwMDczLCAweDgwMDMzLCAweDkwMGM3LCAweDcwMTA5LCAweDgwMDYzLCAweDgwMDIzLCAweDkwMGE3LCAweDgwMDAzLCAweDgwMDgzLCAweDgwMDQzLCAweDkwMGU3LCAweDcwMTA1LCAweDgwMDViLCAweDgwMDFiLCAweDkwMDk3LCAweDcwMTE1LCAweDgwMDdiLCAweDgwMDNiLCAweDkwMGQ3LCAweDcwMTBkLCAweDgwMDZiLCAweDgwMDJiLCAweDkwMGI3LCAweDgwMDBiLCAweDgwMDhiLCAweDgwMDRiLCAweDkwMGY3LCAweDcwMTAzLCAweDgwMDU3LCAweDgwMDE3LCAweDgwMTFmLCAweDcwMTEzLCAweDgwMDc3LCAweDgwMDM3LCAweDkwMGNmLCAweDcwMTBiLCAweDgwMDY3LCAweDgwMDI3LCAweDkwMGFmLCAweDgwMDA3LCAweDgwMDg3LCAweDgwMDQ3LCAweDkwMGVmLCAweDcwMTA3LCAweDgwMDVmLCAweDgwMDFmLCAweDkwMDlmLCAweDcwMTE3LCAweDgwMDdmLCAweDgwMDNmLCAweDkwMGRmLCAweDcwMTBmLCAweDgwMDZmLCAweDgwMDJmLCAweDkwMGJmLCAweDgwMDBmLCAweDgwMDhmLCAweDgwMDRmLCAweDkwMGZmXSksIDldO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZml4ZWREaXN0Q29kZVRhYiA9IFtuZXcgSW50MzJBcnJheShbMHg1MDAwMCwgMHg1MDAxMCwgMHg1MDAwOCwgMHg1MDAxOCwgMHg1MDAwNCwgMHg1MDAxNCwgMHg1MDAwYywgMHg1MDAxYywgMHg1MDAwMiwgMHg1MDAxMiwgMHg1MDAwYSwgMHg1MDAxYSwgMHg1MDAwNiwgMHg1MDAxNiwgMHg1MDAwZSwgMHgwMDAwMCwgMHg1MDAwMSwgMHg1MDAxMSwgMHg1MDAwOSwgMHg1MDAxOSwgMHg1MDAwNSwgMHg1MDAxNSwgMHg1MDAwZCwgMHg1MDAxZCwgMHg1MDAwMywgMHg1MDAxMywgMHg1MDAwYiwgMHg1MDAxYiwgMHg1MDAwNywgMHg1MDAxNywgMHg1MDAwZiwgMHgwMDAwMF0pLCA1XTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBGbGF0ZVN0cmVhbShzdHIsIG1heWJlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ciA9IHN0cjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGljdCA9IHN0ci5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNtZiA9IHN0ci5nZXRCeXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmxnID0gc3RyLmdldEJ5dGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNtZiA9PT0gLTEgfHwgZmxnID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgaGVhZGVyIGluIGZsYXRlIHN0cmVhbTogXCIuY29uY2F0KGNtZiwgXCIsIFwiKS5jb25jYXQoZmxnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY21mICYgMHgwZikgIT09IDB4MDgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJVbmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCBpbiBmbGF0ZSBzdHJlYW06IFwiLmNvbmNhdChjbWYsIFwiLCBcIikuY29uY2F0KGZsZykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChjbWYgPDwgOCkgKyBmbGcpICUgMzEgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJCYWQgRkNIRUNLIGluIGZsYXRlIHN0cmVhbTogXCIuY29uY2F0KGNtZiwgXCIsIFwiKS5jb25jYXQoZmxnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGcgJiAweDIwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiRkRJQ1QgYml0IHNldCBpbiBmbGF0ZSBzdHJlYW06IFwiLmNvbmNhdChjbWYsIFwiLCBcIikuY29uY2F0KGZsZykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZGVTaXplID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29kZUJ1ZiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBEZWNvZGVTdHJlYW0uY2FsbCh0aGlzLCBtYXliZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBGbGF0ZVN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY29kZVN0cmVhbS5wcm90b3R5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgIEZsYXRlU3RyZWFtLnByb3RvdHlwZS5nZXRCaXRzID0gZnVuY3Rpb24gRmxhdGVTdHJlYW1fZ2V0Qml0cyhiaXRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gdGhpcy5zdHI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZVNpemUgPSB0aGlzLmNvZGVTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVCdWYgPSB0aGlzLmNvZGVCdWY7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNvZGVTaXplIDwgYml0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYiA9IHN0ci5nZXRCeXRlKCkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0JhZCBlbmNvZGluZyBpbiBmbGF0ZSBzdHJlYW0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlQnVmIHw9IGIgPDwgY29kZVNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZVNpemUgKz0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgYiA9IGNvZGVCdWYgJiAoMSA8PCBiaXRzKSAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZGVCdWYgPSBjb2RlQnVmID4+IGJpdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZGVTaXplID0gY29kZVNpemUgLT0gYml0cztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIEZsYXRlU3RyZWFtLnByb3RvdHlwZS5nZXRDb2RlID0gZnVuY3Rpb24gRmxhdGVTdHJlYW1fZ2V0Q29kZSh0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ciA9IHRoaXMuc3RyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVzID0gdGFibGVbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4TGVuID0gdGFibGVbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZVNpemUgPSB0aGlzLmNvZGVTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVCdWYgPSB0aGlzLmNvZGVCdWY7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNvZGVTaXplIDwgbWF4TGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChiID0gc3RyLmdldEJ5dGUoKSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVCdWYgfD0gYiA8PCBjb2RlU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlU2l6ZSArPSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZSA9IGNvZGVzW2NvZGVCdWYgJiAoMSA8PCBtYXhMZW4pIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZUxlbiA9IGNvZGUgPj4gMTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZVZhbCA9IGNvZGUgJiAweGZmZmY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlTGVuIDwgMSB8fCBjb2RlU2l6ZSA8IGNvZGVMZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0JhZCBlbmNvZGluZyBpbiBmbGF0ZSBzdHJlYW0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2RlQnVmID0gY29kZUJ1ZiA+PiBjb2RlTGVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2RlU2l6ZSA9IGNvZGVTaXplIC0gY29kZUxlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2RlVmFsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIEZsYXRlU3RyZWFtLnByb3RvdHlwZS5nZW5lcmF0ZUh1ZmZtYW5UYWJsZSA9IGZ1bmN0aW9uIGZsYXRlU3RyZWFtR2VuZXJhdGVIdWZmbWFuVGFibGUobGVuZ3Rocykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSBsZW5ndGhzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhMZW4gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuZ3Roc1tpXSA+IG1heExlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhMZW4gPSBsZW5ndGhzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSAxIDw8IG1heExlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlcyA9IG5ldyBJbnQzMkFycmF5KHNpemUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsZW4gPSAxLCBjb2RlID0gMCwgc2tpcCA9IDI7IGxlbiA8PSBtYXhMZW47ICsrbGVuLCBjb2RlIDw8PSAxLCBza2lwIDw8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgdmFsID0gMDsgdmFsIDwgbjsgKyt2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbmd0aHNbdmFsXSA9PT0gbGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZTIgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBjb2RlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlMiA9IGNvZGUyIDw8IDEgfCB0ICYgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID4+PSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBjb2RlMjsgaSA8IHNpemU7IGkgKz0gc2tpcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzW2ldID0gbGVuIDw8IDE2IHwgdmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2NvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbY29kZXMsIG1heExlbl07XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgRmxhdGVTdHJlYW0ucHJvdG90eXBlLnJlYWRCbG9jayA9IGZ1bmN0aW9uIEZsYXRlU3RyZWFtX3JlYWRCbG9jaygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIsIGxlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHIgPSB0aGlzLnN0cjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZHIgPSB0aGlzLmdldEJpdHMoMyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZHIgJiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBoZHIgPj49IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZHIgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYiA9IHN0ci5nZXRCeXRlKCkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0JhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2NrTGVuID0gYjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYiA9IHN0ci5nZXRCeXRlKCkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0JhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tMZW4gfD0gYiA8PCA4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChiID0gc3RyLmdldEJ5dGUoKSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hlY2sgPSBiO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChiID0gc3RyLmdldEJ5dGUoKSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjayB8PSBiIDw8IDg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2sgIT09ICh+YmxvY2tMZW4gJiAweGZmZmYpICYmIChibG9ja0xlbiAhPT0gMCB8fCBjaGVjayAhPT0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdCYWQgdW5jb21wcmVzc2VkIGJsb2NrIGxlbmd0aCBpbiBmbGF0ZSBzdHJlYW0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZGVCdWYgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29kZVNpemUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlckxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcihidWZmZXJMZW5ndGggKyBibG9ja0xlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGJ1ZmZlckxlbmd0aCArIGJsb2NrTGVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gZW5kO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrTGVuID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHIucGVla0J5dGUoKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSBidWZmZXJMZW5ndGg7IG4gPCBlbmQ7ICsrbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChiID0gc3RyLmdldEJ5dGUoKSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbbl0gPSBiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGl0Q29kZVRhYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpc3RDb2RlVGFibGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZHIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXRDb2RlVGFibGUgPSBmaXhlZExpdENvZGVUYWI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdENvZGVUYWJsZSA9IGZpeGVkRGlzdENvZGVUYWI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhkciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1MaXRDb2RlcyA9IHRoaXMuZ2V0Qml0cyg1KSArIDI1NztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtRGlzdENvZGVzID0gdGhpcy5nZXRCaXRzKDUpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtQ29kZUxlbkNvZGVzID0gdGhpcy5nZXRCaXRzKDQpICsgNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZUxlbkNvZGVMZW5ndGhzID0gbmV3IFVpbnQ4QXJyYXkoY29kZUxlbkNvZGVNYXAubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1Db2RlTGVuQ29kZXM7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlTGVuQ29kZUxlbmd0aHNbY29kZUxlbkNvZGVNYXBbaV1dID0gdGhpcy5nZXRCaXRzKDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlTGVuQ29kZVRhYiA9IHRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUoY29kZUxlbkNvZGVMZW5ndGhzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlcyA9IG51bUxpdENvZGVzICsgbnVtRGlzdENvZGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlTGVuZ3RocyA9IG5ldyBVaW50OEFycmF5KGNvZGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYml0c0xlbmd0aCwgYml0c09mZnNldCwgd2hhdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgY29kZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSB0aGlzLmdldENvZGUoY29kZUxlbkNvZGVUYWIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID09PSAxNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c0xlbmd0aCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzT2Zmc2V0ID0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoYXQgPSBsZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gMTcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNMZW5ndGggPSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c09mZnNldCA9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGF0ID0gbGVuID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID09PSAxOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c0xlbmd0aCA9IDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzT2Zmc2V0ID0gMTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGF0ID0gbGVuID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVMZW5ndGhzW2krK10gPSBsZW4gPSBjb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVwZWF0TGVuZ3RoID0gdGhpcy5nZXRCaXRzKGJpdHNMZW5ndGgpICsgYml0c09mZnNldDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVwZWF0TGVuZ3RoLS0gPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlTGVuZ3Roc1tpKytdID0gd2hhdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdENvZGVUYWJsZSA9IHRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUoY29kZUxlbmd0aHMuc3ViYXJyYXkoMCwgbnVtTGl0Q29kZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0Q29kZVRhYmxlID0gdGhpcy5nZW5lcmF0ZUh1ZmZtYW5UYWJsZShjb2RlTGVuZ3Rocy5zdWJhcnJheShudW1MaXRDb2RlcywgY29kZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdVbmtub3duIGJsb2NrIHR5cGUgaW4gZmxhdGUgc3RyZWFtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IHRoaXMuYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpbWl0ID0gYnVmZmVyID8gYnVmZmVyLmxlbmd0aCA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gdGhpcy5idWZmZXJMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUxID0gdGhpcy5nZXRDb2RlKGxpdENvZGVUYWJsZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZTEgPCAyNTYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvcyArIDEgPj0gbGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKHBvcyArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQgPSBidWZmZXIubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW3BvcysrXSA9IGNvZGUxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZTEgPT09IDI1Nikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IHBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUxIC09IDI1NztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlMSA9IGxlbmd0aERlY29kZVtjb2RlMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUyID0gY29kZTEgPj4gMTY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZTIgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUyID0gdGhpcy5nZXRCaXRzKGNvZGUyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSAoY29kZTEgJiAweGZmZmYpICsgY29kZTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTEgPSB0aGlzLmdldENvZGUoZGlzdENvZGVUYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTEgPSBkaXN0RGVjb2RlW2NvZGUxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlMiA9IGNvZGUxID4+IDE2O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUyID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlMiA9IHRoaXMuZ2V0Qml0cyhjb2RlMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpc3QgPSAoY29kZTEgJiAweGZmZmYpICsgY29kZTI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zICsgbGVuID49IGxpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKHBvcyArIGxlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0ID0gYnVmZmVyLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGxlbjsgKytrLCArK3Bvcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbcG9zXSA9IGJ1ZmZlcltwb3MgLSBkaXN0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZsYXRlU3RyZWFtO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuRmxhdGVTdHJlYW0gPSBGbGF0ZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgIHZhciBQcmVkaWN0b3JTdHJlYW0gPSBmdW5jdGlvbiBQcmVkaWN0b3JTdHJlYW1DbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQcmVkaWN0b3JTdHJlYW0oc3RyLCBtYXliZUxlbmd0aCwgcGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJlZGljdG9yID0gdGhpcy5wcmVkaWN0b3IgPSBwYXJhbXMuZ2V0KCdQcmVkaWN0b3InKSB8fCAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlZGljdG9yIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlZGljdG9yICE9PSAyICYmIChwcmVkaWN0b3IgPCAxMCB8fCBwcmVkaWN0b3IgPiAxNSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJVbnN1cHBvcnRlZCBwcmVkaWN0b3I6IFwiLmNvbmNhdChwcmVkaWN0b3IpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWRpY3RvciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZEJsb2NrID0gdGhpcy5yZWFkQmxvY2tUaWZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWRCbG9jayA9IHRoaXMucmVhZEJsb2NrUG5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ciA9IHN0cjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGljdCA9IHN0ci5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzID0gcGFyYW1zLmdldCgnQ29sb3JzJykgfHwgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRzID0gdGhpcy5iaXRzID0gcGFyYW1zLmdldCgnQml0c1BlckNvbXBvbmVudCcpIHx8IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1ucyA9IHRoaXMuY29sdW1ucyA9IHBhcmFtcy5nZXQoJ0NvbHVtbnMnKSB8fCAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5waXhCeXRlcyA9IGNvbG9ycyAqIGJpdHMgKyA3ID4+IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0J5dGVzID0gY29sdW1ucyAqIGNvbG9ycyAqIGJpdHMgKyA3ID4+IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICBEZWNvZGVTdHJlYW0uY2FsbCh0aGlzLCBtYXliZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFByZWRpY3RvclN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY29kZVN0cmVhbS5wcm90b3R5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgIFByZWRpY3RvclN0cmVhbS5wcm90b3R5cGUucmVhZEJsb2NrVGlmZiA9IGZ1bmN0aW9uIHByZWRpY3RvclN0cmVhbVJlYWRCbG9ja1RpZmYoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm93Qnl0ZXMgPSB0aGlzLnJvd0J5dGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKGJ1ZmZlckxlbmd0aCArIHJvd0J5dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRzID0gdGhpcy5iaXRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhd0J5dGVzID0gdGhpcy5zdHIuZ2V0Qnl0ZXMocm93Qnl0ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSAhcmF3Qnl0ZXMubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lb2YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmJ1ZiA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0YnVmID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmJpdHMgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGJpdHMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IGJ1ZmZlckxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0cyA9PT0gMSAmJiBjb2xvcnMgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93Qnl0ZXM7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IHJhd0J5dGVzW2ldIF4gaW5idWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgXj0gYyA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjIF49IGMgPj4gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyBePSBjID4+IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluYnVmID0gKGMgJiAxKSA8PCA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbcG9zKytdID0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJpdHMgPT09IDgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29sb3JzOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW3BvcysrXSA9IHJhd0J5dGVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgcm93Qnl0ZXM7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbcG9zXSA9IGJ1ZmZlcltwb3MgLSBjb2xvcnNdICsgcmF3Qnl0ZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYml0cyA9PT0gMTYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZXNQZXJQaXhlbCA9IGNvbG9ycyAqIDI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYnl0ZXNQZXJQaXhlbDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltwb3MrK10gPSByYXdCeXRlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IHJvd0J5dGVzOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1bSA9ICgocmF3Qnl0ZXNbaV0gJiAweEZGKSA8PCA4KSArIChyYXdCeXRlc1tpICsgMV0gJiAweEZGKSArICgoYnVmZmVyW3BvcyAtIGJ5dGVzUGVyUGl4ZWxdICYgMHhGRikgPDwgOCkgKyAoYnVmZmVyW3BvcyAtIGJ5dGVzUGVyUGl4ZWwgKyAxXSAmIDB4RkYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbcG9zKytdID0gc3VtID4+IDggJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbcG9zKytdID0gc3VtICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wQXJyYXkgPSBuZXcgVWludDhBcnJheShjb2xvcnMgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYml0TWFzayA9ICgxIDw8IGJpdHMpIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaiA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBidWZmZXJMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29sdW1uczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtrID0gMDsga2sgPCBjb2xvcnM7ICsra2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmJpdHMgPCBiaXRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5idWYgPSBpbmJ1ZiA8PCA4IHwgcmF3Qnl0ZXNbaisrXSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5iaXRzICs9IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBBcnJheVtra10gPSBjb21wQXJyYXlba2tdICsgKGluYnVmID4+IGluYml0cyAtIGJpdHMpICYgYml0TWFzaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluYml0cyAtPSBiaXRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0YnVmID0gb3V0YnVmIDw8IGJpdHMgfCBjb21wQXJyYXlba2tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0Yml0cyArPSBiaXRzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3V0Yml0cyA+PSA4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2srK10gPSBvdXRidWYgPj4gb3V0Yml0cyAtIDggJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGJpdHMgLT0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvdXRiaXRzID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaysrXSA9IChvdXRidWYgPDwgOCAtIG91dGJpdHMpICsgKGluYnVmICYgKDEgPDwgOCAtIG91dGJpdHMpIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlckxlbmd0aCArPSByb3dCeXRlcztcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBQcmVkaWN0b3JTdHJlYW0ucHJvdG90eXBlLnJlYWRCbG9ja1BuZyA9IGZ1bmN0aW9uIHByZWRpY3RvclN0cmVhbVJlYWRCbG9ja1BuZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByb3dCeXRlcyA9IHRoaXMucm93Qnl0ZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGl4Qnl0ZXMgPSB0aGlzLnBpeEJ5dGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZWRpY3RvciA9IHRoaXMuc3RyLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYXdCeXRlcyA9IHRoaXMuc3RyLmdldEJ5dGVzKHJvd0J5dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW9mID0gIXJhd0J5dGVzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZW9mKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyTGVuZ3RoID0gdGhpcy5idWZmZXJMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIoYnVmZmVyTGVuZ3RoICsgcm93Qnl0ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZSb3cgPSBidWZmZXIuc3ViYXJyYXkoYnVmZmVyTGVuZ3RoIC0gcm93Qnl0ZXMsIGJ1ZmZlckxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Um93Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZSb3cgPSBuZXcgVWludDhBcnJheShyb3dCeXRlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBidWZmZXJMZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYztcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwcmVkaWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dCeXRlczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaisrXSA9IHJhd0J5dGVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwaXhCeXRlczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaisrXSA9IHJhd0J5dGVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCByb3dCeXRlczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbal0gPSBidWZmZXJbaiAtIHBpeEJ5dGVzXSArIHJhd0J5dGVzW2ldICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93Qnl0ZXM7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2orK10gPSBwcmV2Um93W2ldICsgcmF3Qnl0ZXNbaV0gJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwaXhCeXRlczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaisrXSA9IChwcmV2Um93W2ldID4+IDEpICsgcmF3Qnl0ZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IHJvd0J5dGVzOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltqXSA9IChwcmV2Um93W2ldICsgYnVmZmVyW2ogLSBwaXhCeXRlc10gPj4gMSkgKyByYXdCeXRlc1tpXSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBpeEJ5dGVzOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwID0gcHJldlJvd1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSByYXdCeXRlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltqKytdID0gdXAgKyBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCByb3dCeXRlczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cCA9IHByZXZSb3dbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXBMZWZ0ID0gcHJldlJvd1tpIC0gcGl4Qnl0ZXNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlZnQgPSBidWZmZXJbaiAtIHBpeEJ5dGVzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwID0gbGVmdCArIHVwIC0gdXBMZWZ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhID0gcCAtIGxlZnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYSA9IC1wYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBiID0gcCAtIHVwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGIgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGIgPSAtcGI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYyA9IHAgLSB1cExlZnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYyA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYyA9IC1wYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHJhd0J5dGVzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGEgPD0gcGIgJiYgcGEgPD0gcGMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaisrXSA9IGxlZnQgKyBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYiA8PSBwYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltqKytdID0gdXAgKyBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaisrXSA9IHVwTGVmdCArIGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlVuc3VwcG9ydGVkIHByZWRpY3RvcjogXCIuY29uY2F0KHByZWRpY3RvcikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlckxlbmd0aCArPSByb3dCeXRlcztcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJlZGljdG9yU3RyZWFtO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuUHJlZGljdG9yU3RyZWFtID0gUHJlZGljdG9yU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgdmFyIERlY3J5cHRTdHJlYW0gPSBmdW5jdGlvbiBEZWNyeXB0U3RyZWFtQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRGVjcnlwdFN0cmVhbShzdHIsIG1heWJlTGVuZ3RoLCBkZWNyeXB0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ciA9IHN0cjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGljdCA9IHN0ci5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNyeXB0ID0gZGVjcnlwdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dENodW5rID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIERlY29kZVN0cmVhbS5jYWxsKHRoaXMsIG1heWJlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBjaHVua1NpemUgPSA1MTI7XG4gICAgICAgICAgICAgICAgICAgIERlY3J5cHRTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEZWNvZGVTdHJlYW0ucHJvdG90eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICBEZWNyeXB0U3RyZWFtLnByb3RvdHlwZS5yZWFkQmxvY2sgPSBmdW5jdGlvbiBEZWNyeXB0U3RyZWFtX3JlYWRCbG9jaygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVuaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IHRoaXMubmV4dENodW5rO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IHRoaXMuc3RyLmdldEJ5dGVzKGNodW5rU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2h1bmsgfHwgY2h1bmsubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0Q2h1bmsgPSB0aGlzLnN0ci5nZXRCeXRlcyhjaHVua1NpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc01vcmVEYXRhID0gdGhpcy5uZXh0Q2h1bmsgJiYgdGhpcy5uZXh0Q2h1bmsubGVuZ3RoID4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNyeXB0ID0gdGhpcy5kZWNyeXB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmsgPSBkZWNyeXB0KGNodW5rLCAhaGFzTW9yZURhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcihidWZmZXJMZW5ndGggKyBuKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGgrK10gPSBjaHVua1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERlY3J5cHRTdHJlYW07XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5EZWNyeXB0U3RyZWFtID0gRGVjcnlwdFN0cmVhbTtcblxuICAgICAgICAgICAgICAgIHZhciBBc2NpaTg1U3RyZWFtID0gZnVuY3Rpb24gQXNjaWk4NVN0cmVhbUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFzY2lpODVTdHJlYW0oc3RyLCBtYXliZUxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHIgPSBzdHI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpY3QgPSBzdHIuZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQgPSBuZXcgVWludDhBcnJheSg1KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heWJlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVMZW5ndGggPSAwLjggKiBtYXliZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgRGVjb2RlU3RyZWFtLmNhbGwodGhpcywgbWF5YmVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQXNjaWk4NVN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY29kZVN0cmVhbS5wcm90b3R5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgIEFzY2lpODVTdHJlYW0ucHJvdG90eXBlLnJlYWRCbG9jayA9IGZ1bmN0aW9uIEFzY2lpODVTdHJlYW1fcmVhZEJsb2NrKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFRJTERBX0NIQVIgPSAweDdFO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFpfTE9XRVJfQ0hBUiA9IDB4N0E7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgRU9GID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gdGhpcy5zdHI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IHN0ci5nZXRCeXRlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoMCwgX3V0aWwuaXNTcGFjZSkoYykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gc3RyLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09IEVPRiB8fCBjID09PSBUSUxEQV9DSEFSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gWl9MT1dFUl9DSEFSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIoYnVmZmVyTGVuZ3RoICsgNCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGggKyBpXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJMZW5ndGggKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5pbnB1dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFswXSA9IGM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgNTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBzdHIuZ2V0Qnl0ZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoMCwgX3V0aWwuaXNTcGFjZSkoYykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBzdHIuZ2V0Qnl0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRbaV0gPSBjO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSBFT0YgfHwgYyA9PT0gVElMREFfQ0hBUikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcihidWZmZXJMZW5ndGggKyBpIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJMZW5ndGggKz0gaSAtIDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCA1OyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0W2ldID0gMHgyMSArIDg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA1OyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHQgKiA4NSArIChpbnB1dFtpXSAtIDB4MjEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDM7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGggKyBpXSA9IHQgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID4+PSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXNjaWk4NVN0cmVhbTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkFzY2lpODVTdHJlYW0gPSBBc2NpaTg1U3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgdmFyIEFzY2lpSGV4U3RyZWFtID0gZnVuY3Rpb24gQXNjaWlIZXhTdHJlYW1DbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBc2NpaUhleFN0cmVhbShzdHIsIG1heWJlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ciA9IHN0cjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGljdCA9IHN0ci5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdERpZ2l0ID0gLTE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXliZUxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heWJlTGVuZ3RoID0gMC41ICogbWF5YmVMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIERlY29kZVN0cmVhbS5jYWxsKHRoaXMsIG1heWJlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEFzY2lpSGV4U3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGVjb2RlU3RyZWFtLnByb3RvdHlwZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgQXNjaWlIZXhTdHJlYW0ucHJvdG90eXBlLnJlYWRCbG9jayA9IGZ1bmN0aW9uIEFzY2lpSGV4U3RyZWFtX3JlYWRCbG9jaygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBVUFNUUkVBTV9CTE9DS19TSVpFID0gODAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBieXRlcyA9IHRoaXMuc3RyLmdldEJ5dGVzKFVQU1RSRUFNX0JMT0NLX1NJWkUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJ5dGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhEZWNvZGVMZW5ndGggPSBieXRlcy5sZW5ndGggKyAxID4+IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGggKyBtYXhEZWNvZGVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0RGlnaXQgPSB0aGlzLmZpcnN0RGlnaXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGJ5dGVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2ggPSBieXRlc1tpXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0ID0gY2ggJiAweDBGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPj0gMHg0MSAmJiBjaCA8PSAweDQ2IHx8IGNoID49IDB4NjEgJiYgY2ggPD0gMHg2Nikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdCA9IChjaCAmIDB4MEYpICsgOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDNFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0RGlnaXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RGlnaXQgPSBkaWdpdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoKytdID0gZmlyc3REaWdpdCA8PCA0IHwgZGlnaXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RGlnaXQgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdERpZ2l0ID49IDAgJiYgdGhpcy5lb2YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoKytdID0gZmlyc3REaWdpdCA8PCA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RGlnaXQgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdERpZ2l0ID0gZmlyc3REaWdpdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gYnVmZmVyTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBc2NpaUhleFN0cmVhbTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkFzY2lpSGV4U3RyZWFtID0gQXNjaWlIZXhTdHJlYW07XG5cbiAgICAgICAgICAgICAgICB2YXIgUnVuTGVuZ3RoU3RyZWFtID0gZnVuY3Rpb24gUnVuTGVuZ3RoU3RyZWFtQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUnVuTGVuZ3RoU3RyZWFtKHN0ciwgbWF5YmVMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyID0gc3RyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWN0ID0gc3RyLmRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICBEZWNvZGVTdHJlYW0uY2FsbCh0aGlzLCBtYXliZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBSdW5MZW5ndGhTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEZWNvZGVTdHJlYW0ucHJvdG90eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICBSdW5MZW5ndGhTdHJlYW0ucHJvdG90eXBlLnJlYWRCbG9jayA9IGZ1bmN0aW9uIFJ1bkxlbmd0aFN0cmVhbV9yZWFkQmxvY2soKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVwZWF0SGVhZGVyID0gdGhpcy5zdHIuZ2V0Qnl0ZXMoMik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVwZWF0SGVhZGVyIHx8IHJlcGVhdEhlYWRlci5sZW5ndGggPCAyIHx8IHJlcGVhdEhlYWRlclswXSA9PT0gMTI4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlckxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuID0gcmVwZWF0SGVhZGVyWzBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA8IDEyOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKGJ1ZmZlckxlbmd0aCArIG4gKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoKytdID0gcmVwZWF0SGVhZGVyWzFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLnN0ci5nZXRCeXRlcyhuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnNldChzb3VyY2UsIGJ1ZmZlckxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlckxlbmd0aCArPSBuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDI1NyAtIG47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSByZXBlYXRIZWFkZXJbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIoYnVmZmVyTGVuZ3RoICsgbiArIDEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2J1ZmZlckxlbmd0aCsrXSA9IGI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IGJ1ZmZlckxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUnVuTGVuZ3RoU3RyZWFtO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuUnVuTGVuZ3RoU3RyZWFtID0gUnVuTGVuZ3RoU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgdmFyIExaV1N0cmVhbSA9IGZ1bmN0aW9uIExaV1N0cmVhbUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIExaV1N0cmVhbShzdHIsIG1heWJlTGVuZ3RoLCBlYXJseUNoYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHIgPSBzdHI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpY3QgPSBzdHIuZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkRGF0YSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJpdHNDYWNoZWQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heEx6d0RpY3Rpb25hcnlTaXplID0gNDA5NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsendTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYXJseUNoYW5nZTogZWFybHlDaGFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZUxlbmd0aDogOSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Q29kZTogMjU4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Rpb25hcnlWYWx1ZXM6IG5ldyBVaW50OEFycmF5KG1heEx6d0RpY3Rpb25hcnlTaXplKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5TGVuZ3RoczogbmV3IFVpbnQxNkFycmF5KG1heEx6d0RpY3Rpb25hcnlTaXplKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5UHJldkNvZGVzOiBuZXcgVWludDE2QXJyYXkobWF4THp3RGljdGlvbmFyeVNpemUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXF1ZW5jZTogbmV3IFVpbnQ4QXJyYXkobWF4THp3RGljdGlvbmFyeVNpemUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXF1ZW5jZUxlbmd0aDogMFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6d1N0YXRlLmRpY3Rpb25hcnlWYWx1ZXNbaV0gPSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6d1N0YXRlLmRpY3Rpb25hcnlMZW5ndGhzW2ldID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sendTdGF0ZSA9IGx6d1N0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgRGVjb2RlU3RyZWFtLmNhbGwodGhpcywgbWF5YmVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgTFpXU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGVjb2RlU3RyZWFtLnByb3RvdHlwZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgTFpXU3RyZWFtLnByb3RvdHlwZS5yZWFkQml0cyA9IGZ1bmN0aW9uIExaV1N0cmVhbV9yZWFkQml0cyhuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYml0c0NhY2hlZCA9IHRoaXMuYml0c0NhY2hlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWNoZWREYXRhID0gdGhpcy5jYWNoZWREYXRhO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYml0c0NhY2hlZCA8IG4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IHRoaXMuc3RyLmdldEJ5dGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZERhdGEgPSBjYWNoZWREYXRhIDw8IDggfCBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNDYWNoZWQgKz0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iaXRzQ2FjaGVkID0gYml0c0NhY2hlZCAtPSBuO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWNoZWREYXRhID0gY2FjaGVkRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdENvZGUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZERhdGEgPj4+IGJpdHNDYWNoZWQgJiAoMSA8PCBuKSAtIDE7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgTFpXU3RyZWFtLnByb3RvdHlwZS5yZWFkQmxvY2sgPSBmdW5jdGlvbiBMWldTdHJlYW1fcmVhZEJsb2NrKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IDUxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlc3RpbWF0ZWREZWNvZGVkU2l6ZSA9IGJsb2NrU2l6ZSAqIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZFNpemVEZWx0YSA9IGJsb2NrU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBqLCBxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGx6d1N0YXRlID0gdGhpcy5sendTdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsendTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVhcmx5Q2hhbmdlID0gbHp3U3RhdGUuZWFybHlDaGFuZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dENvZGUgPSBsendTdGF0ZS5uZXh0Q29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0aW9uYXJ5VmFsdWVzID0gbHp3U3RhdGUuZGljdGlvbmFyeVZhbHVlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0aW9uYXJ5TGVuZ3RocyA9IGx6d1N0YXRlLmRpY3Rpb25hcnlMZW5ndGhzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpY3Rpb25hcnlQcmV2Q29kZXMgPSBsendTdGF0ZS5kaWN0aW9uYXJ5UHJldkNvZGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVMZW5ndGggPSBsendTdGF0ZS5jb2RlTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZDb2RlID0gbHp3U3RhdGUucHJldkNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudFNlcXVlbmNlID0gbHp3U3RhdGUuY3VycmVudFNlcXVlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRTZXF1ZW5jZUxlbmd0aCA9IGx6d1N0YXRlLmN1cnJlbnRTZXF1ZW5jZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvZGVkTGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50QnVmZmVyTGVuZ3RoID0gdGhpcy5idWZmZXJMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGggKyBlc3RpbWF0ZWREZWNvZGVkU2l6ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBibG9ja1NpemU7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlID0gdGhpcy5yZWFkQml0cyhjb2RlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzUHJldiA9IGN1cnJlbnRTZXF1ZW5jZUxlbmd0aCA+IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSA8IDI1Nikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2VxdWVuY2VbMF0gPSBjb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2VxdWVuY2VMZW5ndGggPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA+PSAyNTgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPCBuZXh0Q29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNlcXVlbmNlTGVuZ3RoID0gZGljdGlvbmFyeUxlbmd0aHNbY29kZV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IGN1cnJlbnRTZXF1ZW5jZUxlbmd0aCAtIDEsIHEgPSBjb2RlOyBqID49IDA7IGotLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXF1ZW5jZVtqXSA9IGRpY3Rpb25hcnlWYWx1ZXNbcV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IGRpY3Rpb25hcnlQcmV2Q29kZXNbcV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2VxdWVuY2VbY3VycmVudFNlcXVlbmNlTGVuZ3RoKytdID0gY3VycmVudFNlcXVlbmNlWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID09PSAyNTYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZUxlbmd0aCA9IDk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRDb2RlID0gMjU4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2VxdWVuY2VMZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmx6d1N0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUHJldikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5UHJldkNvZGVzW25leHRDb2RlXSA9IHByZXZDb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5TGVuZ3Roc1tuZXh0Q29kZV0gPSBkaWN0aW9uYXJ5TGVuZ3Roc1twcmV2Q29kZV0gKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5VmFsdWVzW25leHRDb2RlXSA9IGN1cnJlbnRTZXF1ZW5jZVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dENvZGUrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZUxlbmd0aCA9IG5leHRDb2RlICsgZWFybHlDaGFuZ2UgJiBuZXh0Q29kZSArIGVhcmx5Q2hhbmdlIC0gMSA/IGNvZGVMZW5ndGggOiBNYXRoLm1pbihNYXRoLmxvZyhuZXh0Q29kZSArIGVhcmx5Q2hhbmdlKSAvIDAuNjkzMTQ3MTgwNTU5OTQ1MyArIDEsIDEyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldkNvZGUgPSBjb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWRMZW5ndGggKz0gY3VycmVudFNlcXVlbmNlTGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVzdGltYXRlZERlY29kZWRTaXplIDwgZGVjb2RlZExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RpbWF0ZWREZWNvZGVkU2l6ZSArPSBkZWNvZGVkU2l6ZURlbHRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChlc3RpbWF0ZWREZWNvZGVkU2l6ZSA8IGRlY29kZWRMZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoICsgZXN0aW1hdGVkRGVjb2RlZFNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjdXJyZW50U2VxdWVuY2VMZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbY3VycmVudEJ1ZmZlckxlbmd0aCsrXSA9IGN1cnJlbnRTZXF1ZW5jZVtqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGx6d1N0YXRlLm5leHRDb2RlID0gbmV4dENvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBsendTdGF0ZS5jb2RlTGVuZ3RoID0gY29kZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGx6d1N0YXRlLnByZXZDb2RlID0gcHJldkNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBsendTdGF0ZS5jdXJyZW50U2VxdWVuY2VMZW5ndGggPSBjdXJyZW50U2VxdWVuY2VMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IGN1cnJlbnRCdWZmZXJMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExaV1N0cmVhbTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkxaV1N0cmVhbSA9IExaV1N0cmVhbTtcblxuICAgICAgICAgICAgICAgIHZhciBOdWxsU3RyZWFtID0gZnVuY3Rpb24gTnVsbFN0cmVhbUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE51bGxTdHJlYW0oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBTdHJlYW0uY2FsbCh0aGlzLCBuZXcgVWludDhBcnJheSgwKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBOdWxsU3RyZWFtLnByb3RvdHlwZSA9IFN0cmVhbS5wcm90b3R5cGU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBOdWxsU3RyZWFtO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuTnVsbFN0cmVhbSA9IE51bGxTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE1OCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ0NJVFRGYXhTdHJlYW0gPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3ByaW1pdGl2ZXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1NSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2NjaXR0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9zdHJlYW0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgQ0NJVFRGYXhTdHJlYW0gPSBmdW5jdGlvbiBDQ0lUVEZheFN0cmVhbUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENDSVRURmF4U3RyZWFtKHN0ciwgbWF5YmVMZW5ndGgsIHBhcmFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHIgPSBzdHI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpY3QgPSBzdHIuZGljdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShwYXJhbXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zID0gX3ByaW1pdGl2ZXMuRGljdC5lbXB0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jY2l0dEZheERlY29kZXIgPSBuZXcgX2NjaXR0LkNDSVRURmF4RGVjb2Rlcihzb3VyY2UsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBLOiBwYXJhbXMuZ2V0KCdLJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kT2ZMaW5lOiBwYXJhbXMuZ2V0KCdFbmRPZkxpbmUnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmNvZGVkQnl0ZUFsaWduOiBwYXJhbXMuZ2V0KCdFbmNvZGVkQnl0ZUFsaWduJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1uczogcGFyYW1zLmdldCgnQ29sdW1ucycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvd3M6IHBhcmFtcy5nZXQoJ1Jvd3MnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmRPZkJsb2NrOiBwYXJhbXMuZ2V0KCdFbmRPZkJsb2NrJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxhY2tJczE6IHBhcmFtcy5nZXQoJ0JsYWNrSXMxJylcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBfc3RyZWFtLkRlY29kZVN0cmVhbS5jYWxsKHRoaXMsIG1heWJlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENDSVRURmF4U3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoX3N0cmVhbS5EZWNvZGVTdHJlYW0ucHJvdG90eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICBDQ0lUVEZheFN0cmVhbS5wcm90b3R5cGUucmVhZEJsb2NrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCF0aGlzLmVvZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjID0gdGhpcy5jY2l0dEZheERlY29kZXIucmVhZE5leHRDaGFyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXSA9IGM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENDSVRURmF4U3RyZWFtO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ0NJVFRGYXhTdHJlYW0gPSBDQ0lUVEZheFN0cmVhbTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTU5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5DQ0lUVEZheERlY29kZXIgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIENDSVRURmF4RGVjb2RlciA9IGZ1bmN0aW9uIENDSVRURmF4RGVjb2RlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNjaXR0RU9MID0gLTI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjY2l0dEVPRiA9IC0xO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHdvRGltUGFzcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0d29EaW1Ib3JpeiA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0d29EaW1WZXJ0MCA9IDI7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0d29EaW1WZXJ0UjEgPSAzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHdvRGltVmVydEwxID0gNDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHR3b0RpbVZlcnRSMiA9IDU7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0d29EaW1WZXJ0TDIgPSA2O1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHdvRGltVmVydFIzID0gNztcbiAgICAgICAgICAgICAgICAgICAgdmFyIHR3b0RpbVZlcnRMMyA9IDg7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0d29EaW1UYWJsZSA9IFtbLTEsIC0xXSwgWy0xLCAtMV0sIFs3LCB0d29EaW1WZXJ0TDNdLCBbNywgdHdvRGltVmVydFIzXSwgWzYsIHR3b0RpbVZlcnRMMl0sIFs2LCB0d29EaW1WZXJ0TDJdLCBbNiwgdHdvRGltVmVydFIyXSwgWzYsIHR3b0RpbVZlcnRSMl0sIFs0LCB0d29EaW1QYXNzXSwgWzQsIHR3b0RpbVBhc3NdLCBbNCwgdHdvRGltUGFzc10sIFs0LCB0d29EaW1QYXNzXSwgWzQsIHR3b0RpbVBhc3NdLCBbNCwgdHdvRGltUGFzc10sIFs0LCB0d29EaW1QYXNzXSwgWzQsIHR3b0RpbVBhc3NdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF1dO1xuICAgICAgICAgICAgICAgICAgICB2YXIgd2hpdGVUYWJsZTEgPSBbWy0xLCAtMV0sIFsxMiwgY2NpdHRFT0xdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFsxMSwgMTc5Ml0sIFsxMSwgMTc5Ml0sIFsxMiwgMTk4NF0sIFsxMiwgMjA0OF0sIFsxMiwgMjExMl0sIFsxMiwgMjE3Nl0sIFsxMiwgMjI0MF0sIFsxMiwgMjMwNF0sIFsxMSwgMTg1Nl0sIFsxMSwgMTg1Nl0sIFsxMSwgMTkyMF0sIFsxMSwgMTkyMF0sIFsxMiwgMjM2OF0sIFsxMiwgMjQzMl0sIFsxMiwgMjQ5Nl0sIFsxMiwgMjU2MF1dO1xuICAgICAgICAgICAgICAgICAgICB2YXIgd2hpdGVUYWJsZTIgPSBbWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFs4LCAyOV0sIFs4LCAyOV0sIFs4LCAzMF0sIFs4LCAzMF0sIFs4LCA0NV0sIFs4LCA0NV0sIFs4LCA0Nl0sIFs4LCA0Nl0sIFs3LCAyMl0sIFs3LCAyMl0sIFs3LCAyMl0sIFs3LCAyMl0sIFs3LCAyM10sIFs3LCAyM10sIFs3LCAyM10sIFs3LCAyM10sIFs4LCA0N10sIFs4LCA0N10sIFs4LCA0OF0sIFs4LCA0OF0sIFs2LCAxM10sIFs2LCAxM10sIFs2LCAxM10sIFs2LCAxM10sIFs2LCAxM10sIFs2LCAxM10sIFs2LCAxM10sIFs2LCAxM10sIFs3LCAyMF0sIFs3LCAyMF0sIFs3LCAyMF0sIFs3LCAyMF0sIFs4LCAzM10sIFs4LCAzM10sIFs4LCAzNF0sIFs4LCAzNF0sIFs4LCAzNV0sIFs4LCAzNV0sIFs4LCAzNl0sIFs4LCAzNl0sIFs4LCAzN10sIFs4LCAzN10sIFs4LCAzOF0sIFs4LCAzOF0sIFs3LCAxOV0sIFs3LCAxOV0sIFs3LCAxOV0sIFs3LCAxOV0sIFs4LCAzMV0sIFs4LCAzMV0sIFs4LCAzMl0sIFs4LCAzMl0sIFs2LCAxXSwgWzYsIDFdLCBbNiwgMV0sIFs2LCAxXSwgWzYsIDFdLCBbNiwgMV0sIFs2LCAxXSwgWzYsIDFdLCBbNiwgMTJdLCBbNiwgMTJdLCBbNiwgMTJdLCBbNiwgMTJdLCBbNiwgMTJdLCBbNiwgMTJdLCBbNiwgMTJdLCBbNiwgMTJdLCBbOCwgNTNdLCBbOCwgNTNdLCBbOCwgNTRdLCBbOCwgNTRdLCBbNywgMjZdLCBbNywgMjZdLCBbNywgMjZdLCBbNywgMjZdLCBbOCwgMzldLCBbOCwgMzldLCBbOCwgNDBdLCBbOCwgNDBdLCBbOCwgNDFdLCBbOCwgNDFdLCBbOCwgNDJdLCBbOCwgNDJdLCBbOCwgNDNdLCBbOCwgNDNdLCBbOCwgNDRdLCBbOCwgNDRdLCBbNywgMjFdLCBbNywgMjFdLCBbNywgMjFdLCBbNywgMjFdLCBbNywgMjhdLCBbNywgMjhdLCBbNywgMjhdLCBbNywgMjhdLCBbOCwgNjFdLCBbOCwgNjFdLCBbOCwgNjJdLCBbOCwgNjJdLCBbOCwgNjNdLCBbOCwgNjNdLCBbOCwgMF0sIFs4LCAwXSwgWzgsIDMyMF0sIFs4LCAzMjBdLCBbOCwgMzg0XSwgWzgsIDM4NF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs3LCAyN10sIFs3LCAyN10sIFs3LCAyN10sIFs3LCAyN10sIFs4LCA1OV0sIFs4LCA1OV0sIFs4LCA2MF0sIFs4LCA2MF0sIFs5LCAxNDcyXSwgWzksIDE1MzZdLCBbOSwgMTYwMF0sIFs5LCAxNzI4XSwgWzcsIDE4XSwgWzcsIDE4XSwgWzcsIDE4XSwgWzcsIDE4XSwgWzcsIDI0XSwgWzcsIDI0XSwgWzcsIDI0XSwgWzcsIDI0XSwgWzgsIDQ5XSwgWzgsIDQ5XSwgWzgsIDUwXSwgWzgsIDUwXSwgWzgsIDUxXSwgWzgsIDUxXSwgWzgsIDUyXSwgWzgsIDUyXSwgWzcsIDI1XSwgWzcsIDI1XSwgWzcsIDI1XSwgWzcsIDI1XSwgWzgsIDU1XSwgWzgsIDU1XSwgWzgsIDU2XSwgWzgsIDU2XSwgWzgsIDU3XSwgWzgsIDU3XSwgWzgsIDU4XSwgWzgsIDU4XSwgWzYsIDE5Ml0sIFs2LCAxOTJdLCBbNiwgMTkyXSwgWzYsIDE5Ml0sIFs2LCAxOTJdLCBbNiwgMTkyXSwgWzYsIDE5Ml0sIFs2LCAxOTJdLCBbNiwgMTY2NF0sIFs2LCAxNjY0XSwgWzYsIDE2NjRdLCBbNiwgMTY2NF0sIFs2LCAxNjY0XSwgWzYsIDE2NjRdLCBbNiwgMTY2NF0sIFs2LCAxNjY0XSwgWzgsIDQ0OF0sIFs4LCA0NDhdLCBbOCwgNTEyXSwgWzgsIDUxMl0sIFs5LCA3MDRdLCBbOSwgNzY4XSwgWzgsIDY0MF0sIFs4LCA2NDBdLCBbOCwgNTc2XSwgWzgsIDU3Nl0sIFs5LCA4MzJdLCBbOSwgODk2XSwgWzksIDk2MF0sIFs5LCAxMDI0XSwgWzksIDEwODhdLCBbOSwgMTE1Ml0sIFs5LCAxMjE2XSwgWzksIDEyODBdLCBbOSwgMTM0NF0sIFs5LCAxNDA4XSwgWzcsIDI1Nl0sIFs3LCAyNTZdLCBbNywgMjU2XSwgWzcsIDI1Nl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNiwgMTZdLCBbNiwgMTZdLCBbNiwgMTZdLCBbNiwgMTZdLCBbNiwgMTZdLCBbNiwgMTZdLCBbNiwgMTZdLCBbNiwgMTZdLCBbNiwgMTddLCBbNiwgMTddLCBbNiwgMTddLCBbNiwgMTddLCBbNiwgMTddLCBbNiwgMTddLCBbNiwgMTddLCBbNiwgMTddLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs2LCAxNF0sIFs2LCAxNF0sIFs2LCAxNF0sIFs2LCAxNF0sIFs2LCAxNF0sIFs2LCAxNF0sIFs2LCAxNF0sIFs2LCAxNF0sIFs2LCAxNV0sIFs2LCAxNV0sIFs2LCAxNV0sIFs2LCAxNV0sIFs2LCAxNV0sIFs2LCAxNV0sIFs2LCAxNV0sIFs2LCAxNV0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBibGFja1RhYmxlMSA9IFtbLTEsIC0xXSwgWy0xLCAtMV0sIFsxMiwgY2NpdHRFT0xdLCBbMTIsIGNjaXR0RU9MXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFsxMSwgMTc5Ml0sIFsxMSwgMTc5Ml0sIFsxMSwgMTc5Ml0sIFsxMSwgMTc5Ml0sIFsxMiwgMTk4NF0sIFsxMiwgMTk4NF0sIFsxMiwgMjA0OF0sIFsxMiwgMjA0OF0sIFsxMiwgMjExMl0sIFsxMiwgMjExMl0sIFsxMiwgMjE3Nl0sIFsxMiwgMjE3Nl0sIFsxMiwgMjI0MF0sIFsxMiwgMjI0MF0sIFsxMiwgMjMwNF0sIFsxMiwgMjMwNF0sIFsxMSwgMTg1Nl0sIFsxMSwgMTg1Nl0sIFsxMSwgMTg1Nl0sIFsxMSwgMTg1Nl0sIFsxMSwgMTkyMF0sIFsxMSwgMTkyMF0sIFsxMSwgMTkyMF0sIFsxMSwgMTkyMF0sIFsxMiwgMjM2OF0sIFsxMiwgMjM2OF0sIFsxMiwgMjQzMl0sIFsxMiwgMjQzMl0sIFsxMiwgMjQ5Nl0sIFsxMiwgMjQ5Nl0sIFsxMiwgMjU2MF0sIFsxMiwgMjU2MF0sIFsxMCwgMThdLCBbMTAsIDE4XSwgWzEwLCAxOF0sIFsxMCwgMThdLCBbMTAsIDE4XSwgWzEwLCAxOF0sIFsxMCwgMThdLCBbMTAsIDE4XSwgWzEyLCA1Ml0sIFsxMiwgNTJdLCBbMTMsIDY0MF0sIFsxMywgNzA0XSwgWzEzLCA3NjhdLCBbMTMsIDgzMl0sIFsxMiwgNTVdLCBbMTIsIDU1XSwgWzEyLCA1Nl0sIFsxMiwgNTZdLCBbMTMsIDEyODBdLCBbMTMsIDEzNDRdLCBbMTMsIDE0MDhdLCBbMTMsIDE0NzJdLCBbMTIsIDU5XSwgWzEyLCA1OV0sIFsxMiwgNjBdLCBbMTIsIDYwXSwgWzEzLCAxNTM2XSwgWzEzLCAxNjAwXSwgWzExLCAyNF0sIFsxMSwgMjRdLCBbMTEsIDI0XSwgWzExLCAyNF0sIFsxMSwgMjVdLCBbMTEsIDI1XSwgWzExLCAyNV0sIFsxMSwgMjVdLCBbMTMsIDE2NjRdLCBbMTMsIDE3MjhdLCBbMTIsIDMyMF0sIFsxMiwgMzIwXSwgWzEyLCAzODRdLCBbMTIsIDM4NF0sIFsxMiwgNDQ4XSwgWzEyLCA0NDhdLCBbMTMsIDUxMl0sIFsxMywgNTc2XSwgWzEyLCA1M10sIFsxMiwgNTNdLCBbMTIsIDU0XSwgWzEyLCA1NF0sIFsxMywgODk2XSwgWzEzLCA5NjBdLCBbMTMsIDEwMjRdLCBbMTMsIDEwODhdLCBbMTMsIDExNTJdLCBbMTMsIDEyMTZdLCBbMTAsIDY0XSwgWzEwLCA2NF0sIFsxMCwgNjRdLCBbMTAsIDY0XSwgWzEwLCA2NF0sIFsxMCwgNjRdLCBbMTAsIDY0XSwgWzEwLCA2NF1dO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYmxhY2tUYWJsZTIgPSBbWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzExLCAyM10sIFsxMSwgMjNdLCBbMTIsIDUwXSwgWzEyLCA1MV0sIFsxMiwgNDRdLCBbMTIsIDQ1XSwgWzEyLCA0Nl0sIFsxMiwgNDddLCBbMTIsIDU3XSwgWzEyLCA1OF0sIFsxMiwgNjFdLCBbMTIsIDI1Nl0sIFsxMCwgMTZdLCBbMTAsIDE2XSwgWzEwLCAxNl0sIFsxMCwgMTZdLCBbMTAsIDE3XSwgWzEwLCAxN10sIFsxMCwgMTddLCBbMTAsIDE3XSwgWzEyLCA0OF0sIFsxMiwgNDldLCBbMTIsIDYyXSwgWzEyLCA2M10sIFsxMiwgMzBdLCBbMTIsIDMxXSwgWzEyLCAzMl0sIFsxMiwgMzNdLCBbMTIsIDQwXSwgWzEyLCA0MV0sIFsxMSwgMjJdLCBbMTEsIDIyXSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzksIDE1XSwgWzksIDE1XSwgWzksIDE1XSwgWzksIDE1XSwgWzksIDE1XSwgWzksIDE1XSwgWzksIDE1XSwgWzksIDE1XSwgWzEyLCAxMjhdLCBbMTIsIDE5Ml0sIFsxMiwgMjZdLCBbMTIsIDI3XSwgWzEyLCAyOF0sIFsxMiwgMjldLCBbMTEsIDE5XSwgWzExLCAxOV0sIFsxMSwgMjBdLCBbMTEsIDIwXSwgWzEyLCAzNF0sIFsxMiwgMzVdLCBbMTIsIDM2XSwgWzEyLCAzN10sIFsxMiwgMzhdLCBbMTIsIDM5XSwgWzExLCAyMV0sIFsxMSwgMjFdLCBbMTIsIDQyXSwgWzEyLCA0M10sIFsxMCwgMF0sIFsxMCwgMF0sIFsxMCwgMF0sIFsxMCwgMF0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl1dO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYmxhY2tUYWJsZTMgPSBbWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFs2LCA5XSwgWzYsIDhdLCBbNSwgN10sIFs1LCA3XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFszLCAxXSwgWzMsIDFdLCBbMywgMV0sIFszLCAxXSwgWzMsIDFdLCBbMywgMV0sIFszLCAxXSwgWzMsIDFdLCBbMywgNF0sIFszLCA0XSwgWzMsIDRdLCBbMywgNF0sIFszLCA0XSwgWzMsIDRdLCBbMywgNF0sIFszLCA0XSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl1dO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENDSVRURmF4RGVjb2Rlcihzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzb3VyY2UgfHwgdHlwZW9mIHNvdXJjZS5uZXh0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDQ0lUVEZheERlY29kZXIgLSBpbnZhbGlkIFwic291cmNlXCIgcGFyYW1ldGVyLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW9mID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuY29kaW5nID0gb3B0aW9uc1snSyddIHx8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVvbGluZSA9IG9wdGlvbnNbJ0VuZE9mTGluZSddIHx8IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ieXRlQWxpZ24gPSBvcHRpb25zWydFbmNvZGVkQnl0ZUFsaWduJ10gfHwgZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbnMgPSBvcHRpb25zWydDb2x1bW5zJ10gfHwgMTcyODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm93cyA9IG9wdGlvbnNbJ1Jvd3MnXSB8fCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVvYmxvY2sgPSBvcHRpb25zWydFbmRPZkJsb2NrJ107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlb2Jsb2NrID09PSBudWxsIHx8IGVvYmxvY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVvYmxvY2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVvYmxvY2sgPSBlb2Jsb2NrO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ibGFjayA9IG9wdGlvbnNbJ0JsYWNrSXMxJ10gfHwgZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZGluZ0xpbmUgPSBuZXcgVWludDMyQXJyYXkodGhpcy5jb2x1bW5zICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZkxpbmUgPSBuZXcgVWludDMyQXJyYXkodGhpcy5jb2x1bW5zICsgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZGluZ0xpbmVbMF0gPSB0aGlzLmNvbHVtbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZGluZ1BvcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRMaW5lMkQgPSB0aGlzLmVuY29kaW5nIDwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRCaXRzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRCdWYgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRCaXRzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm93c0RvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChjb2RlMSA9IHRoaXMuX2xvb2tCaXRzKDEyKSkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZTEgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZW5jb2RpbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0TGluZTJEID0gIXRoaXMuX2xvb2tCaXRzKDEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWF0Qml0cygxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENDSVRURmF4RGVjb2Rlci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkTmV4dENoYXI6IGZ1bmN0aW9uIHJlYWROZXh0Q2hhcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lb2YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWZMaW5lID0gdGhpcy5yZWZMaW5lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RpbmdMaW5lID0gdGhpcy5jb2RpbmdMaW5lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWZQb3MsIGJsYWNrUGl4ZWxzLCBiaXRzLCBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0Qml0cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yb3dzRG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZW9mKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVyciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZTEsIGNvZGUyLCBjb2RlMztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0TGluZTJEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBjb2RpbmdMaW5lW2ldIDwgY29sdW1uczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmTGluZVtpXSA9IGNvZGluZ0xpbmVbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZkxpbmVbaSsrXSA9IGNvbHVtbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZMaW5lW2ldID0gY29sdW1ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGluZ0xpbmVbMF0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2RpbmdQb3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmUG9zID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsYWNrUGl4ZWxzID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUxID0gdGhpcy5fZ2V0VHdvRGltQ29kZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHR3b0RpbVBhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMocmVmTGluZVtyZWZQb3MgKyAxXSwgYmxhY2tQaXhlbHMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmTGluZVtyZWZQb3MgKyAxXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB0d29EaW1Ib3JpejpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUxID0gY29kZTIgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmxhY2tQaXhlbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUxICs9IGNvZGUzID0gdGhpcy5fZ2V0QmxhY2tDb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoY29kZTMgPj0gNjQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlMiArPSBjb2RlMyA9IHRoaXMuX2dldFdoaXRlQ29kZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNvZGUzID49IDY0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlMSArPSBjb2RlMyA9IHRoaXMuX2dldFdoaXRlQ29kZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNvZGUzID49IDY0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTIgKz0gY29kZTMgPSB0aGlzLl9nZXRCbGFja0NvZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChjb2RlMyA+PSA2NCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSArIGNvZGUxLCBibGFja1BpeGVscyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gKyBjb2RlMiwgYmxhY2tQaXhlbHMgXiAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlZkxpbmVbcmVmUG9zXSA8PSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSAmJiByZWZMaW5lW3JlZlBvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmUG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydFIzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzKHJlZkxpbmVbcmVmUG9zXSArIDMsIGJsYWNrUGl4ZWxzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxhY2tQaXhlbHMgXj0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcmVmUG9zO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlZkxpbmVbcmVmUG9zXSA8PSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSAmJiByZWZMaW5lW3JlZlBvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZlBvcyArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB0d29EaW1WZXJ0UjI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMocmVmTGluZVtyZWZQb3NdICsgMiwgYmxhY2tQaXhlbHMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGFja1BpeGVscyBePSAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytyZWZQb3M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVmTGluZVtyZWZQb3NdIDw9IGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdICYmIHJlZkxpbmVbcmVmUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmUG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHR3b0RpbVZlcnRSMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhyZWZMaW5lW3JlZlBvc10gKyAxLCBibGFja1BpeGVscyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsYWNrUGl4ZWxzIF49IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3JlZlBvcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMocmVmTGluZVtyZWZQb3NdLCBibGFja1BpeGVscyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsYWNrUGl4ZWxzIF49IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3JlZlBvcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydEwzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzTmVnKHJlZkxpbmVbcmVmUG9zXSAtIDMsIGJsYWNrUGl4ZWxzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxhY2tQaXhlbHMgXj0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZQb3MgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tcmVmUG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcmVmUG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydEwyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzTmVnKHJlZkxpbmVbcmVmUG9zXSAtIDIsIGJsYWNrUGl4ZWxzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxhY2tQaXhlbHMgXj0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZQb3MgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tcmVmUG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcmVmUG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydEwxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzTmVnKHJlZkxpbmVbcmVmUG9zXSAtIDEsIGJsYWNrUGl4ZWxzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxhY2tQaXhlbHMgXj0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZQb3MgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tcmVmUG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcmVmUG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgY2NpdHRFT0Y6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMoY29sdW1ucywgMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ2JhZCAyZCBjb2RlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhjb2x1bW5zLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGluZ0xpbmVbMF0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2RpbmdQb3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxhY2tQaXhlbHMgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTEgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJsYWNrUGl4ZWxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUxICs9IGNvZGUzID0gdGhpcy5fZ2V0QmxhY2tDb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNvZGUzID49IDY0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlMSArPSBjb2RlMyA9IHRoaXMuX2dldFdoaXRlQ29kZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChjb2RlMyA+PSA2NCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdICsgY29kZTEsIGJsYWNrUGl4ZWxzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsYWNrUGl4ZWxzIF49IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ290RU9MID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYnl0ZUFsaWduKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0Qml0cyAmPSB+NztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5lb2Jsb2NrICYmIHRoaXMucm93ID09PSB0aGlzLnJvd3MgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd3NEb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUxID0gdGhpcy5fbG9va0JpdHMoMTIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lb2xpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY29kZTEgIT09IGNjaXR0RU9GICYmIGNvZGUxICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTEgPSB0aGlzLl9sb29rQml0cygxMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY29kZTEgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWF0Qml0cygxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlMSA9IHRoaXMuX2xvb2tCaXRzKDEyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlMSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMTIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290RU9MID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZTEgPT09IGNjaXR0RU9GKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVvZiAmJiB0aGlzLmVuY29kaW5nID4gMCAmJiAhdGhpcy5yb3dzRG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0TGluZTJEID0gIXRoaXMuX2xvb2tCaXRzKDEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZW9ibG9jayAmJiBnb3RFT0wgJiYgdGhpcy5ieXRlQWxpZ24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUxID0gdGhpcy5fbG9va0JpdHMoMTIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZTEgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmVuY29kaW5nID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb29rQml0cygxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmVuY29kaW5nID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTEgPSB0aGlzLl9sb29rQml0cygxMik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlMSAhPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKSgnYmFkIHJ0YyBjb2RlOiAnICsgY29kZTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZW5jb2RpbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9va0JpdHMoMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXJyICYmIHRoaXMuZW9saW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUxID0gdGhpcy5fbG9va0JpdHMoMTMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUxID09PSBjY2l0dEVPRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZTEgPj4gMSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZW5jb2RpbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWF0Qml0cygxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dExpbmUyRCA9ICEoY29kZTEgJiAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lWzBdID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRCaXRzID0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1BvcyA9IDBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRCaXRzID0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1BvcyA9IDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3crKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dEJpdHMgPj0gOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gdGhpcy5jb2RpbmdQb3MgJiAxID8gMCA6IDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0Qml0cyAtPSA4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dEJpdHMgPT09IDAgJiYgY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZGluZ1BvcysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRCaXRzID0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gLSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzID0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0Qml0cyA+IGJpdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjIDw8PSBiaXRzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodGhpcy5jb2RpbmdQb3MgJiAxKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjIHw9IDB4RkYgPj4gOCAtIGJpdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRCaXRzIC09IGJpdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPDw9IHRoaXMub3V0cHV0Qml0cztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHRoaXMuY29kaW5nUG9zICYgMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyB8PSAweEZGID4+IDggLSB0aGlzLm91dHB1dEJpdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cyAtPSB0aGlzLm91dHB1dEJpdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRCaXRzID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2RpbmdQb3MrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRCaXRzID0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gLSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiaXRzID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjIDw8PSBiaXRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGJpdHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmJsYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgXj0gMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBfYWRkUGl4ZWxzOiBmdW5jdGlvbiBfYWRkUGl4ZWxzKGExLCBibGFja1BpeGVscykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RpbmdMaW5lID0gdGhpcy5jb2RpbmdMaW5lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RpbmdQb3MgPSB0aGlzLmNvZGluZ1BvcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhMSA+IGNvZGluZ0xpbmVbY29kaW5nUG9zXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYTEgPiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKSgncm93IGlzIHdyb25nIGxlbmd0aCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTEgPSB0aGlzLmNvbHVtbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kaW5nUG9zICYgMSBeIGJsYWNrUGl4ZWxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2NvZGluZ1BvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGluZ0xpbmVbY29kaW5nUG9zXSA9IGExO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29kaW5nUG9zID0gY29kaW5nUG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hZGRQaXhlbHNOZWc6IGZ1bmN0aW9uIF9hZGRQaXhlbHNOZWcoYTEsIGJsYWNrUGl4ZWxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGluZ0xpbmUgPSB0aGlzLmNvZGluZ0xpbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGluZ1BvcyA9IHRoaXMuY29kaW5nUG9zO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGExID4gY29kaW5nTGluZVtjb2RpbmdQb3NdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhMSA+IHRoaXMuY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKCdyb3cgaXMgd3JvbmcgbGVuZ3RoJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVyciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhMSA9IHRoaXMuY29sdW1ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RpbmdQb3MgJiAxIF4gYmxhY2tQaXhlbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrY29kaW5nUG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kaW5nTGluZVtjb2RpbmdQb3NdID0gYTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhMSA8IGNvZGluZ0xpbmVbY29kaW5nUG9zXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYTEgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ2ludmFsaWQgY29kZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTEgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNvZGluZ1BvcyA+IDAgJiYgYTEgPCBjb2RpbmdMaW5lW2NvZGluZ1BvcyAtIDFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWNvZGluZ1BvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGluZ0xpbmVbY29kaW5nUG9zXSA9IGExO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29kaW5nUG9zID0gY29kaW5nUG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9maW5kVGFibGVDb2RlOiBmdW5jdGlvbiBfZmluZFRhYmxlQ29kZShzdGFydCwgZW5kLCB0YWJsZSwgbGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGltaXRWYWx1ZSA9IGxpbWl0IHx8IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPD0gZW5kOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSB0aGlzLl9sb29rQml0cyhpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PT0gY2NpdHRFT0YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdHJ1ZSwgMSwgZmFsc2VdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPDw9IGVuZCAtIGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxpbWl0VmFsdWUgfHwgY29kZSA+PSBsaW1pdFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IHRhYmxlW2NvZGUgLSBsaW1pdFZhbHVlXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBbMF0gPT09IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKGkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt0cnVlLCBwWzFdLCB0cnVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbZmFsc2UsIDAsIGZhbHNlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBfZ2V0VHdvRGltQ29kZTogZnVuY3Rpb24gX2dldFR3b0RpbUNvZGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZW9ibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gdGhpcy5fbG9va0JpdHMoNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSB0d29EaW1UYWJsZVtjb2RlXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCAmJiBwWzBdID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWF0Qml0cyhwWzBdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZmluZFRhYmxlQ29kZSgxLCA3LCB0d29EaW1UYWJsZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFswXSAmJiByZXN1bHRbMl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ0JhZCB0d28gZGltIGNvZGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2NpdHRFT0Y7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgX2dldFdoaXRlQ29kZTogZnVuY3Rpb24gX2dldFdoaXRlQ29kZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lb2Jsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSB0aGlzLl9sb29rQml0cygxMik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT09IGNjaXR0RU9GKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID4+IDUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSB3aGl0ZVRhYmxlMVtjb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSB3aGl0ZVRhYmxlMltjb2RlID4+IDNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBbMF0gPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKHBbMF0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9maW5kVGFibGVDb2RlKDEsIDksIHdoaXRlVGFibGUyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0WzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5fZmluZFRhYmxlQ29kZSgxMSwgMTIsIHdoaXRlVGFibGUxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0WzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKCdiYWQgd2hpdGUgY29kZScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWF0Qml0cygxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9nZXRCbGFja0NvZGU6IGZ1bmN0aW9uIF9nZXRCbGFja0NvZGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUsIHA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lb2Jsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSB0aGlzLl9sb29rQml0cygxMyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT09IGNjaXR0RU9GKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID4+IDcgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBibGFja1RhYmxlMVtjb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID4+IDkgPT09IDAgJiYgY29kZSA+PiA3ICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gYmxhY2tUYWJsZTJbKGNvZGUgPj4gMSkgLSA2NF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gYmxhY2tUYWJsZTNbY29kZSA+PiA3XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwWzBdID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWF0Qml0cyhwWzBdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZmluZFRhYmxlQ29kZSgyLCA2LCBibGFja1RhYmxlMyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuX2ZpbmRUYWJsZUNvZGUoNywgMTIsIGJsYWNrVGFibGUyLCA2NCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuX2ZpbmRUYWJsZUNvZGUoMTAsIDEzLCBibGFja1RhYmxlMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKSgnYmFkIGJsYWNrIGNvZGUnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBfbG9va0JpdHM6IGZ1bmN0aW9uIF9sb29rQml0cyhuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodGhpcy5pbnB1dEJpdHMgPCBuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYyA9IHRoaXMuc291cmNlLm5leHQoKSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dEJpdHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2NpdHRFT0Y7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0QnVmIDw8IG4gLSB0aGlzLmlucHV0Qml0cyAmIDB4RkZGRiA+PiAxNiAtIG47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0QnVmID0gdGhpcy5pbnB1dEJ1ZiA8PCA4IHwgYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dEJpdHMgKz0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dEJ1ZiA+PiB0aGlzLmlucHV0Qml0cyAtIG4gJiAweEZGRkYgPj4gMTYgLSBuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lYXRCaXRzOiBmdW5jdGlvbiBfZWF0Qml0cyhuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLmlucHV0Qml0cyAtPSBuKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dEJpdHMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENDSVRURmF4RGVjb2RlcjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkNDSVRURmF4RGVjb2RlciA9IENDSVRURmF4RGVjb2RlcjtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTYwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5KYmlnMlN0cmVhbSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfcHJpbWl0aXZlcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTU1KTtcblxuICAgICAgICAgICAgICAgIHZhciBfc3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9qYmlnID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNjEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2KTtcblxuICAgICAgICAgICAgICAgIHZhciBKYmlnMlN0cmVhbSA9IGZ1bmN0aW9uIEpiaWcyU3RyZWFtQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSmJpZzJTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCwgZGljdCwgcGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF5YmVMZW5ndGggPSBtYXliZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGljdCA9IGRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgX3N0cmVhbS5EZWNvZGVTdHJlYW0uY2FsbCh0aGlzLCBtYXliZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBKYmlnMlN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKF9zdHJlYW0uRGVjb2RlU3RyZWFtLnByb3RvdHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKYmlnMlN0cmVhbS5wcm90b3R5cGUsICdieXRlcycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnYnl0ZXMnLCB0aGlzLnN0cmVhbS5nZXRCeXRlcyh0aGlzLm1heWJlTGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIEpiaWcyU3RyZWFtLnByb3RvdHlwZS5lbnN1cmVCdWZmZXIgPSBmdW5jdGlvbiAocmVxdWVzdGVkKSB7fTtcblxuICAgICAgICAgICAgICAgICAgICBKYmlnMlN0cmVhbS5wcm90b3R5cGUucmVhZEJsb2NrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZW9mKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgamJpZzJJbWFnZSA9IG5ldyBfamJpZy5KYmlnMkltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmtzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KSh0aGlzLnBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsc1N0cmVhbSA9IHRoaXMucGFyYW1zLmdldCgnSkJJRzJHbG9iYWxzJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShnbG9iYWxzU3RyZWFtKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2xvYmFscyA9IGdsb2JhbHNTdHJlYW0uZ2V0Qnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZ2xvYmFscyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBnbG9iYWxzLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLmJ5dGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogdGhpcy5ieXRlcy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBqYmlnMkltYWdlLnBhcnNlQ2h1bmtzKGNodW5rcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGFMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gXj0gMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJMZW5ndGggPSBkYXRhTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKYmlnMlN0cmVhbTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkpiaWcyU3RyZWFtID0gSmJpZzJTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE2MSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuSmJpZzJJbWFnZSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2FyaXRobWV0aWNfZGVjb2RlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTYyKTtcblxuICAgICAgICAgICAgICAgIHZhciBfY2NpdHQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1OSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSmJpZzJFcnJvciA9IGZ1bmN0aW9uIEpiaWcyRXJyb3JDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBKYmlnMkVycm9yKG1zZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJ0pCSUcyIGVycm9yOiAnICsgbXNnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgSmJpZzJFcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgSmJpZzJFcnJvci5wcm90b3R5cGUubmFtZSA9ICdKYmlnMkVycm9yJztcbiAgICAgICAgICAgICAgICAgICAgSmJpZzJFcnJvci5jb25zdHJ1Y3RvciA9IEpiaWcyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKYmlnMkVycm9yO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIHZhciBKYmlnMkltYWdlID0gZnVuY3Rpb24gSmJpZzJJbWFnZUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENvbnRleHRDYWNoZSgpIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgQ29udGV4dENhY2hlLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbnRleHRzOiBmdW5jdGlvbiBnZXRDb250ZXh0cyhpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZCBpbiB0aGlzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2lkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1tpZF0gPSBuZXcgSW50OEFycmF5KDEgPDwgMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIERlY29kaW5nQ29udGV4dChkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQgPSBlbmQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBEZWNvZGluZ0NvbnRleHQucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGRlY29kZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kZXIgPSBuZXcgX2FyaXRobWV0aWNfZGVjb2Rlci5Bcml0aG1ldGljRGVjb2Rlcih0aGlzLmRhdGEsIHRoaXMuc3RhcnQsIHRoaXMuZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ2RlY29kZXInLCBkZWNvZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBjb250ZXh0Q2FjaGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhY2hlID0gbmV3IENvbnRleHRDYWNoZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnY29udGV4dENhY2hlJywgY2FjaGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsIHByb2NlZHVyZSwgZGVjb2Rlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRleHRzID0gY29udGV4dENhY2hlLmdldENvbnRleHRzKHByb2NlZHVyZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJldiA9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWRCaXRzKGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdCA9IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgcHJldik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBwcmV2IDwgMjU2ID8gcHJldiA8PCAxIHwgYml0IDogKHByZXYgPDwgMSB8IGJpdCkgJiA1MTEgfCAyNTY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSB2IDw8IDEgfCBiaXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYgPj4+IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaWduID0gcmVhZEJpdHMoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSByZWFkQml0cygxKSA/IHJlYWRCaXRzKDEpID8gcmVhZEJpdHMoMSkgPyByZWFkQml0cygxKSA/IHJlYWRCaXRzKDEpID8gcmVhZEJpdHMoMzIpICsgNDQzNiA6IHJlYWRCaXRzKDEyKSArIDM0MCA6IHJlYWRCaXRzKDgpICsgODQgOiByZWFkQml0cyg2KSArIDIwIDogcmVhZEJpdHMoNCkgKyA0IDogcmVhZEJpdHMoMik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2lnbiA9PT0gMCA/IHZhbHVlIDogdmFsdWUgPiAwID8gLXZhbHVlIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlY29kZUlBSUQoY29udGV4dENhY2hlLCBkZWNvZGVyLCBjb2RlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dHMgPSBjb250ZXh0Q2FjaGUuZ2V0Q29udGV4dHMoJ0lBSUQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2ID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2RlTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYml0ID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBwcmV2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gcHJldiA8PCAxIHwgYml0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZUxlbmd0aCA8IDMxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXYgJiAoMSA8PCBjb2RlTGVuZ3RoKSAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2ICYgMHg3RkZGRkZGRjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBTZWdtZW50VHlwZXMgPSBbJ1N5bWJvbERpY3Rpb25hcnknLCBudWxsLCBudWxsLCBudWxsLCAnSW50ZXJtZWRpYXRlVGV4dFJlZ2lvbicsIG51bGwsICdJbW1lZGlhdGVUZXh0UmVnaW9uJywgJ0ltbWVkaWF0ZUxvc3NsZXNzVGV4dFJlZ2lvbicsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsICdQYXR0ZXJuRGljdGlvbmFyeScsIG51bGwsIG51bGwsIG51bGwsICdJbnRlcm1lZGlhdGVIYWxmdG9uZVJlZ2lvbicsIG51bGwsICdJbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbicsICdJbW1lZGlhdGVMb3NzbGVzc0hhbGZ0b25lUmVnaW9uJywgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgJ0ludGVybWVkaWF0ZUdlbmVyaWNSZWdpb24nLCBudWxsLCAnSW1tZWRpYXRlR2VuZXJpY1JlZ2lvbicsICdJbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWdpb24nLCAnSW50ZXJtZWRpYXRlR2VuZXJpY1JlZmluZW1lbnRSZWdpb24nLCBudWxsLCAnSW1tZWRpYXRlR2VuZXJpY1JlZmluZW1lbnRSZWdpb24nLCAnSW1tZWRpYXRlTG9zc2xlc3NHZW5lcmljUmVmaW5lbWVudFJlZ2lvbicsIG51bGwsIG51bGwsIG51bGwsIG51bGwsICdQYWdlSW5mb3JtYXRpb24nLCAnRW5kT2ZQYWdlJywgJ0VuZE9mU3RyaXBlJywgJ0VuZE9mRmlsZScsICdQcm9maWxlcycsICdUYWJsZXMnLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAnRXh0ZW5zaW9uJ107XG4gICAgICAgICAgICAgICAgICAgIHZhciBDb2RpbmdUZW1wbGF0ZXMgPSBbW3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IC0xLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogLTJcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0yXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAtMlxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAtMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0xXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IC0xLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogLTFcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0xXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAtMVxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogLTFcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogLTQsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAwXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IC0zLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogMFxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAtMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IDBcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAwXG4gICAgICAgICAgICAgICAgICAgIH1dLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAtMlxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogLTJcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0yXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAtMlxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAtMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0xXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IC0xLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogLTFcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0xXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAtMVxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogLTFcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogLTMsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAwXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IC0yLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogMFxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAtMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IDBcbiAgICAgICAgICAgICAgICAgICAgfV0sIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAtMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0yXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAtMlxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogLTJcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogLTIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAtMVxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAtMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0xXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAtMVxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogLTFcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogLTIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAwXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IC0xLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogMFxuICAgICAgICAgICAgICAgICAgICB9XSwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IC0zLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogLTFcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogLTIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAtMVxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAtMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0xXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAtMVxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogLTFcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogLTQsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAwXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IC0zLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogMFxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAtMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IDBcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAwXG4gICAgICAgICAgICAgICAgICAgIH1dXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFJlZmluZW1lbnRUZW1wbGF0ZXMgPSBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kaW5nOiBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogLTFcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogMFxuICAgICAgICAgICAgICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U6IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogLTFcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAtMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAwXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAwXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAwXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogMVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogMVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogMVxuICAgICAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kaW5nOiBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IC0xLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogLTFcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAtMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAwXG4gICAgICAgICAgICAgICAgICAgICAgICB9XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTogW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogMFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogMFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogMFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogMVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogMVxuICAgICAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBSZXVzZWRDb250ZXh0cyA9IFsweDlCMjUsIDB4MDc5NSwgMHgwMEU1LCAweDAxOTVdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgUmVmaW5lbWVudFJldXNlZENvbnRleHRzID0gWzB4MDAyMCwgMHgwMDA4XTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWNvZGVCaXRtYXBUZW1wbGF0ZTAod2lkdGgsIGhlaWdodCwgZGVjb2RpbmdDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVjb2RlciA9IGRlY29kaW5nQ29udGV4dC5kZWNvZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRleHRzID0gZGVjb2RpbmdDb250ZXh0LmNvbnRleHRDYWNoZS5nZXRDb250ZXh0cygnR0InKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZXh0TGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgT0xEX1BJWEVMX01BU0sgPSAweDdCRjc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyA9IGJpdG1hcFtpXSA9IG5ldyBVaW50OEFycmF5KHdpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cxID0gaSA8IDEgPyByb3cgOiBiaXRtYXBbaSAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzIgPSBpIDwgMiA/IHJvdyA6IGJpdG1hcFtpIC0gMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dExhYmVsID0gcm93MlswXSA8PCAxMyB8IHJvdzJbMV0gPDwgMTIgfCByb3cyWzJdIDw8IDExIHwgcm93MVswXSA8PCA3IHwgcm93MVsxXSA8PCA2IHwgcm93MVsyXSA8PCA1IHwgcm93MVszXSA8PCA0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W2pdID0gcGl4ZWwgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIGNvbnRleHRMYWJlbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRMYWJlbCA9IChjb250ZXh0TGFiZWwgJiBPTERfUElYRUxfTUFTSykgPDwgMSB8IChqICsgMyA8IHdpZHRoID8gcm93MltqICsgM10gPDwgMTEgOiAwKSB8IChqICsgNCA8IHdpZHRoID8gcm93MVtqICsgNF0gPDwgNCA6IDApIHwgcGl4ZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYml0bWFwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlQml0bWFwKG1tciwgd2lkdGgsIGhlaWdodCwgdGVtcGxhdGVJbmRleCwgcHJlZGljdGlvbiwgc2tpcCwgYXQsIGRlY29kaW5nQ29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1tcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IG5ldyBSZWFkZXIoZGVjb2RpbmdDb250ZXh0LmRhdGEsIGRlY29kaW5nQ29udGV4dC5zdGFydCwgZGVjb2RpbmdDb250ZXh0LmVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlY29kZU1NUkJpdG1hcChpbnB1dCwgd2lkdGgsIGhlaWdodCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVtcGxhdGVJbmRleCA9PT0gMCAmJiAhc2tpcCAmJiAhcHJlZGljdGlvbiAmJiBhdC5sZW5ndGggPT09IDQgJiYgYXRbMF0ueCA9PT0gMyAmJiBhdFswXS55ID09PSAtMSAmJiBhdFsxXS54ID09PSAtMyAmJiBhdFsxXS55ID09PSAtMSAmJiBhdFsyXS54ID09PSAyICYmIGF0WzJdLnkgPT09IC0yICYmIGF0WzNdLnggPT09IC0yICYmIGF0WzNdLnkgPT09IC0yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlY29kZUJpdG1hcFRlbXBsYXRlMCh3aWR0aCwgaGVpZ2h0LCBkZWNvZGluZ0NvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXNlc2tpcCA9ICEhc2tpcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wbGF0ZSA9IENvZGluZ1RlbXBsYXRlc1t0ZW1wbGF0ZUluZGV4XS5jb25jYXQoYXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLnkgLSBiLnkgfHwgYS54IC0gYi54O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcGxhdGVMZW5ndGggPSB0ZW1wbGF0ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcGxhdGVYID0gbmV3IEludDhBcnJheSh0ZW1wbGF0ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcGxhdGVZID0gbmV3IEludDhBcnJheSh0ZW1wbGF0ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhbmdpbmdUZW1wbGF0ZUVudHJpZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXVzZU1hc2sgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pblggPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFggPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pblkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMsIGs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCB0ZW1wbGF0ZUxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVYW2tdID0gdGVtcGxhdGVba10ueDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVlba10gPSB0ZW1wbGF0ZVtrXS55O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCB0ZW1wbGF0ZVtrXS54KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgdGVtcGxhdGVba10ueCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIHRlbXBsYXRlW2tdLnkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPCB0ZW1wbGF0ZUxlbmd0aCAtIDEgJiYgdGVtcGxhdGVba10ueSA9PT0gdGVtcGxhdGVbayArIDFdLnkgJiYgdGVtcGxhdGVba10ueCA9PT0gdGVtcGxhdGVbayArIDFdLnggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldXNlTWFzayB8PSAxIDw8IHRlbXBsYXRlTGVuZ3RoIC0gMSAtIGs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdpbmdUZW1wbGF0ZUVudHJpZXMucHVzaChrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFuZ2luZ0VudHJpZXNMZW5ndGggPSBjaGFuZ2luZ1RlbXBsYXRlRW50cmllcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhbmdpbmdUZW1wbGF0ZVggPSBuZXcgSW50OEFycmF5KGNoYW5naW5nRW50cmllc0xlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhbmdpbmdUZW1wbGF0ZVkgPSBuZXcgSW50OEFycmF5KGNoYW5naW5nRW50cmllc0xlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhbmdpbmdUZW1wbGF0ZUJpdCA9IG5ldyBVaW50MTZBcnJheShjaGFuZ2luZ0VudHJpZXNMZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgY2hhbmdpbmdFbnRyaWVzTGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gY2hhbmdpbmdUZW1wbGF0ZUVudHJpZXNbY107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdpbmdUZW1wbGF0ZVhbY10gPSB0ZW1wbGF0ZVtrXS54O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5naW5nVGVtcGxhdGVZW2NdID0gdGVtcGxhdGVba10ueTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2luZ1RlbXBsYXRlQml0W2NdID0gMSA8PCB0ZW1wbGF0ZUxlbmd0aCAtIDEgLSBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2JiX2xlZnQgPSAtbWluWDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzYmJfdG9wID0gLW1pblk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2JiX3JpZ2h0ID0gd2lkdGggLSBtYXhYO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBzZXVkb1BpeGVsQ29udGV4dCA9IFJldXNlZENvbnRleHRzW3RlbXBsYXRlSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvdyA9IG5ldyBVaW50OEFycmF5KHdpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRtYXAgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvZGVyID0gZGVjb2RpbmdDb250ZXh0LmRlY29kZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dHMgPSBkZWNvZGluZ0NvbnRleHQuY29udGV4dENhY2hlLmdldENvbnRleHRzKCdHQicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGx0cCA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TGFiZWwgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzbHRwID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBwc2V1ZG9QaXhlbENvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdHAgXj0gc2x0cDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobHRwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAucHVzaChyb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cgPSBuZXcgVWludDhBcnJheShyb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcC5wdXNoKHJvdyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlc2tpcCAmJiBza2lwW2ldW2pdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dbal0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaiA+PSBzYmJfbGVmdCAmJiBqIDwgc2JiX3JpZ2h0ICYmIGkgPj0gc2JiX3RvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dExhYmVsID0gY29udGV4dExhYmVsIDw8IDEgJiByZXVzZU1hc2s7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBjaGFuZ2luZ0VudHJpZXNMZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkwID0gaSArIGNoYW5naW5nVGVtcGxhdGVZW2tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGowID0gaiArIGNoYW5naW5nVGVtcGxhdGVYW2tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdCA9IGJpdG1hcFtpMF1bajBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXQgPSBjaGFuZ2luZ1RlbXBsYXRlQml0W2tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TGFiZWwgfD0gYml0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRMYWJlbCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdCA9IHRlbXBsYXRlTGVuZ3RoIC0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IHRlbXBsYXRlTGVuZ3RoOyBrKyssIHNoaWZ0LS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqMCA9IGogKyB0ZW1wbGF0ZVhba107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoajAgPj0gMCAmJiBqMCA8IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkwID0gaSArIHRlbXBsYXRlWVtrXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaTAgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0ID0gYml0bWFwW2kwXVtqMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TGFiZWwgfD0gYml0IDw8IHNoaWZ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBpeGVsID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBjb250ZXh0TGFiZWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dbal0gPSBwaXhlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiaXRtYXA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWNvZGVSZWZpbmVtZW50KHdpZHRoLCBoZWlnaHQsIHRlbXBsYXRlSW5kZXgsIHJlZmVyZW5jZUJpdG1hcCwgb2Zmc2V0WCwgb2Zmc2V0WSwgcHJlZGljdGlvbiwgYXQsIGRlY29kaW5nQ29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGluZ1RlbXBsYXRlID0gUmVmaW5lbWVudFRlbXBsYXRlc1t0ZW1wbGF0ZUluZGV4XS5jb2Rpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZUluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kaW5nVGVtcGxhdGUgPSBjb2RpbmdUZW1wbGF0ZS5jb25jYXQoW2F0WzBdXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RpbmdUZW1wbGF0ZUxlbmd0aCA9IGNvZGluZ1RlbXBsYXRlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RpbmdUZW1wbGF0ZVggPSBuZXcgSW50MzJBcnJheShjb2RpbmdUZW1wbGF0ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kaW5nVGVtcGxhdGVZID0gbmV3IEludDMyQXJyYXkoY29kaW5nVGVtcGxhdGVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBjb2RpbmdUZW1wbGF0ZUxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kaW5nVGVtcGxhdGVYW2tdID0gY29kaW5nVGVtcGxhdGVba10ueDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RpbmdUZW1wbGF0ZVlba10gPSBjb2RpbmdUZW1wbGF0ZVtrXS55O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVmZXJlbmNlVGVtcGxhdGUgPSBSZWZpbmVtZW50VGVtcGxhdGVzW3RlbXBsYXRlSW5kZXhdLnJlZmVyZW5jZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBsYXRlSW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VUZW1wbGF0ZSA9IHJlZmVyZW5jZVRlbXBsYXRlLmNvbmNhdChbYXRbMV1dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlZmVyZW5jZVRlbXBsYXRlTGVuZ3RoID0gcmVmZXJlbmNlVGVtcGxhdGUubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlZmVyZW5jZVRlbXBsYXRlWCA9IG5ldyBJbnQzMkFycmF5KHJlZmVyZW5jZVRlbXBsYXRlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWZlcmVuY2VUZW1wbGF0ZVkgPSBuZXcgSW50MzJBcnJheShyZWZlcmVuY2VUZW1wbGF0ZUxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCByZWZlcmVuY2VUZW1wbGF0ZUxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlVGVtcGxhdGVYW2tdID0gcmVmZXJlbmNlVGVtcGxhdGVba10ueDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VUZW1wbGF0ZVlba10gPSByZWZlcmVuY2VUZW1wbGF0ZVtrXS55O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVmZXJlbmNlV2lkdGggPSByZWZlcmVuY2VCaXRtYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlZmVyZW5jZUhlaWdodCA9IHJlZmVyZW5jZUJpdG1hcC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHNldWRvUGl4ZWxDb250ZXh0ID0gUmVmaW5lbWVudFJldXNlZENvbnRleHRzW3RlbXBsYXRlSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdG1hcCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kZXIgPSBkZWNvZGluZ0NvbnRleHQuZGVjb2RlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZXh0cyA9IGRlY29kaW5nQ29udGV4dC5jb250ZXh0Q2FjaGUuZ2V0Q29udGV4dHMoJ0dSJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbHRwID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzbHRwID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBwc2V1ZG9QaXhlbENvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdHAgXj0gc2x0cDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobHRwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcigncHJlZGljdGlvbiBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm93ID0gbmV3IFVpbnQ4QXJyYXkod2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcC5wdXNoKHJvdyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkwLCBqMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRleHRMYWJlbCA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IGNvZGluZ1RlbXBsYXRlTGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkwID0gaSArIGNvZGluZ1RlbXBsYXRlWVtrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGowID0gaiArIGNvZGluZ1RlbXBsYXRlWFtrXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkwIDwgMCB8fCBqMCA8IDAgfHwgajAgPj0gd2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TGFiZWwgPDw9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRMYWJlbCA9IGNvbnRleHRMYWJlbCA8PCAxIHwgYml0bWFwW2kwXVtqMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgcmVmZXJlbmNlVGVtcGxhdGVMZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTAgPSBpICsgcmVmZXJlbmNlVGVtcGxhdGVZW2tdIC0gb2Zmc2V0WTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGowID0gaiArIHJlZmVyZW5jZVRlbXBsYXRlWFtrXSAtIG9mZnNldFg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpMCA8IDAgfHwgaTAgPj0gcmVmZXJlbmNlSGVpZ2h0IHx8IGowIDwgMCB8fCBqMCA+PSByZWZlcmVuY2VXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRMYWJlbCA8PD0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dExhYmVsID0gY29udGV4dExhYmVsIDw8IDEgfCByZWZlcmVuY2VCaXRtYXBbaTBdW2owXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwaXhlbCA9IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgY29udGV4dExhYmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W2pdID0gcGl4ZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYml0bWFwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlU3ltYm9sRGljdGlvbmFyeShodWZmbWFuLCByZWZpbmVtZW50LCBzeW1ib2xzLCBudW1iZXJPZk5ld1N5bWJvbHMsIG51bWJlck9mRXhwb3J0ZWRTeW1ib2xzLCBodWZmbWFuVGFibGVzLCB0ZW1wbGF0ZUluZGV4LCBhdCwgcmVmaW5lbWVudFRlbXBsYXRlSW5kZXgsIHJlZmluZW1lbnRBdCwgZGVjb2RpbmdDb250ZXh0LCBodWZmbWFuSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChodWZmbWFuICYmIHJlZmluZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcignc3ltYm9sIHJlZmluZW1lbnQgd2l0aCBIdWZmbWFuIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1N5bWJvbHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50SGVpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzeW1ib2xDb2RlTGVuZ3RoID0gKDAsIF91dGlsLmxvZzIpKHN5bWJvbHMubGVuZ3RoICsgbnVtYmVyT2ZOZXdTeW1ib2xzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvZGVyID0gZGVjb2RpbmdDb250ZXh0LmRlY29kZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dENhY2hlID0gZGVjb2RpbmdDb250ZXh0LmNvbnRleHRDYWNoZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWJsZUIxLCBzeW1ib2xXaWR0aHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChodWZmbWFuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVCMSA9IGdldFN0YW5kYXJkVGFibGUoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sV2lkdGhzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sQ29kZUxlbmd0aCA9IE1hdGgubWF4KHN5bWJvbENvZGVMZW5ndGgsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmV3U3ltYm9scy5sZW5ndGggPCBudW1iZXJPZk5ld1N5bWJvbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsdGFIZWlnaHQgPSBodWZmbWFuID8gaHVmZm1hblRhYmxlcy50YWJsZURlbHRhSGVpZ2h0LmRlY29kZShodWZmbWFuSW5wdXQpIDogZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsICdJQURIJywgZGVjb2Rlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEhlaWdodCArPSBkZWx0YUhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudFdpZHRoID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxXaWR0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0U3ltYm9sID0gaHVmZm1hbiA/IHN5bWJvbFdpZHRocy5sZW5ndGggOiAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbHRhV2lkdGggPSBodWZmbWFuID8gaHVmZm1hblRhYmxlcy50YWJsZURlbHRhV2lkdGguZGVjb2RlKGh1ZmZtYW5JbnB1dCkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgJ0lBRFcnLCBkZWNvZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVsdGFXaWR0aCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50V2lkdGggKz0gZGVsdGFXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxXaWR0aCArPSBjdXJyZW50V2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRtYXA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmluZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1iZXJPZkluc3RhbmNlcyA9IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCAnSUFBSScsIGRlY29kZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtYmVyT2ZJbnN0YW5jZXMgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwID0gZGVjb2RlVGV4dFJlZ2lvbihodWZmbWFuLCByZWZpbmVtZW50LCBjdXJyZW50V2lkdGgsIGN1cnJlbnRIZWlnaHQsIDAsIG51bWJlck9mSW5zdGFuY2VzLCAxLCBzeW1ib2xzLmNvbmNhdChuZXdTeW1ib2xzKSwgc3ltYm9sQ29kZUxlbmd0aCwgMCwgMCwgMSwgMCwgaHVmZm1hblRhYmxlcywgcmVmaW5lbWVudFRlbXBsYXRlSW5kZXgsIHJlZmluZW1lbnRBdCwgZGVjb2RpbmdDb250ZXh0LCAwLCBodWZmbWFuSW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ltYm9sSWQgPSBkZWNvZGVJQUlEKGNvbnRleHRDYWNoZSwgZGVjb2Rlciwgc3ltYm9sQ29kZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJkeCA9IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCAnSUFSRFgnLCBkZWNvZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmR5ID0gZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsICdJQVJEWScsIGRlY29kZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzeW1ib2wgPSBzeW1ib2xJZCA8IHN5bWJvbHMubGVuZ3RoID8gc3ltYm9sc1tzeW1ib2xJZF0gOiBuZXdTeW1ib2xzW3N5bWJvbElkIC0gc3ltYm9scy5sZW5ndGhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCA9IGRlY29kZVJlZmluZW1lbnQoY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0LCByZWZpbmVtZW50VGVtcGxhdGVJbmRleCwgc3ltYm9sLCByZHgsIHJkeSwgZmFsc2UsIHJlZmluZW1lbnRBdCwgZGVjb2RpbmdDb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3ltYm9scy5wdXNoKGJpdG1hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaHVmZm1hbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sV2lkdGhzLnB1c2goY3VycmVudFdpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCA9IGRlY29kZUJpdG1hcChmYWxzZSwgY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0LCB0ZW1wbGF0ZUluZGV4LCBmYWxzZSwgbnVsbCwgYXQsIGRlY29kaW5nQ29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTeW1ib2xzLnB1c2goYml0bWFwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChodWZmbWFuICYmICFyZWZpbmVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRtYXBTaXplID0gaHVmZm1hblRhYmxlcy50YWJsZUJpdG1hcFNpemUuZGVjb2RlKGh1ZmZtYW5JbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh1ZmZtYW5JbnB1dC5ieXRlQWxpZ24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbGxlY3RpdmVCaXRtYXAgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdG1hcFNpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3RpdmVCaXRtYXAgPSByZWFkVW5jb21wcmVzc2VkQml0bWFwKGh1ZmZtYW5JbnB1dCwgdG90YWxXaWR0aCwgY3VycmVudEhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3JpZ2luYWxFbmQgPSBodWZmbWFuSW5wdXQuZW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdG1hcEVuZCA9IGh1ZmZtYW5JbnB1dC5wb3NpdGlvbiArIGJpdG1hcFNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodWZmbWFuSW5wdXQuZW5kID0gYml0bWFwRW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGl2ZUJpdG1hcCA9IGRlY29kZU1NUkJpdG1hcChodWZmbWFuSW5wdXQsIHRvdGFsV2lkdGgsIGN1cnJlbnRIZWlnaHQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh1ZmZtYW5JbnB1dC5lbmQgPSBvcmlnaW5hbEVuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh1ZmZtYW5JbnB1dC5wb3NpdGlvbiA9IGJpdG1hcEVuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1iZXJPZlN5bWJvbHNEZWNvZGVkID0gc3ltYm9sV2lkdGhzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RTeW1ib2wgPT09IG51bWJlck9mU3ltYm9sc0RlY29kZWQgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTeW1ib2xzLnB1c2goY29sbGVjdGl2ZUJpdG1hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2kgPSB2b2lkIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4TWluID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4TWF4ID0gdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcFdpZHRoID0gdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbEJpdG1hcCA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChfaSA9IGZpcnN0U3ltYm9sOyBfaSA8IG51bWJlck9mU3ltYm9sc0RlY29kZWQ7IF9pKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXBXaWR0aCA9IHN5bWJvbFdpZHRoc1tfaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeE1heCA9IHhNaW4gKyBiaXRtYXBXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xCaXRtYXAgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCBjdXJyZW50SGVpZ2h0OyB5KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sQml0bWFwLnB1c2goY29sbGVjdGl2ZUJpdG1hcFt5XS5zdWJhcnJheSh4TWluLCB4TWF4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3ltYm9scy5wdXNoKHN5bWJvbEJpdG1hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeE1pbiA9IHhNYXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleHBvcnRlZFN5bWJvbHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbGFncyA9IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGbGFnID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG90YWxTeW1ib2xzTGVuZ3RoID0gc3ltYm9scy5sZW5ndGggKyBudW1iZXJPZk5ld1N5bWJvbHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChmbGFncy5sZW5ndGggPCB0b3RhbFN5bWJvbHNMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcnVuTGVuZ3RoID0gaHVmZm1hbiA/IHRhYmxlQjEuZGVjb2RlKGh1ZmZtYW5JbnB1dCkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgJ0lBRVgnLCBkZWNvZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChydW5MZW5ndGgtLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5wdXNoKGN1cnJlbnRGbGFnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmxhZyA9ICFjdXJyZW50RmxhZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gc3ltYm9scy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkU3ltYm9scy5wdXNoKHN5bWJvbHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBudW1iZXJPZk5ld1N5bWJvbHM7IGkrKywgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkU3ltYm9scy5wdXNoKG5ld1N5bWJvbHNbal0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4cG9ydGVkU3ltYm9scztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlY29kZVRleHRSZWdpb24oaHVmZm1hbiwgcmVmaW5lbWVudCwgd2lkdGgsIGhlaWdodCwgZGVmYXVsdFBpeGVsVmFsdWUsIG51bWJlck9mU3ltYm9sSW5zdGFuY2VzLCBzdHJpcFNpemUsIGlucHV0U3ltYm9scywgc3ltYm9sQ29kZUxlbmd0aCwgdHJhbnNwb3NlZCwgZHNPZmZzZXQsIHJlZmVyZW5jZUNvcm5lciwgY29tYmluYXRpb25PcGVyYXRvciwgaHVmZm1hblRhYmxlcywgcmVmaW5lbWVudFRlbXBsYXRlSW5kZXgsIHJlZmluZW1lbnRBdCwgZGVjb2RpbmdDb250ZXh0LCBsb2dTdHJpcFNpemUsIGh1ZmZtYW5JbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGh1ZmZtYW4gJiYgcmVmaW5lbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKCdyZWZpbmVtZW50IHdpdGggSHVmZm1hbiBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRtYXAgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCByb3c7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyA9IG5ldyBVaW50OEFycmF5KHdpZHRoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0UGl4ZWxWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tqXSA9IGRlZmF1bHRQaXhlbFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kZXIgPSBkZWNvZGluZ0NvbnRleHQuZGVjb2RlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZXh0Q2FjaGUgPSBkZWNvZGluZ0NvbnRleHQuY29udGV4dENhY2hlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmlwVCA9IGh1ZmZtYW4gPyAtaHVmZm1hblRhYmxlcy50YWJsZURlbHRhVC5kZWNvZGUoaHVmZm1hbklucHV0KSA6IC1kZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgJ0lBRFQnLCBkZWNvZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdFMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgbnVtYmVyT2ZTeW1ib2xJbnN0YW5jZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsdGFUID0gaHVmZm1hbiA/IGh1ZmZtYW5UYWJsZXMudGFibGVEZWx0YVQuZGVjb2RlKGh1ZmZtYW5JbnB1dCkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgJ0lBRFQnLCBkZWNvZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcFQgKz0gZGVsdGFUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWx0YUZpcnN0UyA9IGh1ZmZtYW4gPyBodWZmbWFuVGFibGVzLnRhYmxlRmlyc3RTLmRlY29kZShodWZmbWFuSW5wdXQpIDogZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsICdJQUZTJywgZGVjb2Rlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RTICs9IGRlbHRhRmlyc3RTO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50UyA9IGZpcnN0UztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRUID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaXBTaXplID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFQgPSBodWZmbWFuID8gaHVmZm1hbklucHV0LnJlYWRCaXRzKGxvZ1N0cmlwU2l6ZSkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgJ0lBSVQnLCBkZWNvZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gc3RyaXBTaXplICogc3RyaXBUICsgY3VycmVudFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzeW1ib2xJZCA9IGh1ZmZtYW4gPyBodWZmbWFuVGFibGVzLnN5bWJvbElEVGFibGUuZGVjb2RlKGh1ZmZtYW5JbnB1dCkgOiBkZWNvZGVJQUlEKGNvbnRleHRDYWNoZSwgZGVjb2Rlciwgc3ltYm9sQ29kZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcHBseVJlZmluZW1lbnQgPSByZWZpbmVtZW50ICYmIChodWZmbWFuID8gaHVmZm1hbklucHV0LnJlYWRCaXQoKSA6IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCAnSUFSSScsIGRlY29kZXIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5bWJvbEJpdG1hcCA9IGlucHV0U3ltYm9sc1tzeW1ib2xJZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzeW1ib2xXaWR0aCA9IHN5bWJvbEJpdG1hcFswXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzeW1ib2xIZWlnaHQgPSBzeW1ib2xCaXRtYXAubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcHBseVJlZmluZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZHcgPSBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgJ0lBUkRXJywgZGVjb2Rlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmRoID0gZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsICdJQVJESCcsIGRlY29kZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJkeCA9IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCAnSUFSRFgnLCBkZWNvZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZHkgPSBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgJ0lBUkRZJywgZGVjb2Rlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xXaWR0aCArPSByZHc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xIZWlnaHQgKz0gcmRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sQml0bWFwID0gZGVjb2RlUmVmaW5lbWVudChzeW1ib2xXaWR0aCwgc3ltYm9sSGVpZ2h0LCByZWZpbmVtZW50VGVtcGxhdGVJbmRleCwgc3ltYm9sQml0bWFwLCAocmR3ID4+IDEpICsgcmR4LCAocmRoID4+IDEpICsgcmR5LCBmYWxzZSwgcmVmaW5lbWVudEF0LCBkZWNvZGluZ0NvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldFQgPSB0IC0gKHJlZmVyZW5jZUNvcm5lciAmIDEgPyAwIDogc3ltYm9sSGVpZ2h0IC0gMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXRTID0gY3VycmVudFMgLSAocmVmZXJlbmNlQ29ybmVyICYgMiA/IHN5bWJvbFdpZHRoIC0gMSA6IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgczIsIHQyLCBzeW1ib2xSb3c7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zcG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoczIgPSAwOyBzMiA8IHN5bWJvbEhlaWdodDsgczIrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyA9IGJpdG1hcFtvZmZzZXRTICsgczJdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sUm93ID0gc3ltYm9sQml0bWFwW3MyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4V2lkdGggPSBNYXRoLm1pbih3aWR0aCAtIG9mZnNldFQsIHN5bWJvbFdpZHRoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY29tYmluYXRpb25PcGVyYXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHQyID0gMDsgdDIgPCBtYXhXaWR0aDsgdDIrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tvZmZzZXRUICsgdDJdIHw9IHN5bWJvbFJvd1t0Ml07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodDIgPSAwOyB0MiA8IG1heFdpZHRoOyB0MisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W29mZnNldFQgKyB0Ml0gXj0gc3ltYm9sUm93W3QyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwib3BlcmF0b3IgXCIuY29uY2F0KGNvbWJpbmF0aW9uT3BlcmF0b3IsIFwiIGlzIG5vdCBzdXBwb3J0ZWRcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFMgKz0gc3ltYm9sSGVpZ2h0IC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodDIgPSAwOyB0MiA8IHN5bWJvbEhlaWdodDsgdDIrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyA9IGJpdG1hcFtvZmZzZXRUICsgdDJdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sUm93ID0gc3ltYm9sQml0bWFwW3QyXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY29tYmluYXRpb25PcGVyYXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHMyID0gMDsgczIgPCBzeW1ib2xXaWR0aDsgczIrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tvZmZzZXRTICsgczJdIHw9IHN5bWJvbFJvd1tzMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoczIgPSAwOyBzMiA8IHN5bWJvbFdpZHRoOyBzMisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W29mZnNldFMgKyBzMl0gXj0gc3ltYm9sUm93W3MyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwib3BlcmF0b3IgXCIuY29uY2F0KGNvbWJpbmF0aW9uT3BlcmF0b3IsIFwiIGlzIG5vdCBzdXBwb3J0ZWRcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFMgKz0gc3ltYm9sV2lkdGggLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsdGFTID0gaHVmZm1hbiA/IGh1ZmZtYW5UYWJsZXMudGFibGVEZWx0YVMuZGVjb2RlKGh1ZmZtYW5JbnB1dCkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgJ0lBRFMnLCBkZWNvZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVsdGFTID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTICs9IGRlbHRhUyArIGRzT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYml0bWFwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlUGF0dGVybkRpY3Rpb25hcnkobW1yLCBwYXR0ZXJuV2lkdGgsIHBhdHRlcm5IZWlnaHQsIG1heFBhdHRlcm5JbmRleCwgdGVtcGxhdGUsIGRlY29kaW5nQ29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0ID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbW1yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IC1wYXR0ZXJuV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IC0zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogLTFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IC0yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogLTJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sbGVjdGl2ZVdpZHRoID0gKG1heFBhdHRlcm5JbmRleCArIDEpICogcGF0dGVybldpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbGxlY3RpdmVCaXRtYXAgPSBkZWNvZGVCaXRtYXAobW1yLCBjb2xsZWN0aXZlV2lkdGgsIHBhdHRlcm5IZWlnaHQsIHRlbXBsYXRlLCBmYWxzZSwgbnVsbCwgYXQsIGRlY29kaW5nQ29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF0dGVybnMgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuQml0bWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhNaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeE1heCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8PSBtYXhQYXR0ZXJuSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuQml0bWFwID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeE1pbiA9IHBhdHRlcm5XaWR0aCAqIGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeE1heCA9IHhNaW4gKyBwYXR0ZXJuV2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgcGF0dGVybkhlaWdodDsgeSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5CaXRtYXAucHVzaChjb2xsZWN0aXZlQml0bWFwW3ldLnN1YmFycmF5KHhNaW4sIHhNYXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJucy5wdXNoKHBhdHRlcm5CaXRtYXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm5zO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlSGFsZnRvbmVSZWdpb24obW1yLCBwYXR0ZXJucywgdGVtcGxhdGUsIHJlZ2lvbldpZHRoLCByZWdpb25IZWlnaHQsIGRlZmF1bHRQaXhlbFZhbHVlLCBlbmFibGVTa2lwLCBjb21iaW5hdGlvbk9wZXJhdG9yLCBncmlkV2lkdGgsIGdyaWRIZWlnaHQsIGdyaWRPZmZzZXRYLCBncmlkT2Zmc2V0WSwgZ3JpZFZlY3RvclgsIGdyaWRWZWN0b3JZLCBkZWNvZGluZ0NvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBza2lwID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuYWJsZVNraXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcignc2tpcCBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21iaW5hdGlvbk9wZXJhdG9yICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoJ29wZXJhdG9yICcgKyBjb21iaW5hdGlvbk9wZXJhdG9yICsgJyBpcyBub3Qgc3VwcG9ydGVkIGluIGhhbGZ0b25lIHJlZ2lvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVnaW9uQml0bWFwID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaiwgcm93O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVnaW9uSGVpZ2h0OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cgPSBuZXcgVWludDhBcnJheShyZWdpb25XaWR0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdFBpeGVsVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHJlZ2lvbldpZHRoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tqXSA9IGRlZmF1bHRQaXhlbFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uQml0bWFwLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bWJlck9mUGF0dGVybnMgPSBwYXR0ZXJucy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF0dGVybjAgPSBwYXR0ZXJuc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXR0ZXJuV2lkdGggPSBwYXR0ZXJuMFswXS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybkhlaWdodCA9IHBhdHRlcm4wLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRzUGVyVmFsdWUgPSAoMCwgX3V0aWwubG9nMikobnVtYmVyT2ZQYXR0ZXJucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXQgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtbXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogdGVtcGxhdGUgPD0gMSA/IDMgOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBsYXRlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogLTMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogLTJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogLTIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAtMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncmF5U2NhbGVCaXRQbGFuZXMgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbXJJbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtbXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbXJJbnB1dCA9IG5ldyBSZWFkZXIoZGVjb2RpbmdDb250ZXh0LmRhdGEsIGRlY29kaW5nQ29udGV4dC5zdGFydCwgZGVjb2RpbmdDb250ZXh0LmVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IGJpdHNQZXJWYWx1ZSAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1tcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAgPSBkZWNvZGVNTVJCaXRtYXAobW1ySW5wdXQsIGdyaWRXaWR0aCwgZ3JpZEhlaWdodCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwID0gZGVjb2RlQml0bWFwKGZhbHNlLCBncmlkV2lkdGgsIGdyaWRIZWlnaHQsIHRlbXBsYXRlLCBmYWxzZSwgc2tpcCwgYXQsIGRlY29kaW5nQ29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JheVNjYWxlQml0UGxhbmVzW2ldID0gYml0bWFwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWcsIG5nLCBiaXQsIHBhdHRlcm5JbmRleCwgcGF0dGVybkJpdG1hcCwgeCwgeSwgcGF0dGVyblJvdywgcmVnaW9uUm93O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG1nID0gMDsgbWcgPCBncmlkSGVpZ2h0OyBtZysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuZyA9IDA7IG5nIDwgZ3JpZFdpZHRoOyBuZysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5JbmRleCA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gYml0c1BlclZhbHVlIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdCA9IGdyYXlTY2FsZUJpdFBsYW5lc1tqXVttZ11bbmddIF4gYml0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybkluZGV4IHw9IGJpdCA8PCBqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybkJpdG1hcCA9IHBhdHRlcm5zW3BhdHRlcm5JbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBncmlkT2Zmc2V0WCArIG1nICogZ3JpZFZlY3RvclkgKyBuZyAqIGdyaWRWZWN0b3JYID4+IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBncmlkT2Zmc2V0WSArIG1nICogZ3JpZFZlY3RvclggLSBuZyAqIGdyaWRWZWN0b3JZID4+IDg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPj0gMCAmJiB4ICsgcGF0dGVybldpZHRoIDw9IHJlZ2lvbldpZHRoICYmIHkgPj0gMCAmJiB5ICsgcGF0dGVybkhlaWdodCA8PSByZWdpb25IZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXR0ZXJuSGVpZ2h0OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb25Sb3cgPSByZWdpb25CaXRtYXBbeSArIGldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5Sb3cgPSBwYXR0ZXJuQml0bWFwW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBhdHRlcm5XaWR0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvblJvd1t4ICsgal0gfD0gcGF0dGVyblJvd1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVnaW9uWCA9IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb25ZID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGF0dGVybkhlaWdodDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uWSA9IHkgKyBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZ2lvblkgPCAwIHx8IHJlZ2lvblkgPj0gcmVnaW9uSGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvblJvdyA9IHJlZ2lvbkJpdG1hcFtyZWdpb25ZXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuUm93ID0gcGF0dGVybkJpdG1hcFtpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwYXR0ZXJuV2lkdGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb25YID0geCArIGo7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZ2lvblggPj0gMCAmJiByZWdpb25YIDwgcmVnaW9uV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvblJvd1tyZWdpb25YXSB8PSBwYXR0ZXJuUm93W2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVnaW9uQml0bWFwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZFNlZ21lbnRIZWFkZXIoZGF0YSwgc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWdtZW50SGVhZGVyID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50SGVhZGVyLm51bWJlciA9ICgwLCBfdXRpbC5yZWFkVWludDMyKShkYXRhLCBzdGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmxhZ3MgPSBkYXRhW3N0YXJ0ICsgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VnbWVudFR5cGUgPSBmbGFncyAmIDB4M0Y7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghU2VnbWVudFR5cGVzW3NlZ21lbnRUeXBlXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKCdpbnZhbGlkIHNlZ21lbnQgdHlwZTogJyArIHNlZ21lbnRUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudEhlYWRlci50eXBlID0gc2VnbWVudFR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50SGVhZGVyLnR5cGVOYW1lID0gU2VnbWVudFR5cGVzW3NlZ21lbnRUeXBlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRIZWFkZXIuZGVmZXJyZWROb25SZXRhaW4gPSAhIShmbGFncyAmIDB4ODApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhZ2VBc3NvY2lhdGlvbkZpZWxkU2l6ZSA9ICEhKGZsYWdzICYgMHg0MCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVmZXJyZWRGbGFncyA9IGRhdGFbc3RhcnQgKyA1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWZlcnJlZFRvQ291bnQgPSByZWZlcnJlZEZsYWdzID4+IDUgJiA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldGFpbkJpdHMgPSBbcmVmZXJyZWRGbGFncyAmIDMxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHN0YXJ0ICsgNjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVycmVkRmxhZ3MgPT09IDcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcnJlZFRvQ291bnQgPSAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gLSAxKSAmIDB4MUZGRkZGRkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZXMgPSByZWZlcnJlZFRvQ291bnQgKyA3ID4+IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0YWluQml0c1swXSA9IGRhdGFbcG9zaXRpb24rK107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoLS1ieXRlcyA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0YWluQml0cy5wdXNoKGRhdGFbcG9zaXRpb24rK10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVmZXJyZWRGbGFncyA9PT0gNSB8fCByZWZlcnJlZEZsYWdzID09PSA2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoJ2ludmFsaWQgcmVmZXJyZWQtdG8gZmxhZ3MnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudEhlYWRlci5yZXRhaW5CaXRzID0gcmV0YWluQml0cztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWZlcnJlZFRvU2VnbWVudE51bWJlclNpemUgPSBzZWdtZW50SGVhZGVyLm51bWJlciA8PSAyNTYgPyAxIDogc2VnbWVudEhlYWRlci5udW1iZXIgPD0gNjU1MzYgPyAyIDogNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWZlcnJlZFRvID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaWk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCByZWZlcnJlZFRvQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1iZXIgPSByZWZlcnJlZFRvU2VnbWVudE51bWJlclNpemUgPT09IDEgPyBkYXRhW3Bvc2l0aW9uXSA6IHJlZmVycmVkVG9TZWdtZW50TnVtYmVyU2l6ZSA9PT0gMiA/ICgwLCBfdXRpbC5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbikgOiAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVycmVkVG8ucHVzaChudW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IHJlZmVycmVkVG9TZWdtZW50TnVtYmVyU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudEhlYWRlci5yZWZlcnJlZFRvID0gcmVmZXJyZWRUbztcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYWdlQXNzb2NpYXRpb25GaWVsZFNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50SGVhZGVyLnBhZ2VBc3NvY2lhdGlvbiA9IGRhdGFbcG9zaXRpb24rK107XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRIZWFkZXIucGFnZUFzc29jaWF0aW9uID0gKDAsIF91dGlsLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50SGVhZGVyLmxlbmd0aCA9ICgwLCBfdXRpbC5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSA0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudEhlYWRlci5sZW5ndGggPT09IDB4RkZGRkZGRkYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudFR5cGUgPT09IDM4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnZW5lcmljUmVnaW9uSW5mbyA9IHJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2VuZXJpY1JlZ2lvblNlZ21lbnRGbGFncyA9IGRhdGFbcG9zaXRpb24gKyBSZWdpb25TZWdtZW50SW5mb3JtYXRpb25GaWVsZExlbmd0aF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnZW5lcmljUmVnaW9uTW1yID0gISEoZ2VuZXJpY1JlZ2lvblNlZ21lbnRGbGFncyAmIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VhcmNoUGF0dGVybkxlbmd0aCA9IDY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2hQYXR0ZXJuID0gbmV3IFVpbnQ4QXJyYXkoc2VhcmNoUGF0dGVybkxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFnZW5lcmljUmVnaW9uTW1yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hQYXR0ZXJuWzBdID0gMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFBhdHRlcm5bMV0gPSAweEFDO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoUGF0dGVyblsyXSA9IGdlbmVyaWNSZWdpb25JbmZvLmhlaWdodCA+Pj4gMjQgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hQYXR0ZXJuWzNdID0gZ2VuZXJpY1JlZ2lvbkluZm8uaGVpZ2h0ID4+IDE2ICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoUGF0dGVybls0XSA9IGdlbmVyaWNSZWdpb25JbmZvLmhlaWdodCA+PiA4ICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoUGF0dGVybls1XSA9IGdlbmVyaWNSZWdpb25JbmZvLmhlaWdodCAmIDB4RkY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gcG9zaXRpb24sIGlpID0gZGF0YS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaiA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChqIDwgc2VhcmNoUGF0dGVybkxlbmd0aCAmJiBzZWFyY2hQYXR0ZXJuW2pdID09PSBkYXRhW2kgKyBqXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPT09IHNlYXJjaFBhdHRlcm5MZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50SGVhZGVyLmxlbmd0aCA9IGkgKyBzZWFyY2hQYXR0ZXJuTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnRIZWFkZXIubGVuZ3RoID09PSAweEZGRkZGRkZGKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcignc2VnbWVudCBlbmQgd2FzIG5vdCBmb3VuZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoJ2ludmFsaWQgdW5rbm93biBzZWdtZW50IGxlbmd0aCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudEhlYWRlci5oZWFkZXJFbmQgPSBwb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWdtZW50SGVhZGVyO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZFNlZ21lbnRzKGhlYWRlciwgZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlZ21lbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBzdGFydDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlZ21lbnRIZWFkZXIgPSByZWFkU2VnbWVudEhlYWRlcihkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBzZWdtZW50SGVhZGVyLmhlYWRlckVuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VnbWVudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiBzZWdtZW50SGVhZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGVhZGVyLnJhbmRvbUFjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50LnN0YXJ0ID0gcG9zaXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IHNlZ21lbnRIZWFkZXIubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50LmVuZCA9IHBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRzLnB1c2goc2VnbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudEhlYWRlci50eXBlID09PSA1MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFkZXIucmFuZG9tQWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gc2VnbWVudHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50c1tpXS5zdGFydCA9IHBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSBzZWdtZW50c1tpXS5oZWFkZXIubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50c1tpXS5lbmQgPSBwb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWdtZW50cztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oZGF0YSwgc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICgwLCBfdXRpbC5yZWFkVWludDMyKShkYXRhLCBzdGFydCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgc3RhcnQgKyA0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgc3RhcnQgKyA4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgc3RhcnQgKyAxMiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluYXRpb25PcGVyYXRvcjogZGF0YVtzdGFydCArIDE2XSAmIDdcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uRmllbGRMZW5ndGggPSAxNztcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwcm9jZXNzU2VnbWVudChzZWdtZW50LCB2aXNpdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGVyID0gc2VnbWVudC5oZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHNlZ21lbnQuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHNlZ21lbnQuc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gc2VnbWVudC5lbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncywgYXQsIGksIGF0TGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGhlYWRlci50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGljdGlvbmFyeSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGljdGlvbmFyeUZsYWdzID0gKDAsIF91dGlsLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdGlvbmFyeS5odWZmbWFuID0gISEoZGljdGlvbmFyeUZsYWdzICYgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Rpb25hcnkucmVmaW5lbWVudCA9ICEhKGRpY3Rpb25hcnlGbGFncyAmIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5Lmh1ZmZtYW5ESFNlbGVjdG9yID0gZGljdGlvbmFyeUZsYWdzID4+IDIgJiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5Lmh1ZmZtYW5EV1NlbGVjdG9yID0gZGljdGlvbmFyeUZsYWdzID4+IDQgJiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5LmJpdG1hcFNpemVTZWxlY3RvciA9IGRpY3Rpb25hcnlGbGFncyA+PiA2ICYgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdGlvbmFyeS5hZ2dyZWdhdGlvbkluc3RhbmNlc1NlbGVjdG9yID0gZGljdGlvbmFyeUZsYWdzID4+IDcgJiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5LmJpdG1hcENvZGluZ0NvbnRleHRVc2VkID0gISEoZGljdGlvbmFyeUZsYWdzICYgMjU2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdGlvbmFyeS5iaXRtYXBDb2RpbmdDb250ZXh0UmV0YWluZWQgPSAhIShkaWN0aW9uYXJ5RmxhZ3MgJiA1MTIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5LnRlbXBsYXRlID0gZGljdGlvbmFyeUZsYWdzID4+IDEwICYgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdGlvbmFyeS5yZWZpbmVtZW50VGVtcGxhdGUgPSBkaWN0aW9uYXJ5RmxhZ3MgPj4gMTIgJiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSAyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGljdGlvbmFyeS5odWZmbWFuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdExlbmd0aCA9IGRpY3Rpb25hcnkudGVtcGxhdGUgPT09IDAgPyA0IDogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0ID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhdExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6ICgwLCBfdXRpbC5yZWFkSW50OCkoZGF0YSwgcG9zaXRpb24pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAoMCwgX3V0aWwucmVhZEludDgpKGRhdGEsIHBvc2l0aW9uICsgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5LmF0ID0gYXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGljdGlvbmFyeS5yZWZpbmVtZW50ICYmICFkaWN0aW9uYXJ5LnJlZmluZW1lbnRUZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAoMCwgX3V0aWwucmVhZEludDgpKGRhdGEsIHBvc2l0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogKDAsIF91dGlsLnJlYWRJbnQ4KShkYXRhLCBwb3NpdGlvbiArIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdGlvbmFyeS5yZWZpbmVtZW50QXQgPSBhdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Rpb25hcnkubnVtYmVyT2ZFeHBvcnRlZFN5bWJvbHMgPSAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5Lm51bWJlck9mTmV3U3ltYm9scyA9ICgwLCBfdXRpbC5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBbZGljdGlvbmFyeSwgaGVhZGVyLm51bWJlciwgaGVhZGVyLnJlZmVycmVkVG8sIGRhdGEsIHBvc2l0aW9uLCBlbmRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0UmVnaW9uID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRSZWdpb24uaW5mbyA9IHJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSBSZWdpb25TZWdtZW50SW5mb3JtYXRpb25GaWVsZExlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRSZWdpb25TZWdtZW50RmxhZ3MgPSAoMCwgX3V0aWwucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UmVnaW9uLmh1ZmZtYW4gPSAhISh0ZXh0UmVnaW9uU2VnbWVudEZsYWdzICYgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRSZWdpb24ucmVmaW5lbWVudCA9ICEhKHRleHRSZWdpb25TZWdtZW50RmxhZ3MgJiAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFJlZ2lvbi5sb2dTdHJpcFNpemUgPSB0ZXh0UmVnaW9uU2VnbWVudEZsYWdzID4+IDIgJiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UmVnaW9uLnN0cmlwU2l6ZSA9IDEgPDwgdGV4dFJlZ2lvbi5sb2dTdHJpcFNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRSZWdpb24ucmVmZXJlbmNlQ29ybmVyID0gdGV4dFJlZ2lvblNlZ21lbnRGbGFncyA+PiA0ICYgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFJlZ2lvbi50cmFuc3Bvc2VkID0gISEodGV4dFJlZ2lvblNlZ21lbnRGbGFncyAmIDY0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFJlZ2lvbi5jb21iaW5hdGlvbk9wZXJhdG9yID0gdGV4dFJlZ2lvblNlZ21lbnRGbGFncyA+PiA3ICYgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFJlZ2lvbi5kZWZhdWx0UGl4ZWxWYWx1ZSA9IHRleHRSZWdpb25TZWdtZW50RmxhZ3MgPj4gOSAmIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRSZWdpb24uZHNPZmZzZXQgPSB0ZXh0UmVnaW9uU2VnbWVudEZsYWdzIDw8IDE3ID4+IDI3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UmVnaW9uLnJlZmluZW1lbnRUZW1wbGF0ZSA9IHRleHRSZWdpb25TZWdtZW50RmxhZ3MgPj4gMTUgJiAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0UmVnaW9uLmh1ZmZtYW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0UmVnaW9uSHVmZm1hbkZsYWdzID0gKDAsIF91dGlsLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UmVnaW9uLmh1ZmZtYW5GUyA9IHRleHRSZWdpb25IdWZmbWFuRmxhZ3MgJiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuRFMgPSB0ZXh0UmVnaW9uSHVmZm1hbkZsYWdzID4+IDIgJiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuRFQgPSB0ZXh0UmVnaW9uSHVmZm1hbkZsYWdzID4+IDQgJiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuUmVmaW5lbWVudERXID0gdGV4dFJlZ2lvbkh1ZmZtYW5GbGFncyA+PiA2ICYgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRSZWdpb24uaHVmZm1hblJlZmluZW1lbnRESCA9IHRleHRSZWdpb25IdWZmbWFuRmxhZ3MgPj4gOCAmIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UmVnaW9uLmh1ZmZtYW5SZWZpbmVtZW50RFggPSB0ZXh0UmVnaW9uSHVmZm1hbkZsYWdzID4+IDEwICYgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRSZWdpb24uaHVmZm1hblJlZmluZW1lbnREWSA9IHRleHRSZWdpb25IdWZmbWFuRmxhZ3MgPj4gMTIgJiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuUmVmaW5lbWVudFNpemVTZWxlY3RvciA9ICEhKHRleHRSZWdpb25IdWZmbWFuRmxhZ3MgJiAweDQwMDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRSZWdpb24ucmVmaW5lbWVudCAmJiAhdGV4dFJlZ2lvbi5yZWZpbmVtZW50VGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0ID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogKDAsIF91dGlsLnJlYWRJbnQ4KShkYXRhLCBwb3NpdGlvbiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6ICgwLCBfdXRpbC5yZWFkSW50OCkoZGF0YSwgcG9zaXRpb24gKyAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRSZWdpb24ucmVmaW5lbWVudEF0ID0gYXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UmVnaW9uLm51bWJlck9mU3ltYm9sSW5zdGFuY2VzID0gKDAsIF91dGlsLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IFt0ZXh0UmVnaW9uLCBoZWFkZXIucmVmZXJyZWRUbywgZGF0YSwgcG9zaXRpb24sIGVuZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhdHRlcm5EaWN0aW9uYXJ5ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXR0ZXJuRGljdGlvbmFyeUZsYWdzID0gZGF0YVtwb3NpdGlvbisrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybkRpY3Rpb25hcnkubW1yID0gISEocGF0dGVybkRpY3Rpb25hcnlGbGFncyAmIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuRGljdGlvbmFyeS50ZW1wbGF0ZSA9IHBhdHRlcm5EaWN0aW9uYXJ5RmxhZ3MgPj4gMSAmIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5EaWN0aW9uYXJ5LnBhdHRlcm5XaWR0aCA9IGRhdGFbcG9zaXRpb24rK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5EaWN0aW9uYXJ5LnBhdHRlcm5IZWlnaHQgPSBkYXRhW3Bvc2l0aW9uKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuRGljdGlvbmFyeS5tYXhQYXR0ZXJuSW5kZXggPSAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gW3BhdHRlcm5EaWN0aW9uYXJ5LCBoZWFkZXIubnVtYmVyLCBkYXRhLCBwb3NpdGlvbiwgZW5kXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYWxmdG9uZVJlZ2lvbiA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWxmdG9uZVJlZ2lvbi5pbmZvID0gcmVhZFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbihkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbkZpZWxkTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFsZnRvbmVSZWdpb25GbGFncyA9IGRhdGFbcG9zaXRpb24rK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbGZ0b25lUmVnaW9uLm1tciA9ICEhKGhhbGZ0b25lUmVnaW9uRmxhZ3MgJiAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFsZnRvbmVSZWdpb24udGVtcGxhdGUgPSBoYWxmdG9uZVJlZ2lvbkZsYWdzID4+IDEgJiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWxmdG9uZVJlZ2lvbi5lbmFibGVTa2lwID0gISEoaGFsZnRvbmVSZWdpb25GbGFncyAmIDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWxmdG9uZVJlZ2lvbi5jb21iaW5hdGlvbk9wZXJhdG9yID0gaGFsZnRvbmVSZWdpb25GbGFncyA+PiA0ICYgNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFsZnRvbmVSZWdpb24uZGVmYXVsdFBpeGVsVmFsdWUgPSBoYWxmdG9uZVJlZ2lvbkZsYWdzID4+IDcgJiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWxmdG9uZVJlZ2lvbi5ncmlkV2lkdGggPSAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWxmdG9uZVJlZ2lvbi5ncmlkSGVpZ2h0ID0gKDAsIF91dGlsLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFsZnRvbmVSZWdpb24uZ3JpZE9mZnNldFggPSAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pICYgMHhGRkZGRkZGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFsZnRvbmVSZWdpb24uZ3JpZE9mZnNldFkgPSAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pICYgMHhGRkZGRkZGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFsZnRvbmVSZWdpb24uZ3JpZFZlY3RvclggPSAoMCwgX3V0aWwucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWxmdG9uZVJlZ2lvbi5ncmlkVmVjdG9yWSA9ICgwLCBfdXRpbC5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBbaGFsZnRvbmVSZWdpb24sIGhlYWRlci5yZWZlcnJlZFRvLCBkYXRhLCBwb3NpdGlvbiwgZW5kXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnZW5lcmljUmVnaW9uID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyaWNSZWdpb24uaW5mbyA9IHJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSBSZWdpb25TZWdtZW50SW5mb3JtYXRpb25GaWVsZExlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdlbmVyaWNSZWdpb25TZWdtZW50RmxhZ3MgPSBkYXRhW3Bvc2l0aW9uKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmljUmVnaW9uLm1tciA9ICEhKGdlbmVyaWNSZWdpb25TZWdtZW50RmxhZ3MgJiAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJpY1JlZ2lvbi50ZW1wbGF0ZSA9IGdlbmVyaWNSZWdpb25TZWdtZW50RmxhZ3MgPj4gMSAmIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyaWNSZWdpb24ucHJlZGljdGlvbiA9ICEhKGdlbmVyaWNSZWdpb25TZWdtZW50RmxhZ3MgJiA4KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWdlbmVyaWNSZWdpb24ubW1yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdExlbmd0aCA9IGdlbmVyaWNSZWdpb24udGVtcGxhdGUgPT09IDAgPyA0IDogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0ID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhdExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6ICgwLCBfdXRpbC5yZWFkSW50OCkoZGF0YSwgcG9zaXRpb24pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAoMCwgX3V0aWwucmVhZEludDgpKGRhdGEsIHBvc2l0aW9uICsgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmljUmVnaW9uLmF0ID0gYXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gW2dlbmVyaWNSZWdpb24sIGRhdGEsIHBvc2l0aW9uLCBlbmRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWdlSW5mbyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyA0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb25YOiAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyA4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb25ZOiAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyAxMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFnZUluZm8uaGVpZ2h0ID09PSAweEZGRkZGRkZGKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFnZUluZm8uaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhZ2VTZWdtZW50RmxhZ3MgPSBkYXRhW3Bvc2l0aW9uICsgMTZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24gKyAxNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VJbmZvLmxvc3NsZXNzID0gISEocGFnZVNlZ21lbnRGbGFncyAmIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlSW5mby5yZWZpbmVtZW50ID0gISEocGFnZVNlZ21lbnRGbGFncyAmIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlSW5mby5kZWZhdWx0UGl4ZWxWYWx1ZSA9IHBhZ2VTZWdtZW50RmxhZ3MgPj4gMiAmIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VJbmZvLmNvbWJpbmF0aW9uT3BlcmF0b3IgPSBwYWdlU2VnbWVudEZsYWdzID4+IDMgJiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlSW5mby5yZXF1aXJlc0J1ZmZlciA9ICEhKHBhZ2VTZWdtZW50RmxhZ3MgJiAzMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VJbmZvLmNvbWJpbmF0aW9uT3BlcmF0b3JPdmVycmlkZSA9ICEhKHBhZ2VTZWdtZW50RmxhZ3MgJiA2NCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBbcGFnZUluZm9dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1MDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDUxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBbaGVhZGVyLm51bWJlciwgZGF0YSwgcG9zaXRpb24sIGVuZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2MjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcInNlZ21lbnQgdHlwZSBcIi5jb25jYXQoaGVhZGVyLnR5cGVOYW1lLCBcIihcIikuY29uY2F0KGhlYWRlci50eXBlLCBcIilcIikgKyAnIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2tOYW1lID0gJ29uJyArIGhlYWRlci50eXBlTmFtZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrTmFtZSBpbiB2aXNpdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvcltjYWxsYmFja05hbWVdLmFwcGx5KHZpc2l0b3IsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1NlZ21lbnRzKHNlZ21lbnRzLCB2aXNpdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBzZWdtZW50cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1NlZ21lbnQoc2VnbWVudHNbaV0sIHZpc2l0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcGFyc2VKYmlnMkNodW5rcyhjaHVua3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aXNpdG9yID0gbmV3IFNpbXBsZVNlZ21lbnRWaXNpdG9yKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGNodW5rcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rID0gY2h1bmtzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWdtZW50cyA9IHJlYWRTZWdtZW50cyh7fSwgY2h1bmsuZGF0YSwgY2h1bmsuc3RhcnQsIGNodW5rLmVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1NlZ21lbnRzKHNlZ21lbnRzLCB2aXNpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZpc2l0b3IuYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcGFyc2VKYmlnMihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IGRhdGEubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtwb3NpdGlvbl0gIT09IDB4OTcgfHwgZGF0YVtwb3NpdGlvbiArIDFdICE9PSAweDRBIHx8IGRhdGFbcG9zaXRpb24gKyAyXSAhPT0gMHg0MiB8fCBkYXRhW3Bvc2l0aW9uICsgM10gIT09IDB4MzIgfHwgZGF0YVtwb3NpdGlvbiArIDRdICE9PSAweDBEIHx8IGRhdGFbcG9zaXRpb24gKyA1XSAhPT0gMHgwQSB8fCBkYXRhW3Bvc2l0aW9uICsgNl0gIT09IDB4MUEgfHwgZGF0YVtwb3NpdGlvbiArIDddICE9PSAweDBBKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoJ3BhcnNlSmJpZzIgLSBpbnZhbGlkIGhlYWRlci4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlciA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZsYWdzID0gZGF0YVtwb3NpdGlvbisrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci5yYW5kb21BY2Nlc3MgPSAhKGZsYWdzICYgMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGZsYWdzICYgMikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIubnVtYmVyT2ZQYWdlcyA9ICgwLCBfdXRpbC5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlZ21lbnRzID0gcmVhZFNlZ21lbnRzKGhlYWRlciwgZGF0YSwgcG9zaXRpb24sIGVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmlzaXRvciA9IG5ldyBTaW1wbGVTZWdtZW50VmlzaXRvcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1NlZ21lbnRzKHNlZ21lbnRzLCB2aXNpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdmlzaXRvciRjdXJyZW50UGFnZUkgPSB2aXNpdG9yLmN1cnJlbnRQYWdlSW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IF92aXNpdG9yJGN1cnJlbnRQYWdlSS53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSBfdmlzaXRvciRjdXJyZW50UGFnZUkuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdFBhY2tlZCA9IHZpc2l0b3IuYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZ0RhdGEgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkod2lkdGggKiBoZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHEgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hc2sgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrID0gMTI4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gYml0UGFja2VkW2srK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdEYXRhW3ErK10gPSBidWZmZXIgJiBtYXNrID8gMCA6IDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayA+Pj0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nRGF0YTogaW1nRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBTaW1wbGVTZWdtZW50VmlzaXRvcigpIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgU2ltcGxlU2VnbWVudFZpc2l0b3IucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgb25QYWdlSW5mb3JtYXRpb246IGZ1bmN0aW9uIFNpbXBsZVNlZ21lbnRWaXNpdG9yX29uUGFnZUluZm9ybWF0aW9uKGluZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5mbyA9IGluZm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvd1NpemUgPSBpbmZvLndpZHRoICsgNyA+PiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkocm93U2l6ZSAqIGluZm8uaGVpZ2h0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLmRlZmF1bHRQaXhlbFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGJ1ZmZlci5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0JpdG1hcDogZnVuY3Rpb24gU2ltcGxlU2VnbWVudFZpc2l0b3JfZHJhd0JpdG1hcChyZWdpb25JbmZvLCBiaXRtYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFnZUluZm8gPSB0aGlzLmN1cnJlbnRQYWdlSW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSByZWdpb25JbmZvLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSByZWdpb25JbmZvLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm93U2l6ZSA9IHBhZ2VJbmZvLndpZHRoICsgNyA+PiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21iaW5hdGlvbk9wZXJhdG9yID0gcGFnZUluZm8uY29tYmluYXRpb25PcGVyYXRvck92ZXJyaWRlID8gcmVnaW9uSW5mby5jb21iaW5hdGlvbk9wZXJhdG9yIDogcGFnZUluZm8uY29tYmluYXRpb25PcGVyYXRvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5idWZmZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hc2swID0gMTI4ID4+IChyZWdpb25JbmZvLnggJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0MCA9IHJlZ2lvbkluZm8ueSAqIHJvd1NpemUgKyAocmVnaW9uSW5mby54ID4+IDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBqLCBtYXNrLCBvZmZzZXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbWJpbmF0aW9uT3BlcmF0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayA9IG1hc2swO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IG9mZnNldDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0bWFwW2ldW2pdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0XSB8PSBtYXNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayA+Pj0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2sgPSAxMjg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDAgKz0gcm93U2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayA9IG1hc2swO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IG9mZnNldDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0bWFwW2ldW2pdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0XSBePSBtYXNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayA+Pj0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2sgPSAxMjg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDAgKz0gcm93U2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwib3BlcmF0b3IgXCIuY29uY2F0KGNvbWJpbmF0aW9uT3BlcmF0b3IsIFwiIGlzIG5vdCBzdXBwb3J0ZWRcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkltbWVkaWF0ZUdlbmVyaWNSZWdpb246IGZ1bmN0aW9uIFNpbXBsZVNlZ21lbnRWaXNpdG9yX29uSW1tZWRpYXRlR2VuZXJpY1JlZ2lvbihyZWdpb24sIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVnaW9uSW5mbyA9IHJlZ2lvbi5pbmZvO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvZGluZ0NvbnRleHQgPSBuZXcgRGVjb2RpbmdDb250ZXh0KGRhdGEsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRtYXAgPSBkZWNvZGVCaXRtYXAocmVnaW9uLm1tciwgcmVnaW9uSW5mby53aWR0aCwgcmVnaW9uSW5mby5oZWlnaHQsIHJlZ2lvbi50ZW1wbGF0ZSwgcmVnaW9uLnByZWRpY3Rpb24sIG51bGwsIHJlZ2lvbi5hdCwgZGVjb2RpbmdDb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdCaXRtYXAocmVnaW9uSW5mbywgYml0bWFwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkltbWVkaWF0ZUxvc3NsZXNzR2VuZXJpY1JlZ2lvbjogZnVuY3Rpb24gU2ltcGxlU2VnbWVudFZpc2l0b3Jfb25JbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWdpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkltbWVkaWF0ZUdlbmVyaWNSZWdpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvblN5bWJvbERpY3Rpb25hcnk6IGZ1bmN0aW9uIFNpbXBsZVNlZ21lbnRWaXNpdG9yX29uU3ltYm9sRGljdGlvbmFyeShkaWN0aW9uYXJ5LCBjdXJyZW50U2VnbWVudCwgcmVmZXJyZWRTZWdtZW50cywgZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBodWZmbWFuVGFibGVzLCBodWZmbWFuSW5wdXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGljdGlvbmFyeS5odWZmbWFuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh1ZmZtYW5UYWJsZXMgPSBnZXRTeW1ib2xEaWN0aW9uYXJ5SHVmZm1hblRhYmxlcyhkaWN0aW9uYXJ5LCByZWZlcnJlZFNlZ21lbnRzLCB0aGlzLmN1c3RvbVRhYmxlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh1ZmZtYW5JbnB1dCA9IG5ldyBSZWFkZXIoZGF0YSwgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5bWJvbHMgPSB0aGlzLnN5bWJvbHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN5bWJvbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW1ib2xzID0gc3ltYm9scyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dFN5bWJvbHMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHJlZmVycmVkU2VnbWVudHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVmZXJyZWRTeW1ib2xzID0gc3ltYm9sc1tyZWZlcnJlZFNlZ21lbnRzW2ldXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmZXJyZWRTeW1ib2xzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFN5bWJvbHMgPSBpbnB1dFN5bWJvbHMuY29uY2F0KHJlZmVycmVkU3ltYm9scyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVjb2RpbmdDb250ZXh0ID0gbmV3IERlY29kaW5nQ29udGV4dChkYXRhLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xzW2N1cnJlbnRTZWdtZW50XSA9IGRlY29kZVN5bWJvbERpY3Rpb25hcnkoZGljdGlvbmFyeS5odWZmbWFuLCBkaWN0aW9uYXJ5LnJlZmluZW1lbnQsIGlucHV0U3ltYm9scywgZGljdGlvbmFyeS5udW1iZXJPZk5ld1N5bWJvbHMsIGRpY3Rpb25hcnkubnVtYmVyT2ZFeHBvcnRlZFN5bWJvbHMsIGh1ZmZtYW5UYWJsZXMsIGRpY3Rpb25hcnkudGVtcGxhdGUsIGRpY3Rpb25hcnkuYXQsIGRpY3Rpb25hcnkucmVmaW5lbWVudFRlbXBsYXRlLCBkaWN0aW9uYXJ5LnJlZmluZW1lbnRBdCwgZGVjb2RpbmdDb250ZXh0LCBodWZmbWFuSW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uSW1tZWRpYXRlVGV4dFJlZ2lvbjogZnVuY3Rpb24gU2ltcGxlU2VnbWVudFZpc2l0b3Jfb25JbW1lZGlhdGVUZXh0UmVnaW9uKHJlZ2lvbiwgcmVmZXJyZWRTZWdtZW50cywgZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWdpb25JbmZvID0gcmVnaW9uLmluZm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGh1ZmZtYW5UYWJsZXMsIGh1ZmZtYW5JbnB1dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ltYm9scyA9IHRoaXMuc3ltYm9scztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXRTeW1ib2xzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSByZWZlcnJlZFNlZ21lbnRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlZmVycmVkU3ltYm9scyA9IHN5bWJvbHNbcmVmZXJyZWRTZWdtZW50c1tpXV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVycmVkU3ltYm9scykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTeW1ib2xzID0gaW5wdXRTeW1ib2xzLmNvbmNhdChyZWZlcnJlZFN5bWJvbHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5bWJvbENvZGVMZW5ndGggPSAoMCwgX3V0aWwubG9nMikoaW5wdXRTeW1ib2xzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVnaW9uLmh1ZmZtYW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHVmZm1hbklucHV0ID0gbmV3IFJlYWRlcihkYXRhLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHVmZm1hblRhYmxlcyA9IGdldFRleHRSZWdpb25IdWZmbWFuVGFibGVzKHJlZ2lvbiwgcmVmZXJyZWRTZWdtZW50cywgdGhpcy5jdXN0b21UYWJsZXMsIGlucHV0U3ltYm9scy5sZW5ndGgsIGh1ZmZtYW5JbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kaW5nQ29udGV4dCA9IG5ldyBEZWNvZGluZ0NvbnRleHQoZGF0YSwgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdG1hcCA9IGRlY29kZVRleHRSZWdpb24ocmVnaW9uLmh1ZmZtYW4sIHJlZ2lvbi5yZWZpbmVtZW50LCByZWdpb25JbmZvLndpZHRoLCByZWdpb25JbmZvLmhlaWdodCwgcmVnaW9uLmRlZmF1bHRQaXhlbFZhbHVlLCByZWdpb24ubnVtYmVyT2ZTeW1ib2xJbnN0YW5jZXMsIHJlZ2lvbi5zdHJpcFNpemUsIGlucHV0U3ltYm9scywgc3ltYm9sQ29kZUxlbmd0aCwgcmVnaW9uLnRyYW5zcG9zZWQsIHJlZ2lvbi5kc09mZnNldCwgcmVnaW9uLnJlZmVyZW5jZUNvcm5lciwgcmVnaW9uLmNvbWJpbmF0aW9uT3BlcmF0b3IsIGh1ZmZtYW5UYWJsZXMsIHJlZ2lvbi5yZWZpbmVtZW50VGVtcGxhdGUsIHJlZ2lvbi5yZWZpbmVtZW50QXQsIGRlY29kaW5nQ29udGV4dCwgcmVnaW9uLmxvZ1N0cmlwU2l6ZSwgaHVmZm1hbklucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdCaXRtYXAocmVnaW9uSW5mbywgYml0bWFwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkltbWVkaWF0ZUxvc3NsZXNzVGV4dFJlZ2lvbjogZnVuY3Rpb24gU2ltcGxlU2VnbWVudFZpc2l0b3Jfb25JbW1lZGlhdGVMb3NzbGVzc1RleHRSZWdpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkltbWVkaWF0ZVRleHRSZWdpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvblBhdHRlcm5EaWN0aW9uYXJ5OiBmdW5jdGlvbiBvblBhdHRlcm5EaWN0aW9uYXJ5KGRpY3Rpb25hcnksIGN1cnJlbnRTZWdtZW50LCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhdHRlcm5zID0gdGhpcy5wYXR0ZXJucztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGF0dGVybnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXR0ZXJucyA9IHBhdHRlcm5zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kaW5nQ29udGV4dCA9IG5ldyBEZWNvZGluZ0NvbnRleHQoZGF0YSwgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybnNbY3VycmVudFNlZ21lbnRdID0gZGVjb2RlUGF0dGVybkRpY3Rpb25hcnkoZGljdGlvbmFyeS5tbXIsIGRpY3Rpb25hcnkucGF0dGVybldpZHRoLCBkaWN0aW9uYXJ5LnBhdHRlcm5IZWlnaHQsIGRpY3Rpb25hcnkubWF4UGF0dGVybkluZGV4LCBkaWN0aW9uYXJ5LnRlbXBsYXRlLCBkZWNvZGluZ0NvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uSW1tZWRpYXRlSGFsZnRvbmVSZWdpb246IGZ1bmN0aW9uIG9uSW1tZWRpYXRlSGFsZnRvbmVSZWdpb24ocmVnaW9uLCByZWZlcnJlZFNlZ21lbnRzLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhdHRlcm5zID0gdGhpcy5wYXR0ZXJuc1tyZWZlcnJlZFNlZ21lbnRzWzBdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVnaW9uSW5mbyA9IHJlZ2lvbi5pbmZvO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvZGluZ0NvbnRleHQgPSBuZXcgRGVjb2RpbmdDb250ZXh0KGRhdGEsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRtYXAgPSBkZWNvZGVIYWxmdG9uZVJlZ2lvbihyZWdpb24ubW1yLCBwYXR0ZXJucywgcmVnaW9uLnRlbXBsYXRlLCByZWdpb25JbmZvLndpZHRoLCByZWdpb25JbmZvLmhlaWdodCwgcmVnaW9uLmRlZmF1bHRQaXhlbFZhbHVlLCByZWdpb24uZW5hYmxlU2tpcCwgcmVnaW9uLmNvbWJpbmF0aW9uT3BlcmF0b3IsIHJlZ2lvbi5ncmlkV2lkdGgsIHJlZ2lvbi5ncmlkSGVpZ2h0LCByZWdpb24uZ3JpZE9mZnNldFgsIHJlZ2lvbi5ncmlkT2Zmc2V0WSwgcmVnaW9uLmdyaWRWZWN0b3JYLCByZWdpb24uZ3JpZFZlY3RvclksIGRlY29kaW5nQ29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3Qml0bWFwKHJlZ2lvbkluZm8sIGJpdG1hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgb25JbW1lZGlhdGVMb3NzbGVzc0hhbGZ0b25lUmVnaW9uOiBmdW5jdGlvbiBvbkltbWVkaWF0ZUxvc3NsZXNzSGFsZnRvbmVSZWdpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkltbWVkaWF0ZUhhbGZ0b25lUmVnaW9uLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgb25UYWJsZXM6IGZ1bmN0aW9uIG9uVGFibGVzKGN1cnJlbnRTZWdtZW50LCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1c3RvbVRhYmxlcyA9IHRoaXMuY3VzdG9tVGFibGVzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXN0b21UYWJsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXN0b21UYWJsZXMgPSBjdXN0b21UYWJsZXMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21UYWJsZXNbY3VycmVudFNlZ21lbnRdID0gZGVjb2RlVGFibGVzU2VnbWVudChkYXRhLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBIdWZmbWFuTGluZShsaW5lRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVEYXRhLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNPT0IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmFuZ2VMb3cgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJlZml4TGVuZ3RoID0gbGluZURhdGFbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yYW5nZUxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVmaXhDb2RlID0gbGluZURhdGFbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvd2VyUmFuZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc09PQiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmFuZ2VMb3cgPSBsaW5lRGF0YVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZWZpeExlbmd0aCA9IGxpbmVEYXRhWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmFuZ2VMZW5ndGggPSBsaW5lRGF0YVsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZWZpeENvZGUgPSBsaW5lRGF0YVszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG93ZXJSYW5nZSA9IGxpbmVEYXRhWzRdID09PSAnbG93ZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSHVmZm1hblRyZWVOb2RlKGxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTGVhZiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yYW5nZUxlbmd0aCA9IGxpbmUucmFuZ2VMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yYW5nZUxvdyA9IGxpbmUucmFuZ2VMb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvd2VyUmFuZ2UgPSBsaW5lLmlzTG93ZXJSYW5nZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzT09CID0gbGluZS5pc09PQjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xlYWYgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEh1ZmZtYW5UcmVlTm9kZS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZFRyZWU6IGZ1bmN0aW9uIGJ1aWxkVHJlZShsaW5lLCBzaGlmdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXQgPSBsaW5lLnByZWZpeENvZGUgPj4gc2hpZnQgJiAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNoaWZ0IDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltiaXRdID0gbmV3IEh1ZmZtYW5UcmVlTm9kZShsaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY2hpbGRyZW5bYml0XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5bYml0XSA9IG5vZGUgPSBuZXcgSHVmZm1hblRyZWVOb2RlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5idWlsZFRyZWUobGluZSwgc2hpZnQgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlTm9kZTogZnVuY3Rpb24gZGVjb2RlTm9kZShyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0xlYWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNPT0IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGh0T2Zmc2V0ID0gcmVhZGVyLnJlYWRCaXRzKHRoaXMucmFuZ2VMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yYW5nZUxvdyArICh0aGlzLmlzTG93ZXJSYW5nZSA/IC1odE9mZnNldCA6IGh0T2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY2hpbGRyZW5bcmVhZGVyLnJlYWRCaXQoKV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoJ2ludmFsaWQgSHVmZm1hbiBkYXRhJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZGVjb2RlTm9kZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEh1ZmZtYW5UYWJsZShsaW5lcywgcHJlZml4Q29kZXNEb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZWZpeENvZGVzRG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzaWduUHJlZml4Q29kZXMobGluZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvb3ROb2RlID0gbmV3IEh1ZmZtYW5UcmVlTm9kZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlpID0gbGluZXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmUucHJlZml4TGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvb3ROb2RlLmJ1aWxkVHJlZShsaW5lLCBsaW5lLnByZWZpeExlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEh1ZmZtYW5UYWJsZS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGU6IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yb290Tm9kZS5kZWNvZGVOb2RlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduUHJlZml4Q29kZXM6IGZ1bmN0aW9uIGFzc2lnblByZWZpeENvZGVzKGxpbmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmVzTGVuZ3RoID0gbGluZXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhMZW5ndGhNYXggPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4TGVuZ3RoTWF4ID0gTWF0aC5tYXgocHJlZml4TGVuZ3RoTWF4LCBsaW5lc1tpXS5wcmVmaXhMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoaXN0b2dyYW0gPSBuZXcgVWludDMyQXJyYXkocHJlZml4TGVuZ3RoTWF4ICsgMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXNMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaXN0b2dyYW1bbGluZXNbaV0ucHJlZml4TGVuZ3RoXSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50TGVuZ3RoID0gMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDb2RlID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZW1wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpc3RvZ3JhbVswXSA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudExlbmd0aCA8PSBwcmVmaXhMZW5ndGhNYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDb2RlID0gZmlyc3RDb2RlICsgaGlzdG9ncmFtW2N1cnJlbnRMZW5ndGggLSAxXSA8PCAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29kZSA9IGZpcnN0Q29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFRlbXAgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50VGVtcCA8IGxpbmVzTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZXNbY3VycmVudFRlbXBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGluZS5wcmVmaXhMZW5ndGggPT09IGN1cnJlbnRMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLnByZWZpeENvZGUgPSBjdXJyZW50Q29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29kZSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGVtcCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudExlbmd0aCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWNvZGVUYWJsZXNTZWdtZW50KGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbGFncyA9IGRhdGFbc3RhcnRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvd2VzdFZhbHVlID0gKDAsIF91dGlsLnJlYWRVaW50MzIpKGRhdGEsIHN0YXJ0ICsgMSkgJiAweEZGRkZGRkZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhpZ2hlc3RWYWx1ZSA9ICgwLCBfdXRpbC5yZWFkVWludDMyKShkYXRhLCBzdGFydCArIDUpICYgMHhGRkZGRkZGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkZXIgPSBuZXcgUmVhZGVyKGRhdGEsIHN0YXJ0ICsgOSwgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVmaXhTaXplQml0cyA9IChmbGFncyA+PiAxICYgNykgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlU2l6ZUJpdHMgPSAoZmxhZ3MgPj4gNCAmIDcpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5lcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZWZpeExlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZUxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmFuZ2VMb3cgPSBsb3dlc3RWYWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeExlbmd0aCA9IHJlYWRlci5yZWFkQml0cyhwcmVmaXhTaXplQml0cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VMZW5ndGggPSByZWFkZXIucmVhZEJpdHMocmFuZ2VTaXplQml0cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMucHVzaChuZXcgSHVmZm1hbkxpbmUoW2N1cnJlbnRSYW5nZUxvdywgcHJlZml4TGVuZ3RoLCByYW5nZUxlbmd0aCwgMF0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmFuZ2VMb3cgKz0gMSA8PCByYW5nZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGN1cnJlbnRSYW5nZUxvdyA8IGhpZ2hlc3RWYWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeExlbmd0aCA9IHJlYWRlci5yZWFkQml0cyhwcmVmaXhTaXplQml0cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKG5ldyBIdWZmbWFuTGluZShbbG93ZXN0VmFsdWUgLSAxLCBwcmVmaXhMZW5ndGgsIDMyLCAwLCAnbG93ZXInXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4TGVuZ3RoID0gcmVhZGVyLnJlYWRCaXRzKHByZWZpeFNpemVCaXRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtoaWdoZXN0VmFsdWUsIHByZWZpeExlbmd0aCwgMzIsIDBdKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhMZW5ndGggPSByZWFkZXIucmVhZEJpdHMocHJlZml4U2l6ZUJpdHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtwcmVmaXhMZW5ndGgsIDBdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSHVmZm1hblRhYmxlKGxpbmVzLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgc3RhbmRhcmRUYWJsZXNDYWNoZSA9IHt9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFN0YW5kYXJkVGFibGUobnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGUgPSBzdGFuZGFyZFRhYmxlc0NhY2hlW251bWJlcl07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmVzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbWzAsIDEsIDQsIDB4MF0sIFsxNiwgMiwgOCwgMHgyXSwgWzI3MiwgMywgMTYsIDB4Nl0sIFs2NTgwOCwgMywgMzIsIDB4N11dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbWzAsIDEsIDAsIDB4MF0sIFsxLCAyLCAwLCAweDJdLCBbMiwgMywgMCwgMHg2XSwgWzMsIDQsIDMsIDB4RV0sIFsxMSwgNSwgNiwgMHgxRV0sIFs3NSwgNiwgMzIsIDB4M0VdLCBbNiwgMHgzRl1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbWy0yNTYsIDgsIDgsIDB4RkVdLCBbMCwgMSwgMCwgMHgwXSwgWzEsIDIsIDAsIDB4Ml0sIFsyLCAzLCAwLCAweDZdLCBbMywgNCwgMywgMHhFXSwgWzExLCA1LCA2LCAweDFFXSwgWy0yNTcsIDgsIDMyLCAweEZGLCAnbG93ZXInXSwgWzc1LCA3LCAzMiwgMHg3RV0sIFs2LCAweDNFXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IFtbMSwgMSwgMCwgMHgwXSwgWzIsIDIsIDAsIDB4Ml0sIFszLCAzLCAwLCAweDZdLCBbNCwgNCwgMywgMHhFXSwgWzEyLCA1LCA2LCAweDFFXSwgWzc2LCA1LCAzMiwgMHgxRl1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbWy0yNTUsIDcsIDgsIDB4N0VdLCBbMSwgMSwgMCwgMHgwXSwgWzIsIDIsIDAsIDB4Ml0sIFszLCAzLCAwLCAweDZdLCBbNCwgNCwgMywgMHhFXSwgWzEyLCA1LCA2LCAweDFFXSwgWy0yNTYsIDcsIDMyLCAweDdGLCAnbG93ZXInXSwgWzc2LCA2LCAzMiwgMHgzRV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbWy0yMDQ4LCA1LCAxMCwgMHgxQ10sIFstMTAyNCwgNCwgOSwgMHg4XSwgWy01MTIsIDQsIDgsIDB4OV0sIFstMjU2LCA0LCA3LCAweEFdLCBbLTEyOCwgNSwgNiwgMHgxRF0sIFstNjQsIDUsIDUsIDB4MUVdLCBbLTMyLCA0LCA1LCAweEJdLCBbMCwgMiwgNywgMHgwXSwgWzEyOCwgMywgNywgMHgyXSwgWzI1NiwgMywgOCwgMHgzXSwgWzUxMiwgNCwgOSwgMHhDXSwgWzEwMjQsIDQsIDEwLCAweERdLCBbLTIwNDksIDYsIDMyLCAweDNFLCAnbG93ZXInXSwgWzIwNDgsIDYsIDMyLCAweDNGXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IFtbLTEwMjQsIDQsIDksIDB4OF0sIFstNTEyLCAzLCA4LCAweDBdLCBbLTI1NiwgNCwgNywgMHg5XSwgWy0xMjgsIDUsIDYsIDB4MUFdLCBbLTY0LCA1LCA1LCAweDFCXSwgWy0zMiwgNCwgNSwgMHhBXSwgWzAsIDQsIDUsIDB4Ql0sIFszMiwgNSwgNSwgMHgxQ10sIFs2NCwgNSwgNiwgMHgxRF0sIFsxMjgsIDQsIDcsIDB4Q10sIFsyNTYsIDMsIDgsIDB4MV0sIFs1MTIsIDMsIDksIDB4Ml0sIFsxMDI0LCAzLCAxMCwgMHgzXSwgWy0xMDI1LCA1LCAzMiwgMHgxRSwgJ2xvd2VyJ10sIFsyMDQ4LCA1LCAzMiwgMHgxRl1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbWy0xNSwgOCwgMywgMHhGQ10sIFstNywgOSwgMSwgMHgxRkNdLCBbLTUsIDgsIDEsIDB4RkRdLCBbLTMsIDksIDAsIDB4MUZEXSwgWy0yLCA3LCAwLCAweDdDXSwgWy0xLCA0LCAwLCAweEFdLCBbMCwgMiwgMSwgMHgwXSwgWzIsIDUsIDAsIDB4MUFdLCBbMywgNiwgMCwgMHgzQV0sIFs0LCAzLCA0LCAweDRdLCBbMjAsIDYsIDEsIDB4M0JdLCBbMjIsIDQsIDQsIDB4Ql0sIFszOCwgNCwgNSwgMHhDXSwgWzcwLCA1LCA2LCAweDFCXSwgWzEzNCwgNSwgNywgMHgxQ10sIFsyNjIsIDYsIDcsIDB4M0NdLCBbMzkwLCA3LCA4LCAweDdEXSwgWzY0NiwgNiwgMTAsIDB4M0RdLCBbLTE2LCA5LCAzMiwgMHgxRkUsICdsb3dlciddLCBbMTY3MCwgOSwgMzIsIDB4MUZGXSwgWzIsIDB4MV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbWy0zMSwgOCwgNCwgMHhGQ10sIFstMTUsIDksIDIsIDB4MUZDXSwgWy0xMSwgOCwgMiwgMHhGRF0sIFstNywgOSwgMSwgMHgxRkRdLCBbLTUsIDcsIDEsIDB4N0NdLCBbLTMsIDQsIDEsIDB4QV0sIFstMSwgMywgMSwgMHgyXSwgWzEsIDMsIDEsIDB4M10sIFszLCA1LCAxLCAweDFBXSwgWzUsIDYsIDEsIDB4M0FdLCBbNywgMywgNSwgMHg0XSwgWzM5LCA2LCAyLCAweDNCXSwgWzQzLCA0LCA1LCAweEJdLCBbNzUsIDQsIDYsIDB4Q10sIFsxMzksIDUsIDcsIDB4MUJdLCBbMjY3LCA1LCA4LCAweDFDXSwgWzUyMywgNiwgOCwgMHgzQ10sIFs3NzksIDcsIDksIDB4N0RdLCBbMTI5MSwgNiwgMTEsIDB4M0RdLCBbLTMyLCA5LCAzMiwgMHgxRkUsICdsb3dlciddLCBbMzMzOSwgOSwgMzIsIDB4MUZGXSwgWzIsIDB4MF1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gW1stMjEsIDcsIDQsIDB4N0FdLCBbLTUsIDgsIDAsIDB4RkNdLCBbLTQsIDcsIDAsIDB4N0JdLCBbLTMsIDUsIDAsIDB4MThdLCBbLTIsIDIsIDIsIDB4MF0sIFsyLCA1LCAwLCAweDE5XSwgWzMsIDYsIDAsIDB4MzZdLCBbNCwgNywgMCwgMHg3Q10sIFs1LCA4LCAwLCAweEZEXSwgWzYsIDIsIDYsIDB4MV0sIFs3MCwgNSwgNSwgMHgxQV0sIFsxMDIsIDYsIDUsIDB4MzddLCBbMTM0LCA2LCA2LCAweDM4XSwgWzE5OCwgNiwgNywgMHgzOV0sIFszMjYsIDYsIDgsIDB4M0FdLCBbNTgyLCA2LCA5LCAweDNCXSwgWzEwOTQsIDYsIDEwLCAweDNDXSwgWzIxMTgsIDcsIDExLCAweDdEXSwgWy0yMiwgOCwgMzIsIDB4RkUsICdsb3dlciddLCBbNDE2NiwgOCwgMzIsIDB4RkZdLCBbMiwgMHgyXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbWzEsIDEsIDAsIDB4MF0sIFsyLCAyLCAxLCAweDJdLCBbNCwgNCwgMCwgMHhDXSwgWzUsIDQsIDEsIDB4RF0sIFs3LCA1LCAxLCAweDFDXSwgWzksIDUsIDIsIDB4MURdLCBbMTMsIDYsIDIsIDB4M0NdLCBbMTcsIDcsIDIsIDB4N0FdLCBbMjEsIDcsIDMsIDB4N0JdLCBbMjksIDcsIDQsIDB4N0NdLCBbNDUsIDcsIDUsIDB4N0RdLCBbNzcsIDcsIDYsIDB4N0VdLCBbMTQxLCA3LCAzMiwgMHg3Rl1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gW1sxLCAxLCAwLCAweDBdLCBbMiwgMiwgMCwgMHgyXSwgWzMsIDMsIDEsIDB4Nl0sIFs1LCA1LCAwLCAweDFDXSwgWzYsIDUsIDEsIDB4MURdLCBbOCwgNiwgMSwgMHgzQ10sIFsxMCwgNywgMCwgMHg3QV0sIFsxMSwgNywgMSwgMHg3Ql0sIFsxMywgNywgMiwgMHg3Q10sIFsxNywgNywgMywgMHg3RF0sIFsyNSwgNywgNCwgMHg3RV0sIFs0MSwgOCwgNSwgMHhGRV0sIFs3MywgOCwgMzIsIDB4RkZdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IFtbMSwgMSwgMCwgMHgwXSwgWzIsIDMsIDAsIDB4NF0sIFszLCA0LCAwLCAweENdLCBbNCwgNSwgMCwgMHgxQ10sIFs1LCA0LCAxLCAweERdLCBbNywgMywgMywgMHg1XSwgWzE1LCA2LCAxLCAweDNBXSwgWzE3LCA2LCAyLCAweDNCXSwgWzIxLCA2LCAzLCAweDNDXSwgWzI5LCA2LCA0LCAweDNEXSwgWzQ1LCA2LCA1LCAweDNFXSwgWzc3LCA3LCA2LCAweDdFXSwgWzE0MSwgNywgMzIsIDB4N0ZdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IFtbLTIsIDMsIDAsIDB4NF0sIFstMSwgMywgMCwgMHg1XSwgWzAsIDEsIDAsIDB4MF0sIFsxLCAzLCAwLCAweDZdLCBbMiwgMywgMCwgMHg3XV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbWy0yNCwgNywgNCwgMHg3Q10sIFstOCwgNiwgMiwgMHgzQ10sIFstNCwgNSwgMSwgMHgxQ10sIFstMiwgNCwgMCwgMHhDXSwgWy0xLCAzLCAwLCAweDRdLCBbMCwgMSwgMCwgMHgwXSwgWzEsIDMsIDAsIDB4NV0sIFsyLCA0LCAwLCAweERdLCBbMywgNSwgMSwgMHgxRF0sIFs1LCA2LCAyLCAweDNEXSwgWzksIDcsIDQsIDB4N0RdLCBbLTI1LCA3LCAzMiwgMHg3RSwgJ2xvd2VyJ10sIFsyNSwgNywgMzIsIDB4N0ZdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcInN0YW5kYXJkIHRhYmxlIEIuXCIuY29uY2F0KG51bWJlciwgXCIgZG9lcyBub3QgZXhpc3RcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gbGluZXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzW2ldID0gbmV3IEh1ZmZtYW5MaW5lKGxpbmVzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUgPSBuZXcgSHVmZm1hblRhYmxlKGxpbmVzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkVGFibGVzQ2FjaGVbbnVtYmVyXSA9IHRhYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGVyKGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCA9IGVuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb24gPSBzdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnQgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJ5dGUgPSAwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgUmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRCaXQ6IGZ1bmN0aW9uIHJlYWRCaXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hpZnQgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBvc2l0aW9uID49IHRoaXMuZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcignZW5kIG9mIGRhdGEgd2hpbGUgcmVhZGluZyBiaXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJ5dGUgPSB0aGlzLmRhdGFbdGhpcy5wb3NpdGlvbisrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGlmdCA9IDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdCA9IHRoaXMuY3VycmVudEJ5dGUgPj4gdGhpcy5zaGlmdCAmIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGlmdC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiaXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEJpdHM6IGZ1bmN0aW9uIHJlYWRCaXRzKG51bUJpdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IG51bUJpdHMgLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gdGhpcy5yZWFkQml0KCkgPDwgaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVBbGlnbjogZnVuY3Rpb24gYnl0ZUFsaWduKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnQgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBvc2l0aW9uID49IHRoaXMuZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhW3RoaXMucG9zaXRpb24rK107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q3VzdG9tSHVmZm1hblRhYmxlKGluZGV4LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50SW5kZXggPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWkgPSByZWZlcnJlZFRvLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSA9IGN1c3RvbVRhYmxlc1tyZWZlcnJlZFRvW2ldXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IGN1cnJlbnRJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcignY2FuXFwndCBmaW5kIGN1c3RvbSBIdWZmbWFuIHRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRUZXh0UmVnaW9uSHVmZm1hblRhYmxlcyh0ZXh0UmVnaW9uLCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMsIG51bWJlck9mU3ltYm9scywgcmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZXMgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gMzQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVMZW5ndGggPSByZWFkZXIucmVhZEJpdHMoNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXMucHVzaChuZXcgSHVmZm1hbkxpbmUoW2ksIGNvZGVMZW5ndGgsIDAsIDBdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBydW5Db2Rlc1RhYmxlID0gbmV3IEh1ZmZtYW5UYWJsZShjb2RlcywgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZXMubGVuZ3RoID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bWJlck9mU3ltYm9sczspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlTGVuZ3RoID0gcnVuQ29kZXNUYWJsZS5kZWNvZGUocmVhZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlTGVuZ3RoID49IDMyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXBlYXRlZExlbmd0aCA9IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mUmVwZWF0cyA9IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKCdubyBwcmV2aW91cyB2YWx1ZSBpbiBzeW1ib2wgSUQgdGFibGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZlJlcGVhdHMgPSByZWFkZXIucmVhZEJpdHMoMikgKyAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdGVkTGVuZ3RoID0gY29kZXNbaSAtIDFdLnByZWZpeExlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZlJlcGVhdHMgPSByZWFkZXIucmVhZEJpdHMoMykgKyAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdGVkTGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZlJlcGVhdHMgPSByZWFkZXIucmVhZEJpdHMoNykgKyAxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRlZExlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoJ2ludmFsaWQgY29kZSBsZW5ndGggaW4gc3ltYm9sIElEIHRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbnVtYmVyT2ZSZXBlYXRzOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtpLCByZXBlYXRlZExlbmd0aCwgMCwgMF0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtpLCBjb2RlTGVuZ3RoLCAwLCAwXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuYnl0ZUFsaWduKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ltYm9sSURUYWJsZSA9IG5ldyBIdWZmbWFuVGFibGUoY29kZXMsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXN0b21JbmRleCA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVGaXJzdFMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVEZWx0YVMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVEZWx0YVQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGV4dFJlZ2lvbi5odWZmbWFuRlMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUZpcnN0UyA9IGdldFN0YW5kYXJkVGFibGUodGV4dFJlZ2lvbi5odWZmbWFuRlMgKyA2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlRmlyc3RTID0gZ2V0Q3VzdG9tSHVmZm1hblRhYmxlKGN1c3RvbUluZGV4LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21JbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKCdpbnZhbGlkIEh1ZmZtYW4gRlMgc2VsZWN0b3InKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0ZXh0UmVnaW9uLmh1ZmZtYW5EUykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZURlbHRhUyA9IGdldFN0YW5kYXJkVGFibGUodGV4dFJlZ2lvbi5odWZmbWFuRFMgKyA4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlRGVsdGFTID0gZ2V0Q3VzdG9tSHVmZm1hblRhYmxlKGN1c3RvbUluZGV4LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21JbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKCdpbnZhbGlkIEh1ZmZtYW4gRFMgc2VsZWN0b3InKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0ZXh0UmVnaW9uLmh1ZmZtYW5EVCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZURlbHRhVCA9IGdldFN0YW5kYXJkVGFibGUodGV4dFJlZ2lvbi5odWZmbWFuRFQgKyAxMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZURlbHRhVCA9IGdldEN1c3RvbUh1ZmZtYW5UYWJsZShjdXN0b21JbmRleCwgcmVmZXJyZWRUbywgY3VzdG9tVGFibGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcignaW52YWxpZCBIdWZmbWFuIERUIHNlbGVjdG9yJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0UmVnaW9uLnJlZmluZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcigncmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbElEVGFibGU6IHN5bWJvbElEVGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVGaXJzdFM6IHRhYmxlRmlyc3RTLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlRGVsdGFTOiB0YWJsZURlbHRhUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZURlbHRhVDogdGFibGVEZWx0YVRcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRTeW1ib2xEaWN0aW9uYXJ5SHVmZm1hblRhYmxlcyhkaWN0aW9uYXJ5LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXN0b21JbmRleCA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVEZWx0YUhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZURlbHRhV2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGljdGlvbmFyeS5odWZmbWFuREhTZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlRGVsdGFIZWlnaHQgPSBnZXRTdGFuZGFyZFRhYmxlKGRpY3Rpb25hcnkuaHVmZm1hbkRIU2VsZWN0b3IgKyA0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlRGVsdGFIZWlnaHQgPSBnZXRDdXN0b21IdWZmbWFuVGFibGUoY3VzdG9tSW5kZXgsIHJlZmVycmVkVG8sIGN1c3RvbVRhYmxlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoJ2ludmFsaWQgSHVmZm1hbiBESCBzZWxlY3RvcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGRpY3Rpb25hcnkuaHVmZm1hbkRXU2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZURlbHRhV2lkdGggPSBnZXRTdGFuZGFyZFRhYmxlKGRpY3Rpb25hcnkuaHVmZm1hbkRXU2VsZWN0b3IgKyAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlRGVsdGFXaWR0aCA9IGdldEN1c3RvbUh1ZmZtYW5UYWJsZShjdXN0b21JbmRleCwgcmVmZXJyZWRUbywgY3VzdG9tVGFibGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcignaW52YWxpZCBIdWZmbWFuIERXIHNlbGVjdG9yJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWJsZUJpdG1hcFNpemUsIHRhYmxlQWdncmVnYXRlSW5zdGFuY2VzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGljdGlvbmFyeS5iaXRtYXBTaXplU2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUJpdG1hcFNpemUgPSBnZXRDdXN0b21IdWZmbWFuVGFibGUoY3VzdG9tSW5kZXgsIHJlZmVycmVkVG8sIGN1c3RvbVRhYmxlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVCaXRtYXBTaXplID0gZ2V0U3RhbmRhcmRUYWJsZSgxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpY3Rpb25hcnkuYWdncmVnYXRpb25JbnN0YW5jZXNTZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQWdncmVnYXRlSW5zdGFuY2VzID0gZ2V0Q3VzdG9tSHVmZm1hblRhYmxlKGN1c3RvbUluZGV4LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUFnZ3JlZ2F0ZUluc3RhbmNlcyA9IGdldFN0YW5kYXJkVGFibGUoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVEZWx0YUhlaWdodDogdGFibGVEZWx0YUhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZURlbHRhV2lkdGg6IHRhYmxlRGVsdGFXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUJpdG1hcFNpemU6IHRhYmxlQml0bWFwU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUFnZ3JlZ2F0ZUluc3RhbmNlczogdGFibGVBZ2dyZWdhdGVJbnN0YW5jZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkVW5jb21wcmVzc2VkQml0bWFwKHJlYWRlciwgd2lkdGgsIGhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdG1hcCA9IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyA9IG5ldyBVaW50OEFycmF5KHdpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAucHVzaChyb3cpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W3hdID0gcmVhZGVyLnJlYWRCaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuYnl0ZUFsaWduKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiaXRtYXA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWNvZGVNTVJCaXRtYXAoaW5wdXQsIHdpZHRoLCBoZWlnaHQsIGVuZE9mQmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSzogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1uczogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUm93czogaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsYWNrSXMxOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZE9mQmxvY2s6IGVuZE9mQmxvY2tcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVjb2RlciA9IG5ldyBfY2NpdHQuQ0NJVFRGYXhEZWNvZGVyKGlucHV0LCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdG1hcCA9IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEJ5dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW9mID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyA9IG5ldyBVaW50OEFycmF5KHdpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAucHVzaChyb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0ID0gLTE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hpZnQgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Qnl0ZSA9IGRlY29kZXIucmVhZE5leHRDaGFyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Qnl0ZSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Qnl0ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW9mID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQgPSA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W3hdID0gY3VycmVudEJ5dGUgPj4gc2hpZnQgJiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuZE9mQmxvY2sgJiYgIWVvZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb29rRm9yRU9GTGltaXQgPSA1O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb29rRm9yRU9GTGltaXQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVjb2Rlci5yZWFkTmV4dENoYXIoKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYml0bWFwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSmJpZzJJbWFnZSgpIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgSmJpZzJJbWFnZS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNodW5rczogZnVuY3Rpb24gcGFyc2VDaHVua3MoY2h1bmtzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSmJpZzJDaHVua3MoY2h1bmtzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZTogZnVuY3Rpb24gcGFyc2UoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcGFyc2VKYmlnID0gcGFyc2VKYmlnMihkYXRhKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nRGF0YSA9IF9wYXJzZUpiaWcuaW1nRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBfcGFyc2VKYmlnLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSBfcGFyc2VKYmlnLmhlaWdodDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1nRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpiaWcySW1hZ2U7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5KYmlnMkltYWdlID0gSmJpZzJJbWFnZTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTYyICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Bcml0aG1ldGljRGVjb2RlciA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG4gICAgICAgICAgICAgICAgdmFyIFFlVGFibGUgPSBbe1xuICAgICAgICAgICAgICAgICAgICBxZTogMHg1NjAxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAxLFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAxLFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAxXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgzNDAxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAyLFxuICAgICAgICAgICAgICAgICAgICBubHBzOiA2LFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgxODAxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAzLFxuICAgICAgICAgICAgICAgICAgICBubHBzOiA5LFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgwQUMxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiA0LFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAxMixcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4MDUyMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogNSxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMjksXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDAyMjEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDM4LFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAzMyxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4NTYwMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogNyxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogNixcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMVxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4NTQwMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogOCxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMTQsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDQ4MDEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDksXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDE0LFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgzODAxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMTQsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDMwMDEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDExLFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAxNyxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4MjQwMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogMTIsXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDE4LFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgxQzAxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAxMyxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMjAsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDE2MDEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDI5LFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAyMSxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4NTYwMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogMTUsXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDE0LFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAxXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHg1NDAxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAxNixcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMTQsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDUxMDEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDE3LFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAxNSxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4NDgwMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogMTgsXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDE2LFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgzODAxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAxOSxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMTcsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDM0MDEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDIwLFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAxOCxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4MzAwMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogMjEsXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDE5LFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgyODAxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAyMixcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMTksXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDI0MDEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDIzLFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4MjIwMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogMjQsXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDIxLFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgxQzAxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAyNSxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMjIsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDE4MDEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDI2LFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAyMyxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4MTYwMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogMjcsXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDI0LFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgxNDAxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAyOCxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMjUsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDEyMDEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDI5LFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAyNixcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4MTEwMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogMzAsXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDI3LFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgwQUMxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAzMSxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMjgsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDA5QzEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDMyLFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAyOSxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4MDhBMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogMzMsXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDMwLFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgwNTIxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAzNCxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMzEsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDA0NDEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDM1LFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAzMixcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4MDJBMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogMzYsXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDMzLFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgwMjIxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAzNyxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMzQsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDAxNDEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDM4LFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAzNSxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4MDExMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogMzksXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDM2LFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgwMDg1LFxuICAgICAgICAgICAgICAgICAgICBubXBzOiA0MCxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMzcsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDAwNDksXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDQxLFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAzOCxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4MDAyNSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogNDIsXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDM5LFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgwMDE1LFxuICAgICAgICAgICAgICAgICAgICBubXBzOiA0MyxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogNDAsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDAwMDksXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDQ0LFxuICAgICAgICAgICAgICAgICAgICBubHBzOiA0MSxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4MDAwNSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogNDUsXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDQyLFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgwMDAxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiA0NSxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogNDMsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDU2MDEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDQ2LFxuICAgICAgICAgICAgICAgICAgICBubHBzOiA0NixcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH1dO1xuXG4gICAgICAgICAgICAgICAgdmFyIEFyaXRobWV0aWNEZWNvZGVyID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBcml0aG1ldGljRGVjb2RlcihkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEFyaXRobWV0aWNEZWNvZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icCA9IHN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YUVuZCA9IGVuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWdoID0gZGF0YVtzdGFydF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG93ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ5dGVJbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpZ2ggPSB0aGlzLmNoaWdoIDw8IDcgJiAweEZGRkYgfCB0aGlzLmNsb3cgPj4gOSAmIDB4N0Y7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG93ID0gdGhpcy5jbG93IDw8IDcgJiAweEZGRkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdCAtPSA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYSA9IDB4ODAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKEFyaXRobWV0aWNEZWNvZGVyLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJieXRlSW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYnl0ZUluKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJwID0gdGhpcy5icDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVticF0gPT09IDB4RkYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhW2JwICsgMV0gPiAweDhGKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG93ICs9IDB4RkYwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0ID0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnArKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3cgKz0gZGF0YVticF0gPDwgOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0ID0gNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJwID0gYnA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG93ICs9IGJwIDwgdGhpcy5kYXRhRW5kID8gZGF0YVticF0gPDwgOCA6IDB4RkYwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3QgPSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icCA9IGJwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2xvdyA+IDB4RkZGRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlnaCArPSB0aGlzLmNsb3cgPj4gMTY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3cgJj0gMHhGRkZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZWFkQml0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlYWRCaXQoY29udGV4dHMsIHBvcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3hfaW5kZXggPSBjb250ZXh0c1twb3NdID4+IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeF9tcHMgPSBjb250ZXh0c1twb3NdICYgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHFlVGFibGVJY3ggPSBRZVRhYmxlW2N4X2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHFlSWN4ID0gcWVUYWJsZUljeC5xZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gdGhpcy5hIC0gcWVJY3g7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hpZ2ggPCBxZUljeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPCBxZUljeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBxZUljeDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gY3hfbXBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN4X2luZGV4ID0gcWVUYWJsZUljeC5ubXBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gcWVJY3g7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IDEgXiBjeF9tcHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocWVUYWJsZUljeC5zd2l0Y2hGbGFnID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN4X21wcyA9IGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3hfaW5kZXggPSBxZVRhYmxlSWN4Lm5scHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWdoIC09IHFlSWN4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGEgJiAweDgwMDApICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hID0gYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3hfbXBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA8IHFlSWN4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IDEgXiBjeF9tcHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocWVUYWJsZUljeC5zd2l0Y2hGbGFnID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN4X21wcyA9IGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3hfaW5kZXggPSBxZVRhYmxlSWN4Lm5scHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBjeF9tcHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3hfaW5kZXggPSBxZVRhYmxlSWN4Lm5tcHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jdCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnl0ZUluKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPDw9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWdoID0gdGhpcy5jaGlnaCA8PCAxICYgMHhGRkZGIHwgdGhpcy5jbG93ID4+IDE1ICYgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvdyA9IHRoaXMuY2xvdyA8PCAxICYgMHhGRkZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgoYSAmIDB4ODAwMCkgPT09IDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYSA9IGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRzW3Bvc10gPSBjeF9pbmRleCA8PCAxIHwgY3hfbXBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBcml0aG1ldGljRGVjb2RlcjtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Bcml0aG1ldGljRGVjb2RlciA9IEFyaXRobWV0aWNEZWNvZGVyO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNjMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkpwZWdTdHJlYW0gPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9zdHJlYW0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3ByaW1pdGl2ZXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1NSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2pwZyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTY0KTtcblxuICAgICAgICAgICAgICAgIHZhciBKcGVnU3RyZWFtID0gZnVuY3Rpb24gSnBlZ1N0cmVhbUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEpwZWdTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCwgZGljdCwgcGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2g7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0uZ2V0Qnl0ZSgpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4RkYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnNraXAoLTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXliZUxlbmd0aCA9IG1heWJlTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWN0ID0gZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBfc3RyZWFtLkRlY29kZVN0cmVhbS5jYWxsKHRoaXMsIG1heWJlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEpwZWdTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShfc3RyZWFtLkRlY29kZVN0cmVhbS5wcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSnBlZ1N0cmVhbS5wcm90b3R5cGUsICdieXRlcycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gSnBlZ1N0cmVhbV9ieXRlcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ2J5dGVzJywgdGhpcy5zdHJlYW0uZ2V0Qnl0ZXModGhpcy5tYXliZUxlbmd0aCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBKcGVnU3RyZWFtLnByb3RvdHlwZS5lbnN1cmVCdWZmZXIgPSBmdW5jdGlvbiAocmVxdWVzdGVkKSB7fTtcblxuICAgICAgICAgICAgICAgICAgICBKcGVnU3RyZWFtLnByb3RvdHlwZS5yZWFkQmxvY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lb2YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqcGVnT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVUcmFuc2Zvcm06IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclRyYW5zZm9ybTogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kZUFyciA9IHRoaXMuZGljdC5nZXRBcnJheSgnRGVjb2RlJywgJ0QnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9yY2VSR0IgJiYgQXJyYXkuaXNBcnJheShkZWNvZGVBcnIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdHNQZXJDb21wb25lbnQgPSB0aGlzLmRpY3QuZ2V0KCdCaXRzUGVyQ29tcG9uZW50JykgfHwgODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVjb2RlQXJyTGVuZ3RoID0gZGVjb2RlQXJyLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEludDMyQXJyYXkoZGVjb2RlQXJyTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtTmVlZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heFZhbHVlID0gKDEgPDwgYml0c1BlckNvbXBvbmVudCkgLSAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWNvZGVBcnJMZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1baV0gPSAoZGVjb2RlQXJyW2kgKyAxXSAtIGRlY29kZUFycltpXSkgKiAyNTYgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1baSArIDFdID0gZGVjb2RlQXJyW2ldICogbWF4VmFsdWUgfCAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1baV0gIT09IDI1NiB8fCB0cmFuc2Zvcm1baSArIDFdICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1OZWVkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybU5lZWRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnT3B0aW9ucy5kZWNvZGVUcmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkodGhpcy5wYXJhbXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yVHJhbnNmb3JtID0gdGhpcy5wYXJhbXMuZ2V0KCdDb2xvclRyYW5zZm9ybScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoY29sb3JUcmFuc2Zvcm0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdPcHRpb25zLmNvbG9yVHJhbnNmb3JtID0gY29sb3JUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIganBlZ0ltYWdlID0gbmV3IF9qcGcuSnBlZ0ltYWdlKGpwZWdPcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdJbWFnZS5wYXJzZSh0aGlzLmJ5dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ganBlZ0ltYWdlLmdldERhdGEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLmRyYXdXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMuZHJhd0hlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZVJHQjogdGhpcy5mb3JjZVJHQixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NvdXJjZVBERjogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIEpwZWdTdHJlYW0ucHJvdG90eXBlLmdldElSID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcmNlRGF0YVNjaGVtYSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLmNyZWF0ZU9iamVjdFVSTCkodGhpcy5ieXRlcywgJ2ltYWdlL2pwZWcnLCBmb3JjZURhdGFTY2hlbWEpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKcGVnU3RyZWFtO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuSnBlZ1N0cmVhbSA9IEpwZWdTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE2NCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuSnBlZ0ltYWdlID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2KTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgSnBlZ0Vycm9yID0gZnVuY3Rpb24gSnBlZ0Vycm9yQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSnBlZ0Vycm9yKG1zZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJ0pQRUcgZXJyb3I6ICcgKyBtc2c7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBKcGVnRXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIEpwZWdFcnJvci5wcm90b3R5cGUubmFtZSA9ICdKcGVnRXJyb3InO1xuICAgICAgICAgICAgICAgICAgICBKcGVnRXJyb3IuY29uc3RydWN0b3IgPSBKcGVnRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKcGVnRXJyb3I7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEROTE1hcmtlckVycm9yID0gZnVuY3Rpb24gRE5MTWFya2VyRXJyb3JDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBETkxNYXJrZXJFcnJvcihtZXNzYWdlLCBzY2FuTGluZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjYW5MaW5lcyA9IHNjYW5MaW5lcztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEROTE1hcmtlckVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBETkxNYXJrZXJFcnJvci5wcm90b3R5cGUubmFtZSA9ICdETkxNYXJrZXJFcnJvcic7XG4gICAgICAgICAgICAgICAgICAgIEROTE1hcmtlckVycm9yLmNvbnN0cnVjdG9yID0gRE5MTWFya2VyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBETkxNYXJrZXJFcnJvcjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgRU9JTWFya2VyRXJyb3IgPSBmdW5jdGlvbiBFT0lNYXJrZXJFcnJvckNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEVPSU1hcmtlckVycm9yKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBFT0lNYXJrZXJFcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgRU9JTWFya2VyRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnRU9JTWFya2VyRXJyb3InO1xuICAgICAgICAgICAgICAgICAgICBFT0lNYXJrZXJFcnJvci5jb25zdHJ1Y3RvciA9IEVPSU1hcmtlckVycm9yO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU9JTWFya2VyRXJyb3I7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEpwZWdJbWFnZSA9IGZ1bmN0aW9uIEpwZWdJbWFnZUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkY3RaaWdaYWcgPSBuZXcgVWludDhBcnJheShbMCwgMSwgOCwgMTYsIDksIDIsIDMsIDEwLCAxNywgMjQsIDMyLCAyNSwgMTgsIDExLCA0LCA1LCAxMiwgMTksIDI2LCAzMywgNDAsIDQ4LCA0MSwgMzQsIDI3LCAyMCwgMTMsIDYsIDcsIDE0LCAyMSwgMjgsIDM1LCA0MiwgNDksIDU2LCA1NywgNTAsIDQzLCAzNiwgMjksIDIyLCAxNSwgMjMsIDMwLCAzNywgNDQsIDUxLCA1OCwgNTksIDUyLCA0NSwgMzgsIDMxLCAzOSwgNDYsIDUzLCA2MCwgNjEsIDU0LCA0NywgNTUsIDYyLCA2M10pO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGN0Q29zMSA9IDQwMTc7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkY3RTaW4xID0gNzk5O1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGN0Q29zMyA9IDM0MDY7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkY3RTaW4zID0gMjI3NjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRjdENvczYgPSAxNTY3O1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGN0U2luNiA9IDM3ODQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkY3RTcXJ0MiA9IDU3OTM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkY3RTcXJ0MWQyID0gMjg5NjtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBKcGVnSW1hZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZiRkZWNvZGVUcmFuc2Zvcm0gPSBfcmVmLmRlY29kZVRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVUcmFuc2Zvcm0gPSBfcmVmJGRlY29kZVRyYW5zZm9ybSA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYkZGVjb2RlVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYkY29sb3JUcmFuc2Zvcm0gPSBfcmVmLmNvbG9yVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yVHJhbnNmb3JtID0gX3JlZiRjb2xvclRyYW5zZm9ybSA9PT0gdm9pZCAwID8gLTEgOiBfcmVmJGNvbG9yVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWNvZGVUcmFuc2Zvcm0gPSBkZWNvZGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb2xvclRyYW5zZm9ybSA9IGNvbG9yVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYnVpbGRIdWZmbWFuVGFibGUoY29kZUxlbmd0aHMsIHZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGsgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGosXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gMTY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChsZW5ndGggPiAwICYmICFjb2RlTGVuZ3Roc1tsZW5ndGggLSAxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogMFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IGNvZGVbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvZGVMZW5ndGhzW2ldOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGNvZGUucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuY2hpbGRyZW5bcC5pbmRleF0gPSB2YWx1ZXNba107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAuaW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gY29kZS5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuaW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZS5wdXNoKHApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjb2RlLmxlbmd0aCA8PSBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLnB1c2gocSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5jaGlsZHJlbltwLmluZGV4XSA9IHEuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gcTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSArIDEgPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZS5wdXNoKHEgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5jaGlsZHJlbltwLmluZGV4XSA9IHEuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVbMF0uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRCbG9ja0J1ZmZlck9mZnNldChjb21wb25lbnQsIHJvdywgY29sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNjQgKiAoKGNvbXBvbmVudC5ibG9ja3NQZXJMaW5lICsgMSkgKiByb3cgKyBjb2wpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlU2NhbihkYXRhLCBvZmZzZXQsIGZyYW1lLCBjb21wb25lbnRzLCByZXNldEludGVydmFsLCBzcGVjdHJhbFN0YXJ0LCBzcGVjdHJhbEVuZCwgc3VjY2Vzc2l2ZVByZXYsIHN1Y2Nlc3NpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZUROTE1hcmtlciA9IGFyZ3VtZW50cy5sZW5ndGggPiA5ICYmIGFyZ3VtZW50c1s5XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzldIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWN1c1BlckxpbmUgPSBmcmFtZS5tY3VzUGVyTGluZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9ncmVzc2l2ZSA9IGZyYW1lLnByb2dyZXNzaXZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0T2Zmc2V0ID0gb2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNEYXRhID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzQ291bnQgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkQml0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRzQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNDb3VudC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYml0c0RhdGEgPj4gYml0c0NvdW50ICYgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzRGF0YSA9IGRhdGFbb2Zmc2V0KytdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdHNEYXRhID09PSAweEZGKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0Qnl0ZSA9IGRhdGFbb2Zmc2V0KytdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0Qnl0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRCeXRlID09PSAweERDICYmIHBhcnNlRE5MTWFya2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYW5MaW5lcyA9IGRhdGFbb2Zmc2V0KytdIDw8IDggfCBkYXRhW29mZnNldCsrXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2FuTGluZXMgPiAwICYmIHNjYW5MaW5lcyAhPT0gZnJhbWUuc2NhbkxpbmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBETkxNYXJrZXJFcnJvcignRm91bmQgRE5MIG1hcmtlciAoMHhGRkRDKSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YScsIHNjYW5MaW5lcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuZXh0Qnl0ZSA9PT0gMHhEOSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFT0lNYXJrZXJFcnJvcignRm91bmQgRU9JIG1hcmtlciAoMHhGRkQ5KSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSnBlZ0Vycm9yKFwidW5leHBlY3RlZCBtYXJrZXIgXCIuY29uY2F0KChiaXRzRGF0YSA8PCA4IHwgbmV4dEJ5dGUpLnRvU3RyaW5nKDE2KSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c0NvdW50ID0gNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYml0c0RhdGEgPj4+IDc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlY29kZUh1ZmZtYW4odHJlZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gdHJlZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlW3JlYWRCaXQoKV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBub2RlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3R5cGVvZihub2RlKSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKcGVnRXJyb3IoJ2ludmFsaWQgaHVmZm1hbiBzZXF1ZW5jZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWNlaXZlKGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChsZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuIDw8IDEgfCByZWFkQml0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWNlaXZlQW5kRXh0ZW5kKGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRCaXQoKSA9PT0gMSA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IHJlY2VpdmUobGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID49IDEgPDwgbGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiArICgtMSA8PCBsZW5ndGgpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlQmFzZWxpbmUoY29tcG9uZW50LCBvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IGRlY29kZUh1ZmZtYW4oY29tcG9uZW50Lmh1ZmZtYW5UYWJsZURDKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlmZiA9IHQgPT09IDAgPyAwIDogcmVjZWl2ZUFuZEV4dGVuZCh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldF0gPSBjb21wb25lbnQucHJlZCArPSBkaWZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChrIDwgNjQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJzID0gZGVjb2RlSHVmZm1hbihjb21wb25lbnQuaHVmZm1hblRhYmxlQUMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IHJzICYgMTUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gcnMgPj4gNDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPCAxNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrICs9IDE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrICs9IHI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB6ID0gZGN0WmlnWmFnW2tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldCArIHpdID0gcmVjZWl2ZUFuZEV4dGVuZChzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlRENGaXJzdChjb21wb25lbnQsIG9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gZGVjb2RlSHVmZm1hbihjb21wb25lbnQuaHVmZm1hblRhYmxlREMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWZmID0gdCA9PT0gMCA/IDAgOiByZWNlaXZlQW5kRXh0ZW5kKHQpIDw8IHN1Y2Nlc3NpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmJsb2NrRGF0YVtvZmZzZXRdID0gY29tcG9uZW50LnByZWQgKz0gZGlmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlRENTdWNjZXNzaXZlKGNvbXBvbmVudCwgb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmJsb2NrRGF0YVtvZmZzZXRdIHw9IHJlYWRCaXQoKSA8PCBzdWNjZXNzaXZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW9icnVuID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlQUNGaXJzdChjb21wb25lbnQsIG9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlb2JydW4gPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVvYnJ1bi0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGsgPSBzcGVjdHJhbFN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gc3BlY3RyYWxFbmQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoayA8PSBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBycyA9IGRlY29kZUh1ZmZtYW4oY29tcG9uZW50Lmh1ZmZtYW5UYWJsZUFDKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSBycyAmIDE1LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IHJzID4+IDQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyIDwgMTUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlb2JydW4gPSByZWNlaXZlKHIpICsgKDEgPDwgcikgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrICs9IDE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrICs9IHI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB6ID0gZGN0WmlnWmFnW2tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldCArIHpdID0gcmVjZWl2ZUFuZEV4dGVuZChzKSAqICgxIDw8IHN1Y2Nlc3NpdmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VjY2Vzc2l2ZUFDU3RhdGUgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NpdmVBQ05leHRWYWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlQUNTdWNjZXNzaXZlKGNvbXBvbmVudCwgb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGsgPSBzcGVjdHJhbFN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gc3BlY3RyYWxFbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBycztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChrIDw9IGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldFogPSBvZmZzZXQgKyBkY3RaaWdaYWdba107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaWduID0gY29tcG9uZW50LmJsb2NrRGF0YVtvZmZzZXRaXSA8IDAgPyAtMSA6IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdWNjZXNzaXZlQUNTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzID0gZGVjb2RlSHVmZm1hbihjb21wb25lbnQuaHVmZm1hblRhYmxlQUMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBycyAmIDE1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBycyA+PiA0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPCAxNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW9icnVuID0gcmVjZWl2ZShyKSArICgxIDw8IHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2l2ZUFDU3RhdGUgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IDE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2l2ZUFDU3RhdGUgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgIT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKcGVnRXJyb3IoJ2ludmFsaWQgQUNuIGVuY29kaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzaXZlQUNOZXh0VmFsdWUgPSByZWNlaXZlQW5kRXh0ZW5kKHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzaXZlQUNTdGF0ZSA9IHIgPyAyIDogMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5ibG9ja0RhdGFbb2Zmc2V0Wl0gKz0gc2lnbiAqIChyZWFkQml0KCkgPDwgc3VjY2Vzc2l2ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0tO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzaXZlQUNTdGF0ZSA9IHN1Y2Nlc3NpdmVBQ1N0YXRlID09PSAyID8gMyA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5ibG9ja0RhdGFbb2Zmc2V0Wl0gKz0gc2lnbiAqIChyZWFkQml0KCkgPDwgc3VjY2Vzc2l2ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmJsb2NrRGF0YVtvZmZzZXRaXSA9IHN1Y2Nlc3NpdmVBQ05leHRWYWx1ZSA8PCBzdWNjZXNzaXZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzaXZlQUNTdGF0ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50LmJsb2NrRGF0YVtvZmZzZXRaXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdICs9IHNpZ24gKiAocmVhZEJpdCgpIDw8IHN1Y2Nlc3NpdmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzaXZlQUNTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlb2JydW4tLTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW9icnVuID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzaXZlQUNTdGF0ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlY29kZU1jdShjb21wb25lbnQsIGRlY29kZSwgbWN1LCByb3csIGNvbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtY3VSb3cgPSBtY3UgLyBtY3VzUGVyTGluZSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1jdUNvbCA9IG1jdSAlIG1jdXNQZXJMaW5lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBibG9ja1JvdyA9IG1jdVJvdyAqIGNvbXBvbmVudC52ICsgcm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBibG9ja0NvbCA9IG1jdUNvbCAqIGNvbXBvbmVudC5oICsgY29sO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBnZXRCbG9ja0J1ZmZlck9mZnNldChjb21wb25lbnQsIGJsb2NrUm93LCBibG9ja0NvbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlKGNvbXBvbmVudCwgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlQmxvY2soY29tcG9uZW50LCBkZWNvZGUsIG1jdSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBibG9ja1JvdyA9IG1jdSAvIGNvbXBvbmVudC5ibG9ja3NQZXJMaW5lIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmxvY2tDb2wgPSBtY3UgJSBjb21wb25lbnQuYmxvY2tzUGVyTGluZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gZ2V0QmxvY2tCdWZmZXJPZmZzZXQoY29tcG9uZW50LCBibG9ja1JvdywgYmxvY2tDb2wpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZShjb21wb25lbnQsIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnRzTGVuZ3RoID0gY29tcG9uZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50LCBpLCBqLCBrLCBuO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kZUZuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3NpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BlY3RyYWxTdGFydCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVGbiA9IHN1Y2Nlc3NpdmVQcmV2ID09PSAwID8gZGVjb2RlRENGaXJzdCA6IGRlY29kZURDU3VjY2Vzc2l2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVGbiA9IHN1Y2Nlc3NpdmVQcmV2ID09PSAwID8gZGVjb2RlQUNGaXJzdCA6IGRlY29kZUFDU3VjY2Vzc2l2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZUZuID0gZGVjb2RlQmFzZWxpbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtY3UgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVNYXJrZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWN1RXhwZWN0ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnRzTGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWN1RXhwZWN0ZWQgPSBjb21wb25lbnRzWzBdLmJsb2Nrc1BlckxpbmUgKiBjb21wb25lbnRzWzBdLmJsb2Nrc1BlckNvbHVtbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWN1RXhwZWN0ZWQgPSBtY3VzUGVyTGluZSAqIGZyYW1lLm1jdXNQZXJDb2x1bW47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoLCB2O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobWN1IDwgbWN1RXhwZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWN1VG9SZWFkID0gcmVzZXRJbnRlcnZhbCA/IE1hdGgubWluKG1jdUV4cGVjdGVkIC0gbWN1LCByZXNldEludGVydmFsKSA6IG1jdUV4cGVjdGVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbXBvbmVudHNMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzW2ldLnByZWQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVvYnJ1biA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50c0xlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnRzWzBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBtY3VUb1JlYWQ7IG4rKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlQmxvY2soY29tcG9uZW50LCBkZWNvZGVGbiwgbWN1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1jdSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gMDsgbiA8IG1jdVRvUmVhZDsgbisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29tcG9uZW50c0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gY29tcG9uZW50Lmg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IGNvbXBvbmVudC52O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHY7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgaDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVNY3UoY29tcG9uZW50LCBkZWNvZGVGbiwgbWN1LCBqLCBrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWN1Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVNYXJrZXIgPSBmaW5kTmV4dEZpbGVNYXJrZXIoZGF0YSwgb2Zmc2V0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlTWFya2VyICYmIGZpbGVNYXJrZXIuaW52YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ2RlY29kZVNjYW4gLSB1bmV4cGVjdGVkIE1DVSBkYXRhLCBjdXJyZW50IG1hcmtlciBpczogJyArIGZpbGVNYXJrZXIuaW52YWxpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGZpbGVNYXJrZXIub2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXIgPSBmaWxlTWFya2VyICYmIGZpbGVNYXJrZXIubWFya2VyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXJrZXIgfHwgbWFya2VyIDw9IDB4RkYwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSnBlZ0Vycm9yKCdtYXJrZXIgd2FzIG5vdCBmb3VuZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXJrZXIgPj0gMHhGRkQwICYmIG1hcmtlciA8PSAweEZGRDcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTWFya2VyID0gZmluZE5leHRGaWxlTWFya2VyKGRhdGEsIG9mZnNldCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlTWFya2VyICYmIGZpbGVNYXJrZXIuaW52YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnZGVjb2RlU2NhbiAtIHVuZXhwZWN0ZWQgU2NhbiBkYXRhLCBjdXJyZW50IG1hcmtlciBpczogJyArIGZpbGVNYXJrZXIuaW52YWxpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gZmlsZU1hcmtlci5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXQgLSBzdGFydE9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHF1YW50aXplQW5kSW52ZXJzZShjb21wb25lbnQsIGJsb2NrQnVmZmVyT2Zmc2V0LCBwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXQgPSBjb21wb25lbnQucXVhbnRpemF0aW9uVGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhID0gY29tcG9uZW50LmJsb2NrRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2MCwgdjEsIHYyLCB2MywgdjQsIHY1LCB2Niwgdjc7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcDAsIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYsIHA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSnBlZ0Vycm9yKCdtaXNzaW5nIHJlcXVpcmVkIFF1YW50aXphdGlvbiBUYWJsZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgNjQ7IHJvdyArPSA4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDAgPSBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyByb3ddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAxID0gYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgcm93ICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDIgPSBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyByb3cgKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMyA9IGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIHJvdyArIDNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHA0ID0gYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgcm93ICsgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDUgPSBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyByb3cgKyA1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwNiA9IGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIHJvdyArIDZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHA3ID0gYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgcm93ICsgN107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDAgKj0gcXRbcm93XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocDEgfCBwMiB8IHAzIHwgcDQgfCBwNSB8IHA2IHwgcDcpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBkY3RTcXJ0MiAqIHAwICsgNTEyID4+IDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW3Jvd10gPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW3JvdyArIDFdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFtyb3cgKyAyXSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBbcm93ICsgM10gPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW3JvdyArIDRdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFtyb3cgKyA1XSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBbcm93ICsgNl0gPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW3JvdyArIDddID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDEgKj0gcXRbcm93ICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDIgKj0gcXRbcm93ICsgMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDMgKj0gcXRbcm93ICsgM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDQgKj0gcXRbcm93ICsgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDUgKj0gcXRbcm93ICsgNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDYgKj0gcXRbcm93ICsgNl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDcgKj0gcXRbcm93ICsgN107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjAgPSBkY3RTcXJ0MiAqIHAwICsgMTI4ID4+IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjEgPSBkY3RTcXJ0MiAqIHA0ICsgMTI4ID4+IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjIgPSBwMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2MyA9IHA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY0ID0gZGN0U3FydDFkMiAqIChwMSAtIHA3KSArIDEyOCA+PiA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY3ID0gZGN0U3FydDFkMiAqIChwMSArIHA3KSArIDEyOCA+PiA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY1ID0gcDMgPDwgNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2NiA9IHA1IDw8IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjAgPSB2MCArIHYxICsgMSA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYxID0gdjAgLSB2MTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gdjIgKiBkY3RTaW42ICsgdjMgKiBkY3RDb3M2ICsgMTI4ID4+IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjIgPSB2MiAqIGRjdENvczYgLSB2MyAqIGRjdFNpbjYgKyAxMjggPj4gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2MyA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjQgPSB2NCArIHY2ICsgMSA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY2ID0gdjQgLSB2NjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2NyA9IHY3ICsgdjUgKyAxID4+IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjUgPSB2NyAtIHY1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYwID0gdjAgKyB2MyArIDEgPj4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2MyA9IHYwIC0gdjM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjEgPSB2MSArIHYyICsgMSA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYyID0gdjEgLSB2MjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gdjQgKiBkY3RTaW4zICsgdjcgKiBkY3RDb3MzICsgMjA0OCA+PiAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2NCA9IHY0ICogZGN0Q29zMyAtIHY3ICogZGN0U2luMyArIDIwNDggPj4gMTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjcgPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB2NSAqIGRjdFNpbjEgKyB2NiAqIGRjdENvczEgKyAyMDQ4ID4+IDEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY1ID0gdjUgKiBkY3RDb3MxIC0gdjYgKiBkY3RTaW4xICsgMjA0OCA+PiAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2NiA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcFtyb3ddID0gdjAgKyB2NztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW3JvdyArIDddID0gdjAgLSB2NztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW3JvdyArIDFdID0gdjEgKyB2NjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW3JvdyArIDZdID0gdjEgLSB2NjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW3JvdyArIDJdID0gdjIgKyB2NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW3JvdyArIDVdID0gdjIgLSB2NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW3JvdyArIDNdID0gdjMgKyB2NDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW3JvdyArIDRdID0gdjMgLSB2NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgY29sID0gMDsgY29sIDwgODsgKytjb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMCA9IHBbY29sXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMSA9IHBbY29sICsgOF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDIgPSBwW2NvbCArIDE2XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMyA9IHBbY29sICsgMjRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHA0ID0gcFtjb2wgKyAzMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDUgPSBwW2NvbCArIDQwXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwNiA9IHBbY29sICsgNDhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHA3ID0gcFtjb2wgKyA1Nl07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHAxIHwgcDIgfCBwMyB8IHA0IHwgcDUgfCBwNiB8IHA3KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gZGN0U3FydDIgKiBwMCArIDgxOTIgPj4gMTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB0IDwgLTIwNDAgPyAwIDogdCA+PSAyMDI0ID8gMjU1IDogdCArIDIwNTYgPj4gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sXSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIGNvbCArIDhdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgMTZdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgMjRdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgMzJdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgNDBdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgNDhdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgNTZdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjAgPSBkY3RTcXJ0MiAqIHAwICsgMjA0OCA+PiAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2MSA9IGRjdFNxcnQyICogcDQgKyAyMDQ4ID4+IDEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYyID0gcDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjMgPSBwNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2NCA9IGRjdFNxcnQxZDIgKiAocDEgLSBwNykgKyAyMDQ4ID4+IDEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY3ID0gZGN0U3FydDFkMiAqIChwMSArIHA3KSArIDIwNDggPj4gMTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjUgPSBwMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2NiA9IHA1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYwID0gKHYwICsgdjEgKyAxID4+IDEpICsgNDExMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2MSA9IHYwIC0gdjE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHYyICogZGN0U2luNiArIHYzICogZGN0Q29zNiArIDIwNDggPj4gMTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjIgPSB2MiAqIGRjdENvczYgLSB2MyAqIGRjdFNpbjYgKyAyMDQ4ID4+IDEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYzID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2NCA9IHY0ICsgdjYgKyAxID4+IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjYgPSB2NCAtIHY2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY3ID0gdjcgKyB2NSArIDEgPj4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2NSA9IHY3IC0gdjU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjAgPSB2MCArIHYzICsgMSA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYzID0gdjAgLSB2MztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2MSA9IHYxICsgdjIgKyAxID4+IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjIgPSB2MSAtIHYyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB2NCAqIGRjdFNpbjMgKyB2NyAqIGRjdENvczMgKyAyMDQ4ID4+IDEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY0ID0gdjQgKiBkY3RDb3MzIC0gdjcgKiBkY3RTaW4zICsgMjA0OCA+PiAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2NyA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHY1ICogZGN0U2luMSArIHY2ICogZGN0Q29zMSArIDIwNDggPj4gMTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjUgPSB2NSAqIGRjdENvczEgLSB2NiAqIGRjdFNpbjEgKyAyMDQ4ID4+IDEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY2ID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMCA9IHYwICsgdjc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDcgPSB2MCAtIHY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAxID0gdjEgKyB2NjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwNiA9IHYxIC0gdjY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDIgPSB2MiArIHY1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHA1ID0gdjIgLSB2NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMyA9IHYzICsgdjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDQgPSB2MyAtIHY0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAwID0gcDAgPCAxNiA/IDAgOiBwMCA+PSA0MDgwID8gMjU1IDogcDAgPj4gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMSA9IHAxIDwgMTYgPyAwIDogcDEgPj0gNDA4MCA/IDI1NSA6IHAxID4+IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDIgPSBwMiA8IDE2ID8gMCA6IHAyID49IDQwODAgPyAyNTUgOiBwMiA+PiA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAzID0gcDMgPCAxNiA/IDAgOiBwMyA+PSA0MDgwID8gMjU1IDogcDMgPj4gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwNCA9IHA0IDwgMTYgPyAwIDogcDQgPj0gNDA4MCA/IDI1NSA6IHA0ID4+IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDUgPSBwNSA8IDE2ID8gMCA6IHA1ID49IDQwODAgPyAyNTUgOiBwNSA+PiA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHA2ID0gcDYgPCAxNiA/IDAgOiBwNiA+PSA0MDgwID8gMjU1IDogcDYgPj4gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwNyA9IHA3IDwgMTYgPyAwIDogcDcgPj0gNDA4MCA/IDI1NSA6IHA3ID4+IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sXSA9IHAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIGNvbCArIDhdID0gcDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgMTZdID0gcDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgMjRdID0gcDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgMzJdID0gcDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgNDBdID0gcDU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgNDhdID0gcDY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgNTZdID0gcDc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBidWlsZENvbXBvbmVudERhdGEoZnJhbWUsIGNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2Nrc1BlckxpbmUgPSBjb21wb25lbnQuYmxvY2tzUGVyTGluZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBibG9ja3NQZXJDb2x1bW4gPSBjb21wb25lbnQuYmxvY2tzUGVyQ29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXB1dGF0aW9uQnVmZmVyID0gbmV3IEludDE2QXJyYXkoNjQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBibG9ja1JvdyA9IDA7IGJsb2NrUm93IDwgYmxvY2tzUGVyQ29sdW1uOyBibG9ja1JvdysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYmxvY2tDb2wgPSAwOyBibG9ja0NvbCA8IGJsb2Nrc1BlckxpbmU7IGJsb2NrQ29sKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IGdldEJsb2NrQnVmZmVyT2Zmc2V0KGNvbXBvbmVudCwgYmxvY2tSb3csIGJsb2NrQ29sKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpemVBbmRJbnZlcnNlKGNvbXBvbmVudCwgb2Zmc2V0LCBjb21wdXRhdGlvbkJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9uZW50LmJsb2NrRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZpbmROZXh0RmlsZU1hcmtlcihkYXRhLCBjdXJyZW50UG9zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRQb3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGN1cnJlbnRQb3M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBlZWtVaW50MTYocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFbcG9zXSA8PCA4IHwgZGF0YVtwb3MgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heFBvcyA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdQb3MgPSBzdGFydFBvcyA8IGN1cnJlbnRQb3MgPyBzdGFydFBvcyA6IGN1cnJlbnRQb3M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UG9zID49IG1heFBvcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudE1hcmtlciA9IHBlZWtVaW50MTYoY3VycmVudFBvcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50TWFya2VyID49IDB4RkZDMCAmJiBjdXJyZW50TWFya2VyIDw9IDB4RkZGRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcjogY3VycmVudE1hcmtlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBjdXJyZW50UG9zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld01hcmtlciA9IHBlZWtVaW50MTYobmV3UG9zKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCEobmV3TWFya2VyID49IDB4RkZDMCAmJiBuZXdNYXJrZXIgPD0gMHhGRkZFKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK25ld1BvcyA+PSBtYXhQb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3TWFya2VyID0gcGVla1VpbnQxNihuZXdQb3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWQ6IGN1cnJlbnRNYXJrZXIudG9TdHJpbmcoMTYpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcjogbmV3TWFya2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogbmV3UG9zXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgSnBlZ0ltYWdlLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlOiBmdW5jdGlvbiBwYXJzZShkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWYyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjIkZG5sU2NhbkxpbmVzID0gX3JlZjIuZG5sU2NhbkxpbmVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbmxTY2FuTGluZXMgPSBfcmVmMiRkbmxTY2FuTGluZXMgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmMiRkbmxTY2FuTGluZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkVWludDE2KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBkYXRhW29mZnNldF0gPDwgOCB8IGRhdGFbb2Zmc2V0ICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZERhdGFCbG9jaygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHJlYWRVaW50MTYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZE9mZnNldCA9IG9mZnNldCArIGxlbmd0aCAtIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxlTWFya2VyID0gZmluZE5leHRGaWxlTWFya2VyKGRhdGEsIGVuZE9mZnNldCwgb2Zmc2V0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZU1hcmtlciAmJiBmaWxlTWFya2VyLmludmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgncmVhZERhdGFCbG9jayAtIGluY29ycmVjdCBsZW5ndGgsIGN1cnJlbnQgbWFya2VyIGlzOiAnICsgZmlsZU1hcmtlci5pbnZhbGlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZE9mZnNldCA9IGZpbGVNYXJrZXIub2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gZGF0YS5zdWJhcnJheShvZmZzZXQsIGVuZE9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBhcnJheS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwcmVwYXJlQ29tcG9uZW50cyhmcmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWN1c1BlckxpbmUgPSBNYXRoLmNlaWwoZnJhbWUuc2FtcGxlc1BlckxpbmUgLyA4IC8gZnJhbWUubWF4SCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtY3VzUGVyQ29sdW1uID0gTWF0aC5jZWlsKGZyYW1lLnNjYW5MaW5lcyAvIDggLyBmcmFtZS5tYXhWKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lLmNvbXBvbmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IGZyYW1lLmNvbXBvbmVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmxvY2tzUGVyTGluZSA9IE1hdGguY2VpbChNYXRoLmNlaWwoZnJhbWUuc2FtcGxlc1BlckxpbmUgLyA4KSAqIGNvbXBvbmVudC5oIC8gZnJhbWUubWF4SCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmxvY2tzUGVyQ29sdW1uID0gTWF0aC5jZWlsKE1hdGguY2VpbChmcmFtZS5zY2FuTGluZXMgLyA4KSAqIGNvbXBvbmVudC52IC8gZnJhbWUubWF4Vik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmxvY2tzUGVyTGluZUZvck1jdSA9IG1jdXNQZXJMaW5lICogY29tcG9uZW50Lmg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmxvY2tzUGVyQ29sdW1uRm9yTWN1ID0gbWN1c1BlckNvbHVtbiAqIGNvbXBvbmVudC52O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2Nrc0J1ZmZlclNpemUgPSA2NCAqIGJsb2Nrc1BlckNvbHVtbkZvck1jdSAqIChibG9ja3NQZXJMaW5lRm9yTWN1ICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuYmxvY2tEYXRhID0gbmV3IEludDE2QXJyYXkoYmxvY2tzQnVmZmVyU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuYmxvY2tzUGVyTGluZSA9IGJsb2Nrc1BlckxpbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuYmxvY2tzUGVyQ29sdW1uID0gYmxvY2tzUGVyQ29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUubWN1c1BlckxpbmUgPSBtY3VzUGVyTGluZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUubWN1c1BlckNvbHVtbiA9IG1jdXNQZXJDb2x1bW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpmaWYgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhZG9iZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZyYW1lLCByZXNldEludGVydmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1TT1NNYXJrZXJzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVhbnRpemF0aW9uVGFibGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGh1ZmZtYW5UYWJsZXNBQyA9IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodWZmbWFuVGFibGVzREMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZU1hcmtlciA9IHJlYWRVaW50MTYoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlTWFya2VyICE9PSAweEZGRDgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpwZWdFcnJvcignU09JIG5vdCBmb3VuZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVNYXJrZXIgPSByZWFkVWludDE2KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJMb29wOiB3aGlsZSAoZmlsZU1hcmtlciAhPT0gMHhGRkQ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBqLCBsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZmlsZU1hcmtlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGRTA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkZFMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRkUyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGRTM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkZFNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRkU1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGRTY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkZFNzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRkU4OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGRTk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkZFQTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRkVCOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGRUM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkZFRDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRkVFOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGRUY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkZGRTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXBwRGF0YSA9IHJlYWREYXRhQmxvY2soKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlTWFya2VyID09PSAweEZGRTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFwcERhdGFbMF0gPT09IDB4NEEgJiYgYXBwRGF0YVsxXSA9PT0gMHg0NiAmJiBhcHBEYXRhWzJdID09PSAweDQ5ICYmIGFwcERhdGFbM10gPT09IDB4NDYgJiYgYXBwRGF0YVs0XSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamZpZiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ham9yOiBhcHBEYXRhWzVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5vcjogYXBwRGF0YVs2XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVuc2l0eVVuaXRzOiBhcHBEYXRhWzddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEZW5zaXR5OiBhcHBEYXRhWzhdIDw8IDggfCBhcHBEYXRhWzldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlEZW5zaXR5OiBhcHBEYXRhWzEwXSA8PCA4IHwgYXBwRGF0YVsxMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGh1bWJXaWR0aDogYXBwRGF0YVsxMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGh1bWJIZWlnaHQ6IGFwcERhdGFbMTNdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRodW1iRGF0YTogYXBwRGF0YS5zdWJhcnJheSgxNCwgMTQgKyAzICogYXBwRGF0YVsxMl0gKiBhcHBEYXRhWzEzXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZU1hcmtlciA9PT0gMHhGRkVFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcHBEYXRhWzBdID09PSAweDQxICYmIGFwcERhdGFbMV0gPT09IDB4NjQgJiYgYXBwRGF0YVsyXSA9PT0gMHg2RiAmJiBhcHBEYXRhWzNdID09PSAweDYyICYmIGFwcERhdGFbNF0gPT09IDB4NjUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkb2JlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb246IGFwcERhdGFbNV0gPDwgOCB8IGFwcERhdGFbNl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MwOiBhcHBEYXRhWzddIDw8IDggfCBhcHBEYXRhWzhdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzMTogYXBwRGF0YVs5XSA8PCA4IHwgYXBwRGF0YVsxMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtQ29kZTogYXBwRGF0YVsxMV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGREI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1YW50aXphdGlvblRhYmxlc0xlbmd0aCA9IHJlYWRVaW50MTYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVhbnRpemF0aW9uVGFibGVzRW5kID0gcXVhbnRpemF0aW9uVGFibGVzTGVuZ3RoICsgb2Zmc2V0IC0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgejtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChvZmZzZXQgPCBxdWFudGl6YXRpb25UYWJsZXNFbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1YW50aXphdGlvblRhYmxlU3BlYyA9IGRhdGFbb2Zmc2V0KytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGVEYXRhID0gbmV3IFVpbnQxNkFycmF5KDY0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVhbnRpemF0aW9uVGFibGVTcGVjID4+IDQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCA2NDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeiA9IGRjdFppZ1phZ1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZURhdGFbel0gPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxdWFudGl6YXRpb25UYWJsZVNwZWMgPj4gNCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IDY0OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ID0gZGN0WmlnWmFnW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlRGF0YVt6XSA9IHJlYWRVaW50MTYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKcGVnRXJyb3IoJ0RRVCAtIGludmFsaWQgdGFibGUgc3BlYycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpemF0aW9uVGFibGVzW3F1YW50aXphdGlvblRhYmxlU3BlYyAmIDE1XSA9IHRhYmxlRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGQzA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkZDMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRkMyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSnBlZ0Vycm9yKCdPbmx5IHNpbmdsZSBmcmFtZSBKUEVHcyBzdXBwb3J0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkVWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5leHRlbmRlZCA9IGZpbGVNYXJrZXIgPT09IDB4RkZDMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5wcm9ncmVzc2l2ZSA9IGZpbGVNYXJrZXIgPT09IDB4RkZDMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5wcmVjaXNpb24gPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc29mU2NhbkxpbmVzID0gcmVhZFVpbnQxNigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLnNjYW5MaW5lcyA9IGRubFNjYW5MaW5lcyB8fCBzb2ZTY2FuTGluZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuc2FtcGxlc1BlckxpbmUgPSByZWFkVWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuY29tcG9uZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmNvbXBvbmVudElkcyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnRzQ291bnQgPSBkYXRhW29mZnNldCsrXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50SWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heEggPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhWID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb21wb25lbnRzQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRJZCA9IGRhdGFbb2Zmc2V0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGggPSBkYXRhW29mZnNldCArIDFdID4+IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2ID0gZGF0YVtvZmZzZXQgKyAxXSAmIDE1O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXhIIDwgaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4SCA9IGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF4ViA8IHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFYgPSB2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHFJZCA9IGRhdGFbb2Zmc2V0ICsgMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBmcmFtZS5jb21wb25lbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY6IHYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl6YXRpb25JZDogcUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpemF0aW9uVGFibGU6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmNvbXBvbmVudElkc1tjb21wb25lbnRJZF0gPSBsIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUubWF4SCA9IG1heEg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUubWF4ViA9IG1heFY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlcGFyZUNvbXBvbmVudHMoZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkZDNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaHVmZm1hbkxlbmd0aCA9IHJlYWRVaW50MTYoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDI7IGkgPCBodWZmbWFuTGVuZ3RoOykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaHVmZm1hblRhYmxlU3BlYyA9IGRhdGFbb2Zmc2V0KytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZUxlbmd0aHMgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlTGVuZ3RoU3VtID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgMTY7IGorKywgb2Zmc2V0KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVMZW5ndGhTdW0gKz0gY29kZUxlbmd0aHNbal0gPSBkYXRhW29mZnNldF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaHVmZm1hblZhbHVlcyA9IG5ldyBVaW50OEFycmF5KGNvZGVMZW5ndGhTdW0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjb2RlTGVuZ3RoU3VtOyBqKyssIG9mZnNldCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodWZmbWFuVmFsdWVzW2pdID0gZGF0YVtvZmZzZXRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSAxNyArIGNvZGVMZW5ndGhTdW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChodWZmbWFuVGFibGVTcGVjID4+IDQgPT09IDAgPyBodWZmbWFuVGFibGVzREMgOiBodWZmbWFuVGFibGVzQUMpW2h1ZmZtYW5UYWJsZVNwZWMgJiAxNV0gPSBidWlsZEh1ZmZtYW5UYWJsZShjb2RlTGVuZ3RocywgaHVmZm1hblZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRkREOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRVaW50MTYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldEludGVydmFsID0gcmVhZFVpbnQxNigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkZEQTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VETkxNYXJrZXIgPSArK251bVNPU01hcmtlcnMgPT09IDEgJiYgIWRubFNjYW5MaW5lcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkVWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdG9yc0NvdW50ID0gZGF0YVtvZmZzZXQrK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudHMgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNlbGVjdG9yc0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudEluZGV4ID0gZnJhbWUuY29tcG9uZW50SWRzW2RhdGFbb2Zmc2V0KytdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50ID0gZnJhbWUuY29tcG9uZW50c1tjb21wb25lbnRJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWJsZVNwZWMgPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50Lmh1ZmZtYW5UYWJsZURDID0gaHVmZm1hblRhYmxlc0RDW3RhYmxlU3BlYyA+PiA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50Lmh1ZmZtYW5UYWJsZUFDID0gaHVmZm1hblRhYmxlc0FDW3RhYmxlU3BlYyAmIDE1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5wdXNoKGNvbXBvbmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwZWN0cmFsU3RhcnQgPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BlY3RyYWxFbmQgPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VjY2Vzc2l2ZUFwcHJveGltYXRpb24gPSBkYXRhW29mZnNldCsrXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9jZXNzZWQgPSBkZWNvZGVTY2FuKGRhdGEsIG9mZnNldCwgZnJhbWUsIGNvbXBvbmVudHMsIHJlc2V0SW50ZXJ2YWwsIHNwZWN0cmFsU3RhcnQsIHNwZWN0cmFsRW5kLCBzdWNjZXNzaXZlQXBwcm94aW1hdGlvbiA+PiA0LCBzdWNjZXNzaXZlQXBwcm94aW1hdGlvbiAmIDE1LCBwYXJzZUROTE1hcmtlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBwcm9jZXNzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgRE5MTWFya2VyRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlwiLmNvbmNhdChleC5tZXNzYWdlLCBcIiAtLSBhdHRlbXB0aW5nIHRvIHJlLXBhcnNlIHRoZSBKUEVHIGltYWdlLlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZShkYXRhLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5sU2NhbkxpbmVzOiBleC5zY2FuTGluZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV4IGluc3RhbmNlb2YgRU9JTWFya2VyRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlwiLmNvbmNhdChleC5tZXNzYWdlLCBcIiAtLSBpZ25vcmluZyB0aGUgcmVzdCBvZiB0aGUgaW1hZ2UgZGF0YS5cIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbWFya2VyTG9vcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkZEQzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGRkY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFbb2Zmc2V0XSAhPT0gMHhGRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtvZmZzZXQgLSAzXSA9PT0gMHhGRiAmJiBkYXRhW29mZnNldCAtIDJdID49IDB4QzAgJiYgZGF0YVtvZmZzZXQgLSAyXSA8PSAweEZFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCAtPSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEZpbGVNYXJrZXIgPSBmaW5kTmV4dEZpbGVNYXJrZXIoZGF0YSwgb2Zmc2V0IC0gMik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEZpbGVNYXJrZXIgJiYgbmV4dEZpbGVNYXJrZXIuaW52YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0pwZWdJbWFnZS5wYXJzZSAtIHVuZXhwZWN0ZWQgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICcgKyBuZXh0RmlsZU1hcmtlci5pbnZhbGlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbmV4dEZpbGVNYXJrZXIub2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSnBlZ0Vycm9yKCd1bmtub3duIG1hcmtlciAnICsgZmlsZU1hcmtlci50b1N0cmluZygxNikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU1hcmtlciA9IHJlYWRVaW50MTYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gZnJhbWUuc2FtcGxlc1BlckxpbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5zY2FuTGluZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5qZmlmID0gamZpZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkb2JlID0gYWRvYmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZnJhbWUuY29tcG9uZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBmcmFtZS5jb21wb25lbnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVhbnRpemF0aW9uVGFibGUgPSBxdWFudGl6YXRpb25UYWJsZXNbY29tcG9uZW50LnF1YW50aXphdGlvbklkXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVhbnRpemF0aW9uVGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5xdWFudGl6YXRpb25UYWJsZSA9IHF1YW50aXphdGlvblRhYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0OiBidWlsZENvbXBvbmVudERhdGEoZnJhbWUsIGNvbXBvbmVudCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVg6IGNvbXBvbmVudC5oIC8gZnJhbWUubWF4SCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWTogY29tcG9uZW50LnYgLyBmcmFtZS5tYXhWLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzUGVyTGluZTogY29tcG9uZW50LmJsb2Nrc1BlckxpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3NQZXJDb2x1bW46IGNvbXBvbmVudC5ibG9ja3NQZXJDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1Db21wb25lbnRzID0gdGhpcy5jb21wb25lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBfZ2V0TGluZWFyaXplZEJsb2NrRGF0YTogZnVuY3Rpb24gX2dldExpbmVhcml6ZWRCbG9ja0RhdGEod2lkdGgsIGhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc1NvdXJjZVBERiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlWCA9IHRoaXMud2lkdGggLyB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVZID0gdGhpcy5oZWlnaHQgLyBoZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudCwgY29tcG9uZW50U2NhbGVYLCBjb21wb25lbnRTY2FsZVksIGJsb2Nrc1BlclNjYW5saW5lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4LCB5LCBpLCBqLCBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3V0cHV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1Db21wb25lbnRzID0gdGhpcy5jb21wb25lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YUxlbmd0aCA9IHdpZHRoICogaGVpZ2h0ICogbnVtQ29tcG9uZW50cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShkYXRhTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeFNjYWxlQmxvY2tPZmZzZXQgPSBuZXcgVWludDMyQXJyYXkod2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXNrM0xTQiA9IDB4ZmZmZmZmZjg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtQ29tcG9uZW50czsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50U2NhbGVYID0gY29tcG9uZW50LnNjYWxlWCAqIHNjYWxlWDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50U2NhbGVZID0gY29tcG9uZW50LnNjYWxlWSAqIHNjYWxlWTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gY29tcG9uZW50Lm91dHB1dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzUGVyU2NhbmxpbmUgPSBjb21wb25lbnQuYmxvY2tzUGVyTGluZSArIDEgPDwgMztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IDAgfCB4ICogY29tcG9uZW50U2NhbGVYO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFNjYWxlQmxvY2tPZmZzZXRbeF0gPSAoaiAmIG1hc2szTFNCKSA8PCAzIHwgaiAmIDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSAwIHwgeSAqIGNvbXBvbmVudFNjYWxlWTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gYmxvY2tzUGVyU2NhbmxpbmUgKiAoaiAmIG1hc2szTFNCKSB8IChqICYgNykgPDwgMztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW29mZnNldF0gPSBvdXRwdXRbaW5kZXggKyB4U2NhbGVCbG9ja09mZnNldFt4XV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IG51bUNvbXBvbmVudHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy5fZGVjb2RlVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NvdXJjZVBERiAmJiBudW1Db21wb25lbnRzID09PSA0ICYmICF0cmFuc2Zvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtID0gbmV3IEludDMyQXJyYXkoWy0yNTYsIDI1NSwgLTI1NiwgMjU1LCAtMjU2LCAyNTUsIC0yNTYsIDI1NV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGRhdGFMZW5ndGg7KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwLCBrID0gMDsgaiA8IG51bUNvbXBvbmVudHM7IGorKywgaSsrLCBrICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gKGRhdGFbaV0gKiB0cmFuc2Zvcm1ba10gPj4gOCkgKyB0cmFuc2Zvcm1bayArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgX2lzQ29sb3JDb252ZXJzaW9uTmVlZGVkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFkb2JlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhIXRoaXMuYWRvYmUudHJhbnNmb3JtQ29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5udW1Db21wb25lbnRzID09PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb2xvclRyYW5zZm9ybSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvbG9yVHJhbnNmb3JtID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb252ZXJ0WWNjVG9SZ2I6IGZ1bmN0aW9uIGNvbnZlcnRZY2NUb1JnYihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFksIENiLCBDcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBkYXRhLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFkgPSBkYXRhW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYiA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDciA9IGRhdGFbaSArIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gWSAtIDE3OS40NTYgKyAxLjQwMiAqIENyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2kgKyAxXSA9IFkgKyAxMzUuNDU5IC0gMC4zNDQgKiBDYiAtIDAuNzE0ICogQ3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaSArIDJdID0gWSAtIDIyNi44MTYgKyAxLjc3MiAqIENiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb252ZXJ0WWNja1RvUmdiOiBmdW5jdGlvbiBjb252ZXJ0WWNja1RvUmdiKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgWSwgQ2IsIENyLCBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGRhdGEubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpICs9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWSA9IGRhdGFbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENiID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyID0gZGF0YVtpICsgMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBkYXRhW2kgKyAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtvZmZzZXQrK10gPSAtMTIyLjY3MTk1NDA2ODk0ICsgQ2IgKiAoLTYuNjA2MzU2Njk0MjAzNjRlLTUgKiBDYiArIDAuMDAwNDM3MTMwNDc1OTI2MjMyICogQ3IgLSA1LjQwODA2MTAwNjQ1OTllLTUgKiBZICsgMC4wMDA0ODQ0OTc5NzEyMDI4MSAqIGsgLSAwLjE1NDM2MjE1MTg3MTEyNikgKyBDciAqICgtMC4wMDA5NTc5NjQzNzg0NDU3NzMgKiBDciArIDAuMDAwODE3MDc2OTExMzQ2NjI1ICogWSAtIDAuMDA0NzcyNzE0MDU0MDg3NDcgKiBrICsgMS41MzM4MDI1MzIyMTczNCkgKyBZICogKDAuMDAwOTYxMjUwMTg0MTMwNjg4ICogWSAtIDAuMDAyNjYyNTczMzIyODM5MzMgKiBrICsgMC40ODM1NzA4ODQ1MTI2NSkgKyBrICogKC0wLjAwMDMzNjE5NzE3NzYxODM5NCAqIGsgKyAwLjQ4NDc5MTU2MTQ5MDc3Nik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0KytdID0gMTA3LjI2ODAzOTM5NzcyNCArIENiICogKDIuMTk5MjcxMDQ1MjU3NDFlLTUgKiBDYiAtIDAuMDAwNjQwOTkyMDE4Mjk3OTQ1ICogQ3IgKyAwLjAwMDY1OTM5NzAwMTI0NTU3NyAqIFkgKyAwLjAwMDQyNjEwNTY1MjkzODgzNyAqIGsgLSAwLjE3NjQ5MTc5MjQ2Mjg3NSkgKyBDciAqICgtMC4wMDA3NzgyNjk5NDE1MTM2ODMgKiBDciArIDAuMDAxMzA4NzIyNjE0MDgyNzUgKiBZICsgMC4wMDA3NzA0ODI2MzE4MDExMzIgKiBrIC0gMC4xNTEwNTE0OTI3NzU1NjIpICsgWSAqICgwLjAwMTI2OTM1MzY4MTE0ODQzICogWSAtIDAuMDAyNjUwOTAxODkwMTA4OTggKiBrICsgMC4yNTgwMjkxMDIwNjg0NSkgKyBrICogKC0wLjAwMDMxODkxMzExNzU4ODMyOCAqIGsgLSAwLjIxMzc0MjQwMDMyMzY2NSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0KytdID0gLTIwLjgxMDAxMjU0Njk0NyArIENiICogKC0wLjAwMDU3MDExNTE5Njk3MzY3NyAqIENiIC0gMi42MzQwOTA1MTAwNDU4OWUtNSAqIENyICsgMC4wMDIwNzQxMDg4MTE1MDEyICogWSAtIDAuMDAyODgyNjAyMzY4NTM0NDIgKiBrICsgMC44MTQyNzI5NjgzNTkyOTUpICsgQ3IgKiAoLTEuNTM0OTYwNTc0NDA5NzVlLTUgKiBDciAtIDAuMDAwMTMyNjg5MDQzOTYxNDQ2ICogWSArIDAuMDAwNTYwODMzNjkxMjQyODEyICogayAtIDAuMTk1MTUyMDI3NTM0MDQ5KSArIFkgKiAoMC4wMDE3NDQxODEzMjkyNzU4MiAqIFkgLSAwLjAwMjU1MjQzMzIxNDM5MzQ3ICogayArIDAuMTE2OTM1MDIwNDY1MTQ1KSArIGsgKiAoLTAuMDAwMzQzNTMxOTk2NTEwNTU1ICogayArIDAuMjQxNjUyNjAyMzI0MDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLnN1YmFycmF5KDAsIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnZlcnRZY2NrVG9DbXlrOiBmdW5jdGlvbiBjb252ZXJ0WWNja1RvQ215ayhkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFksIENiLCBDcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBkYXRhLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSArPSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFkgPSBkYXRhW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYiA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDciA9IGRhdGFbaSArIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gNDM0LjQ1NiAtIFkgLSAxLjQwMiAqIENyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2kgKyAxXSA9IDExOS41NDEgLSBZICsgMC4zNDQgKiBDYiArIDAuNzE0ICogQ3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaSArIDJdID0gNDgxLjgxNiAtIFkgLSAxLjc3MiAqIENiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb252ZXJ0Q215a1RvUmdiOiBmdW5jdGlvbiBjb252ZXJ0Q215a1RvUmdiKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYywgbSwgeSwgaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSAxIC8gMjU1O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGRhdGEubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpICs9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGRhdGFbaV0gKiBzY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IGRhdGFbaSArIDFdICogc2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBkYXRhW2kgKyAyXSAqIHNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gZGF0YVtpICsgM10gKiBzY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtvZmZzZXQrK10gPSAyNTUgKyBjICogKC00LjM4NzMzMjM4NDYwOTk4OCAqIGMgKyA1NC40ODYxNTE5NDE4OTE3NiAqIG0gKyAxOC44MjI5MDUwMjE2NTMwMiAqIHkgKyAyMTIuMjU2NjI0NTE2Mzk1ODUgKiBrIC0gMjg1LjIzMzEwMjYxMzcwMDQpICsgbSAqICgxLjcxNDk3NjM0NzczNjIxMzQgKiBtIC0gNS42MDk2NzM2OTA0MDQ3MzE1ICogeSAtIDE3Ljg3Mzg3MDg2MTQxNTQ0NCAqIGsgLSA1LjQ5NzAwNjQyNzE5NjM2NikgKyB5ICogKC0yLjUyMTczNDAxMzE2ODMwMzMgKiB5IC0gMjEuMjQ4OTIzMzM3MzUzMDczICogayArIDE3LjUxMTkyNzA4NDE4MTMpIC0gayAqICgyMS44NjEyMjE0NzQ2MzYwNSAqIGsgKyAxODkuNDgxODA4MzU5MjI3NDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW29mZnNldCsrXSA9IDI1NSArIGMgKiAoOC44NDEwNDE0MjIwMzYxNDkgKiBjICsgNjAuMTE4MDI3MDQ1NTk3MzY2ICogbSArIDYuODcxNDI1NTkyMDQ5MDA3ICogeSArIDMxLjE1OTEwMDEzMDA1NTkyMiAqIGsgLSA3OS4yOTcwODQ0ODE2NTQ4KSArIG0gKiAoLTE1LjMxMDM2MTMwNjk2NzgxNyAqIG0gKyAxNy41NzUyNTEyNjExMDk0ODIgKiB5ICsgMTMxLjM1MjUwOTEyNDkzOTc2ICogayAtIDE5MC45NDUzMzAyNTg4OTUxKSArIHkgKiAoNC40NDQzMzkxMDI4NTI3MzkgKiB5ICsgOS44NjMyODYxNDkzNDA1ICogayAtIDI0Ljg2NzQxNTgyNTU1ODc4KSAtIGsgKiAoMjAuNzM3MzI1NDcxMTgxMDM0ICogayArIDE4Ny44MDQ1MzcwOTcxOTU3OCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0KytdID0gMjU1ICsgYyAqICgwLjg4NDI1MjI0MzAwMDMyOTYgKiBjICsgOC4wNzg2Nzc1MDMxMTI5MjggKiBtICsgMzAuODk5NzgzMDk3MDM3MjkgKiB5IC0gMC4yMzg4MzIzODY4OTE3ODkzNCAqIGsgLSAxNC4xODM1NzY3OTk2NzMyODYpICsgbSAqICgxMC40OTU5MzI3MzQzMjA3MiAqIG0gKyA2My4wMjM3ODQ5NDc1NDA1MiAqIHkgKyA1MC42MDY5NTc2NTYzNjA3MzQgKiBrIC0gMTEyLjIzODg0MjUzNzE5MjQ4KSArIHkgKiAoMC4wMzI5NjA0MTExNDg3MzIxNyAqIHkgKyAxMTUuNjAzODQ0NDk2NDY2NDEgKiBrIC0gMTkzLjU4MjA5MzU2ODYxNTA1KSAtIGsgKiAoMjIuMzM4MTY4MDczMDk4ODYgKiBrICsgMTgwLjEyNjEzOTc0NzA4MzY3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5zdWJhcnJheSgwLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldERhdGE6IGZ1bmN0aW9uIGdldERhdGEoX3JlZjMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBfcmVmMy53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gX3JlZjMuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmMyRmb3JjZVJHQiA9IF9yZWYzLmZvcmNlUkdCLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZVJHQiA9IF9yZWYzJGZvcmNlUkdCID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYzJGZvcmNlUkdCLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmMyRpc1NvdXJjZVBERiA9IF9yZWYzLmlzU291cmNlUERGLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NvdXJjZVBERiA9IF9yZWYzJGlzU291cmNlUERGID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYzJGlzU291cmNlUERGO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubnVtQ29tcG9uZW50cyA+IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpwZWdFcnJvcignVW5zdXBwb3J0ZWQgY29sb3IgbW9kZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZ2V0TGluZWFyaXplZEJsb2NrRGF0YSh3aWR0aCwgaGVpZ2h0LCBpc1NvdXJjZVBERik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5udW1Db21wb25lbnRzID09PSAxICYmIGZvcmNlUkdCKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZ2JEYXRhID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGRhdGFMZW5ndGggKiAzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncmF5Q29sb3IgPSBkYXRhW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmdiRGF0YVtvZmZzZXQrK10gPSBncmF5Q29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZ2JEYXRhW29mZnNldCsrXSA9IGdyYXlDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJnYkRhdGFbb2Zmc2V0KytdID0gZ3JheUNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJnYkRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm51bUNvbXBvbmVudHMgPT09IDMgJiYgdGhpcy5faXNDb2xvckNvbnZlcnNpb25OZWVkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRZY2NUb1JnYihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubnVtQ29tcG9uZW50cyA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNDb2xvckNvbnZlcnNpb25OZWVkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3JjZVJHQikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0WWNja1RvUmdiKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydFljY2tUb0NteWsoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9yY2VSR0IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0Q215a1RvUmdiKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKcGVnSW1hZ2U7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5KcGVnSW1hZ2UgPSBKcGVnSW1hZ2U7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE2NSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuSnB4U3RyZWFtID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9zdHJlYW0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2pweCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTY2KTtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgSnB4U3RyZWFtID0gZnVuY3Rpb24gSnB4U3RyZWFtQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSnB4U3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgsIGRpY3QsIHBhcmFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1heWJlTGVuZ3RoID0gbWF5YmVMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpY3QgPSBkaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9zdHJlYW0uRGVjb2RlU3RyZWFtLmNhbGwodGhpcywgbWF5YmVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgSnB4U3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoX3N0cmVhbS5EZWNvZGVTdHJlYW0ucHJvdG90eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEpweFN0cmVhbS5wcm90b3R5cGUsICdieXRlcycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gSnB4U3RyZWFtX2J5dGVzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnYnl0ZXMnLCB0aGlzLnN0cmVhbS5nZXRCeXRlcyh0aGlzLm1heWJlTGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIEpweFN0cmVhbS5wcm90b3R5cGUuZW5zdXJlQnVmZmVyID0gZnVuY3Rpb24gKHJlcXVlc3RlZCkge307XG5cbiAgICAgICAgICAgICAgICAgICAgSnB4U3RyZWFtLnByb3RvdHlwZS5yZWFkQmxvY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lb2YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqcHhJbWFnZSA9IG5ldyBfanB4LkpweEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBqcHhJbWFnZS5wYXJzZSh0aGlzLmJ5dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGpweEltYWdlLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IGpweEltYWdlLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnRzQ291bnQgPSBqcHhJbWFnZS5jb21wb25lbnRzQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGlsZUNvdW50ID0ganB4SW1hZ2UudGlsZXMubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGlsZUNvdW50ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBqcHhJbWFnZS50aWxlc1swXS5pdGVtcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkod2lkdGggKiBoZWlnaHQgKiBjb21wb25lbnRzQ291bnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aWxlQ291bnQ7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGlsZUNvbXBvbmVudHMgPSBqcHhJbWFnZS50aWxlc1trXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbGVXaWR0aCA9IHRpbGVDb21wb25lbnRzLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGlsZUhlaWdodCA9IHRpbGVDb21wb25lbnRzLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbGVMZWZ0ID0gdGlsZUNvbXBvbmVudHMubGVmdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbGVUb3AgPSB0aWxlQ29tcG9uZW50cy50b3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcmMgPSB0aWxlQ29tcG9uZW50cy5pdGVtcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNyY1Bvc2l0aW9uID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGFQb3NpdGlvbiA9ICh3aWR0aCAqIHRpbGVUb3AgKyB0aWxlTGVmdCkgKiBjb21wb25lbnRzQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWdSb3dTaXplID0gd2lkdGggKiBjb21wb25lbnRzQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aWxlUm93U2l6ZSA9IHRpbGVXaWR0aCAqIGNvbXBvbmVudHNDb3VudDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRpbGVIZWlnaHQ7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvd0J5dGVzID0gc3JjLnN1YmFycmF5KHNyY1Bvc2l0aW9uLCBzcmNQb3NpdGlvbiArIHRpbGVSb3dTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc2V0KHJvd0J5dGVzLCBkYXRhUG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUG9zaXRpb24gKz0gdGlsZVJvd1NpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUG9zaXRpb24gKz0gaW1nUm93U2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlci5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpweFN0cmVhbTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkpweFN0cmVhbSA9IEpweFN0cmVhbTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTY2ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5KcHhJbWFnZSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2FyaXRobWV0aWNfZGVjb2RlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTYyKTtcblxuICAgICAgICAgICAgICAgIHZhciBKcHhFcnJvciA9IGZ1bmN0aW9uIEpweEVycm9yQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSnB4RXJyb3IobXNnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnSlBYIGVycm9yOiAnICsgbXNnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgSnB4RXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIEpweEVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0pweEVycm9yJztcbiAgICAgICAgICAgICAgICAgICAgSnB4RXJyb3IuY29uc3RydWN0b3IgPSBKcHhFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpweEVycm9yO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIHZhciBKcHhJbWFnZSA9IGZ1bmN0aW9uIEpweEltYWdlQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFN1YmJhbmRzR2FpbkxvZzIgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnTEwnOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0xIJzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdITCc6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAnSEgnOiAyXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSnB4SW1hZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZhaWxPbkNvcnJ1cHRlZEltYWdlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBKcHhJbWFnZS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZTogZnVuY3Rpb24gSnB4SW1hZ2VfcGFyc2UoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWFkID0gKDAsIF91dGlsLnJlYWRVaW50MTYpKGRhdGEsIDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWQgPT09IDB4RkY0Rikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnNlQ29kZXN0cmVhbShkYXRhLCAwLCBkYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBkYXRhLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGVyU2l6ZSA9IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYm94ID0gKDAsIF91dGlsLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRib3ggPSAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyA0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gaGVhZGVyU2l6ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGJveCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGJveCA9ICgwLCBfdXRpbC5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbikgKiA0Mjk0OTY3Mjk2ICsgKDAsIF91dGlsLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uICsgNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyU2l6ZSArPSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxib3ggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxib3ggPSBsZW5ndGggLSBwb3NpdGlvbiArIGhlYWRlclNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGJveCA8IGhlYWRlclNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKcHhFcnJvcignSW52YWxpZCBib3ggZmllbGQgc2l6ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGFMZW5ndGggPSBsYm94IC0gaGVhZGVyU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGp1bXBEYXRhTGVuZ3RoID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRib3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHg2QTcwMzI2ODpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdW1wRGF0YUxlbmd0aCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4NjM2RjZDNzI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1ldGhvZCA9IGRhdGFbcG9zaXRpb25dO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JzcGFjZSA9ICgwLCBfdXRpbC5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY29sb3JzcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnVW5rbm93biBjb2xvcnNwYWNlICcgKyBjb2xvcnNwYWNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKSgnSUNDIHByb2ZpbGUgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4NkE3MDMyNjM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJzZUNvZGVzdHJlYW0oZGF0YSwgcG9zaXRpb24sIHBvc2l0aW9uICsgZGF0YUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHg2QTUwMjAyMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF91dGlsLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKSAhPT0gMHgwZDBhODcwYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0ludmFsaWQgSlAyIHNpZ25hdHVyZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4NkE1MDFBMUE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4NjY3NDc5NzA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4NzI3MjY1NzE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4NzI2NTczMjA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4Njk2ODY0NzI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlclR5cGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRib3ggPj4gMjQgJiAweEZGLCB0Ym94ID4+IDE2ICYgMHhGRiwgdGJveCA+PiA4ICYgMHhGRiwgdGJveCAmIDB4RkYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnVW5zdXBwb3J0ZWQgaGVhZGVyIHR5cGUgJyArIHRib3ggKyAnICgnICsgaGVhZGVyVHlwZSArICcpJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoanVtcERhdGFMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IGRhdGFMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbWFnZVByb3BlcnRpZXM6IGZ1bmN0aW9uIEpweEltYWdlX3BhcnNlSW1hZ2VQcm9wZXJ0aWVzKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdCeXRlID0gc3RyZWFtLmdldEJ5dGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXdCeXRlID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9sZEJ5dGUgPSBuZXdCeXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdCeXRlID0gc3RyZWFtLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSBvbGRCeXRlIDw8IDggfCBuZXdCeXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID09PSAweEZGNTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwKDQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFhzaXogPSBzdHJlYW0uZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBZc2l6ID0gc3RyZWFtLmdldEludDMyKCkgPj4+IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgWE9zaXogPSBzdHJlYW0uZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBZT3NpeiA9IHN0cmVhbS5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnNraXAoMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIENzaXogPSBzdHJlYW0uZ2V0VWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gWHNpeiAtIFhPc2l6O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBZc2l6IC0gWU9zaXo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudHNDb3VudCA9IENzaXo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJpdHNQZXJDb21wb25lbnQgPSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpweEVycm9yKCdObyBzaXplIG1hcmtlciBmb3VuZCBpbiBKUFggc3RyZWFtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb2Rlc3RyZWFtOiBmdW5jdGlvbiBKcHhJbWFnZV9wYXJzZUNvZGVzdHJlYW0oZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvTm90UmVjb3ZlciA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gc3RhcnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBvc2l0aW9uICsgMSA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSAoMCwgX3V0aWwucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGosXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FjZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHFjZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BxY2RTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxhckV4cG91bmRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkY0RjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5tYWluSGVhZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkZEOTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkY1MTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gKDAsIF91dGlsLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpeiA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXouWHNpeiA9ICgwLCBfdXRpbC5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXouWXNpeiA9ICgwLCBfdXRpbC5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXouWE9zaXogPSAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyAxMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpei5ZT3NpeiA9ICgwLCBfdXRpbC5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6LlhUc2l6ID0gKDAsIF91dGlsLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uICsgMjApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXouWVRzaXogPSAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyAyNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpei5YVE9zaXogPSAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyAyOCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpei5ZVE9zaXogPSAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyAzMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnRzQ291bnQgPSAoMCwgX3V0aWwucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24gKyAzNik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpei5Dc2l6ID0gY29tcG9uZW50c0NvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gcG9zaXRpb24gKyAzODtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbXBvbmVudHNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbjogKGRhdGFbal0gJiAweDdGKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTaWduZWQ6ICEhKGRhdGFbal0gJiAweDgwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUnNpejogZGF0YVtqICsgMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVJzaXo6IGRhdGFbaiArIDJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiArPSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRlQ29tcG9uZW50RGltZW5zaW9ucyhjb21wb25lbnQsIHNpeik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLnB1c2goY29tcG9uZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuU0laID0gc2l6O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBvbmVudHMgPSBjb21wb25lbnRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhdGVUaWxlR3JpZHMoY29udGV4dCwgY29tcG9uZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuUUNDID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuQ09DID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGNUM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9ICgwLCBfdXRpbC5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxY2QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IHBvc2l0aW9uICsgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FjZCA9IGRhdGFbaisrXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNxY2QgJiAweDFGKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BxY2RTaXplID0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsYXJFeHBvdW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BxY2RTaXplID0gMTY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGFyRXhwb3VuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHFjZFNpemUgPSAxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsYXJFeHBvdW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBTUWNkIHZhbHVlICcgKyBzcWNkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFjZC5ub1F1YW50aXphdGlvbiA9IHNwcWNkU2l6ZSA9PT0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcWNkLnNjYWxhckV4cG91bmRlZCA9IHNjYWxhckV4cG91bmRlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcWNkLmd1YXJkQml0cyA9IHNxY2QgPj4gNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BxY2RzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGogPCBsZW5ndGggKyBwb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwcWNkID0ge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcHFjZFNpemUgPT09IDgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHFjZC5lcHNpbG9uID0gZGF0YVtqKytdID4+IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BxY2QubXUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHFjZC5lcHNpbG9uID0gZGF0YVtqXSA+PiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcWNkLm11ID0gKGRhdGFbal0gJiAweDcpIDw8IDggfCBkYXRhW2ogKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcWNkcy5wdXNoKHNwcWNkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFjZC5TUHFjZHMgPSBzcHFjZHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQubWFpbkhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5RQ0QgPSBxY2Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJlbnRUaWxlLlFDRCA9IHFjZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY3VycmVudFRpbGUuUUNDID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRjVEOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAoMCwgX3V0aWwucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcWNjID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBwb3NpdGlvbiArIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjcWNjO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LlNJWi5Dc2l6IDwgMjU3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcWNjID0gZGF0YVtqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3FjYyA9ICgwLCBfdXRpbC5yZWFkVWludDE2KShkYXRhLCBqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxY2QgPSBkYXRhW2orK107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzcWNkICYgMHgxRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcWNkU2l6ZSA9IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGFyRXhwb3VuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcWNkU2l6ZSA9IDE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxhckV4cG91bmRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BxY2RTaXplID0gMTY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGFyRXhwb3VuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgU1FjZCB2YWx1ZSAnICsgc3FjZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxY2Mubm9RdWFudGl6YXRpb24gPSBzcHFjZFNpemUgPT09IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFjYy5zY2FsYXJFeHBvdW5kZWQgPSBzY2FsYXJFeHBvdW5kZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFjYy5ndWFyZEJpdHMgPSBzcWNkID4+IDU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcWNkcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChqIDwgbGVuZ3RoICsgcG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcWNkID0ge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcHFjZFNpemUgPT09IDgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHFjZC5lcHNpbG9uID0gZGF0YVtqKytdID4+IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BxY2QubXUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHFjZC5lcHNpbG9uID0gZGF0YVtqXSA+PiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcWNkLm11ID0gKGRhdGFbal0gJiAweDcpIDw8IDggfCBkYXRhW2ogKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcWNkcy5wdXNoKHNwcWNkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFjYy5TUHFjZHMgPSBzcHFjZHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQubWFpbkhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5RQ0NbY3FjY10gPSBxY2M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJlbnRUaWxlLlFDQ1tjcWNjXSA9IHFjYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGNTI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9ICgwLCBfdXRpbC5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IHBvc2l0aW9uICsgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjb2QgPSBkYXRhW2orK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZC5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzID0gISEoc2NvZCAmIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Quc29wTWFya2VyVXNlZCA9ICEhKHNjb2QgJiAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kLmVwaE1hcmtlclVzZWQgPSAhIShzY29kICYgNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZC5wcm9ncmVzc2lvbk9yZGVyID0gZGF0YVtqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2QubGF5ZXJzQ291bnQgPSAoMCwgX3V0aWwucmVhZFVpbnQxNikoZGF0YSwgaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kLm11bHRpcGxlQ29tcG9uZW50VHJhbnNmb3JtID0gZGF0YVtqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2QuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gZGF0YVtqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2QueGNiID0gKGRhdGFbaisrXSAmIDB4RikgKyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2QueWNiID0gKGRhdGFbaisrXSAmIDB4RikgKyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmxvY2tTdHlsZSA9IGRhdGFbaisrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kLnNlbGVjdGl2ZUFyaXRobWV0aWNDb2RpbmdCeXBhc3MgPSAhIShibG9ja1N0eWxlICYgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZC5yZXNldENvbnRleHRQcm9iYWJpbGl0aWVzID0gISEoYmxvY2tTdHlsZSAmIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2QudGVybWluYXRpb25PbkVhY2hDb2RpbmdQYXNzID0gISEoYmxvY2tTdHlsZSAmIDQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2QudmVydGljYWxseVN0cmlwZSA9ICEhKGJsb2NrU3R5bGUgJiA4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kLnByZWRpY3RhYmxlVGVybWluYXRpb24gPSAhIShibG9ja1N0eWxlICYgMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Quc2VnbWVudGF0aW9uU3ltYm9sVXNlZCA9ICEhKGJsb2NrU3R5bGUgJiAzMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZC5yZXZlcnNpYmxlVHJhbnNmb3JtYXRpb24gPSBkYXRhW2orK107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZC5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJlY2luY3RzU2l6ZXMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGogPCBsZW5ndGggKyBwb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVjaW5jdHNTaXplID0gZGF0YVtqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpbmN0c1NpemVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUHg6IHByZWNpbmN0c1NpemUgJiAweEYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQeTogcHJlY2luY3RzU2l6ZSA+PiA0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZC5wcmVjaW5jdHNTaXplcyA9IHByZWNpbmN0c1NpemVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuc3VwcG9ydGVkID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZC5zZWxlY3RpdmVBcml0aG1ldGljQ29kaW5nQnlwYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZC5wdXNoKCdzZWxlY3RpdmVBcml0aG1ldGljQ29kaW5nQnlwYXNzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kLnJlc2V0Q29udGV4dFByb2JhYmlsaXRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc3VwcG9ydGVkLnB1c2goJ3Jlc2V0Q29udGV4dFByb2JhYmlsaXRpZXMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2QudGVybWluYXRpb25PbkVhY2hDb2RpbmdQYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZC5wdXNoKCd0ZXJtaW5hdGlvbk9uRWFjaENvZGluZ1Bhc3MnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2QudmVydGljYWxseVN0cmlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zdXBwb3J0ZWQucHVzaCgndmVydGljYWxseVN0cmlwZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZC5wcmVkaWN0YWJsZVRlcm1pbmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZC5wdXNoKCdwcmVkaWN0YWJsZVRlcm1pbmF0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5zdXBwb3J0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9Ob3RSZWNvdmVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgQ09EIG9wdGlvbnMgKCcgKyB1bnN1cHBvcnRlZC5qb2luKCcsICcpICsgJyknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0Lm1haW5IZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuQ09EID0gY29kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyZW50VGlsZS5DT0QgPSBjb2Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJlbnRUaWxlLkNPQyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkY5MDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gKDAsIF91dGlsLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlLmluZGV4ID0gKDAsIF91dGlsLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uICsgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUubGVuZ3RoID0gKDAsIF91dGlsLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uICsgNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUuZGF0YUVuZCA9IHRpbGUubGVuZ3RoICsgcG9zaXRpb24gLSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlLnBhcnRJbmRleCA9IGRhdGFbcG9zaXRpb24gKyA4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZS5wYXJ0c0NvdW50ID0gZGF0YVtwb3NpdGlvbiArIDldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1haW5IZWFkZXIgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGlsZS5wYXJ0SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUuQ09EID0gY29udGV4dC5DT0Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlLkNPQyA9IGNvbnRleHQuQ09DLnNsaWNlKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZS5RQ0QgPSBjb250ZXh0LlFDRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUuUUNDID0gY29udGV4dC5RQ0Muc2xpY2UoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJlbnRUaWxlID0gdGlsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkY5MzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZSA9IGNvbnRleHQuY3VycmVudFRpbGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpbGUucGFydEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplVGlsZShjb250ZXh0LCB0aWxlLmluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkUGFja2V0cyhjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHRpbGUuZGF0YUVuZCAtIHBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpbGVQYWNrZXRzKGNvbnRleHQsIGRhdGEsIHBvc2l0aW9uLCBsZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRjU1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRjU3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRjU4OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRjY0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAoMCwgX3V0aWwucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRjUzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZGVzdHJlYW0gY29kZSAweEZGNTMgKENPQykgaXMgJyArICdub3QgaW1wbGVtZW50ZWQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBjb2Rlc3RyZWFtIGNvZGU6ICcgKyBjb2RlLnRvU3RyaW5nKDE2KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IGxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvTm90UmVjb3ZlciB8fCB0aGlzLmZhaWxPbkNvcnJ1cHRlZEltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSnB4RXJyb3IoZS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnSlBYOiBUcnlpbmcgdG8gcmVjb3ZlciBmcm9tOiAnICsgZS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGlsZXMgPSB0cmFuc2Zvcm1Db21wb25lbnRzKGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSBjb250ZXh0LlNJWi5Yc2l6IC0gY29udGV4dC5TSVouWE9zaXo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBjb250ZXh0LlNJWi5Zc2l6IC0gY29udGV4dC5TSVouWU9zaXo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRzQ291bnQgPSBjb250ZXh0LlNJWi5Dc2l6O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbXBvbmVudERpbWVuc2lvbnMoY29tcG9uZW50LCBzaXopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC54MCA9IE1hdGguY2VpbChzaXouWE9zaXogLyBjb21wb25lbnQuWFJzaXopO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LngxID0gTWF0aC5jZWlsKHNpei5Yc2l6IC8gY29tcG9uZW50LlhSc2l6KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC55MCA9IE1hdGguY2VpbChzaXouWU9zaXogLyBjb21wb25lbnQuWVJzaXopO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnkxID0gTWF0aC5jZWlsKHNpei5Zc2l6IC8gY29tcG9uZW50LllSc2l6KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC53aWR0aCA9IGNvbXBvbmVudC54MSAtIGNvbXBvbmVudC54MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5oZWlnaHQgPSBjb21wb25lbnQueTEgLSBjb21wb25lbnQueTA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjYWxjdWxhdGVUaWxlR3JpZHMoY29udGV4dCwgY29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpeiA9IGNvbnRleHQuU0laO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1YdGlsZXMgPSBNYXRoLmNlaWwoKHNpei5Yc2l6IC0gc2l6LlhUT3NpeikgLyBzaXouWFRzaXopO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bVl0aWxlcyA9IE1hdGguY2VpbCgoc2l6LllzaXogLSBzaXouWVRPc2l6KSAvIHNpei5ZVHNpeik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHEgPSAwOyBxIDwgbnVtWXRpbGVzOyBxKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IG51bVh0aWxlczsgcCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZS50eDAgPSBNYXRoLm1heChzaXouWFRPc2l6ICsgcCAqIHNpei5YVHNpeiwgc2l6LlhPc2l6KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZS50eTAgPSBNYXRoLm1heChzaXouWVRPc2l6ICsgcSAqIHNpei5ZVHNpeiwgc2l6LllPc2l6KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZS50eDEgPSBNYXRoLm1pbihzaXouWFRPc2l6ICsgKHAgKyAxKSAqIHNpei5YVHNpeiwgc2l6LlhzaXopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlLnR5MSA9IE1hdGgubWluKHNpei5ZVE9zaXogKyAocSArIDEpICogc2l6LllUc2l6LCBzaXouWXNpeik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUud2lkdGggPSB0aWxlLnR4MSAtIHRpbGUudHgwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlLmhlaWdodCA9IHRpbGUudHkxIC0gdGlsZS50eTA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUuY29tcG9uZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlcy5wdXNoKHRpbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC50aWxlcyA9IHRpbGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudHNDb3VudCA9IHNpei5Dc2l6O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBjb21wb25lbnRzQ291bnQ7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudCA9IGNvbXBvbmVudHNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgamogPSB0aWxlcy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aWxlQ29tcG9uZW50ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUgPSB0aWxlc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZUNvbXBvbmVudC50Y3gwID0gTWF0aC5jZWlsKHRpbGUudHgwIC8gY29tcG9uZW50LlhSc2l6KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZUNvbXBvbmVudC50Y3kwID0gTWF0aC5jZWlsKHRpbGUudHkwIC8gY29tcG9uZW50LllSc2l6KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZUNvbXBvbmVudC50Y3gxID0gTWF0aC5jZWlsKHRpbGUudHgxIC8gY29tcG9uZW50LlhSc2l6KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZUNvbXBvbmVudC50Y3kxID0gTWF0aC5jZWlsKHRpbGUudHkxIC8gY29tcG9uZW50LllSc2l6KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZUNvbXBvbmVudC53aWR0aCA9IHRpbGVDb21wb25lbnQudGN4MSAtIHRpbGVDb21wb25lbnQudGN4MDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZUNvbXBvbmVudC5oZWlnaHQgPSB0aWxlQ29tcG9uZW50LnRjeTEgLSB0aWxlQ29tcG9uZW50LnRjeTA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUuY29tcG9uZW50c1tpXSA9IHRpbGVDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0QmxvY2tzRGltZW5zaW9ucyhjb250ZXh0LCBjb21wb25lbnQsIHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RPckNvYyA9IGNvbXBvbmVudC5jb2RpbmdTdHlsZVBhcmFtZXRlcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0ge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29kT3JDb2MuZW50cm9weUNvZGVyV2l0aEN1c3RvbVByZWNpbmN0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5QUHggPSAxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuUFB5ID0gMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5QUHggPSBjb2RPckNvYy5wcmVjaW5jdHNTaXplc1tyXS5QUHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LlBQeSA9IGNvZE9yQ29jLnByZWNpbmN0c1NpemVzW3JdLlBQeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnhjYl8gPSByID4gMCA/IE1hdGgubWluKGNvZE9yQ29jLnhjYiwgcmVzdWx0LlBQeCAtIDEpIDogTWF0aC5taW4oY29kT3JDb2MueGNiLCByZXN1bHQuUFB4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC55Y2JfID0gciA+IDAgPyBNYXRoLm1pbihjb2RPckNvYy55Y2IsIHJlc3VsdC5QUHkgLSAxKSA6IE1hdGgubWluKGNvZE9yQ29jLnljYiwgcmVzdWx0LlBQeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYnVpbGRQcmVjaW5jdHMoY29udGV4dCwgcmVzb2x1dGlvbiwgZGltZW5zaW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZWNpbmN0V2lkdGggPSAxIDw8IGRpbWVuc2lvbnMuUFB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZWNpbmN0SGVpZ2h0ID0gMSA8PCBkaW1lbnNpb25zLlBQeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc1plcm9SZXMgPSByZXNvbHV0aW9uLnJlc0xldmVsID09PSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZWNpbmN0V2lkdGhJblN1YmJhbmQgPSAxIDw8IGRpbWVuc2lvbnMuUFB4ICsgKGlzWmVyb1JlcyA/IDAgOiAtMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJlY2luY3RIZWlnaHRJblN1YmJhbmQgPSAxIDw8IGRpbWVuc2lvbnMuUFB5ICsgKGlzWmVyb1JlcyA/IDAgOiAtMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtcHJlY2luY3Rzd2lkZSA9IHJlc29sdXRpb24udHJ4MSA+IHJlc29sdXRpb24udHJ4MCA/IE1hdGguY2VpbChyZXNvbHV0aW9uLnRyeDEgLyBwcmVjaW5jdFdpZHRoKSAtIE1hdGguZmxvb3IocmVzb2x1dGlvbi50cngwIC8gcHJlY2luY3RXaWR0aCkgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bXByZWNpbmN0c2hpZ2ggPSByZXNvbHV0aW9uLnRyeTEgPiByZXNvbHV0aW9uLnRyeTAgPyBNYXRoLmNlaWwocmVzb2x1dGlvbi50cnkxIC8gcHJlY2luY3RIZWlnaHQpIC0gTWF0aC5mbG9vcihyZXNvbHV0aW9uLnRyeTAgLyBwcmVjaW5jdEhlaWdodCkgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bXByZWNpbmN0cyA9IG51bXByZWNpbmN0c3dpZGUgKiBudW1wcmVjaW5jdHNoaWdoO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbi5wcmVjaW5jdFBhcmFtZXRlcnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2luY3RXaWR0aDogcHJlY2luY3RXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaW5jdEhlaWdodDogcHJlY2luY3RIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtcHJlY2luY3Rzd2lkZTogbnVtcHJlY2luY3Rzd2lkZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1wcmVjaW5jdHNoaWdoOiBudW1wcmVjaW5jdHNoaWdoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bXByZWNpbmN0czogbnVtcHJlY2luY3RzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpbmN0V2lkdGhJblN1YmJhbmQ6IHByZWNpbmN0V2lkdGhJblN1YmJhbmQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2luY3RIZWlnaHRJblN1YmJhbmQ6IHByZWNpbmN0SGVpZ2h0SW5TdWJiYW5kXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYnVpbGRDb2RlYmxvY2tzKGNvbnRleHQsIHN1YmJhbmQsIGRpbWVuc2lvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4Y2JfID0gZGltZW5zaW9ucy54Y2JfO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHljYl8gPSBkaW1lbnNpb25zLnljYl87XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZWJsb2NrV2lkdGggPSAxIDw8IHhjYl87XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZWJsb2NrSGVpZ2h0ID0gMSA8PCB5Y2JfO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNieDAgPSBzdWJiYW5kLnRieDAgPj4geGNiXztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYnkwID0gc3ViYmFuZC50YnkwID4+IHljYl87XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2J4MSA9IHN1YmJhbmQudGJ4MSArIGNvZGVibG9ja1dpZHRoIC0gMSA+PiB4Y2JfO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNieTEgPSBzdWJiYW5kLnRieTEgKyBjb2RlYmxvY2tIZWlnaHQgLSAxID4+IHljYl87XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJlY2luY3RQYXJhbWV0ZXJzID0gc3ViYmFuZC5yZXNvbHV0aW9uLnByZWNpbmN0UGFyYW1ldGVycztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlYmxvY2tzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJlY2luY3RzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaiwgY29kZWJsb2NrLCBwcmVjaW5jdE51bWJlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gY2J5MDsgaiA8IGNieTE7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IGNieDA7IGkgPCBjYngxOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWJsb2NrID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2J4OiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2J5OiBqLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJ4MDogY29kZWJsb2NrV2lkdGggKiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJ5MDogY29kZWJsb2NrSGVpZ2h0ICogaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRieDE6IGNvZGVibG9ja1dpZHRoICogKGkgKyAxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRieTE6IGNvZGVibG9ja0hlaWdodCAqIChqICsgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWJsb2NrLnRieDBfID0gTWF0aC5tYXgoc3ViYmFuZC50YngwLCBjb2RlYmxvY2sudGJ4MCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVibG9jay50YnkwXyA9IE1hdGgubWF4KHN1YmJhbmQudGJ5MCwgY29kZWJsb2NrLnRieTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlYmxvY2sudGJ4MV8gPSBNYXRoLm1pbihzdWJiYW5kLnRieDEsIGNvZGVibG9jay50YngxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWJsb2NrLnRieTFfID0gTWF0aC5taW4oc3ViYmFuZC50YnkxLCBjb2RlYmxvY2sudGJ5MSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwaSA9IE1hdGguZmxvb3IoKGNvZGVibG9jay50YngwXyAtIHN1YmJhbmQudGJ4MCkgLyBwcmVjaW5jdFBhcmFtZXRlcnMucHJlY2luY3RXaWR0aEluU3ViYmFuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwaiA9IE1hdGguZmxvb3IoKGNvZGVibG9jay50YnkwXyAtIHN1YmJhbmQudGJ5MCkgLyBwcmVjaW5jdFBhcmFtZXRlcnMucHJlY2luY3RIZWlnaHRJblN1YmJhbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaW5jdE51bWJlciA9IHBpICsgcGogKiBwcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3Rzd2lkZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWJsb2NrLnByZWNpbmN0TnVtYmVyID0gcHJlY2luY3ROdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVibG9jay5zdWJiYW5kVHlwZSA9IHN1YmJhbmQudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWJsb2NrLkxibG9jayA9IDM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGVibG9jay50YngxXyA8PSBjb2RlYmxvY2sudGJ4MF8gfHwgY29kZWJsb2NrLnRieTFfIDw9IGNvZGVibG9jay50YnkwXykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlYmxvY2tzLnB1c2goY29kZWJsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZWNpbmN0ID0gcHJlY2luY3RzW3ByZWNpbmN0TnVtYmVyXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlY2luY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBwcmVjaW5jdC5jYnhNaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaW5jdC5jYnhNaW4gPSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpID4gcHJlY2luY3QuY2J4TWF4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2luY3QuY2J4TWF4ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPCBwcmVjaW5jdC5jYnlNaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaW5jdC5jYnhNaW4gPSBqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChqID4gcHJlY2luY3QuY2J5TWF4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2luY3QuY2J5TWF4ID0gajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpbmN0c1twcmVjaW5jdE51bWJlcl0gPSBwcmVjaW5jdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYnhNaW46IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2J5TWluOiBqLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNieE1heDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYnlNYXg6IGpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlYmxvY2sucHJlY2luY3QgPSBwcmVjaW5jdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQuY29kZWJsb2NrUGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlYmxvY2tXaWR0aDogeGNiXyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlYmxvY2tIZWlnaHQ6IHljYl8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtY29kZWJsb2Nrd2lkZTogY2J4MSAtIGNieDAgKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWNvZGVibG9ja2hpZ2g6IGNieTEgLSBjYnkwICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQuY29kZWJsb2NrcyA9IGNvZGVibG9ja3M7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJiYW5kLnByZWNpbmN0cyA9IHByZWNpbmN0cztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVBhY2tldChyZXNvbHV0aW9uLCBwcmVjaW5jdE51bWJlciwgbGF5ZXJOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVjaW5jdENvZGVibG9ja3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJiYW5kcyA9IHJlc29sdXRpb24uc3ViYmFuZHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHN1YmJhbmRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ViYmFuZCA9IHN1YmJhbmRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlYmxvY2tzID0gc3ViYmFuZC5jb2RlYmxvY2tzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gY29kZWJsb2Nrcy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlYmxvY2sgPSBjb2RlYmxvY2tzW2pdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlYmxvY2sucHJlY2luY3ROdW1iZXIgIT09IHByZWNpbmN0TnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpbmN0Q29kZWJsb2Nrcy5wdXNoKGNvZGVibG9jayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyTnVtYmVyOiBsYXllck51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlYmxvY2tzOiBwcmVjaW5jdENvZGVibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBMYXllclJlc29sdXRpb25Db21wb25lbnRQb3NpdGlvbkl0ZXJhdG9yKGNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXogPSBjb250ZXh0LlNJWjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aWxlSW5kZXggPSBjb250ZXh0LmN1cnJlbnRUaWxlLmluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbGUgPSBjb250ZXh0LnRpbGVzW3RpbGVJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGF5ZXJzQ291bnQgPSB0aWxlLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubGF5ZXJzQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50c0NvdW50ID0gc2l6LkNzaXo7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcSA9IDA7IHEgPCBjb21wb25lbnRzQ291bnQ7IHErKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heERlY29tcG9zaXRpb25MZXZlbHNDb3VudCA9IE1hdGgubWF4KG1heERlY29tcG9zaXRpb25MZXZlbHNDb3VudCwgdGlsZS5jb21wb25lbnRzW3FdLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbCA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFBhY2tldCA9IGZ1bmN0aW9uIEpweEltYWdlX25leHRQYWNrZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGwgPCBsYXllcnNDb3VudDsgbCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyByIDw9IG1heERlY29tcG9zaXRpb25MZXZlbHNDb3VudDsgcisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGNvbXBvbmVudHNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudCA9IHRpbGUuY29tcG9uZW50c1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4gY29tcG9uZW50LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb21wb25lbnQucmVzb2x1dGlvbnNbcl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bXByZWNpbmN0cyA9IHJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0cztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBrIDwgbnVtcHJlY2luY3RzOykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFja2V0ID0gY3JlYXRlUGFja2V0KHJlc29sdXRpb24sIGssIGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYWNrZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpweEVycm9yKCdPdXQgb2YgcGFja2V0cycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlc29sdXRpb25MYXllckNvbXBvbmVudFBvc2l0aW9uSXRlcmF0b3IoY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpeiA9IGNvbnRleHQuU0laO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbGVJbmRleCA9IGNvbnRleHQuY3VycmVudFRpbGUuaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGlsZSA9IGNvbnRleHQudGlsZXNbdGlsZUluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYXllcnNDb3VudCA9IHRpbGUuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnRzQ291bnQgPSBzaXouQ3NpejtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBxID0gMDsgcSA8IGNvbXBvbmVudHNDb3VudDsgcSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gTWF0aC5tYXgobWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50LCB0aWxlLmNvbXBvbmVudHNbcV0uY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0UGFja2V0ID0gZnVuY3Rpb24gSnB4SW1hZ2VfbmV4dFBhY2tldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgciA8PSBtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7IHIrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbCA8IGxheWVyc0NvdW50OyBsKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgY29tcG9uZW50c0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50ID0gdGlsZS5jb21wb25lbnRzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPiBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IGNvbXBvbmVudC5yZXNvbHV0aW9uc1tyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtcHJlY2luY3RzID0gcmVzb2x1dGlvbi5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGsgPCBudW1wcmVjaW5jdHM7KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWNrZXQgPSBjcmVhdGVQYWNrZXQocmVzb2x1dGlvbiwgaywgbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhY2tldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSnB4RXJyb3IoJ091dCBvZiBwYWNrZXRzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVzb2x1dGlvblBvc2l0aW9uQ29tcG9uZW50TGF5ZXJJdGVyYXRvcihjb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ID0gY29udGV4dC5TSVo7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGlsZUluZGV4ID0gY29udGV4dC5jdXJyZW50VGlsZS5pbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aWxlID0gY29udGV4dC50aWxlc1t0aWxlSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxheWVyc0NvdW50ID0gdGlsZS5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudHNDb3VudCA9IHNpei5Dc2l6O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGwsIHIsIGMsIHA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjID0gMDsgYyA8IGNvbXBvbmVudHNDb3VudDsgYysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudCA9IHRpbGUuY29tcG9uZW50c1tjXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgPSBNYXRoLm1heChtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQsIGNvbXBvbmVudC5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heE51bVByZWNpbmN0c0luTGV2ZWwgPSBuZXcgSW50MzJBcnJheShtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgKyAxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChyID0gMDsgciA8PSBtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7ICsrcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhOdW1QcmVjaW5jdHMgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjID0gMDsgYyA8IGNvbXBvbmVudHNDb3VudDsgKytjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNvbHV0aW9ucyA9IHRpbGUuY29tcG9uZW50c1tjXS5yZXNvbHV0aW9ucztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA8IHJlc29sdXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4TnVtUHJlY2luY3RzID0gTWF0aC5tYXgobWF4TnVtUHJlY2luY3RzLCByZXNvbHV0aW9uc1tyXS5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heE51bVByZWNpbmN0c0luTGV2ZWxbcl0gPSBtYXhOdW1QcmVjaW5jdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGwgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgciA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRQYWNrZXQgPSBmdW5jdGlvbiBKcHhJbWFnZV9uZXh0UGFja2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyByIDw9IG1heERlY29tcG9zaXRpb25MZXZlbHNDb3VudDsgcisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBwIDwgbWF4TnVtUHJlY2luY3RzSW5MZXZlbFtyXTsgcCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgYyA8IGNvbXBvbmVudHNDb3VudDsgYysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudCA9IHRpbGUuY29tcG9uZW50c1tjXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4gY29tcG9uZW50LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb21wb25lbnQucmVzb2x1dGlvbnNbcl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bXByZWNpbmN0cyA9IHJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0cztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwID49IG51bXByZWNpbmN0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbCA8IGxheWVyc0NvdW50Oykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFja2V0ID0gY3JlYXRlUGFja2V0KHJlc29sdXRpb24sIHAsIGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYWNrZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpweEVycm9yKCdPdXQgb2YgcGFja2V0cycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBvc2l0aW9uQ29tcG9uZW50UmVzb2x1dGlvbkxheWVySXRlcmF0b3IoY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpeiA9IGNvbnRleHQuU0laO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbGVJbmRleCA9IGNvbnRleHQuY3VycmVudFRpbGUuaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGlsZSA9IGNvbnRleHQudGlsZXNbdGlsZUluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYXllcnNDb3VudCA9IHRpbGUuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnRzQ291bnQgPSBzaXouQ3NpejtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVjaW5jdHNTaXplcyA9IGdldFByZWNpbmN0U2l6ZXNJbkltYWdlU2NhbGUodGlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJlY2luY3RzSXRlcmF0aW9uU2l6ZXMgPSBwcmVjaW5jdHNTaXplcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBweCA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHkgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRQYWNrZXQgPSBmdW5jdGlvbiBKcHhJbWFnZV9uZXh0UGFja2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBweSA8IHByZWNpbmN0c0l0ZXJhdGlvblNpemVzLm1heE51bUhpZ2g7IHB5KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHB4IDwgcHJlY2luY3RzSXRlcmF0aW9uU2l6ZXMubWF4TnVtV2lkZTsgcHgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGMgPCBjb21wb25lbnRzQ291bnQ7IGMrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnQgPSB0aWxlLmNvbXBvbmVudHNbY107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29tcG9zaXRpb25MZXZlbHNDb3VudCA9IGNvbXBvbmVudC5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHIgPD0gZGVjb21wb3NpdGlvbkxldmVsc0NvdW50OyByKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb21wb25lbnQucmVzb2x1dGlvbnNbcl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplSW5JbWFnZVNjYWxlID0gcHJlY2luY3RzU2l6ZXMuY29tcG9uZW50c1tjXS5yZXNvbHV0aW9uc1tyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGsgPSBnZXRQcmVjaW5jdEluZGV4SWZFeGlzdChweCwgcHksIHNpemVJbkltYWdlU2NhbGUsIHByZWNpbmN0c0l0ZXJhdGlvblNpemVzLCByZXNvbHV0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbCA8IGxheWVyc0NvdW50Oykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhY2tldCA9IGNyZWF0ZVBhY2tldChyZXNvbHV0aW9uLCBrLCBsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYWNrZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpweEVycm9yKCdPdXQgb2YgcGFja2V0cycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENvbXBvbmVudFBvc2l0aW9uUmVzb2x1dGlvbkxheWVySXRlcmF0b3IoY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpeiA9IGNvbnRleHQuU0laO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbGVJbmRleCA9IGNvbnRleHQuY3VycmVudFRpbGUuaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGlsZSA9IGNvbnRleHQudGlsZXNbdGlsZUluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYXllcnNDb3VudCA9IHRpbGUuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnRzQ291bnQgPSBzaXouQ3NpejtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVjaW5jdHNTaXplcyA9IGdldFByZWNpbmN0U2l6ZXNJbkltYWdlU2NhbGUodGlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbCA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHggPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB5ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0UGFja2V0ID0gZnVuY3Rpb24gSnB4SW1hZ2VfbmV4dFBhY2tldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgYyA8IGNvbXBvbmVudHNDb3VudDsgKytjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnQgPSB0aWxlLmNvbXBvbmVudHNbY107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVjaW5jdHNJdGVyYXRpb25TaXplcyA9IHByZWNpbmN0c1NpemVzLmNvbXBvbmVudHNbY107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgPSBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcHkgPCBwcmVjaW5jdHNJdGVyYXRpb25TaXplcy5tYXhOdW1IaWdoOyBweSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcHggPCBwcmVjaW5jdHNJdGVyYXRpb25TaXplcy5tYXhOdW1XaWRlOyBweCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHIgPD0gZGVjb21wb3NpdGlvbkxldmVsc0NvdW50OyByKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb21wb25lbnQucmVzb2x1dGlvbnNbcl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplSW5JbWFnZVNjYWxlID0gcHJlY2luY3RzSXRlcmF0aW9uU2l6ZXMucmVzb2x1dGlvbnNbcl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrID0gZ2V0UHJlY2luY3RJbmRleElmRXhpc3QocHgsIHB5LCBzaXplSW5JbWFnZVNjYWxlLCBwcmVjaW5jdHNJdGVyYXRpb25TaXplcywgcmVzb2x1dGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGwgPCBsYXllcnNDb3VudDspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWNrZXQgPSBjcmVhdGVQYWNrZXQocmVzb2x1dGlvbiwgaywgbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFja2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB5ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSnB4RXJyb3IoJ091dCBvZiBwYWNrZXRzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0UHJlY2luY3RJbmRleElmRXhpc3QocHhJbmRleCwgcHlJbmRleCwgc2l6ZUluSW1hZ2VTY2FsZSwgcHJlY2luY3RJdGVyYXRpb25TaXplcywgcmVzb2x1dGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvc1ggPSBweEluZGV4ICogcHJlY2luY3RJdGVyYXRpb25TaXplcy5taW5XaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3NZID0gcHlJbmRleCAqIHByZWNpbmN0SXRlcmF0aW9uU2l6ZXMubWluSGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zWCAlIHNpemVJbkltYWdlU2NhbGUud2lkdGggIT09IDAgfHwgcG9zWSAlIHNpemVJbkltYWdlU2NhbGUuaGVpZ2h0ICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydFByZWNpbmN0Um93SW5kZXggPSBwb3NZIC8gc2l6ZUluSW1hZ2VTY2FsZS53aWR0aCAqIHJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0c3dpZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zWCAvIHNpemVJbkltYWdlU2NhbGUuaGVpZ2h0ICsgc3RhcnRQcmVjaW5jdFJvd0luZGV4O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0UHJlY2luY3RTaXplc0luSW1hZ2VTY2FsZSh0aWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50c0NvdW50ID0gdGlsZS5jb21wb25lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtaW5XaWR0aCA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWluSGVpZ2h0ID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhOdW1XaWRlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhOdW1IaWdoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplUGVyQ29tcG9uZW50ID0gbmV3IEFycmF5KGNvbXBvbmVudHNDb3VudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY29tcG9uZW50c0NvdW50OyBjKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50ID0gdGlsZS5jb21wb25lbnRzW2NdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgPSBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZVBlclJlc29sdXRpb24gPSBuZXcgQXJyYXkoZGVjb21wb3NpdGlvbkxldmVsc0NvdW50ICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1pbldpZHRoQ3VycmVudENvbXBvbmVudCA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1pbkhlaWdodEN1cnJlbnRDb21wb25lbnQgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhOdW1XaWRlQ3VycmVudENvbXBvbmVudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heE51bUhpZ2hDdXJyZW50Q29tcG9uZW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgciA9IGRlY29tcG9zaXRpb25MZXZlbHNDb3VudDsgciA+PSAwOyAtLXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb21wb25lbnQucmVzb2x1dGlvbnNbcl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aEN1cnJlbnRSZXNvbHV0aW9uID0gc2NhbGUgKiByZXNvbHV0aW9uLnByZWNpbmN0UGFyYW1ldGVycy5wcmVjaW5jdFdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0Q3VycmVudFJlc29sdXRpb24gPSBzY2FsZSAqIHJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLnByZWNpbmN0SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aEN1cnJlbnRDb21wb25lbnQgPSBNYXRoLm1pbihtaW5XaWR0aEN1cnJlbnRDb21wb25lbnQsIHdpZHRoQ3VycmVudFJlc29sdXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHRDdXJyZW50Q29tcG9uZW50ID0gTWF0aC5taW4obWluSGVpZ2h0Q3VycmVudENvbXBvbmVudCwgaGVpZ2h0Q3VycmVudFJlc29sdXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhOdW1XaWRlQ3VycmVudENvbXBvbmVudCA9IE1hdGgubWF4KG1heE51bVdpZGVDdXJyZW50Q29tcG9uZW50LCByZXNvbHV0aW9uLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHN3aWRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4TnVtSGlnaEN1cnJlbnRDb21wb25lbnQgPSBNYXRoLm1heChtYXhOdW1IaWdoQ3VycmVudENvbXBvbmVudCwgcmVzb2x1dGlvbi5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzaGlnaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVQZXJSZXNvbHV0aW9uW3JdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoQ3VycmVudFJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodEN1cnJlbnRSZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlIDw8PSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoID0gTWF0aC5taW4obWluV2lkdGgsIG1pbldpZHRoQ3VycmVudENvbXBvbmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0ID0gTWF0aC5taW4obWluSGVpZ2h0LCBtaW5IZWlnaHRDdXJyZW50Q29tcG9uZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhOdW1XaWRlID0gTWF0aC5tYXgobWF4TnVtV2lkZSwgbWF4TnVtV2lkZUN1cnJlbnRDb21wb25lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heE51bUhpZ2ggPSBNYXRoLm1heChtYXhOdW1IaWdoLCBtYXhOdW1IaWdoQ3VycmVudENvbXBvbmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZVBlckNvbXBvbmVudFtjXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbnM6IHNpemVQZXJSZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbWluV2lkdGhDdXJyZW50Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IG1pbkhlaWdodEN1cnJlbnRDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heE51bVdpZGU6IG1heE51bVdpZGVDdXJyZW50Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhOdW1IaWdoOiBtYXhOdW1IaWdoQ3VycmVudENvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50czogc2l6ZVBlckNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbWluV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBtaW5IZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4TnVtV2lkZTogbWF4TnVtV2lkZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhOdW1IaWdoOiBtYXhOdW1IaWdoXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYnVpbGRQYWNrZXRzKGNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXogPSBjb250ZXh0LlNJWjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aWxlSW5kZXggPSBjb250ZXh0LmN1cnJlbnRUaWxlLmluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbGUgPSBjb250ZXh0LnRpbGVzW3RpbGVJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50c0NvdW50ID0gc2l6LkNzaXo7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY29tcG9uZW50c0NvdW50OyBjKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50ID0gdGlsZS5jb21wb25lbnRzW2NdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgPSBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzb2x1dGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ViYmFuZHMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDw9IGRlY29tcG9zaXRpb25MZXZlbHNDb3VudDsgcisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBibG9ja3NEaW1lbnNpb25zID0gZ2V0QmxvY2tzRGltZW5zaW9ucyhjb250ZXh0LCBjb21wb25lbnQsIHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSAxIDw8IGRlY29tcG9zaXRpb25MZXZlbHNDb3VudCAtIHI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb24udHJ4MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MCAvIHNjYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbi50cnkwID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3kwIC8gc2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHV0aW9uLnRyeDEgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeDEgLyBzY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb24udHJ5MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MSAvIHNjYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbi5yZXNMZXZlbCA9IHI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkUHJlY2luY3RzKGNvbnRleHQsIHJlc29sdXRpb24sIGJsb2Nrc0RpbWVuc2lvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHV0aW9ucy5wdXNoKHJlc29sdXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ViYmFuZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZC50eXBlID0gJ0xMJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQudGJ4MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MCAvIHNjYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQudGJ5MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MCAvIHNjYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQudGJ4MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MSAvIHNjYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQudGJ5MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MSAvIHNjYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZENvZGVibG9ja3MoY29udGV4dCwgc3ViYmFuZCwgYmxvY2tzRGltZW5zaW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJiYW5kcy5wdXNoKHN1YmJhbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbi5zdWJiYW5kcyA9IFtzdWJiYW5kXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBic2NhbGUgPSAxIDw8IGRlY29tcG9zaXRpb25MZXZlbHNDb3VudCAtIHIgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdXRpb25TdWJiYW5kcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZC50eXBlID0gJ0hMJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQudGJ4MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MCAvIGJzY2FsZSAtIDAuNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJiYW5kLnRieTAgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeTAgLyBic2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZC50YngxID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3gxIC8gYnNjYWxlIC0gMC41KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQudGJ5MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MSAvIGJzY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJiYW5kLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb2RlYmxvY2tzKGNvbnRleHQsIHN1YmJhbmQsIGJsb2Nrc0RpbWVuc2lvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZHMucHVzaChzdWJiYW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb25TdWJiYW5kcy5wdXNoKHN1YmJhbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZC50eXBlID0gJ0xIJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQudGJ4MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MCAvIGJzY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJiYW5kLnRieTAgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeTAgLyBic2NhbGUgLSAwLjUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZC50YngxID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3gxIC8gYnNjYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQudGJ5MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MSAvIGJzY2FsZSAtIDAuNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJiYW5kLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb2RlYmxvY2tzKGNvbnRleHQsIHN1YmJhbmQsIGJsb2Nrc0RpbWVuc2lvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZHMucHVzaChzdWJiYW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb25TdWJiYW5kcy5wdXNoKHN1YmJhbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZC50eXBlID0gJ0hIJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQudGJ4MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MCAvIGJzY2FsZSAtIDAuNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJiYW5kLnRieTAgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeTAgLyBic2NhbGUgLSAwLjUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZC50YngxID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3gxIC8gYnNjYWxlIC0gMC41KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQudGJ5MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MSAvIGJzY2FsZSAtIDAuNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJiYW5kLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb2RlYmxvY2tzKGNvbnRleHQsIHN1YmJhbmQsIGJsb2Nrc0RpbWVuc2lvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZHMucHVzaChzdWJiYW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb25TdWJiYW5kcy5wdXNoKHN1YmJhbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbi5zdWJiYW5kcyA9IHJlc29sdXRpb25TdWJiYW5kcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5yZXNvbHV0aW9ucyA9IHJlc29sdXRpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5zdWJiYW5kcyA9IHN1YmJhbmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvZ3Jlc3Npb25PcmRlciA9IHRpbGUuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5wcm9ncmVzc2lvbk9yZGVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb2dyZXNzaW9uT3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUucGFja2V0c0l0ZXJhdG9yID0gbmV3IExheWVyUmVzb2x1dGlvbkNvbXBvbmVudFBvc2l0aW9uSXRlcmF0b3IoY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlLnBhY2tldHNJdGVyYXRvciA9IG5ldyBSZXNvbHV0aW9uTGF5ZXJDb21wb25lbnRQb3NpdGlvbkl0ZXJhdG9yKGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZS5wYWNrZXRzSXRlcmF0b3IgPSBuZXcgUmVzb2x1dGlvblBvc2l0aW9uQ29tcG9uZW50TGF5ZXJJdGVyYXRvcihjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUucGFja2V0c0l0ZXJhdG9yID0gbmV3IFBvc2l0aW9uQ29tcG9uZW50UmVzb2x1dGlvbkxheWVySXRlcmF0b3IoY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlLnBhY2tldHNJdGVyYXRvciA9IG5ldyBDb21wb25lbnRQb3NpdGlvblJlc29sdXRpb25MYXllckl0ZXJhdG9yKGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKcHhFcnJvcihcIlVuc3VwcG9ydGVkIHByb2dyZXNzaW9uIG9yZGVyIFwiLmNvbmNhdChwcm9ncmVzc2lvbk9yZGVyKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwYXJzZVRpbGVQYWNrZXRzKGNvbnRleHQsIGRhdGEsIG9mZnNldCwgZGF0YUxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyU2l6ZSA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcE5leHRCaXQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZEJpdHMoY291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYnVmZmVyU2l6ZSA8IGNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gZGF0YVtvZmZzZXQgKyBwb3NpdGlvbl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uKys7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNraXBOZXh0Qml0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBidWZmZXIgPDwgNyB8IGI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJTaXplICs9IDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwTmV4dEJpdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVyIDw8IDggfCBiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyU2l6ZSArPSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGIgPT09IDB4RkYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBOZXh0Qml0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclNpemUgLT0gY291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlciA+Pj4gYnVmZmVyU2l6ZSAmICgxIDw8IGNvdW50KSAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNraXBNYXJrZXJJZkVxdWFsKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFbb2Zmc2V0ICsgcG9zaXRpb24gLSAxXSA9PT0gMHhGRiAmJiBkYXRhW29mZnNldCArIHBvc2l0aW9uXSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcEJ5dGVzKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFbb2Zmc2V0ICsgcG9zaXRpb25dID09PSAweEZGICYmIGRhdGFbb2Zmc2V0ICsgcG9zaXRpb24gKyAxXSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcEJ5dGVzKDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNraXBCeXRlcyhjb3VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IGNvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBhbGlnblRvQnl0ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJTaXplID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChza2lwTmV4dEJpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwTmV4dEJpdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZENvZGluZ3Bhc3NlcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZEJpdHMoMSkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRCaXRzKDEpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJlYWRCaXRzKDIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIDwgMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgKyAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcmVhZEJpdHMoNSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPCAzMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgKyA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcmVhZEJpdHMoNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICsgMzc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aWxlSW5kZXggPSBjb250ZXh0LmN1cnJlbnRUaWxlLmluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbGUgPSBjb250ZXh0LnRpbGVzW3RpbGVJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc29wTWFya2VyVXNlZCA9IGNvbnRleHQuQ09ELnNvcE1hcmtlclVzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXBoTWFya2VyVXNlZCA9IGNvbnRleHQuQ09ELmVwaE1hcmtlclVzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFja2V0c0l0ZXJhdG9yID0gdGlsZS5wYWNrZXRzSXRlcmF0b3I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGRhdGFMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnblRvQnl0ZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvcE1hcmtlclVzZWQgJiYgc2tpcE1hcmtlcklmRXF1YWwoMHg5MSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcEJ5dGVzKDQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWNrZXQgPSBwYWNrZXRzSXRlcmF0b3IubmV4dFBhY2tldCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWFkQml0cygxKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGF5ZXJOdW1iZXIgPSBwYWNrZXQubGF5ZXJOdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVibG9jaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHBhY2tldC5jb2RlYmxvY2tzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWJsb2NrID0gcGFja2V0LmNvZGVibG9ja3NbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVjaW5jdCA9IGNvZGVibG9jay5wcmVjaW5jdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVibG9ja0NvbHVtbiA9IGNvZGVibG9jay5jYnggLSBwcmVjaW5jdC5jYnhNaW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlYmxvY2tSb3cgPSBjb2RlYmxvY2suY2J5IC0gcHJlY2luY3QuY2J5TWluO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZWJsb2NrSW5jbHVkZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0VGltZUluY2x1c2lvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVSZWFkeTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZWJsb2NrWydpbmNsdWRlZCddICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVibG9ja0luY2x1ZGVkID0gISFyZWFkQml0cygxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpbmN0ID0gY29kZWJsb2NrLnByZWNpbmN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluY2x1c2lvblRyZWUsIHplcm9CaXRQbGFuZXNUcmVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlY2luY3RbJ2luY2x1c2lvblRyZWUnXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaW9uVHJlZSA9IHByZWNpbmN0LmluY2x1c2lvblRyZWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IHByZWNpbmN0LmNieE1heCAtIHByZWNpbmN0LmNieE1pbiArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IHByZWNpbmN0LmNieU1heCAtIHByZWNpbmN0LmNieU1pbiArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaW9uVHJlZSA9IG5ldyBJbmNsdXNpb25UcmVlKHdpZHRoLCBoZWlnaHQsIGxheWVyTnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvQml0UGxhbmVzVHJlZSA9IG5ldyBUYWdUcmVlKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpbmN0LmluY2x1c2lvblRyZWUgPSBpbmNsdXNpb25UcmVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpbmN0Lnplcm9CaXRQbGFuZXNUcmVlID0gemVyb0JpdFBsYW5lc1RyZWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmNsdXNpb25UcmVlLnJlc2V0KGNvZGVibG9ja0NvbHVtbiwgY29kZWJsb2NrUm93LCBsYXllck51bWJlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZEJpdHMoMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVhZHkgPSAhaW5jbHVzaW9uVHJlZS5uZXh0TGV2ZWwoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlUmVhZHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlYmxvY2suaW5jbHVkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVibG9ja0luY2x1ZGVkID0gZmlyc3RUaW1lSW5jbHVzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2lvblRyZWUuaW5jcmVtZW50VmFsdWUobGF5ZXJOdW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvZGVibG9ja0luY2x1ZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdFRpbWVJbmNsdXNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHplcm9CaXRQbGFuZXNUcmVlID0gcHJlY2luY3QuemVyb0JpdFBsYW5lc1RyZWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvQml0UGxhbmVzVHJlZS5yZXNldChjb2RlYmxvY2tDb2x1bW4sIGNvZGVibG9ja1Jvdyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRCaXRzKDEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVhZHkgPSAhemVyb0JpdFBsYW5lc1RyZWUubmV4dExldmVsKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlUmVhZHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemVyb0JpdFBsYW5lc1RyZWUuaW5jcmVtZW50VmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVibG9jay56ZXJvQml0UGxhbmVzID0gemVyb0JpdFBsYW5lc1RyZWUudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kaW5ncGFzc2VzID0gcmVhZENvZGluZ3Bhc3NlcygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkQml0cygxKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWJsb2NrLkxibG9jaysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGluZ3Bhc3Nlc0xvZzIgPSAoMCwgX3V0aWwubG9nMikoY29kaW5ncGFzc2VzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdHMgPSAoY29kaW5ncGFzc2VzIDwgMSA8PCBjb2RpbmdwYXNzZXNMb2cyID8gY29kaW5ncGFzc2VzTG9nMiAtIDEgOiBjb2RpbmdwYXNzZXNMb2cyKSArIGNvZGVibG9jay5MYmxvY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlZERhdGFMZW5ndGggPSByZWFkQml0cyhiaXRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlYmxvY2s6IGNvZGVibG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGluZ3Bhc3NlczogY29kaW5ncGFzc2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxlbmd0aDogY29kZWREYXRhTGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduVG9CeXRlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXBoTWFya2VyVXNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwTWFya2VySWZFcXVhbCgweDkyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFja2V0SXRlbSA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVibG9jayA9IHBhY2tldEl0ZW0uY29kZWJsb2NrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlYmxvY2tbJ2RhdGEnXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlYmxvY2suZGF0YSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWJsb2NrLmRhdGEucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG9mZnNldCArIHBvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBvZmZzZXQgKyBwb3NpdGlvbiArIHBhY2tldEl0ZW0uZGF0YUxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGluZ3Bhc3NlczogcGFja2V0SXRlbS5jb2RpbmdwYXNzZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IHBhY2tldEl0ZW0uZGF0YUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvcHlDb2VmZmljaWVudHMoY29lZmZpY2llbnRzLCBsZXZlbFdpZHRoLCBsZXZlbEhlaWdodCwgc3ViYmFuZCwgZGVsdGEsIG1iLCByZXZlcnNpYmxlLCBzZWdtZW50YXRpb25TeW1ib2xVc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeDAgPSBzdWJiYW5kLnRieDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeTAgPSBzdWJiYW5kLnRieTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBzdWJiYW5kLnRieDEgLSBzdWJiYW5kLnRieDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZWJsb2NrcyA9IHN1YmJhbmQuY29kZWJsb2NrcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByaWdodCA9IHN1YmJhbmQudHlwZS5jaGFyQXQoMCkgPT09ICdIJyA/IDEgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJvdHRvbSA9IHN1YmJhbmQudHlwZS5jaGFyQXQoMSkgPT09ICdIJyA/IGxldmVsV2lkdGggOiAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBjb2RlYmxvY2tzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZWJsb2NrID0gY29kZWJsb2Nrc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmxvY2tXaWR0aCA9IGNvZGVibG9jay50YngxXyAtIGNvZGVibG9jay50YngwXztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmxvY2tIZWlnaHQgPSBjb2RlYmxvY2sudGJ5MV8gLSBjb2RlYmxvY2sudGJ5MF87XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2tXaWR0aCA9PT0gMCB8fCBibG9ja0hlaWdodCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZWJsb2NrWydkYXRhJ10gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYml0TW9kZWwsIGN1cnJlbnRDb2RpbmdwYXNzVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRNb2RlbCA9IG5ldyBCaXRNb2RlbChibG9ja1dpZHRoLCBibG9ja0hlaWdodCwgY29kZWJsb2NrLnN1YmJhbmRUeXBlLCBjb2RlYmxvY2suemVyb0JpdFBsYW5lcywgbWIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb2RpbmdwYXNzVHlwZSA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBjb2RlYmxvY2suZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxMZW5ndGggPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RpbmdwYXNzZXMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqLCBqaiwgZGF0YUl0ZW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwLCBqaiA9IGRhdGEubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhSXRlbSA9IGRhdGFbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsTGVuZ3RoICs9IGRhdGFJdGVtLmVuZCAtIGRhdGFJdGVtLnN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RpbmdwYXNzZXMgKz0gZGF0YUl0ZW0uY29kaW5ncGFzc2VzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNvZGVkRGF0YSA9IG5ldyBVaW50OEFycmF5KHRvdGFsTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMCwgamogPSBkYXRhLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUl0ZW0gPSBkYXRhW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSBkYXRhSXRlbS5kYXRhLnN1YmFycmF5KGRhdGFJdGVtLnN0YXJ0LCBkYXRhSXRlbS5lbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVkRGF0YS5zZXQoY2h1bmssIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvZGVyID0gbmV3IF9hcml0aG1ldGljX2RlY29kZXIuQXJpdGhtZXRpY0RlY29kZXIoZW5jb2RlZERhdGEsIDAsIHRvdGFsTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRNb2RlbC5zZXREZWNvZGVyKGRlY29kZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvZGluZ3Bhc3NlczsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY3VycmVudENvZGluZ3Bhc3NUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0TW9kZWwucnVuU2lnbmlmaWNhbmNlUHJvcGFnYXRpb25QYXNzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRNb2RlbC5ydW5NYWduaXR1ZGVSZWZpbmVtZW50UGFzcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0TW9kZWwucnVuQ2xlYW51cFBhc3MoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWdtZW50YXRpb25TeW1ib2xVc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdE1vZGVsLmNoZWNrU2VnbWVudGF0aW9uU3ltYm9sKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29kaW5ncGFzc1R5cGUgPSAoY3VycmVudENvZGluZ3Bhc3NUeXBlICsgMSkgJSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBjb2RlYmxvY2sudGJ4MF8gLSB4MCArIChjb2RlYmxvY2sudGJ5MF8gLSB5MCkgKiB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2lnbiA9IGJpdE1vZGVsLmNvZWZmaWNlbnRzU2lnbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFnbml0dWRlID0gYml0TW9kZWwuY29lZmZpY2VudHNNYWduaXR1ZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdHNEZWNvZGVkID0gYml0TW9kZWwuYml0c0RlY29kZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hZ25pdHVkZUNvcnJlY3Rpb24gPSByZXZlcnNpYmxlID8gMCA6IDAuNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaywgbiwgbmI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnRlcmxlYXZlID0gc3ViYmFuZC50eXBlICE9PSAnTEwnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGJsb2NrSGVpZ2h0OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvdyA9IG9mZnNldCAvIHdpZHRoIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxldmVsT2Zmc2V0ID0gMiAqIHJvdyAqIChsZXZlbFdpZHRoIC0gd2lkdGgpICsgcmlnaHQgKyBib3R0b207XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IGJsb2NrV2lkdGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG1hZ25pdHVkZVtwb3NpdGlvbl07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IChuICsgbWFnbml0dWRlQ29ycmVjdGlvbikgKiBkZWx0YTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaWduW3Bvc2l0aW9uXSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gLW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmIgPSBiaXRzRGVjb2RlZFtwb3NpdGlvbl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IGludGVybGVhdmUgPyBsZXZlbE9mZnNldCArIChvZmZzZXQgPDwgMSkgOiBvZmZzZXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV2ZXJzaWJsZSAmJiBuYiA+PSBtYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2VmZmljaWVudHNbcG9zXSA9IG47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lZmZpY2llbnRzW3Bvc10gPSBuICogKDEgPDwgbWIgLSBuYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gd2lkdGggLSBibG9ja1dpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRyYW5zZm9ybVRpbGUoY29udGV4dCwgdGlsZSwgYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudCA9IHRpbGUuY29tcG9uZW50c1tjXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RpbmdTdHlsZVBhcmFtZXRlcnMgPSBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1YW50aXphdGlvblBhcmFtZXRlcnMgPSBjb21wb25lbnQucXVhbnRpemF0aW9uUGFyYW1ldGVycztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgPSBjb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwcWNkcyA9IHF1YW50aXphdGlvblBhcmFtZXRlcnMuU1BxY2RzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxhckV4cG91bmRlZCA9IHF1YW50aXphdGlvblBhcmFtZXRlcnMuc2NhbGFyRXhwb3VuZGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGd1YXJkQml0cyA9IHF1YW50aXphdGlvblBhcmFtZXRlcnMuZ3VhcmRCaXRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlZ21lbnRhdGlvblN5bWJvbFVzZWQgPSBjb2RpbmdTdHlsZVBhcmFtZXRlcnMuc2VnbWVudGF0aW9uU3ltYm9sVXNlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVjaXNpb24gPSBjb250ZXh0LmNvbXBvbmVudHNbY10ucHJlY2lzaW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldmVyc2libGUgPSBjb2RpbmdTdHlsZVBhcmFtZXRlcnMucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHJldmVyc2libGUgPyBuZXcgUmV2ZXJzaWJsZVRyYW5zZm9ybSgpIDogbmV3IElycmV2ZXJzaWJsZVRyYW5zZm9ybSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1YmJhbmRDb2VmZmljaWVudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gZGVjb21wb3NpdGlvbkxldmVsc0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IGNvbXBvbmVudC5yZXNvbHV0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSByZXNvbHV0aW9uLnRyeDEgLSByZXNvbHV0aW9uLnRyeDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IHJlc29sdXRpb24udHJ5MSAtIHJlc29sdXRpb24udHJ5MDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29lZmZpY2llbnRzID0gbmV3IEZsb2F0MzJBcnJheSh3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgamogPSByZXNvbHV0aW9uLnN1YmJhbmRzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG11LCBlcHNpbG9uO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2NhbGFyRXhwb3VuZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdSA9IHNwcWNkc1swXS5tdTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwc2lsb24gPSBzcHFjZHNbMF0uZXBzaWxvbiArIChpID4gMCA/IDEgLSBpIDogMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdSA9IHNwcWNkc1tiXS5tdTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwc2lsb24gPSBzcHFjZHNbYl0uZXBzaWxvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJiYW5kID0gcmVzb2x1dGlvbi5zdWJiYW5kc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdhaW5Mb2cyID0gU3ViYmFuZHNHYWluTG9nMltzdWJiYW5kLnR5cGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsdGEgPSByZXZlcnNpYmxlID8gMSA6IE1hdGgucG93KDIsIHByZWNpc2lvbiArIGdhaW5Mb2cyIC0gZXBzaWxvbikgKiAoMSArIG11IC8gMjA0OCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYiA9IGd1YXJkQml0cyArIGVwc2lsb24gLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5Q29lZmZpY2llbnRzKGNvZWZmaWNpZW50cywgd2lkdGgsIGhlaWdodCwgc3ViYmFuZCwgZGVsdGEsIG1iLCByZXZlcnNpYmxlLCBzZWdtZW50YXRpb25TeW1ib2xVc2VkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJiYW5kQ29lZmZpY2llbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogY29lZmZpY2llbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0cmFuc2Zvcm0uY2FsY3VsYXRlKHN1YmJhbmRDb2VmZmljaWVudHMsIGNvbXBvbmVudC50Y3gwLCBjb21wb25lbnQudGN5MCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGNvbXBvbmVudC50Y3gwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogY29tcG9uZW50LnRjeTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHJlc3VsdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHJlc3VsdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHJlc3VsdC5pdGVtc1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRyYW5zZm9ybUNvbXBvbmVudHMoY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpeiA9IGNvbnRleHQuU0laO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudHMgPSBjb250ZXh0LmNvbXBvbmVudHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50c0NvdW50ID0gc2l6LkNzaXo7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0SW1hZ2VzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGNvbnRleHQudGlsZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aWxlID0gY29udGV4dC50aWxlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtZWRUaWxlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjID0gMDsgYyA8IGNvbXBvbmVudHNDb3VudDsgYysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkVGlsZXNbY10gPSB0cmFuc2Zvcm1UaWxlKGNvbnRleHQsIHRpbGUsIGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aWxlMCA9IHRyYW5zZm9ybWVkVGlsZXNbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG91dCA9IG5ldyBVaW50OENsYW1wZWRBcnJheSh0aWxlMC5pdGVtcy5sZW5ndGggKiBjb21wb25lbnRzQ291bnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IHRpbGUwLmxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogdGlsZTAudG9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogdGlsZTAud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogdGlsZTAuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogb3V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hpZnQsIG9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamosXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGlsZS5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLm11bHRpcGxlQ29tcG9uZW50VHJhbnNmb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VyQ29tcG9uZW50cyA9IGNvbXBvbmVudHNDb3VudCA9PT0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHkwaXRlbXMgPSB0cmFuc2Zvcm1lZFRpbGVzWzBdLml0ZW1zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeTFpdGVtcyA9IHRyYW5zZm9ybWVkVGlsZXNbMV0uaXRlbXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5Mml0ZW1zID0gdHJhbnNmb3JtZWRUaWxlc1syXS5pdGVtcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHkzaXRlbXMgPSBmb3VyQ29tcG9uZW50cyA/IHRyYW5zZm9ybWVkVGlsZXNbM10uaXRlbXMgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdCA9IGNvbXBvbmVudHNbMF0ucHJlY2lzaW9uIC0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gKDEyOCA8PCBzaGlmdCkgKyAwLjU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnQwID0gdGlsZS5jb21wb25lbnRzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWxwaGEwMSA9IGNvbXBvbmVudHNDb3VudCAtIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpqID0geTBpdGVtcy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21wb25lbnQwLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5yZXZlcnNpYmxlVHJhbnNmb3JtYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBqajsgaisrLCBwb3MgKz0gYWxwaGEwMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkwID0geTBpdGVtc1tqXSArIG9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MSA9IHkxaXRlbXNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTIgPSB5Mml0ZW1zW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dFtwb3MrK10gPSB5MCArIDEuNDAyICogeTIgPj4gc2hpZnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0W3BvcysrXSA9IHkwIC0gMC4zNDQxMyAqIHkxIC0gMC43MTQxNCAqIHkyID4+IHNoaWZ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dFtwb3MrK10gPSB5MCArIDEuNzcyICogeTEgPj4gc2hpZnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgamo7IGorKywgcG9zICs9IGFscGhhMDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MCA9IHkwaXRlbXNbal0gKyBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTEgPSB5MWl0ZW1zW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyID0geTJpdGVtc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZyA9IHkwIC0gKHkyICsgeTEgPj4gMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0W3BvcysrXSA9IGcgKyB5MiA+PiBzaGlmdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRbcG9zKytdID0gZyA+PiBzaGlmdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRbcG9zKytdID0gZyArIHkxID4+IHNoaWZ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdXJDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwLCBwb3MgPSAzOyBqIDwgamo7IGorKywgcG9zICs9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRbcG9zXSA9IHkzaXRlbXNbal0gKyBvZmZzZXQgPj4gc2hpZnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgY29tcG9uZW50c0NvdW50OyBjKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtcyA9IHRyYW5zZm9ybWVkVGlsZXNbY10uaXRlbXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdCA9IGNvbXBvbmVudHNbY10ucHJlY2lzaW9uIC0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9ICgxMjggPDwgc2hpZnQpICsgMC41O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHBvcyA9IGMsIGogPSAwLCBqaiA9IGl0ZW1zLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRbcG9zXSA9IGl0ZW1zW2pdICsgb2Zmc2V0ID4+IHNoaWZ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyArPSBjb21wb25lbnRzQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRJbWFnZXMucHVzaChyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0SW1hZ2VzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaW5pdGlhbGl6ZVRpbGUoY29udGV4dCwgdGlsZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ID0gY29udGV4dC5TSVo7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50c0NvdW50ID0gc2l6LkNzaXo7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGlsZSA9IGNvbnRleHQudGlsZXNbdGlsZUluZGV4XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBjb21wb25lbnRzQ291bnQ7IGMrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnQgPSB0aWxlLmNvbXBvbmVudHNbY107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHFjZE9yUWNjID0gY29udGV4dC5jdXJyZW50VGlsZS5RQ0NbY10gIT09IHVuZGVmaW5lZCA/IGNvbnRleHQuY3VycmVudFRpbGUuUUNDW2NdIDogY29udGV4dC5jdXJyZW50VGlsZS5RQ0Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnF1YW50aXphdGlvblBhcmFtZXRlcnMgPSBxY2RPclFjYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kT3JDb2MgPSBjb250ZXh0LmN1cnJlbnRUaWxlLkNPQ1tjXSAhPT0gdW5kZWZpbmVkID8gY29udGV4dC5jdXJyZW50VGlsZS5DT0NbY10gOiBjb250ZXh0LmN1cnJlbnRUaWxlLkNPRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzID0gY29kT3JDb2M7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycyA9IGNvbnRleHQuY3VycmVudFRpbGUuQ09EO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFRhZ1RyZWUgPSBmdW5jdGlvbiBUYWdUcmVlQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRhZ1RyZWUod2lkdGgsIGhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXZlbHNMZW5ndGggPSAoMCwgX3V0aWwubG9nMikoTWF0aC5tYXgod2lkdGgsIGhlaWdodCkpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxldmVscyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZXZlbHNMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGV2ZWwgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxldmVscy5wdXNoKGxldmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBNYXRoLmNlaWwod2lkdGggLyAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5jZWlsKGhlaWdodCAvIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgVGFnVHJlZS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uIFRhZ1RyZWVfcmVzZXQoaSwgaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudExldmVsID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50TGV2ZWwgPCB0aGlzLmxldmVscy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsID0gdGhpcy5sZXZlbHNbY3VycmVudExldmVsXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGkgKyBqICogbGV2ZWwud2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZXZlbC5pdGVtc1tpbmRleF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbGV2ZWwuaXRlbXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbC5pbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA+Pj0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPj49IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGV2ZWwrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMZXZlbC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IHRoaXMubGV2ZWxzW2N1cnJlbnRMZXZlbF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsLml0ZW1zW2xldmVsLmluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRMZXZlbCA9IGN1cnJlbnRMZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRWYWx1ZTogZnVuY3Rpb24gVGFnVHJlZV9pbmNyZW1lbnRWYWx1ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxldmVsID0gdGhpcy5sZXZlbHNbdGhpcy5jdXJyZW50TGV2ZWxdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbC5pdGVtc1tsZXZlbC5pbmRleF0rKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRMZXZlbDogZnVuY3Rpb24gVGFnVHJlZV9uZXh0TGV2ZWwoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50TGV2ZWwgPSB0aGlzLmN1cnJlbnRMZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxldmVsID0gdGhpcy5sZXZlbHNbY3VycmVudExldmVsXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGV2ZWwtLTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudExldmVsIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TGV2ZWwgPSBjdXJyZW50TGV2ZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsID0gdGhpcy5sZXZlbHNbY3VycmVudExldmVsXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVGFnVHJlZTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBJbmNsdXNpb25UcmVlID0gZnVuY3Rpb24gSW5jbHVzaW9uVHJlZUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJbmNsdXNpb25UcmVlKHdpZHRoLCBoZWlnaHQsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXZlbHNMZW5ndGggPSAoMCwgX3V0aWwubG9nMikoTWF0aC5tYXgod2lkdGgsIGhlaWdodCkpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxldmVscyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZXZlbHNMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbXMgPSBuZXcgVWludDhBcnJheSh3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gaXRlbXMubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNbal0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGV2ZWwgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBpdGVtc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxldmVscy5wdXNoKGxldmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBNYXRoLmNlaWwod2lkdGggLyAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5jZWlsKGhlaWdodCAvIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVzaW9uVHJlZS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uIEluY2x1c2lvblRyZWVfcmVzZXQoaSwgaiwgc3RvcFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50TGV2ZWwgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50TGV2ZWwgPCB0aGlzLmxldmVscy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXZlbCA9IHRoaXMubGV2ZWxzW2N1cnJlbnRMZXZlbF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBpICsgaiAqIGxldmVsLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwuaW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGxldmVsLml0ZW1zW2luZGV4XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAweEZGKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+IHN0b3BWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudExldmVsID0gY3VycmVudExldmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlVmFsdWVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID4+PSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA+Pj0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMZXZlbCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TGV2ZWwgPSBjdXJyZW50TGV2ZWwgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudFZhbHVlOiBmdW5jdGlvbiBJbmNsdXNpb25UcmVlX2luY3JlbWVudFZhbHVlKHN0b3BWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGV2ZWwgPSB0aGlzLmxldmVsc1t0aGlzLmN1cnJlbnRMZXZlbF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsLml0ZW1zW2xldmVsLmluZGV4XSA9IHN0b3BWYWx1ZSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlVmFsdWVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGVWYWx1ZXM6IGZ1bmN0aW9uIEluY2x1c2lvblRyZWVfcHJvcGFnYXRlVmFsdWVzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGV2ZWxJbmRleCA9IHRoaXMuY3VycmVudExldmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGV2ZWwgPSB0aGlzLmxldmVsc1tsZXZlbEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IGxldmVsLml0ZW1zW2xldmVsLmluZGV4XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoLS1sZXZlbEluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsID0gdGhpcy5sZXZlbHNbbGV2ZWxJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbC5pdGVtc1tsZXZlbC5pbmRleF0gPSBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRMZXZlbDogZnVuY3Rpb24gSW5jbHVzaW9uVHJlZV9uZXh0TGV2ZWwoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50TGV2ZWwgPSB0aGlzLmN1cnJlbnRMZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxldmVsID0gdGhpcy5sZXZlbHNbY3VycmVudExldmVsXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbC5pdGVtc1tsZXZlbC5pbmRleF0gPSAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGV2ZWwtLTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudExldmVsIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TGV2ZWwgPSBjdXJyZW50TGV2ZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsID0gdGhpcy5sZXZlbHNbY3VycmVudExldmVsXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5jbHVzaW9uVHJlZTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBCaXRNb2RlbCA9IGZ1bmN0aW9uIEJpdE1vZGVsQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBVTklGT1JNX0NPTlRFWFQgPSAxNztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBSVU5MRU5HVEhfQ09OVEVYVCA9IDE4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIExMQW5kTEhDb250ZXh0c0xhYmVsID0gbmV3IFVpbnQ4QXJyYXkoWzAsIDUsIDgsIDAsIDMsIDcsIDgsIDAsIDQsIDcsIDgsIDAsIDAsIDAsIDAsIDAsIDEsIDYsIDgsIDAsIDMsIDcsIDgsIDAsIDQsIDcsIDgsIDAsIDAsIDAsIDAsIDAsIDIsIDYsIDgsIDAsIDMsIDcsIDgsIDAsIDQsIDcsIDgsIDAsIDAsIDAsIDAsIDAsIDIsIDYsIDgsIDAsIDMsIDcsIDgsIDAsIDQsIDcsIDgsIDAsIDAsIDAsIDAsIDAsIDIsIDYsIDgsIDAsIDMsIDcsIDgsIDAsIDQsIDcsIDhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBITENvbnRleHRMYWJlbCA9IG5ldyBVaW50OEFycmF5KFswLCAzLCA0LCAwLCA1LCA3LCA3LCAwLCA4LCA4LCA4LCAwLCAwLCAwLCAwLCAwLCAxLCAzLCA0LCAwLCA2LCA3LCA3LCAwLCA4LCA4LCA4LCAwLCAwLCAwLCAwLCAwLCAyLCAzLCA0LCAwLCA2LCA3LCA3LCAwLCA4LCA4LCA4LCAwLCAwLCAwLCAwLCAwLCAyLCAzLCA0LCAwLCA2LCA3LCA3LCAwLCA4LCA4LCA4LCAwLCAwLCAwLCAwLCAwLCAyLCAzLCA0LCAwLCA2LCA3LCA3LCAwLCA4LCA4LCA4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgSEhDb250ZXh0TGFiZWwgPSBuZXcgVWludDhBcnJheShbMCwgMSwgMiwgMCwgMSwgMiwgMiwgMCwgMiwgMiwgMiwgMCwgMCwgMCwgMCwgMCwgMywgNCwgNSwgMCwgNCwgNSwgNSwgMCwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgNiwgNywgNywgMCwgNywgNywgNywgMCwgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgOCwgOCwgOCwgMCwgOCwgOCwgOCwgMCwgOCwgOCwgOCwgMCwgMCwgMCwgMCwgMCwgOCwgOCwgOCwgMCwgOCwgOCwgOCwgMCwgOCwgOCwgOF0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBCaXRNb2RlbCh3aWR0aCwgaGVpZ2h0LCBzdWJiYW5kLCB6ZXJvQml0UGxhbmVzLCBtYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRMYWJlbFRhYmxlID0gc3ViYmFuZCA9PT0gJ0hIJyA/IEhIQ29udGV4dExhYmVsIDogc3ViYmFuZCA9PT0gJ0hMJyA/IEhMQ29udGV4dExhYmVsIDogTExBbmRMSENvbnRleHRzTGFiZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZWZmaWNpZW50Q291bnQgPSB3aWR0aCAqIGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZSA9IG5ldyBVaW50OEFycmF5KGNvZWZmaWNpZW50Q291bnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29lZmZpY2VudHNTaWduID0gbmV3IFVpbnQ4QXJyYXkoY29lZmZpY2llbnRDb3VudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2VmZmljZW50c01hZ25pdHVkZSA9IG1iID4gMTQgPyBuZXcgVWludDMyQXJyYXkoY29lZmZpY2llbnRDb3VudCkgOiBtYiA+IDYgPyBuZXcgVWludDE2QXJyYXkoY29lZmZpY2llbnRDb3VudCkgOiBuZXcgVWludDhBcnJheShjb2VmZmljaWVudENvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NpbmdGbGFncyA9IG5ldyBVaW50OEFycmF5KGNvZWZmaWNpZW50Q291bnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRzRGVjb2RlZCA9IG5ldyBVaW50OEFycmF5KGNvZWZmaWNpZW50Q291bnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHplcm9CaXRQbGFuZXMgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2VmZmljaWVudENvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNEZWNvZGVkW2ldID0gemVyb0JpdFBsYW5lcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYml0c0RlY29kZWQgPSBiaXRzRGVjb2RlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEJpdE1vZGVsLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXREZWNvZGVyOiBmdW5jdGlvbiBCaXRNb2RlbF9zZXREZWNvZGVyKGRlY29kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNvZGVyID0gZGVjb2RlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0OiBmdW5jdGlvbiBCaXRNb2RlbF9yZXNldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0cyA9IG5ldyBJbnQ4QXJyYXkoMTkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRzWzBdID0gNCA8PCAxIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0c1tVTklGT1JNX0NPTlRFWFRdID0gNDYgPDwgMSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dHNbUlVOTEVOR1RIX0NPTlRFWFRdID0gMyA8PCAxIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE5laWdoYm9yc1NpZ25pZmljYW5jZTogZnVuY3Rpb24gQml0TW9kZWxfc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKHJvdywgY29sdW1uLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmVpZ2hib3JzU2lnbmlmaWNhbmNlID0gdGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlZnQgPSBjb2x1bW4gPiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmlnaHQgPSBjb2x1bW4gKyAxIDwgd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3cgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaW5kZXggLSB3aWR0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaSAtIDFdICs9IDB4MTA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5laWdoYm9yc1NpZ25pZmljYW5jZVtpICsgMV0gKz0gMHgxMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2ldICs9IDB4MDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocm93ICsgMSA8IGhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGluZGV4ICsgd2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2kgLSAxXSArPSAweDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaSArIDFdICs9IDB4MTA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5laWdoYm9yc1NpZ25pZmljYW5jZVtpXSArPSAweDA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5laWdoYm9yc1NpZ25pZmljYW5jZVtpbmRleCAtIDFdICs9IDB4MDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5laWdoYm9yc1NpZ25pZmljYW5jZVtpbmRleCArIDFdICs9IDB4MDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaW5kZXhdIHw9IDB4ODA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5TaWduaWZpY2FuY2VQcm9wYWdhdGlvblBhc3M6IGZ1bmN0aW9uIEJpdE1vZGVsX3J1blNpZ25pZmljYW5jZVByb3BhZ2F0aW9uUGFzcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kZXIgPSB0aGlzLmRlY29kZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZWZmaWNlbnRzTWFnbml0dWRlID0gdGhpcy5jb2VmZmljZW50c01hZ25pdHVkZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZWZmaWNlbnRzU2lnbiA9IHRoaXMuY29lZmZpY2VudHNTaWduO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmVpZ2hib3JzU2lnbmlmaWNhbmNlID0gdGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9jZXNzaW5nRmxhZ3MgPSB0aGlzLnByb2Nlc3NpbmdGbGFncztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRleHRzID0gdGhpcy5jb250ZXh0cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhYmVscyA9IHRoaXMuY29udGV4dExhYmVsVGFibGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRzRGVjb2RlZCA9IHRoaXMuYml0c0RlY29kZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9jZXNzZWRJbnZlcnNlTWFzayA9IH4xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvY2Vzc2VkTWFzayA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdE1hZ25pdHVkZUJpdE1hc2sgPSAyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkwID0gMDsgaTAgPCBoZWlnaHQ7IGkwICs9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGkwICogd2lkdGggKyBqO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaTEgPSAwOyBpMSA8IDQ7IGkxKyssIGluZGV4ICs9IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gaTAgKyBpMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBoZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZ0ZsYWdzW2luZGV4XSAmPSBwcm9jZXNzZWRJbnZlcnNlTWFzaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXhdIHx8ICFuZWlnaGJvcnNTaWduaWZpY2FuY2VbaW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZXh0TGFiZWwgPSBsYWJlbHNbbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2luZGV4XV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNpc2lvbiA9IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgY29udGV4dExhYmVsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVjaXNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaWduID0gdGhpcy5kZWNvZGVTaWduQml0KGksIGosIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZWZmaWNlbnRzU2lnbltpbmRleF0gPSBzaWduO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXhdID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKGksIGosIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gfD0gZmlyc3RNYWduaXR1ZGVCaXRNYXNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c0RlY29kZWRbaW5kZXhdKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gfD0gcHJvY2Vzc2VkTWFzaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZVNpZ25CaXQ6IGZ1bmN0aW9uIEJpdE1vZGVsX2RlY29kZVNpZ25CaXQocm93LCBjb2x1bW4sIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZWZmaWNlbnRzTWFnbml0dWRlID0gdGhpcy5jb2VmZmljZW50c01hZ25pdHVkZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZWZmaWNlbnRzU2lnbiA9IHRoaXMuY29lZmZpY2VudHNTaWduO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udHJpYnV0aW9uLCBzaWduMCwgc2lnbjEsIHNpZ25pZmljYW5jZTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZXh0TGFiZWwsIGRlY29kZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW5jZTEgPSBjb2x1bW4gPiAwICYmIGNvZWZmaWNlbnRzTWFnbml0dWRlW2luZGV4IC0gMV0gIT09IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbiArIDEgPCB3aWR0aCAmJiBjb2VmZmljZW50c01hZ25pdHVkZVtpbmRleCArIDFdICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduMSA9IGNvZWZmaWNlbnRzU2lnbltpbmRleCArIDFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmlmaWNhbmNlMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24wID0gY29lZmZpY2VudHNTaWduW2luZGV4IC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJpYnV0aW9uID0gMSAtIHNpZ24xIC0gc2lnbjA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyaWJ1dGlvbiA9IDEgLSBzaWduMSAtIHNpZ24xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNpZ25pZmljYW5jZTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24wID0gY29lZmZpY2VudHNTaWduW2luZGV4IC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cmlidXRpb24gPSAxIC0gc2lnbjAgLSBzaWduMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyaWJ1dGlvbiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaG9yaXpvbnRhbENvbnRyaWJ1dGlvbiA9IDMgKiBjb250cmlidXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW5jZTEgPSByb3cgPiAwICYmIGNvZWZmaWNlbnRzTWFnbml0dWRlW2luZGV4IC0gd2lkdGhdICE9PSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3cgKyAxIDwgaGVpZ2h0ICYmIGNvZWZmaWNlbnRzTWFnbml0dWRlW2luZGV4ICsgd2lkdGhdICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduMSA9IGNvZWZmaWNlbnRzU2lnbltpbmRleCArIHdpZHRoXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25pZmljYW5jZTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduMCA9IGNvZWZmaWNlbnRzU2lnbltpbmRleCAtIHdpZHRoXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cmlidXRpb24gPSAxIC0gc2lnbjEgLSBzaWduMCArIGhvcml6b250YWxDb250cmlidXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyaWJ1dGlvbiA9IDEgLSBzaWduMSAtIHNpZ24xICsgaG9yaXpvbnRhbENvbnRyaWJ1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzaWduaWZpY2FuY2UxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduMCA9IGNvZWZmaWNlbnRzU2lnbltpbmRleCAtIHdpZHRoXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyaWJ1dGlvbiA9IDEgLSBzaWduMCAtIHNpZ24wICsgaG9yaXpvbnRhbENvbnRyaWJ1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyaWJ1dGlvbiA9IGhvcml6b250YWxDb250cmlidXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJpYnV0aW9uID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRMYWJlbCA9IDkgKyBjb250cmlidXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkID0gdGhpcy5kZWNvZGVyLnJlYWRCaXQodGhpcy5jb250ZXh0cywgY29udGV4dExhYmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRMYWJlbCA9IDkgLSBjb250cmlidXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkID0gdGhpcy5kZWNvZGVyLnJlYWRCaXQodGhpcy5jb250ZXh0cywgY29udGV4dExhYmVsKSBeIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVjb2RlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bk1hZ25pdHVkZVJlZmluZW1lbnRQYXNzOiBmdW5jdGlvbiBCaXRNb2RlbF9ydW5NYWduaXR1ZGVSZWZpbmVtZW50UGFzcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kZXIgPSB0aGlzLmRlY29kZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZWZmaWNlbnRzTWFnbml0dWRlID0gdGhpcy5jb2VmZmljZW50c01hZ25pdHVkZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5laWdoYm9yc1NpZ25pZmljYW5jZSA9IHRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYml0c0RlY29kZWQgPSB0aGlzLmJpdHNEZWNvZGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvY2Vzc2luZ0ZsYWdzID0gdGhpcy5wcm9jZXNzaW5nRmxhZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9jZXNzZWRNYXNrID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0TWFnbml0dWRlQml0TWFzayA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSB3aWR0aCAqIGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoNCA9IHdpZHRoICogNDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleDAgPSAwLCBpbmRleE5leHQ7IGluZGV4MCA8IGxlbmd0aDsgaW5kZXgwID0gaW5kZXhOZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleE5leHQgPSBNYXRoLm1pbihsZW5ndGgsIGluZGV4MCArIHdpZHRoNCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gaW5kZXgwICsgajsgaW5kZXggPCBpbmRleE5leHQ7IGluZGV4ICs9IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXhdIHx8IChwcm9jZXNzaW5nRmxhZ3NbaW5kZXhdICYgcHJvY2Vzc2VkTWFzaykgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRleHRMYWJlbCA9IDE2O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzc2luZ0ZsYWdzW2luZGV4XSAmIGZpcnN0TWFnbml0dWRlQml0TWFzaykgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gXj0gZmlyc3RNYWduaXR1ZGVCaXRNYXNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpZ25pZmljYW5jZSA9IG5laWdoYm9yc1NpZ25pZmljYW5jZVtpbmRleF0gJiAxMjc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TGFiZWwgPSBzaWduaWZpY2FuY2UgPT09IDAgPyAxNSA6IDE0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdCA9IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgY29udGV4dExhYmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXhdID0gY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXhdIDw8IDEgfCBiaXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNEZWNvZGVkW2luZGV4XSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nRmxhZ3NbaW5kZXhdIHw9IHByb2Nlc3NlZE1hc2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5DbGVhbnVwUGFzczogZnVuY3Rpb24gQml0TW9kZWxfcnVuQ2xlYW51cFBhc3MoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvZGVyID0gdGhpcy5kZWNvZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZWlnaGJvcnNTaWduaWZpY2FuY2UgPSB0aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZWZmaWNlbnRzTWFnbml0dWRlID0gdGhpcy5jb2VmZmljZW50c01hZ25pdHVkZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZWZmaWNlbnRzU2lnbiA9IHRoaXMuY29lZmZpY2VudHNTaWduO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFiZWxzID0gdGhpcy5jb250ZXh0TGFiZWxUYWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdHNEZWNvZGVkID0gdGhpcy5iaXRzRGVjb2RlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb2Nlc3NpbmdGbGFncyA9IHRoaXMucHJvY2Vzc2luZ0ZsYWdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvY2Vzc2VkTWFzayA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdE1hZ25pdHVkZUJpdE1hc2sgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb25lUm93RG93biA9IHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHdvUm93c0Rvd24gPSB3aWR0aCAqIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aHJlZVJvd3NEb3duID0gd2lkdGggKiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaU5leHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaTAgPSAwOyBpMCA8IGhlaWdodDsgaTAgPSBpTmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaU5leHQgPSBNYXRoLm1pbihpMCArIDQsIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXhCYXNlID0gaTAgKiB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGVja0FsbEVtcHR5ID0gaTAgKyAzIDwgaGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXgwID0gaW5kZXhCYXNlICsgajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWxsRW1wdHkgPSBjaGVja0FsbEVtcHR5ICYmIHByb2Nlc3NpbmdGbGFnc1tpbmRleDBdID09PSAwICYmIHByb2Nlc3NpbmdGbGFnc1tpbmRleDAgKyBvbmVSb3dEb3duXSA9PT0gMCAmJiBwcm9jZXNzaW5nRmxhZ3NbaW5kZXgwICsgdHdvUm93c0Rvd25dID09PSAwICYmIHByb2Nlc3NpbmdGbGFnc1tpbmRleDAgKyB0aHJlZVJvd3NEb3duXSA9PT0gMCAmJiBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaW5kZXgwXSA9PT0gMCAmJiBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaW5kZXgwICsgb25lUm93RG93bl0gPT09IDAgJiYgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2luZGV4MCArIHR3b1Jvd3NEb3duXSA9PT0gMCAmJiBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaW5kZXgwICsgdGhyZWVSb3dzRG93bl0gPT09IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkxID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpbmRleDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSBpMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxFbXB0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzU2lnbmlmaWNhbnRDb2VmZmljZW50ID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBSVU5MRU5HVEhfQ09OVEVYVCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNTaWduaWZpY2FudENvZWZmaWNlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNEZWNvZGVkW2luZGV4MF0rKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNEZWNvZGVkW2luZGV4MCArIG9uZVJvd0Rvd25dKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzRGVjb2RlZFtpbmRleDAgKyB0d29Sb3dzRG93bl0rKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNEZWNvZGVkW2luZGV4MCArIHRocmVlUm93c0Rvd25dKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkxID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBVTklGT1JNX0NPTlRFWFQpIDw8IDEgfCBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIFVOSUZPUk1fQ09OVEVYVCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkxICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaTAgKyBpMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IGkxICogd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduID0gdGhpcy5kZWNvZGVTaWduQml0KGksIGosIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lZmZpY2VudHNTaWduW2luZGV4XSA9IHNpZ247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZWZmaWNlbnRzTWFnbml0dWRlW2luZGV4XSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKGksIGosIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZ0ZsYWdzW2luZGV4XSB8PSBmaXJzdE1hZ25pdHVkZUJpdE1hc2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kZXgwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkyID0gaTA7IGkyIDw9IGk7IGkyKyssIGluZGV4ICs9IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzRGVjb2RlZFtpbmRleF0rKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkxKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gaTAgKyBpMTsgaSA8IGlOZXh0OyBpKyssIGluZGV4ICs9IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2VmZmljZW50c01hZ25pdHVkZVtpbmRleF0gfHwgKHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gJiBwcm9jZXNzZWRNYXNrKSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dExhYmVsID0gbGFiZWxzW25laWdoYm9yc1NpZ25pZmljYW5jZVtpbmRleF1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVjaXNpb24gPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIGNvbnRleHRMYWJlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2lzaW9uID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduID0gdGhpcy5kZWNvZGVTaWduQml0KGksIGosIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZWZmaWNlbnRzU2lnbltpbmRleF0gPSBzaWduO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXhdID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKGksIGosIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gfD0gZmlyc3RNYWduaXR1ZGVCaXRNYXNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c0RlY29kZWRbaW5kZXhdKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1NlZ21lbnRhdGlvblN5bWJvbDogZnVuY3Rpb24gQml0TW9kZWxfY2hlY2tTZWdtZW50YXRpb25TeW1ib2woKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvZGVyID0gdGhpcy5kZWNvZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ltYm9sID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBVTklGT1JNX0NPTlRFWFQpIDw8IDMgfCBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIFVOSUZPUk1fQ09OVEVYVCkgPDwgMiB8IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgVU5JRk9STV9DT05URVhUKSA8PCAxIHwgZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBVTklGT1JNX0NPTlRFWFQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wgIT09IDB4QSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpweEVycm9yKCdJbnZhbGlkIHNlZ21lbnRhdGlvbiBzeW1ib2wnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQml0TW9kZWw7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgVHJhbnNmb3JtID0gZnVuY3Rpb24gVHJhbnNmb3JtQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybSgpIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybS5wcm90b3R5cGUuY2FsY3VsYXRlID0gZnVuY3Rpb24gdHJhbnNmb3JtQ2FsY3VsYXRlKHN1YmJhbmRzLCB1MCwgdjApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGwgPSBzdWJiYW5kc1swXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxLCBpaSA9IHN1YmJhbmRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGwgPSB0aGlzLml0ZXJhdGUobGwsIHN1YmJhbmRzW2ldLCB1MCwgdjApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybS5wcm90b3R5cGUuZXh0ZW5kID0gZnVuY3Rpb24gZXh0ZW5kKGJ1ZmZlciwgb2Zmc2V0LCBzaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkxID0gb2Zmc2V0IC0gMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgajEgPSBvZmZzZXQgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpMiA9IG9mZnNldCArIHNpemUgLSAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqMiA9IG9mZnNldCArIHNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2kxLS1dID0gYnVmZmVyW2oxKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltqMisrXSA9IGJ1ZmZlcltpMi0tXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaTEtLV0gPSBidWZmZXJbajErK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2oyKytdID0gYnVmZmVyW2kyLS1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpMS0tXSA9IGJ1ZmZlcltqMSsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbajIrK10gPSBidWZmZXJbaTItLV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2kxXSA9IGJ1ZmZlcltqMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2oyXSA9IGJ1ZmZlcltpMl07XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm0ucHJvdG90eXBlLml0ZXJhdGUgPSBmdW5jdGlvbiBUcmFuc2Zvcm1faXRlcmF0ZShsbCwgaGxfbGhfaGgsIHUwLCB2MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsbFdpZHRoID0gbGwud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxsSGVpZ2h0ID0gbGwuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsbEl0ZW1zID0gbGwuaXRlbXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gaGxfbGhfaGgud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IGhsX2xoX2hoLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbXMgPSBobF9saF9oaC5pdGVtcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaiwgaywgbCwgdSwgdjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDAsIGkgPSAwOyBpIDwgbGxIZWlnaHQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gaSAqIDIgKiB3aWR0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGxXaWR0aDsgaisrLCBrKyssIGwgKz0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNbbF0gPSBsbEl0ZW1zW2tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGxJdGVtcyA9IGxsLml0ZW1zID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyUGFkZGluZyA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvd0J1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkod2lkdGggKyAyICogYnVmZmVyUGFkZGluZyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh1MCAmIDEpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHYgPSAwLCBrID0gMDsgdiA8IGhlaWdodDsgdisrLCBrICs9IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNba10gKj0gMC41O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2ID0gMCwgayA9IDA7IHYgPCBoZWlnaHQ7IHYrKywgayArPSB3aWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93QnVmZmVyLnNldChpdGVtcy5zdWJhcnJheShrLCBrICsgd2lkdGgpLCBidWZmZXJQYWRkaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXh0ZW5kKHJvd0J1ZmZlciwgYnVmZmVyUGFkZGluZywgd2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXIocm93QnVmZmVyLCBidWZmZXJQYWRkaW5nLCB3aWR0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5zZXQocm93QnVmZmVyLnN1YmFycmF5KGJ1ZmZlclBhZGRpbmcsIGJ1ZmZlclBhZGRpbmcgKyB3aWR0aCksIGspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bUJ1ZmZlcnMgPSAxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sQnVmZmVycyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bUJ1ZmZlcnM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xCdWZmZXJzLnB1c2gobmV3IEZsb2F0MzJBcnJheShoZWlnaHQgKyAyICogYnVmZmVyUGFkZGluZykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50QnVmZmVyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsbCA9IGJ1ZmZlclBhZGRpbmcgKyBoZWlnaHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVpZ2h0ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodjAgJiAxKSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1ID0gMDsgdSA8IHdpZHRoOyB1KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc1t1XSAqPSAwLjU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHUgPSAwOyB1IDwgd2lkdGg7IHUrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRCdWZmZXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1CdWZmZXJzID0gTWF0aC5taW4od2lkdGggLSB1LCBudW1CdWZmZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IHUsIGwgPSBidWZmZXJQYWRkaW5nOyBsIDwgbGw7IGsgKz0gd2lkdGgsIGwrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGIgPSAwOyBiIDwgbnVtQnVmZmVyczsgYisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xCdWZmZXJzW2JdW2xdID0gaXRlbXNbayArIGJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEJ1ZmZlciA9IG51bUJ1ZmZlcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCdWZmZXItLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBjb2xCdWZmZXJzW2N1cnJlbnRCdWZmZXJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHRlbmQoYnVmZmVyLCBidWZmZXJQYWRkaW5nLCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXIoYnVmZmVyLCBidWZmZXJQYWRkaW5nLCBoZWlnaHQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEJ1ZmZlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSB1IC0gbnVtQnVmZmVycyArIDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGwgPSBidWZmZXJQYWRkaW5nOyBsIDwgbGw7IGsgKz0gd2lkdGgsIGwrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGIgPSAwOyBiIDwgbnVtQnVmZmVyczsgYisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc1trICsgYl0gPSBjb2xCdWZmZXJzW2JdW2xdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IGl0ZW1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgSXJyZXZlcnNpYmxlVHJhbnNmb3JtID0gZnVuY3Rpb24gSXJyZXZlcnNpYmxlVHJhbnNmb3JtQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElycmV2ZXJzaWJsZVRyYW5zZm9ybSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm0uY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgSXJyZXZlcnNpYmxlVHJhbnNmb3JtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNmb3JtLnByb3RvdHlwZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIElycmV2ZXJzaWJsZVRyYW5zZm9ybS5wcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24gaXJyZXZlcnNpYmxlVHJhbnNmb3JtRmlsdGVyKHgsIG9mZnNldCwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbiA9IGxlbmd0aCA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IG9mZnNldCB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGosIG4sIGN1cnJlbnQsIG5leHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFscGhhID0gLTEuNTg2MTM0MzQyMDU5OTI0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiZXRhID0gLTAuMDUyOTgwMTE4NTcyOTYxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYSA9IDAuODgyOTExMDc1NTMwOTM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWx0YSA9IDAuNDQzNTA2ODUyMDQzOTcxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBLID0gMS4yMzAxNzQxMDQ5MTQwMDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEtfID0gMSAvIEs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IG9mZnNldCAtIDM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG4gPSBsZW4gKyA0OyBuLS07IGogKz0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4W2pdICo9IEtfO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBvZmZzZXQgLSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBkZWx0YSAqIHhbaiAtIDFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gbGVuICsgMzsgbi0tOyBqICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGRlbHRhICogeFtqICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhbal0gPSBLICogeFtqXSAtIGN1cnJlbnQgLSBuZXh0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBkZWx0YSAqIHhbaiArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFtqXSA9IEsgKiB4W2pdIC0gY3VycmVudCAtIG5leHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBvZmZzZXQgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBnYW1tYSAqIHhbaiAtIDFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gbGVuICsgMjsgbi0tOyBqICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGdhbW1hICogeFtqICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhbal0gLT0gY3VycmVudCArIG5leHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4tLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGdhbW1hICogeFtqICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4W2pdIC09IGN1cnJlbnQgKyBuZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBiZXRhICogeFtqIC0gMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG4gPSBsZW4gKyAxOyBuLS07IGogKz0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gYmV0YSAqIHhbaiArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4W2pdIC09IGN1cnJlbnQgKyBuZXh0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBiZXRhICogeFtqICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4W2pdIC09IGN1cnJlbnQgKyBuZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBvZmZzZXQgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gYWxwaGEgKiB4W2ogLSAxXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG4gPSBsZW47IG4tLTsgaiArPSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gYWxwaGEgKiB4W2ogKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhbal0gLT0gY3VycmVudCArIG5leHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGFscGhhICogeFtqICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFtqXSAtPSBjdXJyZW50ICsgbmV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXJyZXZlcnNpYmxlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFJldmVyc2libGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiBSZXZlcnNpYmxlVHJhbnNmb3JtQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJldmVyc2libGVUcmFuc2Zvcm0oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJldmVyc2libGVUcmFuc2Zvcm0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUcmFuc2Zvcm0ucHJvdG90eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgUmV2ZXJzaWJsZVRyYW5zZm9ybS5wcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24gcmV2ZXJzaWJsZVRyYW5zZm9ybUZpbHRlcih4LCBvZmZzZXQsIGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW4gPSBsZW5ndGggPj4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBvZmZzZXQgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqLCBuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gb2Zmc2V0LCBuID0gbGVuICsgMTsgbi0tOyBqICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFtqXSAtPSB4W2ogLSAxXSArIHhbaiArIDFdICsgMiA+PiAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IG9mZnNldCArIDEsIG4gPSBsZW47IG4tLTsgaiArPSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhbal0gKz0geFtqIC0gMV0gKyB4W2ogKyAxXSA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXZlcnNpYmxlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpweEltYWdlO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuSnB4SW1hZ2UgPSBKcHhJbWFnZTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTY3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5jYWxjdWxhdGVTSEE1MTIgPSBleHBvcnRzLmNhbGN1bGF0ZVNIQTM4NCA9IGV4cG9ydHMuY2FsY3VsYXRlU0hBMjU2ID0gZXhwb3J0cy5jYWxjdWxhdGVNRDUgPSBleHBvcnRzLlBERjIwID0gZXhwb3J0cy5QREYxNyA9IGV4cG9ydHMuQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeSA9IGV4cG9ydHMuQVJDRm91ckNpcGhlciA9IGV4cG9ydHMuQUVTMjU2Q2lwaGVyID0gZXhwb3J0cy5BRVMxMjhDaXBoZXIgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9wcmltaXRpdmVzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9zdHJlYW0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1Nyk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG4gICAgICAgICAgICAgICAgdmFyIEFSQ0ZvdXJDaXBoZXIgPSBmdW5jdGlvbiBBUkNGb3VyQ2lwaGVyQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQVJDRm91ckNpcGhlcihrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmIgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSBuZXcgVWludDhBcnJheSgyNTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUxlbmd0aCA9IGtleS5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbaV0gPSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBqICsgdG1wICsga2V5W2kgJSBrZXlMZW5ndGhdICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzW2ldID0gc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzW2pdID0gdG1wO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnMgPSBzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQVJDRm91ckNpcGhlci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmNyeXB0QmxvY2s6IGZ1bmN0aW9uIEFSQ0ZvdXJDaXBoZXJfZW5jcnlwdEJsb2NrKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGRhdGEubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSB0aGlzLmEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSB0aGlzLmIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSB0aGlzLnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG91dHB1dCA9IG5ldyBVaW50OEFycmF5KG4pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gYSArIDEgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBzW2FdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gYiArIHRtcCAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDIgPSBzW2JdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzW2FdID0gdG1wMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1tiXSA9IHRtcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W2ldID0gZGF0YVtpXSBeIHNbdG1wICsgdG1wMiAmIDB4RkZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYSA9IGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iID0gYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBBUkNGb3VyQ2lwaGVyLnByb3RvdHlwZS5kZWNyeXB0QmxvY2sgPSBBUkNGb3VyQ2lwaGVyLnByb3RvdHlwZS5lbmNyeXB0QmxvY2s7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBUkNGb3VyQ2lwaGVyO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuQVJDRm91ckNpcGhlciA9IEFSQ0ZvdXJDaXBoZXI7XG5cbiAgICAgICAgICAgICAgICB2YXIgY2FsY3VsYXRlTUQ1ID0gZnVuY3Rpb24gY2FsY3VsYXRlTUQ1Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBuZXcgVWludDhBcnJheShbNywgMTIsIDE3LCAyMiwgNywgMTIsIDE3LCAyMiwgNywgMTIsIDE3LCAyMiwgNywgMTIsIDE3LCAyMiwgNSwgOSwgMTQsIDIwLCA1LCA5LCAxNCwgMjAsIDUsIDksIDE0LCAyMCwgNSwgOSwgMTQsIDIwLCA0LCAxMSwgMTYsIDIzLCA0LCAxMSwgMTYsIDIzLCA0LCAxMSwgMTYsIDIzLCA0LCAxMSwgMTYsIDIzLCA2LCAxMCwgMTUsIDIxLCA2LCAxMCwgMTUsIDIxLCA2LCAxMCwgMTUsIDIxLCA2LCAxMCwgMTUsIDIxXSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrID0gbmV3IEludDMyQXJyYXkoWy02ODA4NzY5MzYsIC0zODk1NjQ1ODYsIDYwNjEwNTgxOSwgLTEwNDQ1MjUzMzAsIC0xNzY0MTg4OTcsIDEyMDAwODA0MjYsIC0xNDczMjMxMzQxLCAtNDU3MDU5ODMsIDE3NzAwMzU0MTYsIC0xOTU4NDE0NDE3LCAtNDIwNjMsIC0xOTkwNDA0MTYyLCAxODA0NjAzNjgyLCAtNDAzNDExMDEsIC0xNTAyMDAyMjkwLCAxMjM2NTM1MzI5LCAtMTY1Nzk2NTEwLCAtMTA2OTUwMTYzMiwgNjQzNzE3NzEzLCAtMzczODk3MzAyLCAtNzAxNTU4NjkxLCAzODAxNjA4MywgLTY2MDQ3ODMzNSwgLTQwNTUzNzg0OCwgNTY4NDQ2NDM4LCAtMTAxOTgwMzY5MCwgLTE4NzM2Mzk2MSwgMTE2MzUzMTUwMSwgLTE0NDQ2ODE0NjcsIC01MTQwMzc4NCwgMTczNTMyODQ3MywgLTE5MjY2MDc3MzQsIC0zNzg1NTgsIC0yMDIyNTc0NDYzLCAxODM5MDMwNTYyLCAtMzUzMDk1NTYsIC0xNTMwOTkyMDYwLCAxMjcyODkzMzUzLCAtMTU1NDk3NjMyLCAtMTA5NDczMDY0MCwgNjgxMjc5MTc0LCAtMzU4NTM3MjIyLCAtNzIyNTIxOTc5LCA3NjAyOTE4OSwgLTY0MDM2NDQ4NywgLTQyMTgxNTgzNSwgNTMwNzQyNTIwLCAtOTk1MzM4NjUxLCAtMTk4NjMwODQ0LCAxMTI2ODkxNDE1LCAtMTQxNjM1NDkwNSwgLTU3NDM0MDU1LCAxNzAwNDg1NTcxLCAtMTg5NDk4NjYwNiwgLTEwNTE1MjMsIC0yMDU0OTIyNzk5LCAxODczMzEzMzU5LCAtMzA2MTE3NDQsIC0xNTYwMTk4MzgwLCAxMzA5MTUxNjQ5LCAtMTQ1NTIzMDcwLCAtMTEyMDIxMDM3OSwgNzE4Nzg3MjU5LCAtMzQzNDg1NTUxXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaGFzaChkYXRhLCBvZmZzZXQsIGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGgwID0gMTczMjU4NDE5MyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMSA9IC0yNzE3MzM4NzksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDIgPSAtMTczMjU4NDE5NCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMyA9IDI3MTczMzg3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWRkZWRMZW5ndGggPSBsZW5ndGggKyA3MiAmIH42MztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWRkZWQgPSBuZXcgVWludDhBcnJheShwYWRkZWRMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIGosIG47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFtpXSA9IGRhdGFbb2Zmc2V0KytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDB4ODA7XG4gICAgICAgICAgICAgICAgICAgICAgICBuID0gcGFkZGVkTGVuZ3RoIC0gODtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGVkW2krK10gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA8PCAzICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+IDUgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4gMTMgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4gMjEgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4+IDI5ICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3ID0gbmV3IEludDMyQXJyYXkoMTYpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFkZGVkTGVuZ3RoOykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCAxNjsgKytqLCBpICs9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1tqXSA9IHBhZGRlZFtpXSB8IHBhZGRlZFtpICsgMV0gPDwgOCB8IHBhZGRlZFtpICsgMl0gPDwgMTYgfCBwYWRkZWRbaSArIDNdIDw8IDI0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gaDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBoMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGgyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gaDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgNjQ7ICsraikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaiA8IDE2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gYiAmIGMgfCB+YiAmIGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChqIDwgMzIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBkICYgYiB8IH5kICYgYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSA1ICogaiArIDEgJiAxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChqIDwgNDgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBiIF4gYyBeIGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gMyAqIGogKyA1ICYgMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gYyBeIChiIHwgfmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IDcgKiBqICYgMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wID0gZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZUFyZyA9IGEgKyBmICsga1tqXSArIHdbZ10gfCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlID0gcltqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gYiArIChyb3RhdGVBcmcgPDwgcm90YXRlIHwgcm90YXRlQXJnID4+PiAzMiAtIHJvdGF0ZSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gdG1wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgwID0gaDAgKyBhIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMSA9IGgxICsgYiB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDIgPSBoMiArIGMgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgzID0gaDMgKyBkIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFtoMCAmIDB4RkYsIGgwID4+IDggJiAweEZGLCBoMCA+PiAxNiAmIDB4RkYsIGgwID4+PiAyNCAmIDB4RkYsIGgxICYgMHhGRiwgaDEgPj4gOCAmIDB4RkYsIGgxID4+IDE2ICYgMHhGRiwgaDEgPj4+IDI0ICYgMHhGRiwgaDIgJiAweEZGLCBoMiA+PiA4ICYgMHhGRiwgaDIgPj4gMTYgJiAweEZGLCBoMiA+Pj4gMjQgJiAweEZGLCBoMyAmIDB4RkYsIGgzID4+IDggJiAweEZGLCBoMyA+PiAxNiAmIDB4RkYsIGgzID4+PiAyNCAmIDB4RkZdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNoO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuY2FsY3VsYXRlTUQ1ID0gY2FsY3VsYXRlTUQ1O1xuXG4gICAgICAgICAgICAgICAgdmFyIFdvcmQ2NCA9IGZ1bmN0aW9uIFdvcmQ2NENsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdvcmQ2NChoaWdoSW50ZWdlciwgbG93SW50ZWdlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWdoID0gaGlnaEludGVnZXIgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb3cgPSBsb3dJbnRlZ2VyIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFdvcmQ2NC5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbmQ6IGZ1bmN0aW9uIFdvcmQ2NF9hbmQod29yZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaCAmPSB3b3JkLmhpZ2g7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb3cgJj0gd29yZC5sb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeG9yOiBmdW5jdGlvbiBXb3JkNjRfeG9yKHdvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2ggXj0gd29yZC5oaWdoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG93IF49IHdvcmQubG93O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yOiBmdW5jdGlvbiBXb3JkNjRfb3Iod29yZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaCB8PSB3b3JkLmhpZ2g7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb3cgfD0gd29yZC5sb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnRSaWdodDogZnVuY3Rpb24gV29yZDY0X3NoaWZ0UmlnaHQocGxhY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlcyA+PSAzMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvdyA9IHRoaXMuaGlnaCA+Pj4gcGxhY2VzIC0gMzIgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2ggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG93ID0gdGhpcy5sb3cgPj4+IHBsYWNlcyB8IHRoaXMuaGlnaCA8PCAzMiAtIHBsYWNlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWdoID0gdGhpcy5oaWdoID4+PiBwbGFjZXMgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGlmdExlZnQ6IGZ1bmN0aW9uIFdvcmQ2NF9zaGlmdExlZnQocGxhY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlcyA+PSAzMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2ggPSB0aGlzLmxvdyA8PCBwbGFjZXMgLSAzMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb3cgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaCA9IHRoaXMuaGlnaCA8PCBwbGFjZXMgfCB0aGlzLmxvdyA+Pj4gMzIgLSBwbGFjZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG93ID0gdGhpcy5sb3cgPDwgcGxhY2VzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVSaWdodDogZnVuY3Rpb24gV29yZDY0X3JvdGF0ZVJpZ2h0KHBsYWNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb3csIGhpZ2g7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGxhY2VzICYgMzIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaCA9IHRoaXMubG93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3cgPSB0aGlzLmhpZ2g7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93ID0gdGhpcy5sb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2ggPSB0aGlzLmhpZ2g7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VzICY9IDMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG93ID0gbG93ID4+PiBwbGFjZXMgfCBoaWdoIDw8IDMyIC0gcGxhY2VzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaCA9IGhpZ2ggPj4+IHBsYWNlcyB8IGxvdyA8PCAzMiAtIHBsYWNlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBub3Q6IGZ1bmN0aW9uIFdvcmQ2NF9ub3QoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWdoID0gfnRoaXMuaGlnaDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvdyA9IH50aGlzLmxvdztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGQ6IGZ1bmN0aW9uIFdvcmQ2NF9hZGQod29yZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb3dBZGQgPSAodGhpcy5sb3cgPj4+IDApICsgKHdvcmQubG93ID4+PiAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGlnaEFkZCA9ICh0aGlzLmhpZ2ggPj4+IDApICsgKHdvcmQuaGlnaCA+Pj4gMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG93QWRkID4gMHhGRkZGRkZGRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoQWRkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb3cgPSBsb3dBZGQgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaCA9IGhpZ2hBZGQgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlUbzogZnVuY3Rpb24gV29yZDY0X2NvcHlUbyhieXRlcywgb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbb2Zmc2V0XSA9IHRoaXMuaGlnaCA+Pj4gMjQgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzW29mZnNldCArIDFdID0gdGhpcy5oaWdoID4+IDE2ICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc1tvZmZzZXQgKyAyXSA9IHRoaXMuaGlnaCA+PiA4ICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc1tvZmZzZXQgKyAzXSA9IHRoaXMuaGlnaCAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbb2Zmc2V0ICsgNF0gPSB0aGlzLmxvdyA+Pj4gMjQgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzW29mZnNldCArIDVdID0gdGhpcy5sb3cgPj4gMTYgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzW29mZnNldCArIDZdID0gdGhpcy5sb3cgPj4gOCAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbb2Zmc2V0ICsgN10gPSB0aGlzLmxvdyAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduOiBmdW5jdGlvbiBXb3JkNjRfYXNzaWduKHdvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2ggPSB3b3JkLmhpZ2g7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb3cgPSB3b3JkLmxvdztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdvcmQ2NDtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY2FsY3VsYXRlU0hBMjU2ID0gZnVuY3Rpb24gY2FsY3VsYXRlU0hBMjU2Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcm90cih4LCBuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geCA+Pj4gbiB8IHggPDwgMzIgLSBuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY2goeCwgeSwgeikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHggJiB5IF4gfnggJiB6O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbWFqKHgsIHksIHopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4ICYgeSBeIHggJiB6IF4geSAmIHo7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzaWdtYSh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm90cih4LCAyKSBeIHJvdHIoeCwgMTMpIF4gcm90cih4LCAyMik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzaWdtYVByaW1lKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb3RyKHgsIDYpIF4gcm90cih4LCAxMSkgXiByb3RyKHgsIDI1KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGxpdHRsZVNpZ21hKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb3RyKHgsIDcpIF4gcm90cih4LCAxOCkgXiB4ID4+PiAzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbGl0dGxlU2lnbWFQcmltZSh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm90cih4LCAxNykgXiByb3RyKHgsIDE5KSBeIHggPj4+IDEwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGsgPSBbMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSwgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSwgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMywgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCwgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYywgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSwgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNywgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NywgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMywgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSwgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMywgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCwgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSwgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMywgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCwgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMl07XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaGFzaChkYXRhLCBvZmZzZXQsIGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGgwID0gMHg2YTA5ZTY2NyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMSA9IDB4YmI2N2FlODUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDIgPSAweDNjNmVmMzcyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgzID0gMHhhNTRmZjUzYSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoNCA9IDB4NTEwZTUyN2YsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDUgPSAweDliMDU2ODhjLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg2ID0gMHgxZjgzZDlhYixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoNyA9IDB4NWJlMGNkMTk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFkZGVkTGVuZ3RoID0gTWF0aC5jZWlsKChsZW5ndGggKyA5KSAvIDY0KSAqIDY0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhZGRlZCA9IG5ldyBVaW50OEFycmF5KHBhZGRlZExlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaiwgbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGVkW2ldID0gZGF0YVtvZmZzZXQrK107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFtpKytdID0gMHg4MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBwYWRkZWRMZW5ndGggLSA4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IG4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+PiAyOSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+PiAyMSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+PiAxMyAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+PiA1ICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoIDw8IDMgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHcgPSBuZXcgVWludDMyQXJyYXkoNjQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFkZGVkTGVuZ3RoOykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdbal0gPSBwYWRkZWRbaV0gPDwgMjQgfCBwYWRkZWRbaSArIDFdIDw8IDE2IHwgcGFkZGVkW2kgKyAyXSA8PCA4IHwgcGFkZGVkW2kgKyAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDE2OyBqIDwgNjQ7ICsraikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3W2pdID0gbGl0dGxlU2lnbWFQcmltZSh3W2ogLSAyXSkgKyB3W2ogLSA3XSArIGxpdHRsZVNpZ21hKHdbaiAtIDE1XSkgKyB3W2ogLSAxNl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gaDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBoMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGgyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gaDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBoNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGg1LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gaDYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBoNyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IDY0OyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEgPSBoICsgc2lnbWFQcmltZShlKSArIGNoKGUsIGYsIGcpICsga1tqXSArIHdbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQyID0gc2lnbWEoYSkgKyBtYWooYSwgYiwgYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBkICsgdDEgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gdDEgKyB0MiB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDAgPSBoMCArIGEgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgxID0gaDEgKyBiIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMiA9IGgyICsgYyB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDMgPSBoMyArIGQgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg0ID0gaDQgKyBlIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoNSA9IGg1ICsgZiB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDYgPSBoNiArIGcgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg3ID0gaDcgKyBoIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFtoMCA+PiAyNCAmIDB4RkYsIGgwID4+IDE2ICYgMHhGRiwgaDAgPj4gOCAmIDB4RkYsIGgwICYgMHhGRiwgaDEgPj4gMjQgJiAweEZGLCBoMSA+PiAxNiAmIDB4RkYsIGgxID4+IDggJiAweEZGLCBoMSAmIDB4RkYsIGgyID4+IDI0ICYgMHhGRiwgaDIgPj4gMTYgJiAweEZGLCBoMiA+PiA4ICYgMHhGRiwgaDIgJiAweEZGLCBoMyA+PiAyNCAmIDB4RkYsIGgzID4+IDE2ICYgMHhGRiwgaDMgPj4gOCAmIDB4RkYsIGgzICYgMHhGRiwgaDQgPj4gMjQgJiAweEZGLCBoNCA+PiAxNiAmIDB4RkYsIGg0ID4+IDggJiAweEZGLCBoNCAmIDB4RkYsIGg1ID4+IDI0ICYgMHhGRiwgaDUgPj4gMTYgJiAweEZGLCBoNSA+PiA4ICYgMHhGRiwgaDUgJiAweEZGLCBoNiA+PiAyNCAmIDB4RkYsIGg2ID4+IDE2ICYgMHhGRiwgaDYgPj4gOCAmIDB4RkYsIGg2ICYgMHhGRiwgaDcgPj4gMjQgJiAweEZGLCBoNyA+PiAxNiAmIDB4RkYsIGg3ID4+IDggJiAweEZGLCBoNyAmIDB4RkZdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNoO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuY2FsY3VsYXRlU0hBMjU2ID0gY2FsY3VsYXRlU0hBMjU2O1xuXG4gICAgICAgICAgICAgICAgdmFyIGNhbGN1bGF0ZVNIQTUxMiA9IGZ1bmN0aW9uIGNhbGN1bGF0ZVNIQTUxMkNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNoKHJlc3VsdCwgeCwgeSwgeiwgdG1wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXNzaWduKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFuZCh5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5hc3NpZ24oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAubm90KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAuYW5kKHopO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lnhvcih0bXApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbWFqKHJlc3VsdCwgeCwgeSwgeiwgdG1wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXNzaWduKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFuZCh5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5hc3NpZ24oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAuYW5kKHopO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lnhvcih0bXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG1wLmFzc2lnbih5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5hbmQoeik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQueG9yKHRtcCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzaWdtYShyZXN1bHQsIHgsIHRtcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFzc2lnbih4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yb3RhdGVSaWdodCgyOCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAuYXNzaWduKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG1wLnJvdGF0ZVJpZ2h0KDM0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC54b3IodG1wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5hc3NpZ24oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAucm90YXRlUmlnaHQoMzkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lnhvcih0bXApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc2lnbWFQcmltZShyZXN1bHQsIHgsIHRtcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFzc2lnbih4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yb3RhdGVSaWdodCgxNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAuYXNzaWduKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG1wLnJvdGF0ZVJpZ2h0KDE4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC54b3IodG1wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5hc3NpZ24oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAucm90YXRlUmlnaHQoNDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lnhvcih0bXApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbGl0dGxlU2lnbWEocmVzdWx0LCB4LCB0bXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hc3NpZ24oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucm90YXRlUmlnaHQoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAuYXNzaWduKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG1wLnJvdGF0ZVJpZ2h0KDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lnhvcih0bXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG1wLmFzc2lnbih4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5zaGlmdFJpZ2h0KDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lnhvcih0bXApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbGl0dGxlU2lnbWFQcmltZShyZXN1bHQsIHgsIHRtcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFzc2lnbih4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yb3RhdGVSaWdodCgxOSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAuYXNzaWduKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG1wLnJvdGF0ZVJpZ2h0KDYxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC54b3IodG1wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5hc3NpZ24oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAuc2hpZnRSaWdodCg2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC54b3IodG1wKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBrID0gW25ldyBXb3JkNjQoMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiksIG5ldyBXb3JkNjQoMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCksIG5ldyBXb3JkNjQoMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiksIG5ldyBXb3JkNjQoMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyksIG5ldyBXb3JkNjQoMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCksIG5ldyBXb3JkNjQoMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSksIG5ldyBXb3JkNjQoMHg5MjNmODJhNCwgMHhhZjE5NGY5YiksIG5ldyBXb3JkNjQoMHhhYjFjNWVkNSwgMHhkYTZkODExOCksIG5ldyBXb3JkNjQoMHhkODA3YWE5OCwgMHhhMzAzMDI0MiksIG5ldyBXb3JkNjQoMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSksIG5ldyBXb3JkNjQoMHgyNDMxODViZSwgMHg0ZWU0YjI4YyksIG5ldyBXb3JkNjQoMHg1NTBjN2RjMywgMHhkNWZmYjRlMiksIG5ldyBXb3JkNjQoMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiksIG5ldyBXb3JkNjQoMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSksIG5ldyBXb3JkNjQoMHg5YmRjMDZhNywgMHgyNWM3MTIzNSksIG5ldyBXb3JkNjQoMHhjMTliZjE3NCwgMHhjZjY5MjY5NCksIG5ldyBXb3JkNjQoMHhlNDliNjljMSwgMHg5ZWYxNGFkMiksIG5ldyBXb3JkNjQoMHhlZmJlNDc4NiwgMHgzODRmMjVlMyksIG5ldyBXb3JkNjQoMHgwZmMxOWRjNiwgMHg4YjhjZDViNSksIG5ldyBXb3JkNjQoMHgyNDBjYTFjYywgMHg3N2FjOWM2NSksIG5ldyBXb3JkNjQoMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSksIG5ldyBXb3JkNjQoMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyksIG5ldyBXb3JkNjQoMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCksIG5ldyBXb3JkNjQoMHg3NmY5ODhkYSwgMHg4MzExNTNiNSksIG5ldyBXb3JkNjQoMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiksIG5ldyBXb3JkNjQoMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCksIG5ldyBXb3JkNjQoMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiksIG5ldyBXb3JkNjQoMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCksIG5ldyBXb3JkNjQoMHhjNmUwMGJmMywgMHgzZGE4OGZjMiksIG5ldyBXb3JkNjQoMHhkNWE3OTE0NywgMHg5MzBhYTcyNSksIG5ldyBXb3JkNjQoMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiksIG5ldyBXb3JkNjQoMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCksIG5ldyBXb3JkNjQoMHgyN2I3MGE4NSwgMHg0NmQyMmZmYyksIG5ldyBXb3JkNjQoMHgyZTFiMjEzOCwgMHg1YzI2YzkyNiksIG5ldyBXb3JkNjQoMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCksIG5ldyBXb3JkNjQoMHg1MzM4MGQxMywgMHg5ZDk1YjNkZiksIG5ldyBXb3JkNjQoMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSksIG5ldyBXb3JkNjQoMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCksIG5ldyBXb3JkNjQoMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiksIG5ldyBXb3JkNjQoMHg5MjcyMmM4NSwgMHgxNDgyMzUzYiksIG5ldyBXb3JkNjQoMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCksIG5ldyBXb3JkNjQoMHhhODFhNjY0YiwgMHhiYzQyMzAwMSksIG5ldyBXb3JkNjQoMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSksIG5ldyBXb3JkNjQoMHhjNzZjNTFhMywgMHgwNjU0YmUzMCksIG5ldyBXb3JkNjQoMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCksIG5ldyBXb3JkNjQoMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCksIG5ldyBXb3JkNjQoMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSksIG5ldyBXb3JkNjQoMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCksIG5ldyBXb3JkNjQoMHgxOWE0YzExNiwgMHhiOGQyZDBjOCksIG5ldyBXb3JkNjQoMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyksIG5ldyBXb3JkNjQoMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSksIG5ldyBXb3JkNjQoMHgzNGIwYmNiNSwgMHhlMTliNDhhOCksIG5ldyBXb3JkNjQoMHgzOTFjMGNiMywgMHhjNWM5NWE2MyksIG5ldyBXb3JkNjQoMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYiksIG5ldyBXb3JkNjQoMHg1YjljY2E0ZiwgMHg3NzYzZTM3MyksIG5ldyBXb3JkNjQoMHg2ODJlNmZmMywgMHhkNmIyYjhhMyksIG5ldyBXb3JkNjQoMHg3NDhmODJlZSwgMHg1ZGVmYjJmYyksIG5ldyBXb3JkNjQoMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCksIG5ldyBXb3JkNjQoMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiksIG5ldyBXb3JkNjQoMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyksIG5ldyBXb3JkNjQoMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCksIG5ldyBXb3JkNjQoMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSksIG5ldyBXb3JkNjQoMHhiZWY5YTNmNywgMHhiMmM2NzkxNSksIG5ldyBXb3JkNjQoMHhjNjcxNzhmMiwgMHhlMzcyNTMyYiksIG5ldyBXb3JkNjQoMHhjYTI3M2VjZSwgMHhlYTI2NjE5YyksIG5ldyBXb3JkNjQoMHhkMTg2YjhjNywgMHgyMWMwYzIwNyksIG5ldyBXb3JkNjQoMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSksIG5ldyBXb3JkNjQoMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCksIG5ldyBXb3JkNjQoMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSksIG5ldyBXb3JkNjQoMHgwYTYzN2RjNSwgMHhhMmM4OThhNiksIG5ldyBXb3JkNjQoMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSksIG5ldyBXb3JkNjQoMHgxYjcxMGIzNSwgMHgxMzFjNDcxYiksIG5ldyBXb3JkNjQoMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCksIG5ldyBXb3JkNjQoMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyksIG5ldyBXb3JkNjQoMHgzYzllYmUwYSwgMHgxNWM5YmViYyksIG5ldyBXb3JkNjQoMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyksIG5ldyBXb3JkNjQoMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiksIG5ldyBXb3JkNjQoMHg1OTdmMjk5YywgMHhmYzY1N2UyYSksIG5ldyBXb3JkNjQoMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYyksIG5ldyBXb3JkNjQoMHg2YzQ0MTk4YywgMHg0YTQ3NTgxNyldO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGhhc2goZGF0YSwgb2Zmc2V0LCBsZW5ndGgsIG1vZGUzODQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUzODQgPSAhIW1vZGUzODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaDAsIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIGg3O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZGUzODQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMCA9IG5ldyBXb3JkNjQoMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDEgPSBuZXcgV29yZDY0KDB4YmI2N2FlODUsIDB4ODRjYWE3M2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgyID0gbmV3IFdvcmQ2NCgweDNjNmVmMzcyLCAweGZlOTRmODJiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMyA9IG5ldyBXb3JkNjQoMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDQgPSBuZXcgV29yZDY0KDB4NTEwZTUyN2YsIDB4YWRlNjgyZDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg1ID0gbmV3IFdvcmQ2NCgweDliMDU2ODhjLCAweDJiM2U2YzFmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoNiA9IG5ldyBXb3JkNjQoMHgxZjgzZDlhYiwgMHhmYjQxYmQ2Yik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDcgPSBuZXcgV29yZDY0KDB4NWJlMGNkMTksIDB4MTM3ZTIxNzkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMCA9IG5ldyBXb3JkNjQoMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDEgPSBuZXcgV29yZDY0KDB4NjI5YTI5MmEsIDB4MzY3Y2Q1MDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgyID0gbmV3IFdvcmQ2NCgweDkxNTkwMTVhLCAweDMwNzBkZDE3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMyA9IG5ldyBXb3JkNjQoMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDQgPSBuZXcgV29yZDY0KDB4NjczMzI2NjcsIDB4ZmZjMDBiMzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg1ID0gbmV3IFdvcmQ2NCgweDhlYjQ0YTg3LCAweDY4NTgxNTExKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoNiA9IG5ldyBXb3JkNjQoMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDcgPSBuZXcgV29yZDY0KDB4NDdiNTQ4MWQsIDB4YmVmYTRmYTQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFkZGVkTGVuZ3RoID0gTWF0aC5jZWlsKChsZW5ndGggKyAxNykgLyAxMjgpICogMTI4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhZGRlZCA9IG5ldyBVaW50OEFycmF5KHBhZGRlZExlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaiwgbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGVkW2ldID0gZGF0YVtvZmZzZXQrK107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFtpKytdID0gMHg4MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBwYWRkZWRMZW5ndGggLSAxNjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGVkW2krK10gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+Pj4gMjkgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4gMjEgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4gMTMgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4gNSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA8PCAzICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3ID0gbmV3IEFycmF5KDgwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDgwOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3W2ldID0gbmV3IFdvcmQ2NCgwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBuZXcgV29yZDY0KDAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBuZXcgV29yZDY0KDAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBuZXcgV29yZDY0KDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBuZXcgV29yZDY0KDAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgV29yZDY0KDAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBuZXcgV29yZDY0KDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGcgPSBuZXcgV29yZDY0KDAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBuZXcgV29yZDY0KDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQxID0gbmV3IFdvcmQ2NCgwLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MiA9IG5ldyBXb3JkNjQoMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wMSA9IG5ldyBXb3JkNjQoMCwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMiA9IG5ldyBXb3JkNjQoMCwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMztcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBhZGRlZExlbmd0aDspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3W2pdLmhpZ2ggPSBwYWRkZWRbaV0gPDwgMjQgfCBwYWRkZWRbaSArIDFdIDw8IDE2IHwgcGFkZGVkW2kgKyAyXSA8PCA4IHwgcGFkZGVkW2kgKyAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1tqXS5sb3cgPSBwYWRkZWRbaSArIDRdIDw8IDI0IHwgcGFkZGVkW2kgKyA1XSA8PCAxNiB8IHBhZGRlZFtpICsgNl0gPDwgOCB8IHBhZGRlZFtpICsgN107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAxNjsgaiA8IDgwOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMyA9IHdbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdHRsZVNpZ21hUHJpbWUodG1wMywgd1tqIC0gMl0sIHRtcDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAzLmFkZCh3W2ogLSA3XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdHRsZVNpZ21hKHRtcDEsIHdbaiAtIDE1XSwgdG1wMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDMuYWRkKHRtcDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAzLmFkZCh3W2ogLSAxNl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEuYXNzaWduKGgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLmFzc2lnbihoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5hc3NpZ24oaDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuYXNzaWduKGgzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmFzc2lnbihoNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5hc3NpZ24oaDUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcuYXNzaWduKGg2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoLmFzc2lnbihoNyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgODA7ICsraikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MS5hc3NpZ24oaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ21hUHJpbWUodG1wMSwgZSwgdG1wMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQxLmFkZCh0bXAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2godG1wMSwgZSwgZiwgZywgdG1wMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQxLmFkZCh0bXAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEuYWRkKGtbal0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MS5hZGQod1tqXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ21hKHQyLCBhLCB0bXAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFqKHRtcDEsIGEsIGIsIGMsIHRtcDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Mi5hZGQodG1wMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDMgPSBoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IGY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmFkZCh0MSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAzLmFzc2lnbih0MSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDMuYWRkKHQyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHRtcDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDAuYWRkKGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgxLmFkZChiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMi5hZGQoYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDMuYWRkKGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg0LmFkZChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoNS5hZGQoZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDYuYWRkKGcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg3LmFkZChoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2RlMzg0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgwLmNvcHlUbyhyZXN1bHQsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgxLmNvcHlUbyhyZXN1bHQsIDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgyLmNvcHlUbyhyZXN1bHQsIDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMy5jb3B5VG8ocmVzdWx0LCAyNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDQuY29weVRvKHJlc3VsdCwgMzIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg1LmNvcHlUbyhyZXN1bHQsIDQwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoNi5jb3B5VG8ocmVzdWx0LCA0OCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDcuY29weVRvKHJlc3VsdCwgNTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBuZXcgVWludDhBcnJheSg0OCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDAuY29weVRvKHJlc3VsdCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDEuY29weVRvKHJlc3VsdCwgOCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDIuY29weVRvKHJlc3VsdCwgMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgzLmNvcHlUbyhyZXN1bHQsIDI0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoNC5jb3B5VG8ocmVzdWx0LCAzMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDUuY29weVRvKHJlc3VsdCwgNDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc2g7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5jYWxjdWxhdGVTSEE1MTIgPSBjYWxjdWxhdGVTSEE1MTI7XG5cbiAgICAgICAgICAgICAgICB2YXIgY2FsY3VsYXRlU0hBMzg0ID0gZnVuY3Rpb24gY2FsY3VsYXRlU0hBMzg0Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaGFzaChkYXRhLCBvZmZzZXQsIGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZVNIQTUxMihkYXRhLCBvZmZzZXQsIGxlbmd0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzaDtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLmNhbGN1bGF0ZVNIQTM4NCA9IGNhbGN1bGF0ZVNIQTM4NDtcblxuICAgICAgICAgICAgICAgIHZhciBOdWxsQ2lwaGVyID0gZnVuY3Rpb24gTnVsbENpcGhlckNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE51bGxDaXBoZXIoKSB7fVxuXG4gICAgICAgICAgICAgICAgICAgIE51bGxDaXBoZXIucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVjcnlwdEJsb2NrOiBmdW5jdGlvbiBOdWxsQ2lwaGVyX2RlY3J5cHRCbG9jayhkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBOdWxsQ2lwaGVyO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIHZhciBBRVNCYXNlQ2lwaGVyID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBRVNCYXNlQ2lwaGVyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBBRVNCYXNlQ2lwaGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBBRVNCYXNlQ2lwaGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ0Nhbm5vdCBpbml0aWFsaXplIEFFU0Jhc2VDaXBoZXIuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcyA9IG5ldyBVaW50OEFycmF5KFsweDYzLCAweDdjLCAweDc3LCAweDdiLCAweGYyLCAweDZiLCAweDZmLCAweGM1LCAweDMwLCAweDAxLCAweDY3LCAweDJiLCAweGZlLCAweGQ3LCAweGFiLCAweDc2LCAweGNhLCAweDgyLCAweGM5LCAweDdkLCAweGZhLCAweDU5LCAweDQ3LCAweGYwLCAweGFkLCAweGQ0LCAweGEyLCAweGFmLCAweDljLCAweGE0LCAweDcyLCAweGMwLCAweGI3LCAweGZkLCAweDkzLCAweDI2LCAweDM2LCAweDNmLCAweGY3LCAweGNjLCAweDM0LCAweGE1LCAweGU1LCAweGYxLCAweDcxLCAweGQ4LCAweDMxLCAweDE1LCAweDA0LCAweGM3LCAweDIzLCAweGMzLCAweDE4LCAweDk2LCAweDA1LCAweDlhLCAweDA3LCAweDEyLCAweDgwLCAweGUyLCAweGViLCAweDI3LCAweGIyLCAweDc1LCAweDA5LCAweDgzLCAweDJjLCAweDFhLCAweDFiLCAweDZlLCAweDVhLCAweGEwLCAweDUyLCAweDNiLCAweGQ2LCAweGIzLCAweDI5LCAweGUzLCAweDJmLCAweDg0LCAweDUzLCAweGQxLCAweDAwLCAweGVkLCAweDIwLCAweGZjLCAweGIxLCAweDViLCAweDZhLCAweGNiLCAweGJlLCAweDM5LCAweDRhLCAweDRjLCAweDU4LCAweGNmLCAweGQwLCAweGVmLCAweGFhLCAweGZiLCAweDQzLCAweDRkLCAweDMzLCAweDg1LCAweDQ1LCAweGY5LCAweDAyLCAweDdmLCAweDUwLCAweDNjLCAweDlmLCAweGE4LCAweDUxLCAweGEzLCAweDQwLCAweDhmLCAweDkyLCAweDlkLCAweDM4LCAweGY1LCAweGJjLCAweGI2LCAweGRhLCAweDIxLCAweDEwLCAweGZmLCAweGYzLCAweGQyLCAweGNkLCAweDBjLCAweDEzLCAweGVjLCAweDVmLCAweDk3LCAweDQ0LCAweDE3LCAweGM0LCAweGE3LCAweDdlLCAweDNkLCAweDY0LCAweDVkLCAweDE5LCAweDczLCAweDYwLCAweDgxLCAweDRmLCAweGRjLCAweDIyLCAweDJhLCAweDkwLCAweDg4LCAweDQ2LCAweGVlLCAweGI4LCAweDE0LCAweGRlLCAweDVlLCAweDBiLCAweGRiLCAweGUwLCAweDMyLCAweDNhLCAweDBhLCAweDQ5LCAweDA2LCAweDI0LCAweDVjLCAweGMyLCAweGQzLCAweGFjLCAweDYyLCAweDkxLCAweDk1LCAweGU0LCAweDc5LCAweGU3LCAweGM4LCAweDM3LCAweDZkLCAweDhkLCAweGQ1LCAweDRlLCAweGE5LCAweDZjLCAweDU2LCAweGY0LCAweGVhLCAweDY1LCAweDdhLCAweGFlLCAweDA4LCAweGJhLCAweDc4LCAweDI1LCAweDJlLCAweDFjLCAweGE2LCAweGI0LCAweGM2LCAweGU4LCAweGRkLCAweDc0LCAweDFmLCAweDRiLCAweGJkLCAweDhiLCAweDhhLCAweDcwLCAweDNlLCAweGI1LCAweDY2LCAweDQ4LCAweDAzLCAweGY2LCAweDBlLCAweDYxLCAweDM1LCAweDU3LCAweGI5LCAweDg2LCAweGMxLCAweDFkLCAweDllLCAweGUxLCAweGY4LCAweDk4LCAweDExLCAweDY5LCAweGQ5LCAweDhlLCAweDk0LCAweDliLCAweDFlLCAweDg3LCAweGU5LCAweGNlLCAweDU1LCAweDI4LCAweGRmLCAweDhjLCAweGExLCAweDg5LCAweDBkLCAweGJmLCAweGU2LCAweDQyLCAweDY4LCAweDQxLCAweDk5LCAweDJkLCAweDBmLCAweGIwLCAweDU0LCAweGJiLCAweDE2XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW52X3MgPSBuZXcgVWludDhBcnJheShbMHg1MiwgMHgwOSwgMHg2YSwgMHhkNSwgMHgzMCwgMHgzNiwgMHhhNSwgMHgzOCwgMHhiZiwgMHg0MCwgMHhhMywgMHg5ZSwgMHg4MSwgMHhmMywgMHhkNywgMHhmYiwgMHg3YywgMHhlMywgMHgzOSwgMHg4MiwgMHg5YiwgMHgyZiwgMHhmZiwgMHg4NywgMHgzNCwgMHg4ZSwgMHg0MywgMHg0NCwgMHhjNCwgMHhkZSwgMHhlOSwgMHhjYiwgMHg1NCwgMHg3YiwgMHg5NCwgMHgzMiwgMHhhNiwgMHhjMiwgMHgyMywgMHgzZCwgMHhlZSwgMHg0YywgMHg5NSwgMHgwYiwgMHg0MiwgMHhmYSwgMHhjMywgMHg0ZSwgMHgwOCwgMHgyZSwgMHhhMSwgMHg2NiwgMHgyOCwgMHhkOSwgMHgyNCwgMHhiMiwgMHg3NiwgMHg1YiwgMHhhMiwgMHg0OSwgMHg2ZCwgMHg4YiwgMHhkMSwgMHgyNSwgMHg3MiwgMHhmOCwgMHhmNiwgMHg2NCwgMHg4NiwgMHg2OCwgMHg5OCwgMHgxNiwgMHhkNCwgMHhhNCwgMHg1YywgMHhjYywgMHg1ZCwgMHg2NSwgMHhiNiwgMHg5MiwgMHg2YywgMHg3MCwgMHg0OCwgMHg1MCwgMHhmZCwgMHhlZCwgMHhiOSwgMHhkYSwgMHg1ZSwgMHgxNSwgMHg0NiwgMHg1NywgMHhhNywgMHg4ZCwgMHg5ZCwgMHg4NCwgMHg5MCwgMHhkOCwgMHhhYiwgMHgwMCwgMHg4YywgMHhiYywgMHhkMywgMHgwYSwgMHhmNywgMHhlNCwgMHg1OCwgMHgwNSwgMHhiOCwgMHhiMywgMHg0NSwgMHgwNiwgMHhkMCwgMHgyYywgMHgxZSwgMHg4ZiwgMHhjYSwgMHgzZiwgMHgwZiwgMHgwMiwgMHhjMSwgMHhhZiwgMHhiZCwgMHgwMywgMHgwMSwgMHgxMywgMHg4YSwgMHg2YiwgMHgzYSwgMHg5MSwgMHgxMSwgMHg0MSwgMHg0ZiwgMHg2NywgMHhkYywgMHhlYSwgMHg5NywgMHhmMiwgMHhjZiwgMHhjZSwgMHhmMCwgMHhiNCwgMHhlNiwgMHg3MywgMHg5NiwgMHhhYywgMHg3NCwgMHgyMiwgMHhlNywgMHhhZCwgMHgzNSwgMHg4NSwgMHhlMiwgMHhmOSwgMHgzNywgMHhlOCwgMHgxYywgMHg3NSwgMHhkZiwgMHg2ZSwgMHg0NywgMHhmMSwgMHgxYSwgMHg3MSwgMHgxZCwgMHgyOSwgMHhjNSwgMHg4OSwgMHg2ZiwgMHhiNywgMHg2MiwgMHgwZSwgMHhhYSwgMHgxOCwgMHhiZSwgMHgxYiwgMHhmYywgMHg1NiwgMHgzZSwgMHg0YiwgMHhjNiwgMHhkMiwgMHg3OSwgMHgyMCwgMHg5YSwgMHhkYiwgMHhjMCwgMHhmZSwgMHg3OCwgMHhjZCwgMHg1YSwgMHhmNCwgMHgxZiwgMHhkZCwgMHhhOCwgMHgzMywgMHg4OCwgMHgwNywgMHhjNywgMHgzMSwgMHhiMSwgMHgxMiwgMHgxMCwgMHg1OSwgMHgyNywgMHg4MCwgMHhlYywgMHg1ZiwgMHg2MCwgMHg1MSwgMHg3ZiwgMHhhOSwgMHgxOSwgMHhiNSwgMHg0YSwgMHgwZCwgMHgyZCwgMHhlNSwgMHg3YSwgMHg5ZiwgMHg5MywgMHhjOSwgMHg5YywgMHhlZiwgMHhhMCwgMHhlMCwgMHgzYiwgMHg0ZCwgMHhhZSwgMHgyYSwgMHhmNSwgMHhiMCwgMHhjOCwgMHhlYiwgMHhiYiwgMHgzYywgMHg4MywgMHg1MywgMHg5OSwgMHg2MSwgMHgxNywgMHgyYiwgMHgwNCwgMHg3ZSwgMHhiYSwgMHg3NywgMHhkNiwgMHgyNiwgMHhlMSwgMHg2OSwgMHgxNCwgMHg2MywgMHg1NSwgMHgyMSwgMHgwYywgMHg3ZF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21peCA9IG5ldyBVaW50MzJBcnJheShbMHgwMDAwMDAwMCwgMHgwZTA5MGQwYiwgMHgxYzEyMWExNiwgMHgxMjFiMTcxZCwgMHgzODI0MzQyYywgMHgzNjJkMzkyNywgMHgyNDM2MmUzYSwgMHgyYTNmMjMzMSwgMHg3MDQ4Njg1OCwgMHg3ZTQxNjU1MywgMHg2YzVhNzI0ZSwgMHg2MjUzN2Y0NSwgMHg0ODZjNWM3NCwgMHg0NjY1NTE3ZiwgMHg1NDdlNDY2MiwgMHg1YTc3NGI2OSwgMHhlMDkwZDBiMCwgMHhlZTk5ZGRiYiwgMHhmYzgyY2FhNiwgMHhmMjhiYzdhZCwgMHhkOGI0ZTQ5YywgMHhkNmJkZTk5NywgMHhjNGE2ZmU4YSwgMHhjYWFmZjM4MSwgMHg5MGQ4YjhlOCwgMHg5ZWQxYjVlMywgMHg4Y2NhYTJmZSwgMHg4MmMzYWZmNSwgMHhhOGZjOGNjNCwgMHhhNmY1ODFjZiwgMHhiNGVlOTZkMiwgMHhiYWU3OWJkOSwgMHhkYjNiYmI3YiwgMHhkNTMyYjY3MCwgMHhjNzI5YTE2ZCwgMHhjOTIwYWM2NiwgMHhlMzFmOGY1NywgMHhlZDE2ODI1YywgMHhmZjBkOTU0MSwgMHhmMTA0OTg0YSwgMHhhYjczZDMyMywgMHhhNTdhZGUyOCwgMHhiNzYxYzkzNSwgMHhiOTY4YzQzZSwgMHg5MzU3ZTcwZiwgMHg5ZDVlZWEwNCwgMHg4ZjQ1ZmQxOSwgMHg4MTRjZjAxMiwgMHgzYmFiNmJjYiwgMHgzNWEyNjZjMCwgMHgyN2I5NzFkZCwgMHgyOWIwN2NkNiwgMHgwMzhmNWZlNywgMHgwZDg2NTJlYywgMHgxZjlkNDVmMSwgMHgxMTk0NDhmYSwgMHg0YmUzMDM5MywgMHg0NWVhMGU5OCwgMHg1N2YxMTk4NSwgMHg1OWY4MTQ4ZSwgMHg3M2M3MzdiZiwgMHg3ZGNlM2FiNCwgMHg2ZmQ1MmRhOSwgMHg2MWRjMjBhMiwgMHhhZDc2NmRmNiwgMHhhMzdmNjBmZCwgMHhiMTY0NzdlMCwgMHhiZjZkN2FlYiwgMHg5NTUyNTlkYSwgMHg5YjViNTRkMSwgMHg4OTQwNDNjYywgMHg4NzQ5NGVjNywgMHhkZDNlMDVhZSwgMHhkMzM3MDhhNSwgMHhjMTJjMWZiOCwgMHhjZjI1MTJiMywgMHhlNTFhMzE4MiwgMHhlYjEzM2M4OSwgMHhmOTA4MmI5NCwgMHhmNzAxMjY5ZiwgMHg0ZGU2YmQ0NiwgMHg0M2VmYjA0ZCwgMHg1MWY0YTc1MCwgMHg1ZmZkYWE1YiwgMHg3NWMyODk2YSwgMHg3YmNiODQ2MSwgMHg2OWQwOTM3YywgMHg2N2Q5OWU3NywgMHgzZGFlZDUxZSwgMHgzM2E3ZDgxNSwgMHgyMWJjY2YwOCwgMHgyZmI1YzIwMywgMHgwNThhZTEzMiwgMHgwYjgzZWMzOSwgMHgxOTk4ZmIyNCwgMHgxNzkxZjYyZiwgMHg3NjRkZDY4ZCwgMHg3ODQ0ZGI4NiwgMHg2YTVmY2M5YiwgMHg2NDU2YzE5MCwgMHg0ZTY5ZTJhMSwgMHg0MDYwZWZhYSwgMHg1MjdiZjhiNywgMHg1YzcyZjViYywgMHgwNjA1YmVkNSwgMHgwODBjYjNkZSwgMHgxYTE3YTRjMywgMHgxNDFlYTljOCwgMHgzZTIxOGFmOSwgMHgzMDI4ODdmMiwgMHgyMjMzOTBlZiwgMHgyYzNhOWRlNCwgMHg5NmRkMDYzZCwgMHg5OGQ0MGIzNiwgMHg4YWNmMWMyYiwgMHg4NGM2MTEyMCwgMHhhZWY5MzIxMSwgMHhhMGYwM2YxYSwgMHhiMmViMjgwNywgMHhiY2UyMjUwYywgMHhlNjk1NmU2NSwgMHhlODljNjM2ZSwgMHhmYTg3NzQ3MywgMHhmNDhlNzk3OCwgMHhkZWIxNWE0OSwgMHhkMGI4NTc0MiwgMHhjMmEzNDA1ZiwgMHhjY2FhNGQ1NCwgMHg0MWVjZGFmNywgMHg0ZmU1ZDdmYywgMHg1ZGZlYzBlMSwgMHg1M2Y3Y2RlYSwgMHg3OWM4ZWVkYiwgMHg3N2MxZTNkMCwgMHg2NWRhZjRjZCwgMHg2YmQzZjljNiwgMHgzMWE0YjJhZiwgMHgzZmFkYmZhNCwgMHgyZGI2YThiOSwgMHgyM2JmYTViMiwgMHgwOTgwODY4MywgMHgwNzg5OGI4OCwgMHgxNTkyOWM5NSwgMHgxYjliOTE5ZSwgMHhhMTdjMGE0NywgMHhhZjc1MDc0YywgMHhiZDZlMTA1MSwgMHhiMzY3MWQ1YSwgMHg5OTU4M2U2YiwgMHg5NzUxMzM2MCwgMHg4NTRhMjQ3ZCwgMHg4YjQzMjk3NiwgMHhkMTM0NjIxZiwgMHhkZjNkNmYxNCwgMHhjZDI2NzgwOSwgMHhjMzJmNzUwMiwgMHhlOTEwNTYzMywgMHhlNzE5NWIzOCwgMHhmNTAyNGMyNSwgMHhmYjBiNDEyZSwgMHg5YWQ3NjE4YywgMHg5NGRlNmM4NywgMHg4NmM1N2I5YSwgMHg4OGNjNzY5MSwgMHhhMmYzNTVhMCwgMHhhY2ZhNThhYiwgMHhiZWUxNGZiNiwgMHhiMGU4NDJiZCwgMHhlYTlmMDlkNCwgMHhlNDk2MDRkZiwgMHhmNjhkMTNjMiwgMHhmODg0MWVjOSwgMHhkMmJiM2RmOCwgMHhkY2IyMzBmMywgMHhjZWE5MjdlZSwgMHhjMGEwMmFlNSwgMHg3YTQ3YjEzYywgMHg3NDRlYmMzNywgMHg2NjU1YWIyYSwgMHg2ODVjYTYyMSwgMHg0MjYzODUxMCwgMHg0YzZhODgxYiwgMHg1ZTcxOWYwNiwgMHg1MDc4OTIwZCwgMHgwYTBmZDk2NCwgMHgwNDA2ZDQ2ZiwgMHgxNjFkYzM3MiwgMHgxODE0Y2U3OSwgMHgzMjJiZWQ0OCwgMHgzYzIyZTA0MywgMHgyZTM5Zjc1ZSwgMHgyMDMwZmE1NSwgMHhlYzlhYjcwMSwgMHhlMjkzYmEwYSwgMHhmMDg4YWQxNywgMHhmZTgxYTAxYywgMHhkNGJlODMyZCwgMHhkYWI3OGUyNiwgMHhjOGFjOTkzYiwgMHhjNmE1OTQzMCwgMHg5Y2QyZGY1OSwgMHg5MmRiZDI1MiwgMHg4MGMwYzU0ZiwgMHg4ZWM5Yzg0NCwgMHhhNGY2ZWI3NSwgMHhhYWZmZTY3ZSwgMHhiOGU0ZjE2MywgMHhiNmVkZmM2OCwgMHgwYzBhNjdiMSwgMHgwMjAzNmFiYSwgMHgxMDE4N2RhNywgMHgxZTExNzBhYywgMHgzNDJlNTM5ZCwgMHgzYTI3NWU5NiwgMHgyODNjNDk4YiwgMHgyNjM1NDQ4MCwgMHg3YzQyMGZlOSwgMHg3MjRiMDJlMiwgMHg2MDUwMTVmZiwgMHg2ZTU5MThmNCwgMHg0NDY2M2JjNSwgMHg0YTZmMzZjZSwgMHg1ODc0MjFkMywgMHg1NjdkMmNkOCwgMHgzN2ExMGM3YSwgMHgzOWE4MDE3MSwgMHgyYmIzMTY2YywgMHgyNWJhMWI2NywgMHgwZjg1Mzg1NiwgMHgwMThjMzU1ZCwgMHgxMzk3MjI0MCwgMHgxZDllMmY0YiwgMHg0N2U5NjQyMiwgMHg0OWUwNjkyOSwgMHg1YmZiN2UzNCwgMHg1NWYyNzMzZiwgMHg3ZmNkNTAwZSwgMHg3MWM0NWQwNSwgMHg2M2RmNGExOCwgMHg2ZGQ2NDcxMywgMHhkNzMxZGNjYSwgMHhkOTM4ZDFjMSwgMHhjYjIzYzZkYywgMHhjNTJhY2JkNywgMHhlZjE1ZThlNiwgMHhlMTFjZTVlZCwgMHhmMzA3ZjJmMCwgMHhmZDBlZmZmYiwgMHhhNzc5YjQ5MiwgMHhhOTcwYjk5OSwgMHhiYjZiYWU4NCwgMHhiNTYyYTM4ZiwgMHg5ZjVkODBiZSwgMHg5MTU0OGRiNSwgMHg4MzRmOWFhOCwgMHg4ZDQ2OTdhM10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21peENvbCA9IG5ldyBVaW50OEFycmF5KDI1Nik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgMTI4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9taXhDb2xbaV0gPSBpIDw8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9taXhDb2xbaV0gPSBpIDw8IDEgXiAweDFiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJQb3NpdGlvbiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhBRVNCYXNlQ2lwaGVyLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfZXhwYW5kS2V5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9leHBhbmRLZXkoY2lwaGVyS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ0Nhbm5vdCBjYWxsIGBfZXhwYW5kS2V5YCBvbiB0aGUgYmFzZSBjbGFzcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX2RlY3J5cHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2RlY3J5cHQoaW5wdXQsIGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCwgdSwgdjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zZXQoaW5wdXQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBrID0gdGhpcy5fa2V5U2l6ZTsgaiA8IDE2OyArK2osICsraykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbal0gXj0ga2V5W2tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX2N5Y2xlc09mUmVwZXRpdGlvbiAtIDE7IGkgPj0gMTsgLS1pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gc3RhdGVbMTNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbMTNdID0gc3RhdGVbOV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVs5XSA9IHN0YXRlWzVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbNV0gPSBzdGF0ZVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzFdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBzdGF0ZVsxNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gc3RhdGVbMTBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbMTRdID0gc3RhdGVbNl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVsxMF0gPSBzdGF0ZVsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzZdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzJdID0gdTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBzdGF0ZVsxNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gc3RhdGVbMTFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHN0YXRlWzddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbMTVdID0gc3RhdGVbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVsxMV0gPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbN10gPSB1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbM10gPSB2O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgMTY7ICsrX2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVtfal0gPSB0aGlzLl9pbnZfc1tzdGF0ZVtfal1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfajIgPSAwLCBfayA9IGkgKiAxNjsgX2oyIDwgMTY7ICsrX2oyLCArK19rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbX2oyXSBePSBrZXlbX2tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfajMgPSAwOyBfajMgPCAxNjsgX2ozICs9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgczAgPSB0aGlzLl9taXhbc3RhdGVbX2ozXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMxID0gdGhpcy5fbWl4W3N0YXRlW19qMyArIDFdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgczIgPSB0aGlzLl9taXhbc3RhdGVbX2ozICsgMl1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzMyA9IHRoaXMuX21peFtzdGF0ZVtfajMgKyAzXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHMwIF4gczEgPj4+IDggXiBzMSA8PCAyNCBeIHMyID4+PiAxNiBeIHMyIDw8IDE2IF4gczMgPj4+IDI0IF4gczMgPDwgODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVtfajNdID0gdCA+Pj4gMjQgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlW19qMyArIDFdID0gdCA+PiAxNiAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbX2ozICsgMl0gPSB0ID4+IDggJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlW19qMyArIDNdID0gdCAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gc3RhdGVbMTNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVsxM10gPSBzdGF0ZVs5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbOV0gPSBzdGF0ZVs1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbNV0gPSBzdGF0ZVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbMV0gPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gc3RhdGVbMTRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gc3RhdGVbMTBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVsxNF0gPSBzdGF0ZVs2XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbMTBdID0gc3RhdGVbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzZdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbMl0gPSB1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gc3RhdGVbMTVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gc3RhdGVbMTFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RhdGVbN107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzE1XSA9IHN0YXRlWzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVsxMV0gPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVs3XSA9IHU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzNdID0gdjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfajQgPSAwOyBfajQgPCAxNjsgKytfajQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlW19qNF0gPSB0aGlzLl9pbnZfc1tzdGF0ZVtfajRdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlW19qNF0gXj0ga2V5W19qNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfZW5jcnlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfZW5jcnlwdChpbnB1dCwga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzID0gdGhpcy5fcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQsIHUsIHY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0KGlucHV0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlW2pdIF49IGtleVtqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9qNSA9IDA7IF9qNSA8IDE2OyArK19qNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlW19qNV0gPSBzW3N0YXRlW19qNV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RhdGVbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVsxXSA9IHN0YXRlWzVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbNV0gPSBzdGF0ZVs5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzldID0gc3RhdGVbMTNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbMTNdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBzdGF0ZVsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBzdGF0ZVs2XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzJdID0gc3RhdGVbMTBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbNl0gPSBzdGF0ZVsxNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVsxMF0gPSB2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbMTRdID0gdTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBzdGF0ZVszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBzdGF0ZVs3XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBzdGF0ZVsxMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVszXSA9IHN0YXRlWzE1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzddID0gdjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzExXSA9IHU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVsxNV0gPSB0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfajYgPSAwOyBfajYgPCAxNjsgX2o2ICs9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgczAgPSBzdGF0ZVtfajYgKyAwXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgczEgPSBzdGF0ZVtfajYgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgczIgPSBzdGF0ZVtfajYgKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgczMgPSBzdGF0ZVtfajYgKyAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gczAgXiBzMSBeIHMyIF4gczM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbX2o2ICsgMF0gXj0gdCBeIHRoaXMuX21peENvbFtzMCBeIHMxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVtfajYgKyAxXSBePSB0IF4gdGhpcy5fbWl4Q29sW3MxIF4gczJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlW19qNiArIDJdIF49IHQgXiB0aGlzLl9taXhDb2xbczIgXiBzM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbX2o2ICsgM10gXj0gdCBeIHRoaXMuX21peENvbFtzMyBeIHMwXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2o3ID0gMCwgayA9IGkgKiAxNjsgX2o3IDwgMTY7ICsrX2o3LCArK2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVtfajddIF49IGtleVtrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9qOCA9IDA7IF9qOCA8IDE2OyArK19qOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbX2o4XSA9IHNbc3RhdGVbX2o4XV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RhdGVbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzFdID0gc3RhdGVbNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzVdID0gc3RhdGVbOV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzldID0gc3RhdGVbMTNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVsxM10gPSB2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RhdGVbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBzdGF0ZVs2XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbMl0gPSBzdGF0ZVsxMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzZdID0gc3RhdGVbMTRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVsxMF0gPSB2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVsxNF0gPSB1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RhdGVbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBzdGF0ZVs3XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHN0YXRlWzExXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbM10gPSBzdGF0ZVsxNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzddID0gdjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbMTFdID0gdTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbMTVdID0gdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfajkgPSAwLCBfazIgPSB0aGlzLl9rZXlTaXplOyBfajkgPCAxNjsgKytfajksICsrX2syKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVtfajldIF49IGtleVtfazJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX2RlY3J5cHRCbG9jazJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2RlY3J5cHRCbG9jazIoZGF0YSwgZmluYWxpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5idWZmZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlclBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdiA9IHRoaXMuaXY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2J1ZmZlckxlbmd0aF0gPSBkYXRhW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytidWZmZXJMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJMZW5ndGggPCAxNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGxhaW4gPSB0aGlzLl9kZWNyeXB0KGJ1ZmZlciwgdGhpcy5fa2V5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW5bal0gXj0gaXZbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2ID0gYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGxhaW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyTGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IGJ1ZmZlckxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdiA9IGl2O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3V0cHV0TGVuZ3RoID0gMTYgKiByZXN1bHQubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5hbGl6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RCbG9jayA9IHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHNMZW4gPSBsYXN0QmxvY2tbMTVdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHNMZW4gPD0gMTYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDE1LCBpaSA9IDE2IC0gcHNMZW47IF9pID49IGlpOyAtLV9pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0QmxvY2tbX2ldICE9PSBwc0xlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNMZW4gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRMZW5ndGggLT0gcHNMZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSA9IGxhc3RCbG9jay5zdWJhcnJheSgwLCAxNiAtIHBzTGVuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdXRwdXQgPSBuZXcgVWludDhBcnJheShvdXRwdXRMZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pMiA9IDAsIF9qMTAgPSAwLCBfaWkgPSByZXN1bHQubGVuZ3RoOyBfaTIgPCBfaWk7ICsrX2kyLCBfajEwICs9IDE2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuc2V0KHJlc3VsdFtfaTJdLCBfajEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJkZWNyeXB0QmxvY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZGVjcnlwdEJsb2NrKGRhdGEsIGZpbmFsaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5idWZmZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlclBvc2l0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdiA9IGl2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGJ1ZmZlckxlbmd0aCA8IDE2ICYmIGkgPCBzb3VyY2VMZW5ndGg7ICsraSwgKytidWZmZXJMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoXSA9IGRhdGFbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJMZW5ndGggPCAxNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gYnVmZmVyTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdiA9IGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLnN1YmFycmF5KDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjcnlwdEJsb2NrID0gdGhpcy5fZGVjcnlwdEJsb2NrMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdEJsb2NrKGRhdGEsIGZpbmFsaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImVuY3J5cHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZW5jcnlwdChkYXRhLCBpdikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyUG9zaXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWl2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdiA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGhdID0gZGF0YVtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrYnVmZmVyTGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyTGVuZ3RoIDwgMTYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2pdIF49IGl2W2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fZW5jcnlwdChidWZmZXIsIHRoaXMuX2tleSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2ID0gY2lwaGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2lwaGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlckxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXYgPSBpdjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG91dHB1dExlbmd0aCA9IDE2ICogcmVzdWx0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG91dHB1dCA9IG5ldyBVaW50OEFycmF5KG91dHB1dExlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kzID0gMCwgX2oxMSA9IDAsIGlpID0gcmVzdWx0Lmxlbmd0aDsgX2kzIDwgaWk7ICsrX2kzLCBfajExICs9IDE2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuc2V0KHJlc3VsdFtfaTNdLCBfajExKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQUVTQmFzZUNpcGhlcjtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEFFUzEyOENpcGhlciA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9BRVNCYXNlQ2lwaGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoQUVTMTI4Q2lwaGVyLCBfQUVTQmFzZUNpcGhlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFFUzEyOENpcGhlcihrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQUVTMTI4Q2lwaGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKEFFUzEyOENpcGhlcikuY2FsbCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2N5Y2xlc09mUmVwZXRpdGlvbiA9IDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9rZXlTaXplID0gMTYwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9yY29uID0gbmV3IFVpbnQ4QXJyYXkoWzB4OGQsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzYsIDB4NmMsIDB4ZDgsIDB4YWIsIDB4NGQsIDB4OWEsIDB4MmYsIDB4NWUsIDB4YmMsIDB4NjMsIDB4YzYsIDB4OTcsIDB4MzUsIDB4NmEsIDB4ZDQsIDB4YjMsIDB4N2QsIDB4ZmEsIDB4ZWYsIDB4YzUsIDB4OTEsIDB4MzksIDB4NzIsIDB4ZTQsIDB4ZDMsIDB4YmQsIDB4NjEsIDB4YzIsIDB4OWYsIDB4MjUsIDB4NGEsIDB4OTQsIDB4MzMsIDB4NjYsIDB4Y2MsIDB4ODMsIDB4MWQsIDB4M2EsIDB4NzQsIDB4ZTgsIDB4Y2IsIDB4OGQsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzYsIDB4NmMsIDB4ZDgsIDB4YWIsIDB4NGQsIDB4OWEsIDB4MmYsIDB4NWUsIDB4YmMsIDB4NjMsIDB4YzYsIDB4OTcsIDB4MzUsIDB4NmEsIDB4ZDQsIDB4YjMsIDB4N2QsIDB4ZmEsIDB4ZWYsIDB4YzUsIDB4OTEsIDB4MzksIDB4NzIsIDB4ZTQsIDB4ZDMsIDB4YmQsIDB4NjEsIDB4YzIsIDB4OWYsIDB4MjUsIDB4NGEsIDB4OTQsIDB4MzMsIDB4NjYsIDB4Y2MsIDB4ODMsIDB4MWQsIDB4M2EsIDB4NzQsIDB4ZTgsIDB4Y2IsIDB4OGQsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzYsIDB4NmMsIDB4ZDgsIDB4YWIsIDB4NGQsIDB4OWEsIDB4MmYsIDB4NWUsIDB4YmMsIDB4NjMsIDB4YzYsIDB4OTcsIDB4MzUsIDB4NmEsIDB4ZDQsIDB4YjMsIDB4N2QsIDB4ZmEsIDB4ZWYsIDB4YzUsIDB4OTEsIDB4MzksIDB4NzIsIDB4ZTQsIDB4ZDMsIDB4YmQsIDB4NjEsIDB4YzIsIDB4OWYsIDB4MjUsIDB4NGEsIDB4OTQsIDB4MzMsIDB4NjYsIDB4Y2MsIDB4ODMsIDB4MWQsIDB4M2EsIDB4NzQsIDB4ZTgsIDB4Y2IsIDB4OGQsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzYsIDB4NmMsIDB4ZDgsIDB4YWIsIDB4NGQsIDB4OWEsIDB4MmYsIDB4NWUsIDB4YmMsIDB4NjMsIDB4YzYsIDB4OTcsIDB4MzUsIDB4NmEsIDB4ZDQsIDB4YjMsIDB4N2QsIDB4ZmEsIDB4ZWYsIDB4YzUsIDB4OTEsIDB4MzksIDB4NzIsIDB4ZTQsIDB4ZDMsIDB4YmQsIDB4NjEsIDB4YzIsIDB4OWYsIDB4MjUsIDB4NGEsIDB4OTQsIDB4MzMsIDB4NjYsIDB4Y2MsIDB4ODMsIDB4MWQsIDB4M2EsIDB4NzQsIDB4ZTgsIDB4Y2IsIDB4OGQsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzYsIDB4NmMsIDB4ZDgsIDB4YWIsIDB4NGQsIDB4OWEsIDB4MmYsIDB4NWUsIDB4YmMsIDB4NjMsIDB4YzYsIDB4OTcsIDB4MzUsIDB4NmEsIDB4ZDQsIDB4YjMsIDB4N2QsIDB4ZmEsIDB4ZWYsIDB4YzUsIDB4OTEsIDB4MzksIDB4NzIsIDB4ZTQsIDB4ZDMsIDB4YmQsIDB4NjEsIDB4YzIsIDB4OWYsIDB4MjUsIDB4NGEsIDB4OTQsIDB4MzMsIDB4NjYsIDB4Y2MsIDB4ODMsIDB4MWQsIDB4M2EsIDB4NzQsIDB4ZTgsIDB4Y2IsIDB4OGRdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fa2V5ID0gX3RoaXMuX2V4cGFuZEtleShrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKEFFUzEyOENpcGhlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX2V4cGFuZEtleVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfZXhwYW5kS2V5KGNpcGhlcktleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IDE3NjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSB0aGlzLl9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmNvbiA9IHRoaXMuX3Jjb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgVWludDhBcnJheShiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNldChjaXBoZXJLZXkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAxNiwgaSA9IDE7IGogPCBiOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0MSA9IHJlc3VsdFtqIC0gM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdDIgPSByZXN1bHRbaiAtIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQzID0gcmVzdWx0W2ogLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0NCA9IHJlc3VsdFtqIC0gNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IHNbdDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDIgPSBzW3QyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQzID0gc1t0M107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0NCA9IHNbdDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEgPSB0MSBeIHJjb25baV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgNDsgKytuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2pdID0gdDEgXj0gcmVzdWx0W2ogLSAxNl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtqXSA9IHQyIF49IHJlc3VsdFtqIC0gMTZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbal0gPSB0MyBePSByZXN1bHRbaiAtIDE2XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2pdID0gdDQgXj0gcmVzdWx0W2ogLSAxNl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBRVMxMjhDaXBoZXI7XG4gICAgICAgICAgICAgICAgICAgIH0oQUVTQmFzZUNpcGhlcik7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkFFUzEyOENpcGhlciA9IEFFUzEyOENpcGhlcjtcblxuICAgICAgICAgICAgICAgIHZhciBBRVMyNTZDaXBoZXIgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQUVTQmFzZUNpcGhlcjIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhBRVMyNTZDaXBoZXIsIF9BRVNCYXNlQ2lwaGVyMik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFFUzI1NkNpcGhlcihrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEFFUzI1NkNpcGhlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoQUVTMjU2Q2lwaGVyKS5jYWxsKHRoaXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuX2N5Y2xlc09mUmVwZXRpdGlvbiA9IDE0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5fa2V5U2l6ZSA9IDIyNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuX2tleSA9IF90aGlzMi5fZXhwYW5kS2V5KGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKEFFUzI1NkNpcGhlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX2V4cGFuZEtleVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfZXhwYW5kS2V5KGNpcGhlcktleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IDI0MDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSB0aGlzLl9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQoY2lwaGVyS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdDEsIHQyLCB0MywgdDQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDMyLCBpID0gMTsgaiA8IGI7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogJSAzMiA9PT0gMTYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IHNbdDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQyID0gc1t0Ml07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDMgPSBzW3QzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0NCA9IHNbdDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChqICUgMzIgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IHJlc3VsdFtqIC0gM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDIgPSByZXN1bHRbaiAtIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQzID0gcmVzdWx0W2ogLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0NCA9IHJlc3VsdFtqIC0gNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEgPSBzW3QxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MiA9IHNbdDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQzID0gc1t0M107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDQgPSBzW3Q0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IHQxIF4gcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgociA8PD0gMSkgPj0gMjU2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAociBeIDB4MWIpICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgNDsgKytuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2pdID0gdDEgXj0gcmVzdWx0W2ogLSAzMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtqXSA9IHQyIF49IHJlc3VsdFtqIC0gMzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbal0gPSB0MyBePSByZXN1bHRbaiAtIDMyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2pdID0gdDQgXj0gcmVzdWx0W2ogLSAzMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBRVMyNTZDaXBoZXI7XG4gICAgICAgICAgICAgICAgICAgIH0oQUVTQmFzZUNpcGhlcik7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkFFUzI1NkNpcGhlciA9IEFFUzI1NkNpcGhlcjtcblxuICAgICAgICAgICAgICAgIHZhciBQREYxNyA9IGZ1bmN0aW9uIFBERjE3Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY29tcGFyZUJ5dGVBcnJheXMoYXJyYXkxLCBhcnJheTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJheTEubGVuZ3RoICE9PSBhcnJheTIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5MS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJheTFbaV0gIT09IGFycmF5MltpXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBERjE3KCkge31cblxuICAgICAgICAgICAgICAgICAgICBQREYxNy5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja093bmVyUGFzc3dvcmQ6IGZ1bmN0aW9uIFBERjE3X2NoZWNrT3duZXJQYXNzd29yZChwYXNzd29yZCwgb3duZXJWYWxpZGF0aW9uU2FsdCwgdXNlckJ5dGVzLCBvd25lclBhc3N3b3JkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc2hEYXRhID0gbmV3IFVpbnQ4QXJyYXkocGFzc3dvcmQubGVuZ3RoICsgNTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhLnNldChwYXNzd29yZCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaERhdGEuc2V0KG93bmVyVmFsaWRhdGlvblNhbHQsIHBhc3N3b3JkLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaERhdGEuc2V0KHVzZXJCeXRlcywgcGFzc3dvcmQubGVuZ3RoICsgb3duZXJWYWxpZGF0aW9uU2FsdC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBjYWxjdWxhdGVTSEEyNTYoaGFzaERhdGEsIDAsIGhhc2hEYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCeXRlQXJyYXlzKHJlc3VsdCwgb3duZXJQYXNzd29yZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tVc2VyUGFzc3dvcmQ6IGZ1bmN0aW9uIFBERjE3X2NoZWNrVXNlclBhc3N3b3JkKHBhc3N3b3JkLCB1c2VyVmFsaWRhdGlvblNhbHQsIHVzZXJQYXNzd29yZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNoRGF0YSA9IG5ldyBVaW50OEFycmF5KHBhc3N3b3JkLmxlbmd0aCArIDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhLnNldChwYXNzd29yZCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaERhdGEuc2V0KHVzZXJWYWxpZGF0aW9uU2FsdCwgcGFzc3dvcmQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gY2FsY3VsYXRlU0hBMjU2KGhhc2hEYXRhLCAwLCBoYXNoRGF0YS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wYXJlQnl0ZUFycmF5cyhyZXN1bHQsIHVzZXJQYXNzd29yZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0T3duZXJLZXk6IGZ1bmN0aW9uIFBERjE3X2dldE93bmVyS2V5KHBhc3N3b3JkLCBvd25lcktleVNhbHQsIHVzZXJCeXRlcywgb3duZXJFbmNyeXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc2hEYXRhID0gbmV3IFVpbnQ4QXJyYXkocGFzc3dvcmQubGVuZ3RoICsgNTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhLnNldChwYXNzd29yZCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaERhdGEuc2V0KG93bmVyS2V5U2FsdCwgcGFzc3dvcmQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoRGF0YS5zZXQodXNlckJ5dGVzLCBwYXNzd29yZC5sZW5ndGggKyBvd25lcktleVNhbHQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gY2FsY3VsYXRlU0hBMjU2KGhhc2hEYXRhLCAwLCBoYXNoRGF0YS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaXBoZXIgPSBuZXcgQUVTMjU2Q2lwaGVyKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNpcGhlci5kZWNyeXB0QmxvY2sob3duZXJFbmNyeXB0aW9uLCBmYWxzZSwgbmV3IFVpbnQ4QXJyYXkoMTYpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRVc2VyS2V5OiBmdW5jdGlvbiBQREYxN19nZXRVc2VyS2V5KHBhc3N3b3JkLCB1c2VyS2V5U2FsdCwgdXNlckVuY3J5cHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzaERhdGEgPSBuZXcgVWludDhBcnJheShwYXNzd29yZC5sZW5ndGggKyA4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoRGF0YS5zZXQocGFzc3dvcmQsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhLnNldCh1c2VyS2V5U2FsdCwgcGFzc3dvcmQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gY2FsY3VsYXRlU0hBMjU2KGhhc2hEYXRhLCAwLCBoYXNoRGF0YS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaXBoZXIgPSBuZXcgQUVTMjU2Q2lwaGVyKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNpcGhlci5kZWNyeXB0QmxvY2sodXNlckVuY3J5cHRpb24sIGZhbHNlLCBuZXcgVWludDhBcnJheSgxNikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUERGMTc7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QREYxNyA9IFBERjE3O1xuXG4gICAgICAgICAgICAgICAgdmFyIFBERjIwID0gZnVuY3Rpb24gUERGMjBDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb25jYXRBcnJheXMoYXJyYXkxLCBhcnJheTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkxLmxlbmd0aCArIGFycmF5Mi5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdC5zZXQoYXJyYXkxLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHQuc2V0KGFycmF5MiwgYXJyYXkxLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZVBERjIwSGFzaChwYXNzd29yZCwgaW5wdXQsIHVzZXJCeXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGsgPSBjYWxjdWxhdGVTSEEyNTYoaW5wdXQsIDAsIGlucHV0Lmxlbmd0aCkuc3ViYXJyYXkoMCwgMzIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSBbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgNjQgfHwgZVtlLmxlbmd0aCAtIDFdID4gaSAtIDMyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFycmF5TGVuZ3RoID0gcGFzc3dvcmQubGVuZ3RoICsgay5sZW5ndGggKyB1c2VyQnl0ZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrMSA9IG5ldyBVaW50OEFycmF5KGFycmF5TGVuZ3RoICogNjQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IGNvbmNhdEFycmF5cyhwYXNzd29yZCwgayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkgPSBjb25jYXRBcnJheXMoYXJyYXksIHVzZXJCeXRlcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgcG9zID0gMDsgaiA8IDY0OyBqKyssIHBvcyArPSBhcnJheUxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrMS5zZXQoYXJyYXksIHBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNpcGhlciA9IG5ldyBBRVMxMjhDaXBoZXIoay5zdWJhcnJheSgwLCAxNikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBjaXBoZXIuZW5jcnlwdChrMSwgay5zdWJhcnJheSgxNiwgMzIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVtYWluZGVyID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHogPSAwOyB6IDwgMTY7IHorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5kZXIgKj0gMjU2ICUgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluZGVyICU9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmRlciArPSAoZVt6XSA+Pj4gMCkgJSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5kZXIgJT0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVtYWluZGVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBjYWxjdWxhdGVTSEEyNTYoZSwgMCwgZS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVtYWluZGVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBjYWxjdWxhdGVTSEEzODQoZSwgMCwgZS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVtYWluZGVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBjYWxjdWxhdGVTSEE1MTIoZSwgMCwgZS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGsuc3ViYXJyYXkoMCwgMzIpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUERGMjAoKSB7fVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBhcmVCeXRlQXJyYXlzKGFycmF5MSwgYXJyYXkyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyYXkxLmxlbmd0aCAhPT0gYXJyYXkyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheTEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyYXkxW2ldICE9PSBhcnJheTJbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBQREYyMC5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNoOiBmdW5jdGlvbiBQREYyMF9oYXNoKHBhc3N3b3JkLCBjb25jYXRCeXRlcywgdXNlckJ5dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZVBERjIwSGFzaChwYXNzd29yZCwgY29uY2F0Qnl0ZXMsIHVzZXJCeXRlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tPd25lclBhc3N3b3JkOiBmdW5jdGlvbiBQREYyMF9jaGVja093bmVyUGFzc3dvcmQocGFzc3dvcmQsIG93bmVyVmFsaWRhdGlvblNhbHQsIHVzZXJCeXRlcywgb3duZXJQYXNzd29yZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNoRGF0YSA9IG5ldyBVaW50OEFycmF5KHBhc3N3b3JkLmxlbmd0aCArIDU2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoRGF0YS5zZXQocGFzc3dvcmQsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhLnNldChvd25lclZhbGlkYXRpb25TYWx0LCBwYXNzd29yZC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhLnNldCh1c2VyQnl0ZXMsIHBhc3N3b3JkLmxlbmd0aCArIG93bmVyVmFsaWRhdGlvblNhbHQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gY2FsY3VsYXRlUERGMjBIYXNoKHBhc3N3b3JkLCBoYXNoRGF0YSwgdXNlckJ5dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZUJ5dGVBcnJheXMocmVzdWx0LCBvd25lclBhc3N3b3JkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja1VzZXJQYXNzd29yZDogZnVuY3Rpb24gUERGMjBfY2hlY2tVc2VyUGFzc3dvcmQocGFzc3dvcmQsIHVzZXJWYWxpZGF0aW9uU2FsdCwgdXNlclBhc3N3b3JkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc2hEYXRhID0gbmV3IFVpbnQ4QXJyYXkocGFzc3dvcmQubGVuZ3RoICsgOCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaERhdGEuc2V0KHBhc3N3b3JkLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoRGF0YS5zZXQodXNlclZhbGlkYXRpb25TYWx0LCBwYXNzd29yZC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBjYWxjdWxhdGVQREYyMEhhc2gocGFzc3dvcmQsIGhhc2hEYXRhLCBbXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCeXRlQXJyYXlzKHJlc3VsdCwgdXNlclBhc3N3b3JkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRPd25lcktleTogZnVuY3Rpb24gUERGMjBfZ2V0T3duZXJLZXkocGFzc3dvcmQsIG93bmVyS2V5U2FsdCwgdXNlckJ5dGVzLCBvd25lckVuY3J5cHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzaERhdGEgPSBuZXcgVWludDhBcnJheShwYXNzd29yZC5sZW5ndGggKyA1Nik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaERhdGEuc2V0KHBhc3N3b3JkLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoRGF0YS5zZXQob3duZXJLZXlTYWx0LCBwYXNzd29yZC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhLnNldCh1c2VyQnl0ZXMsIHBhc3N3b3JkLmxlbmd0aCArIG93bmVyS2V5U2FsdC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBjYWxjdWxhdGVQREYyMEhhc2gocGFzc3dvcmQsIGhhc2hEYXRhLCB1c2VyQnl0ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaXBoZXIgPSBuZXcgQUVTMjU2Q2lwaGVyKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNpcGhlci5kZWNyeXB0QmxvY2sob3duZXJFbmNyeXB0aW9uLCBmYWxzZSwgbmV3IFVpbnQ4QXJyYXkoMTYpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRVc2VyS2V5OiBmdW5jdGlvbiBQREYyMF9nZXRVc2VyS2V5KHBhc3N3b3JkLCB1c2VyS2V5U2FsdCwgdXNlckVuY3J5cHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzaERhdGEgPSBuZXcgVWludDhBcnJheShwYXNzd29yZC5sZW5ndGggKyA4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoRGF0YS5zZXQocGFzc3dvcmQsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhLnNldCh1c2VyS2V5U2FsdCwgcGFzc3dvcmQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gY2FsY3VsYXRlUERGMjBIYXNoKHBhc3N3b3JkLCBoYXNoRGF0YSwgW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaXBoZXIgPSBuZXcgQUVTMjU2Q2lwaGVyKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNpcGhlci5kZWNyeXB0QmxvY2sodXNlckVuY3J5cHRpb24sIGZhbHNlLCBuZXcgVWludDhBcnJheSgxNikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUERGMjA7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QREYyMCA9IFBERjIwO1xuXG4gICAgICAgICAgICAgICAgdmFyIENpcGhlclRyYW5zZm9ybSA9IGZ1bmN0aW9uIENpcGhlclRyYW5zZm9ybUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENpcGhlclRyYW5zZm9ybShzdHJpbmdDaXBoZXJDb25zdHJ1Y3Rvciwgc3RyZWFtQ2lwaGVyQ29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuU3RyaW5nQ2lwaGVyQ29uc3RydWN0b3IgPSBzdHJpbmdDaXBoZXJDb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuU3RyZWFtQ2lwaGVyQ29uc3RydWN0b3IgPSBzdHJlYW1DaXBoZXJDb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENpcGhlclRyYW5zZm9ybS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVTdHJlYW06IGZ1bmN0aW9uIENpcGhlclRyYW5zZm9ybV9jcmVhdGVTdHJlYW0oc3RyZWFtLCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2lwaGVyID0gbmV3IHRoaXMuU3RyZWFtQ2lwaGVyQ29uc3RydWN0b3IoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9zdHJlYW0uRGVjcnlwdFN0cmVhbShzdHJlYW0sIGxlbmd0aCwgZnVuY3Rpb24gY2lwaGVyVHJhbnNmb3JtRGVjcnlwdFN0cmVhbShkYXRhLCBmaW5hbGl6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2lwaGVyLmRlY3J5cHRCbG9jayhkYXRhLCBmaW5hbGl6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVjcnlwdFN0cmluZzogZnVuY3Rpb24gQ2lwaGVyVHJhbnNmb3JtX2RlY3J5cHRTdHJpbmcocykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaXBoZXIgPSBuZXcgdGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3RvcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBjaXBoZXIuZGVjcnlwdEJsb2NrKGRhdGEsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBDaXBoZXJUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIENpcGhlclRyYW5zZm9ybUZhY3RvcnkgPSBmdW5jdGlvbiBDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRQYXNzd29yZEJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoWzB4MjgsIDB4QkYsIDB4NEUsIDB4NUUsIDB4NEUsIDB4NzUsIDB4OEEsIDB4NDEsIDB4NjQsIDB4MDAsIDB4NEUsIDB4NTYsIDB4RkYsIDB4RkEsIDB4MDEsIDB4MDgsIDB4MkUsIDB4MkUsIDB4MDAsIDB4QjYsIDB4RDAsIDB4NjgsIDB4M0UsIDB4ODAsIDB4MkYsIDB4MEMsIDB4QTksIDB4RkUsIDB4NjQsIDB4NTMsIDB4NjksIDB4N0FdKTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVFbmNyeXB0aW9uS2V5MjAocmV2aXNpb24sIHBhc3N3b3JkLCBvd25lclBhc3N3b3JkLCBvd25lclZhbGlkYXRpb25TYWx0LCBvd25lcktleVNhbHQsIHVCeXRlcywgdXNlclBhc3N3b3JkLCB1c2VyVmFsaWRhdGlvblNhbHQsIHVzZXJLZXlTYWx0LCBvd25lckVuY3J5cHRpb24sIHVzZXJFbmNyeXB0aW9uLCBwZXJtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhc3N3b3JkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhc3N3b3JkTGVuZ3RoID0gTWF0aC5taW4oMTI3LCBwYXNzd29yZC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkID0gcGFzc3dvcmQuc3ViYXJyYXkoMCwgcGFzc3dvcmRMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGRmQWxnb3JpdGhtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV2aXNpb24gPT09IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZBbGdvcml0aG0gPSBuZXcgUERGMjAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmQWxnb3JpdGhtID0gbmV3IFBERjE3KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZGZBbGdvcml0aG0uY2hlY2tVc2VyUGFzc3dvcmQocGFzc3dvcmQsIHVzZXJWYWxpZGF0aW9uU2FsdCwgdXNlclBhc3N3b3JkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZBbGdvcml0aG0uZ2V0VXNlcktleShwYXNzd29yZCwgdXNlcktleVNhbHQsIHVzZXJFbmNyeXB0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzc3dvcmQubGVuZ3RoICYmIHBkZkFsZ29yaXRobS5jaGVja093bmVyUGFzc3dvcmQocGFzc3dvcmQsIG93bmVyVmFsaWRhdGlvblNhbHQsIHVCeXRlcywgb3duZXJQYXNzd29yZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmQWxnb3JpdGhtLmdldE93bmVyS2V5KHBhc3N3b3JkLCBvd25lcktleVNhbHQsIHVCeXRlcywgb3duZXJFbmNyeXB0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwcmVwYXJlS2V5RGF0YShmaWxlSWQsIHBhc3N3b3JkLCBvd25lclBhc3N3b3JkLCB1c2VyUGFzc3dvcmQsIGZsYWdzLCByZXZpc2lvbiwga2V5TGVuZ3RoLCBlbmNyeXB0TWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNoRGF0YVNpemUgPSA0MCArIG93bmVyUGFzc3dvcmQubGVuZ3RoICsgZmlsZUlkLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNoRGF0YSA9IG5ldyBVaW50OEFycmF5KGhhc2hEYXRhU2l6ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFzc3dvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gTWF0aC5taW4oMzIsIHBhc3N3b3JkLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IG47ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoRGF0YVtpXSA9IHBhc3N3b3JkW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaiA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgMzIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoRGF0YVtpKytdID0gZGVmYXVsdFBhc3N3b3JkQnl0ZXNbaisrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMCwgbiA9IG93bmVyUGFzc3dvcmQubGVuZ3RoOyBqIDwgbjsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaERhdGFbaSsrXSA9IG93bmVyUGFzc3dvcmRbal07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhW2krK10gPSBmbGFncyAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNoRGF0YVtpKytdID0gZmxhZ3MgPj4gOCAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNoRGF0YVtpKytdID0gZmxhZ3MgPj4gMTYgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzaERhdGFbaSsrXSA9IGZsYWdzID4+PiAyNCAmIDB4RkY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDAsIG4gPSBmaWxlSWQubGVuZ3RoOyBqIDwgbjsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaERhdGFbaSsrXSA9IGZpbGVJZFtqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldmlzaW9uID49IDQgJiYgIWVuY3J5cHRNZXRhZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhW2krK10gPSAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhW2krK10gPSAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhW2krK10gPSAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhW2krK10gPSAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzaCA9IGNhbGN1bGF0ZU1ENShoYXNoRGF0YSwgMCwgaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5TGVuZ3RoSW5CeXRlcyA9IGtleUxlbmd0aCA+PiAzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV2aXNpb24gPj0gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCA1MDsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2ggPSBjYWxjdWxhdGVNRDUoaGFzaCwgMCwga2V5TGVuZ3RoSW5CeXRlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jcnlwdGlvbktleSA9IGhhc2guc3ViYXJyYXkoMCwga2V5TGVuZ3RoSW5CeXRlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2lwaGVyLCBjaGVja0RhdGE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXZpc2lvbiA+PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDMyOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaERhdGFbaV0gPSBkZWZhdWx0UGFzc3dvcmRCeXRlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwLCBuID0gZmlsZUlkLmxlbmd0aDsgaiA8IG47ICsraikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoRGF0YVtpKytdID0gZmlsZUlkW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlciA9IG5ldyBBUkNGb3VyQ2lwaGVyKGVuY3J5cHRpb25LZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRGF0YSA9IGNpcGhlci5lbmNyeXB0QmxvY2soY2FsY3VsYXRlTUQ1KGhhc2hEYXRhLCAwLCBpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGVuY3J5cHRpb25LZXkubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXJpdmVkS2V5ID0gbmV3IFVpbnQ4QXJyYXkobiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAxOyBqIDw9IDE5OyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IG47ICsraykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVyaXZlZEtleVtrXSA9IGVuY3J5cHRpb25LZXlba10gXiBqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVyID0gbmV3IEFSQ0ZvdXJDaXBoZXIoZGVyaXZlZEtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRGF0YSA9IGNpcGhlci5lbmNyeXB0QmxvY2soY2hlY2tEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwLCBuID0gY2hlY2tEYXRhLmxlbmd0aDsgaiA8IG47ICsraikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlclBhc3N3b3JkW2pdICE9PSBjaGVja0RhdGFbal0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXIgPSBuZXcgQVJDRm91ckNpcGhlcihlbmNyeXB0aW9uS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0RhdGEgPSBjaXBoZXIuZW5jcnlwdEJsb2NrKGRlZmF1bHRQYXNzd29yZEJ5dGVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDAsIG4gPSBjaGVja0RhdGEubGVuZ3RoOyBqIDwgbjsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUGFzc3dvcmRbal0gIT09IGNoZWNrRGF0YVtqXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmNyeXB0aW9uS2V5O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlVXNlclBhc3N3b3JkKHBhc3N3b3JkLCBvd25lclBhc3N3b3JkLCByZXZpc2lvbiwga2V5TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzaERhdGEgPSBuZXcgVWludDhBcnJheSgzMiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuO1xuICAgICAgICAgICAgICAgICAgICAgICAgbiA9IE1hdGgubWluKDMyLCBwYXNzd29yZC5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IG47ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhW2ldID0gcGFzc3dvcmRbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGogPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IDMyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaERhdGFbaSsrXSA9IGRlZmF1bHRQYXNzd29yZEJ5dGVzW2orK107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNoID0gY2FsY3VsYXRlTUQ1KGhhc2hEYXRhLCAwLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXlMZW5ndGhJbkJ5dGVzID0ga2V5TGVuZ3RoID4+IDM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXZpc2lvbiA+PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IDUwOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCA9IGNhbGN1bGF0ZU1ENShoYXNoLCAwLCBoYXNoLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2lwaGVyLCB1c2VyUGFzc3dvcmQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXZpc2lvbiA+PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlclBhc3N3b3JkID0gb3duZXJQYXNzd29yZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVyaXZlZEtleSA9IG5ldyBVaW50OEFycmF5KGtleUxlbmd0aEluQnl0ZXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMTk7IGogPj0gMDsgai0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBrZXlMZW5ndGhJbkJ5dGVzOyArK2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcml2ZWRLZXlba10gPSBoYXNoW2tdIF4gajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlciA9IG5ldyBBUkNGb3VyQ2lwaGVyKGRlcml2ZWRLZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyUGFzc3dvcmQgPSBjaXBoZXIuZW5jcnlwdEJsb2NrKHVzZXJQYXNzd29yZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXIgPSBuZXcgQVJDRm91ckNpcGhlcihoYXNoLnN1YmFycmF5KDAsIGtleUxlbmd0aEluQnl0ZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyUGFzc3dvcmQgPSBjaXBoZXIuZW5jcnlwdEJsb2NrKG93bmVyUGFzc3dvcmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXNlclBhc3N3b3JkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkZW50aXR5TmFtZSA9IF9wcmltaXRpdmVzLk5hbWUuZ2V0KCdJZGVudGl0eScpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENpcGhlclRyYW5zZm9ybUZhY3RvcnkoZGljdCwgZmlsZUlkLCBwYXNzd29yZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbHRlciA9IGRpY3QuZ2V0KCdGaWx0ZXInKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShmaWx0ZXIsICdTdGFuZGFyZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCd1bmtub3duIGVuY3J5cHRpb24gbWV0aG9kJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGljdCA9IGRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWxnb3JpdGhtID0gZGljdC5nZXQoJ1YnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGFsZ29yaXRobSkgfHwgYWxnb3JpdGhtICE9PSAxICYmIGFsZ29yaXRobSAhPT0gMiAmJiBhbGdvcml0aG0gIT09IDQgJiYgYWxnb3JpdGhtICE9PSA1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCd1bnN1cHBvcnRlZCBlbmNyeXB0aW9uIGFsZ29yaXRobScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXlMZW5ndGggPSBkaWN0LmdldCgnTGVuZ3RoJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgha2V5TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsZ29yaXRobSA8PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUxlbmd0aCA9IDQwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZkRpY3QgPSBkaWN0LmdldCgnQ0YnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbUNyeXB0b05hbWUgPSBkaWN0LmdldCgnU3RtRicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShjZkRpY3QpICYmICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHN0cmVhbUNyeXB0b05hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZkRpY3Quc3VwcHJlc3NFbmNyeXB0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyRGljdCA9IGNmRGljdC5nZXQoc3RyZWFtQ3J5cHRvTmFtZS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUxlbmd0aCA9IGhhbmRsZXJEaWN0ICYmIGhhbmRsZXJEaWN0LmdldCgnTGVuZ3RoJykgfHwgMTI4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5TGVuZ3RoIDwgNDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlMZW5ndGggPDw9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihrZXlMZW5ndGgpIHx8IGtleUxlbmd0aCA8IDQwIHx8IGtleUxlbmd0aCAlIDggIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ2ludmFsaWQga2V5IGxlbmd0aCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3duZXJQYXNzd29yZCA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkaWN0LmdldCgnTycpKS5zdWJhcnJheSgwLCAzMik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXNlclBhc3N3b3JkID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGRpY3QuZ2V0KCdVJykpLnN1YmFycmF5KDAsIDMyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbGFncyA9IGRpY3QuZ2V0KCdQJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV2aXNpb24gPSBkaWN0LmdldCgnUicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY3J5cHRNZXRhZGF0YSA9IChhbGdvcml0aG0gPT09IDQgfHwgYWxnb3JpdGhtID09PSA1KSAmJiBkaWN0LmdldCgnRW5jcnlwdE1ldGFkYXRhJykgIT09IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmNyeXB0TWV0YWRhdGEgPSBlbmNyeXB0TWV0YWRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZUlkQnl0ZXMgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZmlsZUlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXNzd29yZEJ5dGVzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFzc3dvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV2aXNpb24gPT09IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkID0gKDAsIF91dGlsLnV0ZjhTdHJpbmdUb1N0cmluZykocGFzc3dvcmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5OiAnICsgJ1VuYWJsZSB0byBjb252ZXJ0IFVURjggZW5jb2RlZCBwYXNzd29yZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkQnl0ZXMgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykocGFzc3dvcmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jcnlwdGlvbktleTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsZ29yaXRobSAhPT0gNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY3J5cHRpb25LZXkgPSBwcmVwYXJlS2V5RGF0YShmaWxlSWRCeXRlcywgcGFzc3dvcmRCeXRlcywgb3duZXJQYXNzd29yZCwgdXNlclBhc3N3b3JkLCBmbGFncywgcmV2aXNpb24sIGtleUxlbmd0aCwgZW5jcnlwdE1ldGFkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG93bmVyVmFsaWRhdGlvblNhbHQgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZGljdC5nZXQoJ08nKSkuc3ViYXJyYXkoMzIsIDQwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3duZXJLZXlTYWx0ID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGRpY3QuZ2V0KCdPJykpLnN1YmFycmF5KDQwLCA0OCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVCeXRlcyA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkaWN0LmdldCgnVScpKS5zdWJhcnJheSgwLCA0OCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXJWYWxpZGF0aW9uU2FsdCA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkaWN0LmdldCgnVScpKS5zdWJhcnJheSgzMiwgNDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1c2VyS2V5U2FsdCA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkaWN0LmdldCgnVScpKS5zdWJhcnJheSg0MCwgNDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvd25lckVuY3J5cHRpb24gPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZGljdC5nZXQoJ09FJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1c2VyRW5jcnlwdGlvbiA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkaWN0LmdldCgnVUUnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBlcm1zID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGRpY3QuZ2V0KCdQZXJtcycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNyeXB0aW9uS2V5ID0gY3JlYXRlRW5jcnlwdGlvbktleTIwKHJldmlzaW9uLCBwYXNzd29yZEJ5dGVzLCBvd25lclBhc3N3b3JkLCBvd25lclZhbGlkYXRpb25TYWx0LCBvd25lcktleVNhbHQsIHVCeXRlcywgdXNlclBhc3N3b3JkLCB1c2VyVmFsaWRhdGlvblNhbHQsIHVzZXJLZXlTYWx0LCBvd25lckVuY3J5cHRpb24sIHVzZXJFbmNyeXB0aW9uLCBwZXJtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZW5jcnlwdGlvbktleSAmJiAhcGFzc3dvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuUGFzc3dvcmRFeGNlcHRpb24oJ05vIHBhc3N3b3JkIGdpdmVuJywgX3V0aWwuUGFzc3dvcmRSZXNwb25zZXMuTkVFRF9QQVNTV09SRCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFlbmNyeXB0aW9uS2V5ICYmIHBhc3N3b3JkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kZWRQYXNzd29yZCA9IGRlY29kZVVzZXJQYXNzd29yZChwYXNzd29yZEJ5dGVzLCBvd25lclBhc3N3b3JkLCByZXZpc2lvbiwga2V5TGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNyeXB0aW9uS2V5ID0gcHJlcGFyZUtleURhdGEoZmlsZUlkQnl0ZXMsIGRlY29kZWRQYXNzd29yZCwgb3duZXJQYXNzd29yZCwgdXNlclBhc3N3b3JkLCBmbGFncywgcmV2aXNpb24sIGtleUxlbmd0aCwgZW5jcnlwdE1ldGFkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbmNyeXB0aW9uS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKCdJbmNvcnJlY3QgUGFzc3dvcmQnLCBfdXRpbC5QYXNzd29yZFJlc3BvbnNlcy5JTkNPUlJFQ1RfUEFTU1dPUkQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuY3J5cHRpb25LZXkgPSBlbmNyeXB0aW9uS2V5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxnb3JpdGhtID49IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2YgPSBkaWN0LmdldCgnQ0YnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShjZikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Yuc3VwcHJlc3NFbmNyeXB0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNmID0gY2Y7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG1mID0gZGljdC5nZXQoJ1N0bUYnKSB8fCBpZGVudGl0eU5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJmID0gZGljdC5nZXQoJ1N0ckYnKSB8fCBpZGVudGl0eU5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lZmYgPSBkaWN0LmdldCgnRUZGJykgfHwgdGhpcy5zdG1mO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYnVpbGRPYmplY3RLZXkobnVtLCBnZW4sIGVuY3J5cHRpb25LZXksIGlzQWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbmV3IFVpbnQ4QXJyYXkoZW5jcnlwdGlvbktleS5sZW5ndGggKyA5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIG4gPSBlbmNyeXB0aW9uS2V5Lmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleVtpXSA9IGVuY3J5cHRpb25LZXlbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGtleVtpKytdID0gbnVtICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleVtpKytdID0gbnVtID4+IDggJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5W2krK10gPSBudW0gPj4gMTYgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5W2krK10gPSBnZW4gJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5W2krK10gPSBnZW4gPj4gOCAmIDB4RkY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Flcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleVtpKytdID0gMHg3MztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlbaSsrXSA9IDB4NDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5W2krK10gPSAweDZDO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleVtpKytdID0gMHg1NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc2ggPSBjYWxjdWxhdGVNRDUoa2V5LCAwLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNoLnN1YmFycmF5KDAsIE1hdGgubWluKGVuY3J5cHRpb25LZXkubGVuZ3RoICsgNSwgMTYpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJ1aWxkQ2lwaGVyQ29uc3RydWN0b3IoY2YsIG5hbWUsIG51bSwgZ2VuLCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0ludmFsaWQgY3J5cHQgZmlsdGVyIG5hbWUuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjcnlwdEZpbHRlciA9IGNmLmdldChuYW1lLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNmbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNyeXB0RmlsdGVyICE9PSBudWxsICYmIGNyeXB0RmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZm0gPSBjcnlwdEZpbHRlci5nZXQoJ0NGTScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNmbSB8fCBjZm0ubmFtZSA9PT0gJ05vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNpcGhlclRyYW5zZm9ybUZhY3RvcnlCdWlsZENpcGhlckNvbnN0cnVjdG9yTm9uZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOdWxsQ2lwaGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNmbS5uYW1lID09PSAnVjInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNpcGhlclRyYW5zZm9ybUZhY3RvcnlCdWlsZENpcGhlckNvbnN0cnVjdG9yVjIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQVJDRm91ckNpcGhlcihidWlsZE9iamVjdEtleShudW0sIGdlbiwga2V5LCBmYWxzZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZm0ubmFtZSA9PT0gJ0FFU1YyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBjaXBoZXJUcmFuc2Zvcm1GYWN0b3J5QnVpbGRDaXBoZXJDb25zdHJ1Y3RvckFFU1YyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFFUzEyOENpcGhlcihidWlsZE9iamVjdEtleShudW0sIGdlbiwga2V5LCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNmbS5uYW1lID09PSAnQUVTVjMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNpcGhlclRyYW5zZm9ybUZhY3RvcnlCdWlsZENpcGhlckNvbnN0cnVjdG9yQUVTVjMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQUVTMjU2Q2lwaGVyKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdVbmtub3duIGNyeXB0byBtZXRob2QnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENpcGhlclRyYW5zZm9ybUZhY3RvcnkucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ2lwaGVyVHJhbnNmb3JtOiBmdW5jdGlvbiBDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5X2NyZWF0ZUNpcGhlclRyYW5zZm9ybShudW0sIGdlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFsZ29yaXRobSA9PT0gNCB8fCB0aGlzLmFsZ29yaXRobSA9PT0gNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENpcGhlclRyYW5zZm9ybShidWlsZENpcGhlckNvbnN0cnVjdG9yKHRoaXMuY2YsIHRoaXMuc3RtZiwgbnVtLCBnZW4sIHRoaXMuZW5jcnlwdGlvbktleSksIGJ1aWxkQ2lwaGVyQ29uc3RydWN0b3IodGhpcy5jZiwgdGhpcy5zdHJmLCBudW0sIGdlbiwgdGhpcy5lbmNyeXB0aW9uS2V5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IGJ1aWxkT2JqZWN0S2V5KG51bSwgZ2VuLCB0aGlzLmVuY3J5cHRpb25LZXksIGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaXBoZXJDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIGJ1aWxkQ2lwaGVyQ2lwaGVyQ29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQVJDRm91ckNpcGhlcihrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENpcGhlclRyYW5zZm9ybShjaXBoZXJDb25zdHJ1Y3RvciwgY2lwaGVyQ29uc3RydWN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkNpcGhlclRyYW5zZm9ybUZhY3RvcnkgPSBDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNjggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkNvbG9yU3BhY2UgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9wcmltaXRpdmVzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTUpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc2l6ZVJnYkltYWdlKHNyYywgZGVzdCwgdzEsIGgxLCB3MiwgaDIsIGFscGhhMDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIENPTVBPTkVOVFMgPSAzO1xuICAgICAgICAgICAgICAgICAgICBhbHBoYTAxID0gYWxwaGEwMSAhPT0gMSA/IDAgOiBhbHBoYTAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgeFJhdGlvID0gdzEgLyB3MjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHlSYXRpbyA9IGgxIC8gaDI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdJbmRleCA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBvbGRJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHhTY2FsZWQgPSBuZXcgVWludDE2QXJyYXkodzIpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdzFTY2FubGluZSA9IHcxICogQ09NUE9ORU5UUztcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHcyOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhTY2FsZWRbaV0gPSBNYXRoLmZsb29yKGkgKiB4UmF0aW8pICogQ09NUE9ORU5UUztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBoMjsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB5ID0gTWF0aC5mbG9vcihfaSAqIHlSYXRpbykgKiB3MVNjYW5saW5lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHcyOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRJbmRleCA9IHB5ICsgeFNjYWxlZFtqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W25ld0luZGV4KytdID0gc3JjW29sZEluZGV4KytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbbmV3SW5kZXgrK10gPSBzcmNbb2xkSW5kZXgrK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtuZXdJbmRleCsrXSA9IHNyY1tvbGRJbmRleCsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbmRleCArPSBhbHBoYTAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIENvbG9yU3BhY2UgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENvbG9yU3BhY2UobmFtZSwgbnVtQ29tcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29sb3JTcGFjZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gQ29sb3JTcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKCdDYW5ub3QgaW5pdGlhbGl6ZSBDb2xvclNwYWNlLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1Db21wcyA9IG51bUNvbXBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoQ29sb3JTcGFjZSwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UmdiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJnYihzcmMsIHNyY09mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmdiID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIHJnYiwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZ2I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRSZ2JJdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0UmdiSXRlbScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UmdiQnVmZmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJnYkJ1ZmZlcihzcmMsIHNyY09mZnNldCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIGJpdHMsIGFscGhhMDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0UmdiQnVmZmVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRPdXRwdXRMZW5ndGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBhbHBoYTAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ1Nob3VsZCBub3QgY2FsbCBDb2xvclNwYWNlLmdldE91dHB1dExlbmd0aCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXNQYXNzdGhyb3VnaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc1Bhc3N0aHJvdWdoKGJpdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXNEZWZhdWx0RGVjb2RlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzRGVmYXVsdERlY29kZShkZWNvZGVNYXAsIGJwYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29sb3JTcGFjZS5pc0RlZmF1bHREZWNvZGUoZGVjb2RlTWFwLCB0aGlzLm51bUNvbXBzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImZpbGxSZ2JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZmlsbFJnYihkZXN0LCBvcmlnaW5hbFdpZHRoLCBvcmlnaW5hbEhlaWdodCwgd2lkdGgsIGhlaWdodCwgYWN0dWFsSGVpZ2h0LCBicGMsIGNvbXBzLCBhbHBoYTAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IG9yaWdpbmFsV2lkdGggKiBvcmlnaW5hbEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJnYkJ1ZiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1Db21wb25lbnRDb2xvcnMgPSAxIDw8IGJwYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5lZWRzUmVzaXppbmcgPSBvcmlnaW5hbEhlaWdodCAhPT0gaGVpZ2h0IHx8IG9yaWdpbmFsV2lkdGggIT09IHdpZHRoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUGFzc3Rocm91Z2goYnBjKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmdiQnVmID0gY29tcHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5udW1Db21wcyA9PT0gMSAmJiBjb3VudCA+IG51bUNvbXBvbmVudENvbG9ycyAmJiB0aGlzLm5hbWUgIT09ICdEZXZpY2VHcmF5JyAmJiB0aGlzLm5hbWUgIT09ICdEZXZpY2VSR0InKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWxsQ29sb3JzID0gYnBjIDw9IDggPyBuZXcgVWludDhBcnJheShudW1Db21wb25lbnRDb2xvcnMpIDogbmV3IFVpbnQxNkFycmF5KG51bUNvbXBvbmVudENvbG9ycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtQ29tcG9uZW50Q29sb3JzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxDb2xvcnNbaV0gPSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JNYXAgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkobnVtQ29tcG9uZW50Q29sb3JzICogMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFJnYkJ1ZmZlcihhbGxDb2xvcnMsIDAsIG51bUNvbXBvbmVudENvbG9ycywgY29sb3JNYXAsIDAsIGJwYywgMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmVlZHNSZXNpemluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXN0UG9zID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IGNvdW50OyArK19pMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gY29tcHNbX2kyXSAqIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbZGVzdFBvcysrXSA9IGNvbG9yTWFwW2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbZGVzdFBvcysrXSA9IGNvbG9yTWFwW2tleSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RQb3MrK10gPSBjb2xvck1hcFtrZXkgKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFBvcyArPSBhbHBoYTAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmdiQnVmID0gbmV3IFVpbnQ4QXJyYXkoY291bnQgKiAzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmdiUG9zID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IGNvdW50OyArK19pMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2tleSA9IGNvbXBzW19pM10gKiAzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJnYkJ1ZltyZ2JQb3MrK10gPSBjb2xvck1hcFtfa2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmdiQnVmW3JnYlBvcysrXSA9IGNvbG9yTWFwW19rZXkgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmdiQnVmW3JnYlBvcysrXSA9IGNvbG9yTWFwW19rZXkgKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5lZWRzUmVzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFJnYkJ1ZmZlcihjb21wcywgMCwgd2lkdGggKiBhY3R1YWxIZWlnaHQsIGRlc3QsIDAsIGJwYywgYWxwaGEwMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJnYkJ1ZiA9IG5ldyBVaW50OENsYW1wZWRBcnJheShjb3VudCAqIDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0UmdiQnVmZmVyKGNvbXBzLCAwLCBjb3VudCwgcmdiQnVmLCAwLCBicGMsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJnYkJ1Zikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5lZWRzUmVzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNpemVSZ2JJbWFnZShyZ2JCdWYsIGRlc3QsIG9yaWdpbmFsV2lkdGgsIG9yaWdpbmFsSGVpZ2h0LCB3aWR0aCwgaGVpZ2h0LCBhbHBoYTAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9kZXN0UG9zID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JnYlBvcyA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaTQgPSAwLCBpaSA9IHdpZHRoICogYWN0dWFsSGVpZ2h0OyBfaTQgPCBpaTsgX2k0KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtfZGVzdFBvcysrXSA9IHJnYkJ1ZltfcmdiUG9zKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W19kZXN0UG9zKytdID0gcmdiQnVmW19yZ2JQb3MrK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbX2Rlc3RQb3MrK10gPSByZ2JCdWZbX3JnYlBvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Rlc3RQb3MgKz0gYWxwaGEwMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInVzZXNaZXJvVG9PbmVSYW5nZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ3VzZXNaZXJvVG9PbmVSYW5nZScsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJwYXJzZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShjcywgeHJlZiwgcmVzLCBwZGZGdW5jdGlvbkZhY3RvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIElSID0gdGhpcy5wYXJzZVRvSVIoY3MsIHhyZWYsIHJlcywgcGRmRnVuY3Rpb25GYWN0b3J5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbUlSKElSKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImZyb21JUlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tSVIoSVIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBBcnJheS5pc0FycmF5KElSKSA/IElSWzBdIDogSVI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aGl0ZVBvaW50LCBibGFja1BvaW50LCBnYW1tYTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RldmljZUdyYXlDUyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5ncmF5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdEZXZpY2VSZ2JDUyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5yZ2I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RldmljZUNteWtDUyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdDYWxHcmF5Q1MnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlUG9pbnQgPSBJUlsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGFja1BvaW50ID0gSVJbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FtbWEgPSBJUlszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENhbEdyYXlDUyh3aGl0ZVBvaW50LCBibGFja1BvaW50LCBnYW1tYSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NhbFJHQkNTJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGl0ZVBvaW50ID0gSVJbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxhY2tQb2ludCA9IElSWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhbW1hID0gSVJbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdHJpeCA9IElSWzRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsUkdCQ1Mod2hpdGVQb2ludCwgYmxhY2tQb2ludCwgZ2FtbWEsIG1hdHJpeCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BhdHRlcm5DUyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2VQYXR0ZXJuQ1MgPSBJUlsxXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlUGF0dGVybkNTKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VQYXR0ZXJuQ1MgPSB0aGlzLmZyb21JUihiYXNlUGF0dGVybkNTKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBhdHRlcm5DUyhiYXNlUGF0dGVybkNTKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnSW5kZXhlZENTJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZUluZGV4ZWRDUyA9IElSWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoaVZhbCA9IElSWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb29rdXAgPSBJUlszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEluZGV4ZWRDUyh0aGlzLmZyb21JUihiYXNlSW5kZXhlZENTKSwgaGlWYWwsIGxvb2t1cCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0FsdGVybmF0ZUNTJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtQ29tcHMgPSBJUlsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWx0ID0gSVJbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbnRGbiA9IElSWzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQWx0ZXJuYXRlQ1MobnVtQ29tcHMsIHRoaXMuZnJvbUlSKGFsdCksIHRpbnRGbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xhYkNTJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGl0ZVBvaW50ID0gSVJbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxhY2tQb2ludCA9IElSWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IElSWzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGFiQ1Mod2hpdGVQb2ludCwgYmxhY2tQb2ludCwgcmFuZ2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlVua25vd24gY29sb3JzcGFjZSBuYW1lOiBcIi5jb25jYXQobmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJwYXJzZVRvSVJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VUb0lSKGNzLCB4cmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwZGZGdW5jdGlvbkZhY3RvcnkgPSBhcmd1bWVudHMubGVuZ3RoID4gMyA/IGFyZ3VtZW50c1szXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3MgPSB4cmVmLmZldGNoSWZSZWYoY3MpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShjcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY3MubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RldmljZUdyYXknOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0cnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0RldmljZUdyYXlDUyc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdEZXZpY2VSR0InOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1JHQic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnRGV2aWNlUmdiQ1MnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRGV2aWNlQ01ZSyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ01ZSyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnRGV2aWNlQ215a0NTJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BhdHRlcm4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWydQYXR0ZXJuQ1MnLCBudWxsXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShyZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JTcGFjZXMgPSByZXMuZ2V0KCdDb2xvclNwYWNlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShjb2xvclNwYWNlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzQ1MgPSBjb2xvclNwYWNlcy5nZXQoY3MubmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzQ1MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHJlc0NTKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUb0lSKHJlc0NTLCB4cmVmLCByZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcyA9IHJlc0NTO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJ1bnJlY29nbml6ZWQgY29sb3JzcGFjZSBcIi5jb25jYXQoY3MubmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY3MpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kZSA9IHhyZWYuZmV0Y2hJZlJlZihjc1swXSkubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1Db21wcywgcGFyYW1zLCBhbHQsIHdoaXRlUG9pbnQsIGJsYWNrUG9pbnQsIGdhbW1hO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdEZXZpY2VHcmF5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdHJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdEZXZpY2VHcmF5Q1MnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRGV2aWNlUkdCJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdSR0InOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0RldmljZVJnYkNTJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RldmljZUNNWUsnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NNWUsnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0RldmljZUNteWtDUyc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdDYWxHcmF5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zID0geHJlZi5mZXRjaElmUmVmKGNzWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVQb2ludCA9IHBhcmFtcy5nZXRBcnJheSgnV2hpdGVQb2ludCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGFja1BvaW50ID0gcGFyYW1zLmdldEFycmF5KCdCbGFja1BvaW50Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhbW1hID0gcGFyYW1zLmdldCgnR2FtbWEnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsnQ2FsR3JheUNTJywgd2hpdGVQb2ludCwgYmxhY2tQb2ludCwgZ2FtbWFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ2FsUkdCJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zID0geHJlZi5mZXRjaElmUmVmKGNzWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVQb2ludCA9IHBhcmFtcy5nZXRBcnJheSgnV2hpdGVQb2ludCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGFja1BvaW50ID0gcGFyYW1zLmdldEFycmF5KCdCbGFja1BvaW50Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhbW1hID0gcGFyYW1zLmdldEFycmF5KCdHYW1tYScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0cml4ID0gcGFyYW1zLmdldEFycmF5KCdNYXRyaXgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsnQ2FsUkdCQ1MnLCB3aGl0ZVBvaW50LCBibGFja1BvaW50LCBnYW1tYSwgbWF0cml4XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0lDQ0Jhc2VkJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHhyZWYuZmV0Y2hJZlJlZihjc1sxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gc3RyZWFtLmRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUNvbXBzID0gZGljdC5nZXQoJ04nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0ID0gZGljdC5nZXQoJ0FsdGVybmF0ZScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbHRJUiA9IHRoaXMucGFyc2VUb0lSKGFsdCwgeHJlZiwgcmVzLCBwZGZGdW5jdGlvbkZhY3RvcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFsdENTID0gdGhpcy5mcm9tSVIoYWx0SVIsIHBkZkZ1bmN0aW9uRmFjdG9yeSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbHRDUy5udW1Db21wcyA9PT0gbnVtQ29tcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWx0SVI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnSUNDQmFzZWQgY29sb3Igc3BhY2U6IElnbm9yaW5nIGluY29ycmVjdCAvQWx0ZXJuYXRlIGVudHJ5LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bUNvbXBzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0RldmljZUdyYXlDUyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtQ29tcHMgPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnRGV2aWNlUmdiQ1MnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bUNvbXBzID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0RldmljZUNteWtDUyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BhdHRlcm4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZVBhdHRlcm5DUyA9IGNzWzFdIHx8IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2VQYXR0ZXJuQ1MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VQYXR0ZXJuQ1MgPSB0aGlzLnBhcnNlVG9JUihiYXNlUGF0dGVybkNTLCB4cmVmLCByZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWydQYXR0ZXJuQ1MnLCBiYXNlUGF0dGVybkNTXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0luZGV4ZWQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0knOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZUluZGV4ZWRDUyA9IHRoaXMucGFyc2VUb0lSKGNzWzFdLCB4cmVmLCByZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoaVZhbCA9IHhyZWYuZmV0Y2hJZlJlZihjc1syXSkgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9va3VwID0geHJlZi5mZXRjaElmUmVmKGNzWzNdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShsb29rdXApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXAgPSBsb29rdXAuZ2V0Qnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbJ0luZGV4ZWRDUycsIGJhc2VJbmRleGVkQ1MsIGhpVmFsLCBsb29rdXBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnU2VwYXJhdGlvbic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRGV2aWNlTic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0geHJlZi5mZXRjaElmUmVmKGNzWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQ29tcHMgPSBBcnJheS5pc0FycmF5KG5hbWUpID8gbmFtZS5sZW5ndGggOiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQgPSB0aGlzLnBhcnNlVG9JUihjc1syXSwgeHJlZiwgcmVzLCBwZGZGdW5jdGlvbkZhY3RvcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGludEZuID0gcGRmRnVuY3Rpb25GYWN0b3J5LmNyZWF0ZSh4cmVmLmZldGNoSWZSZWYoY3NbM10pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsnQWx0ZXJuYXRlQ1MnLCBudW1Db21wcywgYWx0LCB0aW50Rm5dO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTGFiJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zID0geHJlZi5mZXRjaElmUmVmKGNzWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVQb2ludCA9IHBhcmFtcy5nZXRBcnJheSgnV2hpdGVQb2ludCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGFja1BvaW50ID0gcGFyYW1zLmdldEFycmF5KCdCbGFja1BvaW50Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IHBhcmFtcy5nZXRBcnJheSgnUmFuZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsnTGFiQ1MnLCB3aGl0ZVBvaW50LCBibGFja1BvaW50LCByYW5nZV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJ1bmltcGxlbWVudGVkIGNvbG9yIHNwYWNlIG9iamVjdCBcXFwiXCIuY29uY2F0KG1vZGUsIFwiXFxcIlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJ1bnJlY29nbml6ZWQgY29sb3Igc3BhY2Ugb2JqZWN0OiBcXFwiXCIuY29uY2F0KGNzLCBcIlxcXCJcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXNEZWZhdWx0RGVjb2RlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzRGVmYXVsdERlY29kZShkZWNvZGUsIG51bUNvbXBzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShkZWNvZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1Db21wcyAqIDIgIT09IGRlY29kZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnVGhlIGRlY29kZSBtYXAgaXMgbm90IHRoZSBjb3JyZWN0IGxlbmd0aCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBkZWNvZGUubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY29kZVtpXSAhPT0gMCB8fCBkZWNvZGVbaSArIDFdICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJzaW5nbGV0b25zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnc2luZ2xldG9ucycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldCBncmF5KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnZ3JheScsIG5ldyBEZXZpY2VHcmF5Q1MoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgcmdiKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAncmdiJywgbmV3IERldmljZVJnYkNTKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGNteWsoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsICdjbXlrJywgbmV3IERldmljZUNteWtDUygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb2xvclNwYWNlO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkNvbG9yU3BhY2UgPSBDb2xvclNwYWNlO1xuXG4gICAgICAgICAgICAgICAgdmFyIEFsdGVybmF0ZUNTID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0NvbG9yU3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhBbHRlcm5hdGVDUywgX0NvbG9yU3BhY2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBbHRlcm5hdGVDUyhudW1Db21wcywgYmFzZSwgdGludEZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEFsdGVybmF0ZUNTKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKEFsdGVybmF0ZUNTKS5jYWxsKHRoaXMsICdBbHRlcm5hdGUnLCBudW1Db21wcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmJhc2UgPSBiYXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnRpbnRGbiA9IHRpbnRGbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy50bXBCdWYgPSBuZXcgRmxvYXQzMkFycmF5KGJhc2UubnVtQ29tcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKEFsdGVybmF0ZUNTLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRSZ2JJdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcEJ1ZiA9IHRoaXMudG1wQnVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbnRGbihzcmMsIHNyY09mZnNldCwgdG1wQnVmLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXNlLmdldFJnYkl0ZW0odG1wQnVmLCAwLCBkZXN0LCBkZXN0T2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldFJnYkJ1ZmZlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aW50Rm4gPSB0aGlzLnRpbnRGbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2UgPSB0aGlzLmJhc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY2FsZSA9IDEgLyAoKDEgPDwgYml0cykgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2VOdW1Db21wcyA9IGJhc2UubnVtQ29tcHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1c2VzWmVyb1RvT25lUmFuZ2UgPSBiYXNlLnVzZXNaZXJvVG9PbmVSYW5nZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzUGFzc3Rocm91Z2ggPSAoYmFzZS5pc1Bhc3N0aHJvdWdoKDgpIHx8ICF1c2VzWmVyb1RvT25lUmFuZ2UpICYmIGFscGhhMDEgPT09IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3MgPSBpc1Bhc3N0aHJvdWdoID8gZGVzdE9mZnNldCA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYXNlQnVmID0gaXNQYXNzdGhyb3VnaCA/IGRlc3QgOiBuZXcgVWludDhDbGFtcGVkQXJyYXkoYmFzZU51bUNvbXBzICogY291bnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtQ29tcHMgPSB0aGlzLm51bUNvbXBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGVkID0gbmV3IEZsb2F0MzJBcnJheShudW1Db21wcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aW50ZWQgPSBuZXcgRmxvYXQzMkFycmF5KGJhc2VOdW1Db21wcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbnVtQ29tcHM7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlZFtqXSA9IHNyY1tzcmNPZmZzZXQrK10gKiBzY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGludEZuKHNjYWxlZCwgMCwgdGludGVkLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXNaZXJvVG9PbmVSYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBiYXNlTnVtQ29tcHM7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlQnVmW3BvcysrXSA9IHRpbnRlZFtqXSAqIDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UuZ2V0UmdiSXRlbSh0aW50ZWQsIDAsIGJhc2VCdWYsIHBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zICs9IGJhc2VOdW1Db21wcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNQYXNzdGhyb3VnaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZS5nZXRSZ2JCdWZmZXIoYmFzZUJ1ZiwgMCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIDgsIGFscGhhMDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRPdXRwdXRMZW5ndGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBhbHBoYTAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJhc2UuZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoICogdGhpcy5iYXNlLm51bUNvbXBzIC8gdGhpcy5udW1Db21wcywgYWxwaGEwMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWx0ZXJuYXRlQ1M7XG4gICAgICAgICAgICAgICAgICAgIH0oQ29sb3JTcGFjZSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgUGF0dGVybkNTID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0NvbG9yU3BhY2UyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoUGF0dGVybkNTLCBfQ29sb3JTcGFjZTIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQYXR0ZXJuQ1MoYmFzZUNTKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQYXR0ZXJuQ1MpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFBhdHRlcm5DUykuY2FsbCh0aGlzLCAnUGF0dGVybicsIG51bGwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuYmFzZSA9IGJhc2VDUztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoUGF0dGVybkNTLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpc0RlZmF1bHREZWNvZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNEZWZhdWx0RGVjb2RlKGRlY29kZU1hcCwgYnBjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ1Nob3VsZCBub3QgY2FsbCBQYXR0ZXJuQ1MuaXNEZWZhdWx0RGVjb2RlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGF0dGVybkNTO1xuICAgICAgICAgICAgICAgICAgICB9KENvbG9yU3BhY2UpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEluZGV4ZWRDUyA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Db2xvclNwYWNlMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKEluZGV4ZWRDUywgX0NvbG9yU3BhY2UzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSW5kZXhlZENTKGJhc2UsIGhpZ2hWYWwsIGxvb2t1cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSW5kZXhlZENTKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihJbmRleGVkQ1MpLmNhbGwodGhpcywgJ0luZGV4ZWQnLCAxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLmJhc2UgPSBiYXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMy5oaWdoVmFsID0gaGlnaFZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZU51bUNvbXBzID0gYmFzZS5udW1Db21wcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gYmFzZU51bUNvbXBzICogaGlnaFZhbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKGxvb2t1cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLmxvb2t1cCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBieXRlcyA9IGxvb2t1cC5nZXRCeXRlcyhsZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMy5sb29rdXAuc2V0KGJ5dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykobG9va3VwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMubG9va3VwID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMubG9va3VwW2ldID0gbG9va3VwLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxvb2t1cCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLmxvb2t1cCA9IGxvb2t1cDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJVbnJlY29nbml6ZWQgbG9va3VwIHRhYmxlOiBcIi5jb25jYXQobG9va3VwKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKEluZGV4ZWRDUywgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UmdiSXRlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZ2JJdGVtKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1Db21wcyA9IHRoaXMuYmFzZS5udW1Db21wcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gc3JjW3NyY09mZnNldF0gKiBudW1Db21wcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXNlLmdldFJnYkJ1ZmZlcih0aGlzLmxvb2t1cCwgc3RhcnQsIDEsIGRlc3QsIGRlc3RPZmZzZXQsIDgsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UmdiQnVmZmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJnYkJ1ZmZlcihzcmMsIHNyY09mZnNldCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIGJpdHMsIGFscGhhMDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2UgPSB0aGlzLmJhc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1Db21wcyA9IGJhc2UubnVtQ29tcHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdXRwdXREZWx0YSA9IGJhc2UuZ2V0T3V0cHV0TGVuZ3RoKG51bUNvbXBzLCBhbHBoYTAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvb2t1cCA9IHRoaXMubG9va3VwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvb2t1cFBvcyA9IHNyY1tzcmNPZmZzZXQrK10gKiBudW1Db21wcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UuZ2V0UmdiQnVmZmVyKGxvb2t1cCwgbG9va3VwUG9zLCAxLCBkZXN0LCBkZXN0T2Zmc2V0LCA4LCBhbHBoYTAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RPZmZzZXQgKz0gb3V0cHV0RGVsdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldE91dHB1dExlbmd0aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGgsIGFscGhhMDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmFzZS5nZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGggKiB0aGlzLmJhc2UubnVtQ29tcHMsIGFscGhhMDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXNEZWZhdWx0RGVjb2RlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzRGVmYXVsdERlY29kZShkZWNvZGVNYXAsIGJwYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGVjb2RlTWFwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVjb2RlTWFwLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdEZWNvZGUgbWFwIGxlbmd0aCBpcyBub3QgY29ycmVjdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYnBjKSB8fCBicGMgPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0JpdHMgcGVyIGNvbXBvbmVudCBpcyBub3QgY29ycmVjdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVjb2RlTWFwWzBdID09PSAwICYmIGRlY29kZU1hcFsxXSA9PT0gKDEgPDwgYnBjKSAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5kZXhlZENTO1xuICAgICAgICAgICAgICAgICAgICB9KENvbG9yU3BhY2UpO1xuXG4gICAgICAgICAgICAgICAgdmFyIERldmljZUdyYXlDUyA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Db2xvclNwYWNlNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKERldmljZUdyYXlDUywgX0NvbG9yU3BhY2U0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRGV2aWNlR3JheUNTKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBEZXZpY2VHcmF5Q1MpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihEZXZpY2VHcmF5Q1MpLmNhbGwodGhpcywgJ0RldmljZUdyYXknLCAxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhEZXZpY2VHcmF5Q1MsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldFJnYkl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmdiSXRlbShzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IHNyY1tzcmNPZmZzZXRdICogMjU1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RPZmZzZXRdID0gZGVzdFtkZXN0T2Zmc2V0ICsgMV0gPSBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRSZ2JCdWZmZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmdiQnVmZmVyKHNyYywgc3JjT2Zmc2V0LCBjb3VudCwgZGVzdCwgZGVzdE9mZnNldCwgYml0cywgYWxwaGEwMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSAyNTUgLyAoKDEgPDwgYml0cykgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGogPSBzcmNPZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gZGVzdE9mZnNldDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjID0gc2NhbGUgKiBzcmNbaisrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbcSsrXSA9IGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ErK10gPSBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtxKytdID0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgKz0gYWxwaGEwMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0T3V0cHV0TGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRMZW5ndGggKiAoMyArIGFscGhhMDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERldmljZUdyYXlDUztcbiAgICAgICAgICAgICAgICAgICAgfShDb2xvclNwYWNlKTtcblxuICAgICAgICAgICAgICAgIHZhciBEZXZpY2VSZ2JDUyA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Db2xvclNwYWNlNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKERldmljZVJnYkNTLCBfQ29sb3JTcGFjZTUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBEZXZpY2VSZ2JDUygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRGV2aWNlUmdiQ1MpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihEZXZpY2VSZ2JDUykuY2FsbCh0aGlzLCAnRGV2aWNlUkdCJywgMykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoRGV2aWNlUmdiQ1MsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldFJnYkl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmdiSXRlbShzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RPZmZzZXRdID0gc3JjW3NyY09mZnNldF0gKiAyNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbZGVzdE9mZnNldCArIDFdID0gc3JjW3NyY09mZnNldCArIDFdICogMjU1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IHNyY1tzcmNPZmZzZXQgKyAyXSAqIDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldFJnYkJ1ZmZlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRzID09PSA4ICYmIGFscGhhMDEgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Quc2V0KHNyYy5zdWJhcnJheShzcmNPZmZzZXQsIHNyY09mZnNldCArIGNvdW50ICogMyksIGRlc3RPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlID0gMjU1IC8gKCgxIDw8IGJpdHMpIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqID0gc3JjT2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IGRlc3RPZmZzZXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ErK10gPSBzY2FsZSAqIHNyY1tqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtxKytdID0gc2NhbGUgKiBzcmNbaisrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbcSsrXSA9IHNjYWxlICogc3JjW2orK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxICs9IGFscGhhMDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldE91dHB1dExlbmd0aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGgsIGFscGhhMDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0TGVuZ3RoICogKDMgKyBhbHBoYTAxKSAvIDMgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXNQYXNzdGhyb3VnaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc1Bhc3N0aHJvdWdoKGJpdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJpdHMgPT09IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRGV2aWNlUmdiQ1M7XG4gICAgICAgICAgICAgICAgICAgIH0oQ29sb3JTcGFjZSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgRGV2aWNlQ215a0NTID0gZnVuY3Rpb24gRGV2aWNlQ215a0NTQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY29udmVydFRvUmdiKHNyYywgc3JjT2Zmc2V0LCBzcmNTY2FsZSwgZGVzdCwgZGVzdE9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBzcmNbc3JjT2Zmc2V0XSAqIHNyY1NjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSBzcmNbc3JjT2Zmc2V0ICsgMV0gKiBzcmNTY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5ID0gc3JjW3NyY09mZnNldCArIDJdICogc3JjU2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgayA9IHNyY1tzcmNPZmZzZXQgKyAzXSAqIHNyY1NjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtkZXN0T2Zmc2V0XSA9IDI1NSArIGMgKiAoLTQuMzg3MzMyMzg0NjA5OTg4ICogYyArIDU0LjQ4NjE1MTk0MTg5MTc2ICogbSArIDE4LjgyMjkwNTAyMTY1MzAyICogeSArIDIxMi4yNTY2MjQ1MTYzOTU4NSAqIGsgKyAtMjg1LjIzMzEwMjYxMzcwMDQpICsgbSAqICgxLjcxNDk3NjM0NzczNjIxMzQgKiBtIC0gNS42MDk2NzM2OTA0MDQ3MzE1ICogeSArIC0xNy44NzM4NzA4NjE0MTU0NDQgKiBrIC0gNS40OTcwMDY0MjcxOTYzNjYpICsgeSAqICgtMi41MjE3MzQwMTMxNjgzMDMzICogeSAtIDIxLjI0ODkyMzMzNzM1MzA3MyAqIGsgKyAxNy41MTE5MjcwODQxODEzKSArIGsgKiAoLTIxLjg2MTIyMTQ3NDYzNjA1ICogayAtIDE4OS40ODE4MDgzNTkyMjc0Nyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RPZmZzZXQgKyAxXSA9IDI1NSArIGMgKiAoOC44NDEwNDE0MjIwMzYxNDkgKiBjICsgNjAuMTE4MDI3MDQ1NTk3MzY2ICogbSArIDYuODcxNDI1NTkyMDQ5MDA3ICogeSArIDMxLjE1OTEwMDEzMDA1NTkyMiAqIGsgKyAtNzkuMjk3MDg0NDgxNjU0OCkgKyBtICogKC0xNS4zMTAzNjEzMDY5Njc4MTcgKiBtICsgMTcuNTc1MjUxMjYxMTA5NDgyICogeSArIDEzMS4zNTI1MDkxMjQ5Mzk3NiAqIGsgLSAxOTAuOTQ1MzMwMjU4ODk1MSkgKyB5ICogKDQuNDQ0MzM5MTAyODUyNzM5ICogeSArIDkuODYzMjg2MTQ5MzQwNSAqIGsgLSAyNC44Njc0MTU4MjU1NTg3OCkgKyBrICogKC0yMC43MzczMjU0NzExODEwMzQgKiBrIC0gMTg3LjgwNDUzNzA5NzE5NTc4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbZGVzdE9mZnNldCArIDJdID0gMjU1ICsgYyAqICgwLjg4NDI1MjI0MzAwMDMyOTYgKiBjICsgOC4wNzg2Nzc1MDMxMTI5MjggKiBtICsgMzAuODk5NzgzMDk3MDM3MjkgKiB5IC0gMC4yMzg4MzIzODY4OTE3ODkzNCAqIGsgKyAtMTQuMTgzNTc2Nzk5NjczMjg2KSArIG0gKiAoMTAuNDk1OTMyNzM0MzIwNzIgKiBtICsgNjMuMDIzNzg0OTQ3NTQwNTIgKiB5ICsgNTAuNjA2OTU3NjU2MzYwNzM0ICogayAtIDExMi4yMzg4NDI1MzcxOTI0OCkgKyB5ICogKDAuMDMyOTYwNDExMTQ4NzMyMTcgKiB5ICsgMTE1LjYwMzg0NDQ5NjQ2NjQxICogayArIC0xOTMuNTgyMDkzNTY4NjE1MDUpICsgayAqICgtMjIuMzM4MTY4MDczMDk4ODYgKiBrIC0gMTgwLjEyNjEzOTc0NzA4MzY3KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBEZXZpY2VDbXlrQ1MgPVxuICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Db2xvclNwYWNlNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhEZXZpY2VDbXlrQ1MsIF9Db2xvclNwYWNlNik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBEZXZpY2VDbXlrQ1MoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBEZXZpY2VDbXlrQ1MpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoRGV2aWNlQ215a0NTKS5jYWxsKHRoaXMsICdEZXZpY2VDTVlLJywgNCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhEZXZpY2VDbXlrQ1MsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRSZ2JJdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZ2JJdGVtKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9SZ2Ioc3JjLCBzcmNPZmZzZXQsIDEsIGRlc3QsIGRlc3RPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UmdiQnVmZmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSAxIC8gKCgxIDw8IGJpdHMpIC0gMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb1JnYihzcmMsIHNyY09mZnNldCwgc2NhbGUsIGRlc3QsIGRlc3RPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY09mZnNldCArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RPZmZzZXQgKz0gMyArIGFscGhhMDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRPdXRwdXRMZW5ndGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0TGVuZ3RoIC8gNCAqICgzICsgYWxwaGEwMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERldmljZUNteWtDUztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0oQ29sb3JTcGFjZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERldmljZUNteWtDUztcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgQ2FsR3JheUNTID0gZnVuY3Rpb24gQ2FsR3JheUNTQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY29udmVydFRvUmdiKGNzLCBzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCwgc2NhbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBBID0gc3JjW3NyY09mZnNldF0gKiBzY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBBRyA9IE1hdGgucG93KEEsIGNzLkcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEwgPSBjcy5ZVyAqIEFHO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IE1hdGgubWF4KDI5NS44ICogTWF0aC5wb3coTCwgMC4zMzMzMzMzMzMzMzMzMzMzMzMpIC0gNDAuOCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RPZmZzZXRdID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtkZXN0T2Zmc2V0ICsgMV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBDYWxHcmF5Q1MgPVxuICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Db2xvclNwYWNlNykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhDYWxHcmF5Q1MsIF9Db2xvclNwYWNlNyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBDYWxHcmF5Q1Mod2hpdGVQb2ludCwgYmxhY2tQb2ludCwgZ2FtbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzNDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ2FsR3JheUNTKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczQgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoQ2FsR3JheUNTKS5jYWxsKHRoaXMsICdDYWxHcmF5JywgMSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd2hpdGVQb2ludCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdXaGl0ZVBvaW50IG1pc3NpbmcgLSByZXF1aXJlZCBmb3IgY29sb3Igc3BhY2UgQ2FsR3JheScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxhY2tQb2ludCA9IGJsYWNrUG9pbnQgfHwgWzAsIDAsIDBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYW1tYSA9IGdhbW1hIHx8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5YVyA9IHdoaXRlUG9pbnRbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5ZVyA9IHdoaXRlUG9pbnRbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5aVyA9IHdoaXRlUG9pbnRbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5YQiA9IGJsYWNrUG9pbnRbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5ZQiA9IGJsYWNrUG9pbnRbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5aQiA9IGJsYWNrUG9pbnRbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5HID0gZ2FtbWE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzNC5YVyA8IDAgfHwgX3RoaXM0LlpXIDwgMCB8fCBfdGhpczQuWVcgIT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzIGZvciBcIi5jb25jYXQoX3RoaXM0Lm5hbWUpICsgJywgbm8gZmFsbGJhY2sgYXZhaWxhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXM0LlhCIDwgMCB8fCBfdGhpczQuWUIgPCAwIHx8IF90aGlzNC5aQiA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIkludmFsaWQgQmxhY2tQb2ludCBmb3IgXCIuY29uY2F0KF90aGlzNC5uYW1lLCBcIiwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5YQiA9IF90aGlzNC5ZQiA9IF90aGlzNC5aQiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXM0LlhCICE9PSAwIHx8IF90aGlzNC5ZQiAhPT0gMCB8fCBfdGhpczQuWkIgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlwiLmNvbmNhdChfdGhpczQubmFtZSwgXCIsIEJsYWNrUG9pbnQ6IFhCOiBcIikuY29uY2F0KF90aGlzNC5YQiwgXCIsIFlCOiBcIikuY29uY2F0KF90aGlzNC5ZQiwgXCIsIFwiKSArIFwiWkI6IFwiLmNvbmNhdChfdGhpczQuWkIsIFwiLCBvbmx5IGRlZmF1bHQgdmFsdWVzIGFyZSBzdXBwb3J0ZWQuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpczQuRyA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIkludmFsaWQgR2FtbWE6IFwiLmNvbmNhdChfdGhpczQuRywgXCIgZm9yIFwiKS5jb25jYXQoX3RoaXM0Lm5hbWUsIFwiLCBcIikgKyAnZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczQuRyA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhDYWxHcmF5Q1MsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRSZ2JJdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZ2JJdGVtKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9SZ2IodGhpcywgc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UmdiQnVmZmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSAxIC8gKCgxIDw8IGJpdHMpIC0gMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb1JnYih0aGlzLCBzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCwgc2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY09mZnNldCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RPZmZzZXQgKz0gMyArIGFscGhhMDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRPdXRwdXRMZW5ndGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0TGVuZ3RoICogKDMgKyBhbHBoYTAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDYWxHcmF5Q1M7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KENvbG9yU3BhY2UpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBDYWxHcmF5Q1M7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIENhbFJHQkNTID0gZnVuY3Rpb24gQ2FsUkdCQ1NDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgQlJBREZPUkRfU0NBTEVfTUFUUklYID0gbmV3IEZsb2F0MzJBcnJheShbMC44OTUxLCAwLjI2NjQsIC0wLjE2MTQsIC0wLjc1MDIsIDEuNzEzNSwgMC4wMzY3LCAwLjAzODksIC0wLjA2ODUsIDEuMDI5Nl0pO1xuICAgICAgICAgICAgICAgICAgICB2YXIgQlJBREZPUkRfU0NBTEVfSU5WRVJTRV9NQVRSSVggPSBuZXcgRmxvYXQzMkFycmF5KFswLjk4Njk5MjksIC0wLjE0NzA1NDMsIDAuMTU5OTYyNywgMC40MzIzMDUzLCAwLjUxODM2MDMsIDAuMDQ5MjkxMiwgLTAuMDA4NTI4NywgMC4wNDAwNDI4LCAwLjk2ODQ4NjddKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFNSR0JfRDY1X1hZWl9UT19SR0JfTUFUUklYID0gbmV3IEZsb2F0MzJBcnJheShbMy4yNDA0NTQyLCAtMS41MzcxMzg1LCAtMC40OTg1MzE0LCAtMC45NjkyNjYwLCAxLjg3NjAxMDgsIDAuMDQxNTU2MCwgMC4wNTU2NDM0LCAtMC4yMDQwMjU5LCAxLjA1NzIyNTJdKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIEZMQVRfV0hJVEVQT0lOVF9NQVRSSVggPSBuZXcgRmxvYXQzMkFycmF5KFsxLCAxLCAxXSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wTm9ybWFsaXplTWF0cml4ID0gbmV3IEZsb2F0MzJBcnJheSgzKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXBDb252ZXJ0TWF0cml4MSA9IG5ldyBGbG9hdDMyQXJyYXkoMyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wQ29udmVydE1hdHJpeDIgPSBuZXcgRmxvYXQzMkFycmF5KDMpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgREVDT0RFX0xfQ09OU1RBTlQgPSBNYXRoLnBvdygoOCArIDE2KSAvIDExNiwgMykgLyA4LjA7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbWF0cml4UHJvZHVjdChhLCBiLCByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFswXSA9IGFbMF0gKiBiWzBdICsgYVsxXSAqIGJbMV0gKyBhWzJdICogYlsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFsxXSA9IGFbM10gKiBiWzBdICsgYVs0XSAqIGJbMV0gKyBhWzVdICogYlsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFsyXSA9IGFbNl0gKiBiWzBdICsgYVs3XSAqIGJbMV0gKyBhWzhdICogYlsyXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRUb0ZsYXQoc291cmNlV2hpdGVQb2ludCwgTE1TLCByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFswXSA9IExNU1swXSAqIDEgLyBzb3VyY2VXaGl0ZVBvaW50WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0WzFdID0gTE1TWzFdICogMSAvIHNvdXJjZVdoaXRlUG9pbnRbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbMl0gPSBMTVNbMl0gKiAxIC8gc291cmNlV2hpdGVQb2ludFsyXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRUb0Q2NShzb3VyY2VXaGl0ZVBvaW50LCBMTVMsIHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEQ2NVggPSAwLjk1MDQ3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEQ2NVkgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEQ2NVogPSAxLjA4ODgzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0WzBdID0gTE1TWzBdICogRDY1WCAvIHNvdXJjZVdoaXRlUG9pbnRbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbMV0gPSBMTVNbMV0gKiBENjVZIC8gc291cmNlV2hpdGVQb2ludFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFsyXSA9IExNU1syXSAqIEQ2NVogLyBzb3VyY2VXaGl0ZVBvaW50WzJdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc1JHQlRyYW5zZmVyRnVuY3Rpb24oY29sb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xvciA8PSAwLjAwMzEzMDgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRqdXN0VG9SYW5nZSgwLCAxLCAxMi45MiAqIGNvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFkanVzdFRvUmFuZ2UoMCwgMSwgKDEgKyAwLjA1NSkgKiBNYXRoLnBvdyhjb2xvciwgMSAvIDIuNCkgLSAwLjA1NSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBhZGp1c3RUb1JhbmdlKG1pbiwgbWF4LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KG1pbiwgTWF0aC5taW4obWF4LCB2YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlTChMKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLWRlY29kZUwoLUwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTCA+IDguMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnBvdygoTCArIDE2KSAvIDExNiwgMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMICogREVDT0RFX0xfQ09OU1RBTlQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb21wZW5zYXRlQmxhY2tQb2ludChzb3VyY2VCbGFja1BvaW50LCBYWVpfRmxhdCwgcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlQmxhY2tQb2ludFswXSA9PT0gMCAmJiBzb3VyY2VCbGFja1BvaW50WzFdID09PSAwICYmIHNvdXJjZUJsYWNrUG9pbnRbMl0gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbMF0gPSBYWVpfRmxhdFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbMV0gPSBYWVpfRmxhdFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbMl0gPSBYWVpfRmxhdFsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB6ZXJvRGVjb2RlTCA9IGRlY29kZUwoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgWF9EU1QgPSB6ZXJvRGVjb2RlTDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBYX1NSQyA9IGRlY29kZUwoc291cmNlQmxhY2tQb2ludFswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgWV9EU1QgPSB6ZXJvRGVjb2RlTDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBZX1NSQyA9IGRlY29kZUwoc291cmNlQmxhY2tQb2ludFsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgWl9EU1QgPSB6ZXJvRGVjb2RlTDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBaX1NSQyA9IGRlY29kZUwoc291cmNlQmxhY2tQb2ludFsyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgWF9TY2FsZSA9ICgxIC0gWF9EU1QpIC8gKDEgLSBYX1NSQyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgWF9PZmZzZXQgPSAxIC0gWF9TY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBZX1NjYWxlID0gKDEgLSBZX0RTVCkgLyAoMSAtIFlfU1JDKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBZX09mZnNldCA9IDEgLSBZX1NjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFpfU2NhbGUgPSAoMSAtIFpfRFNUKSAvICgxIC0gWl9TUkMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFpfT2Zmc2V0ID0gMSAtIFpfU2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbMF0gPSBYWVpfRmxhdFswXSAqIFhfU2NhbGUgKyBYX09mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFsxXSA9IFhZWl9GbGF0WzFdICogWV9TY2FsZSArIFlfT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0WzJdID0gWFlaX0ZsYXRbMl0gKiBaX1NjYWxlICsgWl9PZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBub3JtYWxpemVXaGl0ZVBvaW50VG9GbGF0KHNvdXJjZVdoaXRlUG9pbnQsIFhZWl9JbiwgcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlV2hpdGVQb2ludFswXSA9PT0gMSAmJiBzb3VyY2VXaGl0ZVBvaW50WzJdID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0WzBdID0gWFlaX0luWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFsxXSA9IFhZWl9JblsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbMl0gPSBYWVpfSW5bMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgTE1TID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4UHJvZHVjdChCUkFERk9SRF9TQ0FMRV9NQVRSSVgsIFhZWl9JbiwgTE1TKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBMTVNfRmxhdCA9IHRlbXBOb3JtYWxpemVNYXRyaXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9GbGF0KHNvdXJjZVdoaXRlUG9pbnQsIExNUywgTE1TX0ZsYXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4UHJvZHVjdChCUkFERk9SRF9TQ0FMRV9JTlZFUlNFX01BVFJJWCwgTE1TX0ZsYXQsIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBub3JtYWxpemVXaGl0ZVBvaW50VG9ENjUoc291cmNlV2hpdGVQb2ludCwgWFlaX0luLCByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBMTVMgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXhQcm9kdWN0KEJSQURGT1JEX1NDQUxFX01BVFJJWCwgWFlaX0luLCBMTVMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIExNU19ENjUgPSB0ZW1wTm9ybWFsaXplTWF0cml4O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFRvRDY1KHNvdXJjZVdoaXRlUG9pbnQsIExNUywgTE1TX0Q2NSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXhQcm9kdWN0KEJSQURGT1JEX1NDQUxFX0lOVkVSU0VfTUFUUklYLCBMTVNfRDY1LCByZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY29udmVydFRvUmdiKGNzLCBzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCwgc2NhbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBBID0gYWRqdXN0VG9SYW5nZSgwLCAxLCBzcmNbc3JjT2Zmc2V0XSAqIHNjYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBCID0gYWRqdXN0VG9SYW5nZSgwLCAxLCBzcmNbc3JjT2Zmc2V0ICsgMV0gKiBzY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgQyA9IGFkanVzdFRvUmFuZ2UoMCwgMSwgc3JjW3NyY09mZnNldCArIDJdICogc2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEFHUiA9IE1hdGgucG93KEEsIGNzLkdSKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBCR0cgPSBNYXRoLnBvdyhCLCBjcy5HRyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgQ0dCID0gTWF0aC5wb3coQywgY3MuR0IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFggPSBjcy5NWEEgKiBBR1IgKyBjcy5NWEIgKiBCR0cgKyBjcy5NWEMgKiBDR0I7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgWSA9IGNzLk1ZQSAqIEFHUiArIGNzLk1ZQiAqIEJHRyArIGNzLk1ZQyAqIENHQjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBaID0gY3MuTVpBICogQUdSICsgY3MuTVpCICogQkdHICsgY3MuTVpDICogQ0dCO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFhZWiA9IHRlbXBDb252ZXJ0TWF0cml4MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFhZWlswXSA9IFg7XG4gICAgICAgICAgICAgICAgICAgICAgICBYWVpbMV0gPSBZO1xuICAgICAgICAgICAgICAgICAgICAgICAgWFlaWzJdID0gWjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBYWVpfRmxhdCA9IHRlbXBDb252ZXJ0TWF0cml4MjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZVdoaXRlUG9pbnRUb0ZsYXQoY3Mud2hpdGVQb2ludCwgWFlaLCBYWVpfRmxhdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgWFlaX0JsYWNrID0gdGVtcENvbnZlcnRNYXRyaXgxO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGVuc2F0ZUJsYWNrUG9pbnQoY3MuYmxhY2tQb2ludCwgWFlaX0ZsYXQsIFhZWl9CbGFjayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgWFlaX0Q2NSA9IHRlbXBDb252ZXJ0TWF0cml4MjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZVdoaXRlUG9pbnRUb0Q2NShGTEFUX1dISVRFUE9JTlRfTUFUUklYLCBYWVpfQmxhY2ssIFhZWl9ENjUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFNSR0IgPSB0ZW1wQ29udmVydE1hdHJpeDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXhQcm9kdWN0KFNSR0JfRDY1X1hZWl9UT19SR0JfTUFUUklYLCBYWVpfRDY1LCBTUkdCKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbZGVzdE9mZnNldF0gPSBzUkdCVHJhbnNmZXJGdW5jdGlvbihTUkdCWzBdKSAqIDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbZGVzdE9mZnNldCArIDFdID0gc1JHQlRyYW5zZmVyRnVuY3Rpb24oU1JHQlsxXSkgKiAyNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IHNSR0JUcmFuc2ZlckZ1bmN0aW9uKFNSR0JbMl0pICogMjU1O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIENhbFJHQkNTID1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQ29sb3JTcGFjZTgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoQ2FsUkdCQ1MsIF9Db2xvclNwYWNlOCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBDYWxSR0JDUyh3aGl0ZVBvaW50LCBibGFja1BvaW50LCBnYW1tYSwgbWF0cml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENhbFJHQkNTKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoQ2FsUkdCQ1MpLmNhbGwodGhpcywgJ0NhbFJHQicsIDMpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdoaXRlUG9pbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignV2hpdGVQb2ludCBtaXNzaW5nIC0gcmVxdWlyZWQgZm9yIGNvbG9yIHNwYWNlIENhbFJHQicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxhY2tQb2ludCA9IGJsYWNrUG9pbnQgfHwgbmV3IEZsb2F0MzJBcnJheSgzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FtbWEgPSBnYW1tYSB8fCBuZXcgRmxvYXQzMkFycmF5KFsxLCAxLCAxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeCA9IG1hdHJpeCB8fCBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBYVyA9IHdoaXRlUG9pbnRbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBZVyA9IHdoaXRlUG9pbnRbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBaVyA9IHdoaXRlUG9pbnRbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNS53aGl0ZVBvaW50ID0gd2hpdGVQb2ludDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFhCID0gYmxhY2tQb2ludFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFlCID0gYmxhY2tQb2ludFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFpCID0gYmxhY2tQb2ludFsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM1LmJsYWNrUG9pbnQgPSBibGFja1BvaW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuR1IgPSBnYW1tYVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM1LkdHID0gZ2FtbWFbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNS5HQiA9IGdhbW1hWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuTVhBID0gbWF0cml4WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuTVlBID0gbWF0cml4WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuTVpBID0gbWF0cml4WzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuTVhCID0gbWF0cml4WzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuTVlCID0gbWF0cml4WzRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuTVpCID0gbWF0cml4WzVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuTVhDID0gbWF0cml4WzZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuTVlDID0gbWF0cml4WzddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuTVpDID0gbWF0cml4WzhdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChYVyA8IDAgfHwgWlcgPCAwIHx8IFlXICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cyBmb3IgXCIuY29uY2F0KF90aGlzNS5uYW1lKSArICcsIG5vIGZhbGxiYWNrIGF2YWlsYWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFhCIDwgMCB8fCBZQiA8IDAgfHwgWkIgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJJbnZhbGlkIEJsYWNrUG9pbnQgZm9yIFwiLmNvbmNhdChfdGhpczUubmFtZSwgXCIgW1wiKS5jb25jYXQoWEIsIFwiLCBcIikuY29uY2F0KFlCLCBcIiwgXCIpLmNvbmNhdChaQiwgXCJdLCBcIikgKyAnZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuYmxhY2tQb2ludCA9IG5ldyBGbG9hdDMyQXJyYXkoMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXM1LkdSIDwgMCB8fCBfdGhpczUuR0cgPCAwIHx8IF90aGlzNS5HQiA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIkludmFsaWQgR2FtbWEgW1wiLmNvbmNhdChfdGhpczUuR1IsIFwiLCBcIikuY29uY2F0KF90aGlzNS5HRywgXCIsIFwiKS5jb25jYXQoX3RoaXM1LkdCLCBcIl0gZm9yIFwiKSArIFwiXCIuY29uY2F0KF90aGlzNS5uYW1lLCBcIiwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNS5HUiA9IF90aGlzNS5HRyA9IF90aGlzNS5HQiA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXM1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhDYWxSR0JDUywgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldFJnYkl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb1JnYih0aGlzLCBzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRSZ2JCdWZmZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJnYkJ1ZmZlcihzcmMsIHNyY09mZnNldCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIGJpdHMsIGFscGhhMDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY2FsZSA9IDEgLyAoKDEgPDwgYml0cykgLSAxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFRvUmdiKHRoaXMsIHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0LCBzY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjT2Zmc2V0ICs9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdE9mZnNldCArPSAzICsgYWxwaGEwMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldE91dHB1dExlbmd0aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBhbHBoYTAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRMZW5ndGggKiAoMyArIGFscGhhMDEpIC8gMyB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ2FsUkdCQ1M7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KENvbG9yU3BhY2UpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBDYWxSR0JDUztcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgTGFiQ1MgPSBmdW5jdGlvbiBMYWJDU0Nsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZuX2coeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPj0gNiAvIDI5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0geCAqIHggKiB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAxMDggLyA4NDEgKiAoeCAtIDQgLyAyOSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWNvZGUodmFsdWUsIGhpZ2gxLCBsb3cyLCBoaWdoMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvdzIgKyB2YWx1ZSAqIChoaWdoMiAtIGxvdzIpIC8gaGlnaDE7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb252ZXJ0VG9SZ2IoY3MsIHNyYywgc3JjT2Zmc2V0LCBtYXhWYWwsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBMcyA9IHNyY1tzcmNPZmZzZXRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFzID0gc3JjW3NyY09mZnNldCArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJzID0gc3JjW3NyY09mZnNldCArIDJdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF4VmFsICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExzID0gZGVjb2RlKExzLCBtYXhWYWwsIDAsIDEwMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgPSBkZWNvZGUoYXMsIG1heFZhbCwgY3MuYW1pbiwgY3MuYW1heCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnMgPSBkZWNvZGUoYnMsIG1heFZhbCwgY3MuYm1pbiwgY3MuYm1heCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFzID0gYXMgPiBjcy5hbWF4ID8gY3MuYW1heCA6IGFzIDwgY3MuYW1pbiA/IGNzLmFtaW4gOiBhcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJzID0gYnMgPiBjcy5ibWF4ID8gY3MuYm1heCA6IGJzIDwgY3MuYm1pbiA/IGNzLmJtaW4gOiBicztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBNID0gKExzICsgMTYpIC8gMTE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEwgPSBNICsgYXMgLyA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgTiA9IE0gLSBicyAvIDIwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBYID0gY3MuWFcgKiBmbl9nKEwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFkgPSBjcy5ZVyAqIGZuX2coTSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgWiA9IGNzLlpXICogZm5fZyhOKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByLCBnLCBiO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3MuWlcgPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IFggKiAzLjEzMzkgKyBZICogLTEuNjE3MCArIFogKiAtMC40OTA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBYICogLTAuOTc4NSArIFkgKiAxLjkxNjAgKyBaICogMC4wMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBYICogMC4wNzIwICsgWSAqIC0wLjIyOTAgKyBaICogMS40MDU3O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gWCAqIDMuMjQwNiArIFkgKiAtMS41MzcyICsgWiAqIC0wLjQ5ODY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IFggKiAtMC45Njg5ICsgWSAqIDEuODc1OCArIFogKiAwLjA0MTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IFggKiAwLjA1NTcgKyBZICogLTAuMjA0MCArIFogKiAxLjA1NzA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbZGVzdE9mZnNldF0gPSBNYXRoLnNxcnQocikgKiAyNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RPZmZzZXQgKyAxXSA9IE1hdGguc3FydChnKSAqIDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbZGVzdE9mZnNldCArIDJdID0gTWF0aC5zcXJ0KGIpICogMjU1O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIExhYkNTID1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQ29sb3JTcGFjZTkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoTGFiQ1MsIF9Db2xvclNwYWNlOSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBMYWJDUyh3aGl0ZVBvaW50LCBibGFja1BvaW50LCByYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM2O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMYWJDUyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM2ID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKExhYkNTKS5jYWxsKHRoaXMsICdMYWInLCAzKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3aGl0ZVBvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1doaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBMYWInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsYWNrUG9pbnQgPSBibGFja1BvaW50IHx8IFswLCAwLCAwXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSByYW5nZSB8fCBbLTEwMCwgMTAwLCAtMTAwLCAxMDBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuWFcgPSB3aGl0ZVBvaW50WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuWVcgPSB3aGl0ZVBvaW50WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuWlcgPSB3aGl0ZVBvaW50WzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuYW1pbiA9IHJhbmdlWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuYW1heCA9IHJhbmdlWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuYm1pbiA9IHJhbmdlWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuYm1heCA9IHJhbmdlWzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuWEIgPSBibGFja1BvaW50WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuWUIgPSBibGFja1BvaW50WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuWkIgPSBibGFja1BvaW50WzJdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpczYuWFcgPCAwIHx8IF90aGlzNi5aVyA8IDAgfHwgX3RoaXM2LllXICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0ludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzLCBubyBmYWxsYmFjayBhdmFpbGFibGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpczYuWEIgPCAwIHx8IF90aGlzNi5ZQiA8IDAgfHwgX3RoaXM2LlpCIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKCdJbnZhbGlkIEJsYWNrUG9pbnQsIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuWEIgPSBfdGhpczYuWUIgPSBfdGhpczYuWkIgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzNi5hbWluID4gX3RoaXM2LmFtYXggfHwgX3RoaXM2LmJtaW4gPiBfdGhpczYuYm1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKCdJbnZhbGlkIFJhbmdlLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdHMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5hbWluID0gLTEwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5hbWF4ID0gMTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM2LmJtaW4gPSAtMTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM2LmJtYXggPSAxMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXM2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhMYWJDUywgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldFJnYkl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb1JnYih0aGlzLCBzcmMsIHNyY09mZnNldCwgZmFsc2UsIGRlc3QsIGRlc3RPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UmdiQnVmZmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4VmFsID0gKDEgPDwgYml0cykgLSAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9SZ2IodGhpcywgc3JjLCBzcmNPZmZzZXQsIG1heFZhbCwgZGVzdCwgZGVzdE9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjT2Zmc2V0ICs9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdE9mZnNldCArPSAzICsgYWxwaGEwMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldE91dHB1dExlbmd0aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBhbHBoYTAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRMZW5ndGggKiAoMyArIGFscGhhMDEpIC8gMyB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpc0RlZmF1bHREZWNvZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzRGVmYXVsdERlY29kZShkZWNvZGVNYXAsIGJwYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJ1c2VzWmVyb1RvT25lUmFuZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ3VzZXNaZXJvVG9PbmVSYW5nZScsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMYWJDUztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0oQ29sb3JTcGFjZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExhYkNTO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTY5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Bbm5vdGF0aW9uRmFjdG9yeSA9IGV4cG9ydHMuQW5ub3RhdGlvbkJvcmRlclN0eWxlID0gZXhwb3J0cy5Bbm5vdGF0aW9uID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2KTtcblxuICAgICAgICAgICAgICAgIHZhciBfb2JqID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9wcmltaXRpdmVzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9jb2xvcnNwYWNlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNjgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9vcGVyYXRvcl9saXN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNzApO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9zdHJlYW0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1Nyk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IGlmICh0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBSZWZsZWN0LmdldCkgeyBfZ2V0ID0gUmVmbGVjdC5nZXQ7IH0gZWxzZSB7IF9nZXQgPSBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IHZhciBiYXNlID0gX3N1cGVyUHJvcEJhc2UodGFyZ2V0LCBwcm9wZXJ0eSk7IGlmICghYmFzZSkgcmV0dXJuOyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZSwgcHJvcGVydHkpOyBpZiAoZGVzYy5nZXQpIHsgcmV0dXJuIGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpOyB9IHJldHVybiBkZXNjLnZhbHVlOyB9OyB9IHJldHVybiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyIHx8IHRhcmdldCk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHsgd2hpbGUgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkpIHsgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrOyB9IHJldHVybiBvYmplY3Q7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgQW5ub3RhdGlvbkZhY3RvcnkgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFubm90YXRpb25GYWN0b3J5KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBBbm5vdGF0aW9uRmFjdG9yeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhBbm5vdGF0aW9uRmFjdG9yeSwgbnVsbCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY3JlYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNyZWF0ZSh4cmVmLCByZWYsIHBkZk1hbmFnZXIsIGlkRmFjdG9yeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmUodGhpcywgJ19jcmVhdGUnLCBbeHJlZiwgcmVmLCBwZGZNYW5hZ2VyLCBpZEZhY3RvcnldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9jcmVhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2NyZWF0ZSh4cmVmLCByZWYsIHBkZk1hbmFnZXIsIGlkRmFjdG9yeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGljdCA9IHhyZWYuZmV0Y2hJZlJlZihyZWYpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZGljdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpZCA9ICgwLCBfcHJpbWl0aXZlcy5pc1JlZikocmVmKSA/IHJlZi50b1N0cmluZygpIDogJ2Fubm90XycgKyBpZEZhY3RvcnkuY3JlYXRlT2JqSWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1YnR5cGUgPSBkaWN0LmdldCgnU3VidHlwZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlID0gKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoc3VidHlwZSkgPyBzdWJ0eXBlLm5hbWUgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWY6IHhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0OiBkaWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmOiAoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKHJlZikgPyByZWYgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VidHlwZTogc3VidHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZk1hbmFnZXI6IHBkZk1hbmFnZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN1YnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xpbmsnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGlua0Fubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1RleHQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVGV4dEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1dpZGdldCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkVHlwZSA9ICgwLCBfdXRpbC5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Q6IGRpY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ0ZUJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkVHlwZSA9ICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZpZWxkVHlwZSkgPyBmaWVsZFR5cGUubmFtZSA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdUeCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRleHRXaWRnZXRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0J0bic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJ1dHRvbldpZGdldEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ2gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDaG9pY2VXaWRnZXRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnVW5pbXBsZW1lbnRlZCB3aWRnZXQgZmllbGQgdHlwZSBcIicgKyBmaWVsZFR5cGUgKyAnXCIsICcgKyAnZmFsbGluZyBiYWNrIHRvIGJhc2UgZmllbGQgdHlwZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdpZGdldEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BvcHVwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBvcHVwQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTGluZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMaW5lQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnU3F1YXJlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNxdWFyZUFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NpcmNsZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDaXJjbGVBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdQb2x5TGluZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQb2x5bGluZUFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUG9seWdvbkFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0luayc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJbmtBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdIaWdobGlnaHQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSGlnaGxpZ2h0QW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVW5kZXJsaW5lJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVuZGVybGluZUFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1NxdWlnZ2x5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNxdWlnZ2x5QW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnU3RyaWtlT3V0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmlrZU91dEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1N0YW1wJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YW1wQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRmlsZUF0dGFjaG1lbnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3VidHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0Fubm90YXRpb24gaXMgbWlzc2luZyB0aGUgcmVxdWlyZWQgL1N1YnR5cGUuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbmltcGxlbWVudGVkIGFubm90YXRpb24gdHlwZSBcIicgKyBzdWJ0eXBlICsgJ1wiLCAnICsgJ2ZhbGxpbmcgYmFjayB0byBiYXNlIGFubm90YXRpb24uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQW5ub3RhdGlvbkZhY3Rvcnk7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuQW5ub3RhdGlvbkZhY3RvcnkgPSBBbm5vdGF0aW9uRmFjdG9yeTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFRyYW5zZm9ybU1hdHJpeChyZWN0LCBiYm94LCBtYXRyaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IF91dGlsLlV0aWwuZ2V0QXhpYWxBbGlnbmVkQm91bmRpbmdCb3goYmJveCwgbWF0cml4KTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgbWluWCA9IGJvdW5kc1swXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1pblkgPSBib3VuZHNbMV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXhYID0gYm91bmRzWzJdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF4WSA9IGJvdW5kc1szXTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobWluWCA9PT0gbWF4WCB8fCBtaW5ZID09PSBtYXhZKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzEsIDAsIDAsIDEsIHJlY3RbMF0sIHJlY3RbMV1dO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHhSYXRpbyA9IChyZWN0WzJdIC0gcmVjdFswXSkgLyAobWF4WCAtIG1pblgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgeVJhdGlvID0gKHJlY3RbM10gLSByZWN0WzFdKSAvIChtYXhZIC0gbWluWSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbeFJhdGlvLCAwLCAwLCB5UmF0aW8sIHJlY3RbMF0gLSBtaW5YICogeFJhdGlvLCByZWN0WzFdIC0gbWluWSAqIHlSYXRpb107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIEFubm90YXRpb24gPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFubm90YXRpb24ocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpY3QgPSBwYXJhbXMuZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEZsYWdzKGRpY3QuZ2V0KCdGJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVjdGFuZ2xlKGRpY3QuZ2V0QXJyYXkoJ1JlY3QnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDb2xvcihkaWN0LmdldEFycmF5KCdDJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Qm9yZGVyU3R5bGUoZGljdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBcHBlYXJhbmNlKGRpY3QpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5zdWJ0eXBlPT0nSGlnaGxpZ2h0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCBxdWFkIHBvaW50cyBmb3IgYW5ub3RhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdWFkUG9pbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1YWRwdHMgPSBkaWN0LmdldCgnUXVhZFBvaW50cycpIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcXVhZHB0cy5sZW5ndGg7IGogKz0gOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOQjogd2UgZG9uJ3QgdHJhbnNmb3JtIHRoZSBxdWFkcG9pbnRzIGhlcmUsIGJ1dCBsYXRlciBvbmNlIHdlIGtub3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHVzZXIgc3BhY2UgPT4gZGV2aWNlIHNwYWNlIHRyYW5zZm9ybWF0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9wTGVmdCA9IHt4OiBxdWFkcHRzW2ogKyA0XSwgeTogcXVhZHB0c1tqICsgNV19O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYm90dG9tUmlnaHQgPSB7eDogcXVhZHB0c1tqICsgMl0sIHk6IHF1YWRwdHNbaiArIDNdfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1YWQgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZC54ID0gTWF0aC5taW4odG9wTGVmdC54LCBib3R0b21SaWdodC54KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZC55ID0gTWF0aC5taW4odG9wTGVmdC55LCBib3R0b21SaWdodC55KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZC53aWR0aCA9IE1hdGguYWJzKHRvcExlZnQueCAtIGJvdHRvbVJpZ2h0LngpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkLmhlaWdodCA9IE1hdGguYWJzKHRvcExlZnQueSAtIGJvdHRvbVJpZ2h0LnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkUG9pbnRzLnB1c2gocXVhZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25GbGFnczogdGhpcy5mbGFncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyU3R5bGU6IHRoaXMuYm9yZGVyU3R5bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLmNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNBcHBlYXJhbmNlOiAhIXRoaXMuYXBwZWFyYW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHBhcmFtcy5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdDogdGhpcy5yZWN0YW5nbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnR5cGU6IHBhcmFtcy5zdWJ0eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkUG9pbnRzOiBxdWFkUG9pbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRlZFRleHQ6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhBbm5vdGF0aW9uLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfaGFzRmxhZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfaGFzRmxhZyhmbGFncywgZmxhZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISEoZmxhZ3MgJiBmbGFnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9pc1ZpZXdhYmxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9pc1ZpZXdhYmxlKGZsYWdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5faGFzRmxhZyhmbGFncywgX3V0aWwuQW5ub3RhdGlvbkZsYWcuSU5WSVNJQkxFKSAmJiAhdGhpcy5faGFzRmxhZyhmbGFncywgX3V0aWwuQW5ub3RhdGlvbkZsYWcuSElEREVOKSAmJiAhdGhpcy5faGFzRmxhZyhmbGFncywgX3V0aWwuQW5ub3RhdGlvbkZsYWcuTk9WSUVXKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9pc1ByaW50YWJsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfaXNQcmludGFibGUoZmxhZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0ZsYWcoZmxhZ3MsIF91dGlsLkFubm90YXRpb25GbGFnLlBSSU5UKSAmJiAhdGhpcy5faGFzRmxhZyhmbGFncywgX3V0aWwuQW5ub3RhdGlvbkZsYWcuSU5WSVNJQkxFKSAmJiAhdGhpcy5faGFzRmxhZyhmbGFncywgX3V0aWwuQW5ub3RhdGlvbkZsYWcuSElEREVOKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInNldEZsYWdzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldEZsYWdzKGZsYWdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmxhZ3MgPSBOdW1iZXIuaXNJbnRlZ2VyKGZsYWdzKSAmJiBmbGFncyA+IDAgPyBmbGFncyA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJoYXNGbGFnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhc0ZsYWcoZmxhZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFzRmxhZyh0aGlzLmZsYWdzLCBmbGFnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInNldFJlY3RhbmdsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRSZWN0YW5nbGUocmVjdGFuZ2xlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlY3RhbmdsZSkgJiYgcmVjdGFuZ2xlLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWN0YW5nbGUgPSBfdXRpbC5VdGlsLm5vcm1hbGl6ZVJlY3QocmVjdGFuZ2xlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdGFuZ2xlID0gWzAsIDAsIDAsIDBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJzZXRDb2xvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRDb2xvcihjb2xvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmdiQ29sb3IgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoMyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbG9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xvciA9IHJnYkNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjb2xvci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYkl0ZW0oY29sb3IsIDAsIHJnYkNvbG9yLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sb3IgPSByZ2JDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiSXRlbShjb2xvciwgMCwgcmdiQ29sb3IsIDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xvciA9IHJnYkNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiSXRlbShjb2xvciwgMCwgcmdiQ29sb3IsIDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xvciA9IHJnYkNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sb3IgPSByZ2JDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwic2V0Qm9yZGVyU3R5bGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc2V0Qm9yZGVyU3R5bGUoYm9yZGVyU3R5bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ib3JkZXJTdHlsZSA9IG5ldyBBbm5vdGF0aW9uQm9yZGVyU3R5bGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGJvcmRlclN0eWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvcmRlclN0eWxlLmhhcygnQlMnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpY3QgPSBib3JkZXJTdHlsZS5nZXQoJ0JTJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGljdFR5cGUgPSBkaWN0LmdldCgnVHlwZScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRpY3RUeXBlIHx8ICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGRpY3RUeXBlLCAnQm9yZGVyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKGRpY3QuZ2V0KCdXJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYm9yZGVyU3R5bGUuc2V0U3R5bGUoZGljdC5nZXQoJ1MnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ib3JkZXJTdHlsZS5zZXREYXNoQXJyYXkoZGljdC5nZXRBcnJheSgnRCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChib3JkZXJTdHlsZS5oYXMoJ0JvcmRlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSBib3JkZXJTdHlsZS5nZXRBcnJheSgnQm9yZGVyJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFycmF5KSAmJiBhcnJheS5sZW5ndGggPj0gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYm9yZGVyU3R5bGUuc2V0SG9yaXpvbnRhbENvcm5lclJhZGl1cyhhcnJheVswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ib3JkZXJTdHlsZS5zZXRWZXJ0aWNhbENvcm5lclJhZGl1cyhhcnJheVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aChhcnJheVsyXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyYXkubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYm9yZGVyU3R5bGUuc2V0RGFzaEFycmF5KGFycmF5WzNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJzZXRBcHBlYXJhbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldEFwcGVhcmFuY2UoZGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVhcmFuY2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXBwZWFyYW5jZVN0YXRlcyA9IGRpY3QuZ2V0KCdBUCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoYXBwZWFyYW5jZVN0YXRlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3JtYWxBcHBlYXJhbmNlU3RhdGUgPSBhcHBlYXJhbmNlU3RhdGVzLmdldCgnTicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKG5vcm1hbEFwcGVhcmFuY2VTdGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZWFyYW5jZSA9IG5vcm1hbEFwcGVhcmFuY2VTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkobm9ybWFsQXBwZWFyYW5jZVN0YXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFzID0gZGljdC5nZXQoJ0FTJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShhcykgfHwgIW5vcm1hbEFwcGVhcmFuY2VTdGF0ZS5oYXMoYXMubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZWFyYW5jZSA9IG5vcm1hbEFwcGVhcmFuY2VTdGF0ZS5nZXQoYXMubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfcHJlcGFyZVBvcHVwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9wcmVwYXJlUG9wdXAoZGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRpY3QuaGFzKCdDJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5jb2xvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEuaGFzUG9wdXAgPSBkaWN0LmhhcygnUG9wdXAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLnRpdGxlID0gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShkaWN0LmdldCgnVCcpIHx8ICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLmNvbnRlbnRzID0gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShkaWN0LmdldCgnQ29udGVudHMnKSB8fCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJsb2FkUmVzb3VyY2VzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWRSZXNvdXJjZXMoa2V5cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBlYXJhbmNlLmRpY3QuZ2V0QXN5bmMoJ1Jlc291cmNlcycpLnRoZW4oZnVuY3Rpb24gKHJlc291cmNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3RMb2FkZXIgPSBuZXcgX29iai5PYmplY3RMb2FkZXIocmVzb3VyY2VzLCBrZXlzLCByZXNvdXJjZXMueHJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0TG9hZGVyLmxvYWQoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb3VyY2VzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0T3BlcmF0b3JMaXN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldE9wZXJhdG9yTGlzdChldmFsdWF0b3IsIHRhc2ssIHJlbmRlckZvcm1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFwcGVhcmFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IF9vcGVyYXRvcl9saXN0Lk9wZXJhdG9yTGlzdCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXBwZWFyYW5jZURpY3QgPSB0aGlzLmFwcGVhcmFuY2UuZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc291cmNlc1Byb21pc2UgPSB0aGlzLmxvYWRSZXNvdXJjZXMoWydFeHRHU3RhdGUnLCAnQ29sb3JTcGFjZScsICdQYXR0ZXJuJywgJ1NoYWRpbmcnLCAnWE9iamVjdCcsICdGb250J10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmJveCA9IGFwcGVhcmFuY2VEaWN0LmdldEFycmF5KCdCQm94JykgfHwgWzAsIDAsIDEsIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0cml4ID0gYXBwZWFyYW5jZURpY3QuZ2V0QXJyYXkoJ01hdHJpeCcpIHx8IFsxLCAwLCAwLCAxLCAwLCAwXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybSA9IGdldFRyYW5zZm9ybU1hdHJpeChkYXRhLnJlY3QsIGJib3gsIG1hdHJpeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvdXJjZXNQcm9taXNlLnRoZW4oZnVuY3Rpb24gKHJlc291cmNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wTGlzdCA9IG5ldyBfb3BlcmF0b3JfbGlzdC5PcGVyYXRvckxpc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wTGlzdC5hZGRPcChfdXRpbC5PUFMuYmVnaW5Bbm5vdGF0aW9uLCBbZGF0YS5yZWN0LCB0cmFuc2Zvcm0sIG1hdHJpeF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2YWx1YXRvci5nZXRPcGVyYXRvckxpc3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogX3RoaXMuYXBwZWFyYW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlczogcmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdDogb3BMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcExpc3QuYWRkT3AoX3V0aWwuT1BTLmVuZEFubm90YXRpb24sIFtdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmFwcGVhcmFuY2UucmVzZXQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcExpc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJ2aWV3YWJsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5mbGFncyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNWaWV3YWJsZSh0aGlzLmZsYWdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInByaW50YWJsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5mbGFncyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzUHJpbnRhYmxlKHRoaXMuZmxhZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFubm90YXRpb247XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuQW5ub3RhdGlvbiA9IEFubm90YXRpb247XG5cbiAgICAgICAgICAgICAgICB2YXIgQW5ub3RhdGlvbkJvcmRlclN0eWxlID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBbm5vdGF0aW9uQm9yZGVyU3R5bGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEFubm90YXRpb25Cb3JkZXJTdHlsZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlID0gX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5TT0xJRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhc2hBcnJheSA9IFszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhvcml6b250YWxDb3JuZXJSYWRpdXMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmVydGljYWxDb3JuZXJSYWRpdXMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoQW5ub3RhdGlvbkJvcmRlclN0eWxlLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJzZXRXaWR0aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRXaWR0aCh3aWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkod2lkdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHdpZHRoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJzZXRTdHlsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRTdHlsZShzdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHN0eWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdHlsZS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdTJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlID0gX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5TT0xJRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZSA9IF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuREFTSEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdCJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlID0gX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5CRVZFTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdJJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlID0gX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5JTlNFVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZSA9IF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuVU5ERVJMSU5FO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJzZXREYXNoQXJyYXlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc2V0RGFzaEFycmF5KGRhc2hBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXNoQXJyYXkpICYmIGRhc2hBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWxsWmVyb3MgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZGFzaEFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBkYXNoQXJyYXlbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbGlkTnVtYmVyID0gK2VsZW1lbnQgPj0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsaWROdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFplcm9zID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZCAmJiAhYWxsWmVyb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhc2hBcnJheSA9IGRhc2hBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGFzaEFycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwic2V0SG9yaXpvbnRhbENvcm5lclJhZGl1c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRIb3Jpem9udGFsQ29ybmVyUmFkaXVzKHJhZGl1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihyYWRpdXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhvcml6b250YWxDb3JuZXJSYWRpdXMgPSByYWRpdXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInNldFZlcnRpY2FsQ29ybmVyUmFkaXVzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldFZlcnRpY2FsQ29ybmVyUmFkaXVzKHJhZGl1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihyYWRpdXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZlcnRpY2FsQ29ybmVyUmFkaXVzID0gcmFkaXVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQW5ub3RhdGlvbkJvcmRlclN0eWxlO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkFubm90YXRpb25Cb3JkZXJTdHlsZSA9IEFubm90YXRpb25Cb3JkZXJTdHlsZTtcblxuICAgICAgICAgICAgICAgIHZhciBXaWRnZXRBbm5vdGF0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0Fubm90YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhXaWRnZXRBbm5vdGF0aW9uLCBfQW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdpZGdldEFubm90YXRpb24ocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBXaWRnZXRBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMiA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihXaWRnZXRBbm5vdGF0aW9uKS5jYWxsKHRoaXMsIHBhcmFtcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gcGFyYW1zLmRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfdGhpczIuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuV0lER0VUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZmllbGROYW1lID0gX3RoaXMyLl9jb25zdHJ1Y3RGaWVsZE5hbWUoZGljdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5maWVsZFZhbHVlID0gKDAsIF91dGlsLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdDogZGljdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnVicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEFycmF5OiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5hbHRlcm5hdGl2ZVRleHQgPSAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGRpY3QuZ2V0KCdUVScpIHx8ICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmRlZmF1bHRBcHBlYXJhbmNlID0gKDAsIF91dGlsLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdDogZGljdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnREEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkVHlwZSA9ICgwLCBfdXRpbC5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Q6IGRpY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ0ZUJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZmllbGRUeXBlID0gKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZmllbGRUeXBlKSA/IGZpZWxkVHlwZS5uYW1lIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuZmllbGRSZXNvdXJjZXMgPSAoMCwgX3V0aWwuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0OiBkaWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdEUidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSB8fCBfcHJpbWl0aXZlcy5EaWN0LmVtcHR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZmllbGRGbGFncyA9ICgwLCBfdXRpbC5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Q6IGRpY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ0ZmJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGRhdGEuZmllbGRGbGFncykgfHwgZGF0YS5maWVsZEZsYWdzIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZpZWxkRmxhZ3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucmVhZE9ubHkgPSBfdGhpczIuaGFzRmllbGRGbGFnKF91dGlsLkFubm90YXRpb25GaWVsZEZsYWcuUkVBRE9OTFkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZmllbGRUeXBlID09PSAnU2lnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZpZWxkVmFsdWUgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5zZXRGbGFncyhfdXRpbC5Bbm5vdGF0aW9uRmxhZy5ISURERU4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhXaWRnZXRBbm5vdGF0aW9uLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfY29uc3RydWN0RmllbGROYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9jb25zdHJ1Y3RGaWVsZE5hbWUoZGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRpY3QuaGFzKCdUJykgJiYgIWRpY3QuaGFzKCdQYXJlbnQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbmtub3duIGZpZWxkIG5hbWUsIGZhbGxpbmcgYmFjayB0byBlbXB0eSBmaWVsZCBuYW1lLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkaWN0LmhhcygnUGFyZW50JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGRpY3QuZ2V0KCdUJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkTmFtZSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaWN0LmhhcygnVCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWUudW5zaGlmdCgoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGRpY3QuZ2V0KCdUJykpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb29wRGljdCA9IGRpY3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxvb3BEaWN0LmhhcygnUGFyZW50JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BEaWN0ID0gbG9vcERpY3QuZ2V0KCdQYXJlbnQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShsb29wRGljdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvb3BEaWN0LmhhcygnVCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lLnVuc2hpZnQoKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShsb29wRGljdC5nZXQoJ1QnKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkTmFtZS5qb2luKCcuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJoYXNGaWVsZEZsYWdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaGFzRmllbGRGbGFnKGZsYWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhKHRoaXMuZGF0YS5maWVsZEZsYWdzICYgZmxhZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRPcGVyYXRvckxpc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0T3BlcmF0b3JMaXN0KGV2YWx1YXRvciwgdGFzaywgcmVuZGVyRm9ybXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlckZvcm1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBfb3BlcmF0b3JfbGlzdC5PcGVyYXRvckxpc3QoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2dldChfZ2V0UHJvdG90eXBlT2YoV2lkZ2V0QW5ub3RhdGlvbi5wcm90b3R5cGUpLCBcImdldE9wZXJhdG9yTGlzdFwiLCB0aGlzKS5jYWxsKHRoaXMsIGV2YWx1YXRvciwgdGFzaywgcmVuZGVyRm9ybXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdpZGdldEFubm90YXRpb247XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICB2YXIgVGV4dFdpZGdldEFubm90YXRpb24gPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfV2lkZ2V0QW5ub3RhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFRleHRXaWRnZXRBbm5vdGF0aW9uLCBfV2lkZ2V0QW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRleHRXaWRnZXRBbm5vdGF0aW9uKHBhcmFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVGV4dFdpZGdldEFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFRleHRXaWRnZXRBbm5vdGF0aW9uKS5jYWxsKHRoaXMsIHBhcmFtcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gcGFyYW1zLmRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLmRhdGEuZmllbGRWYWx1ZSA9ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoX3RoaXMzLmRhdGEuZmllbGRWYWx1ZSB8fCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFsaWdubWVudCA9ICgwLCBfdXRpbC5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Q6IGRpY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ1EnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYWxpZ25tZW50KSB8fCBhbGlnbm1lbnQgPCAwIHx8IGFsaWdubWVudCA+IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMuZGF0YS50ZXh0QWxpZ25tZW50ID0gYWxpZ25tZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhpbXVtTGVuZ3RoID0gKDAsIF91dGlsLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdDogZGljdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnTWF4TGVuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heGltdW1MZW5ndGgpIHx8IG1heGltdW1MZW5ndGggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGltdW1MZW5ndGggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMy5kYXRhLm1heExlbiA9IG1heGltdW1MZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLmRhdGEubXVsdGlMaW5lID0gX3RoaXMzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLk1VTFRJTElORSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLmRhdGEuY29tYiA9IF90aGlzMy5oYXNGaWVsZEZsYWcoX3V0aWwuQW5ub3RhdGlvbkZpZWxkRmxhZy5DT01CKSAmJiAhX3RoaXMzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLk1VTFRJTElORSkgJiYgIV90aGlzMy5oYXNGaWVsZEZsYWcoX3V0aWwuQW5ub3RhdGlvbkZpZWxkRmxhZy5QQVNTV09SRCkgJiYgIV90aGlzMy5oYXNGaWVsZEZsYWcoX3V0aWwuQW5ub3RhdGlvbkZpZWxkRmxhZy5GSUxFU0VMRUNUKSAmJiBfdGhpczMuZGF0YS5tYXhMZW4gIT09IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFRleHRXaWRnZXRBbm5vdGF0aW9uLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRPcGVyYXRvckxpc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0T3BlcmF0b3JMaXN0KGV2YWx1YXRvciwgdGFzaywgcmVuZGVyRm9ybXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlckZvcm1zIHx8IHRoaXMuYXBwZWFyYW5jZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9nZXQoX2dldFByb3RvdHlwZU9mKFRleHRXaWRnZXRBbm5vdGF0aW9uLnByb3RvdHlwZSksIFwiZ2V0T3BlcmF0b3JMaXN0XCIsIHRoaXMpLmNhbGwodGhpcywgZXZhbHVhdG9yLCB0YXNrLCByZW5kZXJGb3Jtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3BlcmF0b3JMaXN0ID0gbmV3IF9vcGVyYXRvcl9saXN0Lk9wZXJhdG9yTGlzdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG9wZXJhdG9yTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gbmV3IF9zdHJlYW0uU3RyZWFtKCgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKSh0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2YWx1YXRvci5nZXRPcGVyYXRvckxpc3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzOiB0aGlzLmZpZWxkUmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0OiBvcGVyYXRvckxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0b3JMaXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUZXh0V2lkZ2V0QW5ub3RhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfShXaWRnZXRBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgIHZhciBCdXR0b25XaWRnZXRBbm5vdGF0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX1dpZGdldEFubm90YXRpb24yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbiwgX1dpZGdldEFubm90YXRpb24yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbihwYXJhbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJ1dHRvbldpZGdldEFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM0ID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKEJ1dHRvbldpZGdldEFubm90YXRpb24pLmNhbGwodGhpcywgcGFyYW1zKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM0LmRhdGEuY2hlY2tCb3ggPSAhX3RoaXM0Lmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLlJBRElPKSAmJiAhX3RoaXM0Lmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLlBVU0hCVVRUT04pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5kYXRhLnJhZGlvQnV0dG9uID0gX3RoaXM0Lmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLlJBRElPKSAmJiAhX3RoaXM0Lmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLlBVU0hCVVRUT04pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5kYXRhLnB1c2hCdXR0b24gPSBfdGhpczQuaGFzRmllbGRGbGFnKF91dGlsLkFubm90YXRpb25GaWVsZEZsYWcuUFVTSEJVVFRPTik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXM0LmRhdGEuY2hlY2tCb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM0Ll9wcm9jZXNzQ2hlY2tCb3gocGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF90aGlzNC5kYXRhLnJhZGlvQnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5fcHJvY2Vzc1JhZGlvQnV0dG9uKHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfdGhpczQuZGF0YS5wdXNoQnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5fcHJvY2Vzc1B1c2hCdXR0b24ocGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0ludmFsaWQgZmllbGQgZmxhZ3MgZm9yIGJ1dHRvbiB3aWRnZXQgYW5ub3RhdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhCdXR0b25XaWRnZXRBbm5vdGF0aW9uLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfcHJvY2Vzc0NoZWNrQm94XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9wcm9jZXNzQ2hlY2tCb3gocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0aGlzLmRhdGEuZmllbGRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5maWVsZFZhbHVlID0gdGhpcy5kYXRhLmZpZWxkVmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXN0b21BcHBlYXJhbmNlID0gcGFyYW1zLmRpY3QuZ2V0KCdBUCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoY3VzdG9tQXBwZWFyYW5jZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleHBvcnRWYWx1ZU9wdGlvbnNEaWN0ID0gY3VzdG9tQXBwZWFyYW5jZS5nZXQoJ0QnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGV4cG9ydFZhbHVlT3B0aW9uc0RpY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXhwb3J0VmFsdWVzID0gZXhwb3J0VmFsdWVPcHRpb25zRGljdC5nZXRLZXlzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNDb3JyZWN0T3B0aW9uQ291bnQgPSBleHBvcnRWYWx1ZXMubGVuZ3RoID09PSAyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzQ29ycmVjdE9wdGlvbkNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEuZXhwb3J0VmFsdWUgPSBleHBvcnRWYWx1ZXNbMF0gPT09ICdPZmYnID8gZXhwb3J0VmFsdWVzWzFdIDogZXhwb3J0VmFsdWVzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX3Byb2Nlc3NSYWRpb0J1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcHJvY2Vzc1JhZGlvQnV0dG9uKHBhcmFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEuZmllbGRWYWx1ZSA9IHRoaXMuZGF0YS5idXR0b25WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZFBhcmVudCA9IHBhcmFtcy5kaWN0LmdldCgnUGFyZW50Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGZpZWxkUGFyZW50KSAmJiBmaWVsZFBhcmVudC5oYXMoJ1YnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkUGFyZW50VmFsdWUgPSBmaWVsZFBhcmVudC5nZXQoJ1YnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZpZWxkUGFyZW50VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLmZpZWxkVmFsdWUgPSBmaWVsZFBhcmVudFZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXBwZWFyYW5jZVN0YXRlcyA9IHBhcmFtcy5kaWN0LmdldCgnQVAnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGFwcGVhcmFuY2VTdGF0ZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9ybWFsQXBwZWFyYW5jZVN0YXRlID0gYXBwZWFyYW5jZVN0YXRlcy5nZXQoJ04nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG5vcm1hbEFwcGVhcmFuY2VTdGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXlzID0gbm9ybWFsQXBwZWFyYW5jZVN0YXRlLmdldEtleXMoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBrZXlzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXlzW2ldICE9PSAnT2ZmJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5idXR0b25WYWx1ZSA9IGtleXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9wcm9jZXNzUHVzaEJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcHJvY2Vzc1B1c2hCdXR0b24ocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyYW1zLmRpY3QuaGFzKCdBJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnUHVzaCBidXR0b25zIHdpdGhvdXQgYWN0aW9uIGRpY3Rpb25hcmllcyBhcmUgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX29iai5DYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdERpY3Q6IHBhcmFtcy5kaWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqOiB0aGlzLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2NCYXNlVXJsOiBwYXJhbXMucGRmTWFuYWdlci5kb2NCYXNlVXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJ1dHRvbldpZGdldEFubm90YXRpb247XG4gICAgICAgICAgICAgICAgICAgIH0oV2lkZ2V0QW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICB2YXIgQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9XaWRnZXRBbm5vdGF0aW9uMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKENob2ljZVdpZGdldEFubm90YXRpb24sIF9XaWRnZXRBbm5vdGF0aW9uMyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENob2ljZVdpZGdldEFubm90YXRpb24ocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzNTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDaG9pY2VXaWRnZXRBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNSA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihDaG9pY2VXaWRnZXRBbm5vdGF0aW9uKS5jYWxsKHRoaXMsIHBhcmFtcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNS5kYXRhLm9wdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3B0aW9ucyA9ICgwLCBfdXRpbC5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Q6IHBhcmFtcy5kaWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdPcHQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IHBhcmFtcy54cmVmO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IG9wdGlvbnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wdGlvbiA9IHhyZWYuZmV0Y2hJZlJlZihvcHRpb25zW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc09wdGlvbkFycmF5ID0gQXJyYXkuaXNBcnJheShvcHRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM1LmRhdGEub3B0aW9uc1tpXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRWYWx1ZTogaXNPcHRpb25BcnJheSA/IHhyZWYuZmV0Y2hJZlJlZihvcHRpb25bMF0pIDogb3B0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlWYWx1ZTogKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShpc09wdGlvbkFycmF5ID8geHJlZi5mZXRjaElmUmVmKG9wdGlvblsxXSkgOiBvcHRpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KF90aGlzNS5kYXRhLmZpZWxkVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNS5kYXRhLmZpZWxkVmFsdWUgPSBbX3RoaXM1LmRhdGEuZmllbGRWYWx1ZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM1LmRhdGEuY29tYm8gPSBfdGhpczUuaGFzRmllbGRGbGFnKF91dGlsLkFubm90YXRpb25GaWVsZEZsYWcuQ09NQk8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNS5kYXRhLm11bHRpU2VsZWN0ID0gX3RoaXM1Lmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLk1VTFRJU0VMRUNUKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXM1O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfShXaWRnZXRBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgIHZhciBUZXh0QW5ub3RhdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Bbm5vdGF0aW9uMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFRleHRBbm5vdGF0aW9uLCBfQW5ub3RhdGlvbjIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUZXh0QW5ub3RhdGlvbihwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzNjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUZXh0QW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgREVGQVVMVF9JQ09OX1NJWkUgPSAyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoVGV4dEFubm90YXRpb24pLmNhbGwodGhpcywgcGFyYW1ldGVycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuVEVYVDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpczYuZGF0YS5oYXNBcHBlYXJhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5kYXRhLm5hbWUgPSAnTm9JY29uJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuZGF0YS5yZWN0WzFdID0gX3RoaXM2LmRhdGEucmVjdFszXSAtIERFRkFVTFRfSUNPTl9TSVpFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuZGF0YS5yZWN0WzJdID0gX3RoaXM2LmRhdGEucmVjdFswXSArIERFRkFVTFRfSUNPTl9TSVpFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuZGF0YS5uYW1lID0gcGFyYW1ldGVycy5kaWN0LmhhcygnTmFtZScpID8gcGFyYW1ldGVycy5kaWN0LmdldCgnTmFtZScpLm5hbWUgOiAnTm90ZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM2Ll9wcmVwYXJlUG9wdXAocGFyYW1ldGVycy5kaWN0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUZXh0QW5ub3RhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfShBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgIHZhciBMaW5rQW5ub3RhdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Bbm5vdGF0aW9uMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKExpbmtBbm5vdGF0aW9uLCBfQW5ub3RhdGlvbjMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBMaW5rQW5ub3RhdGlvbihwYXJhbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM3O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExpbmtBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihMaW5rQW5ub3RhdGlvbikuY2FsbCh0aGlzLCBwYXJhbXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczcuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLkxJTks7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfb2JqLkNhdGFsb2cucGFyc2VEZXN0RGljdGlvbmFyeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3REaWN0OiBwYXJhbXMuZGljdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqOiBfdGhpczcuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jQmFzZVVybDogcGFyYW1zLnBkZk1hbmFnZXIuZG9jQmFzZVVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExpbmtBbm5vdGF0aW9uO1xuICAgICAgICAgICAgICAgICAgICB9KEFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBvcHVwQW5ub3RhdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Bbm5vdGF0aW9uNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFBvcHVwQW5ub3RhdGlvbiwgX0Fubm90YXRpb240KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUG9wdXBBbm5vdGF0aW9uKHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBvcHVwQW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczggPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoUG9wdXBBbm5vdGF0aW9uKS5jYWxsKHRoaXMsIHBhcmFtZXRlcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczguZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLlBPUFVQO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gcGFyYW1ldGVycy5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRJdGVtID0gZGljdC5nZXQoJ1BhcmVudCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnUG9wdXAgYW5ub3RhdGlvbiBoYXMgYSBtaXNzaW5nIG9yIGludmFsaWQgcGFyZW50IGFubm90YXRpb24uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpczgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRTdWJ0eXBlID0gcGFyZW50SXRlbS5nZXQoJ1N1YnR5cGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczguZGF0YS5wYXJlbnRUeXBlID0gKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkocGFyZW50U3VidHlwZSkgPyBwYXJlbnRTdWJ0eXBlLm5hbWUgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzOC5kYXRhLnBhcmVudElkID0gZGljdC5nZXRSYXcoJ1BhcmVudCcpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM4LmRhdGEudGl0bGUgPSAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKHBhcmVudEl0ZW0uZ2V0KCdUJykgfHwgJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzOC5kYXRhLmNvbnRlbnRzID0gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShwYXJlbnRJdGVtLmdldCgnQ29udGVudHMnKSB8fCAnJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEl0ZW0uaGFzKCdDJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM4LmRhdGEuY29sb3IgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzOC5zZXRDb2xvcihwYXJlbnRJdGVtLmdldEFycmF5KCdDJykpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzOC5kYXRhLmNvbG9yID0gX3RoaXM4LmNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX3RoaXM4LnZpZXdhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRGbGFncyA9IHBhcmVudEl0ZW0uZ2V0KCdGJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzOC5faXNWaWV3YWJsZShwYXJlbnRGbGFncykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzOC5zZXRGbGFncyhwYXJlbnRGbGFncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXM4O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUG9wdXBBbm5vdGF0aW9uO1xuICAgICAgICAgICAgICAgICAgICB9KEFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgdmFyIExpbmVBbm5vdGF0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0Fubm90YXRpb241KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoTGluZUFubm90YXRpb24sIF9Bbm5vdGF0aW9uNSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIExpbmVBbm5vdGF0aW9uKHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExpbmVBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzOSA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihMaW5lQW5ub3RhdGlvbikuY2FsbCh0aGlzLCBwYXJhbWV0ZXJzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM5LmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5MSU5FO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gcGFyYW1ldGVycy5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzOS5kYXRhLmxpbmVDb29yZGluYXRlcyA9IF91dGlsLlV0aWwubm9ybWFsaXplUmVjdChkaWN0LmdldEFycmF5KCdMJykpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM5Ll9wcmVwYXJlUG9wdXAoZGljdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXM5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTGluZUFubm90YXRpb247XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICB2YXIgU3F1YXJlQW5ub3RhdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Bbm5vdGF0aW9uNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFNxdWFyZUFubm90YXRpb24sIF9Bbm5vdGF0aW9uNik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFNxdWFyZUFubm90YXRpb24ocGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczEwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNxdWFyZUFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxMCA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihTcXVhcmVBbm5vdGF0aW9uKS5jYWxsKHRoaXMsIHBhcmFtZXRlcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczEwLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5TUVVBUkU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczEwLl9wcmVwYXJlUG9wdXAocGFyYW1ldGVycy5kaWN0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3F1YXJlQW5ub3RhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfShBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgIHZhciBDaXJjbGVBbm5vdGF0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0Fubm90YXRpb243KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoQ2lyY2xlQW5ub3RhdGlvbiwgX0Fubm90YXRpb243KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQ2lyY2xlQW5ub3RhdGlvbihwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMTE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ2lyY2xlQW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczExID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKENpcmNsZUFubm90YXRpb24pLmNhbGwodGhpcywgcGFyYW1ldGVycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTEuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLkNJUkNMRTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTEuX3ByZXBhcmVQb3B1cChwYXJhbWV0ZXJzLmRpY3QpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDaXJjbGVBbm5vdGF0aW9uO1xuICAgICAgICAgICAgICAgICAgICB9KEFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBvbHlsaW5lQW5ub3RhdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Bbm5vdGF0aW9uOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFBvbHlsaW5lQW5ub3RhdGlvbiwgX0Fubm90YXRpb244KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUG9seWxpbmVBbm5vdGF0aW9uKHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMxMjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQb2x5bGluZUFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxMiA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihQb2x5bGluZUFubm90YXRpb24pLmNhbGwodGhpcywgcGFyYW1ldGVycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTIuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLlBPTFlMSU5FO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gcGFyYW1ldGVycy5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYXdWZXJ0aWNlcyA9IGRpY3QuZ2V0QXJyYXkoJ1ZlcnRpY2VzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxMi5kYXRhLnZlcnRpY2VzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSByYXdWZXJ0aWNlcy5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTIuZGF0YS52ZXJ0aWNlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IHJhd1ZlcnRpY2VzW2ldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogcmF3VmVydGljZXNbaSArIDFdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTIuX3ByZXBhcmVQb3B1cChkaWN0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUG9seWxpbmVBbm5vdGF0aW9uO1xuICAgICAgICAgICAgICAgICAgICB9KEFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBvbHlnb25Bbm5vdGF0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX1BvbHlsaW5lQW5ub3RhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFBvbHlnb25Bbm5vdGF0aW9uLCBfUG9seWxpbmVBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUG9seWdvbkFubm90YXRpb24ocGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczEzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBvbHlnb25Bbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoUG9seWdvbkFubm90YXRpb24pLmNhbGwodGhpcywgcGFyYW1ldGVycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLlBPTFlHT047XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMTM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQb2x5Z29uQW5ub3RhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfShQb2x5bGluZUFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgdmFyIElua0Fubm90YXRpb24gPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQW5ub3RhdGlvbjkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhJbmtBbm5vdGF0aW9uLCBfQW5ub3RhdGlvbjkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJbmtBbm5vdGF0aW9uKHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMxNDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBJbmtBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTQgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoSW5rQW5ub3RhdGlvbikuY2FsbCh0aGlzLCBwYXJhbWV0ZXJzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxNC5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuSU5LO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gcGFyYW1ldGVycy5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4cmVmID0gcGFyYW1ldGVycy54cmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcmlnaW5hbElua0xpc3RzID0gZGljdC5nZXRBcnJheSgnSW5rTGlzdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTQuZGF0YS5pbmtMaXN0cyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gb3JpZ2luYWxJbmtMaXN0cy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTQuZGF0YS5pbmtMaXN0cy5wdXNoKFtdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgamogPSBvcmlnaW5hbElua0xpc3RzW2ldLmxlbmd0aDsgaiA8IGpqOyBqICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTQuZGF0YS5pbmtMaXN0c1tpXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiB4cmVmLmZldGNoSWZSZWYob3JpZ2luYWxJbmtMaXN0c1tpXVtqXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogeHJlZi5mZXRjaElmUmVmKG9yaWdpbmFsSW5rTGlzdHNbaV1baiArIDFdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczE0Ll9wcmVwYXJlUG9wdXAoZGljdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMxNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElua0Fubm90YXRpb247XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICB2YXIgSGlnaGxpZ2h0QW5ub3RhdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Bbm5vdGF0aW9uMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhIaWdobGlnaHRBbm5vdGF0aW9uLCBfQW5ub3RhdGlvbjEwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSGlnaGxpZ2h0QW5ub3RhdGlvbihwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMTU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSGlnaGxpZ2h0QW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczE1ID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKEhpZ2hsaWdodEFubm90YXRpb24pLmNhbGwodGhpcywgcGFyYW1ldGVycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTUuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLkhJR0hMSUdIVDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTUuX3ByZXBhcmVQb3B1cChwYXJhbWV0ZXJzLmRpY3QpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBIaWdobGlnaHRBbm5vdGF0aW9uO1xuICAgICAgICAgICAgICAgICAgICB9KEFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgdmFyIFVuZGVybGluZUFubm90YXRpb24gPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQW5ub3RhdGlvbjExKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoVW5kZXJsaW5lQW5ub3RhdGlvbiwgX0Fubm90YXRpb24xMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFVuZGVybGluZUFubm90YXRpb24ocGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczE2O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFVuZGVybGluZUFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxNiA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihVbmRlcmxpbmVBbm5vdGF0aW9uKS5jYWxsKHRoaXMsIHBhcmFtZXRlcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczE2LmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5VTkRFUkxJTkU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczE2Ll9wcmVwYXJlUG9wdXAocGFyYW1ldGVycy5kaWN0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVW5kZXJsaW5lQW5ub3RhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfShBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgIHZhciBTcXVpZ2dseUFubm90YXRpb24gPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQW5ub3RhdGlvbjEyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoU3F1aWdnbHlBbm5vdGF0aW9uLCBfQW5ub3RhdGlvbjEyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gU3F1aWdnbHlBbm5vdGF0aW9uKHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMxNztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTcXVpZ2dseUFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxNyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihTcXVpZ2dseUFubm90YXRpb24pLmNhbGwodGhpcywgcGFyYW1ldGVycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTcuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLlNRVUlHR0xZO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxNy5fcHJlcGFyZVBvcHVwKHBhcmFtZXRlcnMuZGljdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMxNztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNxdWlnZ2x5QW5ub3RhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfShBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgIHZhciBTdHJpa2VPdXRBbm5vdGF0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0Fubm90YXRpb24xMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFN0cmlrZU91dEFubm90YXRpb24sIF9Bbm5vdGF0aW9uMTMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBTdHJpa2VPdXRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMxODtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdHJpa2VPdXRBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTggPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoU3RyaWtlT3V0QW5ub3RhdGlvbikuY2FsbCh0aGlzLCBwYXJhbWV0ZXJzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxOC5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuU1RSSUtFT1VUO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxOC5fcHJlcGFyZVBvcHVwKHBhcmFtZXRlcnMuZGljdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMxODtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmlrZU91dEFubm90YXRpb247XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICB2YXIgU3RhbXBBbm5vdGF0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0Fubm90YXRpb24xNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFN0YW1wQW5ub3RhdGlvbiwgX0Fubm90YXRpb24xNCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFN0YW1wQW5ub3RhdGlvbihwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMTk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3RhbXBBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTkgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoU3RhbXBBbm5vdGF0aW9uKS5jYWxsKHRoaXMsIHBhcmFtZXRlcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczE5LmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5TVEFNUDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTkuX3ByZXBhcmVQb3B1cChwYXJhbWV0ZXJzLmRpY3QpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMTk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdGFtcEFubm90YXRpb247XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICB2YXIgRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0Fubm90YXRpb24xNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKEZpbGVBdHRhY2htZW50QW5ub3RhdGlvbiwgX0Fubm90YXRpb24xNSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEZpbGVBdHRhY2htZW50QW5ub3RhdGlvbihwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMjA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMjAgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uKS5jYWxsKHRoaXMsIHBhcmFtZXRlcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZSA9IG5ldyBfb2JqLkZpbGVTcGVjKHBhcmFtZXRlcnMuZGljdC5nZXQoJ0ZTJyksIHBhcmFtZXRlcnMueHJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyMC5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuRklMRUFUVEFDSE1FTlQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyMC5kYXRhLmZpbGUgPSBmaWxlLnNlcmlhbGl6YWJsZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMjAuX3ByZXBhcmVQb3B1cChwYXJhbWV0ZXJzLmRpY3QpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMjA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGaWxlQXR0YWNobWVudEFubm90YXRpb247XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE3MCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuT3BlcmF0b3JMaXN0ID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2KTtcblxuICAgICAgICAgICAgICAgIHZhciBRdWV1ZU9wdGltaXplciA9IGZ1bmN0aW9uIFF1ZXVlT3B0aW1pemVyQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYWRkU3RhdGUocGFyZW50U3RhdGUsIHBhdHRlcm4sIGNoZWNrRm4sIGl0ZXJhdGVGbiwgcHJvY2Vzc0ZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBwYXJlbnRTdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gcGF0dGVybi5sZW5ndGggLSAxOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gcGF0dGVybltpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlW2l0ZW1dIHx8IChzdGF0ZVtpdGVtXSA9IFtdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbcGF0dGVybltwYXR0ZXJuLmxlbmd0aCAtIDFdXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0ZuOiBjaGVja0ZuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGVGbjogaXRlcmF0ZUZuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NGbjogcHJvY2Vzc0ZuXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaGFuZGxlUGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrKGlGaXJzdFNhdmUsIGNvdW50LCBmbkFycmF5LCBhcmdzQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpRmlyc3RQSU1YTyA9IGlGaXJzdFNhdmUgKyAyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJnID0gYXJnc0FycmF5W2lGaXJzdFBJTVhPICsgNCAqIGldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWFnZU1hc2sgPSBhcmcubGVuZ3RoID09PSAxICYmIGFyZ1swXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZU1hc2sgJiYgaW1hZ2VNYXNrLndpZHRoID09PSAxICYmIGltYWdlTWFzay5oZWlnaHQgPT09IDEgJiYgKCFpbWFnZU1hc2suZGF0YS5sZW5ndGggfHwgaW1hZ2VNYXNrLmRhdGEubGVuZ3RoID09PSAxICYmIGltYWdlTWFzay5kYXRhWzBdID09PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbkFycmF5W2lGaXJzdFBJTVhPICsgNCAqIGldID0gX3V0aWwuT1BTLnBhaW50U29saWRDb2xvckltYWdlTWFzaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3VudCAtIGk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgSW5pdGlhbFN0YXRlID0gW107XG4gICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKEluaXRpYWxTdGF0ZSwgW191dGlsLk9QUy5zYXZlLCBfdXRpbC5PUFMudHJhbnNmb3JtLCBfdXRpbC5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QsIF91dGlsLk9QUy5yZXN0b3JlXSwgbnVsbCwgZnVuY3Rpb24gaXRlcmF0ZUlubGluZUltYWdlR3JvdXAoY29udGV4dCwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaUZpcnN0U2F2ZSA9IGNvbnRleHQuaUN1cnIgLSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IChpIC0gaUZpcnN0U2F2ZSkgJSA0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHBvcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5zYXZlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnRyYW5zZm9ybTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5yZXN0b3JlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiBmb3VuZElubGluZUltYWdlR3JvdXAoY29udGV4dCwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE1JTl9JTUFHRVNfSU5fSU5MSU5FX0lNQUdFU19CTE9DSyA9IDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE1BWF9JTUFHRVNfSU5fSU5MSU5FX0lNQUdFU19CTE9DSyA9IDIwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBNQVhfV0lEVEggPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIElNQUdFX1BBRERJTkcgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FycmF5ID0gY29udGV4dC5hcmdzQXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyciA9IGNvbnRleHQuaUN1cnI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaUZpcnN0U2F2ZSA9IGN1cnIgLSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlGaXJzdFRyYW5zZm9ybSA9IGN1cnIgLSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlGaXJzdFBJSVhPID0gY3VyciAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBNYXRoLm1pbihNYXRoLmZsb29yKChpIC0gaUZpcnN0U2F2ZSkgLyA0KSwgTUFYX0lNQUdFU19JTl9JTkxJTkVfSU1BR0VTX0JMT0NLKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50IDwgTUlOX0lNQUdFU19JTl9JTkxJTkVfSU1BR0VTX0JMT0NLKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgLSAoaSAtIGlGaXJzdFNhdmUpICUgNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heFggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hcCA9IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heExpbmVIZWlnaHQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRYID0gSU1BR0VfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50WSA9IElNQUdFX1BBRERJTkc7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChxID0gMDsgcSA8IGNvdW50OyBxKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybSArIChxIDw8IDIpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1nID0gYXJnc0FycmF5W2lGaXJzdFBJSVhPICsgKHEgPDwgMildWzBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRYICsgaW1nLndpZHRoID4gTUFYX1dJRFRIKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFggPSBNYXRoLm1heChtYXhYLCBjdXJyZW50WCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IG1heExpbmVIZWlnaHQgKyAyICogSU1BR0VfUEFERElORztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBjdXJyZW50WCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogY3VycmVudFksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IGltZy53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogaW1nLmhlaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRYICs9IGltZy53aWR0aCArIDIgKiBJTUFHRV9QQURESU5HO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heExpbmVIZWlnaHQgPSBNYXRoLm1heChtYXhMaW5lSGVpZ2h0LCBpbWcuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZ1dpZHRoID0gTWF0aC5tYXgobWF4WCwgY3VycmVudFgpICsgSU1BR0VfUEFERElORztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWdIZWlnaHQgPSBjdXJyZW50WSArIG1heExpbmVIZWlnaHQgKyBJTUFHRV9QQURESU5HO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZ0RhdGEgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoaW1nV2lkdGggKiBpbWdIZWlnaHQgKiA0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWdSb3dTaXplID0gaW1nV2lkdGggPDwgMjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChxID0gMDsgcSA8IGNvdW50OyBxKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGFyZ3NBcnJheVtpRmlyc3RQSUlYTyArIChxIDw8IDIpXVswXS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByb3dTaXplID0gbWFwW3FdLncgPDwgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YU9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IG1hcFtxXS54ICsgbWFwW3FdLnkgKiBpbWdXaWR0aCA8PCAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGEuc2V0KGRhdGEuc3ViYXJyYXkoMCwgcm93U2l6ZSksIG9mZnNldCAtIGltZ1Jvd1NpemUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDAsIGtrID0gbWFwW3FdLmg7IGsgPCBrazsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGEuc2V0KGRhdGEuc3ViYXJyYXkoZGF0YU9mZnNldCwgZGF0YU9mZnNldCArIHJvd1NpemUpLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhT2Zmc2V0ICs9IHJvd1NpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBpbWdSb3dTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGEuc2V0KGRhdGEuc3ViYXJyYXkoZGF0YU9mZnNldCAtIHJvd1NpemUsIGRhdGFPZmZzZXQpLCBvZmZzZXQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG9mZnNldCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0IC0gNF0gPSBkYXRhW29mZnNldF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0IC0gM10gPSBkYXRhW29mZnNldCArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW29mZnNldCAtIDJdID0gZGF0YVtvZmZzZXQgKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtvZmZzZXQgLSAxXSA9IGRhdGFbb2Zmc2V0ICsgM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0ICsgcm93U2l6ZV0gPSBkYXRhW29mZnNldCArIHJvd1NpemUgLSA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtvZmZzZXQgKyByb3dTaXplICsgMV0gPSBkYXRhW29mZnNldCArIHJvd1NpemUgLSAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtvZmZzZXQgKyByb3dTaXplICsgMl0gPSBkYXRhW29mZnNldCArIHJvd1NpemUgLSAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtvZmZzZXQgKyByb3dTaXplICsgM10gPSBkYXRhW29mZnNldCArIHJvd1NpemUgLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0IC09IGltZ1Jvd1NpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmbkFycmF5LnNwbGljZShpRmlyc3RTYXZlLCBjb3VudCAqIDQsIF91dGlsLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdEdyb3VwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NBcnJheS5zcGxpY2UoaUZpcnN0U2F2ZSwgY291bnQgKiA0LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBpbWdXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGltZ0hlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kOiBfdXRpbC5JbWFnZUtpbmQuUkdCQV8zMkJQUCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBpbWdEYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBtYXBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpRmlyc3RTYXZlICsgMTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKEluaXRpYWxTdGF0ZSwgW191dGlsLk9QUy5zYXZlLCBfdXRpbC5PUFMudHJhbnNmb3JtLCBfdXRpbC5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LCBfdXRpbC5PUFMucmVzdG9yZV0sIG51bGwsIGZ1bmN0aW9uIGl0ZXJhdGVJbWFnZU1hc2tHcm91cChjb250ZXh0LCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm5BcnJheSA9IGNvbnRleHQuZm5BcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpRmlyc3RTYXZlID0gY29udGV4dC5pQ3VyciAtIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gKGkgLSBpRmlyc3RTYXZlKSAlIDQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnNhdmU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbkFycmF5W2ldID09PSBfdXRpbC5PUFMudHJhbnNmb3JtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5yZXN0b3JlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiBmb3VuZEltYWdlTWFza0dyb3VwKGNvbnRleHQsIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBNSU5fSU1BR0VTX0lOX01BU0tTX0JMT0NLID0gMTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgTUFYX0lNQUdFU19JTl9NQVNLU19CTE9DSyA9IDEwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBNQVhfU0FNRV9JTUFHRVNfSU5fTUFTS1NfQkxPQ0sgPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FycmF5ID0gY29udGV4dC5hcmdzQXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyciA9IGNvbnRleHQuaUN1cnI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaUZpcnN0U2F2ZSA9IGN1cnIgLSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlGaXJzdFRyYW5zZm9ybSA9IGN1cnIgLSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlGaXJzdFBJTVhPID0gY3VyciAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBNYXRoLmZsb29yKChpIC0gaUZpcnN0U2F2ZSkgLyA0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gaGFuZGxlUGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrKGlGaXJzdFNhdmUsIGNvdW50LCBmbkFycmF5LCBhcmdzQXJyYXkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPCBNSU5fSU1BR0VTX0lOX01BU0tTX0JMT0NLKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgLSAoaSAtIGlGaXJzdFNhdmUpICUgNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNTYW1lSW1hZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpVHJhbnNmb3JtLCB0cmFuc2Zvcm1BcmdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0UElNWE9BcmcwID0gYXJnc0FycmF5W2lGaXJzdFBJTVhPXVswXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzFdID09PSAwICYmIGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzJdID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTYW1lSW1hZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdFRyYW5zZm9ybUFyZzAgPSBhcmdzQXJyYXlbaUZpcnN0VHJhbnNmb3JtXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RUcmFuc2Zvcm1BcmczID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaVRyYW5zZm9ybSA9IGlGaXJzdFRyYW5zZm9ybSArIDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlQSU1YTyA9IGlGaXJzdFBJTVhPICsgNDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocSA9IDE7IHEgPCBjb3VudDsgcSsrLCBpVHJhbnNmb3JtICs9IDQsIGlQSU1YTyArPSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybUFyZ3MgPSBhcmdzQXJyYXlbaVRyYW5zZm9ybV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NBcnJheVtpUElNWE9dWzBdICE9PSBmaXJzdFBJTVhPQXJnMCB8fCB0cmFuc2Zvcm1BcmdzWzBdICE9PSBmaXJzdFRyYW5zZm9ybUFyZzAgfHwgdHJhbnNmb3JtQXJnc1sxXSAhPT0gMCB8fCB0cmFuc2Zvcm1BcmdzWzJdICE9PSAwIHx8IHRyYW5zZm9ybUFyZ3NbM10gIT09IGZpcnN0VHJhbnNmb3JtQXJnMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEgPCBNSU5fSU1BR0VTX0lOX01BU0tTX0JMT0NLKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTYW1lSW1hZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSBxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2FtZUltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSBNYXRoLm1pbihjb3VudCwgTUFYX1NBTUVfSU1BR0VTX0lOX01BU0tTX0JMT0NLKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlUcmFuc2Zvcm0gPSBpRmlyc3RUcmFuc2Zvcm07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHEgPSAwOyBxIDwgY291bnQ7IHErKywgaVRyYW5zZm9ybSArPSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybUFyZ3MgPSBhcmdzQXJyYXlbaVRyYW5zZm9ybV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uc1txIDw8IDFdID0gdHJhbnNmb3JtQXJnc1s0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zWyhxIDw8IDEpICsgMV0gPSB0cmFuc2Zvcm1BcmdzWzVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuQXJyYXkuc3BsaWNlKGlGaXJzdFNhdmUsIGNvdW50ICogNCwgX3V0aWwuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FycmF5LnNwbGljZShpRmlyc3RTYXZlLCBjb3VudCAqIDQsIFtmaXJzdFBJTVhPQXJnMCwgZmlyc3RUcmFuc2Zvcm1BcmcwLCBmaXJzdFRyYW5zZm9ybUFyZzMsIHBvc2l0aW9uc10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IE1hdGgubWluKGNvdW50LCBNQVhfSU1BR0VTX0lOX01BU0tTX0JMT0NLKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2VzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHEgPSAwOyBxIDwgY291bnQ7IHErKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1BcmdzID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybSArIChxIDw8IDIpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hc2tQYXJhbXMgPSBhcmdzQXJyYXlbaUZpcnN0UElNWE8gKyAocSA8PCAyKV1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IG1hc2tQYXJhbXMuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBtYXNrUGFyYW1zLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBtYXNrUGFyYW1zLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtQXJnc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbkFycmF5LnNwbGljZShpRmlyc3RTYXZlLCBjb3VudCAqIDQsIF91dGlsLk9QUy5wYWludEltYWdlTWFza1hPYmplY3RHcm91cCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FycmF5LnNwbGljZShpRmlyc3RTYXZlLCBjb3VudCAqIDQsIFtpbWFnZXNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlGaXJzdFNhdmUgKyAxO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUoSW5pdGlhbFN0YXRlLCBbX3V0aWwuT1BTLnNhdmUsIF91dGlsLk9QUy50cmFuc2Zvcm0sIF91dGlsLk9QUy5wYWludEltYWdlWE9iamVjdCwgX3V0aWwuT1BTLnJlc3RvcmVdLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3NBcnJheSA9IGNvbnRleHQuYXJnc0FycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlGaXJzdFRyYW5zZm9ybSA9IGNvbnRleHQuaUN1cnIgLSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzFdID09PSAwICYmIGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzJdID09PSAwO1xuICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoY29udGV4dCwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FycmF5ID0gY29udGV4dC5hcmdzQXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaUZpcnN0U2F2ZSA9IGNvbnRleHQuaUN1cnIgLSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IChpIC0gaUZpcnN0U2F2ZSkgJSA0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHBvcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5zYXZlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm5BcnJheVtpXSAhPT0gX3V0aWwuT1BTLnRyYW5zZm9ybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlGaXJzdFRyYW5zZm9ybSA9IGNvbnRleHQuaUN1cnIgLSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RUcmFuc2Zvcm1BcmcwID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdFRyYW5zZm9ybUFyZzMgPSBhcmdzQXJyYXlbaUZpcnN0VHJhbnNmb3JtXVszXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc0FycmF5W2ldWzBdICE9PSBmaXJzdFRyYW5zZm9ybUFyZzAgfHwgYXJnc0FycmF5W2ldWzFdICE9PSAwIHx8IGFyZ3NBcnJheVtpXVsyXSAhPT0gMCB8fCBhcmdzQXJyYXlbaV1bM10gIT09IGZpcnN0VHJhbnNmb3JtQXJnMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbkFycmF5W2ldICE9PSBfdXRpbC5PUFMucGFpbnRJbWFnZVhPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpRmlyc3RQSVhPID0gY29udGV4dC5pQ3VyciAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdFBJWE9BcmcwID0gYXJnc0FycmF5W2lGaXJzdFBJWE9dWzBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmdzQXJyYXlbaV1bMF0gIT09IGZpcnN0UElYT0FyZzApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnJlc3RvcmU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChjb250ZXh0LCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgTUlOX0lNQUdFU19JTl9CTE9DSyA9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgTUFYX0lNQUdFU19JTl9CTE9DSyA9IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm5BcnJheSA9IGNvbnRleHQuZm5BcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzQXJyYXkgPSBjb250ZXh0LmFyZ3NBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyID0gY29udGV4dC5pQ3VycjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpRmlyc3RTYXZlID0gY3VyciAtIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaUZpcnN0VHJhbnNmb3JtID0gY3VyciAtIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaUZpcnN0UElYTyA9IGN1cnIgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0UElYT0FyZzAgPSBhcmdzQXJyYXlbaUZpcnN0UElYT11bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RUcmFuc2Zvcm1BcmcwID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RUcmFuc2Zvcm1BcmczID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bM107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBNYXRoLm1pbihNYXRoLmZsb29yKChpIC0gaUZpcnN0U2F2ZSkgLyA0KSwgTUFYX0lNQUdFU19JTl9CTE9DSyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA8IE1JTl9JTUFHRVNfSU5fQkxPQ0spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSAtIChpIC0gaUZpcnN0U2F2ZSkgJSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlUcmFuc2Zvcm0gPSBpRmlyc3RUcmFuc2Zvcm07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHEgPSAwOyBxIDwgY291bnQ7IHErKywgaVRyYW5zZm9ybSArPSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybUFyZ3MgPSBhcmdzQXJyYXlbaVRyYW5zZm9ybV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zW3EgPDwgMV0gPSB0cmFuc2Zvcm1BcmdzWzRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uc1socSA8PCAxKSArIDFdID0gdHJhbnNmb3JtQXJnc1s1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbZmlyc3RQSVhPQXJnMCwgZmlyc3RUcmFuc2Zvcm1BcmcwLCBmaXJzdFRyYW5zZm9ybUFyZzMsIHBvc2l0aW9uc107XG4gICAgICAgICAgICAgICAgICAgICAgICBmbkFycmF5LnNwbGljZShpRmlyc3RTYXZlLCBjb3VudCAqIDQsIF91dGlsLk9QUy5wYWludEltYWdlWE9iamVjdFJlcGVhdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzQXJyYXkuc3BsaWNlKGlGaXJzdFNhdmUsIGNvdW50ICogNCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaUZpcnN0U2F2ZSArIDE7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShJbml0aWFsU3RhdGUsIFtfdXRpbC5PUFMuYmVnaW5UZXh0LCBfdXRpbC5PUFMuc2V0Rm9udCwgX3V0aWwuT1BTLnNldFRleHRNYXRyaXgsIF91dGlsLk9QUy5zaG93VGV4dCwgX3V0aWwuT1BTLmVuZFRleHRdLCBudWxsLCBmdW5jdGlvbiAoY29udGV4dCwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FycmF5ID0gY29udGV4dC5hcmdzQXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaUZpcnN0U2F2ZSA9IGNvbnRleHQuaUN1cnIgLSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IChpIC0gaUZpcnN0U2F2ZSkgJSA1O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHBvcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5iZWdpblRleHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbkFycmF5W2ldID09PSBfdXRpbC5PUFMuc2V0Rm9udDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5zZXRUZXh0TWF0cml4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm5BcnJheVtpXSAhPT0gX3V0aWwuT1BTLnNob3dUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaUZpcnN0U2V0Rm9udCA9IGNvbnRleHQuaUN1cnIgLSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RTZXRGb250QXJnMCA9IGFyZ3NBcnJheVtpRmlyc3RTZXRGb250XVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0U2V0Rm9udEFyZzEgPSBhcmdzQXJyYXlbaUZpcnN0U2V0Rm9udF1bMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NBcnJheVtpXVswXSAhPT0gZmlyc3RTZXRGb250QXJnMCB8fCBhcmdzQXJyYXlbaV1bMV0gIT09IGZpcnN0U2V0Rm9udEFyZzEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLmVuZFRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChjb250ZXh0LCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgTUlOX0NIQVJTX0lOX0JMT0NLID0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBNQVhfQ0hBUlNfSU5fQkxPQ0sgPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FycmF5ID0gY29udGV4dC5hcmdzQXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyciA9IGNvbnRleHQuaUN1cnI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaUZpcnN0QmVnaW5UZXh0ID0gY3VyciAtIDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaUZpcnN0U2V0Rm9udCA9IGN1cnIgLSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlGaXJzdFNldFRleHRNYXRyaXggPSBjdXJyIC0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpRmlyc3RTaG93VGV4dCA9IGN1cnIgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlGaXJzdEVuZFRleHQgPSBjdXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0U2V0Rm9udEFyZzAgPSBhcmdzQXJyYXlbaUZpcnN0U2V0Rm9udF1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RTZXRGb250QXJnMSA9IGFyZ3NBcnJheVtpRmlyc3RTZXRGb250XVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IE1hdGgubWluKE1hdGguZmxvb3IoKGkgLSBpRmlyc3RCZWdpblRleHQpIC8gNSksIE1BWF9DSEFSU19JTl9CTE9DSyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA8IE1JTl9DSEFSU19JTl9CTE9DSykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpIC0gKGkgLSBpRmlyc3RCZWdpblRleHQpICUgNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlGaXJzdCA9IGlGaXJzdEJlZ2luVGV4dDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlGaXJzdEJlZ2luVGV4dCA+PSA0ICYmIGZuQXJyYXlbaUZpcnN0QmVnaW5UZXh0IC0gNF0gPT09IGZuQXJyYXlbaUZpcnN0U2V0Rm9udF0gJiYgZm5BcnJheVtpRmlyc3RCZWdpblRleHQgLSAzXSA9PT0gZm5BcnJheVtpRmlyc3RTZXRUZXh0TWF0cml4XSAmJiBmbkFycmF5W2lGaXJzdEJlZ2luVGV4dCAtIDJdID09PSBmbkFycmF5W2lGaXJzdFNob3dUZXh0XSAmJiBmbkFycmF5W2lGaXJzdEJlZ2luVGV4dCAtIDFdID09PSBmbkFycmF5W2lGaXJzdEVuZFRleHRdICYmIGFyZ3NBcnJheVtpRmlyc3RCZWdpblRleHQgLSA0XVswXSA9PT0gZmlyc3RTZXRGb250QXJnMCAmJiBhcmdzQXJyYXlbaUZpcnN0QmVnaW5UZXh0IC0gNF1bMV0gPT09IGZpcnN0U2V0Rm9udEFyZzEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlGaXJzdCAtPSA1O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaUVuZFRleHQgPSBpRmlyc3QgKyA0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBxID0gMTsgcSA8IGNvdW50OyBxKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbkFycmF5LnNwbGljZShpRW5kVGV4dCwgMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FycmF5LnNwbGljZShpRW5kVGV4dCwgMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaUVuZFRleHQgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlFbmRUZXh0ICsgMTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUXVldWVPcHRpbWl6ZXIocXVldWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVldWUgPSBxdWV1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlDdXJyOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuQXJyYXk6IHF1ZXVlLmZuQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FycmF5OiBxdWV1ZS5hcmdzQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFByb2Nlc3NlZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBRdWV1ZU9wdGltaXplci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfb3B0aW1pemU6IGZ1bmN0aW9uIF9vcHRpbWl6ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm5BcnJheSA9IHRoaXMucXVldWUuZm5BcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHRoaXMubGFzdFByb2Nlc3NlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWkgPSBmbkFycmF5Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHRoaXMubWF0Y2g7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXRlICYmICFtYXRjaCAmJiBpICsgMSA9PT0gaWkgJiYgIUluaXRpYWxTdGF0ZVtmbkFycmF5W2ldXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RQcm9jZXNzZWQgPSBpaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBpaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVyYXRlID0gKDAsIG1hdGNoLml0ZXJhdGVGbikoY29udGV4dCwgaSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gKDAsIG1hdGNoLnByb2Nlc3NGbikoY29udGV4dCwgaSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWkgPSBmbkFycmF5Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj0gaWkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gKHN0YXRlIHx8IEluaXRpYWxTdGF0ZSlbZm5BcnJheVtpXV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZSB8fCBBcnJheS5pc0FycmF5KHN0YXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmlDdXJyID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5jaGVja0ZuICYmICEoMCwgc3RhdGUuY2hlY2tGbikoY29udGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoID0gbWF0Y2g7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0UHJvY2Vzc2VkID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiBwdXNoKGZuLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWV1ZS5mbkFycmF5LnB1c2goZm4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVldWUuYXJnc0FycmF5LnB1c2goYXJncyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcHRpbWl6ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoOiBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodGhpcy5tYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5xdWV1ZS5mbkFycmF5Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0UHJvY2Vzc2VkID0gKDAsIHRoaXMubWF0Y2gucHJvY2Vzc0ZuKSh0aGlzLmNvbnRleHQsIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2ggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcHRpbWl6ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0UHJvY2Vzc2VkID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFF1ZXVlT3B0aW1pemVyO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIHZhciBOdWxsT3B0aW1pemVyID0gZnVuY3Rpb24gTnVsbE9wdGltaXplckNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE51bGxPcHRpbWl6ZXIocXVldWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVldWUgPSBxdWV1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIE51bGxPcHRpbWl6ZXIucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gcHVzaChmbiwgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVldWUuZm5BcnJheS5wdXNoKGZuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXVlLmFyZ3NBcnJheS5wdXNoKGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoOiBmdW5jdGlvbiBmbHVzaCgpIHt9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBOdWxsT3B0aW1pemVyO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIHZhciBPcGVyYXRvckxpc3QgPSBmdW5jdGlvbiBPcGVyYXRvckxpc3RDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgQ0hVTktfU0laRSA9IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBDSFVOS19TSVpFX0FCT1VUID0gQ0hVTktfU0laRSAtIDU7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0VHJhbnNmZXJzKHF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmZXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm5BcnJheSA9IHF1ZXVlLmZuQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FycmF5ID0gcXVldWUuYXJnc0FycmF5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBxdWV1ZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChmbkFycmF5W2ldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdEdyb3VwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Q6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJnID0gYXJnc0FycmF5W2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5jYWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlcnMucHVzaChhcmcuZGF0YS5idWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2ZlcnM7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBPcGVyYXRvckxpc3QoaW50ZW50LCBtZXNzYWdlSGFuZGxlciwgcGFnZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyID0gbWVzc2FnZUhhbmRsZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZuQXJyYXkgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXJnc0FycmF5ID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlSGFuZGxlciAmJiB0aGlzLmludGVudCAhPT0gJ29wbGlzdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGltaXplciA9IG5ldyBRdWV1ZU9wdGltaXplcih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpbWl6ZXIgPSBuZXcgTnVsbE9wdGltaXplcih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG90YWxMZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlSW5kZXggPSBwYWdlSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVudCA9IGludGVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2VpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIE9wZXJhdG9yTGlzdC5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFyZ3NBcnJheS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgdG90YWxMZW5ndGgoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RvdGFsTGVuZ3RoICsgdGhpcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRPcDogZnVuY3Rpb24gYWRkT3AoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGltaXplci5wdXNoKGZuLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndlaWdodCsrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMud2VpZ2h0ID49IENIVU5LX1NJWkUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLndlaWdodCA+PSBDSFVOS19TSVpFX0FCT1VUICYmIChmbiA9PT0gX3V0aWwuT1BTLnJlc3RvcmUgfHwgZm4gPT09IF91dGlsLk9QUy5lbmRUZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZERlcGVuZGVuY3k6IGZ1bmN0aW9uIGFkZERlcGVuZGVuY3koZGVwZW5kZW5jeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXBlbmRlbmN5IGluIHRoaXMuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcGVuZGVuY2llc1tkZXBlbmRlbmN5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRPcChfdXRpbC5PUFMuZGVwZW5kZW5jeSwgW2RlcGVuZGVuY3ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGREZXBlbmRlbmNpZXM6IGZ1bmN0aW9uIGFkZERlcGVuZGVuY2llcyhkZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRGVwZW5kZW5jeShrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRPcExpc3Q6IGZ1bmN0aW9uIGFkZE9wTGlzdChvcExpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuZGVwZW5kZW5jaWVzLCBvcExpc3QuZGVwZW5kZW5jaWVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IG9wTGlzdC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkT3Aob3BMaXN0LmZuQXJyYXlbaV0sIG9wTGlzdC5hcmdzQXJyYXlbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRJUjogZnVuY3Rpb24gZ2V0SVIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5BcnJheTogdGhpcy5mbkFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzQXJyYXk6IHRoaXMuYXJnc0FycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg6IHRoaXMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmbHVzaDogZnVuY3Rpb24gZmx1c2gobGFzdENodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpbWl6ZXIuZmx1c2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmZXJzID0gZ2V0VHJhbnNmZXJzKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90b3RhbExlbmd0aCArPSBsZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kKCdSZW5kZXJQYWdlQ2h1bmsnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5BcnJheTogdGhpcy5mbkFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FycmF5OiB0aGlzLmFyZ3NBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaHVuazogbGFzdENodW5rLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBsZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50OiB0aGlzLmludGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRyYW5zZmVycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm5BcnJheS5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXJnc0FycmF5Lmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWlnaHQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW1pemVyLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPcGVyYXRvckxpc3Q7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5PcGVyYXRvckxpc3QgPSBPcGVyYXRvckxpc3Q7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE3MSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUGFydGlhbEV2YWx1YXRvciA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfcmVnZW5lcmF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMikpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2KTtcblxuICAgICAgICAgICAgICAgIHZhciBfY21hcCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTcyKTtcblxuICAgICAgICAgICAgICAgIHZhciBfc3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9wcmltaXRpdmVzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9mb250cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTczKTtcblxuICAgICAgICAgICAgICAgIHZhciBfZW5jb2RpbmdzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNzYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91bmljb2RlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNzkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9zdGFuZGFyZF9mb250cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTc4KTtcblxuICAgICAgICAgICAgICAgIHZhciBfcGF0dGVybiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTgyKTtcblxuICAgICAgICAgICAgICAgIHZhciBfcGFyc2VyID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9iaWRpID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxODMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9jb2xvcnNwYWNlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNjgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9nbHlwaGxpc3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE3Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX21ldHJpY3MgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4NCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2Z1bmN0aW9uID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxODUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9qcGVnX3N0cmVhbSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTYzKTtcblxuICAgICAgICAgICAgICAgIHZhciBfbXVybXVyaGFzaCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTg3KTtcblxuICAgICAgICAgICAgICAgIHZhciBfb3BlcmF0b3JfbGlzdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTcwKTtcblxuICAgICAgICAgICAgICAgIHZhciBfaW1hZ2UgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4OCk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykgeyB0cnkgeyB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7IHZhciB2YWx1ZSA9IGluZm8udmFsdWU7IH0gY2F0Y2ggKGVycm9yKSB7IHJlamVjdChlcnJvcik7IHJldHVybjsgfSBpZiAoaW5mby5kb25lKSB7IHJlc29sdmUodmFsdWUpOyB9IGVsc2UgeyBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgUGFydGlhbEV2YWx1YXRvciA9IGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3JDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgRGVmYXVsdFBhcnRpYWxFdmFsdWF0b3JPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VEYXRhU2NoZW1hOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heEltYWdlU2l6ZTogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlRm9udEZhY2U6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlSW1hZ2VEZWNvZGVyU3VwcG9ydDogX3V0aWwuTmF0aXZlSW1hZ2VEZWNvZGluZy5ERUNPREUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmFsU3VwcG9ydGVkOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gTmF0aXZlSW1hZ2VEZWNvZGVyKF9yZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4cmVmID0gX3JlZi54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlcyA9IF9yZWYucmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBfcmVmLmhhbmRsZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZiRmb3JjZURhdGFTY2hlbWEgPSBfcmVmLmZvcmNlRGF0YVNjaGVtYSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZURhdGFTY2hlbWEgPSBfcmVmJGZvcmNlRGF0YVNjaGVtYSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGZvcmNlRGF0YVNjaGVtYSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZGdW5jdGlvbkZhY3RvcnkgPSBfcmVmLnBkZkZ1bmN0aW9uRmFjdG9yeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlcyA9IHJlc291cmNlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlRGF0YVNjaGVtYSA9IGZvcmNlRGF0YVNjaGVtYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5ID0gcGRmRnVuY3Rpb25GYWN0b3J5O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgTmF0aXZlSW1hZ2VEZWNvZGVyLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbkRlY29kZTogZnVuY3Rpb24gY2FuRGVjb2RlKGltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltYWdlIGluc3RhbmNlb2YgX2pwZWdfc3RyZWFtLkpwZWdTdHJlYW0gJiYgTmF0aXZlSW1hZ2VEZWNvZGVyLmlzRGVjb2RhYmxlKGltYWdlLCB0aGlzLnhyZWYsIHRoaXMucmVzb3VyY2VzLCB0aGlzLnBkZkZ1bmN0aW9uRmFjdG9yeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlOiBmdW5jdGlvbiBkZWNvZGUoaW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGljdCA9IGltYWdlLmRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yU3BhY2UgPSBkaWN0LmdldCgnQ29sb3JTcGFjZScsICdDUycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnBhcnNlKGNvbG9yU3BhY2UsIHRoaXMueHJlZiwgdGhpcy5yZXNvdXJjZXMsIHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgnSnBlZ0RlY29kZScsIFtpbWFnZS5nZXRJUih0aGlzLmZvcmNlRGF0YVNjaGVtYSksIGNvbG9yU3BhY2UubnVtQ29tcHNdKS50aGVuKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9yZWYyLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IF9yZWYyLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gX3JlZjIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9zdHJlYW0uU3RyZWFtKGRhdGEsIDAsIGRhdGEubGVuZ3RoLCBpbWFnZS5kaWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBOYXRpdmVJbWFnZURlY29kZXIuaXNTdXBwb3J0ZWQgPSBmdW5jdGlvbiAoaW1hZ2UsIHhyZWYsIHJlcywgcGRmRnVuY3Rpb25GYWN0b3J5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGljdCA9IGltYWdlLmRpY3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaWN0LmhhcygnRGVjb2RlUGFybXMnKSB8fCBkaWN0LmhhcygnRFAnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNzID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5wYXJzZShkaWN0LmdldCgnQ29sb3JTcGFjZScsICdDUycpLCB4cmVmLCByZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoY3MubmFtZSA9PT0gJ0RldmljZUdyYXknIHx8IGNzLm5hbWUgPT09ICdEZXZpY2VSR0InKSAmJiBjcy5pc0RlZmF1bHREZWNvZGUoZGljdC5nZXRBcnJheSgnRGVjb2RlJywgJ0QnKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgTmF0aXZlSW1hZ2VEZWNvZGVyLmlzRGVjb2RhYmxlID0gZnVuY3Rpb24gKGltYWdlLCB4cmVmLCByZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpY3QgPSBpbWFnZS5kaWN0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGljdC5oYXMoJ0RlY29kZVBhcm1zJykgfHwgZGljdC5oYXMoJ0RQJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjcyA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2UucGFyc2UoZGljdC5nZXQoJ0NvbG9yU3BhY2UnLCAnQ1MnKSwgeHJlZiwgcmVzLCBwZGZGdW5jdGlvbkZhY3RvcnkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnBjID0gZGljdC5nZXQoJ0JpdHNQZXJDb21wb25lbnQnLCAnQlBDJykgfHwgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoY3MubnVtQ29tcHMgPT09IDEgfHwgY3MubnVtQ29tcHMgPT09IDMpICYmIGNzLmlzRGVmYXVsdERlY29kZShkaWN0LmdldEFycmF5KCdEZWNvZGUnLCAnRCcpLCBicGMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3IoX3JlZjMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwZGZNYW5hZ2VyID0gX3JlZjMucGRmTWFuYWdlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmID0gX3JlZjMueHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyID0gX3JlZjMuaGFuZGxlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlSW5kZXggPSBfcmVmMy5wYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRGYWN0b3J5ID0gX3JlZjMuaWRGYWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRDYWNoZSA9IF9yZWYzLmZvbnRDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsdEluQ01hcENhY2hlID0gX3JlZjMuYnVpbHRJbkNNYXBDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmMyRvcHRpb25zID0gX3JlZjMub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0gX3JlZjMkb3B0aW9ucyA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYzJG9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmRnVuY3Rpb25GYWN0b3J5ID0gX3JlZjMucGRmRnVuY3Rpb25GYWN0b3J5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZGZNYW5hZ2VyID0gcGRmTWFuYWdlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlSW5kZXggPSBwYWdlSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlkRmFjdG9yeSA9IGlkRmFjdG9yeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udENhY2hlID0gZm9udENhY2hlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsdEluQ01hcENhY2hlID0gYnVpbHRJbkNNYXBDYWNoZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwgRGVmYXVsdFBhcnRpYWxFdmFsdWF0b3JPcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZGZGdW5jdGlvbkZhY3RvcnkgPSBwZGZGdW5jdGlvbkZhY3Rvcnk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hCdWlsdEluQ01hcCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWY0ID0gX2FzeW5jVG9HZW5lcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVnZW5lcmF0b3IuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmJ1aWx0SW5DTWFwQ2FjaGUuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdChcInJldHVyblwiLCBfdGhpcy5idWlsdEluQ01hcENhY2hlLmdldChuYW1lKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlci5zZW5kV2l0aFByb21pc2UoJ0ZldGNoQnVpbHRJbkNNYXAnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gX2NvbnRleHQuc2VudDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jb21wcmVzc2lvblR5cGUgIT09IF91dGlsLkNNYXBDb21wcmVzc2lvblR5cGUuTk9ORSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuYnVpbHRJbkNNYXBDYWNoZS5zZXQobmFtZSwgZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGRhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIF9jYWxsZWUsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVmNC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBUSU1FX1NMT1RfRFVSQVRJT05fTVMgPSAyMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIENIRUNLX1RJTUVfRVZFUlkgPSAxMDA7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVGltZVNsb3RNYW5hZ2VyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgVGltZVNsb3RNYW5hZ2VyLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrOiBmdW5jdGlvbiBUaW1lU2xvdE1hbmFnZXJfY2hlY2soKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrdGhpcy5jaGVja2VkIDwgQ0hFQ0tfVElNRV9FVkVSWSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja2VkID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmRUaW1lIDw9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uIFRpbWVTbG90TWFuYWdlcl9yZXNldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZFRpbWUgPSBEYXRlLm5vdygpICsgVElNRV9TTE9UX0RVUkFUSU9OX01TO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tlZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbm9ybWFsaXplQmxlbmRNb2RlKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdOb3JtYWwnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NvbXBhdGlibGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NvdXJjZS1vdmVyJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ011bHRpcGx5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdtdWx0aXBseSc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdTY3JlZW4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NjcmVlbic7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdPdmVybGF5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdvdmVybGF5JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0Rhcmtlbic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZGFya2VuJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xpZ2h0ZW4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2xpZ2h0ZW4nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ29sb3JEb2RnZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnY29sb3ItZG9kZ2UnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ29sb3JCdXJuJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdjb2xvci1idXJuJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0hhcmRMaWdodCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGFyZC1saWdodCc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdTb2Z0TGlnaHQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NvZnQtbGlnaHQnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRGlmZmVyZW5jZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZGlmZmVyZW5jZSc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdFeGNsdXNpb24nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2V4Y2x1c2lvbic7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdIdWUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2h1ZSc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdTYXR1cmF0aW9uJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdzYXR1cmF0aW9uJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NvbG9yJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdjb2xvcic7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdMdW1pbm9zaXR5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdsdW1pbm9zaXR5JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbnN1cHBvcnRlZCBibGVuZCBtb2RlOiAnICsgdmFsdWUubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBkZWZlcnJlZCA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgVElMSU5HX1BBVFRFUk4gPSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgU0hBRElOR19QQVRURVJOID0gMjtcbiAgICAgICAgICAgICAgICAgICAgUGFydGlhbEV2YWx1YXRvci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9uZTogZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld09wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IERlZmF1bHRQYXJ0aWFsRXZhbHVhdG9yT3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3RXZhbHVhdG9yID0gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdFdmFsdWF0b3Iub3B0aW9ucyA9IG5ld09wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0V2YWx1YXRvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNCbGVuZE1vZGVzOiBmdW5jdGlvbiBQYXJ0aWFsRXZhbHVhdG9yX2hhc0JsZW5kTW9kZXMocmVzb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShyZXNvdXJjZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvY2Vzc2VkID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZXMub2JqSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkW3Jlc291cmNlcy5vYmpJZF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlcyA9IFtyZXNvdXJjZXNdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmID0gdGhpcy54cmVmO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5LCBpLCBpaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBub2Rlcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JhcGhpY1N0YXRlcyA9IG5vZGUuZ2V0KCdFeHRHU3RhdGUnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZ3JhcGhpY1N0YXRlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncmFwaGljU3RhdGVzS2V5cyA9IGdyYXBoaWNTdGF0ZXMuZ2V0S2V5cygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGdyYXBoaWNTdGF0ZXNLZXlzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBncmFwaGljU3RhdGVzS2V5c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JhcGhpY1N0YXRlID0gZ3JhcGhpY1N0YXRlcy5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYm0gPSBncmFwaGljU3RhdGUuZ2V0KCdCTScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGJtKSAmJiBibS5uYW1lICE9PSAnTm9ybWFsJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeE9iamVjdHMgPSBub2RlLmdldCgnWE9iamVjdCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoeE9iamVjdHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4T2JqZWN0c0tleXMgPSB4T2JqZWN0cy5nZXRLZXlzKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSB4T2JqZWN0c0tleXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0geE9iamVjdHNLZXlzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhPYmplY3QgPSB4T2JqZWN0cy5nZXRSYXcoa2V5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikoeE9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc2VkW3hPYmplY3QudG9TdHJpbmcoKV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeE9iamVjdCA9IHhyZWYuZmV0Y2goeE9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKSh4T2JqZWN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeE9iamVjdC5kaWN0Lm9iaklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NlZFt4T2JqZWN0LmRpY3Qub2JqSWRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZFt4T2JqZWN0LmRpY3Qub2JqSWRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhSZXNvdXJjZXMgPSB4T2JqZWN0LmRpY3QuZ2V0KCdSZXNvdXJjZXMnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHhSZXNvdXJjZXMpICYmICgheFJlc291cmNlcy5vYmpJZCB8fCAhcHJvY2Vzc2VkW3hSZXNvdXJjZXMub2JqSWRdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLnB1c2goeFJlc291cmNlcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeFJlc291cmNlcy5vYmpJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRbeFJlc291cmNlcy5vYmpJZF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZEZvcm1YT2JqZWN0OiBmdW5jdGlvbiBQYXJ0aWFsRXZhbHVhdG9yX2J1aWxkRm9ybVhPYmplY3QocmVzb3VyY2VzLCB4b2JqLCBzbWFzaywgb3BlcmF0b3JMaXN0LCB0YXNrLCBpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGljdCA9IHhvYmouZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0cml4ID0gZGljdC5nZXRBcnJheSgnTWF0cml4Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJib3ggPSBkaWN0LmdldEFycmF5KCdCQm94Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShiYm94KSAmJiBiYm94Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYm94ID0gX3V0aWwuVXRpbC5ub3JtYWxpemVSZWN0KGJib3gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJib3ggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncm91cCA9IGRpY3QuZ2V0KCdHcm91cCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncm91cE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXg6IG1hdHJpeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJib3g6IGJib3gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFzazogc21hc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc29sYXRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrbm9ja291dDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdyb3VwU3VidHlwZSA9IGdyb3VwLmdldCgnUycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JTcGFjZSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGdyb3VwU3VidHlwZSwgJ1RyYW5zcGFyZW5jeScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cE9wdGlvbnMuaXNvbGF0ZWQgPSBncm91cC5nZXQoJ0knKSB8fCBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwT3B0aW9ucy5rbm9ja291dCA9IGdyb3VwLmdldCgnSycpIHx8IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXAuaGFzKCdDUycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZSA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2UucGFyc2UoZ3JvdXAuZ2V0KCdDUycpLCB0aGlzLnhyZWYsIHJlc291cmNlcywgdGhpcy5wZGZGdW5jdGlvbkZhY3RvcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNtYXNrICYmIHNtYXNrLmJhY2tkcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlID0gY29sb3JTcGFjZSB8fCBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21hc2suYmFja2Ryb3AgPSBjb2xvclNwYWNlLmdldFJnYihzbWFzay5iYWNrZHJvcCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLmJlZ2luR3JvdXAsIFtncm91cE9wdGlvbnNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnBhaW50Rm9ybVhPYmplY3RCZWdpbiwgW21hdHJpeCwgYmJveF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE9wZXJhdG9yTGlzdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogeG9iaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzazogdGFzayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBkaWN0LmdldCgnUmVzb3VyY2VzJykgfHwgcmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3Q6IG9wZXJhdG9yTGlzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5wYWludEZvcm1YT2JqZWN0RW5kLCBbXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLmVuZEdyb3VwLCBbZ3JvdXBPcHRpb25zXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZFBhaW50SW1hZ2VYT2JqZWN0OiBmdW5jdGlvbiBidWlsZFBhaW50SW1hZ2VYT2JqZWN0KF9yZWY1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzb3VyY2VzID0gX3JlZjUucmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSA9IF9yZWY1LmltYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmNSRpc0lubGluZSA9IF9yZWY1LmlzSW5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0lubGluZSA9IF9yZWY1JGlzSW5saW5lID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWY1JGlzSW5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QgPSBfcmVmNS5vcGVyYXRvckxpc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlS2V5ID0gX3JlZjUuY2FjaGVLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlQ2FjaGUgPSBfcmVmNS5pbWFnZUNhY2hlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmNSRmb3JjZURpc2FibGVOYXQgPSBfcmVmNS5mb3JjZURpc2FibGVOYXRpdmVJbWFnZURlY29kZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlRGlzYWJsZU5hdGl2ZUltYWdlRGVjb2RlciA9IF9yZWY1JGZvcmNlRGlzYWJsZU5hdCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmNSRmb3JjZURpc2FibGVOYXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpY3QgPSBpbWFnZS5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3ID0gZGljdC5nZXQoJ1dpZHRoJywgJ1cnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaCA9IGRpY3QuZ2V0KCdIZWlnaHQnLCAnSCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodyAmJiAoMCwgX3V0aWwuaXNOdW0pKHcpKSB8fCAhKGggJiYgKDAsIF91dGlsLmlzTnVtKShoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdJbWFnZSBkaW1lbnNpb25zIGFyZSBtaXNzaW5nLCBvciBub3QgbnVtYmVycy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhJbWFnZVNpemUgPSB0aGlzLm9wdGlvbnMubWF4SW1hZ2VTaXplO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heEltYWdlU2l6ZSAhPT0gLTEgJiYgdyAqIGggPiBtYXhJbWFnZVNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdJbWFnZSBleGNlZWRlZCBtYXhpbXVtIGFsbG93ZWQgc2l6ZSBhbmQgd2FzIHJlbW92ZWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2VNYXNrID0gZGljdC5nZXQoJ0ltYWdlTWFzaycsICdJTScpIHx8IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWdEYXRhLCBhcmdzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlTWFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBkaWN0LmdldCgnV2lkdGgnLCAnVycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gZGljdC5nZXQoJ0hlaWdodCcsICdIJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRTdHJpZGVMZW5ndGggPSB3aWR0aCArIDcgPj4gMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZ0FycmF5ID0gaW1hZ2UuZ2V0Qnl0ZXMoYml0U3RyaWRlTGVuZ3RoICogaGVpZ2h0LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kZSA9IGRpY3QuZ2V0QXJyYXkoJ0RlY29kZScsICdEJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGEgPSBfaW1hZ2UuUERGSW1hZ2UuY3JlYXRlTWFzayh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdBcnJheTogaW1nQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOiBpbWFnZSBpbnN0YW5jZW9mIF9zdHJlYW0uRGVjb2RlU3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52ZXJzZURlY29kZTogISFkZWNvZGUgJiYgZGVjb2RlWzBdID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nRGF0YS5jYWNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gW2ltZ0RhdGFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCwgYXJncyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZUNhY2hlW2NhY2hlS2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbjogX3V0aWwuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBhcmdzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb2Z0TWFzayA9IGRpY3QuZ2V0KCdTTWFzaycsICdTTScpIHx8IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXNrID0gZGljdC5nZXQoJ01hc2snKSB8fCBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgU01BTExfSU1BR0VfRElNRU5TSU9OUyA9IDIwMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0lubGluZSAmJiAhc29mdE1hc2sgJiYgIW1hc2sgJiYgIShpbWFnZSBpbnN0YW5jZW9mIF9qcGVnX3N0cmVhbS5KcGVnU3RyZWFtKSAmJiB3ICsgaCA8IFNNQUxMX0lNQUdFX0RJTUVOU0lPTlMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltYWdlT2JqID0gbmV3IF9pbWFnZS5QREZJbWFnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXM6IHJlc291cmNlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlOiBpbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSW5saW5lOiBpc0lubGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeTogdGhpcy5wZGZGdW5jdGlvbkZhY3RvcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGEgPSBpbWFnZU9iai5jcmVhdGVJbWFnZURhdGEodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QsIFtpbWdEYXRhXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmF0aXZlSW1hZ2VEZWNvZGVyU3VwcG9ydCA9IGZvcmNlRGlzYWJsZU5hdGl2ZUltYWdlRGVjb2RlciA/IF91dGlsLk5hdGl2ZUltYWdlRGVjb2RpbmcuTk9ORSA6IHRoaXMub3B0aW9ucy5uYXRpdmVJbWFnZURlY29kZXJTdXBwb3J0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmpJZCA9ICdpbWdfJyArIHRoaXMuaWRGYWN0b3J5LmNyZWF0ZU9iaklkKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmF0aXZlSW1hZ2VEZWNvZGVyU3VwcG9ydCAhPT0gX3V0aWwuTmF0aXZlSW1hZ2VEZWNvZGluZy5OT05FICYmICFzb2Z0TWFzayAmJiAhbWFzayAmJiBpbWFnZSBpbnN0YW5jZW9mIF9qcGVnX3N0cmVhbS5KcGVnU3RyZWFtICYmIE5hdGl2ZUltYWdlRGVjb2Rlci5pc1N1cHBvcnRlZChpbWFnZSwgdGhpcy54cmVmLCByZXNvdXJjZXMsIHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgnb2JqJywgW29iaklkLCB0aGlzLnBhZ2VJbmRleCwgJ0pwZWdTdHJlYW0nLCBpbWFnZS5nZXRJUih0aGlzLm9wdGlvbnMuZm9yY2VEYXRhU2NoZW1hKV0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZERlcGVuZGVuY3kob2JqSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IFtvYmpJZCwgdywgaF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnBhaW50SnBlZ1hPYmplY3QsIGFyZ3MpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZUNhY2hlW2NhY2hlS2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm46IF91dGlsLk9QUy5wYWludEpwZWdYT2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBhcmdzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdOYXRpdmUgSlBFRyBkZWNvZGluZyBmYWlsZWQgLS0gdHJ5aW5nIHRvIHJlY292ZXI6ICcgKyAocmVhc29uICYmIHJlYXNvbi5tZXNzYWdlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLmJ1aWxkUGFpbnRJbWFnZVhPYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlczogcmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlOiBpbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0lubGluZTogaXNJbmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0OiBvcGVyYXRvckxpc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVLZXk6IGNhY2hlS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlQ2FjaGU6IGltYWdlQ2FjaGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VEaXNhYmxlTmF0aXZlSW1hZ2VEZWNvZGVyOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hdGl2ZUltYWdlRGVjb2RlciA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmF0aXZlSW1hZ2VEZWNvZGVyU3VwcG9ydCA9PT0gX3V0aWwuTmF0aXZlSW1hZ2VEZWNvZGluZy5ERUNPREUgJiYgKGltYWdlIGluc3RhbmNlb2YgX2pwZWdfc3RyZWFtLkpwZWdTdHJlYW0gfHwgbWFzayBpbnN0YW5jZW9mIF9qcGVnX3N0cmVhbS5KcGVnU3RyZWFtIHx8IHNvZnRNYXNrIGluc3RhbmNlb2YgX2pwZWdfc3RyZWFtLkpwZWdTdHJlYW0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlRGVjb2RlciA9IG5ldyBOYXRpdmVJbWFnZURlY29kZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZjogdGhpcy54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzOiByZXNvdXJjZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiB0aGlzLmhhbmRsZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZURhdGFTY2hlbWE6IHRoaXMub3B0aW9ucy5mb3JjZURhdGFTY2hlbWEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZGdW5jdGlvbkZhY3Rvcnk6IHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGREZXBlbmRlbmN5KG9iaklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gW29iaklkLCB3LCBoXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pbWFnZS5QREZJbWFnZS5idWlsZEltYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcjogdGhpcy5oYW5kbGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlczogcmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZTogaW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSW5saW5lOiBpc0lubGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlRGVjb2RlcjogbmF0aXZlSW1hZ2VEZWNvZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZGdW5jdGlvbkZhY3Rvcnk6IHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoaW1hZ2VPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZ0RhdGEgPSBpbWFnZU9iai5jcmVhdGVJbWFnZURhdGEoZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5oYW5kbGVyLnNlbmQoJ29iaicsIFtvYmpJZCwgX3RoaXMyLnBhZ2VJbmRleCwgJ0ltYWdlJywgaW1nRGF0YV0sIFtpbWdEYXRhLmRhdGEuYnVmZmVyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1VuYWJsZSB0byBkZWNvZGUgaW1hZ2U6ICcgKyByZWFzb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5oYW5kbGVyLnNlbmQoJ29iaicsIFtvYmpJZCwgX3RoaXMyLnBhZ2VJbmRleCwgJ0ltYWdlJywgbnVsbF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5wYWludEltYWdlWE9iamVjdCwgYXJncyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VDYWNoZVtjYWNoZUtleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbjogX3V0aWwuT1BTLnBhaW50SW1hZ2VYT2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogYXJnc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTTWFzazogZnVuY3Rpb24gUGFydGlhbEV2YWx1YXRvcl9oYW5kbGVTbWFzayhzbWFzaywgcmVzb3VyY2VzLCBvcGVyYXRvckxpc3QsIHRhc2ssIHN0YXRlTWFuYWdlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzbWFza0NvbnRlbnQgPSBzbWFzay5nZXQoJ0cnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc21hc2tPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlOiBzbWFzay5nZXQoJ1MnKS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZHJvcDogc21hc2suZ2V0KCdCQycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmZXJPYmogPSBzbWFzay5nZXQoJ1RSJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9mdW5jdGlvbi5pc1BERkZ1bmN0aW9uKSh0cmFuc2Zlck9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZmVyRm4gPSB0aGlzLnBkZkZ1bmN0aW9uRmFjdG9yeS5jcmVhdGUodHJhbnNmZXJPYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmZXJNYXAgPSBuZXcgVWludDhBcnJheSgyNTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wID0gbmV3IEZsb2F0MzJBcnJheSgxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBbMF0gPSBpIC8gMjU1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJGbih0bXAsIDAsIHRtcCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zlck1hcFtpXSA9IHRtcFswXSAqIDI1NSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFza09wdGlvbnMudHJhbnNmZXJNYXAgPSB0cmFuc2Zlck1hcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5idWlsZEZvcm1YT2JqZWN0KHJlc291cmNlcywgc21hc2tDb250ZW50LCBzbWFza09wdGlvbnMsIG9wZXJhdG9yTGlzdCwgdGFzaywgc3RhdGVNYW5hZ2VyLnN0YXRlLmNsb25lKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVRpbGluZ1R5cGU6IGZ1bmN0aW9uIGhhbmRsZVRpbGluZ1R5cGUoZm4sIGFyZ3MsIHJlc291cmNlcywgcGF0dGVybiwgcGF0dGVybkRpY3QsIG9wZXJhdG9yTGlzdCwgdGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbGluZ09wTGlzdCA9IG5ldyBfb3BlcmF0b3JfbGlzdC5PcGVyYXRvckxpc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzb3VyY2VzQXJyYXkgPSBbcGF0dGVybkRpY3QuZ2V0KCdSZXNvdXJjZXMnKSwgcmVzb3VyY2VzXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXR0ZXJuUmVzb3VyY2VzID0gX3ByaW1pdGl2ZXMuRGljdC5tZXJnZSh0aGlzLnhyZWYsIHJlc291cmNlc0FycmF5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE9wZXJhdG9yTGlzdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogcGF0dGVybixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzazogdGFzayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBwYXR0ZXJuUmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3Q6IHRpbGluZ09wTGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF9wYXR0ZXJuLmdldFRpbGluZ1BhdHRlcm5JUikoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5BcnJheTogdGlsaW5nT3BMaXN0LmZuQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzQXJyYXk6IHRpbGluZ09wTGlzdC5hcmdzQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgcGF0dGVybkRpY3QsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHRpbGluZ1BhdHRlcm5JUikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkRGVwZW5kZW5jaWVzKHRpbGluZ09wTGlzdC5kZXBlbmRlbmNpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoZm4sIHRpbGluZ1BhdHRlcm5JUik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMzLm9wdGlvbnMuaWdub3JlRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMuaGFuZGxlci5zZW5kKCdVbnN1cHBvcnRlZEZlYXR1cmUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy51bmtub3duXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiaGFuZGxlVGlsaW5nVHlwZSAtIGlnbm9yaW5nIHBhdHRlcm46IFxcXCJcIi5jb25jYXQocmVhc29uLCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZXRGb250OiBmdW5jdGlvbiBQYXJ0aWFsRXZhbHVhdG9yX2hhbmRsZVNldEZvbnQocmVzb3VyY2VzLCBmb250QXJncywgZm9udFJlZiwgb3BlcmF0b3JMaXN0LCB0YXNrLCBzdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnROYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnRBcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRBcmdzID0gZm9udEFyZ3Muc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udE5hbWUgPSBmb250QXJnc1swXS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRGb250KGZvbnROYW1lLCBmb250UmVmLCByZXNvdXJjZXMpLnRoZW4oZnVuY3Rpb24gKHRyYW5zbGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0cmFuc2xhdGVkLmZvbnQuaXNUeXBlM0ZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZWQubG9hZFR5cGUzRGF0YShfdGhpczQsIHJlc291cmNlcywgb3BlcmF0b3JMaXN0LCB0YXNrKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczQuaGFuZGxlci5zZW5kKCdVbnN1cHBvcnRlZEZlYXR1cmUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5mb250XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUcmFuc2xhdGVkRm9udCgnZ19mb250X2Vycm9yJywgbmV3IF9mb250cy5FcnJvckZvbnQoJ1R5cGUzIGZvbnQgbG9hZCBlcnJvcjogJyArIHJlYXNvbiksIHRyYW5zbGF0ZWQuZm9udCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHRyYW5zbGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZm9udCA9IHRyYW5zbGF0ZWQuZm9udDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZC5zZW5kKF90aGlzNC5oYW5kbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZWQubG9hZGVkTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVUZXh0OiBmdW5jdGlvbiBoYW5kbGVUZXh0KGNoYXJzLCBzdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250ID0gc3RhdGUuZm9udDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhzID0gZm9udC5jaGFyc1RvR2x5cGhzKGNoYXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250LmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzQWRkVG9QYXRoU2V0ID0gISEoc3RhdGUudGV4dFJlbmRlcmluZ01vZGUgJiBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSF9GTEFHKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBZGRUb1BhdGhTZXQgfHwgc3RhdGUuZmlsbENvbG9yU3BhY2UubmFtZSA9PT0gJ1BhdHRlcm4nIHx8IGZvbnQuZGlzYWJsZUZvbnRGYWNlIHx8IHRoaXMub3B0aW9ucy5kaXNhYmxlRm9udEZhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnRpYWxFdmFsdWF0b3IuYnVpbGRGb250UGF0aHMoZm9udCwgZ2x5cGhzLCB0aGlzLmhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdseXBocztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRHU3RhdGU6IGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3Jfc2V0R1N0YXRlKHJlc291cmNlcywgZ1N0YXRlLCBvcGVyYXRvckxpc3QsIHRhc2ssIHN0YXRlTWFuYWdlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdTdGF0ZU9iaiA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnU3RhdGVLZXlzID0gZ1N0YXRlLmdldEtleXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBnU3RhdGVLZXlzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBnU3RhdGUuZ2V0KGtleSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1R5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdMVyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdMQyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdMSic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdNTCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1JJJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0ZMJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NBJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NhJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnU3RhdGVPYmoucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdGb250JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNS5oYW5kbGVTZXRGb250KHJlc291cmNlcywgbnVsbCwgdmFsdWVbMF0sIG9wZXJhdG9yTGlzdCwgdGFzaywgc3RhdGVNYW5hZ2VyLnN0YXRlKS50aGVuKGZ1bmN0aW9uIChsb2FkZWROYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkRGVwZW5kZW5jeShsb2FkZWROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdTdGF0ZU9iai5wdXNoKFtrZXksIFtsb2FkZWROYW1lLCB2YWx1ZVsxXV1dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0JNJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnU3RhdGVPYmoucHVzaChba2V5LCBub3JtYWxpemVCbGVuZE1vZGUodmFsdWUpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1NNYXNrJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodmFsdWUsICdOb25lJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ1N0YXRlT2JqLnB1c2goW2tleSwgZmFsc2VdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczUuaGFuZGxlU01hc2sodmFsdWUsIHJlc291cmNlcywgb3BlcmF0b3JMaXN0LCB0YXNrLCBzdGF0ZU1hbmFnZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ1N0YXRlT2JqLnB1c2goW2tleSwgdHJ1ZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnVW5zdXBwb3J0ZWQgU01hc2sgdHlwZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdPUCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdvcCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdPUE0nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQkcnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQkcyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1VDUic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdVQ1IyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1RSJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1RSMic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdIVCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdTTSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdTQSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdBSVMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVEsnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKSgnZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciAnICsga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ1Vua25vd24gZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciAnICsga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBnU3RhdGVLZXlzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2xvb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdTdGF0ZU9iai5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnNldEdTdGF0ZSwgW2dTdGF0ZU9ial0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9hZEZvbnQ6IGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3JfbG9hZEZvbnQoZm9udE5hbWUsIGZvbnQsIHJlc291cmNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZXJyb3JGb250KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBUcmFuc2xhdGVkRm9udCgnZ19mb250X2Vycm9yJywgbmV3IF9mb250cy5FcnJvckZvbnQoJ0ZvbnQgJyArIGZvbnROYW1lICsgJyBpcyBub3QgYXZhaWxhYmxlJyksIGZvbnQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udFJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZiA9IHRoaXMueHJlZjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzUmVmKShmb250KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgXCJmb250XCIgb2JqZWN0IHNob3VsZCBiZSBhIHJlZmVyZW5jZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRSZWYgPSBmb250O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250UmVzID0gcmVzb3VyY2VzLmdldCgnRm9udCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250UmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250UmVmID0gZm9udFJlcy5nZXRSYXcoZm9udE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdmb250UmVzIG5vdCBhdmFpbGFibGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvckZvbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZm9udFJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ2ZvbnRSZWYgbm90IGF2YWlsYWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JGb250KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9udENhY2hlLmhhcyhmb250UmVmKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mb250Q2FjaGUuZ2V0KGZvbnRSZWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSB4cmVmLmZldGNoSWZSZWYoZm9udFJlZik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGZvbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvckZvbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9udC50cmFuc2xhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmb250LnRyYW5zbGF0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVFdmFsdWF0ZWRGb250ID0gdGhpcy5wcmVFdmFsdWF0ZUZvbnQoZm9udCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcmVFdmFsdWF0ZWRGb250LmRlc2NyaXB0b3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnRSZWZJc1JlZiA9ICgwLCBfcHJpbWl0aXZlcy5pc1JlZikoZm9udFJlZiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRJRDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250UmVmSXNSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udElEID0gZm9udFJlZi50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShkZXNjcmlwdG9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IuZm9udEFsaWFzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuZm9udEFsaWFzZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnRBbGlhc2VzID0gZGVzY3JpcHRvci5mb250QWxpYXNlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc2ggPSBwcmVFdmFsdWF0ZWRGb250Lmhhc2g7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnRBbGlhc2VzW2hhc2hdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWxpYXNGb250UmVmID0gZm9udEFsaWFzZXNbaGFzaF0uYWxpYXNSZWY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250UmVmSXNSZWYgJiYgYWxpYXNGb250UmVmICYmIHRoaXMuZm9udENhY2hlLmhhcyhhbGlhc0ZvbnRSZWYpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb250Q2FjaGUucHV0QWxpYXMoZm9udFJlZiwgYWxpYXNGb250UmVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mb250Q2FjaGUuZ2V0KGZvbnRSZWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udEFsaWFzZXNbaGFzaF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udElEOiBfZm9udHMuRm9udC5nZXRGb250SUQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250UmVmSXNSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRBbGlhc2VzW2hhc2hdLmFsaWFzUmVmID0gZm9udFJlZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRJRCA9IGZvbnRBbGlhc2VzW2hhc2hdLmZvbnRJRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9udFJlZklzUmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udENhY2hlLnB1dChmb250UmVmLCBmb250Q2FwYWJpbGl0eS5wcm9taXNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZvbnRJRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udElEID0gdGhpcy5pZEZhY3RvcnkuY3JlYXRlT2JqSWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udENhY2hlLnB1dCgnaWRfJyArIGZvbnRJRCwgZm9udENhcGFiaWxpdHkucHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoZm9udElELCAnVGhlIFwiZm9udElEXCIgbXVzdCBiZSBkZWZpbmVkLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQubG9hZGVkTmFtZSA9ICdnXycgKyB0aGlzLnBkZk1hbmFnZXIuZG9jSWQgKyAnX2YnICsgZm9udElEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQudHJhbnNsYXRlZCA9IGZvbnRDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zbGF0ZWRQcm9taXNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFByb21pc2UgPSB0aGlzLnRyYW5zbGF0ZUZvbnQocHJlRXZhbHVhdGVkRm9udCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkUHJvbWlzZSA9IFByb21pc2UucmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRQcm9taXNlLnRoZW4oZnVuY3Rpb24gKHRyYW5zbGF0ZWRGb250KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGVkRm9udC5mb250VHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZkZvbnRTdGF0cyA9IHhyZWYuc3RhdHMuZm9udFR5cGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZkZvbnRTdGF0c1t0cmFuc2xhdGVkRm9udC5mb250VHlwZV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udENhcGFiaWxpdHkucmVzb2x2ZShuZXcgVHJhbnNsYXRlZEZvbnQoZm9udC5sb2FkZWROYW1lLCB0cmFuc2xhdGVkRm9udCwgZm9udCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM2LmhhbmRsZXIuc2VuZCgnVW5zdXBwb3J0ZWRGZWF0dXJlJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5mb250XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByZUV2YWx1YXRlZEZvbnQuZGVzY3JpcHRvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250RmlsZTMgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZ2V0KCdGb250RmlsZTMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJ0eXBlID0gZm9udEZpbGUzICYmIGZvbnRGaWxlMy5nZXQoJ1N1YnR5cGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250VHlwZSA9ICgwLCBfZm9udHMuZ2V0Rm9udFR5cGUpKHByZUV2YWx1YXRlZEZvbnQudHlwZSwgc3VidHlwZSAmJiBzdWJ0eXBlLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhyZWZGb250U3RhdHMgPSB4cmVmLnN0YXRzLmZvbnRUeXBlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWZGb250U3RhdHNbZm9udFR5cGVdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udENhcGFiaWxpdHkucmVzb2x2ZShuZXcgVHJhbnNsYXRlZEZvbnQoZm9udC5sb2FkZWROYW1lLCBuZXcgX2ZvbnRzLkVycm9yRm9udChyZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlYXNvbi5tZXNzYWdlIDogcmVhc29uKSwgZm9udCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmb250Q2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkUGF0aDogZnVuY3Rpb24gUGFydGlhbEV2YWx1YXRvcl9idWlsZFBhdGgob3BlcmF0b3JMaXN0LCBmbiwgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYXN0SW5kZXggPSBvcGVyYXRvckxpc3QubGVuZ3RoIC0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RJbmRleCA8IDAgfHwgb3BlcmF0b3JMaXN0LmZuQXJyYXlbbGFzdEluZGV4XSAhPT0gX3V0aWwuT1BTLmNvbnN0cnVjdFBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5jb25zdHJ1Y3RQYXRoLCBbW2ZuXSwgYXJnc10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcEFyZ3MgPSBvcGVyYXRvckxpc3QuYXJnc0FycmF5W2xhc3RJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wQXJnc1swXS5wdXNoKGZuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkob3BBcmdzWzFdLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ29sb3JOOiBmdW5jdGlvbiBQYXJ0aWFsRXZhbHVhdG9yX2hhbmRsZUNvbG9yTihvcGVyYXRvckxpc3QsIGZuLCBhcmdzLCBjcywgcGF0dGVybnMsIHJlc291cmNlcywgdGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXR0ZXJuTmFtZSA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF0dGVybjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShwYXR0ZXJuTmFtZSkgJiYgKHBhdHRlcm4gPSBwYXR0ZXJucy5nZXQocGF0dGVybk5hbWUubmFtZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShwYXR0ZXJuKSA/IHBhdHRlcm4uZGljdCA6IHBhdHRlcm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlTnVtID0gZGljdC5nZXQoJ1BhdHRlcm5UeXBlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVOdW0gPT09IFRJTElOR19QQVRURVJOKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBjcy5iYXNlID8gY3MuYmFzZS5nZXRSZ2IoYXJncywgMCkgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlVGlsaW5nVHlwZShmbiwgY29sb3IsIHJlc291cmNlcywgcGF0dGVybiwgZGljdCwgb3BlcmF0b3JMaXN0LCB0YXNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlTnVtID09PSBTSEFESU5HX1BBVFRFUk4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaGFkaW5nID0gZGljdC5nZXQoJ1NoYWRpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRyaXggPSBkaWN0LmdldEFycmF5KCdNYXRyaXgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBfcGF0dGVybi5QYXR0ZXJuLnBhcnNlU2hhZGluZyhzaGFkaW5nLCBtYXRyaXgsIHRoaXMueHJlZiwgcmVzb3VyY2VzLCB0aGlzLmhhbmRsZXIsIHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChmbiwgcGF0dGVybi5nZXRJUigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1Vua25vd24gUGF0dGVyblR5cGU6ICcgKyB0eXBlTnVtKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKGZuLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0T3BlcmF0b3JMaXN0OiBmdW5jdGlvbiBnZXRPcGVyYXRvckxpc3QoX3JlZjYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM3ID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBfcmVmNi5zdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sgPSBfcmVmNi50YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMgPSBfcmVmNi5yZXNvdXJjZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdCA9IF9yZWY2Lm9wZXJhdG9yTGlzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjYkaW5pdGlhbFN0YXRlID0gX3JlZjYuaW5pdGlhbFN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsU3RhdGUgPSBfcmVmNiRpbml0aWFsU3RhdGUgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmNiRpbml0aWFsU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzID0gcmVzb3VyY2VzIHx8IF9wcmltaXRpdmVzLkRpY3QuZW1wdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlIHx8IG5ldyBFdmFsU3RhdGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3BlcmF0b3JMaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0T3BlcmF0b3JMaXN0OiBtaXNzaW5nIFwib3BlcmF0b3JMaXN0XCIgcGFyYW1ldGVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4cmVmID0gdGhpcy54cmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWFnZUNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4b2JqcyA9IHJlc291cmNlcy5nZXQoJ1hPYmplY3QnKSB8fCBfcHJpbWl0aXZlcy5EaWN0LmVtcHR5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhdHRlcm5zID0gcmVzb3VyY2VzLmdldCgnUGF0dGVybicpIHx8IF9wcmltaXRpdmVzLkRpY3QuZW1wdHk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGVNYW5hZ2VyID0gbmV3IFN0YXRlTWFuYWdlcihpbml0aWFsU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVwcm9jZXNzb3IgPSBuZXcgRXZhbHVhdG9yUHJlcHJvY2Vzc29yKHN0cmVhbSwgeHJlZiwgc3RhdGVNYW5hZ2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGltZVNsb3RNYW5hZ2VyID0gbmV3IFRpbWVTbG90TWFuYWdlcigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY2xvc2VQZW5kaW5nUmVzdG9yZU9QUyhhcmd1bWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBwcmVwcm9jZXNzb3Iuc2F2ZWRTdGF0ZXNEZXB0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMucmVzdG9yZSwgW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VCb2R5KHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uIG5leHQocHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlQm9keShyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLmVuc3VyZU5vdFRlcm1pbmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZVNsb3RNYW5hZ2VyLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdG9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0ge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIShzdG9wID0gdGltZVNsb3RNYW5hZ2VyLmNoZWNrKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24uYXJncyA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJlcHJvY2Vzc29yLnJlYWQob3BlcmF0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IG9wZXJhdGlvbi5hcmdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuID0gb3BlcmF0aW9uLmZuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZuIHwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50WE9iamVjdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBhcmdzWzBdLm5hbWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgJiYgaW1hZ2VDYWNoZVtuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoaW1hZ2VDYWNoZVtuYW1lXS5mbiwgaW1hZ2VDYWNoZVtuYW1lXS5hcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlWE9iamVjdCwgcmVqZWN0WE9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdYT2JqZWN0IG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhvYmogPSB4b2Jqcy5nZXQobmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgheG9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChmbiwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVhPYmplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKSh4b2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignWE9iamVjdCBzaG91bGQgYmUgYSBzdHJlYW0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSB4b2JqLmRpY3QuZ2V0KCdTdWJ0eXBlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1hPYmplY3Qgc2hvdWxkIGhhdmUgYSBOYW1lIHN1YnR5cGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUubmFtZSA9PT0gJ0Zvcm0nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkRm9ybVhPYmplY3QocmVzb3VyY2VzLCB4b2JqLCBudWxsLCBvcGVyYXRvckxpc3QsIHRhc2ssIHN0YXRlTWFuYWdlci5zdGF0ZS5jbG9uZSgpKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVhPYmplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCByZWplY3RYT2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUubmFtZSA9PT0gJ0ltYWdlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRQYWludEltYWdlWE9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlczogcmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZTogeG9iaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0OiBvcGVyYXRvckxpc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlS2V5OiBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZUNhY2hlOiBpbWFnZUNhY2hlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihyZXNvbHZlWE9iamVjdCwgcmVqZWN0WE9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlLm5hbWUgPT09ICdQUycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ0lnbm9yZWQgWE9iamVjdCBzdWJ0eXBlIFBTJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlVuaGFuZGxlZCBYT2JqZWN0IHN1YnR5cGUgXCIuY29uY2F0KHR5cGUubmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlWE9iamVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5vcHRpb25zLmlnbm9yZUVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZW5kKCdVbnN1cHBvcnRlZEZlYXR1cmUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVJZDogX3V0aWwuVU5TVVBQT1JURURfRkVBVFVSRVMudW5rbm93blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcImdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIFhPYmplY3Q6IFxcXCJcIi5jb25jYXQocmVhc29uLCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGb250OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udFNpemUgPSBhcmdzWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHNlbGYuaGFuZGxlU2V0Rm9udChyZXNvdXJjZXMsIGFyZ3MsIG51bGwsIG9wZXJhdG9yTGlzdCwgdGFzaywgc3RhdGVNYW5hZ2VyLnN0YXRlKS50aGVuKGZ1bmN0aW9uIChsb2FkZWROYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkRGVwZW5kZW5jeShsb2FkZWROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuc2V0Rm9udCwgW2xvYWRlZE5hbWUsIGZvbnRTaXplXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuZW5kSW5saW5lSW1hZ2U6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWNoZUtleSA9IGFyZ3NbMF0uY2FjaGVLZXk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FjaGVFbnRyeSA9IGltYWdlQ2FjaGVbY2FjaGVLZXldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVFbnRyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKGNhY2hlRW50cnkuZm4sIGNhY2hlRW50cnkuYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHNlbGYuYnVpbGRQYWludEltYWdlWE9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXM6IHJlc291cmNlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlOiBhcmdzWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNJbmxpbmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3Q6IG9wZXJhdG9yTGlzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlS2V5OiBjYWNoZUtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlQ2FjaGU6IGltYWdlQ2FjaGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zaG93VGV4dDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSA9IHNlbGYuaGFuZGxlVGV4dChhcmdzWzBdLCBzdGF0ZU1hbmFnZXIuc3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNob3dTcGFjZWRUZXh0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJyID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbWJpbmVkR2x5cGhzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcnJMZW5ndGggPSBhcnIubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdGF0ZU1hbmFnZXIuc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyckxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJySXRlbSA9IGFycltpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykoYXJySXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShjb21iaW5lZEdseXBocywgc2VsZi5oYW5kbGVUZXh0KGFyckl0ZW0sIHN0YXRlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc051bSkoYXJySXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21iaW5lZEdseXBocy5wdXNoKGFyckl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSA9IGNvbWJpbmVkR2x5cGhzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zaG93VGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5uZXh0TGluZVNob3dUZXh0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLm5leHRMaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSA9IHNlbGYuaGFuZGxlVGV4dChhcmdzWzBdLCBzdGF0ZU1hbmFnZXIuc3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zaG93VGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5uZXh0TGluZVNldFNwYWNpbmdTaG93VGV4dDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5uZXh0TGluZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuc2V0V29yZFNwYWNpbmcsIFthcmdzLnNoaWZ0KCldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5zZXRDaGFyU3BhY2luZywgW2FyZ3Muc2hpZnQoKV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzBdID0gc2VsZi5oYW5kbGVUZXh0KGFyZ3NbMF0sIHN0YXRlTWFuYWdlci5zdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNob3dUZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFRleHRSZW5kZXJpbmdNb2RlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUudGV4dFJlbmRlcmluZ01vZGUgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxDb2xvclNwYWNlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUuZmlsbENvbG9yU3BhY2UgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnBhcnNlKGFyZ3NbMF0sIHhyZWYsIHJlc291cmNlcywgc2VsZi5wZGZGdW5jdGlvbkZhY3RvcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZUNvbG9yU3BhY2U6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5zdHJva2VDb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5wYXJzZShhcmdzWzBdLCB4cmVmLCByZXNvdXJjZXMsIHNlbGYucGRmRnVuY3Rpb25GYWN0b3J5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGaWxsQ29sb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzID0gc3RhdGVNYW5hZ2VyLnN0YXRlLmZpbGxDb2xvclNwYWNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gY3MuZ2V0UmdiKGFyZ3MsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zZXRGaWxsUkdCQ29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0U3Ryb2tlQ29sb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzID0gc3RhdGVNYW5hZ2VyLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBjcy5nZXRSZ2IoYXJncywgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNldFN0cm9rZVJHQkNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxHcmF5OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUuZmlsbENvbG9yU3BhY2UgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYihhcmdzLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBfdXRpbC5PUFMuc2V0RmlsbFJHQkNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZUdyYXk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5zdHJva2VDb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheS5nZXRSZ2IoYXJncywgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNldFN0cm9rZVJHQkNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxDTVlLQ29sb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5maWxsQ29sb3JTcGFjZSA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiKGFyZ3MsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zZXRGaWxsUkdCQ29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0U3Ryb2tlQ01ZS0NvbG9yOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiKGFyZ3MsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zZXRTdHJva2VSR0JDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGaWxsUkdCQ29sb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5maWxsQ29sb3JTcGFjZSA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYihhcmdzLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRTdHJva2VSR0JDb2xvcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2IoYXJncywgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0RmlsbENvbG9yTjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3MgPSBzdGF0ZU1hbmFnZXIuc3RhdGUuZmlsbENvbG9yU3BhY2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNzLm5hbWUgPT09ICdQYXR0ZXJuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dChzZWxmLmhhbmRsZUNvbG9yTihvcGVyYXRvckxpc3QsIF91dGlsLk9QUy5zZXRGaWxsQ29sb3JOLCBhcmdzLCBjcywgcGF0dGVybnMsIHJlc291cmNlcywgdGFzaykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGNzLmdldFJnYihhcmdzLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBfdXRpbC5PUFMuc2V0RmlsbFJHQkNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZUNvbG9yTjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3MgPSBzdGF0ZU1hbmFnZXIuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3MubmFtZSA9PT0gJ1BhdHRlcm4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHNlbGYuaGFuZGxlQ29sb3JOKG9wZXJhdG9yTGlzdCwgX3V0aWwuT1BTLnNldFN0cm9rZUNvbG9yTiwgYXJncywgY3MsIHBhdHRlcm5zLCByZXNvdXJjZXMsIHRhc2spKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBjcy5nZXRSZ2IoYXJncywgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNldFN0cm9rZVJHQkNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNoYWRpbmdGaWxsOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hhZGluZ1JlcyA9IHJlc291cmNlcy5nZXQoJ1NoYWRpbmcnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNoYWRpbmdSZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignTm8gc2hhZGluZyByZXNvdXJjZSBmb3VuZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNoYWRpbmcgPSBzaGFkaW5nUmVzLmdldChhcmdzWzBdLm5hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2hhZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdObyBzaGFkaW5nIG9iamVjdCBmb3VuZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNoYWRpbmdGaWxsID0gX3BhdHRlcm4uUGF0dGVybi5wYXJzZVNoYWRpbmcoc2hhZGluZywgbnVsbCwgeHJlZiwgcmVzb3VyY2VzLCBzZWxmLmhhbmRsZXIsIHNlbGYucGRmRnVuY3Rpb25GYWN0b3J5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF0dGVybklSID0gc2hhZGluZ0ZpbGwuZ2V0SVIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IFtwYXR0ZXJuSVJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zaGFkaW5nRmlsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRHU3RhdGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0TmFtZSA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleHRHU3RhdGUgPSByZXNvdXJjZXMuZ2V0KCdFeHRHU3RhdGUnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGV4dEdTdGF0ZSkgfHwgIWV4dEdTdGF0ZS5oYXMoZGljdE5hbWUubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdTdGF0ZSA9IGV4dEdTdGF0ZS5nZXQoZGljdE5hbWUubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoc2VsZi5zZXRHU3RhdGUocmVzb3VyY2VzLCBnU3RhdGUsIG9wZXJhdG9yTGlzdCwgdGFzaywgc3RhdGVNYW5hZ2VyKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLm1vdmVUbzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5saW5lVG86XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY3VydmVUbzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jdXJ2ZVRvMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jdXJ2ZVRvMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jbG9zZVBhdGg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRQYXRoKG9wZXJhdG9yTGlzdCwgZm4sIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnJlY3RhbmdsZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5idWlsZFBhdGgob3BlcmF0b3JMaXN0LCBmbiwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMubWFya1BvaW50OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLm1hcmtQb2ludFByb3BzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmJlZ2luTWFya2VkQ29udGVudDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5lbmRNYXJrZWRDb250ZW50OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmJlZ2luQ29tcGF0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmVuZENvbXBhdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBhcmdzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc1tpXSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGlpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBvcGVyYXRvcjogJyArIGZuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChmbiwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dChkZWZlcnJlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZVBlbmRpbmdSZXN0b3JlT1BTKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpczcub3B0aW9ucy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNy5oYW5kbGVyLnNlbmQoJ1Vuc3VwcG9ydGVkRmVhdHVyZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlSWQ6IF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLnVua25vd25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBlcnJvcnMgZHVyaW5nIFxcXCJcIi5jb25jYXQodGFzay5uYW1lLCBcIlxcXCIgXCIpICsgXCJ0YXNrOiBcXFwiXCIuY29uY2F0KHJlYXNvbiwgXCJcXFwiLlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZVBlbmRpbmdSZXN0b3JlT1BTKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZWFzb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VGV4dENvbnRlbnQ6IGZ1bmN0aW9uIGdldFRleHRDb250ZW50KF9yZWY3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzOCA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gX3JlZjcuc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrID0gX3JlZjcudGFzayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzID0gX3JlZjcucmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmNyRzdGF0ZU1hbmFnZXIgPSBfcmVmNy5zdGF0ZU1hbmFnZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlTWFuYWdlciA9IF9yZWY3JHN0YXRlTWFuYWdlciA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWY3JHN0YXRlTWFuYWdlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjckbm9ybWFsaXplV2hpdGVzID0gX3JlZjcubm9ybWFsaXplV2hpdGVzcGFjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplV2hpdGVzcGFjZSA9IF9yZWY3JG5vcm1hbGl6ZVdoaXRlcyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmNyRub3JtYWxpemVXaGl0ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWY3JGNvbWJpbmVUZXh0SXRlbSA9IF9yZWY3LmNvbWJpbmVUZXh0SXRlbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVUZXh0SXRlbXMgPSBfcmVmNyRjb21iaW5lVGV4dEl0ZW0gPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjckY29tYmluZVRleHRJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rID0gX3JlZjcuc2luayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjckc2VlblN0eWxlcyA9IF9yZWY3LnNlZW5TdHlsZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZW5TdHlsZXMgPSBfcmVmNyRzZWVuU3R5bGVzID09PSB2b2lkIDAgPyBPYmplY3QuY3JlYXRlKG51bGwpIDogX3JlZjckc2VlblN0eWxlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMgPSByZXNvdXJjZXMgfHwgX3ByaW1pdGl2ZXMuRGljdC5lbXB0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIgPSBzdGF0ZU1hbmFnZXIgfHwgbmV3IFN0YXRlTWFuYWdlcihuZXcgVGV4dFN0YXRlKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBXaGl0ZXNwYWNlUmVnZXhwID0gL1xccy9nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Q29udGVudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZXM6IE9iamVjdC5jcmVhdGUobnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Q29udGVudEl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWw6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0QWR2YW5jZVdpZHRoOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0QWR2YW5jZUhlaWdodDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFkdmFuY2VTY2FsZTogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VXaWR0aDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFrZVNwYWNlTWluOiBJbmZpbml0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFrZU11bHRpU3BhY2VNaW46IEluZmluaXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWtlTXVsdGlTcGFjZU1heDogLTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRSdW5CcmVha0FsbG93ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnROYW1lOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgU1BBQ0VfRkFDVE9SID0gMC4zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBNVUxUSV9TUEFDRV9GQUNUT1IgPSAxLjU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE1VTFRJX1NQQUNFX0ZBQ1RPUl9NQVggPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IHRoaXMueHJlZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeG9ianMgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBza2lwRW1wdHlYT2JqcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXByb2Nlc3NvciA9IG5ldyBFdmFsdWF0b3JQcmVwcm9jZXNzb3Ioc3RyZWFtLCB4cmVmLCBzdGF0ZU1hbmFnZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0U3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBlbnN1cmVUZXh0Q29udGVudEl0ZW0oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0Q29udGVudEl0ZW0uaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0Q29udGVudEl0ZW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udCA9IHRleHRTdGF0ZS5mb250O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGZvbnQubG9hZGVkTmFtZSBpbiBzZWVuU3R5bGVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlblN0eWxlc1tmb250LmxvYWRlZE5hbWVdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50LnN0eWxlc1tmb250LmxvYWRlZE5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6IGZvbnQuZmFsbGJhY2tOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzY2VudDogZm9udC5hc2NlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY2VudDogZm9udC5kZXNjZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsOiAhIWZvbnQudmVydGljYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0uZm9udE5hbWUgPSBmb250LmxvYWRlZE5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0c20gPSBbdGV4dFN0YXRlLmZvbnRTaXplICogdGV4dFN0YXRlLnRleHRIU2NhbGUsIDAsIDAsIHRleHRTdGF0ZS5mb250U2l6ZSwgMCwgdGV4dFN0YXRlLnRleHRSaXNlXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9udC5pc1R5cGUzRm9udCAmJiB0ZXh0U3RhdGUuZm9udE1hdHJpeCAhPT0gX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVggJiYgdGV4dFN0YXRlLmZvbnRTaXplID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhIZWlnaHQgPSBmb250LmJib3hbM10gLSBmb250LmJib3hbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaEhlaWdodCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEhlaWdodCA9IGdseXBoSGVpZ2h0ICogdGV4dFN0YXRlLmZvbnRNYXRyaXhbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNtWzNdICo9IGdseXBoSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRybSA9IF91dGlsLlV0aWwudHJhbnNmb3JtKHRleHRTdGF0ZS5jdG0sIF91dGlsLlV0aWwudHJhbnNmb3JtKHRleHRTdGF0ZS50ZXh0TWF0cml4LCB0c20pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0udHJhbnNmb3JtID0gdHJtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZm9udC52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRJdGVtLndpZHRoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS5oZWlnaHQgPSBNYXRoLnNxcnQodHJtWzJdICogdHJtWzJdICsgdHJtWzNdICogdHJtWzNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS52ZXJ0aWNhbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRJdGVtLndpZHRoID0gTWF0aC5zcXJ0KHRybVswXSAqIHRybVswXSArIHRybVsxXSAqIHRybVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0uaGVpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS52ZXJ0aWNhbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IHRleHRTdGF0ZS50ZXh0TGluZU1hdHJpeFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSB0ZXh0U3RhdGUudGV4dExpbmVNYXRyaXhbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY2FsZUxpbmVYID0gTWF0aC5zcXJ0KGEgKiBhICsgYiAqIGIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gdGV4dFN0YXRlLmN0bVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHRleHRTdGF0ZS5jdG1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY2FsZUN0bVggPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS50ZXh0QWR2YW5jZVNjYWxlID0gc2NhbGVDdG1YICogc2NhbGVMaW5lWDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRJdGVtLmxhc3RBZHZhbmNlV2lkdGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0ubGFzdEFkdmFuY2VIZWlnaHQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BhY2VXaWR0aCA9IGZvbnQuc3BhY2VXaWR0aCAvIDEwMDAgKiB0ZXh0U3RhdGUuZm9udFNpemU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwYWNlV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS5zcGFjZVdpZHRoID0gc3BhY2VXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS5mYWtlU3BhY2VNaW4gPSBzcGFjZVdpZHRoICogU1BBQ0VfRkFDVE9SO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRJdGVtLmZha2VNdWx0aVNwYWNlTWluID0gc3BhY2VXaWR0aCAqIE1VTFRJX1NQQUNFX0ZBQ1RPUjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS5mYWtlTXVsdGlTcGFjZU1heCA9IHNwYWNlV2lkdGggKiBNVUxUSV9TUEFDRV9GQUNUT1JfTUFYO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRJdGVtLnRleHRSdW5CcmVha0FsbG93ZWQgPSAhZm9udC5pc01vbm9zcGFjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS5zcGFjZVdpZHRoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS5mYWtlU3BhY2VNaW4gPSBJbmZpbml0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS5mYWtlTXVsdGlTcGFjZU1pbiA9IEluZmluaXR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRJdGVtLmZha2VNdWx0aVNwYWNlTWF4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS50ZXh0UnVuQnJlYWtBbGxvd2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0uaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dENvbnRlbnRJdGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlcGxhY2VXaGl0ZXNwYWNlKHN0cikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaSA9IHN0ci5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgaWkgJiYgKGNvZGUgPSBzdHIuY2hhckNvZGVBdChpKSkgPj0gMHgyMCAmJiBjb2RlIDw9IDB4N0YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpIDwgaWkgPyBzdHIucmVwbGFjZShXaGl0ZXNwYWNlUmVnZXhwLCAnICcpIDogc3RyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJ1bkJpZGlUcmFuc2Zvcm0odGV4dENodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHIgPSB0ZXh0Q2h1bmsuc3RyLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmlkaVJlc3VsdCA9ICgwLCBfYmlkaS5iaWRpKShzdHIsIC0xLCB0ZXh0Q2h1bmsudmVydGljYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyOiBub3JtYWxpemVXaGl0ZXNwYWNlID8gcmVwbGFjZVdoaXRlc3BhY2UoYmlkaVJlc3VsdC5zdHIpIDogYmlkaVJlc3VsdC5zdHIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXI6IGJpZGlSZXN1bHQuZGlyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHRleHRDaHVuay53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogdGV4dENodW5rLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdGV4dENodW5rLnRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnROYW1lOiB0ZXh0Q2h1bmsuZm9udE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBoYW5kbGVTZXRGb250KGZvbnROYW1lLCBmb250UmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmxvYWRGb250KGZvbnROYW1lLCBmb250UmVmLCByZXNvdXJjZXMpLnRoZW4oZnVuY3Rpb24gKHRyYW5zbGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS5mb250ID0gdHJhbnNsYXRlZC5mb250O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFN0YXRlLmZvbnRNYXRyaXggPSB0cmFuc2xhdGVkLmZvbnQuZm9udE1hdHJpeCB8fCBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYnVpbGRUZXh0Q29udGVudEl0ZW0oY2hhcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnQgPSB0ZXh0U3RhdGUuZm9udDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRDaHVuayA9IGVuc3VyZVRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBocyA9IGZvbnQuY2hhcnNUb0dseXBocyhjaGFycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnbHlwaHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaCA9IGdseXBoc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaFdpZHRoID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnQudmVydGljYWwgJiYgZ2x5cGgudm1ldHJpYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoV2lkdGggPSBnbHlwaC52bWV0cmljWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaFdpZHRoID0gZ2x5cGgud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaFVuaWNvZGUgPSBnbHlwaC51bmljb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE5vcm1hbGl6ZWRVbmljb2RlcyA9ICgwLCBfdW5pY29kZS5nZXROb3JtYWxpemVkVW5pY29kZXMpKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOb3JtYWxpemVkVW5pY29kZXNbZ2x5cGhVbmljb2RlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhVbmljb2RlID0gTm9ybWFsaXplZFVuaWNvZGVzW2dseXBoVW5pY29kZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoVW5pY29kZSA9ICgwLCBfdW5pY29kZS5yZXZlcnNlSWZSdGwpKGdseXBoVW5pY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhclNwYWNpbmcgPSB0ZXh0U3RhdGUuY2hhclNwYWNpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaC5pc1NwYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdvcmRTcGFjaW5nID0gdGV4dFN0YXRlLndvcmRTcGFjaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJTcGFjaW5nICs9IHdvcmRTcGFjaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmRTcGFjaW5nID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRGYWtlU3BhY2VzKHdvcmRTcGFjaW5nLCB0ZXh0Q2h1bmsuc3RyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHkgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZvbnQudmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdzAgPSBnbHlwaFdpZHRoICogdGV4dFN0YXRlLmZvbnRNYXRyaXhbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHggPSAodzAgKiB0ZXh0U3RhdGUuZm9udFNpemUgKyBjaGFyU3BhY2luZykgKiB0ZXh0U3RhdGUudGV4dEhTY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCArPSB0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHcxID0gZ2x5cGhXaWR0aCAqIHRleHRTdGF0ZS5mb250TWF0cml4WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5ID0gdzEgKiB0ZXh0U3RhdGUuZm9udFNpemUgKyBjaGFyU3BhY2luZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgKz0gdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS50cmFuc2xhdGVUZXh0TWF0cml4KHR4LCB0eSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q2h1bmsuc3RyLnB1c2goZ2x5cGhVbmljb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZm9udC52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENodW5rLmxhc3RBZHZhbmNlV2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDaHVuay53aWR0aCArPSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDaHVuay5sYXN0QWR2YW5jZUhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDaHVuay5oZWlnaHQgKz0gTWF0aC5hYnMoaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0Q2h1bms7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYWRkRmFrZVNwYWNlcyh3aWR0aCwgc3RyQnVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA8IHRleHRDb250ZW50SXRlbS5mYWtlU3BhY2VNaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA8IHRleHRDb250ZW50SXRlbS5mYWtlTXVsdGlTcGFjZU1pbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goJyAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmYWtlU3BhY2VzID0gTWF0aC5yb3VuZCh3aWR0aCAvIHRleHRDb250ZW50SXRlbS5zcGFjZVdpZHRoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZmFrZVNwYWNlcy0tID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goJyAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZsdXNoVGV4dENvbnRlbnRJdGVtKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRleHRDb250ZW50SXRlbS5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXh0Q29udGVudEl0ZW0udmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS53aWR0aCAqPSB0ZXh0Q29udGVudEl0ZW0udGV4dEFkdmFuY2VTY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS5oZWlnaHQgKj0gdGV4dENvbnRlbnRJdGVtLnRleHRBZHZhbmNlU2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudC5pdGVtcy5wdXNoKHJ1bkJpZGlUcmFuc2Zvcm0odGV4dENvbnRlbnRJdGVtKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0uc3RyLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZW5xdWV1ZUNodW5rKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gdGV4dENvbnRlbnQuaXRlbXMubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rLmVucXVldWUodGV4dENvbnRlbnQsIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudC5pdGVtcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnQuc3R5bGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aW1lU2xvdE1hbmFnZXIgPSBuZXcgVGltZVNsb3RNYW5hZ2VyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VCb2R5KHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uIG5leHQocHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5xdWV1ZUNodW5rKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChbcHJvbWlzZSwgc2luay5yZWFkeV0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VCb2R5KHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suZW5zdXJlTm90VGVybWluYXRlZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lU2xvdE1hbmFnZXIucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIShzdG9wID0gdGltZVNsb3RNYW5hZ2VyLmNoZWNrKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24uYXJncyA9IGFyZ3M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJlcHJvY2Vzc29yLnJlYWQob3BlcmF0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdGUgPSBzdGF0ZU1hbmFnZXIuc3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm4gPSBvcGVyYXRpb24uZm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gb3BlcmF0aW9uLmFyZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWR2YW5jZSwgZGlmZjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChmbiB8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGb250OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udE5hbWVBcmcgPSBhcmdzWzBdLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZUFyZyA9IGFyZ3NbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRTdGF0ZS5mb250ICYmIGZvbnROYW1lQXJnID09PSB0ZXh0U3RhdGUuZm9udE5hbWUgJiYgZm9udFNpemVBcmcgPT09IHRleHRTdGF0ZS5mb250U2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdGUuZm9udE5hbWUgPSBmb250TmFtZUFyZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFN0YXRlLmZvbnRTaXplID0gZm9udFNpemVBcmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoaGFuZGxlU2V0Rm9udChmb250TmFtZUFyZywgbnVsbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRUZXh0UmlzZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2hUZXh0Q29udGVudEl0ZW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFN0YXRlLnRleHRSaXNlID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRIU2NhbGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS50ZXh0SFNjYWxlID0gYXJnc1swXSAvIDEwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRMZWFkaW5nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdGUubGVhZGluZyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMubW92ZVRleHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc1NhbWVUZXh0TGluZSA9ICF0ZXh0U3RhdGUuZm9udCA/IGZhbHNlIDogKHRleHRTdGF0ZS5mb250LnZlcnRpY2FsID8gYXJnc1swXSA6IGFyZ3NbMV0pID09PSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlID0gYXJnc1swXSAtIGFyZ3NbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbWJpbmVUZXh0SXRlbXMgJiYgaXNTYW1lVGV4dExpbmUgJiYgdGV4dENvbnRlbnRJdGVtLmluaXRpYWxpemVkICYmIGFkdmFuY2UgPiAwICYmIGFkdmFuY2UgPD0gdGV4dENvbnRlbnRJdGVtLmZha2VNdWx0aVNwYWNlTWF4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdGUudHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0ud2lkdGggKz0gYXJnc1swXSAtIHRleHRDb250ZW50SXRlbS5sYXN0QWR2YW5jZVdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRJdGVtLmhlaWdodCArPSBhcmdzWzFdIC0gdGV4dENvbnRlbnRJdGVtLmxhc3RBZHZhbmNlSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZiA9IGFyZ3NbMF0gLSB0ZXh0Q29udGVudEl0ZW0ubGFzdEFkdmFuY2VXaWR0aCAtIChhcmdzWzFdIC0gdGV4dENvbnRlbnRJdGVtLmxhc3RBZHZhbmNlSGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZha2VTcGFjZXMoZGlmZiwgdGV4dENvbnRlbnRJdGVtLnN0cik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFN0YXRlLnRleHRNYXRyaXggPSB0ZXh0U3RhdGUudGV4dExpbmVNYXRyaXguc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRMZWFkaW5nTW92ZVRleHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS5sZWFkaW5nID0gLWFyZ3NbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFN0YXRlLnRleHRNYXRyaXggPSB0ZXh0U3RhdGUudGV4dExpbmVNYXRyaXguc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5uZXh0TGluZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2hUZXh0Q29udGVudEl0ZW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFN0YXRlLmNhcnJpYWdlUmV0dXJuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0VGV4dE1hdHJpeDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSA9IHRleHRTdGF0ZS5jYWxjVGV4dExpbmVNYXRyaXhBZHZhbmNlKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21iaW5lVGV4dEl0ZW1zICYmIGFkdmFuY2UgIT09IG51bGwgJiYgdGV4dENvbnRlbnRJdGVtLmluaXRpYWxpemVkICYmIGFkdmFuY2UudmFsdWUgPiAwICYmIGFkdmFuY2UudmFsdWUgPD0gdGV4dENvbnRlbnRJdGVtLmZha2VNdWx0aVNwYWNlTWF4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdGUudHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoYWR2YW5jZS53aWR0aCwgYWR2YW5jZS5oZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRJdGVtLndpZHRoICs9IGFkdmFuY2Uud2lkdGggLSB0ZXh0Q29udGVudEl0ZW0ubGFzdEFkdmFuY2VXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS5oZWlnaHQgKz0gYWR2YW5jZS5oZWlnaHQgLSB0ZXh0Q29udGVudEl0ZW0ubGFzdEFkdmFuY2VIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmID0gYWR2YW5jZS53aWR0aCAtIHRleHRDb250ZW50SXRlbS5sYXN0QWR2YW5jZVdpZHRoIC0gKGFkdmFuY2UuaGVpZ2h0IC0gdGV4dENvbnRlbnRJdGVtLmxhc3RBZHZhbmNlSGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZha2VTcGFjZXMoZGlmZiwgdGV4dENvbnRlbnRJdGVtLnN0cik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS5zZXRUZXh0TWF0cml4KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdGUuc2V0VGV4dExpbmVNYXRyaXgoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0Q2hhclNwYWNpbmc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS5jaGFyU3BhY2luZyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0V29yZFNwYWNpbmc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS53b3JkU3BhY2luZyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuYmVnaW5UZXh0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdGUudGV4dE1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWC5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdGUudGV4dExpbmVNYXRyaXggPSBfdXRpbC5JREVOVElUWV9NQVRSSVguc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zaG93U3BhY2VkVGV4dDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgamogPSBpdGVtcy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW1zW2pdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkVGV4dENvbnRlbnRJdGVtKGl0ZW1zW2pdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF91dGlsLmlzTnVtKShpdGVtc1tqXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnN1cmVUZXh0Q29udGVudEl0ZW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlID0gaXRlbXNbal0gKiB0ZXh0U3RhdGUuZm9udFNpemUgLyAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBicmVha1RleHRSdW4gPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0U3RhdGUuZm9udC52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBhZHZhbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdGUudHJhbnNsYXRlVGV4dE1hdHJpeCgwLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1RleHRSdW4gPSB0ZXh0Q29udGVudEl0ZW0udGV4dFJ1bkJyZWFrQWxsb3dlZCAmJiBhZHZhbmNlID4gdGV4dENvbnRlbnRJdGVtLmZha2VNdWx0aVNwYWNlTWF4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYnJlYWtUZXh0UnVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0uaGVpZ2h0ICs9IG9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UgPSAtYWR2YW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gYWR2YW5jZSAqIHRleHRTdGF0ZS50ZXh0SFNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdGUudHJhbnNsYXRlVGV4dE1hdHJpeChvZmZzZXQsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1RleHRSdW4gPSB0ZXh0Q29udGVudEl0ZW0udGV4dFJ1bkJyZWFrQWxsb3dlZCAmJiBhZHZhbmNlID4gdGV4dENvbnRlbnRJdGVtLmZha2VNdWx0aVNwYWNlTWF4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYnJlYWtUZXh0UnVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0ud2lkdGggKz0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrVGV4dFJ1bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWR2YW5jZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRmFrZVNwYWNlcyhhZHZhbmNlLCB0ZXh0Q29udGVudEl0ZW0uc3RyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNob3dUZXh0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZFRleHRDb250ZW50SXRlbShhcmdzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5uZXh0TGluZVNob3dUZXh0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdGUuY2FycmlhZ2VSZXR1cm4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRUZXh0Q29udGVudEl0ZW0oYXJnc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS53b3JkU3BhY2luZyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS5jaGFyU3BhY2luZyA9IGFyZ3NbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS5jYXJyaWFnZVJldHVybigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZFRleHRDb250ZW50SXRlbShhcmdzWzJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5wYWludFhPYmplY3Q6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF4b2Jqcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9ianMgPSByZXNvdXJjZXMuZ2V0KCdYT2JqZWN0JykgfHwgX3ByaW1pdGl2ZXMuRGljdC5lbXB0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYXJnc1swXS5uYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lICYmIHNraXBFbXB0eVhPYmpzW25hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dChuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZVhPYmplY3QsIHJlamVjdFhPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignWE9iamVjdCBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4b2JqID0geG9ianMuZ2V0KG5hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXhvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlWE9iamVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKHhvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdYT2JqZWN0IHNob3VsZCBiZSBhIHN0cmVhbScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHhvYmouZGljdC5nZXQoJ1N1YnR5cGUnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignWE9iamVjdCBzaG91bGQgaGF2ZSBhIE5hbWUgc3VidHlwZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZS5uYW1lICE9PSAnRm9ybScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwRW1wdHlYT2Jqc1tuYW1lXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVhPYmplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBzdGF0ZU1hbmFnZXIuc3RhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4T2JqU3RhdGVNYW5hZ2VyID0gbmV3IFN0YXRlTWFuYWdlcihjdXJyZW50U3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdHJpeCA9IHhvYmouZGljdC5nZXRBcnJheSgnTWF0cml4Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1hdHJpeCkgJiYgbWF0cml4Lmxlbmd0aCA9PT0gNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhPYmpTdGF0ZU1hbmFnZXIudHJhbnNmb3JtKG1hdHJpeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVucXVldWVDaHVuaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpbmtXcmFwcGVyID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVucXVldWVJbnZva2VkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnF1ZXVlOiBmdW5jdGlvbiBlbnF1ZXVlKGNodW5rLCBzaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5xdWV1ZUludm9rZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rLmVucXVldWUoY2h1bmssIHNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgZGVzaXJlZFNpemUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaW5rLmRlc2lyZWRTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgcmVhZHkoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaW5rLnJlYWR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0VGV4dENvbnRlbnQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogeG9iaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlczogeG9iai5kaWN0LmdldCgnUmVzb3VyY2VzJykgfHwgcmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlTWFuYWdlcjogeE9ialN0YXRlTWFuYWdlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVXaGl0ZXNwYWNlOiBub3JtYWxpemVXaGl0ZXNwYWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVUZXh0SXRlbXM6IGNvbWJpbmVUZXh0SXRlbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luazogc2lua1dyYXBwZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlblN0eWxlczogc2VlblN0eWxlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzaW5rV3JhcHBlci5lbnF1ZXVlSW52b2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwRW1wdHlYT2Jqc1tuYW1lXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVhPYmplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJlamVjdFhPYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhc29uIGluc3RhbmNlb2YgX3V0aWwuQWJvcnRFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLm9wdGlvbnMuaWdub3JlRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiZ2V0VGV4dENvbnRlbnQgLSBpZ25vcmluZyBYT2JqZWN0OiBcXFwiXCIuY29uY2F0KHJlYXNvbiwgXCJcXFwiLlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZWFzb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0R1N0YXRlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGljdE5hbWUgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXh0R1N0YXRlID0gcmVzb3VyY2VzLmdldCgnRXh0R1N0YXRlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShleHRHU3RhdGUpIHx8ICEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShkaWN0TmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdTdGF0ZSA9IGV4dEdTdGF0ZS5nZXQoZGljdE5hbWUubmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShnU3RhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnU3RhdGVGb250ID0gZ1N0YXRlLmdldCgnRm9udCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnU3RhdGVGb250KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdGUuZm9udE5hbWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFN0YXRlLmZvbnRTaXplID0gZ1N0YXRlRm9udFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoaGFuZGxlU2V0Rm9udChudWxsLCBnU3RhdGVGb250WzBdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRDb250ZW50Lml0ZW1zLmxlbmd0aCA+PSBzaW5rLmRlc2lyZWRTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dChkZWZlcnJlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnF1ZXVlQ2h1bmsoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLkFib3J0RXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXM4Lm9wdGlvbnMuaWdub3JlRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJnZXRUZXh0Q29udGVudCAtIGlnbm9yaW5nIGVycm9ycyBkdXJpbmcgXFxcIlwiLmNvbmNhdCh0YXNrLm5hbWUsIFwiXFxcIiBcIikgKyBcInRhc2s6IFxcXCJcIi5jb25jYXQocmVhc29uLCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnF1ZXVlQ2h1bmsoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0RGF0YVN0cnVjdHVyZXM6IGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3JfZXh0cmFjdERhdGFTdHJ1Y3R1cmVzKGRpY3QsIGJhc2VEaWN0LCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzOSA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IHRoaXMueHJlZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9Vbmljb2RlID0gZGljdC5nZXQoJ1RvVW5pY29kZScpIHx8IGJhc2VEaWN0LmdldCgnVG9Vbmljb2RlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRvVW5pY29kZVByb21pc2UgPSB0b1VuaWNvZGUgPyB0aGlzLnJlYWRUb1VuaWNvZGUodG9Vbmljb2RlKSA6IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuY29tcG9zaXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaWRTeXN0ZW1JbmZvID0gZGljdC5nZXQoJ0NJRFN5c3RlbUluZm8nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoY2lkU3lzdGVtSW5mbykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuY2lkU3lzdGVtSW5mbyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyeTogKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShjaWRTeXN0ZW1JbmZvLmdldCgnUmVnaXN0cnknKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJpbmc6ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoY2lkU3lzdGVtSW5mby5nZXQoJ09yZGVyaW5nJykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBsZW1lbnQ6IGNpZFN5c3RlbUluZm8uZ2V0KCdTdXBwbGVtZW50JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2lkVG9HaWRNYXAgPSBkaWN0LmdldCgnQ0lEVG9HSURNYXAnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShjaWRUb0dpZE1hcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuY2lkVG9HaWRNYXAgPSB0aGlzLnJlYWRDaWRUb0dpZE1hcChjaWRUb0dpZE1hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlmZmVyZW5jZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZUVuY29kaW5nTmFtZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY29kaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpY3QuaGFzKCdFbmNvZGluZycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nID0gZGljdC5nZXQoJ0VuY29kaW5nJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGVuY29kaW5nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUVuY29kaW5nTmFtZSA9IGVuY29kaW5nLmdldCgnQmFzZUVuY29kaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlRW5jb2RpbmdOYW1lID0gKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoYmFzZUVuY29kaW5nTmFtZSkgPyBiYXNlRW5jb2RpbmdOYW1lLm5hbWUgOiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5jb2RpbmcuaGFzKCdEaWZmZXJlbmNlcycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpZmZFbmNvZGluZyA9IGVuY29kaW5nLmdldCgnRGlmZmVyZW5jZXMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gZGlmZkVuY29kaW5nLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB4cmVmLmZldGNoSWZSZWYoZGlmZkVuY29kaW5nW2pdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzTnVtKShkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlc1tpbmRleCsrXSA9IGRhdGEubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgZW50cnkgaW4gJ0RpZmZlcmVuY2VzJyBhcnJheTogXCIuY29uY2F0KGRhdGEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShlbmNvZGluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VFbmNvZGluZ05hbWUgPSBlbmNvZGluZy5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdFbmNvZGluZyBpcyBub3QgYSBOYW1lIG5vciBhIERpY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlRW5jb2RpbmdOYW1lICE9PSAnTWFjUm9tYW5FbmNvZGluZycgJiYgYmFzZUVuY29kaW5nTmFtZSAhPT0gJ01hY0V4cGVydEVuY29kaW5nJyAmJiBiYXNlRW5jb2RpbmdOYW1lICE9PSAnV2luQW5zaUVuY29kaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUVuY29kaW5nTmFtZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZUVuY29kaW5nTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmRlZmF1bHRFbmNvZGluZyA9ICgwLCBfZW5jb2RpbmdzLmdldEVuY29kaW5nKShiYXNlRW5jb2RpbmdOYW1lKS5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc1N5bWJvbGljRm9udCA9ICEhKHByb3BlcnRpZXMuZmxhZ3MgJiBfZm9udHMuRm9udEZsYWdzLlN5bWJvbGljKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzTm9uc3ltYm9saWNGb250ID0gISEocHJvcGVydGllcy5mbGFncyAmIF9mb250cy5Gb250RmxhZ3MuTm9uc3ltYm9saWMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZyA9IF9lbmNvZGluZ3MuU3RhbmRhcmRFbmNvZGluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy50eXBlID09PSAnVHJ1ZVR5cGUnICYmICFpc05vbnN5bWJvbGljRm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBfZW5jb2RpbmdzLldpbkFuc2lFbmNvZGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1N5bWJvbGljRm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBfZW5jb2RpbmdzLk1hY1JvbWFuRW5jb2Rpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvcGVydGllcy5maWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC9TeW1ib2wvaS50ZXN0KHByb3BlcnRpZXMubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBfZW5jb2RpbmdzLlN5bWJvbFNldEVuY29kaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL0RpbmdiYXRzL2kudGVzdChwcm9wZXJ0aWVzLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nID0gX2VuY29kaW5ncy5aYXBmRGluZ2JhdHNFbmNvZGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmRlZmF1bHRFbmNvZGluZyA9IGVuY29kaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZGlmZmVyZW5jZXMgPSBkaWZmZXJlbmNlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmJhc2VFbmNvZGluZ05hbWUgPSBiYXNlRW5jb2RpbmdOYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuaGFzRW5jb2RpbmcgPSAhIWJhc2VFbmNvZGluZ05hbWUgfHwgZGlmZmVyZW5jZXMubGVuZ3RoID4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmRpY3QgPSBkaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b1VuaWNvZGVQcm9taXNlLnRoZW4oZnVuY3Rpb24gKHRvVW5pY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnRvVW5pY29kZSA9IHRvVW5pY29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzOS5idWlsZFRvVW5pY29kZShwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICh0b1VuaWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy50b1VuaWNvZGUgPSB0b1VuaWNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9idWlsZFNpbXBsZUZvbnRUb1VuaWNvZGU6IGZ1bmN0aW9uIF9idWlsZFNpbXBsZUZvbnRUb1VuaWNvZGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKCFwcm9wZXJ0aWVzLmNvbXBvc2l0ZSwgJ011c3QgYmUgYSBzaW1wbGUgZm9udC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9Vbmljb2RlID0gW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJjb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY29kaW5nID0gcHJvcGVydGllcy5kZWZhdWx0RW5jb2Rpbmcuc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZUVuY29kaW5nTmFtZSA9IHByb3BlcnRpZXMuYmFzZUVuY29kaW5nTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlmZmVyZW5jZXMgPSBwcm9wZXJ0aWVzLmRpZmZlcmVuY2VzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjaGFyY29kZSBpbiBkaWZmZXJlbmNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE5hbWUgPSBkaWZmZXJlbmNlc1tjaGFyY29kZV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdseXBoTmFtZSA9PT0gJy5ub3RkZWYnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nW2NoYXJjb2RlXSA9IGdseXBoTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhzVW5pY29kZU1hcCA9ICgwLCBfZ2x5cGhsaXN0LmdldEdseXBoc1VuaWNvZGUpKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNoYXJjb2RlIGluIGVuY29kaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoTmFtZSA9IGVuY29kaW5nW2NoYXJjb2RlXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGhOYW1lID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2x5cGhzVW5pY29kZU1hcFtnbHlwaE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChnbHlwaE5hbWVbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdHJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdseXBoTmFtZS5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBwYXJzZUludChnbHlwaE5hbWUuc3Vic3RyaW5nKDEpLCAxNik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2cnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGhOYW1lLmxlbmd0aCA9PT0gNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IHBhcnNlSW50KGdseXBoTmFtZS5zdWJzdHJpbmcoMSksIDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaE5hbWUubGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSArZ2x5cGhOYW1lLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuaWNvZGUgPSAoMCwgX3VuaWNvZGUuZ2V0VW5pY29kZUZvckdseXBoKShnbHlwaE5hbWUsIGdseXBoc1VuaWNvZGVNYXApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IHVuaWNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlRW5jb2RpbmdOYW1lICYmIGNvZGUgPT09ICtjaGFyY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZUVuY29kaW5nID0gKDAsIF9lbmNvZGluZ3MuZ2V0RW5jb2RpbmcpKGJhc2VFbmNvZGluZ05hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlRW5jb2RpbmcgJiYgKGdseXBoTmFtZSA9IGJhc2VFbmNvZGluZ1tjaGFyY29kZV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1VuaWNvZGVbY2hhcmNvZGVdID0gU3RyaW5nLmZyb21DaGFyQ29kZShnbHlwaHNVbmljb2RlTWFwW2dseXBoTmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1VuaWNvZGVbY2hhcmNvZGVdID0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9Vbmljb2RlW2NoYXJjb2RlXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZ2x5cGhzVW5pY29kZU1hcFtnbHlwaE5hbWVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9mb250cy5Ub1VuaWNvZGVNYXAodG9Vbmljb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZFRvVW5pY29kZTogZnVuY3Rpb24gYnVpbGRUb1VuaWNvZGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXAgPSAhIXByb3BlcnRpZXMudG9Vbmljb2RlICYmIHByb3BlcnRpZXMudG9Vbmljb2RlLmxlbmd0aCA+IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3BlcnRpZXMuY29tcG9zaXRlICYmIHByb3BlcnRpZXMuaGFzRW5jb2RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZmFsbGJhY2tUb1VuaWNvZGUgPSB0aGlzLl9idWlsZFNpbXBsZUZvbnRUb1VuaWNvZGUocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHByb3BlcnRpZXMudG9Vbmljb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3BlcnRpZXMuY29tcG9zaXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYnVpbGRTaW1wbGVGb250VG9Vbmljb2RlKHByb3BlcnRpZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5jb21wb3NpdGUgJiYgKHByb3BlcnRpZXMuY01hcC5idWlsdEluQ01hcCAmJiAhKHByb3BlcnRpZXMuY01hcCBpbnN0YW5jZW9mIF9jbWFwLklkZW50aXR5Q01hcCkgfHwgcHJvcGVydGllcy5jaWRTeXN0ZW1JbmZvLnJlZ2lzdHJ5ID09PSAnQWRvYmUnICYmIChwcm9wZXJ0aWVzLmNpZFN5c3RlbUluZm8ub3JkZXJpbmcgPT09ICdHQjEnIHx8IHByb3BlcnRpZXMuY2lkU3lzdGVtSW5mby5vcmRlcmluZyA9PT0gJ0NOUzEnIHx8IHByb3BlcnRpZXMuY2lkU3lzdGVtSW5mby5vcmRlcmluZyA9PT0gJ0phcGFuMScgfHwgcHJvcGVydGllcy5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nID09PSAnS29yZWExJykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWdpc3RyeSA9IHByb3BlcnRpZXMuY2lkU3lzdGVtSW5mby5yZWdpc3RyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9yZGVyaW5nID0gcHJvcGVydGllcy5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1Y3MyQ01hcE5hbWUgPSBfcHJpbWl0aXZlcy5OYW1lLmdldChyZWdpc3RyeSArICctJyArIG9yZGVyaW5nICsgJy1VQ1MyJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jbWFwLkNNYXBGYWN0b3J5LmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogdWNzMkNNYXBOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hCdWlsdEluQ01hcDogdGhpcy5mZXRjaEJ1aWx0SW5DTWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlQ01hcDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICh1Y3MyQ01hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNNYXAgPSBwcm9wZXJ0aWVzLmNNYXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9Vbmljb2RlID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwLmZvckVhY2goZnVuY3Rpb24gKGNoYXJjb2RlLCBjaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2lkID4gMHhmZmZmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignTWF4IHNpemUgb2YgQ0lEIGlzIDY1LDUzNScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1Y3MyID0gdWNzMkNNYXAubG9va3VwKGNpZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodWNzMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1VuaWNvZGVbY2hhcmNvZGVdID0gU3RyaW5nLmZyb21DaGFyQ29kZSgodWNzMi5jaGFyQ29kZUF0KDApIDw8IDgpICsgdWNzMi5jaGFyQ29kZUF0KDEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX2ZvbnRzLlRvVW5pY29kZU1hcCh0b1VuaWNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBfZm9udHMuSWRlbnRpdHlUb1VuaWNvZGVNYXAocHJvcGVydGllcy5maXJzdENoYXIsIHByb3BlcnRpZXMubGFzdENoYXIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkVG9Vbmljb2RlOiBmdW5jdGlvbiBQYXJ0aWFsRXZhbHVhdG9yX3JlYWRUb1VuaWNvZGUodG9Vbmljb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNtYXBPYmogPSB0b1VuaWNvZGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoY21hcE9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jbWFwLkNNYXBGYWN0b3J5LmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogY21hcE9iaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoQnVpbHRJbkNNYXA6IHRoaXMuZmV0Y2hCdWlsdEluQ01hcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUNNYXA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoY21hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNtYXAgaW5zdGFuY2VvZiBfY21hcC5JZGVudGl0eUNNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9mb250cy5JZGVudGl0eVRvVW5pY29kZU1hcCgwLCAweEZGRkYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9mb250cy5Ub1VuaWNvZGVNYXAoY21hcC5nZXRNYXAoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShjbWFwT2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NtYXAuQ01hcEZhY3RvcnkuY3JlYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBjbWFwT2JqLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hCdWlsdEluQ01hcDogdGhpcy5mZXRjaEJ1aWx0SW5DTWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlQ01hcDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChjbWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY21hcCBpbnN0YW5jZW9mIF9jbWFwLklkZW50aXR5Q01hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX2ZvbnRzLklkZW50aXR5VG9Vbmljb2RlTWFwKDAsIDB4RkZGRik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXAgPSBuZXcgQXJyYXkoY21hcC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21hcC5mb3JFYWNoKGZ1bmN0aW9uIChjaGFyQ29kZSwgdG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRva2VuLmxlbmd0aDsgayArPSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3MSA9IHRva2VuLmNoYXJDb2RlQXQoaykgPDwgOCB8IHRva2VuLmNoYXJDb2RlQXQoayArIDEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodzEgJiAweEY4MDApICE9PSAweEQ4MDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ci5wdXNoKHcxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdzIgPSB0b2tlbi5jaGFyQ29kZUF0KGspIDw8IDggfCB0b2tlbi5jaGFyQ29kZUF0KGsgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLnB1c2goKCh3MSAmIDB4M2ZmKSA8PCAxMCkgKyAodzIgJiAweDNmZikgKyAweDEwMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBbY2hhckNvZGVdID0gU3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkoU3RyaW5nLCBzdHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9mb250cy5Ub1VuaWNvZGVNYXAobWFwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2lkVG9HaWRNYXA6IGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3JfcmVhZENpZFRvR2lkTWFwKGNpZFRvR2lkU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoc0RhdGEgPSBjaWRUb0dpZFN0cmVhbS5nZXRCeXRlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IGdseXBoc0RhdGEubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhJRCA9IGdseXBoc0RhdGFbaisrXSA8PCA4IHwgZ2x5cGhzRGF0YVtqXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGhJRCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZSA9IGogPj4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2NvZGVdID0gZ2x5cGhJRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RXaWR0aHM6IGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3JfZXh0cmFjdFdpZHRocyhkaWN0LCBkZXNjcmlwdG9yLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhyZWYgPSB0aGlzLnhyZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoc1dpZHRocyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0V2lkdGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaHNWTWV0cmljcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0Vk1ldHJpY3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIGlpLCBqLCBqaiwgc3RhcnQsIGNvZGUsIHdpZHRocztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmNvbXBvc2l0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V2lkdGggPSBkaWN0LmhhcygnRFcnKSA/IGRpY3QuZ2V0KCdEVycpIDogMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhzID0gZGljdC5nZXQoJ1cnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHdpZHRocy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSB4cmVmLmZldGNoSWZSZWYod2lkdGhzW2krK10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSB4cmVmLmZldGNoSWZSZWYod2lkdGhzW2ldKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDAsIGpqID0gY29kZS5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHNXaWR0aHNbc3RhcnQrK10gPSB4cmVmLmZldGNoSWZSZWYoY29kZVtqXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSB4cmVmLmZldGNoSWZSZWYod2lkdGhzWysraV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IHN0YXJ0OyBqIDw9IGNvZGU7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzV2lkdGhzW2pdID0gd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZtZXRyaWNzID0gZGljdC5nZXRBcnJheSgnRFcyJykgfHwgWzg4MCwgLTEwMDBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZNZXRyaWNzID0gW3ZtZXRyaWNzWzFdLCBkZWZhdWx0V2lkdGggKiAwLjUsIHZtZXRyaWNzWzBdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtZXRyaWNzID0gZGljdC5nZXQoJ1cyJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2bWV0cmljcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gdm1ldHJpY3MubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHhyZWYuZmV0Y2hJZlJlZih2bWV0cmljc1tpKytdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IHhyZWYuZmV0Y2hJZlJlZih2bWV0cmljc1tpXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDAsIGpqID0gY29kZS5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzVk1ldHJpY3Nbc3RhcnQrK10gPSBbeHJlZi5mZXRjaElmUmVmKGNvZGVbaisrXSksIHhyZWYuZmV0Y2hJZlJlZihjb2RlW2orK10pLCB4cmVmLmZldGNoSWZSZWYoY29kZVtqXSldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZtZXRyaWMgPSBbeHJlZi5mZXRjaElmUmVmKHZtZXRyaWNzWysraV0pLCB4cmVmLmZldGNoSWZSZWYodm1ldHJpY3NbKytpXSksIHhyZWYuZmV0Y2hJZlJlZih2bWV0cmljc1srK2ldKV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IHN0YXJ0OyBqIDw9IGNvZGU7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoc1ZNZXRyaWNzW2pdID0gdm1ldHJpYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdENoYXIgPSBwcm9wZXJ0aWVzLmZpcnN0Q2hhcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhzID0gZGljdC5nZXQoJ1dpZHRocycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBmaXJzdENoYXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gd2lkdGhzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHNXaWR0aHNbaisrXSA9IHhyZWYuZmV0Y2hJZlJlZih3aWR0aHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V2lkdGggPSBwYXJzZUZsb2F0KGRlc2NyaXB0b3IuZ2V0KCdNaXNzaW5nV2lkdGgnKSkgfHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYXNlRm9udE5hbWUgPSBkaWN0LmdldCgnQmFzZUZvbnQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGJhc2VGb250TmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWV0cmljcyA9IHRoaXMuZ2V0QmFzZUZvbnRNZXRyaWNzKGJhc2VGb250TmFtZS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHNXaWR0aHMgPSB0aGlzLmJ1aWxkQ2hhckNvZGVUb1dpZHRoKG1ldHJpY3Mud2lkdGhzLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V2lkdGggPSBtZXRyaWNzLmRlZmF1bHRXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc01vbm9zcGFjZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0V2lkdGggPSBkZWZhdWx0V2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBnbHlwaCBpbiBnbHlwaHNXaWR0aHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoV2lkdGggPSBnbHlwaHNXaWR0aHNbZ2x5cGhdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZ2x5cGhXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0V2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0V2lkdGggPSBnbHlwaFdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RXaWR0aCAhPT0gZ2x5cGhXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNNb25vc3BhY2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTW9ub3NwYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZmxhZ3MgfD0gX2ZvbnRzLkZvbnRGbGFncy5GaXhlZFBpdGNoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZGVmYXVsdFdpZHRoID0gZGVmYXVsdFdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMud2lkdGhzID0gZ2x5cGhzV2lkdGhzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZGVmYXVsdFZNZXRyaWNzID0gZGVmYXVsdFZNZXRyaWNzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMudm1ldHJpY3MgPSBnbHlwaHNWTWV0cmljcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NlcmlmRm9udDogZnVuY3Rpb24gUGFydGlhbEV2YWx1YXRvcl9pc1NlcmlmRm9udChiYXNlRm9udE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udE5hbWVXb1N0eWxlID0gYmFzZUZvbnROYW1lLnNwbGl0KCctJylbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvbnROYW1lV29TdHlsZSBpbiAoMCwgX3N0YW5kYXJkX2ZvbnRzLmdldFNlcmlmRm9udHMpKCkgfHwgZm9udE5hbWVXb1N0eWxlLnNlYXJjaCgvc2VyaWYvZ2kpICE9PSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRCYXNlRm9udE1ldHJpY3M6IGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3JfZ2V0QmFzZUZvbnRNZXRyaWNzKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdFdpZHRoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGhzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vbm9zcGFjZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGRGb250TWFwID0gKDAsIF9zdGFuZGFyZF9mb250cy5nZXRTdGRGb250TWFwKSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb29rdXBOYW1lID0gc3RkRm9udE1hcFtuYW1lXSB8fCBuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBNZXRyaWNzID0gKDAsIF9tZXRyaWNzLmdldE1ldHJpY3MpKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShsb29rdXBOYW1lIGluIE1ldHJpY3MpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU2VyaWZGb250KG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXBOYW1lID0gJ1RpbWVzLVJvbWFuJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cE5hbWUgPSAnSGVsdmV0aWNhJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaFdpZHRocyA9IE1ldHJpY3NbbG9va3VwTmFtZV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzTnVtKShnbHlwaFdpZHRocykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdpZHRoID0gZ2x5cGhXaWR0aHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbm9zcGFjZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhzID0gZ2x5cGhXaWR0aHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V2lkdGg6IGRlZmF1bHRXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9ub3NwYWNlOiBtb25vc3BhY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoczogd2lkdGhzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENoYXJDb2RlVG9XaWR0aDogZnVuY3Rpb24gUGFydGlhbEV2YWx1YXRvcl9idWxpbGRDaGFyQ29kZVRvV2lkdGgod2lkdGhzQnlHbHlwaE5hbWUsIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGhzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlmZmVyZW5jZXMgPSBwcm9wZXJ0aWVzLmRpZmZlcmVuY2VzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNvZGluZyA9IHByb3BlcnRpZXMuZGVmYXVsdEVuY29kaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgY2hhckNvZGUgPSAwOyBjaGFyQ29kZSA8IDI1NjsgY2hhckNvZGUrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgaW4gZGlmZmVyZW5jZXMgJiYgd2lkdGhzQnlHbHlwaE5hbWVbZGlmZmVyZW5jZXNbY2hhckNvZGVdXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhzW2NoYXJDb2RlXSA9IHdpZHRoc0J5R2x5cGhOYW1lW2RpZmZlcmVuY2VzW2NoYXJDb2RlXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSBpbiBlbmNvZGluZyAmJiB3aWR0aHNCeUdseXBoTmFtZVtlbmNvZGluZ1tjaGFyQ29kZV1dKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aHNbY2hhckNvZGVdID0gd2lkdGhzQnlHbHlwaE5hbWVbZW5jb2RpbmdbY2hhckNvZGVdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdpZHRocztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVFdmFsdWF0ZUZvbnQ6IGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3JfcHJlRXZhbHVhdGVGb250KGRpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZURpY3QgPSBkaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gZGljdC5nZXQoJ1N1YnR5cGUnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdpbnZhbGlkIGZvbnQgU3VidHlwZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb3NpdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWludDhhcnJheTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlLm5hbWUgPT09ICdUeXBlMCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRmID0gZGljdC5nZXQoJ0Rlc2NlbmRhbnRGb250cycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignRGVzY2VuZGFudCBmb250cyBhcmUgbm90IHNwZWNpZmllZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdCA9IEFycmF5LmlzQXJyYXkoZGYpID8gdGhpcy54cmVmLmZldGNoSWZSZWYoZGZbMF0pIDogZGY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBkaWN0LmdldCgnU3VidHlwZScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignaW52YWxpZCBmb250IFN1YnR5cGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkaWN0LmdldCgnRm9udERlc2NyaXB0b3InKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNoID0gbmV3IF9tdXJtdXJoYXNoLk11cm11ckhhc2gzXzY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNvZGluZyA9IGJhc2VEaWN0LmdldFJhdygnRW5jb2RpbmcnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZW5jb2RpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLnVwZGF0ZShlbmNvZGluZy5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKGVuY29kaW5nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaC51cGRhdGUoZW5jb2RpbmcudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZW5jb2RpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGVuY29kaW5nLmdldEtleXMoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0ga2V5cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gZW5jb2RpbmcuZ2V0UmF3KGtleXNbaV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGVudHJ5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLnVwZGF0ZShlbnRyeS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gudXBkYXRlKGVudHJ5LnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShlbnRyeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpZmZMZW5ndGggPSBlbnRyeS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmQnVmID0gbmV3IEFycmF5KGRpZmZMZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZGlmZkxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlmZkVudHJ5ID0gZW50cnlbal07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShkaWZmRW50cnkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZkJ1ZltqXSA9IGRpZmZFbnRyeS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3V0aWwuaXNOdW0pKGRpZmZFbnRyeSkgfHwgKDAsIF9wcmltaXRpdmVzLmlzUmVmKShkaWZmRW50cnkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZkJ1ZltqXSA9IGRpZmZFbnRyeS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaC51cGRhdGUoZGlmZkJ1Zi5qb2luKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b1VuaWNvZGUgPSBkaWN0LmdldCgnVG9Vbmljb2RlJykgfHwgYmFzZURpY3QuZ2V0KCdUb1VuaWNvZGUnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKSh0b1VuaWNvZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdG9Vbmljb2RlLnN0ciB8fCB0b1VuaWNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OGFycmF5ID0gc3RyZWFtLmJ1ZmZlciA/IG5ldyBVaW50OEFycmF5KHN0cmVhbS5idWZmZXIuYnVmZmVyLCAwLCBzdHJlYW0uYnVmZmVyTGVuZ3RoKSA6IG5ldyBVaW50OEFycmF5KHN0cmVhbS5ieXRlcy5idWZmZXIsIHN0cmVhbS5zdGFydCwgc3RyZWFtLmVuZCAtIHN0cmVhbS5zdGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLnVwZGF0ZSh1aW50OGFycmF5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0b1VuaWNvZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLnVwZGF0ZSh0b1VuaWNvZGUubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGhzID0gZGljdC5nZXQoJ1dpZHRocycpIHx8IGJhc2VEaWN0LmdldCgnV2lkdGhzJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRocykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhhcnJheSA9IG5ldyBVaW50OEFycmF5KG5ldyBVaW50MzJBcnJheSh3aWR0aHMpLmJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLnVwZGF0ZSh1aW50OGFycmF5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3I6IGRlc2NyaXB0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Q6IGRpY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VEaWN0OiBiYXNlRGljdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlOiBjb21wb3NpdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaDogaGFzaCA/IGhhc2guaGV4ZGlnZXN0KCkgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlRm9udDogZnVuY3Rpb24gUGFydGlhbEV2YWx1YXRvcl90cmFuc2xhdGVGb250KHByZUV2YWx1YXRlZEZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMxMCA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZURpY3QgPSBwcmVFdmFsdWF0ZWRGb250LmJhc2VEaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gcHJlRXZhbHVhdGVkRm9udC5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb3NpdGUgPSBwcmVFdmFsdWF0ZWRGb250LmNvbXBvc2l0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByZUV2YWx1YXRlZEZvbnQuZGVzY3JpcHRvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHByZUV2YWx1YXRlZEZvbnQudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4Q2hhckluZGV4ID0gY29tcG9zaXRlID8gMHhGRkZGIDogMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcGVydGllcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ1R5cGUzJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvciA9IG5ldyBfcHJpbWl0aXZlcy5EaWN0KG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zZXQoJ0ZvbnROYW1lJywgX3ByaW1pdGl2ZXMuTmFtZS5nZXQodHlwZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zZXQoJ0ZvbnRCQm94JywgZGljdC5nZXRBcnJheSgnRm9udEJCb3gnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZUZvbnROYW1lID0gZGljdC5nZXQoJ0Jhc2VGb250Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoYmFzZUZvbnROYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignQmFzZSBmb250IGlzIG5vdCBzcGVjaWZpZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUZvbnROYW1lID0gYmFzZUZvbnROYW1lLm5hbWUucmVwbGFjZSgvWyxfXS9nLCAnLScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1ldHJpY3MgPSB0aGlzLmdldEJhc2VGb250TWV0cmljcyhiYXNlRm9udE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnROYW1lV29TdHlsZSA9IGJhc2VGb250TmFtZS5zcGxpdCgnLScpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZsYWdzID0gKHRoaXMuaXNTZXJpZkZvbnQoZm9udE5hbWVXb1N0eWxlKSA/IF9mb250cy5Gb250RmxhZ3MuU2VyaWYgOiAwKSB8IChtZXRyaWNzLm1vbm9zcGFjZSA/IF9mb250cy5Gb250RmxhZ3MuRml4ZWRQaXRjaCA6IDApIHwgKCgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0U3ltYm9sc0ZvbnRzKSgpW2ZvbnROYW1lV29TdHlsZV0gPyBfZm9udHMuRm9udEZsYWdzLlN5bWJvbGljIDogX2ZvbnRzLkZvbnRGbGFncy5Ob25zeW1ib2xpYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYmFzZUZvbnROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoczogbWV0cmljcy53aWR0aHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdpZHRoOiBtZXRyaWNzLmRlZmF1bHRXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczogZmxhZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDaGFyOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGFyOiBtYXhDaGFySW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXMoZGljdCwgZGljdCwgcHJvcGVydGllcykudGhlbihmdW5jdGlvbiAocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMud2lkdGhzID0gX3RoaXMxMC5idWlsZENoYXJDb2RlVG9XaWR0aChtZXRyaWNzLndpZHRocywgcHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfZm9udHMuRm9udChiYXNlRm9udE5hbWUsIG51bGwsIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RDaGFyID0gZGljdC5nZXQoJ0ZpcnN0Q2hhcicpIHx8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RDaGFyID0gZGljdC5nZXQoJ0xhc3RDaGFyJykgfHwgbWF4Q2hhckluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250TmFtZSA9IGRlc2NyaXB0b3IuZ2V0KCdGb250TmFtZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYXNlRm9udCA9IGRpY3QuZ2V0KCdCYXNlRm9udCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykoZm9udE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnROYW1lID0gX3ByaW1pdGl2ZXMuTmFtZS5nZXQoZm9udE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKGJhc2VGb250KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlRm9udCA9IF9wcmltaXRpdmVzLk5hbWUuZ2V0KGJhc2VGb250KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSAhPT0gJ1R5cGUzJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udE5hbWVTdHIgPSBmb250TmFtZSAmJiBmb250TmFtZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZUZvbnRTdHIgPSBiYXNlRm9udCAmJiBiYXNlRm9udC5uYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250TmFtZVN0ciAhPT0gYmFzZUZvbnRTdHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIlRoZSBGb250RGVzY3JpcHRvcidzIEZvbnROYW1lIGlzIFxcXCJcIi5jb25jYXQoZm9udE5hbWVTdHIsIFwiXFxcIiBidXQgXCIpICsgXCJzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIEZvbnQncyBCYXNlRm9udCBcXFwiXCIuY29uY2F0KGJhc2VGb250U3RyLCBcIlxcXCIuXCIpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnROYW1lU3RyICYmIGJhc2VGb250U3RyICYmIGJhc2VGb250U3RyLnN0YXJ0c1dpdGgoZm9udE5hbWVTdHIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udE5hbWUgPSBiYXNlRm9udDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnROYW1lID0gZm9udE5hbWUgfHwgYmFzZUZvbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZvbnROYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ2ludmFsaWQgZm9udCBuYW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnRGaWxlID0gZGVzY3JpcHRvci5nZXQoJ0ZvbnRGaWxlJywgJ0ZvbnRGaWxlMicsICdGb250RmlsZTMnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250RmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9udEZpbGUuZGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1YnR5cGUgPSBmb250RmlsZS5kaWN0LmdldCgnU3VidHlwZScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VidHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnR5cGUgPSBzdWJ0eXBlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGgxID0gZm9udEZpbGUuZGljdC5nZXQoJ0xlbmd0aDEnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGgyID0gZm9udEZpbGUuZGljdC5nZXQoJ0xlbmd0aDInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGgzID0gZm9udEZpbGUuZGljdC5nZXQoJ0xlbmd0aDMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGZvbnROYW1lLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnR5cGU6IHN1YnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IGZvbnRGaWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgxOiBsZW5ndGgxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgyOiBsZW5ndGgyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgzOiBsZW5ndGgzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWROYW1lOiBiYXNlRGljdC5sb2FkZWROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGU6IGNvbXBvc2l0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkZUNoYXJzOiBjb21wb3NpdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkUGl0Y2g6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250TWF0cml4OiBkaWN0LmdldEFycmF5KCdGb250TWF0cml4JykgfHwgX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Q2hhcjogZmlyc3RDaGFyIHx8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGFyOiBsYXN0Q2hhciB8fCBtYXhDaGFySW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJib3g6IGRlc2NyaXB0b3IuZ2V0QXJyYXkoJ0ZvbnRCQm94JyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzY2VudDogZGVzY3JpcHRvci5nZXQoJ0FzY2VudCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjZW50OiBkZXNjcmlwdG9yLmdldCgnRGVzY2VudCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4SGVpZ2h0OiBkZXNjcmlwdG9yLmdldCgnWEhlaWdodCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBIZWlnaHQ6IGRlc2NyaXB0b3IuZ2V0KCdDYXBIZWlnaHQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IGRlc2NyaXB0b3IuZ2V0KCdGbGFncycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGFsaWNBbmdsZTogZGVzY3JpcHRvci5nZXQoJ0l0YWxpY0FuZ2xlJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVHlwZTNGb250OiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNNYXBQcm9taXNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvc2l0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2lkRW5jb2RpbmcgPSBiYXNlRGljdC5nZXQoJ0VuY29kaW5nJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGNpZEVuY29kaW5nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5jaWRFbmNvZGluZyA9IGNpZEVuY29kaW5nLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwUHJvbWlzZSA9IF9jbWFwLkNNYXBGYWN0b3J5LmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogY2lkRW5jb2RpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaEJ1aWx0SW5DTWFwOiB0aGlzLmZldGNoQnVpbHRJbkNNYXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VDTWFwOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuY01hcCA9IGNNYXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnZlcnRpY2FsID0gcHJvcGVydGllcy5jTWFwLnZlcnRpY2FsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjTWFwUHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMTAuZXh0cmFjdERhdGFTdHJ1Y3R1cmVzKGRpY3QsIGJhc2VEaWN0LCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTAuZXh0cmFjdFdpZHRocyhkaWN0LCBkZXNjcmlwdG9yLCBwcm9wZXJ0aWVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ1R5cGUzJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5pc1R5cGUzRm9udCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9mb250cy5Gb250KGZvbnROYW1lLm5hbWUsIGZvbnRGaWxlLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBQYXJ0aWFsRXZhbHVhdG9yLmJ1aWxkRm9udFBhdGhzID0gZnVuY3Rpb24gKGZvbnQsIGdseXBocywgaGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYnVpbGRQYXRoKGZvbnRDaGFyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnQucmVuZGVyZXIuaGFzQnVpbHRQYXRoKGZvbnRDaGFyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5zZW5kKCdjb21tb25vYmonLCBbXCJcIi5jb25jYXQoZm9udC5sb2FkZWROYW1lLCBcIl9wYXRoX1wiKS5jb25jYXQoZm9udENoYXIpLCAnRm9udFBhdGgnLCBmb250LnJlbmRlcmVyLmdldFBhdGhKcyhmb250Q2hhcildKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9kaWRJdGVyYXRvckVycm9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2l0ZXJhdG9yRXJyb3IgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yID0gZ2x5cGhzW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3N0ZXA7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IChfc3RlcCA9IF9pdGVyYXRvci5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGggPSBfc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRQYXRoKGdseXBoLmZvbnRDaGFyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFjY2VudCA9IGdseXBoLmFjY2VudDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWNjZW50ICYmIGFjY2VudC5mb250Q2hhcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRQYXRoKGFjY2VudC5mb250Q2hhcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGlkSXRlcmF0b3JFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZXJhdG9yRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiAmJiBfaXRlcmF0b3IucmV0dXJuICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVyYXRvci5yZXR1cm4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhcnRpYWxFdmFsdWF0b3I7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QYXJ0aWFsRXZhbHVhdG9yID0gUGFydGlhbEV2YWx1YXRvcjtcblxuICAgICAgICAgICAgICAgIHZhciBUcmFuc2xhdGVkRm9udCA9IGZ1bmN0aW9uIFRyYW5zbGF0ZWRGb250Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVHJhbnNsYXRlZEZvbnQobG9hZGVkTmFtZSwgZm9udCwgZGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkZWROYW1lID0gbG9hZGVkTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udCA9IGZvbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpY3QgPSBkaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlM0xvYWRlZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZWRGb250LnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQ6IGZ1bmN0aW9uIHNlbmQoaGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5zZW5kKCdjb21tb25vYmonLCBbdGhpcy5sb2FkZWROYW1lLCAnRm9udCcsIHRoaXMuZm9udC5leHBvcnREYXRhKCldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxsYmFjazogZnVuY3Rpb24gZmFsbGJhY2soaGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5mb250LmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udC5kaXNhYmxlRm9udEZhY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaHMgPSB0aGlzLmZvbnQuZ2x5cGhDYWNoZVZhbHVlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJ0aWFsRXZhbHVhdG9yLmJ1aWxkRm9udFBhdGhzKHRoaXMuZm9udCwgZ2x5cGhzLCBoYW5kbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkVHlwZTNEYXRhOiBmdW5jdGlvbiBsb2FkVHlwZTNEYXRhKGV2YWx1YXRvciwgcmVzb3VyY2VzLCBwYXJlbnRPcGVyYXRvckxpc3QsIHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZm9udC5pc1R5cGUzRm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ011c3QgYmUgYSBUeXBlMyBmb250LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnR5cGUzTG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnR5cGUzTG9hZGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlM09wdGlvbnMgPSBPYmplY3QuY3JlYXRlKGV2YWx1YXRvci5vcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlM09wdGlvbnMuaWdub3JlRXJyb3JzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUzRXZhbHVhdG9yID0gZXZhbHVhdG9yLmNsb25lKHR5cGUzT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zbGF0ZWRGb250ID0gdGhpcy5mb250O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb2FkQ2hhclByb2NzUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyUHJvY3MgPSB0aGlzLmRpY3QuZ2V0KCdDaGFyUHJvY3MnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udFJlc291cmNlcyA9IHRoaXMuZGljdC5nZXQoJ1Jlc291cmNlcycpIHx8IHJlc291cmNlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhclByb2NLZXlzID0gY2hhclByb2NzLmdldEtleXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhclByb2NPcGVyYXRvckxpc3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9sb29wMiA9IGZ1bmN0aW9uIF9sb29wMigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IGNoYXJQcm9jS2V5c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZENoYXJQcm9jc1Byb21pc2UgPSBsb2FkQ2hhclByb2NzUHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaFN0cmVhbSA9IGNoYXJQcm9jcy5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcGVyYXRvckxpc3QgPSBuZXcgX29wZXJhdG9yX2xpc3QuT3BlcmF0b3JMaXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZTNFdmFsdWF0b3IuZ2V0T3BlcmF0b3JMaXN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW06IGdseXBoU3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2s6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBmb250UmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdDogb3BlcmF0b3JMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyUHJvY09wZXJhdG9yTGlzdFtrZXldID0gb3BlcmF0b3JMaXN0LmdldElSKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50T3BlcmF0b3JMaXN0LmFkZERlcGVuZGVuY2llcyhvcGVyYXRvckxpc3QuZGVwZW5kZW5jaWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJUeXBlMyBmb250IHJlc291cmNlIFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgaXMgbm90IGF2YWlsYWJsZS5cIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcGVyYXRvckxpc3QgPSBuZXcgX29wZXJhdG9yX2xpc3QuT3BlcmF0b3JMaXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhclByb2NPcGVyYXRvckxpc3Rba2V5XSA9IG9wZXJhdG9yTGlzdC5nZXRJUigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IGNoYXJQcm9jS2V5cy5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2xvb3AyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlM0xvYWRlZCA9IGxvYWRDaGFyUHJvY3NQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkRm9udC5jaGFyUHJvY09wZXJhdG9yTGlzdCA9IGNoYXJQcm9jT3BlcmF0b3JMaXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnR5cGUzTG9hZGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJhbnNsYXRlZEZvbnQ7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFN0YXRlTWFuYWdlciA9IGZ1bmN0aW9uIFN0YXRlTWFuYWdlckNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFN0YXRlTWFuYWdlcihpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlU3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlTWFuYWdlci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYXZlOiBmdW5jdGlvbiBzYXZlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvbGQgPSB0aGlzLnN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVTdGFjay5wdXNoKHRoaXMuc3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBvbGQuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN0b3JlOiBmdW5jdGlvbiByZXN0b3JlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2ID0gdGhpcy5zdGF0ZVN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHByZXY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogZnVuY3Rpb24gdHJhbnNmb3JtKGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmN0bSA9IF91dGlsLlV0aWwudHJhbnNmb3JtKHRoaXMuc3RhdGUuY3RtLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YXRlTWFuYWdlcjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgVGV4dFN0YXRlID0gZnVuY3Rpb24gVGV4dFN0YXRlQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVGV4dFN0YXRlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdG0gPSBuZXcgRmxvYXQzMkFycmF5KF91dGlsLklERU5USVRZX01BVFJJWCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbnROYW1lID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udFNpemUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb250ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udE1hdHJpeCA9IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0TWF0cml4ID0gX3V0aWwuSURFTlRJVFlfTUFUUklYLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHRMaW5lTWF0cml4ID0gX3V0aWwuSURFTlRJVFlfTUFUUklYLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJTcGFjaW5nID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud29yZFNwYWNpbmcgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZWFkaW5nID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dEhTY2FsZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHRSaXNlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFRleHRTdGF0ZS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUZXh0TWF0cml4OiBmdW5jdGlvbiBUZXh0U3RhdGVfc2V0VGV4dE1hdHJpeChhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSB0aGlzLnRleHRNYXRyaXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVswXSA9IGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVsxXSA9IGI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVsyXSA9IGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVszXSA9IGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVs0XSA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVs1XSA9IGY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGV4dExpbmVNYXRyaXg6IGZ1bmN0aW9uIFRleHRTdGF0ZV9zZXRUZXh0TWF0cml4KGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IHRoaXMudGV4dExpbmVNYXRyaXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVswXSA9IGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVsxXSA9IGI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVsyXSA9IGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVszXSA9IGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVs0XSA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVs1XSA9IGY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlVGV4dE1hdHJpeDogZnVuY3Rpb24gVGV4dFN0YXRlX3RyYW5zbGF0ZVRleHRNYXRyaXgoeCwgeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtID0gdGhpcy50ZXh0TWF0cml4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1bNF0gPSBtWzBdICogeCArIG1bMl0gKiB5ICsgbVs0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtWzVdID0gbVsxXSAqIHggKyBtWzNdICogeSArIG1bNV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlVGV4dExpbmVNYXRyaXg6IGZ1bmN0aW9uIFRleHRTdGF0ZV90cmFuc2xhdGVUZXh0TWF0cml4KHgsIHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IHRoaXMudGV4dExpbmVNYXRyaXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVs0XSA9IG1bMF0gKiB4ICsgbVsyXSAqIHkgKyBtWzRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1bNV0gPSBtWzFdICogeCArIG1bM10gKiB5ICsgbVs1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxjVGV4dExpbmVNYXRyaXhBZHZhbmNlOiBmdW5jdGlvbiBUZXh0U3RhdGVfY2FsY1RleHRMaW5lTWF0cml4QWR2YW5jZShhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnQgPSB0aGlzLmZvbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSB0aGlzLnRleHRMaW5lTWF0cml4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoYSA9PT0gbVswXSAmJiBiID09PSBtWzFdICYmIGMgPT09IG1bMl0gJiYgZCA9PT0gbVszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR4RGlmZiA9IGUgLSBtWzRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eURpZmYgPSBmIC0gbVs1XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250LnZlcnRpY2FsICYmIHR4RGlmZiAhPT0gMCB8fCAhZm9udC52ZXJ0aWNhbCAmJiB0eURpZmYgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVub21pbmF0b3IgPSBhICogZCAtIGIgKiBjO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnQudmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHggPSAtdHlEaWZmICogYyAvIGRlbm9taW5hdG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eSA9IHR5RGlmZiAqIGEgLyBkZW5vbWluYXRvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eCA9IHR4RGlmZiAqIGQgLyBkZW5vbWluYXRvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgPSAtdHhEaWZmICogYiAvIGRlbm9taW5hdG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB0eCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZvbnQudmVydGljYWwgPyB0eSA6IHR4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxjUmVuZGVyTWF0cml4OiBmdW5jdGlvbiBUZXh0U3RhdGVfY2FsY1JlbmRlTWF0cml4KGN0bSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0c20gPSBbdGhpcy5mb250U2l6ZSAqIHRoaXMudGV4dEhTY2FsZSwgMCwgMCwgdGhpcy5mb250U2l6ZSwgMCwgdGhpcy50ZXh0UmlzZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF91dGlsLlV0aWwudHJhbnNmb3JtKGN0bSwgX3V0aWwuVXRpbC50cmFuc2Zvcm0odGhpcy50ZXh0TWF0cml4LCB0c20pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJyaWFnZVJldHVybjogZnVuY3Rpb24gVGV4dFN0YXRlX2NhcnJpYWdlUmV0dXJuKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoMCwgLXRoaXMubGVhZGluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0TWF0cml4ID0gdGhpcy50ZXh0TGluZU1hdHJpeC5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lOiBmdW5jdGlvbiBUZXh0U3RhdGVfY2xvbmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsb25lID0gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9uZS50ZXh0TWF0cml4ID0gdGhpcy50ZXh0TWF0cml4LnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmUudGV4dExpbmVNYXRyaXggPSB0aGlzLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmUuZm9udE1hdHJpeCA9IHRoaXMuZm9udE1hdHJpeC5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbG9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRleHRTdGF0ZTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgRXZhbFN0YXRlID0gZnVuY3Rpb24gRXZhbFN0YXRlQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRXZhbFN0YXRlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdG0gPSBuZXcgRmxvYXQzMkFycmF5KF91dGlsLklERU5USVRZX01BVFJJWCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0UmVuZGVyaW5nTW9kZSA9IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTEw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGxDb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cm9rZUNvbG9yU3BhY2UgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEV2YWxTdGF0ZS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9uZTogZnVuY3Rpb24gQ2FudmFzRXh0cmFTdGF0ZV9jbG9uZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEV2YWxTdGF0ZTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgRXZhbHVhdG9yUHJlcHJvY2Vzc29yID0gZnVuY3Rpb24gRXZhbHVhdG9yUHJlcHJvY2Vzc29yQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGdldE9QTWFwID0gKDAsIF91dGlsLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3cnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNldExpbmVXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydKJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRMaW5lQ2FwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2onXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNldExpbmVKb2luLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ00nXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNldE1pdGVyTGltaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZCddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0RGFzaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyaSddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0UmVuZGVyaW5nSW50ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2knXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNldEZsYXRuZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dzJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRHU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncSddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2F2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydRJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5yZXN0b3JlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NtJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy50cmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbSddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMubW92ZVRvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2wnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLmxpbmVUbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5jdXJ2ZVRvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3YnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLmN1cnZlVG8yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3knXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLmN1cnZlVG8zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2gnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLmNsb3NlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyZSddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMucmVjdGFuZ2xlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1MnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnN0cm9rZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5jbG9zZVN0cm9rZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5maWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0YnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLmZpbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZionXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLmVvRmlsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydCJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5maWxsU3Ryb2tlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0IqJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5lb0ZpbGxTdHJva2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYiddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuY2xvc2VGaWxsU3Ryb2tlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2IqJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5jbG9zZUVPRmlsbFN0cm9rZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5lbmRQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1cnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLmNsaXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVyonXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLmVvQ2xpcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydCVCddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuYmVnaW5UZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VUJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5lbmRUZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1RjJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRDaGFyU3BhY2luZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUdyddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0V29yZFNwYWNpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVHonXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNldEhTY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUTCddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0TGVhZGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUZiddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0Rm9udCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUciddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0VGV4dFJlbmRlcmluZ01vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVHMnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNldFRleHRSaXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1RkJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5tb3ZlVGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydURCddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0TGVhZGluZ01vdmVUZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1RtJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRUZXh0TWF0cml4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1QqJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5uZXh0TGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUaiddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2hvd1RleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVEonXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNob3dTcGFjZWRUZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1xcJyddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMubmV4dExpbmVTaG93VGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydcIiddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZDAnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNldENoYXJXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkMSddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0Q2hhcldpZHRoQW5kQm91bmRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0NTJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRTdHJva2VDb2xvclNwYWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NzJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRGaWxsQ29sb3JTcGFjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTQyddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0U3Ryb2tlQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTQ04nXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNldFN0cm9rZUNvbG9yTixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAzMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzYyddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0RmlsbENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2NuJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRGaWxsQ29sb3JOLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDMzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0cnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNldFN0cm9rZUdyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZyddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0RmlsbEdyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUkcnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNldFN0cm9rZVJHQkNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JnJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRGaWxsUkdCQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSyddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0U3Ryb2tlQ01ZS0NvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2snXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNldEZpbGxDTVlLQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2gnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNoYWRpbmdGaWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0JJJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5iZWdpbklubGluZUltYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lEJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5iZWdpbkltYWdlRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFSSddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuZW5kSW5saW5lSW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRG8nXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnBhaW50WE9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydNUCddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMubWFya1BvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0RQJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5tYXJrUG9pbnRQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydCTUMnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLmJlZ2luTWFya2VkQ29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydCREMnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VNQyddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuZW5kTWFya2VkQ29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydCWCddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuYmVnaW5Db21wYXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRVgnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLmVuZENvbXBhdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydCTSddID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0JEJ10gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndHJ1ZSddID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZhJ10gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZmFsJ10gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZmFscyddID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZhbHNlJ10gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbnUnXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydudWwnXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydudWxsJ10gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIE1BWF9JTlZBTElEX1BBVEhfT1BTID0gMjA7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRXZhbHVhdG9yUHJlcHJvY2Vzc29yKHN0cmVhbSwgeHJlZiwgc3RhdGVNYW5hZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wTWFwID0gZ2V0T1BNYXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyc2VyID0gbmV3IF9wYXJzZXIuUGFyc2VyKG5ldyBfcGFyc2VyLkxleGVyKHN0cmVhbSwgdGhpcy5vcE1hcCksIGZhbHNlLCB4cmVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVNYW5hZ2VyID0gc3RhdGVNYW5hZ2VyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub25Qcm9jZXNzZWRBcmdzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9udW1JbnZhbGlkUGF0aE9QUyA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBFdmFsdWF0b3JQcmVwcm9jZXNzb3IucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IHNhdmVkU3RhdGVzRGVwdGgoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVNYW5hZ2VyLnN0YXRlU3RhY2subGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24gRXZhbHVhdG9yUHJlcHJvY2Vzc29yX3JlYWQob3BlcmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBvcGVyYXRpb24uYXJncztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLnBhcnNlci5nZXRPYmooKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY21kID0gb2JqLmNtZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcFNwZWMgPSB0aGlzLm9wTWFwW2NtZF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3BTcGVjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5rbm93biBjb21tYW5kIFxcXCJcIi5jb25jYXQoY21kLCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuID0gb3BTcGVjLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bUFyZ3MgPSBvcFNwZWMubnVtQXJncztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcmdzTGVuZ3RoID0gYXJncyAhPT0gbnVsbCA/IGFyZ3MubGVuZ3RoIDogMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcFNwZWMudmFyaWFibGVBcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NMZW5ndGggIT09IG51bUFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vblByb2Nlc3NlZEFyZ3MgPSB0aGlzLm5vblByb2Nlc3NlZEFyZ3M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGFyZ3NMZW5ndGggPiBudW1BcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25Qcm9jZXNzZWRBcmdzLnB1c2goYXJncy5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NMZW5ndGgtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChhcmdzTGVuZ3RoIDwgbnVtQXJncyAmJiBub25Qcm9jZXNzZWRBcmdzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MudW5zaGlmdChub25Qcm9jZXNzZWRBcmdzLnBvcCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NMZW5ndGgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmdzTGVuZ3RoIDwgbnVtQXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFydGlhbE1zZyA9IFwiY29tbWFuZCBcIi5jb25jYXQoY21kLCBcIjogZXhwZWN0ZWQgXCIpLmNvbmNhdChudW1BcmdzLCBcIiBhcmdzLCBcIikgKyBcImJ1dCByZWNlaXZlZCBcIi5jb25jYXQoYXJnc0xlbmd0aCwgXCIgYXJncy5cIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZuID49IF91dGlsLk9QUy5tb3ZlVG8gJiYgZm4gPD0gX3V0aWwuT1BTLmVuZFBhdGggJiYgKyt0aGlzLl9udW1JbnZhbGlkUGF0aE9QUyA+IE1BWF9JTlZBTElEX1BBVEhfT1BTKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIFwiLmNvbmNhdChwYXJ0aWFsTXNnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJTa2lwcGluZyBcIi5jb25jYXQocGFydGlhbE1zZykpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmdzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3NMZW5ndGggPiBudW1BcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiQ29tbWFuZCBcIi5jb25jYXQoY21kLCBcIjogZXhwZWN0ZWQgWzAsIFwiKS5jb25jYXQobnVtQXJncywgXCJdIGFyZ3MsIFwiKSArIFwiYnV0IHJlY2VpdmVkIFwiLmNvbmNhdChhcmdzTGVuZ3RoLCBcIiBhcmdzLlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJlcHJvY2Vzc0NvbW1hbmQoZm4sIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLmZuID0gZm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24uYXJncyA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNFT0YpKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmogIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmdzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2gob2JqKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMzMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1RvbyBtYW55IGFyZ3VtZW50cycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXByb2Nlc3NDb21tYW5kOiBmdW5jdGlvbiBFdmFsdWF0b3JQcmVwcm9jZXNzb3JfcHJlcHJvY2Vzc0NvbW1hbmQoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZuIHwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zYXZlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZU1hbmFnZXIuc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMucmVzdG9yZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVNYW5hZ2VyLnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnRyYW5zZm9ybTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVNYW5hZ2VyLnRyYW5zZm9ybShhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEV2YWx1YXRvclByZXByb2Nlc3NvcjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE3MiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ01hcEZhY3RvcnkgPSBleHBvcnRzLklkZW50aXR5Q01hcCA9IGV4cG9ydHMuQ01hcCA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3ByaW1pdGl2ZXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1NSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3BhcnNlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTU2KTtcblxuICAgICAgICAgICAgICAgIHZhciBfc3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTcpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuICAgICAgICAgICAgICAgIHZhciBCVUlMVF9JTl9DTUFQUyA9IFsnQWRvYmUtR0IxLVVDUzInLCAnQWRvYmUtQ05TMS1VQ1MyJywgJ0Fkb2JlLUphcGFuMS1VQ1MyJywgJ0Fkb2JlLUtvcmVhMS1VQ1MyJywgJzc4LUVVQy1IJywgJzc4LUVVQy1WJywgJzc4LUgnLCAnNzgtUktTSi1IJywgJzc4LVJLU0otVicsICc3OC1WJywgJzc4bXMtUktTSi1IJywgJzc4bXMtUktTSi1WJywgJzgzcHYtUktTSi1IJywgJzkwbXMtUktTSi1IJywgJzkwbXMtUktTSi1WJywgJzkwbXNwLVJLU0otSCcsICc5MG1zcC1SS1NKLVYnLCAnOTBwdi1SS1NKLUgnLCAnOTBwdi1SS1NKLVYnLCAnQWRkLUgnLCAnQWRkLVJLU0otSCcsICdBZGQtUktTSi1WJywgJ0FkZC1WJywgJ0Fkb2JlLUNOUzEtMCcsICdBZG9iZS1DTlMxLTEnLCAnQWRvYmUtQ05TMS0yJywgJ0Fkb2JlLUNOUzEtMycsICdBZG9iZS1DTlMxLTQnLCAnQWRvYmUtQ05TMS01JywgJ0Fkb2JlLUNOUzEtNicsICdBZG9iZS1HQjEtMCcsICdBZG9iZS1HQjEtMScsICdBZG9iZS1HQjEtMicsICdBZG9iZS1HQjEtMycsICdBZG9iZS1HQjEtNCcsICdBZG9iZS1HQjEtNScsICdBZG9iZS1KYXBhbjEtMCcsICdBZG9iZS1KYXBhbjEtMScsICdBZG9iZS1KYXBhbjEtMicsICdBZG9iZS1KYXBhbjEtMycsICdBZG9iZS1KYXBhbjEtNCcsICdBZG9iZS1KYXBhbjEtNScsICdBZG9iZS1KYXBhbjEtNicsICdBZG9iZS1Lb3JlYTEtMCcsICdBZG9iZS1Lb3JlYTEtMScsICdBZG9iZS1Lb3JlYTEtMicsICdCNS1IJywgJ0I1LVYnLCAnQjVwYy1IJywgJ0I1cGMtVicsICdDTlMtRVVDLUgnLCAnQ05TLUVVQy1WJywgJ0NOUzEtSCcsICdDTlMxLVYnLCAnQ05TMi1IJywgJ0NOUzItVicsICdFVEhLLUI1LUgnLCAnRVRISy1CNS1WJywgJ0VUZW4tQjUtSCcsICdFVGVuLUI1LVYnLCAnRVRlbm1zLUI1LUgnLCAnRVRlbm1zLUI1LVYnLCAnRVVDLUgnLCAnRVVDLVYnLCAnRXh0LUgnLCAnRXh0LVJLU0otSCcsICdFeHQtUktTSi1WJywgJ0V4dC1WJywgJ0dCLUVVQy1IJywgJ0dCLUVVQy1WJywgJ0dCLUgnLCAnR0ItVicsICdHQkstRVVDLUgnLCAnR0JLLUVVQy1WJywgJ0dCSzJLLUgnLCAnR0JLMkstVicsICdHQktwLUVVQy1IJywgJ0dCS3AtRVVDLVYnLCAnR0JULUVVQy1IJywgJ0dCVC1FVUMtVicsICdHQlQtSCcsICdHQlQtVicsICdHQlRwYy1FVUMtSCcsICdHQlRwYy1FVUMtVicsICdHQnBjLUVVQy1IJywgJ0dCcGMtRVVDLVYnLCAnSCcsICdIS2RsYS1CNS1IJywgJ0hLZGxhLUI1LVYnLCAnSEtkbGItQjUtSCcsICdIS2RsYi1CNS1WJywgJ0hLZ2Njcy1CNS1IJywgJ0hLZ2Njcy1CNS1WJywgJ0hLbTMxNC1CNS1IJywgJ0hLbTMxNC1CNS1WJywgJ0hLbTQ3MS1CNS1IJywgJ0hLbTQ3MS1CNS1WJywgJ0hLc2NzLUI1LUgnLCAnSEtzY3MtQjUtVicsICdIYW5rYWt1JywgJ0hpcmFnYW5hJywgJ0tTQy1FVUMtSCcsICdLU0MtRVVDLVYnLCAnS1NDLUgnLCAnS1NDLUpvaGFiLUgnLCAnS1NDLUpvaGFiLVYnLCAnS1NDLVYnLCAnS1NDbXMtVUhDLUgnLCAnS1NDbXMtVUhDLUhXLUgnLCAnS1NDbXMtVUhDLUhXLVYnLCAnS1NDbXMtVUhDLVYnLCAnS1NDcGMtRVVDLUgnLCAnS1NDcGMtRVVDLVYnLCAnS2F0YWthbmEnLCAnTldQLUgnLCAnTldQLVYnLCAnUktTSi1IJywgJ1JLU0otVicsICdSb21hbicsICdVbmlDTlMtVUNTMi1IJywgJ1VuaUNOUy1VQ1MyLVYnLCAnVW5pQ05TLVVURjE2LUgnLCAnVW5pQ05TLVVURjE2LVYnLCAnVW5pQ05TLVVURjMyLUgnLCAnVW5pQ05TLVVURjMyLVYnLCAnVW5pQ05TLVVURjgtSCcsICdVbmlDTlMtVVRGOC1WJywgJ1VuaUdCLVVDUzItSCcsICdVbmlHQi1VQ1MyLVYnLCAnVW5pR0ItVVRGMTYtSCcsICdVbmlHQi1VVEYxNi1WJywgJ1VuaUdCLVVURjMyLUgnLCAnVW5pR0ItVVRGMzItVicsICdVbmlHQi1VVEY4LUgnLCAnVW5pR0ItVVRGOC1WJywgJ1VuaUpJUy1VQ1MyLUgnLCAnVW5pSklTLVVDUzItSFctSCcsICdVbmlKSVMtVUNTMi1IVy1WJywgJ1VuaUpJUy1VQ1MyLVYnLCAnVW5pSklTLVVURjE2LUgnLCAnVW5pSklTLVVURjE2LVYnLCAnVW5pSklTLVVURjMyLUgnLCAnVW5pSklTLVVURjMyLVYnLCAnVW5pSklTLVVURjgtSCcsICdVbmlKSVMtVVRGOC1WJywgJ1VuaUpJUzIwMDQtVVRGMTYtSCcsICdVbmlKSVMyMDA0LVVURjE2LVYnLCAnVW5pSklTMjAwNC1VVEYzMi1IJywgJ1VuaUpJUzIwMDQtVVRGMzItVicsICdVbmlKSVMyMDA0LVVURjgtSCcsICdVbmlKSVMyMDA0LVVURjgtVicsICdVbmlKSVNQcm8tVUNTMi1IVy1WJywgJ1VuaUpJU1Byby1VQ1MyLVYnLCAnVW5pSklTUHJvLVVURjgtVicsICdVbmlKSVNYMDIxMy1VVEYzMi1IJywgJ1VuaUpJU1gwMjEzLVVURjMyLVYnLCAnVW5pSklTWDAyMTMyMDA0LVVURjMyLUgnLCAnVW5pSklTWDAyMTMyMDA0LVVURjMyLVYnLCAnVW5pS1MtVUNTMi1IJywgJ1VuaUtTLVVDUzItVicsICdVbmlLUy1VVEYxNi1IJywgJ1VuaUtTLVVURjE2LVYnLCAnVW5pS1MtVVRGMzItSCcsICdVbmlLUy1VVEYzMi1WJywgJ1VuaUtTLVVURjgtSCcsICdVbmlLUy1VVEY4LVYnLCAnVicsICdXUC1TeW1ib2wnXTtcblxuICAgICAgICAgICAgICAgIHZhciBDTWFwID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBDTWFwKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWlsdEluQ01hcCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ01hcCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZGVzcGFjZVJhbmdlcyA9IFtbXSwgW10sIFtdLCBbXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1Db2Rlc3BhY2VSYW5nZXMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmVydGljYWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZUNNYXAgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbHRJbkNNYXAgPSBidWlsdEluQ01hcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKENNYXAsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImFkZENvZGVzcGFjZVJhbmdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFkZENvZGVzcGFjZVJhbmdlKG4sIGxvdywgaGlnaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZGVzcGFjZVJhbmdlc1tuIC0gMV0ucHVzaChsb3csIGhpZ2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm51bUNvZGVzcGFjZVJhbmdlcysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwibWFwQ2lkUmFuZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbWFwQ2lkUmFuZ2UobG93LCBoaWdoLCBkc3RMb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXBbbG93KytdID0gZHN0TG93Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm1hcEJmUmFuZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbWFwQmZSYW5nZShsb3csIGhpZ2gsIGRzdExvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFzdEJ5dGUgPSBkc3RMb3cubGVuZ3RoIC0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobG93IDw9IGhpZ2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcFtsb3crK10gPSBkc3RMb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RMb3cgPSBkc3RMb3cuc3Vic3RyaW5nKDAsIGxhc3RCeXRlKSArIFN0cmluZy5mcm9tQ2hhckNvZGUoZHN0TG93LmNoYXJDb2RlQXQobGFzdEJ5dGUpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm1hcEJmUmFuZ2VUb0FycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG1hcEJmUmFuZ2VUb0FycmF5KGxvdywgaGlnaCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWkgPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxvdyA8PSBoaWdoICYmIGkgPCBpaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwW2xvd10gPSBhcnJheVtpKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytsb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm1hcE9uZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBtYXBPbmUoc3JjLCBkc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwW3NyY10gPSBkc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJsb29rdXBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbG9va3VwKGNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hcFtjb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNvbnRhaW5zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbnRhaW5zKGNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hcFtjb2RlXSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZm9yRWFjaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXAgPSB0aGlzLl9tYXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBtYXAubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPD0gMHgxMDAwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBbaV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhpLCBtYXBbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pIGluIG1hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKF9pLCBtYXBbX2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY2hhckNvZGVPZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjaGFyQ29kZU9mKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXAgPSB0aGlzLl9tYXA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcC5sZW5ndGggPD0gMHgxMDAwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hcC5pbmRleE9mKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGNoYXJDb2RlIGluIG1hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcFtjaGFyQ29kZV0gPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJDb2RlIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldE1hcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRNYXAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZWFkQ2hhckNvZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVhZENoYXJDb2RlKHN0ciwgb2Zmc2V0LCBvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZXNwYWNlUmFuZ2VzID0gdGhpcy5jb2Rlc3BhY2VSYW5nZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDAsIG5uID0gY29kZXNwYWNlUmFuZ2VzLmxlbmd0aDsgbiA8IG5uOyBuKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAoYyA8PCA4IHwgc3RyLmNoYXJDb2RlQXQob2Zmc2V0ICsgbikpID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVzcGFjZVJhbmdlID0gY29kZXNwYWNlUmFuZ2VzW25dO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMCwga2sgPSBjb2Rlc3BhY2VSYW5nZS5sZW5ndGg7IGsgPCBrazspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG93ID0gY29kZXNwYWNlUmFuZ2VbaysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGlnaCA9IGNvZGVzcGFjZVJhbmdlW2srK107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+PSBsb3cgJiYgYyA8PSBoaWdoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5jaGFyY29kZSA9IGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5sZW5ndGggPSBuICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5jaGFyY29kZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5sZW5ndGggPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwibGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXAubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXNJZGVudGl0eUNNYXBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodGhpcy5uYW1lID09PSAnSWRlbnRpdHktSCcgfHwgdGhpcy5uYW1lID09PSAnSWRlbnRpdHktVicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWFwLmxlbmd0aCAhPT0gMHgxMDAwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAweDEwMDAwOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tYXBbaV0gIT09IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDTWFwO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkNNYXAgPSBDTWFwO1xuXG4gICAgICAgICAgICAgICAgdmFyIElkZW50aXR5Q01hcCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9DTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoSWRlbnRpdHlDTWFwLCBfQ01hcCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElkZW50aXR5Q01hcCh2ZXJ0aWNhbCwgbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBJZGVudGl0eUNNYXApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoSWRlbnRpdHlDTWFwKS5jYWxsKHRoaXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy52ZXJ0aWNhbCA9IHZlcnRpY2FsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuYWRkQ29kZXNwYWNlUmFuZ2UobiwgMCwgMHhmZmZmKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKElkZW50aXR5Q01hcCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwibWFwQ2lkUmFuZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbWFwQ2lkUmFuZ2UobG93LCBoaWdoLCBkc3RMb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnc2hvdWxkIG5vdCBjYWxsIG1hcENpZFJhbmdlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJtYXBCZlJhbmdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG1hcEJmUmFuZ2UobG93LCBoaWdoLCBkc3RMb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnc2hvdWxkIG5vdCBjYWxsIG1hcEJmUmFuZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm1hcEJmUmFuZ2VUb0FycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG1hcEJmUmFuZ2VUb0FycmF5KGxvdywgaGlnaCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnc2hvdWxkIG5vdCBjYWxsIG1hcEJmUmFuZ2VUb0FycmF5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJtYXBPbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbWFwT25lKHNyYywgZHN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ3Nob3VsZCBub3QgY2FsbCBtYXBDaWRPbmUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImxvb2t1cFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBsb29rdXAoY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihjb2RlKSAmJiBjb2RlIDw9IDB4ZmZmZiA/IGNvZGUgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjb250YWluc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb250YWlucyhjb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGNvZGUpICYmIGNvZGUgPD0gMHhmZmZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZm9yRWFjaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IDB4ZmZmZjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhpLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY2hhckNvZGVPZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjaGFyQ29kZU9mKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSAmJiB2YWx1ZSA8PSAweGZmZmYgPyB2YWx1ZSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0TWFwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldE1hcCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hcCA9IG5ldyBBcnJheSgweDEwMDAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSAweGZmZmY7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwW2ldID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJsZW5ndGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDB4MTAwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpc0lkZW50aXR5Q01hcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKCdzaG91bGQgbm90IGFjY2VzcyAuaXNJZGVudGl0eUNNYXAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJZGVudGl0eUNNYXA7XG4gICAgICAgICAgICAgICAgICAgIH0oQ01hcCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLklkZW50aXR5Q01hcCA9IElkZW50aXR5Q01hcDtcblxuICAgICAgICAgICAgICAgIHZhciBCaW5hcnlDTWFwUmVhZGVyID0gZnVuY3Rpb24gQmluYXJ5Q01hcFJlYWRlckNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGhleFRvSW50KGEsIHNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4gPDwgOCB8IGFbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaGV4VG9TdHIoYSwgc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpemUgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShhWzBdLCBhWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpemUgPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShhWzBdLCBhWzFdLCBhWzJdLCBhWzNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgYS5zdWJhcnJheSgwLCBzaXplICsgMSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYWRkSGV4KGEsIGIsIHNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHNpemU7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYyArPSBhW2ldICsgYltpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW2ldID0gYyAmIDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID4+PSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaW5jSGV4KGEsIHNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHNpemU7IGkgPj0gMCAmJiBjID4gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYyArPSBhW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbaV0gPSBjICYgMjU1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPj49IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgTUFYX05VTV9TSVpFID0gMTY7XG4gICAgICAgICAgICAgICAgICAgIHZhciBNQVhfRU5DT0RFRF9OVU1fU0laRSA9IDE5O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEJpbmFyeUNNYXBTdHJlYW0oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQgPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG1wQnVmID0gbmV3IFVpbnQ4QXJyYXkoTUFYX0VOQ09ERURfTlVNX1NJWkUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQmluYXJ5Q01hcFN0cmVhbS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkQnl0ZTogZnVuY3Rpb24gcmVhZEJ5dGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucG9zID49IHRoaXMuZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5wb3MrK107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZE51bWJlcjogZnVuY3Rpb24gcmVhZE51bWJlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gdGhpcy5yZWFkQnl0ZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCd1bmV4cGVjdGVkIEVPRiBpbiBiY21hcCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9ICEoYiAmIDB4ODApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbiA8PCA3IHwgYiAmIDB4N0Y7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIWxhc3QpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFNpZ25lZDogZnVuY3Rpb24gcmVhZFNpZ25lZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IHRoaXMucmVhZE51bWJlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuICYgMSA/IH4obiA+Pj4gMSkgOiBuID4+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRIZXg6IGZ1bmN0aW9uIHJlYWRIZXgobnVtLCBzaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtLnNldCh0aGlzLmJ1ZmZlci5zdWJhcnJheSh0aGlzLnBvcywgdGhpcy5wb3MgKyBzaXplICsgMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zICs9IHNpemUgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRIZXhOdW1iZXI6IGZ1bmN0aW9uIHJlYWRIZXhOdW1iZXIobnVtLCBzaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YWNrID0gdGhpcy50bXBCdWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSB0aGlzLnJlYWRCeXRlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGIgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ3VuZXhwZWN0ZWQgRU9GIGluIGJjbWFwJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0ID0gIShiICYgMHg4MCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrW3NwKytdID0gYiAmIDB4N0Y7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIWxhc3QpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSBzaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJTaXplID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGJ1ZmZlclNpemUgPCA4ICYmIHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IHN0YWNrWy0tc3BdIDw8IGJ1ZmZlclNpemUgfCBidWZmZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJTaXplICs9IDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1baV0gPSBidWZmZXIgJiAyNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID4+PSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJTaXplIC09IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRIZXhTaWduZWQ6IGZ1bmN0aW9uIHJlYWRIZXhTaWduZWQobnVtLCBzaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkSGV4TnVtYmVyKG51bSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpZ24gPSBudW1bc2l6ZV0gJiAxID8gMjU1IDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBzaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IChjICYgMSkgPDwgOCB8IG51bVtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtW2ldID0gYyA+PiAxIF4gc2lnbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFN0cmluZzogZnVuY3Rpb24gcmVhZFN0cmluZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuID0gdGhpcy5yZWFkTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSAnJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMucmVhZE51bWJlcigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwcm9jZXNzQmluYXJ5Q01hcChkYXRhLCBjTWFwLCBleHRlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IG5ldyBCaW5hcnlDTWFwU3RyZWFtKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWFkZXIgPSBzdHJlYW0ucmVhZEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwLnZlcnRpY2FsID0gISEoaGVhZGVyICYgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVzZUNNYXAgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IG5ldyBVaW50OEFycmF5KE1BWF9OVU1fU0laRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IG5ldyBVaW50OEFycmF5KE1BWF9OVU1fU0laRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXIgPSBuZXcgVWludDhBcnJheShNQVhfTlVNX1NJWkUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyQ29kZSA9IG5ldyBVaW50OEFycmF5KE1BWF9OVU1fU0laRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcCA9IG5ldyBVaW50OEFycmF5KE1BWF9OVU1fU0laRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGIgPSBzdHJlYW0ucmVhZEJ5dGUoKSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IGIgPj4gNTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gNykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChiICYgMHgxRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUNNYXAgPSBzdHJlYW0ucmVhZFN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VxdWVuY2UgPSAhIShiICYgMHgxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhU2l6ZSA9IGIgJiAxNTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVNpemUgKyAxID4gTUFYX05VTV9TSVpFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3NCaW5hcnlDTWFwOiBJbnZhbGlkIGRhdGFTaXplLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVjczJEYXRhU2l6ZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJpdGVtc0NvdW50ID0gc3RyZWFtLnJlYWROdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXgoc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihlbmQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRIZXgoZW5kLCBzdGFydCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNNYXAuYWRkQ29kZXNwYWNlUmFuZ2UoZGF0YVNpemUgKyAxLCBoZXhUb0ludChzdGFydCwgZGF0YVNpemUpLCBoZXhUb0ludChlbmQsIGRhdGFTaXplKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgc3ViaXRlbXNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY0hleChlbmQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSGV4KHN0YXJ0LCBlbmQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoZW5kLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEhleChlbmQsIHN0YXJ0LCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNNYXAuYWRkQ29kZXNwYWNlUmFuZ2UoZGF0YVNpemUgKyAxLCBoZXhUb0ludChzdGFydCwgZGF0YVNpemUpLCBoZXhUb0ludChlbmQsIGRhdGFTaXplKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleChzdGFydCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKGVuZCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEhleChlbmQsIHN0YXJ0LCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlYWROdW1iZXIoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBzdWJpdGVtc0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jSGV4KGVuZCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihzdGFydCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRIZXgoc3RhcnQsIGVuZCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihlbmQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSGV4KGVuZCwgc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlYWROdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4KGNoYXIsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gc3RyZWFtLnJlYWROdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwLm1hcE9uZShoZXhUb0ludChjaGFyLCBkYXRhU2l6ZSksIGNvZGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IHN1Yml0ZW1zQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNIZXgoY2hhciwgZGF0YVNpemUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKHRtcCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSGV4KGNoYXIsIHRtcCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IHN0cmVhbS5yZWFkU2lnbmVkKCkgKyAoY29kZSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwLm1hcE9uZShoZXhUb0ludChjaGFyLCBkYXRhU2l6ZSksIGNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXgoc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihlbmQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRIZXgoZW5kLCBzdGFydCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBzdHJlYW0ucmVhZE51bWJlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNNYXAubWFwQ2lkUmFuZ2UoaGV4VG9JbnQoc3RhcnQsIGRhdGFTaXplKSwgaGV4VG9JbnQoZW5kLCBkYXRhU2l6ZSksIGNvZGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IHN1Yml0ZW1zQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNIZXgoZW5kLCBkYXRhU2l6ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXF1ZW5jZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEhleChzdGFydCwgZW5kLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydC5zZXQoZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKGVuZCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRIZXgoZW5kLCBzdGFydCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gc3RyZWFtLnJlYWROdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY01hcC5tYXBDaWRSYW5nZShoZXhUb0ludChzdGFydCwgZGF0YVNpemUpLCBoZXhUb0ludChlbmQsIGRhdGFTaXplKSwgY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleChjaGFyLCB1Y3MyRGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4KGNoYXJDb2RlLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY01hcC5tYXBPbmUoaGV4VG9JbnQoY2hhciwgdWNzMkRhdGFTaXplKSwgaGV4VG9TdHIoY2hhckNvZGUsIGRhdGFTaXplKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgc3ViaXRlbXNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY0hleChjaGFyLCB1Y3MyRGF0YVNpemUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKHRtcCwgdWNzMkRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEhleChjaGFyLCB0bXAsIHVjczJEYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNIZXgoY2hhckNvZGUsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhTaWduZWQodG1wLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEhleChjaGFyQ29kZSwgdG1wLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNNYXAubWFwT25lKGhleFRvSW50KGNoYXIsIHVjczJEYXRhU2l6ZSksIGhleFRvU3RyKGNoYXJDb2RlLCBkYXRhU2l6ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXgoc3RhcnQsIHVjczJEYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoZW5kLCB1Y3MyRGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEhleChlbmQsIHN0YXJ0LCB1Y3MyRGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4KGNoYXJDb2RlLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY01hcC5tYXBCZlJhbmdlKGhleFRvSW50KHN0YXJ0LCB1Y3MyRGF0YVNpemUpLCBoZXhUb0ludChlbmQsIHVjczJEYXRhU2l6ZSksIGhleFRvU3RyKGNoYXJDb2RlLCBkYXRhU2l6ZSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IHN1Yml0ZW1zQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNIZXgoZW5kLCB1Y3MyRGF0YVNpemUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKHN0YXJ0LCB1Y3MyRGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSGV4KHN0YXJ0LCBlbmQsIHVjczJEYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydC5zZXQoZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKGVuZCwgdWNzMkRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSGV4KGVuZCwgc3RhcnQsIHVjczJEYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4KGNoYXJDb2RlLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNNYXAubWFwQmZSYW5nZShoZXhUb0ludChzdGFydCwgdWNzMkRhdGFTaXplKSwgaGV4VG9JbnQoZW5kLCB1Y3MyRGF0YVNpemUpLCBoZXhUb1N0cihjaGFyQ29kZSwgZGF0YVNpemUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdwcm9jZXNzQmluYXJ5Q01hcDogVW5rbm93biB0eXBlOiAnICsgdHlwZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VDTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZXh0ZW5kKHVzZUNNYXApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY01hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEJpbmFyeUNNYXBSZWFkZXIoKSB7fVxuXG4gICAgICAgICAgICAgICAgICAgIEJpbmFyeUNNYXBSZWFkZXIucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VzczogcHJvY2Vzc0JpbmFyeUNNYXBcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJpbmFyeUNNYXBSZWFkZXI7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIENNYXBGYWN0b3J5ID0gZnVuY3Rpb24gQ01hcEZhY3RvcnlDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzdHJUb0ludChzdHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gYSA8PCA4IHwgc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZXhwZWN0U3RyaW5nKG9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3V0aWwuaXNTdHJpbmcpKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ01hbGZvcm1lZCBDTWFwOiBleHBlY3RlZCBzdHJpbmcuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBleHBlY3RJbnQob2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignTWFsZm9ybWVkIENNYXA6IGV4cGVjdGVkIGludC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBhcnNlQmZDaGFyKGNNYXAsIGxleGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSBsZXhlci5nZXRPYmooKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNFT0YpKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCAnZW5kYmZjaGFyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdFN0cmluZyhvYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcmMgPSBzdHJUb0ludChvYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaiA9IGxleGVyLmdldE9iaigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdFN0cmluZyhvYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkc3QgPSBvYmo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY01hcC5tYXBPbmUoc3JjLCBkc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcGFyc2VCZlJhbmdlKGNNYXAsIGxleGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSBsZXhlci5nZXRPYmooKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNFT0YpKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCAnZW5kYmZyYW5nZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RTdHJpbmcob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG93ID0gc3RyVG9JbnQob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSBsZXhlci5nZXRPYmooKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RTdHJpbmcob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGlnaCA9IHN0clRvSW50KG9iaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihvYmopIHx8ICgwLCBfdXRpbC5pc1N0cmluZykob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZHN0TG93ID0gTnVtYmVyLmlzSW50ZWdlcihvYmopID8gU3RyaW5nLmZyb21DaGFyQ29kZShvYmopIDogb2JqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwLm1hcEJmUmFuZ2UobG93LCBoaWdoLCBkc3RMb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmosICdbJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICghKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmosICddJykgJiYgISgwLCBfcHJpbWl0aXZlcy5pc0VPRikob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkucHVzaChvYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwLm1hcEJmUmFuZ2VUb0FycmF5KGxvdywgaGlnaCwgYXJyYXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdJbnZhbGlkIGJmIHJhbmdlLicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcGFyc2VDaWRDaGFyKGNNYXAsIGxleGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSBsZXhlci5nZXRPYmooKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNFT0YpKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCAnZW5kY2lkY2hhcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RTdHJpbmcob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3JjID0gc3RyVG9JbnQob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSBsZXhlci5nZXRPYmooKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RJbnQob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZHN0ID0gb2JqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNNYXAubWFwT25lKHNyYywgZHN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBhcnNlQ2lkUmFuZ2UoY01hcCwgbGV4ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IGxleGVyLmdldE9iaigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0VPRikob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmosICdlbmRjaWRyYW5nZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RTdHJpbmcob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG93ID0gc3RyVG9JbnQob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSBsZXhlci5nZXRPYmooKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RTdHJpbmcob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGlnaCA9IHN0clRvSW50KG9iaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0SW50KG9iaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRzdExvdyA9IG9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwLm1hcENpZFJhbmdlKGxvdywgaGlnaCwgZHN0TG93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBhcnNlQ29kZXNwYWNlUmFuZ2UoY01hcCwgbGV4ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IGxleGVyLmdldE9iaigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0VPRikob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmosICdlbmRjb2Rlc3BhY2VyYW5nZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfdXRpbC5pc1N0cmluZykob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG93ID0gc3RyVG9JbnQob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSBsZXhlci5nZXRPYmooKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF91dGlsLmlzU3RyaW5nKShvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoaWdoID0gc3RyVG9JbnQob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwLmFkZENvZGVzcGFjZVJhbmdlKG9iai5sZW5ndGgsIGxvdywgaGlnaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignSW52YWxpZCBjb2Rlc3BhY2UgcmFuZ2UuJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwYXJzZVdNb2RlKGNNYXAsIGxleGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwLnZlcnRpY2FsID0gISFvYmo7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwYXJzZUNNYXBOYW1lKGNNYXAsIGxleGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShvYmopICYmICgwLCBfdXRpbC5pc1N0cmluZykob2JqLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY01hcC5uYW1lID0gb2JqLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwYXJzZUNNYXAoY01hcCwgbGV4ZXIsIGZldGNoQnVpbHRJbkNNYXAsIHVzZUNNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91cztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbWJlZGRlZFVzZUNNYXA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG9iakxvb3A6IHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IGxleGVyLmdldE9iaigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNFT0YpKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmoubmFtZSA9PT0gJ1dNb2RlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlV01vZGUoY01hcCwgbGV4ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvYmoubmFtZSA9PT0gJ0NNYXBOYW1lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ01hcE5hbWUoY01hcCwgbGV4ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyA9IG9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob2JqLmNtZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZGNtYXAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvYmpMb29wO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndXNlY21hcCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShwcmV2aW91cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYmVkZGVkVXNlQ01hcCA9IHByZXZpb3VzLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JlZ2luY29kZXNwYWNlcmFuZ2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVzcGFjZVJhbmdlKGNNYXAsIGxleGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdiZWdpbmJmY2hhcic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQmZDaGFyKGNNYXAsIGxleGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdiZWdpbmNpZGNoYXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNpZENoYXIoY01hcCwgbGV4ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JlZ2luYmZyYW5nZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQmZSYW5nZShjTWFwLCBsZXhlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYmVnaW5jaWRyYW5nZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ2lkUmFuZ2UoY01hcCwgbGV4ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleCBpbnN0YW5jZW9mIF91dGlsLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnSW52YWxpZCBjTWFwIGRhdGE6ICcgKyBleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1c2VDTWFwICYmIGVtYmVkZGVkVXNlQ01hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUNNYXAgPSBlbWJlZGRlZFVzZUNNYXA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VDTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4dGVuZENNYXAoY01hcCwgZmV0Y2hCdWlsdEluQ01hcCwgdXNlQ01hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY01hcCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBleHRlbmRDTWFwKGNNYXAsIGZldGNoQnVpbHRJbkNNYXAsIHVzZUNNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVCdWlsdEluQ01hcCh1c2VDTWFwLCBmZXRjaEJ1aWx0SW5DTWFwKS50aGVuKGZ1bmN0aW9uIChuZXdDTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY01hcC51c2VDTWFwID0gbmV3Q01hcDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjTWFwLm51bUNvZGVzcGFjZVJhbmdlcyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXNlQ29kZXNwYWNlUmFuZ2VzID0gY01hcC51c2VDTWFwLmNvZGVzcGFjZVJhbmdlcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVzZUNvZGVzcGFjZVJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY01hcC5jb2Rlc3BhY2VSYW5nZXNbaV0gPSB1c2VDb2Rlc3BhY2VSYW5nZXNbaV0uc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNNYXAubnVtQ29kZXNwYWNlUmFuZ2VzID0gY01hcC51c2VDTWFwLm51bUNvZGVzcGFjZVJhbmdlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwLnVzZUNNYXAuZm9yRWFjaChmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNNYXAuY29udGFpbnMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY01hcC5tYXBPbmUoa2V5LCBjTWFwLnVzZUNNYXAubG9va3VwKGtleSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNNYXA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUJ1aWx0SW5DTWFwKG5hbWUsIGZldGNoQnVpbHRJbkNNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnSWRlbnRpdHktSCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBJZGVudGl0eUNNYXAoZmFsc2UsIDIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ0lkZW50aXR5LVYnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgSWRlbnRpdHlDTWFwKHRydWUsIDIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFCVUlMVF9JTl9DTUFQUy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1Vua25vd24gQ01hcCBuYW1lOiAnICsgbmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZldGNoQnVpbHRJbkNNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdCdWlsdC1pbiBDTWFwIHBhcmFtZXRlcnMgYXJlIG5vdCBwcm92aWRlZC4nKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaEJ1aWx0SW5DTWFwKG5hbWUpLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY01hcERhdGEgPSBkYXRhLmNNYXBEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvblR5cGUgPSBkYXRhLmNvbXByZXNzaW9uVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY01hcCA9IG5ldyBDTWFwKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXByZXNzaW9uVHlwZSA9PT0gX3V0aWwuQ01hcENvbXByZXNzaW9uVHlwZS5CSU5BUlkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCaW5hcnlDTWFwUmVhZGVyKCkucHJvY2VzcyhjTWFwRGF0YSwgY01hcCwgZnVuY3Rpb24gKHVzZUNNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleHRlbmRDTWFwKGNNYXAsIGZldGNoQnVpbHRJbkNNYXAsIHVzZUNNYXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcHJlc3Npb25UeXBlID09PSBfdXRpbC5DTWFwQ29tcHJlc3Npb25UeXBlLk5PTkUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxleGVyID0gbmV3IF9wYXJzZXIuTGV4ZXIobmV3IF9zdHJlYW0uU3RyZWFtKGNNYXBEYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUNNYXAoY01hcCwgbGV4ZXIsIGZldGNoQnVpbHRJbkNNYXAsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1RPRE86IE9ubHkgQklOQVJZL05PTkUgQ01hcCBjb21wcmVzc2lvbiBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKHBhcmFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNvZGluZyA9IHBhcmFtcy5lbmNvZGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmV0Y2hCdWlsdEluQ01hcCA9IHBhcmFtcy5mZXRjaEJ1aWx0SW5DTWFwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1c2VDTWFwID0gcGFyYW1zLnVzZUNNYXA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZW5jb2RpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVCdWlsdEluQ01hcChlbmNvZGluZy5uYW1lLCBmZXRjaEJ1aWx0SW5DTWFwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoZW5jb2RpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjTWFwID0gbmV3IENNYXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxleGVyID0gbmV3IF9wYXJzZXIuTGV4ZXIoZW5jb2RpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VDTWFwKGNNYXAsIGxleGVyLCBmZXRjaEJ1aWx0SW5DTWFwLCB1c2VDTWFwKS50aGVuKGZ1bmN0aW9uIChwYXJzZWRDTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VkQ01hcC5pc0lkZW50aXR5Q01hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVCdWlsdEluQ01hcChwYXJzZWRDTWFwLm5hbWUsIGZldGNoQnVpbHRJbkNNYXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkQ01hcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignRW5jb2RpbmcgcmVxdWlyZWQuJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ01hcEZhY3RvcnkgPSBDTWFwRmFjdG9yeTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTczICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5nZXRGb250VHlwZSA9IGdldEZvbnRUeXBlO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuSWRlbnRpdHlUb1VuaWNvZGVNYXAgPSBleHBvcnRzLlRvVW5pY29kZU1hcCA9IGV4cG9ydHMuRm9udEZsYWdzID0gZXhwb3J0cy5Gb250ID0gZXhwb3J0cy5FcnJvckZvbnQgPSBleHBvcnRzLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2NmZl9wYXJzZXIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE3NCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2dseXBobGlzdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTc3KTtcblxuICAgICAgICAgICAgICAgIHZhciBfZW5jb2RpbmdzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNzYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9zdGFuZGFyZF9mb250cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTc4KTtcblxuICAgICAgICAgICAgICAgIHZhciBfdW5pY29kZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTc5KTtcblxuICAgICAgICAgICAgICAgIHZhciBfZm9udF9yZW5kZXJlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTgwKTtcblxuICAgICAgICAgICAgICAgIHZhciBfY21hcCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTcyKTtcblxuICAgICAgICAgICAgICAgIHZhciBfc3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF90eXBlMV9wYXJzZXIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4MSk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2VcIik7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfZSA9IHVuZGVmaW5lZDsgdHJ5IHsgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuICAgICAgICAgICAgICAgIHZhciBQUklWQVRFX1VTRV9BUkVBUyA9IFtbMHhFMDAwLCAweEY4RkZdLCBbMHgxMDAwMDAsIDB4MTBGRkZEXV07XG4gICAgICAgICAgICAgICAgdmFyIFBERl9HTFlQSF9TUEFDRV9VTklUUyA9IDEwMDA7XG4gICAgICAgICAgICAgICAgdmFyIFNFQUNfQU5BTFlTSVNfRU5BQkxFRCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5TRUFDX0FOQUxZU0lTX0VOQUJMRUQgPSBTRUFDX0FOQUxZU0lTX0VOQUJMRUQ7XG4gICAgICAgICAgICAgICAgdmFyIEZvbnRGbGFncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgRml4ZWRQaXRjaDogMSxcbiAgICAgICAgICAgICAgICAgICAgU2VyaWY6IDIsXG4gICAgICAgICAgICAgICAgICAgIFN5bWJvbGljOiA0LFxuICAgICAgICAgICAgICAgICAgICBTY3JpcHQ6IDgsXG4gICAgICAgICAgICAgICAgICAgIE5vbnN5bWJvbGljOiAzMixcbiAgICAgICAgICAgICAgICAgICAgSXRhbGljOiA2NCxcbiAgICAgICAgICAgICAgICAgICAgQWxsQ2FwOiA2NTUzNixcbiAgICAgICAgICAgICAgICAgICAgU21hbGxDYXA6IDEzMTA3MixcbiAgICAgICAgICAgICAgICAgICAgRm9yY2VCb2xkOiAyNjIxNDRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuRm9udEZsYWdzID0gRm9udEZsYWdzO1xuICAgICAgICAgICAgICAgIHZhciBNYWNTdGFuZGFyZEdseXBoT3JkZXJpbmcgPSBbJy5ub3RkZWYnLCAnLm51bGwnLCAnbm9ubWFya2luZ3JldHVybicsICdzcGFjZScsICdleGNsYW0nLCAncXVvdGVkYmwnLCAnbnVtYmVyc2lnbicsICdkb2xsYXInLCAncGVyY2VudCcsICdhbXBlcnNhbmQnLCAncXVvdGVzaW5nbGUnLCAncGFyZW5sZWZ0JywgJ3BhcmVucmlnaHQnLCAnYXN0ZXJpc2snLCAncGx1cycsICdjb21tYScsICdoeXBoZW4nLCAncGVyaW9kJywgJ3NsYXNoJywgJ3plcm8nLCAnb25lJywgJ3R3bycsICd0aHJlZScsICdmb3VyJywgJ2ZpdmUnLCAnc2l4JywgJ3NldmVuJywgJ2VpZ2h0JywgJ25pbmUnLCAnY29sb24nLCAnc2VtaWNvbG9uJywgJ2xlc3MnLCAnZXF1YWwnLCAnZ3JlYXRlcicsICdxdWVzdGlvbicsICdhdCcsICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRicsICdHJywgJ0gnLCAnSScsICdKJywgJ0snLCAnTCcsICdNJywgJ04nLCAnTycsICdQJywgJ1EnLCAnUicsICdTJywgJ1QnLCAnVScsICdWJywgJ1cnLCAnWCcsICdZJywgJ1onLCAnYnJhY2tldGxlZnQnLCAnYmFja3NsYXNoJywgJ2JyYWNrZXRyaWdodCcsICdhc2NpaWNpcmN1bScsICd1bmRlcnNjb3JlJywgJ2dyYXZlJywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ2cnLCAnaCcsICdpJywgJ2onLCAnaycsICdsJywgJ20nLCAnbicsICdvJywgJ3AnLCAncScsICdyJywgJ3MnLCAndCcsICd1JywgJ3YnLCAndycsICd4JywgJ3knLCAneicsICdicmFjZWxlZnQnLCAnYmFyJywgJ2JyYWNlcmlnaHQnLCAnYXNjaWl0aWxkZScsICdBZGllcmVzaXMnLCAnQXJpbmcnLCAnQ2NlZGlsbGEnLCAnRWFjdXRlJywgJ050aWxkZScsICdPZGllcmVzaXMnLCAnVWRpZXJlc2lzJywgJ2FhY3V0ZScsICdhZ3JhdmUnLCAnYWNpcmN1bWZsZXgnLCAnYWRpZXJlc2lzJywgJ2F0aWxkZScsICdhcmluZycsICdjY2VkaWxsYScsICdlYWN1dGUnLCAnZWdyYXZlJywgJ2VjaXJjdW1mbGV4JywgJ2VkaWVyZXNpcycsICdpYWN1dGUnLCAnaWdyYXZlJywgJ2ljaXJjdW1mbGV4JywgJ2lkaWVyZXNpcycsICdudGlsZGUnLCAnb2FjdXRlJywgJ29ncmF2ZScsICdvY2lyY3VtZmxleCcsICdvZGllcmVzaXMnLCAnb3RpbGRlJywgJ3VhY3V0ZScsICd1Z3JhdmUnLCAndWNpcmN1bWZsZXgnLCAndWRpZXJlc2lzJywgJ2RhZ2dlcicsICdkZWdyZWUnLCAnY2VudCcsICdzdGVybGluZycsICdzZWN0aW9uJywgJ2J1bGxldCcsICdwYXJhZ3JhcGgnLCAnZ2VybWFuZGJscycsICdyZWdpc3RlcmVkJywgJ2NvcHlyaWdodCcsICd0cmFkZW1hcmsnLCAnYWN1dGUnLCAnZGllcmVzaXMnLCAnbm90ZXF1YWwnLCAnQUUnLCAnT3NsYXNoJywgJ2luZmluaXR5JywgJ3BsdXNtaW51cycsICdsZXNzZXF1YWwnLCAnZ3JlYXRlcmVxdWFsJywgJ3llbicsICdtdScsICdwYXJ0aWFsZGlmZicsICdzdW1tYXRpb24nLCAncHJvZHVjdCcsICdwaScsICdpbnRlZ3JhbCcsICdvcmRmZW1pbmluZScsICdvcmRtYXNjdWxpbmUnLCAnT21lZ2EnLCAnYWUnLCAnb3NsYXNoJywgJ3F1ZXN0aW9uZG93bicsICdleGNsYW1kb3duJywgJ2xvZ2ljYWxub3QnLCAncmFkaWNhbCcsICdmbG9yaW4nLCAnYXBwcm94ZXF1YWwnLCAnRGVsdGEnLCAnZ3VpbGxlbW90bGVmdCcsICdndWlsbGVtb3RyaWdodCcsICdlbGxpcHNpcycsICdub25icmVha2luZ3NwYWNlJywgJ0FncmF2ZScsICdBdGlsZGUnLCAnT3RpbGRlJywgJ09FJywgJ29lJywgJ2VuZGFzaCcsICdlbWRhc2gnLCAncXVvdGVkYmxsZWZ0JywgJ3F1b3RlZGJscmlnaHQnLCAncXVvdGVsZWZ0JywgJ3F1b3RlcmlnaHQnLCAnZGl2aWRlJywgJ2xvemVuZ2UnLCAneWRpZXJlc2lzJywgJ1lkaWVyZXNpcycsICdmcmFjdGlvbicsICdjdXJyZW5jeScsICdndWlsc2luZ2xsZWZ0JywgJ2d1aWxzaW5nbHJpZ2h0JywgJ2ZpJywgJ2ZsJywgJ2RhZ2dlcmRibCcsICdwZXJpb2RjZW50ZXJlZCcsICdxdW90ZXNpbmdsYmFzZScsICdxdW90ZWRibGJhc2UnLCAncGVydGhvdXNhbmQnLCAnQWNpcmN1bWZsZXgnLCAnRWNpcmN1bWZsZXgnLCAnQWFjdXRlJywgJ0VkaWVyZXNpcycsICdFZ3JhdmUnLCAnSWFjdXRlJywgJ0ljaXJjdW1mbGV4JywgJ0lkaWVyZXNpcycsICdJZ3JhdmUnLCAnT2FjdXRlJywgJ09jaXJjdW1mbGV4JywgJ2FwcGxlJywgJ09ncmF2ZScsICdVYWN1dGUnLCAnVWNpcmN1bWZsZXgnLCAnVWdyYXZlJywgJ2RvdGxlc3NpJywgJ2NpcmN1bWZsZXgnLCAndGlsZGUnLCAnbWFjcm9uJywgJ2JyZXZlJywgJ2RvdGFjY2VudCcsICdyaW5nJywgJ2NlZGlsbGEnLCAnaHVuZ2FydW1sYXV0JywgJ29nb25laycsICdjYXJvbicsICdMc2xhc2gnLCAnbHNsYXNoJywgJ1NjYXJvbicsICdzY2Fyb24nLCAnWmNhcm9uJywgJ3pjYXJvbicsICdicm9rZW5iYXInLCAnRXRoJywgJ2V0aCcsICdZYWN1dGUnLCAneWFjdXRlJywgJ1Rob3JuJywgJ3Rob3JuJywgJ21pbnVzJywgJ211bHRpcGx5JywgJ29uZXN1cGVyaW9yJywgJ3R3b3N1cGVyaW9yJywgJ3RocmVlc3VwZXJpb3InLCAnb25laGFsZicsICdvbmVxdWFydGVyJywgJ3RocmVlcXVhcnRlcnMnLCAnZnJhbmMnLCAnR2JyZXZlJywgJ2dicmV2ZScsICdJZG90YWNjZW50JywgJ1NjZWRpbGxhJywgJ3NjZWRpbGxhJywgJ0NhY3V0ZScsICdjYWN1dGUnLCAnQ2Nhcm9uJywgJ2NjYXJvbicsICdkY3JvYXQnXTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFkanVzdFdpZHRocyhwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvcGVydGllcy5mb250TWF0cml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5mb250TWF0cml4WzBdID09PSBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWFswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlID0gMC4wMDEgLyBwcm9wZXJ0aWVzLmZvbnRNYXRyaXhbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaHNXaWR0aHMgPSBwcm9wZXJ0aWVzLndpZHRocztcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBnbHlwaCBpbiBnbHlwaHNXaWR0aHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoc1dpZHRoc1tnbHlwaF0gKj0gc2NhbGU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmRlZmF1bHRXaWR0aCAqPSBzY2FsZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhZGp1c3RUb1VuaWNvZGUocHJvcGVydGllcywgYnVpbHRJbkVuY29kaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5oYXNFbmNvZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGJ1aWx0SW5FbmNvZGluZyA9PT0gcHJvcGVydGllcy5kZWZhdWx0RW5jb2RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLnRvVW5pY29kZSBpbnN0YW5jZW9mIElkZW50aXR5VG9Vbmljb2RlTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgdG9Vbmljb2RlID0gW10sXG4gICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHNVbmljb2RlTWFwID0gKDAsIF9nbHlwaGxpc3QuZ2V0R2x5cGhzVW5pY29kZSkoKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjaGFyQ29kZSBpbiBidWlsdEluRW5jb2RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaE5hbWUgPSBidWlsdEluRW5jb2RpbmdbY2hhckNvZGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuaWNvZGUgPSAoMCwgX3VuaWNvZGUuZ2V0VW5pY29kZUZvckdseXBoKShnbHlwaE5hbWUsIGdseXBoc1VuaWNvZGVNYXApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1VuaWNvZGVbY2hhckNvZGVdID0gU3RyaW5nLmZyb21DaGFyQ29kZSh1bmljb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMudG9Vbmljb2RlLmFtZW5kKHRvVW5pY29kZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Rm9udFR5cGUodHlwZSwgc3VidHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1R5cGUxJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VidHlwZSA9PT0gJ1R5cGUxQycgPyBfdXRpbC5Gb250VHlwZS5UWVBFMUMgOiBfdXRpbC5Gb250VHlwZS5UWVBFMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ0lERm9udFR5cGUwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VidHlwZSA9PT0gJ0NJREZvbnRUeXBlMEMnID8gX3V0aWwuRm9udFR5cGUuQ0lERk9OVFRZUEUwQyA6IF91dGlsLkZvbnRUeXBlLkNJREZPTlRUWVBFMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnT3BlblR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdXRpbC5Gb250VHlwZS5PUEVOVFlQRTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVHJ1ZVR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdXRpbC5Gb250VHlwZS5UUlVFVFlQRTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ0lERm9udFR5cGUyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3V0aWwuRm9udFR5cGUuQ0lERk9OVFRZUEUyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdNTVR5cGUxJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3V0aWwuRm9udFR5cGUuTU1UWVBFMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVHlwZTAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdXRpbC5Gb250VHlwZS5UWVBFMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3V0aWwuRm9udFR5cGUuVU5LTk9XTjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlY292ZXJHbHlwaE5hbWUobmFtZSwgZ2x5cGhzVW5pY29kZU1hcCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGhzVW5pY29kZU1hcFtuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciB1bmljb2RlID0gKDAsIF91bmljb2RlLmdldFVuaWNvZGVGb3JHbHlwaCkobmFtZSwgZ2x5cGhzVW5pY29kZU1hcCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGUgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZ2x5cGhzVW5pY29kZU1hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaHNVbmljb2RlTWFwW2tleV0gPT09IHVuaWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ1VuYWJsZSB0byByZWNvdmVyIGEgc3RhbmRhcmQgZ2x5cGggbmFtZSBmb3I6ICcgKyBuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIEdseXBoID0gZnVuY3Rpb24gR2x5cGhDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBHbHlwaChmb250Q2hhciwgdW5pY29kZSwgYWNjZW50LCB3aWR0aCwgdm1ldHJpYywgb3BlcmF0b3JMaXN0SWQsIGlzU3BhY2UsIGlzSW5Gb250KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbnRDaGFyID0gZm9udENoYXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuaWNvZGUgPSB1bmljb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2NlbnQgPSBhY2NlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZtZXRyaWMgPSB2bWV0cmljO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVyYXRvckxpc3RJZCA9IG9wZXJhdG9yTGlzdElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1NwYWNlID0gaXNTcGFjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNJbkZvbnQgPSBpc0luRm9udDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEdseXBoLnByb3RvdHlwZS5tYXRjaGVzRm9yQ2FjaGUgPSBmdW5jdGlvbiAoZm9udENoYXIsIHVuaWNvZGUsIGFjY2VudCwgd2lkdGgsIHZtZXRyaWMsIG9wZXJhdG9yTGlzdElkLCBpc1NwYWNlLCBpc0luRm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9udENoYXIgPT09IGZvbnRDaGFyICYmIHRoaXMudW5pY29kZSA9PT0gdW5pY29kZSAmJiB0aGlzLmFjY2VudCA9PT0gYWNjZW50ICYmIHRoaXMud2lkdGggPT09IHdpZHRoICYmIHRoaXMudm1ldHJpYyA9PT0gdm1ldHJpYyAmJiB0aGlzLm9wZXJhdG9yTGlzdElkID09PSBvcGVyYXRvckxpc3RJZCAmJiB0aGlzLmlzU3BhY2UgPT09IGlzU3BhY2UgJiYgdGhpcy5pc0luRm9udCA9PT0gaXNJbkZvbnQ7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdseXBoO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIHZhciBUb1VuaWNvZGVNYXAgPSBmdW5jdGlvbiBUb1VuaWNvZGVNYXBDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUb1VuaWNvZGVNYXAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY21hcCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAgPSBjbWFwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgVG9Vbmljb2RlTWFwLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hcC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgY2hhckNvZGUgaW4gdGhpcy5fbWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGNoYXJDb2RlLCB0aGlzLl9tYXBbY2hhckNvZGVdLmNoYXJDb2RlQXQoMCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hcFtpXSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFwW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlT2Y6IGZ1bmN0aW9uIGNoYXJDb2RlT2YodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFwID0gdGhpcy5fbWFwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcC5sZW5ndGggPD0gMHgxMDAwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFwLmluZGV4T2YodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGNoYXJDb2RlIGluIG1hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwW2NoYXJDb2RlXSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGFyQ29kZSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYW1lbmQ6IGZ1bmN0aW9uIGFtZW5kKG1hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGNoYXJDb2RlIGluIG1hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXBbY2hhckNvZGVdID0gbWFwW2NoYXJDb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBUb1VuaWNvZGVNYXA7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Ub1VuaWNvZGVNYXAgPSBUb1VuaWNvZGVNYXA7XG5cbiAgICAgICAgICAgICAgICB2YXIgSWRlbnRpdHlUb1VuaWNvZGVNYXAgPSBmdW5jdGlvbiBJZGVudGl0eVRvVW5pY29kZU1hcENsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElkZW50aXR5VG9Vbmljb2RlTWFwKGZpcnN0Q2hhciwgbGFzdENoYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RDaGFyID0gZmlyc3RDaGFyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0Q2hhciA9IGxhc3RDaGFyO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgSWRlbnRpdHlUb1VuaWNvZGVNYXAucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sYXN0Q2hhciArIDEgLSB0aGlzLmZpcnN0Q2hhcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5maXJzdENoYXIsIGlpID0gdGhpcy5sYXN0Q2hhcjsgaSA8PSBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGksIGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlyc3RDaGFyIDw9IGkgJiYgaSA8PSB0aGlzLmxhc3RDaGFyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5maXJzdENoYXIgPD0gaSAmJiBpIDw9IHRoaXMubGFzdENoYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZU9mOiBmdW5jdGlvbiBjaGFyQ29kZU9mKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih2KSAmJiB2ID49IHRoaXMuZmlyc3RDaGFyICYmIHYgPD0gdGhpcy5sYXN0Q2hhciA/IHYgOiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhbWVuZDogZnVuY3Rpb24gYW1lbmQobWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnU2hvdWxkIG5vdCBjYWxsIGFtZW5kKCknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElkZW50aXR5VG9Vbmljb2RlTWFwO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuSWRlbnRpdHlUb1VuaWNvZGVNYXAgPSBJZGVudGl0eVRvVW5pY29kZU1hcDtcblxuICAgICAgICAgICAgICAgIHZhciBPcGVuVHlwZUZpbGVCdWlsZGVyID0gZnVuY3Rpb24gT3BlblR5cGVGaWxlQnVpbGRlckNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdyaXRlSW50MTYoZGVzdCwgb2Zmc2V0LCBudW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rbb2Zmc2V0XSA9IG51bSA+PiA4ICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rbb2Zmc2V0ICsgMV0gPSBudW0gJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gd3JpdGVJbnQzMihkZXN0LCBvZmZzZXQsIG51bSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtvZmZzZXRdID0gbnVtID4+IDI0ICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rbb2Zmc2V0ICsgMV0gPSBudW0gPj4gMTYgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtvZmZzZXQgKyAyXSA9IG51bSA+PiA4ICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rbb2Zmc2V0ICsgM10gPSBudW0gJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gd3JpdGVEYXRhKGRlc3QsIG9mZnNldCwgZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIGlpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LnNldChkYXRhLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W29mZnNldCsrXSA9IGRhdGEuY2hhckNvZGVBdChpKSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W29mZnNldCsrXSA9IGRhdGFbaV0gJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE9wZW5UeXBlRmlsZUJ1aWxkZXIoc2ZudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZm50ID0gc2ZudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIE9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zID0gZnVuY3Rpb24gT3BlblR5cGVGaWxlQnVpbGRlcl9nZXRTZWFyY2hQYXJhbXMoZW50cmllc0NvdW50LCBlbnRyeVNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhQb3dlcjIgPSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZzIgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKG1heFBvd2VyMiBeIGVudHJpZXNDb3VudCkgPiBtYXhQb3dlcjIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhQb3dlcjIgPDw9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nMisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VhcmNoUmFuZ2UgPSBtYXhQb3dlcjIgKiBlbnRyeVNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlOiBzZWFyY2hSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeTogbG9nMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZVNoaWZ0OiBlbnRyeVNpemUgKiBlbnRyaWVzQ291bnQgLSBzZWFyY2hSYW5nZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgT1RGX0hFQURFUl9TSVpFID0gMTI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBPVEZfVEFCTEVfRU5UUllfU0laRSA9IDE2O1xuICAgICAgICAgICAgICAgICAgICBPcGVuVHlwZUZpbGVCdWlsZGVyLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvQXJyYXk6IGZ1bmN0aW9uIE9wZW5UeXBlRmlsZUJ1aWxkZXJfdG9BcnJheSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2ZudCA9IHRoaXMuc2ZudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGVzID0gdGhpcy50YWJsZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhYmxlc05hbWVzID0gT2JqZWN0LmtleXModGFibGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXNOYW1lcy5zb3J0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bVRhYmxlcyA9IHRhYmxlc05hbWVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaiwgamosIHRhYmxlLCB0YWJsZU5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IE9URl9IRUFERVJfU0laRSArIG51bVRhYmxlcyAqIE9URl9UQUJMRV9FTlRSWV9TSVpFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWJsZU9mZnNldHMgPSBbb2Zmc2V0XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1UYWJsZXM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSA9IHRhYmxlc1t0YWJsZXNOYW1lc1tpXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWRkZWRMZW5ndGggPSAodGFibGUubGVuZ3RoICsgMyAmIH4zKSA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHBhZGRlZExlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVPZmZzZXRzLnB1c2gob2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZSA9IG5ldyBVaW50OEFycmF5KG9mZnNldCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtVGFibGVzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUgPSB0YWJsZXNbdGFibGVzTmFtZXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURhdGEoZmlsZSwgdGFibGVPZmZzZXRzW2ldLCB0YWJsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNmbnQgPT09ICd0cnVlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZm50ID0gKDAsIF91dGlsLnN0cmluZzMyKSgweDAwMDEwMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlWzBdID0gc2ZudC5jaGFyQ29kZUF0KDApICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlWzFdID0gc2ZudC5jaGFyQ29kZUF0KDEpICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlWzJdID0gc2ZudC5jaGFyQ29kZUF0KDIpICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlWzNdID0gc2ZudC5jaGFyQ29kZUF0KDMpICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUludDE2KGZpbGUsIDQsIG51bVRhYmxlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlYXJjaFBhcmFtcyA9IE9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zKG51bVRhYmxlcywgMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlSW50MTYoZmlsZSwgNiwgc2VhcmNoUGFyYW1zLnJhbmdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUludDE2KGZpbGUsIDgsIHNlYXJjaFBhcmFtcy5lbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVJbnQxNihmaWxlLCAxMCwgc2VhcmNoUGFyYW1zLnJhbmdlU2hpZnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IE9URl9IRUFERVJfU0laRTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1UYWJsZXM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZU5hbWUgPSB0YWJsZXNOYW1lc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVtvZmZzZXRdID0gdGFibGVOYW1lLmNoYXJDb2RlQXQoMCkgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlW29mZnNldCArIDFdID0gdGFibGVOYW1lLmNoYXJDb2RlQXQoMSkgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlW29mZnNldCArIDJdID0gdGFibGVOYW1lLmNoYXJDb2RlQXQoMikgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlW29mZnNldCArIDNdID0gdGFibGVOYW1lLmNoYXJDb2RlQXQoMykgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hlY2tzdW0gPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IHRhYmxlT2Zmc2V0c1tpXSwgamogPSB0YWJsZU9mZnNldHNbaSArIDFdOyBqIDwgamo7IGogKz0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1YWQgPSAoMCwgX3V0aWwucmVhZFVpbnQzMikoZmlsZSwgaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3N1bSA9IGNoZWNrc3VtICsgcXVhZCA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlSW50MzIoZmlsZSwgb2Zmc2V0ICsgNCwgY2hlY2tzdW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUludDMyKGZpbGUsIG9mZnNldCArIDgsIHRhYmxlT2Zmc2V0c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlSW50MzIoZmlsZSwgb2Zmc2V0ICsgMTIsIHRhYmxlc1t0YWJsZU5hbWVdLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBPVEZfVEFCTEVfRU5UUllfU0laRTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRUYWJsZTogZnVuY3Rpb24gT3BlblR5cGVGaWxlQnVpbGRlcl9hZGRUYWJsZSh0YWcsIGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnIGluIHRoaXMudGFibGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGFibGUgJyArIHRhZyArICcgYWxyZWFkeSBleGlzdHMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlc1t0YWddID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9wZW5UeXBlRmlsZUJ1aWxkZXI7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEZvbnQgPSBmdW5jdGlvbiBGb250Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRm9udChuYW1lLCBmaWxlLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhckNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkZWROYW1lID0gcHJvcGVydGllcy5sb2FkZWROYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1R5cGUzRm9udCA9IHByb3BlcnRpZXMuaXNUeXBlM0ZvbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNpemVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1pc3NpbmdGaWxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdseXBoQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1NlcmlmRm9udCA9ICEhKHByb3BlcnRpZXMuZmxhZ3MgJiBGb250RmxhZ3MuU2VyaWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N5bWJvbGljRm9udCA9ICEhKHByb3BlcnRpZXMuZmxhZ3MgJiBGb250RmxhZ3MuU3ltYm9saWMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc01vbm9zcGFjZSA9ICEhKHByb3BlcnRpZXMuZmxhZ3MgJiBGb250RmxhZ3MuRml4ZWRQaXRjaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHByb3BlcnRpZXMudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJ0eXBlID0gcHJvcGVydGllcy5zdWJ0eXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VidHlwZSA9IHN1YnR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZhbGxiYWNrTmFtZSA9IHRoaXMuaXNNb25vc3BhY2UgPyAnbW9ub3NwYWNlJyA6IHRoaXMuaXNTZXJpZkZvbnQgPyAnc2VyaWYnIDogJ3NhbnMtc2VyaWYnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWZmZXJlbmNlcyA9IHByb3BlcnRpZXMuZGlmZmVyZW5jZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRocyA9IHByb3BlcnRpZXMud2lkdGhzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0V2lkdGggPSBwcm9wZXJ0aWVzLmRlZmF1bHRXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9zaXRlID0gcHJvcGVydGllcy5jb21wb3NpdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZGVDaGFycyA9IHByb3BlcnRpZXMud2lkZUNoYXJzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jTWFwID0gcHJvcGVydGllcy5jTWFwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hc2NlbnQgPSBwcm9wZXJ0aWVzLmFzY2VudCAvIFBERl9HTFlQSF9TUEFDRV9VTklUUztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzY2VudCA9IHByb3BlcnRpZXMuZGVzY2VudCAvIFBERl9HTFlQSF9TUEFDRV9VTklUUztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udE1hdHJpeCA9IHByb3BlcnRpZXMuZm9udE1hdHJpeDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmJveCA9IHByb3BlcnRpZXMuYmJveDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gcHJvcGVydGllcy5kZWZhdWx0RW5jb2Rpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvVW5pY29kZSA9IHByb3BlcnRpZXMudG9Vbmljb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWxsYmFja1RvVW5pY29kZSA9IHByb3BlcnRpZXMuZmFsbGJhY2tUb1VuaWNvZGUgfHwgbmV3IFRvVW5pY29kZU1hcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b0ZvbnRDaGFyID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLnR5cGUgPT09ICdUeXBlMycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNoYXJDb2RlID0gMDsgY2hhckNvZGUgPCAyNTY7IGNoYXJDb2RlKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b0ZvbnRDaGFyW2NoYXJDb2RlXSA9IHRoaXMuZGlmZmVyZW5jZXNbY2hhckNvZGVdIHx8IHByb3BlcnRpZXMuZGVmYXVsdEVuY29kaW5nW2NoYXJDb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbnRUeXBlID0gX3V0aWwuRm9udFR5cGUuVFlQRTM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNpZEVuY29kaW5nID0gcHJvcGVydGllcy5jaWRFbmNvZGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmVydGljYWwgPSBwcm9wZXJ0aWVzLnZlcnRpY2FsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudm1ldHJpY3MgPSBwcm9wZXJ0aWVzLnZtZXRyaWNzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZNZXRyaWNzID0gcHJvcGVydGllcy5kZWZhdWx0Vk1ldHJpY3M7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmlsZSB8fCBmaWxlLmlzRW1wdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0ZvbnQgZmlsZSBpcyBlbXB0eSBpbiBcIicgKyBuYW1lICsgJ1wiICgnICsgdGhpcy5sb2FkZWROYW1lICsgJyknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZhbGxiYWNrVG9TeXN0ZW1Gb250KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2dldEZvbnRGaWxlVHlwZSA9IGdldEZvbnRGaWxlVHlwZShmaWxlLCBwcm9wZXJ0aWVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9nZXRGb250RmlsZVR5cGUyID0gX3NsaWNlZFRvQXJyYXkoX2dldEZvbnRGaWxlVHlwZSwgMik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBfZ2V0Rm9udEZpbGVUeXBlMlswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnR5cGUgPSBfZ2V0Rm9udEZpbGVUeXBlMlsxXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgIT09IHRoaXMudHlwZSB8fCBzdWJ0eXBlICE9PSB0aGlzLnN1YnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ0luY29uc2lzdGVudCBmb250IGZpbGUgVHlwZS9TdWJUeXBlLCBleHBlY3RlZDogJyArIFwiXCIuY29uY2F0KHRoaXMudHlwZSwgXCIvXCIpLmNvbmNhdCh0aGlzLnN1YnR5cGUsIFwiIGJ1dCBmb3VuZDogXCIpLmNvbmNhdCh0eXBlLCBcIi9cIikuY29uY2F0KHN1YnR5cGUsIFwiLlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTU1UeXBlMSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ01NVHlwZTEgZm9udCAoJyArIG5hbWUgKyAnKSwgZmFsbGluZyBiYWNrIHRvIFR5cGUxLicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1R5cGUxJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ0lERm9udFR5cGUwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWltZXR5cGUgPSAnZm9udC9vcGVudHlwZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2ZmID0gc3VidHlwZSA9PT0gJ1R5cGUxQycgfHwgc3VidHlwZSA9PT0gJ0NJREZvbnRUeXBlMEMnID8gbmV3IENGRkZvbnQoZmlsZSwgcHJvcGVydGllcykgOiBuZXcgVHlwZTFGb250KG5hbWUsIGZpbGUsIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0V2lkdGhzKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMuY29udmVydChuYW1lLCBjZmYsIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnT3BlblR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdUcnVlVHlwZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NJREZvbnRUeXBlMic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbWV0eXBlID0gJ2ZvbnQvb3BlbnR5cGUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMuY2hlY2tBbmRSZXBhaXIobmFtZSwgZmlsZSwgcHJvcGVydGllcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzT3BlblR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RXaWR0aHMocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICdPcGVuVHlwZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJGb250IFwiLmNvbmNhdCh0eXBlLCBcIiBpcyBub3Qgc3VwcG9ydGVkXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmFsbGJhY2tUb1N5c3RlbUZvbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbnRUeXBlID0gZ2V0Rm9udFR5cGUodHlwZSwgc3VidHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbnRNYXRyaXggPSBwcm9wZXJ0aWVzLmZvbnRNYXRyaXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRocyA9IHByb3BlcnRpZXMud2lkdGhzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0V2lkdGggPSBwcm9wZXJ0aWVzLmRlZmF1bHRXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9Vbmljb2RlID0gcHJvcGVydGllcy50b1VuaWNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuY29kaW5nID0gcHJvcGVydGllcy5iYXNlRW5jb2Rpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYWNNYXAgPSBwcm9wZXJ0aWVzLnNlYWNNYXA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBGb250LmdldEZvbnRJRCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBJRCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gRm9udF9nZXRGb250SUQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhJRCsrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBpbnQxNihiMCwgYjEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoYjAgPDwgOCkgKyBiMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdyaXRlU2lnbmVkSW50MTYoYnl0ZXMsIGluZGV4LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbaW5kZXggKyAxXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbaW5kZXhdID0gdmFsdWUgPj4+IDg7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzaWduZWRJbnQxNihiMCwgYjEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IChiMCA8PCA4KSArIGIxO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICYgMSA8PCAxNSA/IHZhbHVlIC0gMHgxMDAwMCA6IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaW50MzIoYjAsIGIxLCBiMiwgYjMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoYjAgPDwgMjQpICsgKGIxIDw8IDE2KSArIChiMiA8PCA4KSArIGIzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc3RyaW5nMTYodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHZhbHVlID4+IDggJiAweGZmLCB2YWx1ZSAmIDB4ZmYpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc2FmZVN0cmluZzE2KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlID4gMHg3RkZGID8gMHg3RkZGIDogdmFsdWUgPCAtMHg4MDAwID8gLTB4ODAwMCA6IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodmFsdWUgPj4gOCAmIDB4ZmYsIHZhbHVlICYgMHhmZik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc1RydWVUeXBlRmlsZShmaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGVyID0gZmlsZS5wZWVrQnl0ZXMoNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnJlYWRVaW50MzIpKGhlYWRlciwgMCkgPT09IDB4MDAwMTAwMDAgfHwgKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGhlYWRlcikgPT09ICd0cnVlJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzVHJ1ZVR5cGVDb2xsZWN0aW9uRmlsZShmaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGVyID0gZmlsZS5wZWVrQnl0ZXMoNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGhlYWRlcikgPT09ICd0dGNmJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzT3BlblR5cGVGaWxlKGZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWFkZXIgPSBmaWxlLnBlZWtCeXRlcyg0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykoaGVhZGVyKSA9PT0gJ09UVE8nO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNUeXBlMUZpbGUoZmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlciA9IGZpbGUucGVla0J5dGVzKDIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVhZGVyWzBdID09PSAweDI1ICYmIGhlYWRlclsxXSA9PT0gMHgyMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVhZGVyWzBdID09PSAweDgwICYmIGhlYWRlclsxXSA9PT0gMHgwMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc0NGRkZpbGUoZmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlciA9IGZpbGUucGVla0J5dGVzKDQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVhZGVyWzBdID49IDEgJiYgaGVhZGVyWzNdID49IDEgJiYgaGVhZGVyWzNdIDw9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Rm9udEZpbGVUeXBlKGZpbGUsIF9yZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gX3JlZi50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnR5cGUgPSBfcmVmLnN1YnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlID0gX3JlZi5jb21wb3NpdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZVR5cGUsIGZpbGVTdWJ0eXBlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNUcnVlVHlwZUZpbGUoZmlsZSkgfHwgaXNUcnVlVHlwZUNvbGxlY3Rpb25GaWxlKGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvc2l0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlVHlwZSA9ICdDSURGb250VHlwZTInO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVUeXBlID0gJ1RydWVUeXBlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzT3BlblR5cGVGaWxlKGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvc2l0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlVHlwZSA9ICdDSURGb250VHlwZTInO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVUeXBlID0gJ09wZW5UeXBlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzVHlwZTFGaWxlKGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvc2l0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlVHlwZSA9ICdDSURGb250VHlwZTAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVUeXBlID0gdHlwZSA9PT0gJ01NVHlwZTEnID8gJ01NVHlwZTEnIDogJ1R5cGUxJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzQ0ZGRmlsZShmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wb3NpdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVR5cGUgPSAnQ0lERm9udFR5cGUwJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVN1YnR5cGUgPSAnQ0lERm9udFR5cGUwQyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVR5cGUgPSB0eXBlID09PSAnTU1UeXBlMScgPyAnTU1UeXBlMScgOiAnVHlwZTEnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3VidHlwZSA9ICdUeXBlMUMnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdnZXRGb250RmlsZVR5cGU6IFVuYWJsZSB0byBkZXRlY3QgY29ycmVjdCBmb250IGZpbGUgVHlwZS9TdWJ0eXBlLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVUeXBlID0gdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3VidHlwZSA9IHN1YnR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbZmlsZVR5cGUsIGZpbGVTdWJ0eXBlXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJ1aWxkVG9Gb250Q2hhcihlbmNvZGluZywgZ2x5cGhzVW5pY29kZU1hcCwgZGlmZmVyZW5jZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b0ZvbnRDaGFyID0gW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZW5jb2RpbmcubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGUgPSAoMCwgX3VuaWNvZGUuZ2V0VW5pY29kZUZvckdseXBoKShlbmNvZGluZ1tpXSwgZ2x5cGhzVW5pY29kZU1hcCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9Gb250Q2hhcltpXSA9IHVuaWNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjaGFyQ29kZSBpbiBkaWZmZXJlbmNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGUgPSAoMCwgX3VuaWNvZGUuZ2V0VW5pY29kZUZvckdseXBoKShkaWZmZXJlbmNlc1tjaGFyQ29kZV0sIGdseXBoc1VuaWNvZGVNYXApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGUgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvRm9udENoYXJbK2NoYXJDb2RlXSA9IHVuaWNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9Gb250Q2hhcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFkanVzdE1hcHBpbmcoY2hhckNvZGVUb0dseXBoSWQsIGhhc0dseXBoLCBuZXdHbHlwaFplcm9JZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld01hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9Gb250Q2hhciA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByaXZhdGVVc2VBcmVhSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRBdmFpbGFibGVGb250Q2hhckNvZGUgPSBQUklWQVRFX1VTRV9BUkVBU1twcml2YXRlVXNlQXJlYUluZGV4XVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcml2YXRlVXNlT2ZmZXRFbmQgPSBQUklWQVRFX1VTRV9BUkVBU1twcml2YXRlVXNlQXJlYUluZGV4XVsxXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgb3JpZ2luYWxDaGFyQ29kZSBpbiBjaGFyQ29kZVRvR2x5cGhJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsQ2hhckNvZGUgfD0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhJZCA9IGNoYXJDb2RlVG9HbHlwaElkW29yaWdpbmFsQ2hhckNvZGVdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNHbHlwaChnbHlwaElkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZSA+IHByaXZhdGVVc2VPZmZldEVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlVXNlQXJlYUluZGV4Kys7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByaXZhdGVVc2VBcmVhSW5kZXggPj0gUFJJVkFURV9VU0VfQVJFQVMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1JhbiBvdXQgb2Ygc3BhY2UgaW4gZm9udCBwcml2YXRlIHVzZSBhcmVhLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlID0gUFJJVkFURV9VU0VfQVJFQVNbcHJpdmF0ZVVzZUFyZWFJbmRleF1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZhdGVVc2VPZmZldEVuZCA9IFBSSVZBVEVfVVNFX0FSRUFTW3ByaXZhdGVVc2VBcmVhSW5kZXhdWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250Q2hhckNvZGUgPSBuZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlKys7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGhJZCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaElkID0gbmV3R2x5cGhaZXJvSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3TWFwW2ZvbnRDaGFyQ29kZV0gPSBnbHlwaElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvRm9udENoYXJbb3JpZ2luYWxDaGFyQ29kZV0gPSBmb250Q2hhckNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9Gb250Q2hhcjogdG9Gb250Q2hhcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZDogbmV3TWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRBdmFpbGFibGVGb250Q2hhckNvZGU6IG5leHRBdmFpbGFibGVGb250Q2hhckNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRSYW5nZXMoZ2x5cGhzLCBudW1HbHlwaHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjaGFyQ29kZSBpbiBnbHlwaHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGhzW2NoYXJDb2RlXSA+PSBudW1HbHlwaHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRDaGFyQ29kZTogY2hhckNvZGUgfCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaElkOiBnbHlwaHNbY2hhckNvZGVdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Rlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udENoYXJDb2RlOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaElkOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzLnNvcnQoZnVuY3Rpb24gZm9udEdldFJhbmdlc1NvcnQoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmZvbnRDaGFyQ29kZSAtIGIuZm9udENoYXJDb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2VzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gY29kZXMubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGxlbmd0aDspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSBjb2Rlc1tuXS5mb250Q2hhckNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVJbmRpY2VzID0gW2NvZGVzW25dLmdseXBoSWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gc3RhcnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobiA8IGxlbmd0aCAmJiBlbmQgKyAxID09PSBjb2Rlc1tuXS5mb250Q2hhckNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZUluZGljZXMucHVzaChjb2Rlc1tuXS5nbHlwaElkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytlbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5kID09PSAweEZGRkYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2goW3N0YXJ0LCBlbmQsIGNvZGVJbmRpY2VzXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByYW5nZXM7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVDbWFwVGFibGUoZ2x5cGhzLCBudW1HbHlwaHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5nZXMgPSBnZXRSYW5nZXMoZ2x5cGhzLCBudW1HbHlwaHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bVRhYmxlcyA9IHJhbmdlc1tyYW5nZXMubGVuZ3RoIC0gMV1bMV0gPiAweEZGRkYgPyAyIDogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbWFwID0gJ1xceDAwXFx4MDAnICsgc3RyaW5nMTYobnVtVGFibGVzKSArICdcXHgwMFxceDAzJyArICdcXHgwMFxceDAxJyArICgwLCBfdXRpbC5zdHJpbmczMikoNCArIG51bVRhYmxlcyAqIDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIGlpLCBqLCBqajtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gcmFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlc1tpXVswXSA8PSAweEZGRkYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYm1wTGVuZ3RoID0gaSArIDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZXNbaV1bMF0gPCAweEZGRkYgJiYgcmFuZ2VzW2ldWzFdID09PSAweEZGRkYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXNbaV1bMV0gPSAweEZGRkU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFpbGluZ1Jhbmdlc0NvdW50ID0gcmFuZ2VzW2ldWzFdIDwgMHhGRkZGID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VnQ291bnQgPSBibXBMZW5ndGggKyB0cmFpbGluZ1Jhbmdlc0NvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlYXJjaFBhcmFtcyA9IE9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zKHNlZ0NvdW50LCAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydENvdW50ID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kQ291bnQgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpZERlbHRhcyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlkUmFuZ2VPZmZzZXRzID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhzSWRzID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmlhcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UsIHN0YXJ0LCBlbmQsIGNvZGVzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGJtcExlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHJhbmdlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHJhbmdlWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IHJhbmdlWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q291bnQgKz0gc3RyaW5nMTYoc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZENvdW50ICs9IHN0cmluZzE2KGVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXMgPSByYW5nZVsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGlndW91cyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAxLCBqaiA9IGNvZGVzLmxlbmd0aDsgaiA8IGpqOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGVzW2pdICE9PSBjb2Rlc1tqIC0gMV0gKyAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aWd1b3VzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29udGlndW91cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gKHNlZ0NvdW50IC0gaSkgKiAyICsgYmlhcyAqIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpYXMgKz0gZW5kIC0gc3RhcnQgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZERlbHRhcyArPSBzdHJpbmcxNigwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRSYW5nZU9mZnNldHMgKz0gc3RyaW5nMTYob2Zmc2V0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwLCBqaiA9IGNvZGVzLmxlbmd0aDsgaiA8IGpqOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoc0lkcyArPSBzdHJpbmcxNihjb2Rlc1tqXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRDb2RlID0gY29kZXNbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkRGVsdGFzICs9IHN0cmluZzE2KHN0YXJ0Q29kZSAtIHN0YXJ0ICYgMHhGRkZGKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRSYW5nZU9mZnNldHMgKz0gc3RyaW5nMTYoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhaWxpbmdSYW5nZXNDb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRDb3VudCArPSAnXFx4RkZcXHhGRic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRDb3VudCArPSAnXFx4RkZcXHhGRic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWREZWx0YXMgKz0gJ1xceDAwXFx4MDEnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkUmFuZ2VPZmZzZXRzICs9ICdcXHgwMFxceDAwJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1hdDMxNCA9ICdcXHgwMFxceDAwJyArIHN0cmluZzE2KDIgKiBzZWdDb3VudCkgKyBzdHJpbmcxNihzZWFyY2hQYXJhbXMucmFuZ2UpICsgc3RyaW5nMTYoc2VhcmNoUGFyYW1zLmVudHJ5KSArIHN0cmluZzE2KHNlYXJjaFBhcmFtcy5yYW5nZVNoaWZ0KSArIGVuZENvdW50ICsgJ1xceDAwXFx4MDAnICsgc3RhcnRDb3VudCArIGlkRGVsdGFzICsgaWRSYW5nZU9mZnNldHMgKyBnbHlwaHNJZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9ybWF0MzEwMTIgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWFkZXIzMTAxMiA9ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtVGFibGVzID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtYXAgKz0gJ1xceDAwXFx4MDMnICsgJ1xceDAwXFx4MEEnICsgKDAsIF91dGlsLnN0cmluZzMyKSg0ICsgbnVtVGFibGVzICogOCArIDQgKyBmb3JtYXQzMTQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQzMTAxMiA9ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSByYW5nZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHJhbmdlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSByYW5nZVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXMgPSByYW5nZVsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSBjb2Rlc1swXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAxLCBqaiA9IGNvZGVzLmxlbmd0aDsgaiA8IGpqOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2Rlc1tqXSAhPT0gY29kZXNbaiAtIDFdICsgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IHJhbmdlWzBdICsgaiAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0MzEwMTIgKz0gKDAsIF91dGlsLnN0cmluZzMyKShzdGFydCkgKyAoMCwgX3V0aWwuc3RyaW5nMzIpKGVuZCkgKyAoMCwgX3V0aWwuc3RyaW5nMzIpKGNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gZW5kICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gY29kZXNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQzMTAxMiArPSAoMCwgX3V0aWwuc3RyaW5nMzIpKHN0YXJ0KSArICgwLCBfdXRpbC5zdHJpbmczMikocmFuZ2VbMV0pICsgKDAsIF91dGlsLnN0cmluZzMyKShjb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIzMTAxMiA9ICdcXHgwMFxceDBDJyArICdcXHgwMFxceDAwJyArICgwLCBfdXRpbC5zdHJpbmczMikoZm9ybWF0MzEwMTIubGVuZ3RoICsgMTYpICsgJ1xceDAwXFx4MDBcXHgwMFxceDAwJyArICgwLCBfdXRpbC5zdHJpbmczMikoZm9ybWF0MzEwMTIubGVuZ3RoIC8gMTIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY21hcCArICdcXHgwMFxceDA0JyArIHN0cmluZzE2KGZvcm1hdDMxNC5sZW5ndGggKyA0KSArIGZvcm1hdDMxNCArIGhlYWRlcjMxMDEyICsgZm9ybWF0MzEwMTI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZU9TMlRhYmxlKG9zMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IG5ldyBfc3RyZWFtLlN0cmVhbShvczIuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmVyc2lvbiA9IHN0cmVhbS5nZXRVaW50MTYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5nZXRCeXRlcyg2MCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gc3RyZWFtLmdldFVpbnQxNigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyc2lvbiA8IDQgJiYgc2VsZWN0aW9uICYgMHgwMzAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RDaGFyID0gc3RyZWFtLmdldFVpbnQxNigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RDaGFyID0gc3RyZWFtLmdldFVpbnQxNigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RDaGFyID4gbGFzdENoYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5nZXRCeXRlcyg2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1c1dpbkFzY2VudCA9IHN0cmVhbS5nZXRVaW50MTYoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzV2luQXNjZW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBvczIuZGF0YVs4XSA9IG9zMi5kYXRhWzldID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlT1MyVGFibGUocHJvcGVydGllcywgY2hhcnN0cmluZ3MsIG92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZSA9IG92ZXJyaWRlIHx8IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0c1BlckVtOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlNYXg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeU1pbjogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc2NlbnQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY2VudDogMFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bFVuaWNvZGVSYW5nZTEgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVsVW5pY29kZVJhbmdlMiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWxVbmljb2RlUmFuZ2UzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bFVuaWNvZGVSYW5nZTQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0Q2hhckluZGV4ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYXN0Q2hhckluZGV4ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJzdHJpbmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgY29kZSBpbiBjaGFyc3RyaW5ncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlIHw9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0Q2hhckluZGV4ID4gY29kZSB8fCAhZmlyc3RDaGFySW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Q2hhckluZGV4ID0gY29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0Q2hhckluZGV4IDwgY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENoYXJJbmRleCA9IGNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSAoMCwgX3VuaWNvZGUuZ2V0VW5pY29kZVJhbmdlRm9yKShjb2RlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPCAzMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxVbmljb2RlUmFuZ2UxIHw9IDEgPDwgcG9zaXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPCA2NCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxVbmljb2RlUmFuZ2UyIHw9IDEgPDwgcG9zaXRpb24gLSAzMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA8IDk2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bFVuaWNvZGVSYW5nZTMgfD0gMSA8PCBwb3NpdGlvbiAtIDY0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uIDwgMTIzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bFVuaWNvZGVSYW5nZTQgfD0gMSA8PCBwb3NpdGlvbiAtIDk2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdVbmljb2RlIHJhbmdlcyBCaXRzID4gMTIzIGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNhZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0Q2hhckluZGV4ID4gMHhGRkZGKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGFySW5kZXggPSAweEZGRkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdENoYXJJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENoYXJJbmRleCA9IDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJib3ggPSBwcm9wZXJ0aWVzLmJib3ggfHwgWzAsIDAsIDAsIDBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuaXRzUGVyRW0gPSBvdmVycmlkZS51bml0c1BlckVtIHx8IDEgLyAocHJvcGVydGllcy5mb250TWF0cml4IHx8IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY2FsZSA9IHByb3BlcnRpZXMuYXNjZW50U2NhbGVkID8gMS4wIDogdW5pdHNQZXJFbSAvIFBERl9HTFlQSF9TUEFDRV9VTklUUztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBvQXNjZW50ID0gb3ZlcnJpZGUuYXNjZW50IHx8IE1hdGgucm91bmQoc2NhbGUgKiAocHJvcGVydGllcy5hc2NlbnQgfHwgYmJveFszXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cG9EZXNjZW50ID0gb3ZlcnJpZGUuZGVzY2VudCB8fCBNYXRoLnJvdW5kKHNjYWxlICogKHByb3BlcnRpZXMuZGVzY2VudCB8fCBiYm94WzFdKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBvRGVzY2VudCA+IDAgJiYgcHJvcGVydGllcy5kZXNjZW50ID4gMCAmJiBiYm94WzFdIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cG9EZXNjZW50ID0gLXR5cG9EZXNjZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2luQXNjZW50ID0gb3ZlcnJpZGUueU1heCB8fCB0eXBvQXNjZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpbkRlc2NlbnQgPSAtb3ZlcnJpZGUueU1pbiB8fCAtdHlwb0Rlc2NlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1xceDAwXFx4MDMnICsgJ1xceDAyXFx4MjQnICsgJ1xceDAxXFx4RjQnICsgJ1xceDAwXFx4MDUnICsgJ1xceDAwXFx4MDAnICsgJ1xceDAyXFx4OEEnICsgJ1xceDAyXFx4QkInICsgJ1xceDAwXFx4MDAnICsgJ1xceDAwXFx4OEMnICsgJ1xceDAyXFx4OEEnICsgJ1xceDAyXFx4QkInICsgJ1xceDAwXFx4MDAnICsgJ1xceDAxXFx4REYnICsgJ1xceDAwXFx4MzEnICsgJ1xceDAxXFx4MDInICsgJ1xceDAwXFx4MDAnICsgJ1xceDAwXFx4MDBcXHgwNicgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHByb3BlcnRpZXMuZml4ZWRQaXRjaCA/IDB4MDkgOiAweDAwKSArICdcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDAnICsgKDAsIF91dGlsLnN0cmluZzMyKSh1bFVuaWNvZGVSYW5nZTEpICsgKDAsIF91dGlsLnN0cmluZzMyKSh1bFVuaWNvZGVSYW5nZTIpICsgKDAsIF91dGlsLnN0cmluZzMyKSh1bFVuaWNvZGVSYW5nZTMpICsgKDAsIF91dGlsLnN0cmluZzMyKSh1bFVuaWNvZGVSYW5nZTQpICsgJ1xceDJBXFx4MzJcXHgzMVxceDJBJyArIHN0cmluZzE2KHByb3BlcnRpZXMuaXRhbGljQW5nbGUgPyAxIDogMCkgKyBzdHJpbmcxNihmaXJzdENoYXJJbmRleCB8fCBwcm9wZXJ0aWVzLmZpcnN0Q2hhcikgKyBzdHJpbmcxNihsYXN0Q2hhckluZGV4IHx8IHByb3BlcnRpZXMubGFzdENoYXIpICsgc3RyaW5nMTYodHlwb0FzY2VudCkgKyBzdHJpbmcxNih0eXBvRGVzY2VudCkgKyAnXFx4MDBcXHg2NCcgKyBzdHJpbmcxNih3aW5Bc2NlbnQpICsgc3RyaW5nMTYod2luRGVzY2VudCkgKyAnXFx4MDBcXHgwMFxceDAwXFx4MDAnICsgJ1xceDAwXFx4MDBcXHgwMFxceDAwJyArIHN0cmluZzE2KHByb3BlcnRpZXMueEhlaWdodCkgKyBzdHJpbmcxNihwcm9wZXJ0aWVzLmNhcEhlaWdodCkgKyBzdHJpbmcxNigwKSArIHN0cmluZzE2KGZpcnN0Q2hhckluZGV4IHx8IHByb3BlcnRpZXMuZmlyc3RDaGFyKSArICdcXHgwMFxceDAzJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVBvc3RUYWJsZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYW5nbGUgPSBNYXRoLmZsb29yKHByb3BlcnRpZXMuaXRhbGljQW5nbGUgKiBNYXRoLnBvdygyLCAxNikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcXHgwMFxceDAzXFx4MDBcXHgwMCcgKyAoMCwgX3V0aWwuc3RyaW5nMzIpKGFuZ2xlKSArICdcXHgwMFxceDAwJyArICdcXHgwMFxceDAwJyArICgwLCBfdXRpbC5zdHJpbmczMikocHJvcGVydGllcy5maXhlZFBpdGNoKSArICdcXHgwMFxceDAwXFx4MDBcXHgwMCcgKyAnXFx4MDBcXHgwMFxceDAwXFx4MDAnICsgJ1xceDAwXFx4MDBcXHgwMFxceDAwJyArICdcXHgwMFxceDAwXFx4MDBcXHgwMCc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVOYW1lVGFibGUobmFtZSwgcHJvdG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90byA9IFtbXSwgW11dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyaW5ncyA9IFtwcm90b1swXVswXSB8fCAnT3JpZ2luYWwgbGljZW5jZScsIHByb3RvWzBdWzFdIHx8IG5hbWUsIHByb3RvWzBdWzJdIHx8ICdVbmtub3duJywgcHJvdG9bMF1bM10gfHwgJ3VuaXF1ZUlEJywgcHJvdG9bMF1bNF0gfHwgbmFtZSwgcHJvdG9bMF1bNV0gfHwgJ1ZlcnNpb24gMC4xMScsIHByb3RvWzBdWzZdIHx8ICcnLCBwcm90b1swXVs3XSB8fCAnVW5rbm93bicsIHByb3RvWzBdWzhdIHx8ICdVbmtub3duJywgcHJvdG9bMF1bOV0gfHwgJ1Vua25vd24nXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJpbmdzVW5pY29kZSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIGlpLCBqLCBqaiwgc3RyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHN0cmluZ3MubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IHByb3RvWzFdW2ldIHx8IHN0cmluZ3NbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ckJ1ZlVuaWNvZGUgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDAsIGpqID0gc3RyLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmVW5pY29kZS5wdXNoKHN0cmluZzE2KHN0ci5jaGFyQ29kZUF0KGopKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nc1VuaWNvZGUucHVzaChzdHJCdWZVbmljb2RlLmpvaW4oJycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVzID0gW3N0cmluZ3MsIHN0cmluZ3NVbmljb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwbGF0Zm9ybXMgPSBbJ1xceDAwXFx4MDEnLCAnXFx4MDBcXHgwMyddO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY29kaW5ncyA9IFsnXFx4MDBcXHgwMCcsICdcXHgwMFxceDAxJ107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFuZ3VhZ2VzID0gWydcXHgwMFxceDAwJywgJ1xceDA0XFx4MDknXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lc1JlY29yZENvdW50ID0gc3RyaW5ncy5sZW5ndGggKiBwbGF0Zm9ybXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVUYWJsZSA9ICdcXHgwMFxceDAwJyArIHN0cmluZzE2KG5hbWVzUmVjb3JkQ291bnQpICsgc3RyaW5nMTYobmFtZXNSZWNvcmRDb3VudCAqIDEyICsgNik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyT2Zmc2V0ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBwbGF0Zm9ybXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJzID0gbmFtZXNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwLCBqaiA9IHN0cnMubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBzdHJzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZVJlY29yZCA9IHBsYXRmb3Jtc1tpXSArIGVuY29kaW5nc1tpXSArIGxhbmd1YWdlc1tpXSArIHN0cmluZzE2KGopICsgc3RyaW5nMTYoc3RyLmxlbmd0aCkgKyBzdHJpbmcxNihzdHJPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lVGFibGUgKz0gbmFtZVJlY29yZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyT2Zmc2V0ICs9IHN0ci5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lVGFibGUgKz0gc3RyaW5ncy5qb2luKCcnKSArIHN0cmluZ3NVbmljb2RlLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWVUYWJsZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEZvbnQucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW1ldHlwZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUZvbnRGYWNlOiBmYWxzZSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IHJlbmRlcmVyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZW5kZXJlciA9IF9mb250X3JlbmRlcmVyLkZvbnRSZW5kZXJlckZhY3RvcnkuY3JlYXRlKHRoaXMsIFNFQUNfQU5BTFlTSVNfRU5BQkxFRCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ3JlbmRlcmVyJywgcmVuZGVyZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0RGF0YTogZnVuY3Rpb24gRm9udF9leHBvcnREYXRhKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSB0aGlzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tUb1N5c3RlbUZvbnQ6IGZ1bmN0aW9uIEZvbnRfZmFsbGJhY2tUb1N5c3RlbUZvbnQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWlzc2luZ0ZpbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyQ29kZSwgdW5pY29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VidHlwZSA9IHRoaXMuc3VidHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udE5hbWUgPSBuYW1lLnJlcGxhY2UoL1ssX10vZywgJy0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RkRm9udE1hcCA9ICgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0U3RkRm9udE1hcCkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uU3RkRm9udE1hcCA9ICgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0Tm9uU3RkRm9udE1hcCkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNTdGFuZGFyZEZvbnQgPSAhIXN0ZEZvbnRNYXBbZm9udE5hbWVdIHx8ICEhKG5vblN0ZEZvbnRNYXBbZm9udE5hbWVdICYmIHN0ZEZvbnRNYXBbbm9uU3RkRm9udE1hcFtmb250TmFtZV1dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250TmFtZSA9IHN0ZEZvbnRNYXBbZm9udE5hbWVdIHx8IG5vblN0ZEZvbnRNYXBbZm9udE5hbWVdIHx8IGZvbnROYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYm9sZCA9IGZvbnROYW1lLnNlYXJjaCgvYm9sZC9naSkgIT09IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRhbGljID0gZm9udE5hbWUuc2VhcmNoKC9vYmxpcXVlL2dpKSAhPT0gLTEgfHwgZm9udE5hbWUuc2VhcmNoKC9pdGFsaWMvZ2kpICE9PSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJsYWNrID0gbmFtZS5zZWFyY2goL0JsYWNrL2cpICE9PSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbWVhc3VyZSA9IE9iamVjdC5rZXlzKHRoaXMud2lkdGhzKS5sZW5ndGggPiAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3RhbmRhcmRGb250ICYmIHR5cGUgPT09ICdDSURGb250VHlwZTInICYmIHRoaXMuY2lkRW5jb2Rpbmcuc3RhcnRzV2l0aCgnSWRlbnRpdHktJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEdseXBoTWFwRm9yU3RhbmRhcmRGb250cyA9ICgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzKSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFwID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjaGFyQ29kZSBpbiBHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcFsrY2hhckNvZGVdID0gR2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzW2NoYXJDb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvQXJpYWwtP0JsYWNrL2kudGVzdChuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjayA9ICgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrKSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNoYXJDb2RlIGluIFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcFsrY2hhckNvZGVdID0gU3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrW2NoYXJDb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvQ2FsaWJyaS9pLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBTdXBwbGVtZW50YWxHbHlwaE1hcEZvckNhbGlicmkgPSAoMCwgX3N0YW5kYXJkX2ZvbnRzLmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjaGFyQ29kZSBpbiBTdXBwbGVtZW50YWxHbHlwaE1hcEZvckNhbGlicmkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBbK2NoYXJDb2RlXSA9IFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaVtjaGFyQ29kZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNJZGVudGl0eVVuaWNvZGUgPSB0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIElkZW50aXR5VG9Vbmljb2RlTWFwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNJZGVudGl0eVVuaWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9Vbmljb2RlLmZvckVhY2goZnVuY3Rpb24gKGNoYXJDb2RlLCB1bmljb2RlQ2hhckNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBbK2NoYXJDb2RlXSA9IHVuaWNvZGVDaGFyQ29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b0ZvbnRDaGFyID0gbWFwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvVW5pY29kZSA9IG5ldyBUb1VuaWNvZGVNYXAobWFwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9TeW1ib2wvaS50ZXN0KGZvbnROYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvRm9udENoYXIgPSBidWlsZFRvRm9udENoYXIoX2VuY29kaW5ncy5TeW1ib2xTZXRFbmNvZGluZywgKDAsIF9nbHlwaGxpc3QuZ2V0R2x5cGhzVW5pY29kZSkoKSwgdGhpcy5kaWZmZXJlbmNlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvRGluZ2JhdHMvaS50ZXN0KGZvbnROYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoL1dpbmdkaW5ncy9pLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnTm9uLWVtYmVkZGVkIFdpbmdkaW5ncyBmb250LCBmYWxsaW5nIGJhY2sgdG8gWmFwZkRpbmdiYXRzLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b0ZvbnRDaGFyID0gYnVpbGRUb0ZvbnRDaGFyKF9lbmNvZGluZ3MuWmFwZkRpbmdiYXRzRW5jb2RpbmcsICgwLCBfZ2x5cGhsaXN0LmdldERpbmdiYXRzR2x5cGhzVW5pY29kZSkoKSwgdGhpcy5kaWZmZXJlbmNlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0YW5kYXJkRm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvRm9udENoYXIgPSBidWlsZFRvRm9udENoYXIodGhpcy5kZWZhdWx0RW5jb2RpbmcsICgwLCBfZ2x5cGhsaXN0LmdldEdseXBoc1VuaWNvZGUpKCksIHRoaXMuZGlmZmVyZW5jZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaHNVbmljb2RlTWFwID0gKDAsIF9nbHlwaGxpc3QuZ2V0R2x5cGhzVW5pY29kZSkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b1VuaWNvZGUuZm9yRWFjaChmdW5jdGlvbiAoY2hhckNvZGUsIHVuaWNvZGVDaGFyQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5jb21wb3NpdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhOYW1lID0gX3RoaXMuZGlmZmVyZW5jZXNbY2hhckNvZGVdIHx8IF90aGlzLmRlZmF1bHRFbmNvZGluZ1tjaGFyQ29kZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZSA9ICgwLCBfdW5pY29kZS5nZXRVbmljb2RlRm9yR2x5cGgpKGdseXBoTmFtZSwgZ2x5cGhzVW5pY29kZU1hcCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZUNoYXJDb2RlID0gdW5pY29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnRvRm9udENoYXJbY2hhckNvZGVdID0gdW5pY29kZUNoYXJDb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZE5hbWUgPSBmb250TmFtZS5zcGxpdCgnLScpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udFR5cGUgPSBnZXRGb250VHlwZSh0eXBlLCBzdWJ0eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja0FuZFJlcGFpcjogZnVuY3Rpb24gRm9udF9jaGVja0FuZFJlcGFpcihuYW1lLCBmb250LCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFZBTElEX1RBQkxFUyA9IFsnT1MvMicsICdjbWFwJywgJ2hlYWQnLCAnaGhlYScsICdobXR4JywgJ21heHAnLCAnbmFtZScsICdwb3N0JywgJ2xvY2EnLCAnZ2x5ZicsICdmcGdtJywgJ3ByZXAnLCAnY3Z0ICcsICdDRkYgJ107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkVGFibGVzKGZpbGUsIG51bVRhYmxlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzWydPUy8yJ10gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXNbJ2NtYXAnXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlc1snaGVhZCddID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzWydoaGVhJ10gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXNbJ2htdHgnXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlc1snbWF4cCddID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzWyduYW1lJ10gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXNbJ3Bvc3QnXSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1UYWJsZXM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhYmxlID0gcmVhZFRhYmxlRW50cnkoZm9udCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVkFMSURfVEFCTEVTLmluY2x1ZGVzKHRhYmxlLnRhZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhYmxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXNbdGFibGUudGFnXSA9IHRhYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkVGFibGVFbnRyeShmaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSAoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykoZmlsZS5nZXRCeXRlcyg0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGVja3N1bSA9IGZpbGUuZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IGZpbGUuZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGZpbGUuZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZpb3VzUG9zaXRpb24gPSBmaWxlLnBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5wb3MgPSBmaWxlLnN0YXJ0ID8gZmlsZS5zdGFydCA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUuc2tpcChvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGZpbGUuZ2V0Qnl0ZXMobGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5wb3MgPSBwcmV2aW91c1Bvc2l0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09ICdoZWFkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs4XSA9IGRhdGFbOV0gPSBkYXRhWzEwXSA9IGRhdGFbMTFdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMTddIHw9IDB4MjA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnOiB0YWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3N1bTogY2hlY2tzdW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg6IGxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWRPcGVuVHlwZUhlYWRlcih0dGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb246ICgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKSh0dGYuZ2V0Qnl0ZXMoNCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtVGFibGVzOiB0dGYuZ2V0VWludDE2KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZTogdHRmLmdldFVpbnQxNigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlTZWxlY3RvcjogdHRmLmdldFVpbnQxNigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VTaGlmdDogdHRmLmdldFVpbnQxNigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZFRydWVUeXBlQ29sbGVjdGlvbkhlYWRlcih0dGMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR0Y1RhZyA9ICgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKSh0dGMuZ2V0Qnl0ZXMoNCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSh0dGNUYWcgPT09ICd0dGNmJywgJ011c3QgYmUgYSBUcnVlVHlwZSBDb2xsZWN0aW9uIGZvbnQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYWpvclZlcnNpb24gPSB0dGMuZ2V0VWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtaW5vclZlcnNpb24gPSB0dGMuZ2V0VWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1Gb250cyA9IHR0Yy5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0VGFibGUgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUZvbnRzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFRhYmxlLnB1c2godHRjLmdldEludDMyKCkgPj4+IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0Y1RhZzogdHRjVGFnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFqb3JWZXJzaW9uOiBtYWpvclZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5vclZlcnNpb246IG1pbm9yVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUZvbnRzOiBudW1Gb250cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFRhYmxlOiBvZmZzZXRUYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobWFqb3JWZXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhlYWRlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci5kc2lnVGFnID0gdHRjLmdldEludDMyKCkgPj4+IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmRzaWdMZW5ndGggPSB0dGMuZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIuZHNpZ09mZnNldCA9IHR0Yy5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIFRydWVUeXBlIENvbGxlY3Rpb24gbWFqb3JWZXJzaW9uOiBcIi5jb25jYXQobWFqb3JWZXJzaW9uLCBcIi5cIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWRUcnVlVHlwZUNvbGxlY3Rpb25EYXRhKHR0YywgZm9udE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWFkVHJ1ZVR5cGVDb2xsZWN0aSA9IHJlYWRUcnVlVHlwZUNvbGxlY3Rpb25IZWFkZXIodHRjKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUZvbnRzID0gX3JlYWRUcnVlVHlwZUNvbGxlY3RpLm51bUZvbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0VGFibGUgPSBfcmVhZFRydWVUeXBlQ29sbGVjdGkub2Zmc2V0VGFibGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1Gb250czsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dGMucG9zID0gKHR0Yy5zdGFydCB8fCAwKSArIG9mZnNldFRhYmxlW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvdGVudGlhbEhlYWRlciA9IHJlYWRPcGVuVHlwZUhlYWRlcih0dGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvdGVudGlhbFRhYmxlcyA9IHJlYWRUYWJsZXModHRjLCBwb3RlbnRpYWxIZWFkZXIubnVtVGFibGVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwb3RlbnRpYWxUYWJsZXNbJ25hbWUnXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignVHJ1ZVR5cGUgQ29sbGVjdGlvbiBmb250IG11c3QgY29udGFpbiBhIFwibmFtZVwiIHRhYmxlLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZVRhYmxlID0gcmVhZE5hbWVUYWJsZShwb3RlbnRpYWxUYWJsZXNbJ25hbWUnXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IG5hbWVUYWJsZS5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDAsIGtrID0gbmFtZVRhYmxlW2pdLmxlbmd0aDsgayA8IGtrOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVFbnRyeSA9IG5hbWVUYWJsZVtqXVtrXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZUVudHJ5ICYmIG5hbWVFbnRyeS5yZXBsYWNlKC9cXHMvZywgJycpID09PSBmb250TmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXI6IHBvdGVudGlhbEhlYWRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXM6IHBvdGVudGlhbFRhYmxlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlRydWVUeXBlIENvbGxlY3Rpb24gZG9lcyBub3QgY29udGFpbiBcXFwiXCIuY29uY2F0KGZvbnROYW1lLCBcIlxcXCIgZm9udC5cIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWRDbWFwVGFibGUoY21hcCwgZm9udCwgaXNTeW1ib2xpY0ZvbnQsIGhhc0VuY29kaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY21hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdObyBjbWFwIHRhYmxlIGF2YWlsYWJsZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1JZDogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmdJZDogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ3M6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1Nob3J0Q21hcDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VnbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gKGZvbnQuc3RhcnQgPyBmb250LnN0YXJ0IDogMCkgKyBjbWFwLm9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5wb3MgPSBzdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5nZXRVaW50MTYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bVRhYmxlcyA9IGZvbnQuZ2V0VWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3RlbnRpYWxUYWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbkJyZWFrID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1UYWJsZXM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXRmb3JtSWQgPSBmb250LmdldFVpbnQxNigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY29kaW5nSWQgPSBmb250LmdldFVpbnQxNigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IGZvbnQuZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1c2VUYWJsZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG90ZW50aWFsVGFibGUgJiYgcG90ZW50aWFsVGFibGUucGxhdGZvcm1JZCA9PT0gcGxhdGZvcm1JZCAmJiBwb3RlbnRpYWxUYWJsZS5lbmNvZGluZ0lkID09PSBlbmNvZGluZ0lkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbGF0Zm9ybUlkID09PSAwICYmIGVuY29kaW5nSWQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VUYWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBsYXRmb3JtSWQgPT09IDEgJiYgZW5jb2RpbmdJZCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZVRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGxhdGZvcm1JZCA9PT0gMyAmJiBlbmNvZGluZ0lkID09PSAxICYmIChoYXNFbmNvZGluZyB8fCAhcG90ZW50aWFsVGFibGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlVGFibGUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1N5bWJvbGljRm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5CcmVhayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N5bWJvbGljRm9udCAmJiBwbGF0Zm9ybUlkID09PSAzICYmIGVuY29kaW5nSWQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VUYWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuQnJlYWsgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlVGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxUYWJsZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1JZDogcGxhdGZvcm1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmdJZDogZW5jb2RpbmdJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBvZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FuQnJlYWspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3RlbnRpYWxUYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5wb3MgPSBzdGFydCArIHBvdGVudGlhbFRhYmxlLm9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcG90ZW50aWFsVGFibGUgfHwgZm9udC5wZWVrQnl0ZSgpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdDb3VsZCBub3QgZmluZCBhIHByZWZlcnJlZCBjbWFwIHRhYmxlLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybUlkOiAtMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZ0lkOiAtMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nczogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzU2hvcnRDbWFwOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JtYXQgPSBmb250LmdldFVpbnQxNigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LmdldFVpbnQxNigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LmdldFVpbnQxNigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzU2hvcnRDbWFwID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXBwaW5ncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaiwgZ2x5cGhJZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgMjU2OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBmb250LmdldEJ5dGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlOiBqLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaElkOiBpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNTaG9ydENtYXAgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlZ0NvdW50ID0gZm9udC5nZXRVaW50MTYoKSA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5nZXRCeXRlcyg2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWdJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50cyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHNlZ0luZGV4ID0gMDsgc2VnSW5kZXggPCBzZWdDb3VudDsgc2VnSW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IGZvbnQuZ2V0VWludDE2KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5nZXRVaW50MTYoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzZWdJbmRleCA9IDA7IHNlZ0luZGV4IDwgc2VnQ291bnQ7IHNlZ0luZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50c1tzZWdJbmRleF0uc3RhcnQgPSBmb250LmdldFVpbnQxNigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHNlZ0luZGV4ID0gMDsgc2VnSW5kZXggPCBzZWdDb3VudDsgc2VnSW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRzW3NlZ0luZGV4XS5kZWx0YSA9IGZvbnQuZ2V0VWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXRzQ291bnQgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHNlZ0luZGV4ID0gMDsgc2VnSW5kZXggPCBzZWdDb3VudDsgc2VnSW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQgPSBzZWdtZW50c1tzZWdJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlT2Zmc2V0ID0gZm9udC5nZXRVaW50MTYoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmFuZ2VPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5vZmZzZXRJbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0SW5kZXggPSAocmFuZ2VPZmZzZXQgPj4gMSkgLSAoc2VnQ291bnQgLSBzZWdJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5vZmZzZXRJbmRleCA9IG9mZnNldEluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldHNDb3VudCA9IE1hdGgubWF4KG9mZnNldHNDb3VudCwgb2Zmc2V0SW5kZXggKyBzZWdtZW50LmVuZCAtIHNlZ21lbnQuc3RhcnQgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldHMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG9mZnNldHNDb3VudDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0cy5wdXNoKGZvbnQuZ2V0VWludDE2KCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHNlZ0luZGV4ID0gMDsgc2VnSW5kZXggPCBzZWdDb3VudDsgc2VnSW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQgPSBzZWdtZW50c1tzZWdJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBzZWdtZW50LnN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBzZWdtZW50LmVuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsdGEgPSBzZWdtZW50LmRlbHRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldEluZGV4ID0gc2VnbWVudC5vZmZzZXRJbmRleDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IHN0YXJ0OyBqIDw9IGVuZDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqID09PSAweEZGRkYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhJZCA9IG9mZnNldEluZGV4IDwgMCA/IGogOiBvZmZzZXRzW29mZnNldEluZGV4ICsgaiAtIHN0YXJ0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhJZCA9IGdseXBoSWQgKyBkZWx0YSAmIDB4RkZGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZTogaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoSWQ6IGdseXBoSWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0Q29kZSA9IGZvbnQuZ2V0VWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnlDb3VudCA9IGZvbnQuZ2V0VWludDE2KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBlbnRyeUNvdW50OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaElkID0gZm9udC5nZXRVaW50MTYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhckNvZGUgPSBmaXJzdENvZGUgKyBqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZTogY2hhckNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoSWQ6IGdseXBoSWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnY21hcCB0YWJsZSBoYXMgdW5zdXBwb3J0ZWQgZm9ybWF0OiAnICsgZm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1JZDogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmdJZDogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ3M6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1Nob3J0Q21hcDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5ncy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5jaGFyQ29kZSAtIGIuY2hhckNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBtYXBwaW5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcHBpbmdzW2kgLSAxXS5jaGFyQ29kZSA9PT0gbWFwcGluZ3NbaV0uY2hhckNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5ncy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtSWQ6IHBvdGVudGlhbFRhYmxlLnBsYXRmb3JtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZ0lkOiBwb3RlbnRpYWxUYWJsZS5lbmNvZGluZ0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ3M6IG1hcHBpbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzU2hvcnRDbWFwOiBoYXNTaG9ydENtYXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzYW5pdGl6ZU1ldHJpY3MoZm9udCwgaGVhZGVyLCBtZXRyaWNzLCBudW1HbHlwaHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXRyaWNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljcy5kYXRhID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5wb3MgPSAoZm9udC5zdGFydCA/IGZvbnQuc3RhcnQgOiAwKSArIGhlYWRlci5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1PZk1ldHJpY3MgPSBmb250LmdldFVpbnQxNigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1PZk1ldHJpY3MgPiBudW1HbHlwaHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKSgnVGhlIG51bU9mTWV0cmljcyAoJyArIG51bU9mTWV0cmljcyArICcpIHNob3VsZCBub3QgYmUgJyArICdncmVhdGVyIHRoYW4gdGhlIG51bUdseXBocyAoJyArIG51bUdseXBocyArICcpJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1PZk1ldHJpY3MgPSBudW1HbHlwaHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIuZGF0YVszNF0gPSAobnVtT2ZNZXRyaWNzICYgMHhmZjAwKSA+PiA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmRhdGFbMzVdID0gbnVtT2ZNZXRyaWNzICYgMHgwMGZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bU9mU2lkZWJlYXJpbmdzID0gbnVtR2x5cGhzIC0gbnVtT2ZNZXRyaWNzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtTWlzc2luZyA9IG51bU9mU2lkZWJlYXJpbmdzIC0gKG1ldHJpY3MubGVuZ3RoIC0gbnVtT2ZNZXRyaWNzICogNCA+PiAxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtTWlzc2luZyA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyaWVzID0gbmV3IFVpbnQ4QXJyYXkobWV0cmljcy5sZW5ndGggKyBudW1NaXNzaW5nICogMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzLnNldChtZXRyaWNzLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljcy5kYXRhID0gZW50cmllcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNhbml0aXplR2x5cGgoc291cmNlLCBzb3VyY2VTdGFydCwgc291cmNlRW5kLCBkZXN0LCBkZXN0U3RhcnQsIGhpbnRzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoUHJvZmlsZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVPZkluc3RydWN0aW9uczogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VFbmQgLSBzb3VyY2VTdGFydCA8PSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdseXBoUHJvZmlsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlmID0gc291cmNlLnN1YmFycmF5KHNvdXJjZVN0YXJ0LCBzb3VyY2VFbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udG91cnNDb3VudCA9IHNpZ25lZEludDE2KGdseWZbMF0sIGdseWZbMV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250b3Vyc0NvdW50IDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udG91cnNDb3VudCA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVTaWduZWRJbnQxNihnbHlmLCAwLCBjb250b3Vyc0NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Quc2V0KGdseWYsIGRlc3RTdGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaFByb2ZpbGUubGVuZ3RoID0gZ2x5Zi5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2x5cGhQcm9maWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnc0NvdW50ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29udG91cnNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kUG9pbnQgPSBnbHlmW2pdIDw8IDggfCBnbHlmW2ogKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzQ291bnQgPSBlbmRQb2ludCArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5zdHJ1Y3Rpb25zU3RhcnQgPSBqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5zdHJ1Y3Rpb25zTGVuZ3RoID0gZ2x5ZltqXSA8PCA4IHwgZ2x5ZltqICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoUHJvZmlsZS5zaXplT2ZJbnN0cnVjdGlvbnMgPSBpbnN0cnVjdGlvbnNMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gMiArIGluc3RydWN0aW9uc0xlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluc3RydWN0aW9uc0VuZCA9IGo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb29yZGluYXRlc0xlbmd0aCA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZsYWdzQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZsYWcgPSBnbHlmW2orK107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFnICYgMHhDMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseWZbaiAtIDFdID0gZmxhZyAmIDB4M0Y7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4eUxlbmd0aCA9IChmbGFnICYgMiA/IDEgOiBmbGFnICYgMTYgPyAwIDogMikgKyAoZmxhZyAmIDQgPyAxIDogZmxhZyAmIDMyID8gMCA6IDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXNMZW5ndGggKz0geHlMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFnICYgOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXBlYXQgPSBnbHlmW2orK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSByZXBlYXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXNMZW5ndGggKz0gcmVwZWF0ICogeHlMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29vcmRpbmF0ZXNMZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaFByb2ZpbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhEYXRhTGVuZ3RoID0gaiArIGNvb3JkaW5hdGVzTGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaERhdGFMZW5ndGggPiBnbHlmLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdseXBoUHJvZmlsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGludHNWYWxpZCAmJiBpbnN0cnVjdGlvbnNMZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LnNldChnbHlmLnN1YmFycmF5KDAsIGluc3RydWN0aW9uc1N0YXJ0KSwgZGVzdFN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Quc2V0KFswLCAwXSwgZGVzdFN0YXJ0ICsgaW5zdHJ1Y3Rpb25zU3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdC5zZXQoZ2x5Zi5zdWJhcnJheShpbnN0cnVjdGlvbnNFbmQsIGdseXBoRGF0YUxlbmd0aCksIGRlc3RTdGFydCArIGluc3RydWN0aW9uc1N0YXJ0ICsgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaERhdGFMZW5ndGggLT0gaW5zdHJ1Y3Rpb25zTGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5Zi5sZW5ndGggLSBnbHlwaERhdGFMZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhEYXRhTGVuZ3RoID0gZ2x5cGhEYXRhTGVuZ3RoICsgMyAmIH4zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaFByb2ZpbGUubGVuZ3RoID0gZ2x5cGhEYXRhTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdseXBoUHJvZmlsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlmLmxlbmd0aCAtIGdseXBoRGF0YUxlbmd0aCA+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoRGF0YUxlbmd0aCA9IGdseXBoRGF0YUxlbmd0aCArIDMgJiB+MztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Quc2V0KGdseWYuc3ViYXJyYXkoMCwgZ2x5cGhEYXRhTGVuZ3RoKSwgZGVzdFN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoUHJvZmlsZS5sZW5ndGggPSBnbHlwaERhdGFMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2x5cGhQcm9maWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdC5zZXQoZ2x5ZiwgZGVzdFN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhQcm9maWxlLmxlbmd0aCA9IGdseWYubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2x5cGhQcm9maWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNhbml0aXplSGVhZChoZWFkLCBudW1HbHlwaHMsIGxvY2FMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBoZWFkLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2ZXJzaW9uID0gaW50MzIoZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSwgZGF0YVszXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcnNpb24gPj4gMTYgIT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKSgnQXR0ZW1wdGluZyB0byBmaXggaW52YWxpZCB2ZXJzaW9uIGluIGhlYWQgdGFibGU6ICcgKyB2ZXJzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzJdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbM10gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4VG9Mb2NGb3JtYXQgPSBpbnQxNihkYXRhWzUwXSwgZGF0YVs1MV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleFRvTG9jRm9ybWF0IDwgMCB8fCBpbmRleFRvTG9jRm9ybWF0ID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKCdBdHRlbXB0aW5nIHRvIGZpeCBpbnZhbGlkIGluZGV4VG9Mb2NGb3JtYXQgaW4gaGVhZCB0YWJsZTogJyArIGluZGV4VG9Mb2NGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bUdseXBoc1BsdXNPbmUgPSBudW1HbHlwaHMgKyAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9jYUxlbmd0aCA9PT0gbnVtR2x5cGhzUGx1c09uZSA8PCAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs1MF0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbNTFdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYUxlbmd0aCA9PT0gbnVtR2x5cGhzUGx1c09uZSA8PCAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs1MF0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbNTFdID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdDb3VsZCBub3QgZml4IGluZGV4VG9Mb2NGb3JtYXQ6ICcgKyBpbmRleFRvTG9jRm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNhbml0aXplR2x5cGhMb2NhdGlvbnMobG9jYSwgZ2x5ZiwgbnVtR2x5cGhzLCBpc0dseXBoTG9jYXRpb25zTG9uZywgaGludHNWYWxpZCwgZHVwRmlyc3RFbnRyeSwgbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtU2l6ZSwgaXRlbURlY29kZSwgaXRlbUVuY29kZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNHbHlwaExvY2F0aW9uc0xvbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TaXplID0gNDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbURlY29kZSA9IGZ1bmN0aW9uIGZvbnRJdGVtRGVjb2RlTG9uZyhkYXRhLCBvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVtvZmZzZXRdIDw8IDI0IHwgZGF0YVtvZmZzZXQgKyAxXSA8PCAxNiB8IGRhdGFbb2Zmc2V0ICsgMl0gPDwgOCB8IGRhdGFbb2Zmc2V0ICsgM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtRW5jb2RlID0gZnVuY3Rpb24gZm9udEl0ZW1FbmNvZGVMb25nKGRhdGEsIG9mZnNldCwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW29mZnNldF0gPSB2YWx1ZSA+Pj4gMjQgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0ICsgMV0gPSB2YWx1ZSA+PiAxNiAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtvZmZzZXQgKyAyXSA9IHZhbHVlID4+IDggJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0ICsgM10gPSB2YWx1ZSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVNpemUgPSAyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGVjb2RlID0gZnVuY3Rpb24gZm9udEl0ZW1EZWNvZGUoZGF0YSwgb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFbb2Zmc2V0XSA8PCA5IHwgZGF0YVtvZmZzZXQgKyAxXSA8PCAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUVuY29kZSA9IGZ1bmN0aW9uIGZvbnRJdGVtRW5jb2RlKGRhdGEsIG9mZnNldCwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW29mZnNldF0gPSB2YWx1ZSA+PiA5ICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW29mZnNldCArIDFdID0gdmFsdWUgPj4gMSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bUdseXBoc091dCA9IGR1cEZpcnN0RW50cnkgPyBudW1HbHlwaHMgKyAxIDogbnVtR2x5cGhzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9jYURhdGEgPSBsb2NhLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb2NhRGF0YVNpemUgPSBpdGVtU2l6ZSAqICgxICsgbnVtR2x5cGhzT3V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYURhdGEgPSBuZXcgVWludDhBcnJheShsb2NhRGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhRGF0YS5zZXQobG9jYS5kYXRhLnN1YmFycmF5KDAsIGxvY2FEYXRhU2l6ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhLmRhdGEgPSBsb2NhRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9sZEdseWZEYXRhID0gZ2x5Zi5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2xkR2x5ZkRhdGFMZW5ndGggPSBvbGRHbHlmRGF0YS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdHbHlmRGF0YSA9IG5ldyBVaW50OEFycmF5KG9sZEdseWZEYXRhTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0T2Zmc2V0ID0gaXRlbURlY29kZShsb2NhRGF0YSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3cml0ZU9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtaXNzaW5nR2x5cGhzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUVuY29kZShsb2NhRGF0YSwgMCwgd3JpdGVPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBqID0gaXRlbVNpemU7IGkgPCBudW1HbHlwaHM7IGkrKywgaiArPSBpdGVtU2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZE9mZnNldCA9IGl0ZW1EZWNvZGUobG9jYURhdGEsIGopO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5kT2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmRPZmZzZXQgPiBvbGRHbHlmRGF0YUxlbmd0aCAmJiAob2xkR2x5ZkRhdGFMZW5ndGggKyAzICYgfjMpID09PSBlbmRPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRPZmZzZXQgPSBvbGRHbHlmRGF0YUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuZE9mZnNldCA+IG9sZEdseWZEYXRhTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSBlbmRPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaFByb2ZpbGUgPSBzYW5pdGl6ZUdseXBoKG9sZEdseWZEYXRhLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBuZXdHbHlmRGF0YSwgd3JpdGVPZmZzZXQsIGhpbnRzVmFsaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld0xlbmd0aCA9IGdseXBoUHJvZmlsZS5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdMZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNzaW5nR2x5cGhzW2ldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdseXBoUHJvZmlsZS5zaXplT2ZJbnN0cnVjdGlvbnMgPiBtYXhTaXplT2ZJbnN0cnVjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplT2ZJbnN0cnVjdGlvbnMgPSBnbHlwaFByb2ZpbGUuc2l6ZU9mSW5zdHJ1Y3Rpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZU9mZnNldCArPSBuZXdMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtRW5jb2RlKGxvY2FEYXRhLCBqLCB3cml0ZU9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydE9mZnNldCA9IGVuZE9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3cml0ZU9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpbXBsZUdseXBoID0gbmV3IFVpbnQ4QXJyYXkoWzAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5LCAwXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGogPSBpdGVtU2l6ZTsgaSA8IG51bUdseXBoc091dDsgaSsrLCBqICs9IGl0ZW1TaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUVuY29kZShsb2NhRGF0YSwgaiwgc2ltcGxlR2x5cGgubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5Zi5kYXRhID0gc2ltcGxlR2x5cGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZHVwRmlyc3RFbnRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0RW50cnlMZW5ndGggPSBpdGVtRGVjb2RlKGxvY2FEYXRhLCBpdGVtU2l6ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdHbHlmRGF0YS5sZW5ndGggPiBmaXJzdEVudHJ5TGVuZ3RoICsgd3JpdGVPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlmLmRhdGEgPSBuZXdHbHlmRGF0YS5zdWJhcnJheSgwLCBmaXJzdEVudHJ5TGVuZ3RoICsgd3JpdGVPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlmLmRhdGEgPSBuZXcgVWludDhBcnJheShmaXJzdEVudHJ5TGVuZ3RoICsgd3JpdGVPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseWYuZGF0YS5zZXQobmV3R2x5ZkRhdGEuc3ViYXJyYXkoMCwgd3JpdGVPZmZzZXQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5Zi5kYXRhLnNldChuZXdHbHlmRGF0YS5zdWJhcnJheSgwLCBmaXJzdEVudHJ5TGVuZ3RoKSwgd3JpdGVPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUVuY29kZShsb2NhLmRhdGEsIGxvY2FEYXRhLmxlbmd0aCAtIGl0ZW1TaXplLCB3cml0ZU9mZnNldCArIGZpcnN0RW50cnlMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5Zi5kYXRhID0gbmV3R2x5ZkRhdGEuc3ViYXJyYXkoMCwgd3JpdGVPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NpbmdHbHlwaHM6IG1pc3NpbmdHbHlwaHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplT2ZJbnN0cnVjdGlvbnM6IG1heFNpemVPZkluc3RydWN0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWRQb3N0U2NyaXB0VGFibGUocG9zdCwgcHJvcGVydGllcywgbWF4cE51bUdseXBocykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSAoZm9udC5zdGFydCA/IGZvbnQuc3RhcnQgOiAwKSArIHBvc3Qub2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LnBvcyA9IHN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gcG9zdC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBzdGFydCArIGxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnNpb24gPSBmb250LmdldEludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQuZ2V0Qnl0ZXMoMjgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhOYW1lcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh2ZXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDAwMTAwMDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhOYW1lcyA9IE1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDAwMDIwMDAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1HbHlwaHMgPSBmb250LmdldFVpbnQxNigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bUdseXBocyAhPT0gbWF4cE51bUdseXBocykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhOYW1lSW5kZXhlcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGZvbnQuZ2V0VWludDE2KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IDMyNzY4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE5hbWVJbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1c3RvbU5hbWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ckJ1ZiA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGZvbnQucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJpbmdMZW5ndGggPSBmb250LmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLmxlbmd0aCA9IHN0cmluZ0xlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RyaW5nTGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ckJ1ZltpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZm9udC5nZXRCeXRlKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tTmFtZXMucHVzaChzdHJCdWYuam9pbignJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoTmFtZXMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaiA9IGdseXBoTmFtZUluZGV4ZXNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPCAyNTgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoTmFtZXMucHVzaChNYWNTdGFuZGFyZEdseXBoT3JkZXJpbmdbal0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE5hbWVzLnB1c2goY3VzdG9tTmFtZXNbaiAtIDI1OF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDAwMzAwMDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbmtub3duL3Vuc3VwcG9ydGVkIHBvc3QgdGFibGUgdmVyc2lvbiAnICsgdmVyc2lvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmRlZmF1bHRFbmNvZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE5hbWVzID0gcHJvcGVydGllcy5kZWZhdWx0RW5jb2Rpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmdseXBoTmFtZXMgPSBnbHlwaE5hbWVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZE5hbWVUYWJsZShuYW1lVGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gKGZvbnQuc3RhcnQgPyBmb250LnN0YXJ0IDogMCkgKyBuYW1lVGFibGUub2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LnBvcyA9IHN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZXMgPSBbW10sIFtdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IG5hbWVUYWJsZS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBzdGFydCArIGxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1hdCA9IGZvbnQuZ2V0VWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBGT1JNQVRfMF9IRUFERVJfTEVOR1RIID0gNjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ICE9PSAwIHx8IGxlbmd0aCA8IEZPUk1BVF8wX0hFQURFUl9MRU5HVEgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuYW1lcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1SZWNvcmRzID0gZm9udC5nZXRVaW50MTYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmluZ3NTdGFydCA9IGZvbnQuZ2V0VWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWNvcmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBOQU1FX1JFQ09SRF9MRU5HVEggPSAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIGlpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1SZWNvcmRzICYmIGZvbnQucG9zICsgTkFNRV9SRUNPUkRfTEVOR1RIIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybTogZm9udC5nZXRVaW50MTYoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogZm9udC5nZXRVaW50MTYoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZTogZm9udC5nZXRVaW50MTYoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmb250LmdldFVpbnQxNigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDogZm9udC5nZXRVaW50MTYoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IGZvbnQuZ2V0VWludDE2KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLnBsYXRmb3JtID09PSAxICYmIHIuZW5jb2RpbmcgPT09IDAgJiYgci5sYW5ndWFnZSA9PT0gMCB8fCByLnBsYXRmb3JtID09PSAzICYmIHIuZW5jb2RpbmcgPT09IDEgJiYgci5sYW5ndWFnZSA9PT0gMHg0MDkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzLnB1c2gocik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHJlY29yZHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY29yZCA9IHJlY29yZHNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmQubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IHN0YXJ0ICsgc3RyaW5nc1N0YXJ0ICsgcmVjb3JkLm9mZnNldDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvcyArIHJlY29yZC5sZW5ndGggPiBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5wb3MgPSBwb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZUluZGV4ID0gcmVjb3JkLm5hbWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmQuZW5jb2RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgamogPSByZWNvcmQubGVuZ3RoOyBqIDwgamo7IGogKz0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShmb250LmdldFVpbnQxNigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc1sxXVtuYW1lSW5kZXhdID0gc3RyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc1swXVtuYW1lSW5kZXhdID0gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGZvbnQuZ2V0Qnl0ZXMocmVjb3JkLmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBUVE9wc1N0YWNrRGVsdGFzID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIC0yLCAtMiwgLTIsIC0yLCAwLCAwLCAtMiwgLTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMCwgMCwgLTEsIDAsIC0xLCAtMSwgLTEsIC0xLCAxLCAtMSwgLTk5OSwgMCwgMSwgMCwgLTEsIC0yLCAwLCAtMSwgLTIsIC0xLCAtMSwgMCwgLTEsIC0xLCAwLCAwLCAtOTk5LCAtOTk5LCAtMSwgLTEsIC0xLCAtMSwgLTIsIC05OTksIC0yLCAtMiwgLTk5OSwgMCwgLTIsIC0yLCAwLCAwLCAtMiwgMCwgLTIsIDAsIDAsIDAsIC0yLCAtMSwgLTEsIDEsIDEsIDAsIDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAwLCAwLCAtMSwgMCwgLTEsIC0xLCAwLCAtOTk5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAtMiwgLTk5OSwgLTk5OSwgLTk5OSwgLTk5OSwgLTk5OSwgLTEsIC0xLCAtMiwgLTIsIDAsIDAsIDAsIDAsIC0xLCAtMSwgLTk5OSwgLTIsIC0yLCAwLCAwLCAtMSwgLTIsIC0yLCAwLCAwLCAwLCAtMSwgLTEsIC0xLCAtMl07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzYW5pdGl6ZVRUUHJvZ3JhbSh0YWJsZSwgdHRDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gdGFibGUuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0RW5kZiA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0RGVmZiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFjayA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FsbHN0YWNrID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbnNDYWxsZWQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucyA9IHR0Q29udGV4dC50b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbkZERUYgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmTGV2ZWwgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5FTFNFID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3AgPSBkYXRhW2krK107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcCA9PT0gMHg0MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBkYXRhW2krK107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5GREVGIHx8IGluRUxTRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IG47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChkYXRhW2krK10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gMHg0MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBkYXRhW2krK107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5GREVGIHx8IGluRUxTRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IG4gKiAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBkYXRhW2krK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGIgPDwgOCB8IGRhdGFbaSsrXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChvcCAmIDB4RjgpID09PSAweEIwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG9wIC0gMHhCMCArIDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5GREVGIHx8IGluRUxTRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IG47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChkYXRhW2krK10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgob3AgJiAweEY4KSA9PT0gMHhCOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBvcCAtIDB4QjggKyAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluRkRFRiB8fCBpbkVMU0UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSBuICogMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gZGF0YVtpKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChiIDw8IDggfCBkYXRhW2krK10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gMHgyQiAmJiAhdG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbkZERUYgJiYgIWluRUxTRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jSWQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oZnVuY0lkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKCdUVDogQ0FMTCBlbXB0eSBzdGFjayAob3IgaW52YWxpZCBlbnRyeSkuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dENvbnRleHQuZnVuY3Rpb25zVXNlZFtmdW5jSWRdID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmNJZCBpbiB0dENvbnRleHQuZnVuY3Rpb25zU3RhY2tEZWx0YXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3U3RhY2tMZW5ndGggPSBzdGFjay5sZW5ndGggKyB0dENvbnRleHQuZnVuY3Rpb25zU3RhY2tEZWx0YXNbZnVuY0lkXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdTdGFja0xlbmd0aCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdUVDogQ0FMTCBpbnZhbGlkIGZ1bmN0aW9ucyBzdGFjayBkZWx0YS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRDb250ZXh0LmhpbnRzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmxlbmd0aCA9IG5ld1N0YWNrTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmdW5jSWQgaW4gdHRDb250ZXh0LmZ1bmN0aW9uc0RlZmluZWQgJiYgIWZ1bmN0aW9uc0NhbGxlZC5pbmNsdWRlcyhmdW5jSWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1RvcDogc3RhY2subGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uc0NhbGxlZC5wdXNoKGZ1bmNJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGMgPSB0dENvbnRleHQuZnVuY3Rpb25zRGVmaW5lZFtmdW5jSWRdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1RUOiBDQUxMIG5vbi1leGlzdGVudCBmdW5jdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dENvbnRleHQuaGludHNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHBjLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHBjLmk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAweDJDICYmICF0b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5GREVGIHx8IGluRUxTRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1RUOiBuZXN0ZWQgRkRFRnMgbm90IGFsbG93ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkZERUYgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3REZWZmID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jSWQgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dENvbnRleHQuZnVuY3Rpb25zRGVmaW5lZFtmdW5jSWRdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOiBpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3AgPT09IDB4MkQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5GREVGKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluRkRFRiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0RW5kZiA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGMgPSBjYWxsc3RhY2sucG9wKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdUVDogRU5ERiBiYWQgc3RhY2snKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0Q29udGV4dC5oaW50c1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jSWQgPSBmdW5jdGlvbnNDYWxsZWQucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBwYy5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gcGMuaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRDb250ZXh0LmZ1bmN0aW9uc1N0YWNrRGVsdGFzW2Z1bmNJZF0gPSBzdGFjay5sZW5ndGggLSBwYy5zdGFja1RvcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAweDg5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluRkRFRiB8fCBpbkVMU0UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdUVDogbmVzdGVkIElERUZzIG5vdCBhbGxvd2VkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5GREVGID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0RGVmZiA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAweDU4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytpZkxldmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gMHgxQikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluRUxTRSA9IGlmTGV2ZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAweDU5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluRUxTRSA9PT0gaWZMZXZlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkVMU0UgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taWZMZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3AgPT09IDB4MUMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWluRkRFRiAmJiAhaW5FTFNFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSBvZmZzZXQgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWluRkRFRiAmJiAhaW5FTFNFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YWNrRGVsdGEgPSBvcCA8PSAweDhFID8gVFRPcHNTdGFja0RlbHRhc1tvcF0gOiBvcCA+PSAweEMwICYmIG9wIDw9IDB4REYgPyAtMSA6IG9wID49IDB4RTAgPyAtMiA6IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3AgPj0gMHg3MSAmJiBvcCA8PSAweDc1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBzdGFjay5wb3AoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKG4pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0RlbHRhID0gLW4gKiAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHN0YWNrRGVsdGEgPCAwICYmIHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrRGVsdGErKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc3RhY2tEZWx0YSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChOYU4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0RlbHRhLS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRDb250ZXh0LnRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucyA9IHRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBbZGF0YV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPiBkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudC5wdXNoKG5ldyBVaW50OEFycmF5KGkgLSBkYXRhLmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3REZWZmID4gbGFzdEVuZGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnVFQ6IGNvbXBsZW1lbnRpbmcgYSBtaXNzaW5nIGZ1bmN0aW9uIHRhaWwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQucHVzaChuZXcgVWludDhBcnJheShbMHgyMiwgMHgyRF0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRUVFRhYmxlKHRhYmxlLCBjb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjaGVja0ludmFsaWRGdW5jdGlvbnModHRDb250ZXh0LCBtYXhGdW5jdGlvbkRlZnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR0Q29udGV4dC50b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0dENvbnRleHQuZnVuY3Rpb25zRGVmaW5lZC5sZW5ndGggPiBtYXhGdW5jdGlvbkRlZnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnVFQ6IG1vcmUgZnVuY3Rpb25zIGRlZmluZWQgdGhhbiBleHBlY3RlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRDb250ZXh0LmhpbnRzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IHR0Q29udGV4dC5mdW5jdGlvbnNVc2VkLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqID4gbWF4RnVuY3Rpb25EZWZzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdUVDogaW52YWxpZCBmdW5jdGlvbiBpZDogJyArIGopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0Q29udGV4dC5oaW50c1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHRDb250ZXh0LmZ1bmN0aW9uc1VzZWRbal0gJiYgIXR0Q29udGV4dC5mdW5jdGlvbnNEZWZpbmVkW2pdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdUVDogdW5kZWZpbmVkIGZ1bmN0aW9uOiAnICsgaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRDb250ZXh0LmhpbnRzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmb2xkVFRUYWJsZSh0YWJsZSwgY29udGVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3TGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqLCBqajtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMCwgamogPSBjb250ZW50Lmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdMZW5ndGggKz0gY29udGVudFtqXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0xlbmd0aCA9IG5ld0xlbmd0aCArIDMgJiB+MztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgVWludDhBcnJheShuZXdMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDAsIGpqID0gY29udGVudC5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNldChjb250ZW50W2pdLCBwb3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyArPSBjb250ZW50W2pdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUuZGF0YSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLmxlbmd0aCA9IG5ld0xlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNhbml0aXplVFRQcm9ncmFtcyhmcGdtLCBwcmVwLCBjdnQsIG1heEZ1bmN0aW9uRGVmcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHRDb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25zRGVmaW5lZDogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnNVc2VkOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uc1N0YWNrRGVsdGFzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9uczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50c1ZhbGlkOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZwZ20pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbml0aXplVFRQcm9ncmFtKGZwZ20sIHR0Q29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FuaXRpemVUVFByb2dyYW0ocHJlcCwgdHRDb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcGdtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0ludmFsaWRGdW5jdGlvbnModHRDb250ZXh0LCBtYXhGdW5jdGlvbkRlZnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN2dCAmJiBjdnQubGVuZ3RoICYgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN2dERhdGEgPSBuZXcgVWludDhBcnJheShjdnQubGVuZ3RoICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdnREYXRhLnNldChjdnQuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdnQuZGF0YSA9IGN2dERhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHRDb250ZXh0LmhpbnRzVmFsaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udCA9IG5ldyBfc3RyZWFtLlN0cmVhbShuZXcgVWludDhBcnJheShmb250LmdldEJ5dGVzKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGVyLCB0YWJsZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNUcnVlVHlwZUNvbGxlY3Rpb25GaWxlKGZvbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0dGNEYXRhID0gcmVhZFRydWVUeXBlQ29sbGVjdGlvbkRhdGEoZm9udCwgdGhpcy5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyID0gdHRjRGF0YS5oZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlcyA9IHR0Y0RhdGEudGFibGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlciA9IHJlYWRPcGVuVHlwZUhlYWRlcihmb250KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzID0gcmVhZFRhYmxlcyhmb250LCBoZWFkZXIubnVtVGFibGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2ZmLCBjZmZGaWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc1RydWVUeXBlID0gIXRhYmxlc1snQ0ZGICddO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1RydWVUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0NvbXBvc2l0ZSA9IHByb3BlcnRpZXMuY29tcG9zaXRlICYmICgocHJvcGVydGllcy5jaWRUb0dpZE1hcCB8fCBbXSkubGVuZ3RoID4gMCB8fCAhKHByb3BlcnRpZXMuY01hcCBpbnN0YW5jZW9mIF9jbWFwLklkZW50aXR5Q01hcCkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFkZXIudmVyc2lvbiA9PT0gJ09UVE8nICYmICFpc0NvbXBvc2l0ZSB8fCAhdGFibGVzWydoZWFkJ10gfHwgIXRhYmxlc1snaGhlYSddIHx8ICF0YWJsZXNbJ21heHAnXSB8fCAhdGFibGVzWydwb3N0J10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZkZpbGUgPSBuZXcgX3N0cmVhbS5TdHJlYW0odGFibGVzWydDRkYgJ10uZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYgPSBuZXcgQ0ZGRm9udChjZmZGaWxlLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdFdpZHRocyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnQobmFtZSwgY2ZmLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0YWJsZXNbJ2dseWYnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRhYmxlc1snbG9jYSddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGFibGVzWydmcGdtJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0YWJsZXNbJ3ByZXAnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRhYmxlc1snY3Z0ICddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzT3BlblR5cGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGFibGVzWydsb2NhJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignUmVxdWlyZWQgXCJsb2NhXCIgdGFibGUgaXMgbm90IGZvdW5kJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRhYmxlc1snZ2x5ZiddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1JlcXVpcmVkIFwiZ2x5ZlwiIHRhYmxlIGlzIG5vdCBmb3VuZCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlc1snZ2x5ZiddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZzogJ2dseWYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IG5ldyBVaW50OEFycmF5KDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc09wZW5UeXBlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0YWJsZXNbJ21heHAnXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1JlcXVpcmVkIFwibWF4cFwiIHRhYmxlIGlzIG5vdCBmb3VuZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zID0gKGZvbnQuc3RhcnQgfHwgMCkgKyB0YWJsZXNbJ21heHAnXS5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnNpb24gPSBmb250LmdldEludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bUdseXBocyA9IGZvbnQuZ2V0VWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bUdseXBoc091dCA9IG51bUdseXBocyArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGR1cEZpcnN0RW50cnkgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bUdseXBoc091dCA+IDB4RkZGRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXBGaXJzdEVudHJ5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUdseXBoc091dCA9IG51bUdseXBocztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdOb3QgZW5vdWdoIHNwYWNlIGluIGdseWZzIHRvIGR1cGxpY2F0ZSBmaXJzdCBnbHlwaC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4RnVuY3Rpb25EZWZzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJzaW9uID49IDB4MDAwMTAwMDAgJiYgdGFibGVzWydtYXhwJ10ubGVuZ3RoID49IDIyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhab25lcyA9IGZvbnQuZ2V0VWludDE2KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heFpvbmVzID4gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzWydtYXhwJ10uZGF0YVsxNF0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzWydtYXhwJ10uZGF0YVsxNV0gPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5wb3MgKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4RnVuY3Rpb25EZWZzID0gZm9udC5nZXRVaW50MTYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5wb3MgKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zID0gZm9udC5nZXRVaW50MTYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXNbJ21heHAnXS5kYXRhWzRdID0gbnVtR2x5cGhzT3V0ID4+IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzWydtYXhwJ10uZGF0YVs1XSA9IG51bUdseXBoc091dCAmIDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGludHNWYWxpZCA9IHNhbml0aXplVFRQcm9ncmFtcyh0YWJsZXNbJ2ZwZ20nXSwgdGFibGVzWydwcmVwJ10sIHRhYmxlc1snY3Z0ICddLCBtYXhGdW5jdGlvbkRlZnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoaW50c1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0YWJsZXNbJ2ZwZ20nXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRhYmxlc1sncHJlcCddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGFibGVzWydjdnQgJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FuaXRpemVNZXRyaWNzKGZvbnQsIHRhYmxlc1snaGhlYSddLCB0YWJsZXNbJ2htdHgnXSwgbnVtR2x5cGhzT3V0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGFibGVzWydoZWFkJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdSZXF1aXJlZCBcImhlYWRcIiB0YWJsZSBpcyBub3QgZm91bmQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW5pdGl6ZUhlYWQodGFibGVzWydoZWFkJ10sIG51bUdseXBocywgaXNUcnVlVHlwZSA/IHRhYmxlc1snbG9jYSddLmxlbmd0aCA6IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtaXNzaW5nR2x5cGhzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1RydWVUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0dseXBoTG9jYXRpb25zTG9uZyA9IGludDE2KHRhYmxlc1snaGVhZCddLmRhdGFbNTBdLCB0YWJsZXNbJ2hlYWQnXS5kYXRhWzUxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaHNJbmZvID0gc2FuaXRpemVHbHlwaExvY2F0aW9ucyh0YWJsZXNbJ2xvY2EnXSwgdGFibGVzWydnbHlmJ10sIG51bUdseXBocywgaXNHbHlwaExvY2F0aW9uc0xvbmcsIGhpbnRzVmFsaWQsIGR1cEZpcnN0RW50cnksIG1heFNpemVPZkluc3RydWN0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NpbmdHbHlwaHMgPSBnbHlwaHNJbmZvLm1pc3NpbmdHbHlwaHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcnNpb24gPj0gMHgwMDAxMDAwMCAmJiB0YWJsZXNbJ21heHAnXS5sZW5ndGggPj0gMjIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlc1snbWF4cCddLmRhdGFbMjZdID0gZ2x5cGhzSW5mby5tYXhTaXplT2ZJbnN0cnVjdGlvbnMgPj4gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlc1snbWF4cCddLmRhdGFbMjddID0gZ2x5cGhzSW5mby5tYXhTaXplT2ZJbnN0cnVjdGlvbnMgJiAyNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRhYmxlc1snaGhlYSddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignUmVxdWlyZWQgXCJoaGVhXCIgdGFibGUgaXMgbm90IGZvdW5kJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhYmxlc1snaGhlYSddLmRhdGFbMTBdID09PSAwICYmIHRhYmxlc1snaGhlYSddLmRhdGFbMTFdID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlc1snaGhlYSddLmRhdGFbMTBdID0gMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzWydoaGVhJ10uZGF0YVsxMV0gPSAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXRyaWNzT3ZlcnJpZGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRzUGVyRW06IGludDE2KHRhYmxlc1snaGVhZCddLmRhdGFbMThdLCB0YWJsZXNbJ2hlYWQnXS5kYXRhWzE5XSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlNYXg6IGludDE2KHRhYmxlc1snaGVhZCddLmRhdGFbNDJdLCB0YWJsZXNbJ2hlYWQnXS5kYXRhWzQzXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlNaW46IHNpZ25lZEludDE2KHRhYmxlc1snaGVhZCddLmRhdGFbMzhdLCB0YWJsZXNbJ2hlYWQnXS5kYXRhWzM5XSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzY2VudDogaW50MTYodGFibGVzWydoaGVhJ10uZGF0YVs0XSwgdGFibGVzWydoaGVhJ10uZGF0YVs1XSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NlbnQ6IHNpZ25lZEludDE2KHRhYmxlc1snaGhlYSddLmRhdGFbNl0sIHRhYmxlc1snaGhlYSddLmRhdGFbN10pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFzY2VudCA9IG1ldHJpY3NPdmVycmlkZS5hc2NlbnQgLyBtZXRyaWNzT3ZlcnJpZGUudW5pdHNQZXJFbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc2NlbnQgPSBtZXRyaWNzT3ZlcnJpZGUuZGVzY2VudCAvIG1ldHJpY3NPdmVycmlkZS51bml0c1BlckVtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhYmxlc1sncG9zdCddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRQb3N0U2NyaXB0VGFibGUodGFibGVzWydwb3N0J10sIHByb3BlcnRpZXMsIG51bUdseXBocyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzWydwb3N0J10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZzogJ3Bvc3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBjcmVhdGVQb3N0VGFibGUocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyQ29kZVRvR2x5cGhJZCA9IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGhhc0dseXBoKGdseXBoSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFtaXNzaW5nR2x5cGhzW2dseXBoSWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmNvbXBvc2l0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2lkVG9HaWRNYXAgPSBwcm9wZXJ0aWVzLmNpZFRvR2lkTWFwIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNDaWRUb0dpZE1hcEVtcHR5ID0gY2lkVG9HaWRNYXAubGVuZ3RoID09PSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmNNYXAuZm9yRWFjaChmdW5jdGlvbiAoY2hhckNvZGUsIGNpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNpZCA+IDB4ZmZmZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignTWF4IHNpemUgb2YgQ0lEIGlzIDY1LDUzNScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhJZCA9IC0xO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNDaWRUb0dpZE1hcEVtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhJZCA9IGNpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2lkVG9HaWRNYXBbY2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhJZCA9IGNpZFRvR2lkTWFwW2NpZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaElkID49IDAgJiYgZ2x5cGhJZCA8IG51bUdseXBocyAmJiBoYXNHbHlwaChnbHlwaElkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGdseXBoSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbWFwVGFibGUgPSByZWFkQ21hcFRhYmxlKHRhYmxlc1snY21hcCddLCBmb250LCB0aGlzLmlzU3ltYm9saWNGb250LCBwcm9wZXJ0aWVzLmhhc0VuY29kaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNtYXBQbGF0Zm9ybUlkID0gY21hcFRhYmxlLnBsYXRmb3JtSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbWFwRW5jb2RpbmdJZCA9IGNtYXBUYWJsZS5lbmNvZGluZ0lkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY21hcE1hcHBpbmdzID0gY21hcFRhYmxlLm1hcHBpbmdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY21hcE1hcHBpbmdzTGVuZ3RoID0gY21hcE1hcHBpbmdzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5oYXNFbmNvZGluZyAmJiAoY21hcFBsYXRmb3JtSWQgPT09IDMgJiYgY21hcEVuY29kaW5nSWQgPT09IDEgfHwgY21hcFBsYXRmb3JtSWQgPT09IDEgJiYgY21hcEVuY29kaW5nSWQgPT09IDApIHx8IGNtYXBQbGF0Zm9ybUlkID09PSAtMSAmJiBjbWFwRW5jb2RpbmdJZCA9PT0gLTEgJiYgISEoMCwgX2VuY29kaW5ncy5nZXRFbmNvZGluZykocHJvcGVydGllcy5iYXNlRW5jb2RpbmdOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2VFbmNvZGluZyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5iYXNlRW5jb2RpbmdOYW1lID09PSAnTWFjUm9tYW5FbmNvZGluZycgfHwgcHJvcGVydGllcy5iYXNlRW5jb2RpbmdOYW1lID09PSAnV2luQW5zaUVuY29kaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VFbmNvZGluZyA9ICgwLCBfZW5jb2RpbmdzLmdldEVuY29kaW5nKShwcm9wZXJ0aWVzLmJhc2VFbmNvZGluZ05hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhzVW5pY29kZU1hcCA9ICgwLCBfZ2x5cGhsaXN0LmdldEdseXBoc1VuaWNvZGUpKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY2hhckNvZGUgPSAwOyBjaGFyQ29kZSA8IDI1NjsgY2hhckNvZGUrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaE5hbWUsIHN0YW5kYXJkR2x5cGhOYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlmZmVyZW5jZXMgJiYgY2hhckNvZGUgaW4gdGhpcy5kaWZmZXJlbmNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE5hbWUgPSB0aGlzLmRpZmZlcmVuY2VzW2NoYXJDb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYXJDb2RlIGluIGJhc2VFbmNvZGluZyAmJiBiYXNlRW5jb2RpbmdbY2hhckNvZGVdICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE5hbWUgPSBiYXNlRW5jb2RpbmdbY2hhckNvZGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoTmFtZSA9IF9lbmNvZGluZ3MuU3RhbmRhcmRFbmNvZGluZ1tjaGFyQ29kZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFnbHlwaE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmRHbHlwaE5hbWUgPSByZWNvdmVyR2x5cGhOYW1lKGdseXBoTmFtZSwgZ2x5cGhzVW5pY29kZU1hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuaWNvZGVPckNoYXJDb2RlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNtYXBQbGF0Zm9ybUlkID09PSAzICYmIGNtYXBFbmNvZGluZ0lkID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGVPckNoYXJDb2RlID0gZ2x5cGhzVW5pY29kZU1hcFtzdGFuZGFyZEdseXBoTmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjbWFwUGxhdGZvcm1JZCA9PT0gMSAmJiBjbWFwRW5jb2RpbmdJZCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2RlT3JDaGFyQ29kZSA9IF9lbmNvZGluZ3MuTWFjUm9tYW5FbmNvZGluZy5pbmRleE9mKHN0YW5kYXJkR2x5cGhOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm91bmQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY21hcE1hcHBpbmdzTGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNtYXBNYXBwaW5nc1tpXS5jaGFyQ29kZSAhPT0gdW5pY29kZU9yQ2hhckNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gY21hcE1hcHBpbmdzW2ldLmdseXBoSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZCAmJiBwcm9wZXJ0aWVzLmdseXBoTmFtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoSWQgPSBwcm9wZXJ0aWVzLmdseXBoTmFtZXMuaW5kZXhPZihnbHlwaE5hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaElkID09PSAtMSAmJiBzdGFuZGFyZEdseXBoTmFtZSAhPT0gZ2x5cGhOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaElkID0gcHJvcGVydGllcy5nbHlwaE5hbWVzLmluZGV4T2Yoc3RhbmRhcmRHbHlwaE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdseXBoSWQgPiAwICYmIGhhc0dseXBoKGdseXBoSWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gPSBnbHlwaElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNtYXBQbGF0Zm9ybUlkID09PSAwICYmIGNtYXBFbmNvZGluZ0lkID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBjbWFwTWFwcGluZ3NMZW5ndGg7ICsrX2kyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY21hcE1hcHBpbmdzW19pMl0uY2hhckNvZGVdID0gY21hcE1hcHBpbmdzW19pMl0uZ2x5cGhJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IGNtYXBNYXBwaW5nc0xlbmd0aDsgKytfaTMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IGNtYXBNYXBwaW5nc1tfaTNdLmNoYXJDb2RlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNtYXBQbGF0Zm9ybUlkID09PSAzICYmIGNoYXJDb2RlID49IDB4RjAwMCAmJiBjaGFyQ29kZSA8PSAweEYwRkYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGUgJj0gMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gPSBjbWFwTWFwcGluZ3NbX2kzXS5nbHlwaElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlVG9HbHlwaElkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFswXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoWmVyb0lkID0gbnVtR2x5cGhzT3V0IC0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZHVwRmlyc3RFbnRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaFplcm9JZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld01hcHBpbmcgPSBhZGp1c3RNYXBwaW5nKGNoYXJDb2RlVG9HbHlwaElkLCBoYXNHbHlwaCwgZ2x5cGhaZXJvSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9Gb250Q2hhciA9IG5ld01hcHBpbmcudG9Gb250Q2hhcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXNbJ2NtYXAnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnOiAnY21hcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGNyZWF0ZUNtYXBUYWJsZShuZXdNYXBwaW5nLmNoYXJDb2RlVG9HbHlwaElkLCBudW1HbHlwaHNPdXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGFibGVzWydPUy8yJ10gfHwgIXZhbGlkYXRlT1MyVGFibGUodGFibGVzWydPUy8yJ10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlc1snT1MvMiddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnOiAnT1MvMicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBjcmVhdGVPUzJUYWJsZShwcm9wZXJ0aWVzLCBuZXdNYXBwaW5nLmNoYXJDb2RlVG9HbHlwaElkLCBtZXRyaWNzT3ZlcnJpZGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1RydWVUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmZGaWxlID0gbmV3IF9zdHJlYW0uU3RyZWFtKHRhYmxlc1snQ0ZGICddLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBfY2ZmX3BhcnNlci5DRkZQYXJzZXIoY2ZmRmlsZSwgcHJvcGVydGllcywgU0VBQ19BTkFMWVNJU19FTkFCTEVEKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZiA9IHBhcnNlci5wYXJzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZmLmR1cGxpY2F0ZUZpcnN0R2x5cGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21waWxlciA9IG5ldyBfY2ZmX3BhcnNlci5DRkZDb21waWxlcihjZmYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzWydDRkYgJ10uZGF0YSA9IGNvbXBpbGVyLmNvbXBpbGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdGYWlsZWQgdG8gY29tcGlsZSBmb250ICcgKyBwcm9wZXJ0aWVzLmxvYWRlZE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0YWJsZXNbJ25hbWUnXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXNbJ25hbWUnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZzogJ25hbWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogY3JlYXRlTmFtZVRhYmxlKHRoaXMubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZVByb3RvdHlwZSA9IHJlYWROYW1lVGFibGUodGFibGVzWyduYW1lJ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXNbJ25hbWUnXS5kYXRhID0gY3JlYXRlTmFtZVRhYmxlKG5hbWUsIG5hbWVQcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWlsZGVyID0gbmV3IE9wZW5UeXBlRmlsZUJ1aWxkZXIoaGVhZGVyLnZlcnNpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgdGFibGVUYWcgaW4gdGFibGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkVGFibGUodGFibGVUYWcsIHRhYmxlc1t0YWJsZVRhZ10uZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9BcnJheSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIEZvbnRfY29udmVydChmb250TmFtZSwgZm9udCwgcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZml4ZWRQaXRjaCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuYnVpbHRJbkVuY29kaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdFRvVW5pY29kZShwcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzLmJ1aWx0SW5FbmNvZGluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoWmVyb0lkID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250IGluc3RhbmNlb2YgQ0ZGRm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaFplcm9JZCA9IGZvbnQubnVtR2x5cGhzIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFwcGluZyA9IGZvbnQuZ2V0R2x5cGhNYXBwaW5nKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdNYXBwaW5nID0gYWRqdXN0TWFwcGluZyhtYXBwaW5nLCBmb250Lmhhc0dseXBoSWQuYmluZChmb250KSwgZ2x5cGhaZXJvSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9Gb250Q2hhciA9IG5ld01hcHBpbmcudG9Gb250Q2hhcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtR2x5cGhzID0gZm9udC5udW1HbHlwaHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRDaGFyQ29kZXMoY2hhckNvZGVUb0dseXBoSWQsIGdseXBoSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJDb2RlcyA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgY2hhckNvZGUgaW4gY2hhckNvZGVUb0dseXBoSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaElkID09PSBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoYXJDb2Rlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZXMucHVzaChjaGFyQ29kZSB8IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJDb2RlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVDaGFyQ29kZShjaGFyQ29kZVRvR2x5cGhJZCwgZ2x5cGhJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjaGFyQ29kZSBpbiBjaGFyQ29kZVRvR2x5cGhJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdseXBoSWQgPT09IGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGFyQ29kZSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdNYXBwaW5nLmNoYXJDb2RlVG9HbHlwaElkW25ld01hcHBpbmcubmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZV0gPSBnbHlwaElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3TWFwcGluZy5uZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlYWNzID0gZm9udC5zZWFjcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTRUFDX0FOQUxZU0lTX0VOQUJMRUQgJiYgc2VhY3MgJiYgc2VhY3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRyaXggPSBwcm9wZXJ0aWVzLmZvbnRNYXRyaXggfHwgX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyc2V0ID0gZm9udC5nZXRDaGFyc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWFjTWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBnbHlwaElkIGluIHNlYWNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaElkIHw9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VhYyA9IHNlYWNzW2dseXBoSWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2VHbHlwaE5hbWUgPSBfZW5jb2RpbmdzLlN0YW5kYXJkRW5jb2Rpbmdbc2VhY1syXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWNjZW50R2x5cGhOYW1lID0gX2VuY29kaW5ncy5TdGFuZGFyZEVuY29kaW5nW3NlYWNbM11dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2VHbHlwaElkID0gY2hhcnNldC5pbmRleE9mKGJhc2VHbHlwaE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFjY2VudEdseXBoSWQgPSBjaGFyc2V0LmluZGV4T2YoYWNjZW50R2x5cGhOYW1lKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2VHbHlwaElkIDwgMCB8fCBhY2NlbnRHbHlwaElkIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWNjZW50T2Zmc2V0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IHNlYWNbMF0gKiBtYXRyaXhbMF0gKyBzZWFjWzFdICogbWF0cml4WzJdICsgbWF0cml4WzRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IHNlYWNbMF0gKiBtYXRyaXhbMV0gKyBzZWFjWzFdICogbWF0cml4WzNdICsgbWF0cml4WzVdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJDb2RlcyA9IGdldENoYXJDb2RlcyhtYXBwaW5nLCBnbHlwaElkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGFyQ29kZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gY2hhckNvZGVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhckNvZGUgPSBjaGFyQ29kZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJDb2RlVG9HbHlwaElkID0gbmV3TWFwcGluZy5jaGFyQ29kZVRvR2x5cGhJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZUZvbnRDaGFyQ29kZSA9IGNyZWF0ZUNoYXJDb2RlKGNoYXJDb2RlVG9HbHlwaElkLCBiYXNlR2x5cGhJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFjY2VudEZvbnRDaGFyQ29kZSA9IGNyZWF0ZUNoYXJDb2RlKGNoYXJDb2RlVG9HbHlwaElkLCBhY2NlbnRHbHlwaElkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFjTWFwW2NoYXJDb2RlXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUZvbnRDaGFyQ29kZTogYmFzZUZvbnRDaGFyQ29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZW50Rm9udENoYXJDb2RlOiBhY2NlbnRGb250Q2hhckNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VudE9mZnNldDogYWNjZW50T2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuc2VhY01hcCA9IHNlYWNNYXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuaXRzUGVyRW0gPSAxIC8gKHByb3BlcnRpZXMuZm9udE1hdHJpeCB8fCBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWClbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgT3BlblR5cGVGaWxlQnVpbGRlcignXFx4NEZcXHg1NFxceDU0XFx4NEYnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFkZFRhYmxlKCdDRkYgJywgZm9udC5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFkZFRhYmxlKCdPUy8yJywgY3JlYXRlT1MyVGFibGUocHJvcGVydGllcywgbmV3TWFwcGluZy5jaGFyQ29kZVRvR2x5cGhJZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkVGFibGUoJ2NtYXAnLCBjcmVhdGVDbWFwVGFibGUobmV3TWFwcGluZy5jaGFyQ29kZVRvR2x5cGhJZCwgbnVtR2x5cGhzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hZGRUYWJsZSgnaGVhZCcsICdcXHgwMFxceDAxXFx4MDBcXHgwMCcgKyAnXFx4MDBcXHgwMFxceDEwXFx4MDAnICsgJ1xceDAwXFx4MDBcXHgwMFxceDAwJyArICdcXHg1RlxceDBGXFx4M0NcXHhGNScgKyAnXFx4MDBcXHgwMCcgKyBzYWZlU3RyaW5nMTYodW5pdHNQZXJFbSkgKyAnXFx4MDBcXHgwMFxceDAwXFx4MDBcXHg5ZVxceDBiXFx4N2VcXHgyNycgKyAnXFx4MDBcXHgwMFxceDAwXFx4MDBcXHg5ZVxceDBiXFx4N2VcXHgyNycgKyAnXFx4MDBcXHgwMCcgKyBzYWZlU3RyaW5nMTYocHJvcGVydGllcy5kZXNjZW50KSArICdcXHgwRlxceEZGJyArIHNhZmVTdHJpbmcxNihwcm9wZXJ0aWVzLmFzY2VudCkgKyBzdHJpbmcxNihwcm9wZXJ0aWVzLml0YWxpY0FuZ2xlID8gMiA6IDApICsgJ1xceDAwXFx4MTEnICsgJ1xceDAwXFx4MDAnICsgJ1xceDAwXFx4MDAnICsgJ1xceDAwXFx4MDAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFkZFRhYmxlKCdoaGVhJywgJ1xceDAwXFx4MDFcXHgwMFxceDAwJyArIHNhZmVTdHJpbmcxNihwcm9wZXJ0aWVzLmFzY2VudCkgKyBzYWZlU3RyaW5nMTYocHJvcGVydGllcy5kZXNjZW50KSArICdcXHgwMFxceDAwJyArICdcXHhGRlxceEZGJyArICdcXHgwMFxceDAwJyArICdcXHgwMFxceDAwJyArICdcXHgwMFxceDAwJyArIHNhZmVTdHJpbmcxNihwcm9wZXJ0aWVzLmNhcEhlaWdodCkgKyBzYWZlU3RyaW5nMTYoTWF0aC50YW4ocHJvcGVydGllcy5pdGFsaWNBbmdsZSkgKiBwcm9wZXJ0aWVzLnhIZWlnaHQpICsgJ1xceDAwXFx4MDAnICsgJ1xceDAwXFx4MDAnICsgJ1xceDAwXFx4MDAnICsgJ1xceDAwXFx4MDAnICsgJ1xceDAwXFx4MDAnICsgJ1xceDAwXFx4MDAnICsgc3RyaW5nMTYobnVtR2x5cGhzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hZGRUYWJsZSgnaG10eCcsIGZ1bmN0aW9uIGZvbnRGaWVsZHNIbXR4KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhcnN0cmluZ3MgPSBmb250LmNoYXJzdHJpbmdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2ZmV2lkdGhzID0gZm9udC5jZmYgPyBmb250LmNmZi53aWR0aHMgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaG10eCA9ICdcXHgwMFxceDAwXFx4MDBcXHgwMCc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDEsIGlpID0gbnVtR2x5cGhzOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJzdHJpbmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJzdHJpbmcgPSBjaGFyc3RyaW5nc1tpIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSAnd2lkdGgnIGluIGNoYXJzdHJpbmcgPyBjaGFyc3RyaW5nLndpZHRoIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ZmV2lkdGhzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBNYXRoLmNlaWwoY2ZmV2lkdGhzW2ldIHx8IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBobXR4ICs9IHN0cmluZzE2KHdpZHRoKSArIHN0cmluZzE2KDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhtdHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFkZFRhYmxlKCdtYXhwJywgJ1xceDAwXFx4MDBcXHg1MFxceDAwJyArIHN0cmluZzE2KG51bUdseXBocykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkVGFibGUoJ25hbWUnLCBjcmVhdGVOYW1lVGFibGUoZm9udE5hbWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFkZFRhYmxlKCdwb3N0JywgY3JlYXRlUG9zdFRhYmxlKHByb3BlcnRpZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnVpbGRlci50b0FycmF5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgc3BhY2VXaWR0aCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJ19zaGFkb3dXaWR0aCcgaW4gdGhpcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhZG93V2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvc3NpYmxlU3BhY2VSZXBsYWNlbWVudHMgPSBbJ3NwYWNlJywgJ21pbnVzJywgJ29uZScsICdpJywgJ0knXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBwb3NzaWJsZVNwYWNlUmVwbGFjZW1lbnRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoTmFtZSA9IHBvc3NpYmxlU3BhY2VSZXBsYWNlbWVudHNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdseXBoTmFtZSBpbiB0aGlzLndpZHRocykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSB0aGlzLndpZHRoc1tnbHlwaE5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhzVW5pY29kZU1hcCA9ICgwLCBfZ2x5cGhsaXN0LmdldEdseXBoc1VuaWNvZGUpKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaFVuaWNvZGUgPSBnbHlwaHNVbmljb2RlTWFwW2dseXBoTmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyY29kZSA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29tcG9zaXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jTWFwLmNvbnRhaW5zKGdseXBoVW5pY29kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyY29kZSA9IHRoaXMuY01hcC5sb29rdXAoZ2x5cGhVbmljb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2hhcmNvZGUgJiYgdGhpcy50b1VuaWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJjb2RlID0gdGhpcy50b1VuaWNvZGUuY2hhckNvZGVPZihnbHlwaFVuaWNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJjb2RlIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJjb2RlID0gZ2x5cGhVbmljb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSB0aGlzLndpZHRoc1tjaGFyY29kZV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gd2lkdGggfHwgdGhpcy5kZWZhdWx0V2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hhZG93V2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFyVG9HbHlwaDogZnVuY3Rpb24gRm9udF9jaGFyVG9HbHlwaChjaGFyY29kZSwgaXNTcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250Q2hhckNvZGUsIHdpZHRoLCBvcGVyYXRvckxpc3RJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGhDb2RlID0gY2hhcmNvZGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jTWFwICYmIHRoaXMuY01hcC5jb250YWlucyhjaGFyY29kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhDb2RlID0gdGhpcy5jTWFwLmxvb2t1cChjaGFyY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSB0aGlzLndpZHRoc1t3aWR0aENvZGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gKDAsIF91dGlsLmlzTnVtKSh3aWR0aCkgPyB3aWR0aCA6IHRoaXMuZGVmYXVsdFdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2bWV0cmljID0gdGhpcy52bWV0cmljcyAmJiB0aGlzLnZtZXRyaWNzW3dpZHRoQ29kZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuaWNvZGUgPSB0aGlzLnRvVW5pY29kZS5nZXQoY2hhcmNvZGUpIHx8IHRoaXMuZmFsbGJhY2tUb1VuaWNvZGUuZ2V0KGNoYXJjb2RlKSB8fCBjaGFyY29kZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdW5pY29kZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodW5pY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzSW5Gb250ID0gY2hhcmNvZGUgaW4gdGhpcy50b0ZvbnRDaGFyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRDaGFyQ29kZSA9IHRoaXMudG9Gb250Q2hhcltjaGFyY29kZV0gfHwgY2hhcmNvZGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5taXNzaW5nRmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250Q2hhckNvZGUgPSAoMCwgX3VuaWNvZGUubWFwU3BlY2lhbFVuaWNvZGVWYWx1ZXMpKGZvbnRDaGFyQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNUeXBlM0ZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0SWQgPSBmb250Q2hhckNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFjY2VudCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWFjTWFwICYmIHRoaXMuc2VhY01hcFtjaGFyY29kZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNJbkZvbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VhYyA9IHRoaXMuc2VhY01hcFtjaGFyY29kZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRDaGFyQ29kZSA9IHNlYWMuYmFzZUZvbnRDaGFyQ29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZW50ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udENoYXI6IFN0cmluZy5mcm9tQ29kZVBvaW50KHNlYWMuYWNjZW50Rm9udENoYXJDb2RlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogc2VhYy5hY2NlbnRPZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udENoYXIgPSB0eXBlb2YgZm9udENoYXJDb2RlID09PSAnbnVtYmVyJyA/IFN0cmluZy5mcm9tQ29kZVBvaW50KGZvbnRDaGFyQ29kZSkgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGggPSB0aGlzLmdseXBoQ2FjaGVbY2hhcmNvZGVdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFnbHlwaCB8fCAhZ2x5cGgubWF0Y2hlc0ZvckNhY2hlKGZvbnRDaGFyLCB1bmljb2RlLCBhY2NlbnQsIHdpZHRoLCB2bWV0cmljLCBvcGVyYXRvckxpc3RJZCwgaXNTcGFjZSwgaXNJbkZvbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoID0gbmV3IEdseXBoKGZvbnRDaGFyLCB1bmljb2RlLCBhY2NlbnQsIHdpZHRoLCB2bWV0cmljLCBvcGVyYXRvckxpc3RJZCwgaXNTcGFjZSwgaXNJbkZvbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdseXBoQ2FjaGVbY2hhcmNvZGVdID0gZ2x5cGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdseXBoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzVG9HbHlwaHM6IGZ1bmN0aW9uIEZvbnRfY2hhcnNUb0dseXBocyhjaGFycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyc0NhY2hlID0gdGhpcy5jaGFyc0NhY2hlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaHMsIGdseXBoLCBjaGFyY29kZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFyc0NhY2hlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocyA9IGNoYXJzQ2FjaGVbY2hhcnNdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoYXJzQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNDYWNoZSA9IHRoaXMuY2hhcnNDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJzQ2FjaGVLZXkgPSBjaGFycztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY01hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBjaGFycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY01hcC5yZWFkQ2hhckNvZGUoY2hhcnMsIGksIGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmNvZGUgPSBjLmNoYXJjb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSBsZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNTcGFjZSA9IGxlbmd0aCA9PT0gMSAmJiBjaGFycy5jaGFyQ29kZUF0KGkgLSAxKSA9PT0gMHgyMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoID0gdGhpcy5jaGFyVG9HbHlwaChjaGFyY29kZSwgaXNTcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHMucHVzaChnbHlwaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGNoYXJzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJjb2RlID0gY2hhcnMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoID0gdGhpcy5jaGFyVG9HbHlwaChjaGFyY29kZSwgY2hhcmNvZGUgPT09IDB4MjApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzLnB1c2goZ2x5cGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJzQ2FjaGVbY2hhcnNDYWNoZUtleV0gPSBnbHlwaHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgZ2x5cGhDYWNoZVZhbHVlcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmdseXBoQ2FjaGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBGb250O1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuRm9udCA9IEZvbnQ7XG5cbiAgICAgICAgICAgICAgICB2YXIgRXJyb3JGb250ID0gZnVuY3Rpb24gRXJyb3JGb250Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRXJyb3JGb250KGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZE5hbWUgPSAnZ19mb250X2Vycm9yJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWlzc2luZ0ZpbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgRXJyb3JGb250LnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzVG9HbHlwaHM6IGZ1bmN0aW9uIEVycm9yRm9udF9jaGFyc1RvR2x5cGhzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnREYXRhOiBmdW5jdGlvbiBFcnJvckZvbnRfZXhwb3J0RGF0YSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogdGhpcy5lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFcnJvckZvbnQ7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5FcnJvckZvbnQgPSBFcnJvckZvbnQ7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB0eXBlMUZvbnRHbHlwaE1hcHBpbmcocHJvcGVydGllcywgYnVpbHRJbkVuY29kaW5nLCBnbHlwaE5hbWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGFyQ29kZVRvR2x5cGhJZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaElkLCBjaGFyQ29kZSwgYmFzZUVuY29kaW5nO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXNTeW1ib2xpY0ZvbnQgPSAhIShwcm9wZXJ0aWVzLmZsYWdzICYgRm9udEZsYWdzLlN5bWJvbGljKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5iYXNlRW5jb2RpbmdOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYXNlRW5jb2RpbmcgPSAoMCwgX2VuY29kaW5ncy5nZXRFbmNvZGluZykocHJvcGVydGllcy5iYXNlRW5jb2RpbmdOYW1lKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjaGFyQ29kZSA9IDA7IGNoYXJDb2RlIDwgYmFzZUVuY29kaW5nLmxlbmd0aDsgY2hhckNvZGUrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoSWQgPSBnbHlwaE5hbWVzLmluZGV4T2YoYmFzZUVuY29kaW5nW2NoYXJDb2RlXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGhJZCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGdseXBoSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTeW1ib2xpY0ZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY2hhckNvZGUgaW4gYnVpbHRJbkVuY29kaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gYnVpbHRJbkVuY29kaW5nW2NoYXJDb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VFbmNvZGluZyA9IF9lbmNvZGluZ3MuU3RhbmRhcmRFbmNvZGluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjaGFyQ29kZSA9IDA7IGNoYXJDb2RlIDwgYmFzZUVuY29kaW5nLmxlbmd0aDsgY2hhckNvZGUrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoSWQgPSBnbHlwaE5hbWVzLmluZGV4T2YoYmFzZUVuY29kaW5nW2NoYXJDb2RlXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGhJZCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGdseXBoSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgZGlmZmVyZW5jZXMgPSBwcm9wZXJ0aWVzLmRpZmZlcmVuY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzVW5pY29kZU1hcDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZGlmZmVyZW5jZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY2hhckNvZGUgaW4gZGlmZmVyZW5jZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhOYW1lID0gZGlmZmVyZW5jZXNbY2hhckNvZGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoSWQgPSBnbHlwaE5hbWVzLmluZGV4T2YoZ2x5cGhOYW1lKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaElkID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWdseXBoc1VuaWNvZGVNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoc1VuaWNvZGVNYXAgPSAoMCwgX2dseXBobGlzdC5nZXRHbHlwaHNVbmljb2RlKSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YW5kYXJkR2x5cGhOYW1lID0gcmVjb3ZlckdseXBoTmFtZShnbHlwaE5hbWUsIGdseXBoc1VuaWNvZGVNYXApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFuZGFyZEdseXBoTmFtZSAhPT0gZ2x5cGhOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaElkID0gZ2x5cGhOYW1lcy5pbmRleE9mKHN0YW5kYXJkR2x5cGhOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaElkID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gZ2x5cGhJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGFyQ29kZVRvR2x5cGhJZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgVHlwZTFGb250ID0gZnVuY3Rpb24gVHlwZTFGb250Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZmluZEJsb2NrKHN0cmVhbUJ5dGVzLCBzaWduYXR1cmUsIHN0YXJ0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW1CeXRlc0xlbmd0aCA9IHN0cmVhbUJ5dGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaWduYXR1cmVMZW5ndGggPSBzaWduYXR1cmUubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYW5MZW5ndGggPSBzdHJlYW1CeXRlc0xlbmd0aCAtIHNpZ25hdHVyZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgc2Nhbkxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGogPCBzaWduYXR1cmVMZW5ndGggJiYgc3RyZWFtQnl0ZXNbaSArIGpdID09PSBzaWduYXR1cmVbal0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqID49IHNpZ25hdHVyZUxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IGo7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBzdHJlYW1CeXRlc0xlbmd0aCAmJiAoMCwgX3V0aWwuaXNTcGFjZSkoc3RyZWFtQnl0ZXNbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZDogZm91bmQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBpXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0SGVhZGVyQmxvY2soc3RyZWFtLCBzdWdnZXN0ZWRMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBFRVhFQ19TSUdOQVRVUkUgPSBbMHg2NSwgMHg2NSwgMHg3OCwgMHg2NSwgMHg2M107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtU3RhcnRQb3MgPSBzdHJlYW0ucG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlckJ5dGVzLCBoZWFkZXJCeXRlc0xlbmd0aCwgYmxvY2s7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyQnl0ZXMgPSBzdHJlYW0uZ2V0Qnl0ZXMoc3VnZ2VzdGVkTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJCeXRlc0xlbmd0aCA9IGhlYWRlckJ5dGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX3V0aWwuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVhZGVyQnl0ZXNMZW5ndGggPT09IHN1Z2dlc3RlZExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrID0gZmluZEJsb2NrKGhlYWRlckJ5dGVzLCBFRVhFQ19TSUdOQVRVUkUsIHN1Z2dlc3RlZExlbmd0aCAtIDIgKiBFRVhFQ19TSUdOQVRVUkUubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay5mb3VuZCAmJiBibG9jay5sZW5ndGggPT09IHN1Z2dlc3RlZExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiBuZXcgX3N0cmVhbS5TdHJlYW0oaGVhZGVyQnl0ZXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBzdWdnZXN0ZWRMZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnSW52YWxpZCBcIkxlbmd0aDFcIiBwcm9wZXJ0eSBpbiBUeXBlMSBmb250IC0tIHRyeWluZyB0byByZWNvdmVyLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnBvcyA9IHN0cmVhbVN0YXJ0UG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFNDQU5fQkxPQ0tfTEVOR1RIID0gMjA0ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhY3R1YWxMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYW5CeXRlcyA9IHN0cmVhbS5wZWVrQnl0ZXMoU0NBTl9CTE9DS19MRU5HVEgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrID0gZmluZEJsb2NrKHNjYW5CeXRlcywgRUVYRUNfU0lHTkFUVVJFLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnBvcyArPSBibG9jay5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2suZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsTGVuZ3RoID0gc3RyZWFtLnBvcyAtIHN0cmVhbVN0YXJ0UG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5wb3MgPSBzdHJlYW1TdGFydFBvcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdHVhbExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogbmV3IF9zdHJlYW0uU3RyZWFtKHN0cmVhbS5nZXRCeXRlcyhhY3R1YWxMZW5ndGgpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBhY3R1YWxMZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1VuYWJsZSB0byByZWNvdmVyIFwiTGVuZ3RoMVwiIHByb3BlcnR5IGluIFR5cGUxIGZvbnQgLS0gdXNpbmcgYXMgaXMuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogbmV3IF9zdHJlYW0uU3RyZWFtKHN0cmVhbS5nZXRCeXRlcyhzdWdnZXN0ZWRMZW5ndGgpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg6IHN1Z2dlc3RlZExlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldEVleGVjQmxvY2soc3RyZWFtLCBzdWdnZXN0ZWRMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlZXhlY0J5dGVzID0gc3RyZWFtLmdldEJ5dGVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogbmV3IF9zdHJlYW0uU3RyZWFtKGVleGVjQnl0ZXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDogZWV4ZWNCeXRlcy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUeXBlMUZvbnQobmFtZSwgZmlsZSwgcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFBGQl9IRUFERVJfU0laRSA9IDY7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGVyQmxvY2tMZW5ndGggPSBwcm9wZXJ0aWVzLmxlbmd0aDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWV4ZWNCbG9ja0xlbmd0aCA9IHByb3BlcnRpZXMubGVuZ3RoMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwZmJIZWFkZXIgPSBmaWxlLnBlZWtCeXRlcyhQRkJfSEVBREVSX1NJWkUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBmYkhlYWRlclByZXNlbnQgPSBwZmJIZWFkZXJbMF0gPT09IDB4ODAgJiYgcGZiSGVhZGVyWzFdID09PSAweDAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGZiSGVhZGVyUHJlc2VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUuc2tpcChQRkJfSEVBREVSX1NJWkUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlckJsb2NrTGVuZ3RoID0gcGZiSGVhZGVyWzVdIDw8IDI0IHwgcGZiSGVhZGVyWzRdIDw8IDE2IHwgcGZiSGVhZGVyWzNdIDw8IDggfCBwZmJIZWFkZXJbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWFkZXJCbG9jayA9IGdldEhlYWRlckJsb2NrKGZpbGUsIGhlYWRlckJsb2NrTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWFkZXJCbG9ja1BhcnNlciA9IG5ldyBfdHlwZTFfcGFyc2VyLlR5cGUxUGFyc2VyKGhlYWRlckJsb2NrLnN0cmVhbSwgZmFsc2UsIFNFQUNfQU5BTFlTSVNfRU5BQkxFRCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJCbG9ja1BhcnNlci5leHRyYWN0Rm9udEhlYWRlcihwcm9wZXJ0aWVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBmYkhlYWRlclByZXNlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZmJIZWFkZXIgPSBmaWxlLmdldEJ5dGVzKFBGQl9IRUFERVJfU0laRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWV4ZWNCbG9ja0xlbmd0aCA9IHBmYkhlYWRlcls1XSA8PCAyNCB8IHBmYkhlYWRlcls0XSA8PCAxNiB8IHBmYkhlYWRlclszXSA8PCA4IHwgcGZiSGVhZGVyWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWV4ZWNCbG9jayA9IGdldEVleGVjQmxvY2soZmlsZSwgZWV4ZWNCbG9ja0xlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWV4ZWNCbG9ja1BhcnNlciA9IG5ldyBfdHlwZTFfcGFyc2VyLlR5cGUxUGFyc2VyKGVleGVjQmxvY2suc3RyZWFtLCB0cnVlLCBTRUFDX0FOQUxZU0lTX0VOQUJMRUQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBlZXhlY0Jsb2NrUGFyc2VyLmV4dHJhY3RGb250UHJvZ3JhbSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmZvIGluIGRhdGEucHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNbaW5mb10gPSBkYXRhLnByb3BlcnRpZXNbaW5mb107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyc3RyaW5ncyA9IGRhdGEuY2hhcnN0cmluZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZTJDaGFyc3RyaW5ncyA9IHRoaXMuZ2V0VHlwZTJDaGFyc3RyaW5ncyhjaGFyc3RyaW5ncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VicnMgPSB0aGlzLmdldFR5cGUyU3VicnMoZGF0YS5zdWJycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJzdHJpbmdzID0gY2hhcnN0cmluZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLndyYXAobmFtZSwgdHlwZTJDaGFyc3RyaW5ncywgdGhpcy5jaGFyc3RyaW5ncywgc3VicnMsIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFjcyA9IHRoaXMuZ2V0U2VhY3MoZGF0YS5jaGFyc3RyaW5ncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBUeXBlMUZvbnQucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IG51bUdseXBocygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jaGFyc3RyaW5ncy5sZW5ndGggKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q2hhcnNldDogZnVuY3Rpb24gVHlwZTFGb250X2dldENoYXJzZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJzZXQgPSBbJy5ub3RkZWYnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhcnN0cmluZ3MgPSB0aGlzLmNoYXJzdHJpbmdzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgZ2x5cGhJZCA9IDA7IGdseXBoSWQgPCBjaGFyc3RyaW5ncy5sZW5ndGg7IGdseXBoSWQrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0LnB1c2goY2hhcnN0cmluZ3NbZ2x5cGhJZF0uZ2x5cGhOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hhcnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRHbHlwaE1hcHBpbmc6IGZ1bmN0aW9uIFR5cGUxRm9udF9nZXRHbHlwaE1hcHBpbmcocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyc3RyaW5ncyA9IHRoaXMuY2hhcnN0cmluZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoTmFtZXMgPSBbJy5ub3RkZWYnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhJZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZ2x5cGhJZCA9IDA7IGdseXBoSWQgPCBjaGFyc3RyaW5ncy5sZW5ndGg7IGdseXBoSWQrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE5hbWVzLnB1c2goY2hhcnN0cmluZ3NbZ2x5cGhJZF0uZ2x5cGhOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jb2RpbmcgPSBwcm9wZXJ0aWVzLmJ1aWx0SW5FbmNvZGluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmNvZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVpbHRJbkVuY29kaW5nID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjaGFyQ29kZSBpbiBlbmNvZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhJZCA9IGdseXBoTmFtZXMuaW5kZXhPZihlbmNvZGluZ1tjaGFyQ29kZV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGhJZCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbHRJbkVuY29kaW5nW2NoYXJDb2RlXSA9IGdseXBoSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZTFGb250R2x5cGhNYXBwaW5nKHByb3BlcnRpZXMsIGJ1aWx0SW5FbmNvZGluZywgZ2x5cGhOYW1lcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzR2x5cGhJZDogZnVuY3Rpb24gVHlwZTFGb250X2hhc0dseXBoSUQoaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWQgPCAwIHx8IGlkID49IHRoaXMubnVtR2x5cGhzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoID0gdGhpcy5jaGFyc3RyaW5nc1tpZCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaC5jaGFyc3RyaW5nLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U2VhY3M6IGZ1bmN0aW9uIFR5cGUxRm9udF9nZXRTZWFjcyhjaGFyc3RyaW5ncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBpaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VhY01hcCA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBjaGFyc3RyaW5ncy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyc3RyaW5nID0gY2hhcnN0cmluZ3NbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJzdHJpbmcuc2VhYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhY01hcFtpICsgMV0gPSBjaGFyc3RyaW5nLnNlYWM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VhY01hcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRUeXBlMkNoYXJzdHJpbmdzOiBmdW5jdGlvbiBUeXBlMUZvbnRfZ2V0VHlwZTJDaGFyc3RyaW5ncyh0eXBlMUNoYXJzdHJpbmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUyQ2hhcnN0cmluZ3MgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHR5cGUxQ2hhcnN0cmluZ3MubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlMkNoYXJzdHJpbmdzLnB1c2godHlwZTFDaGFyc3RyaW5nc1tpXS5jaGFyc3RyaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZTJDaGFyc3RyaW5ncztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRUeXBlMlN1YnJzOiBmdW5jdGlvbiBUeXBlMUZvbnRfZ2V0VHlwZTJTdWJycyh0eXBlMVN1YnJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpYXMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IHR5cGUxU3VicnMubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50IDwgMTEzMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWFzID0gMTA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY291bnQgPCAzMzc2OSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWFzID0gMTEzMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWFzID0gMzI3Njg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUyU3VicnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBiaWFzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTJTdWJycy5wdXNoKFsweDBCXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTJTdWJycy5wdXNoKHR5cGUxU3VicnNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlMlN1YnJzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyYXA6IGZ1bmN0aW9uIFR5cGUxRm9udF93cmFwKG5hbWUsIGdseXBocywgY2hhcnN0cmluZ3MsIHN1YnJzLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNmZiA9IG5ldyBfY2ZmX3BhcnNlci5DRkYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYuaGVhZGVyID0gbmV3IF9jZmZfcGFyc2VyLkNGRkhlYWRlcigxLCAwLCA0LCA0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYubmFtZXMgPSBbbmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRvcERpY3QgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGVG9wRGljdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcERpY3Quc2V0QnlOYW1lKCd2ZXJzaW9uJywgMzkxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BEaWN0LnNldEJ5TmFtZSgnTm90aWNlJywgMzkyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BEaWN0LnNldEJ5TmFtZSgnRnVsbE5hbWUnLCAzOTMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcERpY3Quc2V0QnlOYW1lKCdGYW1pbHlOYW1lJywgMzk0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BEaWN0LnNldEJ5TmFtZSgnV2VpZ2h0JywgMzk1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BEaWN0LnNldEJ5TmFtZSgnRW5jb2RpbmcnLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BEaWN0LnNldEJ5TmFtZSgnRm9udE1hdHJpeCcsIHByb3BlcnRpZXMuZm9udE1hdHJpeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wRGljdC5zZXRCeU5hbWUoJ0ZvbnRCQm94JywgcHJvcGVydGllcy5iYm94KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BEaWN0LnNldEJ5TmFtZSgnY2hhcnNldCcsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcERpY3Quc2V0QnlOYW1lKCdDaGFyU3RyaW5ncycsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcERpY3Quc2V0QnlOYW1lKCdQcml2YXRlJywgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZmLnRvcERpY3QgPSB0b3BEaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJpbmdzID0gbmV3IF9jZmZfcGFyc2VyLkNGRlN0cmluZ3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzLmFkZCgnVmVyc2lvbiAwLjExJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5ncy5hZGQoJ1NlZSBvcmlnaW5hbCBub3RpY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzLmFkZChuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzLmFkZChuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzLmFkZCgnTWVkaXVtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZmLnN0cmluZ3MgPSBzdHJpbmdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZi5nbG9iYWxTdWJySW5kZXggPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGSW5kZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBnbHlwaHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyc2V0QXJyYXkgPSBbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIGlpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gX2NmZl9wYXJzZXIuQ0ZGU3RhbmRhcmRTdHJpbmdzLmluZGV4T2YoY2hhcnN0cmluZ3NbaV0uZ2x5cGhOYW1lKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0QXJyYXkucHVzaChpbmRleCA+PiA4ICYgMHhmZiwgaW5kZXggJiAweGZmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYuY2hhcnNldCA9IG5ldyBfY2ZmX3BhcnNlci5DRkZDaGFyc2V0KGZhbHNlLCAwLCBbXSwgY2hhcnNldEFycmF5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhclN0cmluZ3NJbmRleCA9IG5ldyBfY2ZmX3BhcnNlci5DRkZJbmRleCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJTdHJpbmdzSW5kZXguYWRkKFsweDhCLCAweDBFXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyU3RyaW5nc0luZGV4LmFkZChnbHlwaHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZi5jaGFyU3RyaW5ncyA9IGNoYXJTdHJpbmdzSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByaXZhdGVEaWN0ID0gbmV3IF9jZmZfcGFyc2VyLkNGRlByaXZhdGVEaWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZURpY3Quc2V0QnlOYW1lKCdTdWJycycsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZHMgPSBbJ0JsdWVWYWx1ZXMnLCAnT3RoZXJCbHVlcycsICdGYW1pbHlCbHVlcycsICdGYW1pbHlPdGhlckJsdWVzJywgJ1N0ZW1TbmFwSCcsICdTdGVtU25hcFYnLCAnQmx1ZVNoaWZ0JywgJ0JsdWVGdXp6JywgJ0JsdWVTY2FsZScsICdMYW5ndWFnZUdyb3VwJywgJ0V4cGFuc2lvbkZhY3RvcicsICdGb3JjZUJvbGQnLCAnU3RkSFcnLCAnU3RkVlcnXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gZmllbGRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkID0gZmllbGRzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGZpZWxkIGluIHByb3BlcnRpZXMucHJpdmF0ZURhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHByb3BlcnRpZXMucHJpdmF0ZURhdGFbZmllbGRdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IHZhbHVlLmxlbmd0aCAtIDE7IGogPiAwOyBqLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtqXSAtPSB2YWx1ZVtqIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlRGljdC5zZXRCeU5hbWUoZmllbGQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYudG9wRGljdC5wcml2YXRlRGljdCA9IHByaXZhdGVEaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJySW5kZXggPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGSW5kZXgoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gc3VicnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJySW5kZXguYWRkKHN1YnJzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlRGljdC5zdWJyc0luZGV4ID0gc3VickluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21waWxlciA9IG5ldyBfY2ZmX3BhcnNlci5DRkZDb21waWxlcihjZmYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21waWxlci5jb21waWxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlMUZvbnQ7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIENGRkZvbnQgPSBmdW5jdGlvbiBDRkZGb250Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQ0ZGRm9udChmaWxlLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBfY2ZmX3BhcnNlci5DRkZQYXJzZXIoZmlsZSwgcHJvcGVydGllcywgU0VBQ19BTkFMWVNJU19FTkFCTEVEKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2ZmID0gcGFyc2VyLnBhcnNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNmZi5kdXBsaWNhdGVGaXJzdEdseXBoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcGlsZXIgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGQ29tcGlsZXIodGhpcy5jZmYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFjcyA9IHRoaXMuY2ZmLnNlYWNzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGNvbXBpbGVyLmNvbXBpbGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0ZhaWxlZCB0byBjb21waWxlIGZvbnQgJyArIHByb3BlcnRpZXMubG9hZGVkTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZmlsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENGRkZvbnQucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IG51bUdseXBocygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jZmYuY2hhclN0cmluZ3MuY291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRDaGFyc2V0OiBmdW5jdGlvbiBDRkZGb250X2dldENoYXJzZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2ZmLmNoYXJzZXQuY2hhcnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRHbHlwaE1hcHBpbmc6IGZ1bmN0aW9uIENGRkZvbnRfZ2V0R2x5cGhNYXBwaW5nKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZmYgPSB0aGlzLmNmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMucHJvcGVydGllcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhcnNldHMgPSBjZmYuY2hhcnNldC5jaGFyc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyQ29kZVRvR2x5cGhJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhJZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmNvbXBvc2l0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNmZi5pc0NJREZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZ2x5cGhJZCA9IDA7IGdseXBoSWQgPCBjaGFyc2V0cy5sZW5ndGg7IGdseXBoSWQrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaWQgPSBjaGFyc2V0c1tnbHlwaElkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhckNvZGUgPSBwcm9wZXJ0aWVzLmNNYXAuY2hhckNvZGVPZihjaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGdseXBoSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGdseXBoSWQgPSAwOyBnbHlwaElkIDwgY2ZmLmNoYXJTdHJpbmdzLmNvdW50OyBnbHlwaElkKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtnbHlwaElkXSA9IGdseXBoSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hhckNvZGVUb0dseXBoSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY29kaW5nID0gY2ZmLmVuY29kaW5nID8gY2ZmLmVuY29kaW5nLmVuY29kaW5nIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZCA9IHR5cGUxRm9udEdseXBoTWFwcGluZyhwcm9wZXJ0aWVzLCBlbmNvZGluZywgY2hhcnNldHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGFyQ29kZVRvR2x5cGhJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNHbHlwaElkOiBmdW5jdGlvbiBDRkZGb250X2hhc0dseXBoSUQoaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jZmYuaGFzR2x5cGhJZChpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBDRkZGb250O1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTc0ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5DRkZGRFNlbGVjdCA9IGV4cG9ydHMuQ0ZGQ29tcGlsZXIgPSBleHBvcnRzLkNGRlByaXZhdGVEaWN0ID0gZXhwb3J0cy5DRkZUb3BEaWN0ID0gZXhwb3J0cy5DRkZDaGFyc2V0ID0gZXhwb3J0cy5DRkZJbmRleCA9IGV4cG9ydHMuQ0ZGU3RyaW5ncyA9IGV4cG9ydHMuQ0ZGSGVhZGVyID0gZXhwb3J0cy5DRkYgPSBleHBvcnRzLkNGRlBhcnNlciA9IGV4cG9ydHMuQ0ZGU3RhbmRhcmRTdHJpbmdzID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2KTtcblxuICAgICAgICAgICAgICAgIHZhciBfY2hhcnNldHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE3NSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2VuY29kaW5ncyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTc2KTtcblxuICAgICAgICAgICAgICAgIHZhciBNQVhfU1VCUl9ORVNUSU5HID0gMTA7XG4gICAgICAgICAgICAgICAgdmFyIENGRlN0YW5kYXJkU3RyaW5ncyA9IFsnLm5vdGRlZicsICdzcGFjZScsICdleGNsYW0nLCAncXVvdGVkYmwnLCAnbnVtYmVyc2lnbicsICdkb2xsYXInLCAncGVyY2VudCcsICdhbXBlcnNhbmQnLCAncXVvdGVyaWdodCcsICdwYXJlbmxlZnQnLCAncGFyZW5yaWdodCcsICdhc3RlcmlzaycsICdwbHVzJywgJ2NvbW1hJywgJ2h5cGhlbicsICdwZXJpb2QnLCAnc2xhc2gnLCAnemVybycsICdvbmUnLCAndHdvJywgJ3RocmVlJywgJ2ZvdXInLCAnZml2ZScsICdzaXgnLCAnc2V2ZW4nLCAnZWlnaHQnLCAnbmluZScsICdjb2xvbicsICdzZW1pY29sb24nLCAnbGVzcycsICdlcXVhbCcsICdncmVhdGVyJywgJ3F1ZXN0aW9uJywgJ2F0JywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJywgJ0cnLCAnSCcsICdJJywgJ0onLCAnSycsICdMJywgJ00nLCAnTicsICdPJywgJ1AnLCAnUScsICdSJywgJ1MnLCAnVCcsICdVJywgJ1YnLCAnVycsICdYJywgJ1knLCAnWicsICdicmFja2V0bGVmdCcsICdiYWNrc2xhc2gnLCAnYnJhY2tldHJpZ2h0JywgJ2FzY2lpY2lyY3VtJywgJ3VuZGVyc2NvcmUnLCAncXVvdGVsZWZ0JywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ2cnLCAnaCcsICdpJywgJ2onLCAnaycsICdsJywgJ20nLCAnbicsICdvJywgJ3AnLCAncScsICdyJywgJ3MnLCAndCcsICd1JywgJ3YnLCAndycsICd4JywgJ3knLCAneicsICdicmFjZWxlZnQnLCAnYmFyJywgJ2JyYWNlcmlnaHQnLCAnYXNjaWl0aWxkZScsICdleGNsYW1kb3duJywgJ2NlbnQnLCAnc3RlcmxpbmcnLCAnZnJhY3Rpb24nLCAneWVuJywgJ2Zsb3JpbicsICdzZWN0aW9uJywgJ2N1cnJlbmN5JywgJ3F1b3Rlc2luZ2xlJywgJ3F1b3RlZGJsbGVmdCcsICdndWlsbGVtb3RsZWZ0JywgJ2d1aWxzaW5nbGxlZnQnLCAnZ3VpbHNpbmdscmlnaHQnLCAnZmknLCAnZmwnLCAnZW5kYXNoJywgJ2RhZ2dlcicsICdkYWdnZXJkYmwnLCAncGVyaW9kY2VudGVyZWQnLCAncGFyYWdyYXBoJywgJ2J1bGxldCcsICdxdW90ZXNpbmdsYmFzZScsICdxdW90ZWRibGJhc2UnLCAncXVvdGVkYmxyaWdodCcsICdndWlsbGVtb3RyaWdodCcsICdlbGxpcHNpcycsICdwZXJ0aG91c2FuZCcsICdxdWVzdGlvbmRvd24nLCAnZ3JhdmUnLCAnYWN1dGUnLCAnY2lyY3VtZmxleCcsICd0aWxkZScsICdtYWNyb24nLCAnYnJldmUnLCAnZG90YWNjZW50JywgJ2RpZXJlc2lzJywgJ3JpbmcnLCAnY2VkaWxsYScsICdodW5nYXJ1bWxhdXQnLCAnb2dvbmVrJywgJ2Nhcm9uJywgJ2VtZGFzaCcsICdBRScsICdvcmRmZW1pbmluZScsICdMc2xhc2gnLCAnT3NsYXNoJywgJ09FJywgJ29yZG1hc2N1bGluZScsICdhZScsICdkb3RsZXNzaScsICdsc2xhc2gnLCAnb3NsYXNoJywgJ29lJywgJ2dlcm1hbmRibHMnLCAnb25lc3VwZXJpb3InLCAnbG9naWNhbG5vdCcsICdtdScsICd0cmFkZW1hcmsnLCAnRXRoJywgJ29uZWhhbGYnLCAncGx1c21pbnVzJywgJ1Rob3JuJywgJ29uZXF1YXJ0ZXInLCAnZGl2aWRlJywgJ2Jyb2tlbmJhcicsICdkZWdyZWUnLCAndGhvcm4nLCAndGhyZWVxdWFydGVycycsICd0d29zdXBlcmlvcicsICdyZWdpc3RlcmVkJywgJ21pbnVzJywgJ2V0aCcsICdtdWx0aXBseScsICd0aHJlZXN1cGVyaW9yJywgJ2NvcHlyaWdodCcsICdBYWN1dGUnLCAnQWNpcmN1bWZsZXgnLCAnQWRpZXJlc2lzJywgJ0FncmF2ZScsICdBcmluZycsICdBdGlsZGUnLCAnQ2NlZGlsbGEnLCAnRWFjdXRlJywgJ0VjaXJjdW1mbGV4JywgJ0VkaWVyZXNpcycsICdFZ3JhdmUnLCAnSWFjdXRlJywgJ0ljaXJjdW1mbGV4JywgJ0lkaWVyZXNpcycsICdJZ3JhdmUnLCAnTnRpbGRlJywgJ09hY3V0ZScsICdPY2lyY3VtZmxleCcsICdPZGllcmVzaXMnLCAnT2dyYXZlJywgJ090aWxkZScsICdTY2Fyb24nLCAnVWFjdXRlJywgJ1VjaXJjdW1mbGV4JywgJ1VkaWVyZXNpcycsICdVZ3JhdmUnLCAnWWFjdXRlJywgJ1lkaWVyZXNpcycsICdaY2Fyb24nLCAnYWFjdXRlJywgJ2FjaXJjdW1mbGV4JywgJ2FkaWVyZXNpcycsICdhZ3JhdmUnLCAnYXJpbmcnLCAnYXRpbGRlJywgJ2NjZWRpbGxhJywgJ2VhY3V0ZScsICdlY2lyY3VtZmxleCcsICdlZGllcmVzaXMnLCAnZWdyYXZlJywgJ2lhY3V0ZScsICdpY2lyY3VtZmxleCcsICdpZGllcmVzaXMnLCAnaWdyYXZlJywgJ250aWxkZScsICdvYWN1dGUnLCAnb2NpcmN1bWZsZXgnLCAnb2RpZXJlc2lzJywgJ29ncmF2ZScsICdvdGlsZGUnLCAnc2Nhcm9uJywgJ3VhY3V0ZScsICd1Y2lyY3VtZmxleCcsICd1ZGllcmVzaXMnLCAndWdyYXZlJywgJ3lhY3V0ZScsICd5ZGllcmVzaXMnLCAnemNhcm9uJywgJ2V4Y2xhbXNtYWxsJywgJ0h1bmdhcnVtbGF1dHNtYWxsJywgJ2RvbGxhcm9sZHN0eWxlJywgJ2RvbGxhcnN1cGVyaW9yJywgJ2FtcGVyc2FuZHNtYWxsJywgJ0FjdXRlc21hbGwnLCAncGFyZW5sZWZ0c3VwZXJpb3InLCAncGFyZW5yaWdodHN1cGVyaW9yJywgJ3R3b2RvdGVubGVhZGVyJywgJ29uZWRvdGVubGVhZGVyJywgJ3plcm9vbGRzdHlsZScsICdvbmVvbGRzdHlsZScsICd0d29vbGRzdHlsZScsICd0aHJlZW9sZHN0eWxlJywgJ2ZvdXJvbGRzdHlsZScsICdmaXZlb2xkc3R5bGUnLCAnc2l4b2xkc3R5bGUnLCAnc2V2ZW5vbGRzdHlsZScsICdlaWdodG9sZHN0eWxlJywgJ25pbmVvbGRzdHlsZScsICdjb21tYXN1cGVyaW9yJywgJ3RocmVlcXVhcnRlcnNlbWRhc2gnLCAncGVyaW9kc3VwZXJpb3InLCAncXVlc3Rpb25zbWFsbCcsICdhc3VwZXJpb3InLCAnYnN1cGVyaW9yJywgJ2NlbnRzdXBlcmlvcicsICdkc3VwZXJpb3InLCAnZXN1cGVyaW9yJywgJ2lzdXBlcmlvcicsICdsc3VwZXJpb3InLCAnbXN1cGVyaW9yJywgJ25zdXBlcmlvcicsICdvc3VwZXJpb3InLCAncnN1cGVyaW9yJywgJ3NzdXBlcmlvcicsICd0c3VwZXJpb3InLCAnZmYnLCAnZmZpJywgJ2ZmbCcsICdwYXJlbmxlZnRpbmZlcmlvcicsICdwYXJlbnJpZ2h0aW5mZXJpb3InLCAnQ2lyY3VtZmxleHNtYWxsJywgJ2h5cGhlbnN1cGVyaW9yJywgJ0dyYXZlc21hbGwnLCAnQXNtYWxsJywgJ0JzbWFsbCcsICdDc21hbGwnLCAnRHNtYWxsJywgJ0VzbWFsbCcsICdGc21hbGwnLCAnR3NtYWxsJywgJ0hzbWFsbCcsICdJc21hbGwnLCAnSnNtYWxsJywgJ0tzbWFsbCcsICdMc21hbGwnLCAnTXNtYWxsJywgJ05zbWFsbCcsICdPc21hbGwnLCAnUHNtYWxsJywgJ1FzbWFsbCcsICdSc21hbGwnLCAnU3NtYWxsJywgJ1RzbWFsbCcsICdVc21hbGwnLCAnVnNtYWxsJywgJ1dzbWFsbCcsICdYc21hbGwnLCAnWXNtYWxsJywgJ1pzbWFsbCcsICdjb2xvbm1vbmV0YXJ5JywgJ29uZWZpdHRlZCcsICdydXBpYWgnLCAnVGlsZGVzbWFsbCcsICdleGNsYW1kb3duc21hbGwnLCAnY2VudG9sZHN0eWxlJywgJ0xzbGFzaHNtYWxsJywgJ1NjYXJvbnNtYWxsJywgJ1pjYXJvbnNtYWxsJywgJ0RpZXJlc2lzc21hbGwnLCAnQnJldmVzbWFsbCcsICdDYXJvbnNtYWxsJywgJ0RvdGFjY2VudHNtYWxsJywgJ01hY3JvbnNtYWxsJywgJ2ZpZ3VyZWRhc2gnLCAnaHlwaGVuaW5mZXJpb3InLCAnT2dvbmVrc21hbGwnLCAnUmluZ3NtYWxsJywgJ0NlZGlsbGFzbWFsbCcsICdxdWVzdGlvbmRvd25zbWFsbCcsICdvbmVlaWdodGgnLCAndGhyZWVlaWdodGhzJywgJ2ZpdmVlaWdodGhzJywgJ3NldmVuZWlnaHRocycsICdvbmV0aGlyZCcsICd0d290aGlyZHMnLCAnemVyb3N1cGVyaW9yJywgJ2ZvdXJzdXBlcmlvcicsICdmaXZlc3VwZXJpb3InLCAnc2l4c3VwZXJpb3InLCAnc2V2ZW5zdXBlcmlvcicsICdlaWdodHN1cGVyaW9yJywgJ25pbmVzdXBlcmlvcicsICd6ZXJvaW5mZXJpb3InLCAnb25laW5mZXJpb3InLCAndHdvaW5mZXJpb3InLCAndGhyZWVpbmZlcmlvcicsICdmb3VyaW5mZXJpb3InLCAnZml2ZWluZmVyaW9yJywgJ3NpeGluZmVyaW9yJywgJ3NldmVuaW5mZXJpb3InLCAnZWlnaHRpbmZlcmlvcicsICduaW5laW5mZXJpb3InLCAnY2VudGluZmVyaW9yJywgJ2RvbGxhcmluZmVyaW9yJywgJ3BlcmlvZGluZmVyaW9yJywgJ2NvbW1haW5mZXJpb3InLCAnQWdyYXZlc21hbGwnLCAnQWFjdXRlc21hbGwnLCAnQWNpcmN1bWZsZXhzbWFsbCcsICdBdGlsZGVzbWFsbCcsICdBZGllcmVzaXNzbWFsbCcsICdBcmluZ3NtYWxsJywgJ0FFc21hbGwnLCAnQ2NlZGlsbGFzbWFsbCcsICdFZ3JhdmVzbWFsbCcsICdFYWN1dGVzbWFsbCcsICdFY2lyY3VtZmxleHNtYWxsJywgJ0VkaWVyZXNpc3NtYWxsJywgJ0lncmF2ZXNtYWxsJywgJ0lhY3V0ZXNtYWxsJywgJ0ljaXJjdW1mbGV4c21hbGwnLCAnSWRpZXJlc2lzc21hbGwnLCAnRXRoc21hbGwnLCAnTnRpbGRlc21hbGwnLCAnT2dyYXZlc21hbGwnLCAnT2FjdXRlc21hbGwnLCAnT2NpcmN1bWZsZXhzbWFsbCcsICdPdGlsZGVzbWFsbCcsICdPZGllcmVzaXNzbWFsbCcsICdPRXNtYWxsJywgJ09zbGFzaHNtYWxsJywgJ1VncmF2ZXNtYWxsJywgJ1VhY3V0ZXNtYWxsJywgJ1VjaXJjdW1mbGV4c21hbGwnLCAnVWRpZXJlc2lzc21hbGwnLCAnWWFjdXRlc21hbGwnLCAnVGhvcm5zbWFsbCcsICdZZGllcmVzaXNzbWFsbCcsICcwMDEuMDAwJywgJzAwMS4wMDEnLCAnMDAxLjAwMicsICcwMDEuMDAzJywgJ0JsYWNrJywgJ0JvbGQnLCAnQm9vaycsICdMaWdodCcsICdNZWRpdW0nLCAnUmVndWxhcicsICdSb21hbicsICdTZW1pYm9sZCddO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ0ZGU3RhbmRhcmRTdHJpbmdzID0gQ0ZGU3RhbmRhcmRTdHJpbmdzO1xuXG4gICAgICAgICAgICAgICAgdmFyIENGRlBhcnNlciA9IGZ1bmN0aW9uIENGRlBhcnNlckNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBDaGFyc3RyaW5nVmFsaWRhdGlvbkRhdGEgPSBbbnVsbCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdoc3RlbScsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0NsZWFyaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RlbTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ3ZzdGVtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQ2xlYXJpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVtOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAndm1vdmV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0NsZWFyaW5nOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAncmxpbmV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldFN0YWNrOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnaGxpbmV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldFN0YWNrOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAndmxpbmV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldFN0YWNrOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAncnJjdXJ2ZXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogNixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSwgbnVsbCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdjYWxsc3VicicsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRlZlN0YWNrOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAncmV0dXJuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmU3RhY2s6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSwgbnVsbCwgbnVsbCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdlbmRjaGFyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQ2xlYXJpbmc6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSwgbnVsbCwgbnVsbCwgbnVsbCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdoc3RlbWhtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQ2xlYXJpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVtOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnaGludG1hc2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tDbGVhcmluZzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ2NudHJtYXNrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQ2xlYXJpbmc6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdybW92ZXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQ2xlYXJpbmc6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdobW92ZXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQ2xlYXJpbmc6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICd2c3RlbWhtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQ2xlYXJpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVtOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAncmN1cnZlbGluZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDgsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldFN0YWNrOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAncmxpbmVjdXJ2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDgsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldFN0YWNrOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAndnZjdXJ2ZXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdoaGN1cnZldG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRTdGFjazogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ2NhbGxnc3VicicsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRlZlN0YWNrOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAndmhjdXJ2ZXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdodmN1cnZldG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRTdGFjazogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIENoYXJzdHJpbmdWYWxpZGF0aW9uRGF0YTEyID0gW251bGwsIG51bGwsIG51bGwsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnYW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrRGVsdGE6IC0xXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tEZWx0YTogLTFcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdub3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tEZWx0YTogMFxuICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCBudWxsLCBudWxsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ2FicycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0RlbHRhOiAwXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnYWRkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrRGVsdGE6IC0xLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tGbjogZnVuY3Rpb24gc3RhY2tfZGl2KHN0YWNrLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrW2luZGV4IC0gMl0gPSBzdGFja1tpbmRleCAtIDJdICsgc3RhY2tbaW5kZXggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdzdWInLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tEZWx0YTogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0ZuOiBmdW5jdGlvbiBzdGFja19kaXYoc3RhY2ssIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tbaW5kZXggLSAyXSA9IHN0YWNrW2luZGV4IC0gMl0gLSBzdGFja1tpbmRleCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ2RpdicsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0RlbHRhOiAtMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrRm46IGZ1bmN0aW9uIHN0YWNrX2RpdihzdGFjaywgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1tpbmRleCAtIDJdID0gc3RhY2tbaW5kZXggLSAyXSAvIHN0YWNrW2luZGV4IC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIG51bGwsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnbmVnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrRGVsdGE6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0ZuOiBmdW5jdGlvbiBzdGFja19kaXYoc3RhY2ssIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tbaW5kZXggLSAxXSA9IC1zdGFja1tpbmRleCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ2VxJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrRGVsdGE6IC0xXG4gICAgICAgICAgICAgICAgICAgIH0sIG51bGwsIG51bGwsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnZHJvcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0RlbHRhOiAtMVxuICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ3B1dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0RlbHRhOiAtMlxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ2dldCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0RlbHRhOiAwXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnaWZlbHNlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrRGVsdGE6IC0zXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAncmFuZG9tJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrRGVsdGE6IDFcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdtdWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tEZWx0YTogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0ZuOiBmdW5jdGlvbiBzdGFja19kaXYoc3RhY2ssIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tbaW5kZXggLSAyXSA9IHN0YWNrW2luZGV4IC0gMl0gKiBzdGFja1tpbmRleCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ3NxcnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tEZWx0YTogMFxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ2R1cCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0RlbHRhOiAxXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnZXhjaCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0RlbHRhOiAwXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnaW5kZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tEZWx0YTogMFxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ3JvbGwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tEZWx0YTogLTJcbiAgICAgICAgICAgICAgICAgICAgfSwgbnVsbCwgbnVsbCwgbnVsbCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdoZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDcsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldFN0YWNrOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDEzLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRTdGFjazogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ2hmbGV4MScsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDksXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldFN0YWNrOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnZmxleDEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAxMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfV07XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQ0ZGUGFyc2VyKGZpbGUsIHByb3BlcnRpZXMsIHNlYWNBbmFseXNpc0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnl0ZXMgPSBmaWxlLmdldEJ5dGVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkID0gISFzZWFjQW5hbHlzaXNFbmFibGVkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQ0ZGUGFyc2VyLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlOiBmdW5jdGlvbiBDRkZQYXJzZXJfcGFyc2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLnByb3BlcnRpZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNmZiA9IG5ldyBDRkYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNmZiA9IGNmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGVyID0gdGhpcy5wYXJzZUhlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lSW5kZXggPSB0aGlzLnBhcnNlSW5kZXgoaGVhZGVyLmVuZFBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRvcERpY3RJbmRleCA9IHRoaXMucGFyc2VJbmRleChuYW1lSW5kZXguZW5kUG9zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyaW5nSW5kZXggPSB0aGlzLnBhcnNlSW5kZXgodG9wRGljdEluZGV4LmVuZFBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdsb2JhbFN1YnJJbmRleCA9IHRoaXMucGFyc2VJbmRleChzdHJpbmdJbmRleC5lbmRQb3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b3BEaWN0UGFyc2VkID0gdGhpcy5wYXJzZURpY3QodG9wRGljdEluZGV4Lm9iai5nZXQoMCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b3BEaWN0ID0gdGhpcy5jcmVhdGVEaWN0KENGRlRvcERpY3QsIHRvcERpY3RQYXJzZWQsIGNmZi5zdHJpbmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYuaGVhZGVyID0gaGVhZGVyLm9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYubmFtZXMgPSB0aGlzLnBhcnNlTmFtZUluZGV4KG5hbWVJbmRleC5vYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZi5zdHJpbmdzID0gdGhpcy5wYXJzZVN0cmluZ0luZGV4KHN0cmluZ0luZGV4Lm9iaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZmLnRvcERpY3QgPSB0b3BEaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZi5nbG9iYWxTdWJySW5kZXggPSBnbG9iYWxTdWJySW5kZXgub2JqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyc2VQcml2YXRlRGljdChjZmYudG9wRGljdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZmLmlzQ0lERm9udCA9IHRvcERpY3QuaGFzTmFtZSgnUk9TJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJTdHJpbmdPZmZzZXQgPSB0b3BEaWN0LmdldEJ5TmFtZSgnQ2hhclN0cmluZ3MnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhclN0cmluZ0luZGV4ID0gdGhpcy5wYXJzZUluZGV4KGNoYXJTdHJpbmdPZmZzZXQpLm9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udE1hdHJpeCA9IHRvcERpY3QuZ2V0QnlOYW1lKCdGb250TWF0cml4Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9udE1hdHJpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmZvbnRNYXRyaXggPSBmb250TWF0cml4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250QkJveCA9IHRvcERpY3QuZ2V0QnlOYW1lKCdGb250QkJveCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnRCQm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuYXNjZW50ID0gTWF0aC5tYXgoZm9udEJCb3hbM10sIGZvbnRCQm94WzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5kZXNjZW50ID0gTWF0aC5taW4oZm9udEJCb3hbMV0sIGZvbnRCQm94WzNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5hc2NlbnRTY2FsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyc2V0LCBlbmNvZGluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZmYuaXNDSURGb250KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmZEFycmF5SW5kZXggPSB0aGlzLnBhcnNlSW5kZXgodG9wRGljdC5nZXRCeU5hbWUoJ0ZEQXJyYXknKSkub2JqO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGZkQXJyYXlJbmRleC5jb3VudDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0UmF3ID0gZmRBcnJheUluZGV4LmdldChpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250RGljdCA9IHRoaXMuY3JlYXRlRGljdChDRkZUb3BEaWN0LCB0aGlzLnBhcnNlRGljdChkaWN0UmF3KSwgY2ZmLnN0cmluZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJzZVByaXZhdGVEaWN0KGZvbnREaWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZi5mZEFycmF5LnB1c2goZm9udERpY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gdGhpcy5wYXJzZUNoYXJzZXRzKHRvcERpY3QuZ2V0QnlOYW1lKCdjaGFyc2V0JyksIGNoYXJTdHJpbmdJbmRleC5jb3VudCwgY2ZmLnN0cmluZ3MsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYuZmRTZWxlY3QgPSB0aGlzLnBhcnNlRkRTZWxlY3QodG9wRGljdC5nZXRCeU5hbWUoJ0ZEU2VsZWN0JyksIGNoYXJTdHJpbmdJbmRleC5jb3VudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9IHRoaXMucGFyc2VDaGFyc2V0cyh0b3BEaWN0LmdldEJ5TmFtZSgnY2hhcnNldCcpLCBjaGFyU3RyaW5nSW5kZXguY291bnQsIGNmZi5zdHJpbmdzLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nID0gdGhpcy5wYXJzZUVuY29kaW5nKHRvcERpY3QuZ2V0QnlOYW1lKCdFbmNvZGluZycpLCBwcm9wZXJ0aWVzLCBjZmYuc3RyaW5ncywgY2hhcnNldC5jaGFyc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYuY2hhcnNldCA9IGNoYXJzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZmLmVuY29kaW5nID0gZW5jb2Rpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJTdHJpbmdzQW5kU2VhY3MgPSB0aGlzLnBhcnNlQ2hhclN0cmluZ3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyU3RyaW5nczogY2hhclN0cmluZ0luZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN1YnJJbmRleDogdG9wRGljdC5wcml2YXRlRGljdC5zdWJyc0luZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxTdWJySW5kZXg6IGdsb2JhbFN1YnJJbmRleC5vYmosXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkU2VsZWN0OiBjZmYuZmRTZWxlY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkQXJyYXk6IGNmZi5mZEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlRGljdDogdG9wRGljdC5wcml2YXRlRGljdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZi5jaGFyU3RyaW5ncyA9IGNoYXJTdHJpbmdzQW5kU2VhY3MuY2hhclN0cmluZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZmLnNlYWNzID0gY2hhclN0cmluZ3NBbmRTZWFjcy5zZWFjcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYud2lkdGhzID0gY2hhclN0cmluZ3NBbmRTZWFjcy53aWR0aHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUhlYWRlcjogZnVuY3Rpb24gQ0ZGUGFyc2VyX3BhcnNlSGVhZGVyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBieXRlcyA9IHRoaXMuYnl0ZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGVzTGVuZ3RoID0gYnl0ZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG9mZnNldCA8IGJ5dGVzTGVuZ3RoICYmIGJ5dGVzW29mZnNldF0gIT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytvZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBieXRlc0xlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0ludmFsaWQgQ0ZGIGhlYWRlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKCdjZmYgZGF0YSBpcyBzaGlmdGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzID0gYnl0ZXMuc3ViYXJyYXkob2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ieXRlcyA9IGJ5dGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYWpvciA9IGJ5dGVzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtaW5vciA9IGJ5dGVzWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZHJTaXplID0gYnl0ZXNbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZlNpemUgPSBieXRlc1szXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGVyID0gbmV3IENGRkhlYWRlcihtYWpvciwgbWlub3IsIGhkclNpemUsIG9mZlNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iajogaGVhZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRQb3M6IGhkclNpemVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRGljdDogZnVuY3Rpb24gQ0ZGUGFyc2VyX3BhcnNlRGljdChkaWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwYXJzZU9wZXJhbmQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGRpY3RbcG9zKytdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMzApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0T3BlcmFuZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAyOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBkaWN0W3BvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKHZhbHVlIDw8IDI0IHwgZGljdFtwb3MrK10gPDwgMTYpID4+IDE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAyOSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBkaWN0W3BvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgPDwgOCB8IGRpY3RbcG9zKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA8PCA4IHwgZGljdFtwb3MrK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIDw8IDggfCBkaWN0W3BvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAzMiAmJiB2YWx1ZSA8PSAyNDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSAtIDEzOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAyNDcgJiYgdmFsdWUgPD0gMjUwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHZhbHVlIC0gMjQ3KSAqIDI1NiArIGRpY3RbcG9zKytdICsgMTA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID49IDI1MSAmJiB2YWx1ZSA8PSAyNTQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtKCh2YWx1ZSAtIDI1MSkgKiAyNTYpIC0gZGljdFtwb3MrK10gLSAxMDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0NGRlBhcnNlcl9wYXJzZURpY3Q6IFwiJyArIHZhbHVlICsgJ1wiIGlzIGEgcmVzZXJ2ZWQgY29tbWFuZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwYXJzZUZsb2F0T3BlcmFuZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ciA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW9mID0gMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb29rdXAgPSBbJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnLicsICdFJywgJ0UtJywgbnVsbCwgJy0nXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGRpY3QubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwb3MgPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gZGljdFtwb3MrK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjEgPSBiID4+IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjIgPSBiICYgMTU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiMSA9PT0gZW9mKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBsb29rdXBbYjFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYjIgPT09IGVvZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gbG9va3VwW2IyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHN0cik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wZXJhbmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVudHJpZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBkaWN0Lmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSBkaWN0W3Bvc107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGIgPD0gMjEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiID09PSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBiIDw8IDggfCBkaWN0WysrcG9zXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cmllcy5wdXNoKFtiLCBvcGVyYW5kc10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZHMucHVzaChwYXJzZU9wZXJhbmQoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cmllcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUluZGV4OiBmdW5jdGlvbiBDRkZQYXJzZXJfcGFyc2VJbmRleChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2ZmSW5kZXggPSBuZXcgQ0ZGSW5kZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZXMgPSB0aGlzLmJ5dGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IGJ5dGVzW3BvcysrXSA8PCA4IHwgYnl0ZXNbcG9zKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IHBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaWk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldFNpemUgPSBieXRlc1twb3MrK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydFBvcyA9IHBvcyArIChjb3VudCArIDEpICogb2Zmc2V0U2l6ZSAtIDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBjb3VudCArIDE7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBvZmZzZXRTaXplOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPDw9IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0cy5wdXNoKHN0YXJ0UG9zICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IG9mZnNldHNbY291bnRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gb2Zmc2V0cy5sZW5ndGggLSAxOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0U3RhcnQgPSBvZmZzZXRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0RW5kID0gb2Zmc2V0c1tpICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZkluZGV4LmFkZChieXRlcy5zdWJhcnJheShvZmZzZXRTdGFydCwgb2Zmc2V0RW5kKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqOiBjZmZJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kUG9zOiBlbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlTmFtZUluZGV4OiBmdW5jdGlvbiBDRkZQYXJzZXJfcGFyc2VOYW1lSW5kZXgoaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZXMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGluZGV4LmNvdW50OyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGluZGV4LmdldChpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMucHVzaCgoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykobmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuYW1lcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVN0cmluZ0luZGV4OiBmdW5jdGlvbiBDRkZQYXJzZXJfcGFyc2VTdHJpbmdJbmRleChpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJpbmdzID0gbmV3IENGRlN0cmluZ3MoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGluZGV4LmNvdW50OyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGluZGV4LmdldChpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5ncy5hZGQoKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGRhdGEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5ncztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVEaWN0OiBmdW5jdGlvbiBDRkZQYXJzZXJfY3JlYXRlRGljdChUeXBlLCBkaWN0LCBzdHJpbmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNmZkRpY3QgPSBuZXcgVHlwZShzdHJpbmdzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGRpY3QubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFpciA9IGRpY3RbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBwYWlyWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBwYWlyWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmZEaWN0LnNldEJ5S2V5KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjZmZEaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ2hhclN0cmluZzogZnVuY3Rpb24gQ0ZGUGFyc2VyX3BhcnNlQ2hhclN0cmluZyhzdGF0ZSwgZGF0YSwgbG9jYWxTdWJySW5kZXgsIGdsb2JhbFN1YnJJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGF0YSB8fCBzdGF0ZS5jYWxsRGVwdGggPiBNQVhfU1VCUl9ORVNUSU5HKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhY2tTaXplID0gc3RhdGUuc3RhY2tTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFjayA9IHN0YXRlLnN0YWNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBkYXRhLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGVuZ3RoOykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBkYXRhW2orK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWxpZGF0aW9uQ29tbWFuZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHEgPSBkYXRhW2orK107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtqIC0gMl0gPSAxMzk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtqIC0gMV0gPSAyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1NpemUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uQ29tbWFuZCA9IENoYXJzdHJpbmdWYWxpZGF0aW9uRGF0YTEyW3FdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAyOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tbc3RhY2tTaXplXSA9IChkYXRhW2pdIDw8IDI0IHwgZGF0YVtqICsgMV0gPDwgMTYpID4+IDE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tTaXplKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IDE0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tTaXplID49IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1NpemUgLT0gNDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2VhYyA9IHN0YWNrLnNsaWNlKHN0YWNrU2l6ZSwgc3RhY2tTaXplICsgNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25Db21tYW5kID0gQ2hhcnN0cmluZ1ZhbGlkYXRpb25EYXRhW3ZhbHVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAzMiAmJiB2YWx1ZSA8PSAyNDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrW3N0YWNrU2l6ZV0gPSB2YWx1ZSAtIDEzOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrU2l6ZSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID49IDI0NyAmJiB2YWx1ZSA8PSAyNTQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrW3N0YWNrU2l6ZV0gPSB2YWx1ZSA8IDI1MSA/ICh2YWx1ZSAtIDI0NyA8PCA4KSArIGRhdGFbal0gKyAxMDggOiAtKHZhbHVlIC0gMjUxIDw8IDgpIC0gZGF0YVtqXSAtIDEwODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrU2l6ZSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAyNTUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrW3N0YWNrU2l6ZV0gPSAoZGF0YVtqXSA8PCAyNCB8IGRhdGFbaiArIDFdIDw8IDE2IHwgZGF0YVtqICsgMl0gPDwgOCB8IGRhdGFbaiArIDNdKSAvIDY1NTM2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tTaXplKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IDE5IHx8IHZhbHVlID09PSAyMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuaGludHMgKz0gc3RhY2tTaXplID4+IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqICs9IHN0YXRlLmhpbnRzICsgNyA+PiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tTaXplICU9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uQ29tbWFuZCA9IENoYXJzdHJpbmdWYWxpZGF0aW9uRGF0YVt2YWx1ZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IDEwIHx8IHZhbHVlID09PSAyOSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1YnJzSW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyc0luZGV4ID0gbG9jYWxTdWJySW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJzSW5kZXggPSBnbG9iYWxTdWJySW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3VicnNJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25Db21tYW5kID0gQ2hhcnN0cmluZ1ZhbGlkYXRpb25EYXRhW3ZhbHVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ01pc3Npbmcgc3VicnNJbmRleCBmb3IgJyArIHZhbGlkYXRpb25Db21tYW5kLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaWFzID0gMzI3Njg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJyc0luZGV4LmNvdW50IDwgMTI0MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpYXMgPSAxMDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YnJzSW5kZXguY291bnQgPCAzMzkwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpYXMgPSAxMTMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3Vick51bWJlciA9IHN0YWNrWy0tc3RhY2tTaXplXSArIGJpYXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJyTnVtYmVyIDwgMCB8fCBzdWJyTnVtYmVyID49IHN1YnJzSW5kZXguY291bnQgfHwgaXNOYU4oc3Vick51bWJlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uQ29tbWFuZCA9IENoYXJzdHJpbmdWYWxpZGF0aW9uRGF0YVt2YWx1ZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdPdXQgb2YgYm91bmRzIHN1YnJJbmRleCBmb3IgJyArIHZhbGlkYXRpb25Db21tYW5kLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0YWNrU2l6ZSA9IHN0YWNrU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmNhbGxEZXB0aCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbGlkID0gdGhpcy5wYXJzZUNoYXJTdHJpbmcoc3RhdGUsIHN1YnJzSW5kZXguZ2V0KHN1YnJOdW1iZXIpLCBsb2NhbFN1YnJJbmRleCwgZ2xvYmFsU3VickluZGV4KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuY2FsbERlcHRoLS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1NpemUgPSBzdGF0ZS5zdGFja1NpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gMTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0YWNrU2l6ZSA9IHN0YWNrU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbkNvbW1hbmQgPSBDaGFyc3RyaW5nVmFsaWRhdGlvbkRhdGFbdmFsdWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25Db21tYW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvbkNvbW1hbmQuc3RlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmhpbnRzICs9IHN0YWNrU2l6ZSA+PiAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAzIHx8IHZhbHVlID09PSAyMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5oYXNWU3RlbXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuaGFzVlN0ZW1zICYmICh2YWx1ZSA9PT0gMSB8fCB2YWx1ZSA9PT0gMTgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnQ0ZGIHN0ZW0gaGludHMgYXJlIGluIHdyb25nIG9yZGVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaiAtIDFdID0gdmFsdWUgPT09IDEgPyAzIDogMjM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJ21pbicgaW4gdmFsaWRhdGlvbkNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXRlLnVuZGVmU3RhY2sgJiYgc3RhY2tTaXplIDwgdmFsaWRhdGlvbkNvbW1hbmQubWluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnTm90IGVub3VnaCBwYXJhbWV0ZXJzIGZvciAnICsgdmFsaWRhdGlvbkNvbW1hbmQuaWQgKyAnOyBhY3R1YWw6ICcgKyBzdGFja1NpemUgKyAnLCBleHBlY3RlZDogJyArIHZhbGlkYXRpb25Db21tYW5kLm1pbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5maXJzdFN0YWNrQ2xlYXJpbmcgJiYgdmFsaWRhdGlvbkNvbW1hbmQuc3RhY2tDbGVhcmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmZpcnN0U3RhY2tDbGVhcmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrU2l6ZSAtPSB2YWxpZGF0aW9uQ29tbWFuZC5taW47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tTaXplID49IDIgJiYgdmFsaWRhdGlvbkNvbW1hbmQuc3RlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1NpemUgJT0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YWNrU2l6ZSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdGb3VuZCB0b28gbWFueSBwYXJhbWV0ZXJzIGZvciBzdGFjay1jbGVhcmluZyBjb21tYW5kJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrU2l6ZSA+IDAgJiYgc3RhY2tbc3RhY2tTaXplIC0gMV0gPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS53aWR0aCA9IHN0YWNrW3N0YWNrU2l6ZSAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCdzdGFja0RlbHRhJyBpbiB2YWxpZGF0aW9uQ29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgnc3RhY2tGbicgaW4gdmFsaWRhdGlvbkNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbkNvbW1hbmQuc3RhY2tGbihzdGFjaywgc3RhY2tTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1NpemUgKz0gdmFsaWRhdGlvbkNvbW1hbmQuc3RhY2tEZWx0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbkNvbW1hbmQuc3RhY2tDbGVhcmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrU2l6ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25Db21tYW5kLnJlc2V0U3RhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1NpemUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnVuZGVmU3RhY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbkNvbW1hbmQudW5kZWZTdGFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrU2l6ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUudW5kZWZTdGFjayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZmlyc3RTdGFja0NsZWFyaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdGFja1NpemUgPSBzdGFja1NpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDaGFyU3RyaW5nczogZnVuY3Rpb24gcGFyc2VDaGFyU3RyaW5ncyhfcmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJTdHJpbmdzID0gX3JlZi5jaGFyU3RyaW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdWJySW5kZXggPSBfcmVmLmxvY2FsU3VickluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxTdWJySW5kZXggPSBfcmVmLmdsb2JhbFN1YnJJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRTZWxlY3QgPSBfcmVmLmZkU2VsZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZEFycmF5ID0gX3JlZi5mZEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlRGljdCA9IF9yZWYucHJpdmF0ZURpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlYWNzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRocyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IGNoYXJTdHJpbmdzLmNvdW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyc3RyaW5nID0gY2hhclN0cmluZ3MuZ2V0KGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsRGVwdGg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1NpemU6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjazogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZlN0YWNrOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGludHM6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFN0YWNrQ2xlYXJpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFjOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNWU3RlbXM6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb2NhbFN1YnJUb1VzZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcml2YXRlRGljdFRvVXNlID0gcHJpdmF0ZURpY3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZkU2VsZWN0ICYmIGZkQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmRJbmRleCA9IGZkU2VsZWN0LmdldEZESW5kZXgoaSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnR2x5cGggaW5kZXggaXMgbm90IGluIGZkIHNlbGVjdC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmRJbmRleCA+PSBmZEFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZURpY3RUb1VzZSA9IGZkQXJyYXlbZmRJbmRleF0ucHJpdmF0ZURpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdWJyVG9Vc2UgPSBwcml2YXRlRGljdFRvVXNlLnN1YnJzSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYWxTdWJySW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3ViclRvVXNlID0gbG9jYWxTdWJySW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkID0gdGhpcy5wYXJzZUNoYXJTdHJpbmcoc3RhdGUsIGNoYXJzdHJpbmcsIGxvY2FsU3ViclRvVXNlLCBnbG9iYWxTdWJySW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLndpZHRoICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9taW5hbFdpZHRoID0gcHJpdmF0ZURpY3RUb1VzZS5nZXRCeU5hbWUoJ25vbWluYWxXaWR0aFgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoc1tpXSA9IG5vbWluYWxXaWR0aCArIHN0YXRlLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRXaWR0aCA9IHByaXZhdGVEaWN0VG9Vc2UuZ2V0QnlOYW1lKCdkZWZhdWx0V2lkdGhYJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aHNbaV0gPSBkZWZhdWx0V2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2VhYyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhY3NbaV0gPSBzdGF0ZS5zZWFjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhclN0cmluZ3Muc2V0KGksIG5ldyBVaW50OEFycmF5KFsxNF0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJTdHJpbmdzOiBjaGFyU3RyaW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhY3M6IHNlYWNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aHM6IHdpZHRoc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHlQcml2YXRlRGljdGlvbmFyeTogZnVuY3Rpb24gQ0ZGUGFyc2VyX2VtcHR5UHJpdmF0ZURpY3Rpb25hcnkocGFyZW50RGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcml2YXRlRGljdCA9IHRoaXMuY3JlYXRlRGljdChDRkZQcml2YXRlRGljdCwgW10sIHBhcmVudERpY3Quc3RyaW5ncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50RGljdC5zZXRCeUtleSgxOCwgWzAsIDBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnREaWN0LnByaXZhdGVEaWN0ID0gcHJpdmF0ZURpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VQcml2YXRlRGljdDogZnVuY3Rpb24gQ0ZGUGFyc2VyX3BhcnNlUHJpdmF0ZURpY3QocGFyZW50RGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyZW50RGljdC5oYXNOYW1lKCdQcml2YXRlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KHBhcmVudERpY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByaXZhdGVPZmZzZXQgPSBwYXJlbnREaWN0LmdldEJ5TmFtZSgnUHJpdmF0ZScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByaXZhdGVPZmZzZXQpIHx8IHByaXZhdGVPZmZzZXQubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudERpY3QucmVtb3ZlQnlOYW1lKCdQcml2YXRlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IHByaXZhdGVPZmZzZXRbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IHByaXZhdGVPZmZzZXRbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2l6ZSA9PT0gMCB8fCBvZmZzZXQgPj0gdGhpcy5ieXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KHBhcmVudERpY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByaXZhdGVEaWN0RW5kID0gb2Zmc2V0ICsgc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGljdERhdGEgPSB0aGlzLmJ5dGVzLnN1YmFycmF5KG9mZnNldCwgcHJpdmF0ZURpY3RFbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gdGhpcy5wYXJzZURpY3QoZGljdERhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcml2YXRlRGljdCA9IHRoaXMuY3JlYXRlRGljdChDRkZQcml2YXRlRGljdCwgZGljdCwgcGFyZW50RGljdC5zdHJpbmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnREaWN0LnByaXZhdGVEaWN0ID0gcHJpdmF0ZURpY3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByaXZhdGVEaWN0LmdldEJ5TmFtZSgnU3VicnMnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1YnJzT2Zmc2V0ID0gcHJpdmF0ZURpY3QuZ2V0QnlOYW1lKCdTdWJycycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWxhdGl2ZU9mZnNldCA9IG9mZnNldCArIHN1YnJzT2Zmc2V0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1YnJzT2Zmc2V0ID09PSAwIHx8IHJlbGF0aXZlT2Zmc2V0ID49IHRoaXMuYnl0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1wdHlQcml2YXRlRGljdGlvbmFyeShwYXJlbnREaWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJyc0luZGV4ID0gdGhpcy5wYXJzZUluZGV4KHJlbGF0aXZlT2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlRGljdC5zdWJyc0luZGV4ID0gc3VicnNJbmRleC5vYmo7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDaGFyc2V0czogZnVuY3Rpb24gQ0ZGUGFyc2VyX3BhcnNlQ2hhcnNldHMocG9zLCBsZW5ndGgsIHN0cmluZ3MsIGNpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3MgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDRkZDaGFyc2V0KHRydWUsIENGRkNoYXJzZXRQcmVkZWZpbmVkVHlwZXMuSVNPX0FET0JFLCBfY2hhcnNldHMuSVNPQWRvYmVDaGFyc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBvcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENGRkNoYXJzZXQodHJ1ZSwgQ0ZGQ2hhcnNldFByZWRlZmluZWRUeXBlcy5FWFBFUlQsIF9jaGFyc2V0cy5FeHBlcnRDaGFyc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBvcyA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENGRkNoYXJzZXQodHJ1ZSwgQ0ZGQ2hhcnNldFByZWRlZmluZWRUeXBlcy5FWFBFUlRfU1VCU0VULCBfY2hhcnNldHMuRXhwZXJ0U3Vic2V0Q2hhcnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGVzID0gdGhpcy5ieXRlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSBwb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1hdCA9IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhcnNldCA9IFsnLm5vdGRlZiddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpZCwgY291bnQsIGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoIC09IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGJ5dGVzW3BvcysrXSA8PCA4IHwgYnl0ZXNbcG9zKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQucHVzaChjaWQgPyBpZCA6IHN0cmluZ3MuZ2V0KGlkKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjaGFyc2V0Lmxlbmd0aCA8PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGJ5dGVzW3BvcysrXSA8PCA4IHwgYnl0ZXNbcG9zKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gYnl0ZXNbcG9zKytdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8PSBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQucHVzaChjaWQgPyBpZCsrIDogc3RyaW5ncy5nZXQoaWQrKykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNoYXJzZXQubGVuZ3RoIDw9IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gYnl0ZXNbcG9zKytdIDw8IDggfCBieXRlc1twb3MrK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSBieXRlc1twb3MrK10gPDwgOCB8IGJ5dGVzW3BvcysrXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0LnB1c2goY2lkID8gaWQrKyA6IHN0cmluZ3MuZ2V0KGlkKyspKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1Vua25vd24gY2hhcnNldCBmb3JtYXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gcG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYXcgPSBieXRlcy5zdWJhcnJheShzdGFydCwgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENGRkNoYXJzZXQoZmFsc2UsIGZvcm1hdCwgY2hhcnNldCwgcmF3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVuY29kaW5nOiBmdW5jdGlvbiBDRkZQYXJzZXJfcGFyc2VFbmNvZGluZyhwb3MsIHByb3BlcnRpZXMsIHN0cmluZ3MsIGNoYXJzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jb2RpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBieXRlcyA9IHRoaXMuYnl0ZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZWRlZmluZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9ybWF0LCBpLCBpaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmF3ID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWRTdXBwbGVtZW50KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VwcGxlbWVudHNDb3VudCA9IGJ5dGVzW3BvcysrXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3VwcGxlbWVudHNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZSA9IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaWQgPSAoYnl0ZXNbcG9zKytdIDw8IDgpICsgKGJ5dGVzW3BvcysrXSAmIDB4ZmYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmdbY29kZV0gPSBjaGFyc2V0LmluZGV4T2Yoc3RyaW5ncy5nZXQoc2lkKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zID09PSAwIHx8IHBvcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVkZWZpbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gcG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZUVuY29kaW5nID0gcG9zID8gX2VuY29kaW5ncy5FeHBlcnRFbmNvZGluZyA6IF9lbmNvZGluZ3MuU3RhbmRhcmRFbmNvZGluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGNoYXJzZXQubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gYmFzZUVuY29kaW5nLmluZGV4T2YoY2hhcnNldFtpXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZ1tpbmRleF0gPSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGFTdGFydCA9IHBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gYnl0ZXNbcG9zKytdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0ICYgMHg3Zikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaHNDb3VudCA9IGJ5dGVzW3BvcysrXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gZ2x5cGhzQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZ1tieXRlc1twb3MrK11dID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5nZXNDb3VudCA9IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2lkID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCByYW5nZXNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlZnQgPSBieXRlc1twb3MrK107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IHN0YXJ0OyBqIDw9IHN0YXJ0ICsgbGVmdDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZ1tqXSA9IGdpZCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVW5rbm93biBlbmNvZGluZyBmb3JtYXQ6IFwiLmNvbmNhdChmb3JtYXQsIFwiIGluIENGRlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YUVuZCA9IHBvcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ICYgMHg4MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbZGF0YVN0YXJ0XSAmPSAweDdmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFN1cHBsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdyA9IGJ5dGVzLnN1YmFycmF5KGRhdGFTdGFydCwgZGF0YUVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0ICYgMHg3ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENGRkVuY29kaW5nKHByZWRlZmluZWQsIGZvcm1hdCwgZW5jb2RpbmcsIHJhdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VGRFNlbGVjdDogZnVuY3Rpb24gQ0ZGUGFyc2VyX3BhcnNlRkRTZWxlY3QocG9zLCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZXMgPSB0aGlzLmJ5dGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JtYXQgPSBieXRlc1twb3MrK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZkU2VsZWN0ID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSBieXRlc1twb3MrK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRTZWxlY3QucHVzaChpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5nZXNDb3VudCA9IGJ5dGVzW3BvcysrXSA8PCA4IHwgYnl0ZXNbcG9zKytdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmFuZ2VzQ291bnQ7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdCA9IGJ5dGVzW3BvcysrXSA8PCA4IHwgYnl0ZXNbcG9zKytdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDAgJiYgZmlyc3QgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdwYXJzZUZEU2VsZWN0OiBUaGUgZmlyc3QgcmFuZ2UgbXVzdCBoYXZlIGEgZmlyc3QgR0lEIG9mIDAnICsgJyAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmZEluZGV4ID0gYnl0ZXNbcG9zKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gYnl0ZXNbcG9zXSA8PCA4IHwgYnl0ZXNbcG9zICsgMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gZmlyc3Q7IGogPCBuZXh0OyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRTZWxlY3QucHVzaChmZEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcInBhcnNlRkRTZWxlY3Q6IFVua25vd24gZm9ybWF0IFxcXCJcIi5jb25jYXQoZm9ybWF0LCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmRTZWxlY3QubGVuZ3RoICE9PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdwYXJzZUZEU2VsZWN0OiBJbnZhbGlkIGZvbnQgZGF0YS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENGRkZEU2VsZWN0KGZvcm1hdCwgZmRTZWxlY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0ZGUGFyc2VyO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ0ZGUGFyc2VyID0gQ0ZGUGFyc2VyO1xuXG4gICAgICAgICAgICAgICAgdmFyIENGRiA9IGZ1bmN0aW9uIENGRkNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENGRigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9wRGljdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmluZ3MgPSBuZXcgQ0ZGU3RyaW5ncygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nbG9iYWxTdWJySW5kZXggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmNvZGluZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJzZXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFyU3RyaW5ncyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZkQXJyYXkgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmRTZWxlY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NJREZvbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENGRi5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkdXBsaWNhdGVGaXJzdEdseXBoOiBmdW5jdGlvbiBDRkZfZHVwbGljYXRlRmlyc3RHbHlwaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGFyU3RyaW5ncy5jb3VudCA+PSA2NTUzNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ05vdCBlbm91Z2ggc3BhY2UgaW4gY2hhcnN0cmluZ3MgdG8gZHVwbGljYXRlIGZpcnN0IGdseXBoLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoWmVybyA9IHRoaXMuY2hhclN0cmluZ3MuZ2V0KDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhclN0cmluZ3MuYWRkKGdseXBoWmVybyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0NJREZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZFNlbGVjdC5mZFNlbGVjdC5wdXNoKHRoaXMuZmRTZWxlY3QuZmRTZWxlY3RbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNHbHlwaElkOiBmdW5jdGlvbiBDRkZfaGFzR2x5cGhJRChpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZCA8IDAgfHwgaWQgPj0gdGhpcy5jaGFyU3RyaW5ncy5jb3VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoID0gdGhpcy5jaGFyU3RyaW5ncy5nZXQoaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaC5sZW5ndGggPiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0ZGO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ0ZGID0gQ0ZGO1xuXG4gICAgICAgICAgICAgICAgdmFyIENGRkhlYWRlciA9IGZ1bmN0aW9uIENGRkhlYWRlckNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENGRkhlYWRlcihtYWpvciwgbWlub3IsIGhkclNpemUsIG9mZlNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFqb3IgPSBtYWpvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWlub3IgPSBtaW5vcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGRyU2l6ZSA9IGhkclNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZlNpemUgPSBvZmZTaXplO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENGRkhlYWRlcjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkNGRkhlYWRlciA9IENGRkhlYWRlcjtcblxuICAgICAgICAgICAgICAgIHZhciBDRkZTdHJpbmdzID0gZnVuY3Rpb24gQ0ZGU3RyaW5nc0Nsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENGRlN0cmluZ3MoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmluZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENGRlN0cmluZ3MucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBDRkZTdHJpbmdzX2dldChpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IDM5MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0ZGU3RhbmRhcmRTdHJpbmdzW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggLSAzOTEgPD0gdGhpcy5zdHJpbmdzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmdzW2luZGV4IC0gMzkxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0ZGU3RhbmRhcmRTdHJpbmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZDogZnVuY3Rpb24gQ0ZGU3RyaW5nc19hZGQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmluZ3MucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgY291bnQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5ncy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENGRlN0cmluZ3M7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5DRkZTdHJpbmdzID0gQ0ZGU3RyaW5ncztcblxuICAgICAgICAgICAgICAgIHZhciBDRkZJbmRleCA9IGZ1bmN0aW9uIENGRkluZGV4Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQ0ZGSW5kZXgoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9iamVjdHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENGRkluZGV4LnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZDogZnVuY3Rpb24gQ0ZGSW5kZXhfYWRkKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCArPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9iamVjdHMucHVzaChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIENGRkluZGV4X3NldChpbmRleCwgZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoICs9IGRhdGEubGVuZ3RoIC0gdGhpcy5vYmplY3RzW2luZGV4XS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vYmplY3RzW2luZGV4XSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBDRkZJbmRleF9nZXQoaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vYmplY3RzW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBjb3VudCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vYmplY3RzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0ZGSW5kZXg7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5DRkZJbmRleCA9IENGRkluZGV4O1xuXG4gICAgICAgICAgICAgICAgdmFyIENGRkRpY3QgPSBmdW5jdGlvbiBDRkZEaWN0Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQ0ZGRGljdCh0YWJsZXMsIHN0cmluZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMua2V5VG9OYW1lTWFwID0gdGFibGVzLmtleVRvTmFtZU1hcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZVRvS2V5TWFwID0gdGFibGVzLm5hbWVUb0tleU1hcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdHMgPSB0YWJsZXMuZGVmYXVsdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnR5cGVzID0gdGFibGVzLnR5cGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGNvZGVzID0gdGFibGVzLm9wY29kZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9yZGVyID0gdGFibGVzLm9yZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJpbmdzID0gc3RyaW5ncztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENGRkRpY3QucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QnlLZXk6IGZ1bmN0aW9uIENGRkRpY3Rfc2V0QnlLZXkoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiB0aGlzLmtleVRvTmFtZU1hcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZUxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZUxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKHZhbHVlW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdJbnZhbGlkIENGRkRpY3QgdmFsdWU6IFwiJyArIHZhbHVlICsgJ1wiIGZvciBrZXkgXCInICsga2V5ICsgJ1wiLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHRoaXMudHlwZXNba2V5XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnbnVtJyB8fCB0eXBlID09PSAnc2lkJyB8fCB0eXBlID09PSAnb2Zmc2V0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRCeU5hbWU6IGZ1bmN0aW9uIENGRkRpY3Rfc2V0QnlOYW1lKG5hbWUsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobmFtZSBpbiB0aGlzLm5hbWVUb0tleU1hcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSW52YWxpZCBkaWN0aW9uYXJ5IG5hbWUgXFxcIlwiLmNvbmNhdChuYW1lLCBcIlxcXCJcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzW3RoaXMubmFtZVRvS2V5TWFwW25hbWVdXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc05hbWU6IGZ1bmN0aW9uIENGRkRpY3RfaGFzTmFtZShuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmFtZVRvS2V5TWFwW25hbWVdIGluIHRoaXMudmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldEJ5TmFtZTogZnVuY3Rpb24gQ0ZGRGljdF9nZXRCeU5hbWUobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG5hbWUgaW4gdGhpcy5uYW1lVG9LZXlNYXApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgZGljdGlvbmFyeSBuYW1lIFwiLmNvbmNhdChuYW1lLCBcIlxcXCJcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSB0aGlzLm5hbWVUb0tleU1hcFtuYW1lXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiB0aGlzLnZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdHNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVCeU5hbWU6IGZ1bmN0aW9uIENGRkRpY3RfcmVtb3ZlQnlOYW1lKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy52YWx1ZXNbdGhpcy5uYW1lVG9LZXlNYXBbbmFtZV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIENGRkRpY3QuY3JlYXRlVGFibGVzID0gZnVuY3Rpb24gQ0ZGRGljdF9jcmVhdGVUYWJsZXMobGF5b3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGVzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleVRvTmFtZU1hcDoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZVRvS2V5TWFwOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0czoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXM6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZXM6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyOiBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gbGF5b3V0Lmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBsYXlvdXRbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IEFycmF5LmlzQXJyYXkoZW50cnlbMF0pID8gKGVudHJ5WzBdWzBdIDw8IDgpICsgZW50cnlbMF1bMV0gOiBlbnRyeVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXMua2V5VG9OYW1lTWFwW2tleV0gPSBlbnRyeVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXMubmFtZVRvS2V5TWFwW2VudHJ5WzFdXSA9IGtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXMudHlwZXNba2V5XSA9IGVudHJ5WzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlcy5kZWZhdWx0c1trZXldID0gZW50cnlbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzLm9wY29kZXNba2V5XSA9IEFycmF5LmlzQXJyYXkoZW50cnlbMF0pID8gZW50cnlbMF0gOiBbZW50cnlbMF1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlcy5vcmRlci5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YWJsZXM7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENGRkRpY3Q7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIENGRlRvcERpY3QgPSBmdW5jdGlvbiBDRkZUb3BEaWN0Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxheW91dCA9IFtbWzEyLCAzMF0sICdST1MnLCBbJ3NpZCcsICdzaWQnLCAnbnVtJ10sIG51bGxdLCBbWzEyLCAyMF0sICdTeW50aGV0aWNCYXNlJywgJ251bScsIG51bGxdLCBbMCwgJ3ZlcnNpb24nLCAnc2lkJywgbnVsbF0sIFsxLCAnTm90aWNlJywgJ3NpZCcsIG51bGxdLCBbWzEyLCAwXSwgJ0NvcHlyaWdodCcsICdzaWQnLCBudWxsXSwgWzIsICdGdWxsTmFtZScsICdzaWQnLCBudWxsXSwgWzMsICdGYW1pbHlOYW1lJywgJ3NpZCcsIG51bGxdLCBbNCwgJ1dlaWdodCcsICdzaWQnLCBudWxsXSwgW1sxMiwgMV0sICdpc0ZpeGVkUGl0Y2gnLCAnbnVtJywgMF0sIFtbMTIsIDJdLCAnSXRhbGljQW5nbGUnLCAnbnVtJywgMF0sIFtbMTIsIDNdLCAnVW5kZXJsaW5lUG9zaXRpb24nLCAnbnVtJywgLTEwMF0sIFtbMTIsIDRdLCAnVW5kZXJsaW5lVGhpY2tuZXNzJywgJ251bScsIDUwXSwgW1sxMiwgNV0sICdQYWludFR5cGUnLCAnbnVtJywgMF0sIFtbMTIsIDZdLCAnQ2hhcnN0cmluZ1R5cGUnLCAnbnVtJywgMl0sIFtbMTIsIDddLCAnRm9udE1hdHJpeCcsIFsnbnVtJywgJ251bScsICdudW0nLCAnbnVtJywgJ251bScsICdudW0nXSwgWzAuMDAxLCAwLCAwLCAwLjAwMSwgMCwgMF1dLCBbMTMsICdVbmlxdWVJRCcsICdudW0nLCBudWxsXSwgWzUsICdGb250QkJveCcsIFsnbnVtJywgJ251bScsICdudW0nLCAnbnVtJ10sIFswLCAwLCAwLCAwXV0sIFtbMTIsIDhdLCAnU3Ryb2tlV2lkdGgnLCAnbnVtJywgMF0sIFsxNCwgJ1hVSUQnLCAnYXJyYXknLCBudWxsXSwgWzE1LCAnY2hhcnNldCcsICdvZmZzZXQnLCAwXSwgWzE2LCAnRW5jb2RpbmcnLCAnb2Zmc2V0JywgMF0sIFsxNywgJ0NoYXJTdHJpbmdzJywgJ29mZnNldCcsIDBdLCBbMTgsICdQcml2YXRlJywgWydvZmZzZXQnLCAnb2Zmc2V0J10sIG51bGxdLCBbWzEyLCAyMV0sICdQb3N0U2NyaXB0JywgJ3NpZCcsIG51bGxdLCBbWzEyLCAyMl0sICdCYXNlRm9udE5hbWUnLCAnc2lkJywgbnVsbF0sIFtbMTIsIDIzXSwgJ0Jhc2VGb250QmxlbmQnLCAnZGVsdGEnLCBudWxsXSwgW1sxMiwgMzFdLCAnQ0lERm9udFZlcnNpb24nLCAnbnVtJywgMF0sIFtbMTIsIDMyXSwgJ0NJREZvbnRSZXZpc2lvbicsICdudW0nLCAwXSwgW1sxMiwgMzNdLCAnQ0lERm9udFR5cGUnLCAnbnVtJywgMF0sIFtbMTIsIDM0XSwgJ0NJRENvdW50JywgJ251bScsIDg3MjBdLCBbWzEyLCAzNV0sICdVSURCYXNlJywgJ251bScsIG51bGxdLCBbWzEyLCAzN10sICdGRFNlbGVjdCcsICdvZmZzZXQnLCBudWxsXSwgW1sxMiwgMzZdLCAnRkRBcnJheScsICdvZmZzZXQnLCBudWxsXSwgW1sxMiwgMzhdLCAnRm9udE5hbWUnLCAnc2lkJywgbnVsbF1dO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGVzID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBDRkZUb3BEaWN0KHN0cmluZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWJsZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXMgPSBDRkZEaWN0LmNyZWF0ZVRhYmxlcyhsYXlvdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBDRkZEaWN0LmNhbGwodGhpcywgdGFibGVzLCBzdHJpbmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJpdmF0ZURpY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQ0ZGVG9wRGljdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENGRkRpY3QucHJvdG90eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENGRlRvcERpY3Q7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5DRkZUb3BEaWN0ID0gQ0ZGVG9wRGljdDtcblxuICAgICAgICAgICAgICAgIHZhciBDRkZQcml2YXRlRGljdCA9IGZ1bmN0aW9uIENGRlByaXZhdGVEaWN0Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxheW91dCA9IFtbNiwgJ0JsdWVWYWx1ZXMnLCAnZGVsdGEnLCBudWxsXSwgWzcsICdPdGhlckJsdWVzJywgJ2RlbHRhJywgbnVsbF0sIFs4LCAnRmFtaWx5Qmx1ZXMnLCAnZGVsdGEnLCBudWxsXSwgWzksICdGYW1pbHlPdGhlckJsdWVzJywgJ2RlbHRhJywgbnVsbF0sIFtbMTIsIDldLCAnQmx1ZVNjYWxlJywgJ251bScsIDAuMDM5NjI1XSwgW1sxMiwgMTBdLCAnQmx1ZVNoaWZ0JywgJ251bScsIDddLCBbWzEyLCAxMV0sICdCbHVlRnV6eicsICdudW0nLCAxXSwgWzEwLCAnU3RkSFcnLCAnbnVtJywgbnVsbF0sIFsxMSwgJ1N0ZFZXJywgJ251bScsIG51bGxdLCBbWzEyLCAxMl0sICdTdGVtU25hcEgnLCAnZGVsdGEnLCBudWxsXSwgW1sxMiwgMTNdLCAnU3RlbVNuYXBWJywgJ2RlbHRhJywgbnVsbF0sIFtbMTIsIDE0XSwgJ0ZvcmNlQm9sZCcsICdudW0nLCAwXSwgW1sxMiwgMTddLCAnTGFuZ3VhZ2VHcm91cCcsICdudW0nLCAwXSwgW1sxMiwgMThdLCAnRXhwYW5zaW9uRmFjdG9yJywgJ251bScsIDAuMDZdLCBbWzEyLCAxOV0sICdpbml0aWFsUmFuZG9tU2VlZCcsICdudW0nLCAwXSwgWzIwLCAnZGVmYXVsdFdpZHRoWCcsICdudW0nLCAwXSwgWzIxLCAnbm9taW5hbFdpZHRoWCcsICdudW0nLCAwXSwgWzE5LCAnU3VicnMnLCAnb2Zmc2V0JywgbnVsbF1dO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGVzID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBDRkZQcml2YXRlRGljdChzdHJpbmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFibGVzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzID0gQ0ZGRGljdC5jcmVhdGVUYWJsZXMobGF5b3V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgQ0ZGRGljdC5jYWxsKHRoaXMsIHRhYmxlcywgc3RyaW5ncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YnJzSW5kZXggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQ0ZGUHJpdmF0ZURpY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDRkZEaWN0LnByb3RvdHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBDRkZQcml2YXRlRGljdDtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkNGRlByaXZhdGVEaWN0ID0gQ0ZGUHJpdmF0ZURpY3Q7XG4gICAgICAgICAgICAgICAgdmFyIENGRkNoYXJzZXRQcmVkZWZpbmVkVHlwZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIElTT19BRE9CRTogMCxcbiAgICAgICAgICAgICAgICAgICAgRVhQRVJUOiAxLFxuICAgICAgICAgICAgICAgICAgICBFWFBFUlRfU1VCU0VUOiAyXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBDRkZDaGFyc2V0ID0gZnVuY3Rpb24gQ0ZGQ2hhcnNldENsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENGRkNoYXJzZXQocHJlZGVmaW5lZCwgZm9ybWF0LCBjaGFyc2V0LCByYXcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJlZGVmaW5lZCA9IHByZWRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1hdCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnNldCA9IGNoYXJzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJhdyA9IHJhdztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBDRkZDaGFyc2V0O1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ0ZGQ2hhcnNldCA9IENGRkNoYXJzZXQ7XG5cbiAgICAgICAgICAgICAgICB2YXIgQ0ZGRW5jb2RpbmcgPSBmdW5jdGlvbiBDRkZFbmNvZGluZ0Nsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENGRkVuY29kaW5nKHByZWRlZmluZWQsIGZvcm1hdCwgZW5jb2RpbmcsIHJhdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVkZWZpbmVkID0gcHJlZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmNvZGluZyA9IGVuY29kaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yYXcgPSByYXc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0ZGRW5jb2Rpbmc7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIENGRkZEU2VsZWN0ID0gZnVuY3Rpb24gQ0ZGRkRTZWxlY3RDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBDRkZGRFNlbGVjdChmb3JtYXQsIGZkU2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1hdCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmRTZWxlY3QgPSBmZFNlbGVjdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENGRkZEU2VsZWN0LnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldEZESW5kZXg6IGZ1bmN0aW9uIENGRkZEU2VsZWN0X2dldChnbHlwaEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdseXBoSW5kZXggPCAwIHx8IGdseXBoSW5kZXggPj0gdGhpcy5mZFNlbGVjdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZkU2VsZWN0W2dseXBoSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0ZGRkRTZWxlY3Q7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5DRkZGRFNlbGVjdCA9IENGRkZEU2VsZWN0O1xuXG4gICAgICAgICAgICAgICAgdmFyIENGRk9mZnNldFRyYWNrZXIgPSBmdW5jdGlvbiBDRkZPZmZzZXRUcmFja2VyQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQ0ZGT2Zmc2V0VHJhY2tlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBDRkZPZmZzZXRUcmFja2VyLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVHJhY2tpbmc6IGZ1bmN0aW9uIENGRk9mZnNldFRyYWNrZXJfaXNUcmFja2luZyhrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5IGluIHRoaXMub2Zmc2V0cztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFjazogZnVuY3Rpb24gQ0ZGT2Zmc2V0VHJhY2tlcl90cmFjayhrZXksIGxvY2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSBpbiB0aGlzLm9mZnNldHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiQWxyZWFkeSB0cmFja2luZyBsb2NhdGlvbiBvZiBcIi5jb25jYXQoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXRzW2tleV0gPSBsb2NhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IGZ1bmN0aW9uIENGRk9mZnNldFRyYWNrZXJfb2Zmc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMub2Zmc2V0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldHNba2V5XSArPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RW50cnlMb2NhdGlvbjogZnVuY3Rpb24gQ0ZGT2Zmc2V0VHJhY2tlcl9zZXRFbnRyeUxvY2F0aW9uKGtleSwgdmFsdWVzLCBvdXRwdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gdGhpcy5vZmZzZXRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJOb3QgdHJhY2tpbmcgbG9jYXRpb24gb2YgXCIuY29uY2F0KGtleSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gb3V0cHV0LmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGFPZmZzZXQgPSB0aGlzLm9mZnNldHNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IDU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB2YWx1ZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0MCA9IGkgKiBzaXplICsgZGF0YU9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldDEgPSBvZmZzZXQwICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldDIgPSBvZmZzZXQwICsgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldDMgPSBvZmZzZXQwICsgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldDQgPSBvZmZzZXQwICsgNDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtvZmZzZXQwXSAhPT0gMHgxZCB8fCBkYXRhW29mZnNldDFdICE9PSAwIHx8IGRhdGFbb2Zmc2V0Ml0gIT09IDAgfHwgZGF0YVtvZmZzZXQzXSAhPT0gMCB8fCBkYXRhW29mZnNldDRdICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ3dyaXRpbmcgdG8gYW4gb2Zmc2V0IHRoYXQgaXMgbm90IGVtcHR5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0MF0gPSAweDFkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW29mZnNldDFdID0gdmFsdWUgPj4gMjQgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW29mZnNldDJdID0gdmFsdWUgPj4gMTYgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW29mZnNldDNdID0gdmFsdWUgPj4gOCAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0NF0gPSB2YWx1ZSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0ZGT2Zmc2V0VHJhY2tlcjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgQ0ZGQ29tcGlsZXIgPSBmdW5jdGlvbiBDRkZDb21waWxlckNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENGRkNvbXBpbGVyKGNmZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZmYgPSBjZmY7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBDRkZDb21waWxlci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlOiBmdW5jdGlvbiBDRkZDb21waWxlcl9jb21waWxlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZmYgPSB0aGlzLmNmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3V0cHV0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQ6IGZ1bmN0aW9uIENGRkNvbXBpbGVyX2FkZChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuY29uY2F0KGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLmRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGVyID0gdGhpcy5jb21waWxlSGVhZGVyKGNmZi5oZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hZGQoaGVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZUluZGV4ID0gdGhpcy5jb21waWxlTmFtZUluZGV4KGNmZi5uYW1lcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFkZChuYW1lSW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNmZi5pc0NJREZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNmZi50b3BEaWN0Lmhhc05hbWUoJ0ZvbnRNYXRyaXgnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2UgPSBjZmYudG9wRGljdC5nZXRCeU5hbWUoJ0ZvbnRNYXRyaXgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZi50b3BEaWN0LnJlbW92ZUJ5TmFtZSgnRm9udE1hdHJpeCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBjZmYuZmRBcnJheS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1YkRpY3QgPSBjZmYuZmRBcnJheVtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0cml4ID0gYmFzZS5zbGljZSgwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJEaWN0Lmhhc05hbWUoJ0ZvbnRNYXRyaXgnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXggPSBfdXRpbC5VdGlsLnRyYW5zZm9ybShtYXRyaXgsIHN1YkRpY3QuZ2V0QnlOYW1lKCdGb250TWF0cml4JykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YkRpY3Quc2V0QnlOYW1lKCdGb250TWF0cml4JywgbWF0cml4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZi50b3BEaWN0LnNldEJ5TmFtZSgnY2hhcnNldCcsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21waWxlZCA9IHRoaXMuY29tcGlsZVRvcERpY3RzKFtjZmYudG9wRGljdF0sIG91dHB1dC5sZW5ndGgsIGNmZi5pc0NJREZvbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hZGQoY29tcGlsZWQub3V0cHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9wRGljdFRyYWNrZXIgPSBjb21waWxlZC50cmFja2Vyc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyaW5nSW5kZXggPSB0aGlzLmNvbXBpbGVTdHJpbmdJbmRleChjZmYuc3RyaW5ncy5zdHJpbmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYWRkKHN0cmluZ0luZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsU3VickluZGV4ID0gdGhpcy5jb21waWxlSW5kZXgoY2ZmLmdsb2JhbFN1YnJJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFkZChnbG9iYWxTdWJySW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNmZi5lbmNvZGluZyAmJiBjZmYudG9wRGljdC5oYXNOYW1lKCdFbmNvZGluZycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZmYuZW5jb2RpbmcucHJlZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wRGljdFRyYWNrZXIuc2V0RW50cnlMb2NhdGlvbignRW5jb2RpbmcnLCBbY2ZmLmVuY29kaW5nLmZvcm1hdF0sIG91dHB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jb2RpbmcgPSB0aGlzLmNvbXBpbGVFbmNvZGluZyhjZmYuZW5jb2RpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wRGljdFRyYWNrZXIuc2V0RW50cnlMb2NhdGlvbignRW5jb2RpbmcnLCBbb3V0cHV0Lmxlbmd0aF0sIG91dHB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYWRkKGVuY29kaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyc2V0ID0gdGhpcy5jb21waWxlQ2hhcnNldChjZmYuY2hhcnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wRGljdFRyYWNrZXIuc2V0RW50cnlMb2NhdGlvbignY2hhcnNldCcsIFtvdXRwdXQubGVuZ3RoXSwgb3V0cHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYWRkKGNoYXJzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyU3RyaW5ncyA9IHRoaXMuY29tcGlsZUNoYXJTdHJpbmdzKGNmZi5jaGFyU3RyaW5ncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wRGljdFRyYWNrZXIuc2V0RW50cnlMb2NhdGlvbignQ2hhclN0cmluZ3MnLCBbb3V0cHV0Lmxlbmd0aF0sIG91dHB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFkZChjaGFyU3RyaW5ncyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ZmLmlzQ0lERm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BEaWN0VHJhY2tlci5zZXRFbnRyeUxvY2F0aW9uKCdGRFNlbGVjdCcsIFtvdXRwdXQubGVuZ3RoXSwgb3V0cHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZkU2VsZWN0ID0gdGhpcy5jb21waWxlRkRTZWxlY3QoY2ZmLmZkU2VsZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFkZChmZFNlbGVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkID0gdGhpcy5jb21waWxlVG9wRGljdHMoY2ZmLmZkQXJyYXksIG91dHB1dC5sZW5ndGgsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BEaWN0VHJhY2tlci5zZXRFbnRyeUxvY2F0aW9uKCdGREFycmF5JywgW291dHB1dC5sZW5ndGhdLCBvdXRwdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYWRkKGNvbXBpbGVkLm91dHB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250RGljdFRyYWNrZXJzID0gY29tcGlsZWQudHJhY2tlcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGlsZVByaXZhdGVEaWN0cyhjZmYuZmRBcnJheSwgZm9udERpY3RUcmFja2Vycywgb3V0cHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBpbGVQcml2YXRlRGljdHMoW2NmZi50b3BEaWN0XSwgW3RvcERpY3RUcmFja2VyXSwgb3V0cHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYWRkKFswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dC5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZU51bWJlcjogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfZW5jb2RlTnVtYmVyKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlRmxvYXQodmFsdWUpID09PSBwYXJzZUludCh2YWx1ZSwgMTApICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlSW50ZWdlcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlRmxvYXQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZUZsb2F0OiBmdW5jdGlvbiBDRkZDb21waWxlcl9lbmNvZGVGbG9hdChudW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBudW0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IC9cXC4oXFxkKj8pKD86OXs1LDIwfXwwezUsMjB9KVxcZHswLDJ9KD86ZSguKyl8JCkvLmV4ZWModmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVwc2lsb24gPSBwYXJzZUZsb2F0KCcxZScgKyAoKG1bMl0gPyArbVsyXSA6IDApICsgbVsxXS5sZW5ndGgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAoTWF0aC5yb3VuZChudW0gKiBlcHNpbG9uKSAvIGVwc2lsb24pLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5pYmJsZXMgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaWk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHZhbHVlLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSB2YWx1ZVtpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9PT0gJ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWJibGVzICs9IHZhbHVlWysraV0gPT09ICctJyA/ICdjJyA6ICdiJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhID09PSAnLicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pYmJsZXMgKz0gJ2EnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGEgPT09ICctJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmliYmxlcyArPSAnZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWJibGVzICs9IGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWJibGVzICs9IG5pYmJsZXMubGVuZ3RoICYgMSA/ICdmJyA6ICdmZic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG91dCA9IFszMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IG5pYmJsZXMubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHVzaChwYXJzZUludChuaWJibGVzLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVJbnRlZ2VyOiBmdW5jdGlvbiBDRkZDb21waWxlcl9lbmNvZGVJbnRlZ2VyKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPj0gLTEwNyAmJiB2YWx1ZSA8PSAxMDcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IFt2YWx1ZSArIDEzOV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAxMDggJiYgdmFsdWUgPD0gMTEzMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC0gMTA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gWyh2YWx1ZSA+PiA4KSArIDI0NywgdmFsdWUgJiAweEZGXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID49IC0xMTMxICYmIHZhbHVlIDw9IC0xMDgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAtdmFsdWUgLSAxMDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBbKHZhbHVlID4+IDgpICsgMjUxLCB2YWx1ZSAmIDB4RkZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gLTMyNzY4ICYmIHZhbHVlIDw9IDMyNzY3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBbMHgxYywgdmFsdWUgPj4gOCAmIDB4RkYsIHZhbHVlICYgMHhGRl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IFsweDFkLCB2YWx1ZSA+PiAyNCAmIDB4RkYsIHZhbHVlID4+IDE2ICYgMHhGRiwgdmFsdWUgPj4gOCAmIDB4RkYsIHZhbHVlICYgMHhGRl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZUhlYWRlcjogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfY29tcGlsZUhlYWRlcihoZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2hlYWRlci5tYWpvciwgaGVhZGVyLm1pbm9yLCBoZWFkZXIuaGRyU2l6ZSwgaGVhZGVyLm9mZlNpemVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVOYW1lSW5kZXg6IGZ1bmN0aW9uIENGRkNvbXBpbGVyX2NvbXBpbGVOYW1lSW5kZXgobmFtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZUluZGV4ID0gbmV3IENGRkluZGV4KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBuYW1lcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gbmFtZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1pbihuYW1lLmxlbmd0aCwgMTI3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNhbml0aXplZE5hbWUgPSBuZXcgQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhciA9IG5hbWVbal07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFyIDwgJyEnIHx8IGNoYXIgPiAnficgfHwgY2hhciA9PT0gJ1snIHx8IGNoYXIgPT09ICddJyB8fCBjaGFyID09PSAnKCcgfHwgY2hhciA9PT0gJyknIHx8IGNoYXIgPT09ICd7JyB8fCBjaGFyID09PSAnfScgfHwgY2hhciA9PT0gJzwnIHx8IGNoYXIgPT09ICc+JyB8fCBjaGFyID09PSAnLycgfHwgY2hhciA9PT0gJyUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciA9ICdfJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FuaXRpemVkTmFtZVtqXSA9IGNoYXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW5pdGl6ZWROYW1lID0gc2FuaXRpemVkTmFtZS5qb2luKCcnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2FuaXRpemVkTmFtZSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbml0aXplZE5hbWUgPSAnQmFkX0ZvbnRfTmFtZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lSW5kZXguYWRkKCgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShzYW5pdGl6ZWROYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGlsZUluZGV4KG5hbWVJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZVRvcERpY3RzOiBmdW5jdGlvbiBDRkZDb21waWxlcl9jb21waWxlVG9wRGljdHMoZGljdHMsIGxlbmd0aCwgcmVtb3ZlQ2lkS2V5cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250RGljdFRyYWNrZXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZkQXJyYXlJbmRleCA9IG5ldyBDRkZJbmRleCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZGljdHMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udERpY3QgPSBkaWN0c1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVtb3ZlQ2lkS2V5cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udERpY3QucmVtb3ZlQnlOYW1lKCdDSURGb250VmVyc2lvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udERpY3QucmVtb3ZlQnlOYW1lKCdDSURGb250UmV2aXNpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREaWN0LnJlbW92ZUJ5TmFtZSgnQ0lERm9udFR5cGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREaWN0LnJlbW92ZUJ5TmFtZSgnQ0lEQ291bnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREaWN0LnJlbW92ZUJ5TmFtZSgnVUlEQmFzZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnREaWN0VHJhY2tlciA9IG5ldyBDRkZPZmZzZXRUcmFja2VyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250RGljdERhdGEgPSB0aGlzLmNvbXBpbGVEaWN0KGZvbnREaWN0LCBmb250RGljdFRyYWNrZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RGljdFRyYWNrZXJzLnB1c2goZm9udERpY3RUcmFja2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRBcnJheUluZGV4LmFkZChmb250RGljdERhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RGljdFRyYWNrZXIub2Zmc2V0KGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRBcnJheUluZGV4ID0gdGhpcy5jb21waWxlSW5kZXgoZmRBcnJheUluZGV4LCBmb250RGljdFRyYWNrZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja2VyczogZm9udERpY3RUcmFja2VycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0OiBmZEFycmF5SW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVQcml2YXRlRGljdHM6IGZ1bmN0aW9uIENGRkNvbXBpbGVyX2NvbXBpbGVQcml2YXRlRGljdHMoZGljdHMsIHRyYWNrZXJzLCBvdXRwdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBkaWN0cy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250RGljdCA9IGRpY3RzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJpdmF0ZURpY3QgPSBmb250RGljdC5wcml2YXRlRGljdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByaXZhdGVEaWN0IHx8ICFmb250RGljdC5oYXNOYW1lKCdQcml2YXRlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignVGhlcmUgbXVzdCBiZSBhIHByaXZhdGUgZGljdGlvbmFyeS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcml2YXRlRGljdFRyYWNrZXIgPSBuZXcgQ0ZGT2Zmc2V0VHJhY2tlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJpdmF0ZURpY3REYXRhID0gdGhpcy5jb21waWxlRGljdChwcml2YXRlRGljdCwgcHJpdmF0ZURpY3RUcmFja2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG91dHB1dExlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZhdGVEaWN0VHJhY2tlci5vZmZzZXQob3V0cHV0TGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByaXZhdGVEaWN0RGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dExlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja2Vyc1tpXS5zZXRFbnRyeUxvY2F0aW9uKCdQcml2YXRlJywgW3ByaXZhdGVEaWN0RGF0YS5sZW5ndGgsIG91dHB1dExlbmd0aF0sIG91dHB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hZGQocHJpdmF0ZURpY3REYXRhKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJpdmF0ZURpY3Quc3VicnNJbmRleCAmJiBwcml2YXRlRGljdC5oYXNOYW1lKCdTdWJycycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VicnMgPSB0aGlzLmNvbXBpbGVJbmRleChwcml2YXRlRGljdC5zdWJyc0luZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZhdGVEaWN0VHJhY2tlci5zZXRFbnRyeUxvY2F0aW9uKCdTdWJycycsIFtwcml2YXRlRGljdERhdGEubGVuZ3RoXSwgb3V0cHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hZGQoc3VicnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVEaWN0OiBmdW5jdGlvbiBDRkZDb21waWxlcl9jb21waWxlRGljdChkaWN0LCBvZmZzZXRUcmFja2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG91dCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcmRlciA9IGRpY3Qub3JkZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGVyLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBvcmRlcltpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gZGljdC52YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBkaWN0LnZhbHVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZXMgPSBkaWN0LnR5cGVzW2tleV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHR5cGVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMgPSBbdHlwZXNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IFt2YWx1ZXNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gdHlwZXMubGVuZ3RoOyBqIDwgamo7ICsraikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSB0eXBlc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHZhbHVlc1tqXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbnVtJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzaWQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPSBvdXQuY29uY2F0KHRoaXMuZW5jb2RlTnVtYmVyKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnb2Zmc2V0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBkaWN0LmtleVRvTmFtZU1hcFtrZXldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb2Zmc2V0VHJhY2tlci5pc1RyYWNraW5nKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRUcmFja2VyLnRyYWNrKG5hbWUsIG91dC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ID0gb3V0LmNvbmNhdChbMHgxZCwgMCwgMCwgMCwgMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdkZWx0YSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA9IG91dC5jb25jYXQodGhpcy5lbmNvZGVOdW1iZXIodmFsdWUpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMSwga2sgPSB2YWx1ZXMubGVuZ3RoOyBrIDwga2s7ICsraykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ID0gb3V0LmNvbmNhdCh0aGlzLmVuY29kZU51bWJlcih2YWx1ZXNba10pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVW5rbm93biBkYXRhIHR5cGUgb2YgXCIuY29uY2F0KHR5cGUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA9IG91dC5jb25jYXQoZGljdC5vcGNvZGVzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZVN0cmluZ0luZGV4OiBmdW5jdGlvbiBDRkZDb21waWxlcl9jb21waWxlU3RyaW5nSW5kZXgoc3RyaW5ncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJpbmdJbmRleCA9IG5ldyBDRkZJbmRleCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gc3RyaW5ncy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0luZGV4LmFkZCgoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoc3RyaW5nc1tpXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVJbmRleChzdHJpbmdJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdsb2JhbFN1YnJJbmRleDogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfY29tcGlsZUdsb2JhbFN1YnJJbmRleCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsU3VickluZGV4ID0gdGhpcy5jZmYuZ2xvYmFsU3VickluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3V0LndyaXRlQnl0ZUFycmF5KHRoaXMuY29tcGlsZUluZGV4KGdsb2JhbFN1YnJJbmRleCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVDaGFyU3RyaW5nczogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfY29tcGlsZUNoYXJTdHJpbmdzKGNoYXJTdHJpbmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJTdHJpbmdzSW5kZXggPSBuZXcgQ0ZGSW5kZXgoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhclN0cmluZ3MuY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGggPSBjaGFyU3RyaW5ncy5nZXQoaSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdseXBoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhclN0cmluZ3NJbmRleC5hZGQobmV3IFVpbnQ4QXJyYXkoWzB4OEIsIDB4MEVdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJTdHJpbmdzSW5kZXguYWRkKGdseXBoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb21waWxlSW5kZXgoY2hhclN0cmluZ3NJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZUNoYXJzZXQ6IGZ1bmN0aW9uIENGRkNvbXBpbGVyX2NvbXBpbGVDaGFyc2V0KGNoYXJzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gMSArICh0aGlzLmNmZi5jaGFyU3RyaW5ncy5jb3VudCAtIDEpICogMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3V0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShvdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVFbmNvZGluZzogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfY29tcGlsZUVuY29kaW5nKGVuY29kaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGlsZVR5cGVkQXJyYXkoZW5jb2RpbmcucmF3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlRkRTZWxlY3Q6IGZ1bmN0aW9uIENGRkNvbXBpbGVyX2NvbXBpbGVGRFNlbGVjdChmZFNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JtYXQgPSBmZFNlbGVjdC5mb3JtYXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG91dCwgaTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA9IG5ldyBVaW50OEFycmF5KDEgKyBmZFNlbGVjdC5mZFNlbGVjdC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0WzBdID0gZm9ybWF0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmRTZWxlY3QuZmRTZWxlY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRbaSArIDFdID0gZmRTZWxlY3QuZmRTZWxlY3RbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFzdEZEID0gZmRTZWxlY3QuZmRTZWxlY3RbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2VzID0gW2Zvcm1hdCwgMCwgMCwgc3RhcnQgPj4gOCAmIDB4RkYsIHN0YXJ0ICYgMHhGRiwgbGFzdEZEXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IGZkU2VsZWN0LmZkU2VsZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRGRCA9IGZkU2VsZWN0LmZkU2VsZWN0W2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGRCAhPT0gbGFzdEZEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlcy5wdXNoKGkgPj4gOCAmIDB4RkYsIGkgJiAweEZGLCBjdXJyZW50RkQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0RkQgPSBjdXJyZW50RkQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtUmFuZ2VzID0gKHJhbmdlcy5sZW5ndGggLSAzKSAvIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXNbMV0gPSBudW1SYW5nZXMgPj4gOCAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXNbMl0gPSBudW1SYW5nZXMgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2goaSA+PiA4ICYgMHhGRiwgaSAmIDB4RkYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ID0gbmV3IFVpbnQ4QXJyYXkocmFuZ2VzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVUeXBlZEFycmF5KG91dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZVR5cGVkQXJyYXk6IGZ1bmN0aW9uIENGRkNvbXBpbGVyX2NvbXBpbGVUeXBlZEFycmF5KGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3V0ID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBkYXRhLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0W2ldID0gZGF0YVtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVJbmRleDogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfY29tcGlsZUluZGV4KGluZGV4LCB0cmFja2Vycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrZXJzID0gdHJhY2tlcnMgfHwgW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdHMgPSBpbmRleC5vYmplY3RzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IG9iamVjdHMubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMCwgMCwgMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBbY291bnQgPj4gOCAmIDB4RkYsIGNvdW50ICYgMHhmZl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RPZmZzZXQgPSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE9mZnNldCArPSBvYmplY3RzW2ldLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0U2l6ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0T2Zmc2V0IDwgMHgxMDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0U2l6ZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0T2Zmc2V0IDwgMHgxMDAwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRTaXplID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3RPZmZzZXQgPCAweDEwMDAwMDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0U2l6ZSA9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0U2l6ZSA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wdXNoKG9mZnNldFNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWxhdGl2ZU9mZnNldCA9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQgKyAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldFNpemUgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaChyZWxhdGl2ZU9mZnNldCAmIDB4RkYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldFNpemUgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaChyZWxhdGl2ZU9mZnNldCA+PiA4ICYgMHhGRiwgcmVsYXRpdmVPZmZzZXQgJiAweEZGKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvZmZzZXRTaXplID09PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnB1c2gocmVsYXRpdmVPZmZzZXQgPj4gMTYgJiAweEZGLCByZWxhdGl2ZU9mZnNldCA+PiA4ICYgMHhGRiwgcmVsYXRpdmVPZmZzZXQgJiAweEZGKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaChyZWxhdGl2ZU9mZnNldCA+Pj4gMjQgJiAweEZGLCByZWxhdGl2ZU9mZnNldCA+PiAxNiAmIDB4RkYsIHJlbGF0aXZlT2Zmc2V0ID4+IDggJiAweEZGLCByZWxhdGl2ZU9mZnNldCAmIDB4RkYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdHNbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlT2Zmc2V0ICs9IG9iamVjdHNbaV0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYWNrZXJzW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja2Vyc1tpXS5vZmZzZXQoZGF0YS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gb2JqZWN0c1tpXS5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnB1c2gob2JqZWN0c1tpXVtqXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENGRkNvbXBpbGVyO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ0ZGQ29tcGlsZXIgPSBDRkZDb21waWxlcjtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTc1ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5FeHBlcnRTdWJzZXRDaGFyc2V0ID0gZXhwb3J0cy5FeHBlcnRDaGFyc2V0ID0gZXhwb3J0cy5JU09BZG9iZUNoYXJzZXQgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgdmFyIElTT0Fkb2JlQ2hhcnNldCA9IFsnLm5vdGRlZicsICdzcGFjZScsICdleGNsYW0nLCAncXVvdGVkYmwnLCAnbnVtYmVyc2lnbicsICdkb2xsYXInLCAncGVyY2VudCcsICdhbXBlcnNhbmQnLCAncXVvdGVyaWdodCcsICdwYXJlbmxlZnQnLCAncGFyZW5yaWdodCcsICdhc3RlcmlzaycsICdwbHVzJywgJ2NvbW1hJywgJ2h5cGhlbicsICdwZXJpb2QnLCAnc2xhc2gnLCAnemVybycsICdvbmUnLCAndHdvJywgJ3RocmVlJywgJ2ZvdXInLCAnZml2ZScsICdzaXgnLCAnc2V2ZW4nLCAnZWlnaHQnLCAnbmluZScsICdjb2xvbicsICdzZW1pY29sb24nLCAnbGVzcycsICdlcXVhbCcsICdncmVhdGVyJywgJ3F1ZXN0aW9uJywgJ2F0JywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJywgJ0cnLCAnSCcsICdJJywgJ0onLCAnSycsICdMJywgJ00nLCAnTicsICdPJywgJ1AnLCAnUScsICdSJywgJ1MnLCAnVCcsICdVJywgJ1YnLCAnVycsICdYJywgJ1knLCAnWicsICdicmFja2V0bGVmdCcsICdiYWNrc2xhc2gnLCAnYnJhY2tldHJpZ2h0JywgJ2FzY2lpY2lyY3VtJywgJ3VuZGVyc2NvcmUnLCAncXVvdGVsZWZ0JywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ2cnLCAnaCcsICdpJywgJ2onLCAnaycsICdsJywgJ20nLCAnbicsICdvJywgJ3AnLCAncScsICdyJywgJ3MnLCAndCcsICd1JywgJ3YnLCAndycsICd4JywgJ3knLCAneicsICdicmFjZWxlZnQnLCAnYmFyJywgJ2JyYWNlcmlnaHQnLCAnYXNjaWl0aWxkZScsICdleGNsYW1kb3duJywgJ2NlbnQnLCAnc3RlcmxpbmcnLCAnZnJhY3Rpb24nLCAneWVuJywgJ2Zsb3JpbicsICdzZWN0aW9uJywgJ2N1cnJlbmN5JywgJ3F1b3Rlc2luZ2xlJywgJ3F1b3RlZGJsbGVmdCcsICdndWlsbGVtb3RsZWZ0JywgJ2d1aWxzaW5nbGxlZnQnLCAnZ3VpbHNpbmdscmlnaHQnLCAnZmknLCAnZmwnLCAnZW5kYXNoJywgJ2RhZ2dlcicsICdkYWdnZXJkYmwnLCAncGVyaW9kY2VudGVyZWQnLCAncGFyYWdyYXBoJywgJ2J1bGxldCcsICdxdW90ZXNpbmdsYmFzZScsICdxdW90ZWRibGJhc2UnLCAncXVvdGVkYmxyaWdodCcsICdndWlsbGVtb3RyaWdodCcsICdlbGxpcHNpcycsICdwZXJ0aG91c2FuZCcsICdxdWVzdGlvbmRvd24nLCAnZ3JhdmUnLCAnYWN1dGUnLCAnY2lyY3VtZmxleCcsICd0aWxkZScsICdtYWNyb24nLCAnYnJldmUnLCAnZG90YWNjZW50JywgJ2RpZXJlc2lzJywgJ3JpbmcnLCAnY2VkaWxsYScsICdodW5nYXJ1bWxhdXQnLCAnb2dvbmVrJywgJ2Nhcm9uJywgJ2VtZGFzaCcsICdBRScsICdvcmRmZW1pbmluZScsICdMc2xhc2gnLCAnT3NsYXNoJywgJ09FJywgJ29yZG1hc2N1bGluZScsICdhZScsICdkb3RsZXNzaScsICdsc2xhc2gnLCAnb3NsYXNoJywgJ29lJywgJ2dlcm1hbmRibHMnLCAnb25lc3VwZXJpb3InLCAnbG9naWNhbG5vdCcsICdtdScsICd0cmFkZW1hcmsnLCAnRXRoJywgJ29uZWhhbGYnLCAncGx1c21pbnVzJywgJ1Rob3JuJywgJ29uZXF1YXJ0ZXInLCAnZGl2aWRlJywgJ2Jyb2tlbmJhcicsICdkZWdyZWUnLCAndGhvcm4nLCAndGhyZWVxdWFydGVycycsICd0d29zdXBlcmlvcicsICdyZWdpc3RlcmVkJywgJ21pbnVzJywgJ2V0aCcsICdtdWx0aXBseScsICd0aHJlZXN1cGVyaW9yJywgJ2NvcHlyaWdodCcsICdBYWN1dGUnLCAnQWNpcmN1bWZsZXgnLCAnQWRpZXJlc2lzJywgJ0FncmF2ZScsICdBcmluZycsICdBdGlsZGUnLCAnQ2NlZGlsbGEnLCAnRWFjdXRlJywgJ0VjaXJjdW1mbGV4JywgJ0VkaWVyZXNpcycsICdFZ3JhdmUnLCAnSWFjdXRlJywgJ0ljaXJjdW1mbGV4JywgJ0lkaWVyZXNpcycsICdJZ3JhdmUnLCAnTnRpbGRlJywgJ09hY3V0ZScsICdPY2lyY3VtZmxleCcsICdPZGllcmVzaXMnLCAnT2dyYXZlJywgJ090aWxkZScsICdTY2Fyb24nLCAnVWFjdXRlJywgJ1VjaXJjdW1mbGV4JywgJ1VkaWVyZXNpcycsICdVZ3JhdmUnLCAnWWFjdXRlJywgJ1lkaWVyZXNpcycsICdaY2Fyb24nLCAnYWFjdXRlJywgJ2FjaXJjdW1mbGV4JywgJ2FkaWVyZXNpcycsICdhZ3JhdmUnLCAnYXJpbmcnLCAnYXRpbGRlJywgJ2NjZWRpbGxhJywgJ2VhY3V0ZScsICdlY2lyY3VtZmxleCcsICdlZGllcmVzaXMnLCAnZWdyYXZlJywgJ2lhY3V0ZScsICdpY2lyY3VtZmxleCcsICdpZGllcmVzaXMnLCAnaWdyYXZlJywgJ250aWxkZScsICdvYWN1dGUnLCAnb2NpcmN1bWZsZXgnLCAnb2RpZXJlc2lzJywgJ29ncmF2ZScsICdvdGlsZGUnLCAnc2Nhcm9uJywgJ3VhY3V0ZScsICd1Y2lyY3VtZmxleCcsICd1ZGllcmVzaXMnLCAndWdyYXZlJywgJ3lhY3V0ZScsICd5ZGllcmVzaXMnLCAnemNhcm9uJ107XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5JU09BZG9iZUNoYXJzZXQgPSBJU09BZG9iZUNoYXJzZXQ7XG4gICAgICAgICAgICAgICAgdmFyIEV4cGVydENoYXJzZXQgPSBbJy5ub3RkZWYnLCAnc3BhY2UnLCAnZXhjbGFtc21hbGwnLCAnSHVuZ2FydW1sYXV0c21hbGwnLCAnZG9sbGFyb2xkc3R5bGUnLCAnZG9sbGFyc3VwZXJpb3InLCAnYW1wZXJzYW5kc21hbGwnLCAnQWN1dGVzbWFsbCcsICdwYXJlbmxlZnRzdXBlcmlvcicsICdwYXJlbnJpZ2h0c3VwZXJpb3InLCAndHdvZG90ZW5sZWFkZXInLCAnb25lZG90ZW5sZWFkZXInLCAnY29tbWEnLCAnaHlwaGVuJywgJ3BlcmlvZCcsICdmcmFjdGlvbicsICd6ZXJvb2xkc3R5bGUnLCAnb25lb2xkc3R5bGUnLCAndHdvb2xkc3R5bGUnLCAndGhyZWVvbGRzdHlsZScsICdmb3Vyb2xkc3R5bGUnLCAnZml2ZW9sZHN0eWxlJywgJ3NpeG9sZHN0eWxlJywgJ3NldmVub2xkc3R5bGUnLCAnZWlnaHRvbGRzdHlsZScsICduaW5lb2xkc3R5bGUnLCAnY29sb24nLCAnc2VtaWNvbG9uJywgJ2NvbW1hc3VwZXJpb3InLCAndGhyZWVxdWFydGVyc2VtZGFzaCcsICdwZXJpb2RzdXBlcmlvcicsICdxdWVzdGlvbnNtYWxsJywgJ2FzdXBlcmlvcicsICdic3VwZXJpb3InLCAnY2VudHN1cGVyaW9yJywgJ2RzdXBlcmlvcicsICdlc3VwZXJpb3InLCAnaXN1cGVyaW9yJywgJ2xzdXBlcmlvcicsICdtc3VwZXJpb3InLCAnbnN1cGVyaW9yJywgJ29zdXBlcmlvcicsICdyc3VwZXJpb3InLCAnc3N1cGVyaW9yJywgJ3RzdXBlcmlvcicsICdmZicsICdmaScsICdmbCcsICdmZmknLCAnZmZsJywgJ3BhcmVubGVmdGluZmVyaW9yJywgJ3BhcmVucmlnaHRpbmZlcmlvcicsICdDaXJjdW1mbGV4c21hbGwnLCAnaHlwaGVuc3VwZXJpb3InLCAnR3JhdmVzbWFsbCcsICdBc21hbGwnLCAnQnNtYWxsJywgJ0NzbWFsbCcsICdEc21hbGwnLCAnRXNtYWxsJywgJ0ZzbWFsbCcsICdHc21hbGwnLCAnSHNtYWxsJywgJ0lzbWFsbCcsICdKc21hbGwnLCAnS3NtYWxsJywgJ0xzbWFsbCcsICdNc21hbGwnLCAnTnNtYWxsJywgJ09zbWFsbCcsICdQc21hbGwnLCAnUXNtYWxsJywgJ1JzbWFsbCcsICdTc21hbGwnLCAnVHNtYWxsJywgJ1VzbWFsbCcsICdWc21hbGwnLCAnV3NtYWxsJywgJ1hzbWFsbCcsICdZc21hbGwnLCAnWnNtYWxsJywgJ2NvbG9ubW9uZXRhcnknLCAnb25lZml0dGVkJywgJ3J1cGlhaCcsICdUaWxkZXNtYWxsJywgJ2V4Y2xhbWRvd25zbWFsbCcsICdjZW50b2xkc3R5bGUnLCAnTHNsYXNoc21hbGwnLCAnU2Nhcm9uc21hbGwnLCAnWmNhcm9uc21hbGwnLCAnRGllcmVzaXNzbWFsbCcsICdCcmV2ZXNtYWxsJywgJ0Nhcm9uc21hbGwnLCAnRG90YWNjZW50c21hbGwnLCAnTWFjcm9uc21hbGwnLCAnZmlndXJlZGFzaCcsICdoeXBoZW5pbmZlcmlvcicsICdPZ29uZWtzbWFsbCcsICdSaW5nc21hbGwnLCAnQ2VkaWxsYXNtYWxsJywgJ29uZXF1YXJ0ZXInLCAnb25laGFsZicsICd0aHJlZXF1YXJ0ZXJzJywgJ3F1ZXN0aW9uZG93bnNtYWxsJywgJ29uZWVpZ2h0aCcsICd0aHJlZWVpZ2h0aHMnLCAnZml2ZWVpZ2h0aHMnLCAnc2V2ZW5laWdodGhzJywgJ29uZXRoaXJkJywgJ3R3b3RoaXJkcycsICd6ZXJvc3VwZXJpb3InLCAnb25lc3VwZXJpb3InLCAndHdvc3VwZXJpb3InLCAndGhyZWVzdXBlcmlvcicsICdmb3Vyc3VwZXJpb3InLCAnZml2ZXN1cGVyaW9yJywgJ3NpeHN1cGVyaW9yJywgJ3NldmVuc3VwZXJpb3InLCAnZWlnaHRzdXBlcmlvcicsICduaW5lc3VwZXJpb3InLCAnemVyb2luZmVyaW9yJywgJ29uZWluZmVyaW9yJywgJ3R3b2luZmVyaW9yJywgJ3RocmVlaW5mZXJpb3InLCAnZm91cmluZmVyaW9yJywgJ2ZpdmVpbmZlcmlvcicsICdzaXhpbmZlcmlvcicsICdzZXZlbmluZmVyaW9yJywgJ2VpZ2h0aW5mZXJpb3InLCAnbmluZWluZmVyaW9yJywgJ2NlbnRpbmZlcmlvcicsICdkb2xsYXJpbmZlcmlvcicsICdwZXJpb2RpbmZlcmlvcicsICdjb21tYWluZmVyaW9yJywgJ0FncmF2ZXNtYWxsJywgJ0FhY3V0ZXNtYWxsJywgJ0FjaXJjdW1mbGV4c21hbGwnLCAnQXRpbGRlc21hbGwnLCAnQWRpZXJlc2lzc21hbGwnLCAnQXJpbmdzbWFsbCcsICdBRXNtYWxsJywgJ0NjZWRpbGxhc21hbGwnLCAnRWdyYXZlc21hbGwnLCAnRWFjdXRlc21hbGwnLCAnRWNpcmN1bWZsZXhzbWFsbCcsICdFZGllcmVzaXNzbWFsbCcsICdJZ3JhdmVzbWFsbCcsICdJYWN1dGVzbWFsbCcsICdJY2lyY3VtZmxleHNtYWxsJywgJ0lkaWVyZXNpc3NtYWxsJywgJ0V0aHNtYWxsJywgJ050aWxkZXNtYWxsJywgJ09ncmF2ZXNtYWxsJywgJ09hY3V0ZXNtYWxsJywgJ09jaXJjdW1mbGV4c21hbGwnLCAnT3RpbGRlc21hbGwnLCAnT2RpZXJlc2lzc21hbGwnLCAnT0VzbWFsbCcsICdPc2xhc2hzbWFsbCcsICdVZ3JhdmVzbWFsbCcsICdVYWN1dGVzbWFsbCcsICdVY2lyY3VtZmxleHNtYWxsJywgJ1VkaWVyZXNpc3NtYWxsJywgJ1lhY3V0ZXNtYWxsJywgJ1Rob3Juc21hbGwnLCAnWWRpZXJlc2lzc21hbGwnXTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkV4cGVydENoYXJzZXQgPSBFeHBlcnRDaGFyc2V0O1xuICAgICAgICAgICAgICAgIHZhciBFeHBlcnRTdWJzZXRDaGFyc2V0ID0gWycubm90ZGVmJywgJ3NwYWNlJywgJ2RvbGxhcm9sZHN0eWxlJywgJ2RvbGxhcnN1cGVyaW9yJywgJ3BhcmVubGVmdHN1cGVyaW9yJywgJ3BhcmVucmlnaHRzdXBlcmlvcicsICd0d29kb3RlbmxlYWRlcicsICdvbmVkb3RlbmxlYWRlcicsICdjb21tYScsICdoeXBoZW4nLCAncGVyaW9kJywgJ2ZyYWN0aW9uJywgJ3plcm9vbGRzdHlsZScsICdvbmVvbGRzdHlsZScsICd0d29vbGRzdHlsZScsICd0aHJlZW9sZHN0eWxlJywgJ2ZvdXJvbGRzdHlsZScsICdmaXZlb2xkc3R5bGUnLCAnc2l4b2xkc3R5bGUnLCAnc2V2ZW5vbGRzdHlsZScsICdlaWdodG9sZHN0eWxlJywgJ25pbmVvbGRzdHlsZScsICdjb2xvbicsICdzZW1pY29sb24nLCAnY29tbWFzdXBlcmlvcicsICd0aHJlZXF1YXJ0ZXJzZW1kYXNoJywgJ3BlcmlvZHN1cGVyaW9yJywgJ2FzdXBlcmlvcicsICdic3VwZXJpb3InLCAnY2VudHN1cGVyaW9yJywgJ2RzdXBlcmlvcicsICdlc3VwZXJpb3InLCAnaXN1cGVyaW9yJywgJ2xzdXBlcmlvcicsICdtc3VwZXJpb3InLCAnbnN1cGVyaW9yJywgJ29zdXBlcmlvcicsICdyc3VwZXJpb3InLCAnc3N1cGVyaW9yJywgJ3RzdXBlcmlvcicsICdmZicsICdmaScsICdmbCcsICdmZmknLCAnZmZsJywgJ3BhcmVubGVmdGluZmVyaW9yJywgJ3BhcmVucmlnaHRpbmZlcmlvcicsICdoeXBoZW5zdXBlcmlvcicsICdjb2xvbm1vbmV0YXJ5JywgJ29uZWZpdHRlZCcsICdydXBpYWgnLCAnY2VudG9sZHN0eWxlJywgJ2ZpZ3VyZWRhc2gnLCAnaHlwaGVuaW5mZXJpb3InLCAnb25lcXVhcnRlcicsICdvbmVoYWxmJywgJ3RocmVlcXVhcnRlcnMnLCAnb25lZWlnaHRoJywgJ3RocmVlZWlnaHRocycsICdmaXZlZWlnaHRocycsICdzZXZlbmVpZ2h0aHMnLCAnb25ldGhpcmQnLCAndHdvdGhpcmRzJywgJ3plcm9zdXBlcmlvcicsICdvbmVzdXBlcmlvcicsICd0d29zdXBlcmlvcicsICd0aHJlZXN1cGVyaW9yJywgJ2ZvdXJzdXBlcmlvcicsICdmaXZlc3VwZXJpb3InLCAnc2l4c3VwZXJpb3InLCAnc2V2ZW5zdXBlcmlvcicsICdlaWdodHN1cGVyaW9yJywgJ25pbmVzdXBlcmlvcicsICd6ZXJvaW5mZXJpb3InLCAnb25laW5mZXJpb3InLCAndHdvaW5mZXJpb3InLCAndGhyZWVpbmZlcmlvcicsICdmb3VyaW5mZXJpb3InLCAnZml2ZWluZmVyaW9yJywgJ3NpeGluZmVyaW9yJywgJ3NldmVuaW5mZXJpb3InLCAnZWlnaHRpbmZlcmlvcicsICduaW5laW5mZXJpb3InLCAnY2VudGluZmVyaW9yJywgJ2RvbGxhcmluZmVyaW9yJywgJ3BlcmlvZGluZmVyaW9yJywgJ2NvbW1haW5mZXJpb3InXTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkV4cGVydFN1YnNldENoYXJzZXQgPSBFeHBlcnRTdWJzZXRDaGFyc2V0O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNzYgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmdldEVuY29kaW5nID0gZ2V0RW5jb2Rpbmc7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5FeHBlcnRFbmNvZGluZyA9IGV4cG9ydHMuWmFwZkRpbmdiYXRzRW5jb2RpbmcgPSBleHBvcnRzLlN5bWJvbFNldEVuY29kaW5nID0gZXhwb3J0cy5NYWNSb21hbkVuY29kaW5nID0gZXhwb3J0cy5TdGFuZGFyZEVuY29kaW5nID0gZXhwb3J0cy5XaW5BbnNpRW5jb2RpbmcgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgdmFyIEV4cGVydEVuY29kaW5nID0gWycnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJ3NwYWNlJywgJ2V4Y2xhbXNtYWxsJywgJ0h1bmdhcnVtbGF1dHNtYWxsJywgJycsICdkb2xsYXJvbGRzdHlsZScsICdkb2xsYXJzdXBlcmlvcicsICdhbXBlcnNhbmRzbWFsbCcsICdBY3V0ZXNtYWxsJywgJ3BhcmVubGVmdHN1cGVyaW9yJywgJ3BhcmVucmlnaHRzdXBlcmlvcicsICd0d29kb3RlbmxlYWRlcicsICdvbmVkb3RlbmxlYWRlcicsICdjb21tYScsICdoeXBoZW4nLCAncGVyaW9kJywgJ2ZyYWN0aW9uJywgJ3plcm9vbGRzdHlsZScsICdvbmVvbGRzdHlsZScsICd0d29vbGRzdHlsZScsICd0aHJlZW9sZHN0eWxlJywgJ2ZvdXJvbGRzdHlsZScsICdmaXZlb2xkc3R5bGUnLCAnc2l4b2xkc3R5bGUnLCAnc2V2ZW5vbGRzdHlsZScsICdlaWdodG9sZHN0eWxlJywgJ25pbmVvbGRzdHlsZScsICdjb2xvbicsICdzZW1pY29sb24nLCAnY29tbWFzdXBlcmlvcicsICd0aHJlZXF1YXJ0ZXJzZW1kYXNoJywgJ3BlcmlvZHN1cGVyaW9yJywgJ3F1ZXN0aW9uc21hbGwnLCAnJywgJ2FzdXBlcmlvcicsICdic3VwZXJpb3InLCAnY2VudHN1cGVyaW9yJywgJ2RzdXBlcmlvcicsICdlc3VwZXJpb3InLCAnJywgJycsICcnLCAnaXN1cGVyaW9yJywgJycsICcnLCAnbHN1cGVyaW9yJywgJ21zdXBlcmlvcicsICduc3VwZXJpb3InLCAnb3N1cGVyaW9yJywgJycsICcnLCAncnN1cGVyaW9yJywgJ3NzdXBlcmlvcicsICd0c3VwZXJpb3InLCAnJywgJ2ZmJywgJ2ZpJywgJ2ZsJywgJ2ZmaScsICdmZmwnLCAncGFyZW5sZWZ0aW5mZXJpb3InLCAnJywgJ3BhcmVucmlnaHRpbmZlcmlvcicsICdDaXJjdW1mbGV4c21hbGwnLCAnaHlwaGVuc3VwZXJpb3InLCAnR3JhdmVzbWFsbCcsICdBc21hbGwnLCAnQnNtYWxsJywgJ0NzbWFsbCcsICdEc21hbGwnLCAnRXNtYWxsJywgJ0ZzbWFsbCcsICdHc21hbGwnLCAnSHNtYWxsJywgJ0lzbWFsbCcsICdKc21hbGwnLCAnS3NtYWxsJywgJ0xzbWFsbCcsICdNc21hbGwnLCAnTnNtYWxsJywgJ09zbWFsbCcsICdQc21hbGwnLCAnUXNtYWxsJywgJ1JzbWFsbCcsICdTc21hbGwnLCAnVHNtYWxsJywgJ1VzbWFsbCcsICdWc21hbGwnLCAnV3NtYWxsJywgJ1hzbWFsbCcsICdZc21hbGwnLCAnWnNtYWxsJywgJ2NvbG9ubW9uZXRhcnknLCAnb25lZml0dGVkJywgJ3J1cGlhaCcsICdUaWxkZXNtYWxsJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICdleGNsYW1kb3duc21hbGwnLCAnY2VudG9sZHN0eWxlJywgJ0xzbGFzaHNtYWxsJywgJycsICcnLCAnU2Nhcm9uc21hbGwnLCAnWmNhcm9uc21hbGwnLCAnRGllcmVzaXNzbWFsbCcsICdCcmV2ZXNtYWxsJywgJ0Nhcm9uc21hbGwnLCAnJywgJ0RvdGFjY2VudHNtYWxsJywgJycsICcnLCAnTWFjcm9uc21hbGwnLCAnJywgJycsICdmaWd1cmVkYXNoJywgJ2h5cGhlbmluZmVyaW9yJywgJycsICcnLCAnT2dvbmVrc21hbGwnLCAnUmluZ3NtYWxsJywgJ0NlZGlsbGFzbWFsbCcsICcnLCAnJywgJycsICdvbmVxdWFydGVyJywgJ29uZWhhbGYnLCAndGhyZWVxdWFydGVycycsICdxdWVzdGlvbmRvd25zbWFsbCcsICdvbmVlaWdodGgnLCAndGhyZWVlaWdodGhzJywgJ2ZpdmVlaWdodGhzJywgJ3NldmVuZWlnaHRocycsICdvbmV0aGlyZCcsICd0d290aGlyZHMnLCAnJywgJycsICd6ZXJvc3VwZXJpb3InLCAnb25lc3VwZXJpb3InLCAndHdvc3VwZXJpb3InLCAndGhyZWVzdXBlcmlvcicsICdmb3Vyc3VwZXJpb3InLCAnZml2ZXN1cGVyaW9yJywgJ3NpeHN1cGVyaW9yJywgJ3NldmVuc3VwZXJpb3InLCAnZWlnaHRzdXBlcmlvcicsICduaW5lc3VwZXJpb3InLCAnemVyb2luZmVyaW9yJywgJ29uZWluZmVyaW9yJywgJ3R3b2luZmVyaW9yJywgJ3RocmVlaW5mZXJpb3InLCAnZm91cmluZmVyaW9yJywgJ2ZpdmVpbmZlcmlvcicsICdzaXhpbmZlcmlvcicsICdzZXZlbmluZmVyaW9yJywgJ2VpZ2h0aW5mZXJpb3InLCAnbmluZWluZmVyaW9yJywgJ2NlbnRpbmZlcmlvcicsICdkb2xsYXJpbmZlcmlvcicsICdwZXJpb2RpbmZlcmlvcicsICdjb21tYWluZmVyaW9yJywgJ0FncmF2ZXNtYWxsJywgJ0FhY3V0ZXNtYWxsJywgJ0FjaXJjdW1mbGV4c21hbGwnLCAnQXRpbGRlc21hbGwnLCAnQWRpZXJlc2lzc21hbGwnLCAnQXJpbmdzbWFsbCcsICdBRXNtYWxsJywgJ0NjZWRpbGxhc21hbGwnLCAnRWdyYXZlc21hbGwnLCAnRWFjdXRlc21hbGwnLCAnRWNpcmN1bWZsZXhzbWFsbCcsICdFZGllcmVzaXNzbWFsbCcsICdJZ3JhdmVzbWFsbCcsICdJYWN1dGVzbWFsbCcsICdJY2lyY3VtZmxleHNtYWxsJywgJ0lkaWVyZXNpc3NtYWxsJywgJ0V0aHNtYWxsJywgJ050aWxkZXNtYWxsJywgJ09ncmF2ZXNtYWxsJywgJ09hY3V0ZXNtYWxsJywgJ09jaXJjdW1mbGV4c21hbGwnLCAnT3RpbGRlc21hbGwnLCAnT2RpZXJlc2lzc21hbGwnLCAnT0VzbWFsbCcsICdPc2xhc2hzbWFsbCcsICdVZ3JhdmVzbWFsbCcsICdVYWN1dGVzbWFsbCcsICdVY2lyY3VtZmxleHNtYWxsJywgJ1VkaWVyZXNpc3NtYWxsJywgJ1lhY3V0ZXNtYWxsJywgJ1Rob3Juc21hbGwnLCAnWWRpZXJlc2lzc21hbGwnXTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkV4cGVydEVuY29kaW5nID0gRXhwZXJ0RW5jb2Rpbmc7XG4gICAgICAgICAgICAgICAgdmFyIE1hY0V4cGVydEVuY29kaW5nID0gWycnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJ3NwYWNlJywgJ2V4Y2xhbXNtYWxsJywgJ0h1bmdhcnVtbGF1dHNtYWxsJywgJ2NlbnRvbGRzdHlsZScsICdkb2xsYXJvbGRzdHlsZScsICdkb2xsYXJzdXBlcmlvcicsICdhbXBlcnNhbmRzbWFsbCcsICdBY3V0ZXNtYWxsJywgJ3BhcmVubGVmdHN1cGVyaW9yJywgJ3BhcmVucmlnaHRzdXBlcmlvcicsICd0d29kb3RlbmxlYWRlcicsICdvbmVkb3RlbmxlYWRlcicsICdjb21tYScsICdoeXBoZW4nLCAncGVyaW9kJywgJ2ZyYWN0aW9uJywgJ3plcm9vbGRzdHlsZScsICdvbmVvbGRzdHlsZScsICd0d29vbGRzdHlsZScsICd0aHJlZW9sZHN0eWxlJywgJ2ZvdXJvbGRzdHlsZScsICdmaXZlb2xkc3R5bGUnLCAnc2l4b2xkc3R5bGUnLCAnc2V2ZW5vbGRzdHlsZScsICdlaWdodG9sZHN0eWxlJywgJ25pbmVvbGRzdHlsZScsICdjb2xvbicsICdzZW1pY29sb24nLCAnJywgJ3RocmVlcXVhcnRlcnNlbWRhc2gnLCAnJywgJ3F1ZXN0aW9uc21hbGwnLCAnJywgJycsICcnLCAnJywgJ0V0aHNtYWxsJywgJycsICcnLCAnb25lcXVhcnRlcicsICdvbmVoYWxmJywgJ3RocmVlcXVhcnRlcnMnLCAnb25lZWlnaHRoJywgJ3RocmVlZWlnaHRocycsICdmaXZlZWlnaHRocycsICdzZXZlbmVpZ2h0aHMnLCAnb25ldGhpcmQnLCAndHdvdGhpcmRzJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJ2ZmJywgJ2ZpJywgJ2ZsJywgJ2ZmaScsICdmZmwnLCAncGFyZW5sZWZ0aW5mZXJpb3InLCAnJywgJ3BhcmVucmlnaHRpbmZlcmlvcicsICdDaXJjdW1mbGV4c21hbGwnLCAnaHlwaGVuaW5mZXJpb3InLCAnR3JhdmVzbWFsbCcsICdBc21hbGwnLCAnQnNtYWxsJywgJ0NzbWFsbCcsICdEc21hbGwnLCAnRXNtYWxsJywgJ0ZzbWFsbCcsICdHc21hbGwnLCAnSHNtYWxsJywgJ0lzbWFsbCcsICdKc21hbGwnLCAnS3NtYWxsJywgJ0xzbWFsbCcsICdNc21hbGwnLCAnTnNtYWxsJywgJ09zbWFsbCcsICdQc21hbGwnLCAnUXNtYWxsJywgJ1JzbWFsbCcsICdTc21hbGwnLCAnVHNtYWxsJywgJ1VzbWFsbCcsICdWc21hbGwnLCAnV3NtYWxsJywgJ1hzbWFsbCcsICdZc21hbGwnLCAnWnNtYWxsJywgJ2NvbG9ubW9uZXRhcnknLCAnb25lZml0dGVkJywgJ3J1cGlhaCcsICdUaWxkZXNtYWxsJywgJycsICcnLCAnYXN1cGVyaW9yJywgJ2NlbnRzdXBlcmlvcicsICcnLCAnJywgJycsICcnLCAnQWFjdXRlc21hbGwnLCAnQWdyYXZlc21hbGwnLCAnQWNpcmN1bWZsZXhzbWFsbCcsICdBZGllcmVzaXNzbWFsbCcsICdBdGlsZGVzbWFsbCcsICdBcmluZ3NtYWxsJywgJ0NjZWRpbGxhc21hbGwnLCAnRWFjdXRlc21hbGwnLCAnRWdyYXZlc21hbGwnLCAnRWNpcmN1bWZsZXhzbWFsbCcsICdFZGllcmVzaXNzbWFsbCcsICdJYWN1dGVzbWFsbCcsICdJZ3JhdmVzbWFsbCcsICdJY2lyY3VtZmxleHNtYWxsJywgJ0lkaWVyZXNpc3NtYWxsJywgJ050aWxkZXNtYWxsJywgJ09hY3V0ZXNtYWxsJywgJ09ncmF2ZXNtYWxsJywgJ09jaXJjdW1mbGV4c21hbGwnLCAnT2RpZXJlc2lzc21hbGwnLCAnT3RpbGRlc21hbGwnLCAnVWFjdXRlc21hbGwnLCAnVWdyYXZlc21hbGwnLCAnVWNpcmN1bWZsZXhzbWFsbCcsICdVZGllcmVzaXNzbWFsbCcsICcnLCAnZWlnaHRzdXBlcmlvcicsICdmb3VyaW5mZXJpb3InLCAndGhyZWVpbmZlcmlvcicsICdzaXhpbmZlcmlvcicsICdlaWdodGluZmVyaW9yJywgJ3NldmVuaW5mZXJpb3InLCAnU2Nhcm9uc21hbGwnLCAnJywgJ2NlbnRpbmZlcmlvcicsICd0d29pbmZlcmlvcicsICcnLCAnRGllcmVzaXNzbWFsbCcsICcnLCAnQ2Fyb25zbWFsbCcsICdvc3VwZXJpb3InLCAnZml2ZWluZmVyaW9yJywgJycsICdjb21tYWluZmVyaW9yJywgJ3BlcmlvZGluZmVyaW9yJywgJ1lhY3V0ZXNtYWxsJywgJycsICdkb2xsYXJpbmZlcmlvcicsICcnLCAnJywgJ1Rob3Juc21hbGwnLCAnJywgJ25pbmVpbmZlcmlvcicsICd6ZXJvaW5mZXJpb3InLCAnWmNhcm9uc21hbGwnLCAnQUVzbWFsbCcsICdPc2xhc2hzbWFsbCcsICdxdWVzdGlvbmRvd25zbWFsbCcsICdvbmVpbmZlcmlvcicsICdMc2xhc2hzbWFsbCcsICcnLCAnJywgJycsICcnLCAnJywgJycsICdDZWRpbGxhc21hbGwnLCAnJywgJycsICcnLCAnJywgJycsICdPRXNtYWxsJywgJ2ZpZ3VyZWRhc2gnLCAnaHlwaGVuc3VwZXJpb3InLCAnJywgJycsICcnLCAnJywgJ2V4Y2xhbWRvd25zbWFsbCcsICcnLCAnWWRpZXJlc2lzc21hbGwnLCAnJywgJ29uZXN1cGVyaW9yJywgJ3R3b3N1cGVyaW9yJywgJ3RocmVlc3VwZXJpb3InLCAnZm91cnN1cGVyaW9yJywgJ2ZpdmVzdXBlcmlvcicsICdzaXhzdXBlcmlvcicsICdzZXZlbnN1cGVyaW9yJywgJ25pbmVzdXBlcmlvcicsICd6ZXJvc3VwZXJpb3InLCAnJywgJ2VzdXBlcmlvcicsICdyc3VwZXJpb3InLCAndHN1cGVyaW9yJywgJycsICcnLCAnaXN1cGVyaW9yJywgJ3NzdXBlcmlvcicsICdkc3VwZXJpb3InLCAnJywgJycsICcnLCAnJywgJycsICdsc3VwZXJpb3InLCAnT2dvbmVrc21hbGwnLCAnQnJldmVzbWFsbCcsICdNYWNyb25zbWFsbCcsICdic3VwZXJpb3InLCAnbnN1cGVyaW9yJywgJ21zdXBlcmlvcicsICdjb21tYXN1cGVyaW9yJywgJ3BlcmlvZHN1cGVyaW9yJywgJ0RvdGFjY2VudHNtYWxsJywgJ1JpbmdzbWFsbCcsICcnLCAnJywgJycsICcnXTtcbiAgICAgICAgICAgICAgICB2YXIgTWFjUm9tYW5FbmNvZGluZyA9IFsnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICdzcGFjZScsICdleGNsYW0nLCAncXVvdGVkYmwnLCAnbnVtYmVyc2lnbicsICdkb2xsYXInLCAncGVyY2VudCcsICdhbXBlcnNhbmQnLCAncXVvdGVzaW5nbGUnLCAncGFyZW5sZWZ0JywgJ3BhcmVucmlnaHQnLCAnYXN0ZXJpc2snLCAncGx1cycsICdjb21tYScsICdoeXBoZW4nLCAncGVyaW9kJywgJ3NsYXNoJywgJ3plcm8nLCAnb25lJywgJ3R3bycsICd0aHJlZScsICdmb3VyJywgJ2ZpdmUnLCAnc2l4JywgJ3NldmVuJywgJ2VpZ2h0JywgJ25pbmUnLCAnY29sb24nLCAnc2VtaWNvbG9uJywgJ2xlc3MnLCAnZXF1YWwnLCAnZ3JlYXRlcicsICdxdWVzdGlvbicsICdhdCcsICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRicsICdHJywgJ0gnLCAnSScsICdKJywgJ0snLCAnTCcsICdNJywgJ04nLCAnTycsICdQJywgJ1EnLCAnUicsICdTJywgJ1QnLCAnVScsICdWJywgJ1cnLCAnWCcsICdZJywgJ1onLCAnYnJhY2tldGxlZnQnLCAnYmFja3NsYXNoJywgJ2JyYWNrZXRyaWdodCcsICdhc2NpaWNpcmN1bScsICd1bmRlcnNjb3JlJywgJ2dyYXZlJywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ2cnLCAnaCcsICdpJywgJ2onLCAnaycsICdsJywgJ20nLCAnbicsICdvJywgJ3AnLCAncScsICdyJywgJ3MnLCAndCcsICd1JywgJ3YnLCAndycsICd4JywgJ3knLCAneicsICdicmFjZWxlZnQnLCAnYmFyJywgJ2JyYWNlcmlnaHQnLCAnYXNjaWl0aWxkZScsICcnLCAnQWRpZXJlc2lzJywgJ0FyaW5nJywgJ0NjZWRpbGxhJywgJ0VhY3V0ZScsICdOdGlsZGUnLCAnT2RpZXJlc2lzJywgJ1VkaWVyZXNpcycsICdhYWN1dGUnLCAnYWdyYXZlJywgJ2FjaXJjdW1mbGV4JywgJ2FkaWVyZXNpcycsICdhdGlsZGUnLCAnYXJpbmcnLCAnY2NlZGlsbGEnLCAnZWFjdXRlJywgJ2VncmF2ZScsICdlY2lyY3VtZmxleCcsICdlZGllcmVzaXMnLCAnaWFjdXRlJywgJ2lncmF2ZScsICdpY2lyY3VtZmxleCcsICdpZGllcmVzaXMnLCAnbnRpbGRlJywgJ29hY3V0ZScsICdvZ3JhdmUnLCAnb2NpcmN1bWZsZXgnLCAnb2RpZXJlc2lzJywgJ290aWxkZScsICd1YWN1dGUnLCAndWdyYXZlJywgJ3VjaXJjdW1mbGV4JywgJ3VkaWVyZXNpcycsICdkYWdnZXInLCAnZGVncmVlJywgJ2NlbnQnLCAnc3RlcmxpbmcnLCAnc2VjdGlvbicsICdidWxsZXQnLCAncGFyYWdyYXBoJywgJ2dlcm1hbmRibHMnLCAncmVnaXN0ZXJlZCcsICdjb3B5cmlnaHQnLCAndHJhZGVtYXJrJywgJ2FjdXRlJywgJ2RpZXJlc2lzJywgJ25vdGVxdWFsJywgJ0FFJywgJ09zbGFzaCcsICdpbmZpbml0eScsICdwbHVzbWludXMnLCAnbGVzc2VxdWFsJywgJ2dyZWF0ZXJlcXVhbCcsICd5ZW4nLCAnbXUnLCAncGFydGlhbGRpZmYnLCAnc3VtbWF0aW9uJywgJ3Byb2R1Y3QnLCAncGknLCAnaW50ZWdyYWwnLCAnb3JkZmVtaW5pbmUnLCAnb3JkbWFzY3VsaW5lJywgJ09tZWdhJywgJ2FlJywgJ29zbGFzaCcsICdxdWVzdGlvbmRvd24nLCAnZXhjbGFtZG93bicsICdsb2dpY2Fsbm90JywgJ3JhZGljYWwnLCAnZmxvcmluJywgJ2FwcHJveGVxdWFsJywgJ0RlbHRhJywgJ2d1aWxsZW1vdGxlZnQnLCAnZ3VpbGxlbW90cmlnaHQnLCAnZWxsaXBzaXMnLCAnc3BhY2UnLCAnQWdyYXZlJywgJ0F0aWxkZScsICdPdGlsZGUnLCAnT0UnLCAnb2UnLCAnZW5kYXNoJywgJ2VtZGFzaCcsICdxdW90ZWRibGxlZnQnLCAncXVvdGVkYmxyaWdodCcsICdxdW90ZWxlZnQnLCAncXVvdGVyaWdodCcsICdkaXZpZGUnLCAnbG96ZW5nZScsICd5ZGllcmVzaXMnLCAnWWRpZXJlc2lzJywgJ2ZyYWN0aW9uJywgJ2N1cnJlbmN5JywgJ2d1aWxzaW5nbGxlZnQnLCAnZ3VpbHNpbmdscmlnaHQnLCAnZmknLCAnZmwnLCAnZGFnZ2VyZGJsJywgJ3BlcmlvZGNlbnRlcmVkJywgJ3F1b3Rlc2luZ2xiYXNlJywgJ3F1b3RlZGJsYmFzZScsICdwZXJ0aG91c2FuZCcsICdBY2lyY3VtZmxleCcsICdFY2lyY3VtZmxleCcsICdBYWN1dGUnLCAnRWRpZXJlc2lzJywgJ0VncmF2ZScsICdJYWN1dGUnLCAnSWNpcmN1bWZsZXgnLCAnSWRpZXJlc2lzJywgJ0lncmF2ZScsICdPYWN1dGUnLCAnT2NpcmN1bWZsZXgnLCAnYXBwbGUnLCAnT2dyYXZlJywgJ1VhY3V0ZScsICdVY2lyY3VtZmxleCcsICdVZ3JhdmUnLCAnZG90bGVzc2knLCAnY2lyY3VtZmxleCcsICd0aWxkZScsICdtYWNyb24nLCAnYnJldmUnLCAnZG90YWNjZW50JywgJ3JpbmcnLCAnY2VkaWxsYScsICdodW5nYXJ1bWxhdXQnLCAnb2dvbmVrJywgJ2Nhcm9uJ107XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5NYWNSb21hbkVuY29kaW5nID0gTWFjUm9tYW5FbmNvZGluZztcbiAgICAgICAgICAgICAgICB2YXIgU3RhbmRhcmRFbmNvZGluZyA9IFsnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICdzcGFjZScsICdleGNsYW0nLCAncXVvdGVkYmwnLCAnbnVtYmVyc2lnbicsICdkb2xsYXInLCAncGVyY2VudCcsICdhbXBlcnNhbmQnLCAncXVvdGVyaWdodCcsICdwYXJlbmxlZnQnLCAncGFyZW5yaWdodCcsICdhc3RlcmlzaycsICdwbHVzJywgJ2NvbW1hJywgJ2h5cGhlbicsICdwZXJpb2QnLCAnc2xhc2gnLCAnemVybycsICdvbmUnLCAndHdvJywgJ3RocmVlJywgJ2ZvdXInLCAnZml2ZScsICdzaXgnLCAnc2V2ZW4nLCAnZWlnaHQnLCAnbmluZScsICdjb2xvbicsICdzZW1pY29sb24nLCAnbGVzcycsICdlcXVhbCcsICdncmVhdGVyJywgJ3F1ZXN0aW9uJywgJ2F0JywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJywgJ0cnLCAnSCcsICdJJywgJ0onLCAnSycsICdMJywgJ00nLCAnTicsICdPJywgJ1AnLCAnUScsICdSJywgJ1MnLCAnVCcsICdVJywgJ1YnLCAnVycsICdYJywgJ1knLCAnWicsICdicmFja2V0bGVmdCcsICdiYWNrc2xhc2gnLCAnYnJhY2tldHJpZ2h0JywgJ2FzY2lpY2lyY3VtJywgJ3VuZGVyc2NvcmUnLCAncXVvdGVsZWZ0JywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ2cnLCAnaCcsICdpJywgJ2onLCAnaycsICdsJywgJ20nLCAnbicsICdvJywgJ3AnLCAncScsICdyJywgJ3MnLCAndCcsICd1JywgJ3YnLCAndycsICd4JywgJ3knLCAneicsICdicmFjZWxlZnQnLCAnYmFyJywgJ2JyYWNlcmlnaHQnLCAnYXNjaWl0aWxkZScsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnZXhjbGFtZG93bicsICdjZW50JywgJ3N0ZXJsaW5nJywgJ2ZyYWN0aW9uJywgJ3llbicsICdmbG9yaW4nLCAnc2VjdGlvbicsICdjdXJyZW5jeScsICdxdW90ZXNpbmdsZScsICdxdW90ZWRibGxlZnQnLCAnZ3VpbGxlbW90bGVmdCcsICdndWlsc2luZ2xsZWZ0JywgJ2d1aWxzaW5nbHJpZ2h0JywgJ2ZpJywgJ2ZsJywgJycsICdlbmRhc2gnLCAnZGFnZ2VyJywgJ2RhZ2dlcmRibCcsICdwZXJpb2RjZW50ZXJlZCcsICcnLCAncGFyYWdyYXBoJywgJ2J1bGxldCcsICdxdW90ZXNpbmdsYmFzZScsICdxdW90ZWRibGJhc2UnLCAncXVvdGVkYmxyaWdodCcsICdndWlsbGVtb3RyaWdodCcsICdlbGxpcHNpcycsICdwZXJ0aG91c2FuZCcsICcnLCAncXVlc3Rpb25kb3duJywgJycsICdncmF2ZScsICdhY3V0ZScsICdjaXJjdW1mbGV4JywgJ3RpbGRlJywgJ21hY3JvbicsICdicmV2ZScsICdkb3RhY2NlbnQnLCAnZGllcmVzaXMnLCAnJywgJ3JpbmcnLCAnY2VkaWxsYScsICcnLCAnaHVuZ2FydW1sYXV0JywgJ29nb25laycsICdjYXJvbicsICdlbWRhc2gnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJ0FFJywgJycsICdvcmRmZW1pbmluZScsICcnLCAnJywgJycsICcnLCAnTHNsYXNoJywgJ09zbGFzaCcsICdPRScsICdvcmRtYXNjdWxpbmUnLCAnJywgJycsICcnLCAnJywgJycsICdhZScsICcnLCAnJywgJycsICdkb3RsZXNzaScsICcnLCAnJywgJ2xzbGFzaCcsICdvc2xhc2gnLCAnb2UnLCAnZ2VybWFuZGJscycsICcnLCAnJywgJycsICcnXTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLlN0YW5kYXJkRW5jb2RpbmcgPSBTdGFuZGFyZEVuY29kaW5nO1xuICAgICAgICAgICAgICAgIHZhciBXaW5BbnNpRW5jb2RpbmcgPSBbJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnc3BhY2UnLCAnZXhjbGFtJywgJ3F1b3RlZGJsJywgJ251bWJlcnNpZ24nLCAnZG9sbGFyJywgJ3BlcmNlbnQnLCAnYW1wZXJzYW5kJywgJ3F1b3Rlc2luZ2xlJywgJ3BhcmVubGVmdCcsICdwYXJlbnJpZ2h0JywgJ2FzdGVyaXNrJywgJ3BsdXMnLCAnY29tbWEnLCAnaHlwaGVuJywgJ3BlcmlvZCcsICdzbGFzaCcsICd6ZXJvJywgJ29uZScsICd0d28nLCAndGhyZWUnLCAnZm91cicsICdmaXZlJywgJ3NpeCcsICdzZXZlbicsICdlaWdodCcsICduaW5lJywgJ2NvbG9uJywgJ3NlbWljb2xvbicsICdsZXNzJywgJ2VxdWFsJywgJ2dyZWF0ZXInLCAncXVlc3Rpb24nLCAnYXQnLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnLCAnRycsICdIJywgJ0knLCAnSicsICdLJywgJ0wnLCAnTScsICdOJywgJ08nLCAnUCcsICdRJywgJ1InLCAnUycsICdUJywgJ1UnLCAnVicsICdXJywgJ1gnLCAnWScsICdaJywgJ2JyYWNrZXRsZWZ0JywgJ2JhY2tzbGFzaCcsICdicmFja2V0cmlnaHQnLCAnYXNjaWljaXJjdW0nLCAndW5kZXJzY29yZScsICdncmF2ZScsICdhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZicsICdnJywgJ2gnLCAnaScsICdqJywgJ2snLCAnbCcsICdtJywgJ24nLCAnbycsICdwJywgJ3EnLCAncicsICdzJywgJ3QnLCAndScsICd2JywgJ3cnLCAneCcsICd5JywgJ3onLCAnYnJhY2VsZWZ0JywgJ2JhcicsICdicmFjZXJpZ2h0JywgJ2FzY2lpdGlsZGUnLCAnYnVsbGV0JywgJ0V1cm8nLCAnYnVsbGV0JywgJ3F1b3Rlc2luZ2xiYXNlJywgJ2Zsb3JpbicsICdxdW90ZWRibGJhc2UnLCAnZWxsaXBzaXMnLCAnZGFnZ2VyJywgJ2RhZ2dlcmRibCcsICdjaXJjdW1mbGV4JywgJ3BlcnRob3VzYW5kJywgJ1NjYXJvbicsICdndWlsc2luZ2xsZWZ0JywgJ09FJywgJ2J1bGxldCcsICdaY2Fyb24nLCAnYnVsbGV0JywgJ2J1bGxldCcsICdxdW90ZWxlZnQnLCAncXVvdGVyaWdodCcsICdxdW90ZWRibGxlZnQnLCAncXVvdGVkYmxyaWdodCcsICdidWxsZXQnLCAnZW5kYXNoJywgJ2VtZGFzaCcsICd0aWxkZScsICd0cmFkZW1hcmsnLCAnc2Nhcm9uJywgJ2d1aWxzaW5nbHJpZ2h0JywgJ29lJywgJ2J1bGxldCcsICd6Y2Fyb24nLCAnWWRpZXJlc2lzJywgJ3NwYWNlJywgJ2V4Y2xhbWRvd24nLCAnY2VudCcsICdzdGVybGluZycsICdjdXJyZW5jeScsICd5ZW4nLCAnYnJva2VuYmFyJywgJ3NlY3Rpb24nLCAnZGllcmVzaXMnLCAnY29weXJpZ2h0JywgJ29yZGZlbWluaW5lJywgJ2d1aWxsZW1vdGxlZnQnLCAnbG9naWNhbG5vdCcsICdoeXBoZW4nLCAncmVnaXN0ZXJlZCcsICdtYWNyb24nLCAnZGVncmVlJywgJ3BsdXNtaW51cycsICd0d29zdXBlcmlvcicsICd0aHJlZXN1cGVyaW9yJywgJ2FjdXRlJywgJ211JywgJ3BhcmFncmFwaCcsICdwZXJpb2RjZW50ZXJlZCcsICdjZWRpbGxhJywgJ29uZXN1cGVyaW9yJywgJ29yZG1hc2N1bGluZScsICdndWlsbGVtb3RyaWdodCcsICdvbmVxdWFydGVyJywgJ29uZWhhbGYnLCAndGhyZWVxdWFydGVycycsICdxdWVzdGlvbmRvd24nLCAnQWdyYXZlJywgJ0FhY3V0ZScsICdBY2lyY3VtZmxleCcsICdBdGlsZGUnLCAnQWRpZXJlc2lzJywgJ0FyaW5nJywgJ0FFJywgJ0NjZWRpbGxhJywgJ0VncmF2ZScsICdFYWN1dGUnLCAnRWNpcmN1bWZsZXgnLCAnRWRpZXJlc2lzJywgJ0lncmF2ZScsICdJYWN1dGUnLCAnSWNpcmN1bWZsZXgnLCAnSWRpZXJlc2lzJywgJ0V0aCcsICdOdGlsZGUnLCAnT2dyYXZlJywgJ09hY3V0ZScsICdPY2lyY3VtZmxleCcsICdPdGlsZGUnLCAnT2RpZXJlc2lzJywgJ211bHRpcGx5JywgJ09zbGFzaCcsICdVZ3JhdmUnLCAnVWFjdXRlJywgJ1VjaXJjdW1mbGV4JywgJ1VkaWVyZXNpcycsICdZYWN1dGUnLCAnVGhvcm4nLCAnZ2VybWFuZGJscycsICdhZ3JhdmUnLCAnYWFjdXRlJywgJ2FjaXJjdW1mbGV4JywgJ2F0aWxkZScsICdhZGllcmVzaXMnLCAnYXJpbmcnLCAnYWUnLCAnY2NlZGlsbGEnLCAnZWdyYXZlJywgJ2VhY3V0ZScsICdlY2lyY3VtZmxleCcsICdlZGllcmVzaXMnLCAnaWdyYXZlJywgJ2lhY3V0ZScsICdpY2lyY3VtZmxleCcsICdpZGllcmVzaXMnLCAnZXRoJywgJ250aWxkZScsICdvZ3JhdmUnLCAnb2FjdXRlJywgJ29jaXJjdW1mbGV4JywgJ290aWxkZScsICdvZGllcmVzaXMnLCAnZGl2aWRlJywgJ29zbGFzaCcsICd1Z3JhdmUnLCAndWFjdXRlJywgJ3VjaXJjdW1mbGV4JywgJ3VkaWVyZXNpcycsICd5YWN1dGUnLCAndGhvcm4nLCAneWRpZXJlc2lzJ107XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5XaW5BbnNpRW5jb2RpbmcgPSBXaW5BbnNpRW5jb2Rpbmc7XG4gICAgICAgICAgICAgICAgdmFyIFN5bWJvbFNldEVuY29kaW5nID0gWycnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJ3NwYWNlJywgJ2V4Y2xhbScsICd1bml2ZXJzYWwnLCAnbnVtYmVyc2lnbicsICdleGlzdGVudGlhbCcsICdwZXJjZW50JywgJ2FtcGVyc2FuZCcsICdzdWNodGhhdCcsICdwYXJlbmxlZnQnLCAncGFyZW5yaWdodCcsICdhc3Rlcmlza21hdGgnLCAncGx1cycsICdjb21tYScsICdtaW51cycsICdwZXJpb2QnLCAnc2xhc2gnLCAnemVybycsICdvbmUnLCAndHdvJywgJ3RocmVlJywgJ2ZvdXInLCAnZml2ZScsICdzaXgnLCAnc2V2ZW4nLCAnZWlnaHQnLCAnbmluZScsICdjb2xvbicsICdzZW1pY29sb24nLCAnbGVzcycsICdlcXVhbCcsICdncmVhdGVyJywgJ3F1ZXN0aW9uJywgJ2NvbmdydWVudCcsICdBbHBoYScsICdCZXRhJywgJ0NoaScsICdEZWx0YScsICdFcHNpbG9uJywgJ1BoaScsICdHYW1tYScsICdFdGEnLCAnSW90YScsICd0aGV0YTEnLCAnS2FwcGEnLCAnTGFtYmRhJywgJ011JywgJ051JywgJ09taWNyb24nLCAnUGknLCAnVGhldGEnLCAnUmhvJywgJ1NpZ21hJywgJ1RhdScsICdVcHNpbG9uJywgJ3NpZ21hMScsICdPbWVnYScsICdYaScsICdQc2knLCAnWmV0YScsICdicmFja2V0bGVmdCcsICd0aGVyZWZvcmUnLCAnYnJhY2tldHJpZ2h0JywgJ3BlcnBlbmRpY3VsYXInLCAndW5kZXJzY29yZScsICdyYWRpY2FsZXgnLCAnYWxwaGEnLCAnYmV0YScsICdjaGknLCAnZGVsdGEnLCAnZXBzaWxvbicsICdwaGknLCAnZ2FtbWEnLCAnZXRhJywgJ2lvdGEnLCAncGhpMScsICdrYXBwYScsICdsYW1iZGEnLCAnbXUnLCAnbnUnLCAnb21pY3JvbicsICdwaScsICd0aGV0YScsICdyaG8nLCAnc2lnbWEnLCAndGF1JywgJ3Vwc2lsb24nLCAnb21lZ2ExJywgJ29tZWdhJywgJ3hpJywgJ3BzaScsICd6ZXRhJywgJ2JyYWNlbGVmdCcsICdiYXInLCAnYnJhY2VyaWdodCcsICdzaW1pbGFyJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJ0V1cm8nLCAnVXBzaWxvbjEnLCAnbWludXRlJywgJ2xlc3NlcXVhbCcsICdmcmFjdGlvbicsICdpbmZpbml0eScsICdmbG9yaW4nLCAnY2x1YicsICdkaWFtb25kJywgJ2hlYXJ0JywgJ3NwYWRlJywgJ2Fycm93Ym90aCcsICdhcnJvd2xlZnQnLCAnYXJyb3d1cCcsICdhcnJvd3JpZ2h0JywgJ2Fycm93ZG93bicsICdkZWdyZWUnLCAncGx1c21pbnVzJywgJ3NlY29uZCcsICdncmVhdGVyZXF1YWwnLCAnbXVsdGlwbHknLCAncHJvcG9ydGlvbmFsJywgJ3BhcnRpYWxkaWZmJywgJ2J1bGxldCcsICdkaXZpZGUnLCAnbm90ZXF1YWwnLCAnZXF1aXZhbGVuY2UnLCAnYXBwcm94ZXF1YWwnLCAnZWxsaXBzaXMnLCAnYXJyb3d2ZXJ0ZXgnLCAnYXJyb3dob3JpemV4JywgJ2NhcnJpYWdlcmV0dXJuJywgJ2FsZXBoJywgJ0lmcmFrdHVyJywgJ1JmcmFrdHVyJywgJ3dlaWVyc3RyYXNzJywgJ2NpcmNsZW11bHRpcGx5JywgJ2NpcmNsZXBsdXMnLCAnZW1wdHlzZXQnLCAnaW50ZXJzZWN0aW9uJywgJ3VuaW9uJywgJ3Byb3BlcnN1cGVyc2V0JywgJ3JlZmxleHN1cGVyc2V0JywgJ25vdHN1YnNldCcsICdwcm9wZXJzdWJzZXQnLCAncmVmbGV4c3Vic2V0JywgJ2VsZW1lbnQnLCAnbm90ZWxlbWVudCcsICdhbmdsZScsICdncmFkaWVudCcsICdyZWdpc3RlcnNlcmlmJywgJ2NvcHlyaWdodHNlcmlmJywgJ3RyYWRlbWFya3NlcmlmJywgJ3Byb2R1Y3QnLCAncmFkaWNhbCcsICdkb3RtYXRoJywgJ2xvZ2ljYWxub3QnLCAnbG9naWNhbGFuZCcsICdsb2dpY2Fsb3InLCAnYXJyb3dkYmxib3RoJywgJ2Fycm93ZGJsbGVmdCcsICdhcnJvd2RibHVwJywgJ2Fycm93ZGJscmlnaHQnLCAnYXJyb3dkYmxkb3duJywgJ2xvemVuZ2UnLCAnYW5nbGVsZWZ0JywgJ3JlZ2lzdGVyc2FucycsICdjb3B5cmlnaHRzYW5zJywgJ3RyYWRlbWFya3NhbnMnLCAnc3VtbWF0aW9uJywgJ3BhcmVubGVmdHRwJywgJ3BhcmVubGVmdGV4JywgJ3BhcmVubGVmdGJ0JywgJ2JyYWNrZXRsZWZ0dHAnLCAnYnJhY2tldGxlZnRleCcsICdicmFja2V0bGVmdGJ0JywgJ2JyYWNlbGVmdHRwJywgJ2JyYWNlbGVmdG1pZCcsICdicmFjZWxlZnRidCcsICdicmFjZWV4JywgJycsICdhbmdsZXJpZ2h0JywgJ2ludGVncmFsJywgJ2ludGVncmFsdHAnLCAnaW50ZWdyYWxleCcsICdpbnRlZ3JhbGJ0JywgJ3BhcmVucmlnaHR0cCcsICdwYXJlbnJpZ2h0ZXgnLCAncGFyZW5yaWdodGJ0JywgJ2JyYWNrZXRyaWdodHRwJywgJ2JyYWNrZXRyaWdodGV4JywgJ2JyYWNrZXRyaWdodGJ0JywgJ2JyYWNlcmlnaHR0cCcsICdicmFjZXJpZ2h0bWlkJywgJ2JyYWNlcmlnaHRidCcsICcnXTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLlN5bWJvbFNldEVuY29kaW5nID0gU3ltYm9sU2V0RW5jb2Rpbmc7XG4gICAgICAgICAgICAgICAgdmFyIFphcGZEaW5nYmF0c0VuY29kaW5nID0gWycnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJ3NwYWNlJywgJ2ExJywgJ2EyJywgJ2EyMDInLCAnYTMnLCAnYTQnLCAnYTUnLCAnYTExOScsICdhMTE4JywgJ2ExMTcnLCAnYTExJywgJ2ExMicsICdhMTMnLCAnYTE0JywgJ2ExNScsICdhMTYnLCAnYTEwNScsICdhMTcnLCAnYTE4JywgJ2ExOScsICdhMjAnLCAnYTIxJywgJ2EyMicsICdhMjMnLCAnYTI0JywgJ2EyNScsICdhMjYnLCAnYTI3JywgJ2EyOCcsICdhNicsICdhNycsICdhOCcsICdhOScsICdhMTAnLCAnYTI5JywgJ2EzMCcsICdhMzEnLCAnYTMyJywgJ2EzMycsICdhMzQnLCAnYTM1JywgJ2EzNicsICdhMzcnLCAnYTM4JywgJ2EzOScsICdhNDAnLCAnYTQxJywgJ2E0MicsICdhNDMnLCAnYTQ0JywgJ2E0NScsICdhNDYnLCAnYTQ3JywgJ2E0OCcsICdhNDknLCAnYTUwJywgJ2E1MScsICdhNTInLCAnYTUzJywgJ2E1NCcsICdhNTUnLCAnYTU2JywgJ2E1NycsICdhNTgnLCAnYTU5JywgJ2E2MCcsICdhNjEnLCAnYTYyJywgJ2E2MycsICdhNjQnLCAnYTY1JywgJ2E2NicsICdhNjcnLCAnYTY4JywgJ2E2OScsICdhNzAnLCAnYTcxJywgJ2E3MicsICdhNzMnLCAnYTc0JywgJ2EyMDMnLCAnYTc1JywgJ2EyMDQnLCAnYTc2JywgJ2E3NycsICdhNzgnLCAnYTc5JywgJ2E4MScsICdhODInLCAnYTgzJywgJ2E4NCcsICdhOTcnLCAnYTk4JywgJ2E5OScsICdhMTAwJywgJycsICdhODknLCAnYTkwJywgJ2E5MycsICdhOTQnLCAnYTkxJywgJ2E5MicsICdhMjA1JywgJ2E4NScsICdhMjA2JywgJ2E4NicsICdhODcnLCAnYTg4JywgJ2E5NScsICdhOTYnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJ2ExMDEnLCAnYTEwMicsICdhMTAzJywgJ2ExMDQnLCAnYTEwNicsICdhMTA3JywgJ2ExMDgnLCAnYTExMicsICdhMTExJywgJ2ExMTAnLCAnYTEwOScsICdhMTIwJywgJ2ExMjEnLCAnYTEyMicsICdhMTIzJywgJ2ExMjQnLCAnYTEyNScsICdhMTI2JywgJ2ExMjcnLCAnYTEyOCcsICdhMTI5JywgJ2ExMzAnLCAnYTEzMScsICdhMTMyJywgJ2ExMzMnLCAnYTEzNCcsICdhMTM1JywgJ2ExMzYnLCAnYTEzNycsICdhMTM4JywgJ2ExMzknLCAnYTE0MCcsICdhMTQxJywgJ2ExNDInLCAnYTE0MycsICdhMTQ0JywgJ2ExNDUnLCAnYTE0NicsICdhMTQ3JywgJ2ExNDgnLCAnYTE0OScsICdhMTUwJywgJ2ExNTEnLCAnYTE1MicsICdhMTUzJywgJ2ExNTQnLCAnYTE1NScsICdhMTU2JywgJ2ExNTcnLCAnYTE1OCcsICdhMTU5JywgJ2ExNjAnLCAnYTE2MScsICdhMTYzJywgJ2ExNjQnLCAnYTE5NicsICdhMTY1JywgJ2ExOTInLCAnYTE2NicsICdhMTY3JywgJ2ExNjgnLCAnYTE2OScsICdhMTcwJywgJ2ExNzEnLCAnYTE3MicsICdhMTczJywgJ2ExNjInLCAnYTE3NCcsICdhMTc1JywgJ2ExNzYnLCAnYTE3NycsICdhMTc4JywgJ2ExNzknLCAnYTE5MycsICdhMTgwJywgJ2ExOTknLCAnYTE4MScsICdhMjAwJywgJ2ExODInLCAnJywgJ2EyMDEnLCAnYTE4MycsICdhMTg0JywgJ2ExOTcnLCAnYTE4NScsICdhMTk0JywgJ2ExOTgnLCAnYTE4NicsICdhMTk1JywgJ2ExODcnLCAnYTE4OCcsICdhMTg5JywgJ2ExOTAnLCAnYTE5MScsICcnXTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLlphcGZEaW5nYmF0c0VuY29kaW5nID0gWmFwZkRpbmdiYXRzRW5jb2Rpbmc7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRFbmNvZGluZyhlbmNvZGluZ05hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlbmNvZGluZ05hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1dpbkFuc2lFbmNvZGluZyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdpbkFuc2lFbmNvZGluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnU3RhbmRhcmRFbmNvZGluZyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YW5kYXJkRW5jb2Rpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ01hY1JvbWFuRW5jb2RpbmcnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNYWNSb21hbkVuY29kaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdTeW1ib2xTZXRFbmNvZGluZyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN5bWJvbFNldEVuY29kaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdaYXBmRGluZ2JhdHNFbmNvZGluZyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFphcGZEaW5nYmF0c0VuY29kaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdFeHBlcnRFbmNvZGluZyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEV4cGVydEVuY29kaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdNYWNFeHBlcnRFbmNvZGluZyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hY0V4cGVydEVuY29kaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNzcgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIHZhciBnZXRMb29rdXBUYWJsZUZhY3RvcnkgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpLmdldExvb2t1cFRhYmxlRmFjdG9yeTtcbiAgICAgICAgICAgICAgICB2YXIgZ2V0R2x5cGhzVW5pY29kZSA9IGdldExvb2t1cFRhYmxlRmFjdG9yeShmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgICAgICB0WydBJ10gPSAweDAwNDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FFJ10gPSAweDAwQzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FFYWN1dGUnXSA9IDB4MDFGQztcbiAgICAgICAgICAgICAgICAgICAgdFsnQUVtYWNyb24nXSA9IDB4MDFFMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnQUVzbWFsbCddID0gMHhGN0U2O1xuICAgICAgICAgICAgICAgICAgICB0WydBYWN1dGUnXSA9IDB4MDBDMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWFjdXRlc21hbGwnXSA9IDB4RjdFMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWJyZXZlJ10gPSAweDAxMDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FicmV2ZWFjdXRlJ10gPSAweDFFQUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FicmV2ZWN5cmlsbGljJ10gPSAweDA0RDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FicmV2ZWRvdGJlbG93J10gPSAweDFFQjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FicmV2ZWdyYXZlJ10gPSAweDFFQjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FicmV2ZWhvb2thYm92ZSddID0gMHgxRUIyO1xuICAgICAgICAgICAgICAgICAgICB0WydBYnJldmV0aWxkZSddID0gMHgxRUI0O1xuICAgICAgICAgICAgICAgICAgICB0WydBY2Fyb24nXSA9IDB4MDFDRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWNpcmNsZSddID0gMHgyNEI2O1xuICAgICAgICAgICAgICAgICAgICB0WydBY2lyY3VtZmxleCddID0gMHgwMEMyO1xuICAgICAgICAgICAgICAgICAgICB0WydBY2lyY3VtZmxleGFjdXRlJ10gPSAweDFFQTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FjaXJjdW1mbGV4ZG90YmVsb3cnXSA9IDB4MUVBQztcbiAgICAgICAgICAgICAgICAgICAgdFsnQWNpcmN1bWZsZXhncmF2ZSddID0gMHgxRUE2O1xuICAgICAgICAgICAgICAgICAgICB0WydBY2lyY3VtZmxleGhvb2thYm92ZSddID0gMHgxRUE4O1xuICAgICAgICAgICAgICAgICAgICB0WydBY2lyY3VtZmxleHNtYWxsJ10gPSAweEY3RTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FjaXJjdW1mbGV4dGlsZGUnXSA9IDB4MUVBQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWN1dGUnXSA9IDB4RjZDOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWN1dGVzbWFsbCddID0gMHhGN0I0O1xuICAgICAgICAgICAgICAgICAgICB0WydBY3lyaWxsaWMnXSA9IDB4MDQxMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWRibGdyYXZlJ10gPSAweDAyMDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FkaWVyZXNpcyddID0gMHgwMEM0O1xuICAgICAgICAgICAgICAgICAgICB0WydBZGllcmVzaXNjeXJpbGxpYyddID0gMHgwNEQyO1xuICAgICAgICAgICAgICAgICAgICB0WydBZGllcmVzaXNtYWNyb24nXSA9IDB4MDFERTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWRpZXJlc2lzc21hbGwnXSA9IDB4RjdFNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWRvdGJlbG93J10gPSAweDFFQTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Fkb3RtYWNyb24nXSA9IDB4MDFFMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWdyYXZlJ10gPSAweDAwQzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FncmF2ZXNtYWxsJ10gPSAweEY3RTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Fob29rYWJvdmUnXSA9IDB4MUVBMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWllY3lyaWxsaWMnXSA9IDB4MDRENDtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWludmVydGVkYnJldmUnXSA9IDB4MDIwMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWxwaGEnXSA9IDB4MDM5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWxwaGF0b25vcyddID0gMHgwMzg2O1xuICAgICAgICAgICAgICAgICAgICB0WydBbWFjcm9uJ10gPSAweDAxMDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Ftb25vc3BhY2UnXSA9IDB4RkYyMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQW9nb25layddID0gMHgwMTA0O1xuICAgICAgICAgICAgICAgICAgICB0WydBcmluZyddID0gMHgwMEM1O1xuICAgICAgICAgICAgICAgICAgICB0WydBcmluZ2FjdXRlJ10gPSAweDAxRkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FyaW5nYmVsb3cnXSA9IDB4MUUwMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnQXJpbmdzbWFsbCddID0gMHhGN0U1O1xuICAgICAgICAgICAgICAgICAgICB0WydBc21hbGwnXSA9IDB4Rjc2MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQXRpbGRlJ10gPSAweDAwQzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0F0aWxkZXNtYWxsJ10gPSAweEY3RTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0F5YmFybWVuaWFuJ10gPSAweDA1MzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0InXSA9IDB4MDA0MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnQmNpcmNsZSddID0gMHgyNEI3O1xuICAgICAgICAgICAgICAgICAgICB0WydCZG90YWNjZW50J10gPSAweDFFMDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Jkb3RiZWxvdyddID0gMHgxRTA0O1xuICAgICAgICAgICAgICAgICAgICB0WydCZWN5cmlsbGljJ10gPSAweDA0MTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0JlbmFybWVuaWFuJ10gPSAweDA1MzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0JldGEnXSA9IDB4MDM5MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnQmhvb2snXSA9IDB4MDE4MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQmxpbmViZWxvdyddID0gMHgxRTA2O1xuICAgICAgICAgICAgICAgICAgICB0WydCbW9ub3NwYWNlJ10gPSAweEZGMjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0JyZXZlc21hbGwnXSA9IDB4RjZGNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnQnNtYWxsJ10gPSAweEY3NjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0J0b3BiYXInXSA9IDB4MDE4MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnQyddID0gMHgwMDQzO1xuICAgICAgICAgICAgICAgICAgICB0WydDYWFybWVuaWFuJ10gPSAweDA1M0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NhY3V0ZSddID0gMHgwMTA2O1xuICAgICAgICAgICAgICAgICAgICB0WydDYXJvbiddID0gMHhGNkNBO1xuICAgICAgICAgICAgICAgICAgICB0WydDYXJvbnNtYWxsJ10gPSAweEY2RjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NjYXJvbiddID0gMHgwMTBDO1xuICAgICAgICAgICAgICAgICAgICB0WydDY2VkaWxsYSddID0gMHgwMEM3O1xuICAgICAgICAgICAgICAgICAgICB0WydDY2VkaWxsYWFjdXRlJ10gPSAweDFFMDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NjZWRpbGxhc21hbGwnXSA9IDB4RjdFNztcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2NpcmNsZSddID0gMHgyNEI4O1xuICAgICAgICAgICAgICAgICAgICB0WydDY2lyY3VtZmxleCddID0gMHgwMTA4O1xuICAgICAgICAgICAgICAgICAgICB0WydDZG90J10gPSAweDAxMEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Nkb3RhY2NlbnQnXSA9IDB4MDEwQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2VkaWxsYXNtYWxsJ10gPSAweEY3Qjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NoYWFybWVuaWFuJ10gPSAweDA1NDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NoZWFia2hhc2lhbmN5cmlsbGljJ10gPSAweDA0QkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NoZWN5cmlsbGljJ10gPSAweDA0Mjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NoZWRlc2NlbmRlcmFia2hhc2lhbmN5cmlsbGljJ10gPSAweDA0QkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NoZWRlc2NlbmRlcmN5cmlsbGljJ10gPSAweDA0QjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NoZWRpZXJlc2lzY3lyaWxsaWMnXSA9IDB4MDRGNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2hlaGFybWVuaWFuJ10gPSAweDA1NDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NoZWtoYWthc3NpYW5jeXJpbGxpYyddID0gMHgwNENCO1xuICAgICAgICAgICAgICAgICAgICB0WydDaGV2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljJ10gPSAweDA0Qjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NoaSddID0gMHgwM0E3O1xuICAgICAgICAgICAgICAgICAgICB0WydDaG9vayddID0gMHgwMTg3O1xuICAgICAgICAgICAgICAgICAgICB0WydDaXJjdW1mbGV4c21hbGwnXSA9IDB4RjZGNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ21vbm9zcGFjZSddID0gMHhGRjIzO1xuICAgICAgICAgICAgICAgICAgICB0WydDb2FybWVuaWFuJ10gPSAweDA1NTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NzbWFsbCddID0gMHhGNzYzO1xuICAgICAgICAgICAgICAgICAgICB0WydEJ10gPSAweDAwNDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0RaJ10gPSAweDAxRjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0RaY2Fyb24nXSA9IDB4MDFDNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnRGFhcm1lbmlhbiddID0gMHgwNTM0O1xuICAgICAgICAgICAgICAgICAgICB0WydEYWZyaWNhbiddID0gMHgwMTg5O1xuICAgICAgICAgICAgICAgICAgICB0WydEY2Fyb24nXSA9IDB4MDEwRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRGNlZGlsbGEnXSA9IDB4MUUxMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnRGNpcmNsZSddID0gMHgyNEI5O1xuICAgICAgICAgICAgICAgICAgICB0WydEY2lyY3VtZmxleGJlbG93J10gPSAweDFFMTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Rjcm9hdCddID0gMHgwMTEwO1xuICAgICAgICAgICAgICAgICAgICB0WydEZG90YWNjZW50J10gPSAweDFFMEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Rkb3RiZWxvdyddID0gMHgxRTBDO1xuICAgICAgICAgICAgICAgICAgICB0WydEZWN5cmlsbGljJ10gPSAweDA0MTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0RlaWNvcHRpYyddID0gMHgwM0VFO1xuICAgICAgICAgICAgICAgICAgICB0WydEZWx0YSddID0gMHgyMjA2O1xuICAgICAgICAgICAgICAgICAgICB0WydEZWx0YWdyZWVrJ10gPSAweDAzOTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Rob29rJ10gPSAweDAxOEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0RpZXJlc2lzJ10gPSAweEY2Q0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0RpZXJlc2lzQWN1dGUnXSA9IDB4RjZDQztcbiAgICAgICAgICAgICAgICAgICAgdFsnRGllcmVzaXNHcmF2ZSddID0gMHhGNkNEO1xuICAgICAgICAgICAgICAgICAgICB0WydEaWVyZXNpc3NtYWxsJ10gPSAweEY3QTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0RpZ2FtbWFncmVlayddID0gMHgwM0RDO1xuICAgICAgICAgICAgICAgICAgICB0WydEamVjeXJpbGxpYyddID0gMHgwNDAyO1xuICAgICAgICAgICAgICAgICAgICB0WydEbGluZWJlbG93J10gPSAweDFFMEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Rtb25vc3BhY2UnXSA9IDB4RkYyNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnRG90YWNjZW50c21hbGwnXSA9IDB4RjZGNztcbiAgICAgICAgICAgICAgICAgICAgdFsnRHNsYXNoJ10gPSAweDAxMTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0RzbWFsbCddID0gMHhGNzY0O1xuICAgICAgICAgICAgICAgICAgICB0WydEdG9wYmFyJ10gPSAweDAxOEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0R6J10gPSAweDAxRjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0R6Y2Fyb24nXSA9IDB4MDFDNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRHplYWJraGFzaWFuY3lyaWxsaWMnXSA9IDB4MDRFMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnRHplY3lyaWxsaWMnXSA9IDB4MDQwNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRHpoZWN5cmlsbGljJ10gPSAweDA0MEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0UnXSA9IDB4MDA0NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRWFjdXRlJ10gPSAweDAwQzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VhY3V0ZXNtYWxsJ10gPSAweEY3RTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VicmV2ZSddID0gMHgwMTE0O1xuICAgICAgICAgICAgICAgICAgICB0WydFY2Fyb24nXSA9IDB4MDExQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRWNlZGlsbGFicmV2ZSddID0gMHgxRTFDO1xuICAgICAgICAgICAgICAgICAgICB0WydFY2hhcm1lbmlhbiddID0gMHgwNTM1O1xuICAgICAgICAgICAgICAgICAgICB0WydFY2lyY2xlJ10gPSAweDI0QkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VjaXJjdW1mbGV4J10gPSAweDAwQ0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VjaXJjdW1mbGV4YWN1dGUnXSA9IDB4MUVCRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRWNpcmN1bWZsZXhiZWxvdyddID0gMHgxRTE4O1xuICAgICAgICAgICAgICAgICAgICB0WydFY2lyY3VtZmxleGRvdGJlbG93J10gPSAweDFFQzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VjaXJjdW1mbGV4Z3JhdmUnXSA9IDB4MUVDMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnRWNpcmN1bWZsZXhob29rYWJvdmUnXSA9IDB4MUVDMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnRWNpcmN1bWZsZXhzbWFsbCddID0gMHhGN0VBO1xuICAgICAgICAgICAgICAgICAgICB0WydFY2lyY3VtZmxleHRpbGRlJ10gPSAweDFFQzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VjeXJpbGxpYyddID0gMHgwNDA0O1xuICAgICAgICAgICAgICAgICAgICB0WydFZGJsZ3JhdmUnXSA9IDB4MDIwNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnRWRpZXJlc2lzJ10gPSAweDAwQ0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VkaWVyZXNpc3NtYWxsJ10gPSAweEY3RUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Vkb3QnXSA9IDB4MDExNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnRWRvdGFjY2VudCddID0gMHgwMTE2O1xuICAgICAgICAgICAgICAgICAgICB0WydFZG90YmVsb3cnXSA9IDB4MUVCODtcbiAgICAgICAgICAgICAgICAgICAgdFsnRWZjeXJpbGxpYyddID0gMHgwNDI0O1xuICAgICAgICAgICAgICAgICAgICB0WydFZ3JhdmUnXSA9IDB4MDBDODtcbiAgICAgICAgICAgICAgICAgICAgdFsnRWdyYXZlc21hbGwnXSA9IDB4RjdFODtcbiAgICAgICAgICAgICAgICAgICAgdFsnRWhhcm1lbmlhbiddID0gMHgwNTM3O1xuICAgICAgICAgICAgICAgICAgICB0WydFaG9va2Fib3ZlJ10gPSAweDFFQkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VpZ2h0cm9tYW4nXSA9IDB4MjE2NztcbiAgICAgICAgICAgICAgICAgICAgdFsnRWludmVydGVkYnJldmUnXSA9IDB4MDIwNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnRWlvdGlmaWVkY3lyaWxsaWMnXSA9IDB4MDQ2NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnRWxjeXJpbGxpYyddID0gMHgwNDFCO1xuICAgICAgICAgICAgICAgICAgICB0WydFbGV2ZW5yb21hbiddID0gMHgyMTZBO1xuICAgICAgICAgICAgICAgICAgICB0WydFbWFjcm9uJ10gPSAweDAxMTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VtYWNyb25hY3V0ZSddID0gMHgxRTE2O1xuICAgICAgICAgICAgICAgICAgICB0WydFbWFjcm9uZ3JhdmUnXSA9IDB4MUUxNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnRW1jeXJpbGxpYyddID0gMHgwNDFDO1xuICAgICAgICAgICAgICAgICAgICB0WydFbW9ub3NwYWNlJ10gPSAweEZGMjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VuY3lyaWxsaWMnXSA9IDB4MDQxRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnRW5kZXNjZW5kZXJjeXJpbGxpYyddID0gMHgwNEEyO1xuICAgICAgICAgICAgICAgICAgICB0WydFbmcnXSA9IDB4MDE0QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRW5naGVjeXJpbGxpYyddID0gMHgwNEE0O1xuICAgICAgICAgICAgICAgICAgICB0WydFbmhvb2tjeXJpbGxpYyddID0gMHgwNEM3O1xuICAgICAgICAgICAgICAgICAgICB0WydFb2dvbmVrJ10gPSAweDAxMTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VvcGVuJ10gPSAweDAxOTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Vwc2lsb24nXSA9IDB4MDM5NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRXBzaWxvbnRvbm9zJ10gPSAweDAzODg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VyY3lyaWxsaWMnXSA9IDB4MDQyMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnRXJldmVyc2VkJ10gPSAweDAxOEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VyZXZlcnNlZGN5cmlsbGljJ10gPSAweDA0MkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VzY3lyaWxsaWMnXSA9IDB4MDQyMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRXNkZXNjZW5kZXJjeXJpbGxpYyddID0gMHgwNEFBO1xuICAgICAgICAgICAgICAgICAgICB0WydFc2gnXSA9IDB4MDFBOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRXNtYWxsJ10gPSAweEY3NjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0V0YSddID0gMHgwMzk3O1xuICAgICAgICAgICAgICAgICAgICB0WydFdGFybWVuaWFuJ10gPSAweDA1Mzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0V0YXRvbm9zJ10gPSAweDAzODk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0V0aCddID0gMHgwMEQwO1xuICAgICAgICAgICAgICAgICAgICB0WydFdGhzbWFsbCddID0gMHhGN0YwO1xuICAgICAgICAgICAgICAgICAgICB0WydFdGlsZGUnXSA9IDB4MUVCQztcbiAgICAgICAgICAgICAgICAgICAgdFsnRXRpbGRlYmVsb3cnXSA9IDB4MUUxQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRXVybyddID0gMHgyMEFDO1xuICAgICAgICAgICAgICAgICAgICB0WydFemgnXSA9IDB4MDFCNztcbiAgICAgICAgICAgICAgICAgICAgdFsnRXpoY2Fyb24nXSA9IDB4MDFFRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRXpocmV2ZXJzZWQnXSA9IDB4MDFCODtcbiAgICAgICAgICAgICAgICAgICAgdFsnRiddID0gMHgwMDQ2O1xuICAgICAgICAgICAgICAgICAgICB0WydGY2lyY2xlJ10gPSAweDI0QkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Zkb3RhY2NlbnQnXSA9IDB4MUUxRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRmVoYXJtZW5pYW4nXSA9IDB4MDU1NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnRmVpY29wdGljJ10gPSAweDAzRTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Zob29rJ10gPSAweDAxOTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0ZpdGFjeXJpbGxpYyddID0gMHgwNDcyO1xuICAgICAgICAgICAgICAgICAgICB0WydGaXZlcm9tYW4nXSA9IDB4MjE2NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnRm1vbm9zcGFjZSddID0gMHhGRjI2O1xuICAgICAgICAgICAgICAgICAgICB0WydGb3Vycm9tYW4nXSA9IDB4MjE2MztcbiAgICAgICAgICAgICAgICAgICAgdFsnRnNtYWxsJ10gPSAweEY3NjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0cnXSA9IDB4MDA0NztcbiAgICAgICAgICAgICAgICAgICAgdFsnR0JzcXVhcmUnXSA9IDB4MzM4NztcbiAgICAgICAgICAgICAgICAgICAgdFsnR2FjdXRlJ10gPSAweDAxRjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dhbW1hJ10gPSAweDAzOTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dhbW1hYWZyaWNhbiddID0gMHgwMTk0O1xuICAgICAgICAgICAgICAgICAgICB0WydHYW5naWFjb3B0aWMnXSA9IDB4MDNFQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnR2JyZXZlJ10gPSAweDAxMUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0djYXJvbiddID0gMHgwMUU2O1xuICAgICAgICAgICAgICAgICAgICB0WydHY2VkaWxsYSddID0gMHgwMTIyO1xuICAgICAgICAgICAgICAgICAgICB0WydHY2lyY2xlJ10gPSAweDI0QkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0djaXJjdW1mbGV4J10gPSAweDAxMUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0djb21tYWFjY2VudCddID0gMHgwMTIyO1xuICAgICAgICAgICAgICAgICAgICB0WydHZG90J10gPSAweDAxMjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dkb3RhY2NlbnQnXSA9IDB4MDEyMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnR2VjeXJpbGxpYyddID0gMHgwNDEzO1xuICAgICAgICAgICAgICAgICAgICB0WydHaGFkYXJtZW5pYW4nXSA9IDB4MDU0MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnR2hlbWlkZGxlaG9va2N5cmlsbGljJ10gPSAweDA0OTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0doZXN0cm9rZWN5cmlsbGljJ10gPSAweDA0OTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0doZXVwdHVybmN5cmlsbGljJ10gPSAweDA0OTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dob29rJ10gPSAweDAxOTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dpbWFybWVuaWFuJ10gPSAweDA1MzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dqZWN5cmlsbGljJ10gPSAweDA0MDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dtYWNyb24nXSA9IDB4MUUyMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnR21vbm9zcGFjZSddID0gMHhGRjI3O1xuICAgICAgICAgICAgICAgICAgICB0WydHcmF2ZSddID0gMHhGNkNFO1xuICAgICAgICAgICAgICAgICAgICB0WydHcmF2ZXNtYWxsJ10gPSAweEY3NjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dzbWFsbCddID0gMHhGNzY3O1xuICAgICAgICAgICAgICAgICAgICB0WydHc21hbGxob29rJ10gPSAweDAyOUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dzdHJva2UnXSA9IDB4MDFFNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnSCddID0gMHgwMDQ4O1xuICAgICAgICAgICAgICAgICAgICB0WydIMTg1MzMnXSA9IDB4MjVDRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnSDE4NTQzJ10gPSAweDI1QUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0gxODU1MSddID0gMHgyNUFCO1xuICAgICAgICAgICAgICAgICAgICB0WydIMjIwNzMnXSA9IDB4MjVBMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSFBzcXVhcmUnXSA9IDB4MzNDQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnSGFhYmtoYXNpYW5jeXJpbGxpYyddID0gMHgwNEE4O1xuICAgICAgICAgICAgICAgICAgICB0WydIYWRlc2NlbmRlcmN5cmlsbGljJ10gPSAweDA0QjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0hhcmRzaWduY3lyaWxsaWMnXSA9IDB4MDQyQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSGJhciddID0gMHgwMTI2O1xuICAgICAgICAgICAgICAgICAgICB0WydIYnJldmViZWxvdyddID0gMHgxRTJBO1xuICAgICAgICAgICAgICAgICAgICB0WydIY2VkaWxsYSddID0gMHgxRTI4O1xuICAgICAgICAgICAgICAgICAgICB0WydIY2lyY2xlJ10gPSAweDI0QkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0hjaXJjdW1mbGV4J10gPSAweDAxMjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0hkaWVyZXNpcyddID0gMHgxRTI2O1xuICAgICAgICAgICAgICAgICAgICB0WydIZG90YWNjZW50J10gPSAweDFFMjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0hkb3RiZWxvdyddID0gMHgxRTI0O1xuICAgICAgICAgICAgICAgICAgICB0WydIbW9ub3NwYWNlJ10gPSAweEZGMjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0hvYXJtZW5pYW4nXSA9IDB4MDU0MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnSG9yaWNvcHRpYyddID0gMHgwM0U4O1xuICAgICAgICAgICAgICAgICAgICB0WydIc21hbGwnXSA9IDB4Rjc2ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnSHVuZ2FydW1sYXV0J10gPSAweEY2Q0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0h1bmdhcnVtbGF1dHNtYWxsJ10gPSAweEY2Rjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0h6c3F1YXJlJ10gPSAweDMzOTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0knXSA9IDB4MDA0OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSUFjeXJpbGxpYyddID0gMHgwNDJGO1xuICAgICAgICAgICAgICAgICAgICB0WydJSiddID0gMHgwMTMyO1xuICAgICAgICAgICAgICAgICAgICB0WydJVWN5cmlsbGljJ10gPSAweDA0MkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0lhY3V0ZSddID0gMHgwMENEO1xuICAgICAgICAgICAgICAgICAgICB0WydJYWN1dGVzbWFsbCddID0gMHhGN0VEO1xuICAgICAgICAgICAgICAgICAgICB0WydJYnJldmUnXSA9IDB4MDEyQztcbiAgICAgICAgICAgICAgICAgICAgdFsnSWNhcm9uJ10gPSAweDAxQ0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0ljaXJjbGUnXSA9IDB4MjRCRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSWNpcmN1bWZsZXgnXSA9IDB4MDBDRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSWNpcmN1bWZsZXhzbWFsbCddID0gMHhGN0VFO1xuICAgICAgICAgICAgICAgICAgICB0WydJY3lyaWxsaWMnXSA9IDB4MDQwNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnSWRibGdyYXZlJ10gPSAweDAyMDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0lkaWVyZXNpcyddID0gMHgwMENGO1xuICAgICAgICAgICAgICAgICAgICB0WydJZGllcmVzaXNhY3V0ZSddID0gMHgxRTJFO1xuICAgICAgICAgICAgICAgICAgICB0WydJZGllcmVzaXNjeXJpbGxpYyddID0gMHgwNEU0O1xuICAgICAgICAgICAgICAgICAgICB0WydJZGllcmVzaXNzbWFsbCddID0gMHhGN0VGO1xuICAgICAgICAgICAgICAgICAgICB0WydJZG90J10gPSAweDAxMzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0lkb3RhY2NlbnQnXSA9IDB4MDEzMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnSWRvdGJlbG93J10gPSAweDFFQ0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0llYnJldmVjeXJpbGxpYyddID0gMHgwNEQ2O1xuICAgICAgICAgICAgICAgICAgICB0WydJZWN5cmlsbGljJ10gPSAweDA0MTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0lmcmFrdHVyJ10gPSAweDIxMTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0lncmF2ZSddID0gMHgwMENDO1xuICAgICAgICAgICAgICAgICAgICB0WydJZ3JhdmVzbWFsbCddID0gMHhGN0VDO1xuICAgICAgICAgICAgICAgICAgICB0WydJaG9va2Fib3ZlJ10gPSAweDFFQzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0lpY3lyaWxsaWMnXSA9IDB4MDQxODtcbiAgICAgICAgICAgICAgICAgICAgdFsnSWludmVydGVkYnJldmUnXSA9IDB4MDIwQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSWlzaG9ydGN5cmlsbGljJ10gPSAweDA0MTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0ltYWNyb24nXSA9IDB4MDEyQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSW1hY3JvbmN5cmlsbGljJ10gPSAweDA0RTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0ltb25vc3BhY2UnXSA9IDB4RkYyOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSW5pYXJtZW5pYW4nXSA9IDB4MDUzQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnSW9jeXJpbGxpYyddID0gMHgwNDAxO1xuICAgICAgICAgICAgICAgICAgICB0WydJb2dvbmVrJ10gPSAweDAxMkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0lvdGEnXSA9IDB4MDM5OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSW90YWFmcmljYW4nXSA9IDB4MDE5NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnSW90YWRpZXJlc2lzJ10gPSAweDAzQUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0lvdGF0b25vcyddID0gMHgwMzhBO1xuICAgICAgICAgICAgICAgICAgICB0WydJc21hbGwnXSA9IDB4Rjc2OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSXN0cm9rZSddID0gMHgwMTk3O1xuICAgICAgICAgICAgICAgICAgICB0WydJdGlsZGUnXSA9IDB4MDEyODtcbiAgICAgICAgICAgICAgICAgICAgdFsnSXRpbGRlYmVsb3cnXSA9IDB4MUUyQztcbiAgICAgICAgICAgICAgICAgICAgdFsnSXpoaXRzYWN5cmlsbGljJ10gPSAweDA0NzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0l6aGl0c2FkYmxncmF2ZWN5cmlsbGljJ10gPSAweDA0NzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0onXSA9IDB4MDA0QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSmFhcm1lbmlhbiddID0gMHgwNTQxO1xuICAgICAgICAgICAgICAgICAgICB0WydKY2lyY2xlJ10gPSAweDI0QkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0pjaXJjdW1mbGV4J10gPSAweDAxMzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0plY3lyaWxsaWMnXSA9IDB4MDQwODtcbiAgICAgICAgICAgICAgICAgICAgdFsnSmhlaGFybWVuaWFuJ10gPSAweDA1NEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0ptb25vc3BhY2UnXSA9IDB4RkYyQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSnNtYWxsJ10gPSAweEY3NkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0snXSA9IDB4MDA0QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnS0JzcXVhcmUnXSA9IDB4MzM4NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnS0tzcXVhcmUnXSA9IDB4MzNDRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnS2FiYXNoa2lyY3lyaWxsaWMnXSA9IDB4MDRBMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnS2FjdXRlJ10gPSAweDFFMzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0thY3lyaWxsaWMnXSA9IDB4MDQxQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnS2FkZXNjZW5kZXJjeXJpbGxpYyddID0gMHgwNDlBO1xuICAgICAgICAgICAgICAgICAgICB0WydLYWhvb2tjeXJpbGxpYyddID0gMHgwNEMzO1xuICAgICAgICAgICAgICAgICAgICB0WydLYXBwYSddID0gMHgwMzlBO1xuICAgICAgICAgICAgICAgICAgICB0WydLYXN0cm9rZWN5cmlsbGljJ10gPSAweDA0OUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0thdmVydGljYWxzdHJva2VjeXJpbGxpYyddID0gMHgwNDlDO1xuICAgICAgICAgICAgICAgICAgICB0WydLY2Fyb24nXSA9IDB4MDFFODtcbiAgICAgICAgICAgICAgICAgICAgdFsnS2NlZGlsbGEnXSA9IDB4MDEzNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnS2NpcmNsZSddID0gMHgyNEMwO1xuICAgICAgICAgICAgICAgICAgICB0WydLY29tbWFhY2NlbnQnXSA9IDB4MDEzNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnS2RvdGJlbG93J10gPSAweDFFMzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0tlaGFybWVuaWFuJ10gPSAweDA1NTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0tlbmFybWVuaWFuJ10gPSAweDA1M0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0toYWN5cmlsbGljJ10gPSAweDA0MjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0toZWljb3B0aWMnXSA9IDB4MDNFNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnS2hvb2snXSA9IDB4MDE5ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnS2plY3lyaWxsaWMnXSA9IDB4MDQwQztcbiAgICAgICAgICAgICAgICAgICAgdFsnS2xpbmViZWxvdyddID0gMHgxRTM0O1xuICAgICAgICAgICAgICAgICAgICB0WydLbW9ub3NwYWNlJ10gPSAweEZGMkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0tvcHBhY3lyaWxsaWMnXSA9IDB4MDQ4MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnS29wcGFncmVlayddID0gMHgwM0RFO1xuICAgICAgICAgICAgICAgICAgICB0WydLc2ljeXJpbGxpYyddID0gMHgwNDZFO1xuICAgICAgICAgICAgICAgICAgICB0WydLc21hbGwnXSA9IDB4Rjc2QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnTCddID0gMHgwMDRDO1xuICAgICAgICAgICAgICAgICAgICB0WydMSiddID0gMHgwMUM3O1xuICAgICAgICAgICAgICAgICAgICB0WydMTCddID0gMHhGNkJGO1xuICAgICAgICAgICAgICAgICAgICB0WydMYWN1dGUnXSA9IDB4MDEzOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTGFtYmRhJ10gPSAweDAzOUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0xjYXJvbiddID0gMHgwMTNEO1xuICAgICAgICAgICAgICAgICAgICB0WydMY2VkaWxsYSddID0gMHgwMTNCO1xuICAgICAgICAgICAgICAgICAgICB0WydMY2lyY2xlJ10gPSAweDI0QzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0xjaXJjdW1mbGV4YmVsb3cnXSA9IDB4MUUzQztcbiAgICAgICAgICAgICAgICAgICAgdFsnTGNvbW1hYWNjZW50J10gPSAweDAxM0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0xkb3QnXSA9IDB4MDEzRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnTGRvdGFjY2VudCddID0gMHgwMTNGO1xuICAgICAgICAgICAgICAgICAgICB0WydMZG90YmVsb3cnXSA9IDB4MUUzNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnTGRvdGJlbG93bWFjcm9uJ10gPSAweDFFMzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0xpd25hcm1lbmlhbiddID0gMHgwNTNDO1xuICAgICAgICAgICAgICAgICAgICB0WydMaiddID0gMHgwMUM4O1xuICAgICAgICAgICAgICAgICAgICB0WydMamVjeXJpbGxpYyddID0gMHgwNDA5O1xuICAgICAgICAgICAgICAgICAgICB0WydMbGluZWJlbG93J10gPSAweDFFM0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0xtb25vc3BhY2UnXSA9IDB4RkYyQztcbiAgICAgICAgICAgICAgICAgICAgdFsnTHNsYXNoJ10gPSAweDAxNDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0xzbGFzaHNtYWxsJ10gPSAweEY2Rjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0xzbWFsbCddID0gMHhGNzZDO1xuICAgICAgICAgICAgICAgICAgICB0WydNJ10gPSAweDAwNEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01Cc3F1YXJlJ10gPSAweDMzODY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01hY3JvbiddID0gMHhGNkQwO1xuICAgICAgICAgICAgICAgICAgICB0WydNYWNyb25zbWFsbCddID0gMHhGN0FGO1xuICAgICAgICAgICAgICAgICAgICB0WydNYWN1dGUnXSA9IDB4MUUzRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTWNpcmNsZSddID0gMHgyNEMyO1xuICAgICAgICAgICAgICAgICAgICB0WydNZG90YWNjZW50J10gPSAweDFFNDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01kb3RiZWxvdyddID0gMHgxRTQyO1xuICAgICAgICAgICAgICAgICAgICB0WydNZW5hcm1lbmlhbiddID0gMHgwNTQ0O1xuICAgICAgICAgICAgICAgICAgICB0WydNbW9ub3NwYWNlJ10gPSAweEZGMkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01zbWFsbCddID0gMHhGNzZEO1xuICAgICAgICAgICAgICAgICAgICB0WydNdHVybmVkJ10gPSAweDAxOUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ011J10gPSAweDAzOUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ04nXSA9IDB4MDA0RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTkonXSA9IDB4MDFDQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTmFjdXRlJ10gPSAweDAxNDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ05jYXJvbiddID0gMHgwMTQ3O1xuICAgICAgICAgICAgICAgICAgICB0WydOY2VkaWxsYSddID0gMHgwMTQ1O1xuICAgICAgICAgICAgICAgICAgICB0WydOY2lyY2xlJ10gPSAweDI0QzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ05jaXJjdW1mbGV4YmVsb3cnXSA9IDB4MUU0QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTmNvbW1hYWNjZW50J10gPSAweDAxNDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ05kb3RhY2NlbnQnXSA9IDB4MUU0NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnTmRvdGJlbG93J10gPSAweDFFNDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ05ob29rbGVmdCddID0gMHgwMTlEO1xuICAgICAgICAgICAgICAgICAgICB0WydOaW5lcm9tYW4nXSA9IDB4MjE2ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnTmonXSA9IDB4MDFDQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnTmplY3lyaWxsaWMnXSA9IDB4MDQwQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTmxpbmViZWxvdyddID0gMHgxRTQ4O1xuICAgICAgICAgICAgICAgICAgICB0WydObW9ub3NwYWNlJ10gPSAweEZGMkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ05vd2FybWVuaWFuJ10gPSAweDA1NDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ05zbWFsbCddID0gMHhGNzZFO1xuICAgICAgICAgICAgICAgICAgICB0WydOdGlsZGUnXSA9IDB4MDBEMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTnRpbGRlc21hbGwnXSA9IDB4RjdGMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTnUnXSA9IDB4MDM5RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnTyddID0gMHgwMDRGO1xuICAgICAgICAgICAgICAgICAgICB0WydPRSddID0gMHgwMTUyO1xuICAgICAgICAgICAgICAgICAgICB0WydPRXNtYWxsJ10gPSAweEY2RkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09hY3V0ZSddID0gMHgwMEQzO1xuICAgICAgICAgICAgICAgICAgICB0WydPYWN1dGVzbWFsbCddID0gMHhGN0YzO1xuICAgICAgICAgICAgICAgICAgICB0WydPYmFycmVkY3lyaWxsaWMnXSA9IDB4MDRFODtcbiAgICAgICAgICAgICAgICAgICAgdFsnT2JhcnJlZGRpZXJlc2lzY3lyaWxsaWMnXSA9IDB4MDRFQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnT2JyZXZlJ10gPSAweDAxNEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09jYXJvbiddID0gMHgwMUQxO1xuICAgICAgICAgICAgICAgICAgICB0WydPY2VudGVyZWR0aWxkZSddID0gMHgwMTlGO1xuICAgICAgICAgICAgICAgICAgICB0WydPY2lyY2xlJ10gPSAweDI0QzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09jaXJjdW1mbGV4J10gPSAweDAwRDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09jaXJjdW1mbGV4YWN1dGUnXSA9IDB4MUVEMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnT2NpcmN1bWZsZXhkb3RiZWxvdyddID0gMHgxRUQ4O1xuICAgICAgICAgICAgICAgICAgICB0WydPY2lyY3VtZmxleGdyYXZlJ10gPSAweDFFRDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09jaXJjdW1mbGV4aG9va2Fib3ZlJ10gPSAweDFFRDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09jaXJjdW1mbGV4c21hbGwnXSA9IDB4RjdGNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnT2NpcmN1bWZsZXh0aWxkZSddID0gMHgxRUQ2O1xuICAgICAgICAgICAgICAgICAgICB0WydPY3lyaWxsaWMnXSA9IDB4MDQxRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnT2RibGFjdXRlJ10gPSAweDAxNTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09kYmxncmF2ZSddID0gMHgwMjBDO1xuICAgICAgICAgICAgICAgICAgICB0WydPZGllcmVzaXMnXSA9IDB4MDBENjtcbiAgICAgICAgICAgICAgICAgICAgdFsnT2RpZXJlc2lzY3lyaWxsaWMnXSA9IDB4MDRFNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnT2RpZXJlc2lzc21hbGwnXSA9IDB4RjdGNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnT2RvdGJlbG93J10gPSAweDFFQ0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09nb25la3NtYWxsJ10gPSAweEY2RkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09ncmF2ZSddID0gMHgwMEQyO1xuICAgICAgICAgICAgICAgICAgICB0WydPZ3JhdmVzbWFsbCddID0gMHhGN0YyO1xuICAgICAgICAgICAgICAgICAgICB0WydPaGFybWVuaWFuJ10gPSAweDA1NTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09obSddID0gMHgyMTI2O1xuICAgICAgICAgICAgICAgICAgICB0WydPaG9va2Fib3ZlJ10gPSAweDFFQ0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09ob3JuJ10gPSAweDAxQTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09ob3JuYWN1dGUnXSA9IDB4MUVEQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnT2hvcm5kb3RiZWxvdyddID0gMHgxRUUyO1xuICAgICAgICAgICAgICAgICAgICB0WydPaG9ybmdyYXZlJ10gPSAweDFFREM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09ob3JuaG9va2Fib3ZlJ10gPSAweDFFREU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09ob3JudGlsZGUnXSA9IDB4MUVFMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnT2h1bmdhcnVtbGF1dCddID0gMHgwMTUwO1xuICAgICAgICAgICAgICAgICAgICB0WydPaSddID0gMHgwMUEyO1xuICAgICAgICAgICAgICAgICAgICB0WydPaW52ZXJ0ZWRicmV2ZSddID0gMHgwMjBFO1xuICAgICAgICAgICAgICAgICAgICB0WydPbWFjcm9uJ10gPSAweDAxNEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09tYWNyb25hY3V0ZSddID0gMHgxRTUyO1xuICAgICAgICAgICAgICAgICAgICB0WydPbWFjcm9uZ3JhdmUnXSA9IDB4MUU1MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnT21lZ2EnXSA9IDB4MjEyNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnT21lZ2FjeXJpbGxpYyddID0gMHgwNDYwO1xuICAgICAgICAgICAgICAgICAgICB0WydPbWVnYWdyZWVrJ10gPSAweDAzQTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09tZWdhcm91bmRjeXJpbGxpYyddID0gMHgwNDdBO1xuICAgICAgICAgICAgICAgICAgICB0WydPbWVnYXRpdGxvY3lyaWxsaWMnXSA9IDB4MDQ3QztcbiAgICAgICAgICAgICAgICAgICAgdFsnT21lZ2F0b25vcyddID0gMHgwMzhGO1xuICAgICAgICAgICAgICAgICAgICB0WydPbWljcm9uJ10gPSAweDAzOUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09taWNyb250b25vcyddID0gMHgwMzhDO1xuICAgICAgICAgICAgICAgICAgICB0WydPbW9ub3NwYWNlJ10gPSAweEZGMkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09uZXJvbWFuJ10gPSAweDIxNjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09vZ29uZWsnXSA9IDB4MDFFQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnT29nb25la21hY3JvbiddID0gMHgwMUVDO1xuICAgICAgICAgICAgICAgICAgICB0WydPb3BlbiddID0gMHgwMTg2O1xuICAgICAgICAgICAgICAgICAgICB0WydPc2xhc2gnXSA9IDB4MDBEODtcbiAgICAgICAgICAgICAgICAgICAgdFsnT3NsYXNoYWN1dGUnXSA9IDB4MDFGRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnT3NsYXNoc21hbGwnXSA9IDB4RjdGODtcbiAgICAgICAgICAgICAgICAgICAgdFsnT3NtYWxsJ10gPSAweEY3NkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09zdHJva2VhY3V0ZSddID0gMHgwMUZFO1xuICAgICAgICAgICAgICAgICAgICB0WydPdGN5cmlsbGljJ10gPSAweDA0N0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ090aWxkZSddID0gMHgwMEQ1O1xuICAgICAgICAgICAgICAgICAgICB0WydPdGlsZGVhY3V0ZSddID0gMHgxRTRDO1xuICAgICAgICAgICAgICAgICAgICB0WydPdGlsZGVkaWVyZXNpcyddID0gMHgxRTRFO1xuICAgICAgICAgICAgICAgICAgICB0WydPdGlsZGVzbWFsbCddID0gMHhGN0Y1O1xuICAgICAgICAgICAgICAgICAgICB0WydQJ10gPSAweDAwNTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1BhY3V0ZSddID0gMHgxRTU0O1xuICAgICAgICAgICAgICAgICAgICB0WydQY2lyY2xlJ10gPSAweDI0QzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Bkb3RhY2NlbnQnXSA9IDB4MUU1NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnUGVjeXJpbGxpYyddID0gMHgwNDFGO1xuICAgICAgICAgICAgICAgICAgICB0WydQZWhhcm1lbmlhbiddID0gMHgwNTRBO1xuICAgICAgICAgICAgICAgICAgICB0WydQZW1pZGRsZWhvb2tjeXJpbGxpYyddID0gMHgwNEE2O1xuICAgICAgICAgICAgICAgICAgICB0WydQaGknXSA9IDB4MDNBNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnUGhvb2snXSA9IDB4MDFBNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnUGknXSA9IDB4MDNBMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnUGl3cmFybWVuaWFuJ10gPSAweDA1NTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Btb25vc3BhY2UnXSA9IDB4RkYzMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnUHNpJ10gPSAweDAzQTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1BzaWN5cmlsbGljJ10gPSAweDA0NzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1BzbWFsbCddID0gMHhGNzcwO1xuICAgICAgICAgICAgICAgICAgICB0WydRJ10gPSAweDAwNTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1FjaXJjbGUnXSA9IDB4MjRDNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnUW1vbm9zcGFjZSddID0gMHhGRjMxO1xuICAgICAgICAgICAgICAgICAgICB0WydRc21hbGwnXSA9IDB4Rjc3MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnUiddID0gMHgwMDUyO1xuICAgICAgICAgICAgICAgICAgICB0WydSYWFybWVuaWFuJ10gPSAweDA1NEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1JhY3V0ZSddID0gMHgwMTU0O1xuICAgICAgICAgICAgICAgICAgICB0WydSY2Fyb24nXSA9IDB4MDE1ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnUmNlZGlsbGEnXSA9IDB4MDE1NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnUmNpcmNsZSddID0gMHgyNEM3O1xuICAgICAgICAgICAgICAgICAgICB0WydSY29tbWFhY2NlbnQnXSA9IDB4MDE1NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnUmRibGdyYXZlJ10gPSAweDAyMTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Jkb3RhY2NlbnQnXSA9IDB4MUU1ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnUmRvdGJlbG93J10gPSAweDFFNUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Jkb3RiZWxvd21hY3JvbiddID0gMHgxRTVDO1xuICAgICAgICAgICAgICAgICAgICB0WydSZWhhcm1lbmlhbiddID0gMHgwNTUwO1xuICAgICAgICAgICAgICAgICAgICB0WydSZnJha3R1ciddID0gMHgyMTFDO1xuICAgICAgICAgICAgICAgICAgICB0WydSaG8nXSA9IDB4MDNBMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnUmluZ3NtYWxsJ10gPSAweEY2RkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1JpbnZlcnRlZGJyZXZlJ10gPSAweDAyMTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1JsaW5lYmVsb3cnXSA9IDB4MUU1RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnUm1vbm9zcGFjZSddID0gMHhGRjMyO1xuICAgICAgICAgICAgICAgICAgICB0WydSc21hbGwnXSA9IDB4Rjc3MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnUnNtYWxsaW52ZXJ0ZWQnXSA9IDB4MDI4MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnUnNtYWxsaW52ZXJ0ZWRzdXBlcmlvciddID0gMHgwMkI2O1xuICAgICAgICAgICAgICAgICAgICB0WydTJ10gPSAweDAwNTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMDEwMDAwJ10gPSAweDI1MEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMDIwMDAwJ10gPSAweDI1MTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMDMwMDAwJ10gPSAweDI1MTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMDQwMDAwJ10gPSAweDI1MTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMDUwMDAwJ10gPSAweDI1M0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMDYwMDAwJ10gPSAweDI1MkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMDcwMDAwJ10gPSAweDI1MzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMDgwMDAwJ10gPSAweDI1MUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMDkwMDAwJ10gPSAweDI1MjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMTAwMDAwJ10gPSAweDI1MDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMTEwMDAwJ10gPSAweDI1MDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMTkwMDAwJ10gPSAweDI1NjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMjAwMDAwJ10gPSAweDI1NjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMjEwMDAwJ10gPSAweDI1NTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMjIwMDAwJ10gPSAweDI1NTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMjMwMDAwJ10gPSAweDI1NjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMjQwMDAwJ10gPSAweDI1NTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMjUwMDAwJ10gPSAweDI1NTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMjYwMDAwJ10gPSAweDI1NUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMjcwMDAwJ10gPSAweDI1NUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMjgwMDAwJ10gPSAweDI1NUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMzYwMDAwJ10gPSAweDI1NUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMzcwMDAwJ10gPSAweDI1NUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMzgwMDAwJ10gPSAweDI1NUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMzkwMDAwJ10gPSAweDI1NTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNDAwMDAwJ10gPSAweDI1Njk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNDEwMDAwJ10gPSAweDI1NjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNDIwMDAwJ10gPSAweDI1NjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNDMwMDAwJ10gPSAweDI1NTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNDQwMDAwJ10gPSAweDI1NkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNDUwMDAwJ10gPSAweDI1Njc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNDYwMDAwJ10gPSAweDI1Njg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNDcwMDAwJ10gPSAweDI1NjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNDgwMDAwJ10gPSAweDI1NjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNDkwMDAwJ10gPSAweDI1NTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNTAwMDAwJ10gPSAweDI1NTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNTEwMDAwJ10gPSAweDI1NTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNTIwMDAwJ10gPSAweDI1NTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNTMwMDAwJ10gPSAweDI1NkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNTQwMDAwJ10gPSAweDI1NkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NhY3V0ZSddID0gMHgwMTVBO1xuICAgICAgICAgICAgICAgICAgICB0WydTYWN1dGVkb3RhY2NlbnQnXSA9IDB4MUU2NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnU2FtcGlncmVlayddID0gMHgwM0UwO1xuICAgICAgICAgICAgICAgICAgICB0WydTY2Fyb24nXSA9IDB4MDE2MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnU2Nhcm9uZG90YWNjZW50J10gPSAweDFFNjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NjYXJvbnNtYWxsJ10gPSAweEY2RkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NjZWRpbGxhJ10gPSAweDAxNUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NjaHdhJ10gPSAweDAxOEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NjaHdhY3lyaWxsaWMnXSA9IDB4MDREODtcbiAgICAgICAgICAgICAgICAgICAgdFsnU2Nod2FkaWVyZXNpc2N5cmlsbGljJ10gPSAweDA0REE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NjaXJjbGUnXSA9IDB4MjRDODtcbiAgICAgICAgICAgICAgICAgICAgdFsnU2NpcmN1bWZsZXgnXSA9IDB4MDE1QztcbiAgICAgICAgICAgICAgICAgICAgdFsnU2NvbW1hYWNjZW50J10gPSAweDAyMTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Nkb3RhY2NlbnQnXSA9IDB4MUU2MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnU2RvdGJlbG93J10gPSAweDFFNjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Nkb3RiZWxvd2RvdGFjY2VudCddID0gMHgxRTY4O1xuICAgICAgICAgICAgICAgICAgICB0WydTZWhhcm1lbmlhbiddID0gMHgwNTREO1xuICAgICAgICAgICAgICAgICAgICB0WydTZXZlbnJvbWFuJ10gPSAweDIxNjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NoYWFybWVuaWFuJ10gPSAweDA1NDc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NoYWN5cmlsbGljJ10gPSAweDA0Mjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NoY2hhY3lyaWxsaWMnXSA9IDB4MDQyOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnU2hlaWNvcHRpYyddID0gMHgwM0UyO1xuICAgICAgICAgICAgICAgICAgICB0WydTaGhhY3lyaWxsaWMnXSA9IDB4MDRCQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnU2hpbWFjb3B0aWMnXSA9IDB4MDNFQztcbiAgICAgICAgICAgICAgICAgICAgdFsnU2lnbWEnXSA9IDB4MDNBMztcbiAgICAgICAgICAgICAgICAgICAgdFsnU2l4cm9tYW4nXSA9IDB4MjE2NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnU21vbm9zcGFjZSddID0gMHhGRjMzO1xuICAgICAgICAgICAgICAgICAgICB0WydTb2Z0c2lnbmN5cmlsbGljJ10gPSAweDA0MkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NzbWFsbCddID0gMHhGNzczO1xuICAgICAgICAgICAgICAgICAgICB0WydTdGlnbWFncmVlayddID0gMHgwM0RBO1xuICAgICAgICAgICAgICAgICAgICB0WydUJ10gPSAweDAwNTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RhdSddID0gMHgwM0E0O1xuICAgICAgICAgICAgICAgICAgICB0WydUYmFyJ10gPSAweDAxNjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RjYXJvbiddID0gMHgwMTY0O1xuICAgICAgICAgICAgICAgICAgICB0WydUY2VkaWxsYSddID0gMHgwMTYyO1xuICAgICAgICAgICAgICAgICAgICB0WydUY2lyY2xlJ10gPSAweDI0Qzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RjaXJjdW1mbGV4YmVsb3cnXSA9IDB4MUU3MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnVGNvbW1hYWNjZW50J10gPSAweDAxNjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Rkb3RhY2NlbnQnXSA9IDB4MUU2QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnVGRvdGJlbG93J10gPSAweDFFNkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RlY3lyaWxsaWMnXSA9IDB4MDQyMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnVGVkZXNjZW5kZXJjeXJpbGxpYyddID0gMHgwNEFDO1xuICAgICAgICAgICAgICAgICAgICB0WydUZW5yb21hbiddID0gMHgyMTY5O1xuICAgICAgICAgICAgICAgICAgICB0WydUZXRzZWN5cmlsbGljJ10gPSAweDA0QjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RoZXRhJ10gPSAweDAzOTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Rob29rJ10gPSAweDAxQUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Rob3JuJ10gPSAweDAwREU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Rob3Juc21hbGwnXSA9IDB4RjdGRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnVGhyZWVyb21hbiddID0gMHgyMTYyO1xuICAgICAgICAgICAgICAgICAgICB0WydUaWxkZXNtYWxsJ10gPSAweEY2RkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Rpd25hcm1lbmlhbiddID0gMHgwNTRGO1xuICAgICAgICAgICAgICAgICAgICB0WydUbGluZWJlbG93J10gPSAweDFFNkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Rtb25vc3BhY2UnXSA9IDB4RkYzNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnVG9hcm1lbmlhbiddID0gMHgwNTM5O1xuICAgICAgICAgICAgICAgICAgICB0WydUb25lZml2ZSddID0gMHgwMUJDO1xuICAgICAgICAgICAgICAgICAgICB0WydUb25lc2l4J10gPSAweDAxODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RvbmV0d28nXSA9IDB4MDFBNztcbiAgICAgICAgICAgICAgICAgICAgdFsnVHJldHJvZmxleGhvb2snXSA9IDB4MDFBRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnVHNlY3lyaWxsaWMnXSA9IDB4MDQyNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnVHNoZWN5cmlsbGljJ10gPSAweDA0MEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RzbWFsbCddID0gMHhGNzc0O1xuICAgICAgICAgICAgICAgICAgICB0WydUd2VsdmVyb21hbiddID0gMHgyMTZCO1xuICAgICAgICAgICAgICAgICAgICB0WydUd29yb21hbiddID0gMHgyMTYxO1xuICAgICAgICAgICAgICAgICAgICB0WydVJ10gPSAweDAwNTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1VhY3V0ZSddID0gMHgwMERBO1xuICAgICAgICAgICAgICAgICAgICB0WydVYWN1dGVzbWFsbCddID0gMHhGN0ZBO1xuICAgICAgICAgICAgICAgICAgICB0WydVYnJldmUnXSA9IDB4MDE2QztcbiAgICAgICAgICAgICAgICAgICAgdFsnVWNhcm9uJ10gPSAweDAxRDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1VjaXJjbGUnXSA9IDB4MjRDQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnVWNpcmN1bWZsZXgnXSA9IDB4MDBEQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnVWNpcmN1bWZsZXhiZWxvdyddID0gMHgxRTc2O1xuICAgICAgICAgICAgICAgICAgICB0WydVY2lyY3VtZmxleHNtYWxsJ10gPSAweEY3RkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1VjeXJpbGxpYyddID0gMHgwNDIzO1xuICAgICAgICAgICAgICAgICAgICB0WydVZGJsYWN1dGUnXSA9IDB4MDE3MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnVWRibGdyYXZlJ10gPSAweDAyMTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1VkaWVyZXNpcyddID0gMHgwMERDO1xuICAgICAgICAgICAgICAgICAgICB0WydVZGllcmVzaXNhY3V0ZSddID0gMHgwMUQ3O1xuICAgICAgICAgICAgICAgICAgICB0WydVZGllcmVzaXNiZWxvdyddID0gMHgxRTcyO1xuICAgICAgICAgICAgICAgICAgICB0WydVZGllcmVzaXNjYXJvbiddID0gMHgwMUQ5O1xuICAgICAgICAgICAgICAgICAgICB0WydVZGllcmVzaXNjeXJpbGxpYyddID0gMHgwNEYwO1xuICAgICAgICAgICAgICAgICAgICB0WydVZGllcmVzaXNncmF2ZSddID0gMHgwMURCO1xuICAgICAgICAgICAgICAgICAgICB0WydVZGllcmVzaXNtYWNyb24nXSA9IDB4MDFENTtcbiAgICAgICAgICAgICAgICAgICAgdFsnVWRpZXJlc2lzc21hbGwnXSA9IDB4RjdGQztcbiAgICAgICAgICAgICAgICAgICAgdFsnVWRvdGJlbG93J10gPSAweDFFRTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1VncmF2ZSddID0gMHgwMEQ5O1xuICAgICAgICAgICAgICAgICAgICB0WydVZ3JhdmVzbWFsbCddID0gMHhGN0Y5O1xuICAgICAgICAgICAgICAgICAgICB0WydVaG9va2Fib3ZlJ10gPSAweDFFRTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Vob3JuJ10gPSAweDAxQUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Vob3JuYWN1dGUnXSA9IDB4MUVFODtcbiAgICAgICAgICAgICAgICAgICAgdFsnVWhvcm5kb3RiZWxvdyddID0gMHgxRUYwO1xuICAgICAgICAgICAgICAgICAgICB0WydVaG9ybmdyYXZlJ10gPSAweDFFRUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Vob3JuaG9va2Fib3ZlJ10gPSAweDFFRUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Vob3JudGlsZGUnXSA9IDB4MUVFRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnVWh1bmdhcnVtbGF1dCddID0gMHgwMTcwO1xuICAgICAgICAgICAgICAgICAgICB0WydVaHVuZ2FydW1sYXV0Y3lyaWxsaWMnXSA9IDB4MDRGMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnVWludmVydGVkYnJldmUnXSA9IDB4MDIxNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnVWtjeXJpbGxpYyddID0gMHgwNDc4O1xuICAgICAgICAgICAgICAgICAgICB0WydVbWFjcm9uJ10gPSAweDAxNkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1VtYWNyb25jeXJpbGxpYyddID0gMHgwNEVFO1xuICAgICAgICAgICAgICAgICAgICB0WydVbWFjcm9uZGllcmVzaXMnXSA9IDB4MUU3QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnVW1vbm9zcGFjZSddID0gMHhGRjM1O1xuICAgICAgICAgICAgICAgICAgICB0WydVb2dvbmVrJ10gPSAweDAxNzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Vwc2lsb24nXSA9IDB4MDNBNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnVXBzaWxvbjEnXSA9IDB4MDNEMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnVXBzaWxvbmFjdXRlaG9va3N5bWJvbGdyZWVrJ10gPSAweDAzRDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Vwc2lsb25hZnJpY2FuJ10gPSAweDAxQjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Vwc2lsb25kaWVyZXNpcyddID0gMHgwM0FCO1xuICAgICAgICAgICAgICAgICAgICB0WydVcHNpbG9uZGllcmVzaXNob29rc3ltYm9sZ3JlZWsnXSA9IDB4MDNENDtcbiAgICAgICAgICAgICAgICAgICAgdFsnVXBzaWxvbmhvb2tzeW1ib2wnXSA9IDB4MDNEMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnVXBzaWxvbnRvbm9zJ10gPSAweDAzOEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1VyaW5nJ10gPSAweDAxNkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1VzaG9ydGN5cmlsbGljJ10gPSAweDA0MEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1VzbWFsbCddID0gMHhGNzc1O1xuICAgICAgICAgICAgICAgICAgICB0WydVc3RyYWlnaHRjeXJpbGxpYyddID0gMHgwNEFFO1xuICAgICAgICAgICAgICAgICAgICB0WydVc3RyYWlnaHRzdHJva2VjeXJpbGxpYyddID0gMHgwNEIwO1xuICAgICAgICAgICAgICAgICAgICB0WydVdGlsZGUnXSA9IDB4MDE2ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnVXRpbGRlYWN1dGUnXSA9IDB4MUU3ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnVXRpbGRlYmVsb3cnXSA9IDB4MUU3NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnViddID0gMHgwMDU2O1xuICAgICAgICAgICAgICAgICAgICB0WydWY2lyY2xlJ10gPSAweDI0Q0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Zkb3RiZWxvdyddID0gMHgxRTdFO1xuICAgICAgICAgICAgICAgICAgICB0WydWZWN5cmlsbGljJ10gPSAweDA0MTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Zld2FybWVuaWFuJ10gPSAweDA1NEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Zob29rJ10gPSAweDAxQjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Ztb25vc3BhY2UnXSA9IDB4RkYzNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnVm9hcm1lbmlhbiddID0gMHgwNTQ4O1xuICAgICAgICAgICAgICAgICAgICB0WydWc21hbGwnXSA9IDB4Rjc3NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnVnRpbGRlJ10gPSAweDFFN0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1cnXSA9IDB4MDA1NztcbiAgICAgICAgICAgICAgICAgICAgdFsnV2FjdXRlJ10gPSAweDFFODI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1djaXJjbGUnXSA9IDB4MjRDQztcbiAgICAgICAgICAgICAgICAgICAgdFsnV2NpcmN1bWZsZXgnXSA9IDB4MDE3NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnV2RpZXJlc2lzJ10gPSAweDFFODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1dkb3RhY2NlbnQnXSA9IDB4MUU4NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnV2RvdGJlbG93J10gPSAweDFFODg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1dncmF2ZSddID0gMHgxRTgwO1xuICAgICAgICAgICAgICAgICAgICB0WydXbW9ub3NwYWNlJ10gPSAweEZGMzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1dzbWFsbCddID0gMHhGNzc3O1xuICAgICAgICAgICAgICAgICAgICB0WydYJ10gPSAweDAwNTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1hjaXJjbGUnXSA9IDB4MjRDRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnWGRpZXJlc2lzJ10gPSAweDFFOEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1hkb3RhY2NlbnQnXSA9IDB4MUU4QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnWGVoYXJtZW5pYW4nXSA9IDB4MDUzRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnWGknXSA9IDB4MDM5RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnWG1vbm9zcGFjZSddID0gMHhGRjM4O1xuICAgICAgICAgICAgICAgICAgICB0WydYc21hbGwnXSA9IDB4Rjc3ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnWSddID0gMHgwMDU5O1xuICAgICAgICAgICAgICAgICAgICB0WydZYWN1dGUnXSA9IDB4MDBERDtcbiAgICAgICAgICAgICAgICAgICAgdFsnWWFjdXRlc21hbGwnXSA9IDB4RjdGRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnWWF0Y3lyaWxsaWMnXSA9IDB4MDQ2MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnWWNpcmNsZSddID0gMHgyNENFO1xuICAgICAgICAgICAgICAgICAgICB0WydZY2lyY3VtZmxleCddID0gMHgwMTc2O1xuICAgICAgICAgICAgICAgICAgICB0WydZZGllcmVzaXMnXSA9IDB4MDE3ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnWWRpZXJlc2lzc21hbGwnXSA9IDB4RjdGRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnWWRvdGFjY2VudCddID0gMHgxRThFO1xuICAgICAgICAgICAgICAgICAgICB0WydZZG90YmVsb3cnXSA9IDB4MUVGNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnWWVyaWN5cmlsbGljJ10gPSAweDA0MkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1llcnVkaWVyZXNpc2N5cmlsbGljJ10gPSAweDA0Rjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1lncmF2ZSddID0gMHgxRUYyO1xuICAgICAgICAgICAgICAgICAgICB0WydZaG9vayddID0gMHgwMUIzO1xuICAgICAgICAgICAgICAgICAgICB0WydZaG9va2Fib3ZlJ10gPSAweDFFRjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1lpYXJtZW5pYW4nXSA9IDB4MDU0NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnWWljeXJpbGxpYyddID0gMHgwNDA3O1xuICAgICAgICAgICAgICAgICAgICB0WydZaXduYXJtZW5pYW4nXSA9IDB4MDU1MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnWW1vbm9zcGFjZSddID0gMHhGRjM5O1xuICAgICAgICAgICAgICAgICAgICB0WydZc21hbGwnXSA9IDB4Rjc3OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnWXRpbGRlJ10gPSAweDFFRjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1l1c2JpZ2N5cmlsbGljJ10gPSAweDA0NkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1l1c2JpZ2lvdGlmaWVkY3lyaWxsaWMnXSA9IDB4MDQ2QztcbiAgICAgICAgICAgICAgICAgICAgdFsnWXVzbGl0dGxlY3lyaWxsaWMnXSA9IDB4MDQ2NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnWXVzbGl0dGxlaW90aWZpZWRjeXJpbGxpYyddID0gMHgwNDY4O1xuICAgICAgICAgICAgICAgICAgICB0WydaJ10gPSAweDAwNUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1phYXJtZW5pYW4nXSA9IDB4MDUzNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnWmFjdXRlJ10gPSAweDAxNzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1pjYXJvbiddID0gMHgwMTdEO1xuICAgICAgICAgICAgICAgICAgICB0WydaY2Fyb25zbWFsbCddID0gMHhGNkZGO1xuICAgICAgICAgICAgICAgICAgICB0WydaY2lyY2xlJ10gPSAweDI0Q0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1pjaXJjdW1mbGV4J10gPSAweDFFOTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1pkb3QnXSA9IDB4MDE3QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnWmRvdGFjY2VudCddID0gMHgwMTdCO1xuICAgICAgICAgICAgICAgICAgICB0WydaZG90YmVsb3cnXSA9IDB4MUU5MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnWmVjeXJpbGxpYyddID0gMHgwNDE3O1xuICAgICAgICAgICAgICAgICAgICB0WydaZWRlc2NlbmRlcmN5cmlsbGljJ10gPSAweDA0OTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1plZGllcmVzaXNjeXJpbGxpYyddID0gMHgwNERFO1xuICAgICAgICAgICAgICAgICAgICB0WydaZXRhJ10gPSAweDAzOTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1poZWFybWVuaWFuJ10gPSAweDA1M0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1poZWJyZXZlY3lyaWxsaWMnXSA9IDB4MDRDMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnWmhlY3lyaWxsaWMnXSA9IDB4MDQxNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnWmhlZGVzY2VuZGVyY3lyaWxsaWMnXSA9IDB4MDQ5NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnWmhlZGllcmVzaXNjeXJpbGxpYyddID0gMHgwNERDO1xuICAgICAgICAgICAgICAgICAgICB0WydabGluZWJlbG93J10gPSAweDFFOTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1ptb25vc3BhY2UnXSA9IDB4RkYzQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnWnNtYWxsJ10gPSAweEY3N0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1pzdHJva2UnXSA9IDB4MDFCNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYSddID0gMHgwMDYxO1xuICAgICAgICAgICAgICAgICAgICB0WydhYWJlbmdhbGknXSA9IDB4MDk4NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWFjdXRlJ10gPSAweDAwRTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FhZGV2YSddID0gMHgwOTA2O1xuICAgICAgICAgICAgICAgICAgICB0WydhYWd1amFyYXRpJ10gPSAweDBBODY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FhZ3VybXVraGknXSA9IDB4MEEwNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWFtYXRyYWd1cm11a2hpJ10gPSAweDBBM0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FhcnVzcXVhcmUnXSA9IDB4MzMwMztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWF2b3dlbHNpZ25iZW5nYWxpJ10gPSAweDA5QkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fhdm93ZWxzaWduZGV2YSddID0gMHgwOTNFO1xuICAgICAgICAgICAgICAgICAgICB0WydhYXZvd2Vsc2lnbmd1amFyYXRpJ10gPSAweDBBQkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FiYnJldmlhdGlvbm1hcmthcm1lbmlhbiddID0gMHgwNTVGO1xuICAgICAgICAgICAgICAgICAgICB0WydhYmJyZXZpYXRpb25zaWduZGV2YSddID0gMHgwOTcwO1xuICAgICAgICAgICAgICAgICAgICB0WydhYmVuZ2FsaSddID0gMHgwOTg1O1xuICAgICAgICAgICAgICAgICAgICB0WydhYm9wb21vZm8nXSA9IDB4MzExQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWJyZXZlJ10gPSAweDAxMDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FicmV2ZWFjdXRlJ10gPSAweDFFQUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FicmV2ZWN5cmlsbGljJ10gPSAweDA0RDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FicmV2ZWRvdGJlbG93J10gPSAweDFFQjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FicmV2ZWdyYXZlJ10gPSAweDFFQjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FicmV2ZWhvb2thYm92ZSddID0gMHgxRUIzO1xuICAgICAgICAgICAgICAgICAgICB0WydhYnJldmV0aWxkZSddID0gMHgxRUI1O1xuICAgICAgICAgICAgICAgICAgICB0WydhY2Fyb24nXSA9IDB4MDFDRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWNpcmNsZSddID0gMHgyNEQwO1xuICAgICAgICAgICAgICAgICAgICB0WydhY2lyY3VtZmxleCddID0gMHgwMEUyO1xuICAgICAgICAgICAgICAgICAgICB0WydhY2lyY3VtZmxleGFjdXRlJ10gPSAweDFFQTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FjaXJjdW1mbGV4ZG90YmVsb3cnXSA9IDB4MUVBRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWNpcmN1bWZsZXhncmF2ZSddID0gMHgxRUE3O1xuICAgICAgICAgICAgICAgICAgICB0WydhY2lyY3VtZmxleGhvb2thYm92ZSddID0gMHgxRUE5O1xuICAgICAgICAgICAgICAgICAgICB0WydhY2lyY3VtZmxleHRpbGRlJ10gPSAweDFFQUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FjdXRlJ10gPSAweDAwQjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FjdXRlYmVsb3djbWInXSA9IDB4MDMxNztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWN1dGVjbWInXSA9IDB4MDMwMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWN1dGVjb21iJ10gPSAweDAzMDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FjdXRlZGV2YSddID0gMHgwOTU0O1xuICAgICAgICAgICAgICAgICAgICB0WydhY3V0ZWxvd21vZCddID0gMHgwMkNGO1xuICAgICAgICAgICAgICAgICAgICB0WydhY3V0ZXRvbmVjbWInXSA9IDB4MDM0MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWN5cmlsbGljJ10gPSAweDA0MzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FkYmxncmF2ZSddID0gMHgwMjAxO1xuICAgICAgICAgICAgICAgICAgICB0WydhZGRha2d1cm11a2hpJ10gPSAweDBBNzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FkZXZhJ10gPSAweDA5MDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FkaWVyZXNpcyddID0gMHgwMEU0O1xuICAgICAgICAgICAgICAgICAgICB0WydhZGllcmVzaXNjeXJpbGxpYyddID0gMHgwNEQzO1xuICAgICAgICAgICAgICAgICAgICB0WydhZGllcmVzaXNtYWNyb24nXSA9IDB4MDFERjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWRvdGJlbG93J10gPSAweDFFQTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fkb3RtYWNyb24nXSA9IDB4MDFFMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWUnXSA9IDB4MDBFNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWVhY3V0ZSddID0gMHgwMUZEO1xuICAgICAgICAgICAgICAgICAgICB0WydhZWtvcmVhbiddID0gMHgzMTUwO1xuICAgICAgICAgICAgICAgICAgICB0WydhZW1hY3JvbiddID0gMHgwMUUzO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMDAyMDgnXSA9IDB4MjAxNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTA4OTQxJ10gPSAweDIwQTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDAxNyddID0gMHgwNDEwO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwMTgnXSA9IDB4MDQxMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDE5J10gPSAweDA0MTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDAyMCddID0gMHgwNDEzO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwMjEnXSA9IDB4MDQxNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDIyJ10gPSAweDA0MTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDAyMyddID0gMHgwNDAxO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwMjQnXSA9IDB4MDQxNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDI1J10gPSAweDA0MTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDAyNiddID0gMHgwNDE4O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwMjcnXSA9IDB4MDQxOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDI4J10gPSAweDA0MUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDAyOSddID0gMHgwNDFCO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwMzAnXSA9IDB4MDQxQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDMxJ10gPSAweDA0MUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDAzMiddID0gMHgwNDFFO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwMzMnXSA9IDB4MDQxRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDM0J10gPSAweDA0MjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDAzNSddID0gMHgwNDIxO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwMzYnXSA9IDB4MDQyMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDM3J10gPSAweDA0MjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDAzOCddID0gMHgwNDI0O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwMzknXSA9IDB4MDQyNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDQwJ10gPSAweDA0MjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA0MSddID0gMHgwNDI3O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNDInXSA9IDB4MDQyODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDQzJ10gPSAweDA0Mjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA0NCddID0gMHgwNDJBO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNDUnXSA9IDB4MDQyQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDQ2J10gPSAweDA0MkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA0NyddID0gMHgwNDJEO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNDgnXSA9IDB4MDQyRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDQ5J10gPSAweDA0MkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA1MCddID0gMHgwNDkwO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNTEnXSA9IDB4MDQwMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDUyJ10gPSAweDA0MDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA1MyddID0gMHgwNDA0O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNTQnXSA9IDB4MDQwNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDU1J10gPSAweDA0MDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA1NiddID0gMHgwNDA3O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNTcnXSA9IDB4MDQwODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDU4J10gPSAweDA0MDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA1OSddID0gMHgwNDBBO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNjAnXSA9IDB4MDQwQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDYxJ10gPSAweDA0MEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA2MiddID0gMHgwNDBFO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNjMnXSA9IDB4RjZDNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDY0J10gPSAweEY2QzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA2NSddID0gMHgwNDMwO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNjYnXSA9IDB4MDQzMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDY3J10gPSAweDA0MzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA2OCddID0gMHgwNDMzO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNjknXSA9IDB4MDQzNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDcwJ10gPSAweDA0MzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA3MSddID0gMHgwNDUxO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNzInXSA9IDB4MDQzNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDczJ10gPSAweDA0Mzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA3NCddID0gMHgwNDM4O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNzUnXSA9IDB4MDQzOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDc2J10gPSAweDA0M0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA3NyddID0gMHgwNDNCO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNzgnXSA9IDB4MDQzQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDc5J10gPSAweDA0M0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA4MCddID0gMHgwNDNFO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwODEnXSA9IDB4MDQzRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDgyJ10gPSAweDA0NDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA4MyddID0gMHgwNDQxO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwODQnXSA9IDB4MDQ0MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDg1J10gPSAweDA0NDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA4NiddID0gMHgwNDQ0O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwODcnXSA9IDB4MDQ0NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDg4J10gPSAweDA0NDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA4OSddID0gMHgwNDQ3O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwOTAnXSA9IDB4MDQ0ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDkxJ10gPSAweDA0NDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA5MiddID0gMHgwNDRBO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwOTMnXSA9IDB4MDQ0QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDk0J10gPSAweDA0NEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA5NSddID0gMHgwNDREO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwOTYnXSA9IDB4MDQ0RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDk3J10gPSAweDA0NEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA5OCddID0gMHgwNDkxO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwOTknXSA9IDB4MDQ1MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMTAwJ10gPSAweDA0NTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDEwMSddID0gMHgwNDU0O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAxMDInXSA9IDB4MDQ1NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMTAzJ10gPSAweDA0NTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDEwNCddID0gMHgwNDU3O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAxMDUnXSA9IDB4MDQ1ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMTA2J10gPSAweDA0NTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDEwNyddID0gMHgwNDVBO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAxMDgnXSA9IDB4MDQ1QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMTA5J10gPSAweDA0NUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDExMCddID0gMHgwNDVFO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAxNDUnXSA9IDB4MDQwRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMTQ2J10gPSAweDA0NjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDE0NyddID0gMHgwNDcyO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAxNDgnXSA9IDB4MDQ3NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMTkyJ10gPSAweEY2QzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDE5MyddID0gMHgwNDVGO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAxOTQnXSA9IDB4MDQ2MztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMTk1J10gPSAweDA0NzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDE5NiddID0gMHgwNDc1O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTA4MzEnXSA9IDB4RjZDNztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwODMyJ10gPSAweEY2Qzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDg0NiddID0gMHgwNEQ5O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMjk5J10gPSAweDIwMEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkzMDAnXSA9IDB4MjAwRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTMwMSddID0gMHgyMDBEO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTczODEnXSA9IDB4MDY2QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3Mzg4J10gPSAweDA2MEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzM5MiddID0gMHgwNjYwO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTczOTMnXSA9IDB4MDY2MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3Mzk0J10gPSAweDA2NjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzM5NSddID0gMHgwNjYzO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTczOTYnXSA9IDB4MDY2NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3Mzk3J10gPSAweDA2NjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzM5OCddID0gMHgwNjY2O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTczOTknXSA9IDB4MDY2NztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDAwJ10gPSAweDA2Njg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQwMSddID0gMHgwNjY5O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0MDMnXSA9IDB4MDYxQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDA3J10gPSAweDA2MUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQwOSddID0gMHgwNjIxO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0MTAnXSA9IDB4MDYyMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDExJ10gPSAweDA2MjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQxMiddID0gMHgwNjI0O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0MTMnXSA9IDB4MDYyNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDE0J10gPSAweDA2MjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQxNSddID0gMHgwNjI3O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0MTYnXSA9IDB4MDYyODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDE3J10gPSAweDA2Mjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQxOCddID0gMHgwNjJBO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0MTknXSA9IDB4MDYyQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDIwJ10gPSAweDA2MkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQyMSddID0gMHgwNjJEO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0MjInXSA9IDB4MDYyRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDIzJ10gPSAweDA2MkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQyNCddID0gMHgwNjMwO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0MjUnXSA9IDB4MDYzMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDI2J10gPSAweDA2MzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQyNyddID0gMHgwNjMzO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0MjgnXSA9IDB4MDYzNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDI5J10gPSAweDA2MzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQzMCddID0gMHgwNjM2O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0MzEnXSA9IDB4MDYzNztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDMyJ10gPSAweDA2Mzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQzMyddID0gMHgwNjM5O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0MzQnXSA9IDB4MDYzQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDQwJ10gPSAweDA2NDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQ0MSddID0gMHgwNjQxO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0NDInXSA9IDB4MDY0MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDQzJ10gPSAweDA2NDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQ0NCddID0gMHgwNjQ0O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0NDUnXSA9IDB4MDY0NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDQ2J10gPSAweDA2NDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQ0OCddID0gMHgwNjQ4O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0NDknXSA9IDB4MDY0OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDUwJ10gPSAweDA2NEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQ1MSddID0gMHgwNjRCO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0NTInXSA9IDB4MDY0QztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDUzJ10gPSAweDA2NEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQ1NCddID0gMHgwNjRFO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0NTUnXSA9IDB4MDY0RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDU2J10gPSAweDA2NTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQ1NyddID0gMHgwNjUxO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0NTgnXSA9IDB4MDY1MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDcwJ10gPSAweDA2NDc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzUwNSddID0gMHgwNkE0O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc1MDYnXSA9IDB4MDY3RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NTA3J10gPSAweDA2ODY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzUwOCddID0gMHgwNjk4O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc1MDknXSA9IDB4MDZBRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NTExJ10gPSAweDA2Nzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzUxMiddID0gMHgwNjg4O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc1MTMnXSA9IDB4MDY5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NTE0J10gPSAweDA2QkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzUxOSddID0gMHgwNkQyO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc1MzQnXSA9IDB4MDZENTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NjM2J10gPSAweDIwQUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzY0NSddID0gMHgwNUJFO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc2NTgnXSA9IDB4MDVDMztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NjY0J10gPSAweDA1RDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzY2NSddID0gMHgwNUQxO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc2NjYnXSA9IDB4MDVEMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NjY3J10gPSAweDA1RDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzY2OCddID0gMHgwNUQ0O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc2NjknXSA9IDB4MDVENTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NjcwJ10gPSAweDA1RDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzY3MSddID0gMHgwNUQ3O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc2NzInXSA9IDB4MDVEODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NjczJ10gPSAweDA1RDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzY3NCddID0gMHgwNURBO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc2NzUnXSA9IDB4MDVEQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3Njc2J10gPSAweDA1REM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzY3NyddID0gMHgwNUREO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc2NzgnXSA9IDB4MDVERTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3Njc5J10gPSAweDA1REY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzY4MCddID0gMHgwNUUwO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc2ODEnXSA9IDB4MDVFMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NjgyJ10gPSAweDA1RTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzY4MyddID0gMHgwNUUzO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc2ODQnXSA9IDB4MDVFNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3Njg1J10gPSAweDA1RTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzY4NiddID0gMHgwNUU2O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc2ODcnXSA9IDB4MDVFNztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3Njg4J10gPSAweDA1RTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzY4OSddID0gMHgwNUU5O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc2OTAnXSA9IDB4MDVFQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3Njk0J10gPSAweEZCMkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzY5NSddID0gMHhGQjJCO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc3MDAnXSA9IDB4RkI0QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NzA1J10gPSAweEZCMUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzcxNiddID0gMHgwNUYwO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc3MTcnXSA9IDB4MDVGMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NzE4J10gPSAweDA1RjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzcyMyddID0gMHhGQjM1O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc3OTMnXSA9IDB4MDVCNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3Nzk0J10gPSAweDA1QjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1Nzc5NSddID0gMHgwNUI2O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc3OTYnXSA9IDB4MDVCQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3Nzk3J10gPSAweDA1Qjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1Nzc5OCddID0gMHgwNUI3O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc3OTknXSA9IDB4MDVCMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3ODAwJ10gPSAweDA1QjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzgwMSddID0gMHgwNUIxO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc4MDInXSA9IDB4MDVCMztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3ODAzJ10gPSAweDA1QzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzgwNCddID0gMHgwNUMxO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc4MDYnXSA9IDB4MDVCOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3ODA3J10gPSAweDA1QkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzgzOSddID0gMHgwNUJEO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc4NDEnXSA9IDB4MDVCRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3ODQyJ10gPSAweDA1QzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzkyOSddID0gMHgwMkJDO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNjEyNDgnXSA9IDB4MjEwNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTYxMjg5J10gPSAweDIxMTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk2MTM1MiddID0gMHgyMTE2O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNjE1NzMnXSA9IDB4MjAyQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTYxNTc0J10gPSAweDIwMkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk2MTU3NSddID0gMHgyMDJFO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNjE2NjQnXSA9IDB4MjAwQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTYzMTY3J10gPSAweDA2NkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk2NDkzNyddID0gMHgwMkJEO1xuICAgICAgICAgICAgICAgICAgICB0WydhZ3JhdmUnXSA9IDB4MDBFMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWd1amFyYXRpJ10gPSAweDBBODU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FndXJtdWtoaSddID0gMHgwQTA1O1xuICAgICAgICAgICAgICAgICAgICB0WydhaGlyYWdhbmEnXSA9IDB4MzA0MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWhvb2thYm92ZSddID0gMHgxRUEzO1xuICAgICAgICAgICAgICAgICAgICB0WydhaWJlbmdhbGknXSA9IDB4MDk5MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWlib3BvbW9mbyddID0gMHgzMTFFO1xuICAgICAgICAgICAgICAgICAgICB0WydhaWRldmEnXSA9IDB4MDkxMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWllY3lyaWxsaWMnXSA9IDB4MDRENTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWlndWphcmF0aSddID0gMHgwQTkwO1xuICAgICAgICAgICAgICAgICAgICB0WydhaWd1cm11a2hpJ10gPSAweDBBMTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FpbWF0cmFndXJtdWtoaSddID0gMHgwQTQ4O1xuICAgICAgICAgICAgICAgICAgICB0WydhaW5hcmFiaWMnXSA9IDB4MDYzOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWluZmluYWxhcmFiaWMnXSA9IDB4RkVDQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWluaW5pdGlhbGFyYWJpYyddID0gMHhGRUNCO1xuICAgICAgICAgICAgICAgICAgICB0WydhaW5tZWRpYWxhcmFiaWMnXSA9IDB4RkVDQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWludmVydGVkYnJldmUnXSA9IDB4MDIwMztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWl2b3dlbHNpZ25iZW5nYWxpJ10gPSAweDA5Qzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fpdm93ZWxzaWduZGV2YSddID0gMHgwOTQ4O1xuICAgICAgICAgICAgICAgICAgICB0WydhaXZvd2Vsc2lnbmd1amFyYXRpJ10gPSAweDBBQzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FrYXRha2FuYSddID0gMHgzMEEyO1xuICAgICAgICAgICAgICAgICAgICB0Wydha2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY3MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWtvcmVhbiddID0gMHgzMTRGO1xuICAgICAgICAgICAgICAgICAgICB0WydhbGVmJ10gPSAweDA1RDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FsZWZhcmFiaWMnXSA9IDB4MDYyNztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWxlZmRhZ2VzaGhlYnJldyddID0gMHhGQjMwO1xuICAgICAgICAgICAgICAgICAgICB0WydhbGVmZmluYWxhcmFiaWMnXSA9IDB4RkU4RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWxlZmhhbXphYWJvdmVhcmFiaWMnXSA9IDB4MDYyMztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWxlZmhhbXphYWJvdmVmaW5hbGFyYWJpYyddID0gMHhGRTg0O1xuICAgICAgICAgICAgICAgICAgICB0WydhbGVmaGFtemFiZWxvd2FyYWJpYyddID0gMHgwNjI1O1xuICAgICAgICAgICAgICAgICAgICB0WydhbGVmaGFtemFiZWxvd2ZpbmFsYXJhYmljJ10gPSAweEZFODg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FsZWZoZWJyZXcnXSA9IDB4MDVEMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWxlZmxhbWVkaGVicmV3J10gPSAweEZCNEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FsZWZtYWRkYWFib3ZlYXJhYmljJ10gPSAweDA2MjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FsZWZtYWRkYWFib3ZlZmluYWxhcmFiaWMnXSA9IDB4RkU4MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWxlZm1ha3N1cmFhcmFiaWMnXSA9IDB4MDY0OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWxlZm1ha3N1cmFmaW5hbGFyYWJpYyddID0gMHhGRUYwO1xuICAgICAgICAgICAgICAgICAgICB0WydhbGVmbWFrc3VyYWluaXRpYWxhcmFiaWMnXSA9IDB4RkVGMztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWxlZm1ha3N1cmFtZWRpYWxhcmFiaWMnXSA9IDB4RkVGNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWxlZnBhdGFoaGVicmV3J10gPSAweEZCMkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FsZWZxYW1hdHNoZWJyZXcnXSA9IDB4RkIyRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWxlcGgnXSA9IDB4MjEzNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWxsZXF1YWwnXSA9IDB4MjI0QztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWxwaGEnXSA9IDB4MDNCMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWxwaGF0b25vcyddID0gMHgwM0FDO1xuICAgICAgICAgICAgICAgICAgICB0WydhbWFjcm9uJ10gPSAweDAxMDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Ftb25vc3BhY2UnXSA9IDB4RkY0MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYW1wZXJzYW5kJ10gPSAweDAwMjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FtcGVyc2FuZG1vbm9zcGFjZSddID0gMHhGRjA2O1xuICAgICAgICAgICAgICAgICAgICB0WydhbXBlcnNhbmRzbWFsbCddID0gMHhGNzI2O1xuICAgICAgICAgICAgICAgICAgICB0WydhbXNxdWFyZSddID0gMHgzM0MyO1xuICAgICAgICAgICAgICAgICAgICB0WydhbmJvcG9tb2ZvJ10gPSAweDMxMjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FuZ2JvcG9tb2ZvJ10gPSAweDMxMjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FuZ2JyYWNrZXRsZWZ0J10gPSAweDMwMDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FuZ2JyYWNrZXRyaWdodCddID0gMHgzMDA5O1xuICAgICAgICAgICAgICAgICAgICB0WydhbmdraGFua2h1dGhhaSddID0gMHgwRTVBO1xuICAgICAgICAgICAgICAgICAgICB0WydhbmdsZSddID0gMHgyMjIwO1xuICAgICAgICAgICAgICAgICAgICB0WydhbmdsZWJyYWNrZXRsZWZ0J10gPSAweDMwMDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FuZ2xlYnJhY2tldGxlZnR2ZXJ0aWNhbCddID0gMHhGRTNGO1xuICAgICAgICAgICAgICAgICAgICB0WydhbmdsZWJyYWNrZXRyaWdodCddID0gMHgzMDA5O1xuICAgICAgICAgICAgICAgICAgICB0WydhbmdsZWJyYWNrZXRyaWdodHZlcnRpY2FsJ10gPSAweEZFNDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FuZ2xlbGVmdCddID0gMHgyMzI5O1xuICAgICAgICAgICAgICAgICAgICB0WydhbmdsZXJpZ2h0J10gPSAweDIzMkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FuZ3N0cm9tJ10gPSAweDIxMkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fub3RlbGVpYSddID0gMHgwMzg3O1xuICAgICAgICAgICAgICAgICAgICB0WydhbnVkYXR0YWRldmEnXSA9IDB4MDk1MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYW51c3ZhcmFiZW5nYWxpJ10gPSAweDA5ODI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FudXN2YXJhZGV2YSddID0gMHgwOTAyO1xuICAgICAgICAgICAgICAgICAgICB0WydhbnVzdmFyYWd1amFyYXRpJ10gPSAweDBBODI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FvZ29uZWsnXSA9IDB4MDEwNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXBhYXRvc3F1YXJlJ10gPSAweDMzMDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FwYXJlbiddID0gMHgyNDlDO1xuICAgICAgICAgICAgICAgICAgICB0WydhcG9zdHJvcGhlYXJtZW5pYW4nXSA9IDB4MDU1QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXBvc3Ryb3BoZW1vZCddID0gMHgwMkJDO1xuICAgICAgICAgICAgICAgICAgICB0WydhcHBsZSddID0gMHhGOEZGO1xuICAgICAgICAgICAgICAgICAgICB0WydhcHByb2FjaGVzJ10gPSAweDIyNTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FwcHJveGVxdWFsJ10gPSAweDIyNDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FwcHJveGVxdWFsb3JpbWFnZSddID0gMHgyMjUyO1xuICAgICAgICAgICAgICAgICAgICB0WydhcHByb3hpbWF0ZWx5ZXF1YWwnXSA9IDB4MjI0NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJhZWFla29yZWFuJ10gPSAweDMxOEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FyYWVha29yZWFuJ10gPSAweDMxOEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FyYyddID0gMHgyMzEyO1xuICAgICAgICAgICAgICAgICAgICB0WydhcmlnaHRoYWxmcmluZyddID0gMHgxRTlBO1xuICAgICAgICAgICAgICAgICAgICB0WydhcmluZyddID0gMHgwMEU1O1xuICAgICAgICAgICAgICAgICAgICB0WydhcmluZ2FjdXRlJ10gPSAweDAxRkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FyaW5nYmVsb3cnXSA9IDB4MUUwMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dib3RoJ10gPSAweDIxOTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93ZGFzaGRvd24nXSA9IDB4MjFFMztcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dkYXNobGVmdCddID0gMHgyMUUwO1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd2Rhc2hyaWdodCddID0gMHgyMUUyO1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd2Rhc2h1cCddID0gMHgyMUUxO1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd2RibGJvdGgnXSA9IDB4MjFENDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dkYmxkb3duJ10gPSAweDIxRDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93ZGJsbGVmdCddID0gMHgyMUQwO1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd2RibHJpZ2h0J10gPSAweDIxRDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93ZGJsdXAnXSA9IDB4MjFEMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dkb3duJ10gPSAweDIxOTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93ZG93bmxlZnQnXSA9IDB4MjE5OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dkb3ducmlnaHQnXSA9IDB4MjE5ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dkb3dud2hpdGUnXSA9IDB4MjFFOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3doZWFkZG93bm1vZCddID0gMHgwMkM1O1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd2hlYWRsZWZ0bW9kJ10gPSAweDAyQzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93aGVhZHJpZ2h0bW9kJ10gPSAweDAyQzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93aGVhZHVwbW9kJ10gPSAweDAyQzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93aG9yaXpleCddID0gMHhGOEU3O1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd2xlZnQnXSA9IDB4MjE5MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dsZWZ0ZGJsJ10gPSAweDIxRDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93bGVmdGRibHN0cm9rZSddID0gMHgyMUNEO1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd2xlZnRvdmVycmlnaHQnXSA9IDB4MjFDNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dsZWZ0d2hpdGUnXSA9IDB4MjFFNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dyaWdodCddID0gMHgyMTkyO1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd3JpZ2h0ZGJsc3Ryb2tlJ10gPSAweDIxQ0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93cmlnaHRoZWF2eSddID0gMHgyNzlFO1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd3JpZ2h0b3ZlcmxlZnQnXSA9IDB4MjFDNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dyaWdodHdoaXRlJ10gPSAweDIxRTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93dGFibGVmdCddID0gMHgyMUU0O1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd3RhYnJpZ2h0J10gPSAweDIxRTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93dXAnXSA9IDB4MjE5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3d1cGRuJ10gPSAweDIxOTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93dXBkbmJzZSddID0gMHgyMUE4O1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd3VwZG93bmJhc2UnXSA9IDB4MjFBODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3d1cGxlZnQnXSA9IDB4MjE5NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3d1cGxlZnRvZmRvd24nXSA9IDB4MjFDNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3d1cHJpZ2h0J10gPSAweDIxOTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93dXB3aGl0ZSddID0gMHgyMUU3O1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd3ZlcnRleCddID0gMHhGOEU2O1xuICAgICAgICAgICAgICAgICAgICB0Wydhc2NpaWNpcmN1bSddID0gMHgwMDVFO1xuICAgICAgICAgICAgICAgICAgICB0Wydhc2NpaWNpcmN1bW1vbm9zcGFjZSddID0gMHhGRjNFO1xuICAgICAgICAgICAgICAgICAgICB0Wydhc2NpaXRpbGRlJ10gPSAweDAwN0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FzY2lpdGlsZGVtb25vc3BhY2UnXSA9IDB4RkY1RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXNjcmlwdCddID0gMHgwMjUxO1xuICAgICAgICAgICAgICAgICAgICB0Wydhc2NyaXB0dHVybmVkJ10gPSAweDAyNTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FzbWFsbGhpcmFnYW5hJ10gPSAweDMwNDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FzbWFsbGthdGFrYW5hJ10gPSAweDMwQTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FzbWFsbGthdGFrYW5haGFsZndpZHRoJ10gPSAweEZGNjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FzdGVyaXNrJ10gPSAweDAwMkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FzdGVyaXNrYWx0b25lYXJhYmljJ10gPSAweDA2NkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FzdGVyaXNrYXJhYmljJ10gPSAweDA2NkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FzdGVyaXNrbWF0aCddID0gMHgyMjE3O1xuICAgICAgICAgICAgICAgICAgICB0Wydhc3Rlcmlza21vbm9zcGFjZSddID0gMHhGRjBBO1xuICAgICAgICAgICAgICAgICAgICB0Wydhc3Rlcmlza3NtYWxsJ10gPSAweEZFNjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FzdGVyaXNtJ10gPSAweDIwNDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FzdXBlcmlvciddID0gMHhGNkU5O1xuICAgICAgICAgICAgICAgICAgICB0Wydhc3ltcHRvdGljYWxseWVxdWFsJ10gPSAweDIyNDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2F0J10gPSAweDAwNDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2F0aWxkZSddID0gMHgwMEUzO1xuICAgICAgICAgICAgICAgICAgICB0WydhdG1vbm9zcGFjZSddID0gMHhGRjIwO1xuICAgICAgICAgICAgICAgICAgICB0WydhdHNtYWxsJ10gPSAweEZFNkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2F0dXJuZWQnXSA9IDB4MDI1MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXViZW5nYWxpJ10gPSAweDA5OTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2F1Ym9wb21vZm8nXSA9IDB4MzEyMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXVkZXZhJ10gPSAweDA5MTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2F1Z3VqYXJhdGknXSA9IDB4MEE5NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXVndXJtdWtoaSddID0gMHgwQTE0O1xuICAgICAgICAgICAgICAgICAgICB0WydhdWxlbmd0aG1hcmtiZW5nYWxpJ10gPSAweDA5RDc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2F1bWF0cmFndXJtdWtoaSddID0gMHgwQTRDO1xuICAgICAgICAgICAgICAgICAgICB0WydhdXZvd2Vsc2lnbmJlbmdhbGknXSA9IDB4MDlDQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYXV2b3dlbHNpZ25kZXZhJ10gPSAweDA5NEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2F1dm93ZWxzaWduZ3VqYXJhdGknXSA9IDB4MEFDQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYXZhZ3JhaGFkZXZhJ10gPSAweDA5M0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2F5YmFybWVuaWFuJ10gPSAweDA1NjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2F5aW4nXSA9IDB4MDVFMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXlpbmFsdG9uZWhlYnJldyddID0gMHhGQjIwO1xuICAgICAgICAgICAgICAgICAgICB0WydheWluaGVicmV3J10gPSAweDA1RTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2InXSA9IDB4MDA2MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmFiZW5nYWxpJ10gPSAweDA5QUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JhY2tzbGFzaCddID0gMHgwMDVDO1xuICAgICAgICAgICAgICAgICAgICB0WydiYWNrc2xhc2htb25vc3BhY2UnXSA9IDB4RkYzQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYmFkZXZhJ10gPSAweDA5MkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JhZ3VqYXJhdGknXSA9IDB4MEFBQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYmFndXJtdWtoaSddID0gMHgwQTJDO1xuICAgICAgICAgICAgICAgICAgICB0WydiYWhpcmFnYW5hJ10gPSAweDMwNzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JhaHR0aGFpJ10gPSAweDBFM0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Jha2F0YWthbmEnXSA9IDB4MzBEMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmFyJ10gPSAweDAwN0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Jhcm1vbm9zcGFjZSddID0gMHhGRjVDO1xuICAgICAgICAgICAgICAgICAgICB0WydiYm9wb21vZm8nXSA9IDB4MzEwNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmNpcmNsZSddID0gMHgyNEQxO1xuICAgICAgICAgICAgICAgICAgICB0WydiZG90YWNjZW50J10gPSAweDFFMDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Jkb3RiZWxvdyddID0gMHgxRTA1O1xuICAgICAgICAgICAgICAgICAgICB0WydiZWFtZWRzaXh0ZWVudGhub3RlcyddID0gMHgyNjZDO1xuICAgICAgICAgICAgICAgICAgICB0WydiZWNhdXNlJ10gPSAweDIyMzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JlY3lyaWxsaWMnXSA9IDB4MDQzMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmVoYXJhYmljJ10gPSAweDA2Mjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JlaGZpbmFsYXJhYmljJ10gPSAweEZFOTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JlaGluaXRpYWxhcmFiaWMnXSA9IDB4RkU5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmVoaXJhZ2FuYSddID0gMHgzMDc5O1xuICAgICAgICAgICAgICAgICAgICB0WydiZWhtZWRpYWxhcmFiaWMnXSA9IDB4RkU5MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmVobWVlbWluaXRpYWxhcmFiaWMnXSA9IDB4RkM5RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmVobWVlbWlzb2xhdGVkYXJhYmljJ10gPSAweEZDMDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JlaG5vb25maW5hbGFyYWJpYyddID0gMHhGQzZEO1xuICAgICAgICAgICAgICAgICAgICB0WydiZWthdGFrYW5hJ10gPSAweDMwRDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JlbmFybWVuaWFuJ10gPSAweDA1NjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JldCddID0gMHgwNUQxO1xuICAgICAgICAgICAgICAgICAgICB0WydiZXRhJ10gPSAweDAzQjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JldGFzeW1ib2xncmVlayddID0gMHgwM0QwO1xuICAgICAgICAgICAgICAgICAgICB0WydiZXRkYWdlc2gnXSA9IDB4RkIzMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmV0ZGFnZXNoaGVicmV3J10gPSAweEZCMzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JldGhlYnJldyddID0gMHgwNUQxO1xuICAgICAgICAgICAgICAgICAgICB0WydiZXRyYWZlaGVicmV3J10gPSAweEZCNEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JoYWJlbmdhbGknXSA9IDB4MDlBRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmhhZGV2YSddID0gMHgwOTJEO1xuICAgICAgICAgICAgICAgICAgICB0WydiaGFndWphcmF0aSddID0gMHgwQUFEO1xuICAgICAgICAgICAgICAgICAgICB0WydiaGFndXJtdWtoaSddID0gMHgwQTJEO1xuICAgICAgICAgICAgICAgICAgICB0WydiaG9vayddID0gMHgwMjUzO1xuICAgICAgICAgICAgICAgICAgICB0WydiaWhpcmFnYW5hJ10gPSAweDMwNzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Jpa2F0YWthbmEnXSA9IDB4MzBEMztcbiAgICAgICAgICAgICAgICAgICAgdFsnYmlsYWJpYWxjbGljayddID0gMHgwMjk4O1xuICAgICAgICAgICAgICAgICAgICB0WydiaW5kaWd1cm11a2hpJ10gPSAweDBBMDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JpcnVzcXVhcmUnXSA9IDB4MzMzMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmxhY2tjaXJjbGUnXSA9IDB4MjVDRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmxhY2tkaWFtb25kJ10gPSAweDI1QzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JsYWNrZG93bnBvaW50aW5ndHJpYW5nbGUnXSA9IDB4MjVCQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYmxhY2tsZWZ0cG9pbnRpbmdwb2ludGVyJ10gPSAweDI1QzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JsYWNrbGVmdHBvaW50aW5ndHJpYW5nbGUnXSA9IDB4MjVDMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmxhY2tsZW50aWN1bGFyYnJhY2tldGxlZnQnXSA9IDB4MzAxMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmxhY2tsZW50aWN1bGFyYnJhY2tldGxlZnR2ZXJ0aWNhbCddID0gMHhGRTNCO1xuICAgICAgICAgICAgICAgICAgICB0WydibGFja2xlbnRpY3VsYXJicmFja2V0cmlnaHQnXSA9IDB4MzAxMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmxhY2tsZW50aWN1bGFyYnJhY2tldHJpZ2h0dmVydGljYWwnXSA9IDB4RkUzQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYmxhY2tsb3dlcmxlZnR0cmlhbmdsZSddID0gMHgyNUUzO1xuICAgICAgICAgICAgICAgICAgICB0WydibGFja2xvd2VycmlnaHR0cmlhbmdsZSddID0gMHgyNUUyO1xuICAgICAgICAgICAgICAgICAgICB0WydibGFja3JlY3RhbmdsZSddID0gMHgyNUFDO1xuICAgICAgICAgICAgICAgICAgICB0WydibGFja3JpZ2h0cG9pbnRpbmdwb2ludGVyJ10gPSAweDI1QkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JsYWNrcmlnaHRwb2ludGluZ3RyaWFuZ2xlJ10gPSAweDI1QjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JsYWNrc21hbGxzcXVhcmUnXSA9IDB4MjVBQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmxhY2tzbWlsaW5nZmFjZSddID0gMHgyNjNCO1xuICAgICAgICAgICAgICAgICAgICB0WydibGFja3NxdWFyZSddID0gMHgyNUEwO1xuICAgICAgICAgICAgICAgICAgICB0WydibGFja3N0YXInXSA9IDB4MjYwNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmxhY2t1cHBlcmxlZnR0cmlhbmdsZSddID0gMHgyNUU0O1xuICAgICAgICAgICAgICAgICAgICB0WydibGFja3VwcGVycmlnaHR0cmlhbmdsZSddID0gMHgyNUU1O1xuICAgICAgICAgICAgICAgICAgICB0WydibGFja3VwcG9pbnRpbmdzbWFsbHRyaWFuZ2xlJ10gPSAweDI1QjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JsYWNrdXBwb2ludGluZ3RyaWFuZ2xlJ10gPSAweDI1QjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JsYW5rJ10gPSAweDI0MjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JsaW5lYmVsb3cnXSA9IDB4MUUwNztcbiAgICAgICAgICAgICAgICAgICAgdFsnYmxvY2snXSA9IDB4MjU4ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYm1vbm9zcGFjZSddID0gMHhGRjQyO1xuICAgICAgICAgICAgICAgICAgICB0Wydib2JhaW1haXRoYWknXSA9IDB4MEUxQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYm9oaXJhZ2FuYSddID0gMHgzMDdDO1xuICAgICAgICAgICAgICAgICAgICB0Wydib2thdGFrYW5hJ10gPSAweDMwREM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JwYXJlbiddID0gMHgyNDlEO1xuICAgICAgICAgICAgICAgICAgICB0WydicXNxdWFyZSddID0gMHgzM0MzO1xuICAgICAgICAgICAgICAgICAgICB0WydicmFjZWV4J10gPSAweEY4RjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlbGVmdCddID0gMHgwMDdCO1xuICAgICAgICAgICAgICAgICAgICB0WydicmFjZWxlZnRidCddID0gMHhGOEYzO1xuICAgICAgICAgICAgICAgICAgICB0WydicmFjZWxlZnRtaWQnXSA9IDB4RjhGMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VsZWZ0bW9ub3NwYWNlJ10gPSAweEZGNUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlbGVmdHNtYWxsJ10gPSAweEZFNUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlbGVmdHRwJ10gPSAweEY4RjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlbGVmdHZlcnRpY2FsJ10gPSAweEZFMzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlcmlnaHQnXSA9IDB4MDA3RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VyaWdodGJ0J10gPSAweEY4RkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlcmlnaHRtaWQnXSA9IDB4RjhGRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VyaWdodG1vbm9zcGFjZSddID0gMHhGRjVEO1xuICAgICAgICAgICAgICAgICAgICB0WydicmFjZXJpZ2h0c21hbGwnXSA9IDB4RkU1QztcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VyaWdodHRwJ10gPSAweEY4RkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlcmlnaHR2ZXJ0aWNhbCddID0gMHhGRTM4O1xuICAgICAgICAgICAgICAgICAgICB0WydicmFja2V0bGVmdCddID0gMHgwMDVCO1xuICAgICAgICAgICAgICAgICAgICB0WydicmFja2V0bGVmdGJ0J10gPSAweEY4RjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRsZWZ0ZXgnXSA9IDB4RjhFRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldGxlZnRtb25vc3BhY2UnXSA9IDB4RkYzQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldGxlZnR0cCddID0gMHhGOEVFO1xuICAgICAgICAgICAgICAgICAgICB0WydicmFja2V0cmlnaHQnXSA9IDB4MDA1RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldHJpZ2h0YnQnXSA9IDB4RjhGQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldHJpZ2h0ZXgnXSA9IDB4RjhGQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldHJpZ2h0bW9ub3NwYWNlJ10gPSAweEZGM0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRyaWdodHRwJ10gPSAweEY4Rjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyZXZlJ10gPSAweDAyRDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyZXZlYmVsb3djbWInXSA9IDB4MDMyRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJldmVjbWInXSA9IDB4MDMwNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJldmVpbnZlcnRlZGJlbG93Y21iJ10gPSAweDAzMkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyZXZlaW52ZXJ0ZWRjbWInXSA9IDB4MDMxMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJldmVpbnZlcnRlZGRvdWJsZWNtYiddID0gMHgwMzYxO1xuICAgICAgICAgICAgICAgICAgICB0WydicmlkZ2ViZWxvd2NtYiddID0gMHgwMzJBO1xuICAgICAgICAgICAgICAgICAgICB0WydicmlkZ2VpbnZlcnRlZGJlbG93Y21iJ10gPSAweDAzM0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Jyb2tlbmJhciddID0gMHgwMEE2O1xuICAgICAgICAgICAgICAgICAgICB0Wydic3Ryb2tlJ10gPSAweDAxODA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JzdXBlcmlvciddID0gMHhGNkVBO1xuICAgICAgICAgICAgICAgICAgICB0WydidG9wYmFyJ10gPSAweDAxODM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2J1aGlyYWdhbmEnXSA9IDB4MzA3NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnVrYXRha2FuYSddID0gMHgzMEQ2O1xuICAgICAgICAgICAgICAgICAgICB0WydidWxsZXQnXSA9IDB4MjAyMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnVsbGV0aW52ZXJzZSddID0gMHgyNUQ4O1xuICAgICAgICAgICAgICAgICAgICB0WydidWxsZXRvcGVyYXRvciddID0gMHgyMjE5O1xuICAgICAgICAgICAgICAgICAgICB0WydidWxsc2V5ZSddID0gMHgyNUNFO1xuICAgICAgICAgICAgICAgICAgICB0WydjJ10gPSAweDAwNjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NhYXJtZW5pYW4nXSA9IDB4MDU2RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2FiZW5nYWxpJ10gPSAweDA5OUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NhY3V0ZSddID0gMHgwMTA3O1xuICAgICAgICAgICAgICAgICAgICB0WydjYWRldmEnXSA9IDB4MDkxQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2FndWphcmF0aSddID0gMHgwQTlBO1xuICAgICAgICAgICAgICAgICAgICB0WydjYWd1cm11a2hpJ10gPSAweDBBMUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NhbHNxdWFyZSddID0gMHgzMzg4O1xuICAgICAgICAgICAgICAgICAgICB0WydjYW5kcmFiaW5kdWJlbmdhbGknXSA9IDB4MDk4MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2FuZHJhYmluZHVjbWInXSA9IDB4MDMxMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2FuZHJhYmluZHVkZXZhJ10gPSAweDA5MDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NhbmRyYWJpbmR1Z3VqYXJhdGknXSA9IDB4MEE4MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2Fwc2xvY2snXSA9IDB4MjFFQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2FyZW9mJ10gPSAweDIxMDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Nhcm9uJ10gPSAweDAyQzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Nhcm9uYmVsb3djbWInXSA9IDB4MDMyQztcbiAgICAgICAgICAgICAgICAgICAgdFsnY2Fyb25jbWInXSA9IDB4MDMwQztcbiAgICAgICAgICAgICAgICAgICAgdFsnY2FycmlhZ2VyZXR1cm4nXSA9IDB4MjFCNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2JvcG9tb2ZvJ10gPSAweDMxMTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NjYXJvbiddID0gMHgwMTBEO1xuICAgICAgICAgICAgICAgICAgICB0WydjY2VkaWxsYSddID0gMHgwMEU3O1xuICAgICAgICAgICAgICAgICAgICB0WydjY2VkaWxsYWFjdXRlJ10gPSAweDFFMDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NjaXJjbGUnXSA9IDB4MjREMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2NpcmN1bWZsZXgnXSA9IDB4MDEwOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2N1cmwnXSA9IDB4MDI1NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2RvdCddID0gMHgwMTBCO1xuICAgICAgICAgICAgICAgICAgICB0WydjZG90YWNjZW50J10gPSAweDAxMEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Nkc3F1YXJlJ10gPSAweDMzQzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NlZGlsbGEnXSA9IDB4MDBCODtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2VkaWxsYWNtYiddID0gMHgwMzI3O1xuICAgICAgICAgICAgICAgICAgICB0WydjZW50J10gPSAweDAwQTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NlbnRpZ3JhZGUnXSA9IDB4MjEwMztcbiAgICAgICAgICAgICAgICAgICAgdFsnY2VudGluZmVyaW9yJ10gPSAweEY2REY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NlbnRtb25vc3BhY2UnXSA9IDB4RkZFMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2VudG9sZHN0eWxlJ10gPSAweEY3QTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NlbnRzdXBlcmlvciddID0gMHhGNkUwO1xuICAgICAgICAgICAgICAgICAgICB0WydjaGFhcm1lbmlhbiddID0gMHgwNTc5O1xuICAgICAgICAgICAgICAgICAgICB0WydjaGFiZW5nYWxpJ10gPSAweDA5OUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NoYWRldmEnXSA9IDB4MDkxQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2hhZ3VqYXJhdGknXSA9IDB4MEE5QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2hhZ3VybXVraGknXSA9IDB4MEExQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2hib3BvbW9mbyddID0gMHgzMTE0O1xuICAgICAgICAgICAgICAgICAgICB0WydjaGVhYmtoYXNpYW5jeXJpbGxpYyddID0gMHgwNEJEO1xuICAgICAgICAgICAgICAgICAgICB0WydjaGVja21hcmsnXSA9IDB4MjcxMztcbiAgICAgICAgICAgICAgICAgICAgdFsnY2hlY3lyaWxsaWMnXSA9IDB4MDQ0NztcbiAgICAgICAgICAgICAgICAgICAgdFsnY2hlZGVzY2VuZGVyYWJraGFzaWFuY3lyaWxsaWMnXSA9IDB4MDRCRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2hlZGVzY2VuZGVyY3lyaWxsaWMnXSA9IDB4MDRCNztcbiAgICAgICAgICAgICAgICAgICAgdFsnY2hlZGllcmVzaXNjeXJpbGxpYyddID0gMHgwNEY1O1xuICAgICAgICAgICAgICAgICAgICB0WydjaGVoYXJtZW5pYW4nXSA9IDB4MDU3MztcbiAgICAgICAgICAgICAgICAgICAgdFsnY2hla2hha2Fzc2lhbmN5cmlsbGljJ10gPSAweDA0Q0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NoZXZlcnRpY2Fsc3Ryb2tlY3lyaWxsaWMnXSA9IDB4MDRCOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2hpJ10gPSAweDAzQzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NoaWV1Y2hhY2lyY2xla29yZWFuJ10gPSAweDMyNzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NoaWV1Y2hhcGFyZW5rb3JlYW4nXSA9IDB4MzIxNztcbiAgICAgICAgICAgICAgICAgICAgdFsnY2hpZXVjaGNpcmNsZWtvcmVhbiddID0gMHgzMjY5O1xuICAgICAgICAgICAgICAgICAgICB0WydjaGlldWNoa29yZWFuJ10gPSAweDMxNEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NoaWV1Y2hwYXJlbmtvcmVhbiddID0gMHgzMjA5O1xuICAgICAgICAgICAgICAgICAgICB0WydjaG9jaGFuZ3RoYWknXSA9IDB4MEUwQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2hvY2hhbnRoYWknXSA9IDB4MEUwODtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2hvY2hpbmd0aGFpJ10gPSAweDBFMDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Nob2Nob2V0aGFpJ10gPSAweDBFMEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Nob29rJ10gPSAweDAxODg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NpZXVjYWNpcmNsZWtvcmVhbiddID0gMHgzMjc2O1xuICAgICAgICAgICAgICAgICAgICB0WydjaWV1Y2FwYXJlbmtvcmVhbiddID0gMHgzMjE2O1xuICAgICAgICAgICAgICAgICAgICB0WydjaWV1Y2NpcmNsZWtvcmVhbiddID0gMHgzMjY4O1xuICAgICAgICAgICAgICAgICAgICB0WydjaWV1Y2tvcmVhbiddID0gMHgzMTQ4O1xuICAgICAgICAgICAgICAgICAgICB0WydjaWV1Y3BhcmVua29yZWFuJ10gPSAweDMyMDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NpZXVjdXBhcmVua29yZWFuJ10gPSAweDMyMUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NpcmNsZSddID0gMHgyNUNCO1xuICAgICAgICAgICAgICAgICAgICB0WydjaXJjbGVjb3B5cnQnXSA9IDB4MDBBOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2lyY2xlbXVsdGlwbHknXSA9IDB4MjI5NztcbiAgICAgICAgICAgICAgICAgICAgdFsnY2lyY2xlb3QnXSA9IDB4MjI5OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2lyY2xlcGx1cyddID0gMHgyMjk1O1xuICAgICAgICAgICAgICAgICAgICB0WydjaXJjbGVwb3N0YWxtYXJrJ10gPSAweDMwMzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NpcmNsZXdpdGhsZWZ0aGFsZmJsYWNrJ10gPSAweDI1RDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NpcmNsZXdpdGhyaWdodGhhbGZibGFjayddID0gMHgyNUQxO1xuICAgICAgICAgICAgICAgICAgICB0WydjaXJjdW1mbGV4J10gPSAweDAyQzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NpcmN1bWZsZXhiZWxvd2NtYiddID0gMHgwMzJEO1xuICAgICAgICAgICAgICAgICAgICB0WydjaXJjdW1mbGV4Y21iJ10gPSAweDAzMDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NsZWFyJ10gPSAweDIzMjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NsaWNrYWx2ZW9sYXInXSA9IDB4MDFDMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2xpY2tkZW50YWwnXSA9IDB4MDFDMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2xpY2tsYXRlcmFsJ10gPSAweDAxQzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NsaWNrcmV0cm9mbGV4J10gPSAweDAxQzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NsdWInXSA9IDB4MjY2MztcbiAgICAgICAgICAgICAgICAgICAgdFsnY2x1YnN1aXRibGFjayddID0gMHgyNjYzO1xuICAgICAgICAgICAgICAgICAgICB0WydjbHVic3VpdHdoaXRlJ10gPSAweDI2Njc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NtY3ViZWRzcXVhcmUnXSA9IDB4MzNBNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnY21vbm9zcGFjZSddID0gMHhGRjQzO1xuICAgICAgICAgICAgICAgICAgICB0WydjbXNxdWFyZWRzcXVhcmUnXSA9IDB4MzNBMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29hcm1lbmlhbiddID0gMHgwNTgxO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb2xvbiddID0gMHgwMDNBO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb2xvbm1vbmV0YXJ5J10gPSAweDIwQTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbG9ubW9ub3NwYWNlJ10gPSAweEZGMUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbG9uc2lnbiddID0gMHgyMEExO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb2xvbnNtYWxsJ10gPSAweEZFNTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbG9udHJpYW5ndWxhcmhhbGZtb2QnXSA9IDB4MDJEMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29sb250cmlhbmd1bGFybW9kJ10gPSAweDAyRDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbW1hJ10gPSAweDAwMkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbW1hYWJvdmVjbWInXSA9IDB4MDMxMztcbiAgICAgICAgICAgICAgICAgICAgdFsnY29tbWFhYm92ZXJpZ2h0Y21iJ10gPSAweDAzMTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbW1hYWNjZW50J10gPSAweEY2QzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbW1hYXJhYmljJ10gPSAweDA2MEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbW1hYXJtZW5pYW4nXSA9IDB4MDU1RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29tbWFpbmZlcmlvciddID0gMHhGNkUxO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb21tYW1vbm9zcGFjZSddID0gMHhGRjBDO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb21tYXJldmVyc2VkYWJvdmVjbWInXSA9IDB4MDMxNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29tbWFyZXZlcnNlZG1vZCddID0gMHgwMkJEO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb21tYXNtYWxsJ10gPSAweEZFNTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbW1hc3VwZXJpb3InXSA9IDB4RjZFMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29tbWF0dXJuZWRhYm92ZWNtYiddID0gMHgwMzEyO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb21tYXR1cm5lZG1vZCddID0gMHgwMkJCO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb21wYXNzJ10gPSAweDI2M0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbmdydWVudCddID0gMHgyMjQ1O1xuICAgICAgICAgICAgICAgICAgICB0Wydjb250b3VyaW50ZWdyYWwnXSA9IDB4MjIyRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29udHJvbCddID0gMHgyMzAzO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb250cm9sQUNLJ10gPSAweDAwMDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xCRUwnXSA9IDB4MDAwNztcbiAgICAgICAgICAgICAgICAgICAgdFsnY29udHJvbEJTJ10gPSAweDAwMDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xDQU4nXSA9IDB4MDAxODtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29udHJvbENSJ10gPSAweDAwMEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xEQzEnXSA9IDB4MDAxMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29udHJvbERDMiddID0gMHgwMDEyO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb250cm9sREMzJ10gPSAweDAwMTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xEQzQnXSA9IDB4MDAxNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29udHJvbERFTCddID0gMHgwMDdGO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb250cm9sRExFJ10gPSAweDAwMTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xFTSddID0gMHgwMDE5O1xuICAgICAgICAgICAgICAgICAgICB0Wydjb250cm9sRU5RJ10gPSAweDAwMDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xFT1QnXSA9IDB4MDAwNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29udHJvbEVTQyddID0gMHgwMDFCO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb250cm9sRVRCJ10gPSAweDAwMTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xFVFgnXSA9IDB4MDAwMztcbiAgICAgICAgICAgICAgICAgICAgdFsnY29udHJvbEZGJ10gPSAweDAwMEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xGUyddID0gMHgwMDFDO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb250cm9sR1MnXSA9IDB4MDAxRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29udHJvbEhUJ10gPSAweDAwMDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xMRiddID0gMHgwMDBBO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb250cm9sTkFLJ10gPSAweDAwMTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xOVUxMJ10gPSAweDAwMDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xSUyddID0gMHgwMDFFO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb250cm9sU0knXSA9IDB4MDAwRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29udHJvbFNPJ10gPSAweDAwMEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xTT1QnXSA9IDB4MDAwMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29udHJvbFNUWCddID0gMHgwMDAxO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb250cm9sU1VCJ10gPSAweDAwMUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xTWU4nXSA9IDB4MDAxNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29udHJvbFVTJ10gPSAweDAwMUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xWVCddID0gMHgwMDBCO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb3B5cmlnaHQnXSA9IDB4MDBBOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29weXJpZ2h0c2FucyddID0gMHhGOEU5O1xuICAgICAgICAgICAgICAgICAgICB0Wydjb3B5cmlnaHRzZXJpZiddID0gMHhGNkQ5O1xuICAgICAgICAgICAgICAgICAgICB0Wydjb3JuZXJicmFja2V0bGVmdCddID0gMHgzMDBDO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb3JuZXJicmFja2V0bGVmdGhhbGZ3aWR0aCddID0gMHhGRjYyO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb3JuZXJicmFja2V0bGVmdHZlcnRpY2FsJ10gPSAweEZFNDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Nvcm5lcmJyYWNrZXRyaWdodCddID0gMHgzMDBEO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb3JuZXJicmFja2V0cmlnaHRoYWxmd2lkdGgnXSA9IDB4RkY2MztcbiAgICAgICAgICAgICAgICAgICAgdFsnY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWwnXSA9IDB4RkU0MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29ycG9yYXRpb25zcXVhcmUnXSA9IDB4MzM3RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29zcXVhcmUnXSA9IDB4MzNDNztcbiAgICAgICAgICAgICAgICAgICAgdFsnY292ZXJrZ3NxdWFyZSddID0gMHgzM0M2O1xuICAgICAgICAgICAgICAgICAgICB0WydjcGFyZW4nXSA9IDB4MjQ5RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY3J1emVpcm8nXSA9IDB4MjBBMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY3N0cmV0Y2hlZCddID0gMHgwMjk3O1xuICAgICAgICAgICAgICAgICAgICB0WydjdXJseWFuZCddID0gMHgyMkNGO1xuICAgICAgICAgICAgICAgICAgICB0WydjdXJseW9yJ10gPSAweDIyQ0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2N1cnJlbmN5J10gPSAweDAwQTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2N5ckJyZXZlJ10gPSAweEY2RDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2N5ckZsZXgnXSA9IDB4RjZEMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY3lyYnJldmUnXSA9IDB4RjZENDtcbiAgICAgICAgICAgICAgICAgICAgdFsnY3lyZmxleCddID0gMHhGNkQ1O1xuICAgICAgICAgICAgICAgICAgICB0WydkJ10gPSAweDAwNjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhYXJtZW5pYW4nXSA9IDB4MDU2NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGFiZW5nYWxpJ10gPSAweDA5QTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhZGFyYWJpYyddID0gMHgwNjM2O1xuICAgICAgICAgICAgICAgICAgICB0WydkYWRldmEnXSA9IDB4MDkyNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGFkZmluYWxhcmFiaWMnXSA9IDB4RkVCRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGFkaW5pdGlhbGFyYWJpYyddID0gMHhGRUJGO1xuICAgICAgICAgICAgICAgICAgICB0WydkYWRtZWRpYWxhcmFiaWMnXSA9IDB4RkVDMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGFnZXNoJ10gPSAweDA1QkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhZ2VzaGhlYnJldyddID0gMHgwNUJDO1xuICAgICAgICAgICAgICAgICAgICB0WydkYWdnZXInXSA9IDB4MjAyMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGFnZ2VyZGJsJ10gPSAweDIwMjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhZ3VqYXJhdGknXSA9IDB4MEFBNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGFndXJtdWtoaSddID0gMHgwQTI2O1xuICAgICAgICAgICAgICAgICAgICB0WydkYWhpcmFnYW5hJ10gPSAweDMwNjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Rha2F0YWthbmEnXSA9IDB4MzBDMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGFsYXJhYmljJ10gPSAweDA2MkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhbGV0J10gPSAweDA1RDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhbGV0ZGFnZXNoJ10gPSAweEZCMzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhbGV0ZGFnZXNoaGVicmV3J10gPSAweEZCMzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhbGV0aGVicmV3J10gPSAweDA1RDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhbGZpbmFsYXJhYmljJ10gPSAweEZFQUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhbW1hYXJhYmljJ10gPSAweDA2NEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhbW1hbG93YXJhYmljJ10gPSAweDA2NEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhbW1hdGFuYWx0b25lYXJhYmljJ10gPSAweDA2NEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhbW1hdGFuYXJhYmljJ10gPSAweDA2NEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhbmRhJ10gPSAweDA5NjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhcmdhaGVicmV3J10gPSAweDA1QTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhcmdhbGVmdGhlYnJldyddID0gMHgwNUE3O1xuICAgICAgICAgICAgICAgICAgICB0WydkYXNpYXBuZXVtYXRhY3lyaWxsaWNjbWInXSA9IDB4MDQ4NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGJsR3JhdmUnXSA9IDB4RjZEMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZGJsYW5nbGVicmFja2V0bGVmdCddID0gMHgzMDBBO1xuICAgICAgICAgICAgICAgICAgICB0WydkYmxhbmdsZWJyYWNrZXRsZWZ0dmVydGljYWwnXSA9IDB4RkUzRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGJsYW5nbGVicmFja2V0cmlnaHQnXSA9IDB4MzAwQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGJsYW5nbGVicmFja2V0cmlnaHR2ZXJ0aWNhbCddID0gMHhGRTNFO1xuICAgICAgICAgICAgICAgICAgICB0WydkYmxhcmNoaW52ZXJ0ZWRiZWxvd2NtYiddID0gMHgwMzJCO1xuICAgICAgICAgICAgICAgICAgICB0WydkYmxhcnJvd2xlZnQnXSA9IDB4MjFENDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGJsYXJyb3dyaWdodCddID0gMHgyMUQyO1xuICAgICAgICAgICAgICAgICAgICB0WydkYmxkYW5kYSddID0gMHgwOTY1O1xuICAgICAgICAgICAgICAgICAgICB0WydkYmxncmF2ZSddID0gMHhGNkQ2O1xuICAgICAgICAgICAgICAgICAgICB0WydkYmxncmF2ZWNtYiddID0gMHgwMzBGO1xuICAgICAgICAgICAgICAgICAgICB0WydkYmxpbnRlZ3JhbCddID0gMHgyMjJDO1xuICAgICAgICAgICAgICAgICAgICB0WydkYmxsb3dsaW5lJ10gPSAweDIwMTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RibGxvd2xpbmVjbWInXSA9IDB4MDMzMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZGJsb3ZlcmxpbmVjbWInXSA9IDB4MDMzRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGJscHJpbWVtb2QnXSA9IDB4MDJCQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGJsdmVydGljYWxiYXInXSA9IDB4MjAxNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGJsdmVydGljYWxsaW5lYWJvdmVjbWInXSA9IDB4MDMwRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGJvcG9tb2ZvJ10gPSAweDMxMDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Ric3F1YXJlJ10gPSAweDMzQzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RjYXJvbiddID0gMHgwMTBGO1xuICAgICAgICAgICAgICAgICAgICB0WydkY2VkaWxsYSddID0gMHgxRTExO1xuICAgICAgICAgICAgICAgICAgICB0WydkY2lyY2xlJ10gPSAweDI0RDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RjaXJjdW1mbGV4YmVsb3cnXSA9IDB4MUUxMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZGNyb2F0J10gPSAweDAxMTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RkYWJlbmdhbGknXSA9IDB4MDlBMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGRhZGV2YSddID0gMHgwOTIxO1xuICAgICAgICAgICAgICAgICAgICB0WydkZGFndWphcmF0aSddID0gMHgwQUExO1xuICAgICAgICAgICAgICAgICAgICB0WydkZGFndXJtdWtoaSddID0gMHgwQTIxO1xuICAgICAgICAgICAgICAgICAgICB0WydkZGFsYXJhYmljJ10gPSAweDA2ODg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RkYWxmaW5hbGFyYWJpYyddID0gMHhGQjg5O1xuICAgICAgICAgICAgICAgICAgICB0WydkZGRoYWRldmEnXSA9IDB4MDk1QztcbiAgICAgICAgICAgICAgICAgICAgdFsnZGRoYWJlbmdhbGknXSA9IDB4MDlBMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGRoYWRldmEnXSA9IDB4MDkyMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGRoYWd1amFyYXRpJ10gPSAweDBBQTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RkaGFndXJtdWtoaSddID0gMHgwQTIyO1xuICAgICAgICAgICAgICAgICAgICB0WydkZG90YWNjZW50J10gPSAweDFFMEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Rkb3RiZWxvdyddID0gMHgxRTBEO1xuICAgICAgICAgICAgICAgICAgICB0WydkZWNpbWFsc2VwYXJhdG9yYXJhYmljJ10gPSAweDA2NkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RlY2ltYWxzZXBhcmF0b3JwZXJzaWFuJ10gPSAweDA2NkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RlY3lyaWxsaWMnXSA9IDB4MDQzNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGVncmVlJ10gPSAweDAwQjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RlaGloZWJyZXcnXSA9IDB4MDVBRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGVoaXJhZ2FuYSddID0gMHgzMDY3O1xuICAgICAgICAgICAgICAgICAgICB0WydkZWljb3B0aWMnXSA9IDB4MDNFRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGVrYXRha2FuYSddID0gMHgzMEM3O1xuICAgICAgICAgICAgICAgICAgICB0WydkZWxldGVsZWZ0J10gPSAweDIzMkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RlbGV0ZXJpZ2h0J10gPSAweDIzMjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RlbHRhJ10gPSAweDAzQjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RlbHRhdHVybmVkJ10gPSAweDAxOEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Rlbm9taW5hdG9ybWludXNvbmVudW1lcmF0b3JiZW5nYWxpJ10gPSAweDA5Rjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RlemgnXSA9IDB4MDJBNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGhhYmVuZ2FsaSddID0gMHgwOUE3O1xuICAgICAgICAgICAgICAgICAgICB0WydkaGFkZXZhJ10gPSAweDA5Mjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RoYWd1amFyYXRpJ10gPSAweDBBQTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RoYWd1cm11a2hpJ10gPSAweDBBMjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Rob29rJ10gPSAweDAyNTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RpYWx5dGlrYXRvbm9zJ10gPSAweDAzODU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RpYWx5dGlrYXRvbm9zY21iJ10gPSAweDAzNDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RpYW1vbmQnXSA9IDB4MjY2NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGlhbW9uZHN1aXR3aGl0ZSddID0gMHgyNjYyO1xuICAgICAgICAgICAgICAgICAgICB0WydkaWVyZXNpcyddID0gMHgwMEE4O1xuICAgICAgICAgICAgICAgICAgICB0WydkaWVyZXNpc2FjdXRlJ10gPSAweEY2RDc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RpZXJlc2lzYmVsb3djbWInXSA9IDB4MDMyNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGllcmVzaXNjbWInXSA9IDB4MDMwODtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGllcmVzaXNncmF2ZSddID0gMHhGNkQ4O1xuICAgICAgICAgICAgICAgICAgICB0WydkaWVyZXNpc3Rvbm9zJ10gPSAweDAzODU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RpaGlyYWdhbmEnXSA9IDB4MzA2MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGlrYXRha2FuYSddID0gMHgzMEMyO1xuICAgICAgICAgICAgICAgICAgICB0WydkaXR0b21hcmsnXSA9IDB4MzAwMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZGl2aWRlJ10gPSAweDAwRjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RpdmlkZXMnXSA9IDB4MjIyMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZGl2aXNpb25zbGFzaCddID0gMHgyMjE1O1xuICAgICAgICAgICAgICAgICAgICB0WydkamVjeXJpbGxpYyddID0gMHgwNDUyO1xuICAgICAgICAgICAgICAgICAgICB0Wydka3NoYWRlJ10gPSAweDI1OTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RsaW5lYmVsb3cnXSA9IDB4MUUwRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGxzcXVhcmUnXSA9IDB4MzM5NztcbiAgICAgICAgICAgICAgICAgICAgdFsnZG1hY3JvbiddID0gMHgwMTExO1xuICAgICAgICAgICAgICAgICAgICB0WydkbW9ub3NwYWNlJ10gPSAweEZGNDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RuYmxvY2snXSA9IDB4MjU4NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZG9jaGFkYXRoYWknXSA9IDB4MEUwRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZG9kZWt0aGFpJ10gPSAweDBFMTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RvaGlyYWdhbmEnXSA9IDB4MzA2OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZG9rYXRha2FuYSddID0gMHgzMEM5O1xuICAgICAgICAgICAgICAgICAgICB0Wydkb2xsYXInXSA9IDB4MDAyNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZG9sbGFyaW5mZXJpb3InXSA9IDB4RjZFMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZG9sbGFybW9ub3NwYWNlJ10gPSAweEZGMDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RvbGxhcm9sZHN0eWxlJ10gPSAweEY3MjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RvbGxhcnNtYWxsJ10gPSAweEZFNjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RvbGxhcnN1cGVyaW9yJ10gPSAweEY2RTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RvbmcnXSA9IDB4MjBBQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZG9ydXNxdWFyZSddID0gMHgzMzI2O1xuICAgICAgICAgICAgICAgICAgICB0Wydkb3RhY2NlbnQnXSA9IDB4MDJEOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZG90YWNjZW50Y21iJ10gPSAweDAzMDc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RvdGJlbG93Y21iJ10gPSAweDAzMjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RvdGJlbG93Y29tYiddID0gMHgwMzIzO1xuICAgICAgICAgICAgICAgICAgICB0Wydkb3RrYXRha2FuYSddID0gMHgzMEZCO1xuICAgICAgICAgICAgICAgICAgICB0Wydkb3RsZXNzaSddID0gMHgwMTMxO1xuICAgICAgICAgICAgICAgICAgICB0Wydkb3RsZXNzaiddID0gMHhGNkJFO1xuICAgICAgICAgICAgICAgICAgICB0Wydkb3RsZXNzanN0cm9rZWhvb2snXSA9IDB4MDI4NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZG90bWF0aCddID0gMHgyMkM1O1xuICAgICAgICAgICAgICAgICAgICB0Wydkb3R0ZWRjaXJjbGUnXSA9IDB4MjVDQztcbiAgICAgICAgICAgICAgICAgICAgdFsnZG91YmxleW9kcGF0YWgnXSA9IDB4RkIxRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZG91YmxleW9kcGF0YWhoZWJyZXcnXSA9IDB4RkIxRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZG93bnRhY2tiZWxvd2NtYiddID0gMHgwMzFFO1xuICAgICAgICAgICAgICAgICAgICB0Wydkb3dudGFja21vZCddID0gMHgwMkQ1O1xuICAgICAgICAgICAgICAgICAgICB0WydkcGFyZW4nXSA9IDB4MjQ5RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZHN1cGVyaW9yJ10gPSAweEY2RUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2R0YWlsJ10gPSAweDAyNTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2R0b3BiYXInXSA9IDB4MDE4QztcbiAgICAgICAgICAgICAgICAgICAgdFsnZHVoaXJhZ2FuYSddID0gMHgzMDY1O1xuICAgICAgICAgICAgICAgICAgICB0WydkdWthdGFrYW5hJ10gPSAweDMwQzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2R6J10gPSAweDAxRjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2R6YWx0b25lJ10gPSAweDAyQTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2R6Y2Fyb24nXSA9IDB4MDFDNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZHpjdXJsJ10gPSAweDAyQTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2R6ZWFia2hhc2lhbmN5cmlsbGljJ10gPSAweDA0RTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2R6ZWN5cmlsbGljJ10gPSAweDA0NTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2R6aGVjeXJpbGxpYyddID0gMHgwNDVGO1xuICAgICAgICAgICAgICAgICAgICB0WydlJ10gPSAweDAwNjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VhY3V0ZSddID0gMHgwMEU5O1xuICAgICAgICAgICAgICAgICAgICB0WydlYXJ0aCddID0gMHgyNjQxO1xuICAgICAgICAgICAgICAgICAgICB0WydlYmVuZ2FsaSddID0gMHgwOThGO1xuICAgICAgICAgICAgICAgICAgICB0WydlYm9wb21vZm8nXSA9IDB4MzExQztcbiAgICAgICAgICAgICAgICAgICAgdFsnZWJyZXZlJ10gPSAweDAxMTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VjYW5kcmFkZXZhJ10gPSAweDA5MEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VjYW5kcmFndWphcmF0aSddID0gMHgwQThEO1xuICAgICAgICAgICAgICAgICAgICB0WydlY2FuZHJhdm93ZWxzaWduZGV2YSddID0gMHgwOTQ1O1xuICAgICAgICAgICAgICAgICAgICB0WydlY2FuZHJhdm93ZWxzaWduZ3VqYXJhdGknXSA9IDB4MEFDNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWNhcm9uJ10gPSAweDAxMUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VjZWRpbGxhYnJldmUnXSA9IDB4MUUxRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWNoYXJtZW5pYW4nXSA9IDB4MDU2NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWNoeWl3bmFybWVuaWFuJ10gPSAweDA1ODc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VjaXJjbGUnXSA9IDB4MjRENDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWNpcmN1bWZsZXgnXSA9IDB4MDBFQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWNpcmN1bWZsZXhhY3V0ZSddID0gMHgxRUJGO1xuICAgICAgICAgICAgICAgICAgICB0WydlY2lyY3VtZmxleGJlbG93J10gPSAweDFFMTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VjaXJjdW1mbGV4ZG90YmVsb3cnXSA9IDB4MUVDNztcbiAgICAgICAgICAgICAgICAgICAgdFsnZWNpcmN1bWZsZXhncmF2ZSddID0gMHgxRUMxO1xuICAgICAgICAgICAgICAgICAgICB0WydlY2lyY3VtZmxleGhvb2thYm92ZSddID0gMHgxRUMzO1xuICAgICAgICAgICAgICAgICAgICB0WydlY2lyY3VtZmxleHRpbGRlJ10gPSAweDFFQzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VjeXJpbGxpYyddID0gMHgwNDU0O1xuICAgICAgICAgICAgICAgICAgICB0WydlZGJsZ3JhdmUnXSA9IDB4MDIwNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWRldmEnXSA9IDB4MDkwRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWRpZXJlc2lzJ10gPSAweDAwRUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Vkb3QnXSA9IDB4MDExNztcbiAgICAgICAgICAgICAgICAgICAgdFsnZWRvdGFjY2VudCddID0gMHgwMTE3O1xuICAgICAgICAgICAgICAgICAgICB0WydlZG90YmVsb3cnXSA9IDB4MUVCOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWVndXJtdWtoaSddID0gMHgwQTBGO1xuICAgICAgICAgICAgICAgICAgICB0WydlZW1hdHJhZ3VybXVraGknXSA9IDB4MEE0NztcbiAgICAgICAgICAgICAgICAgICAgdFsnZWZjeXJpbGxpYyddID0gMHgwNDQ0O1xuICAgICAgICAgICAgICAgICAgICB0WydlZ3JhdmUnXSA9IDB4MDBFODtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWd1amFyYXRpJ10gPSAweDBBOEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VoYXJtZW5pYW4nXSA9IDB4MDU2NztcbiAgICAgICAgICAgICAgICAgICAgdFsnZWhib3BvbW9mbyddID0gMHgzMTFEO1xuICAgICAgICAgICAgICAgICAgICB0WydlaGlyYWdhbmEnXSA9IDB4MzA0ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWhvb2thYm92ZSddID0gMHgxRUJCO1xuICAgICAgICAgICAgICAgICAgICB0WydlaWJvcG9tb2ZvJ10gPSAweDMxMUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0J10gPSAweDAwMzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0YXJhYmljJ10gPSAweDA2Njg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0YmVuZ2FsaSddID0gMHgwOUVFO1xuICAgICAgICAgICAgICAgICAgICB0WydlaWdodGNpcmNsZSddID0gMHgyNDY3O1xuICAgICAgICAgICAgICAgICAgICB0WydlaWdodGNpcmNsZWludmVyc2VzYW5zc2VyaWYnXSA9IDB4Mjc5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWlnaHRkZXZhJ10gPSAweDA5NkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0ZWVuY2lyY2xlJ10gPSAweDI0NzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0ZWVucGFyZW4nXSA9IDB4MjQ4NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWlnaHRlZW5wZXJpb2QnXSA9IDB4MjQ5OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWlnaHRndWphcmF0aSddID0gMHgwQUVFO1xuICAgICAgICAgICAgICAgICAgICB0WydlaWdodGd1cm11a2hpJ10gPSAweDBBNkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0aGFja2FyYWJpYyddID0gMHgwNjY4O1xuICAgICAgICAgICAgICAgICAgICB0WydlaWdodGhhbmd6aG91J10gPSAweDMwMjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0aG5vdGViZWFtZWQnXSA9IDB4MjY2QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWlnaHRpZGVvZ3JhcGhpY3BhcmVuJ10gPSAweDMyMjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0aW5mZXJpb3InXSA9IDB4MjA4ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWlnaHRtb25vc3BhY2UnXSA9IDB4RkYxODtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWlnaHRvbGRzdHlsZSddID0gMHhGNzM4O1xuICAgICAgICAgICAgICAgICAgICB0WydlaWdodHBhcmVuJ10gPSAweDI0N0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0cGVyaW9kJ10gPSAweDI0OEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0cGVyc2lhbiddID0gMHgwNkY4O1xuICAgICAgICAgICAgICAgICAgICB0WydlaWdodHJvbWFuJ10gPSAweDIxNzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0c3VwZXJpb3InXSA9IDB4MjA3ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWlnaHR0aGFpJ10gPSAweDBFNTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VpbnZlcnRlZGJyZXZlJ10gPSAweDAyMDc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Vpb3RpZmllZGN5cmlsbGljJ10gPSAweDA0NjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VrYXRha2FuYSddID0gMHgzMEE4O1xuICAgICAgICAgICAgICAgICAgICB0Wydla2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY3NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWtvbmthcmd1cm11a2hpJ10gPSAweDBBNzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Vrb3JlYW4nXSA9IDB4MzE1NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWxjeXJpbGxpYyddID0gMHgwNDNCO1xuICAgICAgICAgICAgICAgICAgICB0WydlbGVtZW50J10gPSAweDIyMDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VsZXZlbmNpcmNsZSddID0gMHgyNDZBO1xuICAgICAgICAgICAgICAgICAgICB0WydlbGV2ZW5wYXJlbiddID0gMHgyNDdFO1xuICAgICAgICAgICAgICAgICAgICB0WydlbGV2ZW5wZXJpb2QnXSA9IDB4MjQ5MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWxldmVucm9tYW4nXSA9IDB4MjE3QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWxsaXBzaXMnXSA9IDB4MjAyNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWxsaXBzaXN2ZXJ0aWNhbCddID0gMHgyMkVFO1xuICAgICAgICAgICAgICAgICAgICB0WydlbWFjcm9uJ10gPSAweDAxMTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VtYWNyb25hY3V0ZSddID0gMHgxRTE3O1xuICAgICAgICAgICAgICAgICAgICB0WydlbWFjcm9uZ3JhdmUnXSA9IDB4MUUxNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZW1jeXJpbGxpYyddID0gMHgwNDNDO1xuICAgICAgICAgICAgICAgICAgICB0WydlbWRhc2gnXSA9IDB4MjAxNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZW1kYXNodmVydGljYWwnXSA9IDB4RkUzMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZW1vbm9zcGFjZSddID0gMHhGRjQ1O1xuICAgICAgICAgICAgICAgICAgICB0WydlbXBoYXNpc21hcmthcm1lbmlhbiddID0gMHgwNTVCO1xuICAgICAgICAgICAgICAgICAgICB0WydlbXB0eXNldCddID0gMHgyMjA1O1xuICAgICAgICAgICAgICAgICAgICB0WydlbmJvcG9tb2ZvJ10gPSAweDMxMjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VuY3lyaWxsaWMnXSA9IDB4MDQzRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZW5kYXNoJ10gPSAweDIwMTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VuZGFzaHZlcnRpY2FsJ10gPSAweEZFMzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VuZGVzY2VuZGVyY3lyaWxsaWMnXSA9IDB4MDRBMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZW5nJ10gPSAweDAxNEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VuZ2JvcG9tb2ZvJ10gPSAweDMxMjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VuZ2hlY3lyaWxsaWMnXSA9IDB4MDRBNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZW5ob29rY3lyaWxsaWMnXSA9IDB4MDRDODtcbiAgICAgICAgICAgICAgICAgICAgdFsnZW5zcGFjZSddID0gMHgyMDAyO1xuICAgICAgICAgICAgICAgICAgICB0Wydlb2dvbmVrJ10gPSAweDAxMTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Vva29yZWFuJ10gPSAweDMxNTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VvcGVuJ10gPSAweDAyNUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VvcGVuY2xvc2VkJ10gPSAweDAyOUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VvcGVucmV2ZXJzZWQnXSA9IDB4MDI1QztcbiAgICAgICAgICAgICAgICAgICAgdFsnZW9wZW5yZXZlcnNlZGNsb3NlZCddID0gMHgwMjVFO1xuICAgICAgICAgICAgICAgICAgICB0Wydlb3BlbnJldmVyc2VkaG9vayddID0gMHgwMjVEO1xuICAgICAgICAgICAgICAgICAgICB0WydlcGFyZW4nXSA9IDB4MjRBMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXBzaWxvbiddID0gMHgwM0I1O1xuICAgICAgICAgICAgICAgICAgICB0WydlcHNpbG9udG9ub3MnXSA9IDB4MDNBRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXF1YWwnXSA9IDB4MDAzRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXF1YWxtb25vc3BhY2UnXSA9IDB4RkYxRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXF1YWxzbWFsbCddID0gMHhGRTY2O1xuICAgICAgICAgICAgICAgICAgICB0WydlcXVhbHN1cGVyaW9yJ10gPSAweDIwN0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VxdWl2YWxlbmNlJ10gPSAweDIyNjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VyYm9wb21vZm8nXSA9IDB4MzEyNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXJjeXJpbGxpYyddID0gMHgwNDQwO1xuICAgICAgICAgICAgICAgICAgICB0WydlcmV2ZXJzZWQnXSA9IDB4MDI1ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXJldmVyc2VkY3lyaWxsaWMnXSA9IDB4MDQ0RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXNjeXJpbGxpYyddID0gMHgwNDQxO1xuICAgICAgICAgICAgICAgICAgICB0Wydlc2Rlc2NlbmRlcmN5cmlsbGljJ10gPSAweDA0QUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VzaCddID0gMHgwMjgzO1xuICAgICAgICAgICAgICAgICAgICB0Wydlc2hjdXJsJ10gPSAweDAyODY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VzaG9ydGRldmEnXSA9IDB4MDkwRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXNob3J0dm93ZWxzaWduZGV2YSddID0gMHgwOTQ2O1xuICAgICAgICAgICAgICAgICAgICB0Wydlc2hyZXZlcnNlZGxvb3AnXSA9IDB4MDFBQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXNoc3F1YXRyZXZlcnNlZCddID0gMHgwMjg1O1xuICAgICAgICAgICAgICAgICAgICB0Wydlc21hbGxoaXJhZ2FuYSddID0gMHgzMDQ3O1xuICAgICAgICAgICAgICAgICAgICB0Wydlc21hbGxrYXRha2FuYSddID0gMHgzMEE3O1xuICAgICAgICAgICAgICAgICAgICB0Wydlc21hbGxrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjZBO1xuICAgICAgICAgICAgICAgICAgICB0Wydlc3RpbWF0ZWQnXSA9IDB4MjEyRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXN1cGVyaW9yJ10gPSAweEY2RUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2V0YSddID0gMHgwM0I3O1xuICAgICAgICAgICAgICAgICAgICB0WydldGFybWVuaWFuJ10gPSAweDA1Njg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2V0YXRvbm9zJ10gPSAweDAzQUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2V0aCddID0gMHgwMEYwO1xuICAgICAgICAgICAgICAgICAgICB0WydldGlsZGUnXSA9IDB4MUVCRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXRpbGRlYmVsb3cnXSA9IDB4MUUxQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXRuYWh0YWZvdWtoaGVicmV3J10gPSAweDA1OTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2V0bmFodGFmb3VraGxlZnRoZWJyZXcnXSA9IDB4MDU5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXRuYWh0YWhlYnJldyddID0gMHgwNTkxO1xuICAgICAgICAgICAgICAgICAgICB0WydldG5haHRhbGVmdGhlYnJldyddID0gMHgwNTkxO1xuICAgICAgICAgICAgICAgICAgICB0WydldHVybmVkJ10gPSAweDAxREQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2V1a29yZWFuJ10gPSAweDMxNjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2V1cm8nXSA9IDB4MjBBQztcbiAgICAgICAgICAgICAgICAgICAgdFsnZXZvd2Vsc2lnbmJlbmdhbGknXSA9IDB4MDlDNztcbiAgICAgICAgICAgICAgICAgICAgdFsnZXZvd2Vsc2lnbmRldmEnXSA9IDB4MDk0NztcbiAgICAgICAgICAgICAgICAgICAgdFsnZXZvd2Vsc2lnbmd1amFyYXRpJ10gPSAweDBBQzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2V4Y2xhbSddID0gMHgwMDIxO1xuICAgICAgICAgICAgICAgICAgICB0WydleGNsYW1hcm1lbmlhbiddID0gMHgwNTVDO1xuICAgICAgICAgICAgICAgICAgICB0WydleGNsYW1kYmwnXSA9IDB4MjAzQztcbiAgICAgICAgICAgICAgICAgICAgdFsnZXhjbGFtZG93biddID0gMHgwMEExO1xuICAgICAgICAgICAgICAgICAgICB0WydleGNsYW1kb3duc21hbGwnXSA9IDB4RjdBMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXhjbGFtbW9ub3NwYWNlJ10gPSAweEZGMDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2V4Y2xhbXNtYWxsJ10gPSAweEY3MjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2V4aXN0ZW50aWFsJ10gPSAweDIyMDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2V6aCddID0gMHgwMjkyO1xuICAgICAgICAgICAgICAgICAgICB0WydlemhjYXJvbiddID0gMHgwMUVGO1xuICAgICAgICAgICAgICAgICAgICB0WydlemhjdXJsJ10gPSAweDAyOTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2V6aHJldmVyc2VkJ10gPSAweDAxQjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2V6aHRhaWwnXSA9IDB4MDFCQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZiddID0gMHgwMDY2O1xuICAgICAgICAgICAgICAgICAgICB0WydmYWRldmEnXSA9IDB4MDk1RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmFndXJtdWtoaSddID0gMHgwQTVFO1xuICAgICAgICAgICAgICAgICAgICB0WydmYWhyZW5oZWl0J10gPSAweDIxMDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZhdGhhYXJhYmljJ10gPSAweDA2NEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZhdGhhbG93YXJhYmljJ10gPSAweDA2NEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZhdGhhdGFuYXJhYmljJ10gPSAweDA2NEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Zib3BvbW9mbyddID0gMHgzMTA4O1xuICAgICAgICAgICAgICAgICAgICB0WydmY2lyY2xlJ10gPSAweDI0RDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Zkb3RhY2NlbnQnXSA9IDB4MUUxRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmVoYXJhYmljJ10gPSAweDA2NDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZlaGFybWVuaWFuJ10gPSAweDA1ODY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZlaGZpbmFsYXJhYmljJ10gPSAweEZFRDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZlaGluaXRpYWxhcmFiaWMnXSA9IDB4RkVEMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZmVobWVkaWFsYXJhYmljJ10gPSAweEZFRDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZlaWNvcHRpYyddID0gMHgwM0U1O1xuICAgICAgICAgICAgICAgICAgICB0WydmZW1hbGUnXSA9IDB4MjY0MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmYnXSA9IDB4RkIwMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmZpJ10gPSAweEZCMDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZmbCddID0gMHhGQjA0O1xuICAgICAgICAgICAgICAgICAgICB0WydmaSddID0gMHhGQjAxO1xuICAgICAgICAgICAgICAgICAgICB0WydmaWZ0ZWVuY2lyY2xlJ10gPSAweDI0NkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpZnRlZW5wYXJlbiddID0gMHgyNDgyO1xuICAgICAgICAgICAgICAgICAgICB0WydmaWZ0ZWVucGVyaW9kJ10gPSAweDI0OTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpZ3VyZWRhc2gnXSA9IDB4MjAxMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmlsbGVkYm94J10gPSAweDI1QTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpbGxlZHJlY3QnXSA9IDB4MjVBQztcbiAgICAgICAgICAgICAgICAgICAgdFsnZmluYWxrYWYnXSA9IDB4MDVEQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmluYWxrYWZkYWdlc2gnXSA9IDB4RkIzQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmluYWxrYWZkYWdlc2hoZWJyZXcnXSA9IDB4RkIzQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmluYWxrYWZoZWJyZXcnXSA9IDB4MDVEQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmluYWxtZW0nXSA9IDB4MDVERDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmluYWxtZW1oZWJyZXcnXSA9IDB4MDVERDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmluYWxudW4nXSA9IDB4MDVERjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmluYWxudW5oZWJyZXcnXSA9IDB4MDVERjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmluYWxwZSddID0gMHgwNUUzO1xuICAgICAgICAgICAgICAgICAgICB0WydmaW5hbHBlaGVicmV3J10gPSAweDA1RTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpbmFsdHNhZGknXSA9IDB4MDVFNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmluYWx0c2FkaWhlYnJldyddID0gMHgwNUU1O1xuICAgICAgICAgICAgICAgICAgICB0WydmaXJzdHRvbmVjaGluZXNlJ10gPSAweDAyQzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Zpc2hleWUnXSA9IDB4MjVDOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZml0YWN5cmlsbGljJ10gPSAweDA0NzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpdmUnXSA9IDB4MDAzNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZml2ZWFyYWJpYyddID0gMHgwNjY1O1xuICAgICAgICAgICAgICAgICAgICB0WydmaXZlYmVuZ2FsaSddID0gMHgwOUVCO1xuICAgICAgICAgICAgICAgICAgICB0WydmaXZlY2lyY2xlJ10gPSAweDI0NjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpdmVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmJ10gPSAweDI3OEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpdmVkZXZhJ10gPSAweDA5NkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpdmVlaWdodGhzJ10gPSAweDIxNUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpdmVndWphcmF0aSddID0gMHgwQUVCO1xuICAgICAgICAgICAgICAgICAgICB0WydmaXZlZ3VybXVraGknXSA9IDB4MEE2QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZml2ZWhhY2thcmFiaWMnXSA9IDB4MDY2NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZml2ZWhhbmd6aG91J10gPSAweDMwMjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpdmVpZGVvZ3JhcGhpY3BhcmVuJ10gPSAweDMyMjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpdmVpbmZlcmlvciddID0gMHgyMDg1O1xuICAgICAgICAgICAgICAgICAgICB0WydmaXZlbW9ub3NwYWNlJ10gPSAweEZGMTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpdmVvbGRzdHlsZSddID0gMHhGNzM1O1xuICAgICAgICAgICAgICAgICAgICB0WydmaXZlcGFyZW4nXSA9IDB4MjQ3ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnZml2ZXBlcmlvZCddID0gMHgyNDhDO1xuICAgICAgICAgICAgICAgICAgICB0WydmaXZlcGVyc2lhbiddID0gMHgwNkY1O1xuICAgICAgICAgICAgICAgICAgICB0WydmaXZlcm9tYW4nXSA9IDB4MjE3NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZml2ZXN1cGVyaW9yJ10gPSAweDIwNzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpdmV0aGFpJ10gPSAweDBFNTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZsJ10gPSAweEZCMDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Zsb3JpbiddID0gMHgwMTkyO1xuICAgICAgICAgICAgICAgICAgICB0WydmbW9ub3NwYWNlJ10gPSAweEZGNDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Ztc3F1YXJlJ10gPSAweDMzOTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZvZmFudGhhaSddID0gMHgwRTFGO1xuICAgICAgICAgICAgICAgICAgICB0Wydmb2ZhdGhhaSddID0gMHgwRTFEO1xuICAgICAgICAgICAgICAgICAgICB0Wydmb25nbWFudGhhaSddID0gMHgwRTRGO1xuICAgICAgICAgICAgICAgICAgICB0Wydmb3JhbGwnXSA9IDB4MjIwMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZm91ciddID0gMHgwMDM0O1xuICAgICAgICAgICAgICAgICAgICB0Wydmb3VyYXJhYmljJ10gPSAweDA2NjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZvdXJiZW5nYWxpJ10gPSAweDA5RUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZvdXJjaXJjbGUnXSA9IDB4MjQ2MztcbiAgICAgICAgICAgICAgICAgICAgdFsnZm91cmNpcmNsZWludmVyc2VzYW5zc2VyaWYnXSA9IDB4Mjc4RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZm91cmRldmEnXSA9IDB4MDk2QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZm91cmd1amFyYXRpJ10gPSAweDBBRUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZvdXJndXJtdWtoaSddID0gMHgwQTZBO1xuICAgICAgICAgICAgICAgICAgICB0Wydmb3VyaGFja2FyYWJpYyddID0gMHgwNjY0O1xuICAgICAgICAgICAgICAgICAgICB0Wydmb3VyaGFuZ3pob3UnXSA9IDB4MzAyNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZm91cmlkZW9ncmFwaGljcGFyZW4nXSA9IDB4MzIyMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZm91cmluZmVyaW9yJ10gPSAweDIwODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZvdXJtb25vc3BhY2UnXSA9IDB4RkYxNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZm91cm51bWVyYXRvcmJlbmdhbGknXSA9IDB4MDlGNztcbiAgICAgICAgICAgICAgICAgICAgdFsnZm91cm9sZHN0eWxlJ10gPSAweEY3MzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZvdXJwYXJlbiddID0gMHgyNDc3O1xuICAgICAgICAgICAgICAgICAgICB0Wydmb3VycGVyaW9kJ10gPSAweDI0OEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZvdXJwZXJzaWFuJ10gPSAweDA2RjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZvdXJyb21hbiddID0gMHgyMTczO1xuICAgICAgICAgICAgICAgICAgICB0Wydmb3Vyc3VwZXJpb3InXSA9IDB4MjA3NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZm91cnRlZW5jaXJjbGUnXSA9IDB4MjQ2RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZm91cnRlZW5wYXJlbiddID0gMHgyNDgxO1xuICAgICAgICAgICAgICAgICAgICB0Wydmb3VydGVlbnBlcmlvZCddID0gMHgyNDk1O1xuICAgICAgICAgICAgICAgICAgICB0Wydmb3VydGhhaSddID0gMHgwRTU0O1xuICAgICAgICAgICAgICAgICAgICB0Wydmb3VydGh0b25lY2hpbmVzZSddID0gMHgwMkNCO1xuICAgICAgICAgICAgICAgICAgICB0WydmcGFyZW4nXSA9IDB4MjRBMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZnJhY3Rpb24nXSA9IDB4MjA0NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZnJhbmMnXSA9IDB4MjBBMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZyddID0gMHgwMDY3O1xuICAgICAgICAgICAgICAgICAgICB0WydnYWJlbmdhbGknXSA9IDB4MDk5NztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2FjdXRlJ10gPSAweDAxRjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dhZGV2YSddID0gMHgwOTE3O1xuICAgICAgICAgICAgICAgICAgICB0WydnYWZhcmFiaWMnXSA9IDB4MDZBRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2FmZmluYWxhcmFiaWMnXSA9IDB4RkI5MztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2FmaW5pdGlhbGFyYWJpYyddID0gMHhGQjk0O1xuICAgICAgICAgICAgICAgICAgICB0WydnYWZtZWRpYWxhcmFiaWMnXSA9IDB4RkI5NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2FndWphcmF0aSddID0gMHgwQTk3O1xuICAgICAgICAgICAgICAgICAgICB0WydnYWd1cm11a2hpJ10gPSAweDBBMTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dhaGlyYWdhbmEnXSA9IDB4MzA0QztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2FrYXRha2FuYSddID0gMHgzMEFDO1xuICAgICAgICAgICAgICAgICAgICB0WydnYW1tYSddID0gMHgwM0IzO1xuICAgICAgICAgICAgICAgICAgICB0WydnYW1tYWxhdGluc21hbGwnXSA9IDB4MDI2MztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2FtbWFzdXBlcmlvciddID0gMHgwMkUwO1xuICAgICAgICAgICAgICAgICAgICB0WydnYW5naWFjb3B0aWMnXSA9IDB4MDNFQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2JvcG9tb2ZvJ10gPSAweDMxMEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dicmV2ZSddID0gMHgwMTFGO1xuICAgICAgICAgICAgICAgICAgICB0WydnY2Fyb24nXSA9IDB4MDFFNztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2NlZGlsbGEnXSA9IDB4MDEyMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2NpcmNsZSddID0gMHgyNEQ2O1xuICAgICAgICAgICAgICAgICAgICB0WydnY2lyY3VtZmxleCddID0gMHgwMTFEO1xuICAgICAgICAgICAgICAgICAgICB0WydnY29tbWFhY2NlbnQnXSA9IDB4MDEyMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2RvdCddID0gMHgwMTIxO1xuICAgICAgICAgICAgICAgICAgICB0WydnZG90YWNjZW50J10gPSAweDAxMjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dlY3lyaWxsaWMnXSA9IDB4MDQzMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2VoaXJhZ2FuYSddID0gMHgzMDUyO1xuICAgICAgICAgICAgICAgICAgICB0WydnZWthdGFrYW5hJ10gPSAweDMwQjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dlb21ldHJpY2FsbHllcXVhbCddID0gMHgyMjUxO1xuICAgICAgICAgICAgICAgICAgICB0WydnZXJlc2hhY2NlbnRoZWJyZXcnXSA9IDB4MDU5QztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2VyZXNoaGVicmV3J10gPSAweDA1RjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dlcmVzaG11cWRhbWhlYnJldyddID0gMHgwNTlEO1xuICAgICAgICAgICAgICAgICAgICB0WydnZXJtYW5kYmxzJ10gPSAweDAwREY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dlcnNoYXlpbWFjY2VudGhlYnJldyddID0gMHgwNTlFO1xuICAgICAgICAgICAgICAgICAgICB0WydnZXJzaGF5aW1oZWJyZXcnXSA9IDB4MDVGNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2V0YW1hcmsnXSA9IDB4MzAxMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2hhYmVuZ2FsaSddID0gMHgwOTk4O1xuICAgICAgICAgICAgICAgICAgICB0WydnaGFkYXJtZW5pYW4nXSA9IDB4MDU3MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2hhZGV2YSddID0gMHgwOTE4O1xuICAgICAgICAgICAgICAgICAgICB0WydnaGFndWphcmF0aSddID0gMHgwQTk4O1xuICAgICAgICAgICAgICAgICAgICB0WydnaGFndXJtdWtoaSddID0gMHgwQTE4O1xuICAgICAgICAgICAgICAgICAgICB0WydnaGFpbmFyYWJpYyddID0gMHgwNjNBO1xuICAgICAgICAgICAgICAgICAgICB0WydnaGFpbmZpbmFsYXJhYmljJ10gPSAweEZFQ0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2doYWluaW5pdGlhbGFyYWJpYyddID0gMHhGRUNGO1xuICAgICAgICAgICAgICAgICAgICB0WydnaGFpbm1lZGlhbGFyYWJpYyddID0gMHhGRUQwO1xuICAgICAgICAgICAgICAgICAgICB0WydnaGVtaWRkbGVob29rY3lyaWxsaWMnXSA9IDB4MDQ5NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2hlc3Ryb2tlY3lyaWxsaWMnXSA9IDB4MDQ5MztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2hldXB0dXJuY3lyaWxsaWMnXSA9IDB4MDQ5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2hoYWRldmEnXSA9IDB4MDk1QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2hoYWd1cm11a2hpJ10gPSAweDBBNUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dob29rJ10gPSAweDAyNjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2doenNxdWFyZSddID0gMHgzMzkzO1xuICAgICAgICAgICAgICAgICAgICB0WydnaWhpcmFnYW5hJ10gPSAweDMwNEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dpa2F0YWthbmEnXSA9IDB4MzBBRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2ltYXJtZW5pYW4nXSA9IDB4MDU2MztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2ltZWwnXSA9IDB4MDVEMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2ltZWxkYWdlc2gnXSA9IDB4RkIzMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2ltZWxkYWdlc2hoZWJyZXcnXSA9IDB4RkIzMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2ltZWxoZWJyZXcnXSA9IDB4MDVEMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2plY3lyaWxsaWMnXSA9IDB4MDQ1MztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2xvdHRhbGludmVydGVkc3Ryb2tlJ10gPSAweDAxQkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dsb3R0YWxzdG9wJ10gPSAweDAyOTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dsb3R0YWxzdG9waW52ZXJ0ZWQnXSA9IDB4MDI5NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2xvdHRhbHN0b3Btb2QnXSA9IDB4MDJDMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2xvdHRhbHN0b3ByZXZlcnNlZCddID0gMHgwMjk1O1xuICAgICAgICAgICAgICAgICAgICB0WydnbG90dGFsc3RvcHJldmVyc2VkbW9kJ10gPSAweDAyQzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dsb3R0YWxzdG9wcmV2ZXJzZWRzdXBlcmlvciddID0gMHgwMkU0O1xuICAgICAgICAgICAgICAgICAgICB0WydnbG90dGFsc3RvcHN0cm9rZSddID0gMHgwMkExO1xuICAgICAgICAgICAgICAgICAgICB0WydnbG90dGFsc3RvcHN0cm9rZXJldmVyc2VkJ10gPSAweDAyQTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dtYWNyb24nXSA9IDB4MUUyMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ21vbm9zcGFjZSddID0gMHhGRjQ3O1xuICAgICAgICAgICAgICAgICAgICB0Wydnb2hpcmFnYW5hJ10gPSAweDMwNTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dva2F0YWthbmEnXSA9IDB4MzBCNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ3BhcmVuJ10gPSAweDI0QTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dwYXNxdWFyZSddID0gMHgzM0FDO1xuICAgICAgICAgICAgICAgICAgICB0WydncmFkaWVudCddID0gMHgyMjA3O1xuICAgICAgICAgICAgICAgICAgICB0WydncmF2ZSddID0gMHgwMDYwO1xuICAgICAgICAgICAgICAgICAgICB0WydncmF2ZWJlbG93Y21iJ10gPSAweDAzMTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dyYXZlY21iJ10gPSAweDAzMDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dyYXZlY29tYiddID0gMHgwMzAwO1xuICAgICAgICAgICAgICAgICAgICB0WydncmF2ZWRldmEnXSA9IDB4MDk1MztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ3JhdmVsb3dtb2QnXSA9IDB4MDJDRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ3JhdmVtb25vc3BhY2UnXSA9IDB4RkY0MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ3JhdmV0b25lY21iJ10gPSAweDAzNDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXInXSA9IDB4MDAzRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ3JlYXRlcmVxdWFsJ10gPSAweDIyNjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXJlcXVhbG9ybGVzcyddID0gMHgyMkRCO1xuICAgICAgICAgICAgICAgICAgICB0WydncmVhdGVybW9ub3NwYWNlJ10gPSAweEZGMUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXJvcmVxdWl2YWxlbnQnXSA9IDB4MjI3MztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ3JlYXRlcm9ybGVzcyddID0gMHgyMjc3O1xuICAgICAgICAgICAgICAgICAgICB0WydncmVhdGVyb3ZlcmVxdWFsJ10gPSAweDIyNjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXJzbWFsbCddID0gMHhGRTY1O1xuICAgICAgICAgICAgICAgICAgICB0Wydnc2NyaXB0J10gPSAweDAyNjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dzdHJva2UnXSA9IDB4MDFFNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ3VoaXJhZ2FuYSddID0gMHgzMDUwO1xuICAgICAgICAgICAgICAgICAgICB0WydndWlsbGVtb3RsZWZ0J10gPSAweDAwQUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxsZW1vdHJpZ2h0J10gPSAweDAwQkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxzaW5nbGxlZnQnXSA9IDB4MjAzOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ3VpbHNpbmdscmlnaHQnXSA9IDB4MjAzQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ3VrYXRha2FuYSddID0gMHgzMEIwO1xuICAgICAgICAgICAgICAgICAgICB0WydndXJhbXVzcXVhcmUnXSA9IDB4MzMxODtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ3lzcXVhcmUnXSA9IDB4MzNDOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaCddID0gMHgwMDY4O1xuICAgICAgICAgICAgICAgICAgICB0WydoYWFia2hhc2lhbmN5cmlsbGljJ10gPSAweDA0QTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhYWx0b25lYXJhYmljJ10gPSAweDA2QzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhYmVuZ2FsaSddID0gMHgwOUI5O1xuICAgICAgICAgICAgICAgICAgICB0WydoYWRlc2NlbmRlcmN5cmlsbGljJ10gPSAweDA0QjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhZGV2YSddID0gMHgwOTM5O1xuICAgICAgICAgICAgICAgICAgICB0WydoYWd1amFyYXRpJ10gPSAweDBBQjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhZ3VybXVraGknXSA9IDB4MEEzOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGFoYXJhYmljJ10gPSAweDA2MkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhaGZpbmFsYXJhYmljJ10gPSAweEZFQTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhaGluaXRpYWxhcmFiaWMnXSA9IDB4RkVBMztcbiAgICAgICAgICAgICAgICAgICAgdFsnaGFoaXJhZ2FuYSddID0gMHgzMDZGO1xuICAgICAgICAgICAgICAgICAgICB0WydoYWhtZWRpYWxhcmFiaWMnXSA9IDB4RkVBNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGFpdHVzcXVhcmUnXSA9IDB4MzMyQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGFrYXRha2FuYSddID0gMHgzMENGO1xuICAgICAgICAgICAgICAgICAgICB0WydoYWthdGFrYW5haGFsZndpZHRoJ10gPSAweEZGOEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhbGFudGd1cm11a2hpJ10gPSAweDBBNEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhbXphYXJhYmljJ10gPSAweDA2MjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhbXphbG93YXJhYmljJ10gPSAweDA2MjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhbmd1bGZpbGxlciddID0gMHgzMTY0O1xuICAgICAgICAgICAgICAgICAgICB0WydoYXJkc2lnbmN5cmlsbGljJ10gPSAweDA0NEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhcnBvb25sZWZ0YmFyYnVwJ10gPSAweDIxQkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhcnBvb25yaWdodGJhcmJ1cCddID0gMHgyMUMwO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXNxdWFyZSddID0gMHgzM0NBO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXRhZnBhdGFoJ10gPSAweDA1QjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhdGFmcGF0YWgxNiddID0gMHgwNUIyO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXRhZnBhdGFoMjMnXSA9IDB4MDVCMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGF0YWZwYXRhaDJmJ10gPSAweDA1QjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhdGFmcGF0YWhoZWJyZXcnXSA9IDB4MDVCMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGF0YWZwYXRhaG5hcnJvd2hlYnJldyddID0gMHgwNUIyO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXRhZnBhdGFocXVhcnRlcmhlYnJldyddID0gMHgwNUIyO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXRhZnBhdGFod2lkZWhlYnJldyddID0gMHgwNUIyO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXRhZnFhbWF0cyddID0gMHgwNUIzO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXRhZnFhbWF0czFiJ10gPSAweDA1QjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhdGFmcWFtYXRzMjgnXSA9IDB4MDVCMztcbiAgICAgICAgICAgICAgICAgICAgdFsnaGF0YWZxYW1hdHMzNCddID0gMHgwNUIzO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXRhZnFhbWF0c2hlYnJldyddID0gMHgwNUIzO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXRhZnFhbWF0c25hcnJvd2hlYnJldyddID0gMHgwNUIzO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXRhZnFhbWF0c3F1YXJ0ZXJoZWJyZXcnXSA9IDB4MDVCMztcbiAgICAgICAgICAgICAgICAgICAgdFsnaGF0YWZxYW1hdHN3aWRlaGVicmV3J10gPSAweDA1QjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhdGFmc2Vnb2wnXSA9IDB4MDVCMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGF0YWZzZWdvbDE3J10gPSAweDA1QjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhdGFmc2Vnb2wyNCddID0gMHgwNUIxO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXRhZnNlZ29sMzAnXSA9IDB4MDVCMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGF0YWZzZWdvbGhlYnJldyddID0gMHgwNUIxO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXRhZnNlZ29sbmFycm93aGVicmV3J10gPSAweDA1QjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhdGFmc2Vnb2xxdWFydGVyaGVicmV3J10gPSAweDA1QjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhdGFmc2Vnb2x3aWRlaGVicmV3J10gPSAweDA1QjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hiYXInXSA9IDB4MDEyNztcbiAgICAgICAgICAgICAgICAgICAgdFsnaGJvcG9tb2ZvJ10gPSAweDMxMEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hicmV2ZWJlbG93J10gPSAweDFFMkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hjZWRpbGxhJ10gPSAweDFFMjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hjaXJjbGUnXSA9IDB4MjRENztcbiAgICAgICAgICAgICAgICAgICAgdFsnaGNpcmN1bWZsZXgnXSA9IDB4MDEyNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGRpZXJlc2lzJ10gPSAweDFFMjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hkb3RhY2NlbnQnXSA9IDB4MUUyMztcbiAgICAgICAgICAgICAgICAgICAgdFsnaGRvdGJlbG93J10gPSAweDFFMjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hlJ10gPSAweDA1RDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hlYXJ0J10gPSAweDI2NjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hlYXJ0c3VpdGJsYWNrJ10gPSAweDI2NjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hlYXJ0c3VpdHdoaXRlJ10gPSAweDI2NjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hlZGFnZXNoJ10gPSAweEZCMzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hlZGFnZXNoaGVicmV3J10gPSAweEZCMzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hlaGFsdG9uZWFyYWJpYyddID0gMHgwNkMxO1xuICAgICAgICAgICAgICAgICAgICB0WydoZWhhcmFiaWMnXSA9IDB4MDY0NztcbiAgICAgICAgICAgICAgICAgICAgdFsnaGVoZWJyZXcnXSA9IDB4MDVENDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGVoZmluYWxhbHRvbmVhcmFiaWMnXSA9IDB4RkJBNztcbiAgICAgICAgICAgICAgICAgICAgdFsnaGVoZmluYWxhbHR0d29hcmFiaWMnXSA9IDB4RkVFQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGVoZmluYWxhcmFiaWMnXSA9IDB4RkVFQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGVoaGFtemFhYm92ZWZpbmFsYXJhYmljJ10gPSAweEZCQTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hlaGhhbXphYWJvdmVpc29sYXRlZGFyYWJpYyddID0gMHhGQkE0O1xuICAgICAgICAgICAgICAgICAgICB0WydoZWhpbml0aWFsYWx0b25lYXJhYmljJ10gPSAweEZCQTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hlaGluaXRpYWxhcmFiaWMnXSA9IDB4RkVFQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGVoaXJhZ2FuYSddID0gMHgzMDc4O1xuICAgICAgICAgICAgICAgICAgICB0WydoZWhtZWRpYWxhbHRvbmVhcmFiaWMnXSA9IDB4RkJBOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGVobWVkaWFsYXJhYmljJ10gPSAweEZFRUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hlaXNlaWVyYXNxdWFyZSddID0gMHgzMzdCO1xuICAgICAgICAgICAgICAgICAgICB0WydoZWthdGFrYW5hJ10gPSAweDMwRDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hla2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY4RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGVrdXRhYXJ1c3F1YXJlJ10gPSAweDMzMzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hlbmdob29rJ10gPSAweDAyNjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hlcnV0dXNxdWFyZSddID0gMHgzMzM5O1xuICAgICAgICAgICAgICAgICAgICB0WydoZXQnXSA9IDB4MDVENztcbiAgICAgICAgICAgICAgICAgICAgdFsnaGV0aGVicmV3J10gPSAweDA1RDc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hob29rJ10gPSAweDAyNjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hob29rc3VwZXJpb3InXSA9IDB4MDJCMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGlldWhhY2lyY2xla29yZWFuJ10gPSAweDMyN0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hpZXVoYXBhcmVua29yZWFuJ10gPSAweDMyMUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hpZXVoY2lyY2xla29yZWFuJ10gPSAweDMyNkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hpZXVoa29yZWFuJ10gPSAweDMxNEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hpZXVocGFyZW5rb3JlYW4nXSA9IDB4MzIwRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGloaXJhZ2FuYSddID0gMHgzMDcyO1xuICAgICAgICAgICAgICAgICAgICB0WydoaWthdGFrYW5hJ10gPSAweDMwRDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hpa2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY4QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGlyaXEnXSA9IDB4MDVCNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGlyaXExNCddID0gMHgwNUI0O1xuICAgICAgICAgICAgICAgICAgICB0WydoaXJpcTIxJ10gPSAweDA1QjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hpcmlxMmQnXSA9IDB4MDVCNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGlyaXFoZWJyZXcnXSA9IDB4MDVCNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGlyaXFuYXJyb3doZWJyZXcnXSA9IDB4MDVCNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGlyaXFxdWFydGVyaGVicmV3J10gPSAweDA1QjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hpcmlxd2lkZWhlYnJldyddID0gMHgwNUI0O1xuICAgICAgICAgICAgICAgICAgICB0WydobGluZWJlbG93J10gPSAweDFFOTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2htb25vc3BhY2UnXSA9IDB4RkY0ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnaG9hcm1lbmlhbiddID0gMHgwNTcwO1xuICAgICAgICAgICAgICAgICAgICB0Wydob2hpcHRoYWknXSA9IDB4MEUyQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaG9oaXJhZ2FuYSddID0gMHgzMDdCO1xuICAgICAgICAgICAgICAgICAgICB0Wydob2thdGFrYW5hJ10gPSAweDMwREI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hva2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY4RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaG9sYW0nXSA9IDB4MDVCOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaG9sYW0xOSddID0gMHgwNUI5O1xuICAgICAgICAgICAgICAgICAgICB0Wydob2xhbTI2J10gPSAweDA1Qjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hvbGFtMzInXSA9IDB4MDVCOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaG9sYW1oZWJyZXcnXSA9IDB4MDVCOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaG9sYW1uYXJyb3doZWJyZXcnXSA9IDB4MDVCOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaG9sYW1xdWFydGVyaGVicmV3J10gPSAweDA1Qjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hvbGFtd2lkZWhlYnJldyddID0gMHgwNUI5O1xuICAgICAgICAgICAgICAgICAgICB0Wydob25va2h1a3RoYWknXSA9IDB4MEUyRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaG9va2Fib3ZlY29tYiddID0gMHgwMzA5O1xuICAgICAgICAgICAgICAgICAgICB0Wydob29rY21iJ10gPSAweDAzMDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hvb2twYWxhdGFsaXplZGJlbG93Y21iJ10gPSAweDAzMjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hvb2tyZXRyb2ZsZXhiZWxvd2NtYiddID0gMHgwMzIyO1xuICAgICAgICAgICAgICAgICAgICB0Wydob29uc3F1YXJlJ10gPSAweDMzNDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hvcmljb3B0aWMnXSA9IDB4MDNFOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaG9yaXpvbnRhbGJhciddID0gMHgyMDE1O1xuICAgICAgICAgICAgICAgICAgICB0Wydob3JuY21iJ10gPSAweDAzMUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hvdHNwcmluZ3MnXSA9IDB4MjY2ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnaG91c2UnXSA9IDB4MjMwMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaHBhcmVuJ10gPSAweDI0QTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hzdXBlcmlvciddID0gMHgwMkIwO1xuICAgICAgICAgICAgICAgICAgICB0WydodHVybmVkJ10gPSAweDAyNjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2h1aGlyYWdhbmEnXSA9IDB4MzA3NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaHVpaXRvc3F1YXJlJ10gPSAweDMzMzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2h1a2F0YWthbmEnXSA9IDB4MzBENTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaHVrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjhDO1xuICAgICAgICAgICAgICAgICAgICB0WydodW5nYXJ1bWxhdXQnXSA9IDB4MDJERDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaHVuZ2FydW1sYXV0Y21iJ10gPSAweDAzMEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2h2J10gPSAweDAxOTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2h5cGhlbiddID0gMHgwMDJEO1xuICAgICAgICAgICAgICAgICAgICB0WydoeXBoZW5pbmZlcmlvciddID0gMHhGNkU1O1xuICAgICAgICAgICAgICAgICAgICB0WydoeXBoZW5tb25vc3BhY2UnXSA9IDB4RkYwRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaHlwaGVuc21hbGwnXSA9IDB4RkU2MztcbiAgICAgICAgICAgICAgICAgICAgdFsnaHlwaGVuc3VwZXJpb3InXSA9IDB4RjZFNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaHlwaGVudHdvJ10gPSAweDIwMTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2knXSA9IDB4MDA2OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWFjdXRlJ10gPSAweDAwRUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lhY3lyaWxsaWMnXSA9IDB4MDQ0RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWJlbmdhbGknXSA9IDB4MDk4NztcbiAgICAgICAgICAgICAgICAgICAgdFsnaWJvcG9tb2ZvJ10gPSAweDMxMjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2licmV2ZSddID0gMHgwMTJEO1xuICAgICAgICAgICAgICAgICAgICB0WydpY2Fyb24nXSA9IDB4MDFEMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWNpcmNsZSddID0gMHgyNEQ4O1xuICAgICAgICAgICAgICAgICAgICB0WydpY2lyY3VtZmxleCddID0gMHgwMEVFO1xuICAgICAgICAgICAgICAgICAgICB0WydpY3lyaWxsaWMnXSA9IDB4MDQ1NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRibGdyYXZlJ10gPSAweDAyMDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGVhcnRoY2lyY2xlJ10gPSAweDMyOEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGZpcmVjaXJjbGUnXSA9IDB4MzI4QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRlb2dyYXBoaWNhbGxpYW5jZXBhcmVuJ10gPSAweDMyM0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljY2FsbHBhcmVuJ10gPSAweDMyM0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljY2VudHJlY2lyY2xlJ10gPSAweDMyQTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljY2xvc2UnXSA9IDB4MzAwNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRlb2dyYXBoaWNjb21tYSddID0gMHgzMDAxO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY2NvbW1hbGVmdCddID0gMHhGRjY0O1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY2NvbmdyYXR1bGF0aW9ucGFyZW4nXSA9IDB4MzIzNztcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRlb2dyYXBoaWNjb3JyZWN0Y2lyY2xlJ10gPSAweDMyQTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljZWFydGhwYXJlbiddID0gMHgzMjJGO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY2VudGVycHJpc2VwYXJlbiddID0gMHgzMjNEO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY2V4Y2VsbGVudGNpcmNsZSddID0gMHgzMjlEO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY2Zlc3RpdmFscGFyZW4nXSA9IDB4MzI0MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRlb2dyYXBoaWNmaW5hbmNpYWxjaXJjbGUnXSA9IDB4MzI5NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRlb2dyYXBoaWNmaW5hbmNpYWxwYXJlbiddID0gMHgzMjM2O1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY2ZpcmVwYXJlbiddID0gMHgzMjJCO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY2hhdmVwYXJlbiddID0gMHgzMjMyO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY2hpZ2hjaXJjbGUnXSA9IDB4MzJBNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRlb2dyYXBoaWNpdGVyYXRpb25tYXJrJ10gPSAweDMwMDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljbGFib3JjaXJjbGUnXSA9IDB4MzI5ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRlb2dyYXBoaWNsYWJvcnBhcmVuJ10gPSAweDMyMzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljbGVmdGNpcmNsZSddID0gMHgzMkE3O1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY2xvd2NpcmNsZSddID0gMHgzMkE2O1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY21lZGljaW5lY2lyY2xlJ10gPSAweDMyQTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljbWV0YWxwYXJlbiddID0gMHgzMjJFO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY21vb25wYXJlbiddID0gMHgzMjJBO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY25hbWVwYXJlbiddID0gMHgzMjM0O1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY3BlcmlvZCddID0gMHgzMDAyO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY3ByaW50Y2lyY2xlJ10gPSAweDMyOUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljcmVhY2hwYXJlbiddID0gMHgzMjQzO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY3JlcHJlc2VudHBhcmVuJ10gPSAweDMyMzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljcmVzb3VyY2VwYXJlbiddID0gMHgzMjNFO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY3JpZ2h0Y2lyY2xlJ10gPSAweDMyQTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljc2VjcmV0Y2lyY2xlJ10gPSAweDMyOTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljc2VsZnBhcmVuJ10gPSAweDMyNDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljc29jaWV0eXBhcmVuJ10gPSAweDMyMzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljc3BhY2UnXSA9IDB4MzAwMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRlb2dyYXBoaWNzcGVjaWFscGFyZW4nXSA9IDB4MzIzNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRlb2dyYXBoaWNzdG9ja3BhcmVuJ10gPSAweDMyMzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljc3R1ZHlwYXJlbiddID0gMHgzMjNCO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY3N1bnBhcmVuJ10gPSAweDMyMzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljc3VwZXJ2aXNlcGFyZW4nXSA9IDB4MzIzQztcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRlb2dyYXBoaWN3YXRlcnBhcmVuJ10gPSAweDMyMkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljd29vZHBhcmVuJ10gPSAweDMyMkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljemVybyddID0gMHgzMDA3O1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhtZXRhbGNpcmNsZSddID0gMHgzMjhFO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhtb29uY2lyY2xlJ10gPSAweDMyOEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaG5hbWVjaXJjbGUnXSA9IDB4MzI5NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRlb2dyYXBoc3VuY2lyY2xlJ10gPSAweDMyOTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaHdhdGVyY2lyY2xlJ10gPSAweDMyOEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaHdvb2RjaXJjbGUnXSA9IDB4MzI4RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRldmEnXSA9IDB4MDkwNztcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRpZXJlc2lzJ10gPSAweDAwRUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkaWVyZXNpc2FjdXRlJ10gPSAweDFFMkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkaWVyZXNpc2N5cmlsbGljJ10gPSAweDA0RTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkb3RiZWxvdyddID0gMHgxRUNCO1xuICAgICAgICAgICAgICAgICAgICB0WydpZWJyZXZlY3lyaWxsaWMnXSA9IDB4MDRENztcbiAgICAgICAgICAgICAgICAgICAgdFsnaWVjeXJpbGxpYyddID0gMHgwNDM1O1xuICAgICAgICAgICAgICAgICAgICB0WydpZXVuZ2FjaXJjbGVrb3JlYW4nXSA9IDB4MzI3NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWV1bmdhcGFyZW5rb3JlYW4nXSA9IDB4MzIxNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWV1bmdjaXJjbGVrb3JlYW4nXSA9IDB4MzI2NztcbiAgICAgICAgICAgICAgICAgICAgdFsnaWV1bmdrb3JlYW4nXSA9IDB4MzE0NztcbiAgICAgICAgICAgICAgICAgICAgdFsnaWV1bmdwYXJlbmtvcmVhbiddID0gMHgzMjA3O1xuICAgICAgICAgICAgICAgICAgICB0WydpZ3JhdmUnXSA9IDB4MDBFQztcbiAgICAgICAgICAgICAgICAgICAgdFsnaWd1amFyYXRpJ10gPSAweDBBODc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lndXJtdWtoaSddID0gMHgwQTA3O1xuICAgICAgICAgICAgICAgICAgICB0WydpaGlyYWdhbmEnXSA9IDB4MzA0NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWhvb2thYm92ZSddID0gMHgxRUM5O1xuICAgICAgICAgICAgICAgICAgICB0WydpaWJlbmdhbGknXSA9IDB4MDk4ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWljeXJpbGxpYyddID0gMHgwNDM4O1xuICAgICAgICAgICAgICAgICAgICB0WydpaWRldmEnXSA9IDB4MDkwODtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWlndWphcmF0aSddID0gMHgwQTg4O1xuICAgICAgICAgICAgICAgICAgICB0WydpaWd1cm11a2hpJ10gPSAweDBBMDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lpbWF0cmFndXJtdWtoaSddID0gMHgwQTQwO1xuICAgICAgICAgICAgICAgICAgICB0WydpaW52ZXJ0ZWRicmV2ZSddID0gMHgwMjBCO1xuICAgICAgICAgICAgICAgICAgICB0WydpaXNob3J0Y3lyaWxsaWMnXSA9IDB4MDQzOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWl2b3dlbHNpZ25iZW5nYWxpJ10gPSAweDA5QzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lpdm93ZWxzaWduZGV2YSddID0gMHgwOTQwO1xuICAgICAgICAgICAgICAgICAgICB0WydpaXZvd2Vsc2lnbmd1amFyYXRpJ10gPSAweDBBQzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lqJ10gPSAweDAxMzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lrYXRha2FuYSddID0gMHgzMEE0O1xuICAgICAgICAgICAgICAgICAgICB0Wydpa2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY3MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWtvcmVhbiddID0gMHgzMTYzO1xuICAgICAgICAgICAgICAgICAgICB0WydpbGRlJ10gPSAweDAyREM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lsdXloZWJyZXcnXSA9IDB4MDVBQztcbiAgICAgICAgICAgICAgICAgICAgdFsnaW1hY3JvbiddID0gMHgwMTJCO1xuICAgICAgICAgICAgICAgICAgICB0WydpbWFjcm9uY3lyaWxsaWMnXSA9IDB4MDRFMztcbiAgICAgICAgICAgICAgICAgICAgdFsnaW1hZ2VvcmFwcHJveGltYXRlbHllcXVhbCddID0gMHgyMjUzO1xuICAgICAgICAgICAgICAgICAgICB0WydpbWF0cmFndXJtdWtoaSddID0gMHgwQTNGO1xuICAgICAgICAgICAgICAgICAgICB0WydpbW9ub3NwYWNlJ10gPSAweEZGNDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2luY3JlbWVudCddID0gMHgyMjA2O1xuICAgICAgICAgICAgICAgICAgICB0WydpbmZpbml0eSddID0gMHgyMjFFO1xuICAgICAgICAgICAgICAgICAgICB0Wydpbmlhcm1lbmlhbiddID0gMHgwNTZCO1xuICAgICAgICAgICAgICAgICAgICB0WydpbnRlZ3JhbCddID0gMHgyMjJCO1xuICAgICAgICAgICAgICAgICAgICB0WydpbnRlZ3JhbGJvdHRvbSddID0gMHgyMzIxO1xuICAgICAgICAgICAgICAgICAgICB0WydpbnRlZ3JhbGJ0J10gPSAweDIzMjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ludGVncmFsZXgnXSA9IDB4RjhGNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaW50ZWdyYWx0b3AnXSA9IDB4MjMyMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaW50ZWdyYWx0cCddID0gMHgyMzIwO1xuICAgICAgICAgICAgICAgICAgICB0WydpbnRlcnNlY3Rpb24nXSA9IDB4MjIyOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaW50aXNxdWFyZSddID0gMHgzMzA1O1xuICAgICAgICAgICAgICAgICAgICB0WydpbnZidWxsZXQnXSA9IDB4MjVEODtcbiAgICAgICAgICAgICAgICAgICAgdFsnaW52Y2lyY2xlJ10gPSAweDI1RDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ludnNtaWxlZmFjZSddID0gMHgyNjNCO1xuICAgICAgICAgICAgICAgICAgICB0Wydpb2N5cmlsbGljJ10gPSAweDA0NTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lvZ29uZWsnXSA9IDB4MDEyRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaW90YSddID0gMHgwM0I5O1xuICAgICAgICAgICAgICAgICAgICB0Wydpb3RhZGllcmVzaXMnXSA9IDB4MDNDQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaW90YWRpZXJlc2lzdG9ub3MnXSA9IDB4MDM5MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaW90YWxhdGluJ10gPSAweDAyNjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lvdGF0b25vcyddID0gMHgwM0FGO1xuICAgICAgICAgICAgICAgICAgICB0WydpcGFyZW4nXSA9IDB4MjRBNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaXJpZ3VybXVraGknXSA9IDB4MEE3MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaXNtYWxsaGlyYWdhbmEnXSA9IDB4MzA0MztcbiAgICAgICAgICAgICAgICAgICAgdFsnaXNtYWxsa2F0YWthbmEnXSA9IDB4MzBBMztcbiAgICAgICAgICAgICAgICAgICAgdFsnaXNtYWxsa2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY2ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnaXNzaGFyYmVuZ2FsaSddID0gMHgwOUZBO1xuICAgICAgICAgICAgICAgICAgICB0Wydpc3Ryb2tlJ10gPSAweDAyNjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lzdXBlcmlvciddID0gMHhGNkVEO1xuICAgICAgICAgICAgICAgICAgICB0WydpdGVyYXRpb25oaXJhZ2FuYSddID0gMHgzMDlEO1xuICAgICAgICAgICAgICAgICAgICB0WydpdGVyYXRpb25rYXRha2FuYSddID0gMHgzMEZEO1xuICAgICAgICAgICAgICAgICAgICB0WydpdGlsZGUnXSA9IDB4MDEyOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaXRpbGRlYmVsb3cnXSA9IDB4MUUyRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaXVib3BvbW9mbyddID0gMHgzMTI5O1xuICAgICAgICAgICAgICAgICAgICB0WydpdWN5cmlsbGljJ10gPSAweDA0NEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2l2b3dlbHNpZ25iZW5nYWxpJ10gPSAweDA5QkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2l2b3dlbHNpZ25kZXZhJ10gPSAweDA5M0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2l2b3dlbHNpZ25ndWphcmF0aSddID0gMHgwQUJGO1xuICAgICAgICAgICAgICAgICAgICB0WydpemhpdHNhY3lyaWxsaWMnXSA9IDB4MDQ3NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaXpoaXRzYWRibGdyYXZlY3lyaWxsaWMnXSA9IDB4MDQ3NztcbiAgICAgICAgICAgICAgICAgICAgdFsnaiddID0gMHgwMDZBO1xuICAgICAgICAgICAgICAgICAgICB0WydqYWFybWVuaWFuJ10gPSAweDA1NzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2phYmVuZ2FsaSddID0gMHgwOTlDO1xuICAgICAgICAgICAgICAgICAgICB0WydqYWRldmEnXSA9IDB4MDkxQztcbiAgICAgICAgICAgICAgICAgICAgdFsnamFndWphcmF0aSddID0gMHgwQTlDO1xuICAgICAgICAgICAgICAgICAgICB0WydqYWd1cm11a2hpJ10gPSAweDBBMUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2pib3BvbW9mbyddID0gMHgzMTEwO1xuICAgICAgICAgICAgICAgICAgICB0WydqY2Fyb24nXSA9IDB4MDFGMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnamNpcmNsZSddID0gMHgyNEQ5O1xuICAgICAgICAgICAgICAgICAgICB0WydqY2lyY3VtZmxleCddID0gMHgwMTM1O1xuICAgICAgICAgICAgICAgICAgICB0WydqY3Jvc3NlZHRhaWwnXSA9IDB4MDI5RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnamRvdGxlc3NzdHJva2UnXSA9IDB4MDI1RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnamVjeXJpbGxpYyddID0gMHgwNDU4O1xuICAgICAgICAgICAgICAgICAgICB0WydqZWVtYXJhYmljJ10gPSAweDA2MkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2plZW1maW5hbGFyYWJpYyddID0gMHhGRTlFO1xuICAgICAgICAgICAgICAgICAgICB0WydqZWVtaW5pdGlhbGFyYWJpYyddID0gMHhGRTlGO1xuICAgICAgICAgICAgICAgICAgICB0WydqZWVtbWVkaWFsYXJhYmljJ10gPSAweEZFQTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2plaGFyYWJpYyddID0gMHgwNjk4O1xuICAgICAgICAgICAgICAgICAgICB0WydqZWhmaW5hbGFyYWJpYyddID0gMHhGQjhCO1xuICAgICAgICAgICAgICAgICAgICB0WydqaGFiZW5nYWxpJ10gPSAweDA5OUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2poYWRldmEnXSA9IDB4MDkxRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnamhhZ3VqYXJhdGknXSA9IDB4MEE5RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnamhhZ3VybXVraGknXSA9IDB4MEExRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnamhlaGFybWVuaWFuJ10gPSAweDA1N0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ppcyddID0gMHgzMDA0O1xuICAgICAgICAgICAgICAgICAgICB0WydqbW9ub3NwYWNlJ10gPSAweEZGNEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2pwYXJlbiddID0gMHgyNEE1O1xuICAgICAgICAgICAgICAgICAgICB0Wydqc3VwZXJpb3InXSA9IDB4MDJCMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnayddID0gMHgwMDZCO1xuICAgICAgICAgICAgICAgICAgICB0WydrYWJhc2hraXJjeXJpbGxpYyddID0gMHgwNEExO1xuICAgICAgICAgICAgICAgICAgICB0WydrYWJlbmdhbGknXSA9IDB4MDk5NTtcbiAgICAgICAgICAgICAgICAgICAgdFsna2FjdXRlJ10gPSAweDFFMzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2thY3lyaWxsaWMnXSA9IDB4MDQzQTtcbiAgICAgICAgICAgICAgICAgICAgdFsna2FkZXNjZW5kZXJjeXJpbGxpYyddID0gMHgwNDlCO1xuICAgICAgICAgICAgICAgICAgICB0WydrYWRldmEnXSA9IDB4MDkxNTtcbiAgICAgICAgICAgICAgICAgICAgdFsna2FmJ10gPSAweDA1REI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2thZmFyYWJpYyddID0gMHgwNjQzO1xuICAgICAgICAgICAgICAgICAgICB0WydrYWZkYWdlc2gnXSA9IDB4RkIzQjtcbiAgICAgICAgICAgICAgICAgICAgdFsna2FmZGFnZXNoaGVicmV3J10gPSAweEZCM0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2thZmZpbmFsYXJhYmljJ10gPSAweEZFREE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2thZmhlYnJldyddID0gMHgwNURCO1xuICAgICAgICAgICAgICAgICAgICB0WydrYWZpbml0aWFsYXJhYmljJ10gPSAweEZFREI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2thZm1lZGlhbGFyYWJpYyddID0gMHhGRURDO1xuICAgICAgICAgICAgICAgICAgICB0WydrYWZyYWZlaGVicmV3J10gPSAweEZCNEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2thZ3VqYXJhdGknXSA9IDB4MEE5NTtcbiAgICAgICAgICAgICAgICAgICAgdFsna2FndXJtdWtoaSddID0gMHgwQTE1O1xuICAgICAgICAgICAgICAgICAgICB0WydrYWhpcmFnYW5hJ10gPSAweDMwNEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2thaG9va2N5cmlsbGljJ10gPSAweDA0QzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tha2F0YWthbmEnXSA9IDB4MzBBQjtcbiAgICAgICAgICAgICAgICAgICAgdFsna2FrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjc2O1xuICAgICAgICAgICAgICAgICAgICB0WydrYXBwYSddID0gMHgwM0JBO1xuICAgICAgICAgICAgICAgICAgICB0WydrYXBwYXN5bWJvbGdyZWVrJ10gPSAweDAzRjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2thcHllb3VubWlldW1rb3JlYW4nXSA9IDB4MzE3MTtcbiAgICAgICAgICAgICAgICAgICAgdFsna2FweWVvdW5waGlldXBoa29yZWFuJ10gPSAweDMxODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2thcHllb3VucGlldXBrb3JlYW4nXSA9IDB4MzE3ODtcbiAgICAgICAgICAgICAgICAgICAgdFsna2FweWVvdW5zc2FuZ3BpZXVwa29yZWFuJ10gPSAweDMxNzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2thcm9yaWlzcXVhcmUnXSA9IDB4MzMwRDtcbiAgICAgICAgICAgICAgICAgICAgdFsna2FzaGlkYWF1dG9hcmFiaWMnXSA9IDB4MDY0MDtcbiAgICAgICAgICAgICAgICAgICAgdFsna2FzaGlkYWF1dG9ub3NpZGViZWFyaW5nYXJhYmljJ10gPSAweDA2NDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2thc21hbGxrYXRha2FuYSddID0gMHgzMEY1O1xuICAgICAgICAgICAgICAgICAgICB0WydrYXNxdWFyZSddID0gMHgzMzg0O1xuICAgICAgICAgICAgICAgICAgICB0WydrYXNyYWFyYWJpYyddID0gMHgwNjUwO1xuICAgICAgICAgICAgICAgICAgICB0WydrYXNyYXRhbmFyYWJpYyddID0gMHgwNjREO1xuICAgICAgICAgICAgICAgICAgICB0WydrYXN0cm9rZWN5cmlsbGljJ10gPSAweDA0OUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2thdGFoaXJhcHJvbG9uZ21hcmtoYWxmd2lkdGgnXSA9IDB4RkY3MDtcbiAgICAgICAgICAgICAgICAgICAgdFsna2F2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljJ10gPSAweDA0OUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tib3BvbW9mbyddID0gMHgzMTBFO1xuICAgICAgICAgICAgICAgICAgICB0WydrY2Fsc3F1YXJlJ10gPSAweDMzODk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tjYXJvbiddID0gMHgwMUU5O1xuICAgICAgICAgICAgICAgICAgICB0WydrY2VkaWxsYSddID0gMHgwMTM3O1xuICAgICAgICAgICAgICAgICAgICB0WydrY2lyY2xlJ10gPSAweDI0REE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tjb21tYWFjY2VudCddID0gMHgwMTM3O1xuICAgICAgICAgICAgICAgICAgICB0WydrZG90YmVsb3cnXSA9IDB4MUUzMztcbiAgICAgICAgICAgICAgICAgICAgdFsna2VoYXJtZW5pYW4nXSA9IDB4MDU4NDtcbiAgICAgICAgICAgICAgICAgICAgdFsna2VoaXJhZ2FuYSddID0gMHgzMDUxO1xuICAgICAgICAgICAgICAgICAgICB0WydrZWthdGFrYW5hJ10gPSAweDMwQjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tla2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY3OTtcbiAgICAgICAgICAgICAgICAgICAgdFsna2VuYXJtZW5pYW4nXSA9IDB4MDU2RjtcbiAgICAgICAgICAgICAgICAgICAgdFsna2VzbWFsbGthdGFrYW5hJ10gPSAweDMwRjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tncmVlbmxhbmRpYyddID0gMHgwMTM4O1xuICAgICAgICAgICAgICAgICAgICB0WydraGFiZW5nYWxpJ10gPSAweDA5OTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2toYWN5cmlsbGljJ10gPSAweDA0NDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2toYWRldmEnXSA9IDB4MDkxNjtcbiAgICAgICAgICAgICAgICAgICAgdFsna2hhZ3VqYXJhdGknXSA9IDB4MEE5NjtcbiAgICAgICAgICAgICAgICAgICAgdFsna2hhZ3VybXVraGknXSA9IDB4MEExNjtcbiAgICAgICAgICAgICAgICAgICAgdFsna2hhaGFyYWJpYyddID0gMHgwNjJFO1xuICAgICAgICAgICAgICAgICAgICB0WydraGFoZmluYWxhcmFiaWMnXSA9IDB4RkVBNjtcbiAgICAgICAgICAgICAgICAgICAgdFsna2hhaGluaXRpYWxhcmFiaWMnXSA9IDB4RkVBNztcbiAgICAgICAgICAgICAgICAgICAgdFsna2hhaG1lZGlhbGFyYWJpYyddID0gMHhGRUE4O1xuICAgICAgICAgICAgICAgICAgICB0WydraGVpY29wdGljJ10gPSAweDAzRTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2toaGFkZXZhJ10gPSAweDA5NTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2toaGFndXJtdWtoaSddID0gMHgwQTU5O1xuICAgICAgICAgICAgICAgICAgICB0WydraGlldWtoYWNpcmNsZWtvcmVhbiddID0gMHgzMjc4O1xuICAgICAgICAgICAgICAgICAgICB0WydraGlldWtoYXBhcmVua29yZWFuJ10gPSAweDMyMTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2toaWV1a2hjaXJjbGVrb3JlYW4nXSA9IDB4MzI2QTtcbiAgICAgICAgICAgICAgICAgICAgdFsna2hpZXVraGtvcmVhbiddID0gMHgzMTRCO1xuICAgICAgICAgICAgICAgICAgICB0WydraGlldWtocGFyZW5rb3JlYW4nXSA9IDB4MzIwQTtcbiAgICAgICAgICAgICAgICAgICAgdFsna2hva2hhaXRoYWknXSA9IDB4MEUwMjtcbiAgICAgICAgICAgICAgICAgICAgdFsna2hva2hvbnRoYWknXSA9IDB4MEUwNTtcbiAgICAgICAgICAgICAgICAgICAgdFsna2hva2h1YXR0aGFpJ10gPSAweDBFMDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tob2tod2FpdGhhaSddID0gMHgwRTA0O1xuICAgICAgICAgICAgICAgICAgICB0WydraG9tdXR0aGFpJ10gPSAweDBFNUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tob29rJ10gPSAweDAxOTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tob3Jha2hhbmd0aGFpJ10gPSAweDBFMDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2toenNxdWFyZSddID0gMHgzMzkxO1xuICAgICAgICAgICAgICAgICAgICB0WydraWhpcmFnYW5hJ10gPSAweDMwNEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tpa2F0YWthbmEnXSA9IDB4MzBBRDtcbiAgICAgICAgICAgICAgICAgICAgdFsna2lrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjc3O1xuICAgICAgICAgICAgICAgICAgICB0WydraXJvZ3VyYW11c3F1YXJlJ10gPSAweDMzMTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tpcm9tZWV0b3J1c3F1YXJlJ10gPSAweDMzMTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tpcm9zcXVhcmUnXSA9IDB4MzMxNDtcbiAgICAgICAgICAgICAgICAgICAgdFsna2l5ZW9rYWNpcmNsZWtvcmVhbiddID0gMHgzMjZFO1xuICAgICAgICAgICAgICAgICAgICB0WydraXllb2thcGFyZW5rb3JlYW4nXSA9IDB4MzIwRTtcbiAgICAgICAgICAgICAgICAgICAgdFsna2l5ZW9rY2lyY2xla29yZWFuJ10gPSAweDMyNjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tpeWVva2tvcmVhbiddID0gMHgzMTMxO1xuICAgICAgICAgICAgICAgICAgICB0WydraXllb2twYXJlbmtvcmVhbiddID0gMHgzMjAwO1xuICAgICAgICAgICAgICAgICAgICB0WydraXllb2tzaW9za29yZWFuJ10gPSAweDMxMzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tqZWN5cmlsbGljJ10gPSAweDA0NUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tsaW5lYmVsb3cnXSA9IDB4MUUzNTtcbiAgICAgICAgICAgICAgICAgICAgdFsna2xzcXVhcmUnXSA9IDB4MzM5ODtcbiAgICAgICAgICAgICAgICAgICAgdFsna21jdWJlZHNxdWFyZSddID0gMHgzM0E2O1xuICAgICAgICAgICAgICAgICAgICB0WydrbW9ub3NwYWNlJ10gPSAweEZGNEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ttc3F1YXJlZHNxdWFyZSddID0gMHgzM0EyO1xuICAgICAgICAgICAgICAgICAgICB0Wydrb2hpcmFnYW5hJ10gPSAweDMwNTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tvaG1zcXVhcmUnXSA9IDB4MzNDMDtcbiAgICAgICAgICAgICAgICAgICAgdFsna29rYWl0aGFpJ10gPSAweDBFMDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tva2F0YWthbmEnXSA9IDB4MzBCMztcbiAgICAgICAgICAgICAgICAgICAgdFsna29rYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjdBO1xuICAgICAgICAgICAgICAgICAgICB0Wydrb29wb3NxdWFyZSddID0gMHgzMzFFO1xuICAgICAgICAgICAgICAgICAgICB0Wydrb3BwYWN5cmlsbGljJ10gPSAweDA0ODE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tvcmVhbnN0YW5kYXJkc3ltYm9sJ10gPSAweDMyN0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tvcm9uaXNjbWInXSA9IDB4MDM0MztcbiAgICAgICAgICAgICAgICAgICAgdFsna3BhcmVuJ10gPSAweDI0QTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2twYXNxdWFyZSddID0gMHgzM0FBO1xuICAgICAgICAgICAgICAgICAgICB0Wydrc2ljeXJpbGxpYyddID0gMHgwNDZGO1xuICAgICAgICAgICAgICAgICAgICB0WydrdHNxdWFyZSddID0gMHgzM0NGO1xuICAgICAgICAgICAgICAgICAgICB0WydrdHVybmVkJ10gPSAweDAyOUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2t1aGlyYWdhbmEnXSA9IDB4MzA0RjtcbiAgICAgICAgICAgICAgICAgICAgdFsna3VrYXRha2FuYSddID0gMHgzMEFGO1xuICAgICAgICAgICAgICAgICAgICB0WydrdWthdGFrYW5haGFsZndpZHRoJ10gPSAweEZGNzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2t2c3F1YXJlJ10gPSAweDMzQjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2t3c3F1YXJlJ10gPSAweDMzQkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2wnXSA9IDB4MDA2QztcbiAgICAgICAgICAgICAgICAgICAgdFsnbGFiZW5nYWxpJ10gPSAweDA5QjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xhY3V0ZSddID0gMHgwMTNBO1xuICAgICAgICAgICAgICAgICAgICB0WydsYWRldmEnXSA9IDB4MDkzMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGFndWphcmF0aSddID0gMHgwQUIyO1xuICAgICAgICAgICAgICAgICAgICB0WydsYWd1cm11a2hpJ10gPSAweDBBMzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xha2toYW5neWFvdGhhaSddID0gMHgwRTQ1O1xuICAgICAgICAgICAgICAgICAgICB0WydsYW1hbGVmZmluYWxhcmFiaWMnXSA9IDB4RkVGQztcbiAgICAgICAgICAgICAgICAgICAgdFsnbGFtYWxlZmhhbXphYWJvdmVmaW5hbGFyYWJpYyddID0gMHhGRUY4O1xuICAgICAgICAgICAgICAgICAgICB0WydsYW1hbGVmaGFtemFhYm92ZWlzb2xhdGVkYXJhYmljJ10gPSAweEZFRjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xhbWFsZWZoYW16YWJlbG93ZmluYWxhcmFiaWMnXSA9IDB4RkVGQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGFtYWxlZmhhbXphYmVsb3dpc29sYXRlZGFyYWJpYyddID0gMHhGRUY5O1xuICAgICAgICAgICAgICAgICAgICB0WydsYW1hbGVmaXNvbGF0ZWRhcmFiaWMnXSA9IDB4RkVGQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGFtYWxlZm1hZGRhYWJvdmVmaW5hbGFyYWJpYyddID0gMHhGRUY2O1xuICAgICAgICAgICAgICAgICAgICB0WydsYW1hbGVmbWFkZGFhYm92ZWlzb2xhdGVkYXJhYmljJ10gPSAweEZFRjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xhbWFyYWJpYyddID0gMHgwNjQ0O1xuICAgICAgICAgICAgICAgICAgICB0WydsYW1iZGEnXSA9IDB4MDNCQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGFtYmRhc3Ryb2tlJ10gPSAweDAxOUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xhbWVkJ10gPSAweDA1REM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xhbWVkZGFnZXNoJ10gPSAweEZCM0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xhbWVkZGFnZXNoaGVicmV3J10gPSAweEZCM0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xhbWVkaGVicmV3J10gPSAweDA1REM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xhbWZpbmFsYXJhYmljJ10gPSAweEZFREU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xhbWhhaGluaXRpYWxhcmFiaWMnXSA9IDB4RkNDQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGFtaW5pdGlhbGFyYWJpYyddID0gMHhGRURGO1xuICAgICAgICAgICAgICAgICAgICB0WydsYW1qZWVtaW5pdGlhbGFyYWJpYyddID0gMHhGQ0M5O1xuICAgICAgICAgICAgICAgICAgICB0WydsYW1raGFoaW5pdGlhbGFyYWJpYyddID0gMHhGQ0NCO1xuICAgICAgICAgICAgICAgICAgICB0WydsYW1sYW1oZWhpc29sYXRlZGFyYWJpYyddID0gMHhGREYyO1xuICAgICAgICAgICAgICAgICAgICB0WydsYW1tZWRpYWxhcmFiaWMnXSA9IDB4RkVFMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGFtbWVlbWhhaGluaXRpYWxhcmFiaWMnXSA9IDB4RkQ4ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGFtbWVlbWluaXRpYWxhcmFiaWMnXSA9IDB4RkNDQztcbiAgICAgICAgICAgICAgICAgICAgdFsnbGFyZ2VjaXJjbGUnXSA9IDB4MjVFRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGJhciddID0gMHgwMTlBO1xuICAgICAgICAgICAgICAgICAgICB0WydsYmVsdCddID0gMHgwMjZDO1xuICAgICAgICAgICAgICAgICAgICB0WydsYm9wb21vZm8nXSA9IDB4MzEwQztcbiAgICAgICAgICAgICAgICAgICAgdFsnbGNhcm9uJ10gPSAweDAxM0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xjZWRpbGxhJ10gPSAweDAxM0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xjaXJjbGUnXSA9IDB4MjREQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGNpcmN1bWZsZXhiZWxvdyddID0gMHgxRTNEO1xuICAgICAgICAgICAgICAgICAgICB0WydsY29tbWFhY2NlbnQnXSA9IDB4MDEzQztcbiAgICAgICAgICAgICAgICAgICAgdFsnbGRvdCddID0gMHgwMTQwO1xuICAgICAgICAgICAgICAgICAgICB0WydsZG90YWNjZW50J10gPSAweDAxNDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xkb3RiZWxvdyddID0gMHgxRTM3O1xuICAgICAgICAgICAgICAgICAgICB0WydsZG90YmVsb3dtYWNyb24nXSA9IDB4MUUzOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGVmdGFuZ2xlYWJvdmVjbWInXSA9IDB4MDMxQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGVmdHRhY2tiZWxvd2NtYiddID0gMHgwMzE4O1xuICAgICAgICAgICAgICAgICAgICB0WydsZXNzJ10gPSAweDAwM0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xlc3NlcXVhbCddID0gMHgyMjY0O1xuICAgICAgICAgICAgICAgICAgICB0WydsZXNzZXF1YWxvcmdyZWF0ZXInXSA9IDB4MjJEQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGVzc21vbm9zcGFjZSddID0gMHhGRjFDO1xuICAgICAgICAgICAgICAgICAgICB0WydsZXNzb3JlcXVpdmFsZW50J10gPSAweDIyNzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xlc3NvcmdyZWF0ZXInXSA9IDB4MjI3NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGVzc292ZXJlcXVhbCddID0gMHgyMjY2O1xuICAgICAgICAgICAgICAgICAgICB0WydsZXNzc21hbGwnXSA9IDB4RkU2NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGV6aCddID0gMHgwMjZFO1xuICAgICAgICAgICAgICAgICAgICB0WydsZmJsb2NrJ10gPSAweDI1OEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xob29rcmV0cm9mbGV4J10gPSAweDAyNkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xpcmEnXSA9IDB4MjBBNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGl3bmFybWVuaWFuJ10gPSAweDA1NkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xqJ10gPSAweDAxQzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xqZWN5cmlsbGljJ10gPSAweDA0NTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xsJ10gPSAweEY2QzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xsYWRldmEnXSA9IDB4MDkzMztcbiAgICAgICAgICAgICAgICAgICAgdFsnbGxhZ3VqYXJhdGknXSA9IDB4MEFCMztcbiAgICAgICAgICAgICAgICAgICAgdFsnbGxpbmViZWxvdyddID0gMHgxRTNCO1xuICAgICAgICAgICAgICAgICAgICB0WydsbGxhZGV2YSddID0gMHgwOTM0O1xuICAgICAgICAgICAgICAgICAgICB0WydsbHZvY2FsaWNiZW5nYWxpJ10gPSAweDA5RTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xsdm9jYWxpY2RldmEnXSA9IDB4MDk2MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGx2b2NhbGljdm93ZWxzaWduYmVuZ2FsaSddID0gMHgwOUUzO1xuICAgICAgICAgICAgICAgICAgICB0WydsbHZvY2FsaWN2b3dlbHNpZ25kZXZhJ10gPSAweDA5NjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xtaWRkbGV0aWxkZSddID0gMHgwMjZCO1xuICAgICAgICAgICAgICAgICAgICB0WydsbW9ub3NwYWNlJ10gPSAweEZGNEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xtc3F1YXJlJ10gPSAweDMzRDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xvY2h1bGF0aGFpJ10gPSAweDBFMkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xvZ2ljYWxhbmQnXSA9IDB4MjIyNztcbiAgICAgICAgICAgICAgICAgICAgdFsnbG9naWNhbG5vdCddID0gMHgwMEFDO1xuICAgICAgICAgICAgICAgICAgICB0Wydsb2dpY2Fsbm90cmV2ZXJzZWQnXSA9IDB4MjMxMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbG9naWNhbG9yJ10gPSAweDIyMjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xvbGluZ3RoYWknXSA9IDB4MEUyNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbG9uZ3MnXSA9IDB4MDE3RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbG93bGluZWNlbnRlcmxpbmUnXSA9IDB4RkU0RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbG93bGluZWNtYiddID0gMHgwMzMyO1xuICAgICAgICAgICAgICAgICAgICB0Wydsb3dsaW5lZGFzaGVkJ10gPSAweEZFNEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xvemVuZ2UnXSA9IDB4MjVDQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbHBhcmVuJ10gPSAweDI0QTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xzbGFzaCddID0gMHgwMTQyO1xuICAgICAgICAgICAgICAgICAgICB0Wydsc3F1YXJlJ10gPSAweDIxMTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xzdXBlcmlvciddID0gMHhGNkVFO1xuICAgICAgICAgICAgICAgICAgICB0WydsdHNoYWRlJ10gPSAweDI1OTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2x1dGhhaSddID0gMHgwRTI2O1xuICAgICAgICAgICAgICAgICAgICB0Wydsdm9jYWxpY2JlbmdhbGknXSA9IDB4MDk4QztcbiAgICAgICAgICAgICAgICAgICAgdFsnbHZvY2FsaWNkZXZhJ10gPSAweDA5MEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2x2b2NhbGljdm93ZWxzaWduYmVuZ2FsaSddID0gMHgwOUUyO1xuICAgICAgICAgICAgICAgICAgICB0Wydsdm9jYWxpY3Zvd2Vsc2lnbmRldmEnXSA9IDB4MDk2MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbHhzcXVhcmUnXSA9IDB4MzNEMztcbiAgICAgICAgICAgICAgICAgICAgdFsnbSddID0gMHgwMDZEO1xuICAgICAgICAgICAgICAgICAgICB0WydtYWJlbmdhbGknXSA9IDB4MDlBRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWFjcm9uJ10gPSAweDAwQUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21hY3JvbmJlbG93Y21iJ10gPSAweDAzMzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21hY3JvbmNtYiddID0gMHgwMzA0O1xuICAgICAgICAgICAgICAgICAgICB0WydtYWNyb25sb3dtb2QnXSA9IDB4MDJDRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWFjcm9ubW9ub3NwYWNlJ10gPSAweEZGRTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21hY3V0ZSddID0gMHgxRTNGO1xuICAgICAgICAgICAgICAgICAgICB0WydtYWRldmEnXSA9IDB4MDkyRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWFndWphcmF0aSddID0gMHgwQUFFO1xuICAgICAgICAgICAgICAgICAgICB0WydtYWd1cm11a2hpJ10gPSAweDBBMkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21haGFwYWtoaGVicmV3J10gPSAweDA1QTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21haGFwYWtobGVmdGhlYnJldyddID0gMHgwNUE0O1xuICAgICAgICAgICAgICAgICAgICB0WydtYWhpcmFnYW5hJ10gPSAweDMwN0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21haWNoYXR0YXdhbG93bGVmdHRoYWknXSA9IDB4Rjg5NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWFpY2hhdHRhd2Fsb3dyaWdodHRoYWknXSA9IDB4Rjg5NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWFpY2hhdHRhd2F0aGFpJ10gPSAweDBFNEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21haWNoYXR0YXdhdXBwZXJsZWZ0dGhhaSddID0gMHhGODkzO1xuICAgICAgICAgICAgICAgICAgICB0WydtYWlla2xvd2xlZnR0aGFpJ10gPSAweEY4OEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21haWVrbG93cmlnaHR0aGFpJ10gPSAweEY4OEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21haWVrdGhhaSddID0gMHgwRTQ4O1xuICAgICAgICAgICAgICAgICAgICB0WydtYWlla3VwcGVybGVmdHRoYWknXSA9IDB4Rjg4QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWFpaGFuYWthdGxlZnR0aGFpJ10gPSAweEY4ODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21haWhhbmFrYXR0aGFpJ10gPSAweDBFMzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21haXRhaWtodWxlZnR0aGFpJ10gPSAweEY4ODk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21haXRhaWtodXRoYWknXSA9IDB4MEU0NztcbiAgICAgICAgICAgICAgICAgICAgdFsnbWFpdGhvbG93bGVmdHRoYWknXSA9IDB4Rjg4RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWFpdGhvbG93cmlnaHR0aGFpJ10gPSAweEY4OEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21haXRob3RoYWknXSA9IDB4MEU0OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWFpdGhvdXBwZXJsZWZ0dGhhaSddID0gMHhGODhEO1xuICAgICAgICAgICAgICAgICAgICB0WydtYWl0cmlsb3dsZWZ0dGhhaSddID0gMHhGODkyO1xuICAgICAgICAgICAgICAgICAgICB0WydtYWl0cmlsb3dyaWdodHRoYWknXSA9IDB4Rjg5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWFpdHJpdGhhaSddID0gMHgwRTRBO1xuICAgICAgICAgICAgICAgICAgICB0WydtYWl0cml1cHBlcmxlZnR0aGFpJ10gPSAweEY4OTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21haXlhbW9rdGhhaSddID0gMHgwRTQ2O1xuICAgICAgICAgICAgICAgICAgICB0WydtYWthdGFrYW5hJ10gPSAweDMwREU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21ha2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY4RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWFsZSddID0gMHgyNjQyO1xuICAgICAgICAgICAgICAgICAgICB0WydtYW5zeW9uc3F1YXJlJ10gPSAweDMzNDc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21hcWFmaGVicmV3J10gPSAweDA1QkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21hcnMnXSA9IDB4MjY0MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWFzb3JhY2lyY2xlaGVicmV3J10gPSAweDA1QUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21hc3F1YXJlJ10gPSAweDMzODM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21ib3BvbW9mbyddID0gMHgzMTA3O1xuICAgICAgICAgICAgICAgICAgICB0WydtYnNxdWFyZSddID0gMHgzM0Q0O1xuICAgICAgICAgICAgICAgICAgICB0WydtY2lyY2xlJ10gPSAweDI0REM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21jdWJlZHNxdWFyZSddID0gMHgzM0E1O1xuICAgICAgICAgICAgICAgICAgICB0WydtZG90YWNjZW50J10gPSAweDFFNDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21kb3RiZWxvdyddID0gMHgxRTQzO1xuICAgICAgICAgICAgICAgICAgICB0WydtZWVtYXJhYmljJ10gPSAweDA2NDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21lZW1maW5hbGFyYWJpYyddID0gMHhGRUUyO1xuICAgICAgICAgICAgICAgICAgICB0WydtZWVtaW5pdGlhbGFyYWJpYyddID0gMHhGRUUzO1xuICAgICAgICAgICAgICAgICAgICB0WydtZWVtbWVkaWFsYXJhYmljJ10gPSAweEZFRTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21lZW1tZWVtaW5pdGlhbGFyYWJpYyddID0gMHhGQ0QxO1xuICAgICAgICAgICAgICAgICAgICB0WydtZWVtbWVlbWlzb2xhdGVkYXJhYmljJ10gPSAweEZDNDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21lZXRvcnVzcXVhcmUnXSA9IDB4MzM0RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWVoaXJhZ2FuYSddID0gMHgzMDgxO1xuICAgICAgICAgICAgICAgICAgICB0WydtZWl6aWVyYXNxdWFyZSddID0gMHgzMzdFO1xuICAgICAgICAgICAgICAgICAgICB0WydtZWthdGFrYW5hJ10gPSAweDMwRTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21la2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY5MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWVtJ10gPSAweDA1REU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21lbWRhZ2VzaCddID0gMHhGQjNFO1xuICAgICAgICAgICAgICAgICAgICB0WydtZW1kYWdlc2hoZWJyZXcnXSA9IDB4RkIzRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWVtaGVicmV3J10gPSAweDA1REU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21lbmFybWVuaWFuJ10gPSAweDA1NzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21lcmtoYWhlYnJldyddID0gMHgwNUE1O1xuICAgICAgICAgICAgICAgICAgICB0WydtZXJraGFrZWZ1bGFoZWJyZXcnXSA9IDB4MDVBNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWVya2hha2VmdWxhbGVmdGhlYnJldyddID0gMHgwNUE2O1xuICAgICAgICAgICAgICAgICAgICB0WydtZXJraGFsZWZ0aGVicmV3J10gPSAweDA1QTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21ob29rJ10gPSAweDAyNzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21oenNxdWFyZSddID0gMHgzMzkyO1xuICAgICAgICAgICAgICAgICAgICB0WydtaWRkbGVkb3RrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjY1O1xuICAgICAgICAgICAgICAgICAgICB0WydtaWRkb3QnXSA9IDB4MDBCNztcbiAgICAgICAgICAgICAgICAgICAgdFsnbWlldW1hY2lyY2xla29yZWFuJ10gPSAweDMyNzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21pZXVtYXBhcmVua29yZWFuJ10gPSAweDMyMTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21pZXVtY2lyY2xla29yZWFuJ10gPSAweDMyNjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21pZXVta29yZWFuJ10gPSAweDMxNDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21pZXVtcGFuc2lvc2tvcmVhbiddID0gMHgzMTcwO1xuICAgICAgICAgICAgICAgICAgICB0WydtaWV1bXBhcmVua29yZWFuJ10gPSAweDMyMDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21pZXVtcGlldXBrb3JlYW4nXSA9IDB4MzE2RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWlldW1zaW9za29yZWFuJ10gPSAweDMxNkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21paGlyYWdhbmEnXSA9IDB4MzA3RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWlrYXRha2FuYSddID0gMHgzMERGO1xuICAgICAgICAgICAgICAgICAgICB0WydtaWthdGFrYW5haGFsZndpZHRoJ10gPSAweEZGOTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21pbnVzJ10gPSAweDIyMTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21pbnVzYmVsb3djbWInXSA9IDB4MDMyMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWludXNjaXJjbGUnXSA9IDB4MjI5NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWludXNtb2QnXSA9IDB4MDJENztcbiAgICAgICAgICAgICAgICAgICAgdFsnbWludXNwbHVzJ10gPSAweDIyMTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21pbnV0ZSddID0gMHgyMDMyO1xuICAgICAgICAgICAgICAgICAgICB0WydtaXJpYmFhcnVzcXVhcmUnXSA9IDB4MzM0QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWlyaXNxdWFyZSddID0gMHgzMzQ5O1xuICAgICAgICAgICAgICAgICAgICB0WydtbG9uZ2xlZ3R1cm5lZCddID0gMHgwMjcwO1xuICAgICAgICAgICAgICAgICAgICB0WydtbHNxdWFyZSddID0gMHgzMzk2O1xuICAgICAgICAgICAgICAgICAgICB0WydtbWN1YmVkc3F1YXJlJ10gPSAweDMzQTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21tb25vc3BhY2UnXSA9IDB4RkY0RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbW1zcXVhcmVkc3F1YXJlJ10gPSAweDMzOUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21vaGlyYWdhbmEnXSA9IDB4MzA4MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbW9obXNxdWFyZSddID0gMHgzM0MxO1xuICAgICAgICAgICAgICAgICAgICB0Wydtb2thdGFrYW5hJ10gPSAweDMwRTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21va2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY5MztcbiAgICAgICAgICAgICAgICAgICAgdFsnbW9sc3F1YXJlJ10gPSAweDMzRDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21vbWF0aGFpJ10gPSAweDBFMjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21vdmVyc3NxdWFyZSddID0gMHgzM0E3O1xuICAgICAgICAgICAgICAgICAgICB0Wydtb3ZlcnNzcXVhcmVkc3F1YXJlJ10gPSAweDMzQTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21wYXJlbiddID0gMHgyNEE4O1xuICAgICAgICAgICAgICAgICAgICB0WydtcGFzcXVhcmUnXSA9IDB4MzNBQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbXNzcXVhcmUnXSA9IDB4MzNCMztcbiAgICAgICAgICAgICAgICAgICAgdFsnbXN1cGVyaW9yJ10gPSAweEY2RUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ210dXJuZWQnXSA9IDB4MDI2RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbXUnXSA9IDB4MDBCNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbXUxJ10gPSAweDAwQjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ211YXNxdWFyZSddID0gMHgzMzgyO1xuICAgICAgICAgICAgICAgICAgICB0WydtdWNoZ3JlYXRlciddID0gMHgyMjZCO1xuICAgICAgICAgICAgICAgICAgICB0WydtdWNobGVzcyddID0gMHgyMjZBO1xuICAgICAgICAgICAgICAgICAgICB0WydtdWZzcXVhcmUnXSA9IDB4MzM4QztcbiAgICAgICAgICAgICAgICAgICAgdFsnbXVncmVlayddID0gMHgwM0JDO1xuICAgICAgICAgICAgICAgICAgICB0WydtdWdzcXVhcmUnXSA9IDB4MzM4RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbXVoaXJhZ2FuYSddID0gMHgzMDgwO1xuICAgICAgICAgICAgICAgICAgICB0WydtdWthdGFrYW5hJ10gPSAweDMwRTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ211a2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbXVsc3F1YXJlJ10gPSAweDMzOTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ211bHRpcGx5J10gPSAweDAwRDc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ211bXNxdWFyZSddID0gMHgzMzlCO1xuICAgICAgICAgICAgICAgICAgICB0WydtdW5haGhlYnJldyddID0gMHgwNUEzO1xuICAgICAgICAgICAgICAgICAgICB0WydtdW5haGxlZnRoZWJyZXcnXSA9IDB4MDVBMztcbiAgICAgICAgICAgICAgICAgICAgdFsnbXVzaWNhbG5vdGUnXSA9IDB4MjY2QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbXVzaWNhbG5vdGVkYmwnXSA9IDB4MjY2QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbXVzaWNmbGF0c2lnbiddID0gMHgyNjZEO1xuICAgICAgICAgICAgICAgICAgICB0WydtdXNpY3NoYXJwc2lnbiddID0gMHgyNjZGO1xuICAgICAgICAgICAgICAgICAgICB0WydtdXNzcXVhcmUnXSA9IDB4MzNCMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbXV2c3F1YXJlJ10gPSAweDMzQjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ211d3NxdWFyZSddID0gMHgzM0JDO1xuICAgICAgICAgICAgICAgICAgICB0Wydtdm1lZ2FzcXVhcmUnXSA9IDB4MzNCOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbXZzcXVhcmUnXSA9IDB4MzNCNztcbiAgICAgICAgICAgICAgICAgICAgdFsnbXdtZWdhc3F1YXJlJ10gPSAweDMzQkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ213c3F1YXJlJ10gPSAweDMzQkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ24nXSA9IDB4MDA2RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmFiZW5nYWxpJ10gPSAweDA5QTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25hYmxhJ10gPSAweDIyMDc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25hY3V0ZSddID0gMHgwMTQ0O1xuICAgICAgICAgICAgICAgICAgICB0WyduYWRldmEnXSA9IDB4MDkyODtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmFndWphcmF0aSddID0gMHgwQUE4O1xuICAgICAgICAgICAgICAgICAgICB0WyduYWd1cm11a2hpJ10gPSAweDBBMjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25haGlyYWdhbmEnXSA9IDB4MzA2QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmFrYXRha2FuYSddID0gMHgzMENBO1xuICAgICAgICAgICAgICAgICAgICB0WyduYWthdGFrYW5haGFsZndpZHRoJ10gPSAweEZGODU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25hcG9zdHJvcGhlJ10gPSAweDAxNDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25hc3F1YXJlJ10gPSAweDMzODE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25ib3BvbW9mbyddID0gMHgzMTBCO1xuICAgICAgICAgICAgICAgICAgICB0WyduYnNwYWNlJ10gPSAweDAwQTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25jYXJvbiddID0gMHgwMTQ4O1xuICAgICAgICAgICAgICAgICAgICB0WyduY2VkaWxsYSddID0gMHgwMTQ2O1xuICAgICAgICAgICAgICAgICAgICB0WyduY2lyY2xlJ10gPSAweDI0REQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25jaXJjdW1mbGV4YmVsb3cnXSA9IDB4MUU0QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmNvbW1hYWNjZW50J10gPSAweDAxNDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25kb3RhY2NlbnQnXSA9IDB4MUU0NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmRvdGJlbG93J10gPSAweDFFNDc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25laGlyYWdhbmEnXSA9IDB4MzA2RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmVrYXRha2FuYSddID0gMHgzMENEO1xuICAgICAgICAgICAgICAgICAgICB0WyduZWthdGFrYW5haGFsZndpZHRoJ10gPSAweEZGODg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25ld3NoZXFlbHNpZ24nXSA9IDB4MjBBQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmZzcXVhcmUnXSA9IDB4MzM4QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmdhYmVuZ2FsaSddID0gMHgwOTk5O1xuICAgICAgICAgICAgICAgICAgICB0WyduZ2FkZXZhJ10gPSAweDA5MTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25nYWd1amFyYXRpJ10gPSAweDBBOTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25nYWd1cm11a2hpJ10gPSAweDBBMTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25nb25ndXRoYWknXSA9IDB4MEUwNztcbiAgICAgICAgICAgICAgICAgICAgdFsnbmhpcmFnYW5hJ10gPSAweDMwOTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25ob29rbGVmdCddID0gMHgwMjcyO1xuICAgICAgICAgICAgICAgICAgICB0WyduaG9va3JldHJvZmxleCddID0gMHgwMjczO1xuICAgICAgICAgICAgICAgICAgICB0WyduaWV1bmFjaXJjbGVrb3JlYW4nXSA9IDB4MzI2RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmlldW5hcGFyZW5rb3JlYW4nXSA9IDB4MzIwRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmlldW5jaWV1Y2tvcmVhbiddID0gMHgzMTM1O1xuICAgICAgICAgICAgICAgICAgICB0WyduaWV1bmNpcmNsZWtvcmVhbiddID0gMHgzMjYxO1xuICAgICAgICAgICAgICAgICAgICB0WyduaWV1bmhpZXVoa29yZWFuJ10gPSAweDMxMzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25pZXVua29yZWFuJ10gPSAweDMxMzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25pZXVucGFuc2lvc2tvcmVhbiddID0gMHgzMTY4O1xuICAgICAgICAgICAgICAgICAgICB0WyduaWV1bnBhcmVua29yZWFuJ10gPSAweDMyMDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25pZXVuc2lvc2tvcmVhbiddID0gMHgzMTY3O1xuICAgICAgICAgICAgICAgICAgICB0WyduaWV1bnRpa2V1dGtvcmVhbiddID0gMHgzMTY2O1xuICAgICAgICAgICAgICAgICAgICB0WyduaWhpcmFnYW5hJ10gPSAweDMwNkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25pa2F0YWthbmEnXSA9IDB4MzBDQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmlrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjg2O1xuICAgICAgICAgICAgICAgICAgICB0WyduaWtoYWhpdGxlZnR0aGFpJ10gPSAweEY4OTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25pa2hhaGl0dGhhaSddID0gMHgwRTREO1xuICAgICAgICAgICAgICAgICAgICB0WyduaW5lJ10gPSAweDAwMzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25pbmVhcmFiaWMnXSA9IDB4MDY2OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmluZWJlbmdhbGknXSA9IDB4MDlFRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmluZWNpcmNsZSddID0gMHgyNDY4O1xuICAgICAgICAgICAgICAgICAgICB0WyduaW5lY2lyY2xlaW52ZXJzZXNhbnNzZXJpZiddID0gMHgyNzkyO1xuICAgICAgICAgICAgICAgICAgICB0WyduaW5lZGV2YSddID0gMHgwOTZGO1xuICAgICAgICAgICAgICAgICAgICB0WyduaW5lZ3VqYXJhdGknXSA9IDB4MEFFRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmluZWd1cm11a2hpJ10gPSAweDBBNkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25pbmVoYWNrYXJhYmljJ10gPSAweDA2Njk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25pbmVoYW5nemhvdSddID0gMHgzMDI5O1xuICAgICAgICAgICAgICAgICAgICB0WyduaW5laWRlb2dyYXBoaWNwYXJlbiddID0gMHgzMjI4O1xuICAgICAgICAgICAgICAgICAgICB0WyduaW5laW5mZXJpb3InXSA9IDB4MjA4OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmluZW1vbm9zcGFjZSddID0gMHhGRjE5O1xuICAgICAgICAgICAgICAgICAgICB0WyduaW5lb2xkc3R5bGUnXSA9IDB4RjczOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmluZXBhcmVuJ10gPSAweDI0N0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25pbmVwZXJpb2QnXSA9IDB4MjQ5MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmluZXBlcnNpYW4nXSA9IDB4MDZGOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmluZXJvbWFuJ10gPSAweDIxNzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25pbmVzdXBlcmlvciddID0gMHgyMDc5O1xuICAgICAgICAgICAgICAgICAgICB0WyduaW5ldGVlbmNpcmNsZSddID0gMHgyNDcyO1xuICAgICAgICAgICAgICAgICAgICB0WyduaW5ldGVlbnBhcmVuJ10gPSAweDI0ODY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25pbmV0ZWVucGVyaW9kJ10gPSAweDI0OUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25pbmV0aGFpJ10gPSAweDBFNTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25qJ10gPSAweDAxQ0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25qZWN5cmlsbGljJ10gPSAweDA0NUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25rYXRha2FuYSddID0gMHgzMEYzO1xuICAgICAgICAgICAgICAgICAgICB0Wydua2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY5RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmxlZ3JpZ2h0bG9uZyddID0gMHgwMTlFO1xuICAgICAgICAgICAgICAgICAgICB0WydubGluZWJlbG93J10gPSAweDFFNDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25tb25vc3BhY2UnXSA9IDB4RkY0RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbm1zcXVhcmUnXSA9IDB4MzM5QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbm5hYmVuZ2FsaSddID0gMHgwOUEzO1xuICAgICAgICAgICAgICAgICAgICB0WydubmFkZXZhJ10gPSAweDA5MjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25uYWd1amFyYXRpJ10gPSAweDBBQTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25uYWd1cm11a2hpJ10gPSAweDBBMjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25ubmFkZXZhJ10gPSAweDA5Mjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vaGlyYWdhbmEnXSA9IDB4MzA2RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbm9rYXRha2FuYSddID0gMHgzMENFO1xuICAgICAgICAgICAgICAgICAgICB0Wydub2thdGFrYW5haGFsZndpZHRoJ10gPSAweEZGODk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vbmJyZWFraW5nc3BhY2UnXSA9IDB4MDBBMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbm9uZW50aGFpJ10gPSAweDBFMTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vbnV0aGFpJ10gPSAweDBFMTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vb25hcmFiaWMnXSA9IDB4MDY0NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbm9vbmZpbmFsYXJhYmljJ10gPSAweEZFRTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vb25naHVubmFhcmFiaWMnXSA9IDB4MDZCQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbm9vbmdodW5uYWZpbmFsYXJhYmljJ10gPSAweEZCOUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vb25pbml0aWFsYXJhYmljJ10gPSAweEZFRTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vb25qZWVtaW5pdGlhbGFyYWJpYyddID0gMHhGQ0QyO1xuICAgICAgICAgICAgICAgICAgICB0Wydub29uamVlbWlzb2xhdGVkYXJhYmljJ10gPSAweEZDNEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vb25tZWRpYWxhcmFiaWMnXSA9IDB4RkVFODtcbiAgICAgICAgICAgICAgICAgICAgdFsnbm9vbm1lZW1pbml0aWFsYXJhYmljJ10gPSAweEZDRDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vb25tZWVtaXNvbGF0ZWRhcmFiaWMnXSA9IDB4RkM0RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbm9vbm5vb25maW5hbGFyYWJpYyddID0gMHhGQzhEO1xuICAgICAgICAgICAgICAgICAgICB0Wydub3Rjb250YWlucyddID0gMHgyMjBDO1xuICAgICAgICAgICAgICAgICAgICB0Wydub3RlbGVtZW50J10gPSAweDIyMDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vdGVsZW1lbnRvZiddID0gMHgyMjA5O1xuICAgICAgICAgICAgICAgICAgICB0Wydub3RlcXVhbCddID0gMHgyMjYwO1xuICAgICAgICAgICAgICAgICAgICB0Wydub3RncmVhdGVyJ10gPSAweDIyNkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vdGdyZWF0ZXJub3JlcXVhbCddID0gMHgyMjcxO1xuICAgICAgICAgICAgICAgICAgICB0Wydub3RncmVhdGVybm9ybGVzcyddID0gMHgyMjc5O1xuICAgICAgICAgICAgICAgICAgICB0Wydub3RpZGVudGljYWwnXSA9IDB4MjI2MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbm90bGVzcyddID0gMHgyMjZFO1xuICAgICAgICAgICAgICAgICAgICB0Wydub3RsZXNzbm9yZXF1YWwnXSA9IDB4MjI3MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbm90cGFyYWxsZWwnXSA9IDB4MjIyNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbm90cHJlY2VkZXMnXSA9IDB4MjI4MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbm90c3Vic2V0J10gPSAweDIyODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vdHN1Y2NlZWRzJ10gPSAweDIyODE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vdHN1cGVyc2V0J10gPSAweDIyODU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vd2FybWVuaWFuJ10gPSAweDA1NzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25wYXJlbiddID0gMHgyNEE5O1xuICAgICAgICAgICAgICAgICAgICB0Wyduc3NxdWFyZSddID0gMHgzM0IxO1xuICAgICAgICAgICAgICAgICAgICB0Wyduc3VwZXJpb3InXSA9IDB4MjA3RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbnRpbGRlJ10gPSAweDAwRjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ251J10gPSAweDAzQkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ251aGlyYWdhbmEnXSA9IDB4MzA2QztcbiAgICAgICAgICAgICAgICAgICAgdFsnbnVrYXRha2FuYSddID0gMHgzMENDO1xuICAgICAgICAgICAgICAgICAgICB0WydudWthdGFrYW5haGFsZndpZHRoJ10gPSAweEZGODc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ251a3RhYmVuZ2FsaSddID0gMHgwOUJDO1xuICAgICAgICAgICAgICAgICAgICB0WydudWt0YWRldmEnXSA9IDB4MDkzQztcbiAgICAgICAgICAgICAgICAgICAgdFsnbnVrdGFndWphcmF0aSddID0gMHgwQUJDO1xuICAgICAgICAgICAgICAgICAgICB0WydudWt0YWd1cm11a2hpJ10gPSAweDBBM0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ251bWJlcnNpZ24nXSA9IDB4MDAyMztcbiAgICAgICAgICAgICAgICAgICAgdFsnbnVtYmVyc2lnbm1vbm9zcGFjZSddID0gMHhGRjAzO1xuICAgICAgICAgICAgICAgICAgICB0WydudW1iZXJzaWduc21hbGwnXSA9IDB4RkU1RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbnVtZXJhbHNpZ25ncmVlayddID0gMHgwMzc0O1xuICAgICAgICAgICAgICAgICAgICB0WydudW1lcmFsc2lnbmxvd2VyZ3JlZWsnXSA9IDB4MDM3NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbnVtZXJvJ10gPSAweDIxMTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ251biddID0gMHgwNUUwO1xuICAgICAgICAgICAgICAgICAgICB0WydudW5kYWdlc2gnXSA9IDB4RkI0MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbnVuZGFnZXNoaGVicmV3J10gPSAweEZCNDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ251bmhlYnJldyddID0gMHgwNUUwO1xuICAgICAgICAgICAgICAgICAgICB0WydudnNxdWFyZSddID0gMHgzM0I1O1xuICAgICAgICAgICAgICAgICAgICB0Wydud3NxdWFyZSddID0gMHgzM0JCO1xuICAgICAgICAgICAgICAgICAgICB0WydueWFiZW5nYWxpJ10gPSAweDA5OUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ255YWRldmEnXSA9IDB4MDkxRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbnlhZ3VqYXJhdGknXSA9IDB4MEE5RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbnlhZ3VybXVraGknXSA9IDB4MEExRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbyddID0gMHgwMDZGO1xuICAgICAgICAgICAgICAgICAgICB0WydvYWN1dGUnXSA9IDB4MDBGMztcbiAgICAgICAgICAgICAgICAgICAgdFsnb2FuZ3RoYWknXSA9IDB4MEUyRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnb2JhcnJlZCddID0gMHgwMjc1O1xuICAgICAgICAgICAgICAgICAgICB0WydvYmFycmVkY3lyaWxsaWMnXSA9IDB4MDRFOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb2JhcnJlZGRpZXJlc2lzY3lyaWxsaWMnXSA9IDB4MDRFQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnb2JlbmdhbGknXSA9IDB4MDk5MztcbiAgICAgICAgICAgICAgICAgICAgdFsnb2JvcG9tb2ZvJ10gPSAweDMxMUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29icmV2ZSddID0gMHgwMTRGO1xuICAgICAgICAgICAgICAgICAgICB0WydvY2FuZHJhZGV2YSddID0gMHgwOTExO1xuICAgICAgICAgICAgICAgICAgICB0WydvY2FuZHJhZ3VqYXJhdGknXSA9IDB4MEE5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb2NhbmRyYXZvd2Vsc2lnbmRldmEnXSA9IDB4MDk0OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb2NhbmRyYXZvd2Vsc2lnbmd1amFyYXRpJ10gPSAweDBBQzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29jYXJvbiddID0gMHgwMUQyO1xuICAgICAgICAgICAgICAgICAgICB0WydvY2lyY2xlJ10gPSAweDI0REU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29jaXJjdW1mbGV4J10gPSAweDAwRjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29jaXJjdW1mbGV4YWN1dGUnXSA9IDB4MUVEMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb2NpcmN1bWZsZXhkb3RiZWxvdyddID0gMHgxRUQ5O1xuICAgICAgICAgICAgICAgICAgICB0WydvY2lyY3VtZmxleGdyYXZlJ10gPSAweDFFRDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29jaXJjdW1mbGV4aG9va2Fib3ZlJ10gPSAweDFFRDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29jaXJjdW1mbGV4dGlsZGUnXSA9IDB4MUVENztcbiAgICAgICAgICAgICAgICAgICAgdFsnb2N5cmlsbGljJ10gPSAweDA0M0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29kYmxhY3V0ZSddID0gMHgwMTUxO1xuICAgICAgICAgICAgICAgICAgICB0WydvZGJsZ3JhdmUnXSA9IDB4MDIwRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnb2RldmEnXSA9IDB4MDkxMztcbiAgICAgICAgICAgICAgICAgICAgdFsnb2RpZXJlc2lzJ10gPSAweDAwRjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29kaWVyZXNpc2N5cmlsbGljJ10gPSAweDA0RTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29kb3RiZWxvdyddID0gMHgxRUNEO1xuICAgICAgICAgICAgICAgICAgICB0WydvZSddID0gMHgwMTUzO1xuICAgICAgICAgICAgICAgICAgICB0WydvZWtvcmVhbiddID0gMHgzMTVBO1xuICAgICAgICAgICAgICAgICAgICB0WydvZ29uZWsnXSA9IDB4MDJEQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnb2dvbmVrY21iJ10gPSAweDAzMjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29ncmF2ZSddID0gMHgwMEYyO1xuICAgICAgICAgICAgICAgICAgICB0WydvZ3VqYXJhdGknXSA9IDB4MEE5MztcbiAgICAgICAgICAgICAgICAgICAgdFsnb2hhcm1lbmlhbiddID0gMHgwNTg1O1xuICAgICAgICAgICAgICAgICAgICB0WydvaGlyYWdhbmEnXSA9IDB4MzA0QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb2hvb2thYm92ZSddID0gMHgxRUNGO1xuICAgICAgICAgICAgICAgICAgICB0WydvaG9ybiddID0gMHgwMUExO1xuICAgICAgICAgICAgICAgICAgICB0WydvaG9ybmFjdXRlJ10gPSAweDFFREI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29ob3JuZG90YmVsb3cnXSA9IDB4MUVFMztcbiAgICAgICAgICAgICAgICAgICAgdFsnb2hvcm5ncmF2ZSddID0gMHgxRUREO1xuICAgICAgICAgICAgICAgICAgICB0WydvaG9ybmhvb2thYm92ZSddID0gMHgxRURGO1xuICAgICAgICAgICAgICAgICAgICB0WydvaG9ybnRpbGRlJ10gPSAweDFFRTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29odW5nYXJ1bWxhdXQnXSA9IDB4MDE1MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb2knXSA9IDB4MDFBMztcbiAgICAgICAgICAgICAgICAgICAgdFsnb2ludmVydGVkYnJldmUnXSA9IDB4MDIwRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnb2thdGFrYW5hJ10gPSAweDMwQUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29rYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjc1O1xuICAgICAgICAgICAgICAgICAgICB0Wydva29yZWFuJ10gPSAweDMxNTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29sZWhlYnJldyddID0gMHgwNUFCO1xuICAgICAgICAgICAgICAgICAgICB0WydvbWFjcm9uJ10gPSAweDAxNEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29tYWNyb25hY3V0ZSddID0gMHgxRTUzO1xuICAgICAgICAgICAgICAgICAgICB0WydvbWFjcm9uZ3JhdmUnXSA9IDB4MUU1MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb21kZXZhJ10gPSAweDA5NTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29tZWdhJ10gPSAweDAzQzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29tZWdhMSddID0gMHgwM0Q2O1xuICAgICAgICAgICAgICAgICAgICB0WydvbWVnYWN5cmlsbGljJ10gPSAweDA0NjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29tZWdhbGF0aW5jbG9zZWQnXSA9IDB4MDI3NztcbiAgICAgICAgICAgICAgICAgICAgdFsnb21lZ2Fyb3VuZGN5cmlsbGljJ10gPSAweDA0N0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29tZWdhdGl0bG9jeXJpbGxpYyddID0gMHgwNDdEO1xuICAgICAgICAgICAgICAgICAgICB0WydvbWVnYXRvbm9zJ10gPSAweDAzQ0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29tZ3VqYXJhdGknXSA9IDB4MEFEMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnb21pY3JvbiddID0gMHgwM0JGO1xuICAgICAgICAgICAgICAgICAgICB0WydvbWljcm9udG9ub3MnXSA9IDB4MDNDQztcbiAgICAgICAgICAgICAgICAgICAgdFsnb21vbm9zcGFjZSddID0gMHhGRjRGO1xuICAgICAgICAgICAgICAgICAgICB0WydvbmUnXSA9IDB4MDAzMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb25lYXJhYmljJ10gPSAweDA2NjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29uZWJlbmdhbGknXSA9IDB4MDlFNztcbiAgICAgICAgICAgICAgICAgICAgdFsnb25lY2lyY2xlJ10gPSAweDI0NjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29uZWNpcmNsZWludmVyc2VzYW5zc2VyaWYnXSA9IDB4Mjc4QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb25lZGV2YSddID0gMHgwOTY3O1xuICAgICAgICAgICAgICAgICAgICB0WydvbmVkb3RlbmxlYWRlciddID0gMHgyMDI0O1xuICAgICAgICAgICAgICAgICAgICB0WydvbmVlaWdodGgnXSA9IDB4MjE1QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnb25lZml0dGVkJ10gPSAweEY2REM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29uZWd1amFyYXRpJ10gPSAweDBBRTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29uZWd1cm11a2hpJ10gPSAweDBBNjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29uZWhhY2thcmFiaWMnXSA9IDB4MDY2MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb25laGFsZiddID0gMHgwMEJEO1xuICAgICAgICAgICAgICAgICAgICB0WydvbmVoYW5nemhvdSddID0gMHgzMDIxO1xuICAgICAgICAgICAgICAgICAgICB0WydvbmVpZGVvZ3JhcGhpY3BhcmVuJ10gPSAweDMyMjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29uZWluZmVyaW9yJ10gPSAweDIwODE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29uZW1vbm9zcGFjZSddID0gMHhGRjExO1xuICAgICAgICAgICAgICAgICAgICB0WydvbmVudW1lcmF0b3JiZW5nYWxpJ10gPSAweDA5RjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29uZW9sZHN0eWxlJ10gPSAweEY3MzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29uZXBhcmVuJ10gPSAweDI0NzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29uZXBlcmlvZCddID0gMHgyNDg4O1xuICAgICAgICAgICAgICAgICAgICB0WydvbmVwZXJzaWFuJ10gPSAweDA2RjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29uZXF1YXJ0ZXInXSA9IDB4MDBCQztcbiAgICAgICAgICAgICAgICAgICAgdFsnb25lcm9tYW4nXSA9IDB4MjE3MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnb25lc3VwZXJpb3InXSA9IDB4MDBCOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb25ldGhhaSddID0gMHgwRTUxO1xuICAgICAgICAgICAgICAgICAgICB0WydvbmV0aGlyZCddID0gMHgyMTUzO1xuICAgICAgICAgICAgICAgICAgICB0Wydvb2dvbmVrJ10gPSAweDAxRUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29vZ29uZWttYWNyb24nXSA9IDB4MDFFRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnb29ndXJtdWtoaSddID0gMHgwQTEzO1xuICAgICAgICAgICAgICAgICAgICB0Wydvb21hdHJhZ3VybXVraGknXSA9IDB4MEE0QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnb29wZW4nXSA9IDB4MDI1NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnb3BhcmVuJ10gPSAweDI0QUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29wZW5idWxsZXQnXSA9IDB4MjVFNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnb3B0aW9uJ10gPSAweDIzMjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29yZGZlbWluaW5lJ10gPSAweDAwQUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29yZG1hc2N1bGluZSddID0gMHgwMEJBO1xuICAgICAgICAgICAgICAgICAgICB0WydvcnRob2dvbmFsJ10gPSAweDIyMUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29zaG9ydGRldmEnXSA9IDB4MDkxMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnb3Nob3J0dm93ZWxzaWduZGV2YSddID0gMHgwOTRBO1xuICAgICAgICAgICAgICAgICAgICB0Wydvc2xhc2gnXSA9IDB4MDBGODtcbiAgICAgICAgICAgICAgICAgICAgdFsnb3NsYXNoYWN1dGUnXSA9IDB4MDFGRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnb3NtYWxsaGlyYWdhbmEnXSA9IDB4MzA0OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb3NtYWxsa2F0YWthbmEnXSA9IDB4MzBBOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb3NtYWxsa2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY2QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnb3N0cm9rZWFjdXRlJ10gPSAweDAxRkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29zdXBlcmlvciddID0gMHhGNkYwO1xuICAgICAgICAgICAgICAgICAgICB0WydvdGN5cmlsbGljJ10gPSAweDA0N0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ290aWxkZSddID0gMHgwMEY1O1xuICAgICAgICAgICAgICAgICAgICB0WydvdGlsZGVhY3V0ZSddID0gMHgxRTREO1xuICAgICAgICAgICAgICAgICAgICB0WydvdGlsZGVkaWVyZXNpcyddID0gMHgxRTRGO1xuICAgICAgICAgICAgICAgICAgICB0WydvdWJvcG9tb2ZvJ10gPSAweDMxMjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ292ZXJsaW5lJ10gPSAweDIwM0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ292ZXJsaW5lY2VudGVybGluZSddID0gMHhGRTRBO1xuICAgICAgICAgICAgICAgICAgICB0WydvdmVybGluZWNtYiddID0gMHgwMzA1O1xuICAgICAgICAgICAgICAgICAgICB0WydvdmVybGluZWRhc2hlZCddID0gMHhGRTQ5O1xuICAgICAgICAgICAgICAgICAgICB0WydvdmVybGluZWRibHdhdnknXSA9IDB4RkU0QztcbiAgICAgICAgICAgICAgICAgICAgdFsnb3ZlcmxpbmV3YXZ5J10gPSAweEZFNEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ292ZXJzY29yZSddID0gMHgwMEFGO1xuICAgICAgICAgICAgICAgICAgICB0Wydvdm93ZWxzaWduYmVuZ2FsaSddID0gMHgwOUNCO1xuICAgICAgICAgICAgICAgICAgICB0Wydvdm93ZWxzaWduZGV2YSddID0gMHgwOTRCO1xuICAgICAgICAgICAgICAgICAgICB0Wydvdm93ZWxzaWduZ3VqYXJhdGknXSA9IDB4MEFDQjtcbiAgICAgICAgICAgICAgICAgICAgdFsncCddID0gMHgwMDcwO1xuICAgICAgICAgICAgICAgICAgICB0WydwYWFtcHNzcXVhcmUnXSA9IDB4MzM4MDtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFhc2VudG9zcXVhcmUnXSA9IDB4MzMyQjtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFiZW5nYWxpJ10gPSAweDA5QUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhY3V0ZSddID0gMHgxRTU1O1xuICAgICAgICAgICAgICAgICAgICB0WydwYWRldmEnXSA9IDB4MDkyQTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFnZWRvd24nXSA9IDB4MjFERjtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFnZXVwJ10gPSAweDIxREU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhZ3VqYXJhdGknXSA9IDB4MEFBQTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFndXJtdWtoaSddID0gMHgwQTJBO1xuICAgICAgICAgICAgICAgICAgICB0WydwYWhpcmFnYW5hJ10gPSAweDMwNzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhaXlhbm5vaXRoYWknXSA9IDB4MEUyRjtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFrYXRha2FuYSddID0gMHgzMEQxO1xuICAgICAgICAgICAgICAgICAgICB0WydwYWxhdGFsaXphdGlvbmN5cmlsbGljY21iJ10gPSAweDA0ODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhbG9jaGthY3lyaWxsaWMnXSA9IDB4MDRDMDtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFuc2lvc2tvcmVhbiddID0gMHgzMTdGO1xuICAgICAgICAgICAgICAgICAgICB0WydwYXJhZ3JhcGgnXSA9IDB4MDBCNjtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFyYWxsZWwnXSA9IDB4MjIyNTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5sZWZ0J10gPSAweDAwMjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVubGVmdGFsdG9uZWFyYWJpYyddID0gMHhGRDNFO1xuICAgICAgICAgICAgICAgICAgICB0WydwYXJlbmxlZnRidCddID0gMHhGOEVEO1xuICAgICAgICAgICAgICAgICAgICB0WydwYXJlbmxlZnRleCddID0gMHhGOEVDO1xuICAgICAgICAgICAgICAgICAgICB0WydwYXJlbmxlZnRpbmZlcmlvciddID0gMHgyMDhEO1xuICAgICAgICAgICAgICAgICAgICB0WydwYXJlbmxlZnRtb25vc3BhY2UnXSA9IDB4RkYwODtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5sZWZ0c21hbGwnXSA9IDB4RkU1OTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5sZWZ0c3VwZXJpb3InXSA9IDB4MjA3RDtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5sZWZ0dHAnXSA9IDB4RjhFQjtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5sZWZ0dmVydGljYWwnXSA9IDB4RkUzNTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5yaWdodCddID0gMHgwMDI5O1xuICAgICAgICAgICAgICAgICAgICB0WydwYXJlbnJpZ2h0YWx0b25lYXJhYmljJ10gPSAweEZEM0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVucmlnaHRidCddID0gMHhGOEY4O1xuICAgICAgICAgICAgICAgICAgICB0WydwYXJlbnJpZ2h0ZXgnXSA9IDB4RjhGNztcbiAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5yaWdodGluZmVyaW9yJ10gPSAweDIwOEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVucmlnaHRtb25vc3BhY2UnXSA9IDB4RkYwOTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5yaWdodHNtYWxsJ10gPSAweEZFNUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVucmlnaHRzdXBlcmlvciddID0gMHgyMDdFO1xuICAgICAgICAgICAgICAgICAgICB0WydwYXJlbnJpZ2h0dHAnXSA9IDB4RjhGNjtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5yaWdodHZlcnRpY2FsJ10gPSAweEZFMzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhcnRpYWxkaWZmJ10gPSAweDIyMDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Bhc2VxaGVicmV3J10gPSAweDA1QzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Bhc2h0YWhlYnJldyddID0gMHgwNTk5O1xuICAgICAgICAgICAgICAgICAgICB0WydwYXNxdWFyZSddID0gMHgzM0E5O1xuICAgICAgICAgICAgICAgICAgICB0WydwYXRhaCddID0gMHgwNUI3O1xuICAgICAgICAgICAgICAgICAgICB0WydwYXRhaDExJ10gPSAweDA1Qjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhdGFoMWQnXSA9IDB4MDVCNztcbiAgICAgICAgICAgICAgICAgICAgdFsncGF0YWgyYSddID0gMHgwNUI3O1xuICAgICAgICAgICAgICAgICAgICB0WydwYXRhaGhlYnJldyddID0gMHgwNUI3O1xuICAgICAgICAgICAgICAgICAgICB0WydwYXRhaG5hcnJvd2hlYnJldyddID0gMHgwNUI3O1xuICAgICAgICAgICAgICAgICAgICB0WydwYXRhaHF1YXJ0ZXJoZWJyZXcnXSA9IDB4MDVCNztcbiAgICAgICAgICAgICAgICAgICAgdFsncGF0YWh3aWRlaGVicmV3J10gPSAweDA1Qjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhemVyaGVicmV3J10gPSAweDA1QTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Bib3BvbW9mbyddID0gMHgzMTA2O1xuICAgICAgICAgICAgICAgICAgICB0WydwY2lyY2xlJ10gPSAweDI0REY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Bkb3RhY2NlbnQnXSA9IDB4MUU1NztcbiAgICAgICAgICAgICAgICAgICAgdFsncGUnXSA9IDB4MDVFNDtcbiAgICAgICAgICAgICAgICAgICAgdFsncGVjeXJpbGxpYyddID0gMHgwNDNGO1xuICAgICAgICAgICAgICAgICAgICB0WydwZWRhZ2VzaCddID0gMHhGQjQ0O1xuICAgICAgICAgICAgICAgICAgICB0WydwZWRhZ2VzaGhlYnJldyddID0gMHhGQjQ0O1xuICAgICAgICAgICAgICAgICAgICB0WydwZWV6aXNxdWFyZSddID0gMHgzMzNCO1xuICAgICAgICAgICAgICAgICAgICB0WydwZWZpbmFsZGFnZXNoaGVicmV3J10gPSAweEZCNDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BlaGFyYWJpYyddID0gMHgwNjdFO1xuICAgICAgICAgICAgICAgICAgICB0WydwZWhhcm1lbmlhbiddID0gMHgwNTdBO1xuICAgICAgICAgICAgICAgICAgICB0WydwZWhlYnJldyddID0gMHgwNUU0O1xuICAgICAgICAgICAgICAgICAgICB0WydwZWhmaW5hbGFyYWJpYyddID0gMHhGQjU3O1xuICAgICAgICAgICAgICAgICAgICB0WydwZWhpbml0aWFsYXJhYmljJ10gPSAweEZCNTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BlaGlyYWdhbmEnXSA9IDB4MzA3QTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGVobWVkaWFsYXJhYmljJ10gPSAweEZCNTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Bla2F0YWthbmEnXSA9IDB4MzBEQTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGVtaWRkbGVob29rY3lyaWxsaWMnXSA9IDB4MDRBNztcbiAgICAgICAgICAgICAgICAgICAgdFsncGVyYWZlaGVicmV3J10gPSAweEZCNEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BlcmNlbnQnXSA9IDB4MDAyNTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGVyY2VudGFyYWJpYyddID0gMHgwNjZBO1xuICAgICAgICAgICAgICAgICAgICB0WydwZXJjZW50bW9ub3NwYWNlJ10gPSAweEZGMDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BlcmNlbnRzbWFsbCddID0gMHhGRTZBO1xuICAgICAgICAgICAgICAgICAgICB0WydwZXJpb2QnXSA9IDB4MDAyRTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGVyaW9kYXJtZW5pYW4nXSA9IDB4MDU4OTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGVyaW9kY2VudGVyZWQnXSA9IDB4MDBCNztcbiAgICAgICAgICAgICAgICAgICAgdFsncGVyaW9kaGFsZndpZHRoJ10gPSAweEZGNjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BlcmlvZGluZmVyaW9yJ10gPSAweEY2RTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BlcmlvZG1vbm9zcGFjZSddID0gMHhGRjBFO1xuICAgICAgICAgICAgICAgICAgICB0WydwZXJpb2RzbWFsbCddID0gMHhGRTUyO1xuICAgICAgICAgICAgICAgICAgICB0WydwZXJpb2RzdXBlcmlvciddID0gMHhGNkU4O1xuICAgICAgICAgICAgICAgICAgICB0WydwZXJpc3BvbWVuaWdyZWVrY21iJ10gPSAweDAzNDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BlcnBlbmRpY3VsYXInXSA9IDB4MjJBNTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGVydGhvdXNhbmQnXSA9IDB4MjAzMDtcbiAgICAgICAgICAgICAgICAgICAgdFsncGVzZXRhJ10gPSAweDIwQTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Bmc3F1YXJlJ10gPSAweDMzOEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BoYWJlbmdhbGknXSA9IDB4MDlBQjtcbiAgICAgICAgICAgICAgICAgICAgdFsncGhhZGV2YSddID0gMHgwOTJCO1xuICAgICAgICAgICAgICAgICAgICB0WydwaGFndWphcmF0aSddID0gMHgwQUFCO1xuICAgICAgICAgICAgICAgICAgICB0WydwaGFndXJtdWtoaSddID0gMHgwQTJCO1xuICAgICAgICAgICAgICAgICAgICB0WydwaGknXSA9IDB4MDNDNjtcbiAgICAgICAgICAgICAgICAgICAgdFsncGhpMSddID0gMHgwM0Q1O1xuICAgICAgICAgICAgICAgICAgICB0WydwaGlldXBoYWNpcmNsZWtvcmVhbiddID0gMHgzMjdBO1xuICAgICAgICAgICAgICAgICAgICB0WydwaGlldXBoYXBhcmVua29yZWFuJ10gPSAweDMyMUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BoaWV1cGhjaXJjbGVrb3JlYW4nXSA9IDB4MzI2QztcbiAgICAgICAgICAgICAgICAgICAgdFsncGhpZXVwaGtvcmVhbiddID0gMHgzMTREO1xuICAgICAgICAgICAgICAgICAgICB0WydwaGlldXBocGFyZW5rb3JlYW4nXSA9IDB4MzIwQztcbiAgICAgICAgICAgICAgICAgICAgdFsncGhpbGF0aW4nXSA9IDB4MDI3ODtcbiAgICAgICAgICAgICAgICAgICAgdFsncGhpbnRodXRoYWknXSA9IDB4MEUzQTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGhpc3ltYm9sZ3JlZWsnXSA9IDB4MDNENTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGhvb2snXSA9IDB4MDFBNTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGhvcGhhbnRoYWknXSA9IDB4MEUxRTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGhvcGh1bmd0aGFpJ10gPSAweDBFMUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Bob3NhbXBoYW90aGFpJ10gPSAweDBFMjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BpJ10gPSAweDAzQzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BpZXVwYWNpcmNsZWtvcmVhbiddID0gMHgzMjczO1xuICAgICAgICAgICAgICAgICAgICB0WydwaWV1cGFwYXJlbmtvcmVhbiddID0gMHgzMjEzO1xuICAgICAgICAgICAgICAgICAgICB0WydwaWV1cGNpZXVja29yZWFuJ10gPSAweDMxNzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BpZXVwY2lyY2xla29yZWFuJ10gPSAweDMyNjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BpZXVwa2l5ZW9ra29yZWFuJ10gPSAweDMxNzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BpZXVwa29yZWFuJ10gPSAweDMxNDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BpZXVwcGFyZW5rb3JlYW4nXSA9IDB4MzIwNTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGlldXBzaW9za2l5ZW9ra29yZWFuJ10gPSAweDMxNzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BpZXVwc2lvc2tvcmVhbiddID0gMHgzMTQ0O1xuICAgICAgICAgICAgICAgICAgICB0WydwaWV1cHNpb3N0aWtldXRrb3JlYW4nXSA9IDB4MzE3NTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGlldXB0aGlldXRoa29yZWFuJ10gPSAweDMxNzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BpZXVwdGlrZXV0a29yZWFuJ10gPSAweDMxNzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BpaGlyYWdhbmEnXSA9IDB4MzA3NDtcbiAgICAgICAgICAgICAgICAgICAgdFsncGlrYXRha2FuYSddID0gMHgzMEQ0O1xuICAgICAgICAgICAgICAgICAgICB0WydwaXN5bWJvbGdyZWVrJ10gPSAweDAzRDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Bpd3Jhcm1lbmlhbiddID0gMHgwNTgzO1xuICAgICAgICAgICAgICAgICAgICB0WydwbHVzJ10gPSAweDAwMkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BsdXNiZWxvd2NtYiddID0gMHgwMzFGO1xuICAgICAgICAgICAgICAgICAgICB0WydwbHVzY2lyY2xlJ10gPSAweDIyOTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BsdXNtaW51cyddID0gMHgwMEIxO1xuICAgICAgICAgICAgICAgICAgICB0WydwbHVzbW9kJ10gPSAweDAyRDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BsdXNtb25vc3BhY2UnXSA9IDB4RkYwQjtcbiAgICAgICAgICAgICAgICAgICAgdFsncGx1c3NtYWxsJ10gPSAweEZFNjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BsdXNzdXBlcmlvciddID0gMHgyMDdBO1xuICAgICAgICAgICAgICAgICAgICB0WydwbW9ub3NwYWNlJ10gPSAweEZGNTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Btc3F1YXJlJ10gPSAweDMzRDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BvaGlyYWdhbmEnXSA9IDB4MzA3RDtcbiAgICAgICAgICAgICAgICAgICAgdFsncG9pbnRpbmdpbmRleGRvd253aGl0ZSddID0gMHgyNjFGO1xuICAgICAgICAgICAgICAgICAgICB0Wydwb2ludGluZ2luZGV4bGVmdHdoaXRlJ10gPSAweDI2MUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BvaW50aW5naW5kZXhyaWdodHdoaXRlJ10gPSAweDI2MUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BvaW50aW5naW5kZXh1cHdoaXRlJ10gPSAweDI2MUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Bva2F0YWthbmEnXSA9IDB4MzBERDtcbiAgICAgICAgICAgICAgICAgICAgdFsncG9wbGF0aGFpJ10gPSAweDBFMUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Bvc3RhbG1hcmsnXSA9IDB4MzAxMjtcbiAgICAgICAgICAgICAgICAgICAgdFsncG9zdGFsbWFya2ZhY2UnXSA9IDB4MzAyMDtcbiAgICAgICAgICAgICAgICAgICAgdFsncHBhcmVuJ10gPSAweDI0QUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3ByZWNlZGVzJ10gPSAweDIyN0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3ByZXNjcmlwdGlvbiddID0gMHgyMTFFO1xuICAgICAgICAgICAgICAgICAgICB0WydwcmltZW1vZCddID0gMHgwMkI5O1xuICAgICAgICAgICAgICAgICAgICB0WydwcmltZXJldmVyc2VkJ10gPSAweDIwMzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Byb2R1Y3QnXSA9IDB4MjIwRjtcbiAgICAgICAgICAgICAgICAgICAgdFsncHJvamVjdGl2ZSddID0gMHgyMzA1O1xuICAgICAgICAgICAgICAgICAgICB0Wydwcm9sb25nZWRrYW5hJ10gPSAweDMwRkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Byb3BlbGxvciddID0gMHgyMzE4O1xuICAgICAgICAgICAgICAgICAgICB0Wydwcm9wZXJzdWJzZXQnXSA9IDB4MjI4MjtcbiAgICAgICAgICAgICAgICAgICAgdFsncHJvcGVyc3VwZXJzZXQnXSA9IDB4MjI4MztcbiAgICAgICAgICAgICAgICAgICAgdFsncHJvcG9ydGlvbiddID0gMHgyMjM3O1xuICAgICAgICAgICAgICAgICAgICB0Wydwcm9wb3J0aW9uYWwnXSA9IDB4MjIxRDtcbiAgICAgICAgICAgICAgICAgICAgdFsncHNpJ10gPSAweDAzQzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BzaWN5cmlsbGljJ10gPSAweDA0NzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BzaWxpcG5ldW1hdGFjeXJpbGxpY2NtYiddID0gMHgwNDg2O1xuICAgICAgICAgICAgICAgICAgICB0Wydwc3NxdWFyZSddID0gMHgzM0IwO1xuICAgICAgICAgICAgICAgICAgICB0WydwdWhpcmFnYW5hJ10gPSAweDMwNzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3B1a2F0YWthbmEnXSA9IDB4MzBENztcbiAgICAgICAgICAgICAgICAgICAgdFsncHZzcXVhcmUnXSA9IDB4MzNCNDtcbiAgICAgICAgICAgICAgICAgICAgdFsncHdzcXVhcmUnXSA9IDB4MzNCQTtcbiAgICAgICAgICAgICAgICAgICAgdFsncSddID0gMHgwMDcxO1xuICAgICAgICAgICAgICAgICAgICB0WydxYWRldmEnXSA9IDB4MDk1ODtcbiAgICAgICAgICAgICAgICAgICAgdFsncWFkbWFoZWJyZXcnXSA9IDB4MDVBODtcbiAgICAgICAgICAgICAgICAgICAgdFsncWFmYXJhYmljJ10gPSAweDA2NDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3FhZmZpbmFsYXJhYmljJ10gPSAweEZFRDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3FhZmluaXRpYWxhcmFiaWMnXSA9IDB4RkVENztcbiAgICAgICAgICAgICAgICAgICAgdFsncWFmbWVkaWFsYXJhYmljJ10gPSAweEZFRDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3FhbWF0cyddID0gMHgwNUI4O1xuICAgICAgICAgICAgICAgICAgICB0WydxYW1hdHMxMCddID0gMHgwNUI4O1xuICAgICAgICAgICAgICAgICAgICB0WydxYW1hdHMxYSddID0gMHgwNUI4O1xuICAgICAgICAgICAgICAgICAgICB0WydxYW1hdHMxYyddID0gMHgwNUI4O1xuICAgICAgICAgICAgICAgICAgICB0WydxYW1hdHMyNyddID0gMHgwNUI4O1xuICAgICAgICAgICAgICAgICAgICB0WydxYW1hdHMyOSddID0gMHgwNUI4O1xuICAgICAgICAgICAgICAgICAgICB0WydxYW1hdHMzMyddID0gMHgwNUI4O1xuICAgICAgICAgICAgICAgICAgICB0WydxYW1hdHNkZSddID0gMHgwNUI4O1xuICAgICAgICAgICAgICAgICAgICB0WydxYW1hdHNoZWJyZXcnXSA9IDB4MDVCODtcbiAgICAgICAgICAgICAgICAgICAgdFsncWFtYXRzbmFycm93aGVicmV3J10gPSAweDA1Qjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3FhbWF0c3FhdGFuaGVicmV3J10gPSAweDA1Qjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3FhbWF0c3FhdGFubmFycm93aGVicmV3J10gPSAweDA1Qjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3FhbWF0c3FhdGFucXVhcnRlcmhlYnJldyddID0gMHgwNUI4O1xuICAgICAgICAgICAgICAgICAgICB0WydxYW1hdHNxYXRhbndpZGVoZWJyZXcnXSA9IDB4MDVCODtcbiAgICAgICAgICAgICAgICAgICAgdFsncWFtYXRzcXVhcnRlcmhlYnJldyddID0gMHgwNUI4O1xuICAgICAgICAgICAgICAgICAgICB0WydxYW1hdHN3aWRlaGVicmV3J10gPSAweDA1Qjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Fhcm5leXBhcmFoZWJyZXcnXSA9IDB4MDU5RjtcbiAgICAgICAgICAgICAgICAgICAgdFsncWJvcG9tb2ZvJ10gPSAweDMxMTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3FjaXJjbGUnXSA9IDB4MjRFMDtcbiAgICAgICAgICAgICAgICAgICAgdFsncWhvb2snXSA9IDB4MDJBMDtcbiAgICAgICAgICAgICAgICAgICAgdFsncW1vbm9zcGFjZSddID0gMHhGRjUxO1xuICAgICAgICAgICAgICAgICAgICB0Wydxb2YnXSA9IDB4MDVFNztcbiAgICAgICAgICAgICAgICAgICAgdFsncW9mZGFnZXNoJ10gPSAweEZCNDc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3FvZmRhZ2VzaGhlYnJldyddID0gMHhGQjQ3O1xuICAgICAgICAgICAgICAgICAgICB0Wydxb2ZoZWJyZXcnXSA9IDB4MDVFNztcbiAgICAgICAgICAgICAgICAgICAgdFsncXBhcmVuJ10gPSAweDI0QUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3F1YXJ0ZXJub3RlJ10gPSAweDI2Njk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3F1YnV0cyddID0gMHgwNUJCO1xuICAgICAgICAgICAgICAgICAgICB0WydxdWJ1dHMxOCddID0gMHgwNUJCO1xuICAgICAgICAgICAgICAgICAgICB0WydxdWJ1dHMyNSddID0gMHgwNUJCO1xuICAgICAgICAgICAgICAgICAgICB0WydxdWJ1dHMzMSddID0gMHgwNUJCO1xuICAgICAgICAgICAgICAgICAgICB0WydxdWJ1dHNoZWJyZXcnXSA9IDB4MDVCQjtcbiAgICAgICAgICAgICAgICAgICAgdFsncXVidXRzbmFycm93aGVicmV3J10gPSAweDA1QkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3F1YnV0c3F1YXJ0ZXJoZWJyZXcnXSA9IDB4MDVCQjtcbiAgICAgICAgICAgICAgICAgICAgdFsncXVidXRzd2lkZWhlYnJldyddID0gMHgwNUJCO1xuICAgICAgICAgICAgICAgICAgICB0WydxdWVzdGlvbiddID0gMHgwMDNGO1xuICAgICAgICAgICAgICAgICAgICB0WydxdWVzdGlvbmFyYWJpYyddID0gMHgwNjFGO1xuICAgICAgICAgICAgICAgICAgICB0WydxdWVzdGlvbmFybWVuaWFuJ10gPSAweDA1NUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3F1ZXN0aW9uZG93biddID0gMHgwMEJGO1xuICAgICAgICAgICAgICAgICAgICB0WydxdWVzdGlvbmRvd25zbWFsbCddID0gMHhGN0JGO1xuICAgICAgICAgICAgICAgICAgICB0WydxdWVzdGlvbmdyZWVrJ10gPSAweDAzN0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3F1ZXN0aW9ubW9ub3NwYWNlJ10gPSAweEZGMUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3F1ZXN0aW9uc21hbGwnXSA9IDB4RjczRjtcbiAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmwnXSA9IDB4MDAyMjtcbiAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmxiYXNlJ10gPSAweDIwMUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJsbGVmdCddID0gMHgyMDFDO1xuICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWRibG1vbm9zcGFjZSddID0gMHhGRjAyO1xuICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWRibHByaW1lJ10gPSAweDMwMUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJscHJpbWVyZXZlcnNlZCddID0gMHgzMDFEO1xuICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWRibHJpZ2h0J10gPSAweDIwMUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlbGVmdCddID0gMHgyMDE4O1xuICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWxlZnRyZXZlcnNlZCddID0gMHgyMDFCO1xuICAgICAgICAgICAgICAgICAgICB0WydxdW90ZXJldmVyc2VkJ10gPSAweDIwMUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlcmlnaHQnXSA9IDB4MjAxOTtcbiAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVyaWdodG4nXSA9IDB4MDE0OTtcbiAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVzaW5nbGJhc2UnXSA9IDB4MjAxQTtcbiAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVzaW5nbGUnXSA9IDB4MDAyNztcbiAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVzaW5nbGVtb25vc3BhY2UnXSA9IDB4RkYwNztcbiAgICAgICAgICAgICAgICAgICAgdFsnciddID0gMHgwMDcyO1xuICAgICAgICAgICAgICAgICAgICB0WydyYWFybWVuaWFuJ10gPSAweDA1N0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JhYmVuZ2FsaSddID0gMHgwOUIwO1xuICAgICAgICAgICAgICAgICAgICB0WydyYWN1dGUnXSA9IDB4MDE1NTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmFkZXZhJ10gPSAweDA5MzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JhZGljYWwnXSA9IDB4MjIxQTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmFkaWNhbGV4J10gPSAweEY4RTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JhZG92ZXJzc3F1YXJlJ10gPSAweDMzQUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JhZG92ZXJzc3F1YXJlZHNxdWFyZSddID0gMHgzM0FGO1xuICAgICAgICAgICAgICAgICAgICB0WydyYWRzcXVhcmUnXSA9IDB4MzNBRDtcbiAgICAgICAgICAgICAgICAgICAgdFsncmFmZSddID0gMHgwNUJGO1xuICAgICAgICAgICAgICAgICAgICB0WydyYWZlaGVicmV3J10gPSAweDA1QkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JhZ3VqYXJhdGknXSA9IDB4MEFCMDtcbiAgICAgICAgICAgICAgICAgICAgdFsncmFndXJtdWtoaSddID0gMHgwQTMwO1xuICAgICAgICAgICAgICAgICAgICB0WydyYWhpcmFnYW5hJ10gPSAweDMwODk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Jha2F0YWthbmEnXSA9IDB4MzBFOTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmFrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjk3O1xuICAgICAgICAgICAgICAgICAgICB0WydyYWxvd2VyZGlhZ29uYWxiZW5nYWxpJ10gPSAweDA5RjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JhbWlkZGxlZGlhZ29uYWxiZW5nYWxpJ10gPSAweDA5RjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JhbXNob3JuJ10gPSAweDAyNjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JhdGlvJ10gPSAweDIyMzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Jib3BvbW9mbyddID0gMHgzMTE2O1xuICAgICAgICAgICAgICAgICAgICB0WydyY2Fyb24nXSA9IDB4MDE1OTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmNlZGlsbGEnXSA9IDB4MDE1NztcbiAgICAgICAgICAgICAgICAgICAgdFsncmNpcmNsZSddID0gMHgyNEUxO1xuICAgICAgICAgICAgICAgICAgICB0WydyY29tbWFhY2NlbnQnXSA9IDB4MDE1NztcbiAgICAgICAgICAgICAgICAgICAgdFsncmRibGdyYXZlJ10gPSAweDAyMTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Jkb3RhY2NlbnQnXSA9IDB4MUU1OTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmRvdGJlbG93J10gPSAweDFFNUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Jkb3RiZWxvd21hY3JvbiddID0gMHgxRTVEO1xuICAgICAgICAgICAgICAgICAgICB0WydyZWZlcmVuY2VtYXJrJ10gPSAweDIwM0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JlZmxleHN1YnNldCddID0gMHgyMjg2O1xuICAgICAgICAgICAgICAgICAgICB0WydyZWZsZXhzdXBlcnNldCddID0gMHgyMjg3O1xuICAgICAgICAgICAgICAgICAgICB0WydyZWdpc3RlcmVkJ10gPSAweDAwQUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JlZ2lzdGVyc2FucyddID0gMHhGOEU4O1xuICAgICAgICAgICAgICAgICAgICB0WydyZWdpc3RlcnNlcmlmJ10gPSAweEY2REE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JlaGFyYWJpYyddID0gMHgwNjMxO1xuICAgICAgICAgICAgICAgICAgICB0WydyZWhhcm1lbmlhbiddID0gMHgwNTgwO1xuICAgICAgICAgICAgICAgICAgICB0WydyZWhmaW5hbGFyYWJpYyddID0gMHhGRUFFO1xuICAgICAgICAgICAgICAgICAgICB0WydyZWhpcmFnYW5hJ10gPSAweDMwOEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Jla2F0YWthbmEnXSA9IDB4MzBFQztcbiAgICAgICAgICAgICAgICAgICAgdFsncmVrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjlBO1xuICAgICAgICAgICAgICAgICAgICB0WydyZXNoJ10gPSAweDA1RTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Jlc2hkYWdlc2hoZWJyZXcnXSA9IDB4RkI0ODtcbiAgICAgICAgICAgICAgICAgICAgdFsncmVzaGhlYnJldyddID0gMHgwNUU4O1xuICAgICAgICAgICAgICAgICAgICB0WydyZXZlcnNlZHRpbGRlJ10gPSAweDIyM0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JldmlhaGVicmV3J10gPSAweDA1OTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JldmlhbXVncmFzaGhlYnJldyddID0gMHgwNTk3O1xuICAgICAgICAgICAgICAgICAgICB0WydyZXZsb2dpY2Fsbm90J10gPSAweDIzMTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JmaXNoaG9vayddID0gMHgwMjdFO1xuICAgICAgICAgICAgICAgICAgICB0WydyZmlzaGhvb2tyZXZlcnNlZCddID0gMHgwMjdGO1xuICAgICAgICAgICAgICAgICAgICB0WydyaGFiZW5nYWxpJ10gPSAweDA5REQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JoYWRldmEnXSA9IDB4MDk1RDtcbiAgICAgICAgICAgICAgICAgICAgdFsncmhvJ10gPSAweDAzQzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Job29rJ10gPSAweDAyN0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Job29rdHVybmVkJ10gPSAweDAyN0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Job29rdHVybmVkc3VwZXJpb3InXSA9IDB4MDJCNTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmhvc3ltYm9sZ3JlZWsnXSA9IDB4MDNGMTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmhvdGljaG9va21vZCddID0gMHgwMkRFO1xuICAgICAgICAgICAgICAgICAgICB0WydyaWV1bGFjaXJjbGVrb3JlYW4nXSA9IDB4MzI3MTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmlldWxhcGFyZW5rb3JlYW4nXSA9IDB4MzIxMTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmlldWxjaXJjbGVrb3JlYW4nXSA9IDB4MzI2MztcbiAgICAgICAgICAgICAgICAgICAgdFsncmlldWxoaWV1aGtvcmVhbiddID0gMHgzMTQwO1xuICAgICAgICAgICAgICAgICAgICB0WydyaWV1bGtpeWVva2tvcmVhbiddID0gMHgzMTNBO1xuICAgICAgICAgICAgICAgICAgICB0WydyaWV1bGtpeWVva3Npb3Nrb3JlYW4nXSA9IDB4MzE2OTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmlldWxrb3JlYW4nXSA9IDB4MzEzOTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmlldWxtaWV1bWtvcmVhbiddID0gMHgzMTNCO1xuICAgICAgICAgICAgICAgICAgICB0WydyaWV1bHBhbnNpb3Nrb3JlYW4nXSA9IDB4MzE2QztcbiAgICAgICAgICAgICAgICAgICAgdFsncmlldWxwYXJlbmtvcmVhbiddID0gMHgzMjAzO1xuICAgICAgICAgICAgICAgICAgICB0WydyaWV1bHBoaWV1cGhrb3JlYW4nXSA9IDB4MzEzRjtcbiAgICAgICAgICAgICAgICAgICAgdFsncmlldWxwaWV1cGtvcmVhbiddID0gMHgzMTNDO1xuICAgICAgICAgICAgICAgICAgICB0WydyaWV1bHBpZXVwc2lvc2tvcmVhbiddID0gMHgzMTZCO1xuICAgICAgICAgICAgICAgICAgICB0WydyaWV1bHNpb3Nrb3JlYW4nXSA9IDB4MzEzRDtcbiAgICAgICAgICAgICAgICAgICAgdFsncmlldWx0aGlldXRoa29yZWFuJ10gPSAweDMxM0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JpZXVsdGlrZXV0a29yZWFuJ10gPSAweDMxNkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JpZXVseWVvcmluaGlldWhrb3JlYW4nXSA9IDB4MzE2RDtcbiAgICAgICAgICAgICAgICAgICAgdFsncmlnaHRhbmdsZSddID0gMHgyMjFGO1xuICAgICAgICAgICAgICAgICAgICB0WydyaWdodHRhY2tiZWxvd2NtYiddID0gMHgwMzE5O1xuICAgICAgICAgICAgICAgICAgICB0WydyaWdodHRyaWFuZ2xlJ10gPSAweDIyQkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JpaGlyYWdhbmEnXSA9IDB4MzA4QTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmlrYXRha2FuYSddID0gMHgzMEVBO1xuICAgICAgICAgICAgICAgICAgICB0WydyaWthdGFrYW5haGFsZndpZHRoJ10gPSAweEZGOTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JpbmcnXSA9IDB4MDJEQTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmluZ2JlbG93Y21iJ10gPSAweDAzMjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JpbmdjbWInXSA9IDB4MDMwQTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmluZ2hhbGZsZWZ0J10gPSAweDAyQkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JpbmdoYWxmbGVmdGFybWVuaWFuJ10gPSAweDA1NTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JpbmdoYWxmbGVmdGJlbG93Y21iJ10gPSAweDAzMUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JpbmdoYWxmbGVmdGNlbnRlcmVkJ10gPSAweDAyRDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JpbmdoYWxmcmlnaHQnXSA9IDB4MDJCRTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmluZ2hhbGZyaWdodGJlbG93Y21iJ10gPSAweDAzMzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JpbmdoYWxmcmlnaHRjZW50ZXJlZCddID0gMHgwMkQyO1xuICAgICAgICAgICAgICAgICAgICB0WydyaW52ZXJ0ZWRicmV2ZSddID0gMHgwMjEzO1xuICAgICAgICAgICAgICAgICAgICB0WydyaXR0b3J1c3F1YXJlJ10gPSAweDMzNTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JsaW5lYmVsb3cnXSA9IDB4MUU1RjtcbiAgICAgICAgICAgICAgICAgICAgdFsncmxvbmdsZWcnXSA9IDB4MDI3QztcbiAgICAgICAgICAgICAgICAgICAgdFsncmxvbmdsZWd0dXJuZWQnXSA9IDB4MDI3QTtcbiAgICAgICAgICAgICAgICAgICAgdFsncm1vbm9zcGFjZSddID0gMHhGRjUyO1xuICAgICAgICAgICAgICAgICAgICB0Wydyb2hpcmFnYW5hJ10gPSAweDMwOEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Jva2F0YWthbmEnXSA9IDB4MzBFRDtcbiAgICAgICAgICAgICAgICAgICAgdFsncm9rYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjlCO1xuICAgICAgICAgICAgICAgICAgICB0Wydyb3J1YXRoYWknXSA9IDB4MEUyMztcbiAgICAgICAgICAgICAgICAgICAgdFsncnBhcmVuJ10gPSAweDI0QUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JyYWJlbmdhbGknXSA9IDB4MDlEQztcbiAgICAgICAgICAgICAgICAgICAgdFsncnJhZGV2YSddID0gMHgwOTMxO1xuICAgICAgICAgICAgICAgICAgICB0WydycmFndXJtdWtoaSddID0gMHgwQTVDO1xuICAgICAgICAgICAgICAgICAgICB0WydycmVoYXJhYmljJ10gPSAweDA2OTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JyZWhmaW5hbGFyYWJpYyddID0gMHhGQjhEO1xuICAgICAgICAgICAgICAgICAgICB0WydycnZvY2FsaWNiZW5nYWxpJ10gPSAweDA5RTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Jydm9jYWxpY2RldmEnXSA9IDB4MDk2MDtcbiAgICAgICAgICAgICAgICAgICAgdFsncnJ2b2NhbGljZ3VqYXJhdGknXSA9IDB4MEFFMDtcbiAgICAgICAgICAgICAgICAgICAgdFsncnJ2b2NhbGljdm93ZWxzaWduYmVuZ2FsaSddID0gMHgwOUM0O1xuICAgICAgICAgICAgICAgICAgICB0WydycnZvY2FsaWN2b3dlbHNpZ25kZXZhJ10gPSAweDA5NDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Jydm9jYWxpY3Zvd2Vsc2lnbmd1amFyYXRpJ10gPSAweDBBQzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JzdXBlcmlvciddID0gMHhGNkYxO1xuICAgICAgICAgICAgICAgICAgICB0WydydGJsb2NrJ10gPSAweDI1OTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3J0dXJuZWQnXSA9IDB4MDI3OTtcbiAgICAgICAgICAgICAgICAgICAgdFsncnR1cm5lZHN1cGVyaW9yJ10gPSAweDAyQjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3J1aGlyYWdhbmEnXSA9IDB4MzA4QjtcbiAgICAgICAgICAgICAgICAgICAgdFsncnVrYXRha2FuYSddID0gMHgzMEVCO1xuICAgICAgICAgICAgICAgICAgICB0WydydWthdGFrYW5haGFsZndpZHRoJ10gPSAweEZGOTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3J1cGVlbWFya2JlbmdhbGknXSA9IDB4MDlGMjtcbiAgICAgICAgICAgICAgICAgICAgdFsncnVwZWVzaWduYmVuZ2FsaSddID0gMHgwOUYzO1xuICAgICAgICAgICAgICAgICAgICB0WydydXBpYWgnXSA9IDB4RjZERDtcbiAgICAgICAgICAgICAgICAgICAgdFsncnV0aGFpJ10gPSAweDBFMjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3J2b2NhbGljYmVuZ2FsaSddID0gMHgwOThCO1xuICAgICAgICAgICAgICAgICAgICB0Wydydm9jYWxpY2RldmEnXSA9IDB4MDkwQjtcbiAgICAgICAgICAgICAgICAgICAgdFsncnZvY2FsaWNndWphcmF0aSddID0gMHgwQThCO1xuICAgICAgICAgICAgICAgICAgICB0Wydydm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGknXSA9IDB4MDlDMztcbiAgICAgICAgICAgICAgICAgICAgdFsncnZvY2FsaWN2b3dlbHNpZ25kZXZhJ10gPSAweDA5NDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3J2b2NhbGljdm93ZWxzaWduZ3VqYXJhdGknXSA9IDB4MEFDMztcbiAgICAgICAgICAgICAgICAgICAgdFsncyddID0gMHgwMDczO1xuICAgICAgICAgICAgICAgICAgICB0WydzYWJlbmdhbGknXSA9IDB4MDlCODtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FjdXRlJ10gPSAweDAxNUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NhY3V0ZWRvdGFjY2VudCddID0gMHgxRTY1O1xuICAgICAgICAgICAgICAgICAgICB0WydzYWRhcmFiaWMnXSA9IDB4MDYzNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FkZXZhJ10gPSAweDA5Mzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NhZGZpbmFsYXJhYmljJ10gPSAweEZFQkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NhZGluaXRpYWxhcmFiaWMnXSA9IDB4RkVCQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FkbWVkaWFsYXJhYmljJ10gPSAweEZFQkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NhZ3VqYXJhdGknXSA9IDB4MEFCODtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FndXJtdWtoaSddID0gMHgwQTM4O1xuICAgICAgICAgICAgICAgICAgICB0WydzYWhpcmFnYW5hJ10gPSAweDMwNTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Nha2F0YWthbmEnXSA9IDB4MzBCNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjdCO1xuICAgICAgICAgICAgICAgICAgICB0WydzYWxsYWxsYWhvdWFsYXloZXdhc2FsbGFtYXJhYmljJ10gPSAweEZERkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NhbWVraCddID0gMHgwNUUxO1xuICAgICAgICAgICAgICAgICAgICB0WydzYW1la2hkYWdlc2gnXSA9IDB4RkI0MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FtZWtoZGFnZXNoaGVicmV3J10gPSAweEZCNDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NhbWVraGhlYnJldyddID0gMHgwNUUxO1xuICAgICAgICAgICAgICAgICAgICB0WydzYXJhYWF0aGFpJ10gPSAweDBFMzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NhcmFhZXRoYWknXSA9IDB4MEU0MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FyYWFpbWFpbWFsYWl0aGFpJ10gPSAweDBFNDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NhcmFhaW1haW11YW50aGFpJ10gPSAweDBFNDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NhcmFhbXRoYWknXSA9IDB4MEUzMztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FyYWF0aGFpJ10gPSAweDBFMzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NhcmFldGhhaSddID0gMHgwRTQwO1xuICAgICAgICAgICAgICAgICAgICB0WydzYXJhaWlsZWZ0dGhhaSddID0gMHhGODg2O1xuICAgICAgICAgICAgICAgICAgICB0WydzYXJhaWl0aGFpJ10gPSAweDBFMzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NhcmFpbGVmdHRoYWknXSA9IDB4Rjg4NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FyYWl0aGFpJ10gPSAweDBFMzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NhcmFvdGhhaSddID0gMHgwRTQyO1xuICAgICAgICAgICAgICAgICAgICB0WydzYXJhdWVlbGVmdHRoYWknXSA9IDB4Rjg4ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FyYXVlZXRoYWknXSA9IDB4MEUzNztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FyYXVlbGVmdHRoYWknXSA9IDB4Rjg4NztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FyYXVldGhhaSddID0gMHgwRTM2O1xuICAgICAgICAgICAgICAgICAgICB0WydzYXJhdXRoYWknXSA9IDB4MEUzODtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FyYXV1dGhhaSddID0gMHgwRTM5O1xuICAgICAgICAgICAgICAgICAgICB0WydzYm9wb21vZm8nXSA9IDB4MzExOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2Nhcm9uJ10gPSAweDAxNjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NjYXJvbmRvdGFjY2VudCddID0gMHgxRTY3O1xuICAgICAgICAgICAgICAgICAgICB0WydzY2VkaWxsYSddID0gMHgwMTVGO1xuICAgICAgICAgICAgICAgICAgICB0WydzY2h3YSddID0gMHgwMjU5O1xuICAgICAgICAgICAgICAgICAgICB0WydzY2h3YWN5cmlsbGljJ10gPSAweDA0RDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NjaHdhZGllcmVzaXNjeXJpbGxpYyddID0gMHgwNERCO1xuICAgICAgICAgICAgICAgICAgICB0WydzY2h3YWhvb2snXSA9IDB4MDI1QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2NpcmNsZSddID0gMHgyNEUyO1xuICAgICAgICAgICAgICAgICAgICB0WydzY2lyY3VtZmxleCddID0gMHgwMTVEO1xuICAgICAgICAgICAgICAgICAgICB0WydzY29tbWFhY2NlbnQnXSA9IDB4MDIxOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2RvdGFjY2VudCddID0gMHgxRTYxO1xuICAgICAgICAgICAgICAgICAgICB0WydzZG90YmVsb3cnXSA9IDB4MUU2MztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2RvdGJlbG93ZG90YWNjZW50J10gPSAweDFFNjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NlYWd1bGxiZWxvd2NtYiddID0gMHgwMzNDO1xuICAgICAgICAgICAgICAgICAgICB0WydzZWNvbmQnXSA9IDB4MjAzMztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2Vjb25kdG9uZWNoaW5lc2UnXSA9IDB4MDJDQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2VjdGlvbiddID0gMHgwMEE3O1xuICAgICAgICAgICAgICAgICAgICB0WydzZWVuYXJhYmljJ10gPSAweDA2MzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NlZW5maW5hbGFyYWJpYyddID0gMHhGRUIyO1xuICAgICAgICAgICAgICAgICAgICB0WydzZWVuaW5pdGlhbGFyYWJpYyddID0gMHhGRUIzO1xuICAgICAgICAgICAgICAgICAgICB0WydzZWVubWVkaWFsYXJhYmljJ10gPSAweEZFQjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NlZ29sJ10gPSAweDA1QjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NlZ29sMTMnXSA9IDB4MDVCNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2Vnb2wxZiddID0gMHgwNUI2O1xuICAgICAgICAgICAgICAgICAgICB0WydzZWdvbDJjJ10gPSAweDA1QjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NlZ29saGVicmV3J10gPSAweDA1QjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NlZ29sbmFycm93aGVicmV3J10gPSAweDA1QjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NlZ29scXVhcnRlcmhlYnJldyddID0gMHgwNUI2O1xuICAgICAgICAgICAgICAgICAgICB0WydzZWdvbHRhaGVicmV3J10gPSAweDA1OTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NlZ29sd2lkZWhlYnJldyddID0gMHgwNUI2O1xuICAgICAgICAgICAgICAgICAgICB0WydzZWhhcm1lbmlhbiddID0gMHgwNTdEO1xuICAgICAgICAgICAgICAgICAgICB0WydzZWhpcmFnYW5hJ10gPSAweDMwNUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Nla2F0YWthbmEnXSA9IDB4MzBCQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2VrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjdFO1xuICAgICAgICAgICAgICAgICAgICB0WydzZW1pY29sb24nXSA9IDB4MDAzQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2VtaWNvbG9uYXJhYmljJ10gPSAweDA2MUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NlbWljb2xvbm1vbm9zcGFjZSddID0gMHhGRjFCO1xuICAgICAgICAgICAgICAgICAgICB0WydzZW1pY29sb25zbWFsbCddID0gMHhGRTU0O1xuICAgICAgICAgICAgICAgICAgICB0WydzZW1pdm9pY2VkbWFya2thbmEnXSA9IDB4MzA5QztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2VtaXZvaWNlZG1hcmtrYW5haGFsZndpZHRoJ10gPSAweEZGOUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NlbnRpc3F1YXJlJ10gPSAweDMzMjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NlbnRvc3F1YXJlJ10gPSAweDMzMjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuJ10gPSAweDAwMzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuYXJhYmljJ10gPSAweDA2Njc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuYmVuZ2FsaSddID0gMHgwOUVEO1xuICAgICAgICAgICAgICAgICAgICB0WydzZXZlbmNpcmNsZSddID0gMHgyNDY2O1xuICAgICAgICAgICAgICAgICAgICB0WydzZXZlbmNpcmNsZWludmVyc2VzYW5zc2VyaWYnXSA9IDB4Mjc5MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2V2ZW5kZXZhJ10gPSAweDA5NkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuZWlnaHRocyddID0gMHgyMTVFO1xuICAgICAgICAgICAgICAgICAgICB0WydzZXZlbmd1amFyYXRpJ10gPSAweDBBRUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuZ3VybXVraGknXSA9IDB4MEE2RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2V2ZW5oYWNrYXJhYmljJ10gPSAweDA2Njc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuaGFuZ3pob3UnXSA9IDB4MzAyNztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2V2ZW5pZGVvZ3JhcGhpY3BhcmVuJ10gPSAweDMyMjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuaW5mZXJpb3InXSA9IDB4MjA4NztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2V2ZW5tb25vc3BhY2UnXSA9IDB4RkYxNztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2V2ZW5vbGRzdHlsZSddID0gMHhGNzM3O1xuICAgICAgICAgICAgICAgICAgICB0WydzZXZlbnBhcmVuJ10gPSAweDI0N0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NldmVucGVyaW9kJ10gPSAweDI0OEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NldmVucGVyc2lhbiddID0gMHgwNkY3O1xuICAgICAgICAgICAgICAgICAgICB0WydzZXZlbnJvbWFuJ10gPSAweDIxNzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuc3VwZXJpb3InXSA9IDB4MjA3NztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2V2ZW50ZWVuY2lyY2xlJ10gPSAweDI0NzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NldmVudGVlbnBhcmVuJ10gPSAweDI0ODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NldmVudGVlbnBlcmlvZCddID0gMHgyNDk4O1xuICAgICAgICAgICAgICAgICAgICB0WydzZXZlbnRoYWknXSA9IDB4MEU1NztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2Z0aHlwaGVuJ10gPSAweDAwQUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoYWFybWVuaWFuJ10gPSAweDA1Nzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoYWJlbmdhbGknXSA9IDB4MDlCNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hhY3lyaWxsaWMnXSA9IDB4MDQ0ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hhZGRhYXJhYmljJ10gPSAweDA2NTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoYWRkYWRhbW1hYXJhYmljJ10gPSAweEZDNjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoYWRkYWRhbW1hdGFuYXJhYmljJ10gPSAweEZDNUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoYWRkYWZhdGhhYXJhYmljJ10gPSAweEZDNjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoYWRkYWthc3JhYXJhYmljJ10gPSAweEZDNjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoYWRkYWthc3JhdGFuYXJhYmljJ10gPSAweEZDNUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoYWRlJ10gPSAweDI1OTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoYWRlZGFyayddID0gMHgyNTkzO1xuICAgICAgICAgICAgICAgICAgICB0WydzaGFkZWxpZ2h0J10gPSAweDI1OTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoYWRlbWVkaXVtJ10gPSAweDI1OTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoYWRldmEnXSA9IDB4MDkzNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hhZ3VqYXJhdGknXSA9IDB4MEFCNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hhZ3VybXVraGknXSA9IDB4MEEzNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hhbHNoZWxldGhlYnJldyddID0gMHgwNTkzO1xuICAgICAgICAgICAgICAgICAgICB0WydzaGJvcG9tb2ZvJ10gPSAweDMxMTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoY2hhY3lyaWxsaWMnXSA9IDB4MDQ0OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hlZW5hcmFiaWMnXSA9IDB4MDYzNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hlZW5maW5hbGFyYWJpYyddID0gMHhGRUI2O1xuICAgICAgICAgICAgICAgICAgICB0WydzaGVlbmluaXRpYWxhcmFiaWMnXSA9IDB4RkVCNztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hlZW5tZWRpYWxhcmFiaWMnXSA9IDB4RkVCODtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hlaWNvcHRpYyddID0gMHgwM0UzO1xuICAgICAgICAgICAgICAgICAgICB0WydzaGVxZWwnXSA9IDB4MjBBQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hlcWVsaGVicmV3J10gPSAweDIwQUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoZXZhJ10gPSAweDA1QjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoZXZhMTE1J10gPSAweDA1QjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoZXZhMTUnXSA9IDB4MDVCMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hldmEyMiddID0gMHgwNUIwO1xuICAgICAgICAgICAgICAgICAgICB0WydzaGV2YTJlJ10gPSAweDA1QjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoZXZhaGVicmV3J10gPSAweDA1QjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoZXZhbmFycm93aGVicmV3J10gPSAweDA1QjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoZXZhcXVhcnRlcmhlYnJldyddID0gMHgwNUIwO1xuICAgICAgICAgICAgICAgICAgICB0WydzaGV2YXdpZGVoZWJyZXcnXSA9IDB4MDVCMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hoYWN5cmlsbGljJ10gPSAweDA0QkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoaW1hY29wdGljJ10gPSAweDAzRUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoaW4nXSA9IDB4MDVFOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hpbmRhZ2VzaCddID0gMHhGQjQ5O1xuICAgICAgICAgICAgICAgICAgICB0WydzaGluZGFnZXNoaGVicmV3J10gPSAweEZCNDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoaW5kYWdlc2hzaGluZG90J10gPSAweEZCMkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoaW5kYWdlc2hzaGluZG90aGVicmV3J10gPSAweEZCMkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoaW5kYWdlc2hzaW5kb3QnXSA9IDB4RkIyRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hpbmRhZ2VzaHNpbmRvdGhlYnJldyddID0gMHhGQjJEO1xuICAgICAgICAgICAgICAgICAgICB0WydzaGluZG90aGVicmV3J10gPSAweDA1QzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoaW5oZWJyZXcnXSA9IDB4MDVFOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hpbnNoaW5kb3QnXSA9IDB4RkIyQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hpbnNoaW5kb3RoZWJyZXcnXSA9IDB4RkIyQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hpbnNpbmRvdCddID0gMHhGQjJCO1xuICAgICAgICAgICAgICAgICAgICB0WydzaGluc2luZG90aGVicmV3J10gPSAweEZCMkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Nob29rJ10gPSAweDAyODI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NpZ21hJ10gPSAweDAzQzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NpZ21hMSddID0gMHgwM0MyO1xuICAgICAgICAgICAgICAgICAgICB0WydzaWdtYWZpbmFsJ10gPSAweDAzQzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NpZ21hbHVuYXRlc3ltYm9sZ3JlZWsnXSA9IDB4MDNGMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2loaXJhZ2FuYSddID0gMHgzMDU3O1xuICAgICAgICAgICAgICAgICAgICB0WydzaWthdGFrYW5hJ10gPSAweDMwQjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Npa2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY3QztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2lsdXFoZWJyZXcnXSA9IDB4MDVCRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2lsdXFsZWZ0aGVicmV3J10gPSAweDA1QkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NpbWlsYXInXSA9IDB4MjIzQztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2luZG90aGVicmV3J10gPSAweDA1QzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Npb3NhY2lyY2xla29yZWFuJ10gPSAweDMyNzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Npb3NhcGFyZW5rb3JlYW4nXSA9IDB4MzIxNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2lvc2NpZXVja29yZWFuJ10gPSAweDMxN0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Npb3NjaXJjbGVrb3JlYW4nXSA9IDB4MzI2NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2lvc2tpeWVva2tvcmVhbiddID0gMHgzMTdBO1xuICAgICAgICAgICAgICAgICAgICB0WydzaW9za29yZWFuJ10gPSAweDMxNDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Npb3NuaWV1bmtvcmVhbiddID0gMHgzMTdCO1xuICAgICAgICAgICAgICAgICAgICB0WydzaW9zcGFyZW5rb3JlYW4nXSA9IDB4MzIwNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2lvc3BpZXVwa29yZWFuJ10gPSAweDMxN0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Npb3N0aWtldXRrb3JlYW4nXSA9IDB4MzE3QztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2l4J10gPSAweDAwMzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NpeGFyYWJpYyddID0gMHgwNjY2O1xuICAgICAgICAgICAgICAgICAgICB0WydzaXhiZW5nYWxpJ10gPSAweDA5RUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NpeGNpcmNsZSddID0gMHgyNDY1O1xuICAgICAgICAgICAgICAgICAgICB0WydzaXhjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmJ10gPSAweDI3OEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NpeGRldmEnXSA9IDB4MDk2QztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2l4Z3VqYXJhdGknXSA9IDB4MEFFQztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2l4Z3VybXVraGknXSA9IDB4MEE2QztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2l4aGFja2FyYWJpYyddID0gMHgwNjY2O1xuICAgICAgICAgICAgICAgICAgICB0WydzaXhoYW5nemhvdSddID0gMHgzMDI2O1xuICAgICAgICAgICAgICAgICAgICB0WydzaXhpZGVvZ3JhcGhpY3BhcmVuJ10gPSAweDMyMjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NpeGluZmVyaW9yJ10gPSAweDIwODY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NpeG1vbm9zcGFjZSddID0gMHhGRjE2O1xuICAgICAgICAgICAgICAgICAgICB0WydzaXhvbGRzdHlsZSddID0gMHhGNzM2O1xuICAgICAgICAgICAgICAgICAgICB0WydzaXhwYXJlbiddID0gMHgyNDc5O1xuICAgICAgICAgICAgICAgICAgICB0WydzaXhwZXJpb2QnXSA9IDB4MjQ4RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2l4cGVyc2lhbiddID0gMHgwNkY2O1xuICAgICAgICAgICAgICAgICAgICB0WydzaXhyb21hbiddID0gMHgyMTc1O1xuICAgICAgICAgICAgICAgICAgICB0WydzaXhzdXBlcmlvciddID0gMHgyMDc2O1xuICAgICAgICAgICAgICAgICAgICB0WydzaXh0ZWVuY2lyY2xlJ10gPSAweDI0NkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NpeHRlZW5jdXJyZW5jeWRlbm9taW5hdG9yYmVuZ2FsaSddID0gMHgwOUY5O1xuICAgICAgICAgICAgICAgICAgICB0WydzaXh0ZWVucGFyZW4nXSA9IDB4MjQ4MztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2l4dGVlbnBlcmlvZCddID0gMHgyNDk3O1xuICAgICAgICAgICAgICAgICAgICB0WydzaXh0aGFpJ10gPSAweDBFNTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NsYXNoJ10gPSAweDAwMkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NsYXNobW9ub3NwYWNlJ10gPSAweEZGMEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Nsb25nJ10gPSAweDAxN0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Nsb25nZG90YWNjZW50J10gPSAweDFFOUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NtaWxlZmFjZSddID0gMHgyNjNBO1xuICAgICAgICAgICAgICAgICAgICB0WydzbW9ub3NwYWNlJ10gPSAweEZGNTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NvZnBhc3VxaGVicmV3J10gPSAweDA1QzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NvZnRoeXBoZW4nXSA9IDB4MDBBRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc29mdHNpZ25jeXJpbGxpYyddID0gMHgwNDRDO1xuICAgICAgICAgICAgICAgICAgICB0Wydzb2hpcmFnYW5hJ10gPSAweDMwNUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Nva2F0YWthbmEnXSA9IDB4MzBCRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc29rYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjdGO1xuICAgICAgICAgICAgICAgICAgICB0Wydzb2xpZHVzbG9uZ292ZXJsYXljbWInXSA9IDB4MDMzODtcbiAgICAgICAgICAgICAgICAgICAgdFsnc29saWR1c3Nob3J0b3ZlcmxheWNtYiddID0gMHgwMzM3O1xuICAgICAgICAgICAgICAgICAgICB0Wydzb3J1c2l0aGFpJ10gPSAweDBFMjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Nvc2FsYXRoYWknXSA9IDB4MEUyODtcbiAgICAgICAgICAgICAgICAgICAgdFsnc29zb3RoYWknXSA9IDB4MEUwQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc29zdWF0aGFpJ10gPSAweDBFMkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NwYWNlJ10gPSAweDAwMjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NwYWNlaGFja2FyYWJpYyddID0gMHgwMDIwO1xuICAgICAgICAgICAgICAgICAgICB0WydzcGFkZSddID0gMHgyNjYwO1xuICAgICAgICAgICAgICAgICAgICB0WydzcGFkZXN1aXRibGFjayddID0gMHgyNjYwO1xuICAgICAgICAgICAgICAgICAgICB0WydzcGFkZXN1aXR3aGl0ZSddID0gMHgyNjY0O1xuICAgICAgICAgICAgICAgICAgICB0WydzcGFyZW4nXSA9IDB4MjRBRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3F1YXJlYmVsb3djbWInXSA9IDB4MDMzQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3F1YXJlY2MnXSA9IDB4MzNDNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3F1YXJlY20nXSA9IDB4MzM5RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3F1YXJlZGlhZ29uYWxjcm9zc2hhdGNoZmlsbCddID0gMHgyNUE5O1xuICAgICAgICAgICAgICAgICAgICB0WydzcXVhcmVob3Jpem9udGFsZmlsbCddID0gMHgyNUE0O1xuICAgICAgICAgICAgICAgICAgICB0WydzcXVhcmVrZyddID0gMHgzMzhGO1xuICAgICAgICAgICAgICAgICAgICB0WydzcXVhcmVrbSddID0gMHgzMzlFO1xuICAgICAgICAgICAgICAgICAgICB0WydzcXVhcmVrbWNhcGl0YWwnXSA9IDB4MzNDRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3F1YXJlbG4nXSA9IDB4MzNEMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3F1YXJlbG9nJ10gPSAweDMzRDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NxdWFyZW1nJ10gPSAweDMzOEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NxdWFyZW1pbCddID0gMHgzM0Q1O1xuICAgICAgICAgICAgICAgICAgICB0WydzcXVhcmVtbSddID0gMHgzMzlDO1xuICAgICAgICAgICAgICAgICAgICB0WydzcXVhcmVtc3F1YXJlZCddID0gMHgzM0ExO1xuICAgICAgICAgICAgICAgICAgICB0WydzcXVhcmVvcnRob2dvbmFsY3Jvc3NoYXRjaGZpbGwnXSA9IDB4MjVBNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3F1YXJldXBwZXJsZWZ0dG9sb3dlcnJpZ2h0ZmlsbCddID0gMHgyNUE3O1xuICAgICAgICAgICAgICAgICAgICB0WydzcXVhcmV1cHBlcnJpZ2h0dG9sb3dlcmxlZnRmaWxsJ10gPSAweDI1QTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NxdWFyZXZlcnRpY2FsZmlsbCddID0gMHgyNUE1O1xuICAgICAgICAgICAgICAgICAgICB0WydzcXVhcmV3aGl0ZXdpdGhzbWFsbGJsYWNrJ10gPSAweDI1QTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Nyc3F1YXJlJ10gPSAweDMzREI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NzYWJlbmdhbGknXSA9IDB4MDlCNztcbiAgICAgICAgICAgICAgICAgICAgdFsnc3NhZGV2YSddID0gMHgwOTM3O1xuICAgICAgICAgICAgICAgICAgICB0Wydzc2FndWphcmF0aSddID0gMHgwQUI3O1xuICAgICAgICAgICAgICAgICAgICB0Wydzc2FuZ2NpZXVja29yZWFuJ10gPSAweDMxNDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NzYW5naGlldWhrb3JlYW4nXSA9IDB4MzE4NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3NhbmdpZXVuZ2tvcmVhbiddID0gMHgzMTgwO1xuICAgICAgICAgICAgICAgICAgICB0Wydzc2FuZ2tpeWVva2tvcmVhbiddID0gMHgzMTMyO1xuICAgICAgICAgICAgICAgICAgICB0Wydzc2FuZ25pZXVua29yZWFuJ10gPSAweDMxNjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NzYW5ncGlldXBrb3JlYW4nXSA9IDB4MzE0MztcbiAgICAgICAgICAgICAgICAgICAgdFsnc3NhbmdzaW9za29yZWFuJ10gPSAweDMxNDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NzYW5ndGlrZXV0a29yZWFuJ10gPSAweDMxMzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NzdXBlcmlvciddID0gMHhGNkYyO1xuICAgICAgICAgICAgICAgICAgICB0WydzdGVybGluZyddID0gMHgwMEEzO1xuICAgICAgICAgICAgICAgICAgICB0WydzdGVybGluZ21vbm9zcGFjZSddID0gMHhGRkUxO1xuICAgICAgICAgICAgICAgICAgICB0WydzdHJva2Vsb25nb3ZlcmxheWNtYiddID0gMHgwMzM2O1xuICAgICAgICAgICAgICAgICAgICB0WydzdHJva2VzaG9ydG92ZXJsYXljbWInXSA9IDB4MDMzNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3Vic2V0J10gPSAweDIyODI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3N1YnNldG5vdGVxdWFsJ10gPSAweDIyOEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3N1YnNldG9yZXF1YWwnXSA9IDB4MjI4NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3VjY2VlZHMnXSA9IDB4MjI3QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3VjaHRoYXQnXSA9IDB4MjIwQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3VoaXJhZ2FuYSddID0gMHgzMDU5O1xuICAgICAgICAgICAgICAgICAgICB0WydzdWthdGFrYW5hJ10gPSAweDMwQjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3N1a2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY3RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3VrdW5hcmFiaWMnXSA9IDB4MDY1MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3VtbWF0aW9uJ10gPSAweDIyMTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3N1biddID0gMHgyNjNDO1xuICAgICAgICAgICAgICAgICAgICB0WydzdXBlcnNldCddID0gMHgyMjgzO1xuICAgICAgICAgICAgICAgICAgICB0WydzdXBlcnNldG5vdGVxdWFsJ10gPSAweDIyOEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3N1cGVyc2V0b3JlcXVhbCddID0gMHgyMjg3O1xuICAgICAgICAgICAgICAgICAgICB0WydzdnNxdWFyZSddID0gMHgzM0RDO1xuICAgICAgICAgICAgICAgICAgICB0WydzeW91d2FlcmFzcXVhcmUnXSA9IDB4MzM3QztcbiAgICAgICAgICAgICAgICAgICAgdFsndCddID0gMHgwMDc0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0YWJlbmdhbGknXSA9IDB4MDlBNDtcbiAgICAgICAgICAgICAgICAgICAgdFsndGFja2Rvd24nXSA9IDB4MjJBNDtcbiAgICAgICAgICAgICAgICAgICAgdFsndGFja2xlZnQnXSA9IDB4MjJBMztcbiAgICAgICAgICAgICAgICAgICAgdFsndGFkZXZhJ10gPSAweDA5MjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RhZ3VqYXJhdGknXSA9IDB4MEFBNDtcbiAgICAgICAgICAgICAgICAgICAgdFsndGFndXJtdWtoaSddID0gMHgwQTI0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0YWhhcmFiaWMnXSA9IDB4MDYzNztcbiAgICAgICAgICAgICAgICAgICAgdFsndGFoZmluYWxhcmFiaWMnXSA9IDB4RkVDMjtcbiAgICAgICAgICAgICAgICAgICAgdFsndGFoaW5pdGlhbGFyYWJpYyddID0gMHhGRUMzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0YWhpcmFnYW5hJ10gPSAweDMwNUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RhaG1lZGlhbGFyYWJpYyddID0gMHhGRUM0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0YWlzeW91ZXJhc3F1YXJlJ10gPSAweDMzN0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Rha2F0YWthbmEnXSA9IDB4MzBCRjtcbiAgICAgICAgICAgICAgICAgICAgdFsndGFrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjgwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0YXR3ZWVsYXJhYmljJ10gPSAweDA2NDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RhdSddID0gMHgwM0M0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0YXYnXSA9IDB4MDVFQTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGF2ZGFnZXMnXSA9IDB4RkI0QTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGF2ZGFnZXNoJ10gPSAweEZCNEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RhdmRhZ2VzaGhlYnJldyddID0gMHhGQjRBO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0YXZoZWJyZXcnXSA9IDB4MDVFQTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGJhciddID0gMHgwMTY3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0Ym9wb21vZm8nXSA9IDB4MzEwQTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGNhcm9uJ10gPSAweDAxNjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RjY3VybCddID0gMHgwMkE4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0Y2VkaWxsYSddID0gMHgwMTYzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0Y2hlaGFyYWJpYyddID0gMHgwNjg2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0Y2hlaGZpbmFsYXJhYmljJ10gPSAweEZCN0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RjaGVoaW5pdGlhbGFyYWJpYyddID0gMHhGQjdDO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0Y2hlaG1lZGlhbGFyYWJpYyddID0gMHhGQjdEO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0Y2lyY2xlJ10gPSAweDI0RTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RjaXJjdW1mbGV4YmVsb3cnXSA9IDB4MUU3MTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGNvbW1hYWNjZW50J10gPSAweDAxNjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RkaWVyZXNpcyddID0gMHgxRTk3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZG90YWNjZW50J10gPSAweDFFNkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Rkb3RiZWxvdyddID0gMHgxRTZEO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZWN5cmlsbGljJ10gPSAweDA0NDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RlZGVzY2VuZGVyY3lyaWxsaWMnXSA9IDB4MDRBRDtcbiAgICAgICAgICAgICAgICAgICAgdFsndGVoYXJhYmljJ10gPSAweDA2MkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RlaGZpbmFsYXJhYmljJ10gPSAweEZFOTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RlaGhhaGluaXRpYWxhcmFiaWMnXSA9IDB4RkNBMjtcbiAgICAgICAgICAgICAgICAgICAgdFsndGVoaGFoaXNvbGF0ZWRhcmFiaWMnXSA9IDB4RkMwQztcbiAgICAgICAgICAgICAgICAgICAgdFsndGVoaW5pdGlhbGFyYWJpYyddID0gMHhGRTk3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZWhpcmFnYW5hJ10gPSAweDMwNjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RlaGplZW1pbml0aWFsYXJhYmljJ10gPSAweEZDQTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RlaGplZW1pc29sYXRlZGFyYWJpYyddID0gMHhGQzBCO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZWhtYXJidXRhYXJhYmljJ10gPSAweDA2Mjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RlaG1hcmJ1dGFmaW5hbGFyYWJpYyddID0gMHhGRTk0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZWhtZWRpYWxhcmFiaWMnXSA9IDB4RkU5ODtcbiAgICAgICAgICAgICAgICAgICAgdFsndGVobWVlbWluaXRpYWxhcmFiaWMnXSA9IDB4RkNBNDtcbiAgICAgICAgICAgICAgICAgICAgdFsndGVobWVlbWlzb2xhdGVkYXJhYmljJ10gPSAweEZDMEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RlaG5vb25maW5hbGFyYWJpYyddID0gMHhGQzczO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZWthdGFrYW5hJ10gPSAweDMwQzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Rla2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY4MztcbiAgICAgICAgICAgICAgICAgICAgdFsndGVsZXBob25lJ10gPSAweDIxMjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RlbGVwaG9uZWJsYWNrJ10gPSAweDI2MEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RlbGlzaGFnZWRvbGFoZWJyZXcnXSA9IDB4MDVBMDtcbiAgICAgICAgICAgICAgICAgICAgdFsndGVsaXNoYXFldGFuYWhlYnJldyddID0gMHgwNUE5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZW5jaXJjbGUnXSA9IDB4MjQ2OTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGVuaWRlb2dyYXBoaWNwYXJlbiddID0gMHgzMjI5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZW5wYXJlbiddID0gMHgyNDdEO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZW5wZXJpb2QnXSA9IDB4MjQ5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGVucm9tYW4nXSA9IDB4MjE3OTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGVzaCddID0gMHgwMkE3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZXQnXSA9IDB4MDVEODtcbiAgICAgICAgICAgICAgICAgICAgdFsndGV0ZGFnZXNoJ10gPSAweEZCMzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RldGRhZ2VzaGhlYnJldyddID0gMHhGQjM4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZXRoZWJyZXcnXSA9IDB4MDVEODtcbiAgICAgICAgICAgICAgICAgICAgdFsndGV0c2VjeXJpbGxpYyddID0gMHgwNEI1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZXZpcmhlYnJldyddID0gMHgwNTlCO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZXZpcmxlZnRoZWJyZXcnXSA9IDB4MDU5QjtcbiAgICAgICAgICAgICAgICAgICAgdFsndGhhYmVuZ2FsaSddID0gMHgwOUE1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aGFkZXZhJ10gPSAweDA5MjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RoYWd1amFyYXRpJ10gPSAweDBBQTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RoYWd1cm11a2hpJ10gPSAweDBBMjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RoYWxhcmFiaWMnXSA9IDB4MDYzMDtcbiAgICAgICAgICAgICAgICAgICAgdFsndGhhbGZpbmFsYXJhYmljJ10gPSAweEZFQUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RoYW50aGFraGF0bG93bGVmdHRoYWknXSA9IDB4Rjg5ODtcbiAgICAgICAgICAgICAgICAgICAgdFsndGhhbnRoYWtoYXRsb3dyaWdodHRoYWknXSA9IDB4Rjg5NztcbiAgICAgICAgICAgICAgICAgICAgdFsndGhhbnRoYWtoYXR0aGFpJ10gPSAweDBFNEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RoYW50aGFraGF0dXBwZXJsZWZ0dGhhaSddID0gMHhGODk2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aGVoYXJhYmljJ10gPSAweDA2MkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RoZWhmaW5hbGFyYWJpYyddID0gMHhGRTlBO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aGVoaW5pdGlhbGFyYWJpYyddID0gMHhGRTlCO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aGVobWVkaWFsYXJhYmljJ10gPSAweEZFOUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RoZXJlZXhpc3RzJ10gPSAweDIyMDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RoZXJlZm9yZSddID0gMHgyMjM0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aGV0YSddID0gMHgwM0I4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aGV0YTEnXSA9IDB4MDNEMTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGhldGFzeW1ib2xncmVlayddID0gMHgwM0QxO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aGlldXRoYWNpcmNsZWtvcmVhbiddID0gMHgzMjc5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aGlldXRoYXBhcmVua29yZWFuJ10gPSAweDMyMTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RoaWV1dGhjaXJjbGVrb3JlYW4nXSA9IDB4MzI2QjtcbiAgICAgICAgICAgICAgICAgICAgdFsndGhpZXV0aGtvcmVhbiddID0gMHgzMTRDO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aGlldXRocGFyZW5rb3JlYW4nXSA9IDB4MzIwQjtcbiAgICAgICAgICAgICAgICAgICAgdFsndGhpcnRlZW5jaXJjbGUnXSA9IDB4MjQ2QztcbiAgICAgICAgICAgICAgICAgICAgdFsndGhpcnRlZW5wYXJlbiddID0gMHgyNDgwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aGlydGVlbnBlcmlvZCddID0gMHgyNDk0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aG9uYW5nbW9udGhvdGhhaSddID0gMHgwRTExO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aG9vayddID0gMHgwMUFEO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aG9waHV0aGFvdGhhaSddID0gMHgwRTEyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aG9ybiddID0gMHgwMEZFO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aG90aGFoYW50aGFpJ10gPSAweDBFMTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Rob3RoYW50aGFpJ10gPSAweDBFMTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Rob3Rob25ndGhhaSddID0gMHgwRTE4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aG90aHVuZ3RoYWknXSA9IDB4MEUxNjtcbiAgICAgICAgICAgICAgICAgICAgdFsndGhvdXNhbmRjeXJpbGxpYyddID0gMHgwNDgyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aG91c2FuZHNzZXBhcmF0b3JhcmFiaWMnXSA9IDB4MDY2QztcbiAgICAgICAgICAgICAgICAgICAgdFsndGhvdXNhbmRzc2VwYXJhdG9ycGVyc2lhbiddID0gMHgwNjZDO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZSddID0gMHgwMDMzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZWFyYWJpYyddID0gMHgwNjYzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZWJlbmdhbGknXSA9IDB4MDlFOTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVjaXJjbGUnXSA9IDB4MjQ2MjtcbiAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmJ10gPSAweDI3OEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlZGV2YSddID0gMHgwOTY5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZWVpZ2h0aHMnXSA9IDB4MjE1QztcbiAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVndWphcmF0aSddID0gMHgwQUU5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZWd1cm11a2hpJ10gPSAweDBBNjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlaGFja2FyYWJpYyddID0gMHgwNjYzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZWhhbmd6aG91J10gPSAweDMwMjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlaWRlb2dyYXBoaWNwYXJlbiddID0gMHgzMjIyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZWluZmVyaW9yJ10gPSAweDIwODM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlbW9ub3NwYWNlJ10gPSAweEZGMTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlbnVtZXJhdG9yYmVuZ2FsaSddID0gMHgwOUY2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZW9sZHN0eWxlJ10gPSAweEY3MzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlcGFyZW4nXSA9IDB4MjQ3NjtcbiAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVwZXJpb2QnXSA9IDB4MjQ4QTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVwZXJzaWFuJ10gPSAweDA2RjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlcXVhcnRlcnMnXSA9IDB4MDBCRTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVxdWFydGVyc2VtZGFzaCddID0gMHhGNkRFO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZXJvbWFuJ10gPSAweDIxNzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlc3VwZXJpb3InXSA9IDB4MDBCMztcbiAgICAgICAgICAgICAgICAgICAgdFsndGhyZWV0aGFpJ10gPSAweDBFNTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RoenNxdWFyZSddID0gMHgzMzk0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aWhpcmFnYW5hJ10gPSAweDMwNjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Rpa2F0YWthbmEnXSA9IDB4MzBDMTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGlrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjgxO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aWtldXRhY2lyY2xla29yZWFuJ10gPSAweDMyNzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Rpa2V1dGFwYXJlbmtvcmVhbiddID0gMHgzMjEwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aWtldXRjaXJjbGVrb3JlYW4nXSA9IDB4MzI2MjtcbiAgICAgICAgICAgICAgICAgICAgdFsndGlrZXV0a29yZWFuJ10gPSAweDMxMzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Rpa2V1dHBhcmVua29yZWFuJ10gPSAweDMyMDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RpbGRlJ10gPSAweDAyREM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RpbGRlYmVsb3djbWInXSA9IDB4MDMzMDtcbiAgICAgICAgICAgICAgICAgICAgdFsndGlsZGVjbWInXSA9IDB4MDMwMztcbiAgICAgICAgICAgICAgICAgICAgdFsndGlsZGVjb21iJ10gPSAweDAzMDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RpbGRlZG91YmxlY21iJ10gPSAweDAzNjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RpbGRlb3BlcmF0b3InXSA9IDB4MjIzQztcbiAgICAgICAgICAgICAgICAgICAgdFsndGlsZGVvdmVybGF5Y21iJ10gPSAweDAzMzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RpbGRldmVydGljYWxjbWInXSA9IDB4MDMzRTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGltZXNjaXJjbGUnXSA9IDB4MjI5NztcbiAgICAgICAgICAgICAgICAgICAgdFsndGlwZWhhaGVicmV3J10gPSAweDA1OTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RpcGVoYWxlZnRoZWJyZXcnXSA9IDB4MDU5NjtcbiAgICAgICAgICAgICAgICAgICAgdFsndGlwcGlndXJtdWtoaSddID0gMHgwQTcwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aXRsb2N5cmlsbGljY21iJ10gPSAweDA0ODM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Rpd25hcm1lbmlhbiddID0gMHgwNTdGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0bGluZWJlbG93J10gPSAweDFFNkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Rtb25vc3BhY2UnXSA9IDB4RkY1NDtcbiAgICAgICAgICAgICAgICAgICAgdFsndG9hcm1lbmlhbiddID0gMHgwNTY5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0b2hpcmFnYW5hJ10gPSAweDMwNjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Rva2F0YWthbmEnXSA9IDB4MzBDODtcbiAgICAgICAgICAgICAgICAgICAgdFsndG9rYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjg0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0b25lYmFyZXh0cmFoaWdobW9kJ10gPSAweDAyRTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RvbmViYXJleHRyYWxvd21vZCddID0gMHgwMkU5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0b25lYmFyaGlnaG1vZCddID0gMHgwMkU2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0b25lYmFybG93bW9kJ10gPSAweDAyRTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RvbmViYXJtaWRtb2QnXSA9IDB4MDJFNztcbiAgICAgICAgICAgICAgICAgICAgdFsndG9uZWZpdmUnXSA9IDB4MDFCRDtcbiAgICAgICAgICAgICAgICAgICAgdFsndG9uZXNpeCddID0gMHgwMTg1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0b25ldHdvJ10gPSAweDAxQTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Rvbm9zJ10gPSAweDAzODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RvbnNxdWFyZSddID0gMHgzMzI3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0b3BhdGFrdGhhaSddID0gMHgwRTBGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0b3J0b2lzZXNoZWxsYnJhY2tldGxlZnQnXSA9IDB4MzAxNDtcbiAgICAgICAgICAgICAgICAgICAgdFsndG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0c21hbGwnXSA9IDB4RkU1RDtcbiAgICAgICAgICAgICAgICAgICAgdFsndG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0dmVydGljYWwnXSA9IDB4RkUzOTtcbiAgICAgICAgICAgICAgICAgICAgdFsndG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodCddID0gMHgzMDE1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0c21hbGwnXSA9IDB4RkU1RTtcbiAgICAgICAgICAgICAgICAgICAgdFsndG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHZlcnRpY2FsJ10gPSAweEZFM0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RvdGFvdGhhaSddID0gMHgwRTE1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0cGFsYXRhbGhvb2snXSA9IDB4MDFBQjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHBhcmVuJ10gPSAweDI0QUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RyYWRlbWFyayddID0gMHgyMTIyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0cmFkZW1hcmtzYW5zJ10gPSAweEY4RUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RyYWRlbWFya3NlcmlmJ10gPSAweEY2REI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RyZXRyb2ZsZXhob29rJ10gPSAweDAyODg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RyaWFnZG4nXSA9IDB4MjVCQztcbiAgICAgICAgICAgICAgICAgICAgdFsndHJpYWdsZiddID0gMHgyNUM0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0cmlhZ3J0J10gPSAweDI1QkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RyaWFndXAnXSA9IDB4MjVCMjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHMnXSA9IDB4MDJBNjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHNhZGknXSA9IDB4MDVFNjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHNhZGlkYWdlc2gnXSA9IDB4RkI0NjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHNhZGlkYWdlc2hoZWJyZXcnXSA9IDB4RkI0NjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHNhZGloZWJyZXcnXSA9IDB4MDVFNjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHNlY3lyaWxsaWMnXSA9IDB4MDQ0NjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHNlcmUnXSA9IDB4MDVCNTtcbiAgICAgICAgICAgICAgICAgICAgdFsndHNlcmUxMiddID0gMHgwNUI1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0c2VyZTFlJ10gPSAweDA1QjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RzZXJlMmInXSA9IDB4MDVCNTtcbiAgICAgICAgICAgICAgICAgICAgdFsndHNlcmVoZWJyZXcnXSA9IDB4MDVCNTtcbiAgICAgICAgICAgICAgICAgICAgdFsndHNlcmVuYXJyb3doZWJyZXcnXSA9IDB4MDVCNTtcbiAgICAgICAgICAgICAgICAgICAgdFsndHNlcmVxdWFydGVyaGVicmV3J10gPSAweDA1QjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RzZXJld2lkZWhlYnJldyddID0gMHgwNUI1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0c2hlY3lyaWxsaWMnXSA9IDB4MDQ1QjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHN1cGVyaW9yJ10gPSAweEY2RjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R0YWJlbmdhbGknXSA9IDB4MDk5RjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHRhZGV2YSddID0gMHgwOTFGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0dGFndWphcmF0aSddID0gMHgwQTlGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0dGFndXJtdWtoaSddID0gMHgwQTFGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0dGVoYXJhYmljJ10gPSAweDA2Nzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R0ZWhmaW5hbGFyYWJpYyddID0gMHhGQjY3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0dGVoaW5pdGlhbGFyYWJpYyddID0gMHhGQjY4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0dGVobWVkaWFsYXJhYmljJ10gPSAweEZCNjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R0aGFiZW5nYWxpJ10gPSAweDA5QTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R0aGFkZXZhJ10gPSAweDA5MjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R0aGFndWphcmF0aSddID0gMHgwQUEwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0dGhhZ3VybXVraGknXSA9IDB4MEEyMDtcbiAgICAgICAgICAgICAgICAgICAgdFsndHR1cm5lZCddID0gMHgwMjg3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0dWhpcmFnYW5hJ10gPSAweDMwNjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R1a2F0YWthbmEnXSA9IDB4MzBDNDtcbiAgICAgICAgICAgICAgICAgICAgdFsndHVrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjgyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0dXNtYWxsaGlyYWdhbmEnXSA9IDB4MzA2MztcbiAgICAgICAgICAgICAgICAgICAgdFsndHVzbWFsbGthdGFrYW5hJ10gPSAweDMwQzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R1c21hbGxrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjZGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d2VsdmVjaXJjbGUnXSA9IDB4MjQ2QjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHdlbHZlcGFyZW4nXSA9IDB4MjQ3RjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHdlbHZlcGVyaW9kJ10gPSAweDI0OTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R3ZWx2ZXJvbWFuJ10gPSAweDIxN0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R3ZW50eWNpcmNsZSddID0gMHgyNDczO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d2VudHloYW5nemhvdSddID0gMHg1MzQ0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d2VudHlwYXJlbiddID0gMHgyNDg3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d2VudHlwZXJpb2QnXSA9IDB4MjQ5QjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHdvJ10gPSAweDAwMzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R3b2FyYWJpYyddID0gMHgwNjYyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d29iZW5nYWxpJ10gPSAweDA5RTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R3b2NpcmNsZSddID0gMHgyNDYxO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d29jaXJjbGVpbnZlcnNlc2Fuc3NlcmlmJ10gPSAweDI3OEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R3b2RldmEnXSA9IDB4MDk2ODtcbiAgICAgICAgICAgICAgICAgICAgdFsndHdvZG90ZW5sZWFkZXInXSA9IDB4MjAyNTtcbiAgICAgICAgICAgICAgICAgICAgdFsndHdvZG90bGVhZGVyJ10gPSAweDIwMjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R3b2RvdGxlYWRlcnZlcnRpY2FsJ10gPSAweEZFMzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R3b2d1amFyYXRpJ10gPSAweDBBRTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R3b2d1cm11a2hpJ10gPSAweDBBNjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R3b2hhY2thcmFiaWMnXSA9IDB4MDY2MjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHdvaGFuZ3pob3UnXSA9IDB4MzAyMjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHdvaWRlb2dyYXBoaWNwYXJlbiddID0gMHgzMjIxO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d29pbmZlcmlvciddID0gMHgyMDgyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d29tb25vc3BhY2UnXSA9IDB4RkYxMjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHdvbnVtZXJhdG9yYmVuZ2FsaSddID0gMHgwOUY1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d29vbGRzdHlsZSddID0gMHhGNzMyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d29wYXJlbiddID0gMHgyNDc1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d29wZXJpb2QnXSA9IDB4MjQ4OTtcbiAgICAgICAgICAgICAgICAgICAgdFsndHdvcGVyc2lhbiddID0gMHgwNkYyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d29yb21hbiddID0gMHgyMTcxO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d29zdHJva2UnXSA9IDB4MDFCQjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHdvc3VwZXJpb3InXSA9IDB4MDBCMjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHdvdGhhaSddID0gMHgwRTUyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d290aGlyZHMnXSA9IDB4MjE1NDtcbiAgICAgICAgICAgICAgICAgICAgdFsndSddID0gMHgwMDc1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1YWN1dGUnXSA9IDB4MDBGQTtcbiAgICAgICAgICAgICAgICAgICAgdFsndWJhciddID0gMHgwMjg5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1YmVuZ2FsaSddID0gMHgwOTg5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1Ym9wb21vZm8nXSA9IDB4MzEyODtcbiAgICAgICAgICAgICAgICAgICAgdFsndWJyZXZlJ10gPSAweDAxNkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VjYXJvbiddID0gMHgwMUQ0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1Y2lyY2xlJ10gPSAweDI0RTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VjaXJjdW1mbGV4J10gPSAweDAwRkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VjaXJjdW1mbGV4YmVsb3cnXSA9IDB4MUU3NztcbiAgICAgICAgICAgICAgICAgICAgdFsndWN5cmlsbGljJ10gPSAweDA0NDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VkYXR0YWRldmEnXSA9IDB4MDk1MTtcbiAgICAgICAgICAgICAgICAgICAgdFsndWRibGFjdXRlJ10gPSAweDAxNzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VkYmxncmF2ZSddID0gMHgwMjE1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1ZGV2YSddID0gMHgwOTA5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1ZGllcmVzaXMnXSA9IDB4MDBGQztcbiAgICAgICAgICAgICAgICAgICAgdFsndWRpZXJlc2lzYWN1dGUnXSA9IDB4MDFEODtcbiAgICAgICAgICAgICAgICAgICAgdFsndWRpZXJlc2lzYmVsb3cnXSA9IDB4MUU3MztcbiAgICAgICAgICAgICAgICAgICAgdFsndWRpZXJlc2lzY2Fyb24nXSA9IDB4MDFEQTtcbiAgICAgICAgICAgICAgICAgICAgdFsndWRpZXJlc2lzY3lyaWxsaWMnXSA9IDB4MDRGMTtcbiAgICAgICAgICAgICAgICAgICAgdFsndWRpZXJlc2lzZ3JhdmUnXSA9IDB4MDFEQztcbiAgICAgICAgICAgICAgICAgICAgdFsndWRpZXJlc2lzbWFjcm9uJ10gPSAweDAxRDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Vkb3RiZWxvdyddID0gMHgxRUU1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1Z3JhdmUnXSA9IDB4MDBGOTtcbiAgICAgICAgICAgICAgICAgICAgdFsndWd1amFyYXRpJ10gPSAweDBBODk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VndXJtdWtoaSddID0gMHgwQTA5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1aGlyYWdhbmEnXSA9IDB4MzA0NjtcbiAgICAgICAgICAgICAgICAgICAgdFsndWhvb2thYm92ZSddID0gMHgxRUU3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1aG9ybiddID0gMHgwMUIwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1aG9ybmFjdXRlJ10gPSAweDFFRTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Vob3JuZG90YmVsb3cnXSA9IDB4MUVGMTtcbiAgICAgICAgICAgICAgICAgICAgdFsndWhvcm5ncmF2ZSddID0gMHgxRUVCO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1aG9ybmhvb2thYm92ZSddID0gMHgxRUVEO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1aG9ybnRpbGRlJ10gPSAweDFFRUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VodW5nYXJ1bWxhdXQnXSA9IDB4MDE3MTtcbiAgICAgICAgICAgICAgICAgICAgdFsndWh1bmdhcnVtbGF1dGN5cmlsbGljJ10gPSAweDA0RjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VpbnZlcnRlZGJyZXZlJ10gPSAweDAyMTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VrYXRha2FuYSddID0gMHgzMEE2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1a2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY3MztcbiAgICAgICAgICAgICAgICAgICAgdFsndWtjeXJpbGxpYyddID0gMHgwNDc5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1a29yZWFuJ10gPSAweDMxNUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VtYWNyb24nXSA9IDB4MDE2QjtcbiAgICAgICAgICAgICAgICAgICAgdFsndW1hY3JvbmN5cmlsbGljJ10gPSAweDA0RUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VtYWNyb25kaWVyZXNpcyddID0gMHgxRTdCO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1bWF0cmFndXJtdWtoaSddID0gMHgwQTQxO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1bW9ub3NwYWNlJ10gPSAweEZGNTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VuZGVyc2NvcmUnXSA9IDB4MDA1RjtcbiAgICAgICAgICAgICAgICAgICAgdFsndW5kZXJzY29yZWRibCddID0gMHgyMDE3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1bmRlcnNjb3JlbW9ub3NwYWNlJ10gPSAweEZGM0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VuZGVyc2NvcmV2ZXJ0aWNhbCddID0gMHhGRTMzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1bmRlcnNjb3Jld2F2eSddID0gMHhGRTRGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1bmlvbiddID0gMHgyMjJBO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1bml2ZXJzYWwnXSA9IDB4MjIwMDtcbiAgICAgICAgICAgICAgICAgICAgdFsndW9nb25layddID0gMHgwMTczO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1cGFyZW4nXSA9IDB4MjRCMDtcbiAgICAgICAgICAgICAgICAgICAgdFsndXBibG9jayddID0gMHgyNTgwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1cHBlcmRvdGhlYnJldyddID0gMHgwNUM0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1cHNpbG9uJ10gPSAweDAzQzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Vwc2lsb25kaWVyZXNpcyddID0gMHgwM0NCO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1cHNpbG9uZGllcmVzaXN0b25vcyddID0gMHgwM0IwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1cHNpbG9ubGF0aW4nXSA9IDB4MDI4QTtcbiAgICAgICAgICAgICAgICAgICAgdFsndXBzaWxvbnRvbm9zJ10gPSAweDAzQ0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VwdGFja2JlbG93Y21iJ10gPSAweDAzMUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VwdGFja21vZCddID0gMHgwMkQ0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1cmFndXJtdWtoaSddID0gMHgwQTczO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1cmluZyddID0gMHgwMTZGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1c2hvcnRjeXJpbGxpYyddID0gMHgwNDVFO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1c21hbGxoaXJhZ2FuYSddID0gMHgzMDQ1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1c21hbGxrYXRha2FuYSddID0gMHgzMEE1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1c21hbGxrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjY5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1c3RyYWlnaHRjeXJpbGxpYyddID0gMHgwNEFGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1c3RyYWlnaHRzdHJva2VjeXJpbGxpYyddID0gMHgwNEIxO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1dGlsZGUnXSA9IDB4MDE2OTtcbiAgICAgICAgICAgICAgICAgICAgdFsndXRpbGRlYWN1dGUnXSA9IDB4MUU3OTtcbiAgICAgICAgICAgICAgICAgICAgdFsndXRpbGRlYmVsb3cnXSA9IDB4MUU3NTtcbiAgICAgICAgICAgICAgICAgICAgdFsndXViZW5nYWxpJ10gPSAweDA5OEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3V1ZGV2YSddID0gMHgwOTBBO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1dWd1amFyYXRpJ10gPSAweDBBOEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3V1Z3VybXVraGknXSA9IDB4MEEwQTtcbiAgICAgICAgICAgICAgICAgICAgdFsndXVtYXRyYWd1cm11a2hpJ10gPSAweDBBNDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3V1dm93ZWxzaWduYmVuZ2FsaSddID0gMHgwOUMyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1dXZvd2Vsc2lnbmRldmEnXSA9IDB4MDk0MjtcbiAgICAgICAgICAgICAgICAgICAgdFsndXV2b3dlbHNpZ25ndWphcmF0aSddID0gMHgwQUMyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1dm93ZWxzaWduYmVuZ2FsaSddID0gMHgwOUMxO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1dm93ZWxzaWduZGV2YSddID0gMHgwOTQxO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1dm93ZWxzaWduZ3VqYXJhdGknXSA9IDB4MEFDMTtcbiAgICAgICAgICAgICAgICAgICAgdFsndiddID0gMHgwMDc2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd2YWRldmEnXSA9IDB4MDkzNTtcbiAgICAgICAgICAgICAgICAgICAgdFsndmFndWphcmF0aSddID0gMHgwQUI1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd2YWd1cm11a2hpJ10gPSAweDBBMzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Zha2F0YWthbmEnXSA9IDB4MzBGNztcbiAgICAgICAgICAgICAgICAgICAgdFsndmF2J10gPSAweDA1RDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3ZhdmRhZ2VzaCddID0gMHhGQjM1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd2YXZkYWdlc2g2NSddID0gMHhGQjM1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd2YXZkYWdlc2hoZWJyZXcnXSA9IDB4RkIzNTtcbiAgICAgICAgICAgICAgICAgICAgdFsndmF2aGVicmV3J10gPSAweDA1RDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3ZhdmhvbGFtJ10gPSAweEZCNEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3ZhdmhvbGFtaGVicmV3J10gPSAweEZCNEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3ZhdnZhdmhlYnJldyddID0gMHgwNUYwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd2YXZ5b2RoZWJyZXcnXSA9IDB4MDVGMTtcbiAgICAgICAgICAgICAgICAgICAgdFsndmNpcmNsZSddID0gMHgyNEU1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd2ZG90YmVsb3cnXSA9IDB4MUU3RjtcbiAgICAgICAgICAgICAgICAgICAgdFsndmVjeXJpbGxpYyddID0gMHgwNDMyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd2ZWhhcmFiaWMnXSA9IDB4MDZBNDtcbiAgICAgICAgICAgICAgICAgICAgdFsndmVoZmluYWxhcmFiaWMnXSA9IDB4RkI2QjtcbiAgICAgICAgICAgICAgICAgICAgdFsndmVoaW5pdGlhbGFyYWJpYyddID0gMHhGQjZDO1xuICAgICAgICAgICAgICAgICAgICB0Wyd2ZWhtZWRpYWxhcmFiaWMnXSA9IDB4RkI2RDtcbiAgICAgICAgICAgICAgICAgICAgdFsndmVrYXRha2FuYSddID0gMHgzMEY5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd2ZW51cyddID0gMHgyNjQwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd2ZXJ0aWNhbGJhciddID0gMHgwMDdDO1xuICAgICAgICAgICAgICAgICAgICB0Wyd2ZXJ0aWNhbGxpbmVhYm92ZWNtYiddID0gMHgwMzBEO1xuICAgICAgICAgICAgICAgICAgICB0Wyd2ZXJ0aWNhbGxpbmViZWxvd2NtYiddID0gMHgwMzI5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd2ZXJ0aWNhbGxpbmVsb3dtb2QnXSA9IDB4MDJDQztcbiAgICAgICAgICAgICAgICAgICAgdFsndmVydGljYWxsaW5lbW9kJ10gPSAweDAyQzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Zld2FybWVuaWFuJ10gPSAweDA1N0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Zob29rJ10gPSAweDAyOEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Zpa2F0YWthbmEnXSA9IDB4MzBGODtcbiAgICAgICAgICAgICAgICAgICAgdFsndmlyYW1hYmVuZ2FsaSddID0gMHgwOUNEO1xuICAgICAgICAgICAgICAgICAgICB0Wyd2aXJhbWFkZXZhJ10gPSAweDA5NEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3ZpcmFtYWd1amFyYXRpJ10gPSAweDBBQ0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Zpc2FyZ2FiZW5nYWxpJ10gPSAweDA5ODM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Zpc2FyZ2FkZXZhJ10gPSAweDA5MDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Zpc2FyZ2FndWphcmF0aSddID0gMHgwQTgzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd2bW9ub3NwYWNlJ10gPSAweEZGNTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3ZvYXJtZW5pYW4nXSA9IDB4MDU3ODtcbiAgICAgICAgICAgICAgICAgICAgdFsndm9pY2VkaXRlcmF0aW9uaGlyYWdhbmEnXSA9IDB4MzA5RTtcbiAgICAgICAgICAgICAgICAgICAgdFsndm9pY2VkaXRlcmF0aW9ua2F0YWthbmEnXSA9IDB4MzBGRTtcbiAgICAgICAgICAgICAgICAgICAgdFsndm9pY2VkbWFya2thbmEnXSA9IDB4MzA5QjtcbiAgICAgICAgICAgICAgICAgICAgdFsndm9pY2VkbWFya2thbmFoYWxmd2lkdGgnXSA9IDB4RkY5RTtcbiAgICAgICAgICAgICAgICAgICAgdFsndm9rYXRha2FuYSddID0gMHgzMEZBO1xuICAgICAgICAgICAgICAgICAgICB0Wyd2cGFyZW4nXSA9IDB4MjRCMTtcbiAgICAgICAgICAgICAgICAgICAgdFsndnRpbGRlJ10gPSAweDFFN0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Z0dXJuZWQnXSA9IDB4MDI4QztcbiAgICAgICAgICAgICAgICAgICAgdFsndnVoaXJhZ2FuYSddID0gMHgzMDk0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd2dWthdGFrYW5hJ10gPSAweDMwRjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3cnXSA9IDB4MDA3NztcbiAgICAgICAgICAgICAgICAgICAgdFsnd2FjdXRlJ10gPSAweDFFODM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dhZWtvcmVhbiddID0gMHgzMTU5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd3YWhpcmFnYW5hJ10gPSAweDMwOEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dha2F0YWthbmEnXSA9IDB4MzBFRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2FrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjlDO1xuICAgICAgICAgICAgICAgICAgICB0Wyd3YWtvcmVhbiddID0gMHgzMTU4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd3YXNtYWxsaGlyYWdhbmEnXSA9IDB4MzA4RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2FzbWFsbGthdGFrYW5hJ10gPSAweDMwRUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dhdHRvc3F1YXJlJ10gPSAweDMzNTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dhdmVkYXNoJ10gPSAweDMwMUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dhdnl1bmRlcnNjb3JldmVydGljYWwnXSA9IDB4RkUzNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2F3YXJhYmljJ10gPSAweDA2NDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dhd2ZpbmFsYXJhYmljJ10gPSAweEZFRUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dhd2hhbXphYWJvdmVhcmFiaWMnXSA9IDB4MDYyNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2F3aGFtemFhYm92ZWZpbmFsYXJhYmljJ10gPSAweEZFODY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dic3F1YXJlJ10gPSAweDMzREQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3djaXJjbGUnXSA9IDB4MjRFNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2NpcmN1bWZsZXgnXSA9IDB4MDE3NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2RpZXJlc2lzJ10gPSAweDFFODU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dkb3RhY2NlbnQnXSA9IDB4MUU4NztcbiAgICAgICAgICAgICAgICAgICAgdFsnd2RvdGJlbG93J10gPSAweDFFODk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dlaGlyYWdhbmEnXSA9IDB4MzA5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2VpZXJzdHJhc3MnXSA9IDB4MjExODtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2VrYXRha2FuYSddID0gMHgzMEYxO1xuICAgICAgICAgICAgICAgICAgICB0Wyd3ZWtvcmVhbiddID0gMHgzMTVFO1xuICAgICAgICAgICAgICAgICAgICB0Wyd3ZW9rb3JlYW4nXSA9IDB4MzE1RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2dyYXZlJ10gPSAweDFFODE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3doaXRlYnVsbGV0J10gPSAweDI1RTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3doaXRlY2lyY2xlJ10gPSAweDI1Q0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3doaXRlY2lyY2xlaW52ZXJzZSddID0gMHgyNUQ5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd3aGl0ZWNvcm5lcmJyYWNrZXRsZWZ0J10gPSAweDMwMEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3doaXRlY29ybmVyYnJhY2tldGxlZnR2ZXJ0aWNhbCddID0gMHhGRTQzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd3aGl0ZWNvcm5lcmJyYWNrZXRyaWdodCddID0gMHgzMDBGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd3aGl0ZWNvcm5lcmJyYWNrZXRyaWdodHZlcnRpY2FsJ10gPSAweEZFNDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3doaXRlZGlhbW9uZCddID0gMHgyNUM3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd3aGl0ZWRpYW1vbmRjb250YWluaW5nYmxhY2tzbWFsbGRpYW1vbmQnXSA9IDB4MjVDODtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2hpdGVkb3ducG9pbnRpbmdzbWFsbHRyaWFuZ2xlJ10gPSAweDI1QkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3doaXRlZG93bnBvaW50aW5ndHJpYW5nbGUnXSA9IDB4MjVCRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2hpdGVsZWZ0cG9pbnRpbmdzbWFsbHRyaWFuZ2xlJ10gPSAweDI1QzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3doaXRlbGVmdHBvaW50aW5ndHJpYW5nbGUnXSA9IDB4MjVDMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2hpdGVsZW50aWN1bGFyYnJhY2tldGxlZnQnXSA9IDB4MzAxNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2hpdGVsZW50aWN1bGFyYnJhY2tldHJpZ2h0J10gPSAweDMwMTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3doaXRlcmlnaHRwb2ludGluZ3NtYWxsdHJpYW5nbGUnXSA9IDB4MjVCOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2hpdGVyaWdodHBvaW50aW5ndHJpYW5nbGUnXSA9IDB4MjVCNztcbiAgICAgICAgICAgICAgICAgICAgdFsnd2hpdGVzbWFsbHNxdWFyZSddID0gMHgyNUFCO1xuICAgICAgICAgICAgICAgICAgICB0Wyd3aGl0ZXNtaWxpbmdmYWNlJ10gPSAweDI2M0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3doaXRlc3F1YXJlJ10gPSAweDI1QTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3doaXRlc3RhciddID0gMHgyNjA2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd3aGl0ZXRlbGVwaG9uZSddID0gMHgyNjBGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd3aGl0ZXRvcnRvaXNlc2hlbGxicmFja2V0bGVmdCddID0gMHgzMDE4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd3aGl0ZXRvcnRvaXNlc2hlbGxicmFja2V0cmlnaHQnXSA9IDB4MzAxOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2hpdGV1cHBvaW50aW5nc21hbGx0cmlhbmdsZSddID0gMHgyNUI1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd3aGl0ZXVwcG9pbnRpbmd0cmlhbmdsZSddID0gMHgyNUIzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd3aWhpcmFnYW5hJ10gPSAweDMwOTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dpa2F0YWthbmEnXSA9IDB4MzBGMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2lrb3JlYW4nXSA9IDB4MzE1RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnd21vbm9zcGFjZSddID0gMHhGRjU3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd3b2hpcmFnYW5hJ10gPSAweDMwOTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dva2F0YWthbmEnXSA9IDB4MzBGMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnd29rYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjY2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd3b24nXSA9IDB4MjBBOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnd29ubW9ub3NwYWNlJ10gPSAweEZGRTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dvd2FlbnRoYWknXSA9IDB4MEUyNztcbiAgICAgICAgICAgICAgICAgICAgdFsnd3BhcmVuJ10gPSAweDI0QjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dyaW5nJ10gPSAweDFFOTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dzdXBlcmlvciddID0gMHgwMkI3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd3dHVybmVkJ10gPSAweDAyOEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3d5bm4nXSA9IDB4MDFCRjtcbiAgICAgICAgICAgICAgICAgICAgdFsneCddID0gMHgwMDc4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd4YWJvdmVjbWInXSA9IDB4MDMzRDtcbiAgICAgICAgICAgICAgICAgICAgdFsneGJvcG9tb2ZvJ10gPSAweDMxMTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3hjaXJjbGUnXSA9IDB4MjRFNztcbiAgICAgICAgICAgICAgICAgICAgdFsneGRpZXJlc2lzJ10gPSAweDFFOEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3hkb3RhY2NlbnQnXSA9IDB4MUU4QjtcbiAgICAgICAgICAgICAgICAgICAgdFsneGVoYXJtZW5pYW4nXSA9IDB4MDU2RDtcbiAgICAgICAgICAgICAgICAgICAgdFsneGknXSA9IDB4MDNCRTtcbiAgICAgICAgICAgICAgICAgICAgdFsneG1vbm9zcGFjZSddID0gMHhGRjU4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd4cGFyZW4nXSA9IDB4MjRCMztcbiAgICAgICAgICAgICAgICAgICAgdFsneHN1cGVyaW9yJ10gPSAweDAyRTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3knXSA9IDB4MDA3OTtcbiAgICAgICAgICAgICAgICAgICAgdFsneWFhZG9zcXVhcmUnXSA9IDB4MzM0RTtcbiAgICAgICAgICAgICAgICAgICAgdFsneWFiZW5nYWxpJ10gPSAweDA5QUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lhY3V0ZSddID0gMHgwMEZEO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5YWRldmEnXSA9IDB4MDkyRjtcbiAgICAgICAgICAgICAgICAgICAgdFsneWFla29yZWFuJ10gPSAweDMxNTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lhZ3VqYXJhdGknXSA9IDB4MEFBRjtcbiAgICAgICAgICAgICAgICAgICAgdFsneWFndXJtdWtoaSddID0gMHgwQTJGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5YWhpcmFnYW5hJ10gPSAweDMwODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lha2F0YWthbmEnXSA9IDB4MzBFNDtcbiAgICAgICAgICAgICAgICAgICAgdFsneWFrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjk0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5YWtvcmVhbiddID0gMHgzMTUxO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5YW1ha2thbnRoYWknXSA9IDB4MEU0RTtcbiAgICAgICAgICAgICAgICAgICAgdFsneWFzbWFsbGhpcmFnYW5hJ10gPSAweDMwODM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lhc21hbGxrYXRha2FuYSddID0gMHgzMEUzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5YXNtYWxsa2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY2QztcbiAgICAgICAgICAgICAgICAgICAgdFsneWF0Y3lyaWxsaWMnXSA9IDB4MDQ2MztcbiAgICAgICAgICAgICAgICAgICAgdFsneWNpcmNsZSddID0gMHgyNEU4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5Y2lyY3VtZmxleCddID0gMHgwMTc3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5ZGllcmVzaXMnXSA9IDB4MDBGRjtcbiAgICAgICAgICAgICAgICAgICAgdFsneWRvdGFjY2VudCddID0gMHgxRThGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5ZG90YmVsb3cnXSA9IDB4MUVGNTtcbiAgICAgICAgICAgICAgICAgICAgdFsneWVoYXJhYmljJ10gPSAweDA2NEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3llaGJhcnJlZWFyYWJpYyddID0gMHgwNkQyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5ZWhiYXJyZWVmaW5hbGFyYWJpYyddID0gMHhGQkFGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5ZWhmaW5hbGFyYWJpYyddID0gMHhGRUYyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5ZWhoYW16YWFib3ZlYXJhYmljJ10gPSAweDA2MjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3llaGhhbXphYWJvdmVmaW5hbGFyYWJpYyddID0gMHhGRThBO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5ZWhoYW16YWFib3ZlaW5pdGlhbGFyYWJpYyddID0gMHhGRThCO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5ZWhoYW16YWFib3ZlbWVkaWFsYXJhYmljJ10gPSAweEZFOEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3llaGluaXRpYWxhcmFiaWMnXSA9IDB4RkVGMztcbiAgICAgICAgICAgICAgICAgICAgdFsneWVobWVkaWFsYXJhYmljJ10gPSAweEZFRjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3llaG1lZW1pbml0aWFsYXJhYmljJ10gPSAweEZDREQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3llaG1lZW1pc29sYXRlZGFyYWJpYyddID0gMHhGQzU4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5ZWhub29uZmluYWxhcmFiaWMnXSA9IDB4RkM5NDtcbiAgICAgICAgICAgICAgICAgICAgdFsneWVodGhyZWVkb3RzYmVsb3dhcmFiaWMnXSA9IDB4MDZEMTtcbiAgICAgICAgICAgICAgICAgICAgdFsneWVrb3JlYW4nXSA9IDB4MzE1NjtcbiAgICAgICAgICAgICAgICAgICAgdFsneWVuJ10gPSAweDAwQTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3llbm1vbm9zcGFjZSddID0gMHhGRkU1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5ZW9rb3JlYW4nXSA9IDB4MzE1NTtcbiAgICAgICAgICAgICAgICAgICAgdFsneWVvcmluaGlldWhrb3JlYW4nXSA9IDB4MzE4NjtcbiAgICAgICAgICAgICAgICAgICAgdFsneWVyYWhiZW55b21vaGVicmV3J10gPSAweDA1QUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3llcmFoYmVueW9tb2xlZnRoZWJyZXcnXSA9IDB4MDVBQTtcbiAgICAgICAgICAgICAgICAgICAgdFsneWVyaWN5cmlsbGljJ10gPSAweDA0NEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3llcnVkaWVyZXNpc2N5cmlsbGljJ10gPSAweDA0Rjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3llc2lldW5na29yZWFuJ10gPSAweDMxODE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3llc2lldW5ncGFuc2lvc2tvcmVhbiddID0gMHgzMTgzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5ZXNpZXVuZ3Npb3Nrb3JlYW4nXSA9IDB4MzE4MjtcbiAgICAgICAgICAgICAgICAgICAgdFsneWV0aXZoZWJyZXcnXSA9IDB4MDU5QTtcbiAgICAgICAgICAgICAgICAgICAgdFsneWdyYXZlJ10gPSAweDFFRjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lob29rJ10gPSAweDAxQjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lob29rYWJvdmUnXSA9IDB4MUVGNztcbiAgICAgICAgICAgICAgICAgICAgdFsneWlhcm1lbmlhbiddID0gMHgwNTc1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5aWN5cmlsbGljJ10gPSAweDA0NTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lpa29yZWFuJ10gPSAweDMxNjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lpbnlhbmcnXSA9IDB4MjYyRjtcbiAgICAgICAgICAgICAgICAgICAgdFsneWl3bmFybWVuaWFuJ10gPSAweDA1ODI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3ltb25vc3BhY2UnXSA9IDB4RkY1OTtcbiAgICAgICAgICAgICAgICAgICAgdFsneW9kJ10gPSAweDA1RDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lvZGRhZ2VzaCddID0gMHhGQjM5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5b2RkYWdlc2hoZWJyZXcnXSA9IDB4RkIzOTtcbiAgICAgICAgICAgICAgICAgICAgdFsneW9kaGVicmV3J10gPSAweDA1RDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lvZHlvZGhlYnJldyddID0gMHgwNUYyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5b2R5b2RwYXRhaGhlYnJldyddID0gMHhGQjFGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5b2hpcmFnYW5hJ10gPSAweDMwODg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lvaWtvcmVhbiddID0gMHgzMTg5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5b2thdGFrYW5hJ10gPSAweDMwRTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lva2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY5NjtcbiAgICAgICAgICAgICAgICAgICAgdFsneW9rb3JlYW4nXSA9IDB4MzE1QjtcbiAgICAgICAgICAgICAgICAgICAgdFsneW9zbWFsbGhpcmFnYW5hJ10gPSAweDMwODc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lvc21hbGxrYXRha2FuYSddID0gMHgzMEU3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5b3NtYWxsa2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY2RTtcbiAgICAgICAgICAgICAgICAgICAgdFsneW90Z3JlZWsnXSA9IDB4MDNGMztcbiAgICAgICAgICAgICAgICAgICAgdFsneW95YWVrb3JlYW4nXSA9IDB4MzE4ODtcbiAgICAgICAgICAgICAgICAgICAgdFsneW95YWtvcmVhbiddID0gMHgzMTg3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5b3lha3RoYWknXSA9IDB4MEUyMjtcbiAgICAgICAgICAgICAgICAgICAgdFsneW95aW5ndGhhaSddID0gMHgwRTBEO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5cGFyZW4nXSA9IDB4MjRCNDtcbiAgICAgICAgICAgICAgICAgICAgdFsneXBvZ2VncmFtbWVuaSddID0gMHgwMzdBO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5cG9nZWdyYW1tZW5pZ3JlZWtjbWInXSA9IDB4MDM0NTtcbiAgICAgICAgICAgICAgICAgICAgdFsneXInXSA9IDB4MDFBNjtcbiAgICAgICAgICAgICAgICAgICAgdFsneXJpbmcnXSA9IDB4MUU5OTtcbiAgICAgICAgICAgICAgICAgICAgdFsneXN1cGVyaW9yJ10gPSAweDAyQjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3l0aWxkZSddID0gMHgxRUY5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5dHVybmVkJ10gPSAweDAyOEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3l1aGlyYWdhbmEnXSA9IDB4MzA4NjtcbiAgICAgICAgICAgICAgICAgICAgdFsneXVpa29yZWFuJ10gPSAweDMxOEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3l1a2F0YWthbmEnXSA9IDB4MzBFNjtcbiAgICAgICAgICAgICAgICAgICAgdFsneXVrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjk1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5dWtvcmVhbiddID0gMHgzMTYwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5dXNiaWdjeXJpbGxpYyddID0gMHgwNDZCO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5dXNiaWdpb3RpZmllZGN5cmlsbGljJ10gPSAweDA0NkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3l1c2xpdHRsZWN5cmlsbGljJ10gPSAweDA0Njc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3l1c2xpdHRsZWlvdGlmaWVkY3lyaWxsaWMnXSA9IDB4MDQ2OTtcbiAgICAgICAgICAgICAgICAgICAgdFsneXVzbWFsbGhpcmFnYW5hJ10gPSAweDMwODU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3l1c21hbGxrYXRha2FuYSddID0gMHgzMEU1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5dXNtYWxsa2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY2RDtcbiAgICAgICAgICAgICAgICAgICAgdFsneXV5ZWtvcmVhbiddID0gMHgzMThCO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5dXllb2tvcmVhbiddID0gMHgzMThBO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5eWFiZW5nYWxpJ10gPSAweDA5REY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3l5YWRldmEnXSA9IDB4MDk1RjtcbiAgICAgICAgICAgICAgICAgICAgdFsneiddID0gMHgwMDdBO1xuICAgICAgICAgICAgICAgICAgICB0Wyd6YWFybWVuaWFuJ10gPSAweDA1NjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3phY3V0ZSddID0gMHgwMTdBO1xuICAgICAgICAgICAgICAgICAgICB0Wyd6YWRldmEnXSA9IDB4MDk1QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnemFndXJtdWtoaSddID0gMHgwQTVCO1xuICAgICAgICAgICAgICAgICAgICB0Wyd6YWhhcmFiaWMnXSA9IDB4MDYzODtcbiAgICAgICAgICAgICAgICAgICAgdFsnemFoZmluYWxhcmFiaWMnXSA9IDB4RkVDNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnemFoaW5pdGlhbGFyYWJpYyddID0gMHhGRUM3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd6YWhpcmFnYW5hJ10gPSAweDMwNTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3phaG1lZGlhbGFyYWJpYyddID0gMHhGRUM4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd6YWluYXJhYmljJ10gPSAweDA2MzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3phaW5maW5hbGFyYWJpYyddID0gMHhGRUIwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd6YWthdGFrYW5hJ10gPSAweDMwQjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3phcWVmZ2Fkb2xoZWJyZXcnXSA9IDB4MDU5NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnemFxZWZxYXRhbmhlYnJldyddID0gMHgwNTk0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd6YXJxYWhlYnJldyddID0gMHgwNTk4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd6YXlpbiddID0gMHgwNUQ2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd6YXlpbmRhZ2VzaCddID0gMHhGQjM2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd6YXlpbmRhZ2VzaGhlYnJldyddID0gMHhGQjM2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd6YXlpbmhlYnJldyddID0gMHgwNUQ2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd6Ym9wb21vZm8nXSA9IDB4MzExNztcbiAgICAgICAgICAgICAgICAgICAgdFsnemNhcm9uJ10gPSAweDAxN0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3pjaXJjbGUnXSA9IDB4MjRFOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnemNpcmN1bWZsZXgnXSA9IDB4MUU5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnemN1cmwnXSA9IDB4MDI5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnemRvdCddID0gMHgwMTdDO1xuICAgICAgICAgICAgICAgICAgICB0Wyd6ZG90YWNjZW50J10gPSAweDAxN0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3pkb3RiZWxvdyddID0gMHgxRTkzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd6ZWN5cmlsbGljJ10gPSAweDA0Mzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3plZGVzY2VuZGVyY3lyaWxsaWMnXSA9IDB4MDQ5OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnemVkaWVyZXNpc2N5cmlsbGljJ10gPSAweDA0REY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3plaGlyYWdhbmEnXSA9IDB4MzA1QztcbiAgICAgICAgICAgICAgICAgICAgdFsnemVrYXRha2FuYSddID0gMHgzMEJDO1xuICAgICAgICAgICAgICAgICAgICB0Wyd6ZXJvJ10gPSAweDAwMzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3plcm9hcmFiaWMnXSA9IDB4MDY2MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnemVyb2JlbmdhbGknXSA9IDB4MDlFNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnemVyb2RldmEnXSA9IDB4MDk2NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnemVyb2d1amFyYXRpJ10gPSAweDBBRTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3plcm9ndXJtdWtoaSddID0gMHgwQTY2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd6ZXJvaGFja2FyYWJpYyddID0gMHgwNjYwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd6ZXJvaW5mZXJpb3InXSA9IDB4MjA4MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnemVyb21vbm9zcGFjZSddID0gMHhGRjEwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd6ZXJvb2xkc3R5bGUnXSA9IDB4RjczMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnemVyb3BlcnNpYW4nXSA9IDB4MDZGMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnemVyb3N1cGVyaW9yJ10gPSAweDIwNzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3plcm90aGFpJ10gPSAweDBFNTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3plcm93aWR0aGpvaW5lciddID0gMHhGRUZGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd6ZXJvd2lkdGhub25qb2luZXInXSA9IDB4MjAwQztcbiAgICAgICAgICAgICAgICAgICAgdFsnemVyb3dpZHRoc3BhY2UnXSA9IDB4MjAwQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnemV0YSddID0gMHgwM0I2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd6aGJvcG9tb2ZvJ10gPSAweDMxMTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3poZWFybWVuaWFuJ10gPSAweDA1NkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3poZWJyZXZlY3lyaWxsaWMnXSA9IDB4MDRDMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnemhlY3lyaWxsaWMnXSA9IDB4MDQzNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnemhlZGVzY2VuZGVyY3lyaWxsaWMnXSA9IDB4MDQ5NztcbiAgICAgICAgICAgICAgICAgICAgdFsnemhlZGllcmVzaXNjeXJpbGxpYyddID0gMHgwNEREO1xuICAgICAgICAgICAgICAgICAgICB0Wyd6aWhpcmFnYW5hJ10gPSAweDMwNTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3ppa2F0YWthbmEnXSA9IDB4MzBCODtcbiAgICAgICAgICAgICAgICAgICAgdFsnemlub3JoZWJyZXcnXSA9IDB4MDVBRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnemxpbmViZWxvdyddID0gMHgxRTk1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd6bW9ub3NwYWNlJ10gPSAweEZGNUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3pvaGlyYWdhbmEnXSA9IDB4MzA1RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnem9rYXRha2FuYSddID0gMHgzMEJFO1xuICAgICAgICAgICAgICAgICAgICB0Wyd6cGFyZW4nXSA9IDB4MjRCNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnenJldHJvZmxleGhvb2snXSA9IDB4MDI5MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnenN0cm9rZSddID0gMHgwMUI2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd6dWhpcmFnYW5hJ10gPSAweDMwNUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3p1a2F0YWthbmEnXSA9IDB4MzBCQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnLm5vdGRlZiddID0gMHgwMDAwO1xuICAgICAgICAgICAgICAgICAgICB0WydhbmdicmFja2V0bGVmdGJpZyddID0gMHgyMzI5O1xuICAgICAgICAgICAgICAgICAgICB0WydhbmdicmFja2V0bGVmdEJpZyddID0gMHgyMzI5O1xuICAgICAgICAgICAgICAgICAgICB0WydhbmdicmFja2V0bGVmdGJpZ2cnXSA9IDB4MjMyOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYW5nYnJhY2tldGxlZnRCaWdnJ10gPSAweDIzMjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FuZ2JyYWNrZXRyaWdodEJpZyddID0gMHgyMzJBO1xuICAgICAgICAgICAgICAgICAgICB0WydhbmdicmFja2V0cmlnaHRiaWcnXSA9IDB4MjMyQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYW5nYnJhY2tldHJpZ2h0QmlnZyddID0gMHgyMzJBO1xuICAgICAgICAgICAgICAgICAgICB0WydhbmdicmFja2V0cmlnaHRiaWdnJ10gPSAweDIzMkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93aG9va2xlZnQnXSA9IDB4MjFBQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dob29rcmlnaHQnXSA9IDB4MjFBOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dsZWZ0dG9waGFsZiddID0gMHgyMUJDO1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd2xlZnRib3RoYWxmJ10gPSAweDIxQkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93bm9ydGhlYXN0J10gPSAweDIxOTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93bm9ydGh3ZXN0J10gPSAweDIxOTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93cmlnaHR0b3BoYWxmJ10gPSAweDIxQzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93cmlnaHRib3RoYWxmJ10gPSAweDIxQzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93c291dGhlYXN0J10gPSAweDIxOTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93c291dGh3ZXN0J10gPSAweDIxOTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JhY2tzbGFzaGJpZyddID0gMHgyMjE2O1xuICAgICAgICAgICAgICAgICAgICB0WydiYWNrc2xhc2hCaWcnXSA9IDB4MjIxNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmFja3NsYXNoQmlnZyddID0gMHgyMjE2O1xuICAgICAgICAgICAgICAgICAgICB0WydiYWNrc2xhc2hiaWdnJ10gPSAweDIyMTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JhcmRibCddID0gMHgyMDE2O1xuICAgICAgICAgICAgICAgICAgICB0WydicmFjZWh0aXBkb3dubGVmdCddID0gMHhGRTM3O1xuICAgICAgICAgICAgICAgICAgICB0WydicmFjZWh0aXBkb3ducmlnaHQnXSA9IDB4RkUzNztcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VodGlwdXBsZWZ0J10gPSAweEZFMzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlaHRpcHVwcmlnaHQnXSA9IDB4RkUzODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VsZWZ0QmlnJ10gPSAweDAwN0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlbGVmdGJpZyddID0gMHgwMDdCO1xuICAgICAgICAgICAgICAgICAgICB0WydicmFjZWxlZnRiaWdnJ10gPSAweDAwN0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlbGVmdEJpZ2cnXSA9IDB4MDA3QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VyaWdodEJpZyddID0gMHgwMDdEO1xuICAgICAgICAgICAgICAgICAgICB0WydicmFjZXJpZ2h0YmlnJ10gPSAweDAwN0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlcmlnaHRiaWdnJ10gPSAweDAwN0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlcmlnaHRCaWdnJ10gPSAweDAwN0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRsZWZ0YmlnJ10gPSAweDAwNUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRsZWZ0QmlnJ10gPSAweDAwNUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRsZWZ0YmlnZyddID0gMHgwMDVCO1xuICAgICAgICAgICAgICAgICAgICB0WydicmFja2V0bGVmdEJpZ2cnXSA9IDB4MDA1QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldHJpZ2h0QmlnJ10gPSAweDAwNUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRyaWdodGJpZyddID0gMHgwMDVEO1xuICAgICAgICAgICAgICAgICAgICB0WydicmFja2V0cmlnaHRiaWdnJ10gPSAweDAwNUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRyaWdodEJpZ2cnXSA9IDB4MDA1RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2VpbGluZ2xlZnRiaWcnXSA9IDB4MjMwODtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2VpbGluZ2xlZnRCaWcnXSA9IDB4MjMwODtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2VpbGluZ2xlZnRCaWdnJ10gPSAweDIzMDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NlaWxpbmdsZWZ0YmlnZyddID0gMHgyMzA4O1xuICAgICAgICAgICAgICAgICAgICB0WydjZWlsaW5ncmlnaHRiaWcnXSA9IDB4MjMwOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2VpbGluZ3JpZ2h0QmlnJ10gPSAweDIzMDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NlaWxpbmdyaWdodGJpZ2cnXSA9IDB4MjMwOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2VpbGluZ3JpZ2h0QmlnZyddID0gMHgyMzA5O1xuICAgICAgICAgICAgICAgICAgICB0WydjaXJjbGVkb3RkaXNwbGF5J10gPSAweDIyOTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NpcmNsZWRvdHRleHQnXSA9IDB4MjI5OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2lyY2xlbXVsdGlwbHlkaXNwbGF5J10gPSAweDIyOTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NpcmNsZW11bHRpcGx5dGV4dCddID0gMHgyMjk3O1xuICAgICAgICAgICAgICAgICAgICB0WydjaXJjbGVwbHVzZGlzcGxheSddID0gMHgyMjk1O1xuICAgICAgICAgICAgICAgICAgICB0WydjaXJjbGVwbHVzdGV4dCddID0gMHgyMjk1O1xuICAgICAgICAgICAgICAgICAgICB0Wydjb250aW50ZWdyYWxkaXNwbGF5J10gPSAweDIyMkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRpbnRlZ3JhbHRleHQnXSA9IDB4MjIyRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29wcm9kdWN0ZGlzcGxheSddID0gMHgyMjEwO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb3Byb2R1Y3R0ZXh0J10gPSAweDIyMTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Zsb29ybGVmdEJpZyddID0gMHgyMzBBO1xuICAgICAgICAgICAgICAgICAgICB0WydmbG9vcmxlZnRiaWcnXSA9IDB4MjMwQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmxvb3JsZWZ0YmlnZyddID0gMHgyMzBBO1xuICAgICAgICAgICAgICAgICAgICB0WydmbG9vcmxlZnRCaWdnJ10gPSAweDIzMEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Zsb29ycmlnaHRiaWcnXSA9IDB4MjMwQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmxvb3JyaWdodEJpZyddID0gMHgyMzBCO1xuICAgICAgICAgICAgICAgICAgICB0WydmbG9vcnJpZ2h0QmlnZyddID0gMHgyMzBCO1xuICAgICAgICAgICAgICAgICAgICB0WydmbG9vcnJpZ2h0YmlnZyddID0gMHgyMzBCO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXR3aWRlJ10gPSAweDAzMDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhdHdpZGVyJ10gPSAweDAzMDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhdHdpZGVzdCddID0gMHgwMzAyO1xuICAgICAgICAgICAgICAgICAgICB0WydpbnRlcmNhbCddID0gMHgxRDQwO1xuICAgICAgICAgICAgICAgICAgICB0WydpbnRlZ3JhbGRpc3BsYXknXSA9IDB4MjIyQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaW50ZWdyYWx0ZXh0J10gPSAweDIyMkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ludGVyc2VjdGlvbmRpc3BsYXknXSA9IDB4MjJDMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaW50ZXJzZWN0aW9udGV4dCddID0gMHgyMkMyO1xuICAgICAgICAgICAgICAgICAgICB0Wydsb2dpY2FsYW5kZGlzcGxheSddID0gMHgyMjI3O1xuICAgICAgICAgICAgICAgICAgICB0Wydsb2dpY2FsYW5kdGV4dCddID0gMHgyMjI3O1xuICAgICAgICAgICAgICAgICAgICB0Wydsb2dpY2Fsb3JkaXNwbGF5J10gPSAweDIyMjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xvZ2ljYWxvcnRleHQnXSA9IDB4MjIyODtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5sZWZ0QmlnJ10gPSAweDAwMjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVubGVmdGJpZyddID0gMHgwMDI4O1xuICAgICAgICAgICAgICAgICAgICB0WydwYXJlbmxlZnRCaWdnJ10gPSAweDAwMjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVubGVmdGJpZ2cnXSA9IDB4MDAyODtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5yaWdodEJpZyddID0gMHgwMDI5O1xuICAgICAgICAgICAgICAgICAgICB0WydwYXJlbnJpZ2h0YmlnJ10gPSAweDAwMjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVucmlnaHRCaWdnJ10gPSAweDAwMjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVucmlnaHRiaWdnJ10gPSAweDAwMjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3ByaW1lJ10gPSAweDIwMzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Byb2R1Y3RkaXNwbGF5J10gPSAweDIyMEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Byb2R1Y3R0ZXh0J10gPSAweDIyMEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JhZGljYWxiaWcnXSA9IDB4MjIxQTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmFkaWNhbEJpZyddID0gMHgyMjFBO1xuICAgICAgICAgICAgICAgICAgICB0WydyYWRpY2FsQmlnZyddID0gMHgyMjFBO1xuICAgICAgICAgICAgICAgICAgICB0WydyYWRpY2FsYmlnZyddID0gMHgyMjFBO1xuICAgICAgICAgICAgICAgICAgICB0WydyYWRpY2FsYnQnXSA9IDB4MjIxQTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmFkaWNhbHRwJ10gPSAweDIyMUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JhZGljYWx2ZXJ0ZXgnXSA9IDB4MjIxQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2xhc2hiaWcnXSA9IDB4MDAyRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2xhc2hCaWcnXSA9IDB4MDAyRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2xhc2hCaWdnJ10gPSAweDAwMkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NsYXNoYmlnZyddID0gMHgwMDJGO1xuICAgICAgICAgICAgICAgICAgICB0WydzdW1tYXRpb25kaXNwbGF5J10gPSAweDIyMTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3N1bW1hdGlvbnRleHQnXSA9IDB4MjIxMTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGlsZGV3aWRlJ10gPSAweDAyREM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RpbGRld2lkZXInXSA9IDB4MDJEQztcbiAgICAgICAgICAgICAgICAgICAgdFsndGlsZGV3aWRlc3QnXSA9IDB4MDJEQztcbiAgICAgICAgICAgICAgICAgICAgdFsndW5pb25kaXNwbGF5J10gPSAweDIyQzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VuaW9ubXVsdGlkaXNwbGF5J10gPSAweDIyOEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VuaW9ubXVsdGl0ZXh0J10gPSAweDIyOEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VuaW9uc3FkaXNwbGF5J10gPSAweDIyOTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VuaW9uc3F0ZXh0J10gPSAweDIyOTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VuaW9udGV4dCddID0gMHgyMkMzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd2ZXh0ZW5kZG91YmxlJ10gPSAweDIyMjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3ZleHRlbmRzaW5nbGUnXSA9IDB4MjIyMztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB2YXIgZ2V0RGluZ2JhdHNHbHlwaHNVbmljb2RlID0gZ2V0TG9va3VwVGFibGVGYWN0b3J5KGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NwYWNlJ10gPSAweDAwMjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExJ10gPSAweDI3MDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EyJ10gPSAweDI3MDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EyMDInXSA9IDB4MjcwMztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTMnXSA9IDB4MjcwNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTQnXSA9IDB4MjYwRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTUnXSA9IDB4MjcwNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTExOSddID0gMHgyNzA3O1xuICAgICAgICAgICAgICAgICAgICB0WydhMTE4J10gPSAweDI3MDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMTcnXSA9IDB4MjcwOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTExJ10gPSAweDI2MUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMiddID0gMHgyNjFFO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTMnXSA9IDB4MjcwQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE0J10gPSAweDI3MEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNSddID0gMHgyNzBFO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTYnXSA9IDB4MjcwRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTEwNSddID0gMHgyNzEwO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTcnXSA9IDB4MjcxMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE4J10gPSAweDI3MTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExOSddID0gMHgyNzEzO1xuICAgICAgICAgICAgICAgICAgICB0WydhMjAnXSA9IDB4MjcxNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTIxJ10gPSAweDI3MTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EyMiddID0gMHgyNzE2O1xuICAgICAgICAgICAgICAgICAgICB0WydhMjMnXSA9IDB4MjcxNztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTI0J10gPSAweDI3MTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EyNSddID0gMHgyNzE5O1xuICAgICAgICAgICAgICAgICAgICB0WydhMjYnXSA9IDB4MjcxQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTI3J10gPSAweDI3MUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EyOCddID0gMHgyNzFDO1xuICAgICAgICAgICAgICAgICAgICB0WydhNiddID0gMHgyNzFEO1xuICAgICAgICAgICAgICAgICAgICB0WydhNyddID0gMHgyNzFFO1xuICAgICAgICAgICAgICAgICAgICB0WydhOCddID0gMHgyNzFGO1xuICAgICAgICAgICAgICAgICAgICB0WydhOSddID0gMHgyNzIwO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTAnXSA9IDB4MjcyMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTI5J10gPSAweDI3MjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EzMCddID0gMHgyNzIzO1xuICAgICAgICAgICAgICAgICAgICB0WydhMzEnXSA9IDB4MjcyNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTMyJ10gPSAweDI3MjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EzMyddID0gMHgyNzI2O1xuICAgICAgICAgICAgICAgICAgICB0WydhMzQnXSA9IDB4MjcyNztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTM1J10gPSAweDI2MDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EzNiddID0gMHgyNzI5O1xuICAgICAgICAgICAgICAgICAgICB0WydhMzcnXSA9IDB4MjcyQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTM4J10gPSAweDI3MkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EzOSddID0gMHgyNzJDO1xuICAgICAgICAgICAgICAgICAgICB0WydhNDAnXSA9IDB4MjcyRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTQxJ10gPSAweDI3MkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E0MiddID0gMHgyNzJGO1xuICAgICAgICAgICAgICAgICAgICB0WydhNDMnXSA9IDB4MjczMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTQ0J10gPSAweDI3MzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E0NSddID0gMHgyNzMyO1xuICAgICAgICAgICAgICAgICAgICB0WydhNDYnXSA9IDB4MjczMztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTQ3J10gPSAweDI3MzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E0OCddID0gMHgyNzM1O1xuICAgICAgICAgICAgICAgICAgICB0WydhNDknXSA9IDB4MjczNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTUwJ10gPSAweDI3Mzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E1MSddID0gMHgyNzM4O1xuICAgICAgICAgICAgICAgICAgICB0WydhNTInXSA9IDB4MjczOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTUzJ10gPSAweDI3M0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E1NCddID0gMHgyNzNCO1xuICAgICAgICAgICAgICAgICAgICB0WydhNTUnXSA9IDB4MjczQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTU2J10gPSAweDI3M0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E1NyddID0gMHgyNzNFO1xuICAgICAgICAgICAgICAgICAgICB0WydhNTgnXSA9IDB4MjczRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTU5J10gPSAweDI3NDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E2MCddID0gMHgyNzQxO1xuICAgICAgICAgICAgICAgICAgICB0WydhNjEnXSA9IDB4Mjc0MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTYyJ10gPSAweDI3NDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E2MyddID0gMHgyNzQ0O1xuICAgICAgICAgICAgICAgICAgICB0WydhNjQnXSA9IDB4Mjc0NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTY1J10gPSAweDI3NDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E2NiddID0gMHgyNzQ3O1xuICAgICAgICAgICAgICAgICAgICB0WydhNjcnXSA9IDB4Mjc0ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTY4J10gPSAweDI3NDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E2OSddID0gMHgyNzRBO1xuICAgICAgICAgICAgICAgICAgICB0WydhNzAnXSA9IDB4Mjc0QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTcxJ10gPSAweDI1Q0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E3MiddID0gMHgyNzREO1xuICAgICAgICAgICAgICAgICAgICB0WydhNzMnXSA9IDB4MjVBMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTc0J10gPSAweDI3NEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EyMDMnXSA9IDB4Mjc1MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTc1J10gPSAweDI3NTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EyMDQnXSA9IDB4Mjc1MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTc2J10gPSAweDI1QjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E3NyddID0gMHgyNUJDO1xuICAgICAgICAgICAgICAgICAgICB0WydhNzgnXSA9IDB4MjVDNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTc5J10gPSAweDI3NTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E4MSddID0gMHgyNUQ3O1xuICAgICAgICAgICAgICAgICAgICB0WydhODInXSA9IDB4Mjc1ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTgzJ10gPSAweDI3NTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E4NCddID0gMHgyNzVBO1xuICAgICAgICAgICAgICAgICAgICB0WydhOTcnXSA9IDB4Mjc1QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTk4J10gPSAweDI3NUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E5OSddID0gMHgyNzVEO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTAwJ10gPSAweDI3NUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMDEnXSA9IDB4Mjc2MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTEwMiddID0gMHgyNzYyO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTAzJ10gPSAweDI3NjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMDQnXSA9IDB4Mjc2NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTEwNiddID0gMHgyNzY1O1xuICAgICAgICAgICAgICAgICAgICB0WydhMTA3J10gPSAweDI3NjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMDgnXSA9IDB4Mjc2NztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTExMiddID0gMHgyNjYzO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTExJ10gPSAweDI2NjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMTAnXSA9IDB4MjY2NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTEwOSddID0gMHgyNjYwO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTIwJ10gPSAweDI0NjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMjEnXSA9IDB4MjQ2MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTEyMiddID0gMHgyNDYyO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTIzJ10gPSAweDI0NjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMjQnXSA9IDB4MjQ2NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTEyNSddID0gMHgyNDY1O1xuICAgICAgICAgICAgICAgICAgICB0WydhMTI2J10gPSAweDI0NjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMjcnXSA9IDB4MjQ2NztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTEyOCddID0gMHgyNDY4O1xuICAgICAgICAgICAgICAgICAgICB0WydhMTI5J10gPSAweDI0Njk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMzAnXSA9IDB4Mjc3NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTEzMSddID0gMHgyNzc3O1xuICAgICAgICAgICAgICAgICAgICB0WydhMTMyJ10gPSAweDI3Nzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMzMnXSA9IDB4Mjc3OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTEzNCddID0gMHgyNzdBO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTM1J10gPSAweDI3N0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMzYnXSA9IDB4Mjc3QztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTEzNyddID0gMHgyNzdEO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTM4J10gPSAweDI3N0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMzknXSA9IDB4Mjc3RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE0MCddID0gMHgyNzgwO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTQxJ10gPSAweDI3ODE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNDInXSA9IDB4Mjc4MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE0MyddID0gMHgyNzgzO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTQ0J10gPSAweDI3ODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNDUnXSA9IDB4Mjc4NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE0NiddID0gMHgyNzg2O1xuICAgICAgICAgICAgICAgICAgICB0WydhMTQ3J10gPSAweDI3ODc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNDgnXSA9IDB4Mjc4ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE0OSddID0gMHgyNzg5O1xuICAgICAgICAgICAgICAgICAgICB0WydhMTUwJ10gPSAweDI3OEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNTEnXSA9IDB4Mjc4QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE1MiddID0gMHgyNzhDO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTUzJ10gPSAweDI3OEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNTQnXSA9IDB4Mjc4RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE1NSddID0gMHgyNzhGO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTU2J10gPSAweDI3OTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNTcnXSA9IDB4Mjc5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE1OCddID0gMHgyNzkyO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTU5J10gPSAweDI3OTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNjAnXSA9IDB4Mjc5NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE2MSddID0gMHgyMTkyO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTYzJ10gPSAweDIxOTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNjQnXSA9IDB4MjE5NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE5NiddID0gMHgyNzk4O1xuICAgICAgICAgICAgICAgICAgICB0WydhMTY1J10gPSAweDI3OTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExOTInXSA9IDB4Mjc5QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE2NiddID0gMHgyNzlCO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTY3J10gPSAweDI3OUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNjgnXSA9IDB4Mjc5RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE2OSddID0gMHgyNzlFO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTcwJ10gPSAweDI3OUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNzEnXSA9IDB4MjdBMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE3MiddID0gMHgyN0ExO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTczJ10gPSAweDI3QTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNjInXSA9IDB4MjdBMztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE3NCddID0gMHgyN0E0O1xuICAgICAgICAgICAgICAgICAgICB0WydhMTc1J10gPSAweDI3QTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNzYnXSA9IDB4MjdBNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE3NyddID0gMHgyN0E3O1xuICAgICAgICAgICAgICAgICAgICB0WydhMTc4J10gPSAweDI3QTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNzknXSA9IDB4MjdBOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE5MyddID0gMHgyN0FBO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTgwJ10gPSAweDI3QUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExOTknXSA9IDB4MjdBQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE4MSddID0gMHgyN0FEO1xuICAgICAgICAgICAgICAgICAgICB0WydhMjAwJ10gPSAweDI3QUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExODInXSA9IDB4MjdBRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTIwMSddID0gMHgyN0IxO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTgzJ10gPSAweDI3QjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExODQnXSA9IDB4MjdCMztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE5NyddID0gMHgyN0I0O1xuICAgICAgICAgICAgICAgICAgICB0WydhMTg1J10gPSAweDI3QjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExOTQnXSA9IDB4MjdCNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE5OCddID0gMHgyN0I3O1xuICAgICAgICAgICAgICAgICAgICB0WydhMTg2J10gPSAweDI3Qjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExOTUnXSA9IDB4MjdCOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE4NyddID0gMHgyN0JBO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTg4J10gPSAweDI3QkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExODknXSA9IDB4MjdCQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE5MCddID0gMHgyN0JEO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTkxJ10gPSAweDI3QkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E4OSddID0gMHgyNzY4O1xuICAgICAgICAgICAgICAgICAgICB0WydhOTAnXSA9IDB4Mjc2OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTkzJ10gPSAweDI3NkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E5NCddID0gMHgyNzZCO1xuICAgICAgICAgICAgICAgICAgICB0WydhOTEnXSA9IDB4Mjc2QztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTkyJ10gPSAweDI3NkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EyMDUnXSA9IDB4Mjc2RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTg1J10gPSAweDI3NkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EyMDYnXSA9IDB4Mjc3MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTg2J10gPSAweDI3NzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E4NyddID0gMHgyNzcyO1xuICAgICAgICAgICAgICAgICAgICB0WydhODgnXSA9IDB4Mjc3MztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTk1J10gPSAweDI3NzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E5NiddID0gMHgyNzc1O1xuICAgICAgICAgICAgICAgICAgICB0Wycubm90ZGVmJ10gPSAweDAwMDA7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5nZXRHbHlwaHNVbmljb2RlID0gZ2V0R2x5cGhzVW5pY29kZTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmdldERpbmdiYXRzR2x5cGhzVW5pY29kZSA9IGdldERpbmdiYXRzR2x5cGhzVW5pY29kZTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTc4ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5nZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckNhbGlicmkgPSBleHBvcnRzLmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjayA9IGV4cG9ydHMuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzID0gZXhwb3J0cy5nZXRTeW1ib2xzRm9udHMgPSBleHBvcnRzLmdldFNlcmlmRm9udHMgPSBleHBvcnRzLmdldE5vblN0ZEZvbnRNYXAgPSBleHBvcnRzLmdldFN0ZEZvbnRNYXAgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdldFN0ZEZvbnRNYXAgPSAoMCwgX3V0aWwuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgICAgICB0WydBcmlhbE5hcnJvdyddID0gJ0hlbHZldGljYSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FyaWFsTmFycm93LUJvbGQnXSA9ICdIZWx2ZXRpY2EtQm9sZCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FyaWFsTmFycm93LUJvbGRJdGFsaWMnXSA9ICdIZWx2ZXRpY2EtQm9sZE9ibGlxdWUnO1xuICAgICAgICAgICAgICAgICAgICB0WydBcmlhbE5hcnJvdy1JdGFsaWMnXSA9ICdIZWx2ZXRpY2EtT2JsaXF1ZSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FyaWFsQmxhY2snXSA9ICdIZWx2ZXRpY2EnO1xuICAgICAgICAgICAgICAgICAgICB0WydBcmlhbEJsYWNrLUJvbGQnXSA9ICdIZWx2ZXRpY2EtQm9sZCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FyaWFsQmxhY2stQm9sZEl0YWxpYyddID0gJ0hlbHZldGljYS1Cb2xkT2JsaXF1ZSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FyaWFsQmxhY2stSXRhbGljJ10gPSAnSGVsdmV0aWNhLU9ibGlxdWUnO1xuICAgICAgICAgICAgICAgICAgICB0WydBcmlhbC1CbGFjayddID0gJ0hlbHZldGljYSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FyaWFsLUJsYWNrLUJvbGQnXSA9ICdIZWx2ZXRpY2EtQm9sZCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FyaWFsLUJsYWNrLUJvbGRJdGFsaWMnXSA9ICdIZWx2ZXRpY2EtQm9sZE9ibGlxdWUnO1xuICAgICAgICAgICAgICAgICAgICB0WydBcmlhbC1CbGFjay1JdGFsaWMnXSA9ICdIZWx2ZXRpY2EtT2JsaXF1ZSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FyaWFsJ10gPSAnSGVsdmV0aWNhJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQXJpYWwtQm9sZCddID0gJ0hlbHZldGljYS1Cb2xkJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQXJpYWwtQm9sZEl0YWxpYyddID0gJ0hlbHZldGljYS1Cb2xkT2JsaXF1ZSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FyaWFsLUl0YWxpYyddID0gJ0hlbHZldGljYS1PYmxpcXVlJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQXJpYWwtQm9sZEl0YWxpY01UJ10gPSAnSGVsdmV0aWNhLUJvbGRPYmxpcXVlJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQXJpYWwtQm9sZE1UJ10gPSAnSGVsdmV0aWNhLUJvbGQnO1xuICAgICAgICAgICAgICAgICAgICB0WydBcmlhbC1JdGFsaWNNVCddID0gJ0hlbHZldGljYS1PYmxpcXVlJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQXJpYWxNVCddID0gJ0hlbHZldGljYSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NvdXJpZXItQm9sZCddID0gJ0NvdXJpZXItQm9sZCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NvdXJpZXItQm9sZEl0YWxpYyddID0gJ0NvdXJpZXItQm9sZE9ibGlxdWUnO1xuICAgICAgICAgICAgICAgICAgICB0WydDb3VyaWVyLUl0YWxpYyddID0gJ0NvdXJpZXItT2JsaXF1ZSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NvdXJpZXJOZXcnXSA9ICdDb3VyaWVyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQ291cmllck5ldy1Cb2xkJ10gPSAnQ291cmllci1Cb2xkJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQ291cmllck5ldy1Cb2xkSXRhbGljJ10gPSAnQ291cmllci1Cb2xkT2JsaXF1ZSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NvdXJpZXJOZXctSXRhbGljJ10gPSAnQ291cmllci1PYmxpcXVlJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQ291cmllck5ld1BTLUJvbGRJdGFsaWNNVCddID0gJ0NvdXJpZXItQm9sZE9ibGlxdWUnO1xuICAgICAgICAgICAgICAgICAgICB0WydDb3VyaWVyTmV3UFMtQm9sZE1UJ10gPSAnQ291cmllci1Cb2xkJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQ291cmllck5ld1BTLUl0YWxpY01UJ10gPSAnQ291cmllci1PYmxpcXVlJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQ291cmllck5ld1BTTVQnXSA9ICdDb3VyaWVyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnSGVsdmV0aWNhJ10gPSAnSGVsdmV0aWNhJztcbiAgICAgICAgICAgICAgICAgICAgdFsnSGVsdmV0aWNhLUJvbGQnXSA9ICdIZWx2ZXRpY2EtQm9sZCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0hlbHZldGljYS1Cb2xkSXRhbGljJ10gPSAnSGVsdmV0aWNhLUJvbGRPYmxpcXVlJztcbiAgICAgICAgICAgICAgICAgICAgdFsnSGVsdmV0aWNhLUJvbGRPYmxpcXVlJ10gPSAnSGVsdmV0aWNhLUJvbGRPYmxpcXVlJztcbiAgICAgICAgICAgICAgICAgICAgdFsnSGVsdmV0aWNhLUl0YWxpYyddID0gJ0hlbHZldGljYS1PYmxpcXVlJztcbiAgICAgICAgICAgICAgICAgICAgdFsnSGVsdmV0aWNhLU9ibGlxdWUnXSA9ICdIZWx2ZXRpY2EtT2JsaXF1ZSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NlZ29lVUlTeW1ib2wnXSA9ICdIZWx2ZXRpY2EnO1xuICAgICAgICAgICAgICAgICAgICB0WydTeW1ib2wtQm9sZCddID0gJ1N5bWJvbCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1N5bWJvbC1Cb2xkSXRhbGljJ10gPSAnU3ltYm9sJztcbiAgICAgICAgICAgICAgICAgICAgdFsnU3ltYm9sLUl0YWxpYyddID0gJ1N5bWJvbCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RpbWVzTmV3Um9tYW4nXSA9ICdUaW1lcy1Sb21hbic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RpbWVzTmV3Um9tYW4tQm9sZCddID0gJ1RpbWVzLUJvbGQnO1xuICAgICAgICAgICAgICAgICAgICB0WydUaW1lc05ld1JvbWFuLUJvbGRJdGFsaWMnXSA9ICdUaW1lcy1Cb2xkSXRhbGljJztcbiAgICAgICAgICAgICAgICAgICAgdFsnVGltZXNOZXdSb21hbi1JdGFsaWMnXSA9ICdUaW1lcy1JdGFsaWMnO1xuICAgICAgICAgICAgICAgICAgICB0WydUaW1lc05ld1JvbWFuUFMnXSA9ICdUaW1lcy1Sb21hbic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RpbWVzTmV3Um9tYW5QUy1Cb2xkJ10gPSAnVGltZXMtQm9sZCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RpbWVzTmV3Um9tYW5QUy1Cb2xkSXRhbGljJ10gPSAnVGltZXMtQm9sZEl0YWxpYyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RpbWVzTmV3Um9tYW5QUy1Cb2xkSXRhbGljTVQnXSA9ICdUaW1lcy1Cb2xkSXRhbGljJztcbiAgICAgICAgICAgICAgICAgICAgdFsnVGltZXNOZXdSb21hblBTLUJvbGRNVCddID0gJ1RpbWVzLUJvbGQnO1xuICAgICAgICAgICAgICAgICAgICB0WydUaW1lc05ld1JvbWFuUFMtSXRhbGljJ10gPSAnVGltZXMtSXRhbGljJztcbiAgICAgICAgICAgICAgICAgICAgdFsnVGltZXNOZXdSb21hblBTLUl0YWxpY01UJ10gPSAnVGltZXMtSXRhbGljJztcbiAgICAgICAgICAgICAgICAgICAgdFsnVGltZXNOZXdSb21hblBTTVQnXSA9ICdUaW1lcy1Sb21hbic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RpbWVzTmV3Um9tYW5QU01ULUJvbGQnXSA9ICdUaW1lcy1Cb2xkJztcbiAgICAgICAgICAgICAgICAgICAgdFsnVGltZXNOZXdSb21hblBTTVQtQm9sZEl0YWxpYyddID0gJ1RpbWVzLUJvbGRJdGFsaWMnO1xuICAgICAgICAgICAgICAgICAgICB0WydUaW1lc05ld1JvbWFuUFNNVC1JdGFsaWMnXSA9ICdUaW1lcy1JdGFsaWMnO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuZ2V0U3RkRm9udE1hcCA9IGdldFN0ZEZvbnRNYXA7XG4gICAgICAgICAgICAgICAgdmFyIGdldE5vblN0ZEZvbnRNYXAgPSAoMCwgX3V0aWwuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgICAgICB0WydDYWxpYnJpJ10gPSAnSGVsdmV0aWNhJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2FsaWJyaS1Cb2xkJ10gPSAnSGVsdmV0aWNhLUJvbGQnO1xuICAgICAgICAgICAgICAgICAgICB0WydDYWxpYnJpLUJvbGRJdGFsaWMnXSA9ICdIZWx2ZXRpY2EtQm9sZE9ibGlxdWUnO1xuICAgICAgICAgICAgICAgICAgICB0WydDYWxpYnJpLUl0YWxpYyddID0gJ0hlbHZldGljYS1PYmxpcXVlJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2VudHVyeUdvdGhpYyddID0gJ0hlbHZldGljYSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NlbnR1cnlHb3RoaWMtQm9sZCddID0gJ0hlbHZldGljYS1Cb2xkJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2VudHVyeUdvdGhpYy1Cb2xkSXRhbGljJ10gPSAnSGVsdmV0aWNhLUJvbGRPYmxpcXVlJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2VudHVyeUdvdGhpYy1JdGFsaWMnXSA9ICdIZWx2ZXRpY2EtT2JsaXF1ZSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NvbWljU2Fuc01TJ10gPSAnQ29taWMgU2FucyBNUyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NvbWljU2Fuc01TLUJvbGQnXSA9ICdDb21pYyBTYW5zIE1TLUJvbGQnO1xuICAgICAgICAgICAgICAgICAgICB0WydDb21pY1NhbnNNUy1Cb2xkSXRhbGljJ10gPSAnQ29taWMgU2FucyBNUy1Cb2xkSXRhbGljJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQ29taWNTYW5zTVMtSXRhbGljJ10gPSAnQ29taWMgU2FucyBNUy1JdGFsaWMnO1xuICAgICAgICAgICAgICAgICAgICB0WydMdWNpZGFDb25zb2xlJ10gPSAnQ291cmllcic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0x1Y2lkYUNvbnNvbGUtQm9sZCddID0gJ0NvdXJpZXItQm9sZCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0x1Y2lkYUNvbnNvbGUtQm9sZEl0YWxpYyddID0gJ0NvdXJpZXItQm9sZE9ibGlxdWUnO1xuICAgICAgICAgICAgICAgICAgICB0WydMdWNpZGFDb25zb2xlLUl0YWxpYyddID0gJ0NvdXJpZXItT2JsaXF1ZSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0x1Y2lkYVNhbnMtRGVtaSddID0gJ0hlbHZldGljYS1Cb2xkJztcbiAgICAgICAgICAgICAgICAgICAgdFsnTVMtR290aGljJ10gPSAnTVMgR290aGljJztcbiAgICAgICAgICAgICAgICAgICAgdFsnTVMtR290aGljLUJvbGQnXSA9ICdNUyBHb3RoaWMtQm9sZCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01TLUdvdGhpYy1Cb2xkSXRhbGljJ10gPSAnTVMgR290aGljLUJvbGRJdGFsaWMnO1xuICAgICAgICAgICAgICAgICAgICB0WydNUy1Hb3RoaWMtSXRhbGljJ10gPSAnTVMgR290aGljLUl0YWxpYyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01TLU1pbmNobyddID0gJ01TIE1pbmNobyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01TLU1pbmNoby1Cb2xkJ10gPSAnTVMgTWluY2hvLUJvbGQnO1xuICAgICAgICAgICAgICAgICAgICB0WydNUy1NaW5jaG8tQm9sZEl0YWxpYyddID0gJ01TIE1pbmNoby1Cb2xkSXRhbGljJztcbiAgICAgICAgICAgICAgICAgICAgdFsnTVMtTWluY2hvLUl0YWxpYyddID0gJ01TIE1pbmNoby1JdGFsaWMnO1xuICAgICAgICAgICAgICAgICAgICB0WydNUy1QR290aGljJ10gPSAnTVMgUEdvdGhpYyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01TLVBHb3RoaWMtQm9sZCddID0gJ01TIFBHb3RoaWMtQm9sZCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01TLVBHb3RoaWMtQm9sZEl0YWxpYyddID0gJ01TIFBHb3RoaWMtQm9sZEl0YWxpYyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01TLVBHb3RoaWMtSXRhbGljJ10gPSAnTVMgUEdvdGhpYy1JdGFsaWMnO1xuICAgICAgICAgICAgICAgICAgICB0WydNUy1QTWluY2hvJ10gPSAnTVMgUE1pbmNobyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01TLVBNaW5jaG8tQm9sZCddID0gJ01TIFBNaW5jaG8tQm9sZCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01TLVBNaW5jaG8tQm9sZEl0YWxpYyddID0gJ01TIFBNaW5jaG8tQm9sZEl0YWxpYyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01TLVBNaW5jaG8tSXRhbGljJ10gPSAnTVMgUE1pbmNoby1JdGFsaWMnO1xuICAgICAgICAgICAgICAgICAgICB0WydOdXB0aWFsU2NyaXB0J10gPSAnVGltZXMtSXRhbGljJztcbiAgICAgICAgICAgICAgICAgICAgdFsnV2luZ2RpbmdzJ10gPSAnWmFwZkRpbmdiYXRzJztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmdldE5vblN0ZEZvbnRNYXAgPSBnZXROb25TdGRGb250TWFwO1xuICAgICAgICAgICAgICAgIHZhciBnZXRTZXJpZkZvbnRzID0gKDAsIF91dGlsLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWRvYmUgSmVuc29uJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydBZG9iZSBUZXh0J10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydBbGJlcnR1cyddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWxkdXMnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FsZXhhbmRyaWEnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FsZ2VyaWFuJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydBbWVyaWNhbiBUeXBld3JpdGVyJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydBbnRpcXVhJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydBcGV4J10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydBcm5vJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydBc3RlciddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQXVyb3JhJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydCYXNrZXJ2aWxsZSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQmVsbCddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQmVtYm8nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0JlbWJvIFNjaG9vbGJvb2snXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Jlbmd1aWF0J10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydCZXJrZWxleSBPbGQgU3R5bGUnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Jlcm5oYXJkIE1vZGVybiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQmVydGhvbGQgQ2l0eSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQm9kb25pJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydCYXVlciBCb2RvbmknXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Jvb2sgQW50aXF1YSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQm9va21hbiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQm9yZGVhdXggUm9tYW4nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NhbGlmb3JuaWFuIEZCJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydDYWxpc3RvJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydDYWx2ZXJ0J10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydDYXBpdGFscyddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2FtYnJpYSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2FydGllciddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2FzbG9uJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydDYXR1bGwnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NlbnRhdXInXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NlbnR1cnkgT2xkIFN0eWxlJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydDZW50dXJ5IFNjaG9vbGJvb2snXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NoYXBhcnJhbCddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2hhcmlzIFNJTCddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2hlbHRlbmhhbSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2hvbGxhIFNsYWInXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NsYXJlbmRvbiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2xlYXJmYWNlJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydDb2NoaW4nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NvbG9ubmEnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NvbXB1dGVyIE1vZGVybiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ29uY3JldGUgUm9tYW4nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NvbnN0YW50aWEnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Nvb3BlciBCbGFjayddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ29yb25hJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydFY290eXBlJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydFZ3lwdGllbm5lJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydFbGVwaGFudCddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRXhjZWxzaW9yJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydGYWlyZmllbGQnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0ZGIFNjYWxhJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydGb2xrYXJkJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydGb290bGlnaHQnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0ZyZWVTZXJpZiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRnJpeiBRdWFkcmF0YSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnR2FyYW1vbmQnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dlbnRpdW0nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dlb3JnaWEnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dsb3VjZXN0ZXInXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dvdWR5IE9sZCBTdHlsZSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnR291ZHkgU2Nob29sYm9vayddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnR291ZHkgUHJvIEZvbnQnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dyYW5qb24nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0d1YXJkaWFuIEVneXB0aWFuJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydIZWF0aGVyJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydIZXJjdWxlcyddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSGlnaCBUb3dlciBUZXh0J10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydIaXJvc2hpZ2UnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0hvZWZsZXIgVGV4dCddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSHVtYW5hIFNlcmlmJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydJbXByaW50J10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydJb25pYyBOby4gNSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSmFuc29uJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydKb2FubmEnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0tvcmlubmEnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0xleGljb24nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0xpYmVyYXRpb24gU2VyaWYnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0xpbnV4IExpYmVydGluZSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTGl0ZXJhdHVybmF5YSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTHVjaWRhJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydMdWNpZGEgQnJpZ2h0J10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydNZWxpb3InXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01lbXBoaXMnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01pbGxlciddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTWluaW9uJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydNb2Rlcm4nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01vbmEgTGlzYSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTXJzIEVhdmVzJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydNUyBTZXJpZiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTXVzZW8gU2xhYiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTmV3IFlvcmsnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ05pbWJ1cyBSb21hbiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTlBTIFJhd2xpbnNvbiBSb2Fkd2F5J10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydOdXB0aWFsU2NyaXB0J10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydQYWxhdGlubyddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnUGVycGV0dWEnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1BsYW50aW4nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1BsYW50aW4gU2Nob29sYm9vayddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnUGxheWJpbGwnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Bvb3IgUmljaGFyZCddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnUmF3bGluc29uIFJvYWR3YXknXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1JlbmF1bHQnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1JlcXVpZW0nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1JvY2t3ZWxsJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydSb21hbiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnUm90aXMgU2VyaWYnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NhYm9uJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydTY2FsYSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnU2VhZ3VsbCddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnU2lzdGluYSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnU291dmVuaXInXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NUSVgnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1N0b25lIEluZm9ybWFsJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydTdG9uZSBTZXJpZiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnU3lsZmFlbiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnVGltZXMnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RyYWphbiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnVHJpbml0w6knXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RydW1wIE1lZGlhZXZhbCddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnVXRvcGlhJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydWYWxlIFR5cGUnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0JpdHN0cmVhbSBWZXJhJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydWZXJhIFNlcmlmJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydWZXJzYWlsbGVzJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydXYW50ZWQnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1dlaXNzJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydXaWRlIExhdGluJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydXaW5kc29yJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydYSVRTJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuZ2V0U2VyaWZGb250cyA9IGdldFNlcmlmRm9udHM7XG4gICAgICAgICAgICAgICAgdmFyIGdldFN5bWJvbHNGb250cyA9ICgwLCBfdXRpbC5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0RpbmdiYXRzJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydTeW1ib2wnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1phcGZEaW5nYmF0cyddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmdldFN5bWJvbHNGb250cyA9IGdldFN5bWJvbHNGb250cztcbiAgICAgICAgICAgICAgICB2YXIgZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzID0gKDAsIF91dGlsLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdFsyXSA9IDEwO1xuICAgICAgICAgICAgICAgICAgICB0WzNdID0gMzI7XG4gICAgICAgICAgICAgICAgICAgIHRbNF0gPSAzMztcbiAgICAgICAgICAgICAgICAgICAgdFs1XSA9IDM0O1xuICAgICAgICAgICAgICAgICAgICB0WzZdID0gMzU7XG4gICAgICAgICAgICAgICAgICAgIHRbN10gPSAzNjtcbiAgICAgICAgICAgICAgICAgICAgdFs4XSA9IDM3O1xuICAgICAgICAgICAgICAgICAgICB0WzldID0gMzg7XG4gICAgICAgICAgICAgICAgICAgIHRbMTBdID0gMzk7XG4gICAgICAgICAgICAgICAgICAgIHRbMTFdID0gNDA7XG4gICAgICAgICAgICAgICAgICAgIHRbMTJdID0gNDE7XG4gICAgICAgICAgICAgICAgICAgIHRbMTNdID0gNDI7XG4gICAgICAgICAgICAgICAgICAgIHRbMTRdID0gNDM7XG4gICAgICAgICAgICAgICAgICAgIHRbMTVdID0gNDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMTZdID0gNDU7XG4gICAgICAgICAgICAgICAgICAgIHRbMTddID0gNDY7XG4gICAgICAgICAgICAgICAgICAgIHRbMThdID0gNDc7XG4gICAgICAgICAgICAgICAgICAgIHRbMTldID0gNDg7XG4gICAgICAgICAgICAgICAgICAgIHRbMjBdID0gNDk7XG4gICAgICAgICAgICAgICAgICAgIHRbMjFdID0gNTA7XG4gICAgICAgICAgICAgICAgICAgIHRbMjJdID0gNTE7XG4gICAgICAgICAgICAgICAgICAgIHRbMjNdID0gNTI7XG4gICAgICAgICAgICAgICAgICAgIHRbMjRdID0gNTM7XG4gICAgICAgICAgICAgICAgICAgIHRbMjVdID0gNTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMjZdID0gNTU7XG4gICAgICAgICAgICAgICAgICAgIHRbMjddID0gNTY7XG4gICAgICAgICAgICAgICAgICAgIHRbMjhdID0gNTc7XG4gICAgICAgICAgICAgICAgICAgIHRbMjldID0gNTg7XG4gICAgICAgICAgICAgICAgICAgIHRbMzBdID0gODk0O1xuICAgICAgICAgICAgICAgICAgICB0WzMxXSA9IDYwO1xuICAgICAgICAgICAgICAgICAgICB0WzMyXSA9IDYxO1xuICAgICAgICAgICAgICAgICAgICB0WzMzXSA9IDYyO1xuICAgICAgICAgICAgICAgICAgICB0WzM0XSA9IDYzO1xuICAgICAgICAgICAgICAgICAgICB0WzM1XSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICB0WzM2XSA9IDY1O1xuICAgICAgICAgICAgICAgICAgICB0WzM3XSA9IDY2O1xuICAgICAgICAgICAgICAgICAgICB0WzM4XSA9IDY3O1xuICAgICAgICAgICAgICAgICAgICB0WzM5XSA9IDY4O1xuICAgICAgICAgICAgICAgICAgICB0WzQwXSA9IDY5O1xuICAgICAgICAgICAgICAgICAgICB0WzQxXSA9IDcwO1xuICAgICAgICAgICAgICAgICAgICB0WzQyXSA9IDcxO1xuICAgICAgICAgICAgICAgICAgICB0WzQzXSA9IDcyO1xuICAgICAgICAgICAgICAgICAgICB0WzQ0XSA9IDczO1xuICAgICAgICAgICAgICAgICAgICB0WzQ1XSA9IDc0O1xuICAgICAgICAgICAgICAgICAgICB0WzQ2XSA9IDc1O1xuICAgICAgICAgICAgICAgICAgICB0WzQ3XSA9IDc2O1xuICAgICAgICAgICAgICAgICAgICB0WzQ4XSA9IDc3O1xuICAgICAgICAgICAgICAgICAgICB0WzQ5XSA9IDc4O1xuICAgICAgICAgICAgICAgICAgICB0WzUwXSA9IDc5O1xuICAgICAgICAgICAgICAgICAgICB0WzUxXSA9IDgwO1xuICAgICAgICAgICAgICAgICAgICB0WzUyXSA9IDgxO1xuICAgICAgICAgICAgICAgICAgICB0WzUzXSA9IDgyO1xuICAgICAgICAgICAgICAgICAgICB0WzU0XSA9IDgzO1xuICAgICAgICAgICAgICAgICAgICB0WzU1XSA9IDg0O1xuICAgICAgICAgICAgICAgICAgICB0WzU2XSA9IDg1O1xuICAgICAgICAgICAgICAgICAgICB0WzU3XSA9IDg2O1xuICAgICAgICAgICAgICAgICAgICB0WzU4XSA9IDg3O1xuICAgICAgICAgICAgICAgICAgICB0WzU5XSA9IDg4O1xuICAgICAgICAgICAgICAgICAgICB0WzYwXSA9IDg5O1xuICAgICAgICAgICAgICAgICAgICB0WzYxXSA9IDkwO1xuICAgICAgICAgICAgICAgICAgICB0WzYyXSA9IDkxO1xuICAgICAgICAgICAgICAgICAgICB0WzYzXSA9IDkyO1xuICAgICAgICAgICAgICAgICAgICB0WzY0XSA9IDkzO1xuICAgICAgICAgICAgICAgICAgICB0WzY1XSA9IDk0O1xuICAgICAgICAgICAgICAgICAgICB0WzY2XSA9IDk1O1xuICAgICAgICAgICAgICAgICAgICB0WzY3XSA9IDk2O1xuICAgICAgICAgICAgICAgICAgICB0WzY4XSA9IDk3O1xuICAgICAgICAgICAgICAgICAgICB0WzY5XSA9IDk4O1xuICAgICAgICAgICAgICAgICAgICB0WzcwXSA9IDk5O1xuICAgICAgICAgICAgICAgICAgICB0WzcxXSA9IDEwMDtcbiAgICAgICAgICAgICAgICAgICAgdFs3Ml0gPSAxMDE7XG4gICAgICAgICAgICAgICAgICAgIHRbNzNdID0gMTAyO1xuICAgICAgICAgICAgICAgICAgICB0Wzc0XSA9IDEwMztcbiAgICAgICAgICAgICAgICAgICAgdFs3NV0gPSAxMDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbNzZdID0gMTA1O1xuICAgICAgICAgICAgICAgICAgICB0Wzc3XSA9IDEwNjtcbiAgICAgICAgICAgICAgICAgICAgdFs3OF0gPSAxMDc7XG4gICAgICAgICAgICAgICAgICAgIHRbNzldID0gMTA4O1xuICAgICAgICAgICAgICAgICAgICB0WzgwXSA9IDEwOTtcbiAgICAgICAgICAgICAgICAgICAgdFs4MV0gPSAxMTA7XG4gICAgICAgICAgICAgICAgICAgIHRbODJdID0gMTExO1xuICAgICAgICAgICAgICAgICAgICB0WzgzXSA9IDExMjtcbiAgICAgICAgICAgICAgICAgICAgdFs4NF0gPSAxMTM7XG4gICAgICAgICAgICAgICAgICAgIHRbODVdID0gMTE0O1xuICAgICAgICAgICAgICAgICAgICB0Wzg2XSA9IDExNTtcbiAgICAgICAgICAgICAgICAgICAgdFs4N10gPSAxMTY7XG4gICAgICAgICAgICAgICAgICAgIHRbODhdID0gMTE3O1xuICAgICAgICAgICAgICAgICAgICB0Wzg5XSA9IDExODtcbiAgICAgICAgICAgICAgICAgICAgdFs5MF0gPSAxMTk7XG4gICAgICAgICAgICAgICAgICAgIHRbOTFdID0gMTIwO1xuICAgICAgICAgICAgICAgICAgICB0WzkyXSA9IDEyMTtcbiAgICAgICAgICAgICAgICAgICAgdFs5M10gPSAxMjI7XG4gICAgICAgICAgICAgICAgICAgIHRbOTRdID0gMTIzO1xuICAgICAgICAgICAgICAgICAgICB0Wzk1XSA9IDEyNDtcbiAgICAgICAgICAgICAgICAgICAgdFs5Nl0gPSAxMjU7XG4gICAgICAgICAgICAgICAgICAgIHRbOTddID0gMTI2O1xuICAgICAgICAgICAgICAgICAgICB0Wzk4XSA9IDE5NjtcbiAgICAgICAgICAgICAgICAgICAgdFs5OV0gPSAxOTc7XG4gICAgICAgICAgICAgICAgICAgIHRbMTAwXSA9IDE5OTtcbiAgICAgICAgICAgICAgICAgICAgdFsxMDFdID0gMjAxO1xuICAgICAgICAgICAgICAgICAgICB0WzEwMl0gPSAyMDk7XG4gICAgICAgICAgICAgICAgICAgIHRbMTAzXSA9IDIxNDtcbiAgICAgICAgICAgICAgICAgICAgdFsxMDRdID0gMjIwO1xuICAgICAgICAgICAgICAgICAgICB0WzEwNV0gPSAyMjU7XG4gICAgICAgICAgICAgICAgICAgIHRbMTA2XSA9IDIyNDtcbiAgICAgICAgICAgICAgICAgICAgdFsxMDddID0gMjI2O1xuICAgICAgICAgICAgICAgICAgICB0WzEwOF0gPSAyMjg7XG4gICAgICAgICAgICAgICAgICAgIHRbMTA5XSA9IDIyNztcbiAgICAgICAgICAgICAgICAgICAgdFsxMTBdID0gMjI5O1xuICAgICAgICAgICAgICAgICAgICB0WzExMV0gPSAyMzE7XG4gICAgICAgICAgICAgICAgICAgIHRbMTEyXSA9IDIzMztcbiAgICAgICAgICAgICAgICAgICAgdFsxMTNdID0gMjMyO1xuICAgICAgICAgICAgICAgICAgICB0WzExNF0gPSAyMzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMTE1XSA9IDIzNTtcbiAgICAgICAgICAgICAgICAgICAgdFsxMTZdID0gMjM3O1xuICAgICAgICAgICAgICAgICAgICB0WzExN10gPSAyMzY7XG4gICAgICAgICAgICAgICAgICAgIHRbMTE4XSA9IDIzODtcbiAgICAgICAgICAgICAgICAgICAgdFsxMTldID0gMjM5O1xuICAgICAgICAgICAgICAgICAgICB0WzEyMF0gPSAyNDE7XG4gICAgICAgICAgICAgICAgICAgIHRbMTIxXSA9IDI0MztcbiAgICAgICAgICAgICAgICAgICAgdFsxMjJdID0gMjQyO1xuICAgICAgICAgICAgICAgICAgICB0WzEyM10gPSAyNDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMTI0XSA9IDI0NjtcbiAgICAgICAgICAgICAgICAgICAgdFsxMjVdID0gMjQ1O1xuICAgICAgICAgICAgICAgICAgICB0WzEyNl0gPSAyNTA7XG4gICAgICAgICAgICAgICAgICAgIHRbMTI3XSA9IDI0OTtcbiAgICAgICAgICAgICAgICAgICAgdFsxMjhdID0gMjUxO1xuICAgICAgICAgICAgICAgICAgICB0WzEyOV0gPSAyNTI7XG4gICAgICAgICAgICAgICAgICAgIHRbMTMwXSA9IDgyMjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMTMxXSA9IDE3NjtcbiAgICAgICAgICAgICAgICAgICAgdFsxMzJdID0gMTYyO1xuICAgICAgICAgICAgICAgICAgICB0WzEzM10gPSAxNjM7XG4gICAgICAgICAgICAgICAgICAgIHRbMTM0XSA9IDE2NztcbiAgICAgICAgICAgICAgICAgICAgdFsxMzVdID0gODIyNjtcbiAgICAgICAgICAgICAgICAgICAgdFsxMzZdID0gMTgyO1xuICAgICAgICAgICAgICAgICAgICB0WzEzN10gPSAyMjM7XG4gICAgICAgICAgICAgICAgICAgIHRbMTM4XSA9IDE3NDtcbiAgICAgICAgICAgICAgICAgICAgdFsxMzldID0gMTY5O1xuICAgICAgICAgICAgICAgICAgICB0WzE0MF0gPSA4NDgyO1xuICAgICAgICAgICAgICAgICAgICB0WzE0MV0gPSAxODA7XG4gICAgICAgICAgICAgICAgICAgIHRbMTQyXSA9IDE2ODtcbiAgICAgICAgICAgICAgICAgICAgdFsxNDNdID0gODgwMDtcbiAgICAgICAgICAgICAgICAgICAgdFsxNDRdID0gMTk4O1xuICAgICAgICAgICAgICAgICAgICB0WzE0NV0gPSAyMTY7XG4gICAgICAgICAgICAgICAgICAgIHRbMTQ2XSA9IDg3MzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMTQ3XSA9IDE3NztcbiAgICAgICAgICAgICAgICAgICAgdFsxNDhdID0gODgwNDtcbiAgICAgICAgICAgICAgICAgICAgdFsxNDldID0gODgwNTtcbiAgICAgICAgICAgICAgICAgICAgdFsxNTBdID0gMTY1O1xuICAgICAgICAgICAgICAgICAgICB0WzE1MV0gPSAxODE7XG4gICAgICAgICAgICAgICAgICAgIHRbMTUyXSA9IDg3MDY7XG4gICAgICAgICAgICAgICAgICAgIHRbMTUzXSA9IDg3MjE7XG4gICAgICAgICAgICAgICAgICAgIHRbMTU0XSA9IDg3MTk7XG4gICAgICAgICAgICAgICAgICAgIHRbMTU2XSA9IDg3NDc7XG4gICAgICAgICAgICAgICAgICAgIHRbMTU3XSA9IDE3MDtcbiAgICAgICAgICAgICAgICAgICAgdFsxNThdID0gMTg2O1xuICAgICAgICAgICAgICAgICAgICB0WzE1OV0gPSA4NDg2O1xuICAgICAgICAgICAgICAgICAgICB0WzE2MF0gPSAyMzA7XG4gICAgICAgICAgICAgICAgICAgIHRbMTYxXSA9IDI0ODtcbiAgICAgICAgICAgICAgICAgICAgdFsxNjJdID0gMTkxO1xuICAgICAgICAgICAgICAgICAgICB0WzE2M10gPSAxNjE7XG4gICAgICAgICAgICAgICAgICAgIHRbMTY0XSA9IDE3MjtcbiAgICAgICAgICAgICAgICAgICAgdFsxNjVdID0gODczMDtcbiAgICAgICAgICAgICAgICAgICAgdFsxNjZdID0gNDAyO1xuICAgICAgICAgICAgICAgICAgICB0WzE2N10gPSA4Nzc2O1xuICAgICAgICAgICAgICAgICAgICB0WzE2OF0gPSA4NzEwO1xuICAgICAgICAgICAgICAgICAgICB0WzE2OV0gPSAxNzE7XG4gICAgICAgICAgICAgICAgICAgIHRbMTcwXSA9IDE4NztcbiAgICAgICAgICAgICAgICAgICAgdFsxNzFdID0gODIzMDtcbiAgICAgICAgICAgICAgICAgICAgdFsyMTBdID0gMjE4O1xuICAgICAgICAgICAgICAgICAgICB0WzIyM10gPSA3MTE7XG4gICAgICAgICAgICAgICAgICAgIHRbMjI0XSA9IDMyMTtcbiAgICAgICAgICAgICAgICAgICAgdFsyMjVdID0gMzIyO1xuICAgICAgICAgICAgICAgICAgICB0WzIyN10gPSAzNTM7XG4gICAgICAgICAgICAgICAgICAgIHRbMjI5XSA9IDM4MjtcbiAgICAgICAgICAgICAgICAgICAgdFsyMzRdID0gMjUzO1xuICAgICAgICAgICAgICAgICAgICB0WzI1Ml0gPSAyNjM7XG4gICAgICAgICAgICAgICAgICAgIHRbMjUzXSA9IDI2ODtcbiAgICAgICAgICAgICAgICAgICAgdFsyNTRdID0gMjY5O1xuICAgICAgICAgICAgICAgICAgICB0WzI1OF0gPSAyNTg7XG4gICAgICAgICAgICAgICAgICAgIHRbMjYwXSA9IDI2MDtcbiAgICAgICAgICAgICAgICAgICAgdFsyNjFdID0gMjYxO1xuICAgICAgICAgICAgICAgICAgICB0WzI2NV0gPSAyODA7XG4gICAgICAgICAgICAgICAgICAgIHRbMjY2XSA9IDI4MTtcbiAgICAgICAgICAgICAgICAgICAgdFsyNjhdID0gMjgzO1xuICAgICAgICAgICAgICAgICAgICB0WzI2OV0gPSAzMTM7XG4gICAgICAgICAgICAgICAgICAgIHRbMjc1XSA9IDMyMztcbiAgICAgICAgICAgICAgICAgICAgdFsyNzZdID0gMzI0O1xuICAgICAgICAgICAgICAgICAgICB0WzI3OF0gPSAzMjg7XG4gICAgICAgICAgICAgICAgICAgIHRbMjg0XSA9IDM0NTtcbiAgICAgICAgICAgICAgICAgICAgdFsyODVdID0gMzQ2O1xuICAgICAgICAgICAgICAgICAgICB0WzI4Nl0gPSAzNDc7XG4gICAgICAgICAgICAgICAgICAgIHRbMjkyXSA9IDM2NztcbiAgICAgICAgICAgICAgICAgICAgdFsyOTVdID0gMzc3O1xuICAgICAgICAgICAgICAgICAgICB0WzI5Nl0gPSAzNzg7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk4XSA9IDM4MDtcbiAgICAgICAgICAgICAgICAgICAgdFszMDVdID0gOTYzO1xuICAgICAgICAgICAgICAgICAgICB0WzMwNl0gPSA5NjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMzA3XSA9IDk2NjtcbiAgICAgICAgICAgICAgICAgICAgdFszMDhdID0gODIxNTtcbiAgICAgICAgICAgICAgICAgICAgdFszMDldID0gODI1MjtcbiAgICAgICAgICAgICAgICAgICAgdFszMTBdID0gODMxOTtcbiAgICAgICAgICAgICAgICAgICAgdFszMTFdID0gODM1OTtcbiAgICAgICAgICAgICAgICAgICAgdFszMTJdID0gODU5MjtcbiAgICAgICAgICAgICAgICAgICAgdFszMTNdID0gODU5MztcbiAgICAgICAgICAgICAgICAgICAgdFszMzddID0gOTU1MjtcbiAgICAgICAgICAgICAgICAgICAgdFs0OTNdID0gMTAzOTtcbiAgICAgICAgICAgICAgICAgICAgdFs0OTRdID0gMTA0MDtcbiAgICAgICAgICAgICAgICAgICAgdFs3MDVdID0gMTUyNDtcbiAgICAgICAgICAgICAgICAgICAgdFs3MDZdID0gODM2MjtcbiAgICAgICAgICAgICAgICAgICAgdFs3MTBdID0gNjQyODg7XG4gICAgICAgICAgICAgICAgICAgIHRbNzExXSA9IDY0Mjk4O1xuICAgICAgICAgICAgICAgICAgICB0Wzc1OV0gPSAxNjE3O1xuICAgICAgICAgICAgICAgICAgICB0Wzc2MV0gPSAxNzc2O1xuICAgICAgICAgICAgICAgICAgICB0Wzc2M10gPSAxNzc4O1xuICAgICAgICAgICAgICAgICAgICB0Wzc3NV0gPSAxNjUyO1xuICAgICAgICAgICAgICAgICAgICB0Wzc3N10gPSAxNzY0O1xuICAgICAgICAgICAgICAgICAgICB0Wzc3OF0gPSAxNzgwO1xuICAgICAgICAgICAgICAgICAgICB0Wzc3OV0gPSAxNzgxO1xuICAgICAgICAgICAgICAgICAgICB0Wzc4MF0gPSAxNzgyO1xuICAgICAgICAgICAgICAgICAgICB0Wzc4Ml0gPSA3NzE7XG4gICAgICAgICAgICAgICAgICAgIHRbNzgzXSA9IDY0NzI2O1xuICAgICAgICAgICAgICAgICAgICB0Wzc4Nl0gPSA4MzYzO1xuICAgICAgICAgICAgICAgICAgICB0Wzc4OF0gPSA4NTMyO1xuICAgICAgICAgICAgICAgICAgICB0Wzc5MF0gPSA3Njg7XG4gICAgICAgICAgICAgICAgICAgIHRbNzkxXSA9IDc2OTtcbiAgICAgICAgICAgICAgICAgICAgdFs3OTJdID0gNzY4O1xuICAgICAgICAgICAgICAgICAgICB0Wzc5NV0gPSA4MDM7XG4gICAgICAgICAgICAgICAgICAgIHRbNzk3XSA9IDY0MzM2O1xuICAgICAgICAgICAgICAgICAgICB0Wzc5OF0gPSA2NDMzNztcbiAgICAgICAgICAgICAgICAgICAgdFs3OTldID0gNjQzNDI7XG4gICAgICAgICAgICAgICAgICAgIHRbODAwXSA9IDY0MzQzO1xuICAgICAgICAgICAgICAgICAgICB0WzgwMV0gPSA2NDM0NDtcbiAgICAgICAgICAgICAgICAgICAgdFs4MDJdID0gNjQzNDU7XG4gICAgICAgICAgICAgICAgICAgIHRbODAzXSA9IDY0MzYyO1xuICAgICAgICAgICAgICAgICAgICB0WzgwNF0gPSA2NDM2MztcbiAgICAgICAgICAgICAgICAgICAgdFs4MDVdID0gNjQzNjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMjQyNF0gPSA3ODIxO1xuICAgICAgICAgICAgICAgICAgICB0WzI0MjVdID0gNzgyMjtcbiAgICAgICAgICAgICAgICAgICAgdFsyNDI2XSA9IDc4MjM7XG4gICAgICAgICAgICAgICAgICAgIHRbMjQyN10gPSA3ODI0O1xuICAgICAgICAgICAgICAgICAgICB0WzI0MjhdID0gNzgyNTtcbiAgICAgICAgICAgICAgICAgICAgdFsyNDI5XSA9IDc4MjY7XG4gICAgICAgICAgICAgICAgICAgIHRbMjQzMF0gPSA3ODI3O1xuICAgICAgICAgICAgICAgICAgICB0WzI0MzNdID0gNzY4MjtcbiAgICAgICAgICAgICAgICAgICAgdFsyNjc4XSA9IDgwNDU7XG4gICAgICAgICAgICAgICAgICAgIHRbMjY3OV0gPSA4MDQ2O1xuICAgICAgICAgICAgICAgICAgICB0WzI4MzBdID0gMTU1MjtcbiAgICAgICAgICAgICAgICAgICAgdFsyODM4XSA9IDY4NjtcbiAgICAgICAgICAgICAgICAgICAgdFsyODQwXSA9IDc1MTtcbiAgICAgICAgICAgICAgICAgICAgdFsyODQyXSA9IDc1MztcbiAgICAgICAgICAgICAgICAgICAgdFsyODQzXSA9IDc1NDtcbiAgICAgICAgICAgICAgICAgICAgdFsyODQ0XSA9IDc1NTtcbiAgICAgICAgICAgICAgICAgICAgdFsyODQ2XSA9IDc1NztcbiAgICAgICAgICAgICAgICAgICAgdFsyODU2XSA9IDc2NztcbiAgICAgICAgICAgICAgICAgICAgdFsyODU3XSA9IDg0ODtcbiAgICAgICAgICAgICAgICAgICAgdFsyODU4XSA9IDg0OTtcbiAgICAgICAgICAgICAgICAgICAgdFsyODYyXSA9IDg1MztcbiAgICAgICAgICAgICAgICAgICAgdFsyODYzXSA9IDg1NDtcbiAgICAgICAgICAgICAgICAgICAgdFsyODY0XSA9IDg1NTtcbiAgICAgICAgICAgICAgICAgICAgdFsyODY1XSA9IDg2MTtcbiAgICAgICAgICAgICAgICAgICAgdFsyODY2XSA9IDg2MjtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTA2XSA9IDc0NjA7XG4gICAgICAgICAgICAgICAgICAgIHRbMjkwOF0gPSA3NDYyO1xuICAgICAgICAgICAgICAgICAgICB0WzI5MDldID0gNzQ2MztcbiAgICAgICAgICAgICAgICAgICAgdFsyOTEwXSA9IDc0NjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMjkxMl0gPSA3NDY2O1xuICAgICAgICAgICAgICAgICAgICB0WzI5MTNdID0gNzQ2NztcbiAgICAgICAgICAgICAgICAgICAgdFsyOTE0XSA9IDc0Njg7XG4gICAgICAgICAgICAgICAgICAgIHRbMjkxNl0gPSA3NDcwO1xuICAgICAgICAgICAgICAgICAgICB0WzI5MTddID0gNzQ3MTtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTE4XSA9IDc0NzI7XG4gICAgICAgICAgICAgICAgICAgIHRbMjkyMF0gPSA3NDc0O1xuICAgICAgICAgICAgICAgICAgICB0WzI5MjFdID0gNzQ3NTtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTIyXSA9IDc0NzY7XG4gICAgICAgICAgICAgICAgICAgIHRbMjkyNF0gPSA3NDc4O1xuICAgICAgICAgICAgICAgICAgICB0WzI5MjVdID0gNzQ3OTtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTI2XSA9IDc0ODA7XG4gICAgICAgICAgICAgICAgICAgIHRbMjkyOF0gPSA3NDgyO1xuICAgICAgICAgICAgICAgICAgICB0WzI5MjldID0gNzQ4MztcbiAgICAgICAgICAgICAgICAgICAgdFsyOTMwXSA9IDc0ODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMjkzMl0gPSA3NDg2O1xuICAgICAgICAgICAgICAgICAgICB0WzI5MzNdID0gNzQ4NztcbiAgICAgICAgICAgICAgICAgICAgdFsyOTM0XSA9IDc0ODg7XG4gICAgICAgICAgICAgICAgICAgIHRbMjkzNl0gPSA3NDkwO1xuICAgICAgICAgICAgICAgICAgICB0WzI5MzddID0gNzQ5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTM4XSA9IDc0OTI7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk0MF0gPSA3NDk0O1xuICAgICAgICAgICAgICAgICAgICB0WzI5NDFdID0gNzQ5NTtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTQyXSA9IDc0OTY7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk0NF0gPSA3NDk4O1xuICAgICAgICAgICAgICAgICAgICB0WzI5NDZdID0gNzUwMDtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTQ4XSA9IDc1MDI7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk1MF0gPSA3NTA0O1xuICAgICAgICAgICAgICAgICAgICB0WzI5NTFdID0gNzUwNTtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTUyXSA9IDc1MDY7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk1NF0gPSA3NTA4O1xuICAgICAgICAgICAgICAgICAgICB0WzI5NTVdID0gNzUwOTtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTU2XSA9IDc1MTA7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk1OF0gPSA3NTEyO1xuICAgICAgICAgICAgICAgICAgICB0WzI5NTldID0gNzUxMztcbiAgICAgICAgICAgICAgICAgICAgdFsyOTYwXSA9IDc1MTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk2Ml0gPSA3NTE2O1xuICAgICAgICAgICAgICAgICAgICB0WzI5NjNdID0gNzUxNztcbiAgICAgICAgICAgICAgICAgICAgdFsyOTY0XSA9IDc1MTg7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk2Nl0gPSA3NTIwO1xuICAgICAgICAgICAgICAgICAgICB0WzI5NjddID0gNzUyMTtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTY4XSA9IDc1MjI7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk3MF0gPSA3NTI0O1xuICAgICAgICAgICAgICAgICAgICB0WzI5NzFdID0gNzUyNTtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTcyXSA9IDc1MjY7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk3NF0gPSA3NTI4O1xuICAgICAgICAgICAgICAgICAgICB0WzI5NzVdID0gNzUyOTtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTc2XSA9IDc1MzA7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk3OF0gPSAxNTM3O1xuICAgICAgICAgICAgICAgICAgICB0WzI5NzldID0gMTUzODtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTgwXSA9IDE1Mzk7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk4Ml0gPSAxNTQ5O1xuICAgICAgICAgICAgICAgICAgICB0WzI5ODNdID0gMTU1MTtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTg0XSA9IDE1NTI7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk4Nl0gPSAxNTU0O1xuICAgICAgICAgICAgICAgICAgICB0WzI5ODddID0gMTU1NTtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTg4XSA9IDE1NTY7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk5MF0gPSAxNjIzO1xuICAgICAgICAgICAgICAgICAgICB0WzI5OTFdID0gMTYyNDtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTk1XSA9IDE3NzU7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk5OV0gPSAxNzkxO1xuICAgICAgICAgICAgICAgICAgICB0WzMwMDJdID0gNjQyOTA7XG4gICAgICAgICAgICAgICAgICAgIHRbMzAwM10gPSA2NDI5MTtcbiAgICAgICAgICAgICAgICAgICAgdFszMDA0XSA9IDY0MjkyO1xuICAgICAgICAgICAgICAgICAgICB0WzMwMDZdID0gNjQyOTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMzAwN10gPSA2NDI5NTtcbiAgICAgICAgICAgICAgICAgICAgdFszMDA4XSA9IDY0Mjk2O1xuICAgICAgICAgICAgICAgICAgICB0WzMwMTFdID0gMTkwMDtcbiAgICAgICAgICAgICAgICAgICAgdFszMDE0XSA9IDgyMjM7XG4gICAgICAgICAgICAgICAgICAgIHRbMzAxNV0gPSA4MjQ0O1xuICAgICAgICAgICAgICAgICAgICB0WzMwMTddID0gNzUzMjtcbiAgICAgICAgICAgICAgICAgICAgdFszMDE4XSA9IDc1MzM7XG4gICAgICAgICAgICAgICAgICAgIHRbMzAxOV0gPSA3NTM0O1xuICAgICAgICAgICAgICAgICAgICB0WzMwNzVdID0gNzU5MDtcbiAgICAgICAgICAgICAgICAgICAgdFszMDc2XSA9IDc1OTE7XG4gICAgICAgICAgICAgICAgICAgIHRbMzA3OV0gPSA3NTk0O1xuICAgICAgICAgICAgICAgICAgICB0WzMwODBdID0gNzU5NTtcbiAgICAgICAgICAgICAgICAgICAgdFszMDgzXSA9IDc1OTg7XG4gICAgICAgICAgICAgICAgICAgIHRbMzA4NF0gPSA3NTk5O1xuICAgICAgICAgICAgICAgICAgICB0WzMwODddID0gNzYwMjtcbiAgICAgICAgICAgICAgICAgICAgdFszMDg4XSA9IDc2MDM7XG4gICAgICAgICAgICAgICAgICAgIHRbMzA5MV0gPSA3NjA2O1xuICAgICAgICAgICAgICAgICAgICB0WzMwOTJdID0gNzYwNztcbiAgICAgICAgICAgICAgICAgICAgdFszMDk1XSA9IDc2MTA7XG4gICAgICAgICAgICAgICAgICAgIHRbMzA5Nl0gPSA3NjExO1xuICAgICAgICAgICAgICAgICAgICB0WzMwOTldID0gNzYxNDtcbiAgICAgICAgICAgICAgICAgICAgdFszMTAwXSA9IDc2MTU7XG4gICAgICAgICAgICAgICAgICAgIHRbMzEwM10gPSA3NjE4O1xuICAgICAgICAgICAgICAgICAgICB0WzMxMDRdID0gNzYxOTtcbiAgICAgICAgICAgICAgICAgICAgdFszMTA3XSA9IDgzMzc7XG4gICAgICAgICAgICAgICAgICAgIHRbMzEwOF0gPSA4MzM4O1xuICAgICAgICAgICAgICAgICAgICB0WzMxMTZdID0gMTg4NDtcbiAgICAgICAgICAgICAgICAgICAgdFszMTE5XSA9IDE4ODU7XG4gICAgICAgICAgICAgICAgICAgIHRbMzEyMF0gPSAxODg1O1xuICAgICAgICAgICAgICAgICAgICB0WzMxMjNdID0gMTg4NjtcbiAgICAgICAgICAgICAgICAgICAgdFszMTI0XSA9IDE4ODY7XG4gICAgICAgICAgICAgICAgICAgIHRbMzEyN10gPSAxODg3O1xuICAgICAgICAgICAgICAgICAgICB0WzMxMjhdID0gMTg4NztcbiAgICAgICAgICAgICAgICAgICAgdFszMTMxXSA9IDE4ODg7XG4gICAgICAgICAgICAgICAgICAgIHRbMzEzMl0gPSAxODg4O1xuICAgICAgICAgICAgICAgICAgICB0WzMxMzVdID0gMTg4OTtcbiAgICAgICAgICAgICAgICAgICAgdFszMTM2XSA9IDE4ODk7XG4gICAgICAgICAgICAgICAgICAgIHRbMzEzOV0gPSAxODkwO1xuICAgICAgICAgICAgICAgICAgICB0WzMxNDBdID0gMTg5MDtcbiAgICAgICAgICAgICAgICAgICAgdFszMTQzXSA9IDE4OTE7XG4gICAgICAgICAgICAgICAgICAgIHRbMzE0NF0gPSAxODkxO1xuICAgICAgICAgICAgICAgICAgICB0WzMxNDddID0gMTg5MjtcbiAgICAgICAgICAgICAgICAgICAgdFszMTQ4XSA9IDE4OTI7XG4gICAgICAgICAgICAgICAgICAgIHRbMzE1M10gPSA1ODA7XG4gICAgICAgICAgICAgICAgICAgIHRbMzE1NF0gPSA1ODE7XG4gICAgICAgICAgICAgICAgICAgIHRbMzE1N10gPSA1ODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMzE1OF0gPSA1ODU7XG4gICAgICAgICAgICAgICAgICAgIHRbMzE2MV0gPSA1ODg7XG4gICAgICAgICAgICAgICAgICAgIHRbMzE2Ml0gPSA1ODk7XG4gICAgICAgICAgICAgICAgICAgIHRbMzE2NV0gPSA4OTE7XG4gICAgICAgICAgICAgICAgICAgIHRbMzE2Nl0gPSA4OTI7XG4gICAgICAgICAgICAgICAgICAgIHRbMzE2OV0gPSAxMjc0O1xuICAgICAgICAgICAgICAgICAgICB0WzMxNzBdID0gMTI3NTtcbiAgICAgICAgICAgICAgICAgICAgdFszMTczXSA9IDEyNzg7XG4gICAgICAgICAgICAgICAgICAgIHRbMzE3NF0gPSAxMjc5O1xuICAgICAgICAgICAgICAgICAgICB0WzMxODFdID0gNzYyMjtcbiAgICAgICAgICAgICAgICAgICAgdFszMTgyXSA9IDc2MjM7XG4gICAgICAgICAgICAgICAgICAgIHRbMzI4Ml0gPSAxMTc5OTtcbiAgICAgICAgICAgICAgICAgICAgdFszMzE2XSA9IDU3ODtcbiAgICAgICAgICAgICAgICAgICAgdFszMzc5XSA9IDQyNzg1O1xuICAgICAgICAgICAgICAgICAgICB0WzMzOTNdID0gMTE1OTtcbiAgICAgICAgICAgICAgICAgICAgdFszNDE2XSA9IDgzNzc7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMgPSBnZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHM7XG4gICAgICAgICAgICAgICAgdmFyIGdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjayA9ICgwLCBfdXRpbC5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRbMjI3XSA9IDMyMjtcbiAgICAgICAgICAgICAgICAgICAgdFsyNjRdID0gMjYxO1xuICAgICAgICAgICAgICAgICAgICB0WzI5MV0gPSAzNDY7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5nZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckFyaWFsQmxhY2sgPSBnZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckFyaWFsQmxhY2s7XG4gICAgICAgICAgICAgICAgdmFyIGdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaSA9ICgwLCBfdXRpbC5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRbMV0gPSAzMjtcbiAgICAgICAgICAgICAgICAgICAgdFs0XSA9IDY1O1xuICAgICAgICAgICAgICAgICAgICB0WzE3XSA9IDY2O1xuICAgICAgICAgICAgICAgICAgICB0WzE4XSA9IDY3O1xuICAgICAgICAgICAgICAgICAgICB0WzI0XSA9IDY4O1xuICAgICAgICAgICAgICAgICAgICB0WzI4XSA9IDY5O1xuICAgICAgICAgICAgICAgICAgICB0WzM4XSA9IDcwO1xuICAgICAgICAgICAgICAgICAgICB0WzM5XSA9IDcxO1xuICAgICAgICAgICAgICAgICAgICB0WzQ0XSA9IDcyO1xuICAgICAgICAgICAgICAgICAgICB0WzQ3XSA9IDczO1xuICAgICAgICAgICAgICAgICAgICB0WzU4XSA9IDc0O1xuICAgICAgICAgICAgICAgICAgICB0WzYwXSA9IDc1O1xuICAgICAgICAgICAgICAgICAgICB0WzYyXSA9IDc2O1xuICAgICAgICAgICAgICAgICAgICB0WzY4XSA9IDc3O1xuICAgICAgICAgICAgICAgICAgICB0WzY5XSA9IDc4O1xuICAgICAgICAgICAgICAgICAgICB0Wzc1XSA9IDc5O1xuICAgICAgICAgICAgICAgICAgICB0Wzg3XSA9IDgwO1xuICAgICAgICAgICAgICAgICAgICB0Wzg5XSA9IDgxO1xuICAgICAgICAgICAgICAgICAgICB0WzkwXSA9IDgyO1xuICAgICAgICAgICAgICAgICAgICB0Wzk0XSA9IDgzO1xuICAgICAgICAgICAgICAgICAgICB0WzEwMF0gPSA4NDtcbiAgICAgICAgICAgICAgICAgICAgdFsxMDRdID0gODU7XG4gICAgICAgICAgICAgICAgICAgIHRbMTE1XSA9IDg2O1xuICAgICAgICAgICAgICAgICAgICB0WzExNl0gPSA4NztcbiAgICAgICAgICAgICAgICAgICAgdFsxMjFdID0gODg7XG4gICAgICAgICAgICAgICAgICAgIHRbMTIyXSA9IDg5O1xuICAgICAgICAgICAgICAgICAgICB0WzEyN10gPSA5MDtcbiAgICAgICAgICAgICAgICAgICAgdFsyNThdID0gOTc7XG4gICAgICAgICAgICAgICAgICAgIHRbMjY4XSA9IDI2MTtcbiAgICAgICAgICAgICAgICAgICAgdFsyNzFdID0gOTg7XG4gICAgICAgICAgICAgICAgICAgIHRbMjcyXSA9IDk5O1xuICAgICAgICAgICAgICAgICAgICB0WzI3M10gPSAyNjM7XG4gICAgICAgICAgICAgICAgICAgIHRbMjgyXSA9IDEwMDtcbiAgICAgICAgICAgICAgICAgICAgdFsyODZdID0gMTAxO1xuICAgICAgICAgICAgICAgICAgICB0WzI5NV0gPSAyODE7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk2XSA9IDEwMjtcbiAgICAgICAgICAgICAgICAgICAgdFszMzZdID0gMTAzO1xuICAgICAgICAgICAgICAgICAgICB0WzM0Nl0gPSAxMDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMzQ5XSA9IDEwNTtcbiAgICAgICAgICAgICAgICAgICAgdFszNjFdID0gMTA2O1xuICAgICAgICAgICAgICAgICAgICB0WzM2NF0gPSAxMDc7XG4gICAgICAgICAgICAgICAgICAgIHRbMzY3XSA9IDEwODtcbiAgICAgICAgICAgICAgICAgICAgdFszNzFdID0gMzIyO1xuICAgICAgICAgICAgICAgICAgICB0WzM3M10gPSAxMDk7XG4gICAgICAgICAgICAgICAgICAgIHRbMzc0XSA9IDExMDtcbiAgICAgICAgICAgICAgICAgICAgdFszODFdID0gMTExO1xuICAgICAgICAgICAgICAgICAgICB0WzM4M10gPSAyNDM7XG4gICAgICAgICAgICAgICAgICAgIHRbMzkzXSA9IDExMjtcbiAgICAgICAgICAgICAgICAgICAgdFszOTVdID0gMTEzO1xuICAgICAgICAgICAgICAgICAgICB0WzM5Nl0gPSAxMTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbNDAwXSA9IDExNTtcbiAgICAgICAgICAgICAgICAgICAgdFs0MDFdID0gMzQ3O1xuICAgICAgICAgICAgICAgICAgICB0WzQxMF0gPSAxMTY7XG4gICAgICAgICAgICAgICAgICAgIHRbNDM3XSA9IDExNztcbiAgICAgICAgICAgICAgICAgICAgdFs0NDhdID0gMTE4O1xuICAgICAgICAgICAgICAgICAgICB0WzQ0OV0gPSAxMTk7XG4gICAgICAgICAgICAgICAgICAgIHRbNDU0XSA9IDEyMDtcbiAgICAgICAgICAgICAgICAgICAgdFs0NTVdID0gMTIxO1xuICAgICAgICAgICAgICAgICAgICB0WzQ2MF0gPSAxMjI7XG4gICAgICAgICAgICAgICAgICAgIHRbNDYzXSA9IDM4MDtcbiAgICAgICAgICAgICAgICAgICAgdFs4NTNdID0gNDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbODU1XSA9IDU4O1xuICAgICAgICAgICAgICAgICAgICB0Wzg1Nl0gPSA0NjtcbiAgICAgICAgICAgICAgICAgICAgdFs4NzZdID0gNDc7XG4gICAgICAgICAgICAgICAgICAgIHRbODc4XSA9IDQ1O1xuICAgICAgICAgICAgICAgICAgICB0Wzg4Ml0gPSA0NTtcbiAgICAgICAgICAgICAgICAgICAgdFs4OTRdID0gNDA7XG4gICAgICAgICAgICAgICAgICAgIHRbODk1XSA9IDQxO1xuICAgICAgICAgICAgICAgICAgICB0Wzg5Nl0gPSA5MTtcbiAgICAgICAgICAgICAgICAgICAgdFs4OTddID0gOTM7XG4gICAgICAgICAgICAgICAgICAgIHRbOTIzXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICB0WzEwMDRdID0gNDg7XG4gICAgICAgICAgICAgICAgICAgIHRbMTAwNV0gPSA0OTtcbiAgICAgICAgICAgICAgICAgICAgdFsxMDA2XSA9IDUwO1xuICAgICAgICAgICAgICAgICAgICB0WzEwMDddID0gNTE7XG4gICAgICAgICAgICAgICAgICAgIHRbMTAwOF0gPSA1MjtcbiAgICAgICAgICAgICAgICAgICAgdFsxMDA5XSA9IDUzO1xuICAgICAgICAgICAgICAgICAgICB0WzEwMTBdID0gNTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMTAxMV0gPSA1NTtcbiAgICAgICAgICAgICAgICAgICAgdFsxMDEyXSA9IDU2O1xuICAgICAgICAgICAgICAgICAgICB0WzEwMTNdID0gNTc7XG4gICAgICAgICAgICAgICAgICAgIHRbMTA4MV0gPSAzNztcbiAgICAgICAgICAgICAgICAgICAgdFsxMDg1XSA9IDQzO1xuICAgICAgICAgICAgICAgICAgICB0WzEwODZdID0gNDU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5nZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckNhbGlicmkgPSBnZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckNhbGlicmk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE3OSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgdmFyIGdldExvb2t1cFRhYmxlRmFjdG9yeSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNikuZ2V0TG9va3VwVGFibGVGYWN0b3J5O1xuICAgICAgICAgICAgICAgIHZhciBnZXRTcGVjaWFsUFVBU3ltYm9scyA9IGdldExvb2t1cFRhYmxlRmFjdG9yeShmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgICAgICB0WzYzNzIxXSA9IDB4MDBBOTtcbiAgICAgICAgICAgICAgICAgICAgdFs2MzE5M10gPSAweDAwQTk7XG4gICAgICAgICAgICAgICAgICAgIHRbNjM3MjBdID0gMHgwMEFFO1xuICAgICAgICAgICAgICAgICAgICB0WzYzMTk0XSA9IDB4MDBBRTtcbiAgICAgICAgICAgICAgICAgICAgdFs2MzcyMl0gPSAweDIxMjI7XG4gICAgICAgICAgICAgICAgICAgIHRbNjMxOTVdID0gMHgyMTIyO1xuICAgICAgICAgICAgICAgICAgICB0WzYzNzI5XSA9IDB4MjNBNztcbiAgICAgICAgICAgICAgICAgICAgdFs2MzczMF0gPSAweDIzQTg7XG4gICAgICAgICAgICAgICAgICAgIHRbNjM3MzFdID0gMHgyM0E5O1xuICAgICAgICAgICAgICAgICAgICB0WzYzNzQwXSA9IDB4MjNBQjtcbiAgICAgICAgICAgICAgICAgICAgdFs2Mzc0MV0gPSAweDIzQUM7XG4gICAgICAgICAgICAgICAgICAgIHRbNjM3NDJdID0gMHgyM0FEO1xuICAgICAgICAgICAgICAgICAgICB0WzYzNzI2XSA9IDB4MjNBMTtcbiAgICAgICAgICAgICAgICAgICAgdFs2MzcyN10gPSAweDIzQTI7XG4gICAgICAgICAgICAgICAgICAgIHRbNjM3MjhdID0gMHgyM0EzO1xuICAgICAgICAgICAgICAgICAgICB0WzYzNzM3XSA9IDB4MjNBNDtcbiAgICAgICAgICAgICAgICAgICAgdFs2MzczOF0gPSAweDIzQTU7XG4gICAgICAgICAgICAgICAgICAgIHRbNjM3MzldID0gMHgyM0E2O1xuICAgICAgICAgICAgICAgICAgICB0WzYzNzIzXSA9IDB4MjM5QjtcbiAgICAgICAgICAgICAgICAgICAgdFs2MzcyNF0gPSAweDIzOUM7XG4gICAgICAgICAgICAgICAgICAgIHRbNjM3MjVdID0gMHgyMzlEO1xuICAgICAgICAgICAgICAgICAgICB0WzYzNzM0XSA9IDB4MjM5RTtcbiAgICAgICAgICAgICAgICAgICAgdFs2MzczNV0gPSAweDIzOUY7XG4gICAgICAgICAgICAgICAgICAgIHRbNjM3MzZdID0gMHgyM0EwO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG1hcFNwZWNpYWxVbmljb2RlVmFsdWVzKGNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPj0gMHhGRkYwICYmIGNvZGUgPD0gMHhGRkZGKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID49IDB4RjYwMCAmJiBjb2RlIDw9IDB4RjhGRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFNwZWNpYWxQVUFTeW1ib2xzKClbY29kZV0gfHwgY29kZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID09PSAweDAwQUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAweDAwMkQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFVuaWNvZGVGb3JHbHlwaChuYW1lLCBnbHlwaHNVbmljb2RlTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB1bmljb2RlID0gZ2x5cGhzVW5pY29kZU1hcFtuYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuaWNvZGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWVbMF0gPT09ICd1Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVMZW4gPSBuYW1lLmxlbmd0aCwgaGV4U3RyO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWVMZW4gPT09IDcgJiYgbmFtZVsxXSA9PT0gJ24nICYmIG5hbWVbMl0gPT09ICdpJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleFN0ciA9IG5hbWUuc3Vic3RyaW5nKDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lTGVuID49IDUgJiYgbmFtZUxlbiA8PSA3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4U3RyID0gbmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZXhTdHIgPT09IGhleFN0ci50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZSA9IHBhcnNlSW50KGhleFN0ciwgMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuaWNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIFVuaWNvZGVSYW5nZXMgPSBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MDAwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDAwN0ZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgwMDgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MDBGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDAxMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgwMTdGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MDE4MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDAyNEZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgwMjUwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MDJBRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDAyQjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgwMkZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MDMwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDAzNkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgwMzcwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MDNGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDJDODAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgyQ0ZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MDQwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDA0RkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgwNTMwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MDU4RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDA1OTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgwNUZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4QTUwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweEE2M0ZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgwNjAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MDZGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDA3QzAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgwN0ZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MDkwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDA5N0ZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgwOTgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MDlGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDBBMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgwQTdGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MEE4MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDBBRkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgwQjAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MEI3RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDBCODAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgwQkZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MEMwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDBDN0ZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgwQzgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MENGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDBEMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgwRDdGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MEUwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDBFN0ZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgwRTgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MEVGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDEwQTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxMEZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MUIwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDFCN0ZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxMTAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MTFGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDFFMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxRUZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MUYwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDFGRkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgyMDAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MjA2RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDIwNzAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgyMDlGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MjBBMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDIwQ0ZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgyMEQwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MjBGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDIxMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgyMTRGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MjE1MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDIxOEZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgyMTkwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MjFGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDIyMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgyMkZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MjMwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDIzRkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgyNDAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MjQzRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDI0NDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgyNDVGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MjQ2MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDI0RkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgyNTAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MjU3RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDI1ODAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgyNTlGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MjVBMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDI1RkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgyNjAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MjZGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDI3MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgyN0JGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MzAwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDMwM0ZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgzMDQwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MzA5RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDMwQTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgzMEZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MzEwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDMxMkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgzMTMwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MzE4RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweEE4NDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHhBODdGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MzIwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDMyRkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgzMzAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MzNGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweEFDMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHhEN0FGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4RDgwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweERGRkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxMDkwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDEwOTFGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4NEUwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDlGRkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHhFMDAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4RjhGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDMxQzAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgzMUVGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4RkIwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweEZCNEZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHhGQjUwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4RkRGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweEZFMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHhGRTJGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4RkUxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweEZFMUZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHhGRTUwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4RkU2RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweEZFNzAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHhGRUZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4RkYwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweEZGRUZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHhGRkYwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4RkZGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDBGMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgwRkZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MDcwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDA3NEZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgwNzgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MDdCRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDBEODAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgwREZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MTAwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDEwOUZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxMjAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MTM3RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDEzQTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxM0ZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MTQwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDE2N0ZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxNjgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MTY5RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDE2QTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxNkZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MTc4MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDE3RkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxODAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MThBRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDI4MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgyOEZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4QTAwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweEE0OEZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxNzAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MTcxRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDEwMzAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MTAzMkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxMDMzMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDEwMzRGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MTA0MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxMDQ0RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDFEMDAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MUQwRkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxRDQwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDFEN0ZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4RkYwMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHhGRkZGRFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweEZFMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHhGRTBGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4RTAwMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHhFMDA3RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDE5MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxOTRGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MTk1MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDE5N0ZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxOTgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MTlERlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDFBMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxQTFGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MkMwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDJDNUZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgyRDMwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MkQ3RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDREQzAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHg0REZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4QTgwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweEE4MkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxMDAwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDEwMDdGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MTAxNDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxMDE4RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDEwMzgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MTAzOUZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxMDNBMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDEwM0RGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MTA0NTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxMDQ3RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDEwNDgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MTA0QUZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxMDgwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDEwODNGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MTBBMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxMEE1RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDFEMzAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MUQzNUZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxMjAwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDEyM0ZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MUQzNjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxRDM3RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDFCODAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxQkJGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MUMwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDFDNEZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxQzUwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MUM3RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweEE4ODAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHhBOERGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4QTkwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweEE5MkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHhBOTMwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4QTk1RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweEFBMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHhBQTVGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MTAxOTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxMDFDRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDEwMUQwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MTAxRkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxMDJBMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDEwMkRGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MUYwMzAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxRjA5RlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRVbmljb2RlUmFuZ2VGb3IodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gVW5pY29kZVJhbmdlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBVbmljb2RlUmFuZ2VzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID49IHJhbmdlLmJlZ2luICYmIHZhbHVlIDwgcmFuZ2UuZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc1JUTFJhbmdlRm9yKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IFVuaWNvZGVSYW5nZXNbMTNdO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPj0gcmFuZ2UuYmVnaW4gJiYgdmFsdWUgPCByYW5nZS5lbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJhbmdlID0gVW5pY29kZVJhbmdlc1sxMV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+PSByYW5nZS5iZWdpbiAmJiB2YWx1ZSA8IHJhbmdlLmVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgZ2V0Tm9ybWFsaXplZFVuaWNvZGVzID0gZ2V0TG9va3VwVGFibGVGYWN0b3J5KGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTAwQTgnXSA9ICdcXHUwMDIwXFx1MDMwOCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTAwQUYnXSA9ICdcXHUwMDIwXFx1MDMwNCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTAwQjQnXSA9ICdcXHUwMDIwXFx1MDMwMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTAwQjUnXSA9ICdcXHUwM0JDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDBCOCddID0gJ1xcdTAwMjBcXHUwMzI3JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDEzMiddID0gJ1xcdTAwNDlcXHUwMDRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDEzMyddID0gJ1xcdTAwNjlcXHUwMDZBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDEzRiddID0gJ1xcdTAwNENcXHUwMEI3JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDE0MCddID0gJ1xcdTAwNkNcXHUwMEI3JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDE0OSddID0gJ1xcdTAyQkNcXHUwMDZFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDE3RiddID0gJ1xcdTAwNzMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMUM0J10gPSAnXFx1MDA0NFxcdTAxN0QnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMUM1J10gPSAnXFx1MDA0NFxcdTAxN0UnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMUM2J10gPSAnXFx1MDA2NFxcdTAxN0UnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMUM3J10gPSAnXFx1MDA0Q1xcdTAwNEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMUM4J10gPSAnXFx1MDA0Q1xcdTAwNkEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMUM5J10gPSAnXFx1MDA2Q1xcdTAwNkEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMUNBJ10gPSAnXFx1MDA0RVxcdTAwNEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMUNCJ10gPSAnXFx1MDA0RVxcdTAwNkEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMUNDJ10gPSAnXFx1MDA2RVxcdTAwNkEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMUYxJ10gPSAnXFx1MDA0NFxcdTAwNUEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMUYyJ10gPSAnXFx1MDA0NFxcdTAwN0EnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMUYzJ10gPSAnXFx1MDA2NFxcdTAwN0EnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMkQ4J10gPSAnXFx1MDAyMFxcdTAzMDYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMkQ5J10gPSAnXFx1MDAyMFxcdTAzMDcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMkRBJ10gPSAnXFx1MDAyMFxcdTAzMEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMkRCJ10gPSAnXFx1MDAyMFxcdTAzMjgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMkRDJ10gPSAnXFx1MDAyMFxcdTAzMDMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMkREJ10gPSAnXFx1MDAyMFxcdTAzMEInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMzdBJ10gPSAnXFx1MDAyMFxcdTAzNDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMzg0J10gPSAnXFx1MDAyMFxcdTAzMDEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwM0QwJ10gPSAnXFx1MDNCMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTAzRDEnXSA9ICdcXHUwM0I4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDNEMiddID0gJ1xcdTAzQTUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwM0Q1J10gPSAnXFx1MDNDNic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTAzRDYnXSA9ICdcXHUwM0MwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDNGMCddID0gJ1xcdTAzQkEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwM0YxJ10gPSAnXFx1MDNDMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTAzRjInXSA9ICdcXHUwM0MyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDNGNCddID0gJ1xcdTAzOTgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwM0Y1J10gPSAnXFx1MDNCNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTAzRjknXSA9ICdcXHUwM0EzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDU4NyddID0gJ1xcdTA1NjVcXHUwNTgyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDY3NSddID0gJ1xcdTA2MjdcXHUwNjc0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDY3NiddID0gJ1xcdTA2NDhcXHUwNjc0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDY3NyddID0gJ1xcdTA2QzdcXHUwNjc0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDY3OCddID0gJ1xcdTA2NEFcXHUwNjc0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MEUzMyddID0gJ1xcdTBFNERcXHUwRTMyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MEVCMyddID0gJ1xcdTBFQ0RcXHUwRUIyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MEVEQyddID0gJ1xcdTBFQUJcXHUwRTk5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MEVERCddID0gJ1xcdTBFQUJcXHUwRUExJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MEY3NyddID0gJ1xcdTBGQjJcXHUwRjgxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MEY3OSddID0gJ1xcdTBGQjNcXHUwRjgxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MUU5QSddID0gJ1xcdTAwNjFcXHUwMkJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MUZCRCddID0gJ1xcdTAwMjBcXHUwMzEzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MUZCRiddID0gJ1xcdTAwMjBcXHUwMzEzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MUZDMCddID0gJ1xcdTAwMjBcXHUwMzQyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MUZGRSddID0gJ1xcdTAwMjBcXHUwMzE0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjAwMiddID0gJ1xcdTAwMjAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMDAzJ10gPSAnXFx1MDAyMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIwMDQnXSA9ICdcXHUwMDIwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjAwNSddID0gJ1xcdTAwMjAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMDA2J10gPSAnXFx1MDAyMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIwMDgnXSA9ICdcXHUwMDIwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjAwOSddID0gJ1xcdTAwMjAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMDBBJ10gPSAnXFx1MDAyMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIwMTcnXSA9ICdcXHUwMDIwXFx1MDMzMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIwMjQnXSA9ICdcXHUwMDJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjAyNSddID0gJ1xcdTAwMkVcXHUwMDJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjAyNiddID0gJ1xcdTAwMkVcXHUwMDJFXFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIwMzMnXSA9ICdcXHUyMDMyXFx1MjAzMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIwMzQnXSA9ICdcXHUyMDMyXFx1MjAzMlxcdTIwMzInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMDM2J10gPSAnXFx1MjAzNVxcdTIwMzUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMDM3J10gPSAnXFx1MjAzNVxcdTIwMzVcXHUyMDM1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjAzQyddID0gJ1xcdTAwMjFcXHUwMDIxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjAzRSddID0gJ1xcdTAwMjBcXHUwMzA1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjA0NyddID0gJ1xcdTAwM0ZcXHUwMDNGJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjA0OCddID0gJ1xcdTAwM0ZcXHUwMDIxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjA0OSddID0gJ1xcdTAwMjFcXHUwMDNGJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjA1NyddID0gJ1xcdTIwMzJcXHUyMDMyXFx1MjAzMlxcdTIwMzInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMDVGJ10gPSAnXFx1MDAyMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIwQTgnXSA9ICdcXHUwMDUyXFx1MDA3Myc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxMDAnXSA9ICdcXHUwMDYxXFx1MDAyRlxcdTAwNjMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTAxJ10gPSAnXFx1MDA2MVxcdTAwMkZcXHUwMDczJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjEwMyddID0gJ1xcdTAwQjBcXHUwMDQzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjEwNSddID0gJ1xcdTAwNjNcXHUwMDJGXFx1MDA2Ric7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxMDYnXSA9ICdcXHUwMDYzXFx1MDAyRlxcdTAwNzUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTA3J10gPSAnXFx1MDE5MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxMDknXSA9ICdcXHUwMEIwXFx1MDA0Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxMTYnXSA9ICdcXHUwMDRFXFx1MDA2Ric7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxMjEnXSA9ICdcXHUwMDU0XFx1MDA0NVxcdTAwNEMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTM1J10gPSAnXFx1MDVEMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxMzYnXSA9ICdcXHUwNUQxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjEzNyddID0gJ1xcdTA1RDInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTM4J10gPSAnXFx1MDVEMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxM0InXSA9ICdcXHUwMDQ2XFx1MDA0MVxcdTAwNTgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTYwJ10gPSAnXFx1MDA0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxNjEnXSA9ICdcXHUwMDQ5XFx1MDA0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxNjInXSA9ICdcXHUwMDQ5XFx1MDA0OVxcdTAwNDknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTYzJ10gPSAnXFx1MDA0OVxcdTAwNTYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTY0J10gPSAnXFx1MDA1Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxNjUnXSA9ICdcXHUwMDU2XFx1MDA0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxNjYnXSA9ICdcXHUwMDU2XFx1MDA0OVxcdTAwNDknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTY3J10gPSAnXFx1MDA1NlxcdTAwNDlcXHUwMDQ5XFx1MDA0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxNjgnXSA9ICdcXHUwMDQ5XFx1MDA1OCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxNjknXSA9ICdcXHUwMDU4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjE2QSddID0gJ1xcdTAwNThcXHUwMDQ5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjE2QiddID0gJ1xcdTAwNThcXHUwMDQ5XFx1MDA0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxNkMnXSA9ICdcXHUwMDRDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjE2RCddID0gJ1xcdTAwNDMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTZFJ10gPSAnXFx1MDA0NCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxNkYnXSA9ICdcXHUwMDREJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjE3MCddID0gJ1xcdTAwNjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTcxJ10gPSAnXFx1MDA2OVxcdTAwNjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTcyJ10gPSAnXFx1MDA2OVxcdTAwNjlcXHUwMDY5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjE3MyddID0gJ1xcdTAwNjlcXHUwMDc2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjE3NCddID0gJ1xcdTAwNzYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTc1J10gPSAnXFx1MDA3NlxcdTAwNjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTc2J10gPSAnXFx1MDA3NlxcdTAwNjlcXHUwMDY5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjE3NyddID0gJ1xcdTAwNzZcXHUwMDY5XFx1MDA2OVxcdTAwNjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTc4J10gPSAnXFx1MDA2OVxcdTAwNzgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTc5J10gPSAnXFx1MDA3OCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxN0EnXSA9ICdcXHUwMDc4XFx1MDA2OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxN0InXSA9ICdcXHUwMDc4XFx1MDA2OVxcdTAwNjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTdDJ10gPSAnXFx1MDA2Qyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxN0QnXSA9ICdcXHUwMDYzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjE3RSddID0gJ1xcdTAwNjQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTdGJ10gPSAnXFx1MDA2RCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIyMkMnXSA9ICdcXHUyMjJCXFx1MjIyQic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIyMkQnXSA9ICdcXHUyMjJCXFx1MjIyQlxcdTIyMkInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMjJGJ10gPSAnXFx1MjIyRVxcdTIyMkUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMjMwJ10gPSAnXFx1MjIyRVxcdTIyMkVcXHUyMjJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjQ3NCddID0gJ1xcdTAwMjhcXHUwMDMxXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0NzUnXSA9ICdcXHUwMDI4XFx1MDAzMlxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNDc2J10gPSAnXFx1MDAyOFxcdTAwMzNcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjQ3NyddID0gJ1xcdTAwMjhcXHUwMDM0XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0NzgnXSA9ICdcXHUwMDI4XFx1MDAzNVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNDc5J10gPSAnXFx1MDAyOFxcdTAwMzZcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjQ3QSddID0gJ1xcdTAwMjhcXHUwMDM3XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0N0InXSA9ICdcXHUwMDI4XFx1MDAzOFxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNDdDJ10gPSAnXFx1MDAyOFxcdTAwMzlcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjQ3RCddID0gJ1xcdTAwMjhcXHUwMDMxXFx1MDAzMFxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNDdFJ10gPSAnXFx1MDAyOFxcdTAwMzFcXHUwMDMxXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0N0YnXSA9ICdcXHUwMDI4XFx1MDAzMVxcdTAwMzJcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjQ4MCddID0gJ1xcdTAwMjhcXHUwMDMxXFx1MDAzM1xcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNDgxJ10gPSAnXFx1MDAyOFxcdTAwMzFcXHUwMDM0XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0ODInXSA9ICdcXHUwMDI4XFx1MDAzMVxcdTAwMzVcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjQ4MyddID0gJ1xcdTAwMjhcXHUwMDMxXFx1MDAzNlxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNDg0J10gPSAnXFx1MDAyOFxcdTAwMzFcXHUwMDM3XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0ODUnXSA9ICdcXHUwMDI4XFx1MDAzMVxcdTAwMzhcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjQ4NiddID0gJ1xcdTAwMjhcXHUwMDMxXFx1MDAzOVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNDg3J10gPSAnXFx1MDAyOFxcdTAwMzJcXHUwMDMwXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0ODgnXSA9ICdcXHUwMDMxXFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0ODknXSA9ICdcXHUwMDMyXFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0OEEnXSA9ICdcXHUwMDMzXFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0OEInXSA9ICdcXHUwMDM0XFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0OEMnXSA9ICdcXHUwMDM1XFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0OEQnXSA9ICdcXHUwMDM2XFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0OEUnXSA9ICdcXHUwMDM3XFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0OEYnXSA9ICdcXHUwMDM4XFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0OTAnXSA9ICdcXHUwMDM5XFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0OTEnXSA9ICdcXHUwMDMxXFx1MDAzMFxcdTAwMkUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNDkyJ10gPSAnXFx1MDAzMVxcdTAwMzFcXHUwMDJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjQ5MyddID0gJ1xcdTAwMzFcXHUwMDMyXFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0OTQnXSA9ICdcXHUwMDMxXFx1MDAzM1xcdTAwMkUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNDk1J10gPSAnXFx1MDAzMVxcdTAwMzRcXHUwMDJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjQ5NiddID0gJ1xcdTAwMzFcXHUwMDM1XFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0OTcnXSA9ICdcXHUwMDMxXFx1MDAzNlxcdTAwMkUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNDk4J10gPSAnXFx1MDAzMVxcdTAwMzdcXHUwMDJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjQ5OSddID0gJ1xcdTAwMzFcXHUwMDM4XFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0OUEnXSA9ICdcXHUwMDMxXFx1MDAzOVxcdTAwMkUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNDlCJ10gPSAnXFx1MDAzMlxcdTAwMzBcXHUwMDJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjQ5QyddID0gJ1xcdTAwMjhcXHUwMDYxXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0OUQnXSA9ICdcXHUwMDI4XFx1MDA2MlxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNDlFJ10gPSAnXFx1MDAyOFxcdTAwNjNcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjQ5RiddID0gJ1xcdTAwMjhcXHUwMDY0XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0QTAnXSA9ICdcXHUwMDI4XFx1MDA2NVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNEExJ10gPSAnXFx1MDAyOFxcdTAwNjZcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjRBMiddID0gJ1xcdTAwMjhcXHUwMDY3XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0QTMnXSA9ICdcXHUwMDI4XFx1MDA2OFxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNEE0J10gPSAnXFx1MDAyOFxcdTAwNjlcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjRBNSddID0gJ1xcdTAwMjhcXHUwMDZBXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0QTYnXSA9ICdcXHUwMDI4XFx1MDA2QlxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNEE3J10gPSAnXFx1MDAyOFxcdTAwNkNcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjRBOCddID0gJ1xcdTAwMjhcXHUwMDZEXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0QTknXSA9ICdcXHUwMDI4XFx1MDA2RVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNEFBJ10gPSAnXFx1MDAyOFxcdTAwNkZcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjRBQiddID0gJ1xcdTAwMjhcXHUwMDcwXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0QUMnXSA9ICdcXHUwMDI4XFx1MDA3MVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNEFEJ10gPSAnXFx1MDAyOFxcdTAwNzJcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjRBRSddID0gJ1xcdTAwMjhcXHUwMDczXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0QUYnXSA9ICdcXHUwMDI4XFx1MDA3NFxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNEIwJ10gPSAnXFx1MDAyOFxcdTAwNzVcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjRCMSddID0gJ1xcdTAwMjhcXHUwMDc2XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0QjInXSA9ICdcXHUwMDI4XFx1MDA3N1xcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNEIzJ10gPSAnXFx1MDAyOFxcdTAwNzhcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjRCNCddID0gJ1xcdTAwMjhcXHUwMDc5XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0QjUnXSA9ICdcXHUwMDI4XFx1MDA3QVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyQTBDJ10gPSAnXFx1MjIyQlxcdTIyMkJcXHUyMjJCXFx1MjIyQic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJBNzQnXSA9ICdcXHUwMDNBXFx1MDAzQVxcdTAwM0QnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyQTc1J10gPSAnXFx1MDAzRFxcdTAwM0QnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyQTc2J10gPSAnXFx1MDAzRFxcdTAwM0RcXHUwMDNEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkU5RiddID0gJ1xcdTZCQ0QnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRUYzJ10gPSAnXFx1OUY5Ric7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMDAnXSA9ICdcXHU0RTAwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYwMSddID0gJ1xcdTRFMjgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjAyJ10gPSAnXFx1NEUzNic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMDMnXSA9ICdcXHU0RTNGJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYwNCddID0gJ1xcdTRFNTknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjA1J10gPSAnXFx1NEU4NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMDYnXSA9ICdcXHU0RThDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYwNyddID0gJ1xcdTRFQTAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjA4J10gPSAnXFx1NEVCQSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMDknXSA9ICdcXHU1MTNGJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYwQSddID0gJ1xcdTUxNjUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjBCJ10gPSAnXFx1NTE2Qic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMEMnXSA9ICdcXHU1MTgyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYwRCddID0gJ1xcdTUxOTYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjBFJ10gPSAnXFx1NTFBQic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMEYnXSA9ICdcXHU1MUUwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYxMCddID0gJ1xcdTUxRjUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjExJ10gPSAnXFx1NTIwMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMTInXSA9ICdcXHU1MjlCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYxMyddID0gJ1xcdTUyRjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjE0J10gPSAnXFx1NTMxNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMTUnXSA9ICdcXHU1MzFBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYxNiddID0gJ1xcdTUzMzgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjE3J10gPSAnXFx1NTM0MSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMTgnXSA9ICdcXHU1MzVDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYxOSddID0gJ1xcdTUzNjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjFBJ10gPSAnXFx1NTM4Mic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMUInXSA9ICdcXHU1M0I2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYxQyddID0gJ1xcdTUzQzgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjFEJ10gPSAnXFx1NTNFMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMUUnXSA9ICdcXHU1NkQ3JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYxRiddID0gJ1xcdTU3MUYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjIwJ10gPSAnXFx1NThFQic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMjEnXSA9ICdcXHU1OTAyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYyMiddID0gJ1xcdTU5MEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjIzJ10gPSAnXFx1NTkxNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMjQnXSA9ICdcXHU1OTI3JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYyNSddID0gJ1xcdTU5NzMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjI2J10gPSAnXFx1NUI1MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMjcnXSA9ICdcXHU1QjgwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYyOCddID0gJ1xcdTVCRjgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjI5J10gPSAnXFx1NUMwRic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMkEnXSA9ICdcXHU1QzIyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYyQiddID0gJ1xcdTVDMzgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjJDJ10gPSAnXFx1NUM2RSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMkQnXSA9ICdcXHU1QzcxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYyRSddID0gJ1xcdTVEREInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjJGJ10gPSAnXFx1NURFNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMzAnXSA9ICdcXHU1REYxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYzMSddID0gJ1xcdTVERkUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjMyJ10gPSAnXFx1NUU3Mic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMzMnXSA9ICdcXHU1RTdBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYzNCddID0gJ1xcdTVFN0YnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjM1J10gPSAnXFx1NUVGNCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMzYnXSA9ICdcXHU1RUZFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYzNyddID0gJ1xcdTVGMEInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjM4J10gPSAnXFx1NUYxMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMzknXSA9ICdcXHU1RjUwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYzQSddID0gJ1xcdTVGNjEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjNCJ10gPSAnXFx1NUY3Myc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGM0MnXSA9ICdcXHU1RkMzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYzRCddID0gJ1xcdTYyMDgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjNFJ10gPSAnXFx1NjIzNic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGM0YnXSA9ICdcXHU2MjRCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY0MCddID0gJ1xcdTY1MkYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjQxJ10gPSAnXFx1NjUzNCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNDInXSA9ICdcXHU2NTg3JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY0MyddID0gJ1xcdTY1OTcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjQ0J10gPSAnXFx1NjVBNCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNDUnXSA9ICdcXHU2NUI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY0NiddID0gJ1xcdTY1RTAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjQ3J10gPSAnXFx1NjVFNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNDgnXSA9ICdcXHU2NkYwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY0OSddID0gJ1xcdTY3MDgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjRBJ10gPSAnXFx1NjcyOCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNEInXSA9ICdcXHU2QjIwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY0QyddID0gJ1xcdTZCNjInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjREJ10gPSAnXFx1NkI3OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNEUnXSA9ICdcXHU2QkIzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY0RiddID0gJ1xcdTZCQ0InO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjUwJ10gPSAnXFx1NkJENCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNTEnXSA9ICdcXHU2QkRCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY1MiddID0gJ1xcdTZDMEYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjUzJ10gPSAnXFx1NkMxNCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNTQnXSA9ICdcXHU2QzM0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY1NSddID0gJ1xcdTcwNkInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjU2J10gPSAnXFx1NzIyQSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNTcnXSA9ICdcXHU3MjM2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY1OCddID0gJ1xcdTcyM0InO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjU5J10gPSAnXFx1NzIzRic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNUEnXSA9ICdcXHU3MjQ3JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY1QiddID0gJ1xcdTcyNTknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjVDJ10gPSAnXFx1NzI1Qic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNUQnXSA9ICdcXHU3MkFDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY1RSddID0gJ1xcdTczODQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjVGJ10gPSAnXFx1NzM4OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNjAnXSA9ICdcXHU3NERDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY2MSddID0gJ1xcdTc0RTYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjYyJ10gPSAnXFx1NzUxOCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNjMnXSA9ICdcXHU3NTFGJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY2NCddID0gJ1xcdTc1MjgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjY1J10gPSAnXFx1NzUzMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNjYnXSA9ICdcXHU3NThCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY2NyddID0gJ1xcdTc1OTInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjY4J10gPSAnXFx1NzY3Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNjknXSA9ICdcXHU3NjdEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY2QSddID0gJ1xcdTc2QUUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjZCJ10gPSAnXFx1NzZCRic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNkMnXSA9ICdcXHU3NkVFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY2RCddID0gJ1xcdTc3REInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjZFJ10gPSAnXFx1NzdFMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNkYnXSA9ICdcXHU3N0YzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY3MCddID0gJ1xcdTc5M0EnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjcxJ10gPSAnXFx1NzlCOCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNzInXSA9ICdcXHU3OUJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY3MyddID0gJ1xcdTdBNzQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjc0J10gPSAnXFx1N0FDQic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNzUnXSA9ICdcXHU3QUY5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY3NiddID0gJ1xcdTdDNzMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjc3J10gPSAnXFx1N0NGOCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNzgnXSA9ICdcXHU3RjM2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY3OSddID0gJ1xcdTdGNTEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjdBJ10gPSAnXFx1N0Y4QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGN0InXSA9ICdcXHU3RkJEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY3QyddID0gJ1xcdTgwMDEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjdEJ10gPSAnXFx1ODAwQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGN0UnXSA9ICdcXHU4MDEyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY3RiddID0gJ1xcdTgwMzMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjgwJ10gPSAnXFx1ODA3Ric7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGODEnXSA9ICdcXHU4MDg5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY4MiddID0gJ1xcdTgxRTMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjgzJ10gPSAnXFx1ODFFQSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGODQnXSA9ICdcXHU4MUYzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY4NSddID0gJ1xcdTgxRkMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjg2J10gPSAnXFx1ODIwQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGODcnXSA9ICdcXHU4MjFCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY4OCddID0gJ1xcdTgyMUYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjg5J10gPSAnXFx1ODI2RSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGOEEnXSA9ICdcXHU4MjcyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY4QiddID0gJ1xcdTgyNzgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjhDJ10gPSAnXFx1ODY0RCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGOEQnXSA9ICdcXHU4NjZCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY4RSddID0gJ1xcdTg4NDAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjhGJ10gPSAnXFx1ODg0Qyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGOTAnXSA9ICdcXHU4ODYzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY5MSddID0gJ1xcdTg5N0UnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjkyJ10gPSAnXFx1ODk4Qic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGOTMnXSA9ICdcXHU4OUQyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY5NCddID0gJ1xcdThBMDAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjk1J10gPSAnXFx1OEMzNyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGOTYnXSA9ICdcXHU4QzQ2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY5NyddID0gJ1xcdThDNTUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjk4J10gPSAnXFx1OEM3OCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGOTknXSA9ICdcXHU4QzlEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY5QSddID0gJ1xcdThENjQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjlCJ10gPSAnXFx1OEQ3MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGOUMnXSA9ICdcXHU4REIzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY5RCddID0gJ1xcdThFQUInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjlFJ10gPSAnXFx1OEVDQSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGOUYnXSA9ICdcXHU4RjlCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZBMCddID0gJ1xcdThGQjAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkExJ10gPSAnXFx1OEZCNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQTInXSA9ICdcXHU5MDkxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZBMyddID0gJ1xcdTkxNDknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkE0J10gPSAnXFx1OTFDNic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQTUnXSA9ICdcXHU5MUNDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZBNiddID0gJ1xcdTkxRDEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkE3J10gPSAnXFx1OTU3Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQTgnXSA9ICdcXHU5NTgwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZBOSddID0gJ1xcdTk2MUMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkFBJ10gPSAnXFx1OTZCNic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQUInXSA9ICdcXHU5NkI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZBQyddID0gJ1xcdTk2RTgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkFEJ10gPSAnXFx1OTc1MSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQUUnXSA9ICdcXHU5NzVFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZBRiddID0gJ1xcdTk3NjInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkIwJ10gPSAnXFx1OTc2OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQjEnXSA9ICdcXHU5N0NCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZCMiddID0gJ1xcdTk3RUQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkIzJ10gPSAnXFx1OTdGMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQjQnXSA9ICdcXHU5ODAxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZCNSddID0gJ1xcdTk4QTgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkI2J10gPSAnXFx1OThEQic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQjcnXSA9ICdcXHU5OERGJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZCOCddID0gJ1xcdTk5OTYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkI5J10gPSAnXFx1OTk5OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQkEnXSA9ICdcXHU5OUFDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZCQiddID0gJ1xcdTlBQTgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkJDJ10gPSAnXFx1OUFEOCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQkQnXSA9ICdcXHU5QURGJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZCRSddID0gJ1xcdTlCMjUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkJGJ10gPSAnXFx1OUIyRic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQzAnXSA9ICdcXHU5QjMyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZDMSddID0gJ1xcdTlCM0MnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkMyJ10gPSAnXFx1OUI1QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQzMnXSA9ICdcXHU5Q0U1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZDNCddID0gJ1xcdTlFNzUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkM1J10gPSAnXFx1OUU3Ric7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQzYnXSA9ICdcXHU5RUE1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZDNyddID0gJ1xcdTlFQkInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkM4J10gPSAnXFx1OUVDMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQzknXSA9ICdcXHU5RUNEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZDQSddID0gJ1xcdTlFRDEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkNCJ10gPSAnXFx1OUVGOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQ0MnXSA9ICdcXHU5RUZEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZDRCddID0gJ1xcdTlGMEUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkNFJ10gPSAnXFx1OUYxMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQ0YnXSA9ICdcXHU5RjIwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZEMCddID0gJ1xcdTlGM0InO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkQxJ10gPSAnXFx1OUY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGRDInXSA9ICdcXHU5RjUyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZEMyddID0gJ1xcdTlGOEQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkQ0J10gPSAnXFx1OUY5Qyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGRDUnXSA9ICdcXHU5RkEwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzAzNiddID0gJ1xcdTMwMTInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMDM4J10gPSAnXFx1NTM0MSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMwMzknXSA9ICdcXHU1MzQ0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzAzQSddID0gJ1xcdTUzNDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMDlCJ10gPSAnXFx1MDAyMFxcdTMwOTknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMDlDJ10gPSAnXFx1MDAyMFxcdTMwOUEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTMxJ10gPSAnXFx1MTEwMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxMzInXSA9ICdcXHUxMTAxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzEzMyddID0gJ1xcdTExQUEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTM0J10gPSAnXFx1MTEwMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxMzUnXSA9ICdcXHUxMUFDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzEzNiddID0gJ1xcdTExQUQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTM3J10gPSAnXFx1MTEwMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxMzgnXSA9ICdcXHUxMTA0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzEzOSddID0gJ1xcdTExMDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTNBJ10gPSAnXFx1MTFCMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxM0InXSA9ICdcXHUxMUIxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzEzQyddID0gJ1xcdTExQjInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTNEJ10gPSAnXFx1MTFCMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxM0UnXSA9ICdcXHUxMUI0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzEzRiddID0gJ1xcdTExQjUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTQwJ10gPSAnXFx1MTExQSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNDEnXSA9ICdcXHUxMTA2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE0MiddID0gJ1xcdTExMDcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTQzJ10gPSAnXFx1MTEwOCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNDQnXSA9ICdcXHUxMTIxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE0NSddID0gJ1xcdTExMDknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTQ2J10gPSAnXFx1MTEwQSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNDcnXSA9ICdcXHUxMTBCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE0OCddID0gJ1xcdTExMEMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTQ5J10gPSAnXFx1MTEwRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNEEnXSA9ICdcXHUxMTBFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE0QiddID0gJ1xcdTExMEYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTRDJ10gPSAnXFx1MTExMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNEQnXSA9ICdcXHUxMTExJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE0RSddID0gJ1xcdTExMTInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTRGJ10gPSAnXFx1MTE2MSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNTAnXSA9ICdcXHUxMTYyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE1MSddID0gJ1xcdTExNjMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTUyJ10gPSAnXFx1MTE2NCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNTMnXSA9ICdcXHUxMTY1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE1NCddID0gJ1xcdTExNjYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTU1J10gPSAnXFx1MTE2Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNTYnXSA9ICdcXHUxMTY4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE1NyddID0gJ1xcdTExNjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTU4J10gPSAnXFx1MTE2QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNTknXSA9ICdcXHUxMTZCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE1QSddID0gJ1xcdTExNkMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTVCJ10gPSAnXFx1MTE2RCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNUMnXSA9ICdcXHUxMTZFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE1RCddID0gJ1xcdTExNkYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTVFJ10gPSAnXFx1MTE3MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNUYnXSA9ICdcXHUxMTcxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE2MCddID0gJ1xcdTExNzInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTYxJ10gPSAnXFx1MTE3Myc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNjInXSA9ICdcXHUxMTc0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE2MyddID0gJ1xcdTExNzUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTY0J10gPSAnXFx1MTE2MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNjUnXSA9ICdcXHUxMTE0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE2NiddID0gJ1xcdTExMTUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTY3J10gPSAnXFx1MTFDNyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNjgnXSA9ICdcXHUxMUM4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE2OSddID0gJ1xcdTExQ0MnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTZBJ10gPSAnXFx1MTFDRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNkInXSA9ICdcXHUxMUQzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE2QyddID0gJ1xcdTExRDcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTZEJ10gPSAnXFx1MTFEOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNkUnXSA9ICdcXHUxMTFDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE2RiddID0gJ1xcdTExREQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTcwJ10gPSAnXFx1MTFERic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNzEnXSA9ICdcXHUxMTFEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE3MiddID0gJ1xcdTExMUUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTczJ10gPSAnXFx1MTEyMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNzQnXSA9ICdcXHUxMTIyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE3NSddID0gJ1xcdTExMjMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTc2J10gPSAnXFx1MTEyNyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNzcnXSA9ICdcXHUxMTI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE3OCddID0gJ1xcdTExMkInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTc5J10gPSAnXFx1MTEyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxN0EnXSA9ICdcXHUxMTJEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE3QiddID0gJ1xcdTExMkUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTdDJ10gPSAnXFx1MTEyRic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxN0QnXSA9ICdcXHUxMTMyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE3RSddID0gJ1xcdTExMzYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTdGJ10gPSAnXFx1MTE0MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxODAnXSA9ICdcXHUxMTQ3JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE4MSddID0gJ1xcdTExNEMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTgyJ10gPSAnXFx1MTFGMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxODMnXSA9ICdcXHUxMUYyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE4NCddID0gJ1xcdTExNTcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTg1J10gPSAnXFx1MTE1OCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxODYnXSA9ICdcXHUxMTU5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE4NyddID0gJ1xcdTExODQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTg4J10gPSAnXFx1MTE4NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxODknXSA9ICdcXHUxMTg4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE4QSddID0gJ1xcdTExOTEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMThCJ10gPSAnXFx1MTE5Mic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxOEMnXSA9ICdcXHUxMTk0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE4RCddID0gJ1xcdTExOUUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMThFJ10gPSAnXFx1MTFBMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMDAnXSA9ICdcXHUwMDI4XFx1MTEwMFxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjAxJ10gPSAnXFx1MDAyOFxcdTExMDJcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIwMiddID0gJ1xcdTAwMjhcXHUxMTAzXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMDMnXSA9ICdcXHUwMDI4XFx1MTEwNVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjA0J10gPSAnXFx1MDAyOFxcdTExMDZcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIwNSddID0gJ1xcdTAwMjhcXHUxMTA3XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMDYnXSA9ICdcXHUwMDI4XFx1MTEwOVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjA3J10gPSAnXFx1MDAyOFxcdTExMEJcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIwOCddID0gJ1xcdTAwMjhcXHUxMTBDXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMDknXSA9ICdcXHUwMDI4XFx1MTEwRVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjBBJ10gPSAnXFx1MDAyOFxcdTExMEZcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIwQiddID0gJ1xcdTAwMjhcXHUxMTEwXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMEMnXSA9ICdcXHUwMDI4XFx1MTExMVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjBEJ10gPSAnXFx1MDAyOFxcdTExMTJcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIwRSddID0gJ1xcdTAwMjhcXHUxMTAwXFx1MTE2MVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjBGJ10gPSAnXFx1MDAyOFxcdTExMDJcXHUxMTYxXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMTAnXSA9ICdcXHUwMDI4XFx1MTEwM1xcdTExNjFcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIxMSddID0gJ1xcdTAwMjhcXHUxMTA1XFx1MTE2MVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjEyJ10gPSAnXFx1MDAyOFxcdTExMDZcXHUxMTYxXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMTMnXSA9ICdcXHUwMDI4XFx1MTEwN1xcdTExNjFcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIxNCddID0gJ1xcdTAwMjhcXHUxMTA5XFx1MTE2MVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjE1J10gPSAnXFx1MDAyOFxcdTExMEJcXHUxMTYxXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMTYnXSA9ICdcXHUwMDI4XFx1MTEwQ1xcdTExNjFcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIxNyddID0gJ1xcdTAwMjhcXHUxMTBFXFx1MTE2MVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjE4J10gPSAnXFx1MDAyOFxcdTExMEZcXHUxMTYxXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMTknXSA9ICdcXHUwMDI4XFx1MTExMFxcdTExNjFcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIxQSddID0gJ1xcdTAwMjhcXHUxMTExXFx1MTE2MVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjFCJ10gPSAnXFx1MDAyOFxcdTExMTJcXHUxMTYxXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMUMnXSA9ICdcXHUwMDI4XFx1MTEwQ1xcdTExNkVcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIxRCddID0gJ1xcdTAwMjhcXHUxMTBCXFx1MTE2OVxcdTExMENcXHUxMTY1XFx1MTFBQlxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjFFJ10gPSAnXFx1MDAyOFxcdTExMEJcXHUxMTY5XFx1MTExMlxcdTExNkVcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIyMCddID0gJ1xcdTAwMjhcXHU0RTAwXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMjEnXSA9ICdcXHUwMDI4XFx1NEU4Q1xcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjIyJ10gPSAnXFx1MDAyOFxcdTRFMDlcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIyMyddID0gJ1xcdTAwMjhcXHU1NkRCXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMjQnXSA9ICdcXHUwMDI4XFx1NEU5NFxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjI1J10gPSAnXFx1MDAyOFxcdTUxNkRcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIyNiddID0gJ1xcdTAwMjhcXHU0RTAzXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMjcnXSA9ICdcXHUwMDI4XFx1NTE2QlxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjI4J10gPSAnXFx1MDAyOFxcdTRFNURcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIyOSddID0gJ1xcdTAwMjhcXHU1MzQxXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMkEnXSA9ICdcXHUwMDI4XFx1NjcwOFxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjJCJ10gPSAnXFx1MDAyOFxcdTcwNkJcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIyQyddID0gJ1xcdTAwMjhcXHU2QzM0XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMkQnXSA9ICdcXHUwMDI4XFx1NjcyOFxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjJFJ10gPSAnXFx1MDAyOFxcdTkxRDFcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIyRiddID0gJ1xcdTAwMjhcXHU1NzFGXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMzAnXSA9ICdcXHUwMDI4XFx1NjVFNVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjMxJ10gPSAnXFx1MDAyOFxcdTY4MkFcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIzMiddID0gJ1xcdTAwMjhcXHU2NzA5XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMzMnXSA9ICdcXHUwMDI4XFx1NzkzRVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjM0J10gPSAnXFx1MDAyOFxcdTU0MERcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIzNSddID0gJ1xcdTAwMjhcXHU3Mjc5XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMzYnXSA9ICdcXHUwMDI4XFx1OENBMVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjM3J10gPSAnXFx1MDAyOFxcdTc5NURcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIzOCddID0gJ1xcdTAwMjhcXHU1MkI0XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMzknXSA9ICdcXHUwMDI4XFx1NEVFM1xcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjNBJ10gPSAnXFx1MDAyOFxcdTU0N0NcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIzQiddID0gJ1xcdTAwMjhcXHU1QjY2XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyM0MnXSA9ICdcXHUwMDI4XFx1NzZFM1xcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjNEJ10gPSAnXFx1MDAyOFxcdTRGMDFcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIzRSddID0gJ1xcdTAwMjhcXHU4Q0M3XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyM0YnXSA9ICdcXHUwMDI4XFx1NTM1NFxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjQwJ10gPSAnXFx1MDAyOFxcdTc5NkRcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzI0MSddID0gJ1xcdTAwMjhcXHU0RjExXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyNDInXSA9ICdcXHUwMDI4XFx1ODFFQVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjQzJ10gPSAnXFx1MDAyOFxcdTgxRjNcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzJDMCddID0gJ1xcdTAwMzFcXHU2NzA4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzJDMSddID0gJ1xcdTAwMzJcXHU2NzA4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzJDMiddID0gJ1xcdTAwMzNcXHU2NzA4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzJDMyddID0gJ1xcdTAwMzRcXHU2NzA4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzJDNCddID0gJ1xcdTAwMzVcXHU2NzA4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzJDNSddID0gJ1xcdTAwMzZcXHU2NzA4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzJDNiddID0gJ1xcdTAwMzdcXHU2NzA4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzJDNyddID0gJ1xcdTAwMzhcXHU2NzA4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzJDOCddID0gJ1xcdTAwMzlcXHU2NzA4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzJDOSddID0gJ1xcdTAwMzFcXHUwMDMwXFx1NjcwOCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyQ0EnXSA9ICdcXHUwMDMxXFx1MDAzMVxcdTY3MDgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMkNCJ10gPSAnXFx1MDAzMVxcdTAwMzJcXHU2NzA4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM1OCddID0gJ1xcdTAwMzBcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM1OSddID0gJ1xcdTAwMzFcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM1QSddID0gJ1xcdTAwMzJcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM1QiddID0gJ1xcdTAwMzNcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM1QyddID0gJ1xcdTAwMzRcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM1RCddID0gJ1xcdTAwMzVcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM1RSddID0gJ1xcdTAwMzZcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM1RiddID0gJ1xcdTAwMzdcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM2MCddID0gJ1xcdTAwMzhcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM2MSddID0gJ1xcdTAwMzlcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM2MiddID0gJ1xcdTAwMzFcXHUwMDMwXFx1NzBCOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMzNjMnXSA9ICdcXHUwMDMxXFx1MDAzMVxcdTcwQjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMzY0J10gPSAnXFx1MDAzMVxcdTAwMzJcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM2NSddID0gJ1xcdTAwMzFcXHUwMDMzXFx1NzBCOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMzNjYnXSA9ICdcXHUwMDMxXFx1MDAzNFxcdTcwQjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMzY3J10gPSAnXFx1MDAzMVxcdTAwMzVcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM2OCddID0gJ1xcdTAwMzFcXHUwMDM2XFx1NzBCOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMzNjknXSA9ICdcXHUwMDMxXFx1MDAzN1xcdTcwQjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMzZBJ10gPSAnXFx1MDAzMVxcdTAwMzhcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM2QiddID0gJ1xcdTAwMzFcXHUwMDM5XFx1NzBCOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMzNkMnXSA9ICdcXHUwMDMyXFx1MDAzMFxcdTcwQjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMzZEJ10gPSAnXFx1MDAzMlxcdTAwMzFcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM2RSddID0gJ1xcdTAwMzJcXHUwMDMyXFx1NzBCOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMzNkYnXSA9ICdcXHUwMDMyXFx1MDAzM1xcdTcwQjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMzcwJ10gPSAnXFx1MDAzMlxcdTAwMzRcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNFMCddID0gJ1xcdTAwMzFcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNFMSddID0gJ1xcdTAwMzJcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNFMiddID0gJ1xcdTAwMzNcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNFMyddID0gJ1xcdTAwMzRcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNFNCddID0gJ1xcdTAwMzVcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNFNSddID0gJ1xcdTAwMzZcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNFNiddID0gJ1xcdTAwMzdcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNFNyddID0gJ1xcdTAwMzhcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNFOCddID0gJ1xcdTAwMzlcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNFOSddID0gJ1xcdTAwMzFcXHUwMDMwXFx1NjVFNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMzRUEnXSA9ICdcXHUwMDMxXFx1MDAzMVxcdTY1RTUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzM0VCJ10gPSAnXFx1MDAzMVxcdTAwMzJcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNFQyddID0gJ1xcdTAwMzFcXHUwMDMzXFx1NjVFNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMzRUQnXSA9ICdcXHUwMDMxXFx1MDAzNFxcdTY1RTUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzM0VFJ10gPSAnXFx1MDAzMVxcdTAwMzVcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNFRiddID0gJ1xcdTAwMzFcXHUwMDM2XFx1NjVFNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMzRjAnXSA9ICdcXHUwMDMxXFx1MDAzN1xcdTY1RTUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzM0YxJ10gPSAnXFx1MDAzMVxcdTAwMzhcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNGMiddID0gJ1xcdTAwMzFcXHUwMDM5XFx1NjVFNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMzRjMnXSA9ICdcXHUwMDMyXFx1MDAzMFxcdTY1RTUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzM0Y0J10gPSAnXFx1MDAzMlxcdTAwMzFcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNGNSddID0gJ1xcdTAwMzJcXHUwMDMyXFx1NjVFNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMzRjYnXSA9ICdcXHUwMDMyXFx1MDAzM1xcdTY1RTUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzM0Y3J10gPSAnXFx1MDAzMlxcdTAwMzRcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNGOCddID0gJ1xcdTAwMzJcXHUwMDM1XFx1NjVFNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMzRjknXSA9ICdcXHUwMDMyXFx1MDAzNlxcdTY1RTUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzM0ZBJ10gPSAnXFx1MDAzMlxcdTAwMzdcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNGQiddID0gJ1xcdTAwMzJcXHUwMDM4XFx1NjVFNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMzRkMnXSA9ICdcXHUwMDMyXFx1MDAzOVxcdTY1RTUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzM0ZEJ10gPSAnXFx1MDAzM1xcdTAwMzBcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNGRSddID0gJ1xcdTAwMzNcXHUwMDMxXFx1NjVFNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCMDAnXSA9ICdcXHUwMDY2XFx1MDA2Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCMDEnXSA9ICdcXHUwMDY2XFx1MDA2OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCMDInXSA9ICdcXHUwMDY2XFx1MDA2Qyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCMDMnXSA9ICdcXHUwMDY2XFx1MDA2NlxcdTAwNjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjA0J10gPSAnXFx1MDA2NlxcdTAwNjZcXHUwMDZDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkIwNSddID0gJ1xcdTAxN0ZcXHUwMDc0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkIwNiddID0gJ1xcdTAwNzNcXHUwMDc0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkIxMyddID0gJ1xcdTA1NzRcXHUwNTc2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkIxNCddID0gJ1xcdTA1NzRcXHUwNTY1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkIxNSddID0gJ1xcdTA1NzRcXHUwNTZCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkIxNiddID0gJ1xcdTA1N0VcXHUwNTc2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkIxNyddID0gJ1xcdTA1NzRcXHUwNTZEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI0RiddID0gJ1xcdTA1RDBcXHUwNURDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI1MCddID0gJ1xcdTA2NzEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjUxJ10gPSAnXFx1MDY3MSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNTInXSA9ICdcXHUwNjdCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI1MyddID0gJ1xcdTA2N0InO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjU0J10gPSAnXFx1MDY3Qic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNTUnXSA9ICdcXHUwNjdCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI1NiddID0gJ1xcdTA2N0UnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjU3J10gPSAnXFx1MDY3RSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNTgnXSA9ICdcXHUwNjdFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI1OSddID0gJ1xcdTA2N0UnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjVBJ10gPSAnXFx1MDY4MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNUInXSA9ICdcXHUwNjgwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI1QyddID0gJ1xcdTA2ODAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjVEJ10gPSAnXFx1MDY4MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNUUnXSA9ICdcXHUwNjdBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI1RiddID0gJ1xcdTA2N0EnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjYwJ10gPSAnXFx1MDY3QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNjEnXSA9ICdcXHUwNjdBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI2MiddID0gJ1xcdTA2N0YnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjYzJ10gPSAnXFx1MDY3Ric7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNjQnXSA9ICdcXHUwNjdGJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI2NSddID0gJ1xcdTA2N0YnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjY2J10gPSAnXFx1MDY3OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNjcnXSA9ICdcXHUwNjc5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI2OCddID0gJ1xcdTA2NzknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjY5J10gPSAnXFx1MDY3OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNkEnXSA9ICdcXHUwNkE0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI2QiddID0gJ1xcdTA2QTQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjZDJ10gPSAnXFx1MDZBNCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNkQnXSA9ICdcXHUwNkE0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI2RSddID0gJ1xcdTA2QTYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjZGJ10gPSAnXFx1MDZBNic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNzAnXSA9ICdcXHUwNkE2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI3MSddID0gJ1xcdTA2QTYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjcyJ10gPSAnXFx1MDY4NCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNzMnXSA9ICdcXHUwNjg0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI3NCddID0gJ1xcdTA2ODQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjc1J10gPSAnXFx1MDY4NCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNzYnXSA9ICdcXHUwNjgzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI3NyddID0gJ1xcdTA2ODMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjc4J10gPSAnXFx1MDY4Myc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNzknXSA9ICdcXHUwNjgzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI3QSddID0gJ1xcdTA2ODYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjdCJ10gPSAnXFx1MDY4Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCN0MnXSA9ICdcXHUwNjg2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI3RCddID0gJ1xcdTA2ODYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjdFJ10gPSAnXFx1MDY4Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCN0YnXSA9ICdcXHUwNjg3JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI4MCddID0gJ1xcdTA2ODcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjgxJ10gPSAnXFx1MDY4Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCODInXSA9ICdcXHUwNjhEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI4MyddID0gJ1xcdTA2OEQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjg0J10gPSAnXFx1MDY4Qyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCODUnXSA9ICdcXHUwNjhDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI4NiddID0gJ1xcdTA2OEUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjg3J10gPSAnXFx1MDY4RSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCODgnXSA9ICdcXHUwNjg4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI4OSddID0gJ1xcdTA2ODgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjhBJ10gPSAnXFx1MDY5OCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCOEInXSA9ICdcXHUwNjk4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI4QyddID0gJ1xcdTA2OTEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjhEJ10gPSAnXFx1MDY5MSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCOEUnXSA9ICdcXHUwNkE5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI4RiddID0gJ1xcdTA2QTknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjkwJ10gPSAnXFx1MDZBOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCOTEnXSA9ICdcXHUwNkE5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI5MiddID0gJ1xcdTA2QUYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjkzJ10gPSAnXFx1MDZBRic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCOTQnXSA9ICdcXHUwNkFGJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI5NSddID0gJ1xcdTA2QUYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjk2J10gPSAnXFx1MDZCMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCOTcnXSA9ICdcXHUwNkIzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI5OCddID0gJ1xcdTA2QjMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjk5J10gPSAnXFx1MDZCMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCOUEnXSA9ICdcXHUwNkIxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI5QiddID0gJ1xcdTA2QjEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjlDJ10gPSAnXFx1MDZCMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCOUQnXSA9ICdcXHUwNkIxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI5RSddID0gJ1xcdTA2QkEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjlGJ10gPSAnXFx1MDZCQSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCQTAnXSA9ICdcXHUwNkJCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJBMSddID0gJ1xcdTA2QkInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkEyJ10gPSAnXFx1MDZCQic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCQTMnXSA9ICdcXHUwNkJCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJBNCddID0gJ1xcdTA2QzAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkE1J10gPSAnXFx1MDZDMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCQTYnXSA9ICdcXHUwNkMxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJBNyddID0gJ1xcdTA2QzEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkE4J10gPSAnXFx1MDZDMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCQTknXSA9ICdcXHUwNkMxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJBQSddID0gJ1xcdTA2QkUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkFCJ10gPSAnXFx1MDZCRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCQUMnXSA9ICdcXHUwNkJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJBRCddID0gJ1xcdTA2QkUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkFFJ10gPSAnXFx1MDZEMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCQUYnXSA9ICdcXHUwNkQyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJCMCddID0gJ1xcdTA2RDMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkIxJ10gPSAnXFx1MDZEMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCRDMnXSA9ICdcXHUwNkFEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJENCddID0gJ1xcdTA2QUQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkQ1J10gPSAnXFx1MDZBRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCRDYnXSA9ICdcXHUwNkFEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJENyddID0gJ1xcdTA2QzcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkQ4J10gPSAnXFx1MDZDNyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCRDknXSA9ICdcXHUwNkM2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJEQSddID0gJ1xcdTA2QzYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkRCJ10gPSAnXFx1MDZDOCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCREMnXSA9ICdcXHUwNkM4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJERCddID0gJ1xcdTA2NzcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkRFJ10gPSAnXFx1MDZDQic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCREYnXSA9ICdcXHUwNkNCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJFMCddID0gJ1xcdTA2QzUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkUxJ10gPSAnXFx1MDZDNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCRTInXSA9ICdcXHUwNkM5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJFMyddID0gJ1xcdTA2QzknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkU0J10gPSAnXFx1MDZEMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCRTUnXSA9ICdcXHUwNkQwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJFNiddID0gJ1xcdTA2RDAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkU3J10gPSAnXFx1MDZEMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCRTgnXSA9ICdcXHUwNjQ5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJFOSddID0gJ1xcdTA2NDknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkVBJ10gPSAnXFx1MDYyNlxcdTA2MjcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkVCJ10gPSAnXFx1MDYyNlxcdTA2MjcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkVDJ10gPSAnXFx1MDYyNlxcdTA2RDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkVEJ10gPSAnXFx1MDYyNlxcdTA2RDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkVFJ10gPSAnXFx1MDYyNlxcdTA2NDgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkVGJ10gPSAnXFx1MDYyNlxcdTA2NDgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkYwJ10gPSAnXFx1MDYyNlxcdTA2QzcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkYxJ10gPSAnXFx1MDYyNlxcdTA2QzcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkYyJ10gPSAnXFx1MDYyNlxcdTA2QzYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkYzJ10gPSAnXFx1MDYyNlxcdTA2QzYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkY0J10gPSAnXFx1MDYyNlxcdTA2QzgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkY1J10gPSAnXFx1MDYyNlxcdTA2QzgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkY2J10gPSAnXFx1MDYyNlxcdTA2RDAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkY3J10gPSAnXFx1MDYyNlxcdTA2RDAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkY4J10gPSAnXFx1MDYyNlxcdTA2RDAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkY5J10gPSAnXFx1MDYyNlxcdTA2NDknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkZBJ10gPSAnXFx1MDYyNlxcdTA2NDknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkZCJ10gPSAnXFx1MDYyNlxcdTA2NDknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkZDJ10gPSAnXFx1MDZDQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCRkQnXSA9ICdcXHUwNkNDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJGRSddID0gJ1xcdTA2Q0MnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkZGJ10gPSAnXFx1MDZDQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMDAnXSA9ICdcXHUwNjI2XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMDEnXSA9ICdcXHUwNjI2XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMDInXSA9ICdcXHUwNjI2XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMDMnXSA9ICdcXHUwNjI2XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMDQnXSA9ICdcXHUwNjI2XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMDUnXSA9ICdcXHUwNjI4XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMDYnXSA9ICdcXHUwNjI4XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMDcnXSA9ICdcXHUwNjI4XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMDgnXSA9ICdcXHUwNjI4XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMDknXSA9ICdcXHUwNjI4XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMEEnXSA9ICdcXHUwNjI4XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMEInXSA9ICdcXHUwNjJBXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMEMnXSA9ICdcXHUwNjJBXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMEQnXSA9ICdcXHUwNjJBXFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMEUnXSA9ICdcXHUwNjJBXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMEYnXSA9ICdcXHUwNjJBXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMTAnXSA9ICdcXHUwNjJBXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMTEnXSA9ICdcXHUwNjJCXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMTInXSA9ICdcXHUwNjJCXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMTMnXSA9ICdcXHUwNjJCXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMTQnXSA9ICdcXHUwNjJCXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMTUnXSA9ICdcXHUwNjJDXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMTYnXSA9ICdcXHUwNjJDXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMTcnXSA9ICdcXHUwNjJEXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMTgnXSA9ICdcXHUwNjJEXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMTknXSA9ICdcXHUwNjJFXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMUEnXSA9ICdcXHUwNjJFXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMUInXSA9ICdcXHUwNjJFXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMUMnXSA9ICdcXHUwNjMzXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMUQnXSA9ICdcXHUwNjMzXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMUUnXSA9ICdcXHUwNjMzXFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMUYnXSA9ICdcXHUwNjMzXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMjAnXSA9ICdcXHUwNjM1XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMjEnXSA9ICdcXHUwNjM1XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMjInXSA9ICdcXHUwNjM2XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMjMnXSA9ICdcXHUwNjM2XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMjQnXSA9ICdcXHUwNjM2XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMjUnXSA9ICdcXHUwNjM2XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMjYnXSA9ICdcXHUwNjM3XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMjcnXSA9ICdcXHUwNjM3XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMjgnXSA9ICdcXHUwNjM4XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMjknXSA9ICdcXHUwNjM5XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMkEnXSA9ICdcXHUwNjM5XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMkInXSA9ICdcXHUwNjNBXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMkMnXSA9ICdcXHUwNjNBXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMkQnXSA9ICdcXHUwNjQxXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMkUnXSA9ICdcXHUwNjQxXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMkYnXSA9ICdcXHUwNjQxXFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMzAnXSA9ICdcXHUwNjQxXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMzEnXSA9ICdcXHUwNjQxXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMzInXSA9ICdcXHUwNjQxXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMzMnXSA9ICdcXHUwNjQyXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMzQnXSA9ICdcXHUwNjQyXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMzUnXSA9ICdcXHUwNjQyXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMzYnXSA9ICdcXHUwNjQyXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMzcnXSA9ICdcXHUwNjQzXFx1MDYyNyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMzgnXSA9ICdcXHUwNjQzXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMzknXSA9ICdcXHUwNjQzXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDM0EnXSA9ICdcXHUwNjQzXFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDM0InXSA9ICdcXHUwNjQzXFx1MDY0NCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDM0MnXSA9ICdcXHUwNjQzXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDM0QnXSA9ICdcXHUwNjQzXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDM0UnXSA9ICdcXHUwNjQzXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDM0YnXSA9ICdcXHUwNjQ0XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNDAnXSA9ICdcXHUwNjQ0XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNDEnXSA9ICdcXHUwNjQ0XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNDInXSA9ICdcXHUwNjQ0XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNDMnXSA9ICdcXHUwNjQ0XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNDQnXSA9ICdcXHUwNjQ0XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNDUnXSA9ICdcXHUwNjQ1XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNDYnXSA9ICdcXHUwNjQ1XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNDcnXSA9ICdcXHUwNjQ1XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNDgnXSA9ICdcXHUwNjQ1XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNDknXSA9ICdcXHUwNjQ1XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNEEnXSA9ICdcXHUwNjQ1XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNEInXSA9ICdcXHUwNjQ2XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNEMnXSA9ICdcXHUwNjQ2XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNEQnXSA9ICdcXHUwNjQ2XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNEUnXSA9ICdcXHUwNjQ2XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNEYnXSA9ICdcXHUwNjQ2XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNTAnXSA9ICdcXHUwNjQ2XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNTEnXSA9ICdcXHUwNjQ3XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNTInXSA9ICdcXHUwNjQ3XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNTMnXSA9ICdcXHUwNjQ3XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNTQnXSA9ICdcXHUwNjQ3XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNTUnXSA9ICdcXHUwNjRBXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNTYnXSA9ICdcXHUwNjRBXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNTcnXSA9ICdcXHUwNjRBXFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNTgnXSA9ICdcXHUwNjRBXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNTknXSA9ICdcXHUwNjRBXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNUEnXSA9ICdcXHUwNjRBXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNUInXSA9ICdcXHUwNjMwXFx1MDY3MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNUMnXSA9ICdcXHUwNjMxXFx1MDY3MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNUQnXSA9ICdcXHUwNjQ5XFx1MDY3MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNUUnXSA9ICdcXHUwMDIwXFx1MDY0Q1xcdTA2NTEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQzVGJ10gPSAnXFx1MDAyMFxcdTA2NERcXHUwNjUxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkM2MCddID0gJ1xcdTAwMjBcXHUwNjRFXFx1MDY1MSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNjEnXSA9ICdcXHUwMDIwXFx1MDY0RlxcdTA2NTEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQzYyJ10gPSAnXFx1MDAyMFxcdTA2NTBcXHUwNjUxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkM2MyddID0gJ1xcdTAwMjBcXHUwNjUxXFx1MDY3MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNjQnXSA9ICdcXHUwNjI2XFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNjUnXSA9ICdcXHUwNjI2XFx1MDYzMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNjYnXSA9ICdcXHUwNjI2XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNjcnXSA9ICdcXHUwNjI2XFx1MDY0Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNjgnXSA9ICdcXHUwNjI2XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNjknXSA9ICdcXHUwNjI2XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNkEnXSA9ICdcXHUwNjI4XFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNkInXSA9ICdcXHUwNjI4XFx1MDYzMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNkMnXSA9ICdcXHUwNjI4XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNkQnXSA9ICdcXHUwNjI4XFx1MDY0Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNkUnXSA9ICdcXHUwNjI4XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNkYnXSA9ICdcXHUwNjI4XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNzAnXSA9ICdcXHUwNjJBXFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNzEnXSA9ICdcXHUwNjJBXFx1MDYzMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNzInXSA9ICdcXHUwNjJBXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNzMnXSA9ICdcXHUwNjJBXFx1MDY0Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNzQnXSA9ICdcXHUwNjJBXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNzUnXSA9ICdcXHUwNjJBXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNzYnXSA9ICdcXHUwNjJCXFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNzcnXSA9ICdcXHUwNjJCXFx1MDYzMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNzgnXSA9ICdcXHUwNjJCXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNzknXSA9ICdcXHUwNjJCXFx1MDY0Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDN0EnXSA9ICdcXHUwNjJCXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDN0InXSA9ICdcXHUwNjJCXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDN0MnXSA9ICdcXHUwNjQxXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDN0QnXSA9ICdcXHUwNjQxXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDN0UnXSA9ICdcXHUwNjQyXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDN0YnXSA9ICdcXHUwNjQyXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDODAnXSA9ICdcXHUwNjQzXFx1MDYyNyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDODEnXSA9ICdcXHUwNjQzXFx1MDY0NCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDODInXSA9ICdcXHUwNjQzXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDODMnXSA9ICdcXHUwNjQzXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDODQnXSA9ICdcXHUwNjQzXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDODUnXSA9ICdcXHUwNjQ0XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDODYnXSA9ICdcXHUwNjQ0XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDODcnXSA9ICdcXHUwNjQ0XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDODgnXSA9ICdcXHUwNjQ1XFx1MDYyNyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDODknXSA9ICdcXHUwNjQ1XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOEEnXSA9ICdcXHUwNjQ2XFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOEInXSA9ICdcXHUwNjQ2XFx1MDYzMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOEMnXSA9ICdcXHUwNjQ2XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOEQnXSA9ICdcXHUwNjQ2XFx1MDY0Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOEUnXSA9ICdcXHUwNjQ2XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOEYnXSA9ICdcXHUwNjQ2XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOTAnXSA9ICdcXHUwNjQ5XFx1MDY3MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOTEnXSA9ICdcXHUwNjRBXFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOTInXSA9ICdcXHUwNjRBXFx1MDYzMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOTMnXSA9ICdcXHUwNjRBXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOTQnXSA9ICdcXHUwNjRBXFx1MDY0Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOTUnXSA9ICdcXHUwNjRBXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOTYnXSA9ICdcXHUwNjRBXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOTcnXSA9ICdcXHUwNjI2XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOTgnXSA9ICdcXHUwNjI2XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOTknXSA9ICdcXHUwNjI2XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOUEnXSA9ICdcXHUwNjI2XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOUInXSA9ICdcXHUwNjI2XFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOUMnXSA9ICdcXHUwNjI4XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOUQnXSA9ICdcXHUwNjI4XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOUUnXSA9ICdcXHUwNjI4XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOUYnXSA9ICdcXHUwNjI4XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQTAnXSA9ICdcXHUwNjI4XFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQTEnXSA9ICdcXHUwNjJBXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQTInXSA9ICdcXHUwNjJBXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQTMnXSA9ICdcXHUwNjJBXFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQTQnXSA9ICdcXHUwNjJBXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQTUnXSA9ICdcXHUwNjJBXFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQTYnXSA9ICdcXHUwNjJCXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQTcnXSA9ICdcXHUwNjJDXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQTgnXSA9ICdcXHUwNjJDXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQTknXSA9ICdcXHUwNjJEXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQUEnXSA9ICdcXHUwNjJEXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQUInXSA9ICdcXHUwNjJFXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQUMnXSA9ICdcXHUwNjJFXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQUQnXSA9ICdcXHUwNjMzXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQUUnXSA9ICdcXHUwNjMzXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQUYnXSA9ICdcXHUwNjMzXFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQjAnXSA9ICdcXHUwNjMzXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQjEnXSA9ICdcXHUwNjM1XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQjInXSA9ICdcXHUwNjM1XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQjMnXSA9ICdcXHUwNjM1XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQjQnXSA9ICdcXHUwNjM2XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQjUnXSA9ICdcXHUwNjM2XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQjYnXSA9ICdcXHUwNjM2XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQjcnXSA9ICdcXHUwNjM2XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQjgnXSA9ICdcXHUwNjM3XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQjknXSA9ICdcXHUwNjM4XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQkEnXSA9ICdcXHUwNjM5XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQkInXSA9ICdcXHUwNjM5XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQkMnXSA9ICdcXHUwNjNBXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQkQnXSA9ICdcXHUwNjNBXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQkUnXSA9ICdcXHUwNjQxXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQkYnXSA9ICdcXHUwNjQxXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQzAnXSA9ICdcXHUwNjQxXFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQzEnXSA9ICdcXHUwNjQxXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQzInXSA9ICdcXHUwNjQyXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQzMnXSA9ICdcXHUwNjQyXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQzQnXSA9ICdcXHUwNjQzXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQzUnXSA9ICdcXHUwNjQzXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQzYnXSA9ICdcXHUwNjQzXFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQzcnXSA9ICdcXHUwNjQzXFx1MDY0NCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQzgnXSA9ICdcXHUwNjQzXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQzknXSA9ICdcXHUwNjQ0XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQ0EnXSA9ICdcXHUwNjQ0XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQ0InXSA9ICdcXHUwNjQ0XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQ0MnXSA9ICdcXHUwNjQ0XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQ0QnXSA9ICdcXHUwNjQ0XFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQ0UnXSA9ICdcXHUwNjQ1XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQ0YnXSA9ICdcXHUwNjQ1XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRDAnXSA9ICdcXHUwNjQ1XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRDEnXSA9ICdcXHUwNjQ1XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRDInXSA9ICdcXHUwNjQ2XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRDMnXSA9ICdcXHUwNjQ2XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRDQnXSA9ICdcXHUwNjQ2XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRDUnXSA9ICdcXHUwNjQ2XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRDYnXSA9ICdcXHUwNjQ2XFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRDcnXSA9ICdcXHUwNjQ3XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRDgnXSA9ICdcXHUwNjQ3XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRDknXSA9ICdcXHUwNjQ3XFx1MDY3MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDREEnXSA9ICdcXHUwNjRBXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDREInXSA9ICdcXHUwNjRBXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDREMnXSA9ICdcXHUwNjRBXFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDREQnXSA9ICdcXHUwNjRBXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDREUnXSA9ICdcXHUwNjRBXFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDREYnXSA9ICdcXHUwNjI2XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRTAnXSA9ICdcXHUwNjI2XFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRTEnXSA9ICdcXHUwNjI4XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRTInXSA9ICdcXHUwNjI4XFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRTMnXSA9ICdcXHUwNjJBXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRTQnXSA9ICdcXHUwNjJBXFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRTUnXSA9ICdcXHUwNjJCXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRTYnXSA9ICdcXHUwNjJCXFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRTcnXSA9ICdcXHUwNjMzXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRTgnXSA9ICdcXHUwNjMzXFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRTknXSA9ICdcXHUwNjM0XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRUEnXSA9ICdcXHUwNjM0XFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRUInXSA9ICdcXHUwNjQzXFx1MDY0NCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRUMnXSA9ICdcXHUwNjQzXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRUQnXSA9ICdcXHUwNjQ0XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRUUnXSA9ICdcXHUwNjQ2XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRUYnXSA9ICdcXHUwNjQ2XFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRjAnXSA9ICdcXHUwNjRBXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRjEnXSA9ICdcXHUwNjRBXFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRjInXSA9ICdcXHUwNjQwXFx1MDY0RVxcdTA2NTEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQ0YzJ10gPSAnXFx1MDY0MFxcdTA2NEZcXHUwNjUxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkNGNCddID0gJ1xcdTA2NDBcXHUwNjUwXFx1MDY1MSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRjUnXSA9ICdcXHUwNjM3XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRjYnXSA9ICdcXHUwNjM3XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRjcnXSA9ICdcXHUwNjM5XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRjgnXSA9ICdcXHUwNjM5XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRjknXSA9ICdcXHUwNjNBXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRkEnXSA9ICdcXHUwNjNBXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRkInXSA9ICdcXHUwNjMzXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRkMnXSA9ICdcXHUwNjMzXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRkQnXSA9ICdcXHUwNjM0XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRkUnXSA9ICdcXHUwNjM0XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRkYnXSA9ICdcXHUwNjJEXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMDAnXSA9ICdcXHUwNjJEXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMDEnXSA9ICdcXHUwNjJDXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMDInXSA9ICdcXHUwNjJDXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMDMnXSA9ICdcXHUwNjJFXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMDQnXSA9ICdcXHUwNjJFXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMDUnXSA9ICdcXHUwNjM1XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMDYnXSA9ICdcXHUwNjM1XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMDcnXSA9ICdcXHUwNjM2XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMDgnXSA9ICdcXHUwNjM2XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMDknXSA9ICdcXHUwNjM0XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMEEnXSA9ICdcXHUwNjM0XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMEInXSA9ICdcXHUwNjM0XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMEMnXSA9ICdcXHUwNjM0XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMEQnXSA9ICdcXHUwNjM0XFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMEUnXSA9ICdcXHUwNjMzXFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMEYnXSA9ICdcXHUwNjM1XFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMTAnXSA9ICdcXHUwNjM2XFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMTEnXSA9ICdcXHUwNjM3XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMTInXSA9ICdcXHUwNjM3XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMTMnXSA9ICdcXHUwNjM5XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMTQnXSA9ICdcXHUwNjM5XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMTUnXSA9ICdcXHUwNjNBXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMTYnXSA9ICdcXHUwNjNBXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMTcnXSA9ICdcXHUwNjMzXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMTgnXSA9ICdcXHUwNjMzXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMTknXSA9ICdcXHUwNjM0XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMUEnXSA9ICdcXHUwNjM0XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMUInXSA9ICdcXHUwNjJEXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMUMnXSA9ICdcXHUwNjJEXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMUQnXSA9ICdcXHUwNjJDXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMUUnXSA9ICdcXHUwNjJDXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMUYnXSA9ICdcXHUwNjJFXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMjAnXSA9ICdcXHUwNjJFXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMjEnXSA9ICdcXHUwNjM1XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMjInXSA9ICdcXHUwNjM1XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMjMnXSA9ICdcXHUwNjM2XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMjQnXSA9ICdcXHUwNjM2XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMjUnXSA9ICdcXHUwNjM0XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMjYnXSA9ICdcXHUwNjM0XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMjcnXSA9ICdcXHUwNjM0XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMjgnXSA9ICdcXHUwNjM0XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMjknXSA9ICdcXHUwNjM0XFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMkEnXSA9ICdcXHUwNjMzXFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMkInXSA9ICdcXHUwNjM1XFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMkMnXSA9ICdcXHUwNjM2XFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMkQnXSA9ICdcXHUwNjM0XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMkUnXSA9ICdcXHUwNjM0XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMkYnXSA9ICdcXHUwNjM0XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMzAnXSA9ICdcXHUwNjM0XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMzEnXSA9ICdcXHUwNjMzXFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMzInXSA9ICdcXHUwNjM0XFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMzMnXSA9ICdcXHUwNjM3XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMzQnXSA9ICdcXHUwNjMzXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMzUnXSA9ICdcXHUwNjMzXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMzYnXSA9ICdcXHUwNjMzXFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMzcnXSA9ICdcXHUwNjM0XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMzgnXSA9ICdcXHUwNjM0XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMzknXSA9ICdcXHUwNjM0XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEM0EnXSA9ICdcXHUwNjM3XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEM0InXSA9ICdcXHUwNjM4XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEM0MnXSA9ICdcXHUwNjI3XFx1MDY0Qic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEM0QnXSA9ICdcXHUwNjI3XFx1MDY0Qic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENTAnXSA9ICdcXHUwNjJBXFx1MDYyQ1xcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDUxJ10gPSAnXFx1MDYyQVxcdTA2MkRcXHUwNjJDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ1MiddID0gJ1xcdTA2MkFcXHUwNjJEXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENTMnXSA9ICdcXHUwNjJBXFx1MDYyRFxcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDU0J10gPSAnXFx1MDYyQVxcdTA2MkVcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ1NSddID0gJ1xcdTA2MkFcXHUwNjQ1XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENTYnXSA9ICdcXHUwNjJBXFx1MDY0NVxcdTA2MkQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDU3J10gPSAnXFx1MDYyQVxcdTA2NDVcXHUwNjJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ1OCddID0gJ1xcdTA2MkNcXHUwNjQ1XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENTknXSA9ICdcXHUwNjJDXFx1MDY0NVxcdTA2MkQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDVBJ10gPSAnXFx1MDYyRFxcdTA2NDVcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ1QiddID0gJ1xcdTA2MkRcXHUwNjQ1XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENUMnXSA9ICdcXHUwNjMzXFx1MDYyRFxcdTA2MkMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDVEJ10gPSAnXFx1MDYzM1xcdTA2MkNcXHUwNjJEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ1RSddID0gJ1xcdTA2MzNcXHUwNjJDXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENUYnXSA9ICdcXHUwNjMzXFx1MDY0NVxcdTA2MkQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDYwJ10gPSAnXFx1MDYzM1xcdTA2NDVcXHUwNjJEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ2MSddID0gJ1xcdTA2MzNcXHUwNjQ1XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENjInXSA9ICdcXHUwNjMzXFx1MDY0NVxcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDYzJ10gPSAnXFx1MDYzM1xcdTA2NDVcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ2NCddID0gJ1xcdTA2MzVcXHUwNjJEXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENjUnXSA9ICdcXHUwNjM1XFx1MDYyRFxcdTA2MkQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDY2J10gPSAnXFx1MDYzNVxcdTA2NDVcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ2NyddID0gJ1xcdTA2MzRcXHUwNjJEXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENjgnXSA9ICdcXHUwNjM0XFx1MDYyRFxcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDY5J10gPSAnXFx1MDYzNFxcdTA2MkNcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ2QSddID0gJ1xcdTA2MzRcXHUwNjQ1XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENkInXSA9ICdcXHUwNjM0XFx1MDY0NVxcdTA2MkUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDZDJ10gPSAnXFx1MDYzNFxcdTA2NDVcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ2RCddID0gJ1xcdTA2MzRcXHUwNjQ1XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENkUnXSA9ICdcXHUwNjM2XFx1MDYyRFxcdTA2NDknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDZGJ10gPSAnXFx1MDYzNlxcdTA2MkVcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ3MCddID0gJ1xcdTA2MzZcXHUwNjJFXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENzEnXSA9ICdcXHUwNjM3XFx1MDY0NVxcdTA2MkQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDcyJ10gPSAnXFx1MDYzN1xcdTA2NDVcXHUwNjJEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ3MyddID0gJ1xcdTA2MzdcXHUwNjQ1XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENzQnXSA9ICdcXHUwNjM3XFx1MDY0NVxcdTA2NEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDc1J10gPSAnXFx1MDYzOVxcdTA2MkNcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ3NiddID0gJ1xcdTA2MzlcXHUwNjQ1XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENzcnXSA9ICdcXHUwNjM5XFx1MDY0NVxcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDc4J10gPSAnXFx1MDYzOVxcdTA2NDVcXHUwNjQ5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ3OSddID0gJ1xcdTA2M0FcXHUwNjQ1XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEN0EnXSA9ICdcXHUwNjNBXFx1MDY0NVxcdTA2NEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDdCJ10gPSAnXFx1MDYzQVxcdTA2NDVcXHUwNjQ5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ3QyddID0gJ1xcdTA2NDFcXHUwNjJFXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEN0QnXSA9ICdcXHUwNjQxXFx1MDYyRVxcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDdFJ10gPSAnXFx1MDY0MlxcdTA2NDVcXHUwNjJEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ3RiddID0gJ1xcdTA2NDJcXHUwNjQ1XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEODAnXSA9ICdcXHUwNjQ0XFx1MDYyRFxcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDgxJ10gPSAnXFx1MDY0NFxcdTA2MkRcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ4MiddID0gJ1xcdTA2NDRcXHUwNjJEXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEODMnXSA9ICdcXHUwNjQ0XFx1MDYyQ1xcdTA2MkMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDg0J10gPSAnXFx1MDY0NFxcdTA2MkNcXHUwNjJDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ4NSddID0gJ1xcdTA2NDRcXHUwNjJFXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEODYnXSA9ICdcXHUwNjQ0XFx1MDYyRVxcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDg3J10gPSAnXFx1MDY0NFxcdTA2NDVcXHUwNjJEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ4OCddID0gJ1xcdTA2NDRcXHUwNjQ1XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEODknXSA9ICdcXHUwNjQ1XFx1MDYyRFxcdTA2MkMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDhBJ10gPSAnXFx1MDY0NVxcdTA2MkRcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ4QiddID0gJ1xcdTA2NDVcXHUwNjJEXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEOEMnXSA9ICdcXHUwNjQ1XFx1MDYyQ1xcdTA2MkQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDhEJ10gPSAnXFx1MDY0NVxcdTA2MkNcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ4RSddID0gJ1xcdTA2NDVcXHUwNjJFXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEOEYnXSA9ICdcXHUwNjQ1XFx1MDYyRVxcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDkyJ10gPSAnXFx1MDY0NVxcdTA2MkNcXHUwNjJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ5MyddID0gJ1xcdTA2NDdcXHUwNjQ1XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEOTQnXSA9ICdcXHUwNjQ3XFx1MDY0NVxcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDk1J10gPSAnXFx1MDY0NlxcdTA2MkRcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ5NiddID0gJ1xcdTA2NDZcXHUwNjJEXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEOTcnXSA9ICdcXHUwNjQ2XFx1MDYyQ1xcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDk4J10gPSAnXFx1MDY0NlxcdTA2MkNcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ5OSddID0gJ1xcdTA2NDZcXHUwNjJDXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEOUEnXSA9ICdcXHUwNjQ2XFx1MDY0NVxcdTA2NEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDlCJ10gPSAnXFx1MDY0NlxcdTA2NDVcXHUwNjQ5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ5QyddID0gJ1xcdTA2NEFcXHUwNjQ1XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEOUQnXSA9ICdcXHUwNjRBXFx1MDY0NVxcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDlFJ10gPSAnXFx1MDYyOFxcdTA2MkVcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ5RiddID0gJ1xcdTA2MkFcXHUwNjJDXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQTAnXSA9ICdcXHUwNjJBXFx1MDYyQ1xcdTA2NDknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREExJ10gPSAnXFx1MDYyQVxcdTA2MkVcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRBMiddID0gJ1xcdTA2MkFcXHUwNjJFXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQTMnXSA9ICdcXHUwNjJBXFx1MDY0NVxcdTA2NEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREE0J10gPSAnXFx1MDYyQVxcdTA2NDVcXHUwNjQ5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRBNSddID0gJ1xcdTA2MkNcXHUwNjQ1XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQTYnXSA9ICdcXHUwNjJDXFx1MDYyRFxcdTA2NDknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREE3J10gPSAnXFx1MDYyQ1xcdTA2NDVcXHUwNjQ5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRBOCddID0gJ1xcdTA2MzNcXHUwNjJFXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQTknXSA9ICdcXHUwNjM1XFx1MDYyRFxcdTA2NEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREFBJ10gPSAnXFx1MDYzNFxcdTA2MkRcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRBQiddID0gJ1xcdTA2MzZcXHUwNjJEXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQUMnXSA9ICdcXHUwNjQ0XFx1MDYyQ1xcdTA2NEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREFEJ10gPSAnXFx1MDY0NFxcdTA2NDVcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRBRSddID0gJ1xcdTA2NEFcXHUwNjJEXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQUYnXSA9ICdcXHUwNjRBXFx1MDYyQ1xcdTA2NEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREIwJ10gPSAnXFx1MDY0QVxcdTA2NDVcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRCMSddID0gJ1xcdTA2NDVcXHUwNjQ1XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQjInXSA9ICdcXHUwNjQyXFx1MDY0NVxcdTA2NEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREIzJ10gPSAnXFx1MDY0NlxcdTA2MkRcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRCNCddID0gJ1xcdTA2NDJcXHUwNjQ1XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQjUnXSA9ICdcXHUwNjQ0XFx1MDYyRFxcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREI2J10gPSAnXFx1MDYzOVxcdTA2NDVcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRCNyddID0gJ1xcdTA2NDNcXHUwNjQ1XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQjgnXSA9ICdcXHUwNjQ2XFx1MDYyQ1xcdTA2MkQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREI5J10gPSAnXFx1MDY0NVxcdTA2MkVcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRCQSddID0gJ1xcdTA2NDRcXHUwNjJDXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQkInXSA9ICdcXHUwNjQzXFx1MDY0NVxcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREJDJ10gPSAnXFx1MDY0NFxcdTA2MkNcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRCRCddID0gJ1xcdTA2NDZcXHUwNjJDXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQkUnXSA9ICdcXHUwNjJDXFx1MDYyRFxcdTA2NEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREJGJ10gPSAnXFx1MDYyRFxcdTA2MkNcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRDMCddID0gJ1xcdTA2NDVcXHUwNjJDXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQzEnXSA9ICdcXHUwNjQxXFx1MDY0NVxcdTA2NEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREMyJ10gPSAnXFx1MDYyOFxcdTA2MkRcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRDMyddID0gJ1xcdTA2NDNcXHUwNjQ1XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQzQnXSA9ICdcXHUwNjM5XFx1MDYyQ1xcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREM1J10gPSAnXFx1MDYzNVxcdTA2NDVcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRDNiddID0gJ1xcdTA2MzNcXHUwNjJFXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQzcnXSA9ICdcXHUwNjQ2XFx1MDYyQ1xcdTA2NEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRTQ5J10gPSAnXFx1MjAzRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFNEEnXSA9ICdcXHUyMDNFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU0QiddID0gJ1xcdTIwM0UnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRTRDJ10gPSAnXFx1MjAzRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFNEQnXSA9ICdcXHUwMDVGJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU0RSddID0gJ1xcdTAwNUYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRTRGJ10gPSAnXFx1MDA1Ric7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFODAnXSA9ICdcXHUwNjIxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU4MSddID0gJ1xcdTA2MjInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRTgyJ10gPSAnXFx1MDYyMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFODMnXSA9ICdcXHUwNjIzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU4NCddID0gJ1xcdTA2MjMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRTg1J10gPSAnXFx1MDYyNCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFODYnXSA9ICdcXHUwNjI0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU4NyddID0gJ1xcdTA2MjUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRTg4J10gPSAnXFx1MDYyNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFODknXSA9ICdcXHUwNjI2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU4QSddID0gJ1xcdTA2MjYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRThCJ10gPSAnXFx1MDYyNic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFOEMnXSA9ICdcXHUwNjI2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU4RCddID0gJ1xcdTA2MjcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRThFJ10gPSAnXFx1MDYyNyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFOEYnXSA9ICdcXHUwNjI4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU5MCddID0gJ1xcdTA2MjgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRTkxJ10gPSAnXFx1MDYyOCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFOTInXSA9ICdcXHUwNjI4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU5MyddID0gJ1xcdTA2MjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRTk0J10gPSAnXFx1MDYyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFOTUnXSA9ICdcXHUwNjJBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU5NiddID0gJ1xcdTA2MkEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRTk3J10gPSAnXFx1MDYyQSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFOTgnXSA9ICdcXHUwNjJBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU5OSddID0gJ1xcdTA2MkInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRTlBJ10gPSAnXFx1MDYyQic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFOUInXSA9ICdcXHUwNjJCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU5QyddID0gJ1xcdTA2MkInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRTlEJ10gPSAnXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFOUUnXSA9ICdcXHUwNjJDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU5RiddID0gJ1xcdTA2MkMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUEwJ10gPSAnXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQTEnXSA9ICdcXHUwNjJEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVBMiddID0gJ1xcdTA2MkQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUEzJ10gPSAnXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQTQnXSA9ICdcXHUwNjJEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVBNSddID0gJ1xcdTA2MkUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUE2J10gPSAnXFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQTcnXSA9ICdcXHUwNjJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVBOCddID0gJ1xcdTA2MkUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUE5J10gPSAnXFx1MDYyRic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQUEnXSA9ICdcXHUwNjJGJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVBQiddID0gJ1xcdTA2MzAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUFDJ10gPSAnXFx1MDYzMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQUQnXSA9ICdcXHUwNjMxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVBRSddID0gJ1xcdTA2MzEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUFGJ10gPSAnXFx1MDYzMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQjAnXSA9ICdcXHUwNjMyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVCMSddID0gJ1xcdTA2MzMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUIyJ10gPSAnXFx1MDYzMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQjMnXSA9ICdcXHUwNjMzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVCNCddID0gJ1xcdTA2MzMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUI1J10gPSAnXFx1MDYzNCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQjYnXSA9ICdcXHUwNjM0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVCNyddID0gJ1xcdTA2MzQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUI4J10gPSAnXFx1MDYzNCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQjknXSA9ICdcXHUwNjM1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVCQSddID0gJ1xcdTA2MzUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUJCJ10gPSAnXFx1MDYzNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQkMnXSA9ICdcXHUwNjM1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVCRCddID0gJ1xcdTA2MzYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUJFJ10gPSAnXFx1MDYzNic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQkYnXSA9ICdcXHUwNjM2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVDMCddID0gJ1xcdTA2MzYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUMxJ10gPSAnXFx1MDYzNyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQzInXSA9ICdcXHUwNjM3JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVDMyddID0gJ1xcdTA2MzcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUM0J10gPSAnXFx1MDYzNyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQzUnXSA9ICdcXHUwNjM4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVDNiddID0gJ1xcdTA2MzgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUM3J10gPSAnXFx1MDYzOCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQzgnXSA9ICdcXHUwNjM4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVDOSddID0gJ1xcdTA2MzknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUNBJ10gPSAnXFx1MDYzOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQ0InXSA9ICdcXHUwNjM5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVDQyddID0gJ1xcdTA2MzknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUNEJ10gPSAnXFx1MDYzQSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQ0UnXSA9ICdcXHUwNjNBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVDRiddID0gJ1xcdTA2M0EnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUQwJ10gPSAnXFx1MDYzQSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRDEnXSA9ICdcXHUwNjQxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVEMiddID0gJ1xcdTA2NDEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUQzJ10gPSAnXFx1MDY0MSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRDQnXSA9ICdcXHUwNjQxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVENSddID0gJ1xcdTA2NDInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUQ2J10gPSAnXFx1MDY0Mic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRDcnXSA9ICdcXHUwNjQyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVEOCddID0gJ1xcdTA2NDInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUQ5J10gPSAnXFx1MDY0Myc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFREEnXSA9ICdcXHUwNjQzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVEQiddID0gJ1xcdTA2NDMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRURDJ10gPSAnXFx1MDY0Myc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFREQnXSA9ICdcXHUwNjQ0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVERSddID0gJ1xcdTA2NDQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRURGJ10gPSAnXFx1MDY0NCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRTAnXSA9ICdcXHUwNjQ0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVFMSddID0gJ1xcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUUyJ10gPSAnXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRTMnXSA9ICdcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVFNCddID0gJ1xcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUU1J10gPSAnXFx1MDY0Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRTYnXSA9ICdcXHUwNjQ2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVFNyddID0gJ1xcdTA2NDYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUU4J10gPSAnXFx1MDY0Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRTknXSA9ICdcXHUwNjQ3JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVFQSddID0gJ1xcdTA2NDcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUVCJ10gPSAnXFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRUMnXSA9ICdcXHUwNjQ3JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVFRCddID0gJ1xcdTA2NDgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUVFJ10gPSAnXFx1MDY0OCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRUYnXSA9ICdcXHUwNjQ5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVGMCddID0gJ1xcdTA2NDknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUYxJ10gPSAnXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRjInXSA9ICdcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVGMyddID0gJ1xcdTA2NEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUY0J10gPSAnXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRjUnXSA9ICdcXHUwNjQ0XFx1MDYyMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRjYnXSA9ICdcXHUwNjQ0XFx1MDYyMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRjcnXSA9ICdcXHUwNjQ0XFx1MDYyMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRjgnXSA9ICdcXHUwNjQ0XFx1MDYyMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRjknXSA9ICdcXHUwNjQ0XFx1MDYyNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRkEnXSA9ICdcXHUwNjQ0XFx1MDYyNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRkInXSA9ICdcXHUwNjQ0XFx1MDYyNyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRkMnXSA9ICdcXHUwNjQ0XFx1MDYyNyc7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gcmV2ZXJzZUlmUnRsKGNoYXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGFyc0xlbmd0aCA9IGNoYXJzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJzTGVuZ3RoIDw9IDEgfHwgIWlzUlRMUmFuZ2VGb3IoY2hhcnMuY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGFycztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgcyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpaSA9IGNoYXJzTGVuZ3RoIC0gMTsgaWkgPj0gMDsgaWktLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcyArPSBjaGFyc1tpaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV4cG9ydHMubWFwU3BlY2lhbFVuaWNvZGVWYWx1ZXMgPSBtYXBTcGVjaWFsVW5pY29kZVZhbHVlcztcbiAgICAgICAgICAgICAgICBleHBvcnRzLnJldmVyc2VJZlJ0bCA9IHJldmVyc2VJZlJ0bDtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmdldFVuaWNvZGVSYW5nZUZvciA9IGdldFVuaWNvZGVSYW5nZUZvcjtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmdldE5vcm1hbGl6ZWRVbmljb2RlcyA9IGdldE5vcm1hbGl6ZWRVbmljb2RlcztcbiAgICAgICAgICAgICAgICBleHBvcnRzLmdldFVuaWNvZGVGb3JHbHlwaCA9IGdldFVuaWNvZGVGb3JHbHlwaDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTgwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Gb250UmVuZGVyZXJGYWN0b3J5ID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2KTtcblxuICAgICAgICAgICAgICAgIHZhciBfY2ZmX3BhcnNlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTc0KTtcblxuICAgICAgICAgICAgICAgIHZhciBfZ2x5cGhsaXN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNzcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9lbmNvZGluZ3MgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE3Nik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3N0cmVhbSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTU3KTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgRm9udFJlbmRlcmVyRmFjdG9yeSA9IGZ1bmN0aW9uIEZvbnRSZW5kZXJlckZhY3RvcnlDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRMb25nKGRhdGEsIG9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFbb2Zmc2V0XSA8PCAyNCB8IGRhdGFbb2Zmc2V0ICsgMV0gPDwgMTYgfCBkYXRhW29mZnNldCArIDJdIDw8IDggfCBkYXRhW29mZnNldCArIDNdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0VXNob3J0KGRhdGEsIG9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFbb2Zmc2V0XSA8PCA4IHwgZGF0YVtvZmZzZXQgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBhcnNlQ21hcChkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gZ2V0VXNob3J0KGRhdGEsIHN0YXJ0ICsgMikgPT09IDEgPyBnZXRMb25nKGRhdGEsIHN0YXJ0ICsgOCkgOiBnZXRMb25nKGRhdGEsIHN0YXJ0ICsgMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1hdCA9IGdldFVzaG9ydChkYXRhLCBzdGFydCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2VzLCBwLCBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VXNob3J0KGRhdGEsIHN0YXJ0ICsgb2Zmc2V0ICsgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlZ0NvdW50ID0gZ2V0VXNob3J0KGRhdGEsIHN0YXJ0ICsgb2Zmc2V0ICsgNikgPj4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gc3RhcnQgKyBvZmZzZXQgKyAxNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzZWdDb3VudDsgaSsrLCBwICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzW2ldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBnZXRVc2hvcnQoZGF0YSwgcClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwICs9IDI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2VnQ291bnQ7IGkrKywgcCArPSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlc1tpXS5zdGFydCA9IGdldFVzaG9ydChkYXRhLCBwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2VnQ291bnQ7IGkrKywgcCArPSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlc1tpXS5pZERlbHRhID0gZ2V0VXNob3J0KGRhdGEsIHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzZWdDb3VudDsgaSsrLCBwICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlkT2Zmc2V0ID0gZ2V0VXNob3J0KGRhdGEsIHApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZE9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXNbaV0uaWRzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gcmFuZ2VzW2ldLmVuZCAtIHJhbmdlc1tpXS5zdGFydCArIDE7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXNbaV0uaWRzW2pdID0gZ2V0VXNob3J0KGRhdGEsIHAgKyBpZE9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZE9mZnNldCArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvbmcoZGF0YSwgc3RhcnQgKyBvZmZzZXQgKyA0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JvdXBzID0gZ2V0TG9uZyhkYXRhLCBzdGFydCArIG9mZnNldCArIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gc3RhcnQgKyBvZmZzZXQgKyAxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBncm91cHM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogZ2V0TG9uZyhkYXRhLCBwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogZ2V0TG9uZyhkYXRhLCBwICsgNCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZERlbHRhOiBnZXRMb25nKGRhdGEsIHAgKyA4KSAtIGdldExvbmcoZGF0YSwgcClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgKz0gMTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwidW5zdXBwb3J0ZWQgY21hcDogXCIuY29uY2F0KGZvcm1hdCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcGFyc2VDZmYoZGF0YSwgc3RhcnQsIGVuZCwgc2VhY0FuYWx5c2lzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZXIgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGUGFyc2VyKG5ldyBfc3RyZWFtLlN0cmVhbShkYXRhLCBzdGFydCwgZW5kIC0gc3RhcnQpLCBwcm9wZXJ0aWVzLCBzZWFjQW5hbHlzaXNFbmFibGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZmYgPSBwYXJzZXIucGFyc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzOiBjZmYuY2hhclN0cmluZ3Mub2JqZWN0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyczogY2ZmLnRvcERpY3QucHJpdmF0ZURpY3QgJiYgY2ZmLnRvcERpY3QucHJpdmF0ZURpY3Quc3VicnNJbmRleCAmJiBjZmYudG9wRGljdC5wcml2YXRlRGljdC5zdWJyc0luZGV4Lm9iamVjdHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3N1YnJzOiBjZmYuZ2xvYmFsU3VickluZGV4ICYmIGNmZi5nbG9iYWxTdWJySW5kZXgub2JqZWN0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NGRkNJREZvbnQ6IGNmZi5pc0NJREZvbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRTZWxlY3Q6IGNmZi5mZFNlbGVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZEFycmF5OiBjZmYuZmRBcnJheVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBhcnNlR2x5ZlRhYmxlKGdseWYsIGxvY2EsIGlzR2x5cGhMb2NhdGlvbnNMb25nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbVNpemUsIGl0ZW1EZWNvZGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dseXBoTG9jYXRpb25zTG9uZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TaXplID0gNDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EZWNvZGUgPSBmdW5jdGlvbiBmb250SXRlbURlY29kZUxvbmcoZGF0YSwgb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhW29mZnNldF0gPDwgMjQgfCBkYXRhW29mZnNldCArIDFdIDw8IDE2IHwgZGF0YVtvZmZzZXQgKyAyXSA8PCA4IHwgZGF0YVtvZmZzZXQgKyAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU2l6ZSA9IDI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGVjb2RlID0gZnVuY3Rpb24gZm9udEl0ZW1EZWNvZGUoZGF0YSwgb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhW29mZnNldF0gPDwgOSB8IGRhdGFbb2Zmc2V0ICsgMV0gPDwgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRPZmZzZXQgPSBpdGVtRGVjb2RlKGxvY2EsIDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gaXRlbVNpemU7IGogPCBsb2NhLmxlbmd0aDsgaiArPSBpdGVtU2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmRPZmZzZXQgPSBpdGVtRGVjb2RlKGxvY2EsIGopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocy5wdXNoKGdseWYuc3ViYXJyYXkoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gZW5kT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2x5cGhzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbG9va3VwQ21hcChyYW5nZXMsIHVuaWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlID0gdW5pY29kZS5jb2RlUG9pbnRBdCgwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaWQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGwgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSByYW5nZXMubGVuZ3RoIC0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGwgPCByKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBsICsgciArIDEgPj4gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlIDwgcmFuZ2VzW2NdLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBjIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZXNbbF0uc3RhcnQgPD0gY29kZSAmJiBjb2RlIDw9IHJhbmdlc1tsXS5lbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaWQgPSByYW5nZXNbbF0uaWREZWx0YSArIChyYW5nZXNbbF0uaWRzID8gcmFuZ2VzW2xdLmlkc1tjb2RlIC0gcmFuZ2VzW2xdLnN0YXJ0XSA6IGNvZGUpICYgMHhGRkZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlOiBjb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoSWQ6IGdpZFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBpbGVHbHlmKGNvZGUsIGNtZHMsIGZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG1vdmVUbyh4LCB5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kOiAnbW92ZVRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW3gsIHldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGxpbmVUbyh4LCB5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kOiAnbGluZVRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW3gsIHldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHF1YWRyYXRpY0N1cnZlVG8oeGEsIHlhLCB4LCB5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kOiAncXVhZHJhdGljQ3VydmVUbycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFt4YSwgeWEsIHgsIHldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1iZXJPZkNvbnRvdXJzID0gKGNvZGVbaV0gPDwgMjQgfCBjb2RlW2kgKyAxXSA8PCAxNikgPj4gMTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmxhZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpICs9IDEwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtYmVyT2ZDb250b3VycyA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gY29kZVtpXSA8PCA4IHwgY29kZVtpICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaEluZGV4ID0gY29kZVtpICsgMl0gPDwgOCB8IGNvZGVbaSArIDNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcmcxLCBhcmcyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIDB4MDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzEgPSAoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSA+PiAxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzIgPSAoY29kZVtpICsgMl0gPDwgMjQgfCBjb2RlW2kgKyAzXSA8PCAxNikgPj4gMTY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcxID0gY29kZVtpKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnMiA9IGNvZGVbaSsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIDB4MDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBhcmcxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGFyZzI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlWCA9IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVkgPSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGUwMSA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZTEwID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiAweDA4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVggPSBzY2FsZVkgPSAoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSAvIDEwNzM3NDE4MjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiAweDQwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVggPSAoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSAvIDEwNzM3NDE4MjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVkgPSAoY29kZVtpICsgMl0gPDwgMjQgfCBjb2RlW2kgKyAzXSA8PCAxNikgLyAxMDczNzQxODI0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZsYWdzICYgMHg4MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVYID0gKGNvZGVbaV0gPDwgMjQgfCBjb2RlW2kgKyAxXSA8PCAxNikgLyAxMDczNzQxODI0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGUwMSA9IChjb2RlW2kgKyAyXSA8PCAyNCB8IGNvZGVbaSArIDNdIDw8IDE2KSAvIDEwNzM3NDE4MjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZTEwID0gKGNvZGVbaSArIDRdIDw8IDI0IHwgY29kZVtpICsgNV0gPDwgMTYpIC8gMTA3Mzc0MTgyNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWSA9IChjb2RlW2kgKyA2XSA8PCAyNCB8IGNvZGVbaSArIDddIDw8IDE2KSAvIDEwNzM3NDE4MjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ViZ2x5cGggPSBmb250LmdseXBoc1tnbHlwaEluZGV4XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViZ2x5cGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kOiAnc2F2ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQ6ICd0cmFuc2Zvcm0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtzY2FsZVgsIHNjYWxlMDEsIHNjYWxlMTAsIHNjYWxlWSwgeCwgeV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdseWYoc3ViZ2x5cGgsIGNtZHMsIGZvbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQ6ICdyZXN0b3JlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChmbGFncyAmIDB4MjApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kUHRzT2ZDb250b3VycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqLCBqajtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBudW1iZXJPZkNvbnRvdXJzOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kUHRzT2ZDb250b3Vycy5wdXNoKGNvZGVbaV0gPDwgOCB8IGNvZGVbaSArIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnN0cnVjdGlvbkxlbmd0aCA9IGNvZGVbaV0gPDwgOCB8IGNvZGVbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gMiArIGluc3RydWN0aW9uTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1iZXJPZlBvaW50cyA9IGVuZFB0c09mQ29udG91cnNbZW5kUHRzT2ZDb250b3Vycy5sZW5ndGggLSAxXSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvaW50cyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBvaW50cy5sZW5ndGggPCBudW1iZXJPZlBvaW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyA9IGNvZGVbaSsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcGVhdCA9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgMHgwOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0ICs9IGNvZGVbaSsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZXBlYXQtLSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczogZmxhZ3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG51bWJlck9mUG9pbnRzOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwb2ludHNbal0uZmxhZ3MgJiAweDEyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCArPSAoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSA+PiAxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgwMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4IC09IGNvZGVbaSsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDEyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggKz0gY29kZVtpKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2pdLnggPSB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBudW1iZXJPZlBvaW50czsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocG9pbnRzW2pdLmZsYWdzICYgMHgyNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgKz0gKGNvZGVbaV0gPDwgMjQgfCBjb2RlW2kgKyAxXSA8PCAxNikgPj4gMTY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSAtPSBjb2RlW2krK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgyNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICs9IGNvZGVbaSsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c1tqXS55ID0geTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRQb2ludCA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtYmVyT2ZDb250b3VyczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmRQb2ludCA9IGVuZFB0c09mQ29udG91cnNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250b3VyID0gcG9pbnRzLnNsaWNlKHN0YXJ0UG9pbnQsIGVuZFBvaW50ICsgMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRvdXJbMF0uZmxhZ3MgJiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250b3VyLnB1c2goY29udG91clswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udG91cltjb250b3VyLmxlbmd0aCAtIDFdLmZsYWdzICYgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udG91ci51bnNoaWZ0KGNvbnRvdXJbY29udG91ci5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAoY29udG91clswXS54ICsgY29udG91cltjb250b3VyLmxlbmd0aCAtIDFdLngpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAoY29udG91clswXS55ICsgY29udG91cltjb250b3VyLmxlbmd0aCAtIDFdLnkpIC8gMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRvdXIudW5zaGlmdChwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRvdXIucHVzaChwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVUbyhjb250b3VyWzBdLngsIGNvbnRvdXJbMF0ueSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMSwgamogPSBjb250b3VyLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250b3VyW2pdLmZsYWdzICYgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVUbyhjb250b3VyW2pdLngsIGNvbnRvdXJbal0ueSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRvdXJbaiArIDFdLmZsYWdzICYgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWRyYXRpY0N1cnZlVG8oY29udG91cltqXS54LCBjb250b3VyW2pdLnksIGNvbnRvdXJbaiArIDFdLngsIGNvbnRvdXJbaiArIDFdLnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZHJhdGljQ3VydmVUbyhjb250b3VyW2pdLngsIGNvbnRvdXJbal0ueSwgKGNvbnRvdXJbal0ueCArIGNvbnRvdXJbaiArIDFdLngpIC8gMiwgKGNvbnRvdXJbal0ueSArIGNvbnRvdXJbaiArIDFdLnkpIC8gMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvaW50ID0gZW5kUG9pbnQgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBpbGVDaGFyU3RyaW5nKGNvZGUsIGNtZHMsIGZvbnQsIGdseXBoSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFjayA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHggPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ZW1zID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbW92ZVRvKHgsIHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQ6ICdtb3ZlVG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbeCwgeV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbGluZVRvKHgsIHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQ6ICdsaW5lVG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbeCwgeV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYmV6aWVyQ3VydmVUbyh4MSwgeTEsIHgyLCB5MiwgeCwgeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZDogJ2JlemllckN1cnZlVG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbeDEsIHkxLCB4MiwgeTIsIHgsIHldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBhcnNlKGNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IGNvZGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFja0NsZWFuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2ID0gY29kZVtpKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeGEsIHhiLCB5YSwgeWIsIHkxLCB5MiwgeTMsIG4sIHN1YnJDb2RlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZW1zICs9IHN0YWNrLmxlbmd0aCA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQ2xlYW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlbXMgKz0gc3RhY2subGVuZ3RoID4+IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tDbGVhbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICs9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lVG8oeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVUbyh4LCB5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lVG8oeCwgeSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVUbyh4LCB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlhID0geSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHliICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeWEsIHhiLCB5YiwgeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJDb2RlID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250LmlzQ0ZGQ0lERm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmRJbmRleCA9IGZvbnQuZmRTZWxlY3QuZ2V0RkRJbmRleChnbHlwaElkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmRJbmRleCA+PSAwICYmIGZkSW5kZXggPCBmb250LmZkQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udERpY3QgPSBmb250LmZkQXJyYXlbZmRJbmRleF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicnMgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250RGljdC5wcml2YXRlRGljdCAmJiBmb250RGljdC5wcml2YXRlRGljdC5zdWJyc0luZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicnMgPSBmb250RGljdC5wcml2YXRlRGljdC5zdWJyc0luZGV4Lm9iamVjdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1TdWJycyA9IHN1YnJzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuICs9IG51bVN1YnJzIDwgMTI0MCA/IDEwNyA6IG51bVN1YnJzIDwgMzM5MDAgPyAxMTMxIDogMzI3Njg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VickNvZGUgPSBzdWJyc1tuXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyQ29kZSA9IGZvbnQuc3VicnNbbiArIGZvbnQuc3VicnNCaWFzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VickNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2Uoc3VickNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gY29kZVtpKytdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHksIHhiLCB5MSwgeCwgeTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHkxLCB4YiwgeSwgeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlhID0geSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHliID0geWEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSB5YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeWEsIHhiLCB5YiwgeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTEgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTIgPSB5MSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeTEsIHhiLCB5MiwgeCwgeTIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTMgPSB5MiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeTIsIHhiLCB5MywgeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHgwID0geCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MCA9IHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWEgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHliICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlhID0geSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHliID0geWEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHhiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHliO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMoeCAtIHgwKSA+IE1hdGguYWJzKHkgLSB5MCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeWEsIHhiLCB5YiwgeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwidW5rbm93biBvcGVyYXRvcjogMTIgXCIuY29uY2F0KHYpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID49IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFjaGFyID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiY2hhciA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZDogJ3NhdmUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kOiAndHJhbnNsYXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFt4LCB5XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNtYXAgPSBsb29rdXBDbWFwKGZvbnQuY21hcCwgU3RyaW5nLmZyb21DaGFyQ29kZShmb250LmdseXBoTmFtZU1hcFtfZW5jb2RpbmdzLlN0YW5kYXJkRW5jb2RpbmdbYWNoYXJdXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlQ2hhclN0cmluZyhmb250LmdseXBoc1tjbWFwLmdseXBoSWRdLCBjbWRzLCBmb250LCBjbWFwLmdseXBoSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kOiAncmVzdG9yZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtYXAgPSBsb29rdXBDbWFwKGZvbnQuY21hcCwgU3RyaW5nLmZyb21DaGFyQ29kZShmb250LmdseXBoTmFtZU1hcFtfZW5jb2RpbmdzLlN0YW5kYXJkRW5jb2RpbmdbYmNoYXJdXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlQ2hhclN0cmluZyhmb250LmdseXBoc1tjbWFwLmdseXBoSWRdLCBjbWRzLCBmb250LCBjbWFwLmdseXBoSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVtcyArPSBzdGFjay5sZW5ndGggPj4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVtcyArPSBzdGFjay5sZW5ndGggPj4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IHN0ZW1zICsgNyA+PiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQ2xlYW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZW1zICs9IHN0YWNrLmxlbmd0aCA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gc3RlbXMgKyA3ID4+IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tDbGVhbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSArPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVtcyArPSBzdGFjay5sZW5ndGggPj4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSB5YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lVG8oeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHliID0geWEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHliICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoICUgMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGEgPSB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSB4YjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHliICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeWEsIHhiLCB5YiwgeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCAlIDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlhID0geTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHliID0geWEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0geWI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI4OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goKGNvZGVbaV0gPDwgMjQgfCBjb2RlW2kgKyAxXSA8PCAxNikgPj4gMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gc3RhY2sucG9wKCkgKyBmb250LmdzdWJyc0JpYXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VickNvZGUgPSBmb250LmdzdWJyc1tuXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJyQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZShzdWJyQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGEgPSB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSB5YiArIChzdGFjay5sZW5ndGggPT09IDEgPyBzdGFjay5zaGlmdCgpIDogMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWEgPSB5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSB5YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSB4YiArIChzdGFjay5sZW5ndGggPT09IDEgPyBzdGFjay5zaGlmdCgpIDogMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlhID0geTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHliID0geWEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0geGIgKyAoc3RhY2subGVuZ3RoID09PSAxID8gc3RhY2suc2hpZnQoKSA6IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhhID0geDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWEgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHliID0geWEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0geWIgKyAoc3RhY2subGVuZ3RoID09PSAxID8gc3RhY2suc2hpZnQoKSA6IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodiA8IDMyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcInVua25vd24gb3BlcmF0b3I6IFwiLmNvbmNhdCh2KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPCAyNDcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh2IC0gMTM5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHYgPCAyNTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCgodiAtIDI0NykgKiAyNTYgKyBjb2RlW2krK10gKyAxMDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodiA8IDI1NSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKC0odiAtIDI1MSkgKiAyNTYgLSBjb2RlW2krK10gLSAxMDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goKGNvZGVbaV0gPDwgMjQgfCBjb2RlW2kgKyAxXSA8PCAxNiB8IGNvZGVbaSArIDJdIDw8IDggfCBjb2RlW2kgKyAzXSkgLyA2NTUzNik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFja0NsZWFuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZShjb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBOT09QID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIENvbXBpbGVkRm9udCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQ29tcGlsZWRGb250KGZvbnRNYXRyaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbXBpbGVkRm9udCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IENvbXBpbGVkRm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnQ2Fubm90IGluaXRpYWxpemUgQ29tcGlsZWRGb250LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb250TWF0cml4ID0gZm9udE1hdHJpeDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21waWxlZEdseXBocyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKENvbXBpbGVkRm9udCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldFBhdGhKc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UGF0aEpzKHVuaWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbWFwID0gbG9va3VwQ21hcCh0aGlzLmNtYXAsIHVuaWNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuID0gdGhpcy5jb21waWxlZEdseXBoc1tjbWFwLmdseXBoSWRdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSB0aGlzLmNvbXBpbGVHbHlwaCh0aGlzLmdseXBoc1tjbWFwLmdseXBoSWRdLCBjbWFwLmdseXBoSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGlsZWRHbHlwaHNbY21hcC5nbHlwaElkXSA9IGZuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW2NtYXAuY2hhckNvZGVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbY21hcC5jaGFyQ29kZV0gPSBjbWFwLmdseXBoSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNvbXBpbGVHbHlwaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcGlsZUdseXBoKGNvZGUsIGdseXBoSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29kZSB8fCBjb2RlLmxlbmd0aCA9PT0gMCB8fCBjb2RlWzBdID09PSAxNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOT09QO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udE1hdHJpeCA9IHRoaXMuZm9udE1hdHJpeDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNDRkZDSURGb250KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZkSW5kZXggPSB0aGlzLmZkU2VsZWN0LmdldEZESW5kZXgoZ2x5cGhJZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmRJbmRleCA+PSAwICYmIGZkSW5kZXggPCB0aGlzLmZkQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250RGljdCA9IHRoaXMuZmRBcnJheVtmZEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udE1hdHJpeCA9IGZvbnREaWN0LmdldEJ5TmFtZSgnRm9udE1hdHJpeCcpIHx8IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY21kcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQ6ICdzYXZlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZDogJ3RyYW5zZm9ybScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogZm9udE1hdHJpeC5zbGljZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kOiAnc2NhbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFsnc2l6ZScsICctc2l6ZSddXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGlsZUdseXBoSW1wbChjb2RlLCBjbWRzLCBnbHlwaElkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kOiAncmVzdG9yZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNtZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjb21waWxlR2x5cGhJbXBsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21waWxlR2x5cGhJbXBsKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnQ2hpbGRyZW4gY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50IHRoaXMuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJoYXNCdWlsdFBhdGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhc0J1aWx0UGF0aCh1bmljb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY21hcCA9IGxvb2t1cENtYXAodGhpcy5jbWFwLCB1bmljb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2NtYXAuZ2x5cGhJZF0gIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbY21hcC5jaGFyQ29kZV0gIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb21waWxlZEZvbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFRydWVUeXBlQ29tcGlsZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Db21waWxlZEZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoVHJ1ZVR5cGVDb21waWxlZCwgX0NvbXBpbGVkRm9udCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUcnVlVHlwZUNvbXBpbGVkKGdseXBocywgY21hcCwgZm9udE1hdHJpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRydWVUeXBlQ29tcGlsZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFRydWVUeXBlQ29tcGlsZWQpLmNhbGwodGhpcywgZm9udE1hdHJpeCB8fCBbMC4wMDA0ODgsIDAsIDAsIDAuMDAwNDg4LCAwLCAwXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5nbHlwaHMgPSBnbHlwaHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmNtYXAgPSBjbWFwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFRydWVUeXBlQ29tcGlsZWQsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjb21waWxlR2x5cGhJbXBsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21waWxlR2x5cGhJbXBsKGNvZGUsIGNtZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHbHlmKGNvZGUsIGNtZHMsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWVUeXBlQ29tcGlsZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KENvbXBpbGVkRm9udCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFR5cGUyQ29tcGlsZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Db21waWxlZEZvbnQyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFR5cGUyQ29tcGlsZWQsIF9Db21waWxlZEZvbnQyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFR5cGUyQ29tcGlsZWQoY2ZmSW5mbywgY21hcCwgZm9udE1hdHJpeCwgZ2x5cGhOYW1lTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFR5cGUyQ29tcGlsZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMiA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihUeXBlMkNvbXBpbGVkKS5jYWxsKHRoaXMsIGZvbnRNYXRyaXggfHwgWzAuMDAxLCAwLCAwLCAwLjAwMSwgMCwgMF0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyLmdseXBocyA9IGNmZkluZm8uZ2x5cGhzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuZ3N1YnJzID0gY2ZmSW5mby5nc3VicnMgfHwgW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5zdWJycyA9IGNmZkluZm8uc3VicnMgfHwgW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5jbWFwID0gY21hcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyLmdseXBoTmFtZU1hcCA9IGdseXBoTmFtZU1hcCB8fCAoMCwgX2dseXBobGlzdC5nZXRHbHlwaHNVbmljb2RlKSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuZ3N1YnJzQmlhcyA9IF90aGlzMi5nc3VicnMubGVuZ3RoIDwgMTI0MCA/IDEwNyA6IF90aGlzMi5nc3VicnMubGVuZ3RoIDwgMzM5MDAgPyAxMTMxIDogMzI3Njg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5zdWJyc0JpYXMgPSBfdGhpczIuc3VicnMubGVuZ3RoIDwgMTI0MCA/IDEwNyA6IF90aGlzMi5zdWJycy5sZW5ndGggPCAzMzkwMCA/IDExMzEgOiAzMjc2ODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyLmlzQ0ZGQ0lERm9udCA9IGNmZkluZm8uaXNDRkZDSURGb250O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuZmRTZWxlY3QgPSBjZmZJbmZvLmZkU2VsZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuZmRBcnJheSA9IGNmZkluZm8uZmRBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoVHlwZTJDb21waWxlZCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNvbXBpbGVHbHlwaEltcGxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBpbGVHbHlwaEltcGwoY29kZSwgY21kcywgZ2x5cGhJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZUNoYXJTdHJpbmcoY29kZSwgY21kcywgdGhpcywgZ2x5cGhJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZTJDb21waWxlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0oQ29tcGlsZWRGb250KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiBGb250UmVuZGVyZXJGYWN0b3J5X2NyZWF0ZShmb250LCBzZWFjQW5hbHlzaXNFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBuZXcgVWludDhBcnJheShmb250LmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbWFwLCBnbHlmLCBsb2NhLCBjZmYsIGluZGV4VG9Mb2NGb3JtYXQsIHVuaXRzUGVyRW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bVRhYmxlcyA9IGdldFVzaG9ydChkYXRhLCA0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gMTI7IGkgPCBudW1UYWJsZXM7IGkrKywgcCArPSAxNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGRhdGEuc3ViYXJyYXkocCwgcCArIDQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IGdldExvbmcoZGF0YSwgcCArIDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gZ2V0TG9uZyhkYXRhLCBwICsgMTIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjbWFwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWFwID0gcGFyc2VDbWFwKGRhdGEsIG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZ2x5Zic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5ZiA9IGRhdGEuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsb2NhJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhID0gZGF0YS5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2hlYWQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRzUGVyRW0gPSBnZXRVc2hvcnQoZGF0YSwgb2Zmc2V0ICsgMTgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VG9Mb2NGb3JtYXQgPSBnZXRVc2hvcnQoZGF0YSwgb2Zmc2V0ICsgNTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdDRkYgJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYgPSBwYXJzZUNmZihkYXRhLCBvZmZzZXQsIG9mZnNldCArIGxlbmd0aCwgc2VhY0FuYWx5c2lzRW5hYmxlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5Zikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udE1hdHJpeCA9ICF1bml0c1BlckVtID8gZm9udC5mb250TWF0cml4IDogWzEgLyB1bml0c1BlckVtLCAwLCAwLCAxIC8gdW5pdHNQZXJFbSwgMCwgMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHJ1ZVR5cGVDb21waWxlZChwYXJzZUdseWZUYWJsZShnbHlmLCBsb2NhLCBpbmRleFRvTG9jRm9ybWF0KSwgY21hcCwgZm9udE1hdHJpeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUeXBlMkNvbXBpbGVkKGNmZiwgY21hcCwgZm9udC5mb250TWF0cml4LCBmb250LmdseXBoTmFtZU1hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Gb250UmVuZGVyZXJGYWN0b3J5ID0gRm9udFJlbmRlcmVyRmFjdG9yeTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTgxICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5UeXBlMVBhcnNlciA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2VuY29kaW5ncyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTc2KTtcblxuICAgICAgICAgICAgICAgIHZhciBfc3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEhJTlRJTkdfRU5BQkxFRCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgdmFyIFR5cGUxQ2hhclN0cmluZyA9IGZ1bmN0aW9uIFR5cGUxQ2hhclN0cmluZ0Nsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBDT01NQU5EX01BUCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdoc3RlbSc6IFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd2c3RlbSc6IFszXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd2bW92ZXRvJzogWzRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3JsaW5ldG8nOiBbNV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnaGxpbmV0byc6IFs2XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd2bGluZXRvJzogWzddLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3JyY3VydmV0byc6IFs4XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdjYWxsc3Vicic6IFsxMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnZmxleCc6IFsxMiwgMzVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2Ryb3AnOiBbMTIsIDE4XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmRjaGFyJzogWzE0XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdybW92ZXRvJzogWzIxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdobW92ZXRvJzogWzIyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd2aGN1cnZldG8nOiBbMzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2h2Y3VydmV0byc6IFszMV1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUeXBlMUNoYXJTdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubHNiID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmxleGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFR5cGUxQ2hhclN0cmluZy5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0OiBmdW5jdGlvbiBUeXBlMUNoYXJTdHJpbmdfY29udmVydChlbmNvZGVkLCBzdWJycywgc2VhY0FuYWx5c2lzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IGVuY29kZWQubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3eCwgc2J4LCBzdWJyTnVtYmVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGVuY29kZWRbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIDwgMzIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICh2YWx1ZSA8PCA4KSArIGVuY29kZWRbKytpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFISU5USU5HX0VOQUJMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDIsIENPTU1BTkRfTUFQLmhzdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghSElOVElOR19FTkFCTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgyLCBDT01NQU5EX01BUC52c3RlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5mbGV4aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZHkgPSB0aGlzLnN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKDAsIGR5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDEsIENPTU1BTkRfTUFQLnZtb3ZldG8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDIsIENPTU1BTkRfTUFQLnJsaW5ldG8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDEsIENPTU1BTkRfTUFQLmhsaW5ldG8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDEsIENPTU1BTkRfTUFQLnZsaW5ldG8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDYsIENPTU1BTkRfTUFQLnJyY3VydmV0byk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyTnVtYmVyID0gdGhpcy5zdGFjay5wb3AoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1YnJzW3N1YnJOdW1iZXJdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gdGhpcy5jb252ZXJ0KHN1YnJzW3N1YnJOdW1iZXJdLCBzdWJycywgc2VhY0FuYWx5c2lzRW5hYmxlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eCA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNieCA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubHNiID0gc2J4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gd3g7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaCh3eCwgc2J4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDIsIENPTU1BTkRfTUFQLmhtb3ZldG8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0LnB1c2goQ09NTUFORF9NQVAuZW5kY2hhclswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmxleGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMiwgQ09NTUFORF9NQVAucm1vdmV0byk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmxleGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMSwgQ09NTUFORF9NQVAuaG1vdmV0byk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDQsIENPTU1BTkRfTUFQLnZoY3VydmV0byk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDQsIENPTU1BTkRfTUFQLmh2Y3VydmV0byk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoMTIgPDwgOCkgKyAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoMTIgPDwgOCkgKyAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUhJTlRJTkdfRU5BQkxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjayA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMiwgQ09NTUFORF9NQVAudnN0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFISU5USU5HX0VOQUJMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDIsIENPTU1BTkRfTUFQLmhzdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICgxMiA8PCA4KSArIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWFjQW5hbHlzaXNFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYWMgPSB0aGlzLnN0YWNrLnNwbGljZSgtNCwgNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMCwgQ09NTUFORF9NQVAuZW5kY2hhcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoNCwgQ09NTUFORF9NQVAuZW5kY2hhcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgNzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoIDwgNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eCA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzYnkgPSB0aGlzLnN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYnggPSB0aGlzLnN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxzYiA9IHNieDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHd4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2god3gsIHNieCwgc2J5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDMsIENPTU1BTkRfTUFQLnJtb3ZldG8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgMTI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bTIgPSB0aGlzLnN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtMSA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaChudW0xIC8gbnVtMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoMTIgPDwgOCkgKyAxNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyTnVtYmVyID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bUFyZ3MgPSB0aGlzLnN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJyTnVtYmVyID09PSAwICYmIG51bUFyZ3MgPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbGV4QXJncyA9IHRoaXMuc3RhY2suc3BsaWNlKHRoaXMuc3RhY2subGVuZ3RoIC0gMTcsIDE3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaChmbGV4QXJnc1syXSArIGZsZXhBcmdzWzBdLCBmbGV4QXJnc1szXSArIGZsZXhBcmdzWzFdLCBmbGV4QXJnc1s0XSwgZmxleEFyZ3NbNV0sIGZsZXhBcmdzWzZdLCBmbGV4QXJnc1s3XSwgZmxleEFyZ3NbOF0sIGZsZXhBcmdzWzldLCBmbGV4QXJnc1sxMF0sIGZsZXhBcmdzWzExXSwgZmxleEFyZ3NbMTJdLCBmbGV4QXJnc1sxM10sIGZsZXhBcmdzWzE0XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMTMsIENPTU1BTkRfTUFQLmZsZXgsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mbGV4aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goZmxleEFyZ3NbMTVdLCBmbGV4QXJnc1sxNl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YnJOdW1iZXIgPT09IDEgJiYgbnVtQXJncyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mbGV4aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoMTIgPDwgOCkgKyAxNzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICgxMiA8PCA4KSArIDMzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbmtub3duIHR5cGUgMSBjaGFyc3RyaW5nIGNvbW1hbmQgb2YgXCInICsgdmFsdWUgKyAnXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA8PSAyNDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgLSAxMzk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPD0gMjUwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICh2YWx1ZSAtIDI0NykgKiAyNTYgKyBlbmNvZGVkWysraV0gKyAxMDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPD0gMjU0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IC0oKHZhbHVlIC0gMjUxKSAqIDI1NikgLSBlbmNvZGVkWysraV0gLSAxMDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IChlbmNvZGVkWysraV0gJiAweGZmKSA8PCAyNCB8IChlbmNvZGVkWysraV0gJiAweGZmKSA8PCAxNiB8IChlbmNvZGVkWysraV0gJiAweGZmKSA8PCA4IHwgKGVuY29kZWRbKytpXSAmIDB4ZmYpIDw8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQ29tbWFuZDogZnVuY3Rpb24gZXhlY3V0ZUNvbW1hbmQoaG93TWFueUFyZ3MsIGNvbW1hbmQsIGtlZXBTdGFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFja0xlbmd0aCA9IHRoaXMuc3RhY2subGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhvd01hbnlBcmdzID4gc3RhY2tMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gc3RhY2tMZW5ndGggLSBob3dNYW55QXJncztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IHN0YWNrTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5zdGFja1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0LnB1c2goMjgsIHZhbHVlID4+IDggJiAweGZmLCB2YWx1ZSAmIDB4ZmYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSA2NTUzNiAqIHZhbHVlIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0LnB1c2goMjU1LCB2YWx1ZSA+PiAyNCAmIDB4RkYsIHZhbHVlID4+IDE2ICYgMHhGRiwgdmFsdWUgPj4gOCAmIDB4RkYsIHZhbHVlICYgMHhGRik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm91dHB1dC5wdXNoLmFwcGx5KHRoaXMub3V0cHV0LCBjb21tYW5kKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZWVwU3RhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5zcGxpY2Uoc3RhcnQsIGhvd01hbnlBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZTFDaGFyU3RyaW5nO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIHZhciBUeXBlMVBhcnNlciA9IGZ1bmN0aW9uIFR5cGUxUGFyc2VyQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIEVFWEVDX0VOQ1JZUFRfS0VZID0gNTU2NjU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBDSEFSX1NUUlNfRU5DUllQVF9LRVkgPSA0MzMwO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzSGV4RGlnaXQoY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGUgPj0gNDggJiYgY29kZSA8PSA1NyB8fCBjb2RlID49IDY1ICYmIGNvZGUgPD0gNzAgfHwgY29kZSA+PSA5NyAmJiBjb2RlIDw9IDEwMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlY3J5cHQoZGF0YSwga2V5LCBkaXNjYXJkTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlzY2FyZE51bWJlciA+PSBkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBrZXkgfCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMxID0gNTI4NDUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgPSAyMjcxOSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGo7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkaXNjYXJkTnVtYmVyOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gKGRhdGFbaV0gKyByKSAqIGMxICsgYzIgJiAoMSA8PCAxNikgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBkYXRhLmxlbmd0aCAtIGRpc2NhcmROdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVjcnlwdGVkID0gbmV3IFVpbnQ4QXJyYXkoY291bnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBkaXNjYXJkTnVtYmVyLCBqID0gMDsgaiA8IGNvdW50OyBpKyssIGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGRhdGFbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjcnlwdGVkW2pdID0gdmFsdWUgXiByID4+IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9ICh2YWx1ZSArIHIpICogYzEgKyBjMiAmICgxIDw8IDE2KSAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWNyeXB0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWNyeXB0QXNjaWkoZGF0YSwga2V5LCBkaXNjYXJkTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgciA9IGtleSB8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYzEgPSA1Mjg0NSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMiA9IDIyNzE5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gZGF0YS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVMZW5ndGggPSBjb3VudCA+Pj4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNyeXB0ZWQgPSBuZXcgVWludDhBcnJheShtYXliZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaiA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpZ2l0MSA9IGRhdGFbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzSGV4RGlnaXQoZGlnaXQxKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpZ2l0MjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgY291bnQgJiYgIWlzSGV4RGlnaXQoZGlnaXQyID0gZGF0YVtpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgY291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcGFyc2VJbnQoU3RyaW5nLmZyb21DaGFyQ29kZShkaWdpdDEsIGRpZ2l0MiksIDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjcnlwdGVkW2orK10gPSB2YWx1ZSBeIHIgPj4gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9ICh2YWx1ZSArIHIpICogYzEgKyBjMiAmICgxIDw8IDE2KSAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZGVjcnlwdGVkLCBkaXNjYXJkTnVtYmVyLCBqKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzU3BlY2lhbChjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYyA9PT0gMHgyRiB8fCBjID09PSAweDVCIHx8IGMgPT09IDB4NUQgfHwgYyA9PT0gMHg3QiB8fCBjID09PSAweDdEIHx8IGMgPT09IDB4MjggfHwgYyA9PT0gMHgyOTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFR5cGUxUGFyc2VyKHN0cmVhbSwgZW5jcnlwdGVkLCBzZWFjQW5hbHlzaXNFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5jcnlwdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBzdHJlYW0uZ2V0Qnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNCaW5hcnkgPSAhKGlzSGV4RGlnaXQoZGF0YVswXSkgJiYgaXNIZXhEaWdpdChkYXRhWzFdKSAmJiBpc0hleERpZ2l0KGRhdGFbMl0pICYmIGlzSGV4RGlnaXQoZGF0YVszXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IG5ldyBfc3RyZWFtLlN0cmVhbShpc0JpbmFyeSA/IGRlY3J5cHQoZGF0YSwgRUVYRUNfRU5DUllQVF9LRVksIDQpIDogZGVjcnlwdEFzY2lpKGRhdGEsIEVFWEVDX0VOQ1JZUFRfS0VZLCA0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZCA9ICEhc2VhY0FuYWx5c2lzRW5hYmxlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgVHlwZTFQYXJzZXIucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZE51bWJlckFycmF5OiBmdW5jdGlvbiBUeXBlMVBhcnNlcl9yZWFkTnVtYmVyQXJyYXkoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gbnVsbCB8fCB0b2tlbiA9PT0gJ10nIHx8IHRva2VuID09PSAnfScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkucHVzaChwYXJzZUZsb2F0KHRva2VuIHx8IDApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZE51bWJlcjogZnVuY3Rpb24gVHlwZTFQYXJzZXJfcmVhZE51bWJlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodG9rZW4gfHwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEludDogZnVuY3Rpb24gVHlwZTFQYXJzZXJfcmVhZEludCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHRva2VuIHx8IDAsIDEwKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEJvb2xlYW46IGZ1bmN0aW9uIFR5cGUxUGFyc2VyX3JlYWRCb29sZWFuKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW4gPT09ICd0cnVlJyA/IDEgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRDaGFyOiBmdW5jdGlvbiBUeXBlMV9uZXh0Q2hhcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50Q2hhciA9IHRoaXMuc3RyZWFtLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRUb2tlbjogZnVuY3Rpb24gVHlwZTFQYXJzZXJfZ2V0VG9rZW4oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLmN1cnJlbnRDaGFyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDBBIHx8IGNoID09PSAweDBEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDI1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghKDAsIF91dGlsLmlzU3BhY2UpKGNoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNTcGVjaWFsKGNoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSAnJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNoID49IDAgJiYgISgwLCBfdXRpbC5pc1NwYWNlKShjaCkgJiYgIWlzU3BlY2lhbChjaCkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRDaGFyU3RyaW5nczogZnVuY3Rpb24gVHlwZTFQYXJzZXJfcmVhZENoYXJTdHJpbmdzKGJ5dGVzLCBsZW5JVikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW5JViA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ5dGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWNyeXB0KGJ5dGVzLCBDSEFSX1NUUlNfRU5DUllQVF9LRVksIGxlbklWKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0Rm9udFByb2dyYW06IGZ1bmN0aW9uIFR5cGUxUGFyc2VyX2V4dHJhY3RGb250UHJvZ3JhbSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdGhpcy5zdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1YnJzID0gW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzdHJpbmdzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByaXZhdGVEYXRhID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlRGF0YVsnbGVuSVYnXSA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb2dyYW0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZ3M6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJpdmF0ZURhdGEnOiBwcml2YXRlRGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW4sIGxlbmd0aCwgZGF0YSwgbGVuSVYsIGVuY29kZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKHRva2VuID0gdGhpcy5nZXRUb2tlbigpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT09ICcvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdDaGFyU3RyaW5ncyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBudWxsIHx8IHRva2VuID09PSAnZW5kJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT09ICcvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGggPSB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBsZW5ndGggPiAwID8gc3RyZWFtLmdldEJ5dGVzKGxlbmd0aCkgOiBuZXcgVWludDhBcnJheSgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuSVYgPSBwcm9ncmFtLnByb3BlcnRpZXMucHJpdmF0ZURhdGFbJ2xlbklWJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZWQgPSB0aGlzLnJlYWRDaGFyU3RyaW5ncyhkYXRhLCBsZW5JVik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSAnbm9hY2Nlc3MnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5ncy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoOiBnbHlwaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZWQ6IGVuY29kZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1N1YnJzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodGhpcy5nZXRUb2tlbigpID09PSAnZHVwJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGxlbmd0aCA+IDAgPyBzdHJlYW0uZ2V0Qnl0ZXMobGVuZ3RoKSA6IG5ldyBVaW50OEFycmF5KDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5JViA9IHByb2dyYW0ucHJvcGVydGllcy5wcml2YXRlRGF0YVsnbGVuSVYnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlZCA9IHRoaXMucmVhZENoYXJTdHJpbmdzKGRhdGEsIGxlbklWKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09ICdub2FjY2VzcycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJzW2luZGV4XSA9IGVuY29kZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0JsdWVWYWx1ZXMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnT3RoZXJCbHVlcyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdGYW1pbHlCbHVlcyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdGYW1pbHlPdGhlckJsdWVzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmx1ZUFycmF5ID0gdGhpcy5yZWFkTnVtYmVyQXJyYXkoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChibHVlQXJyYXkubGVuZ3RoID4gMCAmJiBibHVlQXJyYXkubGVuZ3RoICUgMiA9PT0gMCAmJiBISU5USU5HX0VOQUJMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3Rva2VuXSA9IGJsdWVBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnU3RlbVNuYXBIJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1N0ZW1TbmFwVic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3Rva2VuXSA9IHRoaXMucmVhZE51bWJlckFycmF5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1N0ZEhXJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1N0ZFZXJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnByb3BlcnRpZXMucHJpdmF0ZURhdGFbdG9rZW5dID0gdGhpcy5yZWFkTnVtYmVyQXJyYXkoKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQmx1ZVNoaWZ0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2xlbklWJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0JsdWVGdXp6JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0JsdWVTY2FsZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdMYW5ndWFnZUdyb3VwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0V4cGFuc2lvbkZhY3Rvcic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3Rva2VuXSA9IHRoaXMucmVhZE51bWJlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdGb3JjZUJvbGQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0ucHJvcGVydGllcy5wcml2YXRlRGF0YVt0b2tlbl0gPSB0aGlzLnJlYWRCb29sZWFuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJzdHJpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoID0gY2hhcnN0cmluZ3NbaV0uZ2x5cGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZWQgPSBjaGFyc3RyaW5nc1tpXS5lbmNvZGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhclN0cmluZyA9IG5ldyBUeXBlMUNoYXJTdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gY2hhclN0cmluZy5jb252ZXJ0KGVuY29kZWQsIHN1YnJzLCB0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3V0cHV0ID0gY2hhclN0cmluZy5vdXRwdXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBbMTRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5jaGFyc3RyaW5ncy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoTmFtZTogZ2x5cGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nOiBvdXRwdXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogY2hhclN0cmluZy53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzYjogY2hhclN0cmluZy5sc2IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFjOiBjaGFyU3RyaW5nLnNlYWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb2dyYW07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdEZvbnRIZWFkZXI6IGZ1bmN0aW9uIFR5cGUxUGFyc2VyX2V4dHJhY3RGb250SGVhZGVyKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKHRva2VuID0gdGhpcy5nZXRUb2tlbigpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT09ICcvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdGb250TWF0cml4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0cml4ID0gdGhpcy5yZWFkTnVtYmVyQXJyYXkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmZvbnRNYXRyaXggPSBtYXRyaXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VuY29kaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jb2RpbmdBcmcgPSB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY29kaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEvXlxcZCskLy50ZXN0KGVuY29kaW5nQXJnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZyA9ICgwLCBfZW5jb2RpbmdzLmdldEVuY29kaW5nKShlbmNvZGluZ0FyZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBwYXJzZUludChlbmNvZGluZ0FyZywgMTApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9PSAnZHVwJyAmJiB0b2tlbiAhPT0gJ2RlZicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09ICdkZWYnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoID0gdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmdbaW5kZXhdID0gZ2x5cGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmJ1aWx0SW5FbmNvZGluZyA9IGVuY29kaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdGb250QkJveCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnRCQm94ID0gdGhpcy5yZWFkTnVtYmVyQXJyYXkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmFzY2VudCA9IE1hdGgubWF4KGZvbnRCQm94WzNdLCBmb250QkJveFsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5kZXNjZW50ID0gTWF0aC5taW4oZm9udEJCb3hbMV0sIGZvbnRCQm94WzNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmFzY2VudFNjYWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlMVBhcnNlcjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlR5cGUxUGFyc2VyID0gVHlwZTFQYXJzZXI7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE4MiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuZ2V0VGlsaW5nUGF0dGVybklSID0gZ2V0VGlsaW5nUGF0dGVybklSO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUGF0dGVybiA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2NvbG9yc3BhY2UgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2OCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3ByaW1pdGl2ZXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1NSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgU2hhZGluZ1R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIEZVTkNUSU9OX0JBU0VEOiAxLFxuICAgICAgICAgICAgICAgICAgICBBWElBTDogMixcbiAgICAgICAgICAgICAgICAgICAgUkFESUFMOiAzLFxuICAgICAgICAgICAgICAgICAgICBGUkVFX0ZPUk1fTUVTSDogNCxcbiAgICAgICAgICAgICAgICAgICAgTEFUVElDRV9GT1JNX01FU0g6IDUsXG4gICAgICAgICAgICAgICAgICAgIENPT05TX1BBVENIX01FU0g6IDYsXG4gICAgICAgICAgICAgICAgICAgIFRFTlNPUl9QQVRDSF9NRVNIOiA3XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBQYXR0ZXJuID0gZnVuY3Rpb24gUGF0dGVybkNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBhdHRlcm4oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKCdzaG91bGQgbm90IGNhbGwgUGF0dGVybiBjb25zdHJ1Y3RvcicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgUGF0dGVybi5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRQYXR0ZXJuOiBmdW5jdGlvbiBQYXR0ZXJuX2dldFBhdHRlcm4oY3R4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIlNob3VsZCBub3QgY2FsbCBQYXR0ZXJuLmdldFN0eWxlOiBcIi5jb25jYXQoY3R4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgUGF0dGVybi5wYXJzZVNoYWRpbmcgPSBmdW5jdGlvbiAoc2hhZGluZywgbWF0cml4LCB4cmVmLCByZXMsIGhhbmRsZXIsIHBkZkZ1bmN0aW9uRmFjdG9yeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpY3QgPSAoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKHNoYWRpbmcpID8gc2hhZGluZy5kaWN0IDogc2hhZGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gZGljdC5nZXQoJ1NoYWRpbmdUeXBlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2hhZGluZ1R5cGUuQVhJQUw6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2hhZGluZ1R5cGUuUkFESUFMOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTaGFkaW5ncy5SYWRpYWxBeGlhbChkaWN0LCBtYXRyaXgsIHhyZWYsIHJlcywgcGRmRnVuY3Rpb25GYWN0b3J5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNoYWRpbmdUeXBlLkZSRUVfRk9STV9NRVNIOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNoYWRpbmdUeXBlLkxBVFRJQ0VfRk9STV9NRVNIOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNoYWRpbmdUeXBlLkNPT05TX1BBVENIX01FU0g6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2hhZGluZ1R5cGUuVEVOU09SX1BBVENIX01FU0g6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNoYWRpbmdzLk1lc2goc2hhZGluZywgbWF0cml4LCB4cmVmLCByZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignVW5zdXBwb3J0ZWQgU2hhZGluZ1R5cGU6ICcgKyB0eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleCBpbnN0YW5jZW9mIF91dGlsLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuc2VuZCgnVW5zdXBwb3J0ZWRGZWF0dXJlJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlSWQ6IF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLnNoYWRpbmdQYXR0ZXJuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNoYWRpbmdzLkR1bW15KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhdHRlcm47XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QYXR0ZXJuID0gUGF0dGVybjtcbiAgICAgICAgICAgICAgICB2YXIgU2hhZGluZ3MgPSB7fTtcbiAgICAgICAgICAgICAgICBTaGFkaW5ncy5TTUFMTF9OVU1CRVIgPSAxZS02O1xuXG4gICAgICAgICAgICAgICAgU2hhZGluZ3MuUmFkaWFsQXhpYWwgPSBmdW5jdGlvbiBSYWRpYWxBeGlhbENsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJhZGlhbEF4aWFsKGRpY3QsIG1hdHJpeCwgeHJlZiwgcmVzLCBwZGZGdW5jdGlvbkZhY3RvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0cml4ID0gbWF0cml4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb29yZHNBcnIgPSBkaWN0LmdldEFycmF5KCdDb29yZHMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhZGluZ1R5cGUgPSBkaWN0LmdldCgnU2hhZGluZ1R5cGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZSA9ICdQYXR0ZXJuJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjcyA9IGRpY3QuZ2V0KCdDb2xvclNwYWNlJywgJ0NTJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcyA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2UucGFyc2UoY3MsIHhyZWYsIHJlcywgcGRmRnVuY3Rpb25GYWN0b3J5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3MgPSBjcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0MCA9IDAuMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IDEuMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpY3QuaGFzKCdEb21haW4nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb21haW5BcnIgPSBkaWN0LmdldEFycmF5KCdEb21haW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MCA9IGRvbWFpbkFyclswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IGRvbWFpbkFyclsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV4dGVuZFN0YXJ0ID0gZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kRW5kID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaWN0LmhhcygnRXh0ZW5kJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXh0ZW5kQXJyID0gZGljdC5nZXRBcnJheSgnRXh0ZW5kJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kU3RhcnQgPSBleHRlbmRBcnJbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kRW5kID0gZXh0ZW5kQXJyWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFkaW5nVHlwZSA9PT0gU2hhZGluZ1R5cGUuUkFESUFMICYmICghZXh0ZW5kU3RhcnQgfHwgIWV4dGVuZEVuZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeDEgPSB0aGlzLmNvb3Jkc0FyclswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeTEgPSB0aGlzLmNvb3Jkc0FyclsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcjEgPSB0aGlzLmNvb3Jkc0FyclsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeDIgPSB0aGlzLmNvb3Jkc0FyclszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeTIgPSB0aGlzLmNvb3Jkc0Fycls0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcjIgPSB0aGlzLmNvb3Jkc0Fycls1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSBNYXRoLnNxcnQoKHgxIC0geDIpICogKHgxIC0geDIpICsgKHkxIC0geTIpICogKHkxIC0geTIpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyMSA8PSByMiArIGRpc3RhbmNlICYmIHIyIDw9IHIxICsgZGlzdGFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbnN1cHBvcnRlZCByYWRpYWwgZ3JhZGllbnQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4dGVuZFN0YXJ0ID0gZXh0ZW5kU3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4dGVuZEVuZCA9IGV4dGVuZEVuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbk9iaiA9IGRpY3QuZ2V0KCdGdW5jdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuID0gcGRmRnVuY3Rpb25GYWN0b3J5LmNyZWF0ZUZyb21BcnJheShmbk9iaik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlmZiA9IHQxIC0gdDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RlcCA9IGRpZmYgLyAxMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvclN0b3BzID0gdGhpcy5jb2xvclN0b3BzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0MCA+PSB0MSB8fCBzdGVwIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ0JhZCBzaGFkaW5nIGRvbWFpbi4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IG5ldyBGbG9hdDMyQXJyYXkoY3MubnVtQ29tcHMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdGlvID0gbmV3IEZsb2F0MzJBcnJheSgxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZ2JDb2xvcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHQwOyBpIDw9IHQxOyBpICs9IHN0ZXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXRpb1swXSA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4ocmF0aW8sIDAsIGNvbG9yLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZ2JDb2xvciA9IGNzLmdldFJnYihjb2xvciwgMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3NzQ29sb3IgPSBfdXRpbC5VdGlsLm1ha2VDc3NSZ2IocmdiQ29sb3JbMF0sIHJnYkNvbG9yWzFdLCByZ2JDb2xvclsyXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclN0b3BzLnB1c2goWyhpIC0gdDApIC8gZGlmZiwgY3NzQ29sb3JdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhY2tncm91bmQgPSAndHJhbnNwYXJlbnQnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGljdC5oYXMoJ0JhY2tncm91bmQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJnYkNvbG9yID0gY3MuZ2V0UmdiKGRpY3QuZ2V0KCdCYWNrZ3JvdW5kJyksIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQgPSBfdXRpbC5VdGlsLm1ha2VDc3NSZ2IocmdiQ29sb3JbMF0sIHJnYkNvbG9yWzFdLCByZ2JDb2xvclsyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXh0ZW5kU3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclN0b3BzLnVuc2hpZnQoWzAsIGJhY2tncm91bmRdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclN0b3BzWzFdWzBdICs9IFNoYWRpbmdzLlNNQUxMX05VTUJFUjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFleHRlbmRFbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclN0b3BzW2NvbG9yU3RvcHMubGVuZ3RoIC0gMV1bMF0gLT0gU2hhZGluZ3MuU01BTExfTlVNQkVSO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3RvcHMucHVzaChbMSwgYmFja2dyb3VuZF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbG9yU3RvcHMgPSBjb2xvclN0b3BzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgUmFkaWFsQXhpYWwucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SVI6IGZ1bmN0aW9uIFJhZGlhbEF4aWFsX2dldElSKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb29yZHNBcnIgPSB0aGlzLmNvb3Jkc0FycjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hhZGluZ1R5cGUgPSB0aGlzLnNoYWRpbmdUeXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlLCBwMCwgcDEsIHIwLCByMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaGFkaW5nVHlwZSA9PT0gU2hhZGluZ1R5cGUuQVhJQUwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcDAgPSBbY29vcmRzQXJyWzBdLCBjb29yZHNBcnJbMV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMSA9IFtjb29yZHNBcnJbMl0sIGNvb3Jkc0FyclszXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIwID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcjEgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gJ2F4aWFsJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNoYWRpbmdUeXBlID09PSBTaGFkaW5nVHlwZS5SQURJQUwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcDAgPSBbY29vcmRzQXJyWzBdLCBjb29yZHNBcnJbMV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMSA9IFtjb29yZHNBcnJbM10sIGNvb3Jkc0Fycls0XV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIwID0gY29vcmRzQXJyWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByMSA9IGNvb3Jkc0Fycls1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICdyYWRpYWwnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJnZXRQYXR0ZXJuIHR5cGUgdW5rbm93bjogXCIuY29uY2F0KHNoYWRpbmdUeXBlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdHJpeCA9IHRoaXMubWF0cml4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdHJpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMCA9IF91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0ocDAsIG1hdHJpeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAxID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShwMSwgbWF0cml4KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hhZGluZ1R5cGUgPT09IFNoYWRpbmdUeXBlLlJBRElBTCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlID0gX3V0aWwuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZShtYXRyaXgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByMCAqPSBzY2FsZVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIxICo9IHNjYWxlWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsnUmFkaWFsQXhpYWwnLCB0eXBlLCB0aGlzLmNvbG9yU3RvcHMsIHAwLCBwMSwgcjAsIHIxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhZGlhbEF4aWFsO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIFNoYWRpbmdzLk1lc2ggPSBmdW5jdGlvbiBNZXNoQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gTWVzaFN0cmVhbVJlYWRlcihzdHJlYW0sIGNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1Db21wcyA9IGNvbnRleHQubnVtQ29tcHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRtcENvbXBzQnVmID0gbmV3IEZsb2F0MzJBcnJheShudW1Db21wcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3NOdW1Db21wcyA9IGNvbnRleHQuY29sb3JTcGFjZS5udW1Db21wcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG1wQ3NDb21wc0J1ZiA9IGNvbnRleHQuY29sb3JGbiA/IG5ldyBGbG9hdDMyQXJyYXkoY3NOdW1Db21wcykgOiB0aGlzLnRtcENvbXBzQnVmO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgTWVzaFN0cmVhbVJlYWRlci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgaGFzRGF0YSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdHJlYW0uZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVhbS5wb3MgPCB0aGlzLnN0cmVhbS5lbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYnVmZmVyTGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEJ5dGUgPSB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEJ5dGUgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IG5leHRCeXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRCaXRzOiBmdW5jdGlvbiBNZXNoU3RyZWFtUmVhZGVyX3JlYWRCaXRzKG4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5idWZmZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPT09IDMyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJMZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpIDw8IDI0IHwgdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpIDw8IDE2IHwgdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpIDw8IDggfCB0aGlzLnN0cmVhbS5nZXRCeXRlKCkpID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVyIDw8IDI0IHwgdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpIDw8IDE2IHwgdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpIDw8IDggfCB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0Qnl0ZSA9IHRoaXMuc3RyZWFtLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBuZXh0Qnl0ZSAmICgxIDw8IGJ1ZmZlckxlbmd0aCkgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGJ1ZmZlciA8PCA4IC0gYnVmZmVyTGVuZ3RoIHwgKG5leHRCeXRlICYgMHhGRikgPj4gYnVmZmVyTGVuZ3RoKSA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9PT0gOCAmJiBidWZmZXJMZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYnVmZmVyTGVuZ3RoIDwgbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBidWZmZXIgPDwgOCB8IHRoaXMuc3RyZWFtLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyTGVuZ3RoICs9IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyTGVuZ3RoIC09IG47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBidWZmZXIgJiAoMSA8PCBidWZmZXJMZW5ndGgpIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyID4+IGJ1ZmZlckxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbjogZnVuY3Rpb24gTWVzaFN0cmVhbVJlYWRlcl9hbGlnbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJMZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRGbGFnOiBmdW5jdGlvbiBNZXNoU3RyZWFtUmVhZGVyX3JlYWRGbGFnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlYWRCaXRzKHRoaXMuY29udGV4dC5iaXRzUGVyRmxhZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENvb3JkaW5hdGU6IGZ1bmN0aW9uIE1lc2hTdHJlYW1SZWFkZXJfcmVhZENvb3JkaW5hdGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdHNQZXJDb29yZGluYXRlID0gdGhpcy5jb250ZXh0LmJpdHNQZXJDb29yZGluYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4aSA9IHRoaXMucmVhZEJpdHMoYml0c1BlckNvb3JkaW5hdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5aSA9IHRoaXMucmVhZEJpdHMoYml0c1BlckNvb3JkaW5hdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvZGUgPSB0aGlzLmNvbnRleHQuZGVjb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY2FsZSA9IGJpdHNQZXJDb29yZGluYXRlIDwgMzIgPyAxIC8gKCgxIDw8IGJpdHNQZXJDb29yZGluYXRlKSAtIDEpIDogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3hpICogc2NhbGUgKiAoZGVjb2RlWzFdIC0gZGVjb2RlWzBdKSArIGRlY29kZVswXSwgeWkgKiBzY2FsZSAqIChkZWNvZGVbM10gLSBkZWNvZGVbMl0pICsgZGVjb2RlWzJdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkQ29tcG9uZW50czogZnVuY3Rpb24gTWVzaFN0cmVhbVJlYWRlcl9yZWFkQ29tcG9uZW50cygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtQ29tcHMgPSB0aGlzLmNvbnRleHQubnVtQ29tcHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdHNQZXJDb21wb25lbnQgPSB0aGlzLmNvbnRleHQuYml0c1BlckNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSBiaXRzUGVyQ29tcG9uZW50IDwgMzIgPyAxIC8gKCgxIDw8IGJpdHNQZXJDb21wb25lbnQpIC0gMSkgOiAyLjMyODMwNjQzNjUzODY5NjNlLTEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvZGUgPSB0aGlzLmNvbnRleHQuZGVjb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnRzID0gdGhpcy50bXBDb21wc0J1ZjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gNDsgaSA8IG51bUNvbXBzOyBpKyssIGogKz0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2kgPSB0aGlzLnJlYWRCaXRzKGJpdHNQZXJDb21wb25lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzW2ldID0gY2kgKiBzY2FsZSAqIChkZWNvZGVbaiArIDFdIC0gZGVjb2RlW2pdKSArIGRlY29kZVtqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSB0aGlzLnRtcENzQ29tcHNCdWY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LmNvbG9yRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNvbG9yRm4oY29tcG9uZW50cywgMCwgY29sb3IsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuY29sb3JTcGFjZS5nZXRSZ2IoY29sb3IsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlY29kZVR5cGU0U2hhZGluZyhtZXNoLCByZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb29yZHMgPSBtZXNoLmNvb3JkcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnMgPSBtZXNoLmNvbG9ycztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcGVyYXRvcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnRpY2VzTGVmdCA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIuaGFzRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmID0gcmVhZGVyLnJlYWRGbGFnKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvb3JkID0gcmVhZGVyLnJlYWRDb29yZGluYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gcmVhZGVyLnJlYWRDb21wb25lbnRzKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVydGljZXNMZWZ0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAgPD0gZiAmJiBmIDw9IDIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1Vua25vd24gdHlwZTQgZmxhZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljZXNMZWZ0ID0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzLnB1c2gocHNbcHMubGVuZ3RoIC0gMl0sIHBzW3BzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNlc0xlZnQgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHMucHVzaChwc1twcy5sZW5ndGggLSAzXSwgcHNbcHMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzTGVmdCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcnMucHVzaChmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcy5wdXNoKGNvb3Jkcy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3Jkcy5wdXNoKGNvb3JkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnMucHVzaChjb2xvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljZXNMZWZ0LS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLmFsaWduKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc2guZmlndXJlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndHJpYW5nbGVzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHM6IG5ldyBJbnQzMkFycmF5KHBzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnM6IG5ldyBJbnQzMkFycmF5KHBzKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWNvZGVUeXBlNVNoYWRpbmcobWVzaCwgcmVhZGVyLCB2ZXJ0aWNlc1BlclJvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvb3JkcyA9IG1lc2guY29vcmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9ycyA9IG1lc2guY29sb3JzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIuaGFzRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb29yZCA9IHJlYWRlci5yZWFkQ29vcmRpbmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IHJlYWRlci5yZWFkQ29tcG9uZW50cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzLnB1c2goY29vcmRzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzLnB1c2goY29vcmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ycy5wdXNoKGNvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5maWd1cmVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsYXR0aWNlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHM6IG5ldyBJbnQzMkFycmF5KHBzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnM6IG5ldyBJbnQzMkFycmF5KHBzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNlc1BlclJvdzogdmVydGljZXNQZXJSb3dcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIE1JTl9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5UID0gMztcbiAgICAgICAgICAgICAgICAgICAgdmFyIE1BWF9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5UID0gMjA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBUUklBTkdMRV9ERU5TSVRZID0gMjA7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGdldEIgPSBmdW5jdGlvbiBnZXRCQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJ1aWxkQihjb3VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsdXQgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBpIC8gY291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0XyA9IDEgLSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdXQucHVzaChuZXcgRmxvYXQzMkFycmF5KFt0XyAqIHRfICogdF8sIDMgKiB0ICogdF8gKiB0XywgMyAqIHQgKiB0ICogdF8sIHQgKiB0ICogdF0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbHV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FjaGUgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBnZXRCKGNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWNoZVtjb3VudF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVbY291bnRdID0gYnVpbGRCKGNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVbY291bnRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJ1aWxkRmlndXJlRnJvbVBhdGNoKG1lc2gsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlndXJlID0gbWVzaC5maWd1cmVzW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKGZpZ3VyZS50eXBlID09PSAncGF0Y2gnLCAnVW5leHBlY3RlZCBwYXRjaCBtZXNoIGZpZ3VyZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvb3JkcyA9IG1lc2guY29vcmRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ycyA9IG1lc2guY29sb3JzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBpID0gZmlndXJlLmNvb3JkcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaSA9IGZpZ3VyZS5jb2xvcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlndXJlTWluWCA9IE1hdGgubWluKGNvb3Jkc1twaVswXV1bMF0sIGNvb3Jkc1twaVszXV1bMF0sIGNvb3Jkc1twaVsxMl1dWzBdLCBjb29yZHNbcGlbMTVdXVswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlndXJlTWluWSA9IE1hdGgubWluKGNvb3Jkc1twaVswXV1bMV0sIGNvb3Jkc1twaVszXV1bMV0sIGNvb3Jkc1twaVsxMl1dWzFdLCBjb29yZHNbcGlbMTVdXVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlndXJlTWF4WCA9IE1hdGgubWF4KGNvb3Jkc1twaVswXV1bMF0sIGNvb3Jkc1twaVszXV1bMF0sIGNvb3Jkc1twaVsxMl1dWzBdLCBjb29yZHNbcGlbMTVdXVswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlndXJlTWF4WSA9IE1hdGgubWF4KGNvb3Jkc1twaVswXV1bMV0sIGNvb3Jkc1twaVszXV1bMV0sIGNvb3Jkc1twaVsxMl1dWzFdLCBjb29yZHNbcGlbMTVdXVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BsaXRYQnkgPSBNYXRoLmNlaWwoKGZpZ3VyZU1heFggLSBmaWd1cmVNaW5YKSAqIFRSSUFOR0xFX0RFTlNJVFkgLyAobWVzaC5ib3VuZHNbMl0gLSBtZXNoLmJvdW5kc1swXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXRYQnkgPSBNYXRoLm1heChNSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCwgTWF0aC5taW4oTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsIHNwbGl0WEJ5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BsaXRZQnkgPSBNYXRoLmNlaWwoKGZpZ3VyZU1heFkgLSBmaWd1cmVNaW5ZKSAqIFRSSUFOR0xFX0RFTlNJVFkgLyAobWVzaC5ib3VuZHNbM10gLSBtZXNoLmJvdW5kc1sxXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXRZQnkgPSBNYXRoLm1heChNSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCwgTWF0aC5taW4oTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsIHNwbGl0WUJ5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmVydGljZXNQZXJSb3cgPSBzcGxpdFhCeSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlndXJlQ29vcmRzID0gbmV3IEludDMyQXJyYXkoKHNwbGl0WUJ5ICsgMSkgKiB2ZXJ0aWNlc1BlclJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlndXJlQ29sb3JzID0gbmV3IEludDMyQXJyYXkoKHNwbGl0WUJ5ICsgMSkgKiB2ZXJ0aWNlc1BlclJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgayA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2wgPSBuZXcgVWludDhBcnJheSgzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjciA9IG5ldyBVaW50OEFycmF5KDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMwID0gY29sb3JzW2NpWzBdXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMSA9IGNvbG9yc1tjaVsxXV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgPSBjb2xvcnNbY2lbMl1dLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMzID0gY29sb3JzW2NpWzNdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiUm93ID0gZ2V0QihzcGxpdFlCeSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYkNvbCA9IGdldEIoc3BsaXRYQnkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPD0gc3BsaXRZQnk7IHJvdysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xbMF0gPSAoYzBbMF0gKiAoc3BsaXRZQnkgLSByb3cpICsgYzJbMF0gKiByb3cpIC8gc3BsaXRZQnkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsWzFdID0gKGMwWzFdICogKHNwbGl0WUJ5IC0gcm93KSArIGMyWzFdICogcm93KSAvIHNwbGl0WUJ5IHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbFsyXSA9IChjMFsyXSAqIChzcGxpdFlCeSAtIHJvdykgKyBjMlsyXSAqIHJvdykgLyBzcGxpdFlCeSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JbMF0gPSAoYzFbMF0gKiAoc3BsaXRZQnkgLSByb3cpICsgYzNbMF0gKiByb3cpIC8gc3BsaXRZQnkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyWzFdID0gKGMxWzFdICogKHNwbGl0WUJ5IC0gcm93KSArIGMzWzFdICogcm93KSAvIHNwbGl0WUJ5IHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjclsyXSA9IChjMVsyXSAqIChzcGxpdFlCeSAtIHJvdykgKyBjM1syXSAqIHJvdykgLyBzcGxpdFlCeSB8IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjb2wgPSAwOyBjb2wgPD0gc3BsaXRYQnk7IGNvbCsrLCBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyb3cgPT09IDAgfHwgcm93ID09PSBzcGxpdFlCeSkgJiYgKGNvbCA9PT0gMCB8fCBjb2wgPT09IHNwbGl0WEJ5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHEgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IDM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPD0gMzsgaisrLCBxKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IGJSb3dbcm93XVtpXSAqIGJDb2xbY29sXVtqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IGNvb3Jkc1twaVtxXV1bMF0gKiBtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgKz0gY29vcmRzW3BpW3FdXVsxXSAqIG07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWd1cmVDb29yZHNba10gPSBjb29yZHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHMucHVzaChbeCwgeV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWd1cmVDb2xvcnNba10gPSBjb2xvcnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3Q29sb3IgPSBuZXcgVWludDhBcnJheSgzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29sb3JbMF0gPSAoY2xbMF0gKiAoc3BsaXRYQnkgLSBjb2wpICsgY3JbMF0gKiBjb2wpIC8gc3BsaXRYQnkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDb2xvclsxXSA9IChjbFsxXSAqIChzcGxpdFhCeSAtIGNvbCkgKyBjclsxXSAqIGNvbCkgLyBzcGxpdFhCeSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbG9yWzJdID0gKGNsWzJdICogKHNwbGl0WEJ5IC0gY29sKSArIGNyWzJdICogY29sKSAvIHNwbGl0WEJ5IHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzLnB1c2gobmV3Q29sb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZmlndXJlQ29vcmRzWzBdID0gcGlbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWd1cmVDb2xvcnNbMF0gPSBjaVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZ3VyZUNvb3Jkc1tzcGxpdFhCeV0gPSBwaVszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZ3VyZUNvbG9yc1tzcGxpdFhCeV0gPSBjaVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZ3VyZUNvb3Jkc1t2ZXJ0aWNlc1BlclJvdyAqIHNwbGl0WUJ5XSA9IHBpWzEyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZ3VyZUNvbG9yc1t2ZXJ0aWNlc1BlclJvdyAqIHNwbGl0WUJ5XSA9IGNpWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlndXJlQ29vcmRzW3ZlcnRpY2VzUGVyUm93ICogc3BsaXRZQnkgKyBzcGxpdFhCeV0gPSBwaVsxNV07XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWd1cmVDb2xvcnNbdmVydGljZXNQZXJSb3cgKiBzcGxpdFlCeSArIHNwbGl0WEJ5XSA9IGNpWzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5maWd1cmVzW2luZGV4XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbGF0dGljZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzOiBmaWd1cmVDb29yZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzOiBmaWd1cmVDb2xvcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljZXNQZXJSb3c6IHZlcnRpY2VzUGVyUm93XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlVHlwZTZTaGFkaW5nKG1lc2gsIHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvb3JkcyA9IG1lc2guY29vcmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9ycyA9IG1lc2guY29sb3JzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBzID0gbmV3IEludDMyQXJyYXkoMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNzID0gbmV3IEludDMyQXJyYXkoNCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIuaGFzRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmID0gcmVhZGVyLnJlYWRGbGFnKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwIDw9IGYgJiYgZiA8PSAzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1Vua25vd24gdHlwZTYgZmxhZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBpaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGkgPSBjb29yZHMubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBmICE9PSAwID8gOCA6IDEyOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHMucHVzaChyZWFkZXIucmVhZENvb3JkaW5hdGUoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNpID0gY29sb3JzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gZiAhPT0gMCA/IDIgOiA0OyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnMucHVzaChyZWFkZXIucmVhZENvbXBvbmVudHMoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTJdID0gcGkgKyAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTNdID0gcGkgKyA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTRdID0gcGkgKyA1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTVdID0gcGkgKyA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbOF0gPSBwaSArIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxMV0gPSBwaSArIDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s0XSA9IHBpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzddID0gcGkgKyA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMF0gPSBwaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzFdID0gcGkgKyAxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzJdID0gcGkgKyAxMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzNdID0gcGkgKyA5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NbMl0gPSBjaSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1szXSA9IGNpICsgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzWzBdID0gY2k7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1sxXSA9IGNpICsgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDEgPSBwc1sxMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAyID0gcHNbMTNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMyA9IHBzWzE0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDQgPSBwc1sxNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxMl0gPSB0bXA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTNdID0gcGkgKyAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTRdID0gcGkgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTVdID0gcGkgKyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbOF0gPSB0bXAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTFdID0gcGkgKyAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbNF0gPSB0bXAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbN10gPSBwaSArIDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1swXSA9IHRtcDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxXSA9IHBpICsgNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzJdID0gcGkgKyA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbM10gPSBwaSArIDU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAxID0gY3NbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAyID0gY3NbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1syXSA9IHRtcDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1szXSA9IGNpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NbMF0gPSB0bXAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NbMV0gPSBjaSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAxID0gcHNbMTVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMiA9IHBzWzExXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzEyXSA9IHBzWzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTNdID0gcGkgKyAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTRdID0gcGkgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTVdID0gcGkgKyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbOF0gPSBwc1s3XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzExXSA9IHBpICsgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzRdID0gdG1wMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzddID0gcGkgKyA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMF0gPSB0bXAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMV0gPSBwaSArIDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1syXSA9IHBpICsgNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzNdID0gcGkgKyA1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMSA9IGNzWzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NbMl0gPSBjc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzWzNdID0gY2k7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1swXSA9IHRtcDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1sxXSA9IGNpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzEyXSA9IHBzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTNdID0gcGkgKyAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTRdID0gcGkgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTVdID0gcGkgKyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbOF0gPSBwc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzExXSA9IHBpICsgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzRdID0gcHNbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s3XSA9IHBpICsgNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzBdID0gcHNbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxXSA9IHBpICsgNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzJdID0gcGkgKyA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbM10gPSBwaSArIDU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1syXSA9IGNzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NbM10gPSBjaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzWzBdID0gY3NbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1sxXSA9IGNpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzVdID0gY29vcmRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHMucHVzaChbKC00ICogY29vcmRzW3BzWzBdXVswXSAtIGNvb3Jkc1twc1sxNV1dWzBdICsgNiAqIChjb29yZHNbcHNbNF1dWzBdICsgY29vcmRzW3BzWzFdXVswXSkgLSAyICogKGNvb3Jkc1twc1sxMl1dWzBdICsgY29vcmRzW3BzWzNdXVswXSkgKyAzICogKGNvb3Jkc1twc1sxM11dWzBdICsgY29vcmRzW3BzWzddXVswXSkpIC8gOSwgKC00ICogY29vcmRzW3BzWzBdXVsxXSAtIGNvb3Jkc1twc1sxNV1dWzFdICsgNiAqIChjb29yZHNbcHNbNF1dWzFdICsgY29vcmRzW3BzWzFdXVsxXSkgLSAyICogKGNvb3Jkc1twc1sxMl1dWzFdICsgY29vcmRzW3BzWzNdXVsxXSkgKyAzICogKGNvb3Jkc1twc1sxM11dWzFdICsgY29vcmRzW3BzWzddXVsxXSkpIC8gOV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzZdID0gY29vcmRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHMucHVzaChbKC00ICogY29vcmRzW3BzWzNdXVswXSAtIGNvb3Jkc1twc1sxMl1dWzBdICsgNiAqIChjb29yZHNbcHNbMl1dWzBdICsgY29vcmRzW3BzWzddXVswXSkgLSAyICogKGNvb3Jkc1twc1swXV1bMF0gKyBjb29yZHNbcHNbMTVdXVswXSkgKyAzICogKGNvb3Jkc1twc1s0XV1bMF0gKyBjb29yZHNbcHNbMTRdXVswXSkpIC8gOSwgKC00ICogY29vcmRzW3BzWzNdXVsxXSAtIGNvb3Jkc1twc1sxMl1dWzFdICsgNiAqIChjb29yZHNbcHNbMl1dWzFdICsgY29vcmRzW3BzWzddXVsxXSkgLSAyICogKGNvb3Jkc1twc1swXV1bMV0gKyBjb29yZHNbcHNbMTVdXVsxXSkgKyAzICogKGNvb3Jkc1twc1s0XV1bMV0gKyBjb29yZHNbcHNbMTRdXVsxXSkpIC8gOV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzldID0gY29vcmRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHMucHVzaChbKC00ICogY29vcmRzW3BzWzEyXV1bMF0gLSBjb29yZHNbcHNbM11dWzBdICsgNiAqIChjb29yZHNbcHNbOF1dWzBdICsgY29vcmRzW3BzWzEzXV1bMF0pIC0gMiAqIChjb29yZHNbcHNbMF1dWzBdICsgY29vcmRzW3BzWzE1XV1bMF0pICsgMyAqIChjb29yZHNbcHNbMTFdXVswXSArIGNvb3Jkc1twc1sxXV1bMF0pKSAvIDksICgtNCAqIGNvb3Jkc1twc1sxMl1dWzFdIC0gY29vcmRzW3BzWzNdXVsxXSArIDYgKiAoY29vcmRzW3BzWzhdXVsxXSArIGNvb3Jkc1twc1sxM11dWzFdKSAtIDIgKiAoY29vcmRzW3BzWzBdXVsxXSArIGNvb3Jkc1twc1sxNV1dWzFdKSArIDMgKiAoY29vcmRzW3BzWzExXV1bMV0gKyBjb29yZHNbcHNbMV1dWzFdKSkgLyA5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTBdID0gY29vcmRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHMucHVzaChbKC00ICogY29vcmRzW3BzWzE1XV1bMF0gLSBjb29yZHNbcHNbMF1dWzBdICsgNiAqIChjb29yZHNbcHNbMTFdXVswXSArIGNvb3Jkc1twc1sxNF1dWzBdKSAtIDIgKiAoY29vcmRzW3BzWzEyXV1bMF0gKyBjb29yZHNbcHNbM11dWzBdKSArIDMgKiAoY29vcmRzW3BzWzJdXVswXSArIGNvb3Jkc1twc1s4XV1bMF0pKSAvIDksICgtNCAqIGNvb3Jkc1twc1sxNV1dWzFdIC0gY29vcmRzW3BzWzBdXVsxXSArIDYgKiAoY29vcmRzW3BzWzExXV1bMV0gKyBjb29yZHNbcHNbMTRdXVsxXSkgLSAyICogKGNvb3Jkc1twc1sxMl1dWzFdICsgY29vcmRzW3BzWzNdXVsxXSkgKyAzICogKGNvb3Jkc1twc1syXV1bMV0gKyBjb29yZHNbcHNbOF1dWzFdKSkgLyA5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5maWd1cmVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAncGF0Y2gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHM6IG5ldyBJbnQzMkFycmF5KHBzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzOiBuZXcgSW50MzJBcnJheShjcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlY29kZVR5cGU3U2hhZGluZyhtZXNoLCByZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb29yZHMgPSBtZXNoLmNvb3JkcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnMgPSBtZXNoLmNvbG9ycztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcyA9IG5ldyBJbnQzMkFycmF5KDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjcyA9IG5ldyBJbnQzMkFycmF5KDQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLmhhc0RhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZiA9IHJlYWRlci5yZWFkRmxhZygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCA8PSBmICYmIGYgPD0gMykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdVbmtub3duIHR5cGU3IGZsYWcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaWk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBpID0gY29vcmRzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gZiAhPT0gMCA/IDEyIDogMTY7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3Jkcy5wdXNoKHJlYWRlci5yZWFkQ29vcmRpbmF0ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2kgPSBjb2xvcnMubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBmICE9PSAwID8gMiA6IDQ7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ycy5wdXNoKHJlYWRlci5yZWFkQ29tcG9uZW50cygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wMSwgdG1wMiwgdG1wMywgdG1wNDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxMl0gPSBwaSArIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxM10gPSBwaSArIDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxNF0gPSBwaSArIDU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxNV0gPSBwaSArIDY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s4XSA9IHBpICsgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzldID0gcGkgKyAxMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzEwXSA9IHBpICsgMTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxMV0gPSBwaSArIDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s0XSA9IHBpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzVdID0gcGkgKyAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzZdID0gcGkgKyAxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzddID0gcGkgKyA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMF0gPSBwaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzFdID0gcGkgKyAxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzJdID0gcGkgKyAxMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzNdID0gcGkgKyA5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NbMl0gPSBjaSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1szXSA9IGNpICsgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzWzBdID0gY2k7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1sxXSA9IGNpICsgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDEgPSBwc1sxMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAyID0gcHNbMTNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMyA9IHBzWzE0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDQgPSBwc1sxNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxMl0gPSB0bXA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTNdID0gcGkgKyAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTRdID0gcGkgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTVdID0gcGkgKyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbOF0gPSB0bXAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbOV0gPSBwaSArIDk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxMF0gPSBwaSArIDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTFdID0gcGkgKyAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbNF0gPSB0bXAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbNV0gPSBwaSArIDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s2XSA9IHBpICsgMTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s3XSA9IHBpICsgNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzBdID0gdG1wMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzFdID0gcGkgKyA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMl0gPSBwaSArIDY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1szXSA9IHBpICsgNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDEgPSBjc1syXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDIgPSBjc1szXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzWzJdID0gdG1wMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzWzNdID0gY2k7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1swXSA9IHRtcDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1sxXSA9IGNpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDEgPSBwc1sxNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAyID0gcHNbMTFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTJdID0gcHNbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxM10gPSBwaSArIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxNF0gPSBwaSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxNV0gPSBwaSArIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s4XSA9IHBzWzddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbOV0gPSBwaSArIDk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxMF0gPSBwaSArIDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTFdID0gcGkgKyAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbNF0gPSB0bXAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbNV0gPSBwaSArIDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s2XSA9IHBpICsgMTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s3XSA9IHBpICsgNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzBdID0gdG1wMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzFdID0gcGkgKyA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMl0gPSBwaSArIDY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1szXSA9IHBpICsgNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDEgPSBjc1szXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzWzJdID0gY3NbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1szXSA9IGNpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NbMF0gPSB0bXAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NbMV0gPSBjaSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxMl0gPSBwc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzEzXSA9IHBpICsgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzE0XSA9IHBpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzE1XSA9IHBpICsgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzhdID0gcHNbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s5XSA9IHBpICsgOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzEwXSA9IHBpICsgMTA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxMV0gPSBwaSArIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s0XSA9IHBzWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbNV0gPSBwaSArIDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s2XSA9IHBpICsgMTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s3XSA9IHBpICsgNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzBdID0gcHNbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxXSA9IHBpICsgNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzJdID0gcGkgKyA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbM10gPSBwaSArIDU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1syXSA9IGNzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NbM10gPSBjaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzWzBdID0gY3NbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1sxXSA9IGNpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2guZmlndXJlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3BhdGNoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzOiBuZXcgSW50MzJBcnJheShwcyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yczogbmV3IEludDMyQXJyYXkoY3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB1cGRhdGVCb3VuZHMobWVzaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1pblggPSBtZXNoLmNvb3Jkc1swXVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5ZID0gbWVzaC5jb29yZHNbMF1bMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4WCA9IG1pblgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4WSA9IG1pblk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxLCBpaSA9IG1lc2guY29vcmRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IG1lc2guY29vcmRzW2ldWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gbWVzaC5jb29yZHNbaV1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluWCA9IG1pblggPiB4ID8geCA6IG1pblg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluWSA9IG1pblkgPiB5ID8geSA6IG1pblk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4WCA9IG1heFggPCB4ID8geCA6IG1heFg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4WSA9IG1heFkgPCB5ID8geSA6IG1heFk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc2guYm91bmRzID0gW21pblgsIG1pblksIG1heFgsIG1heFldO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcGFja0RhdGEobWVzaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIGlpLCBqLCBqajtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb29yZHMgPSBtZXNoLmNvb3JkcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb29yZHNQYWNrZWQgPSBuZXcgRmxvYXQzMkFycmF5KGNvb3Jkcy5sZW5ndGggKiAyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaiA9IDAsIGlpID0gY29vcmRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHkgPSBjb29yZHNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzUGFja2VkW2orK10gPSB4eVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHNQYWNrZWRbaisrXSA9IHh5WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNoLmNvb3JkcyA9IGNvb3Jkc1BhY2tlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnMgPSBtZXNoLmNvbG9ycztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnNQYWNrZWQgPSBuZXcgVWludDhBcnJheShjb2xvcnMubGVuZ3RoICogMyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGogPSAwLCBpaSA9IGNvbG9ycy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBjb2xvcnNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzUGFja2VkW2orK10gPSBjWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1BhY2tlZFtqKytdID0gY1sxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNQYWNrZWRbaisrXSA9IGNbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc2guY29sb3JzID0gY29sb3JzUGFja2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpZ3VyZXMgPSBtZXNoLmZpZ3VyZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gZmlndXJlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpZ3VyZSA9IGZpZ3VyZXNbaV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzID0gZmlndXJlLmNvb3JkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3MgPSBmaWd1cmUuY29sb3JzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMCwgamogPSBwcy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzW2pdICo9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzW2pdICo9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gTWVzaChzdHJlYW0sIG1hdHJpeCwgeHJlZiwgcmVzLCBwZGZGdW5jdGlvbkZhY3RvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShzdHJlYW0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdNZXNoIGRhdGEgaXMgbm90IGEgc3RyZWFtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gc3RyZWFtLmRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdHJpeCA9IG1hdHJpeDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhZGluZ1R5cGUgPSBkaWN0LmdldCgnU2hhZGluZ1R5cGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZSA9ICdQYXR0ZXJuJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmJveCA9IGRpY3QuZ2V0QXJyYXkoJ0JCb3gnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjcyA9IGRpY3QuZ2V0KCdDb2xvclNwYWNlJywgJ0NTJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcyA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2UucGFyc2UoY3MsIHhyZWYsIHJlcywgcGRmRnVuY3Rpb25GYWN0b3J5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3MgPSBjcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFja2dyb3VuZCA9IGRpY3QuaGFzKCdCYWNrZ3JvdW5kJykgPyBjcy5nZXRSZ2IoZGljdC5nZXQoJ0JhY2tncm91bmQnKSwgMCkgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuT2JqID0gZGljdC5nZXQoJ0Z1bmN0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm4gPSBmbk9iaiA/IHBkZkZ1bmN0aW9uRmFjdG9yeS5jcmVhdGVGcm9tQXJyYXkoZm5PYmopIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29vcmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbG9ycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWd1cmVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVjb2RlQ29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzUGVyQ29vcmRpbmF0ZTogZGljdC5nZXQoJ0JpdHNQZXJDb29yZGluYXRlJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c1BlckNvbXBvbmVudDogZGljdC5nZXQoJ0JpdHNQZXJDb21wb25lbnQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzUGVyRmxhZzogZGljdC5nZXQoJ0JpdHNQZXJGbGFnJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlOiBkaWN0LmdldEFycmF5KCdEZWNvZGUnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvckZuOiBmbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlOiBjcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1Db21wczogZm4gPyAxIDogY3MubnVtQ29tcHNcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IE1lc2hTdHJlYW1SZWFkZXIoc3RyZWFtLCBkZWNvZGVDb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXRjaE1lc2ggPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLnNoYWRpbmdUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTaGFkaW5nVHlwZS5GUkVFX0ZPUk1fTUVTSDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlVHlwZTRTaGFkaW5nKHRoaXMsIHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTaGFkaW5nVHlwZS5MQVRUSUNFX0ZPUk1fTUVTSDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnRpY2VzUGVyUm93ID0gZGljdC5nZXQoJ1ZlcnRpY2VzUGVyUm93JykgfCAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJ0aWNlc1BlclJvdyA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignSW52YWxpZCBWZXJ0aWNlc1BlclJvdycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlVHlwZTVTaGFkaW5nKHRoaXMsIHJlYWRlciwgdmVydGljZXNQZXJSb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2hhZGluZ1R5cGUuQ09PTlNfUEFUQ0hfTUVTSDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlVHlwZTZTaGFkaW5nKHRoaXMsIHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoTWVzaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTaGFkaW5nVHlwZS5URU5TT1JfUEFUQ0hfTUVTSDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlVHlwZTdTaGFkaW5nKHRoaXMsIHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoTWVzaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnVW5zdXBwb3J0ZWQgbWVzaCB0eXBlLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGNoTWVzaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUJvdW5kcyh0aGlzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHRoaXMuZmlndXJlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkRmlndXJlRnJvbVBhdGNoKHRoaXMsIGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQm91bmRzKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFja0RhdGEodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBNZXNoLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldElSOiBmdW5jdGlvbiBNZXNoX2dldElSKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbJ01lc2gnLCB0aGlzLnNoYWRpbmdUeXBlLCB0aGlzLmNvb3JkcywgdGhpcy5jb2xvcnMsIHRoaXMuZmlndXJlcywgdGhpcy5ib3VuZHMsIHRoaXMubWF0cml4LCB0aGlzLmJib3gsIHRoaXMuYmFja2dyb3VuZF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNZXNoO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIFNoYWRpbmdzLkR1bW15ID0gZnVuY3Rpb24gRHVtbXlDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBEdW1teSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZSA9ICdQYXR0ZXJuJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIER1bW15LnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldElSOiBmdW5jdGlvbiBEdW1teV9nZXRJUigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWydEdW1teSddO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRHVtbXk7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0VGlsaW5nUGF0dGVybklSKG9wZXJhdG9yTGlzdCwgZGljdCwgYXJncykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF0cml4ID0gZGljdC5nZXRBcnJheSgnTWF0cml4Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGJib3ggPSBfdXRpbC5VdGlsLm5vcm1hbGl6ZVJlY3QoZGljdC5nZXRBcnJheSgnQkJveCcpKTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgeHN0ZXAgPSBkaWN0LmdldCgnWFN0ZXAnKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHlzdGVwID0gZGljdC5nZXQoJ1lTdGVwJyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwYWludFR5cGUgPSBkaWN0LmdldCgnUGFpbnRUeXBlJyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0aWxpbmdUeXBlID0gZGljdC5nZXQoJ1RpbGluZ1R5cGUnKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYmJveFsyXSAtIGJib3hbMF0gPT09IDAgfHwgYmJveFszXSAtIGJib3hbMV0gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgZ2V0VGlsaW5nUGF0dGVybklSIC9CQm94IGFycmF5OiBbXCIuY29uY2F0KGJib3gsIFwiXS5cIikpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsnVGlsaW5nUGF0dGVybicsIGFyZ3MsIG9wZXJhdG9yTGlzdCwgbWF0cml4LCBiYm94LCB4c3RlcCwgeXN0ZXAsIHBhaW50VHlwZSwgdGlsaW5nVHlwZV07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxODMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmJpZGkgPSBiaWRpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2KTtcblxuICAgICAgICAgICAgICAgIHZhciBiYXNlVHlwZXMgPSBbJ0JOJywgJ0JOJywgJ0JOJywgJ0JOJywgJ0JOJywgJ0JOJywgJ0JOJywgJ0JOJywgJ0JOJywgJ1MnLCAnQicsICdTJywgJ1dTJywgJ0InLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQicsICdCJywgJ0InLCAnUycsICdXUycsICdPTicsICdPTicsICdFVCcsICdFVCcsICdFVCcsICdPTicsICdPTicsICdPTicsICdPTicsICdPTicsICdFUycsICdDUycsICdFUycsICdDUycsICdDUycsICdFTicsICdFTicsICdFTicsICdFTicsICdFTicsICdFTicsICdFTicsICdFTicsICdFTicsICdFTicsICdDUycsICdPTicsICdPTicsICdPTicsICdPTicsICdPTicsICdPTicsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnT04nLCAnT04nLCAnT04nLCAnT04nLCAnT04nLCAnT04nLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ09OJywgJ09OJywgJ09OJywgJ09OJywgJ0JOJywgJ0JOJywgJ0JOJywgJ0JOJywgJ0JOJywgJ0JOJywgJ0InLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQ1MnLCAnT04nLCAnRVQnLCAnRVQnLCAnRVQnLCAnRVQnLCAnT04nLCAnT04nLCAnT04nLCAnT04nLCAnTCcsICdPTicsICdPTicsICdCTicsICdPTicsICdPTicsICdFVCcsICdFVCcsICdFTicsICdFTicsICdPTicsICdMJywgJ09OJywgJ09OJywgJ09OJywgJ0VOJywgJ0wnLCAnT04nLCAnT04nLCAnT04nLCAnT04nLCAnT04nLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ09OJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnT04nLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJ107XG4gICAgICAgICAgICAgICAgdmFyIGFyYWJpY1R5cGVzID0gWydBTicsICdBTicsICdBTicsICdBTicsICdBTicsICdBTicsICdPTicsICdPTicsICdBTCcsICdFVCcsICdFVCcsICdBTCcsICdDUycsICdBTCcsICdPTicsICdPTicsICdOU00nLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ0FMJywgJ0FMJywgJycsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdOU00nLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ05TTScsICdBTicsICdBTicsICdBTicsICdBTicsICdBTicsICdBTicsICdBTicsICdBTicsICdBTicsICdBTicsICdFVCcsICdBTicsICdBTicsICdBTCcsICdBTCcsICdBTCcsICdOU00nLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ0FOJywgJ09OJywgJ05TTScsICdOU00nLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ0FMJywgJ0FMJywgJ05TTScsICdOU00nLCAnT04nLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ0FMJywgJ0FMJywgJ0VOJywgJ0VOJywgJ0VOJywgJ0VOJywgJ0VOJywgJ0VOJywgJ0VOJywgJ0VOJywgJ0VOJywgJ0VOJywgJ0FMJywgJ0FMJywgJ0FMJywgJ0FMJywgJ0FMJywgJ0FMJ107XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc09kZChpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoaSAmIDEpICE9PSAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzRXZlbihpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoaSAmIDEpID09PSAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZpbmRVbmVxdWFsKGFyciwgc3RhcnQsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSBzdGFydCwgamogPSBhcnIubGVuZ3RoOyBqIDwgamo7ICsraikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFycltqXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gajtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBqO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNldFZhbHVlcyhhcnIsIHN0YXJ0LCBlbmQsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSBzdGFydDsgaiA8IGVuZDsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJbal0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJldmVyc2VWYWx1ZXMoYXJyLCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydCwgaiA9IGVuZCAtIDE7IGkgPCBqOyArK2ksIC0taikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBhcnJbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJbaV0gPSBhcnJbal07XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJbal0gPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlQmlkaVRleHQoc3RyLCBpc0xUUiwgdmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cjogc3RyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlyOiB2ZXJ0aWNhbCA/ICd0dGInIDogaXNMVFIgPyAnbHRyJyA6ICdydGwnXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGNoYXJzID0gW107XG4gICAgICAgICAgICAgICAgdmFyIHR5cGVzID0gW107XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBiaWRpKHN0ciwgc3RhcnRMZXZlbCwgdmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzTFRSID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0ckxlbmd0aCA9IHN0ci5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0ckxlbmd0aCA9PT0gMCB8fCB2ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUJpZGlUZXh0KHN0ciwgaXNMVFIsIHZlcnRpY2FsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNoYXJzLmxlbmd0aCA9IHN0ckxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdHlwZXMubGVuZ3RoID0gc3RyTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbnVtQmlkaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpLCBpaTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzW2ldID0gc3RyLmNoYXJBdChpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyQ29kZSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJUeXBlID0gJ0wnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPD0gMHgwMGZmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhclR5cGUgPSBiYXNlVHlwZXNbY2hhckNvZGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgweDA1OTAgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gMHgwNWY0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhclR5cGUgPSAnUic7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDB4MDYwMCA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSAweDA2ZmYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyVHlwZSA9IGFyYWJpY1R5cGVzW2NoYXJDb2RlICYgMHhmZl07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoYXJUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnQmlkaTogaW52YWxpZCBVbmljb2RlIGNoYXJhY3RlciAnICsgY2hhckNvZGUudG9TdHJpbmcoMTYpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDB4MDcwMCA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSAweDA4QUMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyVHlwZSA9ICdBTCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFyVHlwZSA9PT0gJ1InIHx8IGNoYXJUeXBlID09PSAnQUwnIHx8IGNoYXJUeXBlID09PSAnQU4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQmlkaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlc1tpXSA9IGNoYXJUeXBlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bUJpZGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTFRSID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVCaWRpVGV4dChzdHIsIGlzTFRSKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydExldmVsID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bUJpZGkgLyBzdHJMZW5ndGggPCAwLjMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xUUiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRMZXZlbCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTFRSID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRMZXZlbCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgbGV2ZWxzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0ckxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHNbaV0gPSBzdGFydExldmVsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSBpc09kZChzdGFydExldmVsKSA/ICdSJyA6ICdMJztcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNvciA9IGU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlb3IgPSBzb3I7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsYXN0VHlwZSA9IHNvcjtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlc1tpXSA9PT0gJ05TTScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlc1tpXSA9IGxhc3RUeXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VHlwZSA9IHR5cGVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbGFzdFR5cGUgPSBzb3I7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0O1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdHJMZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHR5cGVzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9PT0gJ0VOJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzW2ldID0gbGFzdFR5cGUgPT09ICdBTCcgPyAnQU4nIDogJ0VOJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodCA9PT0gJ1InIHx8IHQgPT09ICdMJyB8fCB0ID09PSAnQUwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFR5cGUgPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0ckxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ID0gdHlwZXNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID09PSAnQUwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXNbaV0gPSAnUic7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgc3RyTGVuZ3RoIC0gMTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZXNbaV0gPT09ICdFUycgJiYgdHlwZXNbaSAtIDFdID09PSAnRU4nICYmIHR5cGVzW2kgKyAxXSA9PT0gJ0VOJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzW2ldID0gJ0VOJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVzW2ldID09PSAnQ1MnICYmICh0eXBlc1tpIC0gMV0gPT09ICdFTicgfHwgdHlwZXNbaSAtIDFdID09PSAnQU4nKSAmJiB0eXBlc1tpICsgMV0gPT09IHR5cGVzW2kgLSAxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzW2ldID0gdHlwZXNbaSAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0ckxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZXNbaV0gPT09ICdFTicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgajtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IGkgLSAxOyBqID49IDA7IC0taikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZXNbal0gIT09ICdFVCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXNbal0gPSAnRU4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IGkgKyAxOyBqIDwgc3RyTGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVzW2pdICE9PSAnRVQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzW2pdID0gJ0VOJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB0eXBlc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPT09ICdXUycgfHwgdCA9PT0gJ0VTJyB8fCB0ID09PSAnRVQnIHx8IHQgPT09ICdDUycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlc1tpXSA9ICdPTic7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsYXN0VHlwZSA9IHNvcjtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB0eXBlc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPT09ICdFTicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlc1tpXSA9IGxhc3RUeXBlID09PSAnTCcgPyAnTCcgOiAnRU4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ID09PSAnUicgfHwgdCA9PT0gJ0wnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFR5cGUgPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0ckxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZXNbaV0gPT09ICdPTicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gZmluZFVuZXF1YWwodHlwZXMsIGkgKyAxLCAnT04nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmVmb3JlID0gc29yO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSA9IHR5cGVzW2kgLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWZ0ZXIgPSBlb3I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5kICsgMSA8IHN0ckxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciA9IHR5cGVzW2VuZCArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiZWZvcmUgIT09ICdMJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgPSAnUic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFmdGVyICE9PSAnTCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgPSAnUic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJlZm9yZSA9PT0gYWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWVzKHR5cGVzLCBpLCBlbmQsIGJlZm9yZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVuZCAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlc1tpXSA9PT0gJ09OJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzW2ldID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdHJMZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHR5cGVzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNFdmVuKGxldmVsc1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9PT0gJ1InKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsc1tpXSArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodCA9PT0gJ0FOJyB8fCB0ID09PSAnRU4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsc1tpXSArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPT09ICdMJyB8fCB0ID09PSAnQU4nIHx8IHQgPT09ICdFTicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzW2ldICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGhpZ2hlc3RMZXZlbCA9IC0xO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbG93ZXN0T2RkTGV2ZWwgPSA5OTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxldmVsO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gbGV2ZWxzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsID0gbGV2ZWxzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGlnaGVzdExldmVsIDwgbGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoZXN0TGV2ZWwgPSBsZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvd2VzdE9kZExldmVsID4gbGV2ZWwgJiYgaXNPZGQobGV2ZWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93ZXN0T2RkTGV2ZWwgPSBsZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV2ZWwgPSBoaWdoZXN0TGV2ZWw7IGxldmVsID49IGxvd2VzdE9kZExldmVsOyAtLWxldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSAtMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBsZXZlbHMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZXZlbHNbaV0gPCBsZXZlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZVZhbHVlcyhjaGFycywgc3RhcnQsIGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnQgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZVZhbHVlcyhjaGFycywgc3RhcnQsIGxldmVscy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBjaGFycy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2ggPSBjaGFyc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnPCcgfHwgY2ggPT09ICc+Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzW2ldID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlQmlkaVRleHQoY2hhcnMuam9pbignJyksIGlzTFRSKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE4NCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuZ2V0TWV0cmljcyA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ2V0TWV0cmljcyA9ICgwLCBfdXRpbC5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NvdXJpZXInXSA9IDYwMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ291cmllci1Cb2xkJ10gPSA2MDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NvdXJpZXItQm9sZE9ibGlxdWUnXSA9IDYwMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ291cmllci1PYmxpcXVlJ10gPSA2MDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0hlbHZldGljYSddID0gKDAsIF91dGlsLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NwYWNlJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydleGNsYW0nXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJsJ10gPSAzNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydudW1iZXJzaWduJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydkb2xsYXInXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcmNlbnQnXSA9IDg4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FtcGVyc2FuZCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVyaWdodCddID0gMjIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5sZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJlbnJpZ2h0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhc3RlcmlzayddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGx1cyddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29tbWEnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2h5cGhlbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVyaW9kJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzbGFzaCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnemVybyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0d28nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydmb3VyJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmaXZlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzaXgnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlaWdodCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbmluZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29sb24nXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NlbWljb2xvbiddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGVzcyddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXF1YWwnXSA9IDU4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXInXSA9IDU4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1ZXN0aW9uJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhdCddID0gMTAxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0EnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0InXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0MnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0QnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0UnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0YnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0cnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0gnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0knXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0onXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0snXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0wnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ00nXSA9IDgzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ04nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ08nXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1AnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1EnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1InXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1MnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1QnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1UnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1YnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1cnXSA9IDk0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1gnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1knXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1onXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRsZWZ0J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydiYWNrc2xhc2gnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRyaWdodCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXNjaWljaXJjdW0nXSA9IDQ2OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VuZGVyc2NvcmUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlbGVmdCddID0gMjIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZiddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaSddID0gMjIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaiddID0gMjIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnayddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbCddID0gMjIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbSddID0gODMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnciddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VsZWZ0J10gPSAzMzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydiYXInXSA9IDI2MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlcmlnaHQnXSA9IDMzNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FzY2lpdGlsZGUnXSA9IDU4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2V4Y2xhbWRvd24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NlbnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3N0ZXJsaW5nJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmcmFjdGlvbiddID0gMTY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneWVuJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmbG9yaW4nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NlY3Rpb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2N1cnJlbmN5J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZXNpbmdsZSddID0gMTkxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmxsZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydndWlsbGVtb3RsZWZ0J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydndWlsc2luZ2xsZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydndWlsc2luZ2xyaWdodCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZmknXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZsJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlbmRhc2gnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RhZ2dlciddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGFnZ2VyZGJsJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwZXJpb2RjZW50ZXJlZCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFyYWdyYXBoJ10gPSA1Mzc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydidWxsZXQnXSA9IDM1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3Rlc2luZ2xiYXNlJ10gPSAyMjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWRibGJhc2UnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJscmlnaHQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxsZW1vdHJpZ2h0J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlbGxpcHNpcyddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcnRob3VzYW5kJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVlc3Rpb25kb3duJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydncmF2ZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWN1dGUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NpcmN1bWZsZXgnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RpbGRlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtYWNyb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyZXZlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydkb3RhY2NlbnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RpZXJlc2lzJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyaW5nJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjZWRpbGxhJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydodW5nYXJ1bWxhdXQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29nb25layddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2Fyb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VtZGFzaCddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FFJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3JkZmVtaW5pbmUnXSA9IDM3MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xzbGFzaCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT3NsYXNoJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPRSddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29yZG1hc2N1bGluZSddID0gMzY1O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWUnXSA9IDg4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RvdGxlc3NpJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydsc2xhc2gnXSA9IDIyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29zbGFzaCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2UnXSA9IDk0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dlcm1hbmRibHMnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lkaWVyZXNpcyddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWFjdXRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhYnJldmUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VodW5nYXJ1bWxhdXQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VjYXJvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWWRpZXJlc2lzJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkaXZpZGUnXSA9IDU4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1lhY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQWNpcmN1bWZsZXgnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FhY3V0ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVWNpcmN1bWZsZXgnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3lhY3V0ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2NvbW1hYWNjZW50J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlY2lyY3VtZmxleCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVXJpbmcnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VkaWVyZXNpcyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYW9nb25layddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVWFjdXRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1b2dvbmVrJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFZGllcmVzaXMnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0Rjcm9hdCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29tbWFhY2NlbnQnXSA9IDI1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NvcHlyaWdodCddID0gNzM3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRW1hY3JvbiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2Nhcm9uJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhcmluZyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTmNvbW1hYWNjZW50J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsYWN1dGUnXSA9IDIyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FncmF2ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVGNvbW1hYWNjZW50J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydDYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2F0aWxkZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRWRvdGFjY2VudCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2Nhcm9uJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzY2VkaWxsYSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaWFjdXRlJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydsb3plbmdlJ10gPSA0NzE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydSY2Fyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0djb21tYWFjY2VudCddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndWNpcmN1bWZsZXgnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FjaXJjdW1mbGV4J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBbWFjcm9uJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyY2Fyb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NjZWRpbGxhJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydaZG90YWNjZW50J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUaG9ybiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT21hY3JvbiddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUmFjdXRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTYWN1dGUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RjYXJvbiddID0gNjQzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVW1hY3JvbiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndXJpbmcnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlc3VwZXJpb3InXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09ncmF2ZSddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQWdyYXZlJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBYnJldmUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ211bHRpcGx5J10gPSA1ODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1YWN1dGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1RjYXJvbiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFydGlhbGRpZmYnXSA9IDQ3NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3lkaWVyZXNpcyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTmFjdXRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpY2lyY3VtZmxleCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRWNpcmN1bWZsZXgnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FkaWVyZXNpcyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWRpZXJlc2lzJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjYWN1dGUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25hY3V0ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndW1hY3JvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTmNhcm9uJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydJYWN1dGUnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BsdXNtaW51cyddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJva2VuYmFyJ10gPSAyNjA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyZWdpc3RlcmVkJ10gPSA3Mzc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydHYnJldmUnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lkb3RhY2NlbnQnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3N1bW1hdGlvbiddID0gNjAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRWdyYXZlJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyYWN1dGUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29tYWNyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1phY3V0ZSddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWmNhcm9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydncmVhdGVyZXF1YWwnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0V0aCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQ2NlZGlsbGEnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xjb21tYWFjY2VudCddID0gMjIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGNhcm9uJ10gPSAzMTc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydlb2dvbmVrJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVb2dvbmVrJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBYWN1dGUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FkaWVyZXNpcyddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWdyYXZlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6YWN1dGUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2lvZ29uZWsnXSA9IDIyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09hY3V0ZSddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2FjdXRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhbWFjcm9uJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzYWN1dGUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2lkaWVyZXNpcyddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2NpcmN1bWZsZXgnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VncmF2ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRGVsdGEnXSA9IDYxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3Rob3JuJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0d29zdXBlcmlvciddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2RpZXJlc2lzJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtdSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaWdyYXZlJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvaHVuZ2FydW1sYXV0J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFb2dvbmVrJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkY3JvYXQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlcXVhcnRlcnMnXSA9IDgzNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1NjZWRpbGxhJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsY2Fyb24nXSA9IDI5OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0tjb21tYWFjY2VudCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTGFjdXRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0cmFkZW1hcmsnXSA9IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlZG90YWNjZW50J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydJZ3JhdmUnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0ltYWNyb24nXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xjYXJvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25laGFsZiddID0gODM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGVzc2VxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvY2lyY3VtZmxleCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbnRpbGRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVaHVuZ2FydW1sYXV0J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFYWN1dGUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VtYWNyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dicmV2ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lcXVhcnRlciddID0gODM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnU2Nhcm9uJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTY29tbWFhY2NlbnQnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09odW5nYXJ1bWxhdXQnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RlZ3JlZSddID0gNDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2dyYXZlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydDY2Fyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VncmF2ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmFkaWNhbCddID0gNDUzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRGNhcm9uJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyY29tbWFhY2NlbnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ050aWxkZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3RpbGRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydSY29tbWFhY2NlbnQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xjb21tYWFjY2VudCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQXRpbGRlJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBb2dvbmVrJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBcmluZyddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT3RpbGRlJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6ZG90YWNjZW50J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFY2Fyb24nXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lvZ29uZWsnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2tjb21tYWFjY2VudCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbWludXMnXSA9IDU4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0ljaXJjdW1mbGV4J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduY2Fyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3Rjb21tYWFjY2VudCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbG9naWNhbG5vdCddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2RpZXJlc2lzJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1ZGllcmVzaXMnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25vdGVxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydnY29tbWFhY2NlbnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2V0aCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnemNhcm9uJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduY29tbWFhY2NlbnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29uZXN1cGVyaW9yJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpbWFjcm9uJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFdXJvJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0WydIZWx2ZXRpY2EtQm9sZCddID0gKDAsIF91dGlsLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NwYWNlJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydleGNsYW0nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJsJ10gPSA0NzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydudW1iZXJzaWduJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydkb2xsYXInXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcmNlbnQnXSA9IDg4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FtcGVyc2FuZCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVyaWdodCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5sZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJlbnJpZ2h0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhc3RlcmlzayddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGx1cyddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29tbWEnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2h5cGhlbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVyaW9kJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzbGFzaCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnemVybyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0d28nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydmb3VyJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmaXZlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzaXgnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlaWdodCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbmluZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29sb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NlbWljb2xvbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGVzcyddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXF1YWwnXSA9IDU4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXInXSA9IDU4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1ZXN0aW9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhdCddID0gOTc1O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRyddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTSddID0gODMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTyddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUSddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUyddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnViddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVyddID0gOTQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldGxlZnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JhY2tzbGFzaCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldHJpZ2h0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhc2NpaWNpcmN1bSddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndW5kZXJzY29yZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVsZWZ0J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydiJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydnJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydoJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydqJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydrJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtJ10gPSA4ODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd2J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd3J10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd4J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd5J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFjZWxlZnQnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JhciddID0gMjgwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VyaWdodCddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXNjaWl0aWxkZSddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXhjbGFtZG93biddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2VudCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3RlcmxpbmcnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZyYWN0aW9uJ10gPSAxNjc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd5ZW4nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Zsb3JpbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2VjdGlvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY3VycmVuY3knXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3Rlc2luZ2xlJ10gPSAyMzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWRibGxlZnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxsZW1vdGxlZnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxzaW5nbGxlZnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxzaW5nbHJpZ2h0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmaSddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZmwnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VuZGFzaCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGFnZ2VyJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkYWdnZXJkYmwnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcmlvZGNlbnRlcmVkJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJhZ3JhcGgnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2J1bGxldCddID0gMzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVzaW5nbGJhc2UnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJsYmFzZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmxyaWdodCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3VpbGxlbW90cmlnaHQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VsbGlwc2lzJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVydGhvdXNhbmQnXSA9IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdWVzdGlvbmRvd24nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dyYXZlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhY3V0ZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2lyY3VtZmxleCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGlsZGUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ21hY3JvbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJldmUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RvdGFjY2VudCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGllcmVzaXMnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JpbmcnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NlZGlsbGEnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2h1bmdhcnVtbGF1dCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2dvbmVrJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjYXJvbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZW1kYXNoJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQUUnXSA9IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvcmRmZW1pbmluZSddID0gMzcwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTHNsYXNoJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPc2xhc2gnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09FJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3JkbWFzY3VsaW5lJ10gPSAzNjU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhZSddID0gODg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZG90bGVzc2knXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xzbGFzaCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3NsYXNoJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZSddID0gOTQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ2VybWFuZGJscyddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWRpZXJlc2lzJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlYWN1dGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FicmV2ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndWh1bmdhcnVtbGF1dCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWNhcm9uJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydZZGllcmVzaXMnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RpdmlkZSddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWWFjdXRlJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBY2lyY3VtZmxleCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWFjdXRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVY2lyY3VtZmxleCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneWFjdXRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzY29tbWFhY2NlbnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VjaXJjdW1mbGV4J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVcmluZyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVWRpZXJlc2lzJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhb2dvbmVrJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VvZ29uZWsnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VkaWVyZXNpcyddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRGNyb2F0J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydjb21tYWFjY2VudCddID0gMjUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29weXJpZ2h0J10gPSA3Mzc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFbWFjcm9uJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjY2Fyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FyaW5nJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOY29tbWFhY2NlbnQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xhY3V0ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWdyYXZlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUY29tbWFhY2NlbnQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0NhY3V0ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXRpbGRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFZG90YWNjZW50J10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzY2Fyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NjZWRpbGxhJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpYWN1dGUnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xvemVuZ2UnXSA9IDQ5NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1JjYXJvbiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnR2NvbW1hYWNjZW50J10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1Y2lyY3VtZmxleCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWNpcmN1bWZsZXgnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FtYWNyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JjYXJvbiddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2NlZGlsbGEnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1pkb3RhY2NlbnQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Rob3JuJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPbWFjcm9uJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydSYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1NhY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGNhcm9uJ10gPSA3NDM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVbWFjcm9uJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1cmluZyddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVzdXBlcmlvciddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2dyYXZlJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBZ3JhdmUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FicmV2ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbXVsdGlwbHknXSA9IDU4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VhY3V0ZSddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVGNhcm9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJ0aWFsZGlmZiddID0gNDk0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneWRpZXJlc2lzJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ljaXJjdW1mbGV4J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFY2lyY3VtZmxleCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWRpZXJlc2lzJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlZGllcmVzaXMnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NhY3V0ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbmFjdXRlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1bWFjcm9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOY2Fyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lhY3V0ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGx1c21pbnVzJ10gPSA1ODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydicm9rZW5iYXInXSA9IDI4MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JlZ2lzdGVyZWQnXSA9IDczNztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0dicmV2ZSddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWRvdGFjY2VudCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3VtbWF0aW9uJ10gPSA2MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFZ3JhdmUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JhY3V0ZSddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb21hY3JvbiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWmFjdXRlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydaY2Fyb24nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXJlcXVhbCddID0gNTQ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRXRoJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydDY2VkaWxsYSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGNvbW1hYWNjZW50J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0Y2Fyb24nXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VvZ29uZWsnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VvZ29uZWsnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FhY3V0ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQWRpZXJlc2lzJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlZ3JhdmUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3phY3V0ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaW9nb25layddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2FjdXRlJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvYWN1dGUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FtYWNyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NhY3V0ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaWRpZXJlc2lzJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPY2lyY3VtZmxleCddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVWdyYXZlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydEZWx0YSddID0gNjEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhvcm4nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3R3b3N1cGVyaW9yJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPZGllcmVzaXMnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ211J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpZ3JhdmUnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29odW5nYXJ1bWxhdXQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VvZ29uZWsnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Rjcm9hdCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVxdWFydGVycyddID0gODM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnU2NlZGlsbGEnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xjYXJvbiddID0gNDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnS2NvbW1hYWNjZW50J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydMYWN1dGUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RyYWRlbWFyayddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Vkb3RhY2NlbnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lncmF2ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSW1hY3JvbiddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTGNhcm9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbmVoYWxmJ10gPSA4MzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsZXNzZXF1YWwnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29jaXJjdW1mbGV4J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydudGlsZGUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VodW5nYXJ1bWxhdXQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VhY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZW1hY3JvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ2JyZXZlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbmVxdWFydGVyJ10gPSA4MzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTY2Fyb24nXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Njb21tYWFjY2VudCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2h1bmdhcnVtbGF1dCddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGVncmVlJ10gPSA0MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZ3JhdmUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0NjYXJvbiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndWdyYXZlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyYWRpY2FsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydEY2Fyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3Jjb21tYWFjY2VudCddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTnRpbGRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvdGlsZGUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Jjb21tYWFjY2VudCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTGNvbW1hYWNjZW50J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBdGlsZGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FvZ29uZWsnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FyaW5nJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPdGlsZGUnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3pkb3RhY2NlbnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VjYXJvbiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSW9nb25layddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsna2NvbW1hYWNjZW50J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtaW51cyddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWNpcmN1bWZsZXgnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25jYXJvbiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGNvbW1hYWNjZW50J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydsb2dpY2Fsbm90J10gPSA1ODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZGllcmVzaXMnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VkaWVyZXNpcyddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbm90ZXF1YWwnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2djb21tYWFjY2VudCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXRoJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6Y2Fyb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25jb21tYWFjY2VudCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lc3VwZXJpb3InXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ltYWNyb24nXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0V1cm8nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0hlbHZldGljYS1Cb2xkT2JsaXF1ZSddID0gKDAsIF91dGlsLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NwYWNlJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydleGNsYW0nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJsJ10gPSA0NzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydudW1iZXJzaWduJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydkb2xsYXInXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcmNlbnQnXSA9IDg4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FtcGVyc2FuZCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVyaWdodCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5sZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJlbnJpZ2h0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhc3RlcmlzayddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGx1cyddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29tbWEnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2h5cGhlbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVyaW9kJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzbGFzaCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnemVybyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0d28nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydmb3VyJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmaXZlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzaXgnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlaWdodCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbmluZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29sb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NlbWljb2xvbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGVzcyddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXF1YWwnXSA9IDU4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXInXSA9IDU4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1ZXN0aW9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhdCddID0gOTc1O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRyddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTSddID0gODMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTyddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUSddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUyddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnViddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVyddID0gOTQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldGxlZnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JhY2tzbGFzaCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldHJpZ2h0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhc2NpaWNpcmN1bSddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndW5kZXJzY29yZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVsZWZ0J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydiJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydnJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydoJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydqJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydrJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtJ10gPSA4ODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd2J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd3J10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd4J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd5J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFjZWxlZnQnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JhciddID0gMjgwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VyaWdodCddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXNjaWl0aWxkZSddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXhjbGFtZG93biddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2VudCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3RlcmxpbmcnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZyYWN0aW9uJ10gPSAxNjc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd5ZW4nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Zsb3JpbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2VjdGlvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY3VycmVuY3knXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3Rlc2luZ2xlJ10gPSAyMzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWRibGxlZnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxsZW1vdGxlZnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxzaW5nbGxlZnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxzaW5nbHJpZ2h0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmaSddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZmwnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VuZGFzaCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGFnZ2VyJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkYWdnZXJkYmwnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcmlvZGNlbnRlcmVkJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJhZ3JhcGgnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2J1bGxldCddID0gMzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVzaW5nbGJhc2UnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJsYmFzZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmxyaWdodCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3VpbGxlbW90cmlnaHQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VsbGlwc2lzJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVydGhvdXNhbmQnXSA9IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdWVzdGlvbmRvd24nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dyYXZlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhY3V0ZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2lyY3VtZmxleCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGlsZGUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ21hY3JvbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJldmUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RvdGFjY2VudCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGllcmVzaXMnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JpbmcnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NlZGlsbGEnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2h1bmdhcnVtbGF1dCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2dvbmVrJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjYXJvbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZW1kYXNoJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQUUnXSA9IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvcmRmZW1pbmluZSddID0gMzcwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTHNsYXNoJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPc2xhc2gnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09FJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3JkbWFzY3VsaW5lJ10gPSAzNjU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhZSddID0gODg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZG90bGVzc2knXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xzbGFzaCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3NsYXNoJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZSddID0gOTQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ2VybWFuZGJscyddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWRpZXJlc2lzJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlYWN1dGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FicmV2ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndWh1bmdhcnVtbGF1dCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWNhcm9uJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydZZGllcmVzaXMnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RpdmlkZSddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWWFjdXRlJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBY2lyY3VtZmxleCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWFjdXRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVY2lyY3VtZmxleCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneWFjdXRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzY29tbWFhY2NlbnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VjaXJjdW1mbGV4J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVcmluZyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVWRpZXJlc2lzJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhb2dvbmVrJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VvZ29uZWsnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VkaWVyZXNpcyddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRGNyb2F0J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydjb21tYWFjY2VudCddID0gMjUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29weXJpZ2h0J10gPSA3Mzc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFbWFjcm9uJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjY2Fyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FyaW5nJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOY29tbWFhY2NlbnQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xhY3V0ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWdyYXZlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUY29tbWFhY2NlbnQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0NhY3V0ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXRpbGRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFZG90YWNjZW50J10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzY2Fyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NjZWRpbGxhJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpYWN1dGUnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xvemVuZ2UnXSA9IDQ5NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1JjYXJvbiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnR2NvbW1hYWNjZW50J10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1Y2lyY3VtZmxleCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWNpcmN1bWZsZXgnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FtYWNyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JjYXJvbiddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2NlZGlsbGEnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1pkb3RhY2NlbnQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Rob3JuJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPbWFjcm9uJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydSYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1NhY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGNhcm9uJ10gPSA3NDM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVbWFjcm9uJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1cmluZyddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVzdXBlcmlvciddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2dyYXZlJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBZ3JhdmUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FicmV2ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbXVsdGlwbHknXSA9IDU4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VhY3V0ZSddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVGNhcm9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJ0aWFsZGlmZiddID0gNDk0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneWRpZXJlc2lzJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ljaXJjdW1mbGV4J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFY2lyY3VtZmxleCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWRpZXJlc2lzJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlZGllcmVzaXMnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NhY3V0ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbmFjdXRlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1bWFjcm9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOY2Fyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lhY3V0ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGx1c21pbnVzJ10gPSA1ODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydicm9rZW5iYXInXSA9IDI4MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JlZ2lzdGVyZWQnXSA9IDczNztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0dicmV2ZSddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWRvdGFjY2VudCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3VtbWF0aW9uJ10gPSA2MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFZ3JhdmUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JhY3V0ZSddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb21hY3JvbiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWmFjdXRlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydaY2Fyb24nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXJlcXVhbCddID0gNTQ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRXRoJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydDY2VkaWxsYSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGNvbW1hYWNjZW50J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0Y2Fyb24nXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VvZ29uZWsnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VvZ29uZWsnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FhY3V0ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQWRpZXJlc2lzJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlZ3JhdmUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3phY3V0ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaW9nb25layddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2FjdXRlJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvYWN1dGUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FtYWNyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NhY3V0ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaWRpZXJlc2lzJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPY2lyY3VtZmxleCddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVWdyYXZlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydEZWx0YSddID0gNjEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhvcm4nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3R3b3N1cGVyaW9yJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPZGllcmVzaXMnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ211J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpZ3JhdmUnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29odW5nYXJ1bWxhdXQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VvZ29uZWsnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Rjcm9hdCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVxdWFydGVycyddID0gODM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnU2NlZGlsbGEnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xjYXJvbiddID0gNDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnS2NvbW1hYWNjZW50J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydMYWN1dGUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RyYWRlbWFyayddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Vkb3RhY2NlbnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lncmF2ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSW1hY3JvbiddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTGNhcm9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbmVoYWxmJ10gPSA4MzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsZXNzZXF1YWwnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29jaXJjdW1mbGV4J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydudGlsZGUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VodW5nYXJ1bWxhdXQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VhY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZW1hY3JvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ2JyZXZlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbmVxdWFydGVyJ10gPSA4MzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTY2Fyb24nXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Njb21tYWFjY2VudCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2h1bmdhcnVtbGF1dCddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGVncmVlJ10gPSA0MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZ3JhdmUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0NjYXJvbiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndWdyYXZlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyYWRpY2FsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydEY2Fyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3Jjb21tYWFjY2VudCddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTnRpbGRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvdGlsZGUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Jjb21tYWFjY2VudCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTGNvbW1hYWNjZW50J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBdGlsZGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FvZ29uZWsnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FyaW5nJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPdGlsZGUnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3pkb3RhY2NlbnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VjYXJvbiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSW9nb25layddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsna2NvbW1hYWNjZW50J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtaW51cyddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWNpcmN1bWZsZXgnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25jYXJvbiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGNvbW1hYWNjZW50J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydsb2dpY2Fsbm90J10gPSA1ODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZGllcmVzaXMnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VkaWVyZXNpcyddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbm90ZXF1YWwnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2djb21tYWFjY2VudCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXRoJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6Y2Fyb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25jb21tYWFjY2VudCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lc3VwZXJpb3InXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ltYWNyb24nXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0V1cm8nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0hlbHZldGljYS1PYmxpcXVlJ10gPSAoMCwgX3V0aWwuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3BhY2UnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2V4Y2xhbSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmwnXSA9IDM1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ251bWJlcnNpZ24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RvbGxhciddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVyY2VudCddID0gODg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYW1wZXJzYW5kJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZXJpZ2h0J10gPSAyMjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJlbmxlZnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVucmlnaHQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FzdGVyaXNrJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwbHVzJ10gPSA1ODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydjb21tYSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaHlwaGVuJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwZXJpb2QnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NsYXNoJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6ZXJvJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbmUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3R3byddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhyZWUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZvdXInXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZpdmUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NpeCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2V2ZW4nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduaW5lJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydjb2xvbiddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2VtaWNvbG9uJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsZXNzJ10gPSA1ODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlcXVhbCddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3JlYXRlciddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVlc3Rpb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2F0J10gPSAxMDE1O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRyddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSyddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTSddID0gODMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTyddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUSddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUyddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnViddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVyddID0gOTQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldGxlZnQnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JhY2tzbGFzaCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldHJpZ2h0J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhc2NpaWNpcmN1bSddID0gNDY5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndW5kZXJzY29yZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVsZWZ0J10gPSAyMjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydiJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydnJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydoJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpJ10gPSAyMjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydqJ10gPSAyMjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydrJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsJ10gPSAyMjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtJ10gPSA4MzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd2J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd3J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd4J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd5J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFjZWxlZnQnXSA9IDMzNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JhciddID0gMjYwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VyaWdodCddID0gMzM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXNjaWl0aWxkZSddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXhjbGFtZG93biddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2VudCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3RlcmxpbmcnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZyYWN0aW9uJ10gPSAxNjc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd5ZW4nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Zsb3JpbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2VjdGlvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY3VycmVuY3knXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3Rlc2luZ2xlJ10gPSAxOTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWRibGxlZnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxsZW1vdGxlZnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxzaW5nbGxlZnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxzaW5nbHJpZ2h0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmaSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZmwnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VuZGFzaCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGFnZ2VyJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkYWdnZXJkYmwnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcmlvZGNlbnRlcmVkJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJhZ3JhcGgnXSA9IDUzNztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2J1bGxldCddID0gMzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVzaW5nbGJhc2UnXSA9IDIyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJsYmFzZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmxyaWdodCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3VpbGxlbW90cmlnaHQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VsbGlwc2lzJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVydGhvdXNhbmQnXSA9IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdWVzdGlvbmRvd24nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dyYXZlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhY3V0ZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2lyY3VtZmxleCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGlsZGUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ21hY3JvbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJldmUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RvdGFjY2VudCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGllcmVzaXMnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JpbmcnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NlZGlsbGEnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2h1bmdhcnVtbGF1dCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2dvbmVrJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjYXJvbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZW1kYXNoJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQUUnXSA9IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvcmRmZW1pbmluZSddID0gMzcwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTHNsYXNoJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPc2xhc2gnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09FJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3JkbWFzY3VsaW5lJ10gPSAzNjU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhZSddID0gODg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZG90bGVzc2knXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xzbGFzaCddID0gMjIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3NsYXNoJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZSddID0gOTQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ2VybWFuZGJscyddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWRpZXJlc2lzJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlYWN1dGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FicmV2ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndWh1bmdhcnVtbGF1dCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWNhcm9uJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydZZGllcmVzaXMnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RpdmlkZSddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWWFjdXRlJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBY2lyY3VtZmxleCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWFjdXRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVY2lyY3VtZmxleCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneWFjdXRlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzY29tbWFhY2NlbnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VjaXJjdW1mbGV4J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVcmluZyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVWRpZXJlc2lzJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhb2dvbmVrJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VvZ29uZWsnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VkaWVyZXNpcyddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRGNyb2F0J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydjb21tYWFjY2VudCddID0gMjUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29weXJpZ2h0J10gPSA3Mzc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFbWFjcm9uJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjY2Fyb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FyaW5nJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOY29tbWFhY2NlbnQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xhY3V0ZSddID0gMjIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWdyYXZlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUY29tbWFhY2NlbnQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0NhY3V0ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXRpbGRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFZG90YWNjZW50J10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzY2Fyb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NjZWRpbGxhJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpYWN1dGUnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xvemVuZ2UnXSA9IDQ3MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1JjYXJvbiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnR2NvbW1hYWNjZW50J10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1Y2lyY3VtZmxleCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWNpcmN1bWZsZXgnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FtYWNyb24nXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JjYXJvbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2NlZGlsbGEnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1pkb3RhY2NlbnQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Rob3JuJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPbWFjcm9uJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydSYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1NhY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGNhcm9uJ10gPSA2NDM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVbWFjcm9uJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1cmluZyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVzdXBlcmlvciddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2dyYXZlJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBZ3JhdmUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FicmV2ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbXVsdGlwbHknXSA9IDU4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VhY3V0ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVGNhcm9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJ0aWFsZGlmZiddID0gNDc2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneWRpZXJlc2lzJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ljaXJjdW1mbGV4J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFY2lyY3VtZmxleCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWRpZXJlc2lzJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlZGllcmVzaXMnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NhY3V0ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbmFjdXRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1bWFjcm9uJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOY2Fyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lhY3V0ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGx1c21pbnVzJ10gPSA1ODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydicm9rZW5iYXInXSA9IDI2MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JlZ2lzdGVyZWQnXSA9IDczNztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0dicmV2ZSddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWRvdGFjY2VudCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3VtbWF0aW9uJ10gPSA2MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFZ3JhdmUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JhY3V0ZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb21hY3JvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWmFjdXRlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydaY2Fyb24nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXJlcXVhbCddID0gNTQ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRXRoJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydDY2VkaWxsYSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGNvbW1hYWNjZW50J10gPSAyMjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0Y2Fyb24nXSA9IDMxNztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VvZ29uZWsnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VvZ29uZWsnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FhY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQWRpZXJlc2lzJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlZ3JhdmUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3phY3V0ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaW9nb25layddID0gMjIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2FjdXRlJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvYWN1dGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FtYWNyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NhY3V0ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaWRpZXJlc2lzJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPY2lyY3VtZmxleCddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVWdyYXZlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydEZWx0YSddID0gNjEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhvcm4nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3R3b3N1cGVyaW9yJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPZGllcmVzaXMnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ211J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpZ3JhdmUnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29odW5nYXJ1bWxhdXQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VvZ29uZWsnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Rjcm9hdCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVxdWFydGVycyddID0gODM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnU2NlZGlsbGEnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xjYXJvbiddID0gMjk5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnS2NvbW1hYWNjZW50J10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydMYWN1dGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RyYWRlbWFyayddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Vkb3RhY2NlbnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lncmF2ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSW1hY3JvbiddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTGNhcm9uJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbmVoYWxmJ10gPSA4MzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsZXNzZXF1YWwnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29jaXJjdW1mbGV4J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydudGlsZGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VodW5nYXJ1bWxhdXQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VhY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZW1hY3JvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ2JyZXZlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbmVxdWFydGVyJ10gPSA4MzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTY2Fyb24nXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Njb21tYWFjY2VudCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2h1bmdhcnVtbGF1dCddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGVncmVlJ10gPSA0MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZ3JhdmUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0NjYXJvbiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndWdyYXZlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyYWRpY2FsJ10gPSA0NTM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydEY2Fyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3Jjb21tYWFjY2VudCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTnRpbGRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvdGlsZGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Jjb21tYWFjY2VudCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTGNvbW1hYWNjZW50J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBdGlsZGUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FvZ29uZWsnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FyaW5nJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPdGlsZGUnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3pkb3RhY2NlbnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VjYXJvbiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSW9nb25layddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsna2NvbW1hYWNjZW50J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtaW51cyddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWNpcmN1bWZsZXgnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25jYXJvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGNvbW1hYWNjZW50J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydsb2dpY2Fsbm90J10gPSA1ODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZGllcmVzaXMnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VkaWVyZXNpcyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbm90ZXF1YWwnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2djb21tYWFjY2VudCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXRoJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6Y2Fyb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25jb21tYWFjY2VudCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lc3VwZXJpb3InXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ltYWNyb24nXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0V1cm8nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1N5bWJvbCddID0gKDAsIF91dGlsLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NwYWNlJ10gPSAyNTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydleGNsYW0nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VuaXZlcnNhbCddID0gNzEzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbnVtYmVyc2lnbiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXhpc3RlbnRpYWwnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcmNlbnQnXSA9IDgzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FtcGVyc2FuZCddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3VjaHRoYXQnXSA9IDQzOTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVubGVmdCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5yaWdodCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXN0ZXJpc2ttYXRoJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwbHVzJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydjb21tYSddID0gMjUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbWludXMnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcmlvZCddID0gMjUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2xhc2gnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3plcm8nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29uZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndHdvJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZm91ciddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZml2ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2l4J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzZXZlbiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWlnaHQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25pbmUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NvbG9uJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzZW1pY29sb24nXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xlc3MnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydncmVhdGVyJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdWVzdGlvbiddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29uZ3J1ZW50J10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBbHBoYSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQmV0YSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQ2hpJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydEZWx0YSddID0gNjEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRXBzaWxvbiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUGhpJ10gPSA3NjM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydHYW1tYSddID0gNjAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRXRhJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydJb3RhJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aGV0YTEnXSA9IDYzMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0thcHBhJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydMYW1iZGEnXSA9IDY4NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ011J10gPSA4ODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOdSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT21pY3JvbiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUGknXSA9IDc2ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1RoZXRhJ10gPSA3NDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydSaG8nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1NpZ21hJ10gPSA1OTI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUYXUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Vwc2lsb24nXSA9IDY5MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NpZ21hMSddID0gNDM5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT21lZ2EnXSA9IDc2ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1hpJ10gPSA2NDU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydQc2knXSA9IDc5NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1pldGEnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRsZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aGVyZWZvcmUnXSA9IDg2MztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRyaWdodCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVycGVuZGljdWxhciddID0gNjU4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndW5kZXJzY29yZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmFkaWNhbGV4J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhbHBoYSddID0gNjMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYmV0YSddID0gNTQ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2hpJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkZWx0YSddID0gNDk0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXBzaWxvbiddID0gNDM5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGhpJ10gPSA1MjE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydnYW1tYSddID0gNDExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXRhJ10gPSA2MDM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydpb3RhJ10gPSAzMjk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwaGkxJ10gPSA2MDM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydrYXBwYSddID0gNTQ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGFtYmRhJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtdSddID0gNTc2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbnUnXSA9IDUyMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29taWNyb24nXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BpJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aGV0YSddID0gNTIxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmhvJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzaWdtYSddID0gNjAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGF1J10gPSA0Mzk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1cHNpbG9uJ10gPSA1NzY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbWVnYTEnXSA9IDcxMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29tZWdhJ10gPSA2ODY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd4aSddID0gNDkzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncHNpJ10gPSA2ODY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6ZXRhJ10gPSA0OTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFjZWxlZnQnXSA9IDQ4MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JhciddID0gMjAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VyaWdodCddID0gNDgwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2ltaWxhciddID0gNTQ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRXVybyddID0gNzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVXBzaWxvbjEnXSA9IDYyMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ21pbnV0ZSddID0gMjQ3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGVzc2VxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmcmFjdGlvbiddID0gMTY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaW5maW5pdHknXSA9IDcxMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Zsb3JpbiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2x1YiddID0gNzUzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGlhbW9uZCddID0gNzUzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaGVhcnQnXSA9IDc1MztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NwYWRlJ10gPSA3NTM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhcnJvd2JvdGgnXSA9IDEwNDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhcnJvd2xlZnQnXSA9IDk4NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93dXAnXSA9IDYwMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93cmlnaHQnXSA9IDk4NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93ZG93biddID0gNjAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGVncmVlJ10gPSA0MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwbHVzbWludXMnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NlY29uZCddID0gNDExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3JlYXRlcmVxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtdWx0aXBseSddID0gNTQ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncHJvcG9ydGlvbmFsJ10gPSA3MTM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJ0aWFsZGlmZiddID0gNDk0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnVsbGV0J10gPSA0NjA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkaXZpZGUnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25vdGVxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlcXVpdmFsZW5jZSddID0gNTQ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXBwcm94ZXF1YWwnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VsbGlwc2lzJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3d2ZXJ0ZXgnXSA9IDYwMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93aG9yaXpleCddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NhcnJpYWdlcmV0dXJuJ10gPSA2NTg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhbGVwaCddID0gODIzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWZyYWt0dXInXSA9IDY4NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1JmcmFrdHVyJ10gPSA3OTU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd3ZWllcnN0cmFzcyddID0gOTg3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2lyY2xlbXVsdGlwbHknXSA9IDc2ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NpcmNsZXBsdXMnXSA9IDc2ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VtcHR5c2V0J10gPSA4MjM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpbnRlcnNlY3Rpb24nXSA9IDc2ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VuaW9uJ10gPSA3Njg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydwcm9wZXJzdXBlcnNldCddID0gNzEzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmVmbGV4c3VwZXJzZXQnXSA9IDcxMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25vdHN1YnNldCddID0gNzEzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncHJvcGVyc3Vic2V0J10gPSA3MTM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyZWZsZXhzdWJzZXQnXSA9IDcxMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VsZW1lbnQnXSA9IDcxMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25vdGVsZW1lbnQnXSA9IDcxMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FuZ2xlJ10gPSA3Njg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydncmFkaWVudCddID0gNzEzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmVnaXN0ZXJzZXJpZiddID0gNzkwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29weXJpZ2h0c2VyaWYnXSA9IDc5MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RyYWRlbWFya3NlcmlmJ10gPSA4OTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydwcm9kdWN0J10gPSA4MjM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyYWRpY2FsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydkb3RtYXRoJ10gPSAyNTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydsb2dpY2Fsbm90J10gPSA3MTM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydsb2dpY2FsYW5kJ10gPSA2MDM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydsb2dpY2Fsb3InXSA9IDYwMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93ZGJsYm90aCddID0gMTA0MjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93ZGJsbGVmdCddID0gOTg3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dkYmx1cCddID0gNjAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dkYmxyaWdodCddID0gOTg3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dkYmxkb3duJ10gPSA2MDM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydsb3plbmdlJ10gPSA0OTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhbmdsZWxlZnQnXSA9IDMyOTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JlZ2lzdGVyc2FucyddID0gNzkwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29weXJpZ2h0c2FucyddID0gNzkwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndHJhZGVtYXJrc2FucyddID0gNzg2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3VtbWF0aW9uJ10gPSA3MTM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJlbmxlZnR0cCddID0gMzg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5sZWZ0ZXgnXSA9IDM4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVubGVmdGJ0J10gPSAzODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFja2V0bGVmdHRwJ10gPSAzODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFja2V0bGVmdGV4J10gPSAzODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFja2V0bGVmdGJ0J10gPSAzODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFjZWxlZnR0cCddID0gNDk0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VsZWZ0bWlkJ10gPSA0OTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFjZWxlZnRidCddID0gNDk0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VleCddID0gNDk0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYW5nbGVyaWdodCddID0gMzI5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaW50ZWdyYWwnXSA9IDI3NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ludGVncmFsdHAnXSA9IDY4NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ludGVncmFsZXgnXSA9IDY4NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ludGVncmFsYnQnXSA9IDY4NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVucmlnaHR0cCddID0gMzg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5yaWdodGV4J10gPSAzODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJlbnJpZ2h0YnQnXSA9IDM4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRyaWdodHRwJ10gPSAzODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFja2V0cmlnaHRleCddID0gMzg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldHJpZ2h0YnQnXSA9IDM4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlcmlnaHR0cCddID0gNDk0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VyaWdodG1pZCddID0gNDk0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VyaWdodGJ0J10gPSA0OTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhcHBsZSddID0gNzkwO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdFsnVGltZXMtUm9tYW4nXSA9ICgwLCBfdXRpbC5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzcGFjZSddID0gMjUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXhjbGFtJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWRibCddID0gNDA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbnVtYmVyc2lnbiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZG9sbGFyJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwZXJjZW50J10gPSA4MzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhbXBlcnNhbmQnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlcmlnaHQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVubGVmdCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5yaWdodCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXN0ZXJpc2snXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BsdXMnXSA9IDU2NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NvbW1hJ10gPSAyNTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydoeXBoZW4nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcmlvZCddID0gMjUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2xhc2gnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3plcm8nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29uZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndHdvJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZm91ciddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZml2ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2l4J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzZXZlbiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWlnaHQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25pbmUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NvbG9uJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzZW1pY29sb24nXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xlc3MnXSA9IDU2NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VxdWFsJ10gPSA1NjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydncmVhdGVyJ10gPSA1NjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdWVzdGlvbiddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXQnXSA9IDkyMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0EnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0InXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0MnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0QnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0UnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0YnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0cnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0gnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0knXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0onXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0snXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0wnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ00nXSA9IDg4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ04nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ08nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1AnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1EnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1InXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1MnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1QnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1UnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1YnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1cnXSA9IDk0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1gnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1knXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1onXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRsZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydiYWNrc2xhc2gnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRyaWdodCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXNjaWljaXJjdW0nXSA9IDQ2OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VuZGVyc2NvcmUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlbGVmdCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYSddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYyddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZSddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaiddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnayddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbSddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnciddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncyddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneiddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VsZWZ0J10gPSA0ODA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydiYXInXSA9IDIwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlcmlnaHQnXSA9IDQ4MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FzY2lpdGlsZGUnXSA9IDU0MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2V4Y2xhbWRvd24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NlbnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3N0ZXJsaW5nJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmcmFjdGlvbiddID0gMTY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneWVuJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmbG9yaW4nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NlY3Rpb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2N1cnJlbmN5J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZXNpbmdsZSddID0gMTgwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmxsZWZ0J10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydndWlsbGVtb3RsZWZ0J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydndWlsc2luZ2xsZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydndWlsc2luZ2xyaWdodCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZmknXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZsJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlbmRhc2gnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RhZ2dlciddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGFnZ2VyZGJsJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwZXJpb2RjZW50ZXJlZCddID0gMjUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFyYWdyYXBoJ10gPSA0NTM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydidWxsZXQnXSA9IDM1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3Rlc2luZ2xiYXNlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWRibGJhc2UnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJscmlnaHQnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxsZW1vdHJpZ2h0J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlbGxpcHNpcyddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcnRob3VzYW5kJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVlc3Rpb25kb3duJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydncmF2ZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWN1dGUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NpcmN1bWZsZXgnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RpbGRlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtYWNyb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyZXZlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydkb3RhY2NlbnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RpZXJlc2lzJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyaW5nJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjZWRpbGxhJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydodW5nYXJ1bWxhdXQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29nb25layddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2Fyb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VtZGFzaCddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FFJ10gPSA4ODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvcmRmZW1pbmluZSddID0gMjc2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTHNsYXNoJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPc2xhc2gnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09FJ10gPSA4ODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvcmRtYXNjdWxpbmUnXSA9IDMxMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FlJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydkb3RsZXNzaSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbHNsYXNoJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydvc2xhc2gnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29lJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydnZXJtYW5kYmxzJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydJZGllcmVzaXMnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VhY3V0ZSddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWJyZXZlJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1aHVuZ2FydW1sYXV0J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlY2Fyb24nXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1lkaWVyZXNpcyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGl2aWRlJ10gPSA1NjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydZYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FjaXJjdW1mbGV4J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhYWN1dGUnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VjaXJjdW1mbGV4J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd5YWN1dGUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3Njb21tYWFjY2VudCddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWNpcmN1bWZsZXgnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VyaW5nJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVZGllcmVzaXMnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FvZ29uZWsnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VhY3V0ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndW9nb25layddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRWRpZXJlc2lzJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydEY3JvYXQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NvbW1hYWNjZW50J10gPSAyNTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydjb3B5cmlnaHQnXSA9IDc2MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VtYWNyb24nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NjYXJvbiddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXJpbmcnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ05jb21tYWFjY2VudCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGFjdXRlJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhZ3JhdmUnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Rjb21tYWFjY2VudCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQ2FjdXRlJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhdGlsZGUnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0Vkb3RhY2NlbnQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NjYXJvbiddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2NlZGlsbGEnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2lhY3V0ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbG96ZW5nZSddID0gNDcxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUmNhcm9uJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydHY29tbWFhY2NlbnQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VjaXJjdW1mbGV4J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhY2lyY3VtZmxleCddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQW1hY3JvbiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmNhcm9uJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjY2VkaWxsYSddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWmRvdGFjY2VudCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVGhvcm4nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09tYWNyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1JhY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnU2FjdXRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkY2Fyb24nXSA9IDU4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VtYWNyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VyaW5nJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZXN1cGVyaW9yJ10gPSAzMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPZ3JhdmUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FncmF2ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQWJyZXZlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtdWx0aXBseSddID0gNTY0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndWFjdXRlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUY2Fyb24nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BhcnRpYWxkaWZmJ10gPSA0NzY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd5ZGllcmVzaXMnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ05hY3V0ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaWNpcmN1bWZsZXgnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VjaXJjdW1mbGV4J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhZGllcmVzaXMnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VkaWVyZXNpcyddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2FjdXRlJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduYWN1dGUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VtYWNyb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ05jYXJvbiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWFjdXRlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwbHVzbWludXMnXSA9IDU2NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Jyb2tlbmJhciddID0gMjAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmVnaXN0ZXJlZCddID0gNzYwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnR2JyZXZlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydJZG90YWNjZW50J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzdW1tYXRpb24nXSA9IDYwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VncmF2ZSddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmFjdXRlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbWFjcm9uJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydaYWN1dGUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1pjYXJvbiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3JlYXRlcmVxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFdGgnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0NjZWRpbGxhJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsY29tbWFhY2NlbnQnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RjYXJvbiddID0gMzI2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZW9nb25layddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVW9nb25layddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQWFjdXRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBZGllcmVzaXMnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VncmF2ZSddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnemFjdXRlJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydpb2dvbmVrJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29hY3V0ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYW1hY3JvbiddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2FjdXRlJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpZGllcmVzaXMnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09jaXJjdW1mbGV4J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVZ3JhdmUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0RlbHRhJ10gPSA2MTI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aG9ybiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndHdvc3VwZXJpb3InXSA9IDMwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09kaWVyZXNpcyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbXUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2lncmF2ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2h1bmdhcnVtbGF1dCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRW9nb25layddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGNyb2F0J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZXF1YXJ0ZXJzJ10gPSA3NTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTY2VkaWxsYSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGNhcm9uJ10gPSAzNDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydLY29tbWFhY2NlbnQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xhY3V0ZSddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndHJhZGVtYXJrJ10gPSA5ODA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlZG90YWNjZW50J10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydJZ3JhdmUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0ltYWNyb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xjYXJvbiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25laGFsZiddID0gNzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGVzc2VxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvY2lyY3VtZmxleCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbnRpbGRlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVaHVuZ2FydW1sYXV0J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFYWN1dGUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VtYWNyb24nXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dicmV2ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lcXVhcnRlciddID0gNzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnU2Nhcm9uJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTY29tbWFhY2NlbnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09odW5nYXJ1bWxhdXQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RlZ3JlZSddID0gNDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2dyYXZlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydDY2Fyb24nXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VncmF2ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmFkaWNhbCddID0gNDUzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRGNhcm9uJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyY29tbWFhY2NlbnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ050aWxkZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3RpbGRlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydSY29tbWFhY2NlbnQnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xjb21tYWFjY2VudCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQXRpbGRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBb2dvbmVrJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBcmluZyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT3RpbGRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6ZG90YWNjZW50J10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFY2Fyb24nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lvZ29uZWsnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2tjb21tYWFjY2VudCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbWludXMnXSA9IDU2NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0ljaXJjdW1mbGV4J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduY2Fyb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3Rjb21tYWFjY2VudCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbG9naWNhbG5vdCddID0gNTY0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2RpZXJlc2lzJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1ZGllcmVzaXMnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25vdGVxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydnY29tbWFhY2NlbnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2V0aCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnemNhcm9uJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduY29tbWFhY2NlbnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29uZXN1cGVyaW9yJ10gPSAzMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpbWFjcm9uJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFdXJvJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0WydUaW1lcy1Cb2xkJ10gPSAoMCwgX3V0aWwuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3BhY2UnXSA9IDI1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2V4Y2xhbSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmwnXSA9IDU1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ251bWJlcnNpZ24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RvbGxhciddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVyY2VudCddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FtcGVyc2FuZCddID0gODMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVyaWdodCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5sZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJlbnJpZ2h0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhc3RlcmlzayddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGx1cyddID0gNTcwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29tbWEnXSA9IDI1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2h5cGhlbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVyaW9kJ10gPSAyNTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzbGFzaCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnemVybyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0d28nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydmb3VyJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmaXZlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzaXgnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlaWdodCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbmluZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29sb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NlbWljb2xvbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGVzcyddID0gNTcwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXF1YWwnXSA9IDU3MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXInXSA9IDU3MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1ZXN0aW9uJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhdCddID0gOTMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRyddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSCddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSSddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSyddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTSddID0gOTQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTyddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUSddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnViddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVyddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1gnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1knXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1onXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRsZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydiYWNrc2xhc2gnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRyaWdodCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXNjaWljaXJjdW0nXSA9IDU4MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VuZGVyc2NvcmUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlbGVmdCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYyddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZSddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnayddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbSddID0gODMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnciddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncyddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneiddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VsZWZ0J10gPSAzOTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydiYXInXSA9IDIyMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlcmlnaHQnXSA9IDM5NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FzY2lpdGlsZGUnXSA9IDUyMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2V4Y2xhbWRvd24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NlbnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3N0ZXJsaW5nJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmcmFjdGlvbiddID0gMTY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneWVuJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmbG9yaW4nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NlY3Rpb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2N1cnJlbmN5J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZXNpbmdsZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmxsZWZ0J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydndWlsbGVtb3RsZWZ0J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydndWlsc2luZ2xsZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydndWlsc2luZ2xyaWdodCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZmknXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZsJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlbmRhc2gnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RhZ2dlciddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGFnZ2VyZGJsJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwZXJpb2RjZW50ZXJlZCddID0gMjUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFyYWdyYXBoJ10gPSA1NDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydidWxsZXQnXSA9IDM1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3Rlc2luZ2xiYXNlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWRibGJhc2UnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJscmlnaHQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxsZW1vdHJpZ2h0J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlbGxpcHNpcyddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcnRob3VzYW5kJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVlc3Rpb25kb3duJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydncmF2ZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWN1dGUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NpcmN1bWZsZXgnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RpbGRlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtYWNyb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyZXZlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydkb3RhY2NlbnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RpZXJlc2lzJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyaW5nJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjZWRpbGxhJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydodW5nYXJ1bWxhdXQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29nb25layddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2Fyb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VtZGFzaCddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FFJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3JkZmVtaW5pbmUnXSA9IDMwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xzbGFzaCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT3NsYXNoJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPRSddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29yZG1hc2N1bGluZSddID0gMzMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RvdGxlc3NpJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydsc2xhc2gnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29zbGFzaCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2UnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dlcm1hbmRibHMnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lkaWVyZXNpcyddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWFjdXRlJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhYnJldmUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VodW5nYXJ1bWxhdXQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VjYXJvbiddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWWRpZXJlc2lzJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkaXZpZGUnXSA9IDU3MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1lhY3V0ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQWNpcmN1bWZsZXgnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FhY3V0ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVWNpcmN1bWZsZXgnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3lhY3V0ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2NvbW1hYWNjZW50J10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlY2lyY3VtZmxleCddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVXJpbmcnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VkaWVyZXNpcyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYW9nb25layddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVWFjdXRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1b2dvbmVrJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFZGllcmVzaXMnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0Rjcm9hdCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29tbWFhY2NlbnQnXSA9IDI1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NvcHlyaWdodCddID0gNzQ3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRW1hY3JvbiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2Nhcm9uJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhcmluZyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTmNvbW1hYWNjZW50J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsYWN1dGUnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FncmF2ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVGNvbW1hYWNjZW50J10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydDYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2F0aWxkZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRWRvdGFjY2VudCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2Nhcm9uJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzY2VkaWxsYSddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaWFjdXRlJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydsb3plbmdlJ10gPSA0OTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydSY2Fyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0djb21tYWFjY2VudCddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndWNpcmN1bWZsZXgnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FjaXJjdW1mbGV4J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBbWFjcm9uJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyY2Fyb24nXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NjZWRpbGxhJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydaZG90YWNjZW50J10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUaG9ybiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT21hY3JvbiddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUmFjdXRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTYWN1dGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RjYXJvbiddID0gNjcyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVW1hY3JvbiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndXJpbmcnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlc3VwZXJpb3InXSA9IDMwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09ncmF2ZSddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQWdyYXZlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBYnJldmUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ211bHRpcGx5J10gPSA1NzA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1YWN1dGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1RjYXJvbiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFydGlhbGRpZmYnXSA9IDQ5NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3lkaWVyZXNpcyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTmFjdXRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpY2lyY3VtZmxleCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRWNpcmN1bWZsZXgnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FkaWVyZXNpcyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWRpZXJlc2lzJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjYWN1dGUnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25hY3V0ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndW1hY3JvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTmNhcm9uJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydJYWN1dGUnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BsdXNtaW51cyddID0gNTcwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJva2VuYmFyJ10gPSAyMjA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyZWdpc3RlcmVkJ10gPSA3NDc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydHYnJldmUnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lkb3RhY2NlbnQnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3N1bW1hdGlvbiddID0gNjAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRWdyYXZlJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyYWN1dGUnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29tYWNyb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1phY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWmNhcm9uJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydncmVhdGVyZXF1YWwnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0V0aCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQ2NlZGlsbGEnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xjb21tYWFjY2VudCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGNhcm9uJ10gPSA0MTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydlb2dvbmVrJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVb2dvbmVrJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FkaWVyZXNpcyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWdyYXZlJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6YWN1dGUnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2lvZ29uZWsnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09hY3V0ZSddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2FjdXRlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhbWFjcm9uJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzYWN1dGUnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2lkaWVyZXNpcyddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2NpcmN1bWZsZXgnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VncmF2ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRGVsdGEnXSA9IDYxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3Rob3JuJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0d29zdXBlcmlvciddID0gMzAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2RpZXJlc2lzJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtdSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaWdyYXZlJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvaHVuZ2FydW1sYXV0J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFb2dvbmVrJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkY3JvYXQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlcXVhcnRlcnMnXSA9IDc1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1NjZWRpbGxhJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsY2Fyb24nXSA9IDM5NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0tjb21tYWFjY2VudCddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTGFjdXRlJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0cmFkZW1hcmsnXSA9IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlZG90YWNjZW50J10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydJZ3JhdmUnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0ltYWNyb24nXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xjYXJvbiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25laGFsZiddID0gNzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGVzc2VxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvY2lyY3VtZmxleCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbnRpbGRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVaHVuZ2FydW1sYXV0J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFYWN1dGUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VtYWNyb24nXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dicmV2ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lcXVhcnRlciddID0gNzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnU2Nhcm9uJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTY29tbWFhY2NlbnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09odW5nYXJ1bWxhdXQnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RlZ3JlZSddID0gNDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2dyYXZlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydDY2Fyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VncmF2ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmFkaWNhbCddID0gNTQ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRGNhcm9uJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyY29tbWFhY2NlbnQnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ050aWxkZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3RpbGRlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydSY29tbWFhY2NlbnQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xjb21tYWFjY2VudCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQXRpbGRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBb2dvbmVrJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBcmluZyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT3RpbGRlJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6ZG90YWNjZW50J10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFY2Fyb24nXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lvZ29uZWsnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2tjb21tYWFjY2VudCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbWludXMnXSA9IDU3MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0ljaXJjdW1mbGV4J10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduY2Fyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3Rjb21tYWFjY2VudCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbG9naWNhbG5vdCddID0gNTcwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2RpZXJlc2lzJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1ZGllcmVzaXMnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25vdGVxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydnY29tbWFhY2NlbnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2V0aCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnemNhcm9uJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduY29tbWFhY2NlbnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29uZXN1cGVyaW9yJ10gPSAzMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpbWFjcm9uJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFdXJvJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0WydUaW1lcy1Cb2xkSXRhbGljJ10gPSAoMCwgX3V0aWwuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3BhY2UnXSA9IDI1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2V4Y2xhbSddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmwnXSA9IDU1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ251bWJlcnNpZ24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RvbGxhciddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVyY2VudCddID0gODMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYW1wZXJzYW5kJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZXJpZ2h0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJlbmxlZnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVucmlnaHQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FzdGVyaXNrJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwbHVzJ10gPSA1NzA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydjb21tYSddID0gMjUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaHlwaGVuJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwZXJpb2QnXSA9IDI1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NsYXNoJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6ZXJvJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbmUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3R3byddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhyZWUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZvdXInXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZpdmUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NpeCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2V2ZW4nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduaW5lJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydjb2xvbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2VtaWNvbG9uJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsZXNzJ10gPSA1NzA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlcXVhbCddID0gNTcwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3JlYXRlciddID0gNTcwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVlc3Rpb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2F0J10gPSA4MzI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydCJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydDJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydEJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydGJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydHJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydIJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydJJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydKJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydLJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydMJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydNJ10gPSA4ODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydQJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydRJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydSJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydWJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydXJ10gPSA4ODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydYJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydZJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydaJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFja2V0bGVmdCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYmFja3NsYXNoJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFja2V0cmlnaHQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FzY2lpY2lyY3VtJ10gPSA1NzA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1bmRlcnNjb3JlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWxlZnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2EnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2InXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2MnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2QnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2UnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2YnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2cnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2gnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2knXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2onXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2snXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2wnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ20nXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ28nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3AnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3EnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3InXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3MnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3QnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3UnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3YnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3cnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3gnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3knXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3onXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlbGVmdCddID0gMzQ4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYmFyJ10gPSAyMjA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFjZXJpZ2h0J10gPSAzNDg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhc2NpaXRpbGRlJ10gPSA1NzA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydleGNsYW1kb3duJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjZW50J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzdGVybGluZyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZnJhY3Rpb24nXSA9IDE2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3llbiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZmxvcmluJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzZWN0aW9uJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjdXJyZW5jeSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVzaW5nbGUnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJsbGVmdCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3VpbGxlbW90bGVmdCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3VpbHNpbmdsbGVmdCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3VpbHNpbmdscmlnaHQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZpJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmbCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZW5kYXNoJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkYWdnZXInXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RhZ2dlcmRibCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVyaW9kY2VudGVyZWQnXSA9IDI1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BhcmFncmFwaCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnVsbGV0J10gPSAzNTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZXNpbmdsYmFzZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmxiYXNlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWRibHJpZ2h0J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydndWlsbGVtb3RyaWdodCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWxsaXBzaXMnXSA9IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwZXJ0aG91c2FuZCddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1ZXN0aW9uZG93biddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3JhdmUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FjdXRlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjaXJjdW1mbGV4J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aWxkZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbWFjcm9uJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmV2ZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZG90YWNjZW50J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkaWVyZXNpcyddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmluZyddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2VkaWxsYSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaHVuZ2FydW1sYXV0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZ29uZWsnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Nhcm9uJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlbWRhc2gnXSA9IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBRSddID0gOTQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3JkZmVtaW5pbmUnXSA9IDI2NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xzbGFzaCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT3NsYXNoJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPRSddID0gOTQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3JkbWFzY3VsaW5lJ10gPSAzMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZG90bGVzc2knXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xzbGFzaCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3NsYXNoJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ2VybWFuZGJscyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWRpZXJlc2lzJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlYWN1dGUnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FicmV2ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndWh1bmdhcnVtbGF1dCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWNhcm9uJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydZZGllcmVzaXMnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RpdmlkZSddID0gNTcwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWWFjdXRlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBY2lyY3VtZmxleCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWFjdXRlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVY2lyY3VtZmxleCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneWFjdXRlJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzY29tbWFhY2NlbnQnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VjaXJjdW1mbGV4J10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVcmluZyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVWRpZXJlc2lzJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhb2dvbmVrJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VvZ29uZWsnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VkaWVyZXNpcyddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRGNyb2F0J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydjb21tYWFjY2VudCddID0gMjUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29weXJpZ2h0J10gPSA3NDc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFbWFjcm9uJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjY2Fyb24nXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FyaW5nJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOY29tbWFhY2NlbnQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xhY3V0ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWdyYXZlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUY29tbWFhY2NlbnQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0NhY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXRpbGRlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFZG90YWNjZW50J10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzY2Fyb24nXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NjZWRpbGxhJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpYWN1dGUnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xvemVuZ2UnXSA9IDQ5NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1JjYXJvbiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnR2NvbW1hYWNjZW50J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1Y2lyY3VtZmxleCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWNpcmN1bWZsZXgnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FtYWNyb24nXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JjYXJvbiddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2NlZGlsbGEnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1pkb3RhY2NlbnQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Rob3JuJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPbWFjcm9uJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydSYWN1dGUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1NhY3V0ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGNhcm9uJ10gPSA2MDg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVbWFjcm9uJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1cmluZyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVzdXBlcmlvciddID0gMzAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2dyYXZlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBZ3JhdmUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FicmV2ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbXVsdGlwbHknXSA9IDU3MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VhY3V0ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVGNhcm9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJ0aWFsZGlmZiddID0gNDk0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneWRpZXJlc2lzJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ljaXJjdW1mbGV4J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFY2lyY3VtZmxleCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWRpZXJlc2lzJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlZGllcmVzaXMnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NhY3V0ZSddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbmFjdXRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1bWFjcm9uJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOY2Fyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lhY3V0ZSddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGx1c21pbnVzJ10gPSA1NzA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydicm9rZW5iYXInXSA9IDIyMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JlZ2lzdGVyZWQnXSA9IDc0NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0dicmV2ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWRvdGFjY2VudCddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3VtbWF0aW9uJ10gPSA2MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFZ3JhdmUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JhY3V0ZSddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb21hY3JvbiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWmFjdXRlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydaY2Fyb24nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXJlcXVhbCddID0gNTQ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRXRoJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydDY2VkaWxsYSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGNvbW1hYWNjZW50J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0Y2Fyb24nXSA9IDM2NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VvZ29uZWsnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VvZ29uZWsnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FhY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQWRpZXJlc2lzJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlZ3JhdmUnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3phY3V0ZSddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaW9nb25layddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2FjdXRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvYWN1dGUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FtYWNyb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NhY3V0ZSddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaWRpZXJlc2lzJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPY2lyY3VtZmxleCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVWdyYXZlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydEZWx0YSddID0gNjEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhvcm4nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3R3b3N1cGVyaW9yJ10gPSAzMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPZGllcmVzaXMnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ211J10gPSA1NzY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpZ3JhdmUnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29odW5nYXJ1bWxhdXQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VvZ29uZWsnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Rjcm9hdCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVxdWFydGVycyddID0gNzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnU2NlZGlsbGEnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xjYXJvbiddID0gMzgyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnS2NvbW1hYWNjZW50J10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydMYWN1dGUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RyYWRlbWFyayddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Vkb3RhY2NlbnQnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lncmF2ZSddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSW1hY3JvbiddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTGNhcm9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbmVoYWxmJ10gPSA3NTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsZXNzZXF1YWwnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29jaXJjdW1mbGV4J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydudGlsZGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VodW5nYXJ1bWxhdXQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VhY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZW1hY3JvbiddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ2JyZXZlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbmVxdWFydGVyJ10gPSA3NTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTY2Fyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Njb21tYWFjY2VudCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2h1bmdhcnVtbGF1dCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGVncmVlJ10gPSA0MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZ3JhdmUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0NjYXJvbiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndWdyYXZlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyYWRpY2FsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydEY2Fyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3Jjb21tYWFjY2VudCddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTnRpbGRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvdGlsZGUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Jjb21tYWFjY2VudCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTGNvbW1hYWNjZW50J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBdGlsZGUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FvZ29uZWsnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FyaW5nJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPdGlsZGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3pkb3RhY2NlbnQnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VjYXJvbiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSW9nb25layddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsna2NvbW1hYWNjZW50J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtaW51cyddID0gNjA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWNpcmN1bWZsZXgnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25jYXJvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGNvbW1hYWNjZW50J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydsb2dpY2Fsbm90J10gPSA2MDY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZGllcmVzaXMnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VkaWVyZXNpcyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbm90ZXF1YWwnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2djb21tYWFjY2VudCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXRoJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6Y2Fyb24nXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25jb21tYWFjY2VudCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lc3VwZXJpb3InXSA9IDMwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ltYWNyb24nXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0V1cm8nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RpbWVzLUl0YWxpYyddID0gKDAsIF91dGlsLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NwYWNlJ10gPSAyNTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydleGNsYW0nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJsJ10gPSA0MjA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydudW1iZXJzaWduJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydkb2xsYXInXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcmNlbnQnXSA9IDgzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FtcGVyc2FuZCddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVyaWdodCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5sZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJlbnJpZ2h0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhc3RlcmlzayddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGx1cyddID0gNjc1O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29tbWEnXSA9IDI1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2h5cGhlbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVyaW9kJ10gPSAyNTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzbGFzaCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnemVybyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0d28nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydmb3VyJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmaXZlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzaXgnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlaWdodCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbmluZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29sb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NlbWljb2xvbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGVzcyddID0gNjc1O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXF1YWwnXSA9IDY3NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXInXSA9IDY3NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1ZXN0aW9uJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhdCddID0gOTIwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQSddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQyddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRSddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSiddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSyddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTSddID0gODMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnViddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVyddID0gODMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldGxlZnQnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JhY2tzbGFzaCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldHJpZ2h0J10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhc2NpaWNpcmN1bSddID0gNDIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndW5kZXJzY29yZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVsZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydiJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydnJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydoJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydqJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydrJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd2J10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd3J10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd4J10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd5J10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6J10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFjZWxlZnQnXSA9IDQwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JhciddID0gMjc1O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VyaWdodCddID0gNDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXNjaWl0aWxkZSddID0gNTQxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXhjbGFtZG93biddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2VudCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3RlcmxpbmcnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZyYWN0aW9uJ10gPSAxNjc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd5ZW4nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Zsb3JpbiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2VjdGlvbiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY3VycmVuY3knXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3Rlc2luZ2xlJ10gPSAyMTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWRibGxlZnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxsZW1vdGxlZnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxzaW5nbGxlZnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxzaW5nbHJpZ2h0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmaSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZmwnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VuZGFzaCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGFnZ2VyJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkYWdnZXJkYmwnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcmlvZGNlbnRlcmVkJ10gPSAyNTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJhZ3JhcGgnXSA9IDUyMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2J1bGxldCddID0gMzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVzaW5nbGJhc2UnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJsYmFzZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmxyaWdodCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3VpbGxlbW90cmlnaHQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VsbGlwc2lzJ10gPSA4ODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwZXJ0aG91c2FuZCddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1ZXN0aW9uZG93biddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3JhdmUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FjdXRlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjaXJjdW1mbGV4J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aWxkZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbWFjcm9uJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmV2ZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZG90YWNjZW50J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkaWVyZXNpcyddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmluZyddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2VkaWxsYSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaHVuZ2FydW1sYXV0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZ29uZWsnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Nhcm9uJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlbWRhc2gnXSA9IDg4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FFJ10gPSA4ODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvcmRmZW1pbmluZSddID0gMjc2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTHNsYXNoJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPc2xhc2gnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09FJ10gPSA5NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvcmRtYXNjdWxpbmUnXSA9IDMxMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FlJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydkb3RsZXNzaSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbHNsYXNoJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydvc2xhc2gnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29lJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydnZXJtYW5kYmxzJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydJZGllcmVzaXMnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VhY3V0ZSddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWJyZXZlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1aHVuZ2FydW1sYXV0J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlY2Fyb24nXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1lkaWVyZXNpcyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGl2aWRlJ10gPSA2NzU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydZYWN1dGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FjaXJjdW1mbGV4J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhYWN1dGUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VjaXJjdW1mbGV4J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd5YWN1dGUnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3Njb21tYWFjY2VudCddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWNpcmN1bWZsZXgnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VyaW5nJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVZGllcmVzaXMnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FvZ29uZWsnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VhY3V0ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndW9nb25layddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRWRpZXJlc2lzJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydEY3JvYXQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NvbW1hYWNjZW50J10gPSAyNTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydjb3B5cmlnaHQnXSA9IDc2MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VtYWNyb24nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NjYXJvbiddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXJpbmcnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ05jb21tYWFjY2VudCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGFjdXRlJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhZ3JhdmUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Rjb21tYWFjY2VudCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQ2FjdXRlJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhdGlsZGUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0Vkb3RhY2NlbnQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NjYXJvbiddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2NlZGlsbGEnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2lhY3V0ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbG96ZW5nZSddID0gNDcxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUmNhcm9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydHY29tbWFhY2NlbnQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VjaXJjdW1mbGV4J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhY2lyY3VtZmxleCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQW1hY3JvbiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmNhcm9uJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjY2VkaWxsYSddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWmRvdGFjY2VudCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVGhvcm4nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09tYWNyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1JhY3V0ZSddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnU2FjdXRlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkY2Fyb24nXSA9IDU0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VtYWNyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VyaW5nJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZXN1cGVyaW9yJ10gPSAzMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPZ3JhdmUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FncmF2ZSddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQWJyZXZlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtdWx0aXBseSddID0gNjc1O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndWFjdXRlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUY2Fyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BhcnRpYWxkaWZmJ10gPSA0NzY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd5ZGllcmVzaXMnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ05hY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaWNpcmN1bWZsZXgnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VjaXJjdW1mbGV4J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhZGllcmVzaXMnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VkaWVyZXNpcyddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2FjdXRlJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduYWN1dGUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VtYWNyb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ05jYXJvbiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWFjdXRlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwbHVzbWludXMnXSA9IDY3NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Jyb2tlbmJhciddID0gMjc1O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmVnaXN0ZXJlZCddID0gNzYwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnR2JyZXZlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydJZG90YWNjZW50J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzdW1tYXRpb24nXSA9IDYwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VncmF2ZSddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmFjdXRlJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbWFjcm9uJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydaYWN1dGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1pjYXJvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3JlYXRlcmVxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFdGgnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0NjZWRpbGxhJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsY29tbWFhY2NlbnQnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RjYXJvbiddID0gMzAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZW9nb25layddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVW9nb25layddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQWFjdXRlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBZGllcmVzaXMnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VncmF2ZSddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnemFjdXRlJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydpb2dvbmVrJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29hY3V0ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYW1hY3JvbiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2FjdXRlJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpZGllcmVzaXMnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09jaXJjdW1mbGV4J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVZ3JhdmUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0RlbHRhJ10gPSA2MTI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aG9ybiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndHdvc3VwZXJpb3InXSA9IDMwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09kaWVyZXNpcyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbXUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2lncmF2ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2h1bmdhcnVtbGF1dCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRW9nb25layddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGNyb2F0J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZXF1YXJ0ZXJzJ10gPSA3NTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTY2VkaWxsYSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGNhcm9uJ10gPSAzMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydLY29tbWFhY2NlbnQnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xhY3V0ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndHJhZGVtYXJrJ10gPSA5ODA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlZG90YWNjZW50J10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydJZ3JhdmUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0ltYWNyb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xjYXJvbiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25laGFsZiddID0gNzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGVzc2VxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvY2lyY3VtZmxleCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbnRpbGRlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVaHVuZ2FydW1sYXV0J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFYWN1dGUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VtYWNyb24nXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dicmV2ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lcXVhcnRlciddID0gNzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnU2Nhcm9uJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTY29tbWFhY2NlbnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09odW5nYXJ1bWxhdXQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RlZ3JlZSddID0gNDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2dyYXZlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydDY2Fyb24nXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VncmF2ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmFkaWNhbCddID0gNDUzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRGNhcm9uJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyY29tbWFhY2NlbnQnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ050aWxkZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3RpbGRlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydSY29tbWFhY2NlbnQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xjb21tYWFjY2VudCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQXRpbGRlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBb2dvbmVrJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBcmluZyddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT3RpbGRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6ZG90YWNjZW50J10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFY2Fyb24nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lvZ29uZWsnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2tjb21tYWFjY2VudCddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbWludXMnXSA9IDY3NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0ljaXJjdW1mbGV4J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduY2Fyb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3Rjb21tYWFjY2VudCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbG9naWNhbG5vdCddID0gNjc1O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2RpZXJlc2lzJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1ZGllcmVzaXMnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25vdGVxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydnY29tbWFhY2NlbnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2V0aCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnemNhcm9uJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduY29tbWFhY2NlbnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29uZXN1cGVyaW9yJ10gPSAzMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpbWFjcm9uJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFdXJvJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0WydaYXBmRGluZ2JhdHMnXSA9ICgwLCBfdXRpbC5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzcGFjZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTEnXSA9IDk3NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2EyJ10gPSA5NjE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMjAyJ10gPSA5NzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMyddID0gOTgwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTQnXSA9IDcxOTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E1J10gPSA3ODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTE5J10gPSA3OTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTE4J10gPSA3OTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTE3J10gPSA2OTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTEnXSA9IDk2MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMiddID0gOTM5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTEzJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTQnXSA9IDg1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNSddID0gOTExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTE2J10gPSA5MzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTA1J10gPSA5MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTcnXSA9IDk0NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExOCddID0gOTc0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTE5J10gPSA3NTU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMjAnXSA9IDg0NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2EyMSddID0gNzYyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTIyJ10gPSA3NjE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMjMnXSA9IDU3MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2EyNCddID0gNjc3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTI1J10gPSA3NjM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMjYnXSA9IDc2MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2EyNyddID0gNzU5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTI4J10gPSA3NTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNiddID0gNDk0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTcnXSA9IDU1MjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E4J10gPSA1Mzc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhOSddID0gNTc3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTEwJ10gPSA2OTI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMjknXSA9IDc4NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2EzMCddID0gNzg4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTMxJ10gPSA3ODg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMzInXSA9IDc5MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2EzMyddID0gNzkzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTM0J10gPSA3OTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMzUnXSA9IDgxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2EzNiddID0gODIzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTM3J10gPSA3ODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMzgnXSA9IDg0MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2EzOSddID0gODIzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTQwJ10gPSA4MzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNDEnXSA9IDgxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E0MiddID0gODMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTQzJ10gPSA5MjM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNDQnXSA9IDc0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E0NSddID0gNzIzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTQ2J10gPSA3NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNDcnXSA9IDc5MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E0OCddID0gNzkyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTQ5J10gPSA2OTU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNTAnXSA9IDc3NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E1MSddID0gNzY4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTUyJ10gPSA3OTI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNTMnXSA9IDc1OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E1NCddID0gNzA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTU1J10gPSA3MDg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNTYnXSA9IDY4MjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E1NyddID0gNzAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTU4J10gPSA4MjY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNTknXSA9IDgxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E2MCddID0gNzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTYxJ10gPSA3ODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNjInXSA9IDcwNztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E2MyddID0gNjg3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTY0J10gPSA2OTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNjUnXSA9IDY4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E2NiddID0gNzg2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTY3J10gPSA3ODc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNjgnXSA9IDcxMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E2OSddID0gNzkxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTcwJ10gPSA3ODU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNzEnXSA9IDc5MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E3MiddID0gODczO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTczJ10gPSA3NjE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNzQnXSA9IDc2MjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2EyMDMnXSA9IDc2MjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E3NSddID0gNzU5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTIwNCddID0gNzU5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTc2J10gPSA4OTI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNzcnXSA9IDg5MjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E3OCddID0gNzg4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTc5J10gPSA3ODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhODEnXSA9IDQzODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E4MiddID0gMTM4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTgzJ10gPSAyNzc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhODQnXSA9IDQxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E5NyddID0gMzkyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTk4J10gPSAzOTI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhOTknXSA9IDY2ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMDAnXSA9IDY2ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E4OSddID0gMzkwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTkwJ10gPSAzOTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhOTMnXSA9IDMxNztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E5NCddID0gMzE3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTkxJ10gPSAyNzY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhOTInXSA9IDI3NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2EyMDUnXSA9IDUwOTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E4NSddID0gNTA5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTIwNiddID0gNDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTg2J10gPSA0MTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhODcnXSA9IDIzNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E4OCddID0gMjM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTk1J10gPSAzMzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhOTYnXSA9IDMzNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMDEnXSA9IDczMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMDInXSA9IDU0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMDMnXSA9IDU0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMDQnXSA9IDkxMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMDYnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMDcnXSA9IDc2MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMDgnXSA9IDc2MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMTInXSA9IDc3NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMTEnXSA9IDU5NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMTAnXSA9IDY5NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMDknXSA9IDYyNjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMjAnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMjEnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMjInXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMjMnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMjQnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMjUnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMjYnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMjcnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMjgnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMjknXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMzAnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMzEnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMzInXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMzMnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMzQnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMzUnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMzYnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMzcnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMzgnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMzknXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNDAnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNDEnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNDInXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNDMnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNDQnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNDUnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNDYnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNDcnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNDgnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNDknXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNTAnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNTEnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNTInXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNTMnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNTQnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNTUnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNTYnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNTcnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNTgnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNTknXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNjAnXSA9IDg5NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNjEnXSA9IDgzODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNjMnXSA9IDEwMTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTY0J10gPSA0NTg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTk2J10gPSA3NDg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTY1J10gPSA5MjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTkyJ10gPSA3NDg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTY2J10gPSA5MTg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTY3J10gPSA5Mjc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTY4J10gPSA5Mjg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTY5J10gPSA5Mjg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTcwJ10gPSA4MzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTcxJ10gPSA4NzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTcyJ10gPSA4Mjg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTczJ10gPSA5MjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTYyJ10gPSA5MjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTc0J10gPSA5MTc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTc1J10gPSA5MzA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTc2J10gPSA5MzE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTc3J10gPSA0NjM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTc4J10gPSA4ODM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTc5J10gPSA4MzY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTkzJ10gPSA4MzY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTgwJ10gPSA4Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTk5J10gPSA4Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTgxJ10gPSA2OTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMjAwJ10gPSA2OTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTgyJ10gPSA4NzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMjAxJ10gPSA4NzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTgzJ10gPSA3NjA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTg0J10gPSA5NDY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTk3J10gPSA3NzE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTg1J10gPSA4NjU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTk0J10gPSA3NzE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTk4J10gPSA4ODg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTg2J10gPSA5Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTk1J10gPSA4ODg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTg3J10gPSA4MzE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTg4J10gPSA4NzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTg5J10gPSA5Mjc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTkwJ10gPSA5NzA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTkxJ10gPSA5MTg7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuZ2V0TWV0cmljcyA9IGdldE1ldHJpY3M7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE4NSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuaXNQREZGdW5jdGlvbiA9IGlzUERGRnVuY3Rpb247XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Qb3N0U2NyaXB0Q29tcGlsZXIgPSBleHBvcnRzLlBvc3RTY3JpcHRFdmFsdWF0b3IgPSBleHBvcnRzLlBERkZ1bmN0aW9uRmFjdG9yeSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3ByaW1pdGl2ZXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1NSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3BzX3BhcnNlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTg2KTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuICAgICAgICAgICAgICAgIHZhciBJc0V2YWxTdXBwb3J0ZWRDYWNoZWQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAndmFsdWUnLCAoMCwgX3V0aWwuaXNFdmFsU3VwcG9ydGVkKSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBQREZGdW5jdGlvbkZhY3RvcnkgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBERkZ1bmN0aW9uRmFjdG9yeShfcmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhyZWYgPSBfcmVmLnhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYkaXNFdmFsU3VwcG9ydGVkID0gX3JlZi5pc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZCA9IF9yZWYkaXNFdmFsU3VwcG9ydGVkID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRpc0V2YWxTdXBwb3J0ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUERGRnVuY3Rpb25GYWN0b3J5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0V2YWxTdXBwb3J0ZWQgPSBpc0V2YWxTdXBwb3J0ZWQgIT09IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoUERGRnVuY3Rpb25GYWN0b3J5LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjcmVhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlKGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQREZGdW5jdGlvbi5wYXJzZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQ6IHRoaXMuaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm46IGZuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY3JlYXRlRnJvbUFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShmbk9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUERGRnVuY3Rpb24ucGFyc2VBcnJheSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQ6IHRoaXMuaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5PYmo6IGZuT2JqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBERkZ1bmN0aW9uRmFjdG9yeTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QREZGdW5jdGlvbkZhY3RvcnkgPSBQREZGdW5jdGlvbkZhY3Rvcnk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB0b051bWJlckFycmF5KGFycikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFycltpXSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtfaV0gPSArYXJyW19pXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgUERGRnVuY3Rpb24gPSBmdW5jdGlvbiBQREZGdW5jdGlvbkNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBDT05TVFJVQ1RfU0FNUExFRCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBDT05TVFJVQ1RfSU5URVJQT0xBVEVEID0gMjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIENPTlNUUlVDVF9TVElDSEVEID0gMztcbiAgICAgICAgICAgICAgICAgICAgdmFyIENPTlNUUlVDVF9QT1NUU0NSSVBUID0gNDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFNhbXBsZUFycmF5OiBmdW5jdGlvbiBnZXRTYW1wbGVBcnJheShzaXplLCBvdXRwdXRTaXplLCBicHMsIHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBpaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gc2l6ZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCAqPSBzaXplW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCAqPSBvdXRwdXRTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlU2l6ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVCdWYgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzYW1wbGVNdWwgPSAxLjAgLyAoTWF0aC5wb3coMi4wLCBicHMpIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ckJ5dGVzID0gc3RyZWFtLmdldEJ5dGVzKChsZW5ndGggKiBicHMgKyA3KSAvIDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJJZHggPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjb2RlU2l6ZSA8IGJwcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZUJ1ZiA8PD0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVCdWYgfD0gc3RyQnl0ZXNbc3RySWR4KytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZVNpemUgKz0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVTaXplIC09IGJwcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSAoY29kZUJ1ZiA+PiBjb2RlU2l6ZSkgKiBzYW1wbGVNdWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVCdWYgJj0gKDEgPDwgY29kZVNpemUpIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SVI6IGZ1bmN0aW9uIGdldElSKF9yZWYyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhyZWYgPSBfcmVmMi54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQgPSBfcmVmMi5pc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gX3JlZjIuZm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpY3QgPSBmbi5kaWN0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkaWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QgPSBmbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZXMgPSBbdGhpcy5jb25zdHJ1Y3RTYW1wbGVkLCBudWxsLCB0aGlzLmNvbnN0cnVjdEludGVycG9sYXRlZCwgdGhpcy5jb25zdHJ1Y3RTdGljaGVkLCB0aGlzLmNvbnN0cnVjdFBvc3RTY3JpcHRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlTnVtID0gZGljdC5nZXQoJ0Z1bmN0aW9uVHlwZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlRm4gPSB0eXBlc1t0eXBlTnVtXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHlwZUZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignVW5rbm93biB0eXBlIG9mIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVGbi5jYWxsKHRoaXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZjogeHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmFsU3VwcG9ydGVkOiBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuOiBmbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdDogZGljdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb21JUjogZnVuY3Rpb24gZnJvbUlSKF9yZWYzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhyZWYgPSBfcmVmMy54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQgPSBfcmVmMy5pc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSID0gX3JlZjMuSVI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBJUlswXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENPTlNUUlVDVF9TQU1QTEVEOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0U2FtcGxlZEZyb21JUih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZjogeHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQ6IGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUjogSVJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ09OU1RSVUNUX0lOVEVSUE9MQVRFRDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdEludGVycG9sYXRlZEZyb21JUih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZjogeHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQ6IGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUjogSVJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ09OU1RSVUNUX1NUSUNIRUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3RTdGljaGVkRnJvbUlSKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmOiB4cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZDogaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSOiBJUlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdFBvc3RTY3JpcHRGcm9tSVIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWY6IHhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmFsU3VwcG9ydGVkOiBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVI6IElSXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlKF9yZWY0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhyZWYgPSBfcmVmNC54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQgPSBfcmVmNC5pc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gX3JlZjQuZm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIElSID0gdGhpcy5nZXRJUih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWY6IHhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZDogaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbjogZm5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mcm9tSVIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmOiB4cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQ6IGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVI6IElSXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VBcnJheTogZnVuY3Rpb24gcGFyc2VBcnJheShfcmVmNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4cmVmID0gX3JlZjUueHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmFsU3VwcG9ydGVkID0gX3JlZjUuaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbk9iaiA9IF9yZWY1LmZuT2JqO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGZuT2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmOiB4cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmFsU3VwcG9ydGVkOiBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbjogZm5PYmpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuQXJyYXkgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IGZuT2JqLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5BcnJheS5wdXNoKHRoaXMucGFyc2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZjogeHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZDogaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm46IHhyZWYuZmV0Y2hJZlJlZihmbk9ialtqXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZm5BcnJheS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbkFycmF5W2ldKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0ICsgaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdFNhbXBsZWQ6IGZ1bmN0aW9uIGNvbnN0cnVjdFNhbXBsZWQoX3JlZjYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IF9yZWY2LnhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZCA9IF9yZWY2LmlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBfcmVmNi5mbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdCA9IF9yZWY2LmRpY3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB0b011bHRpQXJyYXkoYXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dExlbmd0aCA9IGFyci5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdXQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0TGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dFtpbmRleF0gPSBbYXJyW2ldLCBhcnJbaSArIDFdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb21haW4gPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoJ0RvbWFpbicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoJ1JhbmdlJykpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkb21haW4gfHwgIXJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignTm8gZG9tYWluIG9yIHJhbmdlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0U2l6ZSA9IGRvbWFpbi5sZW5ndGggLyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdXRwdXRTaXplID0gcmFuZ2UubGVuZ3RoIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW4gPSB0b011bHRpQXJyYXkoZG9tYWluKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRvTXVsdGlBcnJheShyYW5nZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoJ1NpemUnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJwcyA9IGRpY3QuZ2V0KCdCaXRzUGVyU2FtcGxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9yZGVyID0gZGljdC5nZXQoJ09yZGVyJykgfHwgMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmRlciAhPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ05vIHN1cHBvcnQgZm9yIGN1YmljIHNwbGluZSBpbnRlcnBvbGF0aW9uOiAnICsgb3JkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNvZGUgPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoJ0VuY29kZScpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZW5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXRTaXplOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZS5wdXNoKFswLCBzaXplW2ldIC0gMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlID0gdG9NdWx0aUFycmF5KGVuY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kZSA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheSgnRGVjb2RlJykpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkZWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlID0gcmFuZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlID0gdG9NdWx0aUFycmF5KGRlY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNhbXBsZXMgPSB0aGlzLmdldFNhbXBsZUFycmF5KHNpemUsIG91dHB1dFNpemUsIGJwcywgZm4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbQ09OU1RSVUNUX1NBTVBMRUQsIGlucHV0U2l6ZSwgZG9tYWluLCBlbmNvZGUsIGRlY29kZSwgc2FtcGxlcywgc2l6ZSwgb3V0cHV0U2l6ZSwgTWF0aC5wb3coMiwgYnBzKSAtIDEsIHJhbmdlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RTYW1wbGVkRnJvbUlSOiBmdW5jdGlvbiBjb25zdHJ1Y3RTYW1wbGVkRnJvbUlSKF9yZWY3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhyZWYgPSBfcmVmNy54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQgPSBfcmVmNy5pc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSID0gX3JlZjcuSVI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBpbnRlcnBvbGF0ZSh4LCB4bWluLCB4bWF4LCB5bWluLCB5bWF4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB5bWluICsgKHggLSB4bWluKSAqICgoeW1heCAtIHltaW4pIC8gKHhtYXggLSB4bWluKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdFNhbXBsZWRGcm9tSVJSZXN1bHQoc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSBJUlsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvbWFpbiA9IElSWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jb2RlID0gSVJbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvZGUgPSBJUls0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNhbXBsZXMgPSBJUls1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBJUls2XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSBJUls3XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gSVJbOV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdWJlVmVydGljZXMgPSAxIDw8IG07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdWJlTiA9IG5ldyBGbG9hdDY0QXJyYXkoY3ViZVZlcnRpY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1YmVWZXJ0ZXggPSBuZXcgVWludDMyQXJyYXkoY3ViZVZlcnRpY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGN1YmVWZXJ0aWNlczsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdWJlTltqXSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgayA9IG4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb21haW5fMmkgPSBkb21haW5baV1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9tYWluXzJpXzEgPSBkb21haW5baV1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeGkgPSBNYXRoLm1pbihNYXRoLm1heChzcmNbc3JjT2Zmc2V0ICsgaV0sIGRvbWFpbl8yaSksIGRvbWFpbl8yaV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gaW50ZXJwb2xhdGUoeGksIGRvbWFpbl8yaSwgZG9tYWluXzJpXzEsIGVuY29kZVtpXVswXSwgZW5jb2RlW2ldWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplX2kgPSBzaXplW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IE1hdGgubWluKE1hdGgubWF4KGUsIDApLCBzaXplX2kgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlMCA9IGUgPCBzaXplX2kgLSAxID8gTWF0aC5mbG9vcihlKSA6IGUgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG4wID0gZTAgKyAxIC0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuMSA9IGUgLSBlMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQwID0gZTAgKiBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldDEgPSBvZmZzZXQwICsgaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGN1YmVWZXJ0aWNlczsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogJiBwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ViZU5bal0gKj0gbjE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1YmVWZXJ0ZXhbal0gKz0gb2Zmc2V0MTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdWJlTltqXSAqPSBuMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ViZVZlcnRleFtqXSArPSBvZmZzZXQwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayAqPSBzaXplX2k7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPDw9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbjsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmogPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3ViZVZlcnRpY2VzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaiArPSBzYW1wbGVzW2N1YmVWZXJ0ZXhbaV0gKyBqXSAqIGN1YmVOW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaiA9IGludGVycG9sYXRlKHJqLCAwLCAxLCBkZWNvZGVbal1bMF0sIGRlY29kZVtqXVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RPZmZzZXQgKyBqXSA9IE1hdGgubWluKE1hdGgubWF4KHJqLCByYW5nZVtqXVswXSksIHJhbmdlW2pdWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0SW50ZXJwb2xhdGVkOiBmdW5jdGlvbiBjb25zdHJ1Y3RJbnRlcnBvbGF0ZWQoX3JlZjgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IF9yZWY4LnhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZCA9IF9yZWY4LmlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBfcmVmOC5mbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdCA9IF9yZWY4LmRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMwID0gdG9OdW1iZXJBcnJheShkaWN0LmdldEFycmF5KCdDMCcpKSB8fCBbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMxID0gdG9OdW1iZXJBcnJheShkaWN0LmdldEFycmF5KCdDMScpKSB8fCBbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSBkaWN0LmdldCgnTicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBjMC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpZmYgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZi5wdXNoKGMxW2ldIC0gYzBbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbQ09OU1RSVUNUX0lOVEVSUE9MQVRFRCwgYzAsIGRpZmYsIG5dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdEludGVycG9sYXRlZEZyb21JUjogZnVuY3Rpb24gY29uc3RydWN0SW50ZXJwb2xhdGVkRnJvbUlSKF9yZWY5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhyZWYgPSBfcmVmOS54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQgPSBfcmVmOS5pc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSID0gX3JlZjkuSVI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMwID0gSVJbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpZmYgPSBJUlsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IElSWzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBkaWZmLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0SW50ZXJwb2xhdGVkRnJvbUlSUmVzdWx0KHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4ID0gbiA9PT0gMSA/IHNyY1tzcmNPZmZzZXRdIDogTWF0aC5wb3coc3JjW3NyY09mZnNldF0sIG4pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbZGVzdE9mZnNldCArIGpdID0gYzBbal0gKyB4ICogZGlmZltqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0U3RpY2hlZDogZnVuY3Rpb24gY29uc3RydWN0U3RpY2hlZChfcmVmMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IF9yZWYxMC54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQgPSBfcmVmMTAuaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IF9yZWYxMC5mbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdCA9IF9yZWYxMC5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb21haW4gPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoJ0RvbWFpbicpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZG9tYWluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignTm8gZG9tYWluJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0U2l6ZSA9IGRvbWFpbi5sZW5ndGggLyAyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2l6ZSAhPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0JhZCBkb21haW4gZm9yIHN0aWNoZWQgZnVuY3Rpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm5SZWZzID0gZGljdC5nZXQoJ0Z1bmN0aW9ucycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbnMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGZuUmVmcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZucy5wdXNoKHRoaXMucGFyc2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZjogeHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZDogaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm46IHhyZWYuZmV0Y2hJZlJlZihmblJlZnNbaV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYm91bmRzID0gdG9OdW1iZXJBcnJheShkaWN0LmdldEFycmF5KCdCb3VuZHMnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY29kZSA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheSgnRW5jb2RlJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbQ09OU1RSVUNUX1NUSUNIRUQsIGRvbWFpbiwgYm91bmRzLCBlbmNvZGUsIGZuc107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0U3RpY2hlZEZyb21JUjogZnVuY3Rpb24gY29uc3RydWN0U3RpY2hlZEZyb21JUihfcmVmMTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IF9yZWYxMS54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQgPSBfcmVmMTEuaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUiA9IF9yZWYxMS5JUjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9tYWluID0gSVJbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IElSWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNvZGUgPSBJUlszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm5zID0gSVJbNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcEJ1ZiA9IG5ldyBGbG9hdDMyQXJyYXkoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdFN0aWNoZWRGcm9tSVJSZXN1bHQoc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsaXAgPSBmdW5jdGlvbiBjb25zdHJ1Y3RTdGljaGVkRnJvbUlSQ2xpcCh2LCBtaW4sIG1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPiBtYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gbWF4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2IDwgbWluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IG1pbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHYgPSBjbGlwKHNyY1tzcmNPZmZzZXRdLCBkb21haW5bMF0sIGRvbWFpblsxXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gYm91bmRzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2IDwgYm91bmRzW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG1pbiA9IGRvbWFpblswXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaW4gPSBib3VuZHNbaSAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRtYXggPSBkb21haW5bMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBib3VuZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWF4ID0gYm91bmRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJtaW4gPSBlbmNvZGVbMiAqIGldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm1heCA9IGVuY29kZVsyICogaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBCdWZbMF0gPSBkbWluID09PSBkbWF4ID8gcm1pbiA6IHJtaW4gKyAodiAtIGRtaW4pICogKHJtYXggLSBybWluKSAvIChkbWF4IC0gZG1pbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuc1tpXSh0bXBCdWYsIDAsIGRlc3QsIGRlc3RPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0UG9zdFNjcmlwdDogZnVuY3Rpb24gY29uc3RydWN0UG9zdFNjcmlwdChfcmVmMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IF9yZWYxMi54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQgPSBfcmVmMTIuaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IF9yZWYxMi5mbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdCA9IF9yZWYxMi5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb21haW4gPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoJ0RvbWFpbicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoJ1JhbmdlJykpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkb21haW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdObyBkb21haW4uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ05vIHJhbmdlLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXhlciA9IG5ldyBfcHNfcGFyc2VyLlBvc3RTY3JpcHRMZXhlcihmbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBfcHNfcGFyc2VyLlBvc3RTY3JpcHRQYXJzZXIobGV4ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlID0gcGFyc2VyLnBhcnNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtDT05TVFJVQ1RfUE9TVFNDUklQVCwgZG9tYWluLCByYW5nZSwgY29kZV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0UG9zdFNjcmlwdEZyb21JUjogZnVuY3Rpb24gY29uc3RydWN0UG9zdFNjcmlwdEZyb21JUihfcmVmMTMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IF9yZWYxMy54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQgPSBfcmVmMTMuaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUiA9IF9yZWYxMy5JUjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9tYWluID0gSVJbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gSVJbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSBJUlszXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0V2YWxTdXBwb3J0ZWQgJiYgSXNFdmFsU3VwcG9ydGVkQ2FjaGVkLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21waWxlZCA9IG5ldyBQb3N0U2NyaXB0Q29tcGlsZXIoKS5jb21waWxlKGNvZGUsIGRvbWFpbiwgcmFuZ2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21waWxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbignc3JjJywgJ3NyY09mZnNldCcsICdkZXN0JywgJ2Rlc3RPZmZzZXQnLCBjb21waWxlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ1VuYWJsZSB0byBjb21waWxlIFBTIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bU91dHB1dHMgPSByYW5nZS5sZW5ndGggPj4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtSW5wdXRzID0gZG9tYWluLmxlbmd0aCA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBldmFsdWF0b3IgPSBuZXcgUG9zdFNjcmlwdEV2YWx1YXRvcihjb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBNQVhfQ0FDSEVfU0laRSA9IDIwNDggKiA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWNoZV9hdmFpbGFibGUgPSBNQVhfQ0FDSEVfU0laRTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wQnVmID0gbmV3IEZsb2F0MzJBcnJheShudW1JbnB1dHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RQb3N0U2NyaXB0RnJvbUlSUmVzdWx0KHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSB0bXBCdWY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bUlucHV0czsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNyY1tzcmNPZmZzZXQgKyBpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0W2ldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgKz0gdmFsdWUgKyAnXyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FjaGVkVmFsdWUgPSBjYWNoZVtrZXldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZWRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LnNldChjYWNoZWRWYWx1ZSwgZGVzdE9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3V0cHV0ID0gbmV3IEZsb2F0MzJBcnJheShudW1PdXRwdXRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YWNrID0gZXZhbHVhdG9yLmV4ZWN1dGUoaW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhY2tJbmRleCA9IHN0YWNrLmxlbmd0aCAtIG51bU91dHB1dHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bU91dHB1dHM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzdGFja1tzdGFja0luZGV4ICsgaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYm91bmQgPSByYW5nZVtpICogMl07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA8IGJvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBib3VuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmQgPSByYW5nZVtpICogMiArIDFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID4gYm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBib3VuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtpXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlX2F2YWlsYWJsZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlX2F2YWlsYWJsZS0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVba2V5XSA9IG91dHB1dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Quc2V0KG91dHB1dCwgZGVzdE9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc1BERkZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZuRGljdDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoX3R5cGVvZih2KSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KSh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm5EaWN0ID0gdjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKHYpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbkRpY3QgPSB2LmRpY3Q7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm5EaWN0LmhhcygnRnVuY3Rpb25UeXBlJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIFBvc3RTY3JpcHRTdGFjayA9IGZ1bmN0aW9uIFBvc3RTY3JpcHRTdGFja0Nsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBNQVhfU1RBQ0tfU0laRSA9IDEwMDtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQb3N0U2NyaXB0U3RhY2soaW5pdGlhbFN0YWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gIWluaXRpYWxTdGFjayA/IFtdIDogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaW5pdGlhbFN0YWNrLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFBvc3RTY3JpcHRTdGFjay5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiBQb3N0U2NyaXB0U3RhY2tfcHVzaCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA+PSBNQVhfU1RBQ0tfU0laRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Bvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgb3ZlcmZsb3cuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3A6IGZ1bmN0aW9uIFBvc3RTY3JpcHRTdGFja19wb3AoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQb3N0U2NyaXB0IGZ1bmN0aW9uIHN0YWNrIHVuZGVyZmxvdy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3B5OiBmdW5jdGlvbiBQb3N0U2NyaXB0U3RhY2tfY29weShuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoICsgbiA+PSBNQVhfU1RBQ0tfU0laRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Bvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgb3ZlcmZsb3cuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YWNrID0gdGhpcy5zdGFjaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFjay5sZW5ndGggLSBuLCBqID0gbiAtIDE7IGogPj0gMDsgai0tLCBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChzdGFja1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBmdW5jdGlvbiBQb3N0U2NyaXB0U3RhY2tfaW5kZXgobikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaCh0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gbiAtIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xsOiBmdW5jdGlvbiBQb3N0U2NyaXB0U3RhY2tfcm9sbChuLCBwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YWNrID0gdGhpcy5zdGFjaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbCA9IHN0YWNrLmxlbmd0aCAtIG47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBzdGFjay5sZW5ndGggLSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gbCArIChwIC0gTWF0aC5mbG9vcihwIC8gbikgKiBuKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IGwsIGogPSByOyBpIDwgajsgaSsrLCBqLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHN0YWNrW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1tpXSA9IHN0YWNrW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1tqXSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gbCwgaiA9IGMgLSAxOyBpIDwgajsgaSsrLCBqLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHN0YWNrW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1tpXSA9IHN0YWNrW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1tqXSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gYywgaiA9IHI7IGkgPCBqOyBpKyssIGotLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gc3RhY2tbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrW2ldID0gc3RhY2tbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrW2pdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQb3N0U2NyaXB0U3RhY2s7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBvc3RTY3JpcHRFdmFsdWF0b3IgPSBmdW5jdGlvbiBQb3N0U2NyaXB0RXZhbHVhdG9yQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUG9zdFNjcmlwdEV2YWx1YXRvcihvcGVyYXRvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlcmF0b3JzID0gb3BlcmF0b3JzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgUG9zdFNjcmlwdEV2YWx1YXRvci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlOiBmdW5jdGlvbiBQb3N0U2NyaXB0RXZhbHVhdG9yX2V4ZWN1dGUoaW5pdGlhbFN0YWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YWNrID0gbmV3IFBvc3RTY3JpcHRTdGFjayhpbml0aWFsU3RhY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3BlcmF0b3JzID0gdGhpcy5vcGVyYXRvcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IG9wZXJhdG9ycy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wZXJhdG9yLCBhLCBiO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBvcGVyYXRvcnNbY291bnRlcisrXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wZXJhdG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChvcGVyYXRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2p6JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ZXIgPSBiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdqJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlciA9IGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Ficyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goTWF0aC5hYnMoYSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhZGQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChhICsgYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2FuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNCb29sKShhKSAmJiAoMCwgX3V0aWwuaXNCb29sKShiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgJiYgYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChhICYgYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2F0YW4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKE1hdGguYXRhbihhKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JpdHNoaWZ0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYSA8PCBiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgPj4gYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NlaWxpbmcnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKE1hdGguY2VpbChhKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvcHknOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jb3B5KGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjb3MnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKE1hdGguY29zKGEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnY3ZpJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2N2cic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Rpdic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgLyBiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZHVwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jb3B5KDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlcSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgPT09IGIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdleGNoJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5yb2xsKDIsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdleHAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChNYXRoLnBvdyhhLCBiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ZhbHNlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZmxvb3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKE1hdGguZmxvb3IoYSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdnZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgPj0gYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2d0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYSA+IGIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdpZGl2JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYSAvIGIgfCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5kZXgnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5pbmRleChhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChhIDw9IGIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsbic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goTWF0aC5sb2coYSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsb2cnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKE1hdGgubG9nKGEpIC8gTWF0aC5MTjEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbHQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChhIDwgYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21vZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgJSBiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbXVsJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYSAqIGIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICduZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgIT09IGIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICduZWcnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKC1hKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbm90JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzQm9vbCkoYSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCghYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh+YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ29yJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc0Jvb2wpKGEpICYmICgwLCBfdXRpbC5pc0Jvb2wpKGIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYSB8fCBiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgfCBiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncG9wJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncm9sbCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5yb2xsKGEsIGIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyb3VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goTWF0aC5yb3VuZChhKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Npbic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goTWF0aC5zaW4oYSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzcXJ0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChNYXRoLnNxcnQoYSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzdWInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChhIC0gYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RydWUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RydW5jYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IGEgPCAwID8gTWF0aC5jZWlsKGEpIDogTWF0aC5mbG9vcihhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd4b3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzQm9vbCkoYSkgJiYgKDAsIF91dGlsLmlzQm9vbCkoYikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChhICE9PSBiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgXiBiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJVbmtub3duIG9wZXJhdG9yIFwiLmNvbmNhdChvcGVyYXRvcikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YWNrLnN0YWNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUG9zdFNjcmlwdEV2YWx1YXRvcjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlBvc3RTY3JpcHRFdmFsdWF0b3IgPSBQb3N0U2NyaXB0RXZhbHVhdG9yO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBvc3RTY3JpcHRDb21waWxlciA9IGZ1bmN0aW9uIFBvc3RTY3JpcHRDb21waWxlckNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFzdE5vZGUodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEFzdE5vZGUucHJvdG90eXBlLnZpc2l0ID0gZnVuY3Rpb24gKHZpc2l0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ2Fic3RyYWN0IG1ldGhvZCcpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFzdEFyZ3VtZW50KGluZGV4LCBtaW4sIG1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQXN0Tm9kZS5jYWxsKHRoaXMsICdhcmdzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbiA9IG1pbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF4ID0gbWF4O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQXN0QXJndW1lbnQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBc3ROb2RlLnByb3RvdHlwZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgQXN0QXJndW1lbnQucHJvdG90eXBlLnZpc2l0ID0gZnVuY3Rpb24gKHZpc2l0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IudmlzaXRBcmd1bWVudCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBc3RMaXRlcmFsKG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgQXN0Tm9kZS5jYWxsKHRoaXMsICdsaXRlcmFsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm51bWJlciA9IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWluID0gbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXggPSBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBBc3RMaXRlcmFsLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQXN0Tm9kZS5wcm90b3R5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgIEFzdExpdGVyYWwucHJvdG90eXBlLnZpc2l0ID0gZnVuY3Rpb24gKHZpc2l0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IudmlzaXRMaXRlcmFsKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFzdEJpbmFyeU9wZXJhdGlvbihvcCwgYXJnMSwgYXJnMiwgbWluLCBtYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFzdE5vZGUuY2FsbCh0aGlzLCAnYmluYXJ5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wID0gb3A7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFyZzEgPSBhcmcxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcmcyID0gYXJnMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWluID0gbWluO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXggPSBtYXg7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBBc3RCaW5hcnlPcGVyYXRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBc3ROb2RlLnByb3RvdHlwZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgQXN0QmluYXJ5T3BlcmF0aW9uLnByb3RvdHlwZS52aXNpdCA9IGZ1bmN0aW9uICh2aXNpdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLnZpc2l0QmluYXJ5T3BlcmF0aW9uKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFzdE1pbihhcmcsIG1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQXN0Tm9kZS5jYWxsKHRoaXMsICdtYXgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXJnID0gYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5taW4gPSBhcmcubWluO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXggPSBtYXg7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBBc3RNaW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBc3ROb2RlLnByb3RvdHlwZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgQXN0TWluLnByb3RvdHlwZS52aXNpdCA9IGZ1bmN0aW9uICh2aXNpdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLnZpc2l0TWluKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFzdFZhcmlhYmxlKGluZGV4LCBtaW4sIG1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQXN0Tm9kZS5jYWxsKHRoaXMsICd2YXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWluID0gbWluO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXggPSBtYXg7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBBc3RWYXJpYWJsZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFzdE5vZGUucHJvdG90eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICBBc3RWYXJpYWJsZS5wcm90b3R5cGUudmlzaXQgPSBmdW5jdGlvbiAodmlzaXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci52aXNpdFZhcmlhYmxlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFzdFZhcmlhYmxlRGVmaW5pdGlvbih2YXJpYWJsZSwgYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBBc3ROb2RlLmNhbGwodGhpcywgJ2RlZmluaXRpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFyaWFibGUgPSB2YXJpYWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXJnID0gYXJnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQXN0VmFyaWFibGVEZWZpbml0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQXN0Tm9kZS5wcm90b3R5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgIEFzdFZhcmlhYmxlRGVmaW5pdGlvbi5wcm90b3R5cGUudmlzaXQgPSBmdW5jdGlvbiAodmlzaXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci52aXNpdFZhcmlhYmxlRGVmaW5pdGlvbih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3IoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3IucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRBcmd1bWVudDogZnVuY3Rpb24gdmlzaXRBcmd1bWVudChhcmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnRzLnB1c2goJ01hdGgubWF4KCcsIGFyZy5taW4sICcsIE1hdGgubWluKCcsIGFyZy5tYXgsICcsIHNyY1tzcmNPZmZzZXQgKyAnLCBhcmcuaW5kZXgsICddKSknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpdFZhcmlhYmxlOiBmdW5jdGlvbiB2aXNpdFZhcmlhYmxlKHZhcmlhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJ0cy5wdXNoKCd2JywgdmFyaWFibGUuaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0TGl0ZXJhbDogZnVuY3Rpb24gdmlzaXRMaXRlcmFsKGxpdGVyYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnRzLnB1c2gobGl0ZXJhbC5udW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0QmluYXJ5T3BlcmF0aW9uOiBmdW5jdGlvbiB2aXNpdEJpbmFyeU9wZXJhdGlvbihvcGVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnRzLnB1c2goJygnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24uYXJnMS52aXNpdCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnRzLnB1c2goJyAnLCBvcGVyYXRpb24ub3AsICcgJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLmFyZzIudmlzaXQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJ0cy5wdXNoKCcpJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRWYXJpYWJsZURlZmluaXRpb246IGZ1bmN0aW9uIHZpc2l0VmFyaWFibGVEZWZpbml0aW9uKGRlZmluaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnRzLnB1c2goJ3ZhciAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uLnZhcmlhYmxlLnZpc2l0KHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFydHMucHVzaCgnID0gJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbi5hcmcudmlzaXQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJ0cy5wdXNoKCc7Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRNaW46IGZ1bmN0aW9uIHZpc2l0TWluKG1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFydHMucHVzaCgnTWF0aC5taW4oJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4LmFyZy52aXNpdCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnRzLnB1c2goJywgJywgbWF4Lm1heCwgJyknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFydHMuam9pbignJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYnVpbGRBZGRPcGVyYXRpb24obnVtMSwgbnVtMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bTIudHlwZSA9PT0gJ2xpdGVyYWwnICYmIG51bTIubnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW0xLnR5cGUgPT09ICdsaXRlcmFsJyAmJiBudW0xLm51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudW0yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtMi50eXBlID09PSAnbGl0ZXJhbCcgJiYgbnVtMS50eXBlID09PSAnbGl0ZXJhbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFzdExpdGVyYWwobnVtMS5udW1iZXIgKyBudW0yLm51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKCcrJywgbnVtMSwgbnVtMiwgbnVtMS5taW4gKyBudW0yLm1pbiwgbnVtMS5tYXggKyBudW0yLm1heCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBidWlsZE11bE9wZXJhdGlvbihudW0xLCBudW0yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtMi50eXBlID09PSAnbGl0ZXJhbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtMi5udW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBc3RMaXRlcmFsKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtMi5udW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW0xLnR5cGUgPT09ICdsaXRlcmFsJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFzdExpdGVyYWwobnVtMS5udW1iZXIgKiBudW0yLm51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtMS50eXBlID09PSAnbGl0ZXJhbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtMS5udW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBc3RMaXRlcmFsKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtMS5udW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWluID0gTWF0aC5taW4obnVtMS5taW4gKiBudW0yLm1pbiwgbnVtMS5taW4gKiBudW0yLm1heCwgbnVtMS5tYXggKiBudW0yLm1pbiwgbnVtMS5tYXggKiBudW0yLm1heCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4ID0gTWF0aC5tYXgobnVtMS5taW4gKiBudW0yLm1pbiwgbnVtMS5taW4gKiBudW0yLm1heCwgbnVtMS5tYXggKiBudW0yLm1pbiwgbnVtMS5tYXggKiBudW0yLm1heCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFzdEJpbmFyeU9wZXJhdGlvbignKicsIG51bTEsIG51bTIsIG1pbiwgbWF4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJ1aWxkU3ViT3BlcmF0aW9uKG51bTEsIG51bTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW0yLnR5cGUgPT09ICdsaXRlcmFsJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW0yLm51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bTEudHlwZSA9PT0gJ2xpdGVyYWwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXN0TGl0ZXJhbChudW0xLm51bWJlciAtIG51bTIubnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW0yLnR5cGUgPT09ICdiaW5hcnknICYmIG51bTIub3AgPT09ICctJyAmJiBudW0xLnR5cGUgPT09ICdsaXRlcmFsJyAmJiBudW0xLm51bWJlciA9PT0gMSAmJiBudW0yLmFyZzEudHlwZSA9PT0gJ2xpdGVyYWwnICYmIG51bTIuYXJnMS5udW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtMi5hcmcyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFzdEJpbmFyeU9wZXJhdGlvbignLScsIG51bTEsIG51bTIsIG51bTEubWluIC0gbnVtMi5tYXgsIG51bTEubWF4IC0gbnVtMi5taW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYnVpbGRNaW5PcGVyYXRpb24obnVtMSwgbWF4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtMS5taW4gPj0gbWF4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBc3RMaXRlcmFsKG1heCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bTEubWF4IDw9IG1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudW0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFzdE1pbihudW0xLCBtYXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUG9zdFNjcmlwdENvbXBpbGVyKCkge31cblxuICAgICAgICAgICAgICAgICAgICBQb3N0U2NyaXB0Q29tcGlsZXIucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZTogZnVuY3Rpb24gUG9zdFNjcmlwdENvbXBpbGVyX2NvbXBpbGUoY29kZSwgZG9tYWluLCByYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFjayA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBpaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5zdHJ1Y3Rpb25zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0U2l6ZSA9IGRvbWFpbi5sZW5ndGggPj4gMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0U2l6ZSA9IHJhbmdlLmxlbmd0aCA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYXN0UmVnaXN0ZXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuLCBqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW0xLCBudW0yLCBhc3QxLCBhc3QyLCB0bXBWYXIsIGl0ZW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5wdXRTaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXcgQXN0QXJndW1lbnQoaSwgZG9tYWluW2kgKiAyXSwgZG9tYWluW2kgKiAyICsgMV0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGNvZGUubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtID0gY29kZVtpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKG5ldyBBc3RMaXRlcmFsKGl0ZW0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhZGQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bTIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0xID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChidWlsZEFkZE9wZXJhdGlvbihudW0xLCBudW0yKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2N2cic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ211bCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtMiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bTEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGJ1aWxkTXVsT3BlcmF0aW9uKG51bTEsIG51bTIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3ViJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0yID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtMSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYnVpbGRTdWJPcGVyYXRpb24obnVtMSwgbnVtMikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdleGNoJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3QxID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN0MiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYXN0MSwgYXN0Mik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3BvcCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2luZGV4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0xID0gc3RhY2sucG9wKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtMS50eXBlICE9PSAnbGl0ZXJhbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG51bTEubnVtYmVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPCAwIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG4pIHx8IHN0YWNrLmxlbmd0aCA8IG4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN0MSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIG4gLSAxXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhc3QxLnR5cGUgPT09ICdsaXRlcmFsJyB8fCBhc3QxLnR5cGUgPT09ICd2YXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYXN0MSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcFZhciA9IG5ldyBBc3RWYXJpYWJsZShsYXN0UmVnaXN0ZXIrKywgYXN0MS5taW4sIGFzdDEubWF4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1tzdGFjay5sZW5ndGggLSBuIC0gMV0gPSB0bXBWYXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0bXBWYXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucy5wdXNoKG5ldyBBc3RWYXJpYWJsZURlZmluaXRpb24odG1wVmFyLCBhc3QxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2R1cCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2RlW2kgKyAxXSA9PT0gJ251bWJlcicgJiYgY29kZVtpICsgMl0gPT09ICdndCcgJiYgY29kZVtpICsgM10gPT09IGkgKyA3ICYmIGNvZGVbaSArIDRdID09PSAnanonICYmIGNvZGVbaSArIDVdID09PSAncG9wJyAmJiBjb2RlW2kgKyA2XSA9PT0gY29kZVtpICsgMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtMSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGJ1aWxkTWluT3BlcmF0aW9uKG51bTEsIGNvZGVbaSArIDFdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN0MSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFzdDEudHlwZSA9PT0gJ2xpdGVyYWwnIHx8IGFzdDEudHlwZSA9PT0gJ3ZhcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChhc3QxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wVmFyID0gbmV3IEFzdFZhcmlhYmxlKGxhc3RSZWdpc3RlcisrLCBhc3QxLm1pbiwgYXN0MS5tYXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdID0gdG1wVmFyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godG1wVmFyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMucHVzaChuZXcgQXN0VmFyaWFibGVEZWZpbml0aW9uKHRtcFZhciwgYXN0MSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyb2xsJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0yID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtMSA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bTIudHlwZSAhPT0gJ2xpdGVyYWwnIHx8IG51bTEudHlwZSAhPT0gJ2xpdGVyYWwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBudW0yLm51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbnVtMS5udW1iZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA8PSAwIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG4pIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGopIHx8IHN0YWNrLmxlbmd0aCA8IG4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IChqICUgbiArIG4pICUgbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHN0YWNrLCBzdGFjay5zcGxpY2Uoc3RhY2subGVuZ3RoIC0gbiwgbiAtIGopKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggIT09IG91dHB1dFNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnN0cnVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGVtZW50QnVpbGRlciA9IG5ldyBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3IoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb24udmlzaXQoc3RhdGVtZW50QnVpbGRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHN0YXRlbWVudEJ1aWxkZXIudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suZm9yRWFjaChmdW5jdGlvbiAoZXhwciwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGVtZW50QnVpbGRlciA9IG5ldyBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3IoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwci52aXNpdChzdGF0ZW1lbnRCdWlsZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1pbiA9IHJhbmdlW2kgKiAyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heCA9IHJhbmdlW2kgKiAyICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdXQgPSBbc3RhdGVtZW50QnVpbGRlci50b1N0cmluZygpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWluID4gZXhwci5taW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC51bnNoaWZ0KCdNYXRoLm1heCgnLCBtaW4sICcsICcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnB1c2goJyknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXggPCBleHByLm1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnVuc2hpZnQoJ01hdGgubWluKCcsIG1heCwgJywgJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHVzaCgnKScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnVuc2hpZnQoJ2Rlc3RbZGVzdE9mZnNldCArICcsIGksICddID0gJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wdXNoKCc7Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG91dC5qb2luKCcnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKCdcXG4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBvc3RTY3JpcHRDb21waWxlcjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlBvc3RTY3JpcHRDb21waWxlciA9IFBvc3RTY3JpcHRDb21waWxlcjtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTg2ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Qb3N0U2NyaXB0UGFyc2VyID0gZXhwb3J0cy5Qb3N0U2NyaXB0TGV4ZXIgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9wcmltaXRpdmVzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTUpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgUG9zdFNjcmlwdFBhcnNlciA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUG9zdFNjcmlwdFBhcnNlcihsZXhlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQb3N0U2NyaXB0UGFyc2VyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGV4ZXIgPSBsZXhlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZXJhdG9ycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW4gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhQb3N0U2NyaXB0UGFyc2VyLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJuZXh0VG9rZW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbmV4dFRva2VuKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXYgPSB0aGlzLnRva2VuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuID0gdGhpcy5sZXhlci5nZXRUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiYWNjZXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFjY2VwdCh0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRva2VuLnR5cGUgPT09IHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImV4cGVjdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBleHBlY3QodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY2NlcHQodHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVW5leHBlY3RlZCBzeW1ib2w6IGZvdW5kIFwiLmNvbmNhdCh0aGlzLnRva2VuLnR5cGUsIFwiIGV4cGVjdGVkIFwiKS5jb25jYXQodHlwZSwgXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInBhcnNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdChQb3N0U2NyaXB0VG9rZW5UeXBlcy5MQlJBQ0UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnNlQmxvY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoUG9zdFNjcmlwdFRva2VuVHlwZXMuUkJSQUNFKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlcmF0b3JzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicGFyc2VCbG9ja1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZUJsb2NrKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWNjZXB0KFBvc3RTY3JpcHRUb2tlblR5cGVzLk5VTUJFUikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZXJhdG9ycy5wdXNoKHRoaXMucHJldi52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYWNjZXB0KFBvc3RTY3JpcHRUb2tlblR5cGVzLk9QRVJBVE9SKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlcmF0b3JzLnB1c2godGhpcy5wcmV2LnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5hY2NlcHQoUG9zdFNjcmlwdFRva2VuVHlwZXMuTEJSQUNFKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyc2VDb25kaXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJwYXJzZUNvbmRpdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZUNvbmRpdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmRpdGlvbkxvY2F0aW9uID0gdGhpcy5vcGVyYXRvcnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZXJhdG9ycy5wdXNoKG51bGwsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnNlQmxvY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoUG9zdFNjcmlwdFRva2VuVHlwZXMuUkJSQUNFKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY2NlcHQoUG9zdFNjcmlwdFRva2VuVHlwZXMuSUYpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZXJhdG9yc1tjb25kaXRpb25Mb2NhdGlvbl0gPSB0aGlzLm9wZXJhdG9ycy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZXJhdG9yc1tjb25kaXRpb25Mb2NhdGlvbiArIDFdID0gJ2p6JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFjY2VwdChQb3N0U2NyaXB0VG9rZW5UeXBlcy5MQlJBQ0UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganVtcExvY2F0aW9uID0gdGhpcy5vcGVyYXRvcnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVyYXRvcnMucHVzaChudWxsLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmRPZlRydWUgPSB0aGlzLm9wZXJhdG9ycy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnNlQmxvY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KFBvc3RTY3JpcHRUb2tlblR5cGVzLlJCUkFDRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdChQb3N0U2NyaXB0VG9rZW5UeXBlcy5JRkVMU0UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVyYXRvcnNbanVtcExvY2F0aW9uXSA9IHRoaXMub3BlcmF0b3JzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlcmF0b3JzW2p1bXBMb2NhdGlvbiArIDFdID0gJ2onO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVyYXRvcnNbY29uZGl0aW9uTG9jYXRpb25dID0gZW5kT2ZUcnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVyYXRvcnNbY29uZGl0aW9uTG9jYXRpb24gKyAxXSA9ICdqeic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1BTIEZ1bmN0aW9uOiBlcnJvciBwYXJzaW5nIGNvbmRpdGlvbmFsLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUG9zdFNjcmlwdFBhcnNlcjtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Qb3N0U2NyaXB0UGFyc2VyID0gUG9zdFNjcmlwdFBhcnNlcjtcbiAgICAgICAgICAgICAgICB2YXIgUG9zdFNjcmlwdFRva2VuVHlwZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIExCUkFDRTogMCxcbiAgICAgICAgICAgICAgICAgICAgUkJSQUNFOiAxLFxuICAgICAgICAgICAgICAgICAgICBOVU1CRVI6IDIsXG4gICAgICAgICAgICAgICAgICAgIE9QRVJBVE9SOiAzLFxuICAgICAgICAgICAgICAgICAgICBJRjogNCxcbiAgICAgICAgICAgICAgICAgICAgSUZFTFNFOiA1XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBQb3N0U2NyaXB0VG9rZW4gPSBmdW5jdGlvbiBQb3N0U2NyaXB0VG9rZW5DbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgb3BDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFBvc3RTY3JpcHRUb2tlbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUG9zdFNjcmlwdFRva2VuKHR5cGUsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQb3N0U2NyaXB0VG9rZW4pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoUG9zdFNjcmlwdFRva2VuLCBudWxsLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0T3BlcmF0b3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldE9wZXJhdG9yKG9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3BWYWx1ZSA9IG9wQ2FjaGVbb3BdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3BDYWNoZVtvcF0gPSBuZXcgUG9zdFNjcmlwdFRva2VuKFBvc3RTY3JpcHRUb2tlblR5cGVzLk9QRVJBVE9SLCBvcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJMQlJBQ0VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ0xCUkFDRScsIG5ldyBQb3N0U2NyaXB0VG9rZW4oUG9zdFNjcmlwdFRva2VuVHlwZXMuTEJSQUNFLCAneycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIlJCUkFDRVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnUkJSQUNFJywgbmV3IFBvc3RTY3JpcHRUb2tlbihQb3N0U2NyaXB0VG9rZW5UeXBlcy5SQlJBQ0UsICd9JykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiSUZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ0lGJywgbmV3IFBvc3RTY3JpcHRUb2tlbihQb3N0U2NyaXB0VG9rZW5UeXBlcy5JRiwgJ0lGJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiSUZFTFNFXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsICdJRkVMU0UnLCBuZXcgUG9zdFNjcmlwdFRva2VuKFBvc3RTY3JpcHRUb2tlblR5cGVzLklGRUxTRSwgJ0lGRUxTRScpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQb3N0U2NyaXB0VG9rZW47XG4gICAgICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBvc3RTY3JpcHRUb2tlbjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgUG9zdFNjcmlwdExleGVyID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQb3N0U2NyaXB0TGV4ZXIoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBvc3RTY3JpcHRMZXhlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJCdWYgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFBvc3RTY3JpcHRMZXhlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwibmV4dENoYXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbmV4dENoYXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRDaGFyID0gdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0VG9rZW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VG9rZW4oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuY3VycmVudENoYXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuRU9GO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgwQSB8fCBjaCA9PT0gMHgwRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghKDAsIF91dGlsLmlzU3BhY2UpKGNoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2ggfCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MzA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MzE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MzI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MzM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MzQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MzU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MzY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4Mzc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4Mzg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4Mzk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MkI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MkQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MkU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQb3N0U2NyaXB0VG9rZW4oUG9zdFNjcmlwdFRva2VuVHlwZXMuTlVNQkVSLCB0aGlzLmdldE51bWJlcigpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDdCOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUG9zdFNjcmlwdFRva2VuLkxCUkFDRTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDdEOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUG9zdFNjcmlwdFRva2VuLlJCUkFDRTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJCdWYgPSB0aGlzLnN0ckJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ckJ1ZlswXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY2ggPSB0aGlzLm5leHRDaGFyKCkpID49IDAgJiYgKGNoID49IDB4NDEgJiYgY2ggPD0gMHg1QSB8fCBjaCA+PSAweDYxICYmIGNoIDw9IDB4N0EpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gc3RyQnVmLmpvaW4oJycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RyLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2lmJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUG9zdFNjcmlwdFRva2VuLklGO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdpZmVsc2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQb3N0U2NyaXB0VG9rZW4uSUZFTFNFO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQb3N0U2NyaXB0VG9rZW4uZ2V0T3BlcmF0b3Ioc3RyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0TnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldE51bWJlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5jdXJyZW50Q2hhcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ckJ1ZiA9IHRoaXMuc3RyQnVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJCdWYubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmWzBdID0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChjaCA9IHRoaXMubmV4dENoYXIoKSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID49IDB4MzAgJiYgY2ggPD0gMHgzOSB8fCBjaCA9PT0gMHgyRCB8fCBjaCA9PT0gMHgyRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBwYXJzZUZsb2F0KHN0ckJ1Zi5qb2luKCcnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSW52YWxpZCBmbG9hdGluZyBwb2ludCBudW1iZXI6IFwiLmNvbmNhdCh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBvc3RTY3JpcHRMZXhlcjtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Qb3N0U2NyaXB0TGV4ZXIgPSBQb3N0U2NyaXB0TGV4ZXI7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE4NyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuTXVybXVySGFzaDNfNjQgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIE11cm11ckhhc2gzXzY0ID0gZnVuY3Rpb24gTXVybXVySGFzaDNfNjRDbG9zdXJlKHNlZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIE1BU0tfSElHSCA9IDB4ZmZmZjAwMDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBNQVNLX0xPVyA9IDB4ZmZmZjtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBNdXJtdXJIYXNoM182NChzZWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgU0VFRCA9IDB4YzNkMmUxZjA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmgxID0gc2VlZCA/IHNlZWQgJiAweGZmZmZmZmZmIDogU0VFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaDIgPSBzZWVkID8gc2VlZCAmIDB4ZmZmZmZmZmYgOiBTRUVEO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgTXVybXVySGFzaDNfNjQucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbiBNdXJtdXJIYXNoM182NF91cGRhdGUoaW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSwgbGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykoaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBuZXcgVWludDhBcnJheShpbnB1dC5sZW5ndGggKiAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBpbnB1dC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZSA9IGlucHV0LmNoYXJDb2RlQXQoaSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlIDw9IDB4ZmYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2xlbmd0aCsrXSA9IGNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbbGVuZ3RoKytdID0gY29kZSA+Pj4gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2xlbmd0aCsrXSA9IGNvZGUgJiAweGZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3V0aWwuaXNBcnJheUJ1ZmZlcikoaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBpbnB1dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gZGF0YS5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV3JvbmcgZGF0YSBmb3JtYXQgaW4gTXVybXVySGFzaDNfNjRfdXBkYXRlLiAnICsgJ0lucHV0IG11c3QgYmUgYSBzdHJpbmcgb3IgYXJyYXkuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2NrQ291bnRzID0gbGVuZ3RoID4+IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhaWxMZW5ndGggPSBsZW5ndGggLSBibG9ja0NvdW50cyAqIDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGFVaW50MzIgPSBuZXcgVWludDMyQXJyYXkoZGF0YS5idWZmZXIsIDAsIGJsb2NrQ291bnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgazEgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrMiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGgxID0gdGhpcy5oMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaDIgPSB0aGlzLmgyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBDMSA9IDB4Y2M5ZTJkNTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEMyID0gMHgxYjg3MzU5MztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgQzFfTE9XID0gQzEgJiBNQVNLX0xPVztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgQzJfTE9XID0gQzIgJiBNQVNLX0xPVztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBibG9ja0NvdW50czsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2kgJiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrMSA9IGRhdGFVaW50MzJbX2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazEgPSBrMSAqIEMxICYgTUFTS19ISUdIIHwgazEgKiBDMV9MT1cgJiBNQVNLX0xPVztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsxID0gazEgPDwgMTUgfCBrMSA+Pj4gMTc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrMSA9IGsxICogQzIgJiBNQVNLX0hJR0ggfCBrMSAqIEMyX0xPVyAmIE1BU0tfTE9XO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDEgXj0gazE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMSA9IGgxIDw8IDEzIHwgaDEgPj4+IDE5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDEgPSBoMSAqIDUgKyAweGU2NTQ2YjY0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazIgPSBkYXRhVWludDMyW19pXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsyID0gazIgKiBDMSAmIE1BU0tfSElHSCB8IGsyICogQzFfTE9XICYgTUFTS19MT1c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrMiA9IGsyIDw8IDE1IHwgazIgPj4+IDE3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazIgPSBrMiAqIEMyICYgTUFTS19ISUdIIHwgazIgKiBDMl9MT1cgJiBNQVNLX0xPVztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgyIF49IGsyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDIgPSBoMiA8PCAxMyB8IGgyID4+PiAxOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgyID0gaDIgKiA1ICsgMHhlNjU0NmI2NDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsxID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFpbExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrMSBePSBkYXRhW2Jsb2NrQ291bnRzICogNCArIDJdIDw8IDE2O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsxIF49IGRhdGFbYmxvY2tDb3VudHMgKiA0ICsgMV0gPDwgODtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrMSBePSBkYXRhW2Jsb2NrQ291bnRzICogNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrMSA9IGsxICogQzEgJiBNQVNLX0hJR0ggfCBrMSAqIEMxX0xPVyAmIE1BU0tfTE9XO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazEgPSBrMSA8PCAxNSB8IGsxID4+PiAxNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsxID0gazEgKiBDMiAmIE1BU0tfSElHSCB8IGsxICogQzJfTE9XICYgTUFTS19MT1c7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChibG9ja0NvdW50cyAmIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMSBePSBrMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDIgXj0gazE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmgxID0gaDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oMiA9IGgyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhleGRpZ2VzdDogZnVuY3Rpb24gTXVybXVySGFzaDNfNjRfaGV4ZGlnZXN0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoMSA9IHRoaXMuaDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGgyID0gdGhpcy5oMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMSBePSBoMiA+Pj4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMSA9IGgxICogMHhlZDU1OGNjZCAmIE1BU0tfSElHSCB8IGgxICogMHg4Y2NkICYgTUFTS19MT1c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDIgPSBoMiAqIDB4ZmY1MWFmZDcgJiBNQVNLX0hJR0ggfCAoKGgyIDw8IDE2IHwgaDEgPj4+IDE2KSAqIDB4YWZkN2VkNTUgJiBNQVNLX0hJR0gpID4+PiAxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMSBePSBoMiA+Pj4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMSA9IGgxICogMHgxYTg1ZWM1MyAmIE1BU0tfSElHSCB8IGgxICogMHhlYzUzICYgTUFTS19MT1c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDIgPSBoMiAqIDB4YzRjZWI5ZmUgJiBNQVNLX0hJR0ggfCAoKGgyIDw8IDE2IHwgaDEgPj4+IDE2KSAqIDB4YjlmZTFhODUgJiBNQVNLX0hJR0gpID4+PiAxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMSBePSBoMiA+Pj4gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBhcnIgPSBbaDEsIGgyXSwgc3RyID0gJyc7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhleCA9IChhcnJbaV0gPj4+IDApLnRvU3RyaW5nKDE2KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaGV4Lmxlbmd0aCA8IDgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleCA9ICcwJyArIGhleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBoZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE11cm11ckhhc2gzXzY0O1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuTXVybXVySGFzaDNfNjQgPSBNdXJtdXJIYXNoM182NDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTg4ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QREZJbWFnZSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3ByaW1pdGl2ZXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1NSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2NvbG9yc3BhY2UgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2OCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3N0cmVhbSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTU3KTtcblxuICAgICAgICAgICAgICAgIHZhciBfanBlZ19zdHJlYW0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2Myk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2pweCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTY2KTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9lID0gdW5kZWZpbmVkOyB0cnkgeyBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4gICAgICAgICAgICAgICAgdmFyIFBERkltYWdlID0gZnVuY3Rpb24gUERGSW1hZ2VDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBoYW5kbGVJbWFnZURhdGEoaW1hZ2UsIG5hdGl2ZURlY29kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXRpdmVEZWNvZGVyICYmIG5hdGl2ZURlY29kZXIuY2FuRGVjb2RlKGltYWdlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuYXRpdmVEZWNvZGVyLmRlY29kZShpbWFnZSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ05hdGl2ZSBpbWFnZSBkZWNvZGluZyBmYWlsZWQgLS0gdHJ5aW5nIHRvIHJlY292ZXI6ICcgKyAocmVhc29uICYmIHJlYXNvbi5tZXNzYWdlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShpbWFnZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWNvZGVBbmRDbGFtcCh2YWx1ZSwgYWRkZW5kLCBjb2VmZmljaWVudCwgbWF4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFkZGVuZCArIHZhbHVlICogY29lZmZpY2llbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPCAwID8gMCA6IHZhbHVlID4gbWF4ID8gbWF4IDogdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXNpemVJbWFnZU1hc2soc3JjLCBicGMsIHcxLCBoMSwgdzIsIGgyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gdzIgKiBoMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXN0ID0gYnBjIDw9IDggPyBuZXcgVWludDhBcnJheShsZW5ndGgpIDogYnBjIDw9IDE2ID8gbmV3IFVpbnQxNkFycmF5KGxlbmd0aCkgOiBuZXcgVWludDMyQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4UmF0aW8gPSB3MSAvIHcyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHlSYXRpbyA9IGgxIC8gaDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0luZGV4ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4U2NhbGVkID0gbmV3IFVpbnQxNkFycmF5KHcyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3MVNjYW5saW5lID0gdzE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB3MjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeFNjYWxlZFtpXSA9IE1hdGguZmxvb3IoaSAqIHhSYXRpbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBoMjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHkgPSBNYXRoLmZsb29yKGkgKiB5UmF0aW8pICogdzFTY2FubGluZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCB3MjsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZEluZGV4ID0gcHkgKyB4U2NhbGVkW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W25ld0luZGV4KytdID0gc3JjW29sZEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXN0O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUERGSW1hZ2UoX3JlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhyZWYgPSBfcmVmLnhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gX3JlZi5yZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgPSBfcmVmLmltYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYkaXNJbmxpbmUgPSBfcmVmLmlzSW5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSW5saW5lID0gX3JlZiRpc0lubGluZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGlzSW5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYkc21hc2sgPSBfcmVmLnNtYXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYXNrID0gX3JlZiRzbWFzayA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYkc21hc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZiRtYXNrID0gX3JlZi5tYXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2sgPSBfcmVmJG1hc2sgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmJG1hc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZiRpc01hc2sgPSBfcmVmLmlzTWFzayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc01hc2sgPSBfcmVmJGlzTWFzayA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGlzTWFzayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZGdW5jdGlvbkZhY3RvcnkgPSBfcmVmLnBkZkZ1bmN0aW9uRmFjdG9yeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2UgPSBpbWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gaW1hZ2UuZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBkaWN0LmdldCgnRmlsdGVyJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShmaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChmaWx0ZXIubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdKUFhEZWNvZGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpweEltYWdlID0gbmV3IF9qcHguSnB4SW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpweEltYWdlLnBhcnNlSW1hZ2VQcm9wZXJ0aWVzKGltYWdlLnN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZS5zdHJlYW0ucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLndpZHRoID0ganB4SW1hZ2Uud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZS5oZWlnaHQgPSBqcHhJbWFnZS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZS5iaXRzUGVyQ29tcG9uZW50ID0ganB4SW1hZ2UuYml0c1BlckNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLm51bUNvbXBzID0ganB4SW1hZ2UuY29tcG9uZW50c0NvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnSkJJRzJEZWNvZGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UuYml0c1BlckNvbXBvbmVudCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZS5udW1Db21wcyA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGRpY3QuZ2V0KCdXaWR0aCcsICdXJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gZGljdC5nZXQoJ0hlaWdodCcsICdIJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGltYWdlLndpZHRoKSAmJiBpbWFnZS53aWR0aCA+IDAgJiYgTnVtYmVyLmlzSW50ZWdlcihpbWFnZS5oZWlnaHQpICYmIGltYWdlLmhlaWdodCA+IDAgJiYgKGltYWdlLndpZHRoICE9PSB3aWR0aCB8fCBpbWFnZS5oZWlnaHQgIT09IGhlaWdodCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1BERkltYWdlIC0gdXNpbmcgdGhlIFdpZHRoL0hlaWdodCBvZiB0aGUgaW1hZ2UgZGF0YSwgJyArICdyYXRoZXIgdGhhbiB0aGUgaW1hZ2UgZGljdGlvbmFyeS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IGltYWdlLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCA9IGltYWdlLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoIDwgMSB8fCBoZWlnaHQgPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSW52YWxpZCBpbWFnZSB3aWR0aDogXCIuY29uY2F0KHdpZHRoLCBcIiBvciBcIikgKyBcImhlaWdodDogXCIuY29uY2F0KGhlaWdodCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJwb2xhdGUgPSBkaWN0LmdldCgnSW50ZXJwb2xhdGUnLCAnSScpIHx8IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZU1hc2sgPSBkaWN0LmdldCgnSW1hZ2VNYXNrJywgJ0lNJykgfHwgZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdHRlID0gZGljdC5nZXQoJ01hdHRlJykgfHwgZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYml0c1BlckNvbXBvbmVudCA9IGltYWdlLmJpdHNQZXJDb21wb25lbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYml0c1BlckNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNQZXJDb21wb25lbnQgPSBkaWN0LmdldCgnQml0c1BlckNvbXBvbmVudCcsICdCUEMnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYml0c1BlckNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbWFnZU1hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNQZXJDb21wb25lbnQgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiQml0cyBwZXIgY29tcG9uZW50IG1pc3NpbmcgaW4gaW1hZ2U6IFwiLmNvbmNhdCh0aGlzLmltYWdlTWFzaykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJwYyA9IGJpdHNQZXJDb21wb25lbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbWFnZU1hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JTcGFjZSA9IGRpY3QuZ2V0KCdDb2xvclNwYWNlJywgJ0NTJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbG9yU3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKCdKUFggaW1hZ2VzICh3aGljaCBkbyBub3QgcmVxdWlyZSBjb2xvciBzcGFjZXMpJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpbWFnZS5udW1Db21wcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UgPSBfcHJpbWl0aXZlcy5OYW1lLmdldCgnRGV2aWNlR3JheScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZSA9IF9wcmltaXRpdmVzLk5hbWUuZ2V0KCdEZXZpY2VSR0InKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UgPSBfcHJpbWl0aXZlcy5OYW1lLmdldCgnRGV2aWNlQ01ZSycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkpQWCBpbWFnZXMgd2l0aCBcIi5jb25jYXQoaW1hZ2UubnVtQ29tcHMsIFwiIFwiKSArICdjb2xvciBjb21wb25lbnRzIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzb3VyY2VzID0gaXNJbmxpbmUgPyByZXMgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sb3JTcGFjZSA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2UucGFyc2UoY29sb3JTcGFjZSwgeHJlZiwgcmVzb3VyY2VzLCBwZGZGdW5jdGlvbkZhY3RvcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubnVtQ29tcHMgPSB0aGlzLmNvbG9yU3BhY2UubnVtQ29tcHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjb2RlID0gZGljdC5nZXRBcnJheSgnRGVjb2RlJywgJ0QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmVlZHNEZWNvZGUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVjb2RlICYmICh0aGlzLmNvbG9yU3BhY2UgJiYgIXRoaXMuY29sb3JTcGFjZS5pc0RlZmF1bHREZWNvZGUodGhpcy5kZWNvZGUsIGJpdHNQZXJDb21wb25lbnQpIHx8IGlzTWFzayAmJiAhX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5pc0RlZmF1bHREZWNvZGUodGhpcy5kZWNvZGUsIDEpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmVlZHNEZWNvZGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXggPSAoMSA8PCBiaXRzUGVyQ29tcG9uZW50KSAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNvZGVDb2VmZmljaWVudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlY29kZUFkZGVuZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNJbmRleGVkID0gdGhpcy5jb2xvclNwYWNlICYmIHRoaXMuY29sb3JTcGFjZS5uYW1lID09PSAnSW5kZXhlZCc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IDA7IGkgPCB0aGlzLmRlY29kZS5sZW5ndGg7IGkgKz0gMiwgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkbWluID0gdGhpcy5kZWNvZGVbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkbWF4ID0gdGhpcy5kZWNvZGVbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlY29kZUNvZWZmaWNpZW50c1tqXSA9IGlzSW5kZXhlZCA/IChkbWF4IC0gZG1pbikgLyBtYXggOiBkbWF4IC0gZG1pbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNvZGVBZGRlbmRzW2pdID0gaXNJbmRleGVkID8gZG1pbiA6IG1heCAqIGRtaW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc21hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNtYXNrID0gbmV3IFBERkltYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZjogeHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzOiByZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlOiBzbWFzayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNJbmxpbmU6IGlzSW5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZGdW5jdGlvbkZhY3Rvcnk6IHBkZkZ1bmN0aW9uRmFjdG9yeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkobWFzaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hc2tEaWN0ID0gbWFzay5kaWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VNYXNrID0gbWFza0RpY3QuZ2V0KCdJbWFnZU1hc2snLCAnSU0nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWltYWdlTWFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdJZ25vcmluZyAvTWFzayBpbiBpbWFnZSB3aXRob3V0IC9JbWFnZU1hc2suJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hc2sgPSBuZXcgUERGSW1hZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWY6IHhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzOiByZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IG1hc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNJbmxpbmU6IGlzSW5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTWFzazogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZGdW5jdGlvbkZhY3Rvcnk6IHBkZkZ1bmN0aW9uRmFjdG9yeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hc2sgPSBtYXNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFBERkltYWdlLmJ1aWxkSW1hZ2UgPSBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyID0gX3JlZjIuaGFuZGxlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmID0gX3JlZjIueHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSBfcmVmMi5yZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgPSBfcmVmMi5pbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmMiRpc0lubGluZSA9IF9yZWYyLmlzSW5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSW5saW5lID0gX3JlZjIkaXNJbmxpbmUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjIkaXNJbmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjIkbmF0aXZlRGVjb2RlciA9IF9yZWYyLm5hdGl2ZURlY29kZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlRGVjb2RlciA9IF9yZWYyJG5hdGl2ZURlY29kZXIgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmMiRuYXRpdmVEZWNvZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeSA9IF9yZWYyLnBkZkZ1bmN0aW9uRmFjdG9yeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWFnZVByb21pc2UgPSBoYW5kbGVJbWFnZURhdGEoaW1hZ2UsIG5hdGl2ZURlY29kZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNtYXNrUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXNrUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzbWFzayA9IGltYWdlLmRpY3QuZ2V0KCdTTWFzaycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hc2sgPSBpbWFnZS5kaWN0LmdldCgnTWFzaycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc21hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFza1Byb21pc2UgPSBoYW5kbGVJbWFnZURhdGEoc21hc2ssIG5hdGl2ZURlY29kZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFza1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShtYXNrKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza1Byb21pc2UgPSBoYW5kbGVJbWFnZURhdGEobWFzaywgbmF0aXZlRGVjb2Rlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShtYXNrKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUobWFzayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1Vuc3VwcG9ydGVkIG1hc2sgZm9ybWF0LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbaW1hZ2VQcm9taXNlLCBzbWFza1Byb21pc2UsIG1hc2tQcm9taXNlXSkudGhlbihmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlRGF0YSA9IF9yZWY0WzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFza0RhdGEgPSBfcmVmNFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza0RhdGEgPSBfcmVmNFsyXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUERGSW1hZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmOiB4cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXM6IHJlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGltYWdlRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNJbmxpbmU6IGlzSW5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFzazogc21hc2tEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrOiBtYXNrRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmRnVuY3Rpb25GYWN0b3J5OiBwZGZGdW5jdGlvbkZhY3RvcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIFBERkltYWdlLmNyZWF0ZU1hc2sgPSBmdW5jdGlvbiAoX3JlZjUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWdBcnJheSA9IF9yZWY1LmltZ0FycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gX3JlZjUud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gX3JlZjUuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtID0gX3JlZjUuaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52ZXJzZURlY29kZSA9IF9yZWY1LmludmVyc2VEZWNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcHV0ZWRMZW5ndGggPSAod2lkdGggKyA3ID4+IDMpICogaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFjdHVhbExlbmd0aCA9IGltZ0FycmF5LmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGF2ZUZ1bGxEYXRhID0gY29tcHV0ZWRMZW5ndGggPT09IGFjdHVhbExlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhLCBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW0gJiYgKCFpbnZlcnNlRGVjb2RlIHx8IGhhdmVGdWxsRGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gaW1nQXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpbnZlcnNlRGVjb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShhY3R1YWxMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc2V0KGltZ0FycmF5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShjb21wdXRlZExlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5zZXQoaW1nQXJyYXkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gYWN0dWFsTGVuZ3RoOyBpIDwgY29tcHV0ZWRMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gMHhmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnZlcnNlRGVjb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFjdHVhbExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gXj0gMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgUERGSW1hZ2UucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGRyYXdXaWR0aCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy53aWR0aCwgdGhpcy5zbWFzayAmJiB0aGlzLnNtYXNrLndpZHRoIHx8IDAsIHRoaXMubWFzayAmJiB0aGlzLm1hc2sud2lkdGggfHwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgZHJhd0hlaWdodCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy5oZWlnaHQsIHRoaXMuc21hc2sgJiYgdGhpcy5zbWFzay5oZWlnaHQgfHwgMCwgdGhpcy5tYXNrICYmIHRoaXMubWFzay5oZWlnaHQgfHwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVCdWZmZXI6IGZ1bmN0aW9uIGRlY29kZUJ1ZmZlcihidWZmZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnBjID0gdGhpcy5icGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bUNvbXBzID0gdGhpcy5udW1Db21wcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVjb2RlQWRkZW5kcyA9IHRoaXMuZGVjb2RlQWRkZW5kcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVjb2RlQ29lZmZpY2llbnRzID0gdGhpcy5kZWNvZGVDb2VmZmljaWVudHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heCA9ICgxIDw8IGJwYykgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBpaTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChicGMgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBidWZmZXIubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gKyFidWZmZXJbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gdGhpcy53aWR0aCAqIHRoaXMuaGVpZ2h0OyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG51bUNvbXBzOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpbmRleF0gPSBkZWNvZGVBbmRDbGFtcChidWZmZXJbaW5kZXhdLCBkZWNvZGVBZGRlbmRzW2pdLCBkZWNvZGVDb2VmZmljaWVudHNbal0sIG1heCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbXBvbmVudHM6IGZ1bmN0aW9uIGdldENvbXBvbmVudHMoYnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJwYyA9IHRoaXMuYnBjO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJwYyA9PT0gOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1Db21wcyA9IHRoaXMubnVtQ29tcHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHdpZHRoICogaGVpZ2h0ICogbnVtQ29tcHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlclBvcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG91dHB1dCA9IGJwYyA8PSA4ID8gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKSA6IGJwYyA8PSAxNiA/IG5ldyBVaW50MTZBcnJheShsZW5ndGgpIDogbmV3IFVpbnQzMkFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvd0NvbXBzID0gd2lkdGggKiBudW1Db21wcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4ID0gKDEgPDwgYnBjKSAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJwYyA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFzaywgbG9vcDFFbmQsIGxvb3AyRW5kO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaGVpZ2h0OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3AxRW5kID0gaSArIChyb3dDb21wcyAmIH43KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3AyRW5kID0gaSArIHJvd0NvbXBzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IGxvb3AxRW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmZmVyW2J1ZmZlclBvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbaV0gPSBidWYgPj4gNyAmIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W2kgKyAxXSA9IGJ1ZiA+PiA2ICYgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbaSArIDJdID0gYnVmID4+IDUgJiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtpICsgM10gPSBidWYgPj4gNCAmIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W2kgKyA0XSA9IGJ1ZiA+PiAzICYgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbaSArIDVdID0gYnVmID4+IDIgJiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtpICsgNl0gPSBidWYgPj4gMSAmIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W2kgKyA3XSA9IGJ1ZiAmIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGxvb3AyRW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmZmVyW2J1ZmZlclBvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrID0gMTI4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBsb29wMkVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbaSsrXSA9ICshIShidWYgJiBtYXNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayA+Pj0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYml0cyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBsZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSAlIHJvd0NvbXBzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBicGMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYgPDwgOCB8IGJ1ZmZlcltidWZmZXJQb3MrK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVtYWluaW5nQml0cyA9IGJpdHMgLSBicGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBidWYgPj4gcmVtYWluaW5nQml0cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtpXSA9IHZhbHVlIDwgMCA/IDAgOiB2YWx1ZSA+IG1heCA/IG1heCA6IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmICYgKDEgPDwgcmVtYWluaW5nQml0cykgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cyA9IHJlbWFpbmluZ0JpdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxPcGFjaXR5OiBmdW5jdGlvbiBmaWxsT3BhY2l0eShyZ2JhQnVmLCB3aWR0aCwgaGVpZ2h0LCBhY3R1YWxIZWlnaHQsIGltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNtYXNrID0gdGhpcy5zbWFzaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFzayA9IHRoaXMubWFzaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWxwaGFCdWYsIHN3LCBzaCwgaSwgaWksIGo7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc21hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3cgPSBzbWFzay53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ggPSBzbWFzay5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhQnVmID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHN3ICogc2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFzay5maWxsR3JheUJ1ZmZlcihhbHBoYUJ1Zik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN3ICE9PSB3aWR0aCB8fCBzaCAhPT0gaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYUJ1ZiA9IHJlc2l6ZUltYWdlTWFzayhhbHBoYUJ1Ziwgc21hc2suYnBjLCBzdywgc2gsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXNrIGluc3RhbmNlb2YgUERGSW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3ID0gbWFzay53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoID0gbWFzay5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYUJ1ZiA9IG5ldyBVaW50OENsYW1wZWRBcnJheShzdyAqIHNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2subnVtQ29tcHMgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzay5maWxsR3JheUJ1ZmZlcihhbHBoYUJ1Zik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gc3cgKiBzaDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYUJ1ZltpXSA9IDI1NSAtIGFscGhhQnVmW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3cgIT09IHdpZHRoIHx8IHNoICE9PSBoZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYUJ1ZiA9IHJlc2l6ZUltYWdlTWFzayhhbHBoYUJ1ZiwgbWFzay5icGMsIHN3LCBzaCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShtYXNrKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGFCdWYgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkod2lkdGggKiBoZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bUNvbXBzID0gdGhpcy5udW1Db21wcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSB3aWR0aCAqIGhlaWdodDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3BhY2l0eSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltYWdlT2Zmc2V0ID0gaSAqIG51bUNvbXBzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG51bUNvbXBzOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW1hZ2VbaW1hZ2VPZmZzZXQgKyBqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hc2tPZmZzZXQgPSBqICogMjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sb3IgPCBtYXNrW21hc2tPZmZzZXRdIHx8IGNvbG9yID4gbWFza1ttYXNrT2Zmc2V0ICsgMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHkgPSAyNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhQnVmW2ldID0gb3BhY2l0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignVW5rbm93biBtYXNrIGZvcm1hdC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbHBoYUJ1Zikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBqID0gMywgaWkgPSB3aWR0aCAqIGFjdHVhbEhlaWdodDsgaSA8IGlpOyArK2ksIGogKz0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmdiYUJ1ZltqXSA9IGFscGhhQnVmW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaiA9IDMsIGlpID0gd2lkdGggKiBhY3R1YWxIZWlnaHQ7IGkgPCBpaTsgKytpLCBqICs9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJnYmFCdWZbal0gPSAyNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kb1ByZWJsZW5kOiBmdW5jdGlvbiB1bmRvUHJlYmxlbmQoYnVmZmVyLCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdHRlID0gdGhpcy5zbWFzayAmJiB0aGlzLnNtYXNrLm1hdHRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXR0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdHRlUmdiID0gdGhpcy5jb2xvclNwYWNlLmdldFJnYihtYXR0ZSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdHRlUiA9IG1hdHRlUmdiWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXR0ZUcgPSBtYXR0ZVJnYlsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0dGVCID0gbWF0dGVSZ2JbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHdpZHRoICogaGVpZ2h0ICogNDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFscGhhID0gYnVmZmVyW2kgKyAzXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSA9IDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMV0gPSAyNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJdID0gMjU1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgayA9IDI1NSAvIGFscGhhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSAoYnVmZmVyW2ldIC0gbWF0dGVSKSAqIGsgKyBtYXR0ZVI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMV0gPSAoYnVmZmVyW2kgKyAxXSAtIG1hdHRlRykgKiBrICsgbWF0dGVHO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJdID0gKGJ1ZmZlcltpICsgMl0gLSBtYXR0ZUIpICogayArIG1hdHRlQjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlSW1hZ2VEYXRhOiBmdW5jdGlvbiBjcmVhdGVJbWFnZURhdGEoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcmNlUkdCQSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRyYXdXaWR0aCA9IHRoaXMuZHJhd1dpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkcmF3SGVpZ2h0ID0gdGhpcy5kcmF3SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWdEYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogZHJhd1dpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGRyYXdIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1Db21wcyA9IHRoaXMubnVtQ29tcHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9yaWdpbmFsV2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcmlnaW5hbEhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBicGMgPSB0aGlzLmJwYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm93Qnl0ZXMgPSBvcmlnaW5hbFdpZHRoICogbnVtQ29tcHMgKiBicGMgKyA3ID4+IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZ0FycmF5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JjZVJHQkEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtpbmQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sb3JTcGFjZS5uYW1lID09PSAnRGV2aWNlR3JheScgJiYgYnBjID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kID0gX3V0aWwuSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29sb3JTcGFjZS5uYW1lID09PSAnRGV2aWNlUkdCJyAmJiBicGMgPT09IDggJiYgIXRoaXMubmVlZHNEZWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQgPSBfdXRpbC5JbWFnZUtpbmQuUkdCXzI0QlBQO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgJiYgIXRoaXMuc21hc2sgJiYgIXRoaXMubWFzayAmJiBkcmF3V2lkdGggPT09IG9yaWdpbmFsV2lkdGggJiYgZHJhd0hlaWdodCA9PT0gb3JpZ2luYWxIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGEua2luZCA9IGtpbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdBcnJheSA9IHRoaXMuZ2V0SW1hZ2VCeXRlcyhvcmlnaW5hbEhlaWdodCAqIHJvd0J5dGVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW1hZ2UgaW5zdGFuY2VvZiBfc3RyZWFtLkRlY29kZVN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGEuZGF0YSA9IGltZ0FycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3QXJyYXkgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoaW1nQXJyYXkubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBcnJheS5zZXQoaW1nQXJyYXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGEuZGF0YSA9IG5ld0FycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZWVkc0RlY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKGtpbmQgPT09IF91dGlsLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUCwgJ1BERkltYWdlLmNyZWF0ZUltYWdlRGF0YTogVGhlIGltYWdlIG11c3QgYmUgZ3JheXNjYWxlLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBpbWdEYXRhLmRhdGE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBidWZmZXIubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaV0gXj0gMHhmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbWdEYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW1hZ2UgaW5zdGFuY2VvZiBfanBlZ19zdHJlYW0uSnBlZ1N0cmVhbSAmJiAhdGhpcy5zbWFzayAmJiAhdGhpcy5tYXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2VMZW5ndGggPSBvcmlnaW5hbEhlaWdodCAqIHJvd0J5dGVzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuY29sb3JTcGFjZS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRGV2aWNlR3JheSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlTGVuZ3RoICo9IDM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdEZXZpY2VSR0InOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RldmljZUNNWUsnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdEYXRhLmtpbmQgPSBfdXRpbC5JbWFnZUtpbmQuUkdCXzI0QlBQO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdEYXRhLmRhdGEgPSB0aGlzLmdldEltYWdlQnl0ZXMoaW1hZ2VMZW5ndGgsIGRyYXdXaWR0aCwgZHJhd0hlaWdodCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbWdEYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nQXJyYXkgPSB0aGlzLmdldEltYWdlQnl0ZXMob3JpZ2luYWxIZWlnaHQgKiByb3dCeXRlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFjdHVhbEhlaWdodCA9IDAgfCBpbWdBcnJheS5sZW5ndGggLyByb3dCeXRlcyAqIGRyYXdIZWlnaHQgLyBvcmlnaW5hbEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcHMgPSB0aGlzLmdldENvbXBvbmVudHMoaW1nQXJyYXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbHBoYTAxLCBtYXliZVVuZG9QcmVibGVuZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZm9yY2VSR0JBICYmICF0aGlzLnNtYXNrICYmICF0aGlzLm1hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nRGF0YS5raW5kID0gX3V0aWwuSW1hZ2VLaW5kLlJHQl8yNEJQUDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nRGF0YS5kYXRhID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGRyYXdXaWR0aCAqIGRyYXdIZWlnaHQgKiAzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGEwMSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heWJlVW5kb1ByZWJsZW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nRGF0YS5raW5kID0gX3V0aWwuSW1hZ2VLaW5kLlJHQkFfMzJCUFA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGEuZGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShkcmF3V2lkdGggKiBkcmF3SGVpZ2h0ICogNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhMDEgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXliZVVuZG9QcmVibGVuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsbE9wYWNpdHkoaW1nRGF0YS5kYXRhLCBkcmF3V2lkdGgsIGRyYXdIZWlnaHQsIGFjdHVhbEhlaWdodCwgY29tcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5lZWRzRGVjb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjb2RlQnVmZmVyKGNvbXBzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbG9yU3BhY2UuZmlsbFJnYihpbWdEYXRhLmRhdGEsIG9yaWdpbmFsV2lkdGgsIG9yaWdpbmFsSGVpZ2h0LCBkcmF3V2lkdGgsIGRyYXdIZWlnaHQsIGFjdHVhbEhlaWdodCwgYnBjLCBjb21wcywgYWxwaGEwMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF5YmVVbmRvUHJlYmxlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bmRvUHJlYmxlbmQoaW1nRGF0YS5kYXRhLCBkcmF3V2lkdGgsIGFjdHVhbEhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltZ0RhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbEdyYXlCdWZmZXI6IGZ1bmN0aW9uIGZpbGxHcmF5QnVmZmVyKGJ1ZmZlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1Db21wcyA9IHRoaXMubnVtQ29tcHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtQ29tcHMgIT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiUmVhZGluZyBncmF5IHNjYWxlIGZyb20gYSBjb2xvciBpbWFnZTogXCIuY29uY2F0KG51bUNvbXBzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJwYyA9IHRoaXMuYnBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByb3dCeXRlcyA9IHdpZHRoICogbnVtQ29tcHMgKiBicGMgKyA3ID4+IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZ0FycmF5ID0gdGhpcy5nZXRJbWFnZUJ5dGVzKGhlaWdodCAqIHJvd0J5dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcHMgPSB0aGlzLmdldENvbXBvbmVudHMoaW1nQXJyYXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBsZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnBjID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHdpZHRoICogaGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5lZWRzRGVjb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSBjb21wc1tpXSAtIDEgJiAyNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSAtY29tcHNbaV0gJiAyNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubmVlZHNEZWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNvZGVCdWZmZXIoY29tcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHdpZHRoICogaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY2FsZSA9IDI1NSAvICgoMSA8PCBicGMpIC0gMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gc2NhbGUgKiBjb21wc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SW1hZ2VCeXRlczogZnVuY3Rpb24gZ2V0SW1hZ2VCeXRlcyhsZW5ndGgsIGRyYXdXaWR0aCwgZHJhd0hlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JjZVJHQiA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZS5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2UuZHJhd1dpZHRoID0gZHJhd1dpZHRoIHx8IHRoaXMud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZS5kcmF3SGVpZ2h0ID0gZHJhd0hlaWdodCB8fCB0aGlzLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmltYWdlLmZvcmNlUkdCID0gISFmb3JjZVJHQjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZS5nZXRCeXRlcyhsZW5ndGgsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUERGSW1hZ2U7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QREZJbWFnZSA9IFBERkltYWdlO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxODkgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLk1lc3NhZ2VIYW5kbGVyID0gTWVzc2FnZUhhbmRsZXI7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3JlZ2VuZXJhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIpKTtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHZhciBzZWxmID0gdGhpcywgYXJncyA9IGFyZ3VtZW50czsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpOyBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7IH0gZnVuY3Rpb24gX3Rocm93KGVycikgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTsgfSBfbmV4dCh1bmRlZmluZWQpOyB9KTsgfTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNhbGwoX3gsIF94Mikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Jlc29sdmVDYWxsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3Jlc29sdmVDYWxsKCkge1xuICAgICAgICAgICAgICAgICAgICBfcmVzb2x2ZUNhbGwgPSBfYXN5bmNUb0dlbmVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIF9yZWdlbmVyYXRvci5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZShmbiwgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aGlzQXJnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0FyZyA9IF9hcmdzLmxlbmd0aCA+IDIgJiYgX2FyZ3NbMl0gIT09IHVuZGVmaW5lZCA/IF9hcmdzWzJdIDogbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3MpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBfY2FsbGVlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZXNvbHZlQ2FsbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdyYXBSZWFzb24ocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfdHlwZW9mKHJlYXNvbikgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhc29uO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyZWFzb24ubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQWJvcnRFeGNlcHRpb24nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24ocmVhc29uLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdNaXNzaW5nUERGRXhjZXB0aW9uJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24ocmVhc29uLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX3V0aWwuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlLCByZWFzb24uc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF91dGlsLlVua25vd25FcnJvckV4Y2VwdGlvbihyZWFzb24ubWVzc2FnZSwgcmVhc29uLmRldGFpbHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gbWFrZVJlYXNvblNlcmlhbGl6YWJsZShyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhc29uIGluc3RhbmNlb2YgRXJyb3IpIHx8IHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLkFib3J0RXhjZXB0aW9uIHx8IHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24gfHwgcmVhc29uIGluc3RhbmNlb2YgX3V0aWwuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIHx8IHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLlVua25vd25FcnJvckV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYXNvbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX3V0aWwuVW5rbm93bkVycm9yRXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlLCByZWFzb24udG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZU9yUmVqZWN0KGNhcGFiaWxpdHksIHN1Y2Nlc3MsIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlamVjdChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZmluYWxpemUocHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHByb21pc2UpLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBNZXNzYWdlSGFuZGxlcihzb3VyY2VOYW1lLCB0YXJnZXROYW1lLCBjb21PYmopIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZU5hbWUgPSBzb3VyY2VOYW1lO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhcmdldE5hbWUgPSB0YXJnZXROYW1lO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbU9iaiA9IGNvbU9iajtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja0lkID0gMTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW1JZCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9zdE1lc3NhZ2VUcmFuc2ZlcnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbVNpbmtzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFja3NDYXBhYmlsaXRpZXMgPSB0aGlzLmNhbGxiYWNrc0NhcGFiaWxpdGllcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhaCA9IHRoaXMuYWN0aW9uSGFuZGxlciA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25Db21PYmpPbk1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gZXZlbnQuZGF0YTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEudGFyZ2V0TmFtZSAhPT0gX3RoaXMuc291cmNlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3Byb2Nlc3NTdHJlYW1NZXNzYWdlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLmlzUmVwbHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2tJZCA9IGRhdGEuY2FsbGJhY2tJZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmNhbGxiYWNrSWQgaW4gY2FsbGJhY2tzQ2FwYWJpbGl0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGNhbGxiYWNrc0NhcGFiaWxpdGllc1tjYWxsYmFja0lkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNhbGxiYWNrc0NhcGFiaWxpdGllc1tjYWxsYmFja0lkXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJ2Vycm9yJyBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5yZWplY3Qod3JhcFJlYXNvbihkYXRhLmVycm9yKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5yZXNvbHZlKGRhdGEuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgcmVzb2x2ZSBjYWxsYmFjayBcIi5jb25jYXQoY2FsbGJhY2tJZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5hY3Rpb24gaW4gYWgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWN0aW9uID0gYWhbZGF0YS5hY3Rpb25dO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2tJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3NvdXJjZU5hbWUgPSBfdGhpcy5zb3VyY2VOYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RhcmdldE5hbWUgPSBkYXRhLnNvdXJjZU5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvblswXS5jYWxsKGFjdGlvblsxXSwgZGF0YS5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IF9zb3VyY2VOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IF90YXJnZXROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVwbHk6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tJZDogZGF0YS5jYWxsYmFja0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHJlc3VsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTmFtZTogX3NvdXJjZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZTogX3RhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXBseTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0lkOiBkYXRhLmNhbGxiYWNrSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG1ha2VSZWFzb25TZXJpYWxpemFibGUocmVhc29uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5zdHJlYW1JZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fY3JlYXRlU3RyZWFtU2luayhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25bMF0uY2FsbChhY3Rpb25bMV0sIGRhdGEuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGFjdGlvbiBmcm9tIHdvcmtlcjogXCIuY29uY2F0KGRhdGEuYWN0aW9uKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgY29tT2JqLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgTWVzc2FnZUhhbmRsZXIucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICBvbjogZnVuY3Rpb24gb24oYWN0aW9uTmFtZSwgaGFuZGxlciwgc2NvcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhaCA9IHRoaXMuYWN0aW9uSGFuZGxlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFoW2FjdGlvbk5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgYWxyZWFkeSBhbiBhY3Rpb25OYW1lIGNhbGxlZCBcXFwiXCIuY29uY2F0KGFjdGlvbk5hbWUsIFwiXFxcIlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFoW2FjdGlvbk5hbWVdID0gW2hhbmRsZXIsIHNjb3BlXTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2VuZDogZnVuY3Rpb24gc2VuZChhY3Rpb25OYW1lLCBkYXRhLCB0cmFuc2ZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiB0aGlzLnRhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc3RNZXNzYWdlKG1lc3NhZ2UsIHRyYW5zZmVycyk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHNlbmRXaXRoUHJvbWlzZTogZnVuY3Rpb24gc2VuZFdpdGhQcm9taXNlKGFjdGlvbk5hbWUsIGRhdGEsIHRyYW5zZmVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrSWQgPSB0aGlzLmNhbGxiYWNrSWQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiB0aGlzLnRhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tJZDogY2FsbGJhY2tJZFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3NDYXBhYmlsaXRpZXNbY2FsbGJhY2tJZF0gPSBjYXBhYmlsaXR5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zdE1lc3NhZ2UobWVzc2FnZSwgdHJhbnNmZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2VuZFdpdGhTdHJlYW06IGZ1bmN0aW9uIHNlbmRXaXRoU3RyZWFtKGFjdGlvbk5hbWUsIGRhdGEsIHF1ZXVlaW5nU3RyYXRlZ3ksIHRyYW5zZmVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VOYW1lID0gdGhpcy5zb3VyY2VOYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldE5hbWUgPSB0aGlzLnRhcmdldE5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF91dGlsLlJlYWRhYmxlU3RyZWFtKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gc3RhcnQoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogY29udHJvbGxlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q2FsbDogc3RhcnRDYXBhYmlsaXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDbG9zZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IHNvdXJjZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiB0YXJnZXROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtSWQ6IHN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBjb250cm9sbGVyLmRlc2lyZWRTaXplXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFydENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bGw6IGZ1bmN0aW9uIHB1bGwoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVsbENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0ucHVsbENhbGwgPSBwdWxsQ2FwYWJpbGl0eTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTmFtZTogc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IHRhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW06ICdwdWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbUlkOiBzdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBjb250cm9sbGVyLmRlc2lyZWRTaXplXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdWxsQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsOiBmdW5jdGlvbiBjYW5jZWwocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW5jZWxDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmNhbmNlbENhbGwgPSBjYW5jZWxDYXBhYmlsaXR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmlzQ2xvc2VkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTmFtZTogc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IHRhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW06ICdjYW5jZWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOiByZWFzb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1JZDogc3RyZWFtSWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbmNlbENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBxdWV1ZWluZ1N0cmF0ZWd5KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZVN0cmVhbVNpbms6IGZ1bmN0aW9uIF9jcmVhdGVTdHJlYW1TaW5rKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWN0aW9uID0gdGhpcy5hY3Rpb25IYW5kbGVyW2RhdGEuYWN0aW9uXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW1JZCA9IGRhdGEuc3RyZWFtSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzaXJlZFNpemUgPSBkYXRhLmRlc2lyZWRTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU5hbWUgPSB0aGlzLnNvdXJjZU5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0TmFtZSA9IGRhdGEuc291cmNlTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VuZFN0cmVhbVJlcXVlc3QgPSBmdW5jdGlvbiBzZW5kU3RyZWFtUmVxdWVzdChfcmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IF9yZWYuc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IF9yZWYuY2h1bmssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVycyA9IF9yZWYudHJhbnNmZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gX3JlZi5zdWNjZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24gPSBfcmVmLnJlYXNvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMy5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IHNvdXJjZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IHRhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1JZDogc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rOiBjaHVuayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzczogc3VjY2VzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOiByZWFzb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0cmFuc2ZlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbVNpbmsgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5xdWV1ZTogZnVuY3Rpb24gZW5xdWV1ZShjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZmVycyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQ2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFzdERlc2lyZWRTaXplID0gdGhpcy5kZXNpcmVkU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNpcmVkU2l6ZSAtPSBzaXplO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0RGVzaXJlZFNpemUgPiAwICYmIHRoaXMuZGVzaXJlZFNpemUgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaW5rQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZHkgPSB0aGlzLnNpbmtDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kU3RyZWFtUmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW06ICdlbnF1ZXVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rOiBjaHVuayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyczogdHJhbnNmZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0NhbmNlbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogJ2Nsb3NlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlbGYuc3RyZWFtU2lua3Nbc3RyZWFtSWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIGVycm9yKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0NhbmNlbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjogcmVhc29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lua0NhcGFiaWxpdHk6IGNhcGFiaWxpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25QdWxsOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2FuY2VsbGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkU2l6ZTogZGVzaXJlZFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHk6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1TaW5rLnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVNpbmsucmVhZHkgPSBzdHJlYW1TaW5rLnNpbmtDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbVNpbmtzW3N0cmVhbUlkXSA9IHN0cmVhbVNpbms7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlQ2FsbChhY3Rpb25bMF0sIFtkYXRhLmRhdGEsIHN0cmVhbVNpbmtdLCBhY3Rpb25bMV0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiAnc3RhcnRfY29tcGxldGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFN0cmVhbVJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW06ICdzdGFydF9jb21wbGV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246IHJlYXNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF9wcm9jZXNzU3RyZWFtTWVzc2FnZTogZnVuY3Rpb24gX3Byb2Nlc3NTdHJlYW1NZXNzYWdlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXROYW1lID0gZGF0YS5zb3VyY2VOYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbUlkID0gZGF0YS5zdHJlYW1JZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbmRTdHJlYW1SZXNwb25zZSA9IGZ1bmN0aW9uIHNlbmRTdHJlYW1SZXNwb25zZShfcmVmMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBfcmVmMi5zdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBfcmVmMi5zdWNjZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24gPSBfcmVmMi5yZWFzb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczQuY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTmFtZTogc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZTogdGFyZ2V0TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHN1Y2Nlc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbUlkOiBzdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOiByZWFzb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWxldGVTdHJlYW1Db250cm9sbGVyID0gZnVuY3Rpb24gZGVsZXRlU3RyZWFtQ29udHJvbGxlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChbX3RoaXM0LnN0cmVhbUNvbnRyb2xsZXJzW2RhdGEuc3RyZWFtSWRdLnN0YXJ0Q2FsbCwgX3RoaXM0LnN0cmVhbUNvbnRyb2xsZXJzW2RhdGEuc3RyZWFtSWRdLnB1bGxDYWxsLCBfdGhpczQuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0uY2FuY2VsQ2FsbF0ubWFwKGZ1bmN0aW9uIChjYXBhYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXBhYmlsaXR5ICYmIGZpbmFsaXplKGNhcGFiaWxpdHkucHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgX3RoaXM0LnN0cmVhbUNvbnRyb2xsZXJzW2RhdGEuc3RyZWFtSWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChkYXRhLnN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0YXJ0X2NvbXBsZXRlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZU9yUmVqZWN0KHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0uc3RhcnRDYWxsLCBkYXRhLnN1Y2Nlc3MsIHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdwdWxsX2NvbXBsZXRlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZU9yUmVqZWN0KHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0ucHVsbENhbGwsIGRhdGEuc3VjY2Vzcywgd3JhcFJlYXNvbihkYXRhLnJlYXNvbikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3B1bGwnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RyZWFtU2lua3NbZGF0YS5zdHJlYW1JZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiAncHVsbF9jb21wbGV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0cmVhbVNpbmtzW2RhdGEuc3RyZWFtSWRdLmRlc2lyZWRTaXplIDw9IDAgJiYgZGF0YS5kZXNpcmVkU2l6ZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtU2lua3NbZGF0YS5zdHJlYW1JZF0uc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW1TaW5rc1tkYXRhLnN0cmVhbUlkXS5kZXNpcmVkU2l6ZSA9IGRhdGEuZGVzaXJlZFNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVDYWxsKHRoaXMuc3RyZWFtU2lua3NbZGF0YS5zdHJlYW1JZF0ub25QdWxsKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiAncHVsbF9jb21wbGV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiAncHVsbF9jb21wbGV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOiByZWFzb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbnF1ZXVlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkodGhpcy5zdHJlYW1Db250cm9sbGVyc1tkYXRhLnN0cmVhbUlkXSwgJ2VucXVldWUgc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXInKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0uaXNDbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0uY29udHJvbGxlci5lbnF1ZXVlKGRhdGEuY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjbG9zZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0sICdjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlcicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2RhdGEuc3RyZWFtSWRdLmlzQ2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0uaXNDbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2RhdGEuc3RyZWFtSWRdLmNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlU3RyZWFtQ29udHJvbGxlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkodGhpcy5zdHJlYW1Db250cm9sbGVyc1tkYXRhLnN0cmVhbUlkXSwgJ2Vycm9yIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0uY29udHJvbGxlci5lcnJvcih3cmFwUmVhc29uKGRhdGEucmVhc29uKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVN0cmVhbUNvbnRyb2xsZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjYW5jZWxfY29tcGxldGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlT3JSZWplY3QodGhpcy5zdHJlYW1Db250cm9sbGVyc1tkYXRhLnN0cmVhbUlkXS5jYW5jZWxDYWxsLCBkYXRhLnN1Y2Nlc3MsIHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlU3RyZWFtQ29udHJvbGxlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NhbmNlbCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zdHJlYW1TaW5rc1tkYXRhLnN0cmVhbUlkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlQ2FsbCh0aGlzLnN0cmVhbVNpbmtzW2RhdGEuc3RyZWFtSWRdLm9uQ2FuY2VsLCBbd3JhcFJlYXNvbihkYXRhLnJlYXNvbildKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiAnY2FuY2VsX2NvbXBsZXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFN0cmVhbVJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW06ICdjYW5jZWxfY29tcGxldGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjogcmVhc29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtU2lua3NbZGF0YS5zdHJlYW1JZF0uc2lua0NhcGFiaWxpdHkucmVqZWN0KHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW1TaW5rc1tkYXRhLnN0cmVhbUlkXS5pc0NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN0cmVhbVNpbmtzW2RhdGEuc3RyZWFtSWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBzdHJlYW0gY2FzZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZTogZnVuY3Rpb24gcG9zdE1lc3NhZ2UobWVzc2FnZSwgdHJhbnNmZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmZXJzICYmIHRoaXMucG9zdE1lc3NhZ2VUcmFuc2ZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbU9iai5wb3N0TWVzc2FnZShtZXNzYWdlLCB0cmFuc2ZlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbU9iai5wb3N0TWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tT2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSlcbiAgICAgICAgICAgIC8qKioqKiovIF0pO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wZGYud29ya2VyLmpzLm1hcFxuIiwiLyoqXG4gKiBAbGljc3RhcnQgVGhlIGZvbGxvd2luZyBpcyB0aGUgZW50aXJlIGxpY2Vuc2Ugbm90aWNlIGZvciB0aGVcbiAqIEphdmFzY3JpcHQgY29kZSBpbiB0aGlzIHBhZ2VcbiAqXG4gKiBDb3B5cmlnaHQgMjAxOCBNb3ppbGxhIEZvdW5kYXRpb25cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICogVGhpcyB3b3VsZCBwcm92ZSBJJ3ZlIGdvdCBhdCBsZWFzdCBzb21lIGNvbnRyb2wuLi5cbiAqXG4gKiBAbGljZW5kIFRoZSBhYm92ZSBpcyB0aGUgZW50aXJlIGxpY2Vuc2Ugbm90aWNlIGZvciB0aGVcbiAqIEphdmFzY3JpcHQgY29kZSBpbiB0aGlzIHBhZ2VcbiAqL1xuXG4oZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JylcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gICAgZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG4gICAgICAgIGRlZmluZShcImV4dHJhY3RoaWdobGlnaHRzLWRpc3QvYnVpbGQvZXh0cmFjdGhpZ2hsaWdodHNcIiwgW10sIGZhY3RvcnkpO1xuICAgIGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuICAgICAgICBleHBvcnRzW1wiZXh0cmFjdGhpZ2hsaWdodHMtZGlzdC9idWlsZC9leHRyYWN0aGlnaGxpZ2h0c1wiXSA9IGZhY3RvcnkoKTtcbiAgICBlbHNlXG4gICAgICAgIHJvb3RbXCJleHRyYWN0aGlnaGxpZ2h0cy1kaXN0L2J1aWxkL2V4dHJhY3RoaWdobGlnaHRzXCJdID0gcm9vdC5leHRyYWN0aGlnaGxpZ2h0c0xpYiA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4gICAgICAgIC8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuICAgICAgICAvKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4gICAgICAgIC8qKioqKiovXG4gICAgICAgIC8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiAgICAgICAgLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4gICAgICAgICAgICAvKioqKioqL1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuICAgICAgICAgICAgLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gICAgICAgICAgICAgICAgLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gICAgICAgICAgICAgICAgLyoqKioqKi8gXHRcdH1cbiAgICAgICAgICAgIC8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuICAgICAgICAgICAgLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiAgICAgICAgICAgICAgICAvKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbiAgICAgICAgICAgICAgICAvKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAvKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuICAgICAgICAgICAgICAgIC8qKioqKiovIFx0XHR9O1xuICAgICAgICAgICAgLyoqKioqKi9cbiAgICAgICAgICAgIC8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiAgICAgICAgICAgIC8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKTtcbiAgICAgICAgICAgIC8qKioqKiovXG4gICAgICAgICAgICAvKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuICAgICAgICAgICAgLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbiAgICAgICAgICAgIC8qKioqKiovXG4gICAgICAgICAgICAvKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gICAgICAgICAgICAvKioqKioqLyBcdH1cbiAgICAgICAgLyoqKioqKi9cbiAgICAgICAgLyoqKioqKi9cbiAgICAgICAgLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuICAgICAgICAvKioqKioqLyBcdF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4gICAgICAgIC8qKioqKiovXG4gICAgICAgIC8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiAgICAgICAgLyoqKioqKi8gXHRfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuICAgICAgICAvKioqKioqL1xuICAgICAgICAvKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuICAgICAgICAvKioqKioqLyBcdF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdGlmKCFfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiAgICAgICAgICAgICAgICAvKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiAgICAgICAgICAgICAgICAvKioqKioqLyBcdFx0fVxuICAgICAgICAgICAgLyoqKioqKi8gXHR9O1xuICAgICAgICAvKioqKioqL1xuICAgICAgICAvKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiAgICAgICAgLyoqKioqKi8gXHRfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gICAgICAgICAgICAvKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gICAgICAgICAgICAgICAgLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gICAgICAgICAgICAgICAgLyoqKioqKi8gXHRcdH1cbiAgICAgICAgICAgIC8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICAgICAgLyoqKioqKi8gXHR9O1xuICAgICAgICAvKioqKioqL1xuICAgICAgICAvKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuICAgICAgICAvKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuICAgICAgICAvKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuICAgICAgICAvKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuICAgICAgICAvKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiAgICAgICAgLyoqKioqKi8gXHRfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18odmFsdWUpO1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAvKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18ucihucyk7XG4gICAgICAgICAgICAvKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4gICAgICAgICAgICAvKioqKioqLyBcdH07XG4gICAgICAgIC8qKioqKiovXG4gICAgICAgIC8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiAgICAgICAgLyoqKioqKi8gXHRfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiAgICAgICAgICAgICAgICAvKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuICAgICAgICAgICAgICAgIC8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gICAgICAgICAgICAvKioqKioqLyBcdFx0X193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4gICAgICAgICAgICAvKioqKioqLyBcdH07XG4gICAgICAgIC8qKioqKiovXG4gICAgICAgIC8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gICAgICAgIC8qKioqKiovIFx0X193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuICAgICAgICAvKioqKioqL1xuICAgICAgICAvKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gICAgICAgIC8qKioqKiovIFx0X193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5wID0gXCJcIjtcbiAgICAgICAgLyoqKioqKi9cbiAgICAgICAgLyoqKioqKi9cbiAgICAgICAgLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiAgICAgICAgLyoqKioqKi8gXHRyZXR1cm4gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyhfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLnMgPSAwKTtcbiAgICAgICAgLyoqKioqKi8gfSlcbiAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAgICAgICAgLyoqKioqKi8gKFtcbiAgICAgICAgICAgIC8qIDAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgZXh0cmFjdGhpZ2hsaWdodHNWZXJzaW9uID0gJzIuMS4yNjYnO1xuICAgICAgICAgICAgICAgIHZhciBleHRyYWN0aGlnaGxpZ2h0c0J1aWxkID0gJzgxZjU4MzVjJztcblxuICAgICAgICAgICAgICAgIHZhciBleHRyYWN0aGlnaGxpZ2h0c1NoYXJlZFV0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGV4dHJhY3RoaWdobGlnaHRzRGlzcGxheUFQSSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQ2KTtcblxuICAgICAgICAgICAgICAgIHZhciBleHRyYWN0aGlnaGxpZ2h0c0Rpc3BsYXlUZXh0TGF5ZXIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2Mik7XG5cbiAgICAgICAgICAgICAgICB2YXIgZXh0cmFjdGhpZ2hsaWdodHNEaXNwbGF5QW5ub3RhdGlvbkxheWVyID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNjMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGV4dHJhY3RoaWdobGlnaHRzRGlzcGxheURPTVV0aWxzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGV4dHJhY3RoaWdobGlnaHRzRGlzcGxheVNWRyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTY0KTtcblxuICAgICAgICAgICAgICAgIHZhciBleHRyYWN0aGlnaGxpZ2h0c0Rpc3BsYXlXb3JrZXJPcHRpb25zID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGV4dHJhY3RoaWdobGlnaHRzRGlzcGxheUFQSUNvbXBhdGliaWxpdHkgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1Myk7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc05vZGVKUyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm9kZUpTKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBQREZOb2RlU3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNjUpLlBERk5vZGVTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RoaWdobGlnaHRzRGlzcGxheUFQSS5zZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeShmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQREZOb2RlU3RyZWFtKHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgUmVzcG9uc2UgIT09ICd1bmRlZmluZWQnICYmICdib2R5JyBpbiBSZXNwb25zZS5wcm90b3R5cGUgJiYgdHlwZW9mIFJlYWRhYmxlU3RyZWFtICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFBERkZldGNoU3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNjgpLlBERkZldGNoU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0aGlnaGxpZ2h0c0Rpc3BsYXlBUEkuc2V0UERGTmV0d29ya1N0cmVhbUZhY3RvcnkoZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUERGRmV0Y2hTdHJlYW0ocGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFBERk5ldHdvcmtTdHJlYW0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2OSkuUERGTmV0d29ya1N0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGhpZ2hsaWdodHNEaXNwbGF5QVBJLnNldFBERk5ldHdvcmtTdHJlYW1GYWN0b3J5KGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBERk5ldHdvcmtTdHJlYW0ocGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV4cG9ydHMuYnVpbGQgPSBleHRyYWN0aGlnaGxpZ2h0c0Rpc3BsYXlBUEkuYnVpbGQ7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy52ZXJzaW9uID0gZXh0cmFjdGhpZ2hsaWdodHNEaXNwbGF5QVBJLnZlcnNpb247XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5nZXREb2N1bWVudCA9IGV4dHJhY3RoaWdobGlnaHRzRGlzcGxheUFQSS5nZXREb2N1bWVudDtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkxvb3BiYWNrUG9ydCA9IGV4dHJhY3RoaWdobGlnaHRzRGlzcGxheUFQSS5Mb29wYmFja1BvcnQ7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QREZEYXRhUmFuZ2VUcmFuc3BvcnQgPSBleHRyYWN0aGlnaGxpZ2h0c0Rpc3BsYXlBUEkuUERGRGF0YVJhbmdlVHJhbnNwb3J0O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUERGV29ya2VyID0gZXh0cmFjdGhpZ2hsaWdodHNEaXNwbGF5QVBJLlBERldvcmtlcjtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnJlbmRlclRleHRMYXllciA9IGV4dHJhY3RoaWdobGlnaHRzRGlzcGxheVRleHRMYXllci5yZW5kZXJUZXh0TGF5ZXI7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Bbm5vdGF0aW9uTGF5ZXIgPSBleHRyYWN0aGlnaGxpZ2h0c0Rpc3BsYXlBbm5vdGF0aW9uTGF5ZXIuQW5ub3RhdGlvbkxheWVyO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkgPSBleHRyYWN0aGlnaGxpZ2h0c1NoYXJlZFV0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QYXNzd29yZFJlc3BvbnNlcyA9IGV4dHJhY3RoaWdobGlnaHRzU2hhcmVkVXRpbC5QYXNzd29yZFJlc3BvbnNlcztcbiAgICAgICAgICAgICAgICBleHBvcnRzLkludmFsaWRQREZFeGNlcHRpb24gPSBleHRyYWN0aGlnaGxpZ2h0c1NoYXJlZFV0aWwuSW52YWxpZFBERkV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICBleHBvcnRzLk1pc3NpbmdQREZFeGNlcHRpb24gPSBleHRyYWN0aGlnaGxpZ2h0c1NoYXJlZFV0aWwuTWlzc2luZ1BERkV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICBleHBvcnRzLlNWR0dyYXBoaWNzID0gZXh0cmFjdGhpZ2hsaWdodHNEaXNwbGF5U1ZHLlNWR0dyYXBoaWNzO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuTmF0aXZlSW1hZ2VEZWNvZGluZyA9IGV4dHJhY3RoaWdobGlnaHRzU2hhcmVkVXRpbC5OYXRpdmVJbWFnZURlY29kaW5nO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ01hcENvbXByZXNzaW9uVHlwZSA9IGV4dHJhY3RoaWdobGlnaHRzU2hhcmVkVXRpbC5DTWFwQ29tcHJlc3Npb25UeXBlO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUGVybWlzc2lvbkZsYWcgPSBleHRyYWN0aGlnaGxpZ2h0c1NoYXJlZFV0aWwuUGVybWlzc2lvbkZsYWc7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24gPSBleHRyYWN0aGlnaGxpZ2h0c1NoYXJlZFV0aWwuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuT1BTID0gZXh0cmFjdGhpZ2hsaWdodHNTaGFyZWRVdGlsLk9QUztcbiAgICAgICAgICAgICAgICBleHBvcnRzLlZlcmJvc2l0eUxldmVsID0gZXh0cmFjdGhpZ2hsaWdodHNTaGFyZWRVdGlsLlZlcmJvc2l0eUxldmVsO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuVU5TVVBQT1JURURfRkVBVFVSRVMgPSBleHRyYWN0aGlnaGxpZ2h0c1NoYXJlZFV0aWwuVU5TVVBQT1JURURfRkVBVFVSRVM7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5jcmVhdGVWYWxpZEFic29sdXRlVXJsID0gZXh0cmFjdGhpZ2hsaWdodHNTaGFyZWRVdGlsLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmw7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5jcmVhdGVPYmplY3RVUkwgPSBleHRyYWN0aGlnaGxpZ2h0c1NoYXJlZFV0aWwuY3JlYXRlT2JqZWN0VVJMO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMucmVtb3ZlTnVsbENoYXJhY3RlcnMgPSBleHRyYWN0aGlnaGxpZ2h0c1NoYXJlZFV0aWwucmVtb3ZlTnVsbENoYXJhY3RlcnM7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5zaGFkb3cgPSBleHRyYWN0aGlnaGxpZ2h0c1NoYXJlZFV0aWwuc2hhZG93O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuVXRpbCA9IGV4dHJhY3RoaWdobGlnaHRzU2hhcmVkVXRpbC5VdGlsO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUmVhZGFibGVTdHJlYW0gPSBleHRyYWN0aGlnaGxpZ2h0c1NoYXJlZFV0aWwuUmVhZGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5VUkwgPSBleHRyYWN0aGlnaGxpZ2h0c1NoYXJlZFV0aWwuVVJMO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uID0gZXh0cmFjdGhpZ2hsaWdodHNEaXNwbGF5RE9NVXRpbHMuUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuZ2V0RmlsZW5hbWVGcm9tVXJsID0gZXh0cmFjdGhpZ2hsaWdodHNEaXNwbGF5RE9NVXRpbHMuZ2V0RmlsZW5hbWVGcm9tVXJsO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuTGlua1RhcmdldCA9IGV4dHJhY3RoaWdobGlnaHRzRGlzcGxheURPTVV0aWxzLkxpbmtUYXJnZXQ7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5hZGRMaW5rQXR0cmlidXRlcyA9IGV4dHJhY3RoaWdobGlnaHRzRGlzcGxheURPTVV0aWxzLmFkZExpbmtBdHRyaWJ1dGVzO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMubG9hZFNjcmlwdCA9IGV4dHJhY3RoaWdobGlnaHRzRGlzcGxheURPTVV0aWxzLmxvYWRTY3JpcHQ7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5HbG9iYWxXb3JrZXJPcHRpb25zID0gZXh0cmFjdGhpZ2hsaWdodHNEaXNwbGF5V29ya2VyT3B0aW9ucy5HbG9iYWxXb3JrZXJPcHRpb25zO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuYXBpQ29tcGF0aWJpbGl0eVBhcmFtcyA9IGV4dHJhY3RoaWdobGlnaHRzRGlzcGxheUFQSUNvbXBhdGliaWxpdHkuYXBpQ29tcGF0aWJpbGl0eVBhcmFtcztcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMudG9Sb21hbk51bWVyYWxzID0gdG9Sb21hbk51bWVyYWxzO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuYXJyYXlCeXRlTGVuZ3RoID0gYXJyYXlCeXRlTGVuZ3RoO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuYXJyYXlzVG9CeXRlcyA9IGFycmF5c1RvQnl0ZXM7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5hc3NlcnQgPSBhc3NlcnQ7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5ieXRlc1RvU3RyaW5nID0gYnl0ZXNUb1N0cmluZztcbiAgICAgICAgICAgICAgICBleHBvcnRzLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5ID0gY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5kZXByZWNhdGVkID0gZGVwcmVjYXRlZDtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmdldEluaGVyaXRhYmxlUHJvcGVydHkgPSBnZXRJbmhlcml0YWJsZVByb3BlcnR5O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5ID0gZ2V0TG9va3VwVGFibGVGYWN0b3J5O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuZ2V0VmVyYm9zaXR5TGV2ZWwgPSBnZXRWZXJib3NpdHlMZXZlbDtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmluZm8gPSBpbmZvO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuaXNBcnJheUJ1ZmZlciA9IGlzQXJyYXlCdWZmZXI7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5pc0Jvb2wgPSBpc0Jvb2w7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5pc0VtcHR5T2JqID0gaXNFbXB0eU9iajtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmlzTnVtID0gaXNOdW07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuaXNTcGFjZSA9IGlzU3BhY2U7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5pc1NhbWVPcmlnaW4gPSBpc1NhbWVPcmlnaW47XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5jcmVhdGVWYWxpZEFic29sdXRlVXJsID0gY3JlYXRlVmFsaWRBYnNvbHV0ZVVybDtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmlzTGl0dGxlRW5kaWFuID0gaXNMaXR0bGVFbmRpYW47XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5pc0V2YWxTdXBwb3J0ZWQgPSBpc0V2YWxTdXBwb3J0ZWQ7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5sb2cyID0gbG9nMjtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnJlYWRJbnQ4ID0gcmVhZEludDg7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5yZWFkVWludDE2ID0gcmVhZFVpbnQxNjtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnJlYWRVaW50MzIgPSByZWFkVWludDMyO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMucmVtb3ZlTnVsbENoYXJhY3RlcnMgPSByZW1vdmVOdWxsQ2hhcmFjdGVycztcbiAgICAgICAgICAgICAgICBleHBvcnRzLnNldFZlcmJvc2l0eUxldmVsID0gc2V0VmVyYm9zaXR5TGV2ZWw7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5zaGFkb3cgPSBzaGFkb3c7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5zdHJpbmczMiA9IHN0cmluZzMyO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuc3RyaW5nVG9CeXRlcyA9IHN0cmluZ1RvQnl0ZXM7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5zdHJpbmdUb1BERlN0cmluZyA9IHN0cmluZ1RvUERGU3RyaW5nO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuc3RyaW5nVG9VVEY4U3RyaW5nID0gc3RyaW5nVG9VVEY4U3RyaW5nO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMudXRmOFN0cmluZ1RvU3RyaW5nID0gdXRmOFN0cmluZ1RvU3RyaW5nO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMud2FybiA9IHdhcm47XG4gICAgICAgICAgICAgICAgZXhwb3J0cy51bnJlYWNoYWJsZSA9IHVucmVhY2hhYmxlO1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlYWRhYmxlU3RyZWFtXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3N0cmVhbXNfcG9seWZpbGwuUmVhZGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJVUkxcIiwge1xuICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdXJsX3BvbHlmaWxsLlVSTDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuY3JlYXRlT2JqZWN0VVJMID0gZXhwb3J0cy5Gb3JtYXRFcnJvciA9IGV4cG9ydHMuWFJlZlBhcnNlRXhjZXB0aW9uID0gZXhwb3J0cy5YUmVmRW50cnlFeGNlcHRpb24gPSBleHBvcnRzLlV0aWwgPSBleHBvcnRzLlVua25vd25FcnJvckV4Y2VwdGlvbiA9IGV4cG9ydHMuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uID0gZXhwb3J0cy5UZXh0UmVuZGVyaW5nTW9kZSA9IGV4cG9ydHMuU3RyZWFtVHlwZSA9IGV4cG9ydHMuUGVybWlzc2lvbkZsYWcgPSBleHBvcnRzLlBhc3N3b3JkUmVzcG9uc2VzID0gZXhwb3J0cy5QYXNzd29yZEV4Y2VwdGlvbiA9IGV4cG9ydHMuTmF0aXZlSW1hZ2VEZWNvZGluZyA9IGV4cG9ydHMuTWlzc2luZ1BERkV4Y2VwdGlvbiA9IGV4cG9ydHMuTWlzc2luZ0RhdGFFeGNlcHRpb24gPSBleHBvcnRzLkludmFsaWRQREZFeGNlcHRpb24gPSBleHBvcnRzLkFib3J0RXhjZXB0aW9uID0gZXhwb3J0cy5DTWFwQ29tcHJlc3Npb25UeXBlID0gZXhwb3J0cy5JbWFnZUtpbmQgPSBleHBvcnRzLkZvbnRUeXBlID0gZXhwb3J0cy5Bbm5vdGF0aW9uVHlwZSA9IGV4cG9ydHMuQW5ub3RhdGlvbkZsYWcgPSBleHBvcnRzLkFubm90YXRpb25GaWVsZEZsYWcgPSBleHBvcnRzLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUgPSBleHBvcnRzLlVOU1VQUE9SVEVEX0ZFQVRVUkVTID0gZXhwb3J0cy5WZXJib3NpdHlMZXZlbCA9IGV4cG9ydHMuT1BTID0gZXhwb3J0cy5JREVOVElUWV9NQVRSSVggPSBleHBvcnRzLkZPTlRfSURFTlRJVFlfTUFUUklYID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyKTtcblxuICAgICAgICAgICAgICAgIHZhciBfc3RyZWFtc19wb2x5ZmlsbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQyKTtcblxuICAgICAgICAgICAgICAgIHZhciBfdXJsX3BvbHlmaWxsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNDQpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuICAgICAgICAgICAgICAgIHZhciBJREVOVElUWV9NQVRSSVggPSBbMSwgMCwgMCwgMSwgMCwgMF07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5JREVOVElUWV9NQVRSSVggPSBJREVOVElUWV9NQVRSSVg7XG4gICAgICAgICAgICAgICAgdmFyIEZPTlRfSURFTlRJVFlfTUFUUklYID0gWzAuMDAxLCAwLCAwLCAwLjAwMSwgMCwgMF07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5GT05UX0lERU5USVRZX01BVFJJWCA9IEZPTlRfSURFTlRJVFlfTUFUUklYO1xuICAgICAgICAgICAgICAgIHZhciBOYXRpdmVJbWFnZURlY29kaW5nID0ge1xuICAgICAgICAgICAgICAgICAgICBOT05FOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgIERFQ09ERTogJ2RlY29kZScsXG4gICAgICAgICAgICAgICAgICAgIERJU1BMQVk6ICdkaXNwbGF5J1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5OYXRpdmVJbWFnZURlY29kaW5nID0gTmF0aXZlSW1hZ2VEZWNvZGluZztcbiAgICAgICAgICAgICAgICB2YXIgUGVybWlzc2lvbkZsYWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIFBSSU5UOiAweDA0LFxuICAgICAgICAgICAgICAgICAgICBNT0RJRllfQ09OVEVOVFM6IDB4MDgsXG4gICAgICAgICAgICAgICAgICAgIENPUFk6IDB4MTAsXG4gICAgICAgICAgICAgICAgICAgIE1PRElGWV9BTk5PVEFUSU9OUzogMHgyMCxcbiAgICAgICAgICAgICAgICAgICAgRklMTF9JTlRFUkFDVElWRV9GT1JNUzogMHgxMDAsXG4gICAgICAgICAgICAgICAgICAgIENPUFlfRk9SX0FDQ0VTU0lCSUxJVFk6IDB4MjAwLFxuICAgICAgICAgICAgICAgICAgICBBU1NFTUJMRTogMHg0MDAsXG4gICAgICAgICAgICAgICAgICAgIFBSSU5UX0hJR0hfUVVBTElUWTogMHg4MDBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUGVybWlzc2lvbkZsYWcgPSBQZXJtaXNzaW9uRmxhZztcbiAgICAgICAgICAgICAgICB2YXIgVGV4dFJlbmRlcmluZ01vZGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIEZJTEw6IDAsXG4gICAgICAgICAgICAgICAgICAgIFNUUk9LRTogMSxcbiAgICAgICAgICAgICAgICAgICAgRklMTF9TVFJPS0U6IDIsXG4gICAgICAgICAgICAgICAgICAgIElOVklTSUJMRTogMyxcbiAgICAgICAgICAgICAgICAgICAgRklMTF9BRERfVE9fUEFUSDogNCxcbiAgICAgICAgICAgICAgICAgICAgU1RST0tFX0FERF9UT19QQVRIOiA1LFxuICAgICAgICAgICAgICAgICAgICBGSUxMX1NUUk9LRV9BRERfVE9fUEFUSDogNixcbiAgICAgICAgICAgICAgICAgICAgQUREX1RPX1BBVEg6IDcsXG4gICAgICAgICAgICAgICAgICAgIEZJTExfU1RST0tFX01BU0s6IDMsXG4gICAgICAgICAgICAgICAgICAgIEFERF9UT19QQVRIX0ZMQUc6IDRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuVGV4dFJlbmRlcmluZ01vZGUgPSBUZXh0UmVuZGVyaW5nTW9kZTtcbiAgICAgICAgICAgICAgICB2YXIgSW1hZ2VLaW5kID0ge1xuICAgICAgICAgICAgICAgICAgICBHUkFZU0NBTEVfMUJQUDogMSxcbiAgICAgICAgICAgICAgICAgICAgUkdCXzI0QlBQOiAyLFxuICAgICAgICAgICAgICAgICAgICBSR0JBXzMyQlBQOiAzXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkltYWdlS2luZCA9IEltYWdlS2luZDtcbiAgICAgICAgICAgICAgICB2YXIgQW5ub3RhdGlvblR5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIFRFWFQ6IDEsXG4gICAgICAgICAgICAgICAgICAgIExJTks6IDIsXG4gICAgICAgICAgICAgICAgICAgIEZSRUVURVhUOiAzLFxuICAgICAgICAgICAgICAgICAgICBMSU5FOiA0LFxuICAgICAgICAgICAgICAgICAgICBTUVVBUkU6IDUsXG4gICAgICAgICAgICAgICAgICAgIENJUkNMRTogNixcbiAgICAgICAgICAgICAgICAgICAgUE9MWUdPTjogNyxcbiAgICAgICAgICAgICAgICAgICAgUE9MWUxJTkU6IDgsXG4gICAgICAgICAgICAgICAgICAgIEhJR0hMSUdIVDogOSxcbiAgICAgICAgICAgICAgICAgICAgVU5ERVJMSU5FOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgU1FVSUdHTFk6IDExLFxuICAgICAgICAgICAgICAgICAgICBTVFJJS0VPVVQ6IDEyLFxuICAgICAgICAgICAgICAgICAgICBTVEFNUDogMTMsXG4gICAgICAgICAgICAgICAgICAgIENBUkVUOiAxNCxcbiAgICAgICAgICAgICAgICAgICAgSU5LOiAxNSxcbiAgICAgICAgICAgICAgICAgICAgUE9QVVA6IDE2LFxuICAgICAgICAgICAgICAgICAgICBGSUxFQVRUQUNITUVOVDogMTcsXG4gICAgICAgICAgICAgICAgICAgIFNPVU5EOiAxOCxcbiAgICAgICAgICAgICAgICAgICAgTU9WSUU6IDE5LFxuICAgICAgICAgICAgICAgICAgICBXSURHRVQ6IDIwLFxuICAgICAgICAgICAgICAgICAgICBTQ1JFRU46IDIxLFxuICAgICAgICAgICAgICAgICAgICBQUklOVEVSTUFSSzogMjIsXG4gICAgICAgICAgICAgICAgICAgIFRSQVBORVQ6IDIzLFxuICAgICAgICAgICAgICAgICAgICBXQVRFUk1BUks6IDI0LFxuICAgICAgICAgICAgICAgICAgICBUSFJFRUQ6IDI1LFxuICAgICAgICAgICAgICAgICAgICBSRURBQ1Q6IDI2XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkFubm90YXRpb25UeXBlID0gQW5ub3RhdGlvblR5cGU7XG4gICAgICAgICAgICAgICAgdmFyIEFubm90YXRpb25GbGFnID0ge1xuICAgICAgICAgICAgICAgICAgICBJTlZJU0lCTEU6IDB4MDEsXG4gICAgICAgICAgICAgICAgICAgIEhJRERFTjogMHgwMixcbiAgICAgICAgICAgICAgICAgICAgUFJJTlQ6IDB4MDQsXG4gICAgICAgICAgICAgICAgICAgIE5PWk9PTTogMHgwOCxcbiAgICAgICAgICAgICAgICAgICAgTk9ST1RBVEU6IDB4MTAsXG4gICAgICAgICAgICAgICAgICAgIE5PVklFVzogMHgyMCxcbiAgICAgICAgICAgICAgICAgICAgUkVBRE9OTFk6IDB4NDAsXG4gICAgICAgICAgICAgICAgICAgIExPQ0tFRDogMHg4MCxcbiAgICAgICAgICAgICAgICAgICAgVE9HR0xFTk9WSUVXOiAweDEwMCxcbiAgICAgICAgICAgICAgICAgICAgTE9DS0VEQ09OVEVOVFM6IDB4MjAwXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkFubm90YXRpb25GbGFnID0gQW5ub3RhdGlvbkZsYWc7XG4gICAgICAgICAgICAgICAgdmFyIEFubm90YXRpb25GaWVsZEZsYWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIFJFQURPTkxZOiAweDAwMDAwMDEsXG4gICAgICAgICAgICAgICAgICAgIFJFUVVJUkVEOiAweDAwMDAwMDIsXG4gICAgICAgICAgICAgICAgICAgIE5PRVhQT1JUOiAweDAwMDAwMDQsXG4gICAgICAgICAgICAgICAgICAgIE1VTFRJTElORTogMHgwMDAxMDAwLFxuICAgICAgICAgICAgICAgICAgICBQQVNTV09SRDogMHgwMDAyMDAwLFxuICAgICAgICAgICAgICAgICAgICBOT1RPR0dMRVRPT0ZGOiAweDAwMDQwMDAsXG4gICAgICAgICAgICAgICAgICAgIFJBRElPOiAweDAwMDgwMDAsXG4gICAgICAgICAgICAgICAgICAgIFBVU0hCVVRUT046IDB4MDAxMDAwMCxcbiAgICAgICAgICAgICAgICAgICAgQ09NQk86IDB4MDAyMDAwMCxcbiAgICAgICAgICAgICAgICAgICAgRURJVDogMHgwMDQwMDAwLFxuICAgICAgICAgICAgICAgICAgICBTT1JUOiAweDAwODAwMDAsXG4gICAgICAgICAgICAgICAgICAgIEZJTEVTRUxFQ1Q6IDB4MDEwMDAwMCxcbiAgICAgICAgICAgICAgICAgICAgTVVMVElTRUxFQ1Q6IDB4MDIwMDAwMCxcbiAgICAgICAgICAgICAgICAgICAgRE9OT1RTUEVMTENIRUNLOiAweDA0MDAwMDAsXG4gICAgICAgICAgICAgICAgICAgIERPTk9UU0NST0xMOiAweDA4MDAwMDAsXG4gICAgICAgICAgICAgICAgICAgIENPTUI6IDB4MTAwMDAwMCxcbiAgICAgICAgICAgICAgICAgICAgUklDSFRFWFQ6IDB4MjAwMDAwMCxcbiAgICAgICAgICAgICAgICAgICAgUkFESU9TSU5VTklTT046IDB4MjAwMDAwMCxcbiAgICAgICAgICAgICAgICAgICAgQ09NTUlUT05TRUxDSEFOR0U6IDB4NDAwMDAwMFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Bbm5vdGF0aW9uRmllbGRGbGFnID0gQW5ub3RhdGlvbkZpZWxkRmxhZztcbiAgICAgICAgICAgICAgICB2YXIgQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgU09MSUQ6IDEsXG4gICAgICAgICAgICAgICAgICAgIERBU0hFRDogMixcbiAgICAgICAgICAgICAgICAgICAgQkVWRUxFRDogMyxcbiAgICAgICAgICAgICAgICAgICAgSU5TRVQ6IDQsXG4gICAgICAgICAgICAgICAgICAgIFVOREVSTElORTogNVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlID0gQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZTtcbiAgICAgICAgICAgICAgICB2YXIgU3RyZWFtVHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgVU5LTk9XTjogMCxcbiAgICAgICAgICAgICAgICAgICAgRkxBVEU6IDEsXG4gICAgICAgICAgICAgICAgICAgIExaVzogMixcbiAgICAgICAgICAgICAgICAgICAgRENUOiAzLFxuICAgICAgICAgICAgICAgICAgICBKUFg6IDQsXG4gICAgICAgICAgICAgICAgICAgIEpCSUc6IDUsXG4gICAgICAgICAgICAgICAgICAgIEE4NTogNixcbiAgICAgICAgICAgICAgICAgICAgQUhYOiA3LFxuICAgICAgICAgICAgICAgICAgICBDQ0Y6IDgsXG4gICAgICAgICAgICAgICAgICAgIFJMOiA5XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLlN0cmVhbVR5cGUgPSBTdHJlYW1UeXBlO1xuICAgICAgICAgICAgICAgIHZhciBGb250VHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgVU5LTk9XTjogMCxcbiAgICAgICAgICAgICAgICAgICAgVFlQRTE6IDEsXG4gICAgICAgICAgICAgICAgICAgIFRZUEUxQzogMixcbiAgICAgICAgICAgICAgICAgICAgQ0lERk9OVFRZUEUwOiAzLFxuICAgICAgICAgICAgICAgICAgICBDSURGT05UVFlQRTBDOiA0LFxuICAgICAgICAgICAgICAgICAgICBUUlVFVFlQRTogNSxcbiAgICAgICAgICAgICAgICAgICAgQ0lERk9OVFRZUEUyOiA2LFxuICAgICAgICAgICAgICAgICAgICBUWVBFMzogNyxcbiAgICAgICAgICAgICAgICAgICAgT1BFTlRZUEU6IDgsXG4gICAgICAgICAgICAgICAgICAgIFRZUEUwOiA5LFxuICAgICAgICAgICAgICAgICAgICBNTVRZUEUxOiAxMFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Gb250VHlwZSA9IEZvbnRUeXBlO1xuICAgICAgICAgICAgICAgIHZhciBWZXJib3NpdHlMZXZlbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgRVJST1JTOiAwLFxuICAgICAgICAgICAgICAgICAgICBXQVJOSU5HUzogMSxcbiAgICAgICAgICAgICAgICAgICAgSU5GT1M6IDVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuVmVyYm9zaXR5TGV2ZWwgPSBWZXJib3NpdHlMZXZlbDtcbiAgICAgICAgICAgICAgICB2YXIgQ01hcENvbXByZXNzaW9uVHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgTk9ORTogMCxcbiAgICAgICAgICAgICAgICAgICAgQklOQVJZOiAxLFxuICAgICAgICAgICAgICAgICAgICBTVFJFQU06IDJcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ01hcENvbXByZXNzaW9uVHlwZSA9IENNYXBDb21wcmVzc2lvblR5cGU7XG4gICAgICAgICAgICAgICAgdmFyIE9QUyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeTogMSxcbiAgICAgICAgICAgICAgICAgICAgc2V0TGluZVdpZHRoOiAyLFxuICAgICAgICAgICAgICAgICAgICBzZXRMaW5lQ2FwOiAzLFxuICAgICAgICAgICAgICAgICAgICBzZXRMaW5lSm9pbjogNCxcbiAgICAgICAgICAgICAgICAgICAgc2V0TWl0ZXJMaW1pdDogNSxcbiAgICAgICAgICAgICAgICAgICAgc2V0RGFzaDogNixcbiAgICAgICAgICAgICAgICAgICAgc2V0UmVuZGVyaW5nSW50ZW50OiA3LFxuICAgICAgICAgICAgICAgICAgICBzZXRGbGF0bmVzczogOCxcbiAgICAgICAgICAgICAgICAgICAgc2V0R1N0YXRlOiA5LFxuICAgICAgICAgICAgICAgICAgICBzYXZlOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgcmVzdG9yZTogMTEsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogMTIsXG4gICAgICAgICAgICAgICAgICAgIG1vdmVUbzogMTMsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVUbzogMTQsXG4gICAgICAgICAgICAgICAgICAgIGN1cnZlVG86IDE1LFxuICAgICAgICAgICAgICAgICAgICBjdXJ2ZVRvMjogMTYsXG4gICAgICAgICAgICAgICAgICAgIGN1cnZlVG8zOiAxNyxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VQYXRoOiAxOCxcbiAgICAgICAgICAgICAgICAgICAgcmVjdGFuZ2xlOiAxOSxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VTdHJva2U6IDIxLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiAyMixcbiAgICAgICAgICAgICAgICAgICAgZW9GaWxsOiAyMyxcbiAgICAgICAgICAgICAgICAgICAgZmlsbFN0cm9rZTogMjQsXG4gICAgICAgICAgICAgICAgICAgIGVvRmlsbFN0cm9rZTogMjUsXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlRmlsbFN0cm9rZTogMjYsXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlRU9GaWxsU3Ryb2tlOiAyNyxcbiAgICAgICAgICAgICAgICAgICAgZW5kUGF0aDogMjgsXG4gICAgICAgICAgICAgICAgICAgIGNsaXA6IDI5LFxuICAgICAgICAgICAgICAgICAgICBlb0NsaXA6IDMwLFxuICAgICAgICAgICAgICAgICAgICBiZWdpblRleHQ6IDMxLFxuICAgICAgICAgICAgICAgICAgICBlbmRUZXh0OiAzMixcbiAgICAgICAgICAgICAgICAgICAgc2V0Q2hhclNwYWNpbmc6IDMzLFxuICAgICAgICAgICAgICAgICAgICBzZXRXb3JkU3BhY2luZzogMzQsXG4gICAgICAgICAgICAgICAgICAgIHNldEhTY2FsZTogMzUsXG4gICAgICAgICAgICAgICAgICAgIHNldExlYWRpbmc6IDM2LFxuICAgICAgICAgICAgICAgICAgICBzZXRGb250OiAzNyxcbiAgICAgICAgICAgICAgICAgICAgc2V0VGV4dFJlbmRlcmluZ01vZGU6IDM4LFxuICAgICAgICAgICAgICAgICAgICBzZXRUZXh0UmlzZTogMzksXG4gICAgICAgICAgICAgICAgICAgIG1vdmVUZXh0OiA0MCxcbiAgICAgICAgICAgICAgICAgICAgc2V0TGVhZGluZ01vdmVUZXh0OiA0MSxcbiAgICAgICAgICAgICAgICAgICAgc2V0VGV4dE1hdHJpeDogNDIsXG4gICAgICAgICAgICAgICAgICAgIG5leHRMaW5lOiA0MyxcbiAgICAgICAgICAgICAgICAgICAgc2hvd1RleHQ6IDQ0LFxuICAgICAgICAgICAgICAgICAgICBzaG93U3BhY2VkVGV4dDogNDUsXG4gICAgICAgICAgICAgICAgICAgIG5leHRMaW5lU2hvd1RleHQ6IDQ2LFxuICAgICAgICAgICAgICAgICAgICBuZXh0TGluZVNldFNwYWNpbmdTaG93VGV4dDogNDcsXG4gICAgICAgICAgICAgICAgICAgIHNldENoYXJXaWR0aDogNDgsXG4gICAgICAgICAgICAgICAgICAgIHNldENoYXJXaWR0aEFuZEJvdW5kczogNDksXG4gICAgICAgICAgICAgICAgICAgIHNldFN0cm9rZUNvbG9yU3BhY2U6IDUwLFxuICAgICAgICAgICAgICAgICAgICBzZXRGaWxsQ29sb3JTcGFjZTogNTEsXG4gICAgICAgICAgICAgICAgICAgIHNldFN0cm9rZUNvbG9yOiA1MixcbiAgICAgICAgICAgICAgICAgICAgc2V0U3Ryb2tlQ29sb3JOOiA1MyxcbiAgICAgICAgICAgICAgICAgICAgc2V0RmlsbENvbG9yOiA1NCxcbiAgICAgICAgICAgICAgICAgICAgc2V0RmlsbENvbG9yTjogNTUsXG4gICAgICAgICAgICAgICAgICAgIHNldFN0cm9rZUdyYXk6IDU2LFxuICAgICAgICAgICAgICAgICAgICBzZXRGaWxsR3JheTogNTcsXG4gICAgICAgICAgICAgICAgICAgIHNldFN0cm9rZVJHQkNvbG9yOiA1OCxcbiAgICAgICAgICAgICAgICAgICAgc2V0RmlsbFJHQkNvbG9yOiA1OSxcbiAgICAgICAgICAgICAgICAgICAgc2V0U3Ryb2tlQ01ZS0NvbG9yOiA2MCxcbiAgICAgICAgICAgICAgICAgICAgc2V0RmlsbENNWUtDb2xvcjogNjEsXG4gICAgICAgICAgICAgICAgICAgIHNoYWRpbmdGaWxsOiA2MixcbiAgICAgICAgICAgICAgICAgICAgYmVnaW5JbmxpbmVJbWFnZTogNjMsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luSW1hZ2VEYXRhOiA2NCxcbiAgICAgICAgICAgICAgICAgICAgZW5kSW5saW5lSW1hZ2U6IDY1LFxuICAgICAgICAgICAgICAgICAgICBwYWludFhPYmplY3Q6IDY2LFxuICAgICAgICAgICAgICAgICAgICBtYXJrUG9pbnQ6IDY3LFxuICAgICAgICAgICAgICAgICAgICBtYXJrUG9pbnRQcm9wczogNjgsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luTWFya2VkQ29udGVudDogNjksXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luTWFya2VkQ29udGVudFByb3BzOiA3MCxcbiAgICAgICAgICAgICAgICAgICAgZW5kTWFya2VkQ29udGVudDogNzEsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luQ29tcGF0OiA3MixcbiAgICAgICAgICAgICAgICAgICAgZW5kQ29tcGF0OiA3MyxcbiAgICAgICAgICAgICAgICAgICAgcGFpbnRGb3JtWE9iamVjdEJlZ2luOiA3NCxcbiAgICAgICAgICAgICAgICAgICAgcGFpbnRGb3JtWE9iamVjdEVuZDogNzUsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luR3JvdXA6IDc2LFxuICAgICAgICAgICAgICAgICAgICBlbmRHcm91cDogNzcsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luQW5ub3RhdGlvbnM6IDc4LFxuICAgICAgICAgICAgICAgICAgICBlbmRBbm5vdGF0aW9uczogNzksXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luQW5ub3RhdGlvbjogODAsXG4gICAgICAgICAgICAgICAgICAgIGVuZEFubm90YXRpb246IDgxLFxuICAgICAgICAgICAgICAgICAgICBwYWludEpwZWdYT2JqZWN0OiA4MixcbiAgICAgICAgICAgICAgICAgICAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0OiA4MyxcbiAgICAgICAgICAgICAgICAgICAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0R3JvdXA6IDg0LFxuICAgICAgICAgICAgICAgICAgICBwYWludEltYWdlWE9iamVjdDogODUsXG4gICAgICAgICAgICAgICAgICAgIHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OiA4NixcbiAgICAgICAgICAgICAgICAgICAgcGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cDogODcsXG4gICAgICAgICAgICAgICAgICAgIHBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0OiA4OCxcbiAgICAgICAgICAgICAgICAgICAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0OiA4OSxcbiAgICAgICAgICAgICAgICAgICAgcGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrOiA5MCxcbiAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0UGF0aDogOTFcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuT1BTID0gT1BTO1xuICAgICAgICAgICAgICAgIHZhciBVTlNVUFBPUlRFRF9GRUFUVVJFUyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdW5rbm93bjogJ3Vua25vd24nLFxuICAgICAgICAgICAgICAgICAgICBmb3JtczogJ2Zvcm1zJyxcbiAgICAgICAgICAgICAgICAgICAgamF2YVNjcmlwdDogJ2phdmFTY3JpcHQnLFxuICAgICAgICAgICAgICAgICAgICBzbWFzazogJ3NtYXNrJyxcbiAgICAgICAgICAgICAgICAgICAgc2hhZGluZ1BhdHRlcm46ICdzaGFkaW5nUGF0dGVybicsXG4gICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdmb250J1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5VTlNVUFBPUlRFRF9GRUFUVVJFUyA9IFVOU1VQUE9SVEVEX0ZFQVRVUkVTO1xuICAgICAgICAgICAgICAgIHZhciBQYXNzd29yZFJlc3BvbnNlcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgTkVFRF9QQVNTV09SRDogMSxcbiAgICAgICAgICAgICAgICAgICAgSU5DT1JSRUNUX1BBU1NXT1JEOiAyXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLlBhc3N3b3JkUmVzcG9uc2VzID0gUGFzc3dvcmRSZXNwb25zZXM7XG4gICAgICAgICAgICAgICAgdmFyIHZlcmJvc2l0eSA9IFZlcmJvc2l0eUxldmVsLldBUk5JTkdTO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gc2V0VmVyYm9zaXR5TGV2ZWwobGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIobGV2ZWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NpdHkgPSBsZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFZlcmJvc2l0eUxldmVsKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmVyYm9zaXR5O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGluZm8obXNnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NpdHkgPj0gVmVyYm9zaXR5TGV2ZWwuSU5GT1MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdJbmZvOiAnICsgbXNnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NpdHkgPj0gVmVyYm9zaXR5TGV2ZWwuV0FSTklOR1MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdXYXJuaW5nOiAnICsgbXNnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZWQoZGV0YWlscykge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnRGVwcmVjYXRlZCBBUEkgdXNhZ2U6ICcgKyBkZXRhaWxzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB1bnJlYWNoYWJsZShtc2cpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXNzZXJ0KGNvbmQsIG1zZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVucmVhY2hhYmxlKG1zZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc1NhbWVPcmlnaW4oYmFzZVVybCwgb3RoZXJVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYXNlID0gbmV3IF91cmxfcG9seWZpbGwuVVJMKGJhc2VVcmwpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJhc2Uub3JpZ2luIHx8IGJhc2Uub3JpZ2luID09PSAnbnVsbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBvdGhlciA9IG5ldyBfdXJsX3BvbHlmaWxsLlVSTChvdGhlclVybCwgYmFzZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlLm9yaWdpbiA9PT0gb3RoZXIub3JpZ2luO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pc1ZhbGlkUHJvdG9jb2wodXJsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHVybC5wcm90b2NvbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaHR0cDonOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaHR0cHM6JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Z0cDonOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFpbHRvOic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd0ZWw6JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVWYWxpZEFic29sdXRlVXJsKHVybCwgYmFzZVVybCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFic29sdXRlVXJsID0gYmFzZVVybCA/IG5ldyBfdXJsX3BvbHlmaWxsLlVSTCh1cmwsIGJhc2VVcmwpIDogbmV3IF91cmxfcG9seWZpbGwuVVJMKHVybCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXNWYWxpZFByb3RvY29sKGFic29sdXRlVXJsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhYnNvbHV0ZVVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gc2hhZG93KG9iaiwgcHJvcCwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldExvb2t1cFRhYmxlRmFjdG9yeShpbml0aWFsaXplcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbG9va3VwO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluaXRpYWxpemVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplcihsb29rdXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvb2t1cDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgUGFzc3dvcmRFeGNlcHRpb24gPSBmdW5jdGlvbiBQYXNzd29yZEV4Y2VwdGlvbkNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBhc3N3b3JkRXhjZXB0aW9uKG1zZywgY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lID0gJ1Bhc3N3b3JkRXhjZXB0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1zZztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBQYXNzd29yZEV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgUGFzc3dvcmRFeGNlcHRpb24uY29uc3RydWN0b3IgPSBQYXNzd29yZEV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhc3N3b3JkRXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuUGFzc3dvcmRFeGNlcHRpb24gPSBQYXNzd29yZEV4Y2VwdGlvbjtcblxuICAgICAgICAgICAgICAgIHZhciBVbmtub3duRXJyb3JFeGNlcHRpb24gPSBmdW5jdGlvbiBVbmtub3duRXJyb3JFeGNlcHRpb25DbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBVbmtub3duRXJyb3JFeGNlcHRpb24obXNnLCBkZXRhaWxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hbWUgPSAnVW5rbm93bkVycm9yRXhjZXB0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1zZztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlscyA9IGRldGFpbHM7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBVbmtub3duRXJyb3JFeGNlcHRpb24ucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIFVua25vd25FcnJvckV4Y2VwdGlvbi5jb25zdHJ1Y3RvciA9IFVua25vd25FcnJvckV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVua25vd25FcnJvckV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlVua25vd25FcnJvckV4Y2VwdGlvbiA9IFVua25vd25FcnJvckV4Y2VwdGlvbjtcblxuICAgICAgICAgICAgICAgIHZhciBJbnZhbGlkUERGRXhjZXB0aW9uID0gZnVuY3Rpb24gSW52YWxpZFBERkV4Y2VwdGlvbkNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEludmFsaWRQREZFeGNlcHRpb24obXNnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hbWUgPSAnSW52YWxpZFBERkV4Y2VwdGlvbic7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBJbnZhbGlkUERGRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBJbnZhbGlkUERGRXhjZXB0aW9uLmNvbnN0cnVjdG9yID0gSW52YWxpZFBERkV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEludmFsaWRQREZFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5JbnZhbGlkUERGRXhjZXB0aW9uID0gSW52YWxpZFBERkV4Y2VwdGlvbjtcblxuICAgICAgICAgICAgICAgIHZhciBNaXNzaW5nUERGRXhjZXB0aW9uID0gZnVuY3Rpb24gTWlzc2luZ1BERkV4Y2VwdGlvbkNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE1pc3NpbmdQREZFeGNlcHRpb24obXNnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hbWUgPSAnTWlzc2luZ1BERkV4Y2VwdGlvbic7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBNaXNzaW5nUERGRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBNaXNzaW5nUERGRXhjZXB0aW9uLmNvbnN0cnVjdG9yID0gTWlzc2luZ1BERkV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1pc3NpbmdQREZFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5NaXNzaW5nUERGRXhjZXB0aW9uID0gTWlzc2luZ1BERkV4Y2VwdGlvbjtcblxuICAgICAgICAgICAgICAgIHZhciBVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24gPSBmdW5jdGlvbiBVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb25DbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24obXNnLCBzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZSA9ICdVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gbXNnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24ucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIFVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbi5jb25zdHJ1Y3RvciA9IFVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiA9IFVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbjtcblxuICAgICAgICAgICAgICAgIHZhciBNaXNzaW5nRGF0YUV4Y2VwdGlvbiA9IGZ1bmN0aW9uIE1pc3NpbmdEYXRhRXhjZXB0aW9uQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gTWlzc2luZ0RhdGFFeGNlcHRpb24oYmVnaW4sIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbiA9IGJlZ2luO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQgPSBlbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnTWlzc2luZyBkYXRhIFsnICsgYmVnaW4gKyAnLCAnICsgZW5kICsgJyknO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgTWlzc2luZ0RhdGFFeGNlcHRpb24ucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIE1pc3NpbmdEYXRhRXhjZXB0aW9uLnByb3RvdHlwZS5uYW1lID0gJ01pc3NpbmdEYXRhRXhjZXB0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgTWlzc2luZ0RhdGFFeGNlcHRpb24uY29uc3RydWN0b3IgPSBNaXNzaW5nRGF0YUV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1pc3NpbmdEYXRhRXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuTWlzc2luZ0RhdGFFeGNlcHRpb24gPSBNaXNzaW5nRGF0YUV4Y2VwdGlvbjtcblxuICAgICAgICAgICAgICAgIHZhciBYUmVmRW50cnlFeGNlcHRpb24gPSBmdW5jdGlvbiBYUmVmRW50cnlFeGNlcHRpb25DbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBYUmVmRW50cnlFeGNlcHRpb24obXNnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBYUmVmRW50cnlFeGNlcHRpb24ucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIFhSZWZFbnRyeUV4Y2VwdGlvbi5wcm90b3R5cGUubmFtZSA9ICdYUmVmRW50cnlFeGNlcHRpb24nO1xuICAgICAgICAgICAgICAgICAgICBYUmVmRW50cnlFeGNlcHRpb24uY29uc3RydWN0b3IgPSBYUmVmRW50cnlFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBYUmVmRW50cnlFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5YUmVmRW50cnlFeGNlcHRpb24gPSBYUmVmRW50cnlFeGNlcHRpb247XG5cbiAgICAgICAgICAgICAgICB2YXIgWFJlZlBhcnNlRXhjZXB0aW9uID0gZnVuY3Rpb24gWFJlZlBhcnNlRXhjZXB0aW9uQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gWFJlZlBhcnNlRXhjZXB0aW9uKG1zZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gbXNnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgWFJlZlBhcnNlRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBYUmVmUGFyc2VFeGNlcHRpb24ucHJvdG90eXBlLm5hbWUgPSAnWFJlZlBhcnNlRXhjZXB0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgWFJlZlBhcnNlRXhjZXB0aW9uLmNvbnN0cnVjdG9yID0gWFJlZlBhcnNlRXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWFJlZlBhcnNlRXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuWFJlZlBhcnNlRXhjZXB0aW9uID0gWFJlZlBhcnNlRXhjZXB0aW9uO1xuXG4gICAgICAgICAgICAgICAgdmFyIEZvcm1hdEVycm9yID0gZnVuY3Rpb24gRm9ybWF0RXJyb3JDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBGb3JtYXRFcnJvcihtc2cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1zZztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEZvcm1hdEVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBGb3JtYXRFcnJvci5wcm90b3R5cGUubmFtZSA9ICdGb3JtYXRFcnJvcic7XG4gICAgICAgICAgICAgICAgICAgIEZvcm1hdEVycm9yLmNvbnN0cnVjdG9yID0gRm9ybWF0RXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBGb3JtYXRFcnJvcjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkZvcm1hdEVycm9yID0gRm9ybWF0RXJyb3I7XG5cbiAgICAgICAgICAgICAgICB2YXIgQWJvcnRFeGNlcHRpb24gPSBmdW5jdGlvbiBBYm9ydEV4Y2VwdGlvbkNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFib3J0RXhjZXB0aW9uKG1zZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lID0gJ0Fib3J0RXhjZXB0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1zZztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEFib3J0RXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBBYm9ydEV4Y2VwdGlvbi5jb25zdHJ1Y3RvciA9IEFib3J0RXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWJvcnRFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5BYm9ydEV4Y2VwdGlvbiA9IEFib3J0RXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgIHZhciBOdWxsQ2hhcmFjdGVyc1JlZ0V4cCA9IC9cXHgwMC9nO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTnVsbENoYXJhY3RlcnMoc3RyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2FybignVGhlIGFyZ3VtZW50IGZvciByZW1vdmVOdWxsQ2hhcmFjdGVycyBtdXN0IGJlIGEgc3RyaW5nLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHIucmVwbGFjZShOdWxsQ2hhcmFjdGVyc1JlZ0V4cCwgJycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJ5dGVzVG9TdHJpbmcoYnl0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGJ5dGVzICE9PSBudWxsICYmIF90eXBlb2YoYnl0ZXMpID09PSAnb2JqZWN0JyAmJiBieXRlcy5sZW5ndGggIT09IHVuZGVmaW5lZCwgJ0ludmFsaWQgYXJndW1lbnQgZm9yIGJ5dGVzVG9TdHJpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGJ5dGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIE1BWF9BUkdVTUVOVF9DT1VOVCA9IDgxOTI7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA8IE1BWF9BUkdVTUVOVF9DT1VOVCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgYnl0ZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0ckJ1ZiA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IE1BWF9BUkdVTUVOVF9DT1VOVCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rRW5kID0gTWF0aC5taW4oaSArIE1BWF9BUkdVTUVOVF9DT1VOVCwgbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVuayA9IGJ5dGVzLnN1YmFycmF5KGksIGNodW5rRW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgY2h1bmspKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJCdWYuam9pbignJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gc3RyaW5nVG9CeXRlcyhzdHIpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnLCAnSW52YWxpZCBhcmd1bWVudCBmb3Igc3RyaW5nVG9CeXRlcycpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBieXRlc1tpXSA9IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBieXRlcztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhcnJheUJ5dGVMZW5ndGgoYXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnIubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnIubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGFyci5ieXRlTGVuZ3RoICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXJyYXlzVG9CeXRlcyhhcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyci5sZW5ndGggPT09IDEgJiYgYXJyWzBdIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyclswXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHRMZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlpID0gYXJyLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0sIGl0ZW1MZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBhcnJbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtTGVuZ3RoID0gYXJyYXlCeXRlTGVuZ3RoKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0TGVuZ3RoICs9IGl0ZW1MZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBuZXcgVWludDhBcnJheShyZXN1bHRMZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtID0gYXJyW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShpdGVtIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBzdHJpbmdUb0J5dGVzKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBuZXcgVWludDhBcnJheShpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1MZW5ndGggPSBpdGVtLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnNldChpdGVtLCBwb3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zICs9IGl0ZW1MZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBzdHJpbmczMih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh2YWx1ZSA+PiAyNCAmIDB4ZmYsIHZhbHVlID4+IDE2ICYgMHhmZiwgdmFsdWUgPj4gOCAmIDB4ZmYsIHZhbHVlICYgMHhmZik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gbG9nMih4KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4IDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZzIoeCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWRJbnQ4KGRhdGEsIHN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhW3N0YXJ0XSA8PCAyNCA+PiAyNDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkVWludDE2KGRhdGEsIG9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVtvZmZzZXRdIDw8IDggfCBkYXRhW29mZnNldCArIDFdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWRVaW50MzIoZGF0YSwgb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoZGF0YVtvZmZzZXRdIDw8IDI0IHwgZGF0YVtvZmZzZXQgKyAxXSA8PCAxNiB8IGRhdGFbb2Zmc2V0ICsgMl0gPDwgOCB8IGRhdGFbb2Zmc2V0ICsgM10pID4+PiAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzTGl0dGxlRW5kaWFuKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyOCA9IG5ldyBVaW50OEFycmF5KDQpO1xuICAgICAgICAgICAgICAgICAgICBidWZmZXI4WzBdID0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZpZXczMiA9IG5ldyBVaW50MzJBcnJheShidWZmZXI4LmJ1ZmZlciwgMCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2aWV3MzJbMF0gPT09IDE7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNFdmFsU3VwcG9ydGVkKCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZ1bmN0aW9uKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRJbmhlcml0YWJsZVByb3BlcnR5KF9yZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpY3QgPSBfcmVmLmRpY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBfcmVmLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYkZ2V0QXJyYXkgPSBfcmVmLmdldEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QXJyYXkgPSBfcmVmJGdldEFycmF5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkZ2V0QXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICBfcmVmJHN0b3BXaGVuRm91bmQgPSBfcmVmLnN0b3BXaGVuRm91bmQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9wV2hlbkZvdW5kID0gX3JlZiRzdG9wV2hlbkZvdW5kID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRzdG9wV2hlbkZvdW5kO1xuICAgICAgICAgICAgICAgICAgICB2YXIgTE9PUF9MSU1JVCA9IDEwMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxvb3BDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGRpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGdldEFycmF5ID8gZGljdC5nZXRBcnJheShrZXkpIDogZGljdC5nZXQoa2V5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RvcFdoZW5Gb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKytsb29wQ291bnQgPiBMT09QX0xJTUlUKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybihcImdldEluaGVyaXRhYmxlUHJvcGVydHk6IG1heGltdW0gbG9vcCBjb3VudCBleGNlZWRlZCBmb3IgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QgPSBkaWN0LmdldCgnUGFyZW50Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBVdGlsID0gZnVuY3Rpb24gVXRpbENsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFV0aWwoKSB7fVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciByZ2JCdWYgPSBbJ3JnYignLCAwLCAnLCcsIDAsICcsJywgMCwgJyknXTtcblxuICAgICAgICAgICAgICAgICAgICBVdGlsLm1ha2VDc3NSZ2IgPSBmdW5jdGlvbiBVdGlsX21ha2VDc3NSZ2IociwgZywgYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmdiQnVmWzFdID0gcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJnYkJ1ZlszXSA9IGc7XG4gICAgICAgICAgICAgICAgICAgICAgICByZ2JCdWZbNV0gPSBiO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJnYkJ1Zi5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBVdGlsLnRyYW5zZm9ybSA9IGZ1bmN0aW9uIFV0aWxfdHJhbnNmb3JtKG0xLCBtMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFttMVswXSAqIG0yWzBdICsgbTFbMl0gKiBtMlsxXSwgbTFbMV0gKiBtMlswXSArIG0xWzNdICogbTJbMV0sIG0xWzBdICogbTJbMl0gKyBtMVsyXSAqIG0yWzNdLCBtMVsxXSAqIG0yWzJdICsgbTFbM10gKiBtMlszXSwgbTFbMF0gKiBtMls0XSArIG0xWzJdICogbTJbNV0gKyBtMVs0XSwgbTFbMV0gKiBtMls0XSArIG0xWzNdICogbTJbNV0gKyBtMVs1XV07XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgVXRpbC5hcHBseVRyYW5zZm9ybSA9IGZ1bmN0aW9uIFV0aWxfYXBwbHlUcmFuc2Zvcm0ocCwgbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHh0ID0gcFswXSAqIG1bMF0gKyBwWzFdICogbVsyXSArIG1bNF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeXQgPSBwWzBdICogbVsxXSArIHBbMV0gKiBtWzNdICsgbVs1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbeHQsIHl0XTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBVdGlsLmFwcGx5SW52ZXJzZVRyYW5zZm9ybSA9IGZ1bmN0aW9uIFV0aWxfYXBwbHlJbnZlcnNlVHJhbnNmb3JtKHAsIG0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gbVswXSAqIG1bM10gLSBtWzFdICogbVsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4dCA9IChwWzBdICogbVszXSAtIHBbMV0gKiBtWzJdICsgbVsyXSAqIG1bNV0gLSBtWzRdICogbVszXSkgLyBkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHl0ID0gKC1wWzBdICogbVsxXSArIHBbMV0gKiBtWzBdICsgbVs0XSAqIG1bMV0gLSBtWzVdICogbVswXSkgLyBkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt4dCwgeXRdO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIFV0aWwuZ2V0QXhpYWxBbGlnbmVkQm91bmRpbmdCb3ggPSBmdW5jdGlvbiBVdGlsX2dldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KHIsIG0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwMSA9IFV0aWwuYXBwbHlUcmFuc2Zvcm0ociwgbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcDIgPSBVdGlsLmFwcGx5VHJhbnNmb3JtKHIuc2xpY2UoMiwgNCksIG0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAzID0gVXRpbC5hcHBseVRyYW5zZm9ybShbclswXSwgclszXV0sIG0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHA0ID0gVXRpbC5hcHBseVRyYW5zZm9ybShbclsyXSwgclsxXV0sIG0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtNYXRoLm1pbihwMVswXSwgcDJbMF0sIHAzWzBdLCBwNFswXSksIE1hdGgubWluKHAxWzFdLCBwMlsxXSwgcDNbMV0sIHA0WzFdKSwgTWF0aC5tYXgocDFbMF0sIHAyWzBdLCBwM1swXSwgcDRbMF0pLCBNYXRoLm1heChwMVsxXSwgcDJbMV0sIHAzWzFdLCBwNFsxXSldO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIFV0aWwuaW52ZXJzZVRyYW5zZm9ybSA9IGZ1bmN0aW9uIFV0aWxfaW52ZXJzZVRyYW5zZm9ybShtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IG1bMF0gKiBtWzNdIC0gbVsxXSAqIG1bMl07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW21bM10gLyBkLCAtbVsxXSAvIGQsIC1tWzJdIC8gZCwgbVswXSAvIGQsIChtWzJdICogbVs1XSAtIG1bNF0gKiBtWzNdKSAvIGQsIChtWzRdICogbVsxXSAtIG1bNV0gKiBtWzBdKSAvIGRdO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIFV0aWwuYXBwbHkzZFRyYW5zZm9ybSA9IGZ1bmN0aW9uIFV0aWxfYXBwbHkzZFRyYW5zZm9ybShtLCB2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW21bMF0gKiB2WzBdICsgbVsxXSAqIHZbMV0gKyBtWzJdICogdlsyXSwgbVszXSAqIHZbMF0gKyBtWzRdICogdlsxXSArIG1bNV0gKiB2WzJdLCBtWzZdICogdlswXSArIG1bN10gKiB2WzFdICsgbVs4XSAqIHZbMl1dO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIFV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUgPSBmdW5jdGlvbiBVdGlsX3Npbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKG0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc3Bvc2UgPSBbbVswXSwgbVsyXSwgbVsxXSwgbVszXV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IG1bMF0gKiB0cmFuc3Bvc2VbMF0gKyBtWzFdICogdHJhbnNwb3NlWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSBtWzBdICogdHJhbnNwb3NlWzFdICsgbVsxXSAqIHRyYW5zcG9zZVszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjID0gbVsyXSAqIHRyYW5zcG9zZVswXSArIG1bM10gKiB0cmFuc3Bvc2VbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IG1bMl0gKiB0cmFuc3Bvc2VbMV0gKyBtWzNdICogdHJhbnNwb3NlWzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0ID0gKGEgKyBkKSAvIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2Vjb25kID0gTWF0aC5zcXJ0KChhICsgZCkgKiAoYSArIGQpIC0gNCAqIChhICogZCAtIGMgKiBiKSkgLyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN4ID0gZmlyc3QgKyBzZWNvbmQgfHwgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzeSA9IGZpcnN0IC0gc2Vjb25kIHx8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW01hdGguc3FydChzeCksIE1hdGguc3FydChzeSldO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIFV0aWwubm9ybWFsaXplUmVjdCA9IGZ1bmN0aW9uIFV0aWxfbm9ybWFsaXplUmVjdChyZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgciA9IHJlY3Quc2xpY2UoMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWN0WzBdID4gcmVjdFsyXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJbMF0gPSByZWN0WzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJbMl0gPSByZWN0WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjdFsxXSA+IHJlY3RbM10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByWzFdID0gcmVjdFszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByWzNdID0gcmVjdFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgVXRpbC5pbnRlcnNlY3QgPSBmdW5jdGlvbiBVdGlsX2ludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBhcmUoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhIC0gYjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9yZGVyZWRYID0gW3JlY3QxWzBdLCByZWN0MVsyXSwgcmVjdDJbMF0sIHJlY3QyWzJdXS5zb3J0KGNvbXBhcmUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyZWRZID0gW3JlY3QxWzFdLCByZWN0MVszXSwgcmVjdDJbMV0sIHJlY3QyWzNdXS5zb3J0KGNvbXBhcmUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjdDEgPSBVdGlsLm5vcm1hbGl6ZVJlY3QocmVjdDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjdDIgPSBVdGlsLm5vcm1hbGl6ZVJlY3QocmVjdDIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3JkZXJlZFhbMF0gPT09IHJlY3QxWzBdICYmIG9yZGVyZWRYWzFdID09PSByZWN0MlswXSB8fCBvcmRlcmVkWFswXSA9PT0gcmVjdDJbMF0gJiYgb3JkZXJlZFhbMV0gPT09IHJlY3QxWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0WzBdID0gb3JkZXJlZFhbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0WzJdID0gb3JkZXJlZFhbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9yZGVyZWRZWzBdID09PSByZWN0MVsxXSAmJiBvcmRlcmVkWVsxXSA9PT0gcmVjdDJbMV0gfHwgb3JkZXJlZFlbMF0gPT09IHJlY3QyWzFdICYmIG9yZGVyZWRZWzFdID09PSByZWN0MVsxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFsxXSA9IG9yZGVyZWRZWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFszXSA9IG9yZGVyZWRZWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFV0aWw7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5VdGlsID0gVXRpbDtcbiAgICAgICAgICAgICAgICB2YXIgUk9NQU5fTlVNQkVSX01BUCA9IFsnJywgJ0MnLCAnQ0MnLCAnQ0NDJywgJ0NEJywgJ0QnLCAnREMnLCAnRENDJywgJ0RDQ0MnLCAnQ00nLCAnJywgJ1gnLCAnWFgnLCAnWFhYJywgJ1hMJywgJ0wnLCAnTFgnLCAnTFhYJywgJ0xYWFgnLCAnWEMnLCAnJywgJ0knLCAnSUknLCAnSUlJJywgJ0lWJywgJ1YnLCAnVkknLCAnVklJJywgJ1ZJSUknLCAnSVgnXTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRvUm9tYW5OdW1lcmFscyhudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxvd2VyQ2FzZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcikgJiYgbnVtYmVyID4gMCwgJ1RoZSBudW1iZXIgc2hvdWxkIGJlIGEgcG9zaXRpdmUgaW50ZWdlci4nKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbWFuQnVmID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG51bWJlciA+PSAxMDAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgLT0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbWFuQnVmLnB1c2goJ00nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHBvcyA9IG51bWJlciAvIDEwMCB8IDA7XG4gICAgICAgICAgICAgICAgICAgIG51bWJlciAlPSAxMDA7XG4gICAgICAgICAgICAgICAgICAgIHJvbWFuQnVmLnB1c2goUk9NQU5fTlVNQkVSX01BUFtwb3NdKTtcbiAgICAgICAgICAgICAgICAgICAgcG9zID0gbnVtYmVyIC8gMTAgfCAwO1xuICAgICAgICAgICAgICAgICAgICBudW1iZXIgJT0gMTA7XG4gICAgICAgICAgICAgICAgICAgIHJvbWFuQnVmLnB1c2goUk9NQU5fTlVNQkVSX01BUFsxMCArIHBvc10pO1xuICAgICAgICAgICAgICAgICAgICByb21hbkJ1Zi5wdXNoKFJPTUFOX05VTUJFUl9NQVBbMjAgKyBudW1iZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJvbWFuU3RyID0gcm9tYW5CdWYuam9pbignJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsb3dlckNhc2UgPyByb21hblN0ci50b0xvd2VyQ2FzZSgpIDogcm9tYW5TdHI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIFBERlN0cmluZ1RyYW5zbGF0ZVRhYmxlID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4MkQ4LCAweDJDNywgMHgyQzYsIDB4MkQ5LCAweDJERCwgMHgyREIsIDB4MkRBLCAweDJEQywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMHgyMDIyLCAweDIwMjAsIDB4MjAyMSwgMHgyMDI2LCAweDIwMTQsIDB4MjAxMywgMHgxOTIsIDB4MjA0NCwgMHgyMDM5LCAweDIwM0EsIDB4MjIxMiwgMHgyMDMwLCAweDIwMUUsIDB4MjAxQywgMHgyMDFELCAweDIwMTgsIDB4MjAxOSwgMHgyMDFBLCAweDIxMjIsIDB4RkIwMSwgMHhGQjAyLCAweDE0MSwgMHgxNTIsIDB4MTYwLCAweDE3OCwgMHgxN0QsIDB4MTMxLCAweDE0MiwgMHgxNTMsIDB4MTYxLCAweDE3RSwgMCwgMHgyMEFDXTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHN0cmluZ1RvUERGU3RyaW5nKHN0cikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBzdHIubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0clswXSA9PT0gJ1xceEZFJyAmJiBzdHJbMV0gPT09ICdcXHhGRicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDI7IGkgPCBuOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHN0ci5jaGFyQ29kZUF0KGkpIDw8IDggfCBzdHIuY2hhckNvZGVBdChpICsgMSkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZSA9IFBERlN0cmluZ1RyYW5zbGF0ZVRhYmxlW3N0ci5jaGFyQ29kZUF0KGkpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJCdWYucHVzaChjb2RlID8gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKSA6IHN0ci5jaGFyQXQoaSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ckJ1Zi5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBzdHJpbmdUb1VURjhTdHJpbmcoc3RyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKHN0cikpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHV0ZjhTdHJpbmdUb1N0cmluZyhzdHIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc0VtcHR5T2JqKG9iaikge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc0Jvb2wodikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdib29sZWFuJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc051bSh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdiA9PT0gJ251bWJlcic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNTdHJpbmcodikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdzdHJpbmcnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzQXJyYXlCdWZmZXIodikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3R5cGVvZih2KSA9PT0gJ29iamVjdCcgJiYgdiAhPT0gbnVsbCAmJiB2LmJ5dGVMZW5ndGggIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc1NwYWNlKGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaCA9PT0gMHgyMCB8fCBjaCA9PT0gMHgwOSB8fCBjaCA9PT0gMHgwRCB8fCBjaCA9PT0gMHgwQTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNhcGFiaWxpdHkgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXNTZXR0bGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjYXBhYmlsaXR5LCAnc2V0dGxlZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpc1NldHRsZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlc29sdmUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcGFiaWxpdHkucmVqZWN0ID0gZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhcGFiaWxpdHk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGNyZWF0ZU9iamVjdFVSTCA9IGZ1bmN0aW9uIGNyZWF0ZU9iamVjdFVSTENsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkaWdpdHMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlT2JqZWN0VVJMKGRhdGEsIGNvbnRlbnRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9yY2VEYXRhU2NoZW1hID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JjZURhdGFTY2hlbWEgJiYgX3VybF9wb2x5ZmlsbC5VUkwuY3JlYXRlT2JqZWN0VVJMKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbZGF0YV0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogY29udGVudFR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3VybF9wb2x5ZmlsbC5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gJ2RhdGE6JyArIGNvbnRlbnRUeXBlICsgJztiYXNlNjQsJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZGF0YS5sZW5ndGg7IGkgPCBpaTsgaSArPSAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIxID0gZGF0YVtpXSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIyID0gZGF0YVtpICsgMV0gJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiMyA9IGRhdGFbaSArIDJdICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZDEgPSBiMSA+PiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkMiA9IChiMSAmIDMpIDw8IDQgfCBiMiA+PiA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkMyA9IGkgKyAxIDwgaWkgPyAoYjIgJiAweEYpIDw8IDIgfCBiMyA+PiA2IDogNjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQ0ID0gaSArIDIgPCBpaSA/IGIzICYgMHgzRiA6IDY0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSBkaWdpdHNbZDFdICsgZGlnaXRzW2QyXSArIGRpZ2l0c1tkM10gKyBkaWdpdHNbZDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuY3JlYXRlT2JqZWN0VVJMID0gY3JlYXRlT2JqZWN0VVJMO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAyICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuICAgICAgICAgICAgICAgIHZhciBnbG9iYWxTY29wZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWdsb2JhbFNjb3BlLl9leHRyYWN0aGlnaGxpZ2h0c0NvbXBhdGliaWxpdHlDaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbFNjb3BlLl9leHRyYWN0aGlnaGxpZ2h0c0NvbXBhdGliaWxpdHlDaGVja2VkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgaXNOb2RlSlMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBoYXNET00gPSAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKHdpbmRvdykpID09PSAnb2JqZWN0JyAmJiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2YoZG9jdW1lbnQpKSA9PT0gJ29iamVjdCc7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrTm9kZUJ0b2EoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsU2NvcGUuYnRvYSB8fCAhaXNOb2RlSlMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsU2NvcGUuYnRvYSA9IGZ1bmN0aW9uIChjaGFycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShjaGFycywgJ2JpbmFyeScpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrTm9kZUF0b2IoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsU2NvcGUuYXRvYiB8fCAhaXNOb2RlSlMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsU2NvcGUuYXRvYiA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShpbnB1dCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdiaW5hcnknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrQ2hpbGROb2RlUmVtb3ZlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNET00pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrRE9NVG9rZW5MaXN0QWRkUmVtb3ZlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNET00gfHwgaXNOb2RlSlMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmNsYXNzTGlzdC5hZGQoJ3Rlc3RPbmUnLCAndGVzdFR3bycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGl2LmNsYXNzTGlzdC5jb250YWlucygndGVzdE9uZScpID09PSB0cnVlICYmIGRpdi5jbGFzc0xpc3QuY29udGFpbnMoJ3Rlc3RUd28nKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE9yaWdpbmFsRE9NVG9rZW5MaXN0QWRkID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5hZGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgT3JpZ2luYWxET01Ub2tlbkxpc3RSZW1vdmUgPSBET01Ub2tlbkxpc3QucHJvdG90eXBlLnJlbW92ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHRva2VucyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB0b2tlbnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tfaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yaWdpbmFsRE9NVG9rZW5MaXN0QWRkLmNhbGwodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIERPTVRva2VuTGlzdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgdG9rZW5zID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vuc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IHRva2Vucy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tfaTJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmlnaW5hbERPTVRva2VuTGlzdFJlbW92ZS5jYWxsKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja0RPTVRva2VuTGlzdFRvZ2dsZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzRE9NIHx8IGlzTm9kZUpTKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpdi5jbGFzc0xpc3QudG9nZ2xlKCd0ZXN0JywgMCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBET01Ub2tlbkxpc3QucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JjZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gISFhcmd1bWVudHNbMV0gOiAhdGhpcy5jb250YWlucyh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbZm9yY2UgPyAnYWRkJyA6ICdyZW1vdmUnXSh0b2tlbiksIGZvcmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tTdHJpbmdTdGFydHNXaXRoKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1KTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tTdHJpbmdFbmRzV2l0aCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM1KTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tTdHJpbmdJbmNsdWRlcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM3KTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tBcnJheUluY2x1ZGVzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmNsdWRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzOSk7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrQXJyYXlGcm9tKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmZyb20pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDYpO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja09iamVjdEFzc2lnbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QuYXNzaWduKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDY5KTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tNYXRoTG9nMigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNYXRoLmxvZzIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubG9nMiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzQpO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja051bWJlcklzTmFOKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyLmlzTmFOID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3Nik7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrTnVtYmVySXNJbnRlZ2VyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlci5pc0ludGVnZXIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDc4KTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tQcm9taXNlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdsb2JhbFNjb3BlLlByb21pc2UgJiYgZ2xvYmFsU2NvcGUuUHJvbWlzZS5wcm90b3R5cGUgJiYgZ2xvYmFsU2NvcGUuUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsU2NvcGUuUHJvbWlzZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oODEpO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja1dlYWtNYXAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsU2NvcGUuV2Vha01hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsU2NvcGUuV2Vha01hcCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTAxKTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tXZWFrU2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdsb2JhbFNjb3BlLldlYWtTZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbFNjb3BlLldlYWtTZXQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExOCk7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrU3RyaW5nQ29kZVBvaW50QXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3RyaW5nLmNvZGVQb2ludEF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcuY29kZVBvaW50QXQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyMik7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrU3RyaW5nRnJvbUNvZGVQb2ludCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcuZnJvbUNvZGVQb2ludCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZyb21Db2RlUG9pbnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyNCk7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrU3ltYm9sKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdsb2JhbFNjb3BlLlN5bWJvbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMjYpO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja1N0cmluZ1BhZFN0YXJ0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFN0cmluZy5wcm90b3R5cGUucGFkU3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMzKTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tTdHJpbmdQYWRFbmQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3RyaW5nLnByb3RvdHlwZS5wYWRFbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTM3KTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tPYmplY3RWYWx1ZXMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTM5KTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09PSBNYXRoID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsLk1hdGggPT09IE1hdGggPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09PSBNYXRoID8gc2VsZiA6IHt9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA0ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNOb2RlSlMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAodHlwZW9mIHByb2Nlc3MgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihwcm9jZXNzKSkgPT09ICdvYmplY3QnICYmIHByb2Nlc3MgKyAnJyA9PT0gJ1tvYmplY3QgcHJvY2Vzc10nICYmICFwcm9jZXNzLnZlcnNpb25zWydudyddO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDUgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkpLlN0cmluZy5zdGFydHNXaXRoO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA2ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvTGVuZ3RoID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFNUQVJUU19XSVRIID0gJ3N0YXJ0c1dpdGgnO1xuICAgICAgICAgICAgICAgIHZhciAkc3RhcnRzV2l0aCA9ICcnW1NUQVJUU19XSVRIXTtcbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzQpKFNUQVJUU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRzV2l0aDogZnVuY3Rpb24gc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIFNUQVJUU19XSVRIKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRvTGVuZ3RoKE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0aGF0Lmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRzdGFydHNXaXRoID8gJHN0YXJ0c1dpdGguY2FsbCh0aGF0LCBzZWFyY2gsIGluZGV4KSA6IHRoYXQuc2xpY2UoaW5kZXgsIGluZGV4ICsgc2VhcmNoLmxlbmd0aCkgPT09IHNlYXJjaDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGdsb2JhbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY29yZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaGlkZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTApO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlZGVmaW5lID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY3R4ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICRleHBvcnQodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICAgICAgICAgICAgICAgICAgICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgICAgICAgICAgICAgICAgICAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSB8fCAoZ2xvYmFsW25hbWVdID0ge30pIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGV4cG9ydHMgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGV4cFByb3RvID0gZXhwb3J0c1tQUk9UT1RZUEVdIHx8IChleHBvcnRzW1BST1RPVFlQRV0gPSB7fSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXksIG93biwgb3V0LCBleHA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChJU19HTE9CQUwpIHNvdXJjZSA9IG5hbWU7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0ID0gKG93biA/IHRhcmdldCA6IHNvdXJjZSlba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cCA9IElTX0JJTkQgJiYgb3duID8gY3R4KG91dCwgZ2xvYmFsKSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwb3J0c1trZXldICE9IG91dCkgaGlkZShleHBvcnRzLCBrZXksIGV4cCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSVNfUFJPVE8gJiYgZXhwUHJvdG9ba2V5XSAhPSBvdXQpIGV4cFByb3RvW2tleV0gPSBvdXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgZ2xvYmFsLmNvcmUgPSBjb3JlO1xuICAgICAgICAgICAgICAgICRleHBvcnQuRiA9IDE7XG4gICAgICAgICAgICAgICAgJGV4cG9ydC5HID0gMjtcbiAgICAgICAgICAgICAgICAkZXhwb3J0LlMgPSA0O1xuICAgICAgICAgICAgICAgICRleHBvcnQuUCA9IDg7XG4gICAgICAgICAgICAgICAgJGV4cG9ydC5CID0gMTY7XG4gICAgICAgICAgICAgICAgJGV4cG9ydC5XID0gMzI7XG4gICAgICAgICAgICAgICAgJGV4cG9ydC5VID0gNjQ7XG4gICAgICAgICAgICAgICAgJGV4cG9ydC5SID0gMTI4O1xuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogOCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aCA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZiA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogOSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb246ICcyLjYuMidcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBkUCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNyZWF0ZURlc2MgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE5KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNSkgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBhbk9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIElFOF9ET01fREVGSU5FID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9QcmltaXRpdmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4KTtcblxuICAgICAgICAgICAgICAgIHZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmYgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgYW5PYmplY3QoTyk7XG4gICAgICAgICAgICAgICAgICAgIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgICAgICAgICAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEyICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGlzT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQ7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90eXBlb2YoaXQpID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE0ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSAhX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNSkgJiYgIV9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTYpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE3KSgnZGl2JyksICdhJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLmEgIT0gNztcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTUgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9ICFfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2KShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLmEgIT0gNztcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTYgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFleGVjKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTcgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzKTtcblxuICAgICAgICAgICAgICAgIHZhciBkb2N1bWVudCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOCkuZG9jdW1lbnQ7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE4ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGlzT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICAgICAgICAgICAgICAgICAgICB2YXIgZm4sIHZhbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxOSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDIwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGdsb2JhbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaGlkZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTApO1xuXG4gICAgICAgICAgICAgICAgdmFyIGhhcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFNSQyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjIpKCdzcmMnKTtcblxuICAgICAgICAgICAgICAgIHZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xuICAgICAgICAgICAgICAgIHZhciAkdG9TdHJpbmcgPSBGdW5jdGlvbltUT19TVFJJTkddO1xuICAgICAgICAgICAgICAgIHZhciBUUEwgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsLCBzYWZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIHZhbCA9PSAnZnVuY3Rpb24nO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgJ25hbWUnKSB8fCBoaWRlKHZhbCwgJ25hbWUnLCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoT1trZXldID09PSB2YWwpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsIFNSQykgfHwgaGlkZSh2YWwsIFNSQywgT1trZXldID8gJycgKyBPW2tleV0gOiBUUEwuam9pbihTdHJpbmcoa2V5KSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9ba2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIE9ba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKE9ba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgT1trZXldID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZShPLCBrZXksIHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KShGdW5jdGlvbi5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMjEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMjIgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaWQgPSAwO1xuICAgICAgICAgICAgICAgIHZhciBweCA9IE1hdGgucmFuZG9tKCk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAyMyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBhRnVuY3Rpb24gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI0KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgYUZ1bmN0aW9uKGZuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDI0ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQ7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMjUgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgdG9JbnRlZ2VyID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgbWluID0gTWF0aC5taW47XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAyNiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjZWlsID0gTWF0aC5jZWlsO1xuICAgICAgICAgICAgICAgIHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAyNyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBpc1JlZ0V4cCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMzKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMjggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzKTtcblxuICAgICAgICAgICAgICAgIHZhciBjb2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI5KTtcblxuICAgICAgICAgICAgICAgIHZhciBNQVRDSCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzApKCdtYXRjaCcpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzUmVnRXhwO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY29mKGl0KSA9PSAnUmVnRXhwJyk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMjkgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMzAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMxKSgnd2tzJyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdWlkID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX1N5bWJvbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOCkuU3ltYm9sO1xuXG4gICAgICAgICAgICAgICAgdmFyIFVTRV9TWU1CT0wgPSB0eXBlb2YgX1N5bWJvbCA9PSAnZnVuY3Rpb24nO1xuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID0gVVNFX1NZTUJPTCAmJiBfU3ltYm9sW25hbWVdIHx8IChVU0VfU1lNQk9MID8gX1N5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0cy5zdG9yZSA9IHN0b3JlO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAzMSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjb3JlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5KTtcblxuICAgICAgICAgICAgICAgIHZhciBnbG9iYWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xuICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcbiAgICAgICAgICAgICAgICAobW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbiAgICAgICAgICAgICAgICB9KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb246IGNvcmUudmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgbW9kZTogX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMikgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgICAgICAgICAgICAgICAgICAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMzIgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAzMyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDM0ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIE1BVENIID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMCkoJ21hdGNoJyk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlID0gLy4vO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnLy4vJ1tLRVldKHJlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIScvLi8nW0tFWV0ocmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZikge31cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDM1ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzNik7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOSkuU3RyaW5nLmVuZHNXaXRoO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAzNiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3KTtcblxuICAgICAgICAgICAgICAgIHZhciB0b0xlbmd0aCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI3KTtcblxuICAgICAgICAgICAgICAgIHZhciBFTkRTX1dJVEggPSAnZW5kc1dpdGgnO1xuICAgICAgICAgICAgICAgIHZhciAkZW5kc1dpdGggPSAnJ1tFTkRTX1dJVEhdO1xuICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzNCkoRU5EU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kc1dpdGg6IGZ1bmN0aW9uIGVuZHNXaXRoKHNlYXJjaFN0cmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgRU5EU19XSVRIKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRoYXQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gbGVuIDogTWF0aC5taW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRlbmRzV2l0aCA/ICRlbmRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgZW5kKSA6IHRoYXQuc2xpY2UoZW5kIC0gc2VhcmNoLmxlbmd0aCwgZW5kKSA9PT0gc2VhcmNoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDM3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzOCk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOSkuU3RyaW5nLmluY2x1ZGVzO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAzOCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3KTtcblxuICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSU5DTFVERVMgPSAnaW5jbHVkZXMnO1xuICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzNCkoSU5DTFVERVMpLCAnU3RyaW5nJywge1xuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISF+Y29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIElOQ0xVREVTKS5pbmRleE9mKHNlYXJjaFN0cmluZywgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDM5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0MCk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOSkuQXJyYXkuaW5jbHVkZXM7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDQwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRpbmNsdWRlcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDEpKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGluY2x1ZGVzKHRoaXMsIGVsLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDUpKCdpbmNsdWRlcycpO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA0MSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciB0b0lPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQyKTtcblxuICAgICAgICAgICAgICAgIHZhciB0b0xlbmd0aCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDQpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGZvciAoOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNDIgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgSU9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMzKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA0MyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjb2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI5KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDQ0ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIHRvSW50ZWdlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIG1heCA9IE1hdGgubWF4O1xuICAgICAgICAgICAgICAgIHZhciBtaW4gPSBNYXRoLm1pbjtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA0NSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBVTlNDT1BBQkxFUyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzApKCd1bnNjb3BhYmxlcycpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMCkoQXJyYXlQcm90bywgVU5TQ09QQUJMRVMsIHt9KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBBcnJheVByb3RvW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA0NiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDcpO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2Mik7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOSkuQXJyYXkuZnJvbTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNDcgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGF0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0OCkodHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQ5KShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdCA9IFN0cmluZyhpdGVyYXRlZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2kgPSAwO1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIE8gPSB0aGlzLl90O1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9pO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcG9pbnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBPLmxlbmd0aCkgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcG9pbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA0OCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciB0b0ludGVnZXIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI2KTtcblxuICAgICAgICAgICAgICAgIHZhciBkZWZpbmVkID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMyk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSwgYjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8IDB4ZDgwMCB8fCBhID4gMHhkYmZmIHx8IGkgKyAxID09PSBsIHx8IChiID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgYiA+IDB4ZGZmZiA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYSA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA0OSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBMSUJSQVJZID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVkZWZpbmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIwKTtcblxuICAgICAgICAgICAgICAgIHZhciBoaWRlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSXRlcmF0b3JzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1MCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgJGl0ZXJDcmVhdGUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDUxKTtcblxuICAgICAgICAgICAgICAgIHZhciBzZXRUb1N0cmluZ1RhZyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdldFByb3RvdHlwZU9mID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2MCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSVRFUkFUT1IgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMwKSgnaXRlcmF0b3InKTtcblxuICAgICAgICAgICAgICAgIHZhciBCVUdHWSA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKTtcbiAgICAgICAgICAgICAgICB2YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG4gICAgICAgICAgICAgICAgdmFyIEtFWVMgPSAna2V5cyc7XG4gICAgICAgICAgICAgICAgdmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiByZXR1cm5UaGlzKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gICAgICAgICAgICAgICAgICAgICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gZ2V0TWV0aG9kKGtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQlVHR1kgJiYga2luZCBpbiBwcm90bykgcmV0dXJuIHByb3RvW2tpbmRdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWVM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBrZXlzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVkFMVUVTOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFRBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgICAgICAgICAgICAgICAgICAgdmFyIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFUztcbiAgICAgICAgICAgICAgICAgICAgdmFyIFZBTFVFU19CVUcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByb3RvID0gQmFzZS5wcm90b3R5cGU7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkbmF0aXZlID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgJGRlZmF1bHQgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRlbnRyaWVzID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWV0aG9kcywga2V5LCBJdGVyYXRvclByb3RvdHlwZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoJGFueU5hdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgSXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yUHJvdG90eXBlLCBUQUcsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghTElCUkFSWSAmJiB0eXBlb2YgSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFZBTFVFU19CVUcgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICgoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKERFRkFVTFQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiBERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChGT1JDRUQpIGZvciAoa2V5IGluIG1ldGhvZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKEJVR0dZIHx8IFZBTFVFU19CVUcpLCBOQU1FLCBtZXRob2RzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXRob2RzO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDUwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNTEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgY3JlYXRlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1Mik7XG5cbiAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNldFRvU3RyaW5nVGFnID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1OSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTApKEl0ZXJhdG9yUHJvdG90eXBlLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMwKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogZGVzY3JpcHRvcigxLCBuZXh0KVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNTIgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgYW5PYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyKTtcblxuICAgICAgICAgICAgICAgIHZhciBkUHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDUzKTtcblxuICAgICAgICAgICAgICAgIHZhciBlbnVtQnVnS2V5cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIElFX1BST1RPID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1NikoJ0lFX1BST1RPJyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgRW1wdHkgPSBmdW5jdGlvbiBFbXB0eSgpIHt9O1xuXG4gICAgICAgICAgICAgICAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9jcmVhdGVEaWN0ID0gZnVuY3Rpb24gY3JlYXRlRGljdCgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlmcmFtZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTcpKCdpZnJhbWUnKTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGx0ID0gJzwnO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ3QgPSAnPic7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgICAgICAgICAgICAgICAgICAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1OCkuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcblxuICAgICAgICAgICAgICAgICAgICBpZnJhbWUuc3JjID0gJ2phdmFzY3JpcHQ6JztcbiAgICAgICAgICAgICAgICAgICAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgICAgICAgICAgICAgICAgICAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICAgICAgICAgICAgICAgICAgICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArICdzY3JpcHQnICsgZ3QgKyAnZG9jdW1lbnQuRj1PYmplY3QnICsgbHQgKyAnL3NjcmlwdCcgKyBndCk7XG4gICAgICAgICAgICAgICAgICAgIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIF9jcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcblxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgX2NyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NyZWF0ZURpY3QoKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKE8gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHJlc3VsdCA9IF9jcmVhdGVEaWN0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDUzICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGRQID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgYW5PYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyKTtcblxuICAgICAgICAgICAgICAgIHZhciBnZXRLZXlzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1NCk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTUpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgYW5PYmplY3QoTyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXlzID0gZ2V0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBQO1xuXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChsZW5ndGggPiBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE87XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNTQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGtleXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU1KTtcblxuICAgICAgICAgICAgICAgIHZhciBlbnVtQnVnS2V5cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTcpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA1NSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBoYXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIxKTtcblxuICAgICAgICAgICAgICAgIHZhciB0b0lPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQyKTtcblxuICAgICAgICAgICAgICAgIHZhciBhcnJheUluZGV4T2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQxKShmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSUVfUFJPVE8gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU2KSgnSUVfUFJPVE8nKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXk7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChrZXkgaW4gTykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNTYgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgc2hhcmVkID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMSkoJ2tleXMnKTtcblxuICAgICAgICAgICAgICAgIHZhciB1aWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIyKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDU3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJy5zcGxpdCgnLCcpO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA1OCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBkb2N1bWVudCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOCkuZG9jdW1lbnQ7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNTkgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgZGVmID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMSkuZjtcblxuICAgICAgICAgICAgICAgIHZhciBoYXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIxKTtcblxuICAgICAgICAgICAgICAgIHZhciBUQUcgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMwKSgndG9TdHJpbmdUYWcnKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGFnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDYwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGhhcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2MSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSUVfUFJPVE8gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU2KSgnSUVfUFJPVE8nKTtcblxuICAgICAgICAgICAgICAgIHZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoTykge1xuICAgICAgICAgICAgICAgICAgICBPID0gdG9PYmplY3QoTyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXMoTywgSUVfUFJPVE8pKSByZXR1cm4gT1tJRV9QUk9UT107XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG8gOiBudWxsO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDYxICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMzKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDYyICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGN0eCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjMpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2MSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY2FsbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGlzQXJyYXlJdGVyID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2NCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9MZW5ndGggPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI1KTtcblxuICAgICAgICAgICAgICAgIHZhciBjcmVhdGVQcm9wZXJ0eSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdldEl0ZXJGbiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjYpO1xuXG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2OCkoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgQXJyYXkuZnJvbShpdGVyKTtcbiAgICAgICAgICAgICAgICB9KSwgJ0FycmF5Jywge1xuICAgICAgICAgICAgICAgICAgICBmcm9tOiBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hcGZuID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwcGluZykgbWFwZm4gPSBjdHgobWFwZm4sIGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkLCAyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCByZXN1bHQgPSBuZXcgQygpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IGNhbGwoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNjMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgYW5PYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNjQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgSXRlcmF0b3JzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1MCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSVRFUkFUT1IgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMwKSgnaXRlcmF0b3InKTtcblxuICAgICAgICAgICAgICAgIHZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA2NSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAkZGVmaW5lUHJvcGVydHkgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExKTtcblxuICAgICAgICAgICAgICAgIHZhciBjcmVhdGVEZXNjID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxOSk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7ZWxzZSBvYmplY3RbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNjYgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgY2xhc3NvZiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIElURVJBVE9SID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMCkoJ2l0ZXJhdG9yJyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSXRlcmF0b3JzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1MCk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOSkuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXSB8fCBpdFsnQEBpdGVyYXRvciddIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNjcgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgY29mID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyOSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgVEFHID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMCkoJ3RvU3RyaW5nVGFnJyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRyeUdldCA9IGZ1bmN0aW9uIHRyeUdldChpdCwga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIE8sIFQsIEI7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJyA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUIDogQVJHID8gY29mKE8pIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDY4ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIElURVJBVE9SID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMCkoJ2l0ZXJhdG9yJyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcml0ZXJbJ3JldHVybiddID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgU0FGRV9DTE9TSU5HID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHJpdGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyAyO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcnIgPSBbN107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlci5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IHNhZmUgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFycltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjKGFycik7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNhZmU7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNjkgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcwKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5KS5PYmplY3QuYXNzaWduO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA3MCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3KTtcblxuICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0Jywge1xuICAgICAgICAgICAgICAgICAgICBhc3NpZ246IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzEpXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDcxICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGdldEtleXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU0KTtcblxuICAgICAgICAgICAgICAgIHZhciBnT1BTID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3Mik7XG5cbiAgICAgICAgICAgICAgICB2YXIgcElFID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3Myk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9PYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYxKTtcblxuICAgICAgICAgICAgICAgIHZhciBJT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0Myk7XG5cbiAgICAgICAgICAgICAgICB2YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2KShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBBID0ge307XG4gICAgICAgICAgICAgICAgICAgIHZhciBCID0ge307XG4gICAgICAgICAgICAgICAgICAgIHZhciBTID0gU3ltYm9sKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgICAgICAgICAgICAgICAgICAgQVtTXSA9IDc7XG4gICAgICAgICAgICAgICAgICAgIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEJba10gPSBrO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG4gICAgICAgICAgICAgICAgfSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXNFbnVtID0gcElFLmY7XG5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGFMZW4gPiBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFMgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0VudW0uY2FsbChTLCBrZXkgPSBrZXlzW2orK10pKSBUW2tleV0gPSBTW2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gVDtcbiAgICAgICAgICAgICAgICB9IDogJGFzc2lnbjtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNzIgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA3MyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuZiA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA3NCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzUpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkpLk1hdGgubG9nMjtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNzUgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNyk7XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gICAgICAgICAgICAgICAgICAgIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNzYgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDc3KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5KS5OdW1iZXIuaXNOYU47XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDc3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcpO1xuXG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gICAgICAgICAgICAgICAgICAgIGlzTmFOOiBmdW5jdGlvbiBpc05hTihudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgIT0gbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDc4ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3OSk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOSkuTnVtYmVyLmlzSW50ZWdlcjtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNzkgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNyk7XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgICAgICAgICAgICAgICAgICAgaXNJbnRlZ2VyOiBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDgwKVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA4MCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBpc09iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNJbnRlZ2VyKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhaXNPYmplY3QoaXQpICYmIGlzRmluaXRlKGl0KSAmJiBmbG9vcihpdCkgPT09IGl0O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDgxICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4Mik7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQ3KTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oODMpO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4Nik7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDk5KTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTAwKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5KS5Qcm9taXNlO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA4MiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjbGFzc29mID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdGVzdCA9IHt9O1xuICAgICAgICAgICAgICAgIHRlc3RbX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMCkoJ3RvU3RyaW5nVGFnJyldID0gJ3onO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRlc3QgKyAnJyAhPSAnW29iamVjdCB6XScpIHtcbiAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMCkoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG4gICAgICAgICAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogODMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGl0ZXJhdG9ycyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oODQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdldEtleXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU0KTtcblxuICAgICAgICAgICAgICAgIHZhciByZWRlZmluZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjApO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdsb2JhbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaGlkZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTApO1xuXG4gICAgICAgICAgICAgICAgdmFyIEl0ZXJhdG9ycyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTApO1xuXG4gICAgICAgICAgICAgICAgdmFyIHdrcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzApO1xuXG4gICAgICAgICAgICAgICAgdmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xuICAgICAgICAgICAgICAgIHZhciBUT19TVFJJTkdfVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xuICAgICAgICAgICAgICAgIHZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcbiAgICAgICAgICAgICAgICB2YXIgRE9NSXRlcmFibGVzID0ge1xuICAgICAgICAgICAgICAgICAgICBDU1NSdWxlTGlzdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIENTU1ZhbHVlTGlzdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIENsaWVudFJlY3RMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgRE9NUmVjdExpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBET01TdHJpbmdMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIEZpbGVMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgSFRNTEFsbENvbGxlY3Rpb246IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBIVE1MQ29sbGVjdGlvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIEhUTUxGb3JtRWxlbWVudDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgTWVkaWFMaXN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgTm9kZUxpc3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBQbHVnaW46IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBQbHVnaW5BcnJheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgVGV4dFRyYWNrQ3VlTGlzdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIFRleHRUcmFja0xpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBUb3VjaExpc3Q6IGZhbHNlXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGNvbGxlY3Rpb25zID0gZ2V0S2V5cyhET01JdGVyYWJsZXMpLCBpID0gMDsgaSA8IGNvbGxlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBOQU1FID0gY29sbGVjdGlvbnNbaV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBleHBsaWNpdCA9IERPTUl0ZXJhYmxlc1tOQU1FXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm90byA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3RvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3RvW0lURVJBVE9SXSkgaGlkZShwcm90bywgSVRFUkFUT1IsIEFycmF5VmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG9bVE9fU1RSSU5HX1RBR10pIGhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwbGljaXQpIGZvciAoa2V5IGluICRpdGVyYXRvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDg0ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGFkZFRvVW5zY29wYWJsZXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQ1KTtcblxuICAgICAgICAgICAgICAgIHZhciBzdGVwID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4NSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSXRlcmF0b3JzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1MCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9JT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0Mik7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDkpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdCA9IHRvSU9iamVjdChpdGVyYXRlZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2kgPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9rID0ga2luZDtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBPID0gdGhpcy5fdDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtpbmQgPSB0aGlzLl9rO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9pKys7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFPIHx8IGluZGV4ID49IE8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZXAoMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIE9baW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZXAoMCwgW2luZGV4LCBPW2luZGV4XV0pO1xuICAgICAgICAgICAgICAgIH0sICd2YWx1ZXMnKTtcbiAgICAgICAgICAgICAgICBJdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuICAgICAgICAgICAgICAgIGFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbiAgICAgICAgICAgICAgICBhZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbiAgICAgICAgICAgICAgICBhZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDg1ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6ICEhZG9uZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDg2ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIExJQlJBUlkgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMyKTtcblxuICAgICAgICAgICAgICAgIHZhciBnbG9iYWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGN0eCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNsYXNzb2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDY3KTtcblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3KTtcblxuICAgICAgICAgICAgICAgIHZhciBpc09iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFGdW5jdGlvbiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFuSW5zdGFuY2UgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDg3KTtcblxuICAgICAgICAgICAgICAgIHZhciBmb3JPZiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oODgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oODkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkwKS5zZXQ7XG5cbiAgICAgICAgICAgICAgICB2YXIgbWljcm90YXNrID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5MikoKTtcblxuICAgICAgICAgICAgICAgIHZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOTMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHBlcmZvcm0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDk0KTtcblxuICAgICAgICAgICAgICAgIHZhciB1c2VyQWdlbnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDk1KTtcblxuICAgICAgICAgICAgICAgIHZhciBwcm9taXNlUmVzb2x2ZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOTYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG4gICAgICAgICAgICAgICAgdmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG4gICAgICAgICAgICAgICAgdmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbiAgICAgICAgICAgICAgICB2YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG4gICAgICAgICAgICAgICAgdmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjggfHwgJyc7XG4gICAgICAgICAgICAgICAgdmFyICRQcm9taXNlID0gZ2xvYmFsW1BST01JU0VdO1xuICAgICAgICAgICAgICAgIHZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxuICAgICAgICAgICAgICAgIHZhciBlbXB0eSA9IGZ1bmN0aW9uIGVtcHR5KCkge307XG5cbiAgICAgICAgICAgICAgICB2YXIgSW50ZXJuYWwsIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFdyYXBwZXI7XG4gICAgICAgICAgICAgICAgdmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZjtcbiAgICAgICAgICAgICAgICB2YXIgVVNFX05BVElWRSA9ICEhZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgRmFrZVByb21pc2UgPSAocHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9KVtfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMwKSgnc3BlY2llcycpXSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlYyhlbXB0eSwgZW1wdHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpc05vZGUgfHwgdHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCA9PSAnZnVuY3Rpb24nKSAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2UgJiYgdjguaW5kZXhPZignNi42JykgIT09IDAgJiYgdXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZS82NicpID09PSAtMTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uIGlzVGhlbmFibGUoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRoZW47XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIG5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeShwcm9taXNlLCBpc1JlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvbWlzZS5fbikgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlLl9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNoYWluID0gcHJvbWlzZS5fYztcbiAgICAgICAgICAgICAgICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2sgPSBwcm9taXNlLl9zID09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBydW4gPSBmdW5jdGlvbiBydW4ocmVhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvbWlzZS5faCA9PSAyKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLl9oID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIgPT09IHRydWUpIHJlc3VsdCA9IHZhbHVlO2Vsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuLmNhbGwocmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9tYWluICYmICFleGl0ZWQpIGRvbWFpbi5leGl0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bihjaGFpbltpKytdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5fYyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5fbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIG9uVW5oYW5kbGVkKHByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bmhhbmRsZWQgPSBpc1VuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmhhbmRsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZTogcHJvbWlzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoY29uc29sZSA9IGdsb2JhbC5jb25zb2xlKSAmJiBjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLl9oID0gaXNOb2RlIHx8IGlzVW5oYW5kbGVkKHByb21pc2UpID8gMiA6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UuX2EgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIGlzVW5oYW5kbGVkKHByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2U6IHByb21pc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjogcHJvbWlzZS5fdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyICRyZWplY3QgPSBmdW5jdGlvbiAkcmVqZWN0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5fZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5fcyA9IDI7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgJHJlc29sdmUgPSBmdW5jdGlvbiAkcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0aGVuO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTtcblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3cmFwcGVyID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3c6IHByb21pc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVqZWN0LmNhbGwod3JhcHBlciwgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UuX3MgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeShwcm9taXNlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRyZWplY3QuY2FsbCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3c6IHByb21pc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Q6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAoIVVTRV9OQVRJVkUpIHtcbiAgICAgICAgICAgICAgICAgICAgJFByb21pc2UgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFGdW5jdGlvbihleGVjdXRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3YgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9oID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX24gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC5wcm90b3R5cGUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDk3KSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJFByb21pc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFjdGlvbi5vayA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhY3Rpb24uZG9tYWluID0gaXNOb2RlID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jLnB1c2gocmVhY3Rpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2EpIHRoaXMuX2EucHVzaChyZWFjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3MpIG5vdGlmeSh0aGlzLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2NhdGNoJzogZnVuY3Rpb24gX2NhdGNoKG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gT3duUHJvbWlzZUNhcGFiaWxpdHkoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlamVjdCA9IGN0eCgkcmVqZWN0LCBwcm9taXNlLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQyA9PT0gJFByb21pc2UgfHwgQyA9PT0gV3JhcHBlciA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKSA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7XG4gICAgICAgICAgICAgICAgICAgIFByb21pc2U6ICRQcm9taXNlXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU5KSgkUHJvbWlzZSwgUFJPTUlTRSk7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDk4KShQUk9NSVNFKTtcblxuICAgICAgICAgICAgICAgIFdyYXBwZXIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkpW1BST01JU0VdO1xuICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkJHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgJCRyZWplY3Qocik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTElCUkFSWSB8fCAhVVNFX05BVElWRSksIFBST01JU0UsIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoTElCUkFSWSAmJiB0aGlzID09PSBXcmFwcGVyID8gJFByb21pc2UgOiB0aGlzLCB4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIShVU0VfTkFUSVZFICYmIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjgpKGZ1bmN0aW9uIChpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICRQcm9taXNlLmFsbChpdGVyKVsnY2F0Y2gnXShlbXB0eSk7XG4gICAgICAgICAgICAgICAgfSkpLCBQUk9NSVNFLCB7XG4gICAgICAgICAgICAgICAgICAgIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgQyA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGluZGV4ID0gaW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBDID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogODcgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQ7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogODggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgY3R4ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY2FsbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGlzQXJyYXlJdGVyID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2NCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgYW5PYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyKTtcblxuICAgICAgICAgICAgICAgIHZhciB0b0xlbmd0aCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdldEl0ZXJGbiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEJSRUFLID0ge307XG4gICAgICAgICAgICAgICAgdmFyIFJFVFVSTiA9IHt9O1xuXG4gICAgICAgICAgICAgICAgdmFyIF9leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGVudHJpZXMsIGZuLCB0aGF0LCBJVEVSQVRPUikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICAgICAgICAgICAgICAgIH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZiA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5SXRlcihpdGVyRm4pKSBmb3IgKGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNhbGwoaXRlcmF0b3IsIGYsIHN0ZXAudmFsdWUsIGVudHJpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgX2V4cG9ydHMuQlJFQUsgPSBCUkVBSztcbiAgICAgICAgICAgICAgICBfZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDg5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGFuT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgYUZ1bmN0aW9uID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgU1BFQ0lFUyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzApKCdzcGVjaWVzJyk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gICAgICAgICAgICAgICAgICAgIHZhciBTO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogOTAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgY3R4ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaW52b2tlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5MSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNlbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdsb2JhbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xuICAgICAgICAgICAgICAgIHZhciBzZXRUYXNrID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbiAgICAgICAgICAgICAgICB2YXIgY2xlYXJUYXNrID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xuICAgICAgICAgICAgICAgIHZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbiAgICAgICAgICAgICAgICB2YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG4gICAgICAgICAgICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgICAgIHZhciBxdWV1ZSA9IHt9O1xuICAgICAgICAgICAgICAgIHZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbiAgICAgICAgICAgICAgICB2YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG5cbiAgICAgICAgICAgICAgICB2YXIgcnVuID0gZnVuY3Rpb24gcnVuKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSArdGhpcztcblxuICAgICAgICAgICAgICAgICAgICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiBsaXN0ZW5lcihldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBydW4uY2FsbChldmVudC5kYXRhKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZlcihjb3VudGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3VudGVyO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGFzayA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI5KShwcm9jZXNzKSA9PSAncHJvY2VzcycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVyID0gZnVuY3Rpb24gZGVmZXIoaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXIgPSBmdW5jdGlvbiBkZWZlcihpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgdHlwZW9mIHBvc3RNZXNzYWdlID09ICdmdW5jdGlvbicgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZlciA9IGZ1bmN0aW9uIGRlZmVyKGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNlbCgnc2NyaXB0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVyID0gZnVuY3Rpb24gZGVmZXIoaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVyID0gZnVuY3Rpb24gZGVmZXIoaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHNldDogc2V0VGFzayxcbiAgICAgICAgICAgICAgICAgICAgY2xlYXI6IGNsZWFyVGFza1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDkxICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIGFyZ3MsIHRoYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW4gPyBmbigpIDogZm4uY2FsbCh0aGF0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1biA/IGZuKGFyZ3NbMF0pIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0pIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA5MiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBnbG9iYWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIG1hY3JvdGFzayA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOTApLnNldDtcblxuICAgICAgICAgICAgICAgIHZhciBPYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xuICAgICAgICAgICAgICAgIHZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG4gICAgICAgICAgICAgICAgdmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbiAgICAgICAgICAgICAgICB2YXIgaXNOb2RlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyOSkocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBoZWFkLCBsYXN0LCBub3RpZnk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGZsdXNoID0gZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50LCBmbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc05vZGUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IGhlYWQuZm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZCA9IGhlYWQubmV4dDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVhZCkgbm90aWZ5KCk7ZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoT2JzZXJ2ZXIgJiYgIShnbG9iYWwubmF2aWdhdG9yICYmIGdsb2JhbC5uYXZpZ2F0b3Iuc3RhbmRhbG9uZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b2dnbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnRoZW4oZmx1c2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFzayA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbjogZm4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3QpIGxhc3QubmV4dCA9IHRhc2s7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGVhZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0ID0gdGFzaztcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA5MyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBhRnVuY3Rpb24gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI0KTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFByb21pc2VDYXBhYmlsaXR5KEMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZSA9IGFGdW5jdGlvbihyZXNvbHZlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWplY3QgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA5NCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjogZXhlYygpXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjogZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDk1ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGdsb2JhbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgbmF2aWdhdG9yID0gZ2xvYmFsLm5hdmlnYXRvcjtcbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA5NiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBhbk9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGlzT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkzKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgYW5PYmplY3QoQyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA5NyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciByZWRlZmluZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjApO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBzYWZlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogOTggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4KTtcblxuICAgICAgICAgICAgICAgIHZhciBkUCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIERFU0NSSVBUT1JTID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgU1BFQ0lFUyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzApKCdzcGVjaWVzJyk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIEMgPSBnbG9iYWxbS0VZXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKERFU0NSSVBUT1JTICYmIEMgJiYgIUNbU1BFQ0lFU10pIGRQLmYoQywgU1BFQ0lFUywge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDk5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNvcmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdsb2JhbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4OSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDk2KTtcblxuICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnUHJvbWlzZScsIHtcbiAgICAgICAgICAgICAgICAgICAgJ2ZpbmFsbHknOiBmdW5jdGlvbiBfZmluYWxseShvbkZpbmFsbHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGNvcmUuUHJvbWlzZSB8fCBnbG9iYWwuUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRoZW4oaXNGdW5jdGlvbiA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IDogb25GaW5hbGx5LCBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSA6IG9uRmluYWxseSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTAwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5Myk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcGVyZm9ybSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOTQpO1xuXG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlMsICdQcm9taXNlJywge1xuICAgICAgICAgICAgICAgICAgICAndHJ5JzogZnVuY3Rpb24gX3RyeShjYWxsYmFja2ZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oY2FsbGJhY2tmbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAocmVzdWx0LmUgPyBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3QgOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlKShyZXN1bHQudik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMDEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDgyKTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oODMpO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMDIpO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMTQpO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMTYpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkpLldlYWtNYXA7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEwMiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBlYWNoID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMDMpKDApO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlZGVmaW5lID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgbWV0YSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTA3KTtcblxuICAgICAgICAgICAgICAgIHZhciBhc3NpZ24gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcxKTtcblxuICAgICAgICAgICAgICAgIHZhciB3ZWFrID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMDgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGlzT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZmFpbHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2KTtcblxuICAgICAgICAgICAgICAgIHZhciB2YWxpZGF0ZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTA5KTtcblxuICAgICAgICAgICAgICAgIHZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbiAgICAgICAgICAgICAgICB2YXIgZ2V0V2VhayA9IG1ldGEuZ2V0V2VhaztcbiAgICAgICAgICAgICAgICB2YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcbiAgICAgICAgICAgICAgICB2YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbiAgICAgICAgICAgICAgICB2YXIgdG1wID0ge307XG4gICAgICAgICAgICAgICAgdmFyIEludGVybmFsTWFwO1xuXG4gICAgICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSBmdW5jdGlvbiB3cmFwcGVyKGdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gV2Vha01hcCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgbWV0aG9kcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3Qoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhID8gZGF0YVt0aGlzLl9pXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfTUFQKSwga2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyICRXZWFrTWFwID0gbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExMCkoV0VBS19NQVAsIHdyYXBwZXIsIG1ldGhvZHMsIHdlYWssIHRydWUsIHRydWUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyAkV2Vha01hcCgpLnNldCgoT2JqZWN0LmZyZWV6ZSB8fCBPYmplY3QpKHRtcCksIDcpLmdldCh0bXApICE9IDc7XG4gICAgICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxNYXAgPSB3ZWFrLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIFdFQUtfTUFQKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduKEludGVybmFsTWFwLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgICAgICAgICAgICAgICAgIG1ldGEuTkVFRCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGVhY2goWydkZWxldGUnLCAnaGFzJywgJ2dldCcsICdzZXQnXSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb3RvID0gJFdlYWtNYXAucHJvdG90eXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRlZmluZShwcm90bywga2V5LCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChhKSAmJiAhaXNFeHRlbnNpYmxlKGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZikgdGhpcy5fZiA9IG5ldyBJbnRlcm5hbE1hcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleSA9PSAnc2V0JyA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZC5jYWxsKHRoaXMsIGEsIGIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTAzICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGN0eCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIElPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQzKTtcblxuICAgICAgICAgICAgICAgIHZhciB0b09iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvTGVuZ3RoID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgYXNjID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMDQpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVFlQRSwgJGNyZWF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgICAgICAgICAgICAgICAgICAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICAgICAgICAgICAgICAgICAgICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjcmVhdGUgPSAkY3JlYXRlIHx8IGFzYztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IElPYmplY3QoTyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsLCByZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHNlbGZbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSBmKHZhbCwgaW5kZXgsIE8pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzO2Vsc2UgaWYgKHJlcykgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChJU19FVkVSWSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEwNCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwNSk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTA1ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGlzT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNBcnJheSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTA2KTtcblxuICAgICAgICAgICAgICAgIHZhciBTUEVDSUVTID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMCkoJ3NwZWNpZXMnKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBDO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQyA9IG9yaWdpbmFsLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEwNiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjb2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI5KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29mKGFyZykgPT0gJ0FycmF5JztcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMDcgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4gICAgICAgICAgICAgICAgdmFyIE1FVEEgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIyKSgnbWV0YScpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGlzT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaGFzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgc2V0RGVzYyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTEpLmY7XG5cbiAgICAgICAgICAgICAgICB2YXIgaWQgPSAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIEZSRUVaRSA9ICFfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2KShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgc2V0TWV0YSA9IGZ1bmN0aW9uIHNldE1ldGEoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0RGVzYyhpdCwgTUVUQSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOiAnTycgKyArK2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHt9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgZmFzdEtleSA9IGZ1bmN0aW9uIGZhc3RLZXkoaXQsIGNyZWF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIF90eXBlb2YoaXQpID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRNZXRhKGl0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdFtNRVRBXS5pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgZ2V0V2VhayA9IGZ1bmN0aW9uIGdldFdlYWsoaXQsIGNyZWF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWV0YShpdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRbTUVUQV0udztcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIG9uRnJlZXplID0gZnVuY3Rpb24gb25GcmVlemUoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEZSRUVaRSAmJiBtZXRhLk5FRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzKGl0LCBNRVRBKSkgc2V0TWV0YShpdCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgS0VZOiBNRVRBLFxuICAgICAgICAgICAgICAgICAgICBORUVEOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZmFzdEtleTogZmFzdEtleSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0V2VhazogZ2V0V2VhayxcbiAgICAgICAgICAgICAgICAgICAgb25GcmVlemU6IG9uRnJlZXplXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTA4ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIHJlZGVmaW5lQWxsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ2V0V2VhayA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTA3KS5nZXRXZWFrO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFuT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzKTtcblxuICAgICAgICAgICAgICAgIHZhciBhbkluc3RhbmNlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZm9yT2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDg4KTtcblxuICAgICAgICAgICAgICAgIHZhciBjcmVhdGVBcnJheU1ldGhvZCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTAzKTtcblxuICAgICAgICAgICAgICAgIHZhciAkaGFzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdmFsaWRhdGUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwOSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gICAgICAgICAgICAgICAgdmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG4gICAgICAgICAgICAgICAgdmFyIGlkID0gMDtcblxuICAgICAgICAgICAgICAgIHZhciB1bmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gdW5jYXVnaHRGcm96ZW5TdG9yZSh0aGF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGF0Ll9sIHx8ICh0aGF0Ll9sID0gbmV3IFVuY2F1Z2h0RnJvemVuU3RvcmUoKSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gVW5jYXVnaHRGcm96ZW5TdG9yZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hID0gW107XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5kVW5jYXVnaHRGcm96ZW4gPSBmdW5jdGlvbiBmaW5kVW5jYXVnaHRGcm96ZW4oc3RvcmUsIGtleSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXlGaW5kKHN0b3JlLmEsIGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBVbmNhdWdodEZyb3plblN0b3JlLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhIWZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtlbHNlIHRoaXMuYS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICdkZWxldGUnOiBmdW5jdGlvbiBfZGVsZXRlKGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gYXJyYXlGaW5kSW5kZXgodGhpcy5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5pbmRleCkgdGhpcy5hLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISF+aW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICAgICAgICAgICAgICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fdCA9IE5BTUU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5faSA9IGlkKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIF9kZWxldGUoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3Qoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIE5BTUUpKVsnZGVsZXRlJ10oa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEgJiYgJGhhcyhkYXRhLCB0aGlzLl9pKSAmJiBkZWxldGUgZGF0YVt0aGlzLl9pXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSkuaGFzKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQztcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZGVmOiBmdW5jdGlvbiBkZWYodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGFuT2JqZWN0KGtleSksIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO2Vsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHVmc3RvcmU6IHVuY2F1Z2h0RnJvemVuU3RvcmVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMDkgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUWVBFKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QoaXQpIHx8IGl0Ll90ICE9PSBUWVBFKSB0aHJvdyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkIScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQ7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTEwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGdsb2JhbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVkZWZpbmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIwKTtcblxuICAgICAgICAgICAgICAgIHZhciByZWRlZmluZUFsbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIG1ldGEgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwNyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZm9yT2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDg4KTtcblxuICAgICAgICAgICAgICAgIHZhciBhbkluc3RhbmNlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzKTtcblxuICAgICAgICAgICAgICAgIHZhciBmYWlscyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTYpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRpdGVyRGV0ZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2OCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgc2V0VG9TdHJpbmdUYWcgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU5KTtcblxuICAgICAgICAgICAgICAgIHZhciBpbmhlcml0SWZSZXF1aXJlZCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTExKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgQyA9IEJhc2U7XG4gICAgICAgICAgICAgICAgICAgIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBPID0ge307XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpeE1ldGhvZCA9IGZ1bmN0aW9uIGZpeE1ldGhvZChLRVkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbiA9IHByb3RvW0tFWV07XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRlZmluZShwcm90bywgS0VZLCBLRVkgPT0gJ2RlbGV0ZScgPyBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChhKSA/IGZhbHNlIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSA6IEtFWSA9PSAnaGFzJyA/IGZ1bmN0aW9uIGhhcyhhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyB1bmRlZmluZWQgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IDogS0VZID09ICdhZGQnID8gZnVuY3Rpb24gYWRkKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IDogZnVuY3Rpb24gc2V0KGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIEMgIT0gJ2Z1bmN0aW9uJyB8fCAhKElTX1dFQUsgfHwgcHJvdG8uZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEMoKS5lbnRyaWVzKCkubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEMgPSBjb21tb24uZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhLk5FRUQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gbmV3IEMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBIQVNOVF9DSEFJTklORyA9IGluc3RhbmNlW0FEREVSXShJU19XRUFLID8ge30gOiAtMCwgMSkgIT0gaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgVEhST1dTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuaGFzKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgQUNDRVBUX0lURVJBQkxFUyA9ICRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEMoaXRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBCVUdHWV9aRVJPID0gIUlTX1dFQUsgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IDU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEkaW5zdGFuY2UuaGFzKC0wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFDQ0VQVF9JVEVSQUJMRVMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbkluc3RhbmNlKHRhcmdldCwgQywgTkFNRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UoKSwgdGFyZ2V0LCBDKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhhdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDLnByb3RvdHlwZSA9IHByb3RvO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvLmNvbnN0cnVjdG9yID0gQztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRIUk9XU19PTl9QUklNSVRJVkVTIHx8IEJVR0dZX1pFUk8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeE1ldGhvZCgnaGFzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSVNfTUFQICYmIGZpeE1ldGhvZCgnZ2V0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCVUdHWV9aRVJPIHx8IEhBU05UX0NIQUlOSU5HKSBmaXhNZXRob2QoQURERVIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElTX1dFQUsgJiYgcHJvdG8uY2xlYXIpIGRlbGV0ZSBwcm90by5jbGVhcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNldFRvU3RyaW5nVGFnKEMsIE5BTUUpO1xuICAgICAgICAgICAgICAgICAgICBPW05BTUVdID0gQztcbiAgICAgICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghSVNfV0VBSykgY29tbW9uLnNldFN0cm9uZyhDLCBOQU1FLCBJU19NQVApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQztcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMTEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzKTtcblxuICAgICAgICAgICAgICAgIHZhciBzZXRQcm90b3R5cGVPZiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTEyKS5zZXQ7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCB0YXJnZXQsIEMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFMgPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gICAgICAgICAgICAgICAgICAgIHZhciBQO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChTICE9PSBDICYmIHR5cGVvZiBTID09ICdmdW5jdGlvbicgJiYgKFAgPSBTLnByb3RvdHlwZSkgIT09IEMucHJvdG90eXBlICYmIGlzT2JqZWN0KFApICYmIHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGF0O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDExMiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBpc09iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFuT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgY2hlY2sgPSBmdW5jdGlvbiBjaGVjayhPLCBwcm90bykge1xuICAgICAgICAgICAgICAgICAgICBhbk9iamVjdChPKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHNldDogT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjMpKEZ1bmN0aW9uLmNhbGwsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTEzKS5mKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQsIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVnZ3kgPSAhKHRlc3QgaW5zdGFuY2VvZiBBcnJheSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVnZ3kgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1Z2d5KSBPLl9fcHJvdG9fXyA9IHByb3RvO2Vsc2Ugc2V0KE8sIHByb3RvKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTztcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0oe30sIGZhbHNlKSA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrOiBjaGVja1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDExMyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBwSUUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDczKTtcblxuICAgICAgICAgICAgICAgIHZhciBjcmVhdGVEZXNjID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxOSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9JT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0Mik7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9QcmltaXRpdmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4KTtcblxuICAgICAgICAgICAgICAgIHZhciBoYXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIxKTtcblxuICAgICAgICAgICAgICAgIHZhciBJRThfRE9NX0RFRklORSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuZiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTUpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gICAgICAgICAgICAgICAgICAgIE8gPSB0b0lPYmplY3QoTyk7XG4gICAgICAgICAgICAgICAgICAgIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVEZXNjKCFwSUUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMTQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExNSkoJ1dlYWtNYXAnKTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTE1ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAgICAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBBID0gbmV3IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVtsZW5ndGhdID0gYXJndW1lbnRzW2xlbmd0aF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMTYgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExNykoJ1dlYWtNYXAnKTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTE3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFGdW5jdGlvbiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGN0eCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGZvck9mID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4OCk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICAgICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiBmdW5jdGlvbiBmcm9tKHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXBGbiA9IGFyZ3VtZW50c1sxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFwcGluZywgQSwgbiwgY2I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYUZ1bmN0aW9uKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBtYXBGbiAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBwaW5nKSBhRnVuY3Rpb24obWFwRm4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UgPT0gdW5kZWZpbmVkKSByZXR1cm4gbmV3IHRoaXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwcGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2IgPSBjdHgobWFwRm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIGZ1bmN0aW9uIChuZXh0SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQS5wdXNoKGNiKG5leHRJdGVtLCBuKyspKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgQS5wdXNoLCBBKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDExOCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oODIpO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4Myk7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExOSk7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyMCk7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyMSk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOSkuV2Vha1NldDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTE5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIHdlYWsgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdmFsaWRhdGUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwOSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgV0VBS19TRVQgPSAnV2Vha1NldCc7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExMCkoV0VBS19TRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtTZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19TRVQpLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCB3ZWFrLCBmYWxzZSwgdHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEyMCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTE1KSgnV2Vha1NldCcpO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMjEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExNykoJ1dlYWtTZXQnKTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTIyICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMjMpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkpLlN0cmluZy5jb2RlUG9pbnRBdDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTIzICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRhdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDgpKGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICAgICAgICAgICAgICAgICAgICBjb2RlUG9pbnRBdDogZnVuY3Rpb24gY29kZVBvaW50QXQocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGF0KHRoaXMsIHBvcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTI0ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMjUpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkpLlN0cmluZy5mcm9tQ29kZVBvaW50O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMjUgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9BYnNvbHV0ZUluZGV4ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0NCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbiAgICAgICAgICAgICAgICB2YXIgJGZyb21Db2RlUG9pbnQgPSBTdHJpbmcuZnJvbUNvZGVQb2ludDtcbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghISRmcm9tQ29kZVBvaW50ICYmICRmcm9tQ29kZVBvaW50Lmxlbmd0aCAhPSAxKSwgJ1N0cmluZycsIHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbUNvZGVQb2ludDogZnVuY3Rpb24gZnJvbUNvZGVQb2ludCh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGFMZW4gPiBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9BYnNvbHV0ZUluZGV4KGNvZGUsIDB4MTBmZmZmKSAhPT0gY29kZSkgdGhyb3cgUmFuZ2VFcnJvcihjb2RlICsgJyBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goY29kZSA8IDB4MTAwMDAgPyBmcm9tQ2hhckNvZGUoY29kZSkgOiBmcm9tQ2hhckNvZGUoKChjb2RlIC09IDB4MTAwMDApID4+IDEwKSArIDB4ZDgwMCwgY29kZSAlIDB4NDAwICsgMHhkYzAwKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXMuam9pbignJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTI2ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMjcpO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4Mik7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOSkuU3ltYm9sO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMjcgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGdsb2JhbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaGFzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgREVTQ1JJUFRPUlMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1KTtcblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3KTtcblxuICAgICAgICAgICAgICAgIHZhciByZWRlZmluZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjApO1xuXG4gICAgICAgICAgICAgICAgdmFyIE1FVEEgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwNykuS0VZO1xuXG4gICAgICAgICAgICAgICAgdmFyICRmYWlscyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNoYXJlZCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNldFRvU3RyaW5nVGFnID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1OSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdWlkID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgd2tzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgd2tzRXh0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMjgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHdrc0RlZmluZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTI5KTtcblxuICAgICAgICAgICAgICAgIHZhciBlbnVtS2V5cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMwKTtcblxuICAgICAgICAgICAgICAgIHZhciBpc0FycmF5ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMDYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFuT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzKTtcblxuICAgICAgICAgICAgICAgIHZhciB0b0lPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQyKTtcblxuICAgICAgICAgICAgICAgIHZhciB0b1ByaW1pdGl2ZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNyZWF0ZURlc2MgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE5KTtcblxuICAgICAgICAgICAgICAgIHZhciBfY3JlYXRlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1Mik7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ09QTkV4dCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMxKTtcblxuICAgICAgICAgICAgICAgIHZhciAkR09QRCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTEzKTtcblxuICAgICAgICAgICAgICAgIHZhciAkRFAgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExKTtcblxuICAgICAgICAgICAgICAgIHZhciAka2V5cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdPUEQgPSAkR09QRC5mO1xuICAgICAgICAgICAgICAgIHZhciBkUCA9ICREUC5mO1xuICAgICAgICAgICAgICAgIHZhciBnT1BOID0gZ09QTkV4dC5mO1xuICAgICAgICAgICAgICAgIHZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbiAgICAgICAgICAgICAgICB2YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcblxuICAgICAgICAgICAgICAgIHZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xuXG4gICAgICAgICAgICAgICAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuICAgICAgICAgICAgICAgIHZhciBISURERU4gPSB3a3MoJ19oaWRkZW4nKTtcbiAgICAgICAgICAgICAgICB2YXIgVE9fUFJJTUlUSVZFID0gd2tzKCd0b1ByaW1pdGl2ZScpO1xuICAgICAgICAgICAgICAgIHZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgICAgICAgICAgICAgICB2YXIgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpO1xuICAgICAgICAgICAgICAgIHZhciBBbGxTeW1ib2xzID0gc2hhcmVkKCdzeW1ib2xzJyk7XG4gICAgICAgICAgICAgICAgdmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xuICAgICAgICAgICAgICAgIHZhciBPYmplY3RQcm90byA9IE9iamVjdFtQUk9UT1RZUEVdO1xuICAgICAgICAgICAgICAgIHZhciBVU0VfTkFUSVZFID0gdHlwZW9mICRTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgICAgICAgICB2YXIgUU9iamVjdCA9IGdsb2JhbC5RT2JqZWN0O1xuICAgICAgICAgICAgICAgIHZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuICAgICAgICAgICAgICAgIHZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRQKHRoaXMsICdhJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogN1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKS5hICE9IDc7XG4gICAgICAgICAgICAgICAgfSkgPyBmdW5jdGlvbiAoaXQsIGtleSwgRCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3RvRGVzYykgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRQKGl0LCBrZXksIEQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bykgZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbiAgICAgICAgICAgICAgICB9IDogZFA7XG5cbiAgICAgICAgICAgICAgICB2YXIgd3JhcCA9IGZ1bmN0aW9uIHdyYXAodGFnKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgc3ltLl9rID0gdGFnO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ltO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIF90eXBlb2YoJFN5bWJvbC5pdGVyYXRvcikgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90eXBlb2YoaXQpID09ICdzeW1ib2wnO1xuICAgICAgICAgICAgICAgIH0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIEQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ID09PSBPYmplY3RQcm90bykgJGRlZmluZVByb3BlcnR5KE9QU3ltYm9scywga2V5LCBEKTtcbiAgICAgICAgICAgICAgICAgICAgYW5PYmplY3QoaXQpO1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBhbk9iamVjdChEKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghRC5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXMoaXQsIEhJRERFTikpIGRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdFtISURERU5dW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkgaXRbSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRCA9IF9jcmVhdGUoRCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkUChpdCwga2V5LCBEKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCkge1xuICAgICAgICAgICAgICAgICAgICBhbk9iamVjdChpdCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleTtcblxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAobCA+IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpdCwgUCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUCA9PT0gdW5kZWZpbmVkID8gX2NyZWF0ZShpdCkgOiAkZGVmaW5lUHJvcGVydGllcyhfY3JlYXRlKGl0KSwgUCk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICAgICAgICAgICAgICAgICAgICBpdCA9IHRvSU9iamVjdChpdCk7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSBELmVudW1lcmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZXMgPSBnT1BOKHRvSU9iamVjdChpdCkpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgICAgICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleTtcblxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBJU19PUCA9IGl0ID09PSBPYmplY3RQcm90bztcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVzID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgICAgICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleTtcblxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSkgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmICghVVNFX05BVElWRSkge1xuICAgICAgICAgICAgICAgICAgICAkU3ltYm9sID0gZnVuY3Rpb24gX1N5bWJvbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gdWlkKGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRzZXQgPSBmdW5jdGlvbiAkc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvKSAkc2V0LmNhbGwoT1BTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERVNDUklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQ6ICRzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXAodGFnKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2s7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgICAgICAgICAgICAgICAgICAgJERQLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMyKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzMpLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzIpLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChERVNDUklQVE9SUyAmJiAhX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXAod2tzKG5hbWUpKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7XG4gICAgICAgICAgICAgICAgICAgIFN5bWJvbDogJFN5bWJvbFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgZXM2U3ltYm9scyA9ICdoYXNJbnN0YW5jZSxpc0NvbmNhdFNwcmVhZGFibGUsaXRlcmF0b3IsbWF0Y2gscmVwbGFjZSxzZWFyY2gsc3BlY2llcyxzcGxpdCx0b1ByaW1pdGl2ZSx0b1N0cmluZ1RhZyx1bnNjb3BhYmxlcycuc3BsaXQoJywnKSwgaiA9IDA7IGVzNlN5bWJvbHMubGVuZ3RoID4gajspIHtcbiAgICAgICAgICAgICAgICAgICAgd2tzKGVzNlN5bWJvbHNbaisrXSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgd2VsbEtub3duU3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGsgPSAwOyB3ZWxsS25vd25TeW1ib2xzLmxlbmd0aCA+IGs7KSB7XG4gICAgICAgICAgICAgICAgICAgIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdTeW1ib2wnLCB7XG4gICAgICAgICAgICAgICAgICAgICdmb3InOiBmdW5jdGlvbiBfZm9yKGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKSA/IFN5bWJvbFJlZ2lzdHJ5W2tleV0gOiBTeW1ib2xSZWdpc3RyeVtrZXldID0gJFN5bWJvbChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gU3ltYm9sUmVnaXN0cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3ltYm9sUmVnaXN0cnlba2V5XSA9PT0gc3ltKSByZXR1cm4ga2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB1c2VTZXR0ZXI6IGZ1bmN0aW9uIHVzZVNldHRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHVzZVNpbXBsZTogZnVuY3Rpb24gdXNlU2ltcGxlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGU6ICRjcmVhdGUsXG4gICAgICAgICAgICAgICAgICAgIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gICAgICAgICAgICAgICAgICAgIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzLFxuICAgICAgICAgICAgICAgICAgICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAkSlNPTiAmJiAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghVVNFX05BVElWRSB8fCAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgUyA9ICRTeW1ib2woKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGE6IFNcbiAgICAgICAgICAgICAgICAgICAgfSkgIT0gJ3t9JyB8fCBfc3RyaW5naWZ5KE9iamVjdChTKSkgIT0gJ3t9JztcbiAgICAgICAgICAgICAgICB9KSksICdKU09OJywge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbaXRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QocmVwbGFjZXIpICYmIGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXBsYWNlciA9IGZ1bmN0aW9uIHJlcGxhY2VyKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mICRyZXBsYWNlciA9PSAnZnVuY3Rpb24nKSB2YWx1ZSA9ICRyZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMCkoJFN5bWJvbFtQUk9UT1RZUEVdLCBUT19QUklNSVRJVkUsICRTeW1ib2xbUFJPVE9UWVBFXS52YWx1ZU9mKTtcbiAgICAgICAgICAgICAgICBzZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4gICAgICAgICAgICAgICAgc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBzZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTI4ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5mID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMCk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEyOSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBnbG9iYWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNvcmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIExJQlJBUlkgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMyKTtcblxuICAgICAgICAgICAgICAgIHZhciB3a3NFeHQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHkgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExKS5mO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgIT0gJ18nICYmICEobmFtZSBpbiAkU3ltYm9sKSkgZGVmaW5lUHJvcGVydHkoJFN5bWJvbCwgbmFtZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHdrc0V4dC5mKG5hbWUpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzMCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBnZXRLZXlzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1NCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ09QUyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHBJRSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzMpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGdldEtleXMoaXQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0U3ltYm9scykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzeW1ib2xzLmxlbmd0aCA+IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNFbnVtLmNhbGwoaXQsIGtleSA9IHN5bWJvbHNbaSsrXSkpIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzMSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9JT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0Mik7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ09QTiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMyKS5mO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG4gICAgICAgICAgICAgICAgdmFyIHdpbmRvd05hbWVzID0gKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZih3aW5kb3cpKSA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbiAgICAgICAgICAgICAgICB2YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiBnZXRXaW5kb3dOYW1lcyhpdCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdPUE4oaXQpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzMiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAka2V5cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGhpZGRlbktleXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU3KS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTMzICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMzQpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkpLlN0cmluZy5wYWRTdGFydDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTM0ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRwYWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzNSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdXNlckFnZW50ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5NSk7XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIC9WZXJzaW9uXFwvMTBcXC5cXGQrKFxcLlxcZCspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KSwgJ1N0cmluZycsIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkU3RhcnQ6IGZ1bmN0aW9uIHBhZFN0YXJ0KG1heExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRwYWQodGhpcywgbWF4TGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTM1ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIHRvTGVuZ3RoID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVwZWF0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMzYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMzKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIG1heExlbmd0aCwgZmlsbFN0cmluZywgbGVmdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgUyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmluZ0xlbmd0aCA9IFMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsbFN0ciA9IGZpbGxTdHJpbmcgPT09IHVuZGVmaW5lZCA/ICcgJyA6IFN0cmluZyhmaWxsU3RyaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGludE1heExlbmd0aCA9IHRvTGVuZ3RoKG1heExlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnRNYXhMZW5ndGggPD0gc3RyaW5nTGVuZ3RoIHx8IGZpbGxTdHIgPT0gJycpIHJldHVybiBTO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsbExlbiA9IGludE1heExlbmd0aCAtIHN0cmluZ0xlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmluZ0ZpbGxlciA9IHJlcGVhdC5jYWxsKGZpbGxTdHIsIE1hdGguY2VpbChmaWxsTGVuIC8gZmlsbFN0ci5sZW5ndGgpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZ0ZpbGxlci5sZW5ndGggPiBmaWxsTGVuKSBzdHJpbmdGaWxsZXIgPSBzdHJpbmdGaWxsZXIuc2xpY2UoMCwgZmlsbExlbik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0ID8gc3RyaW5nRmlsbGVyICsgUyA6IFMgKyBzdHJpbmdGaWxsZXI7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTM2ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIHRvSW50ZWdlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMzKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVwZWF0KGNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdHIgPSBTdHJpbmcoZGVmaW5lZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXMgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSB0b0ludGVnZXIoY291bnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobiA8IDAgfHwgbiA9PSBJbmZpbml0eSkgdGhyb3cgUmFuZ2VFcnJvcihcIkNvdW50IGNhbid0IGJlIG5lZ2F0aXZlXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyBuID4gMDsgKG4gPj4+PSAxKSAmJiAoc3RyICs9IHN0cikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuICYgMSkgcmVzICs9IHN0cjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTM3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMzgpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkpLlN0cmluZy5wYWRFbmQ7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzOCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3KTtcblxuICAgICAgICAgICAgICAgIHZhciAkcGFkID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMzUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHVzZXJBZ2VudCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOTUpO1xuXG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCksICdTdHJpbmcnLCB7XG4gICAgICAgICAgICAgICAgICAgIHBhZEVuZDogZnVuY3Rpb24gcGFkRW5kKG1heExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRwYWQodGhpcywgbWF4TGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzOSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQwKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5KS5PYmplY3QudmFsdWVzO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNDAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgJHZhbHVlcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQxKShmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkdmFsdWVzKGl0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNDEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgZ2V0S2V5cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvSU9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGlzRW51bSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzMpLmY7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpc0VudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE8gPSB0b0lPYmplY3QoaXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleXMgPSBnZXRLZXlzKE8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNFbnVtLmNhbGwoTywga2V5ID0ga2V5c1tpKytdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpc0VudHJpZXMgPyBba2V5LCBPW2tleV1dIDogT1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTQyICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgUmVhZGFibGVTdHJlYW0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbiBzdGFydChjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5SZWFkYWJsZVN0cmVhbSA9IFJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5SZWFkYWJsZVN0cmVhbSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQzKS5SZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTQzICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mMiA9IGZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZjIgPSBmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2YyKG9iaik7IH1cblxuICAgICAgICAgICAgICAgIChmdW5jdGlvbiAoZSwgYSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVbaV0gPSBhW2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkoZXhwb3J0cywgZnVuY3Rpb24gKG1vZHVsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk6IG1vZHVsZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHM6IHt9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUubCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uIChleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBnZXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbiAobW9kdWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID8gZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107XG4gICAgICAgICAgICAgICAgICAgICAgICB9IDogZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0dGVyO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uIChvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18ucCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18ucyA9IDcpO1xuICAgICAgICAgICAgICAgIH0oW2Z1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgX3R5cGVvZjIoU3ltYm9sLml0ZXJhdG9yKSA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdHlwZW9mMihvYmopO1xuICAgICAgICAgICAgICAgICAgICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IF90eXBlb2YyKG9iaik7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXF1aXJlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCA9IF9yZXF1aXJlLmFzc2VydDtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJyB8fCAodHlwZW9mIGFyZ3VtZW50ID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihhcmd1bWVudCkpID09PSAnc3ltYm9sJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMudHlwZUlzT2JqZWN0ID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodHlwZW9mIHggPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKHgpKSA9PT0gJ29iamVjdCcgJiYgeCAhPT0gbnVsbCB8fCB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLmNyZWF0ZURhdGFQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvLCBwLCB2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZXhwb3J0cy50eXBlSXNPYmplY3QobykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIHAsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5jcmVhdGVBcnJheUZyb21MaXN0ID0gZnVuY3Rpb24gKGVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudHMuc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLkFycmF5QnVmZmVyQ29weSA9IGZ1bmN0aW9uIChkZXN0LCBkZXN0T2Zmc2V0LCBzcmMsIHNyY09mZnNldCwgbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFVpbnQ4QXJyYXkoZGVzdCkuc2V0KG5ldyBVaW50OEFycmF5KHNyYywgc3JjT2Zmc2V0LCBuKSwgZGVzdE9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5DcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gZnVuY3Rpb24gKHZhbHVlLCBkb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodHlwZW9mIGRvbmUgPT09ICdib29sZWFuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCAndmFsdWUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosICdkb25lJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkb25lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5Jc0Zpbml0ZU5vbk5lZ2F0aXZlTnVtYmVyID0gZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4odikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBDYWxsKEYsIFYsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgRiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChGLCBWLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuSW52b2tlT3JOb29wID0gZnVuY3Rpb24gKE8sIFAsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChPICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KElzUHJvcGVydHlLZXkoUCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KEFycmF5LmlzQXJyYXkoYXJncykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1ldGhvZCA9IE9bUF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDYWxsKG1ldGhvZCwgTywgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5Qcm9taXNlSW52b2tlT3JOb29wID0gZnVuY3Rpb24gKE8sIFAsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChPICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KElzUHJvcGVydHlLZXkoUCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KEFycmF5LmlzQXJyYXkoYXJncykpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZXhwb3J0cy5JbnZva2VPck5vb3AoTywgUCwgYXJncykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAocmV0dXJuVmFsdWVFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJldHVyblZhbHVlRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5Qcm9taXNlSW52b2tlT3JQZXJmb3JtRmFsbGJhY2sgPSBmdW5jdGlvbiAoTywgUCwgYXJncywgRiwgYXJnc0YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChPICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KElzUHJvcGVydHlLZXkoUCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KEFycmF5LmlzQXJyYXkoYXJncykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KEFycmF5LmlzQXJyYXkoYXJnc0YpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXRob2QgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gT1tQXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKG1ldGhvZEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobWV0aG9kRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGLmFwcGx5KG51bGwsIGFyZ3NGKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKENhbGwobWV0aG9kLCBPLCBhcmdzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuVHJhbnNmZXJBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTy5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuVmFsaWRhdGVBbmROb3JtYWxpemVIaWdoV2F0ZXJNYXJrID0gZnVuY3Rpb24gKGhpZ2hXYXRlck1hcmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hXYXRlck1hcmsgPSBOdW1iZXIoaGlnaFdhdGVyTWFyayk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4oaGlnaFdhdGVyTWFyaykgfHwgaGlnaFdhdGVyTWFyayA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignaGlnaFdhdGVyTWFyayBwcm9wZXJ0eSBvZiBhIHF1ZXVpbmcgc3RyYXRlZ3kgbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIG5vbi1OYU4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhpZ2hXYXRlck1hcms7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5WYWxpZGF0ZUFuZE5vcm1hbGl6ZVF1ZXVpbmdTdHJhdGVneSA9IGZ1bmN0aW9uIChzaXplLCBoaWdoV2F0ZXJNYXJrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2l6ZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBzaXplICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2l6ZSBwcm9wZXJ0eSBvZiBhIHF1ZXVpbmcgc3RyYXRlZ3kgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hXYXRlck1hcmsgPSBleHBvcnRzLlZhbGlkYXRlQW5kTm9ybWFsaXplSGlnaFdhdGVyTWFyayhoaWdoV2F0ZXJNYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoV2F0ZXJNYXJrOiBoaWdoV2F0ZXJNYXJrXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlICYmIGUuY29uc3RydWN0b3IgPT09IEFzc2VydGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBc3NlcnRpb25FcnJvcihtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hbWUgPSAnQXNzZXJ0aW9uRXJyb3InO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEFzc2VydGlvbkVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXNzZXJ0aW9uRXJyb3I7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYXNzZXJ0KHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb246IHJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydGlvbkVycm9yOiBBc3NlcnRpb25FcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydDogYXNzZXJ0XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuICAgICAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgX3JlcXVpcmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgSW52b2tlT3JOb29wID0gX3JlcXVpcmUuSW52b2tlT3JOb29wLFxuICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZUludm9rZU9yTm9vcCA9IF9yZXF1aXJlLlByb21pc2VJbnZva2VPck5vb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0ZUFuZE5vcm1hbGl6ZVF1ZXVpbmdTdHJhdGVneSA9IF9yZXF1aXJlLlZhbGlkYXRlQW5kTm9ybWFsaXplUXVldWluZ1N0cmF0ZWd5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZUlzT2JqZWN0ID0gX3JlcXVpcmUudHlwZUlzT2JqZWN0O1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBfcmVxdWlyZTIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0ID0gX3JlcXVpcmUyLmFzc2VydCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbiA9IF9yZXF1aXJlMi5yZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb247XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXF1aXJlMyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMyksXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXF1ZXVlVmFsdWUgPSBfcmVxdWlyZTMuRGVxdWV1ZVZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgRW5xdWV1ZVZhbHVlV2l0aFNpemUgPSBfcmVxdWlyZTMuRW5xdWV1ZVZhbHVlV2l0aFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICBQZWVrUXVldWVWYWx1ZSA9IF9yZXF1aXJlMy5QZWVrUXVldWVWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0UXVldWUgPSBfcmVxdWlyZTMuUmVzZXRRdWV1ZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgV3JpdGFibGVTdHJlYW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdW5kZXJseWluZ1NpbmsgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gX3JlZi5zaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmJGhpZ2hXYXRlck1hcmsgPSBfcmVmLmhpZ2hXYXRlck1hcmssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hXYXRlck1hcmsgPSBfcmVmJGhpZ2hXYXRlck1hcmsgPT09IHVuZGVmaW5lZCA/IDEgOiBfcmVmJGhpZ2hXYXRlck1hcms7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgV3JpdGFibGVTdHJlYW0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnd3JpdGFibGUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JlZEVycm9yID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dyaXRlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd3JpdGVSZXF1ZXN0cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlUmVxdWVzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbkZsaWdodENsb3NlUmVxdWVzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wZW5kaW5nQWJvcnRSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JhY2twcmVzc3VyZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gdW5kZXJseWluZ1NpbmsudHlwZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdHlwZSBpcyBzcGVjaWZpZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXIgPSBuZXcgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzLCB1bmRlcmx5aW5nU2luaywgc2l6ZSwgaGlnaFdhdGVyTWFyayk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXIuX19zdGFydFN0ZXBzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhXcml0YWJsZVN0cmVhbSwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdhYm9ydCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFib3J0KHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbSh0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uKCdhYm9ydCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtTG9ja2VkKHRoaXMpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcignQ2Fubm90IGFib3J0IGEgc3RyZWFtIHRoYXQgYWxyZWFkeSBoYXMgYSB3cml0ZXInKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV3JpdGFibGVTdHJlYW1BYm9ydCh0aGlzLCByZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdnZXRXcml0ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRXcml0ZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgc3RyZWFtQnJhbmRDaGVja0V4Y2VwdGlvbignZ2V0V3JpdGVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWNxdWlyZVdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnbG9ja2VkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzV3JpdGFibGVTdHJlYW0odGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uKCdsb2NrZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJc1dyaXRhYmxlU3RyZWFtTG9ja2VkKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBBY3F1aXJlV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyOiBBY3F1aXJlV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgSXNXcml0YWJsZVN0cmVhbTogSXNXcml0YWJsZVN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIElzV3JpdGFibGVTdHJlYW1Mb2NrZWQ6IElzV3JpdGFibGVTdHJlYW1Mb2NrZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbTogV3JpdGFibGVTdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbUFib3J0OiBXcml0YWJsZVN0cmVhbUFib3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yOiBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJDbG9zZVdpdGhFcnJvclByb3BhZ2F0aW9uOiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJDbG9zZVdpdGhFcnJvclByb3BhZ2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyUmVsZWFzZTogV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyUmVsZWFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcldyaXRlOiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJXcml0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0OiBXcml0YWJsZVN0cmVhbUNsb3NlUXVldWVkT3JJbkZsaWdodFxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFjcXVpcmVXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcihzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSXNXcml0YWJsZVN0cmVhbSh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXR5cGVJc09iamVjdCh4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ193cml0YWJsZVN0cmVhbUNvbnRyb2xsZXInKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc1dyaXRhYmxlU3RyZWFtTG9ja2VkKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KElzV3JpdGFibGVTdHJlYW0oc3RyZWFtKSA9PT0gdHJ1ZSwgJ0lzV3JpdGFibGVTdHJlYW1Mb2NrZWQgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiBrbm93biB3cml0YWJsZSBzdHJlYW1zJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3dyaXRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtQWJvcnQoc3RyZWFtLCByZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0cmVhbS5fc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2Vycm9yZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0ZWQgdG8gYWJvcnQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fcGVuZGluZ0Fib3J0UmVxdWVzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0YXRlID09PSAnd3JpdGFibGUnIHx8IHN0YXRlID09PSAnZXJyb3JpbmcnLCAnc3RhdGUgbXVzdCBiZSB3cml0YWJsZSBvciBlcnJvcmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdhc0FscmVhZHlFcnJvcmluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdlcnJvcmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXNBbHJlYWR5RXJyb3JpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVzb2x2ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlamVjdDogcmVqZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVhc29uOiByZWFzb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF93YXNBbHJlYWR5RXJyb3Jpbmc6IHdhc0FscmVhZHlFcnJvcmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhc0FscmVhZHlFcnJvcmluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbVN0YXJ0RXJyb3Jpbmcoc3RyZWFtLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1BZGRXcml0ZVJlcXVlc3Qoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoSXNXcml0YWJsZVN0cmVhbUxvY2tlZChzdHJlYW0pID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX3N0YXRlID09PSAnd3JpdGFibGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3cml0ZVJlcXVlc3QgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZXNvbHZlOiByZXNvbHZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVqZWN0OiByZWplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl93cml0ZVJlcXVlc3RzLnB1c2god3JpdGVSZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlYWxXaXRoUmVqZWN0aW9uKHN0cmVhbSwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0cmVhbS5fc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ3dyaXRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtU3RhcnRFcnJvcmluZyhzdHJlYW0sIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdGF0ZSA9PT0gJ2Vycm9yaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbUZpbmlzaEVycm9yaW5nKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbVN0YXJ0RXJyb3Jpbmcoc3RyZWFtLCByZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX3N0b3JlZEVycm9yID09PSB1bmRlZmluZWQsICdzdHJlYW0uX3N0b3JlZEVycm9yID09PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX3N0YXRlID09PSAnd3JpdGFibGUnLCAnc3RhdGUgbXVzdCBiZSB3cml0YWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBzdHJlYW0uX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyICE9PSB1bmRlZmluZWQsICdjb250cm9sbGVyIG11c3Qgbm90IGJlIHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9zdGF0ZSA9ICdlcnJvcmluZyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3N0b3JlZEVycm9yID0gcmVhc29uO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdyaXRlciA9IHN0cmVhbS5fd3JpdGVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod3JpdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJFbnN1cmVSZWFkeVByb21pc2VSZWplY3RlZCh3cml0ZXIsIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXcml0YWJsZVN0cmVhbUhhc09wZXJhdGlvbk1hcmtlZEluRmxpZ2h0KHN0cmVhbSkgPT09IGZhbHNlICYmIGNvbnRyb2xsZXIuX3N0YXJ0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbUZpbmlzaEVycm9yaW5nKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbUZpbmlzaEVycm9yaW5nKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICdlcnJvcmluZycsICdzdHJlYW0uX3N0YXRlID09PSBlcnJvcmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFdyaXRhYmxlU3RyZWFtSGFzT3BlcmF0aW9uTWFya2VkSW5GbGlnaHQoc3RyZWFtKSA9PT0gZmFsc2UsICdXcml0YWJsZVN0cmVhbUhhc09wZXJhdGlvbk1hcmtlZEluRmxpZ2h0KHN0cmVhbSkgPT09IGZhbHNlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3N0YXRlID0gJ2Vycm9yZWQnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlci5fX2Vycm9yU3RlcHMoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlZEVycm9yID0gc3RyZWFtLl9zdG9yZWRFcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJlYW0uX3dyaXRlUmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd3JpdGVSZXF1ZXN0ID0gc3RyZWFtLl93cml0ZVJlcXVlc3RzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVSZXF1ZXN0Ll9yZWplY3Qoc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3dyaXRlUmVxdWVzdHMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fcGVuZGluZ0Fib3J0UmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1SZWplY3RDbG9zZUFuZENsb3NlZFByb21pc2VJZk5lZWRlZChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFib3J0UmVxdWVzdCA9IHN0cmVhbS5fcGVuZGluZ0Fib3J0UmVxdWVzdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fcGVuZGluZ0Fib3J0UmVxdWVzdCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFib3J0UmVxdWVzdC5fd2FzQWxyZWFkeUVycm9yaW5nID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRSZXF1ZXN0Ll9yZWplY3Qoc3RvcmVkRXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1SZWplY3RDbG9zZUFuZENsb3NlZFByb21pc2VJZk5lZWRlZChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSBzdHJlYW0uX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlci5fX2Fib3J0U3RlcHMoYWJvcnRSZXF1ZXN0Ll9yZWFzb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0UmVxdWVzdC5fcmVzb2x2ZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1SZWplY3RDbG9zZUFuZENsb3NlZFByb21pc2VJZk5lZWRlZChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0UmVxdWVzdC5fcmVqZWN0KHJlYXNvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbVJlamVjdENsb3NlQW5kQ2xvc2VkUHJvbWlzZUlmTmVlZGVkKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRmluaXNoSW5GbGlnaHRXcml0ZShzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX2luRmxpZ2h0V3JpdGVSZXF1ZXN0ICE9PSB1bmRlZmluZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX2luRmxpZ2h0V3JpdGVSZXF1ZXN0Ll9yZXNvbHZlKHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5faW5GbGlnaHRXcml0ZVJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbUZpbmlzaEluRmxpZ2h0V3JpdGVXaXRoRXJyb3Ioc3RyZWFtLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5faW5GbGlnaHRXcml0ZVJlcXVlc3QgIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5faW5GbGlnaHRXcml0ZVJlcXVlc3QuX3JlamVjdChlcnJvcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5faW5GbGlnaHRXcml0ZVJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3dyaXRhYmxlJyB8fCBzdHJlYW0uX3N0YXRlID09PSAnZXJyb3JpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVhbFdpdGhSZWplY3Rpb24oc3RyZWFtLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbUZpbmlzaEluRmxpZ2h0Q2xvc2Uoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9pbkZsaWdodENsb3NlUmVxdWVzdCAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9pbkZsaWdodENsb3NlUmVxdWVzdC5fcmVzb2x2ZSh1bmRlZmluZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RyZWFtLl9zdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdGF0ZSA9PT0gJ3dyaXRhYmxlJyB8fCBzdGF0ZSA9PT0gJ2Vycm9yaW5nJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2Vycm9yaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fc3RvcmVkRXJyb3IgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0Ll9yZXNvbHZlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9zdGF0ZSA9ICdjbG9zZWQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdyaXRlciA9IHN0cmVhbS5fd3JpdGVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod3JpdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZVJlc29sdmUod3JpdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fcGVuZGluZ0Fib3J0UmVxdWVzdCA9PT0gdW5kZWZpbmVkLCAnc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0ID09PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX3N0b3JlZEVycm9yID09PSB1bmRlZmluZWQsICdzdHJlYW0uX3N0b3JlZEVycm9yID09PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRmluaXNoSW5GbGlnaHRDbG9zZVdpdGhFcnJvcihzdHJlYW0sIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9pbkZsaWdodENsb3NlUmVxdWVzdCAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9pbkZsaWdodENsb3NlUmVxdWVzdC5fcmVqZWN0KGVycm9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9pbkZsaWdodENsb3NlUmVxdWVzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX3N0YXRlID09PSAnd3JpdGFibGUnIHx8IHN0cmVhbS5fc3RhdGUgPT09ICdlcnJvcmluZycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3BlbmRpbmdBYm9ydFJlcXVlc3QuX3JlamVjdChlcnJvcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3BlbmRpbmdBYm9ydFJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVhbFdpdGhSZWplY3Rpb24oc3RyZWFtLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbUNsb3NlUXVldWVkT3JJbkZsaWdodChzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX2Nsb3NlUmVxdWVzdCA9PT0gdW5kZWZpbmVkICYmIHN0cmVhbS5faW5GbGlnaHRDbG9zZVJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbUhhc09wZXJhdGlvbk1hcmtlZEluRmxpZ2h0KHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5faW5GbGlnaHRXcml0ZVJlcXVlc3QgPT09IHVuZGVmaW5lZCAmJiBzdHJlYW0uX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1NYXJrQ2xvc2VSZXF1ZXN0SW5GbGlnaHQoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9pbkZsaWdodENsb3NlUmVxdWVzdCA9PT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX2Nsb3NlUmVxdWVzdCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5faW5GbGlnaHRDbG9zZVJlcXVlc3QgPSBzdHJlYW0uX2Nsb3NlUmVxdWVzdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fY2xvc2VSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1NYXJrRmlyc3RXcml0ZVJlcXVlc3RJbkZsaWdodChzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX2luRmxpZ2h0V3JpdGVSZXF1ZXN0ID09PSB1bmRlZmluZWQsICd0aGVyZSBtdXN0IGJlIG5vIHBlbmRpbmcgd3JpdGUgcmVxdWVzdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fd3JpdGVSZXF1ZXN0cy5sZW5ndGggIT09IDAsICd3cml0ZVJlcXVlc3RzIG11c3Qgbm90IGJlIGVtcHR5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX2luRmxpZ2h0V3JpdGVSZXF1ZXN0ID0gc3RyZWFtLl93cml0ZVJlcXVlc3RzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbVJlamVjdENsb3NlQW5kQ2xvc2VkUHJvbWlzZUlmTmVlZGVkKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICdlcnJvcmVkJywgJ19zdHJlYW1fLltbc3RhdGVdXSBpcyBgXCJlcnJvcmVkXCJgJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX2Nsb3NlUmVxdWVzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5faW5GbGlnaHRDbG9zZVJlcXVlc3QgPT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX2Nsb3NlUmVxdWVzdC5fcmVqZWN0KHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9jbG9zZVJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3cml0ZXIgPSBzdHJlYW0uX3dyaXRlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdyaXRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlckNsb3NlZFByb21pc2VSZWplY3Qod3JpdGVyLCBzdHJlYW0uX3N0b3JlZEVycm9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbVVwZGF0ZUJhY2twcmVzc3VyZShzdHJlYW0sIGJhY2twcmVzc3VyZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICd3cml0YWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0KHN0cmVhbSkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3cml0ZXIgPSBzdHJlYW0uX3dyaXRlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdyaXRlciAhPT0gdW5kZWZpbmVkICYmIGJhY2twcmVzc3VyZSAhPT0gc3RyZWFtLl9iYWNrcHJlc3N1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFja3ByZXNzdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VSZXNldCh3cml0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChiYWNrcHJlc3N1cmUgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZVJlc29sdmUod3JpdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fYmFja3ByZXNzdXJlID0gYmFja3ByZXNzdXJlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcihzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtKHN0cmVhbSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1dyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciBjYW4gb25seSBiZSBjb25zdHJ1Y3RlZCB3aXRoIGEgV3JpdGFibGVTdHJlYW0gaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbUxvY2tlZChzdHJlYW0pID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoaXMgc3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gbG9ja2VkIGZvciBleGNsdXNpdmUgd3JpdGluZyBieSBhbm90aGVyIHdyaXRlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX293bmVyV3JpdGFibGVTdHJlYW0gPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl93cml0ZXIgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0cmVhbS5fc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICd3cml0YWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0KHN0cmVhbSkgPT09IGZhbHNlICYmIHN0cmVhbS5fYmFja3ByZXNzdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlSW5pdGlhbGl6ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VJbml0aWFsaXplQXNSZXNvbHZlZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSAnZXJyb3JpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VJbml0aWFsaXplQXNSZWplY3RlZCh0aGlzLCBzdHJlYW0uX3N0b3JlZEVycm9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkeVByb21pc2UuY2F0Y2goZnVuY3Rpb24gKCkge30pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlSW5pdGlhbGl6ZUFzUmVzb2x2ZWQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZUFzUmVzb2x2ZWQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0YXRlID09PSAnZXJyb3JlZCcsICdzdGF0ZSBtdXN0IGJlIGVycm9yZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlZEVycm9yID0gc3RyZWFtLl9zdG9yZWRFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZUluaXRpYWxpemVBc1JlamVjdGVkKHRoaXMsIHN0b3JlZEVycm9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkeVByb21pc2UuY2F0Y2goZnVuY3Rpb24gKCkge30pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZUFzUmVqZWN0ZWQodGhpcywgc3RvcmVkRXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlZFByb21pc2UuY2F0Y2goZnVuY3Rpb24gKCkge30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdhYm9ydCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFib3J0KHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZGVmYXVsdFdyaXRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Fib3J0JykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX293bmVyV3JpdGFibGVTdHJlYW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGRlZmF1bHRXcml0ZXJMb2NrRXhjZXB0aW9uKCdhYm9ydCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJBYm9ydCh0aGlzLCByZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdjbG9zZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZGVmYXVsdFdyaXRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Nsb3NlJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHRoaXMuX293bmVyV3JpdGFibGVTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZGVmYXVsdFdyaXRlckxvY2tFeGNlcHRpb24oJ2Nsb3NlJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0KHN0cmVhbSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdjYW5ub3QgY2xvc2UgYW4gYWxyZWFkeS1jbG9zaW5nIHN0cmVhbScpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJDbG9zZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAncmVsZWFzZUxvY2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWxlYXNlTG9jaygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZGVmYXVsdFdyaXRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ3JlbGVhc2VMb2NrJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX3dyaXRlciAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyUmVsZWFzZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnd3JpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB3cml0ZShjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZGVmYXVsdFdyaXRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ3dyaXRlJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX293bmVyV3JpdGFibGVTdHJlYW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGRlZmF1bHRXcml0ZXJMb2NrRXhjZXB0aW9uKCd3cml0ZSB0bycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJXcml0ZSh0aGlzLCBjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Nsb3NlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChkZWZhdWx0V3JpdGVyQnJhbmRDaGVja0V4Y2VwdGlvbignY2xvc2VkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb3NlZFByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Rlc2lyZWRTaXplJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZGVmYXVsdFdyaXRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Rlc2lyZWRTaXplJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBkZWZhdWx0V3JpdGVyTG9ja0V4Y2VwdGlvbignZGVzaXJlZFNpemUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJHZXREZXNpcmVkU2l6ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAncmVhZHknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZGVmYXVsdFdyaXRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ3JlYWR5JykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWR5UHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc1dyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcih4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXR5cGVJc09iamVjdCh4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ19vd25lcldyaXRhYmxlU3RyZWFtJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyQWJvcnQod3JpdGVyLCByZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSB3cml0ZXIuX293bmVyV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtQWJvcnQoc3RyZWFtLCByZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyQ2xvc2Uod3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gd3JpdGVyLl9vd25lcldyaXRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0cmVhbS5fc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2Nsb3NlZCcgfHwgc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdUaGUgc3RyZWFtIChpbiAnICsgc3RhdGUgKyAnIHN0YXRlKSBpcyBub3QgaW4gdGhlIHdyaXRhYmxlIHN0YXRlIGFuZCBjYW5ub3QgYmUgY2xvc2VkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RhdGUgPT09ICd3cml0YWJsZScgfHwgc3RhdGUgPT09ICdlcnJvcmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0KHN0cmVhbSkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbG9zZVJlcXVlc3QgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZXNvbHZlOiByZXNvbHZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVqZWN0OiByZWplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fY2xvc2VSZXF1ZXN0ID0gY2xvc2VSZXF1ZXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX2JhY2twcmVzc3VyZSA9PT0gdHJ1ZSAmJiBzdGF0ZSA9PT0gJ3dyaXRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VSZXNvbHZlKHdyaXRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZShzdHJlYW0uX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckNsb3NlV2l0aEVycm9yUHJvcGFnYXRpb24od3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gd3JpdGVyLl9vd25lcldyaXRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0cmVhbS5fc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXcml0YWJsZVN0cmVhbUNsb3NlUXVldWVkT3JJbkZsaWdodChzdHJlYW0pID09PSB0cnVlIHx8IHN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnZXJyb3JlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qoc3RyZWFtLl9zdG9yZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdGF0ZSA9PT0gJ3dyaXRhYmxlJyB8fCBzdGF0ZSA9PT0gJ2Vycm9yaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyQ2xvc2Uod3JpdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckVuc3VyZUNsb3NlZFByb21pc2VSZWplY3RlZCh3cml0ZXIsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgPT09ICdwZW5kaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlUmVqZWN0KHdyaXRlciwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZVJlc2V0VG9SZWplY3RlZCh3cml0ZXIsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckVuc3VyZVJlYWR5UHJvbWlzZVJlamVjdGVkKHdyaXRlciwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3cml0ZXIuX3JlYWR5UHJvbWlzZVN0YXRlID09PSAncGVuZGluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlUmVqZWN0KHdyaXRlciwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlUmVzZXRUb1JlamVjdGVkKHdyaXRlciwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJHZXREZXNpcmVkU2l6ZSh3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSB3cml0ZXIuX293bmVyV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdHJlYW0uX3N0YXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdlcnJvcmVkJyB8fCBzdGF0ZSA9PT0gJ2Vycm9yaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemUoc3RyZWFtLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyUmVsZWFzZSh3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSB3cml0ZXIuX293bmVyV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fd3JpdGVyID09PSB3cml0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGVhc2VkRXJyb3IgPSBuZXcgVHlwZUVycm9yKCdXcml0ZXIgd2FzIHJlbGVhc2VkIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQgdG8gbW9uaXRvciB0aGUgc3RyZWFtXFwncyBjbG9zZWRuZXNzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJFbnN1cmVSZWFkeVByb21pc2VSZWplY3RlZCh3cml0ZXIsIHJlbGVhc2VkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyRW5zdXJlQ2xvc2VkUHJvbWlzZVJlamVjdGVkKHdyaXRlciwgcmVsZWFzZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3dyaXRlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fb3duZXJXcml0YWJsZVN0cmVhbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcldyaXRlKHdyaXRlciwgY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSB3cml0ZXIuX293bmVyV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBzdHJlYW0uX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVua1NpemUgPSBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0Q2h1bmtTaXplKGNvbnRyb2xsZXIsIGNodW5rKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbSAhPT0gd3JpdGVyLl9vd25lcldyaXRhYmxlU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGRlZmF1bHRXcml0ZXJMb2NrRXhjZXB0aW9uKCd3cml0ZSB0bycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RyZWFtLl9zdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnZXJyb3JlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qoc3RyZWFtLl9zdG9yZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXcml0YWJsZVN0cmVhbUNsb3NlUXVldWVkT3JJbkZsaWdodChzdHJlYW0pID09PSB0cnVlIHx8IHN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdUaGUgc3RyZWFtIGlzIGNsb3Npbmcgb3IgY2xvc2VkIGFuZCBjYW5ub3QgYmUgd3JpdHRlbiB0bycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnZXJyb3JpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RhdGUgPT09ICd3cml0YWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSBXcml0YWJsZVN0cmVhbUFkZFdyaXRlUmVxdWVzdChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcldyaXRlKGNvbnRyb2xsZXIsIGNodW5rLCBjaHVua1NpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIoc3RyZWFtLCB1bmRlcmx5aW5nU2luaywgc2l6ZSwgaGlnaFdhdGVyTWFyaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtKHN0cmVhbSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1dyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIFdyaXRhYmxlU3RyZWFtIGluc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnN0YW5jZXMgY2FuIG9ubHkgYmUgY3JlYXRlZCBieSB0aGUgV3JpdGFibGVTdHJlYW0gY29uc3RydWN0b3InKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW0gPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5kZXJseWluZ1NpbmsgPSB1bmRlcmx5aW5nU2luaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZVRvdGFsU2l6ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNldFF1ZXVlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9ybWFsaXplZFN0cmF0ZWd5ID0gVmFsaWRhdGVBbmROb3JtYWxpemVRdWV1aW5nU3RyYXRlZ3koc2l6ZSwgaGlnaFdhdGVyTWFyayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyYXRlZ3lTaXplID0gbm9ybWFsaXplZFN0cmF0ZWd5LnNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyYXRlZ3lIV00gPSBub3JtYWxpemVkU3RyYXRlZ3kuaGlnaFdhdGVyTWFyaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFja3ByZXNzdXJlID0gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldEJhY2twcmVzc3VyZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbVVwZGF0ZUJhY2twcmVzc3VyZShzdHJlYW0sIGJhY2twcmVzc3VyZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZXJyb3IoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5wcm90b3R5cGUuZXJyb3IgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbS5fc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlICE9PSAnd3JpdGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IodGhpcywgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ19fYWJvcnRTdGVwcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9fYWJvcnRTdGVwcyhyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2VJbnZva2VPck5vb3AodGhpcy5fdW5kZXJseWluZ1NpbmssICdhYm9ydCcsIFtyZWFzb25dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnX19lcnJvclN0ZXBzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX19lcnJvclN0ZXBzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNldFF1ZXVlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdfX3N0YXJ0U3RlcHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfX3N0YXJ0U3RlcHMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0UmVzdWx0ID0gSW52b2tlT3JOb29wKHRoaXMuX3VuZGVybHlpbmdTaW5rLCAnc3RhcnQnLCBbdGhpc10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdGhpcy5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoc3RhcnRSZXN1bHQpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICd3cml0YWJsZScgfHwgc3RyZWFtLl9zdGF0ZSA9PT0gJ2Vycm9yaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQWR2YW5jZVF1ZXVlSWZOZWVkZWQoX3RoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAocikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICd3cml0YWJsZScgfHwgc3RyZWFtLl9zdGF0ZSA9PT0gJ2Vycm9yaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlYWxXaXRoUmVqZWN0aW9uKHN0cmVhbSwgcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKHJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcjtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZShjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBFbnF1ZXVlVmFsdWVXaXRoU2l6ZShjb250cm9sbGVyLCAnY2xvc2UnLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJBZHZhbmNlUXVldWVJZk5lZWRlZChjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXRDaHVua1NpemUoY29udHJvbGxlciwgY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJhdGVneVNpemUgPSBjb250cm9sbGVyLl9zdHJhdGVneVNpemU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJhdGVneVNpemUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJhdGVneVNpemUoY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoY2h1bmtTaXplRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcklmTmVlZGVkKGNvbnRyb2xsZXIsIGNodW5rU2l6ZUUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyLl9zdHJhdGVneUhXTSAtIGNvbnRyb2xsZXIuX3F1ZXVlVG90YWxTaXplO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcldyaXRlKGNvbnRyb2xsZXIsIGNodW5rLCBjaHVua1NpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3cml0ZVJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuazogY2h1bmtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5xdWV1ZVZhbHVlV2l0aFNpemUoY29udHJvbGxlciwgd3JpdGVSZWNvcmQsIGNodW5rU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlbnF1ZXVlRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcklmTmVlZGVkKGNvbnRyb2xsZXIsIGVucXVldWVFKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXcml0YWJsZVN0cmVhbUNsb3NlUXVldWVkT3JJbkZsaWdodChzdHJlYW0pID09PSBmYWxzZSAmJiBzdHJlYW0uX3N0YXRlID09PSAnd3JpdGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhY2twcmVzc3VyZSA9IFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXRCYWNrcHJlc3N1cmUoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1VcGRhdGVCYWNrcHJlc3N1cmUoc3RyZWFtLCBiYWNrcHJlc3N1cmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQWR2YW5jZVF1ZXVlSWZOZWVkZWQoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc1dyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0eXBlSXNPYmplY3QoeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdfdW5kZXJseWluZ1NpbmsnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQWR2YW5jZVF1ZXVlSWZOZWVkZWQoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX3N0YXJ0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9pbkZsaWdodFdyaXRlUmVxdWVzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdHJlYW0uX3N0YXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdjbG9zZWQnIHx8IHN0YXRlID09PSAnZXJyb3JlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2Vycm9yaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRmluaXNoRXJyb3Jpbmcoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9xdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3cml0ZVJlY29yZCA9IFBlZWtRdWV1ZVZhbHVlKGNvbnRyb2xsZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod3JpdGVSZWNvcmQgPT09ICdjbG9zZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyUHJvY2Vzc0Nsb3NlKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyUHJvY2Vzc1dyaXRlKGNvbnRyb2xsZXIsIHdyaXRlUmVjb3JkLmNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcklmTmVlZGVkKGNvbnRyb2xsZXIsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtLl9zdGF0ZSA9PT0gJ3dyaXRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcihjb250cm9sbGVyLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyUHJvY2Vzc0Nsb3NlKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbU1hcmtDbG9zZVJlcXVlc3RJbkZsaWdodChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgRGVxdWV1ZVZhbHVlKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX3F1ZXVlLmxlbmd0aCA9PT0gMCwgJ3F1ZXVlIG11c3QgYmUgZW1wdHkgb25jZSB0aGUgZmluYWwgd3JpdGUgcmVjb3JkIGlzIGRlcXVldWVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2lua0Nsb3NlUHJvbWlzZSA9IFByb21pc2VJbnZva2VPck5vb3AoY29udHJvbGxlci5fdW5kZXJseWluZ1NpbmssICdjbG9zZScsIFtdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbmtDbG9zZVByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1GaW5pc2hJbkZsaWdodENsb3NlKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1GaW5pc2hJbkZsaWdodENsb3NlV2l0aEVycm9yKHN0cmVhbSwgcmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKHJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyUHJvY2Vzc1dyaXRlKGNvbnRyb2xsZXIsIGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gY29udHJvbGxlci5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1NYXJrRmlyc3RXcml0ZVJlcXVlc3RJbkZsaWdodChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpbmtXcml0ZVByb21pc2UgPSBQcm9taXNlSW52b2tlT3JOb29wKGNvbnRyb2xsZXIuX3VuZGVybHlpbmdTaW5rLCAnd3JpdGUnLCBbY2h1bmssIGNvbnRyb2xsZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbmtXcml0ZVByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1GaW5pc2hJbkZsaWdodFdyaXRlKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RyZWFtLl9zdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RhdGUgPT09ICd3cml0YWJsZScgfHwgc3RhdGUgPT09ICdlcnJvcmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcXVldWVWYWx1ZShjb250cm9sbGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXcml0YWJsZVN0cmVhbUNsb3NlUXVldWVkT3JJbkZsaWdodChzdHJlYW0pID09PSBmYWxzZSAmJiBzdGF0ZSA9PT0gJ3dyaXRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFja3ByZXNzdXJlID0gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldEJhY2twcmVzc3VyZShjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1VcGRhdGVCYWNrcHJlc3N1cmUoc3RyZWFtLCBiYWNrcHJlc3N1cmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJBZHZhbmNlUXVldWVJZk5lZWRlZChjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbUZpbmlzaEluRmxpZ2h0V3JpdGVXaXRoRXJyb3Ioc3RyZWFtLCByZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2gocmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXRCYWNrcHJlc3N1cmUoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2lyZWRTaXplID0gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlc2lyZWRTaXplIDw9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IoY29udHJvbGxlciwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3dyaXRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbVN0YXJ0RXJyb3Jpbmcoc3RyZWFtLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKCdXcml0YWJsZVN0cmVhbS5wcm90b3R5cGUuJyArIG5hbWUgKyAnIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBXcml0YWJsZVN0cmVhbScpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFdyaXRlckJyYW5kQ2hlY2tFeGNlcHRpb24obmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ1dyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlci5wcm90b3R5cGUuJyArIG5hbWUgKyAnIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXInKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJMb2NrRXhjZXB0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKCdDYW5ub3QgJyArIG5hbWUgKyAnIGEgc3RyZWFtIHVzaW5nIGEgcmVsZWFzZWQgd3JpdGVyJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZUluaXRpYWxpemUod3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgPSByZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgPSAncGVuZGluZyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZUFzUmVqZWN0ZWQod3JpdGVyLCByZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZSA9IFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VTdGF0ZSA9ICdyZWplY3RlZCc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZUluaXRpYWxpemVBc1Jlc29sdmVkKHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VTdGF0ZSA9ICdyZXNvbHZlZCc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZVJlamVjdCh3cml0ZXIsIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHdyaXRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlICE9PSB1bmRlZmluZWQsICd3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSAhPT0gdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCAhPT0gdW5kZWZpbmVkLCAnd3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCAhPT0gdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgPT09ICdwZW5kaW5nJywgJ3dyaXRlci5fY2xvc2VkUHJvbWlzZVN0YXRlIGlzIHBlbmRpbmcnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdChyZWFzb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VTdGF0ZSA9ICdyZWplY3RlZCc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZVJlc2V0VG9SZWplY3RlZCh3cml0ZXIsIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHdyaXRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlID09PSB1bmRlZmluZWQsICd3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9PT0gdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9PT0gdW5kZWZpbmVkLCAnd3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9PT0gdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgIT09ICdwZW5kaW5nJywgJ3dyaXRlci5fY2xvc2VkUHJvbWlzZVN0YXRlIGlzIG5vdCBwZW5kaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2UgPSBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgPSAncmVqZWN0ZWQnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFdyaXRlckNsb3NlZFByb21pc2VSZXNvbHZlKHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHdyaXRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlICE9PSB1bmRlZmluZWQsICd3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSAhPT0gdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCAhPT0gdW5kZWZpbmVkLCAnd3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCAhPT0gdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgPT09ICdwZW5kaW5nJywgJ3dyaXRlci5fY2xvc2VkUHJvbWlzZVN0YXRlIGlzIHBlbmRpbmcnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUodW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgPSAncmVzb2x2ZWQnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZUluaXRpYWxpemUod3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QgPSByZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlU3RhdGUgPSAncGVuZGluZyc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlSW5pdGlhbGl6ZUFzUmVqZWN0ZWQod3JpdGVyLCByZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlID0gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZVN0YXRlID0gJ3JlamVjdGVkJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VJbml0aWFsaXplQXNSZXNvbHZlZCh3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2VTdGF0ZSA9ICdmdWxmaWxsZWQnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZVJlamVjdCh3cml0ZXIsIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHdyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgIT09IHVuZGVmaW5lZCwgJ3dyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgIT09IHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHdyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCAhPT0gdW5kZWZpbmVkLCAnd3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0ICE9PSB1bmRlZmluZWQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0KHJlYXNvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZVN0YXRlID0gJ3JlamVjdGVkJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VSZXNldCh3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlID09PSB1bmRlZmluZWQsICd3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlID09PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QgPT09IHVuZGVmaW5lZCwgJ3dyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCA9PT0gdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QgPSByZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlU3RhdGUgPSAncGVuZGluZyc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlUmVzZXRUb1JlamVjdGVkKHdyaXRlciwgcmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9yZWFkeVByb21pc2VfcmVzb2x2ZSA9PT0gdW5kZWZpbmVkLCAnd3JpdGVyLl9yZWFkeVByb21pc2VfcmVzb2x2ZSA9PT0gdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0ID09PSB1bmRlZmluZWQsICd3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QgPT09IHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2UgPSBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2VTdGF0ZSA9ICdyZWplY3RlZCc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlUmVzb2x2ZSh3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlICE9PSB1bmRlZmluZWQsICd3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlICE9PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QgIT09IHVuZGVmaW5lZCwgJ3dyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCAhPT0gdW5kZWZpbmVkJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUodW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlU3RhdGUgPSAnZnVsZmlsbGVkJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXF1aXJlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIElzRmluaXRlTm9uTmVnYXRpdmVOdW1iZXIgPSBfcmVxdWlyZS5Jc0Zpbml0ZU5vbk5lZ2F0aXZlTnVtYmVyO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBfcmVxdWlyZTIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0ID0gX3JlcXVpcmUyLmFzc2VydDtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLkRlcXVldWVWYWx1ZSA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCgnX3F1ZXVlJyBpbiBjb250YWluZXIgJiYgJ19xdWV1ZVRvdGFsU2l6ZScgaW4gY29udGFpbmVyLCAnU3BlYy1sZXZlbCBmYWlsdXJlOiBEZXF1ZXVlVmFsdWUgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiBjb250YWluZXJzIHdpdGggW1txdWV1ZV1dIGFuZCBbW3F1ZXVlVG90YWxTaXplXV0uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoY29udGFpbmVyLl9xdWV1ZS5sZW5ndGggPiAwLCAnU3BlYy1sZXZlbCBmYWlsdXJlOiBzaG91bGQgbmV2ZXIgZGVxdWV1ZSBmcm9tIGFuIGVtcHR5IHF1ZXVlLicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFpciA9IGNvbnRhaW5lci5fcXVldWUuc2hpZnQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLl9xdWV1ZVRvdGFsU2l6ZSAtPSBwYWlyLnNpemU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250YWluZXIuX3F1ZXVlVG90YWxTaXplIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5fcXVldWVUb3RhbFNpemUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFpci52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLkVucXVldWVWYWx1ZVdpdGhTaXplID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgdmFsdWUsIHNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCgnX3F1ZXVlJyBpbiBjb250YWluZXIgJiYgJ19xdWV1ZVRvdGFsU2l6ZScgaW4gY29udGFpbmVyLCAnU3BlYy1sZXZlbCBmYWlsdXJlOiBFbnF1ZXVlVmFsdWVXaXRoU2l6ZSBzaG91bGQgb25seSBiZSB1c2VkIG9uIGNvbnRhaW5lcnMgd2l0aCBbW3F1ZXVlXV0gYW5kICcgKyAnW1txdWV1ZVRvdGFsU2l6ZV1dLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IE51bWJlcihzaXplKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFJc0Zpbml0ZU5vbk5lZ2F0aXZlTnVtYmVyKHNpemUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1NpemUgbXVzdCBiZSBhIGZpbml0ZSwgbm9uLU5hTiwgbm9uLW5lZ2F0aXZlIG51bWJlci4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLl9xdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogc2l6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5fcXVldWVUb3RhbFNpemUgKz0gc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlBlZWtRdWV1ZVZhbHVlID0gZnVuY3Rpb24gKGNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KCdfcXVldWUnIGluIGNvbnRhaW5lciAmJiAnX3F1ZXVlVG90YWxTaXplJyBpbiBjb250YWluZXIsICdTcGVjLWxldmVsIGZhaWx1cmU6IFBlZWtRdWV1ZVZhbHVlIHNob3VsZCBvbmx5IGJlIHVzZWQgb24gY29udGFpbmVycyB3aXRoIFtbcXVldWVdXSBhbmQgW1txdWV1ZVRvdGFsU2l6ZV1dLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRhaW5lci5fcXVldWUubGVuZ3RoID4gMCwgJ1NwZWMtbGV2ZWwgZmFpbHVyZTogc2hvdWxkIG5ldmVyIHBlZWsgYXQgYW4gZW1wdHkgcXVldWUuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFpciA9IGNvbnRhaW5lci5fcXVldWVbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFpci52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlJlc2V0UXVldWUgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoJ19xdWV1ZScgaW4gY29udGFpbmVyICYmICdfcXVldWVUb3RhbFNpemUnIGluIGNvbnRhaW5lciwgJ1NwZWMtbGV2ZWwgZmFpbHVyZTogUmVzZXRRdWV1ZSBzaG91bGQgb25seSBiZSB1c2VkIG9uIGNvbnRhaW5lcnMgd2l0aCBbW3F1ZXVlXV0gYW5kIFtbcXVldWVUb3RhbFNpemVdXS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5fcXVldWUgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5fcXVldWVUb3RhbFNpemUgPSAwO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXF1aXJlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyQ29weSA9IF9yZXF1aXJlLkFycmF5QnVmZmVyQ29weSxcbiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSBfcmVxdWlyZS5DcmVhdGVJdGVyUmVzdWx0T2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgSXNGaW5pdGVOb25OZWdhdGl2ZU51bWJlciA9IF9yZXF1aXJlLklzRmluaXRlTm9uTmVnYXRpdmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBJbnZva2VPck5vb3AgPSBfcmVxdWlyZS5JbnZva2VPck5vb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlSW52b2tlT3JOb29wID0gX3JlcXVpcmUuUHJvbWlzZUludm9rZU9yTm9vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZmVyQXJyYXlCdWZmZXIgPSBfcmVxdWlyZS5UcmFuc2ZlckFycmF5QnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGVBbmROb3JtYWxpemVRdWV1aW5nU3RyYXRlZ3kgPSBfcmVxdWlyZS5WYWxpZGF0ZUFuZE5vcm1hbGl6ZVF1ZXVpbmdTdHJhdGVneSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRlQW5kTm9ybWFsaXplSGlnaFdhdGVyTWFyayA9IF9yZXF1aXJlLlZhbGlkYXRlQW5kTm9ybWFsaXplSGlnaFdhdGVyTWFyaztcblxuICAgICAgICAgICAgICAgICAgICB2YXIgX3JlcXVpcmUyID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUFycmF5RnJvbUxpc3QgPSBfcmVxdWlyZTIuY3JlYXRlQXJyYXlGcm9tTGlzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURhdGFQcm9wZXJ0eSA9IF9yZXF1aXJlMi5jcmVhdGVEYXRhUHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlSXNPYmplY3QgPSBfcmVxdWlyZTIudHlwZUlzT2JqZWN0O1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBfcmVxdWlyZTMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0ID0gX3JlcXVpcmUzLmFzc2VydCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbiA9IF9yZXF1aXJlMy5yZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb247XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXF1aXJlNCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMyksXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXF1ZXVlVmFsdWUgPSBfcmVxdWlyZTQuRGVxdWV1ZVZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgRW5xdWV1ZVZhbHVlV2l0aFNpemUgPSBfcmVxdWlyZTQuRW5xdWV1ZVZhbHVlV2l0aFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNldFF1ZXVlID0gX3JlcXVpcmU0LlJlc2V0UXVldWU7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXF1aXJlNSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMiksXG4gICAgICAgICAgICAgICAgICAgICAgICBBY3F1aXJlV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyID0gX3JlcXVpcmU1LkFjcXVpcmVXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBJc1dyaXRhYmxlU3RyZWFtID0gX3JlcXVpcmU1LklzV3JpdGFibGVTdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBJc1dyaXRhYmxlU3RyZWFtTG9ja2VkID0gX3JlcXVpcmU1LklzV3JpdGFibGVTdHJlYW1Mb2NrZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbUFib3J0ID0gX3JlcXVpcmU1LldyaXRhYmxlU3RyZWFtQWJvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJDbG9zZVdpdGhFcnJvclByb3BhZ2F0aW9uID0gX3JlcXVpcmU1LldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckNsb3NlV2l0aEVycm9yUHJvcGFnYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJSZWxlYXNlID0gX3JlcXVpcmU1LldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlclJlbGVhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJXcml0ZSA9IF9yZXF1aXJlNS5Xcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJXcml0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0ID0gX3JlcXVpcmU1LldyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBSZWFkYWJsZVN0cmVhbSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bmRlcmx5aW5nU291cmNlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaFdhdGVyTWFyayA9IF9yZWYuaGlnaFdhdGVyTWFyaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSZWFkYWJsZVN0cmVhbSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdyZWFkYWJsZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JlZEVycm9yID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3R1cmJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHVuZGVybHlpbmdTb3VyY2UudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZVN0cmluZyA9IFN0cmluZyh0eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlU3RyaW5nID09PSAnYnl0ZXMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoaWdoV2F0ZXJNYXJrID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hXYXRlck1hcmsgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyID0gbmV3IFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIodGhpcywgdW5kZXJseWluZ1NvdXJjZSwgaGlnaFdhdGVyTWFyayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhpZ2hXYXRlck1hcmsgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaFdhdGVyTWFyayA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIgPSBuZXcgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzLCB1bmRlcmx5aW5nU291cmNlLCBzaXplLCBoaWdoV2F0ZXJNYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0eXBlIGlzIHNwZWNpZmllZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFJlYWRhYmxlU3RyZWFtLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNhbmNlbChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW0odGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qoc3RyZWFtQnJhbmRDaGVja0V4Y2VwdGlvbignY2FuY2VsJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1Mb2NrZWQodGhpcykgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FuY2VsIGEgc3RyZWFtIHRoYXQgYWxyZWFkeSBoYXMgYSByZWFkZXInKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1DYW5jZWwodGhpcywgcmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnZ2V0UmVhZGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVhZGVyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9IF9yZWYyLm1vZGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW0odGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uKCdnZXRSZWFkZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBY3F1aXJlUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9IFN0cmluZyhtb2RlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kZSA9PT0gJ2J5b2InKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWNxdWlyZVJlYWRhYmxlU3RyZWFtQllPQlJlYWRlcih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIG1vZGUgaXMgc3BlY2lmaWVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3BpcGVUaHJvdWdoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcGlwZVRocm91Z2goX3JlZjMsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdyaXRhYmxlID0gX3JlZjMud3JpdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkYWJsZSA9IF9yZWYzLnJlYWRhYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IHRoaXMucGlwZVRvKHdyaXRhYmxlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZJc09iamVjdEFuZEhhc0FQcm9taXNlSXNIYW5kbGVkSW50ZXJuYWxTbG90U2V0UHJvbWlzZUlzSGFuZGxlZFRvVHJ1ZShwcm9taXNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRhYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdwaXBlVG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwaXBlVG8oZGVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVmNCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50Q2xvc2UgPSBfcmVmNC5wcmV2ZW50Q2xvc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50QWJvcnQgPSBfcmVmNC5wcmV2ZW50QWJvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50Q2FuY2VsID0gX3JlZjQucHJldmVudENhbmNlbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbSh0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uKCdwaXBlVG8nKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbShkZXN0KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUucGlwZVRvXFwncyBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgV3JpdGFibGVTdHJlYW0nKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50Q2xvc2UgPSBCb29sZWFuKHByZXZlbnRDbG9zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZlbnRBYm9ydCA9IEJvb2xlYW4ocHJldmVudEFib3J0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmVudENhbmNlbCA9IEJvb2xlYW4ocHJldmVudENhbmNlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1Mb2NrZWQodGhpcykgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUucGlwZVRvIGNhbm5vdCBiZSB1c2VkIG9uIGEgbG9ja2VkIFJlYWRhYmxlU3RyZWFtJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzV3JpdGFibGVTdHJlYW1Mb2NrZWQoZGVzdCkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUucGlwZVRvIGNhbm5vdCBiZSB1c2VkIG9uIGEgbG9ja2VkIFdyaXRhYmxlU3RyZWFtJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IEFjcXVpcmVSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3cml0ZXIgPSBBY3F1aXJlV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyKGRlc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2h1dHRpbmdEb3duID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50V3JpdGUgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBpcGVMb29wKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRXcml0ZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNodXR0aW5nRG93biA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlci5fcmVhZHlQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyUmVhZChyZWFkZXIpLnRoZW4oZnVuY3Rpb24gKF9yZWY1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBfcmVmNS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gX3JlZjUuZG9uZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRXcml0ZSA9IFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcldyaXRlKHdyaXRlciwgdmFsdWUpLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihwaXBlTG9vcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzT3JCZWNvbWVzRXJyb3JlZChfdGhpcywgcmVhZGVyLl9jbG9zZWRQcm9taXNlLCBmdW5jdGlvbiAoc3RvcmVkRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmVudEFib3J0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaHV0ZG93bldpdGhBY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtQWJvcnQoZGVzdCwgc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0cnVlLCBzdG9yZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGRvd24odHJ1ZSwgc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNPckJlY29tZXNFcnJvcmVkKGRlc3QsIHdyaXRlci5fY2xvc2VkUHJvbWlzZSwgZnVuY3Rpb24gKHN0b3JlZEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZlbnRDYW5jZWwgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNodXRkb3duV2l0aEFjdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1DYW5jZWwoX3RoaXMsIHN0b3JlZEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdHJ1ZSwgc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNodXRkb3duKHRydWUsIHN0b3JlZEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzT3JCZWNvbWVzQ2xvc2VkKF90aGlzLCByZWFkZXIuX2Nsb3NlZFByb21pc2UsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmVudENsb3NlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaHV0ZG93bldpdGhBY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckNsb3NlV2l0aEVycm9yUHJvcGFnYXRpb24od3JpdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGRvd24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0KGRlc3QpID09PSB0cnVlIHx8IGRlc3QuX3N0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXN0Q2xvc2VkID0gbmV3IFR5cGVFcnJvcigndGhlIGRlc3RpbmF0aW9uIHdyaXRhYmxlIHN0cmVhbSBjbG9zZWQgYmVmb3JlIGFsbCBkYXRhIGNvdWxkIGJlIHBpcGVkIHRvIGl0Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmVudENhbmNlbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGRvd25XaXRoQWN0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbUNhbmNlbChfdGhpcywgZGVzdENsb3NlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRydWUsIGRlc3RDbG9zZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNodXRkb3duKHRydWUsIGRlc3RDbG9zZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZUxvb3AoKS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFdyaXRlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gd2FpdEZvcldyaXRlc1RvRmluaXNoKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvbGRDdXJyZW50V3JpdGUgPSBjdXJyZW50V3JpdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRXcml0ZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9sZEN1cnJlbnRXcml0ZSAhPT0gY3VycmVudFdyaXRlID8gd2FpdEZvcldyaXRlc1RvRmluaXNoKCkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzT3JCZWNvbWVzRXJyb3JlZChzdHJlYW0sIHByb21pc2UsIGFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3N0YXRlID09PSAnZXJyb3JlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uKHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UuY2F0Y2goYWN0aW9uKS5jYXRjaChyZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNPckJlY29tZXNDbG9zZWQoc3RyZWFtLCBwcm9taXNlLCBhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS50aGVuKGFjdGlvbikuY2F0Y2gocmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNodXRkb3duV2l0aEFjdGlvbihhY3Rpb24sIG9yaWdpbmFsSXNFcnJvciwgb3JpZ2luYWxFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaHV0dGluZ0Rvd24gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNodXR0aW5nRG93biA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdC5fc3RhdGUgPT09ICd3cml0YWJsZScgJiYgV3JpdGFibGVTdHJlYW1DbG9zZVF1ZXVlZE9ySW5GbGlnaHQoZGVzdCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRGb3JXcml0ZXNUb0ZpbmlzaCgpLnRoZW4oZG9UaGVSZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1RoZVJlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkb1RoZVJlc3QoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbigpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmFsaXplKG9yaWdpbmFsSXNFcnJvciwgb3JpZ2luYWxFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChuZXdFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmFsaXplKHRydWUsIG5ld0Vycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2gocmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNodXRkb3duKGlzRXJyb3IsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNodXR0aW5nRG93biA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1dHRpbmdEb3duID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXN0Ll9zdGF0ZSA9PT0gJ3dyaXRhYmxlJyAmJiBXcml0YWJsZVN0cmVhbUNsb3NlUXVldWVkT3JJbkZsaWdodChkZXN0KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdEZvcldyaXRlc1RvRmluaXNoKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmluYWxpemUoaXNFcnJvciwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChyZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKGlzRXJyb3IsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZpbmFsaXplKGlzRXJyb3IsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyUmVsZWFzZSh3cml0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY1JlbGVhc2UocmVhZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3RlZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRlZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW0odGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uKCd0ZWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBicmFuY2hlcyA9IFJlYWRhYmxlU3RyZWFtVGVlKHRoaXMsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUFycmF5RnJvbUxpc3QoYnJhbmNoZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdsb2NrZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbSh0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHN0cmVhbUJyYW5kQ2hlY2tFeGNlcHRpb24oJ2xvY2tlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElzUmVhZGFibGVTdHJlYW1Mb2NrZWQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtOiBSZWFkYWJsZVN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIElzUmVhZGFibGVTdHJlYW1EaXN0dXJiZWQ6IElzUmVhZGFibGVTdHJlYW1EaXN0dXJiZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xvc2U6IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFbnF1ZXVlOiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcjogUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplOiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemVcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBY3F1aXJlUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFjcXVpcmVSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcihzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSXNSZWFkYWJsZVN0cmVhbSh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXR5cGVJc09iamVjdCh4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ19yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXInKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc1JlYWRhYmxlU3RyZWFtRGlzdHVyYmVkKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KElzUmVhZGFibGVTdHJlYW0oc3RyZWFtKSA9PT0gdHJ1ZSwgJ0lzUmVhZGFibGVTdHJlYW1EaXN0dXJiZWQgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiBrbm93biByZWFkYWJsZSBzdHJlYW1zJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtLl9kaXN0dXJiZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc1JlYWRhYmxlU3RyZWFtTG9ja2VkKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KElzUmVhZGFibGVTdHJlYW0oc3RyZWFtKSA9PT0gdHJ1ZSwgJ0lzUmVhZGFibGVTdHJlYW1Mb2NrZWQgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiBrbm93biByZWFkYWJsZSBzdHJlYW1zJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3JlYWRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtVGVlKHN0cmVhbSwgY2xvbmVGb3JCcmFuY2gyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoSXNSZWFkYWJsZVN0cmVhbShzdHJlYW0pID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0eXBlb2YgY2xvbmVGb3JCcmFuY2gyID09PSAnYm9vbGVhbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IEFjcXVpcmVSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZWVTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZWRPckVycm9yZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbGVkMTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsZWQyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24xOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uMjogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVlU3RhdGUucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVlU3RhdGUuX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVsbCA9IGNyZWF0ZV9SZWFkYWJsZVN0cmVhbVRlZVB1bGxGdW5jdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHVsbC5fcmVhZGVyID0gcmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHVsbC5fdGVlU3RhdGUgPSB0ZWVTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1bGwuX2Nsb25lRm9yQnJhbmNoMiA9IGNsb25lRm9yQnJhbmNoMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW5jZWwxID0gY3JlYXRlX1JlYWRhYmxlU3RyZWFtVGVlQnJhbmNoMUNhbmNlbEZ1bmN0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWwxLl9zdHJlYW0gPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWwxLl90ZWVTdGF0ZSA9IHRlZVN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbmNlbDIgPSBjcmVhdGVfUmVhZGFibGVTdHJlYW1UZWVCcmFuY2gyQ2FuY2VsRnVuY3Rpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbDIuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbDIuX3RlZVN0YXRlID0gdGVlU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdW5kZXJseWluZ1NvdXJjZTEgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5wcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRGF0YVByb3BlcnR5KHVuZGVybHlpbmdTb3VyY2UxLCAncHVsbCcsIHB1bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRGF0YVByb3BlcnR5KHVuZGVybHlpbmdTb3VyY2UxLCAnY2FuY2VsJywgY2FuY2VsMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnJhbmNoMVN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh1bmRlcmx5aW5nU291cmNlMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdW5kZXJseWluZ1NvdXJjZTIgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5wcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRGF0YVByb3BlcnR5KHVuZGVybHlpbmdTb3VyY2UyLCAncHVsbCcsIHB1bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRGF0YVByb3BlcnR5KHVuZGVybHlpbmdTb3VyY2UyLCAnY2FuY2VsJywgY2FuY2VsMik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnJhbmNoMlN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh1bmRlcmx5aW5nU291cmNlMik7XG4gICAgICAgICAgICAgICAgICAgICAgICBwdWxsLl9icmFuY2gxID0gYnJhbmNoMVN0cmVhbS5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHVsbC5fYnJhbmNoMiA9IGJyYW5jaDJTdHJlYW0uX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlLmNhdGNoKGZ1bmN0aW9uIChyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlZVN0YXRlLmNsb3NlZE9yRXJyb3JlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yKHB1bGwuX2JyYW5jaDEsIHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcihwdWxsLl9icmFuY2gyLCByKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWVTdGF0ZS5jbG9zZWRPckVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbYnJhbmNoMVN0cmVhbSwgYnJhbmNoMlN0cmVhbV07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVfUmVhZGFibGVTdHJlYW1UZWVQdWxsRnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkZXIgPSBmLl9yZWFkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaDEgPSBmLl9icmFuY2gxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2gyID0gZi5fYnJhbmNoMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVlU3RhdGUgPSBmLl90ZWVTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyUmVhZChyZWFkZXIpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodHlwZUlzT2JqZWN0KHJlc3VsdCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb25lID0gcmVzdWx0LmRvbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0eXBlb2YgZG9uZSA9PT0gJ2Jvb2xlYW4nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9uZSA9PT0gdHJ1ZSAmJiB0ZWVTdGF0ZS5jbG9zZWRPckVycm9yZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVlU3RhdGUuY2FuY2VsZWQxID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZShicmFuY2gxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlZVN0YXRlLmNhbmNlbGVkMiA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xvc2UoYnJhbmNoMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlZVN0YXRlLmNsb3NlZE9yRXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVlU3RhdGUuY2xvc2VkT3JFcnJvcmVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUxID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZTIgPSB2YWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVlU3RhdGUuY2FuY2VsZWQxID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVucXVldWUoYnJhbmNoMSwgdmFsdWUxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZWVTdGF0ZS5jYW5jZWxlZDIgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZShicmFuY2gyLCB2YWx1ZTIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlX1JlYWRhYmxlU3RyZWFtVGVlQnJhbmNoMUNhbmNlbEZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZihyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gZi5fc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWVTdGF0ZSA9IGYuX3RlZVN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlZVN0YXRlLmNhbmNlbGVkMSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVlU3RhdGUucmVhc29uMSA9IHJlYXNvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZWVTdGF0ZS5jYW5jZWxlZDIgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvc2l0ZVJlYXNvbiA9IGNyZWF0ZUFycmF5RnJvbUxpc3QoW3RlZVN0YXRlLnJlYXNvbjEsIHRlZVN0YXRlLnJlYXNvbjJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbmNlbFJlc3VsdCA9IFJlYWRhYmxlU3RyZWFtQ2FuY2VsKHN0cmVhbSwgY29tcG9zaXRlUmVhc29uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWVTdGF0ZS5fcmVzb2x2ZShjYW5jZWxSZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZWVTdGF0ZS5wcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZV9SZWFkYWJsZVN0cmVhbVRlZUJyYW5jaDJDYW5jZWxGdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGYocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGYuX3N0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVlU3RhdGUgPSBmLl90ZWVTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWVTdGF0ZS5jYW5jZWxlZDIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlZVN0YXRlLnJlYXNvbjIgPSByZWFzb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVlU3RhdGUuY2FuY2VsZWQxID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb3NpdGVSZWFzb24gPSBjcmVhdGVBcnJheUZyb21MaXN0KFt0ZWVTdGF0ZS5yZWFzb24xLCB0ZWVTdGF0ZS5yZWFzb24yXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW5jZWxSZXN1bHQgPSBSZWFkYWJsZVN0cmVhbUNhbmNlbChzdHJlYW0sIGNvbXBvc2l0ZVJlYXNvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVlU3RhdGUuX3Jlc29sdmUoY2FuY2VsUmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVlU3RhdGUucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUFkZFJlYWRJbnRvUmVxdWVzdChzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChJc1JlYWRhYmxlU3RyZWFtQllPQlJlYWRlcihzdHJlYW0uX3JlYWRlcikgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScgfHwgc3RyZWFtLl9zdGF0ZSA9PT0gJ2Nsb3NlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRJbnRvUmVxdWVzdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Jlc29sdmU6IHJlc29sdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWplY3Q6IHJlamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3JlYWRlci5fcmVhZEludG9SZXF1ZXN0cy5wdXNoKHJlYWRJbnRvUmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1BZGRSZWFkUmVxdWVzdChzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChJc1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcihzdHJlYW0uX3JlYWRlcikgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVzb2x2ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlamVjdDogcmVqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fcmVhZGVyLl9yZWFkUmVxdWVzdHMucHVzaChyZWFkUmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1DYW5jZWwoc3RyZWFtLCByZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fZGlzdHVyYmVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9zdGF0ZSA9PT0gJ2Vycm9yZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbUNsb3NlKHN0cmVhbSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VDYW5jZWxQcm9taXNlID0gc3RyZWFtLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIuX19jYW5jZWxTdGVwcyhyZWFzb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc291cmNlQ2FuY2VsUHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUNsb3NlKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9zdGF0ZSA9ICdjbG9zZWQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IHN0cmVhbS5fcmVhZGVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIocmVhZGVyKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVhZGVyLl9yZWFkUmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXNvbHZlID0gcmVhZGVyLl9yZWFkUmVxdWVzdHNbaV0uX3Jlc29sdmU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Jlc29sdmUoQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX3JlYWRSZXF1ZXN0cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0UmVhZGVyQ2xvc2VkUHJvbWlzZVJlc29sdmUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUVycm9yKHN0cmVhbSwgZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KElzUmVhZGFibGVTdHJlYW0oc3RyZWFtKSA9PT0gdHJ1ZSwgJ3N0cmVhbSBtdXN0IGJlIFJlYWRhYmxlU3RyZWFtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJywgJ3N0YXRlIG11c3QgYmUgcmVhZGFibGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fc3RhdGUgPSAnZXJyb3JlZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3N0b3JlZEVycm9yID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkZXIgPSBzdHJlYW0uX3JlYWRlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKHJlYWRlcikgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlYWRlci5fcmVhZFJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkUmVxdWVzdCA9IHJlYWRlci5fcmVhZFJlcXVlc3RzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRSZXF1ZXN0Ll9yZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9yZWFkUmVxdWVzdHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KElzUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyKHJlYWRlciksICdyZWFkZXIgbXVzdCBiZSBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXInKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCByZWFkZXIuX3JlYWRJbnRvUmVxdWVzdHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkSW50b1JlcXVlc3QgPSByZWFkZXIuX3JlYWRJbnRvUmVxdWVzdHNbX2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRJbnRvUmVxdWVzdC5fcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fcmVhZEludG9SZXF1ZXN0cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0UmVhZGVyQ2xvc2VkUHJvbWlzZVJlamVjdChyZWFkZXIsIGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2UuY2F0Y2goZnVuY3Rpb24gKCkge30pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1GdWxmaWxsUmVhZEludG9SZXF1ZXN0KHN0cmVhbSwgY2h1bmssIGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkZXIgPSBzdHJlYW0uX3JlYWRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZWFkZXIuX3JlYWRJbnRvUmVxdWVzdHMubGVuZ3RoID4gMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkSW50b1JlcXVlc3QgPSByZWFkZXIuX3JlYWRJbnRvUmVxdWVzdHMuc2hpZnQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEludG9SZXF1ZXN0Ll9yZXNvbHZlKENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoY2h1bmssIGRvbmUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRnVsZmlsbFJlYWRSZXF1ZXN0KHN0cmVhbSwgY2h1bmssIGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkZXIgPSBzdHJlYW0uX3JlYWRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZWFkZXIuX3JlYWRSZXF1ZXN0cy5sZW5ndGggPiAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRSZXF1ZXN0ID0gcmVhZGVyLl9yZWFkUmVxdWVzdHMuc2hpZnQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFJlcXVlc3QuX3Jlc29sdmUoQ3JlYXRlSXRlclJlc3VsdE9iamVjdChjaHVuaywgZG9uZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1HZXROdW1SZWFkSW50b1JlcXVlc3RzKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5fcmVhZGVyLl9yZWFkSW50b1JlcXVlc3RzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtR2V0TnVtUmVhZFJlcXVlc3RzKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5fcmVhZGVyLl9yZWFkUmVxdWVzdHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1IYXNCWU9CUmVhZGVyKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IHN0cmVhbS5fcmVhZGVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtQllPQlJlYWRlcihyZWFkZXIpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUhhc0RlZmF1bHRSZWFkZXIoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGVyID0gc3RyZWFtLl9yZWFkZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKHJlYWRlcikgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbShzdHJlYW0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIFJlYWRhYmxlU3RyZWFtIGluc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1Mb2NrZWQoc3RyZWFtKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGlzIHN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGxvY2tlZCBmb3IgZXhjbHVzaXZlIHJlYWRpbmcgYnkgYW5vdGhlciByZWFkZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbVJlYWRlckdlbmVyaWNJbml0aWFsaXplKHRoaXMsIHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZFJlcXVlc3RzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2FuY2VsKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZGVmYXVsdFJlYWRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2NhbmNlbCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vd25lclJlYWRhYmxlU3RyZWFtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFkZXJMb2NrRXhjZXB0aW9uKCdjYW5jZWwnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1SZWFkZXJHZW5lcmljQ2FuY2VsKHRoaXMsIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3JlYWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWFkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZGVmYXVsdFJlYWRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ3JlYWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhZGVyTG9ja0V4Y2VwdGlvbigncmVhZCBmcm9tJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlclJlYWQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3JlbGVhc2VMb2NrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVsZWFzZUxvY2soKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGRlZmF1bHRSZWFkZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdyZWxlYXNlTG9jaycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX293bmVyUmVhZGFibGVTdHJlYW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWRSZXF1ZXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUcmllZCB0byByZWxlYXNlIGEgcmVhZGVyIGxvY2sgd2hlbiB0aGF0IHJlYWRlciBoYXMgcGVuZGluZyByZWFkKCkgY2FsbHMgdW4tc2V0dGxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1SZWFkZXJHZW5lcmljUmVsZWFzZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnY2xvc2VkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGRlZmF1bHRSZWFkZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdjbG9zZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvc2VkUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFJc1JlYWRhYmxlU3RyZWFtKHN0cmVhbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIGNhbiBvbmx5IGJlIGNvbnN0cnVjdGVkIHdpdGggYSBSZWFkYWJsZVN0cmVhbSBpbnN0YW5jZSBnaXZlbiBhICcgKyAnYnl0ZSBzb3VyY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKHN0cmVhbS5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnN0cnVjdCBhIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlciBmb3IgYSBzdHJlYW0gbm90IGNvbnN0cnVjdGVkIHdpdGggYSBieXRlICcgKyAnc291cmNlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1Mb2NrZWQoc3RyZWFtKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGlzIHN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGxvY2tlZCBmb3IgZXhjbHVzaXZlIHJlYWRpbmcgYnkgYW5vdGhlciByZWFkZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbVJlYWRlckdlbmVyaWNJbml0aWFsaXplKHRoaXMsIHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZEludG9SZXF1ZXN0cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNhbmNlbChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFJc1JlYWRhYmxlU3RyZWFtQllPQlJlYWRlcih0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGJ5b2JSZWFkZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdjYW5jZWwnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhZGVyTG9ja0V4Y2VwdGlvbignY2FuY2VsJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY0NhbmNlbCh0aGlzLCByZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdyZWFkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVhZCh2aWV3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghSXNSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIodGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChieW9iUmVhZGVyQnJhbmRDaGVja0V4Y2VwdGlvbigncmVhZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vd25lclJlYWRhYmxlU3RyZWFtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFkZXJMb2NrRXhjZXB0aW9uKCdyZWFkIGZyb20nKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5QnVmZmVyLmlzVmlldyh2aWV3KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ3ZpZXcgbXVzdCBiZSBhbiBhcnJheSBidWZmZXIgdmlldycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2aWV3LmJ5dGVMZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCd2aWV3IG11c3QgaGF2ZSBub24temVybyBieXRlTGVuZ3RoJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlclJlYWQodGhpcywgdmlldyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3JlbGVhc2VMb2NrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVsZWFzZUxvY2soKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghSXNSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIodGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGJ5b2JSZWFkZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdyZWxlYXNlTG9jaycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX293bmVyUmVhZGFibGVTdHJlYW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWRJbnRvUmVxdWVzdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVHJpZWQgdG8gcmVsZWFzZSBhIHJlYWRlciBsb2NrIHdoZW4gdGhhdCByZWFkZXIgaGFzIHBlbmRpbmcgcmVhZCgpIGNhbGxzIHVuLXNldHRsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY1JlbGVhc2UodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Nsb3NlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghSXNSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIodGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChieW9iUmVhZGVyQnJhbmRDaGVja0V4Y2VwdGlvbignY2xvc2VkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb3NlZFByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSXNSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0eXBlSXNPYmplY3QoeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdfcmVhZEludG9SZXF1ZXN0cycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElzUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHlwZUlzT2JqZWN0KHgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnX3JlYWRSZXF1ZXN0cycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY0luaXRpYWxpemUocmVhZGVyLCBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fb3duZXJSZWFkYWJsZVN0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fcmVhZGVyID0gcmVhZGVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0uX3N0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZUFzUmVzb2x2ZWQocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICdlcnJvcmVkJywgJ3N0YXRlIG11c3QgYmUgZXJyb3JlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZUFzUmVqZWN0ZWQocmVhZGVyLCBzdHJlYW0uX3N0b3JlZEVycm9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbVJlYWRlckdlbmVyaWNDYW5jZWwocmVhZGVyLCByZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSByZWFkZXIuX293bmVyUmVhZGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtQ2FuY2VsKHN0cmVhbSwgcmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY1JlbGVhc2UocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQocmVhZGVyLl9vd25lclJlYWRhYmxlU3RyZWFtICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlYWRlci5fb3duZXJSZWFkYWJsZVN0cmVhbS5fcmVhZGVyID09PSByZWFkZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZGVyLl9vd25lclJlYWRhYmxlU3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlUmVqZWN0KHJlYWRlciwgbmV3IFR5cGVFcnJvcignUmVhZGVyIHdhcyByZWxlYXNlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSB1c2VkIHRvIG1vbml0b3IgdGhlIHN0cmVhbVxcJ3MgY2xvc2VkbmVzcycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFJlYWRlckNsb3NlZFByb21pc2VSZXNldFRvUmVqZWN0ZWQocmVhZGVyLCBuZXcgVHlwZUVycm9yKCdSZWFkZXIgd2FzIHJlbGVhc2VkIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQgdG8gbW9uaXRvciB0aGUgc3RyZWFtXFwncyBjbG9zZWRuZXNzJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2UuY2F0Y2goZnVuY3Rpb24gKCkge30pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX293bmVyUmVhZGFibGVTdHJlYW0uX3JlYWRlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fb3duZXJSZWFkYWJsZVN0cmVhbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlclJlYWQocmVhZGVyLCB2aWV3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gcmVhZGVyLl9vd25lclJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fZGlzdHVyYmVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChzdHJlYW0uX3N0b3JlZEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJQdWxsSW50byhzdHJlYW0uX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlciwgdmlldyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXJSZWFkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHJlYWRlci5fb3duZXJSZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0gIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX2Rpc3R1cmJlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3N0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChzdHJlYW0uX3N0b3JlZEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyLl9fcHVsbFN0ZXBzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIoc3RyZWFtLCB1bmRlcmx5aW5nU291cmNlLCBzaXplLCBoaWdoV2F0ZXJNYXJrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW0oc3RyZWFtKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBjYW4gb25seSBiZSBjb25zdHJ1Y3RlZCB3aXRoIGEgUmVhZGFibGVTdHJlYW0gaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGluc3RhbmNlcyBjYW4gb25seSBiZSBjcmVhdGVkIGJ5IHRoZSBSZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3RvcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91bmRlcmx5aW5nU291cmNlID0gdW5kZXJseWluZ1NvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZVRvdGFsU2l6ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNldFF1ZXVlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbG9zZVJlcXVlc3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3B1bGxBZ2FpbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3B1bGxpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9ybWFsaXplZFN0cmF0ZWd5ID0gVmFsaWRhdGVBbmROb3JtYWxpemVRdWV1aW5nU3RyYXRlZ3koc2l6ZSwgaGlnaFdhdGVyTWFyayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyYXRlZ3lTaXplID0gbm9ybWFsaXplZFN0cmF0ZWd5LnNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyYXRlZ3lIV00gPSBub3JtYWxpemVkU3RyYXRlZ3kuaGlnaFdhdGVyTWFyaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udHJvbGxlciA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0UmVzdWx0ID0gSW52b2tlT3JOb29wKHVuZGVybHlpbmdTb3VyY2UsICdzdGFydCcsIFt0aGlzXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHN0YXJ0UmVzdWx0KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9wdWxsaW5nID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9wdWxsQWdhaW4gPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNhbGxQdWxsSWZOZWVkZWQoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9ySWZOZWVkZWQoY29udHJvbGxlciwgcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2gocmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnY2xvc2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGRlZmF1bHRDb250cm9sbGVyQnJhbmRDaGVja0V4Y2VwdGlvbignY2xvc2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jbG9zZVJlcXVlc3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZDsgZG8gbm90IGNsb3NlIGl0IGFnYWluIScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtLl9zdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT09ICdyZWFkYWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBzdHJlYW0gKGluICcgKyBzdGF0ZSArICcgc3RhdGUpIGlzIG5vdCBpbiB0aGUgcmVhZGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBjbG9zZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnZW5xdWV1ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGVucXVldWUoY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGRlZmF1bHRDb250cm9sbGVyQnJhbmRDaGVja0V4Y2VwdGlvbignZW5xdWV1ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Nsb3NlUmVxdWVzdGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJlYW0gaXMgY2xvc2VkIG9yIGRyYWluaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0uX3N0YXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAhPT0gJ3JlYWRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHN0cmVhbSAoaW4gJyArIHN0YXRlICsgJyBzdGF0ZSkgaXMgbm90IGluIHRoZSByZWFkYWJsZSBzdGF0ZSBhbmQgY2Fubm90IGJlIGVucXVldWVkIHRvJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVucXVldWUodGhpcywgY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGVycm9yKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGRlZmF1bHRDb250cm9sbGVyQnJhbmRDaGVja0V4Y2VwdGlvbignZXJyb3InKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSB0aGlzLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgIT09ICdyZWFkYWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBzdHJlYW0gaXMgJyArIHN0cmVhbS5fc3RhdGUgKyAnIGFuZCBzbyBjYW5ub3QgYmUgZXJyb3JlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yKHRoaXMsIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdfX2NhbmNlbFN0ZXBzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX19jYW5jZWxTdGVwcyhyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXRRdWV1ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2VJbnZva2VPck5vb3AodGhpcy5fdW5kZXJseWluZ1NvdXJjZSwgJ2NhbmNlbCcsIFtyZWFzb25dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnX19wdWxsU3RlcHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfX3B1bGxTdGVwcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rID0gRGVxdWV1ZVZhbHVlKHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2xvc2VSZXF1ZXN0ZWQgPT09IHRydWUgJiYgdGhpcy5fcXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1DbG9zZShzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2FsbFB1bGxJZk5lZWRlZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShDcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGNodW5rLCBmYWxzZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBlbmRpbmdQcm9taXNlID0gUmVhZGFibGVTdHJlYW1BZGRSZWFkUmVxdWVzdChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2FsbFB1bGxJZk5lZWRlZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlbmRpbmdQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdkZXNpcmVkU2l6ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBkZWZhdWx0Q29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Rlc2lyZWRTaXplJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXI7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0eXBlSXNPYmplY3QoeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdfdW5kZXJseWluZ1NvdXJjZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDYWxsUHVsbElmTmVlZGVkKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaG91bGRQdWxsID0gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlclNob3VsZENhbGxQdWxsKGNvbnRyb2xsZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkUHVsbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fcHVsbGluZyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuX3B1bGxBZ2FpbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX3B1bGxBZ2FpbiA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fcHVsbGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVsbFByb21pc2UgPSBQcm9taXNlSW52b2tlT3JOb29wKGNvbnRyb2xsZXIuX3VuZGVybHlpbmdTb3VyY2UsICdwdWxsJywgW2NvbnRyb2xsZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1bGxQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuX3B1bGxpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9wdWxsQWdhaW4gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fcHVsbEFnYWluID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2FsbFB1bGxJZk5lZWRlZChjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3JJZk5lZWRlZChjb250cm9sbGVyLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKHJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlclNob3VsZENhbGxQdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3N0YXRlID09PSAnY2xvc2VkJyB8fCBzdHJlYW0uX3N0YXRlID09PSAnZXJyb3JlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9jbG9zZVJlcXVlc3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX3N0YXJ0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbUxvY2tlZChzdHJlYW0pID09PSB0cnVlICYmIFJlYWRhYmxlU3RyZWFtR2V0TnVtUmVhZFJlcXVlc3RzKHN0cmVhbSkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNpcmVkU2l6ZSA9IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZShjb250cm9sbGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc2lyZWRTaXplID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xvc2UoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9jbG9zZVJlcXVlc3RlZCA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fY2xvc2VSZXF1ZXN0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fcXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1DbG9zZShzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVucXVldWUoY29udHJvbGxlciwgY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoY29udHJvbGxlci5fY2xvc2VSZXF1ZXN0ZWQgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX3N0YXRlID09PSAncmVhZGFibGUnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1Mb2NrZWQoc3RyZWFtKSA9PT0gdHJ1ZSAmJiBSZWFkYWJsZVN0cmVhbUdldE51bVJlYWRSZXF1ZXN0cyhzdHJlYW0pID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRnVsZmlsbFJlYWRSZXF1ZXN0KHN0cmVhbSwgY2h1bmssIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rU2l6ZSA9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fc3RyYXRlZ3lTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmF0ZWd5U2l6ZSA9IGNvbnRyb2xsZXIuX3N0cmF0ZWd5U2l6ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtTaXplID0gc3RyYXRlZ3lTaXplKGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoY2h1bmtTaXplRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9ySWZOZWVkZWQoY29udHJvbGxlciwgY2h1bmtTaXplRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBjaHVua1NpemVFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5xdWV1ZVZhbHVlV2l0aFNpemUoY29udHJvbGxlciwgY2h1bmssIGNodW5rU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZW5xdWV1ZUUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9ySWZOZWVkZWQoY29udHJvbGxlciwgZW5xdWV1ZUUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlbnF1ZXVlRTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDYWxsUHVsbElmTmVlZGVkKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcihjb250cm9sbGVyLCBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXRRdWV1ZShjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRXJyb3Ioc3RyZWFtLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcklmTmVlZGVkKGNvbnRyb2xsZXIsIGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0uX3N0YXRlID09PSAncmVhZGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yKGNvbnRyb2xsZXIsIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdHJlYW0uX3N0YXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyLl9zdHJhdGVneUhXTSAtIGNvbnRyb2xsZXIuX3F1ZXVlVG90YWxTaXplO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0KGNvbnRyb2xsZXIsIHZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciA9IGNvbnRyb2xsZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmlldyA9IHZpZXc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3Jlc3BvbmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNwb25kKGJ5dGVzV3JpdHRlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0KHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYnlvYlJlcXVlc3RCcmFuZENoZWNrRXhjZXB0aW9uKCdyZXNwb25kJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhpcyBCWU9CIHJlcXVlc3QgaGFzIGJlZW4gaW52YWxpZGF0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJSZXNwb25kKHRoaXMuX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLCBieXRlc1dyaXR0ZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdyZXNwb25kV2l0aE5ld1ZpZXcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNwb25kV2l0aE5ld1ZpZXcodmlldykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0KHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYnlvYlJlcXVlc3RCcmFuZENoZWNrRXhjZXB0aW9uKCdyZXNwb25kJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhpcyBCWU9CIHJlcXVlc3QgaGFzIGJlZW4gaW52YWxpZGF0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXlCdWZmZXIuaXNWaWV3KHZpZXcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdZb3UgY2FuIG9ubHkgcmVzcG9uZCB3aXRoIGFycmF5IGJ1ZmZlciB2aWV3cycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmRXaXRoTmV3Vmlldyh0aGlzLl9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciwgdmlldyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3ZpZXcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmlldztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0O1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKHN0cmVhbSwgdW5kZXJseWluZ0J5dGVTb3VyY2UsIGhpZ2hXYXRlck1hcmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbShzdHJlYW0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIGNhbiBvbmx5IGJlIGNvbnN0cnVjdGVkIHdpdGggYSBSZWFkYWJsZVN0cmVhbSBpbnN0YW5jZSBnaXZlbiAnICsgJ2EgYnl0ZSBzb3VyY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIGluc3RhbmNlcyBjYW4gb25seSBiZSBjcmVhdGVkIGJ5IHRoZSBSZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3RvciBnaXZlbiBhIGJ5dGUgJyArICdzb3VyY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0gPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5kZXJseWluZ0J5dGVTb3VyY2UgPSB1bmRlcmx5aW5nQnl0ZVNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wdWxsQWdhaW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wdWxsaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNsZWFyUGVuZGluZ1B1bGxJbnRvcyh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZSA9IHRoaXMuX3F1ZXVlVG90YWxTaXplID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0UXVldWUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xvc2VSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyYXRlZ3lIV00gPSBWYWxpZGF0ZUFuZE5vcm1hbGl6ZUhpZ2hXYXRlck1hcmsoaGlnaFdhdGVyTWFyayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF1dG9BbGxvY2F0ZUNodW5rU2l6ZSA9IHVuZGVybHlpbmdCeXRlU291cmNlLmF1dG9BbGxvY2F0ZUNodW5rU2l6ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvQWxsb2NhdGVDaHVua1NpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihhdXRvQWxsb2NhdGVDaHVua1NpemUpID09PSBmYWxzZSB8fCBhdXRvQWxsb2NhdGVDaHVua1NpemUgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2F1dG9BbGxvY2F0ZUNodW5rU2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXV0b0FsbG9jYXRlQ2h1bmtTaXplID0gYXV0b0FsbG9jYXRlQ2h1bmtTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdQdWxsSW50b3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udHJvbGxlciA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0UmVzdWx0ID0gSW52b2tlT3JOb29wKHVuZGVybHlpbmdCeXRlU291cmNlLCAnc3RhcnQnLCBbdGhpc10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShzdGFydFJlc3VsdCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuX3N0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoY29udHJvbGxlci5fcHVsbGluZyA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoY29udHJvbGxlci5fcHVsbEFnYWluID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDYWxsUHVsbElmTmVlZGVkKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3N0YXRlID09PSAncmVhZGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRXJyb3IoY29udHJvbGxlciwgcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChyZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdjbG9zZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYnl0ZVN0cmVhbUNvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdjbG9zZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Nsb3NlUmVxdWVzdGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgc3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkOyBkbyBub3QgY2xvc2UgaXQgYWdhaW4hJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0uX3N0YXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAhPT0gJ3JlYWRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHN0cmVhbSAoaW4gJyArIHN0YXRlICsgJyBzdGF0ZSkgaXMgbm90IGluIHRoZSByZWFkYWJsZSBzdGF0ZSBhbmQgY2Fubm90IGJlIGNsb3NlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNsb3NlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdlbnF1ZXVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZW5xdWV1ZShjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYnl0ZVN0cmVhbUNvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdlbnF1ZXVlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2xvc2VSZXF1ZXN0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmVhbSBpcyBjbG9zZWQgb3IgZHJhaW5pbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlICE9PSAncmVhZGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgc3RyZWFtIChpbiAnICsgc3RhdGUgKyAnIHN0YXRlKSBpcyBub3QgaW4gdGhlIHJlYWRhYmxlIHN0YXRlIGFuZCBjYW5ub3QgYmUgZW5xdWV1ZWQgdG8nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXlCdWZmZXIuaXNWaWV3KGNodW5rKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignWW91IGNhbiBvbmx5IGVucXVldWUgYXJyYXkgYnVmZmVyIHZpZXdzIHdoZW4gdXNpbmcgYSBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRW5xdWV1ZSh0aGlzLCBjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZXJyb3IoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYnl0ZVN0cmVhbUNvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdlcnJvcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9zdGF0ZSAhPT0gJ3JlYWRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHN0cmVhbSBpcyAnICsgc3RyZWFtLl9zdGF0ZSArICcgYW5kIHNvIGNhbm5vdCBiZSBlcnJvcmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRXJyb3IodGhpcywgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ19fY2FuY2VsU3RlcHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfX2NhbmNlbFN0ZXBzKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3REZXNjcmlwdG9yID0gdGhpcy5fcGVuZGluZ1B1bGxJbnRvc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RGVzY3JpcHRvci5ieXRlc0ZpbGxlZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNldFF1ZXVlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZUludm9rZU9yTm9vcCh0aGlzLl91bmRlcmx5aW5nQnl0ZVNvdXJjZSwgJ2NhbmNlbCcsIFtyZWFzb25dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnX19wdWxsU3RlcHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfX3B1bGxTdGVwcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFJlYWRhYmxlU3RyZWFtSGFzRGVmYXVsdFJlYWRlcihzdHJlYW0pID09PSB0cnVlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcXVldWVUb3RhbFNpemUgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoUmVhZGFibGVTdHJlYW1HZXROdW1SZWFkUmVxdWVzdHMoc3RyZWFtKSA9PT0gMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMuX3F1ZXVlLnNoaWZ0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXVlVG90YWxTaXplIC09IGVudHJ5LmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVySGFuZGxlUXVldWVEcmFpbih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWV3ID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcgPSBuZXcgVWludDhBcnJheShlbnRyeS5idWZmZXIsIGVudHJ5LmJ5dGVPZmZzZXQsIGVudHJ5LmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAodmlld0UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qodmlld0UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmlldywgZmFsc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhdXRvQWxsb2NhdGVDaHVua1NpemUgPSB0aGlzLl9hdXRvQWxsb2NhdGVDaHVua1NpemU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG9BbGxvY2F0ZUNodW5rU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihhdXRvQWxsb2NhdGVDaHVua1NpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoYnVmZmVyRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChidWZmZXJFKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB1bGxJbnRvRGVzY3JpcHRvciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXI6IGJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlT2Zmc2V0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVMZW5ndGg6IGF1dG9BbGxvY2F0ZUNodW5rU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc0ZpbGxlZDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50U2l6ZTogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdG9yOiBVaW50OEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlclR5cGU6ICdkZWZhdWx0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGVuZGluZ1B1bGxJbnRvcy5wdXNoKHB1bGxJbnRvRGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IFJlYWRhYmxlU3RyZWFtQWRkUmVhZFJlcXVlc3Qoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNhbGxQdWxsSWZOZWVkZWQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdieW9iUmVxdWVzdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBieXRlU3RyZWFtQ29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2J5b2JSZXF1ZXN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fYnlvYlJlcXVlc3QgPT09IHVuZGVmaW5lZCAmJiB0aGlzLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdERlc2NyaXB0b3IgPSB0aGlzLl9wZW5kaW5nUHVsbEludG9zWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShmaXJzdERlc2NyaXB0b3IuYnVmZmVyLCBmaXJzdERlc2NyaXB0b3IuYnl0ZU9mZnNldCArIGZpcnN0RGVzY3JpcHRvci5ieXRlc0ZpbGxlZCwgZmlyc3REZXNjcmlwdG9yLmJ5dGVMZW5ndGggLSBmaXJzdERlc2NyaXB0b3IuYnl0ZXNGaWxsZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnlvYlJlcXVlc3QgPSBuZXcgUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCh0aGlzLCB2aWV3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ieW9iUmVxdWVzdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnZGVzaXJlZFNpemUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYnl0ZVN0cmVhbUNvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdkZXNpcmVkU2l6ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSXNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHlwZUlzT2JqZWN0KHgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnX3VuZGVybHlpbmdCeXRlU291cmNlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSXNSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0KHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHlwZUlzT2JqZWN0KHgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNhbGxQdWxsSWZOZWVkZWQoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNob3VsZFB1bGwgPSBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyU2hvdWxkQ2FsbFB1bGwoY29udHJvbGxlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRQdWxsID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9wdWxsaW5nID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fcHVsbEFnYWluID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoY29udHJvbGxlci5fcHVsbEFnYWluID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9wdWxsaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwdWxsUHJvbWlzZSA9IFByb21pc2VJbnZva2VPck5vb3AoY29udHJvbGxlci5fdW5kZXJseWluZ0J5dGVTb3VyY2UsICdwdWxsJywgW2NvbnRyb2xsZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1bGxQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuX3B1bGxpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9wdWxsQWdhaW4gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fcHVsbEFnYWluID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDYWxsUHVsbElmTmVlZGVkKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckVycm9yKGNvbnRyb2xsZXIsIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKHJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNsZWFyUGVuZGluZ1B1bGxJbnRvcyhjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVySW52YWxpZGF0ZUJZT0JSZXF1ZXN0KGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fcGVuZGluZ1B1bGxJbnRvcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNvbW1pdFB1bGxJbnRvRGVzY3JpcHRvcihzdHJlYW0sIHB1bGxJbnRvRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgIT09ICdlcnJvcmVkJywgJ3N0YXRlIG11c3Qgbm90IGJlIGVycm9yZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb25lID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3N0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQgPT09IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsbGVkVmlldyA9IFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDb252ZXJ0UHVsbEludG9EZXNjcmlwdG9yKHB1bGxJbnRvRGVzY3JpcHRvcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwdWxsSW50b0Rlc2NyaXB0b3IucmVhZGVyVHlwZSA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1GdWxmaWxsUmVhZFJlcXVlc3Qoc3RyZWFtLCBmaWxsZWRWaWV3LCBkb25lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHB1bGxJbnRvRGVzY3JpcHRvci5yZWFkZXJUeXBlID09PSAnYnlvYicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRnVsZmlsbFJlYWRJbnRvUmVxdWVzdChzdHJlYW0sIGZpbGxlZFZpZXcsIGRvbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNvbnZlcnRQdWxsSW50b0Rlc2NyaXB0b3IocHVsbEludG9EZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZXNGaWxsZWQgPSBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbWVudFNpemUgPSBwdWxsSW50b0Rlc2NyaXB0b3IuZWxlbWVudFNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoYnl0ZXNGaWxsZWQgPD0gcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGJ5dGVzRmlsbGVkICUgZWxlbWVudFNpemUgPT09IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBwdWxsSW50b0Rlc2NyaXB0b3IuY3RvcihwdWxsSW50b0Rlc2NyaXB0b3IuYnVmZmVyLCBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZU9mZnNldCwgYnl0ZXNGaWxsZWQgLyBlbGVtZW50U2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRW5xdWV1ZUNodW5rVG9RdWV1ZShjb250cm9sbGVyLCBidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuX3F1ZXVlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcjogYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVPZmZzZXQ6IGJ5dGVPZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZUxlbmd0aDogYnl0ZUxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuX3F1ZXVlVG90YWxTaXplICs9IGJ5dGVMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRmlsbFB1bGxJbnRvRGVzY3JpcHRvckZyb21RdWV1ZShjb250cm9sbGVyLCBwdWxsSW50b0Rlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50U2l6ZSA9IHB1bGxJbnRvRGVzY3JpcHRvci5lbGVtZW50U2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50QWxpZ25lZEJ5dGVzID0gcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVzRmlsbGVkIC0gcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVzRmlsbGVkICUgZWxlbWVudFNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4Qnl0ZXNUb0NvcHkgPSBNYXRoLm1pbihjb250cm9sbGVyLl9xdWV1ZVRvdGFsU2l6ZSwgcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVMZW5ndGggLSBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heEJ5dGVzRmlsbGVkID0gcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVzRmlsbGVkICsgbWF4Qnl0ZXNUb0NvcHk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4QWxpZ25lZEJ5dGVzID0gbWF4Qnl0ZXNGaWxsZWQgLSBtYXhCeXRlc0ZpbGxlZCAlIGVsZW1lbnRTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRvdGFsQnl0ZXNUb0NvcHlSZW1haW5pbmcgPSBtYXhCeXRlc1RvQ29weTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkeSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF4QWxpZ25lZEJ5dGVzID4gY3VycmVudEFsaWduZWRCeXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsQnl0ZXNUb0NvcHlSZW1haW5pbmcgPSBtYXhBbGlnbmVkQnl0ZXMgLSBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVldWUgPSBjb250cm9sbGVyLl9xdWV1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRvdGFsQnl0ZXNUb0NvcHlSZW1haW5pbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRPZlF1ZXVlID0gcXVldWVbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGVzVG9Db3B5ID0gTWF0aC5taW4odG90YWxCeXRlc1RvQ29weVJlbWFpbmluZywgaGVhZE9mUXVldWUuYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc3RTdGFydCA9IHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlT2Zmc2V0ICsgcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVzRmlsbGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyQ29weShwdWxsSW50b0Rlc2NyaXB0b3IuYnVmZmVyLCBkZXN0U3RhcnQsIGhlYWRPZlF1ZXVlLmJ1ZmZlciwgaGVhZE9mUXVldWUuYnl0ZU9mZnNldCwgYnl0ZXNUb0NvcHkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRPZlF1ZXVlLmJ5dGVMZW5ndGggPT09IGJ5dGVzVG9Db3B5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZE9mUXVldWUuYnl0ZU9mZnNldCArPSBieXRlc1RvQ29weTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZE9mUXVldWUuYnl0ZUxlbmd0aCAtPSBieXRlc1RvQ29weTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9xdWV1ZVRvdGFsU2l6ZSAtPSBieXRlc1RvQ29weTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRmlsbEhlYWRQdWxsSW50b0Rlc2NyaXB0b3IoY29udHJvbGxlciwgYnl0ZXNUb0NvcHksIHB1bGxJbnRvRGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxCeXRlc1RvQ29weVJlbWFpbmluZyAtPSBieXRlc1RvQ29weTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWR5ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9xdWV1ZVRvdGFsU2l6ZSA9PT0gMCwgJ3F1ZXVlIG11c3QgYmUgZW1wdHknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQocHVsbEludG9EZXNjcmlwdG9yLmJ5dGVzRmlsbGVkID4gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlc0ZpbGxlZCA8IHB1bGxJbnRvRGVzY3JpcHRvci5lbGVtZW50U2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWFkeTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJGaWxsSGVhZFB1bGxJbnRvRGVzY3JpcHRvcihjb250cm9sbGVyLCBzaXplLCBwdWxsSW50b0Rlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aCA9PT0gMCB8fCBjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zWzBdID09PSBwdWxsSW50b0Rlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckludmFsaWRhdGVCWU9CUmVxdWVzdChjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlc0ZpbGxlZCArPSBzaXplO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckhhbmRsZVF1ZXVlRHJhaW4oY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fcXVldWVUb3RhbFNpemUgPT09IDAgJiYgY29udHJvbGxlci5fY2xvc2VSZXF1ZXN0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbUNsb3NlKGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDYWxsUHVsbElmTmVlZGVkKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckludmFsaWRhdGVCWU9CUmVxdWVzdChjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fYnlvYlJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fYnlvYlJlcXVlc3QuX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fYnlvYlJlcXVlc3QuX3ZpZXcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9ieW9iUmVxdWVzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJQcm9jZXNzUHVsbEludG9EZXNjcmlwdG9yc1VzaW5nUXVldWUoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX2Nsb3NlUmVxdWVzdGVkID09PSBmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fcXVldWVUb3RhbFNpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwdWxsSW50b0Rlc2NyaXB0b3IgPSBjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zWzBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJGaWxsUHVsbEludG9EZXNjcmlwdG9yRnJvbVF1ZXVlKGNvbnRyb2xsZXIsIHB1bGxJbnRvRGVzY3JpcHRvcikgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclNoaWZ0UGVuZGluZ1B1bGxJbnRvKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ29tbWl0UHVsbEludG9EZXNjcmlwdG9yKGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbSwgcHVsbEludG9EZXNjcmlwdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUHVsbEludG8oY29udHJvbGxlciwgdmlldykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50U2l6ZSA9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2aWV3LmNvbnN0cnVjdG9yICE9PSBEYXRhVmlldykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTaXplID0gdmlldy5jb25zdHJ1Y3Rvci5CWVRFU19QRVJfRUxFTUVOVDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN0b3IgPSB2aWV3LmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB1bGxJbnRvRGVzY3JpcHRvciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXI6IHZpZXcuYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVPZmZzZXQ6IHZpZXcuYnl0ZU9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlTGVuZ3RoOiB2aWV3LmJ5dGVMZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNGaWxsZWQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFNpemU6IGVsZW1lbnRTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0b3I6IGN0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyVHlwZTogJ2J5b2InXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVsbEludG9EZXNjcmlwdG9yLmJ1ZmZlciA9IFRyYW5zZmVyQXJyYXlCdWZmZXIocHVsbEludG9EZXNjcmlwdG9yLmJ1ZmZlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zLnB1c2gocHVsbEludG9EZXNjcmlwdG9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbUFkZFJlYWRJbnRvUmVxdWVzdChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW1wdHlWaWV3ID0gbmV3IHZpZXcuY29uc3RydWN0b3IocHVsbEludG9EZXNjcmlwdG9yLmJ1ZmZlciwgcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVPZmZzZXQsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoQ3JlYXRlSXRlclJlc3VsdE9iamVjdChlbXB0eVZpZXcsIHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX3F1ZXVlVG90YWxTaXplID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRmlsbFB1bGxJbnRvRGVzY3JpcHRvckZyb21RdWV1ZShjb250cm9sbGVyLCBwdWxsSW50b0Rlc2NyaXB0b3IpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxsZWRWaWV3ID0gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNvbnZlcnRQdWxsSW50b0Rlc2NyaXB0b3IocHVsbEludG9EZXNjcmlwdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckhhbmRsZVF1ZXVlRHJhaW4oY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoQ3JlYXRlSXRlclJlc3VsdE9iamVjdChmaWxsZWRWaWV3LCBmYWxzZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9jbG9zZVJlcXVlc3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IG5ldyBUeXBlRXJyb3IoJ0luc3VmZmljaWVudCBieXRlcyB0byBmaWxsIGVsZW1lbnRzIGluIHRoZSBnaXZlbiBidWZmZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckVycm9yKGNvbnRyb2xsZXIsIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwdWxsSW50b0Rlc2NyaXB0b3IuYnVmZmVyID0gVHJhbnNmZXJBcnJheUJ1ZmZlcihwdWxsSW50b0Rlc2NyaXB0b3IuYnVmZmVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fcGVuZGluZ1B1bGxJbnRvcy5wdXNoKHB1bGxJbnRvRGVzY3JpcHRvcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlID0gUmVhZGFibGVTdHJlYW1BZGRSZWFkSW50b1JlcXVlc3Qoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDYWxsUHVsbElmTmVlZGVkKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUmVzcG9uZEluQ2xvc2VkU3RhdGUoY29udHJvbGxlciwgZmlyc3REZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdERlc2NyaXB0b3IuYnVmZmVyID0gVHJhbnNmZXJBcnJheUJ1ZmZlcihmaXJzdERlc2NyaXB0b3IuYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChmaXJzdERlc2NyaXB0b3IuYnl0ZXNGaWxsZWQgPT09IDAsICdieXRlc0ZpbGxlZCBtdXN0IGJlIDAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSZWFkYWJsZVN0cmVhbUhhc0JZT0JSZWFkZXIoc3RyZWFtKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChSZWFkYWJsZVN0cmVhbUdldE51bVJlYWRJbnRvUmVxdWVzdHMoc3RyZWFtKSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB1bGxJbnRvRGVzY3JpcHRvciA9IFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJTaGlmdFBlbmRpbmdQdWxsSW50byhjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNvbW1pdFB1bGxJbnRvRGVzY3JpcHRvcihzdHJlYW0sIHB1bGxJbnRvRGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmRJblJlYWRhYmxlU3RhdGUoY29udHJvbGxlciwgYnl0ZXNXcml0dGVuLCBwdWxsSW50b0Rlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQgKyBieXRlc1dyaXR0ZW4gPiBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdieXRlc1dyaXR0ZW4gb3V0IG9mIHJhbmdlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJGaWxsSGVhZFB1bGxJbnRvRGVzY3JpcHRvcihjb250cm9sbGVyLCBieXRlc1dyaXR0ZW4sIHB1bGxJbnRvRGVzY3JpcHRvcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQgPCBwdWxsSW50b0Rlc2NyaXB0b3IuZWxlbWVudFNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJTaGlmdFBlbmRpbmdQdWxsSW50byhjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZW1haW5kZXJTaXplID0gcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVzRmlsbGVkICUgcHVsbEludG9EZXNjcmlwdG9yLmVsZW1lbnRTaXplO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVtYWluZGVyU2l6ZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVPZmZzZXQgKyBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbWFpbmRlciA9IHB1bGxJbnRvRGVzY3JpcHRvci5idWZmZXIuc2xpY2UoZW5kIC0gcmVtYWluZGVyU2l6ZSwgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRW5xdWV1ZUNodW5rVG9RdWV1ZShjb250cm9sbGVyLCByZW1haW5kZXIsIDAsIHJlbWFpbmRlci5ieXRlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcHVsbEludG9EZXNjcmlwdG9yLmJ1ZmZlciA9IFRyYW5zZmVyQXJyYXlCdWZmZXIocHVsbEludG9EZXNjcmlwdG9yLmJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQgLT0gcmVtYWluZGVyU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDb21taXRQdWxsSW50b0Rlc2NyaXB0b3IoY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtLCBwdWxsSW50b0Rlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclByb2Nlc3NQdWxsSW50b0Rlc2NyaXB0b3JzVXNpbmdRdWV1ZShjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJSZXNwb25kSW50ZXJuYWwoY29udHJvbGxlciwgYnl0ZXNXcml0dGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3REZXNjcmlwdG9yID0gY29udHJvbGxlci5fcGVuZGluZ1B1bGxJbnRvc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3N0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChieXRlc1dyaXR0ZW4gIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYnl0ZXNXcml0dGVuIG11c3QgYmUgMCB3aGVuIGNhbGxpbmcgcmVzcG9uZCgpIG9uIGEgY2xvc2VkIHN0cmVhbScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJSZXNwb25kSW5DbG9zZWRTdGF0ZShjb250cm9sbGVyLCBmaXJzdERlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmRJblJlYWRhYmxlU3RhdGUoY29udHJvbGxlciwgYnl0ZXNXcml0dGVuLCBmaXJzdERlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclNoaWZ0UGVuZGluZ1B1bGxJbnRvKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gY29udHJvbGxlci5fcGVuZGluZ1B1bGxJbnRvcy5zaGlmdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVySW52YWxpZGF0ZUJZT0JSZXF1ZXN0KGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyU2hvdWxkQ2FsbFB1bGwoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgIT09ICdyZWFkYWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9jbG9zZVJlcXVlc3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX3N0YXJ0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVhZGFibGVTdHJlYW1IYXNEZWZhdWx0UmVhZGVyKHN0cmVhbSkgPT09IHRydWUgJiYgUmVhZGFibGVTdHJlYW1HZXROdW1SZWFkUmVxdWVzdHMoc3RyZWFtKSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWRhYmxlU3RyZWFtSGFzQllPQlJlYWRlcihzdHJlYW0pID09PSB0cnVlICYmIFJlYWRhYmxlU3RyZWFtR2V0TnVtUmVhZEludG9SZXF1ZXN0cyhzdHJlYW0pID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckdldERlc2lyZWRTaXplKGNvbnRyb2xsZXIpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2xvc2UoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9jbG9zZVJlcXVlc3RlZCA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fcXVldWVUb3RhbFNpemUgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fY2xvc2VSZXF1ZXN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX3BlbmRpbmdQdWxsSW50b3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdFBlbmRpbmdQdWxsSW50byA9IGNvbnRyb2xsZXIuX3BlbmRpbmdQdWxsSW50b3NbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RQZW5kaW5nUHVsbEludG8uYnl0ZXNGaWxsZWQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gbmV3IFR5cGVFcnJvcignSW5zdWZmaWNpZW50IGJ5dGVzIHRvIGZpbGwgZWxlbWVudHMgaW4gdGhlIGdpdmVuIGJ1ZmZlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRXJyb3IoY29udHJvbGxlciwgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbUNsb3NlKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRW5xdWV1ZShjb250cm9sbGVyLCBjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9jbG9zZVJlcXVlc3RlZCA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGNodW5rLmJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBieXRlT2Zmc2V0ID0gY2h1bmsuYnl0ZU9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBieXRlTGVuZ3RoID0gY2h1bmsuYnl0ZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc2ZlcnJlZEJ1ZmZlciA9IFRyYW5zZmVyQXJyYXlCdWZmZXIoYnVmZmVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWRhYmxlU3RyZWFtSGFzRGVmYXVsdFJlYWRlcihzdHJlYW0pID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWRhYmxlU3RyZWFtR2V0TnVtUmVhZFJlcXVlc3RzKHN0cmVhbSkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckVucXVldWVDaHVua1RvUXVldWUoY29udHJvbGxlciwgdHJhbnNmZXJyZWRCdWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9xdWV1ZS5sZW5ndGggPT09IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmZXJyZWRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodHJhbnNmZXJyZWRCdWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbUZ1bGZpbGxSZWFkUmVxdWVzdChzdHJlYW0sIHRyYW5zZmVycmVkVmlldywgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoUmVhZGFibGVTdHJlYW1IYXNCWU9CUmVhZGVyKHN0cmVhbSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRW5xdWV1ZUNodW5rVG9RdWV1ZShjb250cm9sbGVyLCB0cmFuc2ZlcnJlZEJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclByb2Nlc3NQdWxsSW50b0Rlc2NyaXB0b3JzVXNpbmdRdWV1ZShjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KElzUmVhZGFibGVTdHJlYW1Mb2NrZWQoc3RyZWFtKSA9PT0gZmFsc2UsICdzdHJlYW0gbXVzdCBub3QgYmUgbG9ja2VkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckVucXVldWVDaHVua1RvUXVldWUoY29udHJvbGxlciwgdHJhbnNmZXJyZWRCdWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckVycm9yKGNvbnRyb2xsZXIsIGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2xlYXJQZW5kaW5nUHVsbEludG9zKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXRRdWV1ZShjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRXJyb3Ioc3RyZWFtLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZShjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RyZWFtLl9zdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnZXJyb3JlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udHJvbGxlci5fc3RyYXRlZ3lIV00gLSBjb250cm9sbGVyLl9xdWV1ZVRvdGFsU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJSZXNwb25kKGNvbnRyb2xsZXIsIGJ5dGVzV3JpdHRlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNXcml0dGVuID0gTnVtYmVyKGJ5dGVzV3JpdHRlbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc0Zpbml0ZU5vbk5lZ2F0aXZlTnVtYmVyKGJ5dGVzV3JpdHRlbikgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2J5dGVzV3JpdHRlbiBtdXN0IGJlIGEgZmluaXRlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aCA+IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmRJbnRlcm5hbChjb250cm9sbGVyLCBieXRlc1dyaXR0ZW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmRXaXRoTmV3Vmlldyhjb250cm9sbGVyLCB2aWV3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoY29udHJvbGxlci5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGggPiAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdERlc2NyaXB0b3IgPSBjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zWzBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3REZXNjcmlwdG9yLmJ5dGVPZmZzZXQgKyBmaXJzdERlc2NyaXB0b3IuYnl0ZXNGaWxsZWQgIT09IHZpZXcuYnl0ZU9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgcmVnaW9uIHNwZWNpZmllZCBieSB2aWV3IGRvZXMgbm90IG1hdGNoIGJ5b2JSZXF1ZXN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdERlc2NyaXB0b3IuYnl0ZUxlbmd0aCAhPT0gdmlldy5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSBidWZmZXIgb2YgdmlldyBoYXMgZGlmZmVyZW50IGNhcGFjaXR5IHRoYW4gYnlvYlJlcXVlc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3REZXNjcmlwdG9yLmJ1ZmZlciA9IHZpZXcuYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmRJbnRlcm5hbChjb250cm9sbGVyLCB2aWV3LmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc3RyZWFtQnJhbmRDaGVja0V4Y2VwdGlvbihuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignUmVhZGFibGVTdHJlYW0ucHJvdG90eXBlLicgKyBuYW1lICsgJyBjYW4gb25seSBiZSB1c2VkIG9uIGEgUmVhZGFibGVTdHJlYW0nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWRlckxvY2tFeGNlcHRpb24obmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCAnICsgbmFtZSArICcgYSBzdHJlYW0gdXNpbmcgYSByZWxlYXNlZCByZWFkZXInKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRSZWFkZXJCcmFuZENoZWNrRXhjZXB0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIucHJvdG90eXBlLicgKyBuYW1lICsgJyBjYW4gb25seSBiZSB1c2VkIG9uIGEgUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0UmVhZGVyQ2xvc2VkUHJvbWlzZUluaXRpYWxpemUocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgPSByZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZUFzUmVqZWN0ZWQocmVhZGVyLCByZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZSA9IFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0UmVhZGVyQ2xvc2VkUHJvbWlzZUluaXRpYWxpemVBc1Jlc29sdmVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0UmVhZGVyQ2xvc2VkUHJvbWlzZVJlamVjdChyZWFkZXIsIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QocmVhc29uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFJlYWRlckNsb3NlZFByb21pc2VSZXNldFRvUmVqZWN0ZWQocmVhZGVyLCByZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZWFkZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9PT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZWFkZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ID09PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlID0gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlUmVzb2x2ZShyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZWFkZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZWFkZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ICE9PSB1bmRlZmluZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSh1bmRlZmluZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBieW9iUmVhZGVyQnJhbmRDaGVja0V4Y2VwdGlvbihuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyLnByb3RvdHlwZS4nICsgbmFtZSArICcgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlcicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdENvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZS4nICsgbmFtZSArICcgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXInKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJ5b2JSZXF1ZXN0QnJhbmRDaGVja0V4Y2VwdGlvbihuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdC5wcm90b3R5cGUuJyArIG5hbWUgKyAnIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBieXRlU3RyZWFtQ29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24obmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIucHJvdG90eXBlLicgKyBuYW1lICsgJyBjYW4gb25seSBiZSB1c2VkIG9uIGEgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaWZJc09iamVjdEFuZEhhc0FQcm9taXNlSXNIYW5kbGVkSW50ZXJuYWxTbG90U2V0UHJvbWlzZUlzSGFuZGxlZFRvVHJ1ZShwcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UucHJvdG90eXBlLnRoZW4uY2FsbChwcm9taXNlLCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG4gICAgICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc2Zvcm1TdHJlYW0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciByZWFkYWJsZVN0cmVhbSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHdyaXRhYmxlU3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyKTtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlRyYW5zZm9ybVN0cmVhbSA9IHRyYW5zZm9ybVN0cmVhbS5UcmFuc2Zvcm1TdHJlYW07XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuUmVhZGFibGVTdHJlYW0gPSByZWFkYWJsZVN0cmVhbS5SZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5Jc1JlYWRhYmxlU3RyZWFtRGlzdHVyYmVkID0gcmVhZGFibGVTdHJlYW0uSXNSZWFkYWJsZVN0cmVhbURpc3R1cmJlZDtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xvc2UgPSByZWFkYWJsZVN0cmVhbS5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xvc2U7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVucXVldWUgPSByZWFkYWJsZVN0cmVhbS5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZTtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IgPSByZWFkYWJsZVN0cmVhbS5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplID0gcmVhZGFibGVTdHJlYW0uUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplO1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLkFjcXVpcmVXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIgPSB3cml0YWJsZVN0cmVhbS5BY3F1aXJlV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLklzV3JpdGFibGVTdHJlYW0gPSB3cml0YWJsZVN0cmVhbS5Jc1dyaXRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLklzV3JpdGFibGVTdHJlYW1Mb2NrZWQgPSB3cml0YWJsZVN0cmVhbS5Jc1dyaXRhYmxlU3RyZWFtTG9ja2VkO1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLldyaXRhYmxlU3RyZWFtID0gd3JpdGFibGVTdHJlYW0uV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuV3JpdGFibGVTdHJlYW1BYm9ydCA9IHdyaXRhYmxlU3RyZWFtLldyaXRhYmxlU3RyZWFtQWJvcnQ7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yID0gd3JpdGFibGVTdHJlYW0uV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yO1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckNsb3NlV2l0aEVycm9yUHJvcGFnYXRpb24gPSB3cml0YWJsZVN0cmVhbS5Xcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJDbG9zZVdpdGhFcnJvclByb3BhZ2F0aW9uO1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlclJlbGVhc2UgPSB3cml0YWJsZVN0cmVhbS5Xcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJSZWxlYXNlO1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcldyaXRlID0gd3JpdGFibGVTdHJlYW0uV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyV3JpdGU7XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuICAgICAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgX3JlcXVpcmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0ID0gX3JlcXVpcmUuYXNzZXJ0O1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBfcmVxdWlyZTIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgSW52b2tlT3JOb29wID0gX3JlcXVpcmUyLkludm9rZU9yTm9vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2VJbnZva2VPclBlcmZvcm1GYWxsYmFjayA9IF9yZXF1aXJlMi5Qcm9taXNlSW52b2tlT3JQZXJmb3JtRmFsbGJhY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlSW52b2tlT3JOb29wID0gX3JlcXVpcmUyLlByb21pc2VJbnZva2VPck5vb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlSXNPYmplY3QgPSBfcmVxdWlyZTIudHlwZUlzT2JqZWN0O1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBfcmVxdWlyZTMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW0gPSBfcmVxdWlyZTMuUmVhZGFibGVTdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xvc2UgPSBfcmVxdWlyZTMuUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsb3NlLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVucXVldWUgPSBfcmVxdWlyZTMuUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVucXVldWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IgPSBfcmVxdWlyZTMuUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplID0gX3JlcXVpcmUzLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgX3JlcXVpcmU0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtID0gX3JlcXVpcmU0LldyaXRhYmxlU3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yID0gX3JlcXVpcmU0LldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUcmFuc2Zvcm1TdHJlYW1DbG9zZVJlYWRhYmxlKHRyYW5zZm9ybVN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVN0cmVhbS5fZXJyb3JlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RyYW5zZm9ybVN0cmVhbSBpcyBhbHJlYWR5IGVycm9yZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVN0cmVhbS5fcmVhZGFibGVDbG9zZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZSBzaWRlIGlzIGFscmVhZHkgY2xvc2VkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbUNsb3NlUmVhZGFibGVJbnRlcm5hbCh0cmFuc2Zvcm1TdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVHJhbnNmb3JtU3RyZWFtRW5xdWV1ZVRvUmVhZGFibGUodHJhbnNmb3JtU3RyZWFtLCBjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVN0cmVhbS5fZXJyb3JlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RyYW5zZm9ybVN0cmVhbSBpcyBhbHJlYWR5IGVycm9yZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVN0cmVhbS5fcmVhZGFibGVDbG9zZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZSBzaWRlIGlzIGFscmVhZHkgY2xvc2VkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250cm9sbGVyID0gdHJhbnNmb3JtU3RyZWFtLl9yZWFkYWJsZUNvbnRyb2xsZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVucXVldWUoY29udHJvbGxlciwgY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fcmVhZGFibGVDbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbUVycm9ySWZOZWVkZWQodHJhbnNmb3JtU3RyZWFtLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyB0cmFuc2Zvcm1TdHJlYW0uX3N0b3JlZEVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzaXJlZFNpemUgPSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemUoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF5YmVCYWNrcHJlc3N1cmUgPSBkZXNpcmVkU2l6ZSA8PSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF5YmVCYWNrcHJlc3N1cmUgPT09IHRydWUgJiYgdHJhbnNmb3JtU3RyZWFtLl9iYWNrcHJlc3N1cmUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtU2V0QmFja3ByZXNzdXJlKHRyYW5zZm9ybVN0cmVhbSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUcmFuc2Zvcm1TdHJlYW1FcnJvcih0cmFuc2Zvcm1TdHJlYW0sIGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1TdHJlYW0uX2Vycm9yZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUcmFuc2Zvcm1TdHJlYW0gaXMgYWxyZWFkeSBlcnJvcmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbUVycm9ySW50ZXJuYWwodHJhbnNmb3JtU3RyZWFtLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbUNsb3NlUmVhZGFibGVJbnRlcm5hbCh0cmFuc2Zvcm1TdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0cmFuc2Zvcm1TdHJlYW0uX2Vycm9yZWQgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0cmFuc2Zvcm1TdHJlYW0uX3JlYWRhYmxlQ2xvc2VkID09PSBmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsb3NlKHRyYW5zZm9ybVN0cmVhbS5fcmVhZGFibGVDb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uX3JlYWRhYmxlQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbUVycm9ySWZOZWVkZWQodHJhbnNmb3JtU3RyZWFtLCBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyZWFtLl9lcnJvcmVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbUVycm9ySW50ZXJuYWwodHJhbnNmb3JtU3RyZWFtLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbUVycm9ySW50ZXJuYWwodHJhbnNmb3JtU3RyZWFtLCBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodHJhbnNmb3JtU3RyZWFtLl9lcnJvcmVkID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uX2Vycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl9zdG9yZWRFcnJvciA9IGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1TdHJlYW0uX3dyaXRhYmxlRG9uZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IodHJhbnNmb3JtU3RyZWFtLl93cml0YWJsZUNvbnRyb2xsZXIsIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyZWFtLl9yZWFkYWJsZUNsb3NlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IodHJhbnNmb3JtU3RyZWFtLl9yZWFkYWJsZUNvbnRyb2xsZXIsIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVHJhbnNmb3JtU3RyZWFtUmVhZGFibGVSZWFkeVByb21pc2UodHJhbnNmb3JtU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodHJhbnNmb3JtU3RyZWFtLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlICE9PSB1bmRlZmluZWQsICdfYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSBzaG91bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZSA9PT0gdHJ1ZSwgJ19iYWNrcHJlc3N1cmUgc2hvdWxkIGhhdmUgYmVlbiBpbml0aWFsaXplZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbVNldEJhY2twcmVzc3VyZSh0cmFuc2Zvcm1TdHJlYW0sIGJhY2twcmVzc3VyZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlICE9PSBiYWNrcHJlc3N1cmUsICdUcmFuc2Zvcm1TdHJlYW1TZXRCYWNrcHJlc3N1cmUoKSBzaG91bGQgYmUgY2FsbGVkIG9ubHkgd2hlbiBiYWNrcHJlc3N1cmUgaXMgY2hhbmdlZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyZWFtLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2VfcmVzb2x2ZShiYWNrcHJlc3N1cmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZV9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2UudGhlbihmdW5jdGlvbiAocmVzb2x1dGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZXNvbHV0aW9uICE9PSBiYWNrcHJlc3N1cmUsICdfYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSBzaG91bGQgYmUgZnVsZmlsbGVkIG9ubHkgd2hlbiBiYWNrcHJlc3N1cmUgaXMgY2hhbmdlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlID0gYmFja3ByZXNzdXJlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVHJhbnNmb3JtU3RyZWFtRGVmYXVsdFRyYW5zZm9ybShjaHVuaywgdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmVhbSA9IHRyYW5zZm9ybVN0cmVhbUNvbnRyb2xsZXIuX2NvbnRyb2xsZWRUcmFuc2Zvcm1TdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1TdHJlYW1FbnF1ZXVlVG9SZWFkYWJsZSh0cmFuc2Zvcm1TdHJlYW0sIGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbVRyYW5zZm9ybSh0cmFuc2Zvcm1TdHJlYW0sIGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodHJhbnNmb3JtU3RyZWFtLl9lcnJvcmVkID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodHJhbnNmb3JtU3RyZWFtLl90cmFuc2Zvcm1pbmcgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl90cmFuc2Zvcm1pbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybWVyID0gdHJhbnNmb3JtU3RyZWFtLl90cmFuc2Zvcm1lcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250cm9sbGVyID0gdHJhbnNmb3JtU3RyZWFtLl90cmFuc2Zvcm1TdHJlYW1Db250cm9sbGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVByb21pc2UgPSBQcm9taXNlSW52b2tlT3JQZXJmb3JtRmFsbGJhY2sodHJhbnNmb3JtZXIsICd0cmFuc2Zvcm0nLCBbY2h1bmssIGNvbnRyb2xsZXJdLCBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0VHJhbnNmb3JtLCBbY2h1bmssIGNvbnRyb2xsZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1Qcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fdHJhbnNmb3JtaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybVN0cmVhbVJlYWRhYmxlUmVhZHlQcm9taXNlKHRyYW5zZm9ybVN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbUVycm9ySWZOZWVkZWQodHJhbnNmb3JtU3RyZWFtLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElzVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0eXBlSXNPYmplY3QoeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdfY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElzVHJhbnNmb3JtU3RyZWFtKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHlwZUlzT2JqZWN0KHgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnX3RyYW5zZm9ybVN0cmVhbUNvbnRyb2xsZXInKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgVHJhbnNmb3JtU3RyZWFtU2luayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbVNpbmsodHJhbnNmb3JtU3RyZWFtLCBzdGFydFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVHJhbnNmb3JtU3RyZWFtU2luayk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2Zvcm1TdHJlYW0gPSB0cmFuc2Zvcm1TdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRQcm9taXNlID0gc3RhcnRQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoVHJhbnNmb3JtU3RyZWFtU2luaywgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdzdGFydCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN0YXJ0KGMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmVhbSA9IHRoaXMuX3RyYW5zZm9ybVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl93cml0YWJsZUNvbnRyb2xsZXIgPSBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybVN0cmVhbVJlYWRhYmxlUmVhZHlQcm9taXNlKHRyYW5zZm9ybVN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICd3cml0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHdyaXRlKGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc2Zvcm1TdHJlYW0gPSB0aGlzLl90cmFuc2Zvcm1TdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1TdHJlYW1UcmFuc2Zvcm0odHJhbnNmb3JtU3RyZWFtLCBjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Fib3J0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWJvcnQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc2Zvcm1TdHJlYW0gPSB0aGlzLl90cmFuc2Zvcm1TdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fd3JpdGFibGVEb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtRXJyb3JJbnRlcm5hbCh0cmFuc2Zvcm1TdHJlYW0sIG5ldyBUeXBlRXJyb3IoJ1dyaXRhYmxlIHNpZGUgYWJvcnRlZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnY2xvc2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmVhbSA9IHRoaXMuX3RyYW5zZm9ybVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHRyYW5zZm9ybVN0cmVhbS5fdHJhbnNmb3JtaW5nID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fd3JpdGFibGVEb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZsdXNoUHJvbWlzZSA9IFByb21pc2VJbnZva2VPck5vb3AodHJhbnNmb3JtU3RyZWFtLl90cmFuc2Zvcm1lciwgJ2ZsdXNoJywgW3RyYW5zZm9ybVN0cmVhbS5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmx1c2hQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVN0cmVhbS5fZXJyb3JlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh0cmFuc2Zvcm1TdHJlYW0uX3N0b3JlZEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVN0cmVhbS5fcmVhZGFibGVDbG9zZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtQ2xvc2VSZWFkYWJsZUludGVybmFsKHRyYW5zZm9ybVN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbUVycm9ySWZOZWVkZWQodHJhbnNmb3JtU3RyZWFtLCByKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh0cmFuc2Zvcm1TdHJlYW0uX3N0b3JlZEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJhbnNmb3JtU3RyZWFtU2luaztcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBUcmFuc2Zvcm1TdHJlYW1Tb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUcmFuc2Zvcm1TdHJlYW1Tb3VyY2UodHJhbnNmb3JtU3RyZWFtLCBzdGFydFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVHJhbnNmb3JtU3RyZWFtU291cmNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zZm9ybVN0cmVhbSA9IHRyYW5zZm9ybVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydFByb21pc2UgPSBzdGFydFByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhUcmFuc2Zvcm1TdHJlYW1Tb3VyY2UsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzdGFydChjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc2Zvcm1TdHJlYW0gPSB0aGlzLl90cmFuc2Zvcm1TdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fcmVhZGFibGVDb250cm9sbGVyID0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0UHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2UgIT09IHVuZGVmaW5lZCwgJ19iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlIHNob3VsZCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodHJhbnNmb3JtU3RyZWFtLl9iYWNrcHJlc3N1cmUgPT09IGZhbHNlLCAnX2JhY2twcmVzc3VyZSBzaG91bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtU3RyZWFtLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAncHVsbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHB1bGwoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc2Zvcm1TdHJlYW0gPSB0aGlzLl90cmFuc2Zvcm1TdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZSA9PT0gdHJ1ZSwgJ3B1bGwoKSBzaG91bGQgYmUgbmV2ZXIgY2FsbGVkIHdoaWxlIF9iYWNrcHJlc3N1cmUgaXMgZmFsc2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSAhPT0gdW5kZWZpbmVkLCAnX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2Ugc2hvdWxkIGhhdmUgYmVlbiBpbml0aWFsaXplZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1TdHJlYW1TZXRCYWNrcHJlc3N1cmUodHJhbnNmb3JtU3RyZWFtLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmVhbSA9IHRoaXMuX3RyYW5zZm9ybVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl9yZWFkYWJsZUNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbUVycm9ySW50ZXJuYWwodHJhbnNmb3JtU3RyZWFtLCBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZSBzaWRlIGNhbmNlbGVkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybVN0cmVhbVNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRyYW5zZm9ybVN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNUcmFuc2Zvcm1TdHJlYW0odHJhbnNmb3JtU3RyZWFtKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgY2FuIG9ubHkgYmUgJyArICdjb25zdHJ1Y3RlZCB3aXRoIGEgVHJhbnNmb3JtU3RyZWFtIGluc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVN0cmVhbS5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGluc3RhbmNlcyBjYW4gJyArICdvbmx5IGJlIGNyZWF0ZWQgYnkgdGhlIFRyYW5zZm9ybVN0cmVhbSBjb25zdHJ1Y3RvcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRyb2xsZWRUcmFuc2Zvcm1TdHJlYW0gPSB0cmFuc2Zvcm1TdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdlbnF1ZXVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZW5xdWV1ZShjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGRlZmF1bHRDb250cm9sbGVyQnJhbmRDaGVja0V4Y2VwdGlvbignZW5xdWV1ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtRW5xdWV1ZVRvUmVhZGFibGUodGhpcy5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbSwgY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdjbG9zZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGRlZmF1bHRDb250cm9sbGVyQnJhbmRDaGVja0V4Y2VwdGlvbignY2xvc2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbUNsb3NlUmVhZGFibGUodGhpcy5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZXJyb3IocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1RyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZGVmYXVsdENvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdlcnJvcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtRXJyb3IodGhpcy5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbSwgcmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnZGVzaXJlZFNpemUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGRlZmF1bHRDb250cm9sbGVyQnJhbmRDaGVja0V4Y2VwdGlvbignZGVzaXJlZFNpemUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc2Zvcm1TdHJlYW0gPSB0aGlzLl9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGFibGVDb250cm9sbGVyID0gdHJhbnNmb3JtU3RyZWFtLl9yZWFkYWJsZUNvbnRyb2xsZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemUocmVhZGFibGVDb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcjtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBUcmFuc2Zvcm1TdHJlYW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUcmFuc2Zvcm1TdHJlYW0oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybWVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUcmFuc2Zvcm1TdHJlYW0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNmb3JtZXIgPSB0cmFuc2Zvcm1lcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGFibGVTdHJhdGVneSA9IHRyYW5zZm9ybWVyLnJlYWRhYmxlU3RyYXRlZ3ksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRhYmxlU3RyYXRlZ3kgPSB0cmFuc2Zvcm1lci53cml0YWJsZVN0cmF0ZWd5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zZm9ybWluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9yZWRFcnJvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl93cml0YWJsZUNvbnRyb2xsZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGVDb250cm9sbGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zZm9ybVN0cmVhbUNvbnRyb2xsZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd3JpdGFibGVEb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGVDbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9iYWNrcHJlc3N1cmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlX3Jlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRQcm9taXNlX3Jlc29sdmUgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0UHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UHJvbWlzZV9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gbmV3IFRyYW5zZm9ybVN0cmVhbVNvdXJjZSh0aGlzLCBzdGFydFByb21pc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlID0gbmV3IFJlYWRhYmxlU3RyZWFtKHNvdXJjZSwgcmVhZGFibGVTdHJhdGVneSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpbmsgPSBuZXcgVHJhbnNmb3JtU3RyZWFtU2luayh0aGlzLCBzdGFydFByb21pc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dyaXRhYmxlID0gbmV3IFdyaXRhYmxlU3RyZWFtKHNpbmssIHdyaXRhYmxlU3RyYXRlZ3kpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0aGlzLl93cml0YWJsZUNvbnRyb2xsZXIgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHRoaXMuX3JlYWRhYmxlQ29udHJvbGxlciAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzaXJlZFNpemUgPSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemUodGhpcy5fcmVhZGFibGVDb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1TdHJlYW1TZXRCYWNrcHJlc3N1cmUodGhpcywgZGVzaXJlZFNpemUgPD0gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmVhbSA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0UmVzdWx0ID0gSW52b2tlT3JOb29wKHRyYW5zZm9ybWVyLCAnc3RhcnQnLCBbdHJhbnNmb3JtU3RyZWFtLl90cmFuc2Zvcm1TdHJlYW1Db250cm9sbGVyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQcm9taXNlX3Jlc29sdmUoc3RhcnRSZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyZWFtLl9lcnJvcmVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl9lcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fc3RvcmVkRXJyb3IgPSBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhUcmFuc2Zvcm1TdHJlYW0sIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAncmVhZGFibGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNUcmFuc2Zvcm1TdHJlYW0odGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uKCdyZWFkYWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICd3cml0YWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1RyYW5zZm9ybVN0cmVhbSh0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHN0cmVhbUJyYW5kQ2hlY2tFeGNlcHRpb24oJ3dyaXRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJhbnNmb3JtU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1TdHJlYW06IFRyYW5zZm9ybVN0cmVhbVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRDb250cm9sbGVyQnJhbmRDaGVja0V4Y2VwdGlvbihuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIucHJvdG90eXBlLicgKyBuYW1lICsgJyBjYW4gb25seSBiZSB1c2VkIG9uIGEgVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXInKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHN0cmVhbUJyYW5kQ2hlY2tFeGNlcHRpb24obmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ1RyYW5zZm9ybVN0cmVhbS5wcm90b3R5cGUuJyArIG5hbWUgKyAnIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBUcmFuc2Zvcm1TdHJlYW0nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDUpO1xuICAgICAgICAgICAgICAgIH1dKSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE0NCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc1VSTFN1cHBvcnRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIFVSTCA9PT0gJ2Z1bmN0aW9uJyAmJiBfdHlwZW9mKFVSTC5wcm90b3R5cGUpID09PSAnb2JqZWN0JyAmJiAnb3JpZ2luJyBpbiBVUkwucHJvdG90eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHUgPSBuZXcgVVJMKCdiJywgJ2h0dHA6Ly9hJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdS5wYXRobmFtZSA9ICdjJTIwZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNVUkxTdXBwb3J0ZWQgPSB1LmhyZWYgPT09ICdodHRwOi8vYS9jJTIwZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7fVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1VSTFN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5VUkwgPSBVUkw7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgUG9seWZpbGxVUkwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0NSkuVVJMO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgT3JpZ2luYWxVUkwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMpLlVSTDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9yaWdpbmFsVVJMKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9seWZpbGxVUkwuY3JlYXRlT2JqZWN0VVJMID0gZnVuY3Rpb24gKGJsb2IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9yaWdpbmFsVVJMLmNyZWF0ZU9iamVjdFVSTC5hcHBseShPcmlnaW5hbFVSTCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9seWZpbGxVUkwucmV2b2tlT2JqZWN0VVJMID0gZnVuY3Rpb24gKHVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmlnaW5hbFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlVSTCA9IFBvbHlmaWxsVVJMO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNDUgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICAoZnVuY3Rpb24gVVJMQ29uc3RydWN0b3JDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICAndXNlIHN0cmljdCc7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGF0aXZlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVbJ2Z0cCddID0gMjE7XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlWydmaWxlJ10gPSAwO1xuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVsnZ29waGVyJ10gPSA3MDtcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVbJ2h0dHAnXSA9IDgwO1xuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVsnaHR0cHMnXSA9IDQ0MztcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVbJ3dzJ10gPSA4MDtcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVbJ3dzcyddID0gNDQzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVsYXRpdmVQYXRoRG90TWFwcGluZyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aERvdE1hcHBpbmdbJyUyZSddID0gJy4nO1xuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGhEb3RNYXBwaW5nWycuJTJlJ10gPSAnLi4nO1xuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGhEb3RNYXBwaW5nWyclMmUuJ10gPSAnLi4nO1xuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGhEb3RNYXBwaW5nWyclMmUlMmUnXSA9ICcuLic7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNSZWxhdGl2ZVNjaGVtZShzY2hlbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWxhdGl2ZVtzY2hlbWVdICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBpbnZhbGlkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXIuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzSW52YWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJRE5BVG9BU0NJSShoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwZXJjZW50RXNjYXBlKGMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bmljb2RlID0gYy5jaGFyQ29kZUF0KDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZSA+IDB4MjAgJiYgdW5pY29kZSA8IDB4N0YgJiYgWzB4MjIsIDB4MjMsIDB4M0MsIDB4M0UsIDB4M0YsIDB4NjBdLmluZGV4T2YodW5pY29kZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwZXJjZW50RXNjYXBlUXVlcnkoYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuaWNvZGUgPSBjLmNoYXJDb2RlQXQoMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlID4gMHgyMCAmJiB1bmljb2RlIDwgMHg3RiAmJiBbMHgyMiwgMHgyMywgMHgzQywgMHgzRSwgMHg2MF0uaW5kZXhPZih1bmljb2RlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChjKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBFT0YsXG4gICAgICAgICAgICAgICAgICAgICAgICBBTFBIQSA9IC9bYS16QS1aXS8sXG4gICAgICAgICAgICAgICAgICAgICAgICBBTFBIQU5VTUVSSUMgPSAvW2EtekEtWjAtOVxcK1xcLVxcLl0vO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBhcnNlKGlucHV0LCBzdGF0ZU92ZXJyaWRlLCBiYXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBlcnIobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdGF0ZU92ZXJyaWRlIHx8ICdzY2hlbWUgc3RhcnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvciA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlbkF0ID0gZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlbkJyYWNrZXQgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbG9vcDogd2hpbGUgKChpbnB1dFtjdXJzb3IgLSAxXSAhPT0gRU9GIHx8IGN1cnNvciA9PT0gMCkgJiYgIXRoaXMuX2lzSW52YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjID0gaW5wdXRbY3Vyc29yXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2NoZW1lIHN0YXJ0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjICYmIEFMUEhBLnRlc3QoYykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gYy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3NjaGVtZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnbm8gc2NoZW1lJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCdJbnZhbGlkIHNjaGVtZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsb29wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzY2hlbWUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgJiYgQUxQSEFOVU1FUklDLnRlc3QoYykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gYy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnOicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zY2hlbWUgPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsb29wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1JlbGF0aXZlU2NoZW1lKHRoaXMuX3NjaGVtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNSZWxhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NjaGVtZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3JlbGF0aXZlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2lzUmVsYXRpdmUgJiYgYmFzZSAmJiBiYXNlLl9zY2hlbWUgPT09IHRoaXMuX3NjaGVtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdyZWxhdGl2ZSBvciBhdXRob3JpdHknO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5faXNSZWxhdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdhdXRob3JpdHkgZmlyc3Qgc2xhc2gnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3NjaGVtZSBkYXRhJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdubyBzY2hlbWUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSBFT0YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsb29wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIoJ0NvZGUgcG9pbnQgbm90IGFsbG93ZWQgaW4gc2NoZW1lOiAnICsgYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbG9vcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2NoZW1lIGRhdGEnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICc/Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXJ5ID0gJz8nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3F1ZXJ5JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJyMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnJhZ21lbnQgPSAnIyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnZnJhZ21lbnQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPT0gRU9GICYmIGMgIT09ICdcXHQnICYmIGMgIT09ICdcXG4nICYmIGMgIT09ICdcXHInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NjaGVtZURhdGEgKz0gcGVyY2VudEVzY2FwZShjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ25vIHNjaGVtZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJhc2UgfHwgIWlzUmVsYXRpdmVTY2hlbWUoYmFzZS5fc2NoZW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycignTWlzc2luZyBzY2hlbWUuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZC5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdyZWxhdGl2ZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlbGF0aXZlIG9yIGF1dGhvcml0eSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJy8nICYmIGlucHV0W2N1cnNvciArIDFdID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdhdXRob3JpdHkgaWdub3JlIHNsYXNoZXMnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIoJ0V4cGVjdGVkIC8sIGdvdDogJyArIGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3JlbGF0aXZlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVsYXRpdmUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNSZWxhdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zY2hlbWUgIT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NjaGVtZSA9IGJhc2UuX3NjaGVtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09IEVPRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hvc3QgPSBiYXNlLl9ob3N0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcnQgPSBiYXNlLl9wb3J0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdGggPSBiYXNlLl9wYXRoLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcXVlcnkgPSBiYXNlLl9xdWVyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91c2VybmFtZSA9IGJhc2UuX3VzZXJuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bhc3N3b3JkID0gYmFzZS5fcGFzc3dvcmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbG9vcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJy8nIHx8IGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCdcXFxcIGlzIGFuIGludmFsaWQgY29kZSBwb2ludC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdyZWxhdGl2ZSBzbGFzaCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICc/Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hvc3QgPSBiYXNlLl9ob3N0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcnQgPSBiYXNlLl9wb3J0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdGggPSBiYXNlLl9wYXRoLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcXVlcnkgPSAnPyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXNlcm5hbWUgPSBiYXNlLl91c2VybmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXNzd29yZCA9IGJhc2UuX3Bhc3N3b3JkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3F1ZXJ5JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJyMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG9zdCA9IGJhc2UuX2hvc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9ydCA9IGJhc2UuX3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGF0aCA9IGJhc2UuX3BhdGguc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWVyeSA9IGJhc2UuX3F1ZXJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZyYWdtZW50ID0gJyMnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJuYW1lID0gYmFzZS5fdXNlcm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGFzc3dvcmQgPSBiYXNlLl9wYXNzd29yZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdmcmFnbWVudCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0QyA9IGlucHV0W2N1cnNvciArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0TmV4dEMgPSBpbnB1dFtjdXJzb3IgKyAyXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zY2hlbWUgIT09ICdmaWxlJyB8fCAhQUxQSEEudGVzdChjKSB8fCBuZXh0QyAhPT0gJzonICYmIG5leHRDICE9PSAnfCcgfHwgbmV4dE5leHRDICE9PSBFT0YgJiYgbmV4dE5leHRDICE9PSAnLycgJiYgbmV4dE5leHRDICE9PSAnXFxcXCcgJiYgbmV4dE5leHRDICE9PSAnPycgJiYgbmV4dE5leHRDICE9PSAnIycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG9zdCA9IGJhc2UuX2hvc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcnQgPSBiYXNlLl9wb3J0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91c2VybmFtZSA9IGJhc2UuX3VzZXJuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXNzd29yZCA9IGJhc2UuX3Bhc3N3b3JkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXRoID0gYmFzZS5fcGF0aC5zbGljZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdGgucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAncmVsYXRpdmUgcGF0aCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlbGF0aXZlIHNsYXNoJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnLycgfHwgYyA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIoJ1xcXFwgaXMgYW4gaW52YWxpZCBjb2RlIHBvaW50LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zY2hlbWUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdmaWxlIGhvc3QnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ2F1dGhvcml0eSBpZ25vcmUgc2xhc2hlcyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2NoZW1lICE9PSAnZmlsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG9zdCA9IGJhc2UuX2hvc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcnQgPSBiYXNlLl9wb3J0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91c2VybmFtZSA9IGJhc2UuX3VzZXJuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXNzd29yZCA9IGJhc2UuX3Bhc3N3b3JkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3JlbGF0aXZlIHBhdGgnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhdXRob3JpdHkgZmlyc3Qgc2xhc2gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICcvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ2F1dGhvcml0eSBzZWNvbmQgc2xhc2gnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIoJ0V4cGVjdGVkIFxcJy9cXCcsIGdvdDogJyArIGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ2F1dGhvcml0eSBpZ25vcmUgc2xhc2hlcyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2F1dGhvcml0eSBzZWNvbmQgc2xhc2gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgIT09ICcvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycignRXhwZWN0ZWQgXFwnL1xcJywgZ290OiAnICsgYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2F1dGhvcml0eSBpZ25vcmUgc2xhc2hlcyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPT0gJy8nICYmIGMgIT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ2F1dGhvcml0eSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycignRXhwZWN0ZWQgYXV0aG9yaXR5LCBnb3Q6ICcgKyBjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYXV0aG9yaXR5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnQCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VlbkF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycignQCBhbHJlYWR5IHNlZW4uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSAnJTQwJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVuQXQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNwID0gYnVmZmVyW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjcCA9PT0gJ1xcdCcgfHwgY3AgPT09ICdcXG4nIHx8IGNwID09PSAnXFxyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCdJbnZhbGlkIHdoaXRlc3BhY2UgaW4gYXV0aG9yaXR5LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3AgPT09ICc6JyAmJiB0aGlzLl9wYXNzd29yZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGFzc3dvcmQgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXBDID0gcGVyY2VudEVzY2FwZShjcCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Bhc3N3b3JkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXNzd29yZCArPSB0ZW1wQztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJuYW1lICs9IHRlbXBDO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09IEVPRiB8fCBjID09PSAnLycgfHwgYyA9PT0gJ1xcXFwnIHx8IGMgPT09ICc/JyB8fCBjID09PSAnIycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgLT0gYnVmZmVyLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdob3N0JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ZpbGUgaG9zdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gRU9GIHx8IGMgPT09ICcvJyB8fCBjID09PSAnXFxcXCcgfHwgYyA9PT0gJz8nIHx8IGMgPT09ICcjJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoID09PSAyICYmIEFMUEhBLnRlc3QoYnVmZmVyWzBdKSAmJiAoYnVmZmVyWzFdID09PSAnOicgfHwgYnVmZmVyWzFdID09PSAnfCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3JlbGF0aXZlIHBhdGgnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdyZWxhdGl2ZSBwYXRoIHN0YXJ0JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3N0ID0gSUROQVRvQVNDSUkuY2FsbCh0aGlzLCBidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAncmVsYXRpdmUgcGF0aCBzdGFydCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICdcXHQnIHx8IGMgPT09ICdcXG4nIHx8IGMgPT09ICdcXHInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCdJbnZhbGlkIHdoaXRlc3BhY2UgaW4gZmlsZSBob3N0LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaG9zdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2hvc3RuYW1lJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnOicgJiYgIXNlZW5CcmFja2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG9zdCA9IElETkFUb0FTQ0lJLmNhbGwodGhpcywgYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdwb3J0JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlID09PSAnaG9zdG5hbWUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGxvb3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSBFT0YgfHwgYyA9PT0gJy8nIHx8IGMgPT09ICdcXFxcJyB8fCBjID09PSAnPycgfHwgYyA9PT0gJyMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG9zdCA9IElETkFUb0FTQ0lJLmNhbGwodGhpcywgYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdyZWxhdGl2ZSBwYXRoIHN0YXJ0JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGxvb3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgIT09ICdcXHQnICYmIGMgIT09ICdcXG4nICYmIGMgIT09ICdcXHInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdbJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVuQnJhY2tldCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnXScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlbkJyYWNrZXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCdJbnZhbGlkIGNvZGUgcG9pbnQgaW4gaG9zdC9ob3N0bmFtZTogJyArIGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdwb3J0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvWzAtOV0vLnRlc3QoYykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gRU9GIHx8IGMgPT09ICcvJyB8fCBjID09PSAnXFxcXCcgfHwgYyA9PT0gJz8nIHx8IGMgPT09ICcjJyB8fCBzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlciAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBwYXJzZUludChidWZmZXIsIDEwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVtcCAhPT0gcmVsYXRpdmVbdGhpcy5fc2NoZW1lXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9ydCA9IHRlbXAgKyAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGxvb3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAncmVsYXRpdmUgcGF0aCBzdGFydCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICdcXHQnIHx8IGMgPT09ICdcXG4nIHx8IGMgPT09ICdcXHInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCdJbnZhbGlkIGNvZGUgcG9pbnQgaW4gcG9ydDogJyArIGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlbGF0aXZlIHBhdGggc3RhcnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycignXFwnXFxcXFxcJyBub3QgYWxsb3dlZCBpbiBwYXRoLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdyZWxhdGl2ZSBwYXRoJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgIT09ICcvJyAmJiBjICE9PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVsYXRpdmUgcGF0aCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gRU9GIHx8IGMgPT09ICcvJyB8fCBjID09PSAnXFxcXCcgfHwgIXN0YXRlT3ZlcnJpZGUgJiYgKGMgPT09ICc/JyB8fCBjID09PSAnIycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIoJ1xcXFwgbm90IGFsbG93ZWQgaW4gcmVsYXRpdmUgcGF0aC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcCA9IHJlbGF0aXZlUGF0aERvdE1hcHBpbmdbYnVmZmVyLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IHRtcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyID09PSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdGgucG9wKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgIT09ICcvJyAmJiBjICE9PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdGgucHVzaCgnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ1ZmZlciA9PT0gJy4nICYmIGMgIT09ICcvJyAmJiBjICE9PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGF0aC5wdXNoKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ1ZmZlciAhPT0gJy4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zY2hlbWUgPT09ICdmaWxlJyAmJiB0aGlzLl9wYXRoLmxlbmd0aCA9PT0gMCAmJiBidWZmZXIubGVuZ3RoID09PSAyICYmIEFMUEhBLnRlc3QoYnVmZmVyWzBdKSAmJiBidWZmZXJbMV0gPT09ICd8Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVyWzBdICsgJzonO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGF0aC5wdXNoKGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJz8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXJ5ID0gJz8nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdxdWVyeSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnIycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnJhZ21lbnQgPSAnIyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ2ZyYWdtZW50JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgIT09ICdcXHQnICYmIGMgIT09ICdcXG4nICYmIGMgIT09ICdcXHInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IHBlcmNlbnRFc2NhcGUoYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3F1ZXJ5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhdGVPdmVycmlkZSAmJiBjID09PSAnIycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mcmFnbWVudCA9ICcjJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdmcmFnbWVudCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgIT09IEVPRiAmJiBjICE9PSAnXFx0JyAmJiBjICE9PSAnXFxuJyAmJiBjICE9PSAnXFxyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXJ5ICs9IHBlcmNlbnRFc2NhcGVRdWVyeShjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZnJhZ21lbnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgIT09IEVPRiAmJiBjICE9PSAnXFx0JyAmJiBjICE9PSAnXFxuJyAmJiBjICE9PSAnXFxyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZyYWdtZW50ICs9IGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zY2hlbWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NjaGVtZURhdGEgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJuYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXNzd29yZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3N0ID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3J0ID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXRoID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWVyeSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzSW52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNSZWxhdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSlVSTCh1cmwsIGJhc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlICE9PSB1bmRlZmluZWQgJiYgIShiYXNlIGluc3RhbmNlb2YgSlVSTCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlID0gbmV3IEpVUkwoU3RyaW5nKGJhc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXJsID0gdXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXIuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHVybC5yZXBsYWNlKC9eWyBcXHRcXHJcXG5cXGZdK3xbIFxcdFxcclxcblxcZl0rJC9nLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZS5jYWxsKHRoaXMsIGlucHV0LCBudWxsLCBiYXNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEpVUkwucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhyZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgaHJlZigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNJbnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl91cmw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF1dGhvcml0eSA9ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3VzZXJuYW1lICE9PSAnJyB8fCB0aGlzLl9wYXNzd29yZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHkgPSB0aGlzLl91c2VybmFtZSArICh0aGlzLl9wYXNzd29yZCAhPT0gbnVsbCA/ICc6JyArIHRoaXMuX3Bhc3N3b3JkIDogJycpICsgJ0AnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3RvY29sICsgKHRoaXMuX2lzUmVsYXRpdmUgPyAnLy8nICsgYXV0aG9yaXR5ICsgdGhpcy5ob3N0IDogJycpICsgdGhpcy5wYXRobmFtZSArIHRoaXMuX3F1ZXJ5ICsgdGhpcy5fZnJhZ21lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgaHJlZih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2UuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgcHJvdG9jb2woKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjaGVtZSArICc6JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBwcm90b2NvbCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0ludmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlLmNhbGwodGhpcywgdmFsdWUgKyAnOicsICdzY2hlbWUgc3RhcnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBob3N0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0ludmFsaWQgPyAnJyA6IHRoaXMuX3BvcnQgPyB0aGlzLl9ob3N0ICsgJzonICsgdGhpcy5fcG9ydCA6IHRoaXMuX2hvc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgaG9zdCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0ludmFsaWQgfHwgIXRoaXMuX2lzUmVsYXRpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlLmNhbGwodGhpcywgdmFsdWUsICdob3N0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgaG9zdG5hbWUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hvc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgaG9zdG5hbWUodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNJbnZhbGlkIHx8ICF0aGlzLl9pc1JlbGF0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZS5jYWxsKHRoaXMsIHZhbHVlLCAnaG9zdG5hbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBwb3J0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3J0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHBvcnQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNJbnZhbGlkIHx8ICF0aGlzLl9pc1JlbGF0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZS5jYWxsKHRoaXMsIHZhbHVlLCAncG9ydCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IHBhdGhuYW1lKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0ludmFsaWQgPyAnJyA6IHRoaXMuX2lzUmVsYXRpdmUgPyAnLycgKyB0aGlzLl9wYXRoLmpvaW4oJy8nKSA6IHRoaXMuX3NjaGVtZURhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgcGF0aG5hbWUodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNJbnZhbGlkIHx8ICF0aGlzLl9pc1JlbGF0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXRoID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2UuY2FsbCh0aGlzLCB2YWx1ZSwgJ3JlbGF0aXZlIHBhdGggc3RhcnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBzZWFyY2goKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzSW52YWxpZCB8fCAhdGhpcy5fcXVlcnkgfHwgdGhpcy5fcXVlcnkgPT09ICc/JyA/ICcnIDogdGhpcy5fcXVlcnk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgc2VhcmNoKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzSW52YWxpZCB8fCAhdGhpcy5faXNSZWxhdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcXVlcnkgPSAnPyc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVbMF0gPT09ICc/Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlLmNhbGwodGhpcywgdmFsdWUsICdxdWVyeScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGhhc2goKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzSW52YWxpZCB8fCAhdGhpcy5fZnJhZ21lbnQgfHwgdGhpcy5fZnJhZ21lbnQgPT09ICcjJyA/ICcnIDogdGhpcy5fZnJhZ21lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgaGFzaCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0ludmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZyYWdtZW50ID0gJyMnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlWzBdID09PSAnIycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZS5jYWxsKHRoaXMsIHZhbHVlLCAnZnJhZ21lbnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBvcmlnaW4oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhvc3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNJbnZhbGlkIHx8ICF0aGlzLl9zY2hlbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5fc2NoZW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGEnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmaWxlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnamF2YXNjcmlwdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21haWx0byc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ251bGwnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Jsb2InOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEpVUkwodGhpcy5fc2NoZW1lRGF0YSkub3JpZ2luIHx8ICdudWxsJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKF8pIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCA9IHRoaXMuaG9zdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaG9zdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjaGVtZSArICc6Ly8nICsgaG9zdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlVSTCA9IEpVUkw7XG4gICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTQ2ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5nZXREb2N1bWVudCA9IGdldERvY3VtZW50O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuc2V0UERGTmV0d29ya1N0cmVhbUZhY3RvcnkgPSBzZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmJ1aWxkID0gZXhwb3J0cy52ZXJzaW9uID0gZXhwb3J0cy5QREZQYWdlUHJveHkgPSBleHBvcnRzLlBERkRvY3VtZW50UHJveHkgPSBleHBvcnRzLlBERldvcmtlciA9IGV4cG9ydHMuUERGRGF0YVJhbmdlVHJhbnNwb3J0ID0gZXhwb3J0cy5Mb29wYmFja1BvcnQgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3JlZ2VuZXJhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0NykpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxKTtcblxuICAgICAgICAgICAgICAgIHZhciBfZG9tX3V0aWxzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9mb250X2xvYWRlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTUyKTtcblxuICAgICAgICAgICAgICAgIHZhciBfYXBpX2NvbXBhdGliaWxpdHkgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1Myk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2NhbnZhcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTU0KTtcblxuICAgICAgICAgICAgICAgIHZhciBfZ2xvYmFsX3Njb3BlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMpKTtcblxuICAgICAgICAgICAgICAgIHZhciBfd29ya2VyX29wdGlvbnMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1Nik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX21lc3NhZ2VfaGFuZGxlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTU3KTtcblxuICAgICAgICAgICAgICAgIHZhciBfbWV0YWRhdGEgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1OCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3RyYW5zcG9ydF9zdHJlYW0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2MCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3dlYmdsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNjEpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHZhciBzZWxmID0gdGhpcywgYXJncyA9IGFyZ3VtZW50czsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpOyBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7IH0gZnVuY3Rpb24gX3Rocm93KGVycikgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTsgfSBfbmV4dCh1bmRlZmluZWQpOyB9KTsgfTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcikgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGl0ZXIpID09PSBcIltvYmplY3QgQXJndW1lbnRzXVwiKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4gICAgICAgICAgICAgICAgdmFyIERFRkFVTFRfUkFOR0VfQ0hVTktfU0laRSA9IDY1NTM2O1xuICAgICAgICAgICAgICAgIHZhciBpc1dvcmtlckRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdmFyIGZhbGxiYWNrV29ya2VyU3JjO1xuICAgICAgICAgICAgICAgIHZhciBmYWtlV29ya2VyRmlsZXNMb2FkZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVzZVJlcXVpcmVFbnN1cmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzV29ya2VyRGlzYWJsZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlcXVpcmUuZW5zdXJlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUuZW5zdXJlID0gcmVxdWlyZSgnbm9kZS1lbnN1cmUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlUmVxdWlyZUVuc3VyZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlcXVpcmUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiByZXF1aXJlLmVuc3VyZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXNlUmVxdWlyZUVuc3VyZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlcXVpcmVqcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcmVxdWlyZWpzLnRvVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxsYmFja1dvcmtlclNyYyA9IHJlcXVpcmVqcy50b1VybCgnZXh0cmFjdGhpZ2hsaWdodHMtZGlzdC9idWlsZC9leHRyYWN0aGlnaGxpZ2h0cy53b3JrZXIuanMnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBkeW5hbWljTG9hZGVyU3VwcG9ydGVkID0gdHlwZW9mIHJlcXVpcmVqcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcmVxdWlyZWpzLmxvYWQ7XG4gICAgICAgICAgICAgICAgICAgIGZha2VXb3JrZXJGaWxlc0xvYWRlciA9IHVzZVJlcXVpcmVFbnN1cmUgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUuZW5zdXJlKFtdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd29ya2VyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyID0gcmVxdWlyZSgnLi9leHRyYWN0aGlnaGxpZ2h0cy53b3JrZXIuanMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUod29ya2VyLldvcmtlck1lc3NhZ2VIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCByZWplY3QsICdleHRyYWN0aGlnaGxpZ2h0c1dvcmtlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gOiBkeW5hbWljTG9hZGVyU3VwcG9ydGVkID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlanMoWydleHRyYWN0aGlnaGxpZ2h0cy1kaXN0L2J1aWxkL2V4dHJhY3RoaWdobGlnaHRzLndvcmtlciddLCBmdW5jdGlvbiAod29ya2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHdvcmtlci5Xb3JrZXJNZXNzYWdlSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IDogbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZhbGxiYWNrV29ya2VyU3JjICYmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihkb2N1bWVudCkpID09PSAnb2JqZWN0JyAmJiAnY3VycmVudFNjcmlwdCcgaW4gZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleHRyYWN0aGlnaGxpZ2h0c0ZpbGVQYXRoID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYztcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJhY3RoaWdobGlnaHRzRmlsZVBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxsYmFja1dvcmtlclNyYyA9IGV4dHJhY3RoaWdobGlnaHRzRmlsZVBhdGgucmVwbGFjZSgvKFxcLig/Om1pblxcLik/anMpKFxcPy4qKT8kL2ksICcud29ya2VyJDEkMicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBjcmVhdGVQREZOZXR3b3JrU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gc2V0UERGTmV0d29ya1N0cmVhbUZhY3RvcnkocGRmTmV0d29ya1N0cmVhbUZhY3RvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlUERGTmV0d29ya1N0cmVhbSA9IHBkZk5ldHdvcmtTdHJlYW1GYWN0b3J5O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldERvY3VtZW50KHNyYykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFzayA9IG5ldyBQREZEb2N1bWVudExvYWRpbmdUYXNrKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2U7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzcmMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBzcmNcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF91dGlsLmlzQXJyYXlCdWZmZXIpKHNyYykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBzcmNcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3JjIGluc3RhbmNlb2YgUERGRGF0YVJhbmdlVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IHNyY1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdHlwZW9mKHNyYykgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHBhcmFtZXRlciBpbiBnZXREb2N1bWVudCwgJyArICduZWVkIGVpdGhlciBVaW50OEFycmF5LCBzdHJpbmcgb3IgYSBwYXJhbWV0ZXIgb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3JjLnVybCAmJiAhc3JjLmRhdGEgJiYgIXNyYy5yYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwYXJhbWV0ZXIgb2JqZWN0OiBuZWVkIGVpdGhlciAuZGF0YSwgLnJhbmdlIG9yIC51cmwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlID0gc3JjO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByYW5nZVRyYW5zcG9ydCA9IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICd1cmwnICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2tleV0gPSBuZXcgX3V0aWwuVVJMKHNvdXJjZVtrZXldLCB3aW5kb3cubG9jYXRpb24pLmhyZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3JhbmdlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlVHJhbnNwb3J0ID0gc291cmNlW2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3dvcmtlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIgPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnZGF0YScgJiYgIShzb3VyY2Vba2V5XSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBkZkJ5dGVzID0gc291cmNlW2tleV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBkZkJ5dGVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNba2V5XSA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShwZGZCeXRlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfdHlwZW9mKHBkZkJ5dGVzKSA9PT0gJ29iamVjdCcgJiYgcGRmQnl0ZXMgIT09IG51bGwgJiYgIWlzTmFOKHBkZkJ5dGVzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2tleV0gPSBuZXcgVWludDhBcnJheShwZGZCeXRlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3V0aWwuaXNBcnJheUJ1ZmZlcikocGRmQnl0ZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1trZXldID0gbmV3IFVpbnQ4QXJyYXkocGRmQnl0ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBQREYgYmluYXJ5IGRhdGE6IGVpdGhlciB0eXBlZCBhcnJheSwgJyArICdzdHJpbmcgb3IgYXJyYXktbGlrZSBvYmplY3QgaXMgZXhwZWN0ZWQgaW4gdGhlICcgKyAnZGF0YSBwcm9wZXJ0eS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5yYW5nZUNodW5rU2l6ZSA9IHBhcmFtcy5yYW5nZUNodW5rU2l6ZSB8fCBERUZBVUxUX1JBTkdFX0NIVU5LX1NJWkU7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5DTWFwUmVhZGVyRmFjdG9yeSA9IHBhcmFtcy5DTWFwUmVhZGVyRmFjdG9yeSB8fCBfZG9tX3V0aWxzLkRPTUNNYXBSZWFkZXJGYWN0b3J5O1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaWdub3JlRXJyb3JzID0gcGFyYW1zLnN0b3BBdEVycm9ycyAhPT0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnBkZkJ1ZyA9IHBhcmFtcy5wZGZCdWcgPT09IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBOYXRpdmVJbWFnZURlY29kZXJWYWx1ZXMgPSBPYmplY3QudmFsdWVzKF91dGlsLk5hdGl2ZUltYWdlRGVjb2RpbmcpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMubmF0aXZlSW1hZ2VEZWNvZGVyU3VwcG9ydCA9PT0gdW5kZWZpbmVkIHx8ICFOYXRpdmVJbWFnZURlY29kZXJWYWx1ZXMuaW5jbHVkZXMocGFyYW1zLm5hdGl2ZUltYWdlRGVjb2RlclN1cHBvcnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMubmF0aXZlSW1hZ2VEZWNvZGVyU3VwcG9ydCA9IF9hcGlfY29tcGF0aWJpbGl0eS5hcGlDb21wYXRpYmlsaXR5UGFyYW1zLm5hdGl2ZUltYWdlRGVjb2RlclN1cHBvcnQgfHwgX3V0aWwuTmF0aXZlSW1hZ2VEZWNvZGluZy5ERUNPREU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIocGFyYW1zLm1heEltYWdlU2l6ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5tYXhJbWFnZVNpemUgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1zLmlzRXZhbFN1cHBvcnRlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaXNFdmFsU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1zLmRpc2FibGVGb250RmFjZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZGlzYWJsZUZvbnRGYWNlID0gX2FwaV9jb21wYXRpYmlsaXR5LmFwaUNvbXBhdGliaWxpdHlQYXJhbXMuZGlzYWJsZUZvbnRGYWNlIHx8IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXMuZGlzYWJsZVJhbmdlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5kaXNhYmxlUmFuZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1zLmRpc2FibGVTdHJlYW0gIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmRpc2FibGVTdHJlYW0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1zLmRpc2FibGVBdXRvRmV0Y2ggIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmRpc2FibGVBdXRvRmV0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1zLmRpc2FibGVDcmVhdGVPYmplY3RVUkwgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmRpc2FibGVDcmVhdGVPYmplY3RVUkwgPSBfYXBpX2NvbXBhdGliaWxpdHkuYXBpQ29tcGF0aWJpbGl0eVBhcmFtcy5kaXNhYmxlQ3JlYXRlT2JqZWN0VVJMIHx8IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnNldFZlcmJvc2l0eUxldmVsKShwYXJhbXMudmVyYm9zaXR5KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIXdvcmtlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdvcmtlclBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZVRyYW5zZmVyczogcGFyYW1zLnBvc3RNZXNzYWdlVHJhbnNmZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmJvc2l0eTogcGFyYW1zLnZlcmJvc2l0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0OiBfd29ya2VyX29wdGlvbnMuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJQb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyID0gd29ya2VyUGFyYW1zLnBvcnQgPyBQREZXb3JrZXIuZnJvbVBvcnQod29ya2VyUGFyYW1zKSA6IG5ldyBQREZXb3JrZXIod29ya2VyUGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suX3dvcmtlciA9IHdvcmtlcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBkb2NJZCA9IHRhc2suZG9jSWQ7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlci5wcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhc2suZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2FkaW5nIGFib3J0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9mZXRjaERvY3VtZW50KHdvcmtlciwgcGFyYW1zLCByYW5nZVRyYW5zcG9ydCwgZG9jSWQpLnRoZW4oZnVuY3Rpb24gKHdvcmtlcklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhc2suZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTG9hZGluZyBhYm9ydGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ldHdvcmtTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2VUcmFuc3BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29ya1N0cmVhbSA9IG5ldyBfdHJhbnNwb3J0X3N0cmVhbS5QREZEYXRhVHJhbnNwb3J0U3RyZWFtKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDogcGFyYW1zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxEYXRhOiBwYXJhbXMuaW5pdGlhbERhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlUmFuZ2U6IHBhcmFtcy5kaXNhYmxlUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlU3RyZWFtOiBwYXJhbXMuZGlzYWJsZVN0cmVhbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCByYW5nZVRyYW5zcG9ydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghcGFyYW1zLmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29ya1N0cmVhbSA9IGNyZWF0ZVBERk5ldHdvcmtTdHJlYW0oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBwYXJhbXMudXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBwYXJhbXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cEhlYWRlcnM6IHBhcmFtcy5odHRwSGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogcGFyYW1zLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlQ2h1bmtTaXplOiBwYXJhbXMucmFuZ2VDaHVua1NpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlUmFuZ2U6IHBhcmFtcy5kaXNhYmxlUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlU3RyZWFtOiBwYXJhbXMuZGlzYWJsZVN0cmVhbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZUhhbmRsZXIgPSBuZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihkb2NJZCwgd29ya2VySWQsIHdvcmtlci5wb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSGFuZGxlci5wb3N0TWVzc2FnZVRyYW5zZmVycyA9IHdvcmtlci5wb3N0TWVzc2FnZVRyYW5zZmVycztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNwb3J0ID0gbmV3IFdvcmtlclRyYW5zcG9ydChtZXNzYWdlSGFuZGxlciwgdGFzaywgbmV0d29ya1N0cmVhbSwgcGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLl90cmFuc3BvcnQgPSB0cmFuc3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUhhbmRsZXIuc2VuZCgnUmVhZHknLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCh0YXNrLl9jYXBhYmlsaXR5LnJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9mZXRjaERvY3VtZW50KHdvcmtlciwgc291cmNlLCBwZGZEYXRhUmFuZ2VUcmFuc3BvcnQsIGRvY0lkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3b3JrZXIuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdXb3JrZXIgd2FzIGRlc3Ryb3llZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwZGZEYXRhUmFuZ2VUcmFuc3BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5sZW5ndGggPSBwZGZEYXRhUmFuZ2VUcmFuc3BvcnQubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLmluaXRpYWxEYXRhID0gcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmluaXRpYWxEYXRhO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlci5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoJ0dldERvY1JlcXVlc3QnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb2NJZDogZG9jSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcGlWZXJzaW9uOiAnMi4xLjI2NicsXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBzb3VyY2UuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHNvdXJjZS51cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQ6IHNvdXJjZS5wYXNzd29yZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQXV0b0ZldGNoOiBzb3VyY2UuZGlzYWJsZUF1dG9GZXRjaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZUNodW5rU2l6ZTogc291cmNlLnJhbmdlQ2h1bmtTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDogc291cmNlLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heEltYWdlU2l6ZTogc291cmNlLm1heEltYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVGb250RmFjZTogc291cmNlLmRpc2FibGVGb250RmFjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVDcmVhdGVPYmplY3RVUkw6IHNvdXJjZS5kaXNhYmxlQ3JlYXRlT2JqZWN0VVJMLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2VUcmFuc2ZlcnM6IHdvcmtlci5wb3N0TWVzc2FnZVRyYW5zZmVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY0Jhc2VVcmw6IHNvdXJjZS5kb2NCYXNlVXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlSW1hZ2VEZWNvZGVyU3VwcG9ydDogc291cmNlLm5hdGl2ZUltYWdlRGVjb2RlclN1cHBvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVFcnJvcnM6IHNvdXJjZS5pZ25vcmVFcnJvcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQ6IHNvdXJjZS5pc0V2YWxTdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAod29ya2VySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3b3JrZXIuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXb3JrZXIgd2FzIGRlc3Ryb3llZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VySWQ7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBQREZEb2N1bWVudExvYWRpbmdUYXNrID0gZnVuY3Rpb24gUERGRG9jdW1lbnRMb2FkaW5nVGFza0Nsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0RG9jdW1lbnRJZCA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFBERkRvY3VtZW50TG9hZGluZ1Rhc2sgPVxuICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBERkRvY3VtZW50TG9hZGluZ1Rhc2soKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQREZEb2N1bWVudExvYWRpbmdUYXNrKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc3BvcnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl93b3JrZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY0lkID0gJ2QnICsgbmV4dERvY3VtZW50SWQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblBhc3N3b3JkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblVuc3VwcG9ydGVkRmVhdHVyZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFBERkRvY3VtZW50TG9hZGluZ1Rhc2ssIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJkZXN0cm95XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zcG9ydERlc3Ryb3llZCA9ICF0aGlzLl90cmFuc3BvcnQgPyBQcm9taXNlLnJlc29sdmUoKSA6IHRoaXMuX3RyYW5zcG9ydC5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNwb3J0RGVzdHJveWVkLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl90cmFuc3BvcnQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLl93b3JrZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3dvcmtlci5kZXN0cm95KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3dvcmtlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJ0aGVuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuZGVwcmVjYXRlZCkoJ1BERkRvY3VtZW50TG9hZGluZ1Rhc2sudGhlbiBtZXRob2QsICcgKyAndXNlIHRoZSBgcHJvbWlzZWAgZ2V0dGVyIGluc3RlYWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlLnRoZW4uYXBwbHkodGhpcy5wcm9taXNlLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicHJvbWlzZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUERGRG9jdW1lbnRMb2FkaW5nVGFzaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUERGRG9jdW1lbnRMb2FkaW5nVGFzaztcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgUERGRGF0YVJhbmdlVHJhbnNwb3J0ID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQREZEYXRhUmFuZ2VUcmFuc3BvcnQobGVuZ3RoLCBpbml0aWFsRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQREZEYXRhUmFuZ2VUcmFuc3BvcnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsRGF0YSA9IGluaXRpYWxEYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlTGlzdGVuZXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3NMaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmVzc2l2ZVJlYWRMaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhQREZEYXRhUmFuZ2VUcmFuc3BvcnQsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImFkZFJhbmdlTGlzdGVuZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWRkUmFuZ2VMaXN0ZW5lcihsaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yYW5nZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImFkZFByb2dyZXNzTGlzdGVuZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWRkUHJvZ3Jlc3NMaXN0ZW5lcihsaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmVzc0xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImFkZFByb2dyZXNzaXZlUmVhZExpc3RlbmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFkZFByb2dyZXNzaXZlUmVhZExpc3RlbmVyKGxpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyZXNzaXZlUmVhZExpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm9uRGF0YVJhbmdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uRGF0YVJhbmdlKGJlZ2luLCBjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2l0ZXJhdG9yRXJyb3IgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pdGVyYXRvciA9IHRoaXMuX3JhbmdlTGlzdGVuZXJzW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3N0ZXA7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IChfc3RlcCA9IF9pdGVyYXRvci5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IF9zdGVwLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyKGJlZ2luLCBjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZXJhdG9yRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiAmJiBfaXRlcmF0b3IucmV0dXJuICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZXJhdG9yLnJldHVybigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwib25EYXRhUHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gb25EYXRhUHJvZ3Jlc3MobG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5wcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvcjIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaXRlcmF0b3JFcnJvcjIgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yMiA9IF90aGlzMi5fcHJvZ3Jlc3NMaXN0ZW5lcnNbU3ltYm9sLml0ZXJhdG9yXSgpLCBfc3RlcDI7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgPSAoX3N0ZXAyID0gX2l0ZXJhdG9yMi5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpc3RlbmVyID0gX3N0ZXAyLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcihsb2FkZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZXJhdG9yRXJyb3IyID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yICYmIF9pdGVyYXRvcjIucmV0dXJuICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVyYXRvcjIucmV0dXJuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2RpZEl0ZXJhdG9yRXJyb3IyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwib25EYXRhUHJvZ3Jlc3NpdmVSZWFkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uRGF0YVByb2dyZXNzaXZlUmVhZChjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3IzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2l0ZXJhdG9yRXJyb3IzID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pdGVyYXRvcjMgPSBfdGhpczMuX3Byb2dyZXNzaXZlUmVhZExpc3RlbmVyc1tTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwMzsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyA9IChfc3RlcDMgPSBfaXRlcmF0b3IzLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBfc3RlcDMudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyKGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVyYXRvckVycm9yMyA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyAmJiBfaXRlcmF0b3IzLnJldHVybiAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlcmF0b3IzLnJldHVybigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInRyYW5zcG9ydFJlYWR5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRyYW5zcG9ydFJlYWR5KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVxdWVzdERhdGFSYW5nZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXF1ZXN0RGF0YVJhbmdlKGJlZ2luLCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnQWJzdHJhY3QgbWV0aG9kIFBERkRhdGFSYW5nZVRyYW5zcG9ydC5yZXF1ZXN0RGF0YVJhbmdlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJhYm9ydFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhYm9ydCgpIHt9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQREZEYXRhUmFuZ2VUcmFuc3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuUERGRGF0YVJhbmdlVHJhbnNwb3J0ID0gUERGRGF0YVJhbmdlVHJhbnNwb3J0O1xuXG4gICAgICAgICAgICAgICAgdmFyIFBERkRvY3VtZW50UHJveHkgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBERkRvY3VtZW50UHJveHkocGRmSW5mbywgdHJhbnNwb3J0LCBsb2FkaW5nVGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQREZEb2N1bWVudFByb3h5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1Rhc2sgPSBsb2FkaW5nVGFzaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wZGZJbmZvID0gcGRmSW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc3BvcnQgPSB0cmFuc3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhQREZEb2N1bWVudFByb3h5LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRQYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFBhZ2UocGFnZU51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2UocGFnZU51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRQYWdlSW5kZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UGFnZUluZGV4KHJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VJbmRleChyZWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0RGVzdGluYXRpb25zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlc3RpbmF0aW9ucygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXREZXN0aW5hdGlvbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldERlc3RpbmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlc3RpbmF0aW9uKGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0RGVzdGluYXRpb24oaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UGFnZUxhYmVsc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRQYWdlTGFiZWxzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VMYWJlbHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldFBhZ2VNb2RlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFBhZ2VNb2RlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VNb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRPcGVuQWN0aW9uRGVzdGluYXRpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0T3BlbkFjdGlvbkRlc3RpbmF0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE9wZW5BY3Rpb25EZXN0aW5hdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0QXR0YWNobWVudHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QXR0YWNobWVudHMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0QXR0YWNobWVudHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldEphdmFTY3JpcHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0SmF2YVNjcmlwdCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRKYXZhU2NyaXB0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRPdXRsaW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldE91dGxpbmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0T3V0bGluZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UGVybWlzc2lvbnNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UGVybWlzc2lvbnMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0UGVybWlzc2lvbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldE1ldGFkYXRhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldE1ldGFkYXRhKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE1ldGFkYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXREYXRhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldERhdGEoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0RGF0YSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0RG93bmxvYWRJbmZvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldERvd25sb2FkSW5mbygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5kb3dubG9hZEluZm9DYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRTdGF0c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdGF0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRTdGF0cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY2xlYW51cFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc3BvcnQuc3RhcnRDbGVhbnVwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJkZXN0cm95XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRpbmdUYXNrLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm51bVBhZ2VzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wZGZJbmZvLm51bVBhZ2VzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZmluZ2VycHJpbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BkZkluZm8uZmluZ2VycHJpbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJsb2FkaW5nUGFyYW1zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQubG9hZGluZ1BhcmFtcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQREZEb2N1bWVudFByb3h5O1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlBERkRvY3VtZW50UHJveHkgPSBQREZEb2N1bWVudFByb3h5O1xuXG4gICAgICAgICAgICAgICAgdmFyIFBERlBhZ2VQcm94eSA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUERGUGFnZVByb3h5KHBhZ2VJbmRleCwgcGFnZUluZm8sIHRyYW5zcG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwZGZCdWcgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBERlBhZ2VQcm94eSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VJbmRleCA9IHBhZ2VJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYWdlSW5mbyA9IHBhZ2VJbmZvO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zcG9ydCA9IHRyYW5zcG9ydDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGF0cyA9IHBkZkJ1ZyA/IG5ldyBfZG9tX3V0aWxzLlN0YXRUaW1lcigpIDogX2RvbV91dGlscy5EdW1teVN0YXRUaW1lcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wZGZCdWcgPSBwZGZCdWc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25PYmpzID0gdHJhbnNwb3J0LmNvbW1vbk9ianM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vYmpzID0gbmV3IFBERk9iamVjdHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFudXBBZnRlclJlbmRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0NsZWFudXAgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVudFN0YXRlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFBERlBhZ2VQcm94eSwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0Vmlld3BvcnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Vmlld3BvcnQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlID0gX3JlZi5zY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYkcm90YXRpb24gPSBfcmVmLnJvdGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb24gPSBfcmVmJHJvdGF0aW9uID09PSB2b2lkIDAgPyB0aGlzLnJvdGF0ZSA6IF9yZWYkcm90YXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmJGRvbnRGbGlwID0gX3JlZi5kb250RmxpcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRGbGlwID0gX3JlZiRkb250RmxpcCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGRvbnRGbGlwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSB8fCB0eXBlb2YgYXJndW1lbnRzWzBdID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmRlcHJlY2F0ZWQpKCdnZXRWaWV3cG9ydCBpcyBjYWxsZWQgd2l0aCBvYnNvbGV0ZSBhcmd1bWVudHMuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uID0gdHlwZW9mIGFyZ3VtZW50c1sxXSA9PT0gJ251bWJlcicgPyBhcmd1bWVudHNbMV0gOiB0aGlzLnJvdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRGbGlwID0gdHlwZW9mIGFyZ3VtZW50c1syXSA9PT0gJ2Jvb2xlYW4nID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9kb21fdXRpbHMuUGFnZVZpZXdwb3J0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IHRoaXMudmlldyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlOiBzY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uOiByb3RhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRGbGlwOiBkb250RmxpcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldEFubm90YXRpb25zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldEFubm90YXRpb25zKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjIkaW50ZW50ID0gX3JlZjIuaW50ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50ID0gX3JlZjIkaW50ZW50ID09PSB2b2lkIDAgPyBudWxsIDogX3JlZjIkaW50ZW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hbm5vdGF0aW9uc1Byb21pc2UgfHwgdGhpcy5hbm5vdGF0aW9uc0ludGVudCAhPT0gaW50ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFubm90YXRpb25zUHJvbWlzZSA9IHRoaXMuX3RyYW5zcG9ydC5nZXRBbm5vdGF0aW9ucyh0aGlzLnBhZ2VJbmRleCwgaW50ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYW5ub3RhdGlvbnNJbnRlbnQgPSBpbnRlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hbm5vdGF0aW9uc1Byb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKF9yZWYzLCBhbm5vdGF0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FudmFzQ29udGV4dCA9IF9yZWYzLmNhbnZhc0NvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3cG9ydCA9IF9yZWYzLnZpZXdwb3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjMkaW50ZW50ID0gX3JlZjMuaW50ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50ID0gX3JlZjMkaW50ZW50ID09PSB2b2lkIDAgPyAnZGlzcGxheScgOiBfcmVmMyRpbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmMyRlbmFibGVXZWJHTCA9IF9yZWYzLmVuYWJsZVdlYkdMLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlV2ViR0wgPSBfcmVmMyRlbmFibGVXZWJHTCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmMyRlbmFibGVXZWJHTCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYzJHJlbmRlckludGVyYWN0aSA9IF9yZWYzLnJlbmRlckludGVyYWN0aXZlRm9ybXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbnRlcmFjdGl2ZUZvcm1zID0gX3JlZjMkcmVuZGVySW50ZXJhY3RpID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYzJHJlbmRlckludGVyYWN0aSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYzJHRyYW5zZm9ybSA9IF9yZWYzLnRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSA9IF9yZWYzJHRyYW5zZm9ybSA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYzJHRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYzJGltYWdlTGF5ZXIgPSBfcmVmMy5pbWFnZUxheWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VMYXllciA9IF9yZWYzJGltYWdlTGF5ZXIgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmMyRpbWFnZUxheWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjMkY2FudmFzRmFjdG9yeSA9IF9yZWYzLmNhbnZhc0ZhY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXNGYWN0b3J5ID0gX3JlZjMkY2FudmFzRmFjdG9yeSA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYzJGNhbnZhc0ZhY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmMyRiYWNrZ3JvdW5kID0gX3JlZjMuYmFja2dyb3VuZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQgPSBfcmVmMyRiYWNrZ3JvdW5kID09PSB2b2lkIDAgPyBudWxsIDogX3JlZjMkYmFja2dyb3VuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRzID0gdGhpcy5fc3RhdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRzLnRpbWUoJ092ZXJhbGwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2xlYW51cCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVuZGVyaW5nSW50ZW50ID0gaW50ZW50ID09PSAncHJpbnQnID8gJ3ByaW50JyA6ICdkaXNwbGF5JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbnZhc0ZhY3RvcnlJbnN0YW5jZSA9IGNhbnZhc0ZhY3RvcnkgfHwgbmV3IF9kb21fdXRpbHMuRE9NQ2FudmFzRmFjdG9yeSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2ViR0xDb250ZXh0ID0gbmV3IF93ZWJnbC5XZWJHTENvbnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlOiBlbmFibGVXZWJHTFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW50ZW50U3RhdGVzW3JlbmRlcmluZ0ludGVudF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW50ZW50U3RhdGVzW3JlbmRlcmluZ0ludGVudF0gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGludGVudFN0YXRlID0gdGhpcy5pbnRlbnRTdGF0ZXNbcmVuZGVyaW5nSW50ZW50XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWludGVudFN0YXRlLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudFN0YXRlLnJlY2VpdmluZ09wZXJhdG9yTGlzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnRTdGF0ZS5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuQXJyYXk6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NBcnJheTogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENodW5rOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRzLnRpbWUoJ1BhZ2UgUmVxdWVzdCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc3BvcnQubWVzc2FnZUhhbmRsZXIuc2VuZCgnUmVuZGVyUGFnZVJlcXVlc3QnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2VOdW1iZXIgLSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudDogcmVuZGVyaW5nSW50ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckludGVyYWN0aXZlRm9ybXM6IHJlbmRlckludGVyYWN0aXZlRm9ybXMgPT09IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gY29tcGxldGUoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gaW50ZW50U3RhdGUucmVuZGVyVGFza3MuaW5kZXhPZihpbnRlcm5hbFJlbmRlclRhc2spO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50U3RhdGUucmVuZGVyVGFza3Muc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXM0LmNsZWFudXBBZnRlclJlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5wZW5kaW5nQ2xlYW51cCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5fdHJ5Q2xlYW51cCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbFJlbmRlclRhc2suY2FwYWJpbGl0eS5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbFJlbmRlclRhc2suY2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRzLnRpbWVFbmQoJ1JlbmRlcmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHMudGltZUVuZCgnT3ZlcmFsbCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnRlcm5hbFJlbmRlclRhc2sgPSBuZXcgSW50ZXJuYWxSZW5kZXJUYXNrKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjb21wbGV0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhc0NvbnRleHQ6IGNhbnZhc0NvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld3BvcnQ6IHZpZXdwb3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlTGF5ZXI6IGltYWdlTGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogYmFja2dyb3VuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ianM6IHRoaXMub2JqcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vbk9ianM6IHRoaXMuY29tbW9uT2JqcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdDogaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZU51bWJlcjogdGhpcy5wYWdlTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzRmFjdG9yeTogY2FudmFzRmFjdG9yeUluc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xDb250ZXh0OiB3ZWJHTENvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6IHJlbmRlcmluZ0ludGVudCAhPT0gJ3ByaW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZkJ1ZzogdGhpcy5fcGRmQnVnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50U3RhdGUucmVuZGVyVGFza3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudFN0YXRlLnJlbmRlclRhc2tzLnB1c2goaW50ZXJuYWxSZW5kZXJUYXNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbmRlclRhc2sgPSBpbnRlcm5hbFJlbmRlclRhc2sudGFzaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50U3RhdGUuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eS5wcm9taXNlLnRoZW4oZnVuY3Rpb24gKHRyYW5zcGFyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzNC5wZW5kaW5nQ2xlYW51cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0cy50aW1lKCdSZW5kZXJpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsUmVuZGVyVGFzay5pbml0aWFsaXplR3JhcGhpY3ModHJhbnNwYXJlbmN5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsUmVuZGVyVGFzay5vcGVyYXRvckxpc3RDaGFuZ2VkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGNvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlclRhc2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRPcGVyYXRvckxpc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0T3BlcmF0b3JMaXN0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBvcGVyYXRvckxpc3RDaGFuZ2VkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludGVudFN0YXRlLm9wZXJhdG9yTGlzdC5sYXN0Q2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnRTdGF0ZS5vcExpc3RSZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKGludGVudFN0YXRlLm9wZXJhdG9yTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcy5pbmRleE9mKG9wTGlzdFRhc2spO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbmRlcmluZ0ludGVudCA9ICdvcGxpc3QnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbnRlbnRTdGF0ZXNbcmVuZGVyaW5nSW50ZW50XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnRlbnRTdGF0ZXNbcmVuZGVyaW5nSW50ZW50XSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW50ZW50U3RhdGUgPSB0aGlzLmludGVudFN0YXRlc1tyZW5kZXJpbmdJbnRlbnRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3BMaXN0VGFzaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWludGVudFN0YXRlLm9wTGlzdFJlYWRDYXBhYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcExpc3RUYXNrID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcExpc3RUYXNrLm9wZXJhdG9yTGlzdENoYW5nZWQgPSBvcGVyYXRvckxpc3RDaGFuZ2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50U3RhdGUucmVjZWl2aW5nT3BlcmF0b3JMaXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudFN0YXRlLm9wTGlzdFJlYWRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50U3RhdGUucmVuZGVyVGFza3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudFN0YXRlLnJlbmRlclRhc2tzLnB1c2gob3BMaXN0VGFzayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnRTdGF0ZS5vcGVyYXRvckxpc3QgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5BcnJheTogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FycmF5OiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q2h1bms6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGF0cy50aW1lKCdQYWdlIFJlcXVlc3QnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNwb3J0Lm1lc3NhZ2VIYW5kbGVyLnNlbmQoJ1JlbmRlclBhZ2VSZXF1ZXN0Jywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50OiByZW5kZXJpbmdJbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVudFN0YXRlLm9wTGlzdFJlYWRDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJzdHJlYW1UZXh0Q29udGVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzdHJlYW1UZXh0Q29udGVudCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWY0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWY0JG5vcm1hbGl6ZVdoaXRlcyA9IF9yZWY0Lm5vcm1hbGl6ZVdoaXRlc3BhY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVXaGl0ZXNwYWNlID0gX3JlZjQkbm9ybWFsaXplV2hpdGVzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWY0JG5vcm1hbGl6ZVdoaXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWY0JGRpc2FibGVDb21iaW5lVCA9IF9yZWY0LmRpc2FibGVDb21iaW5lVGV4dEl0ZW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUNvbWJpbmVUZXh0SXRlbXMgPSBfcmVmNCRkaXNhYmxlQ29tYmluZVQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjQkZGlzYWJsZUNvbWJpbmVUO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBURVhUX0NPTlRFTlRfQ0hVTktfU0laRSA9IDEwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFN0cmVhbSgnR2V0VGV4dENvbnRlbnQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IHRoaXMucGFnZU51bWJlciAtIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVXaGl0ZXNwYWNlOiBub3JtYWxpemVXaGl0ZXNwYWNlID09PSB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluZVRleHRJdGVtczogZGlzYWJsZUNvbWJpbmVUZXh0SXRlbXMgIT09IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaFdhdGVyTWFyazogVEVYVF9DT05URU5UX0NIVU5LX1NJWkUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBmdW5jdGlvbiBzaXplKHRleHRDb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHRDb250ZW50Lml0ZW1zLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRUZXh0Q29udGVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRUZXh0Q29udGVudCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkYWJsZVN0cmVhbSA9IHRoaXMuc3RyZWFtVGV4dENvbnRlbnQocGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHB1bXAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlYWQoKS50aGVuKGZ1bmN0aW9uIChfcmVmNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RleHRDb250ZW50JGl0ZW1zO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IF9yZWY1LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IF9yZWY1LmRvbmU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGV4dENvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0ZXh0Q29udGVudC5zdHlsZXMsIHZhbHVlLnN0eWxlcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF90ZXh0Q29udGVudCRpdGVtcyA9IHRleHRDb250ZW50Lml0ZW1zKS5wdXNoLmFwcGx5KF90ZXh0Q29udGVudCRpdGVtcywgX3RvQ29uc3VtYWJsZUFycmF5KHZhbHVlLml0ZW1zKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVtcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Q29udGVudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVzOiBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVtcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9kZXN0cm95XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9kZXN0cm95KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zcG9ydC5wYWdlQ2FjaGVbdGhpcy5wYWdlSW5kZXhdID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdhaXRPbiA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmludGVudFN0YXRlcykuZm9yRWFjaChmdW5jdGlvbiAoaW50ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW50ZW50ID09PSAnb3BsaXN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGludGVudFN0YXRlID0gdGhpcy5pbnRlbnRTdGF0ZXNbaW50ZW50XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudFN0YXRlLnJlbmRlclRhc2tzLmZvckVhY2goZnVuY3Rpb24gKHJlbmRlclRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVuZGVyQ29tcGxldGVkID0gcmVuZGVyVGFzay5jYXBhYmlsaXR5LnByb21pc2UuY2F0Y2goZnVuY3Rpb24gKCkge30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRPbi5wdXNoKHJlbmRlckNvbXBsZXRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGFzay5jYW5jZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vYmpzLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYW5ub3RhdGlvbnNQcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2xlYW51cCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwod2FpdE9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNsZWFudXBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc2V0U3RhdHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdDbGVhbnVwID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cnlDbGVhbnVwKHJlc2V0U3RhdHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX3RyeUNsZWFudXBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3RyeUNsZWFudXAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNldFN0YXRzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucGVuZGluZ0NsZWFudXAgfHwgT2JqZWN0LmtleXModGhpcy5pbnRlbnRTdGF0ZXMpLnNvbWUoZnVuY3Rpb24gKGludGVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGludGVudFN0YXRlID0gdGhpcy5pbnRlbnRTdGF0ZXNbaW50ZW50XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcy5sZW5ndGggIT09IDAgfHwgaW50ZW50U3RhdGUucmVjZWl2aW5nT3BlcmF0b3JMaXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5pbnRlbnRTdGF0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGludGVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuaW50ZW50U3RhdGVzW2ludGVudF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9ianMuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbm5vdGF0aW9uc1Byb21pc2UgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNldFN0YXRzICYmIHRoaXMuX3N0YXRzIGluc3RhbmNlb2YgX2RvbV91dGlscy5TdGF0VGltZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRzID0gbmV3IF9kb21fdXRpbHMuU3RhdFRpbWVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdDbGVhbnVwID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfc3RhcnRSZW5kZXJQYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9zdGFydFJlbmRlclBhZ2UodHJhbnNwYXJlbmN5LCBpbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGludGVudFN0YXRlID0gdGhpcy5pbnRlbnRTdGF0ZXNbaW50ZW50XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW50ZW50U3RhdGUuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50U3RhdGUuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eS5yZXNvbHZlKHRyYW5zcGFyZW5jeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9yZW5kZXJQYWdlQ2h1bmtcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3JlbmRlclBhZ2VDaHVuayhvcGVyYXRvckxpc3RDaHVuaywgaW50ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnRlbnRTdGF0ZSA9IHRoaXMuaW50ZW50U3RhdGVzW2ludGVudF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gb3BlcmF0b3JMaXN0Q2h1bmsubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0LmZuQXJyYXkucHVzaChvcGVyYXRvckxpc3RDaHVuay5mbkFycmF5W2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudFN0YXRlLm9wZXJhdG9yTGlzdC5hcmdzQXJyYXkucHVzaChvcGVyYXRvckxpc3RDaHVuay5hcmdzQXJyYXlbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0Lmxhc3RDaHVuayA9IG9wZXJhdG9yTGlzdENodW5rLmxhc3RDaHVuaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgaW50ZW50U3RhdGUucmVuZGVyVGFza3MubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrc1tfaV0ub3BlcmF0b3JMaXN0Q2hhbmdlZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhdG9yTGlzdENodW5rLmxhc3RDaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50U3RhdGUucmVjZWl2aW5nT3BlcmF0b3JMaXN0ID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyeUNsZWFudXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicGFnZU51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYWdlSW5kZXggKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicm90YXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYWdlSW5mby5yb3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZWZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhZ2VJbmZvLnJlZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInVzZXJVbml0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYWdlSW5mby51c2VyVW5pdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInZpZXdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhZ2VJbmZvLnZpZXc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJzdGF0c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdHMgaW5zdGFuY2VvZiBfZG9tX3V0aWxzLlN0YXRUaW1lciA/IHRoaXMuX3N0YXRzIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQREZQYWdlUHJveHk7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuUERGUGFnZVByb3h5ID0gUERGUGFnZVByb3h5O1xuXG4gICAgICAgICAgICAgICAgdmFyIExvb3BiYWNrUG9ydCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gTG9vcGJhY2tQb3J0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWZlciA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMb29wYmFja1BvcnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmZXIgPSBkZWZlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZlcnJlZCA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoTG9vcGJhY2tQb3J0LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJwb3N0TWVzc2FnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwb3N0TWVzc2FnZShvYmosIHRyYW5zZmVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjbG9uZVZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3R5cGVvZih2YWx1ZSkgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2xvbmVkLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xvbmVkLmdldCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIsIHJlc3VsdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChidWZmZXIgPSB2YWx1ZS5idWZmZXIpICYmICgwLCBfdXRpbC5pc0FycmF5QnVmZmVyKShidWZmZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZmVyYWJsZSA9IHRyYW5zZmVycyAmJiB0cmFuc2ZlcnMuaW5jbHVkZXMoYnVmZmVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gYnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHJhbnNmZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyB2YWx1ZS5jb25zdHJ1Y3RvcihidWZmZXIsIHZhbHVlLmJ5dGVPZmZzZXQsIHZhbHVlLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyB2YWx1ZS5jb25zdHJ1Y3Rvcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmVkLnNldCh2YWx1ZSwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IFtdIDoge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9uZWQuc2V0KHZhbHVlLCByZXN1bHQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2MgPSB2b2lkIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSB2YWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICghKGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHAsIGkpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVzYy52YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGRlc2MudmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gY2xvbmVWYWx1ZShkZXNjLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZGVmZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBvYmpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xvbmVkID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBjbG9uZVZhbHVlKG9iailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZlcnJlZC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNS5fbGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIF90aGlzNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiYWRkRXZlbnRMaXN0ZW5lclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKG5hbWUsIGxpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlbW92ZUV2ZW50TGlzdGVuZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCBsaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwidGVybWluYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRlcm1pbmF0ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTG9vcGJhY2tQb3J0O1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkxvb3BiYWNrUG9ydCA9IExvb3BiYWNrUG9ydDtcblxuICAgICAgICAgICAgICAgIHZhciBQREZXb3JrZXIgPSBmdW5jdGlvbiBQREZXb3JrZXJDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGRmV29ya2VyUG9ydHMgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEZha2VXb3JrZXJJZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmYWtlV29ya2VyRmlsZXNMb2FkZWRDYXBhYmlsaXR5O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9nZXRXb3JrZXJTcmMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3dvcmtlcl9vcHRpb25zLkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF93b3JrZXJfb3B0aW9ucy5HbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmYWxsYmFja1dvcmtlclNyYyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsbGJhY2tXb3JrZXJTcmM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gXCJHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyY1wiIHNwZWNpZmllZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldE1haW5UaHJlYWRXb3JrZXJNZXNzYWdlSGFuZGxlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cuZXh0cmFjdGhpZ2hsaWdodHNXb3JrZXIgJiYgd2luZG93LmV4dHJhY3RoaWdobGlnaHRzV29ya2VyLldvcmtlck1lc3NhZ2VIYW5kbGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7fVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNldHVwRmFrZVdvcmtlckdsb2JhbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYWtlV29ya2VyRmlsZXNMb2FkZWRDYXBhYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZha2VXb3JrZXJGaWxlc0xvYWRlZENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZmFrZVdvcmtlckZpbGVzTG9hZGVkQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYWluV29ya2VyTWVzc2FnZUhhbmRsZXIgPSBnZXRNYWluVGhyZWFkV29ya2VyTWVzc2FnZUhhbmRsZXIoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1haW5Xb3JrZXJNZXNzYWdlSGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZha2VXb3JrZXJGaWxlc0xvYWRlZENhcGFiaWxpdHkucmVzb2x2ZShtYWluV29ya2VyTWVzc2FnZUhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWtlV29ya2VyRmlsZXNMb2FkZWRDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb2FkZXIgPSBmYWtlV29ya2VyRmlsZXNMb2FkZXIgfHwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX2RvbV91dGlscy5sb2FkU2NyaXB0KShfZ2V0V29ya2VyU3JjKCkpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LmV4dHJhY3RoaWdobGlnaHRzV29ya2VyLldvcmtlck1lc3NhZ2VIYW5kbGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyKCkudGhlbihmYWtlV29ya2VyRmlsZXNMb2FkZWRDYXBhYmlsaXR5LnJlc29sdmUsIGZha2VXb3JrZXJGaWxlc0xvYWRlZENhcGFiaWxpdHkucmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWtlV29ya2VyRmlsZXNMb2FkZWRDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVDRE5XcmFwcGVyKHVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSAnaW1wb3J0U2NyaXB0cyhcXCcnICsgdXJsICsgJ1xcJyk7JztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdXRpbC5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt3cmFwcGVyXSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFBERldvcmtlciA9XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUERGV29ya2VyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlZjYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjYkbmFtZSA9IF9yZWY2Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gX3JlZjYkbmFtZSA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWY2JG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmNiRwb3J0ID0gX3JlZjYucG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQgPSBfcmVmNiRwb3J0ID09PSB2b2lkIDAgPyBudWxsIDogX3JlZjYkcG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWY2JHBvc3RNZXNzYWdlVHJhbiA9IF9yZWY2LnBvc3RNZXNzYWdlVHJhbnNmZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2VUcmFuc2ZlcnMgPSBfcmVmNiRwb3N0TWVzc2FnZVRyYW4gPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmNiRwb3N0TWVzc2FnZVRyYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmNiR2ZXJib3NpdHkgPSBfcmVmNi52ZXJib3NpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NpdHkgPSBfcmVmNiR2ZXJib3NpdHkgPT09IHZvaWQgMCA/ICgwLCBfdXRpbC5nZXRWZXJib3NpdHlMZXZlbCkoKSA6IF9yZWY2JHZlcmJvc2l0eTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUERGV29ya2VyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9ydCAmJiBwZGZXb3JrZXJQb3J0cy5oYXMocG9ydCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVzZSBtb3JlIHRoYW4gb25lIFBERldvcmtlciBwZXIgcG9ydCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3N0TWVzc2FnZVRyYW5zZmVycyA9IHBvc3RNZXNzYWdlVHJhbnNmZXJzICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52ZXJib3NpdHkgPSB2ZXJib3NpdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9ydCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dlYldvcmtlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VIYW5kbGVyID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmV29ya2VyUG9ydHMuc2V0KHBvcnQsIHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplRnJvbVBvcnQocG9ydCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoUERGV29ya2VyLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX2luaXRpYWxpemVGcm9tUG9ydFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2luaXRpYWxpemVGcm9tUG9ydChwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3J0ID0gcG9ydDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VIYW5kbGVyID0gbmV3IF9tZXNzYWdlX2hhbmRsZXIuTWVzc2FnZUhhbmRsZXIoJ21haW4nLCAnd29ya2VyJywgcG9ydCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VIYW5kbGVyLm9uKCdyZWFkeScsIGZ1bmN0aW9uICgpIHt9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9pbml0aWFsaXplXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIFdvcmtlciAhPT0gJ3VuZGVmaW5lZCcgJiYgIWlzV29ya2VyRGlzYWJsZWQgJiYgIWdldE1haW5UaHJlYWRXb3JrZXJNZXNzYWdlSGFuZGxlcigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdvcmtlclNyYyA9IF9nZXRXb3JrZXJTcmMoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF91dGlsLmlzU2FtZU9yaWdpbikod2luZG93LmxvY2F0aW9uLmhyZWYsIHdvcmtlclNyYykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlclNyYyA9IGNyZWF0ZUNETldyYXBwZXIobmV3IF91dGlsLlVSTCh3b3JrZXJTcmMsIHdpbmRvdy5sb2NhdGlvbikuaHJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcih3b3JrZXJTcmMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZUhhbmRsZXIgPSBuZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcignbWFpbicsICd3b3JrZXInLCB3b3JrZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXJtaW5hdGVFYXJseSA9IGZ1bmN0aW9uIHRlcm1pbmF0ZUVhcmx5KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgb25Xb3JrZXJFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpczYuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM2Ll9yZWFkeUNhcGFiaWxpdHkucmVqZWN0KG5ldyBFcnJvcignV29ya2VyIHdhcyBkZXN0cm95ZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5fc2V0dXBGYWtlV29ya2VyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9uV29ya2VyRXJyb3IgPSBmdW5jdGlvbiBvbldvcmtlckVycm9yKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfdGhpczYuX3dlYldvcmtlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZUVhcmx5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgb25Xb3JrZXJFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCd0ZXN0JywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIG9uV29ya2VyRXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXM2LmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZUVhcmx5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnN1cHBvcnRUeXBlZEFycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM2Ll9tZXNzYWdlSGFuZGxlciA9IG1lc3NhZ2VIYW5kbGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5fcG9ydCA9IHdvcmtlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuX3dlYldvcmtlciA9IHdvcmtlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGF0YS5zdXBwb3J0VHJhbnNmZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5wb3N0TWVzc2FnZVRyYW5zZmVycyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLnNlbmQoJ2NvbmZpZ3VyZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zaXR5OiBfdGhpczYudmVyYm9zaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5fc2V0dXBGYWtlV29ya2VyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUhhbmRsZXIub24oJ3JlYWR5JywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIG9uV29ya2VyRXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXM2LmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZUVhcmx5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRUZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM2Ll9zZXR1cEZha2VXb3JrZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbmRUZXN0ID0gZnVuY3Rpb24gc2VuZFRlc3QoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVzdE9iaiA9IG5ldyBVaW50OEFycmF5KFtfdGhpczYucG9zdE1lc3NhZ2VUcmFuc2ZlcnMgPyAyNTUgOiAwXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUhhbmRsZXIuc2VuZCgndGVzdCcsIHRlc3RPYmosIFt0ZXN0T2JqLmJ1ZmZlcl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ0Nhbm5vdCB1c2UgcG9zdE1lc3NhZ2UgdHJhbnNmZXJzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdE9ialswXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUhhbmRsZXIuc2VuZCgndGVzdCcsIHRlc3RPYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRUZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKSgnVGhlIHdvcmtlciBoYXMgYmVlbiBkaXNhYmxlZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldHVwRmFrZVdvcmtlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX3NldHVwRmFrZVdvcmtlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3NldHVwRmFrZVdvcmtlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczcgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzV29ya2VyRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1NldHRpbmcgdXAgZmFrZSB3b3JrZXIuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNXb3JrZXJEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHVwRmFrZVdvcmtlckdsb2JhbCgpLnRoZW4oZnVuY3Rpb24gKFdvcmtlck1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzNy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM3Ll9yZWFkeUNhcGFiaWxpdHkucmVqZWN0KG5ldyBFcnJvcignV29ya2VyIHdhcyBkZXN0cm95ZWQnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3J0ID0gbmV3IExvb3BiYWNrUG9ydCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNy5fcG9ydCA9IHBvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlkID0gJ2Zha2UnICsgbmV4dEZha2VXb3JrZXJJZCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3b3JrZXJIYW5kbGVyID0gbmV3IF9tZXNzYWdlX2hhbmRsZXIuTWVzc2FnZUhhbmRsZXIoaWQgKyAnX3dvcmtlcicsIGlkLCBwb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JrZXJNZXNzYWdlSGFuZGxlci5zZXR1cCh3b3JrZXJIYW5kbGVyLCBwb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZUhhbmRsZXIgPSBuZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihpZCwgaWQgKyAnX3dvcmtlcicsIHBvcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNy5fbWVzc2FnZUhhbmRsZXIgPSBtZXNzYWdlSGFuZGxlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNy5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczcuX3JlYWR5Q2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKFwiU2V0dGluZyB1cCBmYWtlIHdvcmtlciBmYWlsZWQ6IFxcXCJcIi5jb25jYXQocmVhc29uLm1lc3NhZ2UsIFwiXFxcIi5cIikpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZGVzdHJveVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3dlYldvcmtlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dlYldvcmtlci50ZXJtaW5hdGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dlYldvcmtlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZldvcmtlclBvcnRzLmRlbGV0ZSh0aGlzLl9wb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcnQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlSGFuZGxlci5kZXN0cm95KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlSGFuZGxlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJwcm9taXNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicG9ydFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3J0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwibWVzc2FnZUhhbmRsZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZUhhbmRsZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XSwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImZyb21Qb3J0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tUG9ydChwYXJhbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyYW1zIHx8ICFwYXJhbXMucG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUERGV29ya2VyLmZyb21Qb3J0IC0gaW52YWxpZCBtZXRob2Qgc2lnbmF0dXJlLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGRmV29ya2VyUG9ydHMuaGFzKHBhcmFtcy5wb3J0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZXb3JrZXJQb3J0cy5nZXQocGFyYW1zLnBvcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBERldvcmtlcihwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0V29ya2VyU3JjXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRXb3JrZXJTcmMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2dldFdvcmtlclNyYygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBERldvcmtlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUERGV29ya2VyO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuUERGV29ya2VyID0gUERGV29ya2VyO1xuXG4gICAgICAgICAgICAgICAgdmFyIFdvcmtlclRyYW5zcG9ydCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV29ya2VyVHJhbnNwb3J0KG1lc3NhZ2VIYW5kbGVyLCBsb2FkaW5nVGFzaywgbmV0d29ya1N0cmVhbSwgcGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFdvcmtlclRyYW5zcG9ydCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyID0gbWVzc2FnZUhhbmRsZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nVGFzayA9IGxvYWRpbmdUYXNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uT2JqcyA9IG5ldyBQREZPYmplY3RzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb250TG9hZGVyID0gbmV3IF9mb250X2xvYWRlci5Gb250TG9hZGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jSWQ6IGxvYWRpbmdUYXNrLmRvY0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblVuc3VwcG9ydGVkRmVhdHVyZTogdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUuYmluZCh0aGlzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkNNYXBSZWFkZXJGYWN0b3J5ID0gbmV3IHBhcmFtcy5DTWFwUmVhZGVyRmFjdG9yeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VVcmw6IHBhcmFtcy5jTWFwVXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NvbXByZXNzZWQ6IHBhcmFtcy5jTWFwUGFja2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25ldHdvcmtTdHJlYW0gPSBuZXR3b3JrU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxSZWFkZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RQcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlQ2FjaGUgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VQcm9taXNlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRJbmZvQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHVwTWVzc2FnZUhhbmRsZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFdvcmtlclRyYW5zcG9ydCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZGVzdHJveVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM4ID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXN0cm95Q2FwYWJpbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdHJveUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95Q2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGFzc3dvcmRDYXBhYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkucmVqZWN0KG5ldyBFcnJvcignV29ya2VyIHdhcyBkZXN0cm95ZWQgZHVyaW5nIG9uUGFzc3dvcmQgY2FsbGJhY2snKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2FpdE9uID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZUNhY2hlLmZvckVhY2goZnVuY3Rpb24gKHBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdE9uLnB1c2gocGFnZS5fZGVzdHJveSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZUNhY2hlID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZVByb21pc2VzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXJtaW5hdGVkID0gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoJ1Rlcm1pbmF0ZScsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0T24ucHVzaCh0ZXJtaW5hdGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwod2FpdE9uKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzOC5mb250TG9hZGVyLmNsZWFyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpczguX25ldHdvcmtTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczguX25ldHdvcmtTdHJlYW0uY2FuY2VsQWxsUmVxdWVzdHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzOC5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzOC5tZXNzYWdlSGFuZGxlci5kZXN0cm95KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczgubWVzc2FnZUhhbmRsZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczguZGVzdHJveUNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJzZXR1cE1lc3NhZ2VIYW5kbGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldHVwTWVzc2FnZUhhbmRsZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlSGFuZGxlciA9IHRoaXMubWVzc2FnZUhhbmRsZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nVGFzayA9IHRoaXMubG9hZGluZ1Rhc2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCdHZXRSZWFkZXInLCBmdW5jdGlvbiAoZGF0YSwgc2luaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzOSA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHRoaXMuX25ldHdvcmtTdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnVsbFJlYWRlciA9IHRoaXMuX25ldHdvcmtTdHJlYW0uZ2V0RnVsbFJlYWRlcigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mdWxsUmVhZGVyLm9uUHJvZ3Jlc3MgPSBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM5Ll9sYXN0UHJvZ3Jlc3MgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogZXZ0LmxvYWRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWw6IGV2dC50b3RhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rLm9uUHVsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczkuX2Z1bGxSZWFkZXIucmVhZCgpLnRoZW4oZnVuY3Rpb24gKF9yZWY3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IF9yZWY3LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IF9yZWY3LmRvbmU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmsuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKCgwLCBfdXRpbC5pc0FycmF5QnVmZmVyKSh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpLCAxLCBbdmFsdWVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmsuZXJyb3IocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmsub25DYW5jZWwgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM5Ll9mdWxsUmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCdSZWFkZXJIZWFkZXJzUmVhZHknLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMTAgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGVyc0NhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZnVsbFJlYWRlciA9IHRoaXMuX2Z1bGxSZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsUmVhZGVyLmhlYWRlcnNSZWFkeS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZ1bGxSZWFkZXIuaXNTdHJlYW1pbmdTdXBwb3J0ZWQgfHwgIWZ1bGxSZWFkZXIuaXNSYW5nZVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMxMC5fbGFzdFByb2dyZXNzICYmIGxvYWRpbmdUYXNrLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdUYXNrLm9uUHJvZ3Jlc3MoX3RoaXMxMC5fbGFzdFByb2dyZXNzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxSZWFkZXIub25Qcm9ncmVzcyA9IGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2FkaW5nVGFzay5vblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZ1Rhc2sub25Qcm9ncmVzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogZXZ0LmxvYWRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWw6IGV2dC50b3RhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNDYXBhYmlsaXR5LnJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1N0cmVhbWluZ1N1cHBvcnRlZDogZnVsbFJlYWRlci5pc1N0cmVhbWluZ1N1cHBvcnRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSYW5nZVN1cHBvcnRlZDogZnVsbFJlYWRlci5pc1JhbmdlU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50TGVuZ3RoOiBmdWxsUmVhZGVyLmNvbnRlbnRMZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGhlYWRlcnNDYXBhYmlsaXR5LnJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGVhZGVyc0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCdHZXRSYW5nZVJlYWRlcicsIGZ1bmN0aW9uIChkYXRhLCBzaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSh0aGlzLl9uZXR3b3JrU3RyZWFtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlUmVhZGVyID0gdGhpcy5fbmV0d29ya1N0cmVhbS5nZXRSYW5nZVJlYWRlcihkYXRhLmJlZ2luLCBkYXRhLmVuZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmsub25QdWxsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlUmVhZGVyLnJlYWQoKS50aGVuKGZ1bmN0aW9uIChfcmVmOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBfcmVmOC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBfcmVmOC5kb25lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSgoMCwgX3V0aWwuaXNBcnJheUJ1ZmZlcikodmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luay5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSwgMSwgW3ZhbHVlXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rLmVycm9yKHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rLm9uQ2FuY2VsID0gZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlUmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCdHZXREb2MnLCBmdW5jdGlvbiAoX3JlZjkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwZGZJbmZvID0gX3JlZjkucGRmSW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubnVtUGFnZXMgPSBwZGZJbmZvLm51bVBhZ2VzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZGZEb2N1bWVudCA9IG5ldyBQREZEb2N1bWVudFByb3h5KHBkZkluZm8sIHRoaXMsIGxvYWRpbmdUYXNrKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZ1Rhc2suX2NhcGFiaWxpdHkucmVzb2x2ZSh0aGlzLnBkZkRvY3VtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCdQYXNzd29yZFJlcXVlc3QnLCBmdW5jdGlvbiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMxMSA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRpbmdUYXNrLm9uUGFzc3dvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXBkYXRlUGFzc3dvcmQgPSBmdW5jdGlvbiB1cGRhdGVQYXNzd29yZChwYXNzd29yZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczExLl9wYXNzd29yZENhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZDogcGFzc3dvcmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdUYXNrLm9uUGFzc3dvcmQodXBkYXRlUGFzc3dvcmQsIGV4Y2VwdGlvbi5jb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkucmVqZWN0KGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5yZWplY3QobmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKGV4Y2VwdGlvbi5tZXNzYWdlLCBleGNlcHRpb24uY29kZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFzc3dvcmRDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSGFuZGxlci5vbignUGFzc3dvcmRFeGNlcHRpb24nLCBmdW5jdGlvbiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nVGFzay5fY2FwYWJpbGl0eS5yZWplY3QobmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKGV4Y2VwdGlvbi5tZXNzYWdlLCBleGNlcHRpb24uY29kZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUhhbmRsZXIub24oJ0ludmFsaWRQREYnLCBmdW5jdGlvbiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nVGFzay5fY2FwYWJpbGl0eS5yZWplY3QobmV3IF91dGlsLkludmFsaWRQREZFeGNlcHRpb24oZXhjZXB0aW9uLm1lc3NhZ2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCdNaXNzaW5nUERGJywgZnVuY3Rpb24gKGV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZ1Rhc2suX2NhcGFiaWxpdHkucmVqZWN0KG5ldyBfdXRpbC5NaXNzaW5nUERGRXhjZXB0aW9uKGV4Y2VwdGlvbi5tZXNzYWdlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSGFuZGxlci5vbignVW5leHBlY3RlZFJlc3BvbnNlJywgZnVuY3Rpb24gKGV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZ1Rhc2suX2NhcGFiaWxpdHkucmVqZWN0KG5ldyBfdXRpbC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24oZXhjZXB0aW9uLm1lc3NhZ2UsIGV4Y2VwdGlvbi5zdGF0dXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCdVbmtub3duRXJyb3InLCBmdW5jdGlvbiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nVGFzay5fY2FwYWJpbGl0eS5yZWplY3QobmV3IF91dGlsLlVua25vd25FcnJvckV4Y2VwdGlvbihleGNlcHRpb24ubWVzc2FnZSwgZXhjZXB0aW9uLmRldGFpbHMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCdEYXRhTG9hZGVkJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2FkaW5nVGFzay5vblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZ1Rhc2sub25Qcm9ncmVzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogZGF0YS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsOiBkYXRhLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkSW5mb0NhcGFiaWxpdHkucmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCdTdGFydFJlbmRlclBhZ2UnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFnZSA9IHRoaXMucGFnZUNhY2hlW2RhdGEucGFnZUluZGV4XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZS5fc3RhdHMudGltZUVuZCgnUGFnZSBSZXF1ZXN0Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UuX3N0YXJ0UmVuZGVyUGFnZShkYXRhLnRyYW5zcGFyZW5jeSwgZGF0YS5pbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUhhbmRsZXIub24oJ1JlbmRlclBhZ2VDaHVuaycsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWdlID0gdGhpcy5wYWdlQ2FjaGVbZGF0YS5wYWdlSW5kZXhdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlLl9yZW5kZXJQYWdlQ2h1bmsoZGF0YS5vcGVyYXRvckxpc3QsIGRhdGEuaW50ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCdjb21tb25vYmonLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMTIgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZGF0YSA9IF9zbGljZWRUb0FycmF5KGRhdGEsIDMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gX2RhdGFbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IF9kYXRhWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkRGF0YSA9IF9kYXRhWzJdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb21tb25PYmpzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0ZvbnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyYW1zID0gdGhpcy5fcGFyYW1zO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgnZXJyb3InIGluIGV4cG9ydGVkRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV4cG9ydGVkRXJyb3IgPSBleHBvcnRlZERhdGEuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJFcnJvciBkdXJpbmcgZm9udCBsb2FkaW5nOiBcIi5jb25jYXQoZXhwb3J0ZWRFcnJvcikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25PYmpzLnJlc29sdmUoaWQsIGV4cG9ydGVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udFJlZ2lzdHJ5ID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnBkZkJ1ZyAmJiBfZ2xvYmFsX3Njb3BlLmRlZmF1bHQuRm9udEluc3BlY3RvciAmJiBfZ2xvYmFsX3Njb3BlLmRlZmF1bHQuRm9udEluc3BlY3Rvci5lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250UmVnaXN0cnkgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJGb250OiBmdW5jdGlvbiByZWdpc3RlckZvbnQoZm9udCwgdXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9nbG9iYWxfc2NvcGUuZGVmYXVsdFsnRm9udEluc3BlY3RvciddLmZvbnRBZGRlZChmb250LCB1cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udCA9IG5ldyBfZm9udF9sb2FkZXIuRm9udEZhY2VPYmplY3QoZXhwb3J0ZWREYXRhLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQ6IHBhcmFtcy5pc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlRm9udEZhY2U6IHBhcmFtcy5kaXNhYmxlRm9udEZhY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVFcnJvcnM6IHBhcmFtcy5pZ25vcmVFcnJvcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblVuc3VwcG9ydGVkRmVhdHVyZTogdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRSZWdpc3RyeTogZm9udFJlZ2lzdHJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbnRMb2FkZXIuYmluZChmb250KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTIuY29tbW9uT2Jqcy5yZXNvbHZlKGlkLCBmb250KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCdGb250RmFsbGJhY2snLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczEyLmNvbW1vbk9ianMucmVzb2x2ZShpZCwgZm9udCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRm9udFBhdGgnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbk9ianMucmVzb2x2ZShpZCwgZXhwb3J0ZWREYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgdW5rbm93biBjb21tb24gb2JqZWN0IHR5cGUgXCIuY29uY2F0KHR5cGUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCdvYmonLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2RhdGEyID0gX3NsaWNlZFRvQXJyYXkoZGF0YSwgNCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBfZGF0YTJbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUluZGV4ID0gX2RhdGEyWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBfZGF0YTJbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VEYXRhID0gX2RhdGEyWzNdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFnZVByb3h5ID0gdGhpcy5wYWdlQ2FjaGVbcGFnZUluZGV4XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhZ2VQcm94eS5vYmpzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0pwZWdTdHJlYW0nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoaW1nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0Vycm9yIGR1cmluZyBKUEVHIGltYWdlIGxvYWRpbmcnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWcuc3JjID0gaW1hZ2VEYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChpbWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VQcm94eS5vYmpzLnJlc29sdmUoaWQsIGltZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnSW1hZ2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlUHJveHkub2Jqcy5yZXNvbHZlKGlkLCBpbWFnZURhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgTUFYX0lNQUdFX1NJWkVfVE9fU1RPUkUgPSA4MDAwMDAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZURhdGEgJiYgJ2RhdGEnIGluIGltYWdlRGF0YSAmJiBpbWFnZURhdGEuZGF0YS5sZW5ndGggPiBNQVhfSU1BR0VfU0laRV9UT19TVE9SRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVByb3h5LmNsZWFudXBBZnRlclJlbmRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCB1bmtub3duIG9iamVjdCB0eXBlIFwiLmNvbmNhdCh0eXBlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSGFuZGxlci5vbignRG9jUHJvZ3Jlc3MnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGluZ1Rhc2sub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdUYXNrLm9uUHJvZ3Jlc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWQ6IGRhdGEubG9hZGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbDogZGF0YS50b3RhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUhhbmRsZXIub24oJ1BhZ2VFcnJvcicsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWdlID0gdGhpcy5wYWdlQ2FjaGVbZGF0YS5wYWdlTnVtIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW50ZW50U3RhdGUgPSBwYWdlLmludGVudFN0YXRlc1tkYXRhLmludGVudF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnRlbnRTdGF0ZS5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50U3RhdGUuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eS5yZWplY3QoZGF0YS5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludGVudFN0YXRlLm9wZXJhdG9yTGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudFN0YXRlLm9wZXJhdG9yTGlzdC5sYXN0Q2h1bmsgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrc1tpXS5vcGVyYXRvckxpc3RDaGFuZ2VkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUhhbmRsZXIub24oJ1Vuc3VwcG9ydGVkRmVhdHVyZScsIHRoaXMuX29uVW5zdXBwb3J0ZWRGZWF0dXJlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUhhbmRsZXIub24oJ0pwZWdEZWNvZGUnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignV29ya2VyIHdhcyBkZXN0cm95ZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignXCJkb2N1bWVudFwiIGlzIG5vdCBkZWZpbmVkLicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9kYXRhMyA9IF9zbGljZWRUb0FycmF5KGRhdGEsIDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlVXJsID0gX2RhdGEzWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMgPSBfZGF0YTNbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnRzICE9PSAzICYmIGNvbXBvbmVudHMgIT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdPbmx5IDMgY29tcG9uZW50cyBvciAxIGNvbXBvbmVudCBjYW4gYmUgcmV0dXJuZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gaW1nLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gaW1nLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSB3aWR0aCAqIGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJnYmFMZW5ndGggPSBzaXplICogNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZiA9IG5ldyBVaW50OENsYW1wZWRBcnJheShzaXplICogY29tcG9uZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0bXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wQ2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcENhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0bXBDdHggPSB0bXBDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wQ3R4LmRyYXdJbWFnZShpbWcsIDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHRtcEN0eC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCkuZGF0YTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50cyA9PT0gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgcmdiYUxlbmd0aDsgaSArPSA0LCBqICs9IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZbal0gPSBkYXRhW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZltqICsgMV0gPSBkYXRhW2kgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZbaiArIDJdID0gZGF0YVtpICsgMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tcG9uZW50cyA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kyID0gMCwgX2ogPSAwOyBfaTIgPCByZ2JhTGVuZ3RoOyBfaTIgKz0gNCwgX2orKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zltfal0gPSBkYXRhW19pMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGJ1ZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWcub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignSnBlZ0RlY29kZSBmYWlsZWQgdG8gbG9hZCBpbWFnZScpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGltYWdlVXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSGFuZGxlci5vbignRmV0Y2hCdWlsdEluQ01hcCcsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdXb3JrZXIgd2FzIGRlc3Ryb3llZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuQ01hcFJlYWRlckZhY3RvcnkuZmV0Y2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGRhdGEubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX29uVW5zdXBwb3J0ZWRGZWF0dXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9vblVuc3VwcG9ydGVkRmVhdHVyZShfcmVmMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZlYXR1cmVJZCA9IF9yZWYxMC5mZWF0dXJlSWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2FkaW5nVGFzay5vblVuc3VwcG9ydGVkRmVhdHVyZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nVGFzay5vblVuc3VwcG9ydGVkRmVhdHVyZShmZWF0dXJlSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXREYXRhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldERhdGEoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgnR2V0RGF0YScsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UGFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRQYWdlKHBhZ2VOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMTMgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihwYWdlTnVtYmVyKSB8fCBwYWdlTnVtYmVyIDw9IDAgfHwgcGFnZU51bWJlciA+IHRoaXMubnVtUGFnZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ0ludmFsaWQgcGFnZSByZXF1ZXN0JykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhZ2VJbmRleCA9IHBhZ2VOdW1iZXIgLSAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWdlSW5kZXggaW4gdGhpcy5wYWdlUHJvbWlzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhZ2VQcm9taXNlc1twYWdlSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgnR2V0UGFnZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogcGFnZUluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHBhZ2VJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMxMy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zcG9ydCBkZXN0cm95ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhZ2UgPSBuZXcgUERGUGFnZVByb3h5KHBhZ2VJbmRleCwgcGFnZUluZm8sIF90aGlzMTMsIF90aGlzMTMuX3BhcmFtcy5wZGZCdWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxMy5wYWdlQ2FjaGVbcGFnZUluZGV4XSA9IHBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZVByb21pc2VzW3BhZ2VJbmRleF0gPSBwcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldFBhZ2VJbmRleFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRQYWdlSW5kZXgocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgnR2V0UGFnZUluZGV4Jywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmOiByZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihyZWFzb24pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRBbm5vdGF0aW9uc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRBbm5vdGF0aW9ucyhwYWdlSW5kZXgsIGludGVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoJ0dldEFubm90YXRpb25zJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUluZGV4OiBwYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnQ6IGludGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldERlc3RpbmF0aW9uc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZXN0aW5hdGlvbnMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgnR2V0RGVzdGluYXRpb25zJywgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXREZXN0aW5hdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZXN0aW5hdGlvbihpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGlkICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignSW52YWxpZCBkZXN0aW5hdGlvbiByZXF1ZXN0LicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgnR2V0RGVzdGluYXRpb24nLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRQYWdlTGFiZWxzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFBhZ2VMYWJlbHMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgnR2V0UGFnZUxhYmVscycsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UGFnZU1vZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UGFnZU1vZGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgnR2V0UGFnZU1vZGUnLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldE9wZW5BY3Rpb25EZXN0aW5hdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRPcGVuQWN0aW9uRGVzdGluYXRpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgnZ2V0T3BlbkFjdGlvbkRlc3RpbmF0aW9uJywgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRBdHRhY2htZW50c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRBdHRhY2htZW50cygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCdHZXRBdHRhY2htZW50cycsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0SmF2YVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRKYXZhU2NyaXB0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoJ0dldEphdmFTY3JpcHQnLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldE91dGxpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0T3V0bGluZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCdHZXRPdXRsaW5lJywgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRQZXJtaXNzaW9uc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRQZXJtaXNzaW9ucygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCdHZXRQZXJtaXNzaW9ucycsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0TWV0YWRhdGFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TWV0YWRhdGEoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczE0ID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoJ0dldE1ldGFkYXRhJywgbnVsbCkudGhlbihmdW5jdGlvbiAocmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvOiByZXN1bHRzWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiByZXN1bHRzWzFdID8gbmV3IF9tZXRhZGF0YS5NZXRhZGF0YShyZXN1bHRzWzFdKSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWU6IF90aGlzMTQuX2Z1bGxSZWFkZXIgPyBfdGhpczE0Ll9mdWxsUmVhZGVyLmZpbGVuYW1lIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRTdGF0c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdGF0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCdHZXRTdGF0cycsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwic3RhcnRDbGVhbnVwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN0YXJ0Q2xlYW51cCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMTUgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCdDbGVhbnVwJywgbnVsbCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBfdGhpczE1LnBhZ2VDYWNoZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhZ2UgPSBfdGhpczE1LnBhZ2VDYWNoZVtpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UuY2xlYW51cCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxNS5jb21tb25PYmpzLmNsZWFyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTUuZm9udExvYWRlci5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImxvYWRpbmdQYXJhbXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHRoaXMuX3BhcmFtcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsICdsb2FkaW5nUGFyYW1zJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUF1dG9GZXRjaDogcGFyYW1zLmRpc2FibGVBdXRvRmV0Y2gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQ3JlYXRlT2JqZWN0VVJMOiBwYXJhbXMuZGlzYWJsZUNyZWF0ZU9iamVjdFVSTCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVGb250RmFjZTogcGFyYW1zLmRpc2FibGVGb250RmFjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlRGVjb2RlclN1cHBvcnQ6IHBhcmFtcy5uYXRpdmVJbWFnZURlY29kZXJTdXBwb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdvcmtlclRyYW5zcG9ydDtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBERk9iamVjdHMgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBERk9iamVjdHMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBERk9iamVjdHMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2JqcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhQREZPYmplY3RzLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfZW5zdXJlT2JqXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9lbnN1cmVPYmoob2JqSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX29ianNbb2JqSWRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2Jqc1tvYmpJZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2Jqc1tvYmpJZF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5OiAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0KG9iaklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vuc3VyZU9iaihvYmpJZCkuY2FwYWJpbGl0eS5wcm9taXNlLnRoZW4oY2FsbGJhY2spO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLl9vYmpzW29iaklkXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9iaiB8fCAhb2JqLnJlc29sdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZXF1ZXN0aW5nIG9iamVjdCB0aGF0IGlzbid0IHJlc29sdmVkIHlldCBcIi5jb25jYXQob2JqSWQsIFwiLlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJoYXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaGFzKG9iaklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLl9vYmpzW29iaklkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iaiA/IG9iai5yZXNvbHZlZCA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVzb2x2ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNvbHZlKG9iaklkLCBkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLl9lbnN1cmVPYmoob2JqSWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5yZXNvbHZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLmNhcGFiaWxpdHkucmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNsZWFyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vYmpzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQREZPYmplY3RzO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgUmVuZGVyVGFzayA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVuZGVyVGFzayhpbnRlcm5hbFJlbmRlclRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUmVuZGVyVGFzayk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbFJlbmRlclRhc2sgPSBpbnRlcm5hbFJlbmRlclRhc2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNvbnRpbnVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFJlbmRlclRhc2ssIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNhbmNlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsUmVuZGVyVGFzay5jYW5jZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInRoZW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuZGVwcmVjYXRlZCkoJ1JlbmRlclRhc2sudGhlbiBtZXRob2QsIHVzZSB0aGUgYHByb21pc2VgIGdldHRlciBpbnN0ZWFkLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlLnRoZW4uYXBwbHkodGhpcy5wcm9taXNlLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicHJvbWlzZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faW50ZXJuYWxSZW5kZXJUYXNrLmNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZW5kZXJUYXNrO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSW50ZXJuYWxSZW5kZXJUYXNrID0gZnVuY3Rpb24gSW50ZXJuYWxSZW5kZXJUYXNrQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNhbnZhc0luUmVuZGVyaW5nID0gbmV3IFdlYWtTZXQoKTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgSW50ZXJuYWxSZW5kZXJUYXNrID1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJbnRlcm5hbFJlbmRlclRhc2soX3JlZjExKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IF9yZWYxMS5jYWxsYmFjayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IF9yZWYxMS5wYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpzID0gX3JlZjExLm9ianMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb25PYmpzID0gX3JlZjExLmNvbW1vbk9ianMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QgPSBfcmVmMTEub3BlcmF0b3JMaXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZU51bWJlciA9IF9yZWYxMS5wYWdlTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzRmFjdG9yeSA9IF9yZWYxMS5jYW52YXNGYWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xDb250ZXh0ID0gX3JlZjExLndlYkdMQ29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYxMSR1c2VSZXF1ZXN0QW5pbSA9IF9yZWYxMS51c2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBfcmVmMTEkdXNlUmVxdWVzdEFuaW0gPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjExJHVzZVJlcXVlc3RBbmltLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjExJHBkZkJ1ZyA9IF9yZWYxMS5wZGZCdWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZCdWcgPSBfcmVmMTEkcGRmQnVnID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYxMSRwZGZCdWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9ucyA9IF9yZWYxMS5hbm5vdGF0aW9ucztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSW50ZXJuYWxSZW5kZXJUYXNrKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9ianMgPSBvYmpzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbk9ianMgPSBjb21tb25PYmpzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZXJhdG9yTGlzdElkeCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlcmF0b3JMaXN0ID0gb3BlcmF0b3JMaXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VOdW1iZXIgPSBwYWdlTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbnZhc0ZhY3RvcnkgPSBjYW52YXNGYWN0b3J5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndlYkdMQ29udGV4dCA9IHdlYkdMQ29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGRmQnVnID0gcGRmQnVnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmFwaGljc1JlYWR5Q2FsbGJhY2sgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyYXBoaWNzUmVhZHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gdXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSB0cnVlICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFzayA9IG5ldyBSZW5kZXJUYXNrKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250aW51ZUJvdW5kID0gdGhpcy5fY29udGludWUuYmluZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVOZXh0Qm91bmQgPSB0aGlzLl9zY2hlZHVsZU5leHQuYmluZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmV4dEJvdW5kID0gdGhpcy5fbmV4dC5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYW52YXMgPSBwYXJhbXMuY2FudmFzQ29udGV4dC5jYW52YXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoSW50ZXJuYWxSZW5kZXJUYXNrLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaW5pdGlhbGl6ZUdyYXBoaWNzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0aWFsaXplR3JhcGhpY3MoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNwYXJlbmN5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2FudmFzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbnZhc0luUmVuZGVyaW5nLmhhcyh0aGlzLl9jYW52YXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVzZSB0aGUgc2FtZSBjYW52YXMgZHVyaW5nIG11bHRpcGxlIHJlbmRlcigpIG9wZXJhdGlvbnMuICcgKyAnVXNlIGRpZmZlcmVudCBjYW52YXMgb3IgZW5zdXJlIHByZXZpb3VzIG9wZXJhdGlvbnMgd2VyZSAnICsgJ2NhbmNlbGxlZCBvciBjb21wbGV0ZWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzSW5SZW5kZXJpbmcuYWRkKHRoaXMuX2NhbnZhcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wZGZCdWcgJiYgX2dsb2JhbF9zY29wZS5kZWZhdWx0LlN0ZXBwZXJNYW5hZ2VyICYmIF9nbG9iYWxfc2NvcGUuZGVmYXVsdC5TdGVwcGVyTWFuYWdlci5lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGVwcGVyID0gX2dsb2JhbF9zY29wZS5kZWZhdWx0LlN0ZXBwZXJNYW5hZ2VyLmNyZWF0ZSh0aGlzLnBhZ2VOdW1iZXIgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ZXBwZXIuaW5pdCh0aGlzLm9wZXJhdG9yTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGVwcGVyLm5leHRCcmVha1BvaW50ID0gdGhpcy5zdGVwcGVyLmdldE5leHRCcmVha1BvaW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyRwYXJhbXMgPSB0aGlzLnBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXNDb250ZXh0ID0gX3RoaXMkcGFyYW1zLmNhbnZhc0NvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld3BvcnQgPSBfdGhpcyRwYXJhbXMudmlld3BvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtID0gX3RoaXMkcGFyYW1zLnRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZUxheWVyID0gX3RoaXMkcGFyYW1zLmltYWdlTGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZCA9IF90aGlzJHBhcmFtcy5iYWNrZ3JvdW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZnggPSBuZXcgX2NhbnZhcy5DYW52YXNHcmFwaGljcyhjYW52YXNDb250ZXh0LCB0aGlzLmNvbW1vbk9ianMsIHRoaXMub2JqcywgdGhpcy5jYW52YXNGYWN0b3J5LCB0aGlzLndlYkdMQ29udGV4dCwgaW1hZ2VMYXllciwgdGhpcy5hbm5vdGF0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdmeC5iZWdpbkRyYXdpbmcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdwb3J0OiB2aWV3cG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BhcmVuY3k6IHRyYW5zcGFyZW5jeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBiYWNrZ3JvdW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlcmF0b3JMaXN0SWR4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NSZWFkeSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NSZWFkeUNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjYW5jZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxsZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5nZngpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdmeC5lbmREcmF3aW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYW52YXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXNJblJlbmRlcmluZy5kZWxldGUodGhpcy5fY2FudmFzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFjayhlcnJvciB8fCBuZXcgX2RvbV91dGlscy5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24oXCJSZW5kZXJpbmcgY2FuY2VsbGVkLCBwYWdlIFwiLmNvbmNhdCh0aGlzLnBhZ2VOdW1iZXIpLCAnY2FudmFzJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwib3BlcmF0b3JMaXN0Q2hhbmdlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gb3BlcmF0b3JMaXN0Q2hhbmdlZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5ncmFwaGljc1JlYWR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjayA9IHRoaXMuX2NvbnRpbnVlQm91bmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGVwcGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGVwcGVyLnVwZGF0ZU9wZXJhdG9yTGlzdCh0aGlzLm9wZXJhdG9yTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJ1bm5pbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRpbnVlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfY29udGludWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9jb250aW51ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnVubmluZyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGFzay5vbkNvbnRpbnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YXNrLm9uQ29udGludWUodGhpcy5fc2NoZWR1bGVOZXh0Qm91bmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zY2hlZHVsZU5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9zY2hlZHVsZU5leHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9zY2hlZHVsZU5leHQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMxNiA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl91c2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxNi5fbmV4dEJvdW5kKCkuY2F0Y2goX3RoaXMxNi5jYW5jZWwuYmluZChfdGhpczE2KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4odGhpcy5fbmV4dEJvdW5kKS5jYXRjaCh0aGlzLmNhbmNlbC5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9uZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX25leHQyID0gX2FzeW5jVG9HZW5lcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWdlbmVyYXRvci5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvci5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVyYXRvckxpc3RJZHggPSB0aGlzLmdmeC5leGVjdXRlT3BlcmF0b3JMaXN0KHRoaXMub3BlcmF0b3JMaXN0LCB0aGlzLm9wZXJhdG9yTGlzdElkeCwgdGhpcy5fY29udGludWVCb3VuZCwgdGhpcy5zdGVwcGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3BlcmF0b3JMaXN0SWR4ID09PSB0aGlzLm9wZXJhdG9yTGlzdC5hcmdzQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ydW5uaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcGVyYXRvckxpc3QubGFzdENodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2Z4LmVuZERyYXdpbmcoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2FudmFzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXNJblJlbmRlcmluZy5kZWxldGUodGhpcy5fY2FudmFzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgX2NhbGxlZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBfbmV4dCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX25leHQyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfbmV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEludGVybmFsUmVuZGVyVGFzaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW50ZXJuYWxSZW5kZXJUYXNrO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIHZhciB2ZXJzaW9uID0gJzIuMS4yNjYnO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMudmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgICAgICAgICAgdmFyIGJ1aWxkID0gJzgxZjU4MzVjJztcbiAgICAgICAgICAgICAgICBleHBvcnRzLmJ1aWxkID0gYnVpbGQ7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE0NyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNDgpO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNDggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzIHx8ICh0eXBlb2Ygc2VsZiA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKHNlbGYpKSA9PT0gXCJvYmplY3RcIiAmJiBzZWxmO1xuICAgICAgICAgICAgICAgIH0oKSB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaGFkUnVudGltZSA9IGcucmVnZW5lcmF0b3JSdW50aW1lICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGcpLmluZGV4T2YoXCJyZWdlbmVyYXRvclJ1bnRpbWVcIikgPj0gMDtcbiAgICAgICAgICAgICAgICB2YXIgb2xkUnVudGltZSA9IGhhZFJ1bnRpbWUgJiYgZy5yZWdlbmVyYXRvclJ1bnRpbWU7XG4gICAgICAgICAgICAgICAgZy5yZWdlbmVyYXRvclJ1bnRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0OSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaGFkUnVudGltZSkge1xuICAgICAgICAgICAgICAgICAgICBnLnJlZ2VuZXJhdG9yUnVudGltZSA9IG9sZFJ1bnRpbWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBnLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZy5yZWdlbmVyYXRvclJ1bnRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE0OSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgICAgICAgICAgLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKG1vZHVsZSkge1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICAgICAgIWZ1bmN0aW9uIChnbG9iYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiID8gU3ltYm9sIDoge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5Nb2R1bGUgPSAoIGZhbHNlID8gdW5kZWZpbmVkIDogX3R5cGVvZihtb2R1bGUpKSA9PT0gXCJvYmplY3RcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bnRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lLndyYXAgPSB3cmFwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJub3JtYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzogZm4uY2FsbChvYmosIGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGhyb3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzogZXJyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJiBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZVt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKGdlbkZ1bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3RvciA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8IChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZS5tYXJrID0gZnVuY3Rpb24gKGdlbkZ1bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5GdW5bdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZW5GdW47XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lLmF3cmFwID0gZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXdhaXQ6IGFyZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIF90eXBlb2YodmFsdWUpID09PSBcIm9iamVjdFwiICYmIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24gKHVud3JhcHBlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgZXJyb3IsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPSBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnZva2UgPSBlbnF1ZXVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWUuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWUuYXN5bmMgPSBmdW5jdGlvbiAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pID8gaXRlciA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmUgPyBHZW5TdGF0ZUNvbXBsZXRlZCA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEdwW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeUxvYzogbG9jc1swXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMiBpbiBsb2NzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUVudHJpZXMgPSBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnlMb2M6IFwicm9vdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnJldmVyc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IC0xLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiBkb25lUmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZS52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldChza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJiBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJiAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgcm9vdFJlY29yZC5hcmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uIGRpc3BhdGNoRXhjZXB0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC5hcmcgPSBleGNlcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFjYXVnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gXCJyb290XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJydXB0OiBmdW5jdGlvbiBhYnJ1cHQodHlwZSwgYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJiAodHlwZSA9PT0gXCJicmVha1wiIHx8IHR5cGUgPT09IFwiY29udGludWVcIikgJiYgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiYgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmluYWxseUVudHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJicmVha1wiIHx8IHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgYWZ0ZXJMb2MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2g6IGZ1bmN0aW9uIGZpbmlzaChmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjYXRjaFwiOiBmdW5jdGlvbiBfY2F0Y2godHJ5TG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uIGRlbGVnYXRlWWllbGQoaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMgfHwgKHR5cGVvZiBzZWxmID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2Yoc2VsZikpID09PSBcIm9iamVjdFwiICYmIHNlbGY7XG4gICAgICAgICAgICAgICAgICAgIH0oKSB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkpO1xuICAgICAgICAgICAgICAgICAgICAvKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwodGhpcywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTApKG1vZHVsZSkpKVxuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNTAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtb2R1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZGVwcmVjYXRlID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5wYXRocyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUubDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiaWRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUuaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNTEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmFkZExpbmtBdHRyaWJ1dGVzID0gYWRkTGlua0F0dHJpYnV0ZXM7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5nZXRGaWxlbmFtZUZyb21VcmwgPSBnZXRGaWxlbmFtZUZyb21Vcmw7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5sb2FkU2NyaXB0ID0gbG9hZFNjcmlwdDtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkR1bW15U3RhdFRpbWVyID0gZXhwb3J0cy5TdGF0VGltZXIgPSBleHBvcnRzLkRPTVNWR0ZhY3RvcnkgPSBleHBvcnRzLkRPTUNNYXBSZWFkZXJGYWN0b3J5ID0gZXhwb3J0cy5ET01DYW52YXNGYWN0b3J5ID0gZXhwb3J0cy5ERUZBVUxUX0xJTktfUkVMID0gZXhwb3J0cy5MaW5rVGFyZ2V0ID0gZXhwb3J0cy5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24gPSBleHBvcnRzLlBhZ2VWaWV3cG9ydCA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMSk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuICAgICAgICAgICAgICAgIHZhciBERUZBVUxUX0xJTktfUkVMID0gJ25vb3BlbmVyIG5vcmVmZXJyZXIgbm9mb2xsb3cnO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuREVGQVVMVF9MSU5LX1JFTCA9IERFRkFVTFRfTElOS19SRUw7XG4gICAgICAgICAgICAgICAgdmFyIFNWR19OUyA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG5cbiAgICAgICAgICAgICAgICB2YXIgRE9NQ2FudmFzRmFjdG9yeSA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRE9NQ2FudmFzRmFjdG9yeSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRE9NQ2FudmFzRmFjdG9yeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhET01DYW52YXNGYWN0b3J5LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjcmVhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlKHdpZHRoLCBoZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjYW52YXMgc2l6ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhczogY2FudmFzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVzZXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXQoY2FudmFzQW5kQ29udGV4dCwgd2lkdGgsIGhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbnZhc0FuZENvbnRleHQuY2FudmFzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbnZhcyBpcyBub3Qgc3BlY2lmaWVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGNhbnZhcyBzaXplJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXNBbmRDb250ZXh0LmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXNBbmRDb250ZXh0LmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJkZXN0cm95XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRlc3Ryb3koY2FudmFzQW5kQ29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbnZhc0FuZENvbnRleHQuY2FudmFzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbnZhcyBpcyBub3Qgc3BlY2lmaWVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXNBbmRDb250ZXh0LmNhbnZhcy53aWR0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhc0FuZENvbnRleHQuY2FudmFzLmhlaWdodCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhc0FuZENvbnRleHQuY2FudmFzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzQW5kQ29udGV4dC5jb250ZXh0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBET01DYW52YXNGYWN0b3J5O1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkRPTUNhbnZhc0ZhY3RvcnkgPSBET01DYW52YXNGYWN0b3J5O1xuXG4gICAgICAgICAgICAgICAgdmFyIERPTUNNYXBSZWFkZXJGYWN0b3J5ID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBET01DTWFwUmVhZGVyRmFjdG9yeShfcmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWYkYmFzZVVybCA9IF9yZWYuYmFzZVVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVVybCA9IF9yZWYkYmFzZVVybCA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYkYmFzZVVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZiRpc0NvbXByZXNzZWQgPSBfcmVmLmlzQ29tcHJlc3NlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDb21wcmVzc2VkID0gX3JlZiRpc0NvbXByZXNzZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRpc0NvbXByZXNzZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRE9NQ01hcFJlYWRlckZhY3RvcnkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQ29tcHJlc3NlZCA9IGlzQ29tcHJlc3NlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKERPTUNNYXBSZWFkZXJGYWN0b3J5LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJmZXRjaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmZXRjaChfcmVmMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gX3JlZjIubmFtZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYmFzZVVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignVGhlIENNYXAgXCJiYXNlVXJsXCIgcGFyYW1ldGVyIG11c3QgYmUgc3BlY2lmaWVkLCBlbnN1cmUgdGhhdCAnICsgJ3RoZSBcImNNYXBVcmxcIiBhbmQgXCJjTWFwUGFja2VkXCIgQVBJIHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignQ01hcCBuYW1lIG11c3QgYmUgc3BlY2lmaWVkLicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gX3RoaXMuYmFzZVVybCArIG5hbWUgKyAoX3RoaXMuaXNDb21wcmVzc2VkID8gJy5iY21hcCcgOiAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5vcGVuKCdHRVQnLCB1cmwsIHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuaXNDb21wcmVzc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC5yZWFkeVN0YXRlICE9PSBYTUxIdHRwUmVxdWVzdC5ET05FKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDIwMCB8fCByZXF1ZXN0LnN0YXR1cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuaXNDb21wcmVzc2VkICYmIHJlcXVlc3QucmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBuZXcgVWludDhBcnJheShyZXF1ZXN0LnJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghX3RoaXMuaXNDb21wcmVzc2VkICYmIHJlcXVlc3QucmVzcG9uc2VUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKHJlcXVlc3QucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwRGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvblR5cGU6IF90aGlzLmlzQ29tcHJlc3NlZCA/IF91dGlsLkNNYXBDb21wcmVzc2lvblR5cGUuQklOQVJZIDogX3V0aWwuQ01hcENvbXByZXNzaW9uVHlwZS5OT05FXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1VuYWJsZSB0byBsb2FkICcgKyAoX3RoaXMuaXNDb21wcmVzc2VkID8gJ2JpbmFyeSAnIDogJycpICsgJ0NNYXAgYXQ6ICcgKyB1cmwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Quc2VuZChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRE9NQ01hcFJlYWRlckZhY3Rvcnk7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuRE9NQ01hcFJlYWRlckZhY3RvcnkgPSBET01DTWFwUmVhZGVyRmFjdG9yeTtcblxuICAgICAgICAgICAgICAgIHZhciBET01TVkdGYWN0b3J5ID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBET01TVkdGYWN0b3J5KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBET01TVkdGYWN0b3J5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKERPTVNWR0ZhY3RvcnksIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNyZWF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjcmVhdGUod2lkdGgsIGhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCwgJ0ludmFsaWQgU1ZHIGRpbWVuc2lvbnMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN2ZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdzdmc6c3ZnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Zy5zZXRBdHRyaWJ1dGUoJ3ZlcnNpb24nLCAnMS4xJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Zy5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgd2lkdGggKyAncHgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZnLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgaGVpZ2h0ICsgJ3B4Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Zy5zZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAnbm9uZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdmcuc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnICsgd2lkdGggKyAnICcgKyBoZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ZnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY3JlYXRlRWxlbWVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnLCAnSW52YWxpZCBTVkcgZWxlbWVudCB0eXBlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCB0eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBET01TVkdGYWN0b3J5O1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkRPTVNWR0ZhY3RvcnkgPSBET01TVkdGYWN0b3J5O1xuXG4gICAgICAgICAgICAgICAgdmFyIFBhZ2VWaWV3cG9ydCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUGFnZVZpZXdwb3J0KF9yZWYzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZXdCb3ggPSBfcmVmMy52aWV3Qm94LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZSA9IF9yZWYzLnNjYWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGlvbiA9IF9yZWYzLnJvdGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmMyRvZmZzZXRYID0gX3JlZjMub2Zmc2V0WCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WCA9IF9yZWYzJG9mZnNldFggPT09IHZvaWQgMCA/IDAgOiBfcmVmMyRvZmZzZXRYLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmMyRvZmZzZXRZID0gX3JlZjMub2Zmc2V0WSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WSA9IF9yZWYzJG9mZnNldFkgPT09IHZvaWQgMCA/IDAgOiBfcmVmMyRvZmZzZXRZLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmMyRkb250RmxpcCA9IF9yZWYzLmRvbnRGbGlwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb250RmxpcCA9IF9yZWYzJGRvbnRGbGlwID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYzJGRvbnRGbGlwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBhZ2VWaWV3cG9ydCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdCb3ggPSB2aWV3Qm94O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUgPSBzY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdGF0aW9uID0gcm90YXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXRYID0gb2Zmc2V0WDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldFkgPSBvZmZzZXRZO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZW50ZXJYID0gKHZpZXdCb3hbMl0gKyB2aWV3Qm94WzBdKSAvIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbnRlclkgPSAodmlld0JveFszXSArIHZpZXdCb3hbMV0pIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm90YXRlQSwgcm90YXRlQiwgcm90YXRlQywgcm90YXRlRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGlvbiA9IHJvdGF0aW9uICUgMzYwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uID0gcm90YXRpb24gPCAwID8gcm90YXRpb24gKyAzNjAgOiByb3RhdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocm90YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxODA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVBID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVCID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZUMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlRCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDkwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlQSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVCID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZUMgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlRCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI3MDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZUEgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlQiA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlQyA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlRCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlQSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVCID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZUMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlRCA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbnRGbGlwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZUMgPSAtcm90YXRlQztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlRCA9IC1yb3RhdGVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXRDYW52YXNYLCBvZmZzZXRDYW52YXNZO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCwgaGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdGF0ZUEgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0Q2FudmFzWCA9IE1hdGguYWJzKGNlbnRlclkgLSB2aWV3Qm94WzFdKSAqIHNjYWxlICsgb2Zmc2V0WDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0Q2FudmFzWSA9IE1hdGguYWJzKGNlbnRlclggLSB2aWV3Qm94WzBdKSAqIHNjYWxlICsgb2Zmc2V0WTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBNYXRoLmFicyh2aWV3Qm94WzNdIC0gdmlld0JveFsxXSkgKiBzY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5hYnModmlld0JveFsyXSAtIHZpZXdCb3hbMF0pICogc2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0Q2FudmFzWCA9IE1hdGguYWJzKGNlbnRlclggLSB2aWV3Qm94WzBdKSAqIHNjYWxlICsgb2Zmc2V0WDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0Q2FudmFzWSA9IE1hdGguYWJzKGNlbnRlclkgLSB2aWV3Qm94WzFdKSAqIHNjYWxlICsgb2Zmc2V0WTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBNYXRoLmFicyh2aWV3Qm94WzJdIC0gdmlld0JveFswXSkgKiBzY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5hYnModmlld0JveFszXSAtIHZpZXdCb3hbMV0pICogc2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0gPSBbcm90YXRlQSAqIHNjYWxlLCByb3RhdGVCICogc2NhbGUsIHJvdGF0ZUMgKiBzY2FsZSwgcm90YXRlRCAqIHNjYWxlLCBvZmZzZXRDYW52YXNYIC0gcm90YXRlQSAqIHNjYWxlICogY2VudGVyWCAtIHJvdGF0ZUMgKiBzY2FsZSAqIGNlbnRlclksIG9mZnNldENhbnZhc1kgLSByb3RhdGVCICogc2NhbGUgKiBjZW50ZXJYIC0gcm90YXRlRCAqIHNjYWxlICogY2VudGVyWV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoUGFnZVZpZXdwb3J0LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjbG9uZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWY0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWY0JHNjYWxlID0gX3JlZjQuc2NhbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZSA9IF9yZWY0JHNjYWxlID09PSB2b2lkIDAgPyB0aGlzLnNjYWxlIDogX3JlZjQkc2NhbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmNCRyb3RhdGlvbiA9IF9yZWY0LnJvdGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb24gPSBfcmVmNCRyb3RhdGlvbiA9PT0gdm9pZCAwID8gdGhpcy5yb3RhdGlvbiA6IF9yZWY0JHJvdGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjQkZG9udEZsaXAgPSBfcmVmNC5kb250RmxpcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRGbGlwID0gX3JlZjQkZG9udEZsaXAgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjQkZG9udEZsaXA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQYWdlVmlld3BvcnQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveDogdGhpcy52aWV3Qm94LnNsaWNlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZTogc2NhbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGlvbjogcm90YXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRYOiB0aGlzLm9mZnNldFgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRZOiB0aGlzLm9mZnNldFksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb250RmxpcDogZG9udEZsaXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjb252ZXJ0VG9WaWV3cG9ydFBvaW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbnZlcnRUb1ZpZXdwb3J0UG9pbnQoeCwgeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbeCwgeV0sIHRoaXMudHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNvbnZlcnRUb1ZpZXdwb3J0UmVjdGFuZ2xlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbnZlcnRUb1ZpZXdwb3J0UmVjdGFuZ2xlKHJlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRsID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbcmVjdFswXSwgcmVjdFsxXV0sIHRoaXMudHJhbnNmb3JtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnIgPSBfdXRpbC5VdGlsLmFwcGx5VHJhbnNmb3JtKFtyZWN0WzJdLCByZWN0WzNdXSwgdGhpcy50cmFuc2Zvcm0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdGxbMF0sIHRsWzFdLCBiclswXSwgYnJbMV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY29udmVydFRvUGRmUG9pbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY29udmVydFRvUGRmUG9pbnQoeCwgeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3V0aWwuVXRpbC5hcHBseUludmVyc2VUcmFuc2Zvcm0oW3gsIHldLCB0aGlzLnRyYW5zZm9ybSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFnZVZpZXdwb3J0O1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlBhZ2VWaWV3cG9ydCA9IFBhZ2VWaWV3cG9ydDtcblxuICAgICAgICAgICAgICAgIHZhciBSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24gPSBmdW5jdGlvbiBSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbihtc2csIHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1zZztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24ucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIFJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbi5wcm90b3R5cGUubmFtZSA9ICdSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24nO1xuICAgICAgICAgICAgICAgICAgICBSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24uY29uc3RydWN0b3IgPSBSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24gPSBSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgdmFyIExpbmtUYXJnZXQgPSB7XG4gICAgICAgICAgICAgICAgICAgIE5PTkU6IDAsXG4gICAgICAgICAgICAgICAgICAgIFNFTEY6IDEsXG4gICAgICAgICAgICAgICAgICAgIEJMQU5LOiAyLFxuICAgICAgICAgICAgICAgICAgICBQQVJFTlQ6IDMsXG4gICAgICAgICAgICAgICAgICAgIFRPUDogNFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5MaW5rVGFyZ2V0ID0gTGlua1RhcmdldDtcbiAgICAgICAgICAgICAgICB2YXIgTGlua1RhcmdldFN0cmluZ01hcCA9IFsnJywgJ19zZWxmJywgJ19ibGFuaycsICdfcGFyZW50JywgJ190b3AnXTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFkZExpbmtBdHRyaWJ1dGVzKGxpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWY1ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IF9yZWY1LnVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IF9yZWY1LnRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbCA9IF9yZWY1LnJlbDtcblxuICAgICAgICAgICAgICAgICAgICBsaW5rLmhyZWYgPSBsaW5rLnRpdGxlID0gdXJsID8gKDAsIF91dGlsLnJlbW92ZU51bGxDaGFyYWN0ZXJzKSh1cmwpIDogJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIExpbmtUYXJnZXRWYWx1ZXMgPSBPYmplY3QudmFsdWVzKExpbmtUYXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldEluZGV4ID0gTGlua1RhcmdldFZhbHVlcy5pbmNsdWRlcyh0YXJnZXQpID8gdGFyZ2V0IDogTGlua1RhcmdldC5OT05FO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluay50YXJnZXQgPSBMaW5rVGFyZ2V0U3RyaW5nTWFwW3RhcmdldEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsucmVsID0gdHlwZW9mIHJlbCA9PT0gJ3N0cmluZycgPyByZWwgOiBERUZBVUxUX0xJTktfUkVMO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0RmlsZW5hbWVGcm9tVXJsKHVybCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYW5jaG9yID0gdXJsLmluZGV4T2YoJyMnKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHF1ZXJ5ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IE1hdGgubWluKGFuY2hvciA+IDAgPyBhbmNob3IgOiB1cmwubGVuZ3RoLCBxdWVyeSA+IDAgPyBxdWVyeSA6IHVybC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy8nLCBlbmQpICsgMSwgZW5kKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgU3RhdFRpbWVyID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBTdGF0VGltZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdGF0VGltZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gISFlbmFibGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhTdGF0VGltZXIsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInRpbWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdGltZShuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSBpbiB0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnVGltZXIgaXMgYWxyZWFkeSBydW5uaW5nIGZvciAnICsgbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0ZWRbbmFtZV0gPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwidGltZUVuZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB0aW1lRW5kKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG5hbWUgaW4gdGhpcy5zdGFydGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdUaW1lciBoYXMgbm90IGJlZW4gc3RhcnRlZCBmb3IgJyArIG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aW1lcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduYW1lJzogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGFydCc6IHRoaXMuc3RhcnRlZFtuYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiBEYXRlLm5vdygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zdGFydGVkW25hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwidG9TdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aW1lcyA9IHRoaXMudGltZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdXQgPSAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdlc3QgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHRpbWVzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gdGltZXNbaV1bJ25hbWUnXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUubGVuZ3RoID4gbG9uZ2VzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdlc3QgPSBuYW1lLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2lpID0gdGltZXMubGVuZ3RoOyBfaSA8IF9paTsgKytfaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwYW4gPSB0aW1lc1tfaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZHVyYXRpb24gPSBzcGFuLmVuZCAtIHNwYW4uc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gXCJcIi5jb25jYXQoc3BhblsnbmFtZSddLnBhZEVuZChsb25nZXN0KSwgXCIgXCIpLmNvbmNhdChkdXJhdGlvbiwgXCJtc1xcblwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RhdFRpbWVyO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlN0YXRUaW1lciA9IFN0YXRUaW1lcjtcblxuICAgICAgICAgICAgICAgIHZhciBEdW1teVN0YXRUaW1lciA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRHVtbXlTdGF0VGltZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIER1bW15U3RhdFRpbWVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ0Nhbm5vdCBpbml0aWFsaXplIER1bW15U3RhdFRpbWVyLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoRHVtbXlTdGF0VGltZXIsIG51bGwsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInRpbWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdGltZShuYW1lKSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJ0aW1lRW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRpbWVFbmQobmFtZSkge31cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwidG9TdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBEdW1teVN0YXRUaW1lcjtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5EdW1teVN0YXRUaW1lciA9IER1bW15U3RhdFRpbWVyO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gbG9hZFNjcmlwdChzcmMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5zcmMgPSBzcmM7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQub25sb2FkID0gcmVzb2x2ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIkNhbm5vdCBsb2FkIHNjcmlwdCBhdDogXCIuY29uY2F0KHNjcmlwdC5zcmMpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAoZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTUyICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Gb250TG9hZGVyID0gZXhwb3J0cy5Gb250RmFjZU9iamVjdCA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfcmVnZW5lcmF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQ3KSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykgeyB0cnkgeyB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7IHZhciB2YWx1ZSA9IGluZm8udmFsdWU7IH0gY2F0Y2ggKGVycm9yKSB7IHJlamVjdChlcnJvcik7IHJldHVybjsgfSBpZiAoaW5mby5kb25lKSB7IHJlc29sdmUodmFsdWUpOyB9IGVsc2UgeyBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuICAgICAgICAgICAgICAgIHZhciBCYXNlRm9udExvYWRlciA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQmFzZUZvbnRMb2FkZXIoX3JlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb2NJZCA9IF9yZWYuZG9jSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVW5zdXBwb3J0ZWRGZWF0dXJlID0gX3JlZi5vblVuc3VwcG9ydGVkRmVhdHVyZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBCYXNlRm9udExvYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gQmFzZUZvbnRMb2FkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnQ2Fubm90IGluaXRpYWxpemUgQmFzZUZvbnRMb2FkZXIuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2NJZCA9IGRvY0lkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVW5zdXBwb3J0ZWRGZWF0dXJlID0gb25VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVGb250RmFjZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlRWxlbWVudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhCYXNlRm9udExvYWRlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiYWRkTmF0aXZlRm9udEZhY2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWRkTmF0aXZlRm9udEZhY2UobmF0aXZlRm9udEZhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVGb250RmFjZXMucHVzaChuYXRpdmVGb250RmFjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmZvbnRzLmFkZChuYXRpdmVGb250RmFjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpbnNlcnRSdWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGluc2VydFJ1bGUocnVsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3R5bGVFbGVtZW50ID0gdGhpcy5zdHlsZUVsZW1lbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHlsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlRWxlbWVudCA9IHRoaXMuc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlRWxlbWVudC5pZCA9IFwiZXh0cmFjdGhpZ2hsaWdodHNfRk9OVF9TVFlMRV9UQUdfXCIuY29uY2F0KHRoaXMuZG9jSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHlsZVNoZWV0ID0gc3R5bGVFbGVtZW50LnNoZWV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVNoZWV0Lmluc2VydFJ1bGUocnVsZSwgc3R5bGVTaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY2xlYXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRm9udEZhY2VzLmZvckVhY2goZnVuY3Rpb24gKG5hdGl2ZUZvbnRGYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5mb250cy5kZWxldGUobmF0aXZlRm9udEZhY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVGb250RmFjZXMubGVuZ3RoID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdHlsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3R5bGVFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJiaW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9iaW5kID0gX2FzeW5jVG9HZW5lcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVnZW5lcmF0b3IuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUoZm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmF0aXZlRm9udEZhY2UsIHJ1bGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvci5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGZvbnQuYXR0YWNoZWQgfHwgZm9udC5taXNzaW5nRmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LmF0dGFjaGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNGb250TG9hZGluZ0FQSVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDE5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVGb250RmFjZSA9IGZvbnQuY3JlYXRlTmF0aXZlRm9udEZhY2UoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5hdGl2ZUZvbnRGYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkTmF0aXZlRm9udEZhY2UobmF0aXZlRm9udEZhY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5wcmV2ID0gNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmF0aXZlRm9udEZhY2UubG9hZGVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDE4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0LnByZXYgPSAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQudDAgPSBfY29udGV4dFtcImNhdGNoXCJdKDcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVW5zdXBwb3J0ZWRGZWF0dXJlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVJZDogX3V0aWwuVU5TVVBQT1JURURfRkVBVFVSRVMuZm9udFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJGYWlsZWQgdG8gbG9hZCBmb250ICdcIi5jb25jYXQobmF0aXZlRm9udEZhY2UuZmFtaWx5LCBcIic6ICdcIikuY29uY2F0KF9jb250ZXh0LnQwLCBcIicuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5kaXNhYmxlRm9udEZhY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBfY29udGV4dC50MDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlID0gZm9udC5jcmVhdGVGb250RmFjZVJ1bGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAyNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRSdWxlKHJ1bGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdChcInJldHVyblwiLCBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSBfdGhpcy5fcXVldWVMb2FkaW5nQ2FsbGJhY2socmVzb2x2ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9wcmVwYXJlRm9udExvYWRFdmVudChbcnVsZV0sIFtmb250XSwgcmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgX2NhbGxlZSwgdGhpcywgW1s3LCAxMl1dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBiaW5kKF94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2JpbmQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiaW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0oKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfcXVldWVMb2FkaW5nQ2FsbGJhY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3F1ZXVlTG9hZGluZ0NhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ0Fic3RyYWN0IG1ldGhvZCBgX3F1ZXVlTG9hZGluZ0NhbGxiYWNrYC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9wcmVwYXJlRm9udExvYWRFdmVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcHJlcGFyZUZvbnRMb2FkRXZlbnQocnVsZXMsIGZvbnRzVG9Mb2FkLCByZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ0Fic3RyYWN0IG1ldGhvZCBgX3ByZXBhcmVGb250TG9hZEV2ZW50YC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnQWJzdHJhY3QgbWV0aG9kIGBpc0ZvbnRMb2FkaW5nQVBJU3VwcG9ydGVkYC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImlzU3luY0ZvbnRMb2FkaW5nU3VwcG9ydGVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ0Fic3RyYWN0IG1ldGhvZCBgaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWRgLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX2xvYWRUZXN0Rm9udFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKCdBYnN0cmFjdCBtZXRob2QgYF9sb2FkVGVzdEZvbnRgLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJhc2VGb250TG9hZGVyO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgRm9udExvYWRlcjtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkZvbnRMb2FkZXIgPSBGb250TG9hZGVyO1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5Gb250TG9hZGVyID0gRm9udExvYWRlciA9XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0Jhc2VGb250TG9hZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKEdlbmVyaWNGb250TG9hZGVyLCBfQmFzZUZvbnRMb2FkZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gR2VuZXJpY0ZvbnRMb2FkZXIoZG9jSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgR2VuZXJpY0ZvbnRMb2FkZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMiA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihHZW5lcmljRm9udExvYWRlcikuY2FsbCh0aGlzLCBkb2NJZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIubG9hZGluZ0NvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0czogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0UmVxdWVzdElkOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5sb2FkVGVzdEZvbnRJZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKEdlbmVyaWNGb250TG9hZGVyLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX3F1ZXVlTG9hZGluZ0NhbGxiYWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcXVldWVMb2FkaW5nQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBsZXRlUmVxdWVzdCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSghcmVxdWVzdC5kb25lLCAnY29tcGxldGVSZXF1ZXN0KCkgY2Fubm90IGJlIGNhbGxlZCB0d2ljZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNvbnRleHQucmVxdWVzdHMubGVuZ3RoID4gMCAmJiBjb250ZXh0LnJlcXVlc3RzWzBdLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG90aGVyUmVxdWVzdCA9IGNvbnRleHQucmVxdWVzdHMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChvdGhlclJlcXVlc3QuY2FsbGJhY2ssIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmxvYWRpbmdDb250ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiZXh0cmFjdGhpZ2hsaWdodHMtZm9udC1sb2FkaW5nLVwiLmNvbmNhdChjb250ZXh0Lm5leHRSZXF1ZXN0SWQrKyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlUmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVlc3RzLnB1c2gocmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9wcmVwYXJlRm9udExvYWRFdmVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3ByZXBhcmVGb250TG9hZEV2ZW50KHJ1bGVzLCBmb250cywgcmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaW50MzIoZGF0YSwgb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEuY2hhckNvZGVBdChvZmZzZXQpIDw8IDI0IHwgZGF0YS5jaGFyQ29kZUF0KG9mZnNldCArIDEpIDw8IDE2IHwgZGF0YS5jaGFyQ29kZUF0KG9mZnNldCArIDIpIDw8IDggfCBkYXRhLmNoYXJDb2RlQXQob2Zmc2V0ICsgMykgJiAweGZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzcGxpY2VTdHJpbmcocywgb2Zmc2V0LCByZW1vdmUsIGluc2VydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVuazEgPSBzLnN1YnN0cmluZygwLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVuazIgPSBzLnN1YnN0cmluZyhvZmZzZXQgKyByZW1vdmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaHVuazEgKyBpbnNlcnQgKyBjaHVuazI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBpaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWxsZWQgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc0ZvbnRSZWFkeShuYW1lLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZCsrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxlZCA+IDMwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnTG9hZCB0ZXN0IGZvbnQgbmV2ZXIgbG9hZGVkLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZvbnQgPSAnMzBweCAnICsgbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguZmlsbFRleHQoJy4nLCAwLCAyMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltYWdlRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgMSwgMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2VEYXRhLmRhdGFbM10gPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGlzRm9udFJlYWR5LmJpbmQobnVsbCwgbmFtZSwgY2FsbGJhY2spKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvYWRUZXN0Rm9udElkID0gXCJsdFwiLmNvbmNhdChEYXRlLm5vdygpKS5jb25jYXQodGhpcy5sb2FkVGVzdEZvbnRJZCsrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fbG9hZFRlc3RGb250O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIENPTU1FTlRfT0ZGU0VUID0gOTc2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHNwbGljZVN0cmluZyhkYXRhLCBDT01NRU5UX09GRlNFVCwgbG9hZFRlc3RGb250SWQubGVuZ3RoLCBsb2FkVGVzdEZvbnRJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgQ0ZGX0NIRUNLU1VNX09GRlNFVCA9IDE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFhYWFhfVkFMVUUgPSAweDU4NTg1ODU4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoZWNrc3VtID0gaW50MzIoZGF0YSwgQ0ZGX0NIRUNLU1VNX09GRlNFVCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gbG9hZFRlc3RGb250SWQubGVuZ3RoIC0gMzsgaSA8IGlpOyBpICs9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3N1bSA9IGNoZWNrc3VtIC0gWFhYWF9WQUxVRSArIGludDMyKGxvYWRUZXN0Rm9udElkLCBpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgbG9hZFRlc3RGb250SWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tzdW0gPSBjaGVja3N1bSAtIFhYWFhfVkFMVUUgKyBpbnQzMihsb2FkVGVzdEZvbnRJZCArICdYWFgnLCBpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBzcGxpY2VTdHJpbmcoZGF0YSwgQ0ZGX0NIRUNLU1VNX09GRlNFVCwgNCwgKDAsIF91dGlsLnN0cmluZzMyKShjaGVja3N1bSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IFwidXJsKGRhdGE6Zm9udC9vcGVudHlwZTtiYXNlNjQsXCIuY29uY2F0KGJ0b2EoZGF0YSksIFwiKTtcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcnVsZSA9IFwiQGZvbnQtZmFjZSB7Zm9udC1mYW1pbHk6XFxcIlwiLmNvbmNhdChsb2FkVGVzdEZvbnRJZCwgXCJcXFwiO3NyYzpcIikuY29uY2F0KHVybCwgXCJ9XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRSdWxlKHJ1bGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gZm9udHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzLnB1c2goZm9udHNbaV0ubG9hZGVkTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzLnB1c2gobG9hZFRlc3RGb250SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAndmlzaWJpbGl0eTogaGlkZGVuOycgKyAnd2lkdGg6IDEwcHg7IGhlaWdodDogMTBweDsnICsgJ3Bvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwcHg7IGxlZnQ6IDBweDsnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBuYW1lcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi50ZXh0Q29udGVudCA9ICdIaSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5mb250RmFtaWx5ID0gbmFtZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKHNwYW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0ZvbnRSZWFkeShsb2FkVGVzdEZvbnRJZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VwcG9ydGVkID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiAhIWRvY3VtZW50LmZvbnRzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VwcG9ydGVkICYmIHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSAvTW96aWxsYVxcLzUuMC4qP3J2OihcXGQrKS4qPyBHZWNrby8uZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtICYmIG1bMV0gPCA2Mykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnaXNGb250TG9hZGluZ0FQSVN1cHBvcnRlZCcsIHN1cHBvcnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdXBwb3J0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSAvTW96aWxsYVxcLzUuMC4qP3J2OihcXGQrKS4qPyBHZWNrby8uZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtICYmIG1bMV0gPj0gMTQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWQnLCBzdXBwb3J0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX2xvYWRUZXN0Rm9udFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnZXRMb2FkVGVzdEZvbnQgPSBmdW5jdGlvbiBnZXRMb2FkVGVzdEZvbnQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF0b2IoJ1QxUlVUd0FMQUlBQUF3QXdRMFpHSURIdFpnNEFBQU9ZQUFBQWdVWkdWRTFsa3pad0FBQUVIQUFBQUJ4SFJFVkdBQlFBJyArICdGUUFBQkRnQUFBQWVUMU12TWxZTll3a0FBQUVnQUFBQVlHTnRZWEFCRFFMVUFBQUNOQUFBQVVKb1pXRmsveFZGRFFBQScgKyAnQUx3QUFBQTJhR2hsWVFka0Erb0FBQUQwQUFBQUpHaHRkSGdENkFBQUFBQUVXQUFBQUFadFlYaHdBQUpRQUFBQUFSZ0EnICsgJ0FBQUdibUZ0WlZqbWRINEFBQUdBQUFBQXNYQnZjM1QvaGdBekFBQURlQUFBQUNBQUFRQUFBQUVBQUxaUkZzUmZEenoxJyArICdBQXNENkFBQUFBRE9CT1RMQUFBQUFNNEtIRHdBQUFBQUErZ0RJUUFBQUFnQUFnQUFBQUFBQUFBQkFBQURJUUFBQUZvRCcgKyAnNkFBQUFBQUQ2QUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBVUFBQUFnQUFBQVFENkFIMEFBVUFBQUtLQXJ3QUFBQ00nICsgJ0Fvb0N2QUFBQWVBQU1RRUNBQUFDQUFZSkFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBRkJtUldRQXdBQXVBQzREJyArICdJUDg0QUZvRElRQUFBQUFBQVFBQUFBQUFBQUFBQUNBQUlBQUJBQUFBRGdDdUFBRUFBQUFBQUFBQUFRQUFBQUVBQUFBQScgKyAnQUFFQUFRQUFBQUVBQUFBQUFBSUFBUUFBQUFFQUFBQUFBQU1BQVFBQUFBRUFBQUFBQUFRQUFRQUFBQUVBQUFBQUFBVUEnICsgJ0FRQUFBQUVBQUFBQUFBWUFBUUFBQUFNQUFRUUpBQUFBQWdBQkFBTUFBUVFKQUFFQUFnQUJBQU1BQVFRSkFBSUFBZ0FCJyArICdBQU1BQVFRSkFBTUFBZ0FCQUFNQUFRUUpBQVFBQWdBQkFBTUFBUVFKQUFVQUFnQUJBQU1BQVFRSkFBWUFBZ0FCV0FCWScgKyAnQUFBQUFBQUFBd0FBQUFNQUFBQWNBQUVBQUFBQUFEd0FBd0FCQUFBQUhBQUVBQ0FBQUFBRUFBUUFBUUFBQUM3Ly93QUEnICsgJ0FDNy8vLy9UQUFFQUFBQUFBQUFCQmdBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBJyArICdBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQScgKyAnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEnICsgJ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBJyArICdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQScgKyAnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFBQUFBQUFEL2d3QXlBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUEnICsgJ0FBQUJBQVFFQUFFQkFRSllBQUVCQVNINER3RDRHd0hFQXZnY0EvZ1hCSXdNQVl1TCtuejV0UVhrRDVqM0NCTG5FUUFDJyArICdBUUVCSVZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlBQUFCQVFBQUR3QUNBUUVFRS90MycgKyAnRG92NmZBSDZmQVQrZlBwOCtud0hEb3NNQ3ZtMUN2bTFEQXo2ZkJRQUFBQUFBQUFCQUFBQUFNbUpiekVBQUFBQXpnVGonICsgJ0ZRQUFBQURPQk9RcEFBRUFBQUFBQUFBQURBQVVBQVFBQUFBQkFBQUFBZ0FCQUFBQUFBQUFBQUFENkFBQUFBQUFBQT09Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ19sb2FkVGVzdEZvbnQnLCBnZXRMb2FkVGVzdEZvbnQoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0ZvbnRMb2FkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KEJhc2VGb250TG9hZGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIElzRXZhbFN1cHBvcnRlZENhY2hlZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsICd2YWx1ZScsICgwLCBfdXRpbC5pc0V2YWxTdXBwb3J0ZWQpKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIEZvbnRGYWNlT2JqZWN0ID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBGb250RmFjZU9iamVjdCh0cmFuc2xhdGVkRGF0YSwgX3JlZjIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlZjIkaXNFdmFsU3VwcG9ydGVkID0gX3JlZjIuaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQgPSBfcmVmMiRpc0V2YWxTdXBwb3J0ZWQgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYyJGRpc2FibGVGb250RmFjZSA9IF9yZWYyLmRpc2FibGVGb250RmFjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUZvbnRGYWNlID0gX3JlZjIkZGlzYWJsZUZvbnRGYWNlID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYyJGRpc2FibGVGb250RmFjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjIkaWdub3JlRXJyb3JzID0gX3JlZjIuaWdub3JlRXJyb3JzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVFcnJvcnMgPSBfcmVmMiRpZ25vcmVFcnJvcnMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjIkaWdub3JlRXJyb3JzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmMiRvblVuc3VwcG9ydGVkRmUgPSBfcmVmMi5vblVuc3VwcG9ydGVkRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25VbnN1cHBvcnRlZEZlYXR1cmUgPSBfcmVmMiRvblVuc3VwcG9ydGVkRmUgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmMiRvblVuc3VwcG9ydGVkRmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYyJGZvbnRSZWdpc3RyeSA9IF9yZWYyLmZvbnRSZWdpc3RyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFJlZ2lzdHJ5ID0gX3JlZjIkZm9udFJlZ2lzdHJ5ID09PSB2b2lkIDAgPyBudWxsIDogX3JlZjIkZm9udFJlZ2lzdHJ5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEZvbnRGYWNlT2JqZWN0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGlsZWRHbHlwaHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSBpbiB0cmFuc2xhdGVkRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2ldID0gdHJhbnNsYXRlZERhdGFbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0V2YWxTdXBwb3J0ZWQgPSBpc0V2YWxTdXBwb3J0ZWQgIT09IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZUZvbnRGYWNlID0gZGlzYWJsZUZvbnRGYWNlID09PSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaWdub3JlRXJyb3JzID0gaWdub3JlRXJyb3JzID09PSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVW5zdXBwb3J0ZWRGZWF0dXJlID0gb25VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb250UmVnaXN0cnkgPSBmb250UmVnaXN0cnk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhGb250RmFjZU9iamVjdCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY3JlYXRlTmF0aXZlRm9udEZhY2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlTmF0aXZlRm9udEZhY2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5kYXRhIHx8IHRoaXMuZGlzYWJsZUZvbnRGYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYXRpdmVGb250RmFjZSA9IG5ldyBGb250RmFjZSh0aGlzLmxvYWRlZE5hbWUsIHRoaXMuZGF0YSwge30pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvbnRSZWdpc3RyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb250UmVnaXN0cnkucmVnaXN0ZXJGb250KHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5hdGl2ZUZvbnRGYWNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY3JlYXRlRm9udEZhY2VSdWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNyZWF0ZUZvbnRGYWNlUnVsZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGEgfHwgdGhpcy5kaXNhYmxlRm9udEZhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSAoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykobmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSBcInVybChkYXRhOlwiLmNvbmNhdCh0aGlzLm1pbWV0eXBlLCBcIjtiYXNlNjQsXCIpLmNvbmNhdChidG9hKGRhdGEpLCBcIik7XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcnVsZSA9IFwiQGZvbnQtZmFjZSB7Zm9udC1mYW1pbHk6XFxcIlwiLmNvbmNhdCh0aGlzLmxvYWRlZE5hbWUsIFwiXFxcIjtzcmM6XCIpLmNvbmNhdCh1cmwsIFwifVwiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5mb250UmVnaXN0cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udFJlZ2lzdHJ5LnJlZ2lzdGVyRm9udCh0aGlzLCB1cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRQYXRoR2VuZXJhdG9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFBhdGhHZW5lcmF0b3Iob2JqcywgY2hhcmFjdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbXBpbGVkR2x5cGhzW2NoYXJhY3Rlcl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGlsZWRHbHlwaHNbY2hhcmFjdGVyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbWRzLCBjdXJyZW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzID0gb2Jqcy5nZXQodGhpcy5sb2FkZWROYW1lICsgJ19wYXRoXycgKyBjaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlnbm9yZUVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVJZDogX3V0aWwuVU5TVVBQT1JURURfRkVBVFVSRVMuZm9udFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJnZXRQYXRoR2VuZXJhdG9yIC0gaWdub3JpbmcgY2hhcmFjdGVyOiBcXFwiXCIuY29uY2F0KGV4LCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2NoYXJhY3Rlcl0gPSBmdW5jdGlvbiAoYywgc2l6ZSkge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0V2YWxTdXBwb3J0ZWQgJiYgSXNFdmFsU3VwcG9ydGVkQ2FjaGVkLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcyA9ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBjbWRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY21kc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LmFyZ3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gY3VycmVudC5hcmdzLmpvaW4oJywnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganMgKz0gJ2MuJyArIGN1cnJlbnQuY21kICsgJygnICsgYXJncyArICcpO1xcbic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2NoYXJhY3Rlcl0gPSBuZXcgRnVuY3Rpb24oJ2MnLCAnc2l6ZScsIGpzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2NoYXJhY3Rlcl0gPSBmdW5jdGlvbiAoYywgc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfaWkgPSBjbWRzLmxlbmd0aDsgX2kgPCBfaWk7IF9pKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY21kc1tfaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC5jbWQgPT09ICdzY2FsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5hcmdzID0gW3NpemUsIC1zaXplXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW2N1cnJlbnQuY21kXS5hcHBseShjLCBjdXJyZW50LmFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZvbnRGYWNlT2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkZvbnRGYWNlT2JqZWN0ID0gRm9udEZhY2VPYmplY3Q7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE1MyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjb21wYXRpYmlsaXR5UGFyYW1zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc05vZGVKUyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXJBZ2VudCA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc0lFID0gL1RyaWRlbnQvLnRlc3QodXNlckFnZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzSU9TQ2hyb21lID0gL0NyaU9TLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrT25CbG9iU3VwcG9ydCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0lFIHx8IGlzSU9TQ2hyb21lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJpbGl0eVBhcmFtcy5kaXNhYmxlQ3JlYXRlT2JqZWN0VVJMID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tGb250RmFjZUFuZEltYWdlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm9kZUpTKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmlsaXR5UGFyYW1zLmRpc2FibGVGb250RmFjZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJpbGl0eVBhcmFtcy5uYXRpdmVJbWFnZURlY29kZXJTdXBwb3J0ID0gJ25vbmUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBleHBvcnRzLmFwaUNvbXBhdGliaWxpdHlQYXJhbXMgPSBPYmplY3QuZnJlZXplKGNvbXBhdGliaWxpdHlQYXJhbXMpO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNTQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkNhbnZhc0dyYXBoaWNzID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxKTtcblxuICAgICAgICAgICAgICAgIHZhciBfcGF0dGVybl9oZWxwZXIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1NSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgTUlOX0ZPTlRfU0laRSA9IDE2O1xuICAgICAgICAgICAgICAgIHZhciBNQVhfRk9OVF9TSVpFID0gMTAwO1xuICAgICAgICAgICAgICAgIHZhciBNQVhfR1JPVVBfU0laRSA9IDQwOTY7XG4gICAgICAgICAgICAgICAgdmFyIE1JTl9XSURUSF9GQUNUT1IgPSAwLjY1O1xuICAgICAgICAgICAgICAgIHZhciBDT01QSUxFX1RZUEUzX0dMWVBIUyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIE1BWF9TSVpFX1RPX0NPTVBJTEUgPSAxMDAwO1xuICAgICAgICAgICAgICAgIHZhciBGVUxMX0NIVU5LX0hFSUdIVCA9IDE2O1xuICAgICAgICAgICAgICAgIHZhciBJc0xpdHRsZUVuZGlhbkNhY2hlZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKElzTGl0dGxlRW5kaWFuQ2FjaGVkLCAndmFsdWUnLCAoMCwgX3V0aWwuaXNMaXR0bGVFbmRpYW4pKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYWRkQ29udGV4dEN1cnJlbnRUcmFuc2Zvcm0oY3R4KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5fb3JpZ2luYWxTYXZlID0gY3R4LnNhdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguX29yaWdpbmFsUmVzdG9yZSA9IGN0eC5yZXN0b3JlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Ll9vcmlnaW5hbFJvdGF0ZSA9IGN0eC5yb3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguX29yaWdpbmFsU2NhbGUgPSBjdHguc2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguX29yaWdpbmFsVHJhbnNsYXRlID0gY3R4LnRyYW5zbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5fb3JpZ2luYWxUcmFuc2Zvcm0gPSBjdHgudHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Ll9vcmlnaW5hbFNldFRyYW5zZm9ybSA9IGN0eC5zZXRUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguX3RyYW5zZm9ybU1hdHJpeCA9IGN0eC5fdHJhbnNmb3JtTWF0cml4IHx8IFsxLCAwLCAwLCAxLCAwLCAwXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5fdHJhbnNmb3JtU3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsICdtb3pDdXJyZW50VHJhbnNmb3JtJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0Q3VycmVudFRyYW5zZm9ybSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zZm9ybU1hdHJpeDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsICdtb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IHRoaXMuX3RyYW5zZm9ybU1hdHJpeDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBtWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IG1bMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gbVsyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBtWzNdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IG1bNF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gbVs1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFkX2JjID0gYSAqIGQgLSBiICogYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJjX2FkID0gYiAqIGMgLSBhICogZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtkIC8gYWRfYmMsIGIgLyBiY19hZCwgYyAvIGJjX2FkLCBhIC8gYWRfYmMsIChkICogZSAtIGMgKiBmKSAvIGJjX2FkLCAoYiAqIGUgLSBhICogZikgLyBhZF9iY107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zYXZlID0gZnVuY3Rpb24gY3R4U2F2ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2xkID0gdGhpcy5fdHJhbnNmb3JtTWF0cml4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNmb3JtU3RhY2sucHVzaChvbGQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNmb3JtTWF0cml4ID0gb2xkLnNsaWNlKDAsIDYpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxTYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjdHgucmVzdG9yZSA9IGZ1bmN0aW9uIGN0eFJlc3RvcmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXYgPSB0aGlzLl90cmFuc2Zvcm1TdGFjay5wb3AoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zZm9ybU1hdHJpeCA9IHByZXY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSA9IGZ1bmN0aW9uIGN0eFRyYW5zbGF0ZSh4LCB5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSB0aGlzLl90cmFuc2Zvcm1NYXRyaXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVs0XSA9IG1bMF0gKiB4ICsgbVsyXSAqIHkgKyBtWzRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1bNV0gPSBtWzFdICogeCArIG1bM10gKiB5ICsgbVs1XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVHJhbnNsYXRlKHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNjYWxlID0gZnVuY3Rpb24gY3R4U2NhbGUoeCwgeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtID0gdGhpcy5fdHJhbnNmb3JtTWF0cml4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1bMF0gPSBtWzBdICogeDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtWzFdID0gbVsxXSAqIHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVsyXSA9IG1bMl0gKiB5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1bM10gPSBtWzNdICogeTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsU2NhbGUoeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjdHgudHJhbnNmb3JtID0gZnVuY3Rpb24gY3R4VHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IHRoaXMuX3RyYW5zZm9ybU1hdHJpeDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2Zvcm1NYXRyaXggPSBbbVswXSAqIGEgKyBtWzJdICogYiwgbVsxXSAqIGEgKyBtWzNdICogYiwgbVswXSAqIGMgKyBtWzJdICogZCwgbVsxXSAqIGMgKyBtWzNdICogZCwgbVswXSAqIGUgKyBtWzJdICogZiArIG1bNF0sIG1bMV0gKiBlICsgbVszXSAqIGYgKyBtWzVdXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5fb3JpZ2luYWxUcmFuc2Zvcm0oYSwgYiwgYywgZCwgZSwgZik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gY3R4U2V0VHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2Zvcm1NYXRyaXggPSBbYSwgYiwgYywgZCwgZSwgZl07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguX29yaWdpbmFsU2V0VHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnJvdGF0ZSA9IGZ1bmN0aW9uIGN0eFJvdGF0ZShhbmdsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3NWYWx1ZSA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2luVmFsdWUgPSBNYXRoLnNpbihhbmdsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSB0aGlzLl90cmFuc2Zvcm1NYXRyaXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNmb3JtTWF0cml4ID0gW21bMF0gKiBjb3NWYWx1ZSArIG1bMl0gKiBzaW5WYWx1ZSwgbVsxXSAqIGNvc1ZhbHVlICsgbVszXSAqIHNpblZhbHVlLCBtWzBdICogLXNpblZhbHVlICsgbVsyXSAqIGNvc1ZhbHVlLCBtWzFdICogLXNpblZhbHVlICsgbVszXSAqIGNvc1ZhbHVlLCBtWzRdLCBtWzVdXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUm90YXRlKGFuZ2xlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgQ2FjaGVkQ2FudmFzZXMgPSBmdW5jdGlvbiBDYWNoZWRDYW52YXNlc0Nsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENhY2hlZENhbnZhc2VzKGNhbnZhc0ZhY3RvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzRmFjdG9yeSA9IGNhbnZhc0ZhY3Rvcnk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENhY2hlZENhbnZhc2VzLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENhbnZhczogZnVuY3Rpb24gQ2FjaGVkQ2FudmFzZXNfZ2V0Q2FudmFzKGlkLCB3aWR0aCwgaGVpZ2h0LCB0cmFja1RyYW5zZm9ybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW52YXNFbnRyeTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlW2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhc0VudHJ5ID0gdGhpcy5jYWNoZVtpZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzRmFjdG9yeS5yZXNldChjYW52YXNFbnRyeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhc0VudHJ5LmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhc0VudHJ5ID0gdGhpcy5jYW52YXNGYWN0b3J5LmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWNoZVtpZF0gPSBjYW52YXNFbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhY2tUcmFuc2Zvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ29udGV4dEN1cnJlbnRUcmFuc2Zvcm0oY2FudmFzRW50cnkuY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbnZhc0VudHJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW52YXNFbnRyeSA9IHRoaXMuY2FjaGVbaWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbnZhc0ZhY3RvcnkuZGVzdHJveShjYW52YXNFbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNhY2hlW2lkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBDYWNoZWRDYW52YXNlcztcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb21waWxlVHlwZTNHbHlwaChpbWdEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBQT0lOVF9UT19QUk9DRVNTX0xJTUlUID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gaW1nRGF0YS53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGosXG4gICAgICAgICAgICAgICAgICAgICAgICBqMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoMSA9IHdpZHRoICsgMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvaW50cyA9IG5ldyBVaW50OEFycmF5KHdpZHRoMSAqIChoZWlnaHQgKyAxKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBQT0lOVF9UWVBFUyA9IG5ldyBVaW50OEFycmF5KFswLCAyLCA0LCAwLCAxLCAwLCA1LCA0LCA4LCAxMCwgMCwgOCwgMCwgMiwgMSwgMF0pO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGluZVNpemUgPSB3aWR0aCArIDcgJiB+NyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEwID0gaW1nRGF0YS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IG5ldyBVaW50OEFycmF5KGxpbmVTaXplICogaGVpZ2h0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBpaTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGRhdGEwLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXNrID0gMTI4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBkYXRhMFtpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG1hc2sgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtwb3MrK10gPSBlbGVtICYgbWFzayA/IDAgOiAyNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayA+Pj0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHBvcyA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFbcG9zXSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzWzBdID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICsrY291bnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAxOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFbcG9zXSAhPT0gZGF0YVtwb3MgKyAxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c1tqXSA9IGRhdGFbcG9zXSA/IDIgOiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrY291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcysrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFbcG9zXSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2pdID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICsrY291bnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgaGVpZ2h0OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IGkgKiBsaW5lU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGowID0gaSAqIHdpZHRoMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFbcG9zIC0gbGluZVNpemVdICE9PSBkYXRhW3Bvc10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNbajBdID0gZGF0YVtwb3NdID8gMSA6IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKytjb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1bSA9IChkYXRhW3Bvc10gPyA0IDogMCkgKyAoZGF0YVtwb3MgLSBsaW5lU2l6ZV0gPyA4IDogMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDE7IGogPCB3aWR0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtID0gKHN1bSA+PiAyKSArIChkYXRhW3BvcyArIDFdID8gNCA6IDApICsgKGRhdGFbcG9zIC0gbGluZVNpemUgKyAxXSA/IDggOiAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQT0lOVF9UWVBFU1tzdW1dKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c1tqMCArIGpdID0gUE9JTlRfVFlQRVNbc3VtXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytjb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFbcG9zIC0gbGluZVNpemVdICE9PSBkYXRhW3Bvc10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNbajAgKyBqXSA9IGRhdGFbcG9zXSA/IDIgOiA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrY291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IFBPSU5UX1RPX1BST0NFU1NfTElNSVQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHBvcyA9IGxpbmVTaXplICogKGhlaWdodCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICBqMCA9IGkgKiB3aWR0aDE7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFbcG9zXSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2owXSA9IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICArK2NvdW50O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMTsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhW3Bvc10gIT09IGRhdGFbcG9zICsgMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNbajAgKyBqXSA9IGRhdGFbcG9zXSA/IDQgOiA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrY291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcysrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFbcG9zXSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2owICsgal0gPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgKytjb3VudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IFBPSU5UX1RPX1BST0NFU1NfTElNSVQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0ZXBzID0gbmV3IEludDMyQXJyYXkoWzAsIHdpZHRoMSwgLTEsIDAsIC13aWR0aDEsIDAsIDAsIDAsIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG91dGxpbmVzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgY291bnQgJiYgaSA8PSBoZWlnaHQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSBpICogd2lkdGgxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IHAgKyB3aWR0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAgPCBlbmQgJiYgIXBvaW50c1twXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHArKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT09IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29vcmRzID0gW3AgJSB3aWR0aDEsIGldO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBwb2ludHNbcF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDAgPSBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ZXAgPSBzdGVwc1t0eXBlXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCArPSBzdGVwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKCFwb2ludHNbcF0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHAgPSBwb2ludHNbcF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHAgIT09IDUgJiYgcHAgIT09IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBwcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW3BdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gcHAgJiAweDMzICogdHlwZSA+PiA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNbcF0gJj0gdHlwZSA+PiAyIHwgdHlwZSA8PCAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3Jkcy5wdXNoKHAgJSB3aWR0aDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3Jkcy5wdXNoKHAgLyB3aWR0aDEgfCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWNvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAocDAgIT09IHApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lcy5wdXNoKGNvb3Jkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAtLWk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgZHJhd091dGxpbmUgPSBmdW5jdGlvbiBkcmF3T3V0bGluZShjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjLnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuc2NhbGUoMSAvIHdpZHRoLCAtMSAvIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjLnRyYW5zbGF0ZSgwLCAtaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IG91dGxpbmVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IG91dGxpbmVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMubW92ZVRvKG9bMF0sIG9bMV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDIsIGpqID0gby5sZW5ndGg7IGogPCBqajsgaiArPSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMubGluZVRvKG9bal0sIG9baiArIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZmlsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYy5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkcmF3T3V0bGluZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgQ2FudmFzRXh0cmFTdGF0ZSA9IGZ1bmN0aW9uIENhbnZhc0V4dHJhU3RhdGVDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBDYW52YXNFeHRyYVN0YXRlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbHBoYUlzU2hhcGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udFNpemUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb250U2l6ZVNjYWxlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dE1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dE1hdHJpeFNjYWxlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udE1hdHJpeCA9IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZWFkaW5nID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lWCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmVZID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhclNwYWNpbmcgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JkU3BhY2luZyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHRIU2NhbGUgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0UmVuZGVyaW5nTW9kZSA9IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTEw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHRSaXNlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsbENvbG9yID0gJyMwMDAwMDAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJva2VDb2xvciA9ICcjMDAwMDAwJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGF0dGVybkZpbGwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsbEFscGhhID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3Ryb2tlQWxwaGEgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lV2lkdGggPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVTTWFzayA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VtZVNNYXNrQ3R4ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENhbnZhc0V4dHJhU3RhdGUucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmU6IGZ1bmN0aW9uIENhbnZhc0V4dHJhU3RhdGVfY2xvbmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudFBvaW50OiBmdW5jdGlvbiBDYW52YXNFeHRyYVN0YXRlX3NldEN1cnJlbnRQb2ludCh4LCB5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ2FudmFzRXh0cmFTdGF0ZTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgQ2FudmFzR3JhcGhpY3MgPSBmdW5jdGlvbiBDYW52YXNHcmFwaGljc0Nsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBFWEVDVVRJT05fVElNRSA9IDE1O1xuICAgICAgICAgICAgICAgICAgICB2YXIgRVhFQ1VUSU9OX1NURVBTID0gMTA7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3MoY2FudmFzQ3R4LCBjb21tb25PYmpzLCBvYmpzLCBjYW52YXNGYWN0b3J5LCB3ZWJHTENvbnRleHQsIGltYWdlTGF5ZXIsIGFubm90YXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IGNhbnZhc0N0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG5ldyBDYW52YXNFeHRyYVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlU3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0NsaXAgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nRU9GaWxsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnhvYmpzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uT2JqcyA9IGNvbW1vbk9ianM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9ianMgPSBvYmpzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW52YXNGYWN0b3J5ID0gY2FudmFzRmFjdG9yeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2ViR0xDb250ZXh0ID0gd2ViR0xDb250ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZUxheWVyID0gaW1hZ2VMYXllcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBTdGFjayA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzaW5nVHlwZTMgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXNlVHJhbnNmb3JtID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwTGV2ZWwgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbWFza1N0YWNrID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNtYXNrQ291bnRlciA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBTTWFzayA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZENhbnZhc2VzID0gbmV3IENhY2hlZENhbnZhc2VzKHRoaXMuY2FudmFzRmFjdG9yeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFubm90YXRpb25zID0gYW5ub3RhdGlvbnM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW52YXNDdHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRDb250ZXh0Q3VycmVudFRyYW5zZm9ybShjYW52YXNDdHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHB1dEJpbmFyeUltYWdlRGF0YShjdHgsIGltZ0RhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgSW1hZ2VEYXRhICE9PSAndW5kZWZpbmVkJyAmJiBpbWdEYXRhIGluc3RhbmNlb2YgSW1hZ2VEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnB1dEltYWdlRGF0YShpbWdEYXRhLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSBpbWdEYXRhLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IGltZ0RhdGEud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFydGlhbENodW5rSGVpZ2h0ID0gaGVpZ2h0ICUgRlVMTF9DSFVOS19IRUlHSFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZnVsbENodW5rcyA9IChoZWlnaHQgLSBwYXJ0aWFsQ2h1bmtIZWlnaHQpIC8gRlVMTF9DSFVOS19IRUlHSFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG90YWxDaHVua3MgPSBwYXJ0aWFsQ2h1bmtIZWlnaHQgPT09IDAgPyBmdWxsQ2h1bmtzIDogZnVsbENodW5rcyArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmtJbWdEYXRhID0gY3R4LmNyZWF0ZUltYWdlRGF0YSh3aWR0aCwgRlVMTF9DSFVOS19IRUlHSFQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNyY1BvcyA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcmMgPSBpbWdEYXRhLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzdCA9IGNodW5rSW1nRGF0YS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIGosIHRoaXNDaHVua0hlaWdodCwgZWxlbXNJblRoaXNDaHVuaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGltZ0RhdGEua2luZCA9PT0gX3V0aWwuSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNyY0xlbmd0aCA9IHNyYy5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXN0MzIgPSBuZXcgVWludDMyQXJyYXkoZGVzdC5idWZmZXIsIDAsIGRlc3QuYnl0ZUxlbmd0aCA+PiAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzdDMyRGF0YUxlbmd0aCA9IGRlc3QzMi5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZ1bGxTcmNEaWZmID0gd2lkdGggKyA3ID4+IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdoaXRlID0gMHhGRkZGRkZGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmxhY2sgPSBJc0xpdHRsZUVuZGlhbkNhY2hlZC52YWx1ZSA/IDB4RkYwMDAwMDAgOiAweDAwMDAwMEZGO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsQ2h1bmtzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0NodW5rSGVpZ2h0ID0gaSA8IGZ1bGxDaHVua3MgPyBGVUxMX0NIVU5LX0hFSUdIVCA6IHBhcnRpYWxDaHVua0hlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFBvcyA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHRoaXNDaHVua0hlaWdodDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3JjRGlmZiA9IHNyY0xlbmd0aCAtIHNyY1BvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrRW5kID0gc3JjRGlmZiA+IGZ1bGxTcmNEaWZmID8gd2lkdGggOiBzcmNEaWZmICogOCAtIDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga0VuZFVucm9sbGVkID0ga0VuZCAmIH43O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hc2sgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNyY0J5dGUgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgayA8IGtFbmRVbnJvbGxlZDsgayArPSA4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjQnl0ZSA9IHNyY1tzcmNQb3MrK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdDMyW2Rlc3RQb3MrK10gPSBzcmNCeXRlICYgMTI4ID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiA2NCA/IHdoaXRlIDogYmxhY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdDMyW2Rlc3RQb3MrK10gPSBzcmNCeXRlICYgMzIgPyB3aGl0ZSA6IGJsYWNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QzMltkZXN0UG9zKytdID0gc3JjQnl0ZSAmIDE2ID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiA4ID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiA0ID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiAyID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiAxID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGsgPCBrRW5kOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFzayA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNCeXRlID0gc3JjW3NyY1BvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayA9IDEyODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiBtYXNrID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrID4+PSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGRlc3RQb3MgPCBkZXN0MzJEYXRhTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgucHV0SW1hZ2VEYXRhKGNodW5rSW1nRGF0YSwgMCwgaSAqIEZVTExfQ0hVTktfSEVJR0hUKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGltZ0RhdGEua2luZCA9PT0gX3V0aWwuSW1hZ2VLaW5kLlJHQkFfMzJCUFApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtc0luVGhpc0NodW5rID0gd2lkdGggKiBGVUxMX0NIVU5LX0hFSUdIVCAqIDQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZnVsbENodW5rczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Quc2V0KHNyYy5zdWJhcnJheShzcmNQb3MsIHNyY1BvcyArIGVsZW1zSW5UaGlzQ2h1bmspKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUG9zICs9IGVsZW1zSW5UaGlzQ2h1bms7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5wdXRJbWFnZURhdGEoY2h1bmtJbWdEYXRhLCAwLCBqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiArPSBGVUxMX0NIVU5LX0hFSUdIVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IHRvdGFsQ2h1bmtzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1zSW5UaGlzQ2h1bmsgPSB3aWR0aCAqIHBhcnRpYWxDaHVua0hlaWdodCAqIDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Quc2V0KHNyYy5zdWJhcnJheShzcmNQb3MsIHNyY1BvcyArIGVsZW1zSW5UaGlzQ2h1bmspKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnB1dEltYWdlRGF0YShjaHVua0ltZ0RhdGEsIDAsIGopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW1nRGF0YS5raW5kID09PSBfdXRpbC5JbWFnZUtpbmQuUkdCXzI0QlBQKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0NodW5rSGVpZ2h0ID0gRlVMTF9DSFVOS19IRUlHSFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbXNJblRoaXNDaHVuayA9IHdpZHRoICogdGhpc0NodW5rSGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsQ2h1bmtzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj0gZnVsbENodW5rcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0NodW5rSGVpZ2h0ID0gcGFydGlhbENodW5rSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbXNJblRoaXNDaHVuayA9IHdpZHRoICogdGhpc0NodW5rSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFBvcyA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gZWxlbXNJblRoaXNDaHVuazsgai0tOykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gc3JjW3NyY1BvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbZGVzdFBvcysrXSA9IHNyY1tzcmNQb3MrK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RQb3MrK10gPSBzcmNbc3JjUG9zKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gMjU1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnB1dEltYWdlRGF0YShjaHVua0ltZ0RhdGEsIDAsIGkgKiBGVUxMX0NIVU5LX0hFSUdIVCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJiYWQgaW1hZ2Uga2luZDogXCIuY29uY2F0KGltZ0RhdGEua2luZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcHV0QmluYXJ5SW1hZ2VNYXNrKGN0eCwgaW1nRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gaW1nRGF0YS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJ0aWFsQ2h1bmtIZWlnaHQgPSBoZWlnaHQgJSBGVUxMX0NIVU5LX0hFSUdIVDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmdWxsQ2h1bmtzID0gKGhlaWdodCAtIHBhcnRpYWxDaHVua0hlaWdodCkgLyBGVUxMX0NIVU5LX0hFSUdIVDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b3RhbENodW5rcyA9IHBhcnRpYWxDaHVua0hlaWdodCA9PT0gMCA/IGZ1bGxDaHVua3MgOiBmdWxsQ2h1bmtzICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVua0ltZ0RhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKHdpZHRoLCBGVUxMX0NIVU5LX0hFSUdIVCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3JjUG9zID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcmMgPSBpbWdEYXRhLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzdCA9IGNodW5rSW1nRGF0YS5kYXRhO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvdGFsQ2h1bmtzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGhpc0NodW5rSGVpZ2h0ID0gaSA8IGZ1bGxDaHVua3MgPyBGVUxMX0NIVU5LX0hFSUdIVCA6IHBhcnRpYWxDaHVua0hlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzdFBvcyA9IDM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXNDaHVua0hlaWdodDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXNrID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHdpZHRoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtID0gc3JjW3NyY1BvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrID0gMTI4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RQb3NdID0gZWxlbSAmIG1hc2sgPyAwIDogMjU1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFBvcyArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayA+Pj0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5wdXRJbWFnZURhdGEoY2h1bmtJbWdEYXRhLCAwLCBpICogRlVMTF9DSFVOS19IRUlHSFQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY29weUN0eFN0YXRlKHNvdXJjZUN0eCwgZGVzdEN0eCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBbJ3N0cm9rZVN0eWxlJywgJ2ZpbGxTdHlsZScsICdmaWxsUnVsZScsICdnbG9iYWxBbHBoYScsICdsaW5lV2lkdGgnLCAnbGluZUNhcCcsICdsaW5lSm9pbicsICdtaXRlckxpbWl0JywgJ2dsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbicsICdmb250J107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHByb3BlcnRpZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlQ3R4W3Byb3BlcnR5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RDdHhbcHJvcGVydHldID0gc291cmNlQ3R4W3Byb3BlcnR5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VDdHguc2V0TGluZURhc2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RDdHguc2V0TGluZURhc2goc291cmNlQ3R4LmdldExpbmVEYXNoKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RDdHgubGluZURhc2hPZmZzZXQgPSBzb3VyY2VDdHgubGluZURhc2hPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXNldEN0eFRvRGVmYXVsdChjdHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9ICcjMDAwMDAwJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAnIzAwMDAwMCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguZmlsbFJ1bGUgPSAnbm9uemVybyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHgubGluZUNhcCA9ICdidXR0JztcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5saW5lSm9pbiA9ICdtaXRlcic7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHgubWl0ZXJMaW1pdCA9IDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguZm9udCA9ICcxMHB4IHNhbnMtc2VyaWYnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LnNldExpbmVEYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2V0TGluZURhc2goW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5saW5lRGFzaE9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb21wb3NlU01hc2tCYWNrZHJvcChieXRlcywgcjAsIGcwLCBiMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGJ5dGVzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDM7IGkgPCBsZW5ndGg7IGkgKz0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbHBoYSA9IGJ5dGVzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzW2kgLSAzXSA9IHIwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc1tpIC0gMl0gPSBnMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbaSAtIDFdID0gYjA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhbHBoYSA8IDI1NSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWxwaGFfID0gMjU1IC0gYWxwaGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzW2kgLSAzXSA9IGJ5dGVzW2kgLSAzXSAqIGFscGhhICsgcjAgKiBhbHBoYV8gPj4gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbaSAtIDJdID0gYnl0ZXNbaSAtIDJdICogYWxwaGEgKyBnMCAqIGFscGhhXyA+PiA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc1tpIC0gMV0gPSBieXRlc1tpIC0gMV0gKiBhbHBoYSArIGIwICogYWxwaGFfID4+IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY29tcG9zZVNNYXNrQWxwaGEobWFza0RhdGEsIGxheWVyRGF0YSwgdHJhbnNmZXJNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBtYXNrRGF0YS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSAxIC8gMjU1O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMzsgaSA8IGxlbmd0aDsgaSArPSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFscGhhID0gdHJhbnNmZXJNYXAgPyB0cmFuc2Zlck1hcFttYXNrRGF0YVtpXV0gOiBtYXNrRGF0YVtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllckRhdGFbaV0gPSBsYXllckRhdGFbaV0gKiBhbHBoYSAqIHNjYWxlIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBvc2VTTWFza0x1bWlub3NpdHkobWFza0RhdGEsIGxheWVyRGF0YSwgdHJhbnNmZXJNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBtYXNrRGF0YS5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAzOyBpIDwgbGVuZ3RoOyBpICs9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IG1hc2tEYXRhW2kgLSAzXSAqIDc3ICsgbWFza0RhdGFbaSAtIDJdICogMTUyICsgbWFza0RhdGFbaSAtIDFdICogMjg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJEYXRhW2ldID0gdHJhbnNmZXJNYXAgPyBsYXllckRhdGFbaV0gKiB0cmFuc2Zlck1hcFt5ID4+IDhdID4+IDggOiBsYXllckRhdGFbaV0gKiB5ID4+IDE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2VuZXJpY0NvbXBvc2VTTWFzayhtYXNrQ3R4LCBsYXllckN0eCwgd2lkdGgsIGhlaWdodCwgc3VidHlwZSwgYmFja2Ryb3AsIHRyYW5zZmVyTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzQmFja2Ryb3AgPSAhIWJhY2tkcm9wO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIwID0gaGFzQmFja2Ryb3AgPyBiYWNrZHJvcFswXSA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZzAgPSBoYXNCYWNrZHJvcCA/IGJhY2tkcm9wWzFdIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiMCA9IGhhc0JhY2tkcm9wID8gYmFja2Ryb3BbMl0gOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvc2VGbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1YnR5cGUgPT09ICdMdW1pbm9zaXR5Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2VGbiA9IGNvbXBvc2VTTWFza0x1bWlub3NpdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2VGbiA9IGNvbXBvc2VTTWFza0FscGhhO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgUElYRUxTX1RPX1BST0NFU1MgPSAxMDQ4NTc2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rU2l6ZSA9IE1hdGgubWluKGhlaWdodCwgTWF0aC5jZWlsKFBJWEVMU19UT19QUk9DRVNTIC8gd2lkdGgpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3cgKz0gY2h1bmtTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rSGVpZ2h0ID0gTWF0aC5taW4oY2h1bmtTaXplLCBoZWlnaHQgLSByb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXNrRGF0YSA9IG1hc2tDdHguZ2V0SW1hZ2VEYXRhKDAsIHJvdywgd2lkdGgsIGNodW5rSGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGF5ZXJEYXRhID0gbGF5ZXJDdHguZ2V0SW1hZ2VEYXRhKDAsIHJvdywgd2lkdGgsIGNodW5rSGVpZ2h0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNCYWNrZHJvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NlU01hc2tCYWNrZHJvcChtYXNrRGF0YS5kYXRhLCByMCwgZzAsIGIwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NlRm4obWFza0RhdGEuZGF0YSwgbGF5ZXJEYXRhLmRhdGEsIHRyYW5zZmVyTWFwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrQ3R4LnB1dEltYWdlRGF0YShsYXllckRhdGEsIDAsIHJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb21wb3NlU01hc2soY3R4LCBzbWFzaywgbGF5ZXJDdHgsIHdlYkdMQ29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hc2sgPSBzbWFzay5jYW52YXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFza0N0eCA9IHNtYXNrLmNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguc2V0VHJhbnNmb3JtKHNtYXNrLnNjYWxlWCwgMCwgMCwgc21hc2suc2NhbGVZLCBzbWFzay5vZmZzZXRYLCBzbWFzay5vZmZzZXRZKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYWNrZHJvcCA9IHNtYXNrLmJhY2tkcm9wIHx8IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc21hc2sudHJhbnNmZXJNYXAgJiYgd2ViR0xDb250ZXh0LmlzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb3NlZCA9IHdlYkdMQ29udGV4dC5jb21wb3NlU01hc2soe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcjogbGF5ZXJDdHguY2FudmFzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrOiBtYXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlOiBzbWFzay5zdWJ0eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2Ryb3A6IGJhY2tkcm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoY29tcG9zZWQsIHNtYXNrLm9mZnNldFgsIHNtYXNrLm9mZnNldFkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJpY0NvbXBvc2VTTWFzayhtYXNrQ3R4LCBsYXllckN0eCwgbWFzay53aWR0aCwgbWFzay5oZWlnaHQsIHNtYXNrLnN1YnR5cGUsIGJhY2tkcm9wLCBzbWFzay50cmFuc2Zlck1hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKG1hc2ssIDAsIDApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIExJTkVfQ0FQX1NUWUxFUyA9IFsnYnV0dCcsICdyb3VuZCcsICdzcXVhcmUnXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIExJTkVfSk9JTl9TVFlMRVMgPSBbJ21pdGVyJywgJ3JvdW5kJywgJ2JldmVsJ107XG4gICAgICAgICAgICAgICAgICAgIHZhciBOT1JNQUxfQ0xJUCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgRU9fQ0xJUCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBDYW52YXNHcmFwaGljcy5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZWdpbkRyYXdpbmc6IGZ1bmN0aW9uIGJlZ2luRHJhd2luZyhfcmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybSA9IF9yZWYudHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3cG9ydCA9IF9yZWYudmlld3BvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYkdHJhbnNwYXJlbmN5ID0gX3JlZi50cmFuc3BhcmVuY3ksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW5jeSA9IF9yZWYkdHJhbnNwYXJlbmN5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkdHJhbnNwYXJlbmN5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmJGJhY2tncm91bmQgPSBfcmVmLmJhY2tncm91bmQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQgPSBfcmVmJGJhY2tncm91bmQgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmJGJhY2tncm91bmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5jdHguY2FudmFzLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmN0eC5jYW52YXMuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBiYWNrZ3JvdW5kIHx8ICdyZ2IoMjU1LCAyNTUsIDI1NSknO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc3BhcmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zcGFyZW50Q2FudmFzID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoJ3RyYW5zcGFyZW50Jywgd2lkdGgsIGhlaWdodCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9zaXRlQ3R4ID0gdGhpcy5jdHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNwYXJlbnRDYW52YXMgPSB0cmFuc3BhcmVudENhbnZhcy5jYW52YXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdHJhbnNwYXJlbnRDYW52YXMuY29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsIHRoaXMuY29tcG9zaXRlQ3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldEN0eFRvRGVmYXVsdCh0aGlzLmN0eCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnRyYW5zZm9ybS5hcHBseSh0aGlzLmN0eCwgdHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsIHZpZXdwb3J0LnRyYW5zZm9ybSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXNlVHJhbnNmb3JtID0gdGhpcy5jdHgubW96Q3VycmVudFRyYW5zZm9ybS5zbGljZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYWtlQW5ub0RpbXModGhpcy5hbm5vdGF0aW9ucywgdGhpcy5iYXNlVHJhbnNmb3JtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmltYWdlTGF5ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZUxheWVyLmJlZ2luTGF5b3V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVPcGVyYXRvckxpc3Q6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2V4ZWN1dGVPcGVyYXRvckxpc3Qob3BlcmF0b3JMaXN0LCBleGVjdXRpb25TdGFydElkeCwgY29udGludWVDYWxsYmFjaywgc3RlcHBlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcmdzQXJyYXkgPSBvcGVyYXRvckxpc3QuYXJnc0FycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbkFycmF5ID0gb3BlcmF0b3JMaXN0LmZuQXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSBleGVjdXRpb25TdGFydElkeCB8fCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcmdzQXJyYXlMZW4gPSBhcmdzQXJyYXkubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NBcnJheUxlbiA9PT0gaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmtPcGVyYXRpb25zID0gYXJnc0FycmF5TGVuIC0gaSA+IEVYRUNVVElPTl9TVEVQUyAmJiB0eXBlb2YgY29udGludWVDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kVGltZSA9IGNodW5rT3BlcmF0aW9ucyA/IERhdGUubm93KCkgKyBFWEVDVVRJT05fVElNRSA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ZXBzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tbW9uT2JqcyA9IHRoaXMuY29tbW9uT2JqcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqcyA9IHRoaXMub2JqcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm5JZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGVwcGVyICE9PSB1bmRlZmluZWQgJiYgaSA9PT0gc3RlcHBlci5uZXh0QnJlYWtQb2ludCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcHBlci5icmVha0l0KGksIGNvbnRpbnVlQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbklkID0gZm5BcnJheVtpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm5JZCAhPT0gX3V0aWwuT1BTLmRlcGVuZGVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbZm5JZF0uYXBwbHkodGhpcywgYXJnc0FycmF5W2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXBzID0gYXJnc0FycmF5W2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMCwgbm4gPSBkZXBzLmxlbmd0aDsgbiA8IG5uOyBuKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVwT2JqSWQgPSBkZXBzW25dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21tb24gPSBkZXBPYmpJZFswXSA9PT0gJ2cnICYmIGRlcE9iaklkWzFdID09PSAnXyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ianNQb29sID0gY29tbW9uID8gY29tbW9uT2JqcyA6IG9ianM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9ianNQb29sLmhhcyhkZXBPYmpJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Jqc1Bvb2wuZ2V0KGRlcE9iaklkLCBjb250aW51ZUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09PSBhcmdzQXJyYXlMZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNodW5rT3BlcmF0aW9ucyAmJiArK3N0ZXBzID4gRVhFQ1VUSU9OX1NURVBTKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRGF0ZS5ub3coKSA+IGVuZFRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZUNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmREcmF3aW5nOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19lbmREcmF3aW5nKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2sgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmRTTWFza0dyb3VwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNwYXJlbnRDYW52YXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNvbXBvc2l0ZUN0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSh0aGlzLnRyYW5zcGFyZW50Q2FudmFzLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zcGFyZW50Q2FudmFzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZENhbnZhc2VzLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWJHTENvbnRleHQuY2xlYXIoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmltYWdlTGF5ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZUxheWVyLmVuZExheW91dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRMaW5lV2lkdGg6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldExpbmVXaWR0aCh3aWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5saW5lV2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRMaW5lQ2FwOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRMaW5lQ2FwKHN0eWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubGluZUNhcCA9IExJTkVfQ0FQX1NUWUxFU1tzdHlsZV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TGluZUpvaW46IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldExpbmVKb2luKHN0eWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubGluZUpvaW4gPSBMSU5FX0pPSU5fU1RZTEVTW3N0eWxlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRNaXRlckxpbWl0OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRNaXRlckxpbWl0KGxpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubWl0ZXJMaW1pdCA9IGxpbWl0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldERhc2g6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldERhc2goZGFzaEFycmF5LCBkYXNoUGhhc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3R4ID0gdGhpcy5jdHg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LnNldExpbmVEYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNldExpbmVEYXNoKGRhc2hBcnJheSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5saW5lRGFzaE9mZnNldCA9IGRhc2hQaGFzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVuZGVyaW5nSW50ZW50OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRSZW5kZXJpbmdJbnRlbnQoaW50ZW50KSB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZsYXRuZXNzOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRGbGF0bmVzcyhmbGF0bmVzcykge30sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRHU3RhdGU6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldEdTdGF0ZShzdGF0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBzdGF0ZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdGF0ZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBzdGF0ZVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gc3RhdGVbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xXJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExpbmVXaWR0aCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xDJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExpbmVDYXAodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdMSic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMaW5lSm9pbih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ01MJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE1pdGVyTGltaXQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERhc2godmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnUkknOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVuZGVyaW5nSW50ZW50KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRkwnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RmxhdG5lc3ModmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdGb250JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEZvbnQodmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ0EnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHJva2VBbHBoYSA9IHN0YXRlWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjYSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LmZpbGxBbHBoYSA9IHN0YXRlWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4Lmdsb2JhbEFscGhhID0gc3RhdGVbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0JNJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnU01hc2snOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGVTdGFjay5sZW5ndGggPiAwICYmIHRoaXMuc3RhdGVTdGFja1t0aGlzLnN0YXRlU3RhY2subGVuZ3RoIC0gMV0uYWN0aXZlU01hc2sgPT09IHRoaXMuY3VycmVudC5hY3RpdmVTTWFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdXNwZW5kU01hc2tHcm91cCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmRTTWFza0dyb3VwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2sgPSB2YWx1ZSA/IHRoaXMudGVtcFNNYXNrIDogbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpblNNYXNrR3JvdXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBTTWFzayA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5TTWFza0dyb3VwOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19iZWdpblNNYXNrR3JvdXAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFjdGl2ZVNNYXNrID0gdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkcmF3bldpZHRoID0gYWN0aXZlU01hc2suY2FudmFzLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkcmF3bkhlaWdodCA9IGFjdGl2ZVNNYXNrLmNhbnZhcy5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhY2hlSWQgPSAnc21hc2tHcm91cEF0JyArIHRoaXMuZ3JvdXBMZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NyYXRjaENhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKGNhY2hlSWQsIGRyYXduV2lkdGgsIGRyYXduSGVpZ2h0LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudEN0eCA9IHRoaXMuY3R4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VHJhbnNmb3JtID0gY3VycmVudEN0eC5tb3pDdXJyZW50VHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JvdXBDdHggPSBzY3JhdGNoQ2FudmFzLmNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBDdHguc2NhbGUoMSAvIGFjdGl2ZVNNYXNrLnNjYWxlWCwgMSAvIGFjdGl2ZVNNYXNrLnNjYWxlWSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBDdHgudHJhbnNsYXRlKC1hY3RpdmVTTWFzay5vZmZzZXRYLCAtYWN0aXZlU01hc2sub2Zmc2V0WSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBDdHgudHJhbnNmb3JtLmFwcGx5KGdyb3VwQ3R4LCBjdXJyZW50VHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVTTWFzay5zdGFydFRyYW5zZm9ybUludmVyc2UgPSBncm91cEN0eC5tb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5Q3R4U3RhdGUoY3VycmVudEN0eCwgZ3JvdXBDdHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gZ3JvdXBDdHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRHU3RhdGUoW1snQk0nLCAnc291cmNlLW92ZXInXSwgWydjYScsIDFdLCBbJ0NBJywgMV1dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwU3RhY2sucHVzaChjdXJyZW50Q3R4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwTGV2ZWwrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzdXNwZW5kU01hc2tHcm91cDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZW5kU01hc2tHcm91cCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JvdXBDdHggPSB0aGlzLmN0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwTGV2ZWwtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuZ3JvdXBTdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NlU01hc2sodGhpcy5jdHgsIHRoaXMuY3VycmVudC5hY3RpdmVTTWFzaywgZ3JvdXBDdHgsIHRoaXMud2ViR0xDb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlDdHhTdGF0ZShncm91cEN0eCwgdGhpcy5jdHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5yZXN1bWVTTWFza0N0eCA9IGdyb3VwQ3R4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbHRhVHJhbnNmb3JtID0gX3V0aWwuVXRpbC50cmFuc2Zvcm0odGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrLnN0YXJ0VHJhbnNmb3JtSW52ZXJzZSwgZ3JvdXBDdHgubW96Q3VycmVudFRyYW5zZm9ybSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsIGRlbHRhVHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cEN0eC5zYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBDdHguc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwQ3R4LmNsZWFyUmVjdCgwLCAwLCBncm91cEN0eC5jYW52YXMud2lkdGgsIGdyb3VwQ3R4LmNhbnZhcy5oZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwQ3R4LnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bWVTTWFza0dyb3VwOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19lbmRTTWFza0dyb3VwKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncm91cEN0eCA9IHRoaXMuY3VycmVudC5yZXN1bWVTTWFza0N0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudEN0eCA9IHRoaXMuY3R4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gZ3JvdXBDdHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cFN0YWNrLnB1c2goY3VycmVudEN0eCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cExldmVsKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kU01hc2tHcm91cDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZW5kU01hc2tHcm91cCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JvdXBDdHggPSB0aGlzLmN0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwTGV2ZWwtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuZ3JvdXBTdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NlU01hc2sodGhpcy5jdHgsIHRoaXMuY3VycmVudC5hY3RpdmVTTWFzaywgZ3JvdXBDdHgsIHRoaXMud2ViR0xDb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weUN0eFN0YXRlKGdyb3VwQ3R4LCB0aGlzLmN0eCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsdGFUcmFuc2Zvcm0gPSBfdXRpbC5VdGlsLnRyYW5zZm9ybSh0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2suc3RhcnRUcmFuc2Zvcm1JbnZlcnNlLCBncm91cEN0eC5tb3pDdXJyZW50VHJhbnNmb3JtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnRyYW5zZm9ybS5hcHBseSh0aGlzLmN0eCwgZGVsdGFUcmFuc2Zvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhdmU6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NhdmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvbGQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVN0YWNrLnB1c2gob2xkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBvbGQuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQucmVzdW1lU01hc2tDdHggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RvcmU6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3Jlc3RvcmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudC5yZXN1bWVTTWFza0N0eCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VtZVNNYXNrR3JvdXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrICE9PSBudWxsICYmICh0aGlzLnN0YXRlU3RhY2subGVuZ3RoID09PSAwIHx8IHRoaXMuc3RhdGVTdGFja1t0aGlzLnN0YXRlU3RhY2subGVuZ3RoIC0gMV0uYWN0aXZlU01hc2sgIT09IHRoaXMuY3VycmVudC5hY3RpdmVTTWFzaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmRTTWFza0dyb3VwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGVTdGFjay5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy5zdGF0ZVN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0NsaXAgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc190cmFuc2Zvcm0oYSwgYiwgYywgZCwgZSwgZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnRyYW5zZm9ybShhLCBiLCBjLCBkLCBlLCBmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RQYXRoOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19jb25zdHJ1Y3RQYXRoKG9wcywgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IGN1cnJlbnQueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGN1cnJlbnQueTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gMCwgaWkgPSBvcHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wc1tpXSB8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnJlY3RhbmdsZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBhcmdzW2orK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSBhcmdzW2orK107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSB0aGlzLmdldFNpbmdsZVBpeGVsV2lkdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVpZ2h0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCA9IHRoaXMuZ2V0U2luZ2xlUGl4ZWxXaWR0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4dyA9IHggKyB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeWggPSB5ICsgaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5saW5lVG8oeHcsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4dywgeWgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4LCB5aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5tb3ZlVG86XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGFyZ3NbaisrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmxpbmVUbzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBhcmdzW2orK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbyh4LCB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY3VydmVUbzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gYXJnc1tqICsgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGFyZ3NbaiArIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5iZXppZXJDdXJ2ZVRvKGFyZ3Nbal0sIGFyZ3NbaiArIDFdLCBhcmdzW2ogKyAyXSwgYXJnc1tqICsgM10sIHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY3VydmVUbzI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmJlemllckN1cnZlVG8oeCwgeSwgYXJnc1tqXSwgYXJnc1tqICsgMV0sIGFyZ3NbaiArIDJdLCBhcmdzW2ogKyAzXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGFyZ3NbaiArIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBhcmdzW2ogKyAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqICs9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmN1cnZlVG8zOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBhcmdzW2ogKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gYXJnc1tqICsgM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmJlemllckN1cnZlVG8oYXJnc1tqXSwgYXJnc1tqICsgMV0sIHgsIHksIHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY2xvc2VQYXRoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuc2V0Q3VycmVudFBvaW50KHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlUGF0aDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfY2xvc2VQYXRoKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc3Ryb2tlKGNvbnN1bWVQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZVBhdGggPSB0eXBlb2YgY29uc3VtZVBhdGggIT09ICd1bmRlZmluZWQnID8gY29uc3VtZVBhdGggOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3Ryb2tlQ29sb3IgPSB0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IE1hdGgubWF4KHRoaXMuZ2V0U2luZ2xlUGl4ZWxXaWR0aCgpICogTUlOX1dJRFRIX0ZBQ1RPUiwgdGhpcy5jdXJyZW50LmxpbmVXaWR0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gdGhpcy5jdXJyZW50LnN0cm9rZUFscGhhO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cm9rZUNvbG9yICYmIHN0cm9rZUNvbG9yLmhhc093blByb3BlcnR5KCd0eXBlJykgJiYgc3Ryb2tlQ29sb3IudHlwZSA9PT0gJ1BhdHRlcm4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHN0cm9rZUNvbG9yLmdldFBhdHRlcm4oY3R4LCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3VtZVBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IHRoaXMuY3VycmVudC5maWxsQWxwaGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VTdHJva2U6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2Nsb3NlU3Ryb2tlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJva2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19maWxsKGNvbnN1bWVQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZVBhdGggPSB0eXBlb2YgY29uc3VtZVBhdGggIT09ICd1bmRlZmluZWQnID8gY29uc3VtZVBhdGggOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsbENvbG9yID0gdGhpcy5jdXJyZW50LmZpbGxDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNQYXR0ZXJuRmlsbCA9IHRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmVlZFJlc3RvcmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1BhdHRlcm5GaWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zYXZlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVRyYW5zZm9ybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNldFRyYW5zZm9ybS5hcHBseShjdHgsIHRoaXMuYmFzZVRyYW5zZm9ybSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gZmlsbENvbG9yLmdldFBhdHRlcm4oY3R4LCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZFJlc3RvcmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdFT0ZpbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGwoJ2V2ZW5vZGQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nRU9GaWxsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmVlZFJlc3RvcmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3VtZVBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBlb0ZpbGw6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2VvRmlsbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdFT0ZpbGwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHJva2U6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2ZpbGxTdHJva2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxsKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cm9rZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVvRmlsbFN0cm9rZTogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZW9GaWxsU3Ryb2tlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0VPRmlsbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxsU3Ryb2tlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VGaWxsU3Ryb2tlOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19jbG9zZUZpbGxTdHJva2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGxTdHJva2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9zZUVPRmlsbFN0cm9rZTogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfY2xvc2VFT0ZpbGxTdHJva2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nRU9GaWxsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsbFN0cm9rZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFBhdGg6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2VuZFBhdGgoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaXA6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2NsaXAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2xpcCA9IE5PUk1BTF9DTElQO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVvQ2xpcDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZW9DbGlwKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0NsaXAgPSBFT19DTElQO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luVGV4dDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfYmVnaW5UZXh0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC50ZXh0TWF0cml4ID0gX3V0aWwuSURFTlRJVFlfTUFUUklYO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC50ZXh0TWF0cml4U2NhbGUgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC54ID0gdGhpcy5jdXJyZW50LmxpbmVYID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQueSA9IHRoaXMuY3VycmVudC5saW5lWSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kVGV4dDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZW5kVGV4dCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF0aHMgPSB0aGlzLnBlbmRpbmdUZXh0UGF0aHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGhzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXRoID0gcGF0aHNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zZXRUcmFuc2Zvcm0uYXBwbHkoY3R4LCBwYXRoLnRyYW5zZm9ybSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC50cmFuc2xhdGUocGF0aC54LCBwYXRoLnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmFkZFRvUGF0aChjdHgsIHBhdGguZm9udFNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmNsaXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGVuZGluZ1RleHRQYXRocztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRDaGFyU3BhY2luZzogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2V0Q2hhclNwYWNpbmcoc3BhY2luZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5jaGFyU3BhY2luZyA9IHNwYWNpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0V29yZFNwYWNpbmc6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldFdvcmRTcGFjaW5nKHNwYWNpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQud29yZFNwYWNpbmcgPSBzcGFjaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEhTY2FsZTogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2V0SFNjYWxlKHNjYWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnRleHRIU2NhbGUgPSBzY2FsZSAvIDEwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRMZWFkaW5nOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRMZWFkaW5nKGxlYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQubGVhZGluZyA9IC1sZWFkaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvbnQ6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldEZvbnQoZm9udFJlZk5hbWUsIHNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udE9iaiA9IHRoaXMuY29tbW9uT2Jqcy5nZXQoZm9udFJlZk5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb250T2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgZm9udCBmb3IgXCIuY29uY2F0KGZvbnRSZWZOYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5mb250TWF0cml4ID0gZm9udE9iai5mb250TWF0cml4ID8gZm9udE9iai5mb250TWF0cml4IDogX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC5mb250TWF0cml4WzBdID09PSAwIHx8IGN1cnJlbnQuZm9udE1hdHJpeFszXSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0ludmFsaWQgZm9udCBtYXRyaXggZm9yIGZvbnQgJyArIGZvbnRSZWZOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2l6ZSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IC1zaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmZvbnREaXJlY3Rpb24gPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmZvbnREaXJlY3Rpb24gPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5mb250ID0gZm9udE9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuZm9udFNpemUgPSBzaXplO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnRPYmouaXNUeXBlM0ZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gZm9udE9iai5sb2FkZWROYW1lIHx8ICdzYW5zLXNlcmlmJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYm9sZCA9IGZvbnRPYmouYmxhY2sgPyAnOTAwJyA6IGZvbnRPYmouYm9sZCA/ICdib2xkJyA6ICdub3JtYWwnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGFsaWMgPSBmb250T2JqLml0YWxpYyA/ICdpdGFsaWMnIDogJ25vcm1hbCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGVmYWNlID0gXCJcXFwiXCIuY29uY2F0KG5hbWUsIFwiXFxcIiwgXCIpLmNvbmNhdChmb250T2JqLmZhbGxiYWNrTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJyb3dzZXJGb250U2l6ZSA9IHNpemUgPCBNSU5fRk9OVF9TSVpFID8gTUlOX0ZPTlRfU0laRSA6IHNpemUgPiBNQVhfRk9OVF9TSVpFID8gTUFYX0ZPTlRfU0laRSA6IHNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LmZvbnRTaXplU2NhbGUgPSBzaXplIC8gYnJvd3NlckZvbnRTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmZvbnQgPSBcIlwiLmNvbmNhdChpdGFsaWMsIFwiIFwiKS5jb25jYXQoYm9sZCwgXCIgXCIpLmNvbmNhdChicm93c2VyRm9udFNpemUsIFwicHggXCIpLmNvbmNhdCh0eXBlZmFjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGV4dFJlbmRlcmluZ01vZGU6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldFRleHRSZW5kZXJpbmdNb2RlKG1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGUgPSBtb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRleHRSaXNlOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRUZXh0UmlzZShyaXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnRleHRSaXNlID0gcmlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlVGV4dDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfbW92ZVRleHQoeCwgeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC54ID0gdGhpcy5jdXJyZW50LmxpbmVYICs9IHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnkgPSB0aGlzLmN1cnJlbnQubGluZVkgKz0geTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRMZWFkaW5nTW92ZVRleHQ6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldExlYWRpbmdNb3ZlVGV4dCh4LCB5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMZWFkaW5nKC15KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVUZXh0KHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRleHRNYXRyaXg6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldFRleHRNYXRyaXgoYSwgYiwgYywgZCwgZSwgZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC50ZXh0TWF0cml4ID0gW2EsIGIsIGMsIGQsIGUsIGZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC50ZXh0TWF0cml4U2NhbGUgPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnggPSB0aGlzLmN1cnJlbnQubGluZVggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC55ID0gdGhpcy5jdXJyZW50LmxpbmVZID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0TGluZTogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfbmV4dExpbmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlVGV4dCgwLCB0aGlzLmN1cnJlbnQubGVhZGluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiogQ29tcHV0ZSB0aGUgY29vcmRpbmF0ZXMgYW5kIHdpZHRoIG9mIHRoZSBjaGFyYWN0ZXIgZ2l2ZW4gaXRzIHdpZHRoIGFuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogeC1vZmZzZXQgaW4gZm9udCBzcGFjZSwgYSBmb250IG9iamVjdCwgYW5kIGEgbWF0cml4IHVzZWQgZm9yIHRyYW5zZm9ybWluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICogZnJvbSBmb250IHNwYWNlIHRvIGRldmljZSBzcGFjZS4gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aGUgY2hhcmFjdGVyJ3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIHgsIHksIGFuZCB3aWR0aCBwcm9wZXJ0aWVzLCBhbmQgdGhlIHdpZHRoIG9mIGEgc3BhY2UgaW4gdGhlIGdpdmVuIGZvbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBhbGwgaW4gZGV2aWNlIHNwYWNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBtYWtlQ2hhckRpbXM6IGZ1bmN0aW9uIGNhbnZhc01ha2VDaGFyRGltcyhjaGFyV2lkdGgsIHhPZmZzZXQsIHNwYWNlV2lkdGgsIGZvbnQyZGV2KSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXBwbHlUcmFuc2Zvcm0gPSBmdW5jdGlvbihwLCBtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4dCA9IHBbMF0gKiBtWzBdICsgcFsxXSAqIG1bMl0gKyBtWzRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeXQgPSBwWzBdICogbVsxXSArIHBbMV0gKiBtWzNdICsgbVs1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt4dCwgeXRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFwcGx5VHJhbnNmb3JtWCA9IGZ1bmN0aW9uKHAsIG0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHh0ID0gcFswXSAqIG1bMF0gKyBwWzFdICogbVsyXSArIG1bNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4eSA9IGFwcGx5VHJhbnNmb3JtKFt4T2Zmc2V0LCAwXSwgZm9udDJkZXYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3ID0gYXBwbHlUcmFuc2Zvcm1YKFt4T2Zmc2V0ICsgY2hhcldpZHRoLCAwXSwgZm9udDJkZXYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaW1zID0ge3g6IHh5WzBdLCB5OiB4eVsxXX07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGltcy53aWR0aCA9IE1hdGguYWJzKHh5WzBdIC0gdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGltcy5zcGFjZVdpZHRoID0gc3BhY2VXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaW1zLnhQbHVzSGFsZldpZHRoID0gZGltcy54ICsgKDAuNSAqIGRpbXMud2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkaW1zO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBDb21wdXRlIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcXVhZHBvaW50cyBnaXZlbiBpdHMgdGhlIGFubm90YXRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBhbmQgYSBtYXRyaXggdXNlZCBmb3IgdHJhbnNmb3JtaW5nIGZyb20gZm9udCBzcGFjZSB0byBkZXZpY2Ugc3BhY2UuICovXG4gICAgICAgICAgICAgICAgICAgICAgICBtYWtlQW5ub0RpbXM6IGZ1bmN0aW9uIGNhbnZhc01ha2VBbm5vRGltcyhhbm5vdGF0aW9ucywgdXNlcjJkZXYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFubm90YXRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbm5vdCA9IGFubm90YXRpb25zW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFubm90LnN1YnR5cGUgfHwgKGFubm90LnN1YnR5cGUgIT0gJ0hpZ2hsaWdodCcgJiYgYW5ub3Quc3VidHlwZSAhPSAnVW5kZXJsaW5lJykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFubm90LnF1YWRQb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcHBseVRyYW5zZm9ybSA9IGZ1bmN0aW9uIChwLCBtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHh0ID0gcFswXSAqIG1bMF0gKyBwWzFdICogbVsyXSArIG1bNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHl0ID0gcFswXSAqIG1bMV0gKyBwWzFdICogbVszXSArIG1bNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt4dCwgeXRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1YWQgPSBhbm5vdC5xdWFkUG9pbnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF4eTAgPSBhcHBseVRyYW5zZm9ybShbcXVhZC54LCBxdWFkLnldLCB1c2VyMmRldik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVhZE90aGVyQ29ybmVyID0gW3F1YWQueCArIHF1YWQud2lkdGgsIHF1YWQueSArIHF1YWQuaGVpZ2h0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxeHkxID0gYXBwbHlUcmFuc2Zvcm0ocXVhZE90aGVyQ29ybmVyLCB1c2VyMmRldik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdC5xdWFkUG9pbnRzW2ldLmRpbXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21pblgnOiBNYXRoLm1pbihxeHkwWzBdLCBxeHkxWzBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWF4WCc6IE1hdGgubWF4KHF4eTBbMF0sIHF4eTFbMF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtaW5ZJzogTWF0aC5taW4ocXh5MFsxXSwgcXh5MVsxXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21heFknOiBNYXRoLm1heChxeHkwWzFdLCBxeHkxWzFdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBEZXRlcm1pbmVzIGlmIGNoYXJhY3Rlciwgd2l0aCB0aGUgZ2l2ZW4gZGltZW5zaW9ucywgZmFsbHMgd2l0aGluIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogYm91bmRzIG9mIGFubm90YXRpb24gYW5ub3QuIElmIHNvLCByZXR1cm5zIHRoZSAwLWJhc2VkIGluZGV4IG9mIHRoZSBxdWFkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiByZWdpb24gd2l0aGluIHdoaWNoIHRoZSBjaGFyYWN0ZXIgZmFsbHMuIElmIHRoZSBjaGFyYWN0ZXIgaXMgb3V0c2lkZSB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIGFubm90YXRpb24sIHJldHVybnMgLTEuICovXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFySW5Bbm5vdDogZnVuY3Rpb24gY2FudmFzQ2hhckluQW5ub3QoYW5ub3QsIGNkaW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhbm5vdC5zdWJ0eXBlIHx8IChhbm5vdC5zdWJ0eXBlICE9ICdIaWdobGlnaHQnICYmIGFubm90LnN1YnR5cGUgIT0gJ1VuZGVybGluZScpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgYW5ub3QucXVhZFBvaW50cyA9PSAndW5kZWZpbmVkJykgcmV0dXJuIC0xO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbm5vdC5xdWFkUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxZGltcyA9IGFubm90LnF1YWRQb2ludHNbaV0uZGltcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25seSBncmFiIGNoYXJhY3RlcnMgd2hlcmUgNTAlIG9mIHRoZSBjaGFyYWN0ZXInc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWR0aCBsaWVzIHdpdGhpbiB0aGUgYW5ub3RhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2RpbXMueFBsdXNIYWxmV2lkdGggPj0gcWRpbXMubWluWCAmJiBjZGltcy54UGx1c0hhbGZXaWR0aCA8PSBxZGltcy5tYXhYICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZGltcy55ID49cWRpbXMubWluWSAmJiBjZGltcy55IDw9IHFkaW1zLm1heFkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiogZ2V0IGxhc3QgY2hhciAoYS16IG9yIGRpZ2l0cykgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldExhc3RBWkNoYXI6IGZ1bmN0aW9uIGNhbnZhc0dyYXBoaWNzR2V0TGFzdEFaQ2hhciAoYW5ub3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFzdENoYXIsIGNoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGMgPSBhbm5vdC5jaGFycy5sZW5ndGgtMTsgYyA+PSAwOyBjLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBhbm5vdC5jaGFyc1tjXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoL15bXFx3XSokLy50ZXN0KGNoLmNoYXJhY3RlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGFyID0gY2g7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxhc3RDaGFyKSBsYXN0Q2hhciA9IGFubm90LmNoYXJzLnNsaWNlKC0xKVswXTtcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RDaGFyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBVcGRhdGUgdGhlIG1hcmt1cCBhcnJheSBmb3IgYW5ub3QsIHBsYWNpbmcgdGhlIGdpdmVuIGNoYXJhY3RlciBpbnRvIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogc3RyaW5nIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gcXVhZC4gKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZU1hcmt1cDogZnVuY3Rpb24gY2FudmFzR3JhcGhpY3NVcGRhdGVNYXJrdXAoYW5ub3QsIHF1YWQsIGdseXBoLCBjaGFyRGltcywgaXNTcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWFkIDwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJhY3RlciA9IGdseXBoLnN0cixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckluZm8gPSB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENoYXIsIG1hcmt1cEVuZCwgbGFzdENoYXJTcGFjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjaGFyYWN0ZXI9PT11bmRlZmluZWQgfHwgKCFhbm5vdC5tYXJrdXAgJiYgY2hhcmFjdGVyPT0nICcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFyYWN0ZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhciBkZXRhaWxzIGZvciBkZWJ1Z2dpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFySW5mby5nbHlwaCA9IGdseXBoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJJbmZvLmNoYXJEaW1zID0gY2hhckRpbXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckluZm8uaXNTcGFjZSA9IGlzU3BhY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkIHRvIGFubm90YXRpb24gb2JqZWN0XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYW5ub3QubWFya3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90Lm1hcmt1cCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdC5tYXJrdXBHZW9tID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90LmNoYXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90LnNwYWNlcyA9IHsnbic6MCwgJ3N1bVdpZHRoJzowfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhbm5vdC5tYXJrdXBbcXVhZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5ub3QubWFya3VwR2VvbVtxdWFkXS5icnggZW5zdXJlcyB0aGF0IG9ubHkgY2hhcmFjdGVycyBhcmUgYWRkZWQgdGhhdCBhcmUgcmlnaHQgb2YgdGhlIGZpcnN0IG9uZSBpbiBhbm5vdGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90Lm1hcmt1cEdlb21bcXVhZF0gPSB7YnJ4OiBjaGFyRGltcy54ICsgY2hhckRpbXMud2lkdGh9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdC5tYXJrdXBbcXVhZF0gPSBjaGFyYWN0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJJbmZvLmNoYXJhY3RlciA9IGNoYXJhY3RlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3QuY2hhcnMucHVzaChjaGFySW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3VwRW5kID0gYW5ub3QubWFya3VwW3F1YWRdLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGFyU3BhY2UgPSAoYW5ub3QubWFya3VwW3F1YWRdLmNoYXJBdChtYXJrdXBFbmQpID09ICcgJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4Y2x1ZGUgZG91YmxlIHNwYWNlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNTcGFjZSAmJiBsYXN0Q2hhclNwYWNlKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4Y2x1ZGUgcHJldmlvdXMgc3BhY2UgaWYgaXQgaXMgZnVydGhlciByaWdodCB0aGVuIGN1cnJlbnQgY2hhcmFjdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGFyID0gYW5ub3QuY2hhcnMuc2xpY2UoLTEpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihhbm5vdC5jaGFycy5sZW5ndGggPiAxICYmICFpc1NwYWNlICYmIGxhc3RDaGFyU3BhY2UgJiYgdHlwZW9mIGxhc3RDaGFyLmNoYXJEaW1zLnggIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q2hhci5jaGFyRGltcy54LyotY2hhckRpbXMuc3BhY2VXaWR0aCovPmNoYXJEaW1zLngrY2hhckRpbXMuc3BhY2VXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobGFzdENoYXIuaXNTcGFjZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdC5tYXJrdXBbcXVhZF0gPSBhbm5vdC5tYXJrdXBbcXVhZF0uc3Vic3RyaW5nKDAsIG1hcmt1cEVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdC5jaGFycyA9IGFubm90LmNoYXJzLnNwbGljZSgwLGFubm90LmNoYXJzLmxlbmd0aC0xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGFyID0gYW5ub3QuY2hhcnMuc2xpY2UoLTIpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3QubWFya3VwR2VvbVtxdWFkXS5icnggPSBsYXN0Q2hhci5jaGFyRGltcy54ICsgbGFzdENoYXIuY2hhckRpbXMud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNldCBtYXJrdXBFbmQgYW5kIGxhc3RDaGFyU3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmt1cEVuZCA9IGFubm90Lm1hcmt1cFtxdWFkXS5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENoYXJTcGFjZSA9IChhbm5vdC5tYXJrdXBbcXVhZF0uY2hhckF0KG1hcmt1cEVuZCkgPT0gJyAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluc2VydCBzcGFjZSBpZiAuLi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFyIHNwYWNlV2lkdGggPSBjaGFyRGltcy5zcGFjZVdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BhY2VXaWR0aCA9IGFubm90LnNwYWNlcy5uPjAgPyBhbm5vdC5zcGFjZXMuc3VtV2lkdGgvYW5ub3Quc3BhY2VzLm4gOiBjaGFyRGltcy5zcGFjZVdpZHRoKjAuODU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNTcGFjZSAmJiAhbGFzdENoYXJTcGFjZSAmJiAoY2hhckRpbXMuc3BhY2VXaWR0aCAhPT0gMCB8fCAvXltcXHUyMDFDXFwoXSokLy50ZXN0KGNoYXJhY3RlcikgKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckRpbXMueCA+IGFubm90Lm1hcmt1cEdlb21bcXVhZF0uYnJ4ICsgc3BhY2VXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGFzdCBjaGFyIChhLXogb3IgZGlnaXRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENoYXIgPSB0aGlzLmdldExhc3RBWkNoYXIoYW5ub3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG8gbm90IGFkZCAnbWluaScgb3IgY29tcGFyYXRpdmVseSBzbWFsbCBzcGFjZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGNoYXJEaW1zLnggLSBhbm5vdC5tYXJrdXBHZW9tW3F1YWRdLmJyeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVNpemUgPSB3aWR0aC9sYXN0Q2hhci5jaGFyRGltcy53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pU3BhY2UgPSByZWxhdGl2ZVNpemU8MC4xLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxsU3BhY2UgPSBhbm5vdC5zcGFjZXMubj4wID8gd2lkdGgvKGFubm90LnNwYWNlcy5zdW1XaWR0aC9hbm5vdC5zcGFjZXMubik8MC4zIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighbWluaVNwYWNlICYmICFzbWFsbFNwYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3QubWFya3VwW3F1YWRdICs9ICcgJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFySW5mby5jaGFyYWN0ZXIgPSAnICc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3QuY2hhcnMucHVzaChjaGFySW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGQgY3VycmVudCBjaGFyYWN0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKCFpc1NwYWNlICYmIGFubm90Lm1hcmt1cEdlb21bcXVhZF0uYnJ4IDwgY2hhckRpbXMueCArIGNoYXJEaW1zLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNTcGFjZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChhbm5vdC5tYXJrdXBHZW9tW3F1YWRdLmJyeCA8IGNoYXJEaW1zLnggKyBjaGFyRGltcy53aWR0aCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhcmFjdGVyPT0nICcgJiYgYW5ub3QubWFya3VwR2VvbVtxdWFkXS5icnggPCBjaGFyRGltcy54ICsgbGFzdENoYXIuY2hhckRpbXMud2lkdGgpKSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdC5tYXJrdXBHZW9tW3F1YWRdLmJyeCA9IGNoYXJEaW1zLnggKyBjaGFyRGltcy53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFubm90Lm1hcmt1cEdlb21bcXVhZF0uYnJ4ID0gKGNoYXJhY3Rlcj09PScgJyB8fCBpc1NwYWNlKSA/IChjaGFyRGltcy54ICsgY2hhckRpbXMuc3BhY2VXaWR0aCkgOiAoY2hhckRpbXMueCArIGNoYXJEaW1zLndpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90Lm1hcmt1cFtxdWFkXSArPSBjaGFyYWN0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFySW5mby5jaGFyYWN0ZXIgPSBjaGFyYWN0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdC5jaGFycy5wdXNoKGNoYXJJbmZvKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNoYXJhY3Rlcj09PScgJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90LnNwYWNlcy5zdW1XaWR0aCA9IGFubm90LnNwYWNlcy5zdW1XaWR0aCArIGNoYXJEaW1zLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90LnNwYWNlcy5uKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkIHNwYWNlIGJ1dCBleGNsdWRlIG1pbmkgc3BhY2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1NwYWNlICYmIChhbm5vdC5tYXJrdXBHZW9tW3F1YWRdLmJyeCA8IGNoYXJEaW1zLnggKyBsYXN0Q2hhci5jaGFyRGltcy53aWR0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJJbmZvLmNoYXJhY3RlciA9IGNoYXJhY3RlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxhc3QgY2hhciAoYS16IG9yIGRpZ2l0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGFyID0gdGhpcy5nZXRMYXN0QVpDaGFyKGFubm90KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvIG5vdCBhZGQgJ21pbmknIHNwYWNlcyB0aGF0IGFyZSBiZXR3ZWVuIHRvIGNoYXJhY3RlcnMgb2Ygb25lIHdvcmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWxhdGl2ZVNpemUgPSBjaGFyRGltcy53aWR0aC9sYXN0Q2hhci5jaGFyRGltcy53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlbGF0aXZlU2l6ZTwwLjIpIHJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhjbHVkZSBzcGFjZXMgdGhhdCBhcmUgc21hbGwgY29tcHJlZCB0byBvdGhlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbm5vdC5zcGFjZXMubj4wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF2ZyA9IGFubm90LnNwYWNlcy5zdW1XaWR0aC9hbm5vdC5zcGFjZXMubjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjaGFyRGltcy53aWR0aC9hdmc8MC4zKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdC5zcGFjZXMuc3VtV2lkdGggPSBhbm5vdC5zcGFjZXMuc3VtV2lkdGggKyBjaGFyRGltcy53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90LnNwYWNlcy5uKys7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBzcGFjZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3QubWFya3VwR2VvbVtxdWFkXS5icnggPSBjaGFyRGltcy54ICsgY2hhckRpbXMud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdC5tYXJrdXBbcXVhZF0gKz0gY2hhcmFjdGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3QuY2hhcnMucHVzaChjaGFySW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWludENoYXI6IGZ1bmN0aW9uIHBhaW50Q2hhcihjaGFyYWN0ZXIsIHgsIHksIHBhdHRlcm5UcmFuc2Zvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3R4ID0gdGhpcy5jdHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnQgPSBjdXJyZW50LmZvbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRSZW5kZXJpbmdNb2RlID0gY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udFNpemUgPSBjdXJyZW50LmZvbnRTaXplIC8gY3VycmVudC5mb250U2l6ZVNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxsU3Ryb2tlTW9kZSA9IHRleHRSZW5kZXJpbmdNb2RlICYgX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0VfTUFTSztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNBZGRUb1BhdGhTZXQgPSAhISh0ZXh0UmVuZGVyaW5nTW9kZSAmIF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkFERF9UT19QQVRIX0ZMQUcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXR0ZXJuRmlsbCA9IGN1cnJlbnQucGF0dGVybkZpbGwgJiYgZm9udC5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhZGRUb1BhdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9udC5kaXNhYmxlRm9udEZhY2UgfHwgaXNBZGRUb1BhdGhTZXQgfHwgcGF0dGVybkZpbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9QYXRoID0gZm9udC5nZXRQYXRoR2VuZXJhdG9yKHRoaXMuY29tbW9uT2JqcywgY2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9udC5kaXNhYmxlRm9udEZhY2UgfHwgcGF0dGVybkZpbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSh4LCB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb1BhdGgoY3R4LCBmb250U2l6ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhdHRlcm5UcmFuc2Zvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zZXRUcmFuc2Zvcm0uYXBwbHkoY3R4LCBwYXR0ZXJuVHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTCB8fCBmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5maWxsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsbFN0cm9rZU1vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLlNUUk9LRSB8fCBmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMIHx8IGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxUZXh0KGNoYXJhY3RlciwgeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsbFN0cm9rZU1vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLlNUUk9LRSB8fCBmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2VUZXh0KGNoYXJhY3RlciwgeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBZGRUb1BhdGhTZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhdGhzID0gdGhpcy5wZW5kaW5nVGV4dFBhdGhzIHx8ICh0aGlzLnBlbmRpbmdUZXh0UGF0aHMgPSBbXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBjdHgubW96Q3VycmVudFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiB5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IGZvbnRTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9QYXRoOiBhZGRUb1BhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGlzRm9udFN1YnBpeGVsQUFFbmFibGVkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdHggPSB0aGlzLmNhbnZhc0ZhY3RvcnkuY3JlYXRlKDEwLCAxMCkuY29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2NhbGUoMS41LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguZmlsbFRleHQoJ0knLCAwLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIDEwLCAxMCkuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDM7IGkgPCBkYXRhLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhW2ldID4gMCAmJiBkYXRhW2ldIDwgMjU1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsICdpc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZCcsIGVuYWJsZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1RleHQ6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3Nob3dUZXh0KGdseXBocykge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnQgPSBjdXJyZW50LmZvbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9udC5pc1R5cGUzRm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaG93VHlwZTNUZXh0KGdseXBocyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnRTaXplID0gY3VycmVudC5mb250U2l6ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250U2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250U2l6ZVNjYWxlID0gY3VycmVudC5mb250U2l6ZVNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyU3BhY2luZyA9IGN1cnJlbnQuY2hhclNwYWNpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdvcmRTcGFjaW5nID0gY3VycmVudC53b3JkU3BhY2luZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BhY2VXaWR0aCA9IGZvbnQuY29kZWQgPyBmb250LnNwYWNlV2lkdGggOiBmb250LnNwYWNlV2lkdGggKiAwLjAwMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udERpcmVjdGlvbiA9IGN1cnJlbnQuZm9udERpcmVjdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dEhTY2FsZSA9IGN1cnJlbnQudGV4dEhTY2FsZSAqIGZvbnREaXJlY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoc0xlbmd0aCA9IGdseXBocy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnRpY2FsID0gZm9udC52ZXJ0aWNhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BhY2luZ0RpciA9IHZlcnRpY2FsID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0Vk1ldHJpY3MgPSBmb250LmRlZmF1bHRWTWV0cmljcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGhBZHZhbmNlU2NhbGUgPSBmb250U2l6ZSAqIGN1cnJlbnQuZm9udE1hdHJpeFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2ltcGxlRmlsbFRleHQgPSBjdXJyZW50LnRleHRSZW5kZXJpbmdNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMICYmICFmb250LmRpc2FibGVGb250RmFjZSAmJiAhY3VycmVudC5wYXR0ZXJuRmlsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXR0ZXJuVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN3LCBzcGFjZVdpZHRoUHJvaiwgZm9udDJkZXYgPSBbXTtcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQucGF0dGVybkZpbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhdHRlcm4gPSBjdXJyZW50LmZpbGxDb2xvci5nZXRQYXR0ZXJuKGN0eCwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5UcmFuc2Zvcm0gPSBjdHgubW96Q3VycmVudFRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHBhdHRlcm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnRyYW5zZm9ybS5hcHBseShjdHgsIGN1cnJlbnQudGV4dE1hdHJpeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZShjdXJyZW50LngsIGN1cnJlbnQueSArIGN1cnJlbnQudGV4dFJpc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDJkZXYgPSBjdHgubW96Q3VycmVudFRyYW5zZm9ybS5zbGljZSgwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcHBseVRyYW5zZm9ybVggPSBmdW5jdGlvbihwLCBtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4dCA9IHBbMF0gKiBtWzBdICsgcFsxXSAqIG1bMl0gKyBtWzRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb2plY3RlZCBzcGFjZVdpZHRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3cgPSBhcHBseVRyYW5zZm9ybVgoW3NwYWNlV2lkdGgsMF0sIGZvbnQyZGV2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiB3aHkgMi4wPyBJIGNoYW5nZWQgaXQgdG8gM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpbXMuc3BhY2VXaWR0aCA9IChzd1swXSAtIGZvbnQyZGV2WzRdKSAvIDIuMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZVdpZHRoUHJvaiA9IChzdyAtIGZvbnQyZGV2WzRdKSAvIDMuMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250RGlyZWN0aW9uID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2NhbGUodGV4dEhTY2FsZSwgLTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zY2FsZSh0ZXh0SFNjYWxlLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gY3VycmVudC5saW5lV2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlID0gY3VycmVudC50ZXh0TWF0cml4U2NhbGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NhbGUgPT09IDAgfHwgbGluZVdpZHRoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxsU3Ryb2tlTW9kZSA9IGN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGUgJiBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRV9NQVNLO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFIHx8IGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lV2lkdGggPSB0aGlzLmdldFNpbmdsZVBpeGVsV2lkdGgoKSAqIE1JTl9XSURUSF9GQUNUT1I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lV2lkdGggLz0gc2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnRTaXplU2NhbGUgIT09IDEuMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2NhbGUoZm9udFNpemVTY2FsZSwgZm9udFNpemVTY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVXaWR0aCAvPSBmb250U2l6ZVNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHggPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGdseXBoc0xlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaCA9IGdseXBoc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzTnVtKShnbHlwaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggKz0gc3BhY2luZ0RpciAqIGdseXBoICogZm9udFNpemUgLyAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdG9yZU5lZWRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BhY2luZyA9IChnbHlwaC5pc1NwYWNlID8gd29yZFNwYWNpbmcgOiAwKSArIGNoYXJTcGFjaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhcmFjdGVyID0gZ2x5cGguZm9udENoYXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhY2NlbnQgPSBnbHlwaC5hY2NlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY2FsZWRYLCBzY2FsZWRZLCBzY2FsZWRBY2NlbnRYLCBzY2FsZWRBY2NlbnRZO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBnbHlwaC53aWR0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2bWV0cmljLCB2eCwgdnk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bWV0cmljID0gZ2x5cGgudm1ldHJpYyB8fCBkZWZhdWx0Vk1ldHJpY3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2eCA9IGdseXBoLnZtZXRyaWMgPyB2bWV0cmljWzFdIDogd2lkdGggKiAwLjU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2eCA9IC12eCAqIHdpZHRoQWR2YW5jZVNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnkgPSB2bWV0cmljWzJdICogd2lkdGhBZHZhbmNlU2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHZtZXRyaWMgPyAtdm1ldHJpY1swXSA6IHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVkWCA9IHZ4IC8gZm9udFNpemVTY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlZFkgPSAoeCArIHZ5KSAvIGZvbnRTaXplU2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZWRYID0geCAvIGZvbnRTaXplU2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZWRZID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250LnJlbWVhc3VyZSAmJiB3aWR0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWFzdXJlZFdpZHRoID0gY3R4Lm1lYXN1cmVUZXh0KGNoYXJhY3Rlcikud2lkdGggKiAxMDAwIC8gZm9udFNpemUgKiBmb250U2l6ZVNjYWxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGggPCBtZWFzdXJlZFdpZHRoICYmIHRoaXMuaXNGb250U3VicGl4ZWxBQUVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhcmFjdGVyU2NhbGVYID0gd2lkdGggLyBtZWFzdXJlZFdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RvcmVOZWVkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNjYWxlKGNoYXJhY3RlclNjYWxlWCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVkWCAvPSBjaGFyYWN0ZXJTY2FsZVg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdpZHRoICE9PSBtZWFzdXJlZFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVkWCArPSAod2lkdGggLSBtZWFzdXJlZFdpZHRoKSAvIDIwMDAgKiBmb250U2l6ZSAvIGZvbnRTaXplU2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hbm5vdGF0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgZ2x5cGggaXMgd2l0aGluIGFuIGFubm90YXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyRGltcyA9IHRoaXMubWFrZUNoYXJEaW1zKHdpZHRoICogZm9udFNpemUgKiBjdXJyZW50LmZvbnRNYXRyaXhbMF0sIHgsIHNwYWNlV2lkdGhQcm9qLCBmb250MmRldik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaC5wcmludCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmFubm90YXRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFubm90ID0gdGhpcy5hbm5vdGF0aW9uc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVhZCA9IHRoaXMuY2hhckluQW5ub3QoYW5ub3QsIGNoYXJEaW1zKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHF1YWQgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFubm90YXRpb25zW2pdLmhpZ2hsaWdodGVkVGV4dCArPSBnbHlwaC51bmljb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTWFya3VwKGFubm90LCBxdWFkLCBnbHlwaCwgY2hhckRpbXMsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaC5pc0luRm9udCB8fCBmb250Lm1pc3NpbmdGaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2ltcGxlRmlsbFRleHQgJiYgIWFjY2VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5maWxsVGV4dChjaGFyYWN0ZXIsIHNjYWxlZFgsIHNjYWxlZFkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhaW50Q2hhcihjaGFyYWN0ZXIsIHNjYWxlZFgsIHNjYWxlZFksIHBhdHRlcm5UcmFuc2Zvcm0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZWRBY2NlbnRYID0gc2NhbGVkWCArIGFjY2VudC5vZmZzZXQueCAvIGZvbnRTaXplU2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlZEFjY2VudFkgPSBzY2FsZWRZIC0gYWNjZW50Lm9mZnNldC55IC8gZm9udFNpemVTY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWludENoYXIoYWNjZW50LmZvbnRDaGFyLCBzY2FsZWRBY2NlbnRYLCBzY2FsZWRBY2NlbnRZLCBwYXR0ZXJuVHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhcldpZHRoID0gd2lkdGggKiB3aWR0aEFkdmFuY2VTY2FsZSArIHNwYWNpbmcgKiBmb250RGlyZWN0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IGNoYXJXaWR0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdG9yZU5lZWRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnkgLT0geCAqIHRleHRIU2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC54ICs9IHggKiB0ZXh0SFNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1R5cGUzVGV4dDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2hvd1R5cGUzVGV4dChnbHlwaHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3R4ID0gdGhpcy5jdHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnQgPSBjdXJyZW50LmZvbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnRTaXplID0gY3VycmVudC5mb250U2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udERpcmVjdGlvbiA9IGN1cnJlbnQuZm9udERpcmVjdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BhY2luZ0RpciA9IGZvbnQudmVydGljYWwgPyAxIDogLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJTcGFjaW5nID0gY3VycmVudC5jaGFyU3BhY2luZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd29yZFNwYWNpbmcgPSBjdXJyZW50LndvcmRTcGFjaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0SFNjYWxlID0gY3VycmVudC50ZXh0SFNjYWxlICogZm9udERpcmVjdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udE1hdHJpeCA9IGN1cnJlbnQuZm9udE1hdHJpeCB8fCBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhzTGVuZ3RoID0gZ2x5cGhzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNUZXh0SW52aXNpYmxlID0gY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuSU5WSVNJQkxFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBnbHlwaCwgd2lkdGgsIHNwYWNpbmdMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN3LCBzcGFjZVdpZHRoUHJvaiwgZm9udDJkZXYgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1RleHRJbnZpc2libGUgfHwgZm9udFNpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnRyYW5zZm9ybS5hcHBseShjdHgsIGN1cnJlbnQudGV4dE1hdHJpeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZShjdXJyZW50LngsIGN1cnJlbnQueSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250MmRldiA9IGN0eC5tb3pDdXJyZW50VHJhbnNmb3JtLnNsaWNlKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb2plY3RlZCBzcGFjZVdpZHRoXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXBwbHlUcmFuc2Zvcm1YID0gZnVuY3Rpb24ocCwgbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHQgPSBwWzBdICogbVswXSArIHBbMV0gKiBtWzJdICsgbVs0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdyA9IGFwcGx5VHJhbnNmb3JtWChbc3BhY2VXaWR0aCwwXSwgZm9udDJkZXYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IHdoeSAyLjA/IEkgY2hhbmdlZCBpdCB0byAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGltcy5zcGFjZVdpZHRoID0gKHN3WzBdIC0gZm9udDJkZXZbNF0pIC8gMi4wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlV2lkdGhQcm9qID0gKHN3IC0gZm9udDJkZXZbNF0pIC8gMy4wO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNjYWxlKHRleHRIU2NhbGUsIGZvbnREaXJlY3Rpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGdseXBoc0xlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoID0gZ2x5cGhzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNOdW0pKGdseXBoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2luZ0xlbmd0aCA9IHNwYWNpbmdEaXIgKiBnbHlwaCAqIGZvbnRTaXplIC8gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnRyYW5zbGF0ZShzcGFjaW5nTGVuZ3RoLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQueCArPSBzcGFjaW5nTGVuZ3RoICogdGV4dEhTY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwYWNpbmcgPSAoZ2x5cGguaXNTcGFjZSA/IHdvcmRTcGFjaW5nIDogMCkgKyBjaGFyU3BhY2luZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wZXJhdG9yTGlzdCA9IGZvbnQuY2hhclByb2NPcGVyYXRvckxpc3RbZ2x5cGgub3BlcmF0b3JMaXN0SWRdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3BlcmF0b3JMaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJUeXBlMyBjaGFyYWN0ZXIgXFxcIlwiLmNvbmNhdChnbHlwaC5vcGVyYXRvckxpc3RJZCwgXCJcXFwiIGlzIG5vdCBhdmFpbGFibGUuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzaW5nVHlwZTMgPSBnbHlwaDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zY2FsZShmb250U2l6ZSwgZm9udFNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgudHJhbnNmb3JtLmFwcGx5KGN0eCwgZm9udE1hdHJpeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0ZU9wZXJhdG9yTGlzdChvcGVyYXRvckxpc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXBwbHlUcmFuc2Zvcm0gPSBmdW5jdGlvbiAocCwgbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHh0ID0gcFswXSAqIG1bMF0gKyBwWzFdICogbVsyXSArIG1bNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeXQgPSBwWzBdICogbVsxXSArIHBbMV0gKiBtWzNdICsgbVs1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbeHQsIHl0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtZWQgPSBhcHBseVRyYW5zZm9ybShbZ2x5cGgud2lkdGgsIDBdLCBmb250TWF0cml4KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHRyYW5zZm9ybWVkWzBdICogZm9udFNpemUgKyBzcGFjaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgudHJhbnNsYXRlKHdpZHRoLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC54ICs9IHdpZHRoICogdGV4dEhTY2FsZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hbm5vdGF0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgZ2x5cGggaXMgd2l0aGluIGFuIGFubm90YXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaERpbXMgPSB0aGlzLm1ha2VDaGFyRGltcyh0cmFuc2Zvcm1lZCAqIGZvbnRTaXplLCB3aWR0aCwgc3BhY2VXaWR0aFByb2osIGZvbnQyZGV2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5hbm5vdGF0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbm5vdCA9IHRoaXMuYW5ub3RhdGlvbnNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1YWQgPSB0aGlzLmNoYXJJbkFubm90KGFubm90LCBjaERpbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTWFya3VwKGFubm90LCBxdWFkLCBnbHlwaCwgY2hEaW1zLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzaW5nVHlwZTMgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldENoYXJXaWR0aDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2V0Q2hhcldpZHRoKHhXaWR0aCwgeVdpZHRoKSB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldENoYXJXaWR0aEFuZEJvdW5kczogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2V0Q2hhcldpZHRoQW5kQm91bmRzKHhXaWR0aCwgeVdpZHRoLCBsbHgsIGxseSwgdXJ4LCB1cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5yZWN0KGxseCwgbGx5LCB1cnggLSBsbHgsIHVyeSAtIGxseSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGlwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmRQYXRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29sb3JOX1BhdHRlcm46IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2dldENvbG9yTl9QYXR0ZXJuKElSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXR0ZXJuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElSWzBdID09PSAnVGlsaW5nUGF0dGVybicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gSVJbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYXNlVHJhbnNmb3JtID0gdGhpcy5iYXNlVHJhbnNmb3JtIHx8IHRoaXMuY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0uc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbnZhc0dyYXBoaWNzRmFjdG9yeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUNhbnZhc0dyYXBoaWNzOiBmdW5jdGlvbiBjcmVhdGVDYW52YXNHcmFwaGljcyhjdHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENhbnZhc0dyYXBoaWNzKGN0eCwgX3RoaXMuY29tbW9uT2JqcywgX3RoaXMub2JqcywgX3RoaXMuY2FudmFzRmFjdG9yeSwgX3RoaXMud2ViR0xDb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9IG5ldyBfcGF0dGVybl9oZWxwZXIuVGlsaW5nUGF0dGVybihJUiwgY29sb3IsIHRoaXMuY3R4LCBjYW52YXNHcmFwaGljc0ZhY3RvcnksIGJhc2VUcmFuc2Zvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSAoMCwgX3BhdHRlcm5faGVscGVyLmdldFNoYWRpbmdQYXR0ZXJuRnJvbUlSKShJUik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3Ryb2tlQ29sb3JOOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRTdHJva2VDb2xvck4oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yID0gdGhpcy5nZXRDb2xvck5fUGF0dGVybihhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZpbGxDb2xvck46IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldEZpbGxDb2xvck4oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LmZpbGxDb2xvciA9IHRoaXMuZ2V0Q29sb3JOX1BhdHRlcm4oYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQucGF0dGVybkZpbGwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0cm9rZVJHQkNvbG9yOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRTdHJva2VSR0JDb2xvcihyLCBnLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gX3V0aWwuVXRpbC5tYWtlQ3NzUmdiKHIsIGcsIGIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguc3Ryb2tlU3R5bGUgPSBjb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3IgPSBjb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRGaWxsUkdCQ29sb3I6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldEZpbGxSR0JDb2xvcihyLCBnLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gX3V0aWwuVXRpbC5tYWtlQ3NzUmdiKHIsIGcsIGIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gY29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LmZpbGxDb2xvciA9IGNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRpbmdGaWxsOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zaGFkaW5nRmlsbChwYXR0ZXJuSVIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3R4ID0gdGhpcy5jdHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhdHRlcm4gPSAoMCwgX3BhdHRlcm5faGVscGVyLmdldFNoYWRpbmdQYXR0ZXJuRnJvbUlSKShwYXR0ZXJuSVIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBwYXR0ZXJuLmdldFBhdHRlcm4oY3R4LCB0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW52ID0gY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FudmFzID0gY3R4LmNhbnZhcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gY2FudmFzLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXBwbHlUcmFuc2Zvcm0gPSBmdW5jdGlvbihwLCBtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHQgPSBwWzBdICogbVswXSArIHBbMV0gKiBtWzJdICsgbVs0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5dCA9IHBbMF0gKiBtWzFdICsgcFsxXSAqIG1bM10gKyBtWzVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt4dCwgeXRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBibCA9IGFwcGx5VHJhbnNmb3JtKFswLCAwXSwgaW52KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnIgPSBhcHBseVRyYW5zZm9ybShbMCwgaGVpZ2h0XSwgaW52KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWwgPSBhcHBseVRyYW5zZm9ybShbd2lkdGgsIDBdLCBpbnYpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1ciA9IGFwcGx5VHJhbnNmb3JtKFt3aWR0aCwgaGVpZ2h0XSwgaW52KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeDAgPSBNYXRoLm1pbihibFswXSwgYnJbMF0sIHVsWzBdLCB1clswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5MCA9IE1hdGgubWluKGJsWzFdLCBiclsxXSwgdWxbMV0sIHVyWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHgxID0gTWF0aC5tYXgoYmxbMF0sIGJyWzBdLCB1bFswXSwgdXJbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeTEgPSBNYXRoLm1heChibFsxXSwgYnJbMV0sIHVsWzFdLCB1clsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmZpbGxSZWN0KHgwLCB5MCwgeDEgLSB4MCwgeTEgLSB5MCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguZmlsbFJlY3QoLTFlMTAsIC0xZTEwLCAyZTEwLCAyZTEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWdpbklubGluZUltYWdlOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19iZWdpbklubGluZUltYWdlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ1Nob3VsZCBub3QgY2FsbCBiZWdpbklubGluZUltYWdlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5JbWFnZURhdGE6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2JlZ2luSW1hZ2VEYXRhKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ1Nob3VsZCBub3QgY2FsbCBiZWdpbkltYWdlRGF0YScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50Rm9ybVhPYmplY3RCZWdpbjogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfcGFpbnRGb3JtWE9iamVjdEJlZ2luKG1hdHJpeCwgYmJveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrLnB1c2godGhpcy5iYXNlVHJhbnNmb3JtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1hdHJpeCkgJiYgbWF0cml4Lmxlbmd0aCA9PT0gNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5hcHBseSh0aGlzLCBtYXRyaXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFzZVRyYW5zZm9ybSA9IHRoaXMuY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1ha2VBbm5vRGltcyh0aGlzLmFubm90YXRpb25zLCB0aGlzLmJhc2VUcmFuc2Zvcm0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJib3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gYmJveFsyXSAtIGJib3hbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSBiYm94WzNdIC0gYmJveFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgucmVjdChiYm94WzBdLCBiYm94WzFdLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGlwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWludEZvcm1YT2JqZWN0RW5kOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19wYWludEZvcm1YT2JqZWN0RW5kKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFzZVRyYW5zZm9ybSA9IHRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYWtlQW5ub0RpbXModGhpcy5hbm5vdGF0aW9ucywgdGhpcy5iYXNlVHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWdpbkdyb3VwOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19iZWdpbkdyb3VwKGdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRDdHggPSB0aGlzLmN0eDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZ3JvdXAuaXNvbGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKCdUT0RPOiBTdXBwb3J0IG5vbi1pc29sYXRlZCBncm91cHMuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwLmtub2Nrb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnS25vY2tvdXQgZ3JvdXBzIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRUcmFuc2Zvcm0gPSBjdXJyZW50Q3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXAubWF0cml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDdHgudHJhbnNmb3JtLmFwcGx5KGN1cnJlbnRDdHgsIGdyb3VwLm1hdHJpeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFncm91cC5iYm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQm91bmRpbmcgYm94IGlzIHJlcXVpcmVkLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBib3VuZHMgPSBfdXRpbC5VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KGdyb3VwLmJib3gsIGN1cnJlbnRDdHgubW96Q3VycmVudFRyYW5zZm9ybSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FudmFzQm91bmRzID0gWzAsIDAsIGN1cnJlbnRDdHguY2FudmFzLndpZHRoLCBjdXJyZW50Q3R4LmNhbnZhcy5oZWlnaHRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcyA9IF91dGlsLlV0aWwuaW50ZXJzZWN0KGJvdW5kcywgY2FudmFzQm91bmRzKSB8fCBbMCwgMCwgMCwgMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldFggPSBNYXRoLmZsb29yKGJvdW5kc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldFkgPSBNYXRoLmZsb29yKGJvdW5kc1sxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRyYXduV2lkdGggPSBNYXRoLm1heChNYXRoLmNlaWwoYm91bmRzWzJdKSAtIG9mZnNldFgsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkcmF3bkhlaWdodCA9IE1hdGgubWF4KE1hdGguY2VpbChib3VuZHNbM10pIC0gb2Zmc2V0WSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlWCA9IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWSA9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHJhd25XaWR0aCA+IE1BWF9HUk9VUF9TSVpFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWCA9IGRyYXduV2lkdGggLyBNQVhfR1JPVVBfU0laRTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd25XaWR0aCA9IE1BWF9HUk9VUF9TSVpFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkcmF3bkhlaWdodCA+IE1BWF9HUk9VUF9TSVpFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWSA9IGRyYXduSGVpZ2h0IC8gTUFYX0dST1VQX1NJWkU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXduSGVpZ2h0ID0gTUFYX0dST1VQX1NJWkU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhY2hlSWQgPSAnZ3JvdXBBdCcgKyB0aGlzLmdyb3VwTGV2ZWw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXAuc21hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVJZCArPSAnX3NtYXNrXycgKyB0aGlzLnNtYXNrQ291bnRlcisrICUgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NyYXRjaENhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKGNhY2hlSWQsIGRyYXduV2lkdGgsIGRyYXduSGVpZ2h0LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JvdXBDdHggPSBzY3JhdGNoQ2FudmFzLmNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBDdHguc2NhbGUoMSAvIHNjYWxlWCwgMSAvIHNjYWxlWSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBDdHgudHJhbnNsYXRlKC1vZmZzZXRYLCAtb2Zmc2V0WSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBDdHgudHJhbnNmb3JtLmFwcGx5KGdyb3VwQ3R4LCBjdXJyZW50VHJhbnNmb3JtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChncm91cC5zbWFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNtYXNrU3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXM6IHNjcmF0Y2hDYW52YXMuY2FudmFzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogZ3JvdXBDdHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRYOiBvZmZzZXRYLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WTogb2Zmc2V0WSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWDogc2NhbGVYLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVZOiBzY2FsZVksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlOiBncm91cC5zbWFzay5zdWJ0eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2Ryb3A6IGdyb3VwLnNtYXNrLmJhY2tkcm9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJNYXA6IGdyb3VwLnNtYXNrLnRyYW5zZmVyTWFwIHx8IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFRyYW5zZm9ybUludmVyc2U6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEN0eC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDdHgudHJhbnNsYXRlKG9mZnNldFgsIG9mZnNldFkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q3R4LnNjYWxlKHNjYWxlWCwgc2NhbGVZKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5Q3R4U3RhdGUoY3VycmVudEN0eCwgZ3JvdXBDdHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gZ3JvdXBDdHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRHU3RhdGUoW1snQk0nLCAnc291cmNlLW92ZXInXSwgWydjYScsIDFdLCBbJ0NBJywgMV1dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwU3RhY2sucHVzaChjdXJyZW50Q3R4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwTGV2ZWwrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2sgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZEdyb3VwOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19lbmRHcm91cChncm91cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBMZXZlbC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncm91cEN0eCA9IHRoaXMuY3R4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5ncm91cFN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3R4LmltYWdlU21vb3RoaW5nRW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChncm91cC5zbWFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBTTWFzayA9IHRoaXMuc21hc2tTdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoZ3JvdXBDdHguY2FudmFzLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWdpbkFubm90YXRpb25zOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19iZWdpbkFubm90YXRpb25zKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVRyYW5zZm9ybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5zZXRUcmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsIHRoaXMuYmFzZVRyYW5zZm9ybSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZEFubm90YXRpb25zOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19lbmRBbm5vdGF0aW9ucygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWdpbkFubm90YXRpb246IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2JlZ2luQW5ub3RhdGlvbihyZWN0LCB0cmFuc2Zvcm0sIG1hdHJpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0Q3R4VG9EZWZhdWx0KHRoaXMuY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXcgQ2FudmFzRXh0cmFTdGF0ZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVjdCkgJiYgcmVjdC5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gcmVjdFsyXSAtIHJlY3RbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSByZWN0WzNdIC0gcmVjdFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgucmVjdChyZWN0WzBdLCByZWN0WzFdLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGlwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLmFwcGx5KHRoaXMsIHRyYW5zZm9ybSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uYXBwbHkodGhpcywgbWF0cml4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRBbm5vdGF0aW9uOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19lbmRBbm5vdGF0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50SnBlZ1hPYmplY3Q6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3BhaW50SnBlZ1hPYmplY3Qob2JqSWQsIHcsIGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9tSW1hZ2UgPSB0aGlzLm9ianMuZ2V0KG9iaklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZG9tSW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdEZXBlbmRlbnQgaW1hZ2UgaXNuXFwndCByZWFkeSB5ZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2NhbGUoMSAvIHcsIC0xIC8gaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShkb21JbWFnZSwgMCwgMCwgZG9tSW1hZ2Uud2lkdGgsIGRvbUltYWdlLmhlaWdodCwgMCwgLWgsIHcsIGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW1hZ2VMYXllcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudFRyYW5zZm9ybSA9IGN0eC5tb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5nZXRDYW52YXNQb3NpdGlvbigwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZUxheWVyLmFwcGVuZEltYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaklkOiBvYmpJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IHBvc2l0aW9uWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBwb3NpdGlvblsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB3IC8gY3VycmVudFRyYW5zZm9ybVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaCAvIGN1cnJlbnRUcmFuc2Zvcm1bM11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19wYWludEltYWdlTWFza1hPYmplY3QoaW1nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGltZy53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gaW1nLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsbENvbG9yID0gdGhpcy5jdXJyZW50LmZpbGxDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNQYXR0ZXJuRmlsbCA9IHRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGggPSB0aGlzLnByb2Nlc3NpbmdUeXBlMztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChDT01QSUxFX1RZUEUzX0dMWVBIUyAmJiBnbHlwaCAmJiBnbHlwaC5jb21waWxlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA8PSBNQVhfU0laRV9UT19DT01QSUxFICYmIGhlaWdodCA8PSBNQVhfU0laRV9UT19DT01QSUxFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaC5jb21waWxlZCA9IGNvbXBpbGVUeXBlM0dseXBoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBpbWcuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGguY29tcGlsZWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdseXBoICYmIGdseXBoLmNvbXBpbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoLmNvbXBpbGVkKGN0eCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFza0NhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCdtYXNrQ2FudmFzJywgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hc2tDdHggPSBtYXNrQ2FudmFzLmNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza0N0eC5zYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0QmluYXJ5SW1hZ2VNYXNrKG1hc2tDdHgsIGltZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza0N0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnc291cmNlLWluJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrQ3R4LmZpbGxTdHlsZSA9IGlzUGF0dGVybkZpbGwgPyBmaWxsQ29sb3IuZ2V0UGF0dGVybihtYXNrQ3R4LCB0aGlzKSA6IGZpbGxDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrQ3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tDdHgucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QobWFza0NhbnZhcy5jYW52YXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfcGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0KGltZ0RhdGEsIHNjYWxlWCwgc2NhbGVZLCBwb3NpdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBpbWdEYXRhLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSBpbWdEYXRhLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsbENvbG9yID0gdGhpcy5jdXJyZW50LmZpbGxDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNQYXR0ZXJuRmlsbCA9IHRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFza0NhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCdtYXNrQ2FudmFzJywgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hc2tDdHggPSBtYXNrQ2FudmFzLmNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza0N0eC5zYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0QmluYXJ5SW1hZ2VNYXNrKG1hc2tDdHgsIGltZ0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tDdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ3NvdXJjZS1pbic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza0N0eC5maWxsU3R5bGUgPSBpc1BhdHRlcm5GaWxsID8gZmlsbENvbG9yLmdldFBhdHRlcm4obWFza0N0eCwgdGhpcykgOiBmaWxsQ29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza0N0eC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrQ3R4LnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3R4ID0gdGhpcy5jdHg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBwb3NpdGlvbnMubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgudHJhbnNmb3JtKHNjYWxlWCwgMCwgMCwgc2NhbGVZLCBwb3NpdGlvbnNbaV0sIHBvc2l0aW9uc1tpICsgMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2NhbGUoMSwgLTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKG1hc2tDYW52YXMuY2FudmFzLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCAwLCAtMSwgMSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19wYWludEltYWdlTWFza1hPYmplY3RHcm91cChpbWFnZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3R4ID0gdGhpcy5jdHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGxDb2xvciA9IHRoaXMuY3VycmVudC5maWxsQ29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzUGF0dGVybkZpbGwgPSB0aGlzLmN1cnJlbnQucGF0dGVybkZpbGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBpbWFnZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSBpbWFnZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGltYWdlLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFza0NhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCdtYXNrQ2FudmFzJywgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXNrQ3R4ID0gbWFza0NhbnZhcy5jb250ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrQ3R4LnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0QmluYXJ5SW1hZ2VNYXNrKG1hc2tDdHgsIGltYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza0N0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnc291cmNlLWluJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza0N0eC5maWxsU3R5bGUgPSBpc1BhdHRlcm5GaWxsID8gZmlsbENvbG9yLmdldFBhdHRlcm4obWFza0N0eCwgdGhpcykgOiBmaWxsQ29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tDdHguZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tDdHgucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgudHJhbnNmb3JtLmFwcGx5KGN0eCwgaW1hZ2UudHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNjYWxlKDEsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShtYXNrQ2FudmFzLmNhbnZhcywgMCwgMCwgd2lkdGgsIGhlaWdodCwgMCwgLTEsIDEsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWludEltYWdlWE9iamVjdDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfcGFpbnRJbWFnZVhPYmplY3Qob2JqSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1nRGF0YSA9IHRoaXMub2Jqcy5nZXQob2JqSWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbWdEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnRGVwZW5kZW50IGltYWdlIGlzblxcJ3QgcmVhZHkgeWV0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KGltZ0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19wYWludEltYWdlWE9iamVjdFJlcGVhdChvYmpJZCwgc2NhbGVYLCBzY2FsZVksIHBvc2l0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWdEYXRhID0gdGhpcy5vYmpzLmdldChvYmpJZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWltZ0RhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdEZXBlbmRlbnQgaW1hZ2UgaXNuXFwndCByZWFkeSB5ZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGltZ0RhdGEud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXAgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHBvc2l0aW9ucy5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogW3NjYWxlWCwgMCwgMCwgc2NhbGVZLCBwb3NpdGlvbnNbaV0sIHBvc2l0aW9uc1tpICsgMV1dLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IGhlaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXAoaW1nRGF0YSwgbWFwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWludElubGluZUltYWdlWE9iamVjdDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfcGFpbnRJbmxpbmVJbWFnZVhPYmplY3QoaW1nRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGltZ0RhdGEud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2NhbGUoMSAvIHdpZHRoLCAtMSAvIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRUcmFuc2Zvcm0gPSBjdHgubW96Q3VycmVudFRyYW5zZm9ybUludmVyc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBjdXJyZW50VHJhbnNmb3JtWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gY3VycmVudFRyYW5zZm9ybVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGhTY2FsZSA9IE1hdGgubWF4KE1hdGguc3FydChhICogYSArIGIgKiBiKSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBjdXJyZW50VHJhbnNmb3JtWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gY3VycmVudFRyYW5zZm9ybVszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0U2NhbGUgPSBNYXRoLm1heChNYXRoLnNxcnQoYyAqIGMgKyBkICogZCksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWdUb1BhaW50LCB0bXBDYW52YXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIEhUTUxFbGVtZW50ID09PSAnZnVuY3Rpb24nICYmIGltZ0RhdGEgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCAhaW1nRGF0YS5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ1RvUGFpbnQgPSBpbWdEYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcENhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCdpbmxpbmVJbWFnZScsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wQ3R4ID0gdG1wQ2FudmFzLmNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dEJpbmFyeUltYWdlRGF0YSh0bXBDdHgsIGltZ0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdUb1BhaW50ID0gdG1wQ2FudmFzLmNhbnZhcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFpbnRXaWR0aCA9IHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWludEhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wQ2FudmFzSWQgPSAncHJlc2NhbGUxJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh3aWR0aFNjYWxlID4gMiAmJiBwYWludFdpZHRoID4gMSB8fCBoZWlnaHRTY2FsZSA+IDIgJiYgcGFpbnRIZWlnaHQgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdXaWR0aCA9IHBhaW50V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdIZWlnaHQgPSBwYWludEhlaWdodDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhTY2FsZSA+IDIgJiYgcGFpbnRXaWR0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1dpZHRoID0gTWF0aC5jZWlsKHBhaW50V2lkdGggLyAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoU2NhbGUgLz0gcGFpbnRXaWR0aCAvIG5ld1dpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlaWdodFNjYWxlID4gMiAmJiBwYWludEhlaWdodCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0hlaWdodCA9IE1hdGguY2VpbChwYWludEhlaWdodCAvIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0U2NhbGUgLz0gcGFpbnRIZWlnaHQgLyBuZXdIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBDYW52YXMgPSB0aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyh0bXBDYW52YXNJZCwgbmV3V2lkdGgsIG5ld0hlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcEN0eCA9IHRtcENhbnZhcy5jb250ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBDdHguY2xlYXJSZWN0KDAsIDAsIG5ld1dpZHRoLCBuZXdIZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBDdHguZHJhd0ltYWdlKGltZ1RvUGFpbnQsIDAsIDAsIHBhaW50V2lkdGgsIHBhaW50SGVpZ2h0LCAwLCAwLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nVG9QYWludCA9IHRtcENhbnZhcy5jYW52YXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50V2lkdGggPSBuZXdXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpbnRIZWlnaHQgPSBuZXdIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcENhbnZhc0lkID0gdG1wQ2FudmFzSWQgPT09ICdwcmVzY2FsZTEnID8gJ3ByZXNjYWxlMicgOiAncHJlc2NhbGUxJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKGltZ1RvUGFpbnQsIDAsIDAsIHBhaW50V2lkdGgsIHBhaW50SGVpZ2h0LCAwLCAtaGVpZ2h0LCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmltYWdlTGF5ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5nZXRDYW52YXNQb3NpdGlvbigwLCAtaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZUxheWVyLmFwcGVuZEltYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGE6IGltZ0RhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBwb3NpdGlvblswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogcG9zaXRpb25bMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGggLyBjdXJyZW50VHJhbnNmb3JtWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQgLyBjdXJyZW50VHJhbnNmb3JtWzNdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3BhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXAoaW1nRGF0YSwgbWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3ID0gaW1nRGF0YS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaCA9IGltZ0RhdGEuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0bXBDYW52YXMgPSB0aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygnaW5saW5lSW1hZ2UnLCB3LCBoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wQ3R4ID0gdG1wQ2FudmFzLmNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0QmluYXJ5SW1hZ2VEYXRhKHRtcEN0eCwgaW1nRGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBtYXAubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBtYXBbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC50cmFuc2Zvcm0uYXBwbHkoY3R4LCBlbnRyeS50cmFuc2Zvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2NhbGUoMSwgLTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKHRtcENhbnZhcy5jYW52YXMsIGVudHJ5LngsIGVudHJ5LnksIGVudHJ5LncsIGVudHJ5LmgsIDAsIC0xLCAxLCAxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbWFnZUxheWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLmdldENhbnZhc1Bvc2l0aW9uKGVudHJ5LngsIGVudHJ5LnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZUxheWVyLmFwcGVuZEltYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdEYXRhOiBpbWdEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IHBvc2l0aW9uWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogcG9zaXRpb25bMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50U29saWRDb2xvckltYWdlTWFzazogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfcGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmZpbGxSZWN0KDAsIDAsIDEsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50WE9iamVjdDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfcGFpbnRYT2JqZWN0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnVW5zdXBwb3J0ZWQgXFwncGFpbnRYT2JqZWN0XFwnIGNvbW1hbmQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFya1BvaW50OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19tYXJrUG9pbnQodGFnKSB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtQb2ludFByb3BzOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19tYXJrUG9pbnRQcm9wcyh0YWcsIHByb3BlcnRpZXMpIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5NYXJrZWRDb250ZW50OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19iZWdpbk1hcmtlZENvbnRlbnQodGFnKSB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luTWFya2VkQ29udGVudFByb3BzOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyh0YWcsIHByb3BlcnRpZXMpIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kTWFya2VkQ29udGVudDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZW5kTWFya2VkQ29udGVudCgpIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5Db21wYXQ6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2JlZ2luQ29tcGF0KCkge30sXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRDb21wYXQ6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2VuZENvbXBhdCgpIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZVBhdGg6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2NvbnN1bWVQYXRoKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdDbGlwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdDbGlwID09PSBFT19DTElQKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguY2xpcCgnZXZlbm9kZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmNsaXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0NsaXAgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRTaW5nbGVQaXhlbFdpZHRoOiBmdW5jdGlvbiBnZXRTaW5nbGVQaXhlbFdpZHRoKHNjYWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGggPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGludmVyc2UgPSB0aGlzLmN0eC5tb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aCA9IE1hdGguc3FydChNYXRoLm1heChpbnZlcnNlWzBdICogaW52ZXJzZVswXSArIGludmVyc2VbMV0gKiBpbnZlcnNlWzFdLCBpbnZlcnNlWzJdICogaW52ZXJzZVsyXSArIGludmVyc2VbM10gKiBpbnZlcnNlWzNdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q2FudmFzUG9zaXRpb246IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2dldENhbnZhc1Bvc2l0aW9uKHgsIHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy5jdHgubW96Q3VycmVudFRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3RyYW5zZm9ybVswXSAqIHggKyB0cmFuc2Zvcm1bMl0gKiB5ICsgdHJhbnNmb3JtWzRdLCB0cmFuc2Zvcm1bMV0gKiB4ICsgdHJhbnNmb3JtWzNdICogeSArIHRyYW5zZm9ybVs1XV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgb3AgaW4gX3V0aWwuT1BTKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDYW52YXNHcmFwaGljcy5wcm90b3R5cGVbX3V0aWwuT1BTW29wXV0gPSBDYW52YXNHcmFwaGljcy5wcm90b3R5cGVbb3BdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENhbnZhc0dyYXBoaWNzO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ2FudmFzR3JhcGhpY3MgPSBDYW52YXNHcmFwaGljcztcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTU1ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5nZXRTaGFkaW5nUGF0dGVybkZyb21JUiA9IGdldFNoYWRpbmdQYXR0ZXJuRnJvbUlSO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuVGlsaW5nUGF0dGVybiA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgU2hhZGluZ0lScyA9IHt9O1xuICAgICAgICAgICAgICAgIFNoYWRpbmdJUnMuUmFkaWFsQXhpYWwgPSB7XG4gICAgICAgICAgICAgICAgICAgIGZyb21JUjogZnVuY3Rpb24gUmFkaWFsQXhpYWxfZnJvbUlSKHJhdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSByYXdbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JTdG9wcyA9IHJhd1syXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwMCA9IHJhd1szXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwMSA9IHJhd1s0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByMCA9IHJhd1s1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByMSA9IHJhd1s2XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1BhdHRlcm4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFBhdHRlcm46IGZ1bmN0aW9uIFJhZGlhbEF4aWFsX2dldFBhdHRlcm4oY3R4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncmFkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnYXhpYWwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFkID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KHAwWzBdLCBwMFsxXSwgcDFbMF0sIHAxWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAncmFkaWFsJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhZCA9IGN0eC5jcmVhdGVSYWRpYWxHcmFkaWVudChwMFswXSwgcDBbMV0sIHIwLCBwMVswXSwgcDFbMV0sIHIxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGNvbG9yU3RvcHMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBjb2xvclN0b3BzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhZC5hZGRDb2xvclN0b3AoY1swXSwgY1sxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ3JhZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBjcmVhdGVNZXNoQ2FudmFzID0gZnVuY3Rpb24gY3JlYXRlTWVzaENhbnZhc0Nsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRyYXdUcmlhbmdsZShkYXRhLCBjb250ZXh0LCBwMSwgcDIsIHAzLCBjMSwgYzIsIGMzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29vcmRzID0gY29udGV4dC5jb29yZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzID0gY29udGV4dC5jb2xvcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZXMgPSBkYXRhLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93U2l6ZSA9IGRhdGEud2lkdGggKiA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvb3Jkc1twMSArIDFdID4gY29vcmRzW3AyICsgMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBwMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMSA9IHAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAyID0gdG1wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IGMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMxID0gYzI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgPSB0bXA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb29yZHNbcDIgKyAxXSA+IGNvb3Jkc1twMyArIDFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gcDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDIgPSBwMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMyA9IHRtcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBjMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMiA9IGMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMzID0gdG1wO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29vcmRzW3AxICsgMV0gPiBjb29yZHNbcDIgKyAxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IHAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAxID0gcDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDIgPSB0bXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gYzE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYzEgPSBjMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMiA9IHRtcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHgxID0gKGNvb3Jkc1twMV0gKyBjb250ZXh0Lm9mZnNldFgpICogY29udGV4dC5zY2FsZVg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeTEgPSAoY29vcmRzW3AxICsgMV0gKyBjb250ZXh0Lm9mZnNldFkpICogY29udGV4dC5zY2FsZVk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeDIgPSAoY29vcmRzW3AyXSArIGNvbnRleHQub2Zmc2V0WCkgKiBjb250ZXh0LnNjYWxlWDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5MiA9IChjb29yZHNbcDIgKyAxXSArIGNvbnRleHQub2Zmc2V0WSkgKiBjb250ZXh0LnNjYWxlWTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4MyA9IChjb29yZHNbcDNdICsgY29udGV4dC5vZmZzZXRYKSAqIGNvbnRleHQuc2NhbGVYO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHkzID0gKGNvb3Jkc1twMyArIDFdICsgY29udGV4dC5vZmZzZXRZKSAqIGNvbnRleHQuc2NhbGVZO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeTEgPj0geTMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjMXIgPSBjb2xvcnNbYzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMxZyA9IGNvbG9yc1tjMSArIDFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMxYiA9IGNvbG9yc1tjMSArIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMyciA9IGNvbG9yc1tjMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYzJnID0gY29sb3JzW2MyICsgMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYzJiID0gY29sb3JzW2MyICsgMl07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYzNyID0gY29sb3JzW2MzXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjM2cgPSBjb2xvcnNbYzMgKyAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjM2IgPSBjb2xvcnNbYzMgKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtaW5ZID0gTWF0aC5yb3VuZCh5MSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4WSA9IE1hdGgucm91bmQoeTMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhhLCBjYXIsIGNhZywgY2FiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhiLCBjYnIsIGNiZywgY2JiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHkgPSBtaW5ZOyB5IDw9IG1heFk7IHkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5IDwgeTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IHkgPCB5MSA/IDAgOiB5MSA9PT0geTIgPyAxIDogKHkxIC0geSkgLyAoeTEgLSB5Mik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhhID0geDEgLSAoeDEgLSB4MikgKiBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXIgPSBjMXIgLSAoYzFyIC0gYzJyKSAqIGs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhZyA9IGMxZyAtIChjMWcgLSBjMmcpICogaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FiID0gYzFiIC0gKGMxYiAtIGMyYikgKiBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSB5ID4geTMgPyAxIDogeTIgPT09IHkzID8gMCA6ICh5MiAtIHkpIC8gKHkyIC0geTMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YSA9IHgyIC0gKHgyIC0geDMpICogaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyID0gYzJyIC0gKGMyciAtIGMzcikgKiBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWcgPSBjMmcgLSAoYzJnIC0gYzNnKSAqIGs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhYiA9IGMyYiAtIChjMmIgLSBjM2IpICogaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0geSA8IHkxID8gMCA6IHkgPiB5MyA/IDEgOiAoeTEgLSB5KSAvICh5MSAtIHkzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YiA9IHgxIC0gKHgxIC0geDMpICogaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYnIgPSBjMXIgLSAoYzFyIC0gYzNyKSAqIGs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2JnID0gYzFnIC0gKGMxZyAtIGMzZykgKiBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNiYiA9IGMxYiAtIChjMWIgLSBjM2IpICogaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeDFfID0gTWF0aC5yb3VuZChNYXRoLm1pbih4YSwgeGIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeDJfID0gTWF0aC5yb3VuZChNYXRoLm1heCh4YSwgeGIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaiA9IHJvd1NpemUgKiB5ICsgeDFfICogNDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHggPSB4MV87IHggPD0geDJfOyB4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9ICh4YSAtIHgpIC8gKHhhIC0geGIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gayA8IDAgPyAwIDogayA+IDEgPyAxIDogaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbaisrXSA9IGNhciAtIChjYXIgLSBjYnIpICogayB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzW2orK10gPSBjYWcgLSAoY2FnIC0gY2JnKSAqIGsgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc1tqKytdID0gY2FiIC0gKGNhYiAtIGNiYikgKiBrIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbaisrXSA9IDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkcmF3RmlndXJlKGRhdGEsIGZpZ3VyZSwgY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBzID0gZmlndXJlLmNvb3JkcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjcyA9IGZpZ3VyZS5jb2xvcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaWk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZmlndXJlLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsYXR0aWNlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnRpY2VzUGVyUm93ID0gZmlndXJlLnZlcnRpY2VzUGVyUm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm93cyA9IE1hdGguZmxvb3IocHMubGVuZ3RoIC8gdmVydGljZXNQZXJSb3cpIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHMgPSB2ZXJ0aWNlc1BlclJvdyAtIDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHEgPSBpICogdmVydGljZXNQZXJSb3c7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sczsgaisrLCBxKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3VHJpYW5nbGUoZGF0YSwgY29udGV4dCwgcHNbcV0sIHBzW3EgKyAxXSwgcHNbcSArIHZlcnRpY2VzUGVyUm93XSwgY3NbcV0sIGNzW3EgKyAxXSwgY3NbcSArIHZlcnRpY2VzUGVyUm93XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd1RyaWFuZ2xlKGRhdGEsIGNvbnRleHQsIHBzW3EgKyB2ZXJ0aWNlc1BlclJvdyArIDFdLCBwc1txICsgMV0sIHBzW3EgKyB2ZXJ0aWNlc1BlclJvd10sIGNzW3EgKyB2ZXJ0aWNlc1BlclJvdyArIDFdLCBjc1txICsgMV0sIGNzW3EgKyB2ZXJ0aWNlc1BlclJvd10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd0cmlhbmdsZXMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHBzLmxlbmd0aDsgaSA8IGlpOyBpICs9IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdUcmlhbmdsZShkYXRhLCBjb250ZXh0LCBwc1tpXSwgcHNbaSArIDFdLCBwc1tpICsgMl0sIGNzW2ldLCBjc1tpICsgMV0sIGNzW2kgKyAyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaWxsZWdhbCBmaWd1cmUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZU1lc2hDYW52YXMoYm91bmRzLCBjb21iaW5lc1NjYWxlLCBjb29yZHMsIGNvbG9ycywgZmlndXJlcywgYmFja2dyb3VuZENvbG9yLCBjYWNoZWRDYW52YXNlcywgd2ViR0xDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgRVhQRUNURURfU0NBTEUgPSAxLjE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgTUFYX1BBVFRFUk5fU0laRSA9IDMwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgQk9SREVSX1NJWkUgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldFggPSBNYXRoLmZsb29yKGJvdW5kc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0WSA9IE1hdGguZmxvb3IoYm91bmRzWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBib3VuZHNXaWR0aCA9IE1hdGguY2VpbChib3VuZHNbMl0pIC0gb2Zmc2V0WDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBib3VuZHNIZWlnaHQgPSBNYXRoLmNlaWwoYm91bmRzWzNdKSAtIG9mZnNldFk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBNYXRoLm1pbihNYXRoLmNlaWwoTWF0aC5hYnMoYm91bmRzV2lkdGggKiBjb21iaW5lc1NjYWxlWzBdICogRVhQRUNURURfU0NBTEUpKSwgTUFYX1BBVFRFUk5fU0laRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gTWF0aC5taW4oTWF0aC5jZWlsKE1hdGguYWJzKGJvdW5kc0hlaWdodCAqIGNvbWJpbmVzU2NhbGVbMV0gKiBFWFBFQ1RFRF9TQ0FMRSkpLCBNQVhfUEFUVEVSTl9TSVpFKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY2FsZVggPSBib3VuZHNXaWR0aCAvIHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlWSA9IGJvdW5kc0hlaWdodCAvIGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkczogY29vcmRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yczogY29sb3JzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFg6IC1vZmZzZXRYLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFk6IC1vZmZzZXRZLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWDogMSAvIHNjYWxlWCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVk6IDEgLyBzY2FsZVlcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFkZGVkV2lkdGggPSB3aWR0aCArIEJPUkRFUl9TSVpFICogMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWRkZWRIZWlnaHQgPSBoZWlnaHQgKyBCT1JERVJfU0laRSAqIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FudmFzLCB0bXBDYW52YXMsIGksIGlpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2ViR0xDb250ZXh0LmlzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcyA9IHdlYkdMQ29udGV4dC5kcmF3RmlndXJlcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWd1cmVzOiBmaWd1cmVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wQ2FudmFzID0gY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCdtZXNoJywgcGFkZGVkV2lkdGgsIHBhZGRlZEhlaWdodCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZShjYW52YXMsIEJPUkRFUl9TSVpFLCBCT1JERVJfU0laRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzID0gdG1wQ2FudmFzLmNhbnZhcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wQ2FudmFzID0gY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCdtZXNoJywgcGFkZGVkV2lkdGgsIHBhZGRlZEhlaWdodCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0bXBDdHggPSB0bXBDYW52YXMuY29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHRtcEN0eC5jcmVhdGVJbWFnZURhdGEod2lkdGgsIGhlaWdodCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFja2dyb3VuZENvbG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBieXRlcyA9IGRhdGEuZGF0YTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGJ5dGVzLmxlbmd0aDsgaSA8IGlpOyBpICs9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzW2ldID0gYmFja2dyb3VuZENvbG9yWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbaSArIDFdID0gYmFja2dyb3VuZENvbG9yWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbaSArIDJdID0gYmFja2dyb3VuZENvbG9yWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbaSArIDNdID0gMjU1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpZ3VyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0ZpZ3VyZShkYXRhLCBmaWd1cmVzW2ldLCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBDdHgucHV0SW1hZ2VEYXRhKGRhdGEsIEJPUkRFUl9TSVpFLCBCT1JERVJfU0laRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzID0gdG1wQ2FudmFzLmNhbnZhcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXM6IGNhbnZhcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRYOiBvZmZzZXRYIC0gQk9SREVSX1NJWkUgKiBzY2FsZVgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WTogb2Zmc2V0WSAtIEJPUkRFUl9TSVpFICogc2NhbGVZLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWDogc2NhbGVYLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWTogc2NhbGVZXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc2hDYW52YXM7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgU2hhZGluZ0lScy5NZXNoID0ge1xuICAgICAgICAgICAgICAgICAgICBmcm9tSVI6IGZ1bmN0aW9uIE1lc2hfZnJvbUlSKHJhdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvb3JkcyA9IHJhd1syXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnMgPSByYXdbM107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlndXJlcyA9IHJhd1s0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBib3VuZHMgPSByYXdbNV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0cml4ID0gcmF3WzZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhY2tncm91bmQgPSByYXdbOF07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdQYXR0ZXJuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRQYXR0ZXJuOiBmdW5jdGlvbiBNZXNoX2dldFBhdHRlcm4oY3R4LCBvd25lciwgc2hhZGluZ0ZpbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaGFkaW5nRmlsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSBfdXRpbC5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGN0eC5tb3pDdXJyZW50VHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlID0gX3V0aWwuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZShvd25lci5iYXNlVHJhbnNmb3JtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdHJpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRyaXhTY2FsZSA9IF91dGlsLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUobWF0cml4KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlID0gW3NjYWxlWzBdICogbWF0cml4U2NhbGVbMF0sIHNjYWxlWzFdICogbWF0cml4U2NhbGVbMV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXBvcmFyeVBhdHRlcm5DYW52YXMgPSBjcmVhdGVNZXNoQ2FudmFzKGJvdW5kcywgc2NhbGUsIGNvb3JkcywgY29sb3JzLCBmaWd1cmVzLCBzaGFkaW5nRmlsbCA/IG51bGwgOiBiYWNrZ3JvdW5kLCBvd25lci5jYWNoZWRDYW52YXNlcywgb3duZXIud2ViR0xDb250ZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNoYWRpbmdGaWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2V0VHJhbnNmb3JtLmFwcGx5KGN0eCwgb3duZXIuYmFzZVRyYW5zZm9ybSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRyaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgudHJhbnNmb3JtLmFwcGx5KGN0eCwgbWF0cml4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC50cmFuc2xhdGUodGVtcG9yYXJ5UGF0dGVybkNhbnZhcy5vZmZzZXRYLCB0ZW1wb3JhcnlQYXR0ZXJuQ2FudmFzLm9mZnNldFkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2NhbGUodGVtcG9yYXJ5UGF0dGVybkNhbnZhcy5zY2FsZVgsIHRlbXBvcmFyeVBhdHRlcm5DYW52YXMuc2NhbGVZKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5jcmVhdGVQYXR0ZXJuKHRlbXBvcmFyeVBhdHRlcm5DYW52YXMuY2FudmFzLCAnbm8tcmVwZWF0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgU2hhZGluZ0lScy5EdW1teSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbUlSOiBmdW5jdGlvbiBEdW1teV9mcm9tSVIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdQYXR0ZXJuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRQYXR0ZXJuOiBmdW5jdGlvbiBEdW1teV9mcm9tSVJfZ2V0UGF0dGVybigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdob3RwaW5rJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFNoYWRpbmdQYXR0ZXJuRnJvbUlSKHJhdykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2hhZGluZ0lSID0gU2hhZGluZ0lSc1tyYXdbMF1dO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghc2hhZGluZ0lSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIElSIHR5cGU6IFwiLmNvbmNhdChyYXdbMF0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzaGFkaW5nSVIuZnJvbUlSKHJhdyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIFRpbGluZ1BhdHRlcm4gPSBmdW5jdGlvbiBUaWxpbmdQYXR0ZXJuQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFBhaW50VHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIENPTE9SRUQ6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBVTkNPTE9SRUQ6IDJcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIE1BWF9QQVRURVJOX1NJWkUgPSAzMDAwO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRpbGluZ1BhdHRlcm4oSVIsIGNvbG9yLCBjdHgsIGNhbnZhc0dyYXBoaWNzRmFjdG9yeSwgYmFzZVRyYW5zZm9ybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVyYXRvckxpc3QgPSBJUlsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0cml4ID0gSVJbM10gfHwgWzEsIDAsIDAsIDEsIDAsIDBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYm94ID0gSVJbNF07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnhzdGVwID0gSVJbNV07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnlzdGVwID0gSVJbNl07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhaW50VHlwZSA9IElSWzddO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aWxpbmdUeXBlID0gSVJbOF07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbG9yID0gY29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbnZhc0dyYXBoaWNzRmFjdG9yeSA9IGNhbnZhc0dyYXBoaWNzRmFjdG9yeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFzZVRyYW5zZm9ybSA9IGJhc2VUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnR5cGUgPSAnUGF0dGVybic7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IGN0eDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFRpbGluZ1BhdHRlcm4ucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlUGF0dGVybkNhbnZhczogZnVuY3Rpb24gVGlsaW5QYXR0ZXJuX2NyZWF0ZVBhdHRlcm5DYW52YXMob3duZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3BlcmF0b3JMaXN0ID0gdGhpcy5vcGVyYXRvckxpc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJib3ggPSB0aGlzLmJib3g7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhzdGVwID0gdGhpcy54c3RlcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeXN0ZXAgPSB0aGlzLnlzdGVwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWludFR5cGUgPSB0aGlzLnBhaW50VHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGlsaW5nVHlwZSA9IHRoaXMudGlsaW5nVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSB0aGlzLmNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW52YXNHcmFwaGljc0ZhY3RvcnkgPSB0aGlzLmNhbnZhc0dyYXBoaWNzRmFjdG9yeTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ1RpbGluZ1R5cGU6ICcgKyB0aWxpbmdUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeDAgPSBiYm94WzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MCA9IGJib3hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgxID0gYmJveFsyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTEgPSBiYm94WzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b3BMZWZ0ID0gW3gwLCB5MF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJvdFJpZ2h0ID0gW3gwICsgeHN0ZXAsIHkwICsgeXN0ZXBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGJvdFJpZ2h0WzBdIC0gdG9wTGVmdFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gYm90UmlnaHRbMV0gLSB0b3BMZWZ0WzFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdHJpeFNjYWxlID0gX3V0aWwuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSh0aGlzLm1hdHJpeCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyTWF0cml4U2NhbGUgPSBfdXRpbC5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKHRoaXMuYmFzZVRyYW5zZm9ybSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tYmluZWRTY2FsZSA9IFttYXRyaXhTY2FsZVswXSAqIGN1ck1hdHJpeFNjYWxlWzBdLCBtYXRyaXhTY2FsZVsxXSAqIGN1ck1hdHJpeFNjYWxlWzFdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IE1hdGgubWluKE1hdGguY2VpbChNYXRoLmFicyh3aWR0aCAqIGNvbWJpbmVkU2NhbGVbMF0pKSwgTUFYX1BBVFRFUk5fU0laRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5taW4oTWF0aC5jZWlsKE1hdGguYWJzKGhlaWdodCAqIGNvbWJpbmVkU2NhbGVbMV0pKSwgTUFYX1BBVFRFUk5fU0laRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcENhbnZhcyA9IG93bmVyLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygncGF0dGVybicsIHdpZHRoLCBoZWlnaHQsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0bXBDdHggPSB0bXBDYW52YXMuY29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JhcGhpY3MgPSBjYW52YXNHcmFwaGljc0ZhY3RvcnkuY3JlYXRlQ2FudmFzR3JhcGhpY3ModG1wQ3R4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5ncm91cExldmVsID0gb3duZXIuZ3JvdXBMZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEZpbGxBbmRTdHJva2VTdHlsZVRvQ29udGV4dChncmFwaGljcywgcGFpbnRUeXBlLCBjb2xvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTY2FsZSh3aWR0aCwgaGVpZ2h0LCB4c3RlcCwgeXN0ZXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtVG9TY2FsZShncmFwaGljcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcFRyYW5zbGF0ZSA9IFsxLCAwLCAwLCAxLCAtdG9wTGVmdFswXSwgLXRvcExlZnRbMV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzLnRyYW5zZm9ybS5hcHBseShncmFwaGljcywgdG1wVHJhbnNsYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsaXBCYm94KGdyYXBoaWNzLCBiYm94LCB4MCwgeTAsIHgxLCB5MSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3MuZXhlY3V0ZU9wZXJhdG9yTGlzdChvcGVyYXRvckxpc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0bXBDYW52YXMuY2FudmFzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNjYWxlOiBmdW5jdGlvbiBUaWxpbmdQYXR0ZXJuX3NldFNjYWxlKHdpZHRoLCBoZWlnaHQsIHhzdGVwLCB5c3RlcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUgPSBbd2lkdGggLyB4c3RlcCwgaGVpZ2h0IC8geXN0ZXBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVRvU2NhbGU6IGZ1bmN0aW9uIFRpbGluZ1BhdHRlcm5fdHJhbnNmb3JtVG9TY2FsZShncmFwaGljcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY2FsZSA9IHRoaXMuc2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcFNjYWxlID0gW3NjYWxlWzBdLCAwLCAwLCBzY2FsZVsxXSwgMCwgMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3MudHJhbnNmb3JtLmFwcGx5KGdyYXBoaWNzLCB0bXBTY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVUb0NvbnRleHQ6IGZ1bmN0aW9uIFRpbGluZ1BhdHRlcm5fc2NhbGVUb0NvbnRleHQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlID0gdGhpcy5zY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5zY2FsZSgxIC8gc2NhbGVbMF0sIDEgLyBzY2FsZVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xpcEJib3g6IGZ1bmN0aW9uIGNsaXBCYm94KGdyYXBoaWNzLCBiYm94LCB4MCwgeTAsIHgxLCB5MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJib3gpICYmIGJib3gubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYm94V2lkdGggPSB4MSAtIHgwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmJveEhlaWdodCA9IHkxIC0geTA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzLmN0eC5yZWN0KHgwLCB5MCwgYmJveFdpZHRoLCBiYm94SGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3MuY2xpcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5lbmRQYXRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZpbGxBbmRTdHJva2VTdHlsZVRvQ29udGV4dDogZnVuY3Rpb24gc2V0RmlsbEFuZFN0cm9rZVN0eWxlVG9Db250ZXh0KGdyYXBoaWNzLCBwYWludFR5cGUsIGNvbG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBncmFwaGljcy5jdHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBncmFwaGljcy5jdXJyZW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwYWludFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQYWludFR5cGUuQ09MT1JFRDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gY3R4LmZpbGxTdHlsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBjdHguc3Ryb2tlU3R5bGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmZpbGxDb2xvciA9IGN0eC5maWxsU3R5bGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnN0cm9rZUNvbG9yID0gY3R4LnN0cm9rZVN0eWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQYWludFR5cGUuVU5DT0xPUkVEOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNzc0NvbG9yID0gX3V0aWwuVXRpbC5tYWtlQ3NzUmdiKGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IGNzc0NvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGNzc0NvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5maWxsQ29sb3IgPSBjc3NDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuc3Ryb2tlQ29sb3IgPSBjc3NDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJVbnN1cHBvcnRlZCBwYWludCB0eXBlOiBcIi5jb25jYXQocGFpbnRUeXBlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFBhdHRlcm46IGZ1bmN0aW9uIFRpbGluZ1BhdHRlcm5fZ2V0UGF0dGVybihjdHgsIG93bmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXBvcmFyeVBhdHRlcm5DYW52YXMgPSB0aGlzLmNyZWF0ZVBhdHRlcm5DYW52YXMob3duZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuY3R4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zZXRUcmFuc2Zvcm0uYXBwbHkoY3R4LCB0aGlzLmJhc2VUcmFuc2Zvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC50cmFuc2Zvcm0uYXBwbHkoY3R4LCB0aGlzLm1hdHJpeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2FsZVRvQ29udGV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHguY3JlYXRlUGF0dGVybih0ZW1wb3JhcnlQYXR0ZXJuQ2FudmFzLCAncmVwZWF0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBUaWxpbmdQYXR0ZXJuO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuVGlsaW5nUGF0dGVybiA9IFRpbGluZ1BhdHRlcm47XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE1NiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuR2xvYmFsV29ya2VyT3B0aW9ucyA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICB2YXIgR2xvYmFsV29ya2VyT3B0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5HbG9iYWxXb3JrZXJPcHRpb25zID0gR2xvYmFsV29ya2VyT3B0aW9ucztcbiAgICAgICAgICAgICAgICBHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclBvcnQgPSBHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclBvcnQgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclBvcnQ7XG4gICAgICAgICAgICAgICAgR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmMgPSBHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYyA9PT0gdW5kZWZpbmVkID8gJycgOiBHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYztcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTU3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5NZXNzYWdlSGFuZGxlciA9IE1lc3NhZ2VIYW5kbGVyO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9yZWdlbmVyYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNDcpKTtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMSk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHZhciBzZWxmID0gdGhpcywgYXJncyA9IGFyZ3VtZW50czsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpOyBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7IH0gZnVuY3Rpb24gX3Rocm93KGVycikgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTsgfSBfbmV4dCh1bmRlZmluZWQpOyB9KTsgfTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNhbGwoX3gsIF94Mikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Jlc29sdmVDYWxsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3Jlc29sdmVDYWxsKCkge1xuICAgICAgICAgICAgICAgICAgICBfcmVzb2x2ZUNhbGwgPSBfYXN5bmNUb0dlbmVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIF9yZWdlbmVyYXRvci5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZShmbiwgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aGlzQXJnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0FyZyA9IF9hcmdzLmxlbmd0aCA+IDIgJiYgX2FyZ3NbMl0gIT09IHVuZGVmaW5lZCA/IF9hcmdzWzJdIDogbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3MpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBfY2FsbGVlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZXNvbHZlQ2FsbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdyYXBSZWFzb24ocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfdHlwZW9mKHJlYXNvbikgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhc29uO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyZWFzb24ubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQWJvcnRFeGNlcHRpb24nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24ocmVhc29uLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdNaXNzaW5nUERGRXhjZXB0aW9uJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24ocmVhc29uLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX3V0aWwuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlLCByZWFzb24uc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF91dGlsLlVua25vd25FcnJvckV4Y2VwdGlvbihyZWFzb24ubWVzc2FnZSwgcmVhc29uLmRldGFpbHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gbWFrZVJlYXNvblNlcmlhbGl6YWJsZShyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhc29uIGluc3RhbmNlb2YgRXJyb3IpIHx8IHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLkFib3J0RXhjZXB0aW9uIHx8IHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24gfHwgcmVhc29uIGluc3RhbmNlb2YgX3V0aWwuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIHx8IHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLlVua25vd25FcnJvckV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYXNvbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX3V0aWwuVW5rbm93bkVycm9yRXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlLCByZWFzb24udG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZU9yUmVqZWN0KGNhcGFiaWxpdHksIHN1Y2Nlc3MsIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlamVjdChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZmluYWxpemUocHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHByb21pc2UpLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBNZXNzYWdlSGFuZGxlcihzb3VyY2VOYW1lLCB0YXJnZXROYW1lLCBjb21PYmopIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZU5hbWUgPSBzb3VyY2VOYW1lO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhcmdldE5hbWUgPSB0YXJnZXROYW1lO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbU9iaiA9IGNvbU9iajtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja0lkID0gMTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW1JZCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9zdE1lc3NhZ2VUcmFuc2ZlcnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbVNpbmtzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFja3NDYXBhYmlsaXRpZXMgPSB0aGlzLmNhbGxiYWNrc0NhcGFiaWxpdGllcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhaCA9IHRoaXMuYWN0aW9uSGFuZGxlciA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25Db21PYmpPbk1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gZXZlbnQuZGF0YTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEudGFyZ2V0TmFtZSAhPT0gX3RoaXMuc291cmNlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3Byb2Nlc3NTdHJlYW1NZXNzYWdlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLmlzUmVwbHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2tJZCA9IGRhdGEuY2FsbGJhY2tJZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmNhbGxiYWNrSWQgaW4gY2FsbGJhY2tzQ2FwYWJpbGl0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGNhbGxiYWNrc0NhcGFiaWxpdGllc1tjYWxsYmFja0lkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNhbGxiYWNrc0NhcGFiaWxpdGllc1tjYWxsYmFja0lkXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJ2Vycm9yJyBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5yZWplY3Qod3JhcFJlYXNvbihkYXRhLmVycm9yKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5yZXNvbHZlKGRhdGEuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgcmVzb2x2ZSBjYWxsYmFjayBcIi5jb25jYXQoY2FsbGJhY2tJZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5hY3Rpb24gaW4gYWgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWN0aW9uID0gYWhbZGF0YS5hY3Rpb25dO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2tJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3NvdXJjZU5hbWUgPSBfdGhpcy5zb3VyY2VOYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RhcmdldE5hbWUgPSBkYXRhLnNvdXJjZU5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvblswXS5jYWxsKGFjdGlvblsxXSwgZGF0YS5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IF9zb3VyY2VOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IF90YXJnZXROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVwbHk6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tJZDogZGF0YS5jYWxsYmFja0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHJlc3VsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTmFtZTogX3NvdXJjZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZTogX3RhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXBseTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0lkOiBkYXRhLmNhbGxiYWNrSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG1ha2VSZWFzb25TZXJpYWxpemFibGUocmVhc29uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5zdHJlYW1JZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fY3JlYXRlU3RyZWFtU2luayhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25bMF0uY2FsbChhY3Rpb25bMV0sIGRhdGEuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGFjdGlvbiBmcm9tIHdvcmtlcjogXCIuY29uY2F0KGRhdGEuYWN0aW9uKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgY29tT2JqLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgTWVzc2FnZUhhbmRsZXIucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICBvbjogZnVuY3Rpb24gb24oYWN0aW9uTmFtZSwgaGFuZGxlciwgc2NvcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhaCA9IHRoaXMuYWN0aW9uSGFuZGxlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFoW2FjdGlvbk5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgYWxyZWFkeSBhbiBhY3Rpb25OYW1lIGNhbGxlZCBcXFwiXCIuY29uY2F0KGFjdGlvbk5hbWUsIFwiXFxcIlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFoW2FjdGlvbk5hbWVdID0gW2hhbmRsZXIsIHNjb3BlXTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2VuZDogZnVuY3Rpb24gc2VuZChhY3Rpb25OYW1lLCBkYXRhLCB0cmFuc2ZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiB0aGlzLnRhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc3RNZXNzYWdlKG1lc3NhZ2UsIHRyYW5zZmVycyk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHNlbmRXaXRoUHJvbWlzZTogZnVuY3Rpb24gc2VuZFdpdGhQcm9taXNlKGFjdGlvbk5hbWUsIGRhdGEsIHRyYW5zZmVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrSWQgPSB0aGlzLmNhbGxiYWNrSWQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiB0aGlzLnRhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tJZDogY2FsbGJhY2tJZFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3NDYXBhYmlsaXRpZXNbY2FsbGJhY2tJZF0gPSBjYXBhYmlsaXR5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zdE1lc3NhZ2UobWVzc2FnZSwgdHJhbnNmZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2VuZFdpdGhTdHJlYW06IGZ1bmN0aW9uIHNlbmRXaXRoU3RyZWFtKGFjdGlvbk5hbWUsIGRhdGEsIHF1ZXVlaW5nU3RyYXRlZ3ksIHRyYW5zZmVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VOYW1lID0gdGhpcy5zb3VyY2VOYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldE5hbWUgPSB0aGlzLnRhcmdldE5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF91dGlsLlJlYWRhYmxlU3RyZWFtKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gc3RhcnQoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogY29udHJvbGxlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q2FsbDogc3RhcnRDYXBhYmlsaXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDbG9zZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IHNvdXJjZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiB0YXJnZXROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtSWQ6IHN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBjb250cm9sbGVyLmRlc2lyZWRTaXplXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFydENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bGw6IGZ1bmN0aW9uIHB1bGwoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVsbENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0ucHVsbENhbGwgPSBwdWxsQ2FwYWJpbGl0eTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTmFtZTogc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IHRhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW06ICdwdWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbUlkOiBzdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBjb250cm9sbGVyLmRlc2lyZWRTaXplXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdWxsQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsOiBmdW5jdGlvbiBjYW5jZWwocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW5jZWxDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmNhbmNlbENhbGwgPSBjYW5jZWxDYXBhYmlsaXR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmlzQ2xvc2VkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTmFtZTogc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IHRhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW06ICdjYW5jZWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOiByZWFzb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1JZDogc3RyZWFtSWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbmNlbENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBxdWV1ZWluZ1N0cmF0ZWd5KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZVN0cmVhbVNpbms6IGZ1bmN0aW9uIF9jcmVhdGVTdHJlYW1TaW5rKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWN0aW9uID0gdGhpcy5hY3Rpb25IYW5kbGVyW2RhdGEuYWN0aW9uXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW1JZCA9IGRhdGEuc3RyZWFtSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzaXJlZFNpemUgPSBkYXRhLmRlc2lyZWRTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU5hbWUgPSB0aGlzLnNvdXJjZU5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0TmFtZSA9IGRhdGEuc291cmNlTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VuZFN0cmVhbVJlcXVlc3QgPSBmdW5jdGlvbiBzZW5kU3RyZWFtUmVxdWVzdChfcmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IF9yZWYuc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IF9yZWYuY2h1bmssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVycyA9IF9yZWYudHJhbnNmZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gX3JlZi5zdWNjZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24gPSBfcmVmLnJlYXNvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMy5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IHNvdXJjZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IHRhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1JZDogc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rOiBjaHVuayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzczogc3VjY2VzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOiByZWFzb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0cmFuc2ZlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbVNpbmsgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5xdWV1ZTogZnVuY3Rpb24gZW5xdWV1ZShjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZmVycyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQ2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFzdERlc2lyZWRTaXplID0gdGhpcy5kZXNpcmVkU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNpcmVkU2l6ZSAtPSBzaXplO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0RGVzaXJlZFNpemUgPiAwICYmIHRoaXMuZGVzaXJlZFNpemUgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaW5rQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZHkgPSB0aGlzLnNpbmtDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kU3RyZWFtUmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW06ICdlbnF1ZXVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rOiBjaHVuayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyczogdHJhbnNmZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0NhbmNlbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogJ2Nsb3NlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlbGYuc3RyZWFtU2lua3Nbc3RyZWFtSWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIGVycm9yKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0NhbmNlbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjogcmVhc29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lua0NhcGFiaWxpdHk6IGNhcGFiaWxpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25QdWxsOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2FuY2VsbGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkU2l6ZTogZGVzaXJlZFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHk6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1TaW5rLnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVNpbmsucmVhZHkgPSBzdHJlYW1TaW5rLnNpbmtDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbVNpbmtzW3N0cmVhbUlkXSA9IHN0cmVhbVNpbms7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlQ2FsbChhY3Rpb25bMF0sIFtkYXRhLmRhdGEsIHN0cmVhbVNpbmtdLCBhY3Rpb25bMV0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiAnc3RhcnRfY29tcGxldGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFN0cmVhbVJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW06ICdzdGFydF9jb21wbGV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246IHJlYXNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF9wcm9jZXNzU3RyZWFtTWVzc2FnZTogZnVuY3Rpb24gX3Byb2Nlc3NTdHJlYW1NZXNzYWdlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXROYW1lID0gZGF0YS5zb3VyY2VOYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbUlkID0gZGF0YS5zdHJlYW1JZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbmRTdHJlYW1SZXNwb25zZSA9IGZ1bmN0aW9uIHNlbmRTdHJlYW1SZXNwb25zZShfcmVmMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBfcmVmMi5zdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBfcmVmMi5zdWNjZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24gPSBfcmVmMi5yZWFzb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczQuY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTmFtZTogc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZTogdGFyZ2V0TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHN1Y2Nlc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbUlkOiBzdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOiByZWFzb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWxldGVTdHJlYW1Db250cm9sbGVyID0gZnVuY3Rpb24gZGVsZXRlU3RyZWFtQ29udHJvbGxlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChbX3RoaXM0LnN0cmVhbUNvbnRyb2xsZXJzW2RhdGEuc3RyZWFtSWRdLnN0YXJ0Q2FsbCwgX3RoaXM0LnN0cmVhbUNvbnRyb2xsZXJzW2RhdGEuc3RyZWFtSWRdLnB1bGxDYWxsLCBfdGhpczQuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0uY2FuY2VsQ2FsbF0ubWFwKGZ1bmN0aW9uIChjYXBhYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXBhYmlsaXR5ICYmIGZpbmFsaXplKGNhcGFiaWxpdHkucHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgX3RoaXM0LnN0cmVhbUNvbnRyb2xsZXJzW2RhdGEuc3RyZWFtSWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChkYXRhLnN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0YXJ0X2NvbXBsZXRlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZU9yUmVqZWN0KHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0uc3RhcnRDYWxsLCBkYXRhLnN1Y2Nlc3MsIHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdwdWxsX2NvbXBsZXRlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZU9yUmVqZWN0KHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0ucHVsbENhbGwsIGRhdGEuc3VjY2Vzcywgd3JhcFJlYXNvbihkYXRhLnJlYXNvbikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3B1bGwnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RyZWFtU2lua3NbZGF0YS5zdHJlYW1JZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiAncHVsbF9jb21wbGV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0cmVhbVNpbmtzW2RhdGEuc3RyZWFtSWRdLmRlc2lyZWRTaXplIDw9IDAgJiYgZGF0YS5kZXNpcmVkU2l6ZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtU2lua3NbZGF0YS5zdHJlYW1JZF0uc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW1TaW5rc1tkYXRhLnN0cmVhbUlkXS5kZXNpcmVkU2l6ZSA9IGRhdGEuZGVzaXJlZFNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVDYWxsKHRoaXMuc3RyZWFtU2lua3NbZGF0YS5zdHJlYW1JZF0ub25QdWxsKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiAncHVsbF9jb21wbGV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiAncHVsbF9jb21wbGV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOiByZWFzb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbnF1ZXVlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkodGhpcy5zdHJlYW1Db250cm9sbGVyc1tkYXRhLnN0cmVhbUlkXSwgJ2VucXVldWUgc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXInKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0uaXNDbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0uY29udHJvbGxlci5lbnF1ZXVlKGRhdGEuY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjbG9zZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0sICdjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlcicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2RhdGEuc3RyZWFtSWRdLmlzQ2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0uaXNDbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2RhdGEuc3RyZWFtSWRdLmNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlU3RyZWFtQ29udHJvbGxlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkodGhpcy5zdHJlYW1Db250cm9sbGVyc1tkYXRhLnN0cmVhbUlkXSwgJ2Vycm9yIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0uY29udHJvbGxlci5lcnJvcih3cmFwUmVhc29uKGRhdGEucmVhc29uKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVN0cmVhbUNvbnRyb2xsZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjYW5jZWxfY29tcGxldGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlT3JSZWplY3QodGhpcy5zdHJlYW1Db250cm9sbGVyc1tkYXRhLnN0cmVhbUlkXS5jYW5jZWxDYWxsLCBkYXRhLnN1Y2Nlc3MsIHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlU3RyZWFtQ29udHJvbGxlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NhbmNlbCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zdHJlYW1TaW5rc1tkYXRhLnN0cmVhbUlkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlQ2FsbCh0aGlzLnN0cmVhbVNpbmtzW2RhdGEuc3RyZWFtSWRdLm9uQ2FuY2VsLCBbd3JhcFJlYXNvbihkYXRhLnJlYXNvbildKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiAnY2FuY2VsX2NvbXBsZXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFN0cmVhbVJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW06ICdjYW5jZWxfY29tcGxldGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjogcmVhc29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtU2lua3NbZGF0YS5zdHJlYW1JZF0uc2lua0NhcGFiaWxpdHkucmVqZWN0KHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW1TaW5rc1tkYXRhLnN0cmVhbUlkXS5pc0NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN0cmVhbVNpbmtzW2RhdGEuc3RyZWFtSWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBzdHJlYW0gY2FzZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZTogZnVuY3Rpb24gcG9zdE1lc3NhZ2UobWVzc2FnZSwgdHJhbnNmZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmZXJzICYmIHRoaXMucG9zdE1lc3NhZ2VUcmFuc2ZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbU9iai5wb3N0TWVzc2FnZShtZXNzYWdlLCB0cmFuc2ZlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbU9iai5wb3N0TWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tT2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNTggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLk1ldGFkYXRhID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxKTtcblxuICAgICAgICAgICAgICAgIHZhciBfeG1sX3BhcnNlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTU5KTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG4gICAgICAgICAgICAgICAgdmFyIE1ldGFkYXRhID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBNZXRhZGF0YShkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE1ldGFkYXRhKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJywgJ01ldGFkYXRhOiBpbnB1dCBpcyBub3QgYSBzdHJpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gdGhpcy5fcmVwYWlyKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZXIgPSBuZXcgX3htbF9wYXJzZXIuU2ltcGxlWE1MUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhtbERvY3VtZW50ID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeG1sRG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGFyc2UoeG1sRG9jdW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKE1ldGFkYXRhLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfcmVwYWlyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9yZXBhaXIoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5yZXBsYWNlKC9eKFtePF0rKS8sICcnKS5yZXBsYWNlKC8+XFxcXDM3NlxcXFwzNzcoW148XSspL2csIGZ1bmN0aW9uIChhbGwsIGNvZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZXMgPSBjb2Rlcy5yZXBsYWNlKC9cXFxcKFswLTNdKShbMC03XSkoWzAtN10pL2csIGZ1bmN0aW9uIChjb2RlLCBkMSwgZDIsIGQzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZDEgKiA2NCArIGQyICogOCArIGQzICogMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5yZXBsYWNlKC8mKGFtcHxhcG9zfGd0fGx0fHF1b3QpOy9nLCBmdW5jdGlvbiAoc3RyLCBuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2FtcCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyYnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Fwb3MnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcXCcnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2d0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnPic7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbHQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc8JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdxdW90JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnXFxcIic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiX3JlcGFpcjogXCIuY29uY2F0KG5hbWUsIFwiIGlzbid0IGRlZmluZWQuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJzID0gJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGJ5dGVzLmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZSA9IGJ5dGVzLmNoYXJDb2RlQXQoaSkgKiAyNTYgKyBieXRlcy5jaGFyQ29kZUF0KGkgKyAxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID49IDMyICYmIGNvZGUgPCAxMjcgJiYgY29kZSAhPT0gNjAgJiYgY29kZSAhPT0gNjIgJiYgY29kZSAhPT0gMzgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFycyArPSAnJiN4JyArICgweDEwMDAwICsgY29kZSkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKSArICc7JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnPicgKyBjaGFycztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfcGFyc2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3BhcnNlKHhtbERvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZGYgPSB4bWxEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJkZi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAncmRmOnJkZicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkZiA9IHJkZi5maXJzdENoaWxkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmRmICYmIHJkZi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAncmRmOnJkZicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZGYgPSByZGYubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZU5hbWUgPSByZGYgPyByZGYubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZGYgfHwgbm9kZU5hbWUgIT09ICdyZGY6cmRmJyB8fCAhcmRmLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gcmRmLmNoaWxkTm9kZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2MgPSBjaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc2Mubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gJ3JkZjpkZXNjcmlwdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gZGVzYy5jaGlsZE5vZGVzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVzYy5jaGlsZE5vZGVzW2pdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICcjdGV4dCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gZGVzYy5jaGlsZE5vZGVzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGVudHJ5Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhW25hbWVdID0gZW50cnkudGV4dENvbnRlbnQudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fbWV0YWRhdGFbbmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgZGF0YSAhPT0gJ3VuZGVmaW5lZCcgPyBkYXRhIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldEFsbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRBbGwoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImhhc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYXMobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMuX21ldGFkYXRhW25hbWVdICE9PSAndW5kZWZpbmVkJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNZXRhZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5NZXRhZGF0YSA9IE1ldGFkYXRhO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNTkgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLlNpbXBsZVhNTFBhcnNlciA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2VcIik7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfZSA9IHVuZGVmaW5lZDsgdHJ5IHsgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikgeyBpZiAodHlwZW9mIFJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCIgJiYgUmVmbGVjdC5nZXQpIHsgX2dldCA9IFJlZmxlY3QuZ2V0OyB9IGVsc2UgeyBfZ2V0ID0gZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikgeyB2YXIgYmFzZSA9IF9zdXBlclByb3BCYXNlKHRhcmdldCwgcHJvcGVydHkpOyBpZiAoIWJhc2UpIHJldHVybjsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2UsIHByb3BlcnR5KTsgaWYgKGRlc2MuZ2V0KSB7IHJldHVybiBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKTsgfSByZXR1cm4gZGVzYy52YWx1ZTsgfTsgfSByZXR1cm4gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlciB8fCB0YXJnZXQpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfc3VwZXJQcm9wQmFzZShvYmplY3QsIHByb3BlcnR5KSB7IHdoaWxlICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKSB7IG9iamVjdCA9IF9nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAob2JqZWN0ID09PSBudWxsKSBicmVhazsgfSByZXR1cm4gb2JqZWN0OyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG4gICAgICAgICAgICAgICAgdmFyIFhNTFBhcnNlckVycm9yQ29kZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgTm9FcnJvcjogMCxcbiAgICAgICAgICAgICAgICAgICAgRW5kT2ZEb2N1bWVudDogLTEsXG4gICAgICAgICAgICAgICAgICAgIFVudGVybWluYXRlZENkYXQ6IC0yLFxuICAgICAgICAgICAgICAgICAgICBVbnRlcm1pbmF0ZWRYbWxEZWNsYXJhdGlvbjogLTMsXG4gICAgICAgICAgICAgICAgICAgIFVudGVybWluYXRlZERvY3R5cGVEZWNsYXJhdGlvbjogLTQsXG4gICAgICAgICAgICAgICAgICAgIFVudGVybWluYXRlZENvbW1lbnQ6IC01LFxuICAgICAgICAgICAgICAgICAgICBNYWxmb3JtZWRFbGVtZW50OiAtNixcbiAgICAgICAgICAgICAgICAgICAgT3V0T2ZNZW1vcnk6IC03LFxuICAgICAgICAgICAgICAgICAgICBVbnRlcm1pbmF0ZWRBdHRyaWJ1dGVWYWx1ZTogLTgsXG4gICAgICAgICAgICAgICAgICAgIFVudGVybWluYXRlZEVsZW1lbnQ6IC05LFxuICAgICAgICAgICAgICAgICAgICBFbGVtZW50TmV2ZXJCZWd1bjogLTEwXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzV2hpdGVzcGFjZShzLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2ggPSBzW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoID09PSAnICcgfHwgY2ggPT09ICdcXG4nIHx8IGNoID09PSAnXFxyJyB8fCBjaCA9PT0gJ1xcdCc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNXaGl0ZXNwYWNlU3RyaW5nKHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzV2hpdGVzcGFjZShzLCBpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBYTUxQYXJzZXJCYXNlID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBYTUxQYXJzZXJCYXNlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBYTUxQYXJzZXJCYXNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFhNTFBhcnNlckJhc2UsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9yZXNvbHZlRW50aXRpZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3Jlc29sdmVFbnRpdGllcyhzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvJihbXjtdKyk7L2csIGZ1bmN0aW9uIChhbGwsIGVudGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudGl0eS5zdWJzdHJpbmcoMCwgMikgPT09ICcjeCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChlbnRpdHkuc3Vic3RyaW5nKDIpLCAxNikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRpdHkuc3Vic3RyaW5nKDAsIDEpID09PSAnIycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChlbnRpdHkuc3Vic3RyaW5nKDEpLCAxMCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGVudGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2x0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc8JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2d0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc+JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2FtcCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJic7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdxdW90JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcXFwiJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLm9uUmVzb2x2ZUVudGl0eShlbnRpdHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9wYXJzZUNvbnRlbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3BhcnNlQ29udGVudChzLCBzdGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNraXBXcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwb3MgPCBzLmxlbmd0aCAmJiBpc1doaXRlc3BhY2UocywgcG9zKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBvcyA8IHMubGVuZ3RoICYmICFpc1doaXRlc3BhY2UocywgcG9zKSAmJiBzW3Bvc10gIT09ICc+JyAmJiBzW3Bvc10gIT09ICcvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytwb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gcy5zdWJzdHJpbmcoc3RhcnQsIHBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBXcygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwb3MgPCBzLmxlbmd0aCAmJiBzW3Bvc10gIT09ICc+JyAmJiBzW3Bvc10gIT09ICcvJyAmJiBzW3Bvc10gIT09ICc/Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFdzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXR0ck5hbWUgPSAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyVmFsdWUgPSAnJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBvcyA8IHMubGVuZ3RoICYmICFpc1doaXRlc3BhY2UocywgcG9zKSAmJiBzW3Bvc10gIT09ICc9Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJOYW1lICs9IHNbcG9zXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3BvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFdzKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzW3Bvc10gIT09ICc9Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3BvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBXcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJFbmRDaGFyID0gc1twb3NdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXR0ckVuZENoYXIgIT09ICdcXFwiJyAmJiBhdHRyRW5kQ2hhciAhPT0gJ1xcJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJFbmRJbmRleCA9IHMuaW5kZXhPZihhdHRyRW5kQ2hhciwgKytwb3MpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXR0ckVuZEluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyVmFsdWUgPSBzLnN1YnN0cmluZyhwb3MsIGF0dHJFbmRJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGF0dHJOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9yZXNvbHZlRW50aXRpZXMoYXR0clZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBhdHRyRW5kSW5kZXggKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFdzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQ6IHBvcyAtIHN0YXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3BhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKHMsIHN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3MgPSBzdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBza2lwV3MoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocG9zIDwgcy5sZW5ndGggJiYgaXNXaGl0ZXNwYWNlKHMsIHBvcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3BvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwb3MgPCBzLmxlbmd0aCAmJiAhaXNXaGl0ZXNwYWNlKHMsIHBvcykgJiYgc1twb3NdICE9PSAnPicgJiYgc1twb3NdICE9PSAnLycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHMuc3Vic3RyaW5nKHN0YXJ0LCBwb3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwV3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJTdGFydCA9IHBvcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocG9zIDwgcy5sZW5ndGggJiYgKHNbcG9zXSAhPT0gJz8nIHx8IHNbcG9zICsgMV0gIT09ICc+JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzLnN1YnN0cmluZyhhdHRyU3RhcnQsIHBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkOiBwb3MgLSBzdGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicGFyc2VYbWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VYbWwocykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoID0gc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqID0gaTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnPCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2o7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoMiA9IHNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHEgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcvJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBzLmluZGV4T2YoJz4nLCBqKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5VbnRlcm1pbmF0ZWRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25FbmRFbGVtZW50KHMuc3Vic3RyaW5nKGosIHEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBxICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJz8nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytqO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGkgPSB0aGlzLl9wYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihzLCBqKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMuc3Vic3RyaW5nKGogKyBwaS5wYXJzZWQsIGogKyBwaS5wYXJzZWQgKyAyKSAhPT0gJz8+Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvcihYTUxQYXJzZXJFcnJvckNvZGUuVW50ZXJtaW5hdGVkWG1sRGVjbGFyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblBpKHBpLm5hbWUsIHBpLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gcGkucGFyc2VkICsgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJyEnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMuc3Vic3RyaW5nKGogKyAxLCBqICsgMykgPT09ICctLScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gcy5pbmRleE9mKCctLT4nLCBqICsgMyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5VbnRlcm1pbmF0ZWRDb21tZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Db21tZW50KHMuc3Vic3RyaW5nKGogKyAzLCBxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IHEgKyAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzLnN1YnN0cmluZyhqICsgMSwgaiArIDgpID09PSAnW0NEQVRBWycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gcy5pbmRleE9mKCddXT4nLCBqICsgOCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5VbnRlcm1pbmF0ZWRDZGF0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25DZGF0YShzLnN1YnN0cmluZyhqICsgOCwgcSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBxICsgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocy5zdWJzdHJpbmcoaiArIDEsIGogKyA4KSA9PT0gJ0RPQ1RZUEUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHEyID0gcy5pbmRleE9mKCdbJywgaiArIDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wbGV4RG9jdHlwZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBzLmluZGV4T2YoJz4nLCBqICsgOCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5VbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEyID4gMCAmJiBxID4gcTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IHMuaW5kZXhPZignXT4nLCBqICsgOCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoWE1MUGFyc2VyRXJyb3JDb2RlLlVudGVybWluYXRlZERvY3R5cGVEZWNsYXJhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV4RG9jdHlwZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvY3R5cGVDb250ZW50ID0gcy5zdWJzdHJpbmcoaiArIDgsIHEgKyAoY29tcGxleERvY3R5cGUgPyAxIDogMCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Eb2N0eXBlKGRvY3R5cGVDb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gcSArIChjb21wbGV4RG9jdHlwZSA/IDIgOiAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5NYWxmb3JtZWRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuX3BhcnNlQ29udGVudChzLCBqKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoWE1MUGFyc2VyRXJyb3JDb2RlLk1hbGZvcm1lZEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzQ2xvc2VkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzLnN1YnN0cmluZyhqICsgY29udGVudC5wYXJzZWQsIGogKyBjb250ZW50LnBhcnNlZCArIDIpID09PSAnLz4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzLnN1YnN0cmluZyhqICsgY29udGVudC5wYXJzZWQsIGogKyBjb250ZW50LnBhcnNlZCArIDEpICE9PSAnPicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoWE1MUGFyc2VyRXJyb3JDb2RlLlVudGVybWluYXRlZEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkJlZ2luRWxlbWVudChjb250ZW50Lm5hbWUsIGNvbnRlbnQuYXR0cmlidXRlcywgaXNDbG9zZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiArPSBjb250ZW50LnBhcnNlZCArIChpc0Nsb3NlZCA/IDIgOiAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGogPCBzLmxlbmd0aCAmJiBzW2pdICE9PSAnPCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gcy5zdWJzdHJpbmcoaSwgaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblRleHQodGhpcy5fcmVzb2x2ZUVudGl0aWVzKHRleHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm9uUmVzb2x2ZUVudGl0eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBvblJlc29sdmVFbnRpdHkobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCImXCIuY29uY2F0KG5hbWUsIFwiO1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm9uUGlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gb25QaShuYW1lLCB2YWx1ZSkge31cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwib25Db21tZW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ29tbWVudCh0ZXh0KSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJvbkNkYXRhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2RhdGEodGV4dCkge31cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwib25Eb2N0eXBlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uRG9jdHlwZShkb2N0eXBlQ29udGVudCkge31cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwib25UZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uVGV4dCh0ZXh0KSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJvbkJlZ2luRWxlbWVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBvbkJlZ2luRWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzLCBpc0VtcHR5KSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJvbkVuZEVsZW1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gb25FbmRFbGVtZW50KG5hbWUpIHt9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm9uRXJyb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gb25FcnJvcihjb2RlKSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWE1MUGFyc2VyQmFzZTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFNpbXBsZURPTU5vZGUgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFNpbXBsZURPTU5vZGUobm9kZU5hbWUsIG5vZGVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTaW1wbGVET01Ob2RlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZU5hbWUgPSBub2RlTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVWYWx1ZSA9IG5vZGVWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3BhcmVudE5vZGUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoU2ltcGxlRE9NTm9kZSwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaGFzQ2hpbGROb2Rlc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNDaGlsZE5vZGVzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzICYmIHRoaXMuY2hpbGROb2Rlcy5sZW5ndGggPiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZmlyc3RDaGlsZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzICYmIHRoaXMuY2hpbGROb2Rlc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm5leHRTaWJsaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZE5vZGVzID0gdGhpcy5wYXJlbnROb2RlLmNoaWxkTm9kZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZE5vZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gY2hpbGROb2Rlcy5pbmRleE9mKHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGROb2Rlc1tpbmRleCArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwidGV4dENvbnRlbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoaWxkTm9kZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5vZGVWYWx1ZSB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkTm9kZXMubWFwKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLnRleHRDb250ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaW1wbGVET01Ob2RlO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgU2ltcGxlWE1MUGFyc2VyID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX1hNTFBhcnNlckJhc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhTaW1wbGVYTUxQYXJzZXIsIF9YTUxQYXJzZXJCYXNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gU2ltcGxlWE1MUGFyc2VyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU2ltcGxlWE1MUGFyc2VyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMiA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihTaW1wbGVYTUxQYXJzZXIpLmNhbGwodGhpcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5fY3VycmVudEZyYWdtZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuX3N0YWNrID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuX2Vycm9yQ29kZSA9IFhNTFBhcnNlckVycm9yQ29kZS5Ob0Vycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhTaW1wbGVYTUxQYXJzZXIsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInBhcnNlRnJvbVN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZUZyb21TdHJpbmcoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50RnJhZ21lbnQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyb3JDb2RlID0gWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyc2VYbWwoZGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Vycm9yQ29kZSAhPT0gWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMkX2N1cnJlbnRGcmFnbWVuID0gX3NsaWNlZFRvQXJyYXkodGhpcy5fY3VycmVudEZyYWdtZW50LCAxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50RWxlbWVudCA9IF90aGlzJF9jdXJyZW50RnJhZ21lblswXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudEVsZW1lbnQ6IGRvY3VtZW50RWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwib25SZXNvbHZlRW50aXR5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uUmVzb2x2ZUVudGl0eShuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYXBvcyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcXCcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9nZXQoX2dldFByb3RvdHlwZU9mKFNpbXBsZVhNTFBhcnNlci5wcm90b3R5cGUpLCBcIm9uUmVzb2x2ZUVudGl0eVwiLCB0aGlzKS5jYWxsKHRoaXMsIG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwib25UZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uVGV4dCh0ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1doaXRlc3BhY2VTdHJpbmcodGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gbmV3IFNpbXBsZURPTU5vZGUoJyN0ZXh0JywgdGV4dCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudEZyYWdtZW50LnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJvbkNkYXRhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2RhdGEodGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IG5ldyBTaW1wbGVET01Ob2RlKCcjdGV4dCcsIHRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwib25CZWdpbkVsZW1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gb25CZWdpbkVsZW1lbnQobmFtZSwgYXR0cmlidXRlcywgaXNFbXB0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IG5ldyBTaW1wbGVET01Ob2RlKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkTm9kZXMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaChub2RlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhY2sucHVzaCh0aGlzLl9jdXJyZW50RnJhZ21lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRGcmFnbWVudCA9IG5vZGUuY2hpbGROb2RlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm9uRW5kRWxlbWVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBvbkVuZEVsZW1lbnQobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50RnJhZ21lbnQgPSB0aGlzLl9zdGFjay5wb3AoKSB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RFbGVtZW50ID0gdGhpcy5fY3VycmVudEZyYWdtZW50W3RoaXMuX2N1cnJlbnRGcmFnbWVudC5sZW5ndGggLSAxXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxhc3RFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBsYXN0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RFbGVtZW50LmNoaWxkTm9kZXNbaV0ucGFyZW50Tm9kZSA9IGxhc3RFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJvbkVycm9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uRXJyb3IoY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnJvckNvZGUgPSBjb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNpbXBsZVhNTFBhcnNlcjtcbiAgICAgICAgICAgICAgICAgICAgfShYTUxQYXJzZXJCYXNlKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuU2ltcGxlWE1MUGFyc2VyID0gU2ltcGxlWE1MUGFyc2VyO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNjAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLlBERkRhdGFUcmFuc3BvcnRTdHJlYW0gPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3JlZ2VuZXJhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0NykpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7IHRyeSB7IHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTsgdmFyIHZhbHVlID0gaW5mby52YWx1ZTsgfSBjYXRjaCAoZXJyb3IpIHsgcmVqZWN0KGVycm9yKTsgcmV0dXJuOyB9IGlmIChpbmZvLmRvbmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0gZWxzZSB7IFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyB2YXIgc2VsZiA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTsgZnVuY3Rpb24gX25leHQodmFsdWUpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpOyB9IGZ1bmN0aW9uIF90aHJvdyhlcnIpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7IH0gX25leHQodW5kZWZpbmVkKTsgfSk7IH07IH1cblxuICAgICAgICAgICAgICAgIHZhciBQREZEYXRhVHJhbnNwb3J0U3RyZWFtID0gZnVuY3Rpb24gUERGRGF0YVRyYW5zcG9ydFN0cmVhbUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBERkRhdGFUcmFuc3BvcnRTdHJlYW0ocGFyYW1zLCBwZGZEYXRhUmFuZ2VUcmFuc3BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHBkZkRhdGFSYW5nZVRyYW5zcG9ydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZWRDaHVua3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbml0aWFsRGF0YSA9IHBhcmFtcy5pbml0aWFsRGF0YTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluaXRpYWxEYXRhICYmIGluaXRpYWxEYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoaW5pdGlhbERhdGEpLmJ1ZmZlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXVlZENodW5rcy5wdXNoKGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydCA9IHBkZkRhdGFSYW5nZVRyYW5zcG9ydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkID0gIXBhcmFtcy5kaXNhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNSYW5nZVN1cHBvcnRlZCA9ICFwYXJhbXMuZGlzYWJsZVJhbmdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGVudExlbmd0aCA9IHBhcmFtcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yYW5nZVJlYWRlcnMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmFkZFJhbmdlTGlzdGVuZXIoZnVuY3Rpb24gKGJlZ2luLCBjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9vblJlY2VpdmVEYXRhKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46IGJlZ2luLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuazogY2h1bmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUHJvZ3Jlc3NMaXN0ZW5lcihmdW5jdGlvbiAobG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX29uUHJvZ3Jlc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWQ6IGxvYWRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5hZGRQcm9ncmVzc2l2ZVJlYWRMaXN0ZW5lcihmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fb25SZWNlaXZlRGF0YSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rOiBjaHVua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC50cmFuc3BvcnRSZWFkeSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgUERGRGF0YVRyYW5zcG9ydFN0cmVhbS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfb25SZWNlaXZlRGF0YTogZnVuY3Rpb24gUERGRGF0YVRyYW5zcG9ydFN0cmVhbV9vblJlY2VpdmVEYXRhKGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoYXJncy5jaHVuaykuYnVmZmVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MuYmVnaW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLl9lbnF1ZXVlKGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZWRDaHVua3MucHVzaChidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvdW5kID0gdGhpcy5fcmFuZ2VSZWFkZXJzLnNvbWUoZnVuY3Rpb24gKHJhbmdlUmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2VSZWFkZXIuX2JlZ2luICE9PSBhcmdzLmJlZ2luKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZVJlYWRlci5fZW5xdWV1ZShidWZmZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoZm91bmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBfb25Qcm9ncmVzczogZnVuY3Rpb24gUERGRGF0YVRyYW5zcG9ydFN0cmVhbV9vbkRhdGFQcm9ncmVzcyhldnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmFuZ2VSZWFkZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0UmVhZGVyID0gdGhpcy5fcmFuZ2VSZWFkZXJzWzBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdFJlYWRlci5vblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJlYWRlci5vblByb2dyZXNzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWQ6IGV2dC5sb2FkZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9yZW1vdmVSYW5nZVJlYWRlcjogZnVuY3Rpb24gUERGRGF0YVRyYW5zcG9ydFN0cmVhbV9yZW1vdmVSYW5nZVJlYWRlcihyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHRoaXMuX3JhbmdlUmVhZGVycy5pbmRleE9mKHJlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlUmVhZGVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldEZ1bGxSZWFkZXI6IGZ1bmN0aW9uIFBERkRhdGFUcmFuc3BvcnRTdHJlYW1fZ2V0RnVsbFJlYWRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdWV1ZWRDaHVua3MgPSB0aGlzLl9xdWV1ZWRDaHVua3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcXVldWVkQ2h1bmtzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBERkRhdGFUcmFuc3BvcnRTdHJlYW1SZWFkZXIodGhpcywgcXVldWVkQ2h1bmtzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRSYW5nZVJlYWRlcjogZnVuY3Rpb24gUERGRGF0YVRyYW5zcG9ydFN0cmVhbV9nZXRSYW5nZVJlYWRlcihiZWdpbiwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBQREZEYXRhVHJhbnNwb3J0U3RyZWFtUmFuZ2VSZWFkZXIodGhpcywgYmVnaW4sIGVuZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQucmVxdWVzdERhdGFSYW5nZShiZWdpbiwgZW5kKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlUmVhZGVycy5wdXNoKHJlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbEFsbFJlcXVlc3RzOiBmdW5jdGlvbiBQREZEYXRhVHJhbnNwb3J0U3RyZWFtX2NhbmNlbEFsbFJlcXVlc3RzKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlci5jYW5jZWwocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGVycyA9IHRoaXMuX3JhbmdlUmVhZGVycy5zbGljZSgwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlcnMuZm9yRWFjaChmdW5jdGlvbiAocmFuZ2VSZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VSZWFkZXIuY2FuY2VsKHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQREZEYXRhVHJhbnNwb3J0U3RyZWFtUmVhZGVyKHN0cmVhbSwgcXVldWVkQ2h1bmtzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWxlbmFtZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZWRDaHVua3MgPSBxdWV1ZWRDaHVua3MgfHwgW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVhZGVyc1JlYWR5ID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX2Z1bGxSZXF1ZXN0UmVhZGVyID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBQREZEYXRhVHJhbnNwb3J0U3RyZWFtUmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lbnF1ZXVlOiBmdW5jdGlvbiBQREZEYXRhVHJhbnNwb3J0U3RyZWFtUmVhZGVyX2VucXVldWUoY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcXVlc3RDYXBhYmlsaXR5ID0gdGhpcy5fcmVxdWVzdHMuc2hpZnQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjaHVuayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcXVldWVkQ2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGhlYWRlcnNSZWFkeSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faGVhZGVyc1JlYWR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGZpbGVuYW1lKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWxlbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBpc1JhbmdlU3VwcG9ydGVkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdHJlYW0uX2lzUmFuZ2VTdXBwb3J0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmVhbS5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgY29udGVudExlbmd0aCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RyZWFtLl9jb250ZW50TGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVhZCA9IF9hc3luY1RvR2VuZXJhdG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWdlbmVyYXRvci5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVuaywgcmVxdWVzdENhcGFiaWxpdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0aGlzLl9xdWV1ZWRDaHVua3MubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gdGhpcy5fcXVldWVkQ2h1bmtzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdChcInJldHVyblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjaHVuayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdChcInJldHVyblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdHMucHVzaChyZXF1ZXN0Q2FwYWJpbGl0eSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIHJlcXVlc3RDYXBhYmlsaXR5LnByb21pc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIF9jYWxsZWUsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlYWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0oKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbDogZnVuY3Rpb24gUERGRGF0YVRyYW5zcG9ydFN0cmVhbVJlYWRlcl9jYW5jZWwocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1ZXN0Q2FwYWJpbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQREZEYXRhVHJhbnNwb3J0U3RyZWFtUmFuZ2VSZWFkZXIoc3RyZWFtLCBiZWdpbiwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9iZWdpbiA9IGJlZ2luO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW5kID0gZW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcXVldWVkQ2h1bmsgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBQREZEYXRhVHJhbnNwb3J0U3RyZWFtUmFuZ2VSZWFkZXIucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2VucXVldWU6IGZ1bmN0aW9uIFBERkRhdGFUcmFuc3BvcnRTdHJlYW1SYW5nZVJlYWRlcl9lbnF1ZXVlKGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcXVldWVkQ2h1bmsgPSBjaHVuaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVxdWVzdHNDYXBhYmlsaXR5ID0gdGhpcy5fcmVxdWVzdHMuc2hpZnQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0c0NhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2h1bmssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1ZXN0Q2FwYWJpbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdENhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kb25lID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0cmVhbS5fcmVtb3ZlUmFuZ2VSZWFkZXIodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVhZDIgPSBfYXN5bmNUb0dlbmVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVnZW5lcmF0b3IuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rLCByZXF1ZXN0Q2FwYWJpbGl0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyJChfY29udGV4dDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0Mi5wcmV2ID0gX2NvbnRleHQyLm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3F1ZXVlZENodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmsgPSB0aGlzLl9xdWV1ZWRDaHVuaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZWRDaHVuayA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoXCJyZXR1cm5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2h1bmssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2RvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdChcInJldHVyblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdHMucHVzaChyZXF1ZXN0Q2FwYWJpbGl0eSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdChcInJldHVyblwiLCByZXF1ZXN0Q2FwYWJpbGl0eS5wcm9taXNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgX2NhbGxlZTIsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlYWQyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KCksXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWw6IGZ1bmN0aW9uIFBERkRhdGFUcmFuc3BvcnRTdHJlYW1SYW5nZVJlYWRlcl9jYW5jZWwocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1ZXN0Q2FwYWJpbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdHMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0cmVhbS5fcmVtb3ZlUmFuZ2VSZWFkZXIodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQREZEYXRhVHJhbnNwb3J0U3RyZWFtO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuUERGRGF0YVRyYW5zcG9ydFN0cmVhbSA9IFBERkRhdGFUcmFuc3BvcnRTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE2MSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuV2ViR0xDb250ZXh0ID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG4gICAgICAgICAgICAgICAgdmFyIFdlYkdMQ29udGV4dCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV2ViR0xDb250ZXh0KF9yZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlZiRlbmFibGUgPSBfcmVmLmVuYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlID0gX3JlZiRlbmFibGUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRlbmFibGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgV2ViR0xDb250ZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VuYWJsZWQgPSBlbmFibGUgPT09IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhXZWJHTENvbnRleHQsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNvbXBvc2VTTWFza1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb3NlU01hc2soX3JlZjIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxheWVyID0gX3JlZjIubGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrID0gX3JlZjIubWFzayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSBfcmVmMi5wcm9wZXJ0aWVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xVdGlscy5jb21wb3NlU01hc2sobGF5ZXIsIG1hc2ssIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZHJhd0ZpZ3VyZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZHJhd0ZpZ3VyZXMoX3JlZjMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gX3JlZjMud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSBfcmVmMy5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBfcmVmMy5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWd1cmVzID0gX3JlZjMuZmlndXJlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBfcmVmMy5jb250ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xVdGlscy5kcmF3RmlndXJlcyh3aWR0aCwgaGVpZ2h0LCBiYWNrZ3JvdW5kQ29sb3IsIGZpZ3VyZXMsIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY2xlYXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkdMVXRpbHMuY2xlYW51cCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXNFbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmFibGVkID0gdGhpcy5fZW5hYmxlZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZCA9IFdlYkdMVXRpbHMudHJ5SW5pdEdMKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ2lzRW5hYmxlZCcsIGVuYWJsZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdMQ29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5XZWJHTENvbnRleHQgPSBXZWJHTENvbnRleHQ7XG5cbiAgICAgICAgICAgICAgICB2YXIgV2ViR0xVdGlscyA9IGZ1bmN0aW9uIFdlYkdMVXRpbHNDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBsb2FkU2hhZGVyKGdsLCBjb2RlLCBzaGFkZXJUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKHNoYWRlclR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcGlsZWQgPSBnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29tcGlsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JNc2cgPSBnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciBkdXJpbmcgc2hhZGVyIGNvbXBpbGF0aW9uOiAnICsgZXJyb3JNc2cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2hhZGVyO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlVmVydGV4U2hhZGVyKGdsLCBjb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9hZFNoYWRlcihnbCwgY29kZSwgZ2wuVkVSVEVYX1NIQURFUik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVGcmFnbWVudFNoYWRlcihnbCwgY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRTaGFkZXIoZ2wsIGNvZGUsIGdsLkZSQUdNRU5UX1NIQURFUik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVQcm9ncmFtKGdsLCBzaGFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gc2hhZGVycy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcnNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5rZWQgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsaW5rZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JNc2cgPSBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIGR1cmluZyBwcm9ncmFtIGxpbmtpbmc6ICcgKyBlcnJvck1zZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9ncmFtO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlVGV4dHVyZShnbCwgaW1hZ2UsIHRleHR1cmVJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZSh0ZXh0dXJlSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGltYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRHTCwgY3VycmVudENhbnZhcztcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZW5lcmF0ZUdMKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRHTCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEdMID0gY3VycmVudENhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVtdWx0aXBsaWVkYWxwaGE6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBzbWFza1ZlcnRleFNoYWRlckNvZGUgPSAnXFxcbiAgYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICBhdHRyaWJ1dGUgdmVjMiBhX3RleENvb3JkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgdW5pZm9ybSB2ZWMyIHVfcmVzb2x1dGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB2b2lkIG1haW4oKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgdmVjMiBjbGlwU3BhY2UgPSAoYV9wb3NpdGlvbiAvIHVfcmVzb2x1dGlvbikgKiAyLjAgLSAxLjA7ICAgXFxcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoY2xpcFNwYWNlICogdmVjMigxLCAtMSksIDAsIDEpOyAgICAgICAgICBcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgdl90ZXhDb29yZCA9IGFfdGV4Q29vcmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnO1xuICAgICAgICAgICAgICAgICAgICB2YXIgc21hc2tGcmFnbWVudFNoYWRlckNvZGUgPSAnXFxcbiAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIHVuaWZvcm0gdmVjNCB1X2JhY2tkcm9wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgdW5pZm9ybSBpbnQgdV9zdWJ0eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIHVuaWZvcm0gc2FtcGxlcjJEIHVfbWFzazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgdm9pZCBtYWluKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgIHZlYzQgaW1hZ2VDb2xvciA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3RleENvb3JkKTsgICAgICAgICAgIFxcXG4gICAgdmVjNCBtYXNrQ29sb3IgPSB0ZXh0dXJlMkQodV9tYXNrLCB2X3RleENvb3JkKTsgICAgICAgICAgICAgXFxcbiAgICBpZiAodV9iYWNrZHJvcC5hID4gMC4wKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgbWFza0NvbG9yLnJnYiA9IG1hc2tDb2xvci5yZ2IgKiBtYXNrQ29sb3IuYSArICAgICAgICAgICAgIFxcXG4gICAgICAgICAgICAgICAgICAgICAgdV9iYWNrZHJvcC5yZ2IgKiAoMS4wIC0gbWFza0NvbG9yLmEpOyAgICAgXFxcbiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgIGZsb2F0IGx1bTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgaWYgKHVfc3VidHlwZSA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgIGx1bSA9IG1hc2tDb2xvci5hOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICBsdW0gPSBtYXNrQ29sb3IuciAqIDAuMyArIG1hc2tDb2xvci5nICogMC41OSArICAgICAgICAgICAgXFxcbiAgICAgICAgICAgIG1hc2tDb2xvci5iICogMC4xMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgaW1hZ2VDb2xvci5hICo9IGx1bTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICBpbWFnZUNvbG9yLnJnYiAqPSBpbWFnZUNvbG9yLmE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgIGdsX0ZyYWdDb2xvciA9IGltYWdlQ29sb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJztcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNtYXNrQ2FjaGUgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGluaXRTbWFza0dMKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbnZhcywgZ2w7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUdMKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMgPSBjdXJyZW50Q2FudmFzO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENhbnZhcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbCA9IGN1cnJlbnRHTDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHTCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmVydGV4U2hhZGVyID0gY3JlYXRlVmVydGV4U2hhZGVyKGdsLCBzbWFza1ZlcnRleFNoYWRlckNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZyYWdtZW50U2hhZGVyID0gY3JlYXRlRnJhZ21lbnRTaGFkZXIoZ2wsIHNtYXNrRnJhZ21lbnRTaGFkZXJDb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9ncmFtID0gY3JlYXRlUHJvZ3JhbShnbCwgW3ZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLnVzZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FjaGUgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLmdsID0gZ2w7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5jYW52YXMgPSBjYW52YXM7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5yZXNvbHV0aW9uTG9jYXRpb24gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgJ3VfcmVzb2x1dGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUucG9zaXRpb25Mb2NhdGlvbiA9IGdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sICdhX3Bvc2l0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5iYWNrZHJvcExvY2F0aW9uID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICd1X2JhY2tkcm9wJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5zdWJ0eXBlTG9jYXRpb24gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgJ3Vfc3VidHlwZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleENvb3JkTG9jYXRpb24gPSBnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAnYV90ZXhDb29yZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleExheWVyTG9jYXRpb24gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgJ3VfaW1hZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXhNYXNrTG9jYXRpb24gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgJ3VfbWFzaycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleENvb3JkQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGV4Q29vcmRCdWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG5ldyBGbG9hdDMyQXJyYXkoWzAuMCwgMC4wLCAxLjAsIDAuMCwgMC4wLCAxLjAsIDAuMCwgMS4wLCAxLjAsIDAuMCwgMS4wLCAxLjBdKSwgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodGV4Q29vcmRMb2NhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRleENvb3JkTG9jYXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC51bmlmb3JtMWkodGV4TGF5ZXJMb2NhdGlvbiwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC51bmlmb3JtMWkodGV4TWFza0xvY2F0aW9uLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNtYXNrQ2FjaGUgPSBjYWNoZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBvc2VTTWFzayhsYXllciwgbWFzaywgcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gbGF5ZXIud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gbGF5ZXIuaGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNtYXNrQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0U21hc2tHTCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FjaGUgPSBzbWFza0NhY2hlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcyA9IGNhY2hlLmNhbnZhcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbCA9IGNhY2hlLmdsO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wudmlld3BvcnQoMCwgMCwgZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLCBnbC5kcmF3aW5nQnVmZmVySGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLnVuaWZvcm0yZihjYWNoZS5yZXNvbHV0aW9uTG9jYXRpb24sIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5iYWNrZHJvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsLnVuaWZvcm00ZihjYWNoZS5yZXNvbHV0aW9uTG9jYXRpb24sIHByb3BlcnRpZXMuYmFja2Ryb3BbMF0sIHByb3BlcnRpZXMuYmFja2Ryb3BbMV0sIHByb3BlcnRpZXMuYmFja2Ryb3BbMl0sIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbC51bmlmb3JtNGYoY2FjaGUucmVzb2x1dGlvbkxvY2F0aW9uLCAwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGNhY2hlLnN1YnR5cGVMb2NhdGlvbiwgcHJvcGVydGllcy5zdWJ0eXBlID09PSAnTHVtaW5vc2l0eScgPyAxIDogMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IGNyZWF0ZVRleHR1cmUoZ2wsIGxheWVyLCBnbC5URVhUVVJFMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFza1RleHR1cmUgPSBjcmVhdGVUZXh0dXJlKGdsLCBtYXNrLCBnbC5URVhUVVJFMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCB3aWR0aCwgMCwgMCwgaGVpZ2h0LCAwLCBoZWlnaHQsIHdpZHRoLCAwLCB3aWR0aCwgaGVpZ2h0XSksIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGNhY2hlLnBvc2l0aW9uTG9jYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihjYWNoZS5wb3NpdGlvbkxvY2F0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC5ibGVuZEZ1bmMoZ2wuT05FLCBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAsIDYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuZmx1c2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLmRlbGV0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC5kZWxldGVUZXh0dXJlKG1hc2tUZXh0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLmRlbGV0ZUJ1ZmZlcihidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbnZhcztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWd1cmVzVmVydGV4U2hhZGVyQ29kZSA9ICdcXFxuICBhdHRyaWJ1dGUgdmVjMiBhX3Bvc2l0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIGF0dHJpYnV0ZSB2ZWMzIGFfY29sb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB1bmlmb3JtIHZlYzIgdV9yZXNvbHV0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIHVuaWZvcm0gdmVjMiB1X3NjYWxlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgdW5pZm9ybSB2ZWMyIHVfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIHZhcnlpbmcgdmVjNCB2X2NvbG9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB2b2lkIG1haW4oKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgdmVjMiBwb3NpdGlvbiA9IChhX3Bvc2l0aW9uICsgdV9vZmZzZXQpICogdV9zY2FsZTsgICAgICAgICAgXFxcbiAgICB2ZWMyIGNsaXBTcGFjZSA9IChwb3NpdGlvbiAvIHVfcmVzb2x1dGlvbikgKiAyLjAgLSAxLjA7ICAgICBcXFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChjbGlwU3BhY2UgKiB2ZWMyKDEsIC0xKSwgMCwgMSk7ICAgICAgICAgIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICB2X2NvbG9yID0gdmVjNChhX2NvbG9yIC8gMjU1LjAsIDEuMCk7ICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWd1cmVzRnJhZ21lbnRTaGFkZXJDb2RlID0gJ1xcXG4gIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB2YXJ5aW5nIHZlYzQgdl9jb2xvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgdm9pZCBtYWluKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZfY29sb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpZ3VyZXNDYWNoZSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaW5pdEZpZ3VyZXNHTCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW52YXMsIGdsO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVHTCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzID0gY3VycmVudENhbnZhcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDYW52YXMgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wgPSBjdXJyZW50R0w7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50R0wgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnRleFNoYWRlciA9IGNyZWF0ZVZlcnRleFNoYWRlcihnbCwgZmlndXJlc1ZlcnRleFNoYWRlckNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZyYWdtZW50U2hhZGVyID0gY3JlYXRlRnJhZ21lbnRTaGFkZXIoZ2wsIGZpZ3VyZXNGcmFnbWVudFNoYWRlckNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb2dyYW0gPSBjcmVhdGVQcm9ncmFtKGdsLCBbdmVydGV4U2hhZGVyLCBmcmFnbWVudFNoYWRlcl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wudXNlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWNoZSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUuZ2wgPSBnbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLmNhbnZhcyA9IGNhbnZhcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLnJlc29sdXRpb25Mb2NhdGlvbiA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAndV9yZXNvbHV0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5zY2FsZUxvY2F0aW9uID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICd1X3NjYWxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5vZmZzZXRMb2NhdGlvbiA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAndV9vZmZzZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLnBvc2l0aW9uTG9jYXRpb24gPSBnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAnYV9wb3NpdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUuY29sb3JMb2NhdGlvbiA9IGdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sICdhX2NvbG9yJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWd1cmVzQ2FjaGUgPSBjYWNoZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRyYXdGaWd1cmVzKHdpZHRoLCBoZWlnaHQsIGJhY2tncm91bmRDb2xvciwgZmlndXJlcywgY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWd1cmVzQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0RmlndXJlc0dMKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWNoZSA9IGZpZ3VyZXNDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMgPSBjYWNoZS5jYW52YXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2wgPSBjYWNoZS5nbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLnZpZXdwb3J0KDAsIDAsIGdsLmRyYXdpbmdCdWZmZXJXaWR0aCwgZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC51bmlmb3JtMmYoY2FjaGUucmVzb2x1dGlvbkxvY2F0aW9uLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaWksIHJvd3M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gZmlndXJlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChmaWd1cmVzW2ldLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbGF0dGljZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzID0gZmlndXJlc1tpXS5jb29yZHMubGVuZ3RoIC8gZmlndXJlc1tpXS52ZXJ0aWNlc1BlclJvdyB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCArPSAocm93cyAtIDEpICogKGZpZ3VyZXNbaV0udmVydGljZXNQZXJSb3cgLSAxKSAqIDY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd0cmlhbmdsZXMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gZmlndXJlc1tpXS5jb29yZHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29vcmRzID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9ycyA9IG5ldyBVaW50OEFycmF5KGNvdW50ICogMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29vcmRzTWFwID0gY29udGV4dC5jb29yZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzTWFwID0gY29udGV4dC5jb2xvcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcEluZGV4ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjSW5kZXggPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGZpZ3VyZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWd1cmUgPSBmaWd1cmVzW2ldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcyA9IGZpZ3VyZS5jb29yZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzID0gZmlndXJlLmNvbG9ycztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZmlndXJlLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbGF0dGljZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29scyA9IGZpZ3VyZS52ZXJ0aWNlc1BlclJvdztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3MgPSBwcy5sZW5ndGggLyBjb2xzIHwgMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcm93ID0gMTsgcm93IDwgcm93czsgcm93KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gcm93ICogY29scyArIDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjb2wgPSAxOyBjb2wgPCBjb2xzOyBjb2wrKywgb2Zmc2V0KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzW3BJbmRleF0gPSBjb29yZHNNYXBbcHNbb2Zmc2V0IC0gY29scyAtIDFdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzW3BJbmRleCArIDFdID0gY29vcmRzTWFwW3BzW29mZnNldCAtIGNvbHMgLSAxXSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHNbcEluZGV4ICsgMl0gPSBjb29yZHNNYXBbcHNbb2Zmc2V0IC0gY29sc11dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHNbcEluZGV4ICsgM10gPSBjb29yZHNNYXBbcHNbb2Zmc2V0IC0gY29sc10gKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzW3BJbmRleCArIDRdID0gY29vcmRzTWFwW3BzW29mZnNldCAtIDFdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzW3BJbmRleCArIDVdID0gY29vcmRzTWFwW3BzW29mZnNldCAtIDFdICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1tjSW5kZXhdID0gY29sb3JzTWFwW2NzW29mZnNldCAtIGNvbHMgLSAxXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1tjSW5kZXggKyAxXSA9IGNvbG9yc01hcFtjc1tvZmZzZXQgLSBjb2xzIC0gMV0gKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NJbmRleCArIDJdID0gY29sb3JzTWFwW2NzW29mZnNldCAtIGNvbHMgLSAxXSArIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgM10gPSBjb2xvcnNNYXBbY3Nbb2Zmc2V0IC0gY29sc11dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgNF0gPSBjb2xvcnNNYXBbY3Nbb2Zmc2V0IC0gY29sc10gKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NJbmRleCArIDVdID0gY29sb3JzTWFwW2NzW29mZnNldCAtIGNvbHNdICsgMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1tjSW5kZXggKyA2XSA9IGNvbG9yc01hcFtjc1tvZmZzZXQgLSAxXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1tjSW5kZXggKyA3XSA9IGNvbG9yc01hcFtjc1tvZmZzZXQgLSAxXSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgOF0gPSBjb2xvcnNNYXBbY3Nbb2Zmc2V0IC0gMV0gKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzW3BJbmRleCArIDZdID0gY29vcmRzW3BJbmRleCArIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHNbcEluZGV4ICsgN10gPSBjb29yZHNbcEluZGV4ICsgM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3Jkc1twSW5kZXggKyA4XSA9IGNvb3Jkc1twSW5kZXggKyA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzW3BJbmRleCArIDldID0gY29vcmRzW3BJbmRleCArIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHNbcEluZGV4ICsgMTBdID0gY29vcmRzTWFwW3BzW29mZnNldF1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHNbcEluZGV4ICsgMTFdID0gY29vcmRzTWFwW3BzW29mZnNldF0gKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NJbmRleCArIDldID0gY29sb3JzW2NJbmRleCArIDNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgMTBdID0gY29sb3JzW2NJbmRleCArIDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgMTFdID0gY29sb3JzW2NJbmRleCArIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgMTJdID0gY29sb3JzW2NJbmRleCArIDZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgMTNdID0gY29sb3JzW2NJbmRleCArIDddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgMTRdID0gY29sb3JzW2NJbmRleCArIDhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgMTVdID0gY29sb3JzTWFwW2NzW29mZnNldF1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgMTZdID0gY29sb3JzTWFwW2NzW29mZnNldF0gKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NJbmRleCArIDE3XSA9IGNvbG9yc01hcFtjc1tvZmZzZXRdICsgMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBJbmRleCArPSAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY0luZGV4ICs9IDE4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndHJpYW5nbGVzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IHBzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHNbcEluZGV4XSA9IGNvb3Jkc01hcFtwc1tqXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzW3BJbmRleCArIDFdID0gY29vcmRzTWFwW3BzW2pdICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NJbmRleF0gPSBjb2xvcnNNYXBbY3Nbal1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1tjSW5kZXggKyAxXSA9IGNvbG9yc01hcFtjc1tqXSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1tjSW5kZXggKyAyXSA9IGNvbG9yc01hcFtjc1tqXSArIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBJbmRleCArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNJbmRleCArPSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbC5jbGVhckNvbG9yKGJhY2tncm91bmRDb2xvclswXSAvIDI1NSwgYmFja2dyb3VuZENvbG9yWzFdIC8gMjU1LCBiYWNrZ3JvdW5kQ29sb3JbMl0gLyAyNTUsIDEuMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvb3Jkc0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIGNvb3Jkc0J1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgY29vcmRzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShjYWNoZS5wb3NpdGlvbkxvY2F0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoY2FjaGUucG9zaXRpb25Mb2NhdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBjb2xvcnNCdWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIGNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoY2FjaGUuY29sb3JMb2NhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGNhY2hlLmNvbG9yTG9jYXRpb24sIDMsIGdsLlVOU0lHTkVEX0JZVEUsIGZhbHNlLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLnVuaWZvcm0yZihjYWNoZS5zY2FsZUxvY2F0aW9uLCBjb250ZXh0LnNjYWxlWCwgY29udGV4dC5zY2FsZVkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGNhY2hlLm9mZnNldExvY2F0aW9uLCBjb250ZXh0Lm9mZnNldFgsIGNvbnRleHQub2Zmc2V0WSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgY291bnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuZmx1c2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLmRlbGV0ZUJ1ZmZlcihjb29yZHNCdWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuZGVsZXRlQnVmZmVyKGNvbG9yc0J1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FudmFzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeUluaXRHTDogZnVuY3Rpb24gdHJ5SW5pdEdMKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlR0woKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhY3VycmVudEdMO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7fVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2VTTWFzazogY29tcG9zZVNNYXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0ZpZ3VyZXM6IGRyYXdGaWd1cmVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW51cDogZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc21hc2tDYWNoZSAmJiBzbWFza0NhY2hlLmNhbnZhcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFza0NhY2hlLmNhbnZhcy53aWR0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYXNrQ2FjaGUuY2FudmFzLmhlaWdodCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZ3VyZXNDYWNoZSAmJiBmaWd1cmVzQ2FjaGUuY2FudmFzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZ3VyZXNDYWNoZS5jYW52YXMud2lkdGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWd1cmVzQ2FjaGUuY2FudmFzLmhlaWdodCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc21hc2tDYWNoZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlndXJlc0NhY2hlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE2MiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMucmVuZGVyVGV4dExheWVyID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxKTtcblxuICAgICAgICAgICAgICAgIHZhciBfZ2xvYmFsX3Njb3BlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMpKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVuZGVyVGV4dExheWVyID0gZnVuY3Rpb24gcmVuZGVyVGV4dExheWVyQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIE1BWF9URVhUX0RJVlNfVE9fUkVOREVSID0gMTAwMDAwO1xuICAgICAgICAgICAgICAgICAgICB2YXIgTm9uV2hpdGVzcGFjZVJlZ2V4cCA9IC9cXFMvO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzQWxsV2hpdGVzcGFjZShzdHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhTm9uV2hpdGVzcGFjZVJlZ2V4cC50ZXN0KHN0cik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgc3R5bGVCdWYgPSBbJ2xlZnQ6ICcsIDAsICdweDsgdG9wOiAnLCAwLCAncHg7IGZvbnQtc2l6ZTogJywgMCwgJ3B4OyBmb250LWZhbWlseTogJywgJycsICc7J107XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYXBwZW5kVGV4dCh0YXNrLCBnZW9tLCBzdHlsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHREaXZQcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhc1dpZHRoOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzV2hpdGVzcGFjZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxUcmFuc2Zvcm06IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0JvdHRvbTogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ1RvcDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZTogMVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5fdGV4dERpdnMucHVzaCh0ZXh0RGl2KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQWxsV2hpdGVzcGFjZShnZW9tLnN0cikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RGl2UHJvcGVydGllcy5pc1doaXRlc3BhY2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5fdGV4dERpdlByb3BlcnRpZXMuc2V0KHRleHREaXYsIHRleHREaXZQcm9wZXJ0aWVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR4ID0gX3V0aWwuVXRpbC50cmFuc2Zvcm0odGFzay5fdmlld3BvcnQudHJhbnNmb3JtLCBnZW9tLnRyYW5zZm9ybSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbmdsZSA9IE1hdGguYXRhbjIodHhbMV0sIHR4WzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHlsZSA9IHN0eWxlc1tnZW9tLmZvbnROYW1lXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUgKz0gTWF0aC5QSSAvIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250SGVpZ2h0ID0gTWF0aC5zcXJ0KHR4WzJdICogdHhbMl0gKyB0eFszXSAqIHR4WzNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250QXNjZW50ID0gZm9udEhlaWdodDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlLmFzY2VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRBc2NlbnQgPSBzdHlsZS5hc2NlbnQgKiBmb250QXNjZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHlsZS5kZXNjZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udEFzY2VudCA9ICgxICsgc3R5bGUuZGVzY2VudCkgKiBmb250QXNjZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVmdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b3A7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmdsZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSB0eFs0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AgPSB0eFs1XSAtIGZvbnRBc2NlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSB0eFs0XSArIGZvbnRBc2NlbnQgKiBNYXRoLnNpbihhbmdsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wID0gdHhbNV0gLSBmb250QXNjZW50ICogTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZUJ1ZlsxXSA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZUJ1ZlszXSA9IHRvcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQnVmWzVdID0gZm9udEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQnVmWzddID0gc3R5bGUuZm9udEZhbWlseTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHREaXZQcm9wZXJ0aWVzLnN0eWxlID0gc3R5bGVCdWYuam9pbignJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RGl2LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCB0ZXh0RGl2UHJvcGVydGllcy5zdHlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RGl2LnRleHRDb250ZW50ID0gZ2VvbS5zdHI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLl9mb250SW5zcGVjdG9yRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREaXYuZGF0YXNldC5mb250TmFtZSA9IGdlb20uZm9udE5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmdsZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREaXZQcm9wZXJ0aWVzLmFuZ2xlID0gYW5nbGUgKiAoMTgwIC8gTWF0aC5QSSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZW9tLnN0ci5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREaXZQcm9wZXJ0aWVzLmNhbnZhc1dpZHRoID0gZ2VvbS5oZWlnaHQgKiB0YXNrLl92aWV3cG9ydC5zY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RGl2UHJvcGVydGllcy5jYW52YXNXaWR0aCA9IGdlb20ud2lkdGggKiB0YXNrLl92aWV3cG9ydC5zY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suX3RleHREaXZQcm9wZXJ0aWVzLnNldCh0ZXh0RGl2LCB0ZXh0RGl2UHJvcGVydGllcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLl90ZXh0Q29udGVudFN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suX2xheW91dFRleHQodGV4dERpdik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLl9lbmhhbmNlVGV4dFNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbmdsZUNvcyA9IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlU2luID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmdsZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZUNvcyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVTaW4gPSBNYXRoLnNpbihhbmdsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpdldpZHRoID0gKHN0eWxlLnZlcnRpY2FsID8gZ2VvbS5oZWlnaHQgOiBnZW9tLndpZHRoKSAqIHRhc2suX3ZpZXdwb3J0LnNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaXZIZWlnaHQgPSBmb250SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtLCBiO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFuZ2xlICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBbYW5nbGVDb3MsIGFuZ2xlU2luLCAtYW5nbGVTaW4sIGFuZ2xlQ29zLCBsZWZ0LCB0b3BdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gX3V0aWwuVXRpbC5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveChbMCwgMCwgZGl2V2lkdGgsIGRpdkhlaWdodF0sIG0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBbbGVmdCwgdG9wLCBsZWZ0ICsgZGl2V2lkdGgsIHRvcCArIGRpdkhlaWdodF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5fYm91bmRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBiWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGJbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiBiWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b206IGJbM10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdjogdGV4dERpdixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogW2RpdldpZHRoLCBkaXZIZWlnaHRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtOiBtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZW5kZXIodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhc2suX2NhbmNlbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dERpdnMgPSB0YXNrLl90ZXh0RGl2cztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXBhYmlsaXR5ID0gdGFzay5fY2FwYWJpbGl0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0RGl2c0xlbmd0aCA9IHRleHREaXZzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHREaXZzTGVuZ3RoID4gTUFYX1RFWFRfRElWU19UT19SRU5ERVIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLl9yZW5kZXJpbmdEb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGFzay5fdGV4dENvbnRlbnRTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHREaXZzTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5fbGF5b3V0VGV4dCh0ZXh0RGl2c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrLl9yZW5kZXJpbmdEb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZXhwYW5kKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBib3VuZHMgPSB0YXNrLl9ib3VuZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmlld3BvcnQgPSB0YXNrLl92aWV3cG9ydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleHBhbmRlZCA9IGV4cGFuZEJvdW5kcyh2aWV3cG9ydC53aWR0aCwgdmlld3BvcnQuaGVpZ2h0LCBib3VuZHMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGFuZGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGJvdW5kc1tpXS5kaXY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGl2UHJvcGVydGllcyA9IHRhc2suX3RleHREaXZQcm9wZXJ0aWVzLmdldChkaXYpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpdlByb3BlcnRpZXMuYW5nbGUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2UHJvcGVydGllcy5wYWRkaW5nTGVmdCA9IGJvdW5kc1tpXS5sZWZ0IC0gZXhwYW5kZWRbaV0ubGVmdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2UHJvcGVydGllcy5wYWRkaW5nVG9wID0gYm91bmRzW2ldLnRvcCAtIGV4cGFuZGVkW2ldLnRvcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2UHJvcGVydGllcy5wYWRkaW5nUmlnaHQgPSBleHBhbmRlZFtpXS5yaWdodCAtIGJvdW5kc1tpXS5yaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2UHJvcGVydGllcy5wYWRkaW5nQm90dG9tID0gZXhwYW5kZWRbaV0uYm90dG9tIC0gYm91bmRzW2ldLmJvdHRvbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLl90ZXh0RGl2UHJvcGVydGllcy5zZXQoZGl2LCBkaXZQcm9wZXJ0aWVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IGV4cGFuZGVkW2ldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gYm91bmRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtID0gYi5tLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gbVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IG1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvaW50cyA9IFtbMCwgMF0sIFswLCBiLnNpemVbMV1dLCBbYi5zaXplWzBdLCAwXSwgYi5zaXplXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHMgPSBuZXcgRmxvYXQ2NEFycmF5KDY0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMuZm9yRWFjaChmdW5jdGlvbiAocCwgaSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gZnVuY3Rpb24gKHAsIG0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4dCA9IHBbMF0gKiBtWzBdICsgcFsxXSAqIG1bMl0gKyBtWzRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHl0ID0gcFswXSAqIG1bMV0gKyBwWzFdICogbVszXSArIG1bNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3h0LCB5dF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNbaSArIDBdID0gYyAmJiAoZS5sZWZ0IC0gdFswXSkgLyBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c1tpICsgNF0gPSBzICYmIChlLnRvcCAtIHRbMV0pIC8gcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNbaSArIDhdID0gYyAmJiAoZS5yaWdodCAtIHRbMF0pIC8gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNbaSArIDEyXSA9IHMgJiYgKGUuYm90dG9tIC0gdFsxXSkgLyBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c1tpICsgMTZdID0gcyAmJiAoZS5sZWZ0IC0gdFswXSkgLyAtcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNbaSArIDIwXSA9IGMgJiYgKGUudG9wIC0gdFsxXSkgLyBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c1tpICsgMjRdID0gcyAmJiAoZS5yaWdodCAtIHRbMF0pIC8gLXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzW2kgKyAyOF0gPSBjICYmIChlLmJvdHRvbSAtIHRbMV0pIC8gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNbaSArIDMyXSA9IGMgJiYgKGUubGVmdCAtIHRbMF0pIC8gLWM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzW2kgKyAzNl0gPSBzICYmIChlLnRvcCAtIHRbMV0pIC8gLXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzW2kgKyA0MF0gPSBjICYmIChlLnJpZ2h0IC0gdFswXSkgLyAtYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNbaSArIDQ0XSA9IHMgJiYgKGUuYm90dG9tIC0gdFsxXSkgLyAtcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNbaSArIDQ4XSA9IHMgJiYgKGUubGVmdCAtIHRbMF0pIC8gcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNbaSArIDUyXSA9IGMgJiYgKGUudG9wIC0gdFsxXSkgLyAtYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNbaSArIDU2XSA9IHMgJiYgKGUucmlnaHQgLSB0WzBdKSAvIHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzW2kgKyA2MF0gPSBjICYmIChlLmJvdHRvbSAtIHRbMV0pIC8gLWM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmluZFBvc2l0aXZlTWluID0gZnVuY3Rpb24gZmluZFBvc2l0aXZlTWluKHRzLCBvZmZzZXQsIGNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSB0c1tvZmZzZXQrK107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCA/IE1hdGgubWluKHQsIHJlc3VsdCkgOiB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJveFNjYWxlID0gMSArIE1hdGgubWluKE1hdGguYWJzKGMpLCBNYXRoLmFicyhzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2UHJvcGVydGllcy5wYWRkaW5nTGVmdCA9IGZpbmRQb3NpdGl2ZU1pbih0cywgMzIsIDE2KSAvIGJveFNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdlByb3BlcnRpZXMucGFkZGluZ1RvcCA9IGZpbmRQb3NpdGl2ZU1pbih0cywgNDgsIDE2KSAvIGJveFNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdlByb3BlcnRpZXMucGFkZGluZ1JpZ2h0ID0gZmluZFBvc2l0aXZlTWluKHRzLCAwLCAxNikgLyBib3hTY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZQcm9wZXJ0aWVzLnBhZGRpbmdCb3R0b20gPSBmaW5kUG9zaXRpdmVNaW4odHMsIDE2LCAxNikgLyBib3hTY2FsZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suX3RleHREaXZQcm9wZXJ0aWVzLnNldChkaXYsIGRpdlByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZXhwYW5kQm91bmRzKHdpZHRoLCBoZWlnaHQsIGJveGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYm91bmRzID0gYm94ZXMubWFwKGZ1bmN0aW9uIChib3gsIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MTogYm94LmxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxOiBib3gudG9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MjogYm94LnJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MjogYm94LmJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgxTmV3OiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyTmV3OiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRCb3VuZHNMVFIod2lkdGgsIGJvdW5kcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXhwYW5kZWQgPSBuZXcgQXJyYXkoYm94ZXMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy5mb3JFYWNoKGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSBiLmluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkW2ldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBiLngxTmV3LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiBiLngyTmV3LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b206IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3hlcy5tYXAoZnVuY3Rpb24gKGJveCwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gZXhwYW5kZWRbaV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBib3VuZHNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYi54MSA9IGJveC50b3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYi55MSA9IHdpZHRoIC0gZS5yaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLngyID0gYm94LmJvdHRvbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLnkyID0gd2lkdGggLSBlLmxlZnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYi5pbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYi54MU5ldyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLngyTmV3ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRCb3VuZHNMVFIoaGVpZ2h0LCBib3VuZHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzLmZvckVhY2goZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IGIuaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWRbaV0udG9wID0gYi54MU5ldztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZFtpXS5ib3R0b20gPSBiLngyTmV3O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwYW5kZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBleHBhbmRCb3VuZHNMVFIod2lkdGgsIGJvdW5kcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS54MSAtIGIueDEgfHwgYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmYWtlQm91bmRhcnkgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDE6IC1JbmZpbml0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MTogLUluZmluaXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyOiBJbmZpbml0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDFOZXc6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDJOZXc6IDBcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaG9yaXpvbiA9IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IC1JbmZpbml0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IEluZmluaXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5OiBmYWtlQm91bmRhcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzLmZvckVhY2goZnVuY3Rpb24gKGJvdW5kYXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBob3Jpem9uLmxlbmd0aCAmJiBob3Jpem9uW2ldLmVuZCA8PSBib3VuZGFyeS55MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGogPSBob3Jpem9uLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaiA+PSAwICYmIGhvcml6b25bal0uc3RhcnQgPj0gYm91bmRhcnkueTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgai0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBob3Jpem9uUGFydCwgYWZmZWN0ZWRCb3VuZGFyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4WE5ldyA9IC1JbmZpbml0eTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocSA9IGk7IHEgPD0gajsgcSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvcml6b25QYXJ0ID0gaG9yaXpvbltxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZmZWN0ZWRCb3VuZGFyeSA9IGhvcml6b25QYXJ0LmJvdW5kYXJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeE5ldztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWZmZWN0ZWRCb3VuZGFyeS54MiA+IGJvdW5kYXJ5LngxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4TmV3ID0gYWZmZWN0ZWRCb3VuZGFyeS5pbmRleCA+IGJvdW5kYXJ5LmluZGV4ID8gYWZmZWN0ZWRCb3VuZGFyeS54MU5ldyA6IGJvdW5kYXJ5LngxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFmZmVjdGVkQm91bmRhcnkueDJOZXcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeE5ldyA9IChhZmZlY3RlZEJvdW5kYXJ5LngyICsgYm91bmRhcnkueDEpIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhOZXcgPSBhZmZlY3RlZEJvdW5kYXJ5LngyTmV3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhOZXcgPiBtYXhYTmV3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhYTmV3ID0geE5ldztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5LngxTmV3ID0gbWF4WE5ldztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocSA9IGk7IHEgPD0gajsgcSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvcml6b25QYXJ0ID0gaG9yaXpvbltxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZmZWN0ZWRCb3VuZGFyeSA9IGhvcml6b25QYXJ0LmJvdW5kYXJ5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZmZlY3RlZEJvdW5kYXJ5LngyTmV3ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZmZlY3RlZEJvdW5kYXJ5LngyID4gYm91bmRhcnkueDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWZmZWN0ZWRCb3VuZGFyeS5pbmRleCA+IGJvdW5kYXJ5LmluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmZmVjdGVkQm91bmRhcnkueDJOZXcgPSBhZmZlY3RlZEJvdW5kYXJ5LngyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyA9IG1heFhOZXc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyA+IG1heFhOZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmZmVjdGVkQm91bmRhcnkueDJOZXcgPSBNYXRoLm1heChtYXhYTmV3LCBhZmZlY3RlZEJvdW5kYXJ5LngyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFuZ2VkSG9yaXpvbiA9IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Qm91bmRhcnkgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChxID0gaTsgcSA8PSBqOyBxKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9yaXpvblBhcnQgPSBob3Jpem9uW3FdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmZlY3RlZEJvdW5kYXJ5ID0gaG9yaXpvblBhcnQuYm91bmRhcnk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1c2VCb3VuZGFyeSA9IGFmZmVjdGVkQm91bmRhcnkueDIgPiBib3VuZGFyeS54MiA/IGFmZmVjdGVkQm91bmRhcnkgOiBib3VuZGFyeTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEJvdW5kYXJ5ID09PSB1c2VCb3VuZGFyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZEhvcml6b25bY2hhbmdlZEhvcml6b24ubGVuZ3RoIC0gMV0uZW5kID0gaG9yaXpvblBhcnQuZW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZEhvcml6b24ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGhvcml6b25QYXJ0LnN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogaG9yaXpvblBhcnQuZW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5OiB1c2VCb3VuZGFyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Qm91bmRhcnkgPSB1c2VCb3VuZGFyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChob3Jpem9uW2ldLnN0YXJ0IDwgYm91bmRhcnkueTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZEhvcml6b25bMF0uc3RhcnQgPSBib3VuZGFyeS55MTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZEhvcml6b24udW5zaGlmdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogaG9yaXpvbltpXS5zdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogYm91bmRhcnkueTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeTogaG9yaXpvbltpXS5ib3VuZGFyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm91bmRhcnkueTIgPCBob3Jpem9uW2pdLmVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkSG9yaXpvbltjaGFuZ2VkSG9yaXpvbi5sZW5ndGggLSAxXS5lbmQgPSBib3VuZGFyeS55MjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZEhvcml6b24ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogYm91bmRhcnkueTIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IGhvcml6b25bal0uZW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnk6IGhvcml6b25bal0uYm91bmRhcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChxID0gaTsgcSA8PSBqOyBxKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9yaXpvblBhcnQgPSBob3Jpem9uW3FdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmZlY3RlZEJvdW5kYXJ5ID0gaG9yaXpvblBhcnQuYm91bmRhcnk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFmZmVjdGVkQm91bmRhcnkueDJOZXcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXNlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IGkgLSAxOyAhdXNlZCAmJiBrID49IDAgJiYgaG9yaXpvbltrXS5zdGFydCA+PSBhZmZlY3RlZEJvdW5kYXJ5LnkxOyBrLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgPSBob3Jpem9uW2tdLmJvdW5kYXJ5ID09PSBhZmZlY3RlZEJvdW5kYXJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gaiArIDE7ICF1c2VkICYmIGsgPCBob3Jpem9uLmxlbmd0aCAmJiBob3Jpem9uW2tdLmVuZCA8PSBhZmZlY3RlZEJvdW5kYXJ5LnkyOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgPSBob3Jpem9uW2tdLmJvdW5kYXJ5ID09PSBhZmZlY3RlZEJvdW5kYXJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgIXVzZWQgJiYgayA8IGNoYW5nZWRIb3Jpem9uLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkID0gY2hhbmdlZEhvcml6b25ba10uYm91bmRhcnkgPT09IGFmZmVjdGVkQm91bmRhcnk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmZmVjdGVkQm91bmRhcnkueDJOZXcgPSBtYXhYTmV3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShob3Jpem9uLCBbaSwgaiAtIGkgKyAxXS5jb25jYXQoY2hhbmdlZEhvcml6b24pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaG9yaXpvbi5mb3JFYWNoKGZ1bmN0aW9uIChob3Jpem9uUGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhZmZlY3RlZEJvdW5kYXJ5ID0gaG9yaXpvblBhcnQuYm91bmRhcnk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmZmVjdGVkQm91bmRhcnkueDJOZXcgPSBNYXRoLm1heCh3aWR0aCwgYWZmZWN0ZWRCb3VuZGFyeS54Mik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUZXh0TGF5ZXJSZW5kZXJUYXNrKF9yZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Q29udGVudCA9IF9yZWYudGV4dENvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRTdHJlYW0gPSBfcmVmLnRleHRDb250ZW50U3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9IF9yZWYuY29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdwb3J0ID0gX3JlZi52aWV3cG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RGl2cyA9IF9yZWYudGV4dERpdnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRJdGVtc1N0ciA9IF9yZWYudGV4dENvbnRlbnRJdGVtc1N0cixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmhhbmNlVGV4dFNlbGVjdGlvbiA9IF9yZWYuZW5oYW5jZVRleHRTZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0Q29udGVudCA9IHRleHRDb250ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dENvbnRlbnRTdHJlYW0gPSB0ZXh0Q29udGVudFN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IGNvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZpZXdwb3J0ID0gdmlld3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0RGl2cyA9IHRleHREaXZzIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dENvbnRlbnRJdGVtc1N0ciA9IHRleHRDb250ZW50SXRlbXNTdHIgfHwgW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbmhhbmNlVGV4dFNlbGVjdGlvbiA9ICEhZW5oYW5jZVRleHRTZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb250SW5zcGVjdG9yRW5hYmxlZCA9ICEhKF9nbG9iYWxfc2NvcGUuZGVmYXVsdC5Gb250SW5zcGVjdG9yICYmIF9nbG9iYWxfc2NvcGUuZGVmYXVsdC5Gb250SW5zcGVjdG9yLmVuYWJsZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xheW91dFRleHRMYXN0Rm9udFNpemUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGF5b3V0VGV4dExhc3RGb250RmFtaWx5ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xheW91dFRleHRDdHggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dERpdlByb3BlcnRpZXMgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyaW5nRG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FuY2VsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJUaW1lciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ib3VuZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFRleHRMYXllclJlbmRlclRhc2sucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IHByb21pc2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbDogZnVuY3Rpb24gVGV4dExheWVyX2NhbmNlbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRlci5jYW5jZWwobmV3IF91dGlsLkFib3J0RXhjZXB0aW9uKCd0ZXh0IGxheWVyIHRhc2sgY2FuY2VsbGVkJykpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FuY2VsZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JlbmRlclRpbWVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZW5kZXJUaW1lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlclRpbWVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYXBhYmlsaXR5LnJlamVjdCgnY2FuY2VsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBfcHJvY2Vzc0l0ZW1zOiBmdW5jdGlvbiBfcHJvY2Vzc0l0ZW1zKGl0ZW1zLCBzdHlsZUNhY2hlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHRDb250ZW50SXRlbXNTdHIucHVzaChpdGVtc1tpXS5zdHIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRleHQodGhpcywgaXRlbXNbaV0sIHN0eWxlQ2FjaGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBfbGF5b3V0VGV4dDogZnVuY3Rpb24gX2xheW91dFRleHQodGV4dERpdikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0TGF5ZXJGcmFnID0gdGhpcy5fY29udGFpbmVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHREaXZQcm9wZXJ0aWVzID0gdGhpcy5fdGV4dERpdlByb3BlcnRpZXMuZ2V0KHRleHREaXYpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHREaXZQcm9wZXJ0aWVzLmlzV2hpdGVzcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnRTaXplID0gdGV4dERpdi5zdHlsZS5mb250U2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udEZhbWlseSA9IHRleHREaXYuc3R5bGUuZm9udEZhbWlseTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250U2l6ZSAhPT0gdGhpcy5fbGF5b3V0VGV4dExhc3RGb250U2l6ZSB8fCBmb250RmFtaWx5ICE9PSB0aGlzLl9sYXlvdXRUZXh0TGFzdEZvbnRGYW1pbHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGF5b3V0VGV4dEN0eC5mb250ID0gZm9udFNpemUgKyAnICcgKyBmb250RmFtaWx5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYXlvdXRUZXh0TGFzdEZvbnRTaXplID0gZm9udFNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xheW91dFRleHRMYXN0Rm9udEZhbWlseSA9IGZvbnRGYW1pbHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5fbGF5b3V0VGV4dEN0eC5tZWFzdXJlVGV4dCh0ZXh0RGl2LnRleHRDb250ZW50KS53aWR0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc2Zvcm0gPSAnJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0RGl2UHJvcGVydGllcy5jYW52YXNXaWR0aCAhPT0gMCAmJiB3aWR0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dERpdlByb3BlcnRpZXMuc2NhbGUgPSB0ZXh0RGl2UHJvcGVydGllcy5jYW52YXNXaWR0aCAvIHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0gPSBcInNjYWxlWChcIi5jb25jYXQodGV4dERpdlByb3BlcnRpZXMuc2NhbGUsIFwiKVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dERpdlByb3BlcnRpZXMuYW5nbGUgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtID0gXCJyb3RhdGUoXCIuY29uY2F0KHRleHREaXZQcm9wZXJ0aWVzLmFuZ2xlLCBcImRlZykgXCIpLmNvbmNhdCh0cmFuc2Zvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RGl2UHJvcGVydGllcy5vcmlnaW5hbFRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dERpdi5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dERpdlByb3BlcnRpZXMuc2V0KHRleHREaXYsIHRleHREaXZQcm9wZXJ0aWVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRMYXllckZyYWcuYXBwZW5kQ2hpbGQodGV4dERpdik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgX3JlbmRlcjogZnVuY3Rpb24gVGV4dExheWVyX3JlbmRlcih0aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHlsZUNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzLm1vek9wYXF1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGF5b3V0VGV4dEN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGE6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGV4dENvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRJdGVtcyA9IHRoaXMuX3RleHRDb250ZW50Lml0ZW1zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dFN0eWxlcyA9IHRoaXMuX3RleHRDb250ZW50LnN0eWxlcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzSXRlbXModGV4dEl0ZW1zLCB0ZXh0U3R5bGVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3RleHRDb250ZW50U3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwdW1wID0gZnVuY3Rpb24gcHVtcCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9yZWFkZXIucmVhZCgpLnRoZW4oZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gX3JlZjIudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBfcmVmMi5kb25lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHN0eWxlQ2FjaGUsIHZhbHVlLnN0eWxlcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcHJvY2Vzc0l0ZW1zKHZhbHVlLml0ZW1zLCBzdHlsZUNhY2hlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNhcGFiaWxpdHkucmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkZXIgPSB0aGlzLl90ZXh0Q29udGVudFN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVtcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTmVpdGhlciBcInRleHRDb250ZW50XCIgbm9yIFwidGV4dENvbnRlbnRTdHJlYW1cIicgKyAnIHBhcmFtZXRlcnMgc3BlY2lmaWVkLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcGFiaWxpdHkucHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVDYWNoZSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXIoX3RoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3JlbmRlclRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyKF90aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcmVuZGVyVGltZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGltZW91dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLl9jYXBhYmlsaXR5LnJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kVGV4dERpdnM6IGZ1bmN0aW9uIFRleHRMYXllcl9leHBhbmRUZXh0RGl2cyhleHBhbmREaXZzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9lbmhhbmNlVGV4dFNlbGVjdGlvbiB8fCAhdGhpcy5fcmVuZGVyaW5nRG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2JvdW5kcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JvdW5kcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5fdGV4dERpdnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gdGhpcy5fdGV4dERpdnNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpdlByb3BlcnRpZXMgPSB0aGlzLl90ZXh0RGl2UHJvcGVydGllcy5nZXQoZGl2KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGl2UHJvcGVydGllcy5pc1doaXRlc3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGFuZERpdnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc2Zvcm0gPSAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nID0gJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXZQcm9wZXJ0aWVzLnNjYWxlICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtID0gJ3NjYWxlWCgnICsgZGl2UHJvcGVydGllcy5zY2FsZSArICcpJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpdlByb3BlcnRpZXMuYW5nbGUgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0gPSAncm90YXRlKCcgKyBkaXZQcm9wZXJ0aWVzLmFuZ2xlICsgJ2RlZykgJyArIHRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpdlByb3BlcnRpZXMucGFkZGluZ0xlZnQgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nICs9ICcgcGFkZGluZy1sZWZ0OiAnICsgZGl2UHJvcGVydGllcy5wYWRkaW5nTGVmdCAvIGRpdlByb3BlcnRpZXMuc2NhbGUgKyAncHg7JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0gKz0gJyB0cmFuc2xhdGVYKCcgKyAtZGl2UHJvcGVydGllcy5wYWRkaW5nTGVmdCAvIGRpdlByb3BlcnRpZXMuc2NhbGUgKyAncHgpJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpdlByb3BlcnRpZXMucGFkZGluZ1RvcCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmcgKz0gJyBwYWRkaW5nLXRvcDogJyArIGRpdlByb3BlcnRpZXMucGFkZGluZ1RvcCArICdweDsnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSArPSAnIHRyYW5zbGF0ZVkoJyArIC1kaXZQcm9wZXJ0aWVzLnBhZGRpbmdUb3AgKyAncHgpJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpdlByb3BlcnRpZXMucGFkZGluZ1JpZ2h0ICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZyArPSAnIHBhZGRpbmctcmlnaHQ6ICcgKyBkaXZQcm9wZXJ0aWVzLnBhZGRpbmdSaWdodCAvIGRpdlByb3BlcnRpZXMuc2NhbGUgKyAncHg7JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpdlByb3BlcnRpZXMucGFkZGluZ0JvdHRvbSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmcgKz0gJyBwYWRkaW5nLWJvdHRvbTogJyArIGRpdlByb3BlcnRpZXMucGFkZGluZ0JvdHRvbSArICdweDsnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFkZGluZyAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdzdHlsZScsIGRpdlByb3BlcnRpZXMuc3R5bGUgKyBwYWRkaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXYuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LnN0eWxlLnBhZGRpbmcgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LnN0eWxlLnRyYW5zZm9ybSA9IGRpdlByb3BlcnRpZXMub3JpZ2luYWxUcmFuc2Zvcm0gfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVuZGVyVGV4dExheWVyKHJlbmRlclBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gbmV3IFRleHRMYXllclJlbmRlclRhc2soe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50OiByZW5kZXJQYXJhbWV0ZXJzLnRleHRDb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50U3RyZWFtOiByZW5kZXJQYXJhbWV0ZXJzLnRleHRDb250ZW50U3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogcmVuZGVyUGFyYW1ldGVycy5jb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld3BvcnQ6IHJlbmRlclBhcmFtZXRlcnMudmlld3BvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dERpdnM6IHJlbmRlclBhcmFtZXRlcnMudGV4dERpdnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRJdGVtc1N0cjogcmVuZGVyUGFyYW1ldGVycy50ZXh0Q29udGVudEl0ZW1zU3RyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuaGFuY2VUZXh0U2VsZWN0aW9uOiByZW5kZXJQYXJhbWV0ZXJzLmVuaGFuY2VUZXh0U2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5fcmVuZGVyKHJlbmRlclBhcmFtZXRlcnMudGltZW91dCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlclRleHRMYXllcjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLnJlbmRlclRleHRMYXllciA9IHJlbmRlclRleHRMYXllcjtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTYzICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Bbm5vdGF0aW9uTGF5ZXIgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2RvbV91dGlscyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTUxKTtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMSk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IGlmICh0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBSZWZsZWN0LmdldCkgeyBfZ2V0ID0gUmVmbGVjdC5nZXQ7IH0gZWxzZSB7IF9nZXQgPSBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IHZhciBiYXNlID0gX3N1cGVyUHJvcEJhc2UodGFyZ2V0LCBwcm9wZXJ0eSk7IGlmICghYmFzZSkgcmV0dXJuOyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZSwgcHJvcGVydHkpOyBpZiAoZGVzYy5nZXQpIHsgcmV0dXJuIGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpOyB9IHJldHVybiBkZXNjLnZhbHVlOyB9OyB9IHJldHVybiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyIHx8IHRhcmdldCk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHsgd2hpbGUgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkpIHsgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrOyB9IHJldHVybiBvYmplY3Q7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgQW5ub3RhdGlvbkVsZW1lbnRGYWN0b3J5ID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBbm5vdGF0aW9uRWxlbWVudEZhY3RvcnkoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEFubm90YXRpb25FbGVtZW50RmFjdG9yeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhBbm5vdGF0aW9uRWxlbWVudEZhY3RvcnksIG51bGwsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNyZWF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjcmVhdGUocGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VidHlwZSA9IHBhcmFtZXRlcnMuZGF0YS5hbm5vdGF0aW9uVHlwZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN1YnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuTElOSzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExpbmtBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5URVhUOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVGV4dEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLldJREdFVDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmllbGRUeXBlID0gcGFyYW1ldGVycy5kYXRhLmZpZWxkVHlwZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZmllbGRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1R4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVGV4dFdpZGdldEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0J0bic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVycy5kYXRhLnJhZGlvQnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSYWRpb0J1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbWV0ZXJzLmRhdGEuY2hlY2tCb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENoZWNrYm94V2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHVzaEJ1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NoJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXaWRnZXRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5QT1BVUDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBvcHVwQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuTElORTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExpbmVBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5TUVVBUkU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTcXVhcmVBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5DSVJDTEU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDaXJjbGVBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5QT0xZTElORTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBvbHlsaW5lQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuSU5LOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSW5rQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuUE9MWUdPTjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBvbHlnb25Bbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5ISUdITElHSFQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBIaWdobGlnaHRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5VTkRFUkxJTkU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVbmRlcmxpbmVBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5TUVVJR0dMWTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNxdWlnZ2x5QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuU1RSSUtFT1VUOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaWtlT3V0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuU1RBTVA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFtcEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLkZJTEVBVFRBQ0hNRU5UOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQW5ub3RhdGlvbkVsZW1lbnRGYWN0b3J5O1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgQW5ub3RhdGlvbkVsZW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNSZW5kZXJhYmxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWdub3JlQm9yZGVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUmVuZGVyYWJsZSA9IGlzUmVuZGVyYWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBwYXJhbWV0ZXJzLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXllciA9IHBhcmFtZXRlcnMubGF5ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlID0gcGFyYW1ldGVycy5wYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld3BvcnQgPSBwYXJhbWV0ZXJzLnZpZXdwb3J0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGlua1NlcnZpY2UgPSBwYXJhbWV0ZXJzLmxpbmtTZXJ2aWNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRNYW5hZ2VyID0gcGFyYW1ldGVycy5kb3dubG9hZE1hbmFnZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZVJlc291cmNlc1BhdGggPSBwYXJhbWV0ZXJzLmltYWdlUmVzb3VyY2VzUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckludGVyYWN0aXZlRm9ybXMgPSBwYXJhbWV0ZXJzLnJlbmRlckludGVyYWN0aXZlRm9ybXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdmdGYWN0b3J5ID0gcGFyYW1ldGVycy5zdmdGYWN0b3J5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVuZGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lciA9IHRoaXMuX2NyZWF0ZUNvbnRhaW5lcihpZ25vcmVCb3JkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKEFubm90YXRpb25FbGVtZW50LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfY3JlYXRlQ29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9jcmVhdGVDb250YWluZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpZ25vcmVCb3JkZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UgPSB0aGlzLnBhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWN0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGRhdGEucmVjdFsyXSAtIGRhdGEucmVjdFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IGRhdGEucmVjdFszXSAtIGRhdGEucmVjdFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnZGF0YS1hbm5vdGF0aW9uLWlkJywgZGF0YS5pZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBfdXRpbC5VdGlsLm5vcm1hbGl6ZVJlY3QoW2RhdGEucmVjdFswXSwgcGFnZS52aWV3WzNdIC0gZGF0YS5yZWN0WzFdICsgcGFnZS52aWV3WzFdLCBkYXRhLnJlY3RbMl0sIHBhZ2Uudmlld1szXSAtIGRhdGEucmVjdFszXSArIHBhZ2Uudmlld1sxXV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm0gPSAnbWF0cml4KCcgKyB2aWV3cG9ydC50cmFuc2Zvcm0uam9pbignLCcpICsgJyknO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gLXJlY3RbMF0gKyAncHggJyArIC1yZWN0WzFdICsgJ3B4JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlnbm9yZUJvcmRlciAmJiBkYXRhLmJvcmRlclN0eWxlLndpZHRoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmJvcmRlcldpZHRoID0gZGF0YS5ib3JkZXJTdHlsZS53aWR0aCArICdweCc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmJvcmRlclN0eWxlLnN0eWxlICE9PSBfdXRpbC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlVOREVSTElORSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gd2lkdGggLSAyICogZGF0YS5ib3JkZXJTdHlsZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSBoZWlnaHQgLSAyICogZGF0YS5ib3JkZXJTdHlsZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhvcml6b250YWxSYWRpdXMgPSBkYXRhLmJvcmRlclN0eWxlLmhvcml6b250YWxDb3JuZXJSYWRpdXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmVydGljYWxSYWRpdXMgPSBkYXRhLmJvcmRlclN0eWxlLnZlcnRpY2FsQ29ybmVyUmFkaXVzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaG9yaXpvbnRhbFJhZGl1cyA+IDAgfHwgdmVydGljYWxSYWRpdXMgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhZGl1cyA9IGhvcml6b250YWxSYWRpdXMgKyAncHggLyAnICsgdmVydGljYWxSYWRpdXMgKyAncHgnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5ib3JkZXJSYWRpdXMgPSByYWRpdXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YS5ib3JkZXJTdHlsZS5zdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5TT0xJRDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmJvcmRlclN0eWxlID0gJ3NvbGlkJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuREFTSEVEOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUuYm9yZGVyU3R5bGUgPSAnZGFzaGVkJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuQkVWRUxFRDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbmltcGxlbWVudGVkIGJvcmRlciBzdHlsZTogYmV2ZWxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5JTlNFVDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbmltcGxlbWVudGVkIGJvcmRlciBzdHlsZTogaW5zZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuVU5ERVJMSU5FOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUuYm9yZGVyQm90dG9tU3R5bGUgPSAnc29saWQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jb2xvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5ib3JkZXJDb2xvciA9IF91dGlsLlV0aWwubWFrZUNzc1JnYihkYXRhLmNvbG9yWzBdIHwgMCwgZGF0YS5jb2xvclsxXSB8IDAsIGRhdGEuY29sb3JbMl0gfCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmJvcmRlcldpZHRoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gcmVjdFswXSArICdweCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS50b3AgPSByZWN0WzFdICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9jcmVhdGVQb3B1cFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfY3JlYXRlUG9wdXAoY29udGFpbmVyLCB0cmlnZ2VyLCBkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHJpZ2dlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlci5zdHlsZS5oZWlnaHQgPSBjb250YWluZXIuc3R5bGUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlci5zdHlsZS53aWR0aCA9IGNvbnRhaW5lci5zdHlsZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0cmlnZ2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3B1cEVsZW1lbnQgPSBuZXcgUG9wdXBFbGVtZW50KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcjogdHJpZ2dlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBkYXRhLmNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50czogZGF0YS5jb250ZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVXcmFwcGVyOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9wdXAgPSBwb3B1cEVsZW1lbnQucmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwLnN0eWxlLmxlZnQgPSBjb250YWluZXIuc3R5bGUud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChwb3B1cCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKCdBYnN0cmFjdCBtZXRob2QgYEFubm90YXRpb25FbGVtZW50LnJlbmRlcmAgY2FsbGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQW5ub3RhdGlvbkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIHZhciBMaW5rQW5ub3RhdGlvbkVsZW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQW5ub3RhdGlvbkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhMaW5rQW5ub3RhdGlvbkVsZW1lbnQsIF9Bbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIExpbmtBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExpbmtBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLnVybCB8fCBwYXJhbWV0ZXJzLmRhdGEuZGVzdCB8fCBwYXJhbWV0ZXJzLmRhdGEuYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKExpbmtBbm5vdGF0aW9uRWxlbWVudCkuY2FsbCh0aGlzLCBwYXJhbWV0ZXJzLCBpc1JlbmRlcmFibGUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKExpbmtBbm5vdGF0aW9uRWxlbWVudCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gJ2xpbmtBbm5vdGF0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rU2VydmljZSA9IHRoaXMubGlua1NlcnZpY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX2RvbV91dGlscy5hZGRMaW5rQXR0cmlidXRlcykobGluaywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBkYXRhLnVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogZGF0YS5uZXdXaW5kb3cgPyBfZG9tX3V0aWxzLkxpbmtUYXJnZXQuQkxBTksgOiBsaW5rU2VydmljZS5leHRlcm5hbExpbmtUYXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWw6IGxpbmtTZXJ2aWNlLmV4dGVybmFsTGlua1JlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGEudXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5hY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9iaW5kTmFtZWRBY3Rpb24obGluaywgZGF0YS5hY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9iaW5kTGluayhsaW5rLCBkYXRhLmRlc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9iaW5kTGlua1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfYmluZExpbmsobGluaywgZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rLmhyZWYgPSB0aGlzLmxpbmtTZXJ2aWNlLmdldERlc3RpbmF0aW9uSGFzaChkZXN0aW5hdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluay5vbmNsaWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMubGlua1NlcnZpY2UubmF2aWdhdGVUbyhkZXN0aW5hdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsuY2xhc3NOYW1lID0gJ2ludGVybmFsTGluayc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9iaW5kTmFtZWRBY3Rpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2JpbmROYW1lZEFjdGlvbihsaW5rLCBhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluay5ocmVmID0gdGhpcy5saW5rU2VydmljZS5nZXRBbmNob3JVcmwoJycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsub25jbGljayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5saW5rU2VydmljZS5leGVjdXRlTmFtZWRBY3Rpb24oYWN0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsuY2xhc3NOYW1lID0gJ2ludGVybmFsTGluayc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTGlua0Fubm90YXRpb25FbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICB9KEFubm90YXRpb25FbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIHZhciBUZXh0QW5ub3RhdGlvbkVsZW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQW5ub3RhdGlvbkVsZW1lbnQyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoVGV4dEFubm90YXRpb25FbGVtZW50LCBfQW5ub3RhdGlvbkVsZW1lbnQyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVGV4dEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVGV4dEFubm90YXRpb25FbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc1JlbmRlcmFibGUgPSAhIShwYXJhbWV0ZXJzLmRhdGEuaGFzUG9wdXAgfHwgcGFyYW1ldGVycy5kYXRhLnRpdGxlIHx8IHBhcmFtZXRlcnMuZGF0YS5jb250ZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihUZXh0QW5ub3RhdGlvbkVsZW1lbnQpLmNhbGwodGhpcywgcGFyYW1ldGVycywgaXNSZW5kZXJhYmxlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhUZXh0QW5ub3RhdGlvbkVsZW1lbnQsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9ICd0ZXh0QW5ub3RhdGlvbic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZS5zdHlsZS5oZWlnaHQgPSB0aGlzLmNvbnRhaW5lci5zdHlsZS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLnN0eWxlLndpZHRoID0gdGhpcy5jb250YWluZXIuc3R5bGUud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLnNyYyA9IHRoaXMuaW1hZ2VSZXNvdXJjZXNQYXRoICsgJ2Fubm90YXRpb24tJyArIHRoaXMuZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkgKyAnLnN2Zyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLmFsdCA9ICdbe3t0eXBlfX0gQW5ub3RhdGlvbl0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZS5kYXRhc2V0LmwxMG5JZCA9ICd0ZXh0X2Fubm90YXRpb25fdHlwZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLmRhdGFzZXQubDEwbkFyZ3MgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLmRhdGEubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YS5oYXNQb3B1cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIsIGltYWdlLCB0aGlzLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoaW1hZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dEFubm90YXRpb25FbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICB9KEFubm90YXRpb25FbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIHZhciBXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Bbm5vdGF0aW9uRWxlbWVudDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCwgX0Fubm90YXRpb25FbGVtZW50Myk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdpZGdldEFubm90YXRpb25FbGVtZW50KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFdpZGdldEFubm90YXRpb25FbGVtZW50KS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFdpZGdldEFubm90YXRpb25FbGVtZW50LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFRleHRXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9XaWRnZXRBbm5vdGF0aW9uRWxlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFRleHRXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCwgX1dpZGdldEFubm90YXRpb25FbGVtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVGV4dFdpZGdldEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVGV4dFdpZGdldEFubm90YXRpb25FbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc1JlbmRlcmFibGUgPSBwYXJhbWV0ZXJzLnJlbmRlckludGVyYWN0aXZlRm9ybXMgfHwgIXBhcmFtZXRlcnMuZGF0YS5oYXNBcHBlYXJhbmNlICYmICEhcGFyYW1ldGVycy5kYXRhLmZpZWxkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihUZXh0V2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQpLmNhbGwodGhpcywgcGFyYW1ldGVycywgaXNSZW5kZXJhYmxlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhUZXh0V2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBURVhUX0FMSUdOTUVOVCA9IFsnbGVmdCcsICdjZW50ZXInLCAncmlnaHQnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gJ3RleHRXaWRnZXRBbm5vdGF0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlbmRlckludGVyYWN0aXZlRm9ybXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGEubXVsdGlMaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMuZGF0YS5maWVsZFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnR5cGUgPSAndGV4dCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgdGhpcy5kYXRhLmZpZWxkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmRpc2FibGVkID0gdGhpcy5kYXRhLnJlYWRPbmx5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhLm1heExlbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubWF4TGVuZ3RoID0gdGhpcy5kYXRhLm1heExlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5jb21iKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkV2lkdGggPSB0aGlzLmRhdGEucmVjdFsyXSAtIHRoaXMuZGF0YS5yZWN0WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21iV2lkdGggPSBmaWVsZFdpZHRoIC8gdGhpcy5kYXRhLm1heExlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2NvbWInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLmxldHRlclNwYWNpbmcgPSAnY2FsYygnICsgY29tYldpZHRoICsgJ3B4IC0gMWNoKSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnRleHRDb250ZW50ID0gdGhpcy5kYXRhLmZpZWxkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLnZlcnRpY2FsQWxpZ24gPSAnbWlkZGxlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICd0YWJsZS1jZWxsJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250ID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5mb250UmVmTmFtZSAmJiB0aGlzLnBhZ2UuY29tbW9uT2Jqcy5oYXModGhpcy5kYXRhLmZvbnRSZWZOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSB0aGlzLnBhZ2UuY29tbW9uT2Jqcy5nZXQodGhpcy5kYXRhLmZvbnRSZWZOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0VGV4dFN0eWxlKGVsZW1lbnQsIGZvbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS50ZXh0QWxpZ25tZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLnRleHRBbGlnbiA9IFRFWFRfQUxJR05NRU5UW3RoaXMuZGF0YS50ZXh0QWxpZ25tZW50XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfc2V0VGV4dFN0eWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9zZXRUZXh0U3R5bGUoZWxlbWVudCwgZm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3R5bGUgPSBlbGVtZW50LnN0eWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5mb250U2l6ZSA9IHRoaXMuZGF0YS5mb250U2l6ZSArICdweCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLmRpcmVjdGlvbiA9IHRoaXMuZGF0YS5mb250RGlyZWN0aW9uIDwgMCA/ICdydGwnIDogJ2x0cic7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb250KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5mb250V2VpZ2h0ID0gZm9udC5ibGFjayA/IGZvbnQuYm9sZCA/ICc5MDAnIDogJ2JvbGQnIDogZm9udC5ib2xkID8gJ2JvbGQnIDogJ25vcm1hbCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLmZvbnRTdHlsZSA9IGZvbnQuaXRhbGljID8gJ2l0YWxpYycgOiAnbm9ybWFsJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnRGYW1pbHkgPSBmb250LmxvYWRlZE5hbWUgPyAnXCInICsgZm9udC5sb2FkZWROYW1lICsgJ1wiLCAnIDogJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmYWxsYmFja05hbWUgPSBmb250LmZhbGxiYWNrTmFtZSB8fCAnSGVsdmV0aWNhLCBzYW5zLXNlcmlmJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUuZm9udEZhbWlseSA9IGZvbnRGYW1pbHkgKyBmYWxsYmFja05hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFdpZGdldEFubm90YXRpb25FbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICB9KFdpZGdldEFubm90YXRpb25FbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIHZhciBDaGVja2JveFdpZGdldEFubm90YXRpb25FbGVtZW50ID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX1dpZGdldEFubm90YXRpb25FbGVtMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKENoZWNrYm94V2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQsIF9XaWRnZXRBbm5vdGF0aW9uRWxlbTIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBDaGVja2JveFdpZGdldEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ2hlY2tib3hXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKENoZWNrYm94V2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQpLmNhbGwodGhpcywgcGFyYW1ldGVycywgcGFyYW1ldGVycy5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhDaGVja2JveFdpZGdldEFubm90YXRpb25FbGVtZW50LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSAnYnV0dG9uV2lkZ2V0QW5ub3RhdGlvbiBjaGVja0JveCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5kaXNhYmxlZCA9IHRoaXMuZGF0YS5yZWFkT25seTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50eXBlID0gJ2NoZWNrYm94JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhLmZpZWxkVmFsdWUgJiYgdGhpcy5kYXRhLmZpZWxkVmFsdWUgIT09ICdPZmYnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2hlY2tlZCcsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDaGVja2JveFdpZGdldEFubm90YXRpb25FbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICB9KFdpZGdldEFubm90YXRpb25FbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIHZhciBSYWRpb0J1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50ID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX1dpZGdldEFubm90YXRpb25FbGVtMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFJhZGlvQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQsIF9XaWRnZXRBbm5vdGF0aW9uRWxlbTMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSYWRpb0J1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUmFkaW9CdXR0b25XaWRnZXRBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFJhZGlvQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQpLmNhbGwodGhpcywgcGFyYW1ldGVycywgcGFyYW1ldGVycy5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhSYWRpb0J1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSAnYnV0dG9uV2lkZ2V0QW5ub3RhdGlvbiByYWRpb0J1dHRvbic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5kaXNhYmxlZCA9IHRoaXMuZGF0YS5yZWFkT25seTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50eXBlID0gJ3JhZGlvJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5uYW1lID0gdGhpcy5kYXRhLmZpZWxkTmFtZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhLmZpZWxkVmFsdWUgPT09IHRoaXMuZGF0YS5idXR0b25WYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NoZWNrZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmFkaW9CdXR0b25XaWRnZXRBbm5vdGF0aW9uRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgfShXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgUHVzaEJ1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50ID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0xpbmtBbm5vdGF0aW9uRWxlbWVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoUHVzaEJ1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50LCBfTGlua0Fubm90YXRpb25FbGVtZW4pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQdXNoQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFB1c2hCdXR0b25XaWRnZXRBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFB1c2hCdXR0b25XaWRnZXRBbm5vdGF0aW9uRWxlbWVudCkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhQdXNoQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBfZ2V0KF9nZXRQcm90b3R5cGVPZihQdXNoQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQucHJvdG90eXBlKSwgXCJyZW5kZXJcIiwgdGhpcykuY2FsbCh0aGlzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuY2xhc3NOYW1lID0gJ2J1dHRvbldpZGdldEFubm90YXRpb24gcHVzaEJ1dHRvbic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHVzaEJ1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICB9KExpbmtBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfV2lkZ2V0QW5ub3RhdGlvbkVsZW00KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQsIF9XaWRnZXRBbm5vdGF0aW9uRWxlbTQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBDaG9pY2VXaWRnZXRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENob2ljZVdpZGdldEFubm90YXRpb25FbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQpLmNhbGwodGhpcywgcGFyYW1ldGVycywgcGFyYW1ldGVycy5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhDaG9pY2VXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gJ2Nob2ljZVdpZGdldEFubm90YXRpb24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50LmRpc2FibGVkID0gdGhpcy5kYXRhLnJlYWRPbmx5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5kYXRhLmNvbWJvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50LnNpemUgPSB0aGlzLmRhdGEub3B0aW9ucy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGEubXVsdGlTZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm11bHRpcGxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHRoaXMuZGF0YS5vcHRpb25zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcHRpb24gPSB0aGlzLmRhdGEub3B0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcHRpb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25FbGVtZW50LnRleHRDb250ZW50ID0gb3B0aW9uLmRpc3BsYXlWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQudmFsdWUgPSBvcHRpb24uZXhwb3J0VmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGEuZmllbGRWYWx1ZS5pbmNsdWRlcyhvcHRpb24uZGlzcGxheVZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQuc2V0QXR0cmlidXRlKCdzZWxlY3RlZCcsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50LmFwcGVuZENoaWxkKG9wdGlvbkVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoc2VsZWN0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDaG9pY2VXaWRnZXRBbm5vdGF0aW9uRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgfShXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgUG9wdXBBbm5vdGF0aW9uRWxlbWVudCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Bbm5vdGF0aW9uRWxlbWVudDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhQb3B1cEFubm90YXRpb25FbGVtZW50LCBfQW5ub3RhdGlvbkVsZW1lbnQ0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUG9wdXBBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBvcHVwQW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS50aXRsZSB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoUG9wdXBBbm5vdGF0aW9uRWxlbWVudCkuY2FsbCh0aGlzLCBwYXJhbWV0ZXJzLCBpc1JlbmRlcmFibGUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFBvcHVwQW5ub3RhdGlvbkVsZW1lbnQsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBJR05PUkVfVFlQRVMgPSBbJ0xpbmUnLCAnU3F1YXJlJywgJ0NpcmNsZScsICdQb2x5TGluZScsICdQb2x5Z29uJywgJ0luayddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSAncG9wdXBBbm5vdGF0aW9uJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSUdOT1JFX1RZUEVTLmluY2x1ZGVzKHRoaXMuZGF0YS5wYXJlbnRUeXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gJ1tkYXRhLWFubm90YXRpb24taWQ9XCInICsgdGhpcy5kYXRhLnBhcmVudElkICsgJ1wiXSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRFbGVtZW50ID0gdGhpcy5sYXllci5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3B1cCA9IG5ldyBQb3B1cEVsZW1lbnQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLmNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXI6IHBhcmVudEVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5kYXRhLmNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuZGF0YS50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzOiB0aGlzLmRhdGEuY29udGVudHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRMZWZ0ID0gcGFyc2VGbG9hdChwYXJlbnRFbGVtZW50LnN0eWxlLmxlZnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50V2lkdGggPSBwYXJzZUZsb2F0KHBhcmVudEVsZW1lbnQuc3R5bGUud2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSAtKHBhcmVudExlZnQgKyBwYXJlbnRXaWR0aCkgKyAncHggLScgKyBwYXJlbnRFbGVtZW50LnN0eWxlLnRvcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUubGVmdCA9IHBhcmVudExlZnQgKyBwYXJlbnRXaWR0aCArICdweCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHBvcHVwLnJlbmRlcigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBvcHVwQW5ub3RhdGlvbkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBvcHVwRWxlbWVudCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUG9wdXBFbGVtZW50KHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUG9wdXBFbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyID0gcGFyYW1ldGVycy5jb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyID0gcGFyYW1ldGVycy50cmlnZ2VyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sb3IgPSBwYXJhbWV0ZXJzLmNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGl0bGUgPSBwYXJhbWV0ZXJzLnRpdGxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGVudHMgPSBwYXJhbWV0ZXJzLmNvbnRlbnRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZVdyYXBwZXIgPSBwYXJhbWV0ZXJzLmhpZGVXcmFwcGVyIHx8IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhQb3B1cEVsZW1lbnQsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBCQUNLR1JPVU5EX0VOTElHSFQgPSAwLjc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIuY2xhc3NOYW1lID0gJ3BvcHVwV3JhcHBlcic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZUVsZW1lbnQgPSB0aGlzLmhpZGVXcmFwcGVyID8gd3JhcHBlciA6IHRoaXMuY29udGFpbmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVFbGVtZW50LnNldEF0dHJpYnV0ZSgnaGlkZGVuJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3B1cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3B1cC5jbGFzc05hbWUgPSAncG9wdXAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSB0aGlzLmNvbG9yO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBCQUNLR1JPVU5EX0VOTElHSFQgKiAoMjU1IC0gY29sb3JbMF0pICsgY29sb3JbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZyA9IEJBQ0tHUk9VTkRfRU5MSUdIVCAqICgyNTUgLSBjb2xvclsxXSkgKyBjb2xvclsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gQkFDS0dST1VORF9FTkxJR0hUICogKDI1NSAtIGNvbG9yWzJdKSArIGNvbG9yWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXAuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gX3V0aWwuVXRpbC5tYWtlQ3NzUmdiKHIgfCAwLCBnIHwgMCwgYiB8IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnRzID0gdGhpcy5fZm9ybWF0Q29udGVudHModGhpcy5jb250ZW50cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaDEnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUudGV4dENvbnRlbnQgPSB0aGlzLnRpdGxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl90b2dnbGUuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCB0aGlzLl9zaG93LmJpbmQodGhpcywgZmFsc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgdGhpcy5faGlkZS5iaW5kKHRoaXMsIGZhbHNlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5faGlkZS5iaW5kKHRoaXMsIHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQodGl0bGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3B1cC5hcHBlbmRDaGlsZChjb250ZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQocG9wdXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9mb3JtYXRDb250ZW50c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfZm9ybWF0Q29udGVudHMoY29udGVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5lcyA9IGNvbnRlbnRzLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBsaW5lcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGluZSA9IGxpbmVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsaW5lKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgaWkgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX3RvZ2dsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfdG9nZ2xlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5waW5uZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hpZGUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaG93KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfc2hvdygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBpbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5waW5uZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGlkZUVsZW1lbnQuaGFzQXR0cmlidXRlKCdoaWRkZW4nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUuekluZGV4ICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9oaWRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9oaWRlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdW5waW4gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVucGluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmhpZGVFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnaGlkZGVuJykgJiYgIXRoaXMucGlubmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVFbGVtZW50LnNldEF0dHJpYnV0ZSgnaGlkZGVuJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS56SW5kZXggLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBvcHVwRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIExpbmVBbm5vdGF0aW9uRWxlbWVudCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Bbm5vdGF0aW9uRWxlbWVudDUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhMaW5lQW5ub3RhdGlvbkVsZW1lbnQsIF9Bbm5vdGF0aW9uRWxlbWVudDUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBMaW5lQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMaW5lQW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGUgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKExpbmVBbm5vdGF0aW9uRWxlbWVudCkuY2FsbCh0aGlzLCBwYXJhbWV0ZXJzLCBpc1JlbmRlcmFibGUsIHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKExpbmVBbm5vdGF0aW9uRWxlbWVudCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gJ2xpbmVBbm5vdGF0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGRhdGEucmVjdFsyXSAtIGRhdGEucmVjdFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IGRhdGEucmVjdFszXSAtIGRhdGEucmVjdFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN2ZyA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5lID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2ZzpsaW5lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUuc2V0QXR0cmlidXRlKCd4MScsIGRhdGEucmVjdFsyXSAtIGRhdGEubGluZUNvb3JkaW5hdGVzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZS5zZXRBdHRyaWJ1dGUoJ3kxJywgZGF0YS5yZWN0WzNdIC0gZGF0YS5saW5lQ29vcmRpbmF0ZXNbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLnNldEF0dHJpYnV0ZSgneDInLCBkYXRhLnJlY3RbMl0gLSBkYXRhLmxpbmVDb29yZGluYXRlc1syXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUuc2V0QXR0cmlidXRlKCd5MicsIGRhdGEucmVjdFszXSAtIGRhdGEubGluZUNvb3JkaW5hdGVzWzNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS13aWR0aCcsIGRhdGEuYm9yZGVyU3R5bGUud2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgJ3RyYW5zcGFyZW50Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Zy5hcHBlbmRDaGlsZChsaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYXBwZW5kKHN2Zyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIsIGxpbmUsIGRhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMaW5lQW5ub3RhdGlvbkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFNxdWFyZUFubm90YXRpb25FbGVtZW50ID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0Fubm90YXRpb25FbGVtZW50Nikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFNxdWFyZUFubm90YXRpb25FbGVtZW50LCBfQW5ub3RhdGlvbkVsZW1lbnQ2KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gU3F1YXJlQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTcXVhcmVBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZSB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoU3F1YXJlQW5ub3RhdGlvbkVsZW1lbnQpLmNhbGwodGhpcywgcGFyYW1ldGVycywgaXNSZW5kZXJhYmxlLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhTcXVhcmVBbm5vdGF0aW9uRWxlbWVudCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gJ3NxdWFyZUFubm90YXRpb24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gZGF0YS5yZWN0WzJdIC0gZGF0YS5yZWN0WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gZGF0YS5yZWN0WzNdIC0gZGF0YS5yZWN0WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ZnID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJvcmRlcldpZHRoID0gZGF0YS5ib3JkZXJTdHlsZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNxdWFyZSA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCdzdmc6cmVjdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcXVhcmUuc2V0QXR0cmlidXRlKCd4JywgYm9yZGVyV2lkdGggLyAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3F1YXJlLnNldEF0dHJpYnV0ZSgneScsIGJvcmRlcldpZHRoIC8gMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxdWFyZS5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgd2lkdGggLSBib3JkZXJXaWR0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxdWFyZS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIGhlaWdodCAtIGJvcmRlcldpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3F1YXJlLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLXdpZHRoJywgYm9yZGVyV2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcXVhcmUuc2V0QXR0cmlidXRlKCdzdHJva2UnLCAndHJhbnNwYXJlbnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3F1YXJlLnNldEF0dHJpYnV0ZSgnZmlsbCcsICdub25lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Zy5hcHBlbmRDaGlsZChzcXVhcmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmQoc3ZnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVQb3B1cCh0aGlzLmNvbnRhaW5lciwgc3F1YXJlLCBkYXRhKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3F1YXJlQW5ub3RhdGlvbkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIENpcmNsZUFubm90YXRpb25FbGVtZW50ID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0Fubm90YXRpb25FbGVtZW50Nykge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKENpcmNsZUFubm90YXRpb25FbGVtZW50LCBfQW5ub3RhdGlvbkVsZW1lbnQ3KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQ2lyY2xlQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDaXJjbGVBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZSB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoQ2lyY2xlQW5ub3RhdGlvbkVsZW1lbnQpLmNhbGwodGhpcywgcGFyYW1ldGVycywgaXNSZW5kZXJhYmxlLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhDaXJjbGVBbm5vdGF0aW9uRWxlbWVudCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gJ2NpcmNsZUFubm90YXRpb24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gZGF0YS5yZWN0WzJdIC0gZGF0YS5yZWN0WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gZGF0YS5yZWN0WzNdIC0gZGF0YS5yZWN0WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ZnID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJvcmRlcldpZHRoID0gZGF0YS5ib3JkZXJTdHlsZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNpcmNsZSA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCdzdmc6ZWxsaXBzZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXJjbGUuc2V0QXR0cmlidXRlKCdjeCcsIHdpZHRoIC8gMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoJ2N5JywgaGVpZ2h0IC8gMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoJ3J4Jywgd2lkdGggLyAyIC0gYm9yZGVyV2lkdGggLyAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlLnNldEF0dHJpYnV0ZSgncnknLCBoZWlnaHQgLyAyIC0gYm9yZGVyV2lkdGggLyAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLXdpZHRoJywgYm9yZGVyV2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXJjbGUuc2V0QXR0cmlidXRlKCdzdHJva2UnLCAndHJhbnNwYXJlbnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlLnNldEF0dHJpYnV0ZSgnZmlsbCcsICdub25lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Zy5hcHBlbmRDaGlsZChjaXJjbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmQoc3ZnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVQb3B1cCh0aGlzLmNvbnRhaW5lciwgY2lyY2xlLCBkYXRhKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ2lyY2xlQW5ub3RhdGlvbkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBvbHlsaW5lQW5ub3RhdGlvbkVsZW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQW5ub3RhdGlvbkVsZW1lbnQ4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoUG9seWxpbmVBbm5vdGF0aW9uRWxlbWVudCwgX0Fubm90YXRpb25FbGVtZW50OCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBvbHlsaW5lQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUG9seWxpbmVBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZSB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihQb2x5bGluZUFubm90YXRpb25FbGVtZW50KS5jYWxsKHRoaXMsIHBhcmFtZXRlcnMsIGlzUmVuZGVyYWJsZSwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMy5jb250YWluZXJDbGFzc05hbWUgPSAncG9seWxpbmVBbm5vdGF0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMuc3ZnRWxlbWVudE5hbWUgPSAnc3ZnOnBvbHlsaW5lJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoUG9seWxpbmVBbm5vdGF0aW9uRWxlbWVudCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gdGhpcy5jb250YWluZXJDbGFzc05hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBkYXRhLnJlY3RbMl0gLSBkYXRhLnJlY3RbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSBkYXRhLnJlY3RbM10gLSBkYXRhLnJlY3RbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdmcgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmVydGljZXMgPSBkYXRhLnZlcnRpY2VzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9pbnRzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdmVydGljZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHggPSB2ZXJ0aWNlc1tpXS54IC0gZGF0YS5yZWN0WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHkgPSBkYXRhLnJlY3RbM10gLSB2ZXJ0aWNlc1tpXS55O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goeCArICcsJyArIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzID0gcG9pbnRzLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJvcmRlcldpZHRoID0gZGF0YS5ib3JkZXJTdHlsZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvbHlsaW5lID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQodGhpcy5zdmdFbGVtZW50TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZSgncG9pbnRzJywgcG9pbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9seWxpbmUuc2V0QXR0cmlidXRlKCdzdHJva2Utd2lkdGgnLCBib3JkZXJXaWR0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgJ3RyYW5zcGFyZW50Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZSgnZmlsbCcsICdub25lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Zy5hcHBlbmRDaGlsZChwb2x5bGluZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChzdmcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLCBwb2x5bGluZSwgZGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBvbHlsaW5lQW5ub3RhdGlvbkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBvbHlnb25Bbm5vdGF0aW9uRWxlbWVudCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Qb2x5bGluZUFubm90YXRpb25FbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFBvbHlnb25Bbm5vdGF0aW9uRWxlbWVudCwgX1BvbHlsaW5lQW5ub3RhdGlvbkVsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUG9seWdvbkFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBvbHlnb25Bbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczQgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoUG9seWdvbkFubm90YXRpb25FbGVtZW50KS5jYWxsKHRoaXMsIHBhcmFtZXRlcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczQuY29udGFpbmVyQ2xhc3NOYW1lID0gJ3BvbHlnb25Bbm5vdGF0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczQuc3ZnRWxlbWVudE5hbWUgPSAnc3ZnOnBvbHlnb24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQb2x5Z29uQW5ub3RhdGlvbkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0oUG9seWxpbmVBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSW5rQW5ub3RhdGlvbkVsZW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQW5ub3RhdGlvbkVsZW1lbnQ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoSW5rQW5ub3RhdGlvbkVsZW1lbnQsIF9Bbm5vdGF0aW9uRWxlbWVudDkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJbmtBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzNTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBJbmtBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZSB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNSA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihJbmtBbm5vdGF0aW9uRWxlbWVudCkuY2FsbCh0aGlzLCBwYXJhbWV0ZXJzLCBpc1JlbmRlcmFibGUsIHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuY29udGFpbmVyQ2xhc3NOYW1lID0gJ2lua0Fubm90YXRpb24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNS5zdmdFbGVtZW50TmFtZSA9ICdzdmc6cG9seWxpbmUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhJbmtBbm5vdGF0aW9uRWxlbWVudCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gdGhpcy5jb250YWluZXJDbGFzc05hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBkYXRhLnJlY3RbMl0gLSBkYXRhLnJlY3RbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSBkYXRhLnJlY3RbM10gLSBkYXRhLnJlY3RbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdmcgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5rTGlzdHMgPSBkYXRhLmlua0xpc3RzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGlua0xpc3RzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmtMaXN0ID0gaW5rTGlzdHNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9pbnRzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IGlua0xpc3QubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4ID0gaW5rTGlzdFtqXS54IC0gZGF0YS5yZWN0WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5ID0gZGF0YS5yZWN0WzNdIC0gaW5rTGlzdFtqXS55O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHggKyAnLCcgKyB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzID0gcG9pbnRzLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBib3JkZXJXaWR0aCA9IGRhdGEuYm9yZGVyU3R5bGUud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9seWxpbmUgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCh0aGlzLnN2Z0VsZW1lbnROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZSgncG9pbnRzJywgcG9pbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLXdpZHRoJywgYm9yZGVyV2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9seWxpbmUuc2V0QXR0cmlidXRlKCdzdHJva2UnLCAndHJhbnNwYXJlbnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZSgnZmlsbCcsICdub25lJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLCBwb2x5bGluZSwgZGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Zy5hcHBlbmRDaGlsZChwb2x5bGluZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmQoc3ZnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElua0Fubm90YXRpb25FbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICB9KEFubm90YXRpb25FbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIHZhciBIaWdobGlnaHRBbm5vdGF0aW9uRWxlbWVudCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Bbm5vdGF0aW9uRWxlbWVudDEwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoSGlnaGxpZ2h0QW5ub3RhdGlvbkVsZW1lbnQsIF9Bbm5vdGF0aW9uRWxlbWVudDEwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSGlnaGxpZ2h0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBIaWdobGlnaHRBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZSB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoSGlnaGxpZ2h0QW5ub3RhdGlvbkVsZW1lbnQpLmNhbGwodGhpcywgcGFyYW1ldGVycywgaXNSZW5kZXJhYmxlLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhIaWdobGlnaHRBbm5vdGF0aW9uRWxlbWVudCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gJ2hpZ2hsaWdodEFubm90YXRpb24nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5kYXRhLmhhc1BvcHVwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVQb3B1cCh0aGlzLmNvbnRhaW5lciwgbnVsbCwgdGhpcy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBIaWdobGlnaHRBbm5vdGF0aW9uRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgfShBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgVW5kZXJsaW5lQW5ub3RhdGlvbkVsZW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQW5ub3RhdGlvbkVsZW1lbnQxMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFVuZGVybGluZUFubm90YXRpb25FbGVtZW50LCBfQW5ub3RhdGlvbkVsZW1lbnQxMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFVuZGVybGluZUFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVW5kZXJsaW5lQW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGUgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFVuZGVybGluZUFubm90YXRpb25FbGVtZW50KS5jYWxsKHRoaXMsIHBhcmFtZXRlcnMsIGlzUmVuZGVyYWJsZSwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoVW5kZXJsaW5lQW5ub3RhdGlvbkVsZW1lbnQsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9ICd1bmRlcmxpbmVBbm5vdGF0aW9uJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YS5oYXNQb3B1cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIsIG51bGwsIHRoaXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVW5kZXJsaW5lQW5ub3RhdGlvbkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFNxdWlnZ2x5QW5ub3RhdGlvbkVsZW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQW5ub3RhdGlvbkVsZW1lbnQxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFNxdWlnZ2x5QW5ub3RhdGlvbkVsZW1lbnQsIF9Bbm5vdGF0aW9uRWxlbWVudDEyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gU3F1aWdnbHlBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNxdWlnZ2x5QW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGUgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFNxdWlnZ2x5QW5ub3RhdGlvbkVsZW1lbnQpLmNhbGwodGhpcywgcGFyYW1ldGVycywgaXNSZW5kZXJhYmxlLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhTcXVpZ2dseUFubm90YXRpb25FbGVtZW50LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSAnc3F1aWdnbHlBbm5vdGF0aW9uJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YS5oYXNQb3B1cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIsIG51bGwsIHRoaXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3F1aWdnbHlBbm5vdGF0aW9uRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgfShBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgU3RyaWtlT3V0QW5ub3RhdGlvbkVsZW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQW5ub3RhdGlvbkVsZW1lbnQxMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFN0cmlrZU91dEFubm90YXRpb25FbGVtZW50LCBfQW5ub3RhdGlvbkVsZW1lbnQxMyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFN0cmlrZU91dEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3RyaWtlT3V0QW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGUgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFN0cmlrZU91dEFubm90YXRpb25FbGVtZW50KS5jYWxsKHRoaXMsIHBhcmFtZXRlcnMsIGlzUmVuZGVyYWJsZSwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoU3RyaWtlT3V0QW5ub3RhdGlvbkVsZW1lbnQsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9ICdzdHJpa2VvdXRBbm5vdGF0aW9uJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YS5oYXNQb3B1cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIsIG51bGwsIHRoaXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaWtlT3V0QW5ub3RhdGlvbkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFN0YW1wQW5ub3RhdGlvbkVsZW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQW5ub3RhdGlvbkVsZW1lbnQxNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFN0YW1wQW5ub3RhdGlvbkVsZW1lbnQsIF9Bbm5vdGF0aW9uRWxlbWVudDE0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gU3RhbXBBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN0YW1wQW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGUgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFN0YW1wQW5ub3RhdGlvbkVsZW1lbnQpLmNhbGwodGhpcywgcGFyYW1ldGVycywgaXNSZW5kZXJhYmxlLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhTdGFtcEFubm90YXRpb25FbGVtZW50LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSAnc3RhbXBBbm5vdGF0aW9uJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YS5oYXNQb3B1cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIsIG51bGwsIHRoaXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RhbXBBbm5vdGF0aW9uRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgfShBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uRWxlbWVudCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Bbm5vdGF0aW9uRWxlbWVudDE1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uRWxlbWVudCwgX0Fubm90YXRpb25FbGVtZW50MTUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBGaWxlQXR0YWNobWVudEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM2O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEZpbGVBdHRhY2htZW50QW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM2ID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKEZpbGVBdHRhY2htZW50QW5ub3RhdGlvbkVsZW1lbnQpLmNhbGwodGhpcywgcGFyYW1ldGVycywgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczYkZGF0YSRmaWxlID0gX3RoaXM2LmRhdGEuZmlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBfdGhpczYkZGF0YSRmaWxlLmZpbGVuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gX3RoaXM2JGRhdGEkZmlsZS5jb250ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5maWxlbmFtZSA9ICgwLCBfZG9tX3V0aWxzLmdldEZpbGVuYW1lRnJvbVVybCkoZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5jb250ZW50ID0gY29udGVudDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpczYubGlua1NlcnZpY2UuZXZlbnRCdXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM2LmxpbmtTZXJ2aWNlLmV2ZW50QnVzLmRpc3BhdGNoKCdmaWxlYXR0YWNobWVudGFubm90YXRpb24nLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpczYpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGZpbGVuYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lOiBmaWxlbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKEZpbGVBdHRhY2htZW50QW5ub3RhdGlvbkVsZW1lbnQsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9ICdmaWxlQXR0YWNobWVudEFubm90YXRpb24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJpZ2dlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyLnN0eWxlLmhlaWdodCA9IHRoaXMuY29udGFpbmVyLnN0eWxlLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlci5zdHlsZS53aWR0aCA9IHRoaXMuY29udGFpbmVyLnN0eWxlLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgdGhpcy5fZG93bmxvYWQuYmluZCh0aGlzKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGEuaGFzUG9wdXAgJiYgKHRoaXMuZGF0YS50aXRsZSB8fCB0aGlzLmRhdGEuY29udGVudHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVQb3B1cCh0aGlzLmNvbnRhaW5lciwgdHJpZ2dlciwgdGhpcy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRyaWdnZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfZG93bmxvYWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2Rvd25sb2FkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZG93bmxvYWRNYW5hZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0Rvd25sb2FkIGNhbm5vdCBiZSBzdGFydGVkIGR1ZSB0byB1bmF2YWlsYWJsZSBkb3dubG9hZCBtYW5hZ2VyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkTWFuYWdlci5kb3dubG9hZERhdGEodGhpcy5jb250ZW50LCB0aGlzLmZpbGVuYW1lLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgfShBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgQW5ub3RhdGlvbkxheWVyID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBbm5vdGF0aW9uTGF5ZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEFubm90YXRpb25MYXllcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhBbm5vdGF0aW9uTGF5ZXIsIG51bGwsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIocGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBwYXJhbWV0ZXJzLmFubm90YXRpb25zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gcGFyYW1ldGVycy5hbm5vdGF0aW9uc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gQW5ub3RhdGlvbkVsZW1lbnRGYWN0b3J5LmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcjogcGFyYW1ldGVycy5kaXYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFyYW1ldGVycy5wYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdwb3J0OiBwYXJhbWV0ZXJzLnZpZXdwb3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtTZXJ2aWNlOiBwYXJhbWV0ZXJzLmxpbmtTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkTWFuYWdlcjogcGFyYW1ldGVycy5kb3dubG9hZE1hbmFnZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VSZXNvdXJjZXNQYXRoOiBwYXJhbWV0ZXJzLmltYWdlUmVzb3VyY2VzUGF0aCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbnRlcmFjdGl2ZUZvcm1zOiBwYXJhbWV0ZXJzLnJlbmRlckludGVyYWN0aXZlRm9ybXMgfHwgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZnRmFjdG9yeTogbmV3IF9kb21fdXRpbHMuRE9NU1ZHRmFjdG9yeSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZW5kZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5kaXYuYXBwZW5kQ2hpbGQoZWxlbWVudC5yZW5kZXIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInVwZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGUocGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBwYXJhbWV0ZXJzLmFubm90YXRpb25zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gcGFyYW1ldGVycy5hbm5vdGF0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gcGFyYW1ldGVycy5kaXYucXVlcnlTZWxlY3RvcignW2RhdGEtYW5ub3RhdGlvbi1pZD1cIicgKyBkYXRhLmlkICsgJ1wiXScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gJ21hdHJpeCgnICsgcGFyYW1ldGVycy52aWV3cG9ydC50cmFuc2Zvcm0uam9pbignLCcpICsgJyknO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5kaXYucmVtb3ZlQXR0cmlidXRlKCdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBbm5vdGF0aW9uTGF5ZXI7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuQW5ub3RhdGlvbkxheWVyID0gQW5ub3RhdGlvbkxheWVyO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNjQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLlNWR0dyYXBoaWNzID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxKTtcblxuICAgICAgICAgICAgICAgIHZhciBfZG9tX3V0aWxzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9pc19ub2RlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQpKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgU1ZHR3JhcGhpY3MgPSBmdW5jdGlvbiBTVkdHcmFwaGljcygpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQ6IFNWR0dyYXBoaWNzJyk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuU1ZHR3JhcGhpY3MgPSBTVkdHcmFwaGljcztcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBTVkdfREVGQVVMVFMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U3R5bGU6ICdub3JtYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJ25vcm1hbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsQ29sb3I6ICcjMDAwMDAwJ1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb252ZXJ0SW1nRGF0YVRvUG5nID0gZnVuY3Rpb24gY29udmVydEltZ0RhdGFUb1BuZ0Nsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgUE5HX0hFQURFUiA9IG5ldyBVaW50OEFycmF5KFsweDg5LCAweDUwLCAweDRlLCAweDQ3LCAweDBkLCAweDBhLCAweDFhLCAweDBhXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgQ0hVTktfV1JBUFBFUl9TSVpFID0gMTI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3JjVGFibGUgPSBuZXcgSW50MzJBcnJheSgyNTYpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaCA9IDA7IGggPCA4OyBoKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgJiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gMHhlZEI4ODMyMCBeIGMgPj4gMSAmIDB4N2ZmZmZmZmY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gYyA+PiAxICYgMHg3ZmZmZmZmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyY1RhYmxlW2ldID0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY3JjMzIoZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjcmMgPSAtMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gKGNyYyBeIGRhdGFbaV0pICYgMHhmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSBjcmNUYWJsZVthXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JjID0gY3JjID4+PiA4IF4gYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JjIF4gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdyaXRlUG5nQ2h1bmsodHlwZSwgYm9keSwgZGF0YSwgb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbiA9IGJvZHkubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbcF0gPSBsZW4gPj4gMjQgJiAweGZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbcCArIDFdID0gbGVuID4+IDE2ICYgMHhmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW3AgKyAyXSA9IGxlbiA+PiA4ICYgMHhmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW3AgKyAzXSA9IGxlbiAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcCArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbcF0gPSB0eXBlLmNoYXJDb2RlQXQoMCkgJiAweGZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbcCArIDFdID0gdHlwZS5jaGFyQ29kZUF0KDEpICYgMHhmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW3AgKyAyXSA9IHR5cGUuY2hhckNvZGVBdCgyKSAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtwICsgM10gPSB0eXBlLmNoYXJDb2RlQXQoMykgJiAweGZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnNldChib2R5LCBwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwICs9IGJvZHkubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjcmMgPSBjcmMzMihkYXRhLCBvZmZzZXQgKyA0LCBwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW3BdID0gY3JjID4+IDI0ICYgMHhmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW3AgKyAxXSA9IGNyYyA+PiAxNiAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtwICsgMl0gPSBjcmMgPj4gOCAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtwICsgM10gPSBjcmMgJiAweGZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBhZGxlcjMyKGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IChhICsgKGRhdGFbaV0gJiAweGZmKSkgJSA2NTUyMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IChiICsgYSkgJSA2NTUyMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYiA8PCAxNiB8IGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmxhdGVTeW5jKGxpdGVyYWxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX2lzX25vZGUuZGVmYXVsdCkoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmbGF0ZVN5bmNVbmNvbXByZXNzZWQobGl0ZXJhbHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQocHJvY2Vzcy52ZXJzaW9ucy5ub2RlKSA+PSA4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCA9IGxpdGVyYWxzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgPSBuZXcgQnVmZmVyKGxpdGVyYWxzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdXRwdXQgPSByZXF1aXJlKCd6bGliJykuZGVmbGF0ZVN5bmMoaW5wdXQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsOiA5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQgaW5zdGFuY2VvZiBVaW50OEFycmF5ID8gb3V0cHV0IDogbmV3IFVpbnQ4QXJyYXkob3V0cHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnTm90IGNvbXByZXNzaW5nIFBORyBiZWNhdXNlIHpsaWIuZGVmbGF0ZVN5bmMgaXMgdW5hdmFpbGFibGU6ICcgKyBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmbGF0ZVN5bmNVbmNvbXByZXNzZWQobGl0ZXJhbHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZsYXRlU3luY1VuY29tcHJlc3NlZChsaXRlcmFscykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW4gPSBsaXRlcmFscy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heEJsb2NrTGVuZ3RoID0gMHhGRkZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWZsYXRlQmxvY2tzID0gTWF0aC5jZWlsKGxlbiAvIG1heEJsb2NrTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWRhdCA9IG5ldyBVaW50OEFycmF5KDIgKyBsZW4gKyBkZWZsYXRlQmxvY2tzICogNSArIDQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRhdFtwaSsrXSA9IDB4Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRhdFtwaSsrXSA9IDB4OWM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobGVuID4gbWF4QmxvY2tMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRhdFtwaSsrXSA9IDB4MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkYXRbcGkrK10gPSAweGZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGF0W3BpKytdID0gMHhmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRhdFtwaSsrXSA9IDB4MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkYXRbcGkrK10gPSAweDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGF0LnNldChsaXRlcmFscy5zdWJhcnJheShwb3MsIHBvcyArIG1heEJsb2NrTGVuZ3RoKSwgcGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaSArPSBtYXhCbG9ja0xlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zICs9IG1heEJsb2NrTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gbWF4QmxvY2tMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRhdFtwaSsrXSA9IDB4MDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRhdFtwaSsrXSA9IGxlbiAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRhdFtwaSsrXSA9IGxlbiA+PiA4ICYgMHhmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGF0W3BpKytdID0gfmxlbiAmIDB4ZmZmZiAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRhdFtwaSsrXSA9ICh+bGVuICYgMHhmZmZmKSA+PiA4ICYgMHhmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGF0LnNldChsaXRlcmFscy5zdWJhcnJheShwb3MpLCBwaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGkgKz0gbGl0ZXJhbHMubGVuZ3RoIC0gcG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhZGxlciA9IGFkbGVyMzIobGl0ZXJhbHMsIDAsIGxpdGVyYWxzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRhdFtwaSsrXSA9IGFkbGVyID4+IDI0ICYgMHhmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGF0W3BpKytdID0gYWRsZXIgPj4gMTYgJiAweGZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkYXRbcGkrK10gPSBhZGxlciA+PiA4ICYgMHhmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGF0W3BpKytdID0gYWRsZXIgJiAweGZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpZGF0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBlbmNvZGUoaW1nRGF0YSwga2luZCwgZm9yY2VEYXRhU2NoZW1hLCBpc01hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBpbWdEYXRhLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSBpbWdEYXRhLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYml0RGVwdGgsIGNvbG9yVHlwZSwgbGluZVNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGVzID0gaW1nRGF0YS5kYXRhO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChraW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JUeXBlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdERlcHRoID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVTaXplID0gd2lkdGggKyA3ID4+IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLkltYWdlS2luZC5SR0JfMjRCUFA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclR5cGUgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0RGVwdGggPSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVNpemUgPSB3aWR0aCAqIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLkltYWdlS2luZC5SR0JBXzMyQlBQOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JUeXBlID0gNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdERlcHRoID0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVTaXplID0gd2lkdGggKiA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBmb3JtYXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGl0ZXJhbHMgPSBuZXcgVWludDhBcnJheSgoMSArIGxpbmVTaXplKSAqIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldExpdGVyYWxzID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0Qnl0ZXMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5LCBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgKyt5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdGVyYWxzW29mZnNldExpdGVyYWxzKytdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbHMuc2V0KGJ5dGVzLnN1YmFycmF5KG9mZnNldEJ5dGVzLCBvZmZzZXRCeXRlcyArIGxpbmVTaXplKSwgb2Zmc2V0TGl0ZXJhbHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRCeXRlcyArPSBsaW5lU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0TGl0ZXJhbHMgKz0gbGluZVNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09IF91dGlsLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUCAmJiBpc01hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0TGl0ZXJhbHMgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0TGl0ZXJhbHMrKztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVTaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXRlcmFsc1tvZmZzZXRMaXRlcmFscysrXSBePSAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGloZHIgPSBuZXcgVWludDhBcnJheShbd2lkdGggPj4gMjQgJiAweGZmLCB3aWR0aCA+PiAxNiAmIDB4ZmYsIHdpZHRoID4+IDggJiAweGZmLCB3aWR0aCAmIDB4ZmYsIGhlaWdodCA+PiAyNCAmIDB4ZmYsIGhlaWdodCA+PiAxNiAmIDB4ZmYsIGhlaWdodCA+PiA4ICYgMHhmZiwgaGVpZ2h0ICYgMHhmZiwgYml0RGVwdGgsIGNvbG9yVHlwZSwgMHgwMCwgMHgwMCwgMHgwMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpZGF0ID0gZGVmbGF0ZVN5bmMobGl0ZXJhbHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwbmdMZW5ndGggPSBQTkdfSEVBREVSLmxlbmd0aCArIENIVU5LX1dSQVBQRVJfU0laRSAqIDMgKyBpaGRyLmxlbmd0aCArIGlkYXQubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gbmV3IFVpbnQ4QXJyYXkocG5nTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnNldChQTkdfSEVBREVSLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBQTkdfSEVBREVSLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVBuZ0NodW5rKCdJSERSJywgaWhkciwgZGF0YSwgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gQ0hVTktfV1JBUFBFUl9TSVpFICsgaWhkci5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVQbmdDaHVuaygnSURBVEEnLCBpZGF0LCBkYXRhLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBDSFVOS19XUkFQUEVSX1NJWkUgKyBpZGF0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVBuZ0NodW5rKCdJRU5EJywgbmV3IFVpbnQ4QXJyYXkoMCksIGRhdGEsIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5jcmVhdGVPYmplY3RVUkwpKGRhdGEsICdpbWFnZS9wbmcnLCBmb3JjZURhdGFTY2hlbWEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29udmVydEltZ0RhdGFUb1BuZyhpbWdEYXRhLCBmb3JjZURhdGFTY2hlbWEsIGlzTWFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBraW5kID0gaW1nRGF0YS5raW5kID09PSB1bmRlZmluZWQgPyBfdXRpbC5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFAgOiBpbWdEYXRhLmtpbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZShpbWdEYXRhLCBraW5kLCBmb3JjZURhdGFTY2hlbWEsIGlzTWFzayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFNWR0V4dHJhU3RhdGUgPSBmdW5jdGlvbiBTVkdFeHRyYVN0YXRlQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFNWR0V4dHJhU3RhdGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb250U2l6ZVNjYWxlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbnRXZWlnaHQgPSBTVkdfREVGQVVMVFMuZm9udFdlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbnRTaXplID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHRNYXRyaXggPSBfdXRpbC5JREVOVElUWV9NQVRSSVg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb250TWF0cml4ID0gX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZWFkaW5nID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHRSZW5kZXJpbmdNb2RlID0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lWCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lWSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFyU3BhY2luZyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JkU3BhY2luZyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0SFNjYWxlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHRSaXNlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGxDb2xvciA9IFNWR19ERUZBVUxUUy5maWxsQ29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJva2VDb2xvciA9ICcjMDAwMDAwJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJva2VBbHBoYSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lV2lkdGggPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGluZUpvaW4gPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmVDYXAgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1pdGVyTGltaXQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGFzaEFycmF5ID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXNoUGhhc2UgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVDbGlwVXJsID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsaXBHcm91cCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXNrSWQgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgU1ZHRXh0cmFTdGF0ZS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmU6IGZ1bmN0aW9uIFNWR0V4dHJhU3RhdGVfY2xvbmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuY3JlYXRlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudFBvaW50OiBmdW5jdGlvbiBTVkdFeHRyYVN0YXRlX3NldEN1cnJlbnRQb2ludCh4LCB5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTVkdFeHRyYVN0YXRlO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5TVkdHcmFwaGljcyA9IFNWR0dyYXBoaWNzID0gZnVuY3Rpb24gU1ZHR3JhcGhpY3NDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gb3BMaXN0VG9UcmVlKG9wTGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcFRyZWUgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wTGlzdExlbiA9IG9wTGlzdC5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IG9wTGlzdExlbjsgeCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcExpc3RbeF0uZm4gPT09ICdzYXZlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BUcmVlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmbklkJzogOTIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZuJzogJ2dyb3VwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXRlbXMnOiBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAucHVzaChvcFRyZWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BUcmVlID0gb3BUcmVlW29wVHJlZS5sZW5ndGggLSAxXS5pdGVtcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wTGlzdFt4XS5mbiA9PT0gJ3Jlc3RvcmUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFRyZWUgPSB0bXAucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFRyZWUucHVzaChvcExpc3RbeF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wVHJlZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcGYodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSB2YWx1ZS50b0ZpeGVkKDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHMubGVuZ3RoIC0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzW2ldICE9PSAnMCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoc1tpXSA9PT0gJzAnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzLnN1YnN0cmluZygwLCBzW2ldID09PSAnLicgPyBpIDogaSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwbShtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1bNF0gPT09IDAgJiYgbVs1XSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVsxXSA9PT0gMCAmJiBtWzJdID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVswXSA9PT0gMSAmJiBtWzNdID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NjYWxlKCcgKyBwZihtWzBdKSArICcgJyArIHBmKG1bM10pICsgJyknO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1bMF0gPT09IG1bM10gJiYgbVsxXSA9PT0gLW1bMl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gTWF0aC5hY29zKG1bMF0pICogMTgwIC8gTWF0aC5QSTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAncm90YXRlKCcgKyBwZihhKSArICcpJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtWzBdID09PSAxICYmIG1bMV0gPT09IDAgJiYgbVsyXSA9PT0gMCAmJiBtWzNdID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgnICsgcGYobVs0XSkgKyAnICcgKyBwZihtWzVdKSArICcpJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnbWF0cml4KCcgKyBwZihtWzBdKSArICcgJyArIHBmKG1bMV0pICsgJyAnICsgcGYobVsyXSkgKyAnICcgKyBwZihtWzNdKSArICcgJyArIHBmKG1bNF0pICsgJyAnICsgcGYobVs1XSkgKyAnKSc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFNWR0dyYXBoaWNzKGNvbW1vbk9ianMsIG9ianMsIGZvcmNlRGF0YVNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3ZnRmFjdG9yeSA9IG5ldyBfZG9tX3V0aWxzLkRPTVNWR0ZhY3RvcnkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXcgU1ZHRXh0cmFTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtTWF0cml4ID0gX3V0aWwuSURFTlRJVFlfTUFUUklYO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtU3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4dHJhU3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbk9ianMgPSBjb21tb25PYmpzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub2JqcyA9IG9ianM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2xpcCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nRU9GaWxsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWJlZEZvbnRzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWJlZGRlZEZvbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNzc1N0eWxlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlRGF0YVNjaGVtYSA9ICEhZm9yY2VEYXRhU2NoZW1hO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgWE1MX05TID0gJ2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgWExJTktfTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayc7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgTElORV9DQVBfU1RZTEVTID0gWydidXR0JywgJ3JvdW5kJywgJ3NxdWFyZSddO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIExJTkVfSk9JTl9TVFlMRVMgPSBbJ21pdGVyJywgJ3JvdW5kJywgJ2JldmVsJ107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xpcENvdW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXNrQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgU1ZHR3JhcGhpY3MucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmU6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX3NhdmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtU3RhY2sucHVzaCh0aGlzLnRyYW5zZm9ybU1hdHJpeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvbGQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXh0cmFTdGFjay5wdXNoKG9sZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG9sZC5jbG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZTogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfcmVzdG9yZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1NYXRyaXggPSB0aGlzLnRyYW5zZm9ybVN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLmV4dHJhU3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0NsaXAgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRncnAgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX2dyb3VwKGl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGVPcFRyZWUoaXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWREZXBlbmRlbmNpZXM6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX2xvYWREZXBlbmRlbmNpZXMob3BlcmF0b3JMaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuQXJyYXkgPSBvcGVyYXRvckxpc3QuZm5BcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuQXJyYXlMZW4gPSBmbkFycmF5Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3NBcnJheSA9IG9wZXJhdG9yTGlzdC5hcmdzQXJyYXk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbkFycmF5TGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdXRpbC5PUFMuZGVwZW5kZW5jeSA9PT0gZm5BcnJheVtpXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXBzID0gYXJnc0FycmF5W2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDAsIG5uID0gZGVwcy5sZW5ndGg7IG4gPCBubjsgbisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSBkZXBzW25dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tbW9uID0gb2JqLnN1YnN0cmluZygwLCAyKSA9PT0gJ2dfJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1vbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuY29tbW9uT2Jqcy5nZXQob2JqLCByZXNvbHZlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMub2Jqcy5nZXQob2JqLCByZXNvbHZlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LmRlcGVuZGVuY2llcy5wdXNoKHByb21pc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzLmN1cnJlbnQuZGVwZW5kZW5jaWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfdHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybU1hdHJpeCA9IFthLCBiLCBjLCBkLCBlLCBmXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1NYXRyaXggPSBfdXRpbC5VdGlsLnRyYW5zZm9ybSh0aGlzLnRyYW5zZm9ybU1hdHJpeCwgdHJhbnNmb3JtTWF0cml4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50Z3JwID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFNWRzogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfZ2V0U1ZHKG9wZXJhdG9yTGlzdCwgdmlld3BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3cG9ydCA9IHZpZXdwb3J0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdmdFbGVtZW50ID0gdGhpcy5faW5pdGlhbGl6ZSh2aWV3cG9ydCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZERlcGVuZGVuY2llcyhvcGVyYXRvckxpc3QpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyLnRyYW5zZm9ybU1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wVHJlZSA9IF90aGlzMi5jb252ZXJ0T3BMaXN0KG9wZXJhdG9yTGlzdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5leGVjdXRlT3BUcmVlKG9wVHJlZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdmdFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRPcExpc3Q6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX2NvbnZlcnRPcExpc3Qob3BlcmF0b3JMaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcmdzQXJyYXkgPSBvcGVyYXRvckxpc3QuYXJnc0FycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm5BcnJheSA9IG9wZXJhdG9yTGlzdC5mbkFycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm5BcnJheUxlbiA9IGZuQXJyYXkubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgUkVWT1BTID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcExpc3QgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBvcCBpbiBfdXRpbC5PUFMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFVk9QU1tfdXRpbC5PUFNbb3BdXSA9IG9wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCBmbkFycmF5TGVuOyB4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbklkID0gZm5BcnJheVt4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm5JZCc6IGZuSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZuJzogUkVWT1BTW2ZuSWRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcmdzJzogYXJnc0FycmF5W3hdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcExpc3RUb1RyZWUob3BMaXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVPcFRyZWU6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX2V4ZWN1dGVPcFRyZWUob3BUcmVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcFRyZWVMZW4gPSBvcFRyZWUubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgb3BUcmVlTGVuOyB4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbiA9IG9wVHJlZVt4XS5mbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbklkID0gb3BUcmVlW3hdLmZuSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IG9wVHJlZVt4XS5hcmdzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZuSWQgfCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuYmVnaW5UZXh0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luVGV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmRlcGVuZGVuY3k6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0TGVhZGluZzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMZWFkaW5nKGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldExlYWRpbmdNb3ZlVGV4dDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMZWFkaW5nTW92ZVRleHQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0Rm9udDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRGb250KGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNob3dUZXh0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dUZXh0KGFyZ3NbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNob3dTcGFjZWRUZXh0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dUZXh0KGFyZ3NbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmVuZFRleHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kVGV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLm1vdmVUZXh0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVUZXh0KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldENoYXJTcGFjaW5nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldENoYXJTcGFjaW5nKGFyZ3NbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFdvcmRTcGFjaW5nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFdvcmRTcGFjaW5nKGFyZ3NbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEhTY2FsZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRIU2NhbGUoYXJnc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0VGV4dE1hdHJpeDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUZXh0TWF0cml4KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFRleHRSaXNlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRleHRSaXNlKGFyZ3NbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFRleHRSZW5kZXJpbmdNb2RlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRleHRSZW5kZXJpbmdNb2RlKGFyZ3NbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldExpbmVXaWR0aDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMaW5lV2lkdGgoYXJnc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0TGluZUpvaW46XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TGluZUpvaW4oYXJnc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0TGluZUNhcDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMaW5lQ2FwKGFyZ3NbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldE1pdGVyTGltaXQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TWl0ZXJMaW1pdChhcmdzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGaWxsUkdCQ29sb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RmlsbFJHQkNvbG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZVJHQkNvbG9yOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0cm9rZVJHQkNvbG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldERhc2g6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGFzaChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRHU3RhdGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0R1N0YXRlKGFyZ3NbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmZpbGw6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmVvRmlsbDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb0ZpbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zdHJva2U6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3Ryb2tlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuZmlsbFN0cm9rZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxsU3Ryb2tlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuZW9GaWxsU3Ryb2tlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVvRmlsbFN0cm9rZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsaXA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpcCgnbm9uemVybycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmVvQ2xpcDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGlwKCdldmVub2RkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMucGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhaW50U29saWRDb2xvckltYWdlTWFzaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50SnBlZ1hPYmplY3Q6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFpbnRKcGVnWE9iamVjdChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5wYWludEltYWdlWE9iamVjdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWludEltYWdlWE9iamVjdChhcmdzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWludElubGluZUltYWdlWE9iamVjdChhcmdzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Q6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFpbnRJbWFnZU1hc2tYT2JqZWN0KGFyZ3NbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50Rm9ybVhPYmplY3RCZWdpbjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWludEZvcm1YT2JqZWN0QmVnaW4oYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMucGFpbnRGb3JtWE9iamVjdEVuZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWludEZvcm1YT2JqZWN0RW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY2xvc2VQYXRoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsb3NlU3Ryb2tlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlU3Ryb2tlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY2xvc2VGaWxsU3Ryb2tlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlRmlsbFN0cm9rZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsb3NlRU9GaWxsU3Ryb2tlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlRU9GaWxsU3Ryb2tlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMubmV4dExpbmU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dExpbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy50cmFuc2Zvcm06XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNvbnN0cnVjdFBhdGg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3RydWN0UGF0aChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5lbmRQYXRoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZFBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDkyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwKG9wVHJlZVt4XS5pdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbmltcGxlbWVudGVkIG9wZXJhdG9yICcgKyBmbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRXb3JkU3BhY2luZzogZnVuY3Rpb24gU1ZHR3JhcGhpY3Nfc2V0V29yZFNwYWNpbmcod29yZFNwYWNpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LndvcmRTcGFjaW5nID0gd29yZFNwYWNpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDaGFyU3BhY2luZzogZnVuY3Rpb24gU1ZHR3JhcGhpY3Nfc2V0Q2hhclNwYWNpbmcoY2hhclNwYWNpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LmNoYXJTcGFjaW5nID0gY2hhclNwYWNpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0TGluZTogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfbmV4dExpbmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZVRleHQoMCwgdGhpcy5jdXJyZW50LmxlYWRpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGV4dE1hdHJpeDogZnVuY3Rpb24gU1ZHR3JhcGhpY3Nfc2V0VGV4dE1hdHJpeChhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQudGV4dE1hdHJpeCA9IHRoaXMuY3VycmVudC5saW5lTWF0cml4ID0gW2EsIGIsIGMsIGQsIGUsIGZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQueCA9IHRoaXMuY3VycmVudC5saW5lWCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC55ID0gdGhpcy5jdXJyZW50LmxpbmVZID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC54Y29vcmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudHNwYW4gPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgnc3ZnOnRzcGFuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZvbnQtZmFtaWx5JywgY3VycmVudC5mb250RmFtaWx5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZm9udC1zaXplJywgcGYoY3VycmVudC5mb250U2l6ZSkgKyAncHgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneScsIHBmKC1jdXJyZW50LnkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50eHRFbGVtZW50ID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2Zzp0ZXh0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudHh0RWxlbWVudC5hcHBlbmRDaGlsZChjdXJyZW50LnRzcGFuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luVGV4dDogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfYmVnaW5UZXh0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQueCA9IHRoaXMuY3VycmVudC5saW5lWCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC55ID0gdGhpcy5jdXJyZW50LmxpbmVZID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnRleHRNYXRyaXggPSBfdXRpbC5JREVOVElUWV9NQVRSSVg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5saW5lTWF0cml4ID0gX3V0aWwuSURFTlRJVFlfTUFUUklYO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQudHNwYW4gPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgnc3ZnOnRzcGFuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC50eHRFbGVtZW50ID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2Zzp0ZXh0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC50eHRncnAgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgnc3ZnOmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Lnhjb29yZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVUZXh0OiBmdW5jdGlvbiBTVkdHcmFwaGljc19tb3ZlVGV4dCh4LCB5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQueCA9IHRoaXMuY3VycmVudC5saW5lWCArPSB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQueSA9IHRoaXMuY3VycmVudC5saW5lWSArPSB5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Lnhjb29yZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3BhbiA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCdzdmc6dHNwYW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZm9udC1mYW1pbHknLCBjdXJyZW50LmZvbnRGYW1pbHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsICdmb250LXNpemUnLCBwZihjdXJyZW50LmZvbnRTaXplKSArICdweCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsICd5JywgcGYoLWN1cnJlbnQueSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1RleHQ6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX3Nob3dUZXh0KGdseXBocykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnQgPSBjdXJyZW50LmZvbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250U2l6ZSA9IGN1cnJlbnQuZm9udFNpemU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnRTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhclNwYWNpbmcgPSBjdXJyZW50LmNoYXJTcGFjaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd29yZFNwYWNpbmcgPSBjdXJyZW50LndvcmRTcGFjaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udERpcmVjdGlvbiA9IGN1cnJlbnQuZm9udERpcmVjdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRIU2NhbGUgPSBjdXJyZW50LnRleHRIU2NhbGUgKiBmb250RGlyZWN0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhzTGVuZ3RoID0gZ2x5cGhzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnRpY2FsID0gZm9udC52ZXJ0aWNhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoQWR2YW5jZVNjYWxlID0gZm9udFNpemUgKiBjdXJyZW50LmZvbnRNYXRyaXhbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN3LCBzcGFjZVdpZHRoUHJvaiwgZm9udDJkZXYgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBnbHlwaHNMZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoID0gZ2x5cGhzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGggPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IGZvbnREaXJlY3Rpb24gKiB3b3JkU3BhY2luZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF91dGlsLmlzTnVtKShnbHlwaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IC1nbHlwaCAqIGZvbnRTaXplICogMC4wMDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGdseXBoLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJhY3RlciA9IGdseXBoLmZvbnRDaGFyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwYWNpbmcgPSAoZ2x5cGguaXNTcGFjZSA/IHdvcmRTcGFjaW5nIDogMCkgKyBjaGFyU3BhY2luZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyV2lkdGggPSB3aWR0aCAqIHdpZHRoQWR2YW5jZVNjYWxlICsgc3BhY2luZyAqIGZvbnREaXJlY3Rpb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZ2x5cGguaXNJbkZvbnQgJiYgIWZvbnQubWlzc2luZ0ZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IGNoYXJXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC54Y29vcmRzLnB1c2goY3VycmVudC54ICsgeCAqIHRleHRIU2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3Bhbi50ZXh0Q29udGVudCArPSBjaGFyYWN0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IGNoYXJXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC55IC09IHggKiB0ZXh0SFNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC54ICs9IHggKiB0ZXh0SFNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneCcsIGN1cnJlbnQueGNvb3Jkcy5tYXAocGYpLmpvaW4oJyAnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3knLCBwZigtY3VycmVudC55KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZvbnQtZmFtaWx5JywgY3VycmVudC5mb250RmFtaWx5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZm9udC1zaXplJywgcGYoY3VycmVudC5mb250U2l6ZSkgKyAncHgnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC5mb250U3R5bGUgIT09IFNWR19ERUZBVUxUUy5mb250U3R5bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZvbnQtc3R5bGUnLCBjdXJyZW50LmZvbnRTdHlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC5mb250V2VpZ2h0ICE9PSBTVkdfREVGQVVMVFMuZm9udFdlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZm9udC13ZWlnaHQnLCBjdXJyZW50LmZvbnRXZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGxTdHJva2VNb2RlID0gY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSAmIF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFX01BU0s7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMIHx8IGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQuZmlsbENvbG9yICE9PSBTVkdfREVGQVVMVFMuZmlsbENvbG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbCcsIGN1cnJlbnQuZmlsbENvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQuZmlsbEFscGhhIDwgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwtb3BhY2l0eScsIGN1cnJlbnQuZmlsbEFscGhhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LnRleHRSZW5kZXJpbmdNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbCcsICd0cmFuc3BhcmVudCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbCcsICdub25lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsbFN0cm9rZU1vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLlNUUk9LRSB8fCBmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFN0cm9rZUF0dHJpYnV0ZXMoY3VycmVudC50c3Bhbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dE1hdHJpeCA9IGN1cnJlbnQudGV4dE1hdHJpeDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC50ZXh0UmlzZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE1hdHJpeCA9IHRleHRNYXRyaXguc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRNYXRyaXhbNV0gKz0gY3VycmVudC50ZXh0UmlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudHh0RWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAndHJhbnNmb3JtJywgcG0odGV4dE1hdHJpeCkgKyAnIHNjYWxlKDEsIC0xKScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnR4dEVsZW1lbnQuc2V0QXR0cmlidXRlTlMoWE1MX05TLCAneG1sOnNwYWNlJywgJ3ByZXNlcnZlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudHh0RWxlbWVudC5hcHBlbmRDaGlsZChjdXJyZW50LnRzcGFuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50eHRncnAuYXBwZW5kQ2hpbGQoY3VycmVudC50eHRFbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZENoaWxkKGN1cnJlbnQudHh0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRMZWFkaW5nTW92ZVRleHQ6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX3NldExlYWRpbmdNb3ZlVGV4dCh4LCB5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TGVhZGluZygteSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZVRleHQoeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRGb250U3R5bGU6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX2FkZEZvbnRTdHlsZShmb250T2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jc3NTdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jc3NTdHlsZSA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCdzdmc6c3R5bGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3NzU3R5bGUuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3R5cGUnLCAndGV4dC9jc3MnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmcy5hcHBlbmRDaGlsZCh0aGlzLmNzc1N0eWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSAoMCwgX3V0aWwuY3JlYXRlT2JqZWN0VVJMKShmb250T2JqLmRhdGEsIGZvbnRPYmoubWltZXR5cGUsIHRoaXMuZm9yY2VEYXRhU2NoZW1hKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jc3NTdHlsZS50ZXh0Q29udGVudCArPSAnQGZvbnQtZmFjZSB7IGZvbnQtZmFtaWx5OiBcIicgKyBmb250T2JqLmxvYWRlZE5hbWUgKyAnXCI7JyArICcgc3JjOiB1cmwoJyArIHVybCArICcpOyB9XFxuJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvbnQ6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX3NldEZvbnQoZGV0YWlscykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnRPYmogPSB0aGlzLmNvbW1vbk9ianMuZ2V0KGRldGFpbHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IGRldGFpbHNbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5mb250ID0gZm9udE9iajtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lbWJlZEZvbnRzICYmIGZvbnRPYmouZGF0YSAmJiAhdGhpcy5lbWJlZGRlZEZvbnRzW2ZvbnRPYmoubG9hZGVkTmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRm9udFN0eWxlKGZvbnRPYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWJlZGRlZEZvbnRzW2ZvbnRPYmoubG9hZGVkTmFtZV0gPSBmb250T2JqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5mb250TWF0cml4ID0gZm9udE9iai5mb250TWF0cml4ID8gZm9udE9iai5mb250TWF0cml4IDogX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBib2xkID0gZm9udE9iai5ibGFjayA/IGZvbnRPYmouYm9sZCA/ICdib2xkZXInIDogJ2JvbGQnIDogZm9udE9iai5ib2xkID8gJ2JvbGQnIDogJ25vcm1hbCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGFsaWMgPSBmb250T2JqLml0YWxpYyA/ICdpdGFsaWMnIDogJ25vcm1hbCc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpemUgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gLXNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmZvbnREaXJlY3Rpb24gPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuZm9udERpcmVjdGlvbiA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmZvbnRTaXplID0gc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5mb250RmFtaWx5ID0gZm9udE9iai5sb2FkZWROYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmZvbnRXZWlnaHQgPSBib2xkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmZvbnRTdHlsZSA9IGl0YWxpYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3BhbiA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCdzdmc6dHNwYW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneScsIHBmKC1jdXJyZW50LnkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC54Y29vcmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRUZXh0OiBmdW5jdGlvbiBlbmRUZXh0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSAmIF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkFERF9UT19QQVRIX0ZMQUcgJiYgY3VycmVudC50eHRFbGVtZW50ICYmIGN1cnJlbnQudHh0RWxlbWVudC5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuZWxlbWVudCA9IGN1cnJlbnQudHh0RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpcCgnbm9uemVybycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmRQYXRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldExpbmVXaWR0aDogZnVuY3Rpb24gU1ZHR3JhcGhpY3Nfc2V0TGluZVdpZHRoKHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5saW5lV2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TGluZUNhcDogZnVuY3Rpb24gU1ZHR3JhcGhpY3Nfc2V0TGluZUNhcChzdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQubGluZUNhcCA9IExJTkVfQ0FQX1NUWUxFU1tzdHlsZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRMaW5lSm9pbjogZnVuY3Rpb24gU1ZHR3JhcGhpY3Nfc2V0TGluZUpvaW4oc3R5bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LmxpbmVKb2luID0gTElORV9KT0lOX1NUWUxFU1tzdHlsZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNaXRlckxpbWl0OiBmdW5jdGlvbiBTVkdHcmFwaGljc19zZXRNaXRlckxpbWl0KGxpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5taXRlckxpbWl0ID0gbGltaXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdHJva2VBbHBoYTogZnVuY3Rpb24gU1ZHR3JhcGhpY3Nfc2V0U3Ryb2tlQWxwaGEoc3Ryb2tlQWxwaGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0cm9rZUFscGhhID0gc3Ryb2tlQWxwaGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdHJva2VSR0JDb2xvcjogZnVuY3Rpb24gU1ZHR3JhcGhpY3Nfc2V0U3Ryb2tlUkdCQ29sb3IociwgZywgYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBfdXRpbC5VdGlsLm1ha2VDc3NSZ2IociwgZywgYik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yID0gY29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRGaWxsQWxwaGE6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX3NldEZpbGxBbHBoYShmaWxsQWxwaGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LmZpbGxBbHBoYSA9IGZpbGxBbHBoYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEZpbGxSR0JDb2xvcjogZnVuY3Rpb24gU1ZHR3JhcGhpY3Nfc2V0RmlsbFJHQkNvbG9yKHIsIGcsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gX3V0aWwuVXRpbC5tYWtlQ3NzUmdiKHIsIGcsIGIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5maWxsQ29sb3IgPSBjb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnRzcGFuID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2Zzp0c3BhbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQueGNvb3JkcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RGFzaDogZnVuY3Rpb24gU1ZHR3JhcGhpY3Nfc2V0RGFzaChkYXNoQXJyYXksIGRhc2hQaGFzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuZGFzaEFycmF5ID0gZGFzaEFycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuZGFzaFBoYXNlID0gZGFzaFBoYXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0UGF0aDogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfY29uc3RydWN0UGF0aChvcHMsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4ID0gY3VycmVudC54LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGN1cnJlbnQueTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5wYXRoID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2ZzpwYXRoJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcExlbmd0aCA9IG9wcy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgb3BMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcHNbaV0gfCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMucmVjdGFuZ2xlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBhcmdzW2orK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSBhcmdzW2orK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4dyA9IHggKyB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHloID0geSArIGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKCdNJywgcGYoeCksIHBmKHkpLCAnTCcsIHBmKHh3KSwgcGYoeSksICdMJywgcGYoeHcpLCBwZih5aCksICdMJywgcGYoeCksIHBmKHloKSwgJ1onKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5tb3ZlVG86XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBhcmdzW2orK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBhcmdzW2orK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCgnTScsIHBmKHgpLCBwZih5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMubGluZVRvOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goJ0wnLCBwZih4KSwgcGYoeSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmN1cnZlVG86XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBhcmdzW2ogKyA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGFyZ3NbaiArIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goJ0MnLCBwZihhcmdzW2pdKSwgcGYoYXJnc1tqICsgMV0pLCBwZihhcmdzW2ogKyAyXSksIHBmKGFyZ3NbaiArIDNdKSwgcGYoeCksIHBmKHkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiArPSA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmN1cnZlVG8yOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gYXJnc1tqICsgMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBhcmdzW2ogKyAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKCdDJywgcGYoeCksIHBmKHkpLCBwZihhcmdzW2pdKSwgcGYoYXJnc1tqICsgMV0pLCBwZihhcmdzW2ogKyAyXSksIHBmKGFyZ3NbaiArIDNdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jdXJ2ZVRvMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGFyZ3NbaiArIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gYXJnc1tqICsgM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCgnQycsIHBmKGFyZ3Nbal0pLCBwZihhcmdzW2ogKyAxXSksIHBmKHgpLCBwZih5KSwgcGYoeCksIHBmKHkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsb3NlUGF0aDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKCdaJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5wYXRoLnNldEF0dHJpYnV0ZU5TKG51bGwsICdkJywgZC5qb2luKCcgJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwnLCAnbm9uZScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kQ2hpbGQoY3VycmVudC5wYXRoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmVsZW1lbnQgPSBjdXJyZW50LnBhdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuc2V0Q3VycmVudFBvaW50KHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kUGF0aDogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfZW5kUGF0aCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnBlbmRpbmdDbGlwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsaXBJZCA9ICdjbGlwcGF0aCcgKyBjbGlwQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBDb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xpcFBhdGggPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgnc3ZnOmNsaXBQYXRoJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBQYXRoLnNldEF0dHJpYnV0ZU5TKG51bGwsICdpZCcsIGNsaXBJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBQYXRoLnNldEF0dHJpYnV0ZU5TKG51bGwsICd0cmFuc2Zvcm0nLCBwbSh0aGlzLnRyYW5zZm9ybU1hdHJpeCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xpcEVsZW1lbnQgPSBjdXJyZW50LmVsZW1lbnQuY2xvbmVOb2RlKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdDbGlwID09PSAnZXZlbm9kZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBFbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsICdjbGlwLXJ1bGUnLCAnZXZlbm9kZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcEVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2NsaXAtcnVsZScsICdub256ZXJvJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdDbGlwID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcFBhdGguYXBwZW5kQ2hpbGQoY2xpcEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZnMuYXBwZW5kQ2hpbGQoY2xpcFBhdGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LmFjdGl2ZUNsaXBVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuY2xpcEdyb3VwID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXh0cmFTdGFjay5mb3JFYWNoKGZ1bmN0aW9uIChwcmV2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi5jbGlwR3JvdXAgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwUGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnY2xpcC1wYXRoJywgY3VycmVudC5hY3RpdmVDbGlwVXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuYWN0aXZlQ2xpcFVybCA9ICd1cmwoIycgKyBjbGlwSWQgKyAnKSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGdycCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwOiBmdW5jdGlvbiBTVkdHcmFwaGljc19jbGlwKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2xpcCA9IHR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZVBhdGg6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX2Nsb3NlUGF0aCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQucGF0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBjdXJyZW50LnBhdGguZ2V0QXR0cmlidXRlTlMobnVsbCwgJ2QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgKz0gJ1onO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5wYXRoLnNldEF0dHJpYnV0ZU5TKG51bGwsICdkJywgZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldExlYWRpbmc6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX3NldExlYWRpbmcobGVhZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQubGVhZGluZyA9IC1sZWFkaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGV4dFJpc2U6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX3NldFRleHRSaXNlKHRleHRSaXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC50ZXh0UmlzZSA9IHRleHRSaXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGV4dFJlbmRlcmluZ01vZGU6IGZ1bmN0aW9uIHNldFRleHRSZW5kZXJpbmdNb2RlKHRleHRSZW5kZXJpbmdNb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSA9IHRleHRSZW5kZXJpbmdNb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SFNjYWxlOiBmdW5jdGlvbiBTVkdHcmFwaGljc19zZXRIU2NhbGUoc2NhbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnRleHRIU2NhbGUgPSBzY2FsZSAvIDEwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEdTdGF0ZTogZnVuY3Rpb24gU1ZHR3JhcGhpY3Nfc2V0R1N0YXRlKHN0YXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBzdGF0ZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RhdGVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IHN0YXRlWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gc3RhdGVbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTFcnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExpbmVXaWR0aCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTEMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExpbmVDYXAodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xKJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMaW5lSm9pbih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTUwnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE1pdGVyTGltaXQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERhc2godmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdGb250JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRGb250KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdDQSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3Ryb2tlQWxwaGEodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NhJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRGaWxsQWxwaGEodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnVW5pbXBsZW1lbnRlZCBncmFwaGljIHN0YXRlICcgKyBrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfZmlsbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQuZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsJywgY3VycmVudC5maWxsQ29sb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsLW9wYWNpdHknLCBjdXJyZW50LmZpbGxBbHBoYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZFBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBmdW5jdGlvbiBTVkdHcmFwaGljc19zdHJva2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LmVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFN0cm9rZUF0dHJpYnV0ZXMoY3VycmVudC5lbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsJywgJ25vbmUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc2V0U3Ryb2tlQXR0cmlidXRlczogZnVuY3Rpb24gX3NldFN0cm9rZUF0dHJpYnV0ZXMoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnc3Ryb2tlJywgY3VycmVudC5zdHJva2VDb2xvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3N0cm9rZS1vcGFjaXR5JywgY3VycmVudC5zdHJva2VBbHBoYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3N0cm9rZS1taXRlcmxpbWl0JywgcGYoY3VycmVudC5taXRlckxpbWl0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3N0cm9rZS1saW5lY2FwJywgY3VycmVudC5saW5lQ2FwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnc3Ryb2tlLWxpbmVqb2luJywgY3VycmVudC5saW5lSm9pbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3N0cm9rZS13aWR0aCcsIHBmKGN1cnJlbnQubGluZVdpZHRoKSArICdweCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsICdzdHJva2UtZGFzaGFycmF5JywgY3VycmVudC5kYXNoQXJyYXkubWFwKHBmKS5qb2luKCcgJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsICdzdHJva2UtZGFzaG9mZnNldCcsIHBmKGN1cnJlbnQuZGFzaFBoYXNlKSArICdweCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW9GaWxsOiBmdW5jdGlvbiBTVkdHcmFwaGljc19lb0ZpbGwoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnQuZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LmVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwtcnVsZScsICdldmVub2RkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHJva2U6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX2ZpbGxTdHJva2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3Ryb2tlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW9GaWxsU3Ryb2tlOiBmdW5jdGlvbiBTVkdHcmFwaGljc19lb0ZpbGxTdHJva2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnQuZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LmVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwtcnVsZScsICdldmVub2RkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGxTdHJva2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlU3Ryb2tlOiBmdW5jdGlvbiBTVkdHcmFwaGljc19jbG9zZVN0cm9rZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJva2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlRmlsbFN0cm9rZTogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfY2xvc2VGaWxsU3Ryb2tlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGxTdHJva2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlRU9GaWxsU3Ryb2tlOiBmdW5jdGlvbiBjbG9zZUVPRmlsbFN0cm9rZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb0ZpbGxTdHJva2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50U29saWRDb2xvckltYWdlTWFzazogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfcGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY3QgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgnc3ZnOnJlY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneCcsICcwJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgJ3knLCAnMCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsICd3aWR0aCcsICcxcHgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnaGVpZ2h0JywgJzFweCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsJywgY3VycmVudC5maWxsQ29sb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kQ2hpbGQocmVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWludEpwZWdYT2JqZWN0OiBmdW5jdGlvbiBTVkdHcmFwaGljc19wYWludEpwZWdYT2JqZWN0KG9iaklkLCB3LCBoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWdPYmogPSB0aGlzLm9ianMuZ2V0KG9iaklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZ0VsID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2ZzppbWFnZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdFbC5zZXRBdHRyaWJ1dGVOUyhYTElOS19OUywgJ3hsaW5rOmhyZWYnLCBpbWdPYmouc3JjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nRWwuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3dpZHRoJywgcGYodykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdFbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnaGVpZ2h0JywgcGYoaCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdFbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneCcsICcwJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0VsLnNldEF0dHJpYnV0ZU5TKG51bGwsICd5JywgcGYoLWgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nRWwuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3RyYW5zZm9ybScsICdzY2FsZSgnICsgcGYoMSAvIHcpICsgJyAnICsgcGYoLTEgLyBoKSArICcpJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW5zdXJlVHJhbnNmb3JtR3JvdXAoKS5hcHBlbmRDaGlsZChpbWdFbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWludEltYWdlWE9iamVjdDogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfcGFpbnRJbWFnZVhPYmplY3Qob2JqSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZ0RhdGEgPSB0aGlzLm9ianMuZ2V0KG9iaklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWltZ0RhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnRGVwZW5kZW50IGltYWdlIGlzblxcJ3QgcmVhZHkgeWV0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KGltZ0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpbnRJbmxpbmVJbWFnZVhPYmplY3Q6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX3BhaW50SW5saW5lSW1hZ2VYT2JqZWN0KGltZ0RhdGEsIG1hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gaW1nRGF0YS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1nU3JjID0gY29udmVydEltZ0RhdGFUb1BuZyhpbWdEYXRhLCB0aGlzLmZvcmNlRGF0YVNjaGVtYSwgISFtYXNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsaXByZWN0ID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2ZzpyZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsICd4JywgJzAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgJ3knLCAnMCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnd2lkdGgnLCBwZih3aWR0aCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnaGVpZ2h0JywgcGYoaGVpZ2h0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5lbGVtZW50ID0gY2xpcHJlY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpcCgnbm9uemVybycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1nRWwgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgnc3ZnOmltYWdlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0VsLnNldEF0dHJpYnV0ZU5TKFhMSU5LX05TLCAneGxpbms6aHJlZicsIGltZ1NyYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0VsLnNldEF0dHJpYnV0ZU5TKG51bGwsICd4JywgJzAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nRWwuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3knLCBwZigtaGVpZ2h0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0VsLnNldEF0dHJpYnV0ZU5TKG51bGwsICd3aWR0aCcsIHBmKHdpZHRoKSArICdweCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdFbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnaGVpZ2h0JywgcGYoaGVpZ2h0KSArICdweCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdFbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAndHJhbnNmb3JtJywgJ3NjYWxlKCcgKyBwZigxIC8gd2lkdGgpICsgJyAnICsgcGYoLTEgLyBoZWlnaHQpICsgJyknKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzay5hcHBlbmRDaGlsZChpbWdFbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZENoaWxkKGltZ0VsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0OiBmdW5jdGlvbiBTVkdHcmFwaGljc19wYWludEltYWdlTWFza1hPYmplY3QoaW1nRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gaW1nRGF0YS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsbENvbG9yID0gY3VycmVudC5maWxsQ29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQubWFza0lkID0gJ21hc2snICsgbWFza0NvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXNrID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2ZzptYXNrJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2suc2V0QXR0cmlidXRlTlMobnVsbCwgJ2lkJywgY3VycmVudC5tYXNrSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVjdCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCdzdmc6cmVjdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsICd4JywgJzAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneScsICcwJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgJ3dpZHRoJywgcGYod2lkdGgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnaGVpZ2h0JywgcGYoaGVpZ2h0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwnLCBmaWxsQ29sb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsICdtYXNrJywgJ3VybCgjJyArIGN1cnJlbnQubWFza0lkICsgJyknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZzLmFwcGVuZENoaWxkKG1hc2spO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kQ2hpbGQocmVjdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWludElubGluZUltYWdlWE9iamVjdChpbWdEYXRhLCBtYXNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50Rm9ybVhPYmplY3RCZWdpbjogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfcGFpbnRGb3JtWE9iamVjdEJlZ2luKG1hdHJpeCwgYmJveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtYXRyaXgpICYmIG1hdHJpeC5sZW5ndGggPT09IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtKG1hdHJpeFswXSwgbWF0cml4WzFdLCBtYXRyaXhbMl0sIG1hdHJpeFszXSwgbWF0cml4WzRdLCBtYXRyaXhbNV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJib3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGJib3hbMl0gLSBiYm94WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IGJib3hbM10gLSBiYm94WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsaXByZWN0ID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2ZzpyZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneCcsIGJib3hbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgJ3knLCBiYm94WzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsICd3aWR0aCcsIHBmKHdpZHRoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnaGVpZ2h0JywgcGYoaGVpZ2h0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuZWxlbWVudCA9IGNsaXByZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGlwKCdub256ZXJvJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZFBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpbnRGb3JtWE9iamVjdEVuZDogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfcGFpbnRGb3JtWE9iamVjdEVuZCgpIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pbml0aWFsaXplOiBmdW5jdGlvbiBfaW5pdGlhbGl6ZSh2aWV3cG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ZnID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZSh2aWV3cG9ydC53aWR0aCwgdmlld3BvcnQuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlZmluaXRpb25zID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2ZzpkZWZzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Zy5hcHBlbmRDaGlsZChkZWZpbml0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmcyA9IGRlZmluaXRpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm9vdEdyb3VwID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2ZzpnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RHcm91cC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAndHJhbnNmb3JtJywgcG0odmlld3BvcnQudHJhbnNmb3JtKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Zy5hcHBlbmRDaGlsZChyb290R3JvdXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN2ZyA9IHJvb3RHcm91cDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN2ZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbnN1cmVDbGlwR3JvdXA6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX2Vuc3VyZUNsaXBHcm91cCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnQuY2xpcEdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xpcEdyb3VwID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2ZzpnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwR3JvdXAuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2NsaXAtcGF0aCcsIHRoaXMuY3VycmVudC5hY3RpdmVDbGlwVXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3ZnLmFwcGVuZENoaWxkKGNsaXBHcm91cCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuY2xpcEdyb3VwID0gY2xpcEdyb3VwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudC5jbGlwR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZW5zdXJlVHJhbnNmb3JtR3JvdXA6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGdycCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50Z3JwID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2ZzpnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRncnAuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3RyYW5zZm9ybScsIHBtKHRoaXMudHJhbnNmb3JtTWF0cml4KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnQuYWN0aXZlQ2xpcFVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vuc3VyZUNsaXBHcm91cCgpLmFwcGVuZENoaWxkKHRoaXMudGdycCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3ZnLmFwcGVuZENoaWxkKHRoaXMudGdycCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50Z3JwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU1ZHR3JhcGhpY3M7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE2NSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUERGTm9kZVN0cmVhbSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfcmVnZW5lcmF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQ3KSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9uZXR3b3JrX3V0aWxzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNjYpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykgeyB0cnkgeyB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7IHZhciB2YWx1ZSA9IGluZm8udmFsdWU7IH0gY2F0Y2ggKGVycm9yKSB7IHJlamVjdChlcnJvcik7IHJldHVybjsgfSBpZiAoaW5mby5kb25lKSB7IHJlc29sdmUodmFsdWUpOyB9IGVsc2UgeyBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuICAgICAgICAgICAgICAgIHZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKTtcblxuICAgICAgICAgICAgICAgIHZhciBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gcmVxdWlyZSgndXJsJyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZmlsZVVyaVJlZ2V4ID0gL15maWxlOlxcL1xcL1xcL1thLXpBLVpdOlxcLy87XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBwYXJzZVVybChzb3VyY2VVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlZFVybCA9IHVybC5wYXJzZShzb3VyY2VVcmwpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdmaWxlOicgfHwgcGFyc2VkVXJsLmhvc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWRVcmw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoL15bYS16XTpbL1xcXFxdL2kudGVzdChzb3VyY2VVcmwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsLnBhcnNlKFwiZmlsZTovLy9cIi5jb25jYXQoc291cmNlVXJsKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZFVybC5ob3N0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRVcmwucHJvdG9jb2wgPSAnZmlsZTonO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZFVybDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgUERGTm9kZVN0cmVhbSA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUERGTm9kZVN0cmVhbShzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUERGTm9kZVN0cmVhbSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVybCA9IHBhcnNlVXJsKHNvdXJjZS51cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNIdHRwID0gdGhpcy51cmwucHJvdG9jb2wgPT09ICdodHRwOicgfHwgdGhpcy51cmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNGc1VybCA9IHRoaXMudXJsLnByb3RvY29sID09PSAnZmlsZTonO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaHR0cEhlYWRlcnMgPSB0aGlzLmlzSHR0cCAmJiBzb3VyY2UuaHR0cEhlYWRlcnMgfHwge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnVsbFJlcXVlc3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFBERk5vZGVTdHJlYW0sIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldEZ1bGxSZWFkZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RnVsbFJlYWRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnVsbFJlcXVlc3QgPSB0aGlzLmlzRnNVcmwgPyBuZXcgUERGTm9kZVN0cmVhbUZzRnVsbFJlYWRlcih0aGlzKSA6IG5ldyBQREZOb2RlU3RyZWFtRnVsbFJlYWRlcih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bGxSZXF1ZXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UmFuZ2VSZWFkZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmFuZ2VSZWFkZXIoc3RhcnQsIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2VSZWFkZXIgPSB0aGlzLmlzRnNVcmwgPyBuZXcgUERGTm9kZVN0cmVhbUZzUmFuZ2VSZWFkZXIodGhpcywgc3RhcnQsIGVuZCkgOiBuZXcgUERGTm9kZVN0cmVhbVJhbmdlUmVhZGVyKHRoaXMsIHN0YXJ0LCBlbmQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChyYW5nZVJlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlUmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY2FuY2VsQWxsUmVxdWVzdHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2FuY2VsQWxsUmVxdWVzdHMocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9mdWxsUmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnVsbFJlcXVlc3QuY2FuY2VsKHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGVycyA9IHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uIChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5jYW5jZWwocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUERGTm9kZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QREZOb2RlU3RyZWFtID0gUERGTm9kZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgIHZhciBCYXNlRnVsbFJlYWRlciA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQmFzZUZ1bGxSZWFkZXIoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJhc2VGdWxsUmVhZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VybCA9IHN0cmVhbS51cmw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JlZEVycm9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBzdHJlYW0uc291cmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRlZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsZW5hbWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rpc2FibGVSYW5nZSA9IHNvdXJjZS5kaXNhYmxlUmFuZ2UgfHwgZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmFuZ2VDaHVua1NpemUgPSBzb3VyY2UucmFuZ2VDaHVua1NpemU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3JhbmdlQ2h1bmtTaXplICYmICF0aGlzLl9kaXNhYmxlUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlzYWJsZVJhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9ICFzb3VyY2UuZGlzYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gIXNvdXJjZS5kaXNhYmxlUmFuZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGVTdHJlYW0gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoQmFzZUZ1bGxSZWFkZXIsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlYWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlYWQgPSBfYXN5bmNUb0dlbmVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWdlbmVyYXRvci5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmssIGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5wcm9taXNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2RvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3N0b3JlZEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5fc3RvcmVkRXJyb3I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gdGhpcy5fcmVhZGFibGVTdHJlYW0ucmVhZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGNodW5rID09PSBudWxsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdChcInJldHVyblwiLCB0aGlzLnJlYWQoKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkZWQgKz0gY2h1bmsubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkOiB0aGlzLl9sb2FkZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWw6IHRoaXMuX2NvbnRlbnRMZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoY2h1bmspLmJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdChcInJldHVyblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIF9jYWxsZWUsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlYWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWFkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0oKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjYW5jZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2FuY2VsKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3JlYWRhYmxlU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnJvcihyZWFzb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfZXJyb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2Vycm9yKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9yZWRFcnJvciA9IHJlYXNvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfc2V0UmVhZGFibGVTdHJlYW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3NldFJlYWRhYmxlU3RyZWFtKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGVTdHJlYW0gPSByZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGFibGVTdHJlYW0ub24oJ3JlYWRhYmxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRhYmxlU3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkYWJsZVN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkYWJsZVN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fZXJyb3IocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCAmJiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnJvcihuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24oJ3N0cmVhbWluZyBpcyBkaXNhYmxlZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zdG9yZWRFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGVTdHJlYW0uZGVzdHJveSh0aGlzLl9zdG9yZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImhlYWRlcnNSZWFkeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImZpbGVuYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWxlbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNvbnRlbnRMZW5ndGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpc1JhbmdlU3VwcG9ydGVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXNTdHJlYW1pbmdTdXBwb3J0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJhc2VGdWxsUmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgQmFzZVJhbmdlUmVhZGVyID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBCYXNlUmFuZ2VSZWFkZXIoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJhc2VSYW5nZVJlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91cmwgPSBzdHJlYW0udXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9yZWRFcnJvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkZWQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gc3RyZWFtLnNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9ICFzb3VyY2UuZGlzYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKEJhc2VSYW5nZVJlYWRlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVhZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVhZDIgPSBfYXN5bmNUb0dlbmVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWdlbmVyYXRvci5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rLCBidWZmZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvci5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTIkKF9jb250ZXh0Mikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDIucHJldiA9IF9jb250ZXh0Mi5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5wcm9taXNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2RvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoXCJyZXR1cm5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fc3RvcmVkRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5fc3RvcmVkRXJyb3I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gdGhpcy5fcmVhZGFibGVTdHJlYW0ucmVhZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGNodW5rID09PSBudWxsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAxMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KFwicmV0dXJuXCIsIHRoaXMucmVhZCgpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRlZCArPSBjaHVuay5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblByb2dyZXNzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWQ6IHRoaXMuX2xvYWRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBuZXcgVWludDhBcnJheShjaHVuaykuYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdChcInJldHVyblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBfY2FsbGVlMiwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVhZDIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWFkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0oKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjYW5jZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2FuY2VsKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3JlYWRhYmxlU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnJvcihyZWFzb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfZXJyb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2Vycm9yKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9yZWRFcnJvciA9IHJlYXNvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfc2V0UmVhZGFibGVTdHJlYW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3NldFJlYWRhYmxlU3RyZWFtKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtID0gcmVhZGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRhYmxlU3RyZWFtLm9uKCdyZWFkYWJsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGFibGVTdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRhYmxlU3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5fZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGFibGVTdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyLl9lcnJvcihyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3RvcmVkRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtLmRlc3Ryb3kodGhpcy5fc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpc1N0cmVhbWluZ1N1cHBvcnRlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQmFzZVJhbmdlUmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVSZXF1ZXN0T3B0aW9ucyh1cmwsIGhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sOiB1cmwucHJvdG9jb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRoOiB1cmwuYXV0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvc3Q6IHVybC5ob3N0bmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQ6IHVybC5wb3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogdXJsLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVyc1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBQREZOb2RlU3RyZWFtRnVsbFJlYWRlciA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9CYXNlRnVsbFJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFBERk5vZGVTdHJlYW1GdWxsUmVhZGVyLCBfQmFzZUZ1bGxSZWFkZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQREZOb2RlU3RyZWFtRnVsbFJlYWRlcihzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBERk5vZGVTdHJlYW1GdWxsUmVhZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihQREZOb2RlU3RyZWFtRnVsbFJlYWRlcikuY2FsbCh0aGlzLCBzdHJlYW0pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVSZXNwb25zZSA9IGZ1bmN0aW9uIGhhbmRsZVJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IG5ldyBfdXRpbC5NaXNzaW5nUERGRXhjZXB0aW9uKFwiTWlzc2luZyBQREYgXFxcIlwiLmNvbmNhdChfdGhpczMuX3VybCwgXCJcXFwiLlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMuX3N0b3JlZEVycm9yID0gZXJyb3I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMy5faGVhZGVyc0NhcGFiaWxpdHkucmVqZWN0KGVycm9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLl9zZXRSZWFkYWJsZVN0cmVhbShyZXNwb25zZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdldFJlc3BvbnNlSGVhZGVyID0gZnVuY3Rpb24gZ2V0UmVzcG9uc2VIZWFkZXIobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMy5fcmVhZGFibGVTdHJlYW0uaGVhZGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdmFsaWRhdGVSYW5nZVJlcXVlc3QgPSAoMCwgX25ldHdvcmtfdXRpbHMudmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXMpKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZXNwb25zZUhlYWRlcjogZ2V0UmVzcG9uc2VIZWFkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNIdHRwOiBzdHJlYW0uaXNIdHRwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlQ2h1bmtTaXplOiBfdGhpczMuX3JhbmdlQ2h1bmtTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVSYW5nZTogX3RoaXMzLl9kaXNhYmxlUmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dSYW5nZVJlcXVlc3RzID0gX3ZhbGlkYXRlUmFuZ2VSZXF1ZXN0LmFsbG93UmFuZ2VSZXF1ZXN0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Z2dlc3RlZExlbmd0aCA9IF92YWxpZGF0ZVJhbmdlUmVxdWVzdC5zdWdnZXN0ZWRMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLl9pc1JhbmdlU3VwcG9ydGVkID0gYWxsb3dSYW5nZVJlcXVlc3RzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMuX2NvbnRlbnRMZW5ndGggPSBzdWdnZXN0ZWRMZW5ndGggfHwgX3RoaXMzLl9jb250ZW50TGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMuX2ZpbGVuYW1lID0gKDAsIF9uZXR3b3JrX3V0aWxzLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIpKGdldFJlc3BvbnNlSGVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLl9yZXF1ZXN0ID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpczMuX3VybC5wcm90b2NvbCA9PT0gJ2h0dHA6Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMuX3JlcXVlc3QgPSBodHRwLnJlcXVlc3QoY3JlYXRlUmVxdWVzdE9wdGlvbnMoX3RoaXMzLl91cmwsIHN0cmVhbS5odHRwSGVhZGVycyksIGhhbmRsZVJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMuX3JlcXVlc3QgPSBodHRwcy5yZXF1ZXN0KGNyZWF0ZVJlcXVlc3RPcHRpb25zKF90aGlzMy5fdXJsLCBzdHJlYW0uaHR0cEhlYWRlcnMpLCBoYW5kbGVSZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLl9yZXF1ZXN0Lm9uKCdlcnJvcicsIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLl9zdG9yZWRFcnJvciA9IHJlYXNvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMuX2hlYWRlcnNDYXBhYmlsaXR5LnJlamVjdChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLl9yZXF1ZXN0LmVuZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBERk5vZGVTdHJlYW1GdWxsUmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICB9KEJhc2VGdWxsUmVhZGVyKTtcblxuICAgICAgICAgICAgICAgIHZhciBQREZOb2RlU3RyZWFtUmFuZ2VSZWFkZXIgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQmFzZVJhbmdlUmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoUERGTm9kZVN0cmVhbVJhbmdlUmVhZGVyLCBfQmFzZVJhbmdlUmVhZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUERGTm9kZVN0cmVhbVJhbmdlUmVhZGVyKHN0cmVhbSwgc3RhcnQsIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUERGTm9kZVN0cmVhbVJhbmdlUmVhZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNCA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihQREZOb2RlU3RyZWFtUmFuZ2VSZWFkZXIpLmNhbGwodGhpcywgc3RyZWFtKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM0Ll9odHRwSGVhZGVycyA9IHt9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gc3RyZWFtLmh0dHBIZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHN0cmVhbS5odHRwSGVhZGVyc1twcm9wZXJ0eV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM0Ll9odHRwSGVhZGVyc1twcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczQuX2h0dHBIZWFkZXJzWydSYW5nZSddID0gXCJieXRlcz1cIi5jb25jYXQoc3RhcnQsIFwiLVwiKS5jb25jYXQoZW5kIC0gMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxlUmVzcG9uc2UgPSBmdW5jdGlvbiBoYW5kbGVSZXNwb25zZShyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA9PT0gNDA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSBuZXcgX3V0aWwuTWlzc2luZ1BERkV4Y2VwdGlvbihcIk1pc3NpbmcgUERGIFxcXCJcIi5jb25jYXQoX3RoaXM0Ll91cmwsIFwiXFxcIi5cIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM0Ll9zdG9yZWRFcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM0Ll9zZXRSZWFkYWJsZVN0cmVhbShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5fcmVxdWVzdCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXM0Ll91cmwucHJvdG9jb2wgPT09ICdodHRwOicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM0Ll9yZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0KGNyZWF0ZVJlcXVlc3RPcHRpb25zKF90aGlzNC5fdXJsLCBfdGhpczQuX2h0dHBIZWFkZXJzKSwgaGFuZGxlUmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5fcmVxdWVzdCA9IGh0dHBzLnJlcXVlc3QoY3JlYXRlUmVxdWVzdE9wdGlvbnMoX3RoaXM0Ll91cmwsIF90aGlzNC5faHR0cEhlYWRlcnMpLCBoYW5kbGVSZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM0Ll9yZXF1ZXN0Lm9uKCdlcnJvcicsIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM0Ll9zdG9yZWRFcnJvciA9IHJlYXNvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5fcmVxdWVzdC5lbmQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQREZOb2RlU3RyZWFtUmFuZ2VSZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgIH0oQmFzZVJhbmdlUmVhZGVyKTtcblxuICAgICAgICAgICAgICAgIHZhciBQREZOb2RlU3RyZWFtRnNGdWxsUmVhZGVyID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0Jhc2VGdWxsUmVhZGVyMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFBERk5vZGVTdHJlYW1Gc0Z1bGxSZWFkZXIsIF9CYXNlRnVsbFJlYWRlcjIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQREZOb2RlU3RyZWFtRnNGdWxsUmVhZGVyKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUERGTm9kZVN0cmVhbUZzRnVsbFJlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoUERGTm9kZVN0cmVhbUZzRnVsbFJlYWRlcikuY2FsbCh0aGlzLCBzdHJlYW0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF0aCA9IGRlY29kZVVSSUNvbXBvbmVudChfdGhpczUuX3VybC5wYXRoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlVXJpUmVnZXgudGVzdChfdGhpczUuX3VybC5ocmVmKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eXFwvLywgJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzLmxzdGF0KHBhdGgsIGZ1bmN0aW9uIChlcnJvciwgc3RhdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24oXCJNaXNzaW5nIFBERiBcXFwiXCIuY29uY2F0KHBhdGgsIFwiXFxcIi5cIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuX3N0b3JlZEVycm9yID0gZXJyb3I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNS5faGVhZGVyc0NhcGFiaWxpdHkucmVqZWN0KGVycm9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM1Ll9jb250ZW50TGVuZ3RoID0gc3RhdC5zaXplO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNS5fc2V0UmVhZGFibGVTdHJlYW0oZnMuY3JlYXRlUmVhZFN0cmVhbShwYXRoKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM1Ll9oZWFkZXJzQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBERk5vZGVTdHJlYW1Gc0Z1bGxSZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgIH0oQmFzZUZ1bGxSZWFkZXIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBERk5vZGVTdHJlYW1Gc1JhbmdlUmVhZGVyID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0Jhc2VSYW5nZVJlYWRlcjIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhQREZOb2RlU3RyZWFtRnNSYW5nZVJlYWRlciwgX0Jhc2VSYW5nZVJlYWRlcjIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQREZOb2RlU3RyZWFtRnNSYW5nZVJlYWRlcihzdHJlYW0sIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM2O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBERk5vZGVTdHJlYW1Gc1JhbmdlUmVhZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNiA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihQREZOb2RlU3RyZWFtRnNSYW5nZVJlYWRlcikuY2FsbCh0aGlzLCBzdHJlYW0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF0aCA9IGRlY29kZVVSSUNvbXBvbmVudChfdGhpczYuX3VybC5wYXRoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlVXJpUmVnZXgudGVzdChfdGhpczYuX3VybC5ocmVmKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eXFwvLywgJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5fc2V0UmVhZGFibGVTdHJlYW0oZnMuY3JlYXRlUmVhZFN0cmVhbShwYXRoLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBlbmQgLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBERk5vZGVTdHJlYW1Gc1JhbmdlUmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICB9KEJhc2VSYW5nZVJlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE2NiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuY3JlYXRlUmVzcG9uc2VTdGF0dXNFcnJvciA9IGNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3I7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5leHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyID0gZXh0cmFjdEZpbGVuYW1lRnJvbUhlYWRlcjtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlUmFuZ2VSZXF1ZXN0Q2FwYWJpbGl0aWVzID0gdmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXM7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzID0gdmFsaWRhdGVSZXNwb25zZVN0YXR1cztcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2NvbnRlbnRfZGlzcG9zaXRpb24gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2Nyk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcyhfcmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBnZXRSZXNwb25zZUhlYWRlciA9IF9yZWYuZ2V0UmVzcG9uc2VIZWFkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0h0dHAgPSBfcmVmLmlzSHR0cCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlQ2h1bmtTaXplID0gX3JlZi5yYW5nZUNodW5rU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVSYW5nZSA9IF9yZWYuZGlzYWJsZVJhbmdlO1xuICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KShyYW5nZUNodW5rU2l6ZSA+IDAsICdSYW5nZSBjaHVuayBzaXplIG11c3QgYmUgbGFyZ2VyIHRoYW4gemVybycpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmV0dXJuVmFsdWVzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dSYW5nZVJlcXVlc3RzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Z2dlc3RlZExlbmd0aDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBwYXJzZUludChnZXRSZXNwb25zZUhlYWRlcignQ29udGVudC1MZW5ndGgnKSwgMTApO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihsZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWVzLnN1Z2dlc3RlZExlbmd0aCA9IGxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobGVuZ3RoIDw9IDIgKiByYW5nZUNodW5rU2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlcztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChkaXNhYmxlUmFuZ2UgfHwgIWlzSHR0cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlcztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChnZXRSZXNwb25zZUhlYWRlcignQWNjZXB0LVJhbmdlcycpICE9PSAnYnl0ZXMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnRFbmNvZGluZyA9IGdldFJlc3BvbnNlSGVhZGVyKCdDb250ZW50LUVuY29kaW5nJykgfHwgJ2lkZW50aXR5JztcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudEVuY29kaW5nICE9PSAnaWRlbnRpdHknKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWVzLmFsbG93UmFuZ2VSZXF1ZXN0cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZXM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZXh0cmFjdEZpbGVuYW1lRnJvbUhlYWRlcihnZXRSZXNwb25zZUhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudERpc3Bvc2l0aW9uID0gZ2V0UmVzcG9uc2VIZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb24nKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudERpc3Bvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZW5hbWUgPSAoMCwgX2NvbnRlbnRfZGlzcG9zaXRpb24uZ2V0RmlsZW5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uSGVhZGVyKShjb250ZW50RGlzcG9zaXRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoL1xcLnBkZiQvaS50ZXN0KGZpbGVuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3Ioc3RhdHVzLCB1cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0IHx8IHN0YXR1cyA9PT0gMCAmJiAvXmZpbGU6Ly50ZXN0KHVybCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX3V0aWwuTWlzc2luZ1BERkV4Y2VwdGlvbignTWlzc2luZyBQREYgXCInICsgdXJsICsgJ1wiLicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfdXRpbC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24oJ1VuZXhwZWN0ZWQgc2VydmVyIHJlc3BvbnNlICgnICsgc3RhdHVzICsgJykgd2hpbGUgcmV0cmlldmluZyBQREYgXCInICsgdXJsICsgJ1wiLicsIHN0YXR1cyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVSZXNwb25zZVN0YXR1cyhzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA2O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTY3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5nZXRGaWxlbmFtZUZyb21Db250ZW50RGlzcG9zaXRpb25IZWFkZXIgPSBnZXRGaWxlbmFtZUZyb21Db250ZW50RGlzcG9zaXRpb25IZWFkZXI7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2VcIik7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfZSA9IHVuZGVmaW5lZDsgdHJ5IHsgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldEZpbGVuYW1lRnJvbUNvbnRlbnREaXNwb3NpdGlvbkhlYWRlcihjb250ZW50RGlzcG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5lZWRzRW5jb2RpbmdGaXh1cCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0bXAgPSB0b1BhcmFtUmVnRXhwKCdmaWxlbmFtZVxcXFwqJywgJ2knKS5leGVjKGNvbnRlbnREaXNwb3NpdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRtcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gdG1wWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGVuYW1lID0gcmZjMjYxNnVucXVvdGUodG1wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gdW5lc2NhcGUoZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSByZmM1OTg3ZGVjb2RlKGZpbGVuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gcmZjMjA0N2RlY29kZShmaWxlbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZml4dXBFbmNvZGluZyhmaWxlbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0bXAgPSByZmMyMjMxZ2V0cGFyYW0oY29udGVudERpc3Bvc2l0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodG1wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2ZpbGVuYW1lID0gcmZjMjA0N2RlY29kZSh0bXApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZml4dXBFbmNvZGluZyhfZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdG1wID0gdG9QYXJhbVJlZ0V4cCgnZmlsZW5hbWUnLCAnaScpLmV4ZWMoY29udGVudERpc3Bvc2l0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodG1wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSB0bXBbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZmlsZW5hbWUyID0gcmZjMjYxNnVucXVvdGUodG1wKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgX2ZpbGVuYW1lMiA9IHJmYzIwNDdkZWNvZGUoX2ZpbGVuYW1lMik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZml4dXBFbmNvZGluZyhfZmlsZW5hbWUyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRvUGFyYW1SZWdFeHAoYXR0cmlidXRlUGF0dGVybiwgZmxhZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKCcoPzpefDspXFxcXHMqJyArIGF0dHJpYnV0ZVBhdHRlcm4gKyAnXFxcXHMqPVxcXFxzKicgKyAnKCcgKyAnW15cIjtcXFxcc11bXjtcXFxcc10qJyArICd8JyArICdcIig/OlteXCJcXFxcXFxcXF18XFxcXFxcXFxcIj8pK1wiPycgKyAnKScsIGZsYWdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRleHRkZWNvZGUoZW5jb2RpbmcsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5jb2RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIS9eW1xceDAwLVxceEZGXSskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZXMgPSBBcnJheS5mcm9tKHZhbHVlLCBmdW5jdGlvbiAoY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaC5jaGFyQ29kZUF0KDApICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZGVjb2Rlci5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoYnl0ZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHNFbmNvZGluZ0ZpeHVwID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoL151dGYtPzgkL2kudGVzdChlbmNvZGluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHNFbmNvZGluZ0ZpeHVwID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZpeHVwRW5jb2RpbmcodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZWVkc0VuY29kaW5nRml4dXAgJiYgL1tcXHg4MC1cXHhmZl0vLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0ZXh0ZGVjb2RlKCd1dGYtOCcsIHZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZWVkc0VuY29kaW5nRml4dXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0ZXh0ZGVjb2RlKCdpc28tODg1OS0xJywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmZjMjIzMWdldHBhcmFtKGNvbnRlbnREaXNwb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVyID0gdG9QYXJhbVJlZ0V4cCgnZmlsZW5hbWVcXFxcKigoPyEwXFxcXGQpXFxcXGQrKShcXFxcKj8pJywgJ2lnJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSBpdGVyLmV4ZWMoY29udGVudERpc3Bvc2l0aW9uKSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX21hdGNoID0gbWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tYXRjaDIgPSBfc2xpY2VkVG9BcnJheShfbWF0Y2gsIDQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gX21hdGNoMlsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdCA9IF9tYXRjaDJbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQgPSBfbWF0Y2gyWzNdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IHBhcnNlSW50KG4sIDEwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuIGluIG1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlc1tuXSA9IFtxdW90LCBwYXJ0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnRzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgbWF0Y2hlcy5sZW5ndGg7ICsrbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG4gaW4gbWF0Y2hlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9tYXRjaGVzJG4gPSBfc2xpY2VkVG9BcnJheShtYXRjaGVzW25dLCAyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdCA9IF9tYXRjaGVzJG5bMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQgPSBfbWF0Y2hlcyRuWzFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydCA9IHJmYzI2MTZ1bnF1b3RlKHBhcnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1b3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydCA9IHVuZXNjYXBlKHBhcnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gcmZjNTk4N2RlY29kZShwYXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLnB1c2gocGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0cy5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJmYzI2MTZ1bnF1b3RlKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnXCInKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJ0cyA9IHZhbHVlLnNsaWNlKDEpLnNwbGl0KCdcXFxcXCInKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1b3RpbmRleCA9IHBhcnRzW2ldLmluZGV4T2YoJ1wiJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1b3RpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzW2ldID0gcGFydHNbaV0uc2xpY2UoMCwgcXVvdGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLmxlbmd0aCA9IGkgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydHNbaV0gPSBwYXJ0c1tpXS5yZXBsYWNlKC9cXFxcKC4pL2csICckMScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFydHMuam9pbignXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmZjNTk4N2RlY29kZShleHR2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY29kaW5nZW5kID0gZXh0dmFsdWUuaW5kZXhPZignXFwnJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmNvZGluZ2VuZCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXh0dmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNvZGluZyA9IGV4dHZhbHVlLnNsaWNlKDAsIGVuY29kaW5nZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYW5ndmFsdWUgPSBleHR2YWx1ZS5zbGljZShlbmNvZGluZ2VuZCArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gbGFuZ3ZhbHVlLnJlcGxhY2UoL15bXiddKicvLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dGRlY29kZShlbmNvZGluZywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmZjMjA0N2RlY29kZSh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5zdGFydHNXaXRoKCc9PycpIHx8IC9bXFx4MDAtXFx4MTlcXHg4MC1cXHhmZl0vLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvPVxcPyhbXFx3LV0qKVxcPyhbUXFCYl0pXFw/KCg/OlteP118XFw/KD8hPSkpKilcXD89L2csIGZ1bmN0aW9uIChfLCBjaGFyc2V0LCBlbmNvZGluZywgdGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmNvZGluZyA9PT0gJ3EnIHx8IGVuY29kaW5nID09PSAnUScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXy9nLCAnICcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC89KFswLTlhLWZBLUZdezJ9KS9nLCBmdW5jdGlvbiAoXywgaGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChoZXgsIDE2KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dGRlY29kZShjaGFyc2V0LCB0ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gYXRvYih0ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHRkZWNvZGUoY2hhcnNldCwgdGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE2OCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUERGRmV0Y2hTdHJlYW0gPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3JlZ2VuZXJhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0NykpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxKTtcblxuICAgICAgICAgICAgICAgIHZhciBfbmV0d29ya191dGlscyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTY2KTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7IHRyeSB7IHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTsgdmFyIHZhbHVlID0gaW5mby52YWx1ZTsgfSBjYXRjaCAoZXJyb3IpIHsgcmVqZWN0KGVycm9yKTsgcmV0dXJuOyB9IGlmIChpbmZvLmRvbmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0gZWxzZSB7IFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyB2YXIgc2VsZiA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTsgZnVuY3Rpb24gX25leHQodmFsdWUpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpOyB9IGZ1bmN0aW9uIF90aHJvdyhlcnIpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7IH0gX25leHQodW5kZWZpbmVkKTsgfSk7IH07IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlRmV0Y2hPcHRpb25zKGhlYWRlcnMsIHdpdGhDcmVkZW50aWFscywgYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbDogYWJvcnRDb250cm9sbGVyICYmIGFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlOiAnY29ycycsXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogd2l0aENyZWRlbnRpYWxzID8gJ2luY2x1ZGUnIDogJ3NhbWUtb3JpZ2luJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0OiAnZm9sbG93J1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBQREZGZXRjaFN0cmVhbSA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUERGRmV0Y2hTdHJlYW0oc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBERkZldGNoU3RyZWFtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNIdHRwID0gL15odHRwcz86L2kudGVzdChzb3VyY2UudXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmh0dHBIZWFkZXJzID0gdGhpcy5pc0h0dHAgJiYgc291cmNlLmh0dHBIZWFkZXJzIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhQREZGZXRjaFN0cmVhbSwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0RnVsbFJlYWRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGdWxsUmVhZGVyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IG5ldyBQREZGZXRjaFN0cmVhbVJlYWRlcih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UmFuZ2VSZWFkZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmFuZ2VSZWFkZXIoYmVnaW4sIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IFBERkZldGNoU3RyZWFtUmFuZ2VSZWFkZXIodGhpcywgYmVnaW4sIGVuZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5wdXNoKHJlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNhbmNlbEFsbFJlcXVlc3RzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNhbmNlbEFsbFJlcXVlc3RzKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlcnMgPSB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlcnMuZm9yRWFjaChmdW5jdGlvbiAocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuY2FuY2VsKHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBERkZldGNoU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlBERkZldGNoU3RyZWFtID0gUERGRmV0Y2hTdHJlYW07XG5cbiAgICAgICAgICAgICAgICB2YXIgUERGRmV0Y2hTdHJlYW1SZWFkZXIgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBERkZldGNoU3RyZWFtUmVhZGVyKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUERGRmV0Y2hTdHJlYW1SZWFkZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9hZGVkID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWxlbmFtZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHN0cmVhbS5zb3VyY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2l0aENyZWRlbnRpYWxzID0gc291cmNlLndpdGhDcmVkZW50aWFscztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50TGVuZ3RoID0gc291cmNlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaXNhYmxlUmFuZ2UgPSBzb3VyY2UuZGlzYWJsZVJhbmdlIHx8IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlQ2h1bmtTaXplID0gc291cmNlLnJhbmdlQ2h1bmtTaXplO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9yYW5nZUNodW5rU2l6ZSAmJiAhdGhpcy5fZGlzYWJsZVJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rpc2FibGVSYW5nZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBBYm9ydENvbnRyb2xsZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Fib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9ICFzb3VyY2UuZGlzYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gIXNvdXJjZS5kaXNhYmxlUmFuZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzLl9zdHJlYW0uaHR0cEhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fc3RyZWFtLmh0dHBIZWFkZXJzW3Byb3BlcnR5XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWFkZXJzLmFwcGVuZChwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSBzb3VyY2UudXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoKHVybCwgY3JlYXRlRmV0Y2hPcHRpb25zKHRoaXMuX2hlYWRlcnMsIHRoaXMuX3dpdGhDcmVkZW50aWFscywgdGhpcy5fYWJvcnRDb250cm9sbGVyKSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX25ldHdvcmtfdXRpbHMudmFsaWRhdGVSZXNwb25zZVN0YXR1cykocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgKDAsIF9uZXR3b3JrX3V0aWxzLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKHJlc3BvbnNlLnN0YXR1cywgdXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9yZWFkZXIgPSByZXNwb25zZS5ib2R5LmdldFJlYWRlcigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdldFJlc3BvbnNlSGVhZGVyID0gZnVuY3Rpb24gZ2V0UmVzcG9uc2VIZWFkZXIobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdmFsaWRhdGVSYW5nZVJlcXVlc3QgPSAoMCwgX25ldHdvcmtfdXRpbHMudmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXMpKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZXNwb25zZUhlYWRlcjogZ2V0UmVzcG9uc2VIZWFkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNIdHRwOiBfdGhpcy5fc3RyZWFtLmlzSHR0cCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZUNodW5rU2l6ZTogX3RoaXMuX3JhbmdlQ2h1bmtTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVSYW5nZTogX3RoaXMuX2Rpc2FibGVSYW5nZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1JhbmdlUmVxdWVzdHMgPSBfdmFsaWRhdGVSYW5nZVJlcXVlc3QuYWxsb3dSYW5nZVJlcXVlc3RzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGVkTGVuZ3RoID0gX3ZhbGlkYXRlUmFuZ2VSZXF1ZXN0LnN1Z2dlc3RlZExlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5faXNSYW5nZVN1cHBvcnRlZCA9IGFsbG93UmFuZ2VSZXF1ZXN0cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2NvbnRlbnRMZW5ndGggPSBzdWdnZXN0ZWRMZW5ndGggfHwgX3RoaXMuX2NvbnRlbnRMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9maWxlbmFtZSA9ICgwLCBfbmV0d29ya191dGlscy5leHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyKShnZXRSZXNwb25zZUhlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQgJiYgX3RoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmNhbmNlbChuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24oJ3N0cmVhbWluZyBpcyBkaXNhYmxlZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFBERkZldGNoU3RyZWFtUmVhZGVyLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZWFkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWFkID0gX2FzeW5jVG9HZW5lcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVnZW5lcmF0b3IuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWYsIHZhbHVlLCBkb25lLCBidWZmZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWRlci5yZWFkKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYgPSBfY29udGV4dC5zZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IF9yZWYudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBfcmVmLmRvbmU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdChcInJldHVyblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lOiBkb25lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkZWQgKz0gdmFsdWUuYnl0ZUxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUHJvZ3Jlc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogdGhpcy5fbG9hZGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsOiB0aGlzLl9jb250ZW50TGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHZhbHVlKS5idWZmZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBfY2FsbGVlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZWFkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY2FuY2VsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNhbmNlbChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Fib3J0Q29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImhlYWRlcnNSZWFkeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImZpbGVuYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWxlbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNvbnRlbnRMZW5ndGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpc1JhbmdlU3VwcG9ydGVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXNTdHJlYW1pbmdTdXBwb3J0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBERkZldGNoU3RyZWFtUmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgUERGRmV0Y2hTdHJlYW1SYW5nZVJlYWRlciA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUERGRmV0Y2hTdHJlYW1SYW5nZVJlYWRlcihzdHJlYW0sIGJlZ2luLCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQREZGZXRjaFN0cmVhbVJhbmdlUmVhZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRlZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHN0cmVhbS5zb3VyY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2l0aENyZWRlbnRpYWxzID0gc291cmNlLndpdGhDcmVkZW50aWFscztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9ICFzb3VyY2UuZGlzYWJsZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgQWJvcnRDb250cm9sbGVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzLl9zdHJlYW0uaHR0cEhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fc3RyZWFtLmh0dHBIZWFkZXJzW3Byb3BlcnR5XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWFkZXJzLmFwcGVuZChwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5nZVN0ciA9IGJlZ2luICsgJy0nICsgKGVuZCAtIDEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVhZGVycy5hcHBlbmQoJ1JhbmdlJywgJ2J5dGVzPScgKyByYW5nZVN0cik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gc291cmNlLnVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaCh1cmwsIGNyZWF0ZUZldGNoT3B0aW9ucyh0aGlzLl9oZWFkZXJzLCB0aGlzLl93aXRoQ3JlZGVudGlhbHMsIHRoaXMuX2Fib3J0Q29udHJvbGxlcikpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9uZXR3b3JrX3V0aWxzLnZhbGlkYXRlUmVzcG9uc2VTdGF0dXMpKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93ICgwLCBfbmV0d29ya191dGlscy5jcmVhdGVSZXNwb25zZVN0YXR1c0Vycm9yKShyZXNwb25zZS5zdGF0dXMsIHVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuX3JlYWRlciA9IHJlc3BvbnNlLmJvZHkuZ2V0UmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFBERkZldGNoU3RyZWFtUmFuZ2VSZWFkZXIsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlYWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlYWQyID0gX2FzeW5jVG9HZW5lcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVnZW5lcmF0b3IuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVmMiwgdmFsdWUsIGRvbmUsIGJ1ZmZlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyJChfY29udGV4dDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQyLnByZXYgPSBfY29udGV4dDIubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVhZENhcGFiaWxpdHkucHJvbWlzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVhZGVyLnJlYWQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjIgPSBfY29udGV4dDIuc2VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBfcmVmMi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IF9yZWYyLmRvbmU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KFwicmV0dXJuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IGRvbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRlZCArPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkOiB0aGlzLl9sb2FkZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpLmJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoXCJyZXR1cm5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgX2NhbGxlZTIsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlYWQyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY2FuY2VsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNhbmNlbChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Fib3J0Q29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImlzU3RyZWFtaW5nU3VwcG9ydGVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQREZGZXRjaFN0cmVhbVJhbmdlUmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE2OSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUERGTmV0d29ya1N0cmVhbSA9IFBERk5ldHdvcmtTdHJlYW07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5OZXR3b3JrTWFuYWdlciA9IE5ldHdvcmtNYW5hZ2VyO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9yZWdlbmVyYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNDcpKTtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX25ldHdvcmtfdXRpbHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2Nik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2dsb2JhbF9zY29wZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzKSk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykgeyB0cnkgeyB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7IHZhciB2YWx1ZSA9IGluZm8udmFsdWU7IH0gY2F0Y2ggKGVycm9yKSB7IHJlamVjdChlcnJvcik7IHJldHVybjsgfSBpZiAoaW5mby5kb25lKSB7IHJlc29sdmUodmFsdWUpOyB9IGVsc2UgeyBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbiAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgdmFyIE9LX1JFU1BPTlNFID0gMjAwO1xuICAgICAgICAgICAgICAgIHZhciBQQVJUSUFMX0NPTlRFTlRfUkVTUE9OU0UgPSAyMDY7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBOZXR3b3JrTWFuYWdlcih1cmwsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cmwgPSB1cmw7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzSHR0cCA9IC9eaHR0cHM/Oi9pLnRlc3QodXJsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5odHRwSGVhZGVycyA9IHRoaXMuaXNIdHRwICYmIGFyZ3MuaHR0cEhlYWRlcnMgfHwge307XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2l0aENyZWRlbnRpYWxzID0gYXJncy53aXRoQ3JlZGVudGlhbHMgfHwgZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRYaHIgPSBhcmdzLmdldFhociB8fCBmdW5jdGlvbiBOZXR3b3JrTWFuYWdlcl9nZXRYaHIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyWGhySWQgPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkUmVxdWVzdHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldEFycmF5QnVmZmVyKHhocikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHhoci5yZXNwb25zZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBhcnJheSA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5LmJ1ZmZlcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgc3VwcG9ydHNNb3pDaHVua2VkID0gZnVuY3Rpb24gc3VwcG9ydHNNb3pDaHVua2VkQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB4Lm9wZW4oJ0dFVCcsIF9nbG9iYWxfc2NvcGUuZGVmYXVsdC5sb2NhdGlvbi5ocmVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHgucmVzcG9uc2VUeXBlID0gJ21vei1jaHVua2VkLWFycmF5YnVmZmVyJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnJlc3BvbnNlVHlwZSA9PT0gJ21vei1jaHVua2VkLWFycmF5YnVmZmVyJztcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgTmV0d29ya01hbmFnZXIucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0UmFuZ2U6IGZ1bmN0aW9uIE5ldHdvcmtNYW5hZ2VyX3JlcXVlc3RSYW5nZShiZWdpbiwgZW5kLCBsaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiBiZWdpbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IGVuZFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBsaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW3Byb3BdID0gbGlzdGVuZXJzW3Byb3BdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RnVsbDogZnVuY3Rpb24gTmV0d29ya01hbmFnZXJfcmVxdWVzdEZ1bGwobGlzdGVuZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KGxpc3RlbmVycyk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6IGZ1bmN0aW9uIE5ldHdvcmtNYW5hZ2VyX3JlcXVlc3QoYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhociA9IHRoaXMuZ2V0WGhyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeGhySWQgPSB0aGlzLmN1cnJYaHJJZCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBlbmRpbmdSZXF1ZXN0ID0gdGhpcy5wZW5kaW5nUmVxdWVzdHNbeGhySWRdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhocjogeGhyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIHRoaXMudXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0aGlzLndpdGhDcmVkZW50aWFscztcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcy5odHRwSGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuaHR0cEhlYWRlcnNbcHJvcGVydHldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIocHJvcGVydHksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNIdHRwICYmICdiZWdpbicgaW4gYXJncyAmJiAnZW5kJyBpbiBhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlU3RyID0gYXJncy5iZWdpbiArICctJyArIChhcmdzLmVuZCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdSYW5nZScsICdieXRlcz0nICsgcmFuZ2VTdHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0LmV4cGVjdGVkU3RhdHVzID0gMjA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUmVxdWVzdC5leHBlY3RlZFN0YXR1cyA9IDIwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVzZU1vekNodW5rZWRMb2FkaW5nID0gc3VwcG9ydHNNb3pDaHVua2VkICYmICEhYXJncy5vblByb2dyZXNzaXZlRGF0YTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZU1vekNodW5rZWRMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdtb3otY2h1bmtlZC1hcnJheWJ1ZmZlcic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3Qub25Qcm9ncmVzc2l2ZURhdGEgPSBhcmdzLm9uUHJvZ3Jlc3NpdmVEYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0Lm1vekNodW5rZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3Mub25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLm9uRXJyb3IoeGhyLnN0YXR1cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMsIHhocklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vbnByb2dyZXNzID0gdGhpcy5vblByb2dyZXNzLmJpbmQodGhpcywgeGhySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3Qub25IZWFkZXJzUmVjZWl2ZWQgPSBhcmdzLm9uSGVhZGVyc1JlY2VpdmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3Qub25Eb25lID0gYXJncy5vbkRvbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUmVxdWVzdC5vbkVycm9yID0gYXJncy5vbkVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3Qub25Qcm9ncmVzcyA9IGFyZ3Mub25Qcm9ncmVzcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoci5zZW5kKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHhocklkO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBvblByb2dyZXNzOiBmdW5jdGlvbiBOZXR3b3JrTWFuYWdlcl9vblByb2dyZXNzKHhocklkLCBldnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwZW5kaW5nUmVxdWVzdCA9IHRoaXMucGVuZGluZ1JlcXVlc3RzW3hocklkXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwZW5kaW5nUmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlbmRpbmdSZXF1ZXN0Lm1vekNodW5rZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSBnZXRBcnJheUJ1ZmZlcihwZW5kaW5nUmVxdWVzdC54aHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0Lm9uUHJvZ3Jlc3NpdmVEYXRhKGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9uUHJvZ3Jlc3MgPSBwZW5kaW5nUmVxdWVzdC5vblByb2dyZXNzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3MoZXZ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgb25TdGF0ZUNoYW5nZTogZnVuY3Rpb24gTmV0d29ya01hbmFnZXJfb25TdGF0ZUNoYW5nZSh4aHJJZCwgZXZ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGVuZGluZ1JlcXVlc3QgPSB0aGlzLnBlbmRpbmdSZXF1ZXN0c1t4aHJJZF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGVuZGluZ1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4aHIgPSBwZW5kaW5nUmVxdWVzdC54aHI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA+PSAyICYmIHBlbmRpbmdSZXF1ZXN0Lm9uSGVhZGVyc1JlY2VpdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3Qub25IZWFkZXJzUmVjZWl2ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGVuZGluZ1JlcXVlc3Qub25IZWFkZXJzUmVjZWl2ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoeGhySWQgaW4gdGhpcy5wZW5kaW5nUmVxdWVzdHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wZW5kaW5nUmVxdWVzdHNbeGhySWRdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMCAmJiB0aGlzLmlzSHR0cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZW5kaW5nUmVxdWVzdC5vbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0Lm9uRXJyb3IoeGhyLnN0YXR1cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeGhyU3RhdHVzID0geGhyLnN0YXR1cyB8fCBPS19SRVNQT05TRTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBva19yZXNwb25zZV9vbl9yYW5nZV9yZXF1ZXN0ID0geGhyU3RhdHVzID09PSBPS19SRVNQT05TRSAmJiBwZW5kaW5nUmVxdWVzdC5leHBlY3RlZFN0YXR1cyA9PT0gUEFSVElBTF9DT05URU5UX1JFU1BPTlNFO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9rX3Jlc3BvbnNlX29uX3JhbmdlX3JlcXVlc3QgJiYgeGhyU3RhdHVzICE9PSBwZW5kaW5nUmVxdWVzdC5leHBlY3RlZFN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZW5kaW5nUmVxdWVzdC5vbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0Lm9uRXJyb3IoeGhyLnN0YXR1cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZFJlcXVlc3RzW3hocklkXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSBnZXRBcnJheUJ1ZmZlcih4aHIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeGhyU3RhdHVzID09PSBQQVJUSUFMX0NPTlRFTlRfUkVTUE9OU0UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2VIZWFkZXIgPSB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ0NvbnRlbnQtUmFuZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IC9ieXRlcyAoXFxkKyktKFxcZCspXFwvKFxcZCspLy5leGVjKHJhbmdlSGVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmVnaW4gPSBwYXJzZUludChtYXRjaGVzWzFdLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3Qub25Eb25lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46IGJlZ2luLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuazogY2h1bmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVuZGluZ1JlcXVlc3Qub25Qcm9ncmVzc2l2ZURhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUmVxdWVzdC5vbkRvbmUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3Qub25Eb25lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rOiBjaHVua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwZW5kaW5nUmVxdWVzdC5vbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3Qub25FcnJvcih4aHIuc3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgaGFzUGVuZGluZ1JlcXVlc3RzOiBmdW5jdGlvbiBOZXR3b3JrTWFuYWdlcl9oYXNQZW5kaW5nUmVxdWVzdHMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB4aHJJZCBpbiB0aGlzLnBlbmRpbmdSZXF1ZXN0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGdldFJlcXVlc3RYaHI6IGZ1bmN0aW9uIE5ldHdvcmtNYW5hZ2VyX2dldFhocih4aHJJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGVuZGluZ1JlcXVlc3RzW3hocklkXS54aHI7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGlzU3RyZWFtaW5nUmVxdWVzdDogZnVuY3Rpb24gTmV0d29ya01hbmFnZXJfaXNTdHJlYW1pbmdSZXF1ZXN0KHhocklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISF0aGlzLnBlbmRpbmdSZXF1ZXN0c1t4aHJJZF0ub25Qcm9ncmVzc2l2ZURhdGE7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGlzUGVuZGluZ1JlcXVlc3Q6IGZ1bmN0aW9uIE5ldHdvcmtNYW5hZ2VyX2lzUGVuZGluZ1JlcXVlc3QoeGhySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4aHJJZCBpbiB0aGlzLnBlbmRpbmdSZXF1ZXN0cztcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgaXNMb2FkZWRSZXF1ZXN0OiBmdW5jdGlvbiBOZXR3b3JrTWFuYWdlcl9pc0xvYWRlZFJlcXVlc3QoeGhySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4aHJJZCBpbiB0aGlzLmxvYWRlZFJlcXVlc3RzO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBhYm9ydEFsbFJlcXVlc3RzOiBmdW5jdGlvbiBOZXR3b3JrTWFuYWdlcl9hYm9ydEFsbFJlcXVlc3RzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgeGhySWQgaW4gdGhpcy5wZW5kaW5nUmVxdWVzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFib3J0UmVxdWVzdCh4aHJJZCB8IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBhYm9ydFJlcXVlc3Q6IGZ1bmN0aW9uIE5ldHdvcmtNYW5hZ2VyX2Fib3J0UmVxdWVzdCh4aHJJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhociA9IHRoaXMucGVuZGluZ1JlcXVlc3RzW3hocklkXS54aHI7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wZW5kaW5nUmVxdWVzdHNbeGhySWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgeGhyLmFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gUERGTmV0d29ya1N0cmVhbShzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc291cmNlID0gc291cmNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYW5hZ2VyID0gbmV3IE5ldHdvcmtNYW5hZ2VyKHNvdXJjZS51cmwsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBIZWFkZXJzOiBzb3VyY2UuaHR0cEhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHNvdXJjZS53aXRoQ3JlZGVudGlhbHNcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlQ2h1bmtTaXplID0gc291cmNlLnJhbmdlQ2h1bmtTaXplO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBQREZOZXR3b3JrU3RyZWFtLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgX29uUmFuZ2VSZXF1ZXN0UmVhZGVyQ2xvc2VkOiBmdW5jdGlvbiBQREZOZXR3b3JrU3RyZWFtX29uUmFuZ2VSZXF1ZXN0UmVhZGVyQ2xvc2VkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLmluZGV4T2YocmVhZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBnZXRGdWxsUmVhZGVyOiBmdW5jdGlvbiBQREZOZXR3b3JrU3RyZWFtX2dldEZ1bGxSZWFkZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBuZXcgUERGTmV0d29ya1N0cmVhbUZ1bGxSZXF1ZXN0UmVhZGVyKHRoaXMuX21hbmFnZXIsIHRoaXMuX3NvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGdldFJhbmdlUmVhZGVyOiBmdW5jdGlvbiBQREZOZXR3b3JrU3RyZWFtX2dldFJhbmdlUmVhZGVyKGJlZ2luLCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkZXIgPSBuZXcgUERGTmV0d29ya1N0cmVhbVJhbmdlUmVxdWVzdFJlYWRlcih0aGlzLl9tYW5hZ2VyLCBiZWdpbiwgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5vbkNsb3NlZCA9IHRoaXMuX29uUmFuZ2VSZXF1ZXN0UmVhZGVyQ2xvc2VkLmJpbmQodGhpcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChyZWFkZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBjYW5jZWxBbGxSZXF1ZXN0czogZnVuY3Rpb24gUERGTmV0d29ya1N0cmVhbV9jYW5jZWxBbGxSZXF1ZXN0cyhyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGVycyA9IHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlcnMuZm9yRWFjaChmdW5jdGlvbiAocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gUERGTmV0d29ya1N0cmVhbUZ1bGxSZXF1ZXN0UmVhZGVyKG1hbmFnZXIsIHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYW5hZ2VyID0gbWFuYWdlcjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkhlYWRlcnNSZWNlaXZlZDogdGhpcy5fb25IZWFkZXJzUmVjZWl2ZWQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3NpdmVEYXRhOiBzb3VyY2UuZGlzYWJsZVN0cmVhbSA/IG51bGwgOiB0aGlzLl9vblByb2dyZXNzaXZlRGF0YS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25Eb25lOiB0aGlzLl9vbkRvbmUuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3I6IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3M6IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91cmwgPSBzb3VyY2UudXJsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mdWxsUmVxdWVzdElkID0gbWFuYWdlci5yZXF1ZXN0RnVsbChhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVhZGVyc1JlY2VpdmVkQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlzYWJsZVJhbmdlID0gc291cmNlLmRpc2FibGVSYW5nZSB8fCBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGVudExlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlQ2h1bmtTaXplID0gc291cmNlLnJhbmdlQ2h1bmtTaXplO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fcmFuZ2VDaHVua1NpemUgJiYgIXRoaXMuX2Rpc2FibGVSYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlzYWJsZVJhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkQ2h1bmtzID0gW107XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RzID0gW107XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcmVkRXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbGVuYW1lID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBQREZOZXR3b3JrU3RyZWFtRnVsbFJlcXVlc3RSZWFkZXIucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICBfb25IZWFkZXJzUmVjZWl2ZWQ6IGZ1bmN0aW9uIFBERk5ldHdvcmtTdHJlYW1GdWxsUmVxdWVzdFJlYWRlcl9vbkhlYWRlcnNSZWNlaXZlZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmdWxsUmVxdWVzdFhocklkID0gdGhpcy5fZnVsbFJlcXVlc3RJZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZ1bGxSZXF1ZXN0WGhyID0gdGhpcy5fbWFuYWdlci5nZXRSZXF1ZXN0WGhyKGZ1bGxSZXF1ZXN0WGhySWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2V0UmVzcG9uc2VIZWFkZXIgPSBmdW5jdGlvbiBnZXRSZXNwb25zZUhlYWRlcihuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bGxSZXF1ZXN0WGhyLmdldFJlc3BvbnNlSGVhZGVyKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF92YWxpZGF0ZVJhbmdlUmVxdWVzdCA9ICgwLCBfbmV0d29ya191dGlscy52YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcykoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZXNwb25zZUhlYWRlcjogZ2V0UmVzcG9uc2VIZWFkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSHR0cDogdGhpcy5fbWFuYWdlci5pc0h0dHAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlQ2h1bmtTaXplOiB0aGlzLl9yYW5nZUNodW5rU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZVJhbmdlOiB0aGlzLl9kaXNhYmxlUmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1JhbmdlUmVxdWVzdHMgPSBfdmFsaWRhdGVSYW5nZVJlcXVlc3QuYWxsb3dSYW5nZVJlcXVlc3RzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Z2dlc3RlZExlbmd0aCA9IF92YWxpZGF0ZVJhbmdlUmVxdWVzdC5zdWdnZXN0ZWRMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxvd1JhbmdlUmVxdWVzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGVudExlbmd0aCA9IHN1Z2dlc3RlZExlbmd0aCB8fCB0aGlzLl9jb250ZW50TGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsZW5hbWUgPSAoMCwgX25ldHdvcmtfdXRpbHMuZXh0cmFjdEZpbGVuYW1lRnJvbUhlYWRlcikoZ2V0UmVzcG9uc2VIZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ldHdvcmtNYW5hZ2VyID0gdGhpcy5fbWFuYWdlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ldHdvcmtNYW5hZ2VyLmlzU3RyZWFtaW5nUmVxdWVzdChmdWxsUmVxdWVzdFhocklkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5faXNSYW5nZVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmtNYW5hZ2VyLmFib3J0UmVxdWVzdChmdWxsUmVxdWVzdFhocklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVhZGVyc1JlY2VpdmVkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF9vblByb2dyZXNzaXZlRGF0YTogZnVuY3Rpb24gUERGTmV0d29ya1N0cmVhbUZ1bGxSZXF1ZXN0UmVhZGVyX29uUHJvZ3Jlc3NpdmVEYXRhKGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVxdWVzdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXF1ZXN0Q2FwYWJpbGl0eSA9IHRoaXMuX3JlcXVlc3RzLnNoaWZ0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNodW5rLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRDaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF9vbkRvbmU6IGZ1bmN0aW9uIFBERk5ldHdvcmtTdHJlYW1GdWxsUmVxdWVzdFJlYWRlcl9vbkRvbmUoYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblByb2dyZXNzaXZlRGF0YShhcmdzLmNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZWRDaHVua3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdHMuZm9yRWFjaChmdW5jdGlvbiAocmVxdWVzdENhcGFiaWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RzID0gW107XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF9vbkVycm9yOiBmdW5jdGlvbiBQREZOZXR3b3JrU3RyZWFtRnVsbFJlcXVlc3RSZWFkZXJfb25FcnJvcihzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLl91cmw7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXhjZXB0aW9uID0gKDAsIF9uZXR3b3JrX3V0aWxzLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKHN0YXR1cywgdXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JlZEVycm9yID0gZXhjZXB0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWFkZXJzUmVjZWl2ZWRDYXBhYmlsaXR5LnJlamVjdChleGNlcHRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1ZXN0Q2FwYWJpbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RDYXBhYmlsaXR5LnJlamVjdChleGNlcHRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRDaHVua3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgX29uUHJvZ3Jlc3M6IGZ1bmN0aW9uIFBERk5ldHdvcmtTdHJlYW1GdWxsUmVxdWVzdFJlYWRlcl9vblByb2dyZXNzKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUHJvZ3Jlc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWQ6IGRhdGEubG9hZGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbDogZGF0YS5sZW5ndGhDb21wdXRhYmxlID8gZGF0YS50b3RhbCA6IHRoaXMuX2NvbnRlbnRMZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICBnZXQgZmlsZW5hbWUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsZW5hbWU7XG4gICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgZ2V0IGlzUmFuZ2VTdXBwb3J0ZWQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNSYW5nZVN1cHBvcnRlZDtcbiAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgZ2V0IGNvbnRlbnRMZW5ndGgoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudExlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICBnZXQgaGVhZGVyc1JlYWR5KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICByZWFkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlYWQgPSBfYXN5bmNUb0dlbmVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZ2VuZXJhdG9yLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmssIHJlcXVlc3RDYXBhYmlsaXR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fc3RvcmVkRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5fc3RvcmVkRXJyb3I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodGhpcy5fY2FjaGVkQ2h1bmtzLmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gdGhpcy5fY2FjaGVkQ2h1bmtzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2h1bmssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0cy5wdXNoKHJlcXVlc3RDYXBhYmlsaXR5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdChcInJldHVyblwiLCByZXF1ZXN0Q2FwYWJpbGl0eS5wcm9taXNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgX2NhbGxlZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVhZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhZDtcbiAgICAgICAgICAgICAgICAgICAgfSgpLFxuICAgICAgICAgICAgICAgICAgICBjYW5jZWw6IGZ1bmN0aW9uIFBERk5ldHdvcmtTdHJlYW1GdWxsUmVxdWVzdFJlYWRlcl9jYW5jZWwocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kb25lID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVhZGVyc1JlY2VpdmVkQ2FwYWJpbGl0eS5yZWplY3QocmVhc29uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdHMuZm9yRWFjaChmdW5jdGlvbiAocmVxdWVzdENhcGFiaWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tYW5hZ2VyLmlzUGVuZGluZ1JlcXVlc3QodGhpcy5fZnVsbFJlcXVlc3RJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYW5hZ2VyLmFib3J0UmVxdWVzdCh0aGlzLl9mdWxsUmVxdWVzdElkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBERk5ldHdvcmtTdHJlYW1SYW5nZVJlcXVlc3RSZWFkZXIobWFuYWdlciwgYmVnaW4sIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYW5hZ2VyID0gbWFuYWdlcjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkRvbmU6IHRoaXMuX29uRG9uZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25Qcm9ncmVzczogdGhpcy5fb25Qcm9ncmVzcy5iaW5kKHRoaXMpXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG1hbmFnZXIucmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZWRDaHVuayA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNsb3NlZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgUERGTmV0d29ya1N0cmVhbVJhbmdlUmVxdWVzdFJlYWRlci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIF9jbG9zZTogZnVuY3Rpb24gUERGTmV0d29ya1N0cmVhbVJhbmdlUmVxdWVzdFJlYWRlcl9jbG9zZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uQ2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNsb3NlZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgX29uRG9uZTogZnVuY3Rpb24gUERGTmV0d29ya1N0cmVhbVJhbmdlUmVxdWVzdFJlYWRlcl9vbkRvbmUoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rID0gZGF0YS5jaHVuaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVxdWVzdENhcGFiaWxpdHkgPSB0aGlzLl9yZXF1ZXN0cy5zaGlmdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdENhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjaHVuayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcXVldWVkQ2h1bmsgPSBjaHVuaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RzLmZvckVhY2goZnVuY3Rpb24gKHJlcXVlc3RDYXBhYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdENhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0cyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBfb25Qcm9ncmVzczogZnVuY3Rpb24gUERGTmV0d29ya1N0cmVhbVJhbmdlUmVxdWVzdFJlYWRlcl9vblByb2dyZXNzKGV2dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzU3RyZWFtaW5nU3VwcG9ydGVkICYmIHRoaXMub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogZXZ0LmxvYWRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgIGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICByZWFkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlYWQyID0gX2FzeW5jVG9HZW5lcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWdlbmVyYXRvci5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVuaywgcmVxdWVzdENhcGFiaWxpdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyJChfY29udGV4dDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDIucHJldiA9IF9jb250ZXh0Mi5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHRoaXMuX3F1ZXVlZENodW5rICE9PSBudWxsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmsgPSB0aGlzLl9xdWV1ZWRDaHVuaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXVlZENodW5rID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KFwicmV0dXJuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2h1bmssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoXCJyZXR1cm5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RzLnB1c2gocmVxdWVzdENhcGFiaWxpdHkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdChcInJldHVyblwiLCByZXF1ZXN0Q2FwYWJpbGl0eS5wcm9taXNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgX2NhbGxlZTIsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlYWQyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWFkO1xuICAgICAgICAgICAgICAgICAgICB9KCksXG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbDogZnVuY3Rpb24gUERGTmV0d29ya1N0cmVhbVJhbmdlUmVxdWVzdFJlYWRlcl9jYW5jZWwocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kb25lID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdHMuZm9yRWFjaChmdW5jdGlvbiAocmVxdWVzdENhcGFiaWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tYW5hZ2VyLmlzUGVuZGluZ1JlcXVlc3QodGhpcy5fcmVxdWVzdElkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hbmFnZXIuYWJvcnRSZXF1ZXN0KHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSlcbiAgICAgICAgICAgIC8qKioqKiovIF0pO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wZGYuanMubWFwXG4iLCIvKiBDb3B5cmlnaHQgMjAyMCBNb3ppbGxhIEZvdW5kYXRpb25cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCJcbiAgPyB3aW5kb3dcbiAgOiB7fVxuKS5leHRyYWN0aGlnaGxpZ2h0c1dvcmtlciA9IHJlcXVpcmUoXCIuL2V4dHJhY3RoaWdobGlnaHRzLndvcmtlci5qc1wiKTtcbiIsImltcG9ydCAqIGFzIGV4dHJhY3RoaWdobGlnaHRzIGZyb20gXCJub2RlX21vZHVsZXMvZXh0cmFjdGhpZ2hsaWdodHMtZGlzdC9idWlsZC9leHRyYWN0aGlnaGxpZ2h0c1wiO1xuaW1wb3J0ICogYXMgZXh0cmFjdGhpZ2hsaWdodHNXb3JrZXIgZnJvbSBcIm5vZGVfbW9kdWxlcy9leHRyYWN0aGlnaGxpZ2h0cy1kaXN0L2J1aWxkL2V4dHJhY3RoaWdobGlnaHRzLndvcmtlci5lbnRyeVwiO1xuXG52YXIgZmluYWxIaWdobGlnaHRzQW5ub3RhdGlvbnMgPSBuZXcgQXJyYXkoKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUERGQW5ub3RhdGlvbnNNYW5hZ2VyIHtcblxuICAgIGFzeW5jIGZldGNoUmF3QW5ub3RhdGlvbnNGcm9tUERGKGFycmF5QnVmZmVyKSB7XG5cbiAgICAgICAgZXh0cmFjdGhpZ2hsaWdodHMuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmNIaWdobGlnaHRzID0gZXh0cmFjdGhpZ2hsaWdodHNXb3JrZXI7XG5cbiAgICAgICAgZmluYWxIaWdobGlnaHRzQW5ub3RhdGlvbnMgPSBuZXcgQXJyYXkoKTtcblxuICAgICAgICB2YXIgU1VQUE9SVEVEX0FOTk9UUyA9IFsnVGV4dCcsICdIaWdobGlnaHQnLCAnVW5kZXJsaW5lJ107XG5cbiAgICAgICAgdmFyIGxvYWRpbmdUYXNrID0gZXh0cmFjdGhpZ2hsaWdodHMuZ2V0RG9jdW1lbnQoYXJyYXlCdWZmZXIpO1xuXG4gICAgICAgIHJldHVybiBhd2FpdCBsb2FkaW5nVGFzay5wcm9taXNlXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZG9jKSB7XG4gICAgICAgICAgICAgICAgdmFyIG51bVBhZ2VzID0gZG9jLm51bVBhZ2VzO1xuXG4gICAgICAgICAgICAgICAgdmFyIGxhc3RQcm9taXNlOyAvLyB3aWxsIGJlIHVzZWQgdG8gY2hhaW4gcHJvbWlzZXNcbiAgICAgICAgICAgICAgICBsYXN0UHJvbWlzZSA9IGRvYy5nZXRNZXRhZGF0YSgpLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHZhciBsb2FkUGFnZSA9IGZ1bmN0aW9uIChwYWdlTnVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb2MuZ2V0UGFnZShwYWdlTnVtKS50aGVuKGFzeW5jIGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZXdwb3J0ID0gcGFnZS5nZXRWaWV3cG9ydChzY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IHZpZXdwb3J0LmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHZpZXdwb3J0LndpZHRoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVuZGVyQ29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXNDb250ZXh0OiBjb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdwb3J0OiB2aWV3cG9ydFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFubm90YXRpb25zID0gYXdhaXQgcGFnZS5nZXRBbm5vdGF0aW9ucygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9ucyA9IGFubm90YXRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoYW5ubykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5uby5zdWJ0eXBlID09PSB1bmRlZmluZWQpIGFubm8uc3VidHlwZSA9IGFubm8udHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFubm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChhbm5vKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTVVBQT1JURURfQU5OT1RTLmluZGV4T2YoYW5uby5zdWJ0eXBlKSA+PSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLnJlbmRlcihyZW5kZXJDb250ZXh0LCBhbm5vdGF0aW9ucyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zLm1hcChmdW5jdGlvbiAoYW5ubykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm8ucGFnZU51bWJlciA9IHBhZ2VOdW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxIaWdobGlnaHRzQW5ub3RhdGlvbnMucHVzaChhbm5vKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhZ2VcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8vIExvYWRpbmcgb2YgdGhlIGZpcnN0IHBhZ2Ugd2lsbCB3YWl0IG9uIG1ldGFkYXRhIGFuZCBzdWJzZXF1ZW50IGxvYWRpbmdzXG4gICAgICAgICAgICAgICAgLy8gd2lsbCB3YWl0IG9uIHRoZSBwcmV2aW91cyBwYWdlcy5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBudW1QYWdlczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RQcm9taXNlID0gbGFzdFByb21pc2UudGhlbihsb2FkUGFnZS5iaW5kKG51bGwsIGkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RQcm9taXNlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmFsSGlnaGxpZ2h0c0Fubm90YXRpb25zO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3I6IFwiICsgZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBmbGF0dGVuQW5ub3RhdGlvbnNCeVBvc2l0aW9uKHNvcnRlZEFubm90YXRpb25zQnlQb3NpdGlvbkdyb3VwZWRCeVBhZ2U6IHt9KSB7XG4gICAgICAgIGxldCBmbGF0dGVuZWRBbm5vdGF0aW9uc0J5UG9zaXRpb24gPSBuZXcgQXJyYXkoKTtcblxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gc29ydGVkQW5ub3RhdGlvbnNCeVBvc2l0aW9uR3JvdXBlZEJ5UGFnZSkge1xuICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHNvcnRlZEFubm90YXRpb25zQnlQb3NpdGlvbkdyb3VwZWRCeVBhZ2Vba2V5XS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGZsYXR0ZW5lZEFubm90YXRpb25zQnlQb3NpdGlvbi5wdXNoKHNvcnRlZEFubm90YXRpb25zQnlQb3NpdGlvbkdyb3VwZWRCeVBhZ2Vba2V5XVtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmxhdHRlbmVkQW5ub3RhdGlvbnNCeVBvc2l0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBzb3J0QW5ub3RhdGlvbnNCeVBvc2l0aW9uKGdyb3VwZWRBbm5vdGF0aW9uc0J5UGFnZU1hcCkge1xuXG4gICAgICAgIHZhciBuZXdNYXAgPSB7fTtcblxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gZ3JvdXBlZEFubm90YXRpb25zQnlQYWdlTWFwKSB7XG4gICAgICAgICAgICBuZXdNYXBba2V5XSA9ICBncm91cGVkQW5ub3RhdGlvbnNCeVBhZ2VNYXBba2V5XS5zb3J0KGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgIGlmKGxlZnQucXVhZFBvaW50c1swXS5kaW1zLm1pblkgPCByaWdodC5xdWFkUG9pbnRzWzBdLmRpbXMubWluWSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYobGVmdC5xdWFkUG9pbnRzWzBdLmRpbXMubWluWSA+IHJpZ2h0LnF1YWRQb2ludHNbMF0uZGltcy5taW5ZKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3TWFwO1xuICAgIH1cblxuICAgIHB1YmxpYyBncm91cEFubm90YXRpb25zQnlQYWdlKGZpbHRlcmVkQW5ub3RhdGlvbnMpIHtcblxuICAgICAgICB2YXIgZ3JvdXBCeSA9IGZ1bmN0aW9uKHhzLCBrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB4cy5yZWR1Y2UoZnVuY3Rpb24ocnYsIHgpIHtcbiAgICAgICAgICAgICAgICAocnZbeFtrZXldXSA9IHJ2W3hba2V5XV0gfHwgW10pLnB1c2goeCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ2O1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBncm91cEJ5KGZpbHRlcmVkQW5ub3RhdGlvbnMsICdwYWdlTnVtYmVyJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGZpbHRlclJhd0Fubm90YXRpb25zKHJhd0Fubm90YXRpb25zRnJvbVBERikge1xuICAgICAgICB2YXIgZmlsdGVyZWRBbm5vdGF0aW9ucyA9IHJhd0Fubm90YXRpb25zRnJvbVBERi5maWx0ZXIoZnVuY3Rpb24gKGFubm8pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYW5uby5oaWdobGlnaHRlZFRleHQgPT0gJ3VuZGVmaW5lZCcgfHwgYW5uby5oaWdobGlnaHRlZFRleHQgPT0gXCJcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmlsdGVyZWRBbm5vdGF0aW9ucztcbiAgICB9XG5cbn0iLCJpbXBvcnQge0FwcCwgTW9kYWwsIFBsdWdpbn0gZnJvbSAnb2JzaWRpYW4nO1xyXG5cclxuaW1wb3J0IEV4dHJhY3RQREZIaWdobGlnaHRzUGx1Z2luU2V0dGluZ3MgZnJvbSBcIi4vRXh0cmFjdFBERkhpZ2hsaWdodHNQbHVnaW5TZXR0aW5nc1wiO1xyXG5pbXBvcnQgRXh0cmFjdFBERkhpZ2hsaWdodHNQbHVnaW5TZXR0aW5nc1RhYiBmcm9tIFwiLi9FeHRyYWN0UERGSGlnaGxpZ2h0c1BsdWdpblNldHRpbmdzVGFiXCI7XHJcbmltcG9ydCBQREZBbm5vdGF0aW9uc01hbmFnZXIgZnJvbSBcIi4vUERGQW5ub3RhdGlvbnNNYW5hZ2VyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHRyYWN0UERGSGlnaGxpZ2h0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7XHJcblxyXG5cdHB1YmxpYyBzZXR0aW5nczogRXh0cmFjdFBERkhpZ2hsaWdodHNQbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIG1vZGFsOiBQcm9ncmVzc01vZGFsO1xyXG5cclxuXHRhc3luYyBvbmxvYWQoKSB7XHJcblx0XHR0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBFeHRyYWN0UERGSGlnaGxpZ2h0c1BsdWdpblNldHRpbmdzVGFiKHRoaXMuYXBwLCB0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5hZGRSaWJib25JY29uKCdwZGYtZmlsZScsICdQREYgSGlnaGxpZ2h0cycsICgpID0+IHtcclxuXHRcdFx0dGhpcy5wcm9jZXNzUERGSGlnaGxpZ2h0cygpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRvbnVubG9hZCgpIHt9XHJcblxyXG5cdGFzeW5jIHByb2Nlc3NQREZIaWdobGlnaHRzKCkge1xyXG5cdFx0dGhpcy5tb2RhbCA9IG5ldyBQcm9ncmVzc01vZGFsKHRoaXMuYXBwKTtcclxuXHRcdC8vIHRoaXMubW9kYWwub3BlbigpO1xyXG5cclxuXHRcdGxldCBmaWxlID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHJcblx0XHRpZiAoZmlsZSA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cdFx0aWYgKGZpbGUuZXh0ZW5zaW9uICE9PSAncGRmJykgcmV0dXJuO1xyXG5cclxuXHRcdGxldCBhcnJheUJ1ZmZlciA9IGF3YWl0IHRoaXMuYXBwLnZhdWx0LnJlYWRCaW5hcnkoZmlsZSk7XHJcblx0XHRsZXQgcGRmQW5ub3RhdGlvbnNNYW5hZ2VyID0gbmV3IFBERkFubm90YXRpb25zTWFuYWdlcigpO1xyXG5cclxuXHRcdGxldCByYXdBbm5vdGF0aW9uc0Zyb21QREYgPSBhd2FpdCBwZGZBbm5vdGF0aW9uc01hbmFnZXIuZmV0Y2hSYXdBbm5vdGF0aW9uc0Zyb21QREYoYXJyYXlCdWZmZXIpO1xyXG5cdFx0bGV0IGZpbHRlcmVkQW5ub3RhdGlvbnMgPSBwZGZBbm5vdGF0aW9uc01hbmFnZXIuZmlsdGVyUmF3QW5ub3RhdGlvbnMocmF3QW5ub3RhdGlvbnNGcm9tUERGKTtcclxuXHRcdGxldCBncm91cGVkQW5ub3RhdGlvbnNCeVBhZ2VNYXAgPSBwZGZBbm5vdGF0aW9uc01hbmFnZXIuZ3JvdXBBbm5vdGF0aW9uc0J5UGFnZShmaWx0ZXJlZEFubm90YXRpb25zKTtcclxuXHRcdGxldCBzb3J0ZWRBbm5vdGF0aW9uc0J5UG9zaXRpb25Hcm91cGVkQnlQYWdlID0gcGRmQW5ub3RhdGlvbnNNYW5hZ2VyLnNvcnRBbm5vdGF0aW9uc0J5UG9zaXRpb24oZ3JvdXBlZEFubm90YXRpb25zQnlQYWdlTWFwKTtcclxuXHRcdGxldCBmbGF0dGVuZWRBbm5vdGF0aW9uc0J5UG9zaXRpb24gPSBwZGZBbm5vdGF0aW9uc01hbmFnZXIuZmxhdHRlbkFubm90YXRpb25zQnlQb3NpdGlvbihzb3J0ZWRBbm5vdGF0aW9uc0J5UG9zaXRpb25Hcm91cGVkQnlQYWdlKTtcclxuXHJcblx0XHRjb25zdCBmaW5hbE1hcmtkb3duID0gdGhpcy5nZW5lcmF0ZUZpbmFsTWFya2Rvd24oZmxhdHRlbmVkQW5ub3RhdGlvbnNCeVBvc2l0aW9uLCBmaWxlLm5hbWUpO1xyXG5cclxuXHRcdGxldCBmaWxlUGF0aCA9IGZpbGUubmFtZS5yZXBsYWNlKFwiLnBkZlwiLCBcIi5tZFwiKTtcclxuXHRcdGZpbGVQYXRoID0gXCJIaWdobGlnaHRzIGZvciBcIiArIGZpbGVQYXRoO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMuc2F2ZUhpZ2hsaWdodHNUb0ZpbGUoZmlsZVBhdGgsIGZpbmFsTWFya2Rvd24pO1xyXG5cdFx0YXdhaXQgdGhpcy5hcHAud29ya3NwYWNlLm9wZW5MaW5rVGV4dChmaWxlUGF0aCwgJycsIHRydWUpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZW5lcmF0ZUZpbmFsTWFya2Rvd24oYW5ub3RhdGlvbnMsIGZpbGVOYW1lKSB7XHJcblxyXG5cdFx0bGV0IG1kU3RyaW5nID0gXCJcIjtcclxuXHRcdGZvcihsZXQgYW5ubyBvZiBhbm5vdGF0aW9ucykge1xyXG5cclxuXHRcdFx0bGV0IHRleHQgPSBhbm5vLmhpZ2hsaWdodGVkVGV4dDtcclxuXHJcblx0XHRcdGlmKHRoaXMuc2V0dGluZ3MuaW5jbHVkZVBhZ2VOdW1iZXIpIHtcclxuXHRcdFx0XHR0ZXh0ID0gdGV4dCArIFwiIChQYWdlIFwiICsgYW5uby5wYWdlTnVtYmVyICsgXCIpXCI7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmKHRoaXMuc2V0dGluZ3MuaW5jbHVkZUhpZ2hsaWdodENvbG9yKSB7XHJcblx0XHRcdFx0dGV4dCA9IHRleHQgKyBcIiBcIiArIHRoaXMuZ2V0Q29sb3JUYWdGb3JBbm5vdGF0aW9uKGFubm8pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZih0aGlzLnNldHRpbmdzLmNyZWF0ZUxpbmtzKSB7XHJcblx0XHRcdFx0dGV4dCA9IFwiW1tcIiArIHRleHQgKyBcIl1dXCI7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRleHQgPSBcIi0gXCIgKyB0ZXh0O1xyXG5cclxuXHRcdFx0dGV4dCArPSBcIlxcblwiO1xyXG5cclxuXHRcdFx0bWRTdHJpbmcgKz0gdGV4dDtcclxuXHRcdH1cclxuXHJcblx0XHRtZFN0cmluZyArPSBgXFxuIyMgU291cmNlXFxuW1ske2ZpbGVOYW1lfV1dYDtcclxuXHJcblx0XHRyZXR1cm4gbWRTdHJpbmc7XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgc2F2ZUhpZ2hsaWdodHNUb0ZpbGUoZmlsZVBhdGg6IHN0cmluZywgbWRTdHJpbmc6IHN0cmluZykge1xyXG5cdFx0Y29uc3QgZmlsZUV4aXN0cyA9IGF3YWl0IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKGZpbGVQYXRoKTtcclxuXHRcdGlmIChmaWxlRXhpc3RzKSB7XHJcblx0XHRcdGF3YWl0IHRoaXMuYXBwZW5kSGlnaGxpZ2h0c1RvRmlsZShmaWxlUGF0aCwgbWRTdHJpbmcpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0YXdhaXQgdGhpcy5hcHAudmF1bHQuY3JlYXRlKGZpbGVQYXRoLCBtZFN0cmluZyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBhcHBlbmRIaWdobGlnaHRzVG9GaWxlKGZpbGVQYXRoOiBzdHJpbmcsIG5vdGU6IHN0cmluZykge1xyXG5cdFx0bGV0IGV4aXN0aW5nQ29udGVudCA9IGF3YWl0IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIucmVhZChmaWxlUGF0aCk7XHJcblx0XHRpZihleGlzdGluZ0NvbnRlbnQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRleGlzdGluZ0NvbnRlbnQgPSBleGlzdGluZ0NvbnRlbnQgKyAnXFxyXFxyJztcclxuXHRcdH1cclxuXHRcdGF3YWl0IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIud3JpdGUoZmlsZVBhdGgsIGV4aXN0aW5nQ29udGVudCArIG5vdGUpO1xyXG5cdH1cclxuXHJcblxyXG5cdGxvYWRTZXR0aW5ncygpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MgPSBuZXcgRXh0cmFjdFBERkhpZ2hsaWdodHNQbHVnaW5TZXR0aW5ncygpO1xyXG5cdFx0KGFzeW5jICgpID0+IHtcclxuXHRcdFx0Y29uc3QgbG9hZGVkU2V0dGluZ3MgPSBhd2FpdCB0aGlzLmxvYWREYXRhKCk7XHJcblx0XHRcdGlmIChsb2FkZWRTZXR0aW5ncykge1xyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuaW5jbHVkZVBhZ2VOdW1iZXIgPSBsb2FkZWRTZXR0aW5ncy5pbmNsdWRlUGFnZU51bWJlcjtcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmluY2x1ZGVIaWdobGlnaHRDb2xvciA9IGxvYWRlZFNldHRpbmdzLmluY2x1ZGVIaWdobGlnaHRDb2xvcjtcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmNyZWF0ZUxpbmtzID0gbG9hZGVkU2V0dGluZ3MuY3JlYXRlTGlua3M7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHRcdFx0fVxyXG5cdFx0fSkoKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0Q29sb3JUYWdGb3JBbm5vdGF0aW9uKGFubm8pIHtcclxuXHRcdGNvbnN0IGNvbG9yQXJyYXkgPSBhbm5vLmNvbG9yO1xyXG5cdFx0Y29uc3QgcmVkID0gY29sb3JBcnJheVswXTtcclxuXHRcdGNvbnN0IGdyZWVuID0gY29sb3JBcnJheVsxXTtcclxuXHRcdGNvbnN0IGJsdWUgPSBjb2xvckFycmF5WzJdO1xyXG5cclxuXHRcdGlmKHJlZCA9PSAyNTAgJiYgZ3JlZW4gPT0gMjA1ICYmIGJsdWUgPT0gOTApIHtcclxuXHRcdFx0cmV0dXJuIFwi8J+foVwiO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmKHJlZCA9PSAxMjQgJiYgZ3JlZW4gPT0gMjAwICYmIGJsdWUgPT0gMTA0KSB7XHJcblx0XHRcdHJldHVybiBcIvCfn6JcIjtcclxuXHRcdH1cclxuXHJcblx0XHRpZihyZWQgPT0gMTA1ICYmIGdyZWVuID09IDE3NiAmJiBibHVlID09IDI0MSkge1xyXG5cdFx0XHRyZXR1cm4gXCLwn5S1XCI7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYocmVkID09IDI1MSAmJiBncmVlbiA9PSA5MiAmJiBibHVlID09IDEzNykge1xyXG5cdFx0XHRyZXR1cm4gXCLwn5S0XCI7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYocmVkID09IDIwMCAmJiBncmVlbiA9PSAxMzMgJiYgYmx1ZSA9PSAyMTgpIHtcclxuXHRcdFx0cmV0dXJuIFwi8J+fo1wiO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBcIlwiO1xyXG5cdH1cclxufVxyXG5cclxuY2xhc3MgUHJvZ3Jlc3NNb2RhbCBleHRlbmRzIE1vZGFsIHtcclxuXHRwdWJsaWMgZmlsZU5hbWU6IHN0cmluZztcclxuXHJcblx0Y29uc3RydWN0b3IoYXBwOiBBcHApIHtcclxuXHRcdHN1cGVyKGFwcCk7XHJcblx0fVxyXG5cclxuXHRvbk9wZW4oKSB7XHJcblx0XHRsZXQge2NvbnRlbnRFbH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLmNyZWF0ZUVsKFwiaDJcIiwge3RleHQ6IFwiRXh0cmFjdCBQREYgSGlnaGxpZ2h0c1wifSk7XHJcblx0XHRjb250ZW50RWwuY3JlYXRlRWwoXCJwXCIsIHt0ZXh0OiBcIkknbSBzb3JyeSBidXQgZHVlIHRvIGFuIHVuZXhwZWN0ZWQgaW5jb21wYXRpYmlsaXR5IHdpdGggT2JzaWRpYW4gQ29yZSBQREYgaGFuZGxpbmcgYXMgb2YgdjAuMTAuOCB0aGlzIHBsdWdpbiBpcyBjdXJyZW50bHkgZGlzYWJsZWQuIEluIHRoZSBtZWFudGltZSwgeW91IGNhbiB1c2UgWm90ZXJvICsgWm90ZmlsZSB0byBleHRyYWN0IFBERiBoaWdobGlnaHRzIGFuZCBhbm5vdGF0aW9ucy4gSSdtIHNvcnJ5IGZvciB0aGUgaW5jb252ZW5pZW5jZSBhbmQgd29ya2luZyBvbiBmaXhpbmcgdGhpcyBpc3N1ZS4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucywgcGxlYXNlIGVtYWlsIG1lIGF0IGFsZXhpcy5yb25kZWF1QGdtYWlsLmNvbSEgVGhhbmsgeW91IGZvciB5b3VyIHBhdGllbmNlLCBBbGV4aXMgOilcIn0pO1xyXG5cdH1cclxuXHJcblx0b25DbG9zZSgpIHtcclxuXHRcdGxldCB7Y29udGVudEVsfSA9IHRoaXM7XHJcblx0XHRjb250ZW50RWwuZW1wdHkoKTtcclxuXHR9XHJcbn1cclxuIl0sIm5hbWVzIjpbIlNldHRpbmciLCJQbHVnaW5TZXR0aW5nVGFiIiwidGhpcyIsInVuZGVmaW5lZCIsImdsb2JhbCIsInJlcXVpcmUiLCJyZXF1aXJlJCQwIiwicmVxdWlyZSQkMSIsInJlcXVpcmUkJDIiLCJyZXF1aXJlJCQzIiwicmVxdWlyZSQkNCIsInJlcXVpcmUkJDUiLCJyZXF1aXJlJCQ2IiwiZXh0cmFjdGhpZ2hsaWdodHMuR2xvYmFsV29ya2VyT3B0aW9ucyIsImV4dHJhY3RoaWdobGlnaHRzLmdldERvY3VtZW50IiwiUGx1Z2luIiwiTW9kYWwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGFBQWEsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbkMsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLGNBQWM7QUFDekMsU0FBUyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsWUFBWSxLQUFLLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3BGLFFBQVEsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFHLElBQUksT0FBTyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQztBQUNGO0FBQ08sU0FBUyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNoQyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssVUFBVSxJQUFJLENBQUMsS0FBSyxJQUFJO0FBQzdDLFFBQVEsTUFBTSxJQUFJLFNBQVMsQ0FBQyxzQkFBc0IsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsK0JBQStCLENBQUMsQ0FBQztBQUNsRyxJQUFJLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEIsSUFBSSxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDM0MsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pGLENBQUM7QUF1Q0Q7QUFDTyxTQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUU7QUFDN0QsSUFBSSxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEtBQUssWUFBWSxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLFVBQVUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDaEgsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUU7QUFDL0QsUUFBUSxTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ25HLFFBQVEsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ3RHLFFBQVEsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ3RILFFBQVEsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzlFLEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNEO0FBQ08sU0FBUyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUMzQyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckgsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxNQUFNLEtBQUssVUFBVSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3SixJQUFJLFNBQVMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sVUFBVSxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RFLElBQUksU0FBUyxJQUFJLENBQUMsRUFBRSxFQUFFO0FBQ3RCLFFBQVEsSUFBSSxDQUFDLEVBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ3RFLFFBQVEsT0FBTyxDQUFDLEVBQUUsSUFBSTtBQUN0QixZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMs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LE1BQU0sS0FBSyxVQUFVLElBQUksT0FBTyxNQUFNLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxFQUFFLE9BQU8sR0FBRyxTQUFTLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEdBQUcsU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxHQUFHLElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxJQUFJLEdBQUcsQ0FBQyxXQUFXLEtBQUssTUFBTSxJQUFJLEdBQUcsS0FBSyxNQUFNLENBQUMsU0FBUyxHQUFHLFFBQVEsR0FBRyxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDL1c7QUFDQSxnQkFBZ0IsU0FBUyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLEVBQUU7QUFDdkk7QUFDQSxnQkFBZ0IsU0FBUyxnQkFBZ0IsR0FBRyxFQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsc0RBQXNELENBQUMsQ0FBQyxFQUFFO0FBQzVIO0FBQ0EsZ0JBQWdCLFNBQVMscUJBQXFCLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxDQUFDLEVBQUU7QUFDemE7QUFDQSxnQkFBZ0IsU0FBUyxlQUFlLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUU7QUFDckY7QUFDQSxnQkFBZ0IsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxLQUFLLEVBQUUsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE9B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QUN0Qyx3QkFBd0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0Qyx3QkFBd0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0Qyx3QkFBd0IsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLHFCQUFxQixDQUFDO0FBQ3RCO0FBQ0Esb0JBQW9CLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNyRSx3QkFBd0IsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxTyxxQkFBcUIsQ0FBQztBQUN0QjtBQUNBLG9CQUFvQixJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM3RSx3QkFBd0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRSx3QkFBd0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRSx3QkFBd0IsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN4QyxxQkFBcUIsQ0FBQztBQUN0QjtBQUNBLG9CQUFvQixJQUFJLENBQUMscUJBQXFCLEdBQUcsU0FBUywwQkFBMEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzNGLHdCQUF3QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsd0JBQXdCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0Ysd0JBQXdCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5Rix3QkFBd0IsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN4QyxxQkFBcUIsQ0FBQztBQUN0QjtBQUNBLG9CQUFvQixJQUFJLENBQUMsMEJBQTBCLEdBQUcsU0FBUywrQkFBK0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3JHLHdCQUF3QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRCx3QkFBd0IsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2RSx3QkFBd0IsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RSx3QkFBd0IsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RSx3QkFBd0IsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4TCxxQkFBcUIsQ0FBQztBQUN0QjtBQUNBLG9CQUFvQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUU7QUFDOUUsd0JBQXdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRCx3QkFBd0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM1SSxxQkFBcUIsQ0FBQztBQUN0QjtBQUNBLG9CQUFvQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pGLHdCQUF3QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzSixxQkFBcUIsQ0FBQztBQUN0QjtBQUNBLG9CQUFvQixJQUFJLENBQUMsNkJBQTZCLEdBQUcsU0FBUyxrQ0FBa0MsQ0FBQyxDQUFDLEVBQUU7QUFDeEcsd0JBQXdCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakUsd0JBQXdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSx3QkFBd0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLHdCQUF3QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsd0JBQXdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSx3QkFBd0IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRCx3QkFBd0IsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1Rix3QkFBd0IsSUFBSSxFQUFFLEdBQUcsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDckQs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QVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckQsb0JBQW9CLE9BQU8sU0FBUyxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsR0FBRyxRQUFRLENBQUM7QUFDekUsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLElBQUksdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdnNCO0FBQ0EsZ0JBQWdCLFNBQVMsaUJBQWlCLENBQUMs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QixLQUFLLENBQUM7QUFDOUIsNEJBQTRCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RTtBQUNBLHdCQUF3QixLQUFLLENBQUM7QUFDOUIsNEJBQTRCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9GO0FBQ0Esd0JBQXdCLEtBQUssQ0FBQztBQUM5Qiw0QkFBNEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqSDtBQUNBLHdCQUF3QixLQUFLLENBQUM7QUFDOUIsNEJBQTRCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENB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RyxDQUFDLENBQUM7QUFDcEU7QUFDQSxnQkFBZ0IsSUFBSSxPQUFPLEdBQUcsK0JBQStCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkU7QUFDQSxnQkFBZ0IsSUFBSSxRQUFRLEdBQUcsK0JBQStCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkU7QUFDQSxnQkFBZ0IsSUFBSSxRQUFRLEdBQUcsK0JBQStCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkU7QUFDQSxnQkFBZ0IsSUFBSSxTQUFTLEdBQUcsK0JBQStCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEU7QUFDQSxnQkFBZ0IsSUFBSSxXQUFXLEdBQUcsK0JBQStCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEU7QUFDQSxnQkFBZ0IsSUFBSSxVQUFVLEdBQUcsK0JBQStCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckU7QUFDQSxnQkFBZ0IsSUFBSSxPQUFPLEdBQUcsK0JBQStCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEU7QUFDQSxnQkFBZ0IsSUFBSSxPQUFPLEdBQUcsK0JBQStCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkU7QUFDQSxnQkFBZ0IsSUFBSSxLQUFLLEdBQUcsK0JBQStCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakU7QUFDQSxnQkFBZ0IsSUFBSSxHQUFHLEdBQUcsK0JBQStCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUQ7QUFDQSxnQkFBZ0IsSUFBSSxLQUFLLEdBQUcsK0JBQStCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEU7QUFDQSxnQkFBZ0IsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNuQyxnQkFBZ0IsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvQixnQkFBZ0IsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNyQyxnQkFBZ0IsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUM1QyxnQkFBZ0IsSUFBSSxLQUFLLEdBQUcsTUFB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Q0FBd0MsS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUN4RCxxQ0FBcUMsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDMUQsd0NBQXdDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoRSx3Q0FBd0MsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2hFLHdDQUF3QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDeEUsd0NBQXdDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNsRSx3Q0FBd0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDN0Qsd0NBQXdDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUN4RSx3Q0FBd0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3hFLHdDQUF3QyxLQUFLLEdBQUcsVUFBVSxDQUFDO0FBQzNELHFDQUFxQyxNQUFNO0FBQzNDLHdDQUF3QyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLHdDQUF3QyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFFO0FBQ0Esd0NBQXdDLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxHQUFHLElBQUksS0FBSyxLQUFLLEdBQUcsSUFBSSxTQUFTLEtBQUssR0FBRyxJQUFJLFNBQVMsS0FBSyxHQUFHLElBQUksU0FBUyxLQUFLLElBQUksSUFBSSxTQUFTLEtBQUssR0FBRyxJQUFJLFNBQVMsS0FBSyxHQUFHLEVBQUU7QUFDbk8sNENBQTRDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtB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RUFBRSxNQUFNLElBQUksU0FBUyxDQUFDLHNEQUFzRCxDQUFDLENBQUMsRUFBRTtBQUM1SDtBQUNBLGdCQUFnQixTQUFTLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUFFO0FBQ3phO0FBQ0EsZ0JBQWdCLFNBQVMsZUFBZSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFO0FBQ3JGO0FBQ0EsZ0JBQWdCLFNBQVMsZUFBZSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxZQUFZLFdBQVcsQ0FBQyxFQUFFLEVBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtBQUN6SztBQUNBLGdCQUFnQixTQUFTLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksT0FBTyxJQUFJLFVBQVUsRUFBRSxVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQzdVO0FBQ0EsZ0JBQWdCLFNBQVMsWUFBWSxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxVQUFVLEVBQUUsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBVyxFQUFFLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sV0FBVyxDQUFDLEVBQUU7QUFDdk87QUFDQSxnQkFBZ0IsSUFBSSxpQkFBaUIsR0FBRyxHQUFHLENBQUM7QUFDNUMsZ0JBQWdCLElBQUksb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1RDtBQUNBLGdCQUFnQixTQUFTLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUU7QUFDcEUsb0JBQW9CLE9BQU8sTUFBTSxLQUFLLFNBQVMsSUFBSSxVQUFVLENBQUMsUUFBUSxJQUFJLE1BQU0sS0FBSyxPQUFPLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQztBQUNySCxpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsSUFBSSxJQUFJO0FBQ3hCO0FBQ0Esb0JBQW9CLFlBQVk7QUFDaEMsd0JBQXdCLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRTtBQUM1Qyw0QkFBNEIsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVU7QUFDNUQsZ0NBQWdDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSTtBQUNoRCxnQ0FBZ0MsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTO0FBQzFELGdDQUFnQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVE7QUFDeEQsZ0NBQWdDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRztBQUM5QyxnQ0FBZ0MsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTO0FBQzFELGdDQUFnQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCO0FBQ3hFLGdDQUFnQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7QUFDN0U7QUFDQSw0QkFBNEIsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4RDtBQUNBLDRCQUE0QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUN6RCw0QkFBNEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDdkQsNEJBQTRCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQ3JELDRCQUE0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUM3Qyw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDM0MsNEJBQTRCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQ3ZELDRCQUE0QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7QUFDckUsNEJBQTRCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUN6RSw0QkFBNEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztBQUNoRiw0QkFBNEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztBQUN6RCw0QkFBNEIsSUFBSSxZQUFZLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQy9FLDRCQUE0QixJQUFJLFVBQVUsR0FBRztBQUM3QyxnQ0FBZ0MsR0FBRyxFQUFFLENBQUM7QUFDdEMsNkJBQTZCLENBQUM7QUFDOUIsNEJBQTRCLElBQUksQ0FBQyxTQUFTLEdBQUc7QUFDN0MsZ0NBQWdDLFdBQVcsRUFBRSxTQUFTLFdBQVcsR0FBRztBQUNwRSxvQ0FBb0MsT0FBTyxZQUFZLEdBQUcsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDO0FBQzNFLGlDQUFpQztBQUNqQyw2QkFBNkIsQ0FBQztBQUM5Qix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzVDLDRCQUE0QixHQUFHLEVBQUUseUJBQXlCO0FBQzFELDRCQUE0QixLQUFLLEVBQUUsU0FBUyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUU7QUFDekUsZ0NBQWdDLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUN6SCxnQ0FBZ0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsc0JBQXNCLEVBQUU7QUFDOUUsb0NBQW9DLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTtBQUN2RCxvQ0FBb0MsR0FBRyxFQUFFLEdBQUc7QUFDNUMsb0NBQW9DLFFBQVEsRUFBRSxRQUFRO0FBQ3RELG9DQUFvQyxhQUFhLEVBQUUsS0FBSztBQUN4RCxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ25DO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzNELG9DQUFvQyxPQUFPLEtBQUssQ0FBQztBQUNqRCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM5RixvQ0FBb0MsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoRiw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxrQkFBa0I7QUFDbkQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLGdCQUFnQixHQUFHO0FBQy9ELGdDQUFnQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQzNELGdDQUFnQyxJQUFJLE1BQU0sQ0FBQztBQUMzQztBQUNBLGdDQUFnQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDNUQsb0NBQW9DLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDekQsb0NBQW9DLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUNyRCxvQ0FBb0MsSUFBSSx5QkFBeUIsR0FBRyxJQUFJLENBQUM7QUFDekUsb0NBQW9DLElBQUksaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0FBQ2xFLG9DQUFvQyxJQUFJLGNBQWMsR0FBRyxTQUFTLENBQUM7QUFDbkU7QUFDQSxvQ0FBb0MsSUFBSTtBQUN4Qyx3Q0FBd0MsS0FBSyxJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUseUJBQXlCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLHlCQUF5QixHQUFHLElBQUksRUFBRTtBQUNsTSw0Q0FBNEMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztBQUN0RSw0Q0FBNEMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDbkYseUNBQXlDO0FBQ3pDLHFDQUFxQyxDQUFDLE9BQU8sR0FBRyxFQUFFO0FBQ2xELHdDQUF3QyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDakUsd0NBQXdDLGNBQWMsR0FBRyxHQUFHLENBQUM7QUFDN0QscUNBQXFDLFNBQVM7QUFDOUMsd0NBQXdDLElBQUk7QUFDNUMsNENBQTRDLElBQUksQ0FBQyx5QkFBeUIsSUFBSSxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRTtBQUN4RyxnREFBZ0QsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ25FLDZDQUE2QztBQUM3Qyx5Q0FBeUMsU0FBUztBQUNsRCw0Q0FBNEMsSUFBSSxpQkFBaUIsRUFBRTtBQUNuRSxnREFBZ0QsTUFBTSxjQUFjLENBQUM7QUFDckUsNkNBQTZDO0FBQzdDLHlDQUF5QztBQUN6QyxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsTUFBTSxHQUFHLElBQUksUUFBUSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pGLGlDQUFpQyxNQUFNLElBQUksSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFO0FBQy9FLG9DQUFvQyxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBQ3JELGlDQUFpQyxNQUFNO0FBQ3ZDLG9DQUFvQyxNQUFNLEdBQUcsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDdkUsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLE9BQU8sTUFBTSxDQUFDO0FBQzlDLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGVBQWU7QUFDaEQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLGFBQWEsQ0FBQyxJQUFJLEVBQUU7QUFDaEUsZ0NBQWdDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztBQUNqRDtBQUNBLGdDQUFnQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO0FBQzVELG9DQUFvQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3RHLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWTtBQUM5RSxvQ0FBb0MsSUFBSSxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoSCxvQ0FBb0MsT0FBTyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0QsaUNBQWlDLENBQUMsQ0FBQztBQUNuQyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxpQkFBaUI7QUFDbEQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLGVBQWUsQ0FBQyxLQUFLLEVBQUU7QUFDbkUsZ0NBQWdDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztBQUNsRDtBQUNBLGdDQUFnQyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTztBQUMzRCxvQ0FBb0MsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJO0FBQ3JELG9DQUFvQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU07QUFDekQsb0NBQW9DLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQztBQUMxRixnQ0FBZ0MsSUFBSSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUM1RyxnQ0FBZ0MsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2hKLGdDQUFnQyxJQUFJLGdCQUFnQixHQUFHLElBQUksVUFBVSxDQUFDLGdCQUFnQixDQUFDO0FBQ3ZGLG9DQUFvQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7QUFDL0Qsb0NBQW9DLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtBQUNuRCxvQ0FBb0MsT0FBTyxFQUFFLE9BQU87QUFDcEQsb0NBQW9DLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztBQUM3RCxvQ0FBb0MsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO0FBQzdELG9DQUFvQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7QUFDN0Qsb0NBQW9DLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7QUFDM0Usb0NBQW9DLE9BQU8sRUFBRSxJQUFJLENBQUMsZ0JBQWdCO0FBQ2xFLG9DQUFvQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCO0FBQy9FLGlDQUFpQyxDQUFDLENBQUM7QUFDbkMsZ0NBQWdDLElBQUksWUFBWSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxvQkFBb0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7QUFDekcsZ0NBQWdDLElBQUksZUFBZSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLEVBQUU7QUFDekYsb0NBQW9DLElBQUksS0FBSyxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ3hFLHdDQUF3QyxhQUFhLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pFO0FBQ0Esb0NBQW9DLElBQUksTUFBTSxHQUFHLElBQUksY0FBYyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNwSCxvQ0FBb0MsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtBQUNwRSx3Q0FBd0MsWUFBWSxFQUFFLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO0FBQ3RHLHdDQUF3QyxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7QUFDbkUsd0NBQXdDLE1BQU0sRUFBRSxNQUFNO0FBQ3RELHFDQUFxQyxDQUFDLENBQUM7QUFDdkMsb0NBQW9DLE9BQU8sZ0JBQWdCLENBQUMsZUFBZSxDQUFDO0FBQzVFLHdDQUF3QyxNQUFNLEVBQUUsYUFBYTtBQUM3RCx3Q0FBd0MsSUFBSSxFQUFFLElBQUk7QUFDbEQsd0NBQXdDLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztBQUNuRSx3Q0FBd0MsWUFBWSxFQUFFLE1BQU07QUFDNUQscUNBQXFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWTtBQUN4RCx3Q0FBd0MsT0FBTyxNQUFNLENBQUM7QUFDdEQscUNBQXFDLENBQUMsQ0FBQztBQUN2QyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ25DLGdDQUFnQyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLEVBQUU7QUFDckgsb0NBQW9DLElBQUksS0FBSyxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ3hFLHdDQUF3QyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM3RCx3Q0FBd0MsV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRDtBQUNBLG9DQUFvQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ2xFLHdDQUF3QyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9ELHdDQUF3QyxPQUFPLFVBQVUsQ0FBQztBQUMxRCxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBQzVELG9DQUFvQyxJQUFJLDBCQUEwQixHQUFHLElBQUksQ0FBQztBQUMxRSxvQ0FBb0MsSUFBSSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFDbkUsb0NBQW9DLElBQUksZUFBZSxHQUFHLFNBQVMsQ0FBQztBQUNwRTtBQUNBLG9DQUFvQyxJQUFJO0FBQ3hDLHdDQUF3QyxLQUFLLElBQUksVUFBVSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSwwQkFBMEIsR0FBRyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsMEJBQTBCLEdBQUcsSUFBSSxFQUFFO0FBQzVNLDRDQUE0QyxJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQzFFO0FBQ0EsNENBQTRDLElBQUksc0JBQXNCLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxFQUFFO0FBQzVGLGdEQUFnRCxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixDQUFDLENBQUMsQ0FBQztBQUNoSiw2Q0FBNkM7QUFDN0MseUNBQXlDO0FBQ3pDLHFDQUFxQyxDQUFDLE9BQU8sR0FBRyxFQUFFO0FBQ2xELHdDQUF3QyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFDbEUsd0NBQXdDLGVBQWUsR0FBRyxHQUFHLENBQUM7QUFDOUQscUNBQXFDLFNBQVM7QUFDOUMsd0NBQXdDLElBQUk7QUFDNUMsNENBQTRDLElBQUksQ0FBQywwQkFBMEIsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRTtBQUMxRyxnREFBZ0QsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3BFLDZDQUE2QztBQUM3Qyx5Q0FBeUMsU0FBUztBQUNsRCw0Q0FBNEMsSUFBSSxrQkFBa0IsRUFBRTtBQUNwRSxnREFBZ0QsTUFBTSxlQUFlLENBQUM7QUFDdEUsNkNBQTZDO0FBQzdDLHlDQUF5QztBQUN6QyxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLE9BQU8sRUFBRTtBQUMvRix3Q0FBd0MsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pGLHdDQUF3QyxJQUFJLDBCQUEwQixHQUFHLElBQUksQ0FBQztBQUM5RSx3Q0FBd0MsSUFBSSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFDdkUsd0NBQXdDLElBQUksZUFBZSxHQUFHLFNBQVMsQ0FBQztBQUN4RTtBQUNBLHdDQUF3QyxJQUFJO0FBQzVDLDRDQUE0QyxLQUFLLElBQUksVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSwwQkFBMEIsR0FBRyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsMEJBQTBCLEdBQUcsSUFBSSxFQUFFO0FBQzVNLGdEQUFnRCxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQzFFLGdEQUFnRCxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzdFLDZDQUE2QztBQUM3Qyx5Q0FBeUMsQ0FBQyxPQUFPLEdBQUcsRUFBRTtBQUN0RCw0Q0FBNEMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0FBQ3RFLDRDQUE0QyxlQUFlLEdBQUcsR0FBRyxDQUFDO0FBQ2xFLHlDQUF5QyxTQUFTO0FBQ2xELDRDQUE0QyxJQUFJO0FBQ2hELGdEQUFnRCxJQUFJLENBQUMsMEJBQTBCLElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUU7QUFDOUcsb0RBQW9ELFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN4RSxpREFBaUQ7QUFDakQsNkNBQTZDLFNBQVM7QUFDdEQsZ0RBQWdELElBQUksa0JBQWtCLEVBQUU7QUFDeEUsb0RBQW9ELE1BQU0sZUFBZSxDQUFDO0FBQzFFLGlEQUFpRDtBQUNqRCw2Q0FBNkM7QUFDN0MseUNBQXlDO0FBQ3pDO0FBQ0Esd0NBQXdDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdkYsd0NBQXdDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0Qsd0NBQXdDLE9BQU8sVUFBVSxDQUFDO0FBQzFELHFDQUFxQyxDQUFDLENBQUM7QUFDdkMsaUNBQWlDLENBQUMsQ0FBQztBQUNuQyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxvQkFBb0I7QUFDckQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLGtCQUFrQixDQUFDLEtBQUssRUFBRTtBQUN0RSxnQ0FBZ0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ2xEO0FBQ0EsZ0NBQWdDLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPO0FBQzNELG9DQUFvQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUk7QUFDckQsb0NBQW9DLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxtQkFBbUI7QUFDbkYsb0NBQW9DLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSTtBQUNyRCxvQ0FBb0MsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO0FBQzlFLGdDQUFnQyxJQUFJLG9CQUFvQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQzVHLGdDQUFnQyxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDNUcsZ0NBQWdDLElBQUksWUFBWSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxvQkFBb0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7QUFDekcsZ0NBQWdDLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssRUFBRTtBQUMxRSxvQ0FBb0MsSUFBSSxLQUFLLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDeEUsd0NBQXdDLGFBQWEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakU7QUFDQSxvQ0FBb0MsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztBQUMzRix3Q0FBd0MsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO0FBQ3JFLHdDQUF3QyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7QUFDekQsd0NBQXdDLE9BQU8sRUFBRSxPQUFPO0FBQ3hELHdDQUF3QyxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7QUFDbkUsd0NBQXdDLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztBQUNuRSx3Q0FBd0MsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO0FBQ25FLHdDQUF3QyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO0FBQ2pGLHdDQUF3QyxPQUFPLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtBQUN4RSx3Q0FBd0Msa0JBQWtCLEVBQUUsTUFBTSxDQUFDLGtCQUFrQjtBQUNyRixxQ0FBcUMsQ0FBQyxDQUFDO0FBQ3ZDLG9DQUFvQyxPQUFPLGdCQUFnQixDQUFDLGNBQWMsQ0FBQztBQUMzRSx3Q0FBd0MsTUFBTSxFQUFFLGFBQWE7QUFDN0Qsd0NBQXdDLElBQUksRUFBRSxJQUFJO0FBQ2xELHdDQUF3QyxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7QUFDbkUsd0NBQXdDLG1CQUFtQixFQUFFLG1CQUFtQjtBQUNoRix3Q0FBd0MsZ0JBQWdCLEVBQUUsZ0JBQWdCO0FBQzFFLHdDQUF3QyxJQUFJLEVBQUUsSUFBSTtBQUNsRCxxQ0FBcUMsQ0FBQyxDQUFDO0FBQ3ZDLGlDQUFpQyxDQUFDLENBQUM7QUFDbkMsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsb0JBQW9CO0FBQ3JELDRCQUE0QixLQUFLLEVBQUUsU0FBUyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUU7QUFDdkUsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLFdBQVcsRUFBRTtBQUMzRixvQ0FBb0MsSUFBSSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBQzdEO0FBQ0Esb0NBQW9DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUYsd0NBQXdDLElBQUksQ0FBQyxNQUFNLElBQUksc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFO0FBQ3ZHLDRDQUE0QyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0Rix5Q0FBeUM7QUFDekMscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLE9BQU8sZUFBZSxDQUFDO0FBQzNELGlDQUFpQyxDQUFDLENBQUM7QUFDbkMsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsU0FBUztBQUMxQyw0QkFBNEIsR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQ2hELGdDQUFnQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3JFLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLFdBQVc7QUFDNUMsNEJBQTRCLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUNoRCxnQ0FBZ0MsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqSiw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxVQUFVO0FBQzNDLDRCQUE0QixHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDaEQsZ0NBQWdDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUY7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDdkYsb0NBQW9DLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztBQUNyRyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNyRiw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxTQUFTO0FBQzFDLDRCQUE0QixHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDaEQsZ0NBQWdDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDNUY7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDckYsb0NBQW9DLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzdGLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ25GLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLFVBQVU7QUFDM0MsNEJBQTRCLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUNoRCxnQ0FBZ0MsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDeEU7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFO0FBQ3hFLG9DQUFvQyxHQUFHLEdBQUcsaUJBQWlCLENBQUM7QUFDNUQsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEYsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsTUFBTTtBQUN2Qyw0QkFBNEIsR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQ2hELGdDQUFnQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUTtBQUM1RCxvQ0FBb0MsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDM0Q7QUFDQSxnQ0FBZ0MsSUFBSSxRQUFRLEtBQUssT0FBTyxFQUFFO0FBQzFELG9DQUFvQyxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3JGLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDM0Y7QUFDQSxnQ0FBZ0MsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxZQUFZLElBQUksUUFBUSxDQUFDLENBQUM7QUFDakcsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsUUFBUTtBQUN6Qyw0QkFBNEIsR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQ2hELGdDQUFnQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pGO0FBQ0EsZ0NBQWdDLElBQUksTUFBTSxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDdkQsb0NBQW9DLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDL0MsaUNBQWlDLE1BQU0sSUFBSSxNQUFNLElBQUksR0FBRyxFQUFFO0FBQzFELG9DQUFvQyxNQUFNLEdBQUcsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUMxRCxpQ0FBaUMsTUFBTSxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDdkQsb0NBQW9DLE1BQU0sR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUN4RSxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNqRiw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxhQUFhO0FBQzlDLDRCQUE0QixHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDaEQsZ0NBQWdDLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzVILDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLG9CQUFvQjtBQUNyRCw0QkFBNEIsR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQ2hELGdDQUFnQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbEQ7QUFDQSxnQ0FBZ0MsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVk7QUFDckgsb0NBQW9DLElBQUksY0FBYyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7QUFDNUUsb0NBQW9DLElBQUksa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0FBQ2hFO0FBQ0Esb0NBQW9DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0Ysd0NBQXdDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDM0sscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLFdBQVcsRUFBRTtBQUN2Ryx3Q0FBd0MsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsU0FBUyxDQUFDLFVBQVUsRUFBRTtBQUNqRyw0Q0FBNEMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDO0FBQ2hFLHlDQUF5QyxDQUFDLENBQUM7QUFDM0MscUNBQXFDLEVBQUUsVUFBVSxNQUFNLEVBQUU7QUFDekQsd0NBQXdDLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDeEcsd0NBQXdDLE9BQU8sRUFBRSxDQUFDO0FBQ2xELHFDQUFxQyxDQUFDLENBQUM7QUFDdkMsaUNBQWlDLENBQUMsQ0FBQztBQUNuQyxnQ0FBZ0MsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixDQUFDLENBQUM7QUFDeEcsNkJBQTZCO0FBQzdCLHlCQUF5QixDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLHdCQUF3QixPQUFPLElBQUksQ0FBQztBQUNwQyxxQkFBcUIsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsZ0JBQWdCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLGdCQUFnQixJQUFJLHVCQUF1QixHQUFHLElBQUksQ0FBQztBQUNuRCxnQkFBZ0IsSUFBSSxpQkFBaUIsR0FBRyw4QkFBOEIsR0FBRyxzQ0FBc0MsQ0FBQztBQUNoSDtBQUNBLGdCQUFnQixTQUFTLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7QUFDaEUsb0JBQW9CLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDekMsb0JBQW9CLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDekM7QUFDQSxvQkFBb0IsSUFBSSxHQUFHLEdBQUcsS0FBSyxHQUFHLEdBQUcsRUFBRTtBQUMzQyx3QkFBd0IsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDMUMscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNwQztBQUNBLG9CQUFvQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3BELHdCQUF3QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRSxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5QyxvQkFBb0IsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDckMsb0JBQW9CLElBQUksS0FBSyxHQUFHLFNBQVMsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUY7QUFDQSxvQkFBb0IsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDdEMsd0JBQXdCLE9BQU8sS0FBSyxDQUFDO0FBQ3JDLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQztBQUN4QyxvQkFBb0IsT0FBTyxJQUFJLENBQUM7QUFDaEMsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLElBQUksV0FBVztBQUMvQjtBQUNBLG9CQUFvQixZQUFZO0FBQ2hDLHdCQUF3QixTQUFTLFdBQVcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFO0FBQzlELDRCQUE0QixlQUFlLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQy9EO0FBQ0EsNEJBQTRCLElBQUksTUFBTSxDQUFDO0FBQ3ZDO0FBQ0EsNEJBQTRCLElBQUksSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQ2hFLGdDQUFnQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQzdDLDZCQUE2QixNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQ3RFLGdDQUFnQyxNQUFNLEdBQUcsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xFLDZCQUE2QixNQUFNO0FBQ25DLGdDQUFnQyxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7QUFDdEYsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDcEQsZ0NBQWdDLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztBQUN0Riw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDekQsNEJBQTRCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ2pELDRCQUE0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDMUUsNEJBQTRCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQztBQUN2RixnQ0FBZ0MsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQy9DLGdDQUFnQyxlQUFlLEVBQUUsVUFBVSxDQUFDLGdCQUFnQixDQUFDLGVBQWU7QUFDNUYsNkJBQTZCLENBQUMsQ0FBQztBQUMvQiw0QkFBNEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDcEQseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNuRCw0QkFBNEIsR0FBRyxFQUFFLE9BQU87QUFDeEMsNEJBQTRCLEtBQUssRUFBRSxTQUFTLEtBQUssQ0FBQyxZQUFZLEVBQUU7QUFDaEUsZ0NBQWdDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDekQsZ0NBQWdDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNsRjtBQUNBLGdDQUFnQyxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRTtBQUN0RSxvQ0FBb0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDekUsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUk7QUFDcEMsb0NBQW9DLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3pGO0FBQ0Esb0NBQW9DLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUN2RCx3Q0FBd0MsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1RSx3Q0FBd0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakY7QUFDQSx3Q0FBd0MsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDckgsNENBQTRDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ2pFLHlDQUF5QztBQUN6QyxxQ0FBcUM7QUFDckMsaUNBQWlDLENBQUMsT0FBTyxFQUFFLEVBQUU7QUFDN0Msb0NBQW9DLElBQUksRUFBRSxZQUFZLEtBQUssQ0FBQyxvQkFBb0IsRUFBRTtBQUNsRix3Q0FBd0MsTUFBTSxFQUFFLENBQUM7QUFDakQscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxnRUFBZ0UsQ0FBQyxDQUFDO0FBQ3RILG9DQUFvQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUN6RCxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsYUFBYTtBQUM5Qyw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsV0FBVyxHQUFHO0FBQzFELGdDQUFnQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3pELGdDQUFnQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDL0M7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFO0FBQ2xFLG9DQUFvQyxPQUFPO0FBQzNDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDbkQsZ0NBQWdDLElBQUksc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FBQ2hFLGdDQUFnQyxJQUFJLE9BQU8sR0FBRyxFQUFFO0FBQ2hELG9DQUFvQyxFQUFFLENBQUM7QUFDdkM7QUFDQSxnQ0FBZ0MsT0FBTyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxFQUFFO0FBQ3ZFLG9DQUFvQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksc0JBQXNCLEVBQUU7QUFDbEYsd0NBQXdDLE1BQU07QUFDOUMscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLE9BQU8sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZFLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO0FBQzVELG9DQUFvQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRixpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsZ0JBQWdCO0FBQ2pELDRCQUE0QixLQUFLLEVBQUUsU0FBUyxjQUFjLEdBQUc7QUFDN0QsZ0NBQWdDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN2RSw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxPQUFPO0FBQ3hDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxLQUFLLENBQUMsWUFBWSxFQUFFO0FBQ2hFLGdDQUFnQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM5RCxnQ0FBZ0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUYsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsdUJBQXVCO0FBQ3hELDRCQUE0QixLQUFLLEVBQUUsU0FBUyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUU7QUFDN0UsZ0NBQWdDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPO0FBQzFELG9DQUFvQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUN2RSxnQ0FBZ0MsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLGFBQWEsSUFBSSxhQUFhLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDO0FBQzFHLGdDQUFnQyxJQUFJLEdBQUcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xHLGdDQUFnQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRTtBQUNyRixvQ0FBb0MsSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtBQUN6Six3Q0FBd0MsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3pGLDRDQUE0QyxPQUFPLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuRix5Q0FBeUM7QUFDekM7QUFDQSx3Q0FBd0MsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxRCxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsOENBQThDLEdBQUcsNkJBQTZCLENBQUMsQ0FBQztBQUNoSixpQ0FBaUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLE1BQU0sRUFBRTtBQUMzRCxvQ0FBb0MsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVELG9DQUFvQyxPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDMUUsaUNBQWlDLENBQUMsQ0FBQztBQUNuQyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxTQUFTO0FBQzFDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxPQUFPLENBQUMsU0FBUyxFQUFFO0FBQy9ELGdDQUFnQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbEQ7QUFDQSxnQ0FBZ0MsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNqRixvQ0FBb0MsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3pFLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTztBQUMxRCxvQ0FBb0MsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDdkUsZ0NBQWdDLElBQUksT0FBTyxHQUFHLGFBQWEsSUFBSSxhQUFhLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM5SyxnQ0FBZ0MsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxNQUFNLEVBQUU7QUFDdEcsb0NBQW9DLElBQUksTUFBTSxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzFFLHdDQUF3QyxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUM1RCx3Q0FBd0MsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RDtBQUNBLG9DQUFvQyxPQUFPLElBQUksSUFBSSxDQUFDO0FBQ3BELHdDQUF3QyxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7QUFDckUsd0NBQXdDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtBQUN6RCx3Q0FBd0MsU0FBUyxFQUFFLFNBQVM7QUFDNUQsd0NBQXdDLFFBQVEsRUFBRSxRQUFRO0FBQzFELHdDQUF3QyxHQUFHLEVBQUUsR0FBRztBQUNoRCx3Q0FBd0MsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO0FBQ3BFLHdDQUF3QyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsZ0JBQWdCO0FBQ2xGLHdDQUF3QyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsa0JBQWtCO0FBQ3JGLHFDQUFxQyxDQUFDLENBQUM7QUFDdkMsaUNBQWlDLENBQUMsQ0FBQztBQUNuQyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxnQkFBZ0I7QUFDakQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLGNBQWMsR0FBRztBQUM3RCxnQ0FBZ0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ2xEO0FBQ0EsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxNQUFNLEVBQUU7QUFDL0Usb0NBQW9DLElBQUksTUFBTSxZQUFZLEtBQUssQ0FBQyxrQkFBa0IsRUFBRTtBQUNwRix3Q0FBd0MsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3hFO0FBQ0Esd0NBQXdDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN6RDtBQUNBLHdDQUF3QyxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7QUFDN0UscUNBQXFDO0FBQ3JDLGlDQUFpQyxDQUFDLENBQUM7QUFDbkMsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsY0FBYztBQUMvQyw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsWUFBWSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUU7QUFDdEUsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzlFLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLFNBQVM7QUFDMUMsNEJBQTRCLEtBQUssRUFBRSxTQUFTLE9BQU8sR0FBRztBQUN0RCxnQ0FBZ0MsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzlELDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGVBQWU7QUFDaEQsNEJBQTRCLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUNoRCxnQ0FBZ0MsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQ3pEO0FBQ0EsZ0NBQWdDLElBQUk7QUFDcEMsb0NBQW9DLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDOUYsaUNBQWlDLENBQUMsT0FBTyxHQUFHLEVBQUU7QUFDOUMsb0NBQW9DLElBQUksR0FBRyxZQUFZLEtBQUssQ0FBQyxvQkFBb0IsRUFBRTtBQUNuRix3Q0FBd0MsTUFBTSxHQUFHLENBQUM7QUFDbEQscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6RCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUMvRiw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxXQUFXO0FBQzVDLDRCQUE0QixHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDaEQsZ0NBQWdDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDekQsZ0NBQWdDLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNsRDtBQUNBLGdDQUFnQyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7QUFDeEQsb0NBQW9DLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuRDtBQUNBLG9DQUFvQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFO0FBQ3RFLHdDQUF3QyxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDbkUscUNBQXFDO0FBQ3JDLGlDQUFpQyxNQUFNO0FBQ3ZDLG9DQUFvQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7QUFDcEQsb0NBQW9DLElBQUksZUFBZSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7QUFDN0Usb0NBQW9DLElBQUksS0FBSyxHQUFHLEtBQUs7QUFDckQsd0NBQXdDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO0FBQ3pEO0FBQ0Esb0NBQW9DLE9BQU8sQ0FBQyxLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtBQUM5RCx3Q0FBd0MsR0FBRyxJQUFJLElBQUksR0FBRyxlQUFlLENBQUM7QUFDdEU7QUFDQSx3Q0FBd0MsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFO0FBQ3JELDRDQUE0QyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELHlDQUF5QztBQUN6QztBQUNBLHdDQUF3QyxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN6RCx3Q0FBd0MsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN0RixxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsSUFBSSxLQUFLLEVBQUU7QUFDL0Msd0NBQXdDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQsd0NBQXdDLElBQUksRUFBRSxDQUFDO0FBQy9DO0FBQ0Esd0NBQXdDLEdBQUc7QUFDM0MsNENBQTRDLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDbEUseUNBQXlDLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3pFO0FBQ0Esd0NBQXdDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNyRDtBQUNBLHdDQUF3QyxPQUFPLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksRUFBRTtBQUN6RSw0Q0FBNEMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0UsNENBQTRDLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDbEUseUNBQXlDO0FBQ3pDO0FBQ0Esd0NBQXdDLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFO0FBQ0Esd0NBQXdDLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFO0FBQzlELDRDQUE0QyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQzFELHlDQUF5QztBQUN6QyxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDdkYsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsVUFBVTtBQUMzQyw0QkFBNEIsR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQ2hELGdDQUFnQyxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0FBQ3ZFLGdDQUFnQyxJQUFJLEdBQUcsR0FBRyxhQUFhLEdBQUcsYUFBYSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUN6RyxnQ0FBZ0MsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoRiw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxjQUFjO0FBQy9DLDRCQUE0QixHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDaEQsZ0NBQWdDLElBQUksc0JBQXNCLEdBQUc7QUFDN0Qsb0NBQW9DLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUTtBQUN6RCxvQ0FBb0MsTUFBTSxFQUFFLEtBQUssQ0FBQyxRQUFRO0FBQzFELG9DQUFvQyxPQUFPLEVBQUUsS0FBSyxDQUFDLFFBQVE7QUFDM0Qsb0NBQW9DLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtBQUM1RCxvQ0FBb0MsT0FBTyxFQUFFLEtBQUssQ0FBQyxRQUFRO0FBQzNELG9DQUFvQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7QUFDNUQsb0NBQW9DLFlBQVksRUFBRSxLQUFLLENBQUMsUUFBUTtBQUNoRSxvQ0FBb0MsT0FBTyxFQUFFLEtBQUssQ0FBQyxRQUFRO0FBQzNELG9DQUFvQyxPQUFPLEVBQUUsV0FBVyxDQUFDLE1BQU07QUFDL0QsaUNBQWlDLENBQUM7QUFDbEMsZ0NBQWdDLElBQUksT0FBTyxHQUFHO0FBQzlDLG9DQUFvQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO0FBQzNFLG9DQUFvQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhO0FBQ3RFLG9DQUFvQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVE7QUFDdEUsb0NBQW9DLFlBQVksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUc7QUFDNUQsaUNBQWlDLENBQUM7QUFDbEMsZ0NBQWdDLElBQUksUUFBUSxDQUFDO0FBQzdDO0FBQ0EsZ0NBQWdDLElBQUk7QUFDcEMsb0NBQW9DLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDN0UsaUNBQWlDLENBQUMsT0FBTyxHQUFHLEVBQUU7QUFDOUMsb0NBQW9DLElBQUksR0FBRyxZQUFZLEtBQUssQ0FBQyxvQkFBb0IsRUFBRTtBQUNuRix3Q0FBd0MsTUFBTSxHQUFHLENBQUM7QUFDbEQscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxpREFBaUQsQ0FBQyxDQUFDO0FBQ3ZHLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRTtBQUN2RSxvQ0FBb0MsSUFBSSwwQkFBMEIsR0FBRyxJQUFJLENBQUM7QUFDMUUsb0NBQW9DLElBQUksa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0FBQ25FLG9DQUFvQyxJQUFJLGVBQWUsR0FBRyxTQUFTLENBQUM7QUFDcEU7QUFDQSxvQ0FBb0MsSUFBSTtBQUN4Qyx3Q0FBd0MsS0FBSyxJQUFJLFVBQVUsR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsMEJBQTBCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLDBCQUEwQixHQUFHLElBQUksRUFBRTtBQUNuTiw0Q0FBNEMsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUNuRSw0Q0FBNEMsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxRTtBQUNBLDRDQUE0QyxJQUFJLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzdFLGdEQUFnRCxJQUFJLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3hGLG9EQUFvRCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxLQUFLLEtBQUssUUFBUSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDM0ksaURBQWlELE1BQU07QUFDdkQsb0RBQW9ELENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsbUNBQW1DLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzVILGlEQUFpRDtBQUNqRCw2Q0FBNkMsTUFBTSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtBQUNoRixnREFBZ0QsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDekU7QUFDQSxnREFBZ0QsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO0FBQ2hGLG9EQUFvRCxXQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3RHLGlEQUFpRCxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDbEosb0RBQW9ELFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDeEUsaURBQWlELE1BQU07QUFDdkQsb0RBQW9ELENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsb0RBQW9ELENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzdJLG9EQUFvRCxTQUFTO0FBQzdELGlEQUFpRDtBQUNqRDtBQUNBLGdEQUFnRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQ3hFLG9EQUFvRCxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1RixpREFBaUQ7QUFDakQ7QUFDQSxnREFBZ0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUNyRiw2Q0FBNkM7QUFDN0MseUNBQXlDO0FBQ3pDLHFDQUFxQyxDQUFDLE9BQU8sR0FBRyxFQUFFO0FBQ2xELHdDQUF3QyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFDbEUsd0NBQXdDLGVBQWUsR0FBRyxHQUFHLENBQUM7QUFDOUQscUNBQXFDLFNBQVM7QUFDOUMsd0NBQXdDLElBQUk7QUFDNUMsNENBQTRDLElBQUksQ0FBQywwQkFBMEIsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRTtBQUMxRyxnREFBZ0QsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3BFLDZDQUE2QztBQUM3Qyx5Q0FBeUMsU0FBUztBQUNsRCw0Q0FBNEMsSUFBSSxrQkFBa0IsRUFBRTtBQUNwRSxnREFBZ0QsTUFBTSxlQUFlLENBQUM7QUFDdEUsNkNBQTZDO0FBQzdDLHlDQUF5QztBQUN6QyxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDeEYsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsYUFBYTtBQUM5Qyw0QkFBNEIsR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQ2hELGdDQUFnQyxJQUFJLElBQUksQ0FBQztBQUN6QyxnQ0FBZ0MsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFFO0FBQ0EsZ0NBQWdDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxpQkFBaUIsRUFBRTtBQUNqSixvQ0FBb0MsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRixpQ0FBaUMsTUFBTTtBQUN2QyxvQ0FBb0MsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtBQUNqRSx3Q0FBd0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZILHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsdUJBQXVCLENBQUMsRUFBRSxDQUFDLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztBQUN6SixpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQ3JEO0FBQ0EsZ0NBQWdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0Usb0NBQW9DLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkUsb0NBQW9DLFdBQVcsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN0RixpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMzRiw2QkFBNkI7QUFDN0IseUJBQXlCLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0Esd0JBQXdCLE9BQU8sV0FBVyxDQUFDO0FBQzNDLHFCQUFxQixFQUFFLENBQUM7QUFDeEI7QUFDQSxnQkFBZ0IsT0FBTyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDbEQ7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQSxtQkFBbUIsU0FBUyxNQUFNLEVBQUUsT0FBTyxFQUFFLCtCQUErQixFQUFFO0FBRzlFO0FBQ0E7QUFDQSxnQkFBZ0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFO0FBQzdELG9CQUFvQixLQUFLLEVBQUUsSUFBSTtBQUMvQixpQkFBaUIsQ0FBQyxDQUFDO0FBQ25CLGdCQUFnQixPQUFPLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ2xHO0FBQ0EsZ0JBQWdCLElBQUksWUFBWSxHQUFHLHNCQUFzQixDQUFDLCtCQUErQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUY7QUFDQSxnQkFBZ0IsSUFBSSxLQUFLLEdBQUcsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0Q7QUFDQSxnQkFBZ0IsSUFBSSxXQUFXLEdBQUcsK0JBQStCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkU7QUFDQSxnQkFBZ0IsSUFBSSxPQUFPLEdBQUcsK0JBQStCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkU7QUFDQSxnQkFBZ0IsSUFBSSxlQUFlLEdBQUcsK0JBQStCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0U7QUFDQSxnQkFBZ0IsSUFBSSxPQUFPLEdBQUcsK0JBQStCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkU7QUFDQSxnQkFBZ0IsSUFBSSxXQUFXLEdBQUcsK0JBQStCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkU7QUFDQSxnQkFBZ0IsU0FBUyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQy9HO0FBQ0EsZ0JBQWdCLFNBQVMsMEJBQTBCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLEtBQUssVUFBVSxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO0FBQ2pNO0FBQ0EsZ0JBQWdCLFNBQVMsc0JBQXNCLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLElBQUksY0FBYyxDQUFDLDJEQUEyRCxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxDQUFDLEVBQUU7QUFDdEw7QUFDQSxnQkFBZ0IsU0FBUyxlQUFlLENBQUMsQ0FBQyxFQUFFLEVBQUUsZUFBZSxHQUFHLE1BQU0sQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsR0FBRyxTQUFTLGVBQWUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzdOO0FBQ0EsZ0JBQWdCLFNBQVMsU0FBUyxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsRUFBRSxJQUFJLE9BQU8sVUFBVSxLQUFLLFVBQVUsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFLEVBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxFQUFFLGVBQWUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRTtBQUNqWjtBQUNBLGdCQUFnQixTQUFTLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsZUFBZSxHQUFHLE1BQU0sQ0FBQyxjQUFjLElBQUksU0FBUyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDMUw7QUFDQSxnQkFBZ0IsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxLQUFLLEVBQUUsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRTtBQUN6UjtBQUNBLGdCQUFnQixTQUFTLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sWUFBWSxFQUFFLElBQUksSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3JaO0FBQ0EsZ0JBQWdCLFNBQVMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFO0FBQ3ZJO0FBQ0EsZ0JBQWdCLFNBQVMsZ0JBQWdCLEdBQUcsRUFBRSxNQUFNLElBQUksU0FBUyxDQUFDLHNEQUFzRCxDQUFDLENBQUMsRUFBRTtBQUM1SDtBQUNBLGdCQUFnQixTQUFTLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUFFO0FBQ3phO0FBQ0EsZ0JBQWdCLFNBQVMsZUFBZSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFO0FBQ3JGO0FBQ0EsZ0JBQWdCLFNBQVMsT0FBTyxDQUFD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QUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxD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QUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVILG9CQUFvQixJQUFJLFlBQVksR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDL1Usb0JBQW9CLElBQUksVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3BVLG9CQUFvQixJQUFJLGVBQWUsR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaGtKLG9CQUFvQixJQUFJLGdCQUFnQixHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVB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QyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUNyekUsb0JBQW9CLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3WSxvQkFBb0IsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwNUksb0JBQW9CLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6NUMsb0JBQW9CLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5eEQsb0JBQW9CLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFD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QUN2Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUM7QUFDNUIscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0Isd0JBQXdCLENBQUMsRUFBRSxDQUFDO0FBQzVCLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztBQUM1QixxQkFBcUIsRUFBRTtBQUN2Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUM7QUFDNUIscUJBQXFCLENBQUMsRUFBRSxDQUFDO0FBQ3pCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztBQUM1Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QixxQkFBcUIsRUFBRTtBQUN2Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUM7QUFDNUIsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0IscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLENBQUMsRUFBRSxDQUFDO0FBQzVCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztBQUM1Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QixxQkFBcUIsRUFBRTtBQUN2Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUM7QUFDNUIsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0IscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLENBQUMsRUFBRSxDQUFDO0FBQzVCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztBQUM1QixxQkFBcUIsRUFBRTtBQUN2Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUM7QUFDNUIscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0Isd0JBQXdCLENBQUMsRUFBRSxDQUFDO0FBQzVCLHFCQUFxQixDQUFDLEVBQUUsQ0FBQztBQUN6Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QixxQkFBcUIsRUFBRTtBQUN2Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUM7QUFDNUIsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0IscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLENBQUMsRUFBRSxDQUFDO0FBQzVCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztBQUM1Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QixxQkFBcUIsRUFBRTtBQUN2Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUM7QUFDNUIsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0IscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0Isd0JBQXdCLENBQUMsRUFBRSxDQUFDO0FBQzVCLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztBQUM1QixxQkFBcUIsQ0FBQyxFQUFFLENBQUM7QUFDekIsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0Isd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0IscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0Isd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0IscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0Isd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0IscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLENBQUMsRUFBRSxDQUFDO0FBQzVCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztBQUM1Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QixxQkFBcUIsRUFBRTtBQUN2Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUM7QUFDNUIscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0Isd0JBQXdCLENBQUMsRUFBRSxDQUFDO0FBQzVCLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztBQUM1QixxQkFBcUIsRUFBRTtBQUN2Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUM7QUFDNUIscUJBQXFCLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLG9CQUFvQixJQUFJLG1CQUFtQixHQUFHLENBQUM7QUFDL0Msd0JBQXdCLE1BQU0sRUFBRSxDQUFDO0FBQ2pDLDRCQUE0QixDQUFDLEVBQUUsQ0FBQztBQUNoQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqQyx5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsQ0FBQyxFQUFFLENBQUM7QUFDaEMsNEJBQTRCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakMseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakMsNEJBQTRCLENBQUMsRUFBRSxDQUFDO0FBQ2hDLHlCQUF5QixDQUFDO0FBQzFCLHdCQUF3QixTQUFTLEVBQUUsQ0FBQztBQUNwQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUM7QUFDaEMsNEJBQTRCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakMseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLENBQUMsRUFBRSxDQUFDO0FBQ2hDLDRCQUE0QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLDRCQUE0QixDQUFDLEVBQUUsQ0FBQztBQUNoQyx5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsQ0FBQyxFQUFFLENBQUM7QUFDaEMsNEJBQTRCLENBQUMsRUFBRSxDQUFDO0FBQ2hDLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixDQUFDLEVBQUUsQ0FBQztBQUNoQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUM7QUFDaEMseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakMsNEJBQTRCLENBQUMsRUFBRSxDQUFDO0FBQ2hDLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixDQUFDLEVBQUUsQ0FBQztBQUNoQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUM7QUFDaEMseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLENBQUMsRUFBRSxDQUFDO0FBQ2hDLDRCQUE0QixDQUFDLEVBQUUsQ0FBQztBQUNoQyx5QkFBeUIsQ0FBQztBQUMxQixxQkFBcUIsRUFBRTtBQUN2Qix3QkFBd0IsTUFBTSxFQUFFLENBQUM7QUFDakMsNEJBQTRCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakMsNEJBQTRCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakMseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLENBQUMsRUFBRSxDQUFDO0FBQ2hDLDRCQUE0QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixDQUFDLEVBQUUsQ0FBQztBQUNoQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqQyx5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUM7QUFDaEMseUJBQXlCLENBQUM7QUFDMUIsd0JBQXdCLFNBQVMsRUFBRSxDQUFDO0FBQ3BDLDRCQUE0QixDQUFDLEVBQUUsQ0FBQztBQUNoQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqQyx5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUM7QUFDaEMseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLENBQUMsRUFBRSxDQUFDO0FBQ2hDLDRCQUE0QixDQUFDLEVBQUUsQ0FBQztBQUNoQyx5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsQ0FBQyxFQUFFLENBQUM7QUFDaEMsNEJBQTRCLENBQUMsRUFBRSxDQUFDO0FBQ2hDLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixDQUFDLEVBQUUsQ0FBQztBQUNoQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUM7QUFDaEMseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLENBQUMsRUFBRSxDQUFDO0FBQ2hDLDRCQUE0QixDQUFDLEVBQUUsQ0FBQztBQUNoQyx5QkFBeUIsQ0FBQztBQUMxQixxQkFBcUIsQ0FBQyxDQUFDO0FBQ3ZCLG9CQUFvQixJQUFJLGNBQWMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzFFLG9CQUFvQixJQUFJLHdCQUF3QixHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3BFO0FBQ0Esb0JBQW9CLFNBQVMscUJBQXFCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUU7QUFDbkYsd0JBQXdCLElBQUksT0FBTyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUM7QUFDOUQsd0JBQXdCLElBQUksUUFBUSxHQUFHLGVBQWUsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RGLHdCQUF3QixJQUFJLFlBQVk7QUFDeEMsNEJBQTRCLENBQUM7QUFDN0IsNEJBQTRCLENBQUM7QUFDN0IsNEJBQTRCLEtBQUs7QUFDakMsNEJBQTRCLEdBQUc7QUFDL0IsNEJBQTRCLElBQUk7QUFDaEMsNEJBQTRCLElBQUk7QUFDaEMsNEJBQTRCLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDeEMsd0JBQXdCLElBQUksY0FBYyxHQUFHLE1BQU0sQ0FBQztBQUNwRDtBQUNBLHdCQUF3QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNyRCw0QkFBNEIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRSw0QkFBNEIsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0QsNEJBQTRCLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9ELDRCQUE0QixZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNySjtBQUNBLDRCQUE0QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN4RCxnQ0FBZ0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUN6RixnQ0FBZ0MsWUFBWSxHQUFHLENBQUMsWUFBWSxHQUFHLGNBQWMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQy9LLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsT0FBTyxNQUFNLENBQUM7QUFDdEMscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUU7QUFDcEgsd0JBQXdCLElBQUksR0FBRyxFQUFFO0FBQ2pDLDRCQUE0QixJQUFJLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JILDRCQUE0QixPQUFPLGVBQWUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoRix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxhQUFhLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzFPLDRCQUE0QixPQUFPLHFCQUFxQixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDekYseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDN0Msd0JBQXdCLElBQUksUUFBUSxHQUFHLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakYsd0JBQXdCLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RELDRCQUE0QixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQseUJBQXlCLENBQUMsQ0FBQztBQUMzQix3QkFBd0IsSUFBSSxjQUFjLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUM3RCx3QkFBd0IsSUFBSSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDdEUsd0JBQXdCLElBQUksU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3RFLHdCQUF3QixJQUFJLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztBQUN6RCx3QkFBd0IsSUFBSSxTQUFTLEdBQUcsQ0FBQztBQUN6Qyw0QkFBNEIsSUFBSSxHQUFHLENBQUM7QUFDcEMsNEJBQTRCLElBQUksR0FBRyxDQUFDO0FBQ3BDLDRCQUE0QixJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLHdCQUF3QixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakM7QUFDQSx3QkFBd0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0QsNEJBQTRCLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pELDRCQUE0QixTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RCw0QkFBNEIsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRSw0QkFBNEIsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRSw0QkFBNEIsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRTtBQUNBLDRCQUE0QixJQUFJLENBQUMsR0FBRyxjQUFjLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDMUksZ0NBQWdDLFNBQVMsSUFBSSxDQUFDLElBQUksY0FBYyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekUsNkJBQTZCLE1BQU07QUFDbkMsZ0NBQWdDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRSw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUkscUJBQXFCLEdBQUcsdUJBQXVCLENBQUMsTUFBTSxDQUFDO0FBQ25GLHdCQUF3QixJQUFJLGlCQUFpQixHQUFHLElBQUksU0FBUyxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFDckYsd0JBQXdCLElBQUksaUJBQWlCLEdBQUcsSUFBSSxTQUFTLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUNyRix3QkFBd0IsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3pGO0FBQ0Esd0JBQXdCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcscUJBQXFCLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDcEUsNEJBQTRCLENBQUMsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCw0QkFBNEIsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRSw0QkFBNEIsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRSw0QkFBNEIsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLGNBQWMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pGLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQztBQUM3Qyx3QkFBd0IsSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDNUMsd0JBQXdCLElBQUksU0FBUyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDckQsd0JBQXdCLElBQUksa0JBQWtCLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQy9FLHdCQUF3QixJQUFJLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4RCx3QkFBd0IsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3hDLHdCQUF3QixJQUFJLE9BQU8sR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDO0FBQzlELHdCQUF3QixJQUFJLFFBQVEsR0FBRyxlQUFlLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0Rix3QkFBd0IsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNuQyw0QkFBNEIsQ0FBQztBQUM3Qiw0QkFBNEIsRUFBRTtBQUM5Qiw0QkFBNEIsRUFBRTtBQUM5Qiw0QkFBNEIsWUFBWSxHQUFHLENBQUM7QUFDNUMsNEJBQTRCLEdBQUc7QUFDL0IsNEJBQTRCLEtBQUssQ0FBQztBQUNsQztBQUNBLHdCQUF3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3pELDRCQUE0QixJQUFJLFVBQVUsRUFBRTtBQUM1QyxnQ0FBZ0MsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUN6RixnQ0FBZ0MsR0FBRyxJQUFJLElBQUksQ0FBQztBQUM1QztBQUNBLGdDQUFnQyxJQUFJLEdBQUcsRUFBRTtBQUN6QyxvQ0FBb0MsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyRCxvQ0FBb0MsU0FBUztBQUM3QyxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RCw0QkFBNEIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QztBQUNBLDRCQUE0QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN4RCxnQ0FBZ0MsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzNELG9DQUFvQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLG9DQUFvQyxTQUFTO0FBQzdDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLENBQUMsSUFBSSxRQUFRLElBQUksQ0FBQyxHQUFHLFNBQVMsSUFBSSxDQUFDLElBQUksT0FBTyxFQUFFO0FBQ3BGLG9DQUFvQyxZQUFZLEdBQUcsWUFBWSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDakY7QUFDQSxvQ0FBb0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxxQkFBcUIsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRix3Q0FBd0MsRUFBRSxHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RSx3Q0FBd0MsRUFBRSxHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RSx3Q0FBd0MsR0FBRyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3RDtBQUNBLHdDQUF3QyxJQUFJLEdBQUcsRUFBRTtBQUNqRCw0Q0FBNEMsR0FBRyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLDRDQUE0QyxZQUFZLElBQUksR0FBRyxDQUFDO0FBQ2hFLHlDQUF5QztBQUN6QyxxQ0FBcUM7QUFDckMsaUNBQWlDLE1BQU07QUFDdkMsb0NBQW9DLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDckQsb0NBQW9DLEtBQUssR0FBRyxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBQy9EO0FBQ0Esb0NBQW9DLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFO0FBQ2xGLHdDQUF3QyxFQUFFLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RDtBQUNBLHdDQUF3QyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUssRUFBRTtBQUNuRSw0Q0FBNEMsRUFBRSxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEU7QUFDQSw0Q0FBNEMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO0FBQ3pELGdEQUFnRCxHQUFHLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JFO0FBQ0EsZ0RBQWdELElBQUksR0FBRyxFQUFFO0FBQ3pELG9EQUFvRCxZQUFZLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQztBQUNqRixpREFBaUQ7QUFDakQsNkNBQTZDO0FBQzdDLHlDQUF5QztBQUN6QyxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ3BGLGdDQUFnQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQy9DLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsT0FBTyxNQUFNLENBQUM7QUFDdEMscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUU7QUFDaEosd0JBQXdCLElBQUksY0FBYyxHQUFHLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUN2RjtBQUNBLHdCQUF3QixJQUFJLGFBQWEsS0FBSyxDQUFDLEVBQUU7QUFDakQsNEJBQTRCLGNBQWMsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RSx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxvQkFBb0IsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO0FBQ3pFLHdCQUF3QixJQUFJLGVBQWUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQ25GLHdCQUF3QixJQUFJLGVBQWUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQ25GLHdCQUF3QixJQUFJLENBQUMsQ0FBQztBQUM5QjtBQUNBLHdCQUF3QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG9CQUFvQixFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ25FLDRCQUE0QixlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyRSw0QkFBNEIsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckUseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksaUJBQWlCLEdBQUcsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzdGO0FBQ0Esd0JBQXdCLElBQUksYUFBYSxLQUFLLENBQUMsRUFBRTtBQUNqRCw0QkFBNEIsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSx1QkFBdUIsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7QUFDL0Usd0JBQXdCLElBQUksa0JBQWtCLEdBQUcsSUFBSSxVQUFVLENBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUN6Rix3QkFBd0IsSUFBSSxrQkFBa0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBQ3pGO0FBQ0Esd0JBQXdCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsdUJBQXVCLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdEUsNEJBQTRCLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRSw0QkFBNEIsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNFLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLGNBQWMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3ZFLHdCQUF3QixJQUFJLGVBQWUsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDO0FBQ3JFLHdCQUF3QixJQUFJLGtCQUFrQixHQUFHLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3pGLHdCQUF3QixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDeEMsd0JBQXdCLElBQUksT0FBTyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUM7QUFDOUQsd0JBQXdCLElBQUksUUFBUSxHQUFHLGVBQWUsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RGLHdCQUF3QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDcEM7QUFDQSx3QkFBd0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6RCw0QkFBNEIsSUFBSSxVQUFVLEVBQUU7QUFDNUMsZ0NBQWdDLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDekYsZ0NBQWdDLEdBQUcsSUFBSSxJQUFJLENBQUM7QUFDNUM7QUFDQSxnQ0FBZ0MsSUFBSSxHQUFHLEVBQUU7QUFDekMsb0NBQW9DLE1BQU0sSUFBSSxVQUFVLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQUN4RixpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksR0FBRyxHQUFHLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVELDRCQUE0QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsNEJBQTRCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUQsZ0NBQWdDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMzQyxnQ0FBZ0MsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3JEO0FBQ0EsZ0NBQWdDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0Usb0NBQW9DLEVBQUUsR0FBRyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLG9DQUFvQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRTtBQUNBLG9DQUFvQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksS0FBSyxFQUFFO0FBQ3pFLHdDQUF3QyxZQUFZLEtBQUssQ0FBQyxDQUFDO0FBQzNELHFDQUFxQyxNQUFNO0FBQzNDLHdDQUF3QyxZQUFZLEdBQUcsWUFBWSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUYscUNBQXFDO0FBQ3JDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLHVCQUF1QixFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzlFLG9DQUFvQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUM3RSxvQ0FBb0MsRUFBRSxHQUFHLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDN0U7QUFDQSxvQ0FBb0MsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxlQUFlLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksY0FBYyxFQUFFO0FBQzNHLHdDQUF3QyxZQUFZLEtBQUssQ0FBQyxDQUFDO0FBQzNELHFDQUFxQyxNQUFNO0FBQzNDLHdDQUF3QyxZQUFZLEdBQUcsWUFBWSxJQUFJLENBQUMsR0FBRyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkcscUNBQXFDO0FBQ3JDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNwRixnQ0FBZ0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQyw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLE9BQU8sTUFBTSxDQUFDO0FBQ3RDLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHVCQUF1QixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLHVCQUF1QixFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFO0FBQ3ZPLHdCQUF3QixJQUFJLE9BQU8sSUFBSSxVQUFVLEVBQUU7QUFDbkQsNEJBQTRCLE1BQU0sSUFBSSxVQUFVLENBQUMsaURBQWlELENBQUMsQ0FBQztBQUNwRyx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQzVDLHdCQUF3QixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDOUMsd0JBQXdCLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztBQUNwRyx3QkFBd0IsSUFBSSxPQUFPLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQztBQUM5RCx3QkFBd0IsSUFBSSxZQUFZLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQztBQUN4RSx3QkFBd0IsSUFBSSxPQUFPLEVBQUUsWUFBWSxDQUFDO0FBQ2xEO0FBQ0Esd0JBQXdCLElBQUksT0FBTyxFQUFFO0FBQ3JDLDRCQUE0QixPQUFPLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsNEJBQTRCLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDOUMsNEJBQTRCLGdCQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0UseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLE9BQU8sVUFBVSxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsRUFBRTtBQUN2RSw0QkFBNEIsSUFBSSxXQUFXLEdBQUcsT0FBTyxHQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsYUFBYSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDM0osNEJBQTRCLGFBQWEsSUFBSSxXQUFXLENBQUM7QUFDekQsNEJBQTRCLElBQUksWUFBWSxHQUFHLENBQUM7QUFDaEQsZ0NBQWdDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDL0MsNEJBQTRCLElBQUksV0FBVyxHQUFHLE9BQU8sR0FBRyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNoRjtBQUNBLDRCQUE0QixPQUFPLElBQUksRUFBRTtBQUN6QyxnQ0FBZ0MsSUFBSSxVQUFVLEdBQUcsT0FBTyxHQUFHLGFBQWEsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzdKO0FBQ0EsZ0NBQWdDLElBQUksVUFBVSxLQUFLLElBQUksRUFBRTtBQUN6RCxvQ0FBb0MsTUFBTTtBQUMxQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsWUFBWSxJQUFJLFVBQVUsQ0FBQztBQUMzRCxnQ0FBZ0MsVUFBVSxJQUFJLFlBQVksQ0FBQztBQUMzRCxnQ0FBZ0MsSUFBSSxNQUFNLENBQUM7QUFDM0M7QUFDQSxnQ0FBZ0MsSUFBSSxVQUFVLEVBQUU7QUFDaEQsb0NBQW9DLElBQUksaUJBQWlCLEdBQUcsYUFBYSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDekc7QUFDQSxvQ0FBb0MsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLEVBQUU7QUFDL0Qsd0NBQXdDLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxhQUFhLEVBQUUsdUJBQXVCLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDL1IscUNBQXFDLE1BQU07QUFDM0Msd0NBQXdDLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDM0csd0NBQXdDLElBQUksR0FBRyxHQUFHLGFBQWEsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2hHLHdDQUF3QyxJQUFJLEdBQUcsR0FBRyxhQUFhLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNoRyx3Q0FBd0MsSUFBSSxNQUFNLEdBQUcsUUFBUSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNJLHdDQUF3QyxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQ2hMLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVELGlDQUFpQyxNQUFNLElBQUksT0FBTyxFQUFFO0FBQ3BELG9DQUFvQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3BFLGlDQUFpQyxNQUFNO0FBQ3ZDLG9DQUFvQyxNQUFNLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMvSSxvQ0FBb0MsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1RCxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ3hELGdDQUFnQyxJQUFJLFVBQVUsR0FBRyxhQUFhLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNwRyxnQ0FBZ0MsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pELGdDQUFnQyxJQUFJLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQzlEO0FBQ0EsZ0NBQWdDLElBQUksVUFBVSxLQUFLLENBQUMsRUFBRTtBQUN0RCxvQ0FBb0MsZ0JBQWdCLEdBQUcsc0JBQXNCLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUN2SCxpQ0FBaUMsTUFBTTtBQUN2QyxvQ0FBb0MsSUFBSSxXQUFXLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQztBQUN2RSxvQ0FBb0MsSUFBSSxTQUFTLEdBQUcsWUFBWSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFDdkYsb0NBQW9DLFlBQVksQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDO0FBQ2pFLG9DQUFvQyxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdkgsb0NBQW9DLFlBQVksQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDO0FBQ25FLG9DQUFvQyxZQUFZLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztBQUN0RSxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxzQkFBc0IsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO0FBQ2pGO0FBQ0EsZ0NBQWdDLElBQUksV0FBVyxLQUFLLHNCQUFzQixHQUFHLENBQUMsRUFBRTtBQUNoRixvQ0FBb0MsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3RFLGlDQUFpQyxNQUFNO0FBQ3ZDLG9DQUFvQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDbkQsd0NBQXdDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbEQsd0NBQXdDLElBQUksR0FBRyxDQUFDO0FBQ2hELHdDQUF3QyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3JELHdDQUF3QyxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQzVELHdDQUF3QyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDOUQ7QUFDQSxvQ0FBb0MsS0FBSyxFQUFFLEdBQUcsV0FBVyxFQUFFLEVBQUUsR0FBRyxzQkFBc0IsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUM5Rix3Q0FBd0MsV0FBVyxHQUFHLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2RSx3Q0FBd0MsSUFBSSxHQUFHLElBQUksR0FBRyxXQUFXLENBQUM7QUFDbEUsd0NBQXdDLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDMUQ7QUFDQSx3Q0FBd0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUUsNENBQTRDLFlBQVksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3hHLHlDQUF5QztBQUN6QztBQUNBLHdDQUF3QyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3RFLHdDQUF3QyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3BELHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDakQsd0JBQXdCLElBQUksS0FBSyxHQUFHLEVBQUU7QUFDdEMsNEJBQTRCLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDaEQsd0JBQXdCLElBQUksa0JBQWtCLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQztBQUNyRjtBQUNBLHdCQUF3QixPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLEVBQUU7QUFDbEUsNEJBQTRCLElBQUksU0FBUyxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xJO0FBQ0EsNEJBQTRCLE9BQU8sU0FBUyxFQUFFLEVBQUU7QUFDaEQsZ0NBQWdDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDeEQsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLFdBQVcsR0FBRyxDQUFDLFdBQVcsQ0FBQztBQUN2RCx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxRSw0QkFBNEIsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDMUMsZ0NBQWdDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakUsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUUsNEJBQTRCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzFDLGdDQUFnQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsT0FBTyxlQUFlLENBQUM7QUFDL0MscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLHVCQUF1QixFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRTtBQUN4VSx3QkFBd0IsSUFBSSxPQUFPLElBQUksVUFBVSxFQUFFO0FBQ25ELDRCQUE0QixNQUFNLElBQUksVUFBVSxDQUFDLDBDQUEwQyxDQUFDLENBQUM7QUFDN0YseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN4Qyx3QkFBd0IsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQ25DO0FBQ0Esd0JBQXdCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JELDRCQUE0QixHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEQ7QUFDQSw0QkFBNEIsSUFBSSxpQkFBaUIsRUFBRTtBQUNuRCxnQ0FBZ0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRSxvQ0FBb0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO0FBQy9ELGlDQUFpQztBQUNqQyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3Qyx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxPQUFPLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQztBQUM5RCx3QkFBd0IsSUFBSSxZQUFZLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQztBQUN4RSx3QkFBd0IsSUFBSSxNQUFNLEdBQUcsT0FBTyxHQUFHLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMvSSx3QkFBd0IsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCO0FBQ0Esd0JBQXdCLE9BQU8sQ0FBQyxHQUFHLHVCQUF1QixFQUFFO0FBQzVELDRCQUE0QixJQUFJLE1BQU0sR0FBRyxPQUFPLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsYUFBYSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDakosNEJBQTRCLE1BQU0sSUFBSSxNQUFNLENBQUM7QUFDN0MsNEJBQTRCLElBQUksV0FBVyxHQUFHLE9BQU8sR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxhQUFhLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN0Siw0QkFBNEIsTUFBTSxJQUFJLFdBQVcsQ0FBQztBQUNsRCw0QkFBNEIsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ2xEO0FBQ0EsNEJBQTRCLEdBQUc7QUFDL0IsZ0NBQWdDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNqRDtBQUNBLGdDQUFnQyxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUU7QUFDbkQsb0NBQW9DLFFBQVEsR0FBRyxPQUFPLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxhQUFhLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM1SSxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLEdBQUcsU0FBUyxHQUFHLE1BQU0sR0FBRyxRQUFRLENBQUM7QUFDdEUsZ0NBQWdDLElBQUksUUFBUSxHQUFHLE9BQU8sR0FBRyxhQUFhLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2hLLGdDQUFnQyxJQUFJLGVBQWUsR0FBRyxVQUFVLEtBQUssT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLEVBQUUsR0FBRyxhQUFhLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3RKLGdDQUFnQyxJQUFJLFlBQVksR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDMUUsZ0NBQWdDLElBQUksV0FBVyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDekUsZ0NBQWdDLElBQUksWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUM7QUFDdkU7QUFDQSxnQ0FBZ0MsSUFBSSxlQUFlLEVBQUU7QUFDckQsb0NBQW9DLElBQUksR0FBRyxHQUFHLGFBQWEsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzVGLG9DQUFvQyxJQUFJLEdBQUcsR0FBRyxhQUFhLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM1RixvQ0FBb0MsSUFBSSxHQUFHLEdBQUcsYUFBYSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDNUYsb0NBQW9DLElBQUksR0FBRyxHQUFHLGFBQWEsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzVGLG9DQUFvQyxXQUFXLElBQUksR0FBRyxDQUFDO0FBQ3ZELG9DQUFvQyxZQUFZLElBQUksR0FBRyxDQUFDO0FBQ3hELG9DQUFvQyxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDaE4saUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxlQUFlLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0YsZ0NBQWdDLElBQUksT0FBTyxHQUFHLFFBQVEsSUFBSSxlQUFlLEdBQUcsQ0FBQyxHQUFHLFdBQVcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckcsZ0NBQWdDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUM7QUFDdEQ7QUFDQSxnQ0FBZ0MsSUFBSSxVQUFVLEVBQUU7QUFDaEQsb0NBQW9DLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQzFFLHdDQUF3QyxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNuRTtBQUNBLHdDQUF3QyxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ2xELDRDQUE0QyxTQUFTO0FBQ3JELHlDQUF5QztBQUN6QztBQUNBLHdDQUF3QyxTQUFTLEdBQUcsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JFLHdDQUF3QyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDOUY7QUFDQSx3Q0FBd0MsUUFBUSxtQkFBbUI7QUFDbkUsNENBQTRDLEtBQUssQ0FBQztBQUNsRCxnREFBZ0QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDbEYsb0RBQW9ELEdBQUcsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZGLGlEQUFpRDtBQUNqRDtBQUNBLGdEQUFnRCxNQUFNO0FBQ3REO0FBQ0EsNENBQTRDLEtBQUssQ0FBQztBQUNsRCxnREFBZ0QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDbEYsb0RBQW9ELEdBQUcsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZGLGlEQUFpRDtBQUNqRDtBQUNBLGdEQUFnRCxNQUFNO0FBQ3REO0FBQ0EsNENBQTRDO0FBQzVDLGdEQUFnRCxNQUFNLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0FBQ25JLHlDQUF5QztBQUN6QyxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsUUFBUSxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDakUsaUNBQWlDLE1BQU07QUFDdkMsb0NBQW9DLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQzFFLHdDQUF3QyxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNuRTtBQUNBLHdDQUF3QyxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ2xELDRDQUE0QyxTQUFTO0FBQ3JELHlDQUF5QztBQUN6QztBQUNBLHdDQUF3QyxTQUFTLEdBQUcsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JFO0FBQ0Esd0NBQXdDLFFBQVEsbUJBQW1CO0FBQ25FLDRDQUE0QyxLQUFLLENBQUM7QUFDbEQsZ0RBQWdELEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ3JGLG9EQUFvRCxHQUFHLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2RixpREFBaUQ7QUFDakQ7QUFDQSxnREFBZ0QsTUFBTTtBQUN0RDtBQUNBLDRDQUE0QyxLQUFLLENBQUM7QUFDbEQsZ0RBQWdELEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ3JGLG9EQUFvRCxHQUFHLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2RixpREFBaUQ7QUFDakQ7QUFDQSxnREFBZ0QsTUFBTTtBQUN0RDtBQUNBLDRDQUE0QztBQUM1QyxnREFBZ0QsTUFBTSxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztBQUNuSSx5Q0FBeUM7QUFDekMscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLFFBQVEsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ2hFLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxDQUFDLEVBQUUsQ0FBQztBQUNwQyxnQ0FBZ0MsSUFBSSxNQUFNLEdBQUcsT0FBTyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3JKO0FBQ0EsZ0NBQWdDLElBQUksTUFBTSxLQUFLLElBQUksRUFBRTtBQUNyRCxvQ0FBb0MsTUFBTTtBQUMxQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsUUFBUSxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUM7QUFDOUQsNkJBQTZCLFFBQVEsSUFBSSxFQUFFO0FBQzNDLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixPQUFPLE1BQU0sQ0FBQztBQUN0QyxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsU0FBUyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRTtBQUNuSSx3QkFBd0IsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0FBQ0Esd0JBQXdCLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDbEMsNEJBQTRCLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDcEMsZ0NBQWdDLENBQUMsRUFBRSxDQUFDLFlBQVk7QUFDaEQsZ0NBQWdDLENBQUMsRUFBRSxDQUFDO0FBQ3BDLDZCQUE2QixDQUFDLENBQUM7QUFDL0I7QUFDQSw0QkFBNEIsSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFO0FBQ2hELGdDQUFnQyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ3hDLG9DQUFvQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLG9DQUFvQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLGlDQUFpQyxDQUFDLENBQUM7QUFDbkMsZ0NBQWdDLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDeEMsb0NBQW9DLENBQUMsRUFBRSxDQUFDO0FBQ3hDLG9DQUFvQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLGlDQUFpQyxDQUFDLENBQUM7QUFDbkMsZ0NBQWdDLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDeEMsb0NBQW9DLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekMsb0NBQW9DLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekMsaUNBQWlDLENBQUMsQ0FBQztBQUNuQyw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksZUFBZSxHQUFHLENBQUMsZUFBZSxHQUFHLENBQUMsSUFBSSxZQUFZLENBQUM7QUFDbkYsd0JBQXdCLElBQUksZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUM3SSx3QkFBd0IsSUFBSSxRQUFRLEdBQUcsRUFBRTtBQUN6Qyw0QkFBNEIsQ0FBQyxHQUFHLENBQUM7QUFDakMsNEJBQTRCLGFBQWE7QUFDekMsNEJBQTRCLElBQUk7QUFDaEMsNEJBQTRCLElBQUk7QUFDaEMsNEJBQTRCLENBQUMsQ0FBQztBQUM5QjtBQUNBLHdCQUF3QixPQUFPLENBQUMsSUFBSSxlQUFlLEVBQUU7QUFDckQsNEJBQTRCLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDL0MsNEJBQTRCLElBQUksR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELDRCQUE0QixJQUFJLEdBQUcsSUFBSSxHQUFHLFlBQVksQ0FBQztBQUN2RDtBQUNBLDRCQUE0QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRSxnQ0FBZ0MsYUFBYSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDN0YsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDekQsNEJBQTRCLENBQUMsRUFBRSxDQUFDO0FBQ2hDLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixPQUFPLFFBQVEsQ0FBQztBQUN4QyxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsU0FBUyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUU7QUFDdFAsd0JBQXdCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztBQUN4QztBQUNBLHdCQUF3QixJQUFJLFVBQVUsRUFBRTtBQUN4Qyw0QkFBNEIsTUFBTSxJQUFJLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBQzFFLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLG1CQUFtQixLQUFLLENBQUMsRUFBRTtBQUN2RCw0QkFBNEIsTUFBTSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLEdBQUcsc0NBQXNDLENBQUMsQ0FBQztBQUM3SCx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBQzlDLHdCQUF3QixJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQ3RDO0FBQ0Esd0JBQXdCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNELDRCQUE0QixHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDOUQ7QUFDQSw0QkFBNEIsSUFBSSxpQkFBaUIsRUFBRTtBQUNuRCxnQ0FBZ0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEUsb0NBQW9DLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztBQUMvRCxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkQseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUMvRCx3QkFBd0IsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25ELHdCQUF3QixJQUFJLFlBQVksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUM3RCw0QkFBNEIsYUFBYSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDNUQsd0JBQXdCLElBQUksWUFBWSxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzdFLHdCQUF3QixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSx3QkFBd0IsSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNsQyw0QkFBNEIsRUFBRSxDQUFDLElBQUksQ0FBQztBQUNwQyxnQ0FBZ0MsQ0FBQyxFQUFFLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDeEQsZ0NBQWdDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckMsNkJBQTZCLENBQUMsQ0FBQztBQUMvQjtBQUNBLDRCQUE0QixJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUU7QUFDaEQsZ0NBQWdDLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDeEMsb0NBQW9DLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekMsb0NBQW9DLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekMsaUNBQWlDLENBQUMsQ0FBQztBQUNuQyxnQ0FBZ0MsRUFBRSxDQUFDLElBQUksQ0FBQztBQUN4QyxvQ0FBb0MsQ0FBQyxFQUFFLENBQUM7QUFDeEMsb0NBQW9DLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekMsaUNBQWlDLENBQUMsQ0FBQztBQUNuQyxnQ0FBZ0MsRUFBRSxDQUFDLElBQUksQ0FBQztBQUN4QyxvQ0FBb0MsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QyxvQ0FBb0MsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ25DLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxrQkFBa0IsR0FBRyxFQUFFO0FBQ25ELDRCQUE0QixRQUFRO0FBQ3BDLDRCQUE0QixNQUFNLENBQUM7QUFDbkM7QUFDQSx3QkFBd0IsSUFBSSxHQUFHLEVBQUU7QUFDakMsNEJBQTRCLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BILHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixLQUFLLENBQUMsR0FBRyxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEUsNEJBQTRCLElBQUksR0FBRyxFQUFFO0FBQ3JDLGdDQUFnQyxNQUFNLEdBQUcsZUFBZSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hHLDZCQUE2QixNQUFNO0FBQ25DLGdDQUFnQyxNQUFNLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUNoSSw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNELHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDO0FBQ2xHO0FBQ0Esd0JBQXdCLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQzVELDRCQUE0QixLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUMvRCxnQ0FBZ0MsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN4QyxnQ0FBZ0MsWUFBWSxHQUFHLENBQUMsQ0FBQztBQUNqRDtBQUNBLGdDQUFnQyxLQUFLLENBQUMsR0FBRyxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEUsb0NBQW9DLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUUsb0NBQW9DLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzdELGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxhQUFhLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3ZFLGdDQUFnQyxDQUFDLEdBQUcsV0FBVyxHQUFHLEVBQUUsR0FBRyxXQUFXLEdBQUcsRUFBRSxHQUFHLFdBQVcsSUFBSSxDQUFDLENBQUM7QUFDM0YsZ0NBQWdDLENBQUMsR0FBRyxXQUFXLEdBQUcsRUFBRSxHQUFHLFdBQVcsR0FBRyxFQUFFLEdBQUcsV0FBVyxJQUFJLENBQUMsQ0FBQztBQUMzRjtBQUNBLGdDQUFnQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksSUFBSSxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxJQUFJLFlBQVksRUFBRTtBQUM5SCxvQ0FBb0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEUsd0NBQXdDLFNBQVMsR0FBRyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLHdDQUF3QyxVQUFVLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RFO0FBQ0Esd0NBQXdDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNFLDRDQUE0QyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RSx5Q0FBeUM7QUFDekMscUNBQXFDO0FBQ3JDLGlDQUFpQyxNQUFNO0FBQ3ZDLG9DQUFvQyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDeEQsd0NBQXdDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQztBQUN6RDtBQUNBLG9DQUFvQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN4RSx3Q0FBd0MsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEQ7QUFDQSx3Q0FBd0MsSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLE9BQU8sSUFBSSxZQUFZLEVBQUU7QUFDcEYsNENBQTRDLFNBQVM7QUFDckQseUNBQXlDO0FBQ3pDO0FBQ0Esd0NBQXdDLFNBQVMsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDMUUsd0NBQXdDLFVBQVUsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEU7QUFDQSx3Q0FBd0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0UsNENBQTRDLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVEO0FBQ0EsNENBQTRDLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxPQUFPLEdBQUcsV0FBVyxFQUFFO0FBQ3ZGLGdEQUFnRCxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BGLDZDQUE2QztBQUM3Qyx5Q0FBeUM7QUFDekMscUNBQXFDO0FBQ3JDLGlDQUFpQztBQUNqQyw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLE9BQU8sWUFBWSxDQUFDO0FBQzVDLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLGlCQUFpQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7QUFDNUQsd0JBQXdCLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUMvQyx3QkFBd0IsYUFBYSxDQUFDLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xGLHdCQUF3QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BELHdCQUF3QixJQUFJLFdBQVcsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ3ZEO0FBQ0Esd0JBQXdCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUU7QUFDeEQsNEJBQTRCLE1BQU0sSUFBSSxVQUFVLENBQUMsd0JBQXdCLEdBQUcsV0FBVyxDQUFDLENBQUM7QUFDekYseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLGFBQWEsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDO0FBQ3pELHdCQUF3QixhQUFhLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMzRSx3QkFBd0IsYUFBYSxDQUFDLGlCQUFpQixHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDM0Usd0JBQXdCLElBQUksd0JBQXdCLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN4RSx3QkFBd0IsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RCx3QkFBd0IsSUFBSSxlQUFlLEdBQUcsYUFBYSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckUsd0JBQXdCLElBQUksVUFBVSxHQUFHLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQzlELHdCQUF3QixJQUFJLFFBQVEsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2pEO0FBQ0Esd0JBQXdCLElBQUksYUFBYSxLQUFLLENBQUMsRUFBRTtBQUNqRCw0QkFBNEIsZUFBZSxHQUFHLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUNyRyw0QkFBNEIsUUFBUSxJQUFJLENBQUMsQ0FBQztBQUMxQyw0QkFBNEIsSUFBSSxLQUFLLEdBQUcsZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakUsNEJBQTRCLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUM3RDtBQUNBLDRCQUE0QixPQUFPLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRTtBQUNoRCxnQ0FBZ0MsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLDZCQUE2QjtBQUM3Qix5QkFBeUIsTUFBTSxJQUFJLGFBQWEsS0FBSyxDQUFDLElBQUksYUFBYSxLQUFLLENBQUMsRUFBRTtBQUMvRSw0QkFBNEIsTUFBTSxJQUFJLFVBQVUsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0FBQzlFLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixhQUFhLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUM5RCx3QkFBd0IsSUFBSSwyQkFBMkIsR0FBRyxhQUFhLENBQUMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsSSx3QkFBd0IsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQzVDLHdCQUF3QixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDbEM7QUFDQSx3QkFBd0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDOUQsNEJBQTRCLElBQUksTUFBTSxHQUFHLDJCQUEyQixLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsMkJBQTJCLEtBQUssQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNoTiw0QkFBNEIsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwRCw0QkFBNEIsUUFBUSxJQUFJLDJCQUEyQixDQUFDO0FBQ3BFLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixhQUFhLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUM5RDtBQUNBLHdCQUF3QixJQUFJLENBQUMsd0JBQXdCLEVBQUU7QUFDdkQsNEJBQTRCLGFBQWEsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDN0UseUJBQXlCLE1BQU07QUFDL0IsNEJBQTRCLGFBQWEsQ0FBQyxlQUFlLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNsRyw0QkFBNEIsUUFBUSxJQUFJLENBQUMsQ0FBQztBQUMxQyx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsYUFBYSxDQUFDLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3JGLHdCQUF3QixRQUFRLElBQUksQ0FBQyxDQUFDO0FBQ3RDO0FBQ0Esd0JBQXdCLElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUU7QUFDakUsNEJBQTRCLElBQUksV0FBVyxLQUFLLEVBQUUsRUFBRTtBQUNwRCxnQ0FBZ0MsSUFBSSxpQkFBaUIsR0FBRyw0QkFBNEIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDckcsZ0NBQWdDLElBQUkseUJBQXlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxtQ0FBbUMsQ0FBQyxDQUFDO0FBQ3JILGdDQUFnQyxJQUFJLGdCQUFnQixHQUFHLENBQUMsRUFBRSx5QkFBeUIsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6RixnQ0FBZ0MsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFDNUQsZ0NBQWdDLElBQUksYUFBYSxHQUFHLElBQUksVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDeEY7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLGdCQUFnQixFQUFFO0FBQ3ZELG9DQUFvQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzVELG9DQUFvQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzVELGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDMUYsZ0NBQWdDLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUN6RixnQ0FBZ0MsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hGLGdDQUFnQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNuRjtBQUNBLGdDQUFnQyxLQUFLLENBQUMsR0FBRyxRQUFRLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsRixvQ0FBb0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0FBQ0Esb0NBQW9DLE9BQU8sQ0FBQyxHQUFHLG1CQUFtQixJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQ3hHLHdDQUF3QyxDQUFDLEVBQUUsQ0FBQztBQUM1QyxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsSUFBSSxDQUFDLEtBQUssbUJBQW1CLEVBQUU7QUFDbkUsd0NBQXdDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixDQUFDO0FBQ3ZGLHdDQUF3QyxNQUFNO0FBQzlDLHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRTtBQUN6RSxvQ0FBb0MsTUFBTSxJQUFJLFVBQVUsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0FBQ3RGLGlDQUFpQztBQUNqQyw2QkFBNkIsTUFBTTtBQUNuQyxnQ0FBZ0MsTUFBTSxJQUFJLFVBQVUsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0FBQ3ZGLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsYUFBYSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7QUFDM0Qsd0JBQXdCLE9BQU8sYUFBYSxDQUFDO0FBQzdDLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7QUFDcEUsd0JBQXdCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUMxQyx3QkFBd0IsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzdDO0FBQ0Esd0JBQXdCLE9BQU8sUUFBUSxHQUFHLEdBQUcsRUFBRTtBQUMvQyw0QkFBNEIsSUFBSSxhQUFhLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2xGLDRCQUE0QixRQUFRLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQztBQUMvRCw0QkFBNEIsSUFBSSxPQUFPLEdBQUc7QUFDMUMsZ0NBQWdDLE1BQU0sRUFBRSxhQUFhO0FBQ3JELGdDQUFnQyxJQUFJLEVBQUUsSUFBSTtBQUMxQyw2QkFBNkIsQ0FBQztBQUM5QjtBQUNBLDRCQUE0QixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRTtBQUN0RCxnQ0FBZ0MsT0FBTyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7QUFDekQsZ0NBQWdDLFFBQVEsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDO0FBQ2pFLGdDQUFnQyxPQUFPLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQztBQUN2RCw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNuRDtBQUNBLDRCQUE0QixJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssRUFBRSxFQUFFO0FBQzNELGdDQUFnQyxNQUFNO0FBQ3RDLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO0FBQ2pELDRCQUE0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9FLGdDQUFnQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztBQUM3RCxnQ0FBZ0MsUUFBUSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3RFLGdDQUFnQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQztBQUMzRCw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLE9BQU8sUUFBUSxDQUFDO0FBQ3hDLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLDRCQUE0QixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7QUFDdkUsd0JBQXdCLE9BQU87QUFDL0IsNEJBQTRCLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQztBQUNyRSw0QkFBNEIsTUFBTSxFQUFFLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUMxRSw0QkFBNEIsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNyRSw0QkFBNEIsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUN0RSw0QkFBNEIsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDO0FBQ3JFLHlCQUF5QixDQUFDO0FBQzFCLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixJQUFJLG1DQUFtQyxHQUFHLEVBQUUsQ0FBQztBQUNqRTtBQUNBLG9CQUFvQixTQUFTLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQzlELHdCQUF3QixJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3BELHdCQUF3QixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSTtBQUMvQyw0QkFBNEIsUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLO0FBQ3BELDRCQUE0QixHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsSUFBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUM7QUFDbEQ7QUFDQSx3QkFBd0IsUUFBUSxNQUFNLENBQUMsSUFBSTtBQUMzQyw0QkFBNEIsS0FBSyxDQUFDO0FBQ2xDLGdDQUFnQyxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDcEQsZ0NBQWdDLElBQUksZUFBZSxHQUFHLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDNUYsZ0NBQWdDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3RSxnQ0FBZ0MsVUFBVSxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hGLGdDQUFnQyxVQUFVLENBQUMsaUJBQWlCLEdBQUcsZUFBZSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEYsZ0NBQWdDLFVBQVUsQ0FBQyxpQkFBaUIsR0FBRyxlQUFlLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4RixnQ0FBZ0MsVUFBVSxDQUFDLGtCQUFrQixHQUFHLGVBQWUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pGLGdDQUFnQyxVQUFVLENBQUMsNEJBQTRCLEdBQUcsZUFBZSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkcsZ0NBQWdDLFVBQVUsQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLEVBQUUsZUFBZSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQy9GLGdDQUFnQyxVQUFVLENBQUMsMkJBQTJCLEdBQUcsQ0FBQyxFQUFFLGVBQWUsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNuRyxnQ0FBZ0MsVUFBVSxDQUFDLFFBQVEsR0FBRyxlQUFlLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoRixnQ0FBZ0MsVUFBVSxDQUFDLGtCQUFrQixHQUFHLGVBQWUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFGLGdDQUFnQyxRQUFRLElBQUksQ0FBQyxDQUFDO0FBQzlDO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFO0FBQ3pELG9DQUFvQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqRixvQ0FBb0MsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1QztBQUNBLG9DQUFvQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuRSx3Q0FBd0MsRUFBRSxDQUFDLElBQUksQ0FBQztBQUNoRCw0Q0FBNEMsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDO0FBQ2xGLDRDQUE0QyxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3RGLHlDQUF5QyxDQUFDLENBQUM7QUFDM0Msd0NBQXdDLFFBQVEsSUFBSSxDQUFDLENBQUM7QUFDdEQscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLFVBQVUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3ZELGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLFVBQVUsQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEVBQUU7QUFDN0Ysb0NBQW9DLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDNUM7QUFDQSxvQ0FBb0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUQsd0NBQXdDLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDaEQsNENBQTRDLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQztBQUNsRiw0Q0FBNEMsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN0Rix5Q0FBeUMsQ0FBQyxDQUFDO0FBQzNDLHdDQUF3QyxRQUFRLElBQUksQ0FBQyxDQUFDO0FBQ3RELHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxVQUFVLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUNqRSxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsVUFBVSxDQUFDLHVCQUF1QixHQUFHLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDM0csZ0NBQWdDLFFBQVEsSUFBSSxDQUFDLENBQUM7QUFDOUMsZ0NBQWdDLFVBQVUsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3RHLGdDQUFnQyxRQUFRLElBQUksQ0FBQyxDQUFDO0FBQzlDLGdDQUFnQyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0csZ0NBQWdDLE1BQU07QUFDdEM7QUFDQSw0QkFBNEIsS0FBSyxDQUFDLENBQUM7QUFDbkMsNEJBQTRCLEtBQUssQ0FBQztBQUNsQyxnQ0FBZ0MsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3BELGdDQUFnQyxVQUFVLENBQUMsSUFBSSxHQUFHLDRCQUE0QixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMvRixnQ0FBZ0MsUUFBUSxJQUFJLG1DQUFtQyxDQUFDO0FBQ2hGLGdDQUFnQyxJQUFJLHNCQUFzQixHQUFHLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDbkcsZ0NBQWdDLFFBQVEsSUFBSSxDQUFDLENBQUM7QUFDOUMsZ0NBQWdDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFLHNCQUFzQixHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BGLGdDQUFnQyxVQUFVLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxzQkFBc0IsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RixnQ0FBZ0MsVUFBVSxDQUFDLFlBQVksR0FBRyxzQkFBc0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFGLGdDQUFnQyxVQUFVLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsWUFBWSxDQUFDO0FBQ3BGLGdDQUFnQyxVQUFVLENBQUMsZUFBZSxHQUFHLHNCQUFzQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0YsZ0NBQWdDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLHNCQUFzQixHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3hGLGdDQUFnQyxVQUFVLENBQUMsbUJBQW1CLEdBQUcsc0JBQXNCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqRyxnQ0FBZ0MsVUFBVSxDQUFDLGlCQUFpQixHQUFHLHNCQUFzQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0YsZ0NBQWdDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsc0JBQXNCLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN6RixnQ0FBZ0MsVUFBVSxDQUFDLGtCQUFrQixHQUFHLHNCQUFzQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakc7QUFDQSxnQ0FBZ0MsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFO0FBQ3hELG9DQUFvQyxJQUFJLHNCQUFzQixHQUFHLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDdkcsb0NBQW9DLFFBQVEsSUFBSSxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLFVBQVUsQ0FBQyxTQUFTLEdBQUcsc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO0FBQ3RGLG9DQUFvQyxVQUFVLENBQUMsU0FBUyxHQUFHLHNCQUFzQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0Ysb0NBQW9DLFVBQVUsQ0FBQyxTQUFTLEdBQUcsc0JBQXNCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzRixvQ0FBb0MsVUFBVSxDQUFDLG1CQUFtQixHQUFHLHNCQUFzQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckcsb0NBQW9DLFVBQVUsQ0FBQyxtQkFBbUIsR0FBRyxzQkFBc0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JHLG9DQUFvQyxVQUFVLENBQUMsbUJBQW1CLEdBQUcsc0JBQXNCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0RyxvQ0FBb0MsVUFBVSxDQUFDLG1CQUFtQixHQUFHLHNCQUFzQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEcsb0NBQW9DLFVBQVUsQ0FBQyw2QkFBNkIsR0FBRyxDQUFDLEVBQUUsc0JBQXNCLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDbkgsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksVUFBVSxDQUFDLFVBQVUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRTtBQUM3RixvQ0FBb0MsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM1QztBQUNBLG9DQUFvQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1RCx3Q0FBd0MsRUFBRSxDQUFDLElBQUksQ0FBQztBQUNoRCw0Q0FBNEMsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDO0FBQ2xGLDRDQUE0QyxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3RGLHlDQUF5QyxDQUFDLENBQUM7QUFDM0Msd0NBQXdDLFFBQVEsSUFBSSxDQUFDLENBQUM7QUFDdEQscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLFVBQVUsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBQ2pFLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxVQUFVLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMzRyxnQ0FBZ0MsUUFBUSxJQUFJLENBQUMsQ0FBQztBQUM5QyxnQ0FBZ0MsSUFBSSxHQUFHLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1RixnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLEVBQUU7QUFDbkMsZ0NBQWdDLElBQUksaUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBQzNELGdDQUFnQyxJQUFJLHNCQUFzQixHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQzlFLGdDQUFnQyxpQkFBaUIsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLHNCQUFzQixHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZGLGdDQUFnQyxpQkFBaUIsQ0FBQyxRQUFRLEdBQUcsc0JBQXNCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3RixnQ0FBZ0MsaUJBQWlCLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ2xGLGdDQUFnQyxpQkFBaUIsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDbkYsZ0NBQWdDLGlCQUFpQixDQUFDLGVBQWUsR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzFHLGdDQUFnQyxRQUFRLElBQUksQ0FBQyxDQUFDO0FBQzlDLGdDQUFnQyxJQUFJLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0YsZ0NBQWdDLE1BQU07QUFDdEM7QUFDQSw0QkFBNEIsS0FBSyxFQUFFLENBQUM7QUFDcEMsNEJBQTRCLEtBQUssRUFBRTtBQUNuQyxnQ0FBZ0MsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBQ3hELGdDQUFnQyxjQUFjLENBQUMsSUFBSSxHQUFHLDRCQUE0QixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNuRyxnQ0FBZ0MsUUFBUSxJQUFJLG1DQUFtQyxDQUFDO0FBQ2hGLGdDQUFnQyxJQUFJLG1CQUFtQixHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQzNFLGdDQUFnQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxtQkFBbUIsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRixnQ0FBZ0MsY0FBYyxDQUFDLFFBQVEsR0FBRyxtQkFBbUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZGLGdDQUFnQyxjQUFjLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxtQkFBbUIsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4RixnQ0FBZ0MsY0FBYyxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEcsZ0NBQWdDLGNBQWMsQ0FBQyxpQkFBaUIsR0FBRyxtQkFBbUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hHLGdDQUFnQyxjQUFjLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDakcsZ0NBQWdDLFFBQVEsSUFBSSxDQUFDLENBQUM7QUFDOUMsZ0NBQWdDLGNBQWMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNsRyxnQ0FBZ0MsUUFBUSxJQUFJLENBQUMsQ0FBQztBQUM5QyxnQ0FBZ0MsY0FBYyxDQUFDLFdBQVcsR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUNoSCxnQ0FBZ0MsUUFBUSxJQUFJLENBQUMsQ0FBQztBQUM5QyxnQ0FBZ0MsY0FBYyxDQUFDLFdBQVcsR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUNoSCxnQ0FBZ0MsUUFBUSxJQUFJLENBQUMsQ0FBQztBQUM5QyxnQ0FBZ0MsY0FBYyxDQUFDLFdBQVcsR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ25HLGdDQUFnQyxRQUFRLElBQUksQ0FBQyxDQUFDO0FBQzlDLGdDQUFnQyxjQUFjLENBQUMsV0FBVyxHQUFHLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDbkcsZ0NBQWdDLFFBQVEsSUFBSSxDQUFDLENBQUM7QUFDOUMsZ0NBQWdDLElBQUksR0FBRyxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEcsZ0NBQWdDLE1BQU07QUFDdEM7QUFDQSw0QkFBNEIsS0FBSyxFQUFFLENBQUM7QUFDcEMsNEJBQTRCLEtBQUssRUFBRTtBQUNuQyxnQ0FBZ0MsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQ3ZELGdDQUFnQyxhQUFhLENBQUMsSUFBSSxHQUFHLDRCQUE0QixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNsRyxnQ0FBZ0MsUUFBUSxJQUFJLG1DQUFtQyxDQUFDO0FBQ2hGLGdDQUFnQyxJQUFJLHlCQUF5QixHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ2pGLGdDQUFnQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSx5QkFBeUIsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0RixnQ0FBZ0MsYUFBYSxDQUFDLFFBQVEsR0FBRyx5QkFBeUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVGLGdDQUFnQyxhQUFhLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSx5QkFBeUIsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3RjtBQUNBLGdDQUFnQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRTtBQUN4RCxvQ0FBb0MsUUFBUSxHQUFHLGFBQWEsQ0FBQyxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEYsb0NBQW9DLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDNUM7QUFDQSxvQ0FBb0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbkUsd0NBQXdDLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDaEQsNENBQTRDLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQztBQUNsRiw0Q0FBNEMsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN0Rix5Q0FBeUMsQ0FBQyxDQUFDO0FBQzNDLHdDQUF3QyxRQUFRLElBQUksQ0FBQyxDQUFDO0FBQ3RELHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxhQUFhLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxRCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxHQUFHLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDNUUsZ0NBQWdDLE1BQU07QUFDdEM7QUFDQSw0QkFBNEIsS0FBSyxFQUFFO0FBQ25DLGdDQUFnQyxJQUFJLFFBQVEsR0FBRztBQUMvQyxvQ0FBb0MsS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDO0FBQ2hGLG9DQUFvQyxNQUFNLEVBQUUsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3JGLG9DQUFvQyxXQUFXLEVBQUUsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQzFGLG9DQUFvQyxXQUFXLEVBQUUsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzNGLGlDQUFpQyxDQUFDO0FBQ2xDO0FBQ0EsZ0NBQWdDLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUU7QUFDcEUsb0NBQW9DLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUMzRCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQzNFLGdDQUFnQyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUMzRSxnQ0FBZ0MsUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0UsZ0NBQWdDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9FLGdDQUFnQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2RixnQ0FBZ0MsUUFBUSxDQUFDLG1CQUFtQixHQUFHLGdCQUFnQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekYsZ0NBQWdDLFFBQVEsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxFQUFFLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3BGLGdDQUFnQyxRQUFRLENBQUMsMkJBQTJCLEdBQUcsQ0FBQyxFQUFFLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pHLGdDQUFnQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNsRCxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLEVBQUU7QUFDbkMsZ0NBQWdDLE1BQU07QUFDdEM7QUFDQSw0QkFBNEIsS0FBSyxFQUFFO0FBQ25DLGdDQUFnQyxNQUFNO0FBQ3RDO0FBQ0EsNEJBQTRCLEtBQUssRUFBRTtBQUNuQyxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLEVBQUU7QUFDbkMsZ0NBQWdDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1RSxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLEVBQUU7QUFDbkMsZ0NBQWdDLE1BQU07QUFDdEM7QUFDQSw0QkFBNEI7QUFDNUIsZ0NBQWdDLE1BQU0sSUFBSSxVQUFVLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLENBQUM7QUFDcEoseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksWUFBWSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQ2xFO0FBQ0Esd0JBQXdCLElBQUksWUFBWSxJQUFJLE9BQU8sRUFBRTtBQUNyRCw0QkFBNEIsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdkUseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLGVBQWUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFO0FBQ2hFLHdCQUF3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNFLDRCQUE0QixjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2pFLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsU0FBUyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7QUFDdEQsd0JBQXdCLElBQUksT0FBTyxHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztBQUNqRTtBQUNBLHdCQUF3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3pFLDRCQUE0QixJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsNEJBQTRCLElBQUksUUFBUSxHQUFHLFlBQVksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoRyw0QkFBNEIsZUFBZSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMvRCx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQzlDLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUU7QUFDOUMsd0JBQXdCLElBQUksUUFBUSxHQUFHLENBQUM7QUFDeEMsNEJBQTRCLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzlDO0FBQ0Esd0JBQXdCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtBQUM5USw0QkFBNEIsTUFBTSxJQUFJLFVBQVUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0FBQ2pGLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELHdCQUF3QixRQUFRLElBQUksQ0FBQyxDQUFDO0FBQ3RDLHdCQUF3QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUNyRCx3QkFBd0IsTUFBTSxDQUFDLFlBQVksR0FBRyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRDtBQUNBLHdCQUF3QixJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQzFDLDRCQUE0QixNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDekYsNEJBQTRCLFFBQVEsSUFBSSxDQUFDLENBQUM7QUFDMUMseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksUUFBUSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqRix3QkFBd0IsSUFBSSxPQUFPLEdBQUcsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO0FBQ2pFLHdCQUF3QixlQUFlLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzNELHdCQUF3QixJQUFJLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxlQUFlO0FBQzNFLDRCQUE0QixLQUFLLEdBQUcscUJBQXFCLENBQUMsS0FBSztBQUMvRCw0QkFBNEIsTUFBTSxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztBQUNsRSx3QkFBd0IsSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUN2RCx3QkFBd0IsSUFBSSxPQUFPLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDNUUsd0JBQXdCLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakMsNEJBQTRCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEM7QUFDQSx3QkFBd0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6RCw0QkFBNEIsSUFBSSxJQUFJLEdBQUcsQ0FBQztBQUN4QyxnQ0FBZ0MsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ2hEO0FBQ0EsNEJBQTRCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUQsZ0NBQWdDLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDM0Msb0NBQW9DLElBQUksR0FBRyxHQUFHLENBQUM7QUFDL0Msb0NBQW9DLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1RCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZFLGdDQUFnQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQzNDLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsT0FBTztBQUMvQiw0QkFBNEIsT0FBTyxFQUFFLE9BQU87QUFDNUMsNEJBQTRCLEtBQUssRUFBRSxLQUFLO0FBQ3hDLDRCQUE0QixNQUFNLEVBQUUsTUFBTTtBQUMxQyx5QkFBeUIsQ0FBQztBQUMxQixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsU0FBUyxvQkFBb0IsR0FBRyxFQUFFO0FBQ3REO0FBQ0Esb0JBQW9CLG9CQUFvQixDQUFDLFNBQVMsR0FBRztBQUNyRCx3QkFBd0IsaUJBQWlCLEVBQUUsU0FBUyxzQ0FBc0MsQ0FBQyxJQUFJLEVBQUU7QUFDakcsNEJBQTRCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBQ3hELDRCQUE0QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUQsNEJBQTRCLElBQUksTUFBTSxHQUFHLElBQUksaUJBQWlCLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RjtBQUNBLDRCQUE0QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtBQUN4RCxnQ0FBZ0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqRixvQ0FBb0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNyRCxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ2pELHlCQUF5QjtBQUN6Qix3QkFBd0IsVUFBVSxFQUFFLFNBQVMsK0JBQStCLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRTtBQUNqRyw0QkFBNEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztBQUNoRSw0QkFBNEIsSUFBSSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUs7QUFDeEQsZ0NBQWdDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO0FBQzNELDRCQUE0QixJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEUsNEJBQTRCLElBQUksbUJBQW1CLEdBQUcsUUFBUSxDQUFDLDJCQUEyQixHQUFHLFVBQVUsQ0FBQyxtQkFBbUIsR0FBRyxRQUFRLENBQUMsbUJBQW1CLENBQUM7QUFDM0osNEJBQTRCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDckQsNEJBQTRCLElBQUksS0FBSyxHQUFHLEdBQUcsS0FBSyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLDRCQUE0QixJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMsQ0FBQyxHQUFHLE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZGLDRCQUE0QixJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQztBQUNuRDtBQUNBLDRCQUE0QixRQUFRLG1CQUFtQjtBQUN2RCxnQ0FBZ0MsS0FBSyxDQUFDO0FBQ3RDLG9DQUFvQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqRSx3Q0FBd0MsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUNyRCx3Q0FBd0MsTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUN6RDtBQUNBLHdDQUF3QyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNwRSw0Q0FBNEMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDOUQsZ0RBQWdELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDdkUsNkNBQTZDO0FBQzdDO0FBQ0EsNENBQTRDLElBQUksS0FBSyxDQUFDLENBQUM7QUFDdkQ7QUFDQSw0Q0FBNEMsSUFBSSxDQUFDLElBQUksRUFBRTtBQUN2RCxnREFBZ0QsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUMzRCxnREFBZ0QsTUFBTSxFQUFFLENBQUM7QUFDekQsNkNBQTZDO0FBQzdDLHlDQUF5QztBQUN6QztBQUNBLHdDQUF3QyxPQUFPLElBQUksT0FBTyxDQUFDO0FBQzNELHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxNQUFNO0FBQzFDO0FBQ0EsZ0NBQWdDLEtBQUssQ0FBQztBQUN0QyxvQ0FBb0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakUsd0NBQXdDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDckQsd0NBQXdDLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFDekQ7QUFDQSx3Q0FBd0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDcEUsNENBQTRDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzlELGdEQUFnRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3ZFLDZDQUE2QztBQUM3QztBQUNBLDRDQUE0QyxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ3ZEO0FBQ0EsNENBQTRDLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDdkQsZ0RBQWdELElBQUksR0FBRyxHQUFHLENBQUM7QUFDM0QsZ0RBQWdELE1BQU0sRUFBRSxDQUFDO0FBQ3pELDZDQUE2QztBQUM3Qyx5Q0FBeUM7QUFDekM7QUFDQSx3Q0FBd0MsT0FBTyxJQUFJLE9BQU8sQ0FBQztBQUMzRCxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsTUFBTTtBQUMxQztBQUNBLGdDQUFnQztBQUNoQyxvQ0FBb0MsTUFBTSxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztBQUN2SCw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCLHdCQUF3Qix3QkFBd0IsRUFBRSxTQUFTLDZDQUE2QyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtBQUNuSSw0QkFBNEIsSUFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztBQUN6RCw0QkFBNEIsSUFBSSxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4Riw0QkFBNEIsSUFBSSxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUM3Syw0QkFBNEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDaEUseUJBQXlCO0FBQ3pCLHdCQUF3QixnQ0FBZ0MsRUFBRSxTQUFTLHFEQUFxRCxHQUFHO0FBQzNILDRCQUE0QixJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNqRix5QkFBeUI7QUFDekIsd0JBQXdCLGtCQUFrQixFQUFFLFNBQVMsdUNBQXVDLENBQUMsVUFBVSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtBQUM3Siw0QkFBNEIsSUFBSSxhQUFhLEVBQUUsWUFBWSxDQUFDO0FBQzVEO0FBQ0EsNEJBQTRCLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRTtBQUNwRCxnQ0FBZ0MsYUFBYSxHQUFHLGdDQUFnQyxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDbEksZ0NBQWdDLFlBQVksR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVFLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3ZEO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDMUMsZ0NBQWdDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUM1RCw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBQ2xEO0FBQ0EsNEJBQTRCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2RixnQ0FBZ0MsSUFBSSxlQUFlLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkY7QUFDQSxnQ0FBZ0MsSUFBSSxlQUFlLEVBQUU7QUFDckQsb0NBQW9DLFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3hGLGlDQUFpQztBQUNqQyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4Riw0QkFBNEIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLGtCQUFrQixFQUFFLFVBQVUsQ0FBQyx1QkFBdUIsRUFBRSxhQUFhLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxVQUFVLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNuVix5QkFBeUI7QUFDekIsd0JBQXdCLHFCQUFxQixFQUFFLFNBQVMsMENBQTBDLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO0FBQy9JLDRCQUE0QixJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ3pELDRCQUE0QixJQUFJLGFBQWEsRUFBRSxZQUFZLENBQUM7QUFDNUQsNEJBQTRCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDdkQsNEJBQTRCLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUNsRDtBQUNBLDRCQUE0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkYsZ0NBQWdDLElBQUksZUFBZSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25GO0FBQ0EsZ0NBQWdDLElBQUksZUFBZSxFQUFFO0FBQ3JELG9DQUFvQyxZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUN4RixpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4RjtBQUNBLDRCQUE0QixJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7QUFDaEQsZ0NBQWdDLFlBQVksR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVFLGdDQUFnQyxhQUFhLEdBQUcsMEJBQTBCLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztBQUMzSiw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4Riw0QkFBNEIsSUFBSSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLHVCQUF1QixFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDemIsNEJBQTRCLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2hFLHlCQUF5QjtBQUN6Qix3QkFBd0IsNkJBQTZCLEVBQUUsU0FBUyxrREFBa0QsR0FBRztBQUNySCw0QkFBNEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDOUUseUJBQXlCO0FBQ3pCLHdCQUF3QixtQkFBbUIsRUFBRSxTQUFTLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7QUFDeEgsNEJBQTRCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDekQ7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUMzQyxnQ0FBZ0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzlELDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hGLDRCQUE0QixRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsdUJBQXVCLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQ3BOLHlCQUF5QjtBQUN6Qix3QkFBd0IseUJBQXlCLEVBQUUsU0FBUyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7QUFDbEksNEJBQTRCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RSw0QkFBNEIsSUFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztBQUN6RCw0QkFBNEIsSUFBSSxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4Riw0QkFBNEIsSUFBSSxNQUFNLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQ3pWLDRCQUE0QixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNoRSx5QkFBeUI7QUFDekIsd0JBQXdCLGlDQUFpQyxFQUFFLFNBQVMsaUNBQWlDLEdBQUc7QUFDeEcsNEJBQTRCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2xGLHlCQUF5QjtBQUN6Qix3QkFBd0IsUUFBUSxFQUFFLFNBQVMsUUFBUSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtBQUN0Riw0QkFBNEIsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztBQUNqRTtBQUNBLDRCQUE0QixJQUFJLENBQUMsWUFBWSxFQUFFO0FBQy9DLGdDQUFnQyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDdEUsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLFlBQVksQ0FBQyxjQUFjLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pHLHlCQUF5QjtBQUN6QixxQkFBcUIsQ0FBQztBQUN0QjtBQUNBLG9CQUFvQixTQUFTLFdBQVcsQ0FBQyxRQUFRLEVBQUU7QUFDbkQsd0JBQXdCLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDbkQsNEJBQTRCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzlDLDRCQUE0QixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM5Qyw0QkFBNEIsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsNEJBQTRCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELDRCQUE0QixJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRCw0QkFBNEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7QUFDdEQseUJBQXlCLE1BQU07QUFDL0IsNEJBQTRCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQy9DLDRCQUE0QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCw0QkFBNEIsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsNEJBQTRCLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELDRCQUE0QixJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRCw0QkFBNEIsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDO0FBQ3hFLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsU0FBUyxlQUFlLENBQUMsSUFBSSxFQUFFO0FBQ25ELHdCQUF3QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUMzQztBQUNBLHdCQUF3QixJQUFJLElBQUksRUFBRTtBQUNsQyw0QkFBNEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDL0MsNEJBQTRCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUNoRSw0QkFBNEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzFELDRCQUE0QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDbEUsNEJBQTRCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNwRCx5QkFBeUIsTUFBTTtBQUMvQiw0QkFBNEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDaEQseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixlQUFlLENBQUMsU0FBUyxHQUFHO0FBQ2hELHdCQUF3QixTQUFTLEVBQUUsU0FBUyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUNuRSw0QkFBNEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ25FO0FBQ0EsNEJBQTRCLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRTtBQUM1QyxnQ0FBZ0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvRSw2QkFBNkIsTUFBTTtBQUNuQyxnQ0FBZ0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5RDtBQUNBLGdDQUFnQyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQzNDLG9DQUFvQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxRixpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekIsd0JBQXdCLFVBQVUsRUFBRSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDaEUsNEJBQTRCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM3QyxnQ0FBZ0MsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2hELG9DQUFvQyxPQUFPLElBQUksQ0FBQztBQUNoRCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDakYsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDO0FBQ2xHLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZFO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDdkMsZ0NBQWdDLE1BQU0sSUFBSSxVQUFVLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQUM3RSw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNELHlCQUF5QjtBQUN6QixxQkFBcUIsQ0FBQztBQUN0QjtBQUNBLG9CQUFvQixTQUFTLFlBQVksQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFO0FBQ2xFLHdCQUF3QixJQUFJLENBQUMsZUFBZSxFQUFFO0FBQzlDLDRCQUE0QixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUQseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEUsd0JBQXdCLElBQUksQ0FBQztBQUM3Qiw0QkFBNEIsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNO0FBQzdDLDRCQUE0QixJQUFJLENBQUM7QUFDakM7QUFDQSx3QkFBd0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakQsNEJBQTRCLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUM7QUFDQSw0QkFBNEIsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsRUFBRTtBQUN2RCxnQ0FBZ0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckYsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsWUFBWSxDQUFDLFNBQVMsR0FBRztBQUM3Qyx3QkFBd0IsTUFBTSxFQUFFLFNBQVMsTUFBTSxDQUFDLE1BQU0sRUFBRTtBQUN4RCw0QkFBNEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwRSx5QkFBeUI7QUFDekIsd0JBQXdCLGlCQUFpQixFQUFFLFNBQVMsaUJBQWlCLENBQUMsS0FBSyxFQUFFO0FBQzdFLDRCQUE0QixJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTTtBQUMxRCxnQ0FBZ0MsZUFBZSxHQUFHLENBQUM7QUFDbkQsZ0NBQWdDLENBQUMsQ0FBQztBQUNsQztBQUNBLDRCQUE0QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM5RCxnQ0FBZ0MsZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNuRyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxTQUFTLEdBQUcsSUFBSSxXQUFXLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pGO0FBQ0EsNEJBQTRCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzlELGdDQUFnQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7QUFDbkUsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksYUFBYSxHQUFHLENBQUM7QUFDakQsZ0NBQWdDLFNBQVMsR0FBRyxDQUFDO0FBQzdDLGdDQUFnQyxXQUFXO0FBQzNDLGdDQUFnQyxXQUFXO0FBQzNDLGdDQUFnQyxJQUFJLENBQUM7QUFDckMsNEJBQTRCLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0M7QUFDQSw0QkFBNEIsT0FBTyxhQUFhLElBQUksZUFBZSxFQUFFO0FBQ3JFLGdDQUFnQyxTQUFTLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFGLGdDQUFnQyxXQUFXLEdBQUcsU0FBUyxDQUFDO0FBQ3hELGdDQUFnQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEO0FBQ0EsZ0NBQWdDLE9BQU8sV0FBVyxHQUFHLFdBQVcsRUFBRTtBQUNsRSxvQ0FBb0MsSUFBSSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM5RDtBQUNBLG9DQUFvQyxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssYUFBYSxFQUFFO0FBQzdFLHdDQUF3QyxJQUFJLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQztBQUN0RSx3Q0FBd0MsV0FBVyxFQUFFLENBQUM7QUFDdEQscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLFdBQVcsRUFBRSxDQUFDO0FBQ2xELGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxhQUFhLEVBQUUsQ0FBQztBQUNoRCw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCLHFCQUFxQixDQUFDO0FBQ3RCO0FBQ0Esb0JBQW9CLFNBQVMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7QUFDbkUsd0JBQXdCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoRCx3QkFBd0IsSUFBSSxXQUFXLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDO0FBQzlGLHdCQUF3QixJQUFJLFlBQVksR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDL0Ysd0JBQXdCLElBQUksTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RFLHdCQUF3QixJQUFJLGNBQWMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsRSx3QkFBd0IsSUFBSSxhQUFhLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakUsd0JBQXdCLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUN2Qyx3QkFBd0IsSUFBSSxZQUFZO0FBQ3hDLDRCQUE0QixXQUFXO0FBQ3ZDLDRCQUE0QixlQUFlLEdBQUcsV0FBVyxDQUFDO0FBQzFEO0FBQ0Esd0JBQXdCLEdBQUc7QUFDM0IsNEJBQTRCLFlBQVksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzNFLDRCQUE0QixXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN6RSw0QkFBNEIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6Ryw0QkFBNEIsZUFBZSxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUM7QUFDaEUseUJBQXlCLFFBQVEsZUFBZSxHQUFHLFlBQVksRUFBRTtBQUNqRTtBQUNBLHdCQUF3QixZQUFZLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUN2RSx3QkFBd0IsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JHLHdCQUF3QixZQUFZLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUN2RSx3QkFBd0IsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RjtBQUNBLHdCQUF3QixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDdkMsNEJBQTRCLFlBQVksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzNFLDRCQUE0QixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRSx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsT0FBTyxJQUFJLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUQscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLElBQUksbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBQ2pEO0FBQ0Esb0JBQW9CLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQ3RELHdCQUF3QixJQUFJLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRTtBQUNBLHdCQUF3QixJQUFJLEtBQUssRUFBRTtBQUNuQyw0QkFBNEIsT0FBTyxLQUFLLENBQUM7QUFDekMseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksS0FBSyxDQUFDO0FBQ2xDO0FBQ0Esd0JBQXdCLFFBQVEsTUFBTTtBQUN0Qyw0QkFBNEIsS0FBSyxDQUFDO0FBQ2xDLGdDQUFnQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEgsZ0NBQWdDLE1BQU07QUFDdEM7QUFDQSw0QkFBNEIsS0FBSyxDQUFDO0FBQ2xDLGdDQUFnQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pKLGdDQUFnQyxNQUFNO0FBQ3RDO0FBQ0EsNEJBQTRCLEtBQUssQ0FBQztBQUNsQyxnQ0FBZ0MsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMzTSxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLENBQUM7QUFDbEMsZ0NBQWdDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDOUksZ0NBQWdDLE1BQU07QUFDdEM7QUFDQSw0QkFBNEIsS0FBSyxDQUFDO0FBQ2xDLGdDQUFnQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2hNLGdDQUFnQyxNQUFNO0FBQ3RDO0FBQ0EsNEJBQTRCLEtBQUssQ0FBQztBQUNsQyxnQ0FBZ0MsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoVSxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLENBQUM7QUFDbEMsZ0NBQWdDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDOVUsZ0NBQWdDLE1BQU07QUFDdEM7QUFDQSw0QkFBNEIsS0FBSyxDQUFDO0FBQ2xDLGdDQUFnQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxYSxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLENBQUM7QUFDbEMsZ0NBQWdDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvYixnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLEVBQUU7QUFDbkMsZ0NBQWdDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5YSxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLEVBQUU7QUFDbkMsZ0NBQWdDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMzUSxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLEVBQUU7QUFDbkMsZ0NBQWdDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMzUSxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLEVBQUU7QUFDbkMsZ0NBQWdDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxUSxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLEVBQUU7QUFDbkMsZ0NBQWdDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzSCxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLEVBQUU7QUFDbkMsZ0NBQWdDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FB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LG9CQUFvQixJQUFJLEVBQUUsQ0FBQztBQUMzQixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLENBQUM7QUFDM0Isb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsQ0FBQztBQUMzQixvQkFBb0IsSUFBSSxFQUFFLENBQUM7QUFDM0Isb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLENBQUM7QUFDM0Isb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxDQUFDO0FBQzNCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxF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QUE0QixFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxRSw0QkFBNEIsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDMUUsNEJBQTRCLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFFLDRCQUE0QixFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxRSw0QkFBNEIsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDMUUsNEJBQTRCLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFFLDRCQUE0QixTQUFTLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BFLDRCQUE0QixTQUFTLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RSw0QkFBNEIsU0FBUyxDQUFDLGlCQUFpQixHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDekUsNEJBQTRCLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3pFLDRCQUE0QixTQUFTLENB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O0FBQzVELDRCQUE0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hFLGdDQUFnQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQzFDLGdDQUFnQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0YsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzRixnQ0FBZ0MsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hHLGdDQUFnQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEcsZ0NBQWdDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFLGdDQUFnQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNsRSxnQ0FBZ0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDckQsZ0NBQWdDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakQsNkJB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QUksVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JTLHdCQUF3QixJQUFJLGNBQWMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvUix3QkFBd0IsSUFBSSxjQUFjLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxF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QUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pSLG9CQUFvQixJQUFJLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsVUFB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QUFHLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDcEUscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDN3hCO0FBQ0Esb0JBQW9CLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQ3hELHdCQUF3QixJQUFJLEVBQUUsR0FBRyxVQUFVO0FBQzNDLDRCQUE0QixFQUFFLEdBQUcsVUFBVTtBQUMzQyw0QkFBNEIsRUFBRSxHQUFHLFVBQVU7QUFDM0MsNEJBQTRCLEVBQUUsR0FBRyxVQUFVO0FBQzNDLDRCQUE0QixFQUFFLEdBQUcsVUFBVTtBQUMzQyw0QkFBNEIsRUFBRSxHQUFHLFVBQVU7QUFDM0MsNEJBQTRCLEVBQUUsR0FBRyxVQUFVO0FBQzNDLDRCQUE0QixFQUFFLEdBQUcsVUFBVSxDQUFDO0FBQzVDLHdCQUF3QixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDN0Usd0JBQXdCLElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2xFLHdCQUF3QixJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDO0FBQ0Esd0JBQXdCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3JELDRCQUE0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDdkQseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDN0M7QUFDQSx3QkFBd0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3RDLDRCQUE0QixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUMseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4Qyx3QkFBd0IsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLHdCQUF3QixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEMsd0JBQXdCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzNELHdCQUF3QixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUMxRCx3QkFBd0IsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDMUQsd0JBQXdCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3pELHdCQUF3QixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN6RCx3QkFBd0IsSUFBSSxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEQ7QUFDQSx3QkFBd0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLEdBQUc7QUFDdkQsNEJBQTRCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3JELGdDQUFnQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xILGdDQUFnQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN0RCxnQ0FBZ0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEgsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDdEMsZ0NBQWdDLENBQUMsR0FBRyxFQUFFO0FBQ3RDLGdDQUFnQyxDQUFDLEdBQUcsRUFBRTtBQUN0QyxnQ0FBZ0MsQ0FBQyxHQUFHLEVBQUU7QUFDdEMsZ0NBQWdDLENBQUMsR0FBRyxFQUFFO0FBQ3RDLGdDQUFnQyxDQUFDLEdBQUcsRUFBRTtBQUN0QyxnQ0FBZ0MsQ0FBQyxHQUFHLEVBQUU7QUFDdEMsZ0NBQWdDLENBQUMsR0FBRyxFQUFFO0FBQ3RDLGdDQUFnQyxFQUFFO0FBQ2xDLGdDQUFnQyxFQUFFLENBQUM7QUFDbkM7QUFDQSw0QkFBNEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDckQsZ0NBQWdDLEVBQUUsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkYsZ0NBQWdDLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0QsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLEdBQUcs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LEVBQUU7QUFDdEQsd0JBQXdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekMsd0JBQXdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsd0JBQXdCLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsd0JBQXdCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQyx3QkFBd0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyx3QkFBd0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QyxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsU0FBUyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUN2RCx3QkFBd0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6Qyx3QkFBd0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0Qyx3QkFBd0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0Qyx3QkFBd0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyx3QkFBd0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4Qyx3QkFBd0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0Qyx3QkFBd0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyx3QkFBd0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QyxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsU0FBUyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7QUFDbkQsd0JBQXdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekMsd0JBQXdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0Msd0JBQXdCLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsd0JBQXdCLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDNUMsd0JBQXdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEMsd0JBQXdCLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsd0JBQXdCLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDNUMsd0JBQXdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEMscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0FBQ3hELHdCQUF3QixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLHdCQUF3QixNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLHdCQUF3QixHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLHdCQUF3QixHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLHdCQUF3QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLHdCQUF3QixHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLHdCQUF3QixHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLHdCQUF3QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUN6RCx3QkFBd0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6Qyx3QkFBd0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5Qyx3QkFBd0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0Qyx3QkFBd0IsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyx3QkFBd0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4Qyx3QkFBd0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0Qyx3QkFBd0IsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyx3QkFBd0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QyxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsU0FBUyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUM5RCx3QkFBd0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6Qyx3QkFBd0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMvQyx3QkFBd0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0Qyx3QkFBd0IsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1Qyx3QkFBd0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4Qyx3QkFBd0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0Qyx3QkFBd0IsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyx3QkFBd0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QyxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDNzFGO0FBQ0Esb0JBQW9CLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRTtBQUNqRSx3QkFBd0IsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDNUMsd0JBQXdCLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMzRDtBQUNBLHdCQUF3QixJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ3RDLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLHlCQUF5QixNQUFNO0FBQy9CLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsSUFB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LDRCQUE0QixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLDRCQUE0QixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLDRCQUE0QixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLDRCQUE0QixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLDRCQUE0QixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLDRCQUE0QixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLDRCQUE0QixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLDRCQUE0QixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsNEJBQTRCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3JELGdDQUFnQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdDQUFnQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxRCxnQ0FBZ0MsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QyxnQ0FBZ0MsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4RCxnQ0FBZ0MsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QyxnQ0FBZ0MsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQ0FBZ0MsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQ0FBZ0MsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbkQsZ0NBQWdDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekQsZ0NBQWdDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0MsZ0NBQWdDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDekMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsZ0NBQWdDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsZ0NBQWdDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEQsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0MsZ0NBQWdDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDekMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsNEJBQTRCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsNEJBQTRCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsNEJBQTRCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsNEJBQTRCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsNEJBQTRCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMs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QUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdmpELDRCQUE0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMzakQsNEJBQTRCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzFqRyw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvRDtBQUNBLDRCQUE0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFELGdDQUFnQyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUU7QUFDN0Msb0NBQW9DLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3RCxpQ0FBaUMsTUFBTTtBQUN2QyxvQ0FBb0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwRSxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0QsNEJBQTRCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixZQUFZLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDckQsNEJBQTRCLEdBQUcsRUFBRSxZQUFZO0FBQzdDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxVQUFVLENBQUMsU0FBUyxFQUFFO0FBQ2xFLGdDQUFnQyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsNENBQTRDLENBQUMsQ0FBQztBQUNyRyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxVQUFVO0FBQzNDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtBQUNqRSxnQ0FBZ0MsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQ0FBZ0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0QsZ0NBQWdDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakQ7QUFDQSxnQ0FBZ0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNyRixvQ0FBb0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDeEYsb0NBQW9DLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekQsb0NBQW9DLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsb0NBQW9DLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsb0NBQW9DLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakQsb0NBQW9DLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekQsb0NBQW9DLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekQsb0NBQW9DLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakQsb0NBQW9DLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakQsb0NBQW9DLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsb0NBQW9DLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekQsb0NBQW9DLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakQsb0NBQW9DLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakQ7QUFDQSxvQ0FBb0MsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNwRSx3Q0FBd0MsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0UscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDMUYsd0NBQXdDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUQscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRTtBQUMxRSx3Q0FBd0MsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RSx3Q0FBd0MsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0Usd0NBQXdDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNFLHdDQUF3QyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRSx3Q0FBd0MsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsSCx3Q0FBd0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3JFLHdDQUF3QyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3hFLHdDQUF3QyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZFLHdDQUF3QyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEUscUNBQXFDO0FBQ3JDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLGdDQUFnQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JELGdDQUFnQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELGdDQUFnQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELGdDQUFnQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLGdDQUFnQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLGdDQUFnQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLGdDQUFnQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JELGdDQUFnQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JELGdDQUFnQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLGdDQUFnQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLGdDQUFnQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLGdDQUFnQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLGdDQUFnQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdDQUFnQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JELGdDQUFnQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlDLGdDQUFnQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLGdDQUFnQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsZ0NBQWdDLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7QUFDbkUsb0NBQW9DLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLG9DQUFvQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNELGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxPQUFPLEtBQUssQ0FBQztBQUM3Qyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxVQUFVO0FBQzNDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtBQUNqRSxnQ0FBZ0MsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNoRCxnQ0FBZ0MsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQ0FBZ0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0QsZ0NBQWdDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakQ7QUFDQSxnQ0FBZ0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUM3RCxvQ0FBb0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuRixvQ0FBb0MsS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRTtBQUN2RSx3Q0FBd0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRSxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxvQ0FBb0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxvQ0FBb0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxvQ0FBb0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxvQ0FBb0MsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxvQ0FBb0MsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxvQ0FBb0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxvQ0FBb0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxvQ0FBb0MsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxvQ0FBb0MsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxvQ0FBb0MsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMs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Q2hFO0FBQ0EsNEJBQTRCLEtBQUssR0FBRywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQy9HLDRCQUE0QixLQUFLLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBQzNELDRCQUE0QixLQUFLLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUNqRCw0QkFBNEIsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxF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R0FBRyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixHQUFHLENBQUMsR0FBRyxDQUFDLGtCQUFrQixHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztBQUNsWix3QkFBd0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLGlCQUFpQixHQUFHLENBQUMsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixHQUFHLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixHQUFHLENBQUMsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLGVBQWUsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztBQUNsWix3QkFBd0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLGtCQUFrQixHQUFHLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixHQUFHLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLGlCQUFpQixHQUFHLENB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QUF3QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckQsd0JBQXdCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyRCx3QkFBd0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELHdCQUF3QixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUMzRSx3QkFBd0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDM0Usd0JBQXdCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQzNFLHdCQUF3QixJQUFJLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQztBQUNyRCx3QkFBd0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyx3QkFBd0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyx3QkFBd0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyx3QkFBd0IsSUFBSSxRQUFRLEdBQUcsa0JBQWtCLENBQUM7QUFDMUQsd0JBQXdCLHlCQUF5QixDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2hGLHdCQUF3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RUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNobkY7QUFDQSxnQkFBZ0IsU0FBUyxZQUFZLENBQUMsVUFBVSxFQUFFO0FBQ2xELG9CQUFvQixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRTtBQUNoRCx3QkFBd0IsT0FBTztBQUMvQixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNwRix3QkFBd0IsT0FBTztBQUMvQixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsSUFBSSxLQUFLLEdBQUcsS0FBSyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakUsb0JBQW9CLElBQUksWUFBWSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7QUFDekQ7QUFDQSxvQkFBb0IsS0FBSyxJQUFJLEtBQUssSUFBSSxZQUFZLEVBQUU7QUFDcEQsd0JBQXdCLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDckQscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFVBQVUsQ0FBQyxZQUFZLElBQUksS0FBSyxDQUFDO0FBQ3JELGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQixTQUFTLGVBQWUsQ0FBQyxVQUFVLEVBQUUsZUFBZSxFQUFFO0FBQ3RFLG9CQUFvQixJQUFJLFVBQVUsQ0FBQyx1QkFBdUIsRUFBRTtBQUM1RCx3QkFBd0IsT0FBTztBQUMvQixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsSUFBSSxVQUFVLENBQUMsV0FBVyxFQUFFO0FBQ2hELHdCQUF3QixPQUFPO0FBQy9CLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixJQUFJLGVBQWUsS0FBSyxVQUFVLENBQUMsZUFBZSxFQUFFO0FBQ3hFLHdCQUF3QixPQUFPO0FBQy9CLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixJQUFJLFVBQVUsQ0FBQyxTQUFTLFlBQVksb0JBQW9CLEVBQUU7QUFDOUUsd0JBQXdCLE9BQU87QUFDL0IscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLElBQUksU0FBUyxHQUFHLEVBQUU7QUFDdEMsd0JBQXdCLGdCQUFnQixHQUFHLElBQUksVUFBVSxDQUFDLGdCQUFnQixHQUFHLENBQUM7QUFDOUU7QUFDQSxvQkFBb0IsS0FBSyxJQUFJLFFBQVEsSUFBSSxlQUFlLEVBQUU7QUFDMUQsd0JBQXdCLElBQUksU0FBUyxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNsRSx3QkFBd0IsSUFBSSxPQUFPLEdBQUcsSUFBSSxRQUFRLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDcEc7QUFDQSx3QkFBd0IsSUFBSSxPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDNUMsNEJBQTRCLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9FLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDMUQsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLFNBQVMsV0FBVyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDcEQsb0JBQW9CLFFBQVEsSUFBSTtBQUNoQyx3QkFBd0IsS0FBSyxPQUFPO0FBQ3BDLDRCQUE0QixPQUFPLE9BQU8sS0FBSyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7QUFDdkc7QUFDQSx3QkFBd0IsS0FBSyxjQUFjO0FBQzNDLDRCQUE0QixPQUFPLE9BQU8sS0FBSyxlQUFlLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7QUFDNUg7QUFDQSx3QkFBd0IsS0FBSyxVQUFVO0FBQ3ZDLDRCQUE0QixPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO0FBQzNEO0FBQ0Esd0JBQXdCLEtBQUssVUFBVTtBQUN2Qyw0QkFBNEIsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztBQUMzRDtBQUNBLHdCQUF3QixLQUFLLGNBQWM7QUFDM0MsNEJBQTRCLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7QUFDL0Q7QUFDQSx3QkFBd0IsS0FBSyxTQUFTO0FBQ3RDLDRCQUE0QixPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO0FBQzFEO0FBQ0Esd0JBQXdCLEtBQUssT0FBTztBQUNwQyw0QkFBNEIsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztBQUN4RDtBQUNBLHdCQUF3QjtBQUN4Qiw0QkFBNEIsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztBQUMxRCxxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLFNBQVMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO0FBQ2xFLG9CQUFvQixJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUM5RCx3QkFBd0IsT0FBTyxJQUFJLENBQUM7QUFDcEMscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLElBQUksT0FBTyxHQUFHLElBQUksUUFBUSxDQUFDLGtCQUFrQixFQUFFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzNGO0FBQ0Esb0JBQW9CLElBQUksT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ3hDLHdCQUF3QixLQUFLLElBQUksR0FBRyxJQUFJLGdCQUFnQixFQUFFO0FBQzFELDRCQUE0QixJQUFJLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLE9BQU8sRUFBRTtBQUNuRSxnQ0FBZ0MsT0FBTyxHQUFHLENBQUM7QUFDM0MsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLCtDQUErQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzVGLG9CQUFvQixPQUFPLElBQUksQ0FBQztBQUNoQyxpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsSUFBSSxLQUFLLEdBQUcsU0FBUyxZQUFZLEdBQUc7QUFDcEQsb0JBQW9CLFNBQVMsS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUU7QUFDakgsd0JBQXdCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQ2pELHdCQUF3QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUMvQyx3QkFBd0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDN0Msd0JBQXdCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzNDLHdCQUF3QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUMvQyx3QkFBd0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDN0Qsd0JBQXdCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQy9DLHdCQUF3QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUNqRCxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsS0FBSyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEdBQUcsVUFBVSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFO0FBQzlJLHdCQUF3QixPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssY0FBYyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDO0FBQ3hRLHFCQUFxQixDQUFDO0FBQ3RCO0FBQ0Esb0JBQW9CLE9BQU8sS0FBSyxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFLENBQUM7QUFDcEI7QUFDQSxnQkFBZ0IsSUFBSSxZQUFZLEdBQUcsU0FBUyxtQkFBbUIsR0FBRztBQUNsRSxvQkFBb0IsU0FBUyxZQUFZLEdBQUc7QUFDNUMsd0JBQXdCLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxRyx3QkFBd0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDekMscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFlBQVksQ0FBQyxTQUFTLEdBQUc7QUFDN0Msd0JBQXdCLElBQUksTUFBTSxHQUFHO0FBQ3JDLDRCQUE0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3BELHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixPQUFPLEVBQUUsU0FBUyxPQUFPLENBQUMsUUFBUSxFQUFFO0FBQzVELDRCQUE0QixLQUFLLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDNUQsZ0NBQWdDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0Riw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCLHdCQUF3QixHQUFHLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQzdDLDRCQUE0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDO0FBQzlELHlCQUF5QjtBQUN6Qix3QkFBd0IsR0FBRyxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUM3Qyw0QkFBNEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELHlCQUF5QjtBQUN6Qix3QkFBd0IsVUFBVSxFQUFFLFNBQVMsVUFBVSxDQUFDLEtBQUssRUFBRTtBQUMvRCw0QkFBNEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUNoRDtBQUNBLDRCQUE0QixJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksT0FBTyxFQUFFO0FBQ3ZELGdDQUFnQyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUQsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLEtBQUssSUFBSSxRQUFRLElBQUksR0FBRyxFQUFFO0FBQ3RELGdDQUFnQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDN0Qsb0NBQW9DLE9BQU8sUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN4RCxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDdEMseUJBQXlCO0FBQ3pCLHdCQUF3QixLQUFLLEVBQUUsU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFO0FBQ25ELDRCQUE0QixLQUFLLElBQUksUUFBUSxJQUFJLEdBQUcsRUFBRTtBQUN0RCxnQ0FBZ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDcEUsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6QixxQkFBcUIsQ0FBQztBQUN0QixvQkFBb0IsT0FBTyxZQUFZLENBQUM7QUFDeEMsaUJBQWlCLEVBQUUsQ0FBQztBQUNwQjtBQUNBLGdCQUFnQixPQUFPLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztBQUNwRDtBQUNBLGdCQUFnQixJQUFJLG9CQUFvQixHQUFHLFNBQVMsMkJBQTJCLEdBQUc7QUFDbEYsb0JBQW9CLFNBQVMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRTtBQUN2RSx3QkFBd0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDbkQsd0JBQXdCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQ2pELHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixvQkFBb0IsQ0FBQyxTQUFTLEdBQUc7QUFDckQsd0JBQXdCLElBQUksTUFBTSxHQUFHO0FBQ3JDLDRCQUE0QixPQUFPLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDdEUseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLE9BQU8sRUFBRSxTQUFTLE9BQU8sQ0FBQyxRQUFRLEVBQUU7QUFDNUQsNEJBQTRCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNGLGdDQUFnQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9DLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekIsd0JBQXdCLEdBQUcsRUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDN0MsNEJBQTRCLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDN0UseUJBQXlCO0FBQ3pCLHdCQUF3QixHQUFHLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQzdDLDRCQUE0QixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQzNFLGdDQUFnQyxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUQsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLE9BQU8sU0FBUyxDQUFDO0FBQzdDLHlCQUF5QjtBQUN6Qix3QkFBd0IsVUFBVSxFQUFFLFNBQVMsVUFBVSxDQUFDLENBQUMsRUFBRTtBQUMzRCw0QkFBNEIsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3Ryx5QkFBeUI7QUFDekIsd0JBQXdCLEtBQUssRUFBRSxTQUFTLEtBQUssQ0FBQyxHQUFHLEVBQUU7QUFDbkQsNEJBQTRCLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO0FBQzlFLHlCQUF5QjtBQUN6QixxQkFBcUIsQ0FBQztBQUN0QixvQkFBb0IsT0FBTyxvQkFBb0IsQ0FBQztBQUNoRCxpQkFBaUIsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsZ0JBQWdCLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztBQUNwRTtBQUNBLGdCQUFnQixJQUFJLG1CQUFtQixHQUFHLFNBQVMsMEJBQTBCLEdBQUc7QUFDaEYsb0JBQW9CLFNBQVMsVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQzNELHdCQUF3QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkQsd0JBQXdCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztBQUN0RCxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsU0FBUyxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUU7QUFDM0Qsd0JBQXdCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUN4RCx3QkFBd0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUM1RCx3QkFBd0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzRCx3QkFBd0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ3RELHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtBQUMzRCx3QkFBd0IsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2xDO0FBQ0Esd0JBQXdCLElBQUksSUFBSSxZQUFZLFVBQVUsRUFBRTtBQUN4RCw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkQseUJBQXlCLE1BQU0sSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7QUFDN0QsNEJBQTRCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZFLGdDQUFnQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzRSw2QkFBNkI7QUFDN0IseUJBQXlCLE1BQU07QUFDL0IsNEJBQTRCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZFLGdDQUFnQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hFLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekIscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsbUJBQW1CLENBQUMsSUFBSSxFQUFFO0FBQ3ZELHdCQUF3QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN6Qyx3QkFBd0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFELHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixtQkFBbUIsQ0FBQyxlQUFlLEdBQUcsU0FBUyxtQ0FBbUMsQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFO0FBQ2hJLHdCQUF3QixJQUFJLFNBQVMsR0FBRyxDQUFDO0FBQ3pDLDRCQUE0QixJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDO0FBQ0Esd0JBQXdCLE9BQU8sQ0FBQyxTQUFTLEdBQUcsWUFBWSxJQUFJLFNBQVMsRUFBRTtBQUN2RSw0QkFBNEIsU0FBUyxLQUFLLENBQUMsQ0FBQztBQUM1Qyw0QkFBNEIsSUFBSSxFQUFFLENBQUM7QUFDbkMseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksV0FBVyxHQUFHLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDaEUsd0JBQXdCLE9BQU87QUFDL0IsNEJBQTRCLEtBQUssRUFBRSxXQUFXO0FBQzlDLDRCQUE0QixLQUFLLEVBQUUsSUFBSTtBQUN2Qyw0QkFBNEIsVUFBVSxFQUFFLFNBQVMsR0FBRyxZQUFZLEdBQUcsV0FBVztBQUM5RSx5QkFBeUIsQ0FBQztBQUMxQixxQkFBcUIsQ0FBQztBQUN0QjtBQUNBLG9CQUFvQixJQUFJLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDN0Msb0JBQW9CLElBQUksb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBQ2xELG9CQUFvQixtQkFBbUIsQ0FBQyxTQUFTLEdBQUc7QUFDcEQsd0JBQXdCLE9BQU8sRUFBRSxTQUFTLDJCQUEyQixHQUFHO0FBQ3hFLDRCQUE0QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2pELDRCQUE0QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3JELDRCQUE0QixJQUFJLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xFLDRCQUE0QixXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0MsNEJBQTRCLElBQUksU0FBUyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7QUFDL0QsNEJBQTRCLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQztBQUMzRCw0QkFBNEIsSUFBSSxNQUFNLEdBQUcsZUFBZSxHQUFHLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQztBQUM1Riw0QkFBNEIsSUFBSSxZQUFZLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4RDtBQUNBLDRCQUE0QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1RCxnQ0FBZ0MsS0FBSyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRCxnQ0FBZ0MsSUFBSSxZQUFZLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakYsZ0NBQWdDLE1BQU0sSUFBSSxZQUFZLENBQUM7QUFDdkQsZ0NBQWdDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUQsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlEO0FBQ0EsNEJBQTRCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVELGdDQUFnQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9ELGdDQUFnQyxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN4RSw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFO0FBQ2pELGdDQUFnQyxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZFLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEUsNEJBQTRCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoRSw0QkFBNEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hFLDRCQUE0QixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEUsNEJBQTRCLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzNELDRCQUE0QixJQUFJLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2xHLDRCQUE0QixVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEUsNEJBQTRCLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRSw0QkFBNEIsVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzFFLDRCQUE0QixNQUFNLEdBQUcsZUFBZSxDQUFDO0FBQ3JEO0FBQ0EsNEJBQTRCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVELGdDQUFnQyxTQUFTLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELGdDQUFnQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUUsZ0NBQWdDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEYsZ0NBQWdDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEYsZ0NBQWdDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEYsZ0NBQWdDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNqRDtBQUNBLGdDQUFnQyxLQUFLLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3BHLG9DQUFvQyxJQUFJLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlFLG9DQUFvQyxRQUFRLEdBQUcsUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLENBQUM7QUFDckUsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN2RSxnQ0FBZ0MsVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlFLGdDQUFnQyxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sR0FBRyxFQUFFLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hGLGdDQUFnQyxNQUFNLElBQUksb0JBQW9CLENBQUM7QUFDL0QsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLE9BQU8sSUFBSSxDQUFDO0FBQ3hDLHlCQUF5QjtBQUN6Qix3QkFBd0IsUUFBUSxFQUFFLFNBQVMsNEJBQTRCLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRTtBQUNuRiw0QkFBNEIsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNwRCxnQ0FBZ0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLEdBQUcsR0FBRyxHQUFHLGlCQUFpQixDQUFDLENBQUM7QUFDcEYsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BELHlCQUF5QjtBQUN6QixxQkFBcUIsQ0FBQztBQUN0QixvQkFBb0IsT0FBTyxtQkFBbUIsQ0FBQztBQUMvQyxpQkFBaUIsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsZ0JBQWdCLElBQUksSUFBSSxHQUFHLFNBQVMsV0FBVyxHQUFHO0FBQ2xELG9CQUFvQixTQUFTLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtBQUMxRCx3QkFBd0IsSUFBSSxRQUFRLENBQUM7QUFDckMsd0JBQXdCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLHdCQUF3QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7QUFDaEUsd0JBQXdCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQztBQUNsRSx3QkFBd0IsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDeEMsd0JBQXdCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQ2pELHdCQUF3QixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUQsd0JBQXdCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xGLHdCQUF3QixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsRUFBRSxVQUFVLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4Rix3QkFBd0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdkYsd0JBQXdCLElBQUksSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDbkQsd0JBQXdCLElBQUksT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7QUFDekQsd0JBQXdCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLHdCQUF3QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUMvQyx3QkFBd0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sR0FBRyxZQUFZLENBQUM7QUFDdkgsd0JBQXdCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQztBQUNsRSx3QkFBd0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO0FBQ3hELHdCQUF3QixJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUM7QUFDcEUsd0JBQXdCLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztBQUM5RCx3QkFBd0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO0FBQzlELHdCQUF3QixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDcEQsd0JBQXdCLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQztBQUNoRix3QkFBd0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxHQUFHLHFCQUFxQixDQUFDO0FBQ2xGLHdCQUF3QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7QUFDaEUsd0JBQXdCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztBQUNwRCx3QkFBd0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDO0FBQzFFLHdCQUF3QixJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7QUFDOUQsd0JBQXdCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUMsaUJBQWlCLElBQUksSUFBSSxZQUFZLEVBQUUsQ0FBQztBQUNwRyx3QkFBd0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDN0M7QUFDQSx3QkFBd0IsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtBQUN6RCw0QkFBNEIsS0FBSyxRQUFRLEdBQUcsQ0FBQyxFQUFFLFFBQVEsR0FBRyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUU7QUFDM0UsZ0NBQWdDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxVQUFVLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9ILDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQ2pFLDRCQUE0QixPQUFPO0FBQ25DLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUM7QUFDbEUsd0JBQXdCLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztBQUM1RDtBQUNBLHdCQUF3QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDM0MsNEJBQTRCLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztBQUNoRSw0QkFBNEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDO0FBQzlFLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDbkQsNEJBQTRCLElBQUksSUFBSSxFQUFFO0FBQ3RDLGdDQUFnQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUseUJBQXlCLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2xILDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztBQUN4RCw0QkFBNEIsT0FBTztBQUNuQyx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2pGO0FBQ0Esd0JBQXdCLElBQUksaUJBQWlCLEdBQUcsY0FBYyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BGO0FBQ0Esd0JBQXdCLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRCx3QkFBd0IsT0FBTyxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZEO0FBQ0Esd0JBQXdCLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDNUUsNEJBQTRCLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxpREFBaUQsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdk0seUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUk7QUFDNUIsNEJBQTRCLElBQUksSUFBSSxDQUFDO0FBQ3JDO0FBQ0EsNEJBQTRCLFFBQVEsSUFBSTtBQUN4QyxnQ0FBZ0MsS0FBSyxTQUFTO0FBQzlDLG9DQUFvQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLGdCQUFnQixHQUFHLElBQUksR0FBRywyQkFBMkIsQ0FBQyxDQUFDO0FBQzNHO0FBQ0EsZ0NBQWdDLEtBQUssT0FBTyxDQUFDO0FBQzdDLGdDQUFnQyxLQUFLLGNBQWM7QUFDbkQsb0NBQW9DLElBQUksQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFDO0FBQ3BFLG9DQUFvQyxJQUFJLEdBQUcsR0FBRyxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxlQUFlLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDMUssb0NBQW9DLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM3RCxvQ0FBb0MsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUMvRSxvQ0FBb0MsTUFBTTtBQUMxQztBQUNBLGdDQUFnQyxLQUFLLFVBQVUsQ0FBQztBQUNoRCxnQ0FBZ0MsS0FBSyxVQUFVLENBQUM7QUFDaEQsZ0NBQWdDLEtBQUssY0FBYztBQUNuRCxvQ0FBb0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUM7QUFDcEUsb0NBQW9DLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDdkY7QUFDQSxvQ0FBb0MsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ3pELHdDQUF3QyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDakUsd0NBQXdDLElBQUksR0FBRyxVQUFVLENBQUM7QUFDMUQscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLE1BQU07QUFDMUM7QUFDQSxnQ0FBZ0M7QUFDaEMsb0NBQW9DLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztBQUMzRyw2QkFBNkI7QUFDN0IseUJBQXlCLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDcEMsNEJBQTRCLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQyw0QkFBNEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7QUFDeEQsNEJBQTRCLE9BQU87QUFDbkMseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLHdCQUF3QixJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbkUsd0JBQXdCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQztBQUNoRSx3QkFBd0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO0FBQ3hELHdCQUF3QixJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUM7QUFDcEUsd0JBQXdCLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztBQUM5RCx3QkFBd0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO0FBQ2hFLHdCQUF3QixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7QUFDMUQscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWTtBQUNqRCx3QkFBd0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLHdCQUF3QixPQUFPLFNBQVMsY0FBYyxHQUFHO0FBQ3pELDRCQUE0QixPQUFPLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELHlCQUF5QixDQUFDO0FBQzFCLHFCQUFxQixFQUFFLENBQUM7QUFDeEI7QUFDQSxvQkFBb0IsU0FBUyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUMzQyx3QkFBd0IsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzlDLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLGdCQUFnQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO0FBQ25FLHdCQUF3QixLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNqRCx3QkFBd0IsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDbkQscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDakQsd0JBQXdCLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkQsd0JBQXdCLE9BQU8sS0FBSyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDekUscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNuRCx3QkFBd0IsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEUscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRTtBQUM3Qyx3QkFBd0IsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNwRixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsU0FBUyxZQUFZLENBQUMsS0FBSyxFQUFFO0FBQ2pELHdCQUF3QixLQUFLLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM1Rix3QkFBd0IsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNwRixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsU0FBUyxjQUFjLENBQUMsSUFBSSxFQUFFO0FBQ2xELHdCQUF3QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELHdCQUF3QixPQUFPLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEtBQUssVUFBVSxJQUFJLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsS0FBSyxNQUFNLENBQUM7QUFDOUgscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsd0JBQXdCLENBQUMsSUFBSSxFQUFFO0FBQzVELHdCQUF3QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELHdCQUF3QixPQUFPLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsS0FBSyxNQUFNLENBQUM7QUFDM0UscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsY0FBYyxDQUFDLElBQUksRUFBRTtBQUNsRCx3QkFBd0IsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCx3QkFBd0IsT0FBTyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLEtBQUssTUFBTSxDQUFDO0FBQzNFLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLFdBQVcsQ0FBQyxJQUFJLEVBQUU7QUFDL0Msd0JBQXdCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQ7QUFDQSx3QkFBd0IsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDdEUsNEJBQTRCLE9BQU8sSUFBSSxDQUFDO0FBQ3hDLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtBQUN0RSw0QkFBNEIsT0FBTyxJQUFJLENBQUM7QUFDeEMseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLE9BQU8sS0FBSyxDQUFDO0FBQ3JDLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLFNBQVMsQ0FBQyxJQUFJLEVBQUU7QUFDN0Msd0JBQXdCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQ7QUFDQSx3QkFBd0IsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNoRiw0QkFBNEIsT0FBTyxJQUFJLENBQUM7QUFDeEMseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLE9BQU8sS0FBSyxDQUFDO0FBQ3JDLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQ3pELHdCQUF3QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSTtBQUM1Qyw0QkFBNEIsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPO0FBQ2xELDRCQUE0QixTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUN2RCx3QkFBd0IsSUFBSSxRQUFRLEVBQUUsV0FBVyxDQUFDO0FBQ2xEO0FBQ0Esd0JBQXdCLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLHdCQUF3QixDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3BGLDRCQUE0QixJQUFJLFNBQVMsRUFBRTtBQUMzQyxnQ0FBZ0MsUUFBUSxHQUFHLGNBQWMsQ0FBQztBQUMxRCw2QkFBNkIsTUFBTTtBQUNuQyxnQ0FBZ0MsUUFBUSxHQUFHLFVBQVUsQ0FBQztBQUN0RCw2QkFBNkI7QUFDN0IseUJBQXlCLE1BQU0sSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDekQsNEJBQTRCLElBQUksU0FBUyxFQUFFO0FBQzNDLGdDQUFnQyxRQUFRLEdBQUcsY0FBYyxDQUFDO0FBQzFELDZCQUE2QixNQUFNO0FBQ25DLGdDQUFnQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0FBQ3RELDZCQUE2QjtBQUM3Qix5QkFBeUIsTUFBTSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN0RCw0QkFBNEIsSUFBSSxTQUFTLEVBQUU7QUFDM0MsZ0NBQWdDLFFBQVEsR0FBRyxjQUFjLENBQUM7QUFDMUQsNkJBQTZCLE1BQU07QUFDbkMsZ0NBQWdDLFFBQVEsR0FBRyxJQUFJLEtBQUssU0FBUyxHQUFHLFNBQVMsR0FBRyxPQUFPLENBQUM7QUFDcEYsNkJBQTZCO0FBQzdCLHlCQUF5QixNQUFNLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3BELDRCQUE0QixJQUFJLFNBQVMsRUFBRTtBQUMzQyxnQ0FBZ0MsUUFBUSxHQUFHLGNBQWMsQ0FBQztBQUMxRCxnQ0FBZ0MsV0FBVyxHQUFHLGVBQWUsQ0FBQztBQUM5RCw2QkFBNkIsTUFBTTtBQUNuQyxnQ0FBZ0MsUUFBUSxHQUFHLElBQUksS0FBSyxTQUFTLEdBQUcsU0FBUyxHQUFHLE9BQU8sQ0FBQztBQUNwRixnQ0FBZ0MsV0FBVyxHQUFHLFFBQVEsQ0FBQztBQUN2RCw2QkFBNkI7QUFDN0IseUJBQXlCLE1BQU07QUFDL0IsNEJBQTRCLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxtRUFBbUUsQ0FBQyxDQUFDO0FBQ2pILDRCQUE0QixRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzVDLDRCQUE0QixXQUFXLEdBQUcsT0FBTyxDQUFDO0FBQ2xELHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixPQUFPLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3ZELHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLGVBQWUsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFO0FBQ3RGLHdCQUF3QixJQUFJLFVBQVUsR0FBRyxFQUFFO0FBQzNDLDRCQUE0QixPQUFPLENBQUM7QUFDcEM7QUFDQSx3QkFBd0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzRSw0QkFBNEIsT0FBTyxHQUFHLElBQUksUUFBUSxDQUFDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3RHO0FBQ0EsNEJBQTRCLElBQUksT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ2hELGdDQUFnQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3hELDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsS0FBSyxJQUFJLFFBQVEsSUFBSSxXQUFXLEVBQUU7QUFDMUQsNEJBQTRCLE9BQU8sR0FBRyxJQUFJLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUNoSDtBQUNBLDRCQUE0QixJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRTtBQUNoRCxnQ0FBZ0MsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ2hFLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsT0FBTyxVQUFVLENBQUM7QUFDMUMscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsYUFBYSxDQUFDLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUU7QUFDeEYsd0JBQXdCLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekQsd0JBQXdCLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUM1Qyx3QkFBd0IsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFDcEQsd0JBQXdCLElBQUkseUJBQXlCLEdBQUcsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRyx3QkFBd0IsSUFBSSxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNGO0FBQ0Esd0JBQXdCLEtBQUssSUFBSSxnQkFBZ0IsSUFBSSxpQkFBaUIsRUFBRTtBQUN4RSw0QkFBNEIsZ0JBQWdCLElBQUksQ0FBQyxDQUFDO0FBQ2xELDRCQUE0QixJQUFJLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzlFO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDcEQsZ0NBQWdDLFNBQVM7QUFDekMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUkseUJBQXlCLEdBQUcsa0JBQWtCLEVBQUU7QUFDaEYsZ0NBQWdDLG1CQUFtQixFQUFFLENBQUM7QUFDdEQ7QUFDQSxnQ0FBZ0MsSUFBSSxtQkFBbUIsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUU7QUFDckYsb0NBQW9DLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSw0Q0FBNEMsQ0FBQyxDQUFDO0FBQ2xHLG9DQUFvQyxNQUFNO0FBQzFDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyx5QkFBeUIsR0FBRyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RHLGdDQUFnQyxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9GLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLFlBQVksR0FBRyx5QkFBeUIsRUFBRSxDQUFDO0FBQzNFO0FBQ0EsNEJBQTRCLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtBQUMvQyxnQ0FBZ0MsT0FBTyxHQUFHLGNBQWMsQ0FBQztBQUN6RCw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUMzRCw0QkFBNEIsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsWUFBWSxDQUFDO0FBQ3hFLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixPQUFPO0FBQy9CLDRCQUE0QixVQUFVLEVBQUUsVUFBVTtBQUNsRCw0QkFBNEIsaUJBQWlCLEVBQUUsTUFBTTtBQUNyRCw0QkFBNEIseUJBQXlCLEVBQUUseUJBQXlCO0FBQ2hGLHlCQUF5QixDQUFDO0FBQzFCLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLFNBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFO0FBQzFELHdCQUF3QixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDdkM7QUFDQSx3QkFBd0IsS0FBSyxJQUFJLFFBQVEsSUFBSSxNQUFNLEVBQUU7QUFDckQsNEJBQTRCLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFNBQVMsRUFBRTtBQUMvRCxnQ0FBZ0MsU0FBUztBQUN6Qyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsS0FBSyxDQUFDLElBQUksQ0FBQztBQUN2QyxnQ0FBZ0MsWUFBWSxFQUFFLFFBQVEsR0FBRyxDQUFDO0FBQzFELGdDQUFnQyxPQUFPLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUN6RCw2QkFBNkIsQ0FBQyxDQUFDO0FBQy9CLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ2hELDRCQUE0QixLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ3ZDLGdDQUFnQyxZQUFZLEVBQUUsQ0FBQztBQUMvQyxnQ0FBZ0MsT0FBTyxFQUFFLENBQUM7QUFDMUMsNkJBQTZCLENBQUMsQ0FBQztBQUMvQix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLGlCQUFpQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDcEUsNEJBQTRCLE9BQU8sQ0FBQyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDO0FBQ25FLHlCQUF5QixDQUFDLENBQUM7QUFDM0Isd0JBQXdCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN4Qyx3QkFBd0IsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUNsRDtBQUNBLHdCQUF3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHO0FBQ3JELDRCQUE0QixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0FBQzlELDRCQUE0QixJQUFJLFdBQVcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqRSw0QkFBNEIsRUFBRSxDQUFDLENBQUM7QUFDaEMsNEJBQTRCLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQztBQUM1QztBQUNBLDRCQUE0QixPQUFPLENBQUMsR0FBRyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFO0FBQ3BGLGdDQUFnQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNuRSxnQ0FBZ0MsRUFBRSxHQUFHLENBQUM7QUFDdEMsZ0NBQWdDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDO0FBQ0EsZ0NBQWdDLElBQUksR0FBRyxLQUFLLE1BQU0sRUFBRTtBQUNwRCxvQ0FBb0MsTUFBTTtBQUMxQyxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDbkUseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLE9BQU8sTUFBTSxDQUFDO0FBQ3RDLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLGVBQWUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFO0FBQ2hFLHdCQUF3QixJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2xFLHdCQUF3QixJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0Rix3QkFBd0IsSUFBSSxJQUFJLEdBQUcsVUFBVSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZJLHdCQUF3QixJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN6QztBQUNBLHdCQUF3QixLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2pFLDRCQUE0QixJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLEVBQUU7QUFDeEQsZ0NBQWdDLE1BQU07QUFDdEMsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0FBQ0Esd0JBQXdCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFO0FBQzlFLDRCQUE0QixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2xELHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoRix3QkFBd0IsSUFBSSxRQUFRLEdBQUcsU0FBUyxHQUFHLG1CQUFtQixDQUFDO0FBQ3ZFLHdCQUF3QixJQUFJLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVGLHdCQUF3QixJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDNUMsd0JBQXdCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUMxQyx3QkFBd0IsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzFDLHdCQUF3QixJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDaEQsd0JBQXdCLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUMzQyx3QkFBd0IsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLHdCQUF3QixJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQztBQUNyRDtBQUNBLHdCQUF3QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pFLDRCQUE0QixLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLDRCQUE0QixLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLDRCQUE0QixHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLDRCQUE0QixVQUFVLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFELDRCQUE0QixRQUFRLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELDRCQUE0QixLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLDRCQUE0QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDbEQ7QUFDQSw0QkFBNEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDeEUsZ0NBQWdDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ25FLG9DQUFvQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQ3ZELG9DQUFvQyxNQUFNO0FBQzFDLGlDQUFpQztBQUNqQyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUM3QyxnQ0FBZ0MsSUFBSSxNQUFNLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzNFLGdDQUFnQyxJQUFJLElBQUksR0FBRyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDeEQsZ0NBQWdDLFFBQVEsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsZ0NBQWdDLGNBQWMsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbkU7QUFDQSxnQ0FBZ0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDNUUsb0NBQW9DLFNBQVMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsaUNBQWlDO0FBQ2pDLDZCQUE2QixNQUFNO0FBQ25DLGdDQUFnQyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekQsZ0NBQWdDLFFBQVEsSUFBSSxRQUFRLENBQUMsU0FBUyxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQztBQUNqRixnQ0FBZ0MsY0FBYyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RCw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxFQUFFO0FBQ3JELDRCQUE0QixRQUFRLElBQUksVUFBVSxDQUFDO0FBQ25ELDRCQUE0QixVQUFVLElBQUksVUFBVSxDQUFDO0FBQ3JELDRCQUE0QixRQUFRLElBQUksVUFBVSxDQUFDO0FBQ25ELDRCQUE0QixjQUFjLElBQUksVUFBVSxDQUFDO0FBQ3pELHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLFNBQVMsR0FBRyxVQUFVLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxRQUFRLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxRQUFRLEdBQUcsY0FBYyxHQUFHLFNBQVMsQ0FBQztBQUMzUCx3QkFBd0IsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQzdDLHdCQUF3QixJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDN0M7QUFDQSx3QkFBd0IsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFO0FBQzNDLDRCQUE0QixJQUFJLElBQUksVUFBVSxHQUFHLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1SCw0QkFBNEIsV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUM3QztBQUNBLDRCQUE0QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6RSxnQ0FBZ0MsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRCxnQ0FBZ0MsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxnQ0FBZ0MsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxnQ0FBZ0MsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0FBQ0EsZ0NBQWdDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQzVFLG9DQUFvQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN2RSx3Q0FBd0MsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9ELHdDQUF3QyxXQUFXLElBQUksSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekksd0NBQXdDLEtBQUssR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3hELHdDQUF3QyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsV0FBVyxJQUFJLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3RJLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixXQUFXLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsR0FBRyxrQkFBa0IsR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNyTCx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsT0FBTyxJQUFJLEdBQUcsVUFBVSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQzFILHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLGdCQUFnQixDQUFDLEdBQUcsRUFBRTtBQUNuRCx3QkFBd0IsSUFBSSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsRSx3QkFBd0IsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pELHdCQUF3QixNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLHdCQUF3QixJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDM0Q7QUFDQSx3QkFBd0IsSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLFNBQVMsR0FBRyxNQUFNLEVBQUU7QUFDL0QsNEJBQTRCLE9BQU8sS0FBSyxDQUFDO0FBQ3pDLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDM0Qsd0JBQXdCLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUMxRDtBQUNBLHdCQUF3QixJQUFJLFNBQVMsR0FBRyxRQUFRLEVBQUU7QUFDbEQsNEJBQTRCLE9BQU8sS0FBSyxDQUFDO0FBQ3pDLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLHdCQUF3QixJQUFJLFdBQVcsR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDN0Q7QUFDQSx3QkFBd0IsSUFBSSxXQUFXLEtBQUssQ0FBQyxFQUFFO0FBQy9DLDRCQUE0QixPQUFPLEtBQUssQ0FBQztBQUN6Qyx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RCx3QkFBd0IsT0FBTyxJQUFJLENBQUM7QUFDcEMscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsY0FBYyxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFO0FBQy9FLHdCQUF3QixRQUFRLEdBQUcsUUFBUSxJQUFJO0FBQy9DLDRCQUE0QixVQUFVLEVBQUUsQ0FBQztBQUN6Qyw0QkFBNEIsSUFBSSxFQUFFLENBQUM7QUFDbkMsNEJBQTRCLElBQUksRUFBRSxDQUFDO0FBQ25DLDRCQUE0QixNQUFNLEVBQUUsQ0FBQztBQUNyQyw0QkFBNEIsT0FBTyxFQUFFLENBQUM7QUFDdEMseUJBQXlCLENBQUM7QUFDMUIsd0JBQXdCLElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQztBQUNoRCx3QkFBd0IsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBQ2hELHdCQUF3QixJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFDaEQsd0JBQXdCLElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQztBQUNoRCx3QkFBd0IsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBQ2xELHdCQUF3QixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDOUM7QUFDQSx3QkFBd0IsSUFBSSxXQUFXLEVBQUU7QUFDekMsNEJBQTRCLEtBQUssSUFBSSxJQUFJLElBQUksV0FBVyxFQUFFO0FBQzFELGdDQUFnQyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQzFDO0FBQ0EsZ0NBQWdDLElBQUksY0FBYyxHQUFHLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtBQUM5RSxvQ0FBb0MsY0FBYyxHQUFHLElBQUksQ0FBQztBQUMxRCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxhQUFhLEdBQUcsSUFBSSxFQUFFO0FBQzFELG9DQUFvQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQ3pELGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN0RjtBQUNBLGdDQUFnQyxJQUFJLFFBQVEsR0FBRyxFQUFFLEVBQUU7QUFDbkQsb0NBQW9DLGVBQWUsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDO0FBQ3JFLGlDQUFpQyxNQUFNLElBQUksUUFBUSxHQUFHLEVBQUUsRUFBRTtBQUMxRCxvQ0FBb0MsZUFBZSxJQUFJLENBQUMsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzFFLGlDQUFpQyxNQUFNLElBQUksUUFBUSxHQUFHLEVBQUUsRUFBRTtBQUMxRCxvQ0FBb0MsZUFBZSxJQUFJLENBQUMsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzFFLGlDQUFpQyxNQUFNLElBQUksUUFBUSxHQUFHLEdBQUcsRUFBRTtBQUMzRCxvQ0FBb0MsZUFBZSxJQUFJLENBQUMsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzFFLGlDQUFpQyxNQUFNO0FBQ3ZDLG9DQUFvQyxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQywyREFBMkQsQ0FBQyxDQUFDO0FBQzdILGlDQUFpQztBQUNqQyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxhQUFhLEdBQUcsTUFBTSxFQUFFO0FBQ3hELGdDQUFnQyxhQUFhLEdBQUcsTUFBTSxDQUFDO0FBQ3ZELDZCQUE2QjtBQUM3Qix5QkFBeUIsTUFBTTtBQUMvQiw0QkFBNEIsY0FBYyxHQUFHLENBQUMsQ0FBQztBQUMvQyw0QkFBNEIsYUFBYSxHQUFHLEdBQUcsQ0FBQztBQUNoRCx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25FLHdCQUF3QixJQUFJLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdILHdCQUF3QixJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxVQUFVLEdBQUcscUJBQXFCLENBQUM7QUFDdkcsd0JBQXdCLElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9HLHdCQUF3QixJQUFJLFdBQVcsR0FBRyxRQUFRLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLFVBQVUsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsSDtBQUNBLHdCQUF3QixJQUFJLFdBQVcsR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN0Riw0QkFBNEIsV0FBVyxHQUFHLENBQUMsV0FBVyxDQUFDO0FBQ3ZELHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQztBQUNwRSx3QkFBd0IsSUFBSSxVQUFVLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQ3hFLHdCQUF3QixPQUFPLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxjQUFjLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRywwQkFBMEIsR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLEdBQUcsa0JBQWtCLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxjQUFjLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsVUFBVSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsa0JBQWtCLEdBQUcsa0JBQWtCLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsY0FBYyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDdjdCLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLGVBQWUsQ0FBQyxVQUFVLEVBQUU7QUFDekQsd0JBQXdCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pGLHdCQUF3QixPQUFPLGtCQUFrQixHQUFHLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsa0JBQWtCLEdBQUcsa0JBQWtCLEdBQUcsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7QUFDMU8scUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7QUFDMUQsd0JBQXdCLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDcEMsNEJBQTRCLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM3Qyx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQztBQUN6Uyx3QkFBd0IsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBQ2hELHdCQUF3QixJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7QUFDOUM7QUFDQSx3QkFBd0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdEUsNEJBQTRCLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVELDRCQUE0QixJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDbkQ7QUFDQSw0QkFBNEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdEUsZ0NBQWdDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hGLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixjQUFjLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4RSx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDOUQsd0JBQXdCLElBQUksU0FBUyxHQUFHLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2pFLHdCQUF3QixJQUFJLFNBQVMsR0FBRyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNqRSx3QkFBd0IsSUFBSSxTQUFTLEdBQUcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDakUsd0JBQXdCLElBQUksZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO0FBQ2pGLHdCQUF3QixJQUFJLFNBQVMsR0FBRyxVQUFVLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0SCx3QkFBd0IsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQzFDO0FBQ0Esd0JBQXdCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3hFLDRCQUE0QixJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQ7QUFDQSw0QkFBNEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkUsZ0NBQWdDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUMsZ0NBQWdDLElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN2SixnQ0FBZ0MsU0FBUyxJQUFJLFVBQVUsQ0FBQztBQUN4RCxnQ0FBZ0MsU0FBUyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDeEQsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixTQUFTLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hGLHdCQUF3QixPQUFPLFNBQVMsQ0FBQztBQUN6QyxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsSUFBSSxDQUFDLFNBQVMsR0FBRztBQUNyQyx3QkFBd0IsSUFBSSxFQUFFLElBQUk7QUFDbEMsd0JBQXdCLElBQUksRUFBRSxJQUFJO0FBQ2xDLHdCQUF3QixRQUFRLEVBQUUsSUFBSTtBQUN0Qyx3QkFBd0IsUUFBUSxFQUFFLElBQUk7QUFDdEMsd0JBQXdCLGVBQWUsRUFBRSxLQUFLO0FBQzlDO0FBQ0Esd0JBQXdCLElBQUksUUFBUSxHQUFHO0FBQ3ZDLDRCQUE0QixJQUFJLFFBQVEsR0FBRyxjQUFjLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBQ2xIO0FBQ0EsNEJBQTRCLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDakYseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLFVBQVUsRUFBRSxTQUFTLGVBQWUsR0FBRztBQUMvRCw0QkFBNEIsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQzFDO0FBQ0EsNEJBQTRCLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO0FBQ2hELGdDQUFnQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDNUQsb0NBQW9DLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixPQUFPLElBQUksQ0FBQztBQUN4Qyx5QkFBeUI7QUFDekIsd0JBQXdCLG9CQUFvQixFQUFFLFNBQVMseUJBQXlCLEdBQUc7QUFDbkYsNEJBQTRCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztBQUM3QztBQUNBLDRCQUE0QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUNwRCw0QkFBNEIsSUFBSSxRQUFRLEVBQUUsT0FBTyxDQUFDO0FBQ2xELDRCQUE0QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2pELDRCQUE0QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2pELDRCQUE0QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3ZELDRCQUE0QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0RSw0QkFBNEIsSUFBSSxVQUFVLEdBQUcsSUFBSSxlQUFlLENBQUMsYUFBYSxHQUFHO0FBQ2pGLGdDQUFnQyxhQUFhLEdBQUcsSUFBSSxlQUFlLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQztBQUN4Riw0QkFBNEIsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlJLDRCQUE0QixRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUM7QUFDbkcsNEJBQTRCLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN6RSw0QkFBNEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEgsNEJBQTRCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN0RSw0QkFBNEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2pGO0FBQ0EsNEJBQTRCLElBQUksY0FBYyxJQUFJLElBQUksS0FBSyxjQUFjLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUU7QUFDdkgsZ0NBQWdDLElBQUksd0JBQXdCLEdBQUcsSUFBSSxlQUFlLENBQUMsMkJBQTJCLEdBQUcsQ0FBQztBQUNsSCxnQ0FBZ0MsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzdDO0FBQ0EsZ0NBQWdDLEtBQUssUUFBUSxJQUFJLHdCQUF3QixFQUFFO0FBQzNFLG9DQUFvQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4RixpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2hFLG9DQUFvQyxJQUFJLGlDQUFpQyxHQUFHLElBQUksZUFBZSxDQUFDLG9DQUFvQyxHQUFHLENBQUM7QUFDeEk7QUFDQSxvQ0FBb0MsS0FBSyxRQUFRLElBQUksaUNBQWlDLEVBQUU7QUFDeEYsd0NBQXdDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGlDQUFpQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3JHLHFDQUFxQztBQUNyQyxpQ0FBaUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDbEUsb0NBQW9DLElBQUksOEJBQThCLEdBQUcsSUFBSSxlQUFlLENBQUMsaUNBQWlDLEdBQUcsQ0FBQztBQUNsSTtBQUNBLG9DQUFvQyxLQUFLLFFBQVEsSUFBSSw4QkFBOEIsRUFBRTtBQUNyRix3Q0FBd0MsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsOEJBQThCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDbEcscUNBQXFDO0FBQ3JDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFTLFlBQVksb0JBQW9CLENBQUM7QUFDdkc7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLGlCQUFpQixFQUFFO0FBQ3hELG9DQUFvQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLFFBQVEsRUFBRSxlQUFlLEVBQUU7QUFDaEcsd0NBQXdDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGVBQWUsQ0FBQztBQUN6RSxxQ0FBcUMsQ0FBQyxDQUFDO0FBQ3ZDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN0RCxnQ0FBZ0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2RSw2QkFBNkIsTUFBTSxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDakUsZ0NBQWdDLElBQUksQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN0Siw2QkFBNkIsTUFBTSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDbkUsZ0NBQWdDLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUM3RCxvQ0FBb0MsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLDREQUE0RCxDQUFDLENBQUM7QUFDbEgsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLFVBQVUsQ0FBQyx3QkFBd0IsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNqSyw2QkFBNkIsTUFBTSxJQUFJLGNBQWMsRUFBRTtBQUN2RCxnQ0FBZ0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM5SSw2QkFBNkIsTUFBTTtBQUNuQyxnQ0FBZ0MsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDO0FBQzFGLGdDQUFnQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLFFBQVEsRUFBRSxlQUFlLEVBQUU7QUFDNUYsb0NBQW9DLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFO0FBQzFELHdDQUF3QyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdkgsd0NBQXdDLE9BQU8sR0FBRyxJQUFJLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUNoSDtBQUNBLHdDQUF3QyxJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRTtBQUM1RCw0Q0FBNEMsZUFBZSxHQUFHLE9BQU8sQ0FBQztBQUN0RSx5Q0FBeUM7QUFDekMscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsZUFBZSxDQUFDO0FBQ2pGLGlDQUFpQyxDQUFDLENBQUM7QUFDbkMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyRSw0QkFBNEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZFLHlCQUF5QjtBQUN6Qix3QkFBd0IsY0FBYyxFQUFFLFNBQVMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7QUFDN0YsNEJBQTRCLElBQUksWUFBWSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2hLO0FBQ0EsNEJBQTRCLFNBQVMsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUU7QUFDakUsZ0NBQWdDLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakUsZ0NBQWdDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEQsZ0NBQWdDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEQsZ0NBQWdDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEQsZ0NBQWdDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEQsZ0NBQWdDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEQsZ0NBQWdDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEQsZ0NBQWdDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEQsZ0NBQWdDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEQ7QUFDQSxnQ0FBZ0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNwRSxvQ0FBb0MsSUFBSSxLQUFLLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JFO0FBQ0Esb0NBQW9DLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUMzRSx3Q0FBd0MsU0FBUztBQUNqRCxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUM1RCx3Q0FBd0MsU0FBUztBQUNqRCxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDOUQsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLE9BQU8sTUFBTSxDQUFDO0FBQzlDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixTQUFTLGNBQWMsQ0FBQyxJQUFJLEVBQUU7QUFDMUQsZ0NBQWdDLElBQUksR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckYsZ0NBQWdDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDckUsZ0NBQWdDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkUsZ0NBQWdDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkUsZ0NBQWdDLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNoRSxnQ0FBZ0MsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZFLGdDQUFnQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xELGdDQUFnQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2pFLGdDQUFnQyxJQUFJLENBQUMsR0FBRyxHQUFHLGdCQUFnQixDQUFDO0FBQzVEO0FBQ0EsZ0NBQWdDLElBQUksR0FBRyxLQUFLLE1BQU0sRUFBRTtBQUNwRCxvQ0FBb0MsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoRixvQ0FBb0MsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUNyRCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsT0FBTztBQUN2QyxvQ0FBb0MsR0FBRyxFQUFFLEdBQUc7QUFDNUMsb0NBQW9DLFFBQVEsRUFBRSxRQUFRO0FBQ3RELG9DQUFvQyxNQUFNLEVBQUUsTUFBTTtBQUNsRCxvQ0FBb0MsTUFBTSxFQUFFLE1BQU07QUFDbEQsb0NBQW9DLElBQUksRUFBRSxJQUFJO0FBQzlDLGlDQUFpQyxDQUFDO0FBQ2xDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixTQUFTLGtCQUFrQixDQUFDLEdBQUcsRUFBRTtBQUM3RCxnQ0FBZ0MsT0FBTztBQUN2QyxvQ0FBb0MsT0FBTyxFQUFFLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RGLG9DQUFvQyxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRTtBQUM5RCxvQ0FBb0MsV0FBVyxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUU7QUFDaEUsb0NBQW9DLGFBQWEsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFO0FBQ2xFLG9DQUFvQyxVQUFVLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRTtBQUMvRCxpQ0FBaUMsQ0FBQztBQUNsQyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsU0FBUyw0QkFBNEIsQ0FBQyxHQUFHLEVBQUU7QUFDdkUsZ0NBQWdDLElBQUksTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkYsZ0NBQWdDLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLEtBQUssTUFBTSxFQUFFLHFDQUFxQyxDQUFDLENBQUM7QUFDNUcsZ0NBQWdDLElBQUksWUFBWSxHQUFHLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuRSxnQ0FBZ0MsSUFBSSxZQUFZLEdBQUcsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25FLGdDQUFnQyxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3BFLGdDQUFnQyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDckQ7QUFDQSxnQ0FBZ0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuRSxvQ0FBb0MsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDM0UsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksTUFBTSxHQUFHO0FBQzdDLG9DQUFvQyxNQUFNLEVBQUUsTUFBTTtBQUNsRCxvQ0FBb0MsWUFBWSxFQUFFLFlBQVk7QUFDOUQsb0NBQW9DLFlBQVksRUFBRSxZQUFZO0FBQzlELG9DQUFvQyxRQUFRLEVBQUUsUUFBUTtBQUN0RCxvQ0FBb0MsV0FBVyxFQUFFLFdBQVc7QUFDNUQsaUNBQWlDLENBQUM7QUFDbEM7QUFDQSxnQ0FBZ0MsUUFBUSxZQUFZO0FBQ3BELG9DQUFvQyxLQUFLLENBQUM7QUFDMUMsd0NBQXdDLE9BQU8sTUFBTSxDQUFDO0FBQ3REO0FBQ0Esb0NBQW9DLEtBQUssQ0FBQztBQUMxQyx3Q0FBd0MsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlFLHdDQUF3QyxNQUFNLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDakYsd0NBQXdDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNqRix3Q0FBd0MsT0FBTyxNQUFNLENBQUM7QUFDdEQsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLDRDQUE0QyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNwSSw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsU0FBUywwQkFBMEIsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFO0FBQy9FLGdDQUFnQyxJQUFJLHFCQUFxQixHQUFHLDRCQUE0QixDQUFDLEdBQUcsQ0FBQztBQUM3RixvQ0FBb0MsUUFBUSxHQUFHLHFCQUFxQixDQUFDLFFBQVE7QUFDN0Usb0NBQW9DLFdBQVcsR0FBRyxxQkFBcUIsQ0FBQyxXQUFXLENBQUM7QUFDcEY7QUFDQSxnQ0FBZ0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuRSxvQ0FBb0MsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRixvQ0FBb0MsSUFBSSxlQUFlLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEYsb0NBQW9DLElBQUksZUFBZSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3JHO0FBQ0Esb0NBQW9DLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDbEUsd0NBQXdDLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7QUFDN0gscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLElBQUksU0FBUyxHQUFHLGFBQWEsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUMzRjtBQUNBLG9DQUFvQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3hGLHdDQUF3QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9GLDRDQUE0QyxJQUFJLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUU7QUFDQSw0Q0FBNEMsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQ3hHLGdEQUFnRCxPQUFPO0FBQ3ZELG9EQUFvRCxNQUFNLEVBQUUsZUFBZTtBQUMzRSxvREFBb0QsTUFBTSxFQUFFLGVBQWU7QUFDM0UsaURBQWlELENBQUM7QUFDbEQsNkNBQTZDO0FBQzdDLHlDQUF5QztBQUN6QyxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLHlDQUF5QyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUNwSSw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFO0FBQzVGLGdDQUFnQyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQzNDLG9DQUFvQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztBQUNoRixvQ0FBb0MsT0FBTztBQUMzQyx3Q0FBd0MsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUN0RCx3Q0FBd0MsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUN0RCx3Q0FBd0MsUUFBUSxFQUFFLEVBQUU7QUFDcEQsd0NBQXdDLFlBQVksRUFBRSxLQUFLO0FBQzNELHFDQUFxQyxDQUFDO0FBQ3RDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLE9BQU8sQ0FBQztBQUM1QyxnQ0FBZ0MsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDeEYsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ2pELGdDQUFnQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDakQsZ0NBQWdDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNqRSxnQ0FBZ0MsSUFBSSxjQUFjLENBQUM7QUFDbkQsZ0NBQWdDLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztBQUNyRDtBQUNBLGdDQUFnQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3BFLG9DQUFvQyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDdEUsb0NBQW9DLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN0RSxvQ0FBb0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN2RSxvQ0FBb0MsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ3pEO0FBQ0Esb0NBQW9DLElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxVQUFVLEtBQUssVUFBVSxJQUFJLGNBQWMsQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFO0FBQ2hKLHdDQUF3QyxTQUFTO0FBQ2pELHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLFVBQVUsS0FBSyxDQUFDLElBQUksVUFBVSxLQUFLLENBQUMsRUFBRTtBQUM5RSx3Q0FBd0MsUUFBUSxHQUFHLElBQUksQ0FBQztBQUN4RCxxQ0FBcUMsTUFBTSxJQUFJLFVBQVUsS0FBSyxDQUFDLElBQUksVUFBVSxLQUFLLENBQUMsRUFBRTtBQUNyRix3Q0FBd0MsUUFBUSxHQUFHLElBQUksQ0FBQztBQUN4RCxxQ0FBcUMsTUFBTSxJQUFJLFVBQVUsS0FBSyxDQUFDLElBQUksVUFBVSxLQUFLLENBQUMsS0FBSyxXQUFXLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRTtBQUN6SCx3Q0FBd0MsUUFBUSxHQUFHLElBQUksQ0FBQztBQUN4RDtBQUNBLHdDQUF3QyxJQUFJLENBQUMsY0FBYyxFQUFFO0FBQzdELDRDQUE0QyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzVELHlDQUF5QztBQUN6QyxxQ0FBcUMsTUFBTSxJQUFJLGNBQWMsSUFBSSxVQUFVLEtBQUssQ0FBQyxJQUFJLFVBQVUsS0FBSyxDQUFDLEVBQUU7QUFDdkcsd0NBQXdDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDeEQsd0NBQXdDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDeEQscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLElBQUksUUFBUSxFQUFFO0FBQ2xELHdDQUF3QyxjQUFjLEdBQUc7QUFDekQsNENBQTRDLFVBQVUsRUFBRSxVQUFVO0FBQ2xFLDRDQUE0QyxVQUFVLEVBQUUsVUFBVTtBQUNsRSw0Q0FBNEMsTUFBTSxFQUFFLE1BQU07QUFDMUQseUNBQXlDLENBQUM7QUFDMUMscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLElBQUksUUFBUSxFQUFFO0FBQ2xELHdDQUF3QyxNQUFNO0FBQzlDLHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxjQUFjLEVBQUU7QUFDcEQsb0NBQW9DLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUM7QUFDN0UsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQy9FLG9DQUFvQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsd0NBQXdDLENBQUMsQ0FBQztBQUM5RixvQ0FBb0MsT0FBTztBQUMzQyx3Q0FBd0MsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUN0RCx3Q0FBd0MsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUN0RCx3Q0FBd0MsUUFBUSxFQUFFLEVBQUU7QUFDcEQsd0NBQXdDLFlBQVksRUFBRSxLQUFLO0FBQzNELHFDQUFxQyxDQUFDO0FBQ3RDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDOUQsZ0NBQWdDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNqRCxnQ0FBZ0MsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ2pELGdDQUFnQyxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7QUFDekQsZ0NBQWdDLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUNsRCxnQ0FBZ0MsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDO0FBQy9DO0FBQ0EsZ0NBQWdDLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTtBQUNsRCxvQ0FBb0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDOUQsd0NBQXdDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNuRTtBQUNBLHdDQUF3QyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3BELDRDQUE0QyxTQUFTO0FBQ3JELHlDQUF5QztBQUN6QztBQUNBLHdDQUF3QyxRQUFRLENBQUMsSUFBSSxDQUFDO0FBQ3RELDRDQUE0QyxRQUFRLEVBQUUsQ0FBQztBQUN2RCw0Q0FBNEMsT0FBTyxFQUFFLEtBQUs7QUFDMUQseUNBQXlDLENBQUMsQ0FBQztBQUMzQyxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsWUFBWSxHQUFHLElBQUksQ0FBQztBQUN4RCxpQ0FBaUMsTUFBTSxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDekQsb0NBQW9DLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekUsb0NBQW9DLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckQsb0NBQW9DLElBQUksUUFBUTtBQUNoRCx3Q0FBd0MsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUN0RDtBQUNBLG9DQUFvQyxLQUFLLFFBQVEsR0FBRyxDQUFDLEVBQUUsUUFBUSxHQUFHLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRTtBQUN4Rix3Q0FBd0MsUUFBUSxDQUFDLElBQUksQ0FBQztBQUN0RCw0Q0FBNEMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDakUseUNBQXlDLENBQUMsQ0FBQztBQUMzQyxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3JEO0FBQ0Esb0NBQW9DLEtBQUssUUFBUSxHQUFHLENBQUMsRUFBRSxRQUFRLEdBQUcsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUFFO0FBQ3hGLHdDQUF3QyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNwRixxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsS0FBSyxRQUFRLEdBQUcsQ0FBQyxFQUFFLFFBQVEsR0FBRyxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUU7QUFDeEYsd0NBQXdDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3BGLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDekQ7QUFDQSxvQ0FBb0MsS0FBSyxRQUFRLEdBQUcsQ0FBQyxFQUFFLFFBQVEsR0FBRyxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUU7QUFDeEYsd0NBQXdDLE9BQU8sR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDckUsd0NBQXdDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUMzRTtBQUNBLHdDQUF3QyxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQzFELDRDQUE0QyxPQUFPLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLDRDQUE0QyxTQUFTO0FBQ3JELHlDQUF5QztBQUN6QztBQUNBLHdDQUF3QyxJQUFJLFdBQVcsR0FBRyxDQUFDLFdBQVcsSUFBSSxDQUFDLEtBQUssUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDO0FBQ3JHLHdDQUF3QyxPQUFPLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUMxRSx3Q0FBd0MsWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0gscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUNyRDtBQUNBLG9DQUFvQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2RSx3Q0FBd0MsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUN2RSxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsS0FBSyxRQUFRLEdBQUcsQ0FBQyxFQUFFLFFBQVEsR0FBRyxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUU7QUFDeEYsd0NBQXdDLE9BQU8sR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDckUsd0NBQXdDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzlELHdDQUF3QyxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQzlELHdDQUF3QyxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ2xFLHdDQUF3QyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUMxRTtBQUNBLHdDQUF3QyxLQUFLLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2RSw0Q0FBNEMsSUFBSSxDQUFDLEtBQUssTUFBTSxFQUFFO0FBQzlELGdEQUFnRCxTQUFTO0FBQ3pELDZDQUE2QztBQUM3QztBQUNBLDRDQUE0QyxPQUFPLEdBQUcsV0FBVyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDN0csNENBQTRDLE9BQU8sR0FBRyxPQUFPLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUMvRSw0Q0FBNEMsUUFBUSxDQUFDLElBQUksQ0FBQztBQUMxRCxnREFBZ0QsUUFBUSxFQUFFLENBQUM7QUFDM0QsZ0RBQWdELE9BQU8sRUFBRSxPQUFPO0FBQ2hFLDZDQUE2QyxDQUFDLENBQUM7QUFDL0MseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyxpQ0FBaUMsTUFBTSxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDekQsb0NBQW9DLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNyRSxvQ0FBb0MsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3RFO0FBQ0Esb0NBQW9DLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JFLHdDQUF3QyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25FLHdDQUF3QyxJQUFJLFFBQVEsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3JFLHdDQUF3QyxRQUFRLENBQUMsSUFBSSxDQUFDO0FBQ3RELDRDQUE0QyxRQUFRLEVBQUUsUUFBUTtBQUM5RCw0Q0FBNEMsT0FBTyxFQUFFLE9BQU87QUFDNUQseUNBQXlDLENBQUMsQ0FBQztBQUMzQyxxQ0FBcUM7QUFDckMsaUNBQWlDLE1BQU07QUFDdkMsb0NBQW9DLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxxQ0FBcUMsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUNwRyxvQ0FBb0MsT0FBTztBQUMzQyx3Q0FBd0MsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUN0RCx3Q0FBd0MsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUN0RCx3Q0FBd0MsUUFBUSxFQUFFLEVBQUU7QUFDcEQsd0NBQXdDLFlBQVksRUFBRSxLQUFLO0FBQzNELHFDQUFxQyxDQUFDO0FBQ3RDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM5RCxvQ0FBb0MsT0FBTyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDbkUsaUNBQWlDLENBQUMsQ0FBQztBQUNuQztBQUNBLGdDQUFnQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdEUsb0NBQW9DLElBQUksUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtBQUMzRix3Q0FBd0MsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUQsd0NBQXdDLENBQUMsRUFBRSxDQUFDO0FBQzVDLHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsT0FBTztBQUN2QyxvQ0FBb0MsVUFBVSxFQUFFLGNBQWMsQ0FBQyxVQUFVO0FBQ3pFLG9DQUFvQyxVQUFVLEVBQUUsY0FBYyxDQUFDLFVBQVU7QUFDekUsb0NBQW9DLFFBQVEsRUFBRSxRQUFRO0FBQ3RELG9DQUFvQyxZQUFZLEVBQUUsWUFBWTtBQUM5RCxpQ0FBaUMsQ0FBQztBQUNsQyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsU0FBUyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFO0FBQ3ZGLGdDQUFnQyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQzdDLG9DQUFvQyxJQUFJLE9BQU8sRUFBRTtBQUNqRCx3Q0FBd0MsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDNUQscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLE9BQU87QUFDM0MsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDekYsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzlDLGdDQUFnQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUM5QyxnQ0FBZ0MsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDOUMsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzlDLGdDQUFnQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUM5QyxnQ0FBZ0MsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDOUMsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzlDLGdDQUFnQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUM5QyxnQ0FBZ0MsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDOUMsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzlDLGdDQUFnQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUM5QyxnQ0FBZ0MsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDOUMsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzlDLGdDQUFnQyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDcEU7QUFDQSxnQ0FBZ0MsSUFBSSxZQUFZLEdBQUcsU0FBUyxFQUFFO0FBQzlELG9DQUFvQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLEdBQUcsWUFBWSxHQUFHLGtCQUFrQixHQUFHLDhCQUE4QixHQUFHLFNBQVMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNqSyxvQ0FBb0MsWUFBWSxHQUFHLFNBQVMsQ0FBQztBQUM3RCxvQ0FBb0MsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFlBQVksR0FBRyxNQUFNLEtBQUssQ0FBQyxDQUFDO0FBQ25GLG9DQUFvQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksR0FBRyxNQUFNLENBQUM7QUFDNUUsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksaUJBQWlCLEdBQUcsU0FBUyxHQUFHLFlBQVksQ0FBQztBQUNqRixnQ0FBZ0MsSUFBSSxVQUFVLEdBQUcsaUJBQWlCLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzlHO0FBQ0EsZ0NBQWdDLElBQUksVUFBVSxHQUFHLENBQUMsRUFBRTtBQUNwRCxvQ0FBb0MsSUFBSSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEcsb0NBQW9DLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlELG9DQUFvQyxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztBQUMzRCxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLFNBQVMsYUFBYSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFO0FBQ2hILGdDQUFnQyxJQUFJLFlBQVksR0FBRztBQUNuRCxvQ0FBb0MsTUFBTSxFQUFFLENBQUM7QUFDN0Msb0NBQW9DLGtCQUFrQixFQUFFLENBQUM7QUFDekQsaUNBQWlDLENBQUM7QUFDbEM7QUFDQSxnQ0FBZ0MsSUFBSSxTQUFTLEdBQUcsV0FBVyxJQUFJLEVBQUUsRUFBRTtBQUNuRSxvQ0FBb0MsT0FBTyxZQUFZLENBQUM7QUFDeEQsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ25GLGdDQUFnQyxJQUFJLGFBQWEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xGO0FBQ0EsZ0NBQWdDLElBQUksYUFBYSxHQUFHLENBQUMsRUFBRTtBQUN2RCxvQ0FBb0MsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELG9DQUFvQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQzdFLG9DQUFvQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM5RCxvQ0FBb0MsWUFBWSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3RFLG9DQUFvQyxPQUFPLFlBQVksQ0FBQztBQUN4RCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDO0FBQ3JDLG9DQUFvQyxDQUFDLEdBQUcsRUFBRTtBQUMxQyxvQ0FBb0MsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUNuRDtBQUNBLGdDQUFnQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNwRSxvQ0FBb0MsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlFLG9DQUFvQyxVQUFVLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM5RCxvQ0FBb0MsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFDMUQsZ0NBQWdDLElBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BGLGdDQUFnQyxZQUFZLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7QUFDckYsZ0NBQWdDLENBQUMsSUFBSSxDQUFDLEdBQUcsa0JBQWtCLENBQUM7QUFDNUQsZ0NBQWdDLElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQztBQUN4RCxnQ0FBZ0MsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFDMUQ7QUFDQSxnQ0FBZ0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakUsb0NBQW9DLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pEO0FBQ0Esb0NBQW9DLElBQUksSUFBSSxHQUFHLElBQUksRUFBRTtBQUNyRCx3Q0FBd0MsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2xFLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLFFBQVEsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzSCxvQ0FBb0MsaUJBQWlCLElBQUksUUFBUSxDQUFDO0FBQ2xFO0FBQ0Esb0NBQW9DLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtBQUNsRCx3Q0FBd0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0Qsd0NBQXdDLENBQUMsSUFBSSxNQUFNLENBQUM7QUFDcEQsd0NBQXdDLGlCQUFpQixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUM7QUFDL0UscUNBQXFDO0FBQ3JDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLGlCQUFpQixLQUFLLENBQUMsRUFBRTtBQUM3RCxvQ0FBb0MsT0FBTyxZQUFZLENBQUM7QUFDeEQsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksZUFBZSxHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztBQUM1RTtBQUNBLGdDQUFnQyxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ25FLG9DQUFvQyxPQUFPLFlBQVksQ0FBQztBQUN4RCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLFVBQVUsSUFBSSxrQkFBa0IsR0FBRyxDQUFDLEVBQUU7QUFDM0Usb0NBQW9DLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM3RixvQ0FBb0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsQ0FBQztBQUNwRixvQ0FBb0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxlQUFlLENBQUMsRUFBRSxTQUFTLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakksb0NBQW9DLGVBQWUsSUFBSSxrQkFBa0IsQ0FBQztBQUMxRTtBQUNBLG9DQUFvQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsZUFBZSxHQUFHLENBQUMsRUFBRTtBQUMzRSx3Q0FBd0MsZUFBZSxHQUFHLGVBQWUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkYscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLFlBQVksQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDO0FBQzFFLG9DQUFvQyxPQUFPLFlBQVksQ0FBQztBQUN4RCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLGVBQWUsR0FBRyxDQUFDLEVBQUU7QUFDdkUsb0NBQW9DLGVBQWUsR0FBRyxlQUFlLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9FLG9DQUFvQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzNGLG9DQUFvQyxZQUFZLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQztBQUMxRSxvQ0FBb0MsT0FBTyxZQUFZLENBQUM7QUFDeEQsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzFELGdDQUFnQyxZQUFZLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDbEUsZ0NBQWdDLE9BQU8sWUFBWSxDQUFDO0FBQ3BELDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixTQUFTLFlBQVksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRTtBQUMvRSxnQ0FBZ0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUNyRCxnQ0FBZ0MsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hGO0FBQ0EsZ0NBQWdDLElBQUksT0FBTyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDekQsb0NBQW9DLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxtREFBbUQsR0FBRyxPQUFPLENBQUMsQ0FBQztBQUNuSCxvQ0FBb0MsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoRCxvQ0FBb0MsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoRCxvQ0FBb0MsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoRCxvQ0FBb0MsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoRCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pGO0FBQ0EsZ0NBQWdDLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLGdCQUFnQixHQUFHLENBQUMsRUFBRTtBQUNsRixvQ0FBb0MsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLDREQUE0RCxHQUFHLGdCQUFnQixDQUFDLENBQUM7QUFDckksb0NBQW9DLElBQUksZ0JBQWdCLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUN6RTtBQUNBLG9DQUFvQyxJQUFJLFVBQVUsS0FBSyxnQkFBZ0IsSUFBSSxDQUFDLEVBQUU7QUFDOUUsd0NBQXdDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckQsd0NBQXdDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckQscUNBQXFDLE1BQU0sSUFBSSxVQUFVLEtBQUssZ0JBQWdCLElBQUksQ0FBQyxFQUFFO0FBQ3JGLHdDQUF3QyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JELHdDQUF3QyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JELHFDQUFxQyxNQUFNO0FBQzNDLHdDQUF3QyxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxrQ0FBa0MsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzNILHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLFNBQVMsc0JBQXNCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBRTtBQUMzSixnQ0FBZ0MsSUFBSSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQztBQUNyRTtBQUNBLGdDQUFnQyxJQUFJLG9CQUFvQixFQUFFO0FBQzFELG9DQUFvQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ2pEO0FBQ0Esb0NBQW9DLFVBQVUsR0FBRyxTQUFTLGtCQUFrQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7QUFDM0Ysd0NBQXdDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RJLHFDQUFxQyxDQUFDO0FBQ3RDO0FBQ0Esb0NBQW9DLFVBQVUsR0FBRyxTQUFTLGtCQUFrQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQ2xHLHdDQUF3QyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDM0Usd0NBQXdDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDOUUsd0NBQXdDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0Usd0NBQXdDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN4RSxxQ0FBcUMsQ0FBQztBQUN0QyxpQ0FBaUMsTUFBTTtBQUN2QyxvQ0FBb0MsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNqRDtBQUNBLG9DQUFvQyxVQUFVLEdBQUcsU0FBUyxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtBQUN2Rix3Q0FBd0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pGLHFDQUFxQyxDQUFDO0FBQ3RDO0FBQ0Esb0NBQW9DLFVBQVUsR0FBRyxTQUFTLGNBQWMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUM5Rix3Q0FBd0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3pFLHdDQUF3QyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzdFLHFDQUFxQyxDQUFDO0FBQ3RDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLFlBQVksR0FBRyxhQUFhLEdBQUcsU0FBUyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDN0YsZ0NBQWdDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDekQsZ0NBQWdDLElBQUksWUFBWSxHQUFHLFFBQVEsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7QUFDakYsZ0NBQWdDLFFBQVEsR0FBRyxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN4RSxnQ0FBZ0MsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUNsRixnQ0FBZ0MsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7QUFDckQsZ0NBQWdDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDNUQsZ0NBQWdDLElBQUksaUJBQWlCLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztBQUMzRSxnQ0FBZ0MsSUFBSSxXQUFXLEdBQUcsSUFBSSxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUNwRixnQ0FBZ0MsSUFBSSxXQUFXLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxRSxnQ0FBZ0MsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELGdDQUFnQyxJQUFJLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hFLGdDQUFnQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNyRSxnQ0FBZ0MsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsZ0NBQWdDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLFFBQVEsRUFBRTtBQUM3RixvQ0FBb0MsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1RTtBQUNBLG9DQUFvQyxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUU7QUFDekQsd0NBQXdDLFNBQVMsR0FBRyxXQUFXLENBQUM7QUFDaEUscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLElBQUksU0FBUyxHQUFHLGlCQUFpQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLFNBQVMsRUFBRTtBQUNySCx3Q0FBd0MsU0FBUyxHQUFHLGlCQUFpQixDQUFDO0FBQ3RFLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLFNBQVMsR0FBRyxpQkFBaUIsRUFBRTtBQUN2RSx3Q0FBd0MsV0FBVyxHQUFHLFNBQVMsQ0FBQztBQUNoRSxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsSUFBSSxZQUFZLEdBQUcsYUFBYSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDaEosb0NBQW9DLElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUM7QUFDeEU7QUFDQSxvQ0FBb0MsSUFBSSxTQUFTLEtBQUssQ0FBQyxFQUFFO0FBQ3pELHdDQUF3QyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hFLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLFlBQVksQ0FBQyxrQkFBa0IsR0FBRyxxQkFBcUIsRUFBRTtBQUNqRyx3Q0FBd0MscUJBQXFCLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDO0FBQ2hHLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxXQUFXLElBQUksU0FBUyxDQUFDO0FBQzdELG9DQUFvQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN6RSxvQ0FBb0MsV0FBVyxHQUFHLFNBQVMsQ0FBQztBQUM1RCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxXQUFXLEtBQUssQ0FBQyxFQUFFO0FBQ3ZELG9DQUFvQyxJQUFJLFdBQVcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEg7QUFDQSxvQ0FBb0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksUUFBUSxFQUFFO0FBQ3BHLHdDQUF3QyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEYscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLElBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDO0FBQzVELGlDQUFpQyxNQUFNLElBQUksYUFBYSxFQUFFO0FBQzFELG9DQUFvQyxJQUFJLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDMUY7QUFDQSxvQ0FBb0MsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLGdCQUFnQixHQUFHLFdBQVcsRUFBRTtBQUM3Rix3Q0FBd0MsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsQ0FBQztBQUM1RyxxQ0FBcUMsTUFBTTtBQUMzQyx3Q0FBd0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsQ0FBQztBQUNuRyx3Q0FBd0MsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUM1RixxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMxRyxvQ0FBb0MsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLE1BQU0sR0FBRyxRQUFRLEVBQUUsV0FBVyxHQUFHLGdCQUFnQixDQUFDLENBQUM7QUFDdEgsaUNBQWlDLE1BQU07QUFDdkMsb0NBQW9DLElBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDckYsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLE9BQU87QUFDdkMsb0NBQW9DLGFBQWEsRUFBRSxhQUFhO0FBQ2hFLG9DQUFvQyxxQkFBcUIsRUFBRSxxQkFBcUI7QUFDaEYsaUNBQWlDLENBQUM7QUFDbEMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLFNBQVMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUU7QUFDMUYsZ0NBQWdDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3hGLGdDQUFnQyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztBQUNqRCxnQ0FBZ0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU07QUFDeEQsb0NBQW9DLEdBQUcsR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ3pELGdDQUFnQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDOUQsZ0NBQWdDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsZ0NBQWdDLElBQUksVUFBVSxDQUFDO0FBQy9DLGdDQUFnQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDakQsZ0NBQWdDLElBQUksQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsZ0NBQWdDLFFBQVEsT0FBTztBQUMvQyxvQ0FBb0MsS0FBSyxVQUFVO0FBQ25ELHdDQUF3QyxVQUFVLEdBQUcsd0JBQXdCLENBQUM7QUFDOUUsd0NBQXdDLE1BQU07QUFDOUM7QUFDQSxvQ0FBb0MsS0FBSyxVQUFVO0FBQ25ELHdDQUF3QyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekU7QUFDQSx3Q0FBd0MsSUFBSSxTQUFTLEtBQUssYUFBYSxFQUFFO0FBQ3pFLDRDQUE0QyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzFELDRDQUE0QyxNQUFNO0FBQ2xELHlDQUF5QztBQUN6QztBQUNBLHdDQUF3QyxJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztBQUNsRTtBQUNBLHdDQUF3QyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN4RSw0Q0FBNEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pFO0FBQ0EsNENBQTRDLElBQUksS0FBSyxJQUFJLEtBQUssRUFBRTtBQUNoRSxnREFBZ0QsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUM5RCxnREFBZ0QsTUFBTTtBQUN0RCw2Q0FBNkM7QUFDN0M7QUFDQSw0Q0FBNEMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pFLHlDQUF5QztBQUN6QztBQUNBLHdDQUF3QyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3BELDRDQUE0QyxNQUFNO0FBQ2xELHlDQUF5QztBQUN6QztBQUNBLHdDQUF3QyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDN0Qsd0NBQXdDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN4RDtBQUNBLHdDQUF3QyxPQUFPLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFO0FBQy9ELDRDQUE0QyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUUsNENBQTRDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDO0FBQ3pFO0FBQ0EsNENBQTRDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQy9FLGdEQUFnRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUNoRyw2Q0FBNkM7QUFDN0M7QUFDQSw0Q0FBNEMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUUseUNBQXlDO0FBQ3pDO0FBQ0Esd0NBQXdDLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDeEQ7QUFDQSx3Q0FBd0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDeEUsNENBQTRDLElBQUksQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hFO0FBQ0EsNENBQTRDLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRTtBQUN6RCxnREFBZ0QsVUFBVSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdGLGdEQUFnRCxTQUFTO0FBQ3pELDZDQUE2QztBQUM3QztBQUNBLDRDQUE0QyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRix5Q0FBeUM7QUFDekM7QUFDQSx3Q0FBd0MsTUFBTTtBQUM5QztBQUNBLG9DQUFvQyxLQUFLLFVBQVU7QUFDbkQsd0NBQXdDLE1BQU07QUFDOUM7QUFDQSxvQ0FBb0M7QUFDcEMsd0NBQXdDLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSx5Q0FBeUMsR0FBRyxPQUFPLENBQUMsQ0FBQztBQUM3Ryx3Q0FBd0MsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN0RDtBQUNBLHdDQUF3QyxJQUFJLFVBQVUsQ0FBQyxlQUFlLEVBQUU7QUFDeEUsNENBQTRDLFVBQVUsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDO0FBQ3BGLHlDQUF5QztBQUN6QztBQUNBLHdDQUF3QyxNQUFNO0FBQzlDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxVQUFVLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUNuRSxnQ0FBZ0MsT0FBTyxLQUFLLENBQUM7QUFDN0MsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLFNBQVMsYUFBYSxDQUFDLFNBQVMsRUFBRTtBQUM5RCxnQ0FBZ0MsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDN0YsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ2pELGdDQUFnQyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNyRCxnQ0FBZ0MsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU07QUFDN0Qsb0NBQW9DLEdBQUcsR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ3pELGdDQUFnQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDOUQsZ0NBQWdDLElBQUksc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO0FBQy9EO0FBQ0EsZ0NBQWdDLElBQUksTUFBTSxLQUFLLENBQUMsSUFBSSxNQUFNLEdBQUcsc0JBQXNCLEVBQUU7QUFDckYsb0NBQW9DLE9BQU8sS0FBSyxDQUFDO0FBQ2pELGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDbEUsZ0NBQWdDLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNwRSxnQ0FBZ0MsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ2pELGdDQUFnQyxJQUFJLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztBQUM1RCxnQ0FBZ0MsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzFDO0FBQ0EsZ0NBQWdDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsa0JBQWtCLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3pHLG9DQUFvQyxJQUFJLENBQUMsR0FBRztBQUM1Qyx3Q0FBd0MsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDbEUsd0NBQXdDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2xFLHdDQUF3QyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNsRSx3Q0FBd0MsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDOUQsd0NBQXdDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2hFLHdDQUF3QyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNoRSxxQ0FBcUMsQ0FBQztBQUN0QztBQUNBLG9DQUFvQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO0FBQ2xLLHdDQUF3QyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDOUUsb0NBQW9DLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RDtBQUNBLG9DQUFvQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQzVELHdDQUF3QyxTQUFTO0FBQ2pELHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLEdBQUcsR0FBRyxLQUFLLEdBQUcsWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDbkY7QUFDQSxvQ0FBb0MsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7QUFDbkUsd0NBQXdDLFNBQVM7QUFDakQscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ25ELG9DQUFvQyxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ2hFO0FBQ0Esb0NBQW9DLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtBQUN6RCx3Q0FBd0MsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3JEO0FBQ0Esd0NBQXdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUM1Riw0Q0FBNEMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDekYseUNBQXlDO0FBQ3pDO0FBQ0Esd0NBQXdDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEUscUNBQXFDLE1BQU07QUFDM0Msd0NBQXdDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNySCxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLE9BQU8sS0FBSyxDQUFDO0FBQzdDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMva0I7QUFDQSw0QkFBNEIsU0FBUyxpQkFBaUIsQ0FB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RUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8s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RUFBRTtBQUN2Qix3QkFBd0IsRUFBRSxFQUFFLFNBQVM7QUFDckMsd0JBQXdCLEdBQUcsRUFBRSxDQUFDO0FBQzlCLHdCQUF3QixhQUFhLEVBQUUsSUFBSTtBQUMzQyxxQkFBcUIsRUFBRTtBQUN2Qix3QkFBd0IsRUFBRSxFQUFFLFNBQVM7QUFDckMsd0JBQXdCLEdBQUcsRUFBRSxDQUFDO0FBQzlCLHdCQUF3QixhQUFhLEVBQUUsSUFBSTtBQUMzQyx3QkFBd0IsSUFBSSxFQUFFLElBQUk7QUFDbEMscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLEVBQUUsRUFBRSxZQUFZO0FBQ3hDLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztBQUM5Qix3QkFBd0IsVUFBVSxFQUFFLElBQUk7QUFDeEMscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLEVBQUUsRUFBRSxZQUFZO0FBQ3hDLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztBQUM5Qix3QkFBd0IsVUFBVSxFQUFFLElBQUk7QUFDeEMscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLEVBQUUsRUFBRSxXQUFXO0FBQ3ZDLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztBQUM5Qix3QkFBd0IsVUFBVSxFQUFFLElBQUk7QUFDeEMscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLEVBQUUsRUFBRSxXQUFXO0FBQ3ZDLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztBQUM5Qix3QkFBd0IsVUFBVSxFQUFFLElBQUk7QUFDeEMscUJBQXFCLEVBQUUsSUFBSSxFQUFFO0FBQzdCLHdCQUF3QixFQUFFLEVBQUUsV0FBVztBQUN2Qyx3QkFBd0IsR0FBRyxFQUFFLENBQUM7QUFDOUIsd0JBQXdCLFVBQVUsRUFBRSxJQUFJO0FBQ3hDLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixFQUFFLEVBQUUsV0FBVztBQUN2Qyx3QkFBd0IsR0FBRyxFQUFFLENBQUM7QUFDOUIsd0JBQXdCLFVBQVUsRUFBRSxJQUFJO0FBQ3hDLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixFQUFFLEVBQUUsV0FBVztBQUN2Qyx3QkFBd0Is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QUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDeDFDLG9CQUFvQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdEM7QUFDQSxvQkFBb0IsU0FBUyxVQUFVLENBQUMsT0FBTyxFQUFFO0FBQ2pELHdCQUF3QixJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7QUFDN0MsNEJBQTRCLE1BQU0sR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xFLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDNUQsd0JBQXdCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ2hELHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixVQUFVLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVFLG9CQUFvQixPQUFPLFVBQVUsQ0FBQztBQUN0QyxpQkFBaUIsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsZ0JBQWdCLE9BQU8sQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ2hEO0FBQ0EsZ0JBQWdCLElBQUksY0FBYyxHQUFHLFNBQVMscUJBQXFCLEdBQUc7QUFDdEUsb0JBQW9CLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFF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RyxPQUFPLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3ZHLGdCQUFnQixJQUFJLGVBQWUsR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDbnhFLGdCQUFnQixPQUFPLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztBQUMxRCxnQkFBZ0IsSUFBSSxhQUFhLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxhQUFh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LEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDbnVGLGdCQUFnQixPQUFPLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztBQUN4RCxnQkFBZ0IsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUscUJBQXFCLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdHVGLGdCQUFnQixJQUFJLGdCQUFnQixHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6MUUsZ0JBQWdCLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUM1RCxnQkFBZ0IsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDanlELGdCQUFnQixPQUFPLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7QUFDNUQsZ0JBQWdCLElBQUksZUFBZSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUM3MUUsZ0JBQWdCLE9BQU8sQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0FBQzFELGdCQUFnQixJQUFJLGlCQUFpQixHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbDlFLGdCQUFnQixPQUFPLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7QUFDOUQsZ0JBQWdCLElBQUksb0JBQW9CLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxdUQsZ0JBQWdCLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztBQUNwRTtBQUNBLGdCQUFnQixTQUFTLFdBQVcsQ0FBQyxZQUFZLEVBQUU7QUFDbkQsb0JBQW9CLFFBQVEsWUFB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LENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2hELG9CQUFvQixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2hELG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFB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LENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9D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LENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsbUJBQW1CLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEQsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFD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R0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDeEMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuRCxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2xELG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckMsb0JBQW9CLENBQUMsQ0FBQyxTQUFT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TSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbEQsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsd0JBQXdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekQsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2xELG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2hELG9CQUFvQixDQUFDLENBQUMsdUJBQXVCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDeEQsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNyRCxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN4QyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25ELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN0RCxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN4QyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN4QyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN4QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuRCxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BELG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2hELG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN4RCxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbEQsb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLDZCQUE2QixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlELG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLGdDQUFnQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pFLG9CQUFvQixDQUFDLENBQUMsbUJBQW1CLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEQsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDeEMsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BELG9CQUFvQixDQUFDLENBQUMseUJBQXlCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDeEMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FB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NUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxN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O0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdB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L0Msb0JBQW9CLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNyQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFH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TSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbEQsb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdkMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxvQkFB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QUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN0RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNyQyxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN0QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RELG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMs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QW9CLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN0RCxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2xELG9CQUFvQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbEQsb0JBQW9CLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzRCxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2xELG9CQUFvQixDQUFDLENBQUMsc0JBQXNCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RELG9CQUFvQixDQUFDLENBQUMsMEJBQTBCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Qsb0JBQW9CLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3RCxvQkFBb0IsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVELG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsdUJBQXVCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDeEQsb0JBQW9CLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNyRCxvQkFBb0IsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFELG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsbUJBQW1CLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEQsb0JBQW9CLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNyRCxvQkFBb0IsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pELG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsc0JBQXNCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hELG9CQUFvQixDQUFDLENBQUMsb0JBQW9CLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckQsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDeEMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BELG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMscUJBQXFCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEQsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2xELG9CQUFvQixDQUFDLENBQUMsMEJBQTBCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Qsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN4RCxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNyQyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN4QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RELG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6RCxvQkFBb0IsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BELG9CQUFvQixDQUFDLENBQUMsMkJBQTJCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUQsb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2xELG9CQUFvQixDQUFDLENBQUMsMEJBQTBCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Qsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25ELG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbEQsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25ELG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDeEMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNwRCxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN4QyxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RELG9CQUFvQixDQUFDLENBQUMsb0JBQW9CLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckQsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdkMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2xELG9CQUFvQixDQUFDLENBQUMsb0JBQW9CLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckQsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25ELG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsc0JBQXNCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN0RCxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsbUJBQW1CLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEQsb0JBQW9CLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNwRCxvQkFBb0IsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JELG9CQUFvQixDQUFDLENBQUMsb0JBQW9CLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckQsb0JBQW9CLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNyRCxvQkFBb0IsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JELG9CQUFvQixDQUFDLENBQUMscUJBQXFCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEQsb0JBQW9CLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN0RCxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuRCxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNwRCxvQkFBb0IsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BELG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BELG9CQUFvQixDQUFDLENBQUMsb0JBQW9CLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckQsb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25ELG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2hELG9CQUFvQixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2hELG9CQUFvQixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2hELG9CQUFvQixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2hELG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2xELG9CQUFvQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbEQsb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25ELG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbEQsb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2xELG9CQUFvQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbEQsb0JBQW9CLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuRCxvQkFBb0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25ELG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN4RCxvQkFBb0IsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JELG9CQUFvQixDQUFDLENBQUMsbUJBQW1CLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEQsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RELG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuRCxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RELG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNwRCxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuRCxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BELG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxpQkFBaUIsQ0FBQyxDQUFDO0FBQ25CLGdCQUFnQixJQUFJLHdCQUF3QixHQUFHLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ2xGLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLGlCQUFpQixDQUFDLENBQUM7QUFDbkIsZ0JBQWdCLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUM1RCxnQkFBZ0IsT0FBTyxDQUFDLHdCQUF3QixHQUFHLHdCQUF3QixDQUFDO0FBQzVFO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0EsbUJBQW1CLFNBQVMsTUFBTSxFQUFFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRTtBQUc5RTtBQUNBO0FBQ0EsZ0JBQWdCLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRTtBQUM3RCxvQkFBb0IsS0FBSyxFQUFFLElBQUk7QUFDL0IsaUJBQWlCLENBQUMsQ0FBQztBQUNuQixnQkFBZ0IsT0FBTyxDQUFDLGlDQUFpQyxHQUFHLE9BQU8sQ0FBQyxvQ0FBb0MsR0FBRyxPQUFPLENBQUMsMkJBQTJCLEdBQUcsT0FBTyxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQzdQO0FBQ0EsZ0JBQWdCLElBQUksS0FBSyxHQUFHLCtCQUErQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9EO0FBQ0EsZ0JBQWdCLElBQUksYUFBYSxHQUFHLElBQUksS0FBSyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ2xGLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ25ELG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztBQUM3RCxvQkFBb0IsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLEdBQUcsdUJBQXVCLENBQUM7QUFDMUUsb0JBQW9CLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLG1CQUFtQixDQUFDO0FBQ2xFLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ2xELG9CQUFvQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztBQUM1RCxvQkFBb0IsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsdUJBQXVCLENBQUM7QUFDekUsb0JBQW9CLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLG1CQUFtQixDQUFDO0FBQ2pFLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ25ELG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztBQUM3RCxvQkFBb0IsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLEdBQUcsdUJBQXVCLENBQUM7QUFDMUUsb0JBQW9CLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLG1CQUFtQixDQUFDO0FBQ2xFLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLHVCQUF1QixDQUFDO0FBQ3BFLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsbUJBQW1CLENBQUM7QUFDNUQsb0JBQW9CLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLHVCQUF1QixDQUFDO0FBQ3RFLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7QUFDekQsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLG1CQUFtQixDQUFDO0FBQzlELG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsb0JBQW9CLENBQUMsR0FBRyxxQkFBcUIsQ0FBQztBQUNwRSxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsaUJBQWlCLENBQUM7QUFDNUQsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUMxRCxvQkFBb0IsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEdBQUcscUJBQXFCLENBQUM7QUFDdkUsb0JBQW9CLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO0FBQy9ELG9CQUFvQixDQUFDLENBQUMsMkJBQTJCLENBQUMsR0FBRyxxQkFBcUIsQ0FBQztBQUMzRSxvQkFBb0IsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQzlELG9CQUFvQixDQUFDLENBQUMsdUJBQXVCLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztBQUNuRSxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQ3BELG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztBQUMzRCxvQkFBb0IsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsdUJBQXVCLENBQUM7QUFDeEUsb0JBQW9CLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLHVCQUF1QixDQUFDO0FBQ3pFLG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztBQUNoRSxvQkFBb0IsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsbUJBQW1CLENBQUM7QUFDakUsb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDckQsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN0RCxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLGFBQWEsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsWUFBWSxDQUFDO0FBQzNELG9CQUFvQixDQUFDLENBQUMsMEJBQTBCLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztBQUN2RSxvQkFBb0IsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQy9ELG9CQUFvQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxhQUFhLENBQUM7QUFDekQsb0JBQW9CLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLFlBQVksQ0FBQztBQUM3RCxvQkFBb0IsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLEdBQUcsa0JBQWtCLENBQUM7QUFDekUsb0JBQW9CLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxHQUFHLGtCQUFrQixDQUFDO0FBQzNFLG9CQUFvQixDQUFDLENBQUMsd0JBQXdCLENBQUMsR0FBRyxZQUFZLENBQUM7QUFDL0Qsb0JBQW9CLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRSxvQkFBb0IsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQ25FLG9CQUFvQixDQUFDLENBQUMsbUJBQW1CLENBQUMsR0FBRyxhQUFhLENBQUM7QUFDM0Qsb0JBQW9CLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLFlBQVksQ0FBQztBQUMvRCxvQkFBb0IsQ0FBQyxDQUFDLDhCQUE4QixDQUFDLEdBQUcsa0JBQWtCLENBQUM7QUFDM0Usb0JBQW9CLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNuRSxpQkFBaUIsQ0FBQyxDQUFDO0FBQ25CLGdCQUFnQixPQUFPLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztBQUN0RCxnQkFBZ0IsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxVQUFVLENBQUMsRUFBRTtBQUNyRixvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDO0FBQ3pELG9CQUFvQixDQUFDLENBQUMsb0JBQW9CLENBQUMsR0FBRyx1QkFBdUIsQ0FBQztBQUN0RSxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsbUJBQW1CLENBQUM7QUFDOUQsb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDckQsb0JBQW9CLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLGdCQUFnQixDQUFDO0FBQy9ELG9CQUFvQixDQUFDLENBQUMsMEJBQTBCLENBQUMsR0FBRyx1QkFBdUIsQ0FBQztBQUM1RSxvQkFBb0IsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsbUJBQW1CLENBQUM7QUFDcEUsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxlQUFlLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ2pFLG9CQUFvQixDQUFDLENBQUMsd0JBQXdCLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUM3RSxvQkFBb0IsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsc0JBQXNCLENBQUM7QUFDckUsb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUM3RCxvQkFBb0IsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEdBQUcscUJBQXFCLENBQUM7QUFDMUUsb0JBQW9CLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO0FBQ2xFLG9CQUFvQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztBQUM1RCxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsZ0JBQWdCLENBQUM7QUFDM0Qsb0JBQW9CLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLHNCQUFzQixDQUFDO0FBQ3ZFLG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztBQUMvRCxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsZ0JBQWdCLENBQUM7QUFDM0Qsb0JBQW9CLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLHNCQUFzQixDQUFDO0FBQ3ZFLG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztBQUMvRCxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLFlBQVksQ0FBQztBQUNuRCxvQkFBb0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsaUJBQWlCLENBQUM7QUFDN0Qsb0JBQW9CLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLHVCQUF1QixDQUFDO0FBQ3pFLG9CQUFvQixDQUFDLENBQUMsbUJBQW1CLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztBQUNqRSxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLFlBQVksQ0FBQztBQUNuRCxvQkFBb0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsaUJBQWlCLENBQUM7QUFDN0Qsb0JBQW9CLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLHVCQUF1QixDQUFDO0FBQ3pFLG9CQUFvQixDQUFDLENBQUMsbUJBQW1CLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztBQUNqRSxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUN4RCxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNwRCxpQkFBaUIsQ0FBQyxDQUFDO0FBQ25CLGdCQUFnQixPQUFPLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7QUFDNUQsZ0JBQWdCLElBQUksYUFBYSxHQUFHLElBQUksS0FBSyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ2xGLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMscUJBQXFCLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDcEQsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDeEMsb0JBQW9CLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckMsb0JBQW9CLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckMsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckMsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ25ELG9CQUFvQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkMsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDeEMsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsbUJBQW1CLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEQsb0JBQW9CLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNuRCxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4QyxvQkFBb0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hELG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDeEMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDeEMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDeEMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDeEMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDeEMsb0JBQW9CLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4QyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hELG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4QyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RELG9CQUFvQixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsb0JBQW9CLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4QyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4QyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN0QyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN0QyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN0QyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4QyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4QyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNyQyxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN0QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4QyxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNyQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ25CLGdCQUFnQixPQUFPLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztBQUN0RCxnQkFBZ0IsSUFBSSxlQUFlLEdBQUcsSUFBSSxLQUFLLENBQUMscUJBQXFCLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDcEYsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkMsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0MsaUJBQWlCLENBQUMsQ0FBQztBQUNuQixnQkFBZ0IsT0FBTyxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7QUFDMUQsZ0JBQWdCLElBQUksMkJBQTJCLEdBQUcsSUFBSSxLQUFLLENBQUMscUJBQXFCLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDaEcsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUIsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUIsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUIsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUIsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUIsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUIsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUIsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUIsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMs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QUFHLEVBQUUsQ0FBQztBQUMvQixvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQixvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQixvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQixvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQixvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQixvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ25CLGdCQUFnQixPQUFPLENBQUMsaUNBQWlDLEdBQUcsaUNBQWlDLENBQUM7QUFDOUY7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQSxtQkFBbUIsU0FBUyxNQUFNLEVBQUUsT0FBTyxFQUFFLCtCQUErQixFQUFFO0FBQzlFO0FBQ0EsZ0JBQWdCLElBQUkscUJBQXFCLEdBQUcsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUM7QUFDckcsZ0JBQWdCLElBQUksb0JBQW9CLEdBQUcscUJBQXFCLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDOUUsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FB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QXFCLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDL0Usb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMs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QUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzdELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDN0Qsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzdELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDN0Qsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzdELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDN0Qsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzdELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDN0Qsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDN0Qsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzdELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDN0Qsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzdELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDN0Qsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzdELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDN0Qsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzdELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDN0Qsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzdELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDN0Qsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDRDQUE0QyxDQUFDO0FBQy9FLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsc0NBQXNDLENBQUM7QUFDekUsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxpQkFBaUIsQ0FBQyxDQUFDO0FBQ25CLGdCQUFnQixTQUFTLFlBQVksQ0FBQyxLQUFLLEVBQUU7QUFDN0Msb0JBQW9CLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDbkQsb0JBQW9CLElBQUksV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDakYsd0JBQXdCLE9BQU8sS0FBSyxDQUFDO0FBQ3JDLHFCQUFxQjtBQUNyQixvQkFBb0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9CLG9CQUFvQixLQUFLLElBQUksRUFBRSxHQUFHLFdBQVcsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNsRSx3QkFBd0IsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2QyxxQkFBcUI7QUFDckIsb0JBQW9CLE9BQU8sQ0FBQyxDQUFDO0FBQzdCLGlCQUFpQjtBQUNqQixnQkFBZ0IsT0FBTyxDQUFDLHVCQUF1QixHQUFHLHVCQUF1QixDQUFDO0FBQzFFLGdCQUFnQixPQUFPLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztBQUNwRCxnQkFBZ0IsT0FBTyxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO0FBQ2hFLGdCQUFnQixPQUFPLENBQUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUM7QUFDdEUsZ0JBQWdCLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUNoRTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBLG1CQUFtQixTQUFTLE1BQU0sRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUU7QUFHOUU7QUFDQTtBQUNBLGdCQUFnQixNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUU7QUFDN0Qsb0JBQW9CLEtBQUssRUFBRSxJQUFJO0FBQy9CLGlCQUFpQixDQUFDLENBQUM7QUFDbkIsZ0JBQWdCLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNyRDtBQUNBLGdCQUFnQixJQUFJLEtBQUssR0FBRywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRDtBQUNBLGdCQUFnQixJQUFJLFdBQVcsR0FBRywrQkFBK0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2RTtBQUNBLGdCQUFnQixJQUFJLFVBQVUsR0FBRywrQkFBK0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RTtBQUNBLGdCQUFnQixJQUFJLFVBQVUsR0FBRywrQkFBK0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RTtBQUNBLGdCQUFnQixJQUFJLE9BQU8sR0FBRywrQkFBK0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuRTtBQUNBLGdCQUFnQixTQUFTLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLEVBQUUsT0FBTyxHQUFHLFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sR0FBRyxTQUFTLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEdBQUcsSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksR0FBRyxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksR0FBRyxLQUFLLE1BQU0sQ0FBQyxTQUFTLEdBQUcsUUFBUSxHQUFHLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUMvVztBQUNBLGdCQUFnQixTQUFTLDBCQUEwQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxJQUFJLE9BQU8sSUFBSSxLQUFLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUNqTTtBQUNBLGdCQUFnQixTQUFTLHNCQUFzQixDQUFDLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTSxJQUFJLGNBQWMsQ0FBQywyREFBMkQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUFFO0FBQ3RMO0FBQ0EsZ0JBQWdCLFNBQVMsZUFBZSxDQUFDLENBQUMsRUFBRSxFQUFFLGVBQWUsR0FBRyxNQUFNLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLEdBQUcsU0FBUyxlQUFlLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM3TjtBQUNBLGdCQUFnQixTQUFTLFNBQVMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLEVBQUUsSUFBSSxPQUFPLFVBQVUsS0FBSyxVQUFVLElBQUksVUFBVSxLQUFLLElBQUksRUFBRSxFQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsb0RBQW9ELENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLEVBQUU7QUFDalo7QUFDQSxnQkFBZ0IsU0FBUyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLGVBQWUsR0FBRyxNQUFNLENBQUMsY0FBYyxJQUFJLFNBQVMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzFMO0FBQ0EsZ0JBQWdCLFNBQVMsZUFBZSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxZQUFZLFdBQVcsQ0FBQyxFQUFFLEVBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtBQUN6SztBQUNBLGdCQUFnQixTQUFTLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksT0FBTyxJQUFJLFVBQVUsRUFBRSxVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQzdVO0FBQ0EsZ0JBQWdCLFNBQVMsWUFBWSxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxVQUFVLEVBQUUsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBVyxFQUFFLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sV0FBVyxDQUFDLEVBQUU7QUFDdk87QUFDQSxnQkFBZ0IsSUFBSSxtQkFBbUIsR0FBRyxTQUFTLDBCQUEwQixHQUFHO0FBQ2hGLG9CQUFvQixTQUFTLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQ25ELHdCQUF3QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0SCxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsU0FBUyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtBQUNyRCx3QkFBd0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEUscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO0FBQ3pELHdCQUF3QixJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDN0gsd0JBQXdCLElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQ3JFLHdCQUF3QixJQUFJLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0Esd0JBQXdCLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMxQyw0QkFBNEIsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLDRCQUE0QixJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BGLDRCQUE0QixDQUFDLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDcEQsNEJBQTRCLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDeEM7QUFDQSw0QkFBNEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNuRSxnQ0FBZ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHO0FBQzVDLG9DQUFvQyxHQUFHLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7QUFDM0QsaUNBQWlDLENBQUM7QUFDbEMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkM7QUFDQSw0QkFBNEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNuRSxnQ0FBZ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ25FLGdDQUFnQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkUsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDbkUsZ0NBQWdDLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEU7QUFDQSxnQ0FBZ0MsSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFO0FBQ3BELG9DQUFvQyxTQUFTO0FBQzdDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNuRDtBQUNBLGdDQUFnQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZHLG9DQUFvQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO0FBQ3JGLG9DQUFvQyxRQUFRLElBQUksQ0FBQyxDQUFDO0FBQ2xELGlDQUFpQztBQUNqQyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsT0FBTyxNQUFNLENBQUM7QUFDMUMseUJBQXlCLE1BQU0sSUFBSSxNQUFNLEtBQUssRUFBRSxFQUFFO0FBQ2xELDRCQUE0QixPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUQsNEJBQTRCLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM1RSw0QkFBNEIsQ0FBQyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3BELDRCQUE0QixNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3hDO0FBQ0EsNEJBQTRCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3pELGdDQUFnQyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQzVDLG9DQUFvQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7QUFDM0Qsb0NBQW9DLEdBQUcsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0Qsb0NBQW9DLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNwRixpQ0FBaUMsQ0FBQyxDQUFDO0FBQ25DLGdDQUFnQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3hDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixPQUFPLE1BQU0sQ0FBQztBQUMxQyx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDekYscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLG1CQUFtQixFQUFFO0FBQzdFLHdCQUF3QixJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDNUMsd0JBQXdCLElBQUksTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEdBQUcsS0FBSyxDQUFDLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixDQUFDLENBQUM7QUFDOUksd0JBQXdCLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqRCx3QkFBd0IsT0FBTztBQUMvQiw0QkFBNEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsT0FBTztBQUMzRCw0QkFBNEIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTztBQUM5SSw0QkFBNEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxlQUFlLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyxPQUFPO0FBQ3RGLDRCQUE0QixZQUFZLEVBQUUsR0FBRyxDQUFDLFNBQVM7QUFDdkQsNEJBQTRCLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTtBQUNsRCw0QkFBNEIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO0FBQ2hELHlCQUF5QixDQUFDO0FBQzFCLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFO0FBQzlFLHdCQUF3QixJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUM7QUFDakQ7QUFDQSx3QkFBd0IsSUFBSSxvQkFBb0IsRUFBRTtBQUNsRCw0QkFBNEIsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN6QztBQUNBLDRCQUE0QixVQUFVLEdBQUcsU0FBUyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQ25GLGdDQUFnQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5SCw2QkFBNkIsQ0FBQztBQUM5Qix5QkFBeUIsTUFBTTtBQUMvQiw0QkFBNEIsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN6QztBQUNBLDRCQUE0QixVQUFVLEdBQUcsU0FBUyxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtBQUMvRSxnQ0FBZ0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pGLDZCQUE2QixDQUFDO0FBQzlCLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDeEMsd0JBQXdCLElBQUksV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUQ7QUFDQSx3QkFBd0IsS0FBSyxJQUFJLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLFFBQVEsRUFBRTtBQUMvRSw0QkFBNEIsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoRSw0QkFBNEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQy9FLDRCQUE0QixXQUFXLEdBQUcsU0FBUyxDQUFDO0FBQ3BELHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixPQUFPLE1BQU0sQ0FBQztBQUN0QyxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsU0FBUyxVQUFVLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRTtBQUN6RCx3QkFBd0IsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDekQsNEJBQTRCLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDcEMsd0JBQXdCLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakMsNEJBQTRCLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNsRDtBQUNBLHdCQUF3QixPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdEMsNEJBQTRCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuRDtBQUNBLDRCQUE0QixJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFO0FBQ3hELGdDQUFnQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQyw2QkFBNkIsTUFBTTtBQUNuQyxnQ0FBZ0MsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0Qyw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7QUFDOUUsNEJBQTRCLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5SCx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsT0FBTztBQUMvQiw0QkFBNEIsUUFBUSxFQUFFLElBQUk7QUFDMUMsNEJBQTRCLE9BQU8sRUFBRSxHQUFHO0FBQ3hDLHlCQUF5QixDQUFDO0FBQzFCLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtBQUMzRCx3QkFBd0IsU0FBUyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM5Qyw0QkFBNEIsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN0QyxnQ0FBZ0MsR0FBRyxFQUFFLFFBQVE7QUFDN0MsZ0NBQWdDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDNUMsNkJBQTZCLENBQUMsQ0FBQztBQUMvQix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsU0FBUyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM5Qyw0QkFBNEIsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN0QyxnQ0FBZ0MsR0FBRyxFQUFFLFFBQVE7QUFDN0MsZ0NBQWdDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDNUMsNkJBQTZCLENBQUMsQ0FBQztBQUMvQix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsU0FBUyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDaEUsNEJBQTRCLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDdEMsZ0NBQWdDLEdBQUcsRUFBRSxrQkFBa0I7QUFDdkQsZ0NBQWdDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwRCw2QkFBNkIsQ0FBQyxDQUFDO0FBQy9CLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEMsd0JBQXdCLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUN6Rix3QkFBd0IsSUFBSSxLQUFLLENBQUM7QUFDbEMsd0JBQXdCLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakMsNEJBQTRCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDaEM7QUFDQSx3QkFBd0IsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLEVBQUU7QUFDbEQsNEJBQTRCLEdBQUc7QUFDL0IsZ0NBQWdDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkUsZ0NBQWdDLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEYsZ0NBQWdDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkMsZ0NBQWdDLElBQUksSUFBSSxFQUFFLElBQUksQ0FBQztBQUMvQztBQUNBLGdDQUFnQyxJQUFJLEtBQUssR0FBRyxJQUFJLEVBQUU7QUFDbEQsb0NBQW9DLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3JGLG9DQUFvQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDekYsb0NBQW9DLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsaUNBQWlDLE1BQU07QUFDdkMsb0NBQW9DLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyRCxvQ0FBb0MsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLEtBQUssR0FBRyxJQUFJLEVBQUU7QUFDbEQsb0NBQW9DLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0Msb0NBQW9DLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0MsaUNBQWlDLE1BQU07QUFDdkMsb0NBQW9DLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsb0NBQW9DLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksTUFBTSxHQUFHLENBQUM7QUFDOUMsb0NBQW9DLE1BQU0sR0FBRyxDQUFDO0FBQzlDLG9DQUFvQyxPQUFPLEdBQUcsQ0FBQztBQUMvQyxvQ0FBb0MsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNoRDtBQUNBLGdDQUFnQyxJQUFJLEtBQUssR0FBRyxJQUFJLEVBQUU7QUFDbEQsb0NBQW9DLE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLFVBQVUsQ0FBQztBQUN2RyxvQ0FBb0MsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQyxpQ0FBaUMsTUFBTSxJQUFJLEtBQUssR0FBRyxJQUFJLEVBQUU7QUFDekQsb0NBQW9DLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksVUFBVSxDQUFDO0FBQzlGLG9DQUFvQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxVQUFVLENBQUM7QUFDbEcsb0NBQW9DLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0MsaUNBQWlDLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxFQUFFO0FBQ3pELG9DQUFvQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLFVBQVUsQ0FBQztBQUM5RixvQ0FBb0MsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksVUFBVSxDQUFDO0FBQ25HLG9DQUFvQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxVQUFVLENBQUM7QUFDbkcsb0NBQW9DLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLFVBQVUsQ0FBQztBQUNsRyxvQ0FBb0MsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN2RTtBQUNBLGdDQUFnQyxJQUFJLFFBQVEsRUFBRTtBQUM5QyxvQ0FBb0MsSUFBSSxDQUFDLElBQUksQ0FBQztBQUM5Qyx3Q0FBd0MsR0FBRyxFQUFFLE1BQU07QUFDbkQscUNBQXFDLENBQUMsQ0FBQztBQUN2QyxvQ0FBb0MsSUFBSSxDQUFDLElBQUksQ0FBQztBQUM5Qyx3Q0FBd0MsR0FBRyxFQUFFLFdBQVc7QUFDeEQsd0NBQXdDLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RGLHFDQUFxQyxDQUFDLENBQUM7QUFDdkMsb0NBQW9DLFdBQVcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3RFLG9DQUFvQyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzlDLHdDQUF3QyxHQUFHLEVBQUUsU0FBUztBQUN0RCxxQ0FBcUMsQ0FBQyxDQUFDO0FBQ3ZDLGlDQUFpQztBQUNqQyw2QkFBNkIsUUFBUSxLQUFLLEdBQUcsSUFBSSxFQUFFO0FBQ25ELHlCQUF5QixNQUFNO0FBQy9CLDRCQUE0QixJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztBQUN0RCw0QkFBNEIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RDO0FBQ0EsNEJBQTRCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbkUsZ0NBQWdDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRixnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2Qyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0UsNEJBQTRCLENBQUMsSUFBSSxDQUFDLEdBQUcsaUJBQWlCLENBQUM7QUFDdkQsNEJBQTRCLElBQUksY0FBYyxHQUFHLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkcsNEJBQTRCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUM1QztBQUNBLDRCQUE0QixPQUFPLE1BQU0sQ0FBQyxNQUFNLEdBQUcsY0FBYyxFQUFFO0FBQ25FLGdDQUFnQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsZ0NBQWdDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUMvQztBQUNBLGdDQUFnQyxJQUFJLEtBQUssR0FBRyxJQUFJLEVBQUU7QUFDbEQsb0NBQW9DLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4RCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsT0FBTyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDckQsb0NBQW9DLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDaEQsd0NBQXdDLEtBQUssRUFBRSxLQUFLO0FBQ3BELHFDQUFxQyxDQUFDLENBQUM7QUFDdkMsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqRSxnQ0FBZ0MsUUFBUSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUk7QUFDOUQsb0NBQW9DLEtBQUssSUFBSTtBQUM3Qyx3Q0FBd0MsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDdkYsd0NBQXdDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0Msd0NBQXdDLE1BQU07QUFDOUM7QUFDQSxvQ0FBb0MsS0FBSyxJQUFJO0FBQzdDLHdDQUF3QyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkQsd0NBQXdDLE1BQU07QUFDOUM7QUFDQSxvQ0FBb0MsS0FBSyxJQUFJO0FBQzdDLHdDQUF3QyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkQsd0NBQXdDLE1BQU07QUFDOUMsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hELDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqRSxnQ0FBZ0MsUUFBUSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUk7QUFDOUQsb0NBQW9DLEtBQUssSUFBSTtBQUM3Qyx3Q0FBd0MsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDdkYsd0NBQXdDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0Msd0NBQXdDLE1BQU07QUFDOUM7QUFDQSxvQ0FBb0MsS0FBSyxJQUFJO0FBQzdDLHdDQUF3QyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkQsd0NBQXdDLE1BQU07QUFDOUM7QUFDQSxvQ0FBb0MsS0FBSyxJQUFJO0FBQzdDLHdDQUF3QyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkQsd0NBQXdDLE1BQU07QUFDOUMsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hELDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDL0M7QUFDQSw0QkFBNEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuRSxnQ0FBZ0MsSUFBSSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkUsZ0NBQWdDLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRjtBQUNBLGdDQUFnQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQzFELG9DQUFvQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELGlDQUFpQyxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRTtBQUNsRixvQ0FBb0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pGLGlDQUFpQyxNQUFNO0FBQ3ZDLG9DQUFvQyxJQUFJLENBQUMsR0FBRztBQUM1Qyx3Q0FBd0MsS0FBSyxFQUFFLENBQUM7QUFDaEQsd0NBQXdDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDN0Ysd0NBQXdDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDN0YscUNBQXFDLENBQUM7QUFDdEMsb0NBQW9DLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQsb0NBQW9DLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRTtBQUNBLGdDQUFnQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM5RSxvQ0FBb0MsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRTtBQUM5RCx3Q0FBd0MsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNFLHFDQUFxQyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ3pFLHdDQUF3QyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6SCx3Q0FBd0MsQ0FBQyxFQUFFLENBQUM7QUFDNUMscUNBQXFDLE1BQU07QUFDM0Msd0NBQXdDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuSyxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLFVBQVUsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQzFELDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekIscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQzFFLHdCQUF3QixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDdkMsd0JBQXdCLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakMsNEJBQTRCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEMsd0JBQXdCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN0QztBQUNBLHdCQUF3QixTQUFTLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzlDLDRCQUE0QixJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3RDLGdDQUFnQyxHQUFHLEVBQUUsUUFBUTtBQUM3QyxnQ0FBZ0MsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1Qyw2QkFBNkIsQ0FBQyxDQUFDO0FBQy9CLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixTQUFTLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzlDLDRCQUE0QixJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3RDLGdDQUFnQyxHQUFHLEVBQUUsUUFBUTtBQUM3QyxnQ0FBZ0MsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1Qyw2QkFBNkIsQ0FBQyxDQUFDO0FBQy9CLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixTQUFTLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNyRSw0QkFBNEIsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN0QyxnQ0FBZ0MsR0FBRyxFQUFFLGVBQWU7QUFDcEQsZ0NBQWdDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVELDZCQUE2QixDQUFDLENBQUM7QUFDL0IseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLFNBQVMsS0FBSyxDQUFDLElBQUksRUFBRTtBQUM3Qyw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsNEJBQTRCLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDcEQsZ0NBQWdDLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztBQUN2RCxnQ0FBZ0MsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsZ0NBQWdDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUM7QUFDNUU7QUFDQSxnQ0FBZ0MsUUFBUSxDQUFDO0FBQ3pDLG9DQUFvQyxLQUFLLENBQUM7QUFDMUMsd0NBQXdDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNuRSx3Q0FBd0MsVUFBVSxHQUFHLElBQUksQ0FBQztBQUMxRCx3Q0FBd0MsTUFBTTtBQUM5QztBQUNBLG9DQUFvQyxLQUFLLENBQUM7QUFDMUMsd0NBQXdDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNuRSx3Q0FBd0MsVUFBVSxHQUFHLElBQUksQ0FBQztBQUMxRCx3Q0FBd0MsTUFBTTtBQUM5QztBQUNBLG9DQUFvQyxLQUFLLENBQUM7QUFDMUMsd0NBQXdDLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDekQsd0NBQXdDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckQsd0NBQXdDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDMUQsd0NBQXdDLE1BQU07QUFDOUM7QUFDQSxvQ0FBb0MsS0FBSyxDQUFDO0FBQzFDLHdDQUF3QyxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2pFLDRDQUE0QyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQy9ELDRDQUE0QyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQy9ELDRDQUE0QyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pELHlDQUF5QztBQUN6QztBQUNBLHdDQUF3QyxNQUFNO0FBQzlDO0FBQ0Esb0NBQW9DLEtBQUssQ0FBQztBQUMxQyx3Q0FBd0MsT0FBTyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNqRSw0Q0FBNEMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMvRCw0Q0FBNEMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6RDtBQUNBLDRDQUE0QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3BFLGdEQUFnRCxNQUFNO0FBQ3RELDZDQUE2QztBQUM3QztBQUNBLDRDQUE0QyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQy9ELDRDQUE0QyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pELHlDQUF5QztBQUN6QztBQUNBLHdDQUF3QyxNQUFNO0FBQzlDO0FBQ0Esb0NBQW9DLEtBQUssQ0FBQztBQUMxQyx3Q0FBd0MsT0FBTyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNqRSw0Q0FBNEMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMvRCw0Q0FBNEMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6RDtBQUNBLDRDQUE0QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3BFLGdEQUFnRCxNQUFNO0FBQ3RELDZDQUE2QztBQUM3QztBQUNBLDRDQUE0QyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQy9ELDRDQUE0QyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pELHlDQUF5QztBQUN6QztBQUNBLHdDQUF3QyxNQUFNO0FBQzlDO0FBQ0Esb0NBQW9DLEtBQUssQ0FBQztBQUMxQyx3Q0FBd0MsT0FBTyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNqRSw0Q0FBNEMsRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkUsNENBQTRDLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ25FLDRDQUE0QyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNwRSw0Q0FBNEMsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDcEUsNENBQTRDLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ25FLDRDQUE0QyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuRSw0Q0FBNEMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEYseUNBQXlDO0FBQ3pDO0FBQ0Esd0NBQXdDLE1BQU07QUFDOUM7QUFDQSxvQ0FBb0MsS0FBSyxFQUFFO0FBQzNDLHdDQUF3QyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3hELHdDQUF3QyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3hEO0FBQ0Esd0NBQXdDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtBQUMvRCw0Q0FBNEMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDNUY7QUFDQSw0Q0FBNEMsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtBQUMvRixnREFBZ0QsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDcEYsb0RBQW9ELEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNuRTtBQUNBLGdEQUFnRCxJQUFJLFFBQVEsQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDN0csb0RBQW9ELEtBQUssR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7QUFDcEcsaURBQWlEO0FBQ2pEO0FBQ0EsZ0RBQWdELElBQUksS0FBSyxFQUFFO0FBQzNELG9EQUFvRCxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ2hGLG9EQUFvRCxDQUFDLElBQUksUUFBUSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsUUFBUSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ2pILG9EQUFvRCxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLGlEQUFpRDtBQUNqRCw2Q0FBNkMsTUFBTTtBQUNuRCxnREFBZ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLG1DQUFtQyxDQUFDLENBQUM7QUFDckcsNkNBQTZDO0FBQzdDLHlDQUF5QyxNQUFNO0FBQy9DLDRDQUE0QyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3RGLHlDQUF5QztBQUN6QztBQUNBLHdDQUF3QyxJQUFJLFFBQVEsRUFBRTtBQUN0RCw0Q0FBNEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzVELHlDQUF5QztBQUN6QztBQUNBLHdDQUF3QyxNQUFNO0FBQzlDO0FBQ0Esb0NBQW9DLEtBQUssRUFBRTtBQUMzQyx3Q0FBd0MsT0FBTztBQUMvQztBQUNBLG9DQUFvQyxLQUFLLEVBQUU7QUFDM0Msd0NBQXdDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RDtBQUNBLHdDQUF3QyxRQUFRLENBQUM7QUFDakQsNENBQTRDLEtBQUssRUFBRTtBQUNuRCxnREFBZ0QsRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkUsZ0RBQWdELEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3hFLGdEQUFnRCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN2RSxnREFBZ0QsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkUsZ0RBQWdELGFBQWEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BGLGdEQUFnRCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN2RSxnREFBZ0QsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDeEUsZ0RBQWdELENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZFLGdEQUFnRCxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuRixnREFBZ0QsTUFBTTtBQUN0RDtBQUNBLDRDQUE0QyxLQUFLLEVBQUU7QUFDbkQsZ0RBQWdELEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZFLGdEQUFnRCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN2RSxnREFBZ0QsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDeEUsZ0RBQWdELEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3hFLGdEQUFnRCxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN2RSxnREFBZ0QsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkUsZ0RBQWdELGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BGLGdEQUFnRCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN2RSxnREFBZ0QsRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkUsZ0RBQWdELEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3hFLGdEQUFnRCxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN4RSxnREFBZ0QsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkUsZ0RBQWdELENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZFLGdEQUFnRCxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRixnREFBZ0QsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVELGdEQUFnRCxNQUFNO0FBQ3REO0FBQ0EsNENBQTRDLEtBQUssRUFBRTtBQUNuRCxnREFBZ0QsRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkUsZ0RBQWdELEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZFLGdEQUFnRCxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN4RSxnREFBZ0QsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDeEUsZ0RBQWdELENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZFLGdEQUFnRCxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNyRixnREFBZ0QsRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkUsZ0RBQWdELEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3hFLGdEQUFnRCxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN4RSxnREFBZ0QsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkUsZ0RBQWdELGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BGLGdEQUFnRCxNQUFNO0FBQ3REO0FBQ0EsNENBQTRDLEtBQUssRUFBRTtBQUNuRCxnREFBZ0QsSUFBSSxFQUFFLEdBQUcsQ0FBQztBQUMxRCxvREFBb0QsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzRCxnREFBZ0QsRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkUsZ0RBQWdELEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZFLGdEQUFnRCxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN4RSxnREFBZ0QsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDeEUsZ0RBQWdELENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFD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QUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVILHdCQUF3QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVILHdCQUF3QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVILHdCQUF3QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVILHdC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RUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3RFLHdDQUF3QyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVFLHdDQUF3QyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRSx3Q0FBd0MsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEUscUNBQXFDO0FBQ3JDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNoRSxnQ0FBZ0MsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELGdDQUFnQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNoRSxnQ0FBZ0MsSUFBSSxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakUsZ0NBQWdDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3RHLGdDQUFnQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN0RyxnQ0FBZ0MsUUFBUSxDQUFD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Q0FBQztBQUNwRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Msb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxNQUFNO0FBQzFDO0FBQ0EsZ0NBQWdDLEtBQUssQ0FBQztBQUN0QyxvQ0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNsRCxvQ0FBb0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEQsb0NBQW9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELG9DQUFvQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqRCxvQ0FBb0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pELG9DQUFvQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9DLG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsTUFBTTtBQUMxQztBQUNBLGdDQUFnQyxLQUFLLENBQUM7QUFDdEMsb0NBQW9DLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELG9DQUFvQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwRCxvQ0FBb0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQyxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLE1BQU07QUFDMUM7QUFDQSxnQ0FBZ0MsS0FBSyxDQUFDO0FBQ3RDLG9DQUFvQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwRCxvQ0FBb0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEQsb0NBQW9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xELG9DQUFvQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Msb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxNQUFNO0FBQzFDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNsRCw0QkFBNEIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeFosNEJBQTRCLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ2xELDRCQUE0QixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4Wiw0QkFBNEIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDbEQsNEJBQTRCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFaLDRCQUE0QixFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNuRCw0QkFBNEIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FB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LENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwRCxvQ0FBb0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckQsb0NBQW9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQyxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9DLG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsTUFBTTtBQUMxQztBQUNBLGdDQUFnQyxLQUFLLENBQUM7QUFDdEMsb0NBQW9DLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEQsb0NBQW9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELG9DQUFvQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwRCxvQ0FBb0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNyRCxvQ0FBb0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsb0NBQW9DLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Msb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxNQUFNO0FBQzFDO0FBQ0EsZ0NBQWdDLEtBQUssQ0FBQztBQUN0QyxvQ0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEQsb0NBQW9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELG9DQUFvQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JELG9DQUFvQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQyxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLE1BQU07QUFDMUM7QUFDQSxnQ0FBZ0MsS0FBSyxDQUFDO0FBQ3RDLG9DQUFvQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwRCxvQ0FBb0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEQsb0NBQW9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckQsb0NBQW9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVB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RUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuNkMsZ0JBQWdCLElBQUksV0FBVyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxF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RyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEQsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsRCx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xELHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEQsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMscUJBQXFCLENBQUMsQ0FBQztBQUN2QixvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMscUJBQXFCLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDeEYsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMsd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsRCx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN0Qyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN0Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xELHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEQsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsRCx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN0Qyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN0Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN0Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4QyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3ZCLG9CQUFvQixDQUFDLENBQUMsdUJBQXVCLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxVQUFVLENBQUMsRUFBRTtBQUMvRix3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN0Qyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xELHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEQsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsRCx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xELHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHFCQUFxQixDQUFDLENBQUM7QUFDdkIsb0JBQW9CLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzNGLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FB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Q0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMscUJBQXFCLENBQUMsQ0FBQztBQUN2QixvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ2hGLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3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WUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3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LE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN0Qyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xELHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEQsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsRCx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xELHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHFCQUFxQixDQUFDLENBQUM7QUFDdkIsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxVQUFVLENBQUMsRUFBRTtBQUNwRix3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN0Qyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN0Qyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xELHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEQsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsRCx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xELHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHFCQUFxQixDQUFDLENBQUM7QUFDdkIsb0JBQW9CLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFGLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEQsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsRCx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xELHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEQsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMscUJBQXFCLENBQUMsQ0FBQztBQUN2QixvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3RGLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdB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M0Msd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMscUJBQXFCLENBQUMsQ0FBQztBQUN2QixvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3RGLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxD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SUFBSSxLQUFLLEdBQUcsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0Q7QUFDQSxnQkFBZ0IsU0FBUyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQy9HO0FBQ0EsZ0JBQWdCLFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxJQUFJLE9BQU8sTUFBTSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUUsRUFBRSxPQUFPLEdBQUcsU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxHQUFHLFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sR0FBRyxJQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxHQUFHLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxHQUFHLEtBQUssTUFBTSxDQUFDLFNBQVMsR0FBRyxRQUFRLEdBQUcsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQy9XO0FBQ0EsZ0JBQWdCLFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMs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QUcsQ0FBQyxDQUFDO0FBQ3RDLHdCQUF3QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLHdCQUF3QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLHdCQUF3QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0MscUJBQXFCLENBQUM7QUFDdEI7QUFDQSxvQkFBb0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ3JFLHdCQUF3QixPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFH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Q0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hMLHFCQUFxQixDQUFDO0FBQ3RCO0FBQ0Esb0JBQW9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLHFCQUFxQixDQUFDLENBQUMsRUFBRTtBQUM5RSx3QkFBd0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELHdCQUF3QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzVJLHFCQUFxQixDQUFDO0FBQ3RCO0FBQ0Esb0JBQW9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLHFCQUFxQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDakYsd0JBQXdCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNKLHFCQUFxQixDQUFDO0FBQ3RCO0FBQ0Esb0JBQW9CLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxTQUFTLGtDQUFrQyxDQUFDLENBQUMsRUFBRTtBQUN4Ryx3QkFBd0IsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRSx3QkFBd0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLHdCQUF3QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsd0JBQXdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSx3QkFBd0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLHdCQUF3QixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hELHdCQUF3QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVGLHdCQUF3QixJQUFJLEVBQUUsR0FBRyxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNyRCx3QkFBd0IsSUFBSSxFQUFFLEdBQUcsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDckQsd0JBQXdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5RCxxQkFBcUIsQ0FBQztBQUN0QjtBQUNBLG9CQUFvQixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsa0JBQWtCLENBQUMsSUFBSSxFQUFFO0FBQzNFLHdCQUF3QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDO0FBQ0Esd0JBQXdCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUMvQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQy9DLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixPQUFPLENBQUMsQ0FBQztBQUNqQyxxQkFBcUIsQ0FBQztBQUN0QjtBQUNBLG9CQUFvQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDM0Usd0JBQXdCLFNBQVMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDL0MsNEJBQTRCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6Qyx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxRQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQzdGLDRCQUE0QixRQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQzdGLDRCQUE0QixNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3hDLHdCQUF3QixLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxRCx3QkFBd0IsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUQ7QUFDQSx3QkFBd0IsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzFJLDRCQUE0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELDRCQUE0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELHlCQUF5QixNQUFNO0FBQy9CLDRCQUE0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SSxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyRCxvQkFBb0IsT0FBTyxTQUFTLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLFFBQVEsQ0FBQztBQUN6RSxpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsSUFBSSx1QkFBdUIsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN2c0I7QUFDQSxnQkFBZ0IsU0FB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QzdEO0FBQ0Esd0JBQXdCLEtBQUssQ0FBQztBQUM5Qiw0QkFBNEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdFO0FBQ0Esd0JBQXdCLEtBQUssQ0FBQztBQUM5Qiw0QkFBNEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0Y7QUFDQSx3QkFBd0IsS0FBSyxDQUFDO0FBQzlCLDRCQUE0QixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pIO0FBQ0Esd0JBQXdCLEtBQUssQ0FBQztBQUM5Qiw0QkFBNEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FB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UyxDQUFDO0FBQ3hFLHdDQUF3QyxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBQ3hELHFDQUFxQyxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUMxRCx3Q0FBd0MsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2hFLHdDQUF3QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEUsd0NBQXdDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN4RSx3Q0FBd0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ2xFLHdDQUF3QyxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUM3RCx3Q0FBd0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3hFLHdDQUF3QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDeEUsd0NBQXdDLEtBQUssR0FBRyxVQUFVLENBQUM7QUFDM0QscUNBQXFDLE1BQU07QUFDM0Msd0NBQXdDLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEUsd0NBQXdDLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUU7QUFDQSx3Q0FBd0MsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLEdBQUcsSUFBSSxLQUFLLEtBQUssR0FBRyxJQUFJLFNBQVMsS0FBSyxHQUFHLElBQUksU0FBUyxLQUFLLEdBQUcsSUFBSSxTQUFTLEtBQUssSUFBSSxJQUFJLFNBQVMsS0FBSyxHQUFHLElBQUksU0FBUyxLQUFLLEdBQUcsRUFBRTtBQUNuTyw0Q0FBNEMsSUFBSSxDQUFDLEtBQUssR0FB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QUMsRUFBRSxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxRTtBQUNBLGdDQUFnQyxJQUFJLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekU7QUFDQSxnQ0FBZ0MsSUFBSSxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzlFO0FBQ0EsZ0NBQWdDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUUsZ0NBQWdDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUUsZ0NBQWdDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUUsZ0NBQWdDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUUsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDNUUsNkJBQTZCLE1BQU07QUFDbkMsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1RSw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzNDLHlCQUF5QjtBQUN6Qix3QkFBd0IsZ0JBQWdCLEVBQUUsU0FBUywrQkFBK0IsR0FBRztBQUNyRiw0QkFBNEIsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLGtDQUFrQyxDQUFDLENBQUM7QUFDdkYseUJBQXlCO0FBQ3pCLHdCQUF3QixjQUFjLEVBQUUsU0FBUyw2QkFBNkIsR0FBRztBQUNqRiw0QkFBNEIsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLGdDQUFnQyxDQUFDLENBQUM7QUFDckYseUJBQXlCO0FBQ3pCLHdCQUF3QixxQkFBcUIsRUFBRSxTQUFTLG9DQUFvQyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUU7QUFDM0csNEJBQTRCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN4Qyw0QkFBNEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDN0U7QUFDQSw0QkFBNEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzlFLGdDQUFnQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkUsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztBQUM5RTtBQUNBLDRCQUE0QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3BGO0FBQ0EsNEJBQTRCLElBQUksSUFBSSxFQUFFO0FBQ3RDLGdDQUFnQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlELGdDQUFnQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9ELGdDQUFnQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMvRSxnQ0FBZ0MsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzVDLGdDQUFnQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDL0MsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6Qix3QkFBd0IsbUJBQW1CLEVBQUUsU0FBUyxrQ0FBa0MsR0FBRztBQUMzRiw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzNDLDRCQUE0QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvRTtBQUNBLDRCQUE0QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3BGLHlCQUF5QjtBQUN6Qix3QkFBd0IsVUFBVSxFQUFFLFNBQVMseUJBQXlCLENBQUMsS0FBSyxFQUFFO0FBQzlFLDRCQUE0QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDeEMsNEJBQTRCLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDdEQ7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7QUFDakQsZ0NBQWdDLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxvQ0FBb0MsQ0FBQyxDQUFDO0FBQ3RGLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7QUFDaEQsZ0NBQWdDLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO0FBQ2xGLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQztBQUNsRjtBQUNBLDRCQUE0QixJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7QUFDOUMsZ0NBQWdDLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDckYsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFO0FBQzdDLGdDQUFnQyxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7QUFDN0UsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUMzSDtBQUNBLDRCQUE0QixJQUFJLFlBQVksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6Ryw0QkFBNEIsTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hHLDRCQUE0QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLDRCQUE0QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLDRCQUE0QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pGLDRCQUE0QixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFGLDRCQUE0QixJQUFJLE1BQU0sR0FBRyxDQUFDO0FBQzFDLGdDQUFnQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzNDO0FBQ0EsNEJBQTRCLElBQUksVUFBVSxHQUFHLGNBQWMsRUFBRTtBQUM3RCxnQ0FBZ0MsTUFBTSxHQUFHLFVBQVUsR0FBRyxjQUFjLENBQUM7QUFDckUsZ0NBQWdDLFVBQVUsR0FBRyxjQUFjLENBQUM7QUFDNUQsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksV0FBVyxHQUFHLGNBQWMsRUFBRTtBQUM5RCxnQ0FBZ0MsTUFBTSxHQUFHLFdBQVcsR0FBRyxjQUFjLENBQUM7QUFDdEUsZ0NBQWdDLFdBQVcsR0FBRyxjQUFjLENBQUM7QUFDN0QsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksT0FBTyxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ3RFO0FBQ0EsNEJBQTRCLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtBQUM3QyxnQ0FBZ0MsT0FBTyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQy9FLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN0SCw0QkFBNEIsSUFBSSxRQUFRLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQztBQUNqRSw0QkFBNEIsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUNuRSw0QkFBNEIsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25FLDRCQUE0QixRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUNqRjtBQUNBLDRCQUE0QixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7QUFDN0MsZ0NBQWdDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQ3JELG9DQUFvQyxNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU07QUFDaEUsb0NBQW9DLE9BQU8sRUFBRSxRQUFRO0FBQ3JELG9DQUFvQyxPQUFPLEVBQUUsT0FBTztBQUNwRCxvQ0FBb0MsT0FBTyxFQUFFLE9BQU87QUFDcEQsb0NBQW9DLE1BQU0sRUFBRSxNQUFNO0FBQ2xELG9DQUFvQyxNQUFNLEVBQUUsTUFBTTtBQUNsRCxvQ0FBb0MsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTztBQUNoRSxvQ0FBb0MsUUFBUSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUTtBQUNsRSxvQ0FBb0MsV0FBVyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLElBQUk7QUFDaEYsb0NBQW9DLHFCQUFxQixFQUFFLElBQUk7QUFDL0QsaUNBQWlDLENBQUMsQ0FBQztBQUNuQyw2QkFBNkIsTUFBTTtBQUNuQyxnQ0FBZ0MsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFFLGdDQUFnQyxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN2RSxnQ0FBZ0MsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakUsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDL0QsNEJBQTRCLElBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDO0FBQ2hELDRCQUE0QixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFGLDRCQUE0QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM3RCw0QkFBNEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQzlDLDRCQUE0QixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDNUQseUJBQXlCO0FBQ3pCLHdCQUF3QixRQUFRLEVBQUUsU0FBUyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUU7QUFDMUUsNEJBQTRCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUM5Qyw0QkFBNEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNwRCw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzdEO0FBQ0EsNEJBQTRCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsS0FBSyxTQUFTLEVBQUU7QUFDOUUsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO0FBQ3ZFLDZCQUE2QixNQUFNO0FBQ25DLGdDQUFnQyxJQUFJLENBQUMsR0FBRyxDQUFDLHdCQUF3QixHQUFHLEtBQUssQ0FBQztBQUMxRSw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO0FBQzdDLGdDQUFnQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDdkUsNkJBQTZCLE1BQU07QUFDbkMsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFFLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDM0MseUJBQXlCO0FBQ3pCLHdCQUF3QixnQkFBZ0IsRUFBRSxTQUFTLCtCQUErQixHQUFHO0FBQ3JGLDRCQUE0QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDeEM7QUFDQSw0QkFBNEIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO0FBQ3BELGdDQUFnQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDMUYsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6Qix3QkFBd0IsY0FBYyxFQUFFLFNBQVMsNkJBQTZCLEdBQUc7QUFDakYsNEJBQTRCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMzQyx5QkFBeUI7QUFDekIsd0JBQXdCLGVBQWUsRUFBRSxTQUFTLDhCQUE4QixDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFO0FBQzFHLDRCQUE0QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDeEMsNEJBQTRCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4RCw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7QUFDbEU7QUFDQSw0QkFBNEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzFFLGdDQUFnQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlELGdDQUFnQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9ELGdDQUFnQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMvRSxnQ0FBZ0MsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzVDLGdDQUFnQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDL0MsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNsRSw0QkFBNEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9ELHlCQUF5QjtBQUN6Qix3QkFBd0IsYUFBYSxFQUFFLFNBQVMsNEJBQTRCLEdBQUc7QUFDL0UsNEJBQTRCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMzQyx5QkFBeUI7QUFDekIsd0JBQXdCLGdCQUFnQixFQUFFLFNBQVMsK0JBQStCLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDaEcsNEJBQTRCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hFO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDM0MsZ0NBQWdDLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDO0FBQ3BGLGdDQUFnQyxPQUFPO0FBQ3ZDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDeEMsNEJBQTRCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDL0MsNEJBQTRCLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRCw0QkFBNEIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4RztBQUNBLDRCQUE0QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDakQsZ0NBQWdDLElBQUksZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLDBCQUEwQixDQUFDO0FBQ3RGLGdDQUFnQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVFLGdDQUFnQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztBQUM1RCxvQ0FBb0MsS0FBSyxFQUFFLEtBQUs7QUFDaEQsb0NBQW9DLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3JELG9DQUFvQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNwRCxvQ0FBb0MsS0FBSyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7QUFDbEUsb0NBQW9DLE1BQU0sRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBQ25FLGlDQUFpQyxDQUFDLENBQUM7QUFDbkMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMzQyx5QkFBeUI7QUFDekIsd0JBQXdCLHFCQUFxQixFQUFFLFNBQVMsb0NBQW9DLENBQUMsR0FBRyxFQUFFO0FBQ2xHLDRCQUE0QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQy9DLDRCQUE0QixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSztBQUNqRCxnQ0FBZ0MsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDcEQsNEJBQTRCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQ25FLDRCQUE0QixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUN6RSw0QkFBNEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztBQUM3RDtBQUNBLDRCQUE0QixJQUE0QixLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUU7QUFDL0YsZ0NBQWdDLElBQUksS0FBSyxJQUFJLG1CQUFtQixJQUFJLE1BQU0sSUFBSSxtQkFBbUIsRUFBRTtBQUNuRyxvQ0FBb0MsS0FBSyxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQztBQUN2RSx3Q0FBd0MsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO0FBQ3RELHdDQUF3QyxLQUFLLEVBQUUsS0FBSztBQUNwRCx3Q0FBd0MsTUFBTSxFQUFFLE1BQU07QUFDdEQscUNBQXFDLENBQUMsQ0FBQztBQUN2QyxpQ0FBaUMsTUFBTTtBQUN2QyxvQ0FBb0MsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDMUQsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ3pELGdDQUFnQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELGdDQUFnQyxPQUFPO0FBQ3ZDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hHLDRCQUE0QixJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO0FBQzdELDRCQUE0QixPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0MsNEJBQTRCLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3RCw0QkFBNEIsT0FBTyxDQUFDLHdCQUF3QixHQUFHLFdBQVcsQ0FBQztBQUMzRSw0QkFBNEIsT0FBTyxDQUFDLFNBQVMsR0FBRyxhQUFhLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQ2hILDRCQUE0QixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2xFLDRCQUE0QixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUMsNEJBQTRCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUUseUJBQXlCO0FBQ3pCLHdCQUF3QiwyQkFBMkIsRUFBRSxTQUFTLDBDQUEwQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtBQUM3SSw0QkFBNEIsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUN0RCw0QkFBNEIsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUN4RCw0QkFBNEIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFDbkUsNEJBQTRCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQ3pFLDRCQUE0QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hHLDRCQUE0QixJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO0FBQzdELDRCQUE0QixPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0MsNEJBQTRCLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNqRSw0QkFBNEIsT0FBTyxDQUFDLHdCQUF3QixHQUFHLFdBQVcsQ0FBQztBQUMzRSw0QkFBNEIsT0FBTyxDQUFDLFNBQVMsR0FBRyxhQUFhLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQ2hILDRCQUE0QixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2xFLDRCQUE0QixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUMsNEJBQTRCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDL0M7QUFDQSw0QkFBNEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ25GLGdDQUFnQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0MsZ0NBQWdDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEcsZ0NBQWdDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsZ0NBQWdDLEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuRyxnQ0FBZ0MsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzlDLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekIsd0JBQXdCLDBCQUEwQixFQUFFLFNBQVMseUNBQXlDLENBQUMsTUFBTSxFQUFFO0FBQy9HLDRCQUE0QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQy9DLDRCQUE0QixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUNuRSw0QkFBNEIsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDekU7QUFDQSw0QkFBNEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM3RSxnQ0FBZ0MsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELGdDQUFnQyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSztBQUN2RCxvQ0FBb0MsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDMUQsZ0NBQWdDLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDNUcsZ0NBQWdDLElBQUksT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7QUFDakUsZ0NBQWdDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMvQyxnQ0FBZ0Msa0JBQWtCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ25FLGdDQUFnQyxPQUFPLENBQUMsd0JBQXdCLEdBQUcsV0FBVyxDQUFDO0FBQy9FLGdDQUFnQyxPQUFPLENBQUMsU0FBUyxHQUFHLGFBQWEsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDcEgsZ0NBQWdDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdEUsZ0NBQWdDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNsRCxnQ0FBZ0MsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzNDLGdDQUFnQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzFFLGdDQUFnQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pELGdDQUFnQyxHQUFHLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkcsZ0NBQWdDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5Qyw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCLHdCQUF3QixpQkFBaUIsRUFBRSxTQUFTLGdDQUFnQyxDQUFDLEtBQUssRUFBRTtBQUM1Riw0QkFBNEIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0Q7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUMxQyxnQ0FBZ0MsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLGtDQUFrQyxDQUFDLENBQUM7QUFDcEYsZ0NBQWdDLE9BQU87QUFDdkMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNsRSx5QkFBeUI7QUFDekIsd0JBQXdCLHVCQUF1QixFQUFFLFNBQVMsc0NBQXNDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFO0FBQ25JLDRCQUE0QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRDtBQUNBLDRCQUE0QixJQUFJLENBQUMsT0FBTyxFQUFFO0FBQzFDLGdDQUFnQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsa0NBQWtDLENBQUMsQ0FBQztBQUNwRixnQ0FBZ0MsT0FBTztBQUN2Qyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUN0RCw0QkFBNEIsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUN4RCw0QkFBNEIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3pDO0FBQ0EsNEJBQTRCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNuRixnQ0FBZ0MsR0FBRyxDQUFDLElBQUksQ0FBQztBQUN6QyxvQ0FBb0MsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JHLG9DQUFvQyxDQUFDLEVBQUUsQ0FBQztBQUN4QyxvQ0FBb0MsQ0FBQyxFQUFFLENBQUM7QUFDeEMsb0NBQW9DLENBQUMsRUFBRSxLQUFLO0FBQzVDLG9DQUFvQyxDQUFDLEVBQUUsTUFBTTtBQUM3QyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ25DLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLENBQUMsNEJBQTRCLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVFLHlCQUF5QjtBQUN6Qix3QkFBd0IsdUJBQXVCLEVBQUUsU0FBUyxzQ0FBc0MsQ0FBQyxPQUFPLEVBQUU7QUFDMUcsNEJBQTRCLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDdEQsNEJBQTRCLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDeEQsNEJBQTRCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDL0MsNEJBQTRCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN4Qyw0QkFBNEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQzlELDRCQUE0QixJQUFJLGdCQUFnQixHQUFHLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQztBQUNsRiw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELGdDQUFnQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsNEJBQTRCLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuRiw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELGdDQUFnQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsNEJBQTRCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRiw0QkFBNEIsSUFBSSxVQUFVLEVBQUUsU0FBUyxDQUFDO0FBQ3REO0FBQ0EsNEJBQTRCLElBQUksT0FBTyxXQUFXLEtBQUssVUFBVSxJQUFJLE9BQU8sWUFBWSxXQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ3RILGdDQUFnQyxVQUFVLEdBQUcsT0FBTyxDQUFDO0FBQ3JELDZCQUE2QixNQUFNO0FBQ25DLGdDQUFnQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN4RyxnQ0FBZ0MsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQztBQUMvRCxnQ0FBZ0Msa0JBQWtCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3BFLGdDQUFnQyxVQUFVLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztBQUM5RCw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxVQUFVLEdBQUcsS0FBSztBQUNsRCxnQ0FBZ0MsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUNyRCw0QkFBNEIsSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQzFEO0FBQ0EsNEJBQTRCLE9BQU8sVUFBVSxHQUFHLENBQUMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLFdBQVcsR0FBRyxDQUFDLElBQUksV0FBVyxHQUFHLENBQUMsRUFBRTtBQUMzRyxnQ0FBZ0MsSUFBSSxRQUFRLEdBQUcsVUFBVTtBQUN6RCxvQ0FBb0MsU0FBUyxHQUFHLFdBQVcsQ0FBQztBQUM1RDtBQUNBLGdDQUFnQyxJQUFJLFVBQVUsR0FBRyxDQUFDLElBQUksVUFBVSxHQUFHLENBQUMsRUFBRTtBQUN0RSxvQ0FBb0MsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLG9DQUFvQyxVQUFVLElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQztBQUN4RSxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxXQUFXLEdBQUcsQ0FBQyxJQUFJLFdBQVcsR0FBRyxDQUFDLEVBQUU7QUFDeEUsb0NBQW9DLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRSxvQ0FBb0MsV0FBVyxJQUFJLFdBQVcsR0FBRyxTQUFTLENBQUM7QUFDM0UsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzVHLGdDQUFnQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQztBQUMzRCxnQ0FBZ0MsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM1RSxnQ0FBZ0MsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZILGdDQUFnQyxVQUFVLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztBQUM5RCxnQ0FBZ0MsVUFBVSxHQUFHLFFBQVEsQ0FBQztBQUN0RCxnQ0FBZ0MsV0FBVyxHQUFHLFNBQVMsQ0FBQztBQUN4RCxnQ0FBZ0MsV0FBVyxHQUFHLFdBQVcsS0FBSyxXQUFXLEdBQUcsV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUN0Ryw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDaEg7QUFDQSw0QkFBNEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2pELGdDQUFnQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEYsZ0NBQWdDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO0FBQzVELG9DQUFvQyxPQUFPLEVBQUUsT0FBTztBQUNwRCxvQ0FBb0MsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDckQsb0NBQW9DLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3BELG9DQUFvQyxLQUFLLEVBQUUsS0FBSyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQztBQUN0RSxvQ0FBb0MsTUFBTSxFQUFFLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7QUFDeEUsaUNBQWlDLENBQUMsQ0FBQztBQUNuQyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzNDLHlCQUF5QjtBQUN6Qix3QkFBd0IsNEJBQTRCLEVBQUUsU0FBUywyQ0FBMkMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO0FBQ3pILDRCQUE0QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQy9DLDRCQUE0QixJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ2xELDRCQUE0QixJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ25ELDRCQUE0QixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9GLDRCQUE0QixJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO0FBQzNELDRCQUE0QixrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDaEU7QUFDQSw0QkFBNEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxRSxnQ0FBZ0MsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25ELGdDQUFnQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0MsZ0NBQWdDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDMUUsZ0NBQWdDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsZ0NBQWdDLEdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakg7QUFDQSxnQ0FBZ0MsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ3JELG9DQUFvQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUYsb0NBQW9DLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO0FBQ2hFLHdDQUF3QyxPQUFPLEVBQUUsT0FBTztBQUN4RCx3Q0FBd0MsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDekQsd0NBQXdDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3hELHdDQUF3QyxLQUFLLEVBQUUsQ0FBQztBQUNoRCx3Q0FBd0MsTUFBTSxFQUFFLENBQUM7QUFDakQscUNBQXFDLENBQUMsQ0FBQztBQUN2QyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzlDLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekIsd0JBQXdCLHdCQUF3QixFQUFFLFNBQVMsdUNBQXVDLEdBQUc7QUFDckcsNEJBQTRCLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFELHlCQUF5QjtBQUN6Qix3QkFBd0IsWUFBWSxFQUFFLFNBQVMsMkJBQTJCLEdBQUc7QUFDN0UsNEJBQTRCLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSx1Q0FBdUMsQ0FBQyxDQUFDO0FBQ3JGLHlCQUF5QjtBQUN6Qix3QkFBd0IsU0FBUyxFQUFFLFNBQVMsd0JBQXdCLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDNUUsd0JBQXdCLGNBQWMsRUFBRSxTQUFTLDZCQUE2QixDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRTtBQUNsRyx3QkFBd0Isa0JBQWtCLEVBQUUsU0FBUyxpQ0FBaUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtBQUM5Rix3QkFBd0IsdUJBQXVCLEVBQUUsU0FBUyxzQ0FBc0MsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUU7QUFDcEgsd0JBQXdCLGdCQUFnQixFQUFFLFNBQVMsK0JBQStCLEdBQUcsRUFBRTtBQUN2Rix3QkFBd0IsV0FBVyxFQUFFLFNBQVMsMEJBQTBCLEdBQUcsRUFBRTtBQUM3RSx3QkFBd0IsU0FBUyxFQUFFLFNBQVMsd0JBQXdCLEdBQUcsRUFBRTtBQUN6RSx3QkFBd0IsV0FBVyxFQUFFLFNBQVMsMEJBQTBCLEdBQUc7QUFDM0UsNEJBQTRCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDL0M7QUFDQSw0QkFBNEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQ2xELGdDQUFnQyxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssT0FBTyxFQUFFO0FBQ2xFLG9DQUFvQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3hELGlDQUFpQyxNQUFNO0FBQ3ZDLG9DQUFvQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0MsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ3hELDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDNUMseUJBQXlCO0FBQ3pCLHdCQUF3QixtQkFBbUIsRUFBRSxTQUFTLG1CQUFtQixDQUFDLEtBQUssRUFBRTtBQUNqRiw0QkFBNEIsSUFBSSxJQUFJLENBQUMsMEJBQTBCLEtBQUssSUFBSSxFQUFFO0FBQzFFLGdDQUFnQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDO0FBQ2xGLGdDQUFnQyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVMLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQztBQUNuRSx5QkFBeUI7QUFDekIsd0JBQXdCLGlCQUFpQixFQUFFLFNBQVMsZ0NBQWdDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMzRiw0QkFBNEIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztBQUN6RSw0QkFBNEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVJLHlCQUF5QjtBQUN6QixxQkFBcUIsQ0FBQztBQUN0QjtBQUNBLG9CQUFvQixLQUFLLElBQUksRUFBRSxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUU7QUFDOUMsd0JBQXdCLGNBQWMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0YscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLE9BQU8sY0FBYyxDQUFDO0FBQzFDLGlCQUFpQixFQUFFLENBQUM7QUFDcEI7QUFDQSxnQkFBZ0IsT0FBTyxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDeEQ7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQSxtQkFBbUIsU0FBUyxNQUFNLEVBQUUsT0FBTyxFQUFFLCtCQUErQixFQUFFO0FBRzlFO0FBQ0E7QUFDQSxnQkFBZ0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFO0FBQzdELG9CQUFvQixLQUFLLEVBQUUsSUFBSTtBQUMvQixpQkFBaUIsQ0FBQyxDQUFDO0FBQ25CLGdCQUFnQixPQUFPLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7QUFDMUUsZ0JBQWdCLE9BQU8sQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDL0M7QUFDQSxnQkFBZ0IsSUFBSSxLQUFLLEdBQUcsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0Q7QUFDQSxnQkFBZ0IsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLGdCQUFnQixVQUFVLENBQUMsV0FBVyxHQUFHO0FBQ3pDLG9CQUFvQixNQUFNLEVBQUUsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUU7QUFDN0Qsd0JBQXdCLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyx3QkFBd0IsSUFBSSxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELHdCQUF3QixJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsd0JBQXdCLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4Qyx3QkFBd0IsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLHdCQUF3QixJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsd0JBQXdCLE9BQU87QUFDL0IsNEJBQTRCLElBQUksRUFBRSxTQUFTO0FBQzNDLDRCQUE0QixVQUFVLEVBQUUsU0FBUyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUU7QUFDN0UsZ0NBQWdDLElBQUksSUFBSSxDQUFDO0FBQ3pDO0FBQ0EsZ0NBQWdDLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRTtBQUN0RCxvQ0FBb0MsSUFBSSxHQUFHLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRyxpQ0FBaUMsTUFBTSxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUU7QUFDOUQsb0NBQW9DLElBQUksR0FBRyxHQUFHLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN4RyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNyRixvQ0FBb0MsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELG9DQUFvQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRSxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsT0FBTyxJQUFJLENBQUM7QUFDNUMsNkJBQTZCO0FBQzdCLHlCQUF5QixDQUFDO0FBQzFCLHFCQUFxQjtBQUNyQixpQkFBaUIsQ0FBQztBQUNsQjtBQUNBLGdCQUFnQixJQUFJLGdCQUFnQixHQUFHLFNBQVMsdUJBQXVCLEdBQUc7QUFDMUUsb0JBQW9CLFNBQVMsWUFBWSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDakYsd0JBQXdCLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNO0FBQ25ELDRCQUE0QixNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUNwRCx3QkFBd0IsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUk7QUFDN0MsNEJBQTRCLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNyRCx3QkFBd0IsSUFBSSxHQUFHLENBQUM7QUFDaEM7QUFDQSx3QkFBd0IsSUFBSSxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDN0QsNEJBQTRCLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDckMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEMsNEJBQTRCLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDckMsNEJBQTRCLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDckMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEMsNEJBQTRCLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDckMseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQzdELDRCQUE0QixHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLDRCQUE0QixFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLDRCQUE0QixFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLDRCQUE0QixHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLDRCQUE0QixFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLDRCQUE0QixFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUM3RCw0QkFBNEIsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNyQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQyw0QkFBNEIsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNyQyw0QkFBNEIsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNyQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQyw0QkFBNEIsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNyQyx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ2pGLHdCQUF3QixJQUFJLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3JGLHdCQUF3QixJQUFJLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDakYsd0JBQXdCLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDckYsd0JBQXdCLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUNqRix3QkFBd0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUNyRjtBQUNBLHdCQUF3QixJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDdEMsNEJBQTRCLE9BQU87QUFDbkMseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDNUMsNEJBQTRCLEdBQUcsR0FBRyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoRCw0QkFBNEIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakQsd0JBQXdCLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDNUMsNEJBQTRCLEdBQUcsR0FBRyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoRCw0QkFBNEIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakQsd0JBQXdCLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDNUMsNEJBQTRCLEdBQUcsR0FBRyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoRCw0QkFBNEIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakQsd0JBQXdCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQ2pELDRCQUE0QixJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRCx3QkFBd0IsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixJQUFJLENBQUMsQ0FBQztBQUM5QjtBQUNBLHdCQUF3QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNELDRCQUE0QixJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDeEMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3RGLGdDQUFnQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEQsZ0NBQWdDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUM1RCxnQ0FBZ0MsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzVELGdDQUFnQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDNUQsNkJBQTZCLE1BQU07QUFDbkMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3RGLGdDQUFnQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEQsZ0NBQWdDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUM1RCxnQ0FBZ0MsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzVELGdDQUFnQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDNUQsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQy9FLDRCQUE0QixFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEQsNEJBQTRCLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN4RCw0QkFBNEIsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3hELDRCQUE0QixHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDeEQsNEJBQTRCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuRSw0QkFBNEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25FLDRCQUE0QixJQUFJLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDMUQ7QUFDQSw0QkFBNEIsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM3RCxnQ0FBZ0MsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUQsZ0NBQWdDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2RSxnQ0FBZ0MsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZFLGdDQUFnQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkUsZ0NBQWdDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRTtBQUMvRCx3QkFBd0IsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUMvQyx3QkFBd0IsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUMvQyx3QkFBd0IsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2xDO0FBQ0Esd0JBQXdCLFFBQVEsTUFBTSxDQUFDLElBQUk7QUFDM0MsNEJBQTRCLEtBQUssU0FBUztBQUMxQyxnQ0FBZ0MsSUFBSSxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztBQUMzRSxnQ0FBZ0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RixnQ0FBZ0MsSUFBSSxJQUFJLEdBQUcsY0FBYyxHQUFHLENBQUMsQ0FBQztBQUM5RDtBQUNBLGdDQUFnQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzRCxvQ0FBb0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUMvRDtBQUNBLG9DQUFvQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3hFLHdDQUF3QyxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUN4Six3Q0FBd0MsWUFBWSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsY0FBYyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQ2xNLHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLFdBQVc7QUFDNUMsZ0NBQWdDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDNUUsb0NBQW9DLFlBQVksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFILGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxNQUFNO0FBQ3RDO0FBQ0EsNEJBQTRCO0FBQzVCLGdDQUFnQyxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDbEUseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUU7QUFDN0ksd0JBQXdCLElBQUksY0FBYyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFDcEQsd0JBQXdCLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztBQUM1Qyx3QkFBd0IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RCx3QkFBd0IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RCx3QkFBd0IsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDekUsd0JBQXdCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQzFFLHdCQUF3QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUNySSx3QkFBd0IsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDdkksd0JBQXdCLElBQUksTUFBTSxHQUFHLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDekQsd0JBQXdCLElBQUksTUFBTSxHQUFHLFlBQVksR0FBRyxNQUFNLENBQUM7QUFDM0Qsd0JBQXdCLElBQUksT0FBTyxHQUFHO0FBQ3RDLDRCQUE0QixNQUFNLEVBQUUsTUFBTTtBQUMxQyw0QkFBNEIsTUFBTSxFQUFFLE1BQU07QUFDMUMsNEJBQTRCLE9BQU8sRUFBRSxDQUFDLE9BQU87QUFDN0MsNEJBQTRCLE9BQU8sRUFBRSxDQUFDLE9BQU87QUFDN0MsNEJBQTRCLE1BQU0sRUFBRSxDQUFDLEdBQUcsTUFBTTtBQUM5Qyw0QkFBNEIsTUFBTSxFQUFFLENBQUMsR0FBRyxNQUFNO0FBQzlDLHlCQUF5QixDQUFDO0FBQzFCLHdCQUF3QixJQUFJLFdBQVcsR0FBRyxLQUFLLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUNsRSx3QkFBd0IsSUFBSSxZQUFZLEdBQUcsTUFBTSxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDcEUsd0JBQXdCLElBQUksTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3JEO0FBQ0Esd0JBQXdCLElBQUksWUFBWSxDQUFDLFNBQVMsRUFBRTtBQUNwRCw0QkFBNEIsTUFBTSxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUM7QUFDOUQsZ0NBQWdDLEtBQUssRUFBRSxLQUFLO0FBQzVDLGdDQUFnQyxNQUFNLEVBQUUsTUFBTTtBQUM5QyxnQ0FBZ0MsZUFBZSxFQUFFLGVBQWU7QUFDaEUsZ0NBQWdDLE9BQU8sRUFBRSxPQUFPO0FBQ2hELGdDQUFnQyxPQUFPLEVBQUUsT0FBTztBQUNoRCw2QkFBNkIsQ0FBQyxDQUFDO0FBQy9CLDRCQUE0QixTQUFTLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzRyw0QkFBNEIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMxRiw0QkFBNEIsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDdEQseUJBQXlCLE1BQU07QUFDL0IsNEJBQTRCLFNBQVMsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNHLDRCQUE0QixJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO0FBQzNELDRCQUE0QixJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM3RTtBQUNBLDRCQUE0QixJQUFJLGVBQWUsRUFBRTtBQUNqRCxnQ0FBZ0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN0RDtBQUNBLGdDQUFnQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQy9FLG9DQUFvQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLG9DQUFvQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RSxvQ0FBb0MsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEUsb0NBQW9DLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZELGlDQUFpQztBQUNqQyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pFLGdDQUFnQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN0RSw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ2hGLDRCQUE0QixNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztBQUN0RCx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsT0FBTztBQUMvQiw0QkFBNEIsTUFBTSxFQUFFLE1BQU07QUFDMUMsNEJBQTRCLE9BQU8sRUFBRSxPQUFPLEdBQUcsV0FBVyxHQUFHLE1BQU07QUFDbkUsNEJBQTRCLE9BQU8sRUFBRSxPQUFPLEdBQUcsV0FBVyxHQUFHLE1BQU07QUFDbkUsNEJBQTRCLE1BQU0sRUFBRSxNQUFNO0FBQzFDLDRCQUE0QixNQUFNLEVBQUUsTUFBTTtBQUMxQyx5QkFBeUIsQ0FBQztBQUMxQixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsT0FBTyxnQkFBZ0IsQ0FBQztBQUM1QyxpQkFBaUIsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsZ0JBQWdCLFVBQVUsQ0FBQyxJQUFJLEdBQUc7QUFDbEMsb0JBQW9CLE1BQU0sRUFBRSxTQUFTLFdBQVcsQ0FBQyxHQUFHLEVBQUU7QUFDdEQsd0JBQXdCLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1Qyx3QkFBd0IsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLHdCQUF3QixJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0Msd0JBQXdCLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1Qyx3QkFBd0IsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLHdCQUF3QixJQUFJLFVBQVUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQsd0JBQXdCLE9BQU87QUFDL0IsNEJBQTRCLElBQUksRUFBRSxTQUFTO0FBQzNDLDRCQUE0QixVQUFVLEVBQUUsU0FBUyxlQUFlLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7QUFDMUYsZ0NBQWdDLElBQUksS0FBSyxDQUFDO0FBQzFDO0FBQ0EsZ0NBQWdDLElBQUksV0FBVyxFQUFFO0FBQ2pELG9DQUFvQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUM5RyxpQ0FBaUMsTUFBTTtBQUN2QyxvQ0FBb0MsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzFHO0FBQ0Esb0NBQW9DLElBQUksTUFBTSxFQUFFO0FBQ2hELHdDQUF3QyxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNHO0FBQ0Esd0NBQXdDLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZHLHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxzQkFBc0IsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsR0FBRyxJQUFJLEdBQUcsVUFBVSxFQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2pNO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDbEQsb0NBQW9DLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDckY7QUFDQSxvQ0FBb0MsSUFBSSxNQUFNLEVBQUU7QUFDaEQsd0NBQXdDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN6RSxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLEdBQUcsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzlHLGdDQUFnQyxHQUFHLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4RyxnQ0FBZ0MsT0FBTyxHQUFHLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNyRyw2QkFBNkI7QUFDN0IseUJBQXlCLENBQUM7QUFDMUIscUJBQXFCO0FBQ3JCLGlCQUFpQixDQUFDO0FBQ2xCLGdCQUFnQixVQUFVLENBQUMsS0FBSyxHQUFHO0FBQ25DLG9CQUFvQixNQUFNLEVBQUUsU0FBUyxZQUFZLEdBQUc7QUFDcEQsd0JBQXdCLE9BQU87QUFDL0IsNEJBQTRCLElBQUksRUFBRSxTQUFTO0FBQzNDLDRCQUE0QixVQUFVLEVBQUUsU0FBUyx1QkFBdUIsR0FBRztBQUMzRSxnQ0FBZ0MsT0FBTyxTQUFTLENBQUM7QUFDakQsNkJBQTZCO0FBQzdCLHlCQUF5QixDQUFDO0FBQzFCLHFCQUFxQjtBQUNyQixpQkFBaUIsQ0FBQztBQUNsQjtBQUNBLGdCQUFnQixTQUFTLHVCQUF1QixDQUFDLEdBQUcsRUFBRTtBQUN0RCxvQkFBb0IsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZEO0FBQ0Esb0JBQW9CLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDcEMsd0JBQXdCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUUscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqRCxpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsSUFBSSxhQUFhLEdBQUcsU0FBUyxvQkFBb0IsR0FBRztBQUNwRSxvQkFBb0IsSUFBSSxTQUFTLEdBQUc7QUFDcEMsd0JBQXdCLE9BQU8sRUFBRSxDQUFDO0FBQ2xDLHdCQUF3QixTQUFTLEVBQUUsQ0FBQztBQUNwQyxxQkFBcUIsQ0FBQztBQUN0QixvQkFBb0IsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFDaEQ7QUFDQSxvQkFBb0IsU0FBUyxhQUFhLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxFQUFFO0FBQ2pHLHdCQUF3QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRCx3QkFBd0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLHdCQUF3QixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyx3QkFBd0IsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0Msd0JBQXdCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLHdCQUF3QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyx3QkFBd0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQsd0JBQXdCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzNDLHdCQUF3QixJQUFJLENBQUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUM7QUFDM0Usd0JBQXdCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0FBQzNELHdCQUF3QixJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztBQUM5Qyx3QkFBd0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDdkMscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLGFBQWEsQ0FBQyxTQUFTLEdBQUc7QUFDOUMsd0JBQXdCLG1CQUFtQixFQUFFLFNBQVMsZ0NBQWdDLENBQUMsS0FBSyxFQUFFO0FBQzlGLDRCQUE0QixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO0FBQ2pFLDRCQUE0QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2pELDRCQUE0QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ25ELDRCQUE0QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ25ELDRCQUE0QixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQzNELDRCQUE0QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzdELDRCQUE0QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ25ELDRCQUE0QixJQUFJLHFCQUFxQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztBQUNuRiw0QkFBNEIsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLGNBQWMsR0FBRyxVQUFVLENBQUMsQ0FBQztBQUN6RSw0QkFBNEIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM1QyxnQ0FBZ0MsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDNUMsZ0NBQWdDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzVDLGdDQUFnQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLDRCQUE0QixJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNuRCw0QkFBNEIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNwRSw0QkFBNEIsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRSw0QkFBNEIsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRTtBQUNBLDRCQUE0QixJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwRztBQUNBLDRCQUE0QixJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM5RztBQUNBLDRCQUE0QixJQUFJLGFBQWEsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pILDRCQUE0QixLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUM5Ryw0QkFBNEIsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDaEgsNEJBQTRCLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNHLDRCQUE0QixJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO0FBQzNELDRCQUE0QixJQUFJLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5Riw0QkFBNEIsUUFBUSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ25FLDRCQUE0QixJQUFJLENBQUMsOEJBQThCLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM1Riw0QkFBNEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN2RSw0QkFBNEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzVELDRCQUE0QixJQUFJLFlBQVksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RGLDRCQUE0QixRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDN0UsNEJBQTRCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxRSw0QkFBNEIsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3ZFLDRCQUE0QixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDcEQseUJBQXlCO0FBQ3pCLHdCQUF3QixRQUFRLEVBQUUsU0FBUyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDL0YsNEJBQTRCLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxFQUFFLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQztBQUN6RSx5QkFBeUI7QUFDekIsd0JBQXdCLGdCQUFnQixFQUFFLFNBQVMsOEJBQThCLENBQUMsUUFBUSxFQUFFO0FBQzVGLDRCQUE0QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ25ELDRCQUE0QixJQUFJLFFBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUUsNEJBQTRCLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN6RSx5QkFBeUI7QUFDekIsd0JBQXdCLGNBQWMsRUFBRSxTQUFTLDRCQUE0QixHQUFHO0FBQ2hGLDRCQUE0QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ25ELDRCQUE0QixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RSx5QkFBeUI7QUFDekIsd0JBQXdCLFFBQVEsRUFBRSxTQUFTLFFBQVEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNwRiw0QkFBNEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzFFLGdDQUFnQyxJQUFJLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3hELGdDQUFnQyxJQUFJLFVBQVUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pELGdDQUFnQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNqRixnQ0FBZ0MsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2hELGdDQUFnQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDbkQsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6Qix3QkFBd0IsOEJBQThCLEVBQUUsU0FBUyw4QkFBOEIsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRTtBQUM1SCw0QkFBNEIsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUc7QUFDdEQsZ0NBQWdDLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO0FBQzNEO0FBQ0EsNEJBQTRCLFFBQVEsU0FBUztBQUM3QyxnQ0FBZ0MsS0FBSyxTQUFTLENBQUMsT0FBTztBQUN0RCxvQ0FBb0MsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN2RCxvQ0FBb0MsT0FBTyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO0FBQ3RFLG9DQUFvQyxPQUFPLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUM7QUFDMUUsb0NBQW9DLE9BQU8sQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQztBQUN0RSxvQ0FBb0MsT0FBTyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDO0FBQzFFLG9DQUFvQyxNQUFNO0FBQzFDO0FBQ0EsZ0NBQWdDLEtBQUssU0FBUyxDQUFDLFNBQVM7QUFDeEQsb0NBQW9DLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkc7QUFDQSxvQ0FBb0MsT0FBTyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7QUFDakUsb0NBQW9DLE9BQU8sQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDO0FBQ25FLG9DQUFvQyxPQUFPLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztBQUNqRSxvQ0FBb0MsT0FBTyxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUM7QUFDbkUsb0NBQW9DLE1BQU07QUFDMUM7QUFDQSxnQ0FBZ0M7QUFDaEMsb0NBQW9DLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQzlHLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekIsd0JBQXdCLFVBQVUsRUFBRSxTQUFTLHdCQUF3QixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUU7QUFDbEYsNEJBQTRCLElBQUksc0JBQXNCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pGLDRCQUE0QixHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUMzQyw0QkFBNEIsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM1RSw0QkFBNEIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsRSw0QkFBNEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ2xELDRCQUE0QixPQUFPLEdBQUcsQ0FBQyxhQUFhLENBQUMsc0JBQXNCLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDdkYseUJBQXlCO0FBQ3pCLHFCQUFxQixDQUFDO0FBQ3RCLG9CQUFvQixPQUFPLGFBQWEsQ0FBQztBQUN6QyxpQkFBaUIsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsZ0JBQWdCLE9BQU8sQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0FBQ3REO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0EsbUJBQW1CLFNBQVMsTUFBTSxFQUFFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRTtBQUc5RTtBQUNBO0FBQ0EsZ0JBQWdCLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRTtBQUM3RCxvQkFBb0IsS0FBSyxFQUFFLElBQUk7QUFDL0IsaUJBQWlCLENBQUMsQ0FBQztBQUNuQixnQkFBZ0IsT0FBTyxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3JELGdCQUFnQixJQUFJLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUQsZ0JBQWdCLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztBQUNsRSxnQkFBZ0IsbUJBQW1CLENBQUMsVUFBVSxHQUFHLG1CQUFtQixDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLG1CQUFtQixDQUFDLFVBQVUsQ0FBQztBQUN0SSxnQkFBZ0IsbUJBQW1CLENBQUMsU0FBUyxHQUFHLG1CQUFtQixDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLG1CQUFtQixDQUFDLFNBQVMsQ0FBQztBQUNqSTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBLG1CQUFtQixTQUFTLE1BQU0sRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUU7QUFHOUU7QUFDQTtBQUNBLGdCQUFnQixNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUU7QUFDN0Qsb0JBQW9CLEtBQUssRUFBRSxJQUFJO0FBQy9CLGlCQUFpQixDQUFDLENBQUM7QUFDbkIsZ0JBQWdCLE9BQU8sQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0FBQ3hEO0FBQ0EsZ0JBQWdCLElBQUksWUFBWSxHQUFHLHNCQUFzQixDQUFDLCtCQUErQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEc7QUFDQSxnQkFBZ0IsSUFBSSxLQUFLLEdBQUcsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0Q7QUFDQSxnQkFBZ0IsU0FBUyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQy9HO0FBQ0EsZ0JBQWdCLFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxJQUFJLE9BQU8sTUFBTSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUUsRUFBRSxPQUFPLEdBQUcsU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxHQUFHLFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sR0FBRyxJQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxHQUFHLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxHQUFHLEtBQUssTUFBTSxDQUFDLFNBQVMsR0FBRyxRQUFRLEdBQUcsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQy9XO0FBQ0EsZ0JBQWdCLFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDelI7QUFDQSxnQkFBZ0IsU0FBUyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLFlBQVksRUFBRSxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLFNBQVMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMs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Z0JBQWdCLFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDelI7QUFDQSxnQkFBZ0IsU0FBUyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLFlBQVksRUFBRSxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLFNBQVMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENB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QyxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDOUYsNENBQTRDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEcsNENBQTRDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRiw0Q0FBNEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvRiw0Q0FBNEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlGLDRDQUE0QyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0Ryw0Q0FBNEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEcsNENBQTRDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM5Riw0Q0FBNEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRyw0Q0FBNEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRyw0Q0FBNEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNGLDRDQUE0QyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9GLDRDQUE0QyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9GLDRDQUE0QyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEYsNENBQTRDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNwRiw0Q0FBNEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BGLDRDQUE0QyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEYsNENBQTRDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3hGLDRDQUE0QyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUYsNENBQTRDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNwRiw0Q0FBNEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JGLDRDQUE0QyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckYsNENBQTRDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRiw0Q0FBNEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JGLDRDQUE0QyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckYsNENBQTRDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3hGLDRDQUE0QyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUYsNENBQTRDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1Riw0Q0FBNEMsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUN6RCw0Q0FBNEMsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUN6RCx5Q0FBeUM7QUFD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QUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlFLG9DQUFvQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlFLG9DQUFvQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELGlDQUFpQyxDQUFDO0FBQ2xDO0FBQ0EsZ0NBQWdDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JFLGdDQUFnQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwRSxnQ0FBZ0MsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEUsZ0NBQWdDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hFLGdDQUFnQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLGdDQUFnQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyRSxnQ0FBZ0MsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN4RSxnQ0FBZ0MsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEUsZ0NBQWdDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkUsZ0NBQWdDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEUsZ0NBQWdDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDeEUsZ0NBQWdDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekUs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LENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3ZELDRCQUE0QixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzNELDRCQUE0QixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFELDRCQUE0QixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDckQsNEJBQTRCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsNEJBQTRCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoRSw0QkFBNEIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwRSw0QkFBNEIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwRSw0QkFBNEIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwRSw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQyw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUMsNEJBQTRCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzdDLDRCQUE0QixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakUsNEJBQTRCLElBQUks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SSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsNENBQTRDLE1BQU07QUFDbEQ7QUFDQSx3Q0FBd0MsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLGFBQWE7QUFDcEUsNENBQTRDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNySCw0Q0FBNEMsTUFBTTtBQUNsRDtBQUNBLHdDQUF3QyxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVztBQUNsRSw0Q0FBNEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RSw0Q0FBNEMsTUFBTTtBQUNsRDtBQUNBLHdDQUF3QyxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsb0JBQW9CO0FBQzNFLDRDQUE0QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0UsNENBQTRDLE1BQU07QUFDbEQ7QUFDQSx3Q0FBd0MsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVk7QUFDbkUsNENBQTRDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsNENBQTRDLE1BQU07QUFDbEQ7QUFDQSx3Q0FBd0MsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVc7QUFDbEUsNENBQTRDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEUsNENBQTRDLE1BQU07QUFDbEQ7QUFDQSx3Q0FBd0MsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVU7QUFDakUsNENBQTRDLElBQUksQ0FBQyxVQUFVLENBQUMs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SSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzNDLGdDQUFnQyxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQzFEO0FBQ0EsZ0NBQWdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxRSxvQ0FBb0MsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN0RCx3Q0FBd0MsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVM7QUFDaEUsNENBQTRDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxRCw0Q0FBNEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFELDRDQUE0QyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRSw0Q0FBNEMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkUsNENBQTRDLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDL0QsNENBQTRDLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEUsNENBQTRDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEksNENBQTRDLE1BQU07QUFDbEQ7QUFDQSx3Q0FBd0MsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU07QUFDN0QsNENBQTRDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxRCw0Q0FBNEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFELDRDQUE0QyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEUsNENBQTRDLE1BQU07QUFDbEQ7QUFDQSx3Q0FBd0MsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU07QUFDN0QsNENBQTRDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxRCw0Q0FBNEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFELDRDQUE0QyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEUsNENBQTRDLE1BQU07QUFDbEQ7QUFDQSx3Q0FBd0MsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU87QUFDOUQsNENBQTRDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVELDRDQUE0QyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RCw0Q0FBNEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0SSw0Q0FBNEMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuRCw0Q0FBNEMsTUFBTTtBQUNsRDtBQUNBLHdDQUF3QyxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUTtBQUMvRCw0Q0FBNEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUQsNENBQTRDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVELDRDQUE0QyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RJLDRDQUE0QyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25ELDRDQUE0QyxNQUFNO0FBQ2xEO0FBQ0Esd0NBQXdDLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRO0FBQy9ELDRDQUE0QyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RCw0Q0FBNEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUQsNENBQTRDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFD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 diff --git a/enter/.obsidian/plugins/obsidian-extract-pdf-highlights/manifest.json b/enter/.obsidian/plugins/obsidian-extract-pdf-highlights/manifest.json deleted file mode 100644 index cbf77c5..0000000 --- a/enter/.obsidian/plugins/obsidian-extract-pdf-highlights/manifest.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "id": "obsidian-extract-pdf-highlights", - "name": "PDF Highlights", - "version": "0.0.4", - "minAppVersion": "0.9.12", - "description": "Extract highlights, underlines and annotations from your PDFs into Obsidian", - "author": "Alexis Rondeau", - "authorUrl": "https://publish.obsidian.md/alexisrondeau", - "isDesktopOnly": false -} diff --git a/enter/.obsidian/plugins/obsidian-extract-pdf-highlights/styles.css b/enter/.obsidian/plugins/obsidian-extract-pdf-highlights/styles.css deleted file mode 100644 index 79a9626..0000000 --- a/enter/.obsidian/plugins/obsidian-extract-pdf-highlights/styles.css +++ /dev/null @@ -1 +0,0 @@ -/* */ diff --git a/enter/.obsidian/plugins/obsidian-style-settings/data.json b/enter/.obsidian/plugins/obsidian-style-settings/data.json index a5f9735..68570a4 100644 --- a/enter/.obsidian/plugins/obsidian-style-settings/data.json +++ b/enter/.obsidian/plugins/obsidian-style-settings/data.json @@ -11,5 +11,6 @@ "aura@@aura-rainbow-folders": false, "aura@@aura-heading-color": true, "aura@@aura-neon-headings": true, - "aura@@aura-colorshemes-dark": "aura-colorschemes-dark-mystical-nights" + "aura@@aura-colorshemes-dark": "aura-colorschemes-dark-mystical-nights", + "aura@@aura-colorshemes-light": "aura-colorschemes-light-origin" } \ No newline at end of file diff --git a/enter/.obsidian/plugins/recent-files-obsidian/data.json b/enter/.obsidian/plugins/recent-files-obsidian/data.json index f07d731..6fe48d5 100644 --- a/enter/.obsidian/plugins/recent-files-obsidian/data.json +++ b/enter/.obsidian/plugins/recent-files-obsidian/data.json @@ -1,5 +1,21 @@ { "recentFiles": [ + { + "basename": "Welcome to Quantum 101", + "path": "Machine Tips (Quantum)/Resources/Welcome to Quantum 101.md" + }, + { + "basename": "Particle Terms", + "path": "Machine Tips (Quantum)/Physics/Particle Terms.md" + }, + { + "basename": "Ions", + "path": "Machine Tips (Quantum)/Physics/Ions.md" + }, + { + "basename": "Quantum 101 - Alt. Resources", + "path": "Machine Tips (Quantum)/Resources/Quantum 101 - Alt. Resources.md" + }, { "basename": "Github", "path": "Coding Tips (Classical)/Terminal Tips/GUIs/Internet/Repos/Github.md" @@ -183,18 +199,6 @@ { "basename": "Workspaces", "path": "Coding Tips (Classical)/Terminal Tips/GUIs/Tools/Workspaces.md" - }, - { - "basename": "Performance Profiling Libraries", - "path": "Coding Tips (Classical)/Terminal Tips/Languages/Python/tools/Libraries/Performance Profiling Libraries.md" - }, - { - "basename": "Neocities", - "path": "Coding Tips (Classical)/Terminal Tips/GUIs/Internet/Hosting/Browser talk/Neocities.md" - }, - { - "basename": "Choosing a Name for Your Computer", - "path": "Coding Tips (Classical)/Terminal Tips/Computers/Choosing a Name for Your Computer.md" } ], "omittedPaths": [], diff --git a/enter/.obsidian/workspace.json b/enter/.obsidian/workspace.json index 913bcc8..9b72ee7 100644 --- a/enter/.obsidian/workspace.json +++ b/enter/.obsidian/workspace.json @@ -13,7 +13,7 @@ "state": { "type": "markdown", "state": { - "file": "Coding Tips (Classical)/Terminal Tips/GUIs/Internet/Repos/Github.md", + "file": "Machine Tips (Quantum)/Resources/Welcome to Quantum 101.md", "mode": "source", "source": false } @@ -81,7 +81,7 @@ "state": { "type": "outline", "state": { - "file": "Coding Tips (Classical)/Terminal Tips/GUIs/Internet/Repos/Github.md" + "file": "Machine Tips (Quantum)/Resources/Welcome to Quantum 101.md" } } }, @@ -91,7 +91,7 @@ "state": { "type": "outgoing-link", "state": { - "file": "Coding Tips (Classical)/Terminal Tips/GUIs/Internet/Repos/Github.md", + "file": "Machine Tips (Quantum)/Resources/Welcome to Quantum 101.md", "linksCollapsed": false, "unlinkedCollapsed": true } @@ -118,8 +118,12 @@ }, "active": "cda3f3fee980f873", "lastOpenFiles": [ - "Recording 20230828054956.webm", + "Machine Tips (Quantum)/Physics/Particle Terms.md", + "Machine Tips (Quantum)/Physics/Ions.md", + "Machine Tips (Quantum)/Resources/Quantum 101 - Alt. Resources.md", + "Machine Tips (Quantum)/Resources/Welcome to Quantum 101.md", "Coding Tips (Classical)/Terminal Tips/GUIs/Internet/Repos/Github.md", + "Recording 20230828054956.webm", "Coding Tips (Classical)/Project Vault/hi.mainsite/Current Occupations/Past/Windtelligent.ai/First Quarter Notebook.md", "Coding Tips (Classical)/Terminal Tips/Languages/About Languages.md", "Machine Tips (Quantum)/Physics/Hardware/Spark Gap Physics.md", @@ -141,9 +145,6 @@ "Coding Tips (Classical)/Project Vault/hi.mainsite/Resume-ish - my occupations.md", "Untitled.md", "Coding Tips (Classical)/Terminal Tips/Languages/Javascript/Example of Javascript plugin works.md", - "Machine Tips (Quantum)/Project Vault/Quantum Master's Paper/Sections/9. Future Research.md", - "Machine Tips (Quantum)/Resources/Code & Circuit Operations/Gates/Single Qubit Gates/P gate (Phase).md", - "Coding Tips (Classical)/Project Vault/hi.mainsite/Thought Catalog - notion export/Medium-worthy affa57a58bc74b09b1311b348ac70a45/The Family Tharavad (1) c4c767d7a0d14fecaf221313371996ac/The Homes 25f3cf42239942eda48517edb2513ecd/33 Windy Hill Lane 58757547a2b14950a1b95cf92b2370d3.md", "Machine Tips (Quantum)/Quantum spaces.canvas", "Untitled.canvas", "Untitled 1.canvas",